From a938761d59d1113890e830cfedbb03cd0dd1f9f5 Mon Sep 17 00:00:00 2001 From: sasse Date: Thu, 6 Mar 2025 14:32:17 +0100 Subject: [PATCH 1/4] fix(autocomplete): handle API params for entities endpoint the OLS4 V2 entities endpoint doesn't accept all parameters which the AutocompleteWidget passes. --- src/api/OlsApi.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/api/OlsApi.ts b/src/api/OlsApi.ts index eddebc0d..7044ebbc 100644 --- a/src/api/OlsApi.ts +++ b/src/api/OlsApi.ts @@ -234,6 +234,23 @@ export class OlsApi implements HierarchyBuilder { return result; } + private buildParamsForEntities(parameter?: string) { + const result: any = {}; + if (parameter) { + const paramsSplitted = parameter.split("&"); + + paramsSplitted.forEach((param: string) => { + const key: string = param.split("=")[0]; + const value: string = param.split("=")[1]; + const finalKey = key === "ontology" ? "ontologyId" : key; + if (finalKey === "ontologyId" || finalKey === "type") { + result[finalKey] = value; + } + }); + } + return result; + } + private buildParamsForSelect( queryParams: SuggestQueryParams, paginationParams?: PaginationParams, @@ -537,7 +554,7 @@ export class OlsApi implements HierarchyBuilder { const typePrefix = getUseLegacy(useLegacy) ? "terms" : "classes"; const params = { iri: contentParams?.termIri, - ...this.buildOtherParams(parameter), + ...this.buildParamsForEntities(parameter), }; return this.makeCall( ontologyPrefix + typePrefix, From 17c2860bcf6fe4f7de13ad4cfe29f4b4d9a77af9 Mon Sep 17 00:00:00 2001 From: sasse Date: Thu, 6 Mar 2025 14:33:03 +0100 Subject: [PATCH 2/4] fix(autocomplete): remove default useLegacy=false value --- .../widgets/AutocompleteWidget/AutocompleteWidget.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/widgets/AutocompleteWidget/AutocompleteWidget.tsx b/src/components/widgets/AutocompleteWidget/AutocompleteWidget.tsx index 4b6e1507..385b41ff 100644 --- a/src/components/widgets/AutocompleteWidget/AutocompleteWidget.tsx +++ b/src/components/widgets/AutocompleteWidget/AutocompleteWidget.tsx @@ -36,7 +36,7 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { ts4nfdiGateway = false, showApiSource = true, className, - useLegacy = false, + useLegacy, ...rest } = props; From 91dba883bcd63823db684f7b1eea1cdc1c9e8ffa Mon Sep 17 00:00:00 2001 From: sasse Date: Thu, 6 Mar 2025 16:27:42 +0100 Subject: [PATCH 3/4] fix(autocomplete): correct parameter handling entities endpoint --- src/api/OlsApi.ts | 4 ++-- .../widgets/AutocompleteWidget/AutocompleteWidgetStories.ts | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/api/OlsApi.ts b/src/api/OlsApi.ts index 7044ebbc..9ccf97ce 100644 --- a/src/api/OlsApi.ts +++ b/src/api/OlsApi.ts @@ -520,7 +520,7 @@ export class OlsApi implements HierarchyBuilder { : ""; const params = { iri: contentParams?.termIri, - ...this.buildOtherParams(parameter), + ...this.buildParamsForEntities(parameter), }; return this.makeCall( queryPrefix + "entities", @@ -554,7 +554,7 @@ export class OlsApi implements HierarchyBuilder { const typePrefix = getUseLegacy(useLegacy) ? "terms" : "classes"; const params = { iri: contentParams?.termIri, - ...this.buildParamsForEntities(parameter), + ...this.buildOtherParams(parameter), }; return this.makeCall( ontologyPrefix + typePrefix, diff --git a/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts b/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts index b13f47e8..886cf53a 100644 --- a/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts +++ b/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts @@ -129,7 +129,8 @@ export const WithPreselectedValueOLS4v2 = { iri: "http://purl.bioontology.org/ontology/MESH/D000086382", }, ], - parameter: "", + parameter: "ontology=snomed,mesh&type=class&fieldList=description,label,iri,ontology_name,type,short_form", + allowCustomTerms: true, }, }; From 68aae2dd33a93d3d917240ae90944ac1d54b531a Mon Sep 17 00:00:00 2001 From: sasse Date: Thu, 6 Mar 2025 16:29:13 +0100 Subject: [PATCH 4/4] docs(autocomplete): add subtree stories --- dist_plainjs/terminology-service-suite.js | 21 ++++- dist_plainjs/terminology-service-suite.min.js | 4 +- src/app/types.ts | 23 ----- .../AutocompleteWidget.stories.tsx | 2 + .../AutocompleteWidgetHTML.stories.ts | 2 + .../AutocompleteWidgetStories.ts | 20 +++++ src/stories/storyArgs.ts | 86 +++++-------------- 7 files changed, 66 insertions(+), 92 deletions(-) diff --git a/dist_plainjs/terminology-service-suite.js b/dist_plainjs/terminology-service-suite.js index e288ffc0..1700a690 100644 --- a/dist_plainjs/terminology-service-suite.js +++ b/dist_plainjs/terminology-service-suite.js @@ -58224,6 +58224,21 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } return result; } + buildParamsForEntities(parameter) { + const result = {}; + if (parameter) { + const paramsSplitted = parameter.split("&"); + paramsSplitted.forEach((param) => { + const key = param.split("=")[0]; + const value2 = param.split("=")[1]; + const finalKey = key === "ontology" ? "ontologyId" : key; + if (finalKey === "ontologyId" || finalKey === "type") { + result[finalKey] = value2; + } + }); + } + return result; + } buildParamsForSelect(queryParams, paginationParams, contentParams, parameters) { const params = { q: queryParams.query @@ -58399,7 +58414,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); const queryPrefix = contentParams?.ontologyId ? "ontologies/" + contentParams?.ontologyId + "/" : ""; const params = { iri: contentParams?.termIri, - ...this.buildOtherParams(parameter) + ...this.buildParamsForEntities(parameter) }; return this.makeCall( queryPrefix + "entities", @@ -129768,7 +129783,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); ts4nfdiGateway = false, showApiSource = true, className, - useLegacy = false, + useLegacy, ...rest } = props; const olsApi = new OlsApi(api); @@ -134564,4 +134579,4 @@ tabbable/dist/index.esm.js: * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE *) */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci90cmFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxCeVRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRBbGxLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1Byb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQm9vbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL251bWVyYWwvbnVtZXJhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVtb2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9sc0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lRGF0YVZpZXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVSZWdFeHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZUJ5VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2xhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3BhcmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2N1c3RvbU9taXRDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0ZsYXR0ZW5hYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZsYXRSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVxdWlyZXMtcG9ydC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmdpZnkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VybC1wYXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VzY2FwZVJlZ0V4cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dsb2JhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZmFpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3BhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2V4cG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21hdGgtdHJ1bmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9mdW5jdGlvbi92aXJ0dWFsL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZmxhdHRlbi1pbnRvLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZsYXQtbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1waXBlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3Qub3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2pzb24vc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvanNvbi9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1idW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC1pbnRlcnZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3NldC10aW1lb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29tcG9uZW50LWVtaXR0ZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AZWdqcy9oYW1tZXJqcy9kaXN0L2hhbW1lci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy92aXMtdXRpbC9lc25leHQvZXNtL3Zpcy11dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcmVmbGVjdC9jb25zdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3JlZmxlY3QvY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9yZWZsZWN0L2NvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvci5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90YXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9xdWV1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy13ZWJvcy13ZWJraXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21pY3JvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wZXJmb3JtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmNhdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UucmVzb2x2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFueS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnByb21pc2Uud2l0aC1yZXNvbHZlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQucHJvbWlzZS50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9yZWdlbmVyYXRvci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnJlZXppbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm1hcC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9tYXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL21hcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2VudHJpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9ybmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL25hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92NC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtaW50ZXJmYWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvcXVldWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC1wYXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc2V0LmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3NldC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zdHJlYW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtdmlldy50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtc2V0LWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS12aWV3LWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9leHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21hdGgtdHJ1bmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2Fzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnRyeS12aXJ0dWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2Z1bmN0aW9uL3ZpcnR1YWwvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9zaGFwZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb21wb25lbnQtZW1pdHRlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5oYXMtaW5zdGFuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaXMtY29uY2F0LXNwcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnJlcGxhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwZWNpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuc3BsaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wudW5zY29wYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheVdpdGhvdXRIb2xlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5kYXRlLm5vdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9kYXRlL25vdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2luY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1yZWdleHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25vdC1hLXJlZ2V4cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3RyaW5nL3ZpcnR1YWwvaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy10cmltLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9udW1iZXItcGFyc2UtaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucGFyc2UtaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3BhcnNlLWludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmluZGV4LW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvaW5kZXgtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luZGV4LW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2pzb24vc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LWludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC10aW1lb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZmlsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9maWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGVnanMvaGFtbWVyanMvZGlzdC9oYW1tZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy92aXMtdXRpbC9lc25leHQvZXNtL3Zpcy11dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9kb3RwYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL2dlcGhpUGFyc2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9sb2NhbGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9DYWNoZWRJbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvSW1hZ2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mcmVlemluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5tYXAuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbWFwL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL0dyb3Vwcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm51bWJlci5pcy1uYW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbnVtYmVyL2lzLW5hbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbnVtYmVyLWlzLWZpbml0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm51bWJlci5pcy1maW5pdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbnVtYmVyL2lzLWZpbml0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zb21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL251bWJlci1wYXJzZS1mbG9hdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnBhcnNlLWZsb2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3BhcnNlLWZsb2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvc2hhcmVkL0NvbXBvbmVudFV0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3NoYXJlZC9MYWJlbEFjY3VtdWxhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvc2hhcmVkL0xhYmVsU3BsaXR0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9zaGFyZWQvTGFiZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5yZWZsZWN0LmNvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9yZWZsZWN0L2NvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvdXRpbC9Ob2RlQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9Cb3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy91dGlsL0NpcmNsZUltYWdlQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9DaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvQ2lyY3VsYXJJbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3V0aWwvU2hhcGVCYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0N1c3RvbVNoYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0RhdGFiYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0RpYW1vbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvRG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0VsbGlwc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvSWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9JbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9TcXVhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvSGV4YWdvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9TdGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL1RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvVHJpYW5nbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvVHJpYW5nbGVEb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvTm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9Ob2Rlc0hhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWRhdGEtZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3QuZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3JlZmxlY3QvZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9nZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3N1cGVyUHJvcEJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5tYXRoLmh5cG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL21hdGgvaHlwb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy91dGlsL2VuZC1wb2ludHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy91dGlsL2VkZ2UtYmFzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL2VkZ2VzL3V0aWwvYmV6aWVyLWVkZ2UtYmFzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL2VkZ2VzL2Jlemllci1lZGdlLWR5bmFtaWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy9iZXppZXItZWRnZS1zdGF0aWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy91dGlsL2N1YmljLWJlemllci1lZGdlLWJhc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy9jdWJpYy1iZXppZXItZWRnZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL2VkZ2VzL3N0cmFpZ2h0LWVkZ2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9FZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL0VkZ2VzSGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvQmFybmVzSHV0U29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9SZXB1bHNpb25Tb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9waHlzaWNzL0hpZXJhcmNoaWNhbFJlcHVsc2lvblNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvU3ByaW5nU29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9IaWVyYXJjaGljYWxTcHJpbmdTb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9waHlzaWNzL0NlbnRyYWxHcmF2aXR5U29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9GQTJCYXNlZFJlcHVsc2lvblNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvRkEyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9QaHlzaWNzRW5naW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3JuZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvbmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3Y0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9OZXR3b3JrVXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL0NsdXN0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvQ2x1c3RlcmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9DYW52YXNSZW5kZXJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LWludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvaGFtbWVyVXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9DYW52YXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvVmlldy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy92aWV3LWhhbmRsZXIvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9rZXljaGFybS9zcmMva2V5Y2hhcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9OYXZpZ2F0aW9uSGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9JbnRlcmFjdGlvbkhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc2V0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLXdlYWsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy53ZWFrLW1hcC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy93ZWFrLW1hcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9zZWxlY3Rpb24vc2VsZWN0aW9uLWFjY3VtdWxhdG9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL1NlbGVjdGlvbkhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL0RpcmVjdGlvblN0cmF0ZWd5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZXZlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9ldmVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9ldmVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZXZlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvbGF5b3V0LWVuZ2luZS9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9MYXlvdXRFbmdpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvTWFuaXB1bGF0aW9uU3lzdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9vcHRpb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvYWxnb3JpdGhtcy9GbG95ZFdhcnNoYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL0thbWFkYUthd2FpLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9OZXR3b3JrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9sb2NhbGUtdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9lbnRyeS1lc25leHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9leHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21hdGgtdHJ1bmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9mdW5jdGlvbi92aXJ0dWFsL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZmxhdHRlbi1pbnRvLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtcGlwZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3N5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3Qub3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2pzb24vc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LWludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC10aW1lb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvbXBvbmVudC1lbWl0dGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGVnanMvaGFtbWVyanMvZGlzdC9oYW1tZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdmlzLXV0aWwvZXNuZXh0L2VzbS92aXMtdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3JlZmxlY3QvY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL3R5cGVvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYW4taW5zdGFuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3F1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9taWNyb3Rhc2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MtcGViYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wZXJmb3JtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuY2F0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJlamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1wdXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYW55LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQucHJvbWlzZS53aXRoLXJlc29sdmVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvcHJvbWlzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLnRyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvcHJvbWlzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvcmVnZW5lcmF0b3IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZyZWV6aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5tYXAuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbWFwL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9lbnRyaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9lbnRyaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2VudHJpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcm5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9uYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLWludGVyZmFjZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL3F1ZXVlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zZXQtcGFydC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zZXQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zdHJlYW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtdmlldy50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtc2V0LWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS12aWV3LWNoZWNrLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvQXV0b2NvbXBsZXRlV2lkZ2V0L0F1dG9jb21wbGV0ZVdpZGdldC50c3giLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Zvcm1EYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Jsb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vY29tbW9uL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NIZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Rocm90dGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90cmFja1N0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2ZldGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvYWRhcHRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCAiLi4vc3JjL21vZGVsL01vZGVsVHlwZUNoZWNrLnRzIiwgIi4uL3NyYy9hcHAvdXRpbC50cyIsICIuLi9zcmMvbW9kZWwvUmVpZmllZC50cyIsICIuLi9zcmMvbW9kZWwvTGlua2VkRW50aXRpZXMudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM1RoaW5nLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNFbnRpdHkudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM0NsYXNzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNQcm9wZXJ0eS50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzSW5kaXZpZHVhbC50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzT250b2xvZ3kudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM09udG9sb2dpZXMudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNFRoaW5nLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRFbnRpdHkudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNENsYXNzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRQcm9wZXJ0eS50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0SW5kaXZpZHVhbC50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0T250b2xvZ3kudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNE9udG9sb2dpZXMudHMiLCAiLi4vc3JjL21vZGVsL01vZGVsT2JqZWN0Q3JlYXRvci50cyIsICIuLi9zcmMvbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHkudHMiLCAiLi4vc3JjL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3QudHMiLCAiLi4vc3JjL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3RSZXN1bHQudHMiLCAiLi4vc3JjL21vZGVsL3RzNG5mZGktbW9kZWwvVHM0bmZkaVNlYXJjaFJlc3VsdC50cyIsICIuLi9zcmMvYXBpL09sc0FwaS50cyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYWNjZXNzaWJpbGl0eS9zY3JlZW5fcmVhZGVyX2xpdmUvc2NyZWVuX3JlYWRlcl9saXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9hY2Nlc3NpYmlsaXR5L3NjcmVlbl9yZWFkZXJfb25seS9zY3JlZW5fcmVhZGVyX29ubHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9odG1sX2lkX2dlbmVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcm5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9yZWdleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdmFsaWRhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9hbGlnbm1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icmVha3BvaW50L2N1cnJlbnRfYnJlYWtwb2ludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tbW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvaG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvdHlwZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2lzX2NvbG9yX2RhcmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9pc192YWxpZF9oZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9oZXhfdG9fcmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2xpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2NsaXBfcmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvdW5wYWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2xhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvQ29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9jaHJvbWEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY215ay9jbXlrMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9jbXlrL3JnYjJjbXlrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2NteWsvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL2hzbDJjc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNsL3JnYjJoc2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL3JnYjJjc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNsL2hzbDJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL2NzczJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2dsL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hjZy9oY2cycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hjZy9yZ2IyaGNnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hjZy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oZXgvaGV4MnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oZXgvcmdiMmhleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oZXgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNpL2hzaTJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNpL3JnYjJoc2kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc3YvaHN2MnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc3YvcmdiMmhzdi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc3YvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL2xhYi1jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL2xhYjJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL3JnYjJsYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9sY2gybGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9sY2gycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9oY2wycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9sYWIybGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9yZ2IybGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9jb2xvcnMvdzNjeDExLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL25hbWVkL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL251bS9udW0ycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL251bS9yZ2IybnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL251bS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9yZ2IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vdGVtcC90ZW1wZXJhdHVyZTJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vdGVtcC9yZ2IydGVtcGVyYXR1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vdGVtcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xhYi9va2xhYjJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vb2tsYWIvcmdiMm9rbGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGFiL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGNoL29rbGNoMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xjaC9yZ2Iyb2tsY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vb2tsY2gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL2FscGhhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9jbGlwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9kYXJrZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL2dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvbHVtaW5hbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvbWl4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9taXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL3ByZW11bHRpcGx5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9zYXR1cmF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvc2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9zaGFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvcmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9scmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9sYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL19oc3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2xjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvbnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9oY2cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2hzaS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvaHNsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9oc3YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL29rbGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9va2xjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvYXZlcmFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3Ivc2NhbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL2Jlemllci5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvYmxlbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL2N1YmVoZWxpeC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvcmFuZG9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2FuYWx5emUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvY29udHJhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvZGVsdGEtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9kaXN0YW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy92YWxpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9zY2FsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvY29sb3JzL2NvbG9yYnJld2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9jb2xvcl9wYWxldHRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvZXVpX3BhbGV0dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvbWFuaXB1bGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvY29udHJhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fY29sb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2FuaW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19icmVha3BvaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL2xvZ2ljYWxzLmpzb24iLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvbG9naWNhbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvbG9naWNhbF9zaG9ydGhhbmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL21hdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvc2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucy90eXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3NpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYm9yZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19sZXZlbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fdHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zdGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL3RoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvd2FybmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLWVsZW1lbnQtZjBkZTk2OGUuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9VdGlsaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi93ZWFrLW1lbW9pemUvZGlzdC9lbW90aW9uLXdlYWstbWVtb2l6ZS5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9lbW90aW9uLW1lbW9pemUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jYWNoZS9kaXN0L2Vtb3Rpb24tY2FjaGUuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvZW1vdGlvbi11dGlscy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MvZGlzdC9lbW90aW9uLXVzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aHJvdHRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2JyZWFrcG9pbnQvX3NvcnRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icmVha3BvaW50L2N1cnJlbnRfYnJlYWtwb2ludF9ob29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvcHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9lbW90aW9uL2Nsb25lX2VsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9lbW90aW9uL3ByZWZpeGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jc3MvY3JlYXRlLWluc3RhbmNlL2Rpc3QvZW1vdGlvbi1jc3MtY3JlYXRlLWluc3RhbmNlLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2Vtb3Rpb24vY3NzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvZW1vdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RoZW1lL3N0eWxlX21lbW9pemF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvaG9va3MvdXNlVXBkYXRlRWZmZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvaG9va3MvdXNlQ29tYmluZWRSZWZzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYnJlYWtwb2ludC9pc193aXRoaW5faG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jYW52YXMvY2FudmFzX3RleHRfdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb3B5L3RhYnVsYXJfY29weS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2ZpbmRFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2NvbW1vbl9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2xvZGFzaF9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9ib29sZWFuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9kYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9udW1iZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X2F1dG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9wb3BvdmVyL3BvcG92ZXJfcG9zaXRpb25pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zZWN1cml0eS9nZXRfc2VjdXJlX3JlbF9mb3JfdGFyZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvc29ydC9zb3J0X2RpcmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL29iamVjdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zb3J0L2NvbXBhcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvcmVzZXQvZ2xvYmFsX3N0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fY29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX2hlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX3BhZGRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX3N0YXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fdHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fcmVzcG9uc2l2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL3Jlc2V0L3Jlc2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL2FuaW1hdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy91dGlsaXR5L2FuaW1hdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2FjY2Vzc2liaWxpdHkvc2NyZWVuX3JlYWRlcl9vbmx5L3NjcmVlbl9yZWFkZXJfb25seS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3RhYmJhYmxlL3NyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL3NoYWRvd3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucy9zaGFkb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b25fZGlzcGxheS9fYnV0dG9uX2Rpc3BsYXkuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uX2Rpc3BsYXkvX2J1dHRvbl9kaXNwbGF5X2NvbnRlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FjY2Vzc2liaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FnZ3JlZ2F0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYWxlcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FuYWx5emVFdmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5hbHl6ZV9ldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5ub3RhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5vbWFseV9jaGFydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5vbWFseV9zd2ltX2xhbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwbV90cmFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FkZF9kYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FwbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FwcF9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hdWRpdGJlYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jYW52YXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jYXNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2NvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jb25zb2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2Rhc2hib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2RldnRvb2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZGlzY292ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9lbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9maWxlYmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2ZsZWV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZ2lzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZ3JhcGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9ncm9rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaGVhcnRiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9sZW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbG9ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21hbmFnZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9tZXRyaWNiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbWV0cmljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbW9uaXRvcmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX25vdGVib29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcGFja2V0YmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3BpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcmVwb3J0aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NlY3VyaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc3BhY2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc3FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdGltZWxpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3VwdGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdmlzdWFsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdnVsbmVyYWJpbGl0eV9tYW5hZ2VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfd2F0Y2hlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93RW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd1N0YXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19kb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19sZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19yaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXJyb3dfdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FydGljbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FzdGVyaXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYmVha2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9iZWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9iZWxsU2xhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JldGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JvbHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JveGVzX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JveGVzX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icmFuY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JyYW5jaFVzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Jyb29tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icnVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9idWxsc2V5ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2FsZW5kYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NoYW5nZV9wb2ludF9kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NoZWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jaGVlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2xpY2tMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbGlja1JpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2xvY2tDb3VudGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZERyaXp6bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nsb3VkU3Rvcm15LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZFN1bm55LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbHVzdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb2xvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29tcHV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29uc29sZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29udGFpbmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QWJvdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZUJlbG93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QmVsb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRyb2xzX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb3B5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb3B5X2NsaXBib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3Jvc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nyb3NzSW5DaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nyb3NzX2luX2NpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3Jvc3NoYWlycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3VycmVuY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2N1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZGF0YWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Rlc2t0b3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RpZmYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Rpc2N1c3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb2N1bWVudEVkaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3RJbkNpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3dubG9hZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9ib2xkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2NvbW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9oZWFkaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfaXRhbGljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3JlZG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9zdHJpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl90YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3VuZGVybGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3VuZG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZW1haWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lbmRwb2ludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lcmFzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lcnJvckZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXNxbFZpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhwYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leHBhbmRNaW5pLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V5ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXllX2Nsb3NlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmFjZV9oYXBweS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmFjZV9uZXV0cmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mYWNlX3NhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmllbGRfc3RhdGlzdGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9maWx0ZXJFeGNsdWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9maWx0ZXJJZ25vcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZpbHRlckluQ2lyY2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9maWx0ZXJJbmNsdWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mbGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkZXJfY2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGRlcl9jbG9zZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZm9sZGVyX29wZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZyYW1lTmV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnJhbWVQcmV2aW91cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnVsbFNjcmVlbkV4aXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Z1bGxfc2NyZWVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ2Vhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ2xvYmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyYWJPbW5pZGlyZWN0aW9uYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ3JhZGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2hlYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWF0bWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWxwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ob21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pSW5DaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ltYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbXBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleFRlbXBvcmFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfY2xvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X2VkaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X2ZsdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9tYXBwaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9vcGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9ydW50aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9zZXR0aW5ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2lucHV0T3V0cHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnNwZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnZlcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2lwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pc3N1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rZXlib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3FsX2ZpZWxkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF9vcGVyYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF92YWx1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3ViZXJuZXRlc05vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xhdW5jaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGF5ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sZXR0ZXJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmVEYXNoZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmVEb3R0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmVTb2xpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGlzdF9hZGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvY2tPcGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dfcGF0dGVybl9hbmFseXNpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nX3JhdGVfYW5hbHlzaXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYWVyb3NwaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2FwYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hcHBfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2F3cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hd3NfbW9uby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19henVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19henVyZV9tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2JlYXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jZXBoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2Nsb3VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jb2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NvZGVzYW5kYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19kb2NrZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZHJvcHdpemFyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbGFzdGljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZWxhc3RpY3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19ldGNkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2djcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19nY3BfbW9uby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19naXRodWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ21haWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ29sYW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2dvb2dsZV9nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2hhcHJveHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29faWJtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2libV9tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2thZmthLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2tpYmFuYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19rdWJlcm5ldGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2xvZ2dpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbG9nc3Rhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbWFwcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tZW1jYWNoZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbWV0cmljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tb25nb2RiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX215c3FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX25naW54LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fb3NxdWVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19waHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fcG9zdGdyZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fcHJvbWV0aGV1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19yYWJiaXRtcS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19yZWRpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19zZWN1cml0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19za2V0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fc2xhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fdXB0aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb193ZWJob29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3dpbmRvd3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dzdGFzaF9pZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX291dHB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hZ25ldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tYXBfbWFya2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW1vcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnVEb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51TGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVudVJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51VXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lcmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9taW5pbWl6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21pbnVzX2luX2NpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXNfaW5fc3F1YXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9hZHZhbmNlZF9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9zaW5nbGVfbWV0cmljX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX3JlZ3Jlc3Npb25fam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tb2JpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21vb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21vdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL25hbWVzcGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbmVzdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9uZXdfY2hhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9vZmZsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9vbmxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhY2thZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhZ2VTZWxlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhZ2VzU2VsZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYWludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFsZXR0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFwZXJfY2xpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFydGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGF1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BheW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BlbmNpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGVyY2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9waW5fZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9waXBlQnJlYWtzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9waXBlTm9CcmVha3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Bpdm90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbGF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbGF5RmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzX2luX2NpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzX2luX3NxdWFyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcG9wb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3F1b3RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9yZWZyZXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9yZXBvcnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcmV0dXJuX2tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2F2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2NhbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NoYXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zaGFyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2luZ2xlX21ldHJpY192aWV3ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Nub3dmbGFrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydEFzY2VuZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydERlc2NlbmRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zb3J0UmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRfZG93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydF91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NwYWNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3BhcmtsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJQbHVzRW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJQbHVzRmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfbWludXNfZW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RvcF9maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3Bfc2xhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3JhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3VibW9kdWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N3YXRjaF9pbnB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3ltbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGFibGVPZkNvbnRlbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RlbXBlcmF0dXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90aW1lUmVmcmVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGltZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RpbWVsaW5lV2l0aEFycm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90aW1lc2xpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFsaWFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFubm90YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQmluYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkJvb2xlYW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ2xhc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Db25zdGFudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5EYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkRpbWVuc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkVudW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRW51bU1lbWJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FdmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FeGNlcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRmllbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5GbGF0dGVuZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuR2VvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkhpc3RvZ3JhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5JUC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5JbnRlcmZhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuSm9pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5LZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuS2V5d29yZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5NZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Nb2R1bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTmFtZXNwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk5lc3RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5OdWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk51bWJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5PYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuT3BlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUGFja2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5QYXJhbWV0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUGVyY29sYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Qcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUmVwby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TZWFyY2hUeXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblNlbWFudGljVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TaGFwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuU3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5UYWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblZhcmlhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblZlY3RvckRlbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblZlY3RvclNwYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdHJhaW5pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYW5zaXRpb25MZWZ0SW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYW5zaXRpb25MZWZ0T3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90cmFuc2l0aW9uVG9wSW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYW5zaXRpb25Ub3BPdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy91bmZvbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3VubGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlckF2YXRhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3ZlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlkZW9QbGF5ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19hcmVhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYXJlYV9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19nYXVnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2dvYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19saW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19tYXBfcmVnaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWV0cmljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfcGllLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190YWdfY2xvdWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGltZWxpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc192ZWdhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dhcm5pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dhcm5pbmdGaWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dvcmRXcmFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93b3JkV3JhcERpc2FibGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93cmVuY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vaWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9pY29uX21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3JlYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL25hbWVkX2NvbG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9pY29uLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaTE4bi9pMThuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0L2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2kxOG4vaTE4bl91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9sb2FkaW5nL19sb2FkaW5nX3N0cmluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZ19zcGlubmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9sb2FkaW5nL2xvYWRpbmdfc3Bpbm5lci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b25fZGlzcGxheS9fYnV0dG9uX2Rpc3BsYXlfY29udGVudC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9lbXB0eS9idXR0b25fZW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b25fZW1wdHkvYnV0dG9uX2VtcHR5LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9pY29uL2J1dHRvbl9pY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uX2ljb24vYnV0dG9uX2ljb24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbm5lcl90ZXh0L2lubmVyX3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Rvb2xfdGlwL3Rvb2xfdGlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9vYnNlcnZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9ydGFsL3BvcnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcHJvdmlkZXIvY29tcG9uZW50X2RlZmF1bHRzL2NvbXBvbmVudF9kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdG9vbF90aXAvdG9vbF90aXBfcG9wb3Zlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdG9vbF90aXAvdG9vbF90aXAuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC90b29sX3RpcF9hbmNob3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Rvb2xfdGlwL3Rvb2xfdGlwX2Fycm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC90b29sX3RpcF9tYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC9pY29uX3RpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHRfY29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9jb2xvci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9hbGlnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0X2FsaWduLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbGluay9saW5rLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHQuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyL2Rpc3QvcmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2F1dG9fc2l6ZXIvYXV0b19zaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvYmFkZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbG9yX3BpY2tlci91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvY29sb3JfdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2JhZGdlL2JhZGdlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvYmV0YV9iYWRnZS9iZXRhX2JhZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYWRnZS9iZXRhX2JhZGdlL2JldGFfYmFkZ2Uuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9saW5rL2xpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xpbmsvZXh0ZXJuYWxfbGlua19pY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL2lucHV0X3BvcG92ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZvY3VzX3RyYXAvZm9jdXNfdHJhcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L0NvbWJpbmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9VSS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvVUkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLWNhbGxiYWNrLXJlZi9kaXN0L2VzMjAxNS9hc3NpZ25SZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1jYWxsYmFjay1yZWYvZGlzdC9lczIwMTUvdXNlUmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2UtY2FsbGJhY2stcmVmL2Rpc3QvZXMyMDE1L3VzZU1lcmdlUmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLXNpZGVjYXIvZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9kaXN0L2VzMjAxNS9leHBvcnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvTG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvRm9jdXNHdWFyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvc2NvcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9VSS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L1RyYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtY2xpZW50c2lkZS1lZmZlY3QvbGliL2luZGV4LmVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2lzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYk9yZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYmJhYmxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy90YWJVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9ET011dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9hbGwtYWZmZWN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvc2FmZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9nZXRBY3RpdmVFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzSW5zaWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzSXNIaWRkZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvY29ycmVjdEZvY3VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2ZpcnN0Rm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvc29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2F1dG8tZm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvcGFyZW50aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzU29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvY29tbWFuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvbW92ZUZvY3VzSW5zaWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3JldHVybi1mb2N1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9zaWJsaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3NpZGVjYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L1NpZGVFZmZlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L2NvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2hvb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dldC1ub25jZS9kaXN0L2VzMjAxNS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L3NpbmdsZXRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2NvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L2FnZ3Jlc2l2ZUNhcHR1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L2hhbmRsZVNjcm9sbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvc2lkZWNhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvRWZmZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmlhLWhpZGRlbi9kaXN0L2VzMjAxNS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvSW50ZXJhY3Rpdml0eURpc2FibGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9zaWRlY2FyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL29ic2VydmVyL211dGF0aW9uX29ic2VydmVyL211dGF0aW9uX29ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdXRzaWRlX2NsaWNrX2RldGVjdG9yL291dHNpZGVfY2xpY2tfZGV0ZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlcl9hcnJvdy9fcG9wb3Zlcl9hcnJvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX2Fycm93L19wb3BvdmVyX2Fycm93LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX3BhbmVsL19wb3BvdmVyX3BhbmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wYW5lbC9wYW5lbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFuZWwvcGFuZWwuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXJfcGFuZWwvX3BvcG92ZXJfcGFuZWwuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jYWxsX291dC9jYWxsX291dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc3BhY2VyL3NwYWNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc3BhY2VyL3NwYWNlci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RpdGxlL3RpdGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jYWxsX291dC9jYWxsX291dC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NhcmQvY2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY2FyZC9jYXJkX3NlbGVjdC9jYXJkX3NlbGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY2FyZC9jYXJkX3NlbGVjdC9jYXJkX3NlbGVjdC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NhcmQvY2FyZC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vY2hlY2tib3gvY2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vY2hlY2tib3gvY2hlY2tib3guc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fbGFiZWwvZm9ybV9sYWJlbC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZsZXgvZmxleF9ncm91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZmxleC9mbGV4X2dyb3VwLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZmxleC9mbGV4X2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZsZXgvZmxleF9pdGVtLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9ldWlfZm9ybV9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL3ZhbGlkYXRhYmxlX2NvbnRyb2wvdmFsaWRhdGFibGVfY29udHJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9sYWJlbC9mb3JtX2xhYmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9pY29ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXRfY2xlYXJfYnV0dG9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9jbGVhcl9idXR0b24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9jdXN0b21faWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXRfaWNvbnMuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvX251bV9pY29ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXQuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2ZpZWxkX3NlYXJjaC9maWVsZF9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icm93c2VyL2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZmllbGRfc2VhcmNoL2ZpZWxkX3NlYXJjaC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9lcnJvcl90ZXh0L2Zvcm1fZXJyb3JfdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2Vycm9yX3RleHQvZm9ybV9lcnJvcl90ZXh0LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2hlbHBfdGV4dC9mb3JtX2hlbHBfdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2hlbHBfdGV4dC9mb3JtX2hlbHBfdGV4dC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9yb3cvZm9ybV9yb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9yb3cvZm9ybV9yb3cuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9ob3Jpem9udGFsX3J1bGUvaG9yaXpvbnRhbF9ydWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9ob3Jpem9udGFsX3J1bGUvaG9yaXpvbnRhbF9ydWxlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9wYW5lbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0X21lbnUvY29udGV4dF9tZW51X2l0ZW0uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0X21lbnUvY29udGV4dF9tZW51LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9wYW5lbC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vc3dpdGNoL3N3aXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9zd2l0Y2gvc3dpdGNoLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY3NzL2Rpc3QvZW1vdGlvbi1jc3MuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdmVybGF5X21hc2svb3ZlcmxheV9tYXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdmVybGF5X21hc2svb3ZlcmxheV9tYXNrLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvb3ZlcmxheV9tYXNrL292ZXJsYXlfbWFza19ib2R5LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvbm9kZV9tb2R1bGVzL21lbW9pemUtb25lL2Rpc3QvbWVtb2l6ZS1vbmUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL3RpbWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2RvbUhlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvY3JlYXRlR3JpZENvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9WYXJpYWJsZVNpemVHcmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2NyZWF0ZUxpc3RDb21wb25lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvVmFyaWFibGVTaXplTGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9GaXhlZFNpemVHcmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL0ZpeGVkU2l6ZUxpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvc2hhbGxvd0RpZmZlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvYXJlRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvc2hvdWxkQ29tcG9uZW50VXBkYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvY29tYm9fYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvbWF0Y2hpbmdfb3B0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfcGlsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfcGlsbC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfaW5wdXQvY29tYm9fYm94X2lucHV0LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9vcHRpb25zX2xpc3QvY29tYm9fYm94X29wdGlvbnNfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaGlnaGxpZ2h0L2hpZ2hsaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbWFyay9tYXJrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9tYXJrL21hcmsuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9oaWdobGlnaHQvX2hpZ2hsaWdodF9hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hpZ2hsaWdodC9faGlnaGxpZ2h0X2ZpcnN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9maWx0ZXJfZ3JvdXAvZmlsdGVyX3NlbGVjdF9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9maWx0ZXJfZ3JvdXAvZmlsdGVyX3NlbGVjdF9pdGVtLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dF90cnVuY2F0ZS90ZXh0X3RydW5jYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0X3RydW5jYXRlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0X3RydW5jYXRlL3RleHRfdHJ1bmNhdGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0X3RydW5jYXRlL3RleHRfYmxvY2tfdHJ1bmNhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfb3B0aW9uc19saXN0L2NvbWJvX2JveF90aXRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9vcHRpb25zX2xpc3QvY29tYm9fYm94X29wdGlvbnNfbGlzdC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3guc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9wYWdpbmF0aW9uL3RhYmxlX3BhZ2luYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uX2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uX2J1dHRvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbl9idXR0b25fYXJyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3BhZ2luYXRpb24vdGFibGVfcGFnaW5hdGlvbl9kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZGVzY3JpcHRpb25fbGlzdC9kZXNjcmlwdGlvbl9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9kZXNjcmlwdGlvbl9saXN0L2Rlc2NyaXB0aW9uX2xpc3RfY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZGVzY3JpcHRpb25fbGlzdC9kZXNjcmlwdGlvbl9saXN0X3RpdGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9kZXNjcmlwdGlvbl9saXN0L2Rlc2NyaXB0aW9uX2xpc3RfdGl0bGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9kZXNjcmlwdGlvbl9saXN0L2Rlc2NyaXB0aW9uX2xpc3RfZGVzY3JpcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Rlc2NyaXB0aW9uX2xpc3QvZGVzY3JpcHRpb25fbGlzdF9kZXNjcmlwdGlvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Rlc2NyaXB0aW9uX2xpc3QvZGVzY3JpcHRpb25fbGlzdC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJzL3RhYi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFic19jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJzL3RhYnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFicy5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFiYmVkX2NvbnRlbnQvdGFiYmVkX2NvbnRlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2RlbGF5X3JlbmRlci9kZWxheV9yZW5kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hlYWx0aC9oZWFsdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hlYWx0aC9oZWFsdGguc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2Vfd3JhcHBlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2Vfd3JhcHBlci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfYnV0dG9uLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfY2FwdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfY2FwdGlvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfZnVsbHNjcmVlbl93cmFwcGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV9mdWxsc2NyZWVuX3dyYXBwZXIuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcHJvdmlkZXIvcHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy91dGlsaXR5L3V0aWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Byb3ZpZGVyL2NhY2hlL2NhY2hlX3Byb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wcm92aWRlci9zeXN0ZW1fY29sb3JfbW9kZS9zeXN0ZW1fY29sb3JfbW9kZV9wcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcHJvdmlkZXIvbmVzdGVkL25lc3RlZF9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9zZWFyY2gvc2VsZWN0YWJsZV9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvbWF0Y2hpbmdfb3B0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlX21lc3NhZ2Uvc2VsZWN0YWJsZV9tZXNzYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfbWVzc2FnZS9zZWxlY3RhYmxlX21lc3NhZ2Uuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfbGlzdC9zZWxlY3RhYmxlX2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9saXN0L3NlbGVjdGFibGVfbGlzdF9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfbGlzdC9zZWxlY3RhYmxlX2xpc3RfaXRlbS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9saXN0L3NlbGVjdGFibGVfbGlzdC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS9tb2JpbGUvcmVzcG9uc2l2ZV9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2JvZHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2Zvb3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfZm9vdGVyX2NlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS9fdGFibGVfY2VsbF9jb250ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS9fdGFibGVfY2VsbF9jb250ZW50LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfY2VsbHNfc2hhcmVkLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfaGVhZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9oZWFkZXJfY2VsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfaGVhZGVyX2NlbGxfY2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL21vYmlsZS90YWJsZV9oZWFkZXJfbW9iaWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS9tb2JpbGUvdGFibGVfaGVhZGVyX21vYmlsZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL21vYmlsZS90YWJsZV9zb3J0X21vYmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX3NvcnRfbW9iaWxlX2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3Jvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93X2NlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3Jvd19jZWxsLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93X2NlbGxfY2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2Jhc2ljX3RhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9jb2xsYXBzZWRfaXRlbV9hY3Rpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9hY3Rpb25fdHlwZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2V4cGFuZGVkX2l0ZW1fYWN0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvZGVmYXVsdF9pdGVtX2FjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvY3VzdG9tX2l0ZW1fYWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9wYWdpbmF0aW9uX2Jhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvYmFzaWNfdGFibGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3N1YnNjcmliYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9mb2N1c01hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvb25saW5lTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9yZXRyeWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL25vdGlmeU1hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbXV0YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbXV0YXRpb25DYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnlDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnlPYnNlcnZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvcmVhY3RCYXRjaGVkVXBkYXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3Qvc2V0QmF0Y2hVcGRhdGVzRm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L2xvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3Qvc2V0TG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9RdWVyeUNsaWVudFByb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9RdWVyeUVycm9yUmVzZXRCb3VuZGFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3VzZUJhc2VRdWVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvdXNlUXVlcnkuanMiLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9CcmVhZGNydW1iV2lkZ2V0L0JyZWFkY3J1bWJQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvRGF0YUNvbnRlbnRXaWRnZXQvRGF0YUNvbnRlbnRXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvRW50aXR5SW5mb1dpZGdldC9FbnRpdHlJbmZvV2lkZ2V0LnRzeCIsICIuLi9zcmMvbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0pzb25BcGlXaWRnZXQvSnNvbkFwaVdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9CcmVhZGNydW1iV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvRGVzY3JpcHRpb25XaWRnZXQvRGVzY3JpcHRpb25XaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvRGVzY3JpcHRpb25XaWRnZXQvRGVzY3JpcHRpb25QcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvSXJpV2lkZ2V0L0lyaVdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvVGFiV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9UYWJQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0Nyb3NzUmVmV2lkZ2V0L0Nyb3NzUmVmVGFiUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL09udG9sb2d5SW5mb1dpZGdldC9PbnRvbG9neUluZm9XaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0hpZXJhcmNoeVdpZGdldC9IaWVyYXJjaHlXaWRnZXQudHN4IiwgIi4uL3NyYy9hcGkvU2tvc0FwaS50cyIsICIuLi9zcmMvYXBpL09udG9Qb3J0YWxBcGkudHMiLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQ3Jvc3NSZWZXaWRnZXQvQ3Jvc3NSZWZUYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGl0bGVXaWRnZXQvVGl0bGVXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGl0bGVXaWRnZXQvVGl0bGVQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvTWV0YWRhdGFXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvRW50aXR5T250b0xpc3RXaWRnZXQvRW50aXR5T250b0xpc3RQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvRW50aXR5RGVmaW5lZEJ5V2lkZ2V0L0VudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9SZXNvdXJjZXNXaWRnZXQvUmVzb3VyY2VzV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL1NlYXJjaEJhcldpZGdldC9TZWFyY2hCYXJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvTWV0YWRhdGFDb21wYWN0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvRW50aXR5UmVsYXRpb25zV2lkZ2V0L0VudGl0eVJlbGF0aW9uc1dpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9UZXJtRGVwaWN0aW9uV2lkZ2V0L1Rlcm1EZXBpY3Rpb25XaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvR3JhcGhWaWV3V2lkZ2V0L0dyYXBoVmlld1dpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxuLy8gVE9ETzogdGhpcyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgZ2V0cyBpbXBvcnRlZCBkdXJpbmcgYnVpbGQuXG52YXIgUmVhY3RWZXJzaW9uID0gJzE3LjAuMic7XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSAweGVhY2E7XG5leHBvcnRzLkZyYWdtZW50ID0gMHhlYWNiO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gMHhlYWNjO1xuZXhwb3J0cy5Qcm9maWxlciA9IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IDB4ZWFjZTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gMHhlYWQwO1xuZXhwb3J0cy5TdXNwZW5zZSA9IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gMHhlYWQ5O1xudmFyIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gMHhlYWRhO1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSAweGVhZDU7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IDB4ZWFkNztcbnZhciBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IDB4ZWFlMDtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IDB4ZWFlMTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IDB4ZWFlMjtcbnZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSAweGVhZTM7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZWxlbWVudCcpO1xuICBSRUFDVF9QT1JUQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucG9ydGFsJyk7XG4gIGV4cG9ydHMuRnJhZ21lbnQgPSBzeW1ib2xGb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG4gIGV4cG9ydHMuU3RyaWN0TW9kZSA9IHN5bWJvbEZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbiAgZXhwb3J0cy5Qcm9maWxlciA9IHN5bWJvbEZvcigncmVhY3QucHJvZmlsZXInKTtcbiAgUkVBQ1RfUFJPVklERVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvdmlkZXInKTtcbiAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5jb250ZXh0Jyk7XG4gIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG4gIGV4cG9ydHMuU3VzcGVuc2UgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG4gIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xuICBSRUFDVF9NRU1PX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm1lbW8nKTtcbiAgUkVBQ1RfTEFaWV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sYXp5Jyk7XG4gIFJFQUNUX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmJsb2NrJyk7XG4gIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zZXJ2ZXIuYmxvY2snKTtcbiAgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnVuZGFtZW50YWwnKTtcbiAgUkVBQ1RfU0NPUEVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2NvcGUnKTtcbiAgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9wYXF1ZS5pZCcpO1xuICBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZGVidWdfdHJhY2VfbW9kZScpO1xuICBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG4gIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGVnYWN5X2hpZGRlbicpO1xufVxuXG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBkaXNwYXRjaGVyLlxuICovXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IGJhdGNoJ3MgY29uZmlndXJhdGlvbiBzdWNoIGFzIGhvdyBsb25nIGFuIHVwZGF0ZVxuICogc2hvdWxkIHN1c3BlbmQgZm9yIGlmIGl0IG5lZWRzIHRvLlxuICovXG52YXIgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcgPSB7XG4gIHRyYW5zaXRpb246IDBcbn07XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgb3duZXIuXG4gKlxuICogVGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIGNvbXBvbmVudCB3aG8gc2hvdWxkIG93biBhbnkgY29tcG9uZW50cyB0aGF0IGFyZVxuICogY3VycmVudGx5IGJlaW5nIGNvbnN0cnVjdGVkLlxuICovXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge1JlYWN0Q29tcG9uZW50fVxuICAgKi9cbiAgY3VycmVudDogbnVsbFxufTtcblxudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSB7fTtcbnZhciBjdXJyZW50RXh0cmFTdGFja0ZyYW1lID0gbnVsbDtcbmZ1bmN0aW9uIHNldEV4dHJhU3RhY2tGcmFtZShzdGFjaykge1xuICB7XG4gICAgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IHN0YWNrO1xuICB9XG59XG5cbntcbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUgPSBmdW5jdGlvbiAoc3RhY2spIHtcbiAgICB7XG4gICAgICBjdXJyZW50RXh0cmFTdGFja0ZyYW1lID0gc3RhY2s7XG4gICAgfVxuICB9OyAvLyBTdGFjayBpbXBsZW1lbnRhdGlvbiBpbmplY3RlZCBieSB0aGUgY3VycmVudCByZW5kZXJlci5cblxuXG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrID0gbnVsbDtcblxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YWNrID0gJyc7IC8vIEFkZCBhbiBleHRyYSB0b3AgZnJhbWUgd2hpbGUgYW4gZWxlbWVudCBpcyBiZWluZyB2YWxpZGF0ZWRcblxuICAgIGlmIChjdXJyZW50RXh0cmFTdGFja0ZyYW1lKSB7XG4gICAgICBzdGFjayArPSBjdXJyZW50RXh0cmFTdGFja0ZyYW1lO1xuICAgIH0gLy8gRGVsZWdhdGUgdG8gdGhlIGluamVjdGVkIHJlbmRlcmVyLXNwZWNpZmljIGltcGxlbWVudGF0aW9uXG5cblxuICAgIHZhciBpbXBsID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2s7XG5cbiAgICBpZiAoaW1wbCkge1xuICAgICAgc3RhY2sgKz0gaW1wbCgpIHx8ICcnO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFjaztcbiAgfTtcbn1cblxuLyoqXG4gKiBVc2VkIGJ5IGFjdCgpIHRvIHRyYWNrIHdoZXRoZXIgeW91J3JlIGluc2lkZSBhbiBhY3QoKSBzY29wZS5cbiAqL1xudmFyIElzU29tZVJlbmRlcmVyQWN0aW5nID0ge1xuICBjdXJyZW50OiBmYWxzZVxufTtcblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0ge1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyOiBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzogUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsXG4gIFJlYWN0Q3VycmVudE93bmVyOiBSZWFjdEN1cnJlbnRPd25lcixcbiAgSXNTb21lUmVuZGVyZXJBY3Rpbmc6IElzU29tZVJlbmRlcmVyQWN0aW5nLFxuICAvLyBVc2VkIGJ5IHJlbmRlcmVycyB0byBhdm9pZCBidW5kbGluZyBvYmplY3QtYXNzaWduIHR3aWNlIGluIFVNRCBidW5kbGVzOlxuICBhc3NpZ246IF9hc3NpZ25cbn07XG5cbntcbiAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG59XG5cbi8vIGJ5IGNhbGxzIHRvIHRoZXNlIG1ldGhvZHMgYnkgYSBCYWJlbCBwbHVnaW4uXG4vL1xuLy8gSW4gUFJPRCAob3IgaW4gcGFja2FnZXMgd2l0aG91dCBhY2Nlc3MgdG8gUmVhY3QgaW50ZXJuYWxzKSxcbi8vIHRoZXkgYXJlIGxlZnQgYXMgdGhleSBhcmUgaW5zdGVhZC5cblxuZnVuY3Rpb24gd2Fybihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnd2FybicsIGZvcm1hdCwgYXJncyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfVxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiAnJyArIGl0ZW07XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG52YXIgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ID0ge307XG5cbmZ1bmN0aW9uIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBjYWxsZXJOYW1lKSB7XG4gIHtcbiAgICB2YXIgX2NvbnN0cnVjdG9yID0gcHVibGljSW5zdGFuY2UuY29uc3RydWN0b3I7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBfY29uc3RydWN0b3IgJiYgKF9jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCBfY29uc3RydWN0b3IubmFtZSkgfHwgJ1JlYWN0Q2xhc3MnO1xuICAgIHZhciB3YXJuaW5nS2V5ID0gY29tcG9uZW50TmFtZSArIFwiLlwiICsgY2FsbGVyTmFtZTtcblxuICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlcnJvcihcIkNhbid0IGNhbGwgJXMgb24gYSBjb21wb25lbnQgdGhhdCBpcyBub3QgeWV0IG1vdW50ZWQuIFwiICsgJ1RoaXMgaXMgYSBuby1vcCwgYnV0IGl0IG1pZ2h0IGluZGljYXRlIGEgYnVnIGluIHlvdXIgYXBwbGljYXRpb24uICcgKyAnSW5zdGVhZCwgYXNzaWduIHRvIGB0aGlzLnN0YXRlYCBkaXJlY3RseSBvciBkZWZpbmUgYSBgc3RhdGUgPSB7fTtgICcgKyAnY2xhc3MgcHJvcGVydHkgd2l0aCB0aGUgZGVzaXJlZCBzdGF0ZSBpbiB0aGUgJXMgY29tcG9uZW50LicsIGNhbGxlck5hbWUsIGNvbXBvbmVudE5hbWUpO1xuXG4gICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldID0gdHJ1ZTtcbiAgfVxufVxuLyoqXG4gKiBUaGlzIGlzIHRoZSBhYnN0cmFjdCBBUEkgZm9yIGFuIHVwZGF0ZSBxdWV1ZS5cbiAqL1xuXG5cbnZhciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IHtcbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2Ugd2Ugd2FudCB0byB0ZXN0LlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHByb3RlY3RlZFxuICAgKiBAZmluYWxcbiAgICovXG4gIGlzTW91bnRlZDogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoXG4gICAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gICAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlXG4gICAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IGNhbGxlck5hbWUgbmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ2ZvcmNlVXBkYXRlJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS5cbiAgICogWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjb21wbGV0ZVN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAncmVwbGFjZVN0YXRlJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2UgX3BlbmRpbmdTdGF0ZSBpc1xuICAgKiBpbnRlcm5hbC4gVGhpcyBwcm92aWRlcyBhIG1lcmdpbmcgc3RyYXRlZ3kgdGhhdCBpcyBub3QgYXZhaWxhYmxlIHRvIGRlZXBcbiAgICogcHJvcGVydGllcyB3aGljaCBpcyBjb25mdXNpbmcuIFRPRE86IEV4cG9zZSBwZW5kaW5nU3RhdGUgb3IgZG9uJ3QgdXNlIGl0XG4gICAqIGR1cmluZyB0aGUgbWVyZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBzdGF0ZS5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBOYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpO1xuICB9XG59O1xuXG52YXIgZW1wdHlPYmplY3QgPSB7fTtcblxue1xuICBPYmplY3QuZnJlZXplKGVtcHR5T2JqZWN0KTtcbn1cbi8qKlxuICogQmFzZSBjbGFzcyBoZWxwZXJzIGZvciB0aGUgdXBkYXRpbmcgc3RhdGUgb2YgYSBjb21wb25lbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OyAvLyBJZiBhIGNvbXBvbmVudCBoYXMgc3RyaW5nIHJlZnMsIHdlIHdpbGwgYXNzaWduIGEgZGlmZmVyZW50IG9iamVjdCBsYXRlci5cblxuICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDsgLy8gV2UgaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB1cGRhdGVyIGJ1dCB0aGUgcmVhbCBvbmUgZ2V0cyBpbmplY3RlZCBieSB0aGVcbiAgLy8gcmVuZGVyZXIuXG5cbiAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcbn1cblxuQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG4vKipcbiAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgdG8gbXV0YXRlXG4gKiBzdGF0ZS4gWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICpcbiAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICpcbiAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGNhbGxzIHRvIGBzZXRTdGF0ZWAgd2lsbCBydW4gc3luY2hyb25vdXNseSxcbiAqIGFzIHRoZXkgbWF5IGV2ZW50dWFsbHkgYmUgYmF0Y2hlZCB0b2dldGhlci4gIFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbFxuICogY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGNhbGwgdG8gc2V0U3RhdGUgaXMgYWN0dWFsbHlcbiAqIGNvbXBsZXRlZC5cbiAqXG4gKiBXaGVuIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gc2V0U3RhdGUsIGl0IHdpbGwgYmUgY2FsbGVkIGF0IHNvbWUgcG9pbnQgaW5cbiAqIHRoZSBmdXR1cmUgKG5vdCBzeW5jaHJvbm91c2x5KS4gSXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgdXAgdG8gZGF0ZVxuICogY29tcG9uZW50IGFyZ3VtZW50cyAoc3RhdGUsIHByb3BzLCBjb250ZXh0KS4gVGhlc2UgdmFsdWVzIGNhbiBiZSBkaWZmZXJlbnRcbiAqIGZyb20gdGhpcy4qIGJlY2F1c2UgeW91ciBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGFmdGVyIHJlY2VpdmVQcm9wcyBidXQgYmVmb3JlXG4gKiBzaG91bGRDb21wb25lbnRVcGRhdGUsIGFuZCB0aGlzIG5ldyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHdpbGwgbm90IHlldCBiZVxuICogYXNzaWduZWQgdG8gdGhpcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdHxmdW5jdGlvbn0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSBvciBmdW5jdGlvbiB0b1xuICogICAgICAgIHByb2R1Y2UgbmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIGN1cnJlbnQgc3RhdGUuXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHN0YXRlIGlzIHVwZGF0ZWQuXG4gKiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuXG5Db21wb25lbnQucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2spIHtcbiAgaWYgKCEodHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyB8fCBwYXJ0aWFsU3RhdGUgPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcywgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgJ3NldFN0YXRlJyk7XG59O1xuLyoqXG4gKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoXG4gKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAqXG4gKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAqXG4gKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlXG4gKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICpcbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgdXBkYXRlIGlzIGNvbXBsZXRlLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuXG5Db21wb25lbnQucHJvdG90eXBlLmZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHRoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcywgY2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpO1xufTtcbi8qKlxuICogRGVwcmVjYXRlZCBBUElzLiBUaGVzZSBBUElzIHVzZWQgdG8gZXhpc3Qgb24gY2xhc3NpYyBSZWFjdCBjbGFzc2VzIGJ1dCBzaW5jZVxuICogd2Ugd291bGQgbGlrZSB0byBkZXByZWNhdGUgdGhlbSwgd2UncmUgbm90IGdvaW5nIHRvIG1vdmUgdGhlbSBvdmVyIHRvIHRoaXNcbiAqIG1vZGVybiBiYXNlIGNsYXNzLiBJbnN0ZWFkLCB3ZSBkZWZpbmUgYSBnZXR0ZXIgdGhhdCB3YXJucyBpZiBpdCdzIGFjY2Vzc2VkLlxuICovXG5cblxue1xuICB2YXIgZGVwcmVjYXRlZEFQSXMgPSB7XG4gICAgaXNNb3VudGVkOiBbJ2lzTW91bnRlZCcsICdJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGluZyByZXF1ZXN0cyBpbiAnICsgJ2NvbXBvbmVudFdpbGxVbm1vdW50IHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzLiddLFxuICAgIHJlcGxhY2VTdGF0ZTogWydyZXBsYWNlU3RhdGUnLCAnUmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBzZXRTdGF0ZSBpbnN0ZWFkIChzZWUgJyArICdodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzMyMzYpLiddXG4gIH07XG5cbiAgdmFyIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyA9IGZ1bmN0aW9uIChtZXRob2ROYW1lLCBpbmZvKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbXBvbmVudC5wcm90b3R5cGUsIG1ldGhvZE5hbWUsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB3YXJuKCclcyguLi4pIGlzIGRlcHJlY2F0ZWQgaW4gcGxhaW4gSmF2YVNjcmlwdCBSZWFjdCBjbGFzc2VzLiAlcycsIGluZm9bMF0sIGluZm9bMV0pO1xuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgZm9yICh2YXIgZm5OYW1lIGluIGRlcHJlY2F0ZWRBUElzKSB7XG4gICAgaWYgKGRlcHJlY2F0ZWRBUElzLmhhc093blByb3BlcnR5KGZuTmFtZSkpIHtcbiAgICAgIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhmbk5hbWUsIGRlcHJlY2F0ZWRBUElzW2ZuTmFtZV0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBDb21wb25lbnREdW1teSgpIHt9XG5cbkNvbXBvbmVudER1bW15LnByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4vKipcbiAqIENvbnZlbmllbmNlIGNvbXBvbmVudCB3aXRoIGRlZmF1bHQgc2hhbGxvdyBlcXVhbGl0eSBjaGVjayBmb3Igc0NVLlxuICovXG5cbmZ1bmN0aW9uIFB1cmVDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OyAvLyBJZiBhIGNvbXBvbmVudCBoYXMgc3RyaW5nIHJlZnMsIHdlIHdpbGwgYXNzaWduIGEgZGlmZmVyZW50IG9iamVjdCBsYXRlci5cblxuICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcbn1cblxudmFyIHB1cmVDb21wb25lbnRQcm90b3R5cGUgPSBQdXJlQ29tcG9uZW50LnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnREdW1teSgpO1xucHVyZUNvbXBvbmVudFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFB1cmVDb21wb25lbnQ7IC8vIEF2b2lkIGFuIGV4dHJhIHByb3RvdHlwZSBqdW1wIGZvciB0aGVzZSBtZXRob2RzLlxuXG5fYXNzaWduKHB1cmVDb21wb25lbnRQcm90b3R5cGUsIENvbXBvbmVudC5wcm90b3R5cGUpO1xuXG5wdXJlQ29tcG9uZW50UHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ID0gdHJ1ZTtcblxuLy8gYW4gaW1tdXRhYmxlIG9iamVjdCB3aXRoIGEgc2luZ2xlIG11dGFibGUgdmFsdWVcbmZ1bmN0aW9uIGNyZWF0ZVJlZigpIHtcbiAgdmFyIHJlZk9iamVjdCA9IHtcbiAgICBjdXJyZW50OiBudWxsXG4gIH07XG5cbiAge1xuICAgIE9iamVjdC5zZWFsKHJlZk9iamVjdCk7XG4gIH1cblxuICByZXR1cm4gcmVmT2JqZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIG91dGVyVHlwZS5kaXNwbGF5TmFtZSB8fCAoZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBleHBvcnRzLkZyYWdtZW50OlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBleHBvcnRzLlByb2ZpbGVyOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIGV4cG9ydHMuU3RyaWN0TW9kZTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIGV4cG9ydHMuU3VzcGVuc2U6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBSRVNFUlZFRF9QUk9QUyA9IHtcbiAga2V5OiB0cnVlLFxuICByZWY6IHRydWUsXG4gIF9fc2VsZjogdHJ1ZSxcbiAgX19zb3VyY2U6IHRydWVcbn07XG52YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24sIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duLCBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdyZWYnKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAncmVmJykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdrZXknKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAna2V5JykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdrZXknLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ1JlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGByZWZgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHdhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ3JlZicsIHtcbiAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY29uZmlnLnJlZiA9PT0gJ3N0cmluZycgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCAmJiBjb25maWcuX19zZWxmICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuc3RhdGVOb2RlICE9PSBjb25maWcuX19zZWxmKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJyArICdTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArICdUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiAnICsgJ1dlIGFzayB5b3UgdG8gbWFudWFsbHkgZml4IHRoaXMgY2FzZSBieSB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGNvbXBvbmVudE5hbWUsIGNvbmZpZy5yZWYpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUmVhY3QgZWxlbWVudC4gVGhpcyBubyBsb25nZXIgYWRoZXJlcyB0b1xuICogdGhlIGNsYXNzIHBhdHRlcm4sIHNvIGRvIG5vdCB1c2UgbmV3IHRvIGNhbGwgaXQuIEFsc28sIGluc3RhbmNlb2YgY2hlY2tcbiAqIHdpbGwgbm90IHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xuICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7Kn0gcHJvcHNcbiAqIEBwYXJhbSB7Kn0ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBvd25lclxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXG4gKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvd1xuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xuICogY2hhbmdlIGluIGJlaGF2aW9yLlxuICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhlcndpc2UpXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxuICogQGludGVybmFsXG4gKi9cblxuXG52YXIgUmVhY3RFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykge1xuICB2YXIgZWxlbWVudCA9IHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvd3MgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IEVsZW1lbnRcbiAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICB0eXBlOiB0eXBlLFxuICAgIGtleToga2V5LFxuICAgIHJlZjogcmVmLFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxuICAgIF9vd25lcjogb3duZXJcbiAgfTtcblxuICB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307IC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlXG4gICAgLy8gdGhlIHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNob3VsZFxuICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRlc3QgZnJhbWV3b3JrXG4gICAgLy8gaWdub3JlcyBpdC5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50Ll9zdG9yZSwgJ3ZhbGlkYXRlZCcsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZhbHNlXG4gICAgfSk7IC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc2VsZlxuICAgIH0pOyAvLyBUd28gZWxlbWVudHMgY3JlYXRlZCBpbiB0d28gZGlmZmVyZW50IHBsYWNlcyBzaG91bGQgYmUgY29uc2lkZXJlZFxuICAgIC8vIGVxdWFsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIGFuZCB0aGVyZWZvcmUgd2UgaGlkZSBpdCBmcm9tIGVudW1lcmF0aW9uLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc291cmNlJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNvdXJjZVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufTtcbi8qKlxuICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IG9mIHRoZSBnaXZlbiB0eXBlLlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNjcmVhdGVlbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0eXBlLCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIHZhciBwcm9wTmFtZTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG4gIHZhciBwcm9wcyA9IHt9O1xuICB2YXIga2V5ID0gbnVsbDtcbiAgdmFyIHJlZiA9IG51bGw7XG4gIHZhciBzZWxmID0gbnVsbDtcbiAgdmFyIHNvdXJjZSA9IG51bGw7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG5cbiAgICAgIHtcbiAgICAgICAgd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICBzZWxmID0gY29uZmlnLl9fc2VsZiA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NlbGY7XG4gICAgc291cmNlID0gY29uZmlnLl9fc291cmNlID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc291cmNlOyAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvXG4gIC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LlxuXG5cbiAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG5cbiAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHtcbiAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShjaGlsZEFycmF5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gIH0gLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG5cblxuICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wcztcblxuICAgIGZvciAocHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LCBwcm9wcyk7XG59XG5mdW5jdGlvbiBjbG9uZUFuZFJlcGxhY2VLZXkob2xkRWxlbWVudCwgbmV3S2V5KSB7XG4gIHZhciBuZXdFbGVtZW50ID0gUmVhY3RFbGVtZW50KG9sZEVsZW1lbnQudHlwZSwgbmV3S2V5LCBvbGRFbGVtZW50LnJlZiwgb2xkRWxlbWVudC5fc2VsZiwgb2xkRWxlbWVudC5fc291cmNlLCBvbGRFbGVtZW50Ll9vd25lciwgb2xkRWxlbWVudC5wcm9wcyk7XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuLyoqXG4gKiBDbG9uZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCB1c2luZyBlbGVtZW50IGFzIHRoZSBzdGFydGluZyBwb2ludC5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjY2xvbmVlbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gY2xvbmVFbGVtZW50KGVsZW1lbnQsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgaWYgKCEhKGVsZW1lbnQgPT09IG51bGwgfHwgZWxlbWVudCA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0LmNsb25lRWxlbWVudCguLi4pOiBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIFJlYWN0IGVsZW1lbnQsIGJ1dCB5b3UgcGFzc2VkIFwiICsgZWxlbWVudCArIFwiLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHByb3BOYW1lOyAvLyBPcmlnaW5hbCBwcm9wcyBhcmUgY29waWVkXG5cbiAgdmFyIHByb3BzID0gX2Fzc2lnbih7fSwgZWxlbWVudC5wcm9wcyk7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuXG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHJlZiA9IGVsZW1lbnQucmVmOyAvLyBTZWxmIGlzIHByZXNlcnZlZCBzaW5jZSB0aGUgb3duZXIgaXMgcHJlc2VydmVkLlxuXG4gIHZhciBzZWxmID0gZWxlbWVudC5fc2VsZjsgLy8gU291cmNlIGlzIHByZXNlcnZlZCBzaW5jZSBjbG9uZUVsZW1lbnQgaXMgdW5saWtlbHkgdG8gYmUgdGFyZ2V0ZWQgYnkgYVxuICAvLyB0cmFuc3BpbGVyLCBhbmQgdGhlIG9yaWdpbmFsIHNvdXJjZSBpcyBwcm9iYWJseSBhIGJldHRlciBpbmRpY2F0b3Igb2YgdGhlXG4gIC8vIHRydWUgb3duZXIuXG5cbiAgdmFyIHNvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTsgLy8gT3duZXIgd2lsbCBiZSBwcmVzZXJ2ZWQsIHVubGVzcyByZWYgaXMgb3ZlcnJpZGRlblxuXG4gIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuXG4gIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICAvLyBTaWxlbnRseSBzdGVhbCB0aGUgcmVmIGZyb20gdGhlIHBhcmVudC5cbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG4gICAgICBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIG92ZXJyaWRlIGV4aXN0aW5nIHByb3BzXG5cblxuICAgIHZhciBkZWZhdWx0UHJvcHM7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlICYmIGVsZW1lbnQudHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICAgIGRlZmF1bHRQcm9wcyA9IGVsZW1lbnQudHlwZS5kZWZhdWx0UHJvcHM7XG4gICAgfVxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgaWYgKGNvbmZpZ1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSAvLyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvXG4gIC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LlxuXG5cbiAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG5cbiAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHtcbiAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgfVxuXG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0RWxlbWVudChlbGVtZW50LnR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcyk7XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuXG52YXIgU0VQQVJBVE9SID0gJy4nO1xudmFyIFNVQlNFUEFSQVRPUiA9ICc6Jztcbi8qKlxuICogRXNjYXBlIGFuZCB3cmFwIGtleSBzbyBpdCBpcyBzYWZlIHRvIHVzZSBhcyBhIHJlYWN0aWRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHRvIGJlIGVzY2FwZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBlc2NhcGVkIGtleS5cbiAqL1xuXG5mdW5jdGlvbiBlc2NhcGUoa2V5KSB7XG4gIHZhciBlc2NhcGVSZWdleCA9IC9bPTpdL2c7XG4gIHZhciBlc2NhcGVyTG9va3VwID0ge1xuICAgICc9JzogJz0wJyxcbiAgICAnOic6ICc9MidcbiAgfTtcbiAgdmFyIGVzY2FwZWRTdHJpbmcgPSBrZXkucmVwbGFjZShlc2NhcGVSZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVzY2FwZXJMb29rdXBbbWF0Y2hdO1xuICB9KTtcbiAgcmV0dXJuICckJyArIGVzY2FwZWRTdHJpbmc7XG59XG4vKipcbiAqIFRPRE86IFRlc3QgdGhhdCBhIHNpbmdsZSBjaGlsZCBhbmQgYW4gYXJyYXkgd2l0aCBvbmUgaXRlbSBoYXZlIHRoZSBzYW1lIGtleVxuICogcGF0dGVybi5cbiAqL1xuXG5cbnZhciBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7XG52YXIgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXggPSAvXFwvKy9nO1xuXG5mdW5jdGlvbiBlc2NhcGVVc2VyUHJvdmlkZWRLZXkodGV4dCkge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4LCAnJCYvJyk7XG59XG4vKipcbiAqIEdlbmVyYXRlIGEga2V5IHN0cmluZyB0aGF0IGlkZW50aWZpZXMgYSBlbGVtZW50IHdpdGhpbiBhIHNldC5cbiAqXG4gKiBAcGFyYW0geyp9IGVsZW1lbnQgQSBlbGVtZW50IHRoYXQgY291bGQgY29udGFpbiBhIG1hbnVhbCBrZXkuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggdGhhdCBpcyB1c2VkIGlmIGEgbWFudWFsIGtleSBpcyBub3QgcHJvdmlkZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRFbGVtZW50S2V5KGVsZW1lbnQsIGluZGV4KSB7XG4gIC8vIERvIHNvbWUgdHlwZWNoZWNraW5nIGhlcmUgc2luY2Ugd2UgY2FsbCB0aGlzIGJsaW5kbHkuIFdlIHdhbnQgdG8gZW5zdXJlXG4gIC8vIHRoYXQgd2UgZG9uJ3QgYmxvY2sgcG90ZW50aWFsIGZ1dHVyZSBFUyBBUElzLlxuICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdvYmplY3QnICYmIGVsZW1lbnQgIT09IG51bGwgJiYgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgIC8vIEV4cGxpY2l0IGtleVxuICAgIHJldHVybiBlc2NhcGUoJycgKyBlbGVtZW50LmtleSk7XG4gIH0gLy8gSW1wbGljaXQga2V5IGRldGVybWluZWQgYnkgdGhlIGluZGV4IGluIHRoZSBzZXRcblxuXG4gIHJldHVybiBpbmRleC50b1N0cmluZygzNik7XG59XG5cbmZ1bmN0aW9uIG1hcEludG9BcnJheShjaGlsZHJlbiwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5hbWVTb0ZhciwgY2FsbGJhY2spIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47XG5cbiAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgIC8vIEFsbCBvZiB0aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLlxuICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgfVxuXG4gIHZhciBpbnZva2VDYWxsYmFjayA9IGZhbHNlO1xuXG4gIGlmIChjaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBzd2l0Y2ggKGNoaWxkcmVuLiQkdHlwZW9mKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgaWYgKGludm9rZUNhbGxiYWNrKSB7XG4gICAgdmFyIF9jaGlsZCA9IGNoaWxkcmVuO1xuICAgIHZhciBtYXBwZWRDaGlsZCA9IGNhbGxiYWNrKF9jaGlsZCk7IC8vIElmIGl0J3MgdGhlIG9ubHkgY2hpbGQsIHRyZWF0IHRoZSBuYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIGFuIGFycmF5XG4gICAgLy8gc28gdGhhdCBpdCdzIGNvbnNpc3RlbnQgaWYgdGhlIG51bWJlciBvZiBjaGlsZHJlbiBncm93czpcblxuICAgIHZhciBjaGlsZEtleSA9IG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgKyBnZXRFbGVtZW50S2V5KF9jaGlsZCwgMCkgOiBuYW1lU29GYXI7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShtYXBwZWRDaGlsZCkpIHtcbiAgICAgIHZhciBlc2NhcGVkQ2hpbGRLZXkgPSAnJztcblxuICAgICAgaWYgKGNoaWxkS2V5ICE9IG51bGwpIHtcbiAgICAgICAgZXNjYXBlZENoaWxkS2V5ID0gZXNjYXBlVXNlclByb3ZpZGVkS2V5KGNoaWxkS2V5KSArICcvJztcbiAgICAgIH1cblxuICAgICAgbWFwSW50b0FycmF5KG1hcHBlZENoaWxkLCBhcnJheSwgZXNjYXBlZENoaWxkS2V5LCAnJywgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKG1hcHBlZENoaWxkICE9IG51bGwpIHtcbiAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChtYXBwZWRDaGlsZCkpIHtcbiAgICAgICAgbWFwcGVkQ2hpbGQgPSBjbG9uZUFuZFJlcGxhY2VLZXkobWFwcGVkQ2hpbGQsIC8vIEtlZXAgYm90aCB0aGUgKG1hcHBlZCkgYW5kIG9sZCBrZXlzIGlmIHRoZXkgZGlmZmVyLCBqdXN0IGFzXG4gICAgICAgIC8vIHRyYXZlcnNlQWxsQ2hpbGRyZW4gdXNlZCB0byBkbyBmb3Igb2JqZWN0cyBhcyBjaGlsZHJlblxuICAgICAgICBlc2NhcGVkUHJlZml4ICsgKCAvLyAkRmxvd0ZpeE1lIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIFJlYWN0LlBvcnRhbCBkb2Vzbid0IGhhdmUgYSBrZXlcbiAgICAgICAgbWFwcGVkQ2hpbGQua2V5ICYmICghX2NoaWxkIHx8IF9jaGlsZC5rZXkgIT09IG1hcHBlZENoaWxkLmtleSkgPyAvLyAkRmxvd0ZpeE1lIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIGV4aXN0aW5nIGVsZW1lbnQncyBrZXkgY2FuIGJlIGEgbnVtYmVyXG4gICAgICAgIGVzY2FwZVVzZXJQcm92aWRlZEtleSgnJyArIG1hcHBlZENoaWxkLmtleSkgKyAnLycgOiAnJykgKyBjaGlsZEtleSk7XG4gICAgICB9XG5cbiAgICAgIGFycmF5LnB1c2gobWFwcGVkQ2hpbGQpO1xuICAgIH1cblxuICAgIHJldHVybiAxO1xuICB9XG5cbiAgdmFyIGNoaWxkO1xuICB2YXIgbmV4dE5hbWU7XG4gIHZhciBzdWJ0cmVlQ291bnQgPSAwOyAvLyBDb3VudCBvZiBjaGlsZHJlbiBmb3VuZCBpbiB0aGUgY3VycmVudCBzdWJ0cmVlLlxuXG4gIHZhciBuZXh0TmFtZVByZWZpeCA9IG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgOiBuYW1lU29GYXIgKyBTVUJTRVBBUkFUT1I7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRFbGVtZW50S2V5KGNoaWxkLCBpKTtcbiAgICAgIHN1YnRyZWVDb3VudCArPSBtYXBJbnRvQXJyYXkoY2hpbGQsIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuZXh0TmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pO1xuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgaXRlcmFibGVDaGlsZHJlbiA9IGNoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIC8vIFdhcm4gYWJvdXQgdXNpbmcgTWFwcyBhcyBjaGlsZHJlblxuICAgICAgICBpZiAoaXRlcmF0b3JGbiA9PT0gaXRlcmFibGVDaGlsZHJlbi5lbnRyaWVzKSB7XG4gICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNYXBzKSB7XG4gICAgICAgICAgICB3YXJuKCdVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnVXNlIGFuIGFycmF5IG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaWRXYXJuQWJvdXRNYXBzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwoaXRlcmFibGVDaGlsZHJlbik7XG4gICAgICB2YXIgc3RlcDtcbiAgICAgIHZhciBpaSA9IDA7XG5cbiAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgY2hpbGQgPSBzdGVwLnZhbHVlO1xuICAgICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0RWxlbWVudEtleShjaGlsZCwgaWkrKyk7XG4gICAgICAgIHN1YnRyZWVDb3VudCArPSBtYXBJbnRvQXJyYXkoY2hpbGQsIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuZXh0TmFtZSwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhciBjaGlsZHJlblN0cmluZyA9ICcnICsgY2hpbGRyZW47XG5cbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgKyAoY2hpbGRyZW5TdHJpbmcgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhjaGlsZHJlbikuam9pbignLCAnKSArICd9JyA6IGNoaWxkcmVuU3RyaW5nKSArIFwiKS4gSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBpbnN0ZWFkLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3VidHJlZUNvdW50O1xufVxuXG4vKipcbiAqIE1hcHMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbm1hcFxuICpcbiAqIFRoZSBwcm92aWRlZCBtYXBGdW5jdGlvbihjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmdW5jIFRoZSBtYXAgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgQ29udGV4dCBmb3IgbWFwRnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBvcmRlcmVkIG1hcCBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuYywgY29udGV4dCkge1xuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGNvdW50ID0gMDtcbiAgbWFwSW50b0FycmF5KGNoaWxkcmVuLCByZXN1bHQsICcnLCAnJywgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBjaGlsZCwgY291bnQrKyk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXNcbiAqIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuY291bnRcbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbi5cbiAqL1xuXG5cbmZ1bmN0aW9uIGNvdW50Q2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgdmFyIG4gPSAwO1xuICBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKCkge1xuICAgIG4rKzsgLy8gRG9uJ3QgcmV0dXJuIGFueXRoaW5nXG4gIH0pO1xuICByZXR1cm4gbjtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyB0aHJvdWdoIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5mb3JlYWNoXG4gKlxuICogVGhlIHByb3ZpZGVkIGZvckVhY2hGdW5jKGNoaWxkLCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZvckVhY2hGdW5jXG4gKiBAcGFyYW0geyp9IGZvckVhY2hDb250ZXh0IENvbnRleHQgZm9yIGZvckVhY2hDb250ZXh0LlxuICovXG5mdW5jdGlvbiBmb3JFYWNoQ2hpbGRyZW4oY2hpbGRyZW4sIGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCkge1xuICBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKCkge1xuICAgIGZvckVhY2hGdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIERvbid0IHJldHVybiBhbnl0aGluZy5cbiAgfSwgZm9yRWFjaENvbnRleHQpO1xufVxuLyoqXG4gKiBGbGF0dGVuIGEgY2hpbGRyZW4gb2JqZWN0ICh0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmApIGFuZFxuICogcmV0dXJuIGFuIGFycmF5IHdpdGggYXBwcm9wcmlhdGVseSByZS1rZXllZCBjaGlsZHJlbi5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW50b2FycmF5XG4gKi9cblxuXG5mdW5jdGlvbiB0b0FycmF5KGNoaWxkcmVuKSB7XG4gIHJldHVybiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9KSB8fCBbXTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgaW4gYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuIGFuZCB2ZXJpZmllcyB0aGF0IHRoZXJlXG4gKiBpcyBvbmx5IG9uZSBjaGlsZCBpbiB0aGUgY29sbGVjdGlvbi5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5vbmx5XG4gKlxuICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgYSBzaW5nbGUgY2hpbGQgZ2V0c1xuICogcGFzc2VkIHdpdGhvdXQgYSB3cmFwcGVyLCBidXQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgdG9cbiAqIGFic3RyYWN0IGF3YXkgdGhlIHBhcnRpY3VsYXIgc3RydWN0dXJlIG9mIGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7P29iamVjdH0gY2hpbGRyZW4gQ2hpbGQgY29sbGVjdGlvbiBzdHJ1Y3R1cmUuXG4gKiBAcmV0dXJuIHtSZWFjdEVsZW1lbnR9IFRoZSBmaXJzdCBhbmQgb25seSBgUmVhY3RFbGVtZW50YCBjb250YWluZWQgaW4gdGhlXG4gKiBzdHJ1Y3R1cmUuXG4gKi9cblxuXG5mdW5jdGlvbiBvbmx5Q2hpbGQoY2hpbGRyZW4pIHtcbiAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29udGV4dChkZWZhdWx0VmFsdWUsIGNhbGN1bGF0ZUNoYW5nZWRCaXRzKSB7XG4gIGlmIChjYWxjdWxhdGVDaGFuZ2VkQml0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIGlmIChjYWxjdWxhdGVDaGFuZ2VkQml0cyAhPT0gbnVsbCAmJiB0eXBlb2YgY2FsY3VsYXRlQ2hhbmdlZEJpdHMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ2NyZWF0ZUNvbnRleHQ6IEV4cGVjdGVkIHRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcycsIGNhbGN1bGF0ZUNoYW5nZWRCaXRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgY29udGV4dCA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfQ09OVEVYVF9UWVBFLFxuICAgIF9jYWxjdWxhdGVDaGFuZ2VkQml0czogY2FsY3VsYXRlQ2hhbmdlZEJpdHMsXG4gICAgLy8gQXMgYSB3b3JrYXJvdW5kIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29uY3VycmVudCByZW5kZXJlcnMsIHdlIGNhdGVnb3JpemVcbiAgICAvLyBzb21lIHJlbmRlcmVycyBhcyBwcmltYXJ5IGFuZCBvdGhlcnMgYXMgc2Vjb25kYXJ5LiBXZSBvbmx5IGV4cGVjdFxuICAgIC8vIHRoZXJlIHRvIGJlIHR3byBjb25jdXJyZW50IHJlbmRlcmVycyBhdCBtb3N0OiBSZWFjdCBOYXRpdmUgKHByaW1hcnkpIGFuZFxuICAgIC8vIEZhYnJpYyAoc2Vjb25kYXJ5KTsgUmVhY3QgRE9NIChwcmltYXJ5KSBhbmQgUmVhY3QgQVJUIChzZWNvbmRhcnkpLlxuICAgIC8vIFNlY29uZGFyeSByZW5kZXJlcnMgc3RvcmUgdGhlaXIgY29udGV4dCB2YWx1ZXMgb24gc2VwYXJhdGUgZmllbGRzLlxuICAgIF9jdXJyZW50VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICBfY3VycmVudFZhbHVlMjogZGVmYXVsdFZhbHVlLFxuICAgIC8vIFVzZWQgdG8gdHJhY2sgaG93IG1hbnkgY29uY3VycmVudCByZW5kZXJlcnMgdGhpcyBjb250ZXh0IGN1cnJlbnRseVxuICAgIC8vIHN1cHBvcnRzIHdpdGhpbiBpbiBhIHNpbmdsZSByZW5kZXJlci4gU3VjaCBhcyBwYXJhbGxlbCBzZXJ2ZXIgcmVuZGVyaW5nLlxuICAgIF90aHJlYWRDb3VudDogMCxcbiAgICAvLyBUaGVzZSBhcmUgY2lyY3VsYXJcbiAgICBQcm92aWRlcjogbnVsbCxcbiAgICBDb25zdW1lcjogbnVsbFxuICB9O1xuICBjb250ZXh0LlByb3ZpZGVyID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9QUk9WSURFUl9UWVBFLFxuICAgIF9jb250ZXh0OiBjb250ZXh0XG4gIH07XG4gIHZhciBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IGZhbHNlO1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIgPSBmYWxzZTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyID0gZmFsc2U7XG5cbiAge1xuICAgIC8vIEEgc2VwYXJhdGUgb2JqZWN0LCBidXQgcHJveGllcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjb250ZXh0IG9iamVjdCBmb3JcbiAgICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gSXQgaGFzIGEgZGlmZmVyZW50ICQkdHlwZW9mLCBzbyB3ZSBjYW4gcHJvcGVybHlcbiAgICAvLyB3YXJuIGZvciB0aGUgaW5jb3JyZWN0IHVzYWdlIG9mIENvbnRleHQgYXMgYSBDb25zdW1lci5cbiAgICB2YXIgQ29uc3VtZXIgPSB7XG4gICAgICAkJHR5cGVvZjogUkVBQ1RfQ09OVEVYVF9UWVBFLFxuICAgICAgX2NvbnRleHQ6IGNvbnRleHQsXG4gICAgICBfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IGNvbnRleHQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzXG4gICAgfTsgLy8gJEZsb3dGaXhNZTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbm90IHNldHRpbmcgYSB2YWx1ZSwgd2hpY2ggaXMgaW50ZW50aW9uYWwgaGVyZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29uc3VtZXIsIHtcbiAgICAgIFByb3ZpZGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoJ1JlbmRlcmluZyA8Q29udGV4dC5Db25zdW1lci5Qcm92aWRlcj4gaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Qcm92aWRlcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGV4dC5Qcm92aWRlcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX1Byb3ZpZGVyKSB7XG4gICAgICAgICAgY29udGV4dC5Qcm92aWRlciA9IF9Qcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9jdXJyZW50VmFsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX2N1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IF9jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlMjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fY3VycmVudFZhbHVlMjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX2N1cnJlbnRWYWx1ZTIpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUyID0gX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfdGhyZWFkQ291bnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3RocmVhZENvdW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfdGhyZWFkQ291bnQpIHtcbiAgICAgICAgICBjb250ZXh0Ll90aHJlYWRDb3VudCA9IF90aHJlYWRDb3VudDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIENvbnN1bWVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMpIHtcbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoJ1JlbmRlcmluZyA8Q29udGV4dC5Db25zdW1lci5Db25zdW1lcj4gaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Db25zdW1lcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGV4dC5Db25zdW1lcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRpc3BsYXlOYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0LmRpc3BsYXlOYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkaXNwbGF5TmFtZSkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIpIHtcbiAgICAgICAgICAgIHdhcm4oJ1NldHRpbmcgYGRpc3BsYXlOYW1lYCBvbiBDb250ZXh0LkNvbnN1bWVyIGhhcyBubyBlZmZlY3QuICcgKyBcIllvdSBzaG91bGQgc2V0IGl0IGRpcmVjdGx5IG9uIHRoZSBjb250ZXh0IHdpdGggQ29udGV4dC5kaXNwbGF5TmFtZSA9ICclcycuXCIsIGRpc3BsYXlOYW1lKTtcblxuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pOyAvLyAkRmxvd0ZpeE1lOiBGbG93IGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIHByb3BlcnRpZXMgYmVjYXVzZSBpdCBkb2Vzbid0IHVuZGVyc3RhbmQgZGVmaW5lUHJvcGVydHlcblxuICAgIGNvbnRleHQuQ29uc3VtZXIgPSBDb25zdW1lcjtcbiAgfVxuXG4gIHtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSBudWxsO1xuICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlcjIgPSBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbnZhciBVbmluaXRpYWxpemVkID0gLTE7XG52YXIgUGVuZGluZyA9IDA7XG52YXIgUmVzb2x2ZWQgPSAxO1xudmFyIFJlamVjdGVkID0gMjtcblxuZnVuY3Rpb24gbGF6eUluaXRpYWxpemVyKHBheWxvYWQpIHtcbiAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gVW5pbml0aWFsaXplZCkge1xuICAgIHZhciBjdG9yID0gcGF5bG9hZC5fcmVzdWx0O1xuICAgIHZhciB0aGVuYWJsZSA9IGN0b3IoKTsgLy8gVHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZS5cblxuICAgIHZhciBwZW5kaW5nID0gcGF5bG9hZDtcbiAgICBwZW5kaW5nLl9zdGF0dXMgPSBQZW5kaW5nO1xuICAgIHBlbmRpbmcuX3Jlc3VsdCA9IHRoZW5hYmxlO1xuICAgIHRoZW5hYmxlLnRoZW4oZnVuY3Rpb24gKG1vZHVsZU9iamVjdCkge1xuICAgICAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUGVuZGluZykge1xuICAgICAgICB2YXIgZGVmYXVsdEV4cG9ydCA9IG1vZHVsZU9iamVjdC5kZWZhdWx0O1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoZGVmYXVsdEV4cG9ydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlcnJvcignbGF6eTogRXhwZWN0ZWQgdGhlIHJlc3VsdCBvZiBhIGR5bmFtaWMgaW1wb3J0KCkgY2FsbC4gJyArICdJbnN0ZWFkIHJlY2VpdmVkOiAlc1xcblxcbllvdXIgY29kZSBzaG91bGQgbG9vayBsaWtlOiBcXG4gICcgKyAvLyBCcmVhayB1cCBpbXBvcnRzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICAgICAgJ2NvbnN0IE15Q29tcG9uZW50ID0gbGF6eSgoKSA9PiBpbXAnICsgXCJvcnQoJy4vTXlDb21wb25lbnQnKSlcIiwgbW9kdWxlT2JqZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZS5cblxuXG4gICAgICAgIHZhciByZXNvbHZlZCA9IHBheWxvYWQ7XG4gICAgICAgIHJlc29sdmVkLl9zdGF0dXMgPSBSZXNvbHZlZDtcbiAgICAgICAgcmVzb2x2ZWQuX3Jlc3VsdCA9IGRlZmF1bHRFeHBvcnQ7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBQZW5kaW5nKSB7XG4gICAgICAgIC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG4gICAgICAgIHZhciByZWplY3RlZCA9IHBheWxvYWQ7XG4gICAgICAgIHJlamVjdGVkLl9zdGF0dXMgPSBSZWplY3RlZDtcbiAgICAgICAgcmVqZWN0ZWQuX3Jlc3VsdCA9IGVycm9yO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUmVzb2x2ZWQpIHtcbiAgICByZXR1cm4gcGF5bG9hZC5fcmVzdWx0O1xuICB9IGVsc2Uge1xuICAgIHRocm93IHBheWxvYWQuX3Jlc3VsdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBsYXp5KGN0b3IpIHtcbiAgdmFyIHBheWxvYWQgPSB7XG4gICAgLy8gV2UgdXNlIHRoZXNlIGZpZWxkcyB0byBzdG9yZSB0aGUgcmVzdWx0LlxuICAgIF9zdGF0dXM6IC0xLFxuICAgIF9yZXN1bHQ6IGN0b3JcbiAgfTtcbiAgdmFyIGxhenlUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9MQVpZX1RZUEUsXG4gICAgX3BheWxvYWQ6IHBheWxvYWQsXG4gICAgX2luaXQ6IGxhenlJbml0aWFsaXplclxuICB9O1xuXG4gIHtcbiAgICAvLyBJbiBwcm9kdWN0aW9uLCB0aGlzIHdvdWxkIGp1c3Qgc2V0IGl0IG9uIHRoZSBvYmplY3QuXG4gICAgdmFyIGRlZmF1bHRQcm9wcztcbiAgICB2YXIgcHJvcFR5cGVzOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsYXp5VHlwZSwge1xuICAgICAgZGVmYXVsdFByb3BzOiB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHRQcm9wcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3RGVmYXVsdFByb3BzKSB7XG4gICAgICAgICAgZXJyb3IoJ1JlYWN0LmxhenkoLi4uKTogSXQgaXMgbm90IHN1cHBvcnRlZCB0byBhc3NpZ24gYGRlZmF1bHRQcm9wc2AgdG8gJyArICdhIGxhenkgY29tcG9uZW50IGltcG9ydC4gRWl0aGVyIHNwZWNpZnkgdGhlbSB3aGVyZSB0aGUgY29tcG9uZW50ICcgKyAnaXMgZGVmaW5lZCwgb3IgY3JlYXRlIGEgd3JhcHBpbmcgY29tcG9uZW50IGFyb3VuZCBpdC4nKTtcblxuICAgICAgICAgIGRlZmF1bHRQcm9wcyA9IG5ld0RlZmF1bHRQcm9wczsgLy8gTWF0Y2ggcHJvZHVjdGlvbiBiZWhhdmlvciBtb3JlIGNsb3NlbHk6XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxhenlUeXBlLCAnZGVmYXVsdFByb3BzJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJvcFR5cGVzOiB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BUeXBlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJvcFR5cGVzKSB7XG4gICAgICAgICAgZXJyb3IoJ1JlYWN0LmxhenkoLi4uKTogSXQgaXMgbm90IHN1cHBvcnRlZCB0byBhc3NpZ24gYHByb3BUeXBlc2AgdG8gJyArICdhIGxhenkgY29tcG9uZW50IGltcG9ydC4gRWl0aGVyIHNwZWNpZnkgdGhlbSB3aGVyZSB0aGUgY29tcG9uZW50ICcgKyAnaXMgZGVmaW5lZCwgb3IgY3JlYXRlIGEgd3JhcHBpbmcgY29tcG9uZW50IGFyb3VuZCBpdC4nKTtcblxuICAgICAgICAgIHByb3BUeXBlcyA9IG5ld1Byb3BUeXBlczsgLy8gTWF0Y2ggcHJvZHVjdGlvbiBiZWhhdmlvciBtb3JlIGNsb3NlbHk6XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxhenlUeXBlLCAncHJvcFR5cGVzJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbGF6eVR5cGU7XG59XG5cbmZ1bmN0aW9uIGZvcndhcmRSZWYocmVuZGVyKSB7XG4gIHtcbiAgICBpZiAocmVuZGVyICE9IG51bGwgJiYgcmVuZGVyLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCByZWNlaXZlZCBhIGBtZW1vYCAnICsgJ2NvbXBvbmVudC4gSW5zdGVhZCBvZiBmb3J3YXJkUmVmKG1lbW8oLi4uKSksIHVzZSAnICsgJ21lbW8oZm9yd2FyZFJlZiguLi4pKS4nKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByZW5kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCB3YXMgZ2l2ZW4gJXMuJywgcmVuZGVyID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJlbmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyZW5kZXIubGVuZ3RoICE9PSAwICYmIHJlbmRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVuZGVyIGZ1bmN0aW9ucyBhY2NlcHQgZXhhY3RseSB0d28gcGFyYW1ldGVyczogcHJvcHMgYW5kIHJlZi4gJXMnLCByZW5kZXIubGVuZ3RoID09PSAxID8gJ0RpZCB5b3UgZm9yZ2V0IHRvIHVzZSB0aGUgcmVmIHBhcmFtZXRlcj8nIDogJ0FueSBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aWxsIGJlIHVuZGVmaW5lZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVuZGVyICE9IG51bGwpIHtcbiAgICAgIGlmIChyZW5kZXIuZGVmYXVsdFByb3BzICE9IG51bGwgfHwgcmVuZGVyLnByb3BUeXBlcyAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgZG8gbm90IHN1cHBvcnQgcHJvcFR5cGVzIG9yIGRlZmF1bHRQcm9wcy4gJyArICdEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIGEgUmVhY3QgY29tcG9uZW50PycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBlbGVtZW50VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSxcbiAgICByZW5kZXI6IHJlbmRlclxuICB9O1xuXG4gIHtcbiAgICB2YXIgb3duTmFtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudFR5cGUsICdkaXNwbGF5TmFtZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvd25OYW1lO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgb3duTmFtZSA9IG5hbWU7XG5cbiAgICAgICAgaWYgKHJlbmRlci5kaXNwbGF5TmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmVuZGVyLmRpc3BsYXlOYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRUeXBlO1xufVxuXG4vLyBGaWx0ZXIgY2VydGFpbiBET00gYXR0cmlidXRlcyAoZS5nLiBzcmMsIGhyZWYpIGlmIHRoZWlyIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5ncy5cblxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBDcmVhdGUgRXZlbnQgSGFuZGxlIEFQSS5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gZXhwb3J0cy5GcmFnbWVudCB8fCB0eXBlID09PSBleHBvcnRzLlByb2ZpbGVyIHx8IHR5cGUgPT09IFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFIHx8IHR5cGUgPT09IGV4cG9ydHMuU3RyaWN0TW9kZSB8fCB0eXBlID09PSBleHBvcnRzLlN1c3BlbnNlIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgfHwgZW5hYmxlU2NvcGVBUEkgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSB8fCB0eXBlWzBdID09PSBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBtZW1vKHR5cGUsIGNvbXBhcmUpIHtcbiAge1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpKSB7XG4gICAgICBlcnJvcignbWVtbzogVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBjb21wb25lbnQuIEluc3RlYWQgJyArICdyZWNlaXZlZDogJXMnLCB0eXBlID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBlbGVtZW50VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfTUVNT19UWVBFLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgY29tcGFyZTogY29tcGFyZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbXBhcmVcbiAgfTtcblxuICB7XG4gICAgdmFyIG93bk5hbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnRUeXBlLCAnZGlzcGxheU5hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG93bk5hbWUgPSBuYW1lO1xuXG4gICAgICAgIGlmICh0eXBlLmRpc3BsYXlOYW1lID09IG51bGwpIHtcbiAgICAgICAgICB0eXBlLmRpc3BsYXlOYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRUeXBlO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRGlzcGF0Y2hlcigpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7XG5cbiAgaWYgKCEoZGlzcGF0Y2hlciAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaGVyO1xufVxuXG5mdW5jdGlvbiB1c2VDb250ZXh0KENvbnRleHQsIHVuc3RhYmxlX29ic2VydmVkQml0cykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG5cbiAge1xuICAgIGlmICh1bnN0YWJsZV9vYnNlcnZlZEJpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IoJ3VzZUNvbnRleHQoKSBzZWNvbmQgYXJndW1lbnQgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSAnICsgJ3VzZSBpbiBSZWFjdC4gUGFzc2luZyBpdCBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1lvdSBwYXNzZWQ6ICVzLiVzJywgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzLCB0eXBlb2YgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzID09PSAnbnVtYmVyJyAmJiBBcnJheS5pc0FycmF5KGFyZ3VtZW50c1syXSkgPyAnXFxuXFxuRGlkIHlvdSBjYWxsIGFycmF5Lm1hcCh1c2VDb250ZXh0KT8gJyArICdDYWxsaW5nIEhvb2tzIGluc2lkZSBhIGxvb3AgaXMgbm90IHN1cHBvcnRlZC4gJyArICdMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ydWxlcy1vZi1ob29rcycgOiAnJyk7XG4gICAgfSAvLyBUT0RPOiBhZGQgYSBtb3JlIGdlbmVyaWMgd2FybmluZyBmb3IgaW52YWxpZCB2YWx1ZXMuXG5cblxuICAgIGlmIChDb250ZXh0Ll9jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciByZWFsQ29udGV4dCA9IENvbnRleHQuX2NvbnRleHQ7IC8vIERvbid0IGRlZHVwbGljYXRlIGJlY2F1c2UgdGhpcyBsZWdpdGltYXRlbHkgY2F1c2VzIGJ1Z3NcbiAgICAgIC8vIGFuZCBub2JvZHkgc2hvdWxkIGJlIHVzaW5nIHRoaXMgaW4gZXhpc3RpbmcgY29kZS5cblxuICAgICAgaWYgKHJlYWxDb250ZXh0LkNvbnN1bWVyID09PSBDb250ZXh0KSB7XG4gICAgICAgIGVycm9yKCdDYWxsaW5nIHVzZUNvbnRleHQoQ29udGV4dC5Db25zdW1lcikgaXMgbm90IHN1cHBvcnRlZCwgbWF5IGNhdXNlIGJ1Z3MsIGFuZCB3aWxsIGJlICcgKyAncmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gY2FsbCB1c2VDb250ZXh0KENvbnRleHQpIGluc3RlYWQ/Jyk7XG4gICAgICB9IGVsc2UgaWYgKHJlYWxDb250ZXh0LlByb3ZpZGVyID09PSBDb250ZXh0KSB7XG4gICAgICAgIGVycm9yKCdDYWxsaW5nIHVzZUNvbnRleHQoQ29udGV4dC5Qcm92aWRlcikgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCB1c2VDb250ZXh0KENvbnRleHQpIGluc3RlYWQ/Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlQ29udGV4dChDb250ZXh0LCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMpO1xufVxuZnVuY3Rpb24gdXNlU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbn1cbmZ1bmN0aW9uIHVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG59XG5mdW5jdGlvbiB1c2VSZWYoaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlUmVmKGluaXRpYWxWYWx1ZSk7XG59XG5mdW5jdGlvbiB1c2VFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZU1lbW8oY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlTWVtbyhjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAge1xuICAgIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgICByZXR1cm4gZGlzcGF0Y2hlci51c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbik7XG4gIH1cbn1cblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgZGlzYWJsZWREZXB0aCsrO1xuICB9XG59XG5mdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBkaXNhYmxlZERlcHRoLS07XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2SW5mb1xuICAgICAgICB9KSxcbiAgICAgICAgd2FybjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEV4dHJhY3QgdGhlIFZNIHNwZWNpZmljIHByZWZpeCB1c2VkIGJ5IGVhY2ggbGluZS5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgIHByZWZpeCA9IG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xuICAgICAgfVxuICAgIH0gLy8gV2UgdXNlIHRoZSBwcmVmaXggdG8gZW5zdXJlIG91ciBzdGFja3MgbGluZSB1cCB3aXRoIG5hdGl2ZSBzdGFjayBmcmFtZXMuXG5cblxuICAgIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XG4gIH1cbn1cbnZhciByZWVudHJ5ID0gZmFsc2U7XG52YXIgY29tcG9uZW50RnJhbWVDYWNoZTtcblxue1xuICB2YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuICBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGFza2VkIGZvciBhIHN0YWNrIGluc2lkZSBhIGZha2UgcmVuZGVyLCBpdCBzaG91bGQgZ2V0IGlnbm9yZWQuXG4gIGlmICghZm4gfHwgcmVlbnRyeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHtcbiAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG5cbiAgICBpZiAoZnJhbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250cm9sO1xuICByZWVudHJ5ID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZSBJdCBkb2VzIGFjY2VwdCB1bmRlZmluZWQuXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XG4gIHZhciBwcmV2aW91c0Rpc3BhdGNoZXI7XG5cbiAge1xuICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IG51bGw7XG4gICAgZGlzYWJsZUxvZ3MoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH07IC8vICRGbG93Rml4TWVcblxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsICdwcm9wcycsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCB3b24ndCB0aHJvdyBpbiBhIG5vbi1zdHJpY3QgbW9kZSBmdW5jdGlvbi5cbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAvLyBXZSBjb25zdHJ1Y3QgYSBkaWZmZXJlbnQgY29udHJvbCBmb3IgdGhpcyBjYXNlIHRvIGluY2x1ZGUgYW55IGV4dHJhXG4gICAgICAgIC8vIGZyYW1lcyBhZGRlZCBieSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgfVxuXG4gICAgICBmbigpO1xuICAgIH1cbiAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgdHlwZW9mIHNhbXBsZS5zdGFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZS5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgY29udHJvbExpbmVzID0gY29udHJvbC5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgcyA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgYyA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCAmJiBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAvLyBUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIHRoZSByb290IG1vc3Qgb25lLiBIb3dldmVyLCBzdGFjayBmcmFtZXMgbWF5IGJlXG4gICAgICAgIC8vIGN1dCBvZmYgZHVlIHRvIG1heGltdW0gc3RhY2sgbGltaXRzLiBJbiB0aGlzIGNhc2UsIG9uZSBtYXliZSBjdXQgb2ZmXG4gICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgIC8vIGFuZCB0aGVyZSBmb3IgY3V0IG9mZiBlYXJsaWVyLiBTbyB3ZSBzaG91bGQgZmluZCB0aGUgcm9vdCBtb3N0IGZyYW1lIGluXG4gICAgICAgIC8vIHRoZSBzYW1wbGUgc29tZXdoZXJlIGluIHRoZSBjb250cm9sLlxuICAgICAgICBjLS07XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBzID49IDEgJiYgYyA+PSAwOyBzLS0sIGMtLSkge1xuICAgICAgICAvLyBOZXh0IHdlIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHdoaWNoIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gZnJhbWUgdGhhdCBjYWxsZWQgb3VyIHNhbXBsZSBmdW5jdGlvbiBhbmQgdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgLy8gSW4gVjgsIHRoZSBmaXJzdCBsaW5lIGlzIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgYnV0IG90aGVyIFZNcyBkb24ndC5cbiAgICAgICAgICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4gdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgY29udHJvbCBpcyBhbHNvIG9uIHRoZSBzYW1lXG4gICAgICAgICAgLy8gbGluZSwgdGhhdCdzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgb3VyIHNhbXBsZSB0aHJldyBhdCBzYW1lIGxpbmUgYXNcbiAgICAgICAgICAvLyB0aGUgY29udHJvbC4gSS5lLiBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgc2FtcGxlIGZyYW1lLiBTbyB3ZSBpZ25vcmUgdGhpcyByZXN1bHQuXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBwYXNzZWQgYSBjbGFzcyB0byBmdW5jdGlvbiBjb21wb25lbnQsIG9yIG5vbi1mdW5jdGlvbi5cbiAgICAgICAgICBpZiAocyAhPT0gMSB8fCBjICE9PSAxKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHMtLTtcbiAgICAgICAgICAgICAgYy0tOyAvLyBXZSBtYXkgc3RpbGwgaGF2ZSBzaW1pbGFyIGludGVybWVkaWF0ZSBmcmFtZXMgZnJvbSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgICAgICAgIC8vIFRoZSBuZXh0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHNob3VsZCBiZSBvdXIgbWF0Y2ggdGhvdWdoLlxuXG4gICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgICAgICAgLy8gVjggYWRkcyBhIFwibmV3XCIgcHJlZml4IGZvciBuYXRpdmUgY2xhc3Nlcy4gTGV0J3MgcmVtb3ZlIGl0IHRvIG1ha2UgaXQgcHJldHRpZXIuXG4gICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9ICdcXG4nICsgc2FtcGxlTGluZXNbc10ucmVwbGFjZSgnIGF0IG5ldyAnLCAnIGF0ICcpO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XG4gICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICB9XG5cbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxuXG5cbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzeW50aGV0aWNGcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBzb3VyY2UsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBleHBvcnRzLlN1c3BlbnNlOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBzb3VyY2UsIG93bmVyRm4pO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCkge1xuICB7XG4gICAgLy8gJEZsb3dGaXhNZSBUaGlzIGlzIG9rYXkgYnV0IEZsb3cgZG9lc24ndCBrbm93IGl0LlxuICAgIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IkMSA9IHZvaWQgMDsgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgKyAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJyk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvciQxID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciQxID0gZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSAmJiAhKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IkMS5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvciQxLm1lc3NhZ2VdID0gdHJ1ZTtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCdGYWlsZWQgJXMgdHlwZTogJXMnLCBsb2NhdGlvbiwgZXJyb3IkMS5tZXNzYWdlKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIHNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duO1xuXG57XG4gIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAgaWYgKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpIHtcbiAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGZpbGVOYW1lID0gc291cmNlLmZpbGVOYW1lLnJlcGxhY2UoL14uKltcXFxcXFwvXS8sICcnKTtcbiAgICB2YXIgbGluZU51bWJlciA9IHNvdXJjZS5saW5lTnVtYmVyO1xuICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgeW91ciBjb2RlIGF0ICcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnLic7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtRm9yUHJvcHMoZWxlbWVudFByb3BzKSB7XG4gIGlmIChlbGVtZW50UHJvcHMgIT09IG51bGwgJiYgZWxlbWVudFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oZWxlbWVudFByb3BzLl9fc291cmNlKTtcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cbi8qKlxuICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxuICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gKiB1cGRhdGVzLlxuICovXG5cblxudmFyIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcbiAgdmFyIGluZm8gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcblxuICBpZiAoIWluZm8pIHtcbiAgICB2YXIgcGFyZW50TmFtZSA9IHR5cGVvZiBwYXJlbnRUeXBlID09PSAnc3RyaW5nJyA/IHBhcmVudFR5cGUgOiBwYXJlbnRUeXBlLmRpc3BsYXlOYW1lIHx8IHBhcmVudFR5cGUubmFtZTtcblxuICAgIGlmIChwYXJlbnROYW1lKSB7XG4gICAgICBpbmZvID0gXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudE5hbWUgKyBcIj4uXCI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluZm87XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIGlmICghZWxlbWVudC5fc3RvcmUgfHwgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkIHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XG5cbiAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7IC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gIC8vIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncyByZXNwb25zaWJsZSBmb3JcbiAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuXG4gIHZhciBjaGlsZE93bmVyID0gJyc7XG5cbiAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fb3duZXIgIT09IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICAvLyBHaXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cbiAgICBjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBnZXRDb21wb25lbnROYW1lKGVsZW1lbnQuX293bmVyLnR5cGUpICsgXCIuXCI7XG4gIH1cblxuICB7XG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJyArICclcyVzIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8sIGNoaWxkT3duZXIpO1xuXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTtcblxuICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KGNoaWxkLCBwYXJlbnRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQobm9kZSkpIHtcbiAgICAvLyBUaGlzIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0aW9uLlxuICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgbm9kZS5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobm9kZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gRW50cnkgaXRlcmF0b3JzIHVzZWQgdG8gcHJvdmlkZSBpbXBsaWNpdCBrZXlzLFxuICAgICAgLy8gYnV0IG5vdyB3ZSBwcmludCBhIHNlcGFyYXRlIHdhcm5pbmcgZm9yIHRoZW0gbGF0ZXIuXG4gICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTtcbiAgICAgICAgdmFyIHN0ZXA7XG5cbiAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShzdGVwLnZhbHVlLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYW4gZWxlbWVudCwgdmFsaWRhdGUgdGhhdCBpdHMgcHJvcHMgZm9sbG93IHRoZSBwcm9wVHlwZXMgZGVmaW5pdGlvbixcbiAqIHByb3ZpZGVkIGJ5IHRoZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KSB7XG4gIHtcbiAgICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcblxuICAgIGlmICh0eXBlID09PSBudWxsIHx8IHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFR5cGVzO1xuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBOb3RlOiBNZW1vIG9ubHkgY2hlY2tzIG91dGVyIHByb3BzIGhlcmUuXG4gICAgLy8gSW5uZXIgcHJvcHMgYXJlIGNoZWNrZWQgaW4gdGhlIHJlY29uY2lsZXIuXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSkge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpO1xuICAgICAgY2hlY2tQcm9wVHlwZXMocHJvcFR5cGVzLCBlbGVtZW50LnByb3BzLCAncHJvcCcsIG5hbWUsIGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAodHlwZS5Qcm9wVHlwZXMgIT09IHVuZGVmaW5lZCAmJiAhcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24pIHtcbiAgICAgIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gdHJ1ZTsgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcblxuICAgICAgdmFyIF9uYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKTtcblxuICAgICAgZXJyb3IoJ0NvbXBvbmVudCAlcyBkZWNsYXJlZCBgUHJvcFR5cGVzYCBpbnN0ZWFkIG9mIGBwcm9wVHlwZXNgLiBEaWQgeW91IG1pc3NwZWxsIHRoZSBwcm9wZXJ0eSBhc3NpZ25tZW50PycsIF9uYW1lIHx8ICdVbmtub3duJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0eXBlLmdldERlZmF1bHRQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiAhdHlwZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgaXMgb25seSB1c2VkIG9uIGNsYXNzaWMgUmVhY3QuY3JlYXRlQ2xhc3MgJyArICdkZWZpbml0aW9ucy4gVXNlIGEgc3RhdGljIHByb3BlcnR5IG5hbWVkIGBkZWZhdWx0UHJvcHNgIGluc3RlYWQuJyk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGEgZnJhZ21lbnQsIHZhbGlkYXRlIHRoYXQgaXQgY2FuIG9ubHkgYmUgcHJvdmlkZWQgd2l0aCBmcmFnbWVudCBwcm9wc1xuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGZyYWdtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZnJhZ21lbnQpIHtcbiAge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBrZXkgIT09ICdrZXknKSB7XG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICAgIGVycm9yKCdJbnZhbGlkIHByb3AgYCVzYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLiAnICsgJ1JlYWN0LkZyYWdtZW50IGNhbiBvbmx5IGhhdmUgYGtleWAgYW5kIGBjaGlsZHJlbmAgcHJvcHMuJywga2V5KTtcblxuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhZ21lbnQucmVmICE9PSBudWxsKSB7XG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XG5cbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGNoaWxkcmVuKSB7XG4gIHZhciB2YWxpZFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSk7IC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXG5cbiAgaWYgKCF2YWxpZFR5cGUpIHtcbiAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIG5hbWVkIGltcG9ydHMuXCI7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZUluZm8gPSBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKHByb3BzKTtcblxuICAgIGlmIChzb3VyY2VJbmZvKSB7XG4gICAgICBpbmZvICs9IHNvdXJjZUluZm87XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZm8gKz0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG4gICAgfVxuXG4gICAgdmFyIHR5cGVTdHJpbmc7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgdHlwZVN0cmluZyA9ICdudWxsJztcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodHlwZSkpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnYXJyYXknO1xuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgICAgdHlwZVN0cmluZyA9IFwiPFwiICsgKGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKSB8fCAnVW5rbm93bicpICsgXCIgLz5cIjtcbiAgICAgIGluZm8gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IGV4cG9ydCBhIEpTWCBsaXRlcmFsIGluc3RlYWQgb2YgYSBjb21wb25lbnQ/JztcbiAgICB9IGVsc2Uge1xuICAgICAgdHlwZVN0cmluZyA9IHR5cGVvZiB0eXBlO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGVycm9yKCdSZWFjdC5jcmVhdGVFbGVtZW50OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciAnICsgJ2J1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgJyArICdjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGVTdHJpbmcsIGluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBlbGVtZW50ID0gY3JlYXRlRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyAvLyBUaGUgcmVzdWx0IGNhbiBiZSBudWxsaXNoIGlmIGEgbW9jayBvciBhIGN1c3RvbSBmdW5jdGlvbiBpcyB1c2VkLlxuICAvLyBUT0RPOiBEcm9wIHRoaXMgd2hlbiB0aGVzZSBhcmUgbm8gbG9uZ2VyIGFsbG93ZWQgYXMgdGhlIHR5cGUgYXJndW1lbnQuXG5cbiAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9IC8vIFNraXAga2V5IHdhcm5pbmcgaWYgdGhlIHR5cGUgaXNuJ3QgdmFsaWQgc2luY2Ugb3VyIGtleSB2YWxpZGF0aW9uIGxvZ2ljXG4gIC8vIGRvZXNuJ3QgZXhwZWN0IGEgbm9uLXN0cmluZy9mdW5jdGlvbiB0eXBlIGFuZCBjYW4gdGhyb3cgY29uZnVzaW5nIGVycm9ycy5cbiAgLy8gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2IGFuZCBwcm9kLlxuICAvLyAoUmVuZGVyaW5nIHdpbGwgdGhyb3cgd2l0aCBhIGhlbHBmdWwgbWVzc2FnZSBhbmQgYXMgc29vbiBhcyB0aGUgdHlwZSBpc1xuICAvLyBmaXhlZCwgdGhlIGtleSB3YXJuaW5ncyB3aWxsIGFwcGVhci4pXG5cblxuICBpZiAodmFsaWRUeXBlKSB7XG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGUgPT09IGV4cG9ydHMuRnJhZ21lbnQpIHtcbiAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cbnZhciBkaWRXYXJuQWJvdXREZXByZWNhdGVkQ3JlYXRlRmFjdG9yeSA9IGZhbHNlO1xuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uKHR5cGUpIHtcbiAgdmFyIHZhbGlkYXRlZEZhY3RvcnkgPSBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24uYmluZChudWxsLCB0eXBlKTtcbiAgdmFsaWRhdGVkRmFjdG9yeS50eXBlID0gdHlwZTtcblxuICB7XG4gICAgaWYgKCFkaWRXYXJuQWJvdXREZXByZWNhdGVkQ3JlYXRlRmFjdG9yeSkge1xuICAgICAgZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkgPSB0cnVlO1xuXG4gICAgICB3YXJuKCdSZWFjdC5jcmVhdGVGYWN0b3J5KCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gQ29uc2lkZXIgdXNpbmcgSlNYICcgKyAnb3IgdXNlIFJlYWN0LmNyZWF0ZUVsZW1lbnQoKSBkaXJlY3RseSBpbnN0ZWFkLicpO1xuICAgIH0gLy8gTGVnYWN5IGhvb2s6IHJlbW92ZSBpdFxuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsaWRhdGVkRmFjdG9yeSwgJ3R5cGUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB3YXJuKCdGYWN0b3J5LnR5cGUgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHRoZSBjbGFzcyBkaXJlY3RseSAnICsgJ2JlZm9yZSBwYXNzaW5nIGl0IHRvIGNyZWF0ZUZhY3RvcnkuJyk7XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd0eXBlJywge1xuICAgICAgICAgIHZhbHVlOiB0eXBlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZWRGYWN0b3J5O1xufVxuZnVuY3Rpb24gY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24oZWxlbWVudCwgcHJvcHMsIGNoaWxkcmVuKSB7XG4gIHZhciBuZXdFbGVtZW50ID0gY2xvbmVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIG5ld0VsZW1lbnQudHlwZSk7XG4gIH1cblxuICB2YWxpZGF0ZVByb3BUeXBlcyhuZXdFbGVtZW50KTtcbiAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG5cbntcblxuICB0cnkge1xuICAgIHZhciBmcm96ZW5PYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgKi9cblxuICAgIG5ldyBNYXAoW1tmcm96ZW5PYmplY3QsIG51bGxdXSk7XG4gICAgbmV3IFNldChbZnJvemVuT2JqZWN0XSk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1uZXcgKi9cbiAgfSBjYXRjaCAoZSkge1xuICB9XG59XG5cbnZhciBjcmVhdGVFbGVtZW50JDEgPSAgY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uIDtcbnZhciBjbG9uZUVsZW1lbnQkMSA9ICBjbG9uZUVsZW1lbnRXaXRoVmFsaWRhdGlvbiA7XG52YXIgY3JlYXRlRmFjdG9yeSA9ICBjcmVhdGVGYWN0b3J5V2l0aFZhbGlkYXRpb24gO1xudmFyIENoaWxkcmVuID0ge1xuICBtYXA6IG1hcENoaWxkcmVuLFxuICBmb3JFYWNoOiBmb3JFYWNoQ2hpbGRyZW4sXG4gIGNvdW50OiBjb3VudENoaWxkcmVuLFxuICB0b0FycmF5OiB0b0FycmF5LFxuICBvbmx5OiBvbmx5Q2hpbGRcbn07XG5cbmV4cG9ydHMuQ2hpbGRyZW4gPSBDaGlsZHJlbjtcbmV4cG9ydHMuQ29tcG9uZW50ID0gQ29tcG9uZW50O1xuZXhwb3J0cy5QdXJlQ29tcG9uZW50ID0gUHVyZUNvbXBvbmVudDtcbmV4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQgPSBSZWFjdFNoYXJlZEludGVybmFscztcbmV4cG9ydHMuY2xvbmVFbGVtZW50ID0gY2xvbmVFbGVtZW50JDE7XG5leHBvcnRzLmNyZWF0ZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0O1xuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gY3JlYXRlRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVGYWN0b3J5ID0gY3JlYXRlRmFjdG9yeTtcbmV4cG9ydHMuY3JlYXRlUmVmID0gY3JlYXRlUmVmO1xuZXhwb3J0cy5mb3J3YXJkUmVmID0gZm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnQgPSBpc1ZhbGlkRWxlbWVudDtcbmV4cG9ydHMubGF6eSA9IGxhenk7XG5leHBvcnRzLm1lbW8gPSBtZW1vO1xuZXhwb3J0cy51c2VDYWxsYmFjayA9IHVzZUNhbGxiYWNrO1xuZXhwb3J0cy51c2VDb250ZXh0ID0gdXNlQ29udGV4dDtcbmV4cG9ydHMudXNlRGVidWdWYWx1ZSA9IHVzZURlYnVnVmFsdWU7XG5leHBvcnRzLnVzZUVmZmVjdCA9IHVzZUVmZmVjdDtcbmV4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZSA9IHVzZUltcGVyYXRpdmVIYW5kbGU7XG5leHBvcnRzLnVzZUxheW91dEVmZmVjdCA9IHVzZUxheW91dEVmZmVjdDtcbmV4cG9ydHMudXNlTWVtbyA9IHVzZU1lbW87XG5leHBvcnRzLnVzZVJlZHVjZXIgPSB1c2VSZWR1Y2VyO1xuZXhwb3J0cy51c2VSZWYgPSB1c2VSZWY7XG5leHBvcnRzLnVzZVN0YXRlID0gdXNlU3RhdGU7XG5leHBvcnRzLnZlcnNpb24gPSBSZWFjdFZlcnNpb247XG4gIH0pKCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYwLjIwLjJcbiAqIHNjaGVkdWxlci5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBlbmFibGVTY2hlZHVsZXJEZWJ1Z2dpbmcgPSBmYWxzZTtcbnZhciBlbmFibGVQcm9maWxpbmcgPSBmYWxzZTtcblxudmFyIHJlcXVlc3RIb3N0Q2FsbGJhY2s7XG52YXIgcmVxdWVzdEhvc3RUaW1lb3V0O1xudmFyIGNhbmNlbEhvc3RUaW1lb3V0O1xudmFyIHJlcXVlc3RQYWludDtcbnZhciBoYXNQZXJmb3JtYW5jZU5vdyA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJztcblxuaWYgKGhhc1BlcmZvcm1hbmNlTm93KSB7XG4gIHZhciBsb2NhbFBlcmZvcm1hbmNlID0gcGVyZm9ybWFuY2U7XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGxvY2FsUGVyZm9ybWFuY2Uubm93KCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgbG9jYWxEYXRlID0gRGF0ZTtcbiAgdmFyIGluaXRpYWxUaW1lID0gbG9jYWxEYXRlLm5vdygpO1xuXG4gIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsb2NhbERhdGUubm93KCkgLSBpbml0aWFsVGltZTtcbiAgfTtcbn1cblxuaWYgKCAvLyBJZiBTY2hlZHVsZXIgcnVucyBpbiBhIG5vbi1ET00gZW52aXJvbm1lbnQsIGl0IGZhbGxzIGJhY2sgdG8gYSBuYWl2ZVxuLy8gaW1wbGVtZW50YXRpb24gdXNpbmcgc2V0VGltZW91dC5cbnR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IC8vIENoZWNrIGlmIE1lc3NhZ2VDaGFubmVsIGlzIHN1cHBvcnRlZCwgdG9vLlxudHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAnZnVuY3Rpb24nKSB7XG4gIC8vIElmIHRoaXMgYWNjaWRlbnRhbGx5IGdldHMgaW1wb3J0ZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudCwgZS5nLiBKYXZhU2NyaXB0Q29yZSxcbiAgLy8gZmFsbGJhY2sgdG8gYSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi5cbiAgdmFyIF9jYWxsYmFjayA9IG51bGw7XG4gIHZhciBfdGltZW91dElEID0gbnVsbDtcblxuICB2YXIgX2ZsdXNoQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKF9jYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgICAgICAgdmFyIGhhc1JlbWFpbmluZ1RpbWUgPSB0cnVlO1xuXG4gICAgICAgIF9jYWxsYmFjayhoYXNSZW1haW5pbmdUaW1lLCBjdXJyZW50VGltZSk7XG5cbiAgICAgICAgX2NhbGxiYWNrID0gbnVsbDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2V0VGltZW91dChfZmx1c2hDYWxsYmFjaywgMCk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJlcXVlc3RIb3N0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICBpZiAoX2NhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAvLyBQcm90ZWN0IGFnYWluc3QgcmUtZW50cmFuY3kuXG4gICAgICBzZXRUaW1lb3V0KHJlcXVlc3RIb3N0Q2FsbGJhY2ssIDAsIGNiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX2NhbGxiYWNrID0gY2I7XG4gICAgICBzZXRUaW1lb3V0KF9mbHVzaENhbGxiYWNrLCAwKTtcbiAgICB9XG4gIH07XG5cbiAgcmVxdWVzdEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKGNiLCBtcykge1xuICAgIF90aW1lb3V0SUQgPSBzZXRUaW1lb3V0KGNiLCBtcyk7XG4gIH07XG5cbiAgY2FuY2VsSG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgY2xlYXJUaW1lb3V0KF90aW1lb3V0SUQpO1xuICB9O1xuXG4gIGV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIHJlcXVlc3RQYWludCA9IGV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSBmdW5jdGlvbiAoKSB7fTtcbn0gZWxzZSB7XG4gIC8vIENhcHR1cmUgbG9jYWwgcmVmZXJlbmNlcyB0byBuYXRpdmUgQVBJcywgaW4gY2FzZSBhIHBvbHlmaWxsIG92ZXJyaWRlcyB0aGVtLlxuICB2YXIgX3NldFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dDtcbiAgdmFyIF9jbGVhclRpbWVvdXQgPSB3aW5kb3cuY2xlYXJUaW1lb3V0O1xuXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBUT0RPOiBTY2hlZHVsZXIgbm8gbG9uZ2VyIHJlcXVpcmVzIHRoZXNlIG1ldGhvZHMgdG8gYmUgcG9seWZpbGxlZC4gQnV0XG4gICAgLy8gbWF5YmUgd2Ugd2FudCB0byBjb250aW51ZSB3YXJuaW5nIGlmIHRoZXkgZG9uJ3QgZXhpc3QsIHRvIHByZXNlcnZlIHRoZVxuICAgIC8vIG9wdGlvbiB0byByZWx5IG9uIGl0IGluIHRoZSBmdXR1cmU/XG4gICAgdmFyIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG4gICAgdmFyIGNhbmNlbEFuaW1hdGlvbkZyYW1lID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuXG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ2Vycm9yJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuICAgICAgY29uc29sZVsnZXJyb3InXShcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBcIiArICdNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBVc2luZyBjb25zb2xlWydlcnJvciddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGNhbmNlbEFuaW1hdGlvbkZyYW1lLiBcIiArICdNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgICB9XG4gIH1cblxuICB2YXIgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgdmFyIHNjaGVkdWxlZEhvc3RDYWxsYmFjayA9IG51bGw7XG4gIHZhciB0YXNrVGltZW91dElEID0gLTE7IC8vIFNjaGVkdWxlciBwZXJpb2RpY2FsbHkgeWllbGRzIGluIGNhc2UgdGhlcmUgaXMgb3RoZXIgd29yayBvbiB0aGUgbWFpblxuICAvLyB0aHJlYWQsIGxpa2UgdXNlciBldmVudHMuIEJ5IGRlZmF1bHQsIGl0IHlpZWxkcyBtdWx0aXBsZSB0aW1lcyBwZXIgZnJhbWUuXG4gIC8vIEl0IGRvZXMgbm90IGF0dGVtcHQgdG8gYWxpZ24gd2l0aCBmcmFtZSBib3VuZGFyaWVzLCBzaW5jZSBtb3N0IHRhc2tzIGRvbid0XG4gIC8vIG5lZWQgdG8gYmUgZnJhbWUgYWxpZ25lZDsgZm9yIHRob3NlIHRoYXQgZG8sIHVzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuXG5cbiAgdmFyIHlpZWxkSW50ZXJ2YWwgPSA1O1xuICB2YXIgZGVhZGxpbmUgPSAwOyAvLyBUT0RPOiBNYWtlIHRoaXMgY29uZmlndXJhYmxlXG5cbiAge1xuICAgIC8vIGBpc0lucHV0UGVuZGluZ2AgaXMgbm90IGF2YWlsYWJsZS4gU2luY2Ugd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyBpZlxuICAgIC8vIHRoZXJlJ3MgcGVuZGluZyBpbnB1dCwgYWx3YXlzIHlpZWxkIGF0IHRoZSBlbmQgb2YgdGhlIGZyYW1lLlxuICAgIGV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy51bnN0YWJsZV9ub3coKSA+PSBkZWFkbGluZTtcbiAgICB9OyAvLyBTaW5jZSB3ZSB5aWVsZCBldmVyeSBmcmFtZSByZWdhcmRsZXNzLCBgcmVxdWVzdFBhaW50YCBoYXMgbm8gZWZmZWN0LlxuXG5cbiAgICByZXF1ZXN0UGFpbnQgPSBmdW5jdGlvbiAoKSB7fTtcbiAgfVxuXG4gIGV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSBmdW5jdGlvbiAoZnBzKSB7XG4gICAgaWYgKGZwcyA8IDAgfHwgZnBzID4gMTI1KSB7XG4gICAgICAvLyBVc2luZyBjb25zb2xlWydlcnJvciddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oJ2ZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCAnICsgJ2ZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZwcyA+IDApIHtcbiAgICAgIHlpZWxkSW50ZXJ2YWwgPSBNYXRoLmZsb29yKDEwMDAgLyBmcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXNldCB0aGUgZnJhbWVyYXRlXG4gICAgICB5aWVsZEludGVydmFsID0gNTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2NoZWR1bGVkSG9zdENhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpOyAvLyBZaWVsZCBhZnRlciBgeWllbGRJbnRlcnZhbGAgbXMsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgd2UgYXJlIGluIHRoZSB2c3luY1xuICAgICAgLy8gY3ljbGUuIFRoaXMgbWVhbnMgdGhlcmUncyBhbHdheXMgdGltZSByZW1haW5pbmcgYXQgdGhlIGJlZ2lubmluZyBvZlxuICAgICAgLy8gdGhlIG1lc3NhZ2UgZXZlbnQuXG5cbiAgICAgIGRlYWRsaW5lID0gY3VycmVudFRpbWUgKyB5aWVsZEludGVydmFsO1xuICAgICAgdmFyIGhhc1RpbWVSZW1haW5pbmcgPSB0cnVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgaGFzTW9yZVdvcmsgPSBzY2hlZHVsZWRIb3N0Q2FsbGJhY2soaGFzVGltZVJlbWFpbmluZywgY3VycmVudFRpbWUpO1xuXG4gICAgICAgIGlmICghaGFzTW9yZVdvcmspIHtcbiAgICAgICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgIHNjaGVkdWxlZEhvc3RDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhlcmUncyBtb3JlIHdvcmssIHNjaGVkdWxlIHRoZSBuZXh0IG1lc3NhZ2UgZXZlbnQgYXQgdGhlIGVuZFxuICAgICAgICAgIC8vIG9mIHRoZSBwcmVjZWRpbmcgb25lLlxuICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIGEgc2NoZWR1bGVyIHRhc2sgdGhyb3dzLCBleGl0IHRoZSBjdXJyZW50IGJyb3dzZXIgdGFzayBzbyB0aGVcbiAgICAgICAgLy8gZXJyb3IgY2FuIGJlIG9ic2VydmVkLlxuICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9IC8vIFlpZWxkaW5nIHRvIHRoZSBicm93c2VyIHdpbGwgZ2l2ZSBpdCBhIGNoYW5jZSB0byBwYWludCwgc28gd2UgY2FuXG4gIH07XG5cbiAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgdmFyIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZTtcblxuICByZXF1ZXN0SG9zdENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICBpZiAoIWlzTWVzc2FnZUxvb3BSdW5uaW5nKSB7XG4gICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9IHRydWU7XG4gICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgIH1cbiAgfTtcblxuICByZXF1ZXN0SG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIG1zKSB7XG4gICAgdGFza1RpbWVvdXRJRCA9IF9zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrKGV4cG9ydHMudW5zdGFibGVfbm93KCkpO1xuICAgIH0sIG1zKTtcbiAgfTtcblxuICBjYW5jZWxIb3N0VGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICBfY2xlYXJUaW1lb3V0KHRhc2tUaW1lb3V0SUQpO1xuXG4gICAgdGFza1RpbWVvdXRJRCA9IC0xO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwdXNoKGhlYXAsIG5vZGUpIHtcbiAgdmFyIGluZGV4ID0gaGVhcC5sZW5ndGg7XG4gIGhlYXAucHVzaChub2RlKTtcbiAgc2lmdFVwKGhlYXAsIG5vZGUsIGluZGV4KTtcbn1cbmZ1bmN0aW9uIHBlZWsoaGVhcCkge1xuICB2YXIgZmlyc3QgPSBoZWFwWzBdO1xuICByZXR1cm4gZmlyc3QgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBmaXJzdDtcbn1cbmZ1bmN0aW9uIHBvcChoZWFwKSB7XG4gIHZhciBmaXJzdCA9IGhlYXBbMF07XG5cbiAgaWYgKGZpcnN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgbGFzdCA9IGhlYXAucG9wKCk7XG5cbiAgICBpZiAobGFzdCAhPT0gZmlyc3QpIHtcbiAgICAgIGhlYXBbMF0gPSBsYXN0O1xuICAgICAgc2lmdERvd24oaGVhcCwgbGFzdCwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcnN0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpZnRVcChoZWFwLCBub2RlLCBpKSB7XG4gIHZhciBpbmRleCA9IGk7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgcGFyZW50SW5kZXggPSBpbmRleCAtIDEgPj4+IDE7XG4gICAgdmFyIHBhcmVudCA9IGhlYXBbcGFyZW50SW5kZXhdO1xuXG4gICAgaWYgKHBhcmVudCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUocGFyZW50LCBub2RlKSA+IDApIHtcbiAgICAgIC8vIFRoZSBwYXJlbnQgaXMgbGFyZ2VyLiBTd2FwIHBvc2l0aW9ucy5cbiAgICAgIGhlYXBbcGFyZW50SW5kZXhdID0gbm9kZTtcbiAgICAgIGhlYXBbaW5kZXhdID0gcGFyZW50O1xuICAgICAgaW5kZXggPSBwYXJlbnRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHBhcmVudCBpcyBzbWFsbGVyLiBFeGl0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzaWZ0RG93bihoZWFwLCBub2RlLCBpKSB7XG4gIHZhciBpbmRleCA9IGk7XG4gIHZhciBsZW5ndGggPSBoZWFwLmxlbmd0aDtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgbGVmdEluZGV4ID0gKGluZGV4ICsgMSkgKiAyIC0gMTtcbiAgICB2YXIgbGVmdCA9IGhlYXBbbGVmdEluZGV4XTtcbiAgICB2YXIgcmlnaHRJbmRleCA9IGxlZnRJbmRleCArIDE7XG4gICAgdmFyIHJpZ2h0ID0gaGVhcFtyaWdodEluZGV4XTsgLy8gSWYgdGhlIGxlZnQgb3IgcmlnaHQgbm9kZSBpcyBzbWFsbGVyLCBzd2FwIHdpdGggdGhlIHNtYWxsZXIgb2YgdGhvc2UuXG5cbiAgICBpZiAobGVmdCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUobGVmdCwgbm9kZSkgPCAwKSB7XG4gICAgICBpZiAocmlnaHQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHJpZ2h0LCBsZWZ0KSA8IDApIHtcbiAgICAgICAgaGVhcFtpbmRleF0gPSByaWdodDtcbiAgICAgICAgaGVhcFtyaWdodEluZGV4XSA9IG5vZGU7XG4gICAgICAgIGluZGV4ID0gcmlnaHRJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYXBbaW5kZXhdID0gbGVmdDtcbiAgICAgICAgaGVhcFtsZWZ0SW5kZXhdID0gbm9kZTtcbiAgICAgICAgaW5kZXggPSBsZWZ0SW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUocmlnaHQsIG5vZGUpIDwgMCkge1xuICAgICAgaGVhcFtpbmRleF0gPSByaWdodDtcbiAgICAgIGhlYXBbcmlnaHRJbmRleF0gPSBub2RlO1xuICAgICAgaW5kZXggPSByaWdodEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOZWl0aGVyIGNoaWxkIGlzIHNtYWxsZXIuIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICAvLyBDb21wYXJlIHNvcnQgaW5kZXggZmlyc3QsIHRoZW4gdGFzayBpZC5cbiAgdmFyIGRpZmYgPSBhLnNvcnRJbmRleCAtIGIuc29ydEluZGV4O1xuICByZXR1cm4gZGlmZiAhPT0gMCA/IGRpZmYgOiBhLmlkIC0gYi5pZDtcbn1cblxuLy8gVE9ETzogVXNlIHN5bWJvbHM/XG52YXIgSW1tZWRpYXRlUHJpb3JpdHkgPSAxO1xudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5ID0gMjtcbnZhciBOb3JtYWxQcmlvcml0eSA9IDM7XG52YXIgTG93UHJpb3JpdHkgPSA0O1xudmFyIElkbGVQcmlvcml0eSA9IDU7XG5cbmZ1bmN0aW9uIG1hcmtUYXNrRXJyb3JlZCh0YXNrLCBtcykge1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cbi8vIE1hdGgucG93KDIsIDMwKSAtIDFcbi8vIDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExXG5cbnZhciBtYXhTaWduZWQzMUJpdEludCA9IDEwNzM3NDE4MjM7IC8vIFRpbWVzIG91dCBpbW1lZGlhdGVseVxuXG52YXIgSU1NRURJQVRFX1BSSU9SSVRZX1RJTUVPVVQgPSAtMTsgLy8gRXZlbnR1YWxseSB0aW1lcyBvdXRcblxudmFyIFVTRVJfQkxPQ0tJTkdfUFJJT1JJVFlfVElNRU9VVCA9IDI1MDtcbnZhciBOT1JNQUxfUFJJT1JJVFlfVElNRU9VVCA9IDUwMDA7XG52YXIgTE9XX1BSSU9SSVRZX1RJTUVPVVQgPSAxMDAwMDsgLy8gTmV2ZXIgdGltZXMgb3V0XG5cbnZhciBJRExFX1BSSU9SSVRZX1RJTUVPVVQgPSBtYXhTaWduZWQzMUJpdEludDsgLy8gVGFza3MgYXJlIHN0b3JlZCBvbiBhIG1pbiBoZWFwXG5cbnZhciB0YXNrUXVldWUgPSBbXTtcbnZhciB0aW1lclF1ZXVlID0gW107IC8vIEluY3JlbWVudGluZyBpZCBjb3VudGVyLiBVc2VkIHRvIG1haW50YWluIGluc2VydGlvbiBvcmRlci5cblxudmFyIHRhc2tJZENvdW50ZXIgPSAxOyAvLyBQYXVzaW5nIHRoZSBzY2hlZHVsZXIgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuXG52YXIgY3VycmVudFRhc2sgPSBudWxsO1xudmFyIGN1cnJlbnRQcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7IC8vIFRoaXMgaXMgc2V0IHdoaWxlIHBlcmZvcm1pbmcgd29yaywgdG8gcHJldmVudCByZS1lbnRyYW5jeS5cblxudmFyIGlzUGVyZm9ybWluZ1dvcmsgPSBmYWxzZTtcbnZhciBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IGZhbHNlO1xudmFyIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSkge1xuICAvLyBDaGVjayBmb3IgdGFza3MgdGhhdCBhcmUgbm8gbG9uZ2VyIGRlbGF5ZWQgYW5kIGFkZCB0aGVtIHRvIHRoZSBxdWV1ZS5cbiAgdmFyIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcblxuICB3aGlsZSAodGltZXIgIT09IG51bGwpIHtcbiAgICBpZiAodGltZXIuY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgIC8vIFRpbWVyIHdhcyBjYW5jZWxsZWQuXG4gICAgICBwb3AodGltZXJRdWV1ZSk7XG4gICAgfSBlbHNlIGlmICh0aW1lci5zdGFydFRpbWUgPD0gY3VycmVudFRpbWUpIHtcbiAgICAgIC8vIFRpbWVyIGZpcmVkLiBUcmFuc2ZlciB0byB0aGUgdGFzayBxdWV1ZS5cbiAgICAgIHBvcCh0aW1lclF1ZXVlKTtcbiAgICAgIHRpbWVyLnNvcnRJbmRleCA9IHRpbWVyLmV4cGlyYXRpb25UaW1lO1xuICAgICAgcHVzaCh0YXNrUXVldWUsIHRpbWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVtYWluaW5nIHRpbWVycyBhcmUgcGVuZGluZy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVGltZW91dChjdXJyZW50VGltZSkge1xuICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG4gIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuXG4gIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQpIHtcbiAgICBpZiAocGVlayh0YXNrUXVldWUpICE9PSBudWxsKSB7XG4gICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmaXJzdFRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcblxuICAgICAgaWYgKGZpcnN0VGltZXIgIT09IG51bGwpIHtcbiAgICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaFdvcmsoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpIHtcblxuXG4gIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgaWYgKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQpIHtcbiAgICAvLyBXZSBzY2hlZHVsZWQgYSB0aW1lb3V0IGJ1dCBpdCdzIG5vIGxvbmdlciBuZWVkZWQuIENhbmNlbCBpdC5cbiAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG4gICAgY2FuY2VsSG9zdFRpbWVvdXQoKTtcbiAgfVxuXG4gIGlzUGVyZm9ybWluZ1dvcmsgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICBpZiAoZW5hYmxlUHJvZmlsaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRUYXNrICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgICAgICAgICBtYXJrVGFza0Vycm9yZWQoY3VycmVudFRhc2ssIGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICBjdXJyZW50VGFzay5pc1F1ZXVlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGNhdGNoIGluIHByb2QgY29kZSBwYXRoLlxuICAgICAgcmV0dXJuIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFRhc2sgPSBudWxsO1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgIGlzUGVyZm9ybWluZ1dvcmsgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSkge1xuICB2YXIgY3VycmVudFRpbWUgPSBpbml0aWFsVGltZTtcbiAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuXG4gIHdoaWxlIChjdXJyZW50VGFzayAhPT0gbnVsbCAmJiAhKGVuYWJsZVNjaGVkdWxlckRlYnVnZ2luZyApKSB7XG4gICAgaWYgKGN1cnJlbnRUYXNrLmV4cGlyYXRpb25UaW1lID4gY3VycmVudFRpbWUgJiYgKCFoYXNUaW1lUmVtYWluaW5nIHx8IGV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQoKSkpIHtcbiAgICAgIC8vIFRoaXMgY3VycmVudFRhc2sgaGFzbid0IGV4cGlyZWQsIGFuZCB3ZSd2ZSByZWFjaGVkIHRoZSBkZWFkbGluZS5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBjYWxsYmFjayA9IGN1cnJlbnRUYXNrLmNhbGxiYWNrO1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY3VycmVudFRhc2suY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBjdXJyZW50VGFzay5wcmlvcml0eUxldmVsO1xuICAgICAgdmFyIGRpZFVzZXJDYWxsYmFja1RpbWVvdXQgPSBjdXJyZW50VGFzay5leHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZTtcblxuICAgICAgdmFyIGNvbnRpbnVhdGlvbkNhbGxiYWNrID0gY2FsbGJhY2soZGlkVXNlckNhbGxiYWNrVGltZW91dCk7XG4gICAgICBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG5cbiAgICAgIGlmICh0eXBlb2YgY29udGludWF0aW9uQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY3VycmVudFRhc2suY2FsbGJhY2sgPSBjb250aW51YXRpb25DYWxsYmFjaztcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRUYXNrID09PSBwZWVrKHRhc2tRdWV1ZSkpIHtcbiAgICAgICAgICBwb3AodGFza1F1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9wKHRhc2tRdWV1ZSk7XG4gICAgfVxuXG4gICAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG4gIH0gLy8gUmV0dXJuIHdoZXRoZXIgdGhlcmUncyBhZGRpdGlvbmFsIHdvcmtcblxuXG4gIGlmIChjdXJyZW50VGFzayAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBmaXJzdFRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcblxuICAgIGlmIChmaXJzdFRpbWVyICE9PSBudWxsKSB7XG4gICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgZmlyc3RUaW1lci5zdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3J1bldpdGhQcmlvcml0eShwcmlvcml0eUxldmVsLCBldmVudEhhbmRsZXIpIHtcbiAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTtcbiAgfVxuXG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpO1xuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX25leHQoZXZlbnRIYW5kbGVyKSB7XG4gIHZhciBwcmlvcml0eUxldmVsO1xuXG4gIHN3aXRjaCAoY3VycmVudFByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICAgIC8vIFNoaWZ0IGRvd24gdG8gbm9ybWFsIHByaW9yaXR5XG4gICAgICBwcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBBbnl0aGluZyBsb3dlciB0aGFuIG5vcm1hbCBwcmlvcml0eSBzaG91bGQgcmVtYWluIGF0IHRoZSBjdXJyZW50IGxldmVsLlxuICAgICAgcHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV93cmFwQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgdmFyIHBhcmVudFByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGlzIGlzIGEgZm9yayBvZiBydW5XaXRoUHJpb3JpdHksIGlubGluZWQgZm9yIHBlcmZvcm1hbmNlLlxuICAgIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHBhcmVudFByaW9yaXR5TGV2ZWw7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhwcmlvcml0eUxldmVsLCBjYWxsYmFjaywgb3B0aW9ucykge1xuICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICB2YXIgc3RhcnRUaW1lO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucyAhPT0gbnVsbCkge1xuICAgIHZhciBkZWxheSA9IG9wdGlvbnMuZGVsYXk7XG5cbiAgICBpZiAodHlwZW9mIGRlbGF5ID09PSAnbnVtYmVyJyAmJiBkZWxheSA+IDApIHtcbiAgICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lICsgZGVsYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZTtcbiAgfVxuXG4gIHZhciB0aW1lb3V0O1xuXG4gIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gSU1NRURJQVRFX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gVVNFUl9CTE9DS0lOR19QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBJRExFX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gTE9XX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgZGVmYXVsdDpcbiAgICAgIHRpbWVvdXQgPSBOT1JNQUxfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdmFyIGV4cGlyYXRpb25UaW1lID0gc3RhcnRUaW1lICsgdGltZW91dDtcbiAgdmFyIG5ld1Rhc2sgPSB7XG4gICAgaWQ6IHRhc2tJZENvdW50ZXIrKyxcbiAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgcHJpb3JpdHlMZXZlbDogcHJpb3JpdHlMZXZlbCxcbiAgICBzdGFydFRpbWU6IHN0YXJ0VGltZSxcbiAgICBleHBpcmF0aW9uVGltZTogZXhwaXJhdGlvblRpbWUsXG4gICAgc29ydEluZGV4OiAtMVxuICB9O1xuXG4gIGlmIChzdGFydFRpbWUgPiBjdXJyZW50VGltZSkge1xuICAgIC8vIFRoaXMgaXMgYSBkZWxheWVkIHRhc2suXG4gICAgbmV3VGFzay5zb3J0SW5kZXggPSBzdGFydFRpbWU7XG4gICAgcHVzaCh0aW1lclF1ZXVlLCBuZXdUYXNrKTtcblxuICAgIGlmIChwZWVrKHRhc2tRdWV1ZSkgPT09IG51bGwgJiYgbmV3VGFzayA9PT0gcGVlayh0aW1lclF1ZXVlKSkge1xuICAgICAgLy8gQWxsIHRhc2tzIGFyZSBkZWxheWVkLCBhbmQgdGhpcyBpcyB0aGUgdGFzayB3aXRoIHRoZSBlYXJsaWVzdCBkZWxheS5cbiAgICAgIGlmIChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkKSB7XG4gICAgICAgIC8vIENhbmNlbCBhbiBleGlzdGluZyB0aW1lb3V0LlxuICAgICAgICBjYW5jZWxIb3N0VGltZW91dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IHRydWU7XG4gICAgICB9IC8vIFNjaGVkdWxlIGEgdGltZW91dC5cblxuXG4gICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXdUYXNrLnNvcnRJbmRleCA9IGV4cGlyYXRpb25UaW1lO1xuICAgIHB1c2godGFza1F1ZXVlLCBuZXdUYXNrKTtcbiAgICAvLyB3YWl0IHVudGlsIHRoZSBuZXh0IHRpbWUgd2UgeWllbGQuXG5cblxuICAgIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgJiYgIWlzUGVyZm9ybWluZ1dvcmspIHtcbiAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3VGFzaztcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfcGF1c2VFeGVjdXRpb24oKSB7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uKCkge1xuXG4gIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgJiYgIWlzUGVyZm9ybWluZ1dvcmspIHtcbiAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlKCkge1xuICByZXR1cm4gcGVlayh0YXNrUXVldWUpO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjayh0YXNrKSB7XG4gIC8vIHJlbW92ZSBmcm9tIHRoZSBxdWV1ZSBiZWNhdXNlIHlvdSBjYW4ndCByZW1vdmUgYXJiaXRyYXJ5IG5vZGVzIGZyb20gYW5cbiAgLy8gYXJyYXkgYmFzZWQgaGVhcCwgb25seSB0aGUgZmlyc3Qgb25lLilcblxuXG4gIHRhc2suY2FsbGJhY2sgPSBudWxsO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpIHtcbiAgcmV0dXJuIGN1cnJlbnRQcmlvcml0eUxldmVsO1xufVxuXG52YXIgdW5zdGFibGVfcmVxdWVzdFBhaW50ID0gcmVxdWVzdFBhaW50O1xudmFyIHVuc3RhYmxlX1Byb2ZpbGluZyA9ICBudWxsO1xuXG5leHBvcnRzLnVuc3RhYmxlX0lkbGVQcmlvcml0eSA9IElkbGVQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHkgPSBJbW1lZGlhdGVQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfTG93UHJpb3JpdHkgPSBMb3dQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfTm9ybWFsUHJpb3JpdHkgPSBOb3JtYWxQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfUHJvZmlsaW5nID0gdW5zdGFibGVfUHJvZmlsaW5nO1xuZXhwb3J0cy51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSA9IFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayA9IHVuc3RhYmxlX2NhbmNlbENhbGxiYWNrO1xuZXhwb3J0cy51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbiA9IHVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA9IHVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSA9IHVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlO1xuZXhwb3J0cy51bnN0YWJsZV9uZXh0ID0gdW5zdGFibGVfbmV4dDtcbmV4cG9ydHMudW5zdGFibGVfcGF1c2VFeGVjdXRpb24gPSB1bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbjtcbmV4cG9ydHMudW5zdGFibGVfcmVxdWVzdFBhaW50ID0gdW5zdGFibGVfcmVxdWVzdFBhaW50O1xuZXhwb3J0cy51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkgPSB1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2sgPSB1bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrO1xuZXhwb3J0cy51bnN0YWJsZV93cmFwQ2FsbGJhY2sgPSB1bnN0YWJsZV93cmFwQ2FsbGJhY2s7XG4gIH0pKCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjAuMjAuMlxuICogc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgREVGQVVMVF9USFJFQURfSUQgPSAwOyAvLyBDb3VudGVycyB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRHMuXG5cbnZhciBpbnRlcmFjdGlvbklEQ291bnRlciA9IDA7XG52YXIgdGhyZWFkSURDb3VudGVyID0gMDsgLy8gU2V0IG9mIGN1cnJlbnRseSB0cmFjZWQgaW50ZXJhY3Rpb25zLlxuLy8gSW50ZXJhY3Rpb25zIFwic3RhY2tcIlx1MjAxM1xuLy8gTWVhbmluZyB0aGF0IG5ld2x5IHRyYWNlZCBpbnRlcmFjdGlvbnMgYXJlIGFwcGVuZGVkIHRvIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBzZXQuXG4vLyBXaGVuIGFuIGludGVyYWN0aW9uIGdvZXMgb3V0IG9mIHNjb3BlLCB0aGUgcHJldmlvdXMgc2V0IChpZiBhbnkpIGlzIHJlc3RvcmVkLlxuXG5leHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmID0gbnVsbDsgLy8gTGlzdGVuZXIocykgdG8gbm90aWZ5IHdoZW4gaW50ZXJhY3Rpb25zIGJlZ2luIGFuZCBlbmQuXG5cbmV4cG9ydHMuX19zdWJzY3JpYmVyUmVmID0gbnVsbDtcblxue1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmID0ge1xuICAgIGN1cnJlbnQ6IG5ldyBTZXQoKVxuICB9O1xuICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZiA9IHtcbiAgICBjdXJyZW50OiBudWxsXG4gIH07XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9jbGVhcihjYWxsYmFjaykge1xuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBuZXcgU2V0KCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuICB9XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRDdXJyZW50KCkge1xuICB7XG4gICAgcmV0dXJuIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgfVxufVxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0VGhyZWFkSUQoKSB7XG4gIHJldHVybiArK3RocmVhZElEQ291bnRlcjtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3RyYWNlKG5hbWUsIHRpbWVzdGFtcCwgY2FsbGJhY2spIHtcbiAgdmFyIHRocmVhZElEID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBERUZBVUxUX1RIUkVBRF9JRDtcblxuICB2YXIgaW50ZXJhY3Rpb24gPSB7XG4gICAgX19jb3VudDogMSxcbiAgICBpZDogaW50ZXJhY3Rpb25JRENvdW50ZXIrKyxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHRpbWVzdGFtcDogdGltZXN0YW1wXG4gIH07XG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50OyAvLyBUcmFjZWQgaW50ZXJhY3Rpb25zIHNob3VsZCBzdGFjay9hY2N1bXVsYXRlLlxuICAvLyBUbyBkbyB0aGF0LCBjbG9uZSB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG4gIC8vIFRoZSBwcmV2aW91cyBzZXQgd2lsbCBiZSByZXN0b3JlZCB1cG9uIGNvbXBsZXRpb24uXG5cbiAgdmFyIGludGVyYWN0aW9ucyA9IG5ldyBTZXQocHJldkludGVyYWN0aW9ucyk7XG4gIGludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBpbnRlcmFjdGlvbnM7XG4gIHZhciBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcbiAgdmFyIHJldHVyblZhbHVlO1xuXG4gIHRyeSB7XG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbik7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVyblZhbHVlID0gY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07IC8vIElmIG5vIGFzeW5jIHdvcmsgd2FzIHNjaGVkdWxlZCBmb3IgdGhpcyBpbnRlcmFjdGlvbixcbiAgICAgICAgICAvLyBOb3RpZnkgc3Vic2NyaWJlcnMgdGhhdCBpdCdzIGNvbXBsZXRlZC5cblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3dyYXAoY2FsbGJhY2spIHtcbiAgdmFyIHRocmVhZElEID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBERUZBVUxUX1RIUkVBRF9JRDtcblxuICB2YXIgd3JhcHBlZEludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgdmFyIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgc3Vic2NyaWJlci5vbldvcmtTY2hlZHVsZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICB9IC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBhc3luYyB3b3JrIGNvdW50IGZvciB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG4gIC8vIFVwZGF0ZSBhZnRlciBjYWxsaW5nIHN1YnNjcmliZXJzIGluIGNhc2Ugb2YgZXJyb3IuXG5cblxuICB3cmFwcGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICB9KTtcbiAgdmFyIGhhc1J1biA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZWQoKSB7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gd3JhcHBlZEludGVyYWN0aW9ucztcbiAgICBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIHRyeSB7XG4gICAgICB2YXIgcmV0dXJuVmFsdWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKCFoYXNSdW4pIHtcbiAgICAgICAgLy8gV2Ugb25seSBleHBlY3QgYSB3cmFwcGVkIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIG9uY2UsXG4gICAgICAgIC8vIEJ1dCBpbiB0aGUgZXZlbnQgdGhhdCBpdCdzIGV4ZWN1dGVkIG1vcmUgdGhhbiBvbmNlXHUyMDEzXG4gICAgICAgIC8vIE9ubHkgZGVjcmVtZW50IHRoZSBvdXRzdGFuZGluZyBpbnRlcmFjdGlvbiBjb3VudHMgb25jZS5cbiAgICAgICAgaGFzUnVuID0gdHJ1ZTsgLy8gVXBkYXRlIHBlbmRpbmcgYXN5bmMgY291bnRzIGZvciBhbGwgd3JhcHBlZCBpbnRlcmFjdGlvbnMuXG4gICAgICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IHNjaGVkdWxlZCBhc3luYyB3b3JrIGZvciBhbnkgb2YgdGhlbSxcbiAgICAgICAgLy8gTWFyayB0aGVtIGFzIGNvbXBsZXRlZC5cblxuICAgICAgICB3cmFwcGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tO1xuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3cmFwcGVkLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzdWJzY3JpYmVyLm9uV29ya0NhbmNlbGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gVXBkYXRlIHBlbmRpbmcgYXN5bmMgY291bnRzIGZvciBhbGwgd3JhcHBlZCBpbnRlcmFjdGlvbnMuXG4gICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBzY2hlZHVsZWQgYXN5bmMgd29yayBmb3IgYW55IG9mIHRoZW0sXG4gICAgICAvLyBNYXJrIHRoZW0gYXMgY29tcGxldGVkLlxuICAgICAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07XG5cbiAgICAgICAgaWYgKHN1YnNjcmliZXIgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbnZhciBzdWJzY3JpYmVycyA9IG51bGw7XG5cbntcbiAgc3Vic2NyaWJlcnMgPSBuZXcgU2V0KCk7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3N1YnNjcmliZShzdWJzY3JpYmVyKSB7XG4gIHtcbiAgICBzdWJzY3JpYmVycy5hZGQoc3Vic2NyaWJlcik7XG5cbiAgICBpZiAoc3Vic2NyaWJlcnMuc2l6ZSA9PT0gMSkge1xuICAgICAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudCA9IHtcbiAgICAgICAgb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQ6IG9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkLFxuICAgICAgICBvbkludGVyYWN0aW9uVHJhY2VkOiBvbkludGVyYWN0aW9uVHJhY2VkLFxuICAgICAgICBvbldvcmtDYW5jZWxlZDogb25Xb3JrQ2FuY2VsZWQsXG4gICAgICAgIG9uV29ya1NjaGVkdWxlZDogb25Xb3JrU2NoZWR1bGVkLFxuICAgICAgICBvbldvcmtTdGFydGVkOiBvbldvcmtTdGFydGVkLFxuICAgICAgICBvbldvcmtTdG9wcGVkOiBvbldvcmtTdG9wcGVkXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdW5zdGFibGVfdW5zdWJzY3JpYmUoc3Vic2NyaWJlcikge1xuICB7XG4gICAgc3Vic2NyaWJlcnMuZGVsZXRlKHN1YnNjcmliZXIpO1xuXG4gICAgaWYgKHN1YnNjcmliZXJzLnNpemUgPT09IDApIHtcbiAgICAgIGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvbkludGVyYWN0aW9uVHJhY2VkKGludGVyYWN0aW9uKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uVHJhY2VkKGludGVyYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbikge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1NjaGVkdWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTY2hlZHVsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtDYW5jZWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtDYW5jZWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5leHBvcnRzLnVuc3RhYmxlX2NsZWFyID0gdW5zdGFibGVfY2xlYXI7XG5leHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnQgPSB1bnN0YWJsZV9nZXRDdXJyZW50O1xuZXhwb3J0cy51bnN0YWJsZV9nZXRUaHJlYWRJRCA9IHVuc3RhYmxlX2dldFRocmVhZElEO1xuZXhwb3J0cy51bnN0YWJsZV9zdWJzY3JpYmUgPSB1bnN0YWJsZV9zdWJzY3JpYmU7XG5leHBvcnRzLnVuc3RhYmxlX3RyYWNlID0gdW5zdGFibGVfdHJhY2U7XG5leHBvcnRzLnVuc3RhYmxlX3Vuc3Vic2NyaWJlID0gdW5zdGFibGVfdW5zdWJzY3JpYmU7XG5leHBvcnRzLnVuc3RhYmxlX3dyYXAgPSB1bnN0YWJsZV93cmFwO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXItdHJhY2luZy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXItdHJhY2luZy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1kb20uZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG52YXIgU2NoZWR1bGVyID0gcmVxdWlyZSgnc2NoZWR1bGVyJyk7XG52YXIgdHJhY2luZyA9IHJlcXVpcmUoJ3NjaGVkdWxlci90cmFjaW5nJyk7XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IFJlYWN0Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO1xuXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ3dhcm4nLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH1cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxuaWYgKCFSZWFjdCkge1xuICB7XG4gICAgdGhyb3cgRXJyb3IoIFwiUmVhY3RET00gd2FzIGxvYWRlZCBiZWZvcmUgUmVhY3QuIE1ha2Ugc3VyZSB5b3UgbG9hZCB0aGUgUmVhY3QgcGFja2FnZSBiZWZvcmUgbG9hZGluZyBSZWFjdERPTS5cIiApO1xuICB9XG59XG5cbnZhciBGdW5jdGlvbkNvbXBvbmVudCA9IDA7XG52YXIgQ2xhc3NDb21wb25lbnQgPSAxO1xudmFyIEluZGV0ZXJtaW5hdGVDb21wb25lbnQgPSAyOyAvLyBCZWZvcmUgd2Uga25vdyB3aGV0aGVyIGl0IGlzIGZ1bmN0aW9uIG9yIGNsYXNzXG5cbnZhciBIb3N0Um9vdCA9IDM7IC8vIFJvb3Qgb2YgYSBob3N0IHRyZWUuIENvdWxkIGJlIG5lc3RlZCBpbnNpZGUgYW5vdGhlciBub2RlLlxuXG52YXIgSG9zdFBvcnRhbCA9IDQ7IC8vIEEgc3VidHJlZS4gQ291bGQgYmUgYW4gZW50cnkgcG9pbnQgdG8gYSBkaWZmZXJlbnQgcmVuZGVyZXIuXG5cbnZhciBIb3N0Q29tcG9uZW50ID0gNTtcbnZhciBIb3N0VGV4dCA9IDY7XG52YXIgRnJhZ21lbnQgPSA3O1xudmFyIE1vZGUgPSA4O1xudmFyIENvbnRleHRDb25zdW1lciA9IDk7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gMTA7XG52YXIgRm9yd2FyZFJlZiA9IDExO1xudmFyIFByb2ZpbGVyID0gMTI7XG52YXIgU3VzcGVuc2VDb21wb25lbnQgPSAxMztcbnZhciBNZW1vQ29tcG9uZW50ID0gMTQ7XG52YXIgU2ltcGxlTWVtb0NvbXBvbmVudCA9IDE1O1xudmFyIExhenlDb21wb25lbnQgPSAxNjtcbnZhciBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQgPSAxNztcbnZhciBEZWh5ZHJhdGVkRnJhZ21lbnQgPSAxODtcbnZhciBTdXNwZW5zZUxpc3RDb21wb25lbnQgPSAxOTtcbnZhciBGdW5kYW1lbnRhbENvbXBvbmVudCA9IDIwO1xudmFyIFNjb3BlQ29tcG9uZW50ID0gMjE7XG52YXIgQmxvY2sgPSAyMjtcbnZhciBPZmZzY3JlZW5Db21wb25lbnQgPSAyMztcbnZhciBMZWdhY3lIaWRkZW5Db21wb25lbnQgPSAyNDtcblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVQcm9maWxlclRpbWVyID0gdHJ1ZTsgLy8gUmVjb3JkIGR1cmF0aW9ucyBmb3IgY29tbWl0IGFuZCBwYXNzaXZlIGVmZmVjdHMgcGhhc2VzLlxuXG52YXIgZW5hYmxlRnVuZGFtZW50YWxBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIFNjb3BlIHN1cHBvcnQuXG52YXIgZW5hYmxlTmV3UmVjb25jaWxlciA9IGZhbHNlOyAvLyBFcnJvcnMgdGhhdCBhcmUgdGhyb3duIHdoaWxlIHVubW91bnRpbmcgKG9yIGFmdGVyIGluIHRoZSBjYXNlIG9mIHBhc3NpdmUgZWZmZWN0cylcbnZhciB3YXJuQWJvdXRTdHJpbmdSZWZzID0gZmFsc2U7XG5cbnZhciBhbGxOYXRpdmVFdmVudHMgPSBuZXcgU2V0KCk7XG4vKipcbiAqIE1hcHBpbmcgZnJvbSByZWdpc3RyYXRpb24gbmFtZSB0byBldmVudCBuYW1lXG4gKi9cblxuXG52YXIgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyA9IHt9O1xuLyoqXG4gKiBNYXBwaW5nIGZyb20gbG93ZXJjYXNlIHJlZ2lzdHJhdGlvbiBuYW1lcyB0byB0aGUgcHJvcGVybHkgY2FzZWQgdmVyc2lvbixcbiAqIHVzZWQgdG8gd2FybiBpbiB0aGUgY2FzZSBvZiBtaXNzaW5nIGV2ZW50IGhhbmRsZXJzLiBBdmFpbGFibGVcbiAqIG9ubHkgaW4gdHJ1ZS5cbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cblxudmFyIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSAge30gOyAvLyBUcnVzdCB0aGUgZGV2ZWxvcGVyIHRvIG9ubHkgdXNlIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgaW4gdHJ1ZVxuXG5mdW5jdGlvbiByZWdpc3RlclR3b1BoYXNlRXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKSB7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lICsgJ0NhcHR1cmUnLCBkZXBlbmRlbmNpZXMpO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAge1xuICAgIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdKSB7XG4gICAgICBlcnJvcignRXZlbnRSZWdpc3RyeTogTW9yZSB0aGFuIG9uZSBwbHVnaW4gYXR0ZW1wdGVkIHRvIHB1Ymxpc2ggdGhlIHNhbWUgJyArICdyZWdpc3RyYXRpb24gbmFtZSwgYCVzYC4nLCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdID0gZGVwZW5kZW5jaWVzO1xuXG4gIHtcbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSByZWdpc3RyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1tsb3dlckNhc2VkTmFtZV0gPSByZWdpc3RyYXRpb25OYW1lO1xuXG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgPT09ICdvbkRvdWJsZUNsaWNrJykge1xuICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcy5vbmRibGNsaWNrID0gcmVnaXN0cmF0aW9uTmFtZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRlcGVuZGVuY2llcy5sZW5ndGg7IGkrKykge1xuICAgIGFsbE5hdGl2ZUV2ZW50cy5hZGQoZGVwZW5kZW5jaWVzW2ldKTtcbiAgfVxufVxuXG52YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50ICE9PSAndW5kZWZpbmVkJyk7XG5cbi8vIEEgcmVzZXJ2ZWQgYXR0cmlidXRlLlxuLy8gSXQgaXMgaGFuZGxlZCBieSBSZWFjdCBzZXBhcmF0ZWx5IGFuZCBzaG91bGRuJ3QgYmUgd3JpdHRlbiB0byB0aGUgRE9NLlxudmFyIFJFU0VSVkVEID0gMDsgLy8gQSBzaW1wbGUgc3RyaW5nIGF0dHJpYnV0ZS5cbi8vIEF0dHJpYnV0ZXMgdGhhdCBhcmVuJ3QgaW4gdGhlIGZpbHRlciBhcmUgcHJlc3VtZWQgdG8gaGF2ZSB0aGlzIHR5cGUuXG5cbnZhciBTVFJJTkcgPSAxOyAvLyBBIHN0cmluZyBhdHRyaWJ1dGUgdGhhdCBhY2NlcHRzIGJvb2xlYW5zIGluIFJlYWN0LiBJbiBIVE1MLCB0aGVzZSBhcmUgY2FsbGVkXG4vLyBcImVudW1lcmF0ZWRcIiBhdHRyaWJ1dGVzIHdpdGggXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIiBhcyBwb3NzaWJsZSB2YWx1ZXMuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBcInRydWVcIiBzdHJpbmcuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgc2V0IHRvIGEgXCJmYWxzZVwiIHN0cmluZy5cblxudmFyIEJPT0xFQU5JU0hfU1RSSU5HID0gMjsgLy8gQSByZWFsIGJvb2xlYW4gYXR0cmlidXRlLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgcHJlc2VudCAoc2V0IGVpdGhlciB0byBhbiBlbXB0eSBzdHJpbmcgb3IgaXRzIG5hbWUpLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIG9taXR0ZWQuXG5cbnZhciBCT09MRUFOID0gMzsgLy8gQW4gYXR0cmlidXRlIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBmbGFnIGFzIHdlbGwgYXMgd2l0aCBhIHZhbHVlLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgcHJlc2VudCAoc2V0IGVpdGhlciB0byBhbiBlbXB0eSBzdHJpbmcgb3IgaXRzIG5hbWUpLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIG9taXR0ZWQuXG4vLyBGb3IgYW55IG90aGVyIHZhbHVlLCBzaG91bGQgYmUgcHJlc2VudCB3aXRoIHRoYXQgdmFsdWUuXG5cbnZhciBPVkVSTE9BREVEX0JPT0xFQU4gPSA0OyAvLyBBbiBhdHRyaWJ1dGUgdGhhdCBtdXN0IGJlIG51bWVyaWMgb3IgcGFyc2UgYXMgYSBudW1lcmljLlxuLy8gV2hlbiBmYWxzeSwgaXQgc2hvdWxkIGJlIHJlbW92ZWQuXG5cbnZhciBOVU1FUklDID0gNTsgLy8gQW4gYXR0cmlidXRlIHRoYXQgbXVzdCBiZSBwb3NpdGl2ZSBudW1lcmljIG9yIHBhcnNlIGFzIGEgcG9zaXRpdmUgbnVtZXJpYy5cbi8vIFdoZW4gZmFsc3ksIGl0IHNob3VsZCBiZSByZW1vdmVkLlxuXG52YXIgUE9TSVRJVkVfTlVNRVJJQyA9IDY7XG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbnZhciBBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSID0gXCI6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXCI7XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cblxudmFyIEFUVFJJQlVURV9OQU1FX0NIQVIgPSBBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSICsgXCJcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MFwiO1xudmFyIFJPT1RfQVRUUklCVVRFX05BTUUgPSAnZGF0YS1yZWFjdHJvb3QnO1xudmFyIFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYID0gbmV3IFJlZ0V4cCgnXlsnICsgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArICddWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlID0ge307XG52YXIgdmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlID0ge307XG5mdW5jdGlvbiBpc0F0dHJpYnV0ZU5hbWVTYWZlKGF0dHJpYnV0ZU5hbWUpIHtcbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlLCBhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVgudGVzdChhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcblxuICB7XG4gICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIG5hbWU6IGAlc2AnLCBhdHRyaWJ1dGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHNob3VsZElnbm9yZUF0dHJpYnV0ZShuYW1lLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEO1xuICB9XG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG5hbWUubGVuZ3RoID4gMiAmJiAobmFtZVswXSA9PT0gJ28nIHx8IG5hbWVbMF0gPT09ICdPJykgJiYgKG5hbWVbMV0gPT09ICduJyB8fCBuYW1lWzFdID09PSAnTicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSAnZnVuY3Rpb24nOiAvLyAkRmxvd0lzc3VlIHN5bWJvbCBpcyBwZXJmZWN0bHkgdmFsaWQgaGVyZVxuXG4gICAgY2FzZSAnc3ltYm9sJzpcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICB7XG4gICAgICAgIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gIXByb3BlcnR5SW5mby5hY2NlcHRzQm9vbGVhbnM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByZWZpeCA9IG5hbWUudG9Mb3dlckNhc2UoKS5zbGljZSgwLCA1KTtcbiAgICAgICAgICByZXR1cm4gcHJlZml4ICE9PSAnZGF0YS0nICYmIHByZWZpeCAhPT0gJ2FyaWEtJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG5cbiAgICBzd2l0Y2ggKHByb3BlcnR5SW5mby50eXBlKSB7XG4gICAgICBjYXNlIEJPT0xFQU46XG4gICAgICAgIHJldHVybiAhdmFsdWU7XG5cbiAgICAgIGNhc2UgT1ZFUkxPQURFRF9CT09MRUFOOlxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IGZhbHNlO1xuXG4gICAgICBjYXNlIE5VTUVSSUM6XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSk7XG5cbiAgICAgIGNhc2UgUE9TSVRJVkVfTlVNRVJJQzpcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0UHJvcGVydHlJbmZvKG5hbWUpIHtcbiAgcmV0dXJuIHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBwcm9wZXJ0aWVzW25hbWVdIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIHR5cGUsIG11c3RVc2VQcm9wZXJ0eSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlTmFtZXNwYWNlLCBzYW5pdGl6ZVVSTCwgcmVtb3ZlRW1wdHlTdHJpbmcpIHtcbiAgdGhpcy5hY2NlcHRzQm9vbGVhbnMgPSB0eXBlID09PSBCT09MRUFOSVNIX1NUUklORyB8fCB0eXBlID09PSBCT09MRUFOIHx8IHR5cGUgPT09IE9WRVJMT0FERURfQk9PTEVBTjtcbiAgdGhpcy5hdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZTtcbiAgdGhpcy5hdHRyaWJ1dGVOYW1lc3BhY2UgPSBhdHRyaWJ1dGVOYW1lc3BhY2U7XG4gIHRoaXMubXVzdFVzZVByb3BlcnR5ID0gbXVzdFVzZVByb3BlcnR5O1xuICB0aGlzLnByb3BlcnR5TmFtZSA9IG5hbWU7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMuc2FuaXRpemVVUkwgPSBzYW5pdGl6ZVVSTDtcbiAgdGhpcy5yZW1vdmVFbXB0eVN0cmluZyA9IHJlbW92ZUVtcHR5U3RyaW5nO1xufSAvLyBXaGVuIGFkZGluZyBhdHRyaWJ1dGVzIHRvIHRoaXMgbGlzdCwgYmUgc3VyZSB0byBhbHNvIGFkZCB0aGVtIHRvXG4vLyB0aGUgYHBvc3NpYmxlU3RhbmRhcmROYW1lc2AgbW9kdWxlIHRvIGVuc3VyZSBjYXNpbmcgYW5kIGluY29ycmVjdFxuLy8gbmFtZSB3YXJuaW5ncy5cblxuXG52YXIgcHJvcGVydGllcyA9IHt9OyAvLyBUaGVzZSBwcm9wcyBhcmUgcmVzZXJ2ZWQgYnkgUmVhY3QuIFRoZXkgc2hvdWxkbid0IGJlIHdyaXR0ZW4gdG8gdGhlIERPTS5cblxudmFyIHJlc2VydmVkUHJvcHMgPSBbJ2NoaWxkcmVuJywgJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJywgLy8gVE9ETzogVGhpcyBwcmV2ZW50cyB0aGUgYXNzaWdubWVudCBvZiBkZWZhdWx0VmFsdWUgdG8gcmVndWxhclxuLy8gZWxlbWVudHMgKG5vdCBqdXN0IGlucHV0cykuIE5vdyB0aGF0IFJlYWN0RE9NSW5wdXQgYXNzaWducyB0byB0aGVcbi8vIGRlZmF1bHRWYWx1ZSBwcm9wZXJ0eSAtLSBkbyB3ZSBuZWVkIHRoaXM/XG4nZGVmYXVsdFZhbHVlJywgJ2RlZmF1bHRDaGVja2VkJywgJ2lubmVySFRNTCcsICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnLCAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJywgJ3N0eWxlJ107XG5yZXNlcnZlZFByb3BzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgUkVTRVJWRUQsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBBIGZldyBSZWFjdCBzdHJpbmcgYXR0cmlidXRlcyBoYXZlIGEgZGlmZmVyZW50IG5hbWUuXG4vLyBUaGlzIGlzIGEgbWFwcGluZyBmcm9tIFJlYWN0IHByb3AgbmFtZXMgdG8gdGhlIGF0dHJpYnV0ZSBuYW1lcy5cblxuW1snYWNjZXB0Q2hhcnNldCcsICdhY2NlcHQtY2hhcnNldCddLCBbJ2NsYXNzTmFtZScsICdjbGFzcyddLCBbJ2h0bWxGb3InLCAnZm9yJ10sIFsnaHR0cEVxdWl2JywgJ2h0dHAtZXF1aXYnXV0uZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgbmFtZSA9IF9yZWZbMF0sXG4gICAgICBhdHRyaWJ1dGVOYW1lID0gX3JlZlsxXTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIFwiZW51bWVyYXRlZFwiIEhUTUwgYXR0cmlidXRlcyB0aGF0IGFjY2VwdCBcInRydWVcIiBhbmQgXCJmYWxzZVwiLlxuLy8gSW4gUmVhY3QsIHdlIGxldCB1c2VycyBwYXNzIGB0cnVlYCBhbmQgYGZhbHNlYCBldmVuIHRob3VnaCB0ZWNobmljYWxseVxuLy8gdGhlc2UgYXJlbid0IGJvb2xlYW4gYXR0cmlidXRlcyAodGhleSBhcmUgY29lcmNlZCB0byBzdHJpbmdzKS5cblxuWydjb250ZW50RWRpdGFibGUnLCAnZHJhZ2dhYmxlJywgJ3NwZWxsQ2hlY2snLCAndmFsdWUnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU5JU0hfU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgXCJlbnVtZXJhdGVkXCIgU1ZHIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIi5cbi8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbi8vIHRoZXNlIGFyZW4ndCBib29sZWFuIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncykuXG4vLyBTaW5jZSB0aGVzZSBhcmUgU1ZHIGF0dHJpYnV0ZXMsIHRoZWlyIGF0dHJpYnV0ZSBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG5cblsnYXV0b1JldmVyc2UnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdmb2N1c2FibGUnLCAncHJlc2VydmVBbHBoYSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTklTSF9TVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBib29sZWFuIGF0dHJpYnV0ZXMuXG5cblsnYWxsb3dGdWxsU2NyZWVuJywgJ2FzeW5jJywgLy8gTm90ZTogdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBwcmV2ZW50cyBpdCBmcm9tIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIERPTVxuLy8gb24gdGhlIGNsaWVudCBzaWRlIGJlY2F1c2UgdGhlIGJyb3dzZXJzIGFyZSBpbmNvbnNpc3RlbnQuIEluc3RlYWQgd2UgY2FsbCBmb2N1cygpLlxuJ2F1dG9Gb2N1cycsICdhdXRvUGxheScsICdjb250cm9scycsICdkZWZhdWx0JywgJ2RlZmVyJywgJ2Rpc2FibGVkJywgJ2Rpc2FibGVQaWN0dXJlSW5QaWN0dXJlJywgJ2Rpc2FibGVSZW1vdGVQbGF5YmFjaycsICdmb3JtTm9WYWxpZGF0ZScsICdoaWRkZW4nLCAnbG9vcCcsICdub01vZHVsZScsICdub1ZhbGlkYXRlJywgJ29wZW4nLCAncGxheXNJbmxpbmUnLCAncmVhZE9ubHknLCAncmVxdWlyZWQnLCAncmV2ZXJzZWQnLCAnc2NvcGVkJywgJ3NlYW1sZXNzJywgLy8gTWljcm9kYXRhXG4naXRlbVNjb3BlJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgdGhlIGZldyBSZWFjdCBwcm9wcyB0aGF0IHdlIHNldCBhcyBET00gcHJvcGVydGllc1xuLy8gcmF0aGVyIHRoYW4gYXR0cmlidXRlcy4gVGhlc2UgYXJlIGFsbCBib29sZWFucy5cblxuWydjaGVja2VkJywgLy8gTm90ZTogYG9wdGlvbi5zZWxlY3RlZGAgaXMgbm90IHVwZGF0ZWQgaWYgYHNlbGVjdC5tdWx0aXBsZWAgaXNcbi8vIGRpc2FibGVkIHdpdGggYHJlbW92ZUF0dHJpYnV0ZWAuIFdlIGhhdmUgc3BlY2lhbCBsb2dpYyBmb3IgaGFuZGxpbmcgdGhpcy5cbidtdWx0aXBsZScsICdtdXRlZCcsICdzZWxlY3RlZCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTiwgdHJ1ZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IGFyZSBcIm92ZXJsb2FkZWQgYm9vbGVhbnNcIjogdGhleSBiZWhhdmUgbGlrZVxuLy8gYm9vbGVhbnMsIGJ1dCBjYW4gYWxzbyBhY2NlcHQgYSBzdHJpbmcgdmFsdWUuXG5cblsnY2FwdHVyZScsICdkb3dubG9hZCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgT1ZFUkxPQURFRF9CT09MRUFOLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IG11c3QgYmUgcG9zaXRpdmUgbnVtYmVycy5cblxuWydjb2xzJywgJ3Jvd3MnLCAnc2l6ZScsICdzcGFuJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBQT1NJVElWRV9OVU1FUklDLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IG11c3QgYmUgbnVtYmVycy5cblxuWydyb3dTcGFuJywgJ3N0YXJ0J10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBOVU1FUklDLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pO1xudmFyIENBTUVMSVpFID0gL1tcXC1cXDpdKFthLXpdKS9nO1xuXG52YXIgY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICByZXR1cm4gdG9rZW5bMV0udG9VcHBlckNhc2UoKTtcbn07IC8vIFRoaXMgaXMgYSBsaXN0IG9mIGFsbCBTVkcgYXR0cmlidXRlcyB0aGF0IG5lZWQgc3BlY2lhbCBjYXNpbmcsIG5hbWVzcGFjaW5nLFxuLy8gb3IgYm9vbGVhbiB2YWx1ZSBhc3NpZ25tZW50LiBSZWd1bGFyIGF0dHJpYnV0ZXMgdGhhdCBqdXN0IGFjY2VwdCBzdHJpbmdzXG4vLyBhbmQgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcmUgb21pdHRlZCwganVzdCBsaWtlIGluIHRoZSBIVE1MIGF0dHJpYnV0ZSBmaWx0ZXIuXG4vLyBTb21lIG9mIHRoZXNlIGF0dHJpYnV0ZXMgY2FuIGJlIGhhcmQgdG8gZmluZC4gVGhpcyBsaXN0IHdhcyBjcmVhdGVkIGJ5XG4vLyBzY3JhcGluZyB0aGUgTUROIGRvY3VtZW50YXRpb24uXG5cblxuWydhY2NlbnQtaGVpZ2h0JywgJ2FsaWdubWVudC1iYXNlbGluZScsICdhcmFiaWMtZm9ybScsICdiYXNlbGluZS1zaGlmdCcsICdjYXAtaGVpZ2h0JywgJ2NsaXAtcGF0aCcsICdjbGlwLXJ1bGUnLCAnY29sb3ItaW50ZXJwb2xhdGlvbicsICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnLCAnY29sb3ItcHJvZmlsZScsICdjb2xvci1yZW5kZXJpbmcnLCAnZG9taW5hbnQtYmFzZWxpbmUnLCAnZW5hYmxlLWJhY2tncm91bmQnLCAnZmlsbC1vcGFjaXR5JywgJ2ZpbGwtcnVsZScsICdmbG9vZC1jb2xvcicsICdmbG9vZC1vcGFjaXR5JywgJ2ZvbnQtZmFtaWx5JywgJ2ZvbnQtc2l6ZScsICdmb250LXNpemUtYWRqdXN0JywgJ2ZvbnQtc3RyZXRjaCcsICdmb250LXN0eWxlJywgJ2ZvbnQtdmFyaWFudCcsICdmb250LXdlaWdodCcsICdnbHlwaC1uYW1lJywgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnLCAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnLCAnaG9yaXotYWR2LXgnLCAnaG9yaXotb3JpZ2luLXgnLCAnaW1hZ2UtcmVuZGVyaW5nJywgJ2xldHRlci1zcGFjaW5nJywgJ2xpZ2h0aW5nLWNvbG9yJywgJ21hcmtlci1lbmQnLCAnbWFya2VyLW1pZCcsICdtYXJrZXItc3RhcnQnLCAnb3ZlcmxpbmUtcG9zaXRpb24nLCAnb3ZlcmxpbmUtdGhpY2tuZXNzJywgJ3BhaW50LW9yZGVyJywgJ3Bhbm9zZS0xJywgJ3BvaW50ZXItZXZlbnRzJywgJ3JlbmRlcmluZy1pbnRlbnQnLCAnc2hhcGUtcmVuZGVyaW5nJywgJ3N0b3AtY29sb3InLCAnc3RvcC1vcGFjaXR5JywgJ3N0cmlrZXRocm91Z2gtcG9zaXRpb24nLCAnc3RyaWtldGhyb3VnaC10aGlja25lc3MnLCAnc3Ryb2tlLWRhc2hhcnJheScsICdzdHJva2UtZGFzaG9mZnNldCcsICdzdHJva2UtbGluZWNhcCcsICdzdHJva2UtbGluZWpvaW4nLCAnc3Ryb2tlLW1pdGVybGltaXQnLCAnc3Ryb2tlLW9wYWNpdHknLCAnc3Ryb2tlLXdpZHRoJywgJ3RleHQtYW5jaG9yJywgJ3RleHQtZGVjb3JhdGlvbicsICd0ZXh0LXJlbmRlcmluZycsICd1bmRlcmxpbmUtcG9zaXRpb24nLCAndW5kZXJsaW5lLXRoaWNrbmVzcycsICd1bmljb2RlLWJpZGknLCAndW5pY29kZS1yYW5nZScsICd1bml0cy1wZXItZW0nLCAndi1hbHBoYWJldGljJywgJ3YtaGFuZ2luZycsICd2LWlkZW9ncmFwaGljJywgJ3YtbWF0aGVtYXRpY2FsJywgJ3ZlY3Rvci1lZmZlY3QnLCAndmVydC1hZHYteScsICd2ZXJ0LW9yaWdpbi14JywgJ3ZlcnQtb3JpZ2luLXknLCAnd29yZC1zcGFjaW5nJywgJ3dyaXRpbmctbW9kZScsICd4bWxuczp4bGluaycsICd4LWhlaWdodCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lLnJlcGxhY2UoQ0FNRUxJWkUsIGNhcGl0YWxpemUpO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gU3RyaW5nIFNWRyBhdHRyaWJ1dGVzIHdpdGggdGhlIHhsaW5rIG5hbWVzcGFjZS5cblxuWyd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBTdHJpbmcgU1ZHIGF0dHJpYnV0ZXMgd2l0aCB0aGUgeG1sIG5hbWVzcGFjZS5cblxuWyd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnLCBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGF0dHJpYnV0ZSBleGlzdHMgYm90aCBpbiBIVE1MIGFuZCBTVkcuXG4vLyBUaGUgYXR0cmlidXRlIG5hbWUgaXMgY2FzZS1zZW5zaXRpdmUgaW4gU1ZHIHNvIHdlIGNhbid0IGp1c3QgdXNlXG4vLyB0aGUgUmVhY3QgbmFtZSBsaWtlIHdlIGRvIGZvciBhdHRyaWJ1dGVzIHRoYXQgZXhpc3Qgb25seSBpbiBIVE1MLlxuXG5bJ3RhYkluZGV4JywgJ2Nyb3NzT3JpZ2luJ10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICBwcm9wZXJ0aWVzW2F0dHJpYnV0ZU5hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChhdHRyaWJ1dGVOYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGF0dHJpYnV0ZXMgYWNjZXB0IFVSTHMuIFRoZXNlIG11c3Qgbm90IGFsbG93IGphdmFzY3JpcHQ6IFVSTFMuXG4vLyBUaGVzZSB3aWxsIGFsc28gbmVlZCB0byBhY2NlcHQgVHJ1c3RlZCBUeXBlcyBvYmplY3QgaW4gdGhlIGZ1dHVyZS5cblxudmFyIHhsaW5rSHJlZiA9ICd4bGlua0hyZWYnO1xucHJvcGVydGllc1t4bGlua0hyZWZdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZCgneGxpbmtIcmVmJywgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4neGxpbms6aHJlZicsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywgdHJ1ZSwgLy8gc2FuaXRpemVVUkxcbmZhbHNlKTtcblsnc3JjJywgJ2hyZWYnLCAnYWN0aW9uJywgJ2Zvcm1BY3Rpb24nXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHByb3BlcnRpZXNbYXR0cmlidXRlTmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKGF0dHJpYnV0ZU5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIHRydWUsIC8vIHNhbml0aXplVVJMXG4gIHRydWUpO1xufSk7XG5cbi8vIGFuZCBhbnkgbmV3bGluZSBvciB0YWIgYXJlIGZpbHRlcmVkIG91dCBhcyBpZiB0aGV5J3JlIG5vdCBwYXJ0IG9mIHRoZSBVUkwuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybC1wYXJzaW5nXG4vLyBUYWIgb3IgbmV3bGluZSBhcmUgZGVmaW5lZCBhcyBcXHJcXG5cXHQ6XG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYXNjaWktdGFiLW9yLW5ld2xpbmVcbi8vIEEgQzAgY29udHJvbCBpcyBhIGNvZGUgcG9pbnQgaW4gdGhlIHJhbmdlIFxcdTAwMDAgTlVMTCB0byBcXHUwMDFGXG4vLyBJTkZPUk1BVElPTiBTRVBBUkFUT1IgT05FLCBpbmNsdXNpdmU6XG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYzAtY29udHJvbC1vci1zcGFjZVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cbnZhciBpc0phdmFTY3JpcHRQcm90b2NvbCA9IC9eW1xcdTAwMDAtXFx1MDAxRiBdKmpbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qdltcXHJcXG5cXHRdKmFbXFxyXFxuXFx0XSpzW1xcclxcblxcdF0qY1tcXHJcXG5cXHRdKnJbXFxyXFxuXFx0XSppW1xcclxcblxcdF0qcFtcXHJcXG5cXHRdKnRbXFxyXFxuXFx0XSpcXDovaTtcbnZhciBkaWRXYXJuID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHNhbml0aXplVVJMKHVybCkge1xuICB7XG4gICAgaWYgKCFkaWRXYXJuICYmIGlzSmF2YVNjcmlwdFByb3RvY29sLnRlc3QodXJsKSkge1xuICAgICAgZGlkV2FybiA9IHRydWU7XG5cbiAgICAgIGVycm9yKCdBIGZ1dHVyZSB2ZXJzaW9uIG9mIFJlYWN0IHdpbGwgYmxvY2sgamF2YXNjcmlwdDogVVJMcyBhcyBhIHNlY3VyaXR5IHByZWNhdXRpb24uICcgKyAnVXNlIGV2ZW50IGhhbmRsZXJzIGluc3RlYWQgaWYgeW91IGNhbi4gSWYgeW91IG5lZWQgdG8gZ2VuZXJhdGUgdW5zYWZlIEhUTUwgdHJ5ICcgKyAndXNpbmcgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgaW5zdGVhZC4gUmVhY3Qgd2FzIHBhc3NlZCAlcy4nLCBKU09OLnN0cmluZ2lmeSh1cmwpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhIHByb3BlcnR5IG9uIGEgbm9kZS4gT25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKiBUaGUgXCJleHBlY3RlZFwiIGFyZ3VtZW50IGlzIHVzZWQgYXMgYSBoaW50IG9mIHdoYXQgdGhlIGV4cGVjdGVkIHZhbHVlIGlzLlxuICogU29tZSBwcm9wZXJ0aWVzIGhhdmUgbXVsdGlwbGUgZXF1aXZhbGVudCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbykge1xuICB7XG4gICAgaWYgKHByb3BlcnR5SW5mby5tdXN0VXNlUHJvcGVydHkpIHtcbiAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUluZm8ucHJvcGVydHlOYW1lO1xuICAgICAgcmV0dXJuIG5vZGVbcHJvcGVydHlOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCBwcm9wZXJ0eUluZm8uc2FuaXRpemVVUkwpIHtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmdWxseSBkaXNhYmxlZCBqYXZhc2NyaXB0OiBVUkxzLCBhbmQgaWZcbiAgICAgICAgLy8gdGhlIGh5ZHJhdGlvbiBpcyBzdWNjZXNzZnVsIG9mIGEgamF2YXNjcmlwdDogVVJMLCB3ZVxuICAgICAgICAvLyBzdGlsbCB3YW50IHRvIHdhcm4gb24gdGhlIGNsaWVudC5cbiAgICAgICAgc2FuaXRpemVVUkwoJycgKyBleHBlY3RlZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWU7XG4gICAgICB2YXIgc3RyaW5nVmFsdWUgPSBudWxsO1xuXG4gICAgICBpZiAocHJvcGVydHlJbmZvLnR5cGUgPT09IE9WRVJMT0FERURfQk9PTEVBTikge1xuICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgICAgLy8gV2UgaGFkIGFuIGF0dHJpYnV0ZSBidXQgc2hvdWxkbid0IGhhdmUgaGFkIG9uZSwgc28gcmVhZCBpdFxuICAgICAgICAgIC8vIGZvciB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgICAgICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvLnR5cGUgPT09IEJPT0xFQU4pIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBhIGJvb2xlYW4sIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIHZhbHVlIGlzXG4gICAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBleHBlY3RlZC5cbiAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgIH0gLy8gRXZlbiBpZiB0aGlzIHByb3BlcnR5IHVzZXMgYSBuYW1lc3BhY2Ugd2UgdXNlIGdldEF0dHJpYnV0ZVxuICAgICAgICAvLyBiZWNhdXNlIHdlIGFzc3VtZSBpdHMgbmFtZXNwYWNlZCBuYW1lIGlzIHRoZSBzYW1lIGFzIG91ciBjb25maWcuXG4gICAgICAgIC8vIFRvIHVzZSBnZXRBdHRyaWJ1dGVOUyB3ZSBuZWVkIHRoZSBsb2NhbCBuYW1lIHdoaWNoIHdlIGRvbid0IGhhdmVcbiAgICAgICAgLy8gaW4gb3VyIGNvbmZpZyBhdG0uXG5cblxuICAgICAgICBzdHJpbmdWYWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUgPT09IG51bGwgPyBleHBlY3RlZCA6IHN0cmluZ1ZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChzdHJpbmdWYWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9yIGEgYXR0cmlidXRlIG9uIGEgbm9kZS4gT25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKiBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdXNlZCBhcyBhIGhpbnQgb2Ygd2hhdCB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMuIFNvbWVcbiAqIGF0dHJpYnV0ZXMgaGF2ZSBtdWx0aXBsZSBlcXVpdmFsZW50IHZhbHVlcy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRWYWx1ZUZvckF0dHJpYnV0ZShub2RlLCBuYW1lLCBleHBlY3RlZCkge1xuICB7XG4gICAgaWYgKCFpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB0aGUgb2JqZWN0IGlzIGFuIG9wYXF1ZSByZWZlcmVuY2UgSUQsIGl0J3MgZXhwZWN0ZWQgdGhhdFxuICAgIC8vIHRoZSBuZXh0IHByb3AgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHNlcnZlciB2YWx1ZSwgc28ganVzdCByZXR1cm5cbiAgICAvLyBleHBlY3RlZFxuXG5cbiAgICBpZiAoaXNPcGFxdWVIeWRyYXRpbmdPYmplY3QoZXhwZWN0ZWQpKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFub2RlLmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBudWxsO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXG4gICAgaWYgKHZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIGZvciBhIHByb3BlcnR5IG9uIGEgbm9kZS5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKi9cblxuZnVuY3Rpb24gc2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCB2YWx1ZSwgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgdmFyIHByb3BlcnR5SW5mbyA9IGdldFByb3BlcnR5SW5mbyhuYW1lKTtcblxuICBpZiAoc2hvdWxkSWdub3JlQXR0cmlidXRlKG5hbWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICB2YWx1ZSA9IG51bGw7XG4gIH0gLy8gSWYgdGhlIHByb3AgaXNuJ3QgaW4gdGhlIHNwZWNpYWwgbGlzdCwgdHJlYXQgaXQgYXMgYSBzaW1wbGUgYXR0cmlidXRlLlxuXG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnIHx8IHByb3BlcnR5SW5mbyA9PT0gbnVsbCkge1xuICAgIGlmIChpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKSB7XG4gICAgICB2YXIgX2F0dHJpYnV0ZU5hbWUgPSBuYW1lO1xuXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoX2F0dHJpYnV0ZU5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoX2F0dHJpYnV0ZU5hbWUsICAnJyArIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbXVzdFVzZVByb3BlcnR5ID0gcHJvcGVydHlJbmZvLm11c3RVc2VQcm9wZXJ0eTtcblxuICBpZiAobXVzdFVzZVByb3BlcnR5KSB7XG4gICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWU7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHZhciB0eXBlID0gcHJvcGVydHlJbmZvLnR5cGU7XG4gICAgICBub2RlW3Byb3BlcnR5TmFtZV0gPSB0eXBlID09PSBCT09MRUFOID8gZmFsc2UgOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udHJhcnkgdG8gYHNldEF0dHJpYnV0ZWAsIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBwcm9wZXJseVxuICAgICAgLy8gYHRvU3RyaW5nYGVkIGJ5IElFOC85LlxuICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9IC8vIFRoZSByZXN0IGFyZSB0cmVhdGVkIGFzIGF0dHJpYnV0ZXMgd2l0aCBzcGVjaWFsIGNhc2VzLlxuXG5cbiAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZSxcbiAgICAgIGF0dHJpYnV0ZU5hbWVzcGFjZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lc3BhY2U7XG5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF90eXBlID0gcHJvcGVydHlJbmZvLnR5cGU7XG4gICAgdmFyIGF0dHJpYnV0ZVZhbHVlO1xuXG4gICAgaWYgKF90eXBlID09PSBCT09MRUFOIHx8IF90eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU4gJiYgdmFsdWUgPT09IHRydWUpIHtcbiAgICAgIC8vIElmIGF0dHJpYnV0ZSB0eXBlIGlzIGJvb2xlYW4sIHdlIGtub3cgZm9yIHN1cmUgaXQgd29uJ3QgYmUgYW4gZXhlY3V0aW9uIHNpbmtcbiAgICAgIC8vIGFuZCB3ZSB3b24ndCByZXF1aXJlIFRydXN0ZWQgVHlwZSBoZXJlLlxuICAgICAgYXR0cmlidXRlVmFsdWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYHNldEF0dHJpYnV0ZWAgd2l0aCBvYmplY3RzIGJlY29tZXMgb25seSBgW29iamVjdF1gIGluIElFOC85LFxuICAgICAgLy8gKCcnICsgdmFsdWUpIG1ha2VzIGl0IG91dHB1dCB0aGUgY29ycmVjdCB0b1N0cmluZygpLXZhbHVlLlxuICAgICAge1xuICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0eUluZm8uc2FuaXRpemVVUkwpIHtcbiAgICAgICAgc2FuaXRpemVVUkwoYXR0cmlidXRlVmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGF0dHJpYnV0ZU5hbWVzcGFjZSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhhdHRyaWJ1dGVOYW1lc3BhY2UsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gMHhlYWQ5O1xudmFyIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gMHhlYWRhO1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSAweGVhZDU7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IDB4ZWFkNztcbnZhciBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IDB4ZWFlMDtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IDB4ZWFlMTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IDB4ZWFlMjtcbnZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSAweGVhZTM7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZWxlbWVudCcpO1xuICBSRUFDVF9QT1JUQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucG9ydGFsJyk7XG4gIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRyb2w7XG4gIHJlZW50cnkgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgIH1cblxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlQ2xhc3NDb21wb25lbnRGcmFtZShjdG9yLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGN0b3IsIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVGaWJlcihmaWJlcikge1xuICB2YXIgb3duZXIgPSAgZmliZXIuX2RlYnVnT3duZXIgPyBmaWJlci5fZGVidWdPd25lci50eXBlIDogbnVsbCA7XG4gIHZhciBzb3VyY2UgPSAgZmliZXIuX2RlYnVnU291cmNlIDtcblxuICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShmaWJlci50eXBlKTtcblxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnTGF6eScpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcblxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUucmVuZGVyKTtcblxuICAgIGNhc2UgQmxvY2s6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUuX3JlbmRlcik7XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQ2xhc3NDb21wb25lbnRGcmFtZShmaWJlci50eXBlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHdvcmtJblByb2dyZXNzKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSAnJztcbiAgICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzO1xuXG4gICAgZG8ge1xuICAgICAgaW5mbyArPSBkZXNjcmliZUZpYmVyKG5vZGUpO1xuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH0gd2hpbGUgKG5vZGUpO1xuXG4gICAgcmV0dXJuIGluZm87XG4gIH0gY2F0Y2ggKHgpIHtcbiAgICByZXR1cm4gJ1xcbkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6ICcgKyB4Lm1lc3NhZ2UgKyAnXFxuJyArIHguc3RhY2s7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG52YXIgY3VycmVudCA9IG51bGw7XG52YXIgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBvd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXI7XG5cbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgdHlwZW9mIG93bmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUob3duZXIudHlwZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYoKSB7XG4gIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gLy8gU2FmZSBiZWNhdXNlIGlmIGN1cnJlbnQgZmliZXIgZXhpc3RzLCB3ZSBhcmUgcmVjb25jaWxpbmcsXG4gICAgLy8gYW5kIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgdmVyc2lvbi5cblxuXG4gICAgcmV0dXJuIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChjdXJyZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldEN1cnJlbnRGaWJlcigpIHtcbiAge1xuICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrID0gbnVsbDtcbiAgICBjdXJyZW50ID0gbnVsbDtcbiAgICBpc1JlbmRlcmluZyA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBzZXRDdXJyZW50RmliZXIoZmliZXIpIHtcbiAge1xuICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrID0gZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldjtcbiAgICBjdXJyZW50ID0gZmliZXI7XG4gICAgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0SXNSZW5kZXJpbmcocmVuZGVyaW5nKSB7XG4gIHtcbiAgICBpc1JlbmRlcmluZyA9IHJlbmRlcmluZztcbiAgfVxufVxuZnVuY3Rpb24gZ2V0SXNSZW5kZXJpbmcoKSB7XG4gIHtcbiAgICByZXR1cm4gaXNSZW5kZXJpbmc7XG4gIH1cbn1cblxuLy8gRmxvdyBkb2VzIG5vdCBhbGxvdyBzdHJpbmcgY29uY2F0ZW5hdGlvbiBvZiBtb3N0IG5vbi1zdHJpbmcgdHlwZXMuIFRvIHdvcmtcbi8vIGFyb3VuZCB0aGlzIGxpbWl0YXRpb24sIHdlIHVzZSBhbiBvcGFxdWUgdHlwZSB0aGF0IGNhbiBvbmx5IGJlIG9idGFpbmVkIGJ5XG4vLyBwYXNzaW5nIHRoZSB2YWx1ZSB0aHJvdWdoIGdldFRvU3RyaW5nVmFsdWUgZmlyc3QuXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gJycgKyB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGdldFRvU3RyaW5nVmFsdWUodmFsdWUpIHtcbiAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgcmV0dXJuIHZhbHVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGZ1bmN0aW9uLCBzeW1ib2wgYXJlIGFzc2lnbmVkIGFzIGVtcHR5IHN0cmluZ3NcbiAgICAgIHJldHVybiAnJztcbiAgfVxufVxuXG52YXIgaGFzUmVhZE9ubHlWYWx1ZSA9IHtcbiAgYnV0dG9uOiB0cnVlLFxuICBjaGVja2JveDogdHJ1ZSxcbiAgaW1hZ2U6IHRydWUsXG4gIGhpZGRlbjogdHJ1ZSxcbiAgcmFkaW86IHRydWUsXG4gIHJlc2V0OiB0cnVlLFxuICBzdWJtaXQ6IHRydWVcbn07XG5mdW5jdGlvbiBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKHRhZ05hbWUsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAoIShoYXNSZWFkT25seVZhbHVlW3Byb3BzLnR5cGVdIHx8IHByb3BzLm9uQ2hhbmdlIHx8IHByb3BzLm9uSW5wdXQgfHwgcHJvcHMucmVhZE9ubHkgfHwgcHJvcHMuZGlzYWJsZWQgfHwgcHJvcHMudmFsdWUgPT0gbnVsbCkpIHtcbiAgICAgIGVycm9yKCdZb3UgcHJvdmlkZWQgYSBgdmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgKyAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdFZhbHVlYC4gT3RoZXJ3aXNlLCAnICsgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLicpO1xuICAgIH1cblxuICAgIGlmICghKHByb3BzLm9uQ2hhbmdlIHx8IHByb3BzLnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkIHx8IHByb3BzLmNoZWNrZWQgPT0gbnVsbCkpIHtcbiAgICAgIGVycm9yKCdZb3UgcHJvdmlkZWQgYSBgY2hlY2tlZGAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICsgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0Q2hlY2tlZGAuIE90aGVyd2lzZSwgJyArICdzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDaGVja2FibGUoZWxlbSkge1xuICB2YXIgdHlwZSA9IGVsZW0udHlwZTtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIG5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgJiYgKHR5cGUgPT09ICdjaGVja2JveCcgfHwgdHlwZSA9PT0gJ3JhZGlvJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRyYWNrZXIobm9kZSkge1xuICByZXR1cm4gbm9kZS5fdmFsdWVUcmFja2VyO1xufVxuXG5mdW5jdGlvbiBkZXRhY2hUcmFja2VyKG5vZGUpIHtcbiAgbm9kZS5fdmFsdWVUcmFja2VyID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWVGcm9tTm9kZShub2RlKSB7XG4gIHZhciB2YWx1ZSA9ICcnO1xuXG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGlmIChpc0NoZWNrYWJsZShub2RlKSkge1xuICAgIHZhbHVlID0gbm9kZS5jaGVja2VkID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IG5vZGUudmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHRyYWNrVmFsdWVPbk5vZGUobm9kZSkge1xuICB2YXIgdmFsdWVGaWVsZCA9IGlzQ2hlY2thYmxlKG5vZGUpID8gJ2NoZWNrZWQnIDogJ3ZhbHVlJztcbiAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5vZGUuY29uc3RydWN0b3IucHJvdG90eXBlLCB2YWx1ZUZpZWxkKTtcbiAgdmFyIGN1cnJlbnRWYWx1ZSA9ICcnICsgbm9kZVt2YWx1ZUZpZWxkXTsgLy8gaWYgc29tZW9uZSBoYXMgYWxyZWFkeSBkZWZpbmVkIGEgdmFsdWUgb3IgU2FmYXJpLCB0aGVuIGJhaWxcbiAgLy8gYW5kIGRvbid0IHRyYWNrIHZhbHVlIHdpbGwgY2F1c2Ugb3ZlciByZXBvcnRpbmcgb2YgY2hhbmdlcyxcbiAgLy8gYnV0IGl0J3MgYmV0dGVyIHRoZW4gYSBoYXJkIGZhaWx1cmVcbiAgLy8gKG5lZWRlZCBmb3IgY2VydGFpbiB0ZXN0cyB0aGF0IHNweU9uIGlucHV0IHZhbHVlcyBhbmQgU2FmYXJpKVxuXG4gIGlmIChub2RlLmhhc093blByb3BlcnR5KHZhbHVlRmllbGQpIHx8IHR5cGVvZiBkZXNjcmlwdG9yID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZGVzY3JpcHRvci5nZXQgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGRlc2NyaXB0b3Iuc2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGdldCA9IGRlc2NyaXB0b3IuZ2V0LFxuICAgICAgc2V0ID0gZGVzY3JpcHRvci5zZXQ7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGdldC5jYWxsKHRoaXMpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgfVxuICB9KTsgLy8gV2UgY291bGQndmUgcGFzc2VkIHRoaXMgdGhlIGZpcnN0IHRpbWVcbiAgLy8gYnV0IGl0IHRyaWdnZXJzIGEgYnVnIGluIElFMTEgYW5kIEVkZ2UgMTQvMTUuXG4gIC8vIENhbGxpbmcgZGVmaW5lUHJvcGVydHkoKSBhZ2FpbiBzaG91bGQgYmUgZXF1aXZhbGVudC5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTc2OFxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgZW51bWVyYWJsZTogZGVzY3JpcHRvci5lbnVtZXJhYmxlXG4gIH0pO1xuICB2YXIgdHJhY2tlciA9IHtcbiAgICBnZXRWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICB9LFxuICAgIHNldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgfSxcbiAgICBzdG9wVHJhY2tpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRldGFjaFRyYWNrZXIobm9kZSk7XG4gICAgICBkZWxldGUgbm9kZVt2YWx1ZUZpZWxkXTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB0cmFja2VyO1xufVxuXG5mdW5jdGlvbiB0cmFjayhub2RlKSB7XG4gIGlmIChnZXRUcmFja2VyKG5vZGUpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIFRPRE86IE9uY2UgaXQncyBqdXN0IEZpYmVyIHdlIGNhbiBtb3ZlIHRoaXMgdG8gbm9kZS5fd3JhcHBlclN0YXRlXG5cblxuICBub2RlLl92YWx1ZVRyYWNrZXIgPSB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpO1xufVxuZnVuY3Rpb24gdXBkYXRlVmFsdWVJZkNoYW5nZWQobm9kZSkge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdHJhY2tlciA9IGdldFRyYWNrZXIobm9kZSk7IC8vIGlmIHRoZXJlIGlzIG5vIHRyYWNrZXIgYXQgdGhpcyBwb2ludCBpdCdzIHVubGlrZWx5XG4gIC8vIHRoYXQgdHJ5aW5nIGFnYWluIHdpbGwgc3VjY2VlZFxuXG4gIGlmICghdHJhY2tlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIGxhc3RWYWx1ZSA9IHRyYWNrZXIuZ2V0VmFsdWUoKTtcbiAgdmFyIG5leHRWYWx1ZSA9IGdldFZhbHVlRnJvbU5vZGUobm9kZSk7XG5cbiAgaWYgKG5leHRWYWx1ZSAhPT0gbGFzdFZhbHVlKSB7XG4gICAgdHJhY2tlci5zZXRWYWx1ZShuZXh0VmFsdWUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50KGRvYykge1xuICBkb2MgPSBkb2MgfHwgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHVuZGVmaW5lZCk7XG5cbiAgaWYgKHR5cGVvZiBkb2MgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBkb2MuYWN0aXZlRWxlbWVudCB8fCBkb2MuYm9keTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBkb2MuYm9keTtcbiAgfVxufVxuXG52YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gZmFsc2U7XG52YXIgZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCA9IGZhbHNlO1xudmFyIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSBmYWxzZTtcbnZhciBkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGlzQ29udHJvbGxlZChwcm9wcykge1xuICB2YXIgdXNlc0NoZWNrZWQgPSBwcm9wcy50eXBlID09PSAnY2hlY2tib3gnIHx8IHByb3BzLnR5cGUgPT09ICdyYWRpbyc7XG4gIHJldHVybiB1c2VzQ2hlY2tlZCA/IHByb3BzLmNoZWNrZWQgIT0gbnVsbCA6IHByb3BzLnZhbHVlICE9IG51bGw7XG59XG4vKipcbiAqIEltcGxlbWVudHMgYW4gPGlucHV0PiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBzZXR0aW5nIHRoZXNlIG9wdGlvbmFsXG4gKiBwcm9wczogYGNoZWNrZWRgLCBgdmFsdWVgLCBgZGVmYXVsdENoZWNrZWRgLCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKlxuICogSWYgYGNoZWNrZWRgIG9yIGB2YWx1ZWAgYXJlIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnNcbiAqIHRoYXQgYWZmZWN0IHRoZSBjaGVja2VkIHN0YXRlIG9yIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIHRoZXkgYXJlIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBub3RcbiAqIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC4gSW5zdGVhZCwgdGhlIHByb3BzIG11c3QgY2hhbmdlIGluIG9yZGVyIGZvclxuICogdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIGFzIHVuY2hlY2tlZCAob3IgYGRlZmF1bHRDaGVja2VkYClcbiAqIHdpdGggYW4gZW1wdHkgdmFsdWUgKG9yIGBkZWZhdWx0VmFsdWVgKS5cbiAqXG4gKiBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMTAyNS90aGUtaW5wdXQtZWxlbWVudC5odG1sXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgY2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cbiAgdmFyIGhvc3RQcm9wcyA9IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgZGVmYXVsdENoZWNrZWQ6IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgIGNoZWNrZWQ6IGNoZWNrZWQgIT0gbnVsbCA/IGNoZWNrZWQgOiBub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWRcbiAgfSk7XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUoZWxlbWVudCwgcHJvcHMpIHtcbiAge1xuICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoJ2lucHV0JywgcHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLmNoZWNrZWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkKSB7XG4gICAgICBlcnJvcignJXMgY29udGFpbnMgYW4gaW5wdXQgb2YgdHlwZSAlcyB3aXRoIGJvdGggY2hlY2tlZCBhbmQgZGVmYXVsdENoZWNrZWQgcHJvcHMuICcgKyAnSW5wdXQgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIGNoZWNrZWQgcHJvcCwgb3IgdGhlIGRlZmF1bHRDaGVja2VkIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKTtcblxuICAgICAgZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIHZhbHVlIGFuZCBkZWZhdWx0VmFsdWUgcHJvcHMuICcgKyAnSW5wdXQgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcsIHByb3BzLnR5cGUpO1xuXG4gICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZSA9PSBudWxsID8gJycgOiBwcm9wcy5kZWZhdWx0VmFsdWU7XG4gIG5vZGUuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICBpbml0aWFsQ2hlY2tlZDogcHJvcHMuY2hlY2tlZCAhPSBudWxsID8gcHJvcHMuY2hlY2tlZCA6IHByb3BzLmRlZmF1bHRDaGVja2VkLFxuICAgIGluaXRpYWxWYWx1ZTogZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSAhPSBudWxsID8gcHJvcHMudmFsdWUgOiBkZWZhdWx0VmFsdWUpLFxuICAgIGNvbnRyb2xsZWQ6IGlzQ29udHJvbGxlZChwcm9wcylcbiAgfTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNoZWNrZWQoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgY2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cbiAgaWYgKGNoZWNrZWQgIT0gbnVsbCkge1xuICAgIHNldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgJ2NoZWNrZWQnLCBjaGVja2VkLCBmYWxzZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBwZXIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICB2YXIgY29udHJvbGxlZCA9IGlzQ29udHJvbGxlZChwcm9wcyk7XG5cbiAgICBpZiAoIW5vZGUuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmIGNvbnRyb2xsZWQgJiYgIWRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQpIHtcbiAgICAgIGVycm9yKCdBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyBhbiB1bmNvbnRyb2xsZWQgaW5wdXQgdG8gYmUgY29udHJvbGxlZC4gJyArICdUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgdGhlIHZhbHVlIGNoYW5naW5nIGZyb20gdW5kZWZpbmVkIHRvICcgKyAnYSBkZWZpbmVkIHZhbHVlLCB3aGljaCBzaG91bGQgbm90IGhhcHBlbi4gJyArICdEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5fd3JhcHBlclN0YXRlLmNvbnRyb2xsZWQgJiYgIWNvbnRyb2xsZWQgJiYgIWRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQpIHtcbiAgICAgIGVycm9yKCdBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyBhIGNvbnRyb2xsZWQgaW5wdXQgdG8gYmUgdW5jb250cm9sbGVkLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSB0aGUgdmFsdWUgY2hhbmdpbmcgZnJvbSBhIGRlZmluZWQgdG8gJyArICd1bmRlZmluZWQsIHdoaWNoIHNob3VsZCBub3QgaGFwcGVuLiAnICsgJ0RlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJyk7XG5cbiAgICAgIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNoZWNrZWQoZWxlbWVudCwgcHJvcHMpO1xuICB2YXIgdmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKTtcbiAgdmFyIHR5cGUgPSBwcm9wcy50eXBlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAodmFsdWUgPT09IDAgJiYgbm9kZS52YWx1ZSA9PT0gJycgfHwgLy8gV2UgZXhwbGljaXRseSB3YW50IHRvIGNvZXJjZSB0byBudW1iZXIgaGVyZSBpZiBwb3NzaWJsZS5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgbm9kZS52YWx1ZSAhPSB2YWx1ZSkge1xuICAgICAgICBub2RlLnZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS52YWx1ZSAhPT0gdG9TdHJpbmcodmFsdWUpKSB7XG4gICAgICBub2RlLnZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSAnc3VibWl0JyB8fCB0eXBlID09PSAncmVzZXQnKSB7XG4gICAgLy8gU3VibWl0L3Jlc2V0IGlucHV0cyBuZWVkIHRoZSBhdHRyaWJ1dGUgcmVtb3ZlZCBjb21wbGV0ZWx5IHRvIGF2b2lkXG4gICAgLy8gYmxhbmstdGV4dCBidXR0b25zLlxuICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCd2YWx1ZScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgdGhlIHZhbHVlIGNvbWVzIGZyb20gYSBjYXNjYWRlIG9mXG4gICAgLy8gcHJvcGVydGllczpcbiAgICAvLyAgMS4gVGhlIHZhbHVlIFJlYWN0IHByb3BlcnR5XG4gICAgLy8gIDIuIFRoZSBkZWZhdWx0VmFsdWUgUmVhY3QgcHJvcGVydHlcbiAgICAvLyAgMy4gT3RoZXJ3aXNlIHRoZXJlIHNob3VsZCBiZSBubyBjaGFuZ2VcbiAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcbiAgICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCBwcm9wcy50eXBlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZhbHVlJykpIHtcbiAgICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCBwcm9wcy50eXBlLCBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLmRlZmF1bHRWYWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIGNoZWNrZWQgYXR0cmlidXRlLCBpdCBvbmx5IGNoYW5nZXMgd2hlbiBpdCBuZWVkc1xuICAgIC8vIHRvIGJlIHJlbW92ZWQsIHN1Y2ggYXMgdHJhbnNpdGlvbmluZyBmcm9tIGEgY2hlY2tib3ggaW50byBhIHRleHQgaW5wdXRcbiAgICBpZiAocHJvcHMuY2hlY2tlZCA9PSBudWxsICYmIHByb3BzLmRlZmF1bHRDaGVja2VkICE9IG51bGwpIHtcbiAgICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhIXByb3BzLmRlZmF1bHRDaGVja2VkO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlcihlbGVtZW50LCBwcm9wcywgaXNIeWRyYXRpbmcpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50OyAvLyBEbyBub3QgYXNzaWduIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgc2V0LiBUaGlzIHByZXZlbnRzIHVzZXIgdGV4dCBpbnB1dFxuICAvLyBmcm9tIGJlaW5nIGxvc3QgZHVyaW5nIFNTUiBoeWRyYXRpb24uXG5cbiAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCd2YWx1ZScpIHx8IHByb3BzLmhhc093blByb3BlcnR5KCdkZWZhdWx0VmFsdWUnKSkge1xuICAgIHZhciB0eXBlID0gcHJvcHMudHlwZTtcbiAgICB2YXIgaXNCdXR0b24gPSB0eXBlID09PSAnc3VibWl0JyB8fCB0eXBlID09PSAncmVzZXQnOyAvLyBBdm9pZCBzZXR0aW5nIHZhbHVlIGF0dHJpYnV0ZSBvbiBzdWJtaXQvcmVzZXQgaW5wdXRzIGFzIGl0IG92ZXJyaWRlcyB0aGVcbiAgICAvLyBkZWZhdWx0IHZhbHVlIHByb3ZpZGVkIGJ5IHRoZSBicm93c2VyLiBTZWU6ICMxMjg3MlxuXG4gICAgaWYgKGlzQnV0dG9uICYmIChwcm9wcy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLnZhbHVlID09PSBudWxsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbml0aWFsVmFsdWUgPSB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKTsgLy8gRG8gbm90IGFzc2lnbiB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IHNldC4gVGhpcyBwcmV2ZW50cyB1c2VyIHRleHQgaW5wdXRcbiAgICAvLyBmcm9tIGJlaW5nIGxvc3QgZHVyaW5nIFNTUiBoeWRyYXRpb24uXG5cbiAgICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgICB7XG4gICAgICAgIC8vIFdoZW4gc3luY2luZyB0aGUgdmFsdWUgYXR0cmlidXRlLCB0aGUgdmFsdWUgcHJvcGVydHkgc2hvdWxkIHVzZVxuICAgICAgICAvLyB0aGUgd3JhcHBlclN0YXRlLl9pbml0aWFsVmFsdWUgcHJvcGVydHkuIFRoaXMgdXNlczpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAxLiBUaGUgdmFsdWUgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgICAgIC8vICAgMi4gVGhlIGRlZmF1bHRWYWx1ZSBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAgICAgLy8gICAzLiBBbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgaWYgKGluaXRpYWxWYWx1ZSAhPT0gbm9kZS52YWx1ZSkge1xuICAgICAgICAgIG5vZGUudmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyBPdGhlcndpc2UsIHRoZSB2YWx1ZSBhdHRyaWJ1dGUgaXMgc3luY2hyb25pemVkIHRvIHRoZSBwcm9wZXJ0eSxcbiAgICAgIC8vIHNvIHdlIGFzc2lnbiBkZWZhdWx0VmFsdWUgdG8gdGhlIHNhbWUgdGhpbmcgYXMgdGhlIHZhbHVlIHByb3BlcnR5XG4gICAgICAvLyBhc3NpZ25tZW50IHN0ZXAgYWJvdmUuXG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICB9XG4gIH0gLy8gTm9ybWFsbHksIHdlJ2QganVzdCBkbyBgbm9kZS5jaGVja2VkID0gbm9kZS5jaGVja2VkYCB1cG9uIGluaXRpYWwgbW91bnQsIGxlc3MgdGhpcyBidWdcbiAgLy8gdGhpcyBpcyBuZWVkZWQgdG8gd29yayBhcm91bmQgYSBjaHJvbWUgYnVnIHdoZXJlIHNldHRpbmcgZGVmYXVsdENoZWNrZWRcbiAgLy8gd2lsbCBzb21ldGltZXMgaW5mbHVlbmNlIHRoZSB2YWx1ZSBvZiBjaGVja2VkIChldmVuIGFmdGVyIGRldGFjaG1lbnQpLlxuICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTYwODQxNlxuICAvLyBXZSBuZWVkIHRvIHRlbXBvcmFyaWx5IHVuc2V0IG5hbWUgdG8gYXZvaWQgZGlzcnVwdGluZyByYWRpbyBidXR0b24gZ3JvdXBzLlxuXG5cbiAgdmFyIG5hbWUgPSBub2RlLm5hbWU7XG5cbiAgaWYgKG5hbWUgIT09ICcnKSB7XG4gICAgbm9kZS5uYW1lID0gJyc7XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSwgYm90aCB0aGUgY2hlY2tlZCBwcm9wZXJ0eSBhbmRcbiAgICAvLyBhdHRyaWJ1dGUgYXJlIGFzc2lnbmVkIGF0IHRoZSBzYW1lIHRpbWUgdXNpbmcgZGVmYXVsdENoZWNrZWQuIFRoaXMgdXNlczpcbiAgICAvL1xuICAgIC8vICAgMS4gVGhlIGNoZWNrZWQgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgLy8gICAyLiBUaGUgZGVmYXVsdENoZWNrZWQgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgLy8gICAzLiBPdGhlcndpc2UsIGZhbHNlXG4gICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICFub2RlLmRlZmF1bHRDaGVja2VkO1xuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhIW5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZDtcbiAgfVxuXG4gIGlmIChuYW1lICE9PSAnJykge1xuICAgIG5vZGUubmFtZSA9IG5hbWU7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB1cGRhdGVXcmFwcGVyKG5vZGUsIHByb3BzKTtcbiAgdXBkYXRlTmFtZWRDb3VzaW5zKG5vZGUsIHByb3BzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTmFtZWRDb3VzaW5zKHJvb3ROb2RlLCBwcm9wcykge1xuICB2YXIgbmFtZSA9IHByb3BzLm5hbWU7XG5cbiAgaWYgKHByb3BzLnR5cGUgPT09ICdyYWRpbycgJiYgbmFtZSAhPSBudWxsKSB7XG4gICAgdmFyIHF1ZXJ5Um9vdCA9IHJvb3ROb2RlO1xuXG4gICAgd2hpbGUgKHF1ZXJ5Um9vdC5wYXJlbnROb2RlKSB7XG4gICAgICBxdWVyeVJvb3QgPSBxdWVyeVJvb3QucGFyZW50Tm9kZTtcbiAgICB9IC8vIElmIGByb290Tm9kZS5mb3JtYCB3YXMgbm9uLW51bGwsIHRoZW4gd2UgY291bGQgdHJ5IGBmb3JtLmVsZW1lbnRzYCxcbiAgICAvLyBidXQgdGhhdCBzb21ldGltZXMgYmVoYXZlcyBzdHJhbmdlbHkgaW4gSUU4LiBXZSBjb3VsZCBhbHNvIHRyeSB1c2luZ1xuICAgIC8vIGBmb3JtLmdldEVsZW1lbnRzQnlOYW1lYCwgYnV0IHRoYXQgd2lsbCBvbmx5IHJldHVybiBkaXJlY3QgY2hpbGRyZW5cbiAgICAvLyBhbmQgd29uJ3QgaW5jbHVkZSBpbnB1dHMgdGhhdCB1c2UgdGhlIEhUTUw1IGBmb3JtPWAgYXR0cmlidXRlLiBTaW5jZVxuICAgIC8vIHRoZSBpbnB1dCBtaWdodCBub3QgZXZlbiBiZSBpbiBhIGZvcm0uIEl0IG1pZ2h0IG5vdCBldmVuIGJlIGluIHRoZVxuICAgIC8vIGRvY3VtZW50LiBMZXQncyBqdXN0IHVzZSB0aGUgbG9jYWwgYHF1ZXJ5U2VsZWN0b3JBbGxgIHRvIGVuc3VyZSB3ZSBkb24ndFxuICAgIC8vIG1pc3MgYW55dGhpbmcuXG5cblxuICAgIHZhciBncm91cCA9IHF1ZXJ5Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPScgKyBKU09OLnN0cmluZ2lmeSgnJyArIG5hbWUpICsgJ11bdHlwZT1cInJhZGlvXCJdJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgb3RoZXJOb2RlID0gZ3JvdXBbaV07XG5cbiAgICAgIGlmIChvdGhlck5vZGUgPT09IHJvb3ROb2RlIHx8IG90aGVyTm9kZS5mb3JtICE9PSByb290Tm9kZS5mb3JtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgcmFkaW8gYnV0dG9ucyByZW5kZXJlZCBieSBkaWZmZXJlbnQgY29waWVzIG9mIFJlYWN0XG4gICAgICAvLyBhbmQgdGhlIHNhbWUgbmFtZSBhcmUgcmVuZGVyZWQgaW50byB0aGUgc2FtZSBmb3JtIChzYW1lIGFzICMxOTM5KS5cbiAgICAgIC8vIFRoYXQncyBwcm9iYWJseSBva2F5OyB3ZSBkb24ndCBzdXBwb3J0IGl0IGp1c3QgYXMgd2UgZG9uJ3Qgc3VwcG9ydFxuICAgICAgLy8gbWl4aW5nIFJlYWN0IHJhZGlvIGJ1dHRvbnMgd2l0aCBub24tUmVhY3Qgb25lcy5cblxuXG4gICAgICB2YXIgb3RoZXJQcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUob3RoZXJOb2RlKTtcblxuICAgICAgaWYgKCFvdGhlclByb3BzKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJSZWFjdERPTUlucHV0OiBNaXhpbmcgUmVhY3QgYW5kIG5vbi1SZWFjdCByYWRpbyBpbnB1dHMgd2l0aCB0aGUgc2FtZSBgbmFtZWAgaXMgbm90IHN1cHBvcnRlZC5cIiApO1xuICAgICAgICB9XG4gICAgICB9IC8vIFdlIG5lZWQgdXBkYXRlIHRoZSB0cmFja2VkIHZhbHVlIG9uIHRoZSBuYW1lZCBjb3VzaW4gc2luY2UgdGhlIHZhbHVlXG4gICAgICAvLyB3YXMgY2hhbmdlZCBidXQgdGhlIGlucHV0IHNhdyBubyBldmVudCBvciB2YWx1ZSBzZXRcblxuXG4gICAgICB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChvdGhlck5vZGUpOyAvLyBJZiB0aGlzIGlzIGEgY29udHJvbGxlZCByYWRpbyBidXR0b24gZ3JvdXAsIGZvcmNpbmcgdGhlIGlucHV0IHRoYXRcbiAgICAgIC8vIHdhcyBwcmV2aW91c2x5IGNoZWNrZWQgdG8gdXBkYXRlIHdpbGwgY2F1c2UgaXQgdG8gYmUgY29tZSByZS1jaGVja2VkXG4gICAgICAvLyBhcyBhcHByb3ByaWF0ZS5cblxuICAgICAgdXBkYXRlV3JhcHBlcihvdGhlck5vZGUsIG90aGVyUHJvcHMpO1xuICAgIH1cbiAgfVxufSAvLyBJbiBDaHJvbWUsIGFzc2lnbmluZyBkZWZhdWx0VmFsdWUgdG8gY2VydGFpbiBpbnB1dCB0eXBlcyB0cmlnZ2VycyBpbnB1dCB2YWxpZGF0aW9uLlxuLy8gRm9yIG51bWJlciBpbnB1dHMsIHRoZSBkaXNwbGF5IHZhbHVlIGxvc2VzIHRyYWlsaW5nIGRlY2ltYWwgcG9pbnRzLiBGb3IgZW1haWwgaW5wdXRzLFxuLy8gQ2hyb21lIHJhaXNlcyBcIlRoZSBzcGVjaWZpZWQgdmFsdWUgPHg+IGlzIG5vdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIi5cbi8vXG4vLyBIZXJlIHdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgZGVmYXVsdFZhbHVlIGhhcyBhY3R1YWxseSBjaGFuZ2VkLCBhdm9pZGluZyB0aGVzZSBwcm9ibGVtc1xuLy8gd2hlbiB0aGUgdXNlciBpcyBpbnB1dHRpbmcgdGV4dFxuLy9cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzI1M1xuXG5cbmZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZShub2RlLCB0eXBlLCB2YWx1ZSkge1xuICBpZiAoIC8vIEZvY3VzZWQgbnVtYmVyIGlucHV0cyBzeW5jaHJvbml6ZSBvbiBibHVyLiBTZWUgQ2hhbmdlRXZlbnRQbHVnaW4uanNcbiAgdHlwZSAhPT0gJ251bWJlcicgfHwgZ2V0QWN0aXZlRWxlbWVudChub2RlLm93bmVyRG9jdW1lbnQpICE9PSBub2RlKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChub2RlLmRlZmF1bHRWYWx1ZSAhPT0gdG9TdHJpbmcodmFsdWUpKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uID0gZmFsc2U7XG52YXIgZGlkV2FybkludmFsaWRDaGlsZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmbGF0dGVuQ2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgdmFyIGNvbnRlbnQgPSAnJzsgLy8gRmxhdHRlbiBjaGlsZHJlbi4gV2UnbGwgd2FybiBpZiB0aGV5IGFyZSBpbnZhbGlkXG4gIC8vIGR1cmluZyB2YWxpZGF0ZVByb3BzKCkgd2hpY2ggcnVucyBmb3IgaHlkcmF0aW9uIHRvby5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgd291bGQgdGhyb3cgb24gbm9uLWVsZW1lbnQgb2JqZWN0cy5cbiAgLy8gRWxlbWVudHMgYXJlIHN0cmluZ2lmaWVkICh3aGljaCBpcyBub3JtYWxseSBpcnJlbGV2YW50XG4gIC8vIGJ1dCBtYXR0ZXJzIGZvciA8ZmJ0PikuXG5cbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgaWYgKGNoaWxkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZW50ICs9IGNoaWxkOyAvLyBOb3RlOiB3ZSBkb24ndCB3YXJuIGFib3V0IGludmFsaWQgY2hpbGRyZW4gaGVyZS5cbiAgICAvLyBJbnN0ZWFkLCB0aGlzIGlzIGRvbmUgc2VwYXJhdGVseSBiZWxvdyBzbyB0aGF0XG4gICAgLy8gaXQgaGFwcGVucyBkdXJpbmcgdGhlIGh5ZHJhdGlvbiBjb2RlIHBhdGggdG9vLlxuICB9KTtcbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4vKipcbiAqIEltcGxlbWVudHMgYW4gPG9wdGlvbj4gaG9zdCBjb21wb25lbnQgdGhhdCB3YXJucyB3aGVuIGBzZWxlY3RlZGAgaXMgc2V0LlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhlbGVtZW50LCBwcm9wcykge1xuICB7XG4gICAgLy8gVGhpcyBtaXJyb3JzIHRoZSBjb2RlIHBhdGggYWJvdmUsIGJ1dCBydW5zIGZvciBoeWRyYXRpb24gdG9vLlxuICAgIC8vIFdhcm4gYWJvdXQgaW52YWxpZCBjaGlsZHJlbiBoZXJlIHNvIHRoYXQgY2xpZW50IGFuZCBoeWRyYXRpb24gYXJlIGNvbnNpc3RlbnQuXG4gICAgLy8gVE9ETzogdGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIGNhdXNlIGEgREVWLW9ubHkgdGhyb3cgZm9yIGh5ZHJhdGlvblxuICAgIC8vIGlmIGNoaWxkcmVuIGNvbnRhaW5zIGEgbm9uLWVsZW1lbnQgb2JqZWN0LiBXZSBzaG91bGQgdHJ5IHRvIGF2b2lkIHRoYXQuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ29iamVjdCcgJiYgcHJvcHMuY2hpbGRyZW4gIT09IG51bGwpIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2gocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICBpZiAoY2hpbGQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkLnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaWRXYXJuSW52YWxpZENoaWxkKSB7XG4gICAgICAgICAgZGlkV2FybkludmFsaWRDaGlsZCA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignT25seSBzdHJpbmdzIGFuZCBudW1iZXJzIGFyZSBzdXBwb3J0ZWQgYXMgPG9wdGlvbj4gY2hpbGRyZW4uJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gLy8gVE9ETzogUmVtb3ZlIHN1cHBvcnQgZm9yIGBzZWxlY3RlZGAgaW4gPG9wdGlvbj4uXG5cblxuICAgIGlmIChwcm9wcy5zZWxlY3RlZCAhPSBudWxsICYmICFkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbikge1xuICAgICAgZXJyb3IoJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBvbiA8c2VsZWN0PiBpbnN0ZWFkIG9mICcgKyAnc2V0dGluZyBgc2VsZWN0ZWRgIG9uIDxvcHRpb24+LicpO1xuXG4gICAgICBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9IHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgLy8gdmFsdWU9XCJcIiBzaG91bGQgbWFrZSBhIHZhbHVlIGF0dHJpYnV0ZSAoIzYyMTkpXG4gIGlmIChwcm9wcy52YWx1ZSAhPSBudWxsKSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgdG9TdHJpbmcoZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSkpKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIGhvc3RQcm9wcyA9IF9hc3NpZ24oe1xuICAgIGNoaWxkcmVuOiB1bmRlZmluZWRcbiAgfSwgcHJvcHMpO1xuXG4gIHZhciBjb250ZW50ID0gZmxhdHRlbkNoaWxkcmVuKHByb3BzLmNoaWxkcmVuKTtcblxuICBpZiAoY29udGVudCkge1xuICAgIGhvc3RQcm9wcy5jaGlsZHJlbiA9IGNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gaG9zdFByb3BzO1xufVxuXG52YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDE7XG5cbntcbiAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcblxuICBpZiAob3duZXJOYW1lKSB7XG4gICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbnZhciB2YWx1ZVByb3BOYW1lcyA9IFsndmFsdWUnLCAnZGVmYXVsdFZhbHVlJ107XG4vKipcbiAqIFZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICovXG5cbmZ1bmN0aW9uIGNoZWNrU2VsZWN0UHJvcFR5cGVzKHByb3BzKSB7XG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCdzZWxlY3QnLCBwcm9wcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlUHJvcE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcE5hbWUgPSB2YWx1ZVByb3BOYW1lc1tpXTtcblxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkocHJvcHNbcHJvcE5hbWVdKTtcblxuICAgICAgaWYgKHByb3BzLm11bHRpcGxlICYmICFpc0FycmF5KSB7XG4gICAgICAgIGVycm9yKCdUaGUgYCVzYCBwcm9wIHN1cHBsaWVkIHRvIDxzZWxlY3Q+IG11c3QgYmUgYW4gYXJyYXkgaWYgJyArICdgbXVsdGlwbGVgIGlzIHRydWUuJXMnLCBwcm9wTmFtZSwgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkpO1xuICAgICAgfSBlbHNlIGlmICghcHJvcHMubXVsdGlwbGUgJiYgaXNBcnJheSkge1xuICAgICAgICBlcnJvcignVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGEgc2NhbGFyICcgKyAndmFsdWUgaWYgYG11bHRpcGxlYCBpcyBmYWxzZS4lcycsIHByb3BOYW1lLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMobm9kZSwgbXVsdGlwbGUsIHByb3BWYWx1ZSwgc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gIHZhciBvcHRpb25zID0gbm9kZS5vcHRpb25zO1xuXG4gIGlmIChtdWx0aXBsZSkge1xuICAgIHZhciBzZWxlY3RlZFZhbHVlcyA9IHByb3BWYWx1ZTtcbiAgICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IHt9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gUHJlZml4IHRvIGF2b2lkIGNoYW9zIHdpdGggc3BlY2lhbCBrZXlzLlxuICAgICAgc2VsZWN0ZWRWYWx1ZVsnJCcgKyBzZWxlY3RlZFZhbHVlc1tpXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBvcHRpb25zLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIHNlbGVjdGVkID0gc2VsZWN0ZWRWYWx1ZS5oYXNPd25Qcm9wZXJ0eSgnJCcgKyBvcHRpb25zW19pXS52YWx1ZSk7XG5cbiAgICAgIGlmIChvcHRpb25zW19pXS5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uc1tfaV0uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdGVkICYmIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25zW19pXS5kZWZhdWx0U2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBEbyBub3Qgc2V0IGBzZWxlY3QudmFsdWVgIGFzIGV4YWN0IGJlaGF2aW9yIGlzbid0IGNvbnNpc3RlbnQgYWNyb3NzIGFsbFxuICAgIC8vIGJyb3dzZXJzIGZvciBhbGwgY2FzZXMuXG4gICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gdG9TdHJpbmcoZ2V0VG9TdHJpbmdWYWx1ZShwcm9wVmFsdWUpKTtcblxuICAgIHZhciBkZWZhdWx0U2VsZWN0ZWQgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgb3B0aW9ucy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICBpZiAob3B0aW9uc1tfaTJdLnZhbHVlID09PSBfc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBvcHRpb25zW19pMl0uc2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmIChzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgICAgICBvcHRpb25zW19pMl0uZGVmYXVsdFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRTZWxlY3RlZCA9PT0gbnVsbCAmJiAhb3B0aW9uc1tfaTJdLmRpc2FibGVkKSB7XG4gICAgICAgIGRlZmF1bHRTZWxlY3RlZCA9IG9wdGlvbnNbX2kyXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmYXVsdFNlbGVjdGVkICE9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0U2VsZWN0ZWQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgPHNlbGVjdD4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgb3B0aW9uYWxseSBzZXR0aW5nIHRoZVxuICogcHJvcHMgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuIElmIGBtdWx0aXBsZWAgaXMgZmFsc2UsIHRoZSBwcm9wIG11c3QgYmUgYVxuICogc3RyaW5nYWJsZS4gSWYgYG11bHRpcGxlYCBpcyB0cnVlLCB0aGUgcHJvcCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ2FibGVzLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGNoYW5nZSB0aGVcbiAqIHNlbGVjdGVkIG9wdGlvbiB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAqXG4gKiBJZiBpdCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBvcHRpb25zIHdpbGwgbm90XG4gKiB1cGRhdGUgaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb25zLiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIG9wdGlvbnMgdG8gdXBkYXRlLlxuICpcbiAqIElmIGBkZWZhdWx0VmFsdWVgIGlzIHByb3ZpZGVkLCBhbnkgb3B0aW9ucyB3aXRoIHRoZSBzdXBwbGllZCB2YWx1ZXMgd2lsbCBiZVxuICogc2VsZWN0ZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMkMihlbGVtZW50LCBwcm9wcykge1xuICByZXR1cm4gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICB2YWx1ZTogdW5kZWZpbmVkXG4gIH0pO1xufVxuZnVuY3Rpb24gaW5pdFdyYXBwZXJTdGF0ZSQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgY2hlY2tTZWxlY3RQcm9wVHlwZXMocHJvcHMpO1xuICB9XG5cbiAgbm9kZS5fd3JhcHBlclN0YXRlID0ge1xuICAgIHdhc011bHRpcGxlOiAhIXByb3BzLm11bHRpcGxlXG4gIH07XG5cbiAge1xuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSkge1xuICAgICAgZXJyb3IoJ1NlbGVjdCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgc2VsZWN0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgbm9kZS5tdWx0aXBsZSA9ICEhcHJvcHMubXVsdGlwbGU7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5kZWZhdWx0VmFsdWUsIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBwb3N0VXBkYXRlV3JhcHBlcihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB3YXNNdWx0aXBsZSA9IG5vZGUuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZTtcbiAgbm9kZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlID0gISFwcm9wcy5tdWx0aXBsZTtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH0gZWxzZSBpZiAod2FzTXVsdGlwbGUgIT09ICEhcHJvcHMubXVsdGlwbGUpIHtcbiAgICAvLyBGb3Igc2ltcGxpY2l0eSwgcmVhcHBseSBgZGVmYXVsdFZhbHVlYCBpZiBgbXVsdGlwbGVgIGlzIHRvZ2dsZWQuXG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLmRlZmF1bHRWYWx1ZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJldmVydCB0aGUgc2VsZWN0IGJhY2sgdG8gaXRzIGRlZmF1bHQgdW5zZWxlY3RlZCBzdGF0ZS5cbiAgICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMubXVsdGlwbGUgPyBbXSA6ICcnLCBmYWxzZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfVxufVxuXG52YXIgZGlkV2FyblZhbERlZmF1bHRWYWwgPSBmYWxzZTtcblxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgPHRleHRhcmVhPiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBzZXR0aW5nIGB2YWx1ZWAsIGFuZFxuICogYGRlZmF1bHRWYWx1ZWAuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSB0cmFkaXRpb25hbCBET00gQVBJIGJlY2F1c2UgdmFsdWUgaXNcbiAqIHVzdWFsbHkgc2V0IGFzIFBDREFUQSBjaGlsZHJlbi5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBhZmZlY3QgdGhlXG4gKiB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbFxuICogbm90IHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4gKlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIGFuIGVtcHR5IHZhbHVlLCB0aGUgcHJvcFxuICogYGRlZmF1bHRWYWx1ZWAgaWYgc3BlY2lmaWVkLCBvciB0aGUgY2hpbGRyZW4gY29udGVudCAoZGVwcmVjYXRlZCkuXG4gKi9cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICBpZiAoIShwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcImBkYW5nZXJvdXNseVNldElubmVySFRNTGAgZG9lcyBub3QgbWFrZSBzZW5zZSBvbiA8dGV4dGFyZWE+LlwiICk7XG4gICAgfVxuICB9IC8vIEFsd2F5cyBzZXQgY2hpbGRyZW4gdG8gdGhlIHNhbWUgdGhpbmcuIEluIElFOSwgdGhlIHNlbGVjdGlvbiByYW5nZSB3aWxsXG4gIC8vIGdldCByZXNldCBpZiBgdGV4dENvbnRlbnRgIGlzIG11dGF0ZWQuICBXZSBjb3VsZCBhZGQgYSBjaGVjayBpbiBzZXRUZXh0Q29udGVudFxuICAvLyB0byBvbmx5IHNldCB0aGUgdmFsdWUgaWYvd2hlbiB0aGUgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBub2RlIHZhbHVlICh3aGljaCB3b3VsZFxuICAvLyBjb21wbGV0ZWx5IHNvbHZlIHRoaXMgSUU5IGJ1ZyksIGJ1dCBTZWJhc3RpYW4rU29waGllIHNlZW1lZCB0byBsaWtlIHRoaXNcbiAgLy8gc29sdXRpb24uIFRoZSB2YWx1ZSBjYW4gYmUgYSBib29sZWFuIG9yIG9iamVjdCBzbyB0aGF0J3Mgd2h5IGl0J3MgZm9yY2VkXG4gIC8vIHRvIGJlIGEgc3RyaW5nLlxuXG5cbiAgdmFyIGhvc3RQcm9wcyA9IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICBjaGlsZHJlbjogdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSlcbiAgfSk7XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUkMihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAge1xuICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoJ3RleHRhcmVhJywgcHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWxEZWZhdWx0VmFsKSB7XG4gICAgICBlcnJvcignJXMgY29udGFpbnMgYSB0ZXh0YXJlYSB3aXRoIGJvdGggdmFsdWUgYW5kIGRlZmF1bHRWYWx1ZSBwcm9wcy4gJyArICdUZXh0YXJlYSBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgdGV4dGFyZWEgJyArICdhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcpO1xuXG4gICAgICBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluaXRpYWxWYWx1ZSA9IHByb3BzLnZhbHVlOyAvLyBPbmx5IGJvdGhlciBmZXRjaGluZyBkZWZhdWx0IHZhbHVlIGlmIHdlJ3JlIGdvaW5nIHRvIHVzZSBpdFxuXG4gIGlmIChpbml0aWFsVmFsdWUgPT0gbnVsbCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWU7XG5cbiAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICBlcnJvcignVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIGluc3RlYWQgb2Ygc2V0dGluZyAnICsgJ2NoaWxkcmVuIG9uIDx0ZXh0YXJlYT4uJyk7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKCEoZGVmYXVsdFZhbHVlID09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiSWYgeW91IHN1cHBseSBgZGVmYXVsdFZhbHVlYCBvbiBhIDx0ZXh0YXJlYT4sIGRvIG5vdCBwYXNzIGNoaWxkcmVuLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgaWYgKCEoY2hpbGRyZW4ubGVuZ3RoIDw9IDEpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIjx0ZXh0YXJlYT4gY2FuIG9ubHkgaGF2ZSBhdCBtb3N0IG9uZSBjaGlsZC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW5bMF07XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBjaGlsZHJlbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlID09IG51bGwpIHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIGluaXRpYWxWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIG5vZGUuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICBpbml0aWFsVmFsdWU6IGdldFRvU3RyaW5nVmFsdWUoaW5pdGlhbFZhbHVlKVxuICB9O1xufVxuZnVuY3Rpb24gdXBkYXRlV3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSk7XG4gIHZhciBkZWZhdWx0VmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLmRlZmF1bHRWYWx1ZSk7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAvLyBDYXN0IGB2YWx1ZWAgdG8gYSBzdHJpbmcgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyBzZXQgY29ycmVjdGx5LiBXaGlsZVxuICAgIC8vIGJyb3dzZXJzIHR5cGljYWxseSBkbyB0aGlzIGFzIG5lY2Vzc2FyeSwganNkb20gZG9lc24ndC5cbiAgICB2YXIgbmV3VmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7IC8vIFRvIGF2b2lkIHNpZGUgZWZmZWN0cyAoc3VjaCBhcyBsb3NpbmcgdGV4dCBzZWxlY3Rpb24pLCBvbmx5IHNldCB2YWx1ZSBpZiBjaGFuZ2VkXG5cbiAgICBpZiAobmV3VmFsdWUgIT09IG5vZGUudmFsdWUpIHtcbiAgICAgIG5vZGUudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlID09IG51bGwgJiYgbm9kZS5kZWZhdWx0VmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcoZGVmYXVsdFZhbHVlKTtcbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDsgLy8gVGhpcyBpcyBpbiBwb3N0TW91bnQgYmVjYXVzZSB3ZSBuZWVkIGFjY2VzcyB0byB0aGUgRE9NIG5vZGUsIHdoaWNoIGlzIG5vdFxuICAvLyBhdmFpbGFibGUgdW50aWwgYWZ0ZXIgdGhlIGNvbXBvbmVudCBoYXMgbW91bnRlZC5cblxuICB2YXIgdGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50OyAvLyBPbmx5IHNldCBub2RlLnZhbHVlIGlmIHRleHRDb250ZW50IGlzIGVxdWFsIHRvIHRoZSBleHBlY3RlZFxuICAvLyBpbml0aWFsIHZhbHVlLiBJbiBJRTEwL0lFMTEgdGhlcmUgaXMgYSBidWcgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIGF0dHJpYnV0ZVxuICAvLyB3aWxsIHBvcHVsYXRlIHRleHRDb250ZW50IGFzIHdlbGwuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vbWljcm9zb2Z0LWVkZ2UvcGxhdGZvcm0vaXNzdWVzLzEwMTUyNS9cblxuICBpZiAodGV4dENvbnRlbnQgPT09IG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpIHtcbiAgICBpZiAodGV4dENvbnRlbnQgIT09ICcnICYmIHRleHRDb250ZW50ICE9PSBudWxsKSB7XG4gICAgICBub2RlLnZhbHVlID0gdGV4dENvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgLy8gRE9NIGNvbXBvbmVudCBpcyBzdGlsbCBtb3VudGVkOyB1cGRhdGVcbiAgdXBkYXRlV3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKTtcbn1cblxudmFyIEhUTUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnO1xudmFyIE1BVEhfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnO1xudmFyIFNWR19OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xudmFyIE5hbWVzcGFjZXMgPSB7XG4gIGh0bWw6IEhUTUxfTkFNRVNQQUNFLFxuICBtYXRobWw6IE1BVEhfTkFNRVNQQUNFLFxuICBzdmc6IFNWR19OQU1FU1BBQ0Vcbn07IC8vIEFzc3VtZXMgdGhlcmUgaXMgbm8gcGFyZW50IG5hbWVzcGFjZS5cblxuZnVuY3Rpb24gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnc3ZnJzpcbiAgICAgIHJldHVybiBTVkdfTkFNRVNQQUNFO1xuXG4gICAgY2FzZSAnbWF0aCc6XG4gICAgICByZXR1cm4gTUFUSF9OQU1FU1BBQ0U7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIEhUTUxfTkFNRVNQQUNFO1xuICB9XG59XG5mdW5jdGlvbiBnZXRDaGlsZE5hbWVzcGFjZShwYXJlbnROYW1lc3BhY2UsIHR5cGUpIHtcbiAgaWYgKHBhcmVudE5hbWVzcGFjZSA9PSBudWxsIHx8IHBhcmVudE5hbWVzcGFjZSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAvLyBObyAob3IgZGVmYXVsdCkgcGFyZW50IG5hbWVzcGFjZTogcG90ZW50aWFsIGVudHJ5IHBvaW50LlxuICAgIHJldHVybiBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodHlwZSk7XG4gIH1cblxuICBpZiAocGFyZW50TmFtZXNwYWNlID09PSBTVkdfTkFNRVNQQUNFICYmIHR5cGUgPT09ICdmb3JlaWduT2JqZWN0Jykge1xuICAgIC8vIFdlJ3JlIGxlYXZpbmcgU1ZHLlxuICAgIHJldHVybiBIVE1MX05BTUVTUEFDRTtcbiAgfSAvLyBCeSBkZWZhdWx0LCBwYXNzIG5hbWVzcGFjZSBiZWxvdy5cblxuXG4gIHJldHVybiBwYXJlbnROYW1lc3BhY2U7XG59XG5cbi8qIGdsb2JhbHMgTVNBcHAgKi9cblxuLyoqXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB3aGljaCBoYXMgJ3Vuc2FmZScgcHJpdmlsZWdlcyAocmVxdWlyZWQgYnkgd2luZG93czggYXBwcylcbiAqL1xudmFyIGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYykge1xuICBpZiAodHlwZW9mIE1TQXBwICE9PSAndW5kZWZpbmVkJyAmJiBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZnVuYyhhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH1cbn07XG5cbnZhciByZXVzYWJsZVNWR0NvbnRhaW5lcjtcbi8qKlxuICogU2V0IHRoZSBpbm5lckhUTUwgcHJvcGVydHkgb2YgYSBub2RlXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxuICogQGludGVybmFsXG4gKi9cblxudmFyIHNldElubmVySFRNTCA9IGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKG5vZGUsIGh0bWwpIHtcbiAgaWYgKG5vZGUubmFtZXNwYWNlVVJJID09PSBOYW1lc3BhY2VzLnN2Zykge1xuXG4gICAgaWYgKCEoJ2lubmVySFRNTCcgaW4gbm9kZSkpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgaW5uZXJIVE1MIGZvciBTVkcgbm9kZXMsIHNvIGluc3RlYWQgd2UgaW5qZWN0IHRoZVxuICAgICAgLy8gbmV3IG1hcmt1cCBpbiBhIHRlbXAgbm9kZSBhbmQgdGhlbiBtb3ZlIHRoZSBjaGlsZCBub2RlcyBhY3Jvc3MgaW50b1xuICAgICAgLy8gdGhlIHRhcmdldCBub2RlXG4gICAgICByZXVzYWJsZVNWR0NvbnRhaW5lciA9IHJldXNhYmxlU1ZHQ29udGFpbmVyIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgcmV1c2FibGVTVkdDb250YWluZXIuaW5uZXJIVE1MID0gJzxzdmc+JyArIGh0bWwudmFsdWVPZigpLnRvU3RyaW5nKCkgKyAnPC9zdmc+JztcbiAgICAgIHZhciBzdmdOb2RlID0gcmV1c2FibGVTVkdDb250YWluZXIuZmlyc3RDaGlsZDtcblxuICAgICAgd2hpbGUgKG5vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChzdmdOb2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChzdmdOb2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgbm9kZS5pbm5lckhUTUwgPSBodG1sO1xufSk7XG5cbi8qKlxuICogSFRNTCBub2RlVHlwZSB2YWx1ZXMgdGhhdCByZXByZXNlbnQgdGhlIHR5cGUgb2YgdGhlIG5vZGVcbiAqL1xudmFyIEVMRU1FTlRfTk9ERSA9IDE7XG52YXIgVEVYVF9OT0RFID0gMztcbnZhciBDT01NRU5UX05PREUgPSA4O1xudmFyIERPQ1VNRU5UX05PREUgPSA5O1xudmFyIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgPSAxMTtcblxuLyoqXG4gKiBTZXQgdGhlIHRleHRDb250ZW50IHByb3BlcnR5IG9mIGEgbm9kZS4gRm9yIHRleHQgdXBkYXRlcywgaXQncyBmYXN0ZXJcbiAqIHRvIHNldCB0aGUgYG5vZGVWYWx1ZWAgb2YgdGhlIFRleHQgbm9kZSBkaXJlY3RseSBpbnN0ZWFkIG9mIHVzaW5nXG4gKiBgLnRleHRDb250ZW50YCB3aGljaCB3aWxsIHJlbW92ZSB0aGUgZXhpc3Rpbmcgbm9kZSBhbmQgY3JlYXRlIGEgbmV3IG9uZS5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAaW50ZXJuYWxcbiAqL1xuXG52YXIgc2V0VGV4dENvbnRlbnQgPSBmdW5jdGlvbiAobm9kZSwgdGV4dCkge1xuICBpZiAodGV4dCkge1xuICAgIHZhciBmaXJzdENoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuXG4gICAgaWYgKGZpcnN0Q2hpbGQgJiYgZmlyc3RDaGlsZCA9PT0gbm9kZS5sYXN0Q2hpbGQgJiYgZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICBmaXJzdENoaWxkLm5vZGVWYWx1ZSA9IHRleHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XG59O1xuXG4vLyBMaXN0IGRlcml2ZWQgZnJvbSBHZWNrbyBzb3VyY2UgY29kZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2dlY2tvLWRldi9ibG9iLzRlNjM4ZWZjNzEvbGF5b3V0L3N0eWxlL3Rlc3QvcHJvcGVydHlfZGF0YWJhc2UuanNcbnZhciBzaG9ydGhhbmRUb0xvbmdoYW5kID0ge1xuICBhbmltYXRpb246IFsnYW5pbWF0aW9uRGVsYXknLCAnYW5pbWF0aW9uRGlyZWN0aW9uJywgJ2FuaW1hdGlvbkR1cmF0aW9uJywgJ2FuaW1hdGlvbkZpbGxNb2RlJywgJ2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50JywgJ2FuaW1hdGlvbk5hbWUnLCAnYW5pbWF0aW9uUGxheVN0YXRlJywgJ2FuaW1hdGlvblRpbWluZ0Z1bmN0aW9uJ10sXG4gIGJhY2tncm91bmQ6IFsnYmFja2dyb3VuZEF0dGFjaG1lbnQnLCAnYmFja2dyb3VuZENsaXAnLCAnYmFja2dyb3VuZENvbG9yJywgJ2JhY2tncm91bmRJbWFnZScsICdiYWNrZ3JvdW5kT3JpZ2luJywgJ2JhY2tncm91bmRQb3NpdGlvblgnLCAnYmFja2dyb3VuZFBvc2l0aW9uWScsICdiYWNrZ3JvdW5kUmVwZWF0JywgJ2JhY2tncm91bmRTaXplJ10sXG4gIGJhY2tncm91bmRQb3NpdGlvbjogWydiYWNrZ3JvdW5kUG9zaXRpb25YJywgJ2JhY2tncm91bmRQb3NpdGlvblknXSxcbiAgYm9yZGVyOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckJvdHRvbVdpZHRoJywgJ2JvcmRlckltYWdlT3V0c2V0JywgJ2JvcmRlckltYWdlUmVwZWF0JywgJ2JvcmRlckltYWdlU2xpY2UnLCAnYm9yZGVySW1hZ2VTb3VyY2UnLCAnYm9yZGVySW1hZ2VXaWR0aCcsICdib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclJpZ2h0U3R5bGUnLCAnYm9yZGVyUmlnaHRXaWR0aCcsICdib3JkZXJUb3BDb2xvcicsICdib3JkZXJUb3BTdHlsZScsICdib3JkZXJUb3BXaWR0aCddLFxuICBib3JkZXJCbG9ja0VuZDogWydib3JkZXJCbG9ja0VuZENvbG9yJywgJ2JvcmRlckJsb2NrRW5kU3R5bGUnLCAnYm9yZGVyQmxvY2tFbmRXaWR0aCddLFxuICBib3JkZXJCbG9ja1N0YXJ0OiBbJ2JvcmRlckJsb2NrU3RhcnRDb2xvcicsICdib3JkZXJCbG9ja1N0YXJ0U3R5bGUnLCAnYm9yZGVyQmxvY2tTdGFydFdpZHRoJ10sXG4gIGJvcmRlckJvdHRvbTogWydib3JkZXJCb3R0b21Db2xvcicsICdib3JkZXJCb3R0b21TdHlsZScsICdib3JkZXJCb3R0b21XaWR0aCddLFxuICBib3JkZXJDb2xvcjogWydib3JkZXJCb3R0b21Db2xvcicsICdib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJUb3BDb2xvciddLFxuICBib3JkZXJJbWFnZTogWydib3JkZXJJbWFnZU91dHNldCcsICdib3JkZXJJbWFnZVJlcGVhdCcsICdib3JkZXJJbWFnZVNsaWNlJywgJ2JvcmRlckltYWdlU291cmNlJywgJ2JvcmRlckltYWdlV2lkdGgnXSxcbiAgYm9yZGVySW5saW5lRW5kOiBbJ2JvcmRlcklubGluZUVuZENvbG9yJywgJ2JvcmRlcklubGluZUVuZFN0eWxlJywgJ2JvcmRlcklubGluZUVuZFdpZHRoJ10sXG4gIGJvcmRlcklubGluZVN0YXJ0OiBbJ2JvcmRlcklubGluZVN0YXJ0Q29sb3InLCAnYm9yZGVySW5saW5lU3RhcnRTdHlsZScsICdib3JkZXJJbmxpbmVTdGFydFdpZHRoJ10sXG4gIGJvcmRlckxlZnQ6IFsnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJMZWZ0V2lkdGgnXSxcbiAgYm9yZGVyUmFkaXVzOiBbJ2JvcmRlckJvdHRvbUxlZnRSYWRpdXMnLCAnYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMnLCAnYm9yZGVyVG9wTGVmdFJhZGl1cycsICdib3JkZXJUb3BSaWdodFJhZGl1cyddLFxuICBib3JkZXJSaWdodDogWydib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclJpZ2h0U3R5bGUnLCAnYm9yZGVyUmlnaHRXaWR0aCddLFxuICBib3JkZXJTdHlsZTogWydib3JkZXJCb3R0b21TdHlsZScsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJUb3BTdHlsZSddLFxuICBib3JkZXJUb3A6IFsnYm9yZGVyVG9wQ29sb3InLCAnYm9yZGVyVG9wU3R5bGUnLCAnYm9yZGVyVG9wV2lkdGgnXSxcbiAgYm9yZGVyV2lkdGg6IFsnYm9yZGVyQm90dG9tV2lkdGgnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0V2lkdGgnLCAnYm9yZGVyVG9wV2lkdGgnXSxcbiAgY29sdW1uUnVsZTogWydjb2x1bW5SdWxlQ29sb3InLCAnY29sdW1uUnVsZVN0eWxlJywgJ2NvbHVtblJ1bGVXaWR0aCddLFxuICBjb2x1bW5zOiBbJ2NvbHVtbkNvdW50JywgJ2NvbHVtbldpZHRoJ10sXG4gIGZsZXg6IFsnZmxleEJhc2lzJywgJ2ZsZXhHcm93JywgJ2ZsZXhTaHJpbmsnXSxcbiAgZmxleEZsb3c6IFsnZmxleERpcmVjdGlvbicsICdmbGV4V3JhcCddLFxuICBmb250OiBbJ2ZvbnRGYW1pbHknLCAnZm9udEZlYXR1cmVTZXR0aW5ncycsICdmb250S2VybmluZycsICdmb250TGFuZ3VhZ2VPdmVycmlkZScsICdmb250U2l6ZScsICdmb250U2l6ZUFkanVzdCcsICdmb250U3RyZXRjaCcsICdmb250U3R5bGUnLCAnZm9udFZhcmlhbnQnLCAnZm9udFZhcmlhbnRBbHRlcm5hdGVzJywgJ2ZvbnRWYXJpYW50Q2FwcycsICdmb250VmFyaWFudEVhc3RBc2lhbicsICdmb250VmFyaWFudExpZ2F0dXJlcycsICdmb250VmFyaWFudE51bWVyaWMnLCAnZm9udFZhcmlhbnRQb3NpdGlvbicsICdmb250V2VpZ2h0JywgJ2xpbmVIZWlnaHQnXSxcbiAgZm9udFZhcmlhbnQ6IFsnZm9udFZhcmlhbnRBbHRlcm5hdGVzJywgJ2ZvbnRWYXJpYW50Q2FwcycsICdmb250VmFyaWFudEVhc3RBc2lhbicsICdmb250VmFyaWFudExpZ2F0dXJlcycsICdmb250VmFyaWFudE51bWVyaWMnLCAnZm9udFZhcmlhbnRQb3NpdGlvbiddLFxuICBnYXA6IFsnY29sdW1uR2FwJywgJ3Jvd0dhcCddLFxuICBncmlkOiBbJ2dyaWRBdXRvQ29sdW1ucycsICdncmlkQXV0b0Zsb3cnLCAnZ3JpZEF1dG9Sb3dzJywgJ2dyaWRUZW1wbGF0ZUFyZWFzJywgJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnLCAnZ3JpZFRlbXBsYXRlUm93cyddLFxuICBncmlkQXJlYTogWydncmlkQ29sdW1uRW5kJywgJ2dyaWRDb2x1bW5TdGFydCcsICdncmlkUm93RW5kJywgJ2dyaWRSb3dTdGFydCddLFxuICBncmlkQ29sdW1uOiBbJ2dyaWRDb2x1bW5FbmQnLCAnZ3JpZENvbHVtblN0YXJ0J10sXG4gIGdyaWRDb2x1bW5HYXA6IFsnY29sdW1uR2FwJ10sXG4gIGdyaWRHYXA6IFsnY29sdW1uR2FwJywgJ3Jvd0dhcCddLFxuICBncmlkUm93OiBbJ2dyaWRSb3dFbmQnLCAnZ3JpZFJvd1N0YXJ0J10sXG4gIGdyaWRSb3dHYXA6IFsncm93R2FwJ10sXG4gIGdyaWRUZW1wbGF0ZTogWydncmlkVGVtcGxhdGVBcmVhcycsICdncmlkVGVtcGxhdGVDb2x1bW5zJywgJ2dyaWRUZW1wbGF0ZVJvd3MnXSxcbiAgbGlzdFN0eWxlOiBbJ2xpc3RTdHlsZUltYWdlJywgJ2xpc3RTdHlsZVBvc2l0aW9uJywgJ2xpc3RTdHlsZVR5cGUnXSxcbiAgbWFyZ2luOiBbJ21hcmdpbkJvdHRvbScsICdtYXJnaW5MZWZ0JywgJ21hcmdpblJpZ2h0JywgJ21hcmdpblRvcCddLFxuICBtYXJrZXI6IFsnbWFya2VyRW5kJywgJ21hcmtlck1pZCcsICdtYXJrZXJTdGFydCddLFxuICBtYXNrOiBbJ21hc2tDbGlwJywgJ21hc2tDb21wb3NpdGUnLCAnbWFza0ltYWdlJywgJ21hc2tNb2RlJywgJ21hc2tPcmlnaW4nLCAnbWFza1Bvc2l0aW9uWCcsICdtYXNrUG9zaXRpb25ZJywgJ21hc2tSZXBlYXQnLCAnbWFza1NpemUnXSxcbiAgbWFza1Bvc2l0aW9uOiBbJ21hc2tQb3NpdGlvblgnLCAnbWFza1Bvc2l0aW9uWSddLFxuICBvdXRsaW5lOiBbJ291dGxpbmVDb2xvcicsICdvdXRsaW5lU3R5bGUnLCAnb3V0bGluZVdpZHRoJ10sXG4gIG92ZXJmbG93OiBbJ292ZXJmbG93WCcsICdvdmVyZmxvd1knXSxcbiAgcGFkZGluZzogWydwYWRkaW5nQm90dG9tJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCcsICdwYWRkaW5nVG9wJ10sXG4gIHBsYWNlQ29udGVudDogWydhbGlnbkNvbnRlbnQnLCAnanVzdGlmeUNvbnRlbnQnXSxcbiAgcGxhY2VJdGVtczogWydhbGlnbkl0ZW1zJywgJ2p1c3RpZnlJdGVtcyddLFxuICBwbGFjZVNlbGY6IFsnYWxpZ25TZWxmJywgJ2p1c3RpZnlTZWxmJ10sXG4gIHRleHREZWNvcmF0aW9uOiBbJ3RleHREZWNvcmF0aW9uQ29sb3InLCAndGV4dERlY29yYXRpb25MaW5lJywgJ3RleHREZWNvcmF0aW9uU3R5bGUnXSxcbiAgdGV4dEVtcGhhc2lzOiBbJ3RleHRFbXBoYXNpc0NvbG9yJywgJ3RleHRFbXBoYXNpc1N0eWxlJ10sXG4gIHRyYW5zaXRpb246IFsndHJhbnNpdGlvbkRlbGF5JywgJ3RyYW5zaXRpb25EdXJhdGlvbicsICd0cmFuc2l0aW9uUHJvcGVydHknLCAndHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uJ10sXG4gIHdvcmRXcmFwOiBbJ292ZXJmbG93V3JhcCddXG59O1xuXG4vKipcbiAqIENTUyBwcm9wZXJ0aWVzIHdoaWNoIGFjY2VwdCBudW1iZXJzIGJ1dCBhcmUgbm90IGluIHVuaXRzIG9mIFwicHhcIi5cbiAqL1xudmFyIGlzVW5pdGxlc3NOdW1iZXIgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiB0cnVlLFxuICBib3JkZXJJbWFnZU91dHNldDogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VTbGljZTogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogdHJ1ZSxcbiAgYm94RmxleDogdHJ1ZSxcbiAgYm94RmxleEdyb3VwOiB0cnVlLFxuICBib3hPcmRpbmFsR3JvdXA6IHRydWUsXG4gIGNvbHVtbkNvdW50OiB0cnVlLFxuICBjb2x1bW5zOiB0cnVlLFxuICBmbGV4OiB0cnVlLFxuICBmbGV4R3JvdzogdHJ1ZSxcbiAgZmxleFBvc2l0aXZlOiB0cnVlLFxuICBmbGV4U2hyaW5rOiB0cnVlLFxuICBmbGV4TmVnYXRpdmU6IHRydWUsXG4gIGZsZXhPcmRlcjogdHJ1ZSxcbiAgZ3JpZEFyZWE6IHRydWUsXG4gIGdyaWRSb3c6IHRydWUsXG4gIGdyaWRSb3dFbmQ6IHRydWUsXG4gIGdyaWRSb3dTcGFuOiB0cnVlLFxuICBncmlkUm93U3RhcnQ6IHRydWUsXG4gIGdyaWRDb2x1bW46IHRydWUsXG4gIGdyaWRDb2x1bW5FbmQ6IHRydWUsXG4gIGdyaWRDb2x1bW5TcGFuOiB0cnVlLFxuICBncmlkQ29sdW1uU3RhcnQ6IHRydWUsXG4gIGZvbnRXZWlnaHQ6IHRydWUsXG4gIGxpbmVDbGFtcDogdHJ1ZSxcbiAgbGluZUhlaWdodDogdHJ1ZSxcbiAgb3BhY2l0eTogdHJ1ZSxcbiAgb3JkZXI6IHRydWUsXG4gIG9ycGhhbnM6IHRydWUsXG4gIHRhYlNpemU6IHRydWUsXG4gIHdpZG93czogdHJ1ZSxcbiAgekluZGV4OiB0cnVlLFxuICB6b29tOiB0cnVlLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiB0cnVlLFxuICBmbG9vZE9wYWNpdHk6IHRydWUsXG4gIHN0b3BPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VEYXNoYXJyYXk6IHRydWUsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IHRydWUsXG4gIHN0cm9rZU1pdGVybGltaXQ6IHRydWUsXG4gIHN0cm9rZU9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZVdpZHRoOiB0cnVlXG59O1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IHZlbmRvci1zcGVjaWZpYyBwcmVmaXgsIGVnOiBXZWJraXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgc3R5bGUgbmFtZSwgZWc6IHRyYW5zaXRpb25EdXJhdGlvblxuICogQHJldHVybiB7c3RyaW5nfSBzdHlsZSBuYW1lIHByZWZpeGVkIHdpdGggYHByZWZpeGAsIHByb3Blcmx5IGNhbWVsQ2FzZWQsIGVnOlxuICogV2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uXG4gKi9cblxuZnVuY3Rpb24gcHJlZml4S2V5KHByZWZpeCwga2V5KSB7XG4gIHJldHVybiBwcmVmaXggKyBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc3Vic3RyaW5nKDEpO1xufVxuLyoqXG4gKiBTdXBwb3J0IHN0eWxlIG5hbWVzIHRoYXQgbWF5IGNvbWUgcGFzc2VkIGluIHByZWZpeGVkIGJ5IGFkZGluZyBwZXJtdXRhdGlvbnNcbiAqIG9mIHZlbmRvciBwcmVmaXhlcy5cbiAqL1xuXG5cbnZhciBwcmVmaXhlcyA9IFsnV2Via2l0JywgJ21zJywgJ01veicsICdPJ107IC8vIFVzaW5nIE9iamVjdC5rZXlzIGhlcmUsIG9yIGVsc2UgdGhlIHZhbmlsbGEgZm9yLWluIGxvb3AgbWFrZXMgSUU4IGdvIGludG8gYW5cbi8vIGluZmluaXRlIGxvb3AsIGJlY2F1c2UgaXQgaXRlcmF0ZXMgb3ZlciB0aGUgbmV3bHkgYWRkZWQgcHJvcHMgdG9vLlxuXG5PYmplY3Qua2V5cyhpc1VuaXRsZXNzTnVtYmVyKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIHByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24gKHByZWZpeCkge1xuICAgIGlzVW5pdGxlc3NOdW1iZXJbcHJlZml4S2V5KHByZWZpeCwgcHJvcCldID0gaXNVbml0bGVzc051bWJlcltwcm9wXTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgdmFsdWUgaW50byB0aGUgcHJvcGVyIGNzcyB3cml0YWJsZSB2YWx1ZS4gVGhlIHN0eWxlIG5hbWUgYG5hbWVgXG4gKiBzaG91bGQgYmUgbG9naWNhbCAobm8gaHlwaGVucyksIGFzIHNwZWNpZmllZFxuICogaW4gYENTU1Byb3BlcnR5LmlzVW5pdGxlc3NOdW1iZXJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIENTUyBwcm9wZXJ0eSBuYW1lIHN1Y2ggYXMgYHRvcE1hcmdpbmAuXG4gKiBAcGFyYW0geyp9IHZhbHVlIENTUyBwcm9wZXJ0eSB2YWx1ZSBzdWNoIGFzIGAxMHB4YC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBzdHlsZSB2YWx1ZSB3aXRoIGRpbWVuc2lvbnMgYXBwbGllZC5cbiAqL1xuXG5mdW5jdGlvbiBkYW5nZXJvdXNTdHlsZVZhbHVlKG5hbWUsIHZhbHVlLCBpc0N1c3RvbVByb3BlcnR5KSB7XG4gIC8vIE5vdGUgdGhhdCB3ZSd2ZSByZW1vdmVkIGVzY2FwZVRleHRGb3JCcm93c2VyKCkgY2FsbHMgaGVyZSBzaW5jZSB0aGVcbiAgLy8gd2hvbGUgc3RyaW5nIHdpbGwgYmUgZXNjYXBlZCB3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgaW5qZWN0ZWQgaW50b1xuICAvLyB0aGUgbWFya3VwLiBJZiB5b3UgcHJvdmlkZSB1bnNhZmUgdXNlciBkYXRhIGhlcmUgdGhleSBjYW4gaW5qZWN0XG4gIC8vIGFyYml0cmFyeSBDU1Mgd2hpY2ggbWF5IGJlIHByb2JsZW1hdGljIChJIGNvdWxkbid0IHJlcHJvIHRoaXMpOlxuICAvLyBodHRwczovL3d3dy5vd2FzcC5vcmcvaW5kZXgucGhwL1hTU19GaWx0ZXJfRXZhc2lvbl9DaGVhdF9TaGVldFxuICAvLyBodHRwOi8vd3d3LnRoZXNwYW5uZXIuY28udWsvMjAwNy8xMS8yNi91bHRpbWF0ZS14c3MtY3NzLWluamVjdGlvbi9cbiAgLy8gVGhpcyBpcyBub3QgYW4gWFNTIGhvbGUgYnV0IGluc3RlYWQgYSBwb3RlbnRpYWwgQ1NTIGluamVjdGlvbiBpc3N1ZVxuICAvLyB3aGljaCBoYXMgbGVhZCB0byBhIGdyZWF0ZXIgZGlzY3Vzc2lvbiBhYm91dCBob3cgd2UncmUgZ29pbmcgdG9cbiAgLy8gdHJ1c3QgVVJMcyBtb3ZpbmcgZm9yd2FyZC4gU2VlICMyMTE1OTAxXG4gIHZhciBpc0VtcHR5ID0gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG5cbiAgaWYgKGlzRW1wdHkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoIWlzQ3VzdG9tUHJvcGVydHkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCAmJiAhKGlzVW5pdGxlc3NOdW1iZXIuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgaXNVbml0bGVzc051bWJlcltuYW1lXSkpIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnOyAvLyBQcmVzdW1lcyBpbXBsaWNpdCAncHgnIHN1ZmZpeCBmb3IgdW5pdGxlc3MgbnVtYmVyc1xuICB9XG5cbiAgcmV0dXJuICgnJyArIHZhbHVlKS50cmltKCk7XG59XG5cbnZhciB1cHBlcmNhc2VQYXR0ZXJuID0gLyhbQS1aXSkvZztcbnZhciBtc1BhdHRlcm4gPSAvXm1zLS87XG4vKipcbiAqIEh5cGhlbmF0ZXMgYSBjYW1lbGNhc2VkIENTUyBwcm9wZXJ0eSBuYW1lLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdiYWNrZ3JvdW5kQ29sb3InKVxuICogICA8IFwiYmFja2dyb3VuZC1jb2xvclwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdNb3pUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tb3otdHJhbnNpdGlvblwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdtc1RyYW5zaXRpb24nKVxuICogICA8IFwiLW1zLXRyYW5zaXRpb25cIlxuICpcbiAqIEFzIE1vZGVybml6ciBzdWdnZXN0cyAoaHR0cDovL21vZGVybml6ci5jb20vZG9jcy8jcHJlZml4ZWQpLCBhbiBgbXNgIHByZWZpeFxuICogaXMgY29udmVydGVkIHRvIGAtbXMtYC5cbiAqL1xuXG5mdW5jdGlvbiBoeXBoZW5hdGVTdHlsZU5hbWUobmFtZSkge1xuICByZXR1cm4gbmFtZS5yZXBsYWNlKHVwcGVyY2FzZVBhdHRlcm4sICctJDEnKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UobXNQYXR0ZXJuLCAnLW1zLScpO1xufVxuXG52YXIgd2FyblZhbGlkU3R5bGUgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICAvLyAnbXNUcmFuc2Zvcm0nIGlzIGNvcnJlY3QsIGJ1dCB0aGUgb3RoZXIgcHJlZml4ZXMgc2hvdWxkIGJlIGNhcGl0YWxpemVkXG4gIHZhciBiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4gPSAvXig/OndlYmtpdHxtb3p8bylbQS1aXS87XG4gIHZhciBtc1BhdHRlcm4kMSA9IC9eLW1zLS87XG4gIHZhciBoeXBoZW5QYXR0ZXJuID0gLy0oLikvZzsgLy8gc3R5bGUgdmFsdWVzIHNob3VsZG4ndCBjb250YWluIGEgc2VtaWNvbG9uXG5cbiAgdmFyIGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiA9IC87XFxzKiQvO1xuICB2YXIgd2FybmVkU3R5bGVOYW1lcyA9IHt9O1xuICB2YXIgd2FybmVkU3R5bGVWYWx1ZXMgPSB7fTtcbiAgdmFyIHdhcm5lZEZvck5hTlZhbHVlID0gZmFsc2U7XG4gIHZhciB3YXJuZWRGb3JJbmZpbml0eVZhbHVlID0gZmFsc2U7XG5cbiAgdmFyIGNhbWVsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShoeXBoZW5QYXR0ZXJuLCBmdW5jdGlvbiAoXywgY2hhcmFjdGVyKSB7XG4gICAgICByZXR1cm4gY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRTdHlsZU5hbWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignVW5zdXBwb3J0ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8nLCBuYW1lLCAvLyBBcyBBbmRpIFNtaXRoIHN1Z2dlc3RzXG4gICAgLy8gKGh0dHA6Ly93d3cuYW5kaXNtaXRoLmNvbS9ibG9nLzIwMTIvMDIvbW9kZXJuaXpyLXByZWZpeGVkLyksIGFuIGAtbXNgIHByZWZpeFxuICAgIC8vIGlzIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYG1zYC5cbiAgICBjYW1lbGl6ZShuYW1lLnJlcGxhY2UobXNQYXR0ZXJuJDEsICdtcy0nKSkpO1xuICB9O1xuXG4gIHZhciB3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdVbnN1cHBvcnRlZCB2ZW5kb3ItcHJlZml4ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8nLCBuYW1lLCBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlV2l0aFNlbWljb2xvbiA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZVZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkgJiYgd2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKFwiU3R5bGUgcHJvcGVydHkgdmFsdWVzIHNob3VsZG4ndCBjb250YWluIGEgc2VtaWNvbG9uLiBcIiArICdUcnkgXCIlczogJXNcIiBpbnN0ZWFkLicsIG5hbWUsIHZhbHVlLnJlcGxhY2UoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLCAnJykpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZUlzTmFOID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZEZvck5hTlZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkRm9yTmFOVmFsdWUgPSB0cnVlO1xuXG4gICAgZXJyb3IoJ2BOYU5gIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS4nLCBuYW1lKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVJc0luZmluaXR5ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZEZvckluZmluaXR5VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRGb3JJbmZpbml0eVZhbHVlID0gdHJ1ZTtcblxuICAgIGVycm9yKCdgSW5maW5pdHlgIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS4nLCBuYW1lKTtcbiAgfTtcblxuICB3YXJuVmFsaWRTdHlsZSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmIChuYW1lLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybi50ZXN0KG5hbWUpKSB7XG4gICAgICB3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUobmFtZSk7XG4gICAgfSBlbHNlIGlmIChiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHdhcm5TdHlsZVZhbHVlV2l0aFNlbWljb2xvbihuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgd2FyblN0eWxlVmFsdWVJc05hTihuYW1lLCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKCFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICAgICAgd2FyblN0eWxlVmFsdWVJc0luZmluaXR5KG5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbnZhciB3YXJuVmFsaWRTdHlsZSQxID0gd2FyblZhbGlkU3R5bGU7XG5cbi8qKlxuICogT3BlcmF0aW9ucyBmb3IgZGVhbGluZyB3aXRoIENTUyBwcm9wZXJ0aWVzLlxuICovXG5cbi8qKlxuICogVGhpcyBjcmVhdGVzIGEgc3RyaW5nIHRoYXQgaXMgZXhwZWN0ZWQgdG8gYmUgZXF1aXZhbGVudCB0byB0aGUgc3R5bGVcbiAqIGF0dHJpYnV0ZSBnZW5lcmF0ZWQgYnkgc2VydmVyLXNpZGUgcmVuZGVyaW5nLiBJdCBieS1wYXNzZXMgd2FybmluZ3MgYW5kXG4gKiBzZWN1cml0eSBjaGVja3Mgc28gaXQncyBub3Qgc2FmZSB0byB1c2UgdGhpcyB2YWx1ZSBmb3IgYW55dGhpbmcgb3RoZXIgdGhhblxuICogY29tcGFyaXNvbi4gSXQgaXMgb25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlRGFuZ2Vyb3VzU3RyaW5nRm9yU3R5bGVzKHN0eWxlcykge1xuICB7XG4gICAgdmFyIHNlcmlhbGl6ZWQgPSAnJztcbiAgICB2YXIgZGVsaW1pdGVyID0gJyc7XG5cbiAgICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gc3R5bGVzKSB7XG4gICAgICBpZiAoIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3R5bGVWYWx1ZSA9IHN0eWxlc1tzdHlsZU5hbWVdO1xuXG4gICAgICBpZiAoc3R5bGVWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBpc0N1c3RvbVByb3BlcnR5ID0gc3R5bGVOYW1lLmluZGV4T2YoJy0tJykgPT09IDA7XG4gICAgICAgIHNlcmlhbGl6ZWQgKz0gZGVsaW1pdGVyICsgKGlzQ3VzdG9tUHJvcGVydHkgPyBzdHlsZU5hbWUgOiBoeXBoZW5hdGVTdHlsZU5hbWUoc3R5bGVOYW1lKSkgKyAnOic7XG4gICAgICAgIHNlcmlhbGl6ZWQgKz0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShzdHlsZU5hbWUsIHN0eWxlVmFsdWUsIGlzQ3VzdG9tUHJvcGVydHkpO1xuICAgICAgICBkZWxpbWl0ZXIgPSAnOyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQgfHwgbnVsbDtcbiAgfVxufVxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBmb3IgbXVsdGlwbGUgc3R5bGVzIG9uIGEgbm9kZS4gIElmIGEgdmFsdWUgaXMgc3BlY2lmaWVkIGFzXG4gKiAnJyAoZW1wdHkgc3RyaW5nKSwgdGhlIGNvcnJlc3BvbmRpbmcgc3R5bGUgcHJvcGVydHkgd2lsbCBiZSB1bnNldC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZXNcbiAqL1xuXG5mdW5jdGlvbiBzZXRWYWx1ZUZvclN0eWxlcyhub2RlLCBzdHlsZXMpIHtcbiAgdmFyIHN0eWxlID0gbm9kZS5zdHlsZTtcblxuICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gc3R5bGVzKSB7XG4gICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBzdHlsZU5hbWUuaW5kZXhPZignLS0nKSA9PT0gMDtcblxuICAgIHtcbiAgICAgIGlmICghaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgICB3YXJuVmFsaWRTdHlsZSQxKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzdHlsZVZhbHVlID0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShzdHlsZU5hbWUsIHN0eWxlc1tzdHlsZU5hbWVdLCBpc0N1c3RvbVByb3BlcnR5KTtcblxuICAgIGlmIChzdHlsZU5hbWUgPT09ICdmbG9hdCcpIHtcbiAgICAgIHN0eWxlTmFtZSA9ICdjc3NGbG9hdCc7XG4gICAgfVxuXG4gICAgaWYgKGlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgICAgIHN0eWxlLnNldFByb3BlcnR5KHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlW3N0eWxlTmFtZV0gPSBzdHlsZVZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbHVlRW1wdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgPT09ICcnO1xufVxuLyoqXG4gKiBHaXZlbiB7Y29sb3I6ICdyZWQnLCBvdmVyZmxvdzogJ2hpZGRlbid9IHJldHVybnMge1xuICogICBjb2xvcjogJ2NvbG9yJyxcbiAqICAgb3ZlcmZsb3dYOiAnb3ZlcmZsb3cnLFxuICogICBvdmVyZmxvd1k6ICdvdmVyZmxvdycsXG4gKiB9LiBUaGlzIGNhbiBiZSByZWFkIGFzIFwidGhlIG92ZXJmbG93WSBwcm9wZXJ0eSB3YXMgc2V0IGJ5IHRoZSBvdmVyZmxvd1xuICogc2hvcnRoYW5kXCIuIFRoYXQgaXMsIHRoZSB2YWx1ZXMgYXJlIHRoZSBwcm9wZXJ0eSB0aGF0IGVhY2ggd2FzIGRlcml2ZWQgZnJvbS5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4cGFuZFNob3J0aGFuZE1hcChzdHlsZXMpIHtcbiAgdmFyIGV4cGFuZGVkID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHN0eWxlcykge1xuICAgIHZhciBsb25naGFuZHMgPSBzaG9ydGhhbmRUb0xvbmdoYW5kW2tleV0gfHwgW2tleV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmdoYW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgZXhwYW5kZWRbbG9uZ2hhbmRzW2ldXSA9IGtleTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwYW5kZWQ7XG59XG4vKipcbiAqIFdoZW4gbWl4aW5nIHNob3J0aGFuZCBhbmQgbG9uZ2hhbmQgcHJvcGVydHkgbmFtZXMsIHdlIHdhcm4gZHVyaW5nIHVwZGF0ZXMgaWZcbiAqIHdlIGV4cGVjdCBhbiBpbmNvcnJlY3QgcmVzdWx0IHRvIG9jY3VyLiBJbiBwYXJ0aWN1bGFyLCB3ZSB3YXJuIGZvcjpcbiAqXG4gKiBVcGRhdGluZyBhIHNob3J0aGFuZCBwcm9wZXJ0eSAobG9uZ2hhbmQgZ2V0cyBvdmVyd3JpdHRlbik6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udDogJ2JheicsIGZvbnRWYXJpYW50OiAnYmFyJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udCA9ICdiYXonXG4gKiBSZW1vdmluZyBhIHNob3J0aGFuZCBwcm9wZXJ0eSAobG9uZ2hhbmQgZ2V0cyBsb3N0IHRvbyk6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udFZhcmlhbnQ6ICdiYXInfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250ID0gJydcbiAqIFJlbW92aW5nIGEgbG9uZ2hhbmQgcHJvcGVydHkgKHNob3VsZCByZXZlcnQgdG8gc2hvcnRoYW5kOyBkb2Vzbid0KTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250OiAnZm9vJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udFZhcmlhbnQgPSAnJ1xuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVTaG9ydGhhbmRQcm9wZXJ0eUNvbGxpc2lvbkluRGV2KHN0eWxlVXBkYXRlcywgbmV4dFN0eWxlcykge1xuICB7XG4gICAgaWYgKCFuZXh0U3R5bGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGV4cGFuZGVkVXBkYXRlcyA9IGV4cGFuZFNob3J0aGFuZE1hcChzdHlsZVVwZGF0ZXMpO1xuICAgIHZhciBleHBhbmRlZFN0eWxlcyA9IGV4cGFuZFNob3J0aGFuZE1hcChuZXh0U3R5bGVzKTtcbiAgICB2YXIgd2FybmVkQWJvdXQgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiBleHBhbmRlZFVwZGF0ZXMpIHtcbiAgICAgIHZhciBvcmlnaW5hbEtleSA9IGV4cGFuZGVkVXBkYXRlc1trZXldO1xuICAgICAgdmFyIGNvcnJlY3RPcmlnaW5hbEtleSA9IGV4cGFuZGVkU3R5bGVzW2tleV07XG5cbiAgICAgIGlmIChjb3JyZWN0T3JpZ2luYWxLZXkgJiYgb3JpZ2luYWxLZXkgIT09IGNvcnJlY3RPcmlnaW5hbEtleSkge1xuICAgICAgICB2YXIgd2FybmluZ0tleSA9IG9yaWdpbmFsS2V5ICsgJywnICsgY29ycmVjdE9yaWdpbmFsS2V5O1xuXG4gICAgICAgIGlmICh3YXJuZWRBYm91dFt3YXJuaW5nS2V5XSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgd2FybmVkQWJvdXRbd2FybmluZ0tleV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclcyBhIHN0eWxlIHByb3BlcnR5IGR1cmluZyByZXJlbmRlciAoJXMpIHdoZW4gYSAnICsgJ2NvbmZsaWN0aW5nIHByb3BlcnR5IGlzIHNldCAoJXMpIGNhbiBsZWFkIHRvIHN0eWxpbmcgYnVncy4gVG8gJyArIFwiYXZvaWQgdGhpcywgZG9uJ3QgbWl4IHNob3J0aGFuZCBhbmQgbm9uLXNob3J0aGFuZCBwcm9wZXJ0aWVzIFwiICsgJ2ZvciB0aGUgc2FtZSB2YWx1ZTsgaW5zdGVhZCwgcmVwbGFjZSB0aGUgc2hvcnRoYW5kIHdpdGggJyArICdzZXBhcmF0ZSB2YWx1ZXMuJywgaXNWYWx1ZUVtcHR5KHN0eWxlVXBkYXRlc1tvcmlnaW5hbEtleV0pID8gJ1JlbW92aW5nJyA6ICdVcGRhdGluZycsIG9yaWdpbmFsS2V5LCBjb3JyZWN0T3JpZ2luYWxLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBGb3IgSFRNTCwgY2VydGFpbiB0YWdzIHNob3VsZCBvbWl0IHRoZWlyIGNsb3NlIHRhZy4gV2Uga2VlcCBhIGxpc3QgZm9yXG4vLyB0aG9zZSBzcGVjaWFsLWNhc2UgdGFncy5cbnZhciBvbWl0dGVkQ2xvc2VUYWdzID0ge1xuICBhcmVhOiB0cnVlLFxuICBiYXNlOiB0cnVlLFxuICBicjogdHJ1ZSxcbiAgY29sOiB0cnVlLFxuICBlbWJlZDogdHJ1ZSxcbiAgaHI6IHRydWUsXG4gIGltZzogdHJ1ZSxcbiAgaW5wdXQ6IHRydWUsXG4gIGtleWdlbjogdHJ1ZSxcbiAgbGluazogdHJ1ZSxcbiAgbWV0YTogdHJ1ZSxcbiAgcGFyYW06IHRydWUsXG4gIHNvdXJjZTogdHJ1ZSxcbiAgdHJhY2s6IHRydWUsXG4gIHdicjogdHJ1ZSAvLyBOT1RFOiBtZW51aXRlbSdzIGNsb3NlIHRhZyBzaG91bGQgYmUgb21pdHRlZCwgYnV0IHRoYXQgY2F1c2VzIHByb2JsZW1zLlxuXG59O1xuXG4vLyBgb21pdHRlZENsb3NlVGFnc2AgZXhjZXB0IHRoYXQgYG1lbnVpdGVtYCBzaG91bGQgc3RpbGwgaGF2ZSBpdHMgY2xvc2luZyB0YWcuXG5cbnZhciB2b2lkRWxlbWVudFRhZ3MgPSBfYXNzaWduKHtcbiAgbWVudWl0ZW06IHRydWVcbn0sIG9taXR0ZWRDbG9zZVRhZ3MpO1xuXG52YXIgSFRNTCA9ICdfX2h0bWwnO1xuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFByb3BzKHRhZywgcHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHJldHVybjtcbiAgfSAvLyBOb3RlIHRoZSB1c2Ugb2YgYD09YCB3aGljaCBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkLlxuXG5cbiAgaWYgKHZvaWRFbGVtZW50VGFnc1t0YWddKSB7XG4gICAgaWYgKCEocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggdGFnICsgXCIgaXMgYSB2b2lkIGVsZW1lbnQgdGFnIGFuZCBtdXN0IG5laXRoZXIgaGF2ZSBgY2hpbGRyZW5gIG5vciB1c2UgYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPSBudWxsKSB7XG4gICAgaWYgKCEocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2FuIG9ubHkgc2V0IG9uZSBvZiBgY2hpbGRyZW5gIG9yIGBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoISh0eXBlb2YgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT09ICdvYmplY3QnICYmIEhUTUwgaW4gcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcImBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAgbXVzdCBiZSBpbiB0aGUgZm9ybSBge19faHRtbDogLi4ufWAuIFBsZWFzZSB2aXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGFuZ2Vyb3VzbHktc2V0LWlubmVyLWh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKCFwcm9wcy5zdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgJiYgcHJvcHMuY29udGVudEVkaXRhYmxlICYmIHByb3BzLmNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIGVycm9yKCdBIGNvbXBvbmVudCBpcyBgY29udGVudEVkaXRhYmxlYCBhbmQgY29udGFpbnMgYGNoaWxkcmVuYCBtYW5hZ2VkIGJ5ICcgKyAnUmVhY3QuIEl0IGlzIG5vdyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGd1YXJhbnRlZSB0aGF0IG5vbmUgb2YgJyArICd0aG9zZSBub2RlcyBhcmUgdW5leHBlY3RlZGx5IG1vZGlmaWVkIG9yIGR1cGxpY2F0ZWQuIFRoaXMgaXMgJyArICdwcm9iYWJseSBub3QgaW50ZW50aW9uYWwuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCEocHJvcHMuc3R5bGUgPT0gbnVsbCB8fCB0eXBlb2YgcHJvcHMuc3R5bGUgPT09ICdvYmplY3QnKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoZSBgc3R5bGVgIHByb3AgZXhwZWN0cyBhIG1hcHBpbmcgZnJvbSBzdHlsZSBwcm9wZXJ0aWVzIHRvIHZhbHVlcywgbm90IGEgc3RyaW5nLiBGb3IgZXhhbXBsZSwgc3R5bGU9e3ttYXJnaW5SaWdodDogc3BhY2luZyArICdlbSd9fSB3aGVuIHVzaW5nIEpTWC5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0N1c3RvbUNvbXBvbmVudCh0YWdOYW1lLCBwcm9wcykge1xuICBpZiAodGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBwcm9wcy5pcyA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICBzd2l0Y2ggKHRhZ05hbWUpIHtcbiAgICAvLyBUaGVzZSBhcmUgcmVzZXJ2ZWQgU1ZHIGFuZCBNYXRoTUwgZWxlbWVudHMuXG4gICAgLy8gV2UgZG9uJ3QgbWluZCB0aGlzIGxpc3QgdG9vIG11Y2ggYmVjYXVzZSB3ZSBleHBlY3QgaXQgdG8gbmV2ZXIgZ3Jvdy5cbiAgICAvLyBUaGUgYWx0ZXJuYXRpdmUgaXMgdG8gdHJhY2sgdGhlIG5hbWVzcGFjZSBpbiBhIGZldyBwbGFjZXMgd2hpY2ggaXMgY29udm9sdXRlZC5cbiAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViY29tcG9uZW50cy9zcGVjL2N1c3RvbS8jY3VzdG9tLWVsZW1lbnRzLWNvcmUtY29uY2VwdHNcbiAgICBjYXNlICdhbm5vdGF0aW9uLXhtbCc6XG4gICAgY2FzZSAnY29sb3ItcHJvZmlsZSc6XG4gICAgY2FzZSAnZm9udC1mYWNlJzpcbiAgICBjYXNlICdmb250LWZhY2Utc3JjJzpcbiAgICBjYXNlICdmb250LWZhY2UtdXJpJzpcbiAgICBjYXNlICdmb250LWZhY2UtZm9ybWF0JzpcbiAgICBjYXNlICdmb250LWZhY2UtbmFtZSc6XG4gICAgY2FzZSAnbWlzc2luZy1nbHlwaCc6XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGUgSFRNTCBvciBTVkcgYWxsb3dlZCBhdHRyaWJ1dGUgbGlzdCwgYmUgc3VyZSB0b1xuLy8gYWxzbyBhZGQgdGhlbSB0byB0aGlzIG1vZHVsZSB0byBlbnN1cmUgY2FzaW5nIGFuZCBpbmNvcnJlY3QgbmFtZVxuLy8gd2FybmluZ3MuXG52YXIgcG9zc2libGVTdGFuZGFyZE5hbWVzID0ge1xuICAvLyBIVE1MXG4gIGFjY2VwdDogJ2FjY2VwdCcsXG4gIGFjY2VwdGNoYXJzZXQ6ICdhY2NlcHRDaGFyc2V0JyxcbiAgJ2FjY2VwdC1jaGFyc2V0JzogJ2FjY2VwdENoYXJzZXQnLFxuICBhY2Nlc3NrZXk6ICdhY2Nlc3NLZXknLFxuICBhY3Rpb246ICdhY3Rpb24nLFxuICBhbGxvd2Z1bGxzY3JlZW46ICdhbGxvd0Z1bGxTY3JlZW4nLFxuICBhbHQ6ICdhbHQnLFxuICBhczogJ2FzJyxcbiAgYXN5bmM6ICdhc3luYycsXG4gIGF1dG9jYXBpdGFsaXplOiAnYXV0b0NhcGl0YWxpemUnLFxuICBhdXRvY29tcGxldGU6ICdhdXRvQ29tcGxldGUnLFxuICBhdXRvY29ycmVjdDogJ2F1dG9Db3JyZWN0JyxcbiAgYXV0b2ZvY3VzOiAnYXV0b0ZvY3VzJyxcbiAgYXV0b3BsYXk6ICdhdXRvUGxheScsXG4gIGF1dG9zYXZlOiAnYXV0b1NhdmUnLFxuICBjYXB0dXJlOiAnY2FwdHVyZScsXG4gIGNlbGxwYWRkaW5nOiAnY2VsbFBhZGRpbmcnLFxuICBjZWxsc3BhY2luZzogJ2NlbGxTcGFjaW5nJyxcbiAgY2hhbGxlbmdlOiAnY2hhbGxlbmdlJyxcbiAgY2hhcnNldDogJ2NoYXJTZXQnLFxuICBjaGVja2VkOiAnY2hlY2tlZCcsXG4gIGNoaWxkcmVuOiAnY2hpbGRyZW4nLFxuICBjaXRlOiAnY2l0ZScsXG4gIGNsYXNzOiAnY2xhc3NOYW1lJyxcbiAgY2xhc3NpZDogJ2NsYXNzSUQnLFxuICBjbGFzc25hbWU6ICdjbGFzc05hbWUnLFxuICBjb2xzOiAnY29scycsXG4gIGNvbHNwYW46ICdjb2xTcGFuJyxcbiAgY29udGVudDogJ2NvbnRlbnQnLFxuICBjb250ZW50ZWRpdGFibGU6ICdjb250ZW50RWRpdGFibGUnLFxuICBjb250ZXh0bWVudTogJ2NvbnRleHRNZW51JyxcbiAgY29udHJvbHM6ICdjb250cm9scycsXG4gIGNvbnRyb2xzbGlzdDogJ2NvbnRyb2xzTGlzdCcsXG4gIGNvb3JkczogJ2Nvb3JkcycsXG4gIGNyb3Nzb3JpZ2luOiAnY3Jvc3NPcmlnaW4nLFxuICBkYW5nZXJvdXNseXNldGlubmVyaHRtbDogJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJyxcbiAgZGF0YTogJ2RhdGEnLFxuICBkYXRldGltZTogJ2RhdGVUaW1lJyxcbiAgZGVmYXVsdDogJ2RlZmF1bHQnLFxuICBkZWZhdWx0Y2hlY2tlZDogJ2RlZmF1bHRDaGVja2VkJyxcbiAgZGVmYXVsdHZhbHVlOiAnZGVmYXVsdFZhbHVlJyxcbiAgZGVmZXI6ICdkZWZlcicsXG4gIGRpcjogJ2RpcicsXG4gIGRpc2FibGVkOiAnZGlzYWJsZWQnLFxuICBkaXNhYmxlcGljdHVyZWlucGljdHVyZTogJ2Rpc2FibGVQaWN0dXJlSW5QaWN0dXJlJyxcbiAgZGlzYWJsZXJlbW90ZXBsYXliYWNrOiAnZGlzYWJsZVJlbW90ZVBsYXliYWNrJyxcbiAgZG93bmxvYWQ6ICdkb3dubG9hZCcsXG4gIGRyYWdnYWJsZTogJ2RyYWdnYWJsZScsXG4gIGVuY3R5cGU6ICdlbmNUeXBlJyxcbiAgZW50ZXJrZXloaW50OiAnZW50ZXJLZXlIaW50JyxcbiAgZm9yOiAnaHRtbEZvcicsXG4gIGZvcm06ICdmb3JtJyxcbiAgZm9ybW1ldGhvZDogJ2Zvcm1NZXRob2QnLFxuICBmb3JtYWN0aW9uOiAnZm9ybUFjdGlvbicsXG4gIGZvcm1lbmN0eXBlOiAnZm9ybUVuY1R5cGUnLFxuICBmb3Jtbm92YWxpZGF0ZTogJ2Zvcm1Ob1ZhbGlkYXRlJyxcbiAgZm9ybXRhcmdldDogJ2Zvcm1UYXJnZXQnLFxuICBmcmFtZWJvcmRlcjogJ2ZyYW1lQm9yZGVyJyxcbiAgaGVhZGVyczogJ2hlYWRlcnMnLFxuICBoZWlnaHQ6ICdoZWlnaHQnLFxuICBoaWRkZW46ICdoaWRkZW4nLFxuICBoaWdoOiAnaGlnaCcsXG4gIGhyZWY6ICdocmVmJyxcbiAgaHJlZmxhbmc6ICdocmVmTGFuZycsXG4gIGh0bWxmb3I6ICdodG1sRm9yJyxcbiAgaHR0cGVxdWl2OiAnaHR0cEVxdWl2JyxcbiAgJ2h0dHAtZXF1aXYnOiAnaHR0cEVxdWl2JyxcbiAgaWNvbjogJ2ljb24nLFxuICBpZDogJ2lkJyxcbiAgaW5uZXJodG1sOiAnaW5uZXJIVE1MJyxcbiAgaW5wdXRtb2RlOiAnaW5wdXRNb2RlJyxcbiAgaW50ZWdyaXR5OiAnaW50ZWdyaXR5JyxcbiAgaXM6ICdpcycsXG4gIGl0ZW1pZDogJ2l0ZW1JRCcsXG4gIGl0ZW1wcm9wOiAnaXRlbVByb3AnLFxuICBpdGVtcmVmOiAnaXRlbVJlZicsXG4gIGl0ZW1zY29wZTogJ2l0ZW1TY29wZScsXG4gIGl0ZW10eXBlOiAnaXRlbVR5cGUnLFxuICBrZXlwYXJhbXM6ICdrZXlQYXJhbXMnLFxuICBrZXl0eXBlOiAna2V5VHlwZScsXG4gIGtpbmQ6ICdraW5kJyxcbiAgbGFiZWw6ICdsYWJlbCcsXG4gIGxhbmc6ICdsYW5nJyxcbiAgbGlzdDogJ2xpc3QnLFxuICBsb29wOiAnbG9vcCcsXG4gIGxvdzogJ2xvdycsXG4gIG1hbmlmZXN0OiAnbWFuaWZlc3QnLFxuICBtYXJnaW53aWR0aDogJ21hcmdpbldpZHRoJyxcbiAgbWFyZ2luaGVpZ2h0OiAnbWFyZ2luSGVpZ2h0JyxcbiAgbWF4OiAnbWF4JyxcbiAgbWF4bGVuZ3RoOiAnbWF4TGVuZ3RoJyxcbiAgbWVkaWE6ICdtZWRpYScsXG4gIG1lZGlhZ3JvdXA6ICdtZWRpYUdyb3VwJyxcbiAgbWV0aG9kOiAnbWV0aG9kJyxcbiAgbWluOiAnbWluJyxcbiAgbWlubGVuZ3RoOiAnbWluTGVuZ3RoJyxcbiAgbXVsdGlwbGU6ICdtdWx0aXBsZScsXG4gIG11dGVkOiAnbXV0ZWQnLFxuICBuYW1lOiAnbmFtZScsXG4gIG5vbW9kdWxlOiAnbm9Nb2R1bGUnLFxuICBub25jZTogJ25vbmNlJyxcbiAgbm92YWxpZGF0ZTogJ25vVmFsaWRhdGUnLFxuICBvcGVuOiAnb3BlbicsXG4gIG9wdGltdW06ICdvcHRpbXVtJyxcbiAgcGF0dGVybjogJ3BhdHRlcm4nLFxuICBwbGFjZWhvbGRlcjogJ3BsYWNlaG9sZGVyJyxcbiAgcGxheXNpbmxpbmU6ICdwbGF5c0lubGluZScsXG4gIHBvc3RlcjogJ3Bvc3RlcicsXG4gIHByZWxvYWQ6ICdwcmVsb2FkJyxcbiAgcHJvZmlsZTogJ3Byb2ZpbGUnLFxuICByYWRpb2dyb3VwOiAncmFkaW9Hcm91cCcsXG4gIHJlYWRvbmx5OiAncmVhZE9ubHknLFxuICByZWZlcnJlcnBvbGljeTogJ3JlZmVycmVyUG9saWN5JyxcbiAgcmVsOiAncmVsJyxcbiAgcmVxdWlyZWQ6ICdyZXF1aXJlZCcsXG4gIHJldmVyc2VkOiAncmV2ZXJzZWQnLFxuICByb2xlOiAncm9sZScsXG4gIHJvd3M6ICdyb3dzJyxcbiAgcm93c3BhbjogJ3Jvd1NwYW4nLFxuICBzYW5kYm94OiAnc2FuZGJveCcsXG4gIHNjb3BlOiAnc2NvcGUnLFxuICBzY29wZWQ6ICdzY29wZWQnLFxuICBzY3JvbGxpbmc6ICdzY3JvbGxpbmcnLFxuICBzZWFtbGVzczogJ3NlYW1sZXNzJyxcbiAgc2VsZWN0ZWQ6ICdzZWxlY3RlZCcsXG4gIHNoYXBlOiAnc2hhcGUnLFxuICBzaXplOiAnc2l6ZScsXG4gIHNpemVzOiAnc2l6ZXMnLFxuICBzcGFuOiAnc3BhbicsXG4gIHNwZWxsY2hlY2s6ICdzcGVsbENoZWNrJyxcbiAgc3JjOiAnc3JjJyxcbiAgc3JjZG9jOiAnc3JjRG9jJyxcbiAgc3JjbGFuZzogJ3NyY0xhbmcnLFxuICBzcmNzZXQ6ICdzcmNTZXQnLFxuICBzdGFydDogJ3N0YXJ0JyxcbiAgc3RlcDogJ3N0ZXAnLFxuICBzdHlsZTogJ3N0eWxlJyxcbiAgc3VtbWFyeTogJ3N1bW1hcnknLFxuICB0YWJpbmRleDogJ3RhYkluZGV4JyxcbiAgdGFyZ2V0OiAndGFyZ2V0JyxcbiAgdGl0bGU6ICd0aXRsZScsXG4gIHR5cGU6ICd0eXBlJyxcbiAgdXNlbWFwOiAndXNlTWFwJyxcbiAgdmFsdWU6ICd2YWx1ZScsXG4gIHdpZHRoOiAnd2lkdGgnLFxuICB3bW9kZTogJ3dtb2RlJyxcbiAgd3JhcDogJ3dyYXAnLFxuICAvLyBTVkdcbiAgYWJvdXQ6ICdhYm91dCcsXG4gIGFjY2VudGhlaWdodDogJ2FjY2VudEhlaWdodCcsXG4gICdhY2NlbnQtaGVpZ2h0JzogJ2FjY2VudEhlaWdodCcsXG4gIGFjY3VtdWxhdGU6ICdhY2N1bXVsYXRlJyxcbiAgYWRkaXRpdmU6ICdhZGRpdGl2ZScsXG4gIGFsaWdubWVudGJhc2VsaW5lOiAnYWxpZ25tZW50QmFzZWxpbmUnLFxuICAnYWxpZ25tZW50LWJhc2VsaW5lJzogJ2FsaWdubWVudEJhc2VsaW5lJyxcbiAgYWxsb3dyZW9yZGVyOiAnYWxsb3dSZW9yZGVyJyxcbiAgYWxwaGFiZXRpYzogJ2FscGhhYmV0aWMnLFxuICBhbXBsaXR1ZGU6ICdhbXBsaXR1ZGUnLFxuICBhcmFiaWNmb3JtOiAnYXJhYmljRm9ybScsXG4gICdhcmFiaWMtZm9ybSc6ICdhcmFiaWNGb3JtJyxcbiAgYXNjZW50OiAnYXNjZW50JyxcbiAgYXR0cmlidXRlbmFtZTogJ2F0dHJpYnV0ZU5hbWUnLFxuICBhdHRyaWJ1dGV0eXBlOiAnYXR0cmlidXRlVHlwZScsXG4gIGF1dG9yZXZlcnNlOiAnYXV0b1JldmVyc2UnLFxuICBhemltdXRoOiAnYXppbXV0aCcsXG4gIGJhc2VmcmVxdWVuY3k6ICdiYXNlRnJlcXVlbmN5JyxcbiAgYmFzZWxpbmVzaGlmdDogJ2Jhc2VsaW5lU2hpZnQnLFxuICAnYmFzZWxpbmUtc2hpZnQnOiAnYmFzZWxpbmVTaGlmdCcsXG4gIGJhc2Vwcm9maWxlOiAnYmFzZVByb2ZpbGUnLFxuICBiYm94OiAnYmJveCcsXG4gIGJlZ2luOiAnYmVnaW4nLFxuICBiaWFzOiAnYmlhcycsXG4gIGJ5OiAnYnknLFxuICBjYWxjbW9kZTogJ2NhbGNNb2RlJyxcbiAgY2FwaGVpZ2h0OiAnY2FwSGVpZ2h0JyxcbiAgJ2NhcC1oZWlnaHQnOiAnY2FwSGVpZ2h0JyxcbiAgY2xpcDogJ2NsaXAnLFxuICBjbGlwcGF0aDogJ2NsaXBQYXRoJyxcbiAgJ2NsaXAtcGF0aCc6ICdjbGlwUGF0aCcsXG4gIGNsaXBwYXRodW5pdHM6ICdjbGlwUGF0aFVuaXRzJyxcbiAgY2xpcHJ1bGU6ICdjbGlwUnVsZScsXG4gICdjbGlwLXJ1bGUnOiAnY2xpcFJ1bGUnLFxuICBjb2xvcjogJ2NvbG9yJyxcbiAgY29sb3JpbnRlcnBvbGF0aW9uOiAnY29sb3JJbnRlcnBvbGF0aW9uJyxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24nOiAnY29sb3JJbnRlcnBvbGF0aW9uJyxcbiAgY29sb3JpbnRlcnBvbGF0aW9uZmlsdGVyczogJ2NvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMnLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJzogJ2NvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMnLFxuICBjb2xvcnByb2ZpbGU6ICdjb2xvclByb2ZpbGUnLFxuICAnY29sb3ItcHJvZmlsZSc6ICdjb2xvclByb2ZpbGUnLFxuICBjb2xvcnJlbmRlcmluZzogJ2NvbG9yUmVuZGVyaW5nJyxcbiAgJ2NvbG9yLXJlbmRlcmluZyc6ICdjb2xvclJlbmRlcmluZycsXG4gIGNvbnRlbnRzY3JpcHR0eXBlOiAnY29udGVudFNjcmlwdFR5cGUnLFxuICBjb250ZW50c3R5bGV0eXBlOiAnY29udGVudFN0eWxlVHlwZScsXG4gIGN1cnNvcjogJ2N1cnNvcicsXG4gIGN4OiAnY3gnLFxuICBjeTogJ2N5JyxcbiAgZDogJ2QnLFxuICBkYXRhdHlwZTogJ2RhdGF0eXBlJyxcbiAgZGVjZWxlcmF0ZTogJ2RlY2VsZXJhdGUnLFxuICBkZXNjZW50OiAnZGVzY2VudCcsXG4gIGRpZmZ1c2Vjb25zdGFudDogJ2RpZmZ1c2VDb25zdGFudCcsXG4gIGRpcmVjdGlvbjogJ2RpcmVjdGlvbicsXG4gIGRpc3BsYXk6ICdkaXNwbGF5JyxcbiAgZGl2aXNvcjogJ2Rpdmlzb3InLFxuICBkb21pbmFudGJhc2VsaW5lOiAnZG9taW5hbnRCYXNlbGluZScsXG4gICdkb21pbmFudC1iYXNlbGluZSc6ICdkb21pbmFudEJhc2VsaW5lJyxcbiAgZHVyOiAnZHVyJyxcbiAgZHg6ICdkeCcsXG4gIGR5OiAnZHknLFxuICBlZGdlbW9kZTogJ2VkZ2VNb2RlJyxcbiAgZWxldmF0aW9uOiAnZWxldmF0aW9uJyxcbiAgZW5hYmxlYmFja2dyb3VuZDogJ2VuYWJsZUJhY2tncm91bmQnLFxuICAnZW5hYmxlLWJhY2tncm91bmQnOiAnZW5hYmxlQmFja2dyb3VuZCcsXG4gIGVuZDogJ2VuZCcsXG4gIGV4cG9uZW50OiAnZXhwb25lbnQnLFxuICBleHRlcm5hbHJlc291cmNlc3JlcXVpcmVkOiAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsXG4gIGZpbGw6ICdmaWxsJyxcbiAgZmlsbG9wYWNpdHk6ICdmaWxsT3BhY2l0eScsXG4gICdmaWxsLW9wYWNpdHknOiAnZmlsbE9wYWNpdHknLFxuICBmaWxscnVsZTogJ2ZpbGxSdWxlJyxcbiAgJ2ZpbGwtcnVsZSc6ICdmaWxsUnVsZScsXG4gIGZpbHRlcjogJ2ZpbHRlcicsXG4gIGZpbHRlcnJlczogJ2ZpbHRlclJlcycsXG4gIGZpbHRlcnVuaXRzOiAnZmlsdGVyVW5pdHMnLFxuICBmbG9vZG9wYWNpdHk6ICdmbG9vZE9wYWNpdHknLFxuICAnZmxvb2Qtb3BhY2l0eSc6ICdmbG9vZE9wYWNpdHknLFxuICBmbG9vZGNvbG9yOiAnZmxvb2RDb2xvcicsXG4gICdmbG9vZC1jb2xvcic6ICdmbG9vZENvbG9yJyxcbiAgZm9jdXNhYmxlOiAnZm9jdXNhYmxlJyxcbiAgZm9udGZhbWlseTogJ2ZvbnRGYW1pbHknLFxuICAnZm9udC1mYW1pbHknOiAnZm9udEZhbWlseScsXG4gIGZvbnRzaXplOiAnZm9udFNpemUnLFxuICAnZm9udC1zaXplJzogJ2ZvbnRTaXplJyxcbiAgZm9udHNpemVhZGp1c3Q6ICdmb250U2l6ZUFkanVzdCcsXG4gICdmb250LXNpemUtYWRqdXN0JzogJ2ZvbnRTaXplQWRqdXN0JyxcbiAgZm9udHN0cmV0Y2g6ICdmb250U3RyZXRjaCcsXG4gICdmb250LXN0cmV0Y2gnOiAnZm9udFN0cmV0Y2gnLFxuICBmb250c3R5bGU6ICdmb250U3R5bGUnLFxuICAnZm9udC1zdHlsZSc6ICdmb250U3R5bGUnLFxuICBmb250dmFyaWFudDogJ2ZvbnRWYXJpYW50JyxcbiAgJ2ZvbnQtdmFyaWFudCc6ICdmb250VmFyaWFudCcsXG4gIGZvbnR3ZWlnaHQ6ICdmb250V2VpZ2h0JyxcbiAgJ2ZvbnQtd2VpZ2h0JzogJ2ZvbnRXZWlnaHQnLFxuICBmb3JtYXQ6ICdmb3JtYXQnLFxuICBmcm9tOiAnZnJvbScsXG4gIGZ4OiAnZngnLFxuICBmeTogJ2Z5JyxcbiAgZzE6ICdnMScsXG4gIGcyOiAnZzInLFxuICBnbHlwaG5hbWU6ICdnbHlwaE5hbWUnLFxuICAnZ2x5cGgtbmFtZSc6ICdnbHlwaE5hbWUnLFxuICBnbHlwaG9yaWVudGF0aW9uaG9yaXpvbnRhbDogJ2dseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsJyxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnOiAnZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWwnLFxuICBnbHlwaG9yaWVudGF0aW9udmVydGljYWw6ICdnbHlwaE9yaWVudGF0aW9uVmVydGljYWwnLFxuICAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnOiAnZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsJyxcbiAgZ2x5cGhyZWY6ICdnbHlwaFJlZicsXG4gIGdyYWRpZW50dHJhbnNmb3JtOiAnZ3JhZGllbnRUcmFuc2Zvcm0nLFxuICBncmFkaWVudHVuaXRzOiAnZ3JhZGllbnRVbml0cycsXG4gIGhhbmdpbmc6ICdoYW5naW5nJyxcbiAgaG9yaXphZHZ4OiAnaG9yaXpBZHZYJyxcbiAgJ2hvcml6LWFkdi14JzogJ2hvcml6QWR2WCcsXG4gIGhvcml6b3JpZ2lueDogJ2hvcml6T3JpZ2luWCcsXG4gICdob3Jpei1vcmlnaW4teCc6ICdob3Jpek9yaWdpblgnLFxuICBpZGVvZ3JhcGhpYzogJ2lkZW9ncmFwaGljJyxcbiAgaW1hZ2VyZW5kZXJpbmc6ICdpbWFnZVJlbmRlcmluZycsXG4gICdpbWFnZS1yZW5kZXJpbmcnOiAnaW1hZ2VSZW5kZXJpbmcnLFxuICBpbjI6ICdpbjInLFxuICBpbjogJ2luJyxcbiAgaW5saXN0OiAnaW5saXN0JyxcbiAgaW50ZXJjZXB0OiAnaW50ZXJjZXB0JyxcbiAgazE6ICdrMScsXG4gIGsyOiAnazInLFxuICBrMzogJ2szJyxcbiAgazQ6ICdrNCcsXG4gIGs6ICdrJyxcbiAga2VybmVsbWF0cml4OiAna2VybmVsTWF0cml4JyxcbiAga2VybmVsdW5pdGxlbmd0aDogJ2tlcm5lbFVuaXRMZW5ndGgnLFxuICBrZXJuaW5nOiAna2VybmluZycsXG4gIGtleXBvaW50czogJ2tleVBvaW50cycsXG4gIGtleXNwbGluZXM6ICdrZXlTcGxpbmVzJyxcbiAga2V5dGltZXM6ICdrZXlUaW1lcycsXG4gIGxlbmd0aGFkanVzdDogJ2xlbmd0aEFkanVzdCcsXG4gIGxldHRlcnNwYWNpbmc6ICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ2xldHRlci1zcGFjaW5nJzogJ2xldHRlclNwYWNpbmcnLFxuICBsaWdodGluZ2NvbG9yOiAnbGlnaHRpbmdDb2xvcicsXG4gICdsaWdodGluZy1jb2xvcic6ICdsaWdodGluZ0NvbG9yJyxcbiAgbGltaXRpbmdjb25lYW5nbGU6ICdsaW1pdGluZ0NvbmVBbmdsZScsXG4gIGxvY2FsOiAnbG9jYWwnLFxuICBtYXJrZXJlbmQ6ICdtYXJrZXJFbmQnLFxuICAnbWFya2VyLWVuZCc6ICdtYXJrZXJFbmQnLFxuICBtYXJrZXJoZWlnaHQ6ICdtYXJrZXJIZWlnaHQnLFxuICBtYXJrZXJtaWQ6ICdtYXJrZXJNaWQnLFxuICAnbWFya2VyLW1pZCc6ICdtYXJrZXJNaWQnLFxuICBtYXJrZXJzdGFydDogJ21hcmtlclN0YXJ0JyxcbiAgJ21hcmtlci1zdGFydCc6ICdtYXJrZXJTdGFydCcsXG4gIG1hcmtlcnVuaXRzOiAnbWFya2VyVW5pdHMnLFxuICBtYXJrZXJ3aWR0aDogJ21hcmtlcldpZHRoJyxcbiAgbWFzazogJ21hc2snLFxuICBtYXNrY29udGVudHVuaXRzOiAnbWFza0NvbnRlbnRVbml0cycsXG4gIG1hc2t1bml0czogJ21hc2tVbml0cycsXG4gIG1hdGhlbWF0aWNhbDogJ21hdGhlbWF0aWNhbCcsXG4gIG1vZGU6ICdtb2RlJyxcbiAgbnVtb2N0YXZlczogJ251bU9jdGF2ZXMnLFxuICBvZmZzZXQ6ICdvZmZzZXQnLFxuICBvcGFjaXR5OiAnb3BhY2l0eScsXG4gIG9wZXJhdG9yOiAnb3BlcmF0b3InLFxuICBvcmRlcjogJ29yZGVyJyxcbiAgb3JpZW50OiAnb3JpZW50JyxcbiAgb3JpZW50YXRpb246ICdvcmllbnRhdGlvbicsXG4gIG9yaWdpbjogJ29yaWdpbicsXG4gIG92ZXJmbG93OiAnb3ZlcmZsb3cnLFxuICBvdmVybGluZXBvc2l0aW9uOiAnb3ZlcmxpbmVQb3NpdGlvbicsXG4gICdvdmVybGluZS1wb3NpdGlvbic6ICdvdmVybGluZVBvc2l0aW9uJyxcbiAgb3ZlcmxpbmV0aGlja25lc3M6ICdvdmVybGluZVRoaWNrbmVzcycsXG4gICdvdmVybGluZS10aGlja25lc3MnOiAnb3ZlcmxpbmVUaGlja25lc3MnLFxuICBwYWludG9yZGVyOiAncGFpbnRPcmRlcicsXG4gICdwYWludC1vcmRlcic6ICdwYWludE9yZGVyJyxcbiAgcGFub3NlMTogJ3Bhbm9zZTEnLFxuICAncGFub3NlLTEnOiAncGFub3NlMScsXG4gIHBhdGhsZW5ndGg6ICdwYXRoTGVuZ3RoJyxcbiAgcGF0dGVybmNvbnRlbnR1bml0czogJ3BhdHRlcm5Db250ZW50VW5pdHMnLFxuICBwYXR0ZXJudHJhbnNmb3JtOiAncGF0dGVyblRyYW5zZm9ybScsXG4gIHBhdHRlcm51bml0czogJ3BhdHRlcm5Vbml0cycsXG4gIHBvaW50ZXJldmVudHM6ICdwb2ludGVyRXZlbnRzJyxcbiAgJ3BvaW50ZXItZXZlbnRzJzogJ3BvaW50ZXJFdmVudHMnLFxuICBwb2ludHM6ICdwb2ludHMnLFxuICBwb2ludHNhdHg6ICdwb2ludHNBdFgnLFxuICBwb2ludHNhdHk6ICdwb2ludHNBdFknLFxuICBwb2ludHNhdHo6ICdwb2ludHNBdFonLFxuICBwcmVmaXg6ICdwcmVmaXgnLFxuICBwcmVzZXJ2ZWFscGhhOiAncHJlc2VydmVBbHBoYScsXG4gIHByZXNlcnZlYXNwZWN0cmF0aW86ICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJyxcbiAgcHJpbWl0aXZldW5pdHM6ICdwcmltaXRpdmVVbml0cycsXG4gIHByb3BlcnR5OiAncHJvcGVydHknLFxuICByOiAncicsXG4gIHJhZGl1czogJ3JhZGl1cycsXG4gIHJlZng6ICdyZWZYJyxcbiAgcmVmeTogJ3JlZlknLFxuICByZW5kZXJpbmdpbnRlbnQ6ICdyZW5kZXJpbmdJbnRlbnQnLFxuICAncmVuZGVyaW5nLWludGVudCc6ICdyZW5kZXJpbmdJbnRlbnQnLFxuICByZXBlYXRjb3VudDogJ3JlcGVhdENvdW50JyxcbiAgcmVwZWF0ZHVyOiAncmVwZWF0RHVyJyxcbiAgcmVxdWlyZWRleHRlbnNpb25zOiAncmVxdWlyZWRFeHRlbnNpb25zJyxcbiAgcmVxdWlyZWRmZWF0dXJlczogJ3JlcXVpcmVkRmVhdHVyZXMnLFxuICByZXNvdXJjZTogJ3Jlc291cmNlJyxcbiAgcmVzdGFydDogJ3Jlc3RhcnQnLFxuICByZXN1bHQ6ICdyZXN1bHQnLFxuICByZXN1bHRzOiAncmVzdWx0cycsXG4gIHJvdGF0ZTogJ3JvdGF0ZScsXG4gIHJ4OiAncngnLFxuICByeTogJ3J5JyxcbiAgc2NhbGU6ICdzY2FsZScsXG4gIHNlY3VyaXR5OiAnc2VjdXJpdHknLFxuICBzZWVkOiAnc2VlZCcsXG4gIHNoYXBlcmVuZGVyaW5nOiAnc2hhcGVSZW5kZXJpbmcnLFxuICAnc2hhcGUtcmVuZGVyaW5nJzogJ3NoYXBlUmVuZGVyaW5nJyxcbiAgc2xvcGU6ICdzbG9wZScsXG4gIHNwYWNpbmc6ICdzcGFjaW5nJyxcbiAgc3BlY3VsYXJjb25zdGFudDogJ3NwZWN1bGFyQ29uc3RhbnQnLFxuICBzcGVjdWxhcmV4cG9uZW50OiAnc3BlY3VsYXJFeHBvbmVudCcsXG4gIHNwZWVkOiAnc3BlZWQnLFxuICBzcHJlYWRtZXRob2Q6ICdzcHJlYWRNZXRob2QnLFxuICBzdGFydG9mZnNldDogJ3N0YXJ0T2Zmc2V0JyxcbiAgc3RkZGV2aWF0aW9uOiAnc3RkRGV2aWF0aW9uJyxcbiAgc3RlbWg6ICdzdGVtaCcsXG4gIHN0ZW12OiAnc3RlbXYnLFxuICBzdGl0Y2h0aWxlczogJ3N0aXRjaFRpbGVzJyxcbiAgc3RvcGNvbG9yOiAnc3RvcENvbG9yJyxcbiAgJ3N0b3AtY29sb3InOiAnc3RvcENvbG9yJyxcbiAgc3RvcG9wYWNpdHk6ICdzdG9wT3BhY2l0eScsXG4gICdzdG9wLW9wYWNpdHknOiAnc3RvcE9wYWNpdHknLFxuICBzdHJpa2V0aHJvdWdocG9zaXRpb246ICdzdHJpa2V0aHJvdWdoUG9zaXRpb24nLFxuICAnc3RyaWtldGhyb3VnaC1wb3NpdGlvbic6ICdzdHJpa2V0aHJvdWdoUG9zaXRpb24nLFxuICBzdHJpa2V0aHJvdWdodGhpY2tuZXNzOiAnc3RyaWtldGhyb3VnaFRoaWNrbmVzcycsXG4gICdzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyc6ICdzdHJpa2V0aHJvdWdoVGhpY2tuZXNzJyxcbiAgc3RyaW5nOiAnc3RyaW5nJyxcbiAgc3Ryb2tlOiAnc3Ryb2tlJyxcbiAgc3Ryb2tlZGFzaGFycmF5OiAnc3Ryb2tlRGFzaGFycmF5JyxcbiAgJ3N0cm9rZS1kYXNoYXJyYXknOiAnc3Ryb2tlRGFzaGFycmF5JyxcbiAgc3Ryb2tlZGFzaG9mZnNldDogJ3N0cm9rZURhc2hvZmZzZXQnLFxuICAnc3Ryb2tlLWRhc2hvZmZzZXQnOiAnc3Ryb2tlRGFzaG9mZnNldCcsXG4gIHN0cm9rZWxpbmVjYXA6ICdzdHJva2VMaW5lY2FwJyxcbiAgJ3N0cm9rZS1saW5lY2FwJzogJ3N0cm9rZUxpbmVjYXAnLFxuICBzdHJva2VsaW5lam9pbjogJ3N0cm9rZUxpbmVqb2luJyxcbiAgJ3N0cm9rZS1saW5lam9pbic6ICdzdHJva2VMaW5lam9pbicsXG4gIHN0cm9rZW1pdGVybGltaXQ6ICdzdHJva2VNaXRlcmxpbWl0JyxcbiAgJ3N0cm9rZS1taXRlcmxpbWl0JzogJ3N0cm9rZU1pdGVybGltaXQnLFxuICBzdHJva2V3aWR0aDogJ3N0cm9rZVdpZHRoJyxcbiAgJ3N0cm9rZS13aWR0aCc6ICdzdHJva2VXaWR0aCcsXG4gIHN0cm9rZW9wYWNpdHk6ICdzdHJva2VPcGFjaXR5JyxcbiAgJ3N0cm9rZS1vcGFjaXR5JzogJ3N0cm9rZU9wYWNpdHknLFxuICBzdXBwcmVzc2NvbnRlbnRlZGl0YWJsZXdhcm5pbmc6ICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnLFxuICBzdXBwcmVzc2h5ZHJhdGlvbndhcm5pbmc6ICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnLFxuICBzdXJmYWNlc2NhbGU6ICdzdXJmYWNlU2NhbGUnLFxuICBzeXN0ZW1sYW5ndWFnZTogJ3N5c3RlbUxhbmd1YWdlJyxcbiAgdGFibGV2YWx1ZXM6ICd0YWJsZVZhbHVlcycsXG4gIHRhcmdldHg6ICd0YXJnZXRYJyxcbiAgdGFyZ2V0eTogJ3RhcmdldFknLFxuICB0ZXh0YW5jaG9yOiAndGV4dEFuY2hvcicsXG4gICd0ZXh0LWFuY2hvcic6ICd0ZXh0QW5jaG9yJyxcbiAgdGV4dGRlY29yYXRpb246ICd0ZXh0RGVjb3JhdGlvbicsXG4gICd0ZXh0LWRlY29yYXRpb24nOiAndGV4dERlY29yYXRpb24nLFxuICB0ZXh0bGVuZ3RoOiAndGV4dExlbmd0aCcsXG4gIHRleHRyZW5kZXJpbmc6ICd0ZXh0UmVuZGVyaW5nJyxcbiAgJ3RleHQtcmVuZGVyaW5nJzogJ3RleHRSZW5kZXJpbmcnLFxuICB0bzogJ3RvJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNmb3JtJyxcbiAgdHlwZW9mOiAndHlwZW9mJyxcbiAgdTE6ICd1MScsXG4gIHUyOiAndTInLFxuICB1bmRlcmxpbmVwb3NpdGlvbjogJ3VuZGVybGluZVBvc2l0aW9uJyxcbiAgJ3VuZGVybGluZS1wb3NpdGlvbic6ICd1bmRlcmxpbmVQb3NpdGlvbicsXG4gIHVuZGVybGluZXRoaWNrbmVzczogJ3VuZGVybGluZVRoaWNrbmVzcycsXG4gICd1bmRlcmxpbmUtdGhpY2tuZXNzJzogJ3VuZGVybGluZVRoaWNrbmVzcycsXG4gIHVuaWNvZGU6ICd1bmljb2RlJyxcbiAgdW5pY29kZWJpZGk6ICd1bmljb2RlQmlkaScsXG4gICd1bmljb2RlLWJpZGknOiAndW5pY29kZUJpZGknLFxuICB1bmljb2RlcmFuZ2U6ICd1bmljb2RlUmFuZ2UnLFxuICAndW5pY29kZS1yYW5nZSc6ICd1bmljb2RlUmFuZ2UnLFxuICB1bml0c3BlcmVtOiAndW5pdHNQZXJFbScsXG4gICd1bml0cy1wZXItZW0nOiAndW5pdHNQZXJFbScsXG4gIHVuc2VsZWN0YWJsZTogJ3Vuc2VsZWN0YWJsZScsXG4gIHZhbHBoYWJldGljOiAndkFscGhhYmV0aWMnLFxuICAndi1hbHBoYWJldGljJzogJ3ZBbHBoYWJldGljJyxcbiAgdmFsdWVzOiAndmFsdWVzJyxcbiAgdmVjdG9yZWZmZWN0OiAndmVjdG9yRWZmZWN0JyxcbiAgJ3ZlY3Rvci1lZmZlY3QnOiAndmVjdG9yRWZmZWN0JyxcbiAgdmVyc2lvbjogJ3ZlcnNpb24nLFxuICB2ZXJ0YWR2eTogJ3ZlcnRBZHZZJyxcbiAgJ3ZlcnQtYWR2LXknOiAndmVydEFkdlknLFxuICB2ZXJ0b3JpZ2lueDogJ3ZlcnRPcmlnaW5YJyxcbiAgJ3ZlcnQtb3JpZ2luLXgnOiAndmVydE9yaWdpblgnLFxuICB2ZXJ0b3JpZ2lueTogJ3ZlcnRPcmlnaW5ZJyxcbiAgJ3ZlcnQtb3JpZ2luLXknOiAndmVydE9yaWdpblknLFxuICB2aGFuZ2luZzogJ3ZIYW5naW5nJyxcbiAgJ3YtaGFuZ2luZyc6ICd2SGFuZ2luZycsXG4gIHZpZGVvZ3JhcGhpYzogJ3ZJZGVvZ3JhcGhpYycsXG4gICd2LWlkZW9ncmFwaGljJzogJ3ZJZGVvZ3JhcGhpYycsXG4gIHZpZXdib3g6ICd2aWV3Qm94JyxcbiAgdmlld3RhcmdldDogJ3ZpZXdUYXJnZXQnLFxuICB2aXNpYmlsaXR5OiAndmlzaWJpbGl0eScsXG4gIHZtYXRoZW1hdGljYWw6ICd2TWF0aGVtYXRpY2FsJyxcbiAgJ3YtbWF0aGVtYXRpY2FsJzogJ3ZNYXRoZW1hdGljYWwnLFxuICB2b2NhYjogJ3ZvY2FiJyxcbiAgd2lkdGhzOiAnd2lkdGhzJyxcbiAgd29yZHNwYWNpbmc6ICd3b3JkU3BhY2luZycsXG4gICd3b3JkLXNwYWNpbmcnOiAnd29yZFNwYWNpbmcnLFxuICB3cml0aW5nbW9kZTogJ3dyaXRpbmdNb2RlJyxcbiAgJ3dyaXRpbmctbW9kZSc6ICd3cml0aW5nTW9kZScsXG4gIHgxOiAneDEnLFxuICB4MjogJ3gyJyxcbiAgeDogJ3gnLFxuICB4Y2hhbm5lbHNlbGVjdG9yOiAneENoYW5uZWxTZWxlY3RvcicsXG4gIHhoZWlnaHQ6ICd4SGVpZ2h0JyxcbiAgJ3gtaGVpZ2h0JzogJ3hIZWlnaHQnLFxuICB4bGlua2FjdHVhdGU6ICd4bGlua0FjdHVhdGUnLFxuICAneGxpbms6YWN0dWF0ZSc6ICd4bGlua0FjdHVhdGUnLFxuICB4bGlua2FyY3JvbGU6ICd4bGlua0FyY3JvbGUnLFxuICAneGxpbms6YXJjcm9sZSc6ICd4bGlua0FyY3JvbGUnLFxuICB4bGlua2hyZWY6ICd4bGlua0hyZWYnLFxuICAneGxpbms6aHJlZic6ICd4bGlua0hyZWYnLFxuICB4bGlua3JvbGU6ICd4bGlua1JvbGUnLFxuICAneGxpbms6cm9sZSc6ICd4bGlua1JvbGUnLFxuICB4bGlua3Nob3c6ICd4bGlua1Nob3cnLFxuICAneGxpbms6c2hvdyc6ICd4bGlua1Nob3cnLFxuICB4bGlua3RpdGxlOiAneGxpbmtUaXRsZScsXG4gICd4bGluazp0aXRsZSc6ICd4bGlua1RpdGxlJyxcbiAgeGxpbmt0eXBlOiAneGxpbmtUeXBlJyxcbiAgJ3hsaW5rOnR5cGUnOiAneGxpbmtUeXBlJyxcbiAgeG1sYmFzZTogJ3htbEJhc2UnLFxuICAneG1sOmJhc2UnOiAneG1sQmFzZScsXG4gIHhtbGxhbmc6ICd4bWxMYW5nJyxcbiAgJ3htbDpsYW5nJzogJ3htbExhbmcnLFxuICB4bWxuczogJ3htbG5zJyxcbiAgJ3htbDpzcGFjZSc6ICd4bWxTcGFjZScsXG4gIHhtbG5zeGxpbms6ICd4bWxuc1hsaW5rJyxcbiAgJ3htbG5zOnhsaW5rJzogJ3htbG5zWGxpbmsnLFxuICB4bWxzcGFjZTogJ3htbFNwYWNlJyxcbiAgeTE6ICd5MScsXG4gIHkyOiAneTInLFxuICB5OiAneScsXG4gIHljaGFubmVsc2VsZWN0b3I6ICd5Q2hhbm5lbFNlbGVjdG9yJyxcbiAgejogJ3onLFxuICB6b29tYW5kcGFuOiAnem9vbUFuZFBhbidcbn07XG5cbnZhciBhcmlhUHJvcGVydGllcyA9IHtcbiAgJ2FyaWEtY3VycmVudCc6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWRldGFpbHMnOiAwLFxuICAnYXJpYS1kaXNhYmxlZCc6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWhpZGRlbic6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWludmFsaWQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1rZXlzaG9ydGN1dHMnOiAwLFxuICAnYXJpYS1sYWJlbCc6IDAsXG4gICdhcmlhLXJvbGVkZXNjcmlwdGlvbic6IDAsXG4gIC8vIFdpZGdldCBBdHRyaWJ1dGVzXG4gICdhcmlhLWF1dG9jb21wbGV0ZSc6IDAsXG4gICdhcmlhLWNoZWNrZWQnOiAwLFxuICAnYXJpYS1leHBhbmRlZCc6IDAsXG4gICdhcmlhLWhhc3BvcHVwJzogMCxcbiAgJ2FyaWEtbGV2ZWwnOiAwLFxuICAnYXJpYS1tb2RhbCc6IDAsXG4gICdhcmlhLW11bHRpbGluZSc6IDAsXG4gICdhcmlhLW11bHRpc2VsZWN0YWJsZSc6IDAsXG4gICdhcmlhLW9yaWVudGF0aW9uJzogMCxcbiAgJ2FyaWEtcGxhY2Vob2xkZXInOiAwLFxuICAnYXJpYS1wcmVzc2VkJzogMCxcbiAgJ2FyaWEtcmVhZG9ubHknOiAwLFxuICAnYXJpYS1yZXF1aXJlZCc6IDAsXG4gICdhcmlhLXNlbGVjdGVkJzogMCxcbiAgJ2FyaWEtc29ydCc6IDAsXG4gICdhcmlhLXZhbHVlbWF4JzogMCxcbiAgJ2FyaWEtdmFsdWVtaW4nOiAwLFxuICAnYXJpYS12YWx1ZW5vdyc6IDAsXG4gICdhcmlhLXZhbHVldGV4dCc6IDAsXG4gIC8vIExpdmUgUmVnaW9uIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtYXRvbWljJzogMCxcbiAgJ2FyaWEtYnVzeSc6IDAsXG4gICdhcmlhLWxpdmUnOiAwLFxuICAnYXJpYS1yZWxldmFudCc6IDAsXG4gIC8vIERyYWctYW5kLURyb3AgQXR0cmlidXRlc1xuICAnYXJpYS1kcm9wZWZmZWN0JzogMCxcbiAgJ2FyaWEtZ3JhYmJlZCc6IDAsXG4gIC8vIFJlbGF0aW9uc2hpcCBBdHRyaWJ1dGVzXG4gICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnOiAwLFxuICAnYXJpYS1jb2xjb3VudCc6IDAsXG4gICdhcmlhLWNvbGluZGV4JzogMCxcbiAgJ2FyaWEtY29sc3Bhbic6IDAsXG4gICdhcmlhLWNvbnRyb2xzJzogMCxcbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiAwLFxuICAnYXJpYS1lcnJvcm1lc3NhZ2UnOiAwLFxuICAnYXJpYS1mbG93dG8nOiAwLFxuICAnYXJpYS1sYWJlbGxlZGJ5JzogMCxcbiAgJ2FyaWEtb3ducyc6IDAsXG4gICdhcmlhLXBvc2luc2V0JzogMCxcbiAgJ2FyaWEtcm93Y291bnQnOiAwLFxuICAnYXJpYS1yb3dpbmRleCc6IDAsXG4gICdhcmlhLXJvd3NwYW4nOiAwLFxuICAnYXJpYS1zZXRzaXplJzogMFxufTtcblxudmFyIHdhcm5lZFByb3BlcnRpZXMgPSB7fTtcbnZhciByQVJJQSA9IG5ldyBSZWdFeHAoJ14oYXJpYSktWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIHJBUklBQ2FtZWwgPSBuZXcgUmVnRXhwKCdeKGFyaWEpW0EtWl1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgaGFzT3duUHJvcGVydHkkMSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHkodGFnTmFtZSwgbmFtZSkge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5JDEuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzLCBuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAockFSSUFDYW1lbC50ZXN0KG5hbWUpKSB7XG4gICAgICB2YXIgYXJpYU5hbWUgPSAnYXJpYS0nICsgbmFtZS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFyIGNvcnJlY3ROYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoYXJpYU5hbWUpID8gYXJpYU5hbWUgOiBudWxsOyAvLyBJZiB0aGlzIGlzIGFuIGFyaWEtKiBhdHRyaWJ1dGUsIGJ1dCBpcyBub3QgbGlzdGVkIGluIHRoZSBrbm93biBET01cbiAgICAgIC8vIERPTSBwcm9wZXJ0aWVzLCB0aGVuIGl0IGlzIGFuIGludmFsaWQgYXJpYS0qIGF0dHJpYnV0ZS5cblxuICAgICAgaWYgKGNvcnJlY3ROYW1lID09IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgQVJJQSBhdHRyaWJ1dGUgYCVzYC4gQVJJQSBhdHRyaWJ1dGVzIGZvbGxvdyB0aGUgcGF0dGVybiBhcmlhLSogYW5kIG11c3QgYmUgbG93ZXJjYXNlLicsIG5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gLy8gYXJpYS0qIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGxvd2VyY2FzZTsgc3VnZ2VzdCB0aGUgbG93ZXJjYXNlIHZlcnNpb24uXG5cblxuICAgICAgaWYgKG5hbWUgIT09IGNvcnJlY3ROYW1lKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIEFSSUEgYXR0cmlidXRlIGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIGNvcnJlY3ROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJBUklBLnRlc3QobmFtZSkpIHtcbiAgICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBhcmlhUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkgPyBsb3dlckNhc2VkTmFtZSA6IG51bGw7IC8vIElmIHRoaXMgaXMgYW4gYXJpYS0qIGF0dHJpYnV0ZSwgYnV0IGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGtub3duIERPTVxuICAgICAgLy8gRE9NIHByb3BlcnRpZXMsIHRoZW4gaXQgaXMgYW4gaW52YWxpZCBhcmlhLSogYXR0cmlidXRlLlxuXG4gICAgICBpZiAoc3RhbmRhcmROYW1lID09IG51bGwpIHtcbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gLy8gYXJpYS0qIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGxvd2VyY2FzZTsgc3VnZ2VzdCB0aGUgbG93ZXJjYXNlIHZlcnNpb24uXG5cblxuICAgICAgaWYgKG5hbWUgIT09IHN0YW5kYXJkTmFtZSkge1xuICAgICAgICBlcnJvcignVW5rbm93biBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBzdGFuZGFyZE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gd2FybkludmFsaWRBUklBUHJvcHModHlwZSwgcHJvcHMpIHtcbiAge1xuICAgIHZhciBpbnZhbGlkUHJvcHMgPSBbXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgdmFyIGlzVmFsaWQgPSB2YWxpZGF0ZVByb3BlcnR5KHR5cGUsIGtleSk7XG5cbiAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICBpbnZhbGlkUHJvcHMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB1bmtub3duUHJvcFN0cmluZyA9IGludmFsaWRQcm9wcy5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIHJldHVybiAnYCcgKyBwcm9wICsgJ2AnO1xuICAgIH0pLmpvaW4oJywgJyk7XG5cbiAgICBpZiAoaW52YWxpZFByb3BzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgYXJpYSBwcm9wICVzIG9uIDwlcz4gdGFnLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtYXJpYS1wcm9wcycsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9IGVsc2UgaWYgKGludmFsaWRQcm9wcy5sZW5ndGggPiAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCBhcmlhIHByb3BzICVzIG9uIDwlcz4gdGFnLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtYXJpYS1wcm9wcycsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3YXJuSW52YWxpZEFSSUFQcm9wcyh0eXBlLCBwcm9wcyk7XG59XG5cbnZhciBkaWRXYXJuVmFsdWVOdWxsID0gZmFsc2U7XG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXMkMSh0eXBlLCBwcm9wcykge1xuICB7XG4gICAgaWYgKHR5cGUgIT09ICdpbnB1dCcgJiYgdHlwZSAhPT0gJ3RleHRhcmVhJyAmJiB0eXBlICE9PSAnc2VsZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wcyAhPSBudWxsICYmIHByb3BzLnZhbHVlID09PSBudWxsICYmICFkaWRXYXJuVmFsdWVOdWxsKSB7XG4gICAgICBkaWRXYXJuVmFsdWVOdWxsID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGUgPT09ICdzZWxlY3QnICYmIHByb3BzLm11bHRpcGxlKSB7XG4gICAgICAgIGVycm9yKCdgdmFsdWVgIHByb3Agb24gYCVzYCBzaG91bGQgbm90IGJlIG51bGwuICcgKyAnQ29uc2lkZXIgdXNpbmcgYW4gZW1wdHkgYXJyYXkgd2hlbiBgbXVsdGlwbGVgIGlzIHNldCB0byBgdHJ1ZWAgJyArICd0byBjbGVhciB0aGUgY29tcG9uZW50IG9yIGB1bmRlZmluZWRgIGZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy4nLCB0eXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCdgdmFsdWVgIHByb3Agb24gYCVzYCBzaG91bGQgbm90IGJlIG51bGwuICcgKyAnQ29uc2lkZXIgdXNpbmcgYW4gZW1wdHkgc3RyaW5nIHRvIGNsZWFyIHRoZSBjb21wb25lbnQgb3IgYHVuZGVmaW5lZGAgJyArICdmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB2YWxpZGF0ZVByb3BlcnR5JDEgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB2YXIgd2FybmVkUHJvcGVydGllcyQxID0ge307XG4gIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuICB2YXIgRVZFTlRfTkFNRV9SRUdFWCA9IC9eb24uLztcbiAgdmFyIElOVkFMSURfRVZFTlRfTkFNRV9SRUdFWCA9IC9eb25bXkEtWl0vO1xuICB2YXIgckFSSUEkMSA9IG5ldyBSZWdFeHAoJ14oYXJpYSktWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xuICB2YXIgckFSSUFDYW1lbCQxID0gbmV3IFJlZ0V4cCgnXihhcmlhKVtBLVpdWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xuXG4gIHZhbGlkYXRlUHJvcGVydHkkMSA9IGZ1bmN0aW9uICh0YWdOYW1lLCBuYW1lLCB2YWx1ZSwgZXZlbnRSZWdpc3RyeSkge1xuICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzJDEsIG5hbWUpICYmIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnb25mb2N1c2luJyB8fCBsb3dlckNhc2VkTmFtZSA9PT0gJ29uZm9jdXNvdXQnKSB7XG4gICAgICBlcnJvcignUmVhY3QgdXNlcyBvbkZvY3VzIGFuZCBvbkJsdXIgaW5zdGVhZCBvZiBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQuICcgKyAnQWxsIFJlYWN0IGV2ZW50cyBhcmUgbm9ybWFsaXplZCB0byBidWJibGUsIHNvIG9uRm9jdXNJbiBhbmQgb25Gb2N1c091dCAnICsgJ2FyZSBub3QgbmVlZGVkL3N1cHBvcnRlZCBieSBSZWFjdC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gV2UgY2FuJ3QgcmVseSBvbiB0aGUgZXZlbnQgc3lzdGVtIGJlaW5nIGluamVjdGVkIG9uIHRoZSBzZXJ2ZXIuXG5cblxuICAgIGlmIChldmVudFJlZ2lzdHJ5ICE9IG51bGwpIHtcbiAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzID0gZXZlbnRSZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLFxuICAgICAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSBldmVudFJlZ2lzdHJ5LnBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM7XG5cbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1tsb3dlckNhc2VkTmFtZV0gOiBudWxsO1xuXG4gICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgZXJyb3IoJ1Vua25vd24gZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiBJdCB3aWxsIGJlIGlnbm9yZWQuJywgbmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgIC8vIElmIG5vIGV2ZW50IHBsdWdpbnMgaGF2ZSBiZWVuIGluamVjdGVkLCB3ZSBhcmUgaW4gYSBzZXJ2ZXIgZW52aXJvbm1lbnQuXG4gICAgICAvLyBTbyB3ZSBjYW4ndCB0ZWxsIGlmIHRoZSBldmVudCBuYW1lIGlzIGNvcnJlY3QgZm9yIHN1cmUsIGJ1dCB3ZSBjYW4gZmlsdGVyXG4gICAgICAvLyBvdXQga25vd24gYmFkIG9uZXMgbGlrZSBgb25jbGlja2AuIFdlIGNhbid0IHN1Z2dlc3QgYSBzcGVjaWZpYyByZXBsYWNlbWVudCB0aG91Z2guXG4gICAgICBpZiAoSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiAnICsgJ1JlYWN0IGV2ZW50cyB1c2UgdGhlIGNhbWVsQ2FzZSBuYW1pbmcgY29udmVudGlvbiwgZm9yIGV4YW1wbGUgYG9uQ2xpY2tgLicsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBMZXQgdGhlIEFSSUEgYXR0cmlidXRlIGhvb2sgdmFsaWRhdGUgQVJJQSBhdHRyaWJ1dGVzXG5cblxuICAgIGlmIChyQVJJQSQxLnRlc3QobmFtZSkgfHwgckFSSUFDYW1lbCQxLnRlc3QobmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2lubmVyaHRtbCcpIHtcbiAgICAgIGVycm9yKCdEaXJlY3RseSBzZXR0aW5nIHByb3BlcnR5IGBpbm5lckhUTUxgIGlzIG5vdCBwZXJtaXR0ZWQuICcgKyAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIGxvb2t1cCBkb2N1bWVudGF0aW9uIG9uIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdhcmlhJykge1xuICAgICAgZXJyb3IoJ1RoZSBgYXJpYWAgYXR0cmlidXRlIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGluIFJlYWN0LiAnICsgJ1Bhc3MgaW5kaXZpZHVhbCBgYXJpYS1gIGF0dHJpYnV0ZXMgaW5zdGVhZC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2lzJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhIGAlc2AgZm9yIGEgc3RyaW5nIGF0dHJpYnV0ZSBgaXNgLiBJZiB0aGlzIGlzIGV4cGVjdGVkLCBjYXN0ICcgKyAndGhlIHZhbHVlIHRvIGEgc3RyaW5nLicsIHR5cGVvZiB2YWx1ZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWx1ZSkpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBOYU4gZm9yIHRoZSBgJXNgIGF0dHJpYnV0ZS4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCAnICsgJ3RoZSB2YWx1ZSB0byBhIHN0cmluZy4nLCBuYW1lKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8obmFtZSk7XG4gICAgdmFyIGlzUmVzZXJ2ZWQgPSBwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEOyAvLyBLbm93biBhdHRyaWJ1dGVzIHNob3VsZCBtYXRjaCB0aGUgY2FzaW5nIHNwZWNpZmllZCBpbiB0aGUgcHJvcGVydHkgY29uZmlnLlxuXG4gICAgaWYgKHBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdO1xuXG4gICAgICBpZiAoc3RhbmRhcmROYW1lICE9PSBuYW1lKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIERPTSBwcm9wZXJ0eSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBzdGFuZGFyZE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQgJiYgbmFtZSAhPT0gbG93ZXJDYXNlZE5hbWUpIHtcbiAgICAgIC8vIFVua25vd24gYXR0cmlidXRlcyBzaG91bGQgaGF2ZSBsb3dlcmNhc2UgY2FzaW5nIHNpbmNlIHRoYXQncyBob3cgdGhleVxuICAgICAgLy8gd2lsbCBiZSBjYXNlZCBhbnl3YXkgd2l0aCBzZXJ2ZXIgcmVuZGVyaW5nLlxuICAgICAgZXJyb3IoJ1JlYWN0IGRvZXMgbm90IHJlY29nbml6ZSB0aGUgYCVzYCBwcm9wIG9uIGEgRE9NIGVsZW1lbnQuIElmIHlvdSAnICsgJ2ludGVudGlvbmFsbHkgd2FudCBpdCB0byBhcHBlYXIgaW4gdGhlIERPTSBhcyBhIGN1c3RvbSAnICsgJ2F0dHJpYnV0ZSwgc3BlbGwgaXQgYXMgbG93ZXJjYXNlIGAlc2AgaW5zdGVhZC4gJyArICdJZiB5b3UgYWNjaWRlbnRhbGx5IHBhc3NlZCBpdCBmcm9tIGEgcGFyZW50IGNvbXBvbmVudCwgcmVtb3ZlICcgKyAnaXQgZnJvbSB0aGUgRE9NIGVsZW1lbnQuJywgbmFtZSwgbG93ZXJDYXNlZE5hbWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nICYmIHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVycm9yKCdSZWNlaXZlZCBgJXNgIGZvciBhIG5vbi1ib29sZWFuIGF0dHJpYnV0ZSBgJXNgLlxcblxcbicgKyAnSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAnICsgJyVzPVwiJXNcIiBvciAlcz17dmFsdWUudG9TdHJpbmcoKX0uJywgdmFsdWUsIG5hbWUsIG5hbWUsIHZhbHVlLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCdSZWNlaXZlZCBgJXNgIGZvciBhIG5vbi1ib29sZWFuIGF0dHJpYnV0ZSBgJXNgLlxcblxcbicgKyAnSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAnICsgJyVzPVwiJXNcIiBvciAlcz17dmFsdWUudG9TdHJpbmcoKX0uXFxuXFxuJyArICdJZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgJyArICdwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLCB2YWx1ZSwgbmFtZSwgbmFtZSwgdmFsdWUsIG5hbWUsIG5hbWUsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBOb3cgdGhhdCB3ZSd2ZSB2YWxpZGF0ZWQgY2FzaW5nLCBkbyBub3QgdmFsaWRhdGVcbiAgICAvLyBkYXRhIHR5cGVzIGZvciByZXNlcnZlZCBwcm9wc1xuXG5cbiAgICBpZiAoaXNSZXNlcnZlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBXYXJuIHdoZW4gYSBrbm93biBhdHRyaWJ1dGUgaXMgYSBiYWQgdHlwZVxuXG5cbiAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gV2FybiB3aGVuIHBhc3NpbmcgdGhlIHN0cmluZ3MgJ2ZhbHNlJyBvciAndHJ1ZScgaW50byBhIGJvb2xlYW4gcHJvcFxuXG5cbiAgICBpZiAoKHZhbHVlID09PSAnZmFsc2UnIHx8IHZhbHVlID09PSAndHJ1ZScpICYmIHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gQk9PTEVBTikge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIHRoZSBzdHJpbmcgYCVzYCBmb3IgdGhlIGJvb2xlYW4gYXR0cmlidXRlIGAlc2AuICcgKyAnJXMgJyArICdEaWQgeW91IG1lYW4gJXM9eyVzfT8nLCB2YWx1ZSwgbmFtZSwgdmFsdWUgPT09ICdmYWxzZScgPyAnVGhlIGJyb3dzZXIgd2lsbCBpbnRlcnByZXQgaXQgYXMgYSB0cnV0aHkgdmFsdWUuJyA6ICdBbHRob3VnaCB0aGlzIHdvcmtzLCBpdCB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGlmIHlvdSBwYXNzIHRoZSBzdHJpbmcgXCJmYWxzZVwiLicsIG5hbWUsIHZhbHVlKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuXG52YXIgd2FyblVua25vd25Qcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KSB7XG4gIHtcbiAgICB2YXIgdW5rbm93blByb3BzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gdmFsaWRhdGVQcm9wZXJ0eSQxKHR5cGUsIGtleSwgcHJvcHNba2V5XSwgZXZlbnRSZWdpc3RyeSk7XG5cbiAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICB1bmtub3duUHJvcHMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB1bmtub3duUHJvcFN0cmluZyA9IHVua25vd25Qcm9wcy5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIHJldHVybiAnYCcgKyBwcm9wICsgJ2AnO1xuICAgIH0pLmpvaW4oJywgJyk7XG5cbiAgICBpZiAodW5rbm93blByb3BzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgdmFsdWUgZm9yIHByb3AgJXMgb24gPCVzPiB0YWcuIEVpdGhlciByZW1vdmUgaXQgZnJvbSB0aGUgZWxlbWVudCwgJyArICdvciBwYXNzIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZSB0byBrZWVwIGl0IGluIHRoZSBET00uICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvYXR0cmlidXRlLWJlaGF2aW9yICcsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9IGVsc2UgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPiAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCB2YWx1ZXMgZm9yIHByb3BzICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgZWxlbWVudCwgJyArICdvciBwYXNzIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZSB0byBrZWVwIHRoZW0gaW4gdGhlIERPTS4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9hdHRyaWJ1dGUtYmVoYXZpb3IgJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzJDIodHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpIHtcbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHdhcm5Vbmtub3duUHJvcGVydGllcyh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSk7XG59XG5cbnZhciBJU19FVkVOVF9IQU5ETEVfTk9OX01BTkFHRURfTk9ERSA9IDE7XG52YXIgSVNfTk9OX0RFTEVHQVRFRCA9IDEgPDwgMTtcbnZhciBJU19DQVBUVVJFX1BIQVNFID0gMSA8PCAyO1xudmFyIElTX1JFUExBWUVEID0gMSA8PCA0O1xuLy8gc2V0IHRvIExFR0FDWV9GQl9TVVBQT1JULiBMRUdBQ1lfRkJfU1VQUE9SVCBvbmx5IGdldHMgc2V0IHdoZW5cbi8vIHdlIGNhbGwgd2lsbERlZmVyTGF0ZXJGb3JMZWdhY3lGQlN1cHBvcnQsIHRodXMgbm90IGJhaWxpbmcgb3V0XG4vLyB3aWxsIHJlc3VsdCBpbiBlbmRsZXNzIGN5Y2xlcyBsaWtlIGFuIGluZmluaXRlIGxvb3AuXG4vLyBXZSBhbHNvIGRvbid0IHdhbnQgdG8gZGVmZXIgZHVyaW5nIGV2ZW50IHJlcGxheWluZy5cblxudmFyIFNIT1VMRF9OT1RfUFJPQ0VTU19QT0xZRklMTF9FVkVOVF9QTFVHSU5TID0gSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUgfCBJU19OT05fREVMRUdBVEVEIHwgSVNfQ0FQVFVSRV9QSEFTRTtcblxuLyoqXG4gKiBHZXRzIHRoZSB0YXJnZXQgbm9kZSBmcm9tIGEgbmF0aXZlIGJyb3dzZXIgZXZlbnQgYnkgYWNjb3VudGluZyBmb3JcbiAqIGluY29uc2lzdGVuY2llcyBpbiBicm93c2VyIERPTSBBUElzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge0RPTUV2ZW50VGFyZ2V0fSBUYXJnZXQgbm9kZS5cbiAqL1xuXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkge1xuICAvLyBGYWxsYmFjayB0byBuYXRpdmVFdmVudC5zcmNFbGVtZW50IGZvciBJRTlcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjUwNlxuICB2YXIgdGFyZ2V0ID0gbmF0aXZlRXZlbnQudGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgfHwgd2luZG93OyAvLyBOb3JtYWxpemUgU1ZHIDx1c2U+IGVsZW1lbnQgZXZlbnRzICM0OTYzXG5cbiAgaWYgKHRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCkge1xuICAgIHRhcmdldCA9IHRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudDtcbiAgfSAvLyBTYWZhcmkgbWF5IGZpcmUgZXZlbnRzIG9uIHRleHQgbm9kZXMgKE5vZGUuVEVYVF9OT0RFIGlzIDMpLlxuICAvLyBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxuXG5cbiAgcmV0dXJuIHRhcmdldC5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFID8gdGFyZ2V0LnBhcmVudE5vZGUgOiB0YXJnZXQ7XG59XG5cbnZhciByZXN0b3JlSW1wbCA9IG51bGw7XG52YXIgcmVzdG9yZVRhcmdldCA9IG51bGw7XG52YXIgcmVzdG9yZVF1ZXVlID0gbnVsbDtcblxuZnVuY3Rpb24gcmVzdG9yZVN0YXRlT2ZUYXJnZXQodGFyZ2V0KSB7XG4gIC8vIFdlIHBlcmZvcm0gdGhpcyB0cmFuc2xhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBldmVudCBsb29wIHNvIHRoYXQgd2VcbiAgLy8gYWx3YXlzIHJlY2VpdmUgdGhlIGNvcnJlY3QgZmliZXIgaGVyZVxuICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0KTtcblxuICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICAvLyBVbm1vdW50ZWRcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoISh0eXBlb2YgcmVzdG9yZUltcGwgPT09ICdmdW5jdGlvbicpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwic2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKCkgbmVlZHMgdG8gYmUgY2FsbGVkIHRvIGhhbmRsZSBhIHRhcmdldCBmb3IgY29udHJvbGxlZCBldmVudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3RhdGVOb2RlID0gaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGU7IC8vIEd1YXJkIGFnYWluc3QgRmliZXIgYmVpbmcgdW5tb3VudGVkLlxuXG4gIGlmIChzdGF0ZU5vZGUpIHtcbiAgICB2YXIgX3Byb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShzdGF0ZU5vZGUpO1xuXG4gICAgcmVzdG9yZUltcGwoaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGUsIGludGVybmFsSW5zdGFuY2UudHlwZSwgX3Byb3BzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRSZXN0b3JlSW1wbGVtZW50YXRpb24oaW1wbCkge1xuICByZXN0b3JlSW1wbCA9IGltcGw7XG59XG5mdW5jdGlvbiBlbnF1ZXVlU3RhdGVSZXN0b3JlKHRhcmdldCkge1xuICBpZiAocmVzdG9yZVRhcmdldCkge1xuICAgIGlmIChyZXN0b3JlUXVldWUpIHtcbiAgICAgIHJlc3RvcmVRdWV1ZS5wdXNoKHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3RvcmVRdWV1ZSA9IFt0YXJnZXRdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXN0b3JlVGFyZ2V0ID0gdGFyZ2V0O1xuICB9XG59XG5mdW5jdGlvbiBuZWVkc1N0YXRlUmVzdG9yZSgpIHtcbiAgcmV0dXJuIHJlc3RvcmVUYXJnZXQgIT09IG51bGwgfHwgcmVzdG9yZVF1ZXVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gcmVzdG9yZVN0YXRlSWZOZWVkZWQoKSB7XG4gIGlmICghcmVzdG9yZVRhcmdldCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSByZXN0b3JlVGFyZ2V0O1xuICB2YXIgcXVldWVkVGFyZ2V0cyA9IHJlc3RvcmVRdWV1ZTtcbiAgcmVzdG9yZVRhcmdldCA9IG51bGw7XG4gIHJlc3RvcmVRdWV1ZSA9IG51bGw7XG4gIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCk7XG5cbiAgaWYgKHF1ZXVlZFRhcmdldHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlZFRhcmdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHF1ZXVlZFRhcmdldHNbaV0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyB0aGUgcmVuZGVyZXIuIFN1Y2ggYXMgd2hlbiB3ZSdyZSBkaXNwYXRjaGluZyBldmVudHMgb3IgaWYgdGhpcmQgcGFydHlcbi8vIGxpYnJhcmllcyBuZWVkIHRvIGNhbGwgYmF0Y2hlZFVwZGF0ZXMuIEV2ZW50dWFsbHksIHRoaXMgQVBJIHdpbGwgZ28gYXdheSB3aGVuXG4vLyBldmVyeXRoaW5nIGlzIGJhdGNoZWQgYnkgZGVmYXVsdC4gV2UnbGwgdGhlbiBoYXZlIGEgc2ltaWxhciBBUEkgdG8gb3B0LW91dCBvZlxuLy8gc2NoZWR1bGVkIHdvcmsgYW5kIGluc3RlYWQgZG8gc3luY2hyb25vdXMgd29yay5cbi8vIERlZmF1bHRzXG5cbnZhciBiYXRjaGVkVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoZm4sIGJvb2trZWVwaW5nKSB7XG4gIHJldHVybiBmbihib29ra2VlcGluZyk7XG59O1xuXG52YXIgZGlzY3JldGVVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uIChmbiwgYSwgYiwgYywgZCkge1xuICByZXR1cm4gZm4oYSwgYiwgYywgZCk7XG59O1xuXG52YXIgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKCkge307XG5cbnZhciBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCA9IGJhdGNoZWRVcGRhdGVzSW1wbDtcbnZhciBpc0luc2lkZUV2ZW50SGFuZGxlciA9IGZhbHNlO1xudmFyIGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmluaXNoRXZlbnRIYW5kbGVyKCkge1xuICAvLyBIZXJlIHdlIHdhaXQgdW50aWwgYWxsIHVwZGF0ZXMgaGF2ZSBwcm9wYWdhdGVkLCB3aGljaCBpcyBpbXBvcnRhbnRcbiAgLy8gd2hlbiB1c2luZyBjb250cm9sbGVkIGNvbXBvbmVudHMgd2l0aGluIGxheWVyczpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjk4XG4gIC8vIFRoZW4gd2UgcmVzdG9yZSBzdGF0ZSBvZiBhbnkgY29udHJvbGxlZCBjb21wb25lbnQuXG4gIHZhciBjb250cm9sbGVkQ29tcG9uZW50c0hhdmVQZW5kaW5nVXBkYXRlcyA9IG5lZWRzU3RhdGVSZXN0b3JlKCk7XG5cbiAgaWYgKGNvbnRyb2xsZWRDb21wb25lbnRzSGF2ZVBlbmRpbmdVcGRhdGVzKSB7XG4gICAgLy8gSWYgYSBjb250cm9sbGVkIGV2ZW50IHdhcyBmaXJlZCwgd2UgbWF5IG5lZWQgdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2ZcbiAgICAvLyB0aGUgRE9NIG5vZGUgYmFjayB0byB0aGUgY29udHJvbGxlZCB2YWx1ZS4gVGhpcyBpcyBuZWNlc3Nhcnkgd2hlbiBSZWFjdFxuICAgIC8vIGJhaWxzIG91dCBvZiB0aGUgdXBkYXRlIHdpdGhvdXQgdG91Y2hpbmcgdGhlIERPTS5cbiAgICBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwoKTtcbiAgICByZXN0b3JlU3RhdGVJZk5lZWRlZCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzKGZuLCBib29ra2VlcGluZykge1xuICBpZiAoaXNJbnNpZGVFdmVudEhhbmRsZXIpIHtcbiAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGluc2lkZSBhbm90aGVyIGJhdGNoLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXRcbiAgICAvLyBmdWxseSBjb21wbGV0ZXMgYmVmb3JlIHJlc3RvcmluZyBzdGF0ZS5cbiAgICByZXR1cm4gZm4oYm9va2tlZXBpbmcpO1xuICB9XG5cbiAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGJhdGNoZWRVcGRhdGVzSW1wbChmbiwgYm9va2tlZXBpbmcpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gZmFsc2U7XG4gICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGJhdGNoZWRFdmVudFVwZGF0ZXMoZm4sIGEsIGIpIHtcbiAgaWYgKGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMpIHtcbiAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGluc2lkZSBhbm90aGVyIGJhdGNoLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXRcbiAgICAvLyBmdWxseSBjb21wbGV0ZXMgYmVmb3JlIHJlc3RvcmluZyBzdGF0ZS5cbiAgICByZXR1cm4gZm4oYSwgYik7XG4gIH1cblxuICBpc0JhdGNoaW5nRXZlbnRVcGRhdGVzID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbChmbiwgYSwgYik7XG4gIH0gZmluYWxseSB7XG4gICAgaXNCYXRjaGluZ0V2ZW50VXBkYXRlcyA9IGZhbHNlO1xuICAgIGZpbmlzaEV2ZW50SGFuZGxlcigpO1xuICB9XG59XG5mdW5jdGlvbiBkaXNjcmV0ZVVwZGF0ZXMoZm4sIGEsIGIsIGMsIGQpIHtcbiAgdmFyIHByZXZJc0luc2lkZUV2ZW50SGFuZGxlciA9IGlzSW5zaWRlRXZlbnRIYW5kbGVyO1xuICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZGlzY3JldGVVcGRhdGVzSW1wbChmbiwgYSwgYiwgYywgZCk7XG4gIH0gZmluYWxseSB7XG4gICAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBwcmV2SXNJbnNpZGVFdmVudEhhbmRsZXI7XG5cbiAgICBpZiAoIWlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgICBmaW5pc2hFdmVudEhhbmRsZXIoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGZsdXNoRGlzY3JldGVVcGRhdGVzSWZOZWVkZWQodGltZVN0YW1wKSB7XG4gIHtcbiAgICBpZiAoIWlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgICBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHNldEJhdGNoaW5nSW1wbGVtZW50YXRpb24oX2JhdGNoZWRVcGRhdGVzSW1wbCwgX2Rpc2NyZXRlVXBkYXRlc0ltcGwsIF9mbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwsIF9iYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCkge1xuICBiYXRjaGVkVXBkYXRlc0ltcGwgPSBfYmF0Y2hlZFVwZGF0ZXNJbXBsO1xuICBkaXNjcmV0ZVVwZGF0ZXNJbXBsID0gX2Rpc2NyZXRlVXBkYXRlc0ltcGw7XG4gIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCA9IF9mbHVzaERpc2NyZXRlVXBkYXRlc0ltcGw7XG4gIGJhdGNoZWRFdmVudFVwZGF0ZXNJbXBsID0gX2JhdGNoZWRFdmVudFVwZGF0ZXNJbXBsO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyYWN0aXZlKHRhZykge1xuICByZXR1cm4gdGFnID09PSAnYnV0dG9uJyB8fCB0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAnc2VsZWN0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYSc7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KG5hbWUsIHR5cGUsIHByb3BzKSB7XG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgJ29uQ2xpY2snOlxuICAgIGNhc2UgJ29uQ2xpY2tDYXB0dXJlJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZURvd24nOlxuICAgIGNhc2UgJ29uTW91c2VEb3duQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZU1vdmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZVVwJzpcbiAgICBjYXNlICdvbk1vdXNlVXBDYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlRW50ZXInOlxuICAgICAgcmV0dXJuICEhKHByb3BzLmRpc2FibGVkICYmIGlzSW50ZXJhY3RpdmUodHlwZSkpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gaW5zdCBUaGUgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZSBzb3VyY2Ugb2YgZXZlbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5hbWUgTmFtZSBvZiBsaXN0ZW5lciAoZS5nLiBgb25DbGlja2ApLlxuICogQHJldHVybiB7P2Z1bmN0aW9ufSBUaGUgc3RvcmVkIGNhbGxiYWNrLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICB2YXIgc3RhdGVOb2RlID0gaW5zdC5zdGF0ZU5vZGU7XG5cbiAgaWYgKHN0YXRlTm9kZSA9PT0gbnVsbCkge1xuICAgIC8vIFdvcmsgaW4gcHJvZ3Jlc3MgKGV4OiBvbmxvYWQgZXZlbnRzIGluIGluY3JlbWVudGFsIG1vZGUpLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShzdGF0ZU5vZGUpO1xuXG4gIGlmIChwcm9wcyA9PT0gbnVsbCkge1xuICAgIC8vIFdvcmsgaW4gcHJvZ3Jlc3MuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBwcm9wc1tyZWdpc3RyYXRpb25OYW1lXTtcblxuICBpZiAoc2hvdWxkUHJldmVudE1vdXNlRXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgaW5zdC50eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICghKCFsaXN0ZW5lciB8fCB0eXBlb2YgbGlzdGVuZXIgPT09ICdmdW5jdGlvbicpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgYFwiICsgcmVnaXN0cmF0aW9uTmFtZSArIFwiYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBhIHZhbHVlIG9mIGBcIiArIHR5cGVvZiBsaXN0ZW5lciArIFwiYCB0eXBlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG52YXIgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSBmYWxzZTsgLy8gQ2hlY2sgaWYgYnJvd3NlciBzdXBwb3J0IGV2ZW50cyB3aXRoIHBhc3NpdmUgbGlzdGVuZXJzXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnRUYXJnZXQvYWRkRXZlbnRMaXN0ZW5lciNTYWZlbHlfZGV0ZWN0aW5nX29wdGlvbl9zdXBwb3J0XG5cbmlmIChjYW5Vc2VET00pIHtcbiAgdHJ5IHtcbiAgICB2YXIgb3B0aW9ucyA9IHt9OyAvLyAkRmxvd0ZpeE1lOiBJZ25vcmUgRmxvdyBjb21wbGFpbmluZyBhYm91dCBuZWVkaW5nIGEgdmFsdWVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRpb25zLCAncGFzc2l2ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tQcm9kKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFyIGZ1bmNBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTtcblxuICB0cnkge1xuICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gIH1cbn1cblxudmFyIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwgPSBpbnZva2VHdWFyZGVkQ2FsbGJhY2tQcm9kO1xuXG57XG4gIC8vIEluIERFViBtb2RlLCB3ZSBzd2FwIG91dCBpbnZva2VHdWFyZGVkQ2FsbGJhY2sgZm9yIGEgc3BlY2lhbCB2ZXJzaW9uXG4gIC8vIHRoYXQgcGxheXMgbW9yZSBuaWNlbHkgd2l0aCB0aGUgYnJvd3NlcidzIERldlRvb2xzLiBUaGUgaWRlYSBpcyB0byBwcmVzZXJ2ZVxuICAvLyBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvci4gQmVjYXVzZSBSZWFjdCB3cmFwcyBhbGwgdXNlci1wcm92aWRlZFxuICAvLyBmdW5jdGlvbnMgaW4gaW52b2tlR3VhcmRlZENhbGxiYWNrLCBhbmQgdGhlIHByb2R1Y3Rpb24gdmVyc2lvbiBvZlxuICAvLyBpbnZva2VHdWFyZGVkQ2FsbGJhY2sgdXNlcyBhIHRyeS1jYXRjaCwgYWxsIHVzZXIgZXhjZXB0aW9ucyBhcmUgdHJlYXRlZFxuICAvLyBsaWtlIGNhdWdodCBleGNlcHRpb25zLCBhbmQgdGhlIERldlRvb2xzIHdvbid0IHBhdXNlIHVubGVzcyB0aGUgZGV2ZWxvcGVyXG4gIC8vIHRha2VzIHRoZSBleHRyYSBzdGVwIG9mIGVuYWJsaW5nIHBhdXNlIG9uIGNhdWdodCBleGNlcHRpb25zLiBUaGlzIGlzXG4gIC8vIHVuaW50dWl0aXZlLCB0aG91Z2gsIGJlY2F1c2UgZXZlbiB0aG91Z2ggUmVhY3QgaGFzIGNhdWdodCB0aGUgZXJyb3IsIGZyb21cbiAgLy8gdGhlIGRldmVsb3BlcidzIHBlcnNwZWN0aXZlLCB0aGUgZXJyb3IgaXMgdW5jYXVnaHQuXG4gIC8vXG4gIC8vIFRvIHByZXNlcnZlIHRoZSBleHBlY3RlZCBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvciwgd2UgZG9uJ3QgdXNlIGFcbiAgLy8gdHJ5LWNhdGNoIGluIERFVi4gSW5zdGVhZCwgd2Ugc3luY2hyb25vdXNseSBkaXNwYXRjaCBhIGZha2UgZXZlbnQgdG8gYSBmYWtlXG4gIC8vIERPTSBub2RlLCBhbmQgY2FsbCB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayBmcm9tIGluc2lkZSBhbiBldmVudCBoYW5kbGVyXG4gIC8vIGZvciB0aGF0IGZha2UgZXZlbnQuIElmIHRoZSBjYWxsYmFjayB0aHJvd3MsIHRoZSBlcnJvciBpcyBcImNhcHR1cmVkXCIgdXNpbmdcbiAgLy8gYSBnbG9iYWwgZXZlbnQgaGFuZGxlci4gQnV0IGJlY2F1c2UgdGhlIGVycm9yIGhhcHBlbnMgaW4gYSBkaWZmZXJlbnRcbiAgLy8gZXZlbnQgbG9vcCBjb250ZXh0LCBpdCBkb2VzIG5vdCBpbnRlcnJ1cHQgdGhlIG5vcm1hbCBwcm9ncmFtIGZsb3cuXG4gIC8vIEVmZmVjdGl2ZWx5LCB0aGlzIGdpdmVzIHVzIHRyeS1jYXRjaCBiZWhhdmlvciB3aXRob3V0IGFjdHVhbGx5IHVzaW5nXG4gIC8vIHRyeS1jYXRjaC4gTmVhdCFcbiAgLy8gQ2hlY2sgdGhhdCB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGUgQVBJcyB3ZSBuZWVkIHRvIGltcGxlbWVudCBvdXIgc3BlY2lhbFxuICAvLyBERVYgdmVyc2lvbiBvZiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZGlzcGF0Y2hFdmVudCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBmYWtlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3JlYWN0Jyk7XG5cbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsID0gZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrRGV2KG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIC8vIElmIGRvY3VtZW50IGRvZXNuJ3QgZXhpc3Qgd2Uga25vdyBmb3Igc3VyZSB3ZSB3aWxsIGNyYXNoIGluIHRoaXMgbWV0aG9kXG4gICAgICAvLyB3aGVuIHdlIGNhbGwgZG9jdW1lbnQuY3JlYXRlRXZlbnQoKS4gSG93ZXZlciB0aGlzIGNhbiBjYXVzZSBjb25mdXNpbmdcbiAgICAgIC8vIGVycm9yczogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29raW5jdWJhdG9yL2NyZWF0ZS1yZWFjdC1hcHAvaXNzdWVzLzM0ODJcbiAgICAgIC8vIFNvIHdlIHByZWVtcHRpdmVseSB0aHJvdyB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UgaW5zdGVhZC5cbiAgICAgIGlmICghKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGUgYGRvY3VtZW50YCBnbG9iYWwgd2FzIGRlZmluZWQgd2hlbiBSZWFjdCB3YXMgaW5pdGlhbGl6ZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhbnltb3JlLiBUaGlzIGNhbiBoYXBwZW4gaW4gYSB0ZXN0IGVudmlyb25tZW50IGlmIGEgY29tcG9uZW50IHNjaGVkdWxlcyBhbiB1cGRhdGUgZnJvbSBhbiBhc3luY2hyb25vdXMgY2FsbGJhY2ssIGJ1dCB0aGUgdGVzdCBoYXMgYWxyZWFkeSBmaW5pc2hlZCBydW5uaW5nLiBUbyBzb2x2ZSB0aGlzLCB5b3UgY2FuIGVpdGhlciB1bm1vdW50IHRoZSBjb21wb25lbnQgYXQgdGhlIGVuZCBvZiB5b3VyIHRlc3QgKGFuZCBlbnN1cmUgdGhhdCBhbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgZ2V0IGNhbmNlbGVkIGluIGBjb21wb25lbnRXaWxsVW5tb3VudGApLCBvciB5b3UgY2FuIGNoYW5nZSB0aGUgdGVzdCBpdHNlbGYgdG8gYmUgYXN5bmNocm9ub3VzLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgICAgdmFyIGRpZENhbGwgPSBmYWxzZTsgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayB0aHJldyBhbiBlcnJvci4gV2VcbiAgICAgIC8vIHNldCB0aGlzIHRvIHRydWUgYXQgdGhlIGJlZ2lubmluZywgdGhlbiBzZXQgaXQgdG8gZmFsc2UgcmlnaHQgYWZ0ZXJcbiAgICAgIC8vIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLiBJZiB0aGUgZnVuY3Rpb24gZXJyb3JzLCBgZGlkRXJyb3JgIHdpbGwgbmV2ZXIgYmVcbiAgICAgIC8vIHNldCB0byBmYWxzZS4gVGhpcyBzdHJhdGVneSB3b3JrcyBldmVuIGlmIHRoZSBicm93c2VyIGlzIGZsYWt5IGFuZFxuICAgICAgLy8gZmFpbHMgdG8gY2FsbCBvdXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIsIGJlY2F1c2UgaXQgZG9lc24ndCByZWx5IG9uXG4gICAgICAvLyB0aGUgZXJyb3IgZXZlbnQgYXQgYWxsLlxuXG4gICAgICB2YXIgZGlkRXJyb3IgPSB0cnVlOyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgdmFsdWUgb2Ygd2luZG93LmV2ZW50IHNvIHRoYXQgd2UgY2FuIHJlc2V0IGl0XG4gICAgICAvLyBkdXJpbmcgdGhlIGNhbGxiYWNrIHRvIGxldCB1c2VyIGNvZGUgYWNjZXNzIHdpbmRvdy5ldmVudCBpbiB0aGVcbiAgICAgIC8vIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBpdC5cblxuICAgICAgdmFyIHdpbmRvd0V2ZW50ID0gd2luZG93LmV2ZW50OyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgZGVzY3JpcHRvciBvZiB3aW5kb3cuZXZlbnQgdG8gcmVzdG9yZSBpdCBhZnRlciBldmVudFxuICAgICAgLy8gZGlzcGF0Y2hpbmc6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2ODhcblxuICAgICAgdmFyIHdpbmRvd0V2ZW50RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnZXZlbnQnKTtcblxuICAgICAgZnVuY3Rpb24gcmVzdG9yZUFmdGVyRGlzcGF0Y2goKSB7XG4gICAgICAgIC8vIFdlIGltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgY2FsbGJhY2sgZnJvbSBldmVudCBsaXN0ZW5lcnMgc28gdGhhdFxuICAgICAgICAvLyBuZXN0ZWQgYGludm9rZUd1YXJkZWRDYWxsYmFja2AgY2FsbHMgZG8gbm90IGNsYXNoLiBPdGhlcndpc2UsIGFcbiAgICAgICAgLy8gbmVzdGVkIGNhbGwgd291bGQgdHJpZ2dlciB0aGUgZmFrZSBldmVudCBoYW5kbGVycyBvZiBhbnkgY2FsbCBoaWdoZXJcbiAgICAgICAgLy8gaW4gdGhlIHN0YWNrLlxuICAgICAgICBmYWtlTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2dFR5cGUsIGNhbGxDYWxsYmFjaywgZmFsc2UpOyAvLyBXZSBjaGVjayBmb3Igd2luZG93Lmhhc093blByb3BlcnR5KCdldmVudCcpIHRvIHByZXZlbnQgdGhlXG4gICAgICAgIC8vIHdpbmRvdy5ldmVudCBhc3NpZ25tZW50IGluIGJvdGggSUUgPD0gMTAgYXMgdGhleSB0aHJvdyBhbiBlcnJvclxuICAgICAgICAvLyBcIk1lbWJlciBub3QgZm91bmRcIiBpbiBzdHJpY3QgbW9kZSwgYW5kIGluIEZpcmVmb3ggd2hpY2ggZG9lcyBub3RcbiAgICAgICAgLy8gc3VwcG9ydCB3aW5kb3cuZXZlbnQuXG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuZXZlbnQgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnZXZlbnQnKSkge1xuICAgICAgICAgIHdpbmRvdy5ldmVudCA9IHdpbmRvd0V2ZW50O1xuICAgICAgICB9XG4gICAgICB9IC8vIENyZWF0ZSBhbiBldmVudCBoYW5kbGVyIGZvciBvdXIgZmFrZSBldmVudC4gV2Ugd2lsbCBzeW5jaHJvbm91c2x5XG4gICAgICAvLyBkaXNwYXRjaCBvdXIgZmFrZSBldmVudCB1c2luZyBgZGlzcGF0Y2hFdmVudGAuIEluc2lkZSB0aGUgaGFuZGxlciwgd2VcbiAgICAgIC8vIGNhbGwgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2suXG5cblxuICAgICAgdmFyIGZ1bmNBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTtcblxuICAgICAgZnVuY3Rpb24gY2FsbENhbGxiYWNrKCkge1xuICAgICAgICBkaWRDYWxsID0gdHJ1ZTtcbiAgICAgICAgcmVzdG9yZUFmdGVyRGlzcGF0Y2goKTtcbiAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBmdW5jQXJncyk7XG4gICAgICAgIGRpZEVycm9yID0gZmFsc2U7XG4gICAgICB9IC8vIENyZWF0ZSBhIGdsb2JhbCBlcnJvciBldmVudCBoYW5kbGVyLiBXZSB1c2UgdGhpcyB0byBjYXB0dXJlIHRoZSB2YWx1ZVxuICAgICAgLy8gdGhhdCB3YXMgdGhyb3duLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBlcnJvciBoYW5kbGVyIHdpbGwgZmlyZSBtb3JlXG4gICAgICAvLyB0aGFuIG9uY2U7IGZvciBleGFtcGxlLCBpZiBub24tUmVhY3QgY29kZSBhbHNvIGNhbGxzIGBkaXNwYXRjaEV2ZW50YFxuICAgICAgLy8gYW5kIGEgaGFuZGxlciBmb3IgdGhhdCBldmVudCB0aHJvd3MuIFdlIHNob3VsZCBiZSByZXNpbGllbnQgdG8gbW9zdCBvZlxuICAgICAgLy8gdGhvc2UgY2FzZXMuIEV2ZW4gaWYgb3VyIGVycm9yIGV2ZW50IGhhbmRsZXIgZmlyZXMgbW9yZSB0aGFuIG9uY2UsIHRoZVxuICAgICAgLy8gbGFzdCBlcnJvciBldmVudCBpcyBhbHdheXMgdXNlZC4gSWYgdGhlIGNhbGxiYWNrIGFjdHVhbGx5IGRvZXMgZXJyb3IsXG4gICAgICAvLyB3ZSBrbm93IHRoYXQgdGhlIGxhc3QgZXJyb3IgZXZlbnQgaXMgdGhlIGNvcnJlY3Qgb25lLCBiZWNhdXNlIGl0J3Mgbm90XG4gICAgICAvLyBwb3NzaWJsZSBmb3IgYW55dGhpbmcgZWxzZSB0byBoYXZlIGhhcHBlbmVkIGluIGJldHdlZW4gb3VyIGNhbGxiYWNrXG4gICAgICAvLyBlcnJvcmluZyBhbmQgdGhlIGNvZGUgdGhhdCBmb2xsb3dzIHRoZSBgZGlzcGF0Y2hFdmVudGAgY2FsbCBiZWxvdy4gSWZcbiAgICAgIC8vIHRoZSBjYWxsYmFjayBkb2Vzbid0IGVycm9yLCBidXQgdGhlIGVycm9yIGV2ZW50IHdhcyBmaXJlZCwgd2Uga25vdyB0b1xuICAgICAgLy8gaWdub3JlIGl0IGJlY2F1c2UgYGRpZEVycm9yYCB3aWxsIGJlIGZhbHNlLCBhcyBkZXNjcmliZWQgYWJvdmUuXG5cblxuICAgICAgdmFyIGVycm9yOyAvLyBVc2UgdGhpcyB0byB0cmFjayB3aGV0aGVyIHRoZSBlcnJvciBldmVudCBpcyBldmVyIGNhbGxlZC5cblxuICAgICAgdmFyIGRpZFNldEVycm9yID0gZmFsc2U7XG4gICAgICB2YXIgaXNDcm9zc09yaWdpbkVycm9yID0gZmFsc2U7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZVdpbmRvd0Vycm9yKGV2ZW50KSB7XG4gICAgICAgIGVycm9yID0gZXZlbnQuZXJyb3I7XG4gICAgICAgIGRpZFNldEVycm9yID0gdHJ1ZTtcblxuICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwgJiYgZXZlbnQuY29sbm8gPT09IDAgJiYgZXZlbnQubGluZW5vID09PSAwKSB7XG4gICAgICAgICAgaXNDcm9zc09yaWdpbkVycm9yID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgLy8gU29tZSBvdGhlciBlcnJvciBoYW5kbGVyIGhhcyBwcmV2ZW50ZWQgZGVmYXVsdC5cbiAgICAgICAgICAvLyBCcm93c2VycyBzaWxlbmNlIHRoZSBlcnJvciByZXBvcnQgaWYgdGhpcyBoYXBwZW5zLlxuICAgICAgICAgIC8vIFdlJ2xsIHJlbWVtYmVyIHRoaXMgdG8gbGF0ZXIgZGVjaWRlIHdoZXRoZXIgdG8gbG9nIGl0IG9yIG5vdC5cbiAgICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBlcnJvci5fc3VwcHJlc3NMb2dnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGlubmVyKSB7Ly8gSWdub3JlLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBDcmVhdGUgYSBmYWtlIGV2ZW50IHR5cGUuXG5cblxuICAgICAgdmFyIGV2dFR5cGUgPSBcInJlYWN0LVwiICsgKG5hbWUgPyBuYW1lIDogJ2ludm9rZWd1YXJkZWRjYWxsYmFjaycpOyAvLyBBdHRhY2ggb3VyIGV2ZW50IGhhbmRsZXJzXG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGhhbmRsZVdpbmRvd0Vycm9yKTtcbiAgICAgIGZha2VOb2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZ0VHlwZSwgY2FsbENhbGxiYWNrLCBmYWxzZSk7IC8vIFN5bmNocm9ub3VzbHkgZGlzcGF0Y2ggb3VyIGZha2UgZXZlbnQuIElmIHRoZSB1c2VyLXByb3ZpZGVkIGZ1bmN0aW9uXG4gICAgICAvLyBlcnJvcnMsIGl0IHdpbGwgdHJpZ2dlciBvdXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIuXG5cbiAgICAgIGV2dC5pbml0RXZlbnQoZXZ0VHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIGZha2VOb2RlLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblxuICAgICAgaWYgKHdpbmRvd0V2ZW50RGVzY3JpcHRvcikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnZXZlbnQnLCB3aW5kb3dFdmVudERlc2NyaXB0b3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGlkQ2FsbCAmJiBkaWRFcnJvcikge1xuICAgICAgICBpZiAoIWRpZFNldEVycm9yKSB7XG4gICAgICAgICAgLy8gVGhlIGNhbGxiYWNrIGVycm9yZWQsIGJ1dCB0aGUgZXJyb3IgZXZlbnQgbmV2ZXIgZmlyZWQuXG4gICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ0FuIGVycm9yIHdhcyB0aHJvd24gaW5zaWRlIG9uZSBvZiB5b3VyIGNvbXBvbmVudHMsIGJ1dCBSZWFjdCAnICsgXCJkb2Vzbid0IGtub3cgd2hhdCBpdCB3YXMuIFRoaXMgaXMgbGlrZWx5IGR1ZSB0byBicm93c2VyIFwiICsgJ2ZsYWtpbmVzcy4gUmVhY3QgZG9lcyBpdHMgYmVzdCB0byBwcmVzZXJ2ZSB0aGUgXCJQYXVzZSBvbiAnICsgJ2V4Y2VwdGlvbnNcIiBiZWhhdmlvciBvZiB0aGUgRGV2VG9vbHMsIHdoaWNoIHJlcXVpcmVzIHNvbWUgJyArIFwiREVWLW1vZGUgb25seSB0cmlja3MuIEl0J3MgcG9zc2libGUgdGhhdCB0aGVzZSBkb24ndCB3b3JrIGluIFwiICsgJ3lvdXIgYnJvd3Nlci4gVHJ5IHRyaWdnZXJpbmcgdGhlIGVycm9yIGluIHByb2R1Y3Rpb24gbW9kZSwgJyArICdvciBzd2l0Y2hpbmcgdG8gYSBtb2Rlcm4gYnJvd3Nlci4gSWYgeW91IHN1c3BlY3QgdGhhdCB0aGlzIGlzICcgKyAnYWN0dWFsbHkgYW4gaXNzdWUgd2l0aCBSZWFjdCwgcGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDcm9zc09yaWdpbkVycm9yKSB7XG4gICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJBIGNyb3NzLW9yaWdpbiBlcnJvciB3YXMgdGhyb3duLiBSZWFjdCBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvIFwiICsgJ3RoZSBhY3R1YWwgZXJyb3Igb2JqZWN0IGluIGRldmVsb3BtZW50LiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvY3Jvc3NvcmlnaW4tZXJyb3IgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgfSAvLyBSZW1vdmUgb3VyIGV2ZW50IGxpc3RlbmVyc1xuXG5cbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIGhhbmRsZVdpbmRvd0Vycm9yKTtcblxuICAgICAgaWYgKCFkaWRDYWxsKSB7XG4gICAgICAgIC8vIFNvbWV0aGluZyB3ZW50IHJlYWxseSB3cm9uZywgYW5kIG91ciBldmVudCB3YXMgbm90IGRpc3BhdGNoZWQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY3MzRcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjU4NVxuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIHByb2R1Y3Rpb24gaW1wbGVtZW50YXRpb24uXG4gICAgICAgIHJlc3RvcmVBZnRlckRpc3BhdGNoKCk7XG4gICAgICAgIHJldHVybiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tQcm9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG52YXIgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCQxID0gaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbDtcblxudmFyIGhhc0Vycm9yID0gZmFsc2U7XG52YXIgY2F1Z2h0RXJyb3IgPSBudWxsOyAvLyBVc2VkIGJ5IGV2ZW50IHN5c3RlbSB0byBjYXB0dXJlL3JldGhyb3cgdGhlIGZpcnN0IGVycm9yLlxuXG52YXIgaGFzUmV0aHJvd0Vycm9yID0gZmFsc2U7XG52YXIgcmV0aHJvd0Vycm9yID0gbnVsbDtcbnZhciByZXBvcnRlciA9IHtcbiAgb25FcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gIH1cbn07XG4vKipcbiAqIENhbGwgYSBmdW5jdGlvbiB3aGlsZSBndWFyZGluZyBhZ2FpbnN0IGVycm9ycyB0aGF0IGhhcHBlbnMgd2l0aGluIGl0LlxuICogUmV0dXJucyBhbiBlcnJvciBpZiBpdCB0aHJvd3MsIG90aGVyd2lzZSBudWxsLlxuICpcbiAqIEluIHByb2R1Y3Rpb24sIHRoaXMgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSB0cnktY2F0Y2guIFRoZSByZWFzb24gd2UgZG9uJ3RcbiAqIHVzZSBhIHRyeS1jYXRjaCBkaXJlY3RseSBpcyBzbyB0aGF0IHdlIGNhbiBzd2FwIG91dCBhIGRpZmZlcmVudFxuICogaW1wbGVtZW50YXRpb24gaW4gREVWIG1vZGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgdGhlIGd1YXJkIHRvIHVzZSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmdcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIHVzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzIGZvciBmdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFjayhuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGhhc0Vycm9yID0gZmFsc2U7XG4gIGNhdWdodEVycm9yID0gbnVsbDtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCQxLmFwcGx5KHJlcG9ydGVyLCBhcmd1bWVudHMpO1xufVxuLyoqXG4gKiBTYW1lIGFzIGludm9rZUd1YXJkZWRDYWxsYmFjaywgYnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIGVycm9yLCBpdCBzdG9yZXNcbiAqIGl0IGluIGEgZ2xvYmFsIHNvIGl0IGNhbiBiZSByZXRocm93biBieSBgcmV0aHJvd0NhdWdodEVycm9yYCBsYXRlci5cbiAqIFRPRE86IFNlZSBpZiBjYXVnaHRFcnJvciBhbmQgcmV0aHJvd0Vycm9yIGNhbiBiZSB1bmlmaWVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHRoZSBndWFyZCB0byB1c2UgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2VcbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50cyBmb3IgZnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tBbmRDYXRjaEZpcnN0RXJyb3IobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBpZiAoaGFzRXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICBpZiAoIWhhc1JldGhyb3dFcnJvcikge1xuICAgICAgaGFzUmV0aHJvd0Vycm9yID0gdHJ1ZTtcbiAgICAgIHJldGhyb3dFcnJvciA9IGVycm9yO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBEdXJpbmcgZXhlY3V0aW9uIG9mIGd1YXJkZWQgZnVuY3Rpb25zIHdlIHdpbGwgY2FwdHVyZSB0aGUgZmlyc3QgZXJyb3Igd2hpY2hcbiAqIHdlIHdpbGwgcmV0aHJvdyB0byBiZSBoYW5kbGVkIGJ5IHRoZSB0b3AgbGV2ZWwgZXJyb3IgaGFuZGxlci5cbiAqL1xuXG5mdW5jdGlvbiByZXRocm93Q2F1Z2h0RXJyb3IoKSB7XG4gIGlmIChoYXNSZXRocm93RXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSByZXRocm93RXJyb3I7XG4gICAgaGFzUmV0aHJvd0Vycm9yID0gZmFsc2U7XG4gICAgcmV0aHJvd0Vycm9yID0gbnVsbDtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuZnVuY3Rpb24gaGFzQ2F1Z2h0RXJyb3IoKSB7XG4gIHJldHVybiBoYXNFcnJvcjtcbn1cbmZ1bmN0aW9uIGNsZWFyQ2F1Z2h0RXJyb3IoKSB7XG4gIGlmIChoYXNFcnJvcikge1xuICAgIHZhciBlcnJvciA9IGNhdWdodEVycm9yO1xuICAgIGhhc0Vycm9yID0gZmFsc2U7XG4gICAgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcImNsZWFyQ2F1Z2h0RXJyb3Igd2FzIGNhbGxlZCBidXQgbm8gZXJyb3Igd2FzIGNhcHR1cmVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogYFJlYWN0SW5zdGFuY2VNYXBgIG1haW50YWlucyBhIG1hcHBpbmcgZnJvbSBhIHB1YmxpYyBmYWNpbmcgc3RhdGVmdWxcbiAqIGluc3RhbmNlIChrZXkpIGFuZCB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKHZhbHVlKS4gVGhpcyBhbGxvd3MgcHVibGljXG4gKiBtZXRob2RzIHRvIGFjY2VwdCB0aGUgdXNlciBmYWNpbmcgaW5zdGFuY2UgYXMgYW4gYXJndW1lbnQgYW5kIG1hcCB0aGVtIGJhY2tcbiAqIHRvIGludGVybmFsIG1ldGhvZHMuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgbW9kdWxlIGlzIGN1cnJlbnRseSBzaGFyZWQgYW5kIGFzc3VtZWQgdG8gYmUgc3RhdGVsZXNzLlxuICogSWYgdGhpcyBiZWNvbWVzIGFuIGFjdHVhbCBNYXAsIHRoYXQgd2lsbCBicmVhay5cbiAqL1xuZnVuY3Rpb24gZ2V0KGtleSkge1xuICByZXR1cm4ga2V5Ll9yZWFjdEludGVybmFscztcbn1cbmZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbHMgIT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gIGtleS5fcmVhY3RJbnRlcm5hbHMgPSB2YWx1ZTtcbn1cblxuLy8gRG9uJ3QgY2hhbmdlIHRoZXNlIHR3byB2YWx1ZXMuIFRoZXkncmUgdXNlZCBieSBSZWFjdCBEZXYgVG9vbHMuXG52YXIgTm9GbGFncyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuMDtcbnZhciBQZXJmb3JtZWRXb3JrID1cbi8qICAgICAgICAgICAgICAgICovXG4xOyAvLyBZb3UgY2FuIGNoYW5nZSB0aGUgcmVzdCAoYW5kIGFkZCBtb3JlKS5cblxudmFyIFBsYWNlbWVudCA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgVXBkYXRlID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuNDtcbnZhciBQbGFjZW1lbnRBbmRVcGRhdGUgPVxuLyogICAgICAgICAgICovXG42O1xudmFyIERlbGV0aW9uID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjg7XG52YXIgQ29udGVudFJlc2V0ID1cbi8qICAgICAgICAgICAgICAgICAqL1xuMTY7XG52YXIgQ2FsbGJhY2sgPVxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuMzI7XG52YXIgRGlkQ2FwdHVyZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuNjQ7XG52YXIgUmVmID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTI4O1xudmFyIFNuYXBzaG90ID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjI1NjtcbnZhciBQYXNzaXZlID1cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG41MTI7IC8vIFRPRE8gKGVmZmVjdHMpIFJlbW92ZSB0aGlzIGJpdCBvbmNlIHRoZSBuZXcgcmVjb25jaWxlciBpcyBzeW5jZWQgdG8gdGhlIG9sZC5cblxudmFyIFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldiA9XG4vKiAgICAgKi9cbjgxOTI7XG52YXIgSHlkcmF0aW5nID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuMTAyNDtcbnZhciBIeWRyYXRpbmdBbmRVcGRhdGUgPVxuLyogICAgICAgICAgICovXG4xMDI4OyAvLyBQYXNzaXZlICYgVXBkYXRlICYgQ2FsbGJhY2sgJiBSZWYgJiBTbmFwc2hvdFxuXG52YXIgTGlmZWN5Y2xlRWZmZWN0TWFzayA9XG4vKiAgICAgICAgICAqL1xuOTMyOyAvLyBVbmlvbiBvZiBhbGwgaG9zdCBlZmZlY3RzXG5cbnZhciBIb3N0RWZmZWN0TWFzayA9XG4vKiAgICAgICAgICAgICAgICovXG4yMDQ3OyAvLyBUaGVzZSBhcmUgbm90IHJlYWxseSBzaWRlIGVmZmVjdHMsIGJ1dCB3ZSBzdGlsbCByZXVzZSB0aGlzIGZpZWxkLlxuXG52YXIgSW5jb21wbGV0ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMjA0ODtcbnZhciBTaG91bGRDYXB0dXJlID1cbi8qICAgICAgICAgICAgICAgICovXG40MDk2O1xudmFyIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UgPVxuLyogKi9cbjE2Mzg0OyAvLyBTdGF0aWMgdGFncyBkZXNjcmliZSBhc3BlY3RzIG9mIGEgZmliZXIgdGhhdCBhcmUgbm90IHNwZWNpZmljIHRvIGEgcmVuZGVyLFxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbmZ1bmN0aW9uIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpIHtcbiAgdmFyIG5vZGUgPSBmaWJlcjtcbiAgdmFyIG5lYXJlc3RNb3VudGVkID0gZmliZXI7XG5cbiAgaWYgKCFmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBhbHRlcm5hdGUsIHRoaXMgbWlnaHQgYmUgYSBuZXcgdHJlZSB0aGF0IGlzbid0IGluc2VydGVkXG4gICAgLy8geWV0LiBJZiBpdCBpcywgdGhlbiBpdCB3aWxsIGhhdmUgYSBwZW5kaW5nIGluc2VydGlvbiBlZmZlY3Qgb24gaXQuXG4gICAgdmFyIG5leHROb2RlID0gbm9kZTtcblxuICAgIGRvIHtcbiAgICAgIG5vZGUgPSBuZXh0Tm9kZTtcblxuICAgICAgaWYgKChub2RlLmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYW4gaW5zZXJ0aW9uIG9yIGluLXByb2dyZXNzIGh5ZHJhdGlvbi4gVGhlIG5lYXJlc3QgcG9zc2libGVcbiAgICAgICAgLy8gbW91bnRlZCBmaWJlciBpcyB0aGUgcGFyZW50IGJ1dCB3ZSBuZWVkIHRvIGNvbnRpbnVlIHRvIGZpZ3VyZSBvdXRcbiAgICAgICAgLy8gaWYgdGhhdCBvbmUgaXMgc3RpbGwgbW91bnRlZC5cbiAgICAgICAgbmVhcmVzdE1vdW50ZWQgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dE5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChuZXh0Tm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKG5vZGUucmV0dXJuKSB7XG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgd2FzIGEgbmVzdGVkIEhvc3RSb290IHdoZW4gdXNlZCB3aXRoXG4gICAgLy8gcmVuZGVyQ29udGFpbmVySW50b1N1YnRyZWUuXG4gICAgcmV0dXJuIG5lYXJlc3RNb3VudGVkO1xuICB9IC8vIElmIHdlIGRpZG4ndCBoaXQgdGhlIHJvb3QsIHRoYXQgbWVhbnMgdGhhdCB3ZSdyZSBpbiBhbiBkaXNjb25uZWN0ZWQgdHJlZVxuICAvLyB0aGF0IGhhcyBiZWVuIHVubW91bnRlZC5cblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihmaWJlcikge1xuICBpZiAoZmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChzdXNwZW5zZVN0YXRlID09PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3VzcGVuc2VTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5lckZyb21GaWJlcihmaWJlcikge1xuICByZXR1cm4gZmliZXIudGFnID09PSBIb3N0Um9vdCA/IGZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGlzRmliZXJNb3VudGVkKGZpYmVyKSB7XG4gIHJldHVybiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXI7XG59XG5mdW5jdGlvbiBpc01vdW50ZWQoY29tcG9uZW50KSB7XG4gIHtcbiAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIG93bmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgIHZhciBvd25lckZpYmVyID0gb3duZXI7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBvd25lckZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgaWYgKCFpbnN0YW5jZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIpIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIGFjY2Vzc2luZyBpc01vdW50ZWQgaW5zaWRlIGl0cyByZW5kZXIoKSBmdW5jdGlvbi4gJyArICdyZW5kZXIoKSBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4gSXQgc2hvdWxkICcgKyAnbmV2ZXIgYWNjZXNzIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIHN0YWxlIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgJyArICdyZW5kZXIsIHN1Y2ggYXMgcmVmcy4gTW92ZSB0aGlzIGxvZ2ljIHRvIGNvbXBvbmVudERpZE1vdW50IGFuZCAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZSBpbnN0ZWFkLicsIGdldENvbXBvbmVudE5hbWUob3duZXJGaWJlci50eXBlKSB8fCAnQSBjb21wb25lbnQnKTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmliZXIgPSBnZXQoY29tcG9uZW50KTtcblxuICBpZiAoIWZpYmVyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpID09PSBmaWJlcjtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SXNNb3VudGVkKGZpYmVyKSB7XG4gIGlmICghKGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpID09PSBmaWJlcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgoZmliZXIpIHtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoIWFsdGVybmF0ZSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIGFsdGVybmF0ZSwgdGhlbiB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgbW91bnRlZC5cbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKTtcblxuICAgIGlmICghKG5lYXJlc3RNb3VudGVkICE9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmVhcmVzdE1vdW50ZWQgIT09IGZpYmVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmliZXI7XG4gIH0gLy8gSWYgd2UgaGF2ZSB0d28gcG9zc2libGUgYnJhbmNoZXMsIHdlJ2xsIHdhbGsgYmFja3dhcmRzIHVwIHRvIHRoZSByb290XG4gIC8vIHRvIHNlZSB3aGF0IHBhdGggdGhlIHJvb3QgcG9pbnRzIHRvLiBPbiB0aGUgd2F5IHdlIG1heSBoaXQgb25lIG9mIHRoZVxuICAvLyBzcGVjaWFsIGNhc2VzIGFuZCB3ZSdsbCBkZWFsIHdpdGggdGhlbS5cblxuXG4gIHZhciBhID0gZmliZXI7XG4gIHZhciBiID0gYWx0ZXJuYXRlO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIHBhcmVudEEgPSBhLnJldHVybjtcblxuICAgIGlmIChwYXJlbnRBID09PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBhdCB0aGUgcm9vdC5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBwYXJlbnRCID0gcGFyZW50QS5hbHRlcm5hdGU7XG5cbiAgICBpZiAocGFyZW50QiA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhlcmUgaXMgbm8gYWx0ZXJuYXRlLiBUaGlzIGlzIGFuIHVudXN1YWwgY2FzZS4gQ3VycmVudGx5LCBpdCBvbmx5XG4gICAgICAvLyBoYXBwZW5zIHdoZW4gYSBTdXNwZW5zZSBjb21wb25lbnQgaXMgaGlkZGVuLiBBbiBleHRyYSBmcmFnbWVudCBmaWJlclxuICAgICAgLy8gaXMgaW5zZXJ0ZWQgaW4gYmV0d2VlbiB0aGUgU3VzcGVuc2UgZmliZXIgYW5kIGl0cyBjaGlsZHJlbi4gU2tpcFxuICAgICAgLy8gb3ZlciB0aGlzIGV4dHJhIGZyYWdtZW50IGZpYmVyIGFuZCBwcm9jZWVkIHRvIHRoZSBuZXh0IHBhcmVudC5cbiAgICAgIHZhciBuZXh0UGFyZW50ID0gcGFyZW50QS5yZXR1cm47XG5cbiAgICAgIGlmIChuZXh0UGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGEgPSBiID0gbmV4dFBhcmVudDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIElmIHRoZXJlJ3Mgbm8gcGFyZW50LCB3ZSdyZSBhdCB0aGUgcm9vdC5cblxuXG4gICAgICBicmVhaztcbiAgICB9IC8vIElmIGJvdGggY29waWVzIG9mIHRoZSBwYXJlbnQgZmliZXIgcG9pbnQgdG8gdGhlIHNhbWUgY2hpbGQsIHdlIGNhblxuICAgIC8vIGFzc3VtZSB0aGF0IHRoZSBjaGlsZCBpcyBjdXJyZW50LiBUaGlzIGhhcHBlbnMgd2hlbiB3ZSBiYWlsb3V0IG9uIGxvd1xuICAgIC8vIHByaW9yaXR5OiB0aGUgYmFpbGVkIG91dCBmaWJlcidzIGNoaWxkIHJldXNlcyB0aGUgY3VycmVudCBjaGlsZC5cblxuXG4gICAgaWYgKHBhcmVudEEuY2hpbGQgPT09IHBhcmVudEIuY2hpbGQpIHtcbiAgICAgIHZhciBjaGlsZCA9IHBhcmVudEEuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgICBpZiAoY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpO1xuICAgICAgICAgIHJldHVybiBmaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZCA9PT0gYikge1xuICAgICAgICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBCIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICAgICAgICBhc3NlcnRJc01vdW50ZWQocGFyZW50QSk7XG4gICAgICAgICAgcmV0dXJuIGFsdGVybmF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgIH0gLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgYW4gYWx0ZXJuYXRlIGZvciBhbnkgbW91bnRpbmcgbm9kZS4gU28gdGhlIG9ubHlcbiAgICAgIC8vIHdheSB0aGlzIGNvdWxkIHBvc3NpYmx5IGhhcHBlbiBpcyBpZiB0aGlzIHdhcyB1bm1vdW50ZWQsIGlmIGF0IGFsbC5cblxuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhLnJldHVybiAhPT0gYi5yZXR1cm4pIHtcbiAgICAgIC8vIFRoZSByZXR1cm4gcG9pbnRlciBvZiBBIGFuZCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgQiBwb2ludCB0byBkaWZmZXJlbnRcbiAgICAgIC8vIGZpYmVycy4gV2UgYXNzdW1lIHRoYXQgcmV0dXJuIHBvaW50ZXJzIG5ldmVyIGNyaXNzLWNyb3NzLCBzbyBBIG11c3RcbiAgICAgIC8vIGJlbG9uZyB0byB0aGUgY2hpbGQgc2V0IG9mIEEucmV0dXJuLCBhbmQgQiBtdXN0IGJlbG9uZyB0byB0aGUgY2hpbGRcbiAgICAgIC8vIHNldCBvZiBCLnJldHVybi5cbiAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgYiA9IHBhcmVudEI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSByZXR1cm4gcG9pbnRlcnMgcG9pbnQgdG8gdGhlIHNhbWUgZmliZXIuIFdlJ2xsIGhhdmUgdG8gdXNlIHRoZVxuICAgICAgLy8gZGVmYXVsdCwgc2xvdyBwYXRoOiBzY2FuIHRoZSBjaGlsZCBzZXRzIG9mIGVhY2ggcGFyZW50IGFsdGVybmF0ZSB0byBzZWVcbiAgICAgIC8vIHdoaWNoIGNoaWxkIGJlbG9uZ3MgdG8gd2hpY2ggc2V0LlxuICAgICAgLy9cbiAgICAgIC8vIFNlYXJjaCBwYXJlbnQgQSdzIGNoaWxkIHNldFxuICAgICAgdmFyIGRpZEZpbmRDaGlsZCA9IGZhbHNlO1xuICAgICAgdmFyIF9jaGlsZCA9IHBhcmVudEEuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChfY2hpbGQpIHtcbiAgICAgICAgaWYgKF9jaGlsZCA9PT0gYSkge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICAvLyBTZWFyY2ggcGFyZW50IEIncyBjaGlsZCBzZXRcbiAgICAgICAgX2NoaWxkID0gcGFyZW50Qi5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoX2NoaWxkKSB7XG4gICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYSkge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIGEgPSBwYXJlbnRCO1xuICAgICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJDaGlsZCB3YXMgbm90IGZvdW5kIGluIGVpdGhlciBwYXJlbnQgc2V0LiBUaGlzIGluZGljYXRlcyBhIGJ1ZyBpbiBSZWFjdCByZWxhdGVkIHRvIHRoZSByZXR1cm4gcG9pbnRlci4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIShhLmFsdGVybmF0ZSA9PT0gYikpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmV0dXJuIGZpYmVycyBzaG91bGQgYWx3YXlzIGJlIGVhY2ggb3RoZXJzJyBhbHRlcm5hdGVzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIElmIHRoZSByb290IGlzIG5vdCBhIGhvc3QgY29udGFpbmVyLCB3ZSdyZSBpbiBhIGRpc2Nvbm5lY3RlZCB0cmVlLiBJLmUuXG4gIC8vIHVubW91bnRlZC5cblxuXG4gIGlmICghKGEudGFnID09PSBIb3N0Um9vdCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoYS5zdGF0ZU5vZGUuY3VycmVudCA9PT0gYSkge1xuICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBBIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICByZXR1cm4gZmliZXI7XG4gIH0gLy8gT3RoZXJ3aXNlIEIgaGFzIHRvIGJlIGN1cnJlbnQgYnJhbmNoLlxuXG5cbiAgcmV0dXJuIGFsdGVybmF0ZTtcbn1cbmZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVyKHBhcmVudCkge1xuICB2YXIgY3VycmVudFBhcmVudCA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKHBhcmVudCk7XG5cbiAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTmV4dCB3ZSdsbCBkcmlsbCBkb3duIHRoaXMgY29tcG9uZW50IHRvIGZpbmQgdGhlIGZpcnN0IEhvc3RDb21wb25lbnQvVGV4dC5cblxuXG4gIHZhciBub2RlID0gY3VycmVudFBhcmVudDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKCFub2RlLnNpYmxpbmcpIHtcbiAgICAgIGlmICghbm9kZS5yZXR1cm4gfHwgbm9kZS5yZXR1cm4gPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfSAvLyBGbG93IG5lZWRzIHRoZSByZXR1cm4gbnVsbCBoZXJlLCBidXQgRVNMaW50IGNvbXBsYWlucyBhYm91dCBpdC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVucmVhY2hhYmxlXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVyV2l0aE5vUG9ydGFscyhwYXJlbnQpIHtcbiAgdmFyIGN1cnJlbnRQYXJlbnQgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChwYXJlbnQpO1xuXG4gIGlmICghY3VycmVudFBhcmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE5leHQgd2UnbGwgZHJpbGwgZG93biB0aGlzIGNvbXBvbmVudCB0byBmaW5kIHRoZSBmaXJzdCBIb3N0Q29tcG9uZW50L1RleHQuXG5cblxuICB2YXIgbm9kZSA9IGN1cnJlbnRQYXJlbnQ7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0IHx8IGVuYWJsZUZ1bmRhbWVudGFsQVBJICkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICYmIG5vZGUudGFnICE9PSBIb3N0UG9ydGFsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB3aGlsZSAoIW5vZGUuc2libGluZykge1xuICAgICAgaWYgKCFub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9IC8vIEZsb3cgbmVlZHMgdGhlIHJldHVybiBudWxsIGhlcmUsIGJ1dCBFU0xpbnQgY29tcGxhaW5zIGFib3V0IGl0LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5yZWFjaGFibGVcblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZG9lc0ZpYmVyQ29udGFpbihwYXJlbnRGaWJlciwgY2hpbGRGaWJlcikge1xuICB2YXIgbm9kZSA9IGNoaWxkRmliZXI7XG4gIHZhciBwYXJlbnRGaWJlckFsdGVybmF0ZSA9IHBhcmVudEZpYmVyLmFsdGVybmF0ZTtcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIGlmIChub2RlID09PSBwYXJlbnRGaWJlciB8fCBub2RlID09PSBwYXJlbnRGaWJlckFsdGVybmF0ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbjtcbmZ1bmN0aW9uIHNldEF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24oZm4pIHtcbiAgYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbiA9IGZuO1xufVxudmFyIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uO1xuZnVuY3Rpb24gc2V0QXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oZm4pIHtcbiAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24gPSBmbjtcbn1cbnZhciBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHk7XG5mdW5jdGlvbiBzZXRBdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkoZm4pIHtcbiAgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5ID0gZm47XG59XG52YXIgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHk7XG5mdW5jdGlvbiBzZXRBdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eShmbikge1xuICBhdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eSA9IGZuO1xufSAvLyBUT0RPOiBVcGdyYWRlIHRoaXMgZGVmaW5pdGlvbiBvbmNlIHdlJ3JlIG9uIGEgbmV3ZXIgdmVyc2lvbiBvZiBGbG93IHRoYXRcbnZhciBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gZmFsc2U7IC8vIFRoZSBxdWV1ZSBvZiBkaXNjcmV0ZSBldmVudHMgdG8gYmUgcmVwbGF5ZWQuXG5cbnZhciBxdWV1ZWREaXNjcmV0ZUV2ZW50cyA9IFtdOyAvLyBJbmRpY2F0ZXMgaWYgYW55IGNvbnRpbnVvdXMgZXZlbnQgdGFyZ2V0cyBhcmUgbm9uLW51bGwgZm9yIGVhcmx5IGJhaWxvdXQuXG4vLyBpZiB0aGUgbGFzdCB0YXJnZXQgd2FzIGRlaHlkcmF0ZWQuXG5cbnZhciBxdWV1ZWRGb2N1cyA9IG51bGw7XG52YXIgcXVldWVkRHJhZyA9IG51bGw7XG52YXIgcXVldWVkTW91c2UgPSBudWxsOyAvLyBGb3IgcG9pbnRlciBldmVudHMgdGhlcmUgY2FuIGJlIG9uZSBsYXRlc3QgZXZlbnQgcGVyIHBvaW50ZXJJZC5cblxudmFyIHF1ZXVlZFBvaW50ZXJzID0gbmV3IE1hcCgpO1xudmFyIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcyA9IG5ldyBNYXAoKTsgLy8gV2UgY291bGQgY29uc2lkZXIgcmVwbGF5aW5nIHNlbGVjdGlvbmNoYW5nZSBhbmQgdG91Y2htb3ZlcyB0b28uXG5cbnZhciBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMgPSBbXTtcbmZ1bmN0aW9uIGhhc1F1ZXVlZERpc2NyZXRlRXZlbnRzKCkge1xuICByZXR1cm4gcXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoID4gMDtcbn1cbnZhciBkaXNjcmV0ZVJlcGxheWFibGVFdmVudHMgPSBbJ21vdXNlZG93bicsICdtb3VzZXVwJywgJ3RvdWNoY2FuY2VsJywgJ3RvdWNoZW5kJywgJ3RvdWNoc3RhcnQnLCAnYXV4Y2xpY2snLCAnZGJsY2xpY2snLCAncG9pbnRlcmNhbmNlbCcsICdwb2ludGVyZG93bicsICdwb2ludGVydXAnLCAnZHJhZ2VuZCcsICdkcmFnc3RhcnQnLCAnZHJvcCcsICdjb21wb3NpdGlvbmVuZCcsICdjb21wb3NpdGlvbnN0YXJ0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnaW5wdXQnLCAndGV4dElucHV0JywgLy8gSW50ZW50aW9uYWxseSBjYW1lbENhc2Vcbidjb3B5JywgJ2N1dCcsICdwYXN0ZScsICdjbGljaycsICdjaGFuZ2UnLCAnY29udGV4dG1lbnUnLCAncmVzZXQnLCAnc3VibWl0J107XG5mdW5jdGlvbiBpc1JlcGxheWFibGVEaXNjcmV0ZUV2ZW50KGV2ZW50VHlwZSkge1xuICByZXR1cm4gZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzLmluZGV4T2YoZXZlbnRUeXBlKSA+IC0xO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBibG9ja2VkT246IGJsb2NrZWRPbixcbiAgICBkb21FdmVudE5hbWU6IGRvbUV2ZW50TmFtZSxcbiAgICBldmVudFN5c3RlbUZsYWdzOiBldmVudFN5c3RlbUZsYWdzIHwgSVNfUkVQTEFZRUQsXG4gICAgbmF0aXZlRXZlbnQ6IG5hdGl2ZUV2ZW50LFxuICAgIHRhcmdldENvbnRhaW5lcnM6IFt0YXJnZXRDb250YWluZXJdXG4gIH07XG59XG5cbmZ1bmN0aW9uIHF1ZXVlRGlzY3JldGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB2YXIgcXVldWVkRXZlbnQgPSBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5wdXNoKHF1ZXVlZEV2ZW50KTtcbn0gLy8gUmVzZXRzIHRoZSByZXBsYXlpbmcgZm9yIHRoaXMgdHlwZSBvZiBjb250aW51b3VzIGV2ZW50IHRvIG5vIGV2ZW50LlxuXG5mdW5jdGlvbiBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgY2FzZSAnZHJhZ2xlYXZlJzpcbiAgICAgIHF1ZXVlZERyYWcgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICAgIHF1ZXVlZE1vdXNlID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgIGNhc2UgJ3BvaW50ZXJvdXQnOlxuICAgICAge1xuICAgICAgICB2YXIgcG9pbnRlcklkID0gbmF0aXZlRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVycy5kZWxldGUocG9pbnRlcklkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAnbG9zdHBvaW50ZXJjYXB0dXJlJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5kZWxldGUoX3BvaW50ZXJJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoZXhpc3RpbmdRdWV1ZWRFdmVudCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKGV4aXN0aW5nUXVldWVkRXZlbnQgPT09IG51bGwgfHwgZXhpc3RpbmdRdWV1ZWRFdmVudC5uYXRpdmVFdmVudCAhPT0gbmF0aXZlRXZlbnQpIHtcbiAgICB2YXIgcXVldWVkRXZlbnQgPSBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuXG4gICAgaWYgKGJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgdmFyIF9maWJlcjIgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKGJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXIyICE9PSBudWxsKSB7XG4gICAgICAgIC8vIEF0dGVtcHQgdG8gaW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mIHRoaXMgdGFyZ2V0LlxuICAgICAgICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihfZmliZXIyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcXVldWVkRXZlbnQ7XG4gIH0gLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IHF1ZXVlZCB0aGlzIGV4YWN0IGV2ZW50LCB0aGVuIGl0J3MgYmVjYXVzZVxuICAvLyB0aGUgZGlmZmVyZW50IGV2ZW50IHN5c3RlbXMgaGF2ZSBkaWZmZXJlbnQgRE9NIGV2ZW50IGxpc3RlbmVycy5cbiAgLy8gV2UgY2FuIGFjY3VtdWxhdGUgdGhlIGZsYWdzLCBhbmQgdGhlIHRhcmdldENvbnRhaW5lcnMsIGFuZFxuICAvLyBzdG9yZSBhIHNpbmdsZSBldmVudCB0byBiZSByZXBsYXllZC5cblxuXG4gIGV4aXN0aW5nUXVldWVkRXZlbnQuZXZlbnRTeXN0ZW1GbGFncyB8PSBldmVudFN5c3RlbUZsYWdzO1xuICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IGV4aXN0aW5nUXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcblxuICBpZiAodGFyZ2V0Q29udGFpbmVyICE9PSBudWxsICYmIHRhcmdldENvbnRhaW5lcnMuaW5kZXhPZih0YXJnZXRDb250YWluZXIpID09PSAtMSkge1xuICAgIHRhcmdldENvbnRhaW5lcnMucHVzaCh0YXJnZXRDb250YWluZXIpO1xuICB9XG5cbiAgcmV0dXJuIGV4aXN0aW5nUXVldWVkRXZlbnQ7XG59XG5cbmZ1bmN0aW9uIHF1ZXVlSWZDb250aW51b3VzRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gVGhlc2Ugc2V0IHJlbGF0ZWRUYXJnZXQgdG8gbnVsbCBiZWNhdXNlIHRoZSByZXBsYXllZCBldmVudCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgd2VcbiAgLy8gbW92ZWQgZnJvbSBvdXRzaWRlIHRoZSB3aW5kb3cgKG5vIHRhcmdldCkgb250byB0aGUgdGFyZ2V0IG9uY2UgaXQgaHlkcmF0ZXMuXG4gIC8vIEluc3RlYWQgb2YgbXV0YXRpbmcgd2UgY291bGQgY2xvbmUgdGhlIGV2ZW50LlxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAge1xuICAgICAgICB2YXIgZm9jdXNFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWRGb2N1cyA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkRm9jdXMsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIGZvY3VzRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBkcmFnRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkRHJhZyA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkRHJhZywgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgZHJhZ0V2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgbW91c2VFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWRNb3VzZSA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkTW91c2UsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG1vdXNlRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBvaW50ZXJFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICB2YXIgcG9pbnRlcklkID0gcG9pbnRlckV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlcnMuc2V0KHBvaW50ZXJJZCwgYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRQb2ludGVycy5nZXQocG9pbnRlcklkKSB8fCBudWxsLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBwb2ludGVyRXZlbnQpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgICB7XG4gICAgICAgIHZhciBfcG9pbnRlckV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHZhciBfcG9pbnRlcklkMiA9IF9wb2ludGVyRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuc2V0KF9wb2ludGVySWQyLCBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5nZXQoX3BvaW50ZXJJZDIpIHx8IG51bGwsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIF9wb2ludGVyRXZlbnQpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59IC8vIENoZWNrIGlmIHRoaXMgdGFyZ2V0IGlzIHVuYmxvY2tlZC4gUmV0dXJucyB0cnVlIGlmIGl0J3MgdW5ibG9ja2VkLlxuXG5mdW5jdGlvbiBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQocXVldWVkVGFyZ2V0KSB7XG4gIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hhcmVzIGEgbG90IG9mIGxvZ2ljIHdpdGggYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudC5cbiAgLy8gVHJ5IHRvIHVuaWZ5IHRoZW0uIEl0J3MgYSBiaXQgdHJpY2t5IHNpbmNlIGl0IHdvdWxkIHJlcXVpcmUgdHdvIHJldHVyblxuICAvLyB2YWx1ZXMuXG4gIHZhciB0YXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocXVldWVkVGFyZ2V0LnRhcmdldCk7XG5cbiAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRhcmdldEluc3QpO1xuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBudWxsKSB7XG4gICAgICB2YXIgdGFnID0gbmVhcmVzdE1vdW50ZWQudGFnO1xuXG4gICAgICBpZiAodGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSdyZSBibG9ja2VkIG9uIGh5ZHJhdGluZyB0aGlzIGJvdW5kYXJ5LlxuICAgICAgICAgIC8vIEluY3JlYXNlIGl0cyBwcmlvcml0eS5cbiAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gaW5zdGFuY2U7XG4gICAgICAgICAgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkocXVldWVkVGFyZ2V0LmxhbmVQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgU2NoZWR1bGVyLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eShxdWV1ZWRUYXJnZXQucHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KG5lYXJlc3RNb3VudGVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIHZhciByb290ID0gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gZ2V0Q29udGFpbmVyRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTsgLy8gV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSB3YXkgdG8gaW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mXG4gICAgICAgICAgLy8gYSByb290IG90aGVyIHRoYW4gc3luYy5cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBudWxsO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEV2ZW50KSB7XG4gIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IHF1ZXVlZEV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgd2hpbGUgKHRhcmdldENvbnRhaW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciB0YXJnZXRDb250YWluZXIgPSB0YXJnZXRDb250YWluZXJzWzBdO1xuICAgIHZhciBuZXh0QmxvY2tlZE9uID0gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChxdWV1ZWRFdmVudC5kb21FdmVudE5hbWUsIHF1ZXVlZEV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgcXVldWVkRXZlbnQubmF0aXZlRXZlbnQpO1xuXG4gICAgaWYgKG5leHRCbG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuIFRyeSBhZ2FpbiBsYXRlci5cbiAgICAgIHZhciBfZmliZXIzID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShuZXh0QmxvY2tlZE9uKTtcblxuICAgICAgaWYgKF9maWJlcjMgIT09IG51bGwpIHtcbiAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oX2ZpYmVyMyk7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG5leHRCbG9ja2VkT247XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBUaGlzIHRhcmdldCBjb250YWluZXIgd2FzIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkLiBUcnkgdGhlIG5leHQuXG5cblxuICAgIHRhcmdldENvbnRhaW5lcnMuc2hpZnQoKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXAocXVldWVkRXZlbnQsIGtleSwgbWFwKSB7XG4gIGlmIChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEV2ZW50KSkge1xuICAgIG1hcC5kZWxldGUoa2V5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBsYXlVbmJsb2NrZWRFdmVudHMoKSB7XG4gIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSBmYWxzZTsgLy8gRmlyc3QgcmVwbGF5IGRpc2NyZXRlIGV2ZW50cy5cblxuICB3aGlsZSAocXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoID4gMCkge1xuICAgIHZhciBuZXh0RGlzY3JldGVFdmVudCA9IHF1ZXVlZERpc2NyZXRlRXZlbnRzWzBdO1xuXG4gICAgaWYgKG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC5cbiAgICAgIC8vIEluY3JlYXNlIHRoZSBwcmlvcml0eSBvZiB0aGlzIGJvdW5kYXJ5IHRvIHVuYmxvY2tcbiAgICAgIC8vIHRoZSBuZXh0IGRpc2NyZXRlIGV2ZW50LlxuICAgICAgdmFyIF9maWJlcjQgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXI0ICE9PSBudWxsKSB7XG4gICAgICAgIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24oX2ZpYmVyNCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRDb250YWluZXJzID0gbmV4dERpc2NyZXRlRXZlbnQudGFyZ2V0Q29udGFpbmVycztcblxuICAgIHdoaWxlICh0YXJnZXRDb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciB0YXJnZXRDb250YWluZXIgPSB0YXJnZXRDb250YWluZXJzWzBdO1xuICAgICAgdmFyIG5leHRCbG9ja2VkT24gPSBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KG5leHREaXNjcmV0ZUV2ZW50LmRvbUV2ZW50TmFtZSwgbmV4dERpc2NyZXRlRXZlbnQuZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuZXh0RGlzY3JldGVFdmVudC5uYXRpdmVFdmVudCk7XG5cbiAgICAgIGlmIChuZXh0QmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuIFRyeSBhZ2FpbiBsYXRlci5cbiAgICAgICAgbmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uID0gbmV4dEJsb2NrZWRPbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIFRoaXMgdGFyZ2V0IGNvbnRhaW5lciB3YXMgc3VjY2Vzc2Z1bGx5IGRpc3BhdGNoZWQuIFRyeSB0aGUgbmV4dC5cblxuXG4gICAgICB0YXJnZXRDb250YWluZXJzLnNoaWZ0KCk7XG4gICAgfVxuXG4gICAgaWYgKG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgICAgLy8gV2UndmUgc3VjY2Vzc2Z1bGx5IHJlcGxheWVkIHRoZSBmaXJzdCBldmVudC4gTGV0J3MgdHJ5IHRoZSBuZXh0IG9uZS5cbiAgICAgIHF1ZXVlZERpc2NyZXRlRXZlbnRzLnNoaWZ0KCk7XG4gICAgfVxuICB9IC8vIE5leHQgcmVwbGF5IGFueSBjb250aW51b3VzIGV2ZW50cy5cblxuXG4gIGlmIChxdWV1ZWRGb2N1cyAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEZvY3VzKSkge1xuICAgIHF1ZXVlZEZvY3VzID0gbnVsbDtcbiAgfVxuXG4gIGlmIChxdWV1ZWREcmFnICE9PSBudWxsICYmIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRHJhZykpIHtcbiAgICBxdWV1ZWREcmFnID0gbnVsbDtcbiAgfVxuXG4gIGlmIChxdWV1ZWRNb3VzZSAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZE1vdXNlKSkge1xuICAgIHF1ZXVlZE1vdXNlID0gbnVsbDtcbiAgfVxuXG4gIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2goYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKTtcbiAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmZvckVhY2goYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpIHtcbiAgaWYgKHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbnVsbDtcblxuICAgIGlmICghaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCkge1xuICAgICAgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IHRydWU7IC8vIFNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gYXR0ZW1wdCByZXBsYXlpbmcgYXMgbWFueSBldmVudHMgYXMgYXJlXG4gICAgICAvLyBub3cgdW5ibG9ja2VkLiBUaGlzIGZpcnN0IG1pZ2h0IG5vdCBhY3R1YWxseSBiZSB1bmJsb2NrZWQgeWV0LlxuICAgICAgLy8gV2UgY291bGQgY2hlY2sgaXQgZWFybHkgdG8gYXZvaWQgc2NoZWR1bGluZyBhbiB1bm5lY2Vzc2FyeSBjYWxsYmFjay5cblxuICAgICAgU2NoZWR1bGVyLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LCByZXBsYXlVbmJsb2NrZWRFdmVudHMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXRyeUlmQmxvY2tlZE9uKHVuYmxvY2tlZCkge1xuICAvLyBNYXJrIGFueXRoaW5nIHRoYXQgd2FzIGJsb2NrZWQgb24gdGhpcyBhcyBubyBsb25nZXIgYmxvY2tlZFxuICAvLyBhbmQgZWxpZ2libGUgZm9yIGEgcmVwbGF5LlxuICBpZiAocXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoID4gMCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWREaXNjcmV0ZUV2ZW50c1swXSwgdW5ibG9ja2VkKTsgLy8gVGhpcyBpcyBhIGV4cG9uZW50aWFsIHNlYXJjaCBmb3IgZWFjaCBib3VuZGFyeSB0aGF0IGNvbW1pdHMuIEkgdGhpbmsgaXQnc1xuICAgIC8vIHdvcnRoIGl0IGJlY2F1c2Ugd2UgZXhwZWN0IHZlcnkgZmV3IGRpc2NyZXRlIGV2ZW50cyB0byBxdWV1ZSB1cCBhbmQgb25jZVxuICAgIC8vIHdlIGFyZSBhY3R1YWxseSBmdWxseSB1bmJsb2NrZWQgaXQgd2lsbCBiZSBmYXN0IHRvIHJlcGxheSB0aGVtLlxuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXVlZEV2ZW50ID0gcXVldWVkRGlzY3JldGVFdmVudHNbaV07XG5cbiAgICAgIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgICAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChxdWV1ZWRGb2N1cyAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRGb2N1cywgdW5ibG9ja2VkKTtcbiAgfVxuXG4gIGlmIChxdWV1ZWREcmFnICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZERyYWcsIHVuYmxvY2tlZCk7XG4gIH1cblxuICBpZiAocXVldWVkTW91c2UgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkTW91c2UsIHVuYmxvY2tlZCk7XG4gIH1cblxuICB2YXIgdW5ibG9jayA9IGZ1bmN0aW9uIChxdWV1ZWRFdmVudCkge1xuICAgIHJldHVybiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRXZlbnQsIHVuYmxvY2tlZCk7XG4gIH07XG5cbiAgcXVldWVkUG9pbnRlcnMuZm9yRWFjaCh1bmJsb2NrKTtcbiAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmZvckVhY2godW5ibG9jayk7XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgcXVldWVkVGFyZ2V0ID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzW19pXTtcblxuICAgIGlmIChxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHdoaWxlIChxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoID4gMCkge1xuICAgIHZhciBuZXh0RXhwbGljaXRUYXJnZXQgPSBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbMF07XG5cbiAgICBpZiAobmV4dEV4cGxpY2l0VGFyZ2V0LmJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC5cbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQobmV4dEV4cGxpY2l0VGFyZ2V0KTtcblxuICAgICAgaWYgKG5leHRFeHBsaWNpdFRhcmdldC5ibG9ja2VkT24gPT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UncmUgdW5ibG9ja2VkLlxuICAgICAgICBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMuc2hpZnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIERpc2NyZXRlRXZlbnQgPSAwO1xudmFyIFVzZXJCbG9ja2luZ0V2ZW50ID0gMTtcbnZhciBDb250aW51b3VzRXZlbnQgPSAyO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgbWFwcGluZyBvZiBzdGFuZGFyZCB2ZW5kb3IgcHJlZml4ZXMgdXNpbmcgdGhlIGRlZmluZWQgc3R5bGUgcHJvcGVydHkgYW5kIGV2ZW50IG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlUHJvcFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBtYWtlUHJlZml4TWFwKHN0eWxlUHJvcCwgZXZlbnROYW1lKSB7XG4gIHZhciBwcmVmaXhlcyA9IHt9O1xuICBwcmVmaXhlc1tzdHlsZVByb3AudG9Mb3dlckNhc2UoKV0gPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcHJlZml4ZXNbJ1dlYmtpdCcgKyBzdHlsZVByb3BdID0gJ3dlYmtpdCcgKyBldmVudE5hbWU7XG4gIHByZWZpeGVzWydNb3onICsgc3R5bGVQcm9wXSA9ICdtb3onICsgZXZlbnROYW1lO1xuICByZXR1cm4gcHJlZml4ZXM7XG59XG4vKipcbiAqIEEgbGlzdCBvZiBldmVudCBuYW1lcyB0byBhIGNvbmZpZ3VyYWJsZSBsaXN0IG9mIHZlbmRvciBwcmVmaXhlcy5cbiAqL1xuXG5cbnZhciB2ZW5kb3JQcmVmaXhlcyA9IHtcbiAgYW5pbWF0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uRW5kJyksXG4gIGFuaW1hdGlvbml0ZXJhdGlvbjogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkl0ZXJhdGlvbicpLFxuICBhbmltYXRpb25zdGFydDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvblN0YXJ0JyksXG4gIHRyYW5zaXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ1RyYW5zaXRpb24nLCAnVHJhbnNpdGlvbkVuZCcpXG59O1xuLyoqXG4gKiBFdmVudCBuYW1lcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGRldGVjdGVkIGFuZCBwcmVmaXhlZCAoaWYgYXBwbGljYWJsZSkuXG4gKi9cblxudmFyIHByZWZpeGVkRXZlbnROYW1lcyA9IHt9O1xuLyoqXG4gKiBFbGVtZW50IHRvIGNoZWNrIGZvciBwcmVmaXhlcyBvbi5cbiAqL1xuXG52YXIgc3R5bGUgPSB7fTtcbi8qKlxuICogQm9vdHN0cmFwIGlmIGEgRE9NIGV4aXN0cy5cbiAqL1xuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7IC8vIE9uIHNvbWUgcGxhdGZvcm1zLCBpbiBwYXJ0aWN1bGFyIHNvbWUgcmVsZWFzZXMgb2YgQW5kcm9pZCA0LngsXG4gIC8vIHRoZSB1bi1wcmVmaXhlZCBcImFuaW1hdGlvblwiIGFuZCBcInRyYW5zaXRpb25cIiBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIG9uIHRoZVxuICAvLyBzdHlsZSBvYmplY3QgYnV0IHRoZSBldmVudHMgdGhhdCBmaXJlIHdpbGwgc3RpbGwgYmUgcHJlZml4ZWQsIHNvIHdlIG5lZWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlIHVuLXByZWZpeGVkIGV2ZW50cyBhcmUgdXNhYmxlLCBhbmQgaWYgbm90IHJlbW92ZSB0aGVtIGZyb20gdGhlIG1hcC5cblxuICBpZiAoISgnQW5pbWF0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uO1xuICB9IC8vIFNhbWUgYXMgYWJvdmVcblxuXG4gIGlmICghKCdUcmFuc2l0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uO1xuICB9XG59XG4vKipcbiAqIEF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCB2ZW5kb3IgcHJlZml4ZWQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoZXZlbnROYW1lKSB7XG4gIGlmIChwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSkge1xuICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXTtcbiAgfSBlbHNlIGlmICghdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXSkge1xuICAgIHJldHVybiBldmVudE5hbWU7XG4gIH1cblxuICB2YXIgcHJlZml4TWFwID0gdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXTtcblxuICBmb3IgKHZhciBzdHlsZVByb3AgaW4gcHJlZml4TWFwKSB7XG4gICAgaWYgKHByZWZpeE1hcC5oYXNPd25Qcm9wZXJ0eShzdHlsZVByb3ApICYmIHN0eWxlUHJvcCBpbiBzdHlsZSkge1xuICAgICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdID0gcHJlZml4TWFwW3N0eWxlUHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50TmFtZTtcbn1cblxudmFyIEFOSU1BVElPTl9FTkQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uZW5kJyk7XG52YXIgQU5JTUFUSU9OX0lURVJBVElPTiA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25pdGVyYXRpb24nKTtcbnZhciBBTklNQVRJT05fU1RBUlQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uc3RhcnQnKTtcbnZhciBUUkFOU0lUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCd0cmFuc2l0aW9uZW5kJyk7XG5cbnZhciB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcyA9IG5ldyBNYXAoKTtcbnZhciBldmVudFByaW9yaXRpZXMgPSBuZXcgTWFwKCk7IC8vIFdlIHN0b3JlIG1vc3Qgb2YgdGhlIGV2ZW50cyBpbiB0aGlzIG1vZHVsZSBpbiBwYWlycyBvZiB0d28gc3RyaW5ncyBzbyB3ZSBjYW4gcmUtdXNlXG4vLyB0aGUgY29kZSByZXF1aXJlZCB0byBhcHBseSB0aGUgc2FtZSBsb2dpYyBmb3IgZXZlbnQgcHJpb3JpdGl6YXRpb24gYW5kIHRoYXQgb2YgdGhlXG4vLyBTaW1wbGVFdmVudFBsdWdpbi4gVGhpcyBjb21wbGljYXRlcyB0aGluZ3Mgc2xpZ2h0bHksIGJ1dCB0aGUgYWltIGlzIHRvIHJlZHVjZSBjb2RlXG4vLyBkdXBsaWNhdGlvbiAoZm9yIHdoaWNoIHRoZXJlIHdvdWxkIGJlIHF1aXRlIGEgYml0KS4gRm9yIHRoZSBldmVudHMgdGhhdCBhcmUgbm90IG5lZWRlZFxuLy8gZm9yIHRoZSBTaW1wbGVFdmVudFBsdWdpbiAob3RoZXJEaXNjcmV0ZUV2ZW50cykgd2UgcHJvY2VzcyB0aGVtIHNlcGFyYXRlbHkgYXMgYW5cbi8vIGFycmF5IG9mIHRvcCBsZXZlbCBldmVudHMuXG4vLyBMYXN0bHksIHdlIGlnbm9yZSBwcmV0dGllciBzbyB3ZSBjYW4ga2VlcCB0aGUgZm9ybWF0dGluZyBzYW5lLlxuLy8gcHJldHRpZXItaWdub3JlXG5cbnZhciBkaXNjcmV0ZUV2ZW50UGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiA9IFsnY2FuY2VsJywgJ2NhbmNlbCcsICdjbGljaycsICdjbGljaycsICdjbG9zZScsICdjbG9zZScsICdjb250ZXh0bWVudScsICdjb250ZXh0TWVudScsICdjb3B5JywgJ2NvcHknLCAnY3V0JywgJ2N1dCcsICdhdXhjbGljaycsICdhdXhDbGljaycsICdkYmxjbGljaycsICdkb3VibGVDbGljaycsIC8vIENhcmVmdWwhXG4nZHJhZ2VuZCcsICdkcmFnRW5kJywgJ2RyYWdzdGFydCcsICdkcmFnU3RhcnQnLCAnZHJvcCcsICdkcm9wJywgJ2ZvY3VzaW4nLCAnZm9jdXMnLCAvLyBDYXJlZnVsIVxuJ2ZvY3Vzb3V0JywgJ2JsdXInLCAvLyBDYXJlZnVsIVxuJ2lucHV0JywgJ2lucHV0JywgJ2ludmFsaWQnLCAnaW52YWxpZCcsICdrZXlkb3duJywgJ2tleURvd24nLCAna2V5cHJlc3MnLCAna2V5UHJlc3MnLCAna2V5dXAnLCAna2V5VXAnLCAnbW91c2Vkb3duJywgJ21vdXNlRG93bicsICdtb3VzZXVwJywgJ21vdXNlVXAnLCAncGFzdGUnLCAncGFzdGUnLCAncGF1c2UnLCAncGF1c2UnLCAncGxheScsICdwbGF5JywgJ3BvaW50ZXJjYW5jZWwnLCAncG9pbnRlckNhbmNlbCcsICdwb2ludGVyZG93bicsICdwb2ludGVyRG93bicsICdwb2ludGVydXAnLCAncG9pbnRlclVwJywgJ3JhdGVjaGFuZ2UnLCAncmF0ZUNoYW5nZScsICdyZXNldCcsICdyZXNldCcsICdzZWVrZWQnLCAnc2Vla2VkJywgJ3N1Ym1pdCcsICdzdWJtaXQnLCAndG91Y2hjYW5jZWwnLCAndG91Y2hDYW5jZWwnLCAndG91Y2hlbmQnLCAndG91Y2hFbmQnLCAndG91Y2hzdGFydCcsICd0b3VjaFN0YXJ0JywgJ3ZvbHVtZWNoYW5nZScsICd2b2x1bWVDaGFuZ2UnXTtcbnZhciBvdGhlckRpc2NyZXRlRXZlbnRzID0gWydjaGFuZ2UnLCAnc2VsZWN0aW9uY2hhbmdlJywgJ3RleHRJbnB1dCcsICdjb21wb3NpdGlvbnN0YXJ0JywgJ2NvbXBvc2l0aW9uZW5kJywgJ2NvbXBvc2l0aW9udXBkYXRlJ107XG5cblxudmFyIHVzZXJCbG9ja2luZ1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4gPSBbJ2RyYWcnLCAnZHJhZycsICdkcmFnZW50ZXInLCAnZHJhZ0VudGVyJywgJ2RyYWdleGl0JywgJ2RyYWdFeGl0JywgJ2RyYWdsZWF2ZScsICdkcmFnTGVhdmUnLCAnZHJhZ292ZXInLCAnZHJhZ092ZXInLCAnbW91c2Vtb3ZlJywgJ21vdXNlTW92ZScsICdtb3VzZW91dCcsICdtb3VzZU91dCcsICdtb3VzZW92ZXInLCAnbW91c2VPdmVyJywgJ3BvaW50ZXJtb3ZlJywgJ3BvaW50ZXJNb3ZlJywgJ3BvaW50ZXJvdXQnLCAncG9pbnRlck91dCcsICdwb2ludGVyb3ZlcicsICdwb2ludGVyT3ZlcicsICdzY3JvbGwnLCAnc2Nyb2xsJywgJ3RvZ2dsZScsICd0b2dnbGUnLCAndG91Y2htb3ZlJywgJ3RvdWNoTW92ZScsICd3aGVlbCcsICd3aGVlbCddOyAvLyBwcmV0dGllci1pZ25vcmVcblxudmFyIGNvbnRpbnVvdXNQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luID0gWydhYm9ydCcsICdhYm9ydCcsIEFOSU1BVElPTl9FTkQsICdhbmltYXRpb25FbmQnLCBBTklNQVRJT05fSVRFUkFUSU9OLCAnYW5pbWF0aW9uSXRlcmF0aW9uJywgQU5JTUFUSU9OX1NUQVJULCAnYW5pbWF0aW9uU3RhcnQnLCAnY2FucGxheScsICdjYW5QbGF5JywgJ2NhbnBsYXl0aHJvdWdoJywgJ2NhblBsYXlUaHJvdWdoJywgJ2R1cmF0aW9uY2hhbmdlJywgJ2R1cmF0aW9uQ2hhbmdlJywgJ2VtcHRpZWQnLCAnZW1wdGllZCcsICdlbmNyeXB0ZWQnLCAnZW5jcnlwdGVkJywgJ2VuZGVkJywgJ2VuZGVkJywgJ2Vycm9yJywgJ2Vycm9yJywgJ2dvdHBvaW50ZXJjYXB0dXJlJywgJ2dvdFBvaW50ZXJDYXB0dXJlJywgJ2xvYWQnLCAnbG9hZCcsICdsb2FkZWRkYXRhJywgJ2xvYWRlZERhdGEnLCAnbG9hZGVkbWV0YWRhdGEnLCAnbG9hZGVkTWV0YWRhdGEnLCAnbG9hZHN0YXJ0JywgJ2xvYWRTdGFydCcsICdsb3N0cG9pbnRlcmNhcHR1cmUnLCAnbG9zdFBvaW50ZXJDYXB0dXJlJywgJ3BsYXlpbmcnLCAncGxheWluZycsICdwcm9ncmVzcycsICdwcm9ncmVzcycsICdzZWVraW5nJywgJ3NlZWtpbmcnLCAnc3RhbGxlZCcsICdzdGFsbGVkJywgJ3N1c3BlbmQnLCAnc3VzcGVuZCcsICd0aW1ldXBkYXRlJywgJ3RpbWVVcGRhdGUnLCBUUkFOU0lUSU9OX0VORCwgJ3RyYW5zaXRpb25FbmQnLCAnd2FpdGluZycsICd3YWl0aW5nJ107XG4vKipcbiAqIFR1cm5zXG4gKiBbJ2Fib3J0JywgLi4uXVxuICpcbiAqIGludG9cbiAqXG4gKiB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcyA9IG5ldyBNYXAoW1xuICogICBbJ2Fib3J0JywgJ29uQWJvcnQnXSxcbiAqIF0pO1xuICpcbiAqIGFuZCByZWdpc3RlcnMgdGhlbS5cbiAqL1xuXG5mdW5jdGlvbiByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyhldmVudFR5cGVzLCBwcmlvcml0eSkge1xuICAvLyBBcyB0aGUgZXZlbnQgdHlwZXMgYXJlIGluIHBhaXJzIG9mIHR3bywgd2UgbmVlZCB0byBpdGVyYXRlXG4gIC8vIHRocm91Z2ggaW4gdHdvcy4gVGhlIGV2ZW50cyBhcmUgaW4gcGFpcnMgb2YgdHdvIHRvIHNhdmUgY29kZVxuICAvLyBhbmQgaW1wcm92ZSBpbml0IHBlcmYgb2YgcHJvY2Vzc2luZyB0aGlzIGFycmF5LCBhcyBpdCB3aWxsXG4gIC8vIHJlc3VsdCBpbiBmYXIgZmV3ZXIgb2JqZWN0IGFsbG9jYXRpb25zIGFuZCBwcm9wZXJ0eSBhY2Nlc3Nlc1xuICAvLyBpZiB3ZSBvbmx5IHVzZSB0aHJlZSBhcnJheXMgdG8gcHJvY2VzcyBhbGwgdGhlIGNhdGVnb3JpZXMgb2ZcbiAgLy8gaW5zdGVhZCBvZiB0dXBsZXMuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRUeXBlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciB0b3BFdmVudCA9IGV2ZW50VHlwZXNbaV07XG4gICAgdmFyIGV2ZW50ID0gZXZlbnRUeXBlc1tpICsgMV07XG4gICAgdmFyIGNhcGl0YWxpemVkRXZlbnQgPSBldmVudFswXS50b1VwcGVyQ2FzZSgpICsgZXZlbnQuc2xpY2UoMSk7XG4gICAgdmFyIHJlYWN0TmFtZSA9ICdvbicgKyBjYXBpdGFsaXplZEV2ZW50O1xuICAgIGV2ZW50UHJpb3JpdGllcy5zZXQodG9wRXZlbnQsIHByaW9yaXR5KTtcbiAgICB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcy5zZXQodG9wRXZlbnQsIHJlYWN0TmFtZSk7XG4gICAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KHJlYWN0TmFtZSwgW3RvcEV2ZW50XSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0RXZlbnRQcmlvcml0aWVzKGV2ZW50VHlwZXMsIHByaW9yaXR5KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgIGV2ZW50UHJpb3JpdGllcy5zZXQoZXZlbnRUeXBlc1tpXSwgcHJpb3JpdHkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50UHJpb3JpdHlGb3JQbHVnaW5TeXN0ZW0oZG9tRXZlbnROYW1lKSB7XG4gIHZhciBwcmlvcml0eSA9IGV2ZW50UHJpb3JpdGllcy5nZXQoZG9tRXZlbnROYW1lKTsgLy8gRGVmYXVsdCB0byBhIENvbnRpbnVvdXNFdmVudC4gTm90ZTogd2UgbWlnaHRcbiAgLy8gd2FudCB0byB3YXJuIGlmIHdlIGNhbid0IGRldGVjdCB0aGUgcHJpb3JpdHlcbiAgLy8gZm9yIHRoZSBldmVudC5cblxuICByZXR1cm4gcHJpb3JpdHkgPT09IHVuZGVmaW5lZCA/IENvbnRpbnVvdXNFdmVudCA6IHByaW9yaXR5O1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJTaW1wbGVFdmVudHMoKSB7XG4gIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKGRpc2NyZXRlRXZlbnRQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luLCBEaXNjcmV0ZUV2ZW50KTtcbiAgcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXModXNlckJsb2NraW5nUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiwgVXNlckJsb2NraW5nRXZlbnQpO1xuICByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyhjb250aW51b3VzUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiwgQ29udGludW91c0V2ZW50KTtcbiAgc2V0RXZlbnRQcmlvcml0aWVzKG90aGVyRGlzY3JldGVFdmVudHMsIERpc2NyZXRlRXZlbnQpO1xufVxuXG52YXIgU2NoZWR1bGVyX25vdyA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3c7XG5cbntcbiAgLy8gUHJvdmlkZSBleHBsaWNpdCBlcnJvciBtZXNzYWdlIHdoZW4gcHJvZHVjdGlvbitwcm9maWxpbmcgYnVuZGxlIG9mIGUuZy5cbiAgLy8gcmVhY3QtZG9tIGlzIHVzZWQgd2l0aCBwcm9kdWN0aW9uIChub24tcHJvZmlsaW5nKSBidW5kbGUgb2ZcbiAgLy8gc2NoZWR1bGVyL3RyYWNpbmdcbiAgaWYgKCEodHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZiAhPSBudWxsICYmIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCAhPSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gcnVuIHRoZSBwcm9maWxpbmcgdmVyc2lvbiBvZiBhIHJlbmRlcmVyIChmb3IgZXhhbXBsZSwgYHJlYWN0LWRvbS9wcm9maWxpbmdgKSB3aXRob3V0IGFsc28gcmVwbGFjaW5nIHRoZSBgc2NoZWR1bGVyL3RyYWNpbmdgIG1vZHVsZSB3aXRoIGBzY2hlZHVsZXIvdHJhY2luZy1wcm9maWxpbmdgLiBZb3VyIGJ1bmRsZXIgbWlnaHQgaGF2ZSBhIHNldHRpbmcgZm9yIGFsaWFzaW5nIGJvdGggbW9kdWxlcy4gTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcHJvZmlsaW5nXCIgKTtcbiAgICB9XG4gIH1cbn1cbi8vIGFzY2VuZGluZyBudW1iZXJzIHNvIHdlIGNhbiBjb21wYXJlIHRoZW0gbGlrZSBudW1iZXJzLiBUaGV5IHN0YXJ0IGF0IDkwIHRvXG4vLyBhdm9pZCBjbGFzaGluZyB3aXRoIFNjaGVkdWxlcidzIHByaW9yaXRpZXMuXG5cbnZhciBJbW1lZGlhdGVQcmlvcml0eSA9IDk5O1xudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5ID0gOTg7XG52YXIgTm9ybWFsUHJpb3JpdHkgPSA5NztcbnZhciBMb3dQcmlvcml0eSA9IDk2O1xudmFyIElkbGVQcmlvcml0eSA9IDk1OyAvLyBOb1ByaW9yaXR5IGlzIHRoZSBhYnNlbmNlIG9mIHByaW9yaXR5LiBBbHNvIFJlYWN0LW9ubHkuXG5cbnZhciBOb1ByaW9yaXR5ID0gOTA7XG52YXIgaW5pdGlhbFRpbWVNcyA9IFNjaGVkdWxlcl9ub3coKTsgLy8gSWYgdGhlIGluaXRpYWwgdGltZXN0YW1wIGlzIHJlYXNvbmFibHkgc21hbGwsIHVzZSBTY2hlZHVsZXIncyBgbm93YCBkaXJlY3RseS5cblxudmFyIFN5bmNMYW5lUHJpb3JpdHkgPSAxNTtcbnZhciBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eSA9IDE0O1xudmFyIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSAxMztcbnZhciBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5ID0gMTI7XG52YXIgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMTE7XG52YXIgSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5ID0gMTA7XG52YXIgRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDk7XG52YXIgRGVmYXVsdExhbmVQcmlvcml0eSA9IDg7XG52YXIgVHJhbnNpdGlvbkh5ZHJhdGlvblByaW9yaXR5ID0gNztcbnZhciBUcmFuc2l0aW9uUHJpb3JpdHkgPSA2O1xudmFyIFJldHJ5TGFuZVByaW9yaXR5ID0gNTtcbnZhciBTZWxlY3RpdmVIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSA0O1xudmFyIElkbGVIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSAzO1xudmFyIElkbGVMYW5lUHJpb3JpdHkgPSAyO1xudmFyIE9mZnNjcmVlbkxhbmVQcmlvcml0eSA9IDE7XG52YXIgTm9MYW5lUHJpb3JpdHkgPSAwO1xudmFyIFRvdGFsTGFuZXMgPSAzMTtcbnZhciBOb0xhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgTm9MYW5lID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMDtcbnZhciBTeW5jTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4xO1xudmFyIFN5bmNCYXRjaGVkTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAqL1xuNDtcbnZhciBJbnB1dERpc2NyZXRlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4yNDtcbnZhciBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAqL1xuMzI7XG52YXIgSW5wdXRDb250aW51b3VzTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAqL1xuMTkyO1xudmFyIERlZmF1bHRIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgKi9cbjI1NjtcbnZhciBEZWZhdWx0TGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjM1ODQ7XG52YXIgVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICAgICAgKi9cbjQwOTY7XG52YXIgVHJhbnNpdGlvbkxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuNDE4NjExMjtcbnZhciBSZXRyeUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG42MjkxNDU2MDtcbnZhciBTb21lUmV0cnlMYW5lID1cbi8qICAgICAgICAgICAgICAgICAgKi9cbjMzNTU0NDMyO1xudmFyIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgKi9cbjY3MTA4ODY0O1xudmFyIE5vbklkbGVMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4xMzQyMTc3Mjc7XG52YXIgSWRsZUh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICAgICAqL1xuMTM0MjE3NzI4O1xudmFyIElkbGVMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjgwNTMwNjM2ODtcbnZhciBPZmZzY3JlZW5MYW5lID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4xMDczNzQxODI0O1xudmFyIE5vVGltZXN0YW1wID0gLTE7XG5mdW5jdGlvbiBzZXRDdXJyZW50VXBkYXRlTGFuZVByaW9yaXR5KG5ld0xhbmVQcmlvcml0eSkge1xufSAvLyBcIlJlZ2lzdGVyc1wiIHVzZWQgdG8gXCJyZXR1cm5cIiBtdWx0aXBsZSB2YWx1ZXNcbi8vIFVzZWQgYnkgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMgYW5kIGdldE5leHRMYW5lczpcblxudmFyIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdExhbmVQcmlvcml0eTtcblxuZnVuY3Rpb24gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobGFuZXMpIHtcbiAgaWYgKChTeW5jTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU3luY0xhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH1cblxuICBpZiAoKFN5bmNCYXRjaGVkTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU3luY0JhdGNoZWRMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIFN5bmNCYXRjaGVkTGFuZTtcbiAgfVxuXG4gIGlmICgoSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGlucHV0RGlzY3JldGVMYW5lcyA9IElucHV0RGlzY3JldGVMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChpbnB1dERpc2NyZXRlTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlucHV0RGlzY3JldGVMYW5lcztcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGlucHV0Q29udGludW91c0xhbmVzID0gSW5wdXRDb250aW51b3VzTGFuZXMgJiBsYW5lcztcblxuICBpZiAoaW5wdXRDb250aW51b3VzTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gaW5wdXRDb250aW51b3VzTGFuZXM7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgRGVmYXVsdEh5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0SHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBEZWZhdWx0SHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBkZWZhdWx0TGFuZXMgPSBEZWZhdWx0TGFuZXMgJiBsYW5lcztcblxuICBpZiAoZGVmYXVsdExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0TGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBkZWZhdWx0TGFuZXM7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBUcmFuc2l0aW9uSHlkcmF0aW9uUHJpb3JpdHk7XG4gICAgcmV0dXJuIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25MYW5lcyA9IFRyYW5zaXRpb25MYW5lcyAmIGxhbmVzO1xuXG4gIGlmICh0cmFuc2l0aW9uTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFRyYW5zaXRpb25Qcmlvcml0eTtcbiAgICByZXR1cm4gdHJhbnNpdGlvbkxhbmVzO1xuICB9XG5cbiAgdmFyIHJldHJ5TGFuZXMgPSBSZXRyeUxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKHJldHJ5TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFJldHJ5TGFuZVByaW9yaXR5O1xuICAgIHJldHVybiByZXRyeUxhbmVzO1xuICB9XG5cbiAgaWYgKGxhbmVzICYgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZSkge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU2VsZWN0aXZlSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBTZWxlY3RpdmVIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIElkbGVIeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSWRsZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gSWRsZUh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgaWRsZUxhbmVzID0gSWRsZUxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGlkbGVMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSWRsZUxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gaWRsZUxhbmVzO1xuICB9XG5cbiAgaWYgKChPZmZzY3JlZW5MYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBPZmZzY3JlZW5MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIE9mZnNjcmVlbkxhbmU7XG4gIH1cblxuICB7XG4gICAgZXJyb3IoJ1Nob3VsZCBoYXZlIGZvdW5kIG1hdGNoaW5nIGxhbmVzLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LicpO1xuICB9IC8vIFRoaXMgc2hvdWxkbid0IGJlIHJlYWNoYWJsZSwgYnV0IGFzIGEgZmFsbGJhY2ssIHJldHVybiB0aGUgZW50aXJlIGJpdG1hc2suXG5cblxuICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRMYW5lUHJpb3JpdHk7XG4gIHJldHVybiBsYW5lcztcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVyUHJpb3JpdHlUb0xhbmVQcmlvcml0eShzY2hlZHVsZXJQcmlvcml0eUxldmVsKSB7XG4gIHN3aXRjaCAoc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gU3luY0xhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5O1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgICAgLy8gVE9ETzogSGFuZGxlIExvd1NjaGVkdWxlclByaW9yaXR5LCBzb21laG93LiBNYXliZSB0aGUgc2FtZSBsYW5lIGFzIGh5ZHJhdGlvbi5cbiAgICAgIHJldHVybiBEZWZhdWx0TGFuZVByaW9yaXR5O1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSWRsZUxhbmVQcmlvcml0eTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gTm9MYW5lUHJpb3JpdHk7XG4gIH1cbn1cbmZ1bmN0aW9uIGxhbmVQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkobGFuZVByaW9yaXR5KSB7XG4gIHN3aXRjaCAobGFuZVByaW9yaXR5KSB7XG4gICAgY2FzZSBTeW5jTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgU3luY0JhdGNoZWRMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSW1tZWRpYXRlUHJpb3JpdHk7XG5cbiAgICBjYXNlIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuXG4gICAgY2FzZSBEZWZhdWx0SHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgRGVmYXVsdExhbmVQcmlvcml0eTpcbiAgICBjYXNlIFRyYW5zaXRpb25IeWRyYXRpb25Qcmlvcml0eTpcbiAgICBjYXNlIFRyYW5zaXRpb25Qcmlvcml0eTpcbiAgICBjYXNlIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIFJldHJ5TGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIE5vcm1hbFByaW9yaXR5O1xuXG4gICAgY2FzZSBJZGxlSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSWRsZUxhbmVQcmlvcml0eTpcbiAgICBjYXNlIE9mZnNjcmVlbkxhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJZGxlUHJpb3JpdHk7XG5cbiAgICBjYXNlIE5vTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIE5vUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCB1cGRhdGUgcHJpb3JpdHk6IFwiICsgbGFuZVByaW9yaXR5ICsgXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cbn1cbmZ1bmN0aW9uIGdldE5leHRMYW5lcyhyb290LCB3aXBMYW5lcykge1xuICAvLyBFYXJseSBiYWlsb3V0IGlmIHRoZXJlJ3Mgbm8gcGVuZGluZyB3b3JrIGxlZnQuXG4gIHZhciBwZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcblxuICBpZiAocGVuZGluZ0xhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gTm9MYW5lcztcbiAgfVxuXG4gIHZhciBuZXh0TGFuZXMgPSBOb0xhbmVzO1xuICB2YXIgbmV4dExhbmVQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICB2YXIgZXhwaXJlZExhbmVzID0gcm9vdC5leHBpcmVkTGFuZXM7XG4gIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG4gIHZhciBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7IC8vIENoZWNrIGlmIGFueSB3b3JrIGhhcyBleHBpcmVkLlxuXG4gIGlmIChleHBpcmVkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICBuZXh0TGFuZXMgPSBleHBpcmVkTGFuZXM7XG4gICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU3luY0xhbmVQcmlvcml0eTtcbiAgfSBlbHNlIHtcbiAgICAvLyBEbyBub3Qgd29yayBvbiBhbnkgaWRsZSB3b3JrIHVudGlsIGFsbCB0aGUgbm9uLWlkbGUgd29yayBoYXMgZmluaXNoZWQsXG4gICAgLy8gZXZlbiBpZiB0aGUgd29yayBpcyBzdXNwZW5kZWQuXG4gICAgdmFyIG5vbklkbGVQZW5kaW5nTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiBOb25JZGxlTGFuZXM7XG5cbiAgICBpZiAobm9uSWRsZVBlbmRpbmdMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgdmFyIG5vbklkbGVVbmJsb2NrZWRMYW5lcyA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgIGlmIChub25JZGxlVW5ibG9ja2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobm9uSWRsZVVuYmxvY2tlZExhbmVzKTtcbiAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG5vbklkbGVQaW5nZWRMYW5lcyA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiBwaW5nZWRMYW5lcztcblxuICAgICAgICBpZiAobm9uSWRsZVBpbmdlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobm9uSWRsZVBpbmdlZExhbmVzKTtcbiAgICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIG9ubHkgcmVtYWluaW5nIHdvcmsgaXMgSWRsZS5cbiAgICAgIHZhciB1bmJsb2NrZWRMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIH5zdXNwZW5kZWRMYW5lcztcblxuICAgICAgaWYgKHVuYmxvY2tlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHVuYmxvY2tlZExhbmVzKTtcbiAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHBpbmdlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGluZ2VkTGFuZXMpO1xuICAgICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChuZXh0TGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIHJlYWNoYWJsZSBpZiB3ZSdyZSBzdXNwZW5kZWRcbiAgICAvLyBUT0RPOiBDb25zaWRlciB3YXJuaW5nIGluIHRoaXMgcGF0aCBpZiBhIGZhbGxiYWNrIHRpbWVyIGlzIG5vdCBzY2hlZHVsZWQuXG4gICAgcmV0dXJuIE5vTGFuZXM7XG4gIH0gLy8gSWYgdGhlcmUgYXJlIGhpZ2hlciBwcmlvcml0eSBsYW5lcywgd2UnbGwgaW5jbHVkZSB0aGVtIGV2ZW4gaWYgdGhleVxuICAvLyBhcmUgc3VzcGVuZGVkLlxuXG5cbiAgbmV4dExhbmVzID0gcGVuZGluZ0xhbmVzICYgZ2V0RXF1YWxPckhpZ2hlclByaW9yaXR5TGFuZXMobmV4dExhbmVzKTsgLy8gSWYgd2UncmUgYWxyZWFkeSBpbiB0aGUgbWlkZGxlIG9mIGEgcmVuZGVyLCBzd2l0Y2hpbmcgbGFuZXMgd2lsbCBpbnRlcnJ1cHRcbiAgLy8gaXQgYW5kIHdlJ2xsIGxvc2Ugb3VyIHByb2dyZXNzLiBXZSBzaG91bGQgb25seSBkbyB0aGlzIGlmIHRoZSBuZXcgbGFuZXMgYXJlXG4gIC8vIGhpZ2hlciBwcmlvcml0eS5cblxuICBpZiAod2lwTGFuZXMgIT09IE5vTGFuZXMgJiYgd2lwTGFuZXMgIT09IG5leHRMYW5lcyAmJiAvLyBJZiB3ZSBhbHJlYWR5IHN1c3BlbmRlZCB3aXRoIGEgZGVsYXksIHRoZW4gaW50ZXJydXB0aW5nIGlzIGZpbmUuIERvbid0XG4gIC8vIGJvdGhlciB3YWl0aW5nIHVudGlsIHRoZSByb290IGlzIGNvbXBsZXRlLlxuICAod2lwTGFuZXMgJiBzdXNwZW5kZWRMYW5lcykgPT09IE5vTGFuZXMpIHtcbiAgICBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyh3aXBMYW5lcyk7XG4gICAgdmFyIHdpcExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuXG4gICAgaWYgKG5leHRMYW5lUHJpb3JpdHkgPD0gd2lwTGFuZVByaW9yaXR5KSB7XG4gICAgICByZXR1cm4gd2lwTGFuZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gbmV4dExhbmVQcmlvcml0eTtcbiAgICB9XG4gIH0gLy8gQ2hlY2sgZm9yIGVudGFuZ2xlZCBsYW5lcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGJhdGNoLlxuICAvL1xuICAvLyBBIGxhbmUgaXMgc2FpZCB0byBiZSBlbnRhbmdsZWQgd2l0aCBhbm90aGVyIHdoZW4gaXQncyBub3QgYWxsb3dlZCB0byByZW5kZXJcbiAgLy8gaW4gYSBiYXRjaCB0aGF0IGRvZXMgbm90IGFsc28gaW5jbHVkZSB0aGUgb3RoZXIgbGFuZS4gVHlwaWNhbGx5IHdlIGRvIHRoaXNcbiAgLy8gd2hlbiBtdWx0aXBsZSB1cGRhdGVzIGhhdmUgdGhlIHNhbWUgc291cmNlLCBhbmQgd2Ugb25seSB3YW50IHRvIHJlc3BvbmQgdG9cbiAgLy8gdGhlIG1vc3QgcmVjZW50IGV2ZW50IGZyb20gdGhhdCBzb3VyY2UuXG4gIC8vXG4gIC8vIE5vdGUgdGhhdCB3ZSBhcHBseSBlbnRhbmdsZW1lbnRzICphZnRlciogY2hlY2tpbmcgZm9yIHBhcnRpYWwgd29yayBhYm92ZS5cbiAgLy8gVGhpcyBtZWFucyB0aGF0IGlmIGEgbGFuZSBpcyBlbnRhbmdsZWQgZHVyaW5nIGFuIGludGVybGVhdmVkIGV2ZW50IHdoaWxlXG4gIC8vIGl0J3MgYWxyZWFkeSByZW5kZXJpbmcsIHdlIHdvbid0IGludGVycnVwdCBpdC4gVGhpcyBpcyBpbnRlbnRpb25hbCwgc2luY2VcbiAgLy8gZW50YW5nbGVtZW50IGlzIHVzdWFsbHkgXCJiZXN0IGVmZm9ydFwiOiB3ZSdsbCB0cnkgb3VyIGJlc3QgdG8gcmVuZGVyIHRoZVxuICAvLyBsYW5lcyBpbiB0aGUgc2FtZSBiYXRjaCwgYnV0IGl0J3Mgbm90IHdvcnRoIHRocm93aW5nIG91dCBwYXJ0aWFsbHlcbiAgLy8gY29tcGxldGVkIHdvcmsgaW4gb3JkZXIgdG8gZG8gaXQuXG4gIC8vXG4gIC8vIEZvciB0aG9zZSBleGNlcHRpb25zIHdoZXJlIGVudGFuZ2xlbWVudCBpcyBzZW1hbnRpY2FsbHkgaW1wb3J0YW50LCBsaWtlXG4gIC8vIHVzZU11dGFibGVTb3VyY2UsIHdlIHNob3VsZCBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubyBwYXJ0aWFsIHdvcmsgYXQgdGhlXG4gIC8vIHRpbWUgd2UgYXBwbHkgdGhlIGVudGFuZ2xlbWVudC5cblxuXG4gIHZhciBlbnRhbmdsZWRMYW5lcyA9IHJvb3QuZW50YW5nbGVkTGFuZXM7XG5cbiAgaWYgKGVudGFuZ2xlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gICAgdmFyIGxhbmVzID0gbmV4dExhbmVzICYgZW50YW5nbGVkTGFuZXM7XG5cbiAgICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgIG5leHRMYW5lcyB8PSBlbnRhbmdsZW1lbnRzW2luZGV4XTtcbiAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0TGFuZXM7XG59XG5mdW5jdGlvbiBnZXRNb3N0UmVjZW50RXZlbnRUaW1lKHJvb3QsIGxhbmVzKSB7XG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgbW9zdFJlY2VudEV2ZW50VGltZSA9IE5vVGltZXN0YW1wO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgdmFyIGV2ZW50VGltZSA9IGV2ZW50VGltZXNbaW5kZXhdO1xuXG4gICAgaWYgKGV2ZW50VGltZSA+IG1vc3RSZWNlbnRFdmVudFRpbWUpIHtcbiAgICAgIG1vc3RSZWNlbnRFdmVudFRpbWUgPSBldmVudFRpbWU7XG4gICAgfVxuXG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cblxuICByZXR1cm4gbW9zdFJlY2VudEV2ZW50VGltZTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUV4cGlyYXRpb25UaW1lKGxhbmUsIGN1cnJlbnRUaW1lKSB7XG4gIC8vIFRPRE86IEV4cGlyYXRpb24gaGV1cmlzdGljIGlzIGNvbnN0YW50IHBlciBsYW5lLCBzbyBjb3VsZCB1c2UgYSBtYXAuXG4gIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGxhbmUpO1xuICB2YXIgcHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcblxuICBpZiAocHJpb3JpdHkgPj0gSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5KSB7XG4gICAgLy8gVXNlciBpbnRlcmFjdGlvbnMgc2hvdWxkIGV4cGlyZSBzbGlnaHRseSBtb3JlIHF1aWNrbHkuXG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGlzIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyBjb25zdGFudCBhcyBpbiBTY2hlZHVsZXIuanMuIFdoZW5cbiAgICAvLyB3ZSBtYWRlIGl0IGxhcmdlciwgYSBwcm9kdWN0IG1ldHJpYyBpbiB3d3cgcmVncmVzc2VkLCBzdWdnZXN0aW5nIHRoZXJlJ3NcbiAgICAvLyBhIHVzZXIgaW50ZXJhY3Rpb24gdGhhdCdzIGJlaW5nIHN0YXJ2ZWQgYnkgYSBzZXJpZXMgb2Ygc3luY2hyb25vdXNcbiAgICAvLyB1cGRhdGVzLiBJZiB0aGF0IHRoZW9yeSBpcyBjb3JyZWN0LCB0aGUgcHJvcGVyIHNvbHV0aW9uIGlzIHRvIGZpeCB0aGVcbiAgICAvLyBzdGFydmF0aW9uLiBIb3dldmVyLCB0aGlzIHNjZW5hcmlvIHN1cHBvcnRzIHRoZSBpZGVhIHRoYXQgZXhwaXJhdGlvblxuICAgIC8vIHRpbWVzIGFyZSBhbiBpbXBvcnRhbnQgc2FmZWd1YXJkIHdoZW4gc3RhcnZhdGlvbiBkb2VzIGhhcHBlbi5cbiAgICAvL1xuICAgIC8vIEFsc28gbm90ZSB0aGF0LCBpbiB0aGUgY2FzZSBvZiB1c2VyIGlucHV0IHNwZWNpZmljYWxseSwgdGhpcyB3aWxsIHNvb24gbm9cbiAgICAvLyBsb25nZXIgYmUgYW4gaXNzdWUgYmVjYXVzZSB3ZSBwbGFuIHRvIG1ha2UgdXNlciBpbnB1dCBzeW5jaHJvbm91cyBieVxuICAgIC8vIGRlZmF1bHQgKHVudGlsIHlvdSBlbnRlciBgc3RhcnRUcmFuc2l0aW9uYCwgb2YgY291cnNlLilcbiAgICAvL1xuICAgIC8vIElmIHdlcmVuJ3QgcGxhbm5pbmcgdG8gbWFrZSB0aGVzZSB1cGRhdGVzIHN5bmNocm9ub3VzIHNvb24gYW55d2F5LCBJXG4gICAgLy8gd291bGQgcHJvYmFibHkgbWFrZSB0aGlzIG51bWJlciBhIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXIuXG4gICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgMjUwO1xuICB9IGVsc2UgaWYgKHByaW9yaXR5ID49IFRyYW5zaXRpb25Qcmlvcml0eSkge1xuICAgIHJldHVybiBjdXJyZW50VGltZSArIDUwMDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gQW55dGhpbmcgaWRsZSBwcmlvcml0eSBvciBsb3dlciBzaG91bGQgbmV2ZXIgZXhwaXJlLlxuICAgIHJldHVybiBOb1RpbWVzdGFtcDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrU3RhcnZlZExhbmVzQXNFeHBpcmVkKHJvb3QsIGN1cnJlbnRUaW1lKSB7XG4gIC8vIFRPRE86IFRoaXMgZ2V0cyBjYWxsZWQgZXZlcnkgdGltZSB3ZSB5aWVsZC4gV2UgY2FuIG9wdGltaXplIGJ5IHN0b3JpbmdcbiAgLy8gdGhlIGVhcmxpZXN0IGV4cGlyYXRpb24gdGltZSBvbiB0aGUgcm9vdC4gVGhlbiB1c2UgdGhhdCB0byBxdWlja2x5IGJhaWwgb3V0XG4gIC8vIG9mIHRoaXMgZnVuY3Rpb24uXG4gIHZhciBwZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcbiAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcbiAgdmFyIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lcztcbiAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzOyAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHBlbmRpbmcgbGFuZXMgYW5kIGNoZWNrIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlaXJcbiAgLy8gZXhwaXJhdGlvbiB0aW1lLiBJZiBzbywgd2UnbGwgYXNzdW1lIHRoZSB1cGRhdGUgaXMgYmVpbmcgc3RhcnZlZCBhbmQgbWFya1xuICAvLyBpdCBhcyBleHBpcmVkIHRvIGZvcmNlIGl0IHRvIGZpbmlzaC5cblxuICB2YXIgbGFuZXMgPSBwZW5kaW5nTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICB2YXIgZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZXNbaW5kZXhdO1xuXG4gICAgaWYgKGV4cGlyYXRpb25UaW1lID09PSBOb1RpbWVzdGFtcCkge1xuICAgICAgLy8gRm91bmQgYSBwZW5kaW5nIGxhbmUgd2l0aCBubyBleHBpcmF0aW9uIHRpbWUuIElmIGl0J3Mgbm90IHN1c3BlbmRlZCwgb3JcbiAgICAgIC8vIGlmIGl0J3MgcGluZ2VkLCBhc3N1bWUgaXQncyBDUFUtYm91bmQuIENvbXB1dGUgYSBuZXcgZXhwaXJhdGlvbiB0aW1lXG4gICAgICAvLyB1c2luZyB0aGUgY3VycmVudCB0aW1lLlxuICAgICAgaWYgKChsYW5lICYgc3VzcGVuZGVkTGFuZXMpID09PSBOb0xhbmVzIHx8IChsYW5lICYgcGluZ2VkTGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIC8vIEFzc3VtZXMgdGltZXN0YW1wcyBhcmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLlxuICAgICAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gY29tcHV0ZUV4cGlyYXRpb25UaW1lKGxhbmUsIGN1cnJlbnRUaW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lKSB7XG4gICAgICAvLyBUaGlzIGxhbmUgZXhwaXJlZFxuICAgICAgcm9vdC5leHBpcmVkTGFuZXMgfD0gbGFuZTtcbiAgICB9XG5cbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufSAvLyBUaGlzIHJldHVybnMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcGVuZGluZyBsYW5lcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleVxuZnVuY3Rpb24gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCkge1xuICB2YXIgZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiA9IHJvb3QucGVuZGluZ0xhbmVzICYgfk9mZnNjcmVlbkxhbmU7XG5cbiAgaWYgKGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm4gZXZlcnl0aGluZ0J1dE9mZnNjcmVlbjtcbiAgfVxuXG4gIGlmIChldmVyeXRoaW5nQnV0T2Zmc2NyZWVuICYgT2Zmc2NyZWVuTGFuZSkge1xuICAgIHJldHVybiBPZmZzY3JlZW5MYW5lO1xuICB9XG5cbiAgcmV0dXJuIE5vTGFuZXM7XG59XG5mdW5jdGlvbiByZXR1cm5OZXh0TGFuZXNQcmlvcml0eSgpIHtcbiAgcmV0dXJuIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xufVxuZnVuY3Rpb24gaW5jbHVkZXNOb25JZGxlV29yayhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgTm9uSWRsZUxhbmVzKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzT25seVJldHJpZXMobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIFJldHJ5TGFuZXMpID09PSBsYW5lcztcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzT25seVRyYW5zaXRpb25zKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBUcmFuc2l0aW9uTGFuZXMpID09PSBsYW5lcztcbn0gLy8gVG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyBtdWx0aXBsZSB1cGRhdGVzIGluIHRoZSBzYW1lIGV2ZW50LCB0aGlzIHNob3VsZFxuLy8gYmUgYSBwdXJlIGZ1bmN0aW9uLCBzbyB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIGxhbmUgZm9yIGdpdmVuIGlucHV0cy5cblxuZnVuY3Rpb24gZmluZFVwZGF0ZUxhbmUobGFuZVByaW9yaXR5LCB3aXBMYW5lcykge1xuICBzd2l0Y2ggKGxhbmVQcmlvcml0eSkge1xuICAgIGNhc2UgTm9MYW5lUHJpb3JpdHk6XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3luY0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBTeW5jTGFuZTtcblxuICAgIGNhc2UgU3luY0JhdGNoZWRMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gU3luY0JhdGNoZWRMYW5lO1xuXG4gICAgY2FzZSBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5OlxuICAgICAge1xuICAgICAgICB2YXIgX2xhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShJbnB1dERpc2NyZXRlTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgIGlmIChfbGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gU2hpZnQgdG8gdGhlIG5leHQgcHJpb3JpdHkgbGV2ZWxcbiAgICAgICAgICByZXR1cm4gZmluZFVwZGF0ZUxhbmUoSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5LCB3aXBMYW5lcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2xhbmU7XG4gICAgICB9XG5cbiAgICBjYXNlIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lMiA9IHBpY2tBcmJpdHJhcnlMYW5lKElucHV0Q29udGludW91c0xhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICBpZiAoX2xhbmUyID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAvLyBTaGlmdCB0byB0aGUgbmV4dCBwcmlvcml0eSBsZXZlbFxuICAgICAgICAgIHJldHVybiBmaW5kVXBkYXRlTGFuZShEZWZhdWx0TGFuZVByaW9yaXR5LCB3aXBMYW5lcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2xhbmUyO1xuICAgICAgfVxuXG4gICAgY2FzZSBEZWZhdWx0TGFuZVByaW9yaXR5OlxuICAgICAge1xuICAgICAgICB2YXIgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoRGVmYXVsdExhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICBpZiAoX2xhbmUzID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAvLyBJZiBhbGwgdGhlIGRlZmF1bHQgbGFuZXMgYXJlIGFscmVhZHkgYmVpbmcgd29ya2VkIG9uLCBsb29rIGZvciBhXG4gICAgICAgICAgLy8gbGFuZSBpbiB0aGUgdHJhbnNpdGlvbiByYW5nZS5cbiAgICAgICAgICBfbGFuZTMgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgICAgaWYgKF9sYW5lMyA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgICAvLyBBbGwgdGhlIHRyYW5zaXRpb24gbGFuZXMgYXJlIHRha2VuLCB0b28uIFRoaXMgc2hvdWxkIGJlIHZlcnlcbiAgICAgICAgICAgIC8vIHJhcmUsIGJ1dCBhcyBhIGxhc3QgcmVzb3J0LCBwaWNrIGEgZGVmYXVsdCBsYW5lLiBUaGlzIHdpbGwgaGF2ZVxuICAgICAgICAgICAgLy8gdGhlIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgd29yay1pbi1wcm9ncmVzcyByZW5kZXIuXG4gICAgICAgICAgICBfbGFuZTMgPSBwaWNrQXJiaXRyYXJ5TGFuZShEZWZhdWx0TGFuZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfbGFuZTM7XG4gICAgICB9XG5cbiAgICBjYXNlIFRyYW5zaXRpb25Qcmlvcml0eTogLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgZmluZFRyYW5zaXRpb25MYW5lIGluc3RlYWRcblxuICAgIGNhc2UgUmV0cnlMYW5lUHJpb3JpdHk6XG4gICAgICAvLyBTaG91bGQgYmUgaGFuZGxlZCBieSBmaW5kUmV0cnlMYW5lIGluc3RlYWRcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBJZGxlTGFuZVByaW9yaXR5OlxuICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShJZGxlTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShJZGxlTGFuZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFuZTtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIHVwZGF0ZSBwcmlvcml0eTogXCIgKyBsYW5lUHJpb3JpdHkgKyBcIi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIiApO1xuICAgIH1cbiAgfVxufSAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzIG11bHRpcGxlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgZXZlbnQsIHRoaXMgc2hvdWxkXG4vLyBiZSBwdXJlIGZ1bmN0aW9uLCBzbyB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIGxhbmUgZm9yIGdpdmVuIGlucHV0cy5cblxuZnVuY3Rpb24gZmluZFRyYW5zaXRpb25MYW5lKHdpcExhbmVzLCBwZW5kaW5nTGFuZXMpIHtcbiAgLy8gRmlyc3QgbG9vayBmb3IgbGFuZXMgdGhhdCBhcmUgY29tcGxldGVseSB1bmNsYWltZWQsIGkuZS4gaGF2ZSBub1xuICAvLyBwZW5kaW5nIHdvcmsuXG4gIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfnBlbmRpbmdMYW5lcyk7XG5cbiAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgIC8vIElmIGFsbCBsYW5lcyBoYXZlIHBlbmRpbmcgd29yaywgbG9vayBmb3IgYSBsYW5lIHRoYXQgaXNuJ3QgY3VycmVudGx5XG4gICAgLy8gYmVpbmcgd29ya2VkIG9uLlxuICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgICAgLy8gSWYgZXZlcnl0aGluZyBpcyBiZWluZyB3b3JrZWQgb24sIHBpY2sgYW55IGxhbmUuIFRoaXMgaGFzIHRoZVxuICAgICAgLy8gZWZmZWN0IG9mIGludGVycnVwdGluZyB0aGUgY3VycmVudCB3b3JrLWluLXByb2dyZXNzLlxuICAgICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59IC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgdXBkYXRlcyBpbiB0aGUgc2FtZSBldmVudCwgdGhpcyBzaG91bGRcbi8vIGJlIHB1cmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgbGFuZSBmb3IgZ2l2ZW4gaW5wdXRzLlxuXG5mdW5jdGlvbiBmaW5kUmV0cnlMYW5lKHdpcExhbmVzKSB7XG4gIC8vIFRoaXMgaXMgYSBmb3JrIG9mIGBmaW5kVXBkYXRlTGFuZWAgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBTdXNwZW5zZVxuICAvLyBcInJldHJpZXNcIiBcdTIwMTQgYSBzcGVjaWFsIHVwZGF0ZSB0aGF0IGF0dGVtcHRzIHRvIGZsaXAgYSBTdXNwZW5zZSBib3VuZGFyeVxuICAvLyBmcm9tIGl0cyBwbGFjZWhvbGRlciBzdGF0ZSB0byBpdHMgcHJpbWFyeS9yZXNvbHZlZCBzdGF0ZS5cbiAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShSZXRyeUxhbmVzICYgfndpcExhbmVzKTtcblxuICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFJldHJ5TGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59XG5cbmZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobGFuZXMpIHtcbiAgcmV0dXJuIGxhbmVzICYgLWxhbmVzO1xufVxuXG5mdW5jdGlvbiBnZXRMb3dlc3RQcmlvcml0eUxhbmUobGFuZXMpIHtcbiAgLy8gVGhpcyBmaW5kcyB0aGUgbW9zdCBzaWduaWZpY2FudCBub24temVybyBiaXQuXG4gIHZhciBpbmRleCA9IDMxIC0gY2x6MzIobGFuZXMpO1xuICByZXR1cm4gaW5kZXggPCAwID8gTm9MYW5lcyA6IDEgPDwgaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGdldEVxdWFsT3JIaWdoZXJQcmlvcml0eUxhbmVzKGxhbmVzKSB7XG4gIHJldHVybiAoZ2V0TG93ZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSA8PCAxKSAtIDE7XG59XG5cbmZ1bmN0aW9uIHBpY2tBcmJpdHJhcnlMYW5lKGxhbmVzKSB7XG4gIC8vIFRoaXMgd3JhcHBlciBmdW5jdGlvbiBnZXRzIGlubGluZWQuIE9ubHkgZXhpc3RzIHNvIHRvIGNvbW11bmljYXRlIHRoYXQgaXRcbiAgLy8gZG9lc24ndCBtYXR0ZXIgd2hpY2ggYml0IGlzIHNlbGVjdGVkOyB5b3UgY2FuIHBpY2sgYW55IGJpdCB3aXRob3V0XG4gIC8vIGFmZmVjdGluZyB0aGUgYWxnb3JpdGhtcyB3aGVyZSBpdHMgdXNlZC4gSGVyZSBJJ20gdXNpbmdcbiAgLy8gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZSBiZWNhdXNlIGl0IHJlcXVpcmVzIHRoZSBmZXdlc3Qgb3BlcmF0aW9ucy5cbiAgcmV0dXJuIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobGFuZXMpO1xufVxuXG5mdW5jdGlvbiBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKSB7XG4gIHJldHVybiAzMSAtIGNsejMyKGxhbmVzKTtcbn1cblxuZnVuY3Rpb24gbGFuZVRvSW5kZXgobGFuZSkge1xuICByZXR1cm4gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lKTtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXNTb21lTGFuZShhLCBiKSB7XG4gIHJldHVybiAoYSAmIGIpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gaXNTdWJzZXRPZkxhbmVzKHNldCwgc3Vic2V0KSB7XG4gIHJldHVybiAoc2V0ICYgc3Vic2V0KSA9PT0gc3Vic2V0O1xufVxuZnVuY3Rpb24gbWVyZ2VMYW5lcyhhLCBiKSB7XG4gIHJldHVybiBhIHwgYjtcbn1cbmZ1bmN0aW9uIHJlbW92ZUxhbmVzKHNldCwgc3Vic2V0KSB7XG4gIHJldHVybiBzZXQgJiB+c3Vic2V0O1xufSAvLyBTZWVtcyByZWR1bmRhbnQsIGJ1dCBpdCBjaGFuZ2VzIHRoZSB0eXBlIGZyb20gYSBzaW5nbGUgbGFuZSAodXNlZCBmb3Jcbi8vIHVwZGF0ZXMpIHRvIGEgZ3JvdXAgb2YgbGFuZXMgKHVzZWQgZm9yIGZsdXNoaW5nIHdvcmspLlxuXG5mdW5jdGlvbiBsYW5lVG9MYW5lcyhsYW5lKSB7XG4gIHJldHVybiBsYW5lO1xufVxuZnVuY3Rpb24gaGlnaGVyUHJpb3JpdHlMYW5lKGEsIGIpIHtcbiAgLy8gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBiaXQgcmFuZ2VzIGRlY3JlYXNlIGluIHByaW9yaXR5IGFzIHlvdSBnbyBsZWZ0LlxuICByZXR1cm4gYSAhPT0gTm9MYW5lICYmIGEgPCBiID8gYSA6IGI7XG59XG5mdW5jdGlvbiBjcmVhdGVMYW5lTWFwKGluaXRpYWwpIHtcbiAgLy8gSW50ZW50aW9uYWxseSBwdXNoaW5nIG9uZSBieSBvbmUuXG4gIC8vIGh0dHBzOi8vdjguZGV2L2Jsb2cvZWxlbWVudHMta2luZHMjYXZvaWQtY3JlYXRpbmctaG9sZXNcbiAgdmFyIGxhbmVNYXAgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IFRvdGFsTGFuZXM7IGkrKykge1xuICAgIGxhbmVNYXAucHVzaChpbml0aWFsKTtcbiAgfVxuXG4gIHJldHVybiBsYW5lTWFwO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RVcGRhdGVkKHJvb3QsIHVwZGF0ZUxhbmUsIGV2ZW50VGltZSkge1xuICByb290LnBlbmRpbmdMYW5lcyB8PSB1cGRhdGVMYW5lOyAvLyBUT0RPOiBUaGVvcmV0aWNhbGx5LCBhbnkgdXBkYXRlIHRvIGFueSBsYW5lIGNhbiB1bmJsb2NrIGFueSBvdGhlciBsYW5lLiBCdXRcbiAgLy8gaXQncyBub3QgcHJhY3RpY2FsIHRvIHRyeSBldmVyeSBzaW5nbGUgcG9zc2libGUgY29tYmluYXRpb24uIFdlIG5lZWQgYVxuICAvLyBoZXVyaXN0aWMgdG8gZGVjaWRlIHdoaWNoIGxhbmVzIHRvIGF0dGVtcHQgdG8gcmVuZGVyLCBhbmQgaW4gd2hpY2ggYmF0Y2hlcy5cbiAgLy8gRm9yIG5vdywgd2UgdXNlIHRoZSBzYW1lIGhldXJpc3RpYyBhcyBpbiB0aGUgb2xkIEV4cGlyYXRpb25UaW1lcyBtb2RlbDpcbiAgLy8gcmV0cnkgYW55IGxhbmUgYXQgZXF1YWwgb3IgbG93ZXIgcHJpb3JpdHksIGJ1dCBkb24ndCB0cnkgdXBkYXRlcyBhdCBoaWdoZXJcbiAgLy8gcHJpb3JpdHkgd2l0aG91dCBhbHNvIGluY2x1ZGluZyB0aGUgbG93ZXIgcHJpb3JpdHkgdXBkYXRlcy4gVGhpcyB3b3JrcyB3ZWxsXG4gIC8vIHdoZW4gY29uc2lkZXJpbmcgdXBkYXRlcyBhY3Jvc3MgZGlmZmVyZW50IHByaW9yaXR5IGxldmVscywgYnV0IGlzbid0XG4gIC8vIHN1ZmZpY2llbnQgZm9yIHVwZGF0ZXMgd2l0aGluIHRoZSBzYW1lIHByaW9yaXR5LCBzaW5jZSB3ZSB3YW50IHRvIHRyZWF0XG4gIC8vIHRob3NlIHVwZGF0ZXMgYXMgcGFyYWxsZWwuXG4gIC8vIFVuc3VzcGVuZCBhbnkgdXBkYXRlIGF0IGVxdWFsIG9yIGxvd2VyIHByaW9yaXR5LlxuXG4gIHZhciBoaWdoZXJQcmlvcml0eUxhbmVzID0gdXBkYXRlTGFuZSAtIDE7IC8vIFR1cm5zIDBiMTAwMCBpbnRvIDBiMDExMVxuXG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgJj0gaGlnaGVyUHJpb3JpdHlMYW5lcztcbiAgcm9vdC5waW5nZWRMYW5lcyAmPSBoaWdoZXJQcmlvcml0eUxhbmVzO1xuICB2YXIgZXZlbnRUaW1lcyA9IHJvb3QuZXZlbnRUaW1lcztcbiAgdmFyIGluZGV4ID0gbGFuZVRvSW5kZXgodXBkYXRlTGFuZSk7IC8vIFdlIGNhbiBhbHdheXMgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIHRpbWVzdGFtcCBiZWNhdXNlIHdlIHByZWZlciB0aGUgbW9zdFxuICAvLyByZWNlbnQgZXZlbnQsIGFuZCB3ZSBhc3N1bWUgdGltZSBpcyBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuXG5cbiAgZXZlbnRUaW1lc1tpbmRleF0gPSBldmVudFRpbWU7XG59XG5mdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBzdXNwZW5kZWRMYW5lcykge1xuICByb290LnN1c3BlbmRlZExhbmVzIHw9IHN1c3BlbmRlZExhbmVzO1xuICByb290LnBpbmdlZExhbmVzICY9IH5zdXNwZW5kZWRMYW5lczsgLy8gVGhlIHN1c3BlbmRlZCBsYW5lcyBhcmUgbm8gbG9uZ2VyIENQVS1ib3VuZC4gQ2xlYXIgdGhlaXIgZXhwaXJhdGlvbiB0aW1lcy5cblxuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7XG4gIHZhciBsYW5lcyA9IHN1c3BlbmRlZExhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrUm9vdFBpbmdlZChyb290LCBwaW5nZWRMYW5lcywgZXZlbnRUaW1lKSB7XG4gIHJvb3QucGluZ2VkTGFuZXMgfD0gcm9vdC5zdXNwZW5kZWRMYW5lcyAmIHBpbmdlZExhbmVzO1xufVxuZnVuY3Rpb24gbWFya0Rpc2NyZXRlVXBkYXRlc0V4cGlyZWQocm9vdCkge1xuICByb290LmV4cGlyZWRMYW5lcyB8PSBJbnB1dERpc2NyZXRlTGFuZXMgJiByb290LnBlbmRpbmdMYW5lcztcbn1cbmZ1bmN0aW9uIGhhc0Rpc2NyZXRlTGFuZXMobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIElucHV0RGlzY3JldGVMYW5lcykgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBtYXJrUm9vdE11dGFibGVSZWFkKHJvb3QsIHVwZGF0ZUxhbmUpIHtcbiAgcm9vdC5tdXRhYmxlUmVhZExhbmVzIHw9IHVwZGF0ZUxhbmUgJiByb290LnBlbmRpbmdMYW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtSb290RmluaXNoZWQocm9vdCwgcmVtYWluaW5nTGFuZXMpIHtcbiAgdmFyIG5vTG9uZ2VyUGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXMgJiB+cmVtYWluaW5nTGFuZXM7XG4gIHJvb3QucGVuZGluZ0xhbmVzID0gcmVtYWluaW5nTGFuZXM7IC8vIExldCdzIHRyeSBldmVyeXRoaW5nIGFnYWluXG5cbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyA9IDA7XG4gIHJvb3QucGluZ2VkTGFuZXMgPSAwO1xuICByb290LmV4cGlyZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5tdXRhYmxlUmVhZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICByb290LmVudGFuZ2xlZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgdmFyIGV2ZW50VGltZXMgPSByb290LmV2ZW50VGltZXM7XG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lczsgLy8gQ2xlYXIgdGhlIGxhbmVzIHRoYXQgbm8gbG9uZ2VyIGhhdmUgcGVuZGluZyB3b3JrXG5cbiAgdmFyIGxhbmVzID0gbm9Mb25nZXJQZW5kaW5nTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICBlbnRhbmdsZW1lbnRzW2luZGV4XSA9IE5vTGFuZXM7XG4gICAgZXZlbnRUaW1lc1tpbmRleF0gPSBOb1RpbWVzdGFtcDtcbiAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIGVudGFuZ2xlZExhbmVzKSB7XG4gIHJvb3QuZW50YW5nbGVkTGFuZXMgfD0gZW50YW5nbGVkTGFuZXM7XG4gIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICB2YXIgbGFuZXMgPSBlbnRhbmdsZWRMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIGVudGFuZ2xlbWVudHNbaW5kZXhdIHw9IGVudGFuZ2xlZExhbmVzO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG52YXIgY2x6MzIgPSBNYXRoLmNsejMyID8gTWF0aC5jbHozMiA6IGNsejMyRmFsbGJhY2s7IC8vIENvdW50IGxlYWRpbmcgemVyb3MuIE9ubHkgdXNlZCBvbiBsYW5lcywgc28gYXNzdW1lIGlucHV0IGlzIGFuIGludGVnZXIuXG4vLyBCYXNlZCBvbjpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvY2x6MzJcblxudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xuXG5mdW5jdGlvbiBjbHozMkZhbGxiYWNrKGxhbmVzKSB7XG4gIGlmIChsYW5lcyA9PT0gMCkge1xuICAgIHJldHVybiAzMjtcbiAgfVxuXG4gIHJldHVybiAzMSAtIChsb2cobGFuZXMpIC8gTE4yIHwgMCkgfCAwO1xufVxuXG4vLyBJbnRlbnRpb25hbGx5IG5vdCBuYW1lZCBpbXBvcnRzIGJlY2F1c2UgUm9sbHVwIHdvdWxkIHVzZSBkeW5hbWljIGRpc3BhdGNoIGZvclxudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksXG4gICAgcnVuV2l0aFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eTsgLy8gVE9ETzogY2FuIHdlIHN0b3AgZXhwb3J0aW5nIHRoZXNlP1xuXG52YXIgX2VuYWJsZWQgPSB0cnVlOyAvLyBUaGlzIGlzIGV4cG9ydGVkIGluIEZCIGJ1aWxkcyBmb3IgdXNlIGJ5IGxlZ2FjeSBGQiBsYXllciBpbmZyYS5cbi8vIFdlJ2QgbGlrZSB0byByZW1vdmUgdGhpcyBidXQgaXQncyBub3QgY2xlYXIgaWYgdGhpcyBpcyBzYWZlLlxuXG5mdW5jdGlvbiBzZXRFbmFibGVkKGVuYWJsZWQpIHtcbiAgX2VuYWJsZWQgPSAhIWVuYWJsZWQ7XG59XG5mdW5jdGlvbiBpc0VuYWJsZWQoKSB7XG4gIHJldHVybiBfZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyV2l0aFByaW9yaXR5KHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzKSB7XG4gIHZhciBldmVudFByaW9yaXR5ID0gZ2V0RXZlbnRQcmlvcml0eUZvclBsdWdpblN5c3RlbShkb21FdmVudE5hbWUpO1xuICB2YXIgbGlzdGVuZXJXcmFwcGVyO1xuXG4gIHN3aXRjaCAoZXZlbnRQcmlvcml0eSkge1xuICAgIGNhc2UgRGlzY3JldGVFdmVudDpcbiAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoRGlzY3JldGVFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdFdmVudDpcbiAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoVXNlckJsb2NraW5nVXBkYXRlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIENvbnRpbnVvdXNFdmVudDpcbiAgICBkZWZhdWx0OlxuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hFdmVudDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVyV3JhcHBlci5iaW5kKG51bGwsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB7XG4gICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJZk5lZWRlZChuYXRpdmVFdmVudC50aW1lU3RhbXApO1xuICB9XG5cbiAgZGlzY3JldGVVcGRhdGVzKGRpc3BhdGNoRXZlbnQsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoVXNlckJsb2NraW5nVXBkYXRlKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB7XG4gICAgcnVuV2l0aFByaW9yaXR5KFVzZXJCbG9ja2luZ1ByaW9yaXR5JDEsIGRpc3BhdGNoRXZlbnQuYmluZChudWxsLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICBpZiAoIV9lbmFibGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGFsbG93UmVwbGF5ID0gdHJ1ZTtcblxuICB7XG4gICAgLy8gVE9ETzogcmVwbGF5aW5nIGNhcHR1cmUgcGhhc2UgZXZlbnRzIGlzIGN1cnJlbnRseSBicm9rZW5cbiAgICAvLyBiZWNhdXNlIHdlIHVzZWQgdG8gZG8gaXQgZHVyaW5nIHRvcC1sZXZlbCBuYXRpdmUgYnViYmxlIGhhbmRsZXJzXG4gICAgLy8gYnV0IG5vdyB3ZSB1c2UgZGlmZmVyZW50IGJ1YmJsZSBhbmQgY2FwdHVyZSBoYW5kbGVycy5cbiAgICAvLyBJbiBlYWdlciBtb2RlLCB3ZSBhdHRhY2ggY2FwdHVyZSBsaXN0ZW5lcnMgZWFybHksIHNvIHdlIG5lZWRcbiAgICAvLyB0byBmaWx0ZXIgdGhlbSBvdXQgdW50aWwgd2UgZml4IHRoZSBsb2dpYyB0byBoYW5kbGUgdGhlbSBjb3JyZWN0bHkuXG4gICAgLy8gVGhpcyBjb3VsZCd2ZSBiZWVuIG91dHNpZGUgdGhlIGZsYWcgYnV0IEkgcHV0IGl0IGluc2lkZSB0byByZWR1Y2Ugcmlzay5cbiAgICBhbGxvd1JlcGxheSA9IChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSkgPT09IDA7XG4gIH1cblxuICBpZiAoYWxsb3dSZXBsYXkgJiYgaGFzUXVldWVkRGlzY3JldGVFdmVudHMoKSAmJiBpc1JlcGxheWFibGVEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSkpIHtcbiAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYSBxdWV1ZSBvZiBkaXNjcmV0ZSBldmVudHMsIGFuZCB0aGlzIGlzIGFub3RoZXIgZGlzY3JldGVcbiAgICAvLyBldmVudCwgdGhlbiB3ZSBjYW4ndCBkaXNwYXRjaCBpdCByZWdhcmRsZXNzIG9mIGl0cyB0YXJnZXQsIHNpbmNlIHRoZXlcbiAgICAvLyBuZWVkIHRvIGRpc3BhdGNoIGluIG9yZGVyLlxuICAgIHF1ZXVlRGlzY3JldGVFdmVudChudWxsLCAvLyBGbGFncyB0aGF0IHdlJ3JlIG5vdCBhY3R1YWxseSBibG9ja2VkIG9uIGFueXRoaW5nIGFzIGZhciBhcyB3ZSBrbm93LlxuICAgIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGJsb2NrZWRPbiA9IGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcblxuICBpZiAoYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgLy8gV2Ugc3VjY2Vzc2Z1bGx5IGRpc3BhdGNoZWQgdGhpcyBldmVudC5cbiAgICBpZiAoYWxsb3dSZXBsYXkpIHtcbiAgICAgIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFsbG93UmVwbGF5KSB7XG4gICAgaWYgKGlzUmVwbGF5YWJsZURpc2NyZXRlRXZlbnQoZG9tRXZlbnROYW1lKSkge1xuICAgICAgLy8gVGhpcyB0aGlzIHRvIGJlIHJlcGxheWVkIGxhdGVyIG9uY2UgdGhlIHRhcmdldCBpcyBhdmFpbGFibGUuXG4gICAgICBxdWV1ZURpc2NyZXRlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChxdWV1ZUlmQ29udGludW91c0V2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2UgbmVlZCB0byBjbGVhciBvbmx5IGlmIHdlIGRpZG4ndCBxdWV1ZSBiZWNhdXNlXG4gICAgLy8gcXVldWVpbmcgaXMgYWNjdW1tdWxhdGl2ZS5cblxuXG4gICAgY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgfSAvLyBUaGlzIGlzIG5vdCByZXBsYXlhYmxlIHNvIHdlJ2xsIGludm9rZSBpdCBidXQgd2l0aG91dCBhIHRhcmdldCxcbiAgLy8gaW4gY2FzZSB0aGUgZXZlbnQgc3lzdGVtIG5lZWRzIHRvIHRyYWNlIGl0LlxuXG5cbiAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIG51bGwsIHRhcmdldENvbnRhaW5lcik7XG59IC8vIEF0dGVtcHQgZGlzcGF0Y2hpbmcgYW4gZXZlbnQuIFJldHVybnMgYSBTdXNwZW5zZUluc3RhbmNlIG9yIENvbnRhaW5lciBpZiBpdCdzIGJsb2NrZWQuXG5cbmZ1bmN0aW9uIGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIFRPRE86IFdhcm4gaWYgX2VuYWJsZWQgaXMgZmFsc2UuXG4gIHZhciBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgdmFyIHRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRhcmdldEluc3QpO1xuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkID09PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIHRyZWUgaGFzIGJlZW4gdW5tb3VudGVkIGFscmVhZHkuIERpc3BhdGNoIHdpdGhvdXQgYSB0YXJnZXQuXG4gICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcblxuICAgICAgaWYgKHRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gUXVldWUgdGhlIGV2ZW50IHRvIGJlIHJlcGxheWVkIGxhdGVyLiBBYm9ydCBkaXNwYXRjaGluZyBzaW5jZSB3ZVxuICAgICAgICAgIC8vIGRvbid0IHdhbnQgdGhpcyBldmVudCBkaXNwYXRjaGVkIHR3aWNlIHRocm91Z2ggdGhlIGV2ZW50IHN5c3RlbS5cbiAgICAgICAgICAvLyBUT0RPOiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBkaXNjcmV0ZSBldmVudCBpbiB0aGUgcXVldWUuIFNjaGVkdWxlIGFuIGluY3JlYXNlZFxuICAgICAgICAgIC8vIHByaW9yaXR5IGZvciB0aGlzIGJvdW5kYXJ5LlxuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfSAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4sIHNvbWV0aGluZyB3ZW50IHdyb25nIGJ1dCB0byBhdm9pZCBibG9ja2luZ1xuICAgICAgICAvLyB0aGUgd2hvbGUgc3lzdGVtLCBkaXNwYXRjaCB0aGUgZXZlbnQgd2l0aG91dCBhIHRhcmdldC5cbiAgICAgICAgLy8gVE9ETzogV2Fybi5cblxuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIHZhciByb290ID0gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGhhcHBlbnMgZHVyaW5nIGEgcmVwbGF5IHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCBpdCBtaWdodCBibG9ja1xuICAgICAgICAgIC8vIHRoZSB3aG9sZSBzeXN0ZW0uXG4gICAgICAgICAgcmV0dXJuIGdldENvbnRhaW5lckZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAobmVhcmVzdE1vdW50ZWQgIT09IHRhcmdldEluc3QpIHtcbiAgICAgICAgLy8gSWYgd2UgZ2V0IGFuIGV2ZW50IChleDogaW1nIG9ubG9hZCkgYmVmb3JlIGNvbW1pdHRpbmcgdGhhdFxuICAgICAgICAvLyBjb21wb25lbnQncyBtb3VudCwgaWdub3JlIGl0IGZvciBub3cgKHRoYXQgaXMsIHRyZWF0IGl0IGFzIGlmIGl0IHdhcyBhblxuICAgICAgICAvLyBldmVudCBvbiBhIG5vbi1SZWFjdCB0cmVlKS4gV2UgbWlnaHQgYWxzbyBjb25zaWRlciBxdWV1ZWluZyBldmVudHMgYW5kXG4gICAgICAgIC8vIGRpc3BhdGNoaW5nIHRoZW0gYWZ0ZXIgdGhlIG1vdW50LlxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgdGFyZ2V0SW5zdCwgdGFyZ2V0Q29udGFpbmVyKTsgLy8gV2UncmUgbm90IGJsb2NrZWQgb24gYW55dGhpbmcuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGFkZEV2ZW50QnViYmxlTGlzdGVuZXIodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXIodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIHBhc3NpdmUpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwge1xuICAgIGNhcHR1cmU6IHRydWUsXG4gICAgcGFzc2l2ZTogcGFzc2l2ZVxuICB9KTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIHBhc3NpdmUpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwge1xuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cblxuLyoqXG4gKiBUaGVzZSB2YXJpYWJsZXMgc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGV4dCBjb250ZW50IG9mIGEgdGFyZ2V0IG5vZGUsXG4gKiBhbGxvd2luZyBjb21wYXJpc29uIG9mIGNvbnRlbnQgYmVmb3JlIGFuZCBhZnRlciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIElkZW50aWZ5IHRoZSBub2RlIHdoZXJlIHNlbGVjdGlvbiBjdXJyZW50bHkgYmVnaW5zLCB0aGVuIG9ic2VydmVcbiAqIGJvdGggaXRzIHRleHQgY29udGVudCBhbmQgaXRzIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIERPTS4gU2luY2UgdGhlXG4gKiBicm93c2VyIG1heSBuYXRpdmVseSByZXBsYWNlIHRoZSB0YXJnZXQgbm9kZSBkdXJpbmcgY29tcG9zaXRpb24sIHdlIGNhblxuICogdXNlIGl0cyBwb3NpdGlvbiB0byBmaW5kIGl0cyByZXBsYWNlbWVudC5cbiAqXG4gKlxuICovXG52YXIgcm9vdCA9IG51bGw7XG52YXIgc3RhcnRUZXh0ID0gbnVsbDtcbnZhciBmYWxsYmFja1RleHQgPSBudWxsO1xuZnVuY3Rpb24gaW5pdGlhbGl6ZShuYXRpdmVFdmVudFRhcmdldCkge1xuICByb290ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gIHN0YXJ0VGV4dCA9IGdldFRleHQoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiByZXNldCgpIHtcbiAgcm9vdCA9IG51bGw7XG4gIHN0YXJ0VGV4dCA9IG51bGw7XG4gIGZhbGxiYWNrVGV4dCA9IG51bGw7XG59XG5mdW5jdGlvbiBnZXREYXRhKCkge1xuICBpZiAoZmFsbGJhY2tUZXh0KSB7XG4gICAgcmV0dXJuIGZhbGxiYWNrVGV4dDtcbiAgfVxuXG4gIHZhciBzdGFydDtcbiAgdmFyIHN0YXJ0VmFsdWUgPSBzdGFydFRleHQ7XG4gIHZhciBzdGFydExlbmd0aCA9IHN0YXJ0VmFsdWUubGVuZ3RoO1xuICB2YXIgZW5kO1xuICB2YXIgZW5kVmFsdWUgPSBnZXRUZXh0KCk7XG4gIHZhciBlbmRMZW5ndGggPSBlbmRWYWx1ZS5sZW5ndGg7XG5cbiAgZm9yIChzdGFydCA9IDA7IHN0YXJ0IDwgc3RhcnRMZW5ndGg7IHN0YXJ0KyspIHtcbiAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydF0gIT09IGVuZFZhbHVlW3N0YXJ0XSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIG1pbkVuZCA9IHN0YXJ0TGVuZ3RoIC0gc3RhcnQ7XG5cbiAgZm9yIChlbmQgPSAxOyBlbmQgPD0gbWluRW5kOyBlbmQrKykge1xuICAgIGlmIChzdGFydFZhbHVlW3N0YXJ0TGVuZ3RoIC0gZW5kXSAhPT0gZW5kVmFsdWVbZW5kTGVuZ3RoIC0gZW5kXSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIHNsaWNlVGFpbCA9IGVuZCA+IDEgPyAxIC0gZW5kIDogdW5kZWZpbmVkO1xuICBmYWxsYmFja1RleHQgPSBlbmRWYWx1ZS5zbGljZShzdGFydCwgc2xpY2VUYWlsKTtcbiAgcmV0dXJuIGZhbGxiYWNrVGV4dDtcbn1cbmZ1bmN0aW9uIGdldFRleHQoKSB7XG4gIGlmICgndmFsdWUnIGluIHJvb3QpIHtcbiAgICByZXR1cm4gcm9vdC52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByb290LnRleHRDb250ZW50O1xufVxuXG4vKipcbiAqIGBjaGFyQ29kZWAgcmVwcmVzZW50cyB0aGUgYWN0dWFsIFwiY2hhcmFjdGVyIGNvZGVcIiBhbmQgaXMgc2FmZSB0byB1c2Ugd2l0aFxuICogYFN0cmluZy5mcm9tQ2hhckNvZGVgLiBBcyBzdWNoLCBvbmx5IGtleXMgdGhhdCBjb3JyZXNwb25kIHRvIHByaW50YWJsZVxuICogY2hhcmFjdGVycyBwcm9kdWNlIGEgdmFsaWQgYGNoYXJDb2RlYCwgdGhlIG9ubHkgZXhjZXB0aW9uIHRvIHRoaXMgaXMgRW50ZXIuXG4gKiBUaGUgVGFiLWtleSBpcyBjb25zaWRlcmVkIG5vbi1wcmludGFibGUgYW5kIGRvZXMgbm90IGhhdmUgYSBgY2hhckNvZGVgLFxuICogcHJlc3VtYWJseSBiZWNhdXNlIGl0IGRvZXMgbm90IHByb2R1Y2UgYSB0YWItY2hhcmFjdGVyIGluIGJyb3dzZXJzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge251bWJlcn0gTm9ybWFsaXplZCBgY2hhckNvZGVgIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBjaGFyQ29kZTtcbiAgdmFyIGtleUNvZGUgPSBuYXRpdmVFdmVudC5rZXlDb2RlO1xuXG4gIGlmICgnY2hhckNvZGUnIGluIG5hdGl2ZUV2ZW50KSB7XG4gICAgY2hhckNvZGUgPSBuYXRpdmVFdmVudC5jaGFyQ29kZTsgLy8gRkYgZG9lcyBub3Qgc2V0IGBjaGFyQ29kZWAgZm9yIHRoZSBFbnRlci1rZXksIGNoZWNrIGFnYWluc3QgYGtleUNvZGVgLlxuXG4gICAgaWYgKGNoYXJDb2RlID09PSAwICYmIGtleUNvZGUgPT09IDEzKSB7XG4gICAgICBjaGFyQ29kZSA9IDEzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJRTggZG9lcyBub3QgaW1wbGVtZW50IGBjaGFyQ29kZWAsIGJ1dCBga2V5Q29kZWAgaGFzIHRoZSBjb3JyZWN0IHZhbHVlLlxuICAgIGNoYXJDb2RlID0ga2V5Q29kZTtcbiAgfSAvLyBJRSBhbmQgRWRnZSAob24gV2luZG93cykgYW5kIENocm9tZSAvIFNhZmFyaSAob24gV2luZG93cyBhbmQgTGludXgpXG4gIC8vIHJlcG9ydCBFbnRlciBhcyBjaGFyQ29kZSAxMCB3aGVuIGN0cmwgaXMgcHJlc3NlZC5cblxuXG4gIGlmIChjaGFyQ29kZSA9PT0gMTApIHtcbiAgICBjaGFyQ29kZSA9IDEzO1xuICB9IC8vIFNvbWUgbm9uLXByaW50YWJsZSBrZXlzIGFyZSByZXBvcnRlZCBpbiBgY2hhckNvZGVgL2BrZXlDb2RlYCwgZGlzY2FyZCB0aGVtLlxuICAvLyBNdXN0IG5vdCBkaXNjYXJkIHRoZSAobm9uLSlwcmludGFibGUgRW50ZXIta2V5LlxuXG5cbiAgaWYgKGNoYXJDb2RlID49IDMyIHx8IGNoYXJDb2RlID09PSAxMykge1xuICAgIHJldHVybiBjaGFyQ29kZTtcbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSgpIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufSAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYSBmYWN0b3J5IHNvIHRoYXQgd2UgaGF2ZSBkaWZmZXJlbnQgcmV0dXJuZWQgY29uc3RydWN0b3JzLlxuLy8gSWYgd2UgaGFkIGEgc2luZ2xlIGNvbnN0cnVjdG9yLCBpdCB3b3VsZCBiZSBtZWdhbW9ycGhpYyBhbmQgZW5naW5lcyB3b3VsZCBkZW9wdC5cblxuXG5mdW5jdGlvbiBjcmVhdGVTeW50aGV0aWNFdmVudChJbnRlcmZhY2UpIHtcbiAgLyoqXG4gICAqIFN5bnRoZXRpYyBldmVudHMgYXJlIGRpc3BhdGNoZWQgYnkgZXZlbnQgcGx1Z2lucywgdHlwaWNhbGx5IGluIHJlc3BvbnNlIHRvIGFcbiAgICogdG9wLWxldmVsIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxlci5cbiAgICpcbiAgICogVGhlc2Ugc3lzdGVtcyBzaG91bGQgZ2VuZXJhbGx5IHVzZSBwb29saW5nIHRvIHJlZHVjZSB0aGUgZnJlcXVlbmN5IG9mIGdhcmJhZ2VcbiAgICogY29sbGVjdGlvbi4gVGhlIHN5c3RlbSBzaG91bGQgY2hlY2sgYGlzUGVyc2lzdGVudGAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gICAqIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBpbnRvIHRoZSBwb29sIGFmdGVyIGJlaW5nIGRpc3BhdGNoZWQuIFVzZXJzIHRoYXRcbiAgICogbmVlZCBhIHBlcnNpc3RlZCBldmVudCBzaG91bGQgaW52b2tlIGBwZXJzaXN0YC5cbiAgICpcbiAgICogU3ludGhldGljIGV2ZW50cyAoYW5kIHN1YmNsYXNzZXMpIGltcGxlbWVudCB0aGUgRE9NIExldmVsIDMgRXZlbnRzIEFQSSBieVxuICAgKiBub3JtYWxpemluZyBicm93c2VyIHF1aXJrcy4gU3ViY2xhc3NlcyBkbyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBpbXBsZW1lbnQgYVxuICAgKiBET00gaW50ZXJmYWNlOyBjdXN0b20gYXBwbGljYXRpb24tc3BlY2lmaWMgZXZlbnRzIGNhbiBhbHNvIHN1YmNsYXNzIHRoaXMuXG4gICAqL1xuICBmdW5jdGlvbiBTeW50aGV0aWNCYXNlRXZlbnQocmVhY3ROYW1lLCByZWFjdEV2ZW50VHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgdGhpcy5fcmVhY3ROYW1lID0gcmVhY3ROYW1lO1xuICAgIHRoaXMuX3RhcmdldEluc3QgPSB0YXJnZXRJbnN0O1xuICAgIHRoaXMudHlwZSA9IHJlYWN0RXZlbnRUeXBlO1xuICAgIHRoaXMubmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICB0aGlzLnRhcmdldCA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICAgIHRoaXMuY3VycmVudFRhcmdldCA9IG51bGw7XG5cbiAgICBmb3IgKHZhciBfcHJvcE5hbWUgaW4gSW50ZXJmYWNlKSB7XG4gICAgICBpZiAoIUludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShfcHJvcE5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbm9ybWFsaXplID0gSW50ZXJmYWNlW19wcm9wTmFtZV07XG5cbiAgICAgIGlmIChub3JtYWxpemUpIHtcbiAgICAgICAgdGhpc1tfcHJvcE5hbWVdID0gbm9ybWFsaXplKG5hdGl2ZUV2ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbX3Byb3BOYW1lXSA9IG5hdGl2ZUV2ZW50W19wcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkICE9IG51bGwgPyBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkIDogbmF0aXZlRXZlbnQucmV0dXJuVmFsdWUgPT09IGZhbHNlO1xuXG4gICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBfYXNzaWduKFN5bnRoZXRpY0Jhc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG5cbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gJEZsb3dGaXhNZSAtIGZsb3cgaXMgbm90IGF3YXJlIG9mIGB1bmtub3duYCBpbiBJRVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQucmV0dXJuVmFsdWUgIT09ICd1bmtub3duJykge1xuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0sXG4gICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gJEZsb3dGaXhNZSAtIGZsb3cgaXMgbm90IGF3YXJlIG9mIGB1bmtub3duYCBpbiBJRVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQuY2FuY2VsQnViYmxlICE9PSAndW5rbm93bicpIHtcbiAgICAgICAgLy8gVGhlIENoYW5nZUV2ZW50UGx1Z2luIHJlZ2lzdGVycyBhIFwicHJvcGVydHljaGFuZ2VcIiBldmVudCBmb3JcbiAgICAgICAgLy8gSUUuIFRoaXMgZXZlbnQgZG9lcyBub3Qgc3VwcG9ydCBidWJibGluZyBvciBjYW5jZWxsaW5nLCBhbmRcbiAgICAgICAgLy8gYW55IHJlZmVyZW5jZXMgdG8gY2FuY2VsQnViYmxlIHRocm93IFwiTWVtYmVyIG5vdCBmb3VuZFwiLiAgQVxuICAgICAgICAvLyB0eXBlb2YgY2hlY2sgb2YgXCJ1bmtub3duXCIgY2lyY3VtdmVudHMgdGhpcyBpc3N1ZSAoYW5kIGlzIGFsc29cbiAgICAgICAgLy8gSUUgc3BlY2lmaWMpLlxuICAgICAgICBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdlIHJlbGVhc2UgYWxsIGRpc3BhdGNoZWQgYFN5bnRoZXRpY0V2ZW50YHMgYWZ0ZXIgZWFjaCBldmVudCBsb29wLCBhZGRpbmdcbiAgICAgKiB0aGVtIGJhY2sgaW50byB0aGUgcG9vbC4gVGhpcyBhbGxvd3MgYSB3YXkgdG8gaG9sZCBvbnRvIGEgcmVmZXJlbmNlIHRoYXRcbiAgICAgKiB3b24ndCBiZSBhZGRlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAgICovXG4gICAgcGVyc2lzdDogZnVuY3Rpb24gKCkgey8vIE1vZGVybiBldmVudCBzeXN0ZW0gZG9lc24ndCB1c2UgcG9vbGluZy5cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoaXMgZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGJhY2sgaW50byB0aGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhpcyBzaG91bGQgbm90IGJlIHJlbGVhc2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaXNQZXJzaXN0ZW50OiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZVxuICB9KTtcblxuICByZXR1cm4gU3ludGhldGljQmFzZUV2ZW50O1xufVxuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG5cbnZhciBFdmVudEludGVyZmFjZSA9IHtcbiAgZXZlbnRQaGFzZTogMCxcbiAgYnViYmxlczogMCxcbiAgY2FuY2VsYWJsZTogMCxcbiAgdGltZVN0YW1wOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gIH0sXG4gIGRlZmF1bHRQcmV2ZW50ZWQ6IDAsXG4gIGlzVHJ1c3RlZDogMFxufTtcbnZhciBTeW50aGV0aWNFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEV2ZW50SW50ZXJmYWNlKTtcblxudmFyIFVJRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICB2aWV3OiAwLFxuICBkZXRhaWw6IDBcbn0pO1xuXG52YXIgU3ludGhldGljVUlFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFVJRXZlbnRJbnRlcmZhY2UpO1xudmFyIGxhc3RNb3ZlbWVudFg7XG52YXIgbGFzdE1vdmVtZW50WTtcbnZhciBsYXN0TW91c2VFdmVudDtcblxuZnVuY3Rpb24gdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoZXZlbnQpIHtcbiAgaWYgKGV2ZW50ICE9PSBsYXN0TW91c2VFdmVudCkge1xuICAgIGlmIChsYXN0TW91c2VFdmVudCAmJiBldmVudC50eXBlID09PSAnbW91c2Vtb3ZlJykge1xuICAgICAgbGFzdE1vdmVtZW50WCA9IGV2ZW50LnNjcmVlblggLSBsYXN0TW91c2VFdmVudC5zY3JlZW5YO1xuICAgICAgbGFzdE1vdmVtZW50WSA9IGV2ZW50LnNjcmVlblkgLSBsYXN0TW91c2VFdmVudC5zY3JlZW5ZO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0TW92ZW1lbnRYID0gMDtcbiAgICAgIGxhc3RNb3ZlbWVudFkgPSAwO1xuICAgIH1cblxuICAgIGxhc3RNb3VzZUV2ZW50ID0gZXZlbnQ7XG4gIH1cbn1cbi8qKlxuICogQGludGVyZmFjZSBNb3VzZUV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG5cbnZhciBNb3VzZUV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICBzY3JlZW5YOiAwLFxuICBzY3JlZW5ZOiAwLFxuICBjbGllbnRYOiAwLFxuICBjbGllbnRZOiAwLFxuICBwYWdlWDogMCxcbiAgcGFnZVk6IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgYnV0dG9uOiAwLFxuICBidXR0b25zOiAwLFxuICByZWxhdGVkVGFyZ2V0OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZXZlbnQuZnJvbUVsZW1lbnQgPT09IGV2ZW50LnNyY0VsZW1lbnQgPyBldmVudC50b0VsZW1lbnQgOiBldmVudC5mcm9tRWxlbWVudDtcbiAgICByZXR1cm4gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgfSxcbiAgbW92ZW1lbnRYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoJ21vdmVtZW50WCcgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBldmVudC5tb3ZlbWVudFg7XG4gICAgfVxuXG4gICAgdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoZXZlbnQpO1xuICAgIHJldHVybiBsYXN0TW92ZW1lbnRYO1xuICB9LFxuICBtb3ZlbWVudFk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmICgnbW92ZW1lbnRZJyBpbiBldmVudCkge1xuICAgICAgcmV0dXJuIGV2ZW50Lm1vdmVtZW50WTtcbiAgICB9IC8vIERvbid0IG5lZWQgdG8gY2FsbCB1cGRhdGVNb3VzZU1vdmVtZW50UG9seWZpbGxTdGF0ZSgpIGhlcmVcbiAgICAvLyBiZWNhdXNlIGl0J3MgZ3VhcmFudGVlZCB0byBoYXZlIGFscmVhZHkgcnVuIHdoZW4gbW92ZW1lbnRYXG4gICAgLy8gd2FzIGNvcGllZC5cblxuXG4gICAgcmV0dXJuIGxhc3RNb3ZlbWVudFk7XG4gIH1cbn0pO1xuXG52YXIgU3ludGhldGljTW91c2VFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KE1vdXNlRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIERyYWdFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIERyYWdFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGF0YVRyYW5zZmVyOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0RyYWdFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KERyYWdFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRm9jdXNFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIEZvY3VzRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHJlbGF0ZWRUYXJnZXQ6IDBcbn0pO1xuXG52YXIgU3ludGhldGljRm9jdXNFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEZvY3VzRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtYW5pbWF0aW9ucy8jQW5pbWF0aW9uRXZlbnQtaW50ZXJmYWNlXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9BbmltYXRpb25FdmVudFxuICovXG5cbnZhciBBbmltYXRpb25FdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIGFuaW1hdGlvbk5hbWU6IDAsXG4gIGVsYXBzZWRUaW1lOiAwLFxuICBwc2V1ZG9FbGVtZW50OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2NsaXBib2FyZC1hcGlzL1xuICovXG5cbnZhciBDbGlwYm9hcmRFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIGNsaXBib2FyZERhdGE6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnY2xpcGJvYXJkRGF0YScgaW4gZXZlbnQgPyBldmVudC5jbGlwYm9hcmREYXRhIDogd2luZG93LmNsaXBib2FyZERhdGE7XG4gIH1cbn0pO1xuXG52YXIgU3ludGhldGljQ2xpcGJvYXJkRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChDbGlwYm9hcmRFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtY29tcG9zaXRpb25ldmVudHNcbiAqL1xuXG52YXIgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIGRhdGE6IDBcbn0pO1xuXG52YXIgU3ludGhldGljQ29tcG9zaXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMTMxMTA1XG4gKiAgICAgIC8jZXZlbnRzLWlucHV0ZXZlbnRzXG4gKi9cbi8vIEhhcHBlbnMgdG8gc2hhcmUgdGhlIHNhbWUgbGlzdCBmb3Igbm93LlxuXG52YXIgU3ludGhldGljSW5wdXRFdmVudCA9IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQ7XG4vKipcbiAqIE5vcm1hbGl6YXRpb24gb2YgZGVwcmVjYXRlZCBIVE1MNSBga2V5YCB2YWx1ZXNcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQjS2V5X25hbWVzXG4gKi9cblxudmFyIG5vcm1hbGl6ZUtleSA9IHtcbiAgRXNjOiAnRXNjYXBlJyxcbiAgU3BhY2ViYXI6ICcgJyxcbiAgTGVmdDogJ0Fycm93TGVmdCcsXG4gIFVwOiAnQXJyb3dVcCcsXG4gIFJpZ2h0OiAnQXJyb3dSaWdodCcsXG4gIERvd246ICdBcnJvd0Rvd24nLFxuICBEZWw6ICdEZWxldGUnLFxuICBXaW46ICdPUycsXG4gIE1lbnU6ICdDb250ZXh0TWVudScsXG4gIEFwcHM6ICdDb250ZXh0TWVudScsXG4gIFNjcm9sbDogJ1Njcm9sbExvY2snLFxuICBNb3pQcmludGFibGVLZXk6ICdVbmlkZW50aWZpZWQnXG59O1xuLyoqXG4gKiBUcmFuc2xhdGlvbiBmcm9tIGxlZ2FjeSBga2V5Q29kZWAgdG8gSFRNTDUgYGtleWBcbiAqIE9ubHkgc3BlY2lhbCBrZXlzIHN1cHBvcnRlZCwgYWxsIG90aGVycyBkZXBlbmQgb24ga2V5Ym9hcmQgbGF5b3V0IG9yIGJyb3dzZXJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQjS2V5X25hbWVzXG4gKi9cblxudmFyIHRyYW5zbGF0ZVRvS2V5ID0ge1xuICAnOCc6ICdCYWNrc3BhY2UnLFxuICAnOSc6ICdUYWInLFxuICAnMTInOiAnQ2xlYXInLFxuICAnMTMnOiAnRW50ZXInLFxuICAnMTYnOiAnU2hpZnQnLFxuICAnMTcnOiAnQ29udHJvbCcsXG4gICcxOCc6ICdBbHQnLFxuICAnMTknOiAnUGF1c2UnLFxuICAnMjAnOiAnQ2Fwc0xvY2snLFxuICAnMjcnOiAnRXNjYXBlJyxcbiAgJzMyJzogJyAnLFxuICAnMzMnOiAnUGFnZVVwJyxcbiAgJzM0JzogJ1BhZ2VEb3duJyxcbiAgJzM1JzogJ0VuZCcsXG4gICczNic6ICdIb21lJyxcbiAgJzM3JzogJ0Fycm93TGVmdCcsXG4gICczOCc6ICdBcnJvd1VwJyxcbiAgJzM5JzogJ0Fycm93UmlnaHQnLFxuICAnNDAnOiAnQXJyb3dEb3duJyxcbiAgJzQ1JzogJ0luc2VydCcsXG4gICc0Nic6ICdEZWxldGUnLFxuICAnMTEyJzogJ0YxJyxcbiAgJzExMyc6ICdGMicsXG4gICcxMTQnOiAnRjMnLFxuICAnMTE1JzogJ0Y0JyxcbiAgJzExNic6ICdGNScsXG4gICcxMTcnOiAnRjYnLFxuICAnMTE4JzogJ0Y3JyxcbiAgJzExOSc6ICdGOCcsXG4gICcxMjAnOiAnRjknLFxuICAnMTIxJzogJ0YxMCcsXG4gICcxMjInOiAnRjExJyxcbiAgJzEyMyc6ICdGMTInLFxuICAnMTQ0JzogJ051bUxvY2snLFxuICAnMTQ1JzogJ1Njcm9sbExvY2snLFxuICAnMjI0JzogJ01ldGEnXG59O1xuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgYGtleWAgcHJvcGVydHkuXG4gKi9cblxuZnVuY3Rpb24gZ2V0RXZlbnRLZXkobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LmtleSkge1xuICAgIC8vIE5vcm1hbGl6ZSBpbmNvbnNpc3RlbnQgdmFsdWVzIHJlcG9ydGVkIGJ5IGJyb3dzZXJzIGR1ZSB0b1xuICAgIC8vIGltcGxlbWVudGF0aW9ucyBvZiBhIHdvcmtpbmcgZHJhZnQgc3BlY2lmaWNhdGlvbi5cbiAgICAvLyBGaXJlRm94IGltcGxlbWVudHMgYGtleWAgYnV0IHJldHVybnMgYE1velByaW50YWJsZUtleWAgZm9yIGFsbFxuICAgIC8vIHByaW50YWJsZSBjaGFyYWN0ZXJzIChub3JtYWxpemVkIHRvIGBVbmlkZW50aWZpZWRgKSwgaWdub3JlIGl0LlxuICAgIHZhciBrZXkgPSBub3JtYWxpemVLZXlbbmF0aXZlRXZlbnQua2V5XSB8fCBuYXRpdmVFdmVudC5rZXk7XG5cbiAgICBpZiAoa2V5ICE9PSAnVW5pZGVudGlmaWVkJykge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH0gLy8gQnJvd3NlciBkb2VzIG5vdCBpbXBsZW1lbnQgYGtleWAsIHBvbHlmaWxsIGFzIG11Y2ggb2YgaXQgYXMgd2UgY2FuLlxuXG5cbiAgaWYgKG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICB2YXIgY2hhckNvZGUgPSBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KTsgLy8gVGhlIGVudGVyLWtleSBpcyB0ZWNobmljYWxseSBib3RoIHByaW50YWJsZSBhbmQgbm9uLXByaW50YWJsZSBhbmQgY2FuXG4gICAgLy8gdGh1cyBiZSBjYXB0dXJlZCBieSBga2V5cHJlc3NgLCBubyBvdGhlciBub24tcHJpbnRhYmxlIGtleSBzaG91bGQuXG5cbiAgICByZXR1cm4gY2hhckNvZGUgPT09IDEzID8gJ0VudGVyJyA6IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpO1xuICB9XG5cbiAgaWYgKG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBuYXRpdmVFdmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgLy8gV2hpbGUgdXNlciBrZXlib2FyZCBsYXlvdXQgZGV0ZXJtaW5lcyB0aGUgYWN0dWFsIG1lYW5pbmcgb2YgZWFjaFxuICAgIC8vIGBrZXlDb2RlYCB2YWx1ZSwgYWxtb3N0IGFsbCBmdW5jdGlvbiBrZXlzIGhhdmUgYSB1bml2ZXJzYWwgdmFsdWUuXG4gICAgcmV0dXJuIHRyYW5zbGF0ZVRvS2V5W25hdGl2ZUV2ZW50LmtleUNvZGVdIHx8ICdVbmlkZW50aWZpZWQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuLyoqXG4gKiBUcmFuc2xhdGlvbiBmcm9tIG1vZGlmaWVyIGtleSB0byB0aGUgYXNzb2NpYXRlZCBwcm9wZXJ0eSBpbiB0aGUgZXZlbnQuXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8ja2V5cy1Nb2RpZmllcnNcbiAqL1xuXG5cbnZhciBtb2RpZmllcktleVRvUHJvcCA9IHtcbiAgQWx0OiAnYWx0S2V5JyxcbiAgQ29udHJvbDogJ2N0cmxLZXknLFxuICBNZXRhOiAnbWV0YUtleScsXG4gIFNoaWZ0OiAnc2hpZnRLZXknXG59OyAvLyBPbGRlciBicm93c2VycyAoU2FmYXJpIDw9IDEwLCBpT1MgU2FmYXJpIDw9IDEwLjIpIGRvIG5vdCBzdXBwb3J0XG4vLyBnZXRNb2RpZmllclN0YXRlLiBJZiBnZXRNb2RpZmllclN0YXRlIGlzIG5vdCBzdXBwb3J0ZWQsIHdlIG1hcCBpdCB0byBhIHNldCBvZlxuLy8gbW9kaWZpZXIga2V5cyBleHBvc2VkIGJ5IHRoZSBldmVudC4gSW4gdGhpcyBjYXNlLCBMb2NrLWtleXMgYXJlIG5vdCBzdXBwb3J0ZWQuXG5cbmZ1bmN0aW9uIG1vZGlmaWVyU3RhdGVHZXR0ZXIoa2V5QXJnKSB7XG4gIHZhciBzeW50aGV0aWNFdmVudCA9IHRoaXM7XG4gIHZhciBuYXRpdmVFdmVudCA9IHN5bnRoZXRpY0V2ZW50Lm5hdGl2ZUV2ZW50O1xuXG4gIGlmIChuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUoa2V5QXJnKTtcbiAgfVxuXG4gIHZhciBrZXlQcm9wID0gbW9kaWZpZXJLZXlUb1Byb3Bba2V5QXJnXTtcbiAgcmV0dXJuIGtleVByb3AgPyAhIW5hdGl2ZUV2ZW50W2tleVByb3BdIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50TW9kaWZpZXJTdGF0ZShuYXRpdmVFdmVudCkge1xuICByZXR1cm4gbW9kaWZpZXJTdGF0ZUdldHRlcjtcbn1cbi8qKlxuICogQGludGVyZmFjZSBLZXlib2FyZEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG5cbnZhciBLZXlib2FyZEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICBrZXk6IGdldEV2ZW50S2V5LFxuICBjb2RlOiAwLFxuICBsb2NhdGlvbjogMCxcbiAgY3RybEtleTogMCxcbiAgc2hpZnRLZXk6IDAsXG4gIGFsdEtleTogMCxcbiAgbWV0YUtleTogMCxcbiAgcmVwZWF0OiAwLFxuICBsb2NhbGU6IDAsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgLy8gTGVnYWN5IEludGVyZmFjZVxuICBjaGFyQ29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYGNoYXJDb2RlYCBpcyB0aGUgcmVzdWx0IG9mIGEgS2V5UHJlc3MgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gdGhlIGFjdHVhbCBwcmludGFibGUgY2hhcmFjdGVyLlxuICAgIC8vIEtleVByZXNzIGlzIGRlcHJlY2F0ZWQsIGJ1dCBpdHMgcmVwbGFjZW1lbnQgaXMgbm90IHlldCBmaW5hbCBhbmQgbm90XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gYW55IG1ham9yIGJyb3dzZXIuIE9ubHkgS2V5UHJlc3MgaGFzIGNoYXJDb2RlLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIGtleUNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGBrZXlDb2RlYCBpcyB0aGUgcmVzdWx0IG9mIGEgS2V5RG93bi9VcCBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyBwaHlzaWNhbCBrZXlib2FyZCBrZXkuXG4gICAgLy8gVGhlIGFjdHVhbCBtZWFuaW5nIG9mIHRoZSB2YWx1ZSBkZXBlbmRzIG9uIHRoZSB1c2Vycycga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gd2hpY2ggY2Fubm90IGJlIGRldGVjdGVkLiBBc3N1bWluZyB0aGF0IGl0IGlzIGEgVVMga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gcHJvdmlkZXMgYSBzdXJwcmlzaW5nbHkgYWNjdXJhdGUgbWFwcGluZyBmb3IgVVMgYW5kIEV1cm9wZWFuIHVzZXJzLlxuICAgIC8vIER1ZSB0byB0aGlzLCBpdCBpcyBsZWZ0IHRvIHRoZSB1c2VyIHRvIGltcGxlbWVudCBhdCB0aGlzIHRpbWUuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAgd2hpY2g6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGB3aGljaGAgaXMgYW4gYWxpYXMgZm9yIGVpdGhlciBga2V5Q29kZWAgb3IgYGNoYXJDb2RlYCBkZXBlbmRpbmcgb24gdGhlXG4gICAgLy8gdHlwZSBvZiB0aGUgZXZlbnQuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICAgIHJldHVybiBnZXRFdmVudENoYXJDb2RlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChLZXlib2FyZEV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBQb2ludGVyRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvcG9pbnRlcmV2ZW50cy9cbiAqL1xuXG52YXIgUG9pbnRlckV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICBwb2ludGVySWQ6IDAsXG4gIHdpZHRoOiAwLFxuICBoZWlnaHQ6IDAsXG4gIHByZXNzdXJlOiAwLFxuICB0YW5nZW50aWFsUHJlc3N1cmU6IDAsXG4gIHRpbHRYOiAwLFxuICB0aWx0WTogMCxcbiAgdHdpc3Q6IDAsXG4gIHBvaW50ZXJUeXBlOiAwLFxuICBpc1ByaW1hcnk6IDBcbn0pO1xuXG52YXIgU3ludGhldGljUG9pbnRlckV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoUG9pbnRlckV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBUb3VjaEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3RvdWNoLWV2ZW50cy9cbiAqL1xuXG52YXIgVG91Y2hFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgdG91Y2hlczogMCxcbiAgdGFyZ2V0VG91Y2hlczogMCxcbiAgY2hhbmdlZFRvdWNoZXM6IDAsXG4gIGFsdEtleTogMCxcbiAgbWV0YUtleTogMCxcbiAgY3RybEtleTogMCxcbiAgc2hpZnRLZXk6IDAsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZVxufSk7XG5cbnZhciBTeW50aGV0aWNUb3VjaEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVG91Y2hFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOS9XRC1jc3MzLXRyYW5zaXRpb25zLTIwMDkwMzIwLyN0cmFuc2l0aW9uLWV2ZW50cy1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RyYW5zaXRpb25FdmVudFxuICovXG5cbnZhciBUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBwcm9wZXJ0eU5hbWU6IDAsXG4gIGVsYXBzZWRUaW1lOiAwLFxuICBwc2V1ZG9FbGVtZW50OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRyYW5zaXRpb25FdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgV2hlZWxFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIFdoZWVsRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIGRlbHRhWDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdkZWx0YVgnIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFYIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFYYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKHJpZ2h0IGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YVgnIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGFYIDogMDtcbiAgfSxcbiAgZGVsdGFZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2RlbHRhWScgaW4gZXZlbnQgPyBldmVudC5kZWx0YVkgOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVlgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGFZJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhWSA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhYCBmb3IgSUU8OSBhbmQgbm9ybWFsaXplIChkb3duIGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YScgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YSA6IDA7XG4gIH0sXG4gIGRlbHRhWjogMCxcbiAgLy8gQnJvd3NlcnMgd2l0aG91dCBcImRlbHRhTW9kZVwiIGlzIHJlcG9ydGluZyBpbiByYXcgd2hlZWwgZGVsdGEgd2hlcmUgb25lXG4gIC8vIG5vdGNoIG9uIHRoZSBzY3JvbGwgaXMgYWx3YXlzICsvLSAxMjAsIHJvdWdobHkgZXF1aXZhbGVudCB0byBwaXhlbHMuXG4gIC8vIEEgZ29vZCBhcHByb3hpbWF0aW9uIG9mIERPTV9ERUxUQV9MSU5FICgxKSBpcyA1JSBvZiB2aWV3cG9ydCBzaXplIG9yXG4gIC8vIH40MCBwaXhlbHMsIGZvciBET01fREVMVEFfU0NSRUVOICgyKSBpdCBpcyA4Ny41JSBvZiB2aWV3cG9ydCBzaXplLlxuICBkZWx0YU1vZGU6IDBcbn0pO1xuXG52YXIgU3ludGhldGljV2hlZWxFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFdoZWVsRXZlbnRJbnRlcmZhY2UpO1xuXG52YXIgRU5EX0tFWUNPREVTID0gWzksIDEzLCAyNywgMzJdOyAvLyBUYWIsIFJldHVybiwgRXNjLCBTcGFjZVxuXG52YXIgU1RBUlRfS0VZQ09ERSA9IDIyOTtcbnZhciBjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ID0gY2FuVXNlRE9NICYmICdDb21wb3NpdGlvbkV2ZW50JyBpbiB3aW5kb3c7XG52YXIgZG9jdW1lbnRNb2RlID0gbnVsbDtcblxuaWYgKGNhblVzZURPTSAmJiAnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCkge1xuICBkb2N1bWVudE1vZGUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59IC8vIFdlYmtpdCBvZmZlcnMgYSB2ZXJ5IHVzZWZ1bCBgdGV4dElucHV0YCBldmVudCB0aGF0IGNhbiBiZSB1c2VkIHRvXG4vLyBkaXJlY3RseSByZXByZXNlbnQgYGJlZm9yZUlucHV0YC4gVGhlIElFIGB0ZXh0aW5wdXRgIGV2ZW50IGlzIG5vdCBhc1xuLy8gdXNlZnVsLCBzbyB3ZSBkb24ndCB1c2UgaXQuXG5cblxudmFyIGNhblVzZVRleHRJbnB1dEV2ZW50ID0gY2FuVXNlRE9NICYmICdUZXh0RXZlbnQnIGluIHdpbmRvdyAmJiAhZG9jdW1lbnRNb2RlOyAvLyBJbiBJRTkrLCB3ZSBoYXZlIGFjY2VzcyB0byBjb21wb3NpdGlvbiBldmVudHMsIGJ1dCB0aGUgZGF0YSBzdXBwbGllZFxuLy8gYnkgdGhlIG5hdGl2ZSBjb21wb3NpdGlvbmVuZCBldmVudCBtYXkgYmUgaW5jb3JyZWN0LiBKYXBhbmVzZSBpZGVvZ3JhcGhpY1xuLy8gc3BhY2VzLCBmb3IgaW5zdGFuY2UgKFxcdTMwMDApIGFyZSBub3QgcmVjb3JkZWQgY29ycmVjdGx5LlxuXG52YXIgdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgPSBjYW5Vc2VET00gJiYgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50IHx8IGRvY3VtZW50TW9kZSAmJiBkb2N1bWVudE1vZGUgPiA4ICYmIGRvY3VtZW50TW9kZSA8PSAxMSk7XG52YXIgU1BBQ0VCQVJfQ09ERSA9IDMyO1xudmFyIFNQQUNFQkFSX0NIQVIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFNQQUNFQkFSX0NPREUpO1xuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cygpIHtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkJlZm9yZUlucHV0JywgWydjb21wb3NpdGlvbmVuZCcsICdrZXlwcmVzcycsICd0ZXh0SW5wdXQnLCAncGFzdGUnXSk7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25Db21wb3NpdGlvbkVuZCcsIFsnY29tcG9zaXRpb25lbmQnLCAnZm9jdXNvdXQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdtb3VzZWRvd24nXSk7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25Db21wb3NpdGlvblN0YXJ0JywgWydjb21wb3NpdGlvbnN0YXJ0JywgJ2ZvY3Vzb3V0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnbW91c2Vkb3duJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25VcGRhdGUnLCBbJ2NvbXBvc2l0aW9udXBkYXRlJywgJ2ZvY3Vzb3V0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnbW91c2Vkb3duJ10pO1xufSAvLyBUcmFjayB3aGV0aGVyIHdlJ3ZlIGV2ZXIgaGFuZGxlZCBhIGtleXByZXNzIG9uIHRoZSBzcGFjZSBrZXkuXG5cblxudmFyIGhhc1NwYWNlS2V5cHJlc3MgPSBmYWxzZTtcbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYSBuYXRpdmUga2V5cHJlc3MgZXZlbnQgaXMgYXNzdW1lZCB0byBiZSBhIGNvbW1hbmQuXG4gKiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgRmlyZWZveCBmaXJlcyBga2V5cHJlc3NgIGV2ZW50cyBmb3Iga2V5IGNvbW1hbmRzXG4gKiAoY3V0LCBjb3B5LCBzZWxlY3QtYWxsLCBldGMuKSBldmVuIHRob3VnaCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQuXG4gKi9cblxuZnVuY3Rpb24gaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIChuYXRpdmVFdmVudC5jdHJsS2V5IHx8IG5hdGl2ZUV2ZW50LmFsdEtleSB8fCBuYXRpdmVFdmVudC5tZXRhS2V5KSAmJiAvLyBjdHJsS2V5ICYmIGFsdEtleSBpcyBlcXVpdmFsZW50IHRvIEFsdEdyLCBhbmQgaXMgbm90IGEgY29tbWFuZC5cbiAgIShuYXRpdmVFdmVudC5jdHJsS2V5ICYmIG5hdGl2ZUV2ZW50LmFsdEtleSk7XG59XG4vKipcbiAqIFRyYW5zbGF0ZSBuYXRpdmUgdG9wIGxldmVsIGV2ZW50cyBpbnRvIGV2ZW50IHR5cGVzLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUoZG9tRXZlbnROYW1lKSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnY29tcG9zaXRpb25zdGFydCc6XG4gICAgICByZXR1cm4gJ29uQ29tcG9zaXRpb25TdGFydCc7XG5cbiAgICBjYXNlICdjb21wb3NpdGlvbmVuZCc6XG4gICAgICByZXR1cm4gJ29uQ29tcG9zaXRpb25FbmQnO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb251cGRhdGUnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uVXBkYXRlJztcbiAgfVxufVxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBiZXN0LWd1ZXNzIG1vZGVsIHRoaW5rIHRoaXMgZXZlbnQgc2lnbmlmaWVzIHRoYXRcbiAqIGNvbXBvc2l0aW9uIGhhcyBiZWd1bj9cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wb3NpdGlvblN0YXJ0KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIGRvbUV2ZW50TmFtZSA9PT0gJ2tleWRvd24nICYmIG5hdGl2ZUV2ZW50LmtleUNvZGUgPT09IFNUQVJUX0tFWUNPREU7XG59XG4vKipcbiAqIERvZXMgb3VyIGZhbGxiYWNrIG1vZGUgdGhpbmsgdGhhdCB0aGlzIGV2ZW50IGlzIHRoZSBlbmQgb2YgY29tcG9zaXRpb24/XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIC8vIENvbW1hbmQga2V5cyBpbnNlcnQgb3IgY2xlYXIgSU1FIGlucHV0LlxuICAgICAgcmV0dXJuIEVORF9LRVlDT0RFUy5pbmRleE9mKG5hdGl2ZUV2ZW50LmtleUNvZGUpICE9PSAtMTtcblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgICAgLy8gRXhwZWN0IElNRSBrZXlDb2RlIG9uIGVhY2gga2V5ZG93bi4gSWYgd2UgZ2V0IGFueSBvdGhlclxuICAgICAgLy8gY29kZSB3ZSBtdXN0IGhhdmUgZXhpdGVkIGVhcmxpZXIuXG4gICAgICByZXR1cm4gbmF0aXZlRXZlbnQua2V5Q29kZSAhPT0gU1RBUlRfS0VZQ09ERTtcblxuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIC8vIEV2ZW50cyBhcmUgbm90IHBvc3NpYmxlIHdpdGhvdXQgY2FuY2VsbGluZyBJTUUuXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogR29vZ2xlIElucHV0IFRvb2xzIHByb3ZpZGVzIGNvbXBvc2l0aW9uIGRhdGEgdmlhIGEgQ3VzdG9tRXZlbnQsXG4gKiB3aXRoIHRoZSBgZGF0YWAgcHJvcGVydHkgcG9wdWxhdGVkIGluIHRoZSBgZGV0YWlsYCBvYmplY3QuIElmIHRoaXNcbiAqIGlzIGF2YWlsYWJsZSBvbiB0aGUgZXZlbnQgb2JqZWN0LCB1c2UgaXQuIElmIG5vdCwgdGhpcyBpcyBhIHBsYWluXG4gKiBjb21wb3NpdGlvbiBldmVudCBhbmQgd2UgaGF2ZSBub3RoaW5nIHNwZWNpYWwgdG8gZXh0cmFjdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4gez9zdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBkZXRhaWwgPSBuYXRpdmVFdmVudC5kZXRhaWw7XG5cbiAgaWYgKHR5cGVvZiBkZXRhaWwgPT09ICdvYmplY3QnICYmICdkYXRhJyBpbiBkZXRhaWwpIHtcbiAgICByZXR1cm4gZGV0YWlsLmRhdGE7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYSBjb21wb3NpdGlvbiBldmVudCB3YXMgdHJpZ2dlcmVkIGJ5IEtvcmVhbiBJTUUuXG4gKiBPdXIgZmFsbGJhY2sgbW9kZSBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBJRSdzIEtvcmVhbiBJTUUsXG4gKiBzbyBqdXN0IHVzZSBuYXRpdmUgY29tcG9zaXRpb24gZXZlbnRzIHdoZW4gS29yZWFuIElNRSBpcyB1c2VkLlxuICogQWx0aG91Z2ggQ29tcG9zaXRpb25FdmVudC5sb2NhbGUgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCxcbiAqIGl0IGlzIGF2YWlsYWJsZSBpbiBJRSwgd2hlcmUgb3VyIGZhbGxiYWNrIG1vZGUgaXMgZW5hYmxlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBuYXRpdmVFdmVudC5sb2NhbGUgPT09ICdrbyc7XG59IC8vIFRyYWNrIHRoZSBjdXJyZW50IElNRSBjb21wb3NpdGlvbiBzdGF0dXMsIGlmIGFueS5cblxuXG52YXIgaXNDb21wb3NpbmcgPSBmYWxzZTtcbi8qKlxuICogQHJldHVybiB7P29iamVjdH0gQSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LlxuICovXG5cbmZ1bmN0aW9uIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBldmVudFR5cGU7XG4gIHZhciBmYWxsYmFja0RhdGE7XG5cbiAgaWYgKGNhblVzZUNvbXBvc2l0aW9uRXZlbnQpIHtcbiAgICBldmVudFR5cGUgPSBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZShkb21FdmVudE5hbWUpO1xuICB9IGVsc2UgaWYgKCFpc0NvbXBvc2luZykge1xuICAgIGlmIChpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgZXZlbnRUeXBlID0gJ29uQ29tcG9zaXRpb25TdGFydCc7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSkge1xuICAgIGV2ZW50VHlwZSA9ICdvbkNvbXBvc2l0aW9uRW5kJztcbiAgfVxuXG4gIGlmICghZXZlbnRUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgJiYgIWlzVXNpbmdLb3JlYW5JTUUobmF0aXZlRXZlbnQpKSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgY29tcG9zaXRpb24gaXMgc3RvcmVkIHN0YXRpY2FsbHkgYW5kIG11c3Qgbm90IGJlXG4gICAgLy8gb3ZlcndyaXR0ZW4gd2hpbGUgY29tcG9zaXRpb24gY29udGludWVzLlxuICAgIGlmICghaXNDb21wb3NpbmcgJiYgZXZlbnRUeXBlID09PSAnb25Db21wb3NpdGlvblN0YXJ0Jykge1xuICAgICAgaXNDb21wb3NpbmcgPSBpbml0aWFsaXplKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ29uQ29tcG9zaXRpb25FbmQnKSB7XG4gICAgICBpZiAoaXNDb21wb3NpbmcpIHtcbiAgICAgICAgZmFsbGJhY2tEYXRhID0gZ2V0RGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0SW5zdCwgZXZlbnRUeXBlKTtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljQ29tcG9zaXRpb25FdmVudChldmVudFR5cGUsIGRvbUV2ZW50TmFtZSwgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcblxuICAgIGlmIChmYWxsYmFja0RhdGEpIHtcbiAgICAgIC8vIEluamVjdCBkYXRhIGdlbmVyYXRlZCBmcm9tIGZhbGxiYWNrIHBhdGggaW50byB0aGUgc3ludGhldGljIGV2ZW50LlxuICAgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBwcm9wZXJ0eSBvZiBuYXRpdmUgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZS5cbiAgICAgIGV2ZW50LmRhdGEgPSBmYWxsYmFja0RhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjdXN0b21EYXRhID0gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCk7XG5cbiAgICAgIGlmIChjdXN0b21EYXRhICE9PSBudWxsKSB7XG4gICAgICAgIGV2ZW50LmRhdGEgPSBjdXN0b21EYXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdjb21wb3NpdGlvbmVuZCc6XG4gICAgICByZXR1cm4gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCk7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvKipcbiAgICAgICAqIElmIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudHMgYXJlIGF2YWlsYWJsZSwgb3VyIGdvYWwgaXMgdG8gbWFrZVxuICAgICAgICogdXNlIG9mIHRoZW0uIEhvd2V2ZXIsIHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlOiB0aGUgc3BhY2ViYXIga2V5LlxuICAgICAgICogSW4gV2Via2l0LCBwcmV2ZW50aW5nIGRlZmF1bHQgb24gYSBzcGFjZWJhciBgdGV4dElucHV0YCBldmVudFxuICAgICAgICogY2FuY2VscyBjaGFyYWN0ZXIgaW5zZXJ0aW9uLCBidXQgaXQgKmFsc28qIGNhdXNlcyB0aGUgYnJvd3NlclxuICAgICAgICogdG8gZmFsbCBiYWNrIHRvIGl0cyBkZWZhdWx0IHNwYWNlYmFyIGJlaGF2aW9yIG9mIHNjcm9sbGluZyB0aGVcbiAgICAgICAqIHBhZ2UuXG4gICAgICAgKlxuICAgICAgICogVHJhY2tpbmcgYXQ6XG4gICAgICAgKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MzU1MTAzXG4gICAgICAgKlxuICAgICAgICogVG8gYXZvaWQgdGhpcyBpc3N1ZSwgdXNlIHRoZSBrZXlwcmVzcyBldmVudCBhcyBpZiBubyBgdGV4dElucHV0YFxuICAgICAgICogZXZlbnQgaXMgYXZhaWxhYmxlLlxuICAgICAgICovXG4gICAgICB2YXIgd2hpY2ggPSBuYXRpdmVFdmVudC53aGljaDtcblxuICAgICAgaWYgKHdoaWNoICE9PSBTUEFDRUJBUl9DT0RFKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBoYXNTcGFjZUtleXByZXNzID0gdHJ1ZTtcbiAgICAgIHJldHVybiBTUEFDRUJBUl9DSEFSO1xuXG4gICAgY2FzZSAndGV4dElucHV0JzpcbiAgICAgIC8vIFJlY29yZCB0aGUgY2hhcmFjdGVycyB0byBiZSBhZGRlZCB0byB0aGUgRE9NLlxuICAgICAgdmFyIGNoYXJzID0gbmF0aXZlRXZlbnQuZGF0YTsgLy8gSWYgaXQncyBhIHNwYWNlYmFyIGNoYXJhY3RlciwgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWRcbiAgICAgIC8vIGl0IGF0IHRoZSBrZXlwcmVzcyBsZXZlbCBhbmQgYmFpbCBpbW1lZGlhdGVseS4gQW5kcm9pZCBDaHJvbWVcbiAgICAgIC8vIGRvZXNuJ3QgZ2l2ZSB1cyBrZXljb2Rlcywgc28gd2UgbmVlZCB0byBpZ25vcmUgaXQuXG5cbiAgICAgIGlmIChjaGFycyA9PT0gU1BBQ0VCQVJfQ0hBUiAmJiBoYXNTcGFjZUtleXByZXNzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hhcnM7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gRm9yIG90aGVyIG5hdGl2ZSBldmVudCB0eXBlcywgZG8gbm90aGluZy5cbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG4vKipcbiAqIEZvciBicm93c2VycyB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZSBgdGV4dElucHV0YCBldmVudCwgZXh0cmFjdCB0aGVcbiAqIGFwcHJvcHJpYXRlIHN0cmluZyB0byB1c2UgZm9yIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGNvbXBvc2luZyAoSU1FKSBhbmQgdXNpbmcgYSBmYWxsYmFjayB0byBkbyBzbyxcbiAgLy8gdHJ5IHRvIGV4dHJhY3QgdGhlIGNvbXBvc2VkIGNoYXJhY3RlcnMgZnJvbSB0aGUgZmFsbGJhY2sgb2JqZWN0LlxuICAvLyBJZiBjb21wb3NpdGlvbiBldmVudCBpcyBhdmFpbGFibGUsIHdlIGV4dHJhY3QgYSBzdHJpbmcgb25seSBhdFxuICAvLyBjb21wb3NpdGlvbmV2ZW50LCBvdGhlcndpc2UgZXh0cmFjdCBpdCBhdCBmYWxsYmFjayBldmVudHMuXG4gIGlmIChpc0NvbXBvc2luZykge1xuICAgIGlmIChkb21FdmVudE5hbWUgPT09ICdjb21wb3NpdGlvbmVuZCcgfHwgIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgJiYgaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICB2YXIgY2hhcnMgPSBnZXREYXRhKCk7XG4gICAgICByZXNldCgpO1xuICAgICAgaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAncGFzdGUnOlxuICAgICAgLy8gSWYgYSBwYXN0ZSBldmVudCBvY2N1cnMgYWZ0ZXIgYSBrZXlwcmVzcywgdGhyb3cgb3V0IHRoZSBpbnB1dFxuICAgICAgLy8gY2hhcnMuIFBhc3RlIGV2ZW50cyBzaG91bGQgbm90IGxlYWQgdG8gQmVmb3JlSW5wdXQgZXZlbnRzLlxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvKipcbiAgICAgICAqIEFzIG9mIHYyNywgRmlyZWZveCBtYXkgZmlyZSBrZXlwcmVzcyBldmVudHMgZXZlbiB3aGVuIG5vIGNoYXJhY3RlclxuICAgICAgICogd2lsbCBiZSBpbnNlcnRlZC4gQSBmZXcgcG9zc2liaWxpdGllczpcbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgYDBgLiBBcnJvdyBrZXlzLCBFc2Mga2V5LCBldGMuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgbm8gY2hhciBpcyBhdmFpbGFibGUuXG4gICAgICAgKiAgIEV4OiAnQWx0R3IgKyBkYCBpbiBQb2xpc2guIFRoZXJlIGlzIG5vIG1vZGlmaWVkIGNoYXJhY3RlciBmb3JcbiAgICAgICAqICAgdGhpcyBrZXkgY29tYmluYXRpb24gYW5kIG5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZCBpbnRvIHRoZVxuICAgICAgICogICBkb2N1bWVudCwgYnV0IEZGIGZpcmVzIHRoZSBrZXlwcmVzcyBmb3IgY2hhciBjb2RlIGAxMDBgIGFueXdheS5cbiAgICAgICAqICAgTm8gYGlucHV0YCBldmVudCB3aWxsIG9jY3VyLlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IGEgY29tbWFuZCBjb21iaW5hdGlvbiBpc1xuICAgICAgICogICBiZWluZyB1c2VkLiBFeDogYENtZCtDYC4gTm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLCBhbmQgbm9cbiAgICAgICAqICAgYGlucHV0YCBldmVudCB3aWxsIG9jY3VyLlxuICAgICAgICovXG4gICAgICBpZiAoIWlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAvLyBJRSBmaXJlcyB0aGUgYGtleXByZXNzYCBldmVudCB3aGVuIGEgdXNlciB0eXBlcyBhbiBlbW9qaSB2aWFcbiAgICAgICAgLy8gVG91Y2gga2V5Ym9hcmQgb2YgV2luZG93cy4gIEluIHN1Y2ggYSBjYXNlLCB0aGUgYGNoYXJgIHByb3BlcnR5XG4gICAgICAgIC8vIGhvbGRzIGFuIGVtb2ppIGNoYXJhY3RlciBsaWtlIGBcXHVEODNEXFx1REUwQWAuICBCZWNhdXNlIGl0cyBsZW5ndGhcbiAgICAgICAgLy8gaXMgMiwgdGhlIHByb3BlcnR5IGB3aGljaGAgZG9lcyBub3QgcmVwcmVzZW50IGFuIGVtb2ppIGNvcnJlY3RseS5cbiAgICAgICAgLy8gSW4gc3VjaCBhIGNhc2UsIHdlIGRpcmVjdGx5IHJldHVybiB0aGUgYGNoYXJgIHByb3BlcnR5IGluc3RlYWQgb2ZcbiAgICAgICAgLy8gdXNpbmcgYHdoaWNoYC5cbiAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmNoYXIgJiYgbmF0aXZlRXZlbnQuY2hhci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmNoYXI7XG4gICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRXZlbnQud2hpY2gpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuYXRpdmVFdmVudC53aGljaCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlICdjb21wb3NpdGlvbmVuZCc6XG4gICAgICByZXR1cm4gdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgJiYgIWlzVXNpbmdLb3JlYW5JTUUobmF0aXZlRXZlbnQpID8gbnVsbCA6IG5hdGl2ZUV2ZW50LmRhdGE7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbi8qKlxuICogRXh0cmFjdCBhIFN5bnRoZXRpY0lucHV0RXZlbnQgZm9yIGBiZWZvcmVJbnB1dGAsIGJhc2VkIG9uIGVpdGhlciBuYXRpdmVcbiAqIGB0ZXh0SW5wdXRgIG9yIGZhbGxiYWNrIGJlaGF2aW9yLlxuICpcbiAqIEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljSW5wdXRFdmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBjaGFycztcblxuICBpZiAoY2FuVXNlVGV4dElucHV0RXZlbnQpIHtcbiAgICBjaGFycyA9IGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gZWxzZSB7XG4gICAgY2hhcnMgPSBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gLy8gSWYgbm8gY2hhcmFjdGVycyBhcmUgYmVpbmcgaW5zZXJ0ZWQsIG5vIEJlZm9yZUlucHV0IGV2ZW50IHNob3VsZFxuICAvLyBiZSBmaXJlZC5cblxuXG4gIGlmICghY2hhcnMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0SW5zdCwgJ29uQmVmb3JlSW5wdXQnKTtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljSW5wdXRFdmVudCgnb25CZWZvcmVJbnB1dCcsICdiZWZvcmVpbnB1dCcsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG4gICAgZXZlbnQuZGF0YSA9IGNoYXJzO1xuICB9XG59XG4vKipcbiAqIENyZWF0ZSBhbiBgb25CZWZvcmVJbnB1dGAgZXZlbnQgdG8gbWF0Y2hcbiAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMTMxMTA1LyNldmVudHMtaW5wdXRldmVudHMuXG4gKlxuICogVGhpcyBldmVudCBwbHVnaW4gaXMgYmFzZWQgb24gdGhlIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudFxuICogYXZhaWxhYmxlIGluIENocm9tZSwgU2FmYXJpLCBPcGVyYSwgYW5kIElFLiBUaGlzIGV2ZW50IGZpcmVzIGFmdGVyXG4gKiBgb25LZXlQcmVzc2AgYW5kIGBvbkNvbXBvc2l0aW9uRW5kYCwgYnV0IGJlZm9yZSBgb25JbnB1dGAuXG4gKlxuICogYGJlZm9yZUlucHV0YCBpcyBzcGVjJ2QgYnV0IG5vdCBpbXBsZW1lbnRlZCBpbiBhbnkgYnJvd3NlcnMsIGFuZFxuICogdGhlIGBpbnB1dGAgZXZlbnQgZG9lcyBub3QgcHJvdmlkZSBhbnkgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgaGFzXG4gKiBhY3R1YWxseSBiZWVuIGFkZGVkLCBjb250cmFyeSB0byB0aGUgc3BlYy4gVGh1cywgYHRleHRJbnB1dGAgaXMgdGhlIGJlc3RcbiAqIGF2YWlsYWJsZSBldmVudCB0byBpZGVudGlmeSB0aGUgY2hhcmFjdGVycyB0aGF0IGhhdmUgYWN0dWFsbHkgYmVlbiBpbnNlcnRlZFxuICogaW50byB0aGUgdGFyZ2V0IG5vZGUuXG4gKlxuICogVGhpcyBwbHVnaW4gaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgYGNvbXBvc2l0aW9uYCBldmVudHMsIHRodXNcbiAqIGFsbG93aW5nIHVzIHRvIHNoYXJlIGNvbXBvc2l0aW9uIGZhbGxiYWNrIGNvZGUgZm9yIGJvdGggYGJlZm9yZUlucHV0YCBhbmRcbiAqIGBjb21wb3NpdGlvbmAgZXZlbnQgdHlwZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICBleHRyYWN0QmVmb3JlSW5wdXRFdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cbi8qKlxuICogQHNlZSBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUtaW5wdXQtZWxlbWVudC5odG1sI2lucHV0LXR5cGUtYXR0ci1zdW1tYXJ5XG4gKi9cbnZhciBzdXBwb3J0ZWRJbnB1dFR5cGVzID0ge1xuICBjb2xvcjogdHJ1ZSxcbiAgZGF0ZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxuICBwYXNzd29yZDogdHJ1ZSxcbiAgcmFuZ2U6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdGVsOiB0cnVlLFxuICB0ZXh0OiB0cnVlLFxuICB0aW1lOiB0cnVlLFxuICB1cmw6IHRydWUsXG4gIHdlZWs6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGlzVGV4dElucHV0RWxlbWVudChlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKG5vZGVOYW1lID09PSAnaW5wdXQnKSB7XG4gICAgcmV0dXJuICEhc3VwcG9ydGVkSW5wdXRUeXBlc1tlbGVtLnR5cGVdO1xuICB9XG5cbiAgaWYgKG5vZGVOYW1lID09PSAndGV4dGFyZWEnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGFuIGV2ZW50IGlzIHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBleGVjdXRpb24gZW52aXJvbm1lbnQuXG4gKlxuICogTk9URTogVGhpcyB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseSBmb3Igbm9uLWdlbmVyaWMgZXZlbnRzIHN1Y2ggYXMgYGNoYW5nZWAsXG4gKiBgcmVzZXRgLCBgbG9hZGAsIGBlcnJvcmAsIGFuZCBgc2VsZWN0YC5cbiAqXG4gKiBCb3Jyb3dzIGZyb20gTW9kZXJuaXpyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVTdWZmaXggRXZlbnQgbmFtZSwgZS5nLiBcImNsaWNrXCIuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBldmVudCBpcyBzdXBwb3J0ZWQuXG4gKiBAaW50ZXJuYWxcbiAqIEBsaWNlbnNlIE1vZGVybml6ciAzLjAuMHByZSAoQ3VzdG9tIEJ1aWxkKSB8IE1JVFxuICovXG5cbmZ1bmN0aW9uIGlzRXZlbnRTdXBwb3J0ZWQoZXZlbnROYW1lU3VmZml4KSB7XG4gIGlmICghY2FuVXNlRE9NKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudE5hbWVTdWZmaXg7XG4gIHZhciBpc1N1cHBvcnRlZCA9IChldmVudE5hbWUgaW4gZG9jdW1lbnQpO1xuXG4gIGlmICghaXNTdXBwb3J0ZWQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGV2ZW50TmFtZSwgJ3JldHVybjsnKTtcbiAgICBpc1N1cHBvcnRlZCA9IHR5cGVvZiBlbGVtZW50W2V2ZW50TmFtZV0gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICByZXR1cm4gaXNTdXBwb3J0ZWQ7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDEoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25DaGFuZ2UnLCBbJ2NoYW5nZScsICdjbGljaycsICdmb2N1c2luJywgJ2ZvY3Vzb3V0JywgJ2lucHV0JywgJ2tleWRvd24nLCAna2V5dXAnLCAnc2VsZWN0aW9uY2hhbmdlJ10pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgaW5zdCwgbmF0aXZlRXZlbnQsIHRhcmdldCkge1xuICAvLyBGbGFnIHRoaXMgZXZlbnQgbG9vcCBhcyBuZWVkaW5nIHN0YXRlIHJlc3RvcmUuXG4gIGVucXVldWVTdGF0ZVJlc3RvcmUodGFyZ2V0KTtcbiAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyhpbnN0LCAnb25DaGFuZ2UnKTtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnQoJ29uQ2hhbmdlJywgJ2NoYW5nZScsIG51bGwsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICB9XG59XG4vKipcbiAqIEZvciBJRSBzaGltc1xuICovXG5cblxudmFyIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjaGFuZ2VgIGV2ZW50XG4gKi9cblxuZnVuY3Rpb24gc2hvdWxkVXNlQ2hhbmdlRXZlbnQoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIG5vZGVOYW1lID09PSAnc2VsZWN0JyB8fCBub2RlTmFtZSA9PT0gJ2lucHV0JyAmJiBlbGVtLnR5cGUgPT09ICdmaWxlJztcbn1cblxuZnVuY3Rpb24gbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCkge1xuICB2YXIgZGlzcGF0Y2hRdWV1ZSA9IFtdO1xuICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgYWN0aXZlRWxlbWVudEluc3QsIG5hdGl2ZUV2ZW50LCBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkpOyAvLyBJZiBjaGFuZ2UgYW5kIHByb3BlcnR5Y2hhbmdlIGJ1YmJsZWQsIHdlJ2QganVzdCBiaW5kIHRvIGl0IGxpa2UgYWxsIHRoZVxuICAvLyBvdGhlciBldmVudHMgYW5kIGhhdmUgaXQgZ28gdGhyb3VnaCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuIFNpbmNlIGl0XG4gIC8vIGRvZXNuJ3QsIHdlIG1hbnVhbGx5IGxpc3RlbiBmb3IgdGhlIGV2ZW50cyBhbmQgc28gd2UgaGF2ZSB0byBlbnF1ZXVlIGFuZFxuICAvLyBwcm9jZXNzIHRoZSBhYnN0cmFjdCBldmVudCBtYW51YWxseS5cbiAgLy9cbiAgLy8gQmF0Y2hpbmcgaXMgbmVjZXNzYXJ5IGhlcmUgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIGV2ZW50IGhhbmRsZXJzIHJ1blxuICAvLyBiZWZvcmUgdGhlIG5leHQgcmVyZW5kZXIgKGluY2x1ZGluZyBldmVudCBoYW5kbGVycyBhdHRhY2hlZCB0byBhbmNlc3RvclxuICAvLyBlbGVtZW50cyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG9uIHRoZSBpbnB1dCkuIFdpdGhvdXQgdGhpcywgY29udHJvbGxlZFxuICAvLyBjb21wb25lbnRzIGRvbid0IHdvcmsgcHJvcGVybHkgaW4gY29uanVuY3Rpb24gd2l0aCBldmVudCBidWJibGluZyBiZWNhdXNlXG4gIC8vIHRoZSBjb21wb25lbnQgaXMgcmVyZW5kZXJlZCBhbmQgdGhlIHZhbHVlIHJldmVydGVkIGJlZm9yZSBhbGwgdGhlIGV2ZW50XG4gIC8vIGhhbmRsZXJzIGNhbiBydW4uIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcwOC5cblxuICBiYXRjaGVkVXBkYXRlcyhydW5FdmVudEluQmF0Y2gsIGRpc3BhdGNoUXVldWUpO1xufVxuXG5mdW5jdGlvbiBydW5FdmVudEluQmF0Y2goZGlzcGF0Y2hRdWV1ZSkge1xuICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCAwKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpIHtcbiAgdmFyIHRhcmdldE5vZGUgPSBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpO1xuXG4gIGlmICh1cGRhdGVWYWx1ZUlmQ2hhbmdlZCh0YXJnZXROb2RlKSkge1xuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfVxufVxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGlucHV0YCBldmVudFxuICovXG5cblxudmFyIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGZhbHNlO1xuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIC8vIElFOSBjbGFpbXMgdG8gc3VwcG9ydCB0aGUgaW5wdXQgZXZlbnQgYnV0IGZhaWxzIHRvIHRyaWdnZXIgaXQgd2hlblxuICAvLyBkZWxldGluZyB0ZXh0LCBzbyB3ZSBpZ25vcmUgaXRzIGlucHV0IGV2ZW50cy5cbiAgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gaXNFdmVudFN1cHBvcnRlZCgnaW5wdXQnKSAmJiAoIWRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPiA5KTtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIFN0YXJ0cyB0cmFja2luZyBwcm9wZXJ0eWNoYW5nZSBldmVudHMgb24gdGhlIHBhc3NlZC1pbiBlbGVtZW50XG4gKiBhbmQgb3ZlcnJpZGUgdGhlIHZhbHVlIHByb3BlcnR5IHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHVzZXIgZXZlbnRzIGZyb21cbiAqIHZhbHVlIGNoYW5nZXMgaW4gSlMuXG4gKi9cblxuXG5mdW5jdGlvbiBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGFjdGl2ZUVsZW1lbnQgPSB0YXJnZXQ7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgYWN0aXZlRWxlbWVudC5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIFJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBmcm9tIHRoZSBjdXJyZW50bHktdHJhY2tlZCBlbGVtZW50LFxuICogaWYgYW55IGV4aXN0cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCkge1xuICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhY3RpdmVFbGVtZW50LmRldGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgaGFuZGxlUHJvcGVydHlDaGFuZ2UpO1xuICBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsO1xufVxuLyoqXG4gKiAoRm9yIElFIDw9OSkgSGFuZGxlcyBhIHByb3BlcnR5Y2hhbmdlIGV2ZW50LCBzZW5kaW5nIGEgYGNoYW5nZWAgZXZlbnQgaWZcbiAqIHRoZSB2YWx1ZSBvZiB0aGUgYWN0aXZlIGVsZW1lbnQgaGFzIGNoYW5nZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBoYW5kbGVQcm9wZXJ0eUNoYW5nZShuYXRpdmVFdmVudCkge1xuICBpZiAobmF0aXZlRXZlbnQucHJvcGVydHlOYW1lICE9PSAndmFsdWUnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCkpIHtcbiAgICBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGwoZG9tRXZlbnROYW1lLCB0YXJnZXQsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2ZvY3VzaW4nKSB7XG4gICAgLy8gSW4gSUU5LCBwcm9wZXJ0eWNoYW5nZSBmaXJlcyBmb3IgbW9zdCBpbnB1dCBldmVudHMgYnV0IGlzIGJ1Z2d5IGFuZFxuICAgIC8vIGRvZXNuJ3QgZmlyZSB3aGVuIHRleHQgaXMgZGVsZXRlZCwgYnV0IGNvbnZlbmllbnRseSwgc2VsZWN0aW9uY2hhbmdlXG4gICAgLy8gYXBwZWFycyB0byBmaXJlIGluIGFsbCBvZiB0aGUgcmVtYWluaW5nIGNhc2VzIHNvIHdlIGNhdGNoIHRob3NlIGFuZFxuICAgIC8vIGZvcndhcmQgdGhlIGV2ZW50IGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgIC8vIEluIGVpdGhlciBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgdGhlIGV2ZW50IGhhbmRsZXIgaWYgdGhlIHZhbHVlXG4gICAgLy8gaXMgY2hhbmdlZCBmcm9tIEpTIHNvIHdlIHJlZGVmaW5lIGEgc2V0dGVyIGZvciBgLnZhbHVlYCB0aGF0IHVwZGF0ZXNcbiAgICAvLyBvdXIgYWN0aXZlRWxlbWVudFZhbHVlIHZhcmlhYmxlLCBhbGxvd2luZyB1cyB0byBpZ25vcmUgdGhvc2UgY2hhbmdlc1xuICAgIC8vXG4gICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBoZXJlIGJ1dCB3ZSBjYWxsIGl0IGp1c3QgaW4gY2FzZSB3ZVxuICAgIC8vIG1pc3NlZCBhIGJsdXIgZXZlbnQgc29tZWhvdy5cbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICAgIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0YXJnZXQsIHRhcmdldEluc3QpO1xuICB9IGVsc2UgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2ZvY3Vzb3V0Jykge1xuICAgIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gIH1cbn0gLy8gRm9yIElFOCBhbmQgSUU5LlxuXG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGwoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdzZWxlY3Rpb25jaGFuZ2UnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ2tleXVwJyB8fCBkb21FdmVudE5hbWUgPT09ICdrZXlkb3duJykge1xuICAgIC8vIE9uIHRoZSBzZWxlY3Rpb25jaGFuZ2UgZXZlbnQsIHRoZSB0YXJnZXQgaXMganVzdCBkb2N1bWVudCB3aGljaCBpc24ndFxuICAgIC8vIGhlbHBmdWwgZm9yIHVzIHNvIGp1c3QgY2hlY2sgYWN0aXZlRWxlbWVudCBpbnN0ZWFkLlxuICAgIC8vXG4gICAgLy8gOTklIG9mIHRoZSB0aW1lLCBrZXlkb3duIGFuZCBrZXl1cCBhcmVuJ3QgbmVjZXNzYXJ5LiBJRTggZmFpbHMgdG8gZmlyZVxuICAgIC8vIHByb3BlcnR5Y2hhbmdlIG9uIHRoZSBmaXJzdCBpbnB1dCBldmVudCBhZnRlciBzZXR0aW5nIGB2YWx1ZWAgZnJvbSBhXG4gICAgLy8gc2NyaXB0IGFuZCBmaXJlcyBvbmx5IGtleWRvd24sIGtleXByZXNzLCBrZXl1cC4gQ2F0Y2hpbmcga2V5dXAgdXN1YWxseVxuICAgIC8vIGdldHMgaXQgYW5kIGNhdGNoaW5nIGtleWRvd24gbGV0cyB1cyBmaXJlIGFuIGV2ZW50IGZvciB0aGUgZmlyc3RcbiAgICAvLyBrZXlzdHJva2UgaWYgdXNlciBkb2VzIGEga2V5IHJlcGVhdCAoaXQnbGwgYmUgYSBsaXR0bGUgZGVsYXllZDogcmlnaHRcbiAgICAvLyBiZWZvcmUgdGhlIHNlY29uZCBrZXlzdHJva2UpLiBPdGhlciBpbnB1dCBtZXRob2RzIChlLmcuLCBwYXN0ZSkgc2VlbSB0b1xuICAgIC8vIGZpcmUgc2VsZWN0aW9uY2hhbmdlIG5vcm1hbGx5LlxuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QpO1xuICB9XG59XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2xpY2tgIGV2ZW50XG4gKi9cblxuXG5mdW5jdGlvbiBzaG91bGRVc2VDbGlja0V2ZW50KGVsZW0pIHtcbiAgLy8gVXNlIHRoZSBgY2xpY2tgIGV2ZW50IHRvIGRldGVjdCBjaGFuZ2VzIHRvIGNoZWNrYm94IGFuZCByYWRpbyBpbnB1dHMuXG4gIC8vIFRoaXMgYXBwcm9hY2ggd29ya3MgYWNyb3NzIGFsbCBicm93c2Vycywgd2hlcmVhcyBgY2hhbmdlYCBkb2VzIG5vdCBmaXJlXG4gIC8vIHVudGlsIGBibHVyYCBpbiBJRTguXG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmIChlbGVtLnR5cGUgPT09ICdjaGVja2JveCcgfHwgZWxlbS50eXBlID09PSAncmFkaW8nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdjbGljaycpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdpbnB1dCcgfHwgZG9tRXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlQ29udHJvbGxlZElucHV0Qmx1cihub2RlKSB7XG4gIHZhciBzdGF0ZSA9IG5vZGUuX3dyYXBwZXJTdGF0ZTtcblxuICBpZiAoIXN0YXRlIHx8ICFzdGF0ZS5jb250cm9sbGVkIHx8IG5vZGUudHlwZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgLy8gSWYgY29udHJvbGxlZCwgYXNzaWduIHRoZSB2YWx1ZSBhdHRyaWJ1dGUgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb24gYmx1clxuICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCAnbnVtYmVyJywgbm9kZS52YWx1ZSk7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBwbHVnaW4gY3JlYXRlcyBhbiBgb25DaGFuZ2VgIGV2ZW50IHRoYXQgbm9ybWFsaXplcyBjaGFuZ2UgZXZlbnRzXG4gKiBhY3Jvc3MgZm9ybSBlbGVtZW50cy4gVGhpcyBldmVudCBmaXJlcyBhdCBhIHRpbWUgd2hlbiBpdCdzIHBvc3NpYmxlIHRvXG4gKiBjaGFuZ2UgdGhlIGVsZW1lbnQncyB2YWx1ZSB3aXRob3V0IHNlZWluZyBhIGZsaWNrZXIuXG4gKlxuICogU3VwcG9ydGVkIGVsZW1lbnRzIGFyZTpcbiAqIC0gaW5wdXQgKHNlZSBgaXNUZXh0SW5wdXRFbGVtZW50YClcbiAqIC0gdGV4dGFyZWFcbiAqIC0gc2VsZWN0XG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDEoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgdGFyZ2V0Tm9kZSA9IHRhcmdldEluc3QgPyBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpIDogd2luZG93O1xuICB2YXIgZ2V0VGFyZ2V0SW5zdEZ1bmMsIGhhbmRsZUV2ZW50RnVuYztcblxuICBpZiAoc2hvdWxkVXNlQ2hhbmdlRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudDtcbiAgfSBlbHNlIGlmIChpc1RleHRJbnB1dEVsZW1lbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICBpZiAoaXNJbnB1dEV2ZW50U3VwcG9ydGVkKSB7XG4gICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZlbnRQb2x5ZmlsbDtcbiAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2hvdWxkVXNlQ2xpY2tFdmVudCh0YXJnZXROb2RlKSkge1xuICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQ7XG4gIH1cblxuICBpZiAoZ2V0VGFyZ2V0SW5zdEZ1bmMpIHtcbiAgICB2YXIgaW5zdCA9IGdldFRhcmdldEluc3RGdW5jKGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCk7XG5cbiAgICBpZiAoaW5zdCkge1xuICAgICAgY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGhhbmRsZUV2ZW50RnVuYykge1xuICAgIGhhbmRsZUV2ZW50RnVuYyhkb21FdmVudE5hbWUsIHRhcmdldE5vZGUsIHRhcmdldEluc3QpO1xuICB9IC8vIFdoZW4gYmx1cnJpbmcsIHNldCB0aGUgdmFsdWUgYXR0cmlidXRlIGZvciBudW1iZXIgaW5wdXRzXG5cblxuICBpZiAoZG9tRXZlbnROYW1lID09PSAnZm9jdXNvdXQnKSB7XG4gICAgaGFuZGxlQ29udHJvbGxlZElucHV0Qmx1cih0YXJnZXROb2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cyQyKCkge1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvbk1vdXNlRW50ZXInLCBbJ21vdXNlb3V0JywgJ21vdXNlb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Nb3VzZUxlYXZlJywgWydtb3VzZW91dCcsICdtb3VzZW92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uUG9pbnRlckVudGVyJywgWydwb2ludGVyb3V0JywgJ3BvaW50ZXJvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvblBvaW50ZXJMZWF2ZScsIFsncG9pbnRlcm91dCcsICdwb2ludGVyb3ZlciddKTtcbn1cbi8qKlxuICogRm9yIGFsbW9zdCBldmVyeSBpbnRlcmFjdGlvbiB3ZSBjYXJlIGFib3V0LCB0aGVyZSB3aWxsIGJlIGJvdGggYSB0b3AtbGV2ZWxcbiAqIGBtb3VzZW92ZXJgIGFuZCBgbW91c2VvdXRgIGV2ZW50IHRoYXQgb2NjdXJzLiBPbmx5IHVzZSBgbW91c2VvdXRgIHNvIHRoYXRcbiAqIHdlIGRvIG5vdCBleHRyYWN0IGR1cGxpY2F0ZSBldmVudHMuIEhvd2V2ZXIsIG1vdmluZyB0aGUgbW91c2UgaW50byB0aGVcbiAqIGJyb3dzZXIgZnJvbSBvdXRzaWRlIHdpbGwgbm90IGZpcmUgYSBgbW91c2VvdXRgIGV2ZW50LiBJbiB0aGlzIGNhc2UsIHdlIHVzZVxuICogdGhlIGBtb3VzZW92ZXJgIHRvcC1sZXZlbCBldmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkMihkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciBpc092ZXJFdmVudCA9IGRvbUV2ZW50TmFtZSA9PT0gJ21vdXNlb3ZlcicgfHwgZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm92ZXInO1xuICB2YXIgaXNPdXRFdmVudCA9IGRvbUV2ZW50TmFtZSA9PT0gJ21vdXNlb3V0JyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3V0JztcblxuICBpZiAoaXNPdmVyRXZlbnQgJiYgKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19SRVBMQVlFRCkgPT09IDApIHtcbiAgICAvLyBJZiB0aGlzIGlzIGFuIG92ZXIgZXZlbnQgd2l0aCBhIHRhcmdldCwgd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IGRpc3BhdGNoZWRcbiAgICAvLyB0aGUgZXZlbnQgaW4gdGhlIG91dCBldmVudCBvZiB0aGUgb3RoZXIgdGFyZ2V0LiBJZiB0aGlzIGlzIHJlcGxheWVkLFxuICAgIC8vIHRoZW4gaXQncyBiZWNhdXNlIHdlIGNvdWxkbid0IGRpc3BhdGNoIGFnYWluc3QgdGhpcyB0YXJnZXQgcHJldmlvdXNseVxuICAgIC8vIHNvIHdlIGhhdmUgdG8gZG8gaXQgbm93IGluc3RlYWQuXG4gICAgdmFyIHJlbGF0ZWQgPSBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LmZyb21FbGVtZW50O1xuXG4gICAgaWYgKHJlbGF0ZWQpIHtcbiAgICAgIC8vIElmIHRoZSByZWxhdGVkIG5vZGUgaXMgbWFuYWdlZCBieSBSZWFjdCwgd2UgY2FuIGFzc3VtZSB0aGF0IHdlIGhhdmVcbiAgICAgIC8vIGFscmVhZHkgZGlzcGF0Y2hlZCB0aGUgY29ycmVzcG9uZGluZyBldmVudHMgZHVyaW5nIGl0cyBtb3VzZW91dC5cbiAgICAgIGlmIChnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShyZWxhdGVkKSB8fCBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChyZWxhdGVkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFpc091dEV2ZW50ICYmICFpc092ZXJFdmVudCkge1xuICAgIC8vIE11c3Qgbm90IGJlIGEgbW91c2Ugb3IgcG9pbnRlciBpbiBvciBvdXQgLSBpZ25vcmluZy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgd2luOyAvLyBUT0RPOiB3aHkgaXMgdGhpcyBudWxsYWJsZSBpbiB0aGUgdHlwZXMgYnV0IHdlIHJlYWQgZnJvbSBpdD9cblxuICBpZiAobmF0aXZlRXZlbnRUYXJnZXQud2luZG93ID09PSBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIC8vIGBuYXRpdmVFdmVudFRhcmdldGAgaXMgcHJvYmFibHkgYSB3aW5kb3cgb2JqZWN0LlxuICAgIHdpbiA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICB9IGVsc2Uge1xuICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IGBvd25lckRvY3VtZW50YCBpcyBzb21ldGltZXMgdW5kZWZpbmVkIGluIElFOC5cbiAgICB2YXIgZG9jID0gbmF0aXZlRXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcblxuICAgIGlmIChkb2MpIHtcbiAgICAgIHdpbiA9IGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW4gPSB3aW5kb3c7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZyb207XG4gIHZhciB0bztcblxuICBpZiAoaXNPdXRFdmVudCkge1xuICAgIHZhciBfcmVsYXRlZCA9IG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQudG9FbGVtZW50O1xuXG4gICAgZnJvbSA9IHRhcmdldEluc3Q7XG4gICAgdG8gPSBfcmVsYXRlZCA/IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKF9yZWxhdGVkKSA6IG51bGw7XG5cbiAgICBpZiAodG8gIT09IG51bGwpIHtcbiAgICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodG8pO1xuXG4gICAgICBpZiAodG8gIT09IG5lYXJlc3RNb3VudGVkIHx8IHRvLnRhZyAhPT0gSG9zdENvbXBvbmVudCAmJiB0by50YWcgIT09IEhvc3RUZXh0KSB7XG4gICAgICAgIHRvID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTW92aW5nIHRvIGEgbm9kZSBmcm9tIG91dHNpZGUgdGhlIHdpbmRvdy5cbiAgICBmcm9tID0gbnVsbDtcbiAgICB0byA9IHRhcmdldEluc3Q7XG4gIH1cblxuICBpZiAoZnJvbSA9PT0gdG8pIHtcbiAgICAvLyBOb3RoaW5nIHBlcnRhaW5zIHRvIG91ciBtYW5hZ2VkIGNvbXBvbmVudHMuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gIHZhciBsZWF2ZUV2ZW50VHlwZSA9ICdvbk1vdXNlTGVhdmUnO1xuICB2YXIgZW50ZXJFdmVudFR5cGUgPSAnb25Nb3VzZUVudGVyJztcbiAgdmFyIGV2ZW50VHlwZVByZWZpeCA9ICdtb3VzZSc7XG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdmVyJykge1xuICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1BvaW50ZXJFdmVudDtcbiAgICBsZWF2ZUV2ZW50VHlwZSA9ICdvblBvaW50ZXJMZWF2ZSc7XG4gICAgZW50ZXJFdmVudFR5cGUgPSAnb25Qb2ludGVyRW50ZXInO1xuICAgIGV2ZW50VHlwZVByZWZpeCA9ICdwb2ludGVyJztcbiAgfVxuXG4gIHZhciBmcm9tTm9kZSA9IGZyb20gPT0gbnVsbCA/IHdpbiA6IGdldE5vZGVGcm9tSW5zdGFuY2UoZnJvbSk7XG4gIHZhciB0b05vZGUgPSB0byA9PSBudWxsID8gd2luIDogZ2V0Tm9kZUZyb21JbnN0YW5jZSh0byk7XG4gIHZhciBsZWF2ZSA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IobGVhdmVFdmVudFR5cGUsIGV2ZW50VHlwZVByZWZpeCArICdsZWF2ZScsIGZyb20sIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIGxlYXZlLnRhcmdldCA9IGZyb21Ob2RlO1xuICBsZWF2ZS5yZWxhdGVkVGFyZ2V0ID0gdG9Ob2RlO1xuICB2YXIgZW50ZXIgPSBudWxsOyAvLyBXZSBzaG91bGQgb25seSBwcm9jZXNzIHRoaXMgbmF0aXZlRXZlbnQgaWYgd2UgYXJlIHByb2Nlc3NpbmdcbiAgLy8gdGhlIGZpcnN0IGFuY2VzdG9yLiBOZXh0IHRpbWUsIHdlIHdpbGwgaWdub3JlIHRoZSBldmVudC5cblxuICB2YXIgbmF0aXZlVGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAobmF0aXZlVGFyZ2V0SW5zdCA9PT0gdGFyZ2V0SW5zdCkge1xuICAgIHZhciBlbnRlckV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihlbnRlckV2ZW50VHlwZSwgZXZlbnRUeXBlUHJlZml4ICsgJ2VudGVyJywgdG8sIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZW50ZXJFdmVudC50YXJnZXQgPSB0b05vZGU7XG4gICAgZW50ZXJFdmVudC5yZWxhdGVkVGFyZ2V0ID0gZnJvbU5vZGU7XG4gICAgZW50ZXIgPSBlbnRlckV2ZW50O1xuICB9XG5cbiAgYWNjdW11bGF0ZUVudGVyTGVhdmVUd29QaGFzZUxpc3RlbmVycyhkaXNwYXRjaFF1ZXVlLCBsZWF2ZSwgZW50ZXIsIGZyb20sIHRvKTtcbn1cblxuLyoqXG4gKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAqL1xuZnVuY3Rpb24gaXMoeCwgeSkge1xuICByZXR1cm4geCA9PT0geSAmJiAoeCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkpIHx8IHggIT09IHggJiYgeSAhPT0geSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxuICA7XG59XG5cbnZhciBvYmplY3RJcyA9IHR5cGVvZiBPYmplY3QuaXMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QuaXMgOiBpcztcblxudmFyIGhhc093blByb3BlcnR5JDIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuLyoqXG4gKiBQZXJmb3JtcyBlcXVhbGl0eSBieSBpdGVyYXRpbmcgdGhyb3VnaCBrZXlzIG9uIGFuIG9iamVjdCBhbmQgcmV0dXJuaW5nIGZhbHNlXG4gKiB3aGVuIGFueSBrZXkgaGFzIHZhbHVlcyB3aGljaCBhcmUgbm90IHN0cmljdGx5IGVxdWFsIGJldHdlZW4gdGhlIGFyZ3VtZW50cy5cbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZXMgb2YgYWxsIGtleXMgYXJlIHN0cmljdGx5IGVxdWFsLlxuICovXG5cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XG4gIGlmIChvYmplY3RJcyhvYmpBLCBvYmpCKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBUZXN0IGZvciBBJ3Mga2V5cyBkaWZmZXJlbnQgZnJvbSBCLlxuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzQS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghaGFzT3duUHJvcGVydHkkMi5jYWxsKG9iakIsIGtleXNBW2ldKSB8fCAhb2JqZWN0SXMob2JqQVtrZXlzQVtpXV0sIG9iakJba2V5c0FbaV1dKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEdpdmVuIGFueSBub2RlIHJldHVybiB0aGUgZmlyc3QgbGVhZiBub2RlIHdpdGhvdXQgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5cbmZ1bmN0aW9uIGdldExlYWZOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUgJiYgbm9kZS5maXJzdENoaWxkKSB7XG4gICAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuLyoqXG4gKiBHZXQgdGhlIG5leHQgc2libGluZyB3aXRoaW4gYSBjb250YWluZXIuIFRoaXMgd2lsbCB3YWxrIHVwIHRoZVxuICogRE9NIGlmIGEgbm9kZSdzIHNpYmxpbmdzIGhhdmUgYmVlbiBleGhhdXN0ZWQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHs/RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFNpYmxpbmdOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5uZXh0U2libGluZykge1xuICAgICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxufVxuLyoqXG4gKiBHZXQgb2JqZWN0IGRlc2NyaWJpbmcgdGhlIG5vZGVzIHdoaWNoIGNvbnRhaW4gY2hhcmFjdGVycyBhdCBvZmZzZXQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSByb290XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5cblxuZnVuY3Rpb24gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChyb290LCBvZmZzZXQpIHtcbiAgdmFyIG5vZGUgPSBnZXRMZWFmTm9kZShyb290KTtcbiAgdmFyIG5vZGVTdGFydCA9IDA7XG4gIHZhciBub2RlRW5kID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIG5vZGVFbmQgPSBub2RlU3RhcnQgKyBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcblxuICAgICAgaWYgKG5vZGVTdGFydCA8PSBvZmZzZXQgJiYgbm9kZUVuZCA+PSBvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIG9mZnNldDogb2Zmc2V0IC0gbm9kZVN0YXJ0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG5vZGVTdGFydCA9IG5vZGVFbmQ7XG4gICAgfVxuXG4gICAgbm9kZSA9IGdldExlYWZOb2RlKGdldFNpYmxpbmdOb2RlKG5vZGUpKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gb3V0ZXJOb2RlXG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGdldE9mZnNldHMob3V0ZXJOb2RlKSB7XG4gIHZhciBvd25lckRvY3VtZW50ID0gb3V0ZXJOb2RlLm93bmVyRG9jdW1lbnQ7XG4gIHZhciB3aW4gPSBvd25lckRvY3VtZW50ICYmIG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbiAmJiB3aW4uZ2V0U2VsZWN0aW9uKCk7XG5cbiAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBhbmNob3JOb2RlID0gc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICBhbmNob3JPZmZzZXQgPSBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlID0gc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0ID0gc2VsZWN0aW9uLmZvY3VzT2Zmc2V0OyAvLyBJbiBGaXJlZm94LCBhbmNob3JOb2RlIGFuZCBmb2N1c05vZGUgY2FuIGJlIFwiYW5vbnltb3VzIGRpdnNcIiwgZS5nLiB0aGVcbiAgLy8gdXAvZG93biBidXR0b25zIG9uIGFuIDxpbnB1dCB0eXBlPVwibnVtYmVyXCI+LiBBbm9ueW1vdXMgZGl2cyBkbyBub3Qgc2VlbSB0b1xuICAvLyBleHBvc2UgcHJvcGVydGllcywgdHJpZ2dlcmluZyBhIFwiUGVybWlzc2lvbiBkZW5pZWQgZXJyb3JcIiBpZiBhbnkgb2YgaXRzXG4gIC8vIHByb3BlcnRpZXMgYXJlIGFjY2Vzc2VkLiBUaGUgb25seSBzZWVtaW5nbHkgcG9zc2libGUgd2F5IHRvIGF2b2lkIGVycm9yaW5nXG4gIC8vIGlzIHRvIGFjY2VzcyBhIHByb3BlcnR5IHRoYXQgdHlwaWNhbGx5IHdvcmtzIGZvciBub24tYW5vbnltb3VzIGRpdnMgYW5kXG4gIC8vIGNhdGNoIGFueSBlcnJvciB0aGF0IG1heSBvdGhlcndpc2UgYXJpc2UuIFNlZVxuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0MjdcblxuICB0cnkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuICAgIGFuY2hvck5vZGUubm9kZVR5cGU7XG4gICAgZm9jdXNOb2RlLm5vZGVUeXBlO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBnZXRNb2Rlcm5PZmZzZXRzRnJvbVBvaW50cyhvdXRlck5vZGUsIGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCwgZm9jdXNOb2RlLCBmb2N1c09mZnNldCk7XG59XG4vKipcbiAqIFJldHVybnMge3N0YXJ0LCBlbmR9IHdoZXJlIGBzdGFydGAgaXMgdGhlIGNoYXJhY3Rlci9jb2RlcG9pbnQgaW5kZXggb2ZcbiAqIChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQpIHdpdGhpbiB0aGUgdGV4dENvbnRlbnQgb2YgYG91dGVyTm9kZWAsIGFuZFxuICogYGVuZGAgaXMgdGhlIGluZGV4IG9mIChmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KS5cbiAqXG4gKiBSZXR1cm5zIG51bGwgaWYgeW91IHBhc3MgaW4gZ2FyYmFnZSBpbnB1dCBidXQgd2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgY3Jhc2guXG4gKlxuICogRXhwb3J0ZWQgb25seSBmb3IgdGVzdGluZy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRNb2Rlcm5PZmZzZXRzRnJvbVBvaW50cyhvdXRlck5vZGUsIGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCwgZm9jdXNOb2RlLCBmb2N1c09mZnNldCkge1xuICB2YXIgbGVuZ3RoID0gMDtcbiAgdmFyIHN0YXJ0ID0gLTE7XG4gIHZhciBlbmQgPSAtMTtcbiAgdmFyIGluZGV4V2l0aGluQW5jaG9yID0gMDtcbiAgdmFyIGluZGV4V2l0aGluRm9jdXMgPSAwO1xuICB2YXIgbm9kZSA9IG91dGVyTm9kZTtcbiAgdmFyIHBhcmVudE5vZGUgPSBudWxsO1xuXG4gIG91dGVyOiB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBuZXh0ID0gbnVsbDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZSA9PT0gYW5jaG9yTm9kZSAmJiAoYW5jaG9yT2Zmc2V0ID09PSAwIHx8IG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkpIHtcbiAgICAgICAgc3RhcnQgPSBsZW5ndGggKyBhbmNob3JPZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmb2N1c05vZGUgJiYgKGZvY3VzT2Zmc2V0ID09PSAwIHx8IG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkpIHtcbiAgICAgICAgZW5kID0gbGVuZ3RoICsgZm9jdXNPZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgICAgbGVuZ3RoICs9IG5vZGUubm9kZVZhbHVlLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKChuZXh0ID0gbm9kZS5maXJzdENoaWxkKSA9PT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gTW92aW5nIGZyb20gYG5vZGVgIHRvIGl0cyBmaXJzdCBjaGlsZCBgbmV4dGAuXG5cblxuICAgICAgcGFyZW50Tm9kZSA9IG5vZGU7XG4gICAgICBub2RlID0gbmV4dDtcbiAgICB9XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUgPT09IG91dGVyTm9kZSkge1xuICAgICAgICAvLyBJZiBgb3V0ZXJOb2RlYCBoYXMgY2hpbGRyZW4sIHRoaXMgaXMgYWx3YXlzIHRoZSBzZWNvbmQgdGltZSB2aXNpdGluZ1xuICAgICAgICAvLyBpdC4gSWYgaXQgaGFzIG5vIGNoaWxkcmVuLCB0aGlzIGlzIHN0aWxsIHRoZSBmaXJzdCBsb29wLCBhbmQgdGhlIG9ubHlcbiAgICAgICAgLy8gdmFsaWQgc2VsZWN0aW9uIGlzIGFuY2hvck5vZGUgYW5kIGZvY3VzTm9kZSBib3RoIGVxdWFsIHRvIHRoaXMgbm9kZVxuICAgICAgICAvLyBhbmQgYm90aCBvZmZzZXRzIDAsIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBoYXZlIGhhbmRsZWQgYWJvdmUuXG4gICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50Tm9kZSA9PT0gYW5jaG9yTm9kZSAmJiArK2luZGV4V2l0aGluQW5jaG9yID09PSBhbmNob3JPZmZzZXQpIHtcbiAgICAgICAgc3RhcnQgPSBsZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnROb2RlID09PSBmb2N1c05vZGUgJiYgKytpbmRleFdpdGhpbkZvY3VzID09PSBmb2N1c09mZnNldCkge1xuICAgICAgICBlbmQgPSBsZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmICgobmV4dCA9IG5vZGUubmV4dFNpYmxpbmcpICE9PSBudWxsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gcGFyZW50Tm9kZTtcbiAgICAgIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfSAvLyBNb3ZpbmcgZnJvbSBgbm9kZWAgdG8gaXRzIG5leHQgc2libGluZyBgbmV4dGAuXG5cblxuICAgIG5vZGUgPSBuZXh0O1xuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSAtMSB8fCBlbmQgPT09IC0xKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAoV291bGQgaGFwcGVuIGlmIHRoZSBhbmNob3IvZm9jdXMgbm9kZXMgYXJlbid0XG4gICAgLy8gYWN0dWFsbHkgaW5zaWRlIHRoZSBwYXNzZWQtaW4gbm9kZS4pXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbmQ6IGVuZFxuICB9O1xufVxuLyoqXG4gKiBJbiBtb2Rlcm4gbm9uLUlFIGJyb3dzZXJzLCB3ZSBjYW4gc3VwcG9ydCBib3RoIGZvcndhcmQgYW5kIGJhY2t3YXJkXG4gKiBzZWxlY3Rpb25zLlxuICpcbiAqIE5vdGU6IElFMTArIHN1cHBvcnRzIHRoZSBTZWxlY3Rpb24gb2JqZWN0LCBidXQgaXQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhlIGBleHRlbmRgIG1ldGhvZCwgd2hpY2ggbWVhbnMgdGhhdCBldmVuIGluIG1vZGVybiBJRSwgaXQncyBub3QgcG9zc2libGVcbiAqIHRvIHByb2dyYW1tYXRpY2FsbHkgY3JlYXRlIGEgYmFja3dhcmQgc2VsZWN0aW9uLiBUaHVzLCBmb3IgYWxsIElFXG4gKiB2ZXJzaW9ucywgd2UgdXNlIHRoZSBvbGQgSUUgQVBJIHRvIGNyZWF0ZSBvdXIgc2VsZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvZmZzZXRzXG4gKi9cblxuZnVuY3Rpb24gc2V0T2Zmc2V0cyhub2RlLCBvZmZzZXRzKSB7XG4gIHZhciBkb2MgPSBub2RlLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XG4gIHZhciB3aW4gPSBkb2MgJiYgZG9jLmRlZmF1bHRWaWV3IHx8IHdpbmRvdzsgLy8gRWRnZSBmYWlscyB3aXRoIFwiT2JqZWN0IGV4cGVjdGVkXCIgaW4gc29tZSBzY2VuYXJpb3MuXG4gIC8vIChGb3IgaW5zdGFuY2U6IFRpbnlNQ0UgZWRpdG9yIHVzZWQgaW4gYSBsaXN0IGNvbXBvbmVudCB0aGF0IHN1cHBvcnRzIHBhc3RpbmcgdG8gYWRkIG1vcmUsXG4gIC8vIGZhaWxzIHdoZW4gcGFzdGluZyAxMDArIGl0ZW1zKVxuXG4gIGlmICghd2luLmdldFNlbGVjdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uKCk7XG4gIHZhciBsZW5ndGggPSBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgdmFyIHN0YXJ0ID0gTWF0aC5taW4ob2Zmc2V0cy5zdGFydCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IG9mZnNldHMuZW5kID09PSB1bmRlZmluZWQgPyBzdGFydCA6IE1hdGgubWluKG9mZnNldHMuZW5kLCBsZW5ndGgpOyAvLyBJRSAxMSB1c2VzIG1vZGVybiBzZWxlY3Rpb24sIGJ1dCBkb2Vzbid0IHN1cHBvcnQgdGhlIGV4dGVuZCBtZXRob2QuXG4gIC8vIEZsaXAgYmFja3dhcmQgc2VsZWN0aW9ucywgc28gd2UgY2FuIHNldCB3aXRoIGEgc2luZ2xlIHJhbmdlLlxuXG4gIGlmICghc2VsZWN0aW9uLmV4dGVuZCAmJiBzdGFydCA+IGVuZCkge1xuICAgIHZhciB0ZW1wID0gZW5kO1xuICAgIGVuZCA9IHN0YXJ0O1xuICAgIHN0YXJ0ID0gdGVtcDtcbiAgfVxuXG4gIHZhciBzdGFydE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgc3RhcnQpO1xuICB2YXIgZW5kTWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChub2RlLCBlbmQpO1xuXG4gIGlmIChzdGFydE1hcmtlciAmJiBlbmRNYXJrZXIpIHtcbiAgICBpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDEgJiYgc2VsZWN0aW9uLmFuY2hvck5vZGUgPT09IHN0YXJ0TWFya2VyLm5vZGUgJiYgc2VsZWN0aW9uLmFuY2hvck9mZnNldCA9PT0gc3RhcnRNYXJrZXIub2Zmc2V0ICYmIHNlbGVjdGlvbi5mb2N1c05vZGUgPT09IGVuZE1hcmtlci5ub2RlICYmIHNlbGVjdGlvbi5mb2N1c09mZnNldCA9PT0gZW5kTWFya2VyLm9mZnNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByYW5nZSA9IGRvYy5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0TWFya2VyLm5vZGUsIHN0YXJ0TWFya2VyLm9mZnNldCk7XG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSB7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgc2VsZWN0aW9uLmV4dGVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLnNldEVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCk7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1RleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUpIHtcbiAgaWYgKCFvdXRlck5vZGUgfHwgIWlubmVyTm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUgPT09IGlubmVyTm9kZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUob3V0ZXJOb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKGlubmVyTm9kZSkpIHtcbiAgICByZXR1cm4gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlLnBhcmVudE5vZGUpO1xuICB9IGVsc2UgaWYgKCdjb250YWlucycgaW4gb3V0ZXJOb2RlKSB7XG4gICAgcmV0dXJuIG91dGVyTm9kZS5jb250YWlucyhpbm5lck5vZGUpO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgIHJldHVybiAhIShvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaW5uZXJOb2RlKSAmIDE2KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNJbkRvY3VtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5vd25lckRvY3VtZW50ICYmIGNvbnRhaW5zTm9kZShub2RlLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBub2RlKTtcbn1cblxuZnVuY3Rpb24gaXNTYW1lT3JpZ2luRnJhbWUoaWZyYW1lKSB7XG4gIHRyeSB7XG4gICAgLy8gQWNjZXNzaW5nIHRoZSBjb250ZW50RG9jdW1lbnQgb2YgYSBIVE1MSWZyYW1lRWxlbWVudCBjYW4gY2F1c2UgdGhlIGJyb3dzZXJcbiAgICAvLyB0byB0aHJvdywgZS5nLiBpZiBpdCBoYXMgYSBjcm9zcy1vcmlnaW4gc3JjIGF0dHJpYnV0ZS5cbiAgICAvLyBTYWZhcmkgd2lsbCBzaG93IGFuIGVycm9yIGluIHRoZSBjb25zb2xlIHdoZW4gdGhlIGFjY2VzcyByZXN1bHRzIGluIFwiQmxvY2tlZCBhIGZyYW1lIHdpdGggb3JpZ2luXCIuIGUuZzpcbiAgICAvLyBpZnJhbWUuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgIC8vIEEgc2FmZXR5IHdheSBpcyB0byBhY2Nlc3Mgb25lIG9mIHRoZSBjcm9zcyBvcmlnaW4gcHJvcGVydGllczogV2luZG93IG9yIExvY2F0aW9uXG4gICAgLy8gV2hpY2ggbWlnaHQgcmVzdWx0IGluIFwiU2VjdXJpdHlFcnJvclwiIERPTSBFeGNlcHRpb24gYW5kIGl0IGlzIGNvbXBhdGlibGUgdG8gU2FmYXJpLlxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Jyb3dzZXJzLmh0bWwjaW50ZWdyYXRpb24td2l0aC1pZGxcbiAgICByZXR1cm4gdHlwZW9mIGlmcmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPT09ICdzdHJpbmcnO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudERlZXAoKSB7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG4gIHZhciBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudCgpO1xuXG4gIHdoaWxlIChlbGVtZW50IGluc3RhbmNlb2Ygd2luLkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgaWYgKGlzU2FtZU9yaWdpbkZyYW1lKGVsZW1lbnQpKSB7XG4gICAgICB3aW4gPSBlbGVtZW50LmNvbnRlbnRXaW5kb3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIGVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KHdpbi5kb2N1bWVudCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cbi8qKlxuICogQFJlYWN0SW5wdXRTZWxlY3Rpb246IFJlYWN0IGlucHV0IHNlbGVjdGlvbiBtb2R1bGUuIEJhc2VkIG9uIFNlbGVjdGlvbi5qcyxcbiAqIGJ1dCBtb2RpZmllZCB0byBiZSBzdWl0YWJsZSBmb3IgcmVhY3QgYW5kIGhhcyBhIGNvdXBsZSBvZiBidWcgZml4ZXMgKGRvZXNuJ3RcbiAqIGFzc3VtZSBidXR0b25zIGhhdmUgcmFuZ2Ugc2VsZWN0aW9ucyBhbGxvd2VkKS5cbiAqIElucHV0IHNlbGVjdGlvbiBtb2R1bGUgZm9yIFJlYWN0LlxuICovXG5cbi8qKlxuICogQGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllczogd2UgZ2V0IHRoZSBlbGVtZW50IHR5cGVzIHRoYXQgc3VwcG9ydCBzZWxlY3Rpb25cbiAqIGZyb20gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jZG8tbm90LWFwcGx5LCBsb29raW5nIGF0IGBzZWxlY3Rpb25TdGFydGBcbiAqIGFuZCBgc2VsZWN0aW9uRW5kYCByb3dzLlxuICovXG5cblxuZnVuY3Rpb24gaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIChub2RlTmFtZSA9PT0gJ2lucHV0JyAmJiAoZWxlbS50eXBlID09PSAndGV4dCcgfHwgZWxlbS50eXBlID09PSAnc2VhcmNoJyB8fCBlbGVtLnR5cGUgPT09ICd0ZWwnIHx8IGVsZW0udHlwZSA9PT0gJ3VybCcgfHwgZWxlbS50eXBlID09PSAncGFzc3dvcmQnKSB8fCBub2RlTmFtZSA9PT0gJ3RleHRhcmVhJyB8fCBlbGVtLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKTtcbn1cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbkluZm9ybWF0aW9uKCkge1xuICB2YXIgZm9jdXNlZEVsZW0gPSBnZXRBY3RpdmVFbGVtZW50RGVlcCgpO1xuICByZXR1cm4ge1xuICAgIGZvY3VzZWRFbGVtOiBmb2N1c2VkRWxlbSxcbiAgICBzZWxlY3Rpb25SYW5nZTogaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGZvY3VzZWRFbGVtKSA/IGdldFNlbGVjdGlvbihmb2N1c2VkRWxlbSkgOiBudWxsXG4gIH07XG59XG4vKipcbiAqIEByZXN0b3JlU2VsZWN0aW9uOiBJZiBhbnkgc2VsZWN0aW9uIGluZm9ybWF0aW9uIHdhcyBwb3RlbnRpYWxseSBsb3N0LFxuICogcmVzdG9yZSBpdC4gVGhpcyBpcyB1c2VmdWwgd2hlbiBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCByZW1vdmUgZG9tXG4gKiBub2RlcyBhbmQgcGxhY2UgdGhlbSBiYWNrIGluLCByZXN1bHRpbmcgaW4gZm9jdXMgYmVpbmcgbG9zdC5cbiAqL1xuXG5mdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24pIHtcbiAgdmFyIGN1ckZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoKTtcbiAgdmFyIHByaW9yRm9jdXNlZEVsZW0gPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLmZvY3VzZWRFbGVtO1xuICB2YXIgcHJpb3JTZWxlY3Rpb25SYW5nZSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uc2VsZWN0aW9uUmFuZ2U7XG5cbiAgaWYgKGN1ckZvY3VzZWRFbGVtICE9PSBwcmlvckZvY3VzZWRFbGVtICYmIGlzSW5Eb2N1bWVudChwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgIGlmIChwcmlvclNlbGVjdGlvblJhbmdlICE9PSBudWxsICYmIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgICAgc2V0U2VsZWN0aW9uKHByaW9yRm9jdXNlZEVsZW0sIHByaW9yU2VsZWN0aW9uUmFuZ2UpO1xuICAgIH0gLy8gRm9jdXNpbmcgYSBub2RlIGNhbiBjaGFuZ2UgdGhlIHNjcm9sbCBwb3NpdGlvbiwgd2hpY2ggaXMgdW5kZXNpcmFibGVcblxuXG4gICAgdmFyIGFuY2VzdG9ycyA9IFtdO1xuICAgIHZhciBhbmNlc3RvciA9IHByaW9yRm9jdXNlZEVsZW07XG5cbiAgICB3aGlsZSAoYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlKSB7XG4gICAgICBpZiAoYW5jZXN0b3Iubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICBhbmNlc3RvcnMucHVzaCh7XG4gICAgICAgICAgZWxlbWVudDogYW5jZXN0b3IsXG4gICAgICAgICAgbGVmdDogYW5jZXN0b3Iuc2Nyb2xsTGVmdCxcbiAgICAgICAgICB0b3A6IGFuY2VzdG9yLnNjcm9sbFRvcFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByaW9yRm9jdXNlZEVsZW0uZm9jdXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByaW9yRm9jdXNlZEVsZW0uZm9jdXMoKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFuY2VzdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGluZm8gPSBhbmNlc3RvcnNbaV07XG4gICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsTGVmdCA9IGluZm8ubGVmdDtcbiAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxUb3AgPSBpbmZvLnRvcDtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogQGdldFNlbGVjdGlvbjogR2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIGZvY3VzZWQgdGV4dGFyZWEsIGlucHV0IG9yXG4gKiBjb250ZW50RWRpdGFibGUgbm9kZS5cbiAqIC1AaW5wdXQ6IExvb2sgdXAgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0XG4gKiAtQHJldHVybiB7c3RhcnQ6IHNlbGVjdGlvblN0YXJ0LCBlbmQ6IHNlbGVjdGlvbkVuZH1cbiAqL1xuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24oaW5wdXQpIHtcbiAgdmFyIHNlbGVjdGlvbjtcblxuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgIC8vIE1vZGVybiBicm93c2VyIHdpdGggaW5wdXQgb3IgdGV4dGFyZWEuXG4gICAgc2VsZWN0aW9uID0ge1xuICAgICAgc3RhcnQ6IGlucHV0LnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBpbnB1dC5zZWxlY3Rpb25FbmRcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIENvbnRlbnQgZWRpdGFibGUgb3Igb2xkIElFIHRleHRhcmVhLlxuICAgIHNlbGVjdGlvbiA9IGdldE9mZnNldHMoaW5wdXQpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGVjdGlvbiB8fCB7XG4gICAgc3RhcnQ6IDAsXG4gICAgZW5kOiAwXG4gIH07XG59XG4vKipcbiAqIEBzZXRTZWxlY3Rpb246IFNldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSB0ZXh0YXJlYSBvciBpbnB1dCBhbmQgZm9jdXNlc1xuICogdGhlIGlucHV0LlxuICogLUBpbnB1dCAgICAgU2V0IHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dCBvciB0ZXh0YXJlYVxuICogLUBvZmZzZXRzICAgT2JqZWN0IG9mIHNhbWUgZm9ybSB0aGF0IGlzIHJldHVybmVkIGZyb20gZ2V0KlxuICovXG5cbmZ1bmN0aW9uIHNldFNlbGVjdGlvbihpbnB1dCwgb2Zmc2V0cykge1xuICB2YXIgc3RhcnQgPSBvZmZzZXRzLnN0YXJ0O1xuICB2YXIgZW5kID0gb2Zmc2V0cy5lbmQ7XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gc3RhcnQ7XG4gIH1cblxuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgIGlucHV0LnNlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7XG4gICAgaW5wdXQuc2VsZWN0aW9uRW5kID0gTWF0aC5taW4oZW5kLCBpbnB1dC52YWx1ZS5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHNldE9mZnNldHMoaW5wdXQsIG9mZnNldHMpO1xuICB9XG59XG5cbnZhciBza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQgPSBjYW5Vc2VET00gJiYgJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDw9IDExO1xuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cyQzKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uU2VsZWN0JywgWydmb2N1c291dCcsICdjb250ZXh0bWVudScsICdkcmFnZW5kJywgJ2ZvY3VzaW4nLCAna2V5ZG93bicsICdrZXl1cCcsICdtb3VzZWRvd24nLCAnbW91c2V1cCcsICdzZWxlY3Rpb25jaGFuZ2UnXSk7XG59XG5cbnZhciBhY3RpdmVFbGVtZW50JDEgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSBudWxsO1xudmFyIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xudmFyIG1vdXNlRG93biA9IGZhbHNlO1xuLyoqXG4gKiBHZXQgYW4gb2JqZWN0IHdoaWNoIGlzIGEgdW5pcXVlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbi5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgbm90IGJlIGNvbnNpc3RlbnQgYWNyb3NzIG5vZGVzIG9yIGJyb3dzZXJzLCBidXRcbiAqIHR3byBpZGVudGljYWwgc2VsZWN0aW9ucyBvbiB0aGUgc2FtZSBub2RlIHdpbGwgcmV0dXJuIGlkZW50aWNhbCBvYmplY3RzLlxuICovXG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbiQxKG5vZGUpIHtcbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gbm9kZSAmJiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMobm9kZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IG5vZGUuc2VsZWN0aW9uU3RhcnQsXG4gICAgICBlbmQ6IG5vZGUuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgd2luID0gbm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG4gICAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24oKTtcbiAgICByZXR1cm4ge1xuICAgICAgYW5jaG9yTm9kZTogc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICBhbmNob3JPZmZzZXQ6IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICBmb2N1c05vZGU6IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldDogc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgfTtcbiAgfVxufVxuLyoqXG4gKiBHZXQgZG9jdW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudCB0YXJnZXQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldERvY3VtZW50KGV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBldmVudFRhcmdldC53aW5kb3cgPT09IGV2ZW50VGFyZ2V0ID8gZXZlbnRUYXJnZXQuZG9jdW1lbnQgOiBldmVudFRhcmdldC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/IGV2ZW50VGFyZ2V0IDogZXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcbn1cbi8qKlxuICogUG9sbCBzZWxlY3Rpb24gdG8gc2VlIHdoZXRoZXIgaXQncyBjaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gKiBAcmV0dXJuIHs/U3ludGhldGljRXZlbnR9XG4gKi9cblxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgLy8gRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGVsZW1lbnQsIGFuZCB0aGF0IHRoZSB1c2VyIGlzIG5vdCBkcmFnZ2luZyBhXG4gIC8vIHNlbGVjdGlvbiAodGhpcyBtYXRjaGVzIG5hdGl2ZSBgc2VsZWN0YCBldmVudCBiZWhhdmlvcikuIEluIEhUTUw1LCBzZWxlY3RcbiAgLy8gZmlyZXMgb25seSBvbiBpbnB1dCBhbmQgdGV4dGFyZWEgdGh1cyBpZiB0aGVyZSdzIG5vIGZvY3VzZWQgZWxlbWVudCB3ZVxuICAvLyB3b24ndCBkaXNwYXRjaC5cbiAgdmFyIGRvYyA9IGdldEV2ZW50VGFyZ2V0RG9jdW1lbnQobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmIChtb3VzZURvd24gfHwgYWN0aXZlRWxlbWVudCQxID09IG51bGwgfHwgYWN0aXZlRWxlbWVudCQxICE9PSBnZXRBY3RpdmVFbGVtZW50KGRvYykpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gT25seSBmaXJlIHdoZW4gc2VsZWN0aW9uIGhhcyBhY3R1YWxseSBjaGFuZ2VkLlxuXG5cbiAgdmFyIGN1cnJlbnRTZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24kMShhY3RpdmVFbGVtZW50JDEpO1xuXG4gIGlmICghbGFzdFNlbGVjdGlvbiB8fCAhc2hhbGxvd0VxdWFsKGxhc3RTZWxlY3Rpb24sIGN1cnJlbnRTZWxlY3Rpb24pKSB7XG4gICAgbGFzdFNlbGVjdGlvbiA9IGN1cnJlbnRTZWxlY3Rpb247XG4gICAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyhhY3RpdmVFbGVtZW50SW5zdCQxLCAnb25TZWxlY3QnKTtcblxuICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KCdvblNlbGVjdCcsICdzZWxlY3QnLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgICAgfSk7XG4gICAgICBldmVudC50YXJnZXQgPSBhY3RpdmVFbGVtZW50JDE7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uU2VsZWN0YCBldmVudCB0aGF0IG5vcm1hbGl6ZXMgc2VsZWN0IGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuXG4gKlxuICogU3VwcG9ydGVkIGVsZW1lbnRzIGFyZTpcbiAqIC0gaW5wdXQgKHNlZSBgaXNUZXh0SW5wdXRFbGVtZW50YClcbiAqIC0gdGV4dGFyZWFcbiAqIC0gY29udGVudEVkaXRhYmxlXG4gKlxuICogVGhpcyBkaWZmZXJzIGZyb20gbmF0aXZlIGJyb3dzZXIgaW1wbGVtZW50YXRpb25zIGluIHRoZSBmb2xsb3dpbmcgd2F5czpcbiAqIC0gRmlyZXMgb24gY29udGVudEVkaXRhYmxlIGZpZWxkcyBhcyB3ZWxsIGFzIGlucHV0cy5cbiAqIC0gRmlyZXMgZm9yIGNvbGxhcHNlZCBzZWxlY3Rpb24uXG4gKiAtIEZpcmVzIGFmdGVyIHVzZXIgaW5wdXQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuXG4gIHZhciB0YXJnZXROb2RlID0gdGFyZ2V0SW5zdCA/IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAvLyBUcmFjayB0aGUgaW5wdXQgbm9kZSB0aGF0IGhhcyBmb2N1cy5cbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIGlmIChpc1RleHRJbnB1dEVsZW1lbnQodGFyZ2V0Tm9kZSkgfHwgdGFyZ2V0Tm9kZS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJykge1xuICAgICAgICBhY3RpdmVFbGVtZW50JDEgPSB0YXJnZXROb2RlO1xuICAgICAgICBhY3RpdmVFbGVtZW50SW5zdCQxID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgYWN0aXZlRWxlbWVudCQxID0gbnVsbDtcbiAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSBudWxsO1xuICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICBicmVhaztcbiAgICAvLyBEb24ndCBmaXJlIHRoZSBldmVudCB3aGlsZSB0aGUgdXNlciBpcyBkcmFnZ2luZy4gVGhpcyBtYXRjaGVzIHRoZVxuICAgIC8vIHNlbWFudGljcyBvZiB0aGUgbmF0aXZlIHNlbGVjdCBldmVudC5cblxuICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgICBtb3VzZURvd24gPSB0cnVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjb250ZXh0bWVudSc6XG4gICAgY2FzZSAnbW91c2V1cCc6XG4gICAgY2FzZSAnZHJhZ2VuZCc6XG4gICAgICBtb3VzZURvd24gPSBmYWxzZTtcbiAgICAgIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICBicmVhaztcbiAgICAvLyBDaHJvbWUgYW5kIElFIGZpcmUgbm9uLXN0YW5kYXJkIGV2ZW50IHdoZW4gc2VsZWN0aW9uIGlzIGNoYW5nZWQgKGFuZFxuICAgIC8vIHNvbWV0aW1lcyB3aGVuIGl0IGhhc24ndCkuIElFJ3MgZXZlbnQgZmlyZXMgb3V0IG9mIG9yZGVyIHdpdGggcmVzcGVjdFxuICAgIC8vIHRvIGtleSBhbmQgaW5wdXQgZXZlbnRzIG9uIGRlbGV0aW9uLCBzbyB3ZSBkaXNjYXJkIGl0LlxuICAgIC8vXG4gICAgLy8gRmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgc2VsZWN0aW9uY2hhbmdlLCBzbyBjaGVjayBzZWxlY3Rpb24gc3RhdHVzXG4gICAgLy8gYWZ0ZXIgZWFjaCBrZXkgZW50cnkuIFRoZSBzZWxlY3Rpb24gY2hhbmdlcyBhZnRlciBrZXlkb3duIGFuZCBiZWZvcmVcbiAgICAvLyBrZXl1cCwgYnV0IHdlIGNoZWNrIG9uIGtleWRvd24gYXMgd2VsbCBpbiB0aGUgY2FzZSBvZiBob2xkaW5nIGRvd24gYVxuICAgIC8vIGtleSwgd2hlbiBtdWx0aXBsZSBrZXlkb3duIGV2ZW50cyBhcmUgZmlyZWQgYnV0IG9ubHkgb25lIGtleXVwIGlzLlxuICAgIC8vIFRoaXMgaXMgYWxzbyBvdXIgYXBwcm9hY2ggZm9yIElFIGhhbmRsaW5nLCBmb3IgdGhlIHJlYXNvbiBhYm92ZS5cblxuICAgIGNhc2UgJ3NlbGVjdGlvbmNoYW5nZSc6XG4gICAgICBpZiAoc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgLy8gZmFsbHMgdGhyb3VnaFxuXG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgY2FzZSAna2V5dXAnOlxuICAgICAgY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgcmVhY3ROYW1lID0gdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuZ2V0KGRvbUV2ZW50TmFtZSk7XG5cbiAgaWYgKHJlYWN0TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0V2ZW50O1xuICB2YXIgcmVhY3RFdmVudFR5cGUgPSBkb21FdmVudE5hbWU7XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvLyBGaXJlZm94IGNyZWF0ZXMgYSBrZXlwcmVzcyBldmVudCBmb3IgZnVuY3Rpb24ga2V5cyB0b28uIFRoaXMgcmVtb3Zlc1xuICAgICAgLy8gdGhlIHVud2FudGVkIGtleXByZXNzIGV2ZW50cy4gRW50ZXIgaXMgaG93ZXZlciBib3RoIHByaW50YWJsZSBhbmRcbiAgICAgIC8vIG5vbi1wcmludGFibGUuIE9uZSB3b3VsZCBleHBlY3QgVGFiIHRvIGJlIGFzIHdlbGwgKGJ1dCBpdCBpc24ndCkuXG4gICAgICBpZiAoZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgY2FzZSAna2V5dXAnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljS2V5Ym9hcmRFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICByZWFjdEV2ZW50VHlwZSA9ICdmb2N1cyc7XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICByZWFjdEV2ZW50VHlwZSA9ICdibHVyJztcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2JlZm9yZWJsdXInOlxuICAgIGNhc2UgJ2FmdGVyYmx1cic6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjbGljayc6XG4gICAgICAvLyBGaXJlZm94IGNyZWF0ZXMgYSBjbGljayBldmVudCBvbiByaWdodCBtb3VzZSBjbGlja3MuIFRoaXMgcmVtb3ZlcyB0aGVcbiAgICAgIC8vIHVud2FudGVkIGNsaWNrIGV2ZW50cy5cbiAgICAgIGlmIChuYXRpdmVFdmVudC5idXR0b24gPT09IDIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgY2FzZSAnYXV4Y2xpY2snOlxuICAgIGNhc2UgJ2RibGNsaWNrJzpcbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgIGNhc2UgJ21vdXNlbW92ZSc6XG4gICAgY2FzZSAnbW91c2V1cCc6IC8vIFRPRE86IERpc2FibGVkIGVsZW1lbnRzIHNob3VsZCBub3QgcmVzcG9uZCB0byBtb3VzZSBldmVudHNcblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgIGNhc2UgJ2NvbnRleHRtZW51JzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RyYWcnOlxuICAgIGNhc2UgJ2RyYWdlbmQnOlxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgY2FzZSAnZHJhZ2V4aXQnOlxuICAgIGNhc2UgJ2RyYWdsZWF2ZSc6XG4gICAgY2FzZSAnZHJhZ292ZXInOlxuICAgIGNhc2UgJ2RyYWdzdGFydCc6XG4gICAgY2FzZSAnZHJvcCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNEcmFnRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RvdWNoY2FuY2VsJzpcbiAgICBjYXNlICd0b3VjaGVuZCc6XG4gICAgY2FzZSAndG91Y2htb3ZlJzpcbiAgICBjYXNlICd0b3VjaHN0YXJ0JzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQU5JTUFUSU9OX0VORDpcbiAgICBjYXNlIEFOSU1BVElPTl9JVEVSQVRJT046XG4gICAgY2FzZSBBTklNQVRJT05fU1RBUlQ6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNBbmltYXRpb25FdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBUUkFOU0lUSU9OX0VORDpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2Nyb2xsJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1VJRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3doZWVsJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1doZWVsRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NvcHknOlxuICAgIGNhc2UgJ2N1dCc6XG4gICAgY2FzZSAncGFzdGUnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQ2xpcGJvYXJkRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2dvdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdsb3N0cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ3BvaW50ZXJjYW5jZWwnOlxuICAgIGNhc2UgJ3BvaW50ZXJkb3duJzpcbiAgICBjYXNlICdwb2ludGVybW92ZSc6XG4gICAgY2FzZSAncG9pbnRlcm91dCc6XG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgIGNhc2UgJ3BvaW50ZXJ1cCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBpbkNhcHR1cmVQaGFzZSA9IChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSkgIT09IDA7XG5cbiAge1xuICAgIC8vIFNvbWUgZXZlbnRzIGRvbid0IGJ1YmJsZSBpbiB0aGUgYnJvd3Nlci5cbiAgICAvLyBJbiB0aGUgcGFzdCwgUmVhY3QgaGFzIGFsd2F5cyBidWJibGVkIHRoZW0sIGJ1dCB0aGlzIGNhbiBiZSBzdXJwcmlzaW5nLlxuICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHRyeSBhbGlnbmluZyBjbG9zZXIgdG8gdGhlIGJyb3dzZXIgYmVoYXZpb3IgYnkgbm90IGJ1YmJsaW5nXG4gICAgLy8gdGhlbSBpbiBSZWFjdCBlaXRoZXIuIFdlJ2xsIHN0YXJ0IGJ5IG5vdCBidWJibGluZyBvblNjcm9sbCwgYW5kIHRoZW4gZXhwYW5kLlxuICAgIHZhciBhY2N1bXVsYXRlVGFyZ2V0T25seSA9ICFpbkNhcHR1cmVQaGFzZSAmJiAvLyBUT0RPOiBpZGVhbGx5LCB3ZSdkIGV2ZW50dWFsbHkgYWRkIGFsbCBldmVudHMgZnJvbVxuICAgIC8vIG5vbkRlbGVnYXRlZEV2ZW50cyBsaXN0IGluIERPTVBsdWdpbkV2ZW50U3lzdGVtLlxuICAgIC8vIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGlzIHNwZWNpYWwgbGlzdC5cbiAgICAvLyBUaGlzIGlzIGEgYnJlYWtpbmcgY2hhbmdlIHRoYXQgY2FuIHdhaXQgdW50aWwgUmVhY3QgMTguXG4gICAgZG9tRXZlbnROYW1lID09PSAnc2Nyb2xsJztcblxuICAgIHZhciBfbGlzdGVuZXJzID0gYWNjdW11bGF0ZVNpbmdsZVBoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsIHJlYWN0TmFtZSwgbmF0aXZlRXZlbnQudHlwZSwgaW5DYXB0dXJlUGhhc2UsIGFjY3VtdWxhdGVUYXJnZXRPbmx5KTtcblxuICAgIGlmIChfbGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgY3JlYXRlIGV2ZW50IGxhemlseS5cbiAgICAgIHZhciBfZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKHJlYWN0TmFtZSwgcmVhY3RFdmVudFR5cGUsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgIGV2ZW50OiBfZXZlbnQsXG4gICAgICAgIGxpc3RlbmVyczogX2xpc3RlbmVyc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8vIFRPRE86IHJlbW92ZSB0b3AtbGV2ZWwgc2lkZSBlZmZlY3QuXG5yZWdpc3RlclNpbXBsZUV2ZW50cygpO1xucmVnaXN0ZXJFdmVudHMkMigpO1xucmVnaXN0ZXJFdmVudHMkMSgpO1xucmVnaXN0ZXJFdmVudHMkMygpO1xucmVnaXN0ZXJFdmVudHMoKTtcblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQ1KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgLy8gVE9ETzogd2Ugc2hvdWxkIHJlbW92ZSB0aGUgY29uY2VwdCBvZiBhIFwiU2ltcGxlRXZlbnRQbHVnaW5cIi5cbiAgLy8gVGhpcyBpcyB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZXZlbnQgc3lzdGVtLiBBbGxcbiAgLy8gdGhlIG90aGVyIHBsdWdpbnMgYXJlIGVzc2VudGlhbGx5IHBvbHlmaWxscy4gU28gdGhlIHBsdWdpblxuICAvLyBzaG91bGQgcHJvYmFibHkgYmUgaW5saW5lZCBzb21ld2hlcmUgYW5kIGhhdmUgaXRzIGxvZ2ljXG4gIC8vIGJlIGNvcmUgdGhlIHRvIGV2ZW50IHN5c3RlbS4gVGhpcyB3b3VsZCBwb3RlbnRpYWxseSBhbGxvd1xuICAvLyB1cyB0byBzaGlwIGJ1aWxkcyBvZiBSZWFjdCB3aXRob3V0IHRoZSBwb2x5ZmlsbGVkIHBsdWdpbnMgYmVsb3cuXG4gIGV4dHJhY3RFdmVudHMkNChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gIHZhciBzaG91bGRQcm9jZXNzUG9seWZpbGxQbHVnaW5zID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBTSE9VTERfTk9UX1BST0NFU1NfUE9MWUZJTExfRVZFTlRfUExVR0lOUykgPT09IDA7IC8vIFdlIGRvbid0IHByb2Nlc3MgdGhlc2UgZXZlbnRzIHVubGVzcyB3ZSBhcmUgaW4gdGhlXG4gIC8vIGV2ZW50J3MgbmF0aXZlIFwiYnViYmxlXCIgcGhhc2UsIHdoaWNoIG1lYW5zIHRoYXQgd2UncmVcbiAgLy8gbm90IGluIHRoZSBjYXB0dXJlIHBoYXNlLiBUaGF0J3MgYmVjYXVzZSB3ZSBlbXVsYXRlXG4gIC8vIHRoZSBjYXB0dXJlIHBoYXNlIGhlcmUgc3RpbGwuIFRoaXMgaXMgYSB0cmFkZS1vZmYsXG4gIC8vIGJlY2F1c2UgaW4gYW4gaWRlYWwgd29ybGQgd2Ugd291bGQgbm90IGVtdWxhdGUgYW5kIHVzZVxuICAvLyB0aGUgcGhhc2VzIHByb3Blcmx5LCBsaWtlIHdlIGRvIHdpdGggdGhlIFNpbXBsZUV2ZW50XG4gIC8vIHBsdWdpbi4gSG93ZXZlciwgdGhlIHBsdWdpbnMgYmVsb3cgZWl0aGVyIGV4cGVjdFxuICAvLyBlbXVsYXRpb24gKEVudGVyTGVhdmUpIG9yIHVzZSBzdGF0ZSBsb2NhbGl6ZWQgdG8gdGhhdFxuICAvLyBwbHVnaW4gKEJlZm9yZUlucHV0LCBDaGFuZ2UsIFNlbGVjdCkuIFRoZSBzdGF0ZSBpblxuICAvLyB0aGVzZSBtb2R1bGVzIGNvbXBsaWNhdGVzIHRoaW5ncywgYXMgeW91J2xsIGVzc2VudGlhbGx5XG4gIC8vIGdldCB0aGUgY2FzZSB3aGVyZSB0aGUgY2FwdHVyZSBwaGFzZSBldmVudCBtaWdodCBjaGFuZ2VcbiAgLy8gc3RhdGUsIG9ubHkgZm9yIHRoZSBmb2xsb3dpbmcgYnViYmxlIGV2ZW50IHRvIGNvbWUgaW5cbiAgLy8gbGF0ZXIgYW5kIG5vdCB0cmlnZ2VyIGFueXRoaW5nIGFzIHRoZSBzdGF0ZSBub3dcbiAgLy8gaW52YWxpZGF0ZXMgdGhlIGhldXJpc3RpY3Mgb2YgdGhlIGV2ZW50IHBsdWdpbi4gV2VcbiAgLy8gY291bGQgYWx0ZXIgYWxsIHRoZXNlIHBsdWdpbnMgdG8gd29yayBpbiBzdWNoIHdheXMsIGJ1dFxuICAvLyB0aGF0IG1pZ2h0IGNhdXNlIG90aGVyIHVua25vd24gc2lkZS1lZmZlY3RzIHRoYXQgd2VcbiAgLy8gY2FuJ3QgZm9yc2VlIHJpZ2h0IG5vdy5cblxuICBpZiAoc2hvdWxkUHJvY2Vzc1BvbHlmaWxsUGx1Z2lucykge1xuICAgIGV4dHJhY3RFdmVudHMkMihkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gICAgZXh0cmFjdEV2ZW50cyQxKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBleHRyYWN0RXZlbnRzJDMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGV4dHJhY3RFdmVudHMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICB9XG59IC8vIExpc3Qgb2YgZXZlbnRzIHRoYXQgbmVlZCB0byBiZSBpbmRpdmlkdWFsbHkgYXR0YWNoZWQgdG8gbWVkaWEgZWxlbWVudHMuXG5cblxudmFyIG1lZGlhRXZlbnRUeXBlcyA9IFsnYWJvcnQnLCAnY2FucGxheScsICdjYW5wbGF5dGhyb3VnaCcsICdkdXJhdGlvbmNoYW5nZScsICdlbXB0aWVkJywgJ2VuY3J5cHRlZCcsICdlbmRlZCcsICdlcnJvcicsICdsb2FkZWRkYXRhJywgJ2xvYWRlZG1ldGFkYXRhJywgJ2xvYWRzdGFydCcsICdwYXVzZScsICdwbGF5JywgJ3BsYXlpbmcnLCAncHJvZ3Jlc3MnLCAncmF0ZWNoYW5nZScsICdzZWVrZWQnLCAnc2Vla2luZycsICdzdGFsbGVkJywgJ3N1c3BlbmQnLCAndGltZXVwZGF0ZScsICd2b2x1bWVjaGFuZ2UnLCAnd2FpdGluZyddOyAvLyBXZSBzaG91bGQgbm90IGRlbGVnYXRlIHRoZXNlIGV2ZW50cyB0byB0aGUgY29udGFpbmVyLCBidXQgcmF0aGVyXG4vLyBzZXQgdGhlbSBvbiB0aGUgYWN0dWFsIHRhcmdldCBlbGVtZW50IGl0c2VsZi4gVGhpcyBpcyBwcmltYXJpbHlcbi8vIGJlY2F1c2UgdGhlc2UgZXZlbnRzIGRvIG5vdCBjb25zaXN0ZW50bHkgYnViYmxlIGluIHRoZSBET00uXG5cbnZhciBub25EZWxlZ2F0ZWRFdmVudHMgPSBuZXcgU2V0KFsnY2FuY2VsJywgJ2Nsb3NlJywgJ2ludmFsaWQnLCAnbG9hZCcsICdzY3JvbGwnLCAndG9nZ2xlJ10uY29uY2F0KG1lZGlhRXZlbnRUeXBlcykpO1xuXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSB7XG4gIHZhciB0eXBlID0gZXZlbnQudHlwZSB8fCAndW5rbm93bi1ldmVudCc7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0O1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2tBbmRDYXRjaEZpcnN0RXJyb3IodHlwZSwgbGlzdGVuZXIsIHVuZGVmaW5lZCwgZXZlbnQpO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0Rpc3BhdGNoUXVldWVJdGVtc0luT3JkZXIoZXZlbnQsIGRpc3BhdGNoTGlzdGVuZXJzLCBpbkNhcHR1cmVQaGFzZSkge1xuICB2YXIgcHJldmlvdXNJbnN0YW5jZTtcblxuICBpZiAoaW5DYXB0dXJlUGhhc2UpIHtcbiAgICBmb3IgKHZhciBpID0gZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBfZGlzcGF0Y2hMaXN0ZW5lcnMkaSA9IGRpc3BhdGNoTGlzdGVuZXJzW2ldLFxuICAgICAgICAgIGluc3RhbmNlID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuaW5zdGFuY2UsXG4gICAgICAgICAgY3VycmVudFRhcmdldCA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgbGlzdGVuZXIgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5saXN0ZW5lcjtcblxuICAgICAgaWYgKGluc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KTtcbiAgICAgIHByZXZpb3VzSW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9kaXNwYXRjaExpc3RlbmVycyRfaSA9IGRpc3BhdGNoTGlzdGVuZXJzW19pXSxcbiAgICAgICAgICBfaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kuaW5zdGFuY2UsXG4gICAgICAgICAgX2N1cnJlbnRUYXJnZXQgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kuY3VycmVudFRhcmdldCxcbiAgICAgICAgICBfbGlzdGVuZXIgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kubGlzdGVuZXI7XG5cbiAgICAgIGlmIChfaW5zdGFuY2UgIT09IHByZXZpb3VzSW5zdGFuY2UgJiYgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgX2xpc3RlbmVyLCBfY3VycmVudFRhcmdldCk7XG4gICAgICBwcmV2aW91c0luc3RhbmNlID0gX2luc3RhbmNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCBldmVudFN5c3RlbUZsYWdzKSB7XG4gIHZhciBpbkNhcHR1cmVQaGFzZSA9IChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSkgIT09IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaFF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIF9kaXNwYXRjaFF1ZXVlJGkgPSBkaXNwYXRjaFF1ZXVlW2ldLFxuICAgICAgICBldmVudCA9IF9kaXNwYXRjaFF1ZXVlJGkuZXZlbnQsXG4gICAgICAgIGxpc3RlbmVycyA9IF9kaXNwYXRjaFF1ZXVlJGkubGlzdGVuZXJzO1xuICAgIHByb2Nlc3NEaXNwYXRjaFF1ZXVlSXRlbXNJbk9yZGVyKGV2ZW50LCBsaXN0ZW5lcnMsIGluQ2FwdHVyZVBoYXNlKTsgLy8gIGV2ZW50IHN5c3RlbSBkb2Vzbid0IHVzZSBwb29saW5nLlxuICB9IC8vIFRoaXMgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcmV0aHJvdyBpZiBhbnkgb2YgdGhlIGV2ZW50IGhhbmRsZXJzIHRocmV3LlxuXG5cbiAgcmV0aHJvd0NhdWdodEVycm9yKCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRzRm9yUGx1Z2lucyhkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIG5hdGl2ZUV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpO1xuICB2YXIgZGlzcGF0Y2hRdWV1ZSA9IFtdO1xuICBleHRyYWN0RXZlbnRzJDUoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCBldmVudFN5c3RlbUZsYWdzKTtcbn1cblxuZnVuY3Rpb24gbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEVsZW1lbnQpIHtcbiAgdmFyIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIgPSBmYWxzZTtcbiAgdmFyIGxpc3RlbmVyU2V0ID0gZ2V0RXZlbnRMaXN0ZW5lclNldCh0YXJnZXRFbGVtZW50KTtcbiAgdmFyIGxpc3RlbmVyU2V0S2V5ID0gZ2V0TGlzdGVuZXJTZXRLZXkoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcblxuICBpZiAoIWxpc3RlbmVyU2V0LmhhcyhsaXN0ZW5lclNldEtleSkpIHtcbiAgICBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXRFbGVtZW50LCBkb21FdmVudE5hbWUsIElTX05PTl9ERUxFR0FURUQsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpO1xuICAgIGxpc3RlbmVyU2V0LmFkZChsaXN0ZW5lclNldEtleSk7XG4gIH1cbn1cbnZhciBsaXN0ZW5pbmdNYXJrZXIgPSAnX3JlYWN0TGlzdGVuaW5nJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xuZnVuY3Rpb24gbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChyb290Q29udGFpbmVyRWxlbWVudFtsaXN0ZW5pbmdNYXJrZXJdKSB7XG4gICAgICAvLyBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IGRvbid0IGl0ZXJhdGUgdGhyb3VnaCBldmVudHNcbiAgICAgIC8vIGZvciB0aGUgc2FtZSBwb3J0YWwgY29udGFpbmVyIG9yIHJvb3Qgbm9kZSBtb3JlIHRoYW4gb25jZS5cbiAgICAgIC8vIFRPRE86IG9uY2Ugd2UgcmVtb3ZlIHRoZSBmbGFnLCB3ZSBtYXkgYmUgYWJsZSB0byBhbHNvXG4gICAgICAvLyByZW1vdmUgc29tZSBvZiB0aGUgYm9va2tlZXBpbmcgbWFwcyB1c2VkIGZvciBsYXppbmVzcy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByb290Q29udGFpbmVyRWxlbWVudFtsaXN0ZW5pbmdNYXJrZXJdID0gdHJ1ZTtcbiAgICBhbGxOYXRpdmVFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZG9tRXZlbnROYW1lKSB7XG4gICAgICBpZiAoIW5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSkge1xuICAgICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgZmFsc2UsIHJvb3RDb250YWluZXJFbGVtZW50LCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIHRydWUsIHJvb3RDb250YWluZXJFbGVtZW50LCBudWxsKTtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIsIHJvb3RDb250YWluZXJFbGVtZW50LCB0YXJnZXRFbGVtZW50KSB7XG4gIHZhciBldmVudFN5c3RlbUZsYWdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiAwO1xuICB2YXIgdGFyZ2V0ID0gcm9vdENvbnRhaW5lckVsZW1lbnQ7IC8vIHNlbGVjdGlvbmNoYW5nZSBuZWVkcyB0byBiZSBhdHRhY2hlZCB0byB0aGUgZG9jdW1lbnRcbiAgLy8gb3RoZXJ3aXNlIGl0IHdvbid0IGNhcHR1cmUgaW5jb21pbmcgZXZlbnRzIHRoYXQgYXJlIG9ubHlcbiAgLy8gdHJpZ2dlcmVkIG9uIHRoZSBkb2N1bWVudCBkaXJlY3RseS5cblxuICBpZiAoZG9tRXZlbnROYW1lID09PSAnc2VsZWN0aW9uY2hhbmdlJyAmJiByb290Q29udGFpbmVyRWxlbWVudC5ub2RlVHlwZSAhPT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHRhcmdldCA9IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gIH0gLy8gSWYgdGhlIGV2ZW50IGNhbiBiZSBkZWxlZ2F0ZWQgKG9yIGlzIGNhcHR1cmUgcGhhc2UpLCB3ZSBjYW5cbiAgLy8gcmVnaXN0ZXIgaXQgdG8gdGhlIHJvb3QgY29udGFpbmVyLiBPdGhlcndpc2UsIHdlIHNob3VsZFxuICAvLyByZWdpc3RlciB0aGUgZXZlbnQgdG8gdGhlIHRhcmdldCBlbGVtZW50IGFuZCBtYXJrIGl0IGFzXG4gIC8vIGEgbm9uLWRlbGVnYXRlZCBldmVudC5cblxuXG4gIGlmICh0YXJnZXRFbGVtZW50ICE9PSBudWxsICYmICFpc0NhcHR1cmVQaGFzZUxpc3RlbmVyICYmIG5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSkge1xuICAgIC8vIEZvciBhbGwgbm9uLWRlbGVnYXRlZCBldmVudHMsIGFwYXJ0IGZyb20gc2Nyb2xsLCB3ZSBhdHRhY2hcbiAgICAvLyB0aGVpciBldmVudCBsaXN0ZW5lcnMgdG8gdGhlIHJlc3BlY3RpdmUgZWxlbWVudHMgdGhhdCB0aGVpclxuICAgIC8vIGV2ZW50cyBmaXJlIG9uLiBUaGF0IG1lYW5zIHdlIGNhbiBza2lwIHRoaXMgc3RlcCwgYXMgZXZlbnRcbiAgICAvLyBsaXN0ZW5lciBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHByZXZpb3VzbHkuIEhvd2V2ZXIsIHdlXG4gICAgLy8gc3BlY2lhbCBjYXNlIHRoZSBzY3JvbGwgZXZlbnQgYmVjYXVzZSB0aGUgcmVhbGl0eSBpcyB0aGF0IGFueVxuICAgIC8vIGVsZW1lbnQgY2FuIHNjcm9sbC5cbiAgICAvLyBUT0RPOiBpZGVhbGx5LCB3ZSdkIGV2ZW50dWFsbHkgYXBwbHkgdGhlIHNhbWUgbG9naWMgdG8gYWxsXG4gICAgLy8gZXZlbnRzIGZyb20gdGhlIG5vbkRlbGVnYXRlZEV2ZW50cyBsaXN0LiBUaGVuIHdlIGNhbiByZW1vdmVcbiAgICAvLyB0aGlzIHNwZWNpYWwgY2FzZSBhbmQgdXNlIHRoZSBzYW1lIGxvZ2ljIGZvciBhbGwgZXZlbnRzLlxuICAgIGlmIChkb21FdmVudE5hbWUgIT09ICdzY3JvbGwnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnRTeXN0ZW1GbGFncyB8PSBJU19OT05fREVMRUdBVEVEO1xuICAgIHRhcmdldCA9IHRhcmdldEVsZW1lbnQ7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJTZXQgPSBnZXRFdmVudExpc3RlbmVyU2V0KHRhcmdldCk7XG4gIHZhciBsaXN0ZW5lclNldEtleSA9IGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7IC8vIElmIHRoZSBsaXN0ZW5lciBlbnRyeSBpcyBlbXB0eSBvciB3ZSBzaG91bGQgdXBncmFkZSwgdGhlblxuICAvLyB3ZSBuZWVkIHRvIHRyYXAgYW4gZXZlbnQgbGlzdGVuZXIgb250byB0aGUgdGFyZ2V0LlxuXG4gIGlmICghbGlzdGVuZXJTZXQuaGFzKGxpc3RlbmVyU2V0S2V5KSkge1xuICAgIGlmIChpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKSB7XG4gICAgICBldmVudFN5c3RlbUZsYWdzIHw9IElTX0NBUFRVUkVfUEhBU0U7XG4gICAgfVxuXG4gICAgYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0LCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpO1xuICAgIGxpc3RlbmVyU2V0LmFkZChsaXN0ZW5lclNldEtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIsIGlzRGVmZXJyZWRMaXN0ZW5lckZvckxlZ2FjeUZCU3VwcG9ydCkge1xuICB2YXIgbGlzdGVuZXIgPSBjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcldpdGhQcmlvcml0eSh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncyk7IC8vIElmIHBhc3NpdmUgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZW4gdGhlIGV2ZW50IHdpbGwgYmVcbiAgLy8gYWN0aXZlIGFuZCBub3QgcGFzc2l2ZS5cblxuICB2YXIgaXNQYXNzaXZlTGlzdGVuZXIgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkKSB7XG4gICAgLy8gQnJvd3NlcnMgaW50cm9kdWNlZCBhbiBpbnRlcnZlbnRpb24sIG1ha2luZyB0aGVzZSBldmVudHNcbiAgICAvLyBwYXNzaXZlIGJ5IGRlZmF1bHQgb24gZG9jdW1lbnQuIFJlYWN0IGRvZXNuJ3QgYmluZCB0aGVtXG4gICAgLy8gdG8gZG9jdW1lbnQgYW55bW9yZSwgYnV0IGNoYW5naW5nIHRoaXMgbm93IHdvdWxkIHVuZG9cbiAgICAvLyB0aGUgcGVyZm9ybWFuY2Ugd2lucyBmcm9tIHRoZSBjaGFuZ2UuIFNvIHdlIGVtdWxhdGVcbiAgICAvLyB0aGUgZXhpc3RpbmcgYmVoYXZpb3IgbWFudWFsbHkgb24gdGhlIHJvb3RzIG5vdy5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5NjUxXG4gICAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3RvdWNoc3RhcnQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3RvdWNobW92ZScgfHwgZG9tRXZlbnROYW1lID09PSAnd2hlZWwnKSB7XG4gICAgICBpc1Bhc3NpdmVMaXN0ZW5lciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdGFyZ2V0Q29udGFpbmVyID0gIHRhcmdldENvbnRhaW5lcjtcbiAgdmFyIHVuc3Vic2NyaWJlTGlzdGVuZXI7IC8vIFdoZW4gbGVnYWN5RkJTdXBwb3J0IGlzIGVuYWJsZWQsIGl0J3MgZm9yIHdoZW4gd2VcblxuXG4gIGlmIChpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKSB7XG4gICAgaWYgKGlzUGFzc2l2ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIsIGlzUGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChpc1Bhc3NpdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIsIGlzUGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50QnViYmxlTGlzdGVuZXIodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoZ3JhbmRDb250YWluZXIsIHRhcmdldENvbnRhaW5lcikge1xuICByZXR1cm4gZ3JhbmRDb250YWluZXIgPT09IHRhcmdldENvbnRhaW5lciB8fCBncmFuZENvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFICYmIGdyYW5kQ29udGFpbmVyLnBhcmVudE5vZGUgPT09IHRhcmdldENvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgYW5jZXN0b3JJbnN0ID0gdGFyZ2V0SW5zdDtcblxuICBpZiAoKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19FVkVOVF9IQU5ETEVfTk9OX01BTkFHRURfTk9ERSkgPT09IDAgJiYgKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19OT05fREVMRUdBVEVEKSA9PT0gMCkge1xuICAgIHZhciB0YXJnZXRDb250YWluZXJOb2RlID0gdGFyZ2V0Q29udGFpbmVyOyAvLyBJZiB3ZSBhcmUgdXNpbmcgdGhlIGxlZ2FjeSBGQiBzdXBwb3J0IGZsYWcsIHdlXG5cbiAgICBpZiAodGFyZ2V0SW5zdCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhlIGJlbG93IGxvZ2ljIGF0dGVtcHRzIHRvIHdvcmsgb3V0IGlmIHdlIG5lZWQgdG8gY2hhbmdlXG4gICAgICAvLyB0aGUgdGFyZ2V0IGZpYmVyIHRvIGEgZGlmZmVyZW50IGFuY2VzdG9yLiBXZSBoYWQgc2ltaWxhciBsb2dpY1xuICAgICAgLy8gaW4gdGhlIGxlZ2FjeSBldmVudCBzeXN0ZW0sIGV4Y2VwdCB0aGUgYmlnIGRpZmZlcmVuY2UgYmV0d2VlblxuICAgICAgLy8gc3lzdGVtcyBpcyB0aGF0IHRoZSBtb2Rlcm4gZXZlbnQgc3lzdGVtIG5vdyBoYXMgYW4gZXZlbnQgbGlzdGVuZXJcbiAgICAgIC8vIGF0dGFjaGVkIHRvIGVhY2ggUmVhY3QgUm9vdCBhbmQgUmVhY3QgUG9ydGFsIFJvb3QuIFRvZ2V0aGVyLFxuICAgICAgLy8gdGhlIERPTSBub2RlcyByZXByZXNlbnRpbmcgdGhlc2Ugcm9vdHMgYXJlIHRoZSBcInJvb3RDb250YWluZXJcIi5cbiAgICAgIC8vIFRvIGZpZ3VyZSBvdXQgd2hpY2ggYW5jZXN0b3IgaW5zdGFuY2Ugd2Ugc2hvdWxkIHVzZSwgd2UgdHJhdmVyc2VcbiAgICAgIC8vIHVwIHRoZSBmaWJlciB0cmVlIGZyb20gdGhlIHRhcmdldCBpbnN0YW5jZSBhbmQgYXR0ZW1wdCB0byBmaW5kXG4gICAgICAvLyByb290IGJvdW5kYXJpZXMgdGhhdCBtYXRjaCB0aGF0IG9mIG91ciBjdXJyZW50IFwicm9vdENvbnRhaW5lclwiLlxuICAgICAgLy8gSWYgd2UgZmluZCB0aGF0IFwicm9vdENvbnRhaW5lclwiLCB3ZSBmaW5kIHRoZSBwYXJlbnQgZmliZXJcbiAgICAgIC8vIHN1Yi10cmVlIGZvciB0aGF0IHJvb3QgYW5kIG1ha2UgdGhhdCBvdXIgYW5jZXN0b3IgaW5zdGFuY2UuXG4gICAgICB2YXIgbm9kZSA9IHRhcmdldEluc3Q7XG5cbiAgICAgIG1haW5Mb29wOiB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBub2RlVGFnID0gbm9kZS50YWc7XG5cbiAgICAgICAgaWYgKG5vZGVUYWcgPT09IEhvc3RSb290IHx8IG5vZGVUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICB2YXIgY29udGFpbmVyID0gbm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgIGlmIChpc01hdGNoaW5nUm9vdENvbnRhaW5lcihjb250YWluZXIsIHRhcmdldENvbnRhaW5lck5vZGUpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobm9kZVRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgICAgLy8gVGhlIHRhcmdldCBpcyBhIHBvcnRhbCwgYnV0IGl0J3Mgbm90IHRoZSByb290Q29udGFpbmVyIHdlJ3JlIGxvb2tpbmcgZm9yLlxuICAgICAgICAgICAgLy8gTm9ybWFsbHkgcG9ydGFscyBoYW5kbGUgdGhlaXIgb3duIGV2ZW50cyBhbGwgdGhlIHdheSBkb3duIHRvIHRoZSByb290LlxuICAgICAgICAgICAgLy8gU28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gc3RvcCBub3cuIEhvd2V2ZXIsIHdlIGRvbid0IGtub3cgaWYgdGhpcyBwb3J0YWxcbiAgICAgICAgICAgIC8vIHdhcyBwYXJ0IG9mICpvdXIqIHJvb3QuXG4gICAgICAgICAgICB2YXIgZ3JhbmROb2RlID0gbm9kZS5yZXR1cm47XG5cbiAgICAgICAgICAgIHdoaWxlIChncmFuZE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFyIGdyYW5kVGFnID0gZ3JhbmROb2RlLnRhZztcblxuICAgICAgICAgICAgICBpZiAoZ3JhbmRUYWcgPT09IEhvc3RSb290IHx8IGdyYW5kVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGdyYW5kQ29udGFpbmVyID0gZ3JhbmROb2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGdyYW5kQ29udGFpbmVyLCB0YXJnZXRDb250YWluZXJOb2RlKSkge1xuICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcm9vdENvbnRhaW5lciB3ZSdyZSBsb29raW5nIGZvciBhbmQgd2UgZm91bmQgaXQgYXNcbiAgICAgICAgICAgICAgICAgIC8vIGEgcGFyZW50IG9mIHRoZSBQb3J0YWwuIFRoYXQgbWVhbnMgd2UgY2FuIGlnbm9yZSBpdCBiZWNhdXNlIHRoZVxuICAgICAgICAgICAgICAgICAgLy8gUG9ydGFsIHdpbGwgYnViYmxlIHRocm91Z2ggdG8gdXMuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZ3JhbmROb2RlID0gZ3JhbmROb2RlLnJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIE5vdyB3ZSBuZWVkIHRvIGZpbmQgaXQncyBjb3JyZXNwb25kaW5nIGhvc3QgZmliZXIgaW4gdGhlIG90aGVyXG4gICAgICAgICAgLy8gdHJlZS4gVG8gZG8gdGhpcyB3ZSBjYW4gdXNlIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlLCBidXQgd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGZpYmVyIGlzIGEgaG9zdCBpbnN0YW5jZSwgb3RoZXJ3aXNlXG4gICAgICAgICAgLy8gd2UgbmVlZCB0byB0cmF2ZXJzZSB1cCB0aHJvdWdoIHRoZSBET00gdGlsbCB3ZSBmaW5kIHRoZSBjb3JyZWN0XG4gICAgICAgICAgLy8gbm9kZSB0aGF0IGlzIGZyb20gdGhlIG90aGVyIHRyZWUuXG5cblxuICAgICAgICAgIHdoaWxlIChjb250YWluZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBwYXJlbnROb2RlID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoY29udGFpbmVyKTtcblxuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcGFyZW50VGFnID0gcGFyZW50Tm9kZS50YWc7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRUYWcgPT09IEhvc3RDb21wb25lbnQgfHwgcGFyZW50VGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICAgICAgICBub2RlID0gYW5jZXN0b3JJbnN0ID0gcGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgY29udGludWUgbWFpbkxvb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBiYXRjaGVkRXZlbnRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudHNGb3JQbHVnaW5zKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIGFuY2VzdG9ySW5zdCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCkge1xuICByZXR1cm4ge1xuICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICBsaXN0ZW5lcjogbGlzdGVuZXIsXG4gICAgY3VycmVudFRhcmdldDogY3VycmVudFRhcmdldFxuICB9O1xufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlU2luZ2xlUGhhc2VMaXN0ZW5lcnModGFyZ2V0RmliZXIsIHJlYWN0TmFtZSwgbmF0aXZlRXZlbnRUeXBlLCBpbkNhcHR1cmVQaGFzZSwgYWNjdW11bGF0ZVRhcmdldE9ubHkpIHtcbiAgdmFyIGNhcHR1cmVOYW1lID0gcmVhY3ROYW1lICE9PSBudWxsID8gcmVhY3ROYW1lICsgJ0NhcHR1cmUnIDogbnVsbDtcbiAgdmFyIHJlYWN0RXZlbnROYW1lID0gaW5DYXB0dXJlUGhhc2UgPyBjYXB0dXJlTmFtZSA6IHJlYWN0TmFtZTtcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXRGaWJlcjtcbiAgdmFyIGxhc3RIb3N0Q29tcG9uZW50ID0gbnVsbDsgLy8gQWNjdW11bGF0ZSBhbGwgaW5zdGFuY2VzIGFuZCBsaXN0ZW5lcnMgdmlhIHRoZSB0YXJnZXQgLT4gcm9vdCBwYXRoLlxuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIHZhciBfaW5zdGFuY2UyID0gaW5zdGFuY2UsXG4gICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTIuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBfaW5zdGFuY2UyLnRhZzsgLy8gSGFuZGxlIGxpc3RlbmVycyB0aGF0IGFyZSBvbiBIb3N0Q29tcG9uZW50cyAoaS5lLiA8ZGl2PilcblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICBsYXN0SG9zdENvbXBvbmVudCA9IHN0YXRlTm9kZTsgLy8gY3JlYXRlRXZlbnRIYW5kbGUgbGlzdGVuZXJzXG5cblxuICAgICAgaWYgKHJlYWN0RXZlbnROYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWFjdEV2ZW50TmFtZSk7XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBsaXN0ZW5lciwgbGFzdEhvc3RDb21wb25lbnQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gSWYgd2UgYXJlIG9ubHkgYWNjdW11bGF0aW5nIGV2ZW50cyBmb3IgdGhlIHRhcmdldCwgdGhlbiB3ZSBkb24ndFxuICAgIC8vIGNvbnRpbnVlIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIHRoZSBSZWFjdCBmaWJlciB0cmVlIHRvIGZpbmQgb3RoZXJcbiAgICAvLyBsaXN0ZW5lcnMuXG5cblxuICAgIGlmIChhY2N1bXVsYXRlVGFyZ2V0T25seSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXJzO1xufSAvLyBXZSBzaG91bGQgb25seSB1c2UgdGhpcyBmdW5jdGlvbiBmb3I6XG4vLyAtIEJlZm9yZUlucHV0RXZlbnRQbHVnaW5cbi8vIC0gQ2hhbmdlRXZlbnRQbHVnaW5cbi8vIC0gU2VsZWN0RXZlbnRQbHVnaW5cbi8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBvbmx5IHByb2Nlc3MgdGhlc2UgcGx1Z2luc1xuLy8gaW4gdGhlIGJ1YmJsZSBwaGFzZSwgc28gd2UgbmVlZCB0byBhY2N1bXVsYXRlIHR3b1xuLy8gcGhhc2UgZXZlbnQgbGlzdGVuZXJzICh2aWEgZW11bGF0aW9uKS5cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEZpYmVyLCByZWFjdE5hbWUpIHtcbiAgdmFyIGNhcHR1cmVOYW1lID0gcmVhY3ROYW1lICsgJ0NhcHR1cmUnO1xuICB2YXIgbGlzdGVuZXJzID0gW107XG4gIHZhciBpbnN0YW5jZSA9IHRhcmdldEZpYmVyOyAvLyBBY2N1bXVsYXRlIGFsbCBpbnN0YW5jZXMgYW5kIGxpc3RlbmVycyB2aWEgdGhlIHRhcmdldCAtPiByb290IHBhdGguXG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgdmFyIF9pbnN0YW5jZTMgPSBpbnN0YW5jZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlMy5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTMudGFnOyAvLyBIYW5kbGUgbGlzdGVuZXJzIHRoYXQgYXJlIG9uIEhvc3RDb21wb25lbnRzIChpLmUuIDxkaXY+KVxuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBzdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gc3RhdGVOb2RlO1xuICAgICAgdmFyIGNhcHR1cmVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTmFtZSk7XG5cbiAgICAgIGlmIChjYXB0dXJlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGJ1YmJsZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlYWN0TmFtZSk7XG5cbiAgICAgIGlmIChidWJibGVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGJ1YmJsZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXJzO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJlbnQoaW5zdCkge1xuICBpZiAoaW5zdCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZG8ge1xuICAgIGluc3QgPSBpbnN0LnJldHVybjsgLy8gVE9ETzogSWYgdGhpcyBpcyBhIEhvc3RSb290IHdlIG1pZ2h0IHdhbnQgdG8gYmFpbCBvdXQuXG4gICAgLy8gVGhhdCBpcyBkZXBlbmRpbmcgb24gaWYgd2Ugd2FudCBuZXN0ZWQgc3VidHJlZXMgKGxheWVycykgdG8gYnViYmxlXG4gICAgLy8gZXZlbnRzIHRvIHRoZWlyIHBhcmVudC4gV2UgY291bGQgYWxzbyBnbyB0aHJvdWdoIHBhcmVudE5vZGUgb24gdGhlXG4gICAgLy8gaG9zdCBub2RlIGJ1dCB0aGF0IHdvdWxkbid0IHdvcmsgZm9yIFJlYWN0IE5hdGl2ZSBhbmQgZG9lc24ndCBsZXQgdXNcbiAgICAvLyBkbyB0aGUgcG9ydGFsIGZlYXR1cmUuXG4gIH0gd2hpbGUgKGluc3QgJiYgaW5zdC50YWcgIT09IEhvc3RDb21wb25lbnQpO1xuXG4gIGlmIChpbnN0KSB7XG4gICAgcmV0dXJuIGluc3Q7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogUmV0dXJuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIEEgYW5kIEIsIG9yIG51bGwgaWYgdGhleSBhcmUgaW5cbiAqIGRpZmZlcmVudCB0cmVlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldExvd2VzdENvbW1vbkFuY2VzdG9yKGluc3RBLCBpbnN0Qikge1xuICB2YXIgbm9kZUEgPSBpbnN0QTtcbiAgdmFyIG5vZGVCID0gaW5zdEI7XG4gIHZhciBkZXB0aEEgPSAwO1xuXG4gIGZvciAodmFyIHRlbXBBID0gbm9kZUE7IHRlbXBBOyB0ZW1wQSA9IGdldFBhcmVudCh0ZW1wQSkpIHtcbiAgICBkZXB0aEErKztcbiAgfVxuXG4gIHZhciBkZXB0aEIgPSAwO1xuXG4gIGZvciAodmFyIHRlbXBCID0gbm9kZUI7IHRlbXBCOyB0ZW1wQiA9IGdldFBhcmVudCh0ZW1wQikpIHtcbiAgICBkZXB0aEIrKztcbiAgfSAvLyBJZiBBIGlzIGRlZXBlciwgY3Jhd2wgdXAuXG5cblxuICB3aGlsZSAoZGVwdGhBIC0gZGVwdGhCID4gMCkge1xuICAgIG5vZGVBID0gZ2V0UGFyZW50KG5vZGVBKTtcbiAgICBkZXB0aEEtLTtcbiAgfSAvLyBJZiBCIGlzIGRlZXBlciwgY3Jhd2wgdXAuXG5cblxuICB3aGlsZSAoZGVwdGhCIC0gZGVwdGhBID4gMCkge1xuICAgIG5vZGVCID0gZ2V0UGFyZW50KG5vZGVCKTtcbiAgICBkZXB0aEItLTtcbiAgfSAvLyBXYWxrIGluIGxvY2tzdGVwIHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cblxuXG4gIHZhciBkZXB0aCA9IGRlcHRoQTtcblxuICB3aGlsZSAoZGVwdGgtLSkge1xuICAgIGlmIChub2RlQSA9PT0gbm9kZUIgfHwgbm9kZUIgIT09IG51bGwgJiYgbm9kZUEgPT09IG5vZGVCLmFsdGVybmF0ZSkge1xuICAgICAgcmV0dXJuIG5vZGVBO1xuICAgIH1cblxuICAgIG5vZGVBID0gZ2V0UGFyZW50KG5vZGVBKTtcbiAgICBub2RlQiA9IGdldFBhcmVudChub2RlQik7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBldmVudCwgdGFyZ2V0LCBjb21tb24sIGluQ2FwdHVyZVBoYXNlKSB7XG4gIHZhciByZWdpc3RyYXRpb25OYW1lID0gZXZlbnQuX3JlYWN0TmFtZTtcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXQ7XG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgaWYgKGluc3RhbmNlID09PSBjb21tb24pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBfaW5zdGFuY2U0ID0gaW5zdGFuY2UsXG4gICAgICAgIGFsdGVybmF0ZSA9IF9pbnN0YW5jZTQuYWx0ZXJuYXRlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2U0LnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gX2luc3RhbmNlNC50YWc7XG5cbiAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZSA9PT0gY29tbW9uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50ICYmIHN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnRUYXJnZXQgPSBzdGF0ZU5vZGU7XG5cbiAgICAgIGlmIChpbkNhcHR1cmVQaGFzZSkge1xuICAgICAgICB2YXIgY2FwdHVyZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIGlmIChjYXB0dXJlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGNhcHR1cmVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFpbkNhcHR1cmVQaGFzZSkge1xuICAgICAgICB2YXIgYnViYmxlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgaWYgKGJ1YmJsZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBidWJibGVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICB9XG59IC8vIFdlIHNob3VsZCBvbmx5IHVzZSB0aGlzIGZ1bmN0aW9uIGZvcjpcbi8vIC0gRW50ZXJMZWF2ZUV2ZW50UGx1Z2luXG4vLyBUaGlzIGlzIGJlY2F1c2Ugd2Ugb25seSBwcm9jZXNzIHRoaXMgcGx1Z2luXG4vLyBpbiB0aGUgYnViYmxlIHBoYXNlLCBzbyB3ZSBuZWVkIHRvIGFjY3VtdWxhdGUgdHdvXG4vLyBwaGFzZSBldmVudCBsaXN0ZW5lcnMuXG5cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVUd29QaGFzZUxpc3RlbmVycyhkaXNwYXRjaFF1ZXVlLCBsZWF2ZUV2ZW50LCBlbnRlckV2ZW50LCBmcm9tLCB0bykge1xuICB2YXIgY29tbW9uID0gZnJvbSAmJiB0byA/IGdldExvd2VzdENvbW1vbkFuY2VzdG9yKGZyb20sIHRvKSA6IG51bGw7XG5cbiAgaWYgKGZyb20gIT09IG51bGwpIHtcbiAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KGRpc3BhdGNoUXVldWUsIGxlYXZlRXZlbnQsIGZyb20sIGNvbW1vbiwgZmFsc2UpO1xuICB9XG5cbiAgaWYgKHRvICE9PSBudWxsICYmIGVudGVyRXZlbnQgIT09IG51bGwpIHtcbiAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KGRpc3BhdGNoUXVldWUsIGVudGVyRXZlbnQsIHRvLCBjb21tb24sIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGNhcHR1cmUpIHtcbiAgcmV0dXJuIGRvbUV2ZW50TmFtZSArIFwiX19cIiArIChjYXB0dXJlID8gJ2NhcHR1cmUnIDogJ2J1YmJsZScpO1xufVxuXG52YXIgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSBmYWxzZTtcbnZhciBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCA9ICdkYW5nZXJvdXNseVNldElubmVySFRNTCc7XG52YXIgU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HID0gJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyc7XG52YXIgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcgPSAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJztcbnZhciBBVVRPRk9DVVMgPSAnYXV0b0ZvY3VzJztcbnZhciBDSElMRFJFTiA9ICdjaGlsZHJlbic7XG52YXIgU1RZTEUgPSAnc3R5bGUnO1xudmFyIEhUTUwkMSA9ICdfX2h0bWwnO1xudmFyIEhUTUxfTkFNRVNQQUNFJDEgPSBOYW1lc3BhY2VzLmh0bWw7XG52YXIgd2FybmVkVW5rbm93blRhZ3M7XG52YXIgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nO1xudmFyIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQ7XG52YXIgd2FybkZvclRleHREaWZmZXJlbmNlO1xudmFyIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZTtcbnZhciB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzO1xudmFyIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcjtcbnZhciBjYW5EaWZmU3R5bGVGb3JIeWRyYXRpb25XYXJuaW5nO1xudmFyIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZTtcbnZhciBub3JtYWxpemVIVE1MO1xuXG57XG4gIHdhcm5lZFVua25vd25UYWdzID0ge1xuICAgIC8vIFRoZXJlIGFyZSB3b3JraW5nIHBvbHlmaWxscyBmb3IgPGRpYWxvZz4uIExldCBwZW9wbGUgdXNlIGl0LlxuICAgIGRpYWxvZzogdHJ1ZSxcbiAgICAvLyBFbGVjdHJvbiBzaGlwcyBhIGN1c3RvbSA8d2Vidmlldz4gdGFnIHRvIGRpc3BsYXkgZXh0ZXJuYWwgd2ViIGNvbnRlbnQgaW5cbiAgICAvLyBhbiBpc29sYXRlZCBmcmFtZSBhbmQgcHJvY2Vzcy5cbiAgICAvLyBUaGlzIHRhZyBpcyBub3QgcHJlc2VudCBpbiBub24gRWxlY3Ryb24gZW52aXJvbm1lbnRzIHN1Y2ggYXMgSlNEb20gd2hpY2hcbiAgICAvLyBpcyBvZnRlbiB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgIC8vIEBzZWUgaHR0cHM6Ly9lbGVjdHJvbmpzLm9yZy9kb2NzL2FwaS93ZWJ2aWV3LXRhZ1xuICAgIHdlYnZpZXc6IHRydWVcbiAgfTtcblxuICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50ID0gZnVuY3Rpb24gKHR5cGUsIHByb3BzKSB7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHR5cGUsIHByb3BzKTtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXMkMSh0eXBlLCBwcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDIodHlwZSwgcHJvcHMsIHtcbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXM6IHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMsXG4gICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzOiBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzXG4gICAgfSk7XG4gIH07IC8vIElFIDExIHBhcnNlcyAmIG5vcm1hbGl6ZXMgdGhlIHN0eWxlIGF0dHJpYnV0ZSBhcyBvcHBvc2VkIHRvIG90aGVyXG4gIC8vIGJyb3dzZXJzLiBJdCBhZGRzIHNwYWNlcyBhbmQgc29ydHMgdGhlIHByb3BlcnRpZXMgaW4gc29tZVxuICAvLyBub24tYWxwaGFiZXRpY2FsIG9yZGVyLiBIYW5kbGluZyB0aGF0IHdvdWxkIHJlcXVpcmUgc29ydGluZyBDU1NcbiAgLy8gcHJvcGVydGllcyBpbiB0aGUgY2xpZW50ICYgc2VydmVyIHZlcnNpb25zIG9yIGFwcGx5aW5nXG4gIC8vIGBleHBlY3RlZFN0eWxlYCB0byBhIHRlbXBvcmFyeSBET00gbm9kZSB0byByZWFkIGl0cyBgc3R5bGVgIGF0dHJpYnV0ZVxuICAvLyBub3JtYWxpemVkLiBTaW5jZSBpdCBvbmx5IGFmZmVjdHMgSUUsIHdlJ3JlIHNraXBwaW5nIHN0eWxlIHdhcm5pbmdzXG4gIC8vIGluIHRoYXQgYnJvd3NlciBjb21wbGV0ZWx5IGluIGZhdm9yIG9mIGRvaW5nIGFsbCB0aGF0IHdvcmsuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExODA3XG5cblxuICBjYW5EaWZmU3R5bGVGb3JIeWRyYXRpb25XYXJuaW5nID0gY2FuVXNlRE9NICYmICFkb2N1bWVudC5kb2N1bWVudE1vZGU7IC8vIEhUTUwgcGFyc2luZyBub3JtYWxpemVzIENSIGFuZCBDUkxGIHRvIExGLlxuICAvLyBJdCBhbHNvIGNhbiB0dXJuIFxcdTAwMDAgaW50byBcXHVGRkZEIGluc2lkZSBhdHRyaWJ1dGVzLlxuICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvc2luZ2xlLXBhZ2UuaHRtbCNwcmVwcm9jZXNzaW5nLXRoZS1pbnB1dC1zdHJlYW1cbiAgLy8gSWYgd2UgaGF2ZSBhIG1pc21hdGNoLCBpdCBtaWdodCBiZSBjYXVzZWQgYnkgdGhhdC5cbiAgLy8gV2Ugd2lsbCBzdGlsbCBwYXRjaCB1cCBpbiB0aGlzIGNhc2UgYnV0IG5vdCBmaXJlIHRoZSB3YXJuaW5nLlxuXG4gIHZhciBOT1JNQUxJWkVfTkVXTElORVNfUkVHRVggPSAvXFxyXFxuPy9nO1xuICB2YXIgTk9STUFMSVpFX05VTExfQU5EX1JFUExBQ0VNRU5UX1JFR0VYID0gL1xcdTAwMDB8XFx1RkZGRC9nO1xuXG4gIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChtYXJrdXApIHtcbiAgICB2YXIgbWFya3VwU3RyaW5nID0gdHlwZW9mIG1hcmt1cCA9PT0gJ3N0cmluZycgPyBtYXJrdXAgOiAnJyArIG1hcmt1cDtcbiAgICByZXR1cm4gbWFya3VwU3RyaW5nLnJlcGxhY2UoTk9STUFMSVpFX05FV0xJTkVTX1JFR0VYLCAnXFxuJykucmVwbGFjZShOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVgsICcnKTtcbiAgfTtcblxuICB3YXJuRm9yVGV4dERpZmZlcmVuY2UgPSBmdW5jdGlvbiAoc2VydmVyVGV4dCwgY2xpZW50VGV4dCkge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBub3JtYWxpemVkQ2xpZW50VGV4dCA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRUZXh0KTtcbiAgICB2YXIgbm9ybWFsaXplZFNlcnZlclRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVGV4dCk7XG5cbiAgICBpZiAobm9ybWFsaXplZFNlcnZlclRleHQgPT09IG5vcm1hbGl6ZWRDbGllbnRUZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1RleHQgY29udGVudCBkaWQgbm90IG1hdGNoLiBTZXJ2ZXI6IFwiJXNcIiBDbGllbnQ6IFwiJXNcIicsIG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0LCBub3JtYWxpemVkQ2xpZW50VGV4dCk7XG4gIH07XG5cbiAgd2FybkZvclByb3BEaWZmZXJlbmNlID0gZnVuY3Rpb24gKHByb3BOYW1lLCBzZXJ2ZXJWYWx1ZSwgY2xpZW50VmFsdWUpIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm9ybWFsaXplZENsaWVudFZhbHVlID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFZhbHVlKTtcbiAgICB2YXIgbm9ybWFsaXplZFNlcnZlclZhbHVlID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHNlcnZlclZhbHVlKTtcblxuICAgIGlmIChub3JtYWxpemVkU2VydmVyVmFsdWUgPT09IG5vcm1hbGl6ZWRDbGllbnRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdQcm9wIGAlc2AgZGlkIG5vdCBtYXRjaC4gU2VydmVyOiAlcyBDbGllbnQ6ICVzJywgcHJvcE5hbWUsIEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSksIEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZWRDbGllbnRWYWx1ZSkpO1xuICB9O1xuXG4gIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoYXR0cmlidXRlTmFtZXMpIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgYXR0cmlidXRlTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgbmFtZXMucHVzaChuYW1lKTtcbiAgICB9KTtcblxuICAgIGVycm9yKCdFeHRyYSBhdHRyaWJ1dGVzIGZyb20gdGhlIHNlcnZlcjogJXMnLCBuYW1lcyk7XG4gIH07XG5cbiAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKHJlZ2lzdHJhdGlvbk5hbWUsIGxpc3RlbmVyKSB7XG4gICAgaWYgKGxpc3RlbmVyID09PSBmYWxzZSkge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYGZhbHNlYC5cXG5cXG4nICsgJ0lmIHlvdSB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgb21pdCBpdCB3aXRoICVzPXtjb25kaXRpb24gJiYgdmFsdWV9LCAnICsgJ3Bhc3MgJXM9e2NvbmRpdGlvbiA/IHZhbHVlIDogdW5kZWZpbmVkfSBpbnN0ZWFkLicsIHJlZ2lzdHJhdGlvbk5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgYCVzYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBhIHZhbHVlIG9mIGAlc2AgdHlwZS4nLCByZWdpc3RyYXRpb25OYW1lLCB0eXBlb2YgbGlzdGVuZXIpO1xuICAgIH1cbiAgfTsgLy8gUGFyc2UgdGhlIEhUTUwgYW5kIHJlYWQgaXQgYmFjayB0byBub3JtYWxpemUgdGhlIEhUTUwgc3RyaW5nIHNvIHRoYXQgaXRcbiAgLy8gY2FuIGJlIHVzZWQgZm9yIGNvbXBhcmlzb24uXG5cblxuICBub3JtYWxpemVIVE1MID0gZnVuY3Rpb24gKHBhcmVudCwgaHRtbCkge1xuICAgIC8vIFdlIGNvdWxkIGhhdmUgY3JlYXRlZCBhIHNlcGFyYXRlIGRvY3VtZW50IGhlcmUgdG8gYXZvaWRcbiAgICAvLyByZS1pbml0aWFsaXppbmcgY3VzdG9tIGVsZW1lbnRzIGlmIHRoZXkgZXhpc3QuIEJ1dCB0aGlzIGJyZWFrc1xuICAgIC8vIGhvdyA8bm9zY3JpcHQ+IGlzIGJlaW5nIGhhbmRsZWQuIFNvIHdlIHVzZSB0aGUgc2FtZSBkb2N1bWVudC5cbiAgICAvLyBTZWUgdGhlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTExNTcuXG4gICAgdmFyIHRlc3RFbGVtZW50ID0gcGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSA/IHBhcmVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocGFyZW50LnRhZ05hbWUpIDogcGFyZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHBhcmVudC5uYW1lc3BhY2VVUkksIHBhcmVudC50YWdOYW1lKTtcbiAgICB0ZXN0RWxlbWVudC5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybiB0ZXN0RWxlbWVudC5pbm5lckhUTUw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCkge1xuICByZXR1cm4gcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyByb290Q29udGFpbmVyRWxlbWVudCA6IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5mdW5jdGlvbiB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChub2RlKSB7XG4gIC8vIE1vYmlsZSBTYWZhcmkgZG9lcyBub3QgZmlyZSBwcm9wZXJseSBidWJibGUgY2xpY2sgZXZlbnRzIG9uXG4gIC8vIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cywgd2hpY2ggbWVhbnMgZGVsZWdhdGVkIGNsaWNrIGxpc3RlbmVycyBkbyBub3RcbiAgLy8gZmlyZS4gVGhlIHdvcmthcm91bmQgZm9yIHRoaXMgYnVnIGludm9sdmVzIGF0dGFjaGluZyBhbiBlbXB0eSBjbGlja1xuICAvLyBsaXN0ZW5lciBvbiB0aGUgdGFyZ2V0IG5vZGUuXG4gIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxMC8wOS9jbGlja19ldmVudF9kZWwuaHRtbFxuICAvLyBKdXN0IHNldCBpdCB1c2luZyB0aGUgb25jbGljayBwcm9wZXJ0eSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gbWFuYWdlIGFueVxuICAvLyBib29ra2VlcGluZyBmb3IgaXQuIE5vdCBzdXJlIGlmIHdlIG5lZWQgdG8gY2xlYXIgaXQgd2hlbiB0aGUgbGlzdGVuZXIgaXNcbiAgLy8gcmVtb3ZlZC5cbiAgLy8gVE9ETzogT25seSBkbyB0aGlzIGZvciB0aGUgcmVsZXZhbnQgU2FmYXJpcyBtYXliZT9cbiAgbm9kZS5vbmNsaWNrID0gbm9vcDtcbn1cblxuZnVuY3Rpb24gc2V0SW5pdGlhbERPTVByb3BlcnRpZXModGFnLCBkb21FbGVtZW50LCByb290Q29udGFpbmVyRWxlbWVudCwgbmV4dFByb3BzLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBmb3IgKHZhciBwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKG5leHRQcm9wKSB7XG4gICAgICAgICAgLy8gRnJlZXplIHRoZSBuZXh0IHN0eWxlIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBhc3N1bWUgaXQgd29uJ3QgYmVcbiAgICAgICAgICAvLyBtdXRhdGVkLiBXZSBoYXZlIGFscmVhZHkgd2FybmVkIGZvciB0aGlzIGluIHRoZSBwYXN0LlxuICAgICAgICAgIE9iamVjdC5mcmVlemUobmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IC8vIFJlbGllcyBvbiBgdXBkYXRlU3R5bGVzQnlJRGAgbm90IG11dGF0aW5nIGBzdHlsZVVwZGF0ZXNgLlxuXG5cbiAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIG5leHRQcm9wKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgIHNldElubmVySFRNTChkb21FbGVtZW50LCBuZXh0SHRtbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gQXZvaWQgc2V0dGluZyBpbml0aWFsIHRleHRDb250ZW50IHdoZW4gdGhlIHRleHQgaXMgZW1wdHkuIEluIElFMTEgc2V0dGluZ1xuICAgICAgICAvLyB0ZXh0Q29udGVudCBvbiBhIDx0ZXh0YXJlYT4gd2lsbCBjYXVzZSB0aGUgcGxhY2Vob2xkZXIgdG8gbm90XG4gICAgICAgIC8vIHNob3cgd2l0aGluIHRoZSA8dGV4dGFyZWE+IHVudGlsIGl0IGhhcyBiZWVuIGZvY3VzZWQgYW5kIGJsdXJyZWQgYWdhaW4uXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjczMSNpc3N1ZWNvbW1lbnQtMjU0ODc0NTUzXG4gICAgICAgIHZhciBjYW5TZXRUZXh0Q29udGVudCA9IHRhZyAhPT0gJ3RleHRhcmVhJyB8fCBuZXh0UHJvcCAhPT0gJyc7XG5cbiAgICAgICAgaWYgKGNhblNldFRleHRDb250ZW50KSB7XG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycgKyBuZXh0UHJvcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gQVVUT0ZPQ1VTKSA7IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIGlmICggdHlwZW9mIG5leHRQcm9wICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wS2V5ID09PSAnb25TY3JvbGwnKSB7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnc2Nyb2xsJywgZG9tRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgIHNldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3AsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlRE9NUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB3YXNDdXN0b21Db21wb25lbnRUYWcsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIC8vIFRPRE86IEhhbmRsZSB3YXNDdXN0b21Db21wb25lbnRUYWdcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVQYXlsb2FkLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIHByb3BLZXkgPSB1cGRhdGVQYXlsb2FkW2ldO1xuICAgIHZhciBwcm9wVmFsdWUgPSB1cGRhdGVQYXlsb2FkW2kgKyAxXTtcblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgc2V0VmFsdWVGb3JTdHlsZXMoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICBzZXRJbm5lckhUTUwoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIHByb3BWYWx1ZSwgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCByb290Q29udGFpbmVyRWxlbWVudCwgcGFyZW50TmFtZXNwYWNlKSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZzsgLy8gV2UgY3JlYXRlIHRhZ3MgaW4gdGhlIG5hbWVzcGFjZSBvZiB0aGVpciBwYXJlbnQgY29udGFpbmVyLCBleGNlcHQgSFRNTFxuICAvLyB0YWdzIGdldCBubyBuYW1lc3BhY2UuXG5cbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpO1xuICB2YXIgZG9tRWxlbWVudDtcbiAgdmFyIG5hbWVzcGFjZVVSSSA9IHBhcmVudE5hbWVzcGFjZTtcblxuICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgbmFtZXNwYWNlVVJJID0gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpO1xuICB9XG5cbiAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgIHtcbiAgICAgIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpOyAvLyBTaG91bGQgdGhpcyBjaGVjayBiZSBnYXRlZCBieSBwYXJlbnQgbmFtZXNwYWNlPyBOb3Qgc3VyZSB3ZSB3YW50IHRvXG4gICAgICAvLyBhbGxvdyA8U1ZHPiBvciA8bUFUSD4uXG5cbiAgICAgIGlmICghaXNDdXN0b21Db21wb25lbnRUYWcgJiYgdHlwZSAhPT0gdHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGVycm9yKCc8JXMgLz4gaXMgdXNpbmcgaW5jb3JyZWN0IGNhc2luZy4gJyArICdVc2UgUGFzY2FsQ2FzZSBmb3IgUmVhY3QgY29tcG9uZW50cywgJyArICdvciBsb3dlcmNhc2UgZm9yIEhUTUwgZWxlbWVudHMuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdzY3JpcHQnKSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIHNjcmlwdCB2aWEgLmlubmVySFRNTCBzbyBpdHMgXCJwYXJzZXItaW5zZXJ0ZWRcIiBmbGFnIGlzXG4gICAgICAvLyBzZXQgdG8gdHJ1ZSBhbmQgaXQgZG9lcyBub3QgZXhlY3V0ZVxuICAgICAgdmFyIGRpdiA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgIGRpdi5pbm5lckhUTUwgPSAnPHNjcmlwdD48JyArICcvc2NyaXB0Pic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVlZCB0byB5aWVsZCBhIHNjcmlwdCBlbGVtZW50LlxuXG4gICAgICB2YXIgZmlyc3RDaGlsZCA9IGRpdi5maXJzdENoaWxkO1xuICAgICAgZG9tRWxlbWVudCA9IGRpdi5yZW1vdmVDaGlsZChmaXJzdENoaWxkKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9wcy5pcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vICRGbG93SXNzdWUgYGNyZWF0ZUVsZW1lbnRgIHNob3VsZCBiZSB1cGRhdGVkIGZvciBXZWIgQ29tcG9uZW50c1xuICAgICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlLCB7XG4gICAgICAgIGlzOiBwcm9wcy5pc1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlcGFyYXRlIGVsc2UgYnJhbmNoIGluc3RlYWQgb2YgdXNpbmcgYHByb3BzLmlzIHx8IHVuZGVmaW5lZGAgYWJvdmUgYmVjYXVzZSBvZiBhIEZpcmVmb3ggYnVnLlxuICAgICAgLy8gU2VlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNjg5NlxuICAgICAgLy8gYW5kIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjI0MFxuICAgICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTsgLy8gTm9ybWFsbHkgYXR0cmlidXRlcyBhcmUgYXNzaWduZWQgaW4gYHNldEluaXRpYWxET01Qcm9wZXJ0aWVzYCwgaG93ZXZlciB0aGUgYG11bHRpcGxlYCBhbmQgYHNpemVgXG4gICAgICAvLyBhdHRyaWJ1dGVzIG9uIGBzZWxlY3RgcyBuZWVkcyB0byBiZSBhZGRlZCBiZWZvcmUgYG9wdGlvbmBzIGFyZSBpbnNlcnRlZC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHM6XG4gICAgICAvLyAtIGEgYnVnIHdoZXJlIHRoZSBgc2VsZWN0YCBkb2VzIG5vdCBzY3JvbGwgdG8gdGhlIGNvcnJlY3Qgb3B0aW9uIGJlY2F1c2Ugc2luZ3VsYXJcbiAgICAgIC8vICBgc2VsZWN0YCBlbGVtZW50cyBhdXRvbWF0aWNhbGx5IHBpY2sgdGhlIGZpcnN0IGl0ZW0gIzEzMjIyXG4gICAgICAvLyAtIGEgYnVnIHdoZXJlIHRoZSBgc2VsZWN0YCBzZXQgdGhlIGZpcnN0IGl0ZW0gYXMgc2VsZWN0ZWQgZGVzcGl0ZSB0aGUgYHNpemVgIGF0dHJpYnV0ZSAjMTQyMzlcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzMjIyXG4gICAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDIzOVxuXG4gICAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBkb21FbGVtZW50O1xuXG4gICAgICAgIGlmIChwcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICAgIG5vZGUubXVsdGlwbGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3BzLnNpemUpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGEgc2l6ZSBncmVhdGVyIHRoYW4gMSBjYXVzZXMgYSBzZWxlY3QgdG8gYmVoYXZlIGxpa2UgYG11bHRpcGxlPXRydWVgLCB3aGVyZVxuICAgICAgICAgIC8vIGl0IGlzIHBvc3NpYmxlIHRoYXQgbm8gb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSB3aGVuIGEgc2VsZWN0IGluIFwic2luZ2xlIHNlbGVjdGlvbiBtb2RlXCIuXG4gICAgICAgICAgbm9kZS5zaXplID0gcHJvcHMuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJLCB0eXBlKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgICBpZiAoIWlzQ3VzdG9tQ29tcG9uZW50VGFnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb21FbGVtZW50KSA9PT0gJ1tvYmplY3QgSFRNTFVua25vd25FbGVtZW50XScgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRVbmtub3duVGFncywgdHlwZSkpIHtcbiAgICAgICAgd2FybmVkVW5rbm93blRhZ3NbdHlwZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdUaGUgdGFnIDwlcz4gaXMgdW5yZWNvZ25pemVkIGluIHRoaXMgYnJvd3Nlci4gJyArICdJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgUmVhY3QgY29tcG9uZW50LCBzdGFydCBpdHMgbmFtZSB3aXRoICcgKyAnYW4gdXBwZXJjYXNlIGxldHRlci4nLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZG9tRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHROb2RlKHRleHQsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHJldHVybiBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpLmNyZWF0ZVRleHROb2RlKHRleHQpO1xufVxuZnVuY3Rpb24gc2V0SW5pdGlhbFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCByYXdQcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCByYXdQcm9wcyk7XG5cbiAge1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCByYXdQcm9wcyk7XG4gIH0gLy8gVE9ETzogTWFrZSBzdXJlIHRoYXQgd2UgY2hlY2sgaXNNb3VudGVkIGJlZm9yZSBmaXJpbmcgYW55IG9mIHRoZXNlIGV2ZW50cy5cblxuXG4gIHZhciBwcm9wcztcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjYW5jZWwnLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Nsb3NlJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpZnJhbWUnOlxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgY2FzZSAnZW1iZWQnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGxvYWQgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd2aWRlbyc6XG4gICAgY2FzZSAnYXVkaW8nOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBhbGwgdGhlIG1lZGlhIGV2ZW50cy5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2ldLCBkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc291cmNlJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBlcnJvciBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbWcnOlxuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgZXJyb3IgYW5kIGxvYWQgZXZlbnRzLlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIHRvZ2dsZSBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3RvZ2dsZScsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHZhbGlkYXRlUHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHByb3BzKTtcbiAgc2V0SW5pdGlhbERPTVByb3BlcnRpZXModGFnLCBkb21FbGVtZW50LCByb290Q29udGFpbmVyRWxlbWVudCwgcHJvcHMsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIoZG9tRWxlbWVudCwgcmF3UHJvcHMsIGZhbHNlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlciQzKGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgcG9zdE1vdW50V3JhcHBlciQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMihkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodHlwZW9mIHByb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG59IC8vIENhbGN1bGF0ZSB0aGUgZGlmZiBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cblxuZnVuY3Rpb24gZGlmZlByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCBsYXN0UmF3UHJvcHMsIG5leHRSYXdQcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAge1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCBuZXh0UmF3UHJvcHMpO1xuICB9XG5cbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBudWxsO1xuICB2YXIgbGFzdFByb3BzO1xuICB2YXIgbmV4dFByb3BzO1xuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQzKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgbGFzdFByb3BzID0gbGFzdFJhd1Byb3BzO1xuICAgICAgbmV4dFByb3BzID0gbmV4dFJhd1Byb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIGxhc3RQcm9wcy5vbkNsaWNrICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBuZXh0UHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH1cblxuICBhc3NlcnRWYWxpZFByb3BzKHRhZywgbmV4dFByb3BzKTtcbiAgdmFyIHByb3BLZXk7XG4gIHZhciBzdHlsZU5hbWU7XG4gIHZhciBzdHlsZVVwZGF0ZXMgPSBudWxsO1xuXG4gIGZvciAocHJvcEtleSBpbiBsYXN0UHJvcHMpIHtcbiAgICBpZiAobmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8ICFsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgbGFzdFByb3BzW3Byb3BLZXldID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgdmFyIGxhc3RTdHlsZSA9IGxhc3RQcm9wc1twcm9wS2V5XTtcblxuICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFN0eWxlKSB7XG4gICAgICAgIGlmIChsYXN0U3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCB8fCBwcm9wS2V5ID09PSBDSElMRFJFTikgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gQVVUT0ZPQ1VTKSA7IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UuIElmIGFueSBsaXN0ZW5lciB1cGRhdGVzIHdlIG5lZWQgdG8gZW5zdXJlXG4gICAgICAvLyB0aGF0IHRoZSBcImN1cnJlbnRcIiBmaWJlciBwb2ludGVyIGdldHMgdXBkYXRlZCBzbyB3ZSBuZWVkIGEgY29tbWl0XG4gICAgICAvLyB0byB1cGRhdGUgdGhpcyBlbGVtZW50LlxuICAgICAgaWYgKCF1cGRhdGVQYXlsb2FkKSB7XG4gICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIGFsbCBvdGhlciBkZWxldGVkIHByb3BlcnRpZXMgd2UgYWRkIGl0IHRvIHRoZSBxdWV1ZS4gV2UgdXNlXG4gICAgICAvLyB0aGUgYWxsb3dlZCBwcm9wZXJ0eSBsaXN0IGluIHRoZSBjb21taXQgcGhhc2UgaW5zdGVhZC5cbiAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHByb3BLZXkgaW4gbmV4dFByb3BzKSB7XG4gICAgdmFyIG5leHRQcm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuICAgIHZhciBsYXN0UHJvcCA9IGxhc3RQcm9wcyAhPSBudWxsID8gbGFzdFByb3BzW3Byb3BLZXldIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgbmV4dFByb3AgPT09IGxhc3RQcm9wIHx8IG5leHRQcm9wID09IG51bGwgJiYgbGFzdFByb3AgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIC8vIEZyZWV6ZSB0aGUgbmV4dCBzdHlsZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gYXNzdW1lIGl0IHdvbid0IGJlXG4gICAgICAgICAgLy8gbXV0YXRlZC4gV2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhpcyBpbiB0aGUgcGFzdC5cbiAgICAgICAgICBPYmplY3QuZnJlZXplKG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobGFzdFByb3ApIHtcbiAgICAgICAgLy8gVW5zZXQgc3R5bGVzIG9uIGBsYXN0UHJvcGAgYnV0IG5vdCBvbiBgbmV4dFByb3BgLlxuICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBsYXN0UHJvcCkge1xuICAgICAgICAgIGlmIChsYXN0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmICghbmV4dFByb3AgfHwgIW5leHRQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpKSB7XG4gICAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVXBkYXRlIHN0eWxlcyB0aGF0IGNoYW5nZWQgc2luY2UgYGxhc3RQcm9wYC5cblxuXG4gICAgICAgIGZvciAoc3R5bGVOYW1lIGluIG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKG5leHRQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgJiYgbGFzdFByb3Bbc3R5bGVOYW1lXSAhPT0gbmV4dFByb3Bbc3R5bGVOYW1lXSkge1xuICAgICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gbmV4dFByb3Bbc3R5bGVOYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbGllcyBvbiBgdXBkYXRlU3R5bGVzQnlJRGAgbm90IG11dGF0aW5nIGBzdHlsZVVwZGF0ZXNgLlxuICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgIGlmICghdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQucHVzaChwcm9wS2V5LCBzdHlsZVVwZGF0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3R5bGVVcGRhdGVzID0gbmV4dFByb3A7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgPyBuZXh0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIGxhc3RIdG1sID0gbGFzdFByb3AgPyBsYXN0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICBpZiAobGFzdEh0bWwgIT09IG5leHRIdG1sKSB7XG4gICAgICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksIG5leHRIdG1sKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksICcnICsgbmV4dFByb3ApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIC8vIFdlIGVhZ2VybHkgbGlzdGVuIHRvIHRoaXMgZXZlbiB0aG91Z2ggd2UgaGF2ZW4ndCBjb21taXR0ZWQgeWV0LlxuICAgICAgICBpZiAoIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcEtleSA9PT0gJ29uU2Nyb2xsJykge1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3Njcm9sbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdXBkYXRlUGF5bG9hZCAmJiBsYXN0UHJvcCAhPT0gbmV4dFByb3ApIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZS4gSWYgYW55IGxpc3RlbmVyIHVwZGF0ZXMgd2UgbmVlZCB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCB0aGUgXCJjdXJyZW50XCIgcHJvcHMgcG9pbnRlciBnZXRzIHVwZGF0ZWQgc28gd2UgbmVlZCBhIGNvbW1pdFxuICAgICAgICAvLyB0byB1cGRhdGUgdGhpcyBlbGVtZW50LlxuICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdvYmplY3QnICYmIG5leHRQcm9wICE9PSBudWxsICYmIG5leHRQcm9wLiQkdHlwZW9mID09PSBSRUFDVF9PUEFRVUVfSURfVFlQRSkge1xuICAgICAgLy8gSWYgd2UgZW5jb3VudGVyIHVzZU9wYXF1ZVJlZmVyZW5jZSdzIG9wYXF1ZSBvYmplY3QsIHRoaXMgbWVhbnMgd2UgYXJlIGh5ZHJhdGluZy5cbiAgICAgIC8vIEluIHRoaXMgY2FzZSwgY2FsbCB0aGUgb3BhcXVlIG9iamVjdCdzIHRvU3RyaW5nIGZ1bmN0aW9uIHdoaWNoIGdlbmVyYXRlcyBhIG5ldyBjbGllbnRcbiAgICAgIC8vIElEIHNvIGNsaWVudCBhbmQgc2VydmVyIElEcyBtYXRjaCBhbmQgdGhyb3dzIHRvIHJlcmVuZGVyLlxuICAgICAgbmV4dFByb3AudG9TdHJpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIGFueSBvdGhlciBwcm9wZXJ0eSB3ZSBhbHdheXMgYWRkIGl0IHRvIHRoZSBxdWV1ZSBhbmQgdGhlbiB3ZVxuICAgICAgLy8gZmlsdGVyIGl0IG91dCB1c2luZyB0aGUgYWxsb3dlZCBwcm9wZXJ0eSBsaXN0IGR1cmluZyB0aGUgY29tbWl0LlxuICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVVcGRhdGVzKSB7XG4gICAge1xuICAgICAgdmFsaWRhdGVTaG9ydGhhbmRQcm9wZXJ0eUNvbGxpc2lvbkluRGV2KHN0eWxlVXBkYXRlcywgbmV4dFByb3BzW1NUWUxFXSk7XG4gICAgfVxuXG4gICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKFNUWUxFLCBzdHlsZVVwZGF0ZXMpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG59IC8vIEFwcGx5IHRoZSBkaWZmLlxuXG5mdW5jdGlvbiB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHRhZywgbGFzdFJhd1Byb3BzLCBuZXh0UmF3UHJvcHMpIHtcbiAgLy8gVXBkYXRlIGNoZWNrZWQgKmJlZm9yZSogbmFtZS5cbiAgLy8gSW4gdGhlIG1pZGRsZSBvZiBhbiB1cGRhdGUsIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgY2hlY2tlZC5cbiAgLy8gV2hlbiBhIGNoZWNrZWQgcmFkaW8gdHJpZXMgdG8gY2hhbmdlIG5hbWUsIGJyb3dzZXIgbWFrZXMgYW5vdGhlciByYWRpbydzIGNoZWNrZWQgZmFsc2UuXG4gIGlmICh0YWcgPT09ICdpbnB1dCcgJiYgbmV4dFJhd1Byb3BzLnR5cGUgPT09ICdyYWRpbycgJiYgbmV4dFJhd1Byb3BzLm5hbWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZUNoZWNrZWQoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgfVxuXG4gIHZhciB3YXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIGxhc3RSYXdQcm9wcyk7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgbmV4dFJhd1Byb3BzKTsgLy8gQXBwbHkgdGhlIGRpZmYuXG5cbiAgdXBkYXRlRE9NUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB3YXNDdXN0b21Db21wb25lbnRUYWcsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTsgLy8gVE9ETzogRW5zdXJlIHRoYXQgYW4gdXBkYXRlIGdldHMgc2NoZWR1bGVkIGlmIGFueSBvZiB0aGUgc3BlY2lhbCBwcm9wc1xuICAvLyBjaGFuZ2VkLlxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgLy8gVXBkYXRlIHRoZSB3cmFwcGVyIGFyb3VuZCBpbnB1dHMgKmFmdGVyKiB1cGRhdGluZyBwcm9wcy4gVGhpcyBoYXMgdG9cbiAgICAgIC8vIGhhcHBlbiBhZnRlciBgdXBkYXRlRE9NUHJvcGVydGllc2AuIE90aGVyd2lzZSBIVE1MNSBpbnB1dCB2YWxpZGF0aW9uc1xuICAgICAgLy8gcmFpc2Ugd2FybmluZ3MgYW5kIHByZXZlbnQgdGhlIG5ldyB2YWx1ZSBmcm9tIGJlaW5nIGFzc2lnbmVkLlxuICAgICAgdXBkYXRlV3JhcHBlcihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICB1cGRhdGVXcmFwcGVyJDEoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIC8vIDxzZWxlY3Q+IHZhbHVlIHVwZGF0ZSBuZWVkcyB0byBvY2N1ciBhZnRlciA8b3B0aW9uPiBjaGlsZHJlblxuICAgICAgLy8gcmVjb25jaWxpYXRpb25cbiAgICAgIHBvc3RVcGRhdGVXcmFwcGVyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZShwcm9wTmFtZSkge1xuICB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICghcG9zc2libGVTdGFuZGFyZE5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc3NpYmxlU3RhbmRhcmROYW1lc1tsb3dlckNhc2VkTmFtZV0gfHwgbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcmF3UHJvcHMsIHBhcmVudE5hbWVzcGFjZSwgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnO1xuICB2YXIgZXh0cmFBdHRyaWJ1dGVOYW1lcztcblxuICB7XG4gICAgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gcmF3UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkddID09PSB0cnVlO1xuICAgIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCByYXdQcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIHJhd1Byb3BzKTtcbiAgfSAvLyBUT0RPOiBNYWtlIHN1cmUgdGhhdCB3ZSBjaGVjayBpc01vdW50ZWQgYmVmb3JlIGZpcmluZyBhbnkgb2YgdGhlc2UgZXZlbnRzLlxuXG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2FuY2VsJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjbG9zZScsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpZnJhbWUnOlxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgY2FzZSAnZW1iZWQnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGxvYWQgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICBjYXNlICdhdWRpbyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGFsbCB0aGUgbWVkaWEgZXZlbnRzLlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWRpYUV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChtZWRpYUV2ZW50VHlwZXNbaV0sIGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgZXJyb3IgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbWcnOlxuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgZXJyb3IgYW5kIGxvYWQgZXZlbnRzLlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgdG9nZ2xlIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgndG9nZ2xlJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICB2YWxpZGF0ZVByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMShkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG4gIH1cblxuICBhc3NlcnRWYWxpZFByb3BzKHRhZywgcmF3UHJvcHMpO1xuXG4gIHtcbiAgICBleHRyYUF0dHJpYnV0ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgIHZhciBhdHRyaWJ1dGVzID0gZG9tRWxlbWVudC5hdHRyaWJ1dGVzO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZXNbX2ldLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgIC8vIEJ1aWx0LWluIFNTUiBhdHRyaWJ1dGUgaXMgYWxsb3dlZFxuICAgICAgICBjYXNlICdkYXRhLXJlYWN0cm9vdCc6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vIENvbnRyb2xsZWQgYXR0cmlidXRlcyBhcmUgbm90IHZhbGlkYXRlZFxuICAgICAgICAvLyBUT0RPOiBPbmx5IGlnbm9yZSB0aGVtIG9uIGNvbnRyb2xsZWQgdGFncy5cblxuICAgICAgICBjYXNlICd2YWx1ZSc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY2hlY2tlZCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc2VsZWN0ZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gSW50ZW50aW9uYWxseSB1c2UgdGhlIG9yaWdpbmFsIG5hbWUuXG4gICAgICAgICAgLy8gU2VlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTA2NzYuXG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5hZGQoYXR0cmlidXRlc1tfaV0ubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBudWxsO1xuXG4gIGZvciAodmFyIHByb3BLZXkgaW4gcmF3UHJvcHMpIHtcbiAgICBpZiAoIXJhd1Byb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFByb3AgPSByYXdQcm9wc1twcm9wS2V5XTtcblxuICAgIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgLy8gRm9yIHRleHQgY29udGVudCBjaGlsZHJlbiB3ZSBjb21wYXJlIGFnYWluc3QgdGV4dENvbnRlbnQuIFRoaXNcbiAgICAgIC8vIG1pZ2h0IG1hdGNoIGFkZGl0aW9uYWwgSFRNTCB0aGF0IGlzIGhpZGRlbiB3aGVuIHdlIHJlYWQgaXQgdXNpbmdcbiAgICAgIC8vIHRleHRDb250ZW50LiBFLmcuIFwiZm9vXCIgd2lsbCBtYXRjaCBcImY8c3Bhbj5vbzwvc3Bhbj5cIiBidXQgdGhhdCBzdGlsbFxuICAgICAgLy8gc2F0aXNmaWVzIG91ciByZXF1aXJlbWVudC4gT3VyIHJlcXVpcmVtZW50IGlzIG5vdCB0byBwcm9kdWNlIHBlcmZlY3RcbiAgICAgIC8vIEhUTUwgYW5kIGF0dHJpYnV0ZXMuIElkZWFsbHkgd2Ugc2hvdWxkIHByZXNlcnZlIHN0cnVjdHVyZSBidXQgaXQnc1xuICAgICAgLy8gb2sgbm90IHRvIGlmIHRoZSB2aXNpYmxlIGNvbnRlbnQgaXMgc3RpbGwgZW5vdWdoIHRvIGluZGljYXRlIHdoYXRcbiAgICAgIC8vIGV2ZW4gbGlzdGVuZXJzIHRoZXNlIG5vZGVzIG1pZ2h0IGJlIHdpcmVkIHVwIHRvLlxuICAgICAgLy8gVE9ETzogV2FybiBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gYSBzaW5nbGUgdGV4dE5vZGUgYXMgYSBjaGlsZC5cbiAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSB1c2UgZG9tRWxlbWVudC5maXJzdENoaWxkLm5vZGVWYWx1ZSB0byBjb21wYXJlP1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGRvbUVsZW1lbnQudGV4dENvbnRlbnQgIT09IG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKCAhc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAgICAgICB3YXJuRm9yVGV4dERpZmZlcmVuY2UoZG9tRWxlbWVudC50ZXh0Q29udGVudCwgbmV4dFByb3ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbQ0hJTERSRU4sIG5leHRQcm9wXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50LnRleHRDb250ZW50ICE9PSAnJyArIG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKCAhc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAgICAgICB3YXJuRm9yVGV4dERpZmZlcmVuY2UoZG9tRWxlbWVudC50ZXh0Q29udGVudCwgbmV4dFByb3ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbQ0hJTERSRU4sICcnICsgbmV4dFByb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICBpZiAoIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcEtleSA9PT0gJ29uU2Nyb2xsJykge1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3Njcm9sbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICggLy8gQ29udmluY2UgRmxvdyB3ZSd2ZSBjYWxjdWxhdGVkIGl0IChpdCdzIERFVi1vbmx5IGluIHRoaXMgbWV0aG9kLilcbiAgICB0eXBlb2YgaXNDdXN0b21Db21wb25lbnRUYWcgPT09ICdib29sZWFuJykge1xuICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgcHJvcGVydGllcyBjb3JyZXNwb25kIHRvIHRoZWlyIGV4cGVjdGVkIHZhbHVlcy5cbiAgICAgIHZhciBzZXJ2ZXJWYWx1ZSA9IHZvaWQgMDtcbiAgICAgIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8ocHJvcEtleSk7XG5cbiAgICAgIGlmIChzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HIHx8IC8vIENvbnRyb2xsZWQgYXR0cmlidXRlcyBhcmUgbm90IHZhbGlkYXRlZFxuICAgICAgLy8gVE9ETzogT25seSBpZ25vcmUgdGhlbSBvbiBjb250cm9sbGVkIHRhZ3MuXG4gICAgICBwcm9wS2V5ID09PSAndmFsdWUnIHx8IHByb3BLZXkgPT09ICdjaGVja2VkJyB8fCBwcm9wS2V5ID09PSAnc2VsZWN0ZWQnKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICAgIHZhciBzZXJ2ZXJIVE1MID0gZG9tRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciBleHBlY3RlZEhUTUwgPSBub3JtYWxpemVIVE1MKGRvbUVsZW1lbnQsIG5leHRIdG1sKTtcblxuICAgICAgICAgIGlmIChleHBlY3RlZEhUTUwgIT09IHNlcnZlckhUTUwpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJIVE1MLCBleHBlY3RlZEhUTUwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkpO1xuXG4gICAgICAgIGlmIChjYW5EaWZmU3R5bGVGb3JIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAgICAgdmFyIGV4cGVjdGVkU3R5bGUgPSBjcmVhdGVEYW5nZXJvdXNTdHJpbmdGb3JTdHlsZXMobmV4dFByb3ApO1xuICAgICAgICAgIHNlcnZlclZhbHVlID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cbiAgICAgICAgICBpZiAoZXhwZWN0ZWRTdHlsZSAhPT0gc2VydmVyVmFsdWUpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJWYWx1ZSwgZXhwZWN0ZWRTdHlsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgc2VydmVyVmFsdWUgPSBnZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCk7XG5cbiAgICAgICAgaWYgKG5leHRQcm9wICE9PSBzZXJ2ZXJWYWx1ZSkge1xuICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJWYWx1ZSwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzaG91bGRJZ25vcmVBdHRyaWJ1dGUocHJvcEtleSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykgJiYgIXNob3VsZFJlbW92ZUF0dHJpYnV0ZShwcm9wS2V5LCBuZXh0UHJvcCwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICAgICAgdmFyIGlzTWlzbWF0Y2hEdWVUb0JhZENhc2luZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCwgcHJvcGVydHlJbmZvKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgb3duTmFtZXNwYWNlID0gcGFyZW50TmFtZXNwYWNlO1xuXG4gICAgICAgICAgaWYgKG93bk5hbWVzcGFjZSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgICAgICAgICAgb3duTmFtZXNwYWNlID0gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHRhZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG93bk5hbWVzcGFjZSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IGdldFBvc3NpYmxlU3RhbmRhcmROYW1lKHByb3BLZXkpO1xuXG4gICAgICAgICAgICBpZiAoc3RhbmRhcmROYW1lICE9PSBudWxsICYmIHN0YW5kYXJkTmFtZSAhPT0gcHJvcEtleSkge1xuICAgICAgICAgICAgICAvLyBJZiBhbiBTVkcgcHJvcCBpcyBzdXBwbGllZCB3aXRoIGJhZCBjYXNpbmcsIGl0IHdpbGxcbiAgICAgICAgICAgICAgLy8gYmUgc3VjY2Vzc2Z1bGx5IHBhcnNlZCBmcm9tIEhUTUwsIGJ1dCB3aWxsIHByb2R1Y2UgYSBtaXNtYXRjaFxuICAgICAgICAgICAgICAvLyAoYW5kIHdvdWxkIGJlIGluY29ycmVjdGx5IHJlbmRlcmVkIG9uIHRoZSBjbGllbnQpLlxuICAgICAgICAgICAgICAvLyBIb3dldmVyLCB3ZSBhbHJlYWR5IHdhcm4gYWJvdXQgYmFkIGNhc2luZyBlbHNld2hlcmUuXG4gICAgICAgICAgICAgIC8vIFNvIHdlJ2xsIHNraXAgdGhlIG1pc2xlYWRpbmcgZXh0cmEgbWlzbWF0Y2ggd2FybmluZyBpbiB0aGlzIGNhc2UuXG4gICAgICAgICAgICAgIGlzTWlzbWF0Y2hEdWVUb0JhZENhc2luZyA9IHRydWU7IC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cblxuICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShzdGFuZGFyZE5hbWUpO1xuICAgICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG5cblxuICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2VydmVyVmFsdWUgPSBnZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dFByb3AgIT09IHNlcnZlclZhbHVlICYmICFpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcpIHtcbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgaWYgKGV4dHJhQXR0cmlidXRlTmFtZXMuc2l6ZSA+IDAgJiYgIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgd2FybkZvckV4dHJhQXR0cmlidXRlcyhleHRyYUF0dHJpYnV0ZU5hbWVzKTtcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIoZG9tRWxlbWVudCwgcmF3UHJvcHMsIHRydWUpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDMoZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIC8vIEZvciBpbnB1dCBhbmQgdGV4dGFyZWEgd2UgY3VycmVudCBhbHdheXMgc2V0IHRoZSB2YWx1ZSBwcm9wZXJ0eSBhdFxuICAgICAgLy8gcG9zdCBtb3VudCB0byBmb3JjZSBpdCB0byBkaXZlcmdlIGZyb20gYXR0cmlidXRlcy4gSG93ZXZlciwgZm9yXG4gICAgICAvLyBvcHRpb24gYW5kIHNlbGVjdCB3ZSBkb24ndCBxdWl0ZSBkbyB0aGUgc2FtZSB0aGluZyBhbmQgc2VsZWN0XG4gICAgICAvLyBpcyBub3QgcmVzaWxpZW50IHRvIHRoZSBET00gc3RhdGUgY2hhbmdpbmcgc28gd2UgZG9uJ3QgZG8gdGhhdCBoZXJlLlxuICAgICAgLy8gVE9ETzogQ29uc2lkZXIgbm90IGRvaW5nIHRoaXMgZm9yIGlucHV0IGFuZCB0ZXh0YXJlYS5cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh0eXBlb2YgcmF3UHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbn1cbmZ1bmN0aW9uIGRpZmZIeWRyYXRlZFRleHQodGV4dE5vZGUsIHRleHQpIHtcbiAgdmFyIGlzRGlmZmVyZW50ID0gdGV4dE5vZGUubm9kZVZhbHVlICE9PSB0ZXh0O1xuICByZXR1cm4gaXNEaWZmZXJlbnQ7XG59XG5mdW5jdGlvbiB3YXJuRm9yVW5tYXRjaGVkVGV4dCh0ZXh0Tm9kZSwgdGV4dCkge1xuICB7XG4gICAgd2FybkZvclRleHREaWZmZXJlbmNlKHRleHROb2RlLm5vZGVWYWx1ZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50Tm9kZSwgY2hpbGQpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdEaWQgbm90IGV4cGVjdCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgPCVzPiBpbiA8JXM+LicsIGNoaWxkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50Tm9kZSwgY2hpbGQpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdEaWQgbm90IGV4cGVjdCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIHRoZSB0ZXh0IG5vZGUgXCIlc1wiIGluIDwlcz4uJywgY2hpbGQubm9kZVZhbHVlLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50Tm9kZSwgdGFnLCBwcm9wcykge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0V4cGVjdGVkIHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSBtYXRjaGluZyA8JXM+IGluIDwlcz4uJywgdGFnLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50Tm9kZSwgdGV4dCkge1xuICB7XG4gICAgaWYgKHRleHQgPT09ICcnKSB7XG4gICAgICAvLyBXZSBleHBlY3QgdG8gaW5zZXJ0IGVtcHR5IHRleHQgbm9kZXMgc2luY2UgdGhleSdyZSBub3QgcmVwcmVzZW50ZWQgaW5cbiAgICAgIC8vIHRoZSBIVE1MLlxuICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgc3BlY2lhbCBjYXNlIGlmIHdlIGNhbiBqdXN0IGF2b2lkIGluc2VydGluZyBlbXB0eVxuICAgICAgLy8gdGV4dCBub2Rlcy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIHRleHQgbm9kZSBmb3IgXCIlc1wiIGluIDwlcz4uJywgdGV4dCwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQzKGRvbUVsZW1lbnQsIHRhZywgcHJvcHMpIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMihkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQxKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcbiAgfVxufVxuXG52YXIgdmFsaWRhdGVET01OZXN0aW5nID0gZnVuY3Rpb24gKCkge307XG5cbnZhciB1cGRhdGVkQW5jZXN0b3JJbmZvID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgLy8gVGhpcyB2YWxpZGF0aW9uIGNvZGUgd2FzIHdyaXR0ZW4gYmFzZWQgb24gdGhlIEhUTUw1IHBhcnNpbmcgc3BlYzpcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tc2NvcGVcbiAgLy9cbiAgLy8gTm90ZTogdGhpcyBkb2VzIG5vdCBjYXRjaCBhbGwgaW52YWxpZCBuZXN0aW5nLCBub3IgZG9lcyBpdCB0cnkgdG8gKGFzIGl0J3NcbiAgLy8gbm90IGNsZWFyIHdoYXQgcHJhY3RpY2FsIGJlbmVmaXQgZG9pbmcgc28gcHJvdmlkZXMpOyBpbnN0ZWFkLCB3ZSB3YXJuIG9ubHlcbiAgLy8gZm9yIGNhc2VzIHdoZXJlIHRoZSBwYXJzZXIgd2lsbCBnaXZlIGEgcGFyc2UgdHJlZSBkaWZmZXJpbmcgZnJvbSB3aGF0IFJlYWN0XG4gIC8vIGludGVuZGVkLiBGb3IgZXhhbXBsZSwgPGI+PGRpdj48L2Rpdj48L2I+IGlzIGludmFsaWQgYnV0IHdlIGRvbid0IHdhcm5cbiAgLy8gYmVjYXVzZSBpdCBzdGlsbCBwYXJzZXMgY29ycmVjdGx5OyB3ZSBkbyB3YXJuIGZvciBvdGhlciBjYXNlcyBsaWtlIG5lc3RlZFxuICAvLyA8cD4gdGFncyB3aGVyZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBpbXBsaWNpdGx5IGNsb3NlcyB0aGVcbiAgLy8gZmlyc3QsIGNhdXNpbmcgYSBjb25mdXNpbmcgbWVzcy5cbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjc3BlY2lhbFxuICB2YXIgc3BlY2lhbFRhZ3MgPSBbJ2FkZHJlc3MnLCAnYXBwbGV0JywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdiYXNlJywgJ2Jhc2Vmb250JywgJ2Jnc291bmQnLCAnYmxvY2txdW90ZScsICdib2R5JywgJ2JyJywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ2NlbnRlcicsICdjb2wnLCAnY29sZ3JvdXAnLCAnZGQnLCAnZGV0YWlscycsICdkaXInLCAnZGl2JywgJ2RsJywgJ2R0JywgJ2VtYmVkJywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmlndXJlJywgJ2Zvb3RlcicsICdmb3JtJywgJ2ZyYW1lJywgJ2ZyYW1lc2V0JywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWQnLCAnaGVhZGVyJywgJ2hncm91cCcsICdocicsICdodG1sJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaXNpbmRleCcsICdsaScsICdsaW5rJywgJ2xpc3RpbmcnLCAnbWFpbicsICdtYXJxdWVlJywgJ21lbnUnLCAnbWVudWl0ZW0nLCAnbWV0YScsICduYXYnLCAnbm9lbWJlZCcsICdub2ZyYW1lcycsICdub3NjcmlwdCcsICdvYmplY3QnLCAnb2wnLCAncCcsICdwYXJhbScsICdwbGFpbnRleHQnLCAncHJlJywgJ3NjcmlwdCcsICdzZWN0aW9uJywgJ3NlbGVjdCcsICdzb3VyY2UnLCAnc3R5bGUnLCAnc3VtbWFyeScsICd0YWJsZScsICd0Ym9keScsICd0ZCcsICd0ZW1wbGF0ZScsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcsICd0aXRsZScsICd0cicsICd0cmFjaycsICd1bCcsICd3YnInLCAneG1wJ107IC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLXNjb3BlXG5cbiAgdmFyIGluU2NvcGVUYWdzID0gWydhcHBsZXQnLCAnY2FwdGlvbicsICdodG1sJywgJ3RhYmxlJywgJ3RkJywgJ3RoJywgJ21hcnF1ZWUnLCAnb2JqZWN0JywgJ3RlbXBsYXRlJywgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaHRtbC1pbnRlZ3JhdGlvbi1wb2ludFxuICAvLyBUT0RPOiBEaXN0aW5ndWlzaCBieSBuYW1lc3BhY2UgaGVyZSAtLSBmb3IgPHRpdGxlPiwgaW5jbHVkaW5nIGl0IGhlcmVcbiAgLy8gZXJycyBvbiB0aGUgc2lkZSBvZiBmZXdlciB3YXJuaW5nc1xuICAnZm9yZWlnbk9iamVjdCcsICdkZXNjJywgJ3RpdGxlJ107IC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLWJ1dHRvbi1zY29wZVxuXG4gIHZhciBidXR0b25TY29wZVRhZ3MgPSBpblNjb3BlVGFncy5jb25jYXQoWydidXR0b24nXSk7IC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2dlbmVyYXRlLWltcGxpZWQtZW5kLXRhZ3NcblxuICB2YXIgaW1wbGllZEVuZFRhZ3MgPSBbJ2RkJywgJ2R0JywgJ2xpJywgJ29wdGlvbicsICdvcHRncm91cCcsICdwJywgJ3JwJywgJ3J0J107XG4gIHZhciBlbXB0eUFuY2VzdG9ySW5mbyA9IHtcbiAgICBjdXJyZW50OiBudWxsLFxuICAgIGZvcm1UYWc6IG51bGwsXG4gICAgYVRhZ0luU2NvcGU6IG51bGwsXG4gICAgYnV0dG9uVGFnSW5TY29wZTogbnVsbCxcbiAgICBub2JyVGFnSW5TY29wZTogbnVsbCxcbiAgICBwVGFnSW5CdXR0b25TY29wZTogbnVsbCxcbiAgICBsaXN0SXRlbVRhZ0F1dG9jbG9zaW5nOiBudWxsLFxuICAgIGRsSXRlbVRhZ0F1dG9jbG9zaW5nOiBudWxsXG4gIH07XG5cbiAgdXBkYXRlZEFuY2VzdG9ySW5mbyA9IGZ1bmN0aW9uIChvbGRJbmZvLCB0YWcpIHtcbiAgICB2YXIgYW5jZXN0b3JJbmZvID0gX2Fzc2lnbih7fSwgb2xkSW5mbyB8fCBlbXB0eUFuY2VzdG9ySW5mbyk7XG5cbiAgICB2YXIgaW5mbyA9IHtcbiAgICAgIHRhZzogdGFnXG4gICAgfTtcblxuICAgIGlmIChpblNjb3BlVGFncy5pbmRleE9mKHRhZykgIT09IC0xKSB7XG4gICAgICBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBudWxsO1xuICAgICAgYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGUgPSBudWxsO1xuICAgICAgYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoYnV0dG9uU2NvcGVUYWdzLmluZGV4T2YodGFnKSAhPT0gLTEpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZSA9IG51bGw7XG4gICAgfSAvLyBTZWUgcnVsZXMgZm9yICdsaScsICdkZCcsICdkdCcgc3RhcnQgdGFncyBpblxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHlcblxuXG4gICAgaWYgKHNwZWNpYWxUYWdzLmluZGV4T2YodGFnKSAhPT0gLTEgJiYgdGFnICE9PSAnYWRkcmVzcycgJiYgdGFnICE9PSAnZGl2JyAmJiB0YWcgIT09ICdwJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsO1xuICAgICAgYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nID0gbnVsbDtcbiAgICB9XG5cbiAgICBhbmNlc3RvckluZm8uY3VycmVudCA9IGluZm87XG5cbiAgICBpZiAodGFnID09PSAnZm9ybScpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5mb3JtVGFnID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnYScpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2J1dHRvbicpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnbm9icicpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ3AnKSB7XG4gICAgICBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdsaScpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnZGQnIHx8IHRhZyA9PT0gJ2R0Jykge1xuICAgICAgYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nID0gaW5mbztcbiAgICB9XG5cbiAgICByZXR1cm4gYW5jZXN0b3JJbmZvO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuXG5cbiAgdmFyIGlzVGFnVmFsaWRXaXRoUGFyZW50ID0gZnVuY3Rpb24gKHRhZywgcGFyZW50VGFnKSB7XG4gICAgLy8gRmlyc3QsIGxldCdzIGNoZWNrIGlmIHdlJ3JlIGluIGFuIHVudXN1YWwgcGFyc2luZyBtb2RlLi4uXG4gICAgc3dpdGNoIChwYXJlbnRUYWcpIHtcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnNlbGVjdFxuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnb3B0Z3JvdXAnIHx8IHRhZyA9PT0gJyN0ZXh0JztcblxuICAgICAgY2FzZSAnb3B0Z3JvdXAnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnb3B0aW9uJyB8fCB0YWcgPT09ICcjdGV4dCc7XG4gICAgICAvLyBTdHJpY3RseSBzcGVha2luZywgc2VlaW5nIGFuIDxvcHRpb24+IGRvZXNuJ3QgbWVhbiB3ZSdyZSBpbiBhIDxzZWxlY3Q+XG4gICAgICAvLyBidXRcblxuICAgICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJyN0ZXh0JztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRkXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5jYXB0aW9uXG4gICAgICAvLyBObyBzcGVjaWFsIGJlaGF2aW9yIHNpbmNlIHRoZXNlIHJ1bGVzIGZhbGwgYmFjayB0byBcImluIGJvZHlcIiBtb2RlIGZvclxuICAgICAgLy8gYWxsIGV4Y2VwdCBzcGVjaWFsIHRhYmxlIG5vZGVzIHdoaWNoIGNhdXNlIGJhZCBwYXJzaW5nIGJlaGF2aW9yIGFueXdheS5cbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRyXG5cbiAgICAgIGNhc2UgJ3RyJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ3RoJyB8fCB0YWcgPT09ICd0ZCcgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGJvZHlcblxuICAgICAgY2FzZSAndGJvZHknOlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAndHInIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNvbGdyb3VwXG5cbiAgICAgIGNhc2UgJ2NvbGdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2NvbCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGFibGVcblxuICAgICAgY2FzZSAndGFibGUnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnY2FwdGlvbicgfHwgdGFnID09PSAnY29sZ3JvdXAnIHx8IHRhZyA9PT0gJ3Rib2R5JyB8fCB0YWcgPT09ICd0Zm9vdCcgfHwgdGFnID09PSAndGhlYWQnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmhlYWRcblxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdiYXNlJyB8fCB0YWcgPT09ICdiYXNlZm9udCcgfHwgdGFnID09PSAnYmdzb3VuZCcgfHwgdGFnID09PSAnbGluaycgfHwgdGFnID09PSAnbWV0YScgfHwgdGFnID09PSAndGl0bGUnIHx8IHRhZyA9PT0gJ25vc2NyaXB0JyB8fCB0YWcgPT09ICdub2ZyYW1lcycgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VtYW50aWNzLmh0bWwjdGhlLWh0bWwtZWxlbWVudFxuXG4gICAgICBjYXNlICdodG1sJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2hlYWQnIHx8IHRhZyA9PT0gJ2JvZHknIHx8IHRhZyA9PT0gJ2ZyYW1lc2V0JztcblxuICAgICAgY2FzZSAnZnJhbWVzZXQnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnZnJhbWUnO1xuXG4gICAgICBjYXNlICcjZG9jdW1lbnQnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnaHRtbCc7XG4gICAgfSAvLyBQcm9iYWJseSBpbiB0aGUgXCJpbiBib2R5XCIgcGFyc2luZyBtb2RlLCBzbyB3ZSBvdXRsYXcgb25seSB0YWcgY29tYm9zXG4gICAgLy8gd2hlcmUgdGhlIHBhcnNpbmcgcnVsZXMgY2F1c2UgaW1wbGljaXQgb3BlbnMgb3IgY2xvc2VzIHRvIGJlIGFkZGVkLlxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHlcblxuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgJ2gxJzpcbiAgICAgIGNhc2UgJ2gyJzpcbiAgICAgIGNhc2UgJ2gzJzpcbiAgICAgIGNhc2UgJ2g0JzpcbiAgICAgIGNhc2UgJ2g1JzpcbiAgICAgIGNhc2UgJ2g2JzpcbiAgICAgICAgcmV0dXJuIHBhcmVudFRhZyAhPT0gJ2gxJyAmJiBwYXJlbnRUYWcgIT09ICdoMicgJiYgcGFyZW50VGFnICE9PSAnaDMnICYmIHBhcmVudFRhZyAhPT0gJ2g0JyAmJiBwYXJlbnRUYWcgIT09ICdoNScgJiYgcGFyZW50VGFnICE9PSAnaDYnO1xuXG4gICAgICBjYXNlICdycCc6XG4gICAgICBjYXNlICdydCc6XG4gICAgICAgIHJldHVybiBpbXBsaWVkRW5kVGFncy5pbmRleE9mKHBhcmVudFRhZykgPT09IC0xO1xuXG4gICAgICBjYXNlICdib2R5JzpcbiAgICAgIGNhc2UgJ2NhcHRpb24nOlxuICAgICAgY2FzZSAnY29sJzpcbiAgICAgIGNhc2UgJ2NvbGdyb3VwJzpcbiAgICAgIGNhc2UgJ2ZyYW1lc2V0JzpcbiAgICAgIGNhc2UgJ2ZyYW1lJzpcbiAgICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICBjYXNlICd0Ym9keSc6XG4gICAgICBjYXNlICd0ZCc6XG4gICAgICBjYXNlICd0Zm9vdCc6XG4gICAgICBjYXNlICd0aCc6XG4gICAgICBjYXNlICd0aGVhZCc6XG4gICAgICBjYXNlICd0cic6XG4gICAgICAgIC8vIFRoZXNlIHRhZ3MgYXJlIG9ubHkgdmFsaWQgd2l0aCBhIGZldyBwYXJlbnRzIHRoYXQgaGF2ZSBzcGVjaWFsIGNoaWxkXG4gICAgICAgIC8vIHBhcnNpbmcgcnVsZXMgLS0gaWYgd2UncmUgZG93biBoZXJlLCB0aGVuIG5vbmUgb2YgdGhvc2UgbWF0Y2hlZCBhbmRcbiAgICAgICAgLy8gc28gd2UgYWxsb3cgaXQgb25seSBpZiB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHBhcmVudCBpcywgYXMgYWxsIG90aGVyXG4gICAgICAgIC8vIGNhc2VzIGFyZSBpbnZhbGlkLlxuICAgICAgICByZXR1cm4gcGFyZW50VGFnID09IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXJcbiAgICovXG5cblxuICB2YXIgZmluZEludmFsaWRBbmNlc3RvckZvclRhZyA9IGZ1bmN0aW9uICh0YWcsIGFuY2VzdG9ySW5mbykge1xuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ2FydGljbGUnOlxuICAgICAgY2FzZSAnYXNpZGUnOlxuICAgICAgY2FzZSAnYmxvY2txdW90ZSc6XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgY2FzZSAnZGlyJzpcbiAgICAgIGNhc2UgJ2Rpdic6XG4gICAgICBjYXNlICdkbCc6XG4gICAgICBjYXNlICdmaWVsZHNldCc6XG4gICAgICBjYXNlICdmaWdjYXB0aW9uJzpcbiAgICAgIGNhc2UgJ2ZpZ3VyZSc6XG4gICAgICBjYXNlICdmb290ZXInOlxuICAgICAgY2FzZSAnaGVhZGVyJzpcbiAgICAgIGNhc2UgJ2hncm91cCc6XG4gICAgICBjYXNlICdtYWluJzpcbiAgICAgIGNhc2UgJ21lbnUnOlxuICAgICAgY2FzZSAnbmF2JzpcbiAgICAgIGNhc2UgJ29sJzpcbiAgICAgIGNhc2UgJ3AnOlxuICAgICAgY2FzZSAnc2VjdGlvbic6XG4gICAgICBjYXNlICdzdW1tYXJ5JzpcbiAgICAgIGNhc2UgJ3VsJzpcbiAgICAgIGNhc2UgJ3ByZSc6XG4gICAgICBjYXNlICdsaXN0aW5nJzpcbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgIGNhc2UgJ2hyJzpcbiAgICAgIGNhc2UgJ3htcCc6XG4gICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4gICAgICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2Zvcm0nOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmZvcm1UYWcgfHwgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuXG4gICAgICBjYXNlICdsaSc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZztcblxuICAgICAgY2FzZSAnZGQnOlxuICAgICAgY2FzZSAnZHQnOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nO1xuXG4gICAgICBjYXNlICdidXR0b24nOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAvLyBTcGVjIHNheXMgc29tZXRoaW5nIGFib3V0IHN0b3JpbmcgYSBsaXN0IG9mIG1hcmtlcnMsIGJ1dCBpdCBzb3VuZHNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byB0aGlzIGNoZWNrLlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlO1xuXG4gICAgICBjYXNlICdub2JyJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICB2YXIgZGlkV2FybiQxID0ge307XG5cbiAgdmFsaWRhdGVET01OZXN0aW5nID0gZnVuY3Rpb24gKGNoaWxkVGFnLCBjaGlsZFRleHQsIGFuY2VzdG9ySW5mbykge1xuICAgIGFuY2VzdG9ySW5mbyA9IGFuY2VzdG9ySW5mbyB8fCBlbXB0eUFuY2VzdG9ySW5mbztcbiAgICB2YXIgcGFyZW50SW5mbyA9IGFuY2VzdG9ySW5mby5jdXJyZW50O1xuICAgIHZhciBwYXJlbnRUYWcgPSBwYXJlbnRJbmZvICYmIHBhcmVudEluZm8udGFnO1xuXG4gICAgaWYgKGNoaWxkVGV4dCAhPSBudWxsKSB7XG4gICAgICBpZiAoY2hpbGRUYWcgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcigndmFsaWRhdGVET01OZXN0aW5nOiB3aGVuIGNoaWxkVGV4dCBpcyBwYXNzZWQsIGNoaWxkVGFnIHNob3VsZCBiZSBudWxsJyk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkVGFnID0gJyN0ZXh0JztcbiAgICB9XG5cbiAgICB2YXIgaW52YWxpZFBhcmVudCA9IGlzVGFnVmFsaWRXaXRoUGFyZW50KGNoaWxkVGFnLCBwYXJlbnRUYWcpID8gbnVsbCA6IHBhcmVudEluZm87XG4gICAgdmFyIGludmFsaWRBbmNlc3RvciA9IGludmFsaWRQYXJlbnQgPyBudWxsIDogZmluZEludmFsaWRBbmNlc3RvckZvclRhZyhjaGlsZFRhZywgYW5jZXN0b3JJbmZvKTtcbiAgICB2YXIgaW52YWxpZFBhcmVudE9yQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50IHx8IGludmFsaWRBbmNlc3RvcjtcblxuICAgIGlmICghaW52YWxpZFBhcmVudE9yQW5jZXN0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYW5jZXN0b3JUYWcgPSBpbnZhbGlkUGFyZW50T3JBbmNlc3Rvci50YWc7XG4gICAgdmFyIHdhcm5LZXkgPSAhIWludmFsaWRQYXJlbnQgKyAnfCcgKyBjaGlsZFRhZyArICd8JyArIGFuY2VzdG9yVGFnO1xuXG4gICAgaWYgKGRpZFdhcm4kMVt3YXJuS2V5XSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm4kMVt3YXJuS2V5XSA9IHRydWU7XG4gICAgdmFyIHRhZ0Rpc3BsYXlOYW1lID0gY2hpbGRUYWc7XG4gICAgdmFyIHdoaXRlc3BhY2VJbmZvID0gJyc7XG5cbiAgICBpZiAoY2hpbGRUYWcgPT09ICcjdGV4dCcpIHtcbiAgICAgIGlmICgvXFxTLy50ZXN0KGNoaWxkVGV4dCkpIHtcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnVGV4dCBub2Rlcyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWdEaXNwbGF5TmFtZSA9ICdXaGl0ZXNwYWNlIHRleHQgbm9kZXMnO1xuICAgICAgICB3aGl0ZXNwYWNlSW5mbyA9IFwiIE1ha2Ugc3VyZSB5b3UgZG9uJ3QgaGF2ZSBhbnkgZXh0cmEgd2hpdGVzcGFjZSBiZXR3ZWVuIHRhZ3Mgb24gXCIgKyAnZWFjaCBsaW5lIG9mIHlvdXIgc291cmNlIGNvZGUuJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnRGlzcGxheU5hbWUgPSAnPCcgKyBjaGlsZFRhZyArICc+JztcbiAgICB9XG5cbiAgICBpZiAoaW52YWxpZFBhcmVudCkge1xuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKGFuY2VzdG9yVGFnID09PSAndGFibGUnICYmIGNoaWxkVGFnID09PSAndHInKSB7XG4gICAgICAgIGluZm8gKz0gJyBBZGQgYSA8dGJvZHk+LCA8dGhlYWQ+IG9yIDx0Zm9vdD4gdG8geW91ciBjb2RlIHRvIG1hdGNoIHRoZSBET00gdHJlZSBnZW5lcmF0ZWQgYnkgJyArICd0aGUgYnJvd3Nlci4nO1xuICAgICAgfVxuXG4gICAgICBlcnJvcigndmFsaWRhdGVET01OZXN0aW5nKC4uLik6ICVzIGNhbm5vdCBhcHBlYXIgYXMgYSBjaGlsZCBvZiA8JXM+LiVzJXMnLCB0YWdEaXNwbGF5TmFtZSwgYW5jZXN0b3JUYWcsIHdoaXRlc3BhY2VJbmZvLCBpbmZvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZyguLi4pOiAlcyBjYW5ub3QgYXBwZWFyIGFzIGEgZGVzY2VuZGFudCBvZiAnICsgJzwlcz4uJywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxO1xuXG57XG4gIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDEgPSAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJztcbn1cblxudmFyIFNVU1BFTlNFX1NUQVJUX0RBVEEgPSAnJCc7XG52YXIgU1VTUEVOU0VfRU5EX0RBVEEgPSAnLyQnO1xudmFyIFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSA9ICckPyc7XG52YXIgU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSA9ICckISc7XG52YXIgU1RZTEUkMSA9ICdzdHlsZSc7XG52YXIgZXZlbnRzRW5hYmxlZCA9IG51bGw7XG52YXIgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBudWxsO1xuXG5mdW5jdGlvbiBzaG91bGRBdXRvRm9jdXNIb3N0Q29tcG9uZW50KHR5cGUsIHByb3BzKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgcmV0dXJuICEhcHJvcHMuYXV0b0ZvY3VzO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0Um9vdEhvc3RDb250ZXh0KHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICB2YXIgdHlwZTtcbiAgdmFyIG5hbWVzcGFjZTtcbiAgdmFyIG5vZGVUeXBlID0gcm9vdENvbnRhaW5lckluc3RhbmNlLm5vZGVUeXBlO1xuXG4gIHN3aXRjaCAobm9kZVR5cGUpIHtcbiAgICBjYXNlIERPQ1VNRU5UX05PREU6XG4gICAgY2FzZSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOlxuICAgICAge1xuICAgICAgICB0eXBlID0gbm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyAnI2RvY3VtZW50JyA6ICcjZnJhZ21lbnQnO1xuICAgICAgICB2YXIgcm9vdCA9IHJvb3RDb250YWluZXJJbnN0YW5jZS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIG5hbWVzcGFjZSA9IHJvb3QgPyByb290Lm5hbWVzcGFjZVVSSSA6IGdldENoaWxkTmFtZXNwYWNlKG51bGwsICcnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB2YXIgY29udGFpbmVyID0gbm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSA/IHJvb3RDb250YWluZXJJbnN0YW5jZS5wYXJlbnROb2RlIDogcm9vdENvbnRhaW5lckluc3RhbmNlO1xuICAgICAgICB2YXIgb3duTmFtZXNwYWNlID0gY29udGFpbmVyLm5hbWVzcGFjZVVSSSB8fCBudWxsO1xuICAgICAgICB0eXBlID0gY29udGFpbmVyLnRhZ05hbWU7XG4gICAgICAgIG5hbWVzcGFjZSA9IGdldENoaWxkTmFtZXNwYWNlKG93bk5hbWVzcGFjZSwgdHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHZhciB2YWxpZGF0ZWRUYWcgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8obnVsbCwgdmFsaWRhdGVkVGFnKTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICBhbmNlc3RvckluZm86IGFuY2VzdG9ySW5mb1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGdldENoaWxkSG9zdENvbnRleHQocGFyZW50SG9zdENvbnRleHQsIHR5cGUsIHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICB7XG4gICAgdmFyIHBhcmVudEhvc3RDb250ZXh0RGV2ID0gcGFyZW50SG9zdENvbnRleHQ7XG4gICAgdmFyIG5hbWVzcGFjZSA9IGdldENoaWxkTmFtZXNwYWNlKHBhcmVudEhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZSwgdHlwZSk7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8ocGFyZW50SG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICBhbmNlc3RvckluZm86IGFuY2VzdG9ySW5mb1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFB1YmxpY0luc3RhbmNlKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVGb3JDb21taXQoY29udGFpbmVySW5mbykge1xuICBldmVudHNFbmFibGVkID0gaXNFbmFibGVkKCk7XG4gIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb24oKTtcbiAgdmFyIGFjdGl2ZUluc3RhbmNlID0gbnVsbDtcblxuICBzZXRFbmFibGVkKGZhbHNlKTtcbiAgcmV0dXJuIGFjdGl2ZUluc3RhbmNlO1xufVxuZnVuY3Rpb24gcmVzZXRBZnRlckNvbW1pdChjb250YWluZXJJbmZvKSB7XG4gIHJlc3RvcmVTZWxlY3Rpb24oc2VsZWN0aW9uSW5mb3JtYXRpb24pO1xuICBzZXRFbmFibGVkKGV2ZW50c0VuYWJsZWQpO1xuICBldmVudHNFbmFibGVkID0gbnVsbDtcbiAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBudWxsO1xufVxuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UodHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgdmFyIHBhcmVudE5hbWVzcGFjZTtcblxuICB7XG4gICAgLy8gVE9ETzogdGFrZSBuYW1lc3BhY2UgaW50byBhY2NvdW50IHdoZW4gdmFsaWRhdGluZy5cbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICB2YWxpZGF0ZURPTU5lc3RpbmcodHlwZSwgbnVsbCwgaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvKTtcblxuICAgIGlmICh0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHZhciBzdHJpbmcgPSAnJyArIHByb3BzLmNoaWxkcmVuO1xuICAgICAgdmFyIG93bkFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8oaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCBzdHJpbmcsIG93bkFuY2VzdG9ySW5mbyk7XG4gICAgfVxuXG4gICAgcGFyZW50TmFtZXNwYWNlID0gaG9zdENvbnRleHREZXYubmFtZXNwYWNlO1xuICB9XG5cbiAgdmFyIGRvbUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIHBhcmVudE5hbWVzcGFjZSk7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIGRvbUVsZW1lbnQpO1xuICB1cGRhdGVGaWJlclByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgcmV0dXJuIGRvbUVsZW1lbnQ7XG59XG5mdW5jdGlvbiBhcHBlbmRJbml0aWFsQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKGRvbUVsZW1lbnQsIHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG4gIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuICByZXR1cm4gc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBwcm9wcyk7XG59XG5mdW5jdGlvbiBwcmVwYXJlVXBkYXRlKGRvbUVsZW1lbnQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCkge1xuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG5cbiAgICBpZiAodHlwZW9mIG5ld1Byb3BzLmNoaWxkcmVuICE9PSB0eXBlb2Ygb2xkUHJvcHMuY2hpbGRyZW4gJiYgKHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld1Byb3BzLmNoaWxkcmVuID09PSAnbnVtYmVyJykpIHtcbiAgICAgIHZhciBzdHJpbmcgPSAnJyArIG5ld1Byb3BzLmNoaWxkcmVuO1xuICAgICAgdmFyIG93bkFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8oaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCBzdHJpbmcsIG93bkFuY2VzdG9ySW5mbyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpZmZQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG59XG5mdW5jdGlvbiBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBwcm9wcykge1xuICByZXR1cm4gdHlwZSA9PT0gJ3RleHRhcmVhJyB8fCB0eXBlID09PSAnb3B0aW9uJyB8fCB0eXBlID09PSAnbm9zY3JpcHQnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT09ICdvYmplY3QnICYmIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICE9PSBudWxsICYmIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCAhPSBudWxsO1xufVxuZnVuY3Rpb24gY3JlYXRlVGV4dEluc3RhbmNlKHRleHQsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCB0ZXh0LCBob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8pO1xuICB9XG5cbiAgdmFyIHRleHROb2RlID0gY3JlYXRlVGV4dE5vZGUodGV4dCwgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgdGV4dE5vZGUpO1xuICByZXR1cm4gdGV4dE5vZGU7XG59XG4vLyBpZiBhIGNvbXBvbmVudCBqdXN0IGltcG9ydHMgUmVhY3RET00gKGUuZy4gZm9yIGZpbmRET01Ob2RlKS5cbi8vIFNvbWUgZW52aXJvbm1lbnRzIG1pZ2h0IG5vdCBoYXZlIHNldFRpbWVvdXQgb3IgY2xlYXJUaW1lb3V0LlxuXG52YXIgc2NoZWR1bGVUaW1lb3V0ID0gdHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicgPyBzZXRUaW1lb3V0IDogdW5kZWZpbmVkO1xudmFyIGNhbmNlbFRpbWVvdXQgPSB0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gY2xlYXJUaW1lb3V0IDogdW5kZWZpbmVkO1xudmFyIG5vVGltZW91dCA9IC0xOyAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBjb21taXRNb3VudChkb21FbGVtZW50LCB0eXBlLCBuZXdQcm9wcywgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICAvLyBEZXNwaXRlIHRoZSBuYW1pbmcgdGhhdCBtaWdodCBpbXBseSBvdGhlcndpc2UsIHRoaXMgbWV0aG9kIG9ubHlcbiAgLy8gZmlyZXMgaWYgdGhlcmUgaXMgYW4gYFVwZGF0ZWAgZWZmZWN0IHNjaGVkdWxlZCBkdXJpbmcgbW91bnRpbmcuXG4gIC8vIFRoaXMgaGFwcGVucyBpZiBgZmluYWxpemVJbml0aWFsQ2hpbGRyZW5gIHJldHVybnMgYHRydWVgICh3aGljaCBpdFxuICAvLyBkb2VzIHRvIGltcGxlbWVudCB0aGUgYGF1dG9Gb2N1c2AgYXR0cmlidXRlIG9uIHRoZSBjbGllbnQpLiBCdXRcbiAgLy8gdGhlcmUgYXJlIGFsc28gb3RoZXIgY2FzZXMgd2hlbiB0aGlzIG1pZ2h0IGhhcHBlbiAoc3VjaCBhcyBwYXRjaGluZ1xuICAvLyB1cCB0ZXh0IGNvbnRlbnQgZHVyaW5nIGh5ZHJhdGlvbiBtaXNtYXRjaCkuIFNvIHdlJ2xsIGNoZWNrIHRoaXMgYWdhaW4uXG4gIGlmIChzaG91bGRBdXRvRm9jdXNIb3N0Q29tcG9uZW50KHR5cGUsIG5ld1Byb3BzKSkge1xuICAgIGRvbUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxufVxuZnVuY3Rpb24gY29tbWl0VXBkYXRlKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICAvLyBVcGRhdGUgdGhlIHByb3BzIGhhbmRsZSBzbyB0aGF0IHdlIGtub3cgd2hpY2ggcHJvcHMgYXJlIHRoZSBvbmVzIHdpdGhcbiAgLy8gd2l0aCBjdXJyZW50IGV2ZW50IGhhbmRsZXJzLlxuICB1cGRhdGVGaWJlclByb3BzKGRvbUVsZW1lbnQsIG5ld1Byb3BzKTsgLy8gQXBwbHkgdGhlIGRpZmYgdG8gdGhlIERPTSBub2RlLlxuXG4gIHVwZGF0ZVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKTtcbn1cbmZ1bmN0aW9uIHJlc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCkge1xuICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCAnJyk7XG59XG5mdW5jdGlvbiBjb21taXRUZXh0VXBkYXRlKHRleHRJbnN0YW5jZSwgb2xkVGV4dCwgbmV3VGV4dCkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gbmV3VGV4dDtcbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKGNvbnRhaW5lciwgY2hpbGQpIHtcbiAgdmFyIHBhcmVudE5vZGU7XG5cbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgcGFyZW50Tm9kZSA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkLCBjb250YWluZXIpO1xuICB9IGVsc2Uge1xuICAgIHBhcmVudE5vZGUgPSBjb250YWluZXI7XG4gICAgcGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjaGlsZCk7XG4gIH0gLy8gVGhpcyBjb250YWluZXIgbWlnaHQgYmUgdXNlZCBmb3IgYSBwb3J0YWwuXG4gIC8vIElmIHNvbWV0aGluZyBpbnNpZGUgYSBwb3J0YWwgaXMgY2xpY2tlZCwgdGhhdCBjbGljayBzaG91bGQgYnViYmxlXG4gIC8vIHRocm91Z2ggdGhlIFJlYWN0IHRyZWUuIEhvd2V2ZXIsIG9uIE1vYmlsZSBTYWZhcmkgdGhlIGNsaWNrIHdvdWxkXG4gIC8vIG5ldmVyIGJ1YmJsZSB0aHJvdWdoIHRoZSAqRE9NKiB0cmVlIHVubGVzcyBhbiBhbmNlc3RvciB3aXRoIG9uY2xpY2tcbiAgLy8gZXZlbnQgZXhpc3RzLiBTbyB3ZSB3b3VsZG4ndCBzZWUgaXQgYW5kIGRpc3BhdGNoIGl0LlxuICAvLyBUaGlzIGlzIHdoeSB3ZSBlbnN1cmUgdGhhdCBub24gUmVhY3Qgcm9vdCBjb250YWluZXJzIGhhdmUgaW5saW5lIG9uY2xpY2tcbiAgLy8gZGVmaW5lZC5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTkxOFxuXG5cbiAgdmFyIHJlYWN0Um9vdENvbnRhaW5lciA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuXG4gIGlmICgocmVhY3RSb290Q29udGFpbmVyID09PSBudWxsIHx8IHJlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSAmJiBwYXJlbnROb2RlLm9uY2xpY2sgPT09IG51bGwpIHtcbiAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KHBhcmVudE5vZGUpO1xuICB9XG59XG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUocGFyZW50SW5zdGFuY2UsIGNoaWxkLCBiZWZvcmVDaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbn1cbmZ1bmN0aW9uIGluc2VydEluQ29udGFpbmVyQmVmb3JlKGNvbnRhaW5lciwgY2hpbGQsIGJlZm9yZUNoaWxkKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZCwgYmVmb3JlQ2hpbGQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UucmVtb3ZlQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY2hpbGQpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChjaGlsZCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGhpZGVJbnN0YW5jZShpbnN0YW5jZSkge1xuICAvLyBUT0RPOiBEb2VzIHRoaXMgd29yayBmb3IgYWxsIGVsZW1lbnQgdHlwZXM/IFdoYXQgYWJvdXQgTWF0aE1MPyBTaG91bGQgd2VcbiAgLy8gcGFzcyBob3N0IGNvbnRleHQgdG8gdGhpcyBtZXRob2Q/XG4gIGluc3RhbmNlID0gaW5zdGFuY2U7XG4gIHZhciBzdHlsZSA9IGluc3RhbmNlLnN0eWxlO1xuXG4gIGlmICh0eXBlb2Ygc3R5bGUuc2V0UHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdub25lJywgJ2ltcG9ydGFudCcpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIH1cbn1cbmZ1bmN0aW9uIGhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlKSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSAnJztcbn1cbmZ1bmN0aW9uIHVuaGlkZUluc3RhbmNlKGluc3RhbmNlLCBwcm9wcykge1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICB2YXIgc3R5bGVQcm9wID0gcHJvcHNbU1RZTEUkMV07XG4gIHZhciBkaXNwbGF5ID0gc3R5bGVQcm9wICE9PSB1bmRlZmluZWQgJiYgc3R5bGVQcm9wICE9PSBudWxsICYmIHN0eWxlUHJvcC5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheScpID8gc3R5bGVQcm9wLmRpc3BsYXkgOiBudWxsO1xuICBpbnN0YW5jZS5zdHlsZS5kaXNwbGF5ID0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZSgnZGlzcGxheScsIGRpc3BsYXkpO1xufVxuZnVuY3Rpb24gdW5oaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gdGV4dDtcbn1cbmZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICBjb250YWluZXIudGV4dENvbnRlbnQgPSAnJztcbiAgfSBlbHNlIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUpIHtcbiAgICB2YXIgYm9keSA9IGNvbnRhaW5lci5ib2R5O1xuXG4gICAgaWYgKGJvZHkgIT0gbnVsbCkge1xuICAgICAgYm9keS50ZXh0Q29udGVudCA9ICcnO1xuICAgIH1cbiAgfVxufSAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBjYW5IeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzKSB7XG4gIGlmIChpbnN0YW5jZS5ub2RlVHlwZSAhPT0gRUxFTUVOVF9OT0RFIHx8IHR5cGUudG9Mb3dlckNhc2UoKSAhPT0gaW5zdGFuY2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIFRoaXMgaGFzIG5vdyBiZWVuIHJlZmluZWQgdG8gYW4gZWxlbWVudCBub2RlLlxuXG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShpbnN0YW5jZSwgdGV4dCkge1xuICBpZiAodGV4dCA9PT0gJycgfHwgaW5zdGFuY2Uubm9kZVR5cGUgIT09IFRFWFRfTk9ERSkge1xuICAgIC8vIEVtcHR5IHN0cmluZ3MgYXJlIG5vdCBwYXJzZWQgYnkgSFRNTCBzbyB0aGVyZSB3b24ndCBiZSBhIGNvcnJlY3QgbWF0Y2ggaGVyZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBUaGlzIGhhcyBub3cgYmVlbiByZWZpbmVkIHRvIGEgdGV4dCBub2RlLlxuXG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyhpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2UuZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEE7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlKG5vZGUpIHtcbiAgLy8gU2tpcCBub24taHlkcmF0YWJsZSBub2Rlcy5cbiAgZm9yICg7IG5vZGUgIT0gbnVsbDsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICB2YXIgbm9kZVR5cGUgPSBub2RlLm5vZGVUeXBlO1xuXG4gICAgaWYgKG5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlU2libGluZyhpbnN0YW5jZSkge1xuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGUoaW5zdGFuY2UubmV4dFNpYmxpbmcpO1xufVxuZnVuY3Rpb24gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQocGFyZW50SW5zdGFuY2UpIHtcbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlKHBhcmVudEluc3RhbmNlLmZpcnN0Q2hpbGQpO1xufVxuZnVuY3Rpb24gaHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBpbnN0YW5jZSk7IC8vIFRPRE86IFBvc3NpYmx5IGRlZmVyIHRoaXMgdW50aWwgdGhlIGNvbW1pdCBwaGFzZSB3aGVyZSBhbGwgdGhlIGV2ZW50c1xuICAvLyBnZXQgYXR0YWNoZWQuXG5cbiAgdXBkYXRlRmliZXJQcm9wcyhpbnN0YW5jZSwgcHJvcHMpO1xuICB2YXIgcGFyZW50TmFtZXNwYWNlO1xuXG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICBwYXJlbnROYW1lc3BhY2UgPSBob3N0Q29udGV4dERldi5uYW1lc3BhY2U7XG4gIH1cblxuICByZXR1cm4gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIHBhcmVudE5hbWVzcGFjZSk7XG59XG5mdW5jdGlvbiBoeWRyYXRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCB0ZXh0SW5zdGFuY2UpO1xuICByZXR1cm4gZGlmZkh5ZHJhdGVkVGV4dCh0ZXh0SW5zdGFuY2UsIHRleHQpO1xufVxuZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVyU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gIHZhciBub2RlID0gc3VzcGVuc2VJbnN0YW5jZS5uZXh0U2libGluZzsgLy8gU2tpcCBwYXN0IGFsbCBub2RlcyB3aXRoaW4gdGhpcyBzdXNwZW5zZSBib3VuZGFyeS5cbiAgLy8gVGhlcmUgbWlnaHQgYmUgbmVzdGVkIG5vZGVzIHNvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBob3dcbiAgLy8gZGVlcCB3ZSBhcmUgYW5kIG9ubHkgYnJlYWsgb3V0IHdoZW4gd2UncmUgYmFjayBvbiB0b3AuXG5cbiAgdmFyIGRlcHRoID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBkYXRhID0gbm9kZS5kYXRhO1xuXG4gICAgICBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHtcbiAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlU2libGluZyhub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgfSAvLyBUT0RPOiBXYXJuLCB3ZSBkaWRuJ3QgZmluZCB0aGUgZW5kIGNvbW1lbnQgYm91bmRhcnkuXG5cblxuICByZXR1cm4gbnVsbDtcbn0gLy8gUmV0dXJucyB0aGUgU3VzcGVuc2VJbnN0YW5jZSBpZiB0aGlzIG5vZGUgaXMgYSBkaXJlY3QgY2hpbGQgb2YgYVxuLy8gU3VzcGVuc2VJbnN0YW5jZS4gSS5lLiBpZiBpdHMgcHJldmlvdXMgc2libGluZyBpcyBhIENvbW1lbnQgd2l0aFxuLy8gU1VTUEVOU0VfeF9TVEFSVF9EQVRBLiBPdGhlcndpc2UsIG51bGwuXG5cbmZ1bmN0aW9uIGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0SW5zdGFuY2UpIHtcbiAgdmFyIG5vZGUgPSB0YXJnZXRJbnN0YW5jZS5wcmV2aW91c1NpYmxpbmc7IC8vIFNraXAgcGFzdCBhbGwgbm9kZXMgd2l0aGluIHRoaXMgc3VzcGVuc2UgYm91bmRhcnkuXG4gIC8vIFRoZXJlIG1pZ2h0IGJlIG5lc3RlZCBub2RlcyBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgaG93XG4gIC8vIGRlZXAgd2UgYXJlIGFuZCBvbmx5IGJyZWFrIG91dCB3aGVuIHdlJ3JlIGJhY2sgb24gdG9wLlxuXG4gIHZhciBkZXB0aCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgZGF0YSA9IG5vZGUuZGF0YTtcblxuICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEpIHtcbiAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIC8vIFJldHJ5IGlmIGFueSBldmVudCByZXBsYXlpbmcgd2FzIGJsb2NrZWQgb24gdGhpcy5cbiAgcmV0cnlJZkJsb2NrZWRPbihjb250YWluZXIpO1xufVxuZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgLy8gUmV0cnkgaWYgYW55IGV2ZW50IHJlcGxheWluZyB3YXMgYmxvY2tlZCBvbiB0aGlzLlxuICByZXRyeUlmQmxvY2tlZE9uKHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gZGlkTm90TWF0Y2hIeWRyYXRlZENvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICB7XG4gICAgd2FybkZvclVubWF0Y2hlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90TWF0Y2hIeWRyYXRlZFRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgd2FybkZvclVubWF0Y2hlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90SHlkcmF0ZUNvbnRhaW5lckluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpIHtcbiAge1xuICAgIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpO1xuICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkgOyBlbHNlIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaWROb3RIeWRyYXRlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKTtcbiAgICB9IGVsc2UgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIDsgZWxzZSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lckluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdHlwZSwgcHJvcHMpIHtcbiAge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnRDb250YWluZXIsIHR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnRDb250YWluZXIsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdHlwZSwgcHJvcHMpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnRJbnN0YW5jZSwgdHlwZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdGV4dCkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudEluc3RhbmNlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVTdXNwZW5zZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSA7XG59XG52YXIgY2xpZW50SWQgPSAwO1xuZnVuY3Rpb24gbWFrZUNsaWVudElkSW5ERVYod2Fybk9uQWNjZXNzSW5ERVYpIHtcbiAgdmFyIGlkID0gJ3I6JyArIChjbGllbnRJZCsrKS50b1N0cmluZygzNik7XG4gIHJldHVybiB7XG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm5PbkFjY2Vzc0luREVWKCk7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfSxcbiAgICB2YWx1ZU9mOiBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuT25BY2Nlc3NJbkRFVigpO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIGlzT3BhcXVlSHlkcmF0aW5nT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9PUEFRVUVfSURfVFlQRTtcbn1cbmZ1bmN0aW9uIG1ha2VPcGFxdWVIeWRyYXRpbmdPYmplY3QoYXR0ZW1wdFRvUmVhZFZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX09QQVFVRV9JRF9UWVBFLFxuICAgIHRvU3RyaW5nOiBhdHRlbXB0VG9SZWFkVmFsdWUsXG4gICAgdmFsdWVPZjogYXR0ZW1wdFRvUmVhZFZhbHVlXG4gIH07XG59XG5mdW5jdGlvbiBwcmVwYXJlUG9ydGFsTW91bnQocG9ydGFsSW5zdGFuY2UpIHtcbiAge1xuICAgIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHBvcnRhbEluc3RhbmNlKTtcbiAgfVxufVxuXG52YXIgcmFuZG9tS2V5ID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG52YXIgaW50ZXJuYWxJbnN0YW5jZUtleSA9ICdfX3JlYWN0RmliZXIkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbFByb3BzS2V5ID0gJ19fcmVhY3RQcm9wcyQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXkgPSAnX19yZWFjdENvbnRhaW5lciQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsRXZlbnRIYW5kbGVyc0tleSA9ICdfX3JlYWN0RXZlbnRzJCcgKyByYW5kb21LZXk7XG5mdW5jdGlvbiBwcmVjYWNoZUZpYmVyTm9kZShob3N0SW5zdCwgbm9kZSkge1xuICBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldID0gaG9zdEluc3Q7XG59XG5mdW5jdGlvbiBtYXJrQ29udGFpbmVyQXNSb290KGhvc3RSb290LCBub2RlKSB7XG4gIG5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gPSBob3N0Um9vdDtcbn1cbmZ1bmN0aW9uIHVubWFya0NvbnRhaW5lckFzUm9vdChub2RlKSB7XG4gIG5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gPSBudWxsO1xufVxuZnVuY3Rpb24gaXNDb250YWluZXJNYXJrZWRBc1Jvb3Qobm9kZSkge1xuICByZXR1cm4gISFub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldO1xufSAvLyBHaXZlbiBhIERPTSBub2RlLCByZXR1cm4gdGhlIGNsb3Nlc3QgSG9zdENvbXBvbmVudCBvciBIb3N0VGV4dCBmaWJlciBhbmNlc3Rvci5cbi8vIElmIHRoZSB0YXJnZXQgbm9kZSBpcyBwYXJ0IG9mIGEgaHlkcmF0ZWQgb3Igbm90IHlldCByZW5kZXJlZCBzdWJ0cmVlLCB0aGVuXG4vLyB0aGlzIG1heSBhbHNvIHJldHVybiBhIFN1c3BlbnNlQ29tcG9uZW50IG9yIEhvc3RSb290IHRvIGluZGljYXRlIHRoYXQuXG4vLyBDb25jZXB0dWFsbHkgdGhlIEhvc3RSb290IGZpYmVyIGlzIGEgY2hpbGQgb2YgdGhlIENvbnRhaW5lciBub2RlLiBTbyBpZiB5b3Vcbi8vIHBhc3MgdGhlIENvbnRhaW5lciBub2RlIGFzIHRoZSB0YXJnZXROb2RlLCB5b3Ugd2lsbCBub3QgYWN0dWFsbHkgZ2V0IHRoZVxuLy8gSG9zdFJvb3QgYmFjay4gVG8gZ2V0IHRvIHRoZSBIb3N0Um9vdCwgeW91IG5lZWQgdG8gcGFzcyBhIGNoaWxkIG9mIGl0LlxuLy8gVGhlIHNhbWUgdGhpbmcgYXBwbGllcyB0byBTdXNwZW5zZSBib3VuZGFyaWVzLlxuXG5mdW5jdGlvbiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSh0YXJnZXROb2RlKSB7XG4gIHZhciB0YXJnZXRJbnN0ID0gdGFyZ2V0Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICBpZiAodGFyZ2V0SW5zdCkge1xuICAgIC8vIERvbid0IHJldHVybiBIb3N0Um9vdCBvciBTdXNwZW5zZUNvbXBvbmVudCBoZXJlLlxuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9IC8vIElmIHRoZSBkaXJlY3QgZXZlbnQgdGFyZ2V0IGlzbid0IGEgUmVhY3Qgb3duZWQgRE9NIG5vZGUsIHdlIG5lZWQgdG8gbG9va1xuICAvLyB0byBzZWUgaWYgb25lIG9mIGl0cyBwYXJlbnRzIGlzIGEgUmVhY3Qgb3duZWQgRE9NIG5vZGUuXG5cblxuICB2YXIgcGFyZW50Tm9kZSA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTtcblxuICB3aGlsZSAocGFyZW50Tm9kZSkge1xuICAgIC8vIFdlJ2xsIGNoZWNrIGlmIHRoaXMgaXMgYSBjb250YWluZXIgcm9vdCB0aGF0IGNvdWxkIGluY2x1ZGVcbiAgICAvLyBSZWFjdCBub2RlcyBpbiB0aGUgZnV0dXJlLiBXZSBuZWVkIHRvIGNoZWNrIHRoaXMgZmlyc3QgYmVjYXVzZVxuICAgIC8vIGlmIHdlJ3JlIGEgY2hpbGQgb2YgYSBkZWh5ZHJhdGVkIGNvbnRhaW5lciwgd2UgbmVlZCB0byBmaXJzdFxuICAgIC8vIGZpbmQgdGhhdCBpbm5lciBjb250YWluZXIgYmVmb3JlIG1vdmluZyBvbiB0byBmaW5kaW5nIHRoZSBwYXJlbnRcbiAgICAvLyBpbnN0YW5jZS4gTm90ZSB0aGF0IHdlIGRvbid0IGNoZWNrIHRoaXMgZmllbGQgb24gIHRoZSB0YXJnZXROb2RlXG4gICAgLy8gaXRzZWxmIGJlY2F1c2UgdGhlIGZpYmVycyBhcmUgY29uY2VwdHVhbGx5IGJldHdlZW4gdGhlIGNvbnRhaW5lclxuICAgIC8vIG5vZGUgYW5kIHRoZSBmaXJzdCBjaGlsZC4gSXQgaXNuJ3Qgc3Vycm91bmRpbmcgdGhlIGNvbnRhaW5lciBub2RlLlxuICAgIC8vIElmIGl0J3Mgbm90IGEgY29udGFpbmVyLCB3ZSBjaGVjayBpZiBpdCdzIGFuIGluc3RhbmNlLlxuICAgIHRhcmdldEluc3QgPSBwYXJlbnROb2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldIHx8IHBhcmVudE5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG5cbiAgICBpZiAodGFyZ2V0SW5zdCkge1xuICAgICAgLy8gU2luY2UgdGhpcyB3YXNuJ3QgdGhlIGRpcmVjdCB0YXJnZXQgb2YgdGhlIGV2ZW50LCB3ZSBtaWdodCBoYXZlXG4gICAgICAvLyBzdGVwcGVkIHBhc3QgZGVoeWRyYXRlZCBET00gbm9kZXMgdG8gZ2V0IGhlcmUuIEhvd2V2ZXIgdGhleSBjb3VsZFxuICAgICAgLy8gYWxzbyBoYXZlIGJlZW4gbm9uLVJlYWN0IG5vZGVzLiBXZSBuZWVkIHRvIGFuc3dlciB3aGljaCBvbmUuXG4gICAgICAvLyBJZiB3ZSB0aGUgaW5zdGFuY2UgZG9lc24ndCBoYXZlIGFueSBjaGlsZHJlbiwgdGhlbiB0aGVyZSBjYW4ndCBiZVxuICAgICAgLy8gYSBuZXN0ZWQgc3VzcGVuc2UgYm91bmRhcnkgd2l0aGluIGl0LiBTbyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBmYXN0XG4gICAgICAvLyBiYWlsb3V0LiBNb3N0IG9mIHRoZSB0aW1lLCB3aGVuIHBlb3BsZSBhZGQgbm9uLVJlYWN0IGNoaWxkcmVuIHRvXG4gICAgICAvLyB0aGUgdHJlZSwgaXQgaXMgdXNpbmcgYSByZWYgdG8gYSBjaGlsZC1sZXNzIERPTSBub2RlLlxuICAgICAgLy8gTm9ybWFsbHkgd2UnZCBvbmx5IG5lZWQgdG8gY2hlY2sgb25lIG9mIHRoZSBmaWJlcnMgYmVjYXVzZSBpZiBpdFxuICAgICAgLy8gaGFzIGV2ZXIgZ29uZSBmcm9tIGhhdmluZyBjaGlsZHJlbiB0byBkZWxldGluZyB0aGVtIG9yIHZpY2UgdmVyc2FcbiAgICAgIC8vIGl0IHdvdWxkIGhhdmUgZGVsZXRlZCB0aGUgZGVoeWRyYXRlZCBib3VuZGFyeSBuZXN0ZWQgaW5zaWRlIGFscmVhZHkuXG4gICAgICAvLyBIb3dldmVyLCBzaW5jZSB0aGUgSG9zdFJvb3Qgc3RhcnRzIG91dCB3aXRoIGFuIGFsdGVybmF0ZSBpdCBtaWdodFxuICAgICAgLy8gaGF2ZSBvbmUgb24gdGhlIGFsdGVybmF0ZSBzbyB3ZSBuZWVkIHRvIGNoZWNrIGluIGNhc2UgdGhpcyB3YXMgYVxuICAgICAgLy8gcm9vdC5cbiAgICAgIHZhciBhbHRlcm5hdGUgPSB0YXJnZXRJbnN0LmFsdGVybmF0ZTtcblxuICAgICAgaWYgKHRhcmdldEluc3QuY2hpbGQgIT09IG51bGwgfHwgYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBOZXh0IHdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGUgbm9kZSB0aGF0IHNraXBwZWQgcGFzdCBpc1xuICAgICAgICAvLyBuZXN0ZWQgd2l0aGluIGEgZGVoeWRyYXRlZCBib3VuZGFyeSBhbmQgaWYgc28sIHdoaWNoIG9uZS5cbiAgICAgICAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHRhcmdldE5vZGUpO1xuXG4gICAgICAgIHdoaWxlIChzdXNwZW5zZUluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgZm91bmQgYSBzdXNwZW5zZSBpbnN0YW5jZS4gVGhhdCBtZWFucyB0aGF0IHdlIGhhdmVuJ3RcbiAgICAgICAgICAvLyBoeWRyYXRlZCBpdCB5ZXQuIEV2ZW4gdGhvdWdoIHdlIGxlYXZlIHRoZSBjb21tZW50cyBpbiB0aGVcbiAgICAgICAgICAvLyBET00gYWZ0ZXIgaHlkcmF0aW5nLCBhbmQgdGhlcmUgYXJlIGJvdW5kYXJpZXMgaW4gdGhlIERPTVxuICAgICAgICAgIC8vIHRoYXQgY291bGQgYWxyZWFkeSBiZSBoeWRyYXRlZCwgd2Ugd291bGRuJ3QgaGF2ZSBmb3VuZCB0aGVtXG4gICAgICAgICAgLy8gdGhyb3VnaCB0aGlzIHBhc3Mgc2luY2UgaWYgdGhlIHRhcmdldCBpcyBoeWRyYXRlZCBpdCB3b3VsZFxuICAgICAgICAgIC8vIGhhdmUgaGFkIGFuIGludGVybmFsSW5zdGFuY2VLZXkgb24gaXQuXG4gICAgICAgICAgLy8gTGV0J3MgZ2V0IHRoZSBmaWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIFN1c3BlbnNlQ29tcG9uZW50XG4gICAgICAgICAgLy8gYXMgdGhlIGRlZXBlc3QgaW5zdGFuY2UuXG4gICAgICAgICAgdmFyIHRhcmdldFN1c3BlbnNlSW5zdCA9IHN1c3BlbnNlSW5zdGFuY2VbaW50ZXJuYWxJbnN0YW5jZUtleV07XG5cbiAgICAgICAgICBpZiAodGFyZ2V0U3VzcGVuc2VJbnN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0U3VzcGVuc2VJbnN0O1xuICAgICAgICAgIH0gLy8gSWYgd2UgZG9uJ3QgZmluZCBhIEZpYmVyIG9uIHRoZSBjb21tZW50LCBpdCBtaWdodCBiZSBiZWNhdXNlXG4gICAgICAgICAgLy8gd2UgaGF2ZW4ndCBnb3R0ZW4gdG8gaHlkcmF0ZSBpdCB5ZXQuIFRoZXJlIG1pZ2h0IHN0aWxsIGJlIGFcbiAgICAgICAgICAvLyBwYXJlbnQgYm91bmRhcnkgdGhhdCBoYXNuJ3QgYWJvdmUgdGhpcyBvbmUgc28gd2UgbmVlZCB0byBmaW5kXG4gICAgICAgICAgLy8gdGhlIG91dGVyIG1vc3QgdGhhdCBpcyBrbm93bi5cblxuXG4gICAgICAgICAgc3VzcGVuc2VJbnN0YW5jZSA9IGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7IC8vIElmIHdlIGRvbid0IGZpbmQgb25lLCB0aGVuIHRoYXQgc2hvdWxkIG1lYW4gdGhhdCB0aGUgcGFyZW50XG4gICAgICAgICAgLy8gaG9zdCBjb21wb25lbnQgYWxzbyBoYXNuJ3QgaHlkcmF0ZWQgeWV0LiBXZSBjYW4gcmV0dXJuIGl0XG4gICAgICAgICAgLy8gYmVsb3cgc2luY2UgaXQgd2lsbCBiYWlsIG91dCBvbiB0aGUgaXNNb3VudGVkIGNoZWNrIGxhdGVyLlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICAgIH1cblxuICAgIHRhcmdldE5vZGUgPSBwYXJlbnROb2RlO1xuICAgIHBhcmVudE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogR2l2ZW4gYSBET00gbm9kZSwgcmV0dXJuIHRoZSBSZWFjdERPTUNvbXBvbmVudCBvciBSZWFjdERPTVRleHRDb21wb25lbnRcbiAqIGluc3RhbmNlLCBvciBudWxsIGlmIHRoZSBub2RlIHdhcyBub3QgcmVuZGVyZWQgYnkgdGhpcyBSZWFjdC5cbiAqL1xuXG5mdW5jdGlvbiBnZXRJbnN0YW5jZUZyb21Ob2RlKG5vZGUpIHtcbiAgdmFyIGluc3QgPSBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldIHx8IG5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV07XG5cbiAgaWYgKGluc3QpIHtcbiAgICBpZiAoaW5zdC50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RUZXh0IHx8IGluc3QudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgIHJldHVybiBpbnN0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogR2l2ZW4gYSBSZWFjdERPTUNvbXBvbmVudCBvciBSZWFjdERPTVRleHRDb21wb25lbnQsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZ1xuICogRE9NIG5vZGUuXG4gKi9cblxuZnVuY3Rpb24gZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KSB7XG4gIGlmIChpbnN0LnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAvLyBJbiBGaWJlciB0aGlzLCBpcyBqdXN0IHRoZSBzdGF0ZSBub2RlIHJpZ2h0IG5vdy4gV2UgYXNzdW1lIGl0IHdpbGwgYmVcbiAgICAvLyBhIGhvc3QgY29tcG9uZW50IG9yIGhvc3QgdGV4dC5cbiAgICByZXR1cm4gaW5zdC5zdGF0ZU5vZGU7XG4gIH0gLy8gV2l0aG91dCB0aGlzIGZpcnN0IGludmFyaWFudCwgcGFzc2luZyBhIG5vbi1ET00tY29tcG9uZW50IHRyaWdnZXJzIHRoZSBuZXh0XG4gIC8vIGludmFyaWFudCBmb3IgYSBtaXNzaW5nIHBhcmVudCwgd2hpY2ggaXMgc3VwZXIgY29uZnVzaW5nLlxuXG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcImdldE5vZGVGcm9tSW5zdGFuY2U6IEludmFsaWQgYXJndW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZVtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xufVxuZnVuY3Rpb24gdXBkYXRlRmliZXJQcm9wcyhub2RlLCBwcm9wcykge1xuICBub2RlW2ludGVybmFsUHJvcHNLZXldID0gcHJvcHM7XG59XG5mdW5jdGlvbiBnZXRFdmVudExpc3RlbmVyU2V0KG5vZGUpIHtcbiAgdmFyIGVsZW1lbnRMaXN0ZW5lclNldCA9IG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XTtcblxuICBpZiAoZWxlbWVudExpc3RlbmVyU2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbGVtZW50TGlzdGVuZXJTZXQgPSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV0gPSBuZXcgU2V0KCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudExpc3RlbmVyU2V0O1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgdmFsdWVTdGFjayA9IFtdO1xudmFyIGZpYmVyU3RhY2s7XG5cbntcbiAgZmliZXJTdGFjayA9IFtdO1xufVxuXG52YXIgaW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY3JlYXRlQ3Vyc29yKGRlZmF1bHRWYWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnQ6IGRlZmF1bHRWYWx1ZVxuICB9O1xufVxuXG5mdW5jdGlvbiBwb3AoY3Vyc29yLCBmaWJlcikge1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAge1xuICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgcG9wLicpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICBpZiAoZmliZXIgIT09IGZpYmVyU3RhY2tbaW5kZXhdKSB7XG4gICAgICBlcnJvcignVW5leHBlY3RlZCBGaWJlciBwb3BwZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZVN0YWNrW2luZGV4XTtcbiAgdmFsdWVTdGFja1tpbmRleF0gPSBudWxsO1xuXG4gIHtcbiAgICBmaWJlclN0YWNrW2luZGV4XSA9IG51bGw7XG4gIH1cblxuICBpbmRleC0tO1xufVxuXG5mdW5jdGlvbiBwdXNoKGN1cnNvciwgdmFsdWUsIGZpYmVyKSB7XG4gIGluZGV4Kys7XG4gIHZhbHVlU3RhY2tbaW5kZXhdID0gY3Vyc29yLmN1cnJlbnQ7XG5cbiAge1xuICAgIGZpYmVyU3RhY2tbaW5kZXhdID0gZmliZXI7XG4gIH1cblxuICBjdXJzb3IuY3VycmVudCA9IHZhbHVlO1xufVxuXG52YXIgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0O1xuXG57XG4gIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dCA9IHt9O1xufVxuXG52YXIgZW1wdHlDb250ZXh0T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eUNvbnRleHRPYmplY3QpO1xufSAvLyBBIGN1cnNvciB0byB0aGUgY3VycmVudCBtZXJnZWQgY29udGV4dCBvYmplY3Qgb24gdGhlIHN0YWNrLlxuXG5cbnZhciBjb250ZXh0U3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoZW1wdHlDb250ZXh0T2JqZWN0KTsgLy8gQSBjdXJzb3IgdG8gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udGV4dCBoYXMgY2hhbmdlZC5cblxudmFyIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoZmFsc2UpOyAvLyBLZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBjb250ZXh0IG9iamVjdCB0aGF0IHdhcyBvbiB0aGUgc3RhY2suXG4vLyBXZSB1c2UgdGhpcyB0byBnZXQgYWNjZXNzIHRvIHRoZSBwYXJlbnQgY29udGV4dCBhZnRlciB3ZSBoYXZlIGFscmVhZHlcbi8vIHB1c2hlZCB0aGUgbmV4dCBjb250ZXh0IHByb3ZpZGVyLCBhbmQgbm93IG5lZWQgdG8gbWVyZ2UgdGhlaXIgY29udGV4dHMuXG5cbnZhciBwcmV2aW91c0NvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbmZ1bmN0aW9uIGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBkaWRQdXNoT3duQ29udGV4dElmUHJvdmlkZXIpIHtcbiAge1xuICAgIGlmIChkaWRQdXNoT3duQ29udGV4dElmUHJvdmlkZXIgJiYgaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgLy8gSWYgdGhlIGZpYmVyIGlzIGEgY29udGV4dCBwcm92aWRlciBpdHNlbGYsIHdoZW4gd2UgcmVhZCBpdHMgY29udGV4dFxuICAgICAgLy8gd2UgbWF5IGhhdmUgYWxyZWFkeSBwdXNoZWQgaXRzIG93biBjaGlsZCBjb250ZXh0IG9uIHRoZSBzdGFjay4gQSBjb250ZXh0XG4gICAgICAvLyBwcm92aWRlciBzaG91bGQgbm90IFwic2VlXCIgaXRzIG93biBjaGlsZCBjb250ZXh0LiBUaGVyZWZvcmUgd2UgcmVhZCB0aGVcbiAgICAgIC8vIHByZXZpb3VzIChwYXJlbnQpIGNvbnRleHQgaW5zdGVhZCBmb3IgYSBjb250ZXh0IHByb3ZpZGVyLlxuICAgICAgcmV0dXJuIHByZXZpb3VzQ29udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIG1hc2tlZENvbnRleHQpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID0gdW5tYXNrZWRDb250ZXh0O1xuICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0ID0gbWFza2VkQ29udGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpIHtcbiAge1xuICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICB2YXIgY29udGV4dFR5cGVzID0gdHlwZS5jb250ZXh0VHlwZXM7XG5cbiAgICBpZiAoIWNvbnRleHRUeXBlcykge1xuICAgICAgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICB9IC8vIEF2b2lkIHJlY3JlYXRpbmcgbWFza2VkIGNvbnRleHQgdW5sZXNzIHVubWFza2VkIGNvbnRleHQgaGFzIGNoYW5nZWQuXG4gICAgLy8gRmFpbGluZyB0byBkbyB0aGlzIHdpbGwgcmVzdWx0IGluIHVubmVjZXNzYXJ5IGNhbGxzIHRvIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuXG4gICAgLy8gVGhpcyBtYXkgdHJpZ2dlciBpbmZpbml0ZSBsb29wcyBpZiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGNhbGxzIHNldFN0YXRlLlxuXG5cbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCA9PT0gdW5tYXNrZWRDb250ZXh0KSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiBjb250ZXh0VHlwZXMpIHtcbiAgICAgIGNvbnRleHRba2V5XSA9IHVubWFza2VkQ29udGV4dFtrZXldO1xuICAgIH1cblxuICAgIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG4gICAgICBjaGVja1Byb3BUeXBlcyhjb250ZXh0VHlwZXMsIGNvbnRleHQsICdjb250ZXh0JywgbmFtZSk7XG4gICAgfSAvLyBDYWNoZSB1bm1hc2tlZCBjb250ZXh0IHNvIHdlIGNhbiBhdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyBuZWNlc3NhcnkuXG4gICAgLy8gQ29udGV4dCBpcyBjcmVhdGVkIGJlZm9yZSB0aGUgY2xhc3MgY29tcG9uZW50IGlzIGluc3RhbnRpYXRlZCBzbyBjaGVjayBmb3IgaW5zdGFuY2UuXG5cblxuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhc0NvbnRleHRDaGFuZ2VkKCkge1xuICB7XG4gICAgcmV0dXJuIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcih0eXBlKSB7XG4gIHtcbiAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSB0eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuICAgIHJldHVybiBjaGlsZENvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjaGlsZENvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcENvbnRleHQoZmliZXIpIHtcbiAge1xuICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcFRvcExldmVsQ29udGV4dE9iamVjdChmaWJlcikge1xuICB7XG4gICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVzaFRvcExldmVsQ29udGV4dE9iamVjdChmaWJlciwgY29udGV4dCwgZGlkQ2hhbmdlKSB7XG4gIHtcbiAgICBpZiAoIShjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudCA9PT0gZW1wdHlDb250ZXh0T2JqZWN0KSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJVbmV4cGVjdGVkIGNvbnRleHQgZm91bmQgb24gc3RhY2suIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgY29udGV4dCwgZmliZXIpO1xuICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlLCBmaWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0NoaWxkQ29udGV4dChmaWJlciwgdHlwZSwgcGFyZW50Q29udGV4dCkge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IHR5cGUuY2hpbGRDb250ZXh0VHlwZXM7IC8vIFRPRE8gKGJ2YXVnaG4pIFJlcGxhY2UgdGhpcyBiZWhhdmlvciB3aXRoIGFuIGludmFyaWFudCgpIGluIHRoZSBmdXR1cmUuXG4gICAgLy8gSXQgaGFzIG9ubHkgYmVlbiBhZGRlZCBpbiBGaWJlciB0byBtYXRjaCB0aGUgKHVuaW50ZW50aW9uYWwpIGJlaGF2aW9yIGluIFN0YWNrLlxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJztcblxuICAgICAgICBpZiAoIXdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dFtjb21wb25lbnROYW1lXSkge1xuICAgICAgICAgIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dFtjb21wb25lbnROYW1lXSA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignJXMuY2hpbGRDb250ZXh0VHlwZXMgaXMgc3BlY2lmaWVkIGJ1dCB0aGVyZSBpcyBubyBnZXRDaGlsZENvbnRleHQoKSBtZXRob2QgJyArICdvbiB0aGUgaW5zdGFuY2UuIFlvdSBjYW4gZWl0aGVyIGRlZmluZSBnZXRDaGlsZENvbnRleHQoKSBvbiAlcyBvciByZW1vdmUgJyArICdjaGlsZENvbnRleHRUeXBlcyBmcm9tIGl0LicsIGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJlbnRDb250ZXh0O1xuICAgIH1cblxuICAgIHZhciBjaGlsZENvbnRleHQgPSBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQoKTtcblxuICAgIGZvciAodmFyIGNvbnRleHRLZXkgaW4gY2hpbGRDb250ZXh0KSB7XG4gICAgICBpZiAoIShjb250ZXh0S2V5IGluIGNoaWxkQ29udGV4dFR5cGVzKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIChnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJykgKyBcIi5nZXRDaGlsZENvbnRleHQoKToga2V5IFxcXCJcIiArIGNvbnRleHRLZXkgKyBcIlxcXCIgaXMgbm90IGRlZmluZWQgaW4gY2hpbGRDb250ZXh0VHlwZXMuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG4gICAgICBjaGVja1Byb3BUeXBlcyhjaGlsZENvbnRleHRUeXBlcywgY2hpbGRDb250ZXh0LCAnY2hpbGQgY29udGV4dCcsIG5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBfYXNzaWduKHt9LCBwYXJlbnRDb250ZXh0LCBjaGlsZENvbnRleHQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTsgLy8gV2UgcHVzaCB0aGUgY29udGV4dCBhcyBlYXJseSBhcyBwb3NzaWJsZSB0byBlbnN1cmUgc3RhY2sgaW50ZWdyaXR5LlxuICAgIC8vIElmIHRoZSBpbnN0YW5jZSBkb2VzIG5vdCBleGlzdCB5ZXQsIHdlIHdpbGwgcHVzaCBudWxsIGF0IGZpcnN0LFxuICAgIC8vIGFuZCByZXBsYWNlIGl0IG9uIHRoZSBzdGFjayBsYXRlciB3aGVuIGludmFsaWRhdGluZyB0aGUgY29udGV4dC5cblxuICAgIHZhciBtZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCA9IGluc3RhbmNlICYmIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0IHx8IGVtcHR5Q29udGV4dE9iamVjdDsgLy8gUmVtZW1iZXIgdGhlIHBhcmVudCBjb250ZXh0IHNvIHdlIGNhbiBtZXJnZSB3aXRoIGl0IGxhdGVyLlxuICAgIC8vIEluaGVyaXQgdGhlIHBhcmVudCdzIGRpZC1wZXJmb3JtLXdvcmsgdmFsdWUgdG8gYXZvaWQgaW5hZHZlcnRlbnRseSBibG9ja2luZyB1cGRhdGVzLlxuXG4gICAgcHJldmlvdXNDb250ZXh0ID0gY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCB0eXBlLCBkaWRDaGFuZ2UpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gaGF2ZSBhbiBpbnN0YW5jZSBieSB0aGlzIHBvaW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpZENoYW5nZSkge1xuICAgICAgLy8gTWVyZ2UgcGFyZW50IGFuZCBvd24gY29udGV4dC5cbiAgICAgIC8vIFNraXAgdGhpcyBpZiB3ZSdyZSBub3QgdXBkYXRpbmcgZHVlIHRvIHNDVS5cbiAgICAgIC8vIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJpbHkgcmVjb21wdXRpbmcgbWVtb2l6ZWQgdmFsdWVzLlxuICAgICAgdmFyIG1lcmdlZENvbnRleHQgPSBwcm9jZXNzQ2hpbGRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB0eXBlLCBwcmV2aW91c0NvbnRleHQpO1xuICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgPSBtZXJnZWRDb250ZXh0OyAvLyBSZXBsYWNlIHRoZSBvbGQgKG9yIGVtcHR5KSBjb250ZXh0IHdpdGggdGhlIG5ldyBvbmUuXG4gICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gdW53aW5kIHRoZSBjb250ZXh0IGluIHRoZSByZXZlcnNlIG9yZGVyLlxuXG4gICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpOyAvLyBOb3cgcHVzaCB0aGUgbmV3IGNvbnRleHQgYW5kIG1hcmsgdGhhdCBpdCBoYXMgY2hhbmdlZC5cblxuICAgICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG1lcmdlZENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ3VycmVudFVubWFza2VkQ29udGV4dChmaWJlcikge1xuICB7XG4gICAgLy8gQ3VycmVudGx5IHRoaXMgaXMgb25seSB1c2VkIHdpdGggcmVuZGVyU3VidHJlZUludG9Db250YWluZXI7IG5vdCBzdXJlIGlmIGl0XG4gICAgLy8gbWFrZXMgc2Vuc2UgZWxzZXdoZXJlXG4gICAgaWYgKCEoaXNGaWJlck1vdW50ZWQoZmliZXIpICYmIGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHN1YnRyZWUgcGFyZW50IHRvIGJlIGEgbW91bnRlZCBjbGFzcyBjb21wb25lbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gICAgZG8ge1xuICAgICAgc3dpdGNoIChub2RlLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZS5jb250ZXh0O1xuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIENvbXBvbmVudCA9IG5vZGUudHlwZTtcblxuICAgICAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChub2RlICE9PSBudWxsKTtcblxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiRm91bmQgdW5leHBlY3RlZCBkZXRhY2hlZCBzdWJ0cmVlIHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgTGVnYWN5Um9vdCA9IDA7XG52YXIgQmxvY2tpbmdSb290ID0gMTtcbnZhciBDb25jdXJyZW50Um9vdCA9IDI7XG5cbnZhciByZW5kZXJlcklEID0gbnVsbDtcbnZhciBpbmplY3RlZEhvb2sgPSBudWxsO1xudmFyIGhhc0xvZ2dlZEVycm9yID0gZmFsc2U7XG52YXIgaXNEZXZUb29sc1ByZXNlbnQgPSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGluamVjdEludGVybmFscyhpbnRlcm5hbHMpIHtcbiAgaWYgKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gTm8gRGV2VG9vbHNcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgaG9vayA9IF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuICBpZiAoaG9vay5pc0Rpc2FibGVkKSB7XG4gICAgLy8gVGhpcyBpc24ndCBhIHJlYWwgcHJvcGVydHkgb24gdGhlIGhvb2ssIGJ1dCBpdCBjYW4gYmUgc2V0IHRvIG9wdCBvdXRcbiAgICAvLyBvZiBEZXZUb29scyBpbnRlZ3JhdGlvbiBhbmQgYXNzb2NpYXRlZCB3YXJuaW5ncyBhbmQgbG9ncy5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzM4NzdcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghaG9vay5zdXBwb3J0c0ZpYmVyKSB7XG4gICAge1xuICAgICAgZXJyb3IoJ1RoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBSZWFjdCBEZXZUb29scyBpcyB0b28gb2xkIGFuZCB3aWxsIG5vdCB3b3JrICcgKyAnd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFJlYWN0LiBQbGVhc2UgdXBkYXRlIFJlYWN0IERldlRvb2xzLiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1kZXZ0b29scycpO1xuICAgIH0gLy8gRGV2VG9vbHMgZXhpc3RzLCBldmVuIHRob3VnaCBpdCBkb2Vzbid0IHN1cHBvcnQgRmliZXIuXG5cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZW5kZXJlcklEID0gaG9vay5pbmplY3QoaW50ZXJuYWxzKTsgLy8gV2UgaGF2ZSBzdWNjZXNzZnVsbHkgaW5qZWN0ZWQsIHNvIG5vdyBpdCBpcyBzYWZlIHRvIHNldCB1cCBob29rcy5cblxuICAgIGluamVjdGVkSG9vayA9IGhvb2s7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIENhdGNoIGFsbCBlcnJvcnMgYmVjYXVzZSBpdCBpcyB1bnNhZmUgdG8gdGhyb3cgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuICAgIHtcbiAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzLicsIGVycik7XG4gICAgfVxuICB9IC8vIERldlRvb2xzIGV4aXN0c1xuXG5cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBvblNjaGVkdWxlUm9vdChyb290LCBjaGlsZHJlbikge1xuICB7XG4gICAgaWYgKGluamVjdGVkSG9vayAmJiB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uU2NoZWR1bGVGaWJlclJvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGluamVjdGVkSG9vay5vblNjaGVkdWxlRmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QsIGNoaWxkcmVuKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoICFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gb25Db21taXRSb290KHJvb3QsIHByaW9yaXR5TGV2ZWwpIHtcbiAgaWYgKGluamVjdGVkSG9vayAmJiB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBkaWRFcnJvciA9IChyb290LmN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gRGlkQ2FwdHVyZTtcblxuICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QsIHByaW9yaXR5TGV2ZWwsIGRpZEVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCB1bmRlZmluZWQsIGRpZEVycm9yKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gb25Db21taXRVbm1vdW50KGZpYmVyKSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQocmVuZGVyZXJJRCwgZmliZXIpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAge1xuICAgICAgICBpZiAoIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBTY2hlZHVsZXJfcnVuV2l0aFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayA9IFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLFxuICAgIFNjaGVkdWxlcl9jYW5jZWxDYWxsYmFjayA9IFNjaGVkdWxlci51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayxcbiAgICBTY2hlZHVsZXJfc2hvdWxkWWllbGQgPSBTY2hlZHVsZXIudW5zdGFibGVfc2hvdWxkWWllbGQsXG4gICAgU2NoZWR1bGVyX3JlcXVlc3RQYWludCA9IFNjaGVkdWxlci51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsXG4gICAgU2NoZWR1bGVyX25vdyQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdyxcbiAgICBTY2hlZHVsZXJfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSBTY2hlZHVsZXIudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsXG4gICAgU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9Vc2VyQmxvY2tpbmdQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfTm9ybWFsUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX0xvd1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0xvd1ByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9JZGxlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSWRsZVByaW9yaXR5O1xuXG57XG4gIC8vIFByb3ZpZGUgZXhwbGljaXQgZXJyb3IgbWVzc2FnZSB3aGVuIHByb2R1Y3Rpb24rcHJvZmlsaW5nIGJ1bmRsZSBvZiBlLmcuXG4gIC8vIHJlYWN0LWRvbSBpcyB1c2VkIHdpdGggcHJvZHVjdGlvbiAobm9uLXByb2ZpbGluZykgYnVuZGxlIG9mXG4gIC8vIHNjaGVkdWxlci90cmFjaW5nXG4gIGlmICghKHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYgIT0gbnVsbCAmJiB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIHJ1biB0aGUgcHJvZmlsaW5nIHZlcnNpb24gb2YgYSByZW5kZXJlciAoZm9yIGV4YW1wbGUsIGByZWFjdC1kb20vcHJvZmlsaW5nYCkgd2l0aG91dCBhbHNvIHJlcGxhY2luZyB0aGUgYHNjaGVkdWxlci90cmFjaW5nYCBtb2R1bGUgd2l0aCBgc2NoZWR1bGVyL3RyYWNpbmctcHJvZmlsaW5nYC4gWW91ciBidW5kbGVyIG1pZ2h0IGhhdmUgYSBzZXR0aW5nIGZvciBhbGlhc2luZyBib3RoIG1vZHVsZXMuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Byb2ZpbGluZ1wiICk7XG4gICAgfVxuICB9XG59XG5cbnZhciBmYWtlQ2FsbGJhY2tOb2RlID0ge307IC8vIEV4Y2VwdCBmb3IgTm9Qcmlvcml0eSwgdGhlc2UgY29ycmVzcG9uZCB0byBTY2hlZHVsZXIgcHJpb3JpdGllcy4gV2UgdXNlXG4vLyBhc2NlbmRpbmcgbnVtYmVycyBzbyB3ZSBjYW4gY29tcGFyZSB0aGVtIGxpa2UgbnVtYmVycy4gVGhleSBzdGFydCBhdCA5MCB0b1xuLy8gYXZvaWQgY2xhc2hpbmcgd2l0aCBTY2hlZHVsZXIncyBwcmlvcml0aWVzLlxuXG52YXIgSW1tZWRpYXRlUHJpb3JpdHkkMSA9IDk5O1xudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgPSA5ODtcbnZhciBOb3JtYWxQcmlvcml0eSQxID0gOTc7XG52YXIgTG93UHJpb3JpdHkkMSA9IDk2O1xudmFyIElkbGVQcmlvcml0eSQxID0gOTU7IC8vIE5vUHJpb3JpdHkgaXMgdGhlIGFic2VuY2Ugb2YgcHJpb3JpdHkuIEFsc28gUmVhY3Qtb25seS5cblxudmFyIE5vUHJpb3JpdHkkMSA9IDkwO1xudmFyIHNob3VsZFlpZWxkID0gU2NoZWR1bGVyX3Nob3VsZFlpZWxkO1xudmFyIHJlcXVlc3RQYWludCA9IC8vIEZhbGwgYmFjayBncmFjZWZ1bGx5IGlmIHdlJ3JlIHJ1bm5pbmcgYW4gb2xkZXIgdmVyc2lvbiBvZiBTY2hlZHVsZXIuXG5TY2hlZHVsZXJfcmVxdWVzdFBhaW50ICE9PSB1bmRlZmluZWQgPyBTY2hlZHVsZXJfcmVxdWVzdFBhaW50IDogZnVuY3Rpb24gKCkge307XG52YXIgc3luY1F1ZXVlID0gbnVsbDtcbnZhciBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IG51bGw7XG52YXIgaXNGbHVzaGluZ1N5bmNRdWV1ZSA9IGZhbHNlO1xudmFyIGluaXRpYWxUaW1lTXMkMSA9IFNjaGVkdWxlcl9ub3ckMSgpOyAvLyBJZiB0aGUgaW5pdGlhbCB0aW1lc3RhbXAgaXMgcmVhc29uYWJseSBzbWFsbCwgdXNlIFNjaGVkdWxlcidzIGBub3dgIGRpcmVjdGx5LlxuLy8gVGhpcyB3aWxsIGJlIHRoZSBjYXNlIGZvciBtb2Rlcm4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGBwZXJmb3JtYW5jZS5ub3dgLiBJblxuLy8gb2xkZXIgYnJvd3NlcnMsIFNjaGVkdWxlciBmYWxscyBiYWNrIHRvIGBEYXRlLm5vd2AsIHdoaWNoIHJldHVybnMgYSBVbml4XG4vLyB0aW1lc3RhbXAuIEluIHRoYXQgY2FzZSwgc3VidHJhY3QgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiB0aW1lIHRvIHNpbXVsYXRlXG4vLyB0aGUgYmVoYXZpb3Igb2YgcGVyZm9ybWFuY2Uubm93IGFuZCBrZWVwIG91ciB0aW1lcyBzbWFsbCBlbm91Z2ggdG8gZml0XG4vLyB3aXRoaW4gMzIgYml0cy5cbi8vIFRPRE86IENvbnNpZGVyIGxpZnRpbmcgdGhpcyBpbnRvIFNjaGVkdWxlci5cblxudmFyIG5vdyA9IGluaXRpYWxUaW1lTXMkMSA8IDEwMDAwID8gU2NoZWR1bGVyX25vdyQxIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gU2NoZWR1bGVyX25vdyQxKCkgLSBpbml0aWFsVGltZU1zJDE7XG59O1xuZnVuY3Rpb24gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSB7XG4gIHN3aXRjaCAoU2NoZWR1bGVyX2dldEN1cnJlbnRQcmlvcml0eUxldmVsKCkpIHtcbiAgICBjYXNlIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJbW1lZGlhdGVQcmlvcml0eSQxO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICByZXR1cm4gVXNlckJsb2NraW5nUHJpb3JpdHkkMjtcblxuICAgIGNhc2UgU2NoZWR1bGVyX05vcm1hbFByaW9yaXR5OlxuICAgICAgcmV0dXJuIE5vcm1hbFByaW9yaXR5JDE7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9Mb3dQcmlvcml0eTpcbiAgICAgIHJldHVybiBMb3dQcmlvcml0eSQxO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfSWRsZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIElkbGVQcmlvcml0eSQxO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gcHJpb3JpdHkgbGV2ZWwuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKSB7XG4gIHN3aXRjaCAocmVhY3RQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eTtcblxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHkkMjpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfVXNlckJsb2NraW5nUHJpb3JpdHk7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX05vcm1hbFByaW9yaXR5O1xuXG4gICAgY2FzZSBMb3dQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9Mb3dQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX0lkbGVQcmlvcml0eTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHByaW9yaXR5IGxldmVsLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5cbmZ1bmN0aW9uIHJ1bldpdGhQcmlvcml0eSQxKHJlYWN0UHJpb3JpdHlMZXZlbCwgZm4pIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSByZWFjdFByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShyZWFjdFByaW9yaXR5TGV2ZWwpO1xuICByZXR1cm4gU2NoZWR1bGVyX3J1bldpdGhQcmlvcml0eShwcmlvcml0eUxldmVsLCBmbik7XG59XG5mdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrKHJlYWN0UHJpb3JpdHlMZXZlbCwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSByZWFjdFByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShyZWFjdFByaW9yaXR5TGV2ZWwpO1xuICByZXR1cm4gU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgY2FsbGJhY2ssIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gc2NoZWR1bGVTeW5jQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgLy8gUHVzaCB0aGlzIGNhbGxiYWNrIGludG8gYW4gaW50ZXJuYWwgcXVldWUuIFdlJ2xsIGZsdXNoIHRoZXNlIGVpdGhlciBpblxuICAvLyB0aGUgbmV4dCB0aWNrLCBvciBlYXJsaWVyIGlmIHNvbWV0aGluZyBjYWxscyBgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZWAuXG4gIGlmIChzeW5jUXVldWUgPT09IG51bGwpIHtcbiAgICBzeW5jUXVldWUgPSBbY2FsbGJhY2tdOyAvLyBGbHVzaCB0aGUgcXVldWUgaW4gdGhlIG5leHQgdGljaywgYXQgdGhlIGVhcmxpZXN0LlxuXG4gICAgaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgPSBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayhTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHksIGZsdXNoU3luY0NhbGxiYWNrUXVldWVJbXBsKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBQdXNoIG9udG8gZXhpc3RpbmcgcXVldWUuIERvbid0IG5lZWQgdG8gc2NoZWR1bGUgYSBjYWxsYmFjayBiZWNhdXNlXG4gICAgLy8gd2UgYWxyZWFkeSBzY2hlZHVsZWQgb25lIHdoZW4gd2UgY3JlYXRlZCB0aGUgcXVldWUuXG4gICAgc3luY1F1ZXVlLnB1c2goY2FsbGJhY2spO1xuICB9XG5cbiAgcmV0dXJuIGZha2VDYWxsYmFja05vZGU7XG59XG5mdW5jdGlvbiBjYW5jZWxDYWxsYmFjayhjYWxsYmFja05vZGUpIHtcbiAgaWYgKGNhbGxiYWNrTm9kZSAhPT0gZmFrZUNhbGxiYWNrTm9kZSkge1xuICAgIFNjaGVkdWxlcl9jYW5jZWxDYWxsYmFjayhjYWxsYmFja05vZGUpO1xuICB9XG59XG5mdW5jdGlvbiBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCkge1xuICBpZiAoaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgIT09IG51bGwpIHtcbiAgICB2YXIgbm9kZSA9IGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlO1xuICAgIGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2sobm9kZSk7XG4gIH1cblxuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlSW1wbCgpO1xufVxuXG5mdW5jdGlvbiBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlSW1wbCgpIHtcbiAgaWYgKCFpc0ZsdXNoaW5nU3luY1F1ZXVlICYmIHN5bmNRdWV1ZSAhPT0gbnVsbCkge1xuICAgIC8vIFByZXZlbnQgcmUtZW50cmFuY3kuXG4gICAgaXNGbHVzaGluZ1N5bmNRdWV1ZSA9IHRydWU7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIF9pc1N5bmMyID0gdHJ1ZTtcbiAgICAgICAgdmFyIF9xdWV1ZSA9IHN5bmNRdWV1ZTtcbiAgICAgICAgcnVuV2l0aFByaW9yaXR5JDEoSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZvciAoOyBpIDwgX3F1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBfcXVldWVbaV07XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayhfaXNTeW5jMik7XG4gICAgICAgICAgICB9IHdoaWxlIChjYWxsYmFjayAhPT0gbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3luY1F1ZXVlID0gbnVsbDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIHNvbWV0aGluZyB0aHJvd3MsIGxlYXZlIHRoZSByZW1haW5pbmcgY2FsbGJhY2tzIG9uIHRoZSBxdWV1ZS5cbiAgICAgICAgaWYgKHN5bmNRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN5bmNRdWV1ZSA9IHN5bmNRdWV1ZS5zbGljZShpICsgMSk7XG4gICAgICAgIH0gLy8gUmVzdW1lIGZsdXNoaW5nIGluIHRoZSBuZXh0IHRpY2tcblxuXG4gICAgICAgIFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eSwgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaXNGbHVzaGluZ1N5bmNRdWV1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBUT0RPOiB0aGlzIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBnZXRzIGltcG9ydGVkIGR1cmluZyBidWlsZC5cbnZhciBSZWFjdFZlcnNpb24gPSAnMTcuMC4yJztcblxudmFyIE5vTW9kZSA9IDA7XG52YXIgU3RyaWN0TW9kZSA9IDE7IC8vIFRPRE86IFJlbW92ZSBCbG9ja2luZ01vZGUgYW5kIENvbmN1cnJlbnRNb2RlIGJ5IHJlYWRpbmcgZnJvbSB0aGUgcm9vdFxuLy8gdGFnIGluc3RlYWRcblxudmFyIEJsb2NraW5nTW9kZSA9IDI7XG52YXIgQ29uY3VycmVudE1vZGUgPSA0O1xudmFyIFByb2ZpbGVNb2RlID0gODtcbnZhciBEZWJ1Z1RyYWNpbmdNb2RlID0gMTY7XG5cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO1xudmFyIE5vVHJhbnNpdGlvbiA9IDA7XG5mdW5jdGlvbiByZXF1ZXN0Q3VycmVudFRyYW5zaXRpb24oKSB7XG4gIHJldHVybiBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xufVxuXG52YXIgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MgPSB7XG4gIHJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7fSxcbiAgZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9LFxuICByZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZzogZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge30sXG4gIGZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uICgpIHt9LFxuICBkaXNjYXJkUGVuZGluZ1dhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fVxufTtcblxue1xuICB2YXIgZmluZFN0cmljdFJvb3QgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICB2YXIgbWF5YmVTdHJpY3RSb290ID0gbnVsbDtcbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIG1heWJlU3RyaWN0Um9vdCA9IG5vZGU7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF5YmVTdHJpY3RSb290O1xuICB9O1xuXG4gIHZhciBzZXRUb1NvcnRlZFN0cmluZyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICBzZXQuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGFycmF5LnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnJheS5zb3J0KCkuam9pbignLCAnKTtcbiAgfTtcblxuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTsgLy8gVHJhY2tzIGNvbXBvbmVudHMgd2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBhYm91dC5cblxuICB2YXIgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcyA9IG5ldyBTZXQoKTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyA9IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHtcbiAgICAvLyBEZWR1cCBzdHJhdGVneTogV2FybiBvbmNlIHBlciBjb21wb25lbnQuXG4gICAgaWYgKGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuaGFzKGZpYmVyLnR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgJiYgLy8gRG9uJ3Qgd2FybiBhYm91dCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMuXG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSAmJiB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXZSBkbyBhbiBpbml0aWFsIHBhc3MgdG8gZ2F0aGVyIGNvbXBvbmVudCBuYW1lc1xuICAgIHZhciBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgfSAvLyBGaW5hbGx5LCB3ZSBmbHVzaCBhbGwgdGhlIHdhcm5pbmdzXG4gICAgLy8gVU5TQUZFXyBvbmVzIGJlZm9yZSB0aGUgZGVwcmVjYXRlZCBvbmVzLCBzaW5jZSB0aGV5J2xsIGJlICdsb3VkZXInXG5cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCBhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBzb3J0ZWROYW1lcyk7XG4gICAgfVxuXG4gICAgaWYgKFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCAnICsgJ2FuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArIFwiKiBJZiB5b3UncmUgdXBkYXRpbmcgc3RhdGUgd2hlbmV2ZXIgcHJvcHMgY2hhbmdlLCBcIiArICdyZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIG1lbW9pemF0aW9uIHRlY2huaXF1ZXMgb3IgbW92ZSBpdCB0byAnICsgJ3N0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIExlYXJuIG1vcmUgYXQ6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kZXJpdmVkLXN0YXRlXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMpO1xuICAgIH1cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzMiA9IHNldFRvU29ydGVkU3RyaW5nKFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkICcgKyAnYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczIpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczMgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyk7XG5cbiAgICAgIHdhcm4oJ2NvbXBvbmVudFdpbGxNb3VudCBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRNb3VudCwgYW5kIHNldCBpbml0aWFsIHN0YXRlIGluIHRoZSBjb25zdHJ1Y3Rvci5cXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxNb3VudCB0byBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMzKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzNCA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyk7XG5cbiAgICAgIHdhcm4oJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyBcIiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgcmVmYWN0b3IgeW91ciBcIiArICdjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gJyArICdzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBMZWFybiBtb3JlIGF0OiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGVyaXZlZC1zdGF0ZVxcbicgKyAnKiBSZW5hbWUgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzNCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczUgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsVXBkYXRlIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxVcGRhdGUgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nID0gbmV3IE1hcCgpOyAvLyBUcmFja3MgY29tcG9uZW50cyB3ZSBoYXZlIGFscmVhZHkgd2FybmVkIGFib3V0LlxuXG4gIHZhciBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0ID0gbmV3IFNldCgpO1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge1xuICAgIHZhciBzdHJpY3RSb290ID0gZmluZFN0cmljdFJvb3QoZmliZXIpO1xuXG4gICAgaWYgKHN0cmljdFJvb3QgPT09IG51bGwpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB0byBmaW5kIGEgU3RyaWN0TW9kZSBjb21wb25lbnQgaW4gYSBzdHJpY3QgbW9kZSB0cmVlLiAnICsgJ1RoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIERlZHVwIHN0cmF0ZWd5OiBXYXJuIG9uY2UgcGVyIGNvbXBvbmVudC5cblxuXG4gICAgaWYgKGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQuaGFzKGZpYmVyLnR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHdhcm5pbmdzRm9yUm9vdCA9IHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5nZXQoc3RyaWN0Um9vdCk7XG5cbiAgICBpZiAoZmliZXIudHlwZS5jb250ZXh0VHlwZXMgIT0gbnVsbCB8fCBmaWJlci50eXBlLmNoaWxkQ29udGV4dFR5cGVzICE9IG51bGwgfHwgaW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHdhcm5pbmdzRm9yUm9vdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHdhcm5pbmdzRm9yUm9vdCA9IFtdO1xuICAgICAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuc2V0KHN0cmljdFJvb3QsIHdhcm5pbmdzRm9yUm9vdCk7XG4gICAgICB9XG5cbiAgICAgIHdhcm5pbmdzRm9yUm9vdC5wdXNoKGZpYmVyKTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZm9yRWFjaChmdW5jdGlvbiAoZmliZXJBcnJheSwgc3RyaWN0Um9vdCkge1xuICAgICAgaWYgKGZpYmVyQXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpcnN0RmliZXIgPSBmaWJlckFycmF5WzBdO1xuICAgICAgdmFyIHVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgZmliZXJBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICB1bmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyh1bmlxdWVOYW1lcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaXJzdEZpYmVyKTtcblxuICAgICAgICBlcnJvcignTGVnYWN5IGNvbnRleHQgQVBJIGhhcyBiZWVuIGRldGVjdGVkIHdpdGhpbiBhIHN0cmljdC1tb2RlIHRyZWUuJyArICdcXG5cXG5UaGUgb2xkIEFQSSB3aWxsIGJlIHN1cHBvcnRlZCBpbiBhbGwgMTYueCByZWxlYXNlcywgYnV0IGFwcGxpY2F0aW9ucyAnICsgJ3VzaW5nIGl0IHNob3VsZCBtaWdyYXRlIHRvIHRoZSBuZXcgdmVyc2lvbi4nICsgJ1xcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycgKyAnXFxuXFxuTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2xlZ2FjeS1jb250ZXh0Jywgc29ydGVkTmFtZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5kaXNjYXJkUGVuZGluZ1dhcm5pbmdzID0gZnVuY3Rpb24gKCkge1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBuZXcgTWFwKCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBiYXNlUHJvcHMpIHtcbiAgaWYgKENvbXBvbmVudCAmJiBDb21wb25lbnQuZGVmYXVsdFByb3BzKSB7XG4gICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzLiBUYWtlbiBmcm9tIFJlYWN0RWxlbWVudFxuICAgIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIGJhc2VQcm9wcyk7XG5cbiAgICB2YXIgZGVmYXVsdFByb3BzID0gQ29tcG9uZW50LmRlZmF1bHRQcm9wcztcblxuICAgIGZvciAodmFyIHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VQcm9wcztcbn1cblxuLy8gTWF4IDMxIGJpdCBpbnRlZ2VyLiBUaGUgbWF4IGludGVnZXIgc2l6ZSBpbiBWOCBmb3IgMzItYml0IHN5c3RlbXMuXG4vLyBNYXRoLnBvdygyLCAzMCkgLSAxXG4vLyAwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVxudmFyIE1BWF9TSUdORURfMzFfQklUX0lOVCA9IDEwNzM3NDE4MjM7XG5cbnZhciB2YWx1ZUN1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKTtcbnZhciByZW5kZXJlclNpZ2lsO1xuXG57XG4gIC8vIFVzZSB0aGlzIHRvIGRldGVjdCBtdWx0aXBsZSByZW5kZXJlcnMgdXNpbmcgdGhlIHNhbWUgY29udGV4dFxuICByZW5kZXJlclNpZ2lsID0ge307XG59XG5cbnZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGw7XG52YXIgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbnZhciBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xudmFyIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbmZ1bmN0aW9uIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpIHtcbiAgLy8gVGhpcyBpcyBjYWxsZWQgcmlnaHQgYmVmb3JlIFJlYWN0IHlpZWxkcyBleGVjdXRpb24sIHRvIGVuc3VyZSBgcmVhZENvbnRleHRgXG4gIC8vIGNhbm5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGUgcmVuZGVyIHBoYXNlLlxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGw7XG4gIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG4gIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IG51bGw7XG5cbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpIHtcbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSB0cnVlO1xuICB9XG59XG5mdW5jdGlvbiBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHB1c2hQcm92aWRlcihwcm92aWRlckZpYmVyLCBuZXh0VmFsdWUpIHtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlckZpYmVyLnR5cGUuX2NvbnRleHQ7XG5cbiAge1xuICAgIHB1c2godmFsdWVDdXJzb3IsIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSwgcHJvdmlkZXJGaWJlcik7XG4gICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gbmV4dFZhbHVlO1xuXG4gICAge1xuICAgICAgaWYgKGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAhPT0gdW5kZWZpbmVkICYmIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAhPT0gbnVsbCAmJiBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHJlbmRlcmVyU2lnaWwpIHtcbiAgICAgICAgZXJyb3IoJ0RldGVjdGVkIG11bHRpcGxlIHJlbmRlcmVycyBjb25jdXJyZW50bHkgcmVuZGVyaW5nIHRoZSAnICsgJ3NhbWUgY29udGV4dCBwcm92aWRlci4gVGhpcyBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IHJlbmRlcmVyU2lnaWw7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3BQcm92aWRlcihwcm92aWRlckZpYmVyKSB7XG4gIHZhciBjdXJyZW50VmFsdWUgPSB2YWx1ZUN1cnNvci5jdXJyZW50O1xuICBwb3AodmFsdWVDdXJzb3IsIHByb3ZpZGVyRmliZXIpO1xuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyRmliZXIudHlwZS5fY29udGV4dDtcblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlO1xuICB9XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVDaGFuZ2VkQml0cyhjb250ZXh0LCBuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgaWYgKG9iamVjdElzKG9sZFZhbHVlLCBuZXdWYWx1ZSkpIHtcbiAgICAvLyBObyBjaGFuZ2VcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgY2hhbmdlZEJpdHMgPSB0eXBlb2YgY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPT09ICdmdW5jdGlvbicgPyBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0cyhvbGRWYWx1ZSwgbmV3VmFsdWUpIDogTUFYX1NJR05FRF8zMV9CSVRfSU5UO1xuXG4gICAge1xuICAgICAgaWYgKChjaGFuZ2VkQml0cyAmIE1BWF9TSUdORURfMzFfQklUX0lOVCkgIT09IGNoYW5nZWRCaXRzKSB7XG4gICAgICAgIGVycm9yKCdjYWxjdWxhdGVDaGFuZ2VkQml0czogRXhwZWN0ZWQgdGhlIHJldHVybiB2YWx1ZSB0byBiZSBhICcgKyAnMzEtYml0IGludGVnZXIuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzJywgY2hhbmdlZEJpdHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGFuZ2VkQml0cyB8IDA7XG4gIH1cbn1cbmZ1bmN0aW9uIHNjaGVkdWxlV29ya09uUGFyZW50UGF0aChwYXJlbnQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFVwZGF0ZSB0aGUgY2hpbGQgbGFuZXMgb2YgYWxsIHRoZSBhbmNlc3RvcnMsIGluY2x1ZGluZyB0aGUgYWx0ZXJuYXRlcy5cbiAgdmFyIG5vZGUgPSBwYXJlbnQ7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICB2YXIgYWx0ZXJuYXRlID0gbm9kZS5hbHRlcm5hdGU7XG5cbiAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhub2RlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgICAgbm9kZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhub2RlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcblxuICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiAhaXNTdWJzZXRPZkxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgIGFsdGVybmF0ZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOZWl0aGVyIGFsdGVybmF0ZSB3YXMgdXBkYXRlZCwgd2hpY2ggbWVhbnMgdGhlIHJlc3Qgb2YgdGhlXG4gICAgICAvLyBhbmNlc3RvciBwYXRoIGFscmVhZHkgaGFzIHN1ZmZpY2llbnQgcHJpb3JpdHkuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gIH1cbn1cbmZ1bmN0aW9uIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIGNoYW5nZWRCaXRzLCByZW5kZXJMYW5lcykge1xuICB2YXIgZmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICBpZiAoZmliZXIgIT09IG51bGwpIHtcbiAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBjaGlsZCB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICBmaWJlci5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgfVxuXG4gIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgIHZhciBuZXh0RmliZXIgPSB2b2lkIDA7IC8vIFZpc2l0IHRoaXMgZmliZXIuXG5cbiAgICB2YXIgbGlzdCA9IGZpYmVyLmRlcGVuZGVuY2llcztcblxuICAgIGlmIChsaXN0ICE9PSBudWxsKSB7XG4gICAgICBuZXh0RmliZXIgPSBmaWJlci5jaGlsZDtcbiAgICAgIHZhciBkZXBlbmRlbmN5ID0gbGlzdC5maXJzdENvbnRleHQ7XG5cbiAgICAgIHdoaWxlIChkZXBlbmRlbmN5ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IG1hdGNoZXMuXG4gICAgICAgIGlmIChkZXBlbmRlbmN5LmNvbnRleHQgPT09IGNvbnRleHQgJiYgKGRlcGVuZGVuY3kub2JzZXJ2ZWRCaXRzICYgY2hhbmdlZEJpdHMpICE9PSAwKSB7XG4gICAgICAgICAgLy8gTWF0Y2ghIFNjaGVkdWxlIGFuIHVwZGF0ZSBvbiB0aGlzIGZpYmVyLlxuICAgICAgICAgIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAvLyBTY2hlZHVsZSBhIGZvcmNlIHVwZGF0ZSBvbiB0aGUgd29yay1pbi1wcm9ncmVzcy5cbiAgICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIHBpY2tBcmJpdHJhcnlMYW5lKHJlbmRlckxhbmVzKSk7XG4gICAgICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7IC8vIFRPRE86IEJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIHdvcmstaW4tcHJvZ3Jlc3MsIHRoaXMgd2lsbCBhZGQgdGhlXG4gICAgICAgICAgICAvLyB1cGRhdGUgdG8gdGhlIGN1cnJlbnQgZmliZXIsIHRvbywgd2hpY2ggbWVhbnMgaXQgd2lsbCBwZXJzaXN0IGV2ZW4gaWZcbiAgICAgICAgICAgIC8vIHRoaXMgcmVuZGVyIGlzIHRocm93biBhd2F5LiBTaW5jZSBpdCdzIGEgcmFjZSBjb25kaXRpb24sIG5vdCBzdXJlIGl0J3NcbiAgICAgICAgICAgIC8vIHdvcnRoIGZpeGluZy5cblxuICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoZmliZXIubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzY2hlZHVsZVdvcmtPblBhcmVudFBhdGgoZmliZXIucmV0dXJuLCByZW5kZXJMYW5lcyk7IC8vIE1hcmsgdGhlIHVwZGF0ZWQgbGFuZXMgb24gdGhlIGxpc3QsIHRvby5cblxuICAgICAgICAgIGxpc3QubGFuZXMgPSBtZXJnZUxhbmVzKGxpc3QubGFuZXMsIHJlbmRlckxhbmVzKTsgLy8gU2luY2Ugd2UgYWxyZWFkeSBmb3VuZCBhIG1hdGNoLCB3ZSBjYW4gc3RvcCB0cmF2ZXJzaW5nIHRoZVxuICAgICAgICAgIC8vIGRlcGVuZGVuY3kgbGlzdC5cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVwZW5kZW5jeSA9IGRlcGVuZGVuY3kubmV4dDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZpYmVyLnRhZyA9PT0gQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgICAvLyBEb24ndCBzY2FuIGRlZXBlciBpZiB0aGlzIGlzIGEgbWF0Y2hpbmcgcHJvdmlkZXJcbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLnR5cGUgPyBudWxsIDogZmliZXIuY2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRyYXZlcnNlIGRvd24uXG4gICAgICBuZXh0RmliZXIgPSBmaWJlci5jaGlsZDtcbiAgICB9XG5cbiAgICBpZiAobmV4dEZpYmVyICE9PSBudWxsKSB7XG4gICAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBjaGlsZCB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICAgIG5leHRGaWJlci5yZXR1cm4gPSBmaWJlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gY2hpbGQuIFRyYXZlcnNlIHRvIG5leHQgc2libGluZy5cbiAgICAgIG5leHRGaWJlciA9IGZpYmVyO1xuXG4gICAgICB3aGlsZSAobmV4dEZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChuZXh0RmliZXIgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgLy8gV2UncmUgYmFjayB0byB0aGUgcm9vdCBvZiB0aGlzIHN1YnRyZWUuIEV4aXQuXG4gICAgICAgICAgbmV4dEZpYmVyID0gbnVsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWJsaW5nID0gbmV4dEZpYmVyLnNpYmxpbmc7XG5cbiAgICAgICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBzaWJsaW5nIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgICAgICAgIHNpYmxpbmcucmV0dXJuID0gbmV4dEZpYmVyLnJldHVybjtcbiAgICAgICAgICBuZXh0RmliZXIgPSBzaWJsaW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IC8vIE5vIG1vcmUgc2libGluZ3MuIFRyYXZlcnNlIHVwLlxuXG5cbiAgICAgICAgbmV4dEZpYmVyID0gbmV4dEZpYmVyLnJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWJlciA9IG5leHRGaWJlcjtcbiAgfVxufVxuZnVuY3Rpb24gcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG4gIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IG51bGw7XG4gIHZhciBkZXBlbmRlbmNpZXMgPSB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXM7XG5cbiAgaWYgKGRlcGVuZGVuY2llcyAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdENvbnRleHQgPSBkZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0O1xuXG4gICAgaWYgKGZpcnN0Q29udGV4dCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGluY2x1ZGVzU29tZUxhbmUoZGVwZW5kZW5jaWVzLmxhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgICAgLy8gQ29udGV4dCBsaXN0IGhhcyBhIHBlbmRpbmcgdXBkYXRlLiBNYXJrIHRoYXQgdGhpcyBmaWJlciBwZXJmb3JtZWQgd29yay5cbiAgICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICAgIH0gLy8gUmVzZXQgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgbGlzdFxuXG5cbiAgICAgIGRlcGVuZGVuY2llcy5maXJzdENvbnRleHQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gIHtcbiAgICAvLyBUaGlzIHdhcm5pbmcgd291bGQgZmlyZSBpZiB5b3UgcmVhZCBjb250ZXh0IGluc2lkZSBhIEhvb2sgbGlrZSB1c2VNZW1vLlxuICAgIC8vIFVubGlrZSB0aGUgY2xhc3MgY2hlY2sgYmVsb3csIGl0J3Mgbm90IGVuZm9yY2VkIGluIHByb2R1Y3Rpb24gZm9yIHBlcmYuXG4gICAgaWYgKGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYpIHtcbiAgICAgIGVycm9yKCdDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiAnICsgJ0luIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuICcgKyAnSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90ICcgKyAnaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAobGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID09PSBjb250ZXh0KSA7IGVsc2UgaWYgKG9ic2VydmVkQml0cyA9PT0gZmFsc2UgfHwgb2JzZXJ2ZWRCaXRzID09PSAwKSA7IGVsc2Uge1xuICAgIHZhciByZXNvbHZlZE9ic2VydmVkQml0czsgLy8gQXZvaWQgZGVvcHRpbmcgb24gb2JzZXJ2YWJsZSBhcmd1bWVudHMgb3IgaGV0ZXJvZ2VuZW91cyB0eXBlcy5cblxuICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZWRCaXRzICE9PSAnbnVtYmVyJyB8fCBvYnNlcnZlZEJpdHMgPT09IE1BWF9TSUdORURfMzFfQklUX0lOVCkge1xuICAgICAgLy8gT2JzZXJ2ZSBhbGwgdXBkYXRlcy5cbiAgICAgIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IGNvbnRleHQ7XG4gICAgICByZXNvbHZlZE9ic2VydmVkQml0cyA9IE1BWF9TSUdORURfMzFfQklUX0lOVDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZWRPYnNlcnZlZEJpdHMgPSBvYnNlcnZlZEJpdHM7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHRJdGVtID0ge1xuICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgIG9ic2VydmVkQml0czogcmVzb2x2ZWRPYnNlcnZlZEJpdHMsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcblxuICAgIGlmIChsYXN0Q29udGV4dERlcGVuZGVuY3kgPT09IG51bGwpIHtcbiAgICAgIGlmICghKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyICE9PSBudWxsKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90IGluc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBUaGlzIGlzIHRoZSBmaXJzdCBkZXBlbmRlbmN5IGZvciB0aGlzIGNvbXBvbmVudC4gQ3JlYXRlIGEgbmV3IGxpc3QuXG5cblxuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gY29udGV4dEl0ZW07XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5kZXBlbmRlbmNpZXMgPSB7XG4gICAgICAgIGxhbmVzOiBOb0xhbmVzLFxuICAgICAgICBmaXJzdENvbnRleHQ6IGNvbnRleHRJdGVtLFxuICAgICAgICByZXNwb25kZXJzOiBudWxsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBcHBlbmQgYSBuZXcgY29udGV4dCBpdGVtLlxuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbGFzdENvbnRleHREZXBlbmRlbmN5Lm5leHQgPSBjb250ZXh0SXRlbTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA7XG59XG5cbnZhciBVcGRhdGVTdGF0ZSA9IDA7XG52YXIgUmVwbGFjZVN0YXRlID0gMTtcbnZhciBGb3JjZVVwZGF0ZSA9IDI7XG52YXIgQ2FwdHVyZVVwZGF0ZSA9IDM7IC8vIEdsb2JhbCBzdGF0ZSB0aGF0IGlzIHJlc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgY2FsbGluZyBgcHJvY2Vzc1VwZGF0ZVF1ZXVlYC5cbi8vIEl0IHNob3VsZCBvbmx5IGJlIHJlYWQgcmlnaHQgYWZ0ZXIgY2FsbGluZyBgcHJvY2Vzc1VwZGF0ZVF1ZXVlYCwgdmlhXG4vLyBgY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZ2AuXG5cbnZhciBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGU7XG52YXIgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlO1xuXG57XG4gIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSBmYWxzZTtcbiAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKGZpYmVyKSB7XG4gIHZhciBxdWV1ZSA9IHtcbiAgICBiYXNlU3RhdGU6IGZpYmVyLm1lbW9pemVkU3RhdGUsXG4gICAgZmlyc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgIGxhc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgIHNoYXJlZDoge1xuICAgICAgcGVuZGluZzogbnVsbFxuICAgIH0sXG4gICAgZWZmZWN0czogbnVsbFxuICB9O1xuICBmaWJlci51cGRhdGVRdWV1ZSA9IHF1ZXVlO1xufVxuZnVuY3Rpb24gY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICAvLyBDbG9uZSB0aGUgdXBkYXRlIHF1ZXVlIGZyb20gY3VycmVudC4gVW5sZXNzIGl0J3MgYWxyZWFkeSBhIGNsb25lLlxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgaWYgKHF1ZXVlID09PSBjdXJyZW50UXVldWUpIHtcbiAgICB2YXIgY2xvbmUgPSB7XG4gICAgICBiYXNlU3RhdGU6IGN1cnJlbnRRdWV1ZS5iYXNlU3RhdGUsXG4gICAgICBmaXJzdEJhc2VVcGRhdGU6IGN1cnJlbnRRdWV1ZS5maXJzdEJhc2VVcGRhdGUsXG4gICAgICBsYXN0QmFzZVVwZGF0ZTogY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlLFxuICAgICAgc2hhcmVkOiBjdXJyZW50UXVldWUuc2hhcmVkLFxuICAgICAgZWZmZWN0czogY3VycmVudFF1ZXVlLmVmZmVjdHNcbiAgICB9O1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY2xvbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IHtcbiAgICBldmVudFRpbWU6IGV2ZW50VGltZSxcbiAgICBsYW5lOiBsYW5lLFxuICAgIHRhZzogVXBkYXRlU3RhdGUsXG4gICAgcGF5bG9hZDogbnVsbCxcbiAgICBjYWxsYmFjazogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIHJldHVybiB1cGRhdGU7XG59XG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmliZXIudXBkYXRlUXVldWU7XG5cbiAgaWYgKHVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgLy8gT25seSBvY2N1cnMgaWYgdGhlIGZpYmVyIGhhcyBiZWVuIHVubW91bnRlZC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2hhcmVkUXVldWUgPSB1cGRhdGVRdWV1ZS5zaGFyZWQ7XG4gIHZhciBwZW5kaW5nID0gc2hhcmVkUXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZyA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZS4gQ3JlYXRlIGEgY2lyY3VsYXIgbGlzdC5cbiAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dDtcbiAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gIH1cblxuICBzaGFyZWRRdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuXG4gIHtcbiAgICBpZiAoY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID09PSBzaGFyZWRRdWV1ZSAmJiAhZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSkge1xuICAgICAgZXJyb3IoJ0FuIHVwZGF0ZSAoc2V0U3RhdGUsIHJlcGxhY2VTdGF0ZSwgb3IgZm9yY2VVcGRhdGUpIHdhcyBzY2hlZHVsZWQgJyArICdmcm9tIGluc2lkZSBhbiB1cGRhdGUgZnVuY3Rpb24uIFVwZGF0ZSBmdW5jdGlvbnMgc2hvdWxkIGJlIHB1cmUsICcgKyAnd2l0aCB6ZXJvIHNpZGUtZWZmZWN0cy4gQ29uc2lkZXIgdXNpbmcgY29tcG9uZW50RGlkVXBkYXRlIG9yIGEgJyArICdjYWxsYmFjay4nKTtcblxuICAgICAgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGNhcHR1cmVkVXBkYXRlKSB7XG4gIC8vIENhcHR1cmVkIHVwZGF0ZXMgYXJlIHVwZGF0ZXMgdGhhdCBhcmUgdGhyb3duIGJ5IGEgY2hpbGQgZHVyaW5nIHRoZSByZW5kZXJcbiAgLy8gcGhhc2UuIFRoZXkgc2hvdWxkIGJlIGRpc2NhcmRlZCBpZiB0aGUgcmVuZGVyIGlzIGFib3J0ZWQuIFRoZXJlZm9yZSxcbiAgLy8gd2Ugc2hvdWxkIG9ubHkgcHV0IHRoZW0gb24gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUsIG5vdCB0aGUgY3VycmVudCBvbmUuXG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlOyAvLyBDaGVjayBpZiB0aGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSBpcyBhIGNsb25lLlxuXG4gIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgICBpZiAocXVldWUgPT09IGN1cnJlbnRRdWV1ZSkge1xuICAgICAgLy8gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgaXMgdGhlIHNhbWUgYXMgY3VycmVudC4gVGhpcyBoYXBwZW5zIHdoZW5cbiAgICAgIC8vIHdlIGJhaWwgb3V0IG9uIGEgcGFyZW50IGZpYmVyIHRoYXQgdGhlbiBjYXB0dXJlcyBhbiBlcnJvciB0aHJvd24gYnlcbiAgICAgIC8vIGEgY2hpbGQuIFNpbmNlIHdlIHdhbnQgdG8gYXBwZW5kIHRoZSB1cGRhdGUgb25seSB0byB0aGUgd29yay1pblxuICAgICAgLy8gLXByb2dyZXNzIHF1ZXVlLCB3ZSBuZWVkIHRvIGNsb25lIHRoZSB1cGRhdGVzLiBXZSB1c3VhbGx5IGNsb25lIGR1cmluZ1xuICAgICAgLy8gcHJvY2Vzc1VwZGF0ZVF1ZXVlLCBidXQgdGhhdCBkaWRuJ3QgaGFwcGVuIGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlXG4gICAgICAvLyBza2lwcGVkIG92ZXIgdGhlIHBhcmVudCB3aGVuIHdlIGJhaWxlZCBvdXQuXG4gICAgICB2YXIgbmV3Rmlyc3QgPSBudWxsO1xuICAgICAgdmFyIG5ld0xhc3QgPSBudWxsO1xuICAgICAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZTtcblxuICAgICAgaWYgKGZpcnN0QmFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBMb29wIHRocm91Z2ggdGhlIHVwZGF0ZXMgYW5kIGNsb25lIHRoZW0uXG4gICAgICAgIHZhciB1cGRhdGUgPSBmaXJzdEJhc2VVcGRhdGU7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlLmV2ZW50VGltZSxcbiAgICAgICAgICAgIGxhbmU6IHVwZGF0ZS5sYW5lLFxuICAgICAgICAgICAgdGFnOiB1cGRhdGUudGFnLFxuICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAobmV3TGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xhc3QubmV4dCA9IGNsb25lO1xuICAgICAgICAgICAgbmV3TGFzdCA9IGNsb25lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgICAgICB9IHdoaWxlICh1cGRhdGUgIT09IG51bGwpOyAvLyBBcHBlbmQgdGhlIGNhcHR1cmVkIHVwZGF0ZSB0aGUgZW5kIG9mIHRoZSBjbG9uZWQgbGlzdC5cblxuXG4gICAgICAgIGlmIChuZXdMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3TGFzdC5uZXh0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgICAgbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGVyZSBhcmUgbm8gYmFzZSB1cGRhdGVzLlxuICAgICAgICBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgIH1cblxuICAgICAgcXVldWUgPSB7XG4gICAgICAgIGJhc2VTdGF0ZTogY3VycmVudFF1ZXVlLmJhc2VTdGF0ZSxcbiAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBuZXdGaXJzdCxcbiAgICAgICAgbGFzdEJhc2VVcGRhdGU6IG5ld0xhc3QsXG4gICAgICAgIHNoYXJlZDogY3VycmVudFF1ZXVlLnNoYXJlZCxcbiAgICAgICAgZWZmZWN0czogY3VycmVudFF1ZXVlLmVmZmVjdHNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHF1ZXVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuXG5cbiAgdmFyIGxhc3RCYXNlVXBkYXRlID0gcXVldWUubGFzdEJhc2VVcGRhdGU7XG5cbiAgaWYgKGxhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgcXVldWUuZmlyc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgbGFzdEJhc2VVcGRhdGUubmV4dCA9IGNhcHR1cmVkVXBkYXRlO1xuICB9XG5cbiAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBjYXB0dXJlZFVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdGVGcm9tVXBkYXRlKHdvcmtJblByb2dyZXNzLCBxdWV1ZSwgdXBkYXRlLCBwcmV2U3RhdGUsIG5leHRQcm9wcywgaW5zdGFuY2UpIHtcbiAgc3dpdGNoICh1cGRhdGUudGFnKSB7XG4gICAgY2FzZSBSZXBsYWNlU3RhdGU6XG4gICAgICB7XG4gICAgICAgIHZhciBwYXlsb2FkID0gdXBkYXRlLnBheWxvYWQ7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gVXBkYXRlciBmdW5jdGlvblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgbmV4dFN0YXRlID0gcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV4dFN0YXRlO1xuICAgICAgICB9IC8vIFN0YXRlIG9iamVjdFxuXG5cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICB9XG5cbiAgICBjYXNlIENhcHR1cmVVcGRhdGU6XG4gICAgICB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG4gICAgICB9XG4gICAgLy8gSW50ZW50aW9uYWwgZmFsbHRocm91Z2hcblxuICAgIGNhc2UgVXBkYXRlU3RhdGU6XG4gICAgICB7XG4gICAgICAgIHZhciBfcGF5bG9hZCA9IHVwZGF0ZS5wYXlsb2FkO1xuICAgICAgICB2YXIgcGFydGlhbFN0YXRlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgX3BheWxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IF9wYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIF9wYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUGFydGlhbCBzdGF0ZSBvYmplY3RcbiAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBfcGF5bG9hZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0aWFsU3RhdGUgPT09IG51bGwgfHwgcGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBOdWxsIGFuZCB1bmRlZmluZWQgYXJlIHRyZWF0ZWQgYXMgbm8tb3BzLlxuICAgICAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgICAgIH0gLy8gTWVyZ2UgdGhlIHBhcnRpYWwgc3RhdGUgYW5kIHRoZSBwcmV2aW91cyBzdGF0ZS5cblxuXG4gICAgICAgIHJldHVybiBfYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZvcmNlVXBkYXRlOlxuICAgICAge1xuICAgICAgICBoYXNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gcHJldlN0YXRlO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIHByb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyBpcyBhbHdheXMgbm9uLW51bGwgb24gYSBDbGFzc0NvbXBvbmVudCBvciBIb3N0Um9vdFxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcblxuICB7XG4gICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gcXVldWUuc2hhcmVkO1xuICB9XG5cbiAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZTtcbiAgdmFyIGxhc3RCYXNlVXBkYXRlID0gcXVldWUubGFzdEJhc2VVcGRhdGU7IC8vIENoZWNrIGlmIHRoZXJlIGFyZSBwZW5kaW5nIHVwZGF0ZXMuIElmIHNvLCB0cmFuc2ZlciB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuXG4gIHZhciBwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZztcblxuICBpZiAocGVuZGluZ1F1ZXVlICE9PSBudWxsKSB7XG4gICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsOyAvLyBUaGUgcGVuZGluZyBxdWV1ZSBpcyBjaXJjdWxhci4gRGlzY29ubmVjdCB0aGUgcG9pbnRlciBiZXR3ZWVuIGZpcnN0XG4gICAgLy8gYW5kIGxhc3Qgc28gdGhhdCBpdCdzIG5vbi1jaXJjdWxhci5cblxuICAgIHZhciBsYXN0UGVuZGluZ1VwZGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICB2YXIgZmlyc3RQZW5kaW5nVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICBsYXN0UGVuZGluZ1VwZGF0ZS5uZXh0ID0gbnVsbDsgLy8gQXBwZW5kIHBlbmRpbmcgdXBkYXRlcyB0byBiYXNlIHF1ZXVlXG5cbiAgICBpZiAobGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgIGZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdEJhc2VVcGRhdGUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICB9XG5cbiAgICBsYXN0QmFzZVVwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlOyAvLyBJZiB0aGVyZSdzIGEgY3VycmVudCBxdWV1ZSwgYW5kIGl0J3MgZGlmZmVyZW50IGZyb20gdGhlIGJhc2UgcXVldWUsIHRoZW5cbiAgICAvLyB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRoZSB1cGRhdGVzIHRvIHRoYXQgcXVldWUsIHRvby4gQmVjYXVzZSB0aGUgYmFzZVxuICAgIC8vIHF1ZXVlIGlzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IHdpdGggbm8gY3ljbGVzLCB3ZSBjYW4gYXBwZW5kIHRvIGJvdGhcbiAgICAvLyBsaXN0cyBhbmQgdGFrZSBhZHZhbnRhZ2Ugb2Ygc3RydWN0dXJhbCBzaGFyaW5nLlxuICAgIC8vIFRPRE86IFBhc3MgYGN1cnJlbnRgIGFzIGFyZ3VtZW50XG5cbiAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIGFsd2F5cyBub24tbnVsbCBvbiBhIENsYXNzQ29tcG9uZW50IG9yIEhvc3RSb290XG4gICAgICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgIHZhciBjdXJyZW50TGFzdEJhc2VVcGRhdGUgPSBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGU7XG5cbiAgICAgIGlmIChjdXJyZW50TGFzdEJhc2VVcGRhdGUgIT09IGxhc3RCYXNlVXBkYXRlKSB7XG4gICAgICAgIGlmIChjdXJyZW50TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICBjdXJyZW50UXVldWUuZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFRoZXNlIHZhbHVlcyBtYXkgY2hhbmdlIGFzIHdlIHByb2Nlc3MgdGhlIHF1ZXVlLlxuXG5cbiAgaWYgKGZpcnN0QmFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdCBvZiB1cGRhdGVzIHRvIGNvbXB1dGUgdGhlIHJlc3VsdC5cbiAgICB2YXIgbmV3U3RhdGUgPSBxdWV1ZS5iYXNlU3RhdGU7IC8vIFRPRE86IERvbid0IG5lZWQgdG8gYWNjdW11bGF0ZSB0aGlzLiBJbnN0ZWFkLCB3ZSBjYW4gcmVtb3ZlIHJlbmRlckxhbmVzXG4gICAgLy8gZnJvbSB0aGUgb3JpZ2luYWwgbGFuZXMuXG5cbiAgICB2YXIgbmV3TGFuZXMgPSBOb0xhbmVzO1xuICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgIHZhciBuZXdGaXJzdEJhc2VVcGRhdGUgPSBudWxsO1xuICAgIHZhciBuZXdMYXN0QmFzZVVwZGF0ZSA9IG51bGw7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcblxuICAgIGRvIHtcbiAgICAgIHZhciB1cGRhdGVMYW5lID0gdXBkYXRlLmxhbmU7XG4gICAgICB2YXIgdXBkYXRlRXZlbnRUaW1lID0gdXBkYXRlLmV2ZW50VGltZTtcblxuICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmUpKSB7XG4gICAgICAgIC8vIFByaW9yaXR5IGlzIGluc3VmZmljaWVudC4gU2tpcCB0aGlzIHVwZGF0ZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3RcbiAgICAgICAgLy8gc2tpcHBlZCB1cGRhdGUsIHRoZSBwcmV2aW91cyB1cGRhdGUvc3RhdGUgaXMgdGhlIG5ldyBiYXNlXG4gICAgICAgIC8vIHVwZGF0ZS9zdGF0ZS5cbiAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlRXZlbnRUaW1lLFxuICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgdGFnOiB1cGRhdGUudGFnLFxuICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgIGNhbGxiYWNrOiB1cGRhdGUuY2FsbGJhY2ssXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChuZXdMYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0ZpcnN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlID0gY2xvbmU7XG4gICAgICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3TGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gY2xvbmU7XG4gICAgICAgIH0gLy8gVXBkYXRlIHRoZSByZW1haW5pbmcgcHJpb3JpdHkgaW4gdGhlIHF1ZXVlLlxuXG5cbiAgICAgICAgbmV3TGFuZXMgPSBtZXJnZUxhbmVzKG5ld0xhbmVzLCB1cGRhdGVMYW5lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgdXBkYXRlIGRvZXMgaGF2ZSBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2Nsb25lID0ge1xuICAgICAgICAgICAgZXZlbnRUaW1lOiB1cGRhdGVFdmVudFRpbWUsXG4gICAgICAgICAgICAvLyBUaGlzIHVwZGF0ZSBpcyBnb2luZyB0byBiZSBjb21taXR0ZWQgc28gd2UgbmV2ZXIgd2FudCB1bmNvbW1pdFxuICAgICAgICAgICAgLy8gaXQuIFVzaW5nIE5vTGFuZSB3b3JrcyBiZWNhdXNlIDAgaXMgYSBzdWJzZXQgb2YgYWxsIGJpdG1hc2tzLCBzb1xuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIG5ldmVyIGJlIHNraXBwZWQgYnkgdGhlIGNoZWNrIGFib3ZlLlxuICAgICAgICAgICAgbGFuZTogTm9MYW5lLFxuICAgICAgICAgICAgdGFnOiB1cGRhdGUudGFnLFxuICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgbmV3TGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gX2Nsb25lO1xuICAgICAgICB9IC8vIFByb2Nlc3MgdGhpcyB1cGRhdGUuXG5cblxuICAgICAgICBuZXdTdGF0ZSA9IGdldFN0YXRlRnJvbVVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgcXVldWUsIHVwZGF0ZSwgbmV3U3RhdGUsIHByb3BzLCBpbnN0YW5jZSk7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHVwZGF0ZS5jYWxsYmFjaztcblxuICAgICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBDYWxsYmFjaztcbiAgICAgICAgICB2YXIgZWZmZWN0cyA9IHF1ZXVlLmVmZmVjdHM7XG5cbiAgICAgICAgICBpZiAoZWZmZWN0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcXVldWUuZWZmZWN0cyA9IFt1cGRhdGVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlZmZlY3RzLnB1c2godXBkYXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG5cbiAgICAgIGlmICh1cGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG5cbiAgICAgICAgaWYgKHBlbmRpbmdRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIGZyb20gaW5zaWRlIGEgcmVkdWNlci4gQWRkIHRoZSBuZXdcbiAgICAgICAgICAvLyBwZW5kaW5nIHVwZGF0ZXMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBhbmQga2VlcCBwcm9jZXNzaW5nLlxuICAgICAgICAgIHZhciBfbGFzdFBlbmRpbmdVcGRhdGUgPSBwZW5kaW5nUXVldWU7IC8vIEludGVudGlvbmFsbHkgdW5zb3VuZC4gUGVuZGluZyB1cGRhdGVzIGZvcm0gYSBjaXJjdWxhciBsaXN0LCBidXQgd2VcbiAgICAgICAgICAvLyB1bnJhdmVsIHRoZW0gd2hlbiB0cmFuc2ZlcnJpbmcgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cblxuICAgICAgICAgIHZhciBfZmlyc3RQZW5kaW5nVXBkYXRlID0gX2xhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgICAgICAgX2xhc3RQZW5kaW5nVXBkYXRlLm5leHQgPSBudWxsO1xuICAgICAgICAgIHVwZGF0ZSA9IF9maXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgICAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBfbGFzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH1cblxuICAgIHF1ZXVlLmJhc2VTdGF0ZSA9IG5ld0Jhc2VTdGF0ZTtcbiAgICBxdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBuZXdGaXJzdEJhc2VVcGRhdGU7XG4gICAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZTsgLy8gU2V0IHRoZSByZW1haW5pbmcgZXhwaXJhdGlvbiB0aW1lIHRvIGJlIHdoYXRldmVyIGlzIHJlbWFpbmluZyBpbiB0aGUgcXVldWUuXG4gICAgLy8gVGhpcyBzaG91bGQgYmUgZmluZSBiZWNhdXNlIHRoZSBvbmx5IHR3byBvdGhlciB0aGluZ3MgdGhhdCBjb250cmlidXRlIHRvXG4gICAgLy8gZXhwaXJhdGlvbiB0aW1lIGFyZSBwcm9wcyBhbmQgY29udGV4dC4gV2UncmUgYWxyZWFkeSBpbiB0aGUgbWlkZGxlIG9mIHRoZVxuICAgIC8vIGJlZ2luIHBoYXNlIGJ5IHRoZSB0aW1lIHdlIHN0YXJ0IHByb2Nlc3NpbmcgdGhlIHF1ZXVlLCBzbyB3ZSd2ZSBhbHJlYWR5XG4gICAgLy8gZGVhbHQgd2l0aCB0aGUgcHJvcHMuIENvbnRleHQgaW4gY29tcG9uZW50cyB0aGF0IHNwZWNpZnlcbiAgICAvLyBzaG91bGRDb21wb25lbnRVcGRhdGUgaXMgdHJpY2t5OyBidXQgd2UnbGwgaGF2ZSB0byBhY2NvdW50IGZvclxuICAgIC8vIHRoYXQgcmVnYXJkbGVzcy5cblxuICAgIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMobmV3TGFuZXMpO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbmV3TGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAge1xuICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gIGlmICghKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCBhcyBjYWxsYmFjay4gRXhwZWN0ZWQgYSBmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogXCIgKyBjYWxsYmFjayApO1xuICAgIH1cbiAgfVxuXG4gIGNhbGxiYWNrLmNhbGwoY29udGV4dCk7XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCkge1xuICBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xufVxuZnVuY3Rpb24gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHtcbiAgcmV0dXJuIGhhc0ZvcmNlVXBkYXRlO1xufVxuZnVuY3Rpb24gY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFF1ZXVlLCBpbnN0YW5jZSkge1xuICAvLyBDb21taXQgdGhlIGVmZmVjdHNcbiAgdmFyIGVmZmVjdHMgPSBmaW5pc2hlZFF1ZXVlLmVmZmVjdHM7XG4gIGZpbmlzaGVkUXVldWUuZWZmZWN0cyA9IG51bGw7XG5cbiAgaWYgKGVmZmVjdHMgIT09IG51bGwpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVmZmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlZmZlY3QgPSBlZmZlY3RzW2ldO1xuICAgICAgdmFyIGNhbGxiYWNrID0gZWZmZWN0LmNhbGxiYWNrO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgZWZmZWN0LmNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBpbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBmYWtlSW50ZXJuYWxJbnN0YW5jZSA9IHt9O1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5OyAvLyBSZWFjdC5Db21wb25lbnQgdXNlcyBhIHNoYXJlZCBmcm96ZW4gb2JqZWN0IGJ5IGRlZmF1bHQuXG4vLyBXZSdsbCB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBpbml0aWFsaXplIGxlZ2FjeSByZWZzLlxuXG52YXIgZW1wdHlSZWZzT2JqZWN0ID0gbmV3IFJlYWN0LkNvbXBvbmVudCgpLnJlZnM7XG52YXIgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGU7XG52YXIgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGU7XG52YXIgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlO1xudmFyIHdhcm5PbkludmFsaWRDYWxsYmFjaztcbnZhciBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcztcbnZhciBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGU7XG5cbntcbiAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50ID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZSA9IG5ldyBTZXQoKTtcbiAgdmFyIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjayA9IG5ldyBTZXQoKTtcblxuICB3YXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwgfHwgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGtleSA9IGNhbGxlck5hbWUgKyAnXycgKyBjYWxsYmFjaztcblxuICAgIGlmICghZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmhhcyhrZXkpKSB7XG4gICAgICBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suYWRkKGtleSk7XG5cbiAgICAgIGVycm9yKCclcyguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGVyTmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfTtcblxuICB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGUgPSBmdW5jdGlvbiAodHlwZSwgcGFydGlhbFN0YXRlKSB7XG4gICAgaWYgKHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclcy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKTogQSB2YWxpZCBzdGF0ZSBvYmplY3QgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQuICcgKyAnWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTsgLy8gVGhpcyBpcyBzbyBncm9zcyBidXQgaXQncyBhdCBsZWFzdCBub24tY3JpdGljYWwgYW5kIGNhbiBiZSByZW1vdmVkIGlmXG4gIC8vIGl0IGNhdXNlcyBwcm9ibGVtcy4gVGhpcyBpcyBtZWFudCB0byBnaXZlIGEgbmljZXIgZXJyb3IgbWVzc2FnZSBmb3JcbiAgLy8gUmVhY3RET00xNS51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihyZWFjdERPTTE2Q29tcG9uZW50LFxuICAvLyAuLi4pKSB3aGljaCBvdGhlcndpc2UgdGhyb3dzIGEgXCJfcHJvY2Vzc0NoaWxkQ29udGV4dCBpcyBub3QgYSBmdW5jdGlvblwiXG4gIC8vIGV4Y2VwdGlvbi5cblxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmYWtlSW50ZXJuYWxJbnN0YW5jZSwgJ19wcm9jZXNzQ2hpbGRDb250ZXh0Jywge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJfcHJvY2Vzc0NoaWxkQ29udGV4dCBpcyBub3QgYXZhaWxhYmxlIGluIFJlYWN0IDE2Ky4gVGhpcyBsaWtlbHkgbWVhbnMgeW91IGhhdmUgbXVsdGlwbGUgY29waWVzIG9mIFJlYWN0IGFuZCBhcmUgYXR0ZW1wdGluZyB0byBuZXN0IGEgUmVhY3QgMTUgdHJlZSBpbnNpZGUgYSBSZWFjdCAxNiB0cmVlIHVzaW5nIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyLCB3aGljaCBpc24ndCBzdXBwb3J0ZWQuIFRyeSB0byBtYWtlIHN1cmUgeW91IGhhdmUgb25seSBvbmUgY29weSBvZiBSZWFjdCAoYW5kIGlkZWFsbHksIHN3aXRjaCB0byBSZWFjdERPTS5jcmVhdGVQb3J0YWwpLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZnJlZXplKGZha2VJbnRlcm5hbEluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV4dFByb3BzKSB7XG4gIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIHtcbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBJbnZva2UgdGhlIGZ1bmN0aW9uIGFuIGV4dHJhIHRpbWUgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuICAgICAgICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHBhcnRpYWxTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG5cbiAge1xuICAgIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZShjdG9yLCBwYXJ0aWFsU3RhdGUpO1xuICB9IC8vIE1lcmdlIHRoZSBwYXJ0aWFsIHN0YXRlIGFuZCB0aGUgcHJldmlvdXMgc3RhdGUuXG5cblxuICB2YXIgbWVtb2l6ZWRTdGF0ZSA9IHBhcnRpYWxTdGF0ZSA9PT0gbnVsbCB8fCBwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCA/IHByZXZTdGF0ZSA6IF9hc3NpZ24oe30sIHByZXZTdGF0ZSwgcGFydGlhbFN0YXRlKTtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG1lbW9pemVkU3RhdGU7IC8vIE9uY2UgdGhlIHVwZGF0ZSBxdWV1ZSBpcyBlbXB0eSwgcGVyc2lzdCB0aGUgZGVyaXZlZCBzdGF0ZSBvbnRvIHRoZVxuICAvLyBiYXNlIHN0YXRlLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIFF1ZXVlIGlzIGFsd2F5cyBub24tbnVsbCBmb3IgY2xhc3Nlc1xuICAgIHZhciB1cGRhdGVRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICAgIHVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZSA9IG1lbW9pemVkU3RhdGU7XG4gIH1cbn1cbnZhciBjbGFzc0NvbXBvbmVudFVwZGF0ZXIgPSB7XG4gIGlzTW91bnRlZDogaXNNb3VudGVkLFxuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG5cbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfSxcbiAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpO1xuICAgIHVwZGF0ZS50YWcgPSBSZXBsYWNlU3RhdGU7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAncmVwbGFjZVN0YXRlJyk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9LFxuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChpbnN0LCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7XG5cbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCkge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJbnZva2UgdGhlIGZ1bmN0aW9uIGFuIGV4dHJhIHRpbWUgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuICAgICAgICAgIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaG91bGRVcGRhdGUgPSBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgICB7XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3IoJyVzLnNob3VsZENvbXBvbmVudFVwZGF0ZSgpOiBSZXR1cm5lZCB1bmRlZmluZWQgaW5zdGVhZCBvZiBhICcgKyAnYm9vbGVhbiB2YWx1ZS4gTWFrZSBzdXJlIHRvIHJldHVybiB0cnVlIG9yIGZhbHNlLicsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gIH1cblxuICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgY3Rvci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQpIHtcbiAgICByZXR1cm4gIXNoYWxsb3dFcXVhbChvbGRQcm9wcywgbmV3UHJvcHMpIHx8ICFzaGFsbG93RXF1YWwob2xkU3RhdGUsIG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuICAgIHZhciByZW5kZXJQcmVzZW50ID0gaW5zdGFuY2UucmVuZGVyO1xuXG4gICAgaWYgKCFyZW5kZXJQcmVzZW50KSB7XG4gICAgICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgdHlwZW9mIGN0b3IucHJvdG90eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArICdpbnN0YW5jZTogZGlkIHlvdSBhY2NpZGVudGFsbHkgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvcj8nLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCclcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCAnICsgJ2luc3RhbmNlOiB5b3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGRlZmluZSBgcmVuZGVyYC4nLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZ2V0SW5pdGlhbFN0YXRlICYmICFpbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUuaXNSZWFjdENsYXNzQXBwcm92ZWQgJiYgIWluc3RhbmNlLnN0YXRlKSB7XG4gICAgICBlcnJvcignZ2V0SW5pdGlhbFN0YXRlIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBkZWZpbmUgYSBzdGF0ZSBwcm9wZXJ0eSBpbnN0ZWFkPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMgJiYgIWluc3RhbmNlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCkge1xuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICsgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArICdVc2UgYSBzdGF0aWMgcHJvcGVydHkgdG8gZGVmaW5lIGRlZmF1bHRQcm9wcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5wcm9wVHlwZXMpIHtcbiAgICAgIGVycm9yKCdwcm9wVHlwZXMgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBwcm9wVHlwZXMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuY29udGV4dFR5cGUpIHtcbiAgICAgIGVycm9yKCdjb250ZXh0VHlwZSB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGluc3RhbmNlLmNvbnRleHRUeXBlcykge1xuICAgICAgICBlcnJvcignY29udGV4dFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgY29udGV4dFR5cGVzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdG9yLmNvbnRleHRUeXBlICYmIGN0b3IuY29udGV4dFR5cGVzICYmICFkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcy5oYXMoY3RvcikpIHtcbiAgICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMuYWRkKGN0b3IpO1xuXG4gICAgICAgIGVycm9yKCclcyBkZWNsYXJlcyBib3RoIGNvbnRleHRUeXBlcyBhbmQgY29udGV4dFR5cGUgc3RhdGljIHByb3BlcnRpZXMuICcgKyAnVGhlIGxlZ2FjeSBjb250ZXh0VHlwZXMgcHJvcGVydHkgd2lsbCBiZSBpZ25vcmVkLicsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50U2hvdWxkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgKyAnVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzICcgKyAnZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGN0b3IucHJvdG90eXBlICYmIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ICYmIHR5cGVvZiBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBzaG91bGRDb21wb25lbnRVcGRhdGUoKS4gJyArICdzaG91bGRDb21wb25lbnRVcGRhdGUgc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gZXh0ZW5kaW5nIFJlYWN0LlB1cmVDb21wb25lbnQuICcgKyAnUGxlYXNlIGV4dGVuZCBSZWFjdC5Db21wb25lbnQgaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIGlzIHVzZWQuJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQSBwdXJlIGNvbXBvbmVudCcpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnREaWRVbm1vdW50KCkuIEJ1dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuICcgKyAnRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxVbm1vdW50KCk/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzKCkuIEJ1dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuICcgKyAnSWYgeW91IG1lYW50IHRvIHVwZGF0ZSB0aGUgc3RhdGUgaW4gcmVzcG9uc2UgdG8gY2hhbmdpbmcgcHJvcHMsICcgKyAndXNlIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKS4gSWYgeW91IG1lYW50IHRvIGZldGNoIGRhdGEgb3IgJyArICdydW4gc2lkZS1lZmZlY3RzIG9yIG11dGF0aW9ucyBhZnRlciBSZWFjdCBoYXMgdXBkYXRlZCB0aGUgVUksIHVzZSBjb21wb25lbnREaWRVcGRhdGUoKS4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIGhhc011dGF0ZWRQcm9wcyA9IGluc3RhbmNlLnByb3BzICE9PSBuZXdQcm9wcztcblxuICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gdW5kZWZpbmVkICYmIGhhc011dGF0ZWRQcm9wcykge1xuICAgICAgZXJyb3IoJyVzKC4uLik6IFdoZW4gY2FsbGluZyBzdXBlcigpIGluIGAlc2AsIG1ha2Ugc3VyZSB0byBwYXNzICcgKyBcInVwIHRoZSBzYW1lIHByb3BzIHRoYXQgeW91ciBjb21wb25lbnQncyBjb25zdHJ1Y3RvciB3YXMgcGFzc2VkLlwiLCBuYW1lLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZGVmYXVsdFByb3BzKSB7XG4gICAgICBlcnJvcignU2V0dGluZyBkZWZhdWx0UHJvcHMgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSBpZ25vcmVkLicgKyAnIEluc3RlYWQsIGRlZmluZSBkZWZhdWx0UHJvcHMgYXMgYSBzdGF0aWMgcHJvcGVydHkgb24gJXMuJywgbmFtZSwgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlICE9PSAnZnVuY3Rpb24nICYmICFkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuaGFzKGN0b3IpKSB7XG4gICAgICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuYWRkKGN0b3IpO1xuXG4gICAgICBlcnJvcignJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgc2hvdWxkIGJlIHVzZWQgd2l0aCBjb21wb25lbnREaWRVcGRhdGUoKS4gJyArICdUaGlzIGNvbXBvbmVudCBkZWZpbmVzIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgb25seS4nLCBnZXRDb21wb25lbnROYW1lKGN0b3IpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYSBzdGF0aWMgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXM6IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdG9yLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGFuIGluc3RhbmNlIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgX3N0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG5cbiAgICBpZiAoX3N0YXRlICYmICh0eXBlb2YgX3N0YXRlICE9PSAnb2JqZWN0JyB8fCBpc0FycmF5KF9zdGF0ZSkpKSB7XG4gICAgICBlcnJvcignJXMuc3RhdGU6IG11c3QgYmUgc2V0IHRvIGFuIG9iamVjdCBvciBudWxsJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGN0b3IuY2hpbGRDb250ZXh0VHlwZXMgIT09ICdvYmplY3QnKSB7XG4gICAgICBlcnJvcignJXMuZ2V0Q2hpbGRDb250ZXh0KCk6IGNoaWxkQ29udGV4dFR5cGVzIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byAnICsgJ3VzZSBnZXRDaGlsZENvbnRleHQoKS4nLCBuYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSkge1xuICBpbnN0YW5jZS51cGRhdGVyID0gY2xhc3NDb21wb25lbnRVcGRhdGVyO1xuICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBpbnN0YW5jZTsgLy8gVGhlIGluc3RhbmNlIG5lZWRzIGFjY2VzcyB0byB0aGUgZmliZXIgc28gdGhhdCBpdCBjYW4gc2NoZWR1bGUgdXBkYXRlc1xuXG4gIHNldChpbnN0YW5jZSwgd29ya0luUHJvZ3Jlc3MpO1xuXG4gIHtcbiAgICBpbnN0YW5jZS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlID0gZmFrZUludGVybmFsSW5zdGFuY2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgcHJvcHMpIHtcbiAgdmFyIGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID0gZmFsc2U7XG4gIHZhciB1bm1hc2tlZENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIHZhciBjb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuXG4gIHtcbiAgICBpZiAoJ2NvbnRleHRUeXBlJyBpbiBjdG9yKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IC8vIEFsbG93IG51bGwgZm9yIGNvbmRpdGlvbmFsIGRlY2xhcmF0aW9uXG4gICAgICBjb250ZXh0VHlwZSA9PT0gbnVsbCB8fCBjb250ZXh0VHlwZSAhPT0gdW5kZWZpbmVkICYmIGNvbnRleHRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgJiYgY29udGV4dFR5cGUuX2NvbnRleHQgPT09IHVuZGVmaW5lZDsgLy8gTm90IGEgPENvbnRleHQuQ29uc3VtZXI+XG5cbiAgICAgIGlmICghaXNWYWxpZCAmJiAhZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmhhcyhjdG9yKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuYWRkKGN0b3IpO1xuICAgICAgICB2YXIgYWRkZW5kdW0gPSAnJztcblxuICAgICAgICBpZiAoY29udGV4dFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gdW5kZWZpbmVkLiAnICsgJ1RoaXMgY2FuIGJlIGNhdXNlZCBieSBhIHR5cG8gb3IgYnkgbWl4aW5nIHVwIG5hbWVkIGFuZCBkZWZhdWx0IGltcG9ydHMuICcgKyAnVGhpcyBjYW4gYWxzbyBoYXBwZW4gZHVlIHRvIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSwgc28gJyArICd0cnkgbW92aW5nIHRoZSBjcmVhdGVDb250ZXh0KCkgY2FsbCB0byBhIHNlcGFyYXRlIGZpbGUuJztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhICcgKyB0eXBlb2YgY29udGV4dFR5cGUgKyAnLic7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyB0aGUgQ29udGV4dC5Qcm92aWRlciBpbnN0ZWFkPyc7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFR5cGUuX2NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIDxDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgIGFkZGVuZHVtID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIHRoZSBDb250ZXh0LkNvbnN1bWVyIGluc3RlYWQ/JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGFuIG9iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhjb250ZXh0VHlwZSkuam9pbignLCAnKSArICd9Lic7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcignJXMgZGVmaW5lcyBhbiBpbnZhbGlkIGNvbnRleHRUeXBlLiAnICsgJ2NvbnRleHRUeXBlIHNob3VsZCBwb2ludCB0byB0aGUgQ29udGV4dCBvYmplY3QgcmV0dXJuZWQgYnkgUmVhY3QuY3JlYXRlQ29udGV4dCgpLiVzJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JywgYWRkZW5kdW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgY29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIHZhciBjb250ZXh0VHlwZXMgPSBjdG9yLmNvbnRleHRUeXBlcztcbiAgICBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA9IGNvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZDtcbiAgICBjb250ZXh0ID0gaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPyBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpIDogZW1wdHlDb250ZXh0T2JqZWN0O1xuICB9IC8vIEluc3RhbnRpYXRlIHR3aWNlIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cblxuXG4gIHtcbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBuZXcgY3Rvcihwcm9wcywgY29udGV4dCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSBuZXcgY3Rvcihwcm9wcywgY29udGV4dCk7XG4gIHZhciBzdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZSAhPT0gbnVsbCAmJiBpbnN0YW5jZS5zdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5zdGFuY2Uuc3RhdGUgOiBudWxsO1xuICBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcblxuICB7XG4gICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBzdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignYCVzYCB1c2VzIGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGJ1dCBpdHMgaW5pdGlhbCBzdGF0ZSBpcyAnICsgJyVzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZC4gSW5zdGVhZCwgZGVmaW5lIHRoZSBpbml0aWFsIHN0YXRlIGJ5ICcgKyAnYXNzaWduaW5nIGFuIG9iamVjdCB0byBgdGhpcy5zdGF0ZWAgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGAlc2AuICcgKyAnVGhpcyBlbnN1cmVzIHRoYXQgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYXJndW1lbnRzIGhhdmUgYSBjb25zaXN0ZW50IHNoYXBlLicsIGNvbXBvbmVudE5hbWUsIGluc3RhbmNlLnN0YXRlID09PSBudWxsID8gJ251bGwnIDogJ3VuZGVmaW5lZCcsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH0gLy8gSWYgbmV3IGNvbXBvbmVudCBBUElzIGFyZSBkZWZpbmVkLCBcInVuc2FmZVwiIGxpZmVjeWNsZXMgd29uJ3QgYmUgY2FsbGVkLlxuICAgIC8vIFdhcm4gYWJvdXQgdGhlc2UgbGlmZWN5Y2xlcyBpZiB0aGV5IGFyZSBwcmVzZW50LlxuICAgIC8vIERvbid0IHdhcm4gYWJvdXQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBtZXRob2RzIHRob3VnaC5cblxuXG4gICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBmb3VuZFdpbGxNb3VudE5hbWUgPSBudWxsO1xuICAgICAgdmFyIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSBudWxsO1xuICAgICAgdmFyIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSBudWxsO1xuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSAnY29tcG9uZW50V2lsbE1vdW50JztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsTW91bnQnO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSc7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgfHwgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSAhPT0gbnVsbCB8fCBmb3VuZFdpbGxVcGRhdGVOYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBfY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgICAgdmFyIG5ld0FwaU5hbWUgPSB0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgPyAnZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCknIDogJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlKCknO1xuXG4gICAgICAgIGlmICghZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5oYXMoX2NvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5hZGQoX2NvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgICAgZXJyb3IoJ1Vuc2FmZSBsZWdhY3kgbGlmZWN5Y2xlcyB3aWxsIG5vdCBiZSBjYWxsZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgbmV3IGNvbXBvbmVudCBBUElzLlxcblxcbicgKyAnJXMgdXNlcyAlcyBidXQgYWxzbyBjb250YWlucyB0aGUgZm9sbG93aW5nIGxlZ2FjeSBsaWZlY3ljbGVzOiVzJXMlc1xcblxcbicgKyAnVGhlIGFib3ZlIGxpZmVjeWNsZXMgc2hvdWxkIGJlIHJlbW92ZWQuIExlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6XFxuJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzJywgX2NvbXBvbmVudE5hbWUsIG5ld0FwaU5hbWUsIGZvdW5kV2lsbE1vdW50TmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbE1vdW50TmFtZSA6ICcnLCBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA6ICcnLCBmb3VuZFdpbGxVcGRhdGVOYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsVXBkYXRlTmFtZSA6ICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSAvLyBDYWNoZSB1bm1hc2tlZCBjb250ZXh0IHNvIHdlIGNhbiBhdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyBuZWNlc3NhcnkuXG4gIC8vIFJlYWN0RmliZXJDb250ZXh0IHVzdWFsbHkgdXBkYXRlcyB0aGlzIGNhY2hlIGJ1dCBjYW4ndCBmb3IgbmV3bHktY3JlYXRlZCBpbnN0YW5jZXMuXG5cblxuICBpZiAoaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIpIHtcbiAgICBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsTW91bnQod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gIHZhciBvbGRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCk7XG4gIH1cblxuICBpZiAob2xkU3RhdGUgIT09IGluc3RhbmNlLnN0YXRlKSB7XG4gICAge1xuICAgICAgZXJyb3IoJyVzLmNvbXBvbmVudFdpbGxNb3VudCgpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gdGhpcy5zdGF0ZSBpcyAnICsgXCJkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgKyAnY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICB9XG5cbiAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShpbnN0YW5jZSwgaW5zdGFuY2Uuc3RhdGUsIG51bGwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSwgbmV3UHJvcHMsIG5leHRDb250ZXh0KSB7XG4gIHZhciBvbGRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICB9XG5cbiAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBvbGRTdGF0ZSkge1xuICAgIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJyVzLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKTogQXNzaWduaW5nIGRpcmVjdGx5IHRvICcgKyBcInRoaXMuc3RhdGUgaXMgZGVwcmVjYXRlZCAoZXhjZXB0IGluc2lkZSBhIGNvbXBvbmVudCdzIFwiICsgJ2NvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoaW5zdGFuY2UsIGluc3RhbmNlLnN0YXRlLCBudWxsKTtcbiAgfVxufSAvLyBJbnZva2VzIHRoZSBtb3VudCBsaWZlLWN5Y2xlcyBvbiBhIHByZXZpb3VzbHkgbmV2ZXIgcmVuZGVyZWQgaW5zdGFuY2UuXG5cblxuZnVuY3Rpb24gbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIGNoZWNrQ2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMpO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICBpbnN0YW5jZS5wcm9wcyA9IG5ld1Byb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIGluc3RhbmNlLnJlZnMgPSBlbXB0eVJlZnNPYmplY3Q7XG4gIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBpbnN0YW5jZS5jb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIGluc3RhbmNlLmNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAge1xuICAgIGlmIChpbnN0YW5jZS5zdGF0ZSA9PT0gbmV3UHJvcHMpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclczogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFzc2lnbiBwcm9wcyBkaXJlY3RseSB0byBzdGF0ZSAnICsgXCJiZWNhdXNlIHVwZGF0ZXMgdG8gcHJvcHMgd29uJ3QgYmUgcmVmbGVjdGVkIGluIHN0YXRlLiBcIiArICdJbiBtb3N0IGNhc2VzLCBpdCBpcyBiZXR0ZXIgdG8gdXNlIHByb3BzIGRpcmVjdGx5LicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV3UHJvcHMpO1xuICAgIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfSAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuXG4gIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICE9PSAnZnVuY3Rpb24nICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGNhbGxDb21wb25lbnRXaWxsTW91bnQod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTsgLy8gSWYgd2UgaGFkIGFkZGl0aW9uYWwgc3RhdGUgdXBkYXRlcyBkdXJpbmcgdGhpcyBsaWZlLWN5Y2xlLCBsZXQnc1xuICAgIC8vIHByb2Nlc3MgdGhlbSBub3cuXG5cbiAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICAgIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lTW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICBpbnN0YW5jZS5wcm9wcyA9IG9sZFByb3BzO1xuICB2YXIgb2xkQ29udGV4dCA9IGluc3RhbmNlLmNvbnRleHQ7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG4gIHZhciBuZXh0Q29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIG5leHRDb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBuZXh0TGVnYWN5VW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBuZXh0Q29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIG5leHRMZWdhY3lVbm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICB2YXIgaGFzTmV3TGlmZWN5Y2xlcyA9IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nOyAvLyBOb3RlOiBEdXJpbmcgdGhlc2UgbGlmZS1jeWNsZXMsIGluc3RhbmNlLnByb3BzL2luc3RhbmNlLnN0YXRlIGFyZSB3aGF0XG4gIC8vIGV2ZXIgdGhlIHByZXZpb3VzbHkgYXR0ZW1wdGVkIHRvIHJlbmRlciAtIG5vdCB0aGUgXCJjdXJyZW50XCIuIEhvd2V2ZXIsXG4gIC8vIGR1cmluZyBjb21wb25lbnREaWRVcGRhdGUgd2UgcGFzcyB0aGUgXCJjdXJyZW50XCIgcHJvcHMuXG4gIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuXG4gIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGlmIChvbGRQcm9wcyAhPT0gbmV3UHJvcHMgfHwgb2xkQ29udGV4dCAhPT0gbmV4dENvbnRleHQpIHtcbiAgICAgIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSwgbmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpO1xuICB2YXIgb2xkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgbmV3U3RhdGUgPSBpbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlO1xuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG9sZFByb3BzID09PSBuZXdQcm9wcyAmJiBvbGRTdGF0ZSA9PT0gbmV3U3RhdGUgJiYgIWhhc0NvbnRleHRDaGFuZ2VkKCkgJiYgIWNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSkge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV3UHJvcHMpO1xuICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIHZhciBzaG91bGRVcGRhdGUgPSBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgfHwgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9IC8vIElmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5lZCBmYWxzZSwgd2Ugc2hvdWxkIHN0aWxsIHVwZGF0ZSB0aGVcbiAgICAvLyBtZW1vaXplZCBzdGF0ZSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgd29yayBjYW4gYmUgcmV1c2VkLlxuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV3UHJvcHM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9IC8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UncyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHBvaW50ZXJzIGV2ZW5cbiAgLy8gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2UuXG5cblxuICBpbnN0YW5jZS5wcm9wcyA9IG5ld1Byb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IG5ld1N0YXRlO1xuICBpbnN0YW5jZS5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG4gIHJldHVybiBzaG91bGRVcGRhdGU7XG59IC8vIEludm9rZXMgdGhlIHVwZGF0ZSBsaWZlLWN5Y2xlcyBhbmQgcmV0dXJucyBmYWxzZSBpZiBpdCBzaG91bGRuJ3QgcmVyZW5kZXIuXG5cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3NJbnN0YW5jZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciB1bnJlc29sdmVkT2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlID09PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA/IHVucmVzb2x2ZWRPbGRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMod29ya0luUHJvZ3Jlc3MudHlwZSwgdW5yZXNvbHZlZE9sZFByb3BzKTtcbiAgaW5zdGFuY2UucHJvcHMgPSBvbGRQcm9wcztcbiAgdmFyIHVucmVzb2x2ZWROZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuICB2YXIgbmV4dENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmV4dFVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgbmV4dENvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBuZXh0VW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgdmFyIGhhc05ld0xpZmVjeWNsZXMgPSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJzsgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAvLyBldmVyIHRoZSBwcmV2aW91c2x5IGF0dGVtcHRlZCB0byByZW5kZXIgLSBub3QgdGhlIFwiY3VycmVudFwiLiBIb3dldmVyLFxuICAvLyBkdXJpbmcgY29tcG9uZW50RGlkVXBkYXRlIHdlIHBhc3MgdGhlIFwiY3VycmVudFwiIHByb3BzLlxuICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSB1bnJlc29sdmVkTmV3UHJvcHMgfHwgb2xkQ29udGV4dCAhPT0gbmV4dENvbnRleHQpIHtcbiAgICAgIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSwgbmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpO1xuICB2YXIgb2xkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgbmV3U3RhdGUgPSBpbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlO1xuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyA9PT0gdW5yZXNvbHZlZE5ld1Byb3BzICYmIG9sZFN0YXRlID09PSBuZXdTdGF0ZSAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSAmJiAhY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpKSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV3UHJvcHMpO1xuICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIHZhciBzaG91bGRVcGRhdGUgPSBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgfHwgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICB9XG4gICAgfSAvLyBJZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJuZWQgZmFsc2UsIHdlIHNob3VsZCBzdGlsbCB1cGRhdGUgdGhlXG4gICAgLy8gbWVtb2l6ZWQgcHJvcHMvc3RhdGUgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHdvcmsgY2FuIGJlIHJldXNlZC5cblxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5ld1Byb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfSAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIGluc3RhbmNlJ3Mgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCBwb2ludGVycyBldmVuXG4gIC8vIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlLlxuXG5cbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgaW5zdGFuY2UuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG52YXIgZGlkV2FybkFib3V0TWFwcztcbnZhciBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nO1xudmFyIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZztcblxudmFyIHdhcm5Gb3JNaXNzaW5nS2V5ID0gZnVuY3Rpb24gKGNoaWxkLCByZXR1cm5GaWJlcikge307XG5cbntcbiAgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcbiAgLyoqXG4gICAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAgICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gICAqIHVwZGF0ZXMuXG4gICAqL1xuXG4gIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xuICBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmcgPSB7fTtcblxuICB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChjaGlsZCwgcmV0dXJuRmliZXIpIHtcbiAgICBpZiAoY2hpbGQgPT09IG51bGwgfHwgdHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghY2hpbGQuX3N0b3JlIHx8IGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgfHwgY2hpbGQua2V5ICE9IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoISh0eXBlb2YgY2hpbGQuX3N0b3JlID09PSAnb2JqZWN0JykpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QgQ29tcG9uZW50IGluIHdhcm5Gb3JNaXNzaW5nS2V5IHNob3VsZCBoYXZlIGEgX3N0b3JlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjb21wb25lbnROYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjb21wb25lbnROYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgJyArICdcImtleVwiIHByb3AuIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciAnICsgJ21vcmUgaW5mb3JtYXRpb24uJyk7XG4gIH07XG59XG5cbnZhciBpc0FycmF5JDEgPSBBcnJheS5pc0FycmF5O1xuXG5mdW5jdGlvbiBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQpIHtcbiAgdmFyIG1peGVkUmVmID0gZWxlbWVudC5yZWY7XG5cbiAgaWYgKG1peGVkUmVmICE9PSBudWxsICYmIHR5cGVvZiBtaXhlZFJlZiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbWl4ZWRSZWYgIT09ICdvYmplY3QnKSB7XG4gICAge1xuICAgICAgLy8gVE9ETzogQ2xlYW4gdGhpcyB1cCBvbmNlIHdlIHR1cm4gb24gdGhlIHN0cmluZyByZWYgd2FybmluZyBmb3JcbiAgICAgIC8vIGV2ZXJ5b25lLCBiZWNhdXNlIHRoZSBzdHJpY3QgbW9kZSBjYXNlIHdpbGwgbm8gbG9uZ2VyIGJlIHJlbGV2YW50XG4gICAgICBpZiAoKHJldHVybkZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlIHx8IHdhcm5BYm91dFN0cmluZ1JlZnMpICYmIC8vIFdlIHdhcm4gaW4gUmVhY3RFbGVtZW50LmpzIGlmIG93bmVyIGFuZCBzZWxmIGFyZSBlcXVhbCBmb3Igc3RyaW5nIHJlZnNcbiAgICAgIC8vIGJlY2F1c2UgdGhlc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uXG4gICAgICAvLyB1c2luZyBhIGNvZGVtb2QuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgaGF2ZSB0byB3YXJuIGFib3V0IHN0cmluZyByZWZzIGFnYWluLlxuICAgICAgIShlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9zZWxmICYmIGVsZW1lbnQuX293bmVyLnN0YXRlTm9kZSAhPT0gZWxlbWVudC5fc2VsZikpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVycm9yKCdBIHN0cmluZyByZWYsIFwiJXNcIiwgaGFzIGJlZW4gZm91bmQgd2l0aGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gJyArICdTdHJpbmcgcmVmcyBhcmUgYSBzb3VyY2Ugb2YgcG90ZW50aWFsIGJ1Z3MgYW5kIHNob3VsZCBiZSBhdm9pZGVkLiAnICsgJ1dlIHJlY29tbWVuZCB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIG1peGVkUmVmKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbGVtZW50Ll9vd25lcikge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgaW5zdDtcblxuICAgICAgaWYgKG93bmVyKSB7XG4gICAgICAgIHZhciBvd25lckZpYmVyID0gb3duZXI7XG5cbiAgICAgICAgaWYgKCEob3duZXJGaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkZ1bmN0aW9uIGNvbXBvbmVudHMgY2Fubm90IGhhdmUgc3RyaW5nIHJlZnMuIFdlIHJlY29tbWVuZCB1c2luZyB1c2VSZWYoKSBpbnN0ZWFkLiBMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpbnN0ID0gb3duZXJGaWJlci5zdGF0ZU5vZGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaW5zdCkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiTWlzc2luZyBvd25lciBmb3Igc3RyaW5nIHJlZiBcIiArIG1peGVkUmVmICsgXCIuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc3RyaW5nUmVmID0gJycgKyBtaXhlZFJlZjsgLy8gQ2hlY2sgaWYgcHJldmlvdXMgc3RyaW5nIHJlZiBtYXRjaGVzIG5ldyBzdHJpbmcgcmVmXG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQucmVmICE9PSBudWxsICYmIHR5cGVvZiBjdXJyZW50LnJlZiA9PT0gJ2Z1bmN0aW9uJyAmJiBjdXJyZW50LnJlZi5fc3RyaW5nUmVmID09PSBzdHJpbmdSZWYpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQucmVmO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVmID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciByZWZzID0gaW5zdC5yZWZzO1xuXG4gICAgICAgIGlmIChyZWZzID09PSBlbXB0eVJlZnNPYmplY3QpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgbGF6eSBwb29sZWQgZnJvemVuIG9iamVjdCwgc28gd2UgbmVlZCB0byBpbml0aWFsaXplLlxuICAgICAgICAgIHJlZnMgPSBpbnN0LnJlZnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGRlbGV0ZSByZWZzW3N0cmluZ1JlZl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmc1tzdHJpbmdSZWZdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJlZi5fc3RyaW5nUmVmID0gc3RyaW5nUmVmO1xuICAgICAgcmV0dXJuIHJlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEodHlwZW9mIG1peGVkUmVmID09PSAnc3RyaW5nJykpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHJlZiB0byBiZSBhIGZ1bmN0aW9uLCBhIHN0cmluZywgYW4gb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZVJlZigpLCBvciBudWxsLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFlbGVtZW50Ll9vd25lcikge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRWxlbWVudCByZWYgd2FzIHNwZWNpZmllZCBhcyBhIHN0cmluZyAoXCIgKyBtaXhlZFJlZiArIFwiKSBidXQgbm8gb3duZXIgd2FzIHNldC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1heSBiZSBhZGRpbmcgYSByZWYgdG8gYSBmdW5jdGlvbiBjb21wb25lbnRcXG4yLiBZb3UgbWF5IGJlIGFkZGluZyBhIHJlZiB0byBhIGNvbXBvbmVudCB0aGF0IHdhcyBub3QgY3JlYXRlZCBpbnNpZGUgYSBjb21wb25lbnQncyByZW5kZXIgbWV0aG9kXFxuMy4gWW91IGhhdmUgbXVsdGlwbGUgY29waWVzIG9mIFJlYWN0IGxvYWRlZFxcblNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVmcy1tdXN0LWhhdmUtb3duZXIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtaXhlZFJlZjtcbn1cblxuZnVuY3Rpb24gdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCkge1xuICBpZiAocmV0dXJuRmliZXIudHlwZSAhPT0gJ3RleHRhcmVhJykge1xuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIiArIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3Q2hpbGQpID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMobmV3Q2hpbGQpLmpvaW4oJywgJykgKyAnfScgOiBuZXdDaGlsZCkgKyBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpIHtcbiAge1xuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgIGlmIChvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmdbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmdbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0Z1bmN0aW9ucyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQuIFRoaXMgbWF5IGhhcHBlbiBpZiAnICsgJ3lvdSByZXR1cm4gYSBDb21wb25lbnQgaW5zdGVhZCBvZiA8Q29tcG9uZW50IC8+IGZyb20gcmVuZGVyLiAnICsgJ09yIG1heWJlIHlvdSBtZWFudCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gcmV0dXJuIGl0LicpO1xuICB9XG59IC8vIFdlIGF2b2lkIGlubGluaW5nIHRoaXMgdG8gYXZvaWQgcG90ZW50aWFsIGRlb3B0cyBmcm9tIHVzaW5nIHRyeS9jYXRjaC5cbi8vIHRvIGJlIGFibGUgdG8gb3B0aW1pemUgZWFjaCBwYXRoIGluZGl2aWR1YWxseSBieSBicmFuY2hpbmcgZWFybHkuIFRoaXMgbmVlZHNcbi8vIGEgY29tcGlsZXIgb3Igd2UgY2FuIGRvIGl0IG1hbnVhbGx5LiBIZWxwZXJzIHRoYXQgZG9uJ3QgbmVlZCB0aGlzIGJyYW5jaGluZ1xuLy8gbGl2ZSBvdXRzaWRlIG9mIHRoaXMgZnVuY3Rpb24uXG5cblxuZnVuY3Rpb24gQ2hpbGRSZWNvbmNpbGVyKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgZnVuY3Rpb24gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkVG9EZWxldGUpIHtcbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBEZWxldGlvbnMgYXJlIGFkZGVkIGluIHJldmVyc2VkIG9yZGVyIHNvIHdlIGFkZCBpdCB0byB0aGUgZnJvbnQuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIHJldHVybiBmaWJlcidzIGVmZmVjdCBsaXN0IGlzIGVtcHR5IGV4Y2VwdCBmb3JcbiAgICAvLyBkZWxldGlvbnMsIHNvIHdlIGNhbiBqdXN0IGFwcGVuZCB0aGUgZGVsZXRpb24gdG8gdGhlIGxpc3QuIFRoZSByZW1haW5pbmdcbiAgICAvLyBlZmZlY3RzIGFyZW4ndCBhZGRlZCB1bnRpbCB0aGUgY29tcGxldGUgcGhhc2UuIE9uY2Ugd2UgaW1wbGVtZW50XG4gICAgLy8gcmVzdW1pbmcsIHRoaXMgbWF5IG5vdCBiZSB0cnVlLlxuXG5cbiAgICB2YXIgbGFzdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdCAhPT0gbnVsbCkge1xuICAgICAgbGFzdC5uZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIH1cblxuICAgIGNoaWxkVG9EZWxldGUubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY2hpbGRUb0RlbGV0ZS5mbGFncyA9IERlbGV0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyBUT0RPOiBGb3IgdGhlIHNob3VsZENsb25lIGNhc2UsIHRoaXMgY291bGQgYmUgbWljcm8tb3B0aW1pemVkIGEgYml0IGJ5XG4gICAgLy8gYXNzdW1pbmcgdGhhdCBhZnRlciB0aGUgZmlyc3QgY2hpbGQgd2UndmUgYWxyZWFkeSBhZGRlZCBldmVyeXRoaW5nLlxuXG5cbiAgICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkVG9EZWxldGUgIT09IG51bGwpIHtcbiAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKTtcbiAgICAgIGNoaWxkVG9EZWxldGUgPSBjaGlsZFRvRGVsZXRlLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpIHtcbiAgICAvLyBBZGQgdGhlIHJlbWFpbmluZyBjaGlsZHJlbiB0byBhIHRlbXBvcmFyeSBtYXAgc28gdGhhdCB3ZSBjYW4gZmluZCB0aGVtIGJ5XG4gICAgLy8ga2V5cyBxdWlja2x5LiBJbXBsaWNpdCAobnVsbCkga2V5cyBnZXQgYWRkZWQgdG8gdGhpcyBzZXQgd2l0aCB0aGVpciBpbmRleFxuICAgIC8vIGluc3RlYWQuXG4gICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBuZXcgTWFwKCk7XG4gICAgdmFyIGV4aXN0aW5nQ2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChleGlzdGluZ0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBpZiAoZXhpc3RpbmdDaGlsZC5rZXkgIT09IG51bGwpIHtcbiAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5zZXQoZXhpc3RpbmdDaGlsZC5rZXksIGV4aXN0aW5nQ2hpbGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5zZXQoZXhpc3RpbmdDaGlsZC5pbmRleCwgZXhpc3RpbmdDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGV4aXN0aW5nQ2hpbGQgPSBleGlzdGluZ0NoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4aXN0aW5nQ2hpbGRyZW47XG4gIH1cblxuICBmdW5jdGlvbiB1c2VGaWJlcihmaWJlciwgcGVuZGluZ1Byb3BzKSB7XG4gICAgLy8gV2UgY3VycmVudGx5IHNldCBzaWJsaW5nIHRvIG51bGwgYW5kIGluZGV4IHRvIDAgaGVyZSBiZWNhdXNlIGl0IGlzIGVhc3lcbiAgICAvLyB0byBmb3JnZXQgdG8gZG8gYmVmb3JlIHJldHVybmluZyBpdC4gRS5nLiBmb3IgdGhlIHNpbmdsZSBjaGlsZCBjYXNlLlxuICAgIHZhciBjbG9uZSA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGZpYmVyLCBwZW5kaW5nUHJvcHMpO1xuICAgIGNsb25lLmluZGV4ID0gMDtcbiAgICBjbG9uZS5zaWJsaW5nID0gbnVsbDtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBmdW5jdGlvbiBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0luZGV4KSB7XG4gICAgbmV3RmliZXIuaW5kZXggPSBuZXdJbmRleDtcblxuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnQgPSBuZXdGaWJlci5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgdmFyIG9sZEluZGV4ID0gY3VycmVudC5pbmRleDtcblxuICAgICAgaWYgKG9sZEluZGV4IDwgbGFzdFBsYWNlZEluZGV4KSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBtb3ZlLlxuICAgICAgICBuZXdGaWJlci5mbGFncyA9IFBsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXRlbSBjYW4gc3RheSBpbiBwbGFjZS5cbiAgICAgICAgcmV0dXJuIG9sZEluZGV4O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIGluc2VydGlvbi5cbiAgICAgIG5ld0ZpYmVyLmZsYWdzID0gUGxhY2VtZW50O1xuICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwbGFjZVNpbmdsZUNoaWxkKG5ld0ZpYmVyKSB7XG4gICAgLy8gVGhpcyBpcyBzaW1wbGVyIGZvciB0aGUgc2luZ2xlIGNoaWxkIGNhc2UuIFdlIG9ubHkgbmVlZCB0byBkbyBhXG4gICAgLy8gcGxhY2VtZW50IGZvciBpbnNlcnRpbmcgbmV3IGNoaWxkcmVuLlxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgbmV3RmliZXIuZmxhZ3MgPSBQbGFjZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0ZpYmVyO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnQsIHRleHRDb250ZW50LCBsYW5lcykge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBIb3N0VGV4dCkge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQodGV4dENvbnRlbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCB0ZXh0Q29udGVudCk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50LCBsYW5lcykge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoY3VycmVudC5lbGVtZW50VHlwZSA9PT0gZWxlbWVudC50eXBlIHx8ICggLy8gS2VlcCB0aGlzIGNoZWNrIGlubGluZSBzbyBpdCBvbmx5IHJ1bnMgb24gdGhlIGZhbHNlIHBhdGg6XG4gICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGN1cnJlbnQsIGVsZW1lbnQpICkpIHtcbiAgICAgICAgLy8gTW92ZSBiYXNlZCBvbiBpbmRleFxuICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBlbGVtZW50LnByb3BzKTtcbiAgICAgICAgZXhpc3RpbmcucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KTtcbiAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG5cbiAgICAgICAge1xuICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICBleGlzdGluZy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgfVxuICAgIH0gLy8gSW5zZXJ0XG5cblxuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgY3JlYXRlZC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnQsIHBvcnRhbCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gSG9zdFBvcnRhbCB8fCBjdXJyZW50LnN0YXRlTm9kZS5jb250YWluZXJJbmZvICE9PSBwb3J0YWwuY29udGFpbmVySW5mbyB8fCBjdXJyZW50LnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiAhPT0gcG9ydGFsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIHBvcnRhbC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZnJhZ21lbnQsIGxhbmVzLCBrZXkpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gRnJhZ21lbnQpIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmcmFnbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMsIGtleSk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgZnJhZ21lbnQpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLiBJZiB0aGUgcHJldmlvdXMgbm9kZSBpcyBpbXBsaWNpdGx5IGtleWVkXG4gICAgICAvLyB3ZSBjYW4gY29udGludWUgdG8gcmVwbGFjZSBpdCB3aXRob3V0IGFib3J0aW5nIGV2ZW4gaWYgaXQgaXMgbm90IGEgdGV4dFxuICAgICAgLy8gbm9kZS5cbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCgnJyArIG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9jcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICAgICAgICBfY3JlYXRlZC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIG51bGwsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIF9jcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVkO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfY3JlYXRlZDIgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgICAgICAgX2NyZWF0ZWQyLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVkMjtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHZhciBfY3JlYXRlZDMgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMsIG51bGwpO1xuXG4gICAgICAgIF9jcmVhdGVkMy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVkMztcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIC8vIFVwZGF0ZSB0aGUgZmliZXIgaWYgdGhlIGtleXMgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gbnVsbC5cbiAgICB2YXIga2V5ID0gb2xkRmliZXIgIT09IG51bGwgPyBvbGRGaWJlci5rZXkgOiBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMuIElmIHRoZSBwcmV2aW91cyBub2RlIGlzIGltcGxpY2l0bHkga2V5ZWRcbiAgICAgIC8vIHdlIGNhbiBjb250aW51ZSB0byByZXBsYWNlIGl0IHdpdGhvdXQgYWJvcnRpbmcgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXh0XG4gICAgICAvLyBub2RlLlxuICAgICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBvbGRGaWJlciwgJycgKyBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuLCBsYW5lcywga2V5KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cywgc28gd2UgbmVpdGhlciBoYXZlIHRvIGNoZWNrIHRoZSBvbGQgbm9yXG4gICAgICAvLyBuZXcgbm9kZSBmb3IgdGhlIGtleS4gSWYgYm90aCBhcmUgdGV4dCBub2RlcywgdGhleSBtYXRjaC5cbiAgICAgIHZhciBtYXRjaGVkRmliZXIgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdJZHgpIHx8IG51bGw7XG4gICAgICByZXR1cm4gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIG1hdGNoZWRGaWJlciwgJycgKyBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3Q2hpbGQua2V5ID09PSBudWxsID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5KSB8fCBudWxsO1xuXG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIsIG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuLCBsYW5lcywgbmV3Q2hpbGQua2V5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3Q2hpbGQua2V5ID09PSBudWxsID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5KSB8fCBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyMiwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIzID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlcjMsIG5ld0NoaWxkLCBsYW5lcywgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogV2FybnMgaWYgdGhlcmUgaXMgYSBkdXBsaWNhdGUgb3IgbWlzc2luZyBrZXlcbiAgICovXG5cblxuICBmdW5jdGlvbiB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKSB7XG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcgfHwgY2hpbGQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGtub3duS2V5cztcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChjaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB3YXJuRm9yTWlzc2luZ0tleShjaGlsZCwgcmV0dXJuRmliZXIpO1xuICAgICAgICAgIHZhciBrZXkgPSBjaGlsZC5rZXk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChrbm93bktleXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGtub3duS2V5cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGtub3duS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgha25vd25LZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvcignRW5jb3VudGVyZWQgdHdvIGNoaWxkcmVuIHdpdGggdGhlIHNhbWUga2V5LCBgJXNgLiAnICsgJ0tleXMgc2hvdWxkIGJlIHVuaXF1ZSBzbyB0aGF0IGNvbXBvbmVudHMgbWFpbnRhaW4gdGhlaXIgaWRlbnRpdHkgJyArICdhY3Jvc3MgdXBkYXRlcy4gTm9uLXVuaXF1ZSBrZXlzIG1heSBjYXVzZSBjaGlsZHJlbiB0byBiZSAnICsgJ2R1cGxpY2F0ZWQgYW5kL29yIG9taXR0ZWQgXHUyMDE0IHRoZSBiZWhhdmlvciBpcyB1bnN1cHBvcnRlZCBhbmQgJyArICdjb3VsZCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbi4nLCBrZXkpO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGtub3duS2V5cztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZHJlbiwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGFsZ29yaXRobSBjYW4ndCBvcHRpbWl6ZSBieSBzZWFyY2hpbmcgZnJvbSBib3RoIGVuZHMgc2luY2Ugd2VcbiAgICAvLyBkb24ndCBoYXZlIGJhY2twb2ludGVycyBvbiBmaWJlcnMuIEknbSB0cnlpbmcgdG8gc2VlIGhvdyBmYXIgd2UgY2FuIGdldFxuICAgIC8vIHdpdGggdGhhdCBtb2RlbC4gSWYgaXQgZW5kcyB1cCBub3QgYmVpbmcgd29ydGggdGhlIHRyYWRlb2Zmcywgd2UgY2FuXG4gICAgLy8gYWRkIGl0IGxhdGVyLlxuICAgIC8vIEV2ZW4gd2l0aCBhIHR3byBlbmRlZCBvcHRpbWl6YXRpb24sIHdlJ2Qgd2FudCB0byBvcHRpbWl6ZSBmb3IgdGhlIGNhc2VcbiAgICAvLyB3aGVyZSB0aGVyZSBhcmUgZmV3IGNoYW5nZXMgYW5kIGJydXRlIGZvcmNlIHRoZSBjb21wYXJpc29uIGluc3RlYWQgb2ZcbiAgICAvLyBnb2luZyBmb3IgdGhlIE1hcC4gSXQnZCBsaWtlIHRvIGV4cGxvcmUgaGl0dGluZyB0aGF0IHBhdGggZmlyc3QgaW5cbiAgICAvLyBmb3J3YXJkLW9ubHkgbW9kZSBhbmQgb25seSBnbyBmb3IgdGhlIE1hcCBvbmNlIHdlIG5vdGljZSB0aGF0IHdlIG5lZWRcbiAgICAvLyBsb3RzIG9mIGxvb2sgYWhlYWQuIFRoaXMgZG9lc24ndCBoYW5kbGUgcmV2ZXJzYWwgYXMgd2VsbCBhcyB0d28gZW5kZWRcbiAgICAvLyBzZWFyY2ggYnV0IHRoYXQncyB1bnVzdWFsLiBCZXNpZGVzLCBmb3IgdGhlIHR3byBlbmRlZCBvcHRpbWl6YXRpb24gdG9cbiAgICAvLyB3b3JrIG9uIEl0ZXJhYmxlcywgd2UnZCBuZWVkIHRvIGNvcHkgdGhlIHdob2xlIHNldC5cbiAgICAvLyBJbiB0aGlzIGZpcnN0IGl0ZXJhdGlvbiwgd2UnbGwganVzdCBsaXZlIHdpdGggaGl0dGluZyB0aGUgYmFkIGNhc2VcbiAgICAvLyAoYWRkaW5nIGV2ZXJ5dGhpbmcgdG8gYSBNYXApIGluIGZvciBldmVyeSBpbnNlcnQvbW92ZS5cbiAgICAvLyBJZiB5b3UgY2hhbmdlIHRoaXMgY29kZSwgYWxzbyB1cGRhdGUgcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcigpIHdoaWNoXG4gICAgLy8gdXNlcyB0aGUgc2FtZSBhbGdvcml0aG0uXG4gICAge1xuICAgICAgLy8gRmlyc3QsIHZhbGlkYXRlIGtleXMuXG4gICAgICB2YXIga25vd25LZXlzID0gbnVsbDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGQgPSBuZXdDaGlsZHJlbltpXTtcbiAgICAgICAga25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBudWxsO1xuICAgIHZhciBwcmV2aW91c05ld0ZpYmVyID0gbnVsbDtcbiAgICB2YXIgb2xkRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZDtcbiAgICB2YXIgbGFzdFBsYWNlZEluZGV4ID0gMDtcbiAgICB2YXIgbmV3SWR4ID0gMDtcbiAgICB2YXIgbmV4dE9sZEZpYmVyID0gbnVsbDtcblxuICAgIGZvciAoOyBvbGRGaWJlciAhPT0gbnVsbCAmJiBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICBpZiAob2xkRmliZXIuaW5kZXggPiBuZXdJZHgpIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXI7XG4gICAgICAgIG9sZEZpYmVyID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZHJlbltuZXdJZHhdLCBsYW5lcyk7XG5cbiAgICAgIGlmIChuZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGJyZWFrcyBvbiBlbXB0eSBzbG90cyBsaWtlIG51bGwgY2hpbGRyZW4uIFRoYXQnc1xuICAgICAgICAvLyB1bmZvcnR1bmF0ZSBiZWNhdXNlIGl0IHRyaWdnZXJzIHRoZSBzbG93IHBhdGggYWxsIHRoZSB0aW1lLiBXZSBuZWVkXG4gICAgICAgIC8vIGEgYmV0dGVyIHdheSB0byBjb21tdW5pY2F0ZSB3aGV0aGVyIHRoaXMgd2FzIGEgbWlzcyBvciBudWxsLFxuICAgICAgICAvLyBib29sZWFuLCB1bmRlZmluZWQsIGV0Yy5cbiAgICAgICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgaWYgKG9sZEZpYmVyICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIHNsb3QsIGJ1dCB3ZSBkaWRuJ3QgcmV1c2UgdGhlIGV4aXN0aW5nIGZpYmVyLCBzbyB3ZVxuICAgICAgICAgIC8vIG5lZWQgdG8gZGVsZXRlIHRoZSBleGlzdGluZyBjaGlsZC5cbiAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gbmV3RmliZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBEZWZlciBzaWJsaW5ncyBpZiB3ZSdyZSBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IGZvciB0aGlzIHNsb3QuXG4gICAgICAgIC8vIEkuZS4gaWYgd2UgaGFkIG51bGwgdmFsdWVzIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIGRlZmVyIHRoaXNcbiAgICAgICAgLy8gZm9yIGVhY2ggbnVsbCB2YWx1ZS4gSG93ZXZlciwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgdXBkYXRlU2xvdFxuICAgICAgICAvLyB3aXRoIHRoZSBwcmV2aW91cyBvbmUuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICB9XG5cbiAgICBpZiAobmV3SWR4ID09PSBuZXdDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgbmV3IGNoaWxkcmVuLiBXZSBjYW4gZGVsZXRlIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH1cblxuICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAvLyBzaW5jZSB0aGUgcmVzdCB3aWxsIGFsbCBiZSBpbnNlcnRpb25zLlxuICAgICAgZm9yICg7IG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspIHtcbiAgICAgICAgdmFyIF9uZXdGaWJlciA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZHJlbltuZXdJZHhdLCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKF9uZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH0gLy8gQWRkIGFsbCBjaGlsZHJlbiB0byBhIGtleSBtYXAgZm9yIHF1aWNrIGxvb2t1cHMuXG5cblxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTsgLy8gS2VlcCBzY2FubmluZyBhbmQgdXNlIHRoZSBtYXAgdG8gcmVzdG9yZSBkZWxldGVkIGl0ZW1zIGFzIG1vdmVzLlxuXG4gICAgZm9yICg7IG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspIHtcbiAgICAgIHZhciBfbmV3RmliZXIyID0gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBuZXdDaGlsZHJlbltuZXdJZHhdLCBsYW5lcyk7XG5cbiAgICAgIGlmIChfbmV3RmliZXIyICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgICAgaWYgKF9uZXdGaWJlcjIuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmV3IGZpYmVyIGlzIGEgd29yayBpbiBwcm9ncmVzcywgYnV0IGlmIHRoZXJlIGV4aXN0cyBhXG4gICAgICAgICAgICAvLyBjdXJyZW50LCB0aGF0IG1lYW5zIHRoYXQgd2UgcmV1c2VkIHRoZSBmaWJlci4gV2UgbmVlZCB0byBkZWxldGVcbiAgICAgICAgICAgIC8vIGl0IGZyb20gdGhlIGNoaWxkIGxpc3Qgc28gdGhhdCB3ZSBkb24ndCBhZGQgaXQgdG8gdGhlIGRlbGV0aW9uXG4gICAgICAgICAgICAvLyBsaXN0LlxuICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5kZWxldGUoX25ld0ZpYmVyMi5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBfbmV3RmliZXIyLmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXIyO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIEFueSBleGlzdGluZyBjaGlsZHJlbiB0aGF0IHdlcmVuJ3QgY29uc3VtZWQgYWJvdmUgd2VyZSBkZWxldGVkLiBXZSBuZWVkXG4gICAgICAvLyB0byBhZGQgdGhlbSB0byB0aGUgZGVsZXRpb24gbGlzdC5cbiAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZHJlbkl0ZXJhYmxlLCBsYW5lcykge1xuICAgIC8vIFRoaXMgaXMgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gYXMgcmVjb25jaWxlQ2hpbGRyZW5BcnJheSgpLFxuICAgIC8vIGJ1dCB1c2luZyB0aGUgaXRlcmF0b3IgaW5zdGVhZC5cbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG5cbiAgICBpZiAoISh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQW4gb2JqZWN0IGlzIG5vdCBhbiBpdGVyYWJsZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgcmVuZGVyaW5nIEdlbmVyYXRvcnMgYmVjYXVzZSBpdCdzIGEgbXV0YXRpb24uXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjk5NVxuICAgICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgLy8gJEZsb3dGaXhNZSBGbG93IGRvZXNuJ3Qga25vdyBhYm91dCB0b1N0cmluZ1RhZ1xuICAgICAgbmV3Q2hpbGRyZW5JdGVyYWJsZVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnR2VuZXJhdG9yJykge1xuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dEdlbmVyYXRvcnMpIHtcbiAgICAgICAgICBlcnJvcignVXNpbmcgR2VuZXJhdG9ycyBhcyBjaGlsZHJlbiBpcyB1bnN1cHBvcnRlZCBhbmQgd2lsbCBsaWtlbHkgeWllbGQgJyArICd1bmV4cGVjdGVkIHJlc3VsdHMgYmVjYXVzZSBlbnVtZXJhdGluZyBhIGdlbmVyYXRvciBtdXRhdGVzIGl0LiAnICsgJ1lvdSBtYXkgY29udmVydCBpdCB0byBhbiBhcnJheSB3aXRoIGBBcnJheS5mcm9tKClgIG9yIHRoZSAnICsgJ2BbLi4uc3ByZWFkXWAgb3BlcmF0b3IgYmVmb3JlIHJlbmRlcmluZy4gS2VlcCBpbiBtaW5kICcgKyAneW91IG1pZ2h0IG5lZWQgdG8gcG9seWZpbGwgdGhlc2UgZmVhdHVyZXMgZm9yIG9sZGVyIGJyb3dzZXJzLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IHRydWU7XG4gICAgICB9IC8vIFdhcm4gYWJvdXQgdXNpbmcgTWFwcyBhcyBjaGlsZHJlblxuXG5cbiAgICAgIGlmIChuZXdDaGlsZHJlbkl0ZXJhYmxlLmVudHJpZXMgPT09IGl0ZXJhdG9yRm4pIHtcbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNYXBzKSB7XG4gICAgICAgICAgZXJyb3IoJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHN1cHBvcnRlZC4gJyArICdVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICB9IC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgLy8gV2UnbGwgZ2V0IGEgZGlmZmVyZW50IGl0ZXJhdG9yIGxhdGVyIGZvciB0aGUgbWFpbiBwYXNzLlxuXG5cbiAgICAgIHZhciBfbmV3Q2hpbGRyZW4gPSBpdGVyYXRvckZuLmNhbGwobmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG5cbiAgICAgIGlmIChfbmV3Q2hpbGRyZW4pIHtcbiAgICAgICAgdmFyIGtub3duS2V5cyA9IG51bGw7XG5cbiAgICAgICAgdmFyIF9zdGVwID0gX25ld0NoaWxkcmVuLm5leHQoKTtcblxuICAgICAgICBmb3IgKDsgIV9zdGVwLmRvbmU7IF9zdGVwID0gX25ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgICAgIHZhciBjaGlsZCA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5ld0NoaWxkcmVuID0gaXRlcmF0b3JGbi5jYWxsKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgaWYgKCEobmV3Q2hpbGRyZW4gIT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQW4gaXRlcmFibGUgb2JqZWN0IHByb3ZpZGVkIG5vIGl0ZXJhdG9yLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBudWxsO1xuICAgIHZhciBwcmV2aW91c05ld0ZpYmVyID0gbnVsbDtcbiAgICB2YXIgb2xkRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZDtcbiAgICB2YXIgbGFzdFBsYWNlZEluZGV4ID0gMDtcbiAgICB2YXIgbmV3SWR4ID0gMDtcbiAgICB2YXIgbmV4dE9sZEZpYmVyID0gbnVsbDtcbiAgICB2YXIgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKTtcblxuICAgIGZvciAoOyBvbGRGaWJlciAhPT0gbnVsbCAmJiAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICBvbGRGaWJlciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuXG4gICAgICBpZiAobmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBicmVha3Mgb24gZW1wdHkgc2xvdHMgbGlrZSBudWxsIGNoaWxkcmVuLiBUaGF0J3NcbiAgICAgICAgLy8gdW5mb3J0dW5hdGUgYmVjYXVzZSBpdCB0cmlnZ2VycyB0aGUgc2xvdyBwYXRoIGFsbCB0aGUgdGltZS4gV2UgbmVlZFxuICAgICAgICAvLyBhIGJldHRlciB3YXkgdG8gY29tbXVuaWNhdGUgd2hldGhlciB0aGlzIHdhcyBhIG1pc3Mgb3IgbnVsbCxcbiAgICAgICAgLy8gYm9vbGVhbiwgdW5kZWZpbmVkLCBldGMuXG4gICAgICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBzbG90LCBidXQgd2UgZGlkbid0IHJldXNlIHRoZSBleGlzdGluZyBmaWJlciwgc28gd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogRGVmZXIgc2libGluZ3MgaWYgd2UncmUgbm90IGF0IHRoZSByaWdodCBpbmRleCBmb3IgdGhpcyBzbG90LlxuICAgICAgICAvLyBJLmUuIGlmIHdlIGhhZCBudWxsIHZhbHVlcyBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byBkZWZlciB0aGlzXG4gICAgICAgIC8vIGZvciBlYWNoIG51bGwgdmFsdWUuIEhvd2V2ZXIsIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBjYWxsIHVwZGF0ZVNsb3RcbiAgICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXAuZG9uZSkge1xuICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBuZXcgY2hpbGRyZW4uIFdlIGNhbiBkZWxldGUgdGhlIHJlc3QuXG4gICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBtb3JlIGV4aXN0aW5nIGNoaWxkcmVuIHdlIGNhbiBjaG9vc2UgYSBmYXN0IHBhdGhcbiAgICAgIC8vIHNpbmNlIHRoZSByZXN0IHdpbGwgYWxsIGJlIGluc2VydGlvbnMuXG4gICAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgdmFyIF9uZXdGaWJlcjMgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChfbmV3RmliZXIzID09PSBudWxsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjMsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyMztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXIzO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH0gLy8gQWRkIGFsbCBjaGlsZHJlbiB0byBhIGtleSBtYXAgZm9yIHF1aWNrIGxvb2t1cHMuXG5cblxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTsgLy8gS2VlcCBzY2FubmluZyBhbmQgdXNlIHRoZSBtYXAgdG8gcmVzdG9yZSBkZWxldGVkIGl0ZW1zIGFzIG1vdmVzLlxuXG4gICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICB2YXIgX25ld0ZpYmVyNCA9IHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuXG4gICAgICBpZiAoX25ld0ZpYmVyNCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChfbmV3RmliZXI0LmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCBmcm9tIHRoZSBjaGlsZCBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWRkIGl0IHRvIHRoZSBkZWxldGlvblxuICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKF9uZXdGaWJlcjQua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyNC5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyNCwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyNDtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXI0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgLy8gdG8gYWRkIHRoZW0gdG8gdGhlIGRlbGV0aW9uIGxpc3QuXG4gICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIHRleHRDb250ZW50LCBsYW5lcykge1xuICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBjaGVjayBmb3Iga2V5cyBvbiB0ZXh0IG5vZGVzIHNpbmNlIHdlIGRvbid0IGhhdmUgYVxuICAgIC8vIHdheSB0byBkZWZpbmUgdGhlbS5cbiAgICBpZiAoY3VycmVudEZpcnN0Q2hpbGQgIT09IG51bGwgJiYgY3VycmVudEZpcnN0Q2hpbGQudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG5vZGUgc28gbGV0J3MganVzdCB1cGRhdGUgaXQgYW5kIGRlbGV0ZVxuICAgICAgLy8gdGhlIHJlc3QuXG4gICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQuc2libGluZyk7XG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50Rmlyc3RDaGlsZCwgdGV4dENvbnRlbnQpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfSAvLyBUaGUgZXhpc3RpbmcgZmlyc3QgY2hpbGQgaXMgbm90IGEgdGV4dCBub2RlIHNvIHdlIG5lZWQgdG8gY3JlYXRlIG9uZVxuICAgIC8vIGFuZCBkZWxldGUgdGhlIGV4aXN0aW5nIG9uZXMuXG5cblxuICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KHRleHRDb250ZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBlbGVtZW50LCBsYW5lcykge1xuICAgIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgICB2YXIgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgLy8gVE9ETzogSWYga2V5ID09PSBudWxsIGFuZCBjaGlsZC5rZXkgPT09IG51bGwsIHRoZW4gdGhpcyBvbmx5IGFwcGxpZXMgdG9cbiAgICAgIC8vIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LlxuICAgICAgaWYgKGNoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoY2hpbGQudGFnKSB7XG4gICAgICAgICAgY2FzZSBGcmFnbWVudDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjaGlsZCwgZWxlbWVudC5wcm9wcy5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBleGlzdGluZy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgICAgICAgICBleGlzdGluZy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBCbG9jazpcblxuICAgICAgICAgIC8vIFdlIGludGVudGlvbmFsbHkgZmFsbHRocm91Z2ggaGVyZSBpZiBlbmFibGVCbG9ja3NBUEkgaXMgbm90IG9uLlxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZWQgbm8tZmFsbHRocm91Z2hcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChjaGlsZC5lbGVtZW50VHlwZSA9PT0gZWxlbWVudC50eXBlIHx8ICggLy8gS2VlcCB0aGlzIGNoZWNrIGlubGluZSBzbyBpdCBvbmx5IHJ1bnMgb24gdGhlIGZhbHNlIHBhdGg6XG4gICAgICAgICAgICAgICBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoY2hpbGQsIGVsZW1lbnQpICkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2V4aXN0aW5nMyA9IHVzZUZpYmVyKGNoaWxkLCBlbGVtZW50LnByb3BzKTtcblxuICAgICAgICAgICAgICAgIF9leGlzdGluZzMucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjaGlsZCwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIF9leGlzdGluZzMuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZXhpc3RpbmczO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gLy8gRGlkbid0IG1hdGNoLlxuXG5cbiAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50LnByb3BzLmNoaWxkcmVuLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcywgZWxlbWVudC5rZXkpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2NyZWF0ZWQ0ID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgIF9jcmVhdGVkNC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBlbGVtZW50KTtcbiAgICAgIF9jcmVhdGVkNC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBfY3JlYXRlZDQ7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgcG9ydGFsLCBsYW5lcykge1xuICAgIHZhciBrZXkgPSBwb3J0YWwua2V5O1xuICAgIHZhciBjaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAvLyBUT0RPOiBJZiBrZXkgPT09IG51bGwgYW5kIGNoaWxkLmtleSA9PT0gbnVsbCwgdGhlbiB0aGlzIG9ubHkgYXBwbGllcyB0b1xuICAgICAgLy8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuXG4gICAgICBpZiAoY2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gSG9zdFBvcnRhbCAmJiBjaGlsZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA9PT0gcG9ydGFsLmNvbnRhaW5lckluZm8gJiYgY2hpbGQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uID09PSBwb3J0YWwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG4gICAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY2hpbGQsIHBvcnRhbC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9IC8vIFRoaXMgQVBJIHdpbGwgdGFnIHRoZSBjaGlsZHJlbiB3aXRoIHRoZSBzaWRlLWVmZmVjdCBvZiB0aGUgcmVjb25jaWxpYXRpb25cbiAgLy8gaXRzZWxmLiBUaGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHNpZGUtZWZmZWN0IGxpc3QgYXMgd2UgcGFzcyB0aHJvdWdoIHRoZVxuICAvLyBjaGlsZHJlbiBhbmQgdGhlIHBhcmVudC5cblxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkRmliZXJzKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBub3QgcmVjdXJzaXZlLlxuICAgIC8vIElmIHRoZSB0b3AgbGV2ZWwgaXRlbSBpcyBhbiBhcnJheSwgd2UgdHJlYXQgaXQgYXMgYSBzZXQgb2YgY2hpbGRyZW4sXG4gICAgLy8gbm90IGFzIGEgZnJhZ21lbnQuIE5lc3RlZCBhcnJheXMgb24gdGhlIG90aGVyIGhhbmQgd2lsbCBiZSB0cmVhdGVkIGFzXG4gICAgLy8gZnJhZ21lbnQgbm9kZXMuIFJlY3Vyc2lvbiBoYXBwZW5zIGF0IHRoZSBub3JtYWwgZmxvdy5cbiAgICAvLyBIYW5kbGUgdG9wIGxldmVsIHVua2V5ZWQgZnJhZ21lbnRzIGFzIGlmIHRoZXkgd2VyZSBhcnJheXMuXG4gICAgLy8gVGhpcyBsZWFkcyB0byBhbiBhbWJpZ3VpdHkgYmV0d2VlbiA8PntbLi4uXX08Lz4gYW5kIDw+Li4uPC8+LlxuICAgIC8vIFdlIHRyZWF0IHRoZSBhbWJpZ3VvdXMgY2FzZXMgYWJvdmUgdGhlIHNhbWUuXG4gICAgdmFyIGlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQgPSB0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsICYmIG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgJiYgbmV3Q2hpbGQua2V5ID09PSBudWxsO1xuXG4gICAgaWYgKGlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQpIHtcbiAgICAgIG5ld0NoaWxkID0gbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW47XG4gICAgfSAvLyBIYW5kbGUgb2JqZWN0IHR5cGVzXG5cblxuICAgIHZhciBpc09iamVjdCA9IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGw7XG5cbiAgICBpZiAoaXNPYmplY3QpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykpO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSk7XG5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsICcnICsgbmV3Q2hpbGQsIGxhbmVzKSk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkpIHtcbiAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QpIHtcbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAndW5kZWZpbmVkJyAmJiAhaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCkge1xuICAgICAgLy8gSWYgdGhlIG5ldyBjaGlsZCBpcyB1bmRlZmluZWQsIGFuZCB0aGUgcmV0dXJuIGZpYmVyIGlzIGEgY29tcG9zaXRlXG4gICAgICAvLyBjb21wb25lbnQsIHRocm93IGFuIGVycm9yLiBJZiBGaWJlciByZXR1cm4gdHlwZXMgYXJlIGRpc2FibGVkLFxuICAgICAgLy8gd2UgYWxyZWFkeSB0aHJldyBhYm92ZS5cbiAgICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnJlbmRlci5faXNNb2NrRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBhbGxvdyBhdXRvLW1vY2tzIHRvIHByb2NlZWQgYXMgaWYgdGhleSdyZSByZXR1cm5pbmcgbnVsbC5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgLy8gSW50ZW50aW9uYWxseSBmYWxsIHRocm91Z2ggdG8gdGhlIG5leHQgY2FzZSwgd2hpY2ggaGFuZGxlcyBib3RoXG4gICAgICAgIC8vIGZ1bmN0aW9ucyBhbmQgY2xhc3Nlc1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVkIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgICAgY2FzZSBCbG9jazpcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIChnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKSArIFwiKC4uLik6IE5vdGhpbmcgd2FzIHJldHVybmVkIGZyb20gcmVuZGVyLiBUaGlzIHVzdWFsbHkgbWVhbnMgYSByZXR1cm4gc3RhdGVtZW50IGlzIG1pc3NpbmcuIE9yLCB0byByZW5kZXIgbm90aGluZywgcmV0dXJuIG51bGwuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFJlbWFpbmluZyBjYXNlcyBhcmUgYWxsIHRyZWF0ZWQgYXMgZW1wdHkuXG5cblxuICAgIHJldHVybiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICB9XG5cbiAgcmV0dXJuIHJlY29uY2lsZUNoaWxkRmliZXJzO1xufVxuXG52YXIgcmVjb25jaWxlQ2hpbGRGaWJlcnMgPSBDaGlsZFJlY29uY2lsZXIodHJ1ZSk7XG52YXIgbW91bnRDaGlsZEZpYmVycyA9IENoaWxkUmVjb25jaWxlcihmYWxzZSk7XG5mdW5jdGlvbiBjbG9uZUNoaWxkRmliZXJzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIGlmICghKGN1cnJlbnQgPT09IG51bGwgfHwgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPT09IGN1cnJlbnQuY2hpbGQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVzdW1pbmcgd29yayBub3QgeWV0IGltcGxlbWVudGVkLlwiICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzLmNoaWxkID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRDaGlsZCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIGN1cnJlbnRDaGlsZC5wZW5kaW5nUHJvcHMpO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5ld0NoaWxkO1xuICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcblxuICB3aGlsZSAoY3VycmVudENoaWxkLnNpYmxpbmcgIT09IG51bGwpIHtcbiAgICBjdXJyZW50Q2hpbGQgPSBjdXJyZW50Q2hpbGQuc2libGluZztcbiAgICBuZXdDaGlsZCA9IG5ld0NoaWxkLnNpYmxpbmcgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIGN1cnJlbnRDaGlsZC5wZW5kaW5nUHJvcHMpO1xuICAgIG5ld0NoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB9XG5cbiAgbmV3Q2hpbGQuc2libGluZyA9IG51bGw7XG59IC8vIFJlc2V0IGEgd29ya0luUHJvZ3Jlc3MgY2hpbGQgc2V0IHRvIHByZXBhcmUgaXQgZm9yIGEgc2Vjb25kIHBhc3MuXG5cbmZ1bmN0aW9uIHJlc2V0Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gIHZhciBjaGlsZCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgIHJlc2V0V29ya0luUHJvZ3Jlc3MoY2hpbGQsIGxhbmVzKTtcbiAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gIH1cbn1cblxudmFyIE5PX0NPTlRFWFQgPSB7fTtcbnZhciBjb250ZXh0U3RhY2tDdXJzb3IkMSA9IGNyZWF0ZUN1cnNvcihOT19DT05URVhUKTtcbnZhciBjb250ZXh0RmliZXJTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihOT19DT05URVhUKTtcbnZhciByb290SW5zdGFuY2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihOT19DT05URVhUKTtcblxuZnVuY3Rpb24gcmVxdWlyZWRDb250ZXh0KGMpIHtcbiAgaWYgKCEoYyAhPT0gTk9fQ09OVEVYVCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBob3N0IGNvbnRleHQgdG8gZXhpc3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gZ2V0Um9vdEhvc3RDb250YWluZXIoKSB7XG4gIHZhciByb290SW5zdGFuY2UgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gIHJldHVybiByb290SW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Q29udGFpbmVyKGZpYmVyLCBuZXh0Um9vdEluc3RhbmNlKSB7XG4gIC8vIFB1c2ggY3VycmVudCByb290IGluc3RhbmNlIG9udG8gdGhlIHN0YWNrO1xuICAvLyBUaGlzIGFsbG93cyB1cyB0byByZXNldCByb290IHdoZW4gcG9ydGFscyBhcmUgcG9wcGVkLlxuICBwdXNoKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBuZXh0Um9vdEluc3RhbmNlLCBmaWJlcik7IC8vIFRyYWNrIHRoZSBjb250ZXh0IGFuZCB0aGUgRmliZXIgdGhhdCBwcm92aWRlZCBpdC5cbiAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHBvcCBvbmx5IEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuXG4gIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7IC8vIEZpbmFsbHksIHdlIG5lZWQgdG8gcHVzaCB0aGUgaG9zdCBjb250ZXh0IHRvIHRoZSBzdGFjay5cbiAgLy8gSG93ZXZlciwgd2UgY2FuJ3QganVzdCBjYWxsIGdldFJvb3RIb3N0Q29udGV4dCgpIGFuZCBwdXNoIGl0IGJlY2F1c2VcbiAgLy8gd2UnZCBoYXZlIGEgZGlmZmVyZW50IG51bWJlciBvZiBlbnRyaWVzIG9uIHRoZSBzdGFjayBkZXBlbmRpbmcgb25cbiAgLy8gd2hldGhlciBnZXRSb290SG9zdENvbnRleHQoKSB0aHJvd3Mgc29tZXdoZXJlIGluIHJlbmRlcmVyIGNvZGUgb3Igbm90LlxuICAvLyBTbyB3ZSBwdXNoIGFuIGVtcHR5IHZhbHVlIGZpcnN0LiBUaGlzIGxldHMgdXMgc2FmZWx5IHVud2luZCBvbiBlcnJvcnMuXG5cbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgTk9fQ09OVEVYVCwgZmliZXIpO1xuICB2YXIgbmV4dFJvb3RDb250ZXh0ID0gZ2V0Um9vdEhvc3RDb250ZXh0KG5leHRSb290SW5zdGFuY2UpOyAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoaXMgZnVuY3Rpb24gZG9lc24ndCB0aHJvdywgcmVwbGFjZSBpdC5cblxuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgbmV4dFJvb3RDb250ZXh0LCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHBvcEhvc3RDb250YWluZXIoZmliZXIpIHtcbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xuICBwb3Aocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdENvbnRleHQoKSB7XG4gIHZhciBjb250ZXh0ID0gcmVxdWlyZWRDb250ZXh0KGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQpO1xuICByZXR1cm4gY29udGV4dDtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gIHZhciByb290SW5zdGFuY2UgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gIHZhciBjb250ZXh0ID0gcmVxdWlyZWRDb250ZXh0KGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQpO1xuICB2YXIgbmV4dENvbnRleHQgPSBnZXRDaGlsZEhvc3RDb250ZXh0KGNvbnRleHQsIGZpYmVyLnR5cGUpOyAvLyBEb24ndCBwdXNoIHRoaXMgRmliZXIncyBjb250ZXh0IHVubGVzcyBpdCdzIHVuaXF1ZS5cblxuICBpZiAoY29udGV4dCA9PT0gbmV4dENvbnRleHQpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gVHJhY2sgdGhlIGNvbnRleHQgYW5kIHRoZSBGaWJlciB0aGF0IHByb3ZpZGVkIGl0LlxuICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcG9wIG9ubHkgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG5cblxuICBwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBuZXh0Q29udGV4dCwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwb3BIb3N0Q29udGV4dChmaWJlcikge1xuICAvLyBEbyBub3QgcG9wIHVubGVzcyB0aGlzIEZpYmVyIHByb3ZpZGVkIHRoZSBjdXJyZW50IGNvbnRleHQuXG4gIC8vIHB1c2hIb3N0Q29udGV4dCgpIG9ubHkgcHVzaGVzIEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuICBpZiAoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IuY3VycmVudCAhPT0gZmliZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcG9wKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG59XG5cbnZhciBEZWZhdWx0U3VzcGVuc2VDb250ZXh0ID0gMDsgLy8gVGhlIFN1c3BlbnNlIENvbnRleHQgaXMgc3BsaXQgaW50byB0d28gcGFydHMuIFRoZSBsb3dlciBiaXRzIGlzXG4vLyBpbmhlcml0ZWQgZGVlcGx5IGRvd24gdGhlIHN1YnRyZWUuIFRoZSB1cHBlciBiaXRzIG9ubHkgYWZmZWN0XG4vLyB0aGlzIGltbWVkaWF0ZSBzdXNwZW5zZSBib3VuZGFyeSBhbmQgZ2V0cyByZXNldCBlYWNoIG5ld1xuLy8gYm91bmRhcnkgb3Igc3VzcGVuc2UgbGlzdC5cblxudmFyIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrID0gMTsgLy8gU3VidHJlZSBGbGFnczpcbi8vIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCBpbmRpY2F0ZXMgdGhhdCBvbmUgb2Ygb3VyIHBhcmVudCBTdXNwZW5zZVxuLy8gYm91bmRhcmllcyBpcyBub3QgY3VycmVudGx5IHNob3dpbmcgdmlzaWJsZSBtYWluIGNvbnRlbnQuXG4vLyBFaXRoZXIgYmVjYXVzZSBpdCBpcyBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBvciBpcyBub3QgbW91bnRlZCBhdCBhbGwuXG4vLyBXZSBjYW4gdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGRlc2lyYWJsZSB0byB0cmlnZ2VyIGEgZmFsbGJhY2sgYXRcbi8vIHRoZSBwYXJlbnQuIElmIG5vdCwgdGhlbiB3ZSBtaWdodCBuZWVkIHRvIHRyaWdnZXIgdW5kZXNpcmFibGUgYm91bmRhcmllc1xuLy8gYW5kL29yIHN1c3BlbmQgdGhlIGNvbW1pdCB0byBhdm9pZCBoaWRpbmcgdGhlIHBhcmVudCBjb250ZW50LlxuXG52YXIgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0ID0gMTsgLy8gU2hhbGxvdyBGbGFnczpcbi8vIEZvcmNlU3VzcGVuc2VGYWxsYmFjayBjYW4gYmUgdXNlZCBieSBTdXNwZW5zZUxpc3QgdG8gZm9yY2UgbmV3bHkgYWRkZWRcbi8vIGl0ZW1zIGludG8gdGhlaXIgZmFsbGJhY2sgc3RhdGUgZHVyaW5nIG9uZSBvZiB0aGUgcmVuZGVyIHBhc3Nlcy5cblxudmFyIEZvcmNlU3VzcGVuc2VGYWxsYmFjayA9IDI7XG52YXIgc3VzcGVuc2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihEZWZhdWx0U3VzcGVuc2VDb250ZXh0KTtcbmZ1bmN0aW9uIGhhc1N1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0LCBmbGFnKSB7XG4gIHJldHVybiAocGFyZW50Q29udGV4dCAmIGZsYWcpICE9PSAwO1xufVxuZnVuY3Rpb24gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCkge1xuICByZXR1cm4gcGFyZW50Q29udGV4dCAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrO1xufVxuZnVuY3Rpb24gc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0LCBzaGFsbG93Q29udGV4dCkge1xuICByZXR1cm4gcGFyZW50Q29udGV4dCAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrIHwgc2hhbGxvd0NvbnRleHQ7XG59XG5mdW5jdGlvbiBhZGRTdWJ0cmVlU3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIHN1YnRyZWVDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0IHwgc3VidHJlZUNvbnRleHQ7XG59XG5mdW5jdGlvbiBwdXNoU3VzcGVuc2VDb250ZXh0KGZpYmVyLCBuZXdDb250ZXh0KSB7XG4gIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgbmV3Q29udGV4dCwgZmliZXIpO1xufVxuZnVuY3Rpb24gcG9wU3VzcGVuc2VDb250ZXh0KGZpYmVyKSB7XG4gIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHNob3VsZENhcHR1cmVTdXNwZW5zZSh3b3JrSW5Qcm9ncmVzcywgaGFzSW52aXNpYmxlUGFyZW50KSB7XG4gIC8vIElmIGl0IHdhcyB0aGUgcHJpbWFyeSBjaGlsZHJlbiB0aGF0IGp1c3Qgc3VzcGVuZGVkLCBjYXB0dXJlIGFuZCByZW5kZXIgdGhlXG4gIC8vIGZhbGxiYWNrLiBPdGhlcndpc2UsIGRvbid0IGNhcHR1cmUgYW5kIGJ1YmJsZSB0byB0aGUgbmV4dCBib3VuZGFyeS5cbiAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5leHRTdGF0ZSAhPT0gbnVsbCkge1xuICAgIGlmIChuZXh0U3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgICAgLy8gQSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IGFsd2F5cyBjYXB0dXJlcy5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7IC8vIEluIG9yZGVyIHRvIGNhcHR1cmUsIHRoZSBTdXNwZW5zZSBjb21wb25lbnQgbXVzdCBoYXZlIGEgZmFsbGJhY2sgcHJvcC5cblxuICBpZiAocHJvcHMuZmFsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBSZWd1bGFyIGJvdW5kYXJpZXMgYWx3YXlzIGNhcHR1cmUuXG5cblxuICBpZiAocHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBJZiBpdCdzIGEgYm91bmRhcnkgd2Ugc2hvdWxkIGF2b2lkLCB0aGVuIHdlIHByZWZlciB0byBidWJibGUgdXAgdG8gdGhlXG4gIC8vIHBhcmVudCBib3VuZGFyeSBpZiBpdCBpcyBjdXJyZW50bHkgaW52aXNpYmxlLlxuXG5cbiAgaWYgKGhhc0ludmlzaWJsZVBhcmVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiB0aGUgcGFyZW50IGlzIG5vdCBhYmxlIHRvIGhhbmRsZSBpdCwgd2UgbXVzdCBoYW5kbGUgaXQuXG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGZpbmRGaXJzdFN1c3BlbmRlZChyb3cpIHtcbiAgdmFyIG5vZGUgPSByb3c7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICB2YXIgc3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZGVoeWRyYXRlZCA9IHN0YXRlLmRlaHlkcmF0ZWQ7XG5cbiAgICAgICAgaWYgKGRlaHlkcmF0ZWQgPT09IG51bGwgfHwgaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyhkZWh5ZHJhdGVkKSB8fCBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhkZWh5ZHJhdGVkKSkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VMaXN0Q29tcG9uZW50ICYmIC8vIHJldmVhbE9yZGVyIHVuZGVmaW5lZCBjYW4ndCBiZSB0cnVzdGVkIGJlY2F1c2UgaXQgZG9uJ3RcbiAgICAvLyBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgaXQgc3VzcGVuZGVkIG9yIG5vdC5cbiAgICBub2RlLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGRpZFN1c3BlbmQgPSAobm9kZS5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gICAgICBpZiAoZGlkU3VzcGVuZCkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHJvdykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSByb3cpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgTm9GbGFncyQxID1cbi8qICAqL1xuMDsgLy8gUmVwcmVzZW50cyB3aGV0aGVyIGVmZmVjdCBzaG91bGQgZmlyZS5cblxudmFyIEhhc0VmZmVjdCA9XG4vKiAqL1xuMTsgLy8gUmVwcmVzZW50cyB0aGUgcGhhc2UgaW4gd2hpY2ggdGhlIGVmZmVjdCAobm90IHRoZSBjbGVhbi11cCkgZmlyZXMuXG5cbnZhciBMYXlvdXQgPVxuLyogICAgKi9cbjI7XG52YXIgUGFzc2l2ZSQxID1cbi8qICAgKi9cbjQ7XG5cbi8vIFRoaXMgbWF5IGhhdmUgYmVlbiBhbiBpbnNlcnRpb24gb3IgYSBoeWRyYXRpb24uXG5cbnZhciBoeWRyYXRpb25QYXJlbnRGaWJlciA9IG51bGw7XG52YXIgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGw7XG52YXIgaXNIeWRyYXRpbmcgPSBmYWxzZTtcblxuZnVuY3Rpb24gZW50ZXJIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuXG4gIHZhciBwYXJlbnRJbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQocGFyZW50SW5zdGFuY2UpO1xuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICBpc0h5ZHJhdGluZyA9IHRydWU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UocmV0dXJuRmliZXIsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgZGlkTm90SHlkcmF0ZUNvbnRhaW5lckluc3RhbmNlKHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLCBpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIGRpZE5vdEh5ZHJhdGVJbnN0YW5jZShyZXR1cm5GaWJlci50eXBlLCByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzLCByZXR1cm5GaWJlci5zdGF0ZU5vZGUsIGluc3RhbmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkVG9EZWxldGUgPSBjcmVhdGVGaWJlckZyb21Ib3N0SW5zdGFuY2VGb3JEZWxldGlvbigpO1xuICBjaGlsZFRvRGVsZXRlLnN0YXRlTm9kZSA9IGluc3RhbmNlO1xuICBjaGlsZFRvRGVsZXRlLnJldHVybiA9IHJldHVybkZpYmVyO1xuICBjaGlsZFRvRGVsZXRlLmZsYWdzID0gRGVsZXRpb247IC8vIFRoaXMgbWlnaHQgc2VlbSBsaWtlIGl0IGJlbG9uZ3Mgb24gcHJvZ3Jlc3NlZEZpcnN0RGVsZXRpb24uIEhvd2V2ZXIsXG4gIC8vIHRoZXNlIGNoaWxkcmVuIGFyZSBub3QgcGFydCBvZiB0aGUgcmVjb25jaWxpYXRpb24gbGlzdCBvZiBjaGlsZHJlbi5cbiAgLy8gRXZlbiBpZiB3ZSBhYm9ydCBhbmQgcmVyZWNvbmNpbGUgdGhlIGNoaWxkcmVuLCB0aGF0IHdpbGwgdHJ5IHRvIGh5ZHJhdGVcbiAgLy8gYWdhaW4gYW5kIHRoZSBub2RlcyBhcmUgc3RpbGwgaW4gdGhlIGhvc3QgdHJlZSBzbyB0aGVzZSB3aWxsIGJlXG4gIC8vIHJlY3JlYXRlZC5cblxuICBpZiAocmV0dXJuRmliZXIubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKHJldHVybkZpYmVyLCBmaWJlcikge1xuICBmaWJlci5mbGFncyA9IGZpYmVyLmZsYWdzICYgfkh5ZHJhdGluZyB8IFBsYWNlbWVudDtcblxuICB7XG4gICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50Q29udGFpbmVyID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBwcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHR5cGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgICAgICAgICAgdmFyIHRleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBwYXJlbnRUeXBlID0gcmV0dXJuRmliZXIudHlwZTtcbiAgICAgICAgICB2YXIgcGFyZW50UHJvcHMgPSByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIHZhciBwYXJlbnRJbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgIHZhciBfdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBfcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBfdHlwZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICAgICAgICB2YXIgX3RleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgX3RleHQpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVTdXNwZW5zZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpIHtcbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciB0eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgdmFyIHByb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBjYW5IeWRyYXRlSW5zdGFuY2UobmV4dEluc3RhbmNlLCB0eXBlKTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBmaWJlci5zdGF0ZU5vZGUgPSBpbnN0YW5jZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIHZhciB0ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgdGV4dEluc3RhbmNlID0gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShuZXh0SW5zdGFuY2UsIHRleHQpO1xuXG4gICAgICAgIGlmICh0ZXh0SW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBmaWJlci5zdGF0ZU5vZGUgPSB0ZXh0SW5zdGFuY2U7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2UoZmliZXIpIHtcbiAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuXG4gIGlmICghbmV4dEluc3RhbmNlKSB7XG4gICAgLy8gTm90aGluZyB0byBoeWRyYXRlLiBNYWtlIGl0IGFuIGluc2VydGlvbi5cbiAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmaXJzdEF0dGVtcHRlZEluc3RhbmNlID0gbmV4dEluc3RhbmNlO1xuXG4gIGlmICghdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSkge1xuICAgIC8vIElmIHdlIGNhbid0IGh5ZHJhdGUgdGhpcyBpbnN0YW5jZSBsZXQncyB0cnkgdGhlIG5leHQgb25lLlxuICAgIC8vIFdlIHVzZSB0aGlzIGFzIGEgaGV1cmlzdGljLiBJdCdzIGJhc2VkIG9uIGludHVpdGlvbiBhbmQgbm90IGRhdGEgc28gaXRcbiAgICAvLyBtaWdodCBiZSBmbGF3ZWQgb3IgdW5uZWNlc3NhcnkuXG4gICAgbmV4dEluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UpO1xuXG4gICAgaWYgKCFuZXh0SW5zdGFuY2UgfHwgIXRyeUh5ZHJhdGUoZmliZXIsIG5leHRJbnN0YW5jZSkpIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gaHlkcmF0ZS4gTWFrZSBpdCBhbiBpbnNlcnRpb24uXG4gICAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuICAgICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIG1hdGNoZWQgdGhlIG5leHQgb25lLCB3ZSdsbCBub3cgYXNzdW1lIHRoYXQgdGhlIGZpcnN0IG9uZSB3YXNcbiAgICAvLyBzdXBlcmZsdW91cyBhbmQgd2UnbGwgZGVsZXRlIGl0LiBTaW5jZSB3ZSBjYW4ndCBlYWdlcmx5IGRlbGV0ZSBpdFxuICAgIC8vIHdlJ2xsIGhhdmUgdG8gc2NoZWR1bGUgYSBkZWxldGlvbi4gVG8gZG8gdGhhdCwgdGhpcyBub2RlIG5lZWRzIGEgZHVtbXlcbiAgICAvLyBmaWJlciBhc3NvY2lhdGVkIHdpdGggaXQuXG5cblxuICAgIGRlbGV0ZUh5ZHJhdGFibGVJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSk7XG4gIH1cblxuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQobmV4dEluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZShmaWJlciwgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCkge1xuXG4gIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBoeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIGZpYmVyLnR5cGUsIGZpYmVyLm1lbW9pemVkUHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGZpYmVyKTsgLy8gVE9ETzogVHlwZSB0aGlzIHNwZWNpZmljIHRvIHRoaXMgdHlwZSBvZiBjb21wb25lbnQuXG5cbiAgZmliZXIudXBkYXRlUXVldWUgPSB1cGRhdGVQYXlsb2FkOyAvLyBJZiB0aGUgdXBkYXRlIHBheWxvYWQgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSBjaGFuZ2Ugb3IgaWYgdGhlcmVcbiAgLy8gaXMgYSBuZXcgcmVmIHdlIG1hcmsgdGhpcyBhcyBhbiB1cGRhdGUuXG5cbiAgaWYgKHVwZGF0ZVBheWxvYWQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2UoZmliZXIpIHtcblxuICB2YXIgdGV4dEluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICB2YXIgdGV4dENvbnRlbnQgPSBmaWJlci5tZW1vaXplZFByb3BzO1xuICB2YXIgc2hvdWxkVXBkYXRlID0gaHlkcmF0ZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50LCBmaWJlcik7XG5cbiAge1xuICAgIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlIGlzIGNhbGxlZCBpbiBhIGNvbnRleHQgd2hlcmUgdGhlXG4gICAgICAvLyBoeWRyYXRpb24gcGFyZW50IGlzIHRoZSBwYXJlbnQgaG9zdCBjb21wb25lbnQgb2YgdGhpcyBob3N0IHRleHQuXG4gICAgICB2YXIgcmV0dXJuRmliZXIgPSBoeWRyYXRpb25QYXJlbnRGaWJlcjtcblxuICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudENvbnRhaW5lciA9IHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgICBkaWROb3RNYXRjaEh5ZHJhdGVkQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRQcm9wcyA9IHJldHVybkZpYmVyLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRJbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgZGlkTm90TWF0Y2hIeWRyYXRlZFRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzaG91bGRVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIHNraXBQYXN0RGVoeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2UoZmliZXIpIHtcblxuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG4gIHZhciBzdXNwZW5zZUluc3RhbmNlID0gc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCA/IHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZCA6IG51bGw7XG5cbiAgaWYgKCFzdXNwZW5zZUluc3RhbmNlKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gaGF2ZSBhIGh5ZHJhdGVkIHN1c3BlbnNlIGluc3RhbmNlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpIHtcbiAgdmFyIHBhcmVudCA9IGZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsICYmIHBhcmVudC50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgcGFyZW50LnRhZyAhPT0gSG9zdFJvb3QgJiYgcGFyZW50LnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIHBvcEh5ZHJhdGlvblN0YXRlKGZpYmVyKSB7XG5cbiAgaWYgKGZpYmVyICE9PSBoeWRyYXRpb25QYXJlbnRGaWJlcikge1xuICAgIC8vIFdlJ3JlIGRlZXBlciB0aGFuIHRoZSBjdXJyZW50IGh5ZHJhdGlvbiBjb250ZXh0LCBpbnNpZGUgYW4gaW5zZXJ0ZWRcbiAgICAvLyB0cmVlLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICAvLyBJZiB3ZSdyZSBub3QgY3VycmVudGx5IGh5ZHJhdGluZyBidXQgd2UncmUgaW4gYSBoeWRyYXRpb24gY29udGV4dCwgdGhlblxuICAgIC8vIHdlIHdlcmUgYW4gaW5zZXJ0aW9uIGFuZCBub3cgbmVlZCB0byBwb3AgdXAgcmVlbnRlciBoeWRyYXRpb24gb2Ygb3VyXG4gICAgLy8gc2libGluZ3MuXG4gICAgcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcik7XG4gICAgaXNIeWRyYXRpbmcgPSB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0eXBlID0gZmliZXIudHlwZTsgLy8gSWYgd2UgaGF2ZSBhbnkgcmVtYWluaW5nIGh5ZHJhdGFibGUgbm9kZXMsIHdlIG5lZWQgdG8gZGVsZXRlIHRoZW0gbm93LlxuICAvLyBXZSBvbmx5IGRvIHRoaXMgZGVlcGVyIHRoYW4gaGVhZCBhbmQgYm9keSBzaW5jZSB0aGV5IHRlbmQgdG8gaGF2ZSByYW5kb21cbiAgLy8gb3RoZXIgbm9kZXMgaW4gdGhlbS4gV2UgYWxzbyBpZ25vcmUgY29tcG9uZW50cyB3aXRoIHB1cmUgdGV4dCBjb250ZW50IGluXG4gIC8vIHNpZGUgb2YgdGhlbS5cbiAgLy8gVE9ETzogQmV0dGVyIGhldXJpc3RpYy5cblxuICBpZiAoZmliZXIudGFnICE9PSBIb3N0Q29tcG9uZW50IHx8IHR5cGUgIT09ICdoZWFkJyAmJiB0eXBlICE9PSAnYm9keScgJiYgIXNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIGZpYmVyLm1lbW9pemVkUHJvcHMpKSB7XG4gICAgdmFyIG5leHRJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG5cbiAgICB3aGlsZSAobmV4dEluc3RhbmNlKSB7XG4gICAgICBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UoZmliZXIsIG5leHRJbnN0YW5jZSk7XG4gICAgICBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobmV4dEluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKTtcblxuICBpZiAoZmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBza2lwUGFzdERlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKGZpYmVyKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gaHlkcmF0aW9uUGFyZW50RmliZXIgPyBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoZmliZXIuc3RhdGVOb2RlKSA6IG51bGw7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVzZXRIeWRyYXRpb25TdGF0ZSgpIHtcblxuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IG51bGw7XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsO1xuICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRJc0h5ZHJhdGluZygpIHtcbiAgcmV0dXJuIGlzSHlkcmF0aW5nO1xufVxuXG4vLyBhbmQgc2hvdWxkIGJlIHJlc2V0IGJlZm9yZSBzdGFydGluZyBhIG5ldyByZW5kZXIuXG4vLyBUaGlzIHRyYWNrcyB3aGljaCBtdXRhYmxlIHNvdXJjZXMgbmVlZCB0byBiZSByZXNldCBhZnRlciBhIHJlbmRlci5cblxudmFyIHdvcmtJblByb2dyZXNzU291cmNlcyA9IFtdO1xudmFyIHJlbmRlcmVyU2lnaWwkMTtcblxue1xuICAvLyBVc2VkIHRvIGRldGVjdCBtdWx0aXBsZSByZW5kZXJlcnMgdXNpbmcgdGhlIHNhbWUgbXV0YWJsZSBzb3VyY2UuXG4gIHJlbmRlcmVyU2lnaWwkMSA9IHt9O1xufVxuXG5mdW5jdGlvbiBtYXJrU291cmNlQXNEaXJ0eShtdXRhYmxlU291cmNlKSB7XG4gIHdvcmtJblByb2dyZXNzU291cmNlcy5wdXNoKG11dGFibGVTb3VyY2UpO1xufVxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmtJblByb2dyZXNzU291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtdXRhYmxlU291cmNlID0gd29ya0luUHJvZ3Jlc3NTb3VyY2VzW2ldO1xuXG4gICAge1xuICAgICAgbXV0YWJsZVNvdXJjZS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLmxlbmd0aCA9IDA7XG59XG5mdW5jdGlvbiBnZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24obXV0YWJsZVNvdXJjZSkge1xuICB7XG4gICAgcmV0dXJuIG11dGFibGVTb3VyY2UuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihtdXRhYmxlU291cmNlLCB2ZXJzaW9uKSB7XG4gIHtcbiAgICBtdXRhYmxlU291cmNlLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5ID0gdmVyc2lvbjtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzU291cmNlcy5wdXNoKG11dGFibGVTb3VyY2UpO1xufVxuZnVuY3Rpb24gd2FybkFib3V0TXVsdGlwbGVSZW5kZXJlcnNERVYobXV0YWJsZVNvdXJjZSkge1xuICB7XG4gICAge1xuICAgICAgaWYgKG11dGFibGVTb3VyY2UuX2N1cnJlbnRQcmltYXJ5UmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgICBtdXRhYmxlU291cmNlLl9jdXJyZW50UHJpbWFyeVJlbmRlcmVyID0gcmVuZGVyZXJTaWdpbCQxO1xuICAgICAgfSBlbHNlIGlmIChtdXRhYmxlU291cmNlLl9jdXJyZW50UHJpbWFyeVJlbmRlcmVyICE9PSByZW5kZXJlclNpZ2lsJDEpIHtcbiAgICAgICAgZXJyb3IoJ0RldGVjdGVkIG11bHRpcGxlIHJlbmRlcmVycyBjb25jdXJyZW50bHkgcmVuZGVyaW5nIHRoZSAnICsgJ3NhbWUgbXV0YWJsZSBzb3VyY2UuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyBFYWdlciByZWFkcyB0aGUgdmVyc2lvbiBvZiBhIG11dGFibGUgc291cmNlIGFuZCBzdG9yZXMgaXQgb24gdGhlIHJvb3QuXG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztcbnZhciBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcjtcblxue1xuICBkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyID0ge307XG4gIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbn1cblxuLy8gVGhlc2UgYXJlIHNldCByaWdodCBiZWZvcmUgY2FsbGluZyB0aGUgY29tcG9uZW50LlxudmFyIHJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuIEkndmUgbmFtZWQgaXQgZGlmZmVyZW50bHkgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbVxuLy8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgaG9vay5cblxudmFyIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsOyAvLyBIb29rcyBhcmUgc3RvcmVkIGFzIGEgbGlua2VkIGxpc3Qgb24gdGhlIGZpYmVyJ3MgbWVtb2l6ZWRTdGF0ZSBmaWVsZC4gVGhlXG4vLyBjdXJyZW50IGhvb2sgbGlzdCBpcyB0aGUgbGlzdCB0aGF0IGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgZmliZXIuIFRoZVxuLy8gd29yay1pbi1wcm9ncmVzcyBob29rIGxpc3QgaXMgYSBuZXcgbGlzdCB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4vLyB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuXG52YXIgY3VycmVudEhvb2sgPSBudWxsO1xudmFyIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7IC8vIFdoZXRoZXIgYW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgYXQgYW55IHBvaW50IGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLiBUaGlzXG4vLyBkb2VzIG5vdCBnZXQgcmVzZXQgaWYgd2UgZG8gYW5vdGhlciByZW5kZXIgcGFzczsgb25seSB3aGVuIHdlJ3JlIGNvbXBsZXRlbHlcbi8vIGZpbmlzaGVkIGV2YWx1YXRpbmcgdGhpcyBjb21wb25lbnQuIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHNvIHdlIGtub3dcbi8vIHdoZXRoZXIgd2UgbmVlZCB0byBjbGVhciByZW5kZXIgcGhhc2UgdXBkYXRlcyBhZnRlciBhIHRocm93LlxuXG52YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlOyAvLyBXaGVyZSBhbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBvbmx5IGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgcGFzcy4gVGhpc1xuLy8gZ2V0cyByZXNldCBhZnRlciBlYWNoIGF0dGVtcHQuXG4vLyBUT0RPOiBNYXliZSB0aGVyZSdzIHNvbWUgd2F5IHRvIGNvbnNvbGlkYXRlIHRoaXMgd2l0aFxuLy8gYGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVgLiBPciB3aXRoIGBudW1iZXJPZlJlUmVuZGVyc2AuXG5cbnZhciBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBmYWxzZTtcbnZhciBSRV9SRU5ERVJfTElNSVQgPSAyNTsgLy8gSW4gREVWLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIHByaW1pdGl2ZSBob29rXG5cbnZhciBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7IC8vIEluIERFViwgdGhpcyBsaXN0IGVuc3VyZXMgdGhhdCBob29rcyBhcmUgY2FsbGVkIGluIHRoZSBzYW1lIG9yZGVyIGJldHdlZW4gcmVuZGVycy5cbi8vIFRoZSBsaXN0IHN0b3JlcyB0aGUgb3JkZXIgb2YgaG9va3MgdXNlZCBkdXJpbmcgdGhlIGluaXRpYWwgcmVuZGVyIChtb3VudCkuXG4vLyBTdWJzZXF1ZW50IHJlbmRlcnMgKHVwZGF0ZXMpIHJlZmVyZW5jZSB0aGlzIGxpc3QuXG5cbnZhciBob29rVHlwZXNEZXYgPSBudWxsO1xudmFyIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7IC8vIEluIERFViwgdGhpcyB0cmFja3Mgd2hldGhlciBjdXJyZW50bHkgcmVuZGVyaW5nIGNvbXBvbmVudCBuZWVkcyB0byBpZ25vcmVcbi8vIHRoZSBkZXBlbmRlbmNpZXMgZm9yIEhvb2tzIHRoYXQgbmVlZCB0aGVtIChlLmcuIHVzZUVmZmVjdCBvciB1c2VNZW1vKS5cbi8vIFdoZW4gdHJ1ZSwgc3VjaCBIb29rcyB3aWxsIGFsd2F5cyBiZSBcInJlbW91bnRlZFwiLiBPbmx5IHVzZWQgZHVyaW5nIGhvdCByZWxvYWQuXG5cbnZhciBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBtb3VudEhvb2tUeXBlc0RldigpIHtcbiAge1xuICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuXG4gICAgaWYgKGhvb2tUeXBlc0RldiA9PT0gbnVsbCkge1xuICAgICAgaG9va1R5cGVzRGV2ID0gW2hvb2tOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaG9va1R5cGVzRGV2LnB1c2goaG9va05hbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVIb29rVHlwZXNEZXYoKSB7XG4gIHtcbiAgICB2YXIgaG9va05hbWUgPSBjdXJyZW50SG9va05hbWVJbkRldjtcblxuICAgIGlmIChob29rVHlwZXNEZXYgIT09IG51bGwpIHtcbiAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2Kys7XG5cbiAgICAgIGlmIChob29rVHlwZXNEZXZbaG9va1R5cGVzVXBkYXRlSW5kZXhEZXZdICE9PSBob29rTmFtZSkge1xuICAgICAgICB3YXJuT25Ib29rTWlzbWF0Y2hJbkRldihob29rTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpIHtcbiAge1xuICAgIGlmIChkZXBzICE9PSB1bmRlZmluZWQgJiYgZGVwcyAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShkZXBzKSkge1xuICAgICAgLy8gVmVyaWZ5IGRlcHMsIGJ1dCBvbmx5IG9uIG1vdW50IHRvIGF2b2lkIGV4dHJhIGNoZWNrcy5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhlaXIgdHlwZSB3b3VsZCBjaGFuZ2UgYXMgdXN1YWxseSB5b3UgZGVmaW5lIHRoZW0gaW5saW5lLlxuICAgICAgZXJyb3IoJyVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgdGhhdCBpcyBub3QgYW4gYXJyYXkgKGluc3RlYWQsIHJlY2VpdmVkIGAlc2ApLiBXaGVuICcgKyAnc3BlY2lmaWVkLCB0aGUgZmluYWwgYXJndW1lbnQgbXVzdCBiZSBhbiBhcnJheS4nLCBjdXJyZW50SG9va05hbWVJbkRldiwgdHlwZW9mIGRlcHMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuT25Ib29rTWlzbWF0Y2hJbkRldihjdXJyZW50SG9va05hbWUpIHtcbiAge1xuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnR5cGUpO1xuXG4gICAgaWYgKCFkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciB0YWJsZSA9ICcnO1xuICAgICAgICB2YXIgc2Vjb25kQ29sdW1uU3RhcnQgPSAzMDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBob29rVHlwZXNVcGRhdGVJbmRleERldjsgaSsrKSB7XG4gICAgICAgICAgdmFyIG9sZEhvb2tOYW1lID0gaG9va1R5cGVzRGV2W2ldO1xuICAgICAgICAgIHZhciBuZXdIb29rTmFtZSA9IGkgPT09IGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID8gY3VycmVudEhvb2tOYW1lIDogb2xkSG9va05hbWU7XG4gICAgICAgICAgdmFyIHJvdyA9IGkgKyAxICsgXCIuIFwiICsgb2xkSG9va05hbWU7IC8vIEV4dHJhIHNwYWNlIHNvIHNlY29uZCBjb2x1bW4gbGluZXMgdXBcbiAgICAgICAgICAvLyBsb2wgQCBJRSBub3Qgc3VwcG9ydGluZyBTdHJpbmcjcmVwZWF0XG5cbiAgICAgICAgICB3aGlsZSAocm93Lmxlbmd0aCA8IHNlY29uZENvbHVtblN0YXJ0KSB7XG4gICAgICAgICAgICByb3cgKz0gJyAnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJvdyArPSBuZXdIb29rTmFtZSArICdcXG4nO1xuICAgICAgICAgIHRhYmxlICs9IHJvdztcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yKCdSZWFjdCBoYXMgZGV0ZWN0ZWQgYSBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIEhvb2tzIGNhbGxlZCBieSAlcy4gJyArICdUaGlzIHdpbGwgbGVhZCB0byBidWdzIGFuZCBlcnJvcnMgaWYgbm90IGZpeGVkLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkIHRoZSBSdWxlcyBvZiBIb29rczogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzXFxuXFxuJyArICcgICBQcmV2aW91cyByZW5kZXIgICAgICAgICAgICBOZXh0IHJlbmRlclxcbicgKyAnICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuJyArICclcycgKyAnICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXFxuJywgY29tcG9uZW50TmFtZSwgdGFibGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0ludmFsaWRIb29rRXJyb3IoKSB7XG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSB7XG4gIHtcbiAgICBpZiAoaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMpIHtcbiAgICAgIC8vIE9ubHkgdHJ1ZSB3aGVuIHRoaXMgY29tcG9uZW50IGlzIGJlaW5nIGhvdCByZWxvYWRlZC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAocHJldkRlcHMgPT09IG51bGwpIHtcbiAgICB7XG4gICAgICBlcnJvcignJXMgcmVjZWl2ZWQgYSBmaW5hbCBhcmd1bWVudCBkdXJpbmcgdGhpcyByZW5kZXIsIGJ1dCBub3QgZHVyaW5nICcgKyAndGhlIHByZXZpb3VzIHJlbmRlci4gRXZlbiB0aG91Z2ggdGhlIGZpbmFsIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCAnICsgJ2l0cyB0eXBlIGNhbm5vdCBjaGFuZ2UgYmV0d2VlbiByZW5kZXJzLicsIGN1cnJlbnRIb29rTmFtZUluRGV2KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB7XG4gICAgLy8gRG9uJ3QgYm90aGVyIGNvbXBhcmluZyBsZW5ndGhzIGluIHByb2QgYmVjYXVzZSB0aGVzZSBhcnJheXMgc2hvdWxkIGJlXG4gICAgLy8gcGFzc2VkIGlubGluZS5cbiAgICBpZiAobmV4dERlcHMubGVuZ3RoICE9PSBwcmV2RGVwcy5sZW5ndGgpIHtcbiAgICAgIGVycm9yKCdUaGUgZmluYWwgYXJndW1lbnQgcGFzc2VkIHRvICVzIGNoYW5nZWQgc2l6ZSBiZXR3ZWVuIHJlbmRlcnMuIFRoZSAnICsgJ29yZGVyIGFuZCBzaXplIG9mIHRoaXMgYXJyYXkgbXVzdCByZW1haW4gY29uc3RhbnQuXFxuXFxuJyArICdQcmV2aW91czogJXNcXG4nICsgJ0luY29taW5nOiAlcycsIGN1cnJlbnRIb29rTmFtZUluRGV2LCBcIltcIiArIHByZXZEZXBzLmpvaW4oJywgJykgKyBcIl1cIiwgXCJbXCIgKyBuZXh0RGVwcy5qb2luKCcsICcpICsgXCJdXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldkRlcHMubGVuZ3RoICYmIGkgPCBuZXh0RGVwcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChvYmplY3RJcyhuZXh0RGVwc1tpXSwgcHJldkRlcHNbaV0pKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcsIG5leHRSZW5kZXJMYW5lcykge1xuICByZW5kZXJMYW5lcyA9IG5leHRSZW5kZXJMYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IHdvcmtJblByb2dyZXNzO1xuXG4gIHtcbiAgICBob29rVHlwZXNEZXYgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5fZGVidWdIb29rVHlwZXMgOiBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7IC8vIFVzZWQgZm9yIGhvdCByZWxvYWRpbmc6XG5cbiAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzOyAvLyBUaGUgZm9sbG93aW5nIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZXNldFxuICAvLyBjdXJyZW50SG9vayA9IG51bGw7XG4gIC8vIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gIC8vIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcbiAgLy8gVE9ETyBXYXJuIGlmIG5vIGhvb2tzIGFyZSB1c2VkIGF0IGFsbCBkdXJpbmcgbW91bnQsIHRoZW4gc29tZSBhcmUgdXNlZCBkdXJpbmcgdXBkYXRlLlxuICAvLyBDdXJyZW50bHkgd2Ugd2lsbCBpZGVudGlmeSB0aGUgdXBkYXRlIHJlbmRlciBhcyBhIG1vdW50IGJlY2F1c2UgbWVtb2l6ZWRTdGF0ZSA9PT0gbnVsbC5cbiAgLy8gVGhpcyBpcyB0cmlja3kgYmVjYXVzZSBpdCdzIHZhbGlkIGZvciBjZXJ0YWluIHR5cGVzIG9mIGNvbXBvbmVudHMgKGUuZy4gUmVhY3QubGF6eSlcbiAgLy8gVXNpbmcgbWVtb2l6ZWRTdGF0ZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbW91bnQvdXBkYXRlIG9ubHkgd29ya3MgaWYgYXQgbGVhc3Qgb25lIHN0YXRlZnVsIGhvb2sgaXMgdXNlZC5cbiAgLy8gTm9uLXN0YXRlZnVsIGhvb2tzIChlLmcuIGNvbnRleHQpIGRvbid0IGdldCBhZGRlZCB0byBtZW1vaXplZFN0YXRlLFxuICAvLyBzbyBtZW1vaXplZFN0YXRlIHdvdWxkIGJlIG51bGwgZHVyaW5nIHVwZGF0ZXMgYW5kIG1vdW50cy5cblxuICB7XG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgfSBlbHNlIGlmIChob29rVHlwZXNEZXYgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgZGlzcGF0Y2hlciBoYW5kbGVzIGFuIGVkZ2UgY2FzZSB3aGVyZSBhIGNvbXBvbmVudCBpcyB1cGRhdGluZyxcbiAgICAgIC8vIGJ1dCBubyBzdGF0ZWZ1bCBob29rcyBoYXZlIGJlZW4gdXNlZC5cbiAgICAgIC8vIFdlIHdhbnQgdG8gbWF0Y2ggdGhlIHByb2R1Y3Rpb24gY29kZSBiZWhhdmlvciAod2hpY2ggd2lsbCB1c2UgSG9va3NEaXNwYXRjaGVyT25Nb3VudCksXG4gICAgICAvLyBidXQgd2l0aCB0aGUgZXh0cmEgREVWIHZhbGlkYXRpb24gdG8gZW5zdXJlIGhvb2tzIG9yZGVyaW5nIGhhc24ndCBjaGFuZ2VkLlxuICAgICAgLy8gVGhpcyBkaXNwYXRjaGVyIGRvZXMgdGhhdC5cbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVjtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkcmVuID0gQ29tcG9uZW50KHByb3BzLCBzZWNvbmRBcmcpOyAvLyBDaGVjayBpZiB0aGVyZSB3YXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlXG5cbiAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcykge1xuICAgIC8vIEtlZXAgcmVuZGVyaW5nIGluIGEgbG9vcCBmb3IgYXMgbG9uZyBhcyByZW5kZXIgcGhhc2UgdXBkYXRlcyBjb250aW51ZSB0b1xuICAgIC8vIGJlIHNjaGVkdWxlZC4gVXNlIGEgY291bnRlciB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlxuICAgIHZhciBudW1iZXJPZlJlUmVuZGVycyA9IDA7XG5cbiAgICBkbyB7XG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBmYWxzZTtcblxuICAgICAgaWYgKCEobnVtYmVyT2ZSZVJlbmRlcnMgPCBSRV9SRU5ERVJfTElNSVQpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJUb28gbWFueSByZS1yZW5kZXJzLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiByZW5kZXJzIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG51bWJlck9mUmVSZW5kZXJzICs9IDE7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gRXZlbiB3aGVuIGhvdCByZWxvYWRpbmcsIGFsbG93IGRlcGVuZGVuY2llcyB0byBzdGFiaWxpemVcbiAgICAgICAgLy8gYWZ0ZXIgZmlyc3QgcmVuZGVyIHRvIHByZXZlbnQgaW5maW5pdGUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMuXG4gICAgICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gZmFsc2U7XG4gICAgICB9IC8vIFN0YXJ0IG92ZXIgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cblxuICAgICAgY3VycmVudEhvb2sgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICAgICAge1xuICAgICAgICAvLyBBbHNvIHZhbGlkYXRlIGhvb2sgb3JkZXIgZm9yIGNhc2NhZGluZyB1cGRhdGVzLlxuICAgICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgICAgfVxuXG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9ICBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgO1xuICAgICAgY2hpbGRyZW4gPSBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7XG4gICAgfSB3aGlsZSAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzKTtcbiAgfSAvLyBXZSBjYW4gYXNzdW1lIHRoZSBwcmV2aW91cyBkaXNwYXRjaGVyIGlzIGFsd2F5cyB0aGlzIG9uZSwgc2luY2Ugd2Ugc2V0IGl0XG4gIC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbmRlciBwaGFzZSBhbmQgdGhlcmUncyBubyByZS1lbnRyYW5jeS5cblxuXG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBob29rVHlwZXNEZXY7XG4gIH0gLy8gVGhpcyBjaGVjayB1c2VzIGN1cnJlbnRIb29rIHNvIHRoYXQgaXQgd29ya3MgdGhlIHNhbWUgaW4gREVWIGFuZCBwcm9kIGJ1bmRsZXMuXG4gIC8vIGhvb2tUeXBlc0RldiBjb3VsZCBjYXRjaCBtb3JlIGNhc2VzIChlLmcuIGNvbnRleHQpIGJ1dCBvbmx5IGluIERFViBidW5kbGVzLlxuXG5cbiAgdmFyIGRpZFJlbmRlclRvb0Zld0hvb2tzID0gY3VycmVudEhvb2sgIT09IG51bGwgJiYgY3VycmVudEhvb2submV4dCAhPT0gbnVsbDtcbiAgcmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDtcbiAgY3VycmVudEhvb2sgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuXG4gIHtcbiAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgaG9va1R5cGVzRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICB9XG5cbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuXG4gIGlmICghIWRpZFJlbmRlclRvb0Zld0hvb2tzKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVuZGVyZWQgZmV3ZXIgaG9va3MgdGhhbiBleHBlY3RlZC4gVGhpcyBtYXkgYmUgY2F1c2VkIGJ5IGFuIGFjY2lkZW50YWwgZWFybHkgcmV0dXJuIHN0YXRlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cbmZ1bmN0aW9uIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbGFuZXMpIHtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+KFBhc3NpdmUgfCBVcGRhdGUpO1xuICBjdXJyZW50LmxhbmVzID0gcmVtb3ZlTGFuZXMoY3VycmVudC5sYW5lcywgbGFuZXMpO1xufVxuZnVuY3Rpb24gcmVzZXRIb29rc0FmdGVyVGhyb3coKSB7XG4gIC8vIFdlIGNhbiBhc3N1bWUgdGhlIHByZXZpb3VzIGRpc3BhdGNoZXIgaXMgYWx3YXlzIHRoaXMgb25lLCBzaW5jZSB3ZSBzZXQgaXRcbiAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVuZGVyIHBoYXNlIGFuZCB0aGVyZSdzIG5vIHJlLWVudHJhbmN5LlxuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSkge1xuICAgIC8vIFRoZXJlIHdlcmUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMuIFRoZXNlIGFyZSBvbmx5IHZhbGlkIGZvciB0aGlzIHJlbmRlclxuICAgIC8vIHBoYXNlLCB3aGljaCB3ZSBhcmUgbm93IGFib3J0aW5nLiBSZW1vdmUgdGhlIHVwZGF0ZXMgZnJvbSB0aGUgcXVldWVzIHNvXG4gICAgLy8gdGhleSBkbyBub3QgcGVyc2lzdCB0byB0aGUgbmV4dCByZW5kZXIuIERvIG5vdCByZW1vdmUgdXBkYXRlcyBmcm9tIGhvb2tzXG4gICAgLy8gdGhhdCB3ZXJlbid0IHByb2Nlc3NlZC5cbiAgICAvL1xuICAgIC8vIE9ubHkgcmVzZXQgdGhlIHVwZGF0ZXMgZnJvbSB0aGUgcXVldWUgaWYgaXQgaGFzIGEgY2xvbmUuIElmIGl0IGRvZXNcbiAgICAvLyBub3QgaGF2ZSBhIGNsb25lLCB0aGF0IG1lYW5zIGl0IHdhc24ndCBwcm9jZXNzZWQsIGFuZCB0aGUgdXBkYXRlcyB3ZXJlXG4gICAgLy8gc2NoZWR1bGVkIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgdmFyIGhvb2sgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGU7XG5cbiAgICB3aGlsZSAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcblxuICAgICAgaWYgKHF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBob29rID0gaG9vay5uZXh0O1xuICAgIH1cblxuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICB7XG4gICAgaG9va1R5cGVzRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDtcbiAgICBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gZmFsc2U7XG4gIH1cblxuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gIHZhciBob29rID0ge1xuICAgIG1lbW9pemVkU3RhdGU6IG51bGwsXG4gICAgYmFzZVN0YXRlOiBudWxsLFxuICAgIGJhc2VRdWV1ZTogbnVsbCxcbiAgICBxdWV1ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgaW4gdGhlIGxpc3RcbiAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBob29rO1xuICB9IGVsc2Uge1xuICAgIC8vIEFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgd29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBob29rO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbn1cblxuZnVuY3Rpb24gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkge1xuICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYm90aCBmb3IgdXBkYXRlcyBhbmQgZm9yIHJlLXJlbmRlcnMgdHJpZ2dlcmVkIGJ5IGFcbiAgLy8gcmVuZGVyIHBoYXNlIHVwZGF0ZS4gSXQgYXNzdW1lcyB0aGVyZSBpcyBlaXRoZXIgYSBjdXJyZW50IGhvb2sgd2UgY2FuXG4gIC8vIGNsb25lLCBvciBhIHdvcmstaW4tcHJvZ3Jlc3MgaG9vayBmcm9tIGEgcHJldmlvdXMgcmVuZGVyIHBhc3MgdGhhdCB3ZSBjYW5cbiAgLy8gdXNlIGFzIGEgYmFzZS4gV2hlbiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBiYXNlIGxpc3QsIHdlIG11c3Qgc3dpdGNoIHRvXG4gIC8vIHRoZSBkaXNwYXRjaGVyIHVzZWQgZm9yIG1vdW50cy5cbiAgdmFyIG5leHRDdXJyZW50SG9vaztcblxuICBpZiAoY3VycmVudEhvb2sgPT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dEN1cnJlbnRIb29rID0gbnVsbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgfVxuXG4gIHZhciBuZXh0V29ya0luUHJvZ3Jlc3NIb29rO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlO1xuICB9IGVsc2Uge1xuICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dDtcbiAgfVxuXG4gIGlmIChuZXh0V29ya0luUHJvZ3Jlc3NIb29rICE9PSBudWxsKSB7XG4gICAgLy8gVGhlcmUncyBhbHJlYWR5IGEgd29yay1pbi1wcm9ncmVzcy4gUmV1c2UgaXQuXG4gICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbmV4dFdvcmtJblByb2dyZXNzSG9vaztcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gICAgY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2s7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ2xvbmUgZnJvbSB0aGUgY3VycmVudCBob29rLlxuICAgIGlmICghKG5leHRDdXJyZW50SG9vayAhPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmVuZGVyZWQgbW9yZSBob29rcyB0aGFuIGR1cmluZyB0aGUgcHJldmlvdXMgcmVuZGVyLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2s7XG4gICAgdmFyIG5ld0hvb2sgPSB7XG4gICAgICBtZW1vaXplZFN0YXRlOiBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLFxuICAgICAgYmFzZVN0YXRlOiBjdXJyZW50SG9vay5iYXNlU3RhdGUsXG4gICAgICBiYXNlUXVldWU6IGN1cnJlbnRIb29rLmJhc2VRdWV1ZSxcbiAgICAgIHF1ZXVlOiBjdXJyZW50SG9vay5xdWV1ZSxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgaG9vayBpbiB0aGUgbGlzdC5cbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9IG5ld0hvb2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBuZXdIb29rO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKSB7XG4gIHJldHVybiB7XG4gICAgbGFzdEVmZmVjdDogbnVsbFxuICB9O1xufVxuXG5mdW5jdGlvbiBiYXNpY1N0YXRlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIC8vICRGbG93Rml4TWU6IEZsb3cgZG9lc24ndCBsaWtlIG1peGVkIHR5cGVzXG4gIHJldHVybiB0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nID8gYWN0aW9uKHN0YXRlKSA6IGFjdGlvbjtcbn1cblxuZnVuY3Rpb24gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgaW5pdGlhbFN0YXRlO1xuXG4gIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0KGluaXRpYWxBcmcpO1xuICB9IGVsc2Uge1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxBcmc7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZSA9IHtcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IHJlZHVjZXIsXG4gICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICB9O1xuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgcXVldWUpO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcblxuICBpZiAoIShxdWV1ZSAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgdmFyIGN1cnJlbnQgPSBjdXJyZW50SG9vazsgLy8gVGhlIGxhc3QgcmViYXNlIHVwZGF0ZSB0aGF0IGlzIE5PVCBwYXJ0IG9mIHRoZSBiYXNlIHN0YXRlLlxuXG4gIHZhciBiYXNlUXVldWUgPSBjdXJyZW50LmJhc2VRdWV1ZTsgLy8gVGhlIGxhc3QgcGVuZGluZyB1cGRhdGUgdGhhdCBoYXNuJ3QgYmVlbiBwcm9jZXNzZWQgeWV0LlxuXG4gIHZhciBwZW5kaW5nUXVldWUgPSBxdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBXZSBoYXZlIG5ldyB1cGRhdGVzIHRoYXQgaGF2ZW4ndCBiZWVuIHByb2Nlc3NlZCB5ZXQuXG4gICAgLy8gV2UnbGwgYWRkIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG4gICAgaWYgKGJhc2VRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgLy8gTWVyZ2UgdGhlIHBlbmRpbmcgcXVldWUgYW5kIHRoZSBiYXNlIHF1ZXVlLlxuICAgICAgdmFyIGJhc2VGaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgICAgdmFyIHBlbmRpbmdGaXJzdCA9IHBlbmRpbmdRdWV1ZS5uZXh0O1xuICAgICAgYmFzZVF1ZXVlLm5leHQgPSBwZW5kaW5nRmlyc3Q7XG4gICAgICBwZW5kaW5nUXVldWUubmV4dCA9IGJhc2VGaXJzdDtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoY3VycmVudC5iYXNlUXVldWUgIT09IGJhc2VRdWV1ZSkge1xuICAgICAgICAvLyBJbnRlcm5hbCBpbnZhcmlhbnQgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgZmVhc2libHkgY291bGQgaW5cbiAgICAgICAgLy8gdGhlIGZ1dHVyZSBpZiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcsIG9yIHNvbWUgZm9ybSBvZiB0aGF0LlxuICAgICAgICBlcnJvcignSW50ZXJuYWwgZXJyb3I6IEV4cGVjdGVkIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgdG8gYmUgYSBjbG9uZS4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnQuYmFzZVF1ZXVlID0gYmFzZVF1ZXVlID0gcGVuZGluZ1F1ZXVlO1xuICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGJhc2VRdWV1ZSAhPT0gbnVsbCkge1xuICAgIC8vIFdlIGhhdmUgYSBxdWV1ZSB0byBwcm9jZXNzLlxuICAgIHZhciBmaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgIHZhciBuZXdTdGF0ZSA9IGN1cnJlbnQuYmFzZVN0YXRlO1xuICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgIHZhciBuZXdCYXNlUXVldWVGaXJzdCA9IG51bGw7XG4gICAgdmFyIG5ld0Jhc2VRdWV1ZUxhc3QgPSBudWxsO1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdDtcblxuICAgIGRvIHtcbiAgICAgIHZhciB1cGRhdGVMYW5lID0gdXBkYXRlLmxhbmU7XG5cbiAgICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lKSkge1xuICAgICAgICAvLyBQcmlvcml0eSBpcyBpbnN1ZmZpY2llbnQuIFNraXAgdGhpcyB1cGRhdGUuIElmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgICAgIC8vIHNraXBwZWQgdXBkYXRlLCB0aGUgcHJldmlvdXMgdXBkYXRlL3N0YXRlIGlzIHRoZSBuZXcgYmFzZVxuICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICBlYWdlclJlZHVjZXI6IHVwZGF0ZS5lYWdlclJlZHVjZXIsXG4gICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlRmlyc3QgPSBuZXdCYXNlUXVldWVMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IGNsb25lO1xuICAgICAgICB9IC8vIFVwZGF0ZSB0aGUgcmVtYWluaW5nIHByaW9yaXR5IGluIHRoZSBxdWV1ZS5cbiAgICAgICAgLy8gVE9ETzogRG9uJ3QgbmVlZCB0byBhY2N1bXVsYXRlIHRoaXMuIEluc3RlYWQsIHdlIGNhbiByZW1vdmVcbiAgICAgICAgLy8gcmVuZGVyTGFuZXMgZnJvbSB0aGUgb3JpZ2luYWwgbGFuZXMuXG5cblxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzID0gbWVyZ2VMYW5lcyhjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzLCB1cGRhdGVMYW5lKTtcbiAgICAgICAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyh1cGRhdGVMYW5lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgdXBkYXRlIGRvZXMgaGF2ZSBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfY2xvbmUgPSB7XG4gICAgICAgICAgICAvLyBUaGlzIHVwZGF0ZSBpcyBnb2luZyB0byBiZSBjb21taXR0ZWQgc28gd2UgbmV2ZXIgd2FudCB1bmNvbW1pdFxuICAgICAgICAgICAgLy8gaXQuIFVzaW5nIE5vTGFuZSB3b3JrcyBiZWNhdXNlIDAgaXMgYSBzdWJzZXQgb2YgYWxsIGJpdG1hc2tzLCBzb1xuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIG5ldmVyIGJlIHNraXBwZWQgYnkgdGhlIGNoZWNrIGFib3ZlLlxuICAgICAgICAgICAgbGFuZTogTm9MYW5lLFxuICAgICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgICAgZWFnZXJSZWR1Y2VyOiB1cGRhdGUuZWFnZXJSZWR1Y2VyLFxuICAgICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gX2Nsb25lO1xuICAgICAgICB9IC8vIFByb2Nlc3MgdGhpcyB1cGRhdGUuXG5cblxuICAgICAgICBpZiAodXBkYXRlLmVhZ2VyUmVkdWNlciA9PT0gcmVkdWNlcikge1xuICAgICAgICAgIC8vIElmIHRoaXMgdXBkYXRlIHdhcyBwcm9jZXNzZWQgZWFnZXJseSwgYW5kIGl0cyByZWR1Y2VyIG1hdGNoZXMgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCByZWR1Y2VyLCB3ZSBjYW4gdXNlIHRoZSBlYWdlcmx5IGNvbXB1dGVkIHN0YXRlLlxuICAgICAgICAgIG5ld1N0YXRlID0gdXBkYXRlLmVhZ2VyU3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGFjdGlvbiA9IHVwZGF0ZS5hY3Rpb247XG4gICAgICAgICAgbmV3U3RhdGUgPSByZWR1Y2VyKG5ld1N0YXRlLCBhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgIH0gd2hpbGUgKHVwZGF0ZSAhPT0gbnVsbCAmJiB1cGRhdGUgIT09IGZpcnN0KTtcblxuICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ID09PSBudWxsKSB7XG4gICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gbmV3QmFzZVF1ZXVlRmlyc3Q7XG4gICAgfSAvLyBNYXJrIHRoYXQgdGhlIGZpYmVyIHBlcmZvcm1lZCB3b3JrLCBidXQgb25seSBpZiB0aGUgbmV3IHN0YXRlIGlzXG4gICAgLy8gZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc3RhdGUuXG5cblxuICAgIGlmICghb2JqZWN0SXMobmV3U3RhdGUsIGhvb2subWVtb2l6ZWRTdGF0ZSkpIHtcbiAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgaG9vay5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgaG9vay5iYXNlUXVldWUgPSBuZXdCYXNlUXVldWVMYXN0O1xuICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cblxuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaDtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcblxuICBpZiAoIShxdWV1ZSAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjsgLy8gVGhpcyBpcyBhIHJlLXJlbmRlci4gQXBwbHkgdGhlIG5ldyByZW5kZXIgcGhhc2UgdXBkYXRlcyB0byB0aGUgcHJldmlvdXNcbiAgLy8gd29yay1pbi1wcm9ncmVzcyBob29rLlxuXG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoO1xuICB2YXIgbGFzdFJlbmRlclBoYXNlVXBkYXRlID0gcXVldWUucGVuZGluZztcbiAgdmFyIG5ld1N0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChsYXN0UmVuZGVyUGhhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgcXVldWUgZG9lc24ndCBwZXJzaXN0IHBhc3QgdGhpcyByZW5kZXIgcGFzcy5cbiAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICB2YXIgZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IGxhc3RSZW5kZXJQaGFzZVVwZGF0ZS5uZXh0O1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdFJlbmRlclBoYXNlVXBkYXRlO1xuXG4gICAgZG8ge1xuICAgICAgLy8gUHJvY2VzcyB0aGlzIHJlbmRlciBwaGFzZSB1cGRhdGUuIFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgdGhlXG4gICAgICAvLyBwcmlvcml0eSBiZWNhdXNlIGl0IHdpbGwgYWx3YXlzIGJlIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50XG4gICAgICAvLyByZW5kZXIncy5cbiAgICAgIHZhciBhY3Rpb24gPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgbmV3U3RhdGUgPSByZWR1Y2VyKG5ld1N0YXRlLCBhY3Rpb24pO1xuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgfSB3aGlsZSAodXBkYXRlICE9PSBmaXJzdFJlbmRlclBoYXNlVXBkYXRlKTsgLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgIC8vIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLlxuXG5cbiAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlOyAvLyBEb24ndCBwZXJzaXN0IHRoZSBzdGF0ZSBhY2N1bXVsYXRlZCBmcm9tIHRoZSByZW5kZXIgcGhhc2UgdXBkYXRlcyB0b1xuICAgIC8vIHRoZSBiYXNlIHN0YXRlIHVubGVzcyB0aGUgcXVldWUgaXMgZW1wdHkuXG4gICAgLy8gVE9ETzogTm90IHN1cmUgaWYgdGhpcyBpcyB0aGUgZGVzaXJlZCBzZW1hbnRpY3MsIGJ1dCBpdCdzIHdoYXQgd2VcbiAgICAvLyBkbyBmb3IgZ0RTRlAuIEkgY2FuJ3QgcmVtZW1iZXIgd2h5LlxuXG4gICAgaWYgKGhvb2suYmFzZVF1ZXVlID09PSBudWxsKSB7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH1cblxuICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cblxuICByZXR1cm4gW25ld1N0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHJlYWRGcm9tVW5zdWJjcmliZWRNdXRhYmxlU291cmNlKHJvb3QsIHNvdXJjZSwgZ2V0U25hcHNob3QpIHtcbiAge1xuICAgIHdhcm5BYm91dE11bHRpcGxlUmVuZGVyZXJzREVWKHNvdXJjZSk7XG4gIH1cblxuICB2YXIgZ2V0VmVyc2lvbiA9IHNvdXJjZS5fZ2V0VmVyc2lvbjtcbiAgdmFyIHZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTsgLy8gSXMgaXQgc2FmZSBmb3IgdGhpcyBjb21wb25lbnQgdG8gcmVhZCBmcm9tIHRoaXMgc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXI/XG5cbiAgdmFyIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBmYWxzZTsgLy8gQ2hlY2sgdGhlIHZlcnNpb24gZmlyc3QuXG4gIC8vIElmIHRoaXMgcmVuZGVyIGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRlZCB3aXRoIGEgc3BlY2lmaWMgdmVyc2lvbixcbiAgLy8gd2UgY2FuIHVzZSBpdCBhbG9uZSB0byBkZXRlcm1pbmUgaWYgd2UgY2FuIHNhZmVseSByZWFkIGZyb20gdGhlIHNvdXJjZS5cblxuICB2YXIgY3VycmVudFJlbmRlclZlcnNpb24gPSBnZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24oc291cmNlKTtcblxuICBpZiAoY3VycmVudFJlbmRlclZlcnNpb24gIT09IG51bGwpIHtcbiAgICAvLyBJdCdzIHNhZmUgdG8gcmVhZCBpZiB0aGUgc3RvcmUgaGFzbid0IGJlZW4gbXV0YXRlZCBzaW5jZSB0aGUgbGFzdCB0aW1lXG4gICAgLy8gd2UgcmVhZCBzb21ldGhpbmcuXG4gICAgaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSA9IGN1cnJlbnRSZW5kZXJWZXJzaW9uID09PSB2ZXJzaW9uO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gdmVyc2lvbiwgdGhlbiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHJlYWQgZnJvbSB0aGVcbiAgICAvLyBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlciBwYXNzLCBzbyB3ZSBuZWVkIHRvIGRvIGEgYml0IG1vcmUgd29yay5cbiAgICAvLyBXaGF0IHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlzIGlmIHRoZXJlIGFyZSBhbnkgaG9va3MgdGhhdCBhbHJlYWR5XG4gICAgLy8gc3Vic2NyaWJlZCB0byB0aGUgc291cmNlLCBhbmQgaWYgc28sIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwZW5kaW5nXG4gICAgLy8gbXV0YXRpb25zIHRoYXQgaGF2ZW4ndCBiZWVuIHN5bmNocm9uaXplZCB5ZXQuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcGVuZGluZyBtdXRhdGlvbnMsIHRoZW4gYHJvb3QubXV0YWJsZVJlYWRMYW5lc2Agd2lsbCBiZVxuICAgIC8vIGVtcHR5LCBhbmQgd2Uga25vdyB3ZSBjYW4gc2FmZWx5IHJlYWQuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSAqYXJlKiBwZW5kaW5nIG11dGF0aW9ucywgd2UgbWF5IHN0aWxsIGJlIGFibGUgdG8gc2FmZWx5IHJlYWRcbiAgICAvLyBpZiB0aGUgY3VycmVudGx5IHJlbmRlcmluZyBsYW5lcyBhcmUgaW5jbHVzaXZlIG9mIHRoZSBwZW5kaW5nIG11dGF0aW9uXG4gICAgLy8gbGFuZXMsIHNpbmNlIHRoYXQgZ3VhcmFudGVlcyB0aGF0IHRoZSB2YWx1ZSB3ZSdyZSBhYm91dCB0byByZWFkIGZyb21cbiAgICAvLyB0aGUgc291cmNlIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgdmFsdWVzIHRoYXQgd2UgcmVhZCBkdXJpbmcgdGhlIG1vc3RcbiAgICAvLyByZWNlbnQgbXV0YXRpb24uXG4gICAgaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSA9IGlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgcm9vdC5tdXRhYmxlUmVhZExhbmVzKTtcblxuICAgIGlmIChpc1NhZmVUb1JlYWRGcm9tU291cmNlKSB7XG4gICAgICAvLyBJZiBpdCdzIHNhZmUgdG8gcmVhZCBmcm9tIHRoaXMgc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIsXG4gICAgICAvLyBzdG9yZSB0aGUgdmVyc2lvbiBpbiBjYXNlIG90aGVyIGNvbXBvbmVudHMgcmVhZCBmcm9tIGl0LlxuICAgICAgLy8gQSBjaGFuZ2VkIHZlcnNpb24gbnVtYmVyIHdpbGwgbGV0IHRob3NlIGNvbXBvbmVudHMga25vdyB0byB0aHJvdyBhbmQgcmVzdGFydCB0aGUgcmVuZGVyLlxuICAgICAgc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKHNvdXJjZSwgdmVyc2lvbik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UpIHtcbiAgICB2YXIgc25hcHNob3QgPSBnZXRTbmFwc2hvdChzb3VyY2UuX3NvdXJjZSk7XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHNuYXBzaG90ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdNdXRhYmxlIHNvdXJjZSBzaG91bGQgbm90IHJldHVybiBhIGZ1bmN0aW9uIGFzIHRoZSBzbmFwc2hvdCB2YWx1ZS4gJyArICdGdW5jdGlvbnMgbWF5IGNsb3NlIG92ZXIgbXV0YWJsZSB2YWx1ZXMgYW5kIGNhdXNlIHRlYXJpbmcuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNuYXBzaG90O1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgc3BlY2lhbCBjYXNlIG9mIGEgbXV0YWJsZSBzb3VyY2UgYmVpbmcgc2hhcmVkIGJldHdlZW4gcmVuZGVyZXJzLlxuICAgIC8vIEluIHRoYXQgY2FzZSwgaWYgdGhlIHNvdXJjZSBpcyBtdXRhdGVkIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgcmVuZGVyZXIsXG4gICAgLy8gVGhlIHNlY29uZCByZW5kZXJlciBkb24ndCBrbm93IHRoYXQgaXQgbmVlZHMgdG8gcmVzZXQgdGhlIFdJUCB2ZXJzaW9uIGR1cmluZyB1bndpbmQsXG4gICAgLy8gKGJlY2F1c2UgdGhlIGhvb2sgb25seSBtYXJrcyBzb3VyY2VzIGFzIGRpcnR5IGlmIGl0J3Mgd3JpdHRlbiB0byB0aGVpciBXSVAgdmVyc2lvbikuXG4gICAgLy8gVGhhdCB3b3VsZCBjYXVzZSB0aGlzIHRlYXIgY2hlY2sgdG8gdGhyb3cgYWdhaW4gYW5kIGV2ZW50dWFsbHkgYmUgdmlzaWJsZSB0byB0aGUgdXNlci5cbiAgICAvLyBXZSBjYW4gYXZvaWQgdGhpcyBpbmZpbml0ZSBsb29wIGJ5IGV4cGxpY2l0bHkgbWFya2luZyB0aGUgc291cmNlIGFzIGRpcnR5LlxuICAgIC8vXG4gICAgLy8gVGhpcyBjYW4gbGVhZCB0byB0ZWFyaW5nIGluIHRoZSBmaXJzdCByZW5kZXJlciB3aGVuIGl0IHJlc3VtZXMsXG4gICAgLy8gYnV0IHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgdGhhdCAoc2hvcnQgb2YgdGhyb3dpbmcgaGVyZSBhbmQgcmVmdXNpbmcgdG8gY29udGludWUgdGhlIHJlbmRlcikuXG4gICAgbWFya1NvdXJjZUFzRGlydHkoc291cmNlKTtcblxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IHJlYWQgZnJvbSBtdXRhYmxlIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIHdpdGhvdXQgdGVhcmluZy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlTXV0YWJsZVNvdXJjZShob29rLCBzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgdmFyIHJvb3QgPSBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3QoKTtcblxuICBpZiAoIShyb290ICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIGEgd29yay1pbi1wcm9ncmVzcyByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBnZXRWZXJzaW9uID0gc291cmNlLl9nZXRWZXJzaW9uO1xuICB2YXIgdmVyc2lvbiA9IGdldFZlcnNpb24oc291cmNlLl9zb3VyY2UpO1xuICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG5cbiAgdmFyIF9kaXNwYXRjaGVyJHVzZVN0YXRlID0gZGlzcGF0Y2hlci51c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJlYWRGcm9tVW5zdWJjcmliZWRNdXRhYmxlU291cmNlKHJvb3QsIHNvdXJjZSwgZ2V0U25hcHNob3QpO1xuICB9KSxcbiAgICAgIGN1cnJlbnRTbmFwc2hvdCA9IF9kaXNwYXRjaGVyJHVzZVN0YXRlWzBdLFxuICAgICAgc2V0U25hcHNob3QgPSBfZGlzcGF0Y2hlciR1c2VTdGF0ZVsxXTtcblxuICB2YXIgc25hcHNob3QgPSBjdXJyZW50U25hcHNob3Q7IC8vIEdyYWIgYSBoYW5kbGUgdG8gdGhlIHN0YXRlIGhvb2sgYXMgd2VsbC5cbiAgLy8gV2UgdXNlIGl0IHRvIGNsZWFyIHRoZSBwZW5kaW5nIHVwZGF0ZSBxdWV1ZSBpZiB3ZSBoYXZlIGEgbmV3IHNvdXJjZS5cblxuICB2YXIgc3RhdGVIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rO1xuICB2YXIgbWVtb2l6ZWRTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHJlZnMgPSBtZW1vaXplZFN0YXRlLnJlZnM7XG4gIHZhciBwcmV2R2V0U25hcHNob3QgPSByZWZzLmdldFNuYXBzaG90O1xuICB2YXIgcHJldlNvdXJjZSA9IG1lbW9pemVkU3RhdGUuc291cmNlO1xuICB2YXIgcHJldlN1YnNjcmliZSA9IG1lbW9pemVkU3RhdGUuc3Vic2NyaWJlO1xuICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgcmVmczogcmVmcyxcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICBzdWJzY3JpYmU6IHN1YnNjcmliZVxuICB9OyAvLyBTeW5jIHRoZSB2YWx1ZXMgbmVlZGVkIGJ5IG91ciBzdWJzY3JpcHRpb24gaGFuZGxlciBhZnRlciBlYWNoIGNvbW1pdC5cblxuICBkaXNwYXRjaGVyLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmVmcy5nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90OyAvLyBOb3JtYWxseSB0aGUgZGlzcGF0Y2ggZnVuY3Rpb24gZm9yIGEgc3RhdGUgaG9vayBuZXZlciBjaGFuZ2VzLFxuICAgIC8vIGJ1dCB0aGlzIGhvb2sgcmVjcmVhdGVzIHRoZSBxdWV1ZSBpbiBjZXJ0YWluIGNhc2VzICB0byBhdm9pZCB1cGRhdGVzIGZyb20gc3RhbGUgc291cmNlcy5cbiAgICAvLyBoYW5kbGVDaGFuZ2UoKSBiZWxvdyBuZWVkcyB0byByZWZlcmVuY2UgdGhlIGRpc3BhdGNoIGZ1bmN0aW9uIHdpdGhvdXQgcmUtc3Vic2NyaWJpbmcsXG4gICAgLy8gc28gd2UgdXNlIGEgcmVmIHRvIGVuc3VyZSB0aGF0IGl0IGFsd2F5cyBoYXMgdGhlIGxhdGVzdCB2ZXJzaW9uLlxuXG4gICAgcmVmcy5zZXRTbmFwc2hvdCA9IHNldFNuYXBzaG90OyAvLyBDaGVjayBmb3IgYSBwb3NzaWJsZSBjaGFuZ2UgYmV0d2VlbiB3aGVuIHdlIGxhc3QgcmVuZGVyZWQgbm93LlxuXG4gICAgdmFyIG1heWJlTmV3VmVyc2lvbiA9IGdldFZlcnNpb24oc291cmNlLl9zb3VyY2UpO1xuXG4gICAgaWYgKCFvYmplY3RJcyh2ZXJzaW9uLCBtYXliZU5ld1ZlcnNpb24pKSB7XG4gICAgICB2YXIgbWF5YmVOZXdTbmFwc2hvdCA9IGdldFNuYXBzaG90KHNvdXJjZS5fc291cmNlKTtcblxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIG1heWJlTmV3U25hcHNob3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBlcnJvcignTXV0YWJsZSBzb3VyY2Ugc2hvdWxkIG5vdCByZXR1cm4gYSBmdW5jdGlvbiBhcyB0aGUgc25hcHNob3QgdmFsdWUuICcgKyAnRnVuY3Rpb25zIG1heSBjbG9zZSBvdmVyIG11dGFibGUgdmFsdWVzIGFuZCBjYXVzZSB0ZWFyaW5nLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghb2JqZWN0SXMoc25hcHNob3QsIG1heWJlTmV3U25hcHNob3QpKSB7XG4gICAgICAgIHNldFNuYXBzaG90KG1heWJlTmV3U25hcHNob3QpO1xuICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICAgICAgbWFya1Jvb3RNdXRhYmxlUmVhZChyb290LCBsYW5lKTtcbiAgICAgIH0gLy8gSWYgdGhlIHNvdXJjZSBtdXRhdGVkIGJldHdlZW4gcmVuZGVyIGFuZCBub3csXG4gICAgICAvLyB0aGVyZSBtYXkgYmUgc3RhdGUgdXBkYXRlcyBhbHJlYWR5IHNjaGVkdWxlZCBmcm9tIHRoZSBvbGQgc291cmNlLlxuICAgICAgLy8gRW50YW5nbGUgdGhlIHVwZGF0ZXMgc28gdGhhdCB0aGV5IHJlbmRlciBpbiB0aGUgc2FtZSBiYXRjaC5cblxuXG4gICAgICBtYXJrUm9vdEVudGFuZ2xlZChyb290LCByb290Lm11dGFibGVSZWFkTGFuZXMpO1xuICAgIH1cbiAgfSwgW2dldFNuYXBzaG90LCBzb3VyY2UsIHN1YnNjcmliZV0pOyAvLyBJZiB3ZSBnb3QgYSBuZXcgc291cmNlIG9yIHN1YnNjcmliZSBmdW5jdGlvbiwgcmUtc3Vic2NyaWJlIGluIGEgcGFzc2l2ZSBlZmZlY3QuXG5cbiAgZGlzcGF0Y2hlci51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbGF0ZXN0R2V0U25hcHNob3QgPSByZWZzLmdldFNuYXBzaG90O1xuICAgICAgdmFyIGxhdGVzdFNldFNuYXBzaG90ID0gcmVmcy5zZXRTbmFwc2hvdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGF0ZXN0U2V0U25hcHNob3QobGF0ZXN0R2V0U25hcHNob3Qoc291cmNlLl9zb3VyY2UpKTsgLy8gUmVjb3JkIGEgcGVuZGluZyBtdXRhYmxlIHNvdXJjZSB1cGRhdGUgd2l0aCB0aGUgc2FtZSBleHBpcmF0aW9uIHRpbWUuXG5cbiAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICAgIG1hcmtSb290TXV0YWJsZVJlYWQocm9vdCwgbGFuZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBBIHNlbGVjdG9yIG1pZ2h0IHRocm93IGFmdGVyIGEgc291cmNlIG11dGF0aW9uLlxuICAgICAgICAvLyBlLmcuIGl0IG1pZ2h0IHRyeSB0byByZWFkIGZyb20gYSBwYXJ0IG9mIHRoZSBzdG9yZSB0aGF0IG5vIGxvbmdlciBleGlzdHMuXG4gICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgc3RpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIHdpdGggUmVhY3QuXG4gICAgICAgIC8vIFdvcnN0IGNhc2UgdGhlIHNlbGVjdG9yIHdpbGwgdGhyb3cgYWdhaW4gYW5kIHRoZW4gYW4gZXJyb3IgYm91bmRhcnkgd2lsbCBoYW5kbGUgaXQuXG4gICAgICAgIGxhdGVzdFNldFNuYXBzaG90KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciB1bnN1YnNjcmliZSA9IHN1YnNjcmliZShzb3VyY2UuX3NvdXJjZSwgaGFuZGxlQ2hhbmdlKTtcblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgdW5zdWJzY3JpYmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ011dGFibGUgc291cmNlIHN1YnNjcmliZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhbiB1bnN1YnNjcmliZSBmdW5jdGlvbi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gIH0sIFtzb3VyY2UsIHN1YnNjcmliZV0pOyAvLyBJZiBhbnkgb2YgdGhlIGlucHV0cyB0byB1c2VNdXRhYmxlU291cmNlIGNoYW5nZSwgcmVhZGluZyBpcyBwb3RlbnRpYWxseSB1bnNhZmUuXG4gIC8vXG4gIC8vIElmIGVpdGhlciB0aGUgc291cmNlIG9yIHRoZSBzdWJzY3JpcHRpb24gaGF2ZSBjaGFuZ2VkIHdlIGNhbid0IGNhbid0IHRydXN0IHRoZSB1cGRhdGUgcXVldWUuXG4gIC8vIE1heWJlIHRoZSBzb3VyY2UgY2hhbmdlZCBpbiBhIHdheSB0aGF0IHRoZSBvbGQgc3Vic2NyaXB0aW9uIGlnbm9yZWQgYnV0IHRoZSBuZXcgb25lIGRlcGVuZHMgb24uXG4gIC8vXG4gIC8vIElmIHRoZSBnZXRTbmFwc2hvdCBmdW5jdGlvbiBjaGFuZ2VkLCB3ZSBhbHNvIHNob3VsZG4ndCByZWx5IG9uIHRoZSB1cGRhdGUgcXVldWUuXG4gIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgdW5kZXJseWluZyBzb3VyY2Ugd2FzIG11dGF0ZWQgYmV0d2VlbiB0aGUgd2hlbiB0aGUgbGFzdCBcImNoYW5nZVwiIGV2ZW50IGZpcmVkLFxuICAvLyBhbmQgd2hlbiB0aGUgY3VycmVudCByZW5kZXIgKHdpdGggdGhlIG5ldyBnZXRTbmFwc2hvdCBmdW5jdGlvbikgaXMgcHJvY2Vzc2VkLlxuICAvL1xuICAvLyBJbiBib3RoIGNhc2VzLCB3ZSBuZWVkIHRvIHRocm93IGF3YXkgcGVuZGluZyB1cGRhdGVzIChzaW5jZSB0aGV5IGFyZSBubyBsb25nZXIgcmVsZXZhbnQpXG4gIC8vIGFuZCB0cmVhdCByZWFkaW5nIGZyb20gdGhlIHNvdXJjZSBhcyB3ZSBkbyBpbiB0aGUgbW91bnQgY2FzZS5cblxuICBpZiAoIW9iamVjdElzKHByZXZHZXRTbmFwc2hvdCwgZ2V0U25hcHNob3QpIHx8ICFvYmplY3RJcyhwcmV2U291cmNlLCBzb3VyY2UpIHx8ICFvYmplY3RJcyhwcmV2U3Vic2NyaWJlLCBzdWJzY3JpYmUpKSB7XG4gICAgLy8gQ3JlYXRlIGEgbmV3IHF1ZXVlIGFuZCBzZXRTdGF0ZSBtZXRob2QsXG4gICAgLy8gU28gaWYgdGhlcmUgYXJlIGludGVybGVhdmVkIHVwZGF0ZXMsIHRoZXkgZ2V0IHB1c2hlZCB0byB0aGUgb2xkZXIgcXVldWUuXG4gICAgLy8gV2hlbiB0aGlzIGJlY29tZXMgY3VycmVudCwgdGhlIHByZXZpb3VzIHF1ZXVlIGFuZCBkaXNwYXRjaCBtZXRob2Qgd2lsbCBiZSBkaXNjYXJkZWQsXG4gICAgLy8gaW5jbHVkaW5nIGFueSBpbnRlcmxlYXZpbmcgdXBkYXRlcyB0aGF0IG9jY3VyLlxuICAgIHZhciBuZXdRdWV1ZSA9IHtcbiAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgICAgbGFzdFJlbmRlcmVkU3RhdGU6IHNuYXBzaG90XG4gICAgfTtcbiAgICBuZXdRdWV1ZS5kaXNwYXRjaCA9IHNldFNuYXBzaG90ID0gZGlzcGF0Y2hBY3Rpb24uYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBuZXdRdWV1ZSk7XG4gICAgc3RhdGVIb29rLnF1ZXVlID0gbmV3UXVldWU7XG4gICAgc3RhdGVIb29rLmJhc2VRdWV1ZSA9IG51bGw7XG4gICAgc25hcHNob3QgPSByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KTtcbiAgICBzdGF0ZUhvb2subWVtb2l6ZWRTdGF0ZSA9IHN0YXRlSG9vay5iYXNlU3RhdGUgPSBzbmFwc2hvdDtcbiAgfVxuXG4gIHJldHVybiBzbmFwc2hvdDtcbn1cblxuZnVuY3Rpb24gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICByZWZzOiB7XG4gICAgICBnZXRTbmFwc2hvdDogZ2V0U25hcHNob3QsXG4gICAgICBzZXRTbmFwc2hvdDogbnVsbFxuICAgIH0sXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmVcbiAgfTtcbiAgcmV0dXJuIHVzZU11dGFibGVTb3VyY2UoaG9vaywgc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgcmV0dXJuIHVzZU11dGFibGVTb3VyY2UoaG9vaywgc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbn1cblxuZnVuY3Rpb24gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuXG4gIGlmICh0eXBlb2YgaW5pdGlhbFN0YXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gJEZsb3dGaXhNZTogRmxvdyBkb2Vzbid0IGxpa2UgbWl4ZWQgdHlwZXNcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsU3RhdGUoKTtcbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlID0ge1xuICAgIHBlbmRpbmc6IG51bGwsXG4gICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICB9O1xuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgcXVldWUpO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbn1cblxuZnVuY3Rpb24gcHVzaEVmZmVjdCh0YWcsIGNyZWF0ZSwgZGVzdHJveSwgZGVwcykge1xuICB2YXIgZWZmZWN0ID0ge1xuICAgIHRhZzogdGFnLFxuICAgIGNyZWF0ZTogY3JlYXRlLFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgZGVwczogZGVwcyxcbiAgICAvLyBDaXJjdWxhclxuICAgIG5leHQ6IG51bGxcbiAgfTtcbiAgdmFyIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZTtcblxuICBpZiAoY29tcG9uZW50VXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKTtcbiAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlID0gY29tcG9uZW50VXBkYXRlUXVldWU7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICB9IGVsc2Uge1xuICAgIHZhciBsYXN0RWZmZWN0ID0gY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgIGlmIChsYXN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgIGxhc3RFZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgICAgIGVmZmVjdC5uZXh0ID0gZmlyc3RFZmZlY3Q7XG4gICAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlZmZlY3Q7XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciByZWYgPSB7XG4gICAgY3VycmVudDogaW5pdGlhbFZhbHVlXG4gIH07XG5cbiAge1xuICAgIE9iamVjdC5zZWFsKHJlZik7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSByZWY7XG4gIHJldHVybiByZWY7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgcmV0dXJuIGhvb2subWVtb2l6ZWRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gbW91bnRFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gZmliZXJGbGFncztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBob29rRmxhZ3MsIGNyZWF0ZSwgdW5kZWZpbmVkLCBuZXh0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBkZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gIGlmIChjdXJyZW50SG9vayAhPT0gbnVsbCkge1xuICAgIHZhciBwcmV2RWZmZWN0ID0gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICBkZXN0cm95ID0gcHJldkVmZmVjdC5kZXN0cm95O1xuXG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2RWZmZWN0LmRlcHM7XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICBwdXNoRWZmZWN0KGhvb2tGbGFncywgY3JlYXRlLCBkZXN0cm95LCBuZXh0RGVwcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgaG9va0ZsYWdzLCBjcmVhdGUsIGRlc3Ryb3ksIG5leHREZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoVXBkYXRlIHwgUGFzc2l2ZSwgUGFzc2l2ZSQxLCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSB8IFBhc3NpdmUsIFBhc3NpdmUkMSwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QoY3JlYXRlLCByZWYpIHtcbiAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVmQ2FsbGJhY2sgPSByZWY7XG5cbiAgICB2YXIgX2luc3QgPSBjcmVhdGUoKTtcblxuICAgIHJlZkNhbGxiYWNrKF9pbnN0KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmVmQ2FsbGJhY2sobnVsbCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZWYgIT09IG51bGwgJiYgcmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVmT2JqZWN0ID0gcmVmO1xuXG4gICAge1xuICAgICAgaWYgKCFyZWZPYmplY3QuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICBlcnJvcignRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIGZpcnN0IGFyZ3VtZW50IHRvIGVpdGhlciBiZSBhICcgKyAncmVmIGNhbGxiYWNrIG9yIFJlYWN0LmNyZWF0ZVJlZigpIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgJ2FuIG9iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhyZWZPYmplY3QpLmpvaW4oJywgJykgKyAnfScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBfaW5zdDIgPSBjcmVhdGUoKTtcblxuICAgIHJlZk9iamVjdC5jdXJyZW50ID0gX2luc3QyO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZWZPYmplY3QuY3VycmVudCA9IG51bGw7XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uICcgKyAndGhhdCBjcmVhdGVzIGEgaGFuZGxlLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjcmVhdGUgIT09IG51bGwgPyB0eXBlb2YgY3JlYXRlIDogJ251bGwnKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogSWYgZGVwcyBhcmUgcHJvdmlkZWQsIHNob3VsZCB3ZSBza2lwIGNvbXBhcmluZyB0aGUgcmVmIGl0c2VsZj9cblxuXG4gIHZhciBlZmZlY3REZXBzID0gZGVwcyAhPT0gbnVsbCAmJiBkZXBzICE9PSB1bmRlZmluZWQgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLCBlZmZlY3REZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gJyArICd0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNyZWF0ZSAhPT0gbnVsbCA/IHR5cGVvZiBjcmVhdGUgOiAnbnVsbCcpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBJZiBkZXBzIGFyZSBwcm92aWRlZCwgc2hvdWxkIHdlIHNraXAgY29tcGFyaW5nIHRoZSByZWYgaXRzZWxmP1xuXG5cbiAgdmFyIGVmZmVjdERlcHMgPSBkZXBzICE9PSBudWxsICYmIGRlcHMgIT09IHVuZGVmaW5lZCA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLCBlZmZlY3REZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnREZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikgey8vIFRoaXMgaG9vayBpcyBub3JtYWxseSBhIG5vLW9wLlxuICAvLyBUaGUgcmVhY3QtZGVidWctaG9va3MgcGFja2FnZSBpbmplY3RzIGl0cyBvd24gaW1wbGVtZW50YXRpb25cbiAgLy8gc28gdGhhdCBlLmcuIERldlRvb2xzIGNhbiBkaXNwbGF5IGN1c3RvbSBob29rIHZhbHVlcy5cbn1cblxudmFyIHVwZGF0ZURlYnVnVmFsdWUgPSBtb3VudERlYnVnVmFsdWU7XG5cbmZ1bmN0aW9uIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBuZXh0RGVwc107XG4gIHJldHVybiBjYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldlN0YXRlWzFdO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBbY2FsbGJhY2ssIG5leHREZXBzXTtcbiAgcmV0dXJuIGNhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiBtb3VudE1lbW8obmV4dENyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgbmV4dFZhbHVlID0gbmV4dENyZWF0ZSgpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbbmV4dFZhbHVlLCBuZXh0RGVwc107XG4gIHJldHVybiBuZXh0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1lbW8obmV4dENyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIHByZXZTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgLy8gQXNzdW1lIHRoZXNlIGFyZSBkZWZpbmVkLiBJZiB0aGV5J3JlIG5vdCwgYXJlSG9va0lucHV0c0VxdWFsIHdpbGwgd2Fybi5cbiAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RGVwcyA9IHByZXZTdGF0ZVsxXTtcblxuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgbmV4dERlcHNdO1xuICByZXR1cm4gbmV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIF9tb3VudFN0YXRlID0gbW91bnRTdGF0ZSh2YWx1ZSksXG4gICAgICBwcmV2VmFsdWUgPSBfbW91bnRTdGF0ZVswXSxcbiAgICAgIHNldFZhbHVlID0gX21vdW50U3RhdGVbMV07XG5cbiAgbW91bnRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSkge1xuICB2YXIgX3VwZGF0ZVN0YXRlID0gdXBkYXRlU3RhdGUoKSxcbiAgICAgIHByZXZWYWx1ZSA9IF91cGRhdGVTdGF0ZVswXSxcbiAgICAgIHNldFZhbHVlID0gX3VwZGF0ZVN0YXRlWzFdO1xuXG4gIHVwZGF0ZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICB0cnkge1xuICAgICAgc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICB9XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4gcHJldlZhbHVlO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIF9yZXJlbmRlclN0YXRlID0gcmVyZW5kZXJTdGF0ZSgpLFxuICAgICAgcHJldlZhbHVlID0gX3JlcmVuZGVyU3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF9yZXJlbmRlclN0YXRlWzFdO1xuXG4gIHVwZGF0ZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICB0cnkge1xuICAgICAgc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICB9XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4gcHJldlZhbHVlO1xufVxuXG5mdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oc2V0UGVuZGluZywgY2FsbGJhY2spIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuXG4gIHtcbiAgICBydW5XaXRoUHJpb3JpdHkkMShwcmlvcml0eUxldmVsIDwgVXNlckJsb2NraW5nUHJpb3JpdHkkMiA/IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgOiBwcmlvcml0eUxldmVsLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRQZW5kaW5nKHRydWUpO1xuICAgIH0pO1xuICAgIHJ1bldpdGhQcmlvcml0eSQxKHByaW9yaXR5TGV2ZWwgPiBOb3JtYWxQcmlvcml0eSQxID8gTm9ybWFsUHJpb3JpdHkkMSA6IHByaW9yaXR5TGV2ZWwsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFBlbmRpbmcoZmFsc2UpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRUcmFuc2l0aW9uKCkge1xuICB2YXIgX21vdW50U3RhdGUyID0gbW91bnRTdGF0ZShmYWxzZSksXG4gICAgICBpc1BlbmRpbmcgPSBfbW91bnRTdGF0ZTJbMF0sXG4gICAgICBzZXRQZW5kaW5nID0gX21vdW50U3RhdGUyWzFdOyAvLyBUaGUgYHN0YXJ0YCBtZXRob2QgY2FuIGJlIHN0b3JlZCBvbiBhIHJlZiwgc2luY2UgYHNldFBlbmRpbmdgXG4gIC8vIG5ldmVyIGNoYW5nZXMuXG5cblxuICB2YXIgc3RhcnQgPSBzdGFydFRyYW5zaXRpb24uYmluZChudWxsLCBzZXRQZW5kaW5nKTtcbiAgbW91bnRSZWYoc3RhcnQpO1xuICByZXR1cm4gW3N0YXJ0LCBpc1BlbmRpbmddO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUcmFuc2l0aW9uKCkge1xuICB2YXIgX3VwZGF0ZVN0YXRlMiA9IHVwZGF0ZVN0YXRlKCksXG4gICAgICBpc1BlbmRpbmcgPSBfdXBkYXRlU3RhdGUyWzBdO1xuXG4gIHZhciBzdGFydFJlZiA9IHVwZGF0ZVJlZigpO1xuICB2YXIgc3RhcnQgPSBzdGFydFJlZi5jdXJyZW50O1xuICByZXR1cm4gW3N0YXJ0LCBpc1BlbmRpbmddO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclRyYW5zaXRpb24oKSB7XG4gIHZhciBfcmVyZW5kZXJTdGF0ZTIgPSByZXJlbmRlclN0YXRlKCksXG4gICAgICBpc1BlbmRpbmcgPSBfcmVyZW5kZXJTdGF0ZTJbMF07XG5cbiAgdmFyIHN0YXJ0UmVmID0gdXBkYXRlUmVmKCk7XG4gIHZhciBzdGFydCA9IHN0YXJ0UmVmLmN1cnJlbnQ7XG4gIHJldHVybiBbc3RhcnQsIGlzUGVuZGluZ107XG59XG5cbnZhciBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gZmFsc2U7XG5mdW5jdGlvbiBnZXRJc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlSW5ERVYoKSB7XG4gIHtcbiAgICByZXR1cm4gaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuT25PcGFxdWVJZGVudGlmaWVyQWNjZXNzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIC8vIFRPRE86IFNob3VsZCB3YXJuIGluIGVmZmVjdHMgYW5kIGNhbGxiYWNrcywgdG9vXG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdVbmtub3duJztcblxuICAgIGlmIChnZXRJc1JlbmRlcmluZygpICYmICFkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyW25hbWVdKSB7XG4gICAgICBlcnJvcignVGhlIG9iamVjdCBwYXNzZWQgYmFjayBmcm9tIHVzZU9wYXF1ZUlkZW50aWZpZXIgaXMgbWVhbnQgdG8gYmUgJyArICdwYXNzZWQgdGhyb3VnaCB0byBhdHRyaWJ1dGVzIG9ubHkuIERvIG5vdCByZWFkIHRoZSAnICsgJ3ZhbHVlIGRpcmVjdGx5LicpO1xuXG4gICAgICBkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyW25hbWVdID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRPcGFxdWVJZGVudGlmaWVyKCkge1xuICB2YXIgbWFrZUlkID0gIG1ha2VDbGllbnRJZEluREVWLmJpbmQobnVsbCwgd2Fybk9uT3BhcXVlSWRlbnRpZmllckFjY2Vzc0luREVWLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSkpIDtcblxuICBpZiAoZ2V0SXNIeWRyYXRpbmcoKSkge1xuICAgIHZhciBkaWRVcGdyYWRlID0gZmFsc2U7XG4gICAgdmFyIGZpYmVyID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMTtcblxuICAgIHZhciByZWFkVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWRpZFVwZ3JhZGUpIHtcbiAgICAgICAgLy8gT25seSB1cGdyYWRlIG9uY2UuIFRoaXMgd29ya3MgZXZlbiBpbnNpZGUgdGhlIHJlbmRlciBwaGFzZSBiZWNhdXNlXG4gICAgICAgIC8vIHRoZSB1cGRhdGUgaXMgYWRkZWQgdG8gYSBzaGFyZWQgcXVldWUsIHdoaWNoIG91dGxhc3RzIHRoZVxuICAgICAgICAvLyBpbi1wcm9ncmVzcyByZW5kZXIuXG4gICAgICAgIGRpZFVwZ3JhZGUgPSB0cnVlO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gdHJ1ZTtcbiAgICAgICAgICBzZXRJZChtYWtlSWQoKSk7XG4gICAgICAgICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuICAgICAgICAgIHdhcm5Pbk9wYXF1ZUlkZW50aWZpZXJBY2Nlc3NJbkRFVihmaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIG9iamVjdCBwYXNzZWQgYmFjayBmcm9tIHVzZU9wYXF1ZUlkZW50aWZpZXIgaXMgbWVhbnQgdG8gYmUgcGFzc2VkIHRocm91Z2ggdG8gYXR0cmlidXRlcyBvbmx5LiBEbyBub3QgcmVhZCB0aGUgdmFsdWUgZGlyZWN0bHkuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgaWQgPSBtYWtlT3BhcXVlSHlkcmF0aW5nT2JqZWN0KHJlYWRWYWx1ZSk7XG4gICAgdmFyIHNldElkID0gbW91bnRTdGF0ZShpZClbMV07XG5cbiAgICBpZiAoKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBVcGRhdGUgfCBQYXNzaXZlO1xuICAgICAgcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBQYXNzaXZlJDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0SWQobWFrZUlkKCkpO1xuICAgICAgfSwgdW5kZWZpbmVkLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaWQ7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9pZCA9IG1ha2VJZCgpO1xuXG4gICAgbW91bnRTdGF0ZShfaWQpO1xuICAgIHJldHVybiBfaWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlT3BhcXVlSWRlbnRpZmllcigpIHtcbiAgdmFyIGlkID0gdXBkYXRlU3RhdGUoKVswXTtcbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlck9wYXF1ZUlkZW50aWZpZXIoKSB7XG4gIHZhciBpZCA9IHJlcmVuZGVyU3RhdGUoKVswXTtcbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEFjdGlvbihmaWJlciwgcXVldWUsIGFjdGlvbikge1xuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbM10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKFwiU3RhdGUgdXBkYXRlcyBmcm9tIHRoZSB1c2VTdGF0ZSgpIGFuZCB1c2VSZWR1Y2VyKCkgSG9va3MgZG9uJ3Qgc3VwcG9ydCB0aGUgXCIgKyAnc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgJyArICdyZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gdGhlIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gIHZhciB1cGRhdGUgPSB7XG4gICAgbGFuZTogbGFuZSxcbiAgICBhY3Rpb246IGFjdGlvbixcbiAgICBlYWdlclJlZHVjZXI6IG51bGwsXG4gICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07IC8vIEFwcGVuZCB0aGUgdXBkYXRlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG5cbiAgdmFyIHBlbmRpbmcgPSBxdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgIHVwZGF0ZS5uZXh0ID0gdXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0O1xuICAgIHBlbmRpbmcubmV4dCA9IHVwZGF0ZTtcbiAgfVxuXG4gIHF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGZpYmVyID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpIHtcbiAgICAvLyBUaGlzIGlzIGEgcmVuZGVyIHBoYXNlIHVwZGF0ZS4gU3Rhc2ggaXQgaW4gYSBsYXppbHktY3JlYXRlZCBtYXAgb2ZcbiAgICAvLyBxdWV1ZSAtPiBsaW5rZWQgbGlzdCBvZiB1cGRhdGVzLiBBZnRlciB0aGlzIHJlbmRlciBwYXNzLCB3ZSdsbCByZXN0YXJ0XG4gICAgLy8gYW5kIGFwcGx5IHRoZSBzdGFzaGVkIHVwZGF0ZXMgb24gdG9wIG9mIHRoZSB3b3JrLWluLXByb2dyZXNzIGhvb2suXG4gICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGZpYmVyLmxhbmVzID09PSBOb0xhbmVzICYmIChhbHRlcm5hdGUgPT09IG51bGwgfHwgYWx0ZXJuYXRlLmxhbmVzID09PSBOb0xhbmVzKSkge1xuICAgICAgLy8gVGhlIHF1ZXVlIGlzIGN1cnJlbnRseSBlbXB0eSwgd2hpY2ggbWVhbnMgd2UgY2FuIGVhZ2VybHkgY29tcHV0ZSB0aGVcbiAgICAgIC8vIG5leHQgc3RhdGUgYmVmb3JlIGVudGVyaW5nIHRoZSByZW5kZXIgcGhhc2UuIElmIHRoZSBuZXcgc3RhdGUgaXMgdGhlXG4gICAgICAvLyBzYW1lIGFzIHRoZSBjdXJyZW50IHN0YXRlLCB3ZSBtYXkgYmUgYWJsZSB0byBiYWlsIG91dCBlbnRpcmVseS5cbiAgICAgIHZhciBsYXN0UmVuZGVyZWRSZWR1Y2VyID0gcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlcjtcblxuICAgICAgaWYgKGxhc3RSZW5kZXJlZFJlZHVjZXIgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgZWFnZXJTdGF0ZSA9IGxhc3RSZW5kZXJlZFJlZHVjZXIoY3VycmVudFN0YXRlLCBhY3Rpb24pOyAvLyBTdGFzaCB0aGUgZWFnZXJseSBjb21wdXRlZCBzdGF0ZSwgYW5kIHRoZSByZWR1Y2VyIHVzZWQgdG8gY29tcHV0ZVxuICAgICAgICAgIC8vIGl0LCBvbiB0aGUgdXBkYXRlIG9iamVjdC4gSWYgdGhlIHJlZHVjZXIgaGFzbid0IGNoYW5nZWQgYnkgdGhlXG4gICAgICAgICAgLy8gdGltZSB3ZSBlbnRlciB0aGUgcmVuZGVyIHBoYXNlLCB0aGVuIHRoZSBlYWdlciBzdGF0ZSBjYW4gYmUgdXNlZFxuICAgICAgICAgIC8vIHdpdGhvdXQgY2FsbGluZyB0aGUgcmVkdWNlciBhZ2Fpbi5cblxuICAgICAgICAgIHVwZGF0ZS5lYWdlclJlZHVjZXIgPSBsYXN0UmVuZGVyZWRSZWR1Y2VyO1xuICAgICAgICAgIHVwZGF0ZS5lYWdlclN0YXRlID0gZWFnZXJTdGF0ZTtcblxuICAgICAgICAgIGlmIChvYmplY3RJcyhlYWdlclN0YXRlLCBjdXJyZW50U3RhdGUpKSB7XG4gICAgICAgICAgICAvLyBGYXN0IHBhdGguIFdlIGNhbiBiYWlsIG91dCB3aXRob3V0IHNjaGVkdWxpbmcgUmVhY3QgdG8gcmUtcmVuZGVyLlxuICAgICAgICAgICAgLy8gSXQncyBzdGlsbCBwb3NzaWJsZSB0aGF0IHdlJ2xsIG5lZWQgdG8gcmViYXNlIHRoaXMgdXBkYXRlIGxhdGVyLFxuICAgICAgICAgICAgLy8gaWYgdGhlIGNvbXBvbmVudCByZS1yZW5kZXJzIGZvciBhIGRpZmZlcmVudCByZWFzb24gYW5kIGJ5IHRoYXRcbiAgICAgICAgICAgIC8vIHRpbWUgdGhlIHJlZHVjZXIgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikgey8vIFN1cHByZXNzIHRoZSBlcnJvci4gSXQgd2lsbCB0aHJvdyBhZ2FpbiBpbiB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgICB3YXJuSWZOb3RTY29wZWRXaXRoTWF0Y2hpbmdBY3QoZmliZXIpO1xuICAgICAgICB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5EZXYoZmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfVxufVxuXG52YXIgQ29udGV4dE9ubHlEaXNwYXRjaGVyID0ge1xuICByZWFkQ29udGV4dDogcmVhZENvbnRleHQsXG4gIHVzZUNhbGxiYWNrOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUNvbnRleHQ6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlTGF5b3V0RWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU1lbW86IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlUmVkdWNlcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VSZWY6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlU3RhdGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRGVidWdWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VEZWZlcnJlZFZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVRyYW5zaXRpb246IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlTXV0YWJsZVNvdXJjZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VPcGFxdWVJZGVudGlmaWVyOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxufTtcbnZhciBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSBudWxsO1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSBudWxsO1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSBudWxsO1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSBudWxsO1xuXG57XG4gIHZhciB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgZXJyb3IoJ0NvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuICcgKyAnSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gJyArICdJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgJyArICdpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLicpO1xuICB9O1xuXG4gIHZhciB3YXJuSW52YWxpZEhvb2tBY2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgZXJyb3IoJ0RvIG5vdCBjYWxsIEhvb2tzIGluc2lkZSB1c2VFZmZlY3QoLi4uKSwgdXNlTWVtbyguLi4pLCBvciBvdGhlciBidWlsdC1pbiBIb29rcy4gJyArICdZb3UgY2FuIG9ubHkgY2FsbCBIb29rcyBhdCB0aGUgdG9wIGxldmVsIG9mIHlvdXIgUmVhY3QgZnVuY3Rpb24uICcgKyAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ydWxlcy1vZi1ob29rcycpO1xuICB9O1xuXG4gIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlclRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbn1cblxudmFyIG5vdyQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdztcbnZhciBjb21taXRUaW1lID0gMDtcbnZhciBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuXG5mdW5jdGlvbiBnZXRDb21taXRUaW1lKCkge1xuICByZXR1cm4gY29tbWl0VGltZTtcbn1cblxuZnVuY3Rpb24gcmVjb3JkQ29tbWl0VGltZSgpIHtcblxuICBjb21taXRUaW1lID0gbm93JDEoKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRQcm9maWxlclRpbWVyKGZpYmVyKSB7XG5cbiAgcHJvZmlsZXJTdGFydFRpbWUgPSBub3ckMSgpO1xuXG4gIGlmIChmaWJlci5hY3R1YWxTdGFydFRpbWUgPCAwKSB7XG4gICAgZmliZXIuYWN0dWFsU3RhcnRUaW1lID0gbm93JDEoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZyhmaWJlcikge1xuXG4gIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG59XG5cbmZ1bmN0aW9uIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoZmliZXIsIG92ZXJyaWRlQmFzZVRpbWUpIHtcblxuICBpZiAocHJvZmlsZXJTdGFydFRpbWUgPj0gMCkge1xuICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdyQxKCkgLSBwcm9maWxlclN0YXJ0VGltZTtcbiAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcblxuICAgIGlmIChvdmVycmlkZUJhc2VUaW1lKSB7XG4gICAgICBmaWJlci5zZWxmQmFzZUR1cmF0aW9uID0gZWxhcHNlZFRpbWU7XG4gICAgfVxuXG4gICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKGZpYmVyKSB7XG4gIC8vIFRyYW5zZmVyIHRpbWUgc3BlbnQgcmVuZGVyaW5nIHRoZXNlIGNoaWxkcmVuIHNvIHdlIGRvbid0IGxvc2UgaXRcbiAgLy8gYWZ0ZXIgd2UgcmVyZW5kZXIuIFRoaXMgaXMgdXNlZCBhcyBhIGhlbHBlciBpbiBzcGVjaWFsIGNhc2VzXG4gIC8vIHdoZXJlIHdlIHNob3VsZCBjb3VudCB0aGUgd29yayBvZiBtdWx0aXBsZSBwYXNzZXMuXG4gIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkO1xuXG4gIHdoaWxlIChjaGlsZCkge1xuICAgIGZpYmVyLmFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbnZhciBkaWRXYXJuQWJvdXRCYWRDbGFzcztcbnZhciBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcztcbnZhciBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzO1xudmFyIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyO1xudmFyIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zO1xuXG57XG4gIGRpZFdhcm5BYm91dEJhZENsYXNzID0ge307XG4gIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnQgPSB7fTtcbiAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzID0ge307XG4gIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXIgPSB7fTtcbiAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnMgPSB7fTtcbn1cblxuZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJZiB0aGlzIGlzIGEgZnJlc2ggbmV3IGNvbXBvbmVudCB0aGF0IGhhc24ndCBiZWVuIHJlbmRlcmVkIHlldCwgd2VcbiAgICAvLyB3b24ndCB1cGRhdGUgaXRzIGNoaWxkIHNldCBieSBhcHBseWluZyBtaW5pbWFsIHNpZGUtZWZmZWN0cy4gSW5zdGVhZCxcbiAgICAvLyB3ZSB3aWxsIGFkZCB0aGVtIGFsbCB0byB0aGUgY2hpbGQgYmVmb3JlIGl0IGdldHMgcmVuZGVyZWQuIFRoYXQgbWVhbnNcbiAgICAvLyB3ZSBjYW4gb3B0aW1pemUgdGhpcyByZWNvbmNpbGlhdGlvbiBwYXNzIGJ5IG5vdCB0cmFja2luZyBzaWRlLWVmZmVjdHMuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBtb3VudENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGUgY3VycmVudCBjaGlsZCBpcyB0aGUgc2FtZSBhcyB0aGUgd29yayBpbiBwcm9ncmVzcywgaXQgbWVhbnMgdGhhdFxuICAgIC8vIHdlIGhhdmVuJ3QgeWV0IHN0YXJ0ZWQgYW55IHdvcmsgb24gdGhlc2UgY2hpbGRyZW4uIFRoZXJlZm9yZSwgd2UgdXNlXG4gICAgLy8gdGhlIGNsb25lIGFsZ29yaXRobSB0byBjcmVhdGUgYSBjb3B5IG9mIGFsbCB0aGUgY3VycmVudCBjaGlsZHJlbi5cbiAgICAvLyBJZiB3ZSBoYWQgYW55IHByb2dyZXNzZWQgd29yayBhbHJlYWR5LCB0aGF0IGlzIGludmFsaWQgYXQgdGhpcyBwb2ludCBzb1xuICAgIC8vIGxldCdzIHRocm93IGl0IG91dC5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50LmNoaWxkLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JjZVVubW91bnRDdXJyZW50QW5kUmVjb25jaWxlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgZm9yayBvZiByZWNvbmNpbGVDaGlsZHJlbi4gSXQncyB1c2VkIGluIGNhc2VzIHdoZXJlIHdlXG4gIC8vIHdhbnQgdG8gcmVjb25jaWxlIHdpdGhvdXQgbWF0Y2hpbmcgYWdhaW5zdCB0aGUgZXhpc3Rpbmcgc2V0LiBUaGlzIGhhcyB0aGVcbiAgLy8gZWZmZWN0IG9mIGFsbCBjdXJyZW50IGNoaWxkcmVuIGJlaW5nIHVubW91bnRlZDsgZXZlbiBpZiB0aGUgdHlwZSBhbmQga2V5XG4gIC8vIGFyZSB0aGUgc2FtZSwgdGhlIG9sZCBjaGlsZCBpcyB1bm1vdW50ZWQgYW5kIGEgbmV3IGNoaWxkIGlzIGNyZWF0ZWQuXG4gIC8vXG4gIC8vIFRvIGRvIHRoaXMsIHdlJ3JlIGdvaW5nIHRvIGdvIHRocm91Z2ggdGhlIHJlY29uY2lsZSBhbGdvcml0aG0gdHdpY2UuIEluXG4gIC8vIHRoZSBmaXJzdCBwYXNzLCB3ZSBzY2hlZHVsZSBhIGRlbGV0aW9uIGZvciBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4gYnlcbiAgLy8gcGFzc2luZyBudWxsLlxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50LmNoaWxkLCBudWxsLCByZW5kZXJMYW5lcyk7IC8vIEluIHRoZSBzZWNvbmQgcGFzcywgd2UgbW91bnQgdGhlIG5ldyBjaGlsZHJlbi4gVGhlIHRyaWNrIGhlcmUgaXMgdGhhdCB3ZVxuICAvLyBwYXNzIG51bGwgaW4gcGxhY2Ugb2Ygd2hlcmUgd2UgdXN1YWxseSBwYXNzIHRoZSBjdXJyZW50IGNoaWxkIHNldC4gVGhpcyBoYXNcbiAgLy8gdGhlIGVmZmVjdCBvZiByZW1vdW50aW5nIGFsbCBjaGlsZHJlbiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlaXJcbiAgLy8gaWRlbnRpdGllcyBtYXRjaC5cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRm9yd2FyZFJlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IGN1cnJlbnQgY2FuIGJlIG5vbi1udWxsIGhlcmUgZXZlbiBpZiB0aGUgY29tcG9uZW50XG4gIC8vIGhhc24ndCB5ZXQgbW91bnRlZC4gVGhpcyBoYXBwZW5zIGFmdGVyIHRoZSBmaXJzdCByZW5kZXIgc3VzcGVuZHMuXG4gIC8vIFdlJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZpbmUgb3IgY2FuIGNhdXNlIGlzc3Vlcy5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHJlbmRlciA9IENvbXBvbmVudC5yZW5kZXI7XG4gIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7IC8vIFRoZSByZXN0IGlzIGEgZm9yayBvZiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudFxuXG4gIHZhciBuZXh0Q2hpbGRyZW47XG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyLCBuZXh0UHJvcHMsIHJlZiwgcmVuZGVyTGFuZXMpO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXIsIG5leHRQcm9wcywgcmVmLCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSkge1xuICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB2YXIgdHlwZSA9IENvbXBvbmVudC50eXBlO1xuXG4gICAgaWYgKGlzU2ltcGxlRnVuY3Rpb25Db21wb25lbnQodHlwZSkgJiYgQ29tcG9uZW50LmNvbXBhcmUgPT09IG51bGwgJiYgLy8gU2ltcGxlTWVtb0NvbXBvbmVudCBjb2RlcGF0aCBkb2Vzbid0IHJlc29sdmUgb3V0ZXIgcHJvcHMgZWl0aGVyLlxuICAgIENvbXBvbmVudC5kZWZhdWx0UHJvcHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHJlc29sdmVkVHlwZSA9IHR5cGU7XG5cbiAgICAgIHtcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpO1xuICAgICAgfSAvLyBJZiB0aGlzIGlzIGEgcGxhaW4gZnVuY3Rpb24gY29tcG9uZW50IHdpdGhvdXQgZGVmYXVsdCBwcm9wcyxcbiAgICAgIC8vIGFuZCB3aXRoIG9ubHkgdGhlIGRlZmF1bHQgc2hhbGxvdyBjb21wYXJpc29uLCB3ZSB1cGdyYWRlIGl0XG4gICAgICAvLyB0byBhIFNpbXBsZU1lbW9Db21wb25lbnQgdG8gYWxsb3cgZmFzdCBwYXRoIHVwZGF0ZXMuXG5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MudGFnID0gU2ltcGxlTWVtb0NvbXBvbmVudDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlZFR5cGU7XG5cbiAgICAgIHtcbiAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCB0eXBlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlc29sdmVkVHlwZSwgbmV4dFByb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgLy8gSW5uZXIgbWVtbyBjb21wb25lbnQgcHJvcHMgYXJlbid0IGN1cnJlbnRseSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudC5cbiAgICAgICAgLy8gV2UgY291bGQgbW92ZSBpdCB0aGVyZSwgYnV0IHdlJ2Qgc3RpbGwgbmVlZCB0aGlzIGZvciBsYXp5IGNvZGUgcGF0aC5cbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKHR5cGUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hpbGQgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoQ29tcG9uZW50LnR5cGUsIG51bGwsIG5leHRQcm9wcywgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLm1vZGUsIHJlbmRlckxhbmVzKTtcbiAgICBjaGlsZC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgY2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjaGlsZDtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICB7XG4gICAgdmFyIF90eXBlID0gQ29tcG9uZW50LnR5cGU7XG4gICAgdmFyIF9pbm5lclByb3BUeXBlcyA9IF90eXBlLnByb3BUeXBlcztcblxuICAgIGlmIChfaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgIC8vIElubmVyIG1lbW8gY29tcG9uZW50IHByb3BzIGFyZW4ndCBjdXJyZW50bHkgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnQuXG4gICAgICAvLyBXZSBjb3VsZCBtb3ZlIGl0IHRoZXJlLCBidXQgd2UnZCBzdGlsbCBuZWVkIHRoaXMgZm9yIGxhenkgY29kZSBwYXRoLlxuICAgICAgY2hlY2tQcm9wVHlwZXMoX2lubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoX3R5cGUpKTtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudENoaWxkID0gY3VycmVudC5jaGlsZDsgLy8gVGhpcyBpcyBhbHdheXMgZXhhY3RseSBvbmUgY2hpbGRcblxuICBpZiAoIWluY2x1ZGVzU29tZUxhbmUodXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgIC8vIFRoaXMgd2lsbCBiZSB0aGUgcHJvcHMgd2l0aCByZXNvbHZlZCBkZWZhdWx0UHJvcHMsXG4gICAgLy8gdW5saWtlIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB3aGljaCB3aWxsIGJlIHRoZSB1bnJlc29sdmVkIG9uZXMuXG4gICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnRDaGlsZC5tZW1vaXplZFByb3BzOyAvLyBEZWZhdWx0IHRvIHNoYWxsb3cgY29tcGFyaXNvblxuXG4gICAgdmFyIGNvbXBhcmUgPSBDb21wb25lbnQuY29tcGFyZTtcbiAgICBjb21wYXJlID0gY29tcGFyZSAhPT0gbnVsbCA/IGNvbXBhcmUgOiBzaGFsbG93RXF1YWw7XG5cbiAgICBpZiAoY29tcGFyZShwcmV2UHJvcHMsIG5leHRQcm9wcykgJiYgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZikge1xuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgdmFyIG5ld0NoaWxkID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBuZXh0UHJvcHMpO1xuICBuZXdDaGlsZC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gIG5ld0NoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5ld0NoaWxkO1xuICByZXR1cm4gbmV3Q2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVE9ETzogY3VycmVudCBjYW4gYmUgbm9uLW51bGwgaGVyZSBldmVuIGlmIHRoZSBjb21wb25lbnRcbiAgLy8gaGFzbid0IHlldCBtb3VudGVkLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaW5uZXIgcmVuZGVyIHN1c3BlbmRzLlxuICAvLyBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmaW5lIG9yIGNhbiBjYXVzZSBpc3N1ZXMuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgb3V0ZXJNZW1vVHlwZSA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlO1xuXG4gICAgICBpZiAob3V0ZXJNZW1vVHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgIC8vIFdlIHdhcm4gd2hlbiB5b3UgZGVmaW5lIHByb3BUeXBlcyBvbiBsYXp5KClcbiAgICAgICAgLy8gc28gbGV0J3MganVzdCBza2lwIG92ZXIgaXQgdG8gZmluZCBtZW1vKCkgb3V0ZXIgd3JhcHBlci5cbiAgICAgICAgLy8gSW5uZXIgcHJvcHMgZm9yIG1lbW8gYXJlIHZhbGlkYXRlZCBsYXRlci5cbiAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSBvdXRlck1lbW9UeXBlO1xuICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIG91dGVyTWVtb1R5cGUgPSBpbml0KHBheWxvYWQpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgb3V0ZXJNZW1vVHlwZSA9IG51bGw7XG4gICAgICAgIH0gLy8gSW5uZXIgcHJvcFR5cGVzIHdpbGwgYmUgdmFsaWRhdGVkIGluIHRoZSBmdW5jdGlvbiBjb21wb25lbnQgcGF0aC5cblxuXG4gICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IG91dGVyTWVtb1R5cGUgJiYgb3V0ZXJNZW1vVHlwZS5wcm9wVHlwZXM7XG5cbiAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgKFNpbXBsZU1lbW9Db21wb25lbnQgaGFzIG5vIGRlZmF1bHRQcm9wcylcbiAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUob3V0ZXJNZW1vVHlwZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuXG4gICAgaWYgKHNoYWxsb3dFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykgJiYgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZiAmJiAoIC8vIFByZXZlbnQgYmFpbG91dCBpZiB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdlZCBkdWUgdG8gaG90IHJlbG9hZC5cbiAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9PT0gY3VycmVudC50eXBlICkpIHtcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcblxuICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lcykpIHtcbiAgICAgICAgLy8gVGhlIHBlbmRpbmcgbGFuZXMgd2VyZSBjbGVhcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYmVnaW5Xb3JrLiBXZSdyZVxuICAgICAgICAvLyBhYm91dCB0byBiYWlsIG91dCwgYnV0IHRoZXJlIG1pZ2h0IGJlIG90aGVyIGxhbmVzIHRoYXQgd2VyZW4ndFxuICAgICAgICAvLyBpbmNsdWRlZCBpbiB0aGUgY3VycmVudCByZW5kZXIuIFVzdWFsbHksIHRoZSBwcmlvcml0eSBsZXZlbCBvZiB0aGVcbiAgICAgICAgLy8gcmVtYWluaW5nIHVwZGF0ZXMgaXMgYWNjdW1sYXRlZCBkdXJpbmcgdGhlIGV2YWx1YXRpb24gb2YgdGhlXG4gICAgICAgIC8vIGNvbXBvbmVudCAoaS5lLiB3aGVuIHByb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZSkuIEJ1dCBzaW5jZSBzaW5jZVxuICAgICAgICAvLyB3ZSdyZSBiYWlsaW5nIG91dCBlYXJseSAqd2l0aG91dCogZXZhbHVhdGluZyB0aGUgY29tcG9uZW50LCB3ZSBuZWVkXG4gICAgICAgIC8vIHRvIGFjY291bnQgZm9yIGl0IGhlcmUsIHRvby4gUmVzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGZpYmVyLlxuICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgYXBwbGllcyB0byBTaW1wbGVNZW1vQ29tcG9uZW50LCBub3QgTWVtb0NvbXBvbmVudCxcbiAgICAgICAgLy8gYmVjYXVzZSBhIE1lbW9Db21wb25lbnQgZmliZXIgZG9lcyBub3QgaGF2ZSBob29rcyBvciBhbiB1cGRhdGUgcXVldWU7XG4gICAgICAgIC8vIHJhdGhlciwgaXQgd3JhcHMgYXJvdW5kIGFuIGlubmVyIGNvbXBvbmVudCwgd2hpY2ggbWF5IG9yIG1heSBub3RcbiAgICAgICAgLy8gY29udGFpbnMgaG9va3MuXG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhlIHJlc2V0IGF0IGluIGJlZ2luV29yayBvdXQgb2YgdGhlIGNvbW1vbiBwYXRoIHNvIHRoYXRcbiAgICAgICAgLy8gdGhpcyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gICAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKChjdXJyZW50LmZsYWdzICYgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IG9ubHkgZXhpc3RzIGZvciBsZWdhY3kgbW9kZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzE5MjE2LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkU3RhdGUgOiBudWxsO1xuXG4gIGlmIChuZXh0UHJvcHMubW9kZSA9PT0gJ2hpZGRlbicgfHwgbmV4dFByb3BzLm1vZGUgPT09ICd1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZycpIHtcbiAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgLy8gSW4gbGVnYWN5IHN5bmMgbW9kZSwgZG9uJ3QgZGVmZXIgdGhlIHN1YnRyZWUuIFJlbmRlciBpdCBub3cuXG4gICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoYXQgd2Ugc2hvdWxkIGRvIGluIEJsb2NraW5nIG1vZGUuXG4gICAgICB2YXIgbmV4dFN0YXRlID0ge1xuICAgICAgICBiYXNlTGFuZXM6IE5vTGFuZXNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgT2Zmc2NyZWVuTGFuZSkpIHtcbiAgICAgIHZhciBuZXh0QmFzZUxhbmVzO1xuXG4gICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBwcmV2QmFzZUxhbmVzID0gcHJldlN0YXRlLmJhc2VMYW5lcztcbiAgICAgICAgbmV4dEJhc2VMYW5lcyA9IG1lcmdlTGFuZXMocHJldkJhc2VMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dEJhc2VMYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgICAgfSAvLyBTY2hlZHVsZSB0aGlzIGZpYmVyIHRvIHJlLXJlbmRlciBhdCBvZmZzY3JlZW4gcHJpb3JpdHkuIFRoZW4gYmFpbG91dC5cblxuXG4gICAgICB7XG4gICAgICAgIG1hcmtTcGF3bmVkV29yayhPZmZzY3JlZW5MYW5lKTtcbiAgICAgIH1cblxuICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gbGFuZVRvTGFuZXMoT2Zmc2NyZWVuTGFuZSk7XG4gICAgICB2YXIgX25leHRTdGF0ZSA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBuZXh0QmFzZUxhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IF9uZXh0U3RhdGU7IC8vIFdlJ3JlIGFib3V0IHRvIGJhaWwgb3V0LCBidXQgd2UgbmVlZCB0byBwdXNoIHRoaXMgdG8gdGhlIHN0YWNrIGFueXdheVxuICAgICAgLy8gdG8gYXZvaWQgYSBwdXNoL3BvcCBtaXNhbGlnbm1lbnQuXG5cbiAgICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgbmV4dEJhc2VMYW5lcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVuZGVyaW5nIGF0IG9mZnNjcmVlbiwgc28gd2UgY2FuIGNsZWFyIHRoZSBiYXNlIGxhbmVzLlxuICAgICAgdmFyIF9uZXh0U3RhdGUyID0ge1xuICAgICAgICBiYXNlTGFuZXM6IE5vTGFuZXNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gX25leHRTdGF0ZTI7IC8vIFB1c2ggdGhlIGxhbmVzIHRoYXQgd2VyZSBza2lwcGVkIHdoZW4gd2UgYmFpbGVkIG91dC5cblxuICAgICAgdmFyIHN1YnRyZWVSZW5kZXJMYW5lcyA9IHByZXZTdGF0ZSAhPT0gbnVsbCA/IHByZXZTdGF0ZS5iYXNlTGFuZXMgOiByZW5kZXJMYW5lcztcbiAgICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9zdWJ0cmVlUmVuZGVyTGFuZXM7XG5cbiAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICBfc3VidHJlZVJlbmRlckxhbmVzID0gbWVyZ2VMYW5lcyhwcmV2U3RhdGUuYmFzZUxhbmVzLCByZW5kZXJMYW5lcyk7IC8vIFNpbmNlIHdlJ3JlIG5vdCBoaWRkZW4gYW55bW9yZSwgcmVzZXQgdGhlIHN0YXRlXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSB3ZXJlbid0IHByZXZpb3VzbHkgaGlkZGVuLCBhbmQgd2Ugc3RpbGwgYXJlbid0LCBzbyB0aGVyZSdzIG5vdGhpbmdcbiAgICAgIC8vIHNwZWNpYWwgdG8gZG8uIE5lZWQgdG8gcHVzaCB0byB0aGUgc3RhY2sgcmVnYXJkbGVzcywgdGhvdWdoLCB0byBhdm9pZFxuICAgICAgLy8gYSBwdXNoL3BvcCBtaXNhbGlnbm1lbnQuXG4gICAgICBfc3VidHJlZVJlbmRlckxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgfVxuXG4gICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCBfc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufSAvLyBOb3RlOiBUaGVzZSBoYXBwZW4gdG8gaGF2ZSBpZGVudGljYWwgYmVnaW4gcGhhc2VzLCBmb3Igbm93LiBXZSBzaG91bGRuJ3QgaG9sZFxuLy8gb3Vyc2VsdmVzIHRvIHRoaXMgY29uc3RyYWludCwgdGhvdWdoLiBJZiB0aGUgYmVoYXZpb3IgZGl2ZXJnZXMsIHdlIHNob3VsZFxuLy8gZm9yayB0aGUgZnVuY3Rpb24uXG5cblxudmFyIHVwZGF0ZUxlZ2FjeUhpZGRlbkNvbXBvbmVudCA9IHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudDtcblxuZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNb2RlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUHJvZmlsZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7IC8vIFJlc2V0IGVmZmVjdCBkdXJhdGlvbnMgZm9yIHRoZSBuZXh0IGV2ZW50dWFsIGVmZmVjdCBwaGFzZS5cbiAgICAvLyBUaGVzZSBhcmUgcmVzZXQgZHVyaW5nIHJlbmRlciB0byBhbGxvdyB0aGUgRGV2VG9vbHMgY29tbWl0IGhvb2sgYSBjaGFuY2UgdG8gcmVhZCB0aGVtLFxuXG4gICAgdmFyIHN0YXRlTm9kZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAwO1xuICAgIHN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAwO1xuICB9XG5cbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgdmFyIHJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCAmJiByZWYgIT09IG51bGwgfHwgY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnJlZiAhPT0gcmVmKSB7XG4gICAgLy8gU2NoZWR1bGUgYSBSZWYgZWZmZWN0XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUmVmO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRleHQ7XG5cbiAge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSk7XG4gICAgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgbmV4dENoaWxkcmVuO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSkge1xuICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG5cbiAgdmFyIGhhc0NvbnRleHQ7XG5cbiAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgfSBlbHNlIHtcbiAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIHZhciBzaG91bGRVcGRhdGU7XG5cbiAgaWYgKGluc3RhbmNlID09PSBudWxsKSB7XG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIEEgY2xhc3MgY29tcG9uZW50IHdpdGhvdXQgYW4gaW5zdGFuY2Ugb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkXG4gICAgICAvLyBpbnNpZGUgYSBub24tY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG9cbiAgICAgIC8vIHRyZWF0IGl0IGxpa2UgYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeVxuICAgICAgLy8gY29tbWl0dGVkLiBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgICBjdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgICB9IC8vIEluIHRoZSBpbml0aWFsIHBhc3Mgd2UgbWlnaHQgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGluc3RhbmNlLlxuXG5cbiAgICBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcyk7XG4gICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgIHNob3VsZFVwZGF0ZSA9IHRydWU7XG4gIH0gZWxzZSBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIEluIGEgcmVzdW1lLCB3ZSdsbCBhbHJlYWR5IGhhdmUgYW4gaW5zdGFuY2Ugd2UgY2FuIHJldXNlLlxuICAgIHNob3VsZFVwZGF0ZSA9IHJlc3VtZU1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRVcGRhdGUgPSB1cGRhdGVDbGFzc0luc3RhbmNlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIG5leHRVbml0T2ZXb3JrID0gZmluaXNoQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgc2hvdWxkVXBkYXRlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcyk7XG5cbiAge1xuICAgIHZhciBpbnN0ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKHNob3VsZFVwZGF0ZSAmJiBpbnN0LnByb3BzICE9PSBuZXh0UHJvcHMpIHtcbiAgICAgIGlmICghZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICBlcnJvcignSXQgbG9va3MgbGlrZSAlcyBpcyByZWFzc2lnbmluZyBpdHMgb3duIGB0aGlzLnByb3BzYCB3aGlsZSByZW5kZXJpbmcuICcgKyAnVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBjYW4gbGVhZCB0byBjb25mdXNpbmcgYnVncy4nLCBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdhIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFVuaXRPZldvcms7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaENsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHNob3VsZFVwZGF0ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gUmVmcyBzaG91bGQgdXBkYXRlIGV2ZW4gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2VcbiAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciBkaWRDYXB0dXJlRXJyb3IgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICBpZiAoIXNob3VsZFVwZGF0ZSAmJiAhZGlkQ2FwdHVyZUVycm9yKSB7XG4gICAgLy8gQ29udGV4dCBwcm92aWRlcnMgc2hvdWxkIGRlZmVyIHRvIHNDVSBmb3IgcmVuZGVyaW5nXG4gICAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICAgIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7IC8vIFJlcmVuZGVyXG5cbiAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gIHZhciBuZXh0Q2hpbGRyZW47XG5cbiAgaWYgKGRpZENhcHR1cmVFcnJvciAmJiB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIHdlIGNhcHR1cmVkIGFuIGVycm9yLCBidXQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIGlzIG5vdCBkZWZpbmVkLFxuICAgIC8vIHVubW91bnQgYWxsIHRoZSBjaGlsZHJlbi4gY29tcG9uZW50RGlkQ2F0Y2ggd2lsbCBzY2hlZHVsZSBhbiB1cGRhdGUgdG9cbiAgICAvLyByZS1yZW5kZXIgYSBmYWxsYmFjay4gVGhpcyBpcyB0ZW1wb3JhcnkgdW50aWwgd2UgbWlncmF0ZSBldmVyeW9uZSB0b1xuICAgIC8vIHRoZSBuZXcgQVBJLlxuICAgIC8vIFRPRE86IFdhcm4gaW4gYSBmdXR1cmUgcmVsZWFzZS5cbiAgICBuZXh0Q2hpbGRyZW4gPSBudWxsO1xuXG4gICAge1xuICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgICBuZXh0Q2hpbGRyZW4gPSBpbnN0YW5jZS5yZW5kZXIoKTtcblxuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaW5zdGFuY2UucmVuZGVyKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICAgIH1cbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGRpZENhcHR1cmVFcnJvcikge1xuICAgIC8vIElmIHdlJ3JlIHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVjb25jaWxlIHdpdGhvdXQgcmV1c2luZyBhbnkgb2ZcbiAgICAvLyB0aGUgZXhpc3RpbmcgY2hpbGRyZW4uIENvbmNlcHR1YWxseSwgdGhlIG5vcm1hbCBjaGlsZHJlbiBhbmQgdGhlIGNoaWxkcmVuXG4gICAgLy8gdGhhdCBhcmUgc2hvd24gb24gZXJyb3IgYXJlIHR3byBkaWZmZXJlbnQgc2V0cywgc28gd2Ugc2hvdWxkbid0IHJldXNlXG4gICAgLy8gbm9ybWFsIGNoaWxkcmVuIGV2ZW4gaWYgdGhlaXIgaWRlbnRpdGllcyBtYXRjaC5cbiAgICBmb3JjZVVubW91bnRDdXJyZW50QW5kUmVjb25jaWxlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gLy8gTWVtb2l6ZSBzdGF0ZSB1c2luZyB0aGUgdmFsdWVzIHdlIGp1c3QgdXNlZCB0byByZW5kZXIuXG4gIC8vIFRPRE86IFJlc3RydWN0dXJlIHNvIHdlIG5ldmVyIHJlYWQgdmFsdWVzIGZyb20gdGhlIGluc3RhbmNlLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlOyAvLyBUaGUgY29udGV4dCBtaWdodCBoYXZlIGNoYW5nZWQgc28gd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBpdC5cblxuICBpZiAoaGFzQ29udGV4dCkge1xuICAgIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpIHtcbiAgdmFyIHJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgaWYgKHJvb3QucGVuZGluZ0NvbnRleHQpIHtcbiAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzLCByb290LnBlbmRpbmdDb250ZXh0LCByb290LnBlbmRpbmdDb250ZXh0ICE9PSByb290LmNvbnRleHQpO1xuICB9IGVsc2UgaWYgKHJvb3QuY29udGV4dCkge1xuICAgIC8vIFNob3VsZCBhbHdheXMgYmUgc2V0XG4gICAgcHVzaFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcywgcm9vdC5jb250ZXh0LCBmYWxzZSk7XG4gIH1cblxuICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgcm9vdC5jb250YWluZXJJbmZvKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdFJvb3QoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgdXBkYXRlUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcblxuICBpZiAoIShjdXJyZW50ICE9PSBudWxsICYmIHVwZGF0ZVF1ZXVlICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIklmIHRoZSByb290IGRvZXMgbm90IGhhdmUgYW4gdXBkYXRlUXVldWUsIHdlIHNob3VsZCBoYXZlIGFscmVhZHkgYmFpbGVkIG91dC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgcHJldkNoaWxkcmVuID0gcHJldlN0YXRlICE9PSBudWxsID8gcHJldlN0YXRlLmVsZW1lbnQgOiBudWxsO1xuICBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0U3RhdGUuZWxlbWVudDtcblxuICBpZiAobmV4dENoaWxkcmVuID09PSBwcmV2Q2hpbGRyZW4pIHtcbiAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmIChyb290Lmh5ZHJhdGUgJiYgZW50ZXJIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBjdXJyZW50IGNoaWxkcmVuIHRoaXMgbWlnaHQgYmUgdGhlIGZpcnN0IHBhc3MuXG4gICAgLy8gV2UgYWx3YXlzIHRyeSB0byBoeWRyYXRlLiBJZiB0aGlzIGlzbid0IGEgaHlkcmF0aW9uIHBhc3MgdGhlcmUgd29uJ3RcbiAgICAvLyBiZSBhbnkgY2hpbGRyZW4gdG8gaHlkcmF0ZSB3aGljaCBpcyBlZmZlY3RpdmVseSB0aGUgc2FtZSB0aGluZyBhc1xuICAgIC8vIG5vdCBoeWRyYXRpbmcuXG4gICAge1xuICAgICAgdmFyIG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPSByb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE7XG5cbiAgICAgIGlmIChtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhICE9IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgdmFyIG11dGFibGVTb3VyY2UgPSBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhW2ldO1xuICAgICAgICAgIHZhciB2ZXJzaW9uID0gbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YVtpICsgMV07XG4gICAgICAgICAgc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKG11dGFibGVTb3VyY2UsIHZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkID0gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjaGlsZDtcbiAgICB2YXIgbm9kZSA9IGNoaWxkO1xuXG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgIC8vIE1hcmsgZWFjaCBjaGlsZCBhcyBoeWRyYXRpbmcuIFRoaXMgaXMgYSBmYXN0IHBhdGggdG8ga25vdyB3aGV0aGVyIHRoaXNcbiAgICAgIC8vIHRyZWUgaXMgcGFydCBvZiBhIGh5ZHJhdGluZyB0cmVlLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgY2hpbGRcbiAgICAgIC8vIG5vZGUgaGFzIGZ1bGx5IG1vdW50ZWQgeWV0LCBhbmQgZm9yIHNjaGVkdWxpbmcgZXZlbnQgcmVwbGF5aW5nLlxuICAgICAgLy8gQ29uY2VwdHVhbGx5IHRoaXMgaXMgc2ltaWxhciB0byBQbGFjZW1lbnQgaW4gdGhhdCBhIG5ldyBzdWJ0cmVlIGlzXG4gICAgICAvLyBpbnNlcnRlZCBpbnRvIHRoZSBSZWFjdCB0cmVlIGhlcmUuIEl0IGp1c3QgaGFwcGVucyB0byBub3QgbmVlZCBET01cbiAgICAgIC8vIG11dGF0aW9ucyBiZWNhdXNlIGl0IGFscmVhZHkgZXhpc3RzLlxuICAgICAgbm9kZS5mbGFncyA9IG5vZGUuZmxhZ3MgJiB+UGxhY2VtZW50IHwgSHlkcmF0aW5nO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlIHJlc2V0IGh5ZHJhdGlvbiBzdGF0ZSBpbiBjYXNlIHdlIGFib3J0ZWQgYW5kIHJlc3VtZWQgYW5vdGhlclxuICAgIC8vIHJvb3QuXG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTtcbiAgfVxuXG4gIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBudWxsO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YXIgaXNEaXJlY3RUZXh0Q2hpbGQgPSBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBuZXh0UHJvcHMpO1xuXG4gIGlmIChpc0RpcmVjdFRleHRDaGlsZCkge1xuICAgIC8vIFdlIHNwZWNpYWwgY2FzZSBhIGRpcmVjdCB0ZXh0IGNoaWxkIG9mIGEgaG9zdCBub2RlLiBUaGlzIGlzIGEgY29tbW9uXG4gICAgLy8gY2FzZS4gV2Ugd29uJ3QgaGFuZGxlIGl0IGFzIGEgcmVpZmllZCBjaGlsZC4gV2Ugd2lsbCBpbnN0ZWFkIGhhbmRsZVxuICAgIC8vIHRoaXMgaW4gdGhlIGhvc3QgZW52aXJvbm1lbnQgdGhhdCBhbHNvIGhhcyBhY2Nlc3MgdG8gdGhpcyBwcm9wLiBUaGF0XG4gICAgLy8gYXZvaWRzIGFsbG9jYXRpbmcgYW5vdGhlciBIb3N0VGV4dCBmaWJlciBhbmQgdHJhdmVyc2luZyBpdC5cbiAgICBuZXh0Q2hpbGRyZW4gPSBudWxsO1xuICB9IGVsc2UgaWYgKHByZXZQcm9wcyAhPT0gbnVsbCAmJiBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBwcmV2UHJvcHMpKSB7XG4gICAgLy8gSWYgd2UncmUgc3dpdGNoaW5nIGZyb20gYSBkaXJlY3QgdGV4dCBjaGlsZCB0byBhIG5vcm1hbCBjaGlsZCwgb3IgdG9cbiAgICAvLyBlbXB0eSwgd2UgbmVlZCB0byBzY2hlZHVsZSB0aGUgdGV4dCBjb250ZW50IHRvIGJlIHJlc2V0LlxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IENvbnRlbnRSZXNldDtcbiAgfVxuXG4gIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdFRleHQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gLy8gTm90aGluZyB0byBkbyBoZXJlLiBUaGlzIGlzIHRlcm1pbmFsLiBXZSdsbCBkbyB0aGUgY29tcGxldGlvbiBzdGVwXG4gIC8vIGltbWVkaWF0ZWx5IGFmdGVyLlxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG1vdW50TGF6eUNvbXBvbmVudChfY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGVsZW1lbnRUeXBlLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKF9jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gQSBsYXp5IGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBsYXp5Q29tcG9uZW50ID0gZWxlbWVudFR5cGU7XG4gIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuICB2YXIgQ29tcG9uZW50ID0gaW5pdChwYXlsb2FkKTsgLy8gU3RvcmUgdGhlIHVud3JhcHBlZCBjb21wb25lbnQgaW4gdGhlIHR5cGUuXG5cbiAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudDtcbiAgdmFyIHJlc29sdmVkVGFnID0gd29ya0luUHJvZ3Jlc3MudGFnID0gcmVzb2x2ZUxhenlDb21wb25lbnRUYWcoQ29tcG9uZW50KTtcbiAgdmFyIHJlc29sdmVkUHJvcHMgPSByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgcHJvcHMpO1xuICB2YXIgY2hpbGQ7XG5cbiAgc3dpdGNoIChyZXNvbHZlZFRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUNsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUZvcndhcmRSZWYobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgICAgICBjaGVja1Byb3BUeXBlcyhvdXRlclByb3BUeXBlcywgcmVzb2x2ZWRQcm9wcywgLy8gUmVzb2x2ZWQgZm9yIG91dGVyIG9ubHlcbiAgICAgICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlTWVtb0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudC50eXBlLCByZXNvbHZlZFByb3BzKSwgLy8gVGhlIGlubmVyIHR5cGUgY2FuIGhhdmUgZGVmYXVsdHMgdG9vXG4gICAgICAgIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgfVxuXG4gIHZhciBoaW50ID0gJyc7XG5cbiAge1xuICAgIGlmIChDb21wb25lbnQgIT09IG51bGwgJiYgdHlwZW9mIENvbXBvbmVudCA9PT0gJ29iamVjdCcgJiYgQ29tcG9uZW50LiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgIGhpbnQgPSAnIERpZCB5b3Ugd3JhcCBhIGNvbXBvbmVudCBpbiBSZWFjdC5sYXp5KCkgbW9yZSB0aGFuIG9uY2U/JztcbiAgICB9XG4gIH0gLy8gVGhpcyBtZXNzYWdlIGludGVudGlvbmFsbHkgZG9lc24ndCBtZW50aW9uIEZvcndhcmRSZWYgb3IgTWVtb0NvbXBvbmVudFxuICAvLyBiZWNhdXNlIHRoZSBmYWN0IHRoYXQgaXQncyBhIHNlcGFyYXRlIHR5cGUgb2Ygd29yayBpcyBhblxuICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuXG5cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQuIFJlY2VpdmVkIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvOiBcIiArIENvbXBvbmVudCArIFwiLiBMYXp5IGVsZW1lbnQgdHlwZSBtdXN0IHJlc29sdmUgdG8gYSBjbGFzcyBvciBmdW5jdGlvbi5cIiArIGhpbnQgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKF9jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gQW4gaW5jb21wbGV0ZSBjb21wb25lbnQgb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkIGluc2lkZSBhIG5vbi1cbiAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgLy8gYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeSBjb21taXR0ZWQuXG4gICAgLy8gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgIF9jdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9IC8vIFByb21vdGUgdGhlIGZpYmVyIHRvIGEgY2xhc3MgYW5kIHRyeSByZW5kZXJpbmcgYWdhaW4uXG5cblxuICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBDbGFzc0NvbXBvbmVudDsgLy8gVGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiBpcyBhIGZvcmsgb2YgYHVwZGF0ZUNsYXNzQ29tcG9uZW50YFxuICAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuICB2YXIgaGFzQ29udGV4dDtcblxuICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICB9IGVsc2Uge1xuICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzKTtcbiAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gZmluaXNoQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEFuIGluZGV0ZXJtaW5hdGUgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIGNvbnRleHQ7XG5cbiAge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZmFsc2UpO1xuICAgIGNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIHZhbHVlO1xuXG4gIHtcbiAgICBpZiAoQ29tcG9uZW50LnByb3RvdHlwZSAmJiB0eXBlb2YgQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRCYWRDbGFzc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcihcIlRoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gaGF2ZSBhIHJlbmRlciBtZXRob2QsIGJ1dCBkb2Vzbid0IGV4dGVuZCBSZWFjdC5Db21wb25lbnQuIFwiICsgJ1RoaXMgaXMgbGlrZWx5IHRvIGNhdXNlIGVycm9ycy4gQ2hhbmdlICVzIHRvIGV4dGVuZCBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4nLCBjb21wb25lbnROYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRCYWRDbGFzc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyh3b3JrSW5Qcm9ncmVzcywgbnVsbCk7XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgdmFsdWUgPSByZW5kZXJXaXRoSG9va3MobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcblxuICB7XG4gICAgLy8gU3VwcG9ydCBmb3IgbW9kdWxlIGNvbXBvbmVudHMgaXMgZGVwcmVjYXRlZCBhbmQgaXMgcmVtb3ZlZCBiZWhpbmQgYSBmbGFnLlxuICAgIC8vIFdoZXRoZXIgb3Igbm90IGl0IHdvdWxkIGNyYXNoIGxhdGVyLCB3ZSB3YW50IHRvIHNob3cgYSBnb29kIG1lc3NhZ2UgaW4gREVWIGZpcnN0LlxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZS5yZW5kZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUuJCR0eXBlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uIGNvbXBvbmVudCB0aGF0IHJldHVybnMgYSBjbGFzcyBpbnN0YW5jZS4gJyArICdDaGFuZ2UgJXMgdG8gYSBjbGFzcyB0aGF0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuICcgKyBcIklmIHlvdSBjYW4ndCB1c2UgYSBjbGFzcyB0cnkgYXNzaWduaW5nIHRoZSBwcm90b3R5cGUgb24gdGhlIGZ1bmN0aW9uIGFzIGEgd29ya2Fyb3VuZC4gXCIgKyBcImAlcy5wcm90b3R5cGUgPSBSZWFjdC5Db21wb25lbnQucHJvdG90eXBlYC4gRG9uJ3QgdXNlIGFuIGFycm93IGZ1bmN0aW9uIHNpbmNlIGl0IFwiICsgJ2Nhbm5vdCBiZSBjYWxsZWQgd2l0aCBgbmV3YCBieSBSZWFjdC4nLCBfY29tcG9uZW50TmFtZSwgX2NvbXBvbmVudE5hbWUsIF9jb21wb25lbnROYW1lKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCAvLyBSdW4gdGhlc2UgY2hlY2tzIGluIHByb2R1Y3Rpb24gb25seSBpZiB0aGUgZmxhZyBpcyBvZmYuXG4gIC8vIEV2ZW50dWFsbHkgd2UnbGwgZGVsZXRlIHRoaXMgYnJhbmNoIGFsdG9nZXRoZXIuXG4gICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZS5yZW5kZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUuJCR0eXBlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZTIgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWUyXSkge1xuICAgICAgICBlcnJvcignVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uIGNvbXBvbmVudCB0aGF0IHJldHVybnMgYSBjbGFzcyBpbnN0YW5jZS4gJyArICdDaGFuZ2UgJXMgdG8gYSBjbGFzcyB0aGF0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuICcgKyBcIklmIHlvdSBjYW4ndCB1c2UgYSBjbGFzcyB0cnkgYXNzaWduaW5nIHRoZSBwcm90b3R5cGUgb24gdGhlIGZ1bmN0aW9uIGFzIGEgd29ya2Fyb3VuZC4gXCIgKyBcImAlcy5wcm90b3R5cGUgPSBSZWFjdC5Db21wb25lbnQucHJvdG90eXBlYC4gRG9uJ3QgdXNlIGFuIGFycm93IGZ1bmN0aW9uIHNpbmNlIGl0IFwiICsgJ2Nhbm5vdCBiZSBjYWxsZWQgd2l0aCBgbmV3YCBieSBSZWFjdC4nLCBfY29tcG9uZW50TmFtZTIsIF9jb21wb25lbnROYW1lMiwgX2NvbXBvbmVudE5hbWUyKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lMl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gLy8gUHJvY2VlZCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgaXMgYSBjbGFzcyBpbnN0YW5jZVxuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBDbGFzc0NvbXBvbmVudDsgLy8gVGhyb3cgb3V0IGFueSBob29rcyB0aGF0IHdlcmUgdXNlZC5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDsgLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gICAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG4gICAgdmFyIGhhc0NvbnRleHQgPSBmYWxzZTtcblxuICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHZhbHVlLnN0YXRlICE9PSBudWxsICYmIHZhbHVlLnN0YXRlICE9PSB1bmRlZmluZWQgPyB2YWx1ZS5zdGF0ZSA6IG51bGw7XG4gICAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKTtcbiAgICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcblxuICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIHByb3BzKTtcbiAgICB9XG5cbiAgICBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIHZhbHVlKTtcbiAgICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gZmluaXNoQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb24gY29tcG9uZW50XG4gICAgd29ya0luUHJvZ3Jlc3MudGFnID0gRnVuY3Rpb25Db21wb25lbnQ7XG5cbiAgICB7XG5cbiAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhbHVlID0gcmVuZGVyV2l0aEhvb2tzKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZWNvbmNpbGVDaGlsZHJlbihudWxsLCB3b3JrSW5Qcm9ncmVzcywgdmFsdWUsIHJlbmRlckxhbmVzKTtcblxuICAgIHtcbiAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpIHtcbiAge1xuICAgIGlmIChDb21wb25lbnQpIHtcbiAgICAgIGlmIChDb21wb25lbnQuY2hpbGRDb250ZXh0VHlwZXMpIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IGNoaWxkQ29udGV4dFR5cGVzIGNhbm5vdCBiZSBkZWZpbmVkIG9uIGEgZnVuY3Rpb24gY29tcG9uZW50LicsIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnJlZiAhPT0gbnVsbCkge1xuICAgICAgdmFyIGluZm8gPSAnJztcbiAgICAgIHZhciBvd25lck5hbWUgPSBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpO1xuXG4gICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgIGluZm8gKz0gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgb3duZXJOYW1lICsgJ2AuJztcbiAgICAgIH1cblxuICAgICAgdmFyIHdhcm5pbmdLZXkgPSBvd25lck5hbWUgfHwgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSUQgfHwgJyc7XG4gICAgICB2YXIgZGVidWdTb3VyY2UgPSB3b3JrSW5Qcm9ncmVzcy5fZGVidWdTb3VyY2U7XG5cbiAgICAgIGlmIChkZWJ1Z1NvdXJjZSkge1xuICAgICAgICB3YXJuaW5nS2V5ID0gZGVidWdTb3VyY2UuZmlsZU5hbWUgKyAnOicgKyBkZWJ1Z1NvdXJjZS5saW5lTnVtYmVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmc1t3YXJuaW5nS2V5XSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnNbd2FybmluZ0tleV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBiZSBnaXZlbiByZWZzLiAnICsgJ0F0dGVtcHRzIHRvIGFjY2VzcyB0aGlzIHJlZiB3aWxsIGZhaWwuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHVzZSBSZWFjdC5mb3J3YXJkUmVmKCk/JXMnLCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZTMgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWUzXSkge1xuICAgICAgICBlcnJvcignJXM6IEZ1bmN0aW9uIGNvbXBvbmVudHMgZG8gbm90IHN1cHBvcnQgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLicsIF9jb21wb25lbnROYW1lMyk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTNdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIENvbXBvbmVudC5jb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgQ29tcG9uZW50LmNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWU0ID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWU0XSkge1xuICAgICAgICBlcnJvcignJXM6IEZ1bmN0aW9uIGNvbXBvbmVudHMgZG8gbm90IHN1cHBvcnQgY29udGV4dFR5cGUuJywgX2NvbXBvbmVudE5hbWU0KTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWU0XSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBTVVNQRU5ERURfTUFSS0VSID0ge1xuICBkZWh5ZHJhdGVkOiBudWxsLFxuICByZXRyeUxhbmU6IE5vTGFuZVxufTtcblxuZnVuY3Rpb24gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSB7XG4gIHJldHVybiB7XG4gICAgYmFzZUxhbmVzOiByZW5kZXJMYW5lc1xuICB9O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpIHtcbiAgcmV0dXJuIHtcbiAgICBiYXNlTGFuZXM6IG1lcmdlTGFuZXMocHJldk9mZnNjcmVlblN0YXRlLmJhc2VMYW5lcywgcmVuZGVyTGFuZXMpXG4gIH07XG59IC8vIFRPRE86IFByb2JhYmx5IHNob3VsZCBpbmxpbmUgdGhpcyBiYWNrXG5cblxuZnVuY3Rpb24gc2hvdWxkUmVtYWluT25GYWxsYmFjayhzdXNwZW5zZUNvbnRleHQsIGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjaywgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG9cbiAgLy8gcmVtYWluIG9uIHRoYXQgZmFsbGJhY2sgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBjb250ZW50IGhhcyByZXNvbHZlZC5cbiAgLy8gRm9yIGV4YW1wbGUsIFN1c3BlbnNlTGlzdCBjb29yZGluYXRlcyB3aGVuIG5lc3RlZCBjb250ZW50IGFwcGVhcnMuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIHN1c3BlbnNlU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgLy8gQ3VycmVudGx5IHNob3dpbmcgY29udGVudC4gRG9uJ3QgaGlkZSBpdCwgZXZlbiBpZiBGb3JjZVN1c3BlbnNlRmFsbGFja1xuICAgICAgLy8gaXMgdHJ1ZS4gTW9yZSBwcmVjaXNlIG5hbWUgbWlnaHQgYmUgXCJGb3JjZVJlbWFpblN1c3BlbnNlRmFsbGJhY2tcIi5cbiAgICAgIC8vIE5vdGU6IFRoaXMgaXMgYSBmYWN0b3Jpbmcgc21lbGwuIENhbid0IHJlbWFpbiBvbiBhIGZhbGxiYWNrIGlmIHRoZXJlJ3NcbiAgICAgIC8vIG5vIGZhbGxiYWNrIHRvIHJlbWFpbiBvbi5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gLy8gTm90IGN1cnJlbnRseSBzaG93aW5nIGNvbnRlbnQuIENvbnN1bHQgdGhlIFN1c3BlbnNlIGNvbnRleHQuXG5cblxuICByZXR1cm4gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoY3VycmVudCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVE9ETzogU2hvdWxkIG5vdCByZW1vdmUgcmVuZGVyIGxhbmVzIHRoYXQgd2VyZSBwaW5nZWQgZHVyaW5nIHRoaXMgcmVuZGVyXG4gIHJldHVybiByZW1vdmVMYW5lcyhjdXJyZW50LmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIFRoaXMgaXMgdXNlZCBieSBEZXZUb29scyB0byBmb3JjZSBhIGJvdW5kYXJ5IHRvIHN1c3BlbmQuXG5cbiAge1xuICAgIGlmIChzaG91bGRTdXNwZW5kKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuICB2YXIgc2hvd0ZhbGxiYWNrID0gZmFsc2U7XG4gIHZhciBkaWRTdXNwZW5kID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgaWYgKGRpZFN1c3BlbmQgfHwgc2hvdWxkUmVtYWluT25GYWxsYmFjayhzdXNwZW5zZUNvbnRleHQsIGN1cnJlbnQpKSB7XG4gICAgLy8gU29tZXRoaW5nIGluIHRoaXMgYm91bmRhcnkncyBzdWJ0cmVlIGFscmVhZHkgc3VzcGVuZGVkLiBTd2l0Y2ggdG9cbiAgICAvLyByZW5kZXJpbmcgdGhlIGZhbGxiYWNrIGNoaWxkcmVuLlxuICAgIHNob3dGYWxsYmFjayA9IHRydWU7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfkRpZENhcHR1cmU7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXR0ZW1wdGluZyB0aGUgbWFpbiBjb250ZW50XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgbmV3IG1vdW50IG9yIHRoaXMgYm91bmRhcnkgaXMgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgc3RhdGUuXG4gICAgICAvLyBNYXJrIHRoaXMgc3VidHJlZSBjb250ZXh0IGFzIGhhdmluZyBhdCBsZWFzdCBvbmUgaW52aXNpYmxlIHBhcmVudCB0aGF0IGNvdWxkXG4gICAgICAvLyBoYW5kbGUgdGhlIGZhbGxiYWNrIHN0YXRlLlxuICAgICAgLy8gQm91bmRhcmllcyB3aXRob3V0IGZhbGxiYWNrcyBvciBzaG91bGQgYmUgYXZvaWRlZCBhcmUgbm90IGNvbnNpZGVyZWQgc2luY2VcbiAgICAgIC8vIHRoZXkgY2Fubm90IGhhbmRsZSBwcmVmZXJyZWQgZmFsbGJhY2sgc3RhdGVzLlxuICAgICAgaWYgKG5leHRQcm9wcy5mYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIG5leHRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZSkge1xuICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBhZGRTdWJ0cmVlU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdXNwZW5zZUNvbnRleHQgPSBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQpO1xuICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpOyAvLyBPSywgdGhlIG5leHQgcGFydCBpcyBjb25mdXNpbmcuIFdlJ3JlIGFib3V0IHRvIHJlY29uY2lsZSB0aGUgU3VzcGVuc2VcbiAgLy8gYm91bmRhcnkncyBjaGlsZHJlbi4gVGhpcyBpbnZvbHZlcyBzb21lIGN1c3RvbSByZWNvbmNpbGF0aW9uIGxvZ2ljLiBUd29cbiAgLy8gbWFpbiByZWFzb25zIHRoaXMgaXMgc28gY29tcGxpY2F0ZWQuXG4gIC8vXG4gIC8vIEZpcnN0LCBMZWdhY3kgTW9kZSBoYXMgZGlmZmVyZW50IHNlbWFudGljcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFRoZVxuICAvLyBwcmltYXJ5IHRyZWUgd2lsbCBjb21taXQgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLCBzbyB3aGVuIHdlIGRvIHRoZVxuICAvLyBzZWNvbmQgcGFzcyB0byByZW5kZXIgdGhlIGZhbGxiYWNrLCB3ZSBkbyBzb21lIGV4Y2VlZGluZ2x5LCB1aCwgY2xldmVyXG4gIC8vIGhhY2tzIHRvIG1ha2UgdGhhdCBub3QgdG90YWxseSBicmVhay4gTGlrZSB0cmFuc2ZlcnJpbmcgZWZmZWN0cyBhbmRcbiAgLy8gZGVsZXRpb25zIGZyb20gaGlkZGVuIHRyZWUuIEluIENvbmN1cnJlbnQgTW9kZSwgaXQncyBtdWNoIHNpbXBsZXIsXG4gIC8vIGJlY2F1c2Ugd2UgYmFpbG91dCBvbiB0aGUgcHJpbWFyeSB0cmVlIGNvbXBsZXRlbHkgYW5kIGxlYXZlIGl0IGluIGl0cyBvbGRcbiAgLy8gc3RhdGUsIG5vIGVmZmVjdHMuIFNhbWUgYXMgd2hhdCB3ZSBkbyBmb3IgT2Zmc2NyZWVuIChleGNlcHQgdGhhdFxuICAvLyBPZmZzY3JlZW4gZG9lc24ndCBoYXZlIHRoZSBmaXJzdCByZW5kZXIgcGFzcykuXG4gIC8vXG4gIC8vIFNlY29uZCBpcyBoeWRyYXRpb24uIER1cmluZyBoeWRyYXRpb24sIHRoZSBTdXNwZW5zZSBmaWJlciBoYXMgYSBzbGlnaHRseVxuICAvLyBkaWZmZXJlbnQgbGF5b3V0LCB3aGVyZSB0aGUgY2hpbGQgcG9pbnRzIHRvIGEgZGVoeWRyYXRlZCBmcmFnbWVudCwgd2hpY2hcbiAgLy8gY29udGFpbnMgdGhlIERPTSByZW5kZXJlZCBieSB0aGUgc2VydmVyLlxuICAvL1xuICAvLyBUaGlyZCwgZXZlbiBpZiB5b3Ugc2V0IGFsbCB0aGF0IGFzaWRlLCBTdXNwZW5zZSBpcyBsaWtlIGVycm9yIGJvdW5kYXJpZXMgaW5cbiAgLy8gdGhhdCB3ZSBmaXJzdCB3ZSB0cnkgdG8gcmVuZGVyIG9uZSB0cmVlLCBhbmQgaWYgdGhhdCBmYWlscywgd2UgcmVuZGVyIGFnYWluXG4gIC8vIGFuZCBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgdHJlZS4gTGlrZSBhIHRyeS9jYXRjaCBibG9jay4gU28gd2UgaGF2ZSB0byB0cmFja1xuICAvLyB3aGljaCBicmFuY2ggd2UncmUgY3VycmVudGx5IHJlbmRlcmluZy4gSWRlYWxseSB3ZSB3b3VsZCBtb2RlbCB0aGlzIHVzaW5nXG4gIC8vIGEgc3RhY2suXG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJbml0aWFsIG1vdW50XG4gICAgLy8gSWYgd2UncmUgY3VycmVudGx5IGh5ZHJhdGluZywgdHJ5IHRvIGh5ZHJhdGUgdGhpcyBib3VuZGFyeS5cbiAgICAvLyBCdXQgb25seSBpZiB0aGlzIGhhcyBhIGZhbGxiYWNrLlxuICAgIGlmIChuZXh0UHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpOyAvLyBUaGlzIGNvdWxkJ3ZlIGJlZW4gYSBkZWh5ZHJhdGVkIHN1c3BlbnNlIGNvbXBvbmVudC5cbiAgICB9XG5cbiAgICB2YXIgbmV4dFByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgbmV4dEZhbGxiYWNrQ2hpbGRyZW4gPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG5cbiAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICB2YXIgZmFsbGJhY2tGcmFnbWVudCA9IG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBuZXh0UHJpbWFyeUNoaWxkcmVuLCBuZXh0RmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5tZW1vaXplZFN0YXRlID0gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgcmV0dXJuIGZhbGxiYWNrRnJhZ21lbnQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3BzLnVuc3RhYmxlX2V4cGVjdGVkTG9hZFRpbWUgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgQ1BVLWJvdW5kIHRyZWUuIFNraXAgdGhpcyB0cmVlIGFuZCBzaG93IGEgcGxhY2Vob2xkZXIgdG9cbiAgICAgIC8vIHVuYmxvY2sgdGhlIHN1cnJvdW5kaW5nIGNvbnRlbnQuIFRoZW4gaW1tZWRpYXRlbHkgcmV0cnkgYWZ0ZXIgdGhlXG4gICAgICAvLyBpbml0aWFsIGNvbW1pdC5cbiAgICAgIHZhciBfZmFsbGJhY2tGcmFnbWVudCA9IG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBuZXh0UHJpbWFyeUNoaWxkcmVuLCBuZXh0RmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQubWVtb2l6ZWRTdGF0ZSA9IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjsgLy8gU2luY2Ugbm90aGluZyBhY3R1YWxseSBzdXNwZW5kZWQsIHRoZXJlIHdpbGwgbm90aGluZyB0byBwaW5nIHRoaXMgdG9cbiAgICAgIC8vIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtcyBvZlxuICAgICAgLy8gcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLCBpdCdzXG4gICAgICAvLyBub3QgcGFydCBvZiB0aGUgc2FtZSB0cmFuc2l0aW9uIG9uY2UgdGhlIHRyYW5zaXRpb24gaGFzIGNvbW1pdHRlZC4gSWZcbiAgICAgIC8vIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZSBwYWludGVkLlxuICAgICAgLy8gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLiBXZSBjYW4gdXNlIGFueVxuICAgICAgLy8gUmV0cnlMYW5lIGV2ZW4gaWYgaXQncyB0aGUgb25lIGN1cnJlbnRseSByZW5kZXJpbmcgc2luY2Ugd2UncmUgbGVhdmluZ1xuICAgICAgLy8gaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuXG4gICAgICB7XG4gICAgICAgIG1hcmtTcGF3bmVkV29yayhTb21lUmV0cnlMYW5lKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9mYWxsYmFja0ZyYWdtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIGFuIHVwZGF0ZS5cbiAgICAvLyBJZiB0aGUgY3VycmVudCBmaWJlciBoYXMgYSBTdXNwZW5zZVN0YXRlLCB0aGF0IG1lYW5zIGl0J3MgYWxyZWFkeSBzaG93aW5nXG4gICAgLy8gYSBmYWxsYmFjay5cbiAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuXG4gICAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4yID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW4yID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gdXBkYXRlU3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjIsIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjIsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50MyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICB2YXIgcHJldk9mZnNjcmVlblN0YXRlID0gY3VycmVudC5jaGlsZC5tZW1vaXplZFN0YXRlO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzLm1lbW9pemVkU3RhdGUgPSBwcmV2T2Zmc2NyZWVuU3RhdGUgPT09IG51bGwgPyBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIDogdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShwcmV2T2Zmc2NyZWVuU3RhdGUsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50My5jaGlsZExhbmVzID0gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoY3VycmVudCwgcmVuZGVyTGFuZXMpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgICAgcmV0dXJuIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW4zID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0ID0gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuMywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3ByaW1hcnlDaGlsZEZyYWdtZW50NDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGN1cnJlbnQgdHJlZSBpcyBub3QgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2suXG4gICAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICAgIC8vIFRpbWVkIG91dC5cbiAgICAgICAgdmFyIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjMgPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjQgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQyID0gdXBkYXRlU3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjQsIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjMsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NSA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICB2YXIgX3ByZXZPZmZzY3JlZW5TdGF0ZSA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50NS5tZW1vaXplZFN0YXRlID0gX3ByZXZPZmZzY3JlZW5TdGF0ZSA9PT0gbnVsbCA/IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykgOiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKF9wcmV2T2Zmc2NyZWVuU3RhdGUsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50NS5jaGlsZExhbmVzID0gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoY3VycmVudCwgcmVuZGVyTGFuZXMpOyAvLyBTa2lwIHRoZSBwcmltYXJ5IGNoaWxkcmVuLCBhbmQgY29udGludWUgd29ya2luZyBvbiB0aGVcbiAgICAgICAgLy8gZmFsbGJhY2sgY2hpbGRyZW4uXG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICAgIHJldHVybiBfZmFsbGJhY2tDaGlsZEZyYWdtZW50MjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFN0aWxsIGhhdmVuJ3QgdGltZWQgb3V0LiBDb250aW51ZSByZW5kZXJpbmcgdGhlIGNoaWxkcmVuLCBsaWtlIHdlXG4gICAgICAgIC8vIG5vcm1hbGx5IGRvLlxuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW41ID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ2ID0gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuNSwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3ByaW1hcnlDaGlsZEZyYWdtZW50NjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICBtb2RlOiAndmlzaWJsZScsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9O1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocHJpbWFyeUNoaWxkUHJvcHMsIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gbW91bnRTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgZmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ2hpZGRlbicsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9O1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG5cbiAgaWYgKChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlICYmIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAvLyBJbiBsZWdhY3kgbW9kZSwgd2UgY29tbWl0IHRoZSBwcmltYXJ5IHRyZWUgYXMgaWYgaXQgc3VjY2Vzc2Z1bGx5XG4gICAgLy8gY29tcGxldGVkLCBldmVuIHRob3VnaCBpdCdzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS5cbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHM7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIGR1cmF0aW9ucyBmcm9tIHRoZSBmaXJzdCBwYXNzIHNvIHRoZXkgYXJlbid0IGluY2x1ZGVkIGluIHRoZVxuICAgICAgLy8gZmluYWwgYW1vdW50cy4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlLCBzaW5jZSB3ZSdyZSBpbnRlbnRpb25hbGx5XG4gICAgICAvLyBub3QgbWVhc3VyaW5nIHBhcnQgb2YgdGhlIHJlbmRlciBwaGFzZSwgYnV0IHRoaXMgbWFrZXMgaXQgbWF0Y2ggd2hhdCB3ZVxuICAgICAgLy8gZG8gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgIH1cblxuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwcmltYXJ5Q2hpbGRQcm9wcywgbW9kZSwgTm9MYW5lcywgbnVsbCk7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpO1xuICB9XG5cbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcykge1xuICAvLyBUaGUgcHJvcHMgYXJndW1lbnQgdG8gYGNyZWF0ZVdvcmtJblByb2dyZXNzYCBpcyBgYW55YCB0eXBlZCwgc28gd2UgdXNlIHRoaXNcbiAgLy8gd3JhcHBlciBmdW5jdGlvbiB0byBjb25zdHJhaW4gaXQuXG4gIHJldHVybiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjdXJyZW50LmNoaWxkO1xuICB2YXIgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nO1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCwge1xuICAgIG1vZGU6ICd2aXNpYmxlJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH0pO1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmxhbmVzID0gcmVuZGVyTGFuZXM7XG4gIH1cblxuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IG51bGw7XG5cbiAgaWYgKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAvLyBEZWxldGUgdGhlIGZhbGxiYWNrIGNoaWxkIGZyYWdtZW50XG4gICAgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50LmZsYWdzID0gRGVsZXRpb247XG4gICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIGZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGN1cnJlbnQuY2hpbGQ7XG4gIHZhciBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmc7XG4gIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICBtb2RlOiAnaGlkZGVuJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH07XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcblxuICBpZiAoIC8vIEluIGxlZ2FjeSBtb2RlLCB3ZSBjb21taXQgdGhlIHByaW1hcnkgdHJlZSBhcyBpZiBpdCBzdWNjZXNzZnVsbHlcbiAgLy8gY29tcGxldGVkLCBldmVuIHRob3VnaCBpdCdzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS5cbiAgKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUgJiYgLy8gTWFrZSBzdXJlIHdlJ3JlIG9uIHRoZSBzZWNvbmQgcGFzcywgaS5lLiB0aGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCB3YXNcbiAgLy8gYWxyZWFkeSBjbG9uZWQuIEluIGxlZ2FjeSBtb2RlLCB0aGUgb25seSBjYXNlIHdoZXJlIHRoaXMgaXNuJ3QgdHJ1ZSBpc1xuICAvLyB3aGVuIERldlRvb2xzIGZvcmNlcyB1cyB0byBkaXNwbGF5IGEgZmFsbGJhY2s7IHdlIHNraXAgdGhlIGZpcnN0IHJlbmRlclxuICAvLyBwYXNzIGVudGlyZWx5IGFuZCBnbyBzdHJhaWdodCB0byByZW5kZXJpbmcgdGhlIGZhbGxiYWNrLiAoSW4gQ29uY3VycmVudFxuICAvLyBNb2RlLCBTdXNwZW5zZUxpc3QgY2FuIGFsc28gdHJpZ2dlciB0aGlzIHNjZW5hcmlvLCBidXQgdGhpcyBpcyBhIGxlZ2FjeS1cbiAgLy8gb25seSBjb2RlcGF0aC4pXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkICE9PSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQpIHtcbiAgICB2YXIgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5wZW5kaW5nUHJvcHMgPSBwcmltYXJ5Q2hpbGRQcm9wcztcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAvLyBSZXNldCB0aGUgZHVyYXRpb25zIGZyb20gdGhlIGZpcnN0IHBhc3Mgc28gdGhleSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlXG4gICAgICAvLyBmaW5hbCBhbW91bnRzLiBUaGlzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUsIHNpbmNlIHdlJ3JlIGludGVudGlvbmFsbHlcbiAgICAgIC8vIG5vdCBtZWFzdXJpbmcgcGFydCBvZiB0aGUgcmVuZGVyIHBoYXNlLCBidXQgdGhpcyBtYWtlcyBpdCBtYXRjaCB3aGF0IHdlXG4gICAgICAvLyBkbyBpbiBDb25jdXJyZW50IE1vZGUuXG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICB9IC8vIFRoZSBmYWxsYmFjayBmaWJlciB3YXMgYWRkZWQgYXMgYSBkZWxldGlvbiBlZmZlY3QgZHVyaW5nIHRoZSBmaXJzdCBwYXNzLlxuICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHdlJ3JlIGdvaW5nIHRvIHJlbWFpbiBvbiB0aGUgZmFsbGJhY2ssIHdlIG5vIGxvbmdlciB3YW50XG4gICAgLy8gdG8gZGVsZXRlIGl0LiBTbyB3ZSBuZWVkIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0LiBEZWxldGlvbnMgYXJlIHN0b3JlZFxuICAgIC8vIG9uIHRoZSBzYW1lIGxpc3QgYXMgZWZmZWN0cy4gV2Ugd2FudCB0byBrZWVwIHRoZSBlZmZlY3RzIGZyb20gdGhlIHByaW1hcnlcbiAgICAvLyB0cmVlLiBTbyB3ZSBjb3B5IHRoZSBwcmltYXJ5IGNoaWxkIGZyYWdtZW50J3MgZWZmZWN0IGxpc3QsIHdoaWNoIGRvZXMgbm90XG4gICAgLy8gaW5jbHVkZSB0aGUgZmFsbGJhY2sgZGVsZXRpb24gZWZmZWN0LlxuXG5cbiAgICB2YXIgcHJvZ3Jlc3NlZExhc3RFZmZlY3QgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKHByb2dyZXNzZWRMYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IHByaW1hcnlDaGlsZEZyYWdtZW50LmZpcnN0RWZmZWN0O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IHByb2dyZXNzZWRMYXN0RWZmZWN0O1xuICAgICAgcHJvZ3Jlc3NlZExhc3RFZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IFJlc2V0IHRoaXMgc29tZXdoZXJlIGVsc2U/IExvbCBsZWdhY3kgbW9kZSBpcyBzbyB3ZWlyZC5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IG51bGw7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQsIHByaW1hcnlDaGlsZFByb3BzKTtcbiAgfVxuXG4gIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG5cbiAgaWYgKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50LCBmYWxsYmFja0NoaWxkcmVuKTtcbiAgfSBlbHNlIHtcbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7IC8vIE5lZWRzIGEgcGxhY2VtZW50IGVmZmVjdCBiZWNhdXNlIHRoZSBwYXJlbnQgKHRoZSBTdXNwZW5zZSBib3VuZGFyeSkgYWxyZWFkeVxuICAgIC8vIG1vdW50ZWQgYnV0IHRoaXMgaXMgYSBuZXcgZmliZXIuXG5cbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVXb3JrT25GaWJlcihmaWJlciwgcmVuZGVyTGFuZXMpIHtcbiAgZmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKGZpYmVyLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICBzY2hlZHVsZVdvcmtPblBhcmVudFBhdGgoZmliZXIucmV0dXJuLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHByb3BhZ2F0ZVN1c3BlbnNlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgZmlyc3RDaGlsZCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gTWFyayBhbnkgU3VzcGVuc2UgYm91bmRhcmllcyB3aXRoIGZhbGxiYWNrcyBhcyBoYXZpbmcgd29yayB0byBkby5cbiAgLy8gSWYgdGhleSB3ZXJlIHByZXZpb3VzbHkgZm9yY2VkIGludG8gZmFsbGJhY2tzLCB0aGV5IG1heSBub3cgYmUgYWJsZVxuICAvLyB0byB1bmJsb2NrLlxuICB2YXIgbm9kZSA9IGZpcnN0Q2hpbGQ7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICB2YXIgc3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBzY2hlZHVsZVdvcmtPbkZpYmVyKG5vZGUsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUxpc3RDb21wb25lbnQpIHtcbiAgICAgIC8vIElmIHRoZSB0YWlsIGlzIGhpZGRlbiB0aGVyZSBtaWdodCBub3QgYmUgYW4gU3VzcGVuc2UgYm91bmRhcmllc1xuICAgICAgLy8gdG8gc2NoZWR1bGUgd29yayBvbi4gSW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gc2NoZWR1bGUgaXQgb24gdGhlXG4gICAgICAvLyBsaXN0IGl0c2VsZi5cbiAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gdHJhdmVyc2UgdG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBsaXN0IHNpbmNlXG4gICAgICAvLyB0aGUgbGlzdCB3aWxsIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHdoZW4gaXQgcmVyZW5kZXJzLlxuICAgICAgc2NoZWR1bGVXb3JrT25GaWJlcihub2RlLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZExhc3RDb250ZW50Um93KGZpcnN0Q2hpbGQpIHtcbiAgLy8gVGhpcyBpcyBnb2luZyB0byBmaW5kIHRoZSBsYXN0IHJvdyBhbW9uZyB0aGVzZSBjaGlsZHJlbiB0aGF0IGlzIGFscmVhZHlcbiAgLy8gc2hvd2luZyBjb250ZW50IG9uIHRoZSBzY3JlZW4sIGFzIG9wcG9zZWQgdG8gYmVpbmcgaW4gZmFsbGJhY2sgc3RhdGUgb3JcbiAgLy8gbmV3LiBJZiBhIHJvdyBoYXMgbXVsdGlwbGUgU3VzcGVuc2UgYm91bmRhcmllcywgYW55IG9mIHRoZW0gYmVpbmcgaW4gdGhlXG4gIC8vIGZhbGxiYWNrIHN0YXRlLCBjb3VudHMgYXMgdGhlIHdob2xlIHJvdyBiZWluZyBpbiBhIGZhbGxiYWNrIHN0YXRlLlxuICAvLyBOb3RlIHRoYXQgdGhlIFwicm93c1wiIHdpbGwgYmUgd29ya0luUHJvZ3Jlc3MsIGJ1dCBhbnkgbmVzdGVkIGNoaWxkcmVuXG4gIC8vIHdpbGwgc3RpbGwgYmUgY3VycmVudCBzaW5jZSB3ZSBoYXZlbid0IHJlbmRlcmVkIHRoZW0geWV0LiBUaGUgbW91bnRlZFxuICAvLyBvcmRlciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBuZXcgb3JkZXIuIFdlIHVzZSB0aGUgbmV3IG9yZGVyLlxuICB2YXIgcm93ID0gZmlyc3RDaGlsZDtcbiAgdmFyIGxhc3RDb250ZW50Um93ID0gbnVsbDtcblxuICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnRSb3cgPSByb3cuYWx0ZXJuYXRlOyAvLyBOZXcgcm93cyBjYW4ndCBiZSBjb250ZW50IHJvd3MuXG5cbiAgICBpZiAoY3VycmVudFJvdyAhPT0gbnVsbCAmJiBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudFJvdykgPT09IG51bGwpIHtcbiAgICAgIGxhc3RDb250ZW50Um93ID0gcm93O1xuICAgIH1cblxuICAgIHJvdyA9IHJvdy5zaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIGxhc3RDb250ZW50Um93O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVJldmVhbE9yZGVyKHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAocmV2ZWFsT3JkZXIgIT09IHVuZGVmaW5lZCAmJiByZXZlYWxPcmRlciAhPT0gJ2ZvcndhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ2JhY2t3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICd0b2dldGhlcicgJiYgIWRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSkge1xuICAgICAgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXJbcmV2ZWFsT3JkZXJdID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiByZXZlYWxPcmRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc3dpdGNoIChyZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAndG9nZXRoZXInOlxuICAgICAgICAgIGNhc2UgJ2ZvcndhcmRzJzpcbiAgICAgICAgICBjYXNlICdiYWNrd2FyZHMnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ1VzZSBsb3dlcmNhc2UgXCIlc1wiIGluc3RlYWQuJywgcmV2ZWFsT3JkZXIsIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAnZm9yd2FyZCc6XG4gICAgICAgICAgY2FzZSAnYmFja3dhcmQnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ1JlYWN0IHVzZXMgdGhlIC1zIHN1ZmZpeCBpbiB0aGUgc3BlbGxpbmcuIFVzZSBcIiVzc1wiIGluc3RlYWQuJywgcmV2ZWFsT3JkZXIsIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JywgcmV2ZWFsT3JkZXIpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdEaWQgeW91IG1lYW4gXCJ0b2dldGhlclwiLCBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIj8nLCByZXZlYWxPcmRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGFpbE9wdGlvbnModGFpbE1vZGUsIHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAodGFpbE1vZGUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdKSB7XG4gICAgICBpZiAodGFpbE1vZGUgIT09ICdjb2xsYXBzZWQnICYmIHRhaWxNb2RlICE9PSAnaGlkZGVuJykge1xuICAgICAgICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciB0YWlsIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwiY29sbGFwc2VkXCIgb3IgXCJoaWRkZW5cIj8nLCB0YWlsTW9kZSk7XG4gICAgICB9IGVsc2UgaWYgKHJldmVhbE9yZGVyICE9PSAnZm9yd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAnYmFja3dhcmRzJykge1xuICAgICAgICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCc8U3VzcGVuc2VMaXN0IHRhaWw9XCIlc1wiIC8+IGlzIG9ubHkgdmFsaWQgaWYgcmV2ZWFsT3JkZXIgaXMgJyArICdcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIi4gJyArICdEaWQgeW91IG1lYW4gdG8gc3BlY2lmeSByZXZlYWxPcmRlcj1cImZvcndhcmRzXCI/JywgdGFpbE1vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKGNoaWxkU2xvdCwgaW5kZXgpIHtcbiAge1xuICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShjaGlsZFNsb3QpO1xuICAgIHZhciBpc0l0ZXJhYmxlID0gIWlzQXJyYXkgJiYgdHlwZW9mIGdldEl0ZXJhdG9yRm4oY2hpbGRTbG90KSA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIGlmIChpc0FycmF5IHx8IGlzSXRlcmFibGUpIHtcbiAgICAgIHZhciB0eXBlID0gaXNBcnJheSA/ICdhcnJheScgOiAnaXRlcmFibGUnO1xuXG4gICAgICBlcnJvcignQSBuZXN0ZWQgJXMgd2FzIHBhc3NlZCB0byByb3cgIyVzIGluIDxTdXNwZW5zZUxpc3QgLz4uIFdyYXAgaXQgaW4gJyArICdhbiBhZGRpdGlvbmFsIFN1c3BlbnNlTGlzdCB0byBjb25maWd1cmUgaXRzIHJldmVhbE9yZGVyOiAnICsgJzxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPiAuLi4gJyArICc8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj57JXN9PC9TdXNwZW5zZUxpc3Q+IC4uLiAnICsgJzwvU3VzcGVuc2VMaXN0PicsIHR5cGUsIGluZGV4LCB0eXBlKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN1c3BlbnNlTGlzdENoaWxkcmVuKGNoaWxkcmVuLCByZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKChyZXZlYWxPcmRlciA9PT0gJ2ZvcndhcmRzJyB8fCByZXZlYWxPcmRlciA9PT0gJ2JhY2t3YXJkcycpICYmIGNoaWxkcmVuICE9PSB1bmRlZmluZWQgJiYgY2hpbGRyZW4gIT09IG51bGwgJiYgY2hpbGRyZW4gIT09IGZhbHNlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChjaGlsZHJlbltpXSwgaSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNoaWxkcmVuSXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwoY2hpbGRyZW4pO1xuXG4gICAgICAgICAgaWYgKGNoaWxkcmVuSXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHZhciBzdGVwID0gY2hpbGRyZW5JdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICB2YXIgX2kgPSAwO1xuXG4gICAgICAgICAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgc3RlcCA9IGNoaWxkcmVuSXRlcmF0b3IubmV4dCgpKSB7XG4gICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChzdGVwLnZhbHVlLCBfaSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBfaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvcignQSBzaW5nbGUgcm93IHdhcyBwYXNzZWQgdG8gYSA8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPVwiJXNcIiAvPi4gJyArICdUaGlzIGlzIG5vdCB1c2VmdWwgc2luY2UgaXQgbmVlZHMgbXVsdGlwbGUgcm93cy4gJyArICdEaWQgeW91IG1lYW4gdG8gcGFzcyBtdWx0aXBsZSBjaGlsZHJlbiBvciBhbiBhcnJheT8nLCByZXZlYWxPcmRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBpc0JhY2t3YXJkcywgdGFpbCwgbGFzdENvbnRlbnRSb3csIHRhaWxNb2RlLCBsYXN0RWZmZWN0QmVmb3JlUmVuZGVyaW5nKSB7XG4gIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHJlbmRlclN0YXRlID09PSBudWxsKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICAgIGlzQmFja3dhcmRzOiBpc0JhY2t3YXJkcyxcbiAgICAgIHJlbmRlcmluZzogbnVsbCxcbiAgICAgIHJlbmRlcmluZ1N0YXJ0VGltZTogMCxcbiAgICAgIGxhc3Q6IGxhc3RDb250ZW50Um93LFxuICAgICAgdGFpbDogdGFpbCxcbiAgICAgIHRhaWxNb2RlOiB0YWlsTW9kZSxcbiAgICAgIGxhc3RFZmZlY3Q6IGxhc3RFZmZlY3RCZWZvcmVSZW5kZXJpbmdcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIFdlIGNhbiByZXVzZSB0aGUgZXhpc3Rpbmcgb2JqZWN0IGZyb20gcHJldmlvdXMgcmVuZGVycy5cbiAgICByZW5kZXJTdGF0ZS5pc0JhY2t3YXJkcyA9IGlzQmFja3dhcmRzO1xuICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGw7XG4gICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID0gMDtcbiAgICByZW5kZXJTdGF0ZS5sYXN0ID0gbGFzdENvbnRlbnRSb3c7XG4gICAgcmVuZGVyU3RhdGUudGFpbCA9IHRhaWw7XG4gICAgcmVuZGVyU3RhdGUudGFpbE1vZGUgPSB0YWlsTW9kZTtcbiAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gbGFzdEVmZmVjdEJlZm9yZVJlbmRlcmluZztcbiAgfVxufSAvLyBUaGlzIGNhbiBlbmQgdXAgcmVuZGVyaW5nIHRoaXMgY29tcG9uZW50IG11bHRpcGxlIHBhc3Nlcy5cbi8vIFRoZSBmaXJzdCBwYXNzIHNwbGl0cyB0aGUgY2hpbGRyZW4gZmliZXJzIGludG8gdHdvIHNldHMuIEEgaGVhZCBhbmQgdGFpbC5cbi8vIFdlIGZpcnN0IHJlbmRlciB0aGUgaGVhZC4gSWYgYW55dGhpbmcgaXMgaW4gZmFsbGJhY2sgc3RhdGUsIHdlIGRvIGFub3RoZXJcbi8vIHBhc3MgdGhyb3VnaCBiZWdpbldvcmsgdG8gcmVyZW5kZXIgYWxsIGNoaWxkcmVuIChpbmNsdWRpbmcgdGhlIHRhaWwpIHdpdGhcbi8vIHRoZSBmb3JjZSBzdXNwZW5kIGNvbnRleHQuIElmIHRoZSBmaXJzdCByZW5kZXIgZGlkbid0IGhhdmUgYW55dGhpbmcgaW5cbi8vIGluIGZhbGxiYWNrIHN0YXRlLiBUaGVuIHdlIHJlbmRlciBlYWNoIHJvdyBpbiB0aGUgdGFpbCBvbmUtYnktb25lLlxuLy8gVGhhdCBoYXBwZW5zIGluIHRoZSBjb21wbGV0ZVdvcmsgcGhhc2Ugd2l0aG91dCBnb2luZyBiYWNrIHRvIGJlZ2luV29yay5cblxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciByZXZlYWxPcmRlciA9IG5leHRQcm9wcy5yZXZlYWxPcmRlcjtcbiAgdmFyIHRhaWxNb2RlID0gbmV4dFByb3BzLnRhaWw7XG4gIHZhciBuZXdDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgdmFsaWRhdGVSZXZlYWxPcmRlcihyZXZlYWxPcmRlcik7XG4gIHZhbGlkYXRlVGFpbE9wdGlvbnModGFpbE1vZGUsIHJldmVhbE9yZGVyKTtcbiAgdmFsaWRhdGVTdXNwZW5zZUxpc3RDaGlsZHJlbihuZXdDaGlsZHJlbiwgcmV2ZWFsT3JkZXIpO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgdmFyIHNob3VsZEZvcmNlRmFsbGJhY2sgPSBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuXG4gIGlmIChzaG91bGRGb3JjZUZhbGxiYWNrKSB7XG4gICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZGlkU3VzcGVuZEJlZm9yZSA9IGN1cnJlbnQgIT09IG51bGwgJiYgKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgIGlmIChkaWRTdXNwZW5kQmVmb3JlKSB7XG4gICAgICAvLyBJZiB3ZSBwcmV2aW91c2x5IGZvcmNlZCBhIGZhbGxiYWNrLCB3ZSBuZWVkIHRvIHNjaGVkdWxlIHdvcmtcbiAgICAgIC8vIG9uIGFueSBuZXN0ZWQgYm91bmRhcmllcyB0byBsZXQgdGhlbSBrbm93IHRvIHRyeSB0byByZW5kZXJcbiAgICAgIC8vIGFnYWluLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNvbnRleHQgdXBkYXRpbmcuXG4gICAgICBwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLmNoaWxkLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuXG4gICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgfVxuXG4gIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlQ29udGV4dCk7XG5cbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgLy8gSW4gbGVnYWN5IG1vZGUsIFN1c3BlbnNlTGlzdCBkb2Vzbid0IHdvcmsgc28gd2UganVzdFxuICAgIC8vIHVzZSBtYWtlIGl0IGEgbm9vcCBieSB0cmVhdGluZyBpdCBhcyB0aGUgZGVmYXVsdCByZXZlYWxPcmRlci5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHJldmVhbE9yZGVyKSB7XG4gICAgICBjYXNlICdmb3J3YXJkcyc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGFzdENvbnRlbnRSb3cgPSBmaW5kTGFzdENvbnRlbnRSb3cod29ya0luUHJvZ3Jlc3MuY2hpbGQpO1xuICAgICAgICAgIHZhciB0YWlsO1xuXG4gICAgICAgICAgaWYgKGxhc3RDb250ZW50Um93ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgd2hvbGUgbGlzdCBpcyBwYXJ0IG9mIHRoZSB0YWlsLlxuICAgICAgICAgICAgLy8gVE9ETzogV2UgY291bGQgZmFzdCBwYXRoIGJ5IGp1c3QgcmVuZGVyaW5nIHRoZSB0YWlsIG5vdy5cbiAgICAgICAgICAgIHRhaWwgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRGlzY29ubmVjdCB0aGUgdGFpbCByb3dzIGFmdGVyIHRoZSBjb250ZW50IHJvdy5cbiAgICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHJlbmRlciB0aGVtIHNlcGFyYXRlbHkgbGF0ZXIuXG4gICAgICAgICAgICB0YWlsID0gbGFzdENvbnRlbnRSb3cuc2libGluZztcbiAgICAgICAgICAgIGxhc3RDb250ZW50Um93LnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgdGFpbCwgbGFzdENvbnRlbnRSb3csIHRhaWxNb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdiYWNrd2FyZHMnOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gZmluZCB0aGUgZmlyc3Qgcm93IHRoYXQgaGFzIGV4aXN0aW5nIGNvbnRlbnQuXG4gICAgICAgICAgLy8gQXQgdGhlIHNhbWUgdGltZSB3ZSdyZSBnb2luZyB0byByZXZlcnNlIHRoZSBsaXN0IG9mIGV2ZXJ5dGhpbmdcbiAgICAgICAgICAvLyB3ZSBwYXNzIGluIHRoZSBtZWFudGltZS4gVGhhdCdzIGdvaW5nIHRvIGJlIG91ciB0YWlsIGluIHJldmVyc2VcbiAgICAgICAgICAvLyBvcmRlci5cbiAgICAgICAgICB2YXIgX3RhaWwgPSBudWxsO1xuICAgICAgICAgIHZhciByb3cgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG5cbiAgICAgICAgICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFJvdyA9IHJvdy5hbHRlcm5hdGU7IC8vIE5ldyByb3dzIGNhbid0IGJlIGNvbnRlbnQgcm93cy5cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRSb3cgIT09IG51bGwgJiYgZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnRSb3cpID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgbWFpbiBjb250ZW50LlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJvdztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuZXh0Um93ID0gcm93LnNpYmxpbmc7XG4gICAgICAgICAgICByb3cuc2libGluZyA9IF90YWlsO1xuICAgICAgICAgICAgX3RhaWwgPSByb3c7XG4gICAgICAgICAgICByb3cgPSBuZXh0Um93O1xuICAgICAgICAgIH0gLy8gVE9ETzogSWYgd29ya0luUHJvZ3Jlc3MuY2hpbGQgaXMgbnVsbCwgd2UgY2FuIGNvbnRpbnVlIG9uIHRoZSB0YWlsIGltbWVkaWF0ZWx5LlxuXG5cbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIHRydWUsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgX3RhaWwsIG51bGwsIC8vIGxhc3RcbiAgICAgICAgICB0YWlsTW9kZSwgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAndG9nZXRoZXInOlxuICAgICAgICB7XG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBmYWxzZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICBudWxsLCAvLyB0YWlsXG4gICAgICAgICAgbnVsbCwgLy8gbGFzdFxuICAgICAgICAgIHVuZGVmaW5lZCwgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IHJldmVhbCBvcmRlciBpcyB0aGUgc2FtZSBhcyBub3QgaGF2aW5nXG4gICAgICAgICAgLy8gYSBib3VuZGFyeS5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUG9ydGFsQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gUG9ydGFscyBhcmUgc3BlY2lhbCBiZWNhdXNlIHdlIGRvbid0IGFwcGVuZCB0aGUgY2hpbGRyZW4gZHVyaW5nIG1vdW50XG4gICAgLy8gYnV0IGF0IGNvbW1pdC4gVGhlcmVmb3JlIHdlIG5lZWQgdG8gdHJhY2sgaW5zZXJ0aW9ucyB3aGljaCB0aGUgbm9ybWFsXG4gICAgLy8gZmxvdyBkb2Vzbid0IGRvIGR1cmluZyBtb3VudC4gVGhpcyBkb2Vzbid0IGhhcHBlbiBhdCB0aGUgcm9vdCBiZWNhdXNlXG4gICAgLy8gdGhlIHJvb3QgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgXCJjdXJyZW50XCIgd2l0aCBhIG51bGwgY2hpbGQuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgdW5pZnlpbmcgdGhpcyB3aXRoIGhvdyB0aGUgcm9vdCB3b3Jrcy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbnZhciBoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9IGZhbHNlO1xuXG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0UHJvdmlkZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBwcm92aWRlclR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyVHlwZS5fY29udGV4dDtcbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICB2YXIgbmV3VmFsdWUgPSBuZXdQcm9wcy52YWx1ZTtcblxuICB7XG4gICAgaWYgKCEoJ3ZhbHVlJyBpbiBuZXdQcm9wcykpIHtcbiAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIpIHtcbiAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdUaGUgYHZhbHVlYCBwcm9wIGlzIHJlcXVpcmVkIGZvciB0aGUgYDxDb250ZXh0LlByb3ZpZGVyPmAuIERpZCB5b3UgbWlzc3BlbGwgaXQgb3IgZm9yZ2V0IHRvIHBhc3MgaXQ/Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByb3ZpZGVyUHJvcFR5cGVzID0gd29ya0luUHJvZ3Jlc3MudHlwZS5wcm9wVHlwZXM7XG5cbiAgICBpZiAocHJvdmlkZXJQcm9wVHlwZXMpIHtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3ZpZGVyUHJvcFR5cGVzLCBuZXdQcm9wcywgJ3Byb3AnLCAnQ29udGV4dC5Qcm92aWRlcicpO1xuICAgIH1cbiAgfVxuXG4gIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgbmV3VmFsdWUpO1xuXG4gIGlmIChvbGRQcm9wcyAhPT0gbnVsbCkge1xuICAgIHZhciBvbGRWYWx1ZSA9IG9sZFByb3BzLnZhbHVlO1xuICAgIHZhciBjaGFuZ2VkQml0cyA9IGNhbGN1bGF0ZUNoYW5nZWRCaXRzKGNvbnRleHQsIG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG5cbiAgICBpZiAoY2hhbmdlZEJpdHMgPT09IDApIHtcbiAgICAgIC8vIE5vIGNoYW5nZS4gQmFpbG91dCBlYXJseSBpZiBjaGlsZHJlbiBhcmUgdGhlIHNhbWUuXG4gICAgICBpZiAob2xkUHJvcHMuY2hpbGRyZW4gPT09IG5ld1Byb3BzLmNoaWxkcmVuICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpKSB7XG4gICAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBjb250ZXh0IHZhbHVlIGNoYW5nZWQuIFNlYXJjaCBmb3IgbWF0Y2hpbmcgY29uc3VtZXJzIGFuZCBzY2hlZHVsZVxuICAgICAgLy8gdGhlbSB0byB1cGRhdGUuXG4gICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCBjaGFuZ2VkQml0cywgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXdDaGlsZHJlbiA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG52YXIgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRleHRDb25zdW1lcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlOyAvLyBUaGUgbG9naWMgYmVsb3cgZm9yIENvbnRleHQgZGlmZmVycyBkZXBlbmRpbmcgb24gUFJPRCBvciBERVYgbW9kZS4gSW5cbiAgLy8gREVWIG1vZGUsIHdlIGNyZWF0ZSBhIHNlcGFyYXRlIG9iamVjdCBmb3IgQ29udGV4dC5Db25zdW1lciB0aGF0IGFjdHNcbiAgLy8gbGlrZSBhIHByb3h5IHRvIENvbnRleHQuIFRoaXMgcHJveHkgb2JqZWN0IGFkZHMgdW5uZWNlc3NhcnkgY29kZSBpbiBQUk9EXG4gIC8vIHNvIHdlIHVzZSB0aGUgb2xkIGJlaGF2aW91ciAoQ29udGV4dC5Db25zdW1lciByZWZlcmVuY2VzIENvbnRleHQpIHRvXG4gIC8vIHJlZHVjZSBzaXplIGFuZCBvdmVyaGVhZC4gVGhlIHNlcGFyYXRlIG9iamVjdCByZWZlcmVuY2VzIGNvbnRleHQgdmlhXG4gIC8vIGEgcHJvcGVydHkgY2FsbGVkIFwiX2NvbnRleHRcIiwgd2hpY2ggYWxzbyBnaXZlcyB1cyB0aGUgYWJpbGl0eSB0byBjaGVja1xuICAvLyBpbiBERVYgbW9kZSBpZiB0aGlzIHByb3BlcnR5IGV4aXN0cyBvciBub3QgYW5kIHdhcm4gaWYgaXQgZG9lcyBub3QuXG5cbiAge1xuICAgIGlmIChjb250ZXh0Ll9jb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFRoaXMgbWF5IGJlIGJlY2F1c2UgaXQncyBhIENvbnRleHQgKHJhdGhlciB0aGFuIGEgQ29uc3VtZXIpLlxuICAgICAgLy8gT3IgaXQgbWF5IGJlIGJlY2F1c2UgaXQncyBvbGRlciBSZWFjdCB3aGVyZSB0aGV5J3JlIHRoZSBzYW1lIHRoaW5nLlxuICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHdhcm4gaWYgd2UncmUgc3VyZSBpdCdzIGEgbmV3IFJlYWN0LlxuICAgICAgaWYgKGNvbnRleHQgIT09IGNvbnRleHQuQ29uc3VtZXIpIHtcbiAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nQ29udGV4dEFzQ29uc3VtZXIpIHtcbiAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nQ29udGV4dEFzQ29uc3VtZXIgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlbmRlcmluZyA8Q29udGV4dD4gZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Db25zdW1lcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5fY29udGV4dDtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciByZW5kZXIgPSBuZXdQcm9wcy5jaGlsZHJlbjtcblxuICB7XG4gICAgaWYgKHR5cGVvZiByZW5kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdBIGNvbnRleHQgY29uc3VtZXIgd2FzIHJlbmRlcmVkIHdpdGggbXVsdGlwbGUgY2hpbGRyZW4sIG9yIGEgY2hpbGQgJyArIFwidGhhdCBpc24ndCBhIGZ1bmN0aW9uLiBBIGNvbnRleHQgY29uc3VtZXIgZXhwZWN0cyBhIHNpbmdsZSBjaGlsZCBcIiArICd0aGF0IGlzIGEgZnVuY3Rpb24uIElmIHlvdSBkaWQgcGFzcyBhIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdGhlcmUgJyArICdpcyBubyB0cmFpbGluZyBvciBsZWFkaW5nIHdoaXRlc3BhY2UgYXJvdW5kIGl0LicpO1xuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIHZhciBuZXdWYWx1ZSA9IHJlYWRDb250ZXh0KGNvbnRleHQsIG5ld1Byb3BzLnVuc3RhYmxlX29ic2VydmVkQml0cyk7XG4gIHZhciBuZXdDaGlsZHJlbjtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV3Q2hpbGRyZW4gPSByZW5kZXIobmV3VmFsdWUpO1xuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpIHtcbiAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gUmV1c2UgcHJldmlvdXMgZGVwZW5kZW5jaWVzXG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gIH1cblxuICB7XG4gICAgLy8gRG9uJ3QgdXBkYXRlIFwiYmFzZVwiIHJlbmRlciB0aW1lcyBmb3IgYmFpbG91dHMuXG4gICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoKTtcbiAgfVxuXG4gIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMod29ya0luUHJvZ3Jlc3MubGFuZXMpOyAvLyBDaGVjayBpZiB0aGUgY2hpbGRyZW4gaGF2ZSBhbnkgcGVuZGluZyB3b3JrLlxuXG4gIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcykpIHtcbiAgICAvLyBUaGUgY2hpbGRyZW4gZG9uJ3QgaGF2ZSBhbnkgd29yayBlaXRoZXIuIFdlIGNhbiBza2lwIHRoZW0uXG4gICAgLy8gVE9ETzogT25jZSB3ZSBhZGQgYmFjayByZXN1bWluZywgd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBjaGlsZHJlbiBhcmVcbiAgICAvLyBhIHdvcmstaW4tcHJvZ3Jlc3Mgc2V0LiBJZiBzbywgd2UgbmVlZCB0byB0cmFuc2ZlciB0aGVpciBlZmZlY3RzLlxuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgZmliZXIgZG9lc24ndCBoYXZlIHdvcmssIGJ1dCBpdHMgc3VidHJlZSBkb2VzLiBDbG9uZSB0aGUgY2hpbGRcbiAgICAvLyBmaWJlcnMgYW5kIGNvbnRpbnVlLlxuICAgIGNsb25lQ2hpbGRGaWJlcnMoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdW50RmliZXIoY3VycmVudCwgb2xkV29ya0luUHJvZ3Jlc3MsIG5ld1dvcmtJblByb2dyZXNzKSB7XG4gIHtcbiAgICB2YXIgcmV0dXJuRmliZXIgPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZXR1cm47XG5cbiAgICBpZiAocmV0dXJuRmliZXIgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHN3YXAgdGhlIHJvb3QgZmliZXIuJyk7XG4gICAgfSAvLyBEaXNjb25uZWN0IGZyb20gdGhlIG9sZCBjdXJyZW50LlxuICAgIC8vIEl0IHdpbGwgZ2V0IGRlbGV0ZWQuXG5cblxuICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICBvbGRXb3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBDb25uZWN0IHRvIHRoZSBuZXcgdHJlZS5cblxuICAgIG5ld1dvcmtJblByb2dyZXNzLmluZGV4ID0gb2xkV29ya0luUHJvZ3Jlc3MuaW5kZXg7XG4gICAgbmV3V29ya0luUHJvZ3Jlc3Muc2libGluZyA9IG9sZFdvcmtJblByb2dyZXNzLnNpYmxpbmc7XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MucmV0dXJuID0gb2xkV29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnJlZiA9IG9sZFdvcmtJblByb2dyZXNzLnJlZjsgLy8gUmVwbGFjZSB0aGUgY2hpbGQvc2libGluZyBwb2ludGVycyBhYm92ZSBpdC5cblxuICAgIGlmIChvbGRXb3JrSW5Qcm9ncmVzcyA9PT0gcmV0dXJuRmliZXIuY2hpbGQpIHtcbiAgICAgIHJldHVybkZpYmVyLmNoaWxkID0gbmV3V29ya0luUHJvZ3Jlc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcmV2U2libGluZyA9IHJldHVybkZpYmVyLmNoaWxkO1xuXG4gICAgICBpZiAocHJldlNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBwYXJlbnQgdG8gaGF2ZSBhIGNoaWxkLicpO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAocHJldlNpYmxpbmcuc2libGluZyAhPT0gb2xkV29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcHJldlNpYmxpbmcgPSBwcmV2U2libGluZy5zaWJsaW5nO1xuXG4gICAgICAgIGlmIChwcmV2U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gZmluZCB0aGUgcHJldmlvdXMgc2libGluZy4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcmV2U2libGluZy5zaWJsaW5nID0gbmV3V29ya0luUHJvZ3Jlc3M7XG4gICAgfSAvLyBEZWxldGUgdGhlIG9sZCBmaWJlciBhbmQgcGxhY2UgdGhlIG5ldyBvbmUuXG4gICAgLy8gU2luY2UgdGhlIG9sZCBmaWJlciBpcyBkaXNjb25uZWN0ZWQsIHdlIGhhdmUgdG8gc2NoZWR1bGUgaXQgbWFudWFsbHkuXG5cblxuICAgIHZhciBsYXN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdDtcblxuICAgIGlmIChsYXN0ICE9PSBudWxsKSB7XG4gICAgICBsYXN0Lm5leHRFZmZlY3QgPSBjdXJyZW50O1xuICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGN1cnJlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGN1cnJlbnQ7XG4gICAgfVxuXG4gICAgY3VycmVudC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICBjdXJyZW50LmZsYWdzID0gRGVsZXRpb247XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50OyAvLyBSZXN0YXJ0IHdvcmsgZnJvbSB0aGUgbmV3IGZpYmVyLlxuXG4gICAgcmV0dXJuIG5ld1dvcmtJblByb2dyZXNzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJlZ2luV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIHVwZGF0ZUxhbmVzID0gd29ya0luUHJvZ3Jlc3MubGFuZXM7XG5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgJiYgY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyB3aWxsIHJlc3RhcnQgdGhlIGJlZ2luIHBoYXNlIHdpdGggYSBuZXcgZmliZXIuXG4gICAgICByZXR1cm4gcmVtb3VudEZpYmVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMod29ya0luUHJvZ3Jlc3MudHlwZSwgd29ya0luUHJvZ3Jlc3Mua2V5LCB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyIHx8IG51bGwsIHdvcmtJblByb2dyZXNzLm1vZGUsIHdvcmtJblByb2dyZXNzLmxhbmVzKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgaWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyB8fCBoYXNDb250ZXh0Q2hhbmdlZCgpIHx8ICggLy8gRm9yY2UgYSByZS1yZW5kZXIgaWYgdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZWQgZHVlIHRvIGhvdCByZWxvYWQ6XG4gICAgIHdvcmtJblByb2dyZXNzLnR5cGUgIT09IGN1cnJlbnQudHlwZSApKSB7XG4gICAgICAvLyBJZiBwcm9wcyBvciBjb250ZXh0IGNoYW5nZWQsIG1hcmsgdGhlIGZpYmVyIGFzIGhhdmluZyBwZXJmb3JtZWQgd29yay5cbiAgICAgIC8vIFRoaXMgbWF5IGJlIHVuc2V0IGlmIHRoZSBwcm9wcyBhcmUgZGV0ZXJtaW5lZCB0byBiZSBlcXVhbCBsYXRlciAobWVtbykuXG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lcykpIHtcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTsgLy8gVGhpcyBmaWJlciBkb2VzIG5vdCBoYXZlIGFueSBwZW5kaW5nIHdvcmsuIEJhaWxvdXQgd2l0aG91dCBlbnRlcmluZ1xuICAgICAgLy8gdGhlIGJlZ2luIHBoYXNlLiBUaGVyZSdzIHN0aWxsIHNvbWUgYm9va2tlZXBpbmcgd2UgdGhhdCBuZWVkcyB0byBiZSBkb25lXG4gICAgICAvLyBpbiB0aGlzIG9wdGltaXplZCBwYXRoLCBtb3N0bHkgcHVzaGluZyBzdHVmZiBvbnRvIHRoZSBzdGFjay5cblxuICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLnZhbHVlO1xuICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBQcm9maWxlcjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBQcm9maWxlciBzaG91bGQgb25seSBjYWxsIG9uUmVuZGVyIHdoZW4gb25lIG9mIGl0cyBkZXNjZW5kYW50cyBhY3R1YWxseSByZW5kZXJlZC5cbiAgICAgICAgICAgIHZhciBoYXNDaGlsZFdvcmsgPSBpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKTtcblxuICAgICAgICAgICAgaWYgKGhhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICB9IC8vIFJlc2V0IGVmZmVjdCBkdXJhdGlvbnMgZm9yIHRoZSBuZXh0IGV2ZW50dWFsIGVmZmVjdCBwaGFzZS5cbiAgICAgICAgICAgIC8vIFRoZXNlIGFyZSByZXNldCBkdXJpbmcgcmVuZGVyIHRvIGFsbG93IHRoZSBEZXZUb29scyBjb21taXQgaG9vayBhIGNoYW5jZSB0byByZWFkIHRoZW0sXG5cblxuICAgICAgICAgICAgdmFyIHN0YXRlTm9kZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgICAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyB3aGV0aGVyIHRvIHJldHJ5IHRoZSBwcmltYXJ5IGNoaWxkcmVuLCBvciB0byBza2lwIG92ZXIgaXQgYW5kXG4gICAgICAgICAgICAgIC8vIGdvIHN0cmFpZ2h0IHRvIHRoZSBmYWxsYmFjay4gQ2hlY2sgdGhlIHByaW9yaXR5IG9mIHRoZSBwcmltYXJ5XG4gICAgICAgICAgICAgIC8vIGNoaWxkIGZyYWdtZW50LlxuXG5cbiAgICAgICAgICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRMYW5lcyA9IHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXM7XG5cbiAgICAgICAgICAgICAgaWYgKGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHByaW1hcnlDaGlsZExhbmVzKSkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcmltYXJ5IGNoaWxkcmVuIGhhdmUgcGVuZGluZyB3b3JrLiBVc2UgdGhlIG5vcm1hbCBwYXRoXG4gICAgICAgICAgICAgICAgLy8gdG8gYXR0ZW1wdCB0byByZW5kZXIgdGhlIHByaW1hcnkgY2hpbGRyZW4gYWdhaW4uXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQgZG9lcyBub3QgaGF2ZSBwZW5kaW5nIHdvcmsgbWFya2VkXG4gICAgICAgICAgICAgICAgLy8gb24gaXRcbiAgICAgICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpKTsgLy8gVGhlIHByaW1hcnkgY2hpbGRyZW4gZG8gbm90IGhhdmUgcGVuZGluZyB3b3JrIHdpdGggc3VmZmljaWVudFxuICAgICAgICAgICAgICAgIC8vIHByaW9yaXR5LiBCYWlsb3V0LlxuXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyBUaGUgZmFsbGJhY2sgY2hpbGRyZW4gaGF2ZSBwZW5kaW5nIHdvcmsuIFNraXAgb3ZlciB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIHByaW1hcnkgY2hpbGRyZW4gYW5kIHdvcmsgb24gdGhlIGZhbGxiYWNrLlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGlkU3VzcGVuZEJlZm9yZSA9IChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgICAgICAgICAgIHZhciBfaGFzQ2hpbGRXb3JrID0gaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChkaWRTdXNwZW5kQmVmb3JlKSB7XG4gICAgICAgICAgICAgIGlmIChfaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgc29tZXRoaW5nIHdhcyBpbiBmYWxsYmFjayBzdGF0ZSBsYXN0IHRpbWUsIGFuZCB3ZSBoYXZlIGFsbCB0aGVcbiAgICAgICAgICAgICAgICAvLyBzYW1lIGNoaWxkcmVuIHRoZW4gd2UncmUgc3RpbGwgaW4gcHJvZ3Jlc3NpdmUgbG9hZGluZyBzdGF0ZS5cbiAgICAgICAgICAgICAgICAvLyBTb21ldGhpbmcgbWlnaHQgZ2V0IHVuYmxvY2tlZCBieSBzdGF0ZSB1cGRhdGVzIG9yIHJldHJpZXMgaW4gdGhlXG4gICAgICAgICAgICAgICAgLy8gdHJlZSB3aGljaCB3aWxsIGFmZmVjdCB0aGUgdGFpbC4gU28gd2UgbmVlZCB0byB1c2UgdGhlIG5vcm1hbFxuICAgICAgICAgICAgICAgIC8vIHBhdGggdG8gY29tcHV0ZSB0aGUgY29ycmVjdCB0YWlsLlxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgfSAvLyBJZiBub25lIG9mIHRoZSBjaGlsZHJlbiBoYWQgYW55IHdvcmssIHRoYXQgbWVhbnMgdGhhdCBub25lIG9mXG4gICAgICAgICAgICAgIC8vIHRoZW0gZ290IHJldHJpZWQgc28gdGhleSdsbCBzdGlsbCBiZSBibG9ja2VkIGluIHRoZSBzYW1lIHdheVxuICAgICAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgIH0gLy8gSWYgbm90aGluZyBzdXNwZW5kZWQgYmVmb3JlIGFuZCB3ZSdyZSByZW5kZXJpbmcgdGhlIHNhbWUgY2hpbGRyZW4sXG4gICAgICAgICAgICAvLyB0aGVuIHRoZSB0YWlsIGRvZXNuJ3QgbWF0dGVyLiBBbnl0aGluZyBuZXcgdGhhdCBzdXNwZW5kcyB3aWxsIHdvcmtcbiAgICAgICAgICAgIC8vIGluIHRoZSBcInRvZ2V0aGVyXCIgbW9kZSwgc28gd2UgY2FuIGNvbnRpbnVlIGZyb20gdGhlIHN0YXRlIHdlIGhhZC5cblxuXG4gICAgICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gUmVzZXQgdG8gdGhlIFwidG9nZXRoZXJcIiBtb2RlIGluIGNhc2Ugd2UndmUgc3RhcnRlZCBhIGRpZmZlcmVudFxuICAgICAgICAgICAgICAvLyB1cGRhdGUgaW4gdGhlIHBhc3QgYnV0IGRpZG4ndCBjb21wbGV0ZSBpdC5cbiAgICAgICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuXG4gICAgICAgICAgICBpZiAoX2hhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIGNoaWxkcmVuIGhhZCBhbnkgd29yaywgdGhhdCBtZWFucyB0aGF0IG5vbmUgb2ZcbiAgICAgICAgICAgICAgLy8gdGhlbSBnb3QgcmV0cmllZCBzbyB0aGV5J2xsIHN0aWxsIGJlIGJsb2NrZWQgaW4gdGhlIHNhbWUgd2F5XG4gICAgICAgICAgICAgIC8vIGFzIGJlZm9yZS4gV2UgY2FuIGZhc3QgYmFpbCBvdXQuXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gTmVlZCB0byBjaGVjayBpZiB0aGUgdHJlZSBzdGlsbCBuZWVkcyB0byBiZSBkZWZlcnJlZC4gVGhpcyBpc1xuICAgICAgICAgICAgLy8gYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgbG9naWMgdXNlZCBpbiB0aGUgbm9ybWFsIHVwZGF0ZSBwYXRoLFxuICAgICAgICAgICAgLy8gc28gd2UnbGwganVzdCBlbnRlciB0aGF0LiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHdlJ2xsIGJhaWwgb3V0XG4gICAgICAgICAgICAvLyBhdCB0aGUgbmV4dCBsZXZlbCBpbnN0ZWFkIG9mIHRoaXMgb25lLCBiZWNhdXNlIHRoZSBjaGlsZCBwcm9wc1xuICAgICAgICAgICAgLy8gaGF2ZSBub3QgY2hhbmdlZC4gV2hpY2ggaXMgZmluZS5cbiAgICAgICAgICAgIC8vIFRPRE86IFByb2JhYmx5IHNob3VsZCByZWZhY3RvciBgYmVnaW5Xb3JrYCB0byBzcGxpdCB0aGUgYmFpbG91dFxuICAgICAgICAgICAgLy8gcGF0aCBmcm9tIHRoZSBub3JtYWwgcGF0aC4gSSdtIHRlbXB0ZWQgdG8gZG8gYSBsYWJlbGVkIGJyZWFrIGhlcmVcbiAgICAgICAgICAgIC8vIGJ1dCBJIHdvbid0IDopXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoKGN1cnJlbnQuZmxhZ3MgJiBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgb25seSBleGlzdHMgZm9yIGxlZ2FjeSBtb2RlLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkyMTYuXG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgb24gdGhpcyBmaWJlciwgYnV0IHRoZXJlIGFyZSBubyBuZXcgcHJvcHNcbiAgICAgICAgLy8gbm9yIGxlZ2FjeSBjb250ZXh0LiBTZXQgdGhpcyB0byBmYWxzZS4gSWYgYW4gdXBkYXRlIHF1ZXVlIG9yIGNvbnRleHRcbiAgICAgICAgLy8gY29uc3VtZXIgcHJvZHVjZXMgYSBjaGFuZ2VkIHZhbHVlLCBpdCB3aWxsIHNldCB0aGlzIHRvIHRydWUuIE90aGVyd2lzZSxcbiAgICAgICAgLy8gdGhlIGNvbXBvbmVudCB3aWxsIGFzc3VtZSB0aGUgY2hpbGRyZW4gaGF2ZSBub3QgY2hhbmdlZCBhbmQgYmFpbCBvdXQuXG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xuICB9IC8vIEJlZm9yZSBlbnRlcmluZyB0aGUgYmVnaW4gcGhhc2UsIGNsZWFyIHBlbmRpbmcgdXBkYXRlIHByaW9yaXR5LlxuICAvLyBUT0RPOiBUaGlzIGFzc3VtZXMgdGhhdCB3ZSdyZSBhYm91dCB0byBldmFsdWF0ZSB0aGUgY29tcG9uZW50IGFuZCBwcm9jZXNzXG4gIC8vIHRoZSB1cGRhdGUgcXVldWUuIEhvd2V2ZXIsIHRoZXJlJ3MgYW4gZXhjZXB0aW9uOiBTaW1wbGVNZW1vQ29tcG9uZW50XG4gIC8vIHNvbWV0aW1lcyBiYWlscyBvdXQgbGF0ZXIgaW4gdGhlIGJlZ2luIHBoYXNlLiBUaGlzIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZFxuICAvLyBtb3ZlIHRoaXMgYXNzaWdubWVudCBvdXQgb2YgdGhlIGNvbW1vbiBwYXRoIGFuZCBpbnRvIGVhY2ggYnJhbmNoLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzO1xuXG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gbW91bnRJbmRldGVybWluYXRlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy50eXBlLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBlbGVtZW50VHlwZSA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlO1xuICAgICAgICByZXR1cm4gbW91bnRMYXp5Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBlbGVtZW50VHlwZSwgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIHVucmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIHJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudCA/IHVucmVzb2x2ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudCwgdW5yZXNvbHZlZFByb3BzKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudDIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudDIgPyBfdW5yZXNvbHZlZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50MiwgX3VucmVzb2x2ZWRQcm9wcyk7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUNsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfQ29tcG9uZW50MiwgX3Jlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdFJvb3QoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RUZXh0KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHJldHVybiB1cGRhdGVQb3J0YWxDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHtcbiAgICAgICAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczIgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzMiA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSB0eXBlID8gX3VucmVzb2x2ZWRQcm9wczIgOiByZXNvbHZlRGVmYXVsdFByb3BzKHR5cGUsIF91bnJlc29sdmVkUHJvcHMyKTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlRm9yd2FyZFJlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgX3Jlc29sdmVkUHJvcHMyLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIE1vZGU6XG4gICAgICByZXR1cm4gdXBkYXRlTW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHJldHVybiB1cGRhdGVQcm9maWxlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICByZXR1cm4gdXBkYXRlQ29udGV4dFByb3ZpZGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIENvbnRleHRDb25zdW1lcjpcbiAgICAgIHJldHVybiB1cGRhdGVDb250ZXh0Q29uc3VtZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF90eXBlMiA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzMyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wczsgLy8gUmVzb2x2ZSBvdXRlciBwcm9wcyBmaXJzdCwgdGhlbiByZXNvbHZlIGlubmVyIHByb3BzLlxuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczMgPSByZXNvbHZlRGVmYXVsdFByb3BzKF90eXBlMiwgX3VucmVzb2x2ZWRQcm9wczMpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IF90eXBlMi5wcm9wVHlwZXM7XG5cbiAgICAgICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgICAgICBjaGVja1Byb3BUeXBlcyhvdXRlclByb3BUeXBlcywgX3Jlc29sdmVkUHJvcHMzLCAvLyBSZXNvbHZlZCBmb3Igb3V0ZXIgb25seVxuICAgICAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoX3R5cGUyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3Jlc29sdmVkUHJvcHMzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhfdHlwZTIudHlwZSwgX3Jlc29sdmVkUHJvcHMzKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF90eXBlMiwgX3Jlc29sdmVkUHJvcHMzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSwgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50MyA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzNCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHM0ID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQzID8gX3VucmVzb2x2ZWRQcm9wczQgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQzLCBfdW5yZXNvbHZlZFByb3BzNCk7XG5cbiAgICAgICAgcmV0dXJuIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfQ29tcG9uZW50MywgX3Jlc29sdmVkUHJvcHM0LCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlTGVnYWN5SGlkZGVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArIHdvcmtJblByb2dyZXNzLnRhZyArIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSB7XG4gIC8vIFRhZyB0aGUgZmliZXIgd2l0aCBhbiB1cGRhdGUgZWZmZWN0LiBUaGlzIHR1cm5zIGEgUGxhY2VtZW50IGludG9cbiAgLy8gYSBQbGFjZW1lbnRBbmRVcGRhdGUuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKSB7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFJlZjtcbn1cblxudmFyIGFwcGVuZEFsbENoaWxkcmVuO1xudmFyIHVwZGF0ZUhvc3RDb250YWluZXI7XG52YXIgdXBkYXRlSG9zdENvbXBvbmVudCQxO1xudmFyIHVwZGF0ZUhvc3RUZXh0JDE7XG5cbntcbiAgLy8gTXV0YXRpb24gbW9kZVxuICBhcHBlbmRBbGxDaGlsZHJlbiA9IGZ1bmN0aW9uIChwYXJlbnQsIHdvcmtJblByb2dyZXNzLCBuZWVkc1Zpc2liaWxpdHlUb2dnbGUsIGlzSGlkZGVuKSB7XG4gICAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgY3JlYXRlZCBidXQgd2UgbmVlZCByZWN1cnNlIGRvd24gaXRzXG4gICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgIHZhciBub2RlID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICBhcHBlbmRJbml0aWFsQ2hpbGQocGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSA7IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlSG9zdENvbnRhaW5lciA9IGZ1bmN0aW9uICh3b3JrSW5Qcm9ncmVzcykgey8vIE5vb3BcbiAgfTtcblxuICB1cGRhdGVIb3N0Q29tcG9uZW50JDEgPSBmdW5jdGlvbiAoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGFuIGFsdGVybmF0ZSwgdGhhdCBtZWFucyB0aGlzIGlzIGFuIHVwZGF0ZSBhbmQgd2UgbmVlZCB0b1xuICAgIC8vIHNjaGVkdWxlIGEgc2lkZS1lZmZlY3QgdG8gZG8gdGhlIHVwZGF0ZXMuXG4gICAgdmFyIG9sZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuXG4gICAgaWYgKG9sZFByb3BzID09PSBuZXdQcm9wcykge1xuICAgICAgLy8gSW4gbXV0YXRpb24gbW9kZSwgdGhpcyBpcyBzdWZmaWNpZW50IGZvciBhIGJhaWxvdXQgYmVjYXVzZVxuICAgICAgLy8gd2Ugd29uJ3QgdG91Y2ggdGhpcyBub2RlIGV2ZW4gaWYgY2hpbGRyZW4gY2hhbmdlZC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHdlIGdldCB1cGRhdGVkIGJlY2F1c2Ugb25lIG9mIG91ciBjaGlsZHJlbiB1cGRhdGVkLCB3ZSBkb24ndFxuICAgIC8vIGhhdmUgbmV3UHJvcHMgc28gd2UnbGwgaGF2ZSB0byByZXVzZSB0aGVtLlxuICAgIC8vIFRPRE86IFNwbGl0IHRoZSB1cGRhdGUgQVBJIGFzIHNlcGFyYXRlIGZvciB0aGUgcHJvcHMgdnMuIGNoaWxkcmVuLlxuICAgIC8vIEV2ZW4gYmV0dGVyIHdvdWxkIGJlIGlmIGNoaWxkcmVuIHdlcmVuJ3Qgc3BlY2lhbCBjYXNlZCBhdCBhbGwgdGhvLlxuXG5cbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgdmFyIGN1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7IC8vIFRPRE86IEV4cGVyaWVuY2luZyBhbiBlcnJvciB3aGVyZSBvbGRQcm9wcyBpcyBudWxsLiBTdWdnZXN0cyBhIGhvc3RcbiAgICAvLyBjb21wb25lbnQgaXMgaGl0dGluZyB0aGUgcmVzdW1lIHBhdGguIEZpZ3VyZSBvdXQgd2h5LiBQb3NzaWJseVxuICAgIC8vIHJlbGF0ZWQgdG8gYGhpZGRlbmAuXG5cbiAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IHByZXBhcmVVcGRhdGUoaW5zdGFuY2UsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQpOyAvLyBUT0RPOiBUeXBlIHRoaXMgc3BlY2lmaWMgdG8gdGhpcyB0eXBlIG9mIGNvbXBvbmVudC5cblxuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUGF5bG9hZDsgLy8gSWYgdGhlIHVwZGF0ZSBwYXlsb2FkIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgY2hhbmdlIG9yIGlmIHRoZXJlXG4gICAgLy8gaXMgYSBuZXcgcmVmIHdlIG1hcmsgdGhpcyBhcyBhbiB1cGRhdGUuIEFsbCB0aGUgd29yayBpcyBkb25lIGluIGNvbW1pdFdvcmsuXG5cbiAgICBpZiAodXBkYXRlUGF5bG9hZCkge1xuICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZUhvc3RUZXh0JDEgPSBmdW5jdGlvbiAoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgICAvLyBJZiB0aGUgdGV4dCBkaWZmZXJzLCBtYXJrIGl0IGFzIGFuIHVwZGF0ZS4gQWxsIHRoZSB3b3JrIGluIGRvbmUgaW4gY29tbWl0V29yay5cbiAgICBpZiAob2xkVGV4dCAhPT0gbmV3VGV4dCkge1xuICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjaykge1xuICBpZiAoZ2V0SXNIeWRyYXRpbmcoKSkge1xuICAgIC8vIElmIHdlJ3JlIGh5ZHJhdGluZywgd2Ugc2hvdWxkIGNvbnN1bWUgYXMgbWFueSBpdGVtcyBhcyB3ZSBjYW5cbiAgICAvLyBzbyB3ZSBkb24ndCBsZWF2ZSBhbnkgYmVoaW5kLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN3aXRjaCAocmVuZGVyU3RhdGUudGFpbE1vZGUpIHtcbiAgICBjYXNlICdoaWRkZW4nOlxuICAgICAge1xuICAgICAgICAvLyBBbnkgaW5zZXJ0aW9ucyBhdCB0aGUgZW5kIG9mIHRoZSB0YWlsIGxpc3QgYWZ0ZXIgdGhpcyBwb2ludFxuICAgICAgICAvLyBzaG91bGQgYmUgaW52aXNpYmxlLiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBtb3VudGVkIGJvdW5kYXJpZXNcbiAgICAgICAgLy8gYW55dGhpbmcgYmVmb3JlIHRoZW0gYXJlIG5vdCBjb25zaWRlcmVkIGZvciBjb2xsYXBzaW5nLlxuICAgICAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSB3aG9sZSB0YWlsIHRvIGZpbmQgaWZcbiAgICAgICAgLy8gdGhlcmUgYXJlIGFueS5cbiAgICAgICAgdmFyIHRhaWxOb2RlID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgdmFyIGxhc3RUYWlsTm9kZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKHRhaWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHRhaWxOb2RlLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGFzdFRhaWxOb2RlID0gdGFpbE5vZGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGFpbE5vZGUgPSB0YWlsTm9kZS5zaWJsaW5nO1xuICAgICAgICB9IC8vIE5leHQgd2UncmUgc2ltcGx5IGdvaW5nIHRvIGRlbGV0ZSBhbGwgaW5zZXJ0aW9ucyBhZnRlciB0aGVcbiAgICAgICAgLy8gbGFzdCByZW5kZXJlZCBpdGVtLlxuXG5cbiAgICAgICAgaWYgKGxhc3RUYWlsTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEFsbCByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHRhaWwgYXJlIGluc2VydGlvbnMuXG4gICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRGV0YWNoIHRoZSBpbnNlcnRpb24gYWZ0ZXIgdGhlIGxhc3Qgbm9kZSB0aGF0IHdhcyBhbHJlYWR5XG4gICAgICAgICAgLy8gaW5zZXJ0ZWQuXG4gICAgICAgICAgbGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdjb2xsYXBzZWQnOlxuICAgICAge1xuICAgICAgICAvLyBBbnkgaW5zZXJ0aW9ucyBhdCB0aGUgZW5kIG9mIHRoZSB0YWlsIGxpc3QgYWZ0ZXIgdGhpcyBwb2ludFxuICAgICAgICAvLyBzaG91bGQgYmUgaW52aXNpYmxlLiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBtb3VudGVkIGJvdW5kYXJpZXNcbiAgICAgICAgLy8gYW55dGhpbmcgYmVmb3JlIHRoZW0gYXJlIG5vdCBjb25zaWRlcmVkIGZvciBjb2xsYXBzaW5nLlxuICAgICAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSB3aG9sZSB0YWlsIHRvIGZpbmQgaWZcbiAgICAgICAgLy8gdGhlcmUgYXJlIGFueS5cbiAgICAgICAgdmFyIF90YWlsTm9kZSA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgIHZhciBfbGFzdFRhaWxOb2RlID0gbnVsbDtcblxuICAgICAgICB3aGlsZSAoX3RhaWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKF90YWlsTm9kZS5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIF9sYXN0VGFpbE5vZGUgPSBfdGFpbE5vZGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RhaWxOb2RlID0gX3RhaWxOb2RlLnNpYmxpbmc7XG4gICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBzaW1wbHkgZ29pbmcgdG8gZGVsZXRlIGFsbCBpbnNlcnRpb25zIGFmdGVyIHRoZVxuICAgICAgICAvLyBsYXN0IHJlbmRlcmVkIGl0ZW0uXG5cblxuICAgICAgICBpZiAoX2xhc3RUYWlsTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEFsbCByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHRhaWwgYXJlIGluc2VydGlvbnMuXG4gICAgICAgICAgaWYgKCFoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2sgJiYgcmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gV2Ugc3VzcGVuZGVkIGR1cmluZyB0aGUgaGVhZC4gV2Ugd2FudCB0byBzaG93IGF0IGxlYXN0IG9uZVxuICAgICAgICAgICAgLy8gcm93IGF0IHRoZSB0YWlsLiBTbyB3ZSdsbCBrZWVwIG9uIGFuZCBjdXQgb2ZmIHRoZSByZXN0LlxuICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbC5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERldGFjaCB0aGUgaW5zZXJ0aW9uIGFmdGVyIHRoZSBsYXN0IG5vZGUgdGhhdCB3YXMgYWxyZWFkeVxuICAgICAgICAgIC8vIGluc2VydGVkLlxuICAgICAgICAgIF9sYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wbGV0ZVdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgY2FzZSBNb2RlOlxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCk7XG4gICAgICAgIHZhciBmaWJlclJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dCkge1xuICAgICAgICAgIGZpYmVyUm9vdC5jb250ZXh0ID0gZmliZXJSb290LnBlbmRpbmdDb250ZXh0O1xuICAgICAgICAgIGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LmNoaWxkID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaHlkcmF0ZWQsIHBvcCBzbyB0aGF0IHdlIGNhbiBkZWxldGUgYW55IHJlbWFpbmluZyBjaGlsZHJlblxuICAgICAgICAgIC8vIHRoYXQgd2VyZW4ndCBoeWRyYXRlZC5cbiAgICAgICAgICB2YXIgd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAod2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGh5ZHJhdGVkLCB0aGVuIHdlJ2xsIG5lZWQgdG8gc2NoZWR1bGUgYW4gdXBkYXRlIGZvclxuICAgICAgICAgICAgLy8gdGhlIGNvbW1pdCBzaWRlLWVmZmVjdHMgb24gdGhlIHJvb3QuXG4gICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFmaWJlclJvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgICAgLy8gU2NoZWR1bGUgYW4gZWZmZWN0IHRvIGNsZWFyIHRoaXMgY29udGFpbmVyIGF0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjb21taXQuXG4gICAgICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugb2YgUmVhY3QgcmVuZGVyaW5nIGludG8gYSBjb250YWluZXIgd2l0aCBwcmV2aW91cyBjaGlsZHJlbi5cbiAgICAgICAgICAgIC8vIEl0J3MgYWxzbyBzYWZlIHRvIGRvIGZvciB1cGRhdGVzIHRvbywgYmVjYXVzZSBjdXJyZW50LmNoaWxkIHdvdWxkIG9ubHkgYmUgbnVsbFxuICAgICAgICAgICAgLy8gaWYgdGhlIHByZXZpb3VzIHJlbmRlciB3YXMgbnVsbCAoc28gdGhlIHRoZSBjb250YWluZXIgd291bGQgYWxyZWFkeSBiZSBlbXB0eSkuXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIHJvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgIHVwZGF0ZUhvc3RDb21wb25lbnQkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG5cbiAgICAgICAgICBpZiAoY3VycmVudC5yZWYgIT09IHdvcmtJblByb2dyZXNzLnJlZikge1xuICAgICAgICAgICAgbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFuZXdQcm9wcykge1xuICAgICAgICAgICAgaWYgKCEod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHdlIGFib3J0IHdvcmsuXG5cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGN1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7IC8vIFRPRE86IE1vdmUgY3JlYXRlSW5zdGFuY2UgdG8gYmVnaW5Xb3JrIGFuZCBrZWVwIGl0IG9uIGEgY29udGV4dFxuICAgICAgICAgIC8vIFwic3RhY2tcIiBhcyB0aGUgcGFyZW50LiBUaGVuIGFwcGVuZCBjaGlsZHJlbiBhcyB3ZSBnbyBpbiBiZWdpbldvcmtcbiAgICAgICAgICAvLyBvciBjb21wbGV0ZVdvcmsgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Ugd2FudCB0byBhZGQgdGhlbSB0b3AtPmRvd24gb3JcbiAgICAgICAgICAvLyBib3R0b20tPnVwLiBUb3AtPmRvd24gaXMgZmFzdGVyIGluIElFMTEuXG5cbiAgICAgICAgICB2YXIgX3dhc0h5ZHJhdGVkID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKF93YXNIeWRyYXRlZCkge1xuICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIGFuZCBjcmVhdGVJbnN0YW5jZSBzdGVwIGludG8gdGhlIGJlZ2luUGhhc2VcbiAgICAgICAgICAgIC8vIHRvIGNvbnNvbGlkYXRlLlxuICAgICAgICAgICAgaWYgKHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0KSkge1xuICAgICAgICAgICAgICAvLyBJZiBjaGFuZ2VzIHRvIHRoZSBoeWRyYXRlZCBub2RlIG5lZWQgdG8gYmUgYXBwbGllZCBhdCB0aGVcbiAgICAgICAgICAgICAgLy8gY29tbWl0LXBoYXNlIHdlIG1hcmsgdGhpcyBhcyBzdWNoLlxuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gY3JlYXRlSW5zdGFuY2UodHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICBhcHBlbmRBbGxDaGlsZHJlbihpbnN0YW5jZSwgd29ya0luUHJvZ3Jlc3MsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBpbnN0YW5jZTsgLy8gQ2VydGFpbiByZW5kZXJlcnMgcmVxdWlyZSBjb21taXQtdGltZSBlZmZlY3RzIGZvciBpbml0aWFsIG1vdW50LlxuICAgICAgICAgICAgLy8gKGVnIERPTSByZW5kZXJlciBzdXBwb3J0cyBhdXRvLWZvY3VzIGZvciBjZXJ0YWluIGVsZW1lbnRzKS5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBzdWNoIHJlbmRlcmVycyBnZXQgc2NoZWR1bGVkIGZvciBsYXRlciB3b3JrLlxuXG4gICAgICAgICAgICBpZiAoZmluYWxpemVJbml0aWFsQ2hpbGRyZW4oaW5zdGFuY2UsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5yZWYgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcmVmIG9uIGEgaG9zdCBub2RlIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBjYWxsYmFja1xuICAgICAgICAgICAgbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIHZhciBuZXdUZXh0ID0gbmV3UHJvcHM7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgJiYgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9IG51bGwpIHtcbiAgICAgICAgICB2YXIgb2xkVGV4dCA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wczsgLy8gSWYgd2UgaGF2ZSBhbiBhbHRlcm5hdGUsIHRoYXQgbWVhbnMgdGhpcyBpcyBhbiB1cGRhdGUgYW5kIHdlIG5lZWRcbiAgICAgICAgICAvLyB0byBzY2hlZHVsZSBhIHNpZGUtZWZmZWN0IHRvIGRvIHRoZSB1cGRhdGVzLlxuXG4gICAgICAgICAgdXBkYXRlSG9zdFRleHQkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgb2xkVGV4dCwgbmV3VGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXdUZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKCEod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHdlIGFib3J0IHdvcmsuXG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3Jvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG5cbiAgICAgICAgICB2YXIgX2N1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7XG5cbiAgICAgICAgICB2YXIgX3dhc0h5ZHJhdGVkMiA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmIChfd2FzSHlkcmF0ZWQyKSB7XG4gICAgICAgICAgICBpZiAocHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjcmVhdGVUZXh0SW5zdGFuY2UobmV3VGV4dCwgX3Jvb3RDb250YWluZXJJbnN0YW5jZSwgX2N1cnJlbnRIb3N0Q29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgLy8gU29tZXRoaW5nIHN1c3BlbmRlZC4gUmUtcmVuZGVyIHdpdGggdGhlIGZhbGxiYWNrIGNoaWxkcmVuLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXM7IC8vIERvIG5vdCByZXNldCB0aGUgZWZmZWN0IGxpc3QuXG5cbiAgICAgICAgICBpZiAoICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuZXh0RGlkVGltZW91dCA9IG5leHRTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgdmFyIHByZXZEaWRUaW1lb3V0ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy5mYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgcHJldkRpZFRpbWVvdXQgPSBwcmV2U3RhdGUgIT09IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dERpZFRpbWVvdXQgJiYgIXByZXZEaWRUaW1lb3V0KSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBzdWJ0cmVlZSBpcyBydW5uaW5nIGluIGJsb2NraW5nIG1vZGUgd2UgY2FuIHN1c3BlbmQsXG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIHdvbid0IHN1c3BlbmQuXG4gICAgICAgICAgLy8gVE9ETzogVGhpcyB3aWxsIHN0aWxsIHN1c3BlbmQgYSBzeW5jaHJvbm91cyB0cmVlIGlmIGFueXRoaW5nXG4gICAgICAgICAgLy8gaW4gdGhlIGNvbmN1cnJlbnQgdHJlZSBhbHJlYWR5IHN1c3BlbmRlZCBkdXJpbmcgdGhpcyByZW5kZXIuXG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGtub3duIGJ1Zy5cbiAgICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBiYWNrIHRvIHRocm93RXhjZXB0aW9uIGJlY2F1c2UgdGhpcyBpcyB0b28gbGF0ZVxuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIGxhcmdlIHRyZWUgd2hpY2ggaXMgY29tbW9uIGZvciBpbml0aWFsIGxvYWRzLiBXZVxuICAgICAgICAgICAgLy8gZG9uJ3Qga25vdyBpZiB3ZSBzaG91bGQgcmVzdGFydCBhIHJlbmRlciBvciBub3QgdW50aWwgd2UgZ2V0XG4gICAgICAgICAgICAvLyB0aGlzIG1hcmtlciwgYW5kIHRoaXMgaXMgdG9vIGxhdGUuXG4gICAgICAgICAgICAvLyBJZiB0aGlzIHJlbmRlciBhbHJlYWR5IGhhZCBhIHBpbmcgb3IgbG93ZXIgcHJpIHVwZGF0ZXMsXG4gICAgICAgICAgICAvLyBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSBrbm93IHdlJ3JlIGdvaW5nIHRvIHN1c3BlbmQgd2VcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSBhYmxlIHRvIGltbWVkaWF0ZWx5IHJlc3RhcnQgZnJvbSB3aXRoaW4gdGhyb3dFeGNlcHRpb24uXG4gICAgICAgICAgICB2YXIgaGFzSW52aXNpYmxlQ2hpbGRDb250ZXh0ID0gY3VycmVudCA9PT0gbnVsbCAmJiB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrICE9PSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoaGFzSW52aXNpYmxlQ2hpbGRDb250ZXh0IHx8IGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhpcyB3YXMgaW4gYW4gaW52aXNpYmxlIHRyZWUgb3IgYSBuZXcgcmVuZGVyLCB0aGVuIHNob3dpbmdcbiAgICAgICAgICAgICAgLy8gdGhpcyBib3VuZGFyeSBpcyBvay5cbiAgICAgICAgICAgICAgcmVuZGVyRGlkU3VzcGVuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSdyZSBnb2luZyB0byBoYXZlIHRvIGhpZGUgY29udGVudCBzbyB3ZSBzaG91bGRcbiAgICAgICAgICAgICAgLy8gc3VzcGVuZCBmb3IgbG9uZ2VyIGlmIHBvc3NpYmxlLlxuICAgICAgICAgICAgICByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIC8vIFRPRE86IE9ubHkgc2NoZWR1bGUgdXBkYXRlcyBpZiB0aGVzZSB2YWx1ZXMgYXJlIG5vbiBlcXVhbCwgaS5lLiBpdCBjaGFuZ2VkLlxuICAgICAgICAgIGlmIChuZXh0RGlkVGltZW91dCB8fCBwcmV2RGlkVGltZW91dCkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBib3VuZGFyeSBqdXN0IHRpbWVkIG91dCwgc2NoZWR1bGUgYW4gZWZmZWN0IHRvIGF0dGFjaCBhXG4gICAgICAgICAgICAvLyByZXRyeSBsaXN0ZW5lciB0byB0aGUgcHJvbWlzZS4gVGhpcyBmbGFnIGlzIGFsc28gdXNlZCB0byBoaWRlIHRoZVxuICAgICAgICAgICAgLy8gcHJpbWFyeSBjaGlsZHJlbi4gSW4gbXV0YXRpb24gbW9kZSwgd2UgYWxzbyBuZWVkIHRoZSBmbGFnIHRvXG4gICAgICAgICAgICAvLyAqdW5oaWRlKiBjaGlsZHJlbiB0aGF0IHdlcmUgcHJldmlvdXNseSBoaWRkZW4sIHNvIGNoZWNrIGlmIHRoaXNcbiAgICAgICAgICAgIC8vIGlzIGN1cnJlbnRseSB0aW1lZCBvdXQsIHRvby5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgdXBkYXRlSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIHByZXBhcmVQb3J0YWxNb3VudCh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICAvLyBQb3AgcHJvdmlkZXIgZmliZXJcbiAgICAgIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIFNhbWUgYXMgY2xhc3MgY29tcG9uZW50IGNhc2UuIEkgcHV0IGl0IGRvd24gaGVyZSBzbyB0aGF0IHRoZSB0YWdzIGFyZVxuICAgICAgICAvLyBzZXF1ZW50aWFsIHRvIGVuc3VyZSB0aGlzIHN3aXRjaCBpcyBjb21waWxlZCB0byBhIGp1bXAgdGFibGUuXG4gICAgICAgIHZhciBfQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoX0NvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgaWYgKHJlbmRlclN0YXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UncmUgcnVubmluZyBpbiB0aGUgZGVmYXVsdCwgXCJpbmRlcGVuZGVudFwiIG1vZGUuXG4gICAgICAgICAgLy8gV2UgZG9uJ3QgZG8gYW55dGhpbmcgaW4gdGhpcyBtb2RlLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRpZFN1c3BlbmRBbHJlYWR5ID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG4gICAgICAgIHZhciByZW5kZXJlZFRhaWwgPSByZW5kZXJTdGF0ZS5yZW5kZXJpbmc7XG5cbiAgICAgICAgaWYgKHJlbmRlcmVkVGFpbCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIGp1c3QgcmVuZGVyZWQgdGhlIGhlYWQuXG4gICAgICAgICAgaWYgKCFkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgcGFzcy4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGFueXRoaW5nIGlzIHN0aWxsXG4gICAgICAgICAgICAvLyBzdXNwZW5kZWQgaW4gdGhlIHJlbmRlcmVkIHNldC5cbiAgICAgICAgICAgIC8vIElmIG5ldyBjb250ZW50IHVuc3VzcGVuZGVkLCBidXQgdGhlcmUncyBzdGlsbCBzb21lIGNvbnRlbnQgdGhhdFxuICAgICAgICAgICAgLy8gZGlkbid0LiBUaGVuIHdlIG5lZWQgdG8gZG8gYSBzZWNvbmQgcGFzcyB0aGF0IGZvcmNlcyBldmVyeXRoaW5nXG4gICAgICAgICAgICAvLyB0byBrZWVwIHNob3dpbmcgdGhlaXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgLy8gV2UgbWlnaHQgYmUgc3VzcGVuZGVkIGlmIHNvbWV0aGluZyBpbiB0aGlzIHJlbmRlciBwYXNzIHN1c3BlbmRlZCwgb3JcbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBpbiB0aGUgcHJldmlvdXMgY29tbWl0dGVkIHBhc3Mgc3VzcGVuZGVkLiBPdGhlcndpc2UsXG4gICAgICAgICAgICAvLyB0aGVyZSdzIG5vIGNoYW5jZSBzbyB3ZSBjYW4gc2tpcCB0aGUgZXhwZW5zaXZlIGNhbGwgdG9cbiAgICAgICAgICAgIC8vIGZpbmRGaXJzdFN1c3BlbmRlZC5cbiAgICAgICAgICAgIHZhciBjYW5ub3RCZVN1c3BlbmRlZCA9IHJlbmRlckhhc05vdFN1c3BlbmRlZFlldCgpICYmIChjdXJyZW50ID09PSBudWxsIHx8IChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MpO1xuXG4gICAgICAgICAgICBpZiAoIWNhbm5vdEJlU3VzcGVuZGVkKSB7XG4gICAgICAgICAgICAgIHZhciByb3cgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgICAgICAgICAgICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN1c3BlbmRlZCA9IGZpbmRGaXJzdFN1c3BlbmRlZChyb3cpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN1c3BlbmRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBJZiB0aGlzIGlzIGEgbmV3bHkgc3VzcGVuZGVkIHRyZWUsIGl0IG1pZ2h0IG5vdCBnZXQgY29tbWl0dGVkIGFzXG4gICAgICAgICAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSBzZWNvbmQgcGFzcy4gSW4gdGhhdCBjYXNlIG5vdGhpbmcgd2lsbCBzdWJzY3JpYmUgdG9cbiAgICAgICAgICAgICAgICAgIC8vIGl0cyB0aGVubmFibGVzLiBJbnN0ZWFkLCB3ZSdsbCB0cmFuc2ZlciBpdHMgdGhlbm5hYmxlcyB0byB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIFN1c3BlbnNlTGlzdCBzbyB0aGF0IGl0IGNhbiByZXRyeSBpZiB0aGV5IHJlc29sdmUuXG4gICAgICAgICAgICAgICAgICAvLyBUaGVyZSBtaWdodCBiZSBtdWx0aXBsZSBvZiB0aGVzZSBpbiB0aGUgbGlzdCBidXQgc2luY2Ugd2UncmVcbiAgICAgICAgICAgICAgICAgIC8vIGdvaW5nIHRvIHdhaXQgZm9yIGFsbCBvZiB0aGVtIGFueXdheSwgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyXG4gICAgICAgICAgICAgICAgICAvLyB3aGljaCBvbmVzIGdldHMgdG8gcGluZy4gSW4gdGhlb3J5IHdlIGNvdWxkIGdldCBjbGV2ZXIgYW5kIGtlZXBcbiAgICAgICAgICAgICAgICAgIC8vIHRyYWNrIG9mIGhvdyBtYW55IGRlcGVuZGVuY2llcyByZW1haW4gYnV0IGl0IGdldHMgdHJpY2t5IGJlY2F1c2VcbiAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBtZWFudGltZSwgd2UgY2FuIGFkZC9yZW1vdmUvY2hhbmdlIGl0ZW1zIGFuZCBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICAgICAgICAvLyBXZSBtaWdodCBiYWlsIG91dCBvZiB0aGUgbG9vcCBiZWZvcmUgZmluZGluZyBhbnkgYnV0IHRoYXRcbiAgICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3QgbWF0dGVyIHNpbmNlIHRoYXQgbWVhbnMgdGhhdCB0aGUgb3RoZXIgYm91bmRhcmllcyB0aGF0XG4gICAgICAgICAgICAgICAgICAvLyB3ZSBkaWQgZmluZCBhbHJlYWR5IGhhcyB0aGVpciBsaXN0ZW5lcnMgYXR0YWNoZWQuXG5cbiAgICAgICAgICAgICAgICAgIHZhciBuZXdUaGVubmFibGVzID0gc3VzcGVuZGVkLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICAgICAgICBpZiAobmV3VGhlbm5hYmxlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG5ld1RoZW5uYWJsZXM7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICAgICAgICAgIH0gLy8gUmVyZW5kZXIgdGhlIHdob2xlIGxpc3QsIGJ1dCB0aGlzIHRpbWUsIHdlJ2xsIGZvcmNlIGZhbGxiYWNrc1xuICAgICAgICAgICAgICAgICAgLy8gdG8gc3RheSBpbiBwbGFjZS5cbiAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgbGlzdCBiZWZvcmUgZG9pbmcgdGhlIHNlY29uZCBwYXNzIHNpbmNlIHRoYXQncyBub3cgaW52YWxpZC5cblxuXG4gICAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0OyAvLyBSZXNldCB0aGUgY2hpbGQgZmliZXJzIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlLlxuXG4gICAgICAgICAgICAgICAgICByZXNldENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7IC8vIFNldCB1cCB0aGUgU3VzcGVuc2UgQ29udGV4dCB0byBmb3JjZSBzdXNwZW5zZSBhbmQgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgICAgICAgIC8vIHJlcmVuZGVyIHRoZSBjaGlsZHJlbi5cblxuICAgICAgICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjaykpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJvdyA9IHJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsICYmIG5vdygpID4gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBwYXNzZWQgb3VyIENQVSBkZWFkbGluZSBidXQgd2Ugc3RpbGwgaGF2ZSByb3dzXG4gICAgICAgICAgICAgIC8vIGxlZnQgaW4gdGhlIHRhaWwuIFdlJ2xsIGp1c3QgZ2l2ZSB1cCBmdXJ0aGVyIGF0dGVtcHRzIHRvIHJlbmRlclxuICAgICAgICAgICAgICAvLyB0aGUgbWFpbiBjb250ZW50IGFuZCBvbmx5IHJlbmRlciBmYWxsYmFja3MuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzXG4gICAgICAgICAgICAgIC8vIHRvIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtc1xuICAgICAgICAgICAgICAvLyBvZiBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsXG4gICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhc1xuICAgICAgICAgICAgICAvLyBjb21taXR0ZWQuIElmIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZVxuICAgICAgICAgICAgICAvLyBwYWludGVkLiBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuXG4gICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW55IFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nXG4gICAgICAgICAgICAgIC8vIHNpbmNlIHdlJ3JlIGxlYXZpbmcgaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcmtTcGF3bmVkV29yayhTb21lUmV0cnlMYW5lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTtcbiAgICAgICAgICB9IC8vIE5leHQgd2UncmUgZ29pbmcgdG8gcmVuZGVyIHRoZSB0YWlsLlxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQXBwZW5kIHRoZSByZW5kZXJlZCByb3cgdG8gdGhlIGNoaWxkIGxpc3QuXG4gICAgICAgICAgaWYgKCFkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgdmFyIF9zdXNwZW5kZWQgPSBmaW5kRmlyc3RTdXNwZW5kZWQocmVuZGVyZWRUYWlsKTtcblxuICAgICAgICAgICAgaWYgKF9zdXNwZW5kZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlOyAvLyBFbnN1cmUgd2UgdHJhbnNmZXIgdGhlIHVwZGF0ZSBxdWV1ZSB0byB0aGUgcGFyZW50IHNvIHRoYXQgaXQgZG9lc24ndFxuICAgICAgICAgICAgICAvLyBnZXQgbG9zdCBpZiB0aGlzIHJvdyBlbmRzIHVwIGRyb3BwZWQgZHVyaW5nIGEgc2Vjb25kIHBhc3MuXG5cbiAgICAgICAgICAgICAgdmFyIF9uZXdUaGVubmFibGVzID0gX3N1c3BlbmRlZC51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgICBpZiAoX25ld1RoZW5uYWJsZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IF9uZXdUaGVubmFibGVzO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgdHJ1ZSk7IC8vIFRoaXMgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkLlxuXG4gICAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsID09PSBudWxsICYmIHJlbmRlclN0YXRlLnRhaWxNb2RlID09PSAnaGlkZGVuJyAmJiAhcmVuZGVyZWRUYWlsLmFsdGVybmF0ZSAmJiAhZ2V0SXNIeWRyYXRpbmcoKSAvLyBXZSBkb24ndCBjdXQgaXQgaWYgd2UncmUgaHlkcmF0aW5nLlxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZGVsZXRlIHRoZSByb3cgd2UganVzdCByZW5kZXJlZC5cbiAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgbGlzdCB0byB3aGF0IGl0IHdhcyBiZWZvcmUgd2UgcmVuZGVyZWQgdGhpc1xuICAgICAgICAgICAgICAgICAgLy8gY2hpbGQuIFRoZSBuZXN0ZWQgY2hpbGRyZW4gaGF2ZSBhbHJlYWR5IGFwcGVuZGVkIHRoZW1zZWx2ZXMuXG4gICAgICAgICAgICAgICAgICB2YXIgbGFzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0OyAvLyBSZW1vdmUgYW55IGVmZmVjdHMgdGhhdCB3ZXJlIGFwcGVuZGVkIGFmdGVyIHRoaXMgcG9pbnQuXG5cbiAgICAgICAgICAgICAgICAgIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICB9IC8vIFdlJ3JlIGRvbmUuXG5cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICggLy8gVGhlIHRpbWUgaXQgdG9vayB0byByZW5kZXIgbGFzdCByb3cgaXMgZ3JlYXRlciB0aGFuIHRoZSByZW1haW5pbmdcbiAgICAgICAgICAgIC8vIHRpbWUgd2UgaGF2ZSB0byByZW5kZXIuIFNvIHJlbmRlcmluZyBvbmUgbW9yZSByb3cgd291bGQgbGlrZWx5XG4gICAgICAgICAgICAvLyBleGNlZWQgaXQuXG4gICAgICAgICAgICBub3coKSAqIDIgLSByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkgJiYgcmVuZGVyTGFuZXMgIT09IE9mZnNjcmVlbkxhbmUpIHtcbiAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBub3cgcGFzc2VkIG91ciBDUFUgZGVhZGxpbmUgYW5kIHdlJ2xsIGp1c3QgZ2l2ZSB1cCBmdXJ0aGVyXG4gICAgICAgICAgICAgIC8vIGF0dGVtcHRzIHRvIHJlbmRlciB0aGUgbWFpbiBjb250ZW50IGFuZCBvbmx5IHJlbmRlciBmYWxsYmFja3MuXG4gICAgICAgICAgICAgIC8vIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpcyB1c3VhbGx5IGZhc3Rlci5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gU2luY2Ugbm90aGluZyBhY3R1YWxseSBzdXNwZW5kZWQsIHRoZXJlIHdpbGwgbm90aGluZyB0byBwaW5nIHRoaXNcbiAgICAgICAgICAgICAgLy8gdG8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zXG4gICAgICAgICAgICAgIC8vIG9mIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlcixcbiAgICAgICAgICAgICAgLy8gaXQncyBub3QgcGFydCBvZiB0aGUgc2FtZSB0cmFuc2l0aW9uIG9uY2UgdGhlIHRyYW5zaXRpb24gaGFzXG4gICAgICAgICAgICAgIC8vIGNvbW1pdHRlZC4gSWYgaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlXG4gICAgICAgICAgICAgIC8vIHBhaW50ZWQuIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy5cbiAgICAgICAgICAgICAgLy8gV2UgY2FuIHVzZSBhbnkgUmV0cnlMYW5lIGV2ZW4gaWYgaXQncyB0aGUgb25lIGN1cnJlbnRseSByZW5kZXJpbmdcbiAgICAgICAgICAgICAgLy8gc2luY2Ugd2UncmUgbGVhdmluZyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcblxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFya1NwYXduZWRXb3JrKFNvbWVSZXRyeUxhbmUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlbmRlclN0YXRlLmlzQmFja3dhcmRzKSB7XG4gICAgICAgICAgICAvLyBUaGUgZWZmZWN0IGxpc3Qgb2YgdGhlIGJhY2t3YXJkcyB0YWlsIHdpbGwgaGF2ZSBiZWVuIGFkZGVkXG4gICAgICAgICAgICAvLyB0byB0aGUgZW5kLiBUaGlzIGJyZWFrcyB0aGUgZ3VhcmFudGVlIHRoYXQgbGlmZS1jeWNsZXMgZmlyZSBpblxuICAgICAgICAgICAgLy8gc2libGluZyBvcmRlciBidXQgdGhhdCBpc24ndCBhIHN0cm9uZyBndWFyYW50ZWUgcHJvbWlzZWQgYnkgUmVhY3QuXG4gICAgICAgICAgICAvLyBFc3BlY2lhbGx5IHNpbmNlIHRoZXNlIG1pZ2h0IGFsc28ganVzdCBwb3AgaW4gZHVyaW5nIGZ1dHVyZSBjb21taXRzLlxuICAgICAgICAgICAgLy8gQXBwZW5kIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QuXG4gICAgICAgICAgICByZW5kZXJlZFRhaWwuc2libGluZyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwcmV2aW91c1NpYmxpbmcgPSByZW5kZXJTdGF0ZS5sYXN0O1xuXG4gICAgICAgICAgICBpZiAocHJldmlvdXNTaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHByZXZpb3VzU2libGluZy5zaWJsaW5nID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlclN0YXRlLmxhc3QgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBzdGlsbCBoYXZlIHRhaWwgcm93cyB0byByZW5kZXIuXG4gICAgICAgICAgLy8gUG9wIGEgcm93LlxuICAgICAgICAgIHZhciBuZXh0ID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBuZXh0O1xuICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBuZXh0LnNpYmxpbmc7XG4gICAgICAgICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3Q7XG4gICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID0gbm93KCk7XG4gICAgICAgICAgbmV4dC5zaWJsaW5nID0gbnVsbDsgLy8gUmVzdG9yZSB0aGUgY29udGV4dC5cbiAgICAgICAgICAvLyBUT0RPOiBXZSBjYW4gcHJvYmFibHkganVzdCBhdm9pZCBwb3BwaW5nIGl0IGluc3RlYWQgYW5kIG9ubHlcbiAgICAgICAgICAvLyBzZXR0aW5nIGl0IHRoZSBmaXJzdCB0aW1lIHdlIGdvIGZyb20gbm90IHN1c3BlbmRlZCB0byBzdXNwZW5kZWQuXG5cbiAgICAgICAgICB2YXIgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuXG4gICAgICAgICAgaWYgKGRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpOyAvLyBEbyBhIHBhc3Mgb3ZlciB0aGUgbmV4dCByb3cuXG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEJsb2NrOlxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX25leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIF9wcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIHByZXZJc0hpZGRlbiA9IF9wcmV2U3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgdmFyIG5leHRJc0hpZGRlbiA9IF9uZXh0U3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICBpZiAocHJldklzSGlkZGVuICE9PSBuZXh0SXNIaWRkZW4gJiYgbmV3UHJvcHMubW9kZSAhPT0gJ3Vuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nJykge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gdW5pdCBvZiB3b3JrIHRhZyAoXCIgKyB3b3JrSW5Qcm9ncmVzcy50YWcgKyBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW53aW5kV29yayh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZsYWdzID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG5cbiAgICAgICAgaWYgKGZsYWdzICYgU2hvdWxkQ2FwdHVyZSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG5cbiAgICAgICAgICBpZiAoICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpO1xuICAgICAgICB2YXIgX2ZsYWdzID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG5cbiAgICAgICAgaWYgKCEoKF9mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoZSByb290IGZhaWxlZCB0byB1bm1vdW50IGFmdGVyIGFuIGVycm9yLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IF9mbGFncyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcbiAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiBwb3BIeWRyYXRpb25TdGF0ZVxuICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICB2YXIgX2ZsYWdzMiA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmIChfZmxhZ3MyICYgU2hvdWxkQ2FwdHVyZSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gX2ZsYWdzMiAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTsgLy8gQ2FwdHVyZWQgYSBzdXNwZW5zZSBlZmZlY3QuIFJlLXJlbmRlciB0aGUgYm91bmRhcnkuXG5cbiAgICAgICAgICBpZiAoICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7IC8vIFN1c3BlbnNlTGlzdCBkb2Vzbid0IGFjdHVhbGx5IGNhdGNoIGFueXRoaW5nLiBJdCBzaG91bGQndmUgYmVlblxuICAgICAgICAvLyBjYXVnaHQgYnkgYSBuZXN0ZWQgYm91bmRhcnkuIElmIG5vdCwgaXQgc2hvdWxkIGJ1YmJsZSB0aHJvdWdoLlxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcG9wUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHBvcFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVud2luZEludGVycnVwdGVkV29yayhpbnRlcnJ1cHRlZFdvcmspIHtcbiAgc3dpdGNoIChpbnRlcnJ1cHRlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gaW50ZXJydXB0ZWRXb3JrLnR5cGUuY2hpbGRDb250ZXh0VHlwZXM7XG5cbiAgICAgICAgaWYgKGNoaWxkQ29udGV4dFR5cGVzICE9PSBudWxsICYmIGNoaWxkQ29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICBwb3BTdXNwZW5zZUNvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICBwb3BTdXNwZW5zZUNvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICBwb3BQcm92aWRlcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHBvcFJlbmRlckxhbmVzKGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDYXB0dXJlZFZhbHVlKHZhbHVlLCBzb3VyY2UpIHtcbiAgLy8gSWYgdGhlIHZhbHVlIGlzIGFuIGVycm9yLCBjYWxsIHRoaXMgZnVuY3Rpb24gaW1tZWRpYXRlbHkgYWZ0ZXIgaXQgaXMgdGhyb3duXG4gIC8vIHNvIHRoZSBzdGFjayBpcyBhY2N1cmF0ZS5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3RhY2s6IGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChzb3VyY2UpXG4gIH07XG59XG5cbi8vIFRoaXMgbW9kdWxlIGlzIGZvcmtlZCBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLlxuLy8gQnkgZGVmYXVsdCwgcmV0dXJuIGB0cnVlYCB0byBsb2cgZXJyb3JzIHRvIHRoZSBjb25zb2xlLlxuLy8gRm9ya3MgY2FuIHJldHVybiBgZmFsc2VgIGlmIHRoaXMgaXNuJ3QgZGVzaXJhYmxlLlxuZnVuY3Rpb24gc2hvd0Vycm9yRGlhbG9nKGJvdW5kYXJ5LCBlcnJvckluZm8pIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGxvZ0NhcHR1cmVkRXJyb3IoYm91bmRhcnksIGVycm9ySW5mbykge1xuICB0cnkge1xuICAgIHZhciBsb2dFcnJvciA9IHNob3dFcnJvckRpYWxvZyhib3VuZGFyeSwgZXJyb3JJbmZvKTsgLy8gQWxsb3cgaW5qZWN0ZWQgc2hvd0Vycm9yRGlhbG9nKCkgdG8gcHJldmVudCBkZWZhdWx0IGNvbnNvbGUuZXJyb3IgbG9nZ2luZy5cbiAgICAvLyBUaGlzIGVuYWJsZXMgcmVuZGVyZXJzIGxpa2UgUmVhY3ROYXRpdmUgdG8gYmV0dGVyIG1hbmFnZSByZWRib3ggYmVoYXZpb3IuXG5cbiAgICBpZiAobG9nRXJyb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgaWYgKHRydWUpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBlcnJvckluZm8uc291cmNlO1xuICAgICAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICAgICAgdmFyIGNvbXBvbmVudFN0YWNrID0gc3RhY2sgIT09IG51bGwgPyBzdGFjayA6ICcnOyAvLyBCcm93c2VycyBzdXBwb3J0IHNpbGVuY2luZyB1bmNhdWdodCBlcnJvcnMgYnkgY2FsbGluZ1xuICAgICAgLy8gYHByZXZlbnREZWZhdWx0KClgIGluIHdpbmRvdyBgZXJyb3JgIGhhbmRsZXIuXG4gICAgICAvLyBXZSByZWNvcmQgdGhpcyBpbmZvcm1hdGlvbiBhcyBhbiBleHBhbmRvIG9uIHRoZSBlcnJvci5cblxuICAgICAgaWYgKGVycm9yICE9IG51bGwgJiYgZXJyb3IuX3N1cHByZXNzTG9nZ2luZykge1xuICAgICAgICBpZiAoYm91bmRhcnkudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgIC8vIFRoZSBlcnJvciBpcyByZWNvdmVyYWJsZSBhbmQgd2FzIHNpbGVuY2VkLlxuICAgICAgICAgIC8vIElnbm9yZSBpdCBhbmQgZG9uJ3QgcHJpbnQgdGhlIHN0YWNrIGFkZGVuZHVtLlxuICAgICAgICAgIC8vIFRoaXMgaXMgaGFuZHkgZm9yIHRlc3RpbmcgZXJyb3IgYm91bmRhcmllcyB3aXRob3V0IG5vaXNlLlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBUaGUgZXJyb3IgaXMgZmF0YWwuIFNpbmNlIHRoZSBzaWxlbmNpbmcgbWlnaHQgaGF2ZVxuICAgICAgICAvLyBiZWVuIGFjY2lkZW50YWwsIHdlJ2xsIHN1cmZhY2UgaXQgYW55d2F5LlxuICAgICAgICAvLyBIb3dldmVyLCB0aGUgYnJvd3NlciB3b3VsZCBoYXZlIHNpbGVuY2VkIHRoZSBvcmlnaW5hbCBlcnJvclxuICAgICAgICAvLyBzbyB3ZSdsbCBwcmludCBpdCBmaXJzdCwgYW5kIHRoZW4gcHJpbnQgdGhlIHN0YWNrIGFkZGVuZHVtLlxuXG5cbiAgICAgICAgY29uc29sZVsnZXJyb3InXShlcnJvcik7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgICAgICAvLyBGb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoaXMgYmxvY2ssIHNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTMzODRcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBzb3VyY2UgPyBnZXRDb21wb25lbnROYW1lKHNvdXJjZS50eXBlKSA6IG51bGw7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZU1lc3NhZ2UgPSBjb21wb25lbnROYW1lID8gXCJUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gdGhlIDxcIiArIGNvbXBvbmVudE5hbWUgKyBcIj4gY29tcG9uZW50OlwiIDogJ1RoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiBvbmUgb2YgeW91ciBSZWFjdCBjb21wb25lbnRzOic7XG4gICAgICB2YXIgZXJyb3JCb3VuZGFyeU1lc3NhZ2U7XG4gICAgICB2YXIgZXJyb3JCb3VuZGFyeU5hbWUgPSBnZXRDb21wb25lbnROYW1lKGJvdW5kYXJ5LnR5cGUpO1xuXG4gICAgICBpZiAoZXJyb3JCb3VuZGFyeU5hbWUpIHtcbiAgICAgICAgZXJyb3JCb3VuZGFyeU1lc3NhZ2UgPSBcIlJlYWN0IHdpbGwgdHJ5IHRvIHJlY3JlYXRlIHRoaXMgY29tcG9uZW50IHRyZWUgZnJvbSBzY3JhdGNoIFwiICsgKFwidXNpbmcgdGhlIGVycm9yIGJvdW5kYXJ5IHlvdSBwcm92aWRlZCwgXCIgKyBlcnJvckJvdW5kYXJ5TmFtZSArIFwiLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yQm91bmRhcnlNZXNzYWdlID0gJ0NvbnNpZGVyIGFkZGluZyBhbiBlcnJvciBib3VuZGFyeSB0byB5b3VyIHRyZWUgdG8gY3VzdG9taXplIGVycm9yIGhhbmRsaW5nIGJlaGF2aW9yLlxcbicgKyAnVmlzaXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Vycm9yLWJvdW5kYXJpZXMgdG8gbGVhcm4gbW9yZSBhYm91dCBlcnJvciBib3VuZGFyaWVzLic7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21iaW5lZE1lc3NhZ2UgPSBjb21wb25lbnROYW1lTWVzc2FnZSArIFwiXFxuXCIgKyBjb21wb25lbnRTdGFjayArIFwiXFxuXFxuXCIgKyAoXCJcIiArIGVycm9yQm91bmRhcnlNZXNzYWdlKTsgLy8gSW4gZGV2ZWxvcG1lbnQsIHdlIHByb3ZpZGUgb3VyIG93biBtZXNzYWdlIHdpdGgganVzdCB0aGUgY29tcG9uZW50IHN0YWNrLlxuICAgICAgLy8gV2UgZG9uJ3QgaW5jbHVkZSB0aGUgb3JpZ2luYWwgZXJyb3IgbWVzc2FnZSBhbmQgSlMgc3RhY2sgYmVjYXVzZSB0aGUgYnJvd3NlclxuICAgICAgLy8gaGFzIGFscmVhZHkgcHJpbnRlZCBpdC4gRXZlbiBpZiB0aGUgYXBwbGljYXRpb24gc3dhbGxvd3MgdGhlIGVycm9yLCBpdCBpcyBzdGlsbFxuICAgICAgLy8gZGlzcGxheWVkIGJ5IHRoZSBicm93c2VyIHRoYW5rcyB0byB0aGUgREVWLW9ubHkgZmFrZSBldmVudCB0cmljayBpbiBSZWFjdEVycm9yVXRpbHMuXG5cbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oY29tYmluZWRNZXNzYWdlKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluIHByb2R1Y3Rpb24sIHdlIHByaW50IHRoZSBlcnJvciBkaXJlY3RseS5cbiAgICAgIC8vIFRoaXMgd2lsbCBpbmNsdWRlIHRoZSBtZXNzYWdlLCB0aGUgSlMgc3RhY2ssIGFuZCBhbnl0aGluZyB0aGUgYnJvd3NlciB3YW50cyB0byBzaG93LlxuICAgICAgLy8gV2UgcGFzcyB0aGUgZXJyb3Igb2JqZWN0IGluc3RlYWQgb2YgY3VzdG9tIG1lc3NhZ2Ugc28gdGhhdCB0aGUgYnJvd3NlciBkaXNwbGF5cyB0aGUgZXJyb3IgbmF0aXZlbHkuXG4gICAgICBjb25zb2xlWydlcnJvciddKGVycm9yKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVGhpcyBtZXRob2QgbXVzdCBub3QgdGhyb3csIG9yIFJlYWN0IGludGVybmFsIHN0YXRlIHdpbGwgZ2V0IG1lc3NlZCB1cC5cbiAgICAvLyBJZiBjb25zb2xlLmVycm9yIGlzIG92ZXJyaWRkZW4sIG9yIGxvZ0NhcHR1cmVkRXJyb3IoKSBzaG93cyBhIGRpYWxvZyB0aGF0IHRocm93cyxcbiAgICAvLyB3ZSB3YW50IHRvIHJlcG9ydCB0aGlzIGVycm9yIG91dHNpZGUgb2YgdGhlIG5vcm1hbCBzdGFjayBhcyBhIGxhc3QgcmVzb3J0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTMxODhcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIFBvc3NpYmx5V2Vha01hcCQxID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuXG5mdW5jdGlvbiBjcmVhdGVSb290RXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgbGFuZSkge1xuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBsYW5lKTsgLy8gVW5tb3VudCB0aGUgcm9vdCBieSByZW5kZXJpbmcgbnVsbC5cblxuICB1cGRhdGUudGFnID0gQ2FwdHVyZVVwZGF0ZTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgdXBkYXRlLnBheWxvYWQgPSB7XG4gICAgZWxlbWVudDogbnVsbFxuICB9O1xuICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIG9uVW5jYXVnaHRFcnJvcihlcnJvcik7XG4gICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgbGFuZSk7XG4gIHVwZGF0ZS50YWcgPSBDYXB0dXJlVXBkYXRlO1xuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID0gZmliZXIudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZXJyb3IkMSA9IGVycm9ySW5mby52YWx1ZTtcblxuICAgIHVwZGF0ZS5wYXlsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgICAgIHJldHVybiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IkMSk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBpbnN0ID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gIGlmIChpbnN0ICE9PSBudWxsICYmIHR5cGVvZiBpbnN0LmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICB7XG4gICAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVG8gcHJlc2VydmUgdGhlIHByZWV4aXN0aW5nIHJldHJ5IGJlaGF2aW9yIG9mIGVycm9yIGJvdW5kYXJpZXMsXG4gICAgICAgIC8vIHdlIGtlZXAgdHJhY2sgb2Ygd2hpY2ggb25lcyBhbHJlYWR5IGZhaWxlZCBkdXJpbmcgdGhpcyBiYXRjaC5cbiAgICAgICAgLy8gVGhpcyBnZXRzIHJlc2V0IGJlZm9yZSB3ZSB5aWVsZCBiYWNrIHRvIHRoZSBicm93c2VyLlxuICAgICAgICAvLyBUT0RPOiBXYXJuIGluIHN0cmljdCBtb2RlIGlmIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciBpc1xuICAgICAgICAvLyBub3QgZGVmaW5lZC5cbiAgICAgICAgbWFya0xlZ2FjeUVycm9yQm91bmRhcnlBc0ZhaWxlZCh0aGlzKTsgLy8gT25seSBsb2cgaGVyZSBpZiBjb21wb25lbnREaWRDYXRjaCBpcyB0aGUgb25seSBlcnJvciBib3VuZGFyeSBtZXRob2QgZGVmaW5lZFxuXG4gICAgICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlcnJvciQxID0gZXJyb3JJbmZvLnZhbHVlO1xuICAgICAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICAgICAgdGhpcy5jb21wb25lbnREaWRDYXRjaChlcnJvciQxLCB7XG4gICAgICAgIGNvbXBvbmVudFN0YWNrOiBzdGFjayAhPT0gbnVsbCA/IHN0YWNrIDogJydcbiAgICAgIH0pO1xuXG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gSWYgY29tcG9uZW50RGlkQ2F0Y2ggaXMgdGhlIG9ubHkgZXJyb3IgYm91bmRhcnkgbWV0aG9kIGRlZmluZWQsXG4gICAgICAgICAgLy8gdGhlbiBpdCBuZWVkcyB0byBjYWxsIHNldFN0YXRlIHRvIHJlY292ZXIgZnJvbSBlcnJvcnMuXG4gICAgICAgICAgLy8gSWYgbm8gc3RhdGUgdXBkYXRlIGlzIHNjaGVkdWxlZCB0aGVuIHRoZSBib3VuZGFyeSB3aWxsIHN3YWxsb3cgdGhlIGVycm9yLlxuICAgICAgICAgIGlmICghaW5jbHVkZXNTb21lTGFuZShmaWJlci5sYW5lcywgU3luY0xhbmUpKSB7XG4gICAgICAgICAgICBlcnJvcignJXM6IEVycm9yIGJvdW5kYXJpZXMgc2hvdWxkIGltcGxlbWVudCBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoKS4gJyArICdJbiB0aGF0IG1ldGhvZCwgcmV0dXJuIGEgc3RhdGUgdXBkYXRlIHRvIGRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBvciBmYWxsYmFjayBVSS4nLCBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdVbmtub3duJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGU7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB3YWtlYWJsZSwgbGFuZXMpIHtcbiAgLy8gQXR0YWNoIGEgbGlzdGVuZXIgdG8gdGhlIHByb21pc2UgdG8gXCJwaW5nXCIgdGhlIHJvb3QgYW5kIHJldHJ5LiBCdXQgb25seSBpZlxuICAvLyBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCBmb3IgdGhlIGxhbmVzIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcgKHdoaWNoXG4gIC8vIGFjdHMgbGlrZSBhIFwidGhyZWFkIElEXCIgaGVyZSkuXG4gIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcbiAgdmFyIHRocmVhZElEcztcblxuICBpZiAocGluZ0NhY2hlID09PSBudWxsKSB7XG4gICAgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwJDEoKTtcbiAgICB0aHJlYWRJRHMgPSBuZXcgU2V0KCk7XG4gICAgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJlYWRJRHMgPSBwaW5nQ2FjaGUuZ2V0KHdha2VhYmxlKTtcblxuICAgIGlmICh0aHJlYWRJRHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyZWFkSURzID0gbmV3IFNldCgpO1xuICAgICAgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIXRocmVhZElEcy5oYXMobGFuZXMpKSB7XG4gICAgLy8gTWVtb2l6ZSB1c2luZyB0aGUgdGhyZWFkIElEIHRvIHByZXZlbnQgcmVkdW5kYW50IGxpc3RlbmVycy5cbiAgICB0aHJlYWRJRHMuYWRkKGxhbmVzKTtcbiAgICB2YXIgcGluZyA9IHBpbmdTdXNwZW5kZWRSb290LmJpbmQobnVsbCwgcm9vdCwgd2FrZWFibGUsIGxhbmVzKTtcbiAgICB3YWtlYWJsZS50aGVuKHBpbmcsIHBpbmcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKHJvb3QsIHJldHVybkZpYmVyLCBzb3VyY2VGaWJlciwgdmFsdWUsIHJvb3RSZW5kZXJMYW5lcykge1xuICAvLyBUaGUgc291cmNlIGZpYmVyIGRpZCBub3QgY29tcGxldGUuXG4gIHNvdXJjZUZpYmVyLmZsYWdzIHw9IEluY29tcGxldGU7IC8vIEl0cyBlZmZlY3QgbGlzdCBpcyBubyBsb25nZXIgdmFsaWQuXG5cbiAgc291cmNlRmliZXIuZmlyc3RFZmZlY3QgPSBzb3VyY2VGaWJlci5sYXN0RWZmZWN0ID0gbnVsbDtcblxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRoaXMgaXMgYSB3YWtlYWJsZS5cbiAgICB2YXIgd2FrZWFibGUgPSB2YWx1ZTtcblxuICAgIGlmICgoc291cmNlRmliZXIubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIG1lbW9pemVkU3RhdGUgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHdlIGF0dGVtcHRlZFxuICAgICAgLy8gdG8gcmVuZGVyIGl0LlxuICAgICAgdmFyIGN1cnJlbnRTb3VyY2UgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChjdXJyZW50U291cmNlKSB7XG4gICAgICAgIHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gY3VycmVudFNvdXJjZS51cGRhdGVRdWV1ZTtcbiAgICAgICAgc291cmNlRmliZXIubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnRTb3VyY2UubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgc291cmNlRmliZXIubGFuZXMgPSBjdXJyZW50U291cmNlLmxhbmVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc291cmNlRmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xuICAgICAgICBzb3VyY2VGaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaGFzSW52aXNpYmxlUGFyZW50Qm91bmRhcnkgPSBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQpOyAvLyBTY2hlZHVsZSB0aGUgbmVhcmVzdCBTdXNwZW5zZSB0byByZS1yZW5kZXIgdGhlIHRpbWVkIG91dCB2aWV3LlxuXG4gICAgdmFyIF93b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyO1xuXG4gICAgZG8ge1xuICAgICAgaWYgKF93b3JrSW5Qcm9ncmVzcy50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIHNob3VsZENhcHR1cmVTdXNwZW5zZShfd29ya0luUHJvZ3Jlc3MsIGhhc0ludmlzaWJsZVBhcmVudEJvdW5kYXJ5KSkge1xuICAgICAgICAvLyBGb3VuZCB0aGUgbmVhcmVzdCBib3VuZGFyeS5cbiAgICAgICAgLy8gU3Rhc2ggdGhlIHByb21pc2Ugb24gdGhlIGJvdW5kYXJ5IGZpYmVyLiBJZiB0aGUgYm91bmRhcnkgdGltZXMgb3V0LCB3ZSdsbFxuICAgICAgICAvLyBhdHRhY2ggYW5vdGhlciBsaXN0ZW5lciB0byBmbGlwIHRoZSBib3VuZGFyeSBiYWNrIHRvIGl0cyBub3JtYWwgc3RhdGUuXG4gICAgICAgIHZhciB3YWtlYWJsZXMgPSBfd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHdha2VhYmxlcyA9PT0gbnVsbCkge1xuICAgICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB1cGRhdGVRdWV1ZS5hZGQod2FrZWFibGUpO1xuICAgICAgICAgIF93b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdha2VhYmxlcy5hZGQod2FrZWFibGUpO1xuICAgICAgICB9IC8vIElmIHRoZSBib3VuZGFyeSBpcyBvdXRzaWRlIG9mIGJsb2NraW5nIG1vZGUsIHdlIHNob3VsZCAqbm90KlxuICAgICAgICAvLyBzdXNwZW5kIHRoZSBjb21taXQuIFByZXRlbmQgYXMgaWYgdGhlIHN1c3BlbmRlZCBjb21wb25lbnQgcmVuZGVyZWRcbiAgICAgICAgLy8gbnVsbCBhbmQga2VlcCByZW5kZXJpbmcuIEluIHRoZSBjb21taXQgcGhhc2UsIHdlJ2xsIHNjaGVkdWxlIGFcbiAgICAgICAgLy8gc3Vic2VxdWVudCBzeW5jaHJvbm91cyB1cGRhdGUgdG8gcmUtcmVuZGVyIHRoZSBTdXNwZW5zZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gTm90ZTogSXQgZG9lc24ndCBtYXR0ZXIgd2hldGhlciB0aGUgY29tcG9uZW50IHRoYXQgc3VzcGVuZGVkIHdhc1xuICAgICAgICAvLyBpbnNpZGUgYSBibG9ja2luZyBtb2RlIHRyZWUuIElmIHRoZSBTdXNwZW5zZSBpcyBvdXRzaWRlIG9mIGl0LCB3ZVxuICAgICAgICAvLyBzaG91bGQgKm5vdCogc3VzcGVuZCB0aGUgY29tbWl0LlxuXG5cbiAgICAgICAgaWYgKChfd29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICAgIF93b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgIHNvdXJjZUZpYmVyLmZsYWdzIHw9IEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2U7IC8vIFdlJ3JlIGdvaW5nIHRvIGNvbW1pdCB0aGlzIGZpYmVyIGV2ZW4gdGhvdWdoIGl0IGRpZG4ndCBjb21wbGV0ZS5cbiAgICAgICAgICAvLyBCdXQgd2Ugc2hvdWxkbid0IGNhbGwgYW55IGxpZmVjeWNsZSBtZXRob2RzIG9yIGNhbGxiYWNrcy4gUmVtb3ZlXG4gICAgICAgICAgLy8gYWxsIGxpZmVjeWNsZSBlZmZlY3QgdGFncy5cblxuICAgICAgICAgIHNvdXJjZUZpYmVyLmZsYWdzICY9IH4oTGlmZWN5Y2xlRWZmZWN0TWFzayB8IEluY29tcGxldGUpO1xuXG4gICAgICAgICAgaWYgKHNvdXJjZUZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50U291cmNlRmliZXIgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50U291cmNlRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBtb3VudC4gQ2hhbmdlIHRoZSB0YWcgc28gaXQncyBub3QgbWlzdGFrZW4gZm9yIGFcbiAgICAgICAgICAgICAgLy8gY29tcGxldGVkIGNsYXNzIGNvbXBvbmVudC4gRm9yIGV4YW1wbGUsIHdlIHNob3VsZCBub3QgY2FsbFxuICAgICAgICAgICAgICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCBpZiBpdCBpcyBkZWxldGVkLlxuICAgICAgICAgICAgICBzb3VyY2VGaWJlci50YWcgPSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBXaGVuIHdlIHRyeSByZW5kZXJpbmcgYWdhaW4sIHdlIHNob3VsZCBub3QgcmV1c2UgdGhlIGN1cnJlbnQgZmliZXIsXG4gICAgICAgICAgICAgIC8vIHNpbmNlIGl0J3Mga25vd24gdG8gYmUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBVc2UgYSBmb3JjZSB1cGRhdGUgdG9cbiAgICAgICAgICAgICAgLy8gcHJldmVudCBhIGJhaWwgb3V0LlxuICAgICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBTeW5jTGFuZSk7XG4gICAgICAgICAgICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcbiAgICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZShzb3VyY2VGaWJlciwgdXBkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFRoZSBzb3VyY2UgZmliZXIgZGlkIG5vdCBjb21wbGV0ZS4gTWFyayBpdCB3aXRoIFN5bmMgcHJpb3JpdHkgdG9cbiAgICAgICAgICAvLyBpbmRpY2F0ZSB0aGF0IGl0IHN0aWxsIGhhcyBwZW5kaW5nIHdvcmsuXG5cblxuICAgICAgICAgIHNvdXJjZUZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhzb3VyY2VGaWJlci5sYW5lcywgU3luY0xhbmUpOyAvLyBFeGl0IHdpdGhvdXQgc3VzcGVuZGluZy5cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBDb25maXJtZWQgdGhhdCB0aGUgYm91bmRhcnkgaXMgaW4gYSBjb25jdXJyZW50IG1vZGUgdHJlZS4gQ29udGludWVcbiAgICAgICAgLy8gd2l0aCB0aGUgbm9ybWFsIHN1c3BlbmQgcGF0aC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gQWZ0ZXIgdGhpcyB3ZSdsbCB1c2UgYSBzZXQgb2YgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzXG4gICAgICAgIC8vIHJlbmRlciBwYXNzIHdpbGwgcnVuIHRvIGNvbXBsZXRpb24gb3IgcmVzdGFydCBvciBcInN1c3BlbmRcIiB0aGUgY29tbWl0LlxuICAgICAgICAvLyBUaGUgYWN0dWFsIGxvZ2ljIGZvciB0aGlzIGlzIHNwcmVhZCBvdXQgaW4gZGlmZmVyZW50IHBsYWNlcy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhpcyBmaXJzdCBwcmluY2lwbGUgaXMgdGhhdCBpZiB3ZSdyZSBnb2luZyB0byBzdXNwZW5kIHdoZW4gd2UgY29tcGxldGVcbiAgICAgICAgLy8gYSByb290LCB0aGVuIHdlIHNob3VsZCBhbHNvIHJlc3RhcnQgaWYgd2UgZ2V0IGFuIHVwZGF0ZSBvciBwaW5nIHRoYXRcbiAgICAgICAgLy8gbWlnaHQgdW5zdXNwZW5kIGl0LCBhbmQgdmljZSB2ZXJzYS4gVGhlIG9ubHkgcmVhc29uIHRvIHN1c3BlbmQgaXNcbiAgICAgICAgLy8gYmVjYXVzZSB5b3UgdGhpbmsgeW91IG1pZ2h0IHdhbnQgdG8gcmVzdGFydCBiZWZvcmUgY29tbWl0dGluZy4gSG93ZXZlcixcbiAgICAgICAgLy8gaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHJlc3RhcnQgb25seSB3aGlsZSBpbiB0aGUgcGVyaW9kIHdlJ3JlIHN1c3BlbmRlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gUmVzdGFydGluZyB0b28gYWdncmVzc2l2ZWx5IGlzIGFsc28gbm90IGdvb2QgYmVjYXVzZSBpdCBzdGFydmVzIG91dCBhbnlcbiAgICAgICAgLy8gaW50ZXJtZWRpYXRlIGxvYWRpbmcgc3RhdGUuIFNvIHdlIHVzZSBoZXVyaXN0aWNzIHRvIGRldGVybWluZSB3aGVuLlxuICAgICAgICAvLyBTdXNwZW5zZSBIZXVyaXN0aWNzXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIG5vdGhpbmcgdGhyZXcgYSBQcm9taXNlIG9yIGFsbCB0aGUgc2FtZSBmYWxsYmFja3MgYXJlIGFscmVhZHkgc2hvd2luZyxcbiAgICAgICAgLy8gdGhlbiBkb24ndCBzdXNwZW5kL3Jlc3RhcnQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHRoaXMgaXMgYW4gaW5pdGlhbCByZW5kZXIgb2YgYSBuZXcgdHJlZSBvZiBTdXNwZW5zZSBib3VuZGFyaWVzIGFuZFxuICAgICAgICAvLyB0aG9zZSB0cmlnZ2VyIGEgZmFsbGJhY2ssIHRoZW4gZG9uJ3Qgc3VzcGVuZC9yZXN0YXJ0LiBXZSB3YW50IHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IHdlIGNhbiBzaG93IHRoZSBpbml0aWFsIGxvYWRpbmcgc3RhdGUgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgd2UgaGl0IGEgXCJEZWxheWVkXCIgY2FzZSwgc3VjaCBhcyB3aGVuIHdlJ2Qgc3dpdGNoIGZyb20gY29udGVudCBiYWNrIGludG9cbiAgICAgICAgLy8gYSBmYWxsYmFjaywgdGhlbiB3ZSBzaG91bGQgYWx3YXlzIHN1c3BlbmQvcmVzdGFydC4gVHJhbnNpdGlvbnMgYXBwbHlcbiAgICAgICAgLy8gdG8gdGhpcyBjYXNlLiBJZiBub25lIGlzIGRlZmluZWQsIEpORCBpcyB1c2VkIGluc3RlYWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIGFuZCBpdCBnZXRzIFwicmV0cmllZFwiLCBhbGxvd2luZyB1cyB0byBzaG93XG4gICAgICAgIC8vIGFub3RoZXIgbGV2ZWwsIGJ1dCB0aGVyZSdzIHN0aWxsIGFuIGlubmVyIGJvdW5kYXJ5IHRoYXQgd291bGQgc2hvdyBhIGZhbGxiYWNrLFxuICAgICAgICAvLyB0aGVuIHdlIHN1c3BlbmQvcmVzdGFydCBmb3IgNTAwbXMgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBzaG93ZWQgYSBmYWxsYmFja1xuICAgICAgICAvLyBhbnl3aGVyZSBpbiB0aGUgdHJlZS4gVGhpcyBlZmZlY3RpdmVseSB0aHJvdHRsZXMgcHJvZ3Jlc3NpdmUgbG9hZGluZyBpbnRvIGFcbiAgICAgICAgLy8gY29uc2lzdGVudCB0cmFpbiBvZiBjb21taXRzLiBUaGlzIGFsc28gZ2l2ZXMgdXMgYW4gb3Bwb3J0dW5pdHkgdG8gcmVzdGFydCB0b1xuICAgICAgICAvLyBnZXQgdG8gdGhlIGNvbXBsZXRlZCBzdGF0ZSBzbGlnaHRseSBlYXJsaWVyLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB0aGVyZSdzIGFtYmlndWl0eSBkdWUgdG8gYmF0Y2hpbmcgaXQncyByZXNvbHZlZCBpbiBwcmVmZXJlbmNlIG9mOlxuICAgICAgICAvLyAxKSBcImRlbGF5ZWRcIiwgMikgXCJpbml0aWFsIHJlbmRlclwiLCAzKSBcInJldHJ5XCIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgYSBcImJ1c3lcIiBzdGF0ZSBkb2Vzbid0IGdldCBmb3JjZSBjb21taXR0ZWQuIFdlIHdhbnQgdG9cbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgbmV3IGluaXRpYWwgbG9hZGluZyBzdGF0ZXMgY2FuIGNvbW1pdCBhcyBzb29uIGFzIHBvc3NpYmxlLlxuXG5cbiAgICAgICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHdha2VhYmxlLCByb290UmVuZGVyTGFuZXMpO1xuICAgICAgICBfd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcbiAgICAgICAgX3dvcmtJblByb2dyZXNzLmxhbmVzID0gcm9vdFJlbmRlckxhbmVzO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIFRoaXMgYm91bmRhcnkgYWxyZWFkeSBjYXB0dXJlZCBkdXJpbmcgdGhpcyByZW5kZXIuIENvbnRpbnVlIHRvIHRoZSBuZXh0XG4gICAgICAvLyBib3VuZGFyeS5cblxuXG4gICAgICBfd29ya0luUHJvZ3Jlc3MgPSBfd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgIH0gd2hpbGUgKF93b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCk7IC8vIE5vIGJvdW5kYXJ5IHdhcyBmb3VuZC4gRmFsbHRocm91Z2ggdG8gZXJyb3IgbW9kZS5cbiAgICAvLyBUT0RPOiBVc2UgaW52YXJpYW50IHNvIHRoZSBtZXNzYWdlIGlzIHN0cmlwcGVkIGluIHByb2Q/XG5cblxuICAgIHZhbHVlID0gbmV3IEVycm9yKChnZXRDb21wb25lbnROYW1lKHNvdXJjZUZpYmVyLnR5cGUpIHx8ICdBIFJlYWN0IGNvbXBvbmVudCcpICsgJyBzdXNwZW5kZWQgd2hpbGUgcmVuZGVyaW5nLCBidXQgbm8gZmFsbGJhY2sgVUkgd2FzIHNwZWNpZmllZC5cXG4nICsgJ1xcbicgKyAnQWRkIGEgPFN1c3BlbnNlIGZhbGxiYWNrPS4uLj4gY29tcG9uZW50IGhpZ2hlciBpbiB0aGUgdHJlZSB0byAnICsgJ3Byb3ZpZGUgYSBsb2FkaW5nIGluZGljYXRvciBvciBwbGFjZWhvbGRlciB0byBkaXNwbGF5LicpO1xuICB9IC8vIFdlIGRpZG4ndCBmaW5kIGEgYm91bmRhcnkgdGhhdCBjb3VsZCBoYW5kbGUgdGhpcyB0eXBlIG9mIGV4Y2VwdGlvbi4gU3RhcnRcbiAgLy8gb3ZlciBhbmQgdHJhdmVyc2UgcGFyZW50IHBhdGggYWdhaW4sIHRoaXMgdGltZSB0cmVhdGluZyB0aGUgZXhjZXB0aW9uXG4gIC8vIGFzIGFuIGVycm9yLlxuXG5cbiAgcmVuZGVyRGlkRXJyb3IoKTtcbiAgdmFsdWUgPSBjcmVhdGVDYXB0dXJlZFZhbHVlKHZhbHVlLCBzb3VyY2VGaWJlcik7XG4gIHZhciB3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyO1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfZXJyb3JJbmZvID0gdmFsdWU7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcbiAgICAgICAgICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzLCBsYW5lKTtcblxuICAgICAgICAgIHZhciBfdXBkYXRlID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfZXJyb3JJbmZvLCBsYW5lKTtcblxuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX3VwZGF0ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIC8vIENhcHR1cmUgYW5kIHJldHJ5XG4gICAgICAgIHZhciBlcnJvckluZm8gPSB2YWx1ZTtcbiAgICAgICAgdmFyIGN0b3IgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzICYmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicgfHwgaW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuXG4gICAgICAgICAgdmFyIF9sYW5lID0gcGlja0FyYml0cmFyeUxhbmUocm9vdFJlbmRlckxhbmVzKTtcblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgX2xhbmUpOyAvLyBTY2hlZHVsZSB0aGUgZXJyb3IgYm91bmRhcnkgdG8gcmUtcmVuZGVyIHVzaW5nIHVwZGF0ZWQgc3RhdGVcblxuICAgICAgICAgIHZhciBfdXBkYXRlMiA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGVycm9ySW5mbywgX2xhbmUpO1xuXG4gICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfdXBkYXRlMik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gIH0gd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKTtcbn1cblxudmFyIGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlID0gbnVsbDtcblxue1xuICBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG5ldyBTZXQoKTtcbn1cblxudmFyIFBvc3NpYmx5V2Vha1NldCA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nID8gV2Vha1NldCA6IFNldDtcblxudmFyIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFdpdGhUaW1lciA9IGZ1bmN0aW9uIChjdXJyZW50LCBpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5wcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbn07IC8vIENhcHR1cmUgZXJyb3JzIHNvIHRoZXkgZG9uJ3QgaW50ZXJydXB0IHVubW91bnRpbmcuXG5cblxuZnVuY3Rpb24gc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KGN1cnJlbnQsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50V2l0aFRpbWVyLCBudWxsLCBjdXJyZW50LCBpbnN0YW5jZSk7XG5cbiAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgdmFyIHVubW91bnRFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIHVubW91bnRFcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNhZmVseURldGFjaFJlZihjdXJyZW50KSB7XG4gIHZhciByZWYgPSBjdXJyZW50LnJlZjtcblxuICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIHJlZiwgbnVsbCwgbnVsbCk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICB2YXIgcmVmRXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgcmVmRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5Q2FsbERlc3Ryb3koY3VycmVudCwgZGVzdHJveSkge1xuICB7XG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGRlc3Ryb3ksIG51bGwpO1xuXG4gICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25MaWZlQ3ljbGVzKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFNuYXBzaG90KSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTsgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHNuYXBzaG90ID0gaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZSA/IHByZXZQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoZmluaXNoZWRXb3JrLnR5cGUsIHByZXZQcm9wcyksIHByZXZTdGF0ZSk7XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGRpZFdhcm5TZXQgPSBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtcblxuICAgICAgICAgICAgICBpZiAoc25hcHNob3QgPT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblNldC5oYXMoZmluaXNoZWRXb3JrLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgZGlkV2FyblNldC5hZGQoZmluaXNoZWRXb3JrLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgZXJyb3IoJyVzLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCk6IEEgc25hcHNob3QgdmFsdWUgKG9yIG51bGwpICcgKyAnbXVzdCBiZSByZXR1cm5lZC4gWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IHNuYXBzaG90O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgU25hcHNob3QpIHtcbiAgICAgICAgICAgIHZhciByb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIGNsZWFyQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAgLy8gTm90aGluZyB0byBkbyBmb3IgdGhlc2UgY29tcG9uZW50IHR5cGVzXG4gICAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KHRhZywgZmluaXNoZWRXb3JrKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZSAhPT0gbnVsbCA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuXG4gIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIGlmICgoZWZmZWN0LnRhZyAmIHRhZykgPT09IHRhZykge1xuICAgICAgICAvLyBVbm1vdW50XG4gICAgICAgIHZhciBkZXN0cm95ID0gZWZmZWN0LmRlc3Ryb3k7XG4gICAgICAgIGVmZmVjdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RNb3VudCh0YWcsIGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoKGVmZmVjdC50YWcgJiB0YWcpID09PSB0YWcpIHtcbiAgICAgICAgLy8gTW91bnRcbiAgICAgICAgdmFyIGNyZWF0ZSA9IGVmZmVjdC5jcmVhdGU7XG4gICAgICAgIGVmZmVjdC5kZXN0cm95ID0gY3JlYXRlKCk7XG5cbiAgICAgICAge1xuICAgICAgICAgIHZhciBkZXN0cm95ID0gZWZmZWN0LmRlc3Ryb3k7XG5cbiAgICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBkZXN0cm95ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgYWRkZW5kdW0gPSB2b2lkIDA7XG5cbiAgICAgICAgICAgIGlmIChkZXN0cm95ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gJyBZb3UgcmV0dXJuZWQgbnVsbC4gSWYgeW91ciBlZmZlY3QgZG9lcyBub3QgcmVxdWlyZSBjbGVhbiAnICsgJ3VwLCByZXR1cm4gdW5kZWZpbmVkIChvciBub3RoaW5nKS4nO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGVzdHJveS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gJ1xcblxcbkl0IGxvb2tzIGxpa2UgeW91IHdyb3RlIHVzZUVmZmVjdChhc3luYyAoKSA9PiAuLi4pIG9yIHJldHVybmVkIGEgUHJvbWlzZS4gJyArICdJbnN0ZWFkLCB3cml0ZSB0aGUgYXN5bmMgZnVuY3Rpb24gaW5zaWRlIHlvdXIgZWZmZWN0ICcgKyAnYW5kIGNhbGwgaXQgaW1tZWRpYXRlbHk6XFxuXFxuJyArICd1c2VFZmZlY3QoKCkgPT4ge1xcbicgKyAnICBhc3luYyBmdW5jdGlvbiBmZXRjaERhdGEoKSB7XFxuJyArICcgICAgLy8gWW91IGNhbiBhd2FpdCBoZXJlXFxuJyArICcgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBNeUFQSS5nZXREYXRhKHNvbWVJZCk7XFxuJyArICcgICAgLy8gLi4uXFxuJyArICcgIH1cXG4nICsgJyAgZmV0Y2hEYXRhKCk7XFxuJyArIFwifSwgW3NvbWVJZF0pOyAvLyBPciBbXSBpZiBlZmZlY3QgZG9lc24ndCBuZWVkIHByb3BzIG9yIHN0YXRlXFxuXFxuXCIgKyAnTGVhcm4gbW9yZSBhYm91dCBkYXRhIGZldGNoaW5nIHdpdGggSG9va3M6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ob29rcy1kYXRhLWZldGNoaW5nJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gJyBZb3UgcmV0dXJuZWQ6ICcgKyBkZXN0cm95O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvcignQW4gZWZmZWN0IGZ1bmN0aW9uIG11c3Qgbm90IHJldHVybiBhbnl0aGluZyBiZXNpZGVzIGEgZnVuY3Rpb24sICcgKyAnd2hpY2ggaXMgdXNlZCBmb3IgY2xlYW4tdXAuJXMnLCBhZGRlbmR1bSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlUGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZSAhPT0gbnVsbCA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuXG4gIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHZhciBfZWZmZWN0ID0gZWZmZWN0LFxuICAgICAgICAgIG5leHQgPSBfZWZmZWN0Lm5leHQsXG4gICAgICAgICAgdGFnID0gX2VmZmVjdC50YWc7XG5cbiAgICAgIGlmICgodGFnICYgUGFzc2l2ZSQxKSAhPT0gTm9GbGFncyQxICYmICh0YWcgJiBIYXNFZmZlY3QpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdFVubW91bnQoZmluaXNoZWRXb3JrLCBlZmZlY3QpO1xuICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0TW91bnQoZmluaXNoZWRXb3JrLCBlZmZlY3QpO1xuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBuZXh0O1xuICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdExpZmVDeWNsZXMoZmluaXNoZWRSb290LCBjdXJyZW50LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzKSB7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGxheW91dCBlZmZlY3RzIGhhdmUgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCAoZHVyaW5nIG11dGF0aW9uIHBoYXNlKS5cbiAgICAgICAgLy8gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc2libGluZyBjb21wb25lbnQgZWZmZWN0cyBmcm9tIGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlcixcbiAgICAgICAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBzaG91bGQgbmV2ZXIgb3ZlcnJpZGUgYSByZWYgc2V0XG4gICAgICAgIC8vIGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50IGR1cmluZyB0aGUgc2FtZSBjb21taXQuXG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KExheW91dCB8IEhhc0VmZmVjdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjaGVkdWxlUGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdjb21wb25lbnREaWRNb3VudC4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdjb21wb25lbnREaWRNb3VudC4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwcmV2UHJvcHMgPSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgPT09IGZpbmlzaGVkV29yay50eXBlID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhmaW5pc2hlZFdvcmsudHlwZSwgY3VycmVudC5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdjb21wb25lbnREaWRVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVE9ETzogSSB0aGluayB0aGlzIGlzIG5vdyBhbHdheXMgbm9uLW51bGwgYnkgdGhlIHRpbWUgaXQgcmVhY2hlcyB0aGVcbiAgICAgICAgLy8gY29tbWl0IHBoYXNlLiBDb25zaWRlciByZW1vdmluZyB0aGUgdHlwZSBjaGVjay5cblxuXG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ3Byb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuXG4gICAgICAgICAgY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCB1cGRhdGVRdWV1ZSwgaW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogSSB0aGluayB0aGlzIGlzIG5vdyBhbHdheXMgbm9uLW51bGwgYnkgdGhlIHRpbWUgaXQgcmVhY2hlcyB0aGVcbiAgICAgICAgLy8gY29tbWl0IHBoYXNlLiBDb25zaWRlciByZW1vdmluZyB0aGUgdHlwZSBjaGVjay5cbiAgICAgICAgdmFyIF91cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAoX3VwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9pbnN0YW5jZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay5jaGlsZC50YWcpIHtcbiAgICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZSA9IGdldFB1YmxpY0luc3RhbmNlKGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAgICAgICAgX2luc3RhbmNlID0gZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb21taXRVcGRhdGVRdWV1ZShmaW5pc2hlZFdvcmssIF91cGRhdGVRdWV1ZSwgX2luc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTIgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlOyAvLyBSZW5kZXJlcnMgbWF5IHNjaGVkdWxlIHdvcmsgdG8gYmUgZG9uZSBhZnRlciBob3N0IGNvbXBvbmVudHMgYXJlIG1vdW50ZWRcbiAgICAgICAgLy8gKGVnIERPTSByZW5kZXJlciBtYXkgc2NoZWR1bGUgYXV0by1mb2N1cyBmb3IgaW5wdXRzIGFuZCBmb3JtIGNvbnRyb2xzKS5cbiAgICAgICAgLy8gVGhlc2UgZWZmZWN0cyBzaG91bGQgb25seSBiZSBjb21taXR0ZWQgd2hlbiBjb21wb25lbnRzIGFyZSBmaXJzdCBtb3VudGVkLFxuICAgICAgICAvLyBha2Egd2hlbiB0aGVyZSBpcyBubyBjdXJyZW50L2FsdGVybmF0ZS5cblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCAmJiBmaW5pc2hlZFdvcmsuZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlO1xuICAgICAgICAgIHZhciBwcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIGNvbW1pdE1vdW50KF9pbnN0YW5jZTIsIHR5cGUsIHByb3BzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGhhdmUgbm8gbGlmZS1jeWNsZXMgYXNzb2NpYXRlZCB3aXRoIHRleHQuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBubyBsaWZlLWN5Y2xlcyBhc3NvY2lhdGVkIHdpdGggcG9ydGFscy5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfZmluaXNoZWRXb3JrJG1lbW9pemUyID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgICAgIG9uQ29tbWl0ID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5vbkNvbW1pdCxcbiAgICAgICAgICAgICAgb25SZW5kZXIgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLm9uUmVuZGVyO1xuICAgICAgICAgIHZhciBlZmZlY3REdXJhdGlvbiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb247XG4gICAgICAgICAgdmFyIGNvbW1pdFRpbWUgPSBnZXRDb21taXRUaW1lKCk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9uUmVuZGVyKGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLmlkLCBjdXJyZW50ID09PSBudWxsID8gJ21vdW50JyA6ICd1cGRhdGUnLCBmaW5pc2hlZFdvcmsuYWN0dWFsRHVyYXRpb24sIGZpbmlzaGVkV29yay50cmVlQmFzZUR1cmF0aW9uLCBmaW5pc2hlZFdvcmsuYWN0dWFsU3RhcnRUaW1lLCBjb21taXRUaW1lLCBmaW5pc2hlZFJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKGZpbmlzaGVkV29yaywgaXNIaWRkZW4pIHtcbiAge1xuICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGluc2VydGVkIGJ1dCB3ZSBuZWVkIHRvIHJlY3Vyc2UgZG93biBpdHNcbiAgICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gICAgdmFyIG5vZGUgPSBmaW5pc2hlZFdvcms7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgIGhpZGVJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5oaWRlSW5zdGFuY2Uobm9kZS5zdGF0ZU5vZGUsIG5vZGUubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgIHZhciBfaW5zdGFuY2UzID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgaGlkZVRleHRJbnN0YW5jZShfaW5zdGFuY2UzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bmhpZGVUZXh0SW5zdGFuY2UoX2luc3RhbmNlMywgbm9kZS5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgobm9kZS50YWcgPT09IE9mZnNjcmVlbkNvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gTGVnYWN5SGlkZGVuQ29tcG9uZW50KSAmJiBub2RlLm1lbW9pemVkU3RhdGUgIT09IG51bGwgJiYgbm9kZSAhPT0gZmluaXNoZWRXb3JrKSA7IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmaW5pc2hlZFdvcmspIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRBdHRhY2hSZWYoZmluaXNoZWRXb3JrKSB7XG4gIHZhciByZWYgPSBmaW5pc2hlZFdvcmsucmVmO1xuXG4gIGlmIChyZWYgIT09IG51bGwpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgIHZhciBpbnN0YW5jZVRvVXNlO1xuXG4gICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIGluc3RhbmNlVG9Vc2UgPSBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpbnN0YW5jZVRvVXNlID0gaW5zdGFuY2U7XG4gICAgfSAvLyBNb3ZlZCBvdXRzaWRlIHRvIGVuc3VyZSBEQ0Ugd29ya3Mgd2l0aCB0aGlzIGZsYWdcblxuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZWYoaW5zdGFuY2VUb1VzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFyZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICAgIGVycm9yKCdVbmV4cGVjdGVkIHJlZiBvYmplY3QgcHJvdmlkZWQgZm9yICVzLiAnICsgJ1VzZSBlaXRoZXIgYSByZWYtc2V0dGVyIGZ1bmN0aW9uIG9yIFJlYWN0LmNyZWF0ZVJlZigpLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZWYuY3VycmVudCA9IGluc3RhbmNlVG9Vc2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdERldGFjaFJlZihjdXJyZW50KSB7XG4gIHZhciBjdXJyZW50UmVmID0gY3VycmVudC5yZWY7XG5cbiAgaWYgKGN1cnJlbnRSZWYgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGN1cnJlbnRSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1cnJlbnRSZWYobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59IC8vIFVzZXItb3JpZ2luYXRpbmcgZXJyb3JzIChsaWZlY3ljbGVzIGFuZCByZWZzKSBzaG91bGQgbm90IGludGVycnVwdFxuLy8gZGVsZXRpb24sIHNvIGRvbid0IGxldCB0aGVtIHRocm93LiBIb3N0LW9yaWdpbmF0aW5nIGVycm9ycyBzaG91bGRcbi8vIGludGVycnVwdCBkZWxldGlvbiwgc28gaXQncyBva2F5XG5cblxuZnVuY3Rpb24gY29tbWl0VW5tb3VudChmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgb25Db21taXRVbm1vdW50KGN1cnJlbnQpO1xuXG4gIHN3aXRjaCAoY3VycmVudC50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0O1xuXG4gICAgICAgICAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgICAgICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICB2YXIgX2VmZmVjdDIgPSBlZmZlY3QsXG4gICAgICAgICAgICAgICAgICBkZXN0cm95ID0gX2VmZmVjdDIuZGVzdHJveSxcbiAgICAgICAgICAgICAgICAgIHRhZyA9IF9lZmZlY3QyLnRhZztcblxuICAgICAgICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCh0YWcgJiBQYXNzaXZlJDEpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgICAgICAgIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RVbm1vdW50KGN1cnJlbnQsIGVmZmVjdCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc2FmZWx5Q2FsbERlc3Ryb3koY3VycmVudCwgZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgICAgICAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCk7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGN1cnJlbnQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoY3VycmVudCwgaW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogdGhpcyBpcyByZWN1cnNpdmUuXG4gICAgICAgIC8vIFdlIGFyZSBhbHNvIG5vdCB1c2luZyB0aGlzIHBhcmVudCBiZWNhdXNlXG4gICAgICAgIC8vIHRoZSBwb3J0YWwgd2lsbCBnZXQgcHVzaGVkIGltbWVkaWF0ZWx5LlxuICAgICAgICB7XG4gICAgICAgICAgdW5tb3VudEhvc3RDb21wb25lbnRzKGZpbmlzaGVkUm9vdCwgY3VycmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgRGVoeWRyYXRlZEZyYWdtZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdE5lc3RlZFVubW91bnRzKGZpbmlzaGVkUm9vdCwgcm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICAvLyBXaGlsZSB3ZSdyZSBpbnNpZGUgYSByZW1vdmVkIGhvc3Qgbm9kZSB3ZSBkb24ndCB3YW50IHRvIGNhbGxcbiAgLy8gcmVtb3ZlQ2hpbGQgb24gdGhlIGlubmVyIG5vZGVzIGJlY2F1c2UgdGhleSdyZSByZW1vdmVkIGJ5IHRoZSB0b3BcbiAgLy8gY2FsbCBhbnl3YXkuIFdlIGFsc28gd2FudCB0byBjYWxsIGNvbXBvbmVudFdpbGxVbm1vdW50IG9uIGFsbFxuICAvLyBjb21wb3NpdGVzIGJlZm9yZSB0aGlzIGhvc3Qgbm9kZSBpcyByZW1vdmVkIGZyb20gdGhlIHRyZWUuIFRoZXJlZm9yZVxuICAvLyB3ZSBkbyBhbiBpbm5lciBsb29wIHdoaWxlIHdlJ3JlIHN0aWxsIGluc2lkZSB0aGUgaG9zdCBub2RlLlxuICB2YXIgbm9kZSA9IHJvb3Q7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb21taXRVbm1vdW50KGZpbmlzaGVkUm9vdCwgbm9kZSk7IC8vIFZpc2l0IGNoaWxkcmVuIGJlY2F1c2UgdGhleSBtYXkgY29udGFpbiBtb3JlIGNvbXBvc2l0ZSBvciBob3N0IG5vZGVzLlxuICAgIC8vIFNraXAgcG9ydGFscyBiZWNhdXNlIGNvbW1pdFVubW91bnQoKSBjdXJyZW50bHkgdmlzaXRzIHRoZW0gcmVjdXJzaXZlbHkuXG5cbiAgICBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCAmJiAoIC8vIElmIHdlIHVzZSBtdXRhdGlvbiB3ZSBkcmlsbCBkb3duIGludG8gcG9ydGFscyB1c2luZyBjb21taXRVbm1vdW50IGFib3ZlLlxuICAgIC8vIElmIHdlIGRvbid0IHVzZSBtdXRhdGlvbiB3ZSBkcmlsbCBkb3duIGludG8gcG9ydGFscyBoZXJlIGluc3RlYWQuXG4gICAgIG5vZGUudGFnICE9PSBIb3N0UG9ydGFsKSkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gcm9vdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gcm9vdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRhY2hGaWJlck11dGF0aW9uKGZpYmVyKSB7XG4gIC8vIEN1dCBvZmYgdGhlIHJldHVybiBwb2ludGVycyB0byBkaXNjb25uZWN0IGl0IGZyb20gdGhlIHRyZWUuIElkZWFsbHksIHdlXG4gIC8vIHNob3VsZCBjbGVhciB0aGUgY2hpbGQgcG9pbnRlciBvZiB0aGUgcGFyZW50IGFsdGVybmF0ZSB0byBsZXQgdGhpc1xuICAvLyBnZXQgR0M6ZWQgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggZm9yIHN1cmUgd2hpY2ggcGFyZW50IGlzIHRoZSBjdXJyZW50XG4gIC8vIG9uZSBzbyB3ZSdsbCBzZXR0bGUgZm9yIEdDOmluZyB0aGUgc3VidHJlZSBvZiB0aGlzIGNoaWxkLiBUaGlzIGNoaWxkXG4gIC8vIGl0c2VsZiB3aWxsIGJlIEdDOmVkIHdoZW4gdGhlIHBhcmVudCB1cGRhdGVzIHRoZSBuZXh0IHRpbWUuXG4gIC8vIE5vdGU6IHdlIGNhbm5vdCBudWxsIG91dCBzaWJsaW5nIGhlcmUsIG90aGVyd2lzZSBpdCBjYW4gY2F1c2UgaXNzdWVzXG4gIC8vIHdpdGggZmluZERPTU5vZGUgYW5kIGhvdyBpdCByZXF1aXJlcyB0aGUgc2libGluZyBmaWVsZCB0byBjYXJyeSBvdXRcbiAgLy8gdHJhdmVyc2FsIGluIGEgbGF0ZXIgZWZmZWN0LiBTZWUgUFIgIzE2ODIwLiBXZSBub3cgY2xlYXIgdGhlIHNpYmxpbmdcbiAgLy8gZmllbGQgYWZ0ZXIgZWZmZWN0cywgc2VlOiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cy5cbiAgLy9cbiAgLy8gRG9uJ3QgZGlzY29ubmVjdCBzdGF0ZU5vZGUgbm93OyBpdCB3aWxsIGJlIGRldGFjaGVkIGluIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzLlxuICAvLyBJdCBtYXkgYmUgcmVxdWlyZWQgaWYgdGhlIGN1cnJlbnQgY29tcG9uZW50IGlzIGFuIGVycm9yIGJvdW5kYXJ5LFxuICAvLyBhbmQgb25lIG9mIGl0cyBkZXNjZW5kYW50cyB0aHJvd3Mgd2hpbGUgdW5tb3VudGluZyBhIHBhc3NpdmUgZWZmZWN0LlxuICBmaWJlci5hbHRlcm5hdGUgPSBudWxsO1xuICBmaWJlci5jaGlsZCA9IG51bGw7XG4gIGZpYmVyLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gIGZpYmVyLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgZmliZXIubGFzdEVmZmVjdCA9IG51bGw7XG4gIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICBmaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgZmliZXIucGVuZGluZ1Byb3BzID0gbnVsbDtcbiAgZmliZXIucmV0dXJuID0gbnVsbDtcbiAgZmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SG9zdFBhcmVudEZpYmVyKGZpYmVyKSB7XG4gIHZhciBwYXJlbnQgPSBmaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgIGlmIChpc0hvc3RQYXJlbnQocGFyZW50KSkge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG5cbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGZpbmQgYSBob3N0IHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0hvc3RQYXJlbnQoZmliZXIpIHtcbiAgcmV0dXJuIGZpYmVyLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBmaWJlci50YWcgPT09IEhvc3RSb290IHx8IGZpYmVyLnRhZyA9PT0gSG9zdFBvcnRhbDtcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdFNpYmxpbmcoZmliZXIpIHtcbiAgLy8gV2UncmUgZ29pbmcgdG8gc2VhcmNoIGZvcndhcmQgaW50byB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIGEgc2libGluZyBob3N0XG4gIC8vIG5vZGUuIFVuZm9ydHVuYXRlbHksIGlmIG11bHRpcGxlIGluc2VydGlvbnMgYXJlIGRvbmUgaW4gYSByb3cgd2UgaGF2ZSB0b1xuICAvLyBzZWFyY2ggcGFzdCB0aGVtLiBUaGlzIGxlYWRzIHRvIGV4cG9uZW50aWFsIHNlYXJjaCBmb3IgdGhlIG5leHQgc2libGluZy5cbiAgLy8gVE9ETzogRmluZCBhIG1vcmUgZWZmaWNpZW50IHdheSB0byBkbyB0aGlzLlxuICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gIHNpYmxpbmdzOiB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLCBsZXQncyB0cnkgdGhlIG5leHQgc2libGluZy5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgaXNIb3N0UGFyZW50KG5vZGUucmV0dXJuKSkge1xuICAgICAgICAvLyBJZiB3ZSBwb3Agb3V0IG9mIHRoZSByb290IG9yIGhpdCB0aGUgcGFyZW50IHRoZSBmaWJlciB3ZSBhcmUgdGhlXG4gICAgICAgIC8vIGxhc3Qgc2libGluZy5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcblxuICAgIHdoaWxlIChub2RlLnRhZyAhPT0gSG9zdENvbXBvbmVudCAmJiBub2RlLnRhZyAhPT0gSG9zdFRleHQgJiYgbm9kZS50YWcgIT09IERlaHlkcmF0ZWRGcmFnbWVudCkge1xuICAgICAgLy8gSWYgaXQgaXMgbm90IGhvc3Qgbm9kZSBhbmQsIHdlIG1pZ2h0IGhhdmUgYSBob3N0IG5vZGUgaW5zaWRlIGl0LlxuICAgICAgLy8gVHJ5IHRvIHNlYXJjaCBkb3duIHVudGlsIHdlIGZpbmQgb25lLlxuICAgICAgaWYgKG5vZGUuZmxhZ3MgJiBQbGFjZW1lbnQpIHtcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAgIGNvbnRpbnVlIHNpYmxpbmdzO1xuICAgICAgfSAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgY2hpbGQsIHRyeSB0aGUgc2libGluZ3MgaW5zdGVhZC5cbiAgICAgIC8vIFdlIGFsc28gc2tpcCBwb3J0YWxzIGJlY2F1c2UgdGhleSBhcmUgbm90IHBhcnQgb2YgdGhpcyBob3N0IHRyZWUuXG5cblxuICAgICAgaWYgKG5vZGUuY2hpbGQgPT09IG51bGwgfHwgbm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgY29udGludWUgc2libGluZ3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgfVxuICAgIH0gLy8gQ2hlY2sgaWYgdGhpcyBob3N0IG5vZGUgaXMgc3RhYmxlIG9yIGFib3V0IHRvIGJlIHBsYWNlZC5cblxuXG4gICAgaWYgKCEobm9kZS5mbGFncyAmIFBsYWNlbWVudCkpIHtcbiAgICAgIC8vIEZvdW5kIGl0IVxuICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQbGFjZW1lbnQoZmluaXNoZWRXb3JrKSB7XG5cblxuICB2YXIgcGFyZW50RmliZXIgPSBnZXRIb3N0UGFyZW50RmliZXIoZmluaXNoZWRXb3JrKTsgLy8gTm90ZTogdGhlc2UgdHdvIHZhcmlhYmxlcyAqbXVzdCogYWx3YXlzIGJlIHVwZGF0ZWQgdG9nZXRoZXIuXG5cbiAgdmFyIHBhcmVudDtcbiAgdmFyIGlzQ29udGFpbmVyO1xuICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuXG4gIHN3aXRjaCAocGFyZW50RmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcGFyZW50ID0gcGFyZW50U3RhdGVOb2RlO1xuICAgICAgaXNDb250YWluZXIgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgaXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgIGlzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZS1uby1mYWxsdGhyb3VnaFxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgaG9zdCBwYXJlbnQgZmliZXIuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cblxuICBpZiAocGFyZW50RmliZXIuZmxhZ3MgJiBDb250ZW50UmVzZXQpIHtcbiAgICAvLyBSZXNldCB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBwYXJlbnQgYmVmb3JlIGRvaW5nIGFueSBpbnNlcnRpb25zXG4gICAgcmVzZXRUZXh0Q29udGVudChwYXJlbnQpOyAvLyBDbGVhciBDb250ZW50UmVzZXQgZnJvbSB0aGUgZWZmZWN0IHRhZ1xuXG4gICAgcGFyZW50RmliZXIuZmxhZ3MgJj0gfkNvbnRlbnRSZXNldDtcbiAgfVxuXG4gIHZhciBiZWZvcmUgPSBnZXRIb3N0U2libGluZyhmaW5pc2hlZFdvcmspOyAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBpbnNlcnRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cblxuICBpZiAoaXNDb250YWluZXIpIHtcbiAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKGZpbmlzaGVkV29yaywgYmVmb3JlLCBwYXJlbnQpO1xuICB9IGVsc2Uge1xuICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShmaW5pc2hlZFdvcmssIGJlZm9yZSwgcGFyZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKG5vZGUsIGJlZm9yZSwgcGFyZW50KSB7XG4gIHZhciB0YWcgPSBub2RlLnRhZztcbiAgdmFyIGlzSG9zdCA9IHRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCB0YWcgPT09IEhvc3RUZXh0O1xuXG4gIGlmIChpc0hvc3QgfHwgZW5hYmxlRnVuZGFtZW50YWxBUEkgKSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IGlzSG9zdCA/IG5vZGUuc3RhdGVOb2RlIDogbm9kZS5zdGF0ZU5vZGUuaW5zdGFuY2U7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICBpbnNlcnRJbkNvbnRhaW5lckJlZm9yZShwYXJlbnQsIHN0YXRlTm9kZSwgYmVmb3JlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcihwYXJlbnQsIHN0YXRlTm9kZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFBvcnRhbCkgOyBlbHNlIHtcbiAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkO1xuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKGNoaWxkLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICB2YXIgc2libGluZyA9IGNoaWxkLnNpYmxpbmc7XG5cbiAgICAgIHdoaWxlIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoc2libGluZywgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgICBzaWJsaW5nID0gc2libGluZy5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUobm9kZSwgYmVmb3JlLCBwYXJlbnQpIHtcbiAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICB2YXIgaXNIb3N0ID0gdGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHRhZyA9PT0gSG9zdFRleHQ7XG5cbiAgaWYgKGlzSG9zdCB8fCBlbmFibGVGdW5kYW1lbnRhbEFQSSApIHtcbiAgICB2YXIgc3RhdGVOb2RlID0gaXNIb3N0ID8gbm9kZS5zdGF0ZU5vZGUgOiBub2RlLnN0YXRlTm9kZS5pbnN0YW5jZTtcblxuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgIGluc2VydEJlZm9yZShwYXJlbnQsIHN0YXRlTm9kZSwgYmVmb3JlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kQ2hpbGQocGFyZW50LCBzdGF0ZU5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RQb3J0YWwpIDsgZWxzZSB7XG4gICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKGNoaWxkLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICB2YXIgc2libGluZyA9IGNoaWxkLnNpYmxpbmc7XG5cbiAgICAgIHdoaWxlIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShzaWJsaW5nLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVubW91bnRIb3N0Q29tcG9uZW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgZGVsZXRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgdmFyIG5vZGUgPSBjdXJyZW50OyAvLyBFYWNoIGl0ZXJhdGlvbiwgY3VycmVudFBhcmVudCBpcyBwb3B1bGF0ZWQgd2l0aCBub2RlJ3MgaG9zdCBwYXJlbnQgaWYgbm90XG4gIC8vIGN1cnJlbnRQYXJlbnRJc1ZhbGlkLlxuXG4gIHZhciBjdXJyZW50UGFyZW50SXNWYWxpZCA9IGZhbHNlOyAvLyBOb3RlOiB0aGVzZSB0d28gdmFyaWFibGVzICptdXN0KiBhbHdheXMgYmUgdXBkYXRlZCB0b2dldGhlci5cblxuICB2YXIgY3VycmVudFBhcmVudDtcbiAgdmFyIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lcjtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmICghY3VycmVudFBhcmVudElzVmFsaWQpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBub2RlLnJldHVybjtcblxuICAgICAgZmluZFBhcmVudDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKCEocGFyZW50ICE9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGZpbmQgYSBob3N0IHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXJlbnRTdGF0ZU5vZGUgPSBwYXJlbnQuc3RhdGVOb2RlO1xuXG4gICAgICAgIHN3aXRjaCAocGFyZW50LnRhZykge1xuICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGU7XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG5cbiAgICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG5cbiAgICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWsgZmluZFBhcmVudDtcblxuICAgICAgICB9XG5cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICAgIH1cblxuICAgICAgY3VycmVudFBhcmVudElzVmFsaWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIGNvbW1pdE5lc3RlZFVubW91bnRzKGZpbmlzaGVkUm9vdCwgbm9kZSk7IC8vIEFmdGVyIGFsbCB0aGUgY2hpbGRyZW4gaGF2ZSB1bm1vdW50ZWQsIGl0IGlzIG5vdyBzYWZlIHRvIHJlbW92ZSB0aGVcbiAgICAgIC8vIG5vZGUgZnJvbSB0aGUgdHJlZS5cblxuICAgICAgaWYgKGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lcikge1xuICAgICAgICByZW1vdmVDaGlsZEZyb21Db250YWluZXIoY3VycmVudFBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlQ2hpbGQoY3VycmVudFBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSAvLyBEb24ndCB2aXNpdCBjaGlsZHJlbiBiZWNhdXNlIHdlIGFscmVhZHkgdmlzaXRlZCB0aGVtLlxuXG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2hlbiB3ZSBnbyBpbnRvIGEgcG9ydGFsLCBpdCBiZWNvbWVzIHRoZSBwYXJlbnQgdG8gcmVtb3ZlIGZyb20uXG4gICAgICAgIC8vIFdlIHdpbGwgcmVhc3NpZ24gaXQgYmFjayB3aGVuIHdlIHBvcCB0aGUgcG9ydGFsIG9uIHRoZSB3YXkgdXAuXG4gICAgICAgIGN1cnJlbnRQYXJlbnQgPSBub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSB0cnVlOyAvLyBWaXNpdCBjaGlsZHJlbiBiZWNhdXNlIHBvcnRhbHMgbWlnaHQgY29udGFpbiBob3N0IGNvbXBvbmVudHMuXG5cbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBub2RlKTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB3ZSBtYXkgZmluZCBtb3JlIGhvc3QgY29tcG9uZW50cyBiZWxvdy5cblxuICAgICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG5cbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAvLyBXaGVuIHdlIGdvIG91dCBvZiB0aGUgcG9ydGFsLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIHBhcmVudC5cbiAgICAgICAgLy8gU2luY2Ugd2UgZG9uJ3Qga2VlcCBhIHN0YWNrIG9mIHRoZW0sIHdlIHdpbGwgc2VhcmNoIGZvciBpdC5cbiAgICAgICAgY3VycmVudFBhcmVudElzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXREZWxldGlvbihmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGRlbGV0ZSBhbGwgaG9zdCBub2RlcyBmcm9tIHRoZSBwYXJlbnQuXG4gICAgLy8gRGV0YWNoIHJlZnMgYW5kIGNhbGwgY29tcG9uZW50V2lsbFVubW91bnQoKSBvbiB0aGUgd2hvbGUgc3VidHJlZS5cbiAgICB1bm1vdW50SG9zdENvbXBvbmVudHMoZmluaXNoZWRSb290LCBjdXJyZW50KTtcbiAgfVxuXG4gIHZhciBhbHRlcm5hdGUgPSBjdXJyZW50LmFsdGVybmF0ZTtcbiAgZGV0YWNoRmliZXJNdXRhdGlvbihjdXJyZW50KTtcblxuICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgZGV0YWNoRmliZXJNdXRhdGlvbihhbHRlcm5hdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFdvcmsoY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG5cbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICAvLyBMYXlvdXQgZWZmZWN0cyBhcmUgZGVzdHJveWVkIGR1cmluZyB0aGUgbXV0YXRpb24gcGhhc2Ugc28gdGhhdCBhbGxcbiAgICAgICAgLy8gZGVzdHJveSBmdW5jdGlvbnMgZm9yIGFsbCBmaWJlcnMgYXJlIGNhbGxlZCBiZWZvcmUgYW55IGNyZWF0ZSBmdW5jdGlvbnMuXG4gICAgICAgIC8vIFRoaXMgcHJldmVudHMgc2libGluZyBjb21wb25lbnQgZWZmZWN0cyBmcm9tIGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlcixcbiAgICAgICAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBzaG91bGQgbmV2ZXIgb3ZlcnJpZGUgYSByZWYgc2V0XG4gICAgICAgIC8vIGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50IGR1cmluZyB0aGUgc2FtZSBjb21taXQuXG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoTGF5b3V0IHwgSGFzRWZmZWN0LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gQ29tbWl0IHRoZSB3b3JrIHByZXBhcmVkIGVhcmxpZXIuXG4gICAgICAgICAgdmFyIG5ld1Byb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7IC8vIEZvciBoeWRyYXRpb24gd2UgcmV1c2UgdGhlIHVwZGF0ZSBwYXRoIGJ1dCB3ZSB0cmVhdCB0aGUgb2xkUHJvcHNcbiAgICAgICAgICAvLyBhcyB0aGUgbmV3UHJvcHMuIFRoZSB1cGRhdGVQYXlsb2FkIHdpbGwgY29udGFpbiB0aGUgcmVhbCBjaGFuZ2UgaW5cbiAgICAgICAgICAvLyB0aGlzIGNhc2UuXG5cbiAgICAgICAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbmV3UHJvcHM7XG4gICAgICAgICAgdmFyIHR5cGUgPSBmaW5pc2hlZFdvcmsudHlwZTsgLy8gVE9ETzogVHlwZSB0aGUgdXBkYXRlUXVldWUgdG8gYmUgc3BlY2lmaWMgdG8gaG9zdCBjb21wb25lbnRzLlxuXG4gICAgICAgICAgdmFyIHVwZGF0ZVBheWxvYWQgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gICAgICAgICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICAgICAgICAgIGlmICh1cGRhdGVQYXlsb2FkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb21taXRVcGRhdGUoaW5zdGFuY2UsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgaWYgKCEoZmluaXNoZWRXb3JrLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHNob3VsZCBoYXZlIGEgdGV4dCBub2RlIGluaXRpYWxpemVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRleHRJbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIHZhciBuZXdUZXh0ID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7IC8vIEZvciBoeWRyYXRpb24gd2UgcmV1c2UgdGhlIHVwZGF0ZSBwYXRoIGJ1dCB3ZSB0cmVhdCB0aGUgb2xkUHJvcHNcbiAgICAgICAgLy8gYXMgdGhlIG5ld1Byb3BzLiBUaGUgdXBkYXRlUGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhlIHJlYWwgY2hhbmdlIGluXG4gICAgICAgIC8vIHRoaXMgY2FzZS5cblxuICAgICAgICB2YXIgb2xkVGV4dCA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBuZXdUZXh0O1xuICAgICAgICBjb21taXRUZXh0VXBkYXRlKHRleHRJbnN0YW5jZSwgb2xkVGV4dCwgbmV3VGV4dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX3Jvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgaWYgKF9yb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAgIC8vIFdlJ3ZlIGp1c3QgaHlkcmF0ZWQuIE5vIG5lZWQgdG8gaHlkcmF0ZSBhZ2Fpbi5cbiAgICAgICAgICAgIF9yb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkQ29udGFpbmVyKF9yb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGNvbW1pdFN1c3BlbnNlQ29tcG9uZW50KGZpbmlzaGVkV29yayk7XG4gICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgICB2YXIgaXNIaWRkZW4gPSBuZXdTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4oZmluaXNoZWRXb3JrLCBpc0hpZGRlbik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRTdXNwZW5zZUNvbXBvbmVudChmaW5pc2hlZFdvcmspIHtcbiAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5ld1N0YXRlICE9PSBudWxsKSB7XG4gICAgbWFya0NvbW1pdFRpbWVPZkZhbGxiYWNrKCk7XG5cbiAgICB7XG4gICAgICAvLyBIaWRlIHRoZSBPZmZzY3JlZW4gY29tcG9uZW50IHRoYXQgY29udGFpbnMgdGhlIHByaW1hcnkgY2hpbGRyZW4uIFRPRE86XG4gICAgICAvLyBJZGVhbGx5LCB0aGlzIGVmZmVjdCB3b3VsZCBoYXZlIGJlZW4gc2NoZWR1bGVkIG9uIHRoZSBPZmZzY3JlZW4gZmliZXJcbiAgICAgIC8vIGl0c2VsZi4gVGhhdCdzIGhvdyB1bmhpZGluZyB3b3JrczogdGhlIE9mZnNjcmVlbiBjb21wb25lbnQgc2NoZWR1bGVzIGFuXG4gICAgICAvLyBlZmZlY3Qgb24gaXRzZWxmLiBIb3dldmVyLCBpbiB0aGlzIGNhc2UsIHRoZSBjb21wb25lbnQgZGlkbid0IGNvbXBsZXRlLFxuICAgICAgLy8gc28gdGhlIGZpYmVyIHdhcyBuZXZlciBhZGRlZCB0byB0aGUgZWZmZWN0IGxpc3QgaW4gdGhlIG5vcm1hbCBwYXRoLiBXZVxuICAgICAgLy8gY291bGQgaGF2ZSBhcHBlbmRlZCBpdCB0byB0aGUgZWZmZWN0IGxpc3QgaW4gdGhlIFN1c3BlbnNlIGNvbXBvbmVudCdzXG4gICAgICAvLyBzZWNvbmQgcGFzcywgYnV0IGRvaW5nIGl0IHRoaXMgd2F5IGlzIGxlc3MgY29tcGxpY2F0ZWQuIFRoaXMgd291bGQgYmVcbiAgICAgIC8vIHNpbXBsZXIgaWYgd2UgZ290IHJpZCBvZiB0aGUgZWZmZWN0IGxpc3QgYW5kIHRyYXZlcnNlZCB0aGUgdHJlZSwgbGlrZVxuICAgICAgLy8gd2UncmUgcGxhbm5pbmcgdG8gZG8uXG4gICAgICB2YXIgcHJpbWFyeUNoaWxkUGFyZW50ID0gZmluaXNoZWRXb3JrLmNoaWxkO1xuICAgICAgaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4ocHJpbWFyeUNoaWxkUGFyZW50LCB0cnVlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0U3VzcGVuc2VIeWRyYXRpb25DYWxsYmFja3MoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspIHtcblxuICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobmV3U3RhdGUgPT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IHByZXZTdGF0ZS5kZWh5ZHJhdGVkO1xuXG4gICAgICAgIGlmIChzdXNwZW5zZUluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgY29tbWl0SHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrKSB7XG4gIC8vIElmIHRoaXMgYm91bmRhcnkganVzdCB0aW1lZCBvdXQsIHRoZW4gaXQgd2lsbCBoYXZlIGEgc2V0IG9mIHdha2VhYmxlcy5cbiAgLy8gRm9yIGVhY2ggd2FrZWFibGUsIGF0dGFjaCBhIGxpc3RlbmVyIHNvIHRoYXQgd2hlbiBpdCByZXNvbHZlcywgUmVhY3RcbiAgLy8gYXR0ZW1wdHMgdG8gcmUtcmVuZGVyIHRoZSBib3VuZGFyeSBpbiB0aGUgcHJpbWFyeSAocHJlLXRpbWVvdXQpIHN0YXRlLlxuICB2YXIgd2FrZWFibGVzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICh3YWtlYWJsZXMgIT09IG51bGwpIHtcbiAgICBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsO1xuICAgIHZhciByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgIGlmIChyZXRyeUNhY2hlID09PSBudWxsKSB7XG4gICAgICByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSA9IG5ldyBQb3NzaWJseVdlYWtTZXQoKTtcbiAgICB9XG5cbiAgICB3YWtlYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAod2FrZWFibGUpIHtcbiAgICAgIC8vIE1lbW9pemUgdXNpbmcgdGhlIGJvdW5kYXJ5IGZpYmVyIHRvIHByZXZlbnQgcmVkdW5kYW50IGxpc3RlbmVycy5cbiAgICAgIHZhciByZXRyeSA9IHJlc29sdmVSZXRyeVdha2VhYmxlLmJpbmQobnVsbCwgZmluaXNoZWRXb3JrLCB3YWtlYWJsZSk7XG5cbiAgICAgIGlmICghcmV0cnlDYWNoZS5oYXMod2FrZWFibGUpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAod2FrZWFibGUuX19yZWFjdERvTm90VHJhY2VJbnRlcmFjdGlvbnMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHJ5ID0gdHJhY2luZy51bnN0YWJsZV93cmFwKHJldHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXRyeUNhY2hlLmFkZCh3YWtlYWJsZSk7XG4gICAgICAgIHdha2VhYmxlLnRoZW4ocmV0cnksIHJldHJ5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSAvLyBUaGlzIGZ1bmN0aW9uIGRldGVjdHMgd2hlbiBhIFN1c3BlbnNlIGJvdW5kYXJ5IGdvZXMgZnJvbSB2aXNpYmxlIHRvIGhpZGRlbi5cbi8vIEl0IHJldHVybnMgZmFsc2UgaWYgdGhlIGJvdW5kYXJ5IGlzIGFscmVhZHkgaGlkZGVuLlxuLy8gVE9ETzogVXNlIGFuIGVmZmVjdCB0YWcuXG5cblxuZnVuY3Rpb24gaXNTdXNwZW5zZUJvdW5kYXJ5QmVpbmdIaWRkZW4oY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKG9sZFN0YXRlID09PSBudWxsIHx8IG9sZFN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgcmV0dXJuIG5ld1N0YXRlICE9PSBudWxsICYmIG5ld1N0YXRlLmRlaHlkcmF0ZWQgPT09IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb21taXRSZXNldFRleHRDb250ZW50KGN1cnJlbnQpIHtcblxuICByZXNldFRleHRDb250ZW50KGN1cnJlbnQuc3RhdGVOb2RlKTtcbn1cblxudmFyIENPTVBPTkVOVF9UWVBFID0gMDtcbnZhciBIQVNfUFNFVURPX0NMQVNTX1RZUEUgPSAxO1xudmFyIFJPTEVfVFlQRSA9IDI7XG52YXIgVEVTVF9OQU1FX1RZUEUgPSAzO1xudmFyIFRFWFRfVFlQRSA9IDQ7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciQxID0gU3ltYm9sLmZvcjtcbiAgQ09NUE9ORU5UX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IuY29tcG9uZW50Jyk7XG4gIEhBU19QU0VVRE9fQ0xBU1NfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci5oYXNfcHNldWRvX2NsYXNzJyk7XG4gIFJPTEVfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci5yb2xlJyk7XG4gIFRFU1RfTkFNRV9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLnRlc3RfaWQnKTtcbiAgVEVYVF9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLnRleHQnKTtcbn1cbnZhciBjb21taXRIb29rcyA9IFtdO1xuZnVuY3Rpb24gb25Db21taXRSb290JDEoKSB7XG4gIHtcbiAgICBjb21taXRIb29rcy5mb3JFYWNoKGZ1bmN0aW9uIChjb21taXRIb29rKSB7XG4gICAgICByZXR1cm4gY29tbWl0SG9vaygpO1xuICAgIH0pO1xuICB9XG59XG5cbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgUmVhY3RDdXJyZW50T3duZXIkMiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyLFxuICAgIElzU29tZVJlbmRlcmVyQWN0aW5nID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSXNTb21lUmVuZGVyZXJBY3Rpbmc7XG52YXIgTm9Db250ZXh0ID1cbi8qICAgICAgICAgICAgICovXG4wO1xudmFyIEJhdGNoZWRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgKi9cbjE7XG52YXIgRXZlbnRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgICAqL1xuMjtcbnZhciBEaXNjcmV0ZUV2ZW50Q29udGV4dCA9XG4vKiAgICAgICAgICovXG40O1xudmFyIExlZ2FjeVVuYmF0Y2hlZENvbnRleHQgPVxuLyogICAgICAgKi9cbjg7XG52YXIgUmVuZGVyQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMTY7XG52YXIgQ29tbWl0Q29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMzI7XG52YXIgUmV0cnlBZnRlckVycm9yID1cbi8qICAgICAgICovXG42NDtcbnZhciBSb290SW5jb21wbGV0ZSA9IDA7XG52YXIgUm9vdEZhdGFsRXJyb3JlZCA9IDE7XG52YXIgUm9vdEVycm9yZWQgPSAyO1xudmFyIFJvb3RTdXNwZW5kZWQgPSAzO1xudmFyIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgPSA0O1xudmFyIFJvb3RDb21wbGV0ZWQgPSA1OyAvLyBEZXNjcmliZXMgd2hlcmUgd2UgYXJlIGluIHRoZSBSZWFjdCBleGVjdXRpb24gc3RhY2tcblxudmFyIGV4ZWN1dGlvbkNvbnRleHQgPSBOb0NvbnRleHQ7IC8vIFRoZSByb290IHdlJ3JlIHdvcmtpbmcgb25cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7IC8vIFRoZSBmaWJlciB3ZSdyZSB3b3JraW5nIG9uXG5cbnZhciB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7IC8vIFRoZSBsYW5lcyB3ZSdyZSByZW5kZXJpbmdcblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gU3RhY2sgdGhhdCBhbGxvd3MgY29tcG9uZW50cyB0byBjaGFuZ2UgdGhlIHJlbmRlciBsYW5lcyBmb3IgaXRzIHN1YnRyZWVcbi8vIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgbGFuZXMgd2Ugc3RhcnRlZCB3b3JraW5nIG9uIGF0IHRoZSByb290LiBUaGUgb25seVxuLy8gY2FzZSB3aGVyZSBpdCdzIGRpZmZlcmVudCBmcm9tIGB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc2AgaXMgd2hlbiB3ZVxuLy8gZW50ZXIgYSBzdWJ0cmVlIHRoYXQgaXMgaGlkZGVuIGFuZCBuZWVkcyB0byBiZSB1bmhpZGRlbjogU3VzcGVuc2UgYW5kXG4vLyBPZmZzY3JlZW4gY29tcG9uZW50LlxuLy9cbi8vIE1vc3QgdGhpbmdzIGluIHRoZSB3b3JrIGxvb3Agc2hvdWxkIGRlYWwgd2l0aCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcy5cbi8vIE1vc3QgdGhpbmdzIGluIGJlZ2luL2NvbXBsZXRlIHBoYXNlcyBzaG91bGQgZGVhbCB3aXRoIHN1YnRyZWVSZW5kZXJMYW5lcy5cblxudmFyIHN1YnRyZWVSZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG52YXIgc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5vTGFuZXMpOyAvLyBXaGV0aGVyIHRvIHJvb3QgY29tcGxldGVkLCBlcnJvcmVkLCBzdXNwZW5kZWQsIGV0Yy5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5jb21wbGV0ZTsgLy8gQSBmYXRhbCBlcnJvciwgaWYgb25lIGlzIHRocm93blxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IG51bGw7IC8vIFwiSW5jbHVkZWRcIiBsYW5lcyByZWZlciB0byBsYW5lcyB0aGF0IHdlcmUgd29ya2VkIG9uIGR1cmluZyB0aGlzIHJlbmRlci4gSXQnc1xuLy8gc2xpZ2h0bHkgZGlmZmVyZW50IHRoYW4gYHJlbmRlckxhbmVzYCBiZWNhdXNlIGByZW5kZXJMYW5lc2AgY2FuIGNoYW5nZSBhcyB5b3Vcbi8vIGVudGVyIGFuZCBleGl0IGFuIE9mZnNjcmVlbiB0cmVlLiBUaGlzIHZhbHVlIGlzIHRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVuZGVyXG4vLyBsYW5lcyBmb3IgdGhlIGVudGlyZSByZW5kZXIgcGhhc2UuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzID0gTm9MYW5lczsgLy8gVGhlIHdvcmsgbGVmdCBvdmVyIGJ5IGNvbXBvbmVudHMgdGhhdCB3ZXJlIHZpc2l0ZWQgZHVyaW5nIHRoaXMgcmVuZGVyLiBPbmx5XG4vLyBpbmNsdWRlcyB1bnByb2Nlc3NlZCB1cGRhdGVzLCBub3Qgd29yayBpbiBiYWlsZWQgb3V0IGNoaWxkcmVuLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gTm9MYW5lczsgLy8gTGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgKGluIGFuIGludGVybGVhdmVkIGV2ZW50KSBkdXJpbmcgdGhpcyByZW5kZXIuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMgPSBOb0xhbmVzOyAvLyBMYW5lcyB0aGF0IHdlcmUgcGluZ2VkIChpbiBhbiBpbnRlcmxlYXZlZCBldmVudCkgZHVyaW5nIHRoaXMgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xudmFyIG1vc3RSZWNlbnRseVVwZGF0ZWRSb290ID0gbnVsbDsgLy8gVGhlIG1vc3QgcmVjZW50IHRpbWUgd2UgY29tbWl0dGVkIGEgZmFsbGJhY2suIFRoaXMgbGV0cyB1cyBlbnN1cmUgYSB0cmFpblxuLy8gbW9kZWwgd2hlcmUgd2UgZG9uJ3QgY29tbWl0IG5ldyBsb2FkaW5nIHN0YXRlcyBpbiB0b28gcXVpY2sgc3VjY2Vzc2lvbi5cblxudmFyIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPSAwO1xudmFyIEZBTExCQUNLX1RIUk9UVExFX01TID0gNTAwOyAvLyBUaGUgYWJzb2x1dGUgdGltZSBmb3Igd2hlbiB3ZSBzaG91bGQgc3RhcnQgZ2l2aW5nIHVwIG9uIHJlbmRlcmluZ1xuLy8gbW9yZSBhbmQgcHJlZmVyIENQVSBzdXNwZW5zZSBoZXVyaXN0aWNzIGluc3RlYWQuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID0gSW5maW5pdHk7IC8vIEhvdyBsb25nIGEgcmVuZGVyIGlzIHN1cHBvc2VkIHRvIHRha2UgYmVmb3JlIHdlIHN0YXJ0IGZvbGxvd2luZyBDUFVcbi8vIHN1c3BlbnNlIGhldXJpc3RpY3MgYW5kIG9wdCBvdXQgb2YgcmVuZGVyaW5nIG1vcmUgY29udGVudC5cblxudmFyIFJFTkRFUl9USU1FT1VUX01TID0gNTAwO1xuXG5mdW5jdGlvbiByZXNldFJlbmRlclRpbWVyKCkge1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID0gbm93KCkgKyBSRU5ERVJfVElNRU9VVF9NUztcbn1cblxuZnVuY3Rpb24gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpIHtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWU7XG59XG52YXIgbmV4dEVmZmVjdCA9IG51bGw7XG52YXIgaGFzVW5jYXVnaHRFcnJvciA9IGZhbHNlO1xudmFyIGZpcnN0VW5jYXVnaHRFcnJvciA9IG51bGw7XG52YXIgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsO1xudmFyIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG52YXIgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsO1xudmFyIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID0gTm9Qcmlvcml0eSQxO1xudmFyIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gTm9MYW5lcztcbnZhciBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQgPSBbXTtcbnZhciBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudCA9IFtdO1xudmFyIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBudWxsOyAvLyBVc2UgdGhlc2UgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIG5lc3RlZCB1cGRhdGVzXG5cbnZhciBORVNURURfVVBEQVRFX0xJTUlUID0gNTA7XG52YXIgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xudmFyIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGw7XG52YXIgTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUID0gNTA7XG52YXIgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDsgLy8gTWFya3MgdGhlIG5lZWQgdG8gcmVzY2hlZHVsZSBwZW5kaW5nIGludGVyYWN0aW9ucyBhdCB0aGVzZSBsYW5lc1xuLy8gZHVyaW5nIHRoZSBjb21taXQgcGhhc2UuIFRoaXMgZW5hYmxlcyB0aGVtIHRvIGJlIHRyYWNlZCBhY3Jvc3MgY29tcG9uZW50c1xuLy8gdGhhdCBzcGF3biBuZXcgd29yayBkdXJpbmcgcmVuZGVyLiBFLmcuIGhpZGRlbiBib3VuZGFyaWVzLCBzdXNwZW5kZWQgU1NSXG4vLyBoeWRyYXRpb24gb3IgU3VzcGVuc2VMaXN0LlxuLy8gVE9ETzogQ2FuIHVzZSBhIGJpdG1hc2sgaW5zdGVhZCBvZiBhbiBhcnJheVxuXG52YXIgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBudWxsOyAvLyBJZiB0d28gdXBkYXRlcyBhcmUgc2NoZWR1bGVkIHdpdGhpbiB0aGUgc2FtZSBldmVudCwgd2Ugc2hvdWxkIHRyZWF0IHRoZWlyXG4vLyBldmVudCB0aW1lcyBhcyBzaW11bHRhbmVvdXMsIGV2ZW4gaWYgdGhlIGFjdHVhbCBjbG9jayB0aW1lIGhhcyBhZHZhbmNlZFxuLy8gYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxsLlxuXG52YXIgY3VycmVudEV2ZW50VGltZSA9IE5vVGltZXN0YW1wO1xudmFyIGN1cnJlbnRFdmVudFdpcExhbmVzID0gTm9MYW5lcztcbnZhciBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgPSBOb0xhbmVzOyAvLyBEZXYgb25seSBmbGFnIHRoYXQgdHJhY2tzIGlmIHBhc3NpdmUgZWZmZWN0cyBhcmUgY3VycmVudGx5IGJlaW5nIGZsdXNoZWQuXG4vLyBXZSB3YXJuIGFib3V0IHN0YXRlIHVwZGF0ZXMgZm9yIHVubW91bnRlZCBjb21wb25lbnRzIGRpZmZlcmVudGx5IGluIHRoaXMgY2FzZS5cblxudmFyIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xudmFyIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSA9IG51bGw7XG52YXIgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gZmFsc2U7XG5mdW5jdGlvbiBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3QoKSB7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3Q7XG59XG5mdW5jdGlvbiByZXF1ZXN0RXZlbnRUaW1lKCkge1xuICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KSB7XG4gICAgLy8gV2UncmUgaW5zaWRlIFJlYWN0LCBzbyBpdCdzIGZpbmUgdG8gcmVhZCB0aGUgYWN0dWFsIHRpbWUuXG4gICAgcmV0dXJuIG5vdygpO1xuICB9IC8vIFdlJ3JlIG5vdCBpbnNpZGUgUmVhY3QsIHNvIHdlIG1heSBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgYnJvd3NlciBldmVudC5cblxuXG4gIGlmIChjdXJyZW50RXZlbnRUaW1lICE9PSBOb1RpbWVzdGFtcCkge1xuICAgIC8vIFVzZSB0aGUgc2FtZSBzdGFydCB0aW1lIGZvciBhbGwgdXBkYXRlcyB1bnRpbCB3ZSBlbnRlciBSZWFjdCBhZ2Fpbi5cbiAgICByZXR1cm4gY3VycmVudEV2ZW50VGltZTtcbiAgfSAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUgc2luY2UgUmVhY3QgeWllbGRlZC4gQ29tcHV0ZSBhIG5ldyBzdGFydCB0aW1lLlxuXG5cbiAgY3VycmVudEV2ZW50VGltZSA9IG5vdygpO1xuICByZXR1cm4gY3VycmVudEV2ZW50VGltZTtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKSB7XG4gIC8vIFNwZWNpYWwgY2FzZXNcbiAgdmFyIG1vZGUgPSBmaWJlci5tb2RlO1xuXG4gIGlmICgobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBTeW5jTGFuZTtcbiAgfSBlbHNlIGlmICgobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCkgPT09IEltbWVkaWF0ZVByaW9yaXR5JDEgPyBTeW5jTGFuZSA6IFN5bmNCYXRjaGVkTGFuZTtcbiAgfSAvLyBUaGUgYWxnb3JpdGhtIGZvciBhc3NpZ25pbmcgYW4gdXBkYXRlIHRvIGEgbGFuZSBzaG91bGQgYmUgc3RhYmxlIGZvciBhbGxcbiAgLy8gdXBkYXRlcyBhdCB0aGUgc2FtZSBwcmlvcml0eSB3aXRoaW4gdGhlIHNhbWUgZXZlbnQuIFRvIGRvIHRoaXMsIHRoZSBpbnB1dHNcbiAgLy8gdG8gdGhlIGFsZ29yaXRobSBtdXN0IGJlIHRoZSBzYW1lLiBGb3IgZXhhbXBsZSwgd2UgdXNlIHRoZSBgcmVuZGVyTGFuZXNgXG4gIC8vIHRvIGF2b2lkIGNob29zaW5nIGEgbGFuZSB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiByZW5kZXJpbmcuXG4gIC8vXG4gIC8vIEhvd2V2ZXIsIHRoZSBcImluY2x1ZGVkXCIgbGFuZXMgY291bGQgYmUgbXV0YXRlZCBpbiBiZXR3ZWVuIHVwZGF0ZXMgaW4gdGhlXG4gIC8vIHNhbWUgZXZlbnQsIGxpa2UgaWYgeW91IHBlcmZvcm0gYW4gdXBkYXRlIGluc2lkZSBgZmx1c2hTeW5jYC4gT3IgYW55IG90aGVyXG4gIC8vIGNvZGUgcGF0aCB0aGF0IG1pZ2h0IGNhbGwgYHByZXBhcmVGcmVzaFN0YWNrYC5cbiAgLy9cbiAgLy8gVGhlIHRyaWNrIHdlIHVzZSBpcyB0byBjYWNoZSB0aGUgZmlyc3Qgb2YgZWFjaCBvZiB0aGVzZSBpbnB1dHMgd2l0aGluIGFuXG4gIC8vIGV2ZW50LiBUaGVuIHJlc2V0IHRoZSBjYWNoZWQgdmFsdWVzIG9uY2Ugd2UgY2FuIGJlIHN1cmUgdGhlIGV2ZW50IGlzIG92ZXIuXG4gIC8vIE91ciBoZXVyaXN0aWMgZm9yIHRoYXQgaXMgd2hlbmV2ZXIgd2UgZW50ZXIgYSBjb25jdXJyZW50IHdvcmsgbG9vcC5cbiAgLy9cbiAgLy8gV2UnbGwgZG8gdGhlIHNhbWUgZm9yIGBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXNgIGJlbG93LlxuXG5cbiAgaWYgKGN1cnJlbnRFdmVudFdpcExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgY3VycmVudEV2ZW50V2lwTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzO1xuICB9XG5cbiAgdmFyIGlzVHJhbnNpdGlvbiA9IHJlcXVlc3RDdXJyZW50VHJhbnNpdGlvbigpICE9PSBOb1RyYW5zaXRpb247XG5cbiAgaWYgKGlzVHJhbnNpdGlvbikge1xuICAgIGlmIChjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyA9IG1vc3RSZWNlbnRseVVwZGF0ZWRSb290ICE9PSBudWxsID8gbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QucGVuZGluZ0xhbmVzIDogTm9MYW5lcztcbiAgICB9XG5cbiAgICByZXR1cm4gZmluZFRyYW5zaXRpb25MYW5lKGN1cnJlbnRFdmVudFdpcExhbmVzLCBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMpO1xuICB9IC8vIFRPRE86IFJlbW92ZSB0aGlzIGRlcGVuZGVuY3kgb24gdGhlIFNjaGVkdWxlciBwcmlvcml0eS5cbiAgLy8gVG8gZG8gdGhhdCwgd2UncmUgcmVwbGFjaW5nIGl0IHdpdGggYW4gdXBkYXRlIGxhbmUgcHJpb3JpdHkuXG5cblxuICB2YXIgc2NoZWR1bGVyUHJpb3JpdHkgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpOyAvLyBUaGUgb2xkIGJlaGF2aW9yIHdhcyB1c2luZyB0aGUgcHJpb3JpdHkgbGV2ZWwgb2YgdGhlIFNjaGVkdWxlci5cbiAgLy8gVGhpcyBjb3VwbGVzIFJlYWN0IHRvIHRoZSBTY2hlZHVsZXIgaW50ZXJuYWxzLCBzbyB3ZSdyZSByZXBsYWNpbmcgaXRcbiAgLy8gd2l0aCB0aGUgY3VycmVudFVwZGF0ZUxhbmVQcmlvcml0eSBhYm92ZS4gQXMgYW4gZXhhbXBsZSBvZiBob3cgdGhpc1xuICAvLyBjb3VsZCBiZSBwcm9ibGVtYXRpYywgaWYgd2UncmUgbm90IGluc2lkZSBgU2NoZWR1bGVyLnJ1bldpdGhQcmlvcml0eWAsXG4gIC8vIHRoZW4gd2UnbGwgZ2V0IHRoZSBwcmlvcml0eSBvZiB0aGUgY3VycmVudCBydW5uaW5nIFNjaGVkdWxlciB0YXNrLFxuICAvLyB3aGljaCBpcyBwcm9iYWJseSBub3Qgd2hhdCB3ZSB3YW50LlxuXG4gIHZhciBsYW5lO1xuXG4gIGlmICggLy8gVE9ETzogVGVtcG9yYXJ5LiBXZSdyZSByZW1vdmluZyB0aGUgY29uY2VwdCBvZiBkaXNjcmV0ZSB1cGRhdGVzLlxuICAoZXhlY3V0aW9uQ29udGV4dCAmIERpc2NyZXRlRXZlbnRDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmIHNjaGVkdWxlclByaW9yaXR5ID09PSBVc2VyQmxvY2tpbmdQcmlvcml0eSQyKSB7XG4gICAgbGFuZSA9IGZpbmRVcGRhdGVMYW5lKElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHksIGN1cnJlbnRFdmVudFdpcExhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2NoZWR1bGVyTGFuZVByaW9yaXR5ID0gc2NoZWR1bGVyUHJpb3JpdHlUb0xhbmVQcmlvcml0eShzY2hlZHVsZXJQcmlvcml0eSk7XG5cbiAgICBsYW5lID0gZmluZFVwZGF0ZUxhbmUoc2NoZWR1bGVyTGFuZVByaW9yaXR5LCBjdXJyZW50RXZlbnRXaXBMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gbGFuZTtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdFJldHJ5TGFuZShmaWJlcikge1xuICAvLyBUaGlzIGlzIGEgZm9yayBvZiBgcmVxdWVzdFVwZGF0ZUxhbmVgIGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgU3VzcGVuc2VcbiAgLy8gXCJyZXRyaWVzXCIgXHUyMDE0IGEgc3BlY2lhbCB1cGRhdGUgdGhhdCBhdHRlbXB0cyB0byBmbGlwIGEgU3VzcGVuc2UgYm91bmRhcnlcbiAgLy8gZnJvbSBpdHMgcGxhY2Vob2xkZXIgc3RhdGUgdG8gaXRzIHByaW1hcnkvcmVzb2x2ZWQgc3RhdGUuXG4gIC8vIFNwZWNpYWwgY2FzZXNcbiAgdmFyIG1vZGUgPSBmaWJlci5tb2RlO1xuXG4gIGlmICgobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBTeW5jTGFuZTtcbiAgfSBlbHNlIGlmICgobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCkgPT09IEltbWVkaWF0ZVByaW9yaXR5JDEgPyBTeW5jTGFuZSA6IFN5bmNCYXRjaGVkTGFuZTtcbiAgfSAvLyBTZWUgYHJlcXVlc3RVcGRhdGVMYW5lYCBmb3IgZXhwbGFuYXRpb24gb2YgYGN1cnJlbnRFdmVudFdpcExhbmVzYFxuXG5cbiAgaWYgKGN1cnJlbnRFdmVudFdpcExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgY3VycmVudEV2ZW50V2lwTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzO1xuICB9XG5cbiAgcmV0dXJuIGZpbmRSZXRyeUxhbmUoY3VycmVudEV2ZW50V2lwTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSkge1xuICBjaGVja0Zvck5lc3RlZFVwZGF0ZXMoKTtcbiAgd2FybkFib3V0UmVuZGVyUGhhc2VVcGRhdGVzSW5ERVYoZmliZXIpO1xuICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCBsYW5lKTtcblxuICBpZiAocm9vdCA9PT0gbnVsbCkge1xuICAgIHdhcm5BYm91dFVwZGF0ZU9uVW5tb3VudGVkRmliZXJJbkRFVihmaWJlcik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTWFyayB0aGF0IHRoZSByb290IGhhcyBhIHBlbmRpbmcgdXBkYXRlLlxuXG5cbiAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIGxhbmUsIGV2ZW50VGltZSk7XG5cbiAgaWYgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCkge1xuICAgIC8vIFJlY2VpdmVkIGFuIHVwZGF0ZSB0byBhIHRyZWUgdGhhdCdzIGluIHRoZSBtaWRkbGUgb2YgcmVuZGVyaW5nLiBNYXJrXG4gICAgLy8gdGhhdCB0aGVyZSB3YXMgYW4gaW50ZXJsZWF2ZWQgdXBkYXRlIHdvcmsgb24gdGhpcyByb290LiBVbmxlc3MgdGhlXG4gICAgLy8gYGRlZmVyUmVuZGVyUGhhc2VVcGRhdGVUb05leHRCYXRjaGAgZmxhZyBpcyBvZmYgYW5kIHRoaXMgaXMgYSByZW5kZXJcbiAgICAvLyBwaGFzZSB1cGRhdGUuIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3QgdHJlYXQgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgYXMgaWZcbiAgICAvLyB0aGV5IHdlcmUgaW50ZXJsZWF2ZWQsIGZvciBiYWNrd2FyZHMgY29tcGF0IHJlYXNvbnMuXG4gICAge1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMsIGxhbmUpO1xuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5KSB7XG4gICAgICAvLyBUaGUgcm9vdCBhbHJlYWR5IHN1c3BlbmRlZCB3aXRoIGEgZGVsYXksIHdoaWNoIG1lYW5zIHRoaXMgcmVuZGVyXG4gICAgICAvLyBkZWZpbml0ZWx5IHdvbid0IGZpbmlzaC4gU2luY2Ugd2UgaGF2ZSBhIG5ldyB1cGRhdGUsIGxldCdzIG1hcmsgaXQgYXNcbiAgICAgIC8vIHN1c3BlbmRlZCBub3csIHJpZ2h0IGJlZm9yZSBtYXJraW5nIHRoZSBpbmNvbWluZyB1cGRhdGUuIFRoaXMgaGFzIHRoZVxuICAgICAgLy8gZWZmZWN0IG9mIGludGVycnVwdGluZyB0aGUgY3VycmVudCByZW5kZXIgYW5kIHN3aXRjaGluZyB0byB0aGUgdXBkYXRlLlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHRoaXMgZG9lc24ndCBvdmVycmlkZSBwaW5ncyB0aGF0IGhhcHBlbiB3aGlsZSB3ZSd2ZVxuICAgICAgLy8gYWxyZWFkeSBzdGFydGVkIHJlbmRlcmluZy5cbiAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiByZXF1ZXN0VXBkYXRlTGFuZVByaW9yaXR5IGFsc28gcmVhZHMgdGhlIHByaW9yaXR5LiBQYXNzIHRoZVxuICAvLyBwcmlvcml0eSBhcyBhbiBhcmd1bWVudCB0byB0aGF0IGZ1bmN0aW9uIGFuZCB0aGlzIG9uZS5cblxuXG4gIHZhciBwcmlvcml0eUxldmVsID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcblxuICBpZiAobGFuZSA9PT0gU3luY0xhbmUpIHtcbiAgICBpZiAoIC8vIENoZWNrIGlmIHdlJ3JlIGluc2lkZSB1bmJhdGNoZWRVcGRhdGVzXG4gICAgKGV4ZWN1dGlvbkNvbnRleHQgJiBMZWdhY3lVbmJhdGNoZWRDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IHJlbmRlcmluZ1xuICAgIChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gUmVnaXN0ZXIgcGVuZGluZyBpbnRlcmFjdGlvbnMgb24gdGhlIHJvb3QgdG8gYXZvaWQgbG9zaW5nIHRyYWNlZCBpbnRlcmFjdGlvbiBkYXRhLlxuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpOyAvLyBUaGlzIGlzIGEgbGVnYWN5IGVkZ2UgY2FzZS4gVGhlIGluaXRpYWwgbW91bnQgb2YgYSBSZWFjdERPTS5yZW5kZXItZWRcbiAgICAgIC8vIHJvb3QgaW5zaWRlIG9mIGJhdGNoZWRVcGRhdGVzIHNob3VsZCBiZSBzeW5jaHJvbm91cywgYnV0IGxheW91dCB1cGRhdGVzXG4gICAgICAvLyBzaG91bGQgYmUgZGVmZXJyZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUgYmF0Y2guXG5cbiAgICAgIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSk7XG5cbiAgICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgLy8gRmx1c2ggdGhlIHN5bmNocm9ub3VzIHdvcmsgbm93LCB1bmxlc3Mgd2UncmUgYWxyZWFkeSB3b3JraW5nIG9yIGluc2lkZVxuICAgICAgICAvLyBhIGJhdGNoLiBUaGlzIGlzIGludGVudGlvbmFsbHkgaW5zaWRlIHNjaGVkdWxlVXBkYXRlT25GaWJlciBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHNjaGVkdWxlQ2FsbGJhY2tGb3JGaWJlciB0byBwcmVzZXJ2ZSB0aGUgYWJpbGl0eSB0byBzY2hlZHVsZSBhIGNhbGxiYWNrXG4gICAgICAgIC8vIHdpdGhvdXQgaW1tZWRpYXRlbHkgZmx1c2hpbmcgaXQuIFdlIG9ubHkgZG8gdGhpcyBmb3IgdXNlci1pbml0aWF0ZWRcbiAgICAgICAgLy8gdXBkYXRlcywgdG8gcHJlc2VydmUgaGlzdG9yaWNhbCBiZWhhdmlvciBvZiBsZWdhY3kgbW9kZS5cbiAgICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFNjaGVkdWxlIGEgZGlzY3JldGUgdXBkYXRlIGJ1dCBvbmx5IGlmIGl0J3Mgbm90IFN5bmMuXG4gICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgRGlzY3JldGVFdmVudENvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgKCAvLyBPbmx5IHVwZGF0ZXMgYXQgdXNlci1ibG9ja2luZyBwcmlvcml0eSBvciBncmVhdGVyIGFyZSBjb25zaWRlcmVkXG4gICAgLy8gZGlzY3JldGUsIGV2ZW4gaW5zaWRlIGEgZGlzY3JldGUgZXZlbnQuXG4gICAgcHJpb3JpdHlMZXZlbCA9PT0gVXNlckJsb2NraW5nUHJpb3JpdHkkMiB8fCBwcmlvcml0eUxldmVsID09PSBJbW1lZGlhdGVQcmlvcml0eSQxKSkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGEgZGlzY3JldGUgZXZlbnQuIFRyYWNrIHRoZSBsb3dlc3QgcHJpb3JpdHlcbiAgICAgIC8vIGRpc2NyZXRlIHVwZGF0ZSBwZXIgcm9vdCBzbyB3ZSBjYW4gZmx1c2ggdGhlbSBlYXJseSwgaWYgbmVlZGVkLlxuICAgICAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPT09IG51bGwpIHtcbiAgICAgICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9IG5ldyBTZXQoW3Jvb3RdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMuYWRkKHJvb3QpO1xuICAgICAgfVxuICAgIH0gLy8gU2NoZWR1bGUgb3RoZXIgdXBkYXRlcyBhZnRlciBpbiBjYXNlIHRoZSBjYWxsYmFjayBpcyBzeW5jLlxuXG5cbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSk7XG4gIH0gLy8gV2UgdXNlIHRoaXMgd2hlbiBhc3NpZ25pbmcgYSBsYW5lIGZvciBhIHRyYW5zaXRpb24gaW5zaWRlXG4gIC8vIGByZXF1ZXN0VXBkYXRlTGFuZWAuIFdlIGFzc3VtZSBpdCdzIHRoZSBzYW1lIGFzIHRoZSByb290IGJlaW5nIHVwZGF0ZWQsXG4gIC8vIHNpbmNlIGluIHRoZSBjb21tb24gY2FzZSBvZiBhIHNpbmdsZSByb290IGFwcCBpdCBwcm9iYWJseSBpcy4gSWYgaXQncyBub3RcbiAgLy8gdGhlIHNhbWUgcm9vdCwgdGhlbiBpdCdzIG5vdCBhIGh1Z2UgZGVhbCwgd2UganVzdCBtaWdodCBiYXRjaCBtb3JlIHN0dWZmXG4gIC8vIHRvZ2V0aGVyIG1vcmUgdGhhbiBuZWNlc3NhcnkuXG5cblxuICBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCA9IHJvb3Q7XG59IC8vIFRoaXMgaXMgc3BsaXQgaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIHdlIGNhbiBtYXJrIGEgZmliZXIgd2l0aCBwZW5kaW5nXG4vLyB3b3JrIHdpdGhvdXQgdHJlYXRpbmcgaXQgYXMgYSB0eXBpY2FsIHVwZGF0ZSB0aGF0IG9yaWdpbmF0ZXMgZnJvbSBhbiBldmVudDtcbi8vIGUuZy4gcmV0cnlpbmcgYSBTdXNwZW5zZSBib3VuZGFyeSBpc24ndCBhbiB1cGRhdGUsIGJ1dCBpdCBkb2VzIHNjaGVkdWxlIHdvcmtcbi8vIG9uIGEgZmliZXIuXG5cbmZ1bmN0aW9uIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHNvdXJjZUZpYmVyLCBsYW5lKSB7XG4gIC8vIFVwZGF0ZSB0aGUgc291cmNlIGZpYmVyJ3MgbGFuZXNcbiAgc291cmNlRmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKHNvdXJjZUZpYmVyLmxhbmVzLCBsYW5lKTtcbiAgdmFyIGFsdGVybmF0ZSA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIGxhbmUpO1xuICB9XG5cbiAge1xuICAgIGlmIChhbHRlcm5hdGUgPT09IG51bGwgJiYgKHNvdXJjZUZpYmVyLmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzKSB7XG4gICAgICB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKHNvdXJjZUZpYmVyKTtcbiAgICB9XG4gIH0gLy8gV2FsayB0aGUgcGFyZW50IHBhdGggdG8gdGhlIHJvb3QgYW5kIHVwZGF0ZSB0aGUgY2hpbGQgZXhwaXJhdGlvbiB0aW1lLlxuXG5cbiAgdmFyIG5vZGUgPSBzb3VyY2VGaWJlcjtcbiAgdmFyIHBhcmVudCA9IHNvdXJjZUZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgcGFyZW50LmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKHBhcmVudC5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICBhbHRlcm5hdGUgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICBpZiAoKHBhcmVudC5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoc291cmNlRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IHBhcmVudDtcbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG5cbiAgaWYgKG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgIHZhciByb290ID0gbm9kZS5zdGF0ZU5vZGU7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0gLy8gVXNlIHRoaXMgZnVuY3Rpb24gdG8gc2NoZWR1bGUgYSB0YXNrIGZvciBhIHJvb3QuIFRoZXJlJ3Mgb25seSBvbmUgdGFzayBwZXJcbi8vIHJvb3Q7IGlmIGEgdGFzayB3YXMgYWxyZWFkeSBzY2hlZHVsZWQsIHdlJ2xsIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgcHJpb3JpdHlcbi8vIG9mIHRoZSBleGlzdGluZyB0YXNrIGlzIHRoZSBzYW1lIGFzIHRoZSBwcmlvcml0eSBvZiB0aGUgbmV4dCBsZXZlbCB0aGF0IHRoZVxuLy8gcm9vdCBoYXMgd29yayBvbi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb24gZXZlcnkgdXBkYXRlLCBhbmQgcmlnaHQgYmVmb3JlXG4vLyBleGl0aW5nIGEgdGFzay5cblxuXG5mdW5jdGlvbiBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgY3VycmVudFRpbWUpIHtcbiAgdmFyIGV4aXN0aW5nQ2FsbGJhY2tOb2RlID0gcm9vdC5jYWxsYmFja05vZGU7IC8vIENoZWNrIGlmIGFueSBsYW5lcyBhcmUgYmVpbmcgc3RhcnZlZCBieSBvdGhlciB3b3JrLiBJZiBzbywgbWFyayB0aGVtIGFzXG4gIC8vIGV4cGlyZWQgc28gd2Uga25vdyB0byB3b3JrIG9uIHRob3NlIG5leHQuXG5cbiAgbWFya1N0YXJ2ZWRMYW5lc0FzRXhwaXJlZChyb290LCBjdXJyZW50VGltZSk7IC8vIERldGVybWluZSB0aGUgbmV4dCBsYW5lcyB0byB3b3JrIG9uLCBhbmQgdGhlaXIgcHJpb3JpdHkuXG5cbiAgdmFyIG5leHRMYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgPyB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA6IE5vTGFuZXMpOyAvLyBUaGlzIHJldHVybnMgdGhlIHByaW9yaXR5IGxldmVsIGNvbXB1dGVkIGR1cmluZyB0aGUgYGdldE5leHRMYW5lc2AgY2FsbC5cblxuICB2YXIgbmV3Q2FsbGJhY2tQcmlvcml0eSA9IHJldHVybk5leHRMYW5lc1ByaW9yaXR5KCk7XG5cbiAgaWYgKG5leHRMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogVGhlcmUncyBub3RoaW5nIHRvIHdvcmsgb24uXG4gICAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxDYWxsYmFjayhleGlzdGluZ0NhbGxiYWNrTm9kZSk7XG4gICAgICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgICByb290LmNhbGxiYWNrUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH0gLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBleGlzdGluZyB0YXNrLiBXZSBtYXkgYmUgYWJsZSB0byByZXVzZSBpdC5cblxuXG4gIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhciBleGlzdGluZ0NhbGxiYWNrUHJpb3JpdHkgPSByb290LmNhbGxiYWNrUHJpb3JpdHk7XG5cbiAgICBpZiAoZXhpc3RpbmdDYWxsYmFja1ByaW9yaXR5ID09PSBuZXdDYWxsYmFja1ByaW9yaXR5KSB7XG4gICAgICAvLyBUaGUgcHJpb3JpdHkgaGFzbid0IGNoYW5nZWQuIFdlIGNhbiByZXVzZSB0aGUgZXhpc3RpbmcgdGFzay4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFRoZSBwcmlvcml0eSBjaGFuZ2VkLiBDYW5jZWwgdGhlIGV4aXN0aW5nIGNhbGxiYWNrLiBXZSdsbCBzY2hlZHVsZSBhIG5ld1xuICAgIC8vIG9uZSBiZWxvdy5cblxuXG4gICAgY2FuY2VsQ2FsbGJhY2soZXhpc3RpbmdDYWxsYmFja05vZGUpO1xuICB9IC8vIFNjaGVkdWxlIGEgbmV3IGNhbGxiYWNrLlxuXG5cbiAgdmFyIG5ld0NhbGxiYWNrTm9kZTtcblxuICBpZiAobmV3Q2FsbGJhY2tQcmlvcml0eSA9PT0gU3luY0xhbmVQcmlvcml0eSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogU3luYyBSZWFjdCBjYWxsYmFja3MgYXJlIHNjaGVkdWxlZCBvbiBhIHNwZWNpYWxcbiAgICAvLyBpbnRlcm5hbCBxdWV1ZVxuICAgIG5ld0NhbGxiYWNrTm9kZSA9IHNjaGVkdWxlU3luY0NhbGxiYWNrKHBlcmZvcm1TeW5jV29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpKTtcbiAgfSBlbHNlIGlmIChuZXdDYWxsYmFja1ByaW9yaXR5ID09PSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eSkge1xuICAgIG5ld0NhbGxiYWNrTm9kZSA9IHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgcGVyZm9ybVN5bmNXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCkpO1xuICB9IGVsc2Uge1xuICAgIHZhciBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gbGFuZVByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShuZXdDYWxsYmFja1ByaW9yaXR5KTtcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZUNhbGxiYWNrKHNjaGVkdWxlclByaW9yaXR5TGV2ZWwsIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpKTtcbiAgfVxuXG4gIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IG5ld0NhbGxiYWNrUHJpb3JpdHk7XG4gIHJvb3QuY2FsbGJhY2tOb2RlID0gbmV3Q2FsbGJhY2tOb2RlO1xufSAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgZXZlcnkgY29uY3VycmVudCB0YXNrLCBpLmUuIGFueXRoaW5nIHRoYXRcbi8vIGdvZXMgdGhyb3VnaCBTY2hlZHVsZXIuXG5cblxuZnVuY3Rpb24gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290KHJvb3QpIHtcbiAgLy8gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBhIFJlYWN0IGV2ZW50LCB3ZSBjYW4gY2xlYXIgdGhlIGN1cnJlbnRcbiAgLy8gZXZlbnQgdGltZS4gVGhlIG5leHQgdXBkYXRlIHdpbGwgY29tcHV0ZSBhIG5ldyBldmVudCB0aW1lLlxuICBjdXJyZW50RXZlbnRUaW1lID0gTm9UaW1lc3RhbXA7XG4gIGN1cnJlbnRFdmVudFdpcExhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzID0gTm9MYW5lcztcblxuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIgKTtcbiAgICB9XG4gIH0gLy8gRmx1c2ggYW55IHBlbmRpbmcgcGFzc2l2ZSBlZmZlY3RzIGJlZm9yZSBkZWNpZGluZyB3aGljaCBsYW5lcyB0byB3b3JrIG9uLFxuICAvLyBpbiBjYXNlIHRoZXkgc2NoZWR1bGUgYWRkaXRpb25hbCB3b3JrLlxuXG5cbiAgdmFyIG9yaWdpbmFsQ2FsbGJhY2tOb2RlID0gcm9vdC5jYWxsYmFja05vZGU7XG4gIHZhciBkaWRGbHVzaFBhc3NpdmVFZmZlY3RzID0gZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuXG4gIGlmIChkaWRGbHVzaFBhc3NpdmVFZmZlY3RzKSB7XG4gICAgLy8gU29tZXRoaW5nIGluIHRoZSBwYXNzaXZlIGVmZmVjdCBwaGFzZSBtYXkgaGF2ZSBjYW5jZWxlZCB0aGUgY3VycmVudCB0YXNrLlxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXNrIG5vZGUgZm9yIHRoaXMgcm9vdCB3YXMgY2hhbmdlZC5cbiAgICBpZiAocm9vdC5jYWxsYmFja05vZGUgIT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlKSB7XG4gICAgICAvLyBUaGUgY3VycmVudCB0YXNrIHdhcyBjYW5jZWxlZC4gRXhpdC4gV2UgZG9uJ3QgbmVlZCB0byBjYWxsXG4gICAgICAvLyBgZW5zdXJlUm9vdElzU2NoZWR1bGVkYCBiZWNhdXNlIHRoZSBjaGVjayBhYm92ZSBpbXBsaWVzIGVpdGhlciB0aGF0XG4gICAgICAvLyB0aGVyZSdzIGEgbmV3IHRhc2ssIG9yIHRoYXQgdGhlcmUncyBubyByZW1haW5pbmcgd29yayBvbiB0aGlzIHJvb3QuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gLy8gRGV0ZXJtaW5lIHRoZSBuZXh0IGV4cGlyYXRpb24gdGltZSB0byB3b3JrIG9uLCB1c2luZyB0aGUgZmllbGRzIHN0b3JlZFxuICAvLyBvbiB0aGUgcm9vdC5cblxuXG4gIHZhciBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgPyB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA6IE5vTGFuZXMpO1xuXG4gIGlmIChsYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIERlZmVuc2l2ZSBjb2RpbmcuIFRoaXMgaXMgbmV2ZXIgZXhwZWN0ZWQgdG8gaGFwcGVuLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGV4aXRTdGF0dXMgPSByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcyk7XG5cbiAgaWYgKGluY2x1ZGVzU29tZUxhbmUod29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKSkge1xuICAgIC8vIFRoZSByZW5kZXIgaW5jbHVkZWQgbGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgLy8gRm9yIGV4YW1wbGUsIHdoZW4gdW5oaWRpbmcgYSBoaWRkZW4gdHJlZSwgd2UgaW5jbHVkZSBhbGwgdGhlIGxhbmVzXG4gICAgLy8gdGhhdCB3ZXJlIHByZXZpb3VzbHkgc2tpcHBlZCB3aGVuIHRoZSB0cmVlIHdhcyBoaWRkZW4uIFRoYXQgc2V0IG9mXG4gICAgLy8gbGFuZXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgbGFuZXMgd2Ugc3RhcnRlZCByZW5kZXJpbmcgd2l0aC5cbiAgICAvL1xuICAgIC8vIFNvIHdlJ2xsIHRocm93IG91dCB0aGUgY3VycmVudCB3b3JrIGFuZCByZXN0YXJ0LlxuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICB9IGVsc2UgaWYgKGV4aXRTdGF0dXMgIT09IFJvb3RJbmNvbXBsZXRlKSB7XG4gICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RFcnJvcmVkKSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0IHw9IFJldHJ5QWZ0ZXJFcnJvcjsgLy8gSWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGh5ZHJhdGlvbixcbiAgICAgIC8vIGRpc2NhcmQgc2VydmVyIHJlc3BvbnNlIGFuZCBmYWxsIGJhY2sgdG8gY2xpZW50IHNpZGUgcmVuZGVyLlxuXG4gICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgIHJvb3QuaHlkcmF0ZSA9IGZhbHNlO1xuICAgICAgICBjbGVhckNvbnRhaW5lcihyb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgfSAvLyBJZiBzb21ldGhpbmcgdGhyZXcgYW4gZXJyb3IsIHRyeSByZW5kZXJpbmcgb25lIG1vcmUgdGltZS4gV2UnbGwgcmVuZGVyXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRvIGJsb2NrIGNvbmN1cnJlbnQgZGF0YSBtdXRhdGlvbnMsIGFuZCB3ZSdsbCBpbmNsdWRlc1xuICAgICAgLy8gYWxsIHBlbmRpbmcgdXBkYXRlcyBhcmUgaW5jbHVkZWQuIElmIGl0IHN0aWxsIGZhaWxzIGFmdGVyIHRoZSBzZWNvbmRcbiAgICAgIC8vIGF0dGVtcHQsIHdlJ2xsIGdpdmUgdXAgYW5kIGNvbW1pdCB0aGUgcmVzdWx0aW5nIHRyZWUuXG5cblxuICAgICAgbGFuZXMgPSBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihyb290KTtcblxuICAgICAgaWYgKGxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICAgIHZhciBmYXRhbEVycm9yID0gd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvcjtcbiAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICAgICAgdGhyb3cgZmF0YWxFcnJvcjtcbiAgICB9IC8vIFdlIG5vdyBoYXZlIGEgY29uc2lzdGVudCB0cmVlLiBUaGUgbmV4dCBzdGVwIGlzIGVpdGhlciB0byBjb21taXQgaXQsXG4gICAgLy8gb3IsIGlmIHNvbWV0aGluZyBzdXNwZW5kZWQsIHdhaXQgdG8gY29tbWl0IGl0IGFmdGVyIGEgdGltZW91dC5cblxuXG4gICAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGU7XG4gICAgcm9vdC5maW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcms7XG4gICAgcm9vdC5maW5pc2hlZExhbmVzID0gbGFuZXM7XG4gICAgZmluaXNoQ29uY3VycmVudFJlbmRlcihyb290LCBleGl0U3RhdHVzLCBsYW5lcyk7XG4gIH1cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuXG4gIGlmIChyb290LmNhbGxiYWNrTm9kZSA9PT0gb3JpZ2luYWxDYWxsYmFja05vZGUpIHtcbiAgICAvLyBUaGUgdGFzayBub2RlIHNjaGVkdWxlZCBmb3IgdGhpcyByb290IGlzIHRoZSBzYW1lIG9uZSB0aGF0J3NcbiAgICAvLyBjdXJyZW50bHkgZXhlY3V0ZWQuIE5lZWQgdG8gcmV0dXJuIGEgY29udGludWF0aW9uLlxuICAgIHJldHVybiBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QuYmluZChudWxsLCByb290KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hDb25jdXJyZW50UmVuZGVyKHJvb3QsIGV4aXRTdGF0dXMsIGxhbmVzKSB7XG4gIHN3aXRjaCAoZXhpdFN0YXR1cykge1xuICAgIGNhc2UgUm9vdEluY29tcGxldGU6XG4gICAgY2FzZSBSb290RmF0YWxFcnJvcmVkOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiUm9vdCBkaWQgbm90IGNvbXBsZXRlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgLy8gRmxvdyBrbm93cyBhYm91dCBpbnZhcmlhbnQsIHNvIGl0IGNvbXBsYWlucyBpZiBJIGFkZCBhIGJyZWFrXG4gICAgLy8gc3RhdGVtZW50LCBidXQgZXNsaW50IGRvZXNuJ3Qga25vdyBhYm91dCBpbnZhcmlhbnQsIHNvIGl0IGNvbXBsYWluc1xuICAgIC8vIGlmIEkgZG8uIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuXG4gICAgY2FzZSBSb290RXJyb3JlZDpcbiAgICAgIHtcbiAgICAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBhdHRlbXB0ZWQgdG8gcmV0cnkgdGhpcyB0cmVlLiBJZiB3ZSByZWFjaGVkXG4gICAgICAgIC8vIHRoaXMgcG9pbnQsIGl0IGVycm9yZWQgYWdhaW4uIENvbW1pdCBpdC5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RTdXNwZW5kZWQ6XG4gICAgICB7XG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpOyAvLyBXZSBoYXZlIGFuIGFjY2VwdGFibGUgbG9hZGluZyBzdGF0ZS4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlXG4gICAgICAgIC8vIHNob3VsZCBpbW1lZGlhdGVseSBjb21taXQgaXQgb3Igd2FpdCBhIGJpdC5cblxuICAgICAgICBpZiAoaW5jbHVkZXNPbmx5UmV0cmllcyhsYW5lcykgJiYgLy8gZG8gbm90IGRlbGF5IGlmIHdlJ3JlIGluc2lkZSBhbiBhY3QoKSBzY29wZVxuICAgICAgICAhc2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWKCkpIHtcbiAgICAgICAgICAvLyBUaGlzIHJlbmRlciBvbmx5IGluY2x1ZGVkIHJldHJpZXMsIG5vIHVwZGF0ZXMuIFRocm90dGxlIGNvbW1pdHRpbmdcbiAgICAgICAgICAvLyByZXRyaWVzIHNvIHRoYXQgd2UgZG9uJ3Qgc2hvdyB0b28gbWFueSBsb2FkaW5nIHN0YXRlcyB0b28gcXVpY2tseS5cbiAgICAgICAgICB2YXIgbXNVbnRpbFRpbWVvdXQgPSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lICsgRkFMTEJBQ0tfVEhST1RUTEVfTVMgLSBub3coKTsgLy8gRG9uJ3QgYm90aGVyIHdpdGggYSB2ZXJ5IHNob3J0IHN1c3BlbnNlIHRpbWUuXG5cbiAgICAgICAgICBpZiAobXNVbnRpbFRpbWVvdXQgPiAxMCkge1xuICAgICAgICAgICAgdmFyIG5leHRMYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBOb0xhbmVzKTtcblxuICAgICAgICAgICAgaWYgKG5leHRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgICAgICAvLyBUaGVyZSdzIGFkZGl0aW9uYWwgd29yayBvbiB0aGlzIHJvb3QuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICAgICAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhzdXNwZW5kZWRMYW5lcywgbGFuZXMpKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBwcmVmZXIgdG8gcmVuZGVyIHRoZSBmYWxsYmFjayBvZiBhdCB0aGUgbGFzdFxuICAgICAgICAgICAgICAvLyBzdXNwZW5kZWQgbGV2ZWwuIFBpbmcgdGhlIGxhc3Qgc3VzcGVuZGVkIGxldmVsIHRvIHRyeVxuICAgICAgICAgICAgICAvLyByZW5kZXJpbmcgaXQgYWdhaW4uXG4gICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHRoZSBzdXNwZW5kZWQgbGFuZXMgYXJlIElkbGU/IFNob3VsZCBub3QgcmVzdGFydC5cbiAgICAgICAgICAgICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICAgICAgICAgICAgbWFya1Jvb3RQaW5nZWQocm9vdCwgc3VzcGVuZGVkTGFuZXMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gLy8gVGhlIHJlbmRlciBpcyBzdXNwZW5kZWQsIGl0IGhhc24ndCB0aW1lZCBvdXQsIGFuZCB0aGVyZSdzIG5vXG4gICAgICAgICAgICAvLyBsb3dlciBwcmlvcml0eSB3b3JrIHRvIGRvLiBJbnN0ZWFkIG9mIGNvbW1pdHRpbmcgdGhlIGZhbGxiYWNrXG4gICAgICAgICAgICAvLyBpbW1lZGlhdGVseSwgd2FpdCBmb3IgbW9yZSBkYXRhIHRvIGFycml2ZS5cblxuXG4gICAgICAgICAgICByb290LnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoY29tbWl0Um9vdC5iaW5kKG51bGwsIHJvb3QpLCBtc1VudGlsVGltZW91dCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVGhlIHdvcmsgZXhwaXJlZC4gQ29tbWl0IGltbWVkaWF0ZWx5LlxuXG5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk6XG4gICAgICB7XG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyhsYW5lcykpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgdHJhbnNpdGlvbiwgc28gd2Ugc2hvdWxkIGV4aXQgd2l0aG91dCBjb21taXR0aW5nIGFcbiAgICAgICAgICAvLyBwbGFjZWhvbGRlciBhbmQgd2l0aG91dCBzY2hlZHVsaW5nIGEgdGltZW91dC4gRGVsYXkgaW5kZWZpbml0ZWx5XG4gICAgICAgICAgLy8gdW50aWwgd2UgcmVjZWl2ZSBtb3JlIGRhdGEuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB0cmFuc2l0aW9uLCBidXQgd2UgZGlkIHRyaWdnZXIgYW4gYXZvaWRlZCBzdGF0ZS5cbiAgICAgICAgICAvLyBTY2hlZHVsZSBhIHBsYWNlaG9sZGVyIHRvIGRpc3BsYXkgYWZ0ZXIgYSBzaG9ydCBkZWxheSwgdXNpbmcgdGhlIEp1c3RcbiAgICAgICAgICAvLyBOb3RpY2VhYmxlIERpZmZlcmVuY2UuXG4gICAgICAgICAgLy8gVE9ETzogSXMgdGhlIEpORCBvcHRpbWl6YXRpb24gd29ydGggdGhlIGFkZGVkIGNvbXBsZXhpdHk/IElmIHRoaXMgaXNcbiAgICAgICAgICAvLyB0aGUgb25seSByZWFzb24gd2UgdHJhY2sgdGhlIGV2ZW50IHRpbWUsIHRoZW4gcHJvYmFibHkgbm90LlxuICAgICAgICAgIC8vIENvbnNpZGVyIHJlbW92aW5nLlxuICAgICAgICAgIHZhciBtb3N0UmVjZW50RXZlbnRUaW1lID0gZ2V0TW9zdFJlY2VudEV2ZW50VGltZShyb290LCBsYW5lcyk7XG4gICAgICAgICAgdmFyIGV2ZW50VGltZU1zID0gbW9zdFJlY2VudEV2ZW50VGltZTtcbiAgICAgICAgICB2YXIgdGltZUVsYXBzZWRNcyA9IG5vdygpIC0gZXZlbnRUaW1lTXM7XG5cbiAgICAgICAgICB2YXIgX21zVW50aWxUaW1lb3V0ID0gam5kKHRpbWVFbGFwc2VkTXMpIC0gdGltZUVsYXBzZWRNczsgLy8gRG9uJ3QgYm90aGVyIHdpdGggYSB2ZXJ5IHNob3J0IHN1c3BlbnNlIHRpbWUuXG5cblxuICAgICAgICAgIGlmIChfbXNVbnRpbFRpbWVvdXQgPiAxMCkge1xuICAgICAgICAgICAgLy8gSW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSBmYWxsYmFjayBpbW1lZGlhdGVseSwgd2FpdCBmb3IgbW9yZSBkYXRhXG4gICAgICAgICAgICAvLyB0byBhcnJpdmUuXG4gICAgICAgICAgICByb290LnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoY29tbWl0Um9vdC5iaW5kKG51bGwsIHJvb3QpLCBfbXNVbnRpbFRpbWVvdXQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIENvbW1pdCB0aGUgcGxhY2Vob2xkZXIuXG5cblxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgUm9vdENvbXBsZXRlZDpcbiAgICAgIHtcbiAgICAgICAgLy8gVGhlIHdvcmsgY29tcGxldGVkLiBSZWFkeSB0byBjb21taXQuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gcm9vdCBleGl0IHN0YXR1cy5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgc3VzcGVuZGVkTGFuZXMpIHtcbiAgLy8gV2hlbiBzdXNwZW5kaW5nLCB3ZSBzaG91bGQgYWx3YXlzIGV4Y2x1ZGUgbGFuZXMgdGhhdCB3ZXJlIHBpbmdlZCBvciAobW9yZVxuICAvLyByYXJlbHksIHNpbmNlIHdlIHRyeSB0byBhdm9pZCBpdCkgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgLy8gVE9ETzogTG9sIG1heWJlIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvIGZhY3RvciB0aGlzIGJlc2lkZXMgdGhpc1xuICAvLyBvYm5veGlvdXNseSBuYW1lZCBmdW5jdGlvbiA6KVxuICBzdXNwZW5kZWRMYW5lcyA9IHJlbW92ZUxhbmVzKHN1c3BlbmRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyk7XG4gIHN1c3BlbmRlZExhbmVzID0gcmVtb3ZlTGFuZXMoc3VzcGVuZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyk7XG4gIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIHN1c3BlbmRlZExhbmVzKTtcbn0gLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHN5bmNocm9ub3VzIHRhc2tzIHRoYXQgZG9uJ3QgZ29cbi8vIHRocm91Z2ggU2NoZWR1bGVyXG5cblxuZnVuY3Rpb24gcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QpIHtcbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICB2YXIgbGFuZXM7XG4gIHZhciBleGl0U3RhdHVzO1xuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiYgaW5jbHVkZXNTb21lTGFuZShyb290LmV4cGlyZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpKSB7XG4gICAgLy8gVGhlcmUncyBhIHBhcnRpYWwgdHJlZSwgYW5kIGF0IGxlYXN0IG9uZSBvZiBpdHMgbGFuZXMgaGFzIGV4cGlyZWQuIEZpbmlzaFxuICAgIC8vIHJlbmRlcmluZyBpdCBiZWZvcmUgcmVuZGVyaW5nIHRoZSByZXN0IG9mIHRoZSBleHBpcmVkIHdvcmsuXG4gICAgbGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcztcbiAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuXG4gICAgaWYgKGluY2x1ZGVzU29tZUxhbmUod29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKSkge1xuICAgICAgLy8gVGhlIHJlbmRlciBpbmNsdWRlZCBsYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgIC8vIEZvciBleGFtcGxlLCB3aGVuIHVuaGlkaW5nIGEgaGlkZGVuIHRyZWUsIHdlIGluY2x1ZGUgYWxsIHRoZSBsYW5lc1xuICAgICAgLy8gdGhhdCB3ZXJlIHByZXZpb3VzbHkgc2tpcHBlZCB3aGVuIHRoZSB0cmVlIHdhcyBoaWRkZW4uIFRoYXQgc2V0IG9mXG4gICAgICAvLyBsYW5lcyBpcyBhIHN1cGVyc2V0IG9mIHRoZSBsYW5lcyB3ZSBzdGFydGVkIHJlbmRlcmluZyB3aXRoLlxuICAgICAgLy9cbiAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIG9ubHkgaGFwcGVucyB3aGVuIHBhcnQgb2YgdGhlIHRyZWUgaXMgcmVuZGVyZWRcbiAgICAgIC8vIGNvbmN1cnJlbnRseS4gSWYgdGhlIHdob2xlIHRyZWUgaXMgcmVuZGVyZWQgc3luY2hyb25vdXNseSwgdGhlbiB0aGVyZVxuICAgICAgLy8gYXJlIG5vIGludGVybGVhdmVkIGV2ZW50cy5cbiAgICAgIGxhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIGxhbmVzKTtcbiAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIE5vTGFuZXMpO1xuICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gIH1cblxuICBpZiAocm9vdC50YWcgIT09IExlZ2FjeVJvb3QgJiYgZXhpdFN0YXR1cyA9PT0gUm9vdEVycm9yZWQpIHtcbiAgICBleGVjdXRpb25Db250ZXh0IHw9IFJldHJ5QWZ0ZXJFcnJvcjsgLy8gSWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGh5ZHJhdGlvbixcbiAgICAvLyBkaXNjYXJkIHNlcnZlciByZXNwb25zZSBhbmQgZmFsbCBiYWNrIHRvIGNsaWVudCBzaWRlIHJlbmRlci5cblxuICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgIHJvb3QuaHlkcmF0ZSA9IGZhbHNlO1xuICAgICAgY2xlYXJDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICB9IC8vIElmIHNvbWV0aGluZyB0aHJldyBhbiBlcnJvciwgdHJ5IHJlbmRlcmluZyBvbmUgbW9yZSB0aW1lLiBXZSdsbCByZW5kZXJcbiAgICAvLyBzeW5jaHJvbm91c2x5IHRvIGJsb2NrIGNvbmN1cnJlbnQgZGF0YSBtdXRhdGlvbnMsIGFuZCB3ZSdsbCBpbmNsdWRlc1xuICAgIC8vIGFsbCBwZW5kaW5nIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLiBJZiBpdCBzdGlsbCBmYWlscyBhZnRlciB0aGUgc2Vjb25kXG4gICAgLy8gYXR0ZW1wdCwgd2UnbGwgZ2l2ZSB1cCBhbmQgY29tbWl0IHRoZSByZXN1bHRpbmcgdHJlZS5cblxuXG4gICAgbGFuZXMgPSBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihyb290KTtcblxuICAgIGlmIChsYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEZhdGFsRXJyb3JlZCkge1xuICAgIHZhciBmYXRhbEVycm9yID0gd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvcjtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICAgIHRocm93IGZhdGFsRXJyb3I7XG4gIH0gLy8gV2Ugbm93IGhhdmUgYSBjb25zaXN0ZW50IHRyZWUuIEJlY2F1c2UgdGhpcyBpcyBhIHN5bmMgcmVuZGVyLCB3ZVxuICAvLyB3aWxsIGNvbW1pdCBpdCBldmVuIGlmIHNvbWV0aGluZyBzdXNwZW5kZWQuXG5cblxuICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcms7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICBjb21taXRSb290KHJvb3QpOyAvLyBCZWZvcmUgZXhpdGluZywgbWFrZSBzdXJlIHRoZXJlJ3MgYSBjYWxsYmFjayBzY2hlZHVsZWQgZm9yIHRoZSBuZXh0XG4gIC8vIHBlbmRpbmcgbGV2ZWwuXG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBmbHVzaERpc2NyZXRlVXBkYXRlcygpIHtcbiAgLy8gVE9ETzogU2hvdWxkIGJlIGFibGUgdG8gZmx1c2ggaW5zaWRlIGJhdGNoZWRVcGRhdGVzLCBidXQgbm90IGluc2lkZSBgYWN0YC5cbiAgLy8gSG93ZXZlciwgYGFjdGAgdXNlcyBgYmF0Y2hlZFVwZGF0ZXNgLCBzbyB0aGVyZSdzIG5vIHdheSB0byBkaXN0aW5ndWlzaFxuICAvLyB0aG9zZSB0d28gY2FzZXMuIE5lZWQgdG8gZml4IHRoaXMgYmVmb3JlIGV4cG9zaW5nIGZsdXNoRGlzY3JldGVVcGRhdGVzXG4gIC8vIGFzIGEgcHVibGljIEFQSS5cbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKEJhdGNoZWRDb250ZXh0IHwgUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KSB7XG4gICAge1xuICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCkge1xuICAgICAgICBlcnJvcigndW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgJyArICdhbHJlYWR5IHJlbmRlcmluZy4nKTtcbiAgICAgIH1cbiAgICB9IC8vIFdlJ3JlIGFscmVhZHkgcmVuZGVyaW5nLCBzbyB3ZSBjYW4ndCBzeW5jaHJvbm91c2x5IGZsdXNoIHBlbmRpbmcgd29yay5cbiAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGEgbmVzdGVkIGV2ZW50IGRpc3BhdGNoIHRyaWdnZXJlZCBieSBhIGxpZmVjeWNsZS9lZmZlY3QsXG4gICAgLy8gbGlrZSBgZWwuZm9jdXMoKWAuIEV4aXQuXG5cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGZsdXNoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcygpOyAvLyBJZiB0aGUgZGlzY3JldGUgdXBkYXRlcyBzY2hlZHVsZWQgcGFzc2l2ZSBlZmZlY3RzLCBmbHVzaCB0aGVtIG5vdyBzbyB0aGF0XG4gIC8vIHRoZXkgZmlyZSBiZWZvcmUgdGhlIG5leHQgc2VyaWFsIGV2ZW50LlxuXG4gIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hQZW5kaW5nRGlzY3JldGVVcGRhdGVzKCkge1xuICBpZiAocm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyAhPT0gbnVsbCkge1xuICAgIC8vIEZvciBlYWNoIHJvb3Qgd2l0aCBwZW5kaW5nIGRpc2NyZXRlIHVwZGF0ZXMsIHNjaGVkdWxlIGEgY2FsbGJhY2sgdG9cbiAgICAvLyBpbW1lZGlhdGVseSBmbHVzaCB0aGVtLlxuICAgIHZhciByb290cyA9IHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXM7XG4gICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9IG51bGw7XG4gICAgcm9vdHMuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkge1xuICAgICAgbWFya0Rpc2NyZXRlVXBkYXRlc0V4cGlyZWQocm9vdCk7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICAgIH0pO1xuICB9IC8vIE5vdyBmbHVzaCB0aGUgaW1tZWRpYXRlIHF1ZXVlLlxuXG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xufVxuXG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyQxKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQmF0Y2hlZENvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oYSk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gYmF0Y2hlZEV2ZW50VXBkYXRlcyQxKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gRXZlbnRDb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpc2NyZXRlVXBkYXRlcyQxKGZuLCBhLCBiLCBjLCBkKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gRGlzY3JldGVFdmVudENvbnRleHQ7XG5cbiAge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEoVXNlckJsb2NraW5nUHJpb3JpdHkkMiwgZm4uYmluZChudWxsLCBhLCBiLCBjLCBkKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdW5iYXRjaGVkVXBkYXRlcyhmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0ICY9IH5CYXRjaGVkQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBMZWdhY3lVbmJhdGNoZWRDb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGZsdXNoU3luYyhmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuXG4gIGlmICgocHJldkV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KSB7XG4gICAge1xuICAgICAgZXJyb3IoJ2ZsdXNoU3luYyB3YXMgY2FsbGVkIGZyb20gaW5zaWRlIGEgbGlmZWN5Y2xlIG1ldGhvZC4gUmVhY3QgY2Fubm90ICcgKyAnZmx1c2ggd2hlbiBSZWFjdCBpcyBhbHJlYWR5IHJlbmRlcmluZy4gQ29uc2lkZXIgbW92aW5nIHRoaXMgY2FsbCB0byAnICsgJ2Egc2NoZWR1bGVyIHRhc2sgb3IgbWljcm8gdGFzay4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oYSk7XG4gIH1cblxuICBleGVjdXRpb25Db250ZXh0IHw9IEJhdGNoZWRDb250ZXh0O1xuXG4gIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHJldHVybiBydW5XaXRoUHJpb3JpdHkkMShJbW1lZGlhdGVQcmlvcml0eSQxLCBmbi5iaW5kKG51bGwsIGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDsgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaC5cbiAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHdpbGwgaGFwcGVuIGV2ZW4gaWYgYmF0Y2hlZFVwZGF0ZXMgaXMgaGlnaGVyIHVwXG4gICAgICAvLyB0aGUgc3RhY2suXG5cbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHB1c2hSZW5kZXJMYW5lcyhmaWJlciwgbGFuZXMpIHtcbiAgcHVzaChzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IsIHN1YnRyZWVSZW5kZXJMYW5lcywgZmliZXIpO1xuICBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBtZXJnZUxhbmVzKHN1YnRyZWVSZW5kZXJMYW5lcywgbGFuZXMpO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzLCBsYW5lcyk7XG59XG5mdW5jdGlvbiBwb3BSZW5kZXJMYW5lcyhmaWJlcikge1xuICBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IuY3VycmVudDtcbiAgcG9wKHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcykge1xuICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHZhciB0aW1lb3V0SGFuZGxlID0gcm9vdC50aW1lb3V0SGFuZGxlO1xuXG4gIGlmICh0aW1lb3V0SGFuZGxlICE9PSBub1RpbWVvdXQpIHtcbiAgICAvLyBUaGUgcm9vdCBwcmV2aW91cyBzdXNwZW5kZWQgYW5kIHNjaGVkdWxlZCBhIHRpbWVvdXQgdG8gY29tbWl0IGEgZmFsbGJhY2tcbiAgICAvLyBzdGF0ZS4gTm93IHRoYXQgd2UgaGF2ZSBhZGRpdGlvbmFsIHdvcmssIGNhbmNlbCB0aGUgdGltZW91dC5cbiAgICByb290LnRpbWVvdXRIYW5kbGUgPSBub1RpbWVvdXQ7IC8vICRGbG93Rml4TWUgQ29tcGxhaW5zIG5vVGltZW91dCBpcyBub3QgYSBUaW1lb3V0SUQsIGRlc3BpdGUgdGhlIGNoZWNrIGFib3ZlXG5cbiAgICBjYW5jZWxUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICB9XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgdmFyIGludGVycnVwdGVkV29yayA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcblxuICAgIHdoaWxlIChpbnRlcnJ1cHRlZFdvcmsgIT09IG51bGwpIHtcbiAgICAgIHVud2luZEludGVycnVwdGVkV29yayhpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgaW50ZXJydXB0ZWRXb3JrID0gaW50ZXJydXB0ZWRXb3JrLnJldHVybjtcbiAgICB9XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSByb290O1xuICB3b3JrSW5Qcm9ncmVzcyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKHJvb3QuY3VycmVudCwgbnVsbCk7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gc3VidHJlZVJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IGxhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluY29tcGxldGU7XG4gIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBOb0xhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMgPSBOb0xhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IE5vTGFuZXM7XG5cbiAge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5kaXNjYXJkUGVuZGluZ1dhcm5pbmdzKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpIHtcbiAgZG8ge1xuICAgIHZhciBlcnJvcmVkV29yayA9IHdvcmtJblByb2dyZXNzO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlc2V0IG1vZHVsZS1sZXZlbCBzdGF0ZSB0aGF0IHdhcyBzZXQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIHJlc2V0SG9va3NBZnRlclRocm93KCk7XG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpOyAvLyBUT0RPOiBJIGZvdW5kIGFuZCBhZGRlZCB0aGlzIG1pc3NpbmcgbGluZSB3aGlsZSBpbnZlc3RpZ2F0aW5nIGFcbiAgICAgIC8vIHNlcGFyYXRlIGlzc3VlLiBXcml0ZSBhIHJlZ3Jlc3Npb24gdGVzdCB1c2luZyBzdHJpbmcgcmVmcy5cblxuICAgICAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDtcblxuICAgICAgaWYgKGVycm9yZWRXb3JrID09PSBudWxsIHx8IGVycm9yZWRXb3JrLnJldHVybiA9PT0gbnVsbCkge1xuICAgICAgICAvLyBFeHBlY3RlZCB0byBiZSB3b3JraW5nIG9uIGEgbm9uLXJvb3QgZmliZXIuIFRoaXMgaXMgYSBmYXRhbCBlcnJvclxuICAgICAgICAvLyBiZWNhdXNlIHRoZXJlJ3Mgbm8gYW5jZXN0b3IgdGhhdCBjYW4gaGFuZGxlIGl0OyB0aGUgcm9vdCBpc1xuICAgICAgICAvLyBzdXBwb3NlZCB0byBjYXB0dXJlIGFsbCBlcnJvcnMgdGhhdCB3ZXJlbid0IGNhdWdodCBieSBhbiBlcnJvclxuICAgICAgICAvLyBib3VuZGFyeS5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RGYXRhbEVycm9yZWQ7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSB0aHJvd25WYWx1ZTsgLy8gU2V0IGB3b3JrSW5Qcm9ncmVzc2AgdG8gbnVsbC4gVGhpcyByZXByZXNlbnRzIGFkdmFuY2luZyB0byB0aGUgbmV4dFxuICAgICAgICAvLyBzaWJsaW5nLCBvciB0aGUgcGFyZW50IGlmIHRoZXJlIGFyZSBubyBzaWJsaW5ncy4gQnV0IHNpbmNlIHRoZSByb290XG4gICAgICAgIC8vIGhhcyBubyBzaWJsaW5ncyBub3IgYSBwYXJlbnQsIHdlIHNldCBpdCB0byBudWxsLiBVc3VhbGx5IHRoaXMgaXNcbiAgICAgICAgLy8gaGFuZGxlZCBieSBgY29tcGxldGVVbml0T2ZXb3JrYCBvciBgdW53aW5kV29ya2AsIGJ1dCBzaW5jZSB3ZSdyZVxuICAgICAgICAvLyBpbnRlbnRpb25hbGx5IG5vdCBjYWxsaW5nIHRob3NlLCB3ZSBuZWVkIHNldCBpdCBoZXJlLlxuICAgICAgICAvLyBUT0RPOiBDb25zaWRlciBjYWxsaW5nIGB1bndpbmRXb3JrYCB0byBwb3AgdGhlIGNvbnRleHRzLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lciAmJiBlcnJvcmVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgLy8gUmVjb3JkIHRoZSB0aW1lIHNwZW50IHJlbmRlcmluZyBiZWZvcmUgYW4gZXJyb3Igd2FzIHRocm93bi4gVGhpc1xuICAgICAgICAvLyBhdm9pZHMgaW5hY2N1cmF0ZSBQcm9maWxlciBkdXJhdGlvbnMgaW4gdGhlIGNhc2Ugb2YgYVxuICAgICAgICAvLyBzdXNwZW5kZWQgcmVuZGVyLlxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGVycm9yZWRXb3JrLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dFeGNlcHRpb24ocm9vdCwgZXJyb3JlZFdvcmsucmV0dXJuLCBlcnJvcmVkV29yaywgdGhyb3duVmFsdWUsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICAgIGNvbXBsZXRlVW5pdE9mV29yayhlcnJvcmVkV29yayk7XG4gICAgfSBjYXRjaCAoeWV0QW5vdGhlclRocm93blZhbHVlKSB7XG4gICAgICAvLyBTb21ldGhpbmcgaW4gdGhlIHJldHVybiBwYXRoIGFsc28gdGhyZXcuXG4gICAgICB0aHJvd25WYWx1ZSA9IHlldEFub3RoZXJUaHJvd25WYWx1ZTtcblxuICAgICAgaWYgKHdvcmtJblByb2dyZXNzID09PSBlcnJvcmVkV29yayAmJiBlcnJvcmVkV29yayAhPT0gbnVsbCkge1xuICAgICAgICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGhhcyBhbHJlYWR5IGVycm9yZWQsIHRoZW4gd2UgaGFkIHRyb3VibGUgcHJvY2Vzc2luZ1xuICAgICAgICAvLyB0aGUgZXJyb3IuIEJ1YmJsZSBpdCB0byB0aGUgbmV4dCBib3VuZGFyeS5cbiAgICAgICAgZXJyb3JlZFdvcmsgPSBlcnJvcmVkV29yay5yZXR1cm47XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gZXJyb3JlZFdvcms7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcmVkV29yayA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgfVxuXG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIFJldHVybiB0byB0aGUgbm9ybWFsIHdvcmsgbG9vcC5cblxuXG4gICAgcmV0dXJuO1xuICB9IHdoaWxlICh0cnVlKTtcbn1cblxuZnVuY3Rpb24gcHVzaERpc3BhdGNoZXIoKSB7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMi5jdXJyZW50O1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICBpZiAocHJldkRpc3BhdGNoZXIgPT09IG51bGwpIHtcbiAgICAvLyBUaGUgUmVhY3QgaXNvbW9ycGhpYyBwYWNrYWdlIGRvZXMgbm90IGluY2x1ZGUgYSBkZWZhdWx0IGRpc3BhdGNoZXIuXG4gICAgLy8gSW5zdGVhZCB0aGUgZmlyc3QgcmVuZGVyZXIgd2lsbCBsYXppbHkgYXR0YWNoIG9uZSwgaW4gb3JkZXIgdG8gZ2l2ZVxuICAgIC8vIG5pY2VyIGVycm9yIG1lc3NhZ2VzLlxuICAgIHJldHVybiBDb250ZXh0T25seURpc3BhdGNoZXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHByZXZEaXNwYXRjaGVyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpIHtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gcHVzaEludGVyYWN0aW9ucyhyb290KSB7XG4gIHtcbiAgICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgICB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zO1xuICAgIHJldHVybiBwcmV2SW50ZXJhY3Rpb25zO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKSB7XG4gIHtcbiAgICB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtDb21taXRUaW1lT2ZGYWxsYmFjaygpIHtcbiAgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IG5vdygpO1xufVxuZnVuY3Rpb24gbWFya1NraXBwZWRVcGRhdGVMYW5lcyhsYW5lKSB7XG4gIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IG1lcmdlTGFuZXMobGFuZSwgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzKTtcbn1cbmZ1bmN0aW9uIHJlbmRlckRpZFN1c3BlbmQoKSB7XG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZSkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkO1xuICB9XG59XG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGUgfHwgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZCkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkV2l0aERlbGF5O1xuICB9IC8vIENoZWNrIGlmIHRoZXJlIGFyZSB1cGRhdGVzIHRoYXQgd2Ugc2tpcHBlZCB0cmVlIHRoYXQgbWlnaHQgaGF2ZSB1bmJsb2NrZWRcbiAgLy8gdGhpcyByZW5kZXIuXG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSBudWxsICYmIChpbmNsdWRlc05vbklkbGVXb3JrKHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcykgfHwgaW5jbHVkZXNOb25JZGxlV29yayh3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpKSkge1xuICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgcmVuZGVyIGFzIHN1c3BlbmRlZCBzbyB0aGF0IHdlIHN3aXRjaCB0byB3b3JraW5nIG9uXG4gICAgLy8gdGhlIHVwZGF0ZXMgdGhhdCB3ZXJlIHNraXBwZWQuIFVzdWFsbHkgd2Ugb25seSBzdXNwZW5kIGF0IHRoZSBlbmQgb2ZcbiAgICAvLyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIC8vIFRPRE86IFdlIHNob3VsZCBwcm9iYWJseSBhbHdheXMgbWFyayB0aGUgcm9vdCBhcyBzdXNwZW5kZWQgaW1tZWRpYXRlbHlcbiAgICAvLyAoaW5zaWRlIHRoaXMgZnVuY3Rpb24pLCBzaW5jZSBieSBzdXNwZW5kaW5nIGF0IHRoZSBlbmQgb2YgdGhlIHJlbmRlclxuICAgIC8vIHBoYXNlIGludHJvZHVjZXMgYSBwb3RlbnRpYWwgbWlzdGFrZSB3aGVyZSB3ZSBzdXNwZW5kIGxhbmVzIHRoYXQgd2VyZVxuICAgIC8vIHBpbmdlZCBvciB1cGRhdGVkIHdoaWxlIHdlIHdlcmUgcmVuZGVyaW5nLlxuICAgIG1hcmtSb290U3VzcGVuZGVkJDEod29ya0luUHJvZ3Jlc3NSb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbmRlckRpZEVycm9yKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAhPT0gUm9vdENvbXBsZXRlZCkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RXJyb3JlZDtcbiAgfVxufSAvLyBDYWxsZWQgZHVyaW5nIHJlbmRlciB0byBkZXRlcm1pbmUgaWYgYW55dGhpbmcgaGFzIHN1c3BlbmRlZC5cbi8vIFJldHVybnMgZmFsc2UgaWYgd2UncmUgbm90IHN1cmUuXG5cbmZ1bmN0aW9uIHJlbmRlckhhc05vdFN1c3BlbmRlZFlldCgpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGVycm9yZWQgb3IgY29tcGxldGVkLCB3ZSBjYW4ndCByZWFsbHkgYmUgc3VyZSxcbiAgLy8gc28gdGhvc2UgYXJlIGZhbHNlLlxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGU7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKTsgLy8gSWYgdGhlIHJvb3Qgb3IgbGFuZXMgaGF2ZSBjaGFuZ2VkLCB0aHJvdyBvdXQgdGhlIGV4aXN0aW5nIHN0YWNrXG4gIC8vIGFuZCBwcmVwYXJlIGEgZnJlc2ggb25lLiBPdGhlcndpc2Ugd2UnbGwgY29udGludWUgd2hlcmUgd2UgbGVmdCBvZmYuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXMpIHtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gICAgc3RhcnRXb3JrT25QZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTtcblxuICBkbyB7XG4gICAgdHJ5IHtcbiAgICAgIHdvcmtMb29wU3luYygpO1xuICAgICAgYnJlYWs7XG4gICAgfSBjYXRjaCAodGhyb3duVmFsdWUpIHtcbiAgICAgIGhhbmRsZUVycm9yKHJvb3QsIHRocm93blZhbHVlKTtcbiAgICB9XG4gIH0gd2hpbGUgKHRydWUpO1xuXG4gIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuXG4gIHtcbiAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gIH1cblxuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgYSBzeW5jIHJlbmRlciwgc28gd2Ugc2hvdWxkIGhhdmUgZmluaXNoZWQgdGhlIHdob2xlIHRyZWUuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgY29tbWl0IGFuIGluY29tcGxldGUgcm9vdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbn0gLy8gVGhlIHdvcmsgbG9vcCBpcyBhbiBleHRyZW1lbHkgaG90IHBhdGguIFRlbGwgQ2xvc3VyZSBub3QgdG8gaW5saW5lIGl0LlxuXG4vKiogQG5vaW5saW5lICovXG5cblxuZnVuY3Rpb24gd29ya0xvb3BTeW5jKCkge1xuICAvLyBBbHJlYWR5IHRpbWVkIG91dCwgc28gcGVyZm9ybSB3b3JrIHdpdGhvdXQgY2hlY2tpbmcgaWYgd2UgbmVlZCB0byB5aWVsZC5cbiAgd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgcGVyZm9ybVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKTsgLy8gSWYgdGhlIHJvb3Qgb3IgbGFuZXMgaGF2ZSBjaGFuZ2VkLCB0aHJvdyBvdXQgdGhlIGV4aXN0aW5nIHN0YWNrXG4gIC8vIGFuZCBwcmVwYXJlIGEgZnJlc2ggb25lLiBPdGhlcndpc2Ugd2UnbGwgY29udGludWUgd2hlcmUgd2UgbGVmdCBvZmYuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXMpIHtcbiAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICAgIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gIH1cblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7XG5cbiAgZG8ge1xuICAgIHRyeSB7XG4gICAgICB3b3JrTG9vcENvbmN1cnJlbnQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKHRocm93blZhbHVlKSB7XG4gICAgICBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSk7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICB9XG5cbiAgcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcik7XG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuXG4gICAgcmV0dXJuIFJvb3RJbmNvbXBsZXRlO1xuICB9IGVsc2Uge1xuXG5cbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gUmV0dXJuIHRoZSBmaW5hbCBleGl0IHN0YXR1cy5cblxuICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xuICB9XG59XG4vKiogQG5vaW5saW5lICovXG5cblxuZnVuY3Rpb24gd29ya0xvb3BDb25jdXJyZW50KCkge1xuICAvLyBQZXJmb3JtIHdvcmsgdW50aWwgU2NoZWR1bGVyIGFza3MgdXMgdG8geWllbGRcbiAgd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsICYmICFzaG91bGRZaWVsZCgpKSB7XG4gICAgcGVyZm9ybVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBlcmZvcm1Vbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS4gSWRlYWxseVxuICAvLyBub3RoaW5nIHNob3VsZCByZWx5IG9uIHRoaXMsIGJ1dCByZWx5aW5nIG9uIGl0IGhlcmUgbWVhbnMgdGhhdCB3ZSBkb24ndFxuICAvLyBuZWVkIGFuIGFkZGl0aW9uYWwgZmllbGQgb24gdGhlIHdvcmsgaW4gcHJvZ3Jlc3MuXG4gIHZhciBjdXJyZW50ID0gdW5pdE9mV29yay5hbHRlcm5hdGU7XG4gIHNldEN1cnJlbnRGaWJlcih1bml0T2ZXb3JrKTtcbiAgdmFyIG5leHQ7XG5cbiAgaWYgKCAodW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICBzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayk7XG4gICAgbmV4dCA9IGJlZ2luV29yayQxKGN1cnJlbnQsIHVuaXRPZldvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YSh1bml0T2ZXb3JrLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0ID0gYmVnaW5Xb3JrJDEoY3VycmVudCwgdW5pdE9mV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gIHVuaXRPZldvcmsubWVtb2l6ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuXG4gIGlmIChuZXh0ID09PSBudWxsKSB7XG4gICAgLy8gSWYgdGhpcyBkb2Vzbid0IHNwYXduIG5ldyB3b3JrLCBjb21wbGV0ZSB0aGUgY3VycmVudCB3b3JrLlxuICAgIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKTtcbiAgfSBlbHNlIHtcbiAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gIH1cblxuICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAvLyBBdHRlbXB0IHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50IHVuaXQgb2Ygd29yaywgdGhlbiBtb3ZlIHRvIHRoZSBuZXh0XG4gIC8vIHNpYmxpbmcuIElmIHRoZXJlIGFyZSBubyBtb3JlIHNpYmxpbmdzLCByZXR1cm4gdG8gdGhlIHBhcmVudCBmaWJlci5cbiAgdmFyIGNvbXBsZXRlZFdvcmsgPSB1bml0T2ZXb3JrO1xuXG4gIGRvIHtcbiAgICAvLyBUaGUgY3VycmVudCwgZmx1c2hlZCwgc3RhdGUgb2YgdGhpcyBmaWJlciBpcyB0aGUgYWx0ZXJuYXRlLiBJZGVhbGx5XG4gICAgLy8gbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGlzLCBidXQgcmVseWluZyBvbiBpdCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3RcbiAgICAvLyBuZWVkIGFuIGFkZGl0aW9uYWwgZmllbGQgb24gdGhlIHdvcmsgaW4gcHJvZ3Jlc3MuXG4gICAgdmFyIGN1cnJlbnQgPSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZTtcbiAgICB2YXIgcmV0dXJuRmliZXIgPSBjb21wbGV0ZWRXb3JrLnJldHVybjsgLy8gQ2hlY2sgaWYgdGhlIHdvcmsgY29tcGxldGVkIG9yIGlmIHNvbWV0aGluZyB0aHJldy5cblxuICAgIGlmICgoY29tcGxldGVkV29yay5mbGFncyAmIEluY29tcGxldGUpID09PSBOb0ZsYWdzKSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoY29tcGxldGVkV29yayk7XG4gICAgICB2YXIgbmV4dCA9IHZvaWQgMDtcblxuICAgICAgaWYgKCAoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgbmV4dCA9IGNvbXBsZXRlV29yayhjdXJyZW50LCBjb21wbGV0ZWRXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRQcm9maWxlclRpbWVyKGNvbXBsZXRlZFdvcmspO1xuICAgICAgICBuZXh0ID0gY29tcGxldGVXb3JrKGN1cnJlbnQsIGNvbXBsZXRlZFdvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7IC8vIFVwZGF0ZSByZW5kZXIgZHVyYXRpb24gYXNzdW1pbmcgd2UgZGlkbid0IGVycm9yLlxuXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoY29tcGxldGVkV29yaywgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuXG4gICAgICBpZiAobmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBDb21wbGV0aW5nIHRoaXMgZmliZXIgc3Bhd25lZCBuZXcgd29yay4gV29yayBvbiB0aGF0IG5leHQuXG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbmV4dDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXNldENoaWxkTGFuZXMoY29tcGxldGVkV29yayk7XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCAmJiAvLyBEbyBub3QgYXBwZW5kIGVmZmVjdHMgdG8gcGFyZW50cyBpZiBhIHNpYmxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlXG4gICAgICAocmV0dXJuRmliZXIuZmxhZ3MgJiBJbmNvbXBsZXRlKSA9PT0gTm9GbGFncykge1xuICAgICAgICAvLyBBcHBlbmQgYWxsIHRoZSBlZmZlY3RzIG9mIHRoZSBzdWJ0cmVlIGFuZCB0aGlzIGZpYmVyIG9udG8gdGhlIGVmZmVjdFxuICAgICAgICAvLyBsaXN0IG9mIHRoZSBwYXJlbnQuIFRoZSBjb21wbGV0aW9uIG9yZGVyIG9mIHRoZSBjaGlsZHJlbiBhZmZlY3RzIHRoZVxuICAgICAgICAvLyBzaWRlLWVmZmVjdCBvcmRlci5cbiAgICAgICAgaWYgKHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrLmZpcnN0RWZmZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZFdvcmsubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjb21wbGV0ZWRXb3JrLmZpcnN0RWZmZWN0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrLmxhc3RFZmZlY3Q7XG4gICAgICAgIH0gLy8gSWYgdGhpcyBmaWJlciBoYWQgc2lkZS1lZmZlY3RzLCB3ZSBhcHBlbmQgaXQgQUZURVIgdGhlIGNoaWxkcmVuJ3NcbiAgICAgICAgLy8gc2lkZS1lZmZlY3RzLiBXZSBjYW4gcGVyZm9ybSBjZXJ0YWluIHNpZGUtZWZmZWN0cyBlYXJsaWVyIGlmIG5lZWRlZCxcbiAgICAgICAgLy8gYnkgZG9pbmcgbXVsdGlwbGUgcGFzc2VzIG92ZXIgdGhlIGVmZmVjdCBsaXN0LiBXZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIHNjaGVkdWxlIG91ciBvd24gc2lkZS1lZmZlY3Qgb24gb3VyIG93biBsaXN0IGJlY2F1c2UgaWYgZW5kIHVwXG4gICAgICAgIC8vIHJldXNpbmcgY2hpbGRyZW4gd2UnbGwgc2NoZWR1bGUgdGhpcyBlZmZlY3Qgb250byBpdHNlbGYgc2luY2Ugd2UncmVcbiAgICAgICAgLy8gYXQgdGhlIGVuZC5cblxuXG4gICAgICAgIHZhciBmbGFncyA9IGNvbXBsZXRlZFdvcmsuZmxhZ3M7IC8vIFNraXAgYm90aCBOb1dvcmsgYW5kIFBlcmZvcm1lZFdvcmsgdGFncyB3aGVuIGNyZWF0aW5nIHRoZSBlZmZlY3RcbiAgICAgICAgLy8gbGlzdC4gUGVyZm9ybWVkV29yayBlZmZlY3QgaXMgcmVhZCBieSBSZWFjdCBEZXZUb29scyBidXQgc2hvdWxkbid0IGJlXG4gICAgICAgIC8vIGNvbW1pdHRlZC5cblxuICAgICAgICBpZiAoZmxhZ3MgPiBQZXJmb3JtZWRXb3JrKSB7XG4gICAgICAgICAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gY29tcGxldGVkV29yaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY29tcGxldGVkV29yaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGZpYmVyIGRpZCBub3QgY29tcGxldGUgYmVjYXVzZSBzb21ldGhpbmcgdGhyZXcuIFBvcCB2YWx1ZXMgb2ZmXG4gICAgICAvLyB0aGUgc3RhY2sgd2l0aG91dCBlbnRlcmluZyB0aGUgY29tcGxldGUgcGhhc2UuIElmIHRoaXMgaXMgYSBib3VuZGFyeSxcbiAgICAgIC8vIGNhcHR1cmUgdmFsdWVzIGlmIHBvc3NpYmxlLlxuICAgICAgdmFyIF9uZXh0ID0gdW53aW5kV29yayhjb21wbGV0ZWRXb3JrKTsgLy8gQmVjYXVzZSB0aGlzIGZpYmVyIGRpZCBub3QgY29tcGxldGUsIGRvbid0IHJlc2V0IGl0cyBleHBpcmF0aW9uIHRpbWUuXG5cblxuICAgICAgaWYgKF9uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIElmIGNvbXBsZXRpbmcgdGhpcyB3b3JrIHNwYXduZWQgbmV3IHdvcmssIGRvIHRoYXQgbmV4dC4gV2UnbGwgY29tZVxuICAgICAgICAvLyBiYWNrIGhlcmUgYWdhaW4uXG4gICAgICAgIC8vIFNpbmNlIHdlJ3JlIHJlc3RhcnRpbmcsIHJlbW92ZSBhbnl0aGluZyB0aGF0IGlzIG5vdCBhIGhvc3QgZWZmZWN0XG4gICAgICAgIC8vIGZyb20gdGhlIGVmZmVjdCB0YWcuXG4gICAgICAgIF9uZXh0LmZsYWdzICY9IEhvc3RFZmZlY3RNYXNrO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IF9uZXh0O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIC8vIFJlY29yZCB0aGUgcmVuZGVyIGR1cmF0aW9uIGZvciB0aGUgZmliZXIgdGhhdCBlcnJvcmVkLlxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGNvbXBsZXRlZFdvcmssIGZhbHNlKTsgLy8gSW5jbHVkZSB0aGUgdGltZSBzcGVudCB3b3JraW5nIG9uIGZhaWxlZCBjaGlsZHJlbiBiZWZvcmUgY29udGludWluZy5cblxuICAgICAgICB2YXIgYWN0dWFsRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICB2YXIgY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb24gPSBhY3R1YWxEdXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIC8vIE1hcmsgdGhlIHBhcmVudCBmaWJlciBhcyBpbmNvbXBsZXRlIGFuZCBjbGVhciBpdHMgZWZmZWN0IGxpc3QuXG4gICAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IG51bGw7XG4gICAgICAgIHJldHVybkZpYmVyLmZsYWdzIHw9IEluY29tcGxldGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNpYmxpbmdGaWJlciA9IGNvbXBsZXRlZFdvcmsuc2libGluZztcblxuICAgIGlmIChzaWJsaW5nRmliZXIgIT09IG51bGwpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgd29yayB0byBkbyBpbiB0aGlzIHJldHVybkZpYmVyLCBkbyB0aGF0IG5leHQuXG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHNpYmxpbmdGaWJlcjtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIE90aGVyd2lzZSwgcmV0dXJuIHRvIHRoZSBwYXJlbnRcblxuXG4gICAgY29tcGxldGVkV29yayA9IHJldHVybkZpYmVyOyAvLyBVcGRhdGUgdGhlIG5leHQgdGhpbmcgd2UncmUgd29ya2luZyBvbiBpbiBjYXNlIHNvbWV0aGluZyB0aHJvd3MuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IGNvbXBsZXRlZFdvcms7XG4gIH0gd2hpbGUgKGNvbXBsZXRlZFdvcmsgIT09IG51bGwpOyAvLyBXZSd2ZSByZWFjaGVkIHRoZSByb290LlxuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RDb21wbGV0ZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRDaGlsZExhbmVzKGNvbXBsZXRlZFdvcmspIHtcbiAgaWYgKCAvLyBUT0RPOiBNb3ZlIHRoaXMgY2hlY2sgb3V0IG9mIHRoZSBob3QgcGF0aCBieSBtb3ZpbmcgYHJlc2V0Q2hpbGRMYW5lc2BcbiAgLy8gdG8gc3dpdGNoIHN0YXRlbWVudCBpbiBgY29tcGxldGVXb3JrYC5cbiAgKGNvbXBsZXRlZFdvcmsudGFnID09PSBMZWdhY3lIaWRkZW5Db21wb25lbnQgfHwgY29tcGxldGVkV29yay50YWcgPT09IE9mZnNjcmVlbkNvbXBvbmVudCkgJiYgY29tcGxldGVkV29yay5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmICFpbmNsdWRlc1NvbWVMYW5lKHN1YnRyZWVSZW5kZXJMYW5lcywgT2Zmc2NyZWVuTGFuZSkgJiYgKGNvbXBsZXRlZFdvcmsubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9MYW5lcykge1xuICAgIC8vIFRoZSBjaGlsZHJlbiBvZiB0aGlzIGNvbXBvbmVudCBhcmUgaGlkZGVuLiBEb24ndCBidWJibGUgdGhlaXJcbiAgICAvLyBleHBpcmF0aW9uIHRpbWVzLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBuZXdDaGlsZExhbmVzID0gTm9MYW5lczsgLy8gQnViYmxlIHVwIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUuXG5cbiAgaWYgKCAoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAvLyBJbiBwcm9maWxpbmcgbW9kZSwgcmVzZXRDaGlsZEV4cGlyYXRpb25UaW1lIGlzIGFsc28gdXNlZCB0byByZXNldFxuICAgIC8vIHByb2ZpbGVyIGR1cmF0aW9ucy5cbiAgICB2YXIgYWN0dWFsRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uO1xuICAgIHZhciB0cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5zZWxmQmFzZUR1cmF0aW9uOyAvLyBXaGVuIGEgZmliZXIgaXMgY2xvbmVkLCBpdHMgYWN0dWFsRHVyYXRpb24gaXMgcmVzZXQgdG8gMC4gVGhpcyB2YWx1ZSB3aWxsXG4gICAgLy8gb25seSBiZSB1cGRhdGVkIGlmIHdvcmsgaXMgZG9uZSBvbiB0aGUgZmliZXIgKGkuZS4gaXQgZG9lc24ndCBiYWlsb3V0KS5cbiAgICAvLyBXaGVuIHdvcmsgaXMgZG9uZSwgaXQgc2hvdWxkIGJ1YmJsZSB0byB0aGUgcGFyZW50J3MgYWN0dWFsRHVyYXRpb24uIElmXG4gICAgLy8gdGhlIGZpYmVyIGhhcyBub3QgYmVlbiBjbG9uZWQgdGhvdWdoLCAobWVhbmluZyBubyB3b3JrIHdhcyBkb25lKSwgdGhlblxuICAgIC8vIHRoaXMgdmFsdWUgd2lsbCByZWZsZWN0IHRoZSBhbW91bnQgb2YgdGltZSBzcGVudCB3b3JraW5nIG9uIGEgcHJldmlvdXNcbiAgICAvLyByZW5kZXIuIEluIHRoYXQgY2FzZSBpdCBzaG91bGQgbm90IGJ1YmJsZS4gV2UgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgd2FzXG4gICAgLy8gY2xvbmVkIGJ5IGNvbXBhcmluZyB0aGUgY2hpbGQgcG9pbnRlci5cblxuICAgIHZhciBzaG91bGRCdWJibGVBY3R1YWxEdXJhdGlvbnMgPSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZSA9PT0gbnVsbCB8fCBjb21wbGV0ZWRXb3JrLmNoaWxkICE9PSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZS5jaGlsZDtcbiAgICB2YXIgY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBuZXdDaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhuZXdDaGlsZExhbmVzLCBtZXJnZUxhbmVzKGNoaWxkLmxhbmVzLCBjaGlsZC5jaGlsZExhbmVzKSk7XG5cbiAgICAgIGlmIChzaG91bGRCdWJibGVBY3R1YWxEdXJhdGlvbnMpIHtcbiAgICAgICAgYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIHRyZWVCYXNlRHVyYXRpb24gKz0gY2hpbGQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICB2YXIgaXNUaW1lZE91dFN1c3BlbnNlID0gY29tcGxldGVkV29yay50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIGNvbXBsZXRlZFdvcmsubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcblxuICAgIGlmIChpc1RpbWVkT3V0U3VzcGVuc2UpIHtcbiAgICAgIC8vIERvbid0IGNvdW50IHRpbWUgc3BlbnQgaW4gYSB0aW1lZCBvdXQgU3VzcGVuc2Ugc3VidHJlZSBhcyBwYXJ0IG9mIHRoZSBiYXNlIGR1cmF0aW9uLlxuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgaWYgKHByaW1hcnlDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHRyZWVCYXNlRHVyYXRpb24gLT0gcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uID0gYWN0dWFsRHVyYXRpb247XG4gICAgY29tcGxldGVkV29yay50cmVlQmFzZUR1cmF0aW9uID0gdHJlZUJhc2VEdXJhdGlvbjtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX2NoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgIHdoaWxlIChfY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5ld0NoaWxkTGFuZXMsIG1lcmdlTGFuZXMoX2NoaWxkLmxhbmVzLCBfY2hpbGQuY2hpbGRMYW5lcykpO1xuICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgfVxuICB9XG5cbiAgY29tcGxldGVkV29yay5jaGlsZExhbmVzID0gbmV3Q2hpbGRMYW5lcztcbn1cblxuZnVuY3Rpb24gY29tbWl0Um9vdChyb290KSB7XG4gIHZhciByZW5kZXJQcmlvcml0eUxldmVsID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcbiAgcnVuV2l0aFByaW9yaXR5JDEoSW1tZWRpYXRlUHJpb3JpdHkkMSwgY29tbWl0Um9vdEltcGwuYmluZChudWxsLCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKSk7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRSb290SW1wbChyb290LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIGRvIHtcbiAgICAvLyBgZmx1c2hQYXNzaXZlRWZmZWN0c2Agd2lsbCBjYWxsIGBmbHVzaFN5bmNVcGRhdGVRdWV1ZWAgYXQgdGhlIGVuZCwgd2hpY2hcbiAgICAvLyBtZWFucyBgZmx1c2hQYXNzaXZlRWZmZWN0c2Agd2lsbCBzb21ldGltZXMgcmVzdWx0IGluIGFkZGl0aW9uYWxcbiAgICAvLyBwYXNzaXZlIGVmZmVjdHMuIFNvIHdlIG5lZWQgdG8ga2VlcCBmbHVzaGluZyBpbiBhIGxvb3AgdW50aWwgdGhlcmUgYXJlXG4gICAgLy8gbm8gbW9yZSBwZW5kaW5nIGVmZmVjdHMuXG4gICAgLy8gVE9ETzogTWlnaHQgYmUgYmV0dGVyIGlmIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCBkaWQgbm90IGF1dG9tYXRpY2FsbHlcbiAgICAvLyBmbHVzaCBzeW5jaHJvbm91cyB3b3JrIGF0IHRoZSBlbmQsIHRvIGF2b2lkIGZhY3RvcmluZyBoYXphcmRzIGxpa2UgdGhpcy5cbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIH0gd2hpbGUgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzICE9PSBudWxsKTtcblxuICBmbHVzaFJlbmRlclBoYXNlU3RyaWN0TW9kZVdhcm5pbmdzSW5ERVYoKTtcblxuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5maW5pc2hlZFdvcms7XG4gIHZhciBsYW5lcyA9IHJvb3QuZmluaXNoZWRMYW5lcztcblxuICBpZiAoZmluaXNoZWRXb3JrID09PSBudWxsKSB7XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgcm9vdC5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcblxuICBpZiAoIShmaW5pc2hlZFdvcmsgIT09IHJvb3QuY3VycmVudCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgY29tbWl0IHRoZSBzYW1lIHRyZWUgYXMgYmVmb3JlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9IC8vIGNvbW1pdFJvb3QgbmV2ZXIgcmV0dXJucyBhIGNvbnRpbnVhdGlvbjsgaXQgYWx3YXlzIGZpbmlzaGVzIHN5bmNocm9ub3VzbHkuXG4gIC8vIFNvIHdlIGNhbiBjbGVhciB0aGVzZSBub3cgdG8gYWxsb3cgYSBuZXcgY2FsbGJhY2sgdG8gYmUgc2NoZWR1bGVkLlxuXG5cbiAgcm9vdC5jYWxsYmFja05vZGUgPSBudWxsOyAvLyBVcGRhdGUgdGhlIGZpcnN0IGFuZCBsYXN0IHBlbmRpbmcgdGltZXMgb24gdGhpcyByb290LiBUaGUgbmV3IGZpcnN0XG4gIC8vIHBlbmRpbmcgdGltZSBpcyB3aGF0ZXZlciBpcyBsZWZ0IG9uIHRoZSByb290IGZpYmVyLlxuXG4gIHZhciByZW1haW5pbmdMYW5lcyA9IG1lcmdlTGFuZXMoZmluaXNoZWRXb3JrLmxhbmVzLCBmaW5pc2hlZFdvcmsuY2hpbGRMYW5lcyk7XG4gIG1hcmtSb290RmluaXNoZWQocm9vdCwgcmVtYWluaW5nTGFuZXMpOyAvLyBDbGVhciBhbHJlYWR5IGZpbmlzaGVkIGRpc2NyZXRlIHVwZGF0ZXMgaW4gY2FzZSB0aGF0IGEgbGF0ZXIgY2FsbCBvZlxuICAvLyBgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNgIHN0YXJ0cyBhIHVzZWxlc3MgcmVuZGVyIHBhc3Mgd2hpY2ggbWF5IGNhbmNlbHNcbiAgLy8gYSBzY2hlZHVsZWQgdGltZW91dC5cblxuICBpZiAocm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyAhPT0gbnVsbCkge1xuICAgIGlmICghaGFzRGlzY3JldGVMYW5lcyhyZW1haW5pbmdMYW5lcykgJiYgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcy5oYXMocm9vdCkpIHtcbiAgICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMuZGVsZXRlKHJvb3QpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpIHtcbiAgICAvLyBXZSBjYW4gcmVzZXQgdGhlc2Ugbm93IHRoYXQgdGhleSBhcmUgZmluaXNoZWQuXG4gICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICB9IC8vIEdldCB0aGUgbGlzdCBvZiBlZmZlY3RzLlxuXG5cbiAgdmFyIGZpcnN0RWZmZWN0O1xuXG4gIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgPiBQZXJmb3JtZWRXb3JrKSB7XG4gICAgLy8gQSBmaWJlcidzIGVmZmVjdCBsaXN0IGNvbnNpc3RzIG9ubHkgb2YgaXRzIGNoaWxkcmVuLCBub3QgaXRzZWxmLiBTbyBpZlxuICAgIC8vIHRoZSByb290IGhhcyBhbiBlZmZlY3QsIHdlIG5lZWQgdG8gYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuIFRoZVxuICAgIC8vIHJlc3VsdGluZyBsaXN0IGlzIHRoZSBzZXQgdGhhdCB3b3VsZCBiZWxvbmcgdG8gdGhlIHJvb3QncyBwYXJlbnQsIGlmIGl0XG4gICAgLy8gaGFkIG9uZTsgdGhhdCBpcywgYWxsIHRoZSBlZmZlY3RzIGluIHRoZSB0cmVlIGluY2x1ZGluZyB0aGUgcm9vdC5cbiAgICBpZiAoZmluaXNoZWRXb3JrLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgIGZpbmlzaGVkV29yay5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBmaW5pc2hlZFdvcms7XG4gICAgICBmaXJzdEVmZmVjdCA9IGZpbmlzaGVkV29yay5maXJzdEVmZmVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcms7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoZXJlIGlzIG5vIGVmZmVjdCBvbiB0aGUgcm9vdC5cbiAgICBmaXJzdEVmZmVjdCA9IGZpbmlzaGVkV29yay5maXJzdEVmZmVjdDtcbiAgfVxuXG4gIGlmIChmaXJzdEVmZmVjdCAhPT0gbnVsbCkge1xuXG4gICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpOyAvLyBSZXNldCB0aGlzIHRvIG51bGwgYmVmb3JlIGNhbGxpbmcgbGlmZWN5Y2xlc1xuXG4gICAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDsgLy8gVGhlIGNvbW1pdCBwaGFzZSBpcyBicm9rZW4gaW50byBzZXZlcmFsIHN1Yi1waGFzZXMuIFdlIGRvIGEgc2VwYXJhdGUgcGFzc1xuICAgIC8vIG9mIHRoZSBlZmZlY3QgbGlzdCBmb3IgZWFjaCBwaGFzZTogYWxsIG11dGF0aW9uIGVmZmVjdHMgY29tZSBiZWZvcmUgYWxsXG4gICAgLy8gbGF5b3V0IGVmZmVjdHMsIGFuZCBzbyBvbi5cbiAgICAvLyBUaGUgZmlyc3QgcGhhc2UgYSBcImJlZm9yZSBtdXRhdGlvblwiIHBoYXNlLiBXZSB1c2UgdGhpcyBwaGFzZSB0byByZWFkIHRoZVxuICAgIC8vIHN0YXRlIG9mIHRoZSBob3N0IHRyZWUgcmlnaHQgYmVmb3JlIHdlIG11dGF0ZSBpdC4gVGhpcyBpcyB3aGVyZVxuICAgIC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlIGlzIGNhbGxlZC5cblxuICAgIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSA9IHByZXBhcmVGb3JDb21taXQocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSBmYWxzZTtcbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMsIG51bGwpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEobmV4dEVmZmVjdCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKG5leHRFZmZlY3QsIGVycm9yKTtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCk7IC8vIFdlIG5vIGxvbmdlciBuZWVkIHRvIHRyYWNrIHRoZSBhY3RpdmUgaW5zdGFuY2UgZmliZXJcblxuXG4gICAgZm9jdXNlZEluc3RhbmNlSGFuZGxlID0gbnVsbDtcblxuICAgIHtcbiAgICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgY29tbWl0IHRpbWUgdG8gYmUgc2hhcmVkIGJ5IGFsbCBQcm9maWxlcnMgaW4gdGhpc1xuICAgICAgLy8gYmF0Y2guIFRoaXMgZW5hYmxlcyB0aGVtIHRvIGJlIGdyb3VwZWQgbGF0ZXIuXG4gICAgICByZWNvcmRDb21taXRUaW1lKCk7XG4gICAgfSAvLyBUaGUgbmV4dCBwaGFzZSBpcyB0aGUgbXV0YXRpb24gcGhhc2UsIHdoZXJlIHdlIG11dGF0ZSB0aGUgaG9zdCB0cmVlLlxuXG5cbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRNdXRhdGlvbkVmZmVjdHMsIG51bGwsIHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEobmV4dEVmZmVjdCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9lcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKG5leHRFZmZlY3QsIF9lcnJvcik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpO1xuXG4gICAgcmVzZXRBZnRlckNvbW1pdChyb290LmNvbnRhaW5lckluZm8pOyAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyB0cmVlIGlzIG5vdyB0aGUgY3VycmVudCB0cmVlLiBUaGlzIG11c3QgY29tZSBhZnRlclxuICAgIC8vIHRoZSBtdXRhdGlvbiBwaGFzZSwgc28gdGhhdCB0aGUgcHJldmlvdXMgdHJlZSBpcyBzdGlsbCBjdXJyZW50IGR1cmluZ1xuICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50LCBidXQgYmVmb3JlIHRoZSBsYXlvdXQgcGhhc2UsIHNvIHRoYXQgdGhlIGZpbmlzaGVkXG4gICAgLy8gd29yayBpcyBjdXJyZW50IGR1cmluZyBjb21wb25lbnREaWRNb3VudC9VcGRhdGUuXG5cbiAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7IC8vIFRoZSBuZXh0IHBoYXNlIGlzIHRoZSBsYXlvdXQgcGhhc2UsIHdoZXJlIHdlIGNhbGwgZWZmZWN0cyB0aGF0IHJlYWRcbiAgICAvLyB0aGUgaG9zdCB0cmVlIGFmdGVyIGl0J3MgYmVlbiBtdXRhdGVkLiBUaGUgaWRpb21hdGljIHVzZSBjYXNlIGZvciB0aGlzIGlzXG4gICAgLy8gbGF5b3V0LCBidXQgY2xhc3MgY29tcG9uZW50IGxpZmVjeWNsZXMgYWxzbyBmaXJlIGhlcmUgZm9yIGxlZ2FjeSByZWFzb25zLlxuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0TGF5b3V0RWZmZWN0cywgbnVsbCwgcm9vdCwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEobmV4dEVmZmVjdCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9lcnJvcjIgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBfZXJyb3IyKTtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCk7XG5cbiAgICBuZXh0RWZmZWN0ID0gbnVsbDsgLy8gVGVsbCBTY2hlZHVsZXIgdG8geWllbGQgYXQgdGhlIGVuZCBvZiB0aGUgZnJhbWUsIHNvIHRoZSBicm93c2VyIGhhcyBhblxuICAgIC8vIG9wcG9ydHVuaXR5IHRvIHBhaW50LlxuXG4gICAgcmVxdWVzdFBhaW50KCk7XG5cbiAgICB7XG4gICAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gICAgfVxuXG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICB9IGVsc2Uge1xuICAgIC8vIE5vIGVmZmVjdHMuXG4gICAgcm9vdC5jdXJyZW50ID0gZmluaXNoZWRXb3JrOyAvLyBNZWFzdXJlIHRoZXNlIGFueXdheSBzbyB0aGUgZmxhbWVncmFwaCBleHBsaWNpdGx5IHNob3dzIHRoYXQgdGhlcmUgd2VyZVxuICAgIC8vIG5vIGVmZmVjdHMuXG4gICAgLy8gVE9ETzogTWF5YmUgdGhlcmUncyBhIGJldHRlciB3YXkgdG8gcmVwb3J0IHRoaXMuXG5cbiAgICB7XG4gICAgICByZWNvcmRDb21taXRUaW1lKCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMgPSByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cztcblxuICBpZiAocm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAvLyBUaGlzIGNvbW1pdCBoYXMgcGFzc2l2ZSBlZmZlY3RzLiBTdGFzaCBhIHJlZmVyZW5jZSB0byB0aGVtLiBCdXQgZG9uJ3RcbiAgICAvLyBzY2hlZHVsZSBhIGNhbGxiYWNrIHVudGlsIGFmdGVyIGZsdXNoaW5nIGxheW91dCB3b3JrLlxuICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG4gICAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSByb290O1xuICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gbGFuZXM7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSByZW5kZXJQcmlvcml0eUxldmVsO1xuICB9IGVsc2Uge1xuICAgIC8vIFdlIGFyZSBkb25lIHdpdGggdGhlIGVmZmVjdCBjaGFpbiBhdCB0aGlzIHBvaW50IHNvIGxldCdzIGNsZWFyIHRoZVxuICAgIC8vIG5leHRFZmZlY3QgcG9pbnRlcnMgdG8gYXNzaXN0IHdpdGggR0MuIElmIHdlIGhhdmUgcGFzc2l2ZSBlZmZlY3RzLCB3ZSdsbFxuICAgIC8vIGNsZWFyIHRoaXMgaW4gZmx1c2hQYXNzaXZlRWZmZWN0cy5cbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5leHROZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgbmV4dEVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcblxuICAgICAgaWYgKG5leHRFZmZlY3QuZmxhZ3MgJiBEZWxldGlvbikge1xuICAgICAgICBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhuZXh0RWZmZWN0KTtcbiAgICAgIH1cblxuICAgICAgbmV4dEVmZmVjdCA9IG5leHROZXh0RWZmZWN0O1xuICAgIH1cbiAgfSAvLyBSZWFkIHRoaXMgYWdhaW4sIHNpbmNlIGFuIGVmZmVjdCBtaWdodCBoYXZlIHVwZGF0ZWQgaXRcblxuXG4gIHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7IC8vIENoZWNrIGlmIHRoZXJlJ3MgcmVtYWluaW5nIHdvcmsgb24gdGhpcyByb290XG5cbiAgaWYgKHJlbWFpbmluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAge1xuICAgICAgaWYgKHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBleHBpcmF0aW9uVGltZXMgPSBzcGF3bmVkV29ya0R1cmluZ1JlbmRlcjtcbiAgICAgICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBudWxsO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwaXJhdGlvblRpbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgc2NoZWR1bGVJbnRlcmFjdGlvbnMocm9vdCwgZXhwaXJhdGlvblRpbWVzW2ldLCByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgcmVtYWluaW5nTGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIHJlbWFpbmluZyB3b3JrLCB3ZSBjYW4gY2xlYXIgdGhlIHNldCBvZiBhbHJlYWR5IGZhaWxlZFxuICAgIC8vIGVycm9yIGJvdW5kYXJpZXMuXG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICghcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBhc3NpdmUgZWZmZWN0cywgdGhlbiB3ZSBjYW4gY29tcGxldGUgdGhlIHBlbmRpbmcgaW50ZXJhY3Rpb25zLlxuICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSdsbCB3YWl0IHVudGlsIGFmdGVyIHRoZSBwYXNzaXZlIGVmZmVjdHMgYXJlIGZsdXNoZWQuXG4gICAgICAvLyBXYWl0IHRvIGRvIHRoaXMgdW50aWwgYWZ0ZXIgcmVtYWluaW5nIHdvcmsgaGFzIGJlZW4gc2NoZWR1bGVkLFxuICAgICAgLy8gc28gdGhhdCB3ZSBkb24ndCBwcmVtYXR1cmVseSBzaWduYWwgY29tcGxldGUgZm9yIGludGVyYWN0aW9ucyB3aGVuIHRoZXJlJ3MgZS5nLiBoaWRkZW4gd29yay5cbiAgICAgIGZpbmlzaFBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZW1haW5pbmdMYW5lcyA9PT0gU3luY0xhbmUpIHtcbiAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSByb290IHN5bmNocm9ub3VzbHkgcmUtcmVuZGVycyB3aXRob3V0XG4gICAgLy8gZmluaXNoaW5nLiBJZiB0aGVyZSBhcmUgdG9vIG1hbnksIGl0IGluZGljYXRlcyBhbiBpbmZpbml0ZSB1cGRhdGUgbG9vcC5cbiAgICBpZiAocm9vdCA9PT0gcm9vdFdpdGhOZXN0ZWRVcGRhdGVzKSB7XG4gICAgICBuZXN0ZWRVcGRhdGVDb3VudCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgICByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSByb290O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gIH1cblxuICBvbkNvbW1pdFJvb3QoZmluaXNoZWRXb3JrLnN0YXRlTm9kZSwgcmVuZGVyUHJpb3JpdHlMZXZlbCk7XG5cbiAge1xuICAgIG9uQ29tbWl0Um9vdCQxKCk7XG4gIH0gLy8gQWx3YXlzIGNhbGwgdGhpcyBiZWZvcmUgZXhpdGluZyBgY29tbWl0Um9vdGAsIHRvIGVuc3VyZSB0aGF0IGFueVxuICAvLyBhZGRpdGlvbmFsIHdvcmsgb24gdGhpcyByb290IGlzIHNjaGVkdWxlZC5cblxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG5cbiAgaWYgKGhhc1VuY2F1Z2h0RXJyb3IpIHtcbiAgICBoYXNVbmNhdWdodEVycm9yID0gZmFsc2U7XG4gICAgdmFyIF9lcnJvcjMgPSBmaXJzdFVuY2F1Z2h0RXJyb3I7XG4gICAgZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbDtcbiAgICB0aHJvdyBfZXJyb3IzO1xuICB9XG5cbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCkgIT09IE5vQ29udGV4dCkge1xuICAgIC8vIGEgUmVhY3RET00ucmVuZGVyLWVkIHJvb3QgaW5zaWRlIG9mIGJhdGNoZWRVcGRhdGVzLiBUaGUgY29tbWl0IGZpcmVkXG4gICAgLy8gc3luY2hyb25vdXNseSwgYnV0IGxheW91dCB1cGRhdGVzIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCB0aGUgZW5kXG4gICAgLy8gb2YgdGhlIGJhdGNoLlxuXG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBJZiBsYXlvdXQgd29yayB3YXMgc2NoZWR1bGVkLCBmbHVzaCBpdCBub3cuXG5cblxuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cygpIHtcbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKCFzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgJiYgZm9jdXNlZEluc3RhbmNlSGFuZGxlICE9PSBudWxsKSB7XG4gICAgICBpZiAoKG5leHRFZmZlY3QuZmxhZ3MgJiBEZWxldGlvbikgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgaWYgKGRvZXNGaWJlckNvbnRhaW4obmV4dEVmZmVjdCwgZm9jdXNlZEluc3RhbmNlSGFuZGxlKSkge1xuICAgICAgICAgIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBvdXQgb2YgdGhlIGhvdCBwYXRoIHVzaW5nIGEgZGVkaWNhdGVkIGVmZmVjdCB0YWcuXG4gICAgICAgIGlmIChuZXh0RWZmZWN0LnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgaXNTdXNwZW5zZUJvdW5kYXJ5QmVpbmdIaWRkZW4oY3VycmVudCwgbmV4dEVmZmVjdCkgJiYgZG9lc0ZpYmVyQ29udGFpbihuZXh0RWZmZWN0LCBmb2N1c2VkSW5zdGFuY2VIYW5kbGUpKSB7XG4gICAgICAgICAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmbGFncyA9IG5leHRFZmZlY3QuZmxhZ3M7XG5cbiAgICBpZiAoKGZsYWdzICYgU25hcHNob3QpICE9PSBOb0ZsYWdzKSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIobmV4dEVmZmVjdCk7XG4gICAgICBjb21taXRCZWZvcmVNdXRhdGlvbkxpZmVDeWNsZXMoY3VycmVudCwgbmV4dEVmZmVjdCk7XG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIH1cblxuICAgIGlmICgoZmxhZ3MgJiBQYXNzaXZlKSAhPT0gTm9GbGFncykge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIHBhc3NpdmUgZWZmZWN0cywgc2NoZWR1bGUgYSBjYWxsYmFjayB0byBmbHVzaCBhdFxuICAgICAgLy8gdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5LlxuICAgICAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgICAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgICAgIHNjaGVkdWxlQ2FsbGJhY2soTm9ybWFsUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRNdXRhdGlvbkVmZmVjdHMocm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICAvLyBUT0RPOiBTaG91bGQgcHJvYmFibHkgbW92ZSB0aGUgYnVsayBvZiB0aGlzIGZ1bmN0aW9uIHRvIGNvbW1pdFdvcmsuXG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgc2V0Q3VycmVudEZpYmVyKG5leHRFZmZlY3QpO1xuICAgIHZhciBmbGFncyA9IG5leHRFZmZlY3QuZmxhZ3M7XG5cbiAgICBpZiAoZmxhZ3MgJiBDb250ZW50UmVzZXQpIHtcbiAgICAgIGNvbW1pdFJlc2V0VGV4dENvbnRlbnQobmV4dEVmZmVjdCk7XG4gICAgfVxuXG4gICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICB2YXIgY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjb21taXREZXRhY2hSZWYoY3VycmVudCk7XG4gICAgICB9XG4gICAgfSAvLyBUaGUgZm9sbG93aW5nIHN3aXRjaCBzdGF0ZW1lbnQgaXMgb25seSBjb25jZXJuZWQgYWJvdXQgcGxhY2VtZW50LFxuICAgIC8vIHVwZGF0ZXMsIGFuZCBkZWxldGlvbnMuIFRvIGF2b2lkIG5lZWRpbmcgdG8gYWRkIGEgY2FzZSBmb3IgZXZlcnkgcG9zc2libGVcbiAgICAvLyBiaXRtYXAgdmFsdWUsIHdlIHJlbW92ZSB0aGUgc2Vjb25kYXJ5IGVmZmVjdHMgZnJvbSB0aGUgZWZmZWN0IHRhZyBhbmRcbiAgICAvLyBzd2l0Y2ggb24gdGhhdCB2YWx1ZS5cblxuXG4gICAgdmFyIHByaW1hcnlGbGFncyA9IGZsYWdzICYgKFBsYWNlbWVudCB8IFVwZGF0ZSB8IERlbGV0aW9uIHwgSHlkcmF0aW5nKTtcblxuICAgIHN3aXRjaCAocHJpbWFyeUZsYWdzKSB7XG4gICAgICBjYXNlIFBsYWNlbWVudDpcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdFBsYWNlbWVudChuZXh0RWZmZWN0KTsgLy8gQ2xlYXIgdGhlIFwicGxhY2VtZW50XCIgZnJvbSBlZmZlY3QgdGFnIHNvIHRoYXQgd2Uga25vdyB0aGF0IHRoaXMgaXNcbiAgICAgICAgICAvLyBpbnNlcnRlZCwgYmVmb3JlIGFueSBsaWZlLWN5Y2xlcyBsaWtlIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkLlxuICAgICAgICAgIC8vIFRPRE86IGZpbmRET01Ob2RlIGRvZXNuJ3QgcmVseSBvbiB0aGlzIGFueSBtb3JlIGJ1dCBpc01vdW50ZWQgZG9lc1xuICAgICAgICAgIC8vIGFuZCBpc01vdW50ZWQgaXMgZGVwcmVjYXRlZCBhbnl3YXkgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8ga2lsbCB0aGlzLlxuXG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+UGxhY2VtZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUGxhY2VtZW50QW5kVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gUGxhY2VtZW50XG4gICAgICAgICAgY29tbWl0UGxhY2VtZW50KG5leHRFZmZlY3QpOyAvLyBDbGVhciB0aGUgXCJwbGFjZW1lbnRcIiBmcm9tIGVmZmVjdCB0YWcgc28gdGhhdCB3ZSBrbm93IHRoYXQgdGhpcyBpc1xuICAgICAgICAgIC8vIGluc2VydGVkLCBiZWZvcmUgYW55IGxpZmUtY3ljbGVzIGxpa2UgY29tcG9uZW50RGlkTW91bnQgZ2V0cyBjYWxsZWQuXG5cbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5QbGFjZW1lbnQ7IC8vIFVwZGF0ZVxuXG4gICAgICAgICAgdmFyIF9jdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudCwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIeWRyYXRpbmc6XG4gICAgICAgIHtcbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5IeWRyYXRpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIeWRyYXRpbmdBbmRVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5IeWRyYXRpbmc7IC8vIFVwZGF0ZVxuXG4gICAgICAgICAgdmFyIF9jdXJyZW50MiA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdFdvcmsoX2N1cnJlbnQyLCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFVwZGF0ZTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfY3VycmVudDMgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50MywgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBEZWxldGlvbjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdERlbGV0aW9uKHJvb3QsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdExheW91dEVmZmVjdHMocm9vdCwgY29tbWl0dGVkTGFuZXMpIHtcblxuXG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgc2V0Q3VycmVudEZpYmVyKG5leHRFZmZlY3QpO1xuICAgIHZhciBmbGFncyA9IG5leHRFZmZlY3QuZmxhZ3M7XG5cbiAgICBpZiAoZmxhZ3MgJiAoVXBkYXRlIHwgQ2FsbGJhY2spKSB7XG4gICAgICB2YXIgY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgY29tbWl0TGlmZUN5Y2xlcyhyb290LCBjdXJyZW50LCBuZXh0RWZmZWN0KTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoZmxhZ3MgJiBSZWYpIHtcbiAgICAgICAgY29tbWl0QXR0YWNoUmVmKG5leHRFZmZlY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzKCkge1xuICAvLyBSZXR1cm5zIHdoZXRoZXIgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgZmx1c2hlZC5cbiAgaWYgKHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ICE9PSBOb1ByaW9yaXR5JDEpIHtcbiAgICB2YXIgcHJpb3JpdHlMZXZlbCA9IHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID4gTm9ybWFsUHJpb3JpdHkkMSA/IE5vcm1hbFByaW9yaXR5JDEgOiBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eTtcbiAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA9IE5vUHJpb3JpdHkkMTtcblxuICAgIHtcbiAgICAgIHJldHVybiBydW5XaXRoUHJpb3JpdHkkMShwcmlvcml0eUxldmVsLCBmbHVzaFBhc3NpdmVFZmZlY3RzSW1wbCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdE1vdW50KGZpYmVyLCBlZmZlY3QpIHtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50LnB1c2goZWZmZWN0LCBmaWJlcik7XG5cbiAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0VW5tb3VudChmaWJlciwgZWZmZWN0KSB7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50LnB1c2goZWZmZWN0LCBmaWJlcik7XG5cbiAge1xuICAgIGZpYmVyLmZsYWdzIHw9IFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgYWx0ZXJuYXRlLmZsYWdzIHw9IFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICB9XG4gIH1cblxuICBpZiAoIXJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgIHNjaGVkdWxlQ2FsbGJhY2soTm9ybWFsUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlUGFzc2l2ZUVmZmVjdENyZWF0ZShlZmZlY3QpIHtcbiAgdmFyIGNyZWF0ZSA9IGVmZmVjdC5jcmVhdGU7XG4gIGVmZmVjdC5kZXN0cm95ID0gY3JlYXRlKCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHNJbXBsKCkge1xuICBpZiAocm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcm9vdCA9IHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzO1xuICB2YXIgbGFuZXMgPSBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcztcbiAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsO1xuICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCBmbHVzaCBwYXNzaXZlIGVmZmVjdHMgd2hpbGUgYWxyZWFkeSByZW5kZXJpbmcuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpOyAvLyBJdCdzIGltcG9ydGFudCB0aGF0IEFMTCBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0IGRlc3Ryb3kgZnVuY3Rpb25zIGFyZSBjYWxsZWRcbiAgLy8gYmVmb3JlIEFOWSBwYXNzaXZlIGVmZmVjdCBjcmVhdGUgZnVuY3Rpb25zIGFyZSBjYWxsZWQuXG4gIC8vIE90aGVyd2lzZSBlZmZlY3RzIGluIHNpYmxpbmcgY29tcG9uZW50cyBtaWdodCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyLlxuICAvLyBlLmcuIGEgZGVzdHJveSBmdW5jdGlvbiBpbiBvbmUgY29tcG9uZW50IG1heSB1bmludGVudGlvbmFsbHkgb3ZlcnJpZGUgYSByZWZcbiAgLy8gdmFsdWUgc2V0IGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50LlxuICAvLyBMYXlvdXQgZWZmZWN0cyBoYXZlIHRoZSBzYW1lIGNvbnN0cmFpbnQuXG4gIC8vIEZpcnN0IHBhc3M6IERlc3Ryb3kgc3RhbGUgcGFzc2l2ZSBlZmZlY3RzLlxuXG4gIHZhciB1bm1vdW50RWZmZWN0cyA9IHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50O1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdW5tb3VudEVmZmVjdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgX2VmZmVjdCA9IHVubW91bnRFZmZlY3RzW2ldO1xuICAgIHZhciBmaWJlciA9IHVubW91bnRFZmZlY3RzW2kgKyAxXTtcbiAgICB2YXIgZGVzdHJveSA9IF9lZmZlY3QuZGVzdHJveTtcbiAgICBfZWZmZWN0LmRlc3Ryb3kgPSB1bmRlZmluZWQ7XG5cbiAgICB7XG4gICAgICBmaWJlci5mbGFncyAmPSB+UGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBhbHRlcm5hdGUuZmxhZ3MgJj0gflBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGRlc3Ryb3ksIG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShmaWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpYmVyLCBlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBTZWNvbmQgcGFzczogQ3JlYXRlIG5ldyBwYXNzaXZlIGVmZmVjdHMuXG5cblxuICB2YXIgbW91bnRFZmZlY3RzID0gcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50O1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQgPSBbXTtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbW91bnRFZmZlY3RzLmxlbmd0aDsgX2kgKz0gMikge1xuICAgIHZhciBfZWZmZWN0MiA9IG1vdW50RWZmZWN0c1tfaV07XG4gICAgdmFyIF9maWJlciA9IG1vdW50RWZmZWN0c1tfaSArIDFdO1xuXG4gICAge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKF9maWJlcik7XG5cbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGludm9rZVBhc3NpdmVFZmZlY3RDcmVhdGUsIG51bGwsIF9lZmZlY3QyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgaWYgKCEoX2ZpYmVyICE9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfZXJyb3I0ID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKF9maWJlciwgX2Vycm9yNCk7XG4gICAgICB9XG5cbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgfVxuICB9IC8vIE5vdGU6IFRoaXMgY3VycmVudGx5IGFzc3VtZXMgdGhlcmUgYXJlIG5vIHBhc3NpdmUgZWZmZWN0cyBvbiB0aGUgcm9vdCBmaWJlclxuICAvLyBiZWNhdXNlIHRoZSByb290IGlzIG5vdCBwYXJ0IG9mIGl0cyBvd24gZWZmZWN0IGxpc3QuXG4gIC8vIFRoaXMgY291bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cblxuICB2YXIgZWZmZWN0ID0gcm9vdC5jdXJyZW50LmZpcnN0RWZmZWN0O1xuXG4gIHdoaWxlIChlZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmV4dE5leHRFZmZlY3QgPSBlZmZlY3QubmV4dEVmZmVjdDsgLy8gUmVtb3ZlIG5leHRFZmZlY3QgcG9pbnRlciB0byBhc3Npc3QgR0NcblxuICAgIGVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcblxuICAgIGlmIChlZmZlY3QuZmxhZ3MgJiBEZWxldGlvbikge1xuICAgICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZWZmZWN0KTtcbiAgICB9XG5cbiAgICBlZmZlY3QgPSBuZXh0TmV4dEVmZmVjdDtcbiAgfVxuXG4gIHtcbiAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gICAgZmluaXNoUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gIH1cblxuICB7XG4gICAgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG4gIH1cblxuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTsgLy8gSWYgYWRkaXRpb25hbCBwYXNzaXZlIGVmZmVjdHMgd2VyZSBzY2hlZHVsZWQsIGluY3JlbWVudCBhIGNvdW50ZXIuIElmIHRoaXNcbiAgLy8gZXhjZWVkcyB0aGUgbGltaXQsIHdlJ2xsIGZpcmUgYSB3YXJuaW5nLlxuXG4gIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID09PSBudWxsID8gMCA6IG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCArIDE7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSB7XG4gIHJldHVybiBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCAhPT0gbnVsbCAmJiBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5oYXMoaW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gbWFya0xlZ2FjeUVycm9yQm91bmRhcnlBc0ZhaWxlZChpbnN0YW5jZSkge1xuICBpZiAobGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPT09IG51bGwpIHtcbiAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG5ldyBTZXQoW2luc3RhbmNlXSk7XG4gIH0gZWxzZSB7XG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuYWRkKGluc3RhbmNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9UaHJvd1VuY2F1Z2h0RXJyb3IoZXJyb3IpIHtcbiAgaWYgKCFoYXNVbmNhdWdodEVycm9yKSB7XG4gICAgaGFzVW5jYXVnaHRFcnJvciA9IHRydWU7XG4gICAgZmlyc3RVbmNhdWdodEVycm9yID0gZXJyb3I7XG4gIH1cbn1cblxudmFyIG9uVW5jYXVnaHRFcnJvciA9IHByZXBhcmVUb1Rocm93VW5jYXVnaHRFcnJvcjtcblxuZnVuY3Rpb24gY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qocm9vdEZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpIHtcbiAgdmFyIGVycm9ySW5mbyA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUoZXJyb3IsIHNvdXJjZUZpYmVyKTtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShyb290RmliZXIsIGVycm9ySW5mbywgU3luY0xhbmUpO1xuICBlbnF1ZXVlVXBkYXRlKHJvb3RGaWJlciwgdXBkYXRlKTtcbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChyb290RmliZXIsIFN5bmNMYW5lKTtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIG1hcmtSb290VXBkYXRlZChyb290LCBTeW5jTGFuZSwgZXZlbnRUaW1lKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgU3luY0xhbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKHNvdXJjZUZpYmVyLCBlcnJvcikge1xuICBpZiAoc291cmNlRmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgIC8vIEVycm9yIHdhcyB0aHJvd24gYXQgdGhlIHJvb3QuIFRoZXJlIGlzIG5vIHBhcmVudCwgc28gdGhlIHJvb3RcbiAgICAvLyBpdHNlbGYgc2hvdWxkIGNhcHR1cmUgaXQuXG4gICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qoc291cmNlRmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGZpYmVyID0gc291cmNlRmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgIGlmIChmaWJlci50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChmaWJlciwgc291cmNlRmliZXIsIGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgIHZhciBjdG9yID0gZmliZXIudHlwZTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSB7XG4gICAgICAgIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIFN5bmNMYW5lKTtcbiAgICAgICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICAgICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICAgICAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIFN5bmNMYW5lLCBldmVudFRpbWUpO1xuICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgICAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBTeW5jTGFuZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhpcyBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiB1bm1vdW50ZWQuXG4gICAgICAgICAgLy8gV2UgY2FuJ3Qgc2NoZWR1bGUgYW55IGZvbGxvdyB1cCB3b3JrIGZvciB0aGUgcm9vdCBiZWNhdXNlIHRoZSBmaWJlciBpcyBhbHJlYWR5IHVubW91bnRlZCxcbiAgICAgICAgICAvLyBidXQgd2UgY2FuIHN0aWxsIGNhbGwgdGhlIGxvZy1vbmx5IGJvdW5kYXJ5IHNvIHRoZSBlcnJvciBpc24ndCBzd2FsbG93ZWQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUT0RPIFRoaXMgaXMgb25seSBhIHRlbXBvcmFyeSBiYW5kYWlkIGZvciB0aGUgb2xkIHJlY29uY2lsZXIgZm9yay5cbiAgICAgICAgICAvLyBXZSBjYW4gZGVsZXRlIHRoaXMgc3BlY2lhbCBjYXNlIG9uY2UgdGhlIG5ldyBmb3JrIGlzIG1lcmdlZC5cbiAgICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IsIGVycm9ySW5mbyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvclRvSWdub3JlKSB7Ly8gVE9ETyBJZ25vcmUgdGhpcyBlcnJvcj8gUmV0aHJvdyBpdD9cbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBraW5kIG9mIGFuIGVkZ2UgY2FzZS5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmliZXIgPSBmaWJlci5yZXR1cm47XG4gIH1cbn1cbmZ1bmN0aW9uIHBpbmdTdXNwZW5kZWRSb290KHJvb3QsIHdha2VhYmxlLCBwaW5nZWRMYW5lcykge1xuICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG5cbiAgaWYgKHBpbmdDYWNoZSAhPT0gbnVsbCkge1xuICAgIC8vIFRoZSB3YWtlYWJsZSByZXNvbHZlZCwgc28gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gbWVtb2l6ZSwgYmVjYXVzZSBpdCB3aWxsXG4gICAgLy8gbmV2ZXIgYmUgdGhyb3duIGFnYWluLlxuICAgIHBpbmdDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgbWFya1Jvb3RQaW5nZWQocm9vdCwgcGluZ2VkTGFuZXMpO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgPT09IHJvb3QgJiYgaXNTdWJzZXRPZkxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLCBwaW5nZWRMYW5lcykpIHtcbiAgICAvLyBSZWNlaXZlZCBhIHBpbmcgYXQgdGhlIHNhbWUgcHJpb3JpdHkgbGV2ZWwgYXQgd2hpY2ggd2UncmUgY3VycmVudGx5XG4gICAgLy8gcmVuZGVyaW5nLiBXZSBtaWdodCB3YW50IHRvIHJlc3RhcnQgdGhpcyByZW5kZXIuIFRoaXMgc2hvdWxkIG1pcnJvclxuICAgIC8vIHRoZSBsb2dpYyBvZiB3aGV0aGVyIG9yIG5vdCBhIHJvb3Qgc3VzcGVuZHMgb25jZSBpdCBjb21wbGV0ZXMuXG4gICAgLy8gVE9ETzogSWYgd2UncmUgcmVuZGVyaW5nIHN5bmMgZWl0aGVyIGR1ZSB0byBTeW5jLCBCYXRjaGVkIG9yIGV4cGlyZWQsXG4gICAgLy8gd2Ugc2hvdWxkIHByb2JhYmx5IG5ldmVyIHJlc3RhcnQuXG4gICAgLy8gSWYgd2UncmUgc3VzcGVuZGVkIHdpdGggZGVsYXksIG9yIGlmIGl0J3MgYSByZXRyeSwgd2UnbGwgYWx3YXlzIHN1c3BlbmRcbiAgICAvLyBzbyB3ZSBjYW4gYWx3YXlzIHJlc3RhcnQuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgfHwgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZCAmJiBpbmNsdWRlc09ubHlSZXRyaWVzKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSAmJiBub3coKSAtIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPCBGQUxMQkFDS19USFJPVFRMRV9NUykge1xuICAgICAgLy8gUmVzdGFydCBmcm9tIHRoZSByb290LlxuICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGNhbid0IHJlc3RhcnQgcmlnaHQgbm93LCB3ZSBtaWdodCBnZXQgYW5cbiAgICAgIC8vIG9wcG9ydHVuaXR5IGxhdGVyLiBTbyB3ZSBtYXJrIHRoaXMgcmVuZGVyIGFzIGhhdmluZyBhIHBpbmcuXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMsIHBpbmdlZExhbmVzKTtcbiAgICB9XG4gIH1cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIHBpbmdlZExhbmVzKTtcbn1cblxuZnVuY3Rpb24gcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSkge1xuICAvLyBUaGUgYm91bmRhcnkgZmliZXIgKGEgU3VzcGVuc2UgY29tcG9uZW50IG9yIFN1c3BlbnNlTGlzdCBjb21wb25lbnQpXG4gIC8vIHByZXZpb3VzbHkgd2FzIHJlbmRlcmVkIGluIGl0cyBmYWxsYmFjayBzdGF0ZS4gT25lIG9mIHRoZSBwcm9taXNlcyB0aGF0XG4gIC8vIHN1c3BlbmRlZCBpdCBoYXMgcmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGF0IGxlYXN0IHBhcnQgb2YgdGhlIHRyZWUgd2FzXG4gIC8vIGxpa2VseSB1bmJsb2NrZWQuIFRyeSByZW5kZXJpbmcgYWdhaW4sIGF0IGEgbmV3IGV4cGlyYXRpb24gdGltZS5cbiAgaWYgKHJldHJ5TGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgcmV0cnlMYW5lID0gcmVxdWVzdFJldHJ5TGFuZShib3VuZGFyeUZpYmVyKTtcbiAgfSAvLyBUT0RPOiBTcGVjaWFsIGNhc2UgaWRsZSBwcmlvcml0eT9cblxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKTtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIG1hcmtSb290VXBkYXRlZChyb290LCByZXRyeUxhbmUsIGV2ZW50VGltZSk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIHJldHJ5TGFuZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVSZXRyeVdha2VhYmxlKGJvdW5kYXJ5RmliZXIsIHdha2VhYmxlKSB7XG4gIHZhciByZXRyeUxhbmUgPSBOb0xhbmU7IC8vIERlZmF1bHRcblxuICB2YXIgcmV0cnlDYWNoZTtcblxuICB7XG4gICAgcmV0cnlDYWNoZSA9IGJvdW5kYXJ5RmliZXIuc3RhdGVOb2RlO1xuICB9XG5cbiAgaWYgKHJldHJ5Q2FjaGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgd2FrZWFibGUgcmVzb2x2ZWQsIHNvIHdlIG5vIGxvbmdlciBuZWVkIHRvIG1lbW9pemUsIGJlY2F1c2UgaXQgd2lsbFxuICAgIC8vIG5ldmVyIGJlIHRocm93biBhZ2Fpbi5cbiAgICByZXRyeUNhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gIH1cblxuICByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKTtcbn0gLy8gQ29tcHV0ZXMgdGhlIG5leHQgSnVzdCBOb3RpY2VhYmxlIERpZmZlcmVuY2UgKEpORCkgYm91bmRhcnkuXG4vLyBUaGUgdGhlb3J5IGlzIHRoYXQgYSBwZXJzb24gY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHNtYWxsIGRpZmZlcmVuY2VzIGluIHRpbWUuXG4vLyBUaGVyZWZvcmUsIGlmIHdlIHdhaXQgYSBiaXQgbG9uZ2VyIHRoYW4gbmVjZXNzYXJ5IHRoYXQgd29uJ3QgdHJhbnNsYXRlIHRvIGEgbm90aWNlYWJsZVxuLy8gZGlmZmVyZW5jZSBpbiB0aGUgZXhwZXJpZW5jZS4gSG93ZXZlciwgd2FpdGluZyBmb3IgbG9uZ2VyIG1pZ2h0IG1lYW4gdGhhdCB3ZSBjYW4gYXZvaWRcbi8vIHNob3dpbmcgYW4gaW50ZXJtZWRpYXRlIGxvYWRpbmcgc3RhdGUuIFRoZSBsb25nZXIgd2UgaGF2ZSBhbHJlYWR5IHdhaXRlZCwgdGhlIGhhcmRlciBpdFxuLy8gaXMgdG8gdGVsbCBzbWFsbCBkaWZmZXJlbmNlcyBpbiB0aW1lLiBUaGVyZWZvcmUsIHRoZSBsb25nZXIgd2UndmUgYWxyZWFkeSB3YWl0ZWQsXG4vLyB0aGUgbG9uZ2VyIHdlIGNhbiB3YWl0IGFkZGl0aW9uYWxseS4gQXQgc29tZSBwb2ludCB3ZSBoYXZlIHRvIGdpdmUgdXAgdGhvdWdoLlxuLy8gV2UgcGljayBhIHRyYWluIG1vZGVsIHdoZXJlIHRoZSBuZXh0IGJvdW5kYXJ5IGNvbW1pdHMgYXQgYSBjb25zaXN0ZW50IHNjaGVkdWxlLlxuLy8gVGhlc2UgcGFydGljdWxhciBudW1iZXJzIGFyZSB2YWd1ZSBlc3RpbWF0ZXMuIFdlIGV4cGVjdCB0byBhZGp1c3QgdGhlbSBiYXNlZCBvbiByZXNlYXJjaC5cblxuZnVuY3Rpb24gam5kKHRpbWVFbGFwc2VkKSB7XG4gIHJldHVybiB0aW1lRWxhcHNlZCA8IDEyMCA/IDEyMCA6IHRpbWVFbGFwc2VkIDwgNDgwID8gNDgwIDogdGltZUVsYXBzZWQgPCAxMDgwID8gMTA4MCA6IHRpbWVFbGFwc2VkIDwgMTkyMCA/IDE5MjAgOiB0aW1lRWxhcHNlZCA8IDMwMDAgPyAzMDAwIDogdGltZUVsYXBzZWQgPCA0MzIwID8gNDMyMCA6IGNlaWwodGltZUVsYXBzZWQgLyAxOTYwKSAqIDE5NjA7XG59XG5cbmZ1bmN0aW9uIGNoZWNrRm9yTmVzdGVkVXBkYXRlcygpIHtcbiAgaWYgKG5lc3RlZFVwZGF0ZUNvdW50ID4gTkVTVEVEX1VQREFURV9MSU1JVCkge1xuICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgICByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsO1xuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgcmVwZWF0ZWRseSBjYWxscyBzZXRTdGF0ZSBpbnNpZGUgY29tcG9uZW50V2lsbFVwZGF0ZSBvciBjb21wb25lbnREaWRVcGRhdGUuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIG5lc3RlZCB1cGRhdGVzIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA+IE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCkge1xuICAgICAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDtcblxuICAgICAgZXJyb3IoJ01heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGNvbXBvbmVudCAnICsgXCJjYWxscyBzZXRTdGF0ZSBpbnNpZGUgdXNlRWZmZWN0LCBidXQgdXNlRWZmZWN0IGVpdGhlciBkb2Vzbid0IFwiICsgJ2hhdmUgYSBkZXBlbmRlbmN5IGFycmF5LCBvciBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VzIG9uICcgKyAnZXZlcnkgcmVuZGVyLicpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaFJlbmRlclBoYXNlU3RyaWN0TW9kZVdhcm5pbmdzSW5ERVYoKSB7XG4gIHtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nKCk7XG5cbiAgICB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncygpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG51bGw7XG5cbmZ1bmN0aW9uIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIFdlIGxldCB0aGUgb3RoZXIgd2FybmluZyBhYm91dCByZW5kZXIgcGhhc2UgdXBkYXRlcyBkZWFsIHdpdGggdGhpcyBvbmUuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoZmliZXIubW9kZSAmIChCbG9ja2luZ01vZGUgfCBDb25jdXJyZW50TW9kZSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRhZyA9IGZpYmVyLnRhZztcblxuICAgIGlmICh0YWcgIT09IEluZGV0ZXJtaW5hdGVDb21wb25lbnQgJiYgdGFnICE9PSBIb3N0Um9vdCAmJiB0YWcgIT09IENsYXNzQ29tcG9uZW50ICYmIHRhZyAhPT0gRnVuY3Rpb25Db21wb25lbnQgJiYgdGFnICE9PSBGb3J3YXJkUmVmICYmIHRhZyAhPT0gTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IFNpbXBsZU1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBCbG9jaykge1xuICAgICAgLy8gT25seSB3YXJuIGZvciB1c2VyLWRlZmluZWQgY29tcG9uZW50cywgbm90IGludGVybmFsIG9uZXMgbGlrZSBTdXNwZW5zZS5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIHNob3cgdGhlIHdob2xlIHN0YWNrIGJ1dCBkZWR1cGUgb24gdGhlIHRvcCBjb21wb25lbnQncyBuYW1lIGJlY2F1c2VcbiAgICAvLyB0aGUgcHJvYmxlbWF0aWMgY29kZSBhbG1vc3QgYWx3YXlzIGxpZXMgaW5zaWRlIHRoYXQgY29tcG9uZW50LlxuXG5cbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1JlYWN0Q29tcG9uZW50JztcblxuICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG5ldyBTZXQoW2NvbXBvbmVudE5hbWVdKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgZXJyb3IoXCJDYW4ndCBwZXJmb3JtIGEgUmVhY3Qgc3RhdGUgdXBkYXRlIG9uIGEgY29tcG9uZW50IHRoYXQgaGFzbid0IG1vdW50ZWQgeWV0LiBcIiArICdUaGlzIGluZGljYXRlcyB0aGF0IHlvdSBoYXZlIGEgc2lkZS1lZmZlY3QgaW4geW91ciByZW5kZXIgZnVuY3Rpb24gdGhhdCAnICsgJ2FzeW5jaHJvbm91c2x5IGxhdGVyIGNhbGxzIHRyaWVzIHRvIHVwZGF0ZSB0aGUgY29tcG9uZW50LiBNb3ZlIHRoaXMgd29yayB0byAnICsgJ3VzZUVmZmVjdCBpbnN0ZWFkLicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IG51bGw7XG5cbmZ1bmN0aW9uIHdhcm5BYm91dFVwZGF0ZU9uVW5tb3VudGVkRmliZXJJbkRFVihmaWJlcikge1xuICB7XG4gICAgdmFyIHRhZyA9IGZpYmVyLnRhZztcblxuICAgIGlmICh0YWcgIT09IEhvc3RSb290ICYmIHRhZyAhPT0gQ2xhc3NDb21wb25lbnQgJiYgdGFnICE9PSBGdW5jdGlvbkNvbXBvbmVudCAmJiB0YWcgIT09IEZvcndhcmRSZWYgJiYgdGFnICE9PSBNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gU2ltcGxlTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IEJsb2NrKSB7XG4gICAgICAvLyBPbmx5IHdhcm4gZm9yIHVzZXItZGVmaW5lZCBjb21wb25lbnRzLCBub3QgaW50ZXJuYWwgb25lcyBsaWtlIFN1c3BlbnNlLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgdGhlcmUgYXJlIHBlbmRpbmcgcGFzc2l2ZSBlZmZlY3RzIHVubW91bnRzIGZvciB0aGlzIEZpYmVyLFxuICAgIC8vIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGV5IHdvdWxkIGhhdmUgcHJldmVudGVkIHRoaXMgdXBkYXRlLlxuXG5cbiAgICBpZiAoKGZpYmVyLmZsYWdzICYgUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2KSAhPT0gTm9GbGFncykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2Ugc2hvdyB0aGUgd2hvbGUgc3RhY2sgYnV0IGRlZHVwZSBvbiB0aGUgdG9wIGNvbXBvbmVudCdzIG5hbWUgYmVjYXVzZVxuICAgIC8vIHRoZSBwcm9ibGVtYXRpYyBjb2RlIGFsbW9zdCBhbHdheXMgbGllcyBpbnNpZGUgdGhhdCBjb21wb25lbnQuXG5cblxuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnUmVhY3RDb21wb25lbnQnO1xuXG4gICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSBuZXcgU2V0KFtjb21wb25lbnROYW1lXSk7XG4gICAgfVxuXG4gICAgaWYgKGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cykgOyBlbHNlIHtcbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICBlcnJvcihcIkNhbid0IHBlcmZvcm0gYSBSZWFjdCBzdGF0ZSB1cGRhdGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC4gVGhpcyBcIiArICdpcyBhIG5vLW9wLCBidXQgaXQgaW5kaWNhdGVzIGEgbWVtb3J5IGxlYWsgaW4geW91ciBhcHBsaWNhdGlvbi4gVG8gJyArICdmaXgsIGNhbmNlbCBhbGwgc3Vic2NyaXB0aW9ucyBhbmQgYXN5bmNocm9ub3VzIHRhc2tzIGluICVzLicsIHRhZyA9PT0gQ2xhc3NDb21wb25lbnQgPyAndGhlIGNvbXBvbmVudFdpbGxVbm1vdW50IG1ldGhvZCcgOiAnYSB1c2VFZmZlY3QgY2xlYW51cCBmdW5jdGlvbicpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGJlZ2luV29yayQxO1xuXG57XG4gIHZhciBkdW1teUZpYmVyID0gbnVsbDtcblxuICBiZWdpbldvcmskMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcykge1xuICAgIC8vIElmIGEgY29tcG9uZW50IHRocm93cyBhbiBlcnJvciwgd2UgcmVwbGF5IGl0IGFnYWluIGluIGEgc3luY2hyb25vdXNseVxuICAgIC8vIGRpc3BhdGNoZWQgZXZlbnQsIHNvIHRoYXQgdGhlIGRlYnVnZ2VyIHdpbGwgdHJlYXQgaXQgYXMgYW4gdW5jYXVnaHRcbiAgICAvLyBlcnJvciBTZWUgUmVhY3RFcnJvclV0aWxzIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgIC8vIEJlZm9yZSBlbnRlcmluZyB0aGUgYmVnaW4gcGhhc2UsIGNvcHkgdGhlIHdvcmstaW4tcHJvZ3Jlc3Mgb250byBhIGR1bW15XG4gICAgLy8gZmliZXIuIElmIGJlZ2luV29yayB0aHJvd3MsIHdlJ2xsIHVzZSB0aGlzIHRvIHJlc2V0IHRoZSBzdGF0ZS5cbiAgICB2YXIgb3JpZ2luYWxXb3JrSW5Qcm9ncmVzc0NvcHkgPSBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVihkdW1teUZpYmVyLCB1bml0T2ZXb3JrKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYmVnaW5Xb3JrKGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKTtcbiAgICB9IGNhdGNoIChvcmlnaW5hbEVycm9yKSB7XG4gICAgICBpZiAob3JpZ2luYWxFcnJvciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3JpZ2luYWxFcnJvciA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9yaWdpbmFsRXJyb3IudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBEb24ndCByZXBsYXkgcHJvbWlzZXMuIFRyZWF0IGV2ZXJ5dGhpbmcgZWxzZSBsaWtlIGFuIGVycm9yLlxuICAgICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgICAgfSAvLyBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIHdpdGggaGFuZGxlRXJyb3I7IGFueSBjaGFuZ2VzIGhlcmUgbXVzdCBoYXZlXG4gICAgICAvLyBjb3JyZXNwb25kaW5nIGNoYW5nZXMgdGhlcmUuXG5cblxuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICByZXNldEhvb2tzQWZ0ZXJUaHJvdygpOyAvLyBEb24ndCByZXNldCBjdXJyZW50IGRlYnVnIGZpYmVyLCBzaW5jZSB3ZSdyZSBhYm91dCB0byB3b3JrIG9uIHRoZVxuICAgICAgLy8gc2FtZSBmaWJlciBhZ2Fpbi5cbiAgICAgIC8vIFVud2luZCB0aGUgZmFpbGVkIHN0YWNrIGZyYW1lXG5cbiAgICAgIHVud2luZEludGVycnVwdGVkV29yayh1bml0T2ZXb3JrKTsgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgcHJvcGVydGllcyBvZiB0aGUgZmliZXIuXG5cbiAgICAgIGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKHVuaXRPZldvcmssIG9yaWdpbmFsV29ya0luUHJvZ3Jlc3NDb3B5KTtcblxuICAgICAgaWYgKCB1bml0T2ZXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAvLyBSZXNldCB0aGUgcHJvZmlsZXIgdGltZXIuXG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKTtcbiAgICAgIH0gLy8gUnVuIGJlZ2luV29yayBhZ2Fpbi5cblxuXG4gICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgYmVnaW5Xb3JrLCBudWxsLCBjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcyk7XG5cbiAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgIHZhciByZXBsYXlFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTsgLy8gYGludm9rZUd1YXJkZWRDYWxsYmFja2Agc29tZXRpbWVzIHNldHMgYW4gZXhwYW5kbyBgX3N1cHByZXNzTG9nZ2luZ2AuXG4gICAgICAgIC8vIFJldGhyb3cgdGhpcyBlcnJvciBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBvbmUuXG5cbiAgICAgICAgdGhyb3cgcmVwbGF5RXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGJyYW5jaCBpcyByZWFjaGFibGUgaWYgdGhlIHJlbmRlciBwaGFzZSBpcyBpbXB1cmUuXG4gICAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG52YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSBmYWxzZTtcbnZhciBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQ7XG5cbntcbiAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50ID0gbmV3IFNldCgpO1xufVxuXG5mdW5jdGlvbiB3YXJuQWJvdXRSZW5kZXJQaGFzZVVwZGF0ZXNJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKGlzUmVuZGVyaW5nICYmIChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAhZ2V0SXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZUluREVWKCkpIHtcbiAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZW5kZXJpbmdDb21wb25lbnROYW1lID0gd29ya0luUHJvZ3Jlc3MgJiYgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnVW5rbm93bic7IC8vIERlZHVwZSBieSB0aGUgcmVuZGVyaW5nIGNvbXBvbmVudCBiZWNhdXNlIGl0J3MgdGhlIG9uZSB0aGF0IG5lZWRzIHRvIGJlIGZpeGVkLlxuXG4gICAgICAgICAgICB2YXIgZGVkdXBlS2V5ID0gcmVuZGVyaW5nQ29tcG9uZW50TmFtZTtcblxuICAgICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQuaGFzKGRlZHVwZUtleSkpIHtcbiAgICAgICAgICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50LmFkZChkZWR1cGVLZXkpO1xuICAgICAgICAgICAgICB2YXIgc2V0U3RhdGVDb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCB1cGRhdGUgYSBjb21wb25lbnQgKGAlc2ApIHdoaWxlIHJlbmRlcmluZyBhICcgKyAnZGlmZmVyZW50IGNvbXBvbmVudCAoYCVzYCkuIFRvIGxvY2F0ZSB0aGUgYmFkIHNldFN0YXRlKCkgY2FsbCBpbnNpZGUgYCVzYCwgJyArICdmb2xsb3cgdGhlIHN0YWNrIHRyYWNlIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc2V0c3RhdGUtaW4tcmVuZGVyJywgc2V0U3RhdGVDb21wb25lbnROYW1lLCByZW5kZXJpbmdDb21wb25lbnROYW1lLCByZW5kZXJpbmdDb21wb25lbnROYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlcikge1xuICAgICAgICAgICAgICBlcnJvcignQ2Fubm90IHVwZGF0ZSBkdXJpbmcgYW4gZXhpc3Rpbmcgc3RhdGUgdHJhbnNpdGlvbiAoc3VjaCBhcyAnICsgJ3dpdGhpbiBgcmVuZGVyYCkuIFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgJyArICdmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuJyk7XG5cbiAgICAgICAgICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIGEgJ3NoYXJlZCcgdmFyaWFibGUgdGhhdCBjaGFuZ2VzIHdoZW4gYWN0KCkgb3BlbnMvY2xvc2VzIGluIHRlc3RzLlxuXG5cbnZhciBJc1RoaXNSZW5kZXJlckFjdGluZyA9IHtcbiAgY3VycmVudDogZmFsc2Vcbn07XG5mdW5jdGlvbiB3YXJuSWZOb3RTY29wZWRXaXRoTWF0Y2hpbmdBY3QoZmliZXIpIHtcbiAge1xuICAgIGlmICggSXNTb21lUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gdHJ1ZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ICE9PSB0cnVlKSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgZXJyb3IoXCJJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyB0aGUgd3JvbmcgYWN0KCkgYXJvdW5kIHlvdXIgdGVzdCBpbnRlcmFjdGlvbnMuXFxuXCIgKyAnQmUgc3VyZSB0byB1c2UgdGhlIG1hdGNoaW5nIHZlcnNpb24gb2YgYWN0KCkgY29ycmVzcG9uZGluZyB0byB5b3VyIHJlbmRlcmVyOlxcblxcbicgKyAnLy8gZm9yIHJlYWN0LWRvbTpcXG4nICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgJ2ltcG9ydCB7YWN0fSBmcicgKyBcIm9tICdyZWFjdC1kb20vdGVzdC11dGlscyc7XFxuXCIgKyAnLy8gLi4uXFxuJyArICdhY3QoKCkgPT4gLi4uKTtcXG5cXG4nICsgJy8vIGZvciByZWFjdC10ZXN0LXJlbmRlcmVyOlxcbicgKyAvLyBCcmVhayB1cCBpbXBvcnRzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICAnaW1wb3J0IFRlc3RSZW5kZXJlciBmcicgKyBcIm9tIHJlYWN0LXRlc3QtcmVuZGVyZXInO1xcblwiICsgJ2NvbnN0IHthY3R9ID0gVGVzdFJlbmRlcmVyO1xcbicgKyAnLy8gLi4uXFxuJyArICdhY3QoKCkgPT4gLi4uKTsnKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdFZmZlY3RzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmICggKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSAhPT0gTm9Nb2RlICYmIElzU29tZVJlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlICYmIElzVGhpc1JlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICBlcnJvcignQW4gdXBkYXRlIHRvICVzIHJhbiBhbiBlZmZlY3QsIGJ1dCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuJyArICdXaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCBjYXVzZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBzaG91bGQgYmUgJyArICd3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuJyArICdhY3QoKCkgPT4ge1xcbicgKyAnICAvKiBmaXJlIGV2ZW50cyB0aGF0IHVwZGF0ZSBzdGF0ZSAqL1xcbicgKyAnfSk7XFxuJyArICcvKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcbicgKyBcIlRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgXCIgKyAnaW4gdGhlIGJyb3dzZXIuJyArICcgTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdCcsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmICggZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0ICYmIElzU29tZVJlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlICYmIElzVGhpc1JlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgZXJyb3IoJ0FuIHVwZGF0ZSB0byAlcyBpbnNpZGUgYSB0ZXN0IHdhcyBub3Qgd3JhcHBlZCBpbiBhY3QoLi4uKS5cXG5cXG4nICsgJ1doZW4gdGVzdGluZywgY29kZSB0aGF0IGNhdXNlcyBSZWFjdCBzdGF0ZSB1cGRhdGVzIHNob3VsZCBiZSAnICsgJ3dyYXBwZWQgaW50byBhY3QoLi4uKTpcXG5cXG4nICsgJ2FjdCgoKSA9PiB7XFxuJyArICcgIC8qIGZpcmUgZXZlbnRzIHRoYXQgdXBkYXRlIHN0YXRlICovXFxuJyArICd9KTtcXG4nICsgJy8qIGFzc2VydCBvbiB0aGUgb3V0cHV0ICovXFxuXFxuJyArIFwiVGhpcyBlbnN1cmVzIHRoYXQgeW91J3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIHdvdWxkIHNlZSBcIiArICdpbiB0aGUgYnJvd3Nlci4nICsgJyBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93cmFwLXRlc3RzLXdpdGgtYWN0JywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luRGV2ID0gd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luREVWOyAvLyBJbiB0ZXN0cywgd2Ugd2FudCB0byBlbmZvcmNlIGEgbW9ja2VkIHNjaGVkdWxlci5cblxudmFyIGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID0gZmFsc2U7IC8vIFRPRE8gQmVmb3JlIHdlIHJlbGVhc2UgY29uY3VycmVudCBtb2RlLCByZXZpc2l0IHRoaXMgYW5kIGRlY2lkZSB3aGV0aGVyIGEgbW9ja2VkXG4vLyBzY2hlZHVsZXIgaXMgdGhlIGFjdHVhbCByZWNvbW1lbmRhdGlvbi4gVGhlIGFsdGVybmF0aXZlIGNvdWxkIGJlIGEgdGVzdGluZyBidWlsZCxcbi8vIGEgbmV3IGxpYiwgb3Igd2hhdGV2ZXI7IHdlIGR1bm5vIGp1c3QgeWV0LiBUaGlzIG1lc3NhZ2UgaXMgZm9yIGVhcmx5IGFkb3B0ZXJzXG4vLyB0byBnZXQgdGhlaXIgdGVzdHMgcmlnaHQuXG5cbmZ1bmN0aW9uIHdhcm5JZlVubW9ja2VkU2NoZWR1bGVyKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkFib3V0VW5tb2NrZWRTY2hlZHVsZXIgPT09IGZhbHNlICYmIFNjaGVkdWxlci51bnN0YWJsZV9mbHVzaEFsbFdpdGhvdXRBc3NlcnRpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGZpYmVyLm1vZGUgJiBCbG9ja2luZ01vZGUgfHwgZmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignSW4gQ29uY3VycmVudCBvciBTeW5jIG1vZGVzLCB0aGUgXCJzY2hlZHVsZXJcIiBtb2R1bGUgbmVlZHMgdG8gYmUgbW9ja2VkICcgKyAndG8gZ3VhcmFudGVlIGNvbnNpc3RlbnQgYmVoYXZpb3VyIGFjcm9zcyB0ZXN0cyBhbmQgYnJvd3NlcnMuICcgKyAnRm9yIGV4YW1wbGUsIHdpdGggamVzdDogXFxuJyArIC8vIEJyZWFrIHVwIHJlcXVpcmVzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICBcImplc3QubW9jaygnc2NoZWR1bGVyJywgKCkgPT4gcmVxdWlyZVwiICsgXCIoJ3NjaGVkdWxlci91bnN0YWJsZV9tb2NrJykpO1xcblxcblwiICsgJ0ZvciBtb3JlIGluZm8sIHZpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9tb2NrLXNjaGVkdWxlcicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wdXRlVGhyZWFkSUQocm9vdCwgbGFuZSkge1xuICAvLyBJbnRlcmFjdGlvbiB0aHJlYWRzIGFyZSB1bmlxdWUgcGVyIHJvb3QgYW5kIGV4cGlyYXRpb24gdGltZS5cbiAgLy8gTk9URTogSW50ZW50aW9uYWxseSB1bnNvdW5kIGNhc3QuIEFsbCB0aGF0IG1hdHRlcnMgaXMgdGhhdCBpdCdzIGEgbnVtYmVyXG4gIC8vIGFuZCBpdCByZXByZXNlbnRzIGEgYmF0Y2ggb2Ygd29yay4gQ291bGQgbWFrZSBhIGhlbHBlciBmdW5jdGlvbiBpbnN0ZWFkLFxuICAvLyBidXQgbWVoIHRoaXMgaXMgZmluZSBmb3Igbm93LlxuICByZXR1cm4gbGFuZSAqIDEwMDAgKyByb290LmludGVyYWN0aW9uVGhyZWFkSUQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtTcGF3bmVkV29yayhsYW5lKSB7XG5cbiAgaWYgKHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID09PSBudWxsKSB7XG4gICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBbbGFuZV07XG4gIH0gZWxzZSB7XG4gICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIucHVzaChsYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZUludGVyYWN0aW9ucyhyb290LCBsYW5lLCBpbnRlcmFjdGlvbnMpIHtcblxuICBpZiAoaW50ZXJhY3Rpb25zLnNpemUgPiAwKSB7XG4gICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwO1xuICAgIHZhciBwZW5kaW5nSW50ZXJhY3Rpb25zID0gcGVuZGluZ0ludGVyYWN0aW9uTWFwLmdldChsYW5lKTtcblxuICAgIGlmIChwZW5kaW5nSW50ZXJhY3Rpb25zICE9IG51bGwpIHtcbiAgICAgIGludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICBpZiAoIXBlbmRpbmdJbnRlcmFjdGlvbnMuaGFzKGludGVyYWN0aW9uKSkge1xuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBhc3luYyB3b3JrIGNvdW50IGZvciBwcmV2aW91c2x5IHVuc2NoZWR1bGVkIGludGVyYWN0aW9uLlxuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbnMuYWRkKGludGVyYWN0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuc2V0KGxhbmUsIG5ldyBTZXQoaW50ZXJhY3Rpb25zKSk7IC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBhc3luYyB3b3JrIGNvdW50IGZvciB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG5cbiAgICAgIGludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgc3Vic2NyaWJlciA9IHRyYWNpbmcuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRocmVhZElEID0gY29tcHV0ZVRocmVhZElEKHJvb3QsIGxhbmUpO1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTY2hlZHVsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKSB7XG5cbiAgc2NoZWR1bGVJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSwgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50KTtcbn1cblxuZnVuY3Rpb24gc3RhcnRXb3JrT25QZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKSB7XG4gIC8vIHdlIGNhbiBhY2N1cmF0ZWx5IGF0dHJpYnV0ZSB0aW1lIHNwZW50IHdvcmtpbmcgb24gaXQsIEFuZCBzbyB0aGF0IGNhc2NhZGluZ1xuICAvLyB3b3JrIHRyaWdnZXJlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aCBpdC5cblxuXG4gIHZhciBpbnRlcmFjdGlvbnMgPSBuZXcgU2V0KCk7XG4gIHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwLmZvckVhY2goZnVuY3Rpb24gKHNjaGVkdWxlZEludGVyYWN0aW9ucywgc2NoZWR1bGVkTGFuZSkge1xuICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKGxhbmVzLCBzY2hlZHVsZWRMYW5lKSkge1xuICAgICAgc2NoZWR1bGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBpbnRlcmFjdGlvbnMuYWRkKGludGVyYWN0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7IC8vIFN0b3JlIHRoZSBjdXJyZW50IHNldCBvZiBpbnRlcmFjdGlvbnMgb24gdGhlIEZpYmVyUm9vdCBmb3IgYSBmZXcgcmVhc29uczpcbiAgLy8gV2UgY2FuIHJlLXVzZSBpdCBpbiBob3QgZnVuY3Rpb25zIGxpa2UgcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290KClcbiAgLy8gd2l0aG91dCBoYXZpbmcgdG8gcmVjYWxjdWxhdGUgaXQuIFdlIHdpbGwgYWxzbyB1c2UgaXQgaW4gY29tbWl0V29yaygpIHRvXG4gIC8vIHBhc3MgdG8gYW55IFByb2ZpbGVyIG9uUmVuZGVyKCkgaG9va3MuIFRoaXMgYWxzbyBwcm92aWRlcyBEZXZUb29scyB3aXRoIGFcbiAgLy8gd2F5IHRvIGFjY2VzcyBpdCB3aGVuIHRoZSBvbkNvbW1pdFJvb3QoKSBob29rIGlzIGNhbGxlZC5cblxuICByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zID0gaW50ZXJhY3Rpb25zO1xuXG4gIGlmIChpbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICB2YXIgc3Vic2NyaWJlciA9IHRyYWNpbmcuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRocmVhZElEID0gY29tcHV0ZVRocmVhZElEKHJvb3QsIGxhbmVzKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaFBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgY29tbWl0dGVkTGFuZXMpIHtcblxuICB2YXIgcmVtYWluaW5nTGFuZXNBZnRlckNvbW1pdCA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICB2YXIgc3Vic2NyaWJlcjtcblxuICB0cnkge1xuICAgIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgICAgLy8gRklYTUU6IE1vcmUgdGhhbiBvbmUgbGFuZSBjYW4gZmluaXNoIGluIGEgc2luZ2xlIGNvbW1pdC5cbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBjb21taXR0ZWRMYW5lcyk7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQocm9vdC5tZW1vaXplZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBJZiB0aGUgc3Vic2NyaWJlciB0aHJvd3MsIHJldGhyb3cgaXQgaW4gYSBzZXBhcmF0ZSB0YXNrXG4gICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBDbGVhciBjb21wbGV0ZWQgaW50ZXJhY3Rpb25zIGZyb20gdGhlIHBlbmRpbmcgTWFwLlxuICAgIC8vIFVubGVzcyB0aGUgcmVuZGVyIHdhcyBzdXNwZW5kZWQgb3IgY2FzY2FkaW5nIHdvcmsgd2FzIHNjaGVkdWxlZCxcbiAgICAvLyBJbiB3aGljaCBjYXNlXHUyMDEzIGxlYXZlIHBlbmRpbmcgaW50ZXJhY3Rpb25zIHVudGlsIHRoZSBzdWJzZXF1ZW50IHJlbmRlci5cbiAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9uTWFwID0gcm9vdC5wZW5kaW5nSW50ZXJhY3Rpb25NYXA7XG4gICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLmZvckVhY2goZnVuY3Rpb24gKHNjaGVkdWxlZEludGVyYWN0aW9ucywgbGFuZSkge1xuICAgICAgLy8gT25seSBkZWNyZW1lbnQgdGhlIHBlbmRpbmcgaW50ZXJhY3Rpb24gY291bnQgaWYgd2UncmUgZG9uZS5cbiAgICAgIC8vIElmIHRoZXJlJ3Mgc3RpbGwgd29yayBhdCB0aGUgY3VycmVudCBwcmlvcml0eSxcbiAgICAgIC8vIFRoYXQgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIHdhaXRpbmcgZm9yIHN1c3BlbnNlIGRhdGEuXG4gICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVtYWluaW5nTGFuZXNBZnRlckNvbW1pdCwgbGFuZSkpIHtcbiAgICAgICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLmRlbGV0ZShsYW5lKTtcbiAgICAgICAgc2NoZWR1bGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tO1xuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyBJZiB0aGUgc3Vic2NyaWJlciB0aHJvd3MsIHJldGhyb3cgaXQgaW4gYSBzZXBhcmF0ZSB0YXNrXG4gICAgICAgICAgICAgIHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59IC8vIGBhY3RgIHRlc3RpbmcgQVBJXG5cbmZ1bmN0aW9uIHNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpIHtcbiAgLy8gTmV2ZXIgZm9yY2UgZmx1c2ggaW4gcHJvZHVjdGlvbi4gVGhpcyBmdW5jdGlvbiBzaG91bGQgZ2V0IHN0cmlwcGVkIG91dC5cbiAgcmV0dXJuICBhY3RpbmdVcGRhdGVzU2NvcGVEZXB0aCA+IDA7XG59XG4vLyBzbyB3ZSBjYW4gdGVsbCBpZiBhbnkgYXN5bmMgYWN0KCkgY2FsbHMgdHJ5IHRvIHJ1biBpbiBwYXJhbGxlbC5cblxuXG52YXIgYWN0aW5nVXBkYXRlc1Njb3BlRGVwdGggPSAwO1xuXG5mdW5jdGlvbiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhmaWJlcikge1xuICBmaWJlci5zaWJsaW5nID0gbnVsbDtcbiAgZmliZXIuc3RhdGVOb2RlID0gbnVsbDtcbn1cblxudmFyIHJlc29sdmVGYW1pbHkgPSBudWxsOyAvLyAkRmxvd0ZpeE1lIEZsb3cgZ2V0cyBjb25mdXNlZCBieSBhIFdlYWtTZXQgZmVhdHVyZSBjaGVjayBiZWxvdy5cblxudmFyIGZhaWxlZEJvdW5kYXJpZXMgPSBudWxsO1xudmFyIHNldFJlZnJlc2hIYW5kbGVyID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAge1xuICAgIHJlc29sdmVGYW1pbHkgPSBoYW5kbGVyO1xuICB9XG59O1xuZnVuY3Rpb24gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG5cbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH0gLy8gVXNlIHRoZSBsYXRlc3Qga25vd24gaW1wbGVtZW50YXRpb24uXG5cblxuICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAgLy8gTm8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMuXG4gIHJldHVybiByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSk7XG59XG5mdW5jdGlvbiByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuXG4gICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSByZWFsIGZvcndhcmRSZWYuIERvbid0IHdhbnQgdG8gY3Jhc2ggZWFybHkuXG4gICAgICBpZiAodHlwZSAhPT0gbnVsbCAmJiB0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHR5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIEZvcndhcmRSZWYgaXMgc3BlY2lhbCBiZWNhdXNlIGl0cyByZXNvbHZlZCAudHlwZSBpcyBhbiBvYmplY3QsXG4gICAgICAgIC8vIGJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQgd2Ugb25seSBoYXZlIGl0cyBpbm5lciByZW5kZXIgZnVuY3Rpb24gaW4gdGhlIG1hcC5cbiAgICAgICAgLy8gSWYgdGhhdCBpbm5lciByZW5kZXIgZnVuY3Rpb24gaXMgZGlmZmVyZW50LCB3ZSdsbCBidWlsZCBhIG5ldyBmb3J3YXJkUmVmIHR5cGUuXG4gICAgICAgIHZhciBjdXJyZW50UmVuZGVyID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUucmVuZGVyKTtcblxuICAgICAgICBpZiAodHlwZS5yZW5kZXIgIT09IGN1cnJlbnRSZW5kZXIpIHtcbiAgICAgICAgICB2YXIgc3ludGhldGljVHlwZSA9IHtcbiAgICAgICAgICAgICQkdHlwZW9mOiBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFLFxuICAgICAgICAgICAgcmVuZGVyOiBjdXJyZW50UmVuZGVyXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmICh0eXBlLmRpc3BsYXlOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN5bnRoZXRpY1R5cGUuZGlzcGxheU5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzeW50aGV0aWNUeXBlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH0gLy8gVXNlIHRoZSBsYXRlc3Qga25vd24gaW1wbGVtZW50YXRpb24uXG5cblxuICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgfVxufVxuZnVuY3Rpb24gaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGZpYmVyLCBlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgcHJldlR5cGUgPSBmaWJlci5lbGVtZW50VHlwZTtcbiAgICB2YXIgbmV4dFR5cGUgPSBlbGVtZW50LnR5cGU7IC8vIElmIHdlIGdvdCBoZXJlLCB3ZSBrbm93IHR5cGVzIGFyZW4ndCA9PT0gZXF1YWwuXG5cbiAgICB2YXIgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSBmYWxzZTtcbiAgICB2YXIgJCR0eXBlb2ZOZXh0VHlwZSA9IHR5cGVvZiBuZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgbmV4dFR5cGUgIT09IG51bGwgPyBuZXh0VHlwZS4kJHR5cGVvZiA6IG51bGw7XG5cbiAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV4dFR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXh0VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICAvLyBXZSBkb24ndCBrbm93IHRoZSBpbm5lciB0eXBlIHlldC5cbiAgICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGF0IHRoZSBsYXp5IGlubmVyIHR5cGUgaXMgc3RhYmxlLFxuICAgICAgICAgICAgLy8gYW5kIHNvIGl0IGlzIHN1ZmZpY2llbnQgdG8gYXZvaWQgcmVjb25jaWxpbmcgaXQgYXdheS5cbiAgICAgICAgICAgIC8vIFdlJ3JlIG5vdCBnb2luZyB0byB1bndyYXAgb3IgYWN0dWFsbHkgdXNlIHRoZSBuZXcgbGF6eSB0eXBlLlxuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAge1xuICAgICAgICAgIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBpZiBpdCB3YXMgYnV0IGNhbiBubyBsb25nZXIgYmUgc2ltcGxlLFxuICAgICAgICAgICAgLy8gd2Ugc2hvdWxkbid0IHNldCB0aGlzLlxuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gQ2hlY2sgaWYgYm90aCB0eXBlcyBoYXZlIGEgZmFtaWx5IGFuZCBpdCdzIHRoZSBzYW1lIG9uZS5cblxuXG4gICAgaWYgKG5lZWRzQ29tcGFyZUZhbWlsaWVzKSB7XG4gICAgICAvLyBOb3RlOiBtZW1vKCkgYW5kIGZvcndhcmRSZWYoKSB3ZSdsbCBjb21wYXJlIG91dGVyIHJhdGhlciB0aGFuIGlubmVyIHR5cGUuXG4gICAgICAvLyBUaGlzIG1lYW5zIGJvdGggb2YgdGhlbSBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgdG8gcHJlc2VydmUgc3RhdGUuXG4gICAgICAvLyBJZiB3ZSB1bndyYXBwZWQgYW5kIGNvbXBhcmVkIHRoZSBpbm5lciB0eXBlcyBmb3Igd3JhcHBlcnMgaW5zdGVhZCxcbiAgICAgIC8vIHRoZW4gd2Ugd291bGQgcmlzayBmYWxzZWx5IHNheWluZyB0d28gc2VwYXJhdGUgbWVtbyhGb28pXG4gICAgICAvLyBjYWxscyBhcmUgZXF1aXZhbGVudCBiZWNhdXNlIHRoZXkgd3JhcCB0aGUgc2FtZSBGb28gZnVuY3Rpb24uXG4gICAgICB2YXIgcHJldkZhbWlseSA9IHJlc29sdmVGYW1pbHkocHJldlR5cGUpO1xuXG4gICAgICBpZiAocHJldkZhbWlseSAhPT0gdW5kZWZpbmVkICYmIHByZXZGYW1pbHkgPT09IHJlc29sdmVGYW1pbHkobmV4dFR5cGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgV2Vha1NldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzID09PSBudWxsKSB7XG4gICAgICBmYWlsZWRCb3VuZGFyaWVzID0gbmV3IFdlYWtTZXQoKTtcbiAgICB9XG5cbiAgICBmYWlsZWRCb3VuZGFyaWVzLmFkZChmaWJlcik7XG4gIH1cbn1cbnZhciBzY2hlZHVsZVJlZnJlc2ggPSBmdW5jdGlvbiAocm9vdCwgdXBkYXRlKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc3RhbGVGYW1pbGllcyA9IHVwZGF0ZS5zdGFsZUZhbWlsaWVzLFxuICAgICAgICB1cGRhdGVkRmFtaWxpZXMgPSB1cGRhdGUudXBkYXRlZEZhbWlsaWVzO1xuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICBmbHVzaFN5bmMoZnVuY3Rpb24gKCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShyb290LmN1cnJlbnQsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcyk7XG4gICAgfSk7XG4gIH1cbn07XG52YXIgc2NoZWR1bGVSb290ID0gZnVuY3Rpb24gKHJvb3QsIGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChyb290LmNvbnRleHQgIT09IGVtcHR5Q29udGV4dE9iamVjdCkge1xuICAgICAgLy8gU3VwZXIgZWRnZSBjYXNlOiByb290IGhhcyBhIGxlZ2FjeSBfcmVuZGVyU3VidHJlZSBjb250ZXh0XG4gICAgICAvLyBidXQgd2UgZG9uJ3Qga25vdyB0aGUgcGFyZW50Q29tcG9uZW50IHNvIHdlIGNhbid0IHBhc3MgaXQuXG4gICAgICAvLyBKdXN0IGlnbm9yZS4gV2UnbGwgZGVsZXRlIHRoaXMgd2l0aCBfcmVuZGVyU3VidHJlZSBjb2RlIHBhdGggbGF0ZXIuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgIGZsdXNoU3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVDb250YWluZXIoZWxlbWVudCwgcm9vdCwgbnVsbCwgbnVsbCk7XG4gICAgfSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoZmliZXIsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcykge1xuICB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZSxcbiAgICAgICAgY2hpbGQgPSBmaWJlci5jaGlsZCxcbiAgICAgICAgc2libGluZyA9IGZpYmVyLnNpYmxpbmcsXG4gICAgICAgIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgdmFyIGNhbmRpZGF0ZVR5cGUgPSBudWxsO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCByZXNvbHZlRmFtaWx5IHRvIGJlIHNldCBkdXJpbmcgaG90IHJlbG9hZC4nKTtcbiAgICB9XG5cbiAgICB2YXIgbmVlZHNSZW5kZXIgPSBmYWxzZTtcbiAgICB2YXIgbmVlZHNSZW1vdW50ID0gZmFsc2U7XG5cbiAgICBpZiAoY2FuZGlkYXRlVHlwZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkoY2FuZGlkYXRlVHlwZSk7XG5cbiAgICAgIGlmIChmYW1pbHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc3RhbGVGYW1pbGllcy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodXBkYXRlZEZhbWlsaWVzLmhhcyhmYW1pbHkpKSB7XG4gICAgICAgICAgaWYgKHRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5lZWRzUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmFpbGVkQm91bmRhcmllcyAhPT0gbnVsbCkge1xuICAgICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMuaGFzKGZpYmVyKSB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgZmFpbGVkQm91bmRhcmllcy5oYXMoYWx0ZXJuYXRlKSkge1xuICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWVkc1JlbW91bnQpIHtcbiAgICAgIGZpYmVyLl9kZWJ1Z05lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5lZWRzUmVtb3VudCB8fCBuZWVkc1JlbmRlcikge1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCAmJiAhbmVlZHNSZW1vdW50KSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KGNoaWxkLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH1cblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KHNpYmxpbmcsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2ggPSBmdW5jdGlvbiAocm9vdCwgZmFtaWxpZXMpIHtcbiAge1xuICAgIHZhciBob3N0SW5zdGFuY2VzID0gbmV3IFNldCgpO1xuICAgIHZhciB0eXBlcyA9IG5ldyBTZXQoZmFtaWxpZXMubWFwKGZ1bmN0aW9uIChmYW1pbHkpIHtcbiAgICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgICB9KSk7XG4gICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KHJvb3QuY3VycmVudCwgdHlwZXMsIGhvc3RJbnN0YW5jZXMpO1xuICAgIHJldHVybiBob3N0SW5zdGFuY2VzO1xuICB9XG59O1xuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoZmliZXIsIHR5cGVzLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZCxcbiAgICAgICAgc2libGluZyA9IGZpYmVyLnNpYmxpbmcsXG4gICAgICAgIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgdmFyIGNhbmRpZGF0ZVR5cGUgPSBudWxsO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZGlkTWF0Y2ggPSBmYWxzZTtcblxuICAgIGlmIChjYW5kaWRhdGVUeXBlICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZXMuaGFzKGNhbmRpZGF0ZVR5cGUpKSB7XG4gICAgICAgIGRpZE1hdGNoID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlkTWF0Y2gpIHtcbiAgICAgIC8vIFdlIGhhdmUgYSBtYXRjaC4gVGhpcyBvbmx5IGRyaWxscyBkb3duIHRvIHRoZSBjbG9zZXN0IGhvc3QgY29tcG9uZW50cy5cbiAgICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBzZWFyY2ggZGVlcGVyIGJlY2F1c2UgZm9yIHRoZSBwdXJwb3NlIG9mIGdpdmluZ1xuICAgICAgLy8gdmlzdWFsIGZlZWRiYWNrLCBcImZsYXNoaW5nXCIgb3V0ZXJtb3N0IHBhcmVudCByZWN0YW5nbGVzIGlzIHN1ZmZpY2llbnQuXG4gICAgICBmaW5kSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUncyBubyBtYXRjaCwgbWF5YmUgdGhlcmUgd2lsbCBiZSBvbmUgZnVydGhlciBkb3duIGluIHRoZSBjaGlsZCB0cmVlLlxuICAgICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShjaGlsZCwgdHlwZXMsIGhvc3RJbnN0YW5jZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoc2libGluZywgdHlwZXMsIGhvc3RJbnN0YW5jZXMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgZm91bmRIb3N0SW5zdGFuY2VzID0gZmluZENoaWxkSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKTtcblxuICAgIGlmIChmb3VuZEhvc3RJbnN0YW5jZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueSBob3N0IGNoaWxkcmVuLCBmYWxsYmFjayB0byBjbG9zZXN0IGhvc3QgcGFyZW50LlxuXG5cbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHN3aXRjaCAobm9kZS50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gcmVhY2ggcm9vdCBmaXJzdC4nKTtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ2hpbGRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpIHtcbiAge1xuICAgIHZhciBub2RlID0gZmliZXI7XG4gICAgdmFyIGZvdW5kSG9zdEluc3RhbmNlcyA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgICAvLyBXZSBnb3QgYSBtYXRjaC5cbiAgICAgICAgZm91bmRIb3N0SW5zdGFuY2VzID0gdHJ1ZTtcbiAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUpOyAvLyBUaGVyZSBtYXkgc3RpbGwgYmUgbW9yZSwgc28ga2VlcCBzZWFyY2hpbmcuXG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmaWJlcikge1xuICAgICAgICByZXR1cm4gZm91bmRIb3N0SW5zdGFuY2VzO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gZmliZXIpIHtcbiAgICAgICAgICByZXR1cm4gZm91bmRIb3N0SW5zdGFuY2VzO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGhhc0JhZE1hcFBvbHlmaWxsO1xuXG57XG4gIGhhc0JhZE1hcFBvbHlmaWxsID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICB2YXIgbm9uRXh0ZW5zaWJsZU9iamVjdCA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovXG5cbiAgICBuZXcgTWFwKFtbbm9uRXh0ZW5zaWJsZU9iamVjdCwgbnVsbF1dKTtcbiAgICBuZXcgU2V0KFtub25FeHRlbnNpYmxlT2JqZWN0XSk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1uZXcgKi9cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRPRE86IENvbnNpZGVyIHdhcm5pbmcgYWJvdXQgYmFkIHBvbHlmaWxsc1xuICAgIGhhc0JhZE1hcFBvbHlmaWxsID0gdHJ1ZTtcbiAgfVxufVxuXG52YXIgZGVidWdDb3VudGVyID0gMTtcblxuZnVuY3Rpb24gRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgLy8gSW5zdGFuY2VcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMua2V5ID0ga2V5O1xuICB0aGlzLmVsZW1lbnRUeXBlID0gbnVsbDtcbiAgdGhpcy50eXBlID0gbnVsbDtcbiAgdGhpcy5zdGF0ZU5vZGUgPSBudWxsOyAvLyBGaWJlclxuXG4gIHRoaXMucmV0dXJuID0gbnVsbDtcbiAgdGhpcy5jaGlsZCA9IG51bGw7XG4gIHRoaXMuc2libGluZyA9IG51bGw7XG4gIHRoaXMuaW5kZXggPSAwO1xuICB0aGlzLnJlZiA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzO1xuICB0aGlzLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICB0aGlzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgdGhpcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgdGhpcy5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICB0aGlzLm1vZGUgPSBtb2RlOyAvLyBFZmZlY3RzXG5cbiAgdGhpcy5mbGFncyA9IE5vRmxhZ3M7XG4gIHRoaXMubmV4dEVmZmVjdCA9IG51bGw7XG4gIHRoaXMuZmlyc3RFZmZlY3QgPSBudWxsO1xuICB0aGlzLmxhc3RFZmZlY3QgPSBudWxsO1xuICB0aGlzLmxhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5hbHRlcm5hdGUgPSBudWxsO1xuXG4gIHtcbiAgICAvLyBOb3RlOiBUaGUgZm9sbG93aW5nIGlzIGRvbmUgdG8gYXZvaWQgYSB2OCBwZXJmb3JtYW5jZSBjbGlmZi5cbiAgICAvL1xuICAgIC8vIEluaXRpYWxpemluZyB0aGUgZmllbGRzIGJlbG93IHRvIHNtaXMgYW5kIGxhdGVyIHVwZGF0aW5nIHRoZW0gd2l0aFxuICAgIC8vIGRvdWJsZSB2YWx1ZXMgd2lsbCBjYXVzZSBGaWJlcnMgdG8gZW5kIHVwIGhhdmluZyBzZXBhcmF0ZSBzaGFwZXMuXG4gICAgLy8gVGhpcyBiZWhhdmlvci9idWcgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9uKCkuXG4gICAgLy8gRm9ydHVuYXRlbHkgdGhpcyBvbmx5IGltcGFjdHMgREVWIGJ1aWxkcy5cbiAgICAvLyBVbmZvcnR1bmF0ZWx5IGl0IG1ha2VzIFJlYWN0IHVudXNhYmx5IHNsb3cgZm9yIHNvbWUgYXBwbGljYXRpb25zLlxuICAgIC8vIFRvIHdvcmsgYXJvdW5kIHRoaXMsIGluaXRpYWxpemUgdGhlIGZpZWxkcyBiZWxvdyB3aXRoIGRvdWJsZXMuXG4gICAgLy9cbiAgICAvLyBMZWFybiBtb3JlIGFib3V0IHRoaXMgaGVyZTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE0MzY1XG4gICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9ODUzOFxuICAgIHRoaXMuYWN0dWFsRHVyYXRpb24gPSBOdW1iZXIuTmFOO1xuICAgIHRoaXMuYWN0dWFsU3RhcnRUaW1lID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLnNlbGZCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOO1xuICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IE51bWJlci5OYU47IC8vIEl0J3Mgb2theSB0byByZXBsYWNlIHRoZSBpbml0aWFsIGRvdWJsZXMgd2l0aCBzbWlzIGFmdGVyIGluaXRpYWxpemF0aW9uLlxuICAgIC8vIFRoaXMgd29uJ3QgdHJpZ2dlciB0aGUgcGVyZm9ybWFuY2UgY2xpZmYgbWVudGlvbmVkIGFib3ZlLFxuICAgIC8vIGFuZCBpdCBzaW1wbGlmaWVzIG90aGVyIHByb2ZpbGVyIGNvZGUgKGluY2x1ZGluZyBEZXZUb29scykuXG5cbiAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgIHRoaXMuc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgdGhpcy50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgfVxuXG4gIHtcbiAgICAvLyBUaGlzIGlzbid0IGRpcmVjdGx5IHVzZWQgYnV0IGlzIGhhbmR5IGZvciBkZWJ1Z2dpbmcgaW50ZXJuYWxzOlxuICAgIHRoaXMuX2RlYnVnSUQgPSBkZWJ1Z0NvdW50ZXIrKztcbiAgICB0aGlzLl9kZWJ1Z1NvdXJjZSA9IG51bGw7XG4gICAgdGhpcy5fZGVidWdPd25lciA9IG51bGw7XG4gICAgdGhpcy5fZGVidWdOZWVkc1JlbW91bnQgPSBmYWxzZTtcbiAgICB0aGlzLl9kZWJ1Z0hvb2tUeXBlcyA9IG51bGw7XG5cbiAgICBpZiAoIWhhc0JhZE1hcFBvbHlmaWxsICYmIHR5cGVvZiBPYmplY3QucHJldmVudEV4dGVuc2lvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzKTtcbiAgICB9XG4gIH1cbn0gLy8gVGhpcyBpcyBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLCByYXRoZXIgdGhhbiBhIFBPSk8gY29uc3RydWN0b3IsIHN0aWxsXG4vLyBwbGVhc2UgZW5zdXJlIHdlIGRvIHRoZSBmb2xsb3dpbmc6XG4vLyAxKSBOb2JvZHkgc2hvdWxkIGFkZCBhbnkgaW5zdGFuY2UgbWV0aG9kcyBvbiB0aGlzLiBJbnN0YW5jZSBtZXRob2RzIGNhbiBiZVxuLy8gICAgbW9yZSBkaWZmaWN1bHQgdG8gcHJlZGljdCB3aGVuIHRoZXkgZ2V0IG9wdGltaXplZCBhbmQgdGhleSBhcmUgYWxtb3N0XG4vLyAgICBuZXZlciBpbmxpbmVkIHByb3Blcmx5IGluIHN0YXRpYyBjb21waWxlcnMuXG4vLyAyKSBOb2JvZHkgc2hvdWxkIHJlbHkgb24gYGluc3RhbmNlb2YgRmliZXJgIGZvciB0eXBlIHRlc3RpbmcuIFdlIHNob3VsZFxuLy8gICAgYWx3YXlzIGtub3cgd2hlbiBpdCBpcyBhIGZpYmVyLlxuLy8gMykgV2UgbWlnaHQgd2FudCB0byBleHBlcmltZW50IHdpdGggdXNpbmcgbnVtZXJpYyBrZXlzIHNpbmNlIHRoZXkgYXJlIGVhc2llclxuLy8gICAgdG8gb3B0aW1pemUgaW4gYSBub24tSklUIGVudmlyb25tZW50LlxuLy8gNCkgV2UgY2FuIGVhc2lseSBnbyBmcm9tIGEgY29uc3RydWN0b3IgdG8gYSBjcmVhdGVGaWJlciBvYmplY3QgbGl0ZXJhbCBpZiB0aGF0XG4vLyAgICBpcyBmYXN0ZXIuXG4vLyA1KSBJdCBzaG91bGQgYmUgZWFzeSB0byBwb3J0IHRoaXMgdG8gYSBDIHN0cnVjdCBhbmQga2VlcCBhIEMgaW1wbGVtZW50YXRpb25cbi8vICAgIGNvbXBhdGlibGUuXG5cblxudmFyIGNyZWF0ZUZpYmVyID0gZnVuY3Rpb24gKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgLy8gJEZsb3dGaXhNZTogdGhlIHNoYXBlcyBhcmUgZXhhY3QgaGVyZSBidXQgRmxvdyBkb2Vzbid0IGxpa2UgY29uc3RydWN0b3JzXG4gIHJldHVybiBuZXcgRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xufTtcblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0JDEoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gaXNTaW1wbGVGdW5jdGlvbkNvbXBvbmVudCh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhc2hvdWxkQ29uc3RydWN0JDEodHlwZSkgJiYgdHlwZS5kZWZhdWx0UHJvcHMgPT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHJlc29sdmVMYXp5Q29tcG9uZW50VGFnKENvbXBvbmVudCkge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzaG91bGRDb25zdHJ1Y3QkMShDb21wb25lbnQpID8gQ2xhc3NDb21wb25lbnQgOiBGdW5jdGlvbkNvbXBvbmVudDtcbiAgfSBlbHNlIGlmIChDb21wb25lbnQgIT09IHVuZGVmaW5lZCAmJiBDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBDb21wb25lbnQuJCR0eXBlb2Y7XG5cbiAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHtcbiAgICAgIHJldHVybiBGb3J3YXJkUmVmO1xuICAgIH1cblxuICAgIGlmICgkJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICByZXR1cm4gTWVtb0NvbXBvbmVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDtcbn0gLy8gVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBhbHRlcm5hdGUgZmliZXIgdG8gZG8gd29yayBvbi5cblxuZnVuY3Rpb24gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgcGVuZGluZ1Byb3BzKSB7XG4gIHZhciB3b3JrSW5Qcm9ncmVzcyA9IGN1cnJlbnQuYWx0ZXJuYXRlO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gbnVsbCkge1xuICAgIC8vIFdlIHVzZSBhIGRvdWJsZSBidWZmZXJpbmcgcG9vbGluZyB0ZWNobmlxdWUgYmVjYXVzZSB3ZSBrbm93IHRoYXQgd2UnbGxcbiAgICAvLyBvbmx5IGV2ZXIgbmVlZCBhdCBtb3N0IHR3byB2ZXJzaW9ucyBvZiBhIHRyZWUuIFdlIHBvb2wgdGhlIFwib3RoZXJcIiB1bnVzZWRcbiAgICAvLyBub2RlIHRoYXQgd2UncmUgZnJlZSB0byByZXVzZS4gVGhpcyBpcyBsYXppbHkgY3JlYXRlZCB0byBhdm9pZCBhbGxvY2F0aW5nXG4gICAgLy8gZXh0cmEgb2JqZWN0cyBmb3IgdGhpbmdzIHRoYXQgYXJlIG5ldmVyIHVwZGF0ZWQuIEl0IGFsc28gYWxsb3cgdXMgdG9cbiAgICAvLyByZWNsYWltIHRoZSBleHRyYSBtZW1vcnkgaWYgbmVlZGVkLlxuICAgIHdvcmtJblByb2dyZXNzID0gY3JlYXRlRmliZXIoY3VycmVudC50YWcsIHBlbmRpbmdQcm9wcywgY3VycmVudC5rZXksIGN1cnJlbnQubW9kZSk7XG4gICAgd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPSBjdXJyZW50LmVsZW1lbnRUeXBlO1xuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7XG4gICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudC5zdGF0ZU5vZGU7XG5cbiAgICB7XG4gICAgICAvLyBERVYtb25seSBmaWVsZHNcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0lEID0gY3VycmVudC5fZGVidWdJRDtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z1NvdXJjZSA9IGN1cnJlbnQuX2RlYnVnU291cmNlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnT3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gY3VycmVudC5fZGVidWdIb29rVHlwZXM7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gY3VycmVudDtcbiAgICBjdXJyZW50LmFsdGVybmF0ZSA9IHdvcmtJblByb2dyZXNzO1xuICB9IGVsc2Uge1xuICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wczsgLy8gTmVlZGVkIGJlY2F1c2UgQmxvY2tzIHN0b3JlIGRhdGEgb24gdHlwZS5cblxuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7IC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBhbHRlcm5hdGUuXG4gICAgLy8gUmVzZXQgdGhlIGVmZmVjdCB0YWcuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IE5vRmxhZ3M7IC8vIFRoZSBlZmZlY3QgbGlzdCBpcyBubyBsb25nZXIgdmFsaWQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IHJlc2V0LCByYXRoZXIgdGhhbiBjb3B5LCBhY3R1YWxEdXJhdGlvbiAmIGFjdHVhbFN0YXJ0VGltZS5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGltZSBmcm9tIGVuZGxlc3NseSBhY2N1bXVsYXRpbmcgaW4gbmV3IGNvbW1pdHMuXG4gICAgICAvLyBUaGlzIGhhcyB0aGUgZG93bnNpZGUgb2YgcmVzZXR0aW5nIHZhbHVlcyBmb3IgZGlmZmVyZW50IHByaW9yaXR5IHJlbmRlcnMsXG4gICAgICAvLyBCdXQgd29ya3MgZm9yIHlpZWxkaW5nICh0aGUgY29tbW9uIGNhc2UpIGFuZCBzaG91bGQgc3VwcG9ydCByZXN1bWluZy5cbiAgICAgIHdvcmtJblByb2dyZXNzLmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXM7XG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7IC8vIENsb25lIHRoZSBkZXBlbmRlbmNpZXMgb2JqZWN0LiBUaGlzIGlzIG11dGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UsIHNvXG4gIC8vIGl0IGNhbm5vdCBiZSBzaGFyZWQgd2l0aCB0aGUgY3VycmVudCBmaWJlci5cblxuICB2YXIgY3VycmVudERlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50RGVwZW5kZW5jaWVzID09PSBudWxsID8gbnVsbCA6IHtcbiAgICBsYW5lczogY3VycmVudERlcGVuZGVuY2llcy5sYW5lcyxcbiAgICBmaXJzdENvbnRleHQ6IGN1cnJlbnREZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0XG4gIH07IC8vIFRoZXNlIHdpbGwgYmUgb3ZlcnJpZGRlbiBkdXJpbmcgdGhlIHBhcmVudCdzIHJlY29uY2lsaWF0aW9uXG5cbiAgd29ya0luUHJvZ3Jlc3Muc2libGluZyA9IGN1cnJlbnQuc2libGluZztcbiAgd29ya0luUHJvZ3Jlc3MuaW5kZXggPSBjdXJyZW50LmluZGV4O1xuICB3b3JrSW5Qcm9ncmVzcy5yZWYgPSBjdXJyZW50LnJlZjtcblxuICB7XG4gICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uO1xuICB9XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z05lZWRzUmVtb3VudCA9IGN1cnJlbnQuX2RlYnVnTmVlZHNSZW1vdW50O1xuXG4gICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbn0gLy8gVXNlZCB0byByZXVzZSBhIEZpYmVyIGZvciBhIHNlY29uZCBwYXNzLlxuXG5mdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGlzIHJlc2V0cyB0aGUgRmliZXIgdG8gd2hhdCBjcmVhdGVGaWJlciBvciBjcmVhdGVXb3JrSW5Qcm9ncmVzcyB3b3VsZFxuICAvLyBoYXZlIHNldCB0aGUgdmFsdWVzIHRvIGJlZm9yZSBkdXJpbmcgdGhlIGZpcnN0IHBhc3MuIElkZWFsbHkgdGhpcyB3b3VsZG4ndFxuICAvLyBiZSBuZWNlc3NhcnkgYnV0IHVuZm9ydHVuYXRlbHkgbWFueSBjb2RlIHBhdGhzIHJlYWRzIGZyb20gdGhlIHdvcmtJblByb2dyZXNzXG4gIC8vIHdoZW4gdGhleSBzaG91bGQgYmUgcmVhZGluZyBmcm9tIGN1cnJlbnQgYW5kIHdyaXRpbmcgdG8gd29ya0luUHJvZ3Jlc3MuXG4gIC8vIFdlIGFzc3VtZSBwZW5kaW5nUHJvcHMsIGluZGV4LCBrZXksIHJlZiwgcmV0dXJuIGFyZSBzdGlsbCB1bnRvdWNoZWQgdG9cbiAgLy8gYXZvaWQgZG9pbmcgYW5vdGhlciByZWNvbmNpbGlhdGlvbi5cbiAgLy8gUmVzZXQgdGhlIGVmZmVjdCB0YWcgYnV0IGtlZXAgYW55IFBsYWNlbWVudCB0YWdzLCBzaW5jZSB0aGF0J3Mgc29tZXRoaW5nXG4gIC8vIHRoYXQgY2hpbGQgZmliZXIgaXMgc2V0dGluZywgbm90IHRoZSByZWNvbmNpbGlhdGlvbi5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gUGxhY2VtZW50OyAvLyBUaGUgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gIHdvcmtJblByb2dyZXNzLm5leHRFZmZlY3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIFJlc2V0IHRvIGNyZWF0ZUZpYmVyJ3MgaW5pdGlhbCB2YWx1ZXMuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gbnVsbDtcblxuICAgIHtcbiAgICAgIC8vIE5vdGU6IFdlIGRvbid0IHJlc2V0IHRoZSBhY3R1YWxUaW1lIGNvdW50cy4gSXQncyB1c2VmdWwgdG8gYWNjdW11bGF0ZVxuICAgICAgLy8gYWN0dWFsIHRpbWUgYWNyb3NzIG11bHRpcGxlIHJlbmRlciBwYXNzZXMuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBSZXNldCB0byB0aGUgY2xvbmVkIHZhbHVlcyB0aGF0IGNyZWF0ZVdvcmtJblByb2dyZXNzIHdvdWxkJ3ZlLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBOZWVkZWQgYmVjYXVzZSBCbG9ja3Mgc3RvcmUgZGF0YSBvbiB0eXBlLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTsgLy8gQ2xvbmUgdGhlIGRlcGVuZGVuY2llcyBvYmplY3QuIFRoaXMgaXMgbXV0YXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSwgc29cbiAgICAvLyBpdCBjYW5ub3QgYmUgc2hhcmVkIHdpdGggdGhlIGN1cnJlbnQgZmliZXIuXG5cbiAgICB2YXIgY3VycmVudERlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMgPT09IG51bGwgPyBudWxsIDoge1xuICAgICAgbGFuZXM6IGN1cnJlbnREZXBlbmRlbmNpZXMubGFuZXMsXG4gICAgICBmaXJzdENvbnRleHQ6IGN1cnJlbnREZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0XG4gICAgfTtcblxuICAgIHtcbiAgICAgIC8vIE5vdGU6IFdlIGRvbid0IHJlc2V0IHRoZSBhY3R1YWxUaW1lIGNvdW50cy4gSXQncyB1c2VmdWwgdG8gYWNjdW11bGF0ZVxuICAgICAgLy8gYWN0dWFsIHRpbWUgYWNyb3NzIG11bHRpcGxlIHJlbmRlciBwYXNzZXMuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59XG5mdW5jdGlvbiBjcmVhdGVIb3N0Um9vdEZpYmVyKHRhZykge1xuICB2YXIgbW9kZTtcblxuICBpZiAodGFnID09PSBDb25jdXJyZW50Um9vdCkge1xuICAgIG1vZGUgPSBDb25jdXJyZW50TW9kZSB8IEJsb2NraW5nTW9kZSB8IFN0cmljdE1vZGU7XG4gIH0gZWxzZSBpZiAodGFnID09PSBCbG9ja2luZ1Jvb3QpIHtcbiAgICBtb2RlID0gQmxvY2tpbmdNb2RlIHwgU3RyaWN0TW9kZTtcbiAgfSBlbHNlIHtcbiAgICBtb2RlID0gTm9Nb2RlO1xuICB9XG5cbiAgaWYgKCBpc0RldlRvb2xzUHJlc2VudCkge1xuICAgIC8vIEFsd2F5cyBjb2xsZWN0IHByb2ZpbGUgdGltaW5ncyB3aGVuIERldlRvb2xzIGFyZSBwcmVzZW50LlxuICAgIC8vIFRoaXMgZW5hYmxlcyBEZXZUb29scyB0byBzdGFydCBjYXB0dXJpbmcgdGltaW5nIGF0IGFueSBwb2ludFx1MjAxM1xuICAgIC8vIFdpdGhvdXQgc29tZSBub2RlcyBpbiB0aGUgdHJlZSBoYXZpbmcgZW1wdHkgYmFzZSB0aW1lcy5cbiAgICBtb2RlIHw9IFByb2ZpbGVNb2RlO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUZpYmVyKEhvc3RSb290LCBudWxsLCBudWxsLCBtb2RlKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh0eXBlLCAvLyBSZWFjdCRFbGVtZW50VHlwZVxua2V5LCBwZW5kaW5nUHJvcHMsIG93bmVyLCBtb2RlLCBsYW5lcykge1xuICB2YXIgZmliZXJUYWcgPSBJbmRldGVybWluYXRlQ29tcG9uZW50OyAvLyBUaGUgcmVzb2x2ZWQgdHlwZSBpcyBzZXQgaWYgd2Uga25vdyB3aGF0IHRoZSBmaW5hbCB0eXBlIHdpbGwgYmUuIEkuZS4gaXQncyBub3QgbGF6eS5cblxuICB2YXIgcmVzb2x2ZWRUeXBlID0gdHlwZTtcblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoc2hvdWxkQ29uc3RydWN0JDEodHlwZSkpIHtcbiAgICAgIGZpYmVyVGFnID0gQ2xhc3NDb21wb25lbnQ7XG5cbiAgICAgIHtcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIGZpYmVyVGFnID0gSG9zdENvbXBvbmVudDtcbiAgfSBlbHNlIHtcbiAgICBnZXRUYWc6IHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQocGVuZGluZ1Byb3BzLmNoaWxkcmVuLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRTpcbiAgICAgICAgZmliZXJUYWcgPSBNb2RlO1xuICAgICAgICBtb2RlIHw9IERlYnVnVHJhY2luZ01vZGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgIGZpYmVyVGFnID0gTW9kZTtcbiAgICAgICAgbW9kZSB8PSBTdHJpY3RNb2RlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tUHJvZmlsZXIocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZUxpc3QocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUxlZ2FjeUhpZGRlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NDT1BFX1RZUEU6XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQ29udGV4dFByb3ZpZGVyO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgY29uc3VtZXJcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IENvbnRleHRDb25zdW1lcjtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gRm9yd2FyZFJlZjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gTWVtb0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBMYXp5Q29tcG9uZW50O1xuICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IEJsb2NrO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgXCIgKyAnbmFtZWQgaW1wb3J0cy4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgb3duZXJOYW1lID0gb3duZXIgPyBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgICAgICAgICBpbmZvICs9ICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZDogZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciBidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlIGNvbXBvbmVudHMpIGJ1dCBnb3Q6IFwiICsgKHR5cGUgPT0gbnVsbCA/IHR5cGUgOiB0eXBlb2YgdHlwZSkgKyBcIi5cIiArIGluZm8gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihmaWJlclRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuICBmaWJlci5lbGVtZW50VHlwZSA9IHR5cGU7XG4gIGZpYmVyLnR5cGUgPSByZXNvbHZlZFR5cGU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG5cbiAge1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gb3duZXI7XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBvd25lciA9IG51bGw7XG5cbiAge1xuICAgIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gIH1cblxuICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICB2YXIgcGVuZGluZ1Byb3BzID0gZWxlbWVudC5wcm9wcztcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHR5cGUsIGtleSwgcGVuZGluZ1Byb3BzLCBvd25lciwgbW9kZSwgbGFuZXMpO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgZmliZXIuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnRzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEZyYWdtZW50LCBlbGVtZW50cywga2V5LCBtb2RlKTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Qcm9maWxlcihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgcGVuZGluZ1Byb3BzLmlkICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3IoJ1Byb2ZpbGVyIG11c3Qgc3BlY2lmeSBhbiBcImlkXCIgYXMgYSBwcm9wJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoUHJvZmlsZXIsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlIHwgUHJvZmlsZU1vZGUpOyAvLyBUT0RPOiBUaGUgUHJvZmlsZXIgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuICBmaWJlci50eXBlID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcblxuICB7XG4gICAgZmliZXIuc3RhdGVOb2RlID0ge1xuICAgICAgZWZmZWN0RHVyYXRpb246IDAsXG4gICAgICBwYXNzaXZlRWZmZWN0RHVyYXRpb246IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZpYmVyO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZShwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoU3VzcGVuc2VDb21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTsgLy8gVE9ETzogVGhlIFN1c3BlbnNlQ29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAvLyBpbnN0ZWFkLlxuXG4gIGZpYmVyLnR5cGUgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlTGlzdChwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoU3VzcGVuc2VMaXN0Q29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG5cbiAge1xuICAgIC8vIFRPRE86IFRoZSBTdXNwZW5zZUxpc3RDb21wb25lbnQgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgICAvLyBpbnN0ZWFkLlxuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gIH1cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihPZmZzY3JlZW5Db21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTsgLy8gVE9ETzogVGhlIE9mZnNjcmVlbkNvbXBvbmVudCBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgLy8gaW5zdGVhZC5cblxuICB7XG4gICAgZmliZXIudHlwZSA9IFJFQUNUX09GRlNDUkVFTl9UWVBFO1xuICB9XG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tTGVnYWN5SGlkZGVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihMZWdhY3lIaWRkZW5Db21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTsgLy8gVE9ETzogVGhlIExlZ2FjeUhpZGRlbiBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgLy8gaW5zdGVhZC5cblxuICB7XG4gICAgZmliZXIudHlwZSA9IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRTtcbiAgfVxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UZXh0KGNvbnRlbnQsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RUZXh0LCBjb250ZW50LCBudWxsLCBtb2RlKTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tSG9zdEluc3RhbmNlRm9yRGVsZXRpb24oKSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RDb21wb25lbnQsIG51bGwsIG51bGwsIE5vTW9kZSk7IC8vIFRPRE86IFRoZXNlIHNob3VsZCBub3QgbmVlZCBhIHR5cGUuXG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSAnREVMRVRFRCc7XG4gIGZpYmVyLnR5cGUgPSAnREVMRVRFRCc7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBwZW5kaW5nUHJvcHMgPSBwb3J0YWwuY2hpbGRyZW4gIT09IG51bGwgPyBwb3J0YWwuY2hpbGRyZW4gOiBbXTtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdFBvcnRhbCwgcGVuZGluZ1Byb3BzLCBwb3J0YWwua2V5LCBtb2RlKTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgZmliZXIuc3RhdGVOb2RlID0ge1xuICAgIGNvbnRhaW5lckluZm86IHBvcnRhbC5jb250YWluZXJJbmZvLFxuICAgIHBlbmRpbmdDaGlsZHJlbjogbnVsbCxcbiAgICAvLyBVc2VkIGJ5IHBlcnNpc3RlbnQgdXBkYXRlc1xuICAgIGltcGxlbWVudGF0aW9uOiBwb3J0YWwuaW1wbGVtZW50YXRpb25cbiAgfTtcbiAgcmV0dXJuIGZpYmVyO1xufSAvLyBVc2VkIGZvciBzdGFzaGluZyBXSVAgcHJvcGVydGllcyB0byByZXBsYXkgZmFpbGVkIHdvcmsgaW4gREVWLlxuXG5mdW5jdGlvbiBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVih0YXJnZXQsIHNvdXJjZSkge1xuICBpZiAodGFyZ2V0ID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBGaWJlcidzIGluaXRpYWwgcHJvcGVydGllcyB3aWxsIGFsd2F5cyBiZSBvdmVyd3JpdHRlbi5cbiAgICAvLyBXZSBvbmx5IHVzZSBhIEZpYmVyIHRvIGVuc3VyZSB0aGUgc2FtZSBoaWRkZW4gY2xhc3Mgc28gREVWIGlzbid0IHNsb3cuXG4gICAgdGFyZ2V0ID0gY3JlYXRlRmliZXIoSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCwgbnVsbCwgbnVsbCwgTm9Nb2RlKTtcbiAgfSAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgd3JpdHRlbiBhcyBhIGxpc3Qgb2YgYWxsIHByb3BlcnRpZXMuXG4gIC8vIFdlIHRyaWVkIHRvIHVzZSBPYmplY3QuYXNzaWduKCkgaW5zdGVhZCBidXQgdGhpcyBpcyBjYWxsZWQgaW5cbiAgLy8gdGhlIGhvdHRlc3QgcGF0aCwgYW5kIE9iamVjdC5hc3NpZ24oKSB3YXMgdG9vIHNsb3c6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI1MDJcbiAgLy8gVGhpcyBjb2RlIGlzIERFVi1vbmx5IHNvIHNpemUgaXMgbm90IGEgY29uY2Vybi5cblxuXG4gIHRhcmdldC50YWcgPSBzb3VyY2UudGFnO1xuICB0YXJnZXQua2V5ID0gc291cmNlLmtleTtcbiAgdGFyZ2V0LmVsZW1lbnRUeXBlID0gc291cmNlLmVsZW1lbnRUeXBlO1xuICB0YXJnZXQudHlwZSA9IHNvdXJjZS50eXBlO1xuICB0YXJnZXQuc3RhdGVOb2RlID0gc291cmNlLnN0YXRlTm9kZTtcbiAgdGFyZ2V0LnJldHVybiA9IHNvdXJjZS5yZXR1cm47XG4gIHRhcmdldC5jaGlsZCA9IHNvdXJjZS5jaGlsZDtcbiAgdGFyZ2V0LnNpYmxpbmcgPSBzb3VyY2Uuc2libGluZztcbiAgdGFyZ2V0LmluZGV4ID0gc291cmNlLmluZGV4O1xuICB0YXJnZXQucmVmID0gc291cmNlLnJlZjtcbiAgdGFyZ2V0LnBlbmRpbmdQcm9wcyA9IHNvdXJjZS5wZW5kaW5nUHJvcHM7XG4gIHRhcmdldC5tZW1vaXplZFByb3BzID0gc291cmNlLm1lbW9pemVkUHJvcHM7XG4gIHRhcmdldC51cGRhdGVRdWV1ZSA9IHNvdXJjZS51cGRhdGVRdWV1ZTtcbiAgdGFyZ2V0Lm1lbW9pemVkU3RhdGUgPSBzb3VyY2UubWVtb2l6ZWRTdGF0ZTtcbiAgdGFyZ2V0LmRlcGVuZGVuY2llcyA9IHNvdXJjZS5kZXBlbmRlbmNpZXM7XG4gIHRhcmdldC5tb2RlID0gc291cmNlLm1vZGU7XG4gIHRhcmdldC5mbGFncyA9IHNvdXJjZS5mbGFncztcbiAgdGFyZ2V0Lm5leHRFZmZlY3QgPSBzb3VyY2UubmV4dEVmZmVjdDtcbiAgdGFyZ2V0LmZpcnN0RWZmZWN0ID0gc291cmNlLmZpcnN0RWZmZWN0O1xuICB0YXJnZXQubGFzdEVmZmVjdCA9IHNvdXJjZS5sYXN0RWZmZWN0O1xuICB0YXJnZXQubGFuZXMgPSBzb3VyY2UubGFuZXM7XG4gIHRhcmdldC5jaGlsZExhbmVzID0gc291cmNlLmNoaWxkTGFuZXM7XG4gIHRhcmdldC5hbHRlcm5hdGUgPSBzb3VyY2UuYWx0ZXJuYXRlO1xuXG4gIHtcbiAgICB0YXJnZXQuYWN0dWFsRHVyYXRpb24gPSBzb3VyY2UuYWN0dWFsRHVyYXRpb247XG4gICAgdGFyZ2V0LmFjdHVhbFN0YXJ0VGltZSA9IHNvdXJjZS5hY3R1YWxTdGFydFRpbWU7XG4gICAgdGFyZ2V0LnNlbGZCYXNlRHVyYXRpb24gPSBzb3VyY2Uuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICB0YXJnZXQudHJlZUJhc2VEdXJhdGlvbiA9IHNvdXJjZS50cmVlQmFzZUR1cmF0aW9uO1xuICB9XG5cbiAgdGFyZ2V0Ll9kZWJ1Z0lEID0gc291cmNlLl9kZWJ1Z0lEO1xuICB0YXJnZXQuX2RlYnVnU291cmNlID0gc291cmNlLl9kZWJ1Z1NvdXJjZTtcbiAgdGFyZ2V0Ll9kZWJ1Z093bmVyID0gc291cmNlLl9kZWJ1Z093bmVyO1xuICB0YXJnZXQuX2RlYnVnTmVlZHNSZW1vdW50ID0gc291cmNlLl9kZWJ1Z05lZWRzUmVtb3VudDtcbiAgdGFyZ2V0Ll9kZWJ1Z0hvb2tUeXBlcyA9IHNvdXJjZS5fZGVidWdIb29rVHlwZXM7XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIEZpYmVyUm9vdE5vZGUoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlKSB7XG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmNvbnRhaW5lckluZm8gPSBjb250YWluZXJJbmZvO1xuICB0aGlzLnBlbmRpbmdDaGlsZHJlbiA9IG51bGw7XG4gIHRoaXMuY3VycmVudCA9IG51bGw7XG4gIHRoaXMucGluZ0NhY2hlID0gbnVsbDtcbiAgdGhpcy5maW5pc2hlZFdvcmsgPSBudWxsO1xuICB0aGlzLnRpbWVvdXRIYW5kbGUgPSBub1RpbWVvdXQ7XG4gIHRoaXMuY29udGV4dCA9IG51bGw7XG4gIHRoaXMucGVuZGluZ0NvbnRleHQgPSBudWxsO1xuICB0aGlzLmh5ZHJhdGUgPSBoeWRyYXRlO1xuICB0aGlzLmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gIHRoaXMuY2FsbGJhY2tQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICB0aGlzLmV2ZW50VGltZXMgPSBjcmVhdGVMYW5lTWFwKE5vTGFuZXMpO1xuICB0aGlzLmV4cGlyYXRpb25UaW1lcyA9IGNyZWF0ZUxhbmVNYXAoTm9UaW1lc3RhbXApO1xuICB0aGlzLnBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuc3VzcGVuZGVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLnBpbmdlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5leHBpcmVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLm11dGFibGVSZWFkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmVudGFuZ2xlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5lbnRhbmdsZW1lbnRzID0gY3JlYXRlTGFuZU1hcChOb0xhbmVzKTtcblxuICB7XG4gICAgdGhpcy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICB0aGlzLmludGVyYWN0aW9uVGhyZWFkSUQgPSB0cmFjaW5nLnVuc3RhYmxlX2dldFRocmVhZElEKCk7XG4gICAgdGhpcy5tZW1vaXplZEludGVyYWN0aW9ucyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLnBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIHtcbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBCbG9ja2luZ1Jvb3Q6XG4gICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSAnY3JlYXRlQmxvY2tpbmdSb290KCknO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBDb25jdXJyZW50Um9vdDpcbiAgICAgICAgdGhpcy5fZGVidWdSb290VHlwZSA9ICdjcmVhdGVSb290KCknO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBMZWdhY3lSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gJ2NyZWF0ZUxlZ2FjeVJvb3QoKSc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlclJvb3QoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlLCBoeWRyYXRpb25DYWxsYmFja3MpIHtcbiAgdmFyIHJvb3QgPSBuZXcgRmliZXJSb290Tm9kZShjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUpO1xuICAvLyBzdGF0ZU5vZGUgaXMgYW55LlxuXG5cbiAgdmFyIHVuaW5pdGlhbGl6ZWRGaWJlciA9IGNyZWF0ZUhvc3RSb290RmliZXIodGFnKTtcbiAgcm9vdC5jdXJyZW50ID0gdW5pbml0aWFsaXplZEZpYmVyO1xuICB1bmluaXRpYWxpemVkRmliZXIuc3RhdGVOb2RlID0gcm9vdDtcbiAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHVuaW5pdGlhbGl6ZWRGaWJlcik7XG4gIHJldHVybiByb290O1xufVxuXG4vLyBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgdmVyc2lvbiB1c2VkIGZvciBzZXJ2ZXIgcmVuZGVyaW5nIG1hdGNoZXMgdGhlIG9uZVxuLy8gdGhhdCBpcyBldmVudHVhbGx5IHJlYWQgZHVyaW5nIGh5ZHJhdGlvbi5cbi8vIElmIHRoZXkgZG9uJ3QgbWF0Y2ggdGhlcmUncyBhIHBvdGVudGlhbCB0ZWFyIGFuZCBhIGZ1bGwgZGVvcHQgcmVuZGVyIGlzIHJlcXVpcmVkLlxuXG5mdW5jdGlvbiByZWdpc3Rlck11dGFibGVTb3VyY2VGb3JIeWRyYXRpb24ocm9vdCwgbXV0YWJsZVNvdXJjZSkge1xuICB2YXIgZ2V0VmVyc2lvbiA9IG11dGFibGVTb3VyY2UuX2dldFZlcnNpb247XG4gIHZhciB2ZXJzaW9uID0gZ2V0VmVyc2lvbihtdXRhYmxlU291cmNlLl9zb3VyY2UpOyAvLyBUT0RPIENsZWFyIHRoaXMgZGF0YSBvbmNlIGFsbCBwZW5kaW5nIGh5ZHJhdGlvbiB3b3JrIGlzIGZpbmlzaGVkLlxuICAvLyBSZXRhaW5pbmcgaXQgZm9yZXZlciBtYXkgaW50ZXJmZXJlIHdpdGggR0MuXG5cbiAgaWYgKHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9PSBudWxsKSB7XG4gICAgcm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gW211dGFibGVTb3VyY2UsIHZlcnNpb25dO1xuICB9IGVsc2Uge1xuICAgIHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5wdXNoKG11dGFibGVTb3VyY2UsIHZlcnNpb24pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvcnRhbChjaGlsZHJlbiwgY29udGFpbmVySW5mbywgLy8gVE9ETzogZmlndXJlIG91dCB0aGUgQVBJIGZvciBjcm9zcy1yZW5kZXJlciBpbXBsZW1lbnRhdGlvbi5cbmltcGxlbWVudGF0aW9uKSB7XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IG51bGw7XG4gIHJldHVybiB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3cgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IFBvcnRhbFxuICAgICQkdHlwZW9mOiBSRUFDVF9QT1JUQUxfVFlQRSxcbiAgICBrZXk6IGtleSA9PSBudWxsID8gbnVsbCA6ICcnICsga2V5LFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBjb250YWluZXJJbmZvOiBjb250YWluZXJJbmZvLFxuICAgIGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvblxuICB9O1xufVxuXG52YXIgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcztcbnZhciBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZTtcblxue1xuICBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlID0ge307XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCkge1xuICBpZiAoIXBhcmVudENvbXBvbmVudCkge1xuICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIH1cblxuICB2YXIgZmliZXIgPSBnZXQocGFyZW50Q29tcG9uZW50KTtcbiAgdmFyIHBhcmVudENvbnRleHQgPSBmaW5kQ3VycmVudFVubWFza2VkQ29udGV4dChmaWJlcik7XG5cbiAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICB2YXIgQ29tcG9uZW50ID0gZmliZXIudHlwZTtcblxuICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0NoaWxkQ29udGV4dChmaWJlciwgQ29tcG9uZW50LCBwYXJlbnRDb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyZW50Q29udGV4dDtcbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZVdpdGhXYXJuaW5nKGNvbXBvbmVudCwgbWV0aG9kTmFtZSkge1xuICB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGNvbXBvbmVudCk7XG5cbiAgICBpZiAoZmliZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJBcmd1bWVudCBhcHBlYXJzIHRvIG5vdCBiZSBhIFJlYWN0Q29tcG9uZW50LiBLZXlzOiBcIiArIE9iamVjdC5rZXlzKGNvbXBvbmVudCkgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuXG4gICAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGhvc3RGaWJlci5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGhvc3RGaWJlcik7XG5cbiAgICAgICAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgIGVycm9yKCclcyBpcyBkZXByZWNhdGVkIGluIFN0cmljdE1vZGUuICcgKyAnJXMgd2FzIHBhc3NlZCBhbiBpbnN0YW5jZSBvZiAlcyB3aGljaCBpcyBpbnNpZGUgU3RyaWN0TW9kZS4gJyArICdJbnN0ZWFkLCBhZGQgYSByZWYgZGlyZWN0bHkgdG8gdGhlIGVsZW1lbnQgeW91IHdhbnQgdG8gcmVmZXJlbmNlLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtZmluZC1ub2RlJywgbWV0aG9kTmFtZSwgbWV0aG9kTmFtZSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yKCclcyBpcyBkZXByZWNhdGVkIGluIFN0cmljdE1vZGUuICcgKyAnJXMgd2FzIHBhc3NlZCBhbiBpbnN0YW5jZSBvZiAlcyB3aGljaCByZW5kZXJzIFN0cmljdE1vZGUgY2hpbGRyZW4uICcgKyAnSW5zdGVhZCwgYWRkIGEgcmVmIGRpcmVjdGx5IHRvIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvIHJlZmVyZW5jZS4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLWZpbmQtbm9kZScsIG1ldGhvZE5hbWUsIG1ldGhvZE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAvLyBJZGVhbGx5IHRoaXMgc2hvdWxkIHJlc2V0IHRvIHByZXZpb3VzIGJ1dCB0aGlzIHNob3VsZG4ndCBiZSBjYWxsZWQgaW5cbiAgICAgICAgICAvLyByZW5kZXIgYW5kIHRoZXJlJ3MgYW5vdGhlciB3YXJuaW5nIGZvciB0aGF0IGFueXdheS5cbiAgICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgICAgc2V0Q3VycmVudEZpYmVyKHByZXZpb3VzRmliZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUsIGh5ZHJhdGlvbkNhbGxiYWNrcykge1xuICByZXR1cm4gY3JlYXRlRmliZXJSb290KGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSk7XG59XG5mdW5jdGlvbiB1cGRhdGVDb250YWluZXIoZWxlbWVudCwgY29udGFpbmVyLCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKSB7XG4gIHtcbiAgICBvblNjaGVkdWxlUm9vdChjb250YWluZXIsIGVsZW1lbnQpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnQkMSA9IGNvbnRhaW5lci5jdXJyZW50O1xuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuXG4gIHtcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgd2FybklmVW5tb2NrZWRTY2hlZHVsZXIoY3VycmVudCQxKTtcbiAgICAgIHdhcm5JZk5vdFNjb3BlZFdpdGhNYXRjaGluZ0FjdChjdXJyZW50JDEpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoY3VycmVudCQxKTtcblxuICB2YXIgY29udGV4dCA9IGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCk7XG5cbiAgaWYgKGNvbnRhaW5lci5jb250ZXh0ID09PSBudWxsKSB7XG4gICAgY29udGFpbmVyLmNvbnRleHQgPSBjb250ZXh0O1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5wZW5kaW5nQ29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICB7XG4gICAgaWYgKGlzUmVuZGVyaW5nICYmIGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMpIHtcbiAgICAgIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgPSB0cnVlO1xuXG4gICAgICBlcnJvcignUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGU7ICcgKyAndHJpZ2dlcmluZyBuZXN0ZWQgY29tcG9uZW50IHVwZGF0ZXMgZnJvbSByZW5kZXIgaXMgbm90IGFsbG93ZWQuICcgKyAnSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluIGNvbXBvbmVudERpZFVwZGF0ZS5cXG5cXG4nICsgJ0NoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mICVzLicsIGdldENvbXBvbmVudE5hbWUoY3VycmVudC50eXBlKSB8fCAnVW5rbm93bicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgdXBkYXRlLnBheWxvYWQgPSB7XG4gICAgZWxlbWVudDogZWxlbWVudFxuICB9O1xuICBjYWxsYmFjayA9IGNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogY2FsbGJhY2s7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcigncmVuZGVyKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH1cblxuICBlbnF1ZXVlVXBkYXRlKGN1cnJlbnQkMSwgdXBkYXRlKTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGN1cnJlbnQkMSwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBnZXRQdWJsaWNSb290SW5zdGFuY2UoY29udGFpbmVyKSB7XG4gIHZhciBjb250YWluZXJGaWJlciA9IGNvbnRhaW5lci5jdXJyZW50O1xuXG4gIGlmICghY29udGFpbmVyRmliZXIuY2hpbGQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoY29udGFpbmVyRmliZXIuY2hpbGQudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGdldFB1YmxpY0luc3RhbmNlKGNvbnRhaW5lckZpYmVyLmNoaWxkLnN0YXRlTm9kZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvbnRhaW5lckZpYmVyLmNoaWxkLnN0YXRlTm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrUmV0cnlMYW5lSW1wbChmaWJlciwgcmV0cnlMYW5lKSB7XG4gIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCAmJiBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSA9IGhpZ2hlclByaW9yaXR5TGFuZShzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSwgcmV0cnlMYW5lKTtcbiAgfVxufSAvLyBJbmNyZWFzZXMgdGhlIHByaW9yaXR5IG9mIHRoZW5uYWJsZXMgd2hlbiB0aGV5IHJlc29sdmUgd2l0aGluIHRoaXMgYm91bmRhcnkuXG5cblxuZnVuY3Rpb24gbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIHJldHJ5TGFuZSkge1xuICBtYXJrUmV0cnlMYW5lSW1wbChmaWJlciwgcmV0cnlMYW5lKTtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoYWx0ZXJuYXRlKSB7XG4gICAgbWFya1JldHJ5TGFuZUltcGwoYWx0ZXJuYXRlLCByZXRyeUxhbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24kMShmaWJlcikge1xuICBpZiAoZmliZXIudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIC8vIFdlIGlnbm9yZSBIb3N0Um9vdHMgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGluY3JlYXNlXG4gICAgLy8gdGhlaXIgcHJpb3JpdHkgYW5kIHRoZXkgc2hvdWxkIG5vdCBzdXNwZW5kIG9uIEkvTyxcbiAgICAvLyBzaW5jZSB5b3UgaGF2ZSB0byB3cmFwIGFueXRoaW5nIHRoYXQgbWlnaHQgc3VzcGVuZCBpblxuICAgIC8vIFN1c3BlbnNlLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmU7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIGxhbmUpO1xufVxuZnVuY3Rpb24gYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24kMShmaWJlcikge1xuICBpZiAoZmliZXIudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIC8vIFdlIGlnbm9yZSBIb3N0Um9vdHMgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGluY3JlYXNlXG4gICAgLy8gdGhlaXIgcHJpb3JpdHkgYW5kIHRoZXkgc2hvdWxkIG5vdCBzdXNwZW5kIG9uIEkvTyxcbiAgICAvLyBzaW5jZSB5b3UgaGF2ZSB0byB3cmFwIGFueXRoaW5nIHRoYXQgbWlnaHQgc3VzcGVuZCBpblxuICAgIC8vIFN1c3BlbnNlLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gU2VsZWN0aXZlSHlkcmF0aW9uTGFuZTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkkMShmaWJlcikge1xuICBpZiAoZmliZXIudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIC8vIFdlIGlnbm9yZSBIb3N0Um9vdHMgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGluY3JlYXNlXG4gICAgLy8gdGhlaXIgcHJpb3JpdHkgb3RoZXIgdGhhbiBzeW5jaHJvbm91c2x5IGZsdXNoIGl0LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIHJ1bldpdGhQcmlvcml0eSQyKHByaW9yaXR5LCBmbikge1xuXG4gIHRyeSB7XG4gICAgc2V0Q3VycmVudFVwZGF0ZUxhbmVQcmlvcml0eShwcmlvcml0eSk7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH0gZmluYWxseSB7XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKGZpYmVyKSB7XG4gIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcldpdGhOb1BvcnRhbHMoZmliZXIpO1xuXG4gIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChob3N0RmliZXIudGFnID09PSBGdW5kYW1lbnRhbENvbXBvbmVudCkge1xuICAgIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlLmluc3RhbmNlO1xuICB9XG5cbiAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG59XG5cbnZhciBzaG91bGRTdXNwZW5kSW1wbCA9IGZ1bmN0aW9uIChmaWJlcikge1xuICByZXR1cm4gZmFsc2U7XG59O1xuXG5mdW5jdGlvbiBzaG91bGRTdXNwZW5kKGZpYmVyKSB7XG4gIHJldHVybiBzaG91bGRTdXNwZW5kSW1wbChmaWJlcik7XG59XG52YXIgb3ZlcnJpZGVIb29rU3RhdGUgPSBudWxsO1xudmFyIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCA9IG51bGw7XG52YXIgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gbnVsbDtcbnZhciBvdmVycmlkZVByb3BzID0gbnVsbDtcbnZhciBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBudWxsO1xudmFyIHNjaGVkdWxlVXBkYXRlID0gbnVsbDtcbnZhciBzZXRTdXNwZW5zZUhhbmRsZXIgPSBudWxsO1xuXG57XG4gIHZhciBjb3B5V2l0aERlbGV0ZUltcGwgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCBpbmRleCkge1xuICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogX2Fzc2lnbih7fSwgb2JqKTtcblxuICAgIGlmIChpbmRleCArIDEgPT09IHBhdGgubGVuZ3RoKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh1cGRhdGVkKSkge1xuICAgICAgICB1cGRhdGVkLnNwbGljZShrZXksIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHVwZGF0ZWRba2V5XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfSAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cblxuICAgIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoRGVsZXRlSW1wbChvYmpba2V5XSwgcGF0aCwgaW5kZXggKyAxKTtcbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhEZWxldGUgPSBmdW5jdGlvbiAob2JqLCBwYXRoKSB7XG4gICAgcmV0dXJuIGNvcHlXaXRoRGVsZXRlSW1wbChvYmosIHBhdGgsIDApO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFJlbmFtZUltcGwgPSBmdW5jdGlvbiAob2JqLCBvbGRQYXRoLCBuZXdQYXRoLCBpbmRleCkge1xuICAgIHZhciBvbGRLZXkgPSBvbGRQYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogX2Fzc2lnbih7fSwgb2JqKTtcblxuICAgIGlmIChpbmRleCArIDEgPT09IG9sZFBhdGgubGVuZ3RoKSB7XG4gICAgICB2YXIgbmV3S2V5ID0gbmV3UGF0aFtpbmRleF07IC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuICAgICAgdXBkYXRlZFtuZXdLZXldID0gdXBkYXRlZFtvbGRLZXldO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh1cGRhdGVkKSkge1xuICAgICAgICB1cGRhdGVkLnNwbGljZShvbGRLZXksIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHVwZGF0ZWRbb2xkS2V5XTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuICAgICAgdXBkYXRlZFtvbGRLZXldID0gY29weVdpdGhSZW5hbWVJbXBsKCAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG4gICAgICBvYmpbb2xkS2V5XSwgb2xkUGF0aCwgbmV3UGF0aCwgaW5kZXggKyAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhSZW5hbWUgPSBmdW5jdGlvbiAob2JqLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgaWYgKG9sZFBhdGgubGVuZ3RoICE9PSBuZXdQYXRoLmxlbmd0aCkge1xuICAgICAgd2FybignY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIG9mIHRoZSBzYW1lIGxlbmd0aCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3UGF0aC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgaWYgKG9sZFBhdGhbaV0gIT09IG5ld1BhdGhbaV0pIHtcbiAgICAgICAgICB3YXJuKCdjb3B5V2l0aFJlbmFtZSgpIGV4cGVjdHMgcGF0aHMgdG8gYmUgdGhlIHNhbWUgZXhjZXB0IGZvciB0aGUgZGVlcGVzdCBrZXknKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb3B5V2l0aFJlbmFtZUltcGwob2JqLCBvbGRQYXRoLCBuZXdQYXRoLCAwKTtcbiAgfTtcblxuICB2YXIgY29weVdpdGhTZXRJbXBsID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgaWYgKGluZGV4ID49IHBhdGgubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIGtleSA9IHBhdGhbaW5kZXhdO1xuICAgIHZhciB1cGRhdGVkID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfYXNzaWduKHt9LCBvYmopOyAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cbiAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aFNldEltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSwgdmFsdWUpO1xuICAgIHJldHVybiB1cGRhdGVkO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFNldCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGNvcHlXaXRoU2V0SW1wbChvYmosIHBhdGgsIDAsIHZhbHVlKTtcbiAgfTtcblxuICB2YXIgZmluZEhvb2sgPSBmdW5jdGlvbiAoZmliZXIsIGlkKSB7XG4gICAgLy8gRm9yIG5vdywgdGhlIFwiaWRcIiBvZiBzdGF0ZWZ1bCBob29rcyBpcyBqdXN0IHRoZSBzdGF0ZWZ1bCBob29rIGluZGV4LlxuICAgIC8vIFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlIHdpdGggZS5nLiBuZXN0ZWQgaG9va3MuXG4gICAgdmFyIGN1cnJlbnRIb29rID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICAgIHdoaWxlIChjdXJyZW50SG9vayAhPT0gbnVsbCAmJiBpZCA+IDApIHtcbiAgICAgIGN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgICAgIGlkLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRIb29rO1xuICB9OyAvLyBTdXBwb3J0IERldlRvb2xzIGVkaXRhYmxlIHZhbHVlcyBmb3IgdXNlU3RhdGUgYW5kIHVzZVJlZHVjZXIuXG5cblxuICBvdmVycmlkZUhvb2tTdGF0ZSA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIHBhdGgsIHZhbHVlKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoU2V0KGhvb2subWVtb2l6ZWRTdGF0ZSwgcGF0aCwgdmFsdWUpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gX2Fzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuICB9O1xuXG4gIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIHBhdGgpIHtcbiAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhEZWxldGUoaG9vay5tZW1vaXplZFN0YXRlLCBwYXRoKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IF9hc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoUmVuYW1lKGhvb2subWVtb2l6ZWRTdGF0ZSwgb2xkUGF0aCwgbmV3UGF0aCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBfYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG4gIH07IC8vIFN1cHBvcnQgRGV2VG9vbHMgcHJvcHMgZm9yIGZ1bmN0aW9uIGNvbXBvbmVudHMsIGZvcndhcmRSZWYsIG1lbW8sIGhvc3QgY29tcG9uZW50cywgZXRjLlxuXG5cbiAgb3ZlcnJpZGVQcm9wcyA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCwgdmFsdWUpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFNldChmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoLCB2YWx1ZSk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCkge1xuICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoRGVsZXRlKGZpYmVyLm1lbW9pemVkUHJvcHMsIHBhdGgpO1xuXG4gICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFJlbmFtZShmaWJlci5tZW1vaXplZFByb3BzLCBvbGRQYXRoLCBuZXdQYXRoKTtcblxuICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIHNjaGVkdWxlVXBkYXRlID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIHNldFN1c3BlbnNlSGFuZGxlciA9IGZ1bmN0aW9uIChuZXdTaG91bGRTdXNwZW5kSW1wbCkge1xuICAgIHNob3VsZFN1c3BlbmRJbXBsID0gbmV3U2hvdWxkU3VzcGVuZEltcGw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyKGZpYmVyKSB7XG4gIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG5cbiAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG59XG5cbmZ1bmN0aW9uIGVtcHR5RmluZEZpYmVyQnlIb3N0SW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlckZvckRldlRvb2xzKCkge1xuICByZXR1cm4gY3VycmVudDtcbn1cblxuZnVuY3Rpb24gaW5qZWN0SW50b0RldlRvb2xzKGRldlRvb2xzQ29uZmlnKSB7XG4gIHZhciBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSA9IGRldlRvb2xzQ29uZmlnLmZpbmRGaWJlckJ5SG9zdEluc3RhbmNlO1xuICB2YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG4gIHJldHVybiBpbmplY3RJbnRlcm5hbHMoe1xuICAgIGJ1bmRsZVR5cGU6IGRldlRvb2xzQ29uZmlnLmJ1bmRsZVR5cGUsXG4gICAgdmVyc2lvbjogZGV2VG9vbHNDb25maWcudmVyc2lvbixcbiAgICByZW5kZXJlclBhY2thZ2VOYW1lOiBkZXZUb29sc0NvbmZpZy5yZW5kZXJlclBhY2thZ2VOYW1lLFxuICAgIHJlbmRlcmVyQ29uZmlnOiBkZXZUb29sc0NvbmZpZy5yZW5kZXJlckNvbmZpZyxcbiAgICBvdmVycmlkZUhvb2tTdGF0ZTogb3ZlcnJpZGVIb29rU3RhdGUsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOiBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGgsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOiBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGgsXG4gICAgb3ZlcnJpZGVQcm9wczogb3ZlcnJpZGVQcm9wcyxcbiAgICBvdmVycmlkZVByb3BzRGVsZXRlUGF0aDogb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGgsXG4gICAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6IG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoLFxuICAgIHNldFN1c3BlbnNlSGFuZGxlcjogc2V0U3VzcGVuc2VIYW5kbGVyLFxuICAgIHNjaGVkdWxlVXBkYXRlOiBzY2hlZHVsZVVwZGF0ZSxcbiAgICBjdXJyZW50RGlzcGF0Y2hlclJlZjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcjogZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIsXG4gICAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6IGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlIHx8IGVtcHR5RmluZEZpYmVyQnlIb3N0SW5zdGFuY2UsXG4gICAgLy8gUmVhY3QgUmVmcmVzaFxuICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaDogIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaCAsXG4gICAgc2NoZWR1bGVSZWZyZXNoOiAgc2NoZWR1bGVSZWZyZXNoICxcbiAgICBzY2hlZHVsZVJvb3Q6ICBzY2hlZHVsZVJvb3QgLFxuICAgIHNldFJlZnJlc2hIYW5kbGVyOiAgc2V0UmVmcmVzaEhhbmRsZXIgLFxuICAgIC8vIEVuYWJsZXMgRGV2VG9vbHMgdG8gYXBwZW5kIG93bmVyIHN0YWNrcyB0byBlcnJvciBtZXNzYWdlcyBpbiBERVYgbW9kZS5cbiAgICBnZXRDdXJyZW50RmliZXI6ICBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scyBcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFJlYWN0RE9NUm9vdChjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgdGhpcy5faW50ZXJuYWxSb290ID0gY3JlYXRlUm9vdEltcGwoY29udGFpbmVyLCBDb25jdXJyZW50Um9vdCwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIFJlYWN0RE9NQmxvY2tpbmdSb290KGNvbnRhaW5lciwgdGFnLCBvcHRpb25zKSB7XG4gIHRoaXMuX2ludGVybmFsUm9vdCA9IGNyZWF0ZVJvb3RJbXBsKGNvbnRhaW5lciwgdGFnLCBvcHRpb25zKTtcbn1cblxuUmVhY3RET01Sb290LnByb3RvdHlwZS5yZW5kZXIgPSBSZWFjdERPTUJsb2NraW5nUm9vdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gIHZhciByb290ID0gdGhpcy5faW50ZXJuYWxSb290O1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuICcgKyAnVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiBhIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRhaW5lciA9IHJvb3QuY29udGFpbmVySW5mbztcblxuICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgIT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGhvc3RJbnN0YW5jZSA9IGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKHJvb3QuY3VycmVudCk7XG5cbiAgICAgIGlmIChob3N0SW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKGhvc3RJbnN0YW5jZS5wYXJlbnROb2RlICE9PSBjb250YWluZXIpIHtcbiAgICAgICAgICBlcnJvcigncmVuZGVyKC4uLik6IEl0IGxvb2tzIGxpa2UgdGhlIFJlYWN0LXJlbmRlcmVkIGNvbnRlbnQgb2YgdGhlICcgKyAncm9vdCBjb250YWluZXIgd2FzIHJlbW92ZWQgd2l0aG91dCB1c2luZyBSZWFjdC4gVGhpcyBpcyBub3QgJyArICdzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgZXJyb3JzLiBJbnN0ZWFkLCBjYWxsICcgKyBcInJvb3QudW5tb3VudCgpIHRvIGVtcHR5IGEgcm9vdCdzIGNvbnRhaW5lci5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIHJvb3QsIG51bGwsIG51bGwpO1xufTtcblxuUmVhY3RET01Sb290LnByb3RvdHlwZS51bm1vdW50ID0gUmVhY3RET01CbG9ja2luZ1Jvb3QucHJvdG90eXBlLnVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ3VubW91bnQoLi4uKTogZG9lcyBub3Qgc3VwcG9ydCBhIGNhbGxiYWNrIGFyZ3VtZW50LiAnICsgJ1RvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciByb290ID0gdGhpcy5faW50ZXJuYWxSb290O1xuICB2YXIgY29udGFpbmVyID0gcm9vdC5jb250YWluZXJJbmZvO1xuICB1cGRhdGVDb250YWluZXIobnVsbCwgcm9vdCwgbnVsbCwgZnVuY3Rpb24gKCkge1xuICAgIHVubWFya0NvbnRhaW5lckFzUm9vdChjb250YWluZXIpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3RJbXBsKGNvbnRhaW5lciwgdGFnLCBvcHRpb25zKSB7XG4gIC8vIFRhZyBpcyBlaXRoZXIgTGVnYWN5Um9vdCBvciBDb25jdXJyZW50IFJvb3RcbiAgdmFyIGh5ZHJhdGUgPSBvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRlID09PSB0cnVlO1xuICB2YXIgaHlkcmF0aW9uQ2FsbGJhY2tzID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucyB8fCBudWxsO1xuICB2YXIgbXV0YWJsZVNvdXJjZXMgPSBvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRpb25PcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRpb25PcHRpb25zLm11dGFibGVTb3VyY2VzIHx8IG51bGw7XG4gIHZhciByb290ID0gY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lciwgdGFnLCBoeWRyYXRlKTtcbiAgbWFya0NvbnRhaW5lckFzUm9vdChyb290LmN1cnJlbnQsIGNvbnRhaW5lcik7XG4gIHZhciBjb250YWluZXJOb2RlVHlwZSA9IGNvbnRhaW5lci5ub2RlVHlwZTtcblxuICB7XG4gICAgdmFyIHJvb3RDb250YWluZXJFbGVtZW50ID0gY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUgPyBjb250YWluZXIucGFyZW50Tm9kZSA6IGNvbnRhaW5lcjtcbiAgICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhyb290Q29udGFpbmVyRWxlbWVudCk7XG4gIH1cblxuICBpZiAobXV0YWJsZVNvdXJjZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG11dGFibGVTb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbXV0YWJsZVNvdXJjZSA9IG11dGFibGVTb3VyY2VzW2ldO1xuICAgICAgcmVnaXN0ZXJNdXRhYmxlU291cmNlRm9ySHlkcmF0aW9uKHJvb3QsIG11dGFibGVTb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByb290O1xufVxuZnVuY3Rpb24gY3JlYXRlTGVnYWN5Um9vdChjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBSZWFjdERPTUJsb2NraW5nUm9vdChjb250YWluZXIsIExlZ2FjeVJvb3QsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gaXNWYWxpZENvbnRhaW5lcihub2RlKSB7XG4gIHJldHVybiAhIShub2RlICYmIChub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBub2RlLm5vZGVWYWx1ZSA9PT0gJyByZWFjdC1tb3VudC1wb2ludC11bnN0YWJsZSAnKSk7XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQzID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncztcbnZhciB3YXJuZWRBYm91dEh5ZHJhdGVBUEkgPSBmYWxzZTtcblxue1xuICB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgIGlmIChjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciAmJiBjb250YWluZXIubm9kZVR5cGUgIT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGhvc3RJbnN0YW5jZSA9IGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyLl9pbnRlcm5hbFJvb3QuY3VycmVudCk7XG5cbiAgICAgIGlmIChob3N0SW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKGhvc3RJbnN0YW5jZS5wYXJlbnROb2RlICE9PSBjb250YWluZXIpIHtcbiAgICAgICAgICBlcnJvcigncmVuZGVyKC4uLik6IEl0IGxvb2tzIGxpa2UgdGhlIFJlYWN0LXJlbmRlcmVkIGNvbnRlbnQgb2YgdGhpcyAnICsgJ2NvbnRhaW5lciB3YXMgcmVtb3ZlZCB3aXRob3V0IHVzaW5nIFJlYWN0LiBUaGlzIGlzIG5vdCAnICsgJ3N1cHBvcnRlZCBhbmQgd2lsbCBjYXVzZSBlcnJvcnMuIEluc3RlYWQsIGNhbGwgJyArICdSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlIHRvIGVtcHR5IGEgY29udGFpbmVyLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzUm9vdFJlbmRlcmVkQnlTb21lUmVhY3QgPSAhIWNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuICAgIHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICB2YXIgaGFzTm9uUm9vdFJlYWN0Q2hpbGQgPSAhIShyb290RWwgJiYgZ2V0SW5zdGFuY2VGcm9tTm9kZShyb290RWwpKTtcblxuICAgIGlmIChoYXNOb25Sb290UmVhY3RDaGlsZCAmJiAhaXNSb290UmVuZGVyZWRCeVNvbWVSZWFjdCkge1xuICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBSZXBsYWNpbmcgUmVhY3QtcmVuZGVyZWQgY2hpbGRyZW4gd2l0aCBhIG5ldyByb290ICcgKyAnY29tcG9uZW50LiBJZiB5b3UgaW50ZW5kZWQgdG8gdXBkYXRlIHRoZSBjaGlsZHJlbiBvZiB0aGlzIG5vZGUsICcgKyAneW91IHNob3VsZCBpbnN0ZWFkIGhhdmUgdGhlIGV4aXN0aW5nIGNoaWxkcmVuIHVwZGF0ZSB0aGVpciBzdGF0ZSAnICsgJ2FuZCByZW5kZXIgdGhlIG5ldyBjb21wb25lbnRzIGluc3RlYWQgb2YgY2FsbGluZyBSZWFjdERPTS5yZW5kZXIuJyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIGNvbnRhaW5lci50YWdOYW1lICYmIGNvbnRhaW5lci50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdCT0RZJykge1xuICAgICAgZXJyb3IoJ3JlbmRlcigpOiBSZW5kZXJpbmcgY29tcG9uZW50cyBkaXJlY3RseSBpbnRvIGRvY3VtZW50LmJvZHkgaXMgJyArICdkaXNjb3VyYWdlZCwgc2luY2UgaXRzIGNoaWxkcmVuIGFyZSBvZnRlbiBtYW5pcHVsYXRlZCBieSB0aGlyZC1wYXJ0eSAnICsgJ3NjcmlwdHMgYW5kIGJyb3dzZXIgZXh0ZW5zaW9ucy4gVGhpcyBtYXkgbGVhZCB0byBzdWJ0bGUgJyArICdyZWNvbmNpbGlhdGlvbiBpc3N1ZXMuIFRyeSByZW5kZXJpbmcgaW50byBhIGNvbnRhaW5lciBlbGVtZW50IGNyZWF0ZWQgJyArICdmb3IgeW91ciBhcHAuJyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKSB7XG4gIGlmICghY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5kb2N1bWVudEVsZW1lbnQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5maXJzdENoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZEh5ZHJhdGVEdWVUb0xlZ2FjeUhldXJpc3RpYyhjb250YWluZXIpIHtcbiAgdmFyIHJvb3RFbGVtZW50ID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gIHJldHVybiAhIShyb290RWxlbWVudCAmJiByb290RWxlbWVudC5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIHJvb3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShST09UX0FUVFJJQlVURV9OQU1FKSk7XG59XG5cbmZ1bmN0aW9uIGxlZ2FjeUNyZWF0ZVJvb3RGcm9tRE9NQ29udGFpbmVyKGNvbnRhaW5lciwgZm9yY2VIeWRyYXRlKSB7XG4gIHZhciBzaG91bGRIeWRyYXRlID0gZm9yY2VIeWRyYXRlIHx8IHNob3VsZEh5ZHJhdGVEdWVUb0xlZ2FjeUhldXJpc3RpYyhjb250YWluZXIpOyAvLyBGaXJzdCBjbGVhciBhbnkgZXhpc3RpbmcgY29udGVudC5cblxuICBpZiAoIXNob3VsZEh5ZHJhdGUpIHtcbiAgICB2YXIgd2FybmVkID0gZmFsc2U7XG4gICAgdmFyIHJvb3RTaWJsaW5nO1xuXG4gICAgd2hpbGUgKHJvb3RTaWJsaW5nID0gY29udGFpbmVyLmxhc3RDaGlsZCkge1xuICAgICAge1xuICAgICAgICBpZiAoIXdhcm5lZCAmJiByb290U2libGluZy5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIHJvb3RTaWJsaW5nLmhhc0F0dHJpYnV0ZShST09UX0FUVFJJQlVURV9OQU1FKSkge1xuICAgICAgICAgIHdhcm5lZCA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcigncmVuZGVyKCk6IFRhcmdldCBub2RlIGhhcyBtYXJrdXAgcmVuZGVyZWQgYnkgUmVhY3QsIGJ1dCB0aGVyZSAnICsgJ2FyZSB1bnJlbGF0ZWQgbm9kZXMgYXMgd2VsbC4gVGhpcyBpcyBtb3N0IGNvbW1vbmx5IGNhdXNlZCBieSAnICsgJ3doaXRlLXNwYWNlIGluc2VydGVkIGFyb3VuZCBzZXJ2ZXItcmVuZGVyZWQgbWFya3VwLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChyb290U2libGluZyk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChzaG91bGRIeWRyYXRlICYmICFmb3JjZUh5ZHJhdGUgJiYgIXdhcm5lZEFib3V0SHlkcmF0ZUFQSSkge1xuICAgICAgd2FybmVkQWJvdXRIeWRyYXRlQVBJID0gdHJ1ZTtcblxuICAgICAgd2FybigncmVuZGVyKCk6IENhbGxpbmcgUmVhY3RET00ucmVuZGVyKCkgdG8gaHlkcmF0ZSBzZXJ2ZXItcmVuZGVyZWQgbWFya3VwICcgKyAnd2lsbCBzdG9wIHdvcmtpbmcgaW4gUmVhY3QgdjE4LiBSZXBsYWNlIHRoZSBSZWFjdERPTS5yZW5kZXIoKSBjYWxsICcgKyAnd2l0aCBSZWFjdERPTS5oeWRyYXRlKCkgaWYgeW91IHdhbnQgUmVhY3QgdG8gYXR0YWNoIHRvIHRoZSBzZXJ2ZXIgSFRNTC4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlTGVnYWN5Um9vdChjb250YWluZXIsIHNob3VsZEh5ZHJhdGUgPyB7XG4gICAgaHlkcmF0ZTogdHJ1ZVxuICB9IDogdW5kZWZpbmVkKTtcbn1cblxuZnVuY3Rpb24gd2Fybk9uSW52YWxpZENhbGxiYWNrJDEoY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAge1xuICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGVyTmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGNoaWxkcmVuLCBjb250YWluZXIsIGZvcmNlSHlkcmF0ZSwgY2FsbGJhY2spIHtcbiAge1xuICAgIHRvcExldmVsVXBkYXRlV2FybmluZ3MoY29udGFpbmVyKTtcbiAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2skMShjYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNhbGxiYWNrLCAncmVuZGVyJyk7XG4gIH0gLy8gVE9ETzogV2l0aG91dCBgYW55YCB0eXBlLCBGbG93IHNheXMgXCJQcm9wZXJ0eSBjYW5ub3QgYmUgYWNjZXNzZWQgb24gYW55XG4gIC8vIG1lbWJlciBvZiBpbnRlcnNlY3Rpb24gdHlwZS5cIiBXaHl5eXl5eS5cblxuXG4gIHZhciByb290ID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXI7XG4gIHZhciBmaWJlclJvb3Q7XG5cbiAgaWYgKCFyb290KSB7XG4gICAgLy8gSW5pdGlhbCBtb3VudFxuICAgIHJvb3QgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9IGxlZ2FjeUNyZWF0ZVJvb3RGcm9tRE9NQ29udGFpbmVyKGNvbnRhaW5lciwgZm9yY2VIeWRyYXRlKTtcbiAgICBmaWJlclJvb3QgPSByb290Ll9pbnRlcm5hbFJvb3Q7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgb3JpZ2luYWxDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0UHVibGljUm9vdEluc3RhbmNlKGZpYmVyUm9vdCk7XG4gICAgICAgIG9yaWdpbmFsQ2FsbGJhY2suY2FsbChpbnN0YW5jZSk7XG4gICAgICB9O1xuICAgIH0gLy8gSW5pdGlhbCBtb3VudCBzaG91bGQgbm90IGJlIGJhdGNoZWQuXG5cblxuICAgIHVuYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCBmaWJlclJvb3QsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGZpYmVyUm9vdCA9IHJvb3QuX2ludGVybmFsUm9vdDtcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBfb3JpZ2luYWxDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0UHVibGljUm9vdEluc3RhbmNlKGZpYmVyUm9vdCk7XG5cbiAgICAgICAgX29yaWdpbmFsQ2FsbGJhY2suY2FsbChpbnN0YW5jZSk7XG4gICAgICB9O1xuICAgIH0gLy8gVXBkYXRlXG5cblxuICAgIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgZmliZXJSb290LCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBnZXRQdWJsaWNSb290SW5zdGFuY2UoZmliZXJSb290KTtcbn1cblxuZnVuY3Rpb24gZmluZERPTU5vZGUoY29tcG9uZW50T3JFbGVtZW50KSB7XG4gIHtcbiAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lciQzLmN1cnJlbnQ7XG5cbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgb3duZXIuc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSBvd25lci5zdGF0ZU5vZGUuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyO1xuXG4gICAgICBpZiAoIXdhcm5lZEFib3V0UmVmc0luUmVuZGVyKSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBhY2Nlc3NpbmcgZmluZERPTU5vZGUgaW5zaWRlIGl0cyByZW5kZXIoKS4gJyArICdyZW5kZXIoKSBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4gSXQgc2hvdWxkICcgKyAnbmV2ZXIgYWNjZXNzIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIHN0YWxlIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgJyArICdyZW5kZXIsIHN1Y2ggYXMgcmVmcy4gTW92ZSB0aGlzIGxvZ2ljIHRvIGNvbXBvbmVudERpZE1vdW50IGFuZCAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZSBpbnN0ZWFkLicsIGdldENvbXBvbmVudE5hbWUob3duZXIudHlwZSkgfHwgJ0EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIG93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb21wb25lbnRPckVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvbXBvbmVudE9yRWxlbWVudC5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudE9yRWxlbWVudDtcbiAgfVxuXG4gIHtcbiAgICByZXR1cm4gZmluZEhvc3RJbnN0YW5jZVdpdGhXYXJuaW5nKGNvbXBvbmVudE9yRWxlbWVudCwgJ2ZpbmRET01Ob2RlJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGh5ZHJhdGUoZWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00uaHlkcmF0ZSgpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgY3JlYXRlUm9vdChjb250YWluZXIsIHtoeWRyYXRlOiB0cnVlfSkucmVuZGVyKGVsZW1lbnQpPycpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiB0aHJvdyBvciB3YXJuIGlmIHdlIGNvdWxkbid0IGh5ZHJhdGU/XG5cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgZWxlbWVudCwgY29udGFpbmVyLCB0cnVlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiByZW5kZXIoZWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyKCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSAnICsgJ3Bhc3NlZCB0byBSZWFjdERPTS5jcmVhdGVSb290KCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCByb290LnJlbmRlcihlbGVtZW50KT8nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgZWxlbWVudCwgY29udGFpbmVyLCBmYWxzZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBjYWxsYmFjaykge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyTm9kZSkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCEocGFyZW50Q29tcG9uZW50ICE9IG51bGwgJiYgaGFzKHBhcmVudENvbXBvbmVudCkpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwicGFyZW50Q29tcG9uZW50IG11c3QgYmUgYSB2YWxpZCBSZWFjdCBDb21wb25lbnRcIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGZhbHNlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiB1bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lcikge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInVubW91bnRDb21wb25lbnRBdE5vZGUoLi4uKTogVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgaXNNb2Rlcm5Sb290ID0gaXNDb250YWluZXJNYXJrZWRBc1Jvb3QoY29udGFpbmVyKSAmJiBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzTW9kZXJuUm9vdCkge1xuICAgICAgZXJyb3IoJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSAnICsgJ3Bhc3NlZCB0byBSZWFjdERPTS5jcmVhdGVSb290KCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgcm9vdC51bm1vdW50KCk/Jyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyKSB7XG4gICAge1xuICAgICAgdmFyIHJvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICAgICAgdmFyIHJlbmRlcmVkQnlEaWZmZXJlbnRSZWFjdCA9IHJvb3RFbCAmJiAhZ2V0SW5zdGFuY2VGcm9tTm9kZShyb290RWwpO1xuXG4gICAgICBpZiAocmVuZGVyZWRCeURpZmZlcmVudFJlYWN0KSB7XG4gICAgICAgIGVycm9yKFwidW5tb3VudENvbXBvbmVudEF0Tm9kZSgpOiBUaGUgbm9kZSB5b3UncmUgYXR0ZW1wdGluZyB0byB1bm1vdW50IFwiICsgJ3dhcyByZW5kZXJlZCBieSBhbm90aGVyIGNvcHkgb2YgUmVhY3QuJyk7XG4gICAgICB9XG4gICAgfSAvLyBVbm1vdW50IHNob3VsZCBub3QgYmUgYmF0Y2hlZC5cblxuXG4gICAgdW5iYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgICBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBudWxsLCBjb250YWluZXIsIGZhbHNlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWUgVGhpcyBzaG91bGQgcHJvYmFibHkgdXNlIGBkZWxldGUgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXJgXG4gICAgICAgIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID0gbnVsbDtcbiAgICAgICAgdW5tYXJrQ29udGFpbmVyQXNSb290KGNvbnRhaW5lcik7XG4gICAgICB9KTtcbiAgICB9KTsgLy8gSWYgeW91IGNhbGwgdW5tb3VudENvbXBvbmVudEF0Tm9kZSB0d2ljZSBpbiBxdWljayBzdWNjZXNzaW9uLCB5b3UnbGxcbiAgICAvLyBnZXQgYHRydWVgIHR3aWNlLiBUaGF0J3MgcHJvYmFibHkgZmluZT9cblxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHZhciBfcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG5cbiAgICAgIHZhciBoYXNOb25Sb290UmVhY3RDaGlsZCA9ICEhKF9yb290RWwgJiYgZ2V0SW5zdGFuY2VGcm9tTm9kZShfcm9vdEVsKSk7IC8vIENoZWNrIGlmIHRoZSBjb250YWluZXIgaXRzZWxmIGlzIGEgUmVhY3Qgcm9vdCBub2RlLlxuXG4gICAgICB2YXIgaXNDb250YWluZXJSZWFjdFJvb3QgPSBjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiBpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lci5wYXJlbnROb2RlKSAmJiAhIWNvbnRhaW5lci5wYXJlbnROb2RlLl9yZWFjdFJvb3RDb250YWluZXI7XG5cbiAgICAgIGlmIChoYXNOb25Sb290UmVhY3RDaGlsZCkge1xuICAgICAgICBlcnJvcihcInVubW91bnRDb21wb25lbnRBdE5vZGUoKTogVGhlIG5vZGUgeW91J3JlIGF0dGVtcHRpbmcgdG8gdW5tb3VudCBcIiArICd3YXMgcmVuZGVyZWQgYnkgUmVhY3QgYW5kIGlzIG5vdCBhIHRvcC1sZXZlbCBjb250YWluZXIuICVzJywgaXNDb250YWluZXJSZWFjdFJvb3QgPyAnWW91IG1heSBoYXZlIGFjY2lkZW50YWxseSBwYXNzZWQgaW4gYSBSZWFjdCByb290IG5vZGUgaW5zdGVhZCAnICsgJ29mIGl0cyBjb250YWluZXIuJyA6ICdJbnN0ZWFkLCBoYXZlIHRoZSBwYXJlbnQgY29tcG9uZW50IHVwZGF0ZSBpdHMgc3RhdGUgYW5kICcgKyAncmVyZW5kZXIgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoaXMgY29tcG9uZW50LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5zZXRBdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24kMSk7XG5zZXRBdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiQxKTtcbnNldEF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkkMSk7XG5zZXRBdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eShydW5XaXRoUHJpb3JpdHkkMik7XG52YXIgZGlkV2FybkFib3V0VW5zdGFibGVDcmVhdGVQb3J0YWwgPSBmYWxzZTtcblxue1xuICBpZiAodHlwZW9mIE1hcCAhPT0gJ2Z1bmN0aW9uJyB8fCAvLyAkRmxvd0lzc3VlIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIE1hcCBoYXMgbm8gcHJvdG90eXBlXG4gIE1hcC5wcm90b3R5cGUgPT0gbnVsbCB8fCB0eXBlb2YgTWFwLnByb3RvdHlwZS5mb3JFYWNoICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBTZXQgIT09ICdmdW5jdGlvbicgfHwgLy8gJEZsb3dJc3N1ZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBTZXQgaGFzIG5vIHByb3RvdHlwZVxuICBTZXQucHJvdG90eXBlID09IG51bGwgfHwgdHlwZW9mIFNldC5wcm90b3R5cGUuY2xlYXIgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIFNldC5wcm90b3R5cGUuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGVycm9yKCdSZWFjdCBkZXBlbmRzIG9uIE1hcCBhbmQgU2V0IGJ1aWx0LWluIHR5cGVzLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgfVxufVxuXG5zZXRSZXN0b3JlSW1wbGVtZW50YXRpb24ocmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQzKTtcbnNldEJhdGNoaW5nSW1wbGVtZW50YXRpb24oYmF0Y2hlZFVwZGF0ZXMkMSwgZGlzY3JldGVVcGRhdGVzJDEsIGZsdXNoRGlzY3JldGVVcGRhdGVzLCBiYXRjaGVkRXZlbnRVcGRhdGVzJDEpO1xuXG5mdW5jdGlvbiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVyKSB7XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9IC8vIFRPRE86IHBhc3MgUmVhY3RET00gcG9ydGFsIGltcGxlbWVudGF0aW9uIGFzIHRoaXJkIGFyZ3VtZW50XG4gIC8vICRGbG93Rml4TWUgVGhlIEZsb3cgdHlwZSBpcyBvcGFxdWUgYnV0IHRoZXJlJ3Mgbm8gd2F5IHRvIGFjdHVhbGx5IGNyZWF0ZSBpdC5cblxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoY2hpbGRyZW4sIGNvbnRhaW5lciwgbnVsbCwga2V5KTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBjYWxsYmFjaykge1xuXG4gIHJldHVybiB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXIpIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcblxuICB7XG4gICAgaWYgKCFkaWRXYXJuQWJvdXRVbnN0YWJsZUNyZWF0ZVBvcnRhbCkge1xuICAgICAgZGlkV2FybkFib3V0VW5zdGFibGVDcmVhdGVQb3J0YWwgPSB0cnVlO1xuXG4gICAgICB3YXJuKCdUaGUgUmVhY3RET00udW5zdGFibGVfY3JlYXRlUG9ydGFsKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdERPTS5jcmVhdGVQb3J0YWwoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLCAnICsgJ2J1dCB3aXRob3V0IHRoZSBcInVuc3RhYmxlX1wiIHByZWZpeC4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lciwga2V5KTtcbn1cblxudmFyIEludGVybmFscyA9IHtcbiAgLy8gS2VlcCBpbiBzeW5jIHdpdGggUmVhY3RUZXN0VXRpbHMuanMsIGFuZCBSZWFjdFRlc3RVdGlsc0FjdC5qcy5cbiAgLy8gVGhpcyBpcyBhbiBhcnJheSBmb3IgYmV0dGVyIG1pbmlmaWNhdGlvbi5cbiAgRXZlbnRzOiBbZ2V0SW5zdGFuY2VGcm9tTm9kZSwgZ2V0Tm9kZUZyb21JbnN0YW5jZSwgZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSwgZW5xdWV1ZVN0YXRlUmVzdG9yZSwgcmVzdG9yZVN0YXRlSWZOZWVkZWQsIGZsdXNoUGFzc2l2ZUVmZmVjdHMsIC8vIFRPRE86IFRoaXMgaXMgcmVsYXRlZCB0byBgYWN0YCwgbm90IGV2ZW50cy4gTW92ZSB0byBzZXBhcmF0ZSBrZXk/XG4gIElzVGhpc1JlbmRlcmVyQWN0aW5nXVxufTtcbnZhciBmb3VuZERldlRvb2xzID0gaW5qZWN0SW50b0RldlRvb2xzKHtcbiAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlLFxuICBidW5kbGVUeXBlOiAgMSAsXG4gIHZlcnNpb246IFJlYWN0VmVyc2lvbixcbiAgcmVuZGVyZXJQYWNrYWdlTmFtZTogJ3JlYWN0LWRvbSdcbn0pO1xuXG57XG4gIGlmICghZm91bmREZXZUb29scyAmJiBjYW5Vc2VET00gJiYgd2luZG93LnRvcCA9PT0gd2luZG93LnNlbGYpIHtcbiAgICAvLyBJZiB3ZSdyZSBpbiBDaHJvbWUgb3IgRmlyZWZveCwgcHJvdmlkZSBhIGRvd25sb2FkIGxpbmsgaWYgbm90IGluc3RhbGxlZC5cbiAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUnKSA+IC0xICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRWRnZScpID09PSAtMSB8fCBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0ZpcmVmb3gnKSA+IC0xKSB7XG4gICAgICB2YXIgcHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2w7IC8vIERvbid0IHdhcm4gaW4gZXhvdGljIGNhc2VzIGxpa2UgY2hyb21lLWV4dGVuc2lvbjovLy5cblxuICAgICAgaWYgKC9eKGh0dHBzP3xmaWxlKTokLy50ZXN0KHByb3RvY29sKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG4gICAgICAgIGNvbnNvbGUuaW5mbygnJWNEb3dubG9hZCB0aGUgUmVhY3QgRGV2VG9vbHMgJyArICdmb3IgYSBiZXR0ZXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMnICsgKHByb3RvY29sID09PSAnZmlsZTonID8gJ1xcbllvdSBtaWdodCBuZWVkIHRvIHVzZSBhIGxvY2FsIEhUVFAgc2VydmVyIChpbnN0ZWFkIG9mIGZpbGU6Ly8pOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1kZXZ0b29scy1mYXEnIDogJycpLCAnZm9udC13ZWlnaHQ6Ym9sZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gSW50ZXJuYWxzO1xuZXhwb3J0cy5jcmVhdGVQb3J0YWwgPSBjcmVhdGVQb3J0YWwkMTtcbmV4cG9ydHMuZmluZERPTU5vZGUgPSBmaW5kRE9NTm9kZTtcbmV4cG9ydHMuZmx1c2hTeW5jID0gZmx1c2hTeW5jO1xuZXhwb3J0cy5oeWRyYXRlID0gaHlkcmF0ZTtcbmV4cG9ydHMucmVuZGVyID0gcmVuZGVyO1xuZXhwb3J0cy51bm1vdW50Q29tcG9uZW50QXROb2RlID0gdW5tb3VudENvbXBvbmVudEF0Tm9kZTtcbmV4cG9ydHMudW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgPSBiYXRjaGVkVXBkYXRlcyQxO1xuZXhwb3J0cy51bnN0YWJsZV9jcmVhdGVQb3J0YWwgPSB1bnN0YWJsZV9jcmVhdGVQb3J0YWw7XG5leHBvcnRzLnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyID0gcmVuZGVyU3VidHJlZUludG9Db250YWluZXI7XG5leHBvcnRzLnZlcnNpb24gPSBSZWFjdFZlcnNpb247XG4gIH0pKCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBjaGVja0RDRSgpIHtcbiAgLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuICBpZiAoXG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFICE9PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIFRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZFxuICAgIC8vIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgY29uZGl0aW9uIGlzIHRydWUgb25seSBpbiBkZXZlbG9wbWVudC5cbiAgICAvLyBUaGVyZWZvcmUgaWYgdGhlIGJyYW5jaCBpcyBzdGlsbCBoZXJlLCBkZWFkIGNvZGUgZWxpbWluYXRpb24gd2Fzbid0XG4gICAgLy8gcHJvcGVybHkgYXBwbGllZC5cbiAgICAvLyBEb24ndCBjaGFuZ2UgdGhlIG1lc3NhZ2UuIFJlYWN0IERldlRvb2xzIHJlbGllcyBvbiBpdC4gQWxzbyBtYWtlIHN1cmVcbiAgICAvLyB0aGlzIG1lc3NhZ2UgZG9lc24ndCBvY2N1ciBlbHNld2hlcmUgaW4gdGhpcyBmdW5jdGlvbiwgb3IgaXQgd2lsbCBjYXVzZVxuICAgIC8vIGEgZmFsc2UgcG9zaXRpdmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdeX14nKTtcbiAgfVxuICB0cnkge1xuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjb2RlIGFib3ZlIGhhcyBiZWVuIGRlYWQgY29kZSBlbGltaW5hdGVkIChEQ0UnZCkuXG4gICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGNoZWNrRENFKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRGV2VG9vbHMgc2hvdWxkbid0IGNyYXNoIFJlYWN0LCBubyBtYXR0ZXIgd2hhdC5cbiAgICAvLyBXZSBzaG91bGQgc3RpbGwgcmVwb3J0IGluIGNhc2Ugd2UgYnJlYWsgdGhpcyBjb2RlLlxuICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgfVxufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBEQ0UgY2hlY2sgc2hvdWxkIGhhcHBlbiBiZWZvcmUgUmVhY3RET00gYnVuZGxlIGV4ZWN1dGVzIHNvIHRoYXRcbiAgLy8gRGV2VG9vbHMgY2FuIHJlcG9ydCBiYWQgbWluaWZpY2F0aW9uIGR1cmluZyBpbmplY3Rpb24uXG4gIGNoZWNrRENFKCk7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlOyAvLyBUT0RPOiBXZSBkb24ndCB1c2UgQXN5bmNNb2RlIG9yIENvbmN1cnJlbnRNb2RlIGFueW1vcmUuIFRoZXkgd2VyZSB0ZW1wb3Jhcnlcbi8vICh1bnN0YWJsZSkgQVBJcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLiBDYW4gd2UgcmVtb3ZlIHRoZSBzeW1ib2xzP1xuXG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpIDogMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmJsb2NrJykgOiAweGVhZDk7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJykgOiAweGVhZDU7XG52YXIgUkVBQ1RfUkVTUE9OREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5yZXNwb25kZXInKSA6IDB4ZWFkNjtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc2NvcGUnKSA6IDB4ZWFkNztcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUkVTUE9OREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfU0NPUEVfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IC8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcblxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbiAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG5cbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHsgLyoqLyB9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICtcbiAgICAgICAgICAgICAgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICcgKyB0eXBlb2YgZXJyb3IgKyAnLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xuICAgICAgICAgICAgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldHMgd2FybmluZyBjYWNoZSB3aGVuIHRlc3RpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vbGliL2hhcycpO1xudmFyIGNoZWNrUHJvcFR5cGVzID0gcmVxdWlyZSgnLi9jaGVja1Byb3BUeXBlcycpO1xuXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gIC8qIGdsb2JhbCBTeW1ib2wgKi9cbiAgdmFyIElURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xuICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0LlxuICAgKlxuICAgKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDpcbiAgICpcbiAgICogICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihteUl0ZXJhYmxlKTtcbiAgICogICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTtcbiAgICogICAgICAgLi4uXG4gICAqICAgICB9XG4gICAqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbWF5YmVJdGVyYWJsZVxuICAgKiBAcmV0dXJuIHs/ZnVuY3Rpb259XG4gICAqL1xuICBmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yRm47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlXG4gICAqIHN1cHBsaWVkIHRvIFJlYWN0IGNvbXBvbmVudHMuIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTtcbiAgICogICB2YXIgTXlBcnRpY2xlID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICAgcHJvcFR5cGVzOiB7XG4gICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkIFwiZGVzY3JpcHRpb25cIi5cbiAgICogICAgICAgZGVzY3JpcHRpb246IFByb3BzLnN0cmluZyxcbiAgICpcbiAgICogICAgICAgLy8gQSByZXF1aXJlZCBlbnVtIHByb3AgbmFtZWQgXCJjYXRlZ29yeVwiLlxuICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcHJvcCBuYW1lZCBcImRpYWxvZ1wiIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLlxuICAgKiAgICAgICBkaWFsb2c6IFByb3BzLmluc3RhbmNlT2YoRGlhbG9nKS5pc1JlcXVpcmVkXG4gICAqICAgICB9LFxuICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH1cbiAgICogICB9KTtcbiAgICpcbiAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOlxuICAgKlxuICAgKiAgIHR5cGUgOj0gYXJyYXl8Ym9vbHxmdW5jfG9iamVjdHxudW1iZXJ8c3RyaW5nfG9uZU9mKFsuLi5dKXxpbnN0YW5jZU9mKC4uLilcbiAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1aXJlZCk/XG4gICAqXG4gICAqIEVhY2ggYW5kIGV2ZXJ5IGRlY2xhcmF0aW9uIHByb2R1Y2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUuIFRoaXNcbiAgICogYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiAgdmFyIE15TGluayA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgcHJvcFR5cGVzOiB7XG4gICAqICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIG9yIFVSSSBwcm9wIG5hbWVkIFwiaHJlZlwiLlxuICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgKiAgICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICogICAgICAgIGlmIChwcm9wVmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgcHJvcFZhbHVlICE9PSAnc3RyaW5nJyAmJlxuICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xuICAgKiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgKiAgICAgICAgICAgICdFeHBlY3RlZCBhIHN0cmluZyBvciBhbiBVUkkgZm9yICcgKyBwcm9wTmFtZSArICcgaW4gJyArXG4gICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgKiAgICAgICAgICApO1xuICAgKiAgICAgICAgfVxuICAgKiAgICAgIH1cbiAgICogICAgfSxcbiAgICogICAgcmVuZGVyOiBmdW5jdGlvbigpIHsuLi59XG4gICAqICB9KTtcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuXG4gIHZhciBBTk9OWU1PVVMgPSAnPDxhbm9ueW1vdXM+Pic7XG5cbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2FycmF5JyksXG4gICAgYmlnaW50OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYmlnaW50JyksXG4gICAgYm9vbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Jvb2xlYW4nKSxcbiAgICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcbiAgICBudW1iZXI6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdudW1iZXInKSxcbiAgICBvYmplY3Q6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdvYmplY3QnKSxcbiAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcbiAgICBzeW1ib2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzeW1ib2wnKSxcblxuICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcbiAgICBhcnJheU9mOiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIsXG4gICAgZWxlbWVudDogY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCksXG4gICAgZWxlbWVudFR5cGU6IGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSxcbiAgICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyLFxuICAgIG5vZGU6IGNyZWF0ZU5vZGVDaGVja2VyKCksXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXG4gICAgb25lT2Y6IGNyZWF0ZUVudW1UeXBlQ2hlY2tlcixcbiAgICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIsXG4gICAgZXhhY3Q6IGNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIsXG4gIH07XG5cbiAgLyoqXG4gICAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gICAqL1xuICAvKmVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSovXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgICAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtXG4gICAgaWYgKHggPT09IHkpIHtcbiAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxuICAgICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTBcbiAgICAgIHJldHVybiB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RlcCA2LmE6IE5hTiA9PSBOYU5cbiAgICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG4gICAgfVxuICB9XG4gIC8qZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuXG4gIC8qKlxuICAgKiBXZSB1c2UgYW4gRXJyb3ItbGlrZSBvYmplY3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgcGVvcGxlIG1heSBjYWxsXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXG4gICAqIEVycm9ycyBhbnltb3JlLiBXZSBkb24ndCBpbnNwZWN0IHRoZWlyIHN0YWNrIGFueXdheSwgYW5kIGNyZWF0aW5nIHRoZW1cbiAgICogaXMgcHJvaGliaXRpdmVseSBleHBlbnNpdmUgaWYgdGhleSBhcmUgY3JlYXRlZCB0b28gb2Z0ZW4sIHN1Y2ggYXMgd2hhdFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXG4gICAqL1xuICBmdW5jdGlvbiBQcm9wVHlwZUVycm9yKG1lc3NhZ2UsIGRhdGEpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuZGF0YSA9IGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YToge307XG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG4gIC8vIE1ha2UgYGluc3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdvcmsgZm9yIHJldHVybmVkIGVycm9ycy5cbiAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPSAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcblxuICAgICAgaWYgKHNlY3JldCAhPT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgICAgaWYgKHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAgICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICAgICAgICApO1xuICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xuICAgICAgICAgIHZhciBjYWNoZUtleSA9IGNvbXBvbmVudE5hbWUgKyAnOicgKyBwcm9wTmFtZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXG4gICAgICAgICAgICAvLyBBdm9pZCBzcGFtbWluZyB0aGUgY29uc29sZSBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG5vdCBhY3Rpb25hYmxlIGV4Y2VwdCBmb3IgbGliIGF1dGhvcnNcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50IDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgICAnWW91IGFyZSBtYW51YWxseSBjYWxsaW5nIGEgUmVhY3QuUHJvcFR5cGVzIHZhbGlkYXRpb24gJyArXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4gVGhpcyBpcyBkZXByZWNhdGVkICcgK1xuICAgICAgICAgICAgICAnYW5kIHdpbGwgdGhyb3cgaW4gdGhlIHN0YW5kYWxvbmUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcbiAgICAgICAgICAgICAgJ2xpYnJhcnkuIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmctZG9udC1jYWxsLXByb3B0eXBlcyAnICsgJ2ZvciBkZXRhaWxzLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxuICAgICAgICAvLyAnb2YgdHlwZSBgb2JqZWN0YCcuXG4gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBlICsgJ2AuJyksXG4gICAgICAgICAge2V4cGVjdGVkVHlwZTogZXhwZWN0ZWRUeXBlfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHtcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBhcnJheS4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnWycgKyBpICsgJ10nLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIVJlYWN0SXMuaXNWYWxpZEVsZW1lbnRUeXBlKHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50IHR5cGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyKGV4cGVjdGVkQ2xhc3MpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XG4gICAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudHMgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LCBnb3QgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIGFyZ3VtZW50cy4gJyArXG4gICAgICAgICAgICAnQSBjb21tb24gbWlzdGFrZSBpcyB0byB3cml0ZSBvbmVPZih4LCB5LCB6KSBpbnN0ZWFkIG9mIG9uZU9mKFt4LCB5LCB6XSkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMsIGZ1bmN0aW9uIHJlcGxhY2VyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0eXBlID09PSAnc3ltYm9sJykge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIFN0cmluZyhwcm9wVmFsdWUpICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVjdE9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIG9iamVjdC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XG4gICAgICAgIGlmIChoYXMocHJvcFZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xuICAgICAgICAgICdyZWNlaXZlZCAnICsgZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKGNoZWNrZXIpICsgJyBhdCBpbmRleCAnICsgaSArICcuJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBleHBlY3RlZFR5cGVzID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgICB2YXIgY2hlY2tlclJlc3VsdCA9IGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChjaGVja2VyUmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tlclJlc3VsdC5kYXRhICYmIGhhcyhjaGVja2VyUmVzdWx0LmRhdGEsICdleHBlY3RlZFR5cGUnKSkge1xuICAgICAgICAgIGV4cGVjdGVkVHlwZXMucHVzaChjaGVja2VyUmVzdWx0LmRhdGEuZXhwZWN0ZWRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGV4cGVjdGVkVHlwZXNNZXNzYWdlID0gKGV4cGVjdGVkVHlwZXMubGVuZ3RoID4gMCkgPyAnLCBleHBlY3RlZCBvbmUgb2YgdHlwZSBbJyArIGV4cGVjdGVkVHlwZXMuam9pbignLCAnKSArICddJzogJyc7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgJyArIGV4cGVjdGVkVHlwZXNNZXNzYWdlICsgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCB0eXBlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXkgKyAnYCBpcyBpbnZhbGlkOyAnICtcbiAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGUgKyAnYC4nXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzaGFwZVR5cGVzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgZ2V0UHJlY2lzZVR5cGUoY2hlY2tlcikpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWxsIGtleXMgaW4gY2FzZSBzb21lIGFyZSByZXF1aXJlZCBidXQgbWlzc2luZyBmcm9tIHByb3BzLlxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gYWxsS2V5cykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKGhhcyhzaGFwZVR5cGVzLCBrZXkpICYmIHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIGdldFByZWNpc2VUeXBlKGNoZWNrZXIpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXG4gICAgICAgICAgICAnXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xuICAgICAgICAgICAgJ1xcblZhbGlkIGtleXM6ICcgKyBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhzaGFwZVR5cGVzKSwgbnVsbCwgJyAgJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xuICAgIHN3aXRjaCAodHlwZW9mIHByb3BWYWx1ZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gIXByb3BWYWx1ZTtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFZhbHVlLmV2ZXJ5KGlzTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4ocHJvcFZhbHVlKTtcbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtcbiAgICAgICAgICB2YXIgc3RlcDtcbiAgICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gcHJvcFZhbHVlLmVudHJpZXMpIHtcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgaWYgKCFpc05vZGUoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNOb2RlKGVudHJ5WzFdKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSB7XG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cbiAgICBpZiAocHJvcFR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBmYWxzeSB2YWx1ZSBjYW4ndCBiZSBhIFN5bWJvbFxuICAgIGlmICghcHJvcFZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSA9PT0gJ1N5bWJvbCdcbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgcHJvcFZhbHVlIGluc3RhbmNlb2YgU3ltYm9sKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfVxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cbiAgICAgIC8vICdvYmplY3QnIGZvciB0eXBlb2YgYSBSZWdFeHAuIFdlJ2xsIG5vcm1hbGl6ZSB0aGlzIGhlcmUgc28gdGhhdCAvYmxhL1xuICAgICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXG4gICAgICByZXR1cm4gJ29iamVjdCc7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdzeW1ib2wnO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxuICBmdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XG4gICAgfVxuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHBvc3RmaXhlZCB0byBhIHdhcm5pbmcgYWJvdXQgYW4gaW52YWxpZCB0eXBlLlxuICAvLyBGb3IgZXhhbXBsZSwgXCJ1bmRlZmluZWRcIiBvciBcIm9mIHR5cGUgYXJyYXlcIlxuICBmdW5jdGlvbiBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcodmFsdWUpIHtcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiAnYW4gJyArIHR5cGU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgcmV0dXJuICdhICcgKyB0eXBlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xuICAgIGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkge1xuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBjaGVja1Byb3BUeXBlcztcbiAgUmVhY3RQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBjaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZTtcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCAiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmIChhcmcpIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIHBhcnNlVmFsdWUoYXJnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZVZhbHVlIChhcmcpIHtcblx0XHRpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiBhcmc7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmcgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHR9XG5cblx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRyZXR1cm4gYXJnLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIGtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmRDbGFzcyAodmFsdWUsIG5ld0NsYXNzKSB7XG5cdFx0aWYgKCFuZXdDbGFzcykge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyAnICcgKyBuZXdDbGFzcztcblx0XHR9XG5cdFxuXHRcdHJldHVybiB2YWx1ZSArIG5ld0NsYXNzO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlOyAvLyBUT0RPOiBXZSBkb24ndCB1c2UgQXN5bmNNb2RlIG9yIENvbmN1cnJlbnRNb2RlIGFueW1vcmUuIFRoZXkgd2VyZSB0ZW1wb3Jhcnlcbi8vICh1bnN0YWJsZSkgQVBJcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLiBDYW4gd2UgcmVtb3ZlIHRoZSBzeW1ib2xzP1xuXG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpIDogMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmJsb2NrJykgOiAweGVhZDk7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJykgOiAweGVhZDU7XG52YXIgUkVBQ1RfUkVTUE9OREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5yZXNwb25kZXInKSA6IDB4ZWFkNjtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc2NvcGUnKSA6IDB4ZWFkNztcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUkVTUE9OREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfU0NPUEVfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IC8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcblxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgY2hpbGRDb250ZXh0VHlwZXM6IHRydWUsXG4gIGNvbnRleHRUeXBlOiB0cnVlLFxuICBjb250ZXh0VHlwZXM6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IHRydWUsXG4gIG1peGluczogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XG4gIG5hbWU6IHRydWUsXG4gIGxlbmd0aDogdHJ1ZSxcbiAgcHJvdG90eXBlOiB0cnVlLFxuICBjYWxsZXI6IHRydWUsXG4gIGNhbGxlZTogdHJ1ZSxcbiAgYXJndW1lbnRzOiB0cnVlLFxuICBhcml0eTogdHJ1ZVxufTtcbnZhciBGT1JXQVJEX1JFRl9TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICByZW5kZXI6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZVxufTtcbnZhciBNRU1PX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIGNvbXBhcmU6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBUWVBFX1NUQVRJQ1MgPSB7fTtcblRZUEVfU1RBVElDU1tyZWFjdElzLkZvcndhcmRSZWZdID0gRk9SV0FSRF9SRUZfU1RBVElDUztcblRZUEVfU1RBVElDU1tyZWFjdElzLk1lbW9dID0gTUVNT19TVEFUSUNTO1xuXG5mdW5jdGlvbiBnZXRTdGF0aWNzKGNvbXBvbmVudCkge1xuICAvLyBSZWFjdCB2MTYuMTEgYW5kIGJlbG93XG4gIGlmIChyZWFjdElzLmlzTWVtbyhjb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIE1FTU9fU1RBVElDUztcbiAgfSAvLyBSZWFjdCB2MTYuMTIgYW5kIGFib3ZlXG5cblxuICByZXR1cm4gVFlQRV9TVEFUSUNTW2NvbXBvbmVudFsnJCR0eXBlb2YnXV0gfHwgUkVBQ1RfU1RBVElDUztcbn1cblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzO1xuIiwgIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsICIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsICJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlSGFzO1xuIiwgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsICJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwgInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBTdGFja1xuICovXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0NsZWFyO1xuIiwgIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsICIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0hhcztcbiIsICIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCAidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlSnNEYXRhO1xuIiwgInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsICJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwgIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwgInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsICIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiIsICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsICJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiIsICJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5YWJsZTtcbiIsICJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlR2V0O1xuIiwgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCAidmFyIG1hcENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19tYXBDYWNoZUNsZWFyJyksXG4gICAgbWFwQ2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19tYXBDYWNoZURlbGV0ZScpLFxuICAgIG1hcENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVHZXQnKSxcbiAgICBtYXBDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX21hcENhY2hlSGFzJyksXG4gICAgbWFwQ2FjaGVTZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXBDYWNoZTtcbiIsICJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsICJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcbiIsICIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLCAidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iLCAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVNvbWU7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCAidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheVNvbWUgPSByZXF1aXJlKCcuL19hcnJheVNvbWUnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIGFyclN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChhcnJTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gYXJyU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IGFycmF5O1xuICB9XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gdHJ1ZSxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gIHN0YWNrLnNldChhcnJheSwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIGFycmF5KTtcblxuICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghY2FjaGVIYXMoc2Vlbiwgb3RoSW5kZXgpICYmXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEFycmF5cztcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwgIi8qKlxuICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwVG9BcnJheTtcbiIsICIvKipcbiAqIENvbnZlcnRzIGBzZXRgIHRvIGFuIGFycmF5IG9mIGl0cyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvQXJyYXk7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5JyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEJ5VGFnO1xuIiwgIi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVB1c2g7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsICJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldEFsbEtleXM7XG4iLCAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RmlsdGVyO1xuIiwgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkFycmF5O1xuIiwgInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHM7XG4iLCAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVGltZXM7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3RMaWtlO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwgInZhciBiYXNlSXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL19iYXNlSXNBcmd1bWVudHMnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FyZ3VtZW50cztcbiIsICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsICIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsICIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsICJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsICJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsICJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvdG90eXBlO1xuIiwgIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJBcmc7XG4iLCAidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzO1xuIiwgInZhciBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXMnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzO1xuIiwgInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwgInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5cztcbiIsICJ2YXIgYmFzZUdldEFsbEtleXMgPSByZXF1aXJlKCcuL19iYXNlR2V0QWxsS2V5cycpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMsIGdldFN5bWJvbHMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEFsbEtleXM7XG4iLCAidmFyIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsT2JqZWN0cztcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFWaWV3O1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBTZXQgPSBnZXROYXRpdmUocm9vdCwgJ1NldCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldDtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFdlYWtNYXAgPSBnZXROYXRpdmUocm9vdCwgJ1dlYWtNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXZWFrTWFwO1xuIiwgInZhciBEYXRhVmlldyA9IHJlcXVpcmUoJy4vX0RhdGFWaWV3JyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgUHJvbWlzZSA9IHJlcXVpcmUoJy4vX1Byb21pc2UnKSxcbiAgICBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpLFxuICAgIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFRhZztcbiIsICJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBlcXVhbEJ5VGFnID0gcmVxdWlyZSgnLi9fZXF1YWxCeVRhZycpLFxuICAgIGVxdWFsT2JqZWN0cyA9IHJlcXVpcmUoJy4vX2VxdWFsT2JqZWN0cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbERlZXA7XG4iLCAidmFyIGJhc2VJc0VxdWFsRGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsRGVlcCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNFcXVhbGAgd2hpY2ggc3VwcG9ydHMgcGFydGlhbCBjb21wYXJpc29uc1xuICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFpc09iamVjdExpa2UodmFsdWUpICYmICFpc09iamVjdExpa2Uob3RoZXIpKSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xuICB9XG4gIHJldHVybiBiYXNlSXNFcXVhbERlZXAodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsO1xuIiwgInZhciBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyk7XG5cbi8qKlxuICogUGVyZm9ybXMgYSBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZVxuICogZXF1aXZhbGVudC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2Qgc3VwcG9ydHMgY29tcGFyaW5nIGFycmF5cywgYXJyYXkgYnVmZmVycywgYm9vbGVhbnMsXG4gKiBkYXRlIG9iamVjdHMsIGVycm9yIG9iamVjdHMsIG1hcHMsIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsXG4gKiBzZXRzLCBzdHJpbmdzLCBzeW1ib2xzLCBhbmQgdHlwZWQgYXJyYXlzLiBgT2JqZWN0YCBvYmplY3RzIGFyZSBjb21wYXJlZFxuICogYnkgdGhlaXIgb3duLCBub3QgaW5oZXJpdGVkLCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuIEZ1bmN0aW9ucyBhbmQgRE9NXG4gKiBub2RlcyBhcmUgY29tcGFyZWQgYnkgc3RyaWN0IGVxdWFsaXR5LCBpLmUuIGA9PT1gLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmlzRXF1YWwob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogb2JqZWN0ID09PSBvdGhlcjtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRXF1YWwodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRXF1YWw7XG4iLCAiLy8hIG1vbWVudC5qc1xuLy8hIHZlcnNpb24gOiAyLjMwLjFcbi8vISBhdXRob3JzIDogVGltIFdvb2QsIElza3JlbiBDaGVybmV2LCBNb21lbnQuanMgY29udHJpYnV0b3JzXG4vLyEgbGljZW5zZSA6IE1JVFxuLy8hIG1vbWVudGpzLmNvbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICBnbG9iYWwubW9tZW50ID0gZmFjdG9yeSgpXG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBob29rQ2FsbGJhY2s7XG5cbiAgICBmdW5jdGlvbiBob29rcygpIHtcbiAgICAgICAgcmV0dXJuIGhvb2tDYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgZG9uZSB0byByZWdpc3RlciB0aGUgbWV0aG9kIGNhbGxlZCB3aXRoIG1vbWVudCgpXG4gICAgLy8gd2l0aG91dCBjcmVhdGluZyBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG4gICAgZnVuY3Rpb24gc2V0SG9va0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICAgIGhvb2tDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXJyYXkoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgQXJyYXkgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEFycmF5XSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09iamVjdChpbnB1dCkge1xuICAgICAgICAvLyBJRTggd2lsbCB0cmVhdCB1bmRlZmluZWQgYW5kIG51bGwgYXMgb2JqZWN0IGlmIGl0IHdhc24ndCBmb3JcbiAgICAgICAgLy8gaW5wdXQgIT0gbnVsbFxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgIT0gbnVsbCAmJlxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNPd25Qcm9wKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCBiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrO1xuICAgICAgICAgICAgZm9yIChrIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVbmRlZmluZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09PSB2b2lkIDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE51bWJlcl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXRlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IERhdGVdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcChhcnIsIGZuKSB7XG4gICAgICAgIHZhciByZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBhcnJMZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJyTGVuOyArK2kpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKGZuKGFycltpXSwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZW5kKGEsIGIpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBiKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChiLCBpKSkge1xuICAgICAgICAgICAgICAgIGFbaV0gPSBiW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3RvU3RyaW5nJykpIHtcbiAgICAgICAgICAgIGEudG9TdHJpbmcgPSBiLnRvU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3ZhbHVlT2YnKSkge1xuICAgICAgICAgICAgYS52YWx1ZU9mID0gYi52YWx1ZU9mO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCB0cnVlKS51dGMoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZhdWx0UGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGRlZXAgY2xvbmUgdGhpcyBvYmplY3QuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbXB0eTogZmFsc2UsXG4gICAgICAgICAgICB1bnVzZWRUb2tlbnM6IFtdLFxuICAgICAgICAgICAgdW51c2VkSW5wdXQ6IFtdLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IC0yLFxuICAgICAgICAgICAgY2hhcnNMZWZ0T3ZlcjogMCxcbiAgICAgICAgICAgIG51bGxJbnB1dDogZmFsc2UsXG4gICAgICAgICAgICBpbnZhbGlkRXJhOiBudWxsLFxuICAgICAgICAgICAgaW52YWxpZE1vbnRoOiBudWxsLFxuICAgICAgICAgICAgaW52YWxpZEZvcm1hdDogZmFsc2UsXG4gICAgICAgICAgICB1c2VySW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNvOiBmYWxzZSxcbiAgICAgICAgICAgIHBhcnNlZERhdGVQYXJ0czogW10sXG4gICAgICAgICAgICBlcmE6IG51bGwsXG4gICAgICAgICAgICBtZXJpZGllbTogbnVsbCxcbiAgICAgICAgICAgIHJmYzI4MjI6IGZhbHNlLFxuICAgICAgICAgICAgd2Vla2RheU1pc21hdGNoOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzaW5nRmxhZ3MobSkge1xuICAgICAgICBpZiAobS5fcGYgPT0gbnVsbCkge1xuICAgICAgICAgICAgbS5fcGYgPSBkZWZhdWx0UGFyc2luZ0ZsYWdzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX3BmO1xuICAgIH1cblxuICAgIHZhciBzb21lO1xuICAgIGlmIChBcnJheS5wcm90b3R5cGUuc29tZSkge1xuICAgICAgICBzb21lID0gQXJyYXkucHJvdG90eXBlLnNvbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc29tZSA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICAgICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpLFxuICAgICAgICAgICAgICAgIGxlbiA9IHQubGVuZ3RoID4+PiAwLFxuICAgICAgICAgICAgICAgIGk7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpIGluIHQgJiYgZnVuLmNhbGwodGhpcywgdFtpXSwgaSwgdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZChtKSB7XG4gICAgICAgIHZhciBmbGFncyA9IG51bGwsXG4gICAgICAgICAgICBwYXJzZWRQYXJ0cyA9IGZhbHNlLFxuICAgICAgICAgICAgaXNOb3dWYWxpZCA9IG0uX2QgJiYgIWlzTmFOKG0uX2QuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKGlzTm93VmFsaWQpIHtcbiAgICAgICAgICAgIGZsYWdzID0gZ2V0UGFyc2luZ0ZsYWdzKG0pO1xuICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBzb21lLmNhbGwoZmxhZ3MucGFyc2VkRGF0ZVBhcnRzLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpICE9IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlzTm93VmFsaWQgPVxuICAgICAgICAgICAgICAgIGZsYWdzLm92ZXJmbG93IDwgMCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5lbXB0eSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRXJhICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRNb250aCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkV2Vla2RheSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy53ZWVrZGF5TWlzbWF0Y2ggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MubnVsbElucHV0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRGb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MudXNlckludmFsaWRhdGVkICYmXG4gICAgICAgICAgICAgICAgKCFmbGFncy5tZXJpZGllbSB8fCAoZmxhZ3MubWVyaWRpZW0gJiYgcGFyc2VkUGFydHMpKTtcbiAgICAgICAgICAgIGlmIChtLl9zdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICAgICAgaXNOb3dWYWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5jaGFyc0xlZnRPdmVyID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLnVudXNlZFRva2Vucy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYmlnSG91ciA9PT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QuaXNGcm96ZW4gPT0gbnVsbCB8fCAhT2JqZWN0LmlzRnJvemVuKG0pKSB7XG4gICAgICAgICAgICBtLl9pc1ZhbGlkID0gaXNOb3dWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc05vd1ZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmFsaWQoZmxhZ3MpIHtcbiAgICAgICAgdmFyIG0gPSBjcmVhdGVVVEMoTmFOKTtcbiAgICAgICAgaWYgKGZsYWdzICE9IG51bGwpIHtcbiAgICAgICAgICAgIGV4dGVuZChnZXRQYXJzaW5nRmxhZ3MobSksIGZsYWdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS51c2VySW52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gUGx1Z2lucyB0aGF0IGFkZCBwcm9wZXJ0aWVzIHNob3VsZCBhbHNvIGFkZCB0aGUga2V5IGhlcmUgKG51bGwgdmFsdWUpLFxuICAgIC8vIHNvIHdlIGNhbiBwcm9wZXJseSBjbG9uZSBvdXJzZWx2ZXMuXG4gICAgdmFyIG1vbWVudFByb3BlcnRpZXMgPSAoaG9va3MubW9tZW50UHJvcGVydGllcyA9IFtdKSxcbiAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gY29weUNvbmZpZyh0bywgZnJvbSkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIHByb3AsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBtb21lbnRQcm9wZXJ0aWVzTGVuID0gbW9tZW50UHJvcGVydGllcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pc0FNb21lbnRPYmplY3QpKSB7XG4gICAgICAgICAgICB0by5faXNBTW9tZW50T2JqZWN0ID0gZnJvbS5faXNBTW9tZW50T2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faSkpIHtcbiAgICAgICAgICAgIHRvLl9pID0gZnJvbS5faTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2YpKSB7XG4gICAgICAgICAgICB0by5fZiA9IGZyb20uX2Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sKSkge1xuICAgICAgICAgICAgdG8uX2wgPSBmcm9tLl9sO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fc3RyaWN0KSkge1xuICAgICAgICAgICAgdG8uX3N0cmljdCA9IGZyb20uX3N0cmljdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3R6bSkpIHtcbiAgICAgICAgICAgIHRvLl90em0gPSBmcm9tLl90em07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pc1VUQykpIHtcbiAgICAgICAgICAgIHRvLl9pc1VUQyA9IGZyb20uX2lzVVRDO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fb2Zmc2V0KSkge1xuICAgICAgICAgICAgdG8uX29mZnNldCA9IGZyb20uX29mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3BmKSkge1xuICAgICAgICAgICAgdG8uX3BmID0gZ2V0UGFyc2luZ0ZsYWdzKGZyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbG9jYWxlKSkge1xuICAgICAgICAgICAgdG8uX2xvY2FsZSA9IGZyb20uX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb21lbnRQcm9wZXJ0aWVzTGVuID4gMCkge1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1vbWVudFByb3BlcnRpZXNMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHByb3AgPSBtb21lbnRQcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgICAgIHZhbCA9IGZyb21bcHJvcF07XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0bztcbiAgICB9XG5cbiAgICAvLyBNb21lbnQgcHJvdG90eXBlIG9iamVjdFxuICAgIGZ1bmN0aW9uIE1vbWVudChjb25maWcpIHtcbiAgICAgICAgY29weUNvbmZpZyh0aGlzLCBjb25maWcpO1xuICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoY29uZmlnLl9kICE9IG51bGwgPyBjb25maWcuX2QuZ2V0VGltZSgpIDogTmFOKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wIGluIGNhc2UgdXBkYXRlT2Zmc2V0IGNyZWF0ZXMgbmV3IG1vbWVudFxuICAgICAgICAvLyBvYmplY3RzLlxuICAgICAgICBpZiAodXBkYXRlSW5Qcm9ncmVzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNNb21lbnQob2JqKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBvYmogaW5zdGFuY2VvZiBNb21lbnQgfHwgKG9iaiAhPSBudWxsICYmIG9iai5faXNBTW9tZW50T2JqZWN0ICE9IG51bGwpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Fybihtc2cpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25zb2xlLndhcm5cbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RlcHJlY2F0aW9uIHdhcm5pbmc6ICcgKyBtc2cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlKG1zZywgZm4pIHtcbiAgICAgICAgdmFyIGZpcnN0VGltZSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobnVsbCwgbXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICAgICAgICAgICAgICBhcmcsXG4gICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgYXJnTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJndW1lbnRzW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9ICdcXG5bJyArIGkgKyAnXSAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gYXJndW1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc093blByb3AoYXJndW1lbnRzWzBdLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSBrZXkgKyAnOiAnICsgYXJndW1lbnRzWzBdW2tleV0gKyAnLCAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5zbGljZSgwLCAtMik7IC8vIFJlbW92ZSB0cmFpbGluZyBjb21tYSBhbmQgc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgICAgICAgbXNnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG5Bcmd1bWVudHM6ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykuam9pbignJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKCkuc3RhY2tcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGZuKTtcbiAgICB9XG5cbiAgICB2YXIgZGVwcmVjYXRpb25zID0ge307XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGVTaW1wbGUobmFtZSwgbXNnKSB7XG4gICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG5hbWUsIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZXByZWNhdGlvbnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHdhcm4obXNnKTtcbiAgICAgICAgICAgIGRlcHJlY2F0aW9uc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPSBmYWxzZTtcbiAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHR5cGVvZiBGdW5jdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgaW5wdXQgaW5zdGFuY2VvZiBGdW5jdGlvbikgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQoY29uZmlnKSB7XG4gICAgICAgIHZhciBwcm9wLCBpO1xuICAgICAgICBmb3IgKGkgaW4gY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChjb25maWcsIGkpKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IGNvbmZpZ1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW2ldID0gcHJvcDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzWydfJyArIGldID0gcHJvcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICAgICAgICAvLyBMZW5pZW50IG9yZGluYWwgcGFyc2luZyBhY2NlcHRzIGp1c3QgYSBudW1iZXIgaW4gYWRkaXRpb24gdG9cbiAgICAgICAgLy8gbnVtYmVyICsgKHBvc3NpYmx5KSBzdHVmZiBjb21pbmcgZnJvbSBfZGF5T2ZNb250aE9yZGluYWxQYXJzZS5cbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICB0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2UgfHwgdGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSkgK1xuICAgICAgICAgICAgICAgICd8JyArXG4gICAgICAgICAgICAgICAgL1xcZHsxLDJ9Ly5zb3VyY2VcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjaGlsZENvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gZXh0ZW5kKHt9LCBwYXJlbnRDb25maWcpLFxuICAgICAgICAgICAgcHJvcDtcbiAgICAgICAgZm9yIChwcm9wIGluIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKSAmJiBpc09iamVjdChjaGlsZENvbmZpZ1twcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW3Byb3BdID0ge307XG4gICAgICAgICAgICAgICAgICAgIGV4dGVuZChyZXNbcHJvcF0sIHBhcmVudENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgICAgIGV4dGVuZChyZXNbcHJvcF0sIGNoaWxkQ29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkQ29uZmlnW3Byb3BdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gY2hpbGRDb25maWdbcHJvcF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlc1twcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChwcm9wIGluIHBhcmVudENvbmZpZykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AocGFyZW50Q29uZmlnLCBwcm9wKSAmJlxuICAgICAgICAgICAgICAgICFoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSAmJlxuICAgICAgICAgICAgICAgIGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBjaGFuZ2VzIHRvIHByb3BlcnRpZXMgZG9uJ3QgbW9kaWZ5IHBhcmVudCBjb25maWdcbiAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBleHRlbmQoe30sIHJlc1twcm9wXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBMb2NhbGUoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZXQoY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKSB7XG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cztcbiAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAgcmVzID0gW107XG4gICAgICAgICAgICBmb3IgKGkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0Q2FsZW5kYXIgPSB7XG4gICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyKGtleSwgbW9tLCBub3cpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX2NhbGVuZGFyW2tleV0gfHwgdGhpcy5fY2FsZW5kYXJbJ3NhbWVFbHNlJ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dCkgPyBvdXRwdXQuY2FsbChtb20sIG5vdykgOiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gemVyb0ZpbGwobnVtYmVyLCB0YXJnZXRMZW5ndGgsIGZvcmNlU2lnbikge1xuICAgICAgICB2YXIgYWJzTnVtYmVyID0gJycgKyBNYXRoLmFicyhudW1iZXIpLFxuICAgICAgICAgICAgemVyb3NUb0ZpbGwgPSB0YXJnZXRMZW5ndGggLSBhYnNOdW1iZXIubGVuZ3RoLFxuICAgICAgICAgICAgc2lnbiA9IG51bWJlciA+PSAwO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHNpZ24gPyAoZm9yY2VTaWduID8gJysnIDogJycpIDogJy0nKSArXG4gICAgICAgICAgICBNYXRoLnBvdygxMCwgTWF0aC5tYXgoMCwgemVyb3NUb0ZpbGwpKS50b1N0cmluZygpLnN1YnN0cigxKSArXG4gICAgICAgICAgICBhYnNOdW1iZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgZm9ybWF0dGluZ1Rva2VucyA9XG4gICAgICAgICAgICAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fE57MSw1fXxZWVlZWVl8WVlZWVl8WVlZWXxZWXx5ezIsNH18eW8/fGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nLFxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLFxuICAgICAgICBmb3JtYXRGdW5jdGlvbnMgPSB7fSxcbiAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnMgPSB7fTtcblxuICAgIC8vIHRva2VuOiAgICAnTSdcbiAgICAvLyBwYWRkZWQ6ICAgWydNTScsIDJdXG4gICAgLy8gb3JkaW5hbDogICdNbydcbiAgICAvLyBjYWxsYmFjazogZnVuY3Rpb24gKCkgeyB0aGlzLm1vbnRoKCkgKyAxIH1cbiAgICBmdW5jdGlvbiBhZGRGb3JtYXRUb2tlbih0b2tlbiwgcGFkZGVkLCBvcmRpbmFsLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZnVuYyA9IGNhbGxiYWNrO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tjYWxsYmFja10oKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWRkZWQpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3BhZGRlZFswXV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHplcm9GaWxsKGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgcGFkZGVkWzFdLCBwYWRkZWRbMl0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3JkaW5hbCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbb3JkaW5hbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwoXG4gICAgICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0Lm1hdGNoKC9cXFtbXFxzXFxTXS8pKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXlxcW3xcXF0kL2csICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXFxcXC9nLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICB2YXIgYXJyYXkgPSBmb3JtYXQubWF0Y2goZm9ybWF0dGluZ1Rva2VucyksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhhcnJheVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG1vbSkge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9ICcnLFxuICAgICAgICAgICAgICAgIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gaXNGdW5jdGlvbihhcnJheVtpXSlcbiAgICAgICAgICAgICAgICAgICAgPyBhcnJheVtpXS5jYWxsKG1vbSwgZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICA6IGFycmF5W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBmb3JtYXQgZGF0ZSB1c2luZyBuYXRpdmUgZGF0ZSBvYmplY3RcbiAgICBmdW5jdGlvbiBmb3JtYXRNb21lbnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbS5sb2NhbGVEYXRhKCkpO1xuICAgICAgICBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XSA9XG4gICAgICAgICAgICBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XSB8fCBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KTtcblxuICAgICAgICByZXR1cm4gZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0obSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbG9jYWxlKSB7XG4gICAgICAgIHZhciBpID0gNTtcblxuICAgICAgICBmdW5jdGlvbiByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnMoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubG9uZ0RhdGVGb3JtYXQoaW5wdXQpIHx8IGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChpID49IDAgJiYgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2Vuc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvbmdEYXRlRm9ybWF0ID0ge1xuICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgIEw6ICdNTS9ERC9ZWVlZJyxcbiAgICAgICAgTEw6ICdNTU1NIEQsIFlZWVknLFxuICAgICAgICBMTEw6ICdNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb25nRGF0ZUZvcm1hdChrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0sXG4gICAgICAgICAgICBmb3JtYXRVcHBlciA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleS50b1VwcGVyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoZm9ybWF0IHx8ICFmb3JtYXRVcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0gPSBmb3JtYXRVcHBlclxuICAgICAgICAgICAgLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh0b2spIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ01NTU0nIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ01NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdERCcgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnZGRkZCdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvay5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvaztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignJyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRJbnZhbGlkRGF0ZSA9ICdJbnZhbGlkIGRhdGUnO1xuXG4gICAgZnVuY3Rpb24gaW52YWxpZERhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZhbGlkRGF0ZTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdE9yZGluYWwgPSAnJWQnLFxuICAgICAgICBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSA9IC9cXGR7MSwyfS87XG5cbiAgICBmdW5jdGlvbiBvcmRpbmFsKG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCclZCcsIG51bWJlcik7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRSZWxhdGl2ZVRpbWUgPSB7XG4gICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgdzogJ2Egd2VlaycsXG4gICAgICAgIHd3OiAnJWQgd2Vla3MnLFxuICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgeTogJ2EgeWVhcicsXG4gICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbc3RyaW5nXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KVxuICAgICAgICAgICAgPyBvdXRwdXQobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKVxuICAgICAgICAgICAgOiBvdXRwdXQucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXN0RnV0dXJlKGRpZmYsIG91dHB1dCkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW2RpZmYgPiAwID8gJ2Z1dHVyZScgOiAncGFzdCddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihmb3JtYXQpID8gZm9ybWF0KG91dHB1dCkgOiBmb3JtYXQucmVwbGFjZSgvJXMvaSwgb3V0cHV0KTtcbiAgICB9XG5cbiAgICB2YXIgYWxpYXNlcyA9IHtcbiAgICAgICAgRDogJ2RhdGUnLFxuICAgICAgICBkYXRlczogJ2RhdGUnLFxuICAgICAgICBkYXRlOiAnZGF0ZScsXG4gICAgICAgIGQ6ICdkYXknLFxuICAgICAgICBkYXlzOiAnZGF5JyxcbiAgICAgICAgZGF5OiAnZGF5JyxcbiAgICAgICAgZTogJ3dlZWtkYXknLFxuICAgICAgICB3ZWVrZGF5czogJ3dlZWtkYXknLFxuICAgICAgICB3ZWVrZGF5OiAnd2Vla2RheScsXG4gICAgICAgIEU6ICdpc29XZWVrZGF5JyxcbiAgICAgICAgaXNvd2Vla2RheXM6ICdpc29XZWVrZGF5JyxcbiAgICAgICAgaXNvd2Vla2RheTogJ2lzb1dlZWtkYXknLFxuICAgICAgICBEREQ6ICdkYXlPZlllYXInLFxuICAgICAgICBkYXlvZnllYXJzOiAnZGF5T2ZZZWFyJyxcbiAgICAgICAgZGF5b2Z5ZWFyOiAnZGF5T2ZZZWFyJyxcbiAgICAgICAgaDogJ2hvdXInLFxuICAgICAgICBob3VyczogJ2hvdXInLFxuICAgICAgICBob3VyOiAnaG91cicsXG4gICAgICAgIG1zOiAnbWlsbGlzZWNvbmQnLFxuICAgICAgICBtaWxsaXNlY29uZHM6ICdtaWxsaXNlY29uZCcsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAnbWlsbGlzZWNvbmQnLFxuICAgICAgICBtOiAnbWludXRlJyxcbiAgICAgICAgbWludXRlczogJ21pbnV0ZScsXG4gICAgICAgIG1pbnV0ZTogJ21pbnV0ZScsXG4gICAgICAgIE06ICdtb250aCcsXG4gICAgICAgIG1vbnRoczogJ21vbnRoJyxcbiAgICAgICAgbW9udGg6ICdtb250aCcsXG4gICAgICAgIFE6ICdxdWFydGVyJyxcbiAgICAgICAgcXVhcnRlcnM6ICdxdWFydGVyJyxcbiAgICAgICAgcXVhcnRlcjogJ3F1YXJ0ZXInLFxuICAgICAgICBzOiAnc2Vjb25kJyxcbiAgICAgICAgc2Vjb25kczogJ3NlY29uZCcsXG4gICAgICAgIHNlY29uZDogJ3NlY29uZCcsXG4gICAgICAgIGdnOiAnd2Vla1llYXInLFxuICAgICAgICB3ZWVreWVhcnM6ICd3ZWVrWWVhcicsXG4gICAgICAgIHdlZWt5ZWFyOiAnd2Vla1llYXInLFxuICAgICAgICBHRzogJ2lzb1dlZWtZZWFyJyxcbiAgICAgICAgaXNvd2Vla3llYXJzOiAnaXNvV2Vla1llYXInLFxuICAgICAgICBpc293ZWVreWVhcjogJ2lzb1dlZWtZZWFyJyxcbiAgICAgICAgdzogJ3dlZWsnLFxuICAgICAgICB3ZWVrczogJ3dlZWsnLFxuICAgICAgICB3ZWVrOiAnd2VlaycsXG4gICAgICAgIFc6ICdpc29XZWVrJyxcbiAgICAgICAgaXNvd2Vla3M6ICdpc29XZWVrJyxcbiAgICAgICAgaXNvd2VlazogJ2lzb1dlZWsnLFxuICAgICAgICB5OiAneWVhcicsXG4gICAgICAgIHllYXJzOiAneWVhcicsXG4gICAgICAgIHllYXI6ICd5ZWFyJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplVW5pdHModW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB1bml0cyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gYWxpYXNlc1t1bml0c10gfHwgYWxpYXNlc1t1bml0cy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplT2JqZWN0VW5pdHMoaW5wdXRPYmplY3QpIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IHt9LFxuICAgICAgICAgICAgbm9ybWFsaXplZFByb3AsXG4gICAgICAgICAgICBwcm9wO1xuXG4gICAgICAgIGZvciAocHJvcCBpbiBpbnB1dE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoaW5wdXRPYmplY3QsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFByb3AgPSBub3JtYWxpemVVbml0cyhwcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZElucHV0W25vcm1hbGl6ZWRQcm9wXSA9IGlucHV0T2JqZWN0W3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub3JtYWxpemVkSW5wdXQ7XG4gICAgfVxuXG4gICAgdmFyIHByaW9yaXRpZXMgPSB7XG4gICAgICAgIGRhdGU6IDksXG4gICAgICAgIGRheTogMTEsXG4gICAgICAgIHdlZWtkYXk6IDExLFxuICAgICAgICBpc29XZWVrZGF5OiAxMSxcbiAgICAgICAgZGF5T2ZZZWFyOiA0LFxuICAgICAgICBob3VyOiAxMyxcbiAgICAgICAgbWlsbGlzZWNvbmQ6IDE2LFxuICAgICAgICBtaW51dGU6IDE0LFxuICAgICAgICBtb250aDogOCxcbiAgICAgICAgcXVhcnRlcjogNyxcbiAgICAgICAgc2Vjb25kOiAxNSxcbiAgICAgICAgd2Vla1llYXI6IDEsXG4gICAgICAgIGlzb1dlZWtZZWFyOiAxLFxuICAgICAgICB3ZWVrOiA1LFxuICAgICAgICBpc29XZWVrOiA1LFxuICAgICAgICB5ZWFyOiAxLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzT2JqKSB7XG4gICAgICAgIHZhciB1bml0cyA9IFtdLFxuICAgICAgICAgICAgdTtcbiAgICAgICAgZm9yICh1IGluIHVuaXRzT2JqKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcCh1bml0c09iaiwgdSkpIHtcbiAgICAgICAgICAgICAgICB1bml0cy5wdXNoKHsgdW5pdDogdSwgcHJpb3JpdHk6IHByaW9yaXRpZXNbdV0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVuaXRzO1xuICAgIH1cblxuICAgIHZhciBtYXRjaDEgPSAvXFxkLywgLy8gICAgICAgMCAtIDlcbiAgICAgICAgbWF0Y2gyID0gL1xcZFxcZC8sIC8vICAgICAgMDAgLSA5OVxuICAgICAgICBtYXRjaDMgPSAvXFxkezN9LywgLy8gICAgIDAwMCAtIDk5OVxuICAgICAgICBtYXRjaDQgPSAvXFxkezR9LywgLy8gICAgMDAwMCAtIDk5OTlcbiAgICAgICAgbWF0Y2g2ID0gL1srLV0/XFxkezZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzIgPSAvXFxkXFxkPy8sIC8vICAgICAgIDAgLSA5OVxuICAgICAgICBtYXRjaDN0bzQgPSAvXFxkXFxkXFxkXFxkPy8sIC8vICAgICA5OTkgLSA5OTk5XG4gICAgICAgIG1hdGNoNXRvNiA9IC9cXGRcXGRcXGRcXGRcXGRcXGQ/LywgLy8gICA5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzMgPSAvXFxkezEsM30vLCAvLyAgICAgICAwIC0gOTk5XG4gICAgICAgIG1hdGNoMXRvNCA9IC9cXGR7MSw0fS8sIC8vICAgICAgIDAgLSA5OTk5XG4gICAgICAgIG1hdGNoMXRvNiA9IC9bKy1dP1xcZHsxLDZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaFVuc2lnbmVkID0gL1xcZCsvLCAvLyAgICAgICAwIC0gaW5mXG4gICAgICAgIG1hdGNoU2lnbmVkID0gL1srLV0/XFxkKy8sIC8vICAgIC1pbmYgLSBpbmZcbiAgICAgICAgbWF0Y2hPZmZzZXQgPSAvWnxbKy1dXFxkXFxkOj9cXGRcXGQvZ2ksIC8vICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFNob3J0T2Zmc2V0ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vZ2ksIC8vICswMCAtMDAgKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoVGltZXN0YW1wID0gL1srLV0/XFxkKyhcXC5cXGR7MSwzfSk/LywgLy8gMTIzNDU2Nzg5IDEyMzQ1Njc4OS4xMjNcbiAgICAgICAgLy8gYW55IHdvcmQgKG9yIHR3bykgY2hhcmFjdGVycyBvciBudW1iZXJzIGluY2x1ZGluZyB0d28vdGhyZWUgd29yZCBtb250aCBpbiBhcmFiaWMuXG4gICAgICAgIC8vIGluY2x1ZGVzIHNjb3R0aXNoIGdhZWxpYyB0d28gd29yZCBhbmQgaHlwaGVuYXRlZCBtb250aHNcbiAgICAgICAgbWF0Y2hXb3JkID1cbiAgICAgICAgICAgIC9bMC05XXswLDI1Nn1bJ2EtelxcdTAwQTAtXFx1MDVGRlxcdTA3MDAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkYwN1xcdUZGMTAtXFx1RkZFRl17MSwyNTZ9fFtcXHUwNjAwLVxcdTA2RkZcXC9dezEsMjU2fShcXHMqP1tcXHUwNjAwLVxcdTA2RkZdezEsMjU2fSl7MSwyfS9pLFxuICAgICAgICBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvID0gL15bMS05XVxcZD8vLCAvLyAgICAgICAgIDEtOTlcbiAgICAgICAgbWF0Y2gxdG8ySGFzWmVybyA9IC9eKFsxLTldXFxkfFxcZCkvLCAvLyAgICAgICAgICAgMC05OVxuICAgICAgICByZWdleGVzO1xuXG4gICAgcmVnZXhlcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUmVnZXhUb2tlbih0b2tlbiwgcmVnZXgsIHN0cmljdFJlZ2V4KSB7XG4gICAgICAgIHJlZ2V4ZXNbdG9rZW5dID0gaXNGdW5jdGlvbihyZWdleClcbiAgICAgICAgICAgID8gcmVnZXhcbiAgICAgICAgICAgIDogZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXNTdHJpY3QgJiYgc3RyaWN0UmVnZXggPyBzdHJpY3RSZWdleCA6IHJlZ2V4O1xuICAgICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcChyZWdleGVzLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHVuZXNjYXBlRm9ybWF0KHRva2VuKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVnZXhlc1t0b2tlbl0oY29uZmlnLl9zdHJpY3QsIGNvbmZpZy5fbG9jYWxlKTtcbiAgICB9XG5cbiAgICAvLyBDb2RlIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTYxNDkzL2lzLXRoZXJlLWEtcmVnZXhwLWVzY2FwZS1mdW5jdGlvbi1pbi1qYXZhc2NyaXB0XG4gICAgZnVuY3Rpb24gdW5lc2NhcGVGb3JtYXQocykge1xuICAgICAgICByZXR1cm4gcmVnZXhFc2NhcGUoXG4gICAgICAgICAgICBzXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xcXFwnLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgL1xcXFwoXFxbKXxcXFxcKFxcXSl8XFxbKFteXFxdXFxbXSopXFxdfFxcXFwoLikvZyxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKG1hdGNoZWQsIHAxLCBwMiwgcDMsIHA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcDEgfHwgcDIgfHwgcDMgfHwgcDQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVnZXhFc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNGbG9vcihudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIC8vIC0wIC0+IDBcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKSB8fCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSW50KGFyZ3VtZW50Rm9yQ29lcmNpb24pIHtcbiAgICAgICAgdmFyIGNvZXJjZWROdW1iZXIgPSArYXJndW1lbnRGb3JDb2VyY2lvbixcbiAgICAgICAgICAgIHZhbHVlID0gMDtcblxuICAgICAgICBpZiAoY29lcmNlZE51bWJlciAhPT0gMCAmJiBpc0Zpbml0ZShjb2VyY2VkTnVtYmVyKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBhYnNGbG9vcihjb2VyY2VkTnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5zID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGZ1bmMgPSBjYWxsYmFjayxcbiAgICAgICAgICAgIHRva2VuTGVuO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdG9rZW4gPSBbdG9rZW5dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc051bWJlcihjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbY2FsbGJhY2tdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0b2tlbkxlbiA9IHRva2VuLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2VuTGVuOyBpKyspIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbltpXV0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1BhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGFkZFBhcnNlVG9rZW4odG9rZW4sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIGNvbmZpZy5fdyA9IGNvbmZpZy5fdyB8fCB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGlucHV0LCBjb25maWcuX3csIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgaW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBoYXNPd25Qcm9wKHRva2VucywgdG9rZW4pKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5dKGlucHV0LCBjb25maWcuX2EsIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCkgfHwgeWVhciAlIDQwMCA9PT0gMDtcbiAgICB9XG5cbiAgICB2YXIgWUVBUiA9IDAsXG4gICAgICAgIE1PTlRIID0gMSxcbiAgICAgICAgREFURSA9IDIsXG4gICAgICAgIEhPVVIgPSAzLFxuICAgICAgICBNSU5VVEUgPSA0LFxuICAgICAgICBTRUNPTkQgPSA1LFxuICAgICAgICBNSUxMSVNFQ09ORCA9IDYsXG4gICAgICAgIFdFRUsgPSA3LFxuICAgICAgICBXRUVLREFZID0gODtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdZJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgeSA9IHRoaXMueWVhcigpO1xuICAgICAgICByZXR1cm4geSA8PSA5OTk5ID8gemVyb0ZpbGwoeSwgNCkgOiAnKycgKyB5O1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWScsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWScsIDRdLCAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVknLCA1XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZWScsIDYsIHRydWVdLCAwLCAneWVhcicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWScsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdZWScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydZWVlZWScsICdZWVlZWVknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbignWVlZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPVxuICAgICAgICAgICAgaW5wdXQubGVuZ3RoID09PSAyID8gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpIDogdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBkYXlzSW5ZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIoeWVhcikgPyAzNjYgOiAzNjU7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0b0ludChpbnB1dCkgKyAodG9JbnQoaW5wdXQpID4gNjggPyAxOTAwIDogMjAwMCk7XG4gICAgfTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRZZWFyID0gbWFrZUdldFNldCgnRnVsbFllYXInLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGdldElzTGVhcFllYXIoKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHRoaXMueWVhcigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0U2V0KHVuaXQsIGtlZXBUaW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2V0JDEodGhpcywgdW5pdCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0KG1vbSwgdW5pdCkge1xuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZCA9IG1vbS5fZCxcbiAgICAgICAgICAgIGlzVVRDID0gbW9tLl9pc1VUQztcblxuICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgICAgICAgIGNhc2UgJ01pbGxpc2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENNaWxsaXNlY29uZHMoKSA6IGQuZ2V0TWlsbGlzZWNvbmRzKCk7XG4gICAgICAgICAgICBjYXNlICdTZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ1NlY29uZHMoKSA6IGQuZ2V0U2Vjb25kcygpO1xuICAgICAgICAgICAgY2FzZSAnTWludXRlcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENNaW51dGVzKCkgOiBkLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgICAgIGNhc2UgJ0hvdXJzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ0hvdXJzKCkgOiBkLmdldEhvdXJzKCk7XG4gICAgICAgICAgICBjYXNlICdEYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ0RhdGUoKSA6IGQuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgY2FzZSAnRGF5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ0RheSgpIDogZC5nZXREYXkoKTtcbiAgICAgICAgICAgIGNhc2UgJ01vbnRoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ01vbnRoKCkgOiBkLmdldE1vbnRoKCk7XG4gICAgICAgICAgICBjYXNlICdGdWxsWWVhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENGdWxsWWVhcigpIDogZC5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gTmFOOyAvLyBKdXN0IGluIGNhc2VcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldCQxKG1vbSwgdW5pdCwgdmFsdWUpIHtcbiAgICAgICAgdmFyIGQsIGlzVVRDLCB5ZWFyLCBtb250aCwgZGF0ZTtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkgfHwgaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBkID0gbW9tLl9kO1xuICAgICAgICBpc1VUQyA9IG1vbS5faXNVVEM7XG5cbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdNaWxsaXNlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQ1xuICAgICAgICAgICAgICAgICAgICA/IGQuc2V0VVRDTWlsbGlzZWNvbmRzKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA6IGQuc2V0TWlsbGlzZWNvbmRzKHZhbHVlKSk7XG4gICAgICAgICAgICBjYXNlICdTZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ1NlY29uZHModmFsdWUpIDogZC5zZXRTZWNvbmRzKHZhbHVlKSk7XG4gICAgICAgICAgICBjYXNlICdNaW51dGVzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ01pbnV0ZXModmFsdWUpIDogZC5zZXRNaW51dGVzKHZhbHVlKSk7XG4gICAgICAgICAgICBjYXNlICdIb3Vycyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENIb3Vycyh2YWx1ZSkgOiBkLnNldEhvdXJzKHZhbHVlKSk7XG4gICAgICAgICAgICBjYXNlICdEYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ0RhdGUodmFsdWUpIDogZC5zZXREYXRlKHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBjYXNlICdEYXknOiAvLyBOb3QgcmVhbFxuICAgICAgICAgICAgLy8gICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENEYXkodmFsdWUpIDogZC5zZXREYXkodmFsdWUpKTtcbiAgICAgICAgICAgIC8vIGNhc2UgJ01vbnRoJzogLy8gTm90IHVzZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHBhc3MgdHdvIHZhcmlhYmxlc1xuICAgICAgICAgICAgLy8gICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDTW9udGgodmFsdWUpIDogZC5zZXRNb250aCh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnRnVsbFllYXInOlxuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBTZWUgYmVsb3cgLi4uXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gSnVzdCBpbiBjYXNlXG4gICAgICAgIH1cblxuICAgICAgICB5ZWFyID0gdmFsdWU7XG4gICAgICAgIG1vbnRoID0gbW9tLm1vbnRoKCk7XG4gICAgICAgIGRhdGUgPSBtb20uZGF0ZSgpO1xuICAgICAgICBkYXRlID0gZGF0ZSA9PT0gMjkgJiYgbW9udGggPT09IDEgJiYgIWlzTGVhcFllYXIoeWVhcikgPyAyOCA6IGRhdGU7XG4gICAgICAgIHZvaWQgKGlzVVRDXG4gICAgICAgICAgICA/IGQuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgsIGRhdGUpXG4gICAgICAgICAgICA6IGQuc2V0RnVsbFllYXIoeWVhciwgbW9udGgsIGRhdGUpKTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzdHJpbmdHZXQodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RyaW5nU2V0KHVuaXRzLCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHVuaXRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVPYmplY3RVbml0cyh1bml0cyk7XG4gICAgICAgICAgICB2YXIgcHJpb3JpdGl6ZWQgPSBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzKSxcbiAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgIHByaW9yaXRpemVkTGVuID0gcHJpb3JpdGl6ZWQubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHByaW9yaXRpemVkTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzW3ByaW9yaXRpemVkW2ldLnVuaXRdKHVuaXRzW3ByaW9yaXRpemVkW2ldLnVuaXRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb2QobiwgeCkge1xuICAgICAgICByZXR1cm4gKChuICUgeCkgKyB4KSAlIHg7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4T2Y7XG5cbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIHtcbiAgICAgICAgaW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGluZGV4T2YgPSBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgLy8gSSBrbm93XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbaV0gPT09IG8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICAgIGlmIChpc05hTih5ZWFyKSB8fCBpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1vZE1vbnRoID0gbW9kKG1vbnRoLCAxMik7XG4gICAgICAgIHllYXIgKz0gKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG4gICAgICAgIHJldHVybiBtb2RNb250aCA9PT0gMVxuICAgICAgICAgICAgPyBpc0xlYXBZZWFyKHllYXIpXG4gICAgICAgICAgICAgICAgPyAyOVxuICAgICAgICAgICAgICAgIDogMjhcbiAgICAgICAgICAgIDogMzEgLSAoKG1vZE1vbnRoICUgNykgJSAyKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignTScsIFsnTU0nLCAyXSwgJ01vJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aCgpICsgMTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ00nLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ00nLCAnTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSB0b0ludChpbnB1dCkgLSAxO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ01NTScsICdNTU1NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1vbnRoID0gY29uZmlnLl9sb2NhbGUubW9udGhzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGEgbW9udGggbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkLlxuICAgICAgICBpZiAobW9udGggIT0gbnVsbCkge1xuICAgICAgICAgICAgYXJyYXlbTU9OVEhdID0gbW9udGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkTW9udGggPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNb250aHMgPVxuICAgICAgICAgICAgJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0ID1cbiAgICAgICAgICAgICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVCA9IC9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/LyxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRNb250aHNSZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRocyhtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1snc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzW20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzW1xuICAgICAgICAgICAgICAgICAgKHRoaXMuX21vbnRocy5pc0Zvcm1hdCB8fCBNT05USFNfSU5fRk9STUFUKS50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1Nob3J0KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0WydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0W20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbXG4gICAgICAgICAgICAgICAgICBNT05USFNfSU5fRk9STUFULnRlc3QoZm9ybWF0KSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSBtb250aE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZFxuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRocyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UuY2FsbCh0aGlzLCBtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IGFkZCBzb3J0aW5nXG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXJcbiAgICAgICAgLy8gc2VlIHNvcnRpbmcgaW4gY29tcHV0ZU1vbnRoc1BhcnNlXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgIXRoaXMuX21vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKSArICd8XicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX21vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc2V0TW9udGgobW9tLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IEFub3RoZXIgc2lsZW50IGZhaWx1cmU/XG4gICAgICAgICAgICAgICAgaWYgKCFpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbW9udGggPSB2YWx1ZSxcbiAgICAgICAgICAgIGRhdGUgPSBtb20uZGF0ZSgpO1xuXG4gICAgICAgIGRhdGUgPSBkYXRlIDwgMjkgPyBkYXRlIDogTWF0aC5taW4oZGF0ZSwgZGF5c0luTW9udGgobW9tLnllYXIoKSwgbW9udGgpKTtcbiAgICAgICAgdm9pZCAobW9tLl9pc1VUQ1xuICAgICAgICAgICAgPyBtb20uX2Quc2V0VVRDTW9udGgobW9udGgsIGRhdGUpXG4gICAgICAgICAgICA6IG1vbS5fZC5zZXRNb250aChtb250aCwgZGF0ZSkpO1xuICAgICAgICByZXR1cm4gbW9tO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldE1vbnRoKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBzZXRNb250aCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgJ01vbnRoJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXlzSW5Nb250aCgpIHtcbiAgICAgICAgcmV0dXJuIGRheXNJbk1vbnRoKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSBkZWZhdWx0TW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gZGVmYXVsdE1vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlTW9udGhzUGFyc2UoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaG9ydFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbG9uZ1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBzaG9ydFAsXG4gICAgICAgICAgICBsb25nUDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBzaG9ydFAgPSByZWdleEVzY2FwZSh0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgICAgIGxvbmdQID0gcmVnZXhFc2NhcGUodGhpcy5tb250aHMobW9tLCAnJykpO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaChzaG9ydFApO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKGxvbmdQKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ1ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChzaG9ydFApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG5cbiAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIGxvbmdQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpIHtcbiAgICAgICAgLy8gY2FuJ3QganVzdCBhcHBseSgpIHRvIGNyZWF0ZSBhIGRhdGU6XG4gICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xODEzNDhcbiAgICAgICAgdmFyIGRhdGU7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSArIDQwMCwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0RnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQ0RhdGUoeSkge1xuICAgICAgICB2YXIgZGF0ZSwgYXJncztcbiAgICAgICAgLy8gdGhlIERhdGUuVVRDIGZ1bmN0aW9uIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSB5ICsgNDAwO1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3MpKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0LW9mLWZpcnN0LXdlZWsgLSBzdGFydC1vZi15ZWFyXG4gICAgZnVuY3Rpb24gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciAvLyBmaXJzdC13ZWVrIGRheSAtLSB3aGljaCBqYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayAoNCBmb3IgaXNvLCAxIGZvciBvdGhlcilcbiAgICAgICAgICAgIGZ3ZCA9IDcgKyBkb3cgLSBkb3ksXG4gICAgICAgICAgICAvLyBmaXJzdC13ZWVrIGRheSBsb2NhbCB3ZWVrZGF5IC0tIHdoaWNoIGxvY2FsIHdlZWtkYXkgaXMgZndkXG4gICAgICAgICAgICBmd2RsdyA9ICg3ICsgY3JlYXRlVVRDRGF0ZSh5ZWFyLCAwLCBmd2QpLmdldFVUQ0RheSgpIC0gZG93KSAlIDc7XG5cbiAgICAgICAgcmV0dXJuIC1md2RsdyArIGZ3ZCAtIDE7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZSNDYWxjdWxhdGluZ19hX2RhdGVfZ2l2ZW5fdGhlX3llYXIuMkNfd2Vla19udW1iZXJfYW5kX3dlZWtkYXlcbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla3MoeWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGxvY2FsV2Vla2RheSA9ICg3ICsgd2Vla2RheSAtIGRvdykgJSA3LFxuICAgICAgICAgICAgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXlPZlllYXIgPSAxICsgNyAqICh3ZWVrIC0gMSkgKyBsb2NhbFdlZWtkYXkgKyB3ZWVrT2Zmc2V0LFxuICAgICAgICAgICAgcmVzWWVhcixcbiAgICAgICAgICAgIHJlc0RheU9mWWVhcjtcblxuICAgICAgICBpZiAoZGF5T2ZZZWFyIDw9IDApIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyIC0gMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheXNJblllYXIocmVzWWVhcikgKyBkYXlPZlllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyKSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgKyAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyIC0gZGF5c0luWWVhcih5ZWFyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgICAgICBkYXlPZlllYXI6IHJlc0RheU9mWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrT2ZZZWFyKG1vbSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQobW9tLnllYXIoKSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2VlayA9IE1hdGguZmxvb3IoKG1vbS5kYXlPZlllYXIoKSAtIHdlZWtPZmZzZXQgLSAxKSAvIDcpICsgMSxcbiAgICAgICAgICAgIHJlc1dlZWssXG4gICAgICAgICAgICByZXNZZWFyO1xuXG4gICAgICAgIGlmICh3ZWVrIDwgMSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgLSAxO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgKyB3ZWVrc0luWWVhcihyZXNZZWFyLCBkb3csIGRveSk7XG4gICAgICAgIH0gZWxzZSBpZiAod2VlayA+IHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KSkge1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgLSB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSk7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdlZWs6IHJlc1dlZWssXG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtzSW5ZZWFyKHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWtPZmZzZXROZXh0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIgKyAxLCBkb3csIGRveSk7XG4gICAgICAgIHJldHVybiAoZGF5c0luWWVhcih5ZWFyKSAtIHdlZWtPZmZzZXQgKyB3ZWVrT2Zmc2V0TmV4dCkgLyA3O1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd3JywgWyd3dycsIDJdLCAnd28nLCAnd2VlaycpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdXJywgWydXVycsIDJdLCAnV28nLCAnaXNvV2VlaycpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigndycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignd3cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignVycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignV1cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihcbiAgICAgICAgWyd3JywgJ3d3JywgJ1cnLCAnV1cnXSxcbiAgICAgICAgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAxKV0gPSB0b0ludChpbnB1dCk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vlayhtb20pIHtcbiAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIobW9tLCB0aGlzLl93ZWVrLmRvdywgdGhpcy5fd2Vlay5kb3kpLndlZWs7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrID0ge1xuICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZldlZWsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG95O1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB0aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHdlZWtPZlllYXIodGhpcywgMSwgNCkud2VlaztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkJywgMCwgJ2RvJywgJ2RheScpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZScsIDAsIDAsICd3ZWVrZGF5Jyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ0UnLCAwLCAwLCAnaXNvV2Vla2RheScpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignZCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignRScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZGQnLCAnZGRkJywgJ2RkZGQnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gY29uZmlnLl9sb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGdldCBhIHdlZWtkYXkgbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkXG4gICAgICAgIGlmICh3ZWVrZGF5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHdlZWsuZCA9IHdlZWtkYXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkV2Vla2RheSA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2QnLCAnZScsICdFJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmFOKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCA9IGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpICUgNyB8fCA3O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc05hTihpbnB1dCkgPyBudWxsIDogaW5wdXQ7XG4gICAgfVxuXG4gICAgLy8gTE9DQUxFU1xuICAgIGZ1bmN0aW9uIHNoaWZ0V2Vla2RheXMod3MsIG4pIHtcbiAgICAgICAgcmV0dXJuIHdzLnNsaWNlKG4sIDcpLmNvbmNhdCh3cy5zbGljZSgwLCBuKSk7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrZGF5cyA9XG4gICAgICAgICAgICAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0ID0gJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluID0gJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzTWluUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5cyhtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIHdlZWtkYXlzID0gaXNBcnJheSh0aGlzLl93ZWVrZGF5cylcbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNcbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNbXG4gICAgICAgICAgICAgICAgICBtICYmIG0gIT09IHRydWUgJiYgdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF07XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXMod2Vla2RheXMsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gd2Vla2RheXNbbS5kYXkoKV1cbiAgICAgICAgICAgICAgOiB3ZWVrZGF5cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1Nob3J0KG0pIHtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c1Nob3J0LCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRbbS5kYXkoKV1cbiAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1Nob3J0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzTWluKG0pIHtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c01pbiwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c01pblttLmRheSgpXVxuICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlJDEod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSB3ZWVrZGF5TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzTWluKFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5cyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNQYXJzZSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlJDEuY2FsbCh0aGlzLCB3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcblxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzKG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fd2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkYXkgPSBnZXQodGhpcywgJ0RheScpO1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW5wdXQgPSBwYXJzZVdlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChpbnB1dCAtIGRheSwgJ2QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRMb2NhbGVEYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gKHRoaXMuZGF5KCkgKyA3IC0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSAlIDc7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2Vla2RheSA6IHRoaXMuYWRkKGlucHV0IC0gd2Vla2RheSwgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09EYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmVoYXZlcyB0aGUgc2FtZSBhcyBtb21lbnQjZGF5IGV4Y2VwdFxuICAgICAgICAvLyBhcyBhIGdldHRlciwgcmV0dXJucyA3IGluc3RlYWQgb2YgMCAoMS03IHJhbmdlIGluc3RlYWQgb2YgMC02KVxuICAgICAgICAvLyBhcyBhIHNldHRlciwgc3VuZGF5IHNob3VsZCBiZWxvbmcgdG8gdGhlIHByZXZpb3VzIHdlZWsuXG5cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciB3ZWVrZGF5ID0gcGFyc2VJc29XZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkodGhpcy5kYXkoKSAlIDcgPyB3ZWVrZGF5IDogd2Vla2RheSAtIDcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KCkgfHwgNztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBkZWZhdWx0V2Vla2RheXNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c01pblJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVXZWVrZGF5c1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluUGllY2VzID0gW10sXG4gICAgICAgICAgICBzaG9ydFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbG9uZ1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBtaW5wLFxuICAgICAgICAgICAgc2hvcnRwLFxuICAgICAgICAgICAgbG9uZ3A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgbWlucCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykpO1xuICAgICAgICAgICAgc2hvcnRwID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgICAgIGxvbmdwID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5cyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaW5QaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSB3ZWVrZGF5IChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgbWluUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIGxvbmdQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIG1pblBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBoRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpICUgMTIgfHwgMTI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga0Zvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSB8fCAyNDtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSCcsIFsnSEgnLCAyXSwgMCwgJ2hvdXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignaCcsIFsnaGgnLCAyXSwgMCwgaEZvcm1hdCk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2snLCBbJ2trJywgMl0sIDAsIGtGb3JtYXQpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgaEZvcm1hdC5hcHBseSh0aGlzKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIGhGb3JtYXQuYXBwbHkodGhpcykgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0htbScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgdGhpcy5ob3VycygpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJycgK1xuICAgICAgICAgICAgdGhpcy5ob3VycygpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtKHRva2VuLCBsb3dlcmNhc2UpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbShcbiAgICAgICAgICAgICAgICB0aGlzLmhvdXJzKCksXG4gICAgICAgICAgICAgICAgdGhpcy5taW51dGVzKCksXG4gICAgICAgICAgICAgICAgbG93ZXJjYXNlXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBtZXJpZGllbSgnYScsIHRydWUpO1xuICAgIG1lcmlkaWVtKCdBJywgZmFsc2UpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgZnVuY3Rpb24gbWF0Y2hNZXJpZGllbShpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX21lcmlkaWVtUGFyc2U7XG4gICAgfVxuXG4gICAgYWRkUmVnZXhUb2tlbignYScsIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdIJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJIYXNaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdoJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdrJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdISCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdoaCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdraycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbScsIG1hdGNoM3RvNCk7XG4gICAgYWRkUmVnZXhUb2tlbignaG1tc3MnLCBtYXRjaDV0bzYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbScsIG1hdGNoM3RvNCk7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tc3MnLCBtYXRjaDV0bzYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0gnLCAnSEgnXSwgSE9VUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2snLCAna2snXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBrSW5wdXQgPSB0b0ludChpbnB1dCk7XG4gICAgICAgIGFycmF5W0hPVVJdID0ga0lucHV0ID09PSAyNCA/IDAgOiBrSW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2EnLCAnQSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9pc1BtID0gY29uZmlnLl9sb2NhbGUuaXNQTShpbnB1dCk7XG4gICAgICAgIGNvbmZpZy5fbWVyaWRpZW0gPSBpbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaCcsICdoaCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ2htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ2htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNCxcbiAgICAgICAgICAgIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVJc1BNKGlucHV0KSB7XG4gICAgICAgIC8vIElFOCBRdWlya3MgTW9kZSAmIElFNyBTdGFuZGFyZHMgTW9kZSBkbyBub3QgYWxsb3cgYWNjZXNzaW5nIHN0cmluZ3MgbGlrZSBhcnJheXNcbiAgICAgICAgLy8gVXNpbmcgY2hhckF0IHNob3VsZCBiZSBtb3JlIGNvbXBhdGlibGUuXG4gICAgICAgIHJldHVybiAoaW5wdXQgKyAnJykudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkgPT09ICdwJztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UgPSAvW2FwXVxcLj9tP1xcLj8vaSxcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgaG91ciBzaG91bGQga2VlcCB0aGUgdGltZSwgYmVjYXVzZSB0aGUgdXNlciBleHBsaWNpdGx5XG4gICAgICAgIC8vIHNwZWNpZmllZCB3aGljaCBob3VyIHRoZXkgd2FudC4gU28gdHJ5aW5nIHRvIG1haW50YWluIHRoZSBzYW1lIGhvdXIgKGluXG4gICAgICAgIC8vIGEgbmV3IHRpbWV6b25lKSBtYWtlcyBzZW5zZS4gQWRkaW5nL3N1YnRyYWN0aW5nIGhvdXJzIGRvZXMgbm90IGZvbGxvd1xuICAgICAgICAvLyB0aGlzIHJ1bGUuXG4gICAgICAgIGdldFNldEhvdXIgPSBtYWtlR2V0U2V0KCdIb3VycycsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlTWVyaWRpZW0oaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3BtJyA6ICdQTSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdhbScgOiAnQU0nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJhc2VDb25maWcgPSB7XG4gICAgICAgIGNhbGVuZGFyOiBkZWZhdWx0Q2FsZW5kYXIsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQsXG4gICAgICAgIGludmFsaWREYXRlOiBkZWZhdWx0SW52YWxpZERhdGUsXG4gICAgICAgIG9yZGluYWw6IGRlZmF1bHRPcmRpbmFsLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiBkZWZhdWx0UmVsYXRpdmVUaW1lLFxuXG4gICAgICAgIG1vbnRoczogZGVmYXVsdExvY2FsZU1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCxcblxuICAgICAgICB3ZWVrOiBkZWZhdWx0TG9jYWxlV2VlayxcblxuICAgICAgICB3ZWVrZGF5czogZGVmYXVsdExvY2FsZVdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCxcblxuICAgICAgICBtZXJpZGllbVBhcnNlOiBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSxcbiAgICB9O1xuXG4gICAgLy8gaW50ZXJuYWwgc3RvcmFnZSBmb3IgbG9jYWxlIGNvbmZpZyBmaWxlc1xuICAgIHZhciBsb2NhbGVzID0ge30sXG4gICAgICAgIGxvY2FsZUZhbWlsaWVzID0ge30sXG4gICAgICAgIGdsb2JhbExvY2FsZTtcblxuICAgIGZ1bmN0aW9uIGNvbW1vblByZWZpeChhcnIxLCBhcnIyKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbWlubCA9IE1hdGgubWluKGFycjEubGVuZ3RoLCBhcnIyLmxlbmd0aCk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtaW5sOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChhcnIxW2ldICE9PSBhcnIyW2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbmw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ID8ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnXycsICctJykgOiBrZXk7XG4gICAgfVxuXG4gICAgLy8gcGljayB0aGUgbG9jYWxlIGZyb20gdGhlIGFycmF5XG4gICAgLy8gdHJ5IFsnZW4tYXUnLCAnZW4tZ2InXSBhcyAnZW4tYXUnLCAnZW4tZ2InLCAnZW4nLCBhcyBpbiBtb3ZlIHRocm91Z2ggdGhlIGxpc3QgdHJ5aW5nIGVhY2hcbiAgICAvLyBzdWJzdHJpbmcgZnJvbSBtb3N0IHNwZWNpZmljIHRvIGxlYXN0LCBidXQgbW92ZSB0byB0aGUgbmV4dCBhcnJheSBpdGVtIGlmIGl0J3MgYSBtb3JlIHNwZWNpZmljIHZhcmlhbnQgdGhhbiB0aGUgY3VycmVudCByb290XG4gICAgZnVuY3Rpb24gY2hvb3NlTG9jYWxlKG5hbWVzKSB7XG4gICAgICAgIHZhciBpID0gMCxcbiAgICAgICAgICAgIGosXG4gICAgICAgICAgICBuZXh0LFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgc3BsaXQ7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBuYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNwbGl0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2ldKS5zcGxpdCgnLScpO1xuICAgICAgICAgICAgaiA9IHNwbGl0Lmxlbmd0aDtcbiAgICAgICAgICAgIG5leHQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaSArIDFdKTtcbiAgICAgICAgICAgIG5leHQgPSBuZXh0ID8gbmV4dC5zcGxpdCgnLScpIDogbnVsbDtcbiAgICAgICAgICAgIHdoaWxlIChqID4gMCkge1xuICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoc3BsaXQuc2xpY2UoMCwgaikuam9pbignLScpKTtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbmV4dCAmJlxuICAgICAgICAgICAgICAgICAgICBuZXh0Lmxlbmd0aCA+PSBqICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vblByZWZpeChzcGxpdCwgbmV4dCkgPj0gaiAtIDFcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgLy90aGUgbmV4dCBhcnJheSBpdGVtIGlzIGJldHRlciB0aGFuIGEgc2hhbGxvd2VyIHN1YnN0cmluZyBvZiB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbGVOYW1lU2FuZShuYW1lKSB7XG4gICAgICAgIC8vIFByZXZlbnQgbmFtZXMgdGhhdCBsb29rIGxpa2UgZmlsZXN5c3RlbSBwYXRocywgaS5lIGNvbnRhaW4gJy8nIG9yICdcXCdcbiAgICAgICAgLy8gRW5zdXJlIG5hbWUgaXMgYXZhaWxhYmxlIGFuZCBmdW5jdGlvbiByZXR1cm5zIGJvb2xlYW5cbiAgICAgICAgcmV0dXJuICEhKG5hbWUgJiYgbmFtZS5tYXRjaCgnXlteL1xcXFxcXFxcXSokJykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWRMb2NhbGUobmFtZSkge1xuICAgICAgICB2YXIgb2xkTG9jYWxlID0gbnVsbCxcbiAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlO1xuICAgICAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byByZWdpc3RlciBhbmQgbG9hZCBhbGwgdGhlIGxvY2FsZXMgaW4gTm9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBtb2R1bGUgJiZcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzICYmXG4gICAgICAgICAgICBpc0xvY2FsZU5hbWVTYW5lKG5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvbGRMb2NhbGUgPSBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUgPSByZXF1aXJlO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlKCcuL2xvY2FsZS8nICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG9sZExvY2FsZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFyayBhcyBub3QgZm91bmQgdG8gYXZvaWQgcmVwZWF0aW5nIGV4cGVuc2l2ZSBmaWxlIHJlcXVpcmUgY2FsbCBjYXVzaW5nIGhpZ2ggQ1BVXG4gICAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gZmluZCBlbi1VUywgZW5fVVMsIGVuLXVzIGZvciBldmVyeSBmb3JtYXQgY2FsbFxuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBudWxsOyAvLyBudWxsIG1lYW5zIG5vdCBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2FkIGxvY2FsZSBhbmQgdGhlbiBzZXQgdGhlIGdsb2JhbCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBmdW5jdGlvbiBnZXRTZXRHbG9iYWxMb2NhbGUoa2V5LCB2YWx1ZXMpIHtcbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGVmaW5lTG9jYWxlKGtleSwgdmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBtb21lbnQuZHVyYXRpb24uX2xvY2FsZSA9IG1vbWVudC5fbG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgICAgICBnbG9iYWxMb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgICAgICAvL3dhcm4gdXNlciBpZiBhcmd1bWVudHMgYXJlIHBhc3NlZCBidXQgdGhlIGxvY2FsZSBjb3VsZCBub3QgYmUgc2V0XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgICAgICdMb2NhbGUgJyArIGtleSArICcgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PydcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmluZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgJ2RlZmluZUxvY2FsZU92ZXJyaWRlJyxcbiAgICAgICAgICAgICAgICAgICAgJ3VzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2FuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbbmFtZV0uX2NvbmZpZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShjb25maWcucGFyZW50TG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbmV3IExvY2FsZShtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpKTtcblxuICAgICAgICAgICAgaWYgKGxvY2FsZUZhbWlsaWVzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbbmFtZV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBkZWZpbmVMb2NhbGUoeC5uYW1lLCB4LmNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgbG9jYWxlIEFGVEVSIGFsbCBjaGlsZCBsb2NhbGVzIGhhdmUgYmVlblxuICAgICAgICAgICAgLy8gY3JlYXRlZCwgc28gd2Ugd29uJ3QgZW5kIHVwIHdpdGggdGhlIGNoaWxkIGxvY2FsZSBzZXQuXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdXNlZnVsIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwgJiYgbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBjaGlsZCBsb2NhbGUgaW4tcGxhY2UgdG8gYXZvaWQgbWVtb3J5LWxlYWtzXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXS5zZXQobWVyZ2VDb25maWdzKGxvY2FsZXNbbmFtZV0uX2NvbmZpZywgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE1FUkdFXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlID0gbG9hZExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gdG1wTG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZUxvY2FsZSBpcyBjYWxsZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgYWJiciBzbyBpdCB3aWxsIGhhdmUgYSBuYW1lIChnZXR0ZXJzIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAvLyB1bmRlZmluZWQgb3RoZXJ3aXNlKS5cbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBuZXcgTG9jYWxlKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgbG9jYWxlLnBhcmVudExvY2FsZSA9IGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBwYXNzIG51bGwgZm9yIGNvbmZpZyB0byB1bnVwZGF0ZSwgdXNlZnVsIGZvciB0ZXN0c1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGdldFNldEdsb2JhbExvY2FsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBsb2NhbGUgZGF0YVxuICAgIGZ1bmN0aW9uIGdldExvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIGxvY2FsZTtcblxuICAgICAgICBpZiAoa2V5ICYmIGtleS5fbG9jYWxlICYmIGtleS5fbG9jYWxlLl9hYmJyKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIC8vc2hvcnQtY2lyY3VpdCBldmVyeXRoaW5nIGVsc2VcbiAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5ID0gW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hvb3NlTG9jYWxlKGtleSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdExvY2FsZXMoKSB7XG4gICAgICAgIHJldHVybiBrZXlzKGxvY2FsZXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrT3ZlcmZsb3cobSkge1xuICAgICAgICB2YXIgb3ZlcmZsb3csXG4gICAgICAgICAgICBhID0gbS5fYTtcblxuICAgICAgICBpZiAoYSAmJiBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPT09IC0yKSB7XG4gICAgICAgICAgICBvdmVyZmxvdyA9XG4gICAgICAgICAgICAgICAgYVtNT05USF0gPCAwIHx8IGFbTU9OVEhdID4gMTFcbiAgICAgICAgICAgICAgICAgICAgPyBNT05USFxuICAgICAgICAgICAgICAgICAgICA6IGFbREFURV0gPCAxIHx8IGFbREFURV0gPiBkYXlzSW5Nb250aChhW1lFQVJdLCBhW01PTlRIXSlcbiAgICAgICAgICAgICAgICAgICAgICA/IERBVEVcbiAgICAgICAgICAgICAgICAgICAgICA6IGFbSE9VUl0gPCAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFbSE9VUl0gPiAyNCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhW01JTlVURV0gIT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW1NFQ09ORF0gIT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW01JTExJU0VDT05EXSAhPT0gMCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IEhPVVJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYVtNSU5VVEVdIDwgMCB8fCBhW01JTlVURV0gPiA1OVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1JTlVURVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFbU0VDT05EXSA8IDAgfHwgYVtTRUNPTkRdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFNFQ09ORFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYVtNSUxMSVNFQ09ORF0gPCAwIHx8IGFbTUlMTElTRUNPTkRdID4gOTk5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1JTExJU0VDT05EXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC0xO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd0RheU9mWWVhciAmJlxuICAgICAgICAgICAgICAgIChvdmVyZmxvdyA8IFlFQVIgfHwgb3ZlcmZsb3cgPiBEQVRFKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBEQVRFO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrcyAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtkYXkgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLREFZO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPSBvdmVyZmxvdztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIGlzbyA4NjAxIHJlZ2V4XG4gICAgLy8gMDAwMC0wMC0wMCAwMDAwLVcwMCBvciAwMDAwLVcwMC0wICsgVCArIDAwIG9yIDAwOjAwIG9yIDAwOjAwOjAwIG9yIDAwOjAwOjAwLjAwMCArICswMDowMCBvciArMDAwMCBvciArMDApXG4gICAgdmFyIGV4dGVuZGVkSXNvUmVnZXggPVxuICAgICAgICAgICAgL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KS0oPzpcXGRcXGQtXFxkXFxkfFdcXGRcXGQtXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZCkpKD86KFR8ICkoXFxkXFxkKD86OlxcZFxcZCg/OjpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIGJhc2ljSXNvUmVnZXggPVxuICAgICAgICAgICAgL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KSg/OlxcZFxcZFxcZFxcZHxXXFxkXFxkXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZHwpKSg/OihUfCApKFxcZFxcZCg/OlxcZFxcZCg/OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxcbiAgICAgICAgdHpSZWdleCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/LyxcbiAgICAgICAgaXNvRGF0ZXMgPSBbXG4gICAgICAgICAgICBbJ1lZWVlZWS1NTS1ERCcsIC9bKy1dXFxkezZ9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnWVlZWS1NTS1ERCcsIC9cXGR7NH0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXLUUnLCAvXFxkezR9LVdcXGRcXGQtXFxkL10sXG4gICAgICAgICAgICBbJ0dHR0ctW1ddV1cnLCAvXFxkezR9LVdcXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVktREREJywgL1xcZHs0fS1cXGR7M30vXSxcbiAgICAgICAgICAgIFsnWVlZWS1NTScsIC9cXGR7NH0tXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZWVlNTUREJywgL1srLV1cXGR7MTB9L10sXG4gICAgICAgICAgICBbJ1lZWVlNTUREJywgL1xcZHs4fS9dLFxuICAgICAgICAgICAgWydHR0dHW1ddV1dFJywgL1xcZHs0fVdcXGR7M30vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXJywgL1xcZHs0fVdcXGR7Mn0vLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVlEREQnLCAvXFxkezd9L10sXG4gICAgICAgICAgICBbJ1lZWVlNTScsIC9cXGR7Nn0vLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVknLCAvXFxkezR9LywgZmFsc2VdLFxuICAgICAgICBdLFxuICAgICAgICAvLyBpc28gdGltZSBmb3JtYXRzIGFuZCByZWdleGVzXG4gICAgICAgIGlzb1RpbWVzID0gW1xuICAgICAgICAgICAgWydISDptbTpzcy5TU1NTJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISDptbTpzcyxTU1NTJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkLFxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEg6bW0nLCAvXFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICAgICAgWydISG1tc3MuU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgICAgICBbJ0hIbW1zcyxTU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIbW1zcycsIC9cXGRcXGRcXGRcXGRcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbScsIC9cXGRcXGRcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEgnLCAvXFxkXFxkL10sXG4gICAgICAgIF0sXG4gICAgICAgIGFzcE5ldEpzb25SZWdleCA9IC9eXFwvP0RhdGVcXCgoLT9cXGQrKS9pLFxuICAgICAgICAvLyBSRkMgMjgyMiByZWdleDogRm9yIGRldGFpbHMgc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyODIyI3NlY3Rpb24tMy4zXG4gICAgICAgIHJmYzI4MjIgPVxuICAgICAgICAgICAgL14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXFxkezR9KSkkLyxcbiAgICAgICAgb2JzT2Zmc2V0cyA9IHtcbiAgICAgICAgICAgIFVUOiAwLFxuICAgICAgICAgICAgR01UOiAwLFxuICAgICAgICAgICAgRURUOiAtNCAqIDYwLFxuICAgICAgICAgICAgRVNUOiAtNSAqIDYwLFxuICAgICAgICAgICAgQ0RUOiAtNSAqIDYwLFxuICAgICAgICAgICAgQ1NUOiAtNiAqIDYwLFxuICAgICAgICAgICAgTURUOiAtNiAqIDYwLFxuICAgICAgICAgICAgTVNUOiAtNyAqIDYwLFxuICAgICAgICAgICAgUERUOiAtNyAqIDYwLFxuICAgICAgICAgICAgUFNUOiAtOCAqIDYwLFxuICAgICAgICB9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSVNPKGNvbmZpZykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBzdHJpbmcgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBtYXRjaCA9IGV4dGVuZGVkSXNvUmVnZXguZXhlYyhzdHJpbmcpIHx8IGJhc2ljSXNvUmVnZXguZXhlYyhzdHJpbmcpLFxuICAgICAgICAgICAgYWxsb3dUaW1lLFxuICAgICAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgICAgIHRpbWVGb3JtYXQsXG4gICAgICAgICAgICB0ekZvcm1hdCxcbiAgICAgICAgICAgIGlzb0RhdGVzTGVuID0gaXNvRGF0ZXMubGVuZ3RoLFxuICAgICAgICAgICAgaXNvVGltZXNMZW4gPSBpc29UaW1lcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pc28gPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb0RhdGVzTGVuOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzb0RhdGVzW2ldWzFdLmV4ZWMobWF0Y2hbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQgPSBpc29EYXRlc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dUaW1lID0gaXNvRGF0ZXNbaV1bMl0gIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb1RpbWVzTGVuOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc29UaW1lc1tpXVsxXS5leGVjKG1hdGNoWzNdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hbMl0gc2hvdWxkIGJlICdUJyBvciBzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUZvcm1hdCA9IChtYXRjaFsyXSB8fCAnICcpICsgaXNvVGltZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGltZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFhbGxvd1RpbWUgJiYgdGltZUZvcm1hdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzRdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR6UmVnZXguZXhlYyhtYXRjaFs0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHpGb3JtYXQgPSAnWic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcuX2YgPSBkYXRlRm9ybWF0ICsgKHRpbWVGb3JtYXQgfHwgJycpICsgKHR6Rm9ybWF0IHx8ICcnKTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICAgICAgeWVhclN0cixcbiAgICAgICAgbW9udGhTdHIsXG4gICAgICAgIGRheVN0cixcbiAgICAgICAgaG91clN0cixcbiAgICAgICAgbWludXRlU3RyLFxuICAgICAgICBzZWNvbmRTdHJcbiAgICApIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtcbiAgICAgICAgICAgIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpLFxuICAgICAgICAgICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpLFxuICAgICAgICAgICAgcGFyc2VJbnQoZGF5U3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChob3VyU3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChtaW51dGVTdHIsIDEwKSxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoc2Vjb25kU3RyKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChwYXJzZUludChzZWNvbmRTdHIsIDEwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpIHtcbiAgICAgICAgdmFyIHllYXIgPSBwYXJzZUludCh5ZWFyU3RyLCAxMCk7XG4gICAgICAgIGlmICh5ZWFyIDw9IDQ5KSB7XG4gICAgICAgICAgICByZXR1cm4gMjAwMCArIHllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoeWVhciA8PSA5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiAxOTAwICsgeWVhcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwcm9jZXNzUkZDMjgyMihzKSB7XG4gICAgICAgIC8vIFJlbW92ZSBjb21tZW50cyBhbmQgZm9sZGluZyB3aGl0ZXNwYWNlIGFuZCByZXBsYWNlIG11bHRpcGxlLXNwYWNlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG4gICAgICAgIHJldHVybiBzXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwoW14oKV0qXFwpfFtcXG5cXHRdL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxzXFxzKykvZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL15cXHNcXHMqLywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzXFxzKiQvLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tXZWVrZGF5KHdlZWtkYXlTdHIsIHBhcnNlZElucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKHdlZWtkYXlTdHIpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFJlcGxhY2UgdGhlIHZhbmlsbGEgSlMgRGF0ZSBvYmplY3Qgd2l0aCBhbiBpbmRlcGVuZGVudCBkYXktb2Ytd2VlayBjaGVjay5cbiAgICAgICAgICAgIHZhciB3ZWVrZGF5UHJvdmlkZWQgPSBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydC5pbmRleE9mKHdlZWtkYXlTdHIpLFxuICAgICAgICAgICAgICAgIHdlZWtkYXlBY3R1YWwgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMF0sXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzFdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsyXVxuICAgICAgICAgICAgICAgICkuZ2V0RGF5KCk7XG4gICAgICAgICAgICBpZiAod2Vla2RheVByb3ZpZGVkICE9PSB3ZWVrZGF5QWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlT2Zmc2V0KG9ic09mZnNldCwgbWlsaXRhcnlPZmZzZXQsIG51bU9mZnNldCkge1xuICAgICAgICBpZiAob2JzT2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbGl0YXJ5T2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyB0aGUgb25seSBhbGxvd2VkIG1pbGl0YXJ5IHR6IGlzIFpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGhtID0gcGFyc2VJbnQobnVtT2Zmc2V0LCAxMCksXG4gICAgICAgICAgICAgICAgbSA9IGhtICUgMTAwLFxuICAgICAgICAgICAgICAgIGggPSAoaG0gLSBtKSAvIDEwMDtcbiAgICAgICAgICAgIHJldHVybiBoICogNjAgKyBtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBhbmQgdGltZSBmcm9tIHJlZiAyODIyIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2ggPSByZmMyODIyLmV4ZWMocHJlcHJvY2Vzc1JGQzI4MjIoY29uZmlnLl9pKSksXG4gICAgICAgICAgICBwYXJzZWRBcnJheTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBwYXJzZWRBcnJheSA9IGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgICAgICAgICAgbWF0Y2hbNF0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbM10sXG4gICAgICAgICAgICAgICAgbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbNV0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbNl0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbN11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIWNoZWNrV2Vla2RheShtYXRjaFsxXSwgcGFyc2VkQXJyYXksIGNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IHBhcnNlZEFycmF5O1xuICAgICAgICAgICAgY29uZmlnLl90em0gPSBjYWxjdWxhdGVPZmZzZXQobWF0Y2hbOF0sIG1hdGNoWzldLCBtYXRjaFsxMF0pO1xuXG4gICAgICAgICAgICBjb25maWcuX2QgPSBjcmVhdGVVVENEYXRlLmFwcGx5KG51bGwsIGNvbmZpZy5fYSk7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5yZmMyODIyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIDEpIEFTUC5ORVQsIDIpIElTTywgMykgUkZDIDI4MjIgZm9ybWF0cywgb3IgNCkgb3B0aW9uYWwgZmFsbGJhY2sgaWYgcGFyc2luZyBpc24ndCBzdHJpY3RcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IGFzcE5ldEpzb25SZWdleC5leGVjKGNvbmZpZy5faSk7XG4gICAgICAgIGlmIChtYXRjaGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSgrbWF0Y2hlZFsxXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9zdHJpY3QpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmluYWwgYXR0ZW1wdCwgdXNlIElucHV0IEZhbGxiYWNrXG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2sgPSBkZXByZWNhdGUoXG4gICAgICAgICd2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgJyArXG4gICAgICAgICAgICAnd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSAnICtcbiAgICAgICAgICAgICdkaXNjb3VyYWdlZC4gUGxlYXNlIHJlZmVyIHRvIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvanMtZGF0ZS8gZm9yIG1vcmUgaW5mby4nLFxuICAgICAgICBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShjb25maWcuX2kgKyAoY29uZmlnLl91c2VVVEMgPyAnIFVUQycgOiAnJykpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFBpY2sgdGhlIGZpcnN0IGRlZmluZWQgb2YgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy5cbiAgICBmdW5jdGlvbiBkZWZhdWx0cyhhLCBiLCBjKSB7XG4gICAgICAgIGlmIChhICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIC8vIGhvb2tzIGlzIGFjdHVhbGx5IHRoZSBleHBvcnRlZCBtb21lbnQgb2JqZWN0XG4gICAgICAgIHZhciBub3dWYWx1ZSA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDTW9udGgoKSxcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENEYXRlKCksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbbm93VmFsdWUuZ2V0RnVsbFllYXIoKSwgbm93VmFsdWUuZ2V0TW9udGgoKSwgbm93VmFsdWUuZ2V0RGF0ZSgpXTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFuIGFycmF5IHRvIGEgZGF0ZS5cbiAgICAvLyB0aGUgYXJyYXkgc2hvdWxkIG1pcnJvciB0aGUgcGFyYW1ldGVycyBiZWxvd1xuICAgIC8vIG5vdGU6IGFsbCB2YWx1ZXMgcGFzdCB0aGUgeWVhciBhcmUgb3B0aW9uYWwgYW5kIHdpbGwgZGVmYXVsdCB0byB0aGUgbG93ZXN0IHBvc3NpYmxlIHZhbHVlLlxuICAgIC8vIFt5ZWFyLCBtb250aCwgZGF5ICwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXVxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21BcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgaW5wdXQgPSBbXSxcbiAgICAgICAgICAgIGN1cnJlbnREYXRlLFxuICAgICAgICAgICAgZXhwZWN0ZWRXZWVrZGF5LFxuICAgICAgICAgICAgeWVhclRvVXNlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnREYXRlID0gY3VycmVudERhdGVBcnJheShjb25maWcpO1xuXG4gICAgICAgIC8vY29tcHV0ZSBkYXkgb2YgdGhlIHllYXIgZnJvbSB3ZWVrcyBhbmQgd2Vla2RheXNcbiAgICAgICAgaWYgKGNvbmZpZy5fdyAmJiBjb25maWcuX2FbREFURV0gPT0gbnVsbCAmJiBjb25maWcuX2FbTU9OVEhdID09IG51bGwpIHtcbiAgICAgICAgICAgIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9pZiB0aGUgZGF5IG9mIHRoZSB5ZWFyIGlzIHNldCwgZmlndXJlIG91dCB3aGF0IGl0IGlzXG4gICAgICAgIGlmIChjb25maWcuX2RheU9mWWVhciAhPSBudWxsKSB7XG4gICAgICAgICAgICB5ZWFyVG9Vc2UgPSBkZWZhdWx0cyhjb25maWcuX2FbWUVBUl0sIGN1cnJlbnREYXRlW1lFQVJdKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyVG9Vc2UpIHx8XG4gICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPT09IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd0RheU9mWWVhciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKHllYXJUb1VzZSwgMCwgY29uZmlnLl9kYXlPZlllYXIpO1xuICAgICAgICAgICAgY29uZmlnLl9hW01PTlRIXSA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtEQVRFXSA9IGRhdGUuZ2V0VVRDRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IGRhdGUuXG4gICAgICAgIC8vICogaWYgbm8geWVhciwgbW9udGgsIGRheSBvZiBtb250aCBhcmUgZ2l2ZW4sIGRlZmF1bHQgdG8gdG9kYXlcbiAgICAgICAgLy8gKiBpZiBkYXkgb2YgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgbW9udGggYW5kIHllYXJcbiAgICAgICAgLy8gKiBpZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBvbmx5IHllYXJcbiAgICAgICAgLy8gKiBpZiB5ZWFyIGlzIGdpdmVuLCBkb24ndCBkZWZhdWx0IGFueXRoaW5nXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzICYmIGNvbmZpZy5fYVtpXSA9PSBudWxsOyArK2kpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID0gY3VycmVudERhdGVbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBaZXJvIG91dCB3aGF0ZXZlciB3YXMgbm90IGRlZmF1bHRlZCwgaW5jbHVkaW5nIHRpbWVcbiAgICAgICAgZm9yICg7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID1cbiAgICAgICAgICAgICAgICBjb25maWcuX2FbaV0gPT0gbnVsbCA/IChpID09PSAyID8gMSA6IDApIDogY29uZmlnLl9hW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIDI0OjAwOjAwLjAwMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlOVVRFXSA9PT0gMCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW1NFQ09ORF0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNSUxMSVNFQ09ORF0gPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25maWcuX25leHREYXkgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy5fZCA9IChjb25maWcuX3VzZVVUQyA/IGNyZWF0ZVVUQ0RhdGUgOiBjcmVhdGVEYXRlKS5hcHBseShcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICApO1xuICAgICAgICBleHBlY3RlZFdlZWtkYXkgPSBjb25maWcuX3VzZVVUQ1xuICAgICAgICAgICAgPyBjb25maWcuX2QuZ2V0VVRDRGF5KClcbiAgICAgICAgICAgIDogY29uZmlnLl9kLmdldERheSgpO1xuXG4gICAgICAgIC8vIEFwcGx5IHRpbWV6b25lIG9mZnNldCBmcm9tIGlucHV0LiBUaGUgYWN0dWFsIHV0Y09mZnNldCBjYW4gYmUgY2hhbmdlZFxuICAgICAgICAvLyB3aXRoIHBhcnNlWm9uZS5cbiAgICAgICAgaWYgKGNvbmZpZy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAyNDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIGZvciBtaXNtYXRjaGluZyBkYXkgb2Ygd2Vla1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX3cgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25maWcuX3cuZCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fdy5kICE9PSBleHBlY3RlZFdlZWtkYXlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZykge1xuICAgICAgICB2YXIgdywgd2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95LCB0ZW1wLCB3ZWVrZGF5T3ZlcmZsb3csIGN1cldlZWs7XG5cbiAgICAgICAgdyA9IGNvbmZpZy5fdztcbiAgICAgICAgaWYgKHcuR0cgIT0gbnVsbCB8fCB3LlcgIT0gbnVsbCB8fCB3LkUgIT0gbnVsbCkge1xuICAgICAgICAgICAgZG93ID0gMTtcbiAgICAgICAgICAgIGRveSA9IDQ7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gdGFrZSB0aGUgY3VycmVudCBpc29XZWVrWWVhciwgYnV0IHRoYXQgZGVwZW5kcyBvblxuICAgICAgICAgICAgLy8gaG93IHdlIGludGVycHJldCBub3cgKGxvY2FsLCB1dGMsIGZpeGVkIG9mZnNldCkuIFNvIGNyZWF0ZVxuICAgICAgICAgICAgLy8gYSBub3cgdmVyc2lvbiBvZiBjdXJyZW50IGNvbmZpZyAodGFrZSBsb2NhbC91dGMvb2Zmc2V0IGZsYWdzLCBhbmRcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBub3cpLlxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyhcbiAgICAgICAgICAgICAgICB3LkdHLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSxcbiAgICAgICAgICAgICAgICB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIDEsIDQpLnllYXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody5XLCAxKTtcbiAgICAgICAgICAgIHdlZWtkYXkgPSBkZWZhdWx0cyh3LkUsIDEpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAxIHx8IHdlZWtkYXkgPiA3KSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvdyA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRvdztcbiAgICAgICAgICAgIGRveSA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRveTtcblxuICAgICAgICAgICAgY3VyV2VlayA9IHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgZG93LCBkb3kpO1xuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKHcuZ2csIGNvbmZpZy5fYVtZRUFSXSwgY3VyV2Vlay55ZWFyKTtcblxuICAgICAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IHdlZWsuXG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody53LCBjdXJXZWVrLndlZWspO1xuXG4gICAgICAgICAgICBpZiAody5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZWVrZGF5IC0tIGxvdyBkYXkgbnVtYmVycyBhcmUgY29uc2lkZXJlZCBuZXh0IHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5kO1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMCB8fCB3ZWVrZGF5ID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAody5lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBsb2NhbCB3ZWVrZGF5IC0tIGNvdW50aW5nIHN0YXJ0cyBmcm9tIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZSArIGRvdztcbiAgICAgICAgICAgICAgICBpZiAody5lIDwgMCB8fCB3LmUgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHRvIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IGRvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod2VlayA8IDEgfHwgd2VlayA+IHdlZWtzSW5ZZWFyKHdlZWtZZWFyLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrZGF5T3ZlcmZsb3cgIT0gbnVsbCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla2RheSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1wID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSB0ZW1wLnllYXI7XG4gICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRlbXAuZGF5T2ZZZWFyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIElTTyBzdGFuZGFyZFxuICAgIGhvb2tzLklTT184NjAxID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgUkZDIDI4MjIgZm9ybVxuICAgIGhvb2tzLlJGQ18yODIyID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBmb3JtYXQgc3RyaW5nXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgY3JlYXRpb24gZmxvdyB0byBwcmV2ZW50IGNpcmN1bGFyIGRlcHNcbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuSVNPXzg2MDEpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5SRkNfMjgyMikge1xuICAgICAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25maWcuX2EgPSBbXTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIFRoaXMgYXJyYXkgaXMgdXNlZCB0byBtYWtlIGEgRGF0ZSwgZWl0aGVyIHdpdGggYG5ldyBEYXRlYCBvciBgRGF0ZS5VVENgXG4gICAgICAgIHZhciBzdHJpbmcgPSAnJyArIGNvbmZpZy5faSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwYXJzZWRJbnB1dCxcbiAgICAgICAgICAgIHRva2VucyxcbiAgICAgICAgICAgIHRva2VuLFxuICAgICAgICAgICAgc2tpcHBlZCxcbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoID0gMCxcbiAgICAgICAgICAgIGVyYSxcbiAgICAgICAgICAgIHRva2VuTGVuO1xuXG4gICAgICAgIHRva2VucyA9XG4gICAgICAgICAgICBleHBhbmRGb3JtYXQoY29uZmlnLl9mLCBjb25maWcuX2xvY2FsZSkubWF0Y2goZm9ybWF0dGluZ1Rva2VucykgfHwgW107XG4gICAgICAgIHRva2VuTGVuID0gdG9rZW5zLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2VuTGVuOyBpKyspIHtcbiAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgcGFyc2VkSW5wdXQgPSAoc3RyaW5nLm1hdGNoKGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSkgfHxcbiAgICAgICAgICAgICAgICBbXSlbMF07XG4gICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBza2lwcGVkID0gc3RyaW5nLnN1YnN0cigwLCBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkpO1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChza2lwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkgKyBwYXJzZWRJbnB1dC5sZW5ndGhcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggKz0gcGFyc2VkSW5wdXQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgaWYgaXQncyBub3QgYSBrbm93biB0b2tlblxuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIHBhcnNlZElucHV0LCBjb25maWcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcuX3N0cmljdCAmJiAhcGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgcmVtYWluaW5nIHVucGFyc2VkIGlucHV0IGxlbmd0aCB0byB0aGUgc3RyaW5nXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmNoYXJzTGVmdE92ZXIgPVxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoIC0gdG90YWxQYXJzZWRJbnB1dExlbmd0aDtcbiAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciBfMTJoIGZsYWcgaWYgaG91ciBpcyA8PSAxMlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPD0gMTIgJiZcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPT09IHRydWUgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucGFyc2VkRGF0ZVBhcnRzID0gY29uZmlnLl9hLnNsaWNlKDApO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5tZXJpZGllbSA9IGNvbmZpZy5fbWVyaWRpZW07XG4gICAgICAgIC8vIGhhbmRsZSBtZXJpZGllbVxuICAgICAgICBjb25maWcuX2FbSE9VUl0gPSBtZXJpZGllbUZpeFdyYXAoXG4gICAgICAgICAgICBjb25maWcuX2xvY2FsZSxcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSxcbiAgICAgICAgICAgIGNvbmZpZy5fbWVyaWRpZW1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBoYW5kbGUgZXJhXG4gICAgICAgIGVyYSA9IGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYTtcbiAgICAgICAgaWYgKGVyYSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhc0NvbnZlcnRZZWFyKGVyYSwgY29uZmlnLl9hW1lFQVJdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICBjaGVja092ZXJmbG93KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW1GaXhXcmFwKGxvY2FsZSwgaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgdmFyIGlzUG07XG5cbiAgICAgICAgaWYgKG1lcmlkaWVtID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbGUubWVyaWRpZW1Ib3VyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubWVyaWRpZW1Ib3VyKGhvdXIsIG1lcmlkaWVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhbGUuaXNQTSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFja1xuICAgICAgICAgICAgaXNQbSA9IGxvY2FsZS5pc1BNKG1lcmlkaWVtKTtcbiAgICAgICAgICAgIGlmIChpc1BtICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzUG0gJiYgaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGFycmF5IG9mIGZvcm1hdCBzdHJpbmdzXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgdGVtcENvbmZpZyxcbiAgICAgICAgICAgIGJlc3RNb21lbnQsXG4gICAgICAgICAgICBzY29yZVRvQmVhdCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBjdXJyZW50U2NvcmUsXG4gICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kLFxuICAgICAgICAgICAgYmVzdEZvcm1hdElzVmFsaWQgPSBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ2ZMZW4gPSBjb25maWcuX2YubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjb25maWdmTGVuID09PSAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlnZkxlbjsgaSsrKSB7XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgPSAwO1xuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGVtcENvbmZpZyA9IGNvcHlDb25maWcoe30sIGNvbmZpZyk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRlbXBDb25maWcuX3VzZVVUQyA9IGNvbmZpZy5fdXNlVVRDO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENvbmZpZy5fZiA9IGNvbmZpZy5fZltpXTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQodGVtcENvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKHRlbXBDb25maWcpKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGFueSBpbnB1dCB0aGF0IHdhcyBub3QgcGFyc2VkIGFkZCBhIHBlbmFsdHkgZm9yIHRoYXQgZm9ybWF0XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgKz0gZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLmNoYXJzTGVmdE92ZXI7XG5cbiAgICAgICAgICAgIC8vb3IgdG9rZW5zXG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgKz0gZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLnVudXNlZFRva2Vucy5sZW5ndGggKiAxMDtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLnNjb3JlID0gY3VycmVudFNjb3JlO1xuXG4gICAgICAgICAgICBpZiAoIWJlc3RGb3JtYXRJc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0IHx8XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb21lbnQgPSB0ZW1wQ29uZmlnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRGb3JtYXRGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVzdEZvcm1hdElzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb21lbnQgPSB0ZW1wQ29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4dGVuZChjb25maWcsIGJlc3RNb21lbnQgfHwgdGVtcENvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbU9iamVjdChjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGkgPSBub3JtYWxpemVPYmplY3RVbml0cyhjb25maWcuX2kpLFxuICAgICAgICAgICAgZGF5T3JEYXRlID0gaS5kYXkgPT09IHVuZGVmaW5lZCA/IGkuZGF0ZSA6IGkuZGF5O1xuICAgICAgICBjb25maWcuX2EgPSBtYXAoXG4gICAgICAgICAgICBbaS55ZWFyLCBpLm1vbnRoLCBkYXlPckRhdGUsIGkuaG91ciwgaS5taW51dGUsIGkuc2Vjb25kLCBpLm1pbGxpc2Vjb25kXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZyb21Db25maWcoY29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3cocHJlcGFyZUNvbmZpZyhjb25maWcpKSk7XG4gICAgICAgIGlmIChyZXMuX25leHREYXkpIHtcbiAgICAgICAgICAgIC8vIEFkZGluZyBpcyBzbWFydCBlbm91Z2ggYXJvdW5kIERTVFxuICAgICAgICAgICAgcmVzLmFkZCgxLCAnZCcpO1xuICAgICAgICAgICAgcmVzLl9uZXh0RGF5ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwYXJlQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBmb3JtYXQgPSBjb25maWcuX2Y7XG5cbiAgICAgICAgY29uZmlnLl9sb2NhbGUgPSBjb25maWcuX2xvY2FsZSB8fCBnZXRMb2NhbGUoY29uZmlnLl9sKTtcblxuICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwgfHwgKGZvcm1hdCA9PT0gdW5kZWZpbmVkICYmIGlucHV0ID09PSAnJykpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKHsgbnVsbElucHV0OiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faSA9IGlucHV0ID0gY29uZmlnLl9sb2NhbGUucHJlcGFyc2UoaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTW9tZW50KGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhpbnB1dCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGlucHV0O1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZm9ybWF0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSW5wdXQoY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNWYWxpZChjb25maWcpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSW5wdXQoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0LnZhbHVlT2YoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZyhjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2EgPSBtYXAoaW5wdXQuc2xpY2UoMCksIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbU9iamVjdChjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSkge1xuICAgICAgICAgICAgLy8gZnJvbSBtaWxsaXNlY29uZHNcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBpc1VUQykge1xuICAgICAgICB2YXIgYyA9IHt9O1xuXG4gICAgICAgIGlmIChmb3JtYXQgPT09IHRydWUgfHwgZm9ybWF0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvY2FsZSA9PT0gdHJ1ZSB8fCBsb2NhbGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBsb2NhbGU7XG4gICAgICAgICAgICBsb2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoaXNPYmplY3QoaW5wdXQpICYmIGlzT2JqZWN0RW1wdHkoaW5wdXQpKSB8fFxuICAgICAgICAgICAgKGlzQXJyYXkoaW5wdXQpICYmIGlucHV0Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBvYmplY3QgY29uc3RydWN0aW9uIG11c3QgYmUgZG9uZSB0aGlzIHdheS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzE0MjNcbiAgICAgICAgYy5faXNBTW9tZW50T2JqZWN0ID0gdHJ1ZTtcbiAgICAgICAgYy5fdXNlVVRDID0gYy5faXNVVEMgPSBpc1VUQztcbiAgICAgICAgYy5fbCA9IGxvY2FsZTtcbiAgICAgICAgYy5faSA9IGlucHV0O1xuICAgICAgICBjLl9mID0gZm9ybWF0O1xuICAgICAgICBjLl9zdHJpY3QgPSBzdHJpY3Q7XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21Db25maWcoYyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWwoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG90eXBlTWluID0gZGVwcmVjYXRlKFxuICAgICAgICAgICAgJ21vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyIDwgdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgcHJvdG90eXBlTWF4ID0gZGVwcmVjYXRlKFxuICAgICAgICAgICAgJ21vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyID4gdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgIC8vIFBpY2sgYSBtb21lbnQgbSBmcm9tIG1vbWVudHMgc28gdGhhdCBtW2ZuXShvdGhlcikgaXMgdHJ1ZSBmb3IgYWxsXG4gICAgLy8gb3RoZXIuIFRoaXMgcmVsaWVzIG9uIHRoZSBmdW5jdGlvbiBmbiB0byBiZSB0cmFuc2l0aXZlLlxuICAgIC8vXG4gICAgLy8gbW9tZW50cyBzaG91bGQgZWl0aGVyIGJlIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzIG9yIGFuIGFycmF5LCB3aG9zZVxuICAgIC8vIGZpcnN0IGVsZW1lbnQgaXMgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMuXG4gICAgZnVuY3Rpb24gcGlja0J5KGZuLCBtb21lbnRzKSB7XG4gICAgICAgIHZhciByZXMsIGk7XG4gICAgICAgIGlmIChtb21lbnRzLmxlbmd0aCA9PT0gMSAmJiBpc0FycmF5KG1vbWVudHNbMF0pKSB7XG4gICAgICAgICAgICBtb21lbnRzID0gbW9tZW50c1swXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1vbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSBtb21lbnRzWzBdO1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbW9tZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKCFtb21lbnRzW2ldLmlzVmFsaWQoKSB8fCBtb21lbnRzW2ldW2ZuXShyZXMpKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gbW9tZW50c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSBbXS5zb3J0IGluc3RlYWQ/XG4gICAgZnVuY3Rpb24gbWluKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0JlZm9yZScsIGFyZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1heCgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNBZnRlcicsIGFyZ3MpO1xuICAgIH1cblxuICAgIHZhciBub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdyA/IERhdGUubm93KCkgOiArbmV3IERhdGUoKTtcbiAgICB9O1xuXG4gICAgdmFyIG9yZGVyaW5nID0gW1xuICAgICAgICAneWVhcicsXG4gICAgICAgICdxdWFydGVyJyxcbiAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgJ3dlZWsnLFxuICAgICAgICAnZGF5JyxcbiAgICAgICAgJ2hvdXInLFxuICAgICAgICAnbWludXRlJyxcbiAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgXTtcblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb25WYWxpZChtKSB7XG4gICAgICAgIHZhciBrZXksXG4gICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IGZhbHNlLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG9yZGVyTGVuID0gb3JkZXJpbmcubGVuZ3RoO1xuICAgICAgICBmb3IgKGtleSBpbiBtKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChtLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhPZi5jYWxsKG9yZGVyaW5nLCBrZXkpICE9PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAobVtrZXldID09IG51bGwgfHwgIWlzTmFOKG1ba2V5XSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG9yZGVyTGVuOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChtW29yZGVyaW5nW2ldXSkge1xuICAgICAgICAgICAgICAgIGlmICh1bml0SGFzRGVjaW1hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIG9ubHkgYWxsb3cgbm9uLWludGVnZXJzIGZvciBzbWFsbGVzdCB1bml0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJzZUZsb2F0KG1bb3JkZXJpbmdbaV1dKSAhPT0gdG9JbnQobVtvcmRlcmluZ1tpXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuaXRIYXNEZWNpbWFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKE5hTik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gRHVyYXRpb24oZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGR1cmF0aW9uKSxcbiAgICAgICAgICAgIHllYXJzID0gbm9ybWFsaXplZElucHV0LnllYXIgfHwgMCxcbiAgICAgICAgICAgIHF1YXJ0ZXJzID0gbm9ybWFsaXplZElucHV0LnF1YXJ0ZXIgfHwgMCxcbiAgICAgICAgICAgIG1vbnRocyA9IG5vcm1hbGl6ZWRJbnB1dC5tb250aCB8fCAwLFxuICAgICAgICAgICAgd2Vla3MgPSBub3JtYWxpemVkSW5wdXQud2VlayB8fCBub3JtYWxpemVkSW5wdXQuaXNvV2VlayB8fCAwLFxuICAgICAgICAgICAgZGF5cyA9IG5vcm1hbGl6ZWRJbnB1dC5kYXkgfHwgMCxcbiAgICAgICAgICAgIGhvdXJzID0gbm9ybWFsaXplZElucHV0LmhvdXIgfHwgMCxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBub3JtYWxpemVkSW5wdXQubWludXRlIHx8IDAsXG4gICAgICAgICAgICBzZWNvbmRzID0gbm9ybWFsaXplZElucHV0LnNlY29uZCB8fCAwLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gbm9ybWFsaXplZElucHV0Lm1pbGxpc2Vjb25kIHx8IDA7XG5cbiAgICAgICAgdGhpcy5faXNWYWxpZCA9IGlzRHVyYXRpb25WYWxpZChub3JtYWxpemVkSW5wdXQpO1xuXG4gICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciBkYXRlQWRkUmVtb3ZlXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9XG4gICAgICAgICAgICArbWlsbGlzZWNvbmRzICtcbiAgICAgICAgICAgIHNlY29uZHMgKiAxZTMgKyAvLyAxMDAwXG4gICAgICAgICAgICBtaW51dGVzICogNmU0ICsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBob3VycyAqIDEwMDAgKiA2MCAqIDYwOyAvL3VzaW5nIDEwMDAgKiA2MCAqIDYwIGluc3RlYWQgb2YgMzZlNSB0byBhdm9pZCBmbG9hdGluZyBwb2ludCByb3VuZGluZyBlcnJvcnMgaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzI5NzhcbiAgICAgICAgLy8gQmVjYXVzZSBvZiBkYXRlQWRkUmVtb3ZlIHRyZWF0cyAyNCBob3VycyBhcyBkaWZmZXJlbnQgZnJvbSBhXG4gICAgICAgIC8vIGRheSB3aGVuIHdvcmtpbmcgYXJvdW5kIERTVCwgd2UgbmVlZCB0byBzdG9yZSB0aGVtIHNlcGFyYXRlbHlcbiAgICAgICAgdGhpcy5fZGF5cyA9ICtkYXlzICsgd2Vla3MgKiA3O1xuICAgICAgICAvLyBJdCBpcyBpbXBvc3NpYmxlIHRvIHRyYW5zbGF0ZSBtb250aHMgaW50byBkYXlzIHdpdGhvdXQga25vd2luZ1xuICAgICAgICAvLyB3aGljaCBtb250aHMgeW91IGFyZSBhcmUgdGFsa2luZyBhYm91dCwgc28gd2UgaGF2ZSB0byBzdG9yZVxuICAgICAgICAvLyBpdCBzZXBhcmF0ZWx5LlxuICAgICAgICB0aGlzLl9tb250aHMgPSArbW9udGhzICsgcXVhcnRlcnMgKiAzICsgeWVhcnMgKiAxMjtcblxuICAgICAgICB0aGlzLl9kYXRhID0ge307XG5cbiAgICAgICAgdGhpcy5fbG9jYWxlID0gZ2V0TG9jYWxlKCk7XG5cbiAgICAgICAgdGhpcy5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIER1cmF0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic1JvdW5kKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoLTEgKiBudW1iZXIpICogLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29tcGFyZSB0d28gYXJyYXlzLCByZXR1cm4gdGhlIG51bWJlciBvZiBkaWZmZXJlbmNlc1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVBcnJheXMoYXJyYXkxLCBhcnJheTIsIGRvbnRDb252ZXJ0KSB7XG4gICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcnJheTEubGVuZ3RoLCBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGxlbmd0aERpZmYgPSBNYXRoLmFicyhhcnJheTEubGVuZ3RoIC0gYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBkaWZmcyA9IDAsXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZG9udENvbnZlcnQgJiYgYXJyYXkxW2ldICE9PSBhcnJheTJbaV0pIHx8XG4gICAgICAgICAgICAgICAgKCFkb250Q29udmVydCAmJiB0b0ludChhcnJheTFbaV0pICE9PSB0b0ludChhcnJheTJbaV0pKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGlmZnMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlmZnMgKyBsZW5ndGhEaWZmO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIG9mZnNldCh0b2tlbiwgc2VwYXJhdG9yKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy51dGNPZmZzZXQoKSxcbiAgICAgICAgICAgICAgICBzaWduID0gJysnO1xuICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHNpZ24gPSAnLSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHNpZ24gK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+KG9mZnNldCAvIDYwKSwgMikgK1xuICAgICAgICAgICAgICAgIHNlcGFyYXRvciArXG4gICAgICAgICAgICAgICAgemVyb0ZpbGwofn5vZmZzZXQgJSA2MCwgMilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9mZnNldCgnWicsICc6Jyk7XG4gICAgb2Zmc2V0KCdaWicsICcnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1onLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRSZWdleFRva2VuKCdaWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydaJywgJ1paJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX3VzZVVUQyA9IHRydWU7XG4gICAgICAgIGNvbmZpZy5fdHptID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyB0aW1lem9uZSBjaHVua2VyXG4gICAgLy8gJysxMDowMCcgPiBbJzEwJywgICcwMCddXG4gICAgLy8gJy0xNTMwJyAgPiBbJy0xNScsICczMCddXG4gICAgdmFyIGNodW5rT2Zmc2V0ID0gLyhbXFwrXFwtXXxcXGRcXGQpL2dpO1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaGVyLCBzdHJpbmcpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSAoc3RyaW5nIHx8ICcnKS5tYXRjaChtYXRjaGVyKSxcbiAgICAgICAgICAgIGNodW5rLFxuICAgICAgICAgICAgcGFydHMsXG4gICAgICAgICAgICBtaW51dGVzO1xuXG4gICAgICAgIGlmIChtYXRjaGVzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNodW5rID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdIHx8IFtdO1xuICAgICAgICBwYXJ0cyA9IChjaHVuayArICcnKS5tYXRjaChjaHVua09mZnNldCkgfHwgWyctJywgMCwgMF07XG4gICAgICAgIG1pbnV0ZXMgPSArKHBhcnRzWzFdICogNjApICsgdG9JbnQocGFydHNbMl0pO1xuXG4gICAgICAgIHJldHVybiBtaW51dGVzID09PSAwID8gMCA6IHBhcnRzWzBdID09PSAnKycgPyBtaW51dGVzIDogLW1pbnV0ZXM7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGEgbW9tZW50IGZyb20gaW5wdXQsIHRoYXQgaXMgbG9jYWwvdXRjL3pvbmUgZXF1aXZhbGVudCB0byBtb2RlbC5cbiAgICBmdW5jdGlvbiBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIG1vZGVsKSB7XG4gICAgICAgIHZhciByZXMsIGRpZmY7XG4gICAgICAgIGlmIChtb2RlbC5faXNVVEMpIHtcbiAgICAgICAgICAgIHJlcyA9IG1vZGVsLmNsb25lKCk7XG4gICAgICAgICAgICBkaWZmID1cbiAgICAgICAgICAgICAgICAoaXNNb21lbnQoaW5wdXQpIHx8IGlzRGF0ZShpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dC52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgOiBjcmVhdGVMb2NhbChpbnB1dCkudmFsdWVPZigpKSAtIHJlcy52YWx1ZU9mKCk7XG4gICAgICAgICAgICAvLyBVc2UgbG93LWxldmVsIGFwaSwgYmVjYXVzZSB0aGlzIGZuIGlzIGxvdy1sZXZlbCBhcGkuXG4gICAgICAgICAgICByZXMuX2Quc2V0VGltZShyZXMuX2QudmFsdWVPZigpICsgZGlmZik7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQocmVzLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0KS5sb2NhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF0ZU9mZnNldChtKSB7XG4gICAgICAgIC8vIE9uIEZpcmVmb3guMjQgRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIGEgZmxvYXRpbmcgcG9pbnQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L3B1bGwvMTg3MVxuICAgICAgICByZXR1cm4gLU1hdGgucm91bmQobS5fZC5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBhIG1vbWVudCBpcyBtdXRhdGVkLlxuICAgIC8vIEl0IGlzIGludGVuZGVkIHRvIGtlZXAgdGhlIG9mZnNldCBpbiBzeW5jIHdpdGggdGhlIHRpbWV6b25lLlxuICAgIGhvb2tzLnVwZGF0ZU9mZnNldCA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgLy8ga2VlcExvY2FsVGltZSA9IHRydWUgbWVhbnMgb25seSBjaGFuZ2UgdGhlIHRpbWV6b25lLCB3aXRob3V0XG4gICAgLy8gYWZmZWN0aW5nIHRoZSBsb2NhbCBob3VyLiBTbyA1OjMxOjI2ICswMzAwIC0tW3V0Y09mZnNldCgyLCB0cnVlKV0tLT5cbiAgICAvLyA1OjMxOjI2ICswMjAwIEl0IGlzIHBvc3NpYmxlIHRoYXQgNTozMToyNiBkb2Vzbid0IGV4aXN0IHdpdGggb2Zmc2V0XG4gICAgLy8gKzAyMDAsIHNvIHdlIGFkanVzdCB0aGUgdGltZSBhcyBuZWVkZWQsIHRvIGJlIHZhbGlkLlxuICAgIC8vXG4gICAgLy8gS2VlcGluZyB0aGUgdGltZSBhY3R1YWxseSBhZGRzL3N1YnRyYWN0cyAob25lIGhvdXIpXG4gICAgLy8gZnJvbSB0aGUgYWN0dWFsIHJlcHJlc2VudGVkIHRpbWUuIFRoYXQgaXMgd2h5IHdlIGNhbGwgdXBkYXRlT2Zmc2V0XG4gICAgLy8gYSBzZWNvbmQgdGltZS4gSW4gY2FzZSBpdCB3YW50cyB1cyB0byBjaGFuZ2UgdGhlIG9mZnNldCBhZ2FpblxuICAgIC8vIF9jaGFuZ2VJblByb2dyZXNzID09IHRydWUgY2FzZSwgdGhlbiB3ZSBoYXZlIHRvIGFkanVzdCwgYmVjYXVzZVxuICAgIC8vIHRoZXJlIGlzIG5vIHN1Y2ggdGltZSBpbiB0aGUgZ2l2ZW4gdGltZXpvbmUuXG4gICAgZnVuY3Rpb24gZ2V0U2V0T2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lLCBrZWVwTWludXRlcykge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0IHx8IDAsXG4gICAgICAgICAgICBsb2NhbEFkanVzdDtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoaW5wdXQpIDwgMTYgJiYgIWtlZXBNaW51dGVzKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dCAqIDYwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1VUQyAmJiBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxBZGp1c3QgPSBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gaW5wdXQ7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IHRydWU7XG4gICAgICAgICAgICBpZiAobG9jYWxBZGp1c3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGxvY2FsQWRqdXN0LCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWtlZXBMb2NhbFRpbWUgfHwgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICBhZGRTdWJ0cmFjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEdXJhdGlvbihpbnB1dCAtIG9mZnNldCwgJ20nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyBvZmZzZXQgOiBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0Wm9uZShpbnB1dCwga2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IC1pbnB1dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAtdGhpcy51dGNPZmZzZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvVVRDKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvTG9jYWwoa2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAodGhpcy5faXNVVEMpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnRyYWN0KGdldERhdGVPZmZzZXQodGhpcyksICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2kgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YXIgdFpvbmUgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoT2Zmc2V0LCB0aGlzLl9pKTtcbiAgICAgICAgICAgIGlmICh0Wm9uZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodFpvbmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNBbGlnbmVkSG91ck9mZnNldChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQgPSBpbnB1dCA/IGNyZWF0ZUxvY2FsKGlucHV0KS51dGNPZmZzZXQoKSA6IDA7XG5cbiAgICAgICAgcmV0dXJuICh0aGlzLnV0Y09mZnNldCgpIC0gaW5wdXQpICUgNjAgPT09IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpIHx8XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkKCkge1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX2lzRFNUU2hpZnRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYyA9IHt9LFxuICAgICAgICAgICAgb3RoZXI7XG5cbiAgICAgICAgY29weUNvbmZpZyhjLCB0aGlzKTtcbiAgICAgICAgYyA9IHByZXBhcmVDb25maWcoYyk7XG5cbiAgICAgICAgaWYgKGMuX2EpIHtcbiAgICAgICAgICAgIG90aGVyID0gYy5faXNVVEMgPyBjcmVhdGVVVEMoYy5fYSkgOiBjcmVhdGVMb2NhbChjLl9hKTtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9XG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiYgY29tcGFyZUFycmF5cyhjLl9hLCBvdGhlci50b0FycmF5KCkpID4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xvY2FsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyAhdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0Y09mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0YygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgJiYgdGhpcy5fb2Zmc2V0ID09PSAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQVNQLk5FVCBqc29uIGRhdGUgZm9ybWF0IHJlZ2V4XG4gICAgdmFyIGFzcE5ldFJlZ2V4ID0gL14oLXxcXCspPyg/OihcXGQqKVsuIF0pPyhcXGQrKTooXFxkKykoPzo6KFxcZCspKFxcLlxcZCopPyk/JC8sXG4gICAgICAgIC8vIGZyb20gaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9jbG9zdXJlX2dvb2dfZGF0ZV9kYXRlLmpzLnNvdXJjZS5odG1sXG4gICAgICAgIC8vIHNvbWV3aGF0IG1vcmUgaW4gbGluZSB3aXRoIDQuNC4zLjIgMjAwNCBzcGVjLCBidXQgYWxsb3dzIGRlY2ltYWwgYW55d2hlcmVcbiAgICAgICAgLy8gYW5kIGZ1cnRoZXIgbW9kaWZpZWQgdG8gYWxsb3cgZm9yIHN0cmluZ3MgY29udGFpbmluZyBib3RoIHdlZWsgYW5kIGRheVxuICAgICAgICBpc29SZWdleCA9XG4gICAgICAgICAgICAvXigtfFxcKyk/UCg/OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRHVyYXRpb24oaW5wdXQsIGtleSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBpbnB1dCxcbiAgICAgICAgICAgIC8vIG1hdGNoaW5nIGFnYWluc3QgcmVnZXhwIGlzIGV4cGVuc2l2ZSwgZG8gaXQgb24gZGVtYW5kXG4gICAgICAgICAgICBtYXRjaCA9IG51bGwsXG4gICAgICAgICAgICBzaWduLFxuICAgICAgICAgICAgcmV0LFxuICAgICAgICAgICAgZGlmZlJlcztcblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIG1zOiBpbnB1dC5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgICAgIGQ6IGlucHV0Ll9kYXlzLFxuICAgICAgICAgICAgICAgIE06IGlucHV0Ll9tb250aHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSB8fCAhaXNOYU4oK2lucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbltrZXldID0gK2lucHV0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi5taWxsaXNlY29uZHMgPSAraW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gYXNwTmV0UmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICAgICAgZDogdG9JbnQobWF0Y2hbREFURV0pICogc2lnbixcbiAgICAgICAgICAgICAgICBoOiB0b0ludChtYXRjaFtIT1VSXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG06IHRvSW50KG1hdGNoW01JTlVURV0pICogc2lnbixcbiAgICAgICAgICAgICAgICBzOiB0b0ludChtYXRjaFtTRUNPTkRdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbXM6IHRvSW50KGFic1JvdW5kKG1hdGNoW01JTExJU0VDT05EXSAqIDEwMDApKSAqIHNpZ24sIC8vIHRoZSBtaWxsaXNlY29uZCBkZWNpbWFsIHBvaW50IGlzIGluY2x1ZGVkIGluIHRoZSBtYXRjaFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBpc29SZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSBtYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeTogcGFyc2VJc28obWF0Y2hbMl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIE06IHBhcnNlSXNvKG1hdGNoWzNdLCBzaWduKSxcbiAgICAgICAgICAgICAgICB3OiBwYXJzZUlzbyhtYXRjaFs0XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgZDogcGFyc2VJc28obWF0Y2hbNV0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGg6IHBhcnNlSXNvKG1hdGNoWzZdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBtOiBwYXJzZUlzbyhtYXRjaFs3XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgczogcGFyc2VJc28obWF0Y2hbOF0sIHNpZ24pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChkdXJhdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGR1cmF0aW9uID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgKCdmcm9tJyBpbiBkdXJhdGlvbiB8fCAndG8nIGluIGR1cmF0aW9uKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGRpZmZSZXMgPSBtb21lbnRzRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbChkdXJhdGlvbi5mcm9tKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbChkdXJhdGlvbi50bylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBkdXJhdGlvbi5tcyA9IGRpZmZSZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgZHVyYXRpb24uTSA9IGRpZmZSZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0ID0gbmV3IER1cmF0aW9uKGR1cmF0aW9uKTtcblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19sb2NhbGUnKSkge1xuICAgICAgICAgICAgcmV0Ll9sb2NhbGUgPSBpbnB1dC5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfaXNWYWxpZCcpKSB7XG4gICAgICAgICAgICByZXQuX2lzVmFsaWQgPSBpbnB1dC5faXNWYWxpZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgY3JlYXRlRHVyYXRpb24uZm4gPSBEdXJhdGlvbi5wcm90b3R5cGU7XG4gICAgY3JlYXRlRHVyYXRpb24uaW52YWxpZCA9IGNyZWF0ZUludmFsaWQkMTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvKGlucCwgc2lnbikge1xuICAgICAgICAvLyBXZSdkIG5vcm1hbGx5IHVzZSB+fmlucCBmb3IgdGhpcywgYnV0IHVuZm9ydHVuYXRlbHkgaXQgYWxzb1xuICAgICAgICAvLyBjb252ZXJ0cyBmbG9hdHMgdG8gaW50cy5cbiAgICAgICAgLy8gaW5wIG1heSBiZSB1bmRlZmluZWQsIHNvIGNhcmVmdWwgY2FsbGluZyByZXBsYWNlIG9uIGl0LlxuICAgICAgICB2YXIgcmVzID0gaW5wICYmIHBhcnNlRmxvYXQoaW5wLnJlcGxhY2UoJywnLCAnLicpKTtcbiAgICAgICAgLy8gYXBwbHkgc2lnbiB3aGlsZSB3ZSdyZSBhdCBpdFxuICAgICAgICByZXR1cm4gKGlzTmFOKHJlcykgPyAwIDogcmVzKSAqIHNpZ247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzID0ge307XG5cbiAgICAgICAgcmVzLm1vbnRocyA9XG4gICAgICAgICAgICBvdGhlci5tb250aCgpIC0gYmFzZS5tb250aCgpICsgKG90aGVyLnllYXIoKSAtIGJhc2UueWVhcigpKSAqIDEyO1xuICAgICAgICBpZiAoYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpLmlzQWZ0ZXIob3RoZXIpKSB7XG4gICAgICAgICAgICAtLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gK290aGVyIC0gK2Jhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIGlmICghKGJhc2UuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG1pbGxpc2Vjb25kczogMCwgbW9udGhzOiAwIH07XG4gICAgICAgIH1cblxuICAgICAgICBvdGhlciA9IGNsb25lV2l0aE9mZnNldChvdGhlciwgYmFzZSk7XG4gICAgICAgIGlmIChiYXNlLmlzQmVmb3JlKG90aGVyKSkge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKG90aGVyLCBiYXNlKTtcbiAgICAgICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSAtcmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIHJlcy5tb250aHMgPSAtcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogcmVtb3ZlICduYW1lJyBhcmcgYWZ0ZXIgZGVwcmVjYXRpb24gaXMgcmVtb3ZlZFxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFkZGVyKGRpcmVjdGlvbiwgbmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgZHVyLCB0bXA7XG4gICAgICAgICAgICAvL2ludmVydCB0aGUgYXJndW1lbnRzLCBidXQgY29tcGxhaW4gYWJvdXQgaXRcbiAgICAgICAgICAgIGlmIChwZXJpb2QgIT09IG51bGwgJiYgIWlzTmFOKCtwZXJpb2QpKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAnbW9tZW50KCkuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcocGVyaW9kLCBudW1iZXIpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbW9tZW50KCkuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcobnVtYmVyLCBwZXJpb2QpLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdG1wID0gdmFsO1xuICAgICAgICAgICAgICAgIHZhbCA9IHBlcmlvZDtcbiAgICAgICAgICAgICAgICBwZXJpb2QgPSB0bXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGR1ciA9IGNyZWF0ZUR1cmF0aW9uKHZhbCwgcGVyaW9kKTtcbiAgICAgICAgICAgIGFkZFN1YnRyYWN0KHRoaXMsIGR1ciwgZGlyZWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0KG1vbSwgZHVyYXRpb24sIGlzQWRkaW5nLCB1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gYWJzUm91bmQoZHVyYXRpb24uX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzUm91bmQoZHVyYXRpb24uX21vbnRocyk7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0ID09IG51bGwgPyB0cnVlIDogdXBkYXRlT2Zmc2V0O1xuXG4gICAgICAgIGlmIChtb250aHMpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKG1vbSwgZ2V0KG1vbSwgJ01vbnRoJykgKyBtb250aHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRheXMpIHtcbiAgICAgICAgICAgIHNldCQxKG1vbSwgJ0RhdGUnLCBnZXQobW9tLCAnRGF0ZScpICsgZGF5cyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgICAgICBtb20uX2Quc2V0VGltZShtb20uX2QudmFsdWVPZigpICsgbWlsbGlzZWNvbmRzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChtb20sIGRheXMgfHwgbW9udGhzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBhZGQgPSBjcmVhdGVBZGRlcigxLCAnYWRkJyksXG4gICAgICAgIHN1YnRyYWN0ID0gY3JlYXRlQWRkZXIoLTEsICdzdWJ0cmFjdCcpO1xuXG4gICAgZnVuY3Rpb24gaXNTdHJpbmcoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gdHlwZSBNb21lbnRJbnB1dCA9IE1vbWVudCB8IERhdGUgfCBzdHJpbmcgfCBudW1iZXIgfCAobnVtYmVyIHwgc3RyaW5nKVtdIHwgTW9tZW50SW5wdXRPYmplY3QgfCB2b2lkOyAvLyBudWxsIHwgdW5kZWZpbmVkXG4gICAgZnVuY3Rpb24gaXNNb21lbnRJbnB1dChpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaXNNb21lbnQoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc0RhdGUoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc1N0cmluZyhpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNOdW1iZXJPclN0cmluZ0FycmF5KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNNb21lbnRJbnB1dE9iamVjdChpbnB1dCkgfHxcbiAgICAgICAgICAgIGlucHV0ID09PSBudWxsIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNNb21lbnRJbnB1dE9iamVjdChpbnB1dCkge1xuICAgICAgICB2YXIgb2JqZWN0VGVzdCA9IGlzT2JqZWN0KGlucHV0KSAmJiAhaXNPYmplY3RFbXB0eShpbnB1dCksXG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgICAgICAgJ3llYXJzJyxcbiAgICAgICAgICAgICAgICAneWVhcicsXG4gICAgICAgICAgICAgICAgJ3knLFxuICAgICAgICAgICAgICAgICdtb250aHMnLFxuICAgICAgICAgICAgICAgICdtb250aCcsXG4gICAgICAgICAgICAgICAgJ00nLFxuICAgICAgICAgICAgICAgICdkYXlzJyxcbiAgICAgICAgICAgICAgICAnZGF5JyxcbiAgICAgICAgICAgICAgICAnZCcsXG4gICAgICAgICAgICAgICAgJ2RhdGVzJyxcbiAgICAgICAgICAgICAgICAnZGF0ZScsXG4gICAgICAgICAgICAgICAgJ0QnLFxuICAgICAgICAgICAgICAgICdob3VycycsXG4gICAgICAgICAgICAgICAgJ2hvdXInLFxuICAgICAgICAgICAgICAgICdoJyxcbiAgICAgICAgICAgICAgICAnbWludXRlcycsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICAgICAgICAgJ20nLFxuICAgICAgICAgICAgICAgICdzZWNvbmRzJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kJyxcbiAgICAgICAgICAgICAgICAncycsXG4gICAgICAgICAgICAgICAgJ21pbGxpc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgICAgICAgICAnbXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIHByb3BlcnR5TGVuID0gcHJvcGVydGllcy5sZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnR5TGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXJPclN0cmluZ0FycmF5KGlucHV0KSB7XG4gICAgICAgIHZhciBhcnJheVRlc3QgPSBpc0FycmF5KGlucHV0KSxcbiAgICAgICAgICAgIGRhdGFUeXBlVGVzdCA9IGZhbHNlO1xuICAgICAgICBpZiAoYXJyYXlUZXN0KSB7XG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPVxuICAgICAgICAgICAgICAgIGlucHV0LmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWlzTnVtYmVyKGl0ZW0pICYmIGlzU3RyaW5nKGlucHV0KTtcbiAgICAgICAgICAgICAgICB9KS5sZW5ndGggPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5VGVzdCAmJiBkYXRhVHlwZVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNDYWxlbmRhclNwZWMoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICdzYW1lRGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dERheScsXG4gICAgICAgICAgICAgICAgJ2xhc3REYXknLFxuICAgICAgICAgICAgICAgICduZXh0V2VlaycsXG4gICAgICAgICAgICAgICAgJ2xhc3RXZWVrJyxcbiAgICAgICAgICAgICAgICAnc2FtZUVsc2UnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwcm9wZXJ0eTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gcHJvcGVydHlUZXN0IHx8IGhhc093blByb3AoaW5wdXQsIHByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmplY3RUZXN0ICYmIHByb3BlcnR5VGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDYWxlbmRhckZvcm1hdChteU1vbWVudCwgbm93KSB7XG4gICAgICAgIHZhciBkaWZmID0gbXlNb21lbnQuZGlmZihub3csICdkYXlzJywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBkaWZmIDwgLTZcbiAgICAgICAgICAgID8gJ3NhbWVFbHNlJ1xuICAgICAgICAgICAgOiBkaWZmIDwgLTFcbiAgICAgICAgICAgICAgPyAnbGFzdFdlZWsnXG4gICAgICAgICAgICAgIDogZGlmZiA8IDBcbiAgICAgICAgICAgICAgICA/ICdsYXN0RGF5J1xuICAgICAgICAgICAgICAgIDogZGlmZiA8IDFcbiAgICAgICAgICAgICAgICAgID8gJ3NhbWVEYXknXG4gICAgICAgICAgICAgICAgICA6IGRpZmYgPCAyXG4gICAgICAgICAgICAgICAgICAgID8gJ25leHREYXknXG4gICAgICAgICAgICAgICAgICAgIDogZGlmZiA8IDdcbiAgICAgICAgICAgICAgICAgICAgICA/ICduZXh0V2VlaydcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzYW1lRWxzZSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIkMSh0aW1lLCBmb3JtYXRzKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgZm9yIHNpbmdsZSBwYXJhbWV0ZXIsIGZvcm1hdHMgb25seSBvdmVybG9hZCB0byB0aGUgY2FsZW5kYXIgZnVuY3Rpb25cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmICghYXJndW1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc01vbWVudElucHV0KGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgICAgICAgICB0aW1lID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQ2FsZW5kYXJTcGVjKGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2Ugd2FudCB0byBjb21wYXJlIHRoZSBzdGFydCBvZiB0b2RheSwgdnMgdGhpcy5cbiAgICAgICAgLy8gR2V0dGluZyBzdGFydC1vZi10b2RheSBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgbG9jYWwvdXRjL29mZnNldCBvciBub3QuXG4gICAgICAgIHZhciBub3cgPSB0aW1lIHx8IGNyZWF0ZUxvY2FsKCksXG4gICAgICAgICAgICBzb2QgPSBjbG9uZVdpdGhPZmZzZXQobm93LCB0aGlzKS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGhvb2tzLmNhbGVuZGFyRm9ybWF0KHRoaXMsIHNvZCkgfHwgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgZm9ybWF0cyAmJlxuICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGZvcm1hdHNbZm9ybWF0XSlcbiAgICAgICAgICAgICAgICAgICAgPyBmb3JtYXRzW2Zvcm1hdF0uY2FsbCh0aGlzLCBub3cpXG4gICAgICAgICAgICAgICAgICAgIDogZm9ybWF0c1tmb3JtYXRdKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQoXG4gICAgICAgICAgICBvdXRwdXQgfHwgdGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoZm9ybWF0LCB0aGlzLCBjcmVhdGVMb2NhbChub3cpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IE1vbWVudCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA+IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsSW5wdXQudmFsdWVPZigpIDwgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmVmb3JlKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JldHdlZW4oZnJvbSwgdG8sIHVuaXRzLCBpbmNsdXNpdml0eSkge1xuICAgICAgICB2YXIgbG9jYWxGcm9tID0gaXNNb21lbnQoZnJvbSkgPyBmcm9tIDogY3JlYXRlTG9jYWwoZnJvbSksXG4gICAgICAgICAgICBsb2NhbFRvID0gaXNNb21lbnQodG8pID8gdG8gOiBjcmVhdGVMb2NhbCh0byk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsRnJvbS5pc1ZhbGlkKCkgJiYgbG9jYWxUby5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5jbHVzaXZpdHkgPSBpbmNsdXNpdml0eSB8fCAnKCknO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzBdID09PSAnKCdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNBZnRlcihsb2NhbEZyb20sIHVuaXRzKVxuICAgICAgICAgICAgICAgIDogIXRoaXMuaXNCZWZvcmUobG9jYWxGcm9tLCB1bml0cykpICYmXG4gICAgICAgICAgICAoaW5jbHVzaXZpdHlbMV0gPT09ICcpJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5pc0JlZm9yZShsb2NhbFRvLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQWZ0ZXIobG9jYWxUbywgdW5pdHMpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KSxcbiAgICAgICAgICAgIGlucHV0TXM7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID09PSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0TXMgPSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKSA8PSBpbnB1dE1zICYmXG4gICAgICAgICAgICAgICAgaW5wdXRNcyA8PSB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQWZ0ZXIoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNBZnRlcihpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQmVmb3JlKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQmVmb3JlKGlucHV0LCB1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlmZihpbnB1dCwgdW5pdHMsIGFzRmxvYXQpIHtcbiAgICAgICAgdmFyIHRoYXQsIHpvbmVEZWx0YSwgb3V0cHV0O1xuXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB0aGF0ID0gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCB0aGlzKTtcblxuICAgICAgICBpZiAoIXRoYXQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgem9uZURlbHRhID0gKHRoYXQudXRjT2Zmc2V0KCkgLSB0aGlzLnV0Y09mZnNldCgpKSAqIDZlNDtcblxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAxMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMWUzO1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwXG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyA2ZTQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwXG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCwgbmVnYXRlIGRzdFxuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDYwNDhlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCAqIDcsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gdGhpcyAtIHRoYXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXNGbG9hdCA/IG91dHB1dCA6IGFic0Zsb29yKG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhEaWZmKGEsIGIpIHtcbiAgICAgICAgaWYgKGEuZGF0ZSgpIDwgYi5kYXRlKCkpIHtcbiAgICAgICAgICAgIC8vIGVuZC1vZi1tb250aCBjYWxjdWxhdGlvbnMgd29yayBjb3JyZWN0IHdoZW4gdGhlIHN0YXJ0IG1vbnRoIGhhcyBtb3JlXG4gICAgICAgICAgICAvLyBkYXlzIHRoYW4gdGhlIGVuZCBtb250aC5cbiAgICAgICAgICAgIHJldHVybiAtbW9udGhEaWZmKGIsIGEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRpZmZlcmVuY2UgaW4gbW9udGhzXG4gICAgICAgIHZhciB3aG9sZU1vbnRoRGlmZiA9IChiLnllYXIoKSAtIGEueWVhcigpKSAqIDEyICsgKGIubW9udGgoKSAtIGEubW9udGgoKSksXG4gICAgICAgICAgICAvLyBiIGlzIGluIChhbmNob3IgLSAxIG1vbnRoLCBhbmNob3IgKyAxIG1vbnRoKVxuICAgICAgICAgICAgYW5jaG9yID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiwgJ21vbnRocycpLFxuICAgICAgICAgICAgYW5jaG9yMixcbiAgICAgICAgICAgIGFkanVzdDtcblxuICAgICAgICBpZiAoYiAtIGFuY2hvciA8IDApIHtcbiAgICAgICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmIC0gMSwgJ21vbnRocycpO1xuICAgICAgICAgICAgLy8gbGluZWFyIGFjcm9zcyB0aGUgbW9udGhcbiAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IgLSBhbmNob3IyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmICsgMSwgJ21vbnRocycpO1xuICAgICAgICAgICAgLy8gbGluZWFyIGFjcm9zcyB0aGUgbW9udGhcbiAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IyIC0gYW5jaG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8sIHJldHVybiB6ZXJvIGlmIG5lZ2F0aXZlIHplcm9cbiAgICAgICAgcmV0dXJuIC0od2hvbGVNb250aERpZmYgKyBhZGp1c3QpIHx8IDA7XG4gICAgfVxuXG4gICAgaG9va3MuZGVmYXVsdEZvcm1hdCA9ICdZWVlZLU1NLUREVEhIOm1tOnNzWic7XG4gICAgaG9va3MuZGVmYXVsdEZvcm1hdFV0YyA9ICdZWVlZLU1NLUREVEhIOm1tOnNzW1pdJztcblxuICAgIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmxvY2FsZSgnZW4nKS5mb3JtYXQoJ2RkZCBNTU0gREQgWVlZWSBISDptbTpzcyBbR01UXVpaJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmcoa2VlcE9mZnNldCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXRjID0ga2VlcE9mZnNldCAhPT0gdHJ1ZSxcbiAgICAgICAgICAgIG0gPSB1dGMgPyB0aGlzLmNsb25lKCkudXRjKCkgOiB0aGlzO1xuICAgICAgICBpZiAobS55ZWFyKCkgPCAwIHx8IG0ueWVhcigpID4gOTk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgICAgICBtLFxuICAgICAgICAgICAgICAgIHV0Y1xuICAgICAgICAgICAgICAgICAgICA/ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nXG4gICAgICAgICAgICAgICAgICAgIDogJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKSkge1xuICAgICAgICAgICAgLy8gbmF0aXZlIGltcGxlbWVudGF0aW9uIGlzIH41MHggZmFzdGVyLCB1c2UgaXQgd2hlbiB3ZSBjYW5cbiAgICAgICAgICAgIGlmICh1dGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkgKyB0aGlzLnV0Y09mZnNldCgpICogNjAgKiAxMDAwKVxuICAgICAgICAgICAgICAgICAgICAudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnWicsIGZvcm1hdE1vbWVudChtLCAnWicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KFxuICAgICAgICAgICAgbSxcbiAgICAgICAgICAgIHV0YyA/ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWidcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBodW1hbiByZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIG1vbWVudCB0aGF0IGNhblxuICAgICAqIGFsc28gYmUgZXZhbHVhdGVkIHRvIGdldCBhIG5ldyBtb21lbnQgd2hpY2ggaXMgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEBsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9kaXN0L2xhdGVzdC9kb2NzL2FwaS91dGlsLmh0bWwjdXRpbF9jdXN0b21faW5zcGVjdF9mdW5jdGlvbl9vbl9vYmplY3RzXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdtb21lbnQuaW52YWxpZCgvKiAnICsgdGhpcy5faSArICcgKi8pJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZnVuYyA9ICdtb21lbnQnLFxuICAgICAgICAgICAgem9uZSA9ICcnLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgIGRhdGV0aW1lLFxuICAgICAgICAgICAgc3VmZml4O1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2NhbCgpKSB7XG4gICAgICAgICAgICBmdW5jID0gdGhpcy51dGNPZmZzZXQoKSA9PT0gMCA/ICdtb21lbnQudXRjJyA6ICdtb21lbnQucGFyc2Vab25lJztcbiAgICAgICAgICAgIHpvbmUgPSAnWic7XG4gICAgICAgIH1cbiAgICAgICAgcHJlZml4ID0gJ1snICsgZnVuYyArICcoXCJdJztcbiAgICAgICAgeWVhciA9IDAgPD0gdGhpcy55ZWFyKCkgJiYgdGhpcy55ZWFyKCkgPD0gOTk5OSA/ICdZWVlZJyA6ICdZWVlZWVknO1xuICAgICAgICBkYXRldGltZSA9ICctTU0tRERbVF1ISDptbTpzcy5TU1MnO1xuICAgICAgICBzdWZmaXggPSB6b25lICsgJ1tcIildJztcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQocHJlZml4ICsgeWVhciArIGRhdGV0aW1lICsgc3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQoaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgaWYgKCFpbnB1dFN0cmluZykge1xuICAgICAgICAgICAgaW5wdXRTdHJpbmcgPSB0aGlzLmlzVXRjKClcbiAgICAgICAgICAgICAgICA/IGhvb2tzLmRlZmF1bHRGb3JtYXRVdGNcbiAgICAgICAgICAgICAgICA6IGhvb2tzLmRlZmF1bHRGb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdE1vbWVudCh0aGlzLCBpbnB1dFN0cmluZyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbSh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fCBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHsgdG86IHRoaXMsIGZyb206IHRpbWUgfSlcbiAgICAgICAgICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKCkpXG4gICAgICAgICAgICAgICAgLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbU5vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZyb20oY3JlYXRlTG9jYWwoKSwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG8odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IGZyb206IHRoaXMsIHRvOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvTm93KHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG8oY3JlYXRlTG9jYWwoKSwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgLy8gSWYgcGFzc2VkIGEgbG9jYWxlIGtleSwgaXQgd2lsbCBzZXQgdGhlIGxvY2FsZSBmb3IgdGhpc1xuICAgIC8vIGluc3RhbmNlLiAgT3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiB0aGUgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbiAgICAvLyB2YXJpYWJsZXMgZm9yIHRoaXMgaW5zdGFuY2UuXG4gICAgZnVuY3Rpb24gbG9jYWxlKGtleSkge1xuICAgICAgICB2YXIgbmV3TG9jYWxlRGF0YTtcblxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMb2NhbGVEYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobmV3TG9jYWxlRGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9jYWxlID0gbmV3TG9jYWxlRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLicsXG4gICAgICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICB2YXIgTVNfUEVSX1NFQ09ORCA9IDEwMDAsXG4gICAgICAgIE1TX1BFUl9NSU5VVEUgPSA2MCAqIE1TX1BFUl9TRUNPTkQsXG4gICAgICAgIE1TX1BFUl9IT1VSID0gNjAgKiBNU19QRVJfTUlOVVRFLFxuICAgICAgICBNU19QRVJfNDAwX1lFQVJTID0gKDM2NSAqIDQwMCArIDk3KSAqIDI0ICogTVNfUEVSX0hPVVI7XG5cbiAgICAvLyBhY3R1YWwgbW9kdWxvIC0gaGFuZGxlcyBuZWdhdGl2ZSBudW1iZXJzIChmb3IgZGF0ZXMgYmVmb3JlIDE5NzApOlxuICAgIGZ1bmN0aW9uIG1vZCQxKGRpdmlkZW5kLCBkaXZpc29yKSB7XG4gICAgICAgIHJldHVybiAoKGRpdmlkZW5kICUgZGl2aXNvcikgKyBkaXZpc29yKSAlIGRpdmlzb3I7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHksIG0sIGQpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHV0Y1N0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gRGF0ZS5VVEMgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSwgbSwgZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGFydE9mKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lLCBzdGFydE9mRGF0ZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgMCwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCkgLSAodGhpcy5tb250aCgpICUgMyksXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc29XZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgdGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksXG4gICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZE9mKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lLCBzdGFydE9mRGF0ZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSArIDEsIDAsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpICsgMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkgKyAxLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KCkgKyA3XG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkgKyAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPVxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUiAtXG4gICAgICAgICAgICAgICAgICAgIG1vZCQxKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksXG4gICAgICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICAgICApIC1cbiAgICAgICAgICAgICAgICAgICAgMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz0gTVNfUEVSX01JTlVURSAtIG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz0gTVNfUEVSX1NFQ09ORCAtIG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWx1ZU9mKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCkgLSAodGhpcy5fb2Zmc2V0IHx8IDApICogNjAwMDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5peCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkgLyAxMDAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0RhdGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9BcnJheSgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbS55ZWFyKCksXG4gICAgICAgICAgICBtLm1vbnRoKCksXG4gICAgICAgICAgICBtLmRhdGUoKSxcbiAgICAgICAgICAgIG0uaG91cigpLFxuICAgICAgICAgICAgbS5taW51dGUoKSxcbiAgICAgICAgICAgIG0uc2Vjb25kKCksXG4gICAgICAgICAgICBtLm1pbGxpc2Vjb25kKCksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9PYmplY3QoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXJzOiBtLnllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoczogbS5tb250aCgpLFxuICAgICAgICAgICAgZGF0ZTogbS5kYXRlKCksXG4gICAgICAgICAgICBob3VyczogbS5ob3VycygpLFxuICAgICAgICAgICAgbWludXRlczogbS5taW51dGVzKCksXG4gICAgICAgICAgICBzZWNvbmRzOiBtLnNlY29uZHMoKSxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogbS5taWxsaXNlY29uZHMoKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgIC8vIG5ldyBEYXRlKE5hTikudG9KU09OKCkgPT09IG51bGxcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy50b0lTT1N0cmluZygpIDogbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDIoKSB7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZCh7fSwgZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkQXQoKSB7XG4gICAgICAgIHJldHVybiBnZXRQYXJzaW5nRmxhZ3ModGhpcykub3ZlcmZsb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRpb25EYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5wdXQ6IHRoaXMuX2ksXG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMuX2YsXG4gICAgICAgICAgICBsb2NhbGU6IHRoaXMuX2xvY2FsZSxcbiAgICAgICAgICAgIGlzVVRDOiB0aGlzLl9pc1VUQyxcbiAgICAgICAgICAgIHN0cmljdDogdGhpcy5fc3RyaWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdOJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk4nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk4nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk5OJywgMCwgMCwgJ2VyYU5hbWUnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTk4nLCAwLCAwLCAnZXJhTmFycm93Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneScsIDFdLCAneW8nLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eScsIDJdLCAwLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eXknLCAzXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5eScsIDRdLCAwLCAnZXJhWWVhcicpO1xuXG4gICAgYWRkUmVnZXhUb2tlbignTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OTicsIG1hdGNoRXJhTmFtZSk7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OTk4nLCBtYXRjaEVyYU5hcnJvdyk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFxuICAgICAgICBbJ04nLCAnTk4nLCAnTk5OJywgJ05OTk4nLCAnTk5OTk4nXSxcbiAgICAgICAgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgdmFyIGVyYSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgICAgIGlmIChlcmEpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmEgPSBlcmE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRFcmEgPSBpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBhZGRSZWdleFRva2VuKCd5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneW8nLCBtYXRjaEVyYVllYXJPcmRpbmFsKTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWyd5JywgJ3l5JywgJ3l5eScsICd5eXl5J10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWyd5byddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtYXRjaDtcbiAgICAgICAgaWYgKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KSB7XG4gICAgICAgICAgICBtYXRjaCA9IGlucHV0Lm1hdGNoKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UoaW5wdXQsIG1hdGNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhcyhtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLl9lcmFzIHx8IGdldExvY2FsZSgnZW4nKS5fZXJhcztcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS5zaW5jZSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0uc2luY2UgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gK0luZmluaXR5O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBob29rcyhlcmFzW2ldLnVudGlsKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0udW50aWwgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVyYXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhc1BhcnNlKGVyYU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBhYmJyLFxuICAgICAgICAgICAgbmFycm93O1xuICAgICAgICBlcmFOYW1lID0gZXJhTmFtZS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgbmFtZSA9IGVyYXNbaV0ubmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgYWJiciA9IGVyYXNbaV0uYWJici50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgbmFycm93ID0gZXJhc1tpXS5uYXJyb3cudG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ04nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJiciA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hcnJvdyA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChbbmFtZSwgYWJiciwgbmFycm93XS5pbmRleE9mKGVyYU5hbWUpID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNDb252ZXJ0WWVhcihlcmEsIHllYXIpIHtcbiAgICAgICAgdmFyIGRpciA9IGVyYS5zaW5jZSA8PSBlcmEudW50aWwgPyArMSA6IC0xO1xuICAgICAgICBpZiAoeWVhciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaG9va3MoZXJhLnNpbmNlKS55ZWFyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaG9va3MoZXJhLnNpbmNlKS55ZWFyKCkgKyAoeWVhciAtIGVyYS5vZmZzZXQpICogZGlyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFtZSgpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFOYXJyb3coKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFycm93O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFycm93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYUFiYnIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhWWVhcigpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZGlyLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBkaXIgPSBlcmFzW2ldLnNpbmNlIDw9IGVyYXNbaV0udW50aWwgPyArMSA6IC0xO1xuXG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB8fFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnllYXIoKSAtIGhvb2tzKGVyYXNbaV0uc2luY2UpLnllYXIoKSkgKiBkaXIgK1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLm9mZnNldFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hbWVSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFtZVJlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzTmFtZVJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc0FiYnJSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc0FiYnJSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hcnJvd1JlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzTmFycm93UmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFBYmJyKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzQWJiclJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hbWUoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhTmFycm93KGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhWWVhck9yZGluYWwoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4IHx8IG1hdGNoVW5zaWduZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZUVyYXNQYXJzZSgpIHtcbiAgICAgICAgdmFyIGFiYnJQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG5hbWVQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG5hcnJvd1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZXJhc05hbWUsXG4gICAgICAgICAgICBlcmFzQWJicixcbiAgICAgICAgICAgIGVyYXNOYXJyb3csXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCk7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBlcmFzTmFtZSA9IHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFtZSk7XG4gICAgICAgICAgICBlcmFzQWJiciA9IHJlZ2V4RXNjYXBlKGVyYXNbaV0uYWJicik7XG4gICAgICAgICAgICBlcmFzTmFycm93ID0gcmVnZXhFc2NhcGUoZXJhc1tpXS5uYXJyb3cpO1xuXG4gICAgICAgICAgICBuYW1lUGllY2VzLnB1c2goZXJhc05hbWUpO1xuICAgICAgICAgICAgYWJiclBpZWNlcy5wdXNoKGVyYXNBYmJyKTtcbiAgICAgICAgICAgIG5hcnJvd1BpZWNlcy5wdXNoKGVyYXNOYXJyb3cpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzTmFtZSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNBYmJyKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc05hcnJvdyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lcmFzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNOYW1lUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBuYW1lUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc0FiYnJSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIGFiYnJQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFycm93UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIG5hcnJvd1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ2dnJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnR0cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1llYXJGb3JtYXRUb2tlbih0b2tlbiwgZ2V0dGVyKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKDAsIFt0b2tlbiwgdG9rZW4ubGVuZ3RoXSwgMCwgZ2V0dGVyKTtcbiAgICB9XG5cbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZ2cnLCAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHR0cnLCAnaXNvV2Vla1llYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignZycsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdHRycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdnZycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHR0cnLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZ2cnLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihcbiAgICAgICAgWydnZ2dnJywgJ2dnZ2dnJywgJ0dHR0cnLCAnR0dHR0cnXSxcbiAgICAgICAgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAyKV0gPSB0b0ludChpbnB1dCk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZycsICdHRyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0U2V0V2Vla1llYXJIZWxwZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIHRoaXMud2VlaygpLFxuICAgICAgICAgICAgdGhpcy53ZWVrZGF5KCkgKyB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csXG4gICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csXG4gICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3lcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrWWVhcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0U2V0V2Vla1llYXJIZWxwZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIHRoaXMuaXNvV2VlaygpLFxuICAgICAgICAgICAgdGhpcy5pc29XZWVrZGF5KCksXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgNFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldElTT1dlZWtzSW5ZZWFyKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldElTT1dlZWtzSW5JU09XZWVrWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMuaXNvV2Vla1llYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJblllYXIoKSB7XG4gICAgICAgIHZhciB3ZWVrSW5mbyA9IHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIHdlZWtJbmZvLmRvdywgd2Vla0luZm8uZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXZWVrc0luV2Vla1llYXIoKSB7XG4gICAgICAgIHZhciB3ZWVrSW5mbyA9IHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy53ZWVrWWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXJIZWxwZXIoaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrc1RhcmdldDtcbiAgICAgICAgaWYgKGlucHV0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKHRoaXMsIGRvdywgZG95KS55ZWFyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2Vla3NUYXJnZXQgPSB3ZWVrc0luWWVhcihpbnB1dCwgZG93LCBkb3kpO1xuICAgICAgICAgICAgaWYgKHdlZWsgPiB3ZWVrc1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHdlZWsgPSB3ZWVrc1RhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZXRXZWVrQWxsLmNhbGwodGhpcywgaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFdlZWtBbGwod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXJEYXRhID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZShkYXlPZlllYXJEYXRhLnllYXIsIDAsIGRheU9mWWVhckRhdGEuZGF5T2ZZZWFyKTtcblxuICAgICAgICB0aGlzLnllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpKTtcbiAgICAgICAgdGhpcy5tb250aChkYXRlLmdldFVUQ01vbnRoKCkpO1xuICAgICAgICB0aGlzLmRhdGUoZGF0ZS5nZXRVVENEYXRlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUScsIDAsICdRbycsICdxdWFydGVyJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdRJywgbWF0Y2gxKTtcbiAgICBhZGRQYXJzZVRva2VuKCdRJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSAodG9JbnQoaW5wdXQpIC0gMSkgKiAzO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0UXVhcnRlcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbFxuICAgICAgICAgICAgPyBNYXRoLmNlaWwoKHRoaXMubW9udGgoKSArIDEpIC8gMylcbiAgICAgICAgICAgIDogdGhpcy5tb250aCgoaW5wdXQgLSAxKSAqIDMgKyAodGhpcy5tb250aCgpICUgMykpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdEJywgWydERCcsIDJdLCAnRG8nLCAnZGF0ZScpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignREQnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignRG8nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHJldHVybiBpc1N0cmljdFxuICAgICAgICAgICAgPyBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2UgfHwgbG9jYWxlLl9vcmRpbmFsUGFyc2VcbiAgICAgICAgICAgIDogbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudDtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydEJywgJ0REJ10sIERBVEUpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtEQVRFXSA9IHRvSW50KGlucHV0Lm1hdGNoKG1hdGNoMXRvMilbMF0pO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldERheU9mTW9udGggPSBtYWtlR2V0U2V0KCdEYXRlJywgdHJ1ZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignREREJywgWydEREREJywgM10sICdERERvJywgJ2RheU9mWWVhcicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignREREJywgbWF0Y2gxdG8zKTtcbiAgICBhZGRSZWdleFRva2VuKCdEREREJywgbWF0Y2gzKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnREREJywgJ0REREQnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZZZWFyKGlucHV0KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXIgPVxuICAgICAgICAgICAgTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgICAodGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpIC0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ3llYXInKSkgLyA4NjRlNVxuICAgICAgICAgICAgKSArIDE7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gZGF5T2ZZZWFyIDogdGhpcy5hZGQoaW5wdXQgLSBkYXlPZlllYXIsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ20nLCBbJ21tJywgMl0sIDAsICdtaW51dGUnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ20nLCBtYXRjaDF0bzIsIG1hdGNoMXRvMkhhc1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ21tJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydtJywgJ21tJ10sIE1JTlVURSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0TWludXRlID0gbWFrZUdldFNldCgnTWludXRlcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdzJywgWydzcycsIDJdLCAwLCAnc2Vjb25kJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdzJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJIYXNaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdzcycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsncycsICdzcyddLCBTRUNPTkQpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFNlY29uZCA9IG1ha2VHZXRTZXQoJ1NlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTJywgM10sIDAsICdtaWxsaXNlY29uZCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTUycsIDRdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTJywgNV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTUycsIDZdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTUycsIDddLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTJywgOF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTUycsIDldLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDAwO1xuICAgIH0pO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUycsIG1hdGNoMXRvMywgbWF0Y2gxKTtcbiAgICBhZGRSZWdleFRva2VuKCdTUycsIG1hdGNoMXRvMywgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdTU1MnLCBtYXRjaDF0bzMsIG1hdGNoMyk7XG5cbiAgICB2YXIgdG9rZW4sIGdldFNldE1pbGxpc2Vjb25kO1xuICAgIGZvciAodG9rZW4gPSAnU1NTUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUmVnZXhUb2tlbih0b2tlbiwgbWF0Y2hVbnNpZ25lZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VNcyhpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTUlMTElTRUNPTkRdID0gdG9JbnQoKCcwLicgKyBpbnB1dCkgKiAxMDAwKTtcbiAgICB9XG5cbiAgICBmb3IgKHRva2VuID0gJ1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFBhcnNlVG9rZW4odG9rZW4sIHBhcnNlTXMpO1xuICAgIH1cblxuICAgIGdldFNldE1pbGxpc2Vjb25kID0gbWFrZUdldFNldCgnTWlsbGlzZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3onLCAwLCAwLCAnem9uZUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignenonLCAwLCAwLCAnem9uZU5hbWUnKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFpvbmVBYmJyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnVVRDJyA6ICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFpvbmVOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUnIDogJyc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvID0gTW9tZW50LnByb3RvdHlwZTtcblxuICAgIHByb3RvLmFkZCA9IGFkZDtcbiAgICBwcm90by5jYWxlbmRhciA9IGNhbGVuZGFyJDE7XG4gICAgcHJvdG8uY2xvbmUgPSBjbG9uZTtcbiAgICBwcm90by5kaWZmID0gZGlmZjtcbiAgICBwcm90by5lbmRPZiA9IGVuZE9mO1xuICAgIHByb3RvLmZvcm1hdCA9IGZvcm1hdDtcbiAgICBwcm90by5mcm9tID0gZnJvbTtcbiAgICBwcm90by5mcm9tTm93ID0gZnJvbU5vdztcbiAgICBwcm90by50byA9IHRvO1xuICAgIHByb3RvLnRvTm93ID0gdG9Ob3c7XG4gICAgcHJvdG8uZ2V0ID0gc3RyaW5nR2V0O1xuICAgIHByb3RvLmludmFsaWRBdCA9IGludmFsaWRBdDtcbiAgICBwcm90by5pc0FmdGVyID0gaXNBZnRlcjtcbiAgICBwcm90by5pc0JlZm9yZSA9IGlzQmVmb3JlO1xuICAgIHByb3RvLmlzQmV0d2VlbiA9IGlzQmV0d2VlbjtcbiAgICBwcm90by5pc1NhbWUgPSBpc1NhbWU7XG4gICAgcHJvdG8uaXNTYW1lT3JBZnRlciA9IGlzU2FtZU9yQWZ0ZXI7XG4gICAgcHJvdG8uaXNTYW1lT3JCZWZvcmUgPSBpc1NhbWVPckJlZm9yZTtcbiAgICBwcm90by5pc1ZhbGlkID0gaXNWYWxpZCQyO1xuICAgIHByb3RvLmxhbmcgPSBsYW5nO1xuICAgIHByb3RvLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBwcm90by5sb2NhbGVEYXRhID0gbG9jYWxlRGF0YTtcbiAgICBwcm90by5tYXggPSBwcm90b3R5cGVNYXg7XG4gICAgcHJvdG8ubWluID0gcHJvdG90eXBlTWluO1xuICAgIHByb3RvLnBhcnNpbmdGbGFncyA9IHBhcnNpbmdGbGFncztcbiAgICBwcm90by5zZXQgPSBzdHJpbmdTZXQ7XG4gICAgcHJvdG8uc3RhcnRPZiA9IHN0YXJ0T2Y7XG4gICAgcHJvdG8uc3VidHJhY3QgPSBzdWJ0cmFjdDtcbiAgICBwcm90by50b0FycmF5ID0gdG9BcnJheTtcbiAgICBwcm90by50b09iamVjdCA9IHRvT2JqZWN0O1xuICAgIHByb3RvLnRvRGF0ZSA9IHRvRGF0ZTtcbiAgICBwcm90by50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nO1xuICAgIHByb3RvLmluc3BlY3QgPSBpbnNwZWN0O1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuZm9yICE9IG51bGwpIHtcbiAgICAgICAgcHJvdG9bU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJ01vbWVudDwnICsgdGhpcy5mb3JtYXQoKSArICc+JztcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcHJvdG8udG9KU09OID0gdG9KU09OO1xuICAgIHByb3RvLnRvU3RyaW5nID0gdG9TdHJpbmc7XG4gICAgcHJvdG8udW5peCA9IHVuaXg7XG4gICAgcHJvdG8udmFsdWVPZiA9IHZhbHVlT2Y7XG4gICAgcHJvdG8uY3JlYXRpb25EYXRhID0gY3JlYXRpb25EYXRhO1xuICAgIHByb3RvLmVyYU5hbWUgPSBnZXRFcmFOYW1lO1xuICAgIHByb3RvLmVyYU5hcnJvdyA9IGdldEVyYU5hcnJvdztcbiAgICBwcm90by5lcmFBYmJyID0gZ2V0RXJhQWJicjtcbiAgICBwcm90by5lcmFZZWFyID0gZ2V0RXJhWWVhcjtcbiAgICBwcm90by55ZWFyID0gZ2V0U2V0WWVhcjtcbiAgICBwcm90by5pc0xlYXBZZWFyID0gZ2V0SXNMZWFwWWVhcjtcbiAgICBwcm90by53ZWVrWWVhciA9IGdldFNldFdlZWtZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtZZWFyID0gZ2V0U2V0SVNPV2Vla1llYXI7XG4gICAgcHJvdG8ucXVhcnRlciA9IHByb3RvLnF1YXJ0ZXJzID0gZ2V0U2V0UXVhcnRlcjtcbiAgICBwcm90by5tb250aCA9IGdldFNldE1vbnRoO1xuICAgIHByb3RvLmRheXNJbk1vbnRoID0gZ2V0RGF5c0luTW9udGg7XG4gICAgcHJvdG8ud2VlayA9IHByb3RvLndlZWtzID0gZ2V0U2V0V2VlaztcbiAgICBwcm90by5pc29XZWVrID0gcHJvdG8uaXNvV2Vla3MgPSBnZXRTZXRJU09XZWVrO1xuICAgIHByb3RvLndlZWtzSW5ZZWFyID0gZ2V0V2Vla3NJblllYXI7XG4gICAgcHJvdG8ud2Vla3NJbldlZWtZZWFyID0gZ2V0V2Vla3NJbldlZWtZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5ZZWFyID0gZ2V0SVNPV2Vla3NJblllYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJbklTT1dlZWtZZWFyID0gZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyO1xuICAgIHByb3RvLmRhdGUgPSBnZXRTZXREYXlPZk1vbnRoO1xuICAgIHByb3RvLmRheSA9IHByb3RvLmRheXMgPSBnZXRTZXREYXlPZldlZWs7XG4gICAgcHJvdG8ud2Vla2RheSA9IGdldFNldExvY2FsZURheU9mV2VlaztcbiAgICBwcm90by5pc29XZWVrZGF5ID0gZ2V0U2V0SVNPRGF5T2ZXZWVrO1xuICAgIHByb3RvLmRheU9mWWVhciA9IGdldFNldERheU9mWWVhcjtcbiAgICBwcm90by5ob3VyID0gcHJvdG8uaG91cnMgPSBnZXRTZXRIb3VyO1xuICAgIHByb3RvLm1pbnV0ZSA9IHByb3RvLm1pbnV0ZXMgPSBnZXRTZXRNaW51dGU7XG4gICAgcHJvdG8uc2Vjb25kID0gcHJvdG8uc2Vjb25kcyA9IGdldFNldFNlY29uZDtcbiAgICBwcm90by5taWxsaXNlY29uZCA9IHByb3RvLm1pbGxpc2Vjb25kcyA9IGdldFNldE1pbGxpc2Vjb25kO1xuICAgIHByb3RvLnV0Y09mZnNldCA9IGdldFNldE9mZnNldDtcbiAgICBwcm90by51dGMgPSBzZXRPZmZzZXRUb1VUQztcbiAgICBwcm90by5sb2NhbCA9IHNldE9mZnNldFRvTG9jYWw7XG4gICAgcHJvdG8ucGFyc2Vab25lID0gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQ7XG4gICAgcHJvdG8uaGFzQWxpZ25lZEhvdXJPZmZzZXQgPSBoYXNBbGlnbmVkSG91ck9mZnNldDtcbiAgICBwcm90by5pc0RTVCA9IGlzRGF5bGlnaHRTYXZpbmdUaW1lO1xuICAgIHByb3RvLmlzTG9jYWwgPSBpc0xvY2FsO1xuICAgIHByb3RvLmlzVXRjT2Zmc2V0ID0gaXNVdGNPZmZzZXQ7XG4gICAgcHJvdG8uaXNVdGMgPSBpc1V0YztcbiAgICBwcm90by5pc1VUQyA9IGlzVXRjO1xuICAgIHByb3RvLnpvbmVBYmJyID0gZ2V0Wm9uZUFiYnI7XG4gICAgcHJvdG8uem9uZU5hbWUgPSBnZXRab25lTmFtZTtcbiAgICBwcm90by5kYXRlcyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ2RhdGVzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYXRlIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0U2V0RGF5T2ZNb250aFxuICAgICk7XG4gICAgcHJvdG8ubW9udGhzID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkJyxcbiAgICAgICAgZ2V0U2V0TW9udGhcbiAgICApO1xuICAgIHByb3RvLnllYXJzID0gZGVwcmVjYXRlKFxuICAgICAgICAneWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCcsXG4gICAgICAgIGdldFNldFllYXJcbiAgICApO1xuICAgIHByb3RvLnpvbmUgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy96b25lLycsXG4gICAgICAgIGdldFNldFpvbmVcbiAgICApO1xuICAgIHByb3RvLmlzRFNUU2hpZnRlZCA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ2lzRFNUU2hpZnRlZCBpcyBkZXByZWNhdGVkLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kc3Qtc2hpZnRlZC8gZm9yIG1vcmUgaW5mb3JtYXRpb24nLFxuICAgICAgICBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWRcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlVW5peChpbnB1dCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoaW5wdXQgKiAxMDAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJblpvbmUoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpLnBhcnNlWm9uZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZVBhcnNlUG9zdEZvcm1hdChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8kMSA9IExvY2FsZS5wcm90b3R5cGU7XG5cbiAgICBwcm90byQxLmNhbGVuZGFyID0gY2FsZW5kYXI7XG4gICAgcHJvdG8kMS5sb25nRGF0ZUZvcm1hdCA9IGxvbmdEYXRlRm9ybWF0O1xuICAgIHByb3RvJDEuaW52YWxpZERhdGUgPSBpbnZhbGlkRGF0ZTtcbiAgICBwcm90byQxLm9yZGluYWwgPSBvcmRpbmFsO1xuICAgIHByb3RvJDEucHJlcGFyc2UgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5wb3N0Zm9ybWF0ID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucmVsYXRpdmVUaW1lID0gcmVsYXRpdmVUaW1lO1xuICAgIHByb3RvJDEucGFzdEZ1dHVyZSA9IHBhc3RGdXR1cmU7XG4gICAgcHJvdG8kMS5zZXQgPSBzZXQ7XG4gICAgcHJvdG8kMS5lcmFzID0gbG9jYWxlRXJhcztcbiAgICBwcm90byQxLmVyYXNQYXJzZSA9IGxvY2FsZUVyYXNQYXJzZTtcbiAgICBwcm90byQxLmVyYXNDb252ZXJ0WWVhciA9IGxvY2FsZUVyYXNDb252ZXJ0WWVhcjtcbiAgICBwcm90byQxLmVyYXNBYmJyUmVnZXggPSBlcmFzQWJiclJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hbWVSZWdleCA9IGVyYXNOYW1lUmVnZXg7XG4gICAgcHJvdG8kMS5lcmFzTmFycm93UmVnZXggPSBlcmFzTmFycm93UmVnZXg7XG5cbiAgICBwcm90byQxLm1vbnRocyA9IGxvY2FsZU1vbnRocztcbiAgICBwcm90byQxLm1vbnRoc1Nob3J0ID0gbG9jYWxlTW9udGhzU2hvcnQ7XG4gICAgcHJvdG8kMS5tb250aHNQYXJzZSA9IGxvY2FsZU1vbnRoc1BhcnNlO1xuICAgIHByb3RvJDEubW9udGhzUmVnZXggPSBtb250aHNSZWdleDtcbiAgICBwcm90byQxLm1vbnRoc1Nob3J0UmVnZXggPSBtb250aHNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2VlayA9IGxvY2FsZVdlZWs7XG4gICAgcHJvdG8kMS5maXJzdERheU9mWWVhciA9IGxvY2FsZUZpcnN0RGF5T2ZZZWFyO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZldlZWsgPSBsb2NhbGVGaXJzdERheU9mV2VlaztcblxuICAgIHByb3RvJDEud2Vla2RheXMgPSBsb2NhbGVXZWVrZGF5cztcbiAgICBwcm90byQxLndlZWtkYXlzTWluID0gbG9jYWxlV2Vla2RheXNNaW47XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0ID0gbG9jYWxlV2Vla2RheXNTaG9ydDtcbiAgICBwcm90byQxLndlZWtkYXlzUGFyc2UgPSBsb2NhbGVXZWVrZGF5c1BhcnNlO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5c1JlZ2V4ID0gd2Vla2RheXNSZWdleDtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnRSZWdleCA9IHdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWtkYXlzTWluUmVnZXggPSB3ZWVrZGF5c01pblJlZ2V4O1xuXG4gICAgcHJvdG8kMS5pc1BNID0gbG9jYWxlSXNQTTtcbiAgICBwcm90byQxLm1lcmlkaWVtID0gbG9jYWxlTWVyaWRpZW07XG5cbiAgICBmdW5jdGlvbiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgc2V0dGVyKSB7XG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHV0YyA9IGNyZWF0ZVVUQygpLnNldChzZXR0ZXIsIGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGxvY2FsZVtmaWVsZF0odXRjLCBmb3JtYXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCAnbW9udGgnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgb3V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIGksIGZpZWxkLCAnbW9udGgnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIC8vICgpXG4gICAgLy8gKDUpXG4gICAgLy8gKGZtdCwgNSlcbiAgICAvLyAoZm10KVxuICAgIC8vICh0cnVlKVxuICAgIC8vICh0cnVlLCA1KVxuICAgIC8vICh0cnVlLCBmbXQsIDUpXG4gICAgLy8gKHRydWUsIGZtdClcbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhbGVTb3J0ZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGxvY2FsZVNvcnRlZDtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgbG9jYWxlU29ydGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICBzaGlmdCA9IGxvY2FsZVNvcnRlZCA/IGxvY2FsZS5fd2Vlay5kb3cgOiAwLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCAoaW5kZXggKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCAoaSArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzKGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzU2hvcnQoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRoc1Nob3J0Jyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5cycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c1Nob3J0KGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5c1Nob3J0Jyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzTWluKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5c01pbicpO1xuICAgIH1cblxuICAgIGdldFNldEdsb2JhbExvY2FsZSgnZW4nLCB7XG4gICAgICAgIGVyYXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDEtMDEtMDEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiArSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdBbm5vIERvbWluaScsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQUQnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdBRCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMC0xMi0zMScsXG4gICAgICAgICAgICAgICAgdW50aWw6IC1JbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0JlZm9yZSBDaHJpc3QnLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0JDJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQkMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHRofHN0fG5kfHJkKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgdG9JbnQoKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFNpZGUgZWZmZWN0IGltcG9ydHNcblxuICAgIGhvb2tzLmxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldEdsb2JhbExvY2FsZVxuICAgICk7XG4gICAgaG9va3MubGFuZ0RhdGEgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQubGFuZ0RhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGVEYXRhIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0TG9jYWxlXG4gICAgKTtcblxuICAgIHZhciBtYXRoQWJzID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBhYnMoKSB7XG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPSBtYXRoQWJzKHRoaXMuX21pbGxpc2Vjb25kcyk7XG4gICAgICAgIHRoaXMuX2RheXMgPSBtYXRoQWJzKHRoaXMuX2RheXMpO1xuICAgICAgICB0aGlzLl9tb250aHMgPSBtYXRoQWJzKHRoaXMuX21vbnRocyk7XG5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtYXRoQWJzKGRhdGEubWlsbGlzZWNvbmRzKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gbWF0aEFicyhkYXRhLnNlY29uZHMpO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtYXRoQWJzKGRhdGEubWludXRlcyk7XG4gICAgICAgIGRhdGEuaG91cnMgPSBtYXRoQWJzKGRhdGEuaG91cnMpO1xuICAgICAgICBkYXRhLm1vbnRocyA9IG1hdGhBYnMoZGF0YS5tb250aHMpO1xuICAgICAgICBkYXRhLnllYXJzID0gbWF0aEFicyhkYXRhLnllYXJzKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdCQxKGR1cmF0aW9uLCBpbnB1dCwgdmFsdWUsIGRpcmVjdGlvbikge1xuICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVEdXJhdGlvbihpbnB1dCwgdmFsdWUpO1xuXG4gICAgICAgIGR1cmF0aW9uLl9taWxsaXNlY29uZHMgKz0gZGlyZWN0aW9uICogb3RoZXIuX21pbGxpc2Vjb25kcztcbiAgICAgICAgZHVyYXRpb24uX2RheXMgKz0gZGlyZWN0aW9uICogb3RoZXIuX2RheXM7XG4gICAgICAgIGR1cmF0aW9uLl9tb250aHMgKz0gZGlyZWN0aW9uICogb3RoZXIuX21vbnRocztcblxuICAgICAgICByZXR1cm4gZHVyYXRpb24uX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIGFkZCgxLCAncycpIG9yIGFkZChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBhZGQkMShpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAxKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBzdWJ0cmFjdCgxLCAncycpIG9yIHN1YnRyYWN0KGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIHN1YnRyYWN0JDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgLTEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0NlaWwobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnViYmxlKCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMsXG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMsXG4gICAgICAgICAgICBkYXRhID0gdGhpcy5fZGF0YSxcbiAgICAgICAgICAgIHNlY29uZHMsXG4gICAgICAgICAgICBtaW51dGVzLFxuICAgICAgICAgICAgaG91cnMsXG4gICAgICAgICAgICB5ZWFycyxcbiAgICAgICAgICAgIG1vbnRoc0Zyb21EYXlzO1xuXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBtaXggb2YgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcywgYnViYmxlIGRvd24gZmlyc3RcbiAgICAgICAgLy8gY2hlY2s6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yMTY2XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA+PSAwICYmIGRheXMgPj0gMCAmJiBtb250aHMgPj0gMCkgfHxcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzIDw9IDAgJiYgZGF5cyA8PSAwICYmIG1vbnRocyA8PSAwKVxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyArPSBhYnNDZWlsKG1vbnRoc1RvRGF5cyhtb250aHMpICsgZGF5cykgKiA4NjRlNTtcbiAgICAgICAgICAgIGRheXMgPSAwO1xuICAgICAgICAgICAgbW9udGhzID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBidWJibGVzIHVwIHZhbHVlcywgc2VlIHRoZSB0ZXN0cyBmb3JcbiAgICAgICAgLy8gZXhhbXBsZXMgb2Ygd2hhdCB0aGF0IG1lYW5zLlxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcyAlIDEwMDA7XG5cbiAgICAgICAgc2Vjb25kcyA9IGFic0Zsb29yKG1pbGxpc2Vjb25kcyAvIDEwMDApO1xuICAgICAgICBkYXRhLnNlY29uZHMgPSBzZWNvbmRzICUgNjA7XG5cbiAgICAgICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGRhdGEubWludXRlcyA9IG1pbnV0ZXMgJSA2MDtcblxuICAgICAgICBob3VycyA9IGFic0Zsb29yKG1pbnV0ZXMgLyA2MCk7XG4gICAgICAgIGRhdGEuaG91cnMgPSBob3VycyAlIDI0O1xuXG4gICAgICAgIGRheXMgKz0gYWJzRmxvb3IoaG91cnMgLyAyNCk7XG5cbiAgICAgICAgLy8gY29udmVydCBkYXlzIHRvIG1vbnRoc1xuICAgICAgICBtb250aHNGcm9tRGF5cyA9IGFic0Zsb29yKGRheXNUb01vbnRocyhkYXlzKSk7XG4gICAgICAgIG1vbnRocyArPSBtb250aHNGcm9tRGF5cztcbiAgICAgICAgZGF5cyAtPSBhYnNDZWlsKG1vbnRoc1RvRGF5cyhtb250aHNGcm9tRGF5cykpO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICBkYXRhLmRheXMgPSBkYXlzO1xuICAgICAgICBkYXRhLm1vbnRocyA9IG1vbnRocztcbiAgICAgICAgZGF0YS55ZWFycyA9IHllYXJzO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNUb01vbnRocyhkYXlzKSB7XG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDE0NjA5NyBkYXlzICh0YWtpbmcgaW50byBhY2NvdW50IGxlYXAgeWVhciBydWxlcylcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTIgbW9udGhzID09PSA0ODAwXG4gICAgICAgIHJldHVybiAoZGF5cyAqIDQ4MDApIC8gMTQ2MDk3O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1RvRGF5cyhtb250aHMpIHtcbiAgICAgICAgLy8gdGhlIHJldmVyc2Ugb2YgZGF5c1RvTW9udGhzXG4gICAgICAgIHJldHVybiAobW9udGhzICogMTQ2MDk3KSAvIDQ4MDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXModW5pdHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF5cyxcbiAgICAgICAgICAgIG1vbnRocyxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcztcblxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcblxuICAgICAgICBpZiAodW5pdHMgPT09ICdtb250aCcgfHwgdW5pdHMgPT09ICdxdWFydGVyJyB8fCB1bml0cyA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIG1pbGxpc2Vjb25kcyAvIDg2NGU1O1xuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzICsgZGF5c1RvTW9udGhzKGRheXMpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocztcbiAgICAgICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDM7XG4gICAgICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBtaWxsaXNlY29uZHMgc2VwYXJhdGVseSBiZWNhdXNlIG9mIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIChpc3N1ZSAjMTg2NylcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgTWF0aC5yb3VuZChtb250aHNUb0RheXModGhpcy5fbW9udGhzKSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzIC8gNyArIG1pbGxpc2Vjb25kcyAvIDYwNDhlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyArIG1pbGxpc2Vjb25kcyAvIDg2NGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDI0ICsgbWlsbGlzZWNvbmRzIC8gMzZlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDE0NDAgKyBtaWxsaXNlY29uZHMgLyA2ZTQ7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiA4NjQwMCArIG1pbGxpc2Vjb25kcyAvIDEwMDA7XG4gICAgICAgICAgICAgICAgLy8gTWF0aC5mbG9vciBwcmV2ZW50cyBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyBoZXJlXG4gICAgICAgICAgICAgICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihkYXlzICogODY0ZTUpICsgbWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biB1bml0ICcgKyB1bml0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlQXMoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzKGFsaWFzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgYXNNaWxsaXNlY29uZHMgPSBtYWtlQXMoJ21zJyksXG4gICAgICAgIGFzU2Vjb25kcyA9IG1ha2VBcygncycpLFxuICAgICAgICBhc01pbnV0ZXMgPSBtYWtlQXMoJ20nKSxcbiAgICAgICAgYXNIb3VycyA9IG1ha2VBcygnaCcpLFxuICAgICAgICBhc0RheXMgPSBtYWtlQXMoJ2QnKSxcbiAgICAgICAgYXNXZWVrcyA9IG1ha2VBcygndycpLFxuICAgICAgICBhc01vbnRocyA9IG1ha2VBcygnTScpLFxuICAgICAgICBhc1F1YXJ0ZXJzID0gbWFrZUFzKCdRJyksXG4gICAgICAgIGFzWWVhcnMgPSBtYWtlQXMoJ3knKSxcbiAgICAgICAgdmFsdWVPZiQxID0gYXNNaWxsaXNlY29uZHM7XG5cbiAgICBmdW5jdGlvbiBjbG9uZSQxKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24odGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0JDIodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXNbdW5pdHMgKyAncyddKCkgOiBOYU47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldHRlcihuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9kYXRhW25hbWVdIDogTmFOO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBtaWxsaXNlY29uZHMgPSBtYWtlR2V0dGVyKCdtaWxsaXNlY29uZHMnKSxcbiAgICAgICAgc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ3NlY29uZHMnKSxcbiAgICAgICAgbWludXRlcyA9IG1ha2VHZXR0ZXIoJ21pbnV0ZXMnKSxcbiAgICAgICAgaG91cnMgPSBtYWtlR2V0dGVyKCdob3VycycpLFxuICAgICAgICBkYXlzID0gbWFrZUdldHRlcignZGF5cycpLFxuICAgICAgICBtb250aHMgPSBtYWtlR2V0dGVyKCdtb250aHMnKSxcbiAgICAgICAgeWVhcnMgPSBtYWtlR2V0dGVyKCd5ZWFycycpO1xuXG4gICAgZnVuY3Rpb24gd2Vla3MoKSB7XG4gICAgICAgIHJldHVybiBhYnNGbG9vcih0aGlzLmRheXMoKSAvIDcpO1xuICAgIH1cblxuICAgIHZhciByb3VuZCA9IE1hdGgucm91bmQsXG4gICAgICAgIHRocmVzaG9sZHMgPSB7XG4gICAgICAgICAgICBzczogNDQsIC8vIGEgZmV3IHNlY29uZHMgdG8gc2Vjb25kc1xuICAgICAgICAgICAgczogNDUsIC8vIHNlY29uZHMgdG8gbWludXRlXG4gICAgICAgICAgICBtOiA0NSwgLy8gbWludXRlcyB0byBob3VyXG4gICAgICAgICAgICBoOiAyMiwgLy8gaG91cnMgdG8gZGF5XG4gICAgICAgICAgICBkOiAyNiwgLy8gZGF5cyB0byBtb250aC93ZWVrXG4gICAgICAgICAgICB3OiBudWxsLCAvLyB3ZWVrcyB0byBtb250aFxuICAgICAgICAgICAgTTogMTEsIC8vIG1vbnRocyB0byB5ZWFyXG4gICAgICAgIH07XG5cbiAgICAvLyBoZWxwZXIgZnVuY3Rpb24gZm9yIG1vbWVudC5mbi5mcm9tLCBtb21lbnQuZm4uZnJvbU5vdywgYW5kIG1vbWVudC5kdXJhdGlvbi5mbi5odW1hbml6ZVxuICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGVUaW1lQWdvKHN0cmluZywgbnVtYmVyLCB3aXRob3V0U3VmZml4LCBpc0Z1dHVyZSwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUucmVsYXRpdmVUaW1lKG51bWJlciB8fCAxLCAhIXdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZSQxKHBvc05lZ0R1cmF0aW9uLCB3aXRob3V0U3VmZml4LCB0aHJlc2hvbGRzLCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gY3JlYXRlRHVyYXRpb24ocG9zTmVnRHVyYXRpb24pLmFicygpLFxuICAgICAgICAgICAgc2Vjb25kcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdzJykpLFxuICAgICAgICAgICAgbWludXRlcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdtJykpLFxuICAgICAgICAgICAgaG91cnMgPSByb3VuZChkdXJhdGlvbi5hcygnaCcpKSxcbiAgICAgICAgICAgIGRheXMgPSByb3VuZChkdXJhdGlvbi5hcygnZCcpKSxcbiAgICAgICAgICAgIG1vbnRocyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdNJykpLFxuICAgICAgICAgICAgd2Vla3MgPSByb3VuZChkdXJhdGlvbi5hcygndycpKSxcbiAgICAgICAgICAgIHllYXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ3knKSksXG4gICAgICAgICAgICBhID1cbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8PSB0aHJlc2hvbGRzLnNzICYmIFsncycsIHNlY29uZHNdKSB8fFxuICAgICAgICAgICAgICAgIChzZWNvbmRzIDwgdGhyZXNob2xkcy5zICYmIFsnc3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8PSAxICYmIFsnbSddKSB8fFxuICAgICAgICAgICAgICAgIChtaW51dGVzIDwgdGhyZXNob2xkcy5tICYmIFsnbW0nLCBtaW51dGVzXSkgfHxcbiAgICAgICAgICAgICAgICAoaG91cnMgPD0gMSAmJiBbJ2gnXSkgfHxcbiAgICAgICAgICAgICAgICAoaG91cnMgPCB0aHJlc2hvbGRzLmggJiYgWydoaCcsIGhvdXJzXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8PSAxICYmIFsnZCddKSB8fFxuICAgICAgICAgICAgICAgIChkYXlzIDwgdGhyZXNob2xkcy5kICYmIFsnZGQnLCBkYXlzXSk7XG5cbiAgICAgICAgaWYgKHRocmVzaG9sZHMudyAhPSBudWxsKSB7XG4gICAgICAgICAgICBhID1cbiAgICAgICAgICAgICAgICBhIHx8XG4gICAgICAgICAgICAgICAgKHdlZWtzIDw9IDEgJiYgWyd3J10pIHx8XG4gICAgICAgICAgICAgICAgKHdlZWtzIDwgdGhyZXNob2xkcy53ICYmIFsnd3cnLCB3ZWVrc10pO1xuICAgICAgICB9XG4gICAgICAgIGEgPSBhIHx8XG4gICAgICAgICAgICAobW9udGhzIDw9IDEgJiYgWydNJ10pIHx8XG4gICAgICAgICAgICAobW9udGhzIDwgdGhyZXNob2xkcy5NICYmIFsnTU0nLCBtb250aHNdKSB8fFxuICAgICAgICAgICAgKHllYXJzIDw9IDEgJiYgWyd5J10pIHx8IFsneXknLCB5ZWFyc107XG5cbiAgICAgICAgYVsyXSA9IHdpdGhvdXRTdWZmaXg7XG4gICAgICAgIGFbM10gPSArcG9zTmVnRHVyYXRpb24gPiAwO1xuICAgICAgICBhWzRdID0gbG9jYWxlO1xuICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZVRpbWVBZ28uYXBwbHkobnVsbCwgYSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCB0aGUgcm91bmRpbmcgZnVuY3Rpb24gZm9yIHJlbGF0aXZlIHRpbWUgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nKHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKHJvdW5kaW5nRnVuY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygcm91bmRpbmdGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcm91bmQgPSByb3VuZGluZ0Z1bmN0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgYSB0aHJlc2hvbGQgZm9yIHJlbGF0aXZlIHRpbWUgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZCh0aHJlc2hvbGQsIGxpbWl0KSB7XG4gICAgICAgIGlmICh0aHJlc2hvbGRzW3RocmVzaG9sZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW1pdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyZXNob2xkc1t0aHJlc2hvbGRdO1xuICAgICAgICB9XG4gICAgICAgIHRocmVzaG9sZHNbdGhyZXNob2xkXSA9IGxpbWl0O1xuICAgICAgICBpZiAodGhyZXNob2xkID09PSAncycpIHtcbiAgICAgICAgICAgIHRocmVzaG9sZHMuc3MgPSBsaW1pdCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaHVtYW5pemUoYXJnV2l0aFN1ZmZpeCwgYXJnVGhyZXNob2xkcykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3aXRoU3VmZml4ID0gZmFsc2UsXG4gICAgICAgICAgICB0aCA9IHRocmVzaG9sZHMsXG4gICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdXaXRoU3VmZml4ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgYXJnVGhyZXNob2xkcyA9IGFyZ1dpdGhTdWZmaXg7XG4gICAgICAgICAgICBhcmdXaXRoU3VmZml4ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdXaXRoU3VmZml4ID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHdpdGhTdWZmaXggPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnVGhyZXNob2xkcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoID0gT2JqZWN0LmFzc2lnbih7fSwgdGhyZXNob2xkcywgYXJnVGhyZXNob2xkcyk7XG4gICAgICAgICAgICBpZiAoYXJnVGhyZXNob2xkcy5zICE9IG51bGwgJiYgYXJnVGhyZXNob2xkcy5zcyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGguc3MgPSBhcmdUaHJlc2hvbGRzLnMgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxlID0gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgIG91dHB1dCA9IHJlbGF0aXZlVGltZSQxKHRoaXMsICF3aXRoU3VmZml4LCB0aCwgbG9jYWxlKTtcblxuICAgICAgICBpZiAod2l0aFN1ZmZpeCkge1xuICAgICAgICAgICAgb3V0cHV0ID0gbG9jYWxlLnBhc3RGdXR1cmUoK3RoaXMsIG91dHB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbG9jYWxlLnBvc3Rmb3JtYXQob3V0cHV0KTtcbiAgICB9XG5cbiAgICB2YXIgYWJzJDEgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIHNpZ24oeCkge1xuICAgICAgICByZXR1cm4gKHggPiAwKSAtICh4IDwgMCkgfHwgK3g7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmckMSgpIHtcbiAgICAgICAgLy8gZm9yIElTTyBzdHJpbmdzIHdlIGRvIG5vdCB1c2UgdGhlIG5vcm1hbCBidWJibGluZyBydWxlczpcbiAgICAgICAgLy8gICogbWlsbGlzZWNvbmRzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSBob3Vyc1xuICAgICAgICAvLyAgKiBkYXlzIGRvIG5vdCBidWJibGUgYXQgYWxsXG4gICAgICAgIC8vICAqIG1vbnRocyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgeWVhcnNcbiAgICAgICAgLy8gVGhpcyBpcyBiZWNhdXNlIHRoZXJlIGlzIG5vIGNvbnRleHQtZnJlZSBjb252ZXJzaW9uIGJldHdlZW4gaG91cnMgYW5kIGRheXNcbiAgICAgICAgLy8gKHRoaW5rIG9mIGNsb2NrIGNoYW5nZXMpXG4gICAgICAgIC8vIGFuZCBhbHNvIG5vdCBiZXR3ZWVuIGRheXMgYW5kIG1vbnRocyAoMjgtMzEgZGF5cyBwZXIgbW9udGgpXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlY29uZHMgPSBhYnMkMSh0aGlzLl9taWxsaXNlY29uZHMpIC8gMTAwMCxcbiAgICAgICAgICAgIGRheXMgPSBhYnMkMSh0aGlzLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFicyQxKHRoaXMuX21vbnRocyksXG4gICAgICAgICAgICBtaW51dGVzLFxuICAgICAgICAgICAgaG91cnMsXG4gICAgICAgICAgICB5ZWFycyxcbiAgICAgICAgICAgIHMsXG4gICAgICAgICAgICB0b3RhbCA9IHRoaXMuYXNTZWNvbmRzKCksXG4gICAgICAgICAgICB0b3RhbFNpZ24sXG4gICAgICAgICAgICB5bVNpZ24sXG4gICAgICAgICAgICBkYXlzU2lnbixcbiAgICAgICAgICAgIGhtc1NpZ247XG5cbiAgICAgICAgaWYgKCF0b3RhbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBhcyBDIydzIChOb2RhKSBhbmQgcHl0aG9uIChpc29kYXRlKS4uLlxuICAgICAgICAgICAgLy8gYnV0IG5vdCBvdGhlciBKUyAoZ29vZy5kYXRlKVxuICAgICAgICAgICAgcmV0dXJuICdQMEQnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMzYwMCBzZWNvbmRzIC0+IDYwIG1pbnV0ZXMgLT4gMSBob3VyXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBob3VycyA9IGFic0Zsb29yKG1pbnV0ZXMgLyA2MCk7XG4gICAgICAgIHNlY29uZHMgJT0gNjA7XG4gICAgICAgIG1pbnV0ZXMgJT0gNjA7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIC8vIGluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9kb3JkaWxsZS9tb21lbnQtaXNvZHVyYXRpb24vYmxvYi9tYXN0ZXIvbW9tZW50Lmlzb2R1cmF0aW9uLmpzXG4gICAgICAgIHMgPSBzZWNvbmRzID8gc2Vjb25kcy50b0ZpeGVkKDMpLnJlcGxhY2UoL1xcLj8wKyQvLCAnJykgOiAnJztcblxuICAgICAgICB0b3RhbFNpZ24gPSB0b3RhbCA8IDAgPyAnLScgOiAnJztcbiAgICAgICAgeW1TaWduID0gc2lnbih0aGlzLl9tb250aHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBkYXlzU2lnbiA9IHNpZ24odGhpcy5fZGF5cykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIGhtc1NpZ24gPSBzaWduKHRoaXMuX21pbGxpc2Vjb25kcykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRvdGFsU2lnbiArXG4gICAgICAgICAgICAnUCcgK1xuICAgICAgICAgICAgKHllYXJzID8geW1TaWduICsgeWVhcnMgKyAnWScgOiAnJykgK1xuICAgICAgICAgICAgKG1vbnRocyA/IHltU2lnbiArIG1vbnRocyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoZGF5cyA/IGRheXNTaWduICsgZGF5cyArICdEJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgfHwgbWludXRlcyB8fCBzZWNvbmRzID8gJ1QnIDogJycpICtcbiAgICAgICAgICAgIChob3VycyA/IGhtc1NpZ24gKyBob3VycyArICdIJyA6ICcnKSArXG4gICAgICAgICAgICAobWludXRlcyA/IGhtc1NpZ24gKyBtaW51dGVzICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChzZWNvbmRzID8gaG1zU2lnbiArIHMgKyAnUycgOiAnJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8kMiA9IER1cmF0aW9uLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDIuaXNWYWxpZCA9IGlzVmFsaWQkMTtcbiAgICBwcm90byQyLmFicyA9IGFicztcbiAgICBwcm90byQyLmFkZCA9IGFkZCQxO1xuICAgIHByb3RvJDIuc3VidHJhY3QgPSBzdWJ0cmFjdCQxO1xuICAgIHByb3RvJDIuYXMgPSBhcztcbiAgICBwcm90byQyLmFzTWlsbGlzZWNvbmRzID0gYXNNaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5hc1NlY29uZHMgPSBhc1NlY29uZHM7XG4gICAgcHJvdG8kMi5hc01pbnV0ZXMgPSBhc01pbnV0ZXM7XG4gICAgcHJvdG8kMi5hc0hvdXJzID0gYXNIb3VycztcbiAgICBwcm90byQyLmFzRGF5cyA9IGFzRGF5cztcbiAgICBwcm90byQyLmFzV2Vla3MgPSBhc1dlZWtzO1xuICAgIHByb3RvJDIuYXNNb250aHMgPSBhc01vbnRocztcbiAgICBwcm90byQyLmFzUXVhcnRlcnMgPSBhc1F1YXJ0ZXJzO1xuICAgIHByb3RvJDIuYXNZZWFycyA9IGFzWWVhcnM7XG4gICAgcHJvdG8kMi52YWx1ZU9mID0gdmFsdWVPZiQxO1xuICAgIHByb3RvJDIuX2J1YmJsZSA9IGJ1YmJsZTtcbiAgICBwcm90byQyLmNsb25lID0gY2xvbmUkMTtcbiAgICBwcm90byQyLmdldCA9IGdldCQyO1xuICAgIHByb3RvJDIubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuc2Vjb25kcyA9IHNlY29uZHM7XG4gICAgcHJvdG8kMi5taW51dGVzID0gbWludXRlcztcbiAgICBwcm90byQyLmhvdXJzID0gaG91cnM7XG4gICAgcHJvdG8kMi5kYXlzID0gZGF5cztcbiAgICBwcm90byQyLndlZWtzID0gd2Vla3M7XG4gICAgcHJvdG8kMi5tb250aHMgPSBtb250aHM7XG4gICAgcHJvdG8kMi55ZWFycyA9IHllYXJzO1xuICAgIHByb3RvJDIuaHVtYW5pemUgPSBodW1hbml6ZTtcbiAgICBwcm90byQyLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvU3RyaW5nID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvSlNPTiA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8kMi5sb2NhbGVEYXRhID0gbG9jYWxlRGF0YTtcblxuICAgIHByb3RvJDIudG9Jc29TdHJpbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICd0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdG9JU09TdHJpbmcoKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKScsXG4gICAgICAgIHRvSVNPU3RyaW5nJDFcbiAgICApO1xuICAgIHByb3RvJDIubGFuZyA9IGxhbmc7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWCcsIDAsIDAsICd1bml4Jyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3gnLCAwLCAwLCAndmFsdWVPZicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigneCcsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdYJywgbWF0Y2hUaW1lc3RhbXApO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUocGFyc2VGbG9hdChpbnB1dCkgKiAxMDAwKTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCd4JywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHRvSW50KGlucHV0KSk7XG4gICAgfSk7XG5cbiAgICAvLyEgbW9tZW50LmpzXG5cbiAgICBob29rcy52ZXJzaW9uID0gJzIuMzAuMSc7XG5cbiAgICBzZXRIb29rQ2FsbGJhY2soY3JlYXRlTG9jYWwpO1xuXG4gICAgaG9va3MuZm4gPSBwcm90bztcbiAgICBob29rcy5taW4gPSBtaW47XG4gICAgaG9va3MubWF4ID0gbWF4O1xuICAgIGhvb2tzLm5vdyA9IG5vdztcbiAgICBob29rcy51dGMgPSBjcmVhdGVVVEM7XG4gICAgaG9va3MudW5peCA9IGNyZWF0ZVVuaXg7XG4gICAgaG9va3MubW9udGhzID0gbGlzdE1vbnRocztcbiAgICBob29rcy5pc0RhdGUgPSBpc0RhdGU7XG4gICAgaG9va3MubG9jYWxlID0gZ2V0U2V0R2xvYmFsTG9jYWxlO1xuICAgIGhvb2tzLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkO1xuICAgIGhvb2tzLmR1cmF0aW9uID0gY3JlYXRlRHVyYXRpb247XG4gICAgaG9va3MuaXNNb21lbnQgPSBpc01vbWVudDtcbiAgICBob29rcy53ZWVrZGF5cyA9IGxpc3RXZWVrZGF5cztcbiAgICBob29rcy5wYXJzZVpvbmUgPSBjcmVhdGVJblpvbmU7XG4gICAgaG9va3MubG9jYWxlRGF0YSA9IGdldExvY2FsZTtcbiAgICBob29rcy5pc0R1cmF0aW9uID0gaXNEdXJhdGlvbjtcbiAgICBob29rcy5tb250aHNTaG9ydCA9IGxpc3RNb250aHNTaG9ydDtcbiAgICBob29rcy53ZWVrZGF5c01pbiA9IGxpc3RXZWVrZGF5c01pbjtcbiAgICBob29rcy5kZWZpbmVMb2NhbGUgPSBkZWZpbmVMb2NhbGU7XG4gICAgaG9va3MudXBkYXRlTG9jYWxlID0gdXBkYXRlTG9jYWxlO1xuICAgIGhvb2tzLmxvY2FsZXMgPSBsaXN0TG9jYWxlcztcbiAgICBob29rcy53ZWVrZGF5c1Nob3J0ID0gbGlzdFdlZWtkYXlzU2hvcnQ7XG4gICAgaG9va3Mubm9ybWFsaXplVW5pdHMgPSBub3JtYWxpemVVbml0cztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVSb3VuZGluZyA9IGdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVRocmVzaG9sZCA9IGdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZDtcbiAgICBob29rcy5jYWxlbmRhckZvcm1hdCA9IGdldENhbGVuZGFyRm9ybWF0O1xuICAgIGhvb2tzLnByb3RvdHlwZSA9IHByb3RvO1xuXG4gICAgLy8gY3VycmVudGx5IEhUTUw1IGlucHV0IHR5cGUgb25seSBzdXBwb3J0cyAyNC1ob3VyIGZvcm1hdHNcbiAgICBob29rcy5IVE1MNV9GTVQgPSB7XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMOiAnWVlZWS1NTS1ERFRISDptbScsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiAnWVlZWS1NTS1ERFRISDptbTpzcycsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX01TOiAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgREFURTogJ1lZWVktTU0tREQnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGVcIiAvPlxuICAgICAgICBUSU1FOiAnSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiAvPlxuICAgICAgICBUSU1FX1NFQ09ORFM6ICdISDptbTpzcycsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgVElNRV9NUzogJ0hIOm1tOnNzLlNTUycsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIFdFRUs6ICdHR0dHLVtXXVdXJywgLy8gPGlucHV0IHR5cGU9XCJ3ZWVrXCIgLz5cbiAgICAgICAgTU9OVEg6ICdZWVlZLU1NJywgLy8gPGlucHV0IHR5cGU9XCJtb250aFwiIC8+XG4gICAgfTtcblxuICAgIHJldHVybiBob29rcztcblxufSkpKTtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3RyaW5nYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3RyaW5nLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTdHJpbmcoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTdHJpbmcoMSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8XG4gICAgKCFpc0FycmF5KHZhbHVlKSAmJiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN0cmluZ1RhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTdHJpbmc7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGJvb2xlYW4gcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJvb2xlYW4sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Jvb2xlYW4oZmFsc2UpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCb29sZWFuKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2UgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBib29sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Jvb2xlYW47XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTnVtYmVyYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqICoqTm90ZToqKiBUbyBleGNsdWRlIGBJbmZpbml0eWAsIGAtSW5maW5pdHlgLCBhbmQgYE5hTmAsIHdoaWNoIGFyZVxuICogY2xhc3NpZmllZCBhcyBudW1iZXJzLCB1c2UgdGhlIGBfLmlzRmluaXRlYCBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBudW1iZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc051bWJlcigzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOdW1iZXIoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBudW1iZXJUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTnVtYmVyO1xuIiwgInZhciBpc051bWJlciA9IHJlcXVpcmUoJy4vaXNOdW1iZXInKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgTmFOYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAqIFtgTnVtYmVyLmlzTmFOYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzTmFOKSBhbmQgaXMgbm90IHRoZSBzYW1lIGFzXG4gKiBnbG9iYWwgW2Bpc05hTmBdKGh0dHBzOi8vbWRuLmlvL2lzTmFOKSB3aGljaCByZXR1cm5zIGB0cnVlYCBmb3JcbiAqIGB1bmRlZmluZWRgIGFuZCBvdGhlciBub24tbnVtYmVyIHZhbHVlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTmFOKE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05hTihuZXcgTnVtYmVyKE5hTikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzTmFOKHVuZGVmaW5lZCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05hTih1bmRlZmluZWQpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOYU4odmFsdWUpIHtcbiAgLy8gQW4gYE5hTmAgcHJpbWl0aXZlIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi5cbiAgLy8gUGVyZm9ybSB0aGUgYHRvU3RyaW5nVGFnYCBjaGVjayBmaXJzdCB0byBhdm9pZCBlcnJvcnMgd2l0aCBzb21lXG4gIC8vIEFjdGl2ZVggb2JqZWN0cyBpbiBJRS5cbiAgcmV0dXJuIGlzTnVtYmVyKHZhbHVlKSAmJiB2YWx1ZSAhPSArdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNOYU47XG4iLCAiLyohIEBwcmVzZXJ2ZVxuICogbnVtZXJhbC5qc1xuICogdmVyc2lvbiA6IDIuMC42XG4gKiBhdXRob3IgOiBBZGFtIERyYXBlclxuICogbGljZW5zZSA6IE1JVFxuICogaHR0cDovL2FkYW13ZHJhcGVyLmdpdGh1Yi5jb20vTnVtZXJhbC1qcy9cbiAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ2xvYmFsLm51bWVyYWwgPSBmYWN0b3J5KCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICBWYXJpYWJsZXNcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICB2YXIgbnVtZXJhbCxcbiAgICAgICAgXyxcbiAgICAgICAgVkVSU0lPTiA9ICcyLjAuNicsXG4gICAgICAgIGZvcm1hdHMgPSB7fSxcbiAgICAgICAgbG9jYWxlcyA9IHt9LFxuICAgICAgICBkZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIGN1cnJlbnRMb2NhbGU6ICdlbicsXG4gICAgICAgICAgICB6ZXJvRm9ybWF0OiBudWxsLFxuICAgICAgICAgICAgbnVsbEZvcm1hdDogbnVsbCxcbiAgICAgICAgICAgIGRlZmF1bHRGb3JtYXQ6ICcwLDAnLFxuICAgICAgICAgICAgc2NhbGVQZXJjZW50QnkxMDA6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGN1cnJlbnRMb2NhbGU6IGRlZmF1bHRzLmN1cnJlbnRMb2NhbGUsXG4gICAgICAgICAgICB6ZXJvRm9ybWF0OiBkZWZhdWx0cy56ZXJvRm9ybWF0LFxuICAgICAgICAgICAgbnVsbEZvcm1hdDogZGVmYXVsdHMubnVsbEZvcm1hdCxcbiAgICAgICAgICAgIGRlZmF1bHRGb3JtYXQ6IGRlZmF1bHRzLmRlZmF1bHRGb3JtYXQsXG4gICAgICAgICAgICBzY2FsZVBlcmNlbnRCeTEwMDogZGVmYXVsdHMuc2NhbGVQZXJjZW50QnkxMDBcbiAgICAgICAgfTtcblxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICBDb25zdHJ1Y3RvcnNcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICAvLyBOdW1lcmFsIHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBOdW1lcmFsKGlucHV0LCBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcblxuICAgICAgICB0aGlzLl92YWx1ZSA9IG51bWJlcjtcbiAgICB9XG5cbiAgICBudW1lcmFsID0gZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIHZhbHVlLFxuICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgIHVuZm9ybWF0RnVuY3Rpb24sXG4gICAgICAgICAgICByZWdleHA7XG5cbiAgICAgICAgaWYgKG51bWVyYWwuaXNOdW1lcmFsKGlucHV0KSkge1xuICAgICAgICAgICAgdmFsdWUgPSBpbnB1dC52YWx1ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSAwIHx8IHR5cGVvZiBpbnB1dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gbnVsbCB8fCBfLmlzTmFOKGlucHV0KSkge1xuICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnplcm9Gb3JtYXQgJiYgaW5wdXQgPT09IG9wdGlvbnMuemVyb0Zvcm1hdCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5udWxsRm9ybWF0ICYmIGlucHV0ID09PSBvcHRpb25zLm51bGxGb3JtYXQgfHwgIWlucHV0LnJlcGxhY2UoL1teMC05XSsvZywgJycpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChraW5kIGluIGZvcm1hdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnZXhwID0gdHlwZW9mIGZvcm1hdHNba2luZF0ucmVnZXhwcy51bmZvcm1hdCA9PT0gJ2Z1bmN0aW9uJyA/IGZvcm1hdHNba2luZF0ucmVnZXhwcy51bmZvcm1hdCgpIDogZm9ybWF0c1traW5kXS5yZWdleHBzLnVuZm9ybWF0O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWdleHAgJiYgaW5wdXQubWF0Y2gocmVnZXhwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5mb3JtYXRGdW5jdGlvbiA9IGZvcm1hdHNba2luZF0udW5mb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdW5mb3JtYXRGdW5jdGlvbiA9IHVuZm9ybWF0RnVuY3Rpb24gfHwgbnVtZXJhbC5fLnN0cmluZ1RvTnVtYmVyO1xuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1bmZvcm1hdEZ1bmN0aW9uKGlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGlucHV0KXx8IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE51bWVyYWwoaW5wdXQsIHZhbHVlKTtcbiAgICB9O1xuXG4gICAgLy8gdmVyc2lvbiBudW1iZXJcbiAgICBudW1lcmFsLnZlcnNpb24gPSBWRVJTSU9OO1xuXG4gICAgLy8gY29tcGFyZSBudW1lcmFsIG9iamVjdFxuICAgIG51bWVyYWwuaXNOdW1lcmFsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBOdW1lcmFsO1xuICAgIH07XG5cbiAgICAvLyBoZWxwZXIgZnVuY3Rpb25zXG4gICAgbnVtZXJhbC5fID0gXyA9IHtcbiAgICAgICAgLy8gZm9ybWF0cyBudW1iZXJzIHNlcGFyYXRvcnMsIGRlY2ltYWxzIHBsYWNlcywgc2lnbnMsIGFiYnJldmlhdGlvbnNcbiAgICAgICAgbnVtYmVyVG9Gb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBsb2NhbGVzW251bWVyYWwub3B0aW9ucy5jdXJyZW50TG9jYWxlXSxcbiAgICAgICAgICAgICAgICBuZWdQID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgb3B0RGVjID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgbGVhZGluZ0NvdW50ID0gMCxcbiAgICAgICAgICAgICAgICBhYmJyID0gJycsXG4gICAgICAgICAgICAgICAgdHJpbGxpb24gPSAxMDAwMDAwMDAwMDAwLFxuICAgICAgICAgICAgICAgIGJpbGxpb24gPSAxMDAwMDAwMDAwLFxuICAgICAgICAgICAgICAgIG1pbGxpb24gPSAxMDAwMDAwLFxuICAgICAgICAgICAgICAgIHRob3VzYW5kID0gMTAwMCxcbiAgICAgICAgICAgICAgICBkZWNpbWFsID0gJycsXG4gICAgICAgICAgICAgICAgbmVnID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgYWJickZvcmNlLCAvLyBmb3JjZSBhYmJyZXZpYXRpb25cbiAgICAgICAgICAgICAgICBhYnMsXG4gICAgICAgICAgICAgICAgbWluLFxuICAgICAgICAgICAgICAgIG1heCxcbiAgICAgICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgICAgICBpbnQsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uLFxuICAgICAgICAgICAgICAgIHNpZ25lZCxcbiAgICAgICAgICAgICAgICB0aG91c2FuZHMsXG4gICAgICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgbmV2ZXIgZm9ybWF0IGEgbnVsbCB2YWx1ZVxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSB8fCAwO1xuXG4gICAgICAgICAgICBhYnMgPSBNYXRoLmFicyh2YWx1ZSk7XG5cbiAgICAgICAgICAgIC8vIHNlZSBpZiB3ZSBzaG91bGQgdXNlIHBhcmVudGhlc2VzIGZvciBuZWdhdGl2ZSBudW1iZXIgb3IgaWYgd2Ugc2hvdWxkIHByZWZpeCB3aXRoIGEgc2lnblxuICAgICAgICAgICAgLy8gaWYgYm90aCBhcmUgcHJlc2VudCB3ZSBkZWZhdWx0IHRvIHBhcmVudGhlc2VzXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJygnKSkge1xuICAgICAgICAgICAgICAgIG5lZ1AgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9bXFwofFxcKV0vZywgJycpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnKycpIHx8IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICctJykpIHtcbiAgICAgICAgICAgICAgICBzaWduZWQgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnKycpID8gZm9ybWF0LmluZGV4T2YoJysnKSA6IHZhbHVlIDwgMCA/IGZvcm1hdC5pbmRleE9mKCctJykgOiAtMTtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvW1xcK3xcXC1dL2csICcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc2VlIGlmIGFiYnJldmlhdGlvbiBpcyB3YW50ZWRcbiAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnYScpKSB7XG4gICAgICAgICAgICAgICAgYWJickZvcmNlID0gZm9ybWF0Lm1hdGNoKC9hKGt8bXxifHQpPy8pO1xuXG4gICAgICAgICAgICAgICAgYWJickZvcmNlID0gYWJickZvcmNlID8gYWJickZvcmNlWzFdIDogZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlIGFiYnJldmlhdGlvblxuICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIGEnKSkge1xuICAgICAgICAgICAgICAgICAgICBhYmJyID0gJyAnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKG5ldyBSZWdFeHAoYWJiciArICdhW2ttYnRdPycpLCAnJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYWJzID49IHRyaWxsaW9uICYmICFhYmJyRm9yY2UgfHwgYWJickZvcmNlID09PSAndCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJpbGxpb25cbiAgICAgICAgICAgICAgICAgICAgYWJiciArPSBsb2NhbGUuYWJicmV2aWF0aW9ucy50cmlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIHRyaWxsaW9uO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWJzIDwgdHJpbGxpb24gJiYgYWJzID49IGJpbGxpb24gJiYgIWFiYnJGb3JjZSB8fCBhYmJyRm9yY2UgPT09ICdiJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBiaWxsaW9uXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMuYmlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIGJpbGxpb247XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhYnMgPCBiaWxsaW9uICYmIGFicyA+PSBtaWxsaW9uICYmICFhYmJyRm9yY2UgfHwgYWJickZvcmNlID09PSAnbScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbWlsbGlvblxuICAgICAgICAgICAgICAgICAgICBhYmJyICs9IGxvY2FsZS5hYmJyZXZpYXRpb25zLm1pbGxpb247XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyBtaWxsaW9uO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWJzIDwgbWlsbGlvbiAmJiBhYnMgPj0gdGhvdXNhbmQgJiYgIWFiYnJGb3JjZSB8fCBhYmJyRm9yY2UgPT09ICdrJykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aG91c2FuZFxuICAgICAgICAgICAgICAgICAgICBhYmJyICs9IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRob3VzYW5kO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gdGhvdXNhbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igb3B0aW9uYWwgZGVjaW1hbHNcbiAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnWy5dJykpIHtcbiAgICAgICAgICAgICAgICBvcHREZWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKCdbLl0nLCAnLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBicmVhayBudW1iZXIgYW5kIGZvcm1hdFxuICAgICAgICAgICAgaW50ID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpWzBdO1xuICAgICAgICAgICAgcHJlY2lzaW9uID0gZm9ybWF0LnNwbGl0KCcuJylbMV07XG4gICAgICAgICAgICB0aG91c2FuZHMgPSBmb3JtYXQuaW5kZXhPZignLCcpO1xuICAgICAgICAgICAgbGVhZGluZ0NvdW50ID0gKGZvcm1hdC5zcGxpdCgnLicpWzBdLnNwbGl0KCcsJylbMF0ubWF0Y2goLzAvZykgfHwgW10pLmxlbmd0aDtcblxuICAgICAgICAgICAgaWYgKHByZWNpc2lvbikge1xuICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMocHJlY2lzaW9uLCAnWycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbi5yZXBsYWNlKCddJywgJycpO1xuICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24uc3BsaXQoJ1snKTtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9IG51bWVyYWwuXy50b0ZpeGVkKHZhbHVlLCAocHJlY2lzaW9uWzBdLmxlbmd0aCArIHByZWNpc2lvblsxXS5sZW5ndGgpLCByb3VuZGluZ0Z1bmN0aW9uLCBwcmVjaXNpb25bMV0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gbnVtZXJhbC5fLnRvRml4ZWQodmFsdWUsIHByZWNpc2lvbi5sZW5ndGgsIHJvdW5kaW5nRnVuY3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGludCA9IGRlY2ltYWwuc3BsaXQoJy4nKVswXTtcblxuICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoZGVjaW1hbCwgJy4nKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gbG9jYWxlLmRlbGltaXRlcnMuZGVjaW1hbCArIGRlY2ltYWwuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG9wdERlYyAmJiBOdW1iZXIoZGVjaW1hbC5zbGljZSgxKSkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW50ID0gbnVtZXJhbC5fLnRvRml4ZWQodmFsdWUsIDAsIHJvdW5kaW5nRnVuY3Rpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjaGVjayBhYmJyZXZpYXRpb24gYWdhaW4gYWZ0ZXIgcm91bmRpbmdcbiAgICAgICAgICAgIGlmIChhYmJyICYmICFhYmJyRm9yY2UgJiYgTnVtYmVyKGludCkgPj0gMTAwMCAmJiBhYmJyICE9PSBsb2NhbGUuYWJicmV2aWF0aW9ucy50cmlsbGlvbikge1xuICAgICAgICAgICAgICAgIGludCA9IFN0cmluZyhOdW1iZXIoaW50KSAvIDEwMDApO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChhYmJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgbG9jYWxlLmFiYnJldmlhdGlvbnMudGhvdXNhbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBhYmJyID0gbG9jYWxlLmFiYnJldmlhdGlvbnMubWlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIGxvY2FsZS5hYmJyZXZpYXRpb25zLm1pbGxpb246XG4gICAgICAgICAgICAgICAgICAgICAgICBhYmJyID0gbG9jYWxlLmFiYnJldmlhdGlvbnMuYmlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIGxvY2FsZS5hYmJyZXZpYXRpb25zLmJpbGxpb246XG4gICAgICAgICAgICAgICAgICAgICAgICBhYmJyID0gbG9jYWxlLmFiYnJldmlhdGlvbnMudHJpbGxpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgLy8gZm9ybWF0IG51bWJlclxuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhpbnQsICctJykpIHtcbiAgICAgICAgICAgICAgICBpbnQgPSBpbnQuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgbmVnID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGludC5sZW5ndGggPCBsZWFkaW5nQ291bnQpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gbGVhZGluZ0NvdW50IC0gaW50Lmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBpbnQgPSAnMCcgKyBpbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhvdXNhbmRzID4gLTEpIHtcbiAgICAgICAgICAgICAgICBpbnQgPSBpbnQudG9TdHJpbmcoKS5yZXBsYWNlKC8oXFxkKSg/PShcXGR7M30pKyg/IVxcZCkpL2csICckMScgKyBsb2NhbGUuZGVsaW1pdGVycy50aG91c2FuZHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZm9ybWF0LmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGludCA9ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXRwdXQgPSBpbnQgKyBkZWNpbWFsICsgKGFiYnIgPyBhYmJyIDogJycpO1xuXG4gICAgICAgICAgICBpZiAobmVnUCkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IChuZWdQICYmIG5lZyA/ICcoJyA6ICcnKSArIG91dHB1dCArIChuZWdQICYmIG5lZyA/ICcpJyA6ICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHNpZ25lZCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHNpZ25lZCA9PT0gMCA/IChuZWcgPyAnLScgOiAnKycpICsgb3V0cHV0IDogb3V0cHV0ICsgKG5lZyA/ICctJyA6ICcrJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZWcpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJy0nICsgb3V0cHV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdW5mb3JtYXRzIG51bWJlcnMgc2VwYXJhdG9ycywgZGVjaW1hbHMgcGxhY2VzLCBzaWducywgYWJicmV2aWF0aW9uc1xuICAgICAgICBzdHJpbmdUb051bWJlcjogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gbG9jYWxlc1tvcHRpb25zLmN1cnJlbnRMb2NhbGVdLFxuICAgICAgICAgICAgICAgIHN0cmluZ09yaWdpbmFsID0gc3RyaW5nLFxuICAgICAgICAgICAgICAgIGFiYnJldmlhdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRob3VzYW5kOiAzLFxuICAgICAgICAgICAgICAgICAgICBtaWxsaW9uOiA2LFxuICAgICAgICAgICAgICAgICAgICBiaWxsaW9uOiA5LFxuICAgICAgICAgICAgICAgICAgICB0cmlsbGlvbjogMTJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFiYnJldmlhdGlvbixcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuemVyb0Zvcm1hdCAmJiBzdHJpbmcgPT09IG9wdGlvbnMuemVyb0Zvcm1hdCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5udWxsRm9ybWF0ICYmIHN0cmluZyA9PT0gb3B0aW9ucy5udWxsRm9ybWF0IHx8ICFzdHJpbmcucmVwbGFjZSgvW14wLTldKy9nLCAnJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IDE7XG5cbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlLmRlbGltaXRlcnMuZGVjaW1hbCAhPT0gJy4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXC4vZywgJycpLnJlcGxhY2UobG9jYWxlLmRlbGltaXRlcnMuZGVjaW1hbCwgJy4nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGFiYnJldmlhdGlvbiBpbiBhYmJyZXZpYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2V4cCA9IG5ldyBSZWdFeHAoJ1teYS16QS1aXScgKyBsb2NhbGUuYWJicmV2aWF0aW9uc1thYmJyZXZpYXRpb25dICsgJyg/OlxcXFwpfChcXFxcJyArIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wgKyAnKT8oPzpcXFxcKSk/KT8kJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ09yaWdpbmFsLm1hdGNoKHJlZ2V4cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICo9IE1hdGgucG93KDEwLCBhYmJyZXZpYXRpb25zW2FiYnJldmlhdGlvbl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgbmVnYXRpdmUgbnVtYmVyXG4gICAgICAgICAgICAgICAgdmFsdWUgKj0gKHN0cmluZy5zcGxpdCgnLScpLmxlbmd0aCArIE1hdGgubWluKHN0cmluZy5zcGxpdCgnKCcpLmxlbmd0aCAtIDEsIHN0cmluZy5zcGxpdCgnKScpLmxlbmd0aCAtIDEpKSAlIDIgPyAxIDogLTE7XG5cbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgbm9uIG51bWJlcnNcbiAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvW14wLTlcXC5dKy9nLCAnJyk7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSAqPSBOdW1iZXIoc3RyaW5nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBpc05hTjogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5jbHVkZXM6IGZ1bmN0aW9uKHN0cmluZywgc2VhcmNoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLmluZGV4T2Yoc2VhcmNoKSAhPT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydDogZnVuY3Rpb24oc3RyaW5nLCBzdWJTdHJpbmcsIHN0YXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnNsaWNlKDAsIHN0YXJ0KSArIHN1YlN0cmluZyArIHN0cmluZy5zbGljZShzdGFydCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZHVjZTogZnVuY3Rpb24oYXJyYXksIGNhbGxiYWNrIC8qLCBpbml0aWFsVmFsdWUqLykge1xuICAgICAgICAgICAgaWYgKHRoaXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheS5wcm90b3R5cGUucmVkdWNlIGNhbGxlZCBvbiBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHQgPSBPYmplY3QoYXJyYXkpLFxuICAgICAgICAgICAgICAgIGxlbiA9IHQubGVuZ3RoID4+PiAwLFxuICAgICAgICAgICAgICAgIGsgPSAwLFxuICAgICAgICAgICAgICAgIHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gYXJndW1lbnRzWzJdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAoayA8IGxlbiAmJiAhKGsgaW4gdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChrID49IGxlbikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0W2srK107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKDsgayA8IGxlbjsgaysrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGsgaW4gdCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrKHZhbHVlLCB0W2tdLCBrLCB0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb21wdXRlcyB0aGUgbXVsdGlwbGllciBuZWNlc3NhcnkgdG8gbWFrZSB4ID49IDEsXG4gICAgICAgICAqIGVmZmVjdGl2ZWx5IGVsaW1pbmF0aW5nIG1pc2NhbGN1bGF0aW9ucyBjYXVzZWQgYnlcbiAgICAgICAgICogZmluaXRlIHByZWNpc2lvbi5cbiAgICAgICAgICovXG4gICAgICAgIG11bHRpcGxpZXI6IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICB2YXIgcGFydHMgPSB4LnRvU3RyaW5nKCkuc3BsaXQoJy4nKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzLmxlbmd0aCA8IDIgPyAxIDogTWF0aC5wb3coMTAsIHBhcnRzWzFdLmxlbmd0aCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMsIHJldHVybnMgdGhlIG1heGltdW1cbiAgICAgICAgICogbXVsdGlwbGllciB0aGF0IG11c3QgYmUgdXNlZCB0byBub3JtYWxpemUgYW4gb3BlcmF0aW9uIGludm9sdmluZ1xuICAgICAgICAgKiBhbGwgb2YgdGhlbS5cbiAgICAgICAgICovXG4gICAgICAgIGNvcnJlY3Rpb25GYWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGFyZ3MucmVkdWNlKGZ1bmN0aW9uKGFjY3VtLCBuZXh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIG1uID0gXy5tdWx0aXBsaWVyKG5leHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2N1bSA+IG1uID8gYWNjdW0gOiBtbjtcbiAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogSW1wbGVtZW50YXRpb24gb2YgdG9GaXhlZCgpIHRoYXQgdHJlYXRzIGZsb2F0cyBtb3JlIGxpa2UgZGVjaW1hbHNcbiAgICAgICAgICpcbiAgICAgICAgICogRml4ZXMgYmluYXJ5IHJvdW5kaW5nIGlzc3VlcyAoZWcuICgwLjYxNSkudG9GaXhlZCgyKSA9PT0gJzAuNjEnKSB0aGF0IHByZXNlbnRcbiAgICAgICAgICogcHJvYmxlbXMgZm9yIGFjY291bnRpbmctIGFuZCBmaW5hbmNlLXJlbGF0ZWQgc29mdHdhcmUuXG4gICAgICAgICAqL1xuICAgICAgICB0b0ZpeGVkOiBmdW5jdGlvbih2YWx1ZSwgbWF4RGVjaW1hbHMsIHJvdW5kaW5nRnVuY3Rpb24sIG9wdGlvbmFscykge1xuICAgICAgICAgICAgdmFyIHNwbGl0VmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJyksXG4gICAgICAgICAgICAgICAgbWluRGVjaW1hbHMgPSBtYXhEZWNpbWFscyAtIChvcHRpb25hbHMgfHwgMCksXG4gICAgICAgICAgICAgICAgYm91bmRlZFByZWNpc2lvbixcbiAgICAgICAgICAgICAgICBvcHRpb25hbHNSZWdFeHAsXG4gICAgICAgICAgICAgICAgcG93ZXIsXG4gICAgICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgICAgICAvLyBVc2UgdGhlIHNtYWxsZXN0IHByZWNpc2lvbiB2YWx1ZSBwb3NzaWJsZSB0byBhdm9pZCBlcnJvcnMgZnJvbSBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvblxuICAgICAgICAgICAgaWYgKHNwbGl0VmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgIGJvdW5kZWRQcmVjaXNpb24gPSBNYXRoLm1pbihNYXRoLm1heChzcGxpdFZhbHVlWzFdLmxlbmd0aCwgbWluRGVjaW1hbHMpLCBtYXhEZWNpbWFscyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBib3VuZGVkUHJlY2lzaW9uID0gbWluRGVjaW1hbHM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvd2VyID0gTWF0aC5wb3coMTAsIGJvdW5kZWRQcmVjaXNpb24pO1xuXG4gICAgICAgICAgICAvLyBNdWx0aXBseSB1cCBieSBwcmVjaXNpb24sIHJvdW5kIGFjY3VyYXRlbHksIHRoZW4gZGl2aWRlIGFuZCB1c2UgbmF0aXZlIHRvRml4ZWQoKTpcbiAgICAgICAgICAgIG91dHB1dCA9IChyb3VuZGluZ0Z1bmN0aW9uKHZhbHVlICsgJ2UrJyArIGJvdW5kZWRQcmVjaXNpb24pIC8gcG93ZXIpLnRvRml4ZWQoYm91bmRlZFByZWNpc2lvbik7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25hbHMgPiBtYXhEZWNpbWFscyAtIGJvdW5kZWRQcmVjaXNpb24pIHtcbiAgICAgICAgICAgICAgICBvcHRpb25hbHNSZWdFeHAgPSBuZXcgUmVnRXhwKCdcXFxcLj8wezEsJyArIChvcHRpb25hbHMgLSAobWF4RGVjaW1hbHMgLSBib3VuZGVkUHJlY2lzaW9uKSkgKyAnfSQnKTtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZShvcHRpb25hbHNSZWdFeHAsICcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBhdmFsaWFibGUgb3B0aW9uc1xuICAgIG51bWVyYWwub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAvLyBhdmFsaWFibGUgZm9ybWF0c1xuICAgIG51bWVyYWwuZm9ybWF0cyA9IGZvcm1hdHM7XG5cbiAgICAvLyBhdmFsaWFibGUgZm9ybWF0c1xuICAgIG51bWVyYWwubG9jYWxlcyA9IGxvY2FsZXM7XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGN1cnJlbnQgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgbnVtZXJhbC5sb2NhbGUgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgb3B0aW9ucy5jdXJyZW50TG9jYWxlID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9ucy5jdXJyZW50TG9jYWxlO1xuICAgIH07XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgbG9hZGVkIGxvY2FsZSBkYXRhLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50XG4gICAgLy8gZ2xvYmFsIGxvY2FsZSBvYmplY3QuXG4gICAgbnVtZXJhbC5sb2NhbGVEYXRhID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tvcHRpb25zLmN1cnJlbnRMb2NhbGVdO1xuICAgICAgICB9XG5cbiAgICAgICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgaWYgKCFsb2NhbGVzW2tleV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBsb2NhbGUgOiAnICsga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGVzW2tleV07XG4gICAgfTtcblxuICAgIG51bWVyYWwucmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGVmYXVsdHMpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbcHJvcGVydHldID0gZGVmYXVsdHNbcHJvcGVydHldO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIG51bWVyYWwuemVyb0Zvcm1hdCA9IGZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICBvcHRpb25zLnplcm9Gb3JtYXQgPSB0eXBlb2YoZm9ybWF0KSA9PT0gJ3N0cmluZycgPyBmb3JtYXQgOiBudWxsO1xuICAgIH07XG5cbiAgICBudW1lcmFsLm51bGxGb3JtYXQgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIG9wdGlvbnMubnVsbEZvcm1hdCA9IHR5cGVvZihmb3JtYXQpID09PSAnc3RyaW5nJyA/IGZvcm1hdCA6IG51bGw7XG4gICAgfTtcblxuICAgIG51bWVyYWwuZGVmYXVsdEZvcm1hdCA9IGZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICBvcHRpb25zLmRlZmF1bHRGb3JtYXQgPSB0eXBlb2YoZm9ybWF0KSA9PT0gJ3N0cmluZycgPyBmb3JtYXQgOiAnMC4wJztcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5yZWdpc3RlciA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIGZvcm1hdCkge1xuICAgICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmICh0aGlzW3R5cGUgKyAncyddW25hbWVdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKG5hbWUgKyAnICcgKyB0eXBlICsgJyBhbHJlYWR5IHJlZ2lzdGVyZWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzW3R5cGUgKyAncyddW25hbWVdID0gZm9ybWF0O1xuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfTtcblxuXG4gICAgbnVtZXJhbC52YWxpZGF0ZSA9IGZ1bmN0aW9uKHZhbCwgY3VsdHVyZSkge1xuICAgICAgICB2YXIgX2RlY2ltYWxTZXAsXG4gICAgICAgICAgICBfdGhvdXNhbmRTZXAsXG4gICAgICAgICAgICBfY3VyclN5bWJvbCxcbiAgICAgICAgICAgIF92YWxBcnJheSxcbiAgICAgICAgICAgIF9hYmJyT2JqLFxuICAgICAgICAgICAgX3Rob3VzYW5kUmVnRXgsXG4gICAgICAgICAgICBsb2NhbGVEYXRhLFxuICAgICAgICAgICAgdGVtcDtcblxuICAgICAgICAvL2NvZXJjZSB2YWwgdG8gc3RyaW5nXG4gICAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFsICs9ICcnO1xuXG4gICAgICAgICAgICBpZiAoY29uc29sZS53YXJuKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdOdW1lcmFsLmpzOiBWYWx1ZSBpcyBub3Qgc3RyaW5nLiBJdCBoYXMgYmVlbiBjby1lcmNlZCB0bzogJywgdmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vdHJpbSB3aGl0ZXNwYWNlcyBmcm9tIGVpdGhlciBzaWRlc1xuICAgICAgICB2YWwgPSB2YWwudHJpbSgpO1xuXG4gICAgICAgIC8vaWYgdmFsIGlzIGp1c3QgZGlnaXRzIHJldHVybiB0cnVlXG4gICAgICAgIGlmICghIXZhbC5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9pZiB2YWwgaXMgZW1wdHkgcmV0dXJuIGZhbHNlXG4gICAgICAgIGlmICh2YWwgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvL2dldCB0aGUgZGVjaW1hbCBhbmQgdGhvdXNhbmRzIHNlcGFyYXRvciBmcm9tIG51bWVyYWwubG9jYWxlRGF0YVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy9jaGVjayBpZiB0aGUgY3VsdHVyZSBpcyB1bmRlcnN0b29kIGJ5IG51bWVyYWwuIGlmIG5vdCwgZGVmYXVsdCBpdCB0byBjdXJyZW50IGxvY2FsZVxuICAgICAgICAgICAgbG9jYWxlRGF0YSA9IG51bWVyYWwubG9jYWxlRGF0YShjdWx0dXJlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9jYWxlRGF0YSA9IG51bWVyYWwubG9jYWxlRGF0YShudW1lcmFsLmxvY2FsZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vc2V0dXAgdGhlIGRlbGltaXRlcnMgYW5kIGN1cnJlbmN5IHN5bWJvbCBiYXNlZCBvbiBjdWx0dXJlL2xvY2FsZVxuICAgICAgICBfY3VyclN5bWJvbCA9IGxvY2FsZURhdGEuY3VycmVuY3kuc3ltYm9sO1xuICAgICAgICBfYWJick9iaiA9IGxvY2FsZURhdGEuYWJicmV2aWF0aW9ucztcbiAgICAgICAgX2RlY2ltYWxTZXAgPSBsb2NhbGVEYXRhLmRlbGltaXRlcnMuZGVjaW1hbDtcbiAgICAgICAgaWYgKGxvY2FsZURhdGEuZGVsaW1pdGVycy50aG91c2FuZHMgPT09ICcuJykge1xuICAgICAgICAgICAgX3Rob3VzYW5kU2VwID0gJ1xcXFwuJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aG91c2FuZFNlcCA9IGxvY2FsZURhdGEuZGVsaW1pdGVycy50aG91c2FuZHM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZGF0aW5nIGN1cnJlbmN5IHN5bWJvbFxuICAgICAgICB0ZW1wID0gdmFsLm1hdGNoKC9eW15cXGRdKy8pO1xuICAgICAgICBpZiAodGVtcCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsID0gdmFsLnN1YnN0cigxKTtcbiAgICAgICAgICAgIGlmICh0ZW1wWzBdICE9PSBfY3VyclN5bWJvbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vdmFsaWRhdGluZyBhYmJyZXZpYXRpb24gc3ltYm9sXG4gICAgICAgIHRlbXAgPSB2YWwubWF0Y2goL1teXFxkXSskLyk7XG4gICAgICAgIGlmICh0ZW1wICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YWwgPSB2YWwuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgaWYgKHRlbXBbMF0gIT09IF9hYmJyT2JqLnRob3VzYW5kICYmIHRlbXBbMF0gIT09IF9hYmJyT2JqLm1pbGxpb24gJiYgdGVtcFswXSAhPT0gX2FiYnJPYmouYmlsbGlvbiAmJiB0ZW1wWzBdICE9PSBfYWJick9iai50cmlsbGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF90aG91c2FuZFJlZ0V4ID0gbmV3IFJlZ0V4cChfdGhvdXNhbmRTZXAgKyAnezJ9Jyk7XG5cbiAgICAgICAgaWYgKCF2YWwubWF0Y2goL1teXFxkLixdL2cpKSB7XG4gICAgICAgICAgICBfdmFsQXJyYXkgPSB2YWwuc3BsaXQoX2RlY2ltYWxTZXApO1xuICAgICAgICAgICAgaWYgKF92YWxBcnJheS5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoX3ZhbEFycmF5Lmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggISEgX3ZhbEFycmF5WzBdLm1hdGNoKC9eXFxkKy4qXFxkJC8pICYmICFfdmFsQXJyYXlbMF0ubWF0Y2goX3Rob3VzYW5kUmVnRXgpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX3ZhbEFycmF5WzBdLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggISEgX3ZhbEFycmF5WzBdLm1hdGNoKC9eXFxkKyQvKSAmJiAhX3ZhbEFycmF5WzBdLm1hdGNoKF90aG91c2FuZFJlZ0V4KSAmJiAhISBfdmFsQXJyYXlbMV0ubWF0Y2goL15cXGQrJC8pKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoICEhIF92YWxBcnJheVswXS5tYXRjaCgvXlxcZCsuKlxcZCQvKSAmJiAhX3ZhbEFycmF5WzBdLm1hdGNoKF90aG91c2FuZFJlZ0V4KSAmJiAhISBfdmFsQXJyYXlbMV0ubWF0Y2goL15cXGQrJC8pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIE51bWVyYWwgUHJvdG90eXBlXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgbnVtZXJhbC5mbiA9IE51bWVyYWwucHJvdG90eXBlID0ge1xuICAgICAgICBjbG9uZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtZXJhbCh0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbihpbnB1dFN0cmluZywgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fdmFsdWUsXG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gaW5wdXRTdHJpbmcgfHwgb3B0aW9ucy5kZWZhdWx0Rm9ybWF0LFxuICAgICAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uO1xuXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhIHJvdW5kaW5nRnVuY3Rpb25cbiAgICAgICAgICAgIHJvdW5kaW5nRnVuY3Rpb24gPSByb3VuZGluZ0Z1bmN0aW9uIHx8IE1hdGgucm91bmQ7XG5cbiAgICAgICAgICAgIC8vIGZvcm1hdCBiYXNlZCBvbiB2YWx1ZVxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwICYmIG9wdGlvbnMuemVyb0Zvcm1hdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG9wdGlvbnMuemVyb0Zvcm1hdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IG51bGwgJiYgb3B0aW9ucy5udWxsRm9ybWF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3B0aW9ucy5udWxsRm9ybWF0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGtpbmQgaW4gZm9ybWF0cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0Lm1hdGNoKGZvcm1hdHNba2luZF0ucmVnZXhwcy5mb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRGdW5jdGlvbiA9IGZvcm1hdHNba2luZF0uZm9ybWF0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uID0gZm9ybWF0RnVuY3Rpb24gfHwgbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0O1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gZm9ybWF0RnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBhZGQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgY29yckZhY3RvciA9IF8uY29ycmVjdGlvbkZhY3Rvci5jYWxsKG51bGwsIHRoaXMuX3ZhbHVlLCB2YWx1ZSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2N1bSArIE1hdGgucm91bmQoY29yckZhY3RvciAqIGN1cnIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IF8ucmVkdWNlKFt0aGlzLl92YWx1ZSwgdmFsdWVdLCBjYmFjaywgMCkgLyBjb3JyRmFjdG9yO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgc3VidHJhY3Q6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgY29yckZhY3RvciA9IF8uY29ycmVjdGlvbkZhY3Rvci5jYWxsKG51bGwsIHRoaXMuX3ZhbHVlLCB2YWx1ZSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2N1bSAtIE1hdGgucm91bmQoY29yckZhY3RvciAqIGN1cnIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IF8ucmVkdWNlKFt2YWx1ZV0sIGNiYWNrLCBNYXRoLnJvdW5kKHRoaXMuX3ZhbHVlICogY29yckZhY3RvcikpIC8gY29yckZhY3RvcjtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIG11bHRpcGx5OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBfLmNvcnJlY3Rpb25GYWN0b3IoYWNjdW0sIGN1cnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGFjY3VtICogY29yckZhY3RvcikgKiBNYXRoLnJvdW5kKGN1cnIgKiBjb3JyRmFjdG9yKSAvIE1hdGgucm91bmQoY29yckZhY3RvciAqIGNvcnJGYWN0b3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IF8ucmVkdWNlKFt0aGlzLl92YWx1ZSwgdmFsdWVdLCBjYmFjaywgMSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBkaXZpZGU6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICB2YXIgY29yckZhY3RvciA9IF8uY29ycmVjdGlvbkZhY3RvcihhY2N1bSwgY3Vycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoYWNjdW0gKiBjb3JyRmFjdG9yKSAvIE1hdGgucm91bmQoY3VyciAqIGNvcnJGYWN0b3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IF8ucmVkdWNlKFt0aGlzLl92YWx1ZSwgdmFsdWVdLCBjYmFjayk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBkaWZmZXJlbmNlOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKG51bWVyYWwodGhpcy5fdmFsdWUpLnN1YnRyYWN0KHZhbHVlKS52YWx1ZSgpKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIERlZmF1bHQgTG9jYWxlICYmIEZvcm1hdFxuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIG51bWVyYWwucmVnaXN0ZXIoJ2xvY2FsZScsICdlbicsIHtcbiAgICAgICAgZGVsaW1pdGVyczoge1xuICAgICAgICAgICAgdGhvdXNhbmRzOiAnLCcsXG4gICAgICAgICAgICBkZWNpbWFsOiAnLidcbiAgICAgICAgfSxcbiAgICAgICAgYWJicmV2aWF0aW9uczoge1xuICAgICAgICAgICAgdGhvdXNhbmQ6ICdrJyxcbiAgICAgICAgICAgIG1pbGxpb246ICdtJyxcbiAgICAgICAgICAgIGJpbGxpb246ICdiJyxcbiAgICAgICAgICAgIHRyaWxsaW9uOiAndCdcbiAgICAgICAgfSxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24obnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwO1xuICAgICAgICAgICAgcmV0dXJuICh+fihudW1iZXIgJSAxMDAgLyAxMCkgPT09IDEpID8gJ3RoJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDEpID8gJ3N0JyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDIpID8gJ25kJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDMpID8gJ3JkJyA6ICd0aCc7XG4gICAgICAgIH0sXG4gICAgICAgIGN1cnJlbmN5OiB7XG4gICAgICAgICAgICBzeW1ib2w6ICckJ1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBcblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnYnBzJywge1xuICAgICAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogLyhCUFMpLyxcbiAgICAgICAgICAgICAgICB1bmZvcm1hdDogLyhCUFMpL1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIHZhciBzcGFjZSA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgQlBTJykgPyAnICcgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDEwMDAwO1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHNwYWNlIGJlZm9yZSBCUFNcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP0JQUy8sICcnKTtcblxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMob3V0cHV0LCAnKScpKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5zcGxpdCgnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnNwbGljZSgtMSwgMCwgc3BhY2UgKyAnQlBTJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmpvaW4oJycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dCArIHNwYWNlICsgJ0JQUyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICsobnVtZXJhbC5fLnN0cmluZ1RvTnVtYmVyKHN0cmluZykgKiAwLjAwMDEpLnRvRml4ZWQoMTUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZGVjaW1hbCA9IHtcbiAgICAgICAgICAgIGJhc2U6IDEwMDAsXG4gICAgICAgICAgICBzdWZmaXhlczogWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ11cbiAgICAgICAgfSxcbiAgICAgICAgYmluYXJ5ID0ge1xuICAgICAgICAgICAgYmFzZTogMTAyNCxcbiAgICAgICAgICAgIHN1ZmZpeGVzOiBbJ0InLCAnS2lCJywgJ01pQicsICdHaUInLCAnVGlCJywgJ1BpQicsICdFaUInLCAnWmlCJywgJ1lpQiddXG4gICAgICAgIH07XG5cbiAgICB2YXIgYWxsU3VmZml4ZXMgPSAgZGVjaW1hbC5zdWZmaXhlcy5jb25jYXQoYmluYXJ5LnN1ZmZpeGVzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlY2ltYWwuc3VmZml4ZXMuaW5kZXhPZihpdGVtKSA8IDA7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdmFyIHVuZm9ybWF0UmVnZXggPSBhbGxTdWZmaXhlcy5qb2luKCd8Jyk7XG4gICAgICAgIC8vIEFsbG93IHN1cHBvcnQgZm9yIEJQUyAoaHR0cDovL3d3dy5pbnZlc3RvcGVkaWEuY29tL3Rlcm1zL2IvYmFzaXNwb2ludC5hc3ApXG4gICAgICAgIHVuZm9ybWF0UmVnZXggPSAnKCcgKyB1bmZvcm1hdFJlZ2V4LnJlcGxhY2UoJ0InLCAnQig/IVBTKScpICsgJyknO1xuXG4gICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ2J5dGVzJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oWzBcXHNdaT9iKS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogbmV3IFJlZ0V4cCh1bmZvcm1hdFJlZ2V4KVxuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQsXG4gICAgICAgICAgICAgICAgYnl0ZXMgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnaWInKSA/IGJpbmFyeSA6IGRlY2ltYWwsXG4gICAgICAgICAgICAgICAgc3VmZml4ID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyBiJykgfHwgbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyBpYicpID8gJyAnIDogJycsXG4gICAgICAgICAgICAgICAgcG93ZXIsXG4gICAgICAgICAgICAgICAgbWluLFxuICAgICAgICAgICAgICAgIG1heDtcblxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHNwYWNlIGJlZm9yZVxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9pP2IvLCAnJyk7XG5cbiAgICAgICAgICAgIGZvciAocG93ZXIgPSAwOyBwb3dlciA8PSBieXRlcy5zdWZmaXhlcy5sZW5ndGg7IHBvd2VyKyspIHtcbiAgICAgICAgICAgICAgICBtaW4gPSBNYXRoLnBvdyhieXRlcy5iYXNlLCBwb3dlcik7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5wb3coYnl0ZXMuYmFzZSwgcG93ZXIgKyAxKTtcblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gMCB8fCB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPCBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VmZml4ICs9IGJ5dGVzLnN1ZmZpeGVzW3Bvd2VyXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobWluID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIG1pbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0ICsgc3VmZml4O1xuICAgICAgICB9LFxuICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBudW1lcmFsLl8uc3RyaW5nVG9OdW1iZXIoc3RyaW5nKSxcbiAgICAgICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgICAgICBieXRlc011bHRpcGxpZXI7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGZvciAocG93ZXIgPSBkZWNpbWFsLnN1ZmZpeGVzLmxlbmd0aCAtIDE7IHBvd2VyID49IDA7IHBvd2VyLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhzdHJpbmcsIGRlY2ltYWwuc3VmZml4ZXNbcG93ZXJdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNNdWx0aXBsaWVyID0gTWF0aC5wb3coZGVjaW1hbC5iYXNlLCBwb3dlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhzdHJpbmcsIGJpbmFyeS5zdWZmaXhlc1twb3dlcl0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBieXRlc011bHRpcGxpZXIgPSBNYXRoLnBvdyhiaW5hcnkuYmFzZSwgcG93ZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhbHVlICo9IChieXRlc011bHRpcGxpZXIgfHwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdjdXJyZW5jeScsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKFxcJCkvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IG51bWVyYWwubG9jYWxlc1tudW1lcmFsLm9wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgc3ltYm9scyA9IHtcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlOiBmb3JtYXQubWF0Y2goL14oW1xcK3xcXC18XFwofFxcc3xcXCRdKikvKVswXSxcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXI6IGZvcm1hdC5tYXRjaCgvKFtcXCt8XFwtfFxcKXxcXHN8XFwkXSopJC8pWzBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgc3ltYm9sLFxuICAgICAgICAgICAgICAgIGk7XG5cbiAgICAgICAgICAgIC8vIHN0cmlwIGZvcm1hdCBvZiBzcGFjZXMgYW5kICRcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/XFwkXFxzPy8sICcnKTtcblxuICAgICAgICAgICAgLy8gZm9ybWF0IHRoZSBudW1iZXJcbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBiZWZvcmUgYW5kIGFmdGVyIGJhc2VkIG9uIHZhbHVlXG4gICAgICAgICAgICBpZiAodmFsdWUgPj0gMCkge1xuICAgICAgICAgICAgICAgIHN5bWJvbHMuYmVmb3JlID0gc3ltYm9scy5iZWZvcmUucmVwbGFjZSgvW1xcLVxcKF0vLCAnJyk7XG4gICAgICAgICAgICAgICAgc3ltYm9scy5hZnRlciA9IHN5bWJvbHMuYWZ0ZXIucmVwbGFjZSgvW1xcLVxcKV0vLCAnJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMCAmJiAoIW51bWVyYWwuXy5pbmNsdWRlcyhzeW1ib2xzLmJlZm9yZSwgJy0nKSAmJiAhbnVtZXJhbC5fLmluY2x1ZGVzKHN5bWJvbHMuYmVmb3JlLCAnKCcpKSkge1xuICAgICAgICAgICAgICAgIHN5bWJvbHMuYmVmb3JlID0gJy0nICsgc3ltYm9scy5iZWZvcmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCBlYWNoIGJlZm9yZSBzeW1ib2xcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzeW1ib2xzLmJlZm9yZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IHN5bWJvbHMuYmVmb3JlW2ldO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnJCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8uaW5zZXJ0KG91dHB1dCwgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbCwgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8uaW5zZXJ0KG91dHB1dCwgJyAnLCBpICsgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGVhY2ggYWZ0ZXIgc3ltYm9sXG4gICAgICAgICAgICBmb3IgKGkgPSBzeW1ib2xzLmFmdGVyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gc3ltYm9scy5hZnRlcltpXTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoc3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gaSA9PT0gc3ltYm9scy5hZnRlci5sZW5ndGggLSAxID8gb3V0cHV0ICsgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbCA6IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCBsb2NhbGUuY3VycmVuY3kuc3ltYm9sLCAtKHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gKDEgKyBpKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gaSA9PT0gc3ltYm9scy5hZnRlci5sZW5ndGggLSAxID8gb3V0cHV0ICsgJyAnIDogbnVtZXJhbC5fLmluc2VydChvdXRwdXQsICcgJywgLShzeW1ib2xzLmFmdGVyLmxlbmd0aCAtICgxICsgaSkgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ2V4cG9uZW50aWFsJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oZVxcK3xlLSkvLFxuICAgICAgICAgICAgdW5mb3JtYXQ6IC8oZVxcK3xlLSkvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIG91dHB1dCxcbiAgICAgICAgICAgICAgICBleHBvbmVudGlhbCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIW51bWVyYWwuXy5pc05hTih2YWx1ZSkgPyB2YWx1ZS50b0V4cG9uZW50aWFsKCkgOiAnMGUrMCcsXG4gICAgICAgICAgICAgICAgcGFydHMgPSBleHBvbmVudGlhbC5zcGxpdCgnZScpO1xuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvZVtcXCt8XFwtXXsxfTAvLCAnJyk7XG5cbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdChOdW1iZXIocGFydHNbMF0pLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0ICsgJ2UnICsgcGFydHNbMV07XG4gICAgICAgIH0sXG4gICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IG51bWVyYWwuXy5pbmNsdWRlcyhzdHJpbmcsICdlKycpID8gc3RyaW5nLnNwbGl0KCdlKycpIDogc3RyaW5nLnNwbGl0KCdlLScpLFxuICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHBhcnRzWzBdKSxcbiAgICAgICAgICAgICAgICBwb3dlciA9IE51bWJlcihwYXJ0c1sxXSk7XG5cbiAgICAgICAgICAgIHBvd2VyID0gbnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgJ2UtJykgPyBwb3dlciAqPSAtMSA6IHBvd2VyO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICB2YXIgY29yckZhY3RvciA9IG51bWVyYWwuXy5jb3JyZWN0aW9uRmFjdG9yKGFjY3VtLCBjdXJyKSxcbiAgICAgICAgICAgICAgICAgICAgbnVtID0gKGFjY3VtICogY29yckZhY3RvcikgKiAoY3VyciAqIGNvcnJGYWN0b3IpIC8gKGNvcnJGYWN0b3IgKiBjb3JyRmFjdG9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVtZXJhbC5fLnJlZHVjZShbdmFsdWUsIE1hdGgucG93KDEwLCBwb3dlcildLCBjYmFjaywgMSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnb3JkaW5hbCcsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKG8pL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBudW1lcmFsLmxvY2FsZXNbbnVtZXJhbC5vcHRpb25zLmN1cnJlbnRMb2NhbGVdLFxuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBvcmRpbmFsID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyBvJykgPyAnICcgOiAnJztcblxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHNwYWNlIGJlZm9yZVxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9vLywgJycpO1xuXG4gICAgICAgICAgICBvcmRpbmFsICs9IGxvY2FsZS5vcmRpbmFsKHZhbHVlKTtcblxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0ICsgb3JkaW5hbDtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdwZXJjZW50YWdlJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oJSkvLFxuICAgICAgICAgICAgdW5mb3JtYXQ6IC8oJSkvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIHNwYWNlID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyAlJykgPyAnICcgOiAnJyxcbiAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgIGlmIChudW1lcmFsLm9wdGlvbnMuc2NhbGVQZXJjZW50QnkxMDApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICogMTAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlICVcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/XFwlLywgJycpO1xuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMob3V0cHV0LCAnKScpKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNwbGl0KCcnKTtcblxuICAgICAgICAgICAgICAgIG91dHB1dC5zcGxpY2UoLTEsIDAsIHNwYWNlICsgJyUnKTtcblxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5qb2luKCcnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0ICsgc3BhY2UgKyAnJSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciBudW1iZXIgPSBudW1lcmFsLl8uc3RyaW5nVG9OdW1iZXIoc3RyaW5nKTtcbiAgICAgICAgICAgIGlmIChudW1lcmFsLm9wdGlvbnMuc2NhbGVQZXJjZW50QnkxMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICogMC4wMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAndGltZScsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKDopLyxcbiAgICAgICAgICAgIHVuZm9ybWF0OiAvKDopL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBob3VycyA9IE1hdGguZmxvb3IodmFsdWUgLyA2MCAvIDYwKSxcbiAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5mbG9vcigodmFsdWUgLSAoaG91cnMgKiA2MCAqIDYwKSkgLyA2MCksXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IE1hdGgucm91bmQodmFsdWUgLSAoaG91cnMgKiA2MCAqIDYwKSAtIChtaW51dGVzICogNjApKTtcblxuICAgICAgICAgICAgcmV0dXJuIGhvdXJzICsgJzonICsgKG1pbnV0ZXMgPCAxMCA/ICcwJyArIG1pbnV0ZXMgOiBtaW51dGVzKSArICc6JyArIChzZWNvbmRzIDwgMTAgPyAnMCcgKyBzZWNvbmRzIDogc2Vjb25kcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciB0aW1lQXJyYXkgPSBzdHJpbmcuc3BsaXQoJzonKSxcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gMDtcblxuICAgICAgICAgICAgLy8gdHVybiBob3VycyBhbmQgbWludXRlcyBpbnRvIHNlY29uZHMgYW5kIGFkZCB0aGVtIGFsbCB1cFxuICAgICAgICAgICAgaWYgKHRpbWVBcnJheS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICAvLyBob3Vyc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgKE51bWJlcih0aW1lQXJyYXlbMF0pICogNjAgKiA2MCk7XG4gICAgICAgICAgICAgICAgLy8gbWludXRlc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgKE51bWJlcih0aW1lQXJyYXlbMV0pICogNjApO1xuICAgICAgICAgICAgICAgIC8vIHNlY29uZHNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIE51bWJlcih0aW1lQXJyYXlbMl0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lQXJyYXkubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgLy8gbWludXRlc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgKE51bWJlcih0aW1lQXJyYXlbMF0pICogNjApO1xuICAgICAgICAgICAgICAgIC8vIHNlY29uZHNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIE51bWJlcih0aW1lQXJyYXlbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcihzZWNvbmRzKTtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxucmV0dXJuIG51bWVyYWw7XG59KSk7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3ltYm9sO1xuIiwgInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUlzRGVlcFByb3AgPSAvXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcdyokLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxuICAgICAgdmFsdWUgPT0gbnVsbCB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gcmVJc1BsYWluUHJvcC50ZXN0KHZhbHVlKSB8fCAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpIHx8XG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleTtcbiIsICJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZTtcbiIsICJ2YXIgbWVtb2l6ZSA9IHJlcXVpcmUoJy4vbWVtb2l6ZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZUNhcHBlZDtcbiIsICJ2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmUoJy4vX21lbW9pemVDYXBwZWQnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvUGF0aDtcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUb1N0cmluZztcbiIsICJ2YXIgYmFzZVRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVRvU3RyaW5nJyk7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1N0cmluZztcbiIsICJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsICJ2YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvS2V5O1xuIiwgInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCAidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RWFjaDtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnR5O1xuIiwgInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnblZhbHVlO1xuIiwgInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25WYWx1ZTtcbiIsICJ2YXIgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpO1xuXG4vKipcbiAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3VmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5T2JqZWN0O1xuIiwgInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hc3NpZ25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ247XG4iLCAiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcbiAqIFtgT2JqZWN0LmtleXNgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGV4Y2VwdCB0aGF0IGl0IGluY2x1ZGVzIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIG5hdGl2ZUtleXNJbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5c0luO1xuIiwgInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5c0luID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5c0luJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgfVxuICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXNJbjtcbiIsICJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLCAidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hc3NpZ25JbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbkluKG9iamVjdCwgc291cmNlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25JbjtcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUJ1ZmZlcjtcbiIsICIvKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5QXJyYXk7XG4iLCAidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKTtcblxuLyoqXG4gKiBDb3BpZXMgb3duIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlTeW1ib2xzKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9scyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW1ib2xzO1xuIiwgInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRQcm90b3R5cGU7XG4iLCAidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9sc0luID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB3aGlsZSAob2JqZWN0KSB7XG4gICAgYXJyYXlQdXNoKHJlc3VsdCwgZ2V0U3ltYm9scyhvYmplY3QpKTtcbiAgICBvYmplY3QgPSBnZXRQcm90b3R5cGUob2JqZWN0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzSW47XG4iLCAidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgZ2V0U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9sc0luJyk7XG5cbi8qKlxuICogQ29waWVzIG93biBhbmQgaW5oZXJpdGVkIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlTeW1ib2xzSW4oc291cmNlLCBvYmplY3QpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3ltYm9sc0luO1xuIiwgInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9sc0luJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNJbiwgZ2V0U3ltYm9sc0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzSW47XG4iLCAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVBcnJheTtcbiIsICJ2YXIgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGFycmF5IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xuICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICBuZXcgVWludDhBcnJheShyZXN1bHQpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQXJyYXlCdWZmZXI7XG4iLCAidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBkYXRhVmlld2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhVmlldyBUaGUgZGF0YSB2aWV3IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBkYXRhIHZpZXcuXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGF0YVZpZXcoZGF0YVZpZXcsIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcihkYXRhVmlldy5idWZmZXIpIDogZGF0YVZpZXcuYnVmZmVyO1xuICByZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlciwgZGF0YVZpZXcuYnl0ZU9mZnNldCwgZGF0YVZpZXcuYnl0ZUxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVEYXRhVmlldztcbiIsICIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lUmVnRXhwO1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBgc3ltYm9sYCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzeW1ib2wgVGhlIHN5bWJvbCBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgc3ltYm9sIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVTeW1ib2woc3ltYm9sKSB7XG4gIHJldHVybiBzeW1ib2xWYWx1ZU9mID8gT2JqZWN0KHN5bWJvbFZhbHVlT2YuY2FsbChzeW1ib2wpKSA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lU3ltYm9sO1xuIiwgInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lVHlwZWRBcnJheTtcbiIsICJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKSxcbiAgICBjbG9uZURhdGFWaWV3ID0gcmVxdWlyZSgnLi9fY2xvbmVEYXRhVmlldycpLFxuICAgIGNsb25lUmVnRXhwID0gcmVxdWlyZSgnLi9fY2xvbmVSZWdFeHAnKSxcbiAgICBjbG9uZVN5bWJvbCA9IHJlcXVpcmUoJy4vX2Nsb25lU3ltYm9sJyksXG4gICAgY2xvbmVUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fY2xvbmVUeXBlZEFycmF5Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZSBiYXNlZCBvbiBpdHMgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBNYXBgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIGBTZXRgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsIHRhZywgaXNEZWVwKSB7XG4gIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTtcblxuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIGZsb2F0MzJUYWc6IGNhc2UgZmxvYXQ2NFRhZzpcbiAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6XG4gICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgIHJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZUJ5VGFnO1xuIiwgInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwgInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZU9iamVjdDtcbiIsICJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBtYXBUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWFwO1xuIiwgInZhciBiYXNlSXNNYXAgPSByZXF1aXJlKCcuL19iYXNlSXNNYXAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTWFwKG5ldyBNYXApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNNYXAobmV3IFdlYWtNYXApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzTWFwID0gbm9kZUlzTWFwID8gYmFzZVVuYXJ5KG5vZGVJc01hcCkgOiBiYXNlSXNNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXA7XG4iLCAidmFyIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1NldGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzU2V0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gc2V0VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1NldDtcbiIsICJ2YXIgYmFzZUlzU2V0ID0gcmVxdWlyZSgnLi9fYmFzZUlzU2V0JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1NldCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzU2V0O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU2V0YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1NldChuZXcgU2V0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU2V0KG5ldyBXZWFrU2V0KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1NldCA9IG5vZGVJc1NldCA/IGJhc2VVbmFyeShub2RlSXNTZXQpIDogYmFzZUlzU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU2V0O1xuIiwgInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ24gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduJyksXG4gICAgYmFzZUFzc2lnbkluID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbkluJyksXG4gICAgY2xvbmVCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUJ1ZmZlcicpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGNvcHlTeW1ib2xzID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHMnKSxcbiAgICBjb3B5U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHNJbicpLFxuICAgIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaW5pdENsb25lQXJyYXkgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVBcnJheScpLFxuICAgIGluaXRDbG9uZUJ5VGFnID0gcmVxdWlyZSgnLi9faW5pdENsb25lQnlUYWcnKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNNYXAgPSByZXF1aXJlKCcuL2lzTWFwJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTZXQgPSByZXF1aXJlKCcuL2lzU2V0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgc3VwcG9ydGVkIGJ5IGBfLmNsb25lYC4gKi9cbnZhciBjbG9uZWFibGVUYWdzID0ge307XG5jbG9uZWFibGVUYWdzW2FyZ3NUYWddID0gY2xvbmVhYmxlVGFnc1thcnJheVRhZ10gPVxuY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGFWaWV3VGFnXSA9XG5jbG9uZWFibGVUYWdzW2Jvb2xUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRlVGFnXSA9XG5jbG9uZWFibGVUYWdzW2Zsb2F0MzJUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDY0VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDhUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQxNlRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW21hcFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tudW1iZXJUYWddID0gY2xvbmVhYmxlVGFnc1tvYmplY3RUYWddID1cbmNsb25lYWJsZVRhZ3NbcmVnZXhwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3N0cmluZ1RhZ10gPSBjbG9uZWFibGVUYWdzW3N5bWJvbFRhZ10gPVxuY2xvbmVhYmxlVGFnc1t1aW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPVxuY2xvbmVhYmxlVGFnc1t1aW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbmNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9XG5jbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xvbmVgIGFuZCBgXy5jbG9uZURlZXBgIHdoaWNoIHRyYWNrc1xuICogdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBEZWVwIGNsb25lXG4gKiAgMiAtIEZsYXR0ZW4gaW5oZXJpdGVkIHByb3BlcnRpZXNcbiAqICA0IC0gQ2xvbmUgc3ltYm9sc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBUaGUga2V5IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIHBhcmVudCBvYmplY3Qgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBhbmQgdGhlaXIgY2xvbmUgY291bnRlcnBhcnRzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUNsb25lKHZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIG9iamVjdCwgc3RhY2spIHtcbiAgdmFyIHJlc3VsdCxcbiAgICAgIGlzRGVlcCA9IGJpdG1hc2sgJiBDTE9ORV9ERUVQX0ZMQUcsXG4gICAgICBpc0ZsYXQgPSBiaXRtYXNrICYgQ0xPTkVfRkxBVF9GTEFHLFxuICAgICAgaXNGdWxsID0gYml0bWFzayAmIENMT05FX1NZTUJPTFNfRkxBRztcblxuICBpZiAoY3VzdG9taXplcikge1xuICAgIHJlc3VsdCA9IG9iamVjdCA/IGN1c3RvbWl6ZXIodmFsdWUsIGtleSwgb2JqZWN0LCBzdGFjaykgOiBjdXN0b21pemVyKHZhbHVlKTtcbiAgfVxuICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpO1xuICBpZiAoaXNBcnIpIHtcbiAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZSk7XG4gICAgaWYgKCFpc0RlZXApIHtcbiAgICAgIHJldHVybiBjb3B5QXJyYXkodmFsdWUsIHJlc3VsdCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpLFxuICAgICAgICBpc0Z1bmMgPSB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xuXG4gICAgaWYgKGlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGNsb25lQnVmZmVyKHZhbHVlLCBpc0RlZXApO1xuICAgIH1cbiAgICBpZiAodGFnID09IG9iamVjdFRhZyB8fCB0YWcgPT0gYXJnc1RhZyB8fCAoaXNGdW5jICYmICFvYmplY3QpKSB7XG4gICAgICByZXN1bHQgPSAoaXNGbGF0IHx8IGlzRnVuYykgPyB7fSA6IGluaXRDbG9uZU9iamVjdCh2YWx1ZSk7XG4gICAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgICByZXR1cm4gaXNGbGF0XG4gICAgICAgICAgPyBjb3B5U3ltYm9sc0luKHZhbHVlLCBiYXNlQXNzaWduSW4ocmVzdWx0LCB2YWx1ZSkpXG4gICAgICAgICAgOiBjb3B5U3ltYm9scyh2YWx1ZSwgYmFzZUFzc2lnbihyZXN1bHQsIHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY2xvbmVhYmxlVGFnc1t0YWddKSB7XG4gICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZSA6IHt9O1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIHJldHVybiBpdHMgY29ycmVzcG9uZGluZyBjbG9uZS5cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQodmFsdWUpO1xuICBpZiAoc3RhY2tlZCkge1xuICAgIHJldHVybiBzdGFja2VkO1xuICB9XG4gIHN0YWNrLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICBpZiAoaXNTZXQodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSkge1xuICAgICAgcmVzdWx0LmFkZChiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN1YlZhbHVlLCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc01hcCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdC5zZXQoa2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIga2V5c0Z1bmMgPSBpc0Z1bGxcbiAgICA/IChpc0ZsYXQgPyBnZXRBbGxLZXlzSW4gOiBnZXRBbGxLZXlzKVxuICAgIDogKGlzRmxhdCA/IGtleXNJbiA6IGtleXMpO1xuXG4gIHZhciBwcm9wcyA9IGlzQXJyID8gdW5kZWZpbmVkIDoga2V5c0Z1bmModmFsdWUpO1xuICBhcnJheUVhY2gocHJvcHMgfHwgdmFsdWUsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGtleSA9IHN1YlZhbHVlO1xuICAgICAgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBwb3B1bGF0ZSBjbG9uZSAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDbG9uZTtcbiIsICIvKipcbiAqIEdldHMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmxhc3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gbGFzdChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBhcnJheVtsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsYXN0O1xuIiwgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2xpY2VgIHdpdGhvdXQgYW4gaXRlcmF0ZWUgY2FsbCBndWFyZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAtc3RhcnQgPiBsZW5ndGggPyAwIDogKGxlbmd0aCArIHN0YXJ0KTtcbiAgfVxuICBlbmQgPSBlbmQgPiBsZW5ndGggPyBsZW5ndGggOiBlbmQ7XG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlbmd0aDtcbiAgfVxuICBsZW5ndGggPSBzdGFydCA+IGVuZCA/IDAgOiAoKGVuZCAtIHN0YXJ0KSA+Pj4gMCk7XG4gIHN0YXJ0ID4+Pj0gMDtcblxuICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gYXJyYXlbaW5kZXggKyBzdGFydF07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2xpY2U7XG4iLCAidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0JyksXG4gICAgYmFzZVNsaWNlID0gcmVxdWlyZSgnLi9fYmFzZVNsaWNlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgcGFyZW50IHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheX0gcGF0aCBUaGUgcGF0aCB0byBnZXQgdGhlIHBhcmVudCB2YWx1ZSBvZi5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwYXJlbnQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHBhcmVudChvYmplY3QsIHBhdGgpIHtcbiAgcmV0dXJuIHBhdGgubGVuZ3RoIDwgMiA/IG9iamVjdCA6IGJhc2VHZXQob2JqZWN0LCBiYXNlU2xpY2UocGF0aCwgMCwgLTEpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBsYXN0ID0gcmVxdWlyZSgnLi9sYXN0JyksXG4gICAgcGFyZW50ID0gcmVxdWlyZSgnLi9fcGFyZW50JyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuc2V0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwcm9wZXJ0eSBwYXRoIHRvIHVuc2V0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbnNldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gIG9iamVjdCA9IHBhcmVudChvYmplY3QsIHBhdGgpO1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgfHwgZGVsZXRlIG9iamVjdFt0b0tleShsYXN0KHBhdGgpKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuc2V0O1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1BsYWluT2JqZWN0O1xuIiwgInZhciBpc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi9pc1BsYWluT2JqZWN0Jyk7XG5cbi8qKlxuICogVXNlZCBieSBgXy5vbWl0YCB0byBjdXN0b21pemUgaXRzIGBfLmNsb25lRGVlcGAgdXNlIHRvIG9ubHkgY2xvbmUgcGxhaW5cbiAqIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdW5jbG9uZWQgdmFsdWUgb3IgYHVuZGVmaW5lZGAgdG8gZGVmZXIgY2xvbmluZyB0byBgXy5jbG9uZURlZXBgLlxuICovXG5mdW5jdGlvbiBjdXN0b21PbWl0Q2xvbmUodmFsdWUpIHtcbiAgcmV0dXJuIGlzUGxhaW5PYmplY3QodmFsdWUpID8gdW5kZWZpbmVkIDogdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3VzdG9tT21pdENsb25lO1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRmxhdHRlbmFibGU7XG4iLCAidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzRmxhdHRlbmFibGUgPSByZXF1aXJlKCcuL19pc0ZsYXR0ZW5hYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGbGF0dGVuO1xuIiwgInZhciBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyk7XG5cbi8qKlxuICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW47XG4iLCAiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwgInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgIH1cbiAgICBpbmRleCA9IC0xO1xuICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICB9XG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlclJlc3Q7XG4iLCAiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLCAiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpZGVudGl0eTtcbiIsICJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCAiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwgInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLCAidmFyIGZsYXR0ZW4gPSByZXF1aXJlKCcuL2ZsYXR0ZW4nKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIGZsYXR0ZW5zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHVuZGVmaW5lZCwgZmxhdHRlbiksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdFJlc3Q7XG4iLCAidmFyIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBiYXNlQ2xvbmUgPSByZXF1aXJlKCcuL19iYXNlQ2xvbmUnKSxcbiAgICBiYXNlVW5zZXQgPSByZXF1aXJlKCcuL19iYXNlVW5zZXQnKSxcbiAgICBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBjdXN0b21PbWl0Q2xvbmUgPSByZXF1aXJlKCcuL19jdXN0b21PbWl0Q2xvbmUnKSxcbiAgICBmbGF0UmVzdCA9IHJlcXVpcmUoJy4vX2ZsYXRSZXN0JyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGVcbiAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBgXy5waWNrYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYic6ICcyJyB9XG4gKi9cbnZhciBvbWl0ID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgdmFyIGlzRGVlcCA9IGZhbHNlO1xuICBwYXRocyA9IGFycmF5TWFwKHBhdGhzLCBmdW5jdGlvbihwYXRoKSB7XG4gICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgaXNEZWVwIHx8IChpc0RlZXAgPSBwYXRoLmxlbmd0aCA+IDEpO1xuICAgIHJldHVybiBwYXRoO1xuICB9KTtcbiAgY29weU9iamVjdChvYmplY3QsIGdldEFsbEtleXNJbihvYmplY3QpLCByZXN1bHQpO1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmVzdWx0ID0gYmFzZUNsb25lKHJlc3VsdCwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfRkxBVF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21PbWl0Q2xvbmUpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGJhc2VVbnNldChyZXN1bHQsIHBhdGhzW2xlbmd0aF0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBvbWl0O1xuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSAweGVhZDk7XG52YXIgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSAweGVhZGE7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IDB4ZWFkNTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gMHhlYWQ3O1xudmFyIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gMHhlYWUwO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gMHhlYWUxO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gMHhlYWUyO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IDB4ZWFlMztcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5lbGVtZW50Jyk7XG4gIFJFQUNUX1BPUlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wb3J0YWwnKTtcbiAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnJhZ21lbnQnKTtcbiAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbiAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvZmlsZXInKTtcbiAgUkVBQ1RfUFJPVklERVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvdmlkZXInKTtcbiAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5jb250ZXh0Jyk7XG4gIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG4gIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG4gIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xuICBSRUFDVF9NRU1PX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm1lbW8nKTtcbiAgUkVBQ1RfTEFaWV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sYXp5Jyk7XG4gIFJFQUNUX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmJsb2NrJyk7XG4gIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zZXJ2ZXIuYmxvY2snKTtcbiAgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnVuZGFtZW50YWwnKTtcbiAgUkVBQ1RfU0NPUEVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2NvcGUnKTtcbiAgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9wYXF1ZS5pZCcpO1xuICBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZGVidWdfdHJhY2VfbW9kZScpO1xuICBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG4gIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGVnYWN5X2hpZGRlbicpO1xufVxuXG4vLyBGaWx0ZXIgY2VydGFpbiBET00gYXR0cmlidXRlcyAoZS5nLiBzcmMsIGhyZWYpIGlmIHRoZWlyIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5ncy5cblxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBDcmVhdGUgRXZlbnQgSGFuZGxlIEFQSS5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUgfHwgdHlwZVswXSA9PT0gUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENoZWNrIGlmIHdlJ3JlIHJlcXVpcmVkIHRvIGFkZCBhIHBvcnQgbnVtYmVyLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkZWZhdWx0LXBvcnRcbiAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gcG9ydCBQb3J0IG51bWJlciB3ZSBuZWVkIHRvIGNoZWNrXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvdG9jb2wgUHJvdG9jb2wgd2UgbmVlZCB0byBjaGVjayBhZ2FpbnN0LlxuICogQHJldHVybnMge0Jvb2xlYW59IElzIGl0IGEgZGVmYXVsdCBwb3J0IGZvciB0aGUgZ2l2ZW4gcHJvdG9jb2xcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcXVpcmVkKHBvcnQsIHByb3RvY29sKSB7XG4gIHByb3RvY29sID0gcHJvdG9jb2wuc3BsaXQoJzonKVswXTtcbiAgcG9ydCA9ICtwb3J0O1xuXG4gIGlmICghcG9ydCkgcmV0dXJuIGZhbHNlO1xuXG4gIHN3aXRjaCAocHJvdG9jb2wpIHtcbiAgICBjYXNlICdodHRwJzpcbiAgICBjYXNlICd3cyc6XG4gICAgcmV0dXJuIHBvcnQgIT09IDgwO1xuXG4gICAgY2FzZSAnaHR0cHMnOlxuICAgIGNhc2UgJ3dzcyc6XG4gICAgcmV0dXJuIHBvcnQgIT09IDQ0MztcblxuICAgIGNhc2UgJ2Z0cCc6XG4gICAgcmV0dXJuIHBvcnQgIT09IDIxO1xuXG4gICAgY2FzZSAnZ29waGVyJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gNzA7XG5cbiAgICBjYXNlICdmaWxlJzpcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gcG9ydCAhPT0gMDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIHVuZGVmO1xuXG4vKipcbiAqIERlY29kZSBhIFVSSSBlbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFVSSSBlbmNvZGVkIHN0cmluZy5cbiAqIEByZXR1cm5zIHtTdHJpbmd8TnVsbH0gVGhlIGRlY29kZWQgc3RyaW5nLlxuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoaW5wdXQucmVwbGFjZSgvXFwrL2csICcgJykpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRlbXB0cyB0byBlbmNvZGUgYSBnaXZlbiBpbnB1dC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyB0aGF0IG5lZWRzIHRvIGJlIGVuY29kZWQuXG4gKiBAcmV0dXJucyB7U3RyaW5nfE51bGx9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBlbmNvZGUoaW5wdXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogU2ltcGxlIHF1ZXJ5IHN0cmluZyBwYXJzZXIuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBxdWVyeSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBwYXJzZWQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gcXVlcnlzdHJpbmcocXVlcnkpIHtcbiAgdmFyIHBhcnNlciA9IC8oW149PyMmXSspPT8oW14mXSopL2dcbiAgICAsIHJlc3VsdCA9IHt9XG4gICAgLCBwYXJ0O1xuXG4gIHdoaWxlIChwYXJ0ID0gcGFyc2VyLmV4ZWMocXVlcnkpKSB7XG4gICAgdmFyIGtleSA9IGRlY29kZShwYXJ0WzFdKVxuICAgICAgLCB2YWx1ZSA9IGRlY29kZShwYXJ0WzJdKTtcblxuICAgIC8vXG4gICAgLy8gUHJldmVudCBvdmVycmlkaW5nIG9mIGV4aXN0aW5nIHByb3BlcnRpZXMuIFRoaXMgZW5zdXJlcyB0aGF0IGJ1aWxkLWluXG4gICAgLy8gbWV0aG9kcyBsaWtlIGB0b1N0cmluZ2Agb3IgX19wcm90b19fIGFyZSBub3Qgb3ZlcnJpZGVuIGJ5IG1hbGljaW91c1xuICAgIC8vIHF1ZXJ5c3RyaW5ncy5cbiAgICAvL1xuICAgIC8vIEluIHRoZSBjYXNlIGlmIGZhaWxlZCBkZWNvZGluZywgd2Ugd2FudCB0byBvbWl0IHRoZSBrZXkvdmFsdWUgcGFpcnNcbiAgICAvLyBmcm9tIHRoZSByZXN1bHQuXG4gICAgLy9cbiAgICBpZiAoa2V5ID09PSBudWxsIHx8IHZhbHVlID09PSBudWxsIHx8IGtleSBpbiByZXN1bHQpIGNvbnRpbnVlO1xuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhIHF1ZXJ5IHN0cmluZyB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdGhhdCBzaG91bGQgYmUgdHJhbnNmb3JtZWQuXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJlZml4IE9wdGlvbmFsIHByZWZpeC5cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBxdWVyeXN0cmluZ2lmeShvYmosIHByZWZpeCkge1xuICBwcmVmaXggPSBwcmVmaXggfHwgJyc7XG5cbiAgdmFyIHBhaXJzID0gW11cbiAgICAsIHZhbHVlXG4gICAgLCBrZXk7XG5cbiAgLy9cbiAgLy8gT3B0aW9uYWxseSBwcmVmaXggd2l0aCBhICc/JyBpZiBuZWVkZWRcbiAgLy9cbiAgaWYgKCdzdHJpbmcnICE9PSB0eXBlb2YgcHJlZml4KSBwcmVmaXggPSAnPyc7XG5cbiAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgLy9cbiAgICAgIC8vIEVkZ2UgY2FzZXMgd2hlcmUgd2UgYWN0dWFsbHkgd2FudCB0byBlbmNvZGUgdGhlIHZhbHVlIHRvIGFuIGVtcHR5XG4gICAgICAvLyBzdHJpbmcgaW5zdGVhZCBvZiB0aGUgc3RyaW5naWZpZWQgdmFsdWUuXG4gICAgICAvL1xuICAgICAgaWYgKCF2YWx1ZSAmJiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmIHx8IGlzTmFOKHZhbHVlKSkpIHtcbiAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgIH1cblxuICAgICAga2V5ID0gZW5jb2RlKGtleSk7XG4gICAgICB2YWx1ZSA9IGVuY29kZSh2YWx1ZSk7XG5cbiAgICAgIC8vXG4gICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gZW5jb2RlIHRoZSBzdHJpbmdzLCB3ZSBzaG91bGQgYmFpbCBvdXQgYXMgd2UgZG9uJ3RcbiAgICAgIC8vIHdhbnQgdG8gYWRkIGludmFsaWQgc3RyaW5ncyB0byB0aGUgcXVlcnkuXG4gICAgICAvL1xuICAgICAgaWYgKGtleSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gbnVsbCkgY29udGludWU7XG4gICAgICBwYWlycy5wdXNoKGtleSArJz0nKyB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhaXJzLmxlbmd0aCA/IHByZWZpeCArIHBhaXJzLmpvaW4oJyYnKSA6ICcnO1xufVxuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuZXhwb3J0cy5zdHJpbmdpZnkgPSBxdWVyeXN0cmluZ2lmeTtcbmV4cG9ydHMucGFyc2UgPSBxdWVyeXN0cmluZztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciByZXF1aXJlZCA9IHJlcXVpcmUoJ3JlcXVpcmVzLXBvcnQnKVxuICAsIHFzID0gcmVxdWlyZSgncXVlcnlzdHJpbmdpZnknKVxuICAsIGNvbnRyb2xPcldoaXRlc3BhY2UgPSAvXltcXHgwMC1cXHgyMFxcdTAwYTBcXHUxNjgwXFx1MjAwMC1cXHUyMDBhXFx1MjAyOFxcdTIwMjlcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHVmZWZmXSsvXG4gICwgQ1JIVExGID0gL1tcXG5cXHJcXHRdL2dcbiAgLCBzbGFzaGVzID0gL15bQS1aYS16XVtBLVphLXowLTkrLS5dKjpcXC9cXC8vXG4gICwgcG9ydCA9IC86XFxkKyQvXG4gICwgcHJvdG9jb2xyZSA9IC9eKFthLXpdW2EtejAtOS4rLV0qOik/KFxcL1xcLyk/KFtcXFxcL10rKT8oW1xcU1xcc10qKS9pXG4gICwgd2luZG93c0RyaXZlTGV0dGVyID0gL15bYS16QS1aXTovO1xuXG4vKipcbiAqIFJlbW92ZSBjb250cm9sIGNoYXJhY3RlcnMgYW5kIHdoaXRlc3BhY2UgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gc3RyIFN0cmluZyB0byB0cmltLlxuICogQHJldHVybnMge1N0cmluZ30gQSBuZXcgc3RyaW5nIHJlcHJlc2VudGluZyBgc3RyYCBzdHJpcHBlZCBvZiBjb250cm9sXG4gKiAgICAgY2hhcmFjdGVycyBhbmQgd2hpdGVzcGFjZSBmcm9tIGl0cyBiZWdpbm5pbmcuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHRyaW1MZWZ0KHN0cikge1xuICByZXR1cm4gKHN0ciA/IHN0ciA6ICcnKS50b1N0cmluZygpLnJlcGxhY2UoY29udHJvbE9yV2hpdGVzcGFjZSwgJycpO1xufVxuXG4vKipcbiAqIFRoZXNlIGFyZSB0aGUgcGFyc2UgcnVsZXMgZm9yIHRoZSBVUkwgcGFyc2VyLCBpdCBpbmZvcm1zIHRoZSBwYXJzZXJcbiAqIGFib3V0OlxuICpcbiAqIDAuIFRoZSBjaGFyIGl0IE5lZWRzIHRvIHBhcnNlLCBpZiBpdCdzIGEgc3RyaW5nIGl0IHNob3VsZCBiZSBkb25lIHVzaW5nXG4gKiAgICBpbmRleE9mLCBSZWdFeHAgdXNpbmcgZXhlYyBhbmQgTmFOIG1lYW5zIHNldCBhcyBjdXJyZW50IHZhbHVlLlxuICogMS4gVGhlIHByb3BlcnR5IHdlIHNob3VsZCBzZXQgd2hlbiBwYXJzaW5nIHRoaXMgdmFsdWUuXG4gKiAyLiBJbmRpY2F0aW9uIGlmIGl0J3MgYmFja3dhcmRzIG9yIGZvcndhcmQgcGFyc2luZywgd2hlbiBzZXQgYXMgbnVtYmVyIGl0J3NcbiAqICAgIHRoZSB2YWx1ZSBvZiBleHRyYSBjaGFycyB0aGF0IHNob3VsZCBiZSBzcGxpdCBvZmYuXG4gKiAzLiBJbmhlcml0IGZyb20gbG9jYXRpb24gaWYgbm9uIGV4aXN0aW5nIGluIHRoZSBwYXJzZXIuXG4gKiA0LiBgdG9Mb3dlckNhc2VgIHRoZSByZXN1bHRpbmcgdmFsdWUuXG4gKi9cbnZhciBydWxlcyA9IFtcbiAgWycjJywgJ2hhc2gnXSwgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGJhY2suXG4gIFsnPycsICdxdWVyeSddLCAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBiYWNrLlxuICBmdW5jdGlvbiBzYW5pdGl6ZShhZGRyZXNzLCB1cmwpIHsgICAgIC8vIFNhbml0aXplIHdoYXQgaXMgbGVmdCBvZiB0aGUgYWRkcmVzc1xuICAgIHJldHVybiBpc1NwZWNpYWwodXJsLnByb3RvY29sKSA/IGFkZHJlc3MucmVwbGFjZSgvXFxcXC9nLCAnLycpIDogYWRkcmVzcztcbiAgfSxcbiAgWycvJywgJ3BhdGhuYW1lJ10sICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGJhY2suXG4gIFsnQCcsICdhdXRoJywgMV0sICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBmcm9udC5cbiAgW05hTiwgJ2hvc3QnLCB1bmRlZmluZWQsIDEsIDFdLCAgICAgICAvLyBTZXQgbGVmdCBvdmVyIHZhbHVlLlxuICBbLzooXFxkKikkLywgJ3BvcnQnLCB1bmRlZmluZWQsIDFdLCAgICAvLyBSZWdFeHAgdGhlIGJhY2suXG4gIFtOYU4sICdob3N0bmFtZScsIHVuZGVmaW5lZCwgMSwgMV0gICAgLy8gU2V0IGxlZnQgb3Zlci5cbl07XG5cbi8qKlxuICogVGhlc2UgcHJvcGVydGllcyBzaG91bGQgbm90IGJlIGNvcGllZCBvciBpbmhlcml0ZWQgZnJvbS4gVGhpcyBpcyBvbmx5IG5lZWRlZFxuICogZm9yIGFsbCBub24gYmxvYiBVUkwncyBhcyBhIGJsb2IgVVJMIGRvZXMgbm90IGluY2x1ZGUgYSBoYXNoLCBvbmx5IHRoZVxuICogb3JpZ2luLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG52YXIgaWdub3JlID0geyBoYXNoOiAxLCBxdWVyeTogMSB9O1xuXG4vKipcbiAqIFRoZSBsb2NhdGlvbiBvYmplY3QgZGlmZmVycyB3aGVuIHlvdXIgY29kZSBpcyBsb2FkZWQgdGhyb3VnaCBhIG5vcm1hbCBwYWdlLFxuICogV29ya2VyIG9yIHRocm91Z2ggYSB3b3JrZXIgdXNpbmcgYSBibG9iLiBBbmQgd2l0aCB0aGUgYmxvYmJsZSBiZWdpbnMgdGhlXG4gKiB0cm91YmxlIGFzIHRoZSBsb2NhdGlvbiBvYmplY3Qgd2lsbCBjb250YWluIHRoZSBVUkwgb2YgdGhlIGJsb2IsIG5vdCB0aGVcbiAqIGxvY2F0aW9uIG9mIHRoZSBwYWdlIHdoZXJlIG91ciBjb2RlIGlzIGxvYWRlZCBpbi4gVGhlIGFjdHVhbCBvcmlnaW4gaXNcbiAqIGVuY29kZWQgaW4gdGhlIGBwYXRobmFtZWAgc28gd2UgY2FuIHRoYW5rZnVsbHkgZ2VuZXJhdGUgYSBnb29kIFwiZGVmYXVsdFwiXG4gKiBsb2NhdGlvbiBmcm9tIGl0IHNvIHdlIGNhbiBnZW5lcmF0ZSBwcm9wZXIgcmVsYXRpdmUgVVJMJ3MgYWdhaW4uXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBsb2MgT3B0aW9uYWwgZGVmYXVsdCBsb2NhdGlvbiBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBsb2xjYXRpb24gb2JqZWN0LlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBsb2xjYXRpb24obG9jKSB7XG4gIHZhciBnbG9iYWxWYXI7XG5cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSBnbG9iYWxWYXIgPSB3aW5kb3c7XG4gIGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSBnbG9iYWxWYXIgPSBnbG9iYWw7XG4gIGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgZ2xvYmFsVmFyID0gc2VsZjtcbiAgZWxzZSBnbG9iYWxWYXIgPSB7fTtcblxuICB2YXIgbG9jYXRpb24gPSBnbG9iYWxWYXIubG9jYXRpb24gfHwge307XG4gIGxvYyA9IGxvYyB8fCBsb2NhdGlvbjtcblxuICB2YXIgZmluYWxkZXN0aW5hdGlvbiA9IHt9XG4gICAgLCB0eXBlID0gdHlwZW9mIGxvY1xuICAgICwga2V5O1xuXG4gIGlmICgnYmxvYjonID09PSBsb2MucHJvdG9jb2wpIHtcbiAgICBmaW5hbGRlc3RpbmF0aW9uID0gbmV3IFVybCh1bmVzY2FwZShsb2MucGF0aG5hbWUpLCB7fSk7XG4gIH0gZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGUpIHtcbiAgICBmaW5hbGRlc3RpbmF0aW9uID0gbmV3IFVybChsb2MsIHt9KTtcbiAgICBmb3IgKGtleSBpbiBpZ25vcmUpIGRlbGV0ZSBmaW5hbGRlc3RpbmF0aW9uW2tleV07XG4gIH0gZWxzZSBpZiAoJ29iamVjdCcgPT09IHR5cGUpIHtcbiAgICBmb3IgKGtleSBpbiBsb2MpIHtcbiAgICAgIGlmIChrZXkgaW4gaWdub3JlKSBjb250aW51ZTtcbiAgICAgIGZpbmFsZGVzdGluYXRpb25ba2V5XSA9IGxvY1trZXldO1xuICAgIH1cblxuICAgIGlmIChmaW5hbGRlc3RpbmF0aW9uLnNsYXNoZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmluYWxkZXN0aW5hdGlvbi5zbGFzaGVzID0gc2xhc2hlcy50ZXN0KGxvYy5ocmVmKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmluYWxkZXN0aW5hdGlvbjtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgcHJvdG9jb2wgc2NoZW1lIGlzIHNwZWNpYWwuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IFRoZSBwcm90b2NvbCBzY2hlbWUgb2YgdGhlIFVSTFxuICogQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBwcm90b2NvbCBzY2hlbWUgaXMgc3BlY2lhbCwgZWxzZSBgZmFsc2VgXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpc1NwZWNpYWwoc2NoZW1lKSB7XG4gIHJldHVybiAoXG4gICAgc2NoZW1lID09PSAnZmlsZTonIHx8XG4gICAgc2NoZW1lID09PSAnZnRwOicgfHxcbiAgICBzY2hlbWUgPT09ICdodHRwOicgfHxcbiAgICBzY2hlbWUgPT09ICdodHRwczonIHx8XG4gICAgc2NoZW1lID09PSAnd3M6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ3dzczonXG4gICk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUHJvdG9jb2xFeHRyYWN0XG4gKiBAdHlwZSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBwcm90b2NvbCBQcm90b2NvbCBtYXRjaGVkIGluIHRoZSBVUkwsIGluIGxvd2VyY2FzZS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc2xhc2hlcyBgdHJ1ZWAgaWYgcHJvdG9jb2wgaXMgZm9sbG93ZWQgYnkgXCIvL1wiLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcmVzdCBSZXN0IG9mIHRoZSBVUkwgdGhhdCBpcyBub3QgcGFydCBvZiB0aGUgcHJvdG9jb2wuXG4gKi9cblxuLyoqXG4gKiBFeHRyYWN0IHByb3RvY29sIGluZm9ybWF0aW9uIGZyb20gYSBVUkwgd2l0aC93aXRob3V0IGRvdWJsZSBzbGFzaCAoXCIvL1wiKS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyBVUkwgd2Ugd2FudCB0byBleHRyYWN0IGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gbG9jYXRpb25cbiAqIEByZXR1cm4ge1Byb3RvY29sRXh0cmFjdH0gRXh0cmFjdGVkIGluZm9ybWF0aW9uLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFByb3RvY29sKGFkZHJlc3MsIGxvY2F0aW9uKSB7XG4gIGFkZHJlc3MgPSB0cmltTGVmdChhZGRyZXNzKTtcbiAgYWRkcmVzcyA9IGFkZHJlc3MucmVwbGFjZShDUkhUTEYsICcnKTtcbiAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCB7fTtcblxuICB2YXIgbWF0Y2ggPSBwcm90b2NvbHJlLmV4ZWMoYWRkcmVzcyk7XG4gIHZhciBwcm90b2NvbCA9IG1hdGNoWzFdID8gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKSA6ICcnO1xuICB2YXIgZm9yd2FyZFNsYXNoZXMgPSAhIW1hdGNoWzJdO1xuICB2YXIgb3RoZXJTbGFzaGVzID0gISFtYXRjaFszXTtcbiAgdmFyIHNsYXNoZXNDb3VudCA9IDA7XG4gIHZhciByZXN0O1xuXG4gIGlmIChmb3J3YXJkU2xhc2hlcykge1xuICAgIGlmIChvdGhlclNsYXNoZXMpIHtcbiAgICAgIHJlc3QgPSBtYXRjaFsyXSArIG1hdGNoWzNdICsgbWF0Y2hbNF07XG4gICAgICBzbGFzaGVzQ291bnQgPSBtYXRjaFsyXS5sZW5ndGggKyBtYXRjaFszXS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3QgPSBtYXRjaFsyXSArIG1hdGNoWzRdO1xuICAgICAgc2xhc2hlc0NvdW50ID0gbWF0Y2hbMl0ubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAob3RoZXJTbGFzaGVzKSB7XG4gICAgICByZXN0ID0gbWF0Y2hbM10gKyBtYXRjaFs0XTtcbiAgICAgIHNsYXNoZXNDb3VudCA9IG1hdGNoWzNdLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdCA9IG1hdGNoWzRdXG4gICAgfVxuICB9XG5cbiAgaWYgKHByb3RvY29sID09PSAnZmlsZTonKSB7XG4gICAgaWYgKHNsYXNoZXNDb3VudCA+PSAyKSB7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZSgyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNTcGVjaWFsKHByb3RvY29sKSkge1xuICAgIHJlc3QgPSBtYXRjaFs0XTtcbiAgfSBlbHNlIGlmIChwcm90b2NvbCkge1xuICAgIGlmIChmb3J3YXJkU2xhc2hlcykge1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoMik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHNsYXNoZXNDb3VudCA+PSAyICYmIGlzU3BlY2lhbChsb2NhdGlvbi5wcm90b2NvbCkpIHtcbiAgICByZXN0ID0gbWF0Y2hbNF07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHByb3RvY29sOiBwcm90b2NvbCxcbiAgICBzbGFzaGVzOiBmb3J3YXJkU2xhc2hlcyB8fCBpc1NwZWNpYWwocHJvdG9jb2wpLFxuICAgIHNsYXNoZXNDb3VudDogc2xhc2hlc0NvdW50LFxuICAgIHJlc3Q6IHJlc3RcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgcmVsYXRpdmUgVVJMIHBhdGhuYW1lIGFnYWluc3QgYSBiYXNlIFVSTCBwYXRobmFtZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVsYXRpdmUgUGF0aG5hbWUgb2YgdGhlIHJlbGF0aXZlIFVSTC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBiYXNlIFBhdGhuYW1lIG9mIHRoZSBiYXNlIFVSTC5cbiAqIEByZXR1cm4ge1N0cmluZ30gUmVzb2x2ZWQgcGF0aG5hbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXNvbHZlKHJlbGF0aXZlLCBiYXNlKSB7XG4gIGlmIChyZWxhdGl2ZSA9PT0gJycpIHJldHVybiBiYXNlO1xuXG4gIHZhciBwYXRoID0gKGJhc2UgfHwgJy8nKS5zcGxpdCgnLycpLnNsaWNlKDAsIC0xKS5jb25jYXQocmVsYXRpdmUuc3BsaXQoJy8nKSlcbiAgICAsIGkgPSBwYXRoLmxlbmd0aFxuICAgICwgbGFzdCA9IHBhdGhbaSAtIDFdXG4gICAgLCB1bnNoaWZ0ID0gZmFsc2VcbiAgICAsIHVwID0gMDtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgaWYgKHBhdGhbaV0gPT09ICcuJykge1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXRoW2ldID09PSAnLi4nKSB7XG4gICAgICBwYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgaWYgKGkgPT09IDApIHVuc2hpZnQgPSB0cnVlO1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1bnNoaWZ0KSBwYXRoLnVuc2hpZnQoJycpO1xuICBpZiAobGFzdCA9PT0gJy4nIHx8IGxhc3QgPT09ICcuLicpIHBhdGgucHVzaCgnJyk7XG5cbiAgcmV0dXJuIHBhdGguam9pbignLycpO1xufVxuXG4vKipcbiAqIFRoZSBhY3R1YWwgVVJMIGluc3RhbmNlLiBJbnN0ZWFkIG9mIHJldHVybmluZyBhbiBvYmplY3Qgd2UndmUgb3B0ZWQtaW4gdG9cbiAqIGNyZWF0ZSBhbiBhY3R1YWwgY29uc3RydWN0b3IgYXMgaXQncyBtdWNoIG1vcmUgbWVtb3J5IGVmZmljaWVudCBhbmRcbiAqIGZhc3RlciBhbmQgaXQgcGxlYXNlcyBteSBPQ0QuXG4gKlxuICogSXQgaXMgd29ydGggbm90aW5nIHRoYXQgd2Ugc2hvdWxkIG5vdCB1c2UgYFVSTGAgYXMgY2xhc3MgbmFtZSB0byBwcmV2ZW50XG4gKiBjbGFzaGVzIHdpdGggdGhlIGdsb2JhbCBVUkwgaW5zdGFuY2UgdGhhdCBnb3QgaW50cm9kdWNlZCBpbiBicm93c2Vycy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIFVSTCB3ZSB3YW50IHRvIHBhcnNlLlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBbbG9jYXRpb25dIExvY2F0aW9uIGRlZmF1bHRzIGZvciByZWxhdGl2ZSBwYXRocy5cbiAqIEBwYXJhbSB7Qm9vbGVhbnxGdW5jdGlvbn0gW3BhcnNlcl0gUGFyc2VyIGZvciB0aGUgcXVlcnkgc3RyaW5nLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gVXJsKGFkZHJlc3MsIGxvY2F0aW9uLCBwYXJzZXIpIHtcbiAgYWRkcmVzcyA9IHRyaW1MZWZ0KGFkZHJlc3MpO1xuICBhZGRyZXNzID0gYWRkcmVzcy5yZXBsYWNlKENSSFRMRiwgJycpO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBVcmwpKSB7XG4gICAgcmV0dXJuIG5ldyBVcmwoYWRkcmVzcywgbG9jYXRpb24sIHBhcnNlcik7XG4gIH1cblxuICB2YXIgcmVsYXRpdmUsIGV4dHJhY3RlZCwgcGFyc2UsIGluc3RydWN0aW9uLCBpbmRleCwga2V5XG4gICAgLCBpbnN0cnVjdGlvbnMgPSBydWxlcy5zbGljZSgpXG4gICAgLCB0eXBlID0gdHlwZW9mIGxvY2F0aW9uXG4gICAgLCB1cmwgPSB0aGlzXG4gICAgLCBpID0gMDtcblxuICAvL1xuICAvLyBUaGUgZm9sbG93aW5nIGlmIHN0YXRlbWVudHMgYWxsb3dzIHRoaXMgbW9kdWxlIHR3byBoYXZlIGNvbXBhdGliaWxpdHkgd2l0aFxuICAvLyAyIGRpZmZlcmVudCBBUEk6XG4gIC8vXG4gIC8vIDEuIE5vZGUuanMncyBgdXJsLnBhcnNlYCBhcGkgd2hpY2ggYWNjZXB0cyBhIFVSTCwgYm9vbGVhbiBhcyBhcmd1bWVudHNcbiAgLy8gICAgd2hlcmUgdGhlIGJvb2xlYW4gaW5kaWNhdGVzIHRoYXQgdGhlIHF1ZXJ5IHN0cmluZyBzaG91bGQgYWxzbyBiZSBwYXJzZWQuXG4gIC8vXG4gIC8vIDIuIFRoZSBgVVJMYCBpbnRlcmZhY2Ugb2YgdGhlIGJyb3dzZXIgd2hpY2ggYWNjZXB0cyBhIFVSTCwgb2JqZWN0IGFzXG4gIC8vICAgIGFyZ3VtZW50cy4gVGhlIHN1cHBsaWVkIG9iamVjdCB3aWxsIGJlIHVzZWQgYXMgZGVmYXVsdCB2YWx1ZXMgLyBmYWxsLWJhY2tcbiAgLy8gICAgZm9yIHJlbGF0aXZlIHBhdGhzLlxuICAvL1xuICBpZiAoJ29iamVjdCcgIT09IHR5cGUgJiYgJ3N0cmluZycgIT09IHR5cGUpIHtcbiAgICBwYXJzZXIgPSBsb2NhdGlvbjtcbiAgICBsb2NhdGlvbiA9IG51bGw7XG4gIH1cblxuICBpZiAocGFyc2VyICYmICdmdW5jdGlvbicgIT09IHR5cGVvZiBwYXJzZXIpIHBhcnNlciA9IHFzLnBhcnNlO1xuXG4gIGxvY2F0aW9uID0gbG9sY2F0aW9uKGxvY2F0aW9uKTtcblxuICAvL1xuICAvLyBFeHRyYWN0IHByb3RvY29sIGluZm9ybWF0aW9uIGJlZm9yZSBydW5uaW5nIHRoZSBpbnN0cnVjdGlvbnMuXG4gIC8vXG4gIGV4dHJhY3RlZCA9IGV4dHJhY3RQcm90b2NvbChhZGRyZXNzIHx8ICcnLCBsb2NhdGlvbik7XG4gIHJlbGF0aXZlID0gIWV4dHJhY3RlZC5wcm90b2NvbCAmJiAhZXh0cmFjdGVkLnNsYXNoZXM7XG4gIHVybC5zbGFzaGVzID0gZXh0cmFjdGVkLnNsYXNoZXMgfHwgcmVsYXRpdmUgJiYgbG9jYXRpb24uc2xhc2hlcztcbiAgdXJsLnByb3RvY29sID0gZXh0cmFjdGVkLnByb3RvY29sIHx8IGxvY2F0aW9uLnByb3RvY29sIHx8ICcnO1xuICBhZGRyZXNzID0gZXh0cmFjdGVkLnJlc3Q7XG5cbiAgLy9cbiAgLy8gV2hlbiB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudCBpcyBhYnNlbnQgdGhlIFVSTCBzdGFydHMgd2l0aCBhIHBhdGhcbiAgLy8gY29tcG9uZW50LlxuICAvL1xuICBpZiAoXG4gICAgZXh0cmFjdGVkLnByb3RvY29sID09PSAnZmlsZTonICYmIChcbiAgICAgIGV4dHJhY3RlZC5zbGFzaGVzQ291bnQgIT09IDIgfHwgd2luZG93c0RyaXZlTGV0dGVyLnRlc3QoYWRkcmVzcykpIHx8XG4gICAgKCFleHRyYWN0ZWQuc2xhc2hlcyAmJlxuICAgICAgKGV4dHJhY3RlZC5wcm90b2NvbCB8fFxuICAgICAgICBleHRyYWN0ZWQuc2xhc2hlc0NvdW50IDwgMiB8fFxuICAgICAgICAhaXNTcGVjaWFsKHVybC5wcm90b2NvbCkpKVxuICApIHtcbiAgICBpbnN0cnVjdGlvbnNbM10gPSBbLyguKikvLCAncGF0aG5hbWUnXTtcbiAgfVxuXG4gIGZvciAoOyBpIDwgaW5zdHJ1Y3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNbaV07XG5cbiAgICBpZiAodHlwZW9mIGluc3RydWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhZGRyZXNzID0gaW5zdHJ1Y3Rpb24oYWRkcmVzcywgdXJsKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHBhcnNlID0gaW5zdHJ1Y3Rpb25bMF07XG4gICAga2V5ID0gaW5zdHJ1Y3Rpb25bMV07XG5cbiAgICBpZiAocGFyc2UgIT09IHBhcnNlKSB7XG4gICAgICB1cmxba2V5XSA9IGFkZHJlc3M7XG4gICAgfSBlbHNlIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHBhcnNlKSB7XG4gICAgICBpbmRleCA9IHBhcnNlID09PSAnQCdcbiAgICAgICAgPyBhZGRyZXNzLmxhc3RJbmRleE9mKHBhcnNlKVxuICAgICAgICA6IGFkZHJlc3MuaW5kZXhPZihwYXJzZSk7XG5cbiAgICAgIGlmICh+aW5kZXgpIHtcbiAgICAgICAgaWYgKCdudW1iZXInID09PSB0eXBlb2YgaW5zdHJ1Y3Rpb25bMl0pIHtcbiAgICAgICAgICB1cmxba2V5XSA9IGFkZHJlc3Muc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLnNsaWNlKGluZGV4ICsgaW5zdHJ1Y3Rpb25bMl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVybFtrZXldID0gYWRkcmVzcy5zbGljZShpbmRleCk7XG4gICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoaW5kZXggPSBwYXJzZS5leGVjKGFkZHJlc3MpKSkge1xuICAgICAgdXJsW2tleV0gPSBpbmRleFsxXTtcbiAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLnNsaWNlKDAsIGluZGV4LmluZGV4KTtcbiAgICB9XG5cbiAgICB1cmxba2V5XSA9IHVybFtrZXldIHx8IChcbiAgICAgIHJlbGF0aXZlICYmIGluc3RydWN0aW9uWzNdID8gbG9jYXRpb25ba2V5XSB8fCAnJyA6ICcnXG4gICAgKTtcblxuICAgIC8vXG4gICAgLy8gSG9zdG5hbWUsIGhvc3QgYW5kIHByb3RvY29sIHNob3VsZCBiZSBsb3dlcmNhc2VkIHNvIHRoZXkgY2FuIGJlIHVzZWQgdG9cbiAgICAvLyBjcmVhdGUgYSBwcm9wZXIgYG9yaWdpbmAuXG4gICAgLy9cbiAgICBpZiAoaW5zdHJ1Y3Rpb25bNF0pIHVybFtrZXldID0gdXJsW2tleV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8vXG4gIC8vIEFsc28gcGFyc2UgdGhlIHN1cHBsaWVkIHF1ZXJ5IHN0cmluZyBpbiB0byBhbiBvYmplY3QuIElmIHdlJ3JlIHN1cHBsaWVkXG4gIC8vIHdpdGggYSBjdXN0b20gcGFyc2VyIGFzIGZ1bmN0aW9uIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYnVpbGQtaW5cbiAgLy8gcGFyc2VyLlxuICAvL1xuICBpZiAocGFyc2VyKSB1cmwucXVlcnkgPSBwYXJzZXIodXJsLnF1ZXJ5KTtcblxuICAvL1xuICAvLyBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlLCByZXNvbHZlIHRoZSBwYXRobmFtZSBhZ2FpbnN0IHRoZSBiYXNlIFVSTC5cbiAgLy9cbiAgaWYgKFxuICAgICAgcmVsYXRpdmVcbiAgICAmJiBsb2NhdGlvbi5zbGFzaGVzXG4gICAgJiYgdXJsLnBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgJiYgKHVybC5wYXRobmFtZSAhPT0gJycgfHwgbG9jYXRpb24ucGF0aG5hbWUgIT09ICcnKVxuICApIHtcbiAgICB1cmwucGF0aG5hbWUgPSByZXNvbHZlKHVybC5wYXRobmFtZSwgbG9jYXRpb24ucGF0aG5hbWUpO1xuICB9XG5cbiAgLy9cbiAgLy8gRGVmYXVsdCB0byBhIC8gZm9yIHBhdGhuYW1lIGlmIG5vbmUgZXhpc3RzLiBUaGlzIG5vcm1hbGl6ZXMgdGhlIFVSTFxuICAvLyB0byBhbHdheXMgaGF2ZSBhIC9cbiAgLy9cbiAgaWYgKHVybC5wYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJyAmJiBpc1NwZWNpYWwodXJsLnByb3RvY29sKSkge1xuICAgIHVybC5wYXRobmFtZSA9ICcvJyArIHVybC5wYXRobmFtZTtcbiAgfVxuXG4gIC8vXG4gIC8vIFdlIHNob3VsZCBub3QgYWRkIHBvcnQgbnVtYmVycyBpZiB0aGV5IGFyZSBhbHJlYWR5IHRoZSBkZWZhdWx0IHBvcnQgbnVtYmVyXG4gIC8vIGZvciBhIGdpdmVuIHByb3RvY29sLiBBcyB0aGUgaG9zdCBhbHNvIGNvbnRhaW5zIHRoZSBwb3J0IG51bWJlciB3ZSdyZSBnb2luZ1xuICAvLyBvdmVycmlkZSBpdCB3aXRoIHRoZSBob3N0bmFtZSB3aGljaCBjb250YWlucyBubyBwb3J0IG51bWJlci5cbiAgLy9cbiAgaWYgKCFyZXF1aXJlZCh1cmwucG9ydCwgdXJsLnByb3RvY29sKSkge1xuICAgIHVybC5ob3N0ID0gdXJsLmhvc3RuYW1lO1xuICAgIHVybC5wb3J0ID0gJyc7XG4gIH1cblxuICAvL1xuICAvLyBQYXJzZSBkb3duIHRoZSBgYXV0aGAgZm9yIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQuXG4gIC8vXG4gIHVybC51c2VybmFtZSA9IHVybC5wYXNzd29yZCA9ICcnO1xuXG4gIGlmICh1cmwuYXV0aCkge1xuICAgIGluZGV4ID0gdXJsLmF1dGguaW5kZXhPZignOicpO1xuXG4gICAgaWYgKH5pbmRleCkge1xuICAgICAgdXJsLnVzZXJuYW1lID0gdXJsLmF1dGguc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgdXJsLnVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh1cmwudXNlcm5hbWUpKTtcblxuICAgICAgdXJsLnBhc3N3b3JkID0gdXJsLmF1dGguc2xpY2UoaW5kZXggKyAxKTtcbiAgICAgIHVybC5wYXNzd29yZCA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLnBhc3N3b3JkKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsLnVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh1cmwuYXV0aCkpO1xuICAgIH1cblxuICAgIHVybC5hdXRoID0gdXJsLnBhc3N3b3JkID8gdXJsLnVzZXJuYW1lICsnOicrIHVybC5wYXNzd29yZCA6IHVybC51c2VybmFtZTtcbiAgfVxuXG4gIHVybC5vcmlnaW4gPSB1cmwucHJvdG9jb2wgIT09ICdmaWxlOicgJiYgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgJiYgdXJsLmhvc3RcbiAgICA/IHVybC5wcm90b2NvbCArJy8vJysgdXJsLmhvc3RcbiAgICA6ICdudWxsJztcblxuICAvL1xuICAvLyBUaGUgaHJlZiBpcyBqdXN0IHRoZSBjb21waWxlZCByZXN1bHQuXG4gIC8vXG4gIHVybC5ocmVmID0gdXJsLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogVGhpcyBpcyBjb252ZW5pZW5jZSBtZXRob2QgZm9yIGNoYW5naW5nIHByb3BlcnRpZXMgaW4gdGhlIFVSTCBpbnN0YW5jZSB0b1xuICogaW5zdXJlIHRoYXQgdGhleSBhbGwgcHJvcGFnYXRlIGNvcnJlY3RseS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFydCAgICAgICAgICBQcm9wZXJ0eSB3ZSBuZWVkIHRvIGFkanVzdC5cbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlICAgICAgICAgIFRoZSBuZXdseSBhc3NpZ25lZCB2YWx1ZS5cbiAqIEBwYXJhbSB7Qm9vbGVhbnxGdW5jdGlvbn0gZm4gIFdoZW4gc2V0dGluZyB0aGUgcXVlcnksIGl0IHdpbGwgYmUgdGhlIGZ1bmN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIHBhcnNlIHRoZSBxdWVyeS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0dGluZyB0aGUgcHJvdG9jb2wsIGRvdWJsZSBzbGFzaCB3aWxsIGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHVybCBpZiBpdCBpcyB0cnVlLlxuICogQHJldHVybnMge1VSTH0gVVJMIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gc2V0KHBhcnQsIHZhbHVlLCBmbikge1xuICB2YXIgdXJsID0gdGhpcztcblxuICBzd2l0Y2ggKHBhcnQpIHtcbiAgICBjYXNlICdxdWVyeSc6XG4gICAgICBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgdmFsdWUgPSAoZm4gfHwgcXMucGFyc2UpKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3BvcnQnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICghcmVxdWlyZWQodmFsdWUsIHVybC5wcm90b2NvbCkpIHtcbiAgICAgICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWU7XG4gICAgICAgIHVybFtwYXJ0XSA9ICcnO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgICB1cmwuaG9zdCA9IHVybC5ob3N0bmFtZSArJzonKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdob3N0bmFtZSc6XG4gICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcblxuICAgICAgaWYgKHVybC5wb3J0KSB2YWx1ZSArPSAnOicrIHVybC5wb3J0O1xuICAgICAgdXJsLmhvc3QgPSB2YWx1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaG9zdCc6XG4gICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcblxuICAgICAgaWYgKHBvcnQudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnOicpO1xuICAgICAgICB1cmwucG9ydCA9IHZhbHVlLnBvcCgpO1xuICAgICAgICB1cmwuaG9zdG5hbWUgPSB2YWx1ZS5qb2luKCc6Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmwuaG9zdG5hbWUgPSB2YWx1ZTtcbiAgICAgICAgdXJsLnBvcnQgPSAnJztcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwcm90b2NvbCc6XG4gICAgICB1cmwucHJvdG9jb2wgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdXJsLnNsYXNoZXMgPSAhZm47XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3BhdGhuYW1lJzpcbiAgICBjYXNlICdoYXNoJzpcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YXIgY2hhciA9IHBhcnQgPT09ICdwYXRobmFtZScgPyAnLycgOiAnIyc7XG4gICAgICAgIHVybFtwYXJ0XSA9IHZhbHVlLmNoYXJBdCgwKSAhPT0gY2hhciA/IGNoYXIgKyB2YWx1ZSA6IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3VzZXJuYW1lJzpcbiAgICBjYXNlICdwYXNzd29yZCc6XG4gICAgICB1cmxbcGFydF0gPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdhdXRoJzpcbiAgICAgIHZhciBpbmRleCA9IHZhbHVlLmluZGV4T2YoJzonKTtcblxuICAgICAgaWYgKH5pbmRleCkge1xuICAgICAgICB1cmwudXNlcm5hbWUgPSB2YWx1ZS5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgIHVybC51c2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLnVzZXJuYW1lKSk7XG5cbiAgICAgICAgdXJsLnBhc3N3b3JkID0gdmFsdWUuc2xpY2UoaW5kZXggKyAxKTtcbiAgICAgICAgdXJsLnBhc3N3b3JkID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh1cmwucGFzc3dvcmQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybC51c2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcbiAgICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaW5zID0gcnVsZXNbaV07XG5cbiAgICBpZiAoaW5zWzRdKSB1cmxbaW5zWzFdXSA9IHVybFtpbnNbMV1dLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICB1cmwuYXV0aCA9IHVybC5wYXNzd29yZCA/IHVybC51c2VybmFtZSArJzonKyB1cmwucGFzc3dvcmQgOiB1cmwudXNlcm5hbWU7XG5cbiAgdXJsLm9yaWdpbiA9IHVybC5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJiBpc1NwZWNpYWwodXJsLnByb3RvY29sKSAmJiB1cmwuaG9zdFxuICAgID8gdXJsLnByb3RvY29sICsnLy8nKyB1cmwuaG9zdFxuICAgIDogJ251bGwnO1xuXG4gIHVybC5ocmVmID0gdXJsLnRvU3RyaW5nKCk7XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIHByb3BlcnRpZXMgYmFjayBpbiB0byBhIHZhbGlkIGFuZCBmdWxsIFVSTCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5naWZ5IE9wdGlvbmFsIHF1ZXJ5IHN0cmluZ2lmeSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IENvbXBpbGVkIHZlcnNpb24gb2YgdGhlIFVSTC5cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcoc3RyaW5naWZ5KSB7XG4gIGlmICghc3RyaW5naWZ5IHx8ICdmdW5jdGlvbicgIT09IHR5cGVvZiBzdHJpbmdpZnkpIHN0cmluZ2lmeSA9IHFzLnN0cmluZ2lmeTtcblxuICB2YXIgcXVlcnlcbiAgICAsIHVybCA9IHRoaXNcbiAgICAsIGhvc3QgPSB1cmwuaG9zdFxuICAgICwgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2w7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLmNoYXJBdChwcm90b2NvbC5sZW5ndGggLSAxKSAhPT0gJzonKSBwcm90b2NvbCArPSAnOic7XG5cbiAgdmFyIHJlc3VsdCA9XG4gICAgcHJvdG9jb2wgK1xuICAgICgodXJsLnByb3RvY29sICYmIHVybC5zbGFzaGVzKSB8fCBpc1NwZWNpYWwodXJsLnByb3RvY29sKSA/ICcvLycgOiAnJyk7XG5cbiAgaWYgKHVybC51c2VybmFtZSkge1xuICAgIHJlc3VsdCArPSB1cmwudXNlcm5hbWU7XG4gICAgaWYgKHVybC5wYXNzd29yZCkgcmVzdWx0ICs9ICc6JysgdXJsLnBhc3N3b3JkO1xuICAgIHJlc3VsdCArPSAnQCc7XG4gIH0gZWxzZSBpZiAodXJsLnBhc3N3b3JkKSB7XG4gICAgcmVzdWx0ICs9ICc6JysgdXJsLnBhc3N3b3JkO1xuICAgIHJlc3VsdCArPSAnQCc7XG4gIH0gZWxzZSBpZiAoXG4gICAgdXJsLnByb3RvY29sICE9PSAnZmlsZTonICYmXG4gICAgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgJiZcbiAgICAhaG9zdCAmJlxuICAgIHVybC5wYXRobmFtZSAhPT0gJy8nXG4gICkge1xuICAgIC8vXG4gICAgLy8gQWRkIGJhY2sgdGhlIGVtcHR5IHVzZXJpbmZvLCBvdGhlcndpc2UgdGhlIG9yaWdpbmFsIGludmFsaWQgVVJMXG4gICAgLy8gbWlnaHQgYmUgdHJhbnNmb3JtZWQgaW50byBhIHZhbGlkIG9uZSB3aXRoIGB1cmwucGF0aG5hbWVgIGFzIGhvc3QuXG4gICAgLy9cbiAgICByZXN1bHQgKz0gJ0AnO1xuICB9XG5cbiAgLy9cbiAgLy8gVHJhaWxpbmcgY29sb24gaXMgcmVtb3ZlZCBmcm9tIGB1cmwuaG9zdGAgd2hlbiBpdCBpcyBwYXJzZWQuIElmIGl0IHN0aWxsXG4gIC8vIGVuZHMgd2l0aCBhIGNvbG9uLCB0aGVuIGFkZCBiYWNrIHRoZSB0cmFpbGluZyBjb2xvbiB0aGF0IHdhcyByZW1vdmVkLiBUaGlzXG4gIC8vIHByZXZlbnRzIGFuIGludmFsaWQgVVJMIGZyb20gYmVpbmcgdHJhbnNmb3JtZWQgaW50byBhIHZhbGlkIG9uZS5cbiAgLy9cbiAgaWYgKGhvc3RbaG9zdC5sZW5ndGggLSAxXSA9PT0gJzonIHx8IChwb3J0LnRlc3QodXJsLmhvc3RuYW1lKSAmJiAhdXJsLnBvcnQpKSB7XG4gICAgaG9zdCArPSAnOic7XG4gIH1cblxuICByZXN1bHQgKz0gaG9zdCArIHVybC5wYXRobmFtZTtcblxuICBxdWVyeSA9ICdvYmplY3QnID09PSB0eXBlb2YgdXJsLnF1ZXJ5ID8gc3RyaW5naWZ5KHVybC5xdWVyeSkgOiB1cmwucXVlcnk7XG4gIGlmIChxdWVyeSkgcmVzdWx0ICs9ICc/JyAhPT0gcXVlcnkuY2hhckF0KDApID8gJz8nKyBxdWVyeSA6IHF1ZXJ5O1xuXG4gIGlmICh1cmwuaGFzaCkgcmVzdWx0ICs9IHVybC5oYXNoO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cblVybC5wcm90b3R5cGUgPSB7IHNldDogc2V0LCB0b1N0cmluZzogdG9TdHJpbmcgfTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgVVJMIHBhcnNlciBhbmQgc29tZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdGhhdCBtaWdodCBiZSB1c2VmdWwgZm9yXG4vLyBvdGhlcnMgb3IgdGVzdGluZy5cbi8vXG5VcmwuZXh0cmFjdFByb3RvY29sID0gZXh0cmFjdFByb3RvY29sO1xuVXJsLmxvY2F0aW9uID0gbG9sY2F0aW9uO1xuVXJsLnRyaW1MZWZ0ID0gdHJpbUxlZnQ7XG5VcmwucXMgPSBxcztcblxubW9kdWxlLmV4cG9ydHMgPSBVcmw7XG4iLCAidmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nLFxuICAgIHJlSGFzUmVnRXhwQ2hhciA9IFJlZ0V4cChyZVJlZ0V4cENoYXIuc291cmNlKTtcblxuLyoqXG4gKiBFc2NhcGVzIHRoZSBgUmVnRXhwYCBzcGVjaWFsIGNoYXJhY3RlcnMgXCJeXCIsIFwiJFwiLCBcIlxcXCIsIFwiLlwiLCBcIipcIiwgXCIrXCIsXG4gKiBcIj9cIiwgXCIoXCIsIFwiKVwiLCBcIltcIiwgXCJdXCIsIFwie1wiLCBcIn1cIiwgYW5kIFwifFwiIGluIGBzdHJpbmdgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVzY2FwZVJlZ0V4cCgnW2xvZGFzaF0oaHR0cHM6Ly9sb2Rhc2guY29tLyknKTtcbiAqIC8vID0+ICdcXFtsb2Rhc2hcXF1cXChodHRwczovL2xvZGFzaFxcLmNvbS9cXCknXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNSZWdFeHBDaGFyLnRlc3Qoc3RyaW5nKSlcbiAgICA/IHN0cmluZy5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gICAgOiBzdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXNjYXBlUmVnRXhwO1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCB0aGlzIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG4gIC8vIE5hc2hvcm4gYnVnOlxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTI4XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMzBcbiAgaWYgKGNsYXNzb2ZSYXcoZm4pID09PSAnRnVuY3Rpb24nKSByZXR1cm4gdW5jdXJyeVRoaXMoZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgSVNfSFRNTEREQSA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWxsOiBkb2N1bWVudEFsbCxcbiAgSVNfSFRNTEREQTogSVNfSFRNTEREQVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJGRvY3VtZW50QWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCcpO1xuXG52YXIgZG9jdW1lbnRBbGwgPSAkZG9jdW1lbnRBbGwuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbm1vZHVsZS5leHBvcnRzID0gJGRvY3VtZW50QWxsLklTX0hUTUxEREEgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgJGRvY3VtZW50QWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCcpO1xuXG52YXIgZG9jdW1lbnRBbGwgPSAkZG9jdW1lbnRBbGwuYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRkb2N1bWVudEFsbC5JU19IVE1MRERBID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpIHx8IGl0ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodmFyaWFibGUpID8gdmFyaWFibGUgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24ocGF0aFtuYW1lc3BhY2VdKSB8fCBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pXG4gICAgOiBwYXRoW25hbWVzcGFjZV0gJiYgcGF0aFtuYW1lc3BhY2VdW21ldGhvZF0gfHwgZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIG5hdmlnYXRvciAhPSAndW5kZWZpbmVkJyAmJiBTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjMzLjInLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyMyBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjMzLjIvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyYXBwZXIpIHtcbiAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYik7XG4gICAgICB9IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYiwgYyk7XG4gICAgfSByZXR1cm4gYXBwbHkoTmF0aXZlQ29uc3RydWN0b3IsIHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBQUk9UTyA9IG9wdGlvbnMucHJvdG87XG5cbiAgdmFyIG5hdGl2ZVNvdXJjZSA9IEdMT0JBTCA/IGdsb2JhbCA6IFNUQVRJQyA/IGdsb2JhbFtUQVJHRVRdIDogKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG5cbiAgdmFyIHRhcmdldCA9IEdMT0JBTCA/IHBhdGggOiBwYXRoW1RBUkdFVF0gfHwgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFRBUkdFVCwge30pW1RBUkdFVF07XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXNPd24obmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT0gdHlwZW9mIHNvdXJjZVByb3BlcnR5KSBjb250aW51ZTtcblxuICAgIC8vIGJpbmQgbWV0aG9kcyB0byBnbG9iYWwgZm9yIGNhbGxpbmcgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWwpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2VzIGluIHRoaXMgdmVyc2lvblxuICAgIGVsc2UgaWYgKG9wdGlvbnMud3JhcCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IHdyYXBDb25zdHJ1Y3Rvcihzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgZWxzZSBpZiAoUFJPVE8gJiYgaXNDYWxsYWJsZShzb3VyY2VQcm9wZXJ0eSkpIHJlc3VsdFByb3BlcnR5ID0gdW5jdXJyeVRoaXMoc291cmNlUHJvcGVydHkpO1xuICAgIC8vIGRlZmF1bHQgY2FzZVxuICAgIGVsc2UgcmVzdWx0UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eTtcblxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8IChzb3VyY2VQcm9wZXJ0eSAmJiBzb3VyY2VQcm9wZXJ0eS5zaGFtKSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShyZXN1bHRQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHJlc3VsdFByb3BlcnR5KTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzT3duKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aFtWSVJUVUFMX1BST1RPVFlQRV0sIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgLy8gZXhwb3J0IHJlYWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIGlmIChvcHRpb25zLnJlYWwgJiYgdGFyZ2V0UHJvdG90eXBlICYmIChGT1JDRUQgfHwgIXRhcmdldFByb3RvdHlwZVtrZXldKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0UHJvdG90eXBlLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eS5zaGFtKSBkZWZpbmVQcm9wZXJ0eS5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KSwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKHByb3BlcnR5S2V5IGluIG9iamVjdCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIHByb3BlcnR5S2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbcHJvcGVydHlLZXldID0gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgZW1wdHkgPSBbXTtcbnZhciBjb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIGNvbnN0cnVjdG9yUmVnRXhwID0gL15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLztcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoY29uc3RydWN0b3JSZWdFeHAuZXhlYyk7XG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9ICFjb25zdHJ1Y3RvclJlZ0V4cC50ZXN0KG5vb3ApO1xuXG52YXIgaXNDb25zdHJ1Y3Rvck1vZGVybiA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0cnVjdChub29wLCBlbXB0eSwgYXJndW1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzQ29uc3RydWN0b3JMZWdhY3kgPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChjbGFzc29mKGFyZ3VtZW50KSkge1xuICAgIGNhc2UgJ0FzeW5jRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0dlbmVyYXRvckZ1bmN0aW9uJzpcbiAgICBjYXNlICdBc3luY0dlbmVyYXRvckZ1bmN0aW9uJzogcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gd2UgY2FuJ3QgY2hlY2sgLnByb3RvdHlwZSBzaW5jZSBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgLmJpbmQgaGF2ZW4ndCBpdFxuICAgIC8vIGBGdW5jdGlvbiN0b1N0cmluZ2AgdGhyb3dzIG9uIHNvbWUgYnVpbHQtaXQgZnVuY3Rpb24gaW4gc29tZSBsZWdhY3kgZW5naW5lc1xuICAgIC8vIChmb3IgZXhhbXBsZSwgYERPTVF1YWRgIGFuZCBzaW1pbGFyIGluIEZGNDEtKVxuICAgIHJldHVybiBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8ICEhZXhlYyhjb25zdHJ1Y3RvclJlZ0V4cCwgaW5zcGVjdFNvdXJjZShhcmd1bWVudCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5pc0NvbnN0cnVjdG9yTGVnYWN5LnNoYW0gPSB0cnVlO1xuXG4vLyBgSXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gIWNvbnN0cnVjdCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsZWQ7XG4gIHJldHVybiBpc0NvbnN0cnVjdG9yTW9kZXJuKGlzQ29uc3RydWN0b3JNb2Rlcm4uY2FsbClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihPYmplY3QpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlOyB9KVxuICAgIHx8IGNhbGxlZDtcbn0pID8gaXNDb25zdHJ1Y3RvckxlZ2FjeSA6IGlzQ29uc3RydWN0b3JNb2Rlcm47XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4vLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIGxlbik7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgMSk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gIHZhciByZXN1bHQgPSAkQXJyYXkobWF4KGZpbiAtIGssIDApKTtcbiAgdmFyIG4gPSAwO1xuICBmb3IgKDsgayA8IGZpbjsgaysrLCBuKyspIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gIHJlc3VsdC5sZW5ndGggPSBuO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW51bWVyYWJsZSkgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eS5mKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHZhciBTeW1ib2wgPSBwYXRoLlN5bWJvbCB8fCAocGF0aC5TeW1ib2wgPSB7fSk7XG4gIGlmICghaGFzT3duKFN5bWJvbCwgTkFNRSkpIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgTkFNRSwge1xuICAgIHZhbHVlOiB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoTkFNRSlcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHZhciBTeW1ib2xQcm90b3R5cGUgPSBTeW1ib2wgJiYgU3ltYm9sLnByb3RvdHlwZTtcbiAgdmFyIHZhbHVlT2YgPSBTeW1ib2xQcm90b3R5cGUgJiYgU3ltYm9sUHJvdG90eXBlLnZhbHVlT2Y7XG4gIHZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbiAgaWYgKFN5bWJvbFByb3RvdHlwZSAmJiAhU3ltYm9sUHJvdG90eXBlW1RPX1BSSU1JVElWRV0pIHtcbiAgICAvLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIC5sZW5ndGhcbiAgICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBmdW5jdGlvbiAoaGludCkge1xuICAgICAgcmV0dXJuIGNhbGwodmFsdWVPZiwgdGhpcyk7XG4gICAgfSwgeyBhcml0eTogMSB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICBpZiAoaXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGU7XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJSZWplY3QgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBuYXRpdmVPYmplY3RDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG52YXIgSElEREVOID0gc2hhcmVkS2V5KCdoaWRkZW4nKTtcbnZhciBTWU1CT0wgPSAnU3ltYm9sJztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1lNQk9MKTtcblxudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2wgJiYgJFN5bWJvbFtQUk9UT1RZUEVdO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mO1xudmFyIG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIFVTRV9TRVRURVIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBmYWxsYmFja0RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgdmFyIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCBQKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpIGRlbGV0ZSBPYmplY3RQcm90b3R5cGVbUF07XG4gIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciAmJiBPICE9PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGUsIFAsIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpO1xuICB9XG59O1xuXG52YXIgc2V0U3ltYm9sRGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdENyZWF0ZShuYXRpdmVEZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPT0gNztcbn0pID8gZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA6IG5hdGl2ZURlZmluZVByb3BlcnR5O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcsIGRlc2NyaXB0aW9uKSB7XG4gIHZhciBzeW1ib2wgPSBBbGxTeW1ib2xzW3RhZ10gPSBuYXRpdmVPYmplY3RDcmVhdGUoU3ltYm9sUHJvdG90eXBlKTtcbiAgc2V0SW50ZXJuYWxTdGF0ZShzeW1ib2wsIHtcbiAgICB0eXBlOiBTWU1CT0wsXG4gICAgdGFnOiB0YWcsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gIH0pO1xuICBpZiAoIURFU0NSSVBUT1JTKSBzeW1ib2wuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgcmV0dXJuIHN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGlmIChPID09PSBPYmplY3RQcm90b3R5cGUpICRkZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQLCBBdHRyaWJ1dGVzKTtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFBdHRyaWJ1dGVzLmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzT3duKE8sIEhJRERFTikpIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIEhJRERFTiwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHt9KSk7XG4gICAgICBPW0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNPd24oTywgSElEREVOKSAmJiBPW0hJRERFTl1ba2V5XSkgT1tISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSBuYXRpdmVPYmplY3RDcmVhdGUoQXR0cmlidXRlcywgeyBlbnVtZXJhYmxlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2NyaXB0b3IoTywga2V5LCBBdHRyaWJ1dGVzKTtcbiAgfSByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywga2V5LCBBdHRyaWJ1dGVzKTtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BlcnRpZXMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhwcm9wZXJ0aWVzKS5jb25jYXQoJGdldE93blByb3BlcnR5U3ltYm9scyhwcm9wZXJ0aWVzKSk7XG4gICRmb3JFYWNoKGtleXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwoJHByb3BlcnR5SXNFbnVtZXJhYmxlLCBwcm9wZXJ0aWVzLCBrZXkpKSAkZGVmaW5lUHJvcGVydHkoTywga2V5LCBwcm9wZXJ0aWVzW2tleV0pO1xuICB9KTtcbiAgcmV0dXJuIE87XG59O1xuXG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyBuYXRpdmVPYmplY3RDcmVhdGUoTykgOiAkZGVmaW5lUHJvcGVydGllcyhuYXRpdmVPYmplY3RDcmVhdGUoTyksIFByb3BlcnRpZXMpO1xufTtcblxudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIFAgPSB0b1Byb3BlcnR5S2V5KFYpO1xuICB2YXIgZW51bWVyYWJsZSA9IGNhbGwobmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUsIHRoaXMsIFApO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBQKSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBlbnVtZXJhYmxlIHx8ICFoYXNPd24odGhpcywgUCkgfHwgIWhhc093bihBbGxTeW1ib2xzLCBQKSB8fCBoYXNPd24odGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1bUF1cbiAgICA/IGVudW1lcmFibGUgOiB0cnVlO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICB2YXIgaXQgPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG4gIGlmIChkZXNjcmlwdG9yICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzT3duKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIHtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpKSBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBJU19PQkpFQ1RfUFJPVE9UWVBFID0gTyA9PT0gT2JqZWN0UHJvdG90eXBlO1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKElTX09CSkVDVF9QUk9UT1RZUEUgPyBPYmplY3RQcm90b3R5cGVTeW1ib2xzIDogdG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAoIUlTX09CSkVDVF9QUk9UT1RZUEUgfHwgaGFzT3duKE9iamVjdFByb3RvdHlwZSwga2V5KSkpIHtcbiAgICAgIHB1c2gocmVzdWx0LCBBbGxTeW1ib2xzW2tleV0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBgU3ltYm9sYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wtY29uc3RydWN0b3JcbmlmICghTkFUSVZFX1NZTUJPTCkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmIChpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgIHZhciBkZXNjcmlwdGlvbiA9ICFhcmd1bWVudHMubGVuZ3RoIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogJHRvU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHRhZyA9IHVpZChkZXNjcmlwdGlvbik7XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyICR0aGlzID0gdGhpcyA9PT0gdW5kZWZpbmVkID8gZ2xvYmFsIDogdGhpcztcbiAgICAgIGlmICgkdGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBjYWxsKHNldHRlciwgT2JqZWN0UHJvdG90eXBlU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhc093bigkdGhpcywgSElEREVOKSAmJiBoYXNPd24oJHRoaXNbSElEREVOXSwgdGFnKSkgJHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRTeW1ib2xEZXNjcmlwdG9yKCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBkZWZpbmVCdWlsdEluKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydGllcztcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3ZWxsS25vd25TeW1ib2wobmFtZSksIG5hbWUpO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLVN5bWJvbC1kZXNjcmlwdGlvblxuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihPYmplY3RQcm90b3R5cGUsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wuZm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyhbXS5zbGljZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZXBsYWNlcikge1xuICBpZiAoaXNDYWxsYWJsZShyZXBsYWNlcikpIHJldHVybiByZXBsYWNlcjtcbiAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmV0dXJuO1xuICB2YXIgcmF3TGVuZ3RoID0gcmVwbGFjZXIubGVuZ3RoO1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd0xlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZW1lbnQgPSByZXBsYWNlcltpXTtcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ3N0cmluZycpIHB1c2goa2V5cywgZWxlbWVudCk7XG4gICAgZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ251bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ051bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ1N0cmluZycpIHB1c2goa2V5cywgdG9TdHJpbmcoZWxlbWVudCkpO1xuICB9XG4gIHZhciBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciByb290ID0gdHJ1ZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHJvb3QpIHtcbiAgICAgIHJvb3QgPSBmYWxzZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHJldHVybiB2YWx1ZTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXNMZW5ndGg7IGorKykgaWYgKGtleXNbal0gPT09IGtleSkgcmV0dXJuIHZhbHVlO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGdldFJlcGxhY2VyRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24nKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJHN0cmluZ2lmeSA9IGdldEJ1aWx0SW4oJ0pTT04nLCAnc3RyaW5naWZ5Jyk7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKC8uLy5leGVjKTtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbnVtYmVyVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG52YXIgdGVzdGVyID0gL1tcXHVEODAwLVxcdURGRkZdL2c7XG52YXIgbG93ID0gL15bXFx1RDgwMC1cXHVEQkZGXSQvO1xudmFyIGhpID0gL15bXFx1REMwMC1cXHVERkZGXSQvO1xuXG52YXIgV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoJ3N0cmluZ2lmeSBkZXRlY3Rpb24nKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgcmV0dXJuICRzdHJpbmdpZnkoW3N5bWJvbF0pICE9PSAnW251bGxdJ1xuICAgIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAgIHx8ICRzdHJpbmdpZnkoeyBhOiBzeW1ib2wgfSkgIT09ICd7fSdcbiAgICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICAgIHx8ICRzdHJpbmdpZnkoT2JqZWN0KHN5bWJvbCkpICE9PSAne30nO1xufSk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXdlbGwtZm9ybWVkLXN0cmluZ2lmeVxudmFyIElMTF9GT1JNRURfVU5JQ09ERSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRzdHJpbmdpZnkoJ1xcdURGMDZcXHVEODM0JykgIT09ICdcIlxcXFx1ZGYwNlxcXFx1ZDgzNFwiJ1xuICAgIHx8ICRzdHJpbmdpZnkoJ1xcdURFQUQnKSAhPT0gJ1wiXFxcXHVkZWFkXCInO1xufSk7XG5cbnZhciBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA9IGZ1bmN0aW9uIChpdCwgcmVwbGFjZXIpIHtcbiAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gIHZhciAkcmVwbGFjZXIgPSBnZXRSZXBsYWNlckZ1bmN0aW9uKHJlcGxhY2VyKTtcbiAgaWYgKCFpc0NhbGxhYmxlKCRyZXBsYWNlcikgJiYgKGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gIGFyZ3NbMV0gPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIC8vIHNvbWUgb2xkIGltcGxlbWVudGF0aW9ucyAobGlrZSBXZWJLaXQpIGNvdWxkIHBhc3MgbnVtYmVycyBhcyBrZXlzXG4gICAgaWYgKGlzQ2FsbGFibGUoJHJlcGxhY2VyKSkgdmFsdWUgPSBjYWxsKCRyZXBsYWNlciwgdGhpcywgJFN0cmluZyhrZXkpLCB2YWx1ZSk7XG4gICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbiAgcmV0dXJuIGFwcGx5KCRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xufTtcblxudmFyIGZpeElsbEZvcm1lZCA9IGZ1bmN0aW9uIChtYXRjaCwgb2Zmc2V0LCBzdHJpbmcpIHtcbiAgdmFyIHByZXYgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgLSAxKTtcbiAgdmFyIG5leHQgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgKyAxKTtcbiAgaWYgKChleGVjKGxvdywgbWF0Y2gpICYmICFleGVjKGhpLCBuZXh0KSkgfHwgKGV4ZWMoaGksIG1hdGNoKSAmJiAhZXhlYyhsb3csIHByZXYpKSkge1xuICAgIHJldHVybiAnXFxcXHUnICsgbnVtYmVyVG9TdHJpbmcoY2hhckNvZGVBdChtYXRjaCwgMCksIDE2KTtcbiAgfSByZXR1cm4gbWF0Y2g7XG59O1xuXG5pZiAoJHN0cmluZ2lmeSkge1xuICAvLyBgSlNPTi5zdHJpbmdpZnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24uc3RyaW5naWZ5XG4gICQoeyB0YXJnZXQ6ICdKU09OJywgc3RhdDogdHJ1ZSwgYXJpdHk6IDMsIGZvcmNlZDogV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OIHx8IElMTF9GT1JNRURfVU5JQ09ERSB9LCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gICAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgICAgIHZhciByZXN1bHQgPSBhcHBseShXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPyBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA6ICRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xuICAgICAgcmV0dXJuIElMTF9GT1JNRURfVU5JQ09ERSAmJiB0eXBlb2YgcmVzdWx0ID09ICdzdHJpbmcnID8gcmVwbGFjZShyZXN1bHQsIHRlc3RlciwgZml4SWxsRm9ybWVkKSA6IHJlc3VsdDtcbiAgICB9XG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxuLy8gVjggfiBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRk9SQ0VEID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5c3ltYm9sc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgICB2YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gJGdldE93blByb3BlcnR5U3ltYm9scyh0b09iamVjdChpdCkpIDogW107XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNJdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmFzeW5jaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNJdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaGFzSW5zdGFuY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5oYXNpbnN0YW5jZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdoYXNJbnN0YW5jZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXNjb25jYXRzcHJlYWRhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hBbGxgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaGFsbFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaEFsbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucmVwbGFjZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnJlcGxhY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc2VhcmNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc2VhcmNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NlYXJjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BlY2llc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwZWNpZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BsaXRgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGxpdFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGxpdCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC50b1ByaW1pdGl2ZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvcHJpbWl0aXZlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9zdHJpbmd0YWdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2V0QnVpbHRJbignU3ltYm9sJyksICdTeW1ib2wnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnVuc2NvcGFibGVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudW5zY29wYWJsZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIEpTT05bQEB0b1N0cmluZ1RhZ10gcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wucmVwbGFjZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc2VhcmNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGxpdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC51bnNjb3BhYmxlcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QudG8tc3RyaW5nLXRhZycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIE9iamVjdFByb3RvdHlwZSA9ICRPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gJE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBvYmplY3QgPSB0b09iamVjdChPKTtcbiAgaWYgKGhhc093bihvYmplY3QsIElFX1BST1RPKSkgcmV0dXJuIG9iamVjdFtJRV9QUk9UT107XG4gIHZhciBjb25zdHJ1Y3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgaWYgKGlzQ2FsbGFibGUoY29uc3RydWN0b3IpICYmIG9iamVjdCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgJE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1rZXlzIC0tIHNhZmUgKi9cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxudmFyIE5FV19JVEVSQVRPUl9QUk9UT1RZUEUgPSAhaXNPYmplY3QoSXRlcmF0b3JQcm90b3R5cGUpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgLy8gRkY0NC0gbGVnYWN5IGl0ZXJhdG9ycyBjYXNlXG4gIHJldHVybiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0uY2FsbCh0ZXN0KSAhPT0gdGVzdDtcbn0pO1xuXG5pZiAoTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbmVsc2UgaWYgKElTX1BVUkUpIEl0ZXJhdG9yUHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtQEBpdGVyYXRvclxuaWYgKCFpc0NhbGxhYmxlKEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgZGVmaW5lQnVpbHRJbihJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0LCBFTlVNRVJBQkxFX05FWFQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigrIUVOVU1FUkFCTEVfTkVYVCwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmICh0eXBlb2YgYXJndW1lbnQgPT0gJ29iamVjdCcgfHwgaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSXRlcmF0b3JzQ29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpO1xuXG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuUFJPUEVSO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLkNPTkZJR1VSQUJMRTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcblxuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIGlmICghSVNfUFVSRSAmJiBnZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUpICE9PSBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICBzZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNDYWxsYWJsZShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICAgICAgICAgIGRlZmluZUJ1aWx0SW4oQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkucHJvdG90eXBlLnsgdmFsdWVzLCBAQGl0ZXJhdG9yIH0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBERUZBVUxUID09PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgaWYgKCFJU19QVVJFICYmIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsICduYW1lJywgVkFMVUVTKTtcbiAgICB9IGVsc2Uge1xuICAgICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIGNhbGwobmF0aXZlSXRlcmF0b3IsIHRoaXMpOyB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cG9ydCBhZGRpdGlvbmFsIG1ldGhvZHNcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBnZXRJdGVyYXRpb25NZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/IGRlZmF1bHRJdGVyYXRvciA6IGdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKVxuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChLRVkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIHx8ICEoS0VZIGluIEl0ZXJhYmxlUHJvdG90eXBlKSkge1xuICAgICAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IsIHsgbmFtZTogREVGQVVMVCB9KTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodGFyZ2V0W2luZGV4XSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uUHJvdG90eXBlID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUgJiYgY2xhc3NvZihDb2xsZWN0aW9uUHJvdG90eXBlKSAhPT0gVE9fU1RSSU5HX1RBRykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCBDT0xMRUNUSU9OX05BTUUpO1xuICB9XG4gIEl0ZXJhdG9yc1tDT0xMRUNUSU9OX05BTUVdID0gSXRlcmF0b3JzLkFycmF5O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbnZhciBNRVRBREFUQSA9IHdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLy8gRnVuY3Rpb24ucHJvdG90eXBlW0BAbWV0YWRhdGFdXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3ItbWV0YWRhdGFcbmlmIChGdW5jdGlvblByb3RvdHlwZVtNRVRBREFUQV0gPT09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eShGdW5jdGlvblByb3RvdHlwZSwgTUVUQURBVEEsIHtcbiAgICB2YWx1ZTogbnVsbFxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFzeW5jLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNEaXNwb3NlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5kaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZXhwbGljaXQtcmVzb3VyY2UtbWFuYWdlbWVudFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdkaXNwb3NlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvcnNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3N5bWJvbCcpO1xuXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5mdW5jdGlvbi5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciBrZXlGb3IgPSBTeW1ib2wua2V5Rm9yO1xudmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbCB8fCBmdW5jdGlvbiBpc1JlZ2lzdGVyZWRTeW1ib2wodmFsdWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4ga2V5Rm9yKHRoaXNTeW1ib2xWYWx1ZSh2YWx1ZSkpICE9PSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUmVnaXN0ZXJlZFN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZCcpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzUmVnaXN0ZXJlZFN5bWJvbDogaXNSZWdpc3RlcmVkU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciAkaXNXZWxsS25vd25TeW1ib2wgPSBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2w7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldEJ1aWx0SW4oJ09iamVjdCcsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyk7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG5mb3IgKHZhciBpID0gMCwgc3ltYm9sS2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKSwgc3ltYm9sS2V5c0xlbmd0aCA9IHN5bWJvbEtleXMubGVuZ3RoOyBpIDwgc3ltYm9sS2V5c0xlbmd0aDsgaSsrKSB7XG4gIC8vIHNvbWUgb2xkIGVuZ2luZXMgdGhyb3dzIG9uIGFjY2VzcyB0byBzb21lIGtleXMgbGlrZSBgYXJndW1lbnRzYCBvciBgY2FsbGVyYFxuICB0cnkge1xuICAgIHZhciBzeW1ib2xLZXkgPSBzeW1ib2xLZXlzW2ldO1xuICAgIGlmIChpc1N5bWJvbChTeW1ib2xbc3ltYm9sS2V5XSkpIHdlbGxLbm93blN5bWJvbChzeW1ib2xLZXkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNXZWxsS25vd25TeW1ib2wodmFsdWUpIHtcbiAgaWYgKCRpc1dlbGxLbm93blN5bWJvbCAmJiAkaXNXZWxsS25vd25TeW1ib2wodmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICB2YXIgc3ltYm9sID0gdGhpc1N5bWJvbFZhbHVlKHZhbHVlKTtcbiAgICBmb3IgKHZhciBqID0gMCwga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoOyBqIDwga2V5c0xlbmd0aDsgaisrKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxIC0tIHBvbHlmaWxsZWQgc3ltYm9scyBjYXNlXG4gICAgICBpZiAoV2VsbEtub3duU3ltYm9sc1N0b3JlW2tleXNbal1dID09IHN5bWJvbCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duU3ltYm9sOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGVyYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaGVyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5vYnNlcnZhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdvYnNlcnZhYmxlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkYCBtZXRob2Rcbi8vIG9ic29sZXRlIHZlcnNpb24gb2YgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1JlZ2lzdGVyZWRTeW1ib2wnIH0sIHtcbiAgaXNSZWdpc3RlcmVkOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duJyk7XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25gIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1dlbGxLbm93blN5bWJvbCcsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWV0YWRhdGFLZXlgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3ItbWV0YWRhdGFcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGFLZXknKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5wYXR0ZXJuTWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3BhdHRlcm5NYXRjaCcpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2VBbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL3N5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQtc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bi1zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZScpO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLWtleScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogdG9TdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHBvaW50LCBmYWxzZSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZignaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc3ltYm9sL2l0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9zeW1ib2wvaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbC9pdGVyYXRvcicpO1xuIiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX1N5bWJvbCRpdGVyYXRvciBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBfU3ltYm9sJGl0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBfU3ltYm9sICYmIG8gIT09IF9TeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufSIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ3RvUHJpbWl0aXZlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbC90by1wcmltaXRpdmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvdG8tcHJpbWl0aXZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuIiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IF9TeW1ib2wkdG9QcmltaXRpdmUgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbX1N5bWJvbCR0b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufSIsICJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIjtcbmltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodGFyZ2V0LCB0b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsICJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIjtcbmltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEMsIGFyZ3NMZW5ndGgsIGFyZ3MpIHtcbiAgaWYgKCFoYXNPd24oZmFjdG9yaWVzLCBhcmdzTGVuZ3RoKSkge1xuICAgIHZhciBsaXN0ID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSBsaXN0W2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgZmFjdG9yaWVzW2FyZ3NMZW5ndGhdID0gJEZ1bmN0aW9uKCdDLGEnLCAncmV0dXJuIG5ldyBDKCcgKyBqb2luKGxpc3QsICcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbYXJnc0xlbmd0aF0oQywgYXJncyk7XG59O1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/ICRGdW5jdGlvbi5iaW5kIDogZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgRiA9IGFDYWxsYWJsZSh0aGlzKTtcbiAgdmFyIFByb3RvdHlwZSA9IEYucHJvdG90eXBlO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gZnVuY3Rpb24gYm91bmQoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gY29uY2F0KHBhcnRBcmdzLCBhcnJheVNsaWNlKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmRGdW5jdGlvbiA/IGNvbnN0cnVjdChGLCBhcmdzLmxlbmd0aCwgYXJncykgOiBGLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoUHJvdG90eXBlKSkgYm91bmRGdW5jdGlvbi5wcm90b3R5cGUgPSBQcm90b3R5cGU7XG4gIHJldHVybiBib3VuZEZ1bmN0aW9uO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gZGV0ZWN0aW9uXG4kKHsgdGFyZ2V0OiAnRnVuY3Rpb24nLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGdW5jdGlvbi5iaW5kICE9PSBiaW5kIH0sIHtcbiAgYmluZDogYmluZFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1IsIE1FVEhPRCkge1xuICB2YXIgTmFtZXNwYWNlID0gcGF0aFtDT05TVFJVQ1RPUiArICdQcm90b3R5cGUnXTtcbiAgdmFyIHB1cmVNZXRob2QgPSBOYW1lc3BhY2UgJiYgTmFtZXNwYWNlW01FVEhPRF07XG4gIGlmIChwdXJlTWV0aG9kKSByZXR1cm4gcHVyZU1ldGhvZDtcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIE5hdGl2ZVByb3RvdHlwZSAmJiBOYXRpdmVQcm90b3R5cGVbTUVUSE9EXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0Z1bmN0aW9uJywgJ2JpbmQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vZnVuY3Rpb24vdmlydHVhbC9iaW5kJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmJpbmQ7XG4gIHJldHVybiBpdCA9PT0gRnVuY3Rpb25Qcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoRnVuY3Rpb25Qcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmRcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IHJlZHVjZSwgcmVkdWNlUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19SSUdIVCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c0xlbmd0aCwgbWVtbykge1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gSVNfUklHSFQgPyBsZW5ndGggLSAxIDogMDtcbiAgICB2YXIgaSA9IElTX1JJR0hUID8gLTEgOiAxO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPCAyKSB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBpZiAoSVNfUklHSFQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7SVNfUklHSFQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICAgIH1cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuICBsZWZ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbiAgcmlnaHQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3NvZihnbG9iYWwucHJvY2VzcykgPT09ICdwcm9jZXNzJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLmxlZnQ7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgQ0hST01FX1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbi8vIENocm9tZSA4MC04MiBoYXMgYSBjcml0aWNhbCBidWdcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNDk5ODJcbnZhciBDSFJPTUVfQlVHID0gIUlTX05PREUgJiYgQ0hST01FX1ZFUlNJT04gPiA3OSAmJiBDSFJPTUVfVkVSU0lPTiA8IDgzO1xudmFyIEZPUkNFRCA9IENIUk9NRV9CVUcgfHwgIWFycmF5TWV0aG9kSXNTdHJpY3QoJ3JlZHVjZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBsZW5ndGgsIGxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdyZWR1Y2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9yZWR1Y2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmVkdWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5yZWR1Y2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmVkdWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcmVkdWNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZpbHRlcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbHRlcikgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maWx0ZXJcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdtYXAnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5tYXAnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnbWFwJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvbWFwJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0Lm1hcDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUubWFwKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL21hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL21hcFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcblxuLy8gYEZsYXR0ZW5JbnRvQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBiaW5kKG1hcHBlciwgdGhpc0FyZykgOiBmYWxzZTtcbiAgdmFyIGVsZW1lbnQsIGVsZW1lbnRMZW47XG5cbiAgd2hpbGUgKHNvdXJjZUluZGV4IDwgc291cmNlTGVuKSB7XG4gICAgaWYgKHNvdXJjZUluZGV4IGluIHNvdXJjZSkge1xuICAgICAgZWxlbWVudCA9IG1hcEZuID8gbWFwRm4oc291cmNlW3NvdXJjZUluZGV4XSwgc291cmNlSW5kZXgsIG9yaWdpbmFsKSA6IHNvdXJjZVtzb3VyY2VJbmRleF07XG5cbiAgICAgIGlmIChkZXB0aCA+IDAgJiYgaXNBcnJheShlbGVtZW50KSkge1xuICAgICAgICBlbGVtZW50TGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoZWxlbWVudCk7XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBlbGVtZW50LCBlbGVtZW50TGVuLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIodGFyZ2V0SW5kZXggKyAxKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZsYXRNYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmxhdG1hcFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICBmbGF0TWFwOiBmdW5jdGlvbiBmbGF0TWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIEE7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgQS5sZW5ndGggPSBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgMSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnVuc2NvcGFibGVzLmZsYXQtbWFwJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZsYXRNYXAnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mbGF0LW1hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5mbGF0TWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5mbGF0TWFwKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZsYXQtbWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmxhdC1tYXBcIik7IiwgImltcG9ydCB7IERhdGFJbnRlcmZhY2UsIEV2ZW50Q2FsbGJhY2tzLCBQYXJ0SXRlbSB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcblxuLyoqXG4gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVBpcGUge1xuICAvKipcbiAgICogVGFrZSBhbGwgaXRlbXMgZnJvbSB0aGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldywgdHJhbnNmb3JtIHRoZW0gYXNcbiAgICogY29uZmlndXJlZCBhbmQgdXBkYXRlIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBhbGwoKTogdGhpcztcblxuICAvKipcbiAgICogU3RhcnQgb2JzZXJ2aW5nIHRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LCB0cmFuc2Zvcm1pbmcgdGhlIGl0ZW1zXG4gICAqIGFuZCB1cGRhdGluZyB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgY3VycmVudCBjb250ZW50IG9mIHRoZSBzb3VyY2UgZGF0YSBzZXQgd2lsbCBiZSBpZ25vcmVkLiBJZiB5b3UgZm9yXG4gICAqIGV4YW1wbGUgd2FudCB0byBwcm9jZXNzIGFsbCB0aGUgaXRlbXMgdGhhdCBhcmUgYWxyZWFkeSB0aGVyZSB1c2U6XG4gICAqIGBwaXBlLmFsbCgpLnN0YXJ0KClgLlxuICAgKi9cbiAgc3RhcnQoKTogdGhpcztcblxuICAvKipcbiAgICogU3RvcCBvYnNlcnZpbmcgdGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcsIHRyYW5zZm9ybWluZyB0aGUgaXRlbXNcbiAgICogYW5kIHVwZGF0aW5nIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBzdG9wKCk6IHRoaXM7XG59XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFQaXBlRmFjdG9yeSA9IEluc3RhbmNlVHlwZTx0eXBlb2YgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbj47XG5cbi8qKlxuICogQ3JlYXRlIG5ldyBkYXRhIHBpcGUuXG4gKlxuICogQHBhcmFtIGZyb20gLSBUaGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldy5cbiAqIEByZW1hcmtzXG4gKiBFeGFtcGxlIHVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIEFwcEl0ZW0ge1xuICogICB3aG9hbWk6IHN0cmluZztcbiAqICAgYXBwRGF0YTogdW5rbm93bjtcbiAqICAgdmlzRGF0YTogVmlzSXRlbTtcbiAqIH1cbiAqIGludGVyZmFjZSBWaXNJdGVtIHtcbiAqICAgaWQ6IG51bWJlcjtcbiAqICAgbGFiZWw6IHN0cmluZztcbiAqICAgY29sb3I6IHN0cmluZztcbiAqICAgeDogbnVtYmVyO1xuICogICB5OiBudW1iZXI7XG4gKiB9XG4gKlxuICogY29uc3QgZHMxID0gbmV3IERhdGFTZXQ8QXBwSXRlbSwgXCJ3aG9hbWlcIj4oW10sIHsgZmllbGRJZDogXCJ3aG9hbWlcIiB9KTtcbiAqIGNvbnN0IGRzMiA9IG5ldyBEYXRhU2V0PFZpc0l0ZW0sIFwiaWRcIj4oKTtcbiAqXG4gKiBjb25zdCBwaXBlID0gY3JlYXRlTmV3RGF0YVBpcGVGcm9tKGRzMSlcbiAqICAgLmZpbHRlcigoaXRlbSk6IGJvb2xlYW4gPT4gaXRlbS5lbmFibGVkID09PSB0cnVlKVxuICogICAubWFwPFZpc0l0ZW0sIFwiaWRcIj4oKGl0ZW0pOiBWaXNJdGVtID0+IGl0ZW0udmlzRGF0YSlcbiAqICAgLnRvKGRzMik7XG4gKlxuICogcGlwZS5zdGFydCgpO1xuICogYGBgXG4gKiBAcmV0dXJucyBBIGZhY3Rvcnkgd2hvc2UgbWV0aG9kcyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdEYXRhUGlwZUZyb208XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPihmcm9tOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFNJLCBTUD4ge1xuICByZXR1cm4gbmV3IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb24oZnJvbSk7XG59XG5cbnR5cGUgVHJhbnNmb3JtZXI8VD4gPSAoaW5wdXQ6IFRbXSkgPT4gVFtdO1xuXG4vKipcbiAqIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwaXBlLiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlIG9ubHkgdGhyb3VnaFxuICogYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFNJIC0gU291cmNlIGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gU1AgLSBTb3VyY2UgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICogQHR5cGVQYXJhbSBUUCAtIFRhcmdldCBpdGVtIHR5cGUncyBpZCBwcm9wZXJ0eSBuYW1lLlxuICovXG5jbGFzcyBTaW1wbGVEYXRhUGlwZTxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nLFxuICBUSSBleHRlbmRzIFBhcnRJdGVtPFRQPixcbiAgVFAgZXh0ZW5kcyBzdHJpbmdcbj4gaW1wbGVtZW50cyBEYXRhUGlwZVxue1xuICAvKipcbiAgICogQm91bmQgbGlzdGVuZXJzIGZvciB1c2Ugd2l0aCBgRGF0YUludGVyZmFjZVsnb24nIHwgJ29mZiddYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogRXZlbnRDYWxsYmFja3M8U0ksIFNQPiA9IHtcbiAgICBhZGQ6IHRoaXMuX2FkZC5iaW5kKHRoaXMpLFxuICAgIHJlbW92ZTogdGhpcy5fcmVtb3ZlLmJpbmQodGhpcyksXG4gICAgdXBkYXRlOiB0aGlzLl91cGRhdGUuYmluZCh0aGlzKSxcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZS5cbiAgICpcbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IHRoYXQgd2lsbCBiZSBvYnNlcnZlZC5cbiAgICogQHBhcmFtIF90cmFuc2Zvcm1lcnMgLSBBbiBhcnJheSBvZiB0cmFuc2Zvcm1pbmcgZnVuY3Rpb25zIHRvIGJlIHVzZWQgdG9cbiAgICogZmlsdGVyIG9yIHRyYW5zZm9ybSB0aGUgaXRlbXMgaW4gdGhlIHBpcGUuXG4gICAqIEBwYXJhbSBfdGFyZ2V0IC0gVGhlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiByZWFkb25seSBUcmFuc2Zvcm1lcjx1bmtub3duPltdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhcmdldDogRGF0YVNldDxUSSwgVFA+XG4gICkge31cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGFsbCgpOiB0aGlzIHtcbiAgICB0aGlzLl90YXJnZXQudXBkYXRlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQoKSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdGFydCgpOiB0aGlzIHtcbiAgICB0aGlzLl9zb3VyY2Uub24oXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9uKFwicmVtb3ZlXCIsIHRoaXMuX2xpc3RlbmVycy5yZW1vdmUpO1xuICAgIHRoaXMuX3NvdXJjZS5vbihcInVwZGF0ZVwiLCB0aGlzLl9saXN0ZW5lcnMudXBkYXRlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdG9wKCk6IHRoaXMge1xuICAgIHRoaXMuX3NvdXJjZS5vZmYoXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9mZihcInJlbW92ZVwiLCB0aGlzLl9saXN0ZW5lcnMucmVtb3ZlKTtcbiAgICB0aGlzLl9zb3VyY2Uub2ZmKFwidXBkYXRlXCIsIHRoaXMuX2xpc3RlbmVycy51cGRhdGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdGhlIHRyYW5zZm9ybWVycyB0byB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIFRoZSBpdGVtcyB0byBiZSB0cmFuc2Zvcm1lZC5cbiAgICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdHJhbnNmb3JtSXRlbXMoaXRlbXM6IHVua25vd25bXSk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3JtZXJzLnJlZHVjZSgoaXRlbXMsIHRyYW5zZm9ybSk6IHVua25vd25bXSA9PiB7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtKGl0ZW1zKTtcbiAgICB9LCBpdGVtcyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFuIGFkZCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBpZHMgb2YgdGhlIGFkZGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJhZGRcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcImFkZFwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5hZGQodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhbiB1cGRhdGUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgaWRzIG9mIHRoZSB1cGRhdGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJ1cGRhdGVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInVwZGF0ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC51cGRhdGUodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHJlbW92ZSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBkYXRhIG9mIHRoZSByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVtb3ZlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJyZW1vdmVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInJlbW92ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5yZW1vdmUodGhpcy5fdHJhbnNmb3JtSXRlbXMocGF5bG9hZC5vbGREYXRhKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGlwZSBmYWN0b3J5LiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlXG4gKiBvbmx5IHRocm91Z2ggYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqL1xuY2xhc3MgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+IHtcbiAgLyoqXG4gICAqIEFycmF5IHRyYW5zZm9ybWVycyB1c2VkIHRvIHRyYW5zZm9ybSBpdGVtcyB3aXRoaW4gdGhlIHBpcGUuIFRoaXMgaXMgdHlwZWRcbiAgICogYXMgYW55IGZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiBUcmFuc2Zvcm1lcjxhbnk+W10gPSBbXTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZSBmYWN0b3J5LiBUaGlzIGlzIGFuIGludGVybmFsIGNvbnN0cnVjdG9yIHRoYXRcbiAgICogc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhpcyBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gX3NvdXJjZSAtIFRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IGZvciB0aGlzIHBpcGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pIHt9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgZmlsdGVyaW5nIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIGdpdmVuIGl0ZW1cbiAgICogc2hvdWxkIGJlIHBpcGVkIGFuZCBmYWxzZSBpZiBub3QuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZpbHRlcihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBib29sZWFuXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248U0ksIFNQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZpbHRlcihjYWxsYmFjaykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBlYWNoIHNvdXJjZSBpdGVtIHRvIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbS5cbiAgICogQHR5cGVQYXJhbSBUSSAtIFRhcmdldCBpdGVtIHR5cGUuXG4gICAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAgICogQHJldHVybnMgVGhpcyBmYWN0b3J5IGZvciBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgbWFwPFRJIGV4dGVuZHMgUGFydEl0ZW08VFA+LCBUUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIj4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gVElcbiAgKTogRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxUSSwgVFA+IHtcbiAgICB0aGlzLl90cmFuc2Zvcm1lcnMucHVzaCgoaW5wdXQpOiB1bmtub3duW10gPT4gaW5wdXQubWFwKGNhbGxiYWNrKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD47XG4gIH1cblxuICAvKipcbiAgICogTWFwIGVhY2ggc291cmNlIGl0ZW0gdG8gemVybyBvciBtb3JlIGl0ZW1zIG9mIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogYW4gYXJyYXkgb2YgY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbXMuXG4gICAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICAgKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZsYXRNYXA8VEkgZXh0ZW5kcyBQYXJ0SXRlbTxUUD4sIFRQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiPihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBUSVtdXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZsYXRNYXAoY2FsbGJhY2spKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IHRoaXMgcGlwZSB0byBnaXZlbiBkYXRhIHNldC5cbiAgICpcbiAgICogQHBhcmFtIHRhcmdldCAtIFRoZSBkYXRhIHNldCB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMgZnJvbSB0aGlzIHBpcGUuXG4gICAqIEByZXR1cm5zIFRoZSBwaXBlIGNvbm5lY3RlZCBiZXR3ZWVuIGdpdmVuIGRhdGEgc2V0cyBhbmQgcGVyZm9ybWluZ1xuICAgKiBjb25maWd1cmVkIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBwcm9jZXNzZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgdG8odGFyZ2V0OiBEYXRhU2V0PFNJLCBTUD4pOiBEYXRhUGlwZSB7XG4gICAgcmV0dXJuIG5ldyBTaW1wbGVEYXRhUGlwZSh0aGlzLl9zb3VyY2UsIHRoaXMuX3RyYW5zZm9ybWVycywgdGFyZ2V0KTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZyb20nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkFycmF5LmZyb207XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvck1ldGhvZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi9zdGFibGUvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vYWN0dWFsL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9mdWxsL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG4vLyBgQXJyYXkuaXNBcnJheWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmlzYXJyYXlcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUgfSwge1xuICBpc0FycmF5OiBpc0FycmF5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5pc0FycmF5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvYXJyYXkvaXMtYXJyYXknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2FycmF5L2lzLWFycmF5Jyk7XG4iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggYW5kIFNhZmFyaSA8PSAxNS40LCBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5wdXNoJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3B1c2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9wdXNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnB1c2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnB1c2gpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcHVzaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3B1c2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9pbnN0YW5jZS9wdXNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9wdXNoJyk7XG4iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfZ2V0SXRlcmF0b3JNZXRob2QgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXCI7XG5pbXBvcnQgX3B1c2hJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcHVzaC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgX1N5bWJvbCAmJiBfZ2V0SXRlcmF0b3JNZXRob2QocikgfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChfcHVzaEluc3RhbmNlUHJvcGVydHkoYSkuY2FsbChhLCBlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufSIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIG5hdGl2ZVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKGlzQ29uc3RydWN0b3IoQ29uc3RydWN0b3IpICYmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQ29uc3RydWN0b3IucHJvdG90eXBlKSkpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KENvbnN0cnVjdG9yKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yW1NQRUNJRVNdO1xuICAgICAgICBpZiAoQ29uc3RydWN0b3IgPT09IG51bGwpIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU2xpY2UoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQ29uc3RydWN0b3IpKG1heChmaW4gLSBrLCAwKSk7XG4gICAgZm9yIChuID0gMDsgayA8IGZpbjsgaysrLCBuKyspIGlmIChrIGluIE8pIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zbGljZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdzbGljZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNsaWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3NsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL3NsaWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9hcnJheS9mcm9tJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvYXJyYXkvZnJvbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvYXJyYXkvZnJvbScpO1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufSIsICJpbXBvcnQgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzXCI7XG5pbXBvcnQgX0FycmF5JGZyb20gZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzXCI7XG5pbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIHZhciBfY29udGV4dDtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBfc2xpY2VJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pKS5jYWxsKF9jb250ZXh0LCA4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBfQXJyYXkkZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsICJpbXBvcnQgX0FycmF5JGlzQXJyYXkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9pcy1hcnJheS5qc1wiO1xuaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoX0FycmF5JGlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn0iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfZ2V0SXRlcmF0b3JNZXRob2QgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXCI7XG5pbXBvcnQgX0FycmF5JGZyb20gZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBfU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIF9nZXRJdGVyYXRvck1ldGhvZChpdGVyKSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBfQXJyYXkkZnJvbShpdGVyKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCAiaW1wb3J0IGFycmF5V2l0aG91dEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVTcHJlYWQgZnJvbSBcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufSIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnY29uY2F0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvY29uY2F0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmNvbmNhdDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuY29uY2F0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2NvbmNhdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2NvbmNhdFwiKTsiLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zbGljZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xuXG4vLyBgUmVmbGVjdC5vd25LZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5vd25rZXlzXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBvd25LZXlzOiBvd25LZXlzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3Qub3duLWtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlJlZmxlY3Qub3duS2V5cztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcmVmbGVjdC9vd24ta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3JlZmxlY3Qvb3duLWtleXNcIik7IiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvaXMtYXJyYXlcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5rZXlzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3Qva2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9rZXlzXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICFTVFJJQ1RfTUVUSE9EID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbn0gOiBbXS5mb3JFYWNoO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9PSBmb3JFYWNoIH0sIHtcbiAgZm9yRWFjaDogZm9yRWFjaFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmb3JFYWNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZvckVhY2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZvckVhY2gpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciBuYXRpdmVSZXZlcnNlID0gdW5jdXJyeVRoaXMoW10ucmV2ZXJzZSk7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJldmVyc2Vcbi8vIGZpeCBmb3IgU2FmYXJpIDEyLjAgYnVnXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4Nzk0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTdHJpbmcodGVzdCkgPT09IFN0cmluZyh0ZXN0LnJldmVyc2UoKSkgfSwge1xuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnbiAtLSBkaXJ0eSBoYWNrXG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgcmV0dXJuIG5hdGl2ZVJldmVyc2UodGhpcyk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdyZXZlcnNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZXZlcnNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5yZXZlcnNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JldmVyc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgUCkge1xuICBpZiAoIWRlbGV0ZSBPW1BdKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAnICsgdHJ5VG9TdHJpbmcoUCkgKyAnIG9mICcgKyB0cnlUb1N0cmluZyhPKSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzcGxpY2UnKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNwbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zcGxpY2Vcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNwbGljZTogZnVuY3Rpb24gc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCAvKiAsIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFjdHVhbFN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpbnNlcnRDb3VudCwgYWN0dWFsRGVsZXRlQ291bnQsIEEsIGssIGZyb20sIHRvO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDApIHtcbiAgICAgIGluc2VydENvdW50ID0gYWN0dWFsRGVsZXRlQ291bnQgPSAwO1xuICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgICBpbnNlcnRDb3VudCA9IDA7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IGxlbiAtIGFjdHVhbFN0YXJ0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnNlcnRDb3VudCA9IGFyZ3VtZW50c0xlbmd0aCAtIDI7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IG1pbihtYXgodG9JbnRlZ2VyT3JJbmZpbml0eShkZWxldGVDb3VudCksIDApLCBsZW4gLSBhY3R1YWxTdGFydCk7XG4gICAgfVxuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBpbnNlcnRDb3VudCAtIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBmb3IgKGsgPSAwOyBrIDwgYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgZnJvbSA9IGFjdHVhbFN0YXJ0ICsgaztcbiAgICAgIGlmIChmcm9tIGluIE8pIGNyZWF0ZVByb3BlcnR5KEEsIGssIE9bZnJvbV0pO1xuICAgIH1cbiAgICBBLmxlbmd0aCA9IGFjdHVhbERlbGV0ZUNvdW50O1xuICAgIGlmIChpbnNlcnRDb3VudCA8IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBhY3R1YWxTdGFydDsgayA8IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50OyBrKyspIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudDtcbiAgICAgICAgdG8gPSBrICsgaW5zZXJ0Q291bnQ7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgICAgZm9yIChrID0gbGVuOyBrID4gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudDsgay0tKSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgayAtIDEpO1xuICAgIH0gZWxzZSBpZiAoaW5zZXJ0Q291bnQgPiBhY3R1YWxEZWxldGVDb3VudCkge1xuICAgICAgZm9yIChrID0gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsgPiBhY3R1YWxTdGFydDsgay0tKSB7XG4gICAgICAgIGZyb20gPSBrICsgYWN0dWFsRGVsZXRlQ291bnQgLSAxO1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudCAtIDE7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGsgPSAwOyBrIDwgaW5zZXJ0Q291bnQ7IGsrKykge1xuICAgICAgT1trICsgYWN0dWFsU3RhcnRdID0gYXJndW1lbnRzW2sgKyAyXTtcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudCk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NwbGljZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NwbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zcGxpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNwbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zcGxpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zcGxpY2VcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBzaG91bGQgaGF2ZSBjb3JyZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgKEVkZ2UgYnVnKVxuICBpZiAoREVTQ1JJUFRPUlMgJiYgJGFzc2lnbih7IGI6IDEgfSwgJGFzc2lnbihkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsICdiJywge1xuICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfSksIHsgYjogMiB9KSkuYiAhPT0gMSkgcmV0dXJuIHRydWU7XG4gIC8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3ltYm9sIC0tIHNhZmVcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnYXNzaWduIGRldGVjdGlvbicpO1xuICB2YXIgYWxwaGFiZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW3N5bWJvbF0gPSA3O1xuICBhbHBoYWJldC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoY2hyKSB7IEJbY2hyXSA9IGNocjsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtzeW1ib2xdICE9PSA3IHx8IG9iamVjdEtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9PSBhbHBoYWJldDtcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG4gIHdoaWxlIChhcmd1bWVudHNMZW5ndGggPiBpbmRleCkge1xuICAgIHZhciBTID0gSW5kZXhlZE9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KG9iamVjdEtleXMoUyksIGdldE93blByb3BlcnR5U3ltYm9scyhTKSkgOiBvYmplY3RLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlLCBTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24nKTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGFyaXR5OiAyLCBmb3JjZWQ6IE9iamVjdC5hc3NpZ24gIT09IGFzc2lnbiB9LCB7XG4gIGFzc2lnbjogYXNzaWduXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5hc3NpZ247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9hc3NpZ24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvYXNzaWduXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0UHJvdG90eXBlT2YoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIH0sIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBjcmVhdGU6IGNyZWF0ZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuY3JlYXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShQLCBEKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWpzb24gLS0gc2FmZVxuaWYgKCFwYXRoLkpTT04pIHBhdGguSlNPTiA9IHsgc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeSB9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICByZXR1cm4gYXBwbHkocGF0aC5KU09OLnN0cmluZ2lmeSwgbnVsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2pzb24vc3RyaW5naWZ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvanNvbi9zdHJpbmdpZnlcIik7IiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBCdW4gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBCdW4gPT0gJ2Z1bmN0aW9uJyAmJiBCdW4gJiYgdHlwZW9mIEJ1bi52ZXJzaW9uID09ICdzdHJpbmcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG4gIHJldHVybiBwYXNzZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgRU5HSU5FX0lTX0JVTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnVuJyk7XG52YXIgVVNFUl9BR0VOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG5cbnZhciBGdW5jdGlvbiA9IGdsb2JhbC5GdW5jdGlvbjtcbi8vIGRpcnR5IElFOS0gYW5kIEJ1biAwLjMuMC0gY2hlY2tzXG52YXIgV1JBUCA9IC9NU0lFIC5cXC4vLnRlc3QoVVNFUl9BR0VOVCkgfHwgRU5HSU5FX0lTX0JVTiAmJiAoZnVuY3Rpb24gKCkge1xuICB2YXIgdmVyc2lvbiA9IGdsb2JhbC5CdW4udmVyc2lvbi5zcGxpdCgnLicpO1xuICByZXR1cm4gdmVyc2lvbi5sZW5ndGggPCAzIHx8IHZlcnNpb25bMF0gPT09ICcwJyAmJiAodmVyc2lvblsxXSA8IDMgfHwgdmVyc2lvblsxXSA9PT0gJzMnICYmIHZlcnNpb25bMl0gPT09ICcwJyk7XG59KSgpO1xuXG4vLyBJRTktIC8gQnVuIDAuMy4wLSBzZXRUaW1lb3V0IC8gc2V0SW50ZXJ2YWwgLyBzZXRJbW1lZGlhdGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCN0aW1lcnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9pc3N1ZXMvMTYzM1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBoYXNUaW1lQXJnKSB7XG4gIHZhciBmaXJzdFBhcmFtSW5kZXggPSBoYXNUaW1lQXJnID8gMiA6IDE7XG4gIHJldHVybiBXUkFQID8gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSkgPiBmaXJzdFBhcmFtSW5kZXg7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgcGFyYW1zID0gYm91bmRBcmdzID8gYXJyYXlTbGljZShhcmd1bWVudHMsIGZpcnN0UGFyYW1JbmRleCkgOiBbXTtcbiAgICB2YXIgY2FsbGJhY2sgPSBib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdGhpcywgcGFyYW1zKTtcbiAgICB9IDogZm47XG4gICAgcmV0dXJuIGhhc1RpbWVBcmcgPyBzY2hlZHVsZXIoY2FsbGJhY2ssIHRpbWVvdXQpIDogc2NoZWR1bGVyKGNhbGxiYWNrKTtcbiAgfSA6IHNjaGVkdWxlcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNjaGVkdWxlcnNGaXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXgnKTtcblxudmFyIHNldEludGVydmFsID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0SW50ZXJ2YWwsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldGludGVydmFsXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRJbnRlcnZhbCAhPT0gc2V0SW50ZXJ2YWwgfSwge1xuICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWxcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRUaW1lb3V0ID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0VGltZW91dCwgdHJ1ZSk7XG5cbi8vIEJ1biAvIElFOS0gc2V0VGltZW91dCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRUaW1lb3V0ICE9PSBzZXRUaW1lb3V0IH0sIHtcbiAgc2V0VGltZW91dDogc2V0VGltZW91dFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRUaW1lb3V0O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXRcIik7IiwgImZ1bmN0aW9uIEVtaXR0ZXIob2JqZWN0KSB7XG5cdGlmIChvYmplY3QpIHtcblx0XHRyZXR1cm4gbWl4aW4ob2JqZWN0KTtcblx0fVxuXG5cdHRoaXMuX2NhbGxiYWNrcyA9IG5ldyBNYXAoKTtcbn1cblxuZnVuY3Rpb24gbWl4aW4ob2JqZWN0KSB7XG5cdE9iamVjdC5hc3NpZ24ob2JqZWN0LCBFbWl0dGVyLnByb3RvdHlwZSk7XG5cdG9iamVjdC5fY2FsbGJhY2tzID0gbmV3IE1hcCgpO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5FbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCkgPz8gW107XG5cdGNhbGxiYWNrcy5wdXNoKGxpc3RlbmVyKTtcblx0dGhpcy5fY2FsbGJhY2tzLnNldChldmVudCwgY2FsbGJhY2tzKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRjb25zdCBvbiA9ICguLi5hcmd1bWVudHNfKSA9PiB7XG5cdFx0dGhpcy5vZmYoZXZlbnQsIG9uKTtcblx0XHRsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHNfKTtcblx0fTtcblxuXHRvbi5mbiA9IGxpc3RlbmVyO1xuXHR0aGlzLm9uKGV2ZW50LCBvbik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRpZiAoZXZlbnQgPT09IHVuZGVmaW5lZCAmJiBsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5fY2FsbGJhY2tzLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpZiAobGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX2NhbGxiYWNrcy5kZWxldGUoZXZlbnQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCk7XG5cdGlmIChjYWxsYmFja3MpIHtcblx0XHRmb3IgKGNvbnN0IFtpbmRleCwgY2FsbGJhY2tdIG9mIGNhbGxiYWNrcy5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChjYWxsYmFjayA9PT0gbGlzdGVuZXIgfHwgY2FsbGJhY2suZm4gPT09IGxpc3RlbmVyKSB7XG5cdFx0XHRcdGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoY2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5fY2FsbGJhY2tzLmRlbGV0ZShldmVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2NhbGxiYWNrcy5zZXQoZXZlbnQsIGNhbGxiYWNrcyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50LCAuLi5hcmd1bWVudHNfKSB7XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpO1xuXHRpZiAoY2FsbGJhY2tzKSB7XG5cdFx0Ly8gQ3JlYXRlIGEgY29weSBvZiB0aGUgY2FsbGJhY2tzIGFycmF5IHRvIGF2b2lkIGlzc3VlcyBpZiBpdCdzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb25cblx0XHRjb25zdCBjYWxsYmFja3NDb3B5ID0gWy4uLmNhbGxiYWNrc107XG5cblx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrc0NvcHkpIHtcblx0XHRcdGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50c18pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLl9jYWxsYmFja3MuZ2V0KGV2ZW50KSA/PyBbXTtcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0aWYgKGV2ZW50KSB7XG5cdFx0cmV0dXJuIHRoaXMubGlzdGVuZXJzKGV2ZW50KS5sZW5ndGg7XG5cdH1cblxuXHRsZXQgdG90YWxDb3VudCA9IDA7XG5cdGZvciAoY29uc3QgY2FsbGJhY2tzIG9mIHRoaXMuX2NhbGxiYWNrcy52YWx1ZXMoKSkge1xuXHRcdHRvdGFsQ291bnQgKz0gY2FsbGJhY2tzLmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiB0b3RhbENvdW50O1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUuaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLmxpc3RlbmVyQ291bnQoZXZlbnQpID4gMDtcbn07XG5cbi8vIEFsaWFzZXNcbkVtaXR0ZXIucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5vbjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub2ZmO1xuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gRW1pdHRlcjtcbn1cbiIsICIvKiEgSGFtbWVyLkpTIC0gdjIuMC4xNy1yYyAtIDIwMTktMTItMTZcbiAqIGh0dHA6Ly9uYXZlci5naXRodWIuaW8vZWdqc1xuICpcbiAqIEZvcmtlZCBCeSBOYXZlciBlZ2pzXG4gKiBDb3B5cmlnaHQgKGMpIGhhbW1lcmpzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKi9cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHsuLi5PYmplY3R9IG9iamVjdHNfdG9fYXNzaWduXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB0YXJnZXRcbiAqL1xudmFyIGFzc2lnbjtcblxuaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQpIHtcbiAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gT2JqZWN0KHRhcmdldCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF07XG5cbiAgICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgbmV4dEtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSB7XG4gICAgICAgICAgICBvdXRwdXRbbmV4dEtleV0gPSBzb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcbn0gZWxzZSB7XG4gIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG59XG5cbnZhciBhc3NpZ24kMSA9IGFzc2lnbjtcblxudmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xudmFyIFRFU1RfRUxFTUVOVCA9IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IHtcbiAgc3R5bGU6IHt9XG59IDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgVFlQRV9GVU5DVElPTiA9ICdmdW5jdGlvbic7XG52YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgIGFicyA9IE1hdGguYWJzO1xudmFyIG5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIHByZWZpeGVkIHByb3BlcnR5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAqIEByZXR1cm5zIHtTdHJpbmd8VW5kZWZpbmVkfSBwcmVmaXhlZFxuICovXG5cbmZ1bmN0aW9uIHByZWZpeGVkKG9iaiwgcHJvcGVydHkpIHtcbiAgdmFyIHByZWZpeDtcbiAgdmFyIHByb3A7XG4gIHZhciBjYW1lbFByb3AgPSBwcm9wZXJ0eVswXS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICBwcmVmaXggPSBWRU5ET1JfUFJFRklYRVNbaV07XG4gICAgcHJvcCA9IHByZWZpeCA/IHByZWZpeCArIGNhbWVsUHJvcCA6IHByb3BlcnR5O1xuXG4gICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICByZXR1cm4gcHJvcDtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXctZnVuYywgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbnZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gIC8vIHdpbmRvdyBpcyB1bmRlZmluZWQgaW4gbm9kZS5qc1xuICB3aW4gPSB7fTtcbn0gZWxzZSB7XG4gIHdpbiA9IHdpbmRvdztcbn1cblxudmFyIFBSRUZJWEVEX1RPVUNIX0FDVElPTiA9IHByZWZpeGVkKFRFU1RfRUxFTUVOVC5zdHlsZSwgJ3RvdWNoQWN0aW9uJyk7XG52YXIgTkFUSVZFX1RPVUNIX0FDVElPTiA9IFBSRUZJWEVEX1RPVUNIX0FDVElPTiAhPT0gdW5kZWZpbmVkO1xuZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb25Qcm9wcygpIHtcbiAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRvdWNoTWFwID0ge307XG4gIHZhciBjc3NTdXBwb3J0cyA9IHdpbi5DU1MgJiYgd2luLkNTUy5zdXBwb3J0cztcbiAgWydhdXRvJywgJ21hbmlwdWxhdGlvbicsICdwYW4teScsICdwYW4teCcsICdwYW4teCBwYW4teScsICdub25lJ10uZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7XG4gICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgLy8gYWxsIHZhbHVlcy4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgSUUgMTAgYW5kIDExLlxuICAgIHJldHVybiB0b3VjaE1hcFt2YWxdID0gY3NzU3VwcG9ydHMgPyB3aW4uQ1NTLnN1cHBvcnRzKCd0b3VjaC1hY3Rpb24nLCB2YWwpIDogdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiB0b3VjaE1hcDtcbn1cblxudmFyIFRPVUNIX0FDVElPTl9DT01QVVRFID0gJ2NvbXB1dGUnO1xudmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xudmFyIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04gPSAnbWFuaXB1bGF0aW9uJzsgLy8gbm90IGltcGxlbWVudGVkXG5cbnZhciBUT1VDSF9BQ1RJT05fTk9ORSA9ICdub25lJztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1ggPSAncGFuLXgnO1xudmFyIFRPVUNIX0FDVElPTl9QQU5fWSA9ICdwYW4teSc7XG52YXIgVE9VQ0hfQUNUSU9OX01BUCA9IGdldFRvdWNoQWN0aW9uUHJvcHMoKTtcblxudmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcbnZhciBTVVBQT1JUX1RPVUNIID0gJ29udG91Y2hzdGFydCcgaW4gd2luO1xudmFyIFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMgPSBwcmVmaXhlZCh3aW4sICdQb2ludGVyRXZlbnQnKSAhPT0gdW5kZWZpbmVkO1xudmFyIFNVUFBPUlRfT05MWV9UT1VDSCA9IFNVUFBPUlRfVE9VQ0ggJiYgTU9CSUxFX1JFR0VYLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSU5QVVRfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG52YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbnZhciBJTlBVVF9UWVBFX01PVVNFID0gJ21vdXNlJztcbnZhciBJTlBVVF9UWVBFX0tJTkVDVCA9ICdraW5lY3QnO1xudmFyIENPTVBVVEVfSU5URVJWQUwgPSAyNTtcbnZhciBJTlBVVF9TVEFSVCA9IDE7XG52YXIgSU5QVVRfTU9WRSA9IDI7XG52YXIgSU5QVVRfRU5EID0gNDtcbnZhciBJTlBVVF9DQU5DRUwgPSA4O1xudmFyIERJUkVDVElPTl9OT05FID0gMTtcbnZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG52YXIgRElSRUNUSU9OX1JJR0hUID0gNDtcbnZhciBESVJFQ1RJT05fVVAgPSA4O1xudmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG52YXIgRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fTEVGVCB8IERJUkVDVElPTl9SSUdIVDtcbnZhciBESVJFQ1RJT05fVkVSVElDQUwgPSBESVJFQ1RJT05fVVAgfCBESVJFQ1RJT05fRE9XTjtcbnZhciBESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUw7XG52YXIgUFJPUFNfWFkgPSBbJ3gnLCAneSddO1xudmFyIFBST1BTX0NMSUVOVF9YWSA9IFsnY2xpZW50WCcsICdjbGllbnRZJ107XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdhbGsgb2JqZWN0cyBhbmQgYXJyYXlzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvclxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gIHZhciBpO1xuXG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9iai5mb3JFYWNoKSB7XG4gICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICB9IGVsc2UgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBvYmoubGVuZ3RoKSB7XG4gICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpIGluIG9iaikge1xuICAgICAgb2JqLmhhc093blByb3BlcnR5KGkpICYmIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBsZXQgYSBib29sZWFuIHZhbHVlIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IG11c3QgcmV0dXJuIGEgYm9vbGVhblxuICogdGhpcyBmaXJzdCBpdGVtIGluIGFyZ3Mgd2lsbCBiZSB1c2VkIGFzIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IHZhbFxuICogQHBhcmFtIHtBcnJheX0gW2FyZ3NdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBib29sT3JGbih2YWwsIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFRZUEVfRlVOQ1RJT04pIHtcbiAgICByZXR1cm4gdmFsLmFwcGx5KGFyZ3MgPyBhcmdzWzBdIHx8IHVuZGVmaW5lZCA6IHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzbWFsbCBpbmRleE9mIHdyYXBwZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gZm91bmRcbiAqL1xuZnVuY3Rpb24gaW5TdHIoc3RyLCBmaW5kKSB7XG4gIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3aGVuIHRoZSB0b3VjaEFjdGlvbnMgYXJlIGNvbGxlY3RlZCB0aGV5IGFyZSBub3QgYSB2YWxpZCB2YWx1ZSwgc28gd2UgbmVlZCB0byBjbGVhbiB0aGluZ3MgdXAuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuXG5mdW5jdGlvbiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zKSB7XG4gIC8vIG5vbmVcbiAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTk9ORTtcbiAgfVxuXG4gIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpOyAvLyBpZiBib3RoIHBhbi14IGFuZCBwYW4teSBhcmUgc2V0IChkaWZmZXJlbnQgcmVjb2duaXplcnNcbiAgLy8gZm9yIGRpZmZlcmVudCBkaXJlY3Rpb25zLCBlLmcuIGhvcml6b250YWwgcGFuIGJ1dCB2ZXJ0aWNhbCBzd2lwZT8pXG4gIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAvLyByZWNvZ25pemVycyB3aWxsIHdvcmssIHNpbmNlIHRoZSBicm93c2VyIHdvdWxkIGhhbmRsZSBhbGwgcGFubmluZ1xuXG4gIGlmIChoYXNQYW5YICYmIGhhc1BhblkpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gIH0gLy8gcGFuLXggT1IgcGFuLXlcblxuXG4gIGlmIChoYXNQYW5YIHx8IGhhc1BhblkpIHtcbiAgICByZXR1cm4gaGFzUGFuWCA/IFRPVUNIX0FDVElPTl9QQU5fWCA6IFRPVUNIX0FDVElPTl9QQU5fWTtcbiAgfSAvLyBtYW5pcHVsYXRpb25cblxuXG4gIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OO1xuICB9XG5cbiAgcmV0dXJuIFRPVUNIX0FDVElPTl9BVVRPO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUb3VjaCBBY3Rpb25cbiAqIHNldHMgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IG9yIHVzZXMgdGhlIGpzIGFsdGVybmF0aXZlXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIFRvdWNoQWN0aW9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG91Y2hBY3Rpb24obWFuYWdlciwgdmFsdWUpIHtcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuc2V0KHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZSBvbiB0aGUgZWxlbWVudCBvciBlbmFibGUgdGhlIHBvbHlmaWxsXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBUb3VjaEFjdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIGZpbmQgb3V0IHRoZSB0b3VjaC1hY3Rpb24gYnkgdGhlIGV2ZW50IGhhbmRsZXJzXG4gICAgaWYgKHZhbHVlID09PSBUT1VDSF9BQ1RJT05fQ09NUFVURSkge1xuICAgICAgdmFsdWUgPSB0aGlzLmNvbXB1dGUoKTtcbiAgICB9XG5cbiAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGVbUFJFRklYRURfVE9VQ0hfQUNUSU9OXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICoganVzdCByZS1zZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlXG4gICAqL1xuXG5cbiAgX3Byb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB0aGlzLnNldCh0aGlzLm1hbmFnZXIub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjb21wdXRlIHRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IGJhc2VkIG9uIHRoZSByZWNvZ25pemVyJ3Mgc2V0dGluZ3NcbiAgICogQHJldHVybnMge1N0cmluZ30gdmFsdWVcbiAgICovXG5cblxuICBfcHJvdG8uY29tcHV0ZSA9IGZ1bmN0aW9uIGNvbXB1dGUoKSB7XG4gICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICBlYWNoKHRoaXMubWFuYWdlci5yZWNvZ25pemVycywgZnVuY3Rpb24gKHJlY29nbml6ZXIpIHtcbiAgICAgIGlmIChib29sT3JGbihyZWNvZ25pemVyLm9wdGlvbnMuZW5hYmxlLCBbcmVjb2duaXplcl0pKSB7XG4gICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zLmpvaW4oJyAnKSk7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gZWFjaCBpbnB1dCBjeWNsZSBhbmQgcHJvdmlkZXMgdGhlIHByZXZlbnRpbmcgb2YgdGhlIGJyb3dzZXIgYmVoYXZpb3JcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLnByZXZlbnREZWZhdWx0cyA9IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0cyhpbnB1dCkge1xuICAgIHZhciBzcmNFdmVudCA9IGlucHV0LnNyY0V2ZW50O1xuICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5vZmZzZXREaXJlY3Rpb247IC8vIGlmIHRoZSB0b3VjaCBhY3Rpb24gZGlkIHByZXZlbnRlZCBvbmNlIHRoaXMgc2Vzc2lvblxuXG4gICAgaWYgKHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCkge1xuICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWV07XG4gICAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWF07XG5cbiAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgLy8gZG8gbm90IHByZXZlbnQgZGVmYXVsdHMgaWYgdGhpcyBpcyBhIHRhcCBnZXN0dXJlXG4gICAgICB2YXIgaXNUYXBQb2ludGVyID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSAxO1xuICAgICAgdmFyIGlzVGFwTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IDI7XG4gICAgICB2YXIgaXNUYXBUb3VjaFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPCAyNTA7XG5cbiAgICAgIGlmIChpc1RhcFBvaW50ZXIgJiYgaXNUYXBNb3ZlbWVudCAmJiBpc1RhcFRvdWNoVGltZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgICAgLy8gYHBhbi14IHBhbi15YCBtZWFucyBicm93c2VyIGhhbmRsZXMgYWxsIHNjcm9sbGluZy9wYW5uaW5nLCBkbyBub3QgcHJldmVudFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChoYXNOb25lIHx8IGhhc1BhblkgJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwgfHwgaGFzUGFuWCAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZlbnRTcmMoc3JjRXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbGwgcHJldmVudERlZmF1bHQgdG8gcHJldmVudCB0aGUgYnJvd3NlcidzIGRlZmF1bHQgYmVoYXZpb3IgKHNjcm9sbGluZyBpbiBtb3N0IGNhc2VzKVxuICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICovXG5cblxuICBfcHJvdG8ucHJldmVudFNyYyA9IGZ1bmN0aW9uIHByZXZlbnRTcmMoc3JjRXZlbnQpIHtcbiAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoQWN0aW9uO1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBmaW5kIGlmIGEgbm9kZSBpcyBpbiB0aGUgZ2l2ZW4gcGFyZW50XG4gKiBAbWV0aG9kIGhhc1BhcmVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBjZW50ZXIgb2YgYWxsIHRoZSBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gcG9pbnRlcnNcbiAqIEByZXR1cm4ge09iamVjdH0gY2VudGVyIGNvbnRhaW5zIGB4YCBhbmQgYHlgIHByb3BlcnRpZXNcbiAqL1xuXG5mdW5jdGlvbiBnZXRDZW50ZXIocG9pbnRlcnMpIHtcbiAgdmFyIHBvaW50ZXJzTGVuZ3RoID0gcG9pbnRlcnMubGVuZ3RoOyAvLyBubyBuZWVkIHRvIGxvb3Agd2hlbiBvbmx5IG9uZSB0b3VjaFxuXG4gIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRYKSxcbiAgICAgIHk6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFkpXG4gICAgfTtcbiAgfVxuXG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBwb2ludGVyc0xlbmd0aCkge1xuICAgIHggKz0gcG9pbnRlcnNbaV0uY2xpZW50WDtcbiAgICB5ICs9IHBvaW50ZXJzW2ldLmNsaWVudFk7XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4IC8gcG9pbnRlcnNMZW5ndGgpLFxuICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIGEgc2ltcGxlIGNsb25lIGZyb20gdGhlIGlucHV0IHVzZWQgZm9yIHN0b3JhZ2Ugb2YgZmlyc3RJbnB1dCBhbmQgZmlyc3RNdWx0aXBsZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBjbG9uZWRJbnB1dERhdGFcbiAqL1xuXG5mdW5jdGlvbiBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCkge1xuICAvLyBtYWtlIGEgc2ltcGxlIGNvcHkgb2YgdGhlIHBvaW50ZXJzIGJlY2F1c2Ugd2Ugd2lsbCBnZXQgYSByZWZlcmVuY2UgaWYgd2UgZG9uJ3RcbiAgLy8gd2Ugb25seSBuZWVkIGNsaWVudFhZIGZvciB0aGUgY2FsY3VsYXRpb25zXG4gIHZhciBwb2ludGVycyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBpbnB1dC5wb2ludGVycy5sZW5ndGgpIHtcbiAgICBwb2ludGVyc1tpXSA9IHtcbiAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgY2xpZW50WTogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WSlcbiAgICB9O1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGltZVN0YW1wOiBub3coKSxcbiAgICBwb2ludGVyczogcG9pbnRlcnMsXG4gICAgY2VudGVyOiBnZXRDZW50ZXIocG9pbnRlcnMpLFxuICAgIGRlbHRhWDogaW5wdXQuZGVsdGFYLFxuICAgIGRlbHRhWTogaW5wdXQuZGVsdGFZXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gcDEge3gsIHl9XG4gKiBAcGFyYW0ge09iamVjdH0gcDIge3gsIHl9XG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gKi9cblxuZnVuY3Rpb24gZ2V0RGlzdGFuY2UocDEsIHAyLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcHJvcHMgPSBQUk9QU19YWTtcbiAgfVxuXG4gIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dO1xuICB2YXIgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBhbmdsZSBiZXR3ZWVuIHR3byBjb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IHAxXG4gKiBAcGFyYW0ge09iamVjdH0gcDJcbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAqIEByZXR1cm4ge051bWJlcn0gYW5nbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRBbmdsZShwMSwgcDIsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICBwcm9wcyA9IFBST1BTX1hZO1xuICB9XG5cbiAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV07XG4gIHZhciB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KSAqIDE4MCAvIE1hdGguUEk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgZGlyZWN0aW9uIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpcmVjdGlvblxuICovXG5cbmZ1bmN0aW9uIGdldERpcmVjdGlvbih4LCB5KSB7XG4gIGlmICh4ID09PSB5KSB7XG4gICAgcmV0dXJuIERJUkVDVElPTl9OT05FO1xuICB9XG5cbiAgaWYgKGFicyh4KSA+PSBhYnMoeSkpIHtcbiAgICByZXR1cm4geCA8IDAgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgfVxuXG4gIHJldHVybiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyOyAvLyBsZXQgeyBvZmZzZXREZWx0YTpvZmZzZXQgPSB7fSwgcHJldkRlbHRhID0ge30sIHByZXZJbnB1dCA9IHt9IH0gPSBzZXNzaW9uO1xuICAvLyBqc2NzIHRocm93aW5nIGVycm9yIG9uIGRlZmFsdXQgZGVzdHJ1Y3R1cmVkIHZhbHVlcyBhbmQgd2l0aG91dCBkZWZhdWx0cyB0ZXN0cyBmYWlsXG5cbiAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gIHZhciBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSB8fCB7fTtcbiAgdmFyIHByZXZJbnB1dCA9IHNlc3Npb24ucHJldklucHV0IHx8IHt9O1xuXG4gIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhID0ge1xuICAgICAgeDogcHJldklucHV0LmRlbHRhWCB8fCAwLFxuICAgICAgeTogcHJldklucHV0LmRlbHRhWSB8fCAwXG4gICAgfTtcbiAgICBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhID0ge1xuICAgICAgeDogY2VudGVyLngsXG4gICAgICB5OiBjZW50ZXIueVxuICAgIH07XG4gIH1cblxuICBpbnB1dC5kZWx0YVggPSBwcmV2RGVsdGEueCArIChjZW50ZXIueCAtIG9mZnNldC54KTtcbiAgaW5wdXQuZGVsdGFZID0gcHJldkRlbHRhLnkgKyAoY2VudGVyLnkgLSBvZmZzZXQueSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgdmVsb2NpdHkgYmV0d2VlbiB0d28gcG9pbnRzLiB1bml0IGlzIGluIHB4IHBlciBtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIHgsIHkpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgeTogeSAvIGRlbHRhVGltZSB8fCAwXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgc2NhbGUgZmFjdG9yIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBubyBzY2FsZSBpcyAxLCBhbmQgZ29lcyBkb3duIHRvIDAgd2hlbiBwaW5jaGVkIHRvZ2V0aGVyLCBhbmQgYmlnZ2VyIHdoZW4gcGluY2hlZCBvdXRcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gc2NhbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRTY2FsZShzdGFydCwgZW5kKSB7XG4gIHJldHVybiBnZXREaXN0YW5jZShlbmRbMF0sIGVuZFsxXSwgUFJPUFNfQ0xJRU5UX1hZKSAvIGdldERpc3RhbmNlKHN0YXJ0WzBdLCBzdGFydFsxXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSByb3RhdGlvbiBkZWdyZWVzIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHJvdGF0aW9uXG4gKi9cblxuZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZ2V0QW5nbGUoZW5kWzFdLCBlbmRbMF0sIFBST1BTX0NMSUVOVF9YWSkgKyBnZXRBbmdsZShzdGFydFsxXSwgc3RhcnRbMF0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHZlbG9jaXR5IGlzIGNhbGN1bGF0ZWQgZXZlcnkgeCBtc1xuICogQHBhcmFtIHtPYmplY3R9IHNlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgbGFzdCA9IHNlc3Npb24ubGFzdEludGVydmFsIHx8IGlucHV0O1xuICB2YXIgZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gbGFzdC50aW1lU3RhbXA7XG4gIHZhciB2ZWxvY2l0eTtcbiAgdmFyIHZlbG9jaXR5WDtcbiAgdmFyIHZlbG9jaXR5WTtcbiAgdmFyIGRpcmVjdGlvbjtcblxuICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9PSBJTlBVVF9DQU5DRUwgJiYgKGRlbHRhVGltZSA+IENPTVBVVEVfSU5URVJWQUwgfHwgbGFzdC52ZWxvY2l0eSA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHZhciBkZWx0YVggPSBpbnB1dC5kZWx0YVggLSBsYXN0LmRlbHRhWDtcbiAgICB2YXIgZGVsdGFZID0gaW5wdXQuZGVsdGFZIC0gbGFzdC5kZWx0YVk7XG4gICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICB2ZWxvY2l0eVggPSB2Lng7XG4gICAgdmVsb2NpdHlZID0gdi55O1xuICAgIHZlbG9jaXR5ID0gYWJzKHYueCkgPiBhYnModi55KSA/IHYueCA6IHYueTtcbiAgICBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oZGVsdGFYLCBkZWx0YVkpO1xuICAgIHNlc3Npb24ubGFzdEludGVydmFsID0gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIGxhdGVzdCB2ZWxvY2l0eSBpbmZvIGlmIGl0IGRvZXNuJ3Qgb3ZlcnRha2UgYSBtaW5pbXVtIHBlcmlvZFxuICAgIHZlbG9jaXR5ID0gbGFzdC52ZWxvY2l0eTtcbiAgICB2ZWxvY2l0eVggPSBsYXN0LnZlbG9jaXR5WDtcbiAgICB2ZWxvY2l0eVkgPSBsYXN0LnZlbG9jaXR5WTtcbiAgICBkaXJlY3Rpb24gPSBsYXN0LmRpcmVjdGlvbjtcbiAgfVxuXG4gIGlucHV0LnZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gIGlucHV0LnZlbG9jaXR5WCA9IHZlbG9jaXR5WDtcbiAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG59XG5cbi8qKlxuKiBAcHJpdmF0ZVxuICogZXh0ZW5kIHRoZSBkYXRhIHdpdGggc29tZSB1c2FibGUgcHJvcGVydGllcyBsaWtlIHNjYWxlLCByb3RhdGUsIHZlbG9jaXR5IGV0Y1xuICogQHBhcmFtIHtPYmplY3R9IG1hbmFnZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnB1dERhdGEobWFuYWdlciwgaW5wdXQpIHtcbiAgdmFyIHNlc3Npb24gPSBtYW5hZ2VyLnNlc3Npb247XG4gIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIHN0b3JlIHRoZSBmaXJzdCBpbnB1dCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGFuZCBkaXJlY3Rpb25cblxuICBpZiAoIXNlc3Npb24uZmlyc3RJbnB1dCkge1xuICAgIHNlc3Npb24uZmlyc3RJbnB1dCA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgfSAvLyB0byBjb21wdXRlIHNjYWxlIGFuZCByb3RhdGlvbiB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBtdWx0aXBsZSB0b3VjaGVzXG5cblxuICBpZiAocG9pbnRlcnNMZW5ndGggPiAxICYmICFzZXNzaW9uLmZpcnN0TXVsdGlwbGUpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gIH0gZWxzZSBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBmaXJzdElucHV0ID0gc2Vzc2lvbi5maXJzdElucHV0LFxuICAgICAgZmlyc3RNdWx0aXBsZSA9IHNlc3Npb24uZmlyc3RNdWx0aXBsZTtcbiAgdmFyIG9mZnNldENlbnRlciA9IGZpcnN0TXVsdGlwbGUgPyBmaXJzdE11bHRpcGxlLmNlbnRlciA6IGZpcnN0SW5wdXQuY2VudGVyO1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyID0gZ2V0Q2VudGVyKHBvaW50ZXJzKTtcbiAgaW5wdXQudGltZVN0YW1wID0gbm93KCk7XG4gIGlucHV0LmRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGZpcnN0SW5wdXQudGltZVN0YW1wO1xuICBpbnB1dC5hbmdsZSA9IGdldEFuZ2xlKG9mZnNldENlbnRlciwgY2VudGVyKTtcbiAgaW5wdXQuZGlzdGFuY2UgPSBnZXREaXN0YW5jZShvZmZzZXRDZW50ZXIsIGNlbnRlcik7XG4gIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KTtcbiAgaW5wdXQub2Zmc2V0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgdmFyIG92ZXJhbGxWZWxvY2l0eSA9IGdldFZlbG9jaXR5KGlucHV0LmRlbHRhVGltZSwgaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYID0gb3ZlcmFsbFZlbG9jaXR5Lng7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVkgPSBvdmVyYWxsVmVsb2NpdHkueTtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5ID0gYWJzKG92ZXJhbGxWZWxvY2l0eS54KSA+IGFicyhvdmVyYWxsVmVsb2NpdHkueSkgPyBvdmVyYWxsVmVsb2NpdHkueCA6IG92ZXJhbGxWZWxvY2l0eS55O1xuICBpbnB1dC5zY2FsZSA9IGZpcnN0TXVsdGlwbGUgPyBnZXRTY2FsZShmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAxO1xuICBpbnB1dC5yb3RhdGlvbiA9IGZpcnN0TXVsdGlwbGUgPyBnZXRSb3RhdGlvbihmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAwO1xuICBpbnB1dC5tYXhQb2ludGVycyA9ICFzZXNzaW9uLnByZXZJbnB1dCA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA+IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnM7XG4gIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCk7IC8vIGZpbmQgdGhlIGNvcnJlY3QgdGFyZ2V0XG5cbiAgdmFyIHRhcmdldCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgdmFyIHNyY0V2ZW50ID0gaW5wdXQuc3JjRXZlbnQ7XG4gIHZhciBzcmNFdmVudFRhcmdldDtcblxuICBpZiAoc3JjRXZlbnQuY29tcG9zZWRQYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5jb21wb3NlZFBhdGgoKVswXTtcbiAgfSBlbHNlIGlmIChzcmNFdmVudC5wYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5wYXRoWzBdO1xuICB9IGVsc2Uge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQudGFyZ2V0O1xuICB9XG5cbiAgaWYgKGhhc1BhcmVudChzcmNFdmVudFRhcmdldCwgdGFyZ2V0KSkge1xuICAgIHRhcmdldCA9IHNyY0V2ZW50VGFyZ2V0O1xuICB9XG5cbiAgaW5wdXQudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBoYW5kbGUgaW5wdXQgZXZlbnRzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGlucHV0SGFuZGxlcihtYW5hZ2VyLCBldmVudFR5cGUsIGlucHV0KSB7XG4gIHZhciBwb2ludGVyc0xlbiA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aDtcbiAgdmFyIGNoYW5nZWRQb2ludGVyc0xlbiA9IGlucHV0LmNoYW5nZWRQb2ludGVycy5sZW5ndGg7XG4gIHZhciBpc0ZpcnN0ID0gZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIHZhciBpc0ZpbmFsID0gZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIGlucHV0LmlzRmlyc3QgPSAhIWlzRmlyc3Q7XG4gIGlucHV0LmlzRmluYWwgPSAhIWlzRmluYWw7XG5cbiAgaWYgKGlzRmlyc3QpIHtcbiAgICBtYW5hZ2VyLnNlc3Npb24gPSB7fTtcbiAgfSAvLyBzb3VyY2UgZXZlbnQgaXMgdGhlIG5vcm1hbGl6ZWQgdmFsdWUgb2YgdGhlIGRvbUV2ZW50c1xuICAvLyBsaWtlICd0b3VjaHN0YXJ0LCBtb3VzZXVwLCBwb2ludGVyZG93bidcblxuXG4gIGlucHV0LmV2ZW50VHlwZSA9IGV2ZW50VHlwZTsgLy8gY29tcHV0ZSBzY2FsZSwgcm90YXRpb24gZXRjXG5cbiAgY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCk7IC8vIGVtaXQgc2VjcmV0IGV2ZW50XG5cbiAgbWFuYWdlci5lbWl0KCdoYW1tZXIuaW5wdXQnLCBpbnB1dCk7XG4gIG1hbmFnZXIucmVjb2duaXplKGlucHV0KTtcbiAgbWFuYWdlci5zZXNzaW9uLnByZXZJbnB1dCA9IGlucHV0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzcGxpdCBzdHJpbmcgb24gd2hpdGVzcGFjZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge0FycmF5fSB3b3Jkc1xuICovXG5mdW5jdGlvbiBzcGxpdFN0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltKCkuc3BsaXQoL1xccysvZyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZEV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgd2luZG93IG9iamVjdCBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RG9jdW1lbnRWaWV3fFdpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93Rm9yRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZWxlbWVudDtcbiAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93IHx8IHdpbmRvdztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIElucHV0KG1hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgICB0aGlzLnRhcmdldCA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dFRhcmdldDsgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuXG4gICAgdGhpcy5kb21IYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICBpZiAoYm9vbE9yRm4obWFuYWdlci5vcHRpb25zLmVuYWJsZSwgW21hbmFnZXJdKSkge1xuICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2hvdWxkIGhhbmRsZSB0aGUgaW5wdXRFdmVudCBkYXRhIGFuZCB0cmlnZ2VyIHRoZSBjYWxsYmFja1xuICAgKiBAdmlydHVhbFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBiaW5kIHRoZSBldmVudHNcbiAgICovXG5cblxuICBfcHJvdG8uaW5pdCA9IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdGhpcy5ldkVsICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZUYXJnZXQgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldldpbiAmJiBhZGRFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgKi9cblxuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldlRhcmdldCAmJiByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2V2luICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4gSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGZpbmQgaWYgYSBhcnJheSBjb250YWlucyB0aGUgb2JqZWN0IHVzaW5nIGluZGV4T2Ygb3IgYSBzaW1wbGUgcG9seUZpbGxcbiAqIEBwYXJhbSB7QXJyYXl9IHNyY1xuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmluZEJ5S2V5XVxuICogQHJldHVybiB7Qm9vbGVhbnxOdW1iZXJ9IGZhbHNlIHdoZW4gbm90IGZvdW5kLCBvciB0aGUgaW5kZXhcbiAqL1xuZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICBpZiAoc3JjLmluZGV4T2YgJiYgIWZpbmRCeUtleSkge1xuICAgIHJldHVybiBzcmMuaW5kZXhPZihmaW5kKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICAgIGlmIChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCB8fCAhZmluZEJ5S2V5ICYmIHNyY1tpXSA9PT0gZmluZCkge1xuICAgICAgICAvLyBkbyBub3QgdXNlID09PSBoZXJlLCB0ZXN0IGZhaWxzXG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG5cbnZhciBQT0lOVEVSX0lOUFVUX01BUCA9IHtcbiAgcG9pbnRlcmRvd246IElOUFVUX1NUQVJULFxuICBwb2ludGVybW92ZTogSU5QVVRfTU9WRSxcbiAgcG9pbnRlcnVwOiBJTlBVVF9FTkQsXG4gIHBvaW50ZXJjYW5jZWw6IElOUFVUX0NBTkNFTCxcbiAgcG9pbnRlcm91dDogSU5QVVRfQ0FOQ0VMXG59OyAvLyBpbiBJRTEwIHRoZSBwb2ludGVyIHR5cGVzIGlzIGRlZmluZWQgYXMgYW4gZW51bVxuXG52YXIgSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSA9IHtcbiAgMjogSU5QVVRfVFlQRV9UT1VDSCxcbiAgMzogSU5QVVRfVFlQRV9QRU4sXG4gIDQ6IElOUFVUX1RZUEVfTU9VU0UsXG4gIDU6IElOUFVUX1RZUEVfS0lORUNUIC8vIHNlZSBodHRwczovL3R3aXR0ZXIuY29tL2phY29icm9zc2kvc3RhdHVzLzQ4MDU5NjQzODQ4OTg5MDgxNlxuXG59O1xudmFyIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAncG9pbnRlcmRvd24nO1xudmFyIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdwb2ludGVybW92ZSBwb2ludGVydXAgcG9pbnRlcmNhbmNlbCc7IC8vIElFMTAgaGFzIHByZWZpeGVkIHN1cHBvcnQsIGFuZCBjYXNlLXNlbnNpdGl2ZVxuXG5pZiAod2luLk1TUG9pbnRlckV2ZW50ICYmICF3aW4uUG9pbnRlckV2ZW50KSB7XG4gIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAnTVNQb2ludGVyRG93bic7XG4gIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCc7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBQb2ludGVyIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cblxudmFyIFBvaW50ZXJFdmVudElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUG9pbnRlckV2ZW50SW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2RWwgPSBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5zdG9yZSA9IF90aGlzLm1hbmFnZXIuc2Vzc2lvbi5wb2ludGVyRXZlbnRzID0gW107XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBQb2ludGVyRXZlbnRJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICB2YXIgcmVtb3ZlUG9pbnRlciA9IGZhbHNlO1xuICAgIHZhciBldmVudFR5cGVOb3JtYWxpemVkID0gZXYudHlwZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ21zJywgJycpO1xuICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICB2YXIgcG9pbnRlclR5cGUgPSBJRTEwX1BPSU5URVJfVFlQRV9FTlVNW2V2LnBvaW50ZXJUeXBlXSB8fCBldi5wb2ludGVyVHlwZTtcbiAgICB2YXIgaXNUb3VjaCA9IHBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIOyAvLyBnZXQgaW5kZXggb2YgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG4gICAgdmFyIHN0b3JlSW5kZXggPSBpbkFycmF5KHN0b3JlLCBldi5wb2ludGVySWQsICdwb2ludGVySWQnKTsgLy8gc3RhcnQgYW5kIG1vdXNlIG11c3QgYmUgZG93blxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIChldi5idXR0b24gPT09IDAgfHwgaXNUb3VjaCkpIHtcbiAgICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgICBzdG9yZS5wdXNoKGV2KTtcbiAgICAgICAgc3RvcmVJbmRleCA9IHN0b3JlLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgcmVtb3ZlUG9pbnRlciA9IHRydWU7XG4gICAgfSAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcblxuXG4gICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG5cbiAgICBzdG9yZVtzdG9yZUluZGV4XSA9IGV2O1xuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiBwb2ludGVyVHlwZSxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuXG4gICAgaWYgKHJlbW92ZVBvaW50ZXIpIHtcbiAgICAgIC8vIHJlbW92ZSBmcm9tIHRoZSBzdG9yZVxuICAgICAgc3RvcmUuc3BsaWNlKHN0b3JlSW5kZXgsIDEpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUG9pbnRlckV2ZW50SW5wdXQ7XG59KElucHV0KTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY29udmVydCBhcnJheS1saWtlIG9iamVjdHMgdG8gcmVhbCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaiwgMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHVuaXF1ZSBhcnJheSB3aXRoIG9iamVjdHMgYmFzZWQgb24gYSBrZXkgKGxpa2UgJ2lkJykgb3IganVzdCBieSB0aGUgYXJyYXkncyB2YWx1ZVxuICogQHBhcmFtIHtBcnJheX0gc3JjIFt7aWQ6MX0se2lkOjJ9LHtpZDoxfV1cbiAqIEBwYXJhbSB7U3RyaW5nfSBba2V5XVxuICogQHBhcmFtIHtCb29sZWFufSBbc29ydD1GYWxzZV1cbiAqIEByZXR1cm5zIHtBcnJheX0gW3tpZDoxfSx7aWQ6Mn1dXG4gKi9cblxuZnVuY3Rpb24gdW5pcXVlQXJyYXkoc3JjLCBrZXksIHNvcnQpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgdmFyIHZhbCA9IGtleSA/IHNyY1tpXVtrZXldIDogc3JjW2ldO1xuXG4gICAgaWYgKGluQXJyYXkodmFsdWVzLCB2YWwpIDwgMCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHNyY1tpXSk7XG4gICAgfVxuXG4gICAgdmFsdWVzW2ldID0gdmFsO1xuICAgIGkrKztcbiAgfVxuXG4gIGlmIChzb3J0KSB7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYVtrZXldID4gYltrZXldO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbnZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICB0b3VjaG1vdmU6IElOUFVUX01PVkUsXG4gIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG52YXIgVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNdWx0aS11c2VyIHRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIFRvdWNoSW5wdXQucHJvdG90eXBlLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMudGFyZ2V0SWRzID0ge307IC8vIHRoaXMuZXZUYXJnZXQgPSBUT1VDSF9UQVJHRVRfRVZFTlRTO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRvdWNoSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciB0eXBlID0gVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdO1xuICAgIHZhciB0b3VjaGVzID0gZ2V0VG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTtcblxuICAgIGlmICghdG91Y2hlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoSW5wdXQ7XG59KElucHV0KTtcblxuZnVuY3Rpb24gZ2V0VG91Y2hlcyhldiwgdHlwZSkge1xuICB2YXIgYWxsVG91Y2hlcyA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciB0YXJnZXRJZHMgPSB0aGlzLnRhcmdldElkczsgLy8gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSB0b3VjaCwgdGhlIHByb2Nlc3MgY2FuIGJlIHNpbXBsaWZpZWRcblxuICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgdGFyZ2V0SWRzW2FsbFRvdWNoZXNbMF0uaWRlbnRpZmllcl0gPSB0cnVlO1xuICAgIHJldHVybiBbYWxsVG91Y2hlcywgYWxsVG91Y2hlc107XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIHRhcmdldFRvdWNoZXM7XG4gIHZhciBjaGFuZ2VkVG91Y2hlcyA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpO1xuICB2YXIgY2hhbmdlZFRhcmdldFRvdWNoZXMgPSBbXTtcbiAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0OyAvLyBnZXQgdGFyZ2V0IHRvdWNoZXMgZnJvbSB0b3VjaGVzXG5cbiAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uICh0b3VjaCkge1xuICAgIHJldHVybiBoYXNQYXJlbnQodG91Y2gudGFyZ2V0LCB0YXJnZXQpO1xuICB9KTsgLy8gY29sbGVjdCB0b3VjaGVzXG5cbiAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICBpKys7XG4gICAgfVxuICB9IC8vIGZpbHRlciBjaGFuZ2VkIHRvdWNoZXMgdG8gb25seSBjb250YWluIHRvdWNoZXMgdGhhdCBleGlzdCBpbiB0aGUgY29sbGVjdGVkIHRhcmdldCBpZHNcblxuXG4gIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgY2hhbmdlZFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMucHVzaChjaGFuZ2VkVG91Y2hlc1tpXSk7XG4gICAgfSAvLyBjbGVhbnVwIHJlbW92ZWQgdG91Y2hlc1xuXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIGlmICghY2hhbmdlZFRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIFsvLyBtZXJnZSB0YXJnZXRUb3VjaGVzIHdpdGggY2hhbmdlZFRhcmdldFRvdWNoZXMgc28gaXQgY29udGFpbnMgQUxMIHRvdWNoZXMsIGluY2x1ZGluZyAnZW5kJyBhbmQgJ2NhbmNlbCdcbiAgdW5pcXVlQXJyYXkodGFyZ2V0VG91Y2hlcy5jb25jYXQoY2hhbmdlZFRhcmdldFRvdWNoZXMpLCAnaWRlbnRpZmllcicsIHRydWUpLCBjaGFuZ2VkVGFyZ2V0VG91Y2hlc107XG59XG5cbnZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gIG1vdXNlZG93bjogSU5QVVRfU1RBUlQsXG4gIG1vdXNlbW92ZTogSU5QVVRfTU9WRSxcbiAgbW91c2V1cDogSU5QVVRfRU5EXG59O1xudmFyIE1PVVNFX0VMRU1FTlRfRVZFTlRTID0gJ21vdXNlZG93bic7XG52YXIgTU9VU0VfV0lORE9XX0VWRU5UUyA9ICdtb3VzZW1vdmUgbW91c2V1cCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNb3VzZSBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgTW91c2VJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKE1vdXNlSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gTW91c2VJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldkVsID0gTU9VU0VfRUxFTUVOVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBNT1VTRV9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5wcmVzc2VkID0gZmFsc2U7IC8vIG1vdXNlZG93biBzdGF0ZVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgZXZlbnRUeXBlID0gTU9VU0VfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBvbiBzdGFydCB3ZSB3YW50IHRvIGhhdmUgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGRvd25cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBldi5idXR0b24gPT09IDApIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX01PVkUgJiYgZXYud2hpY2ggIT09IDEpIHtcbiAgICAgIGV2ZW50VHlwZSA9IElOUFVUX0VORDtcbiAgICB9IC8vIG1vdXNlIG11c3QgYmUgZG93blxuXG5cbiAgICBpZiAoIXRoaXMucHJlc3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBbZXZdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTW91c2VJbnB1dDtcbn0oSW5wdXQpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDb21iaW5lZCB0b3VjaCBhbmQgbW91c2UgaW5wdXRcbiAqXG4gKiBUb3VjaCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhlbiBtb3VzZSwgYW5kIHdoaWxlIHRvdWNoaW5nIG5vIG1vdXNlIGV2ZW50cyBhcmUgYWxsb3dlZC5cbiAqIFRoaXMgYmVjYXVzZSB0b3VjaCBkZXZpY2VzIGFsc28gZW1pdCBtb3VzZSBldmVudHMgd2hpbGUgZG9pbmcgYSB0b3VjaC5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIERFRFVQX1RJTUVPVVQgPSAyNTAwO1xudmFyIERFRFVQX0RJU1RBTkNFID0gMjU7XG5cbmZ1bmN0aW9uIHNldExhc3RUb3VjaChldmVudERhdGEpIHtcbiAgdmFyIF9ldmVudERhdGEkY2hhbmdlZFBvaSA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnMsXG4gICAgICB0b3VjaCA9IF9ldmVudERhdGEkY2hhbmdlZFBvaVswXTtcblxuICBpZiAodG91Y2guaWRlbnRpZmllciA9PT0gdGhpcy5wcmltYXJ5VG91Y2gpIHtcbiAgICB2YXIgbGFzdFRvdWNoID0ge1xuICAgICAgeDogdG91Y2guY2xpZW50WCxcbiAgICAgIHk6IHRvdWNoLmNsaWVudFlcbiAgICB9O1xuICAgIHZhciBsdHMgPSB0aGlzLmxhc3RUb3VjaGVzO1xuICAgIHRoaXMubGFzdFRvdWNoZXMucHVzaChsYXN0VG91Y2gpO1xuXG4gICAgdmFyIHJlbW92ZUxhc3RUb3VjaCA9IGZ1bmN0aW9uIHJlbW92ZUxhc3RUb3VjaCgpIHtcbiAgICAgIHZhciBpID0gbHRzLmluZGV4T2YobGFzdFRvdWNoKTtcblxuICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkVG91Y2hlcyhldmVudFR5cGUsIGV2ZW50RGF0YSkge1xuICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICB0aGlzLnByaW1hcnlUb3VjaCA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnNbMF0uaWRlbnRpZmllcjtcbiAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KGV2ZW50RGF0YSkge1xuICB2YXIgeCA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRYO1xuICB2YXIgeSA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRZO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sYXN0VG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0ID0gdGhpcy5sYXN0VG91Y2hlc1tpXTtcbiAgICB2YXIgZHggPSBNYXRoLmFicyh4IC0gdC54KTtcbiAgICB2YXIgZHkgPSBNYXRoLmFicyh5IC0gdC55KTtcblxuICAgIGlmIChkeCA8PSBERURVUF9ESVNUQU5DRSAmJiBkeSA8PSBERURVUF9ESVNUQU5DRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgVG91Y2hNb3VzZUlucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIFRvdWNoTW91c2VJbnB1dCA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9JbnB1dCkge1xuICAgIF9pbmhlcml0c0xvb3NlKFRvdWNoTW91c2VJbnB1dCwgX0lucHV0KTtcblxuICAgIGZ1bmN0aW9uIFRvdWNoTW91c2VJbnB1dChfbWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfSW5wdXQuY2FsbCh0aGlzLCBfbWFuYWdlciwgY2FsbGJhY2spIHx8IHRoaXM7XG5cbiAgICAgIF90aGlzLmhhbmRsZXIgPSBmdW5jdGlvbiAobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKSB7XG4gICAgICAgIHZhciBpc1RvdWNoID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIO1xuICAgICAgICB2YXIgaXNNb3VzZSA9IGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9NT1VTRTtcblxuICAgICAgICBpZiAoaXNNb3VzZSAmJiBpbnB1dERhdGEuc291cmNlQ2FwYWJpbGl0aWVzICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyB3aGVuIHdlJ3JlIGluIGEgdG91Y2ggZXZlbnQsIHJlY29yZCB0b3VjaGVzIHRvICBkZS1kdXBlIHN5bnRoZXRpYyBtb3VzZSBldmVudFxuXG5cbiAgICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgICByZWNvcmRUb3VjaGVzLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RGF0YSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5jYWxsYmFjayhtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMudG91Y2ggPSBuZXcgVG91Y2hJbnB1dChfdGhpcy5tYW5hZ2VyLCBfdGhpcy5oYW5kbGVyKTtcbiAgICAgIF90aGlzLm1vdXNlID0gbmV3IE1vdXNlSW5wdXQoX3RoaXMubWFuYWdlciwgX3RoaXMuaGFuZGxlcik7XG4gICAgICBfdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgICAgX3RoaXMubGFzdFRvdWNoZXMgPSBbXTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBoYW5kbGUgbW91c2UgYW5kIHRvdWNoIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGlucHV0RXZlbnRcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG5cblxuICAgIHZhciBfcHJvdG8gPSBUb3VjaE1vdXNlSW5wdXQucHJvdG90eXBlO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyc1xuICAgICAqL1xuICAgIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHRoaXMudG91Y2guZGVzdHJveSgpO1xuICAgICAgdGhpcy5tb3VzZS5kZXN0cm95KCk7XG4gICAgfTtcblxuICAgIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG4gIH0oSW5wdXQpO1xuXG4gIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBjYWxsZWQgYnkgdGhlIE1hbmFnZXIgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gIHZhciBUeXBlOyAvLyBsZXQgaW5wdXRDbGFzcyA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dENsYXNzO1xuXG4gIHZhciBpbnB1dENsYXNzID0gbWFuYWdlci5vcHRpb25zLmlucHV0Q2xhc3M7XG5cbiAgaWYgKGlucHV0Q2xhc3MpIHtcbiAgICBUeXBlID0gaW5wdXRDbGFzcztcbiAgfSBlbHNlIGlmIChTVVBQT1JUX1BPSU5URVJfRVZFTlRTKSB7XG4gICAgVHlwZSA9IFBvaW50ZXJFdmVudElucHV0O1xuICB9IGVsc2UgaWYgKFNVUFBPUlRfT05MWV9UT1VDSCkge1xuICAgIFR5cGUgPSBUb3VjaElucHV0O1xuICB9IGVsc2UgaWYgKCFTVVBQT1JUX1RPVUNIKSB7XG4gICAgVHlwZSA9IE1vdXNlSW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgVHlwZSA9IFRvdWNoTW91c2VJbnB1dDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZShtYW5hZ2VyLCBpbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZm4gb24gZWFjaCBlbnRyeVxuICogaWYgaXQgYWludCBhbiBhcnJheSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGhpbmcuXG4gKiB0aGlzIGlzIHVzZWQgYnkgYWxsIHRoZSBtZXRob2RzIHRoYXQgYWNjZXB0IGEgc2luZ2xlIGFuZCBhcnJheSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7KnxBcnJheX0gYXJnXG4gKiBAcGFyYW0ge1N0cmluZ30gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF1cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGludm9rZUFycmF5QXJnKGFyZywgZm4sIGNvbnRleHQpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIGVhY2goYXJnLCBjb250ZXh0W2ZuXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBTVEFURV9QT1NTSUJMRSA9IDE7XG52YXIgU1RBVEVfQkVHQU4gPSAyO1xudmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xudmFyIFNUQVRFX0VOREVEID0gODtcbnZhciBTVEFURV9SRUNPR05JWkVEID0gU1RBVEVfRU5ERUQ7XG52YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG52YXIgU1RBVEVfRkFJTEVEID0gMzI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHVuaXF1ZSBpZFxuICogQHJldHVybnMge251bWJlcn0gdW5pcXVlSWRcbiAqL1xudmFyIF91bmlxdWVJZCA9IDE7XG5mdW5jdGlvbiB1bmlxdWVJZCgpIHtcbiAgcmV0dXJuIF91bmlxdWVJZCsrO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSByZWNvZ25pemVyIGJ5IG5hbWUgaWYgaXQgaXMgYm91bmQgdG8gYSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSBvdGhlclJlY29nbml6ZXJcbiAqIEBwYXJhbSB7UmVjb2duaXplcn0gcmVjb2duaXplclxuICogQHJldHVybnMge1JlY29nbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCByZWNvZ25pemVyKSB7XG4gIHZhciBtYW5hZ2VyID0gcmVjb2duaXplci5tYW5hZ2VyO1xuXG4gIGlmIChtYW5hZ2VyKSB7XG4gICAgcmV0dXJuIG1hbmFnZXIuZ2V0KG90aGVyUmVjb2duaXplcik7XG4gIH1cblxuICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSB1c2FibGUgc3RyaW5nLCB1c2VkIGFzIGV2ZW50IHBvc3RmaXhcbiAqIEBwYXJhbSB7Y29uc3RhbnR9IHN0YXRlXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdGF0ZVxuICovXG5cbmZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gIGlmIChzdGF0ZSAmIFNUQVRFX0NBTkNFTExFRCkge1xuICAgIHJldHVybiAnY2FuY2VsJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0VOREVEKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfQ0hBTkdFRCkge1xuICAgIHJldHVybiAnbW92ZSc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9CRUdBTikge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSZWNvZ25pemVyIGZsb3cgZXhwbGFpbmVkOyAqXG4gKiBBbGwgcmVjb2duaXplcnMgaGF2ZSB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBQT1NTSUJMRSB3aGVuIGEgaW5wdXQgc2Vzc2lvbiBzdGFydHMuXG4gKiBUaGUgZGVmaW5pdGlvbiBvZiBhIGlucHV0IHNlc3Npb24gaXMgZnJvbSB0aGUgZmlyc3QgaW5wdXQgdW50aWwgdGhlIGxhc3QgaW5wdXQsIHdpdGggYWxsIGl0J3MgbW92ZW1lbnQgaW4gaXQuICpcbiAqIEV4YW1wbGUgc2Vzc2lvbiBmb3IgbW91c2UtaW5wdXQ6IG1vdXNlZG93biAtPiBtb3VzZW1vdmUgLT4gbW91c2V1cFxuICpcbiAqIE9uIGVhY2ggcmVjb2duaXppbmcgY3ljbGUgKHNlZSBNYW5hZ2VyLnJlY29nbml6ZSkgdGhlIC5yZWNvZ25pemUoKSBtZXRob2QgaXMgZXhlY3V0ZWRcbiAqIHdoaWNoIGRldGVybWluZXMgd2l0aCBzdGF0ZSBpdCBzaG91bGQgYmUuXG4gKlxuICogSWYgdGhlIHJlY29nbml6ZXIgaGFzIHRoZSBzdGF0ZSBGQUlMRUQsIENBTkNFTExFRCBvciBSRUNPR05JWkVEIChlcXVhbHMgRU5ERUQpLCBpdCBpcyByZXNldCB0b1xuICogUE9TU0lCTEUgdG8gZ2l2ZSBpdCBhbm90aGVyIGNoYW5nZSBvbiB0aGUgbmV4dCBjeWNsZS5cbiAqXG4gKiAgICAgICAgICAgICAgIFBvc3NpYmxlXG4gKiAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgKy0tLS0tKy0tLS0tLS0tLS0tLS0tLStcbiAqICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgKy0tLS0tKy0tLS0tKyAgICAgICAgICAgICAgIHxcbiAqICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgIHxcbiAqICAgRmFpbGVkICAgICAgQ2FuY2VsbGVkICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSstLS0tLS0rXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgUmVjb2duaXplZCAgICAgICBCZWdhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kZWQvUmVjb2duaXplZFxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJlY29nbml6ZXJcbiAqIEV2ZXJ5IHJlY29nbml6ZXIgbmVlZHMgdG8gZXh0ZW5kIGZyb20gdGhpcyBjbGFzcy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuXG52YXIgUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7XG4gICAgICBlbmFibGU6IHRydWVcbiAgICB9LCBvcHRpb25zKTtcbiAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsOyAvLyBkZWZhdWx0IGlzIGVuYWJsZSB0cnVlXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG4gICAgdGhpcy5zaW11bHRhbmVvdXMgPSB7fTtcbiAgICB0aGlzLnJlcXVpcmVGYWlsID0gW107XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge1JlY29nbml6ZXJ9XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQob3B0aW9ucykge1xuICAgIGFzc2lnbiQxKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7IC8vIGFsc28gdXBkYXRlIHRoZSB0b3VjaEFjdGlvbiwgaW4gY2FzZSBzb21ldGhpbmcgY2hhbmdlZCBhYm91dCB0aGUgZGlyZWN0aW9ucy9lbmFibGVkIHN0YXRlXG5cbiAgICB0aGlzLm1hbmFnZXIgJiYgdGhpcy5tYW5hZ2VyLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiByZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzaW11bHRhbmVvdXMgPSB0aGlzLnNpbXVsdGFuZW91cztcbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG5cbiAgICBpZiAoIXNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdKSB7XG4gICAgICBzaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXSA9IG90aGVyUmVjb2duaXplcjtcbiAgICAgIG90aGVyUmVjb2duaXplci5yZWNvZ25pemVXaXRoKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgc2ltdWx0YW5lb3VzIGxpbmsuIGl0IGRvZXNudCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRyb3BSZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gZHJvcFJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICBkZWxldGUgdGhpcy5zaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlY29nbml6ZXIgY2FuIG9ubHkgcnVuIHdoZW4gYW4gb3RoZXIgaXMgZmFpbGluZ1xuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5yZXF1aXJlRmFpbHVyZSA9IGZ1bmN0aW9uIHJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcblxuICAgIGlmIChpbkFycmF5KHJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpID09PSAtMSkge1xuICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgb3RoZXJSZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgcmVxdWlyZUZhaWx1cmUgbGluay4gaXQgZG9lcyBub3QgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5kcm9wUmVxdWlyZUZhaWx1cmUgPSBmdW5jdGlvbiBkcm9wUmVxdWlyZUZhaWx1cmUob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgdmFyIGluZGV4ID0gaW5BcnJheSh0aGlzLnJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhcyByZXF1aXJlIGZhaWx1cmVzIGJvb2xlYW5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmhhc1JlcXVpcmVGYWlsdXJlcyA9IGZ1bmN0aW9uIGhhc1JlcXVpcmVGYWlsdXJlcygpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGggPiAwO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaWYgdGhlIHJlY29nbml6ZXIgY2FuIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5SZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gY2FuUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gISF0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogWW91IHNob3VsZCB1c2UgYHRyeUVtaXRgIGluc3RlYWQgb2YgYGVtaXRgIGRpcmVjdGx5IHRvIGNoZWNrXG4gICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgc2VsZi5tYW5hZ2VyLmVtaXQoZXZlbnQsIGlucHV0KTtcbiAgICB9IC8vICdwYW5zdGFydCcgYW5kICdwYW5tb3ZlJ1xuXG5cbiAgICBpZiAoc3RhdGUgPCBTVEFURV9FTkRFRCkge1xuICAgICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQgKyBzdGF0ZVN0cihzdGF0ZSkpO1xuICAgIH1cblxuICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgaWYgKGlucHV0LmFkZGl0aW9uYWxFdmVudCkge1xuICAgICAgLy8gYWRkaXRpb25hbCBldmVudChwYW5sZWZ0LCBwYW5yaWdodCwgcGluY2hpbiwgcGluY2hvdXQuLi4pXG4gICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgfSAvLyBwYW5lbmQgYW5kIHBhbmNhbmNlbFxuXG5cbiAgICBpZiAoc3RhdGUgPj0gU1RBVEVfRU5ERUQpIHtcbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgcmVxdWlyZSBmYWlsdXJlIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQsXG4gICAqIGlmIHRydWUsIGl0IGVtaXRzIGEgZ2VzdHVyZSBldmVudCxcbiAgICogb3RoZXJ3aXNlLCBzZXR1cCB0aGUgc3RhdGUgdG8gRkFJTEVELlxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8udHJ5RW1pdCA9IGZ1bmN0aW9uIHRyeUVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5jYW5FbWl0KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgIH0gLy8gaXQncyBmYWlsaW5nIGFueXdheVxuXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FuIHdlIGVtaXQ/XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5FbWl0ID0gZnVuY3Rpb24gY2FuRW1pdCgpIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoKSB7XG4gICAgICBpZiAoISh0aGlzLnJlcXVpcmVGYWlsW2ldLnN0YXRlICYgKFNUQVRFX0ZBSUxFRCB8IFNUQVRFX1BPU1NJQkxFKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemUgPSBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgLy8gbWFrZSBhIG5ldyBjb3B5IG9mIHRoZSBpbnB1dERhdGFcbiAgICAvLyBzbyB3ZSBjYW4gY2hhbmdlIHRoZSBpbnB1dERhdGEgd2l0aG91dCBtZXNzaW5nIHVwIHRoZSBvdGhlciByZWNvZ25pemVyc1xuICAgIHZhciBpbnB1dERhdGFDbG9uZSA9IGFzc2lnbiQxKHt9LCBpbnB1dERhdGEpOyAvLyBpcyBpcyBlbmFibGVkIGFuZCBhbGxvdyByZWNvZ25pemluZz9cblxuICAgIGlmICghYm9vbE9yRm4odGhpcy5vcHRpb25zLmVuYWJsZSwgW3RoaXMsIGlucHV0RGF0YUNsb25lXSkpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyByZXNldCB3aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZFxuXG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9SRUNPR05JWkVEIHwgU1RBVEVfQ0FOQ0VMTEVEIHwgU1RBVEVfRkFJTEVEKSkge1xuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnByb2Nlc3MoaW5wdXREYXRhQ2xvbmUpOyAvLyB0aGUgcmVjb2duaXplciBoYXMgcmVjb2duaXplZCBhIGdlc3R1cmVcbiAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCB8IFNUQVRFX0NBTkNFTExFRCkpIHtcbiAgICAgIHRoaXMudHJ5RW1pdChpbnB1dERhdGFDbG9uZSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgcmVjb2duaXplclxuICAgKiB0aGUgYWN0dWFsIHJlY29nbml6aW5nIGhhcHBlbnMgaW4gdGhpcyBtZXRob2RcbiAgICogQHZpcnR1YWxcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKiBAcmV0dXJucyB7Y29uc3RhbnR9IFNUQVRFXG4gICAqL1xuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cblxuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dERhdGEpIHt9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZXR1cm4gdGhlIHByZWZlcnJlZCB0b3VjaC1hY3Rpb25cbiAgICogQHZpcnR1YWxcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cblxuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYWxsZWQgd2hlbiB0aGUgZ2VzdHVyZSBpc24ndCBhbGxvd2VkIHRvIHJlY29nbml6ZVxuICAgKiBsaWtlIHdoZW4gYW5vdGhlciBpcyBiZWluZyByZWNvZ25pemVkIG9yIGl0IGlzIGRpc2FibGVkXG4gICAqIEB2aXJ0dWFsXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7fTtcblxuICByZXR1cm4gUmVjb2duaXplcjtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQSB0YXAgaXMgcmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvaW5nIGEgc21hbGwgdGFwL2NsaWNrLiBNdWx0aXBsZSB0YXBzIGFyZSByZWNvZ25pemVkIGlmIHRoZXkgb2NjdXJcbiAqIGJldHdlZW4gdGhlIGdpdmVuIGludGVydmFsIGFuZCBwb3NpdGlvbi4gVGhlIGRlbGF5IG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvZ25pemUgbXVsdGktdGFwcyB3aXRob3V0IGZpcmluZ1xuICogYSBzaW5nbGUgdGFwLlxuICpcbiAqIFRoZSBldmVudERhdGEgZnJvbSB0aGUgZW1pdHRlZCBldmVudCBjb250YWlucyB0aGUgcHJvcGVydHkgYHRhcENvdW50YCwgd2hpY2ggY29udGFpbnMgdGhlIGFtb3VudCBvZlxuICogbXVsdGktdGFwcyBiZWluZyByZWNvZ25pemVkLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFRhcFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFRhcFJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBUYXBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAndGFwJyxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgdGFwczogMSxcbiAgICAgIGludGVydmFsOiAzMDAsXG4gICAgICAvLyBtYXggdGltZSBiZXR3ZWVuIHRoZSBtdWx0aS10YXAgdGFwc1xuICAgICAgdGltZTogMjUwLFxuICAgICAgLy8gbWF4IHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgZG93biAobGlrZSBmaW5nZXIgb24gdGhlIHNjcmVlbilcbiAgICAgIHRocmVzaG9sZDogOSxcbiAgICAgIC8vIGEgbWluaW1hbCBtb3ZlbWVudCBpcyBvaywgYnV0IGtlZXAgaXQgbG93XG4gICAgICBwb3NUaHJlc2hvbGQ6IDEwXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7IC8vIHByZXZpb3VzIHRpbWUgYW5kIGNlbnRlcixcbiAgICAvLyB1c2VkIGZvciB0YXAgY291bnRpbmdcblxuICAgIF90aGlzLnBUaW1lID0gZmFsc2U7XG4gICAgX3RoaXMucENlbnRlciA9IGZhbHNlO1xuICAgIF90aGlzLl90aW1lciA9IG51bGw7XG4gICAgX3RoaXMuX2lucHV0ID0gbnVsbDtcbiAgICBfdGhpcy5jb3VudCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRhcFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTl07XG4gIH07XG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgdmFyIHZhbGlkVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgb3B0aW9ucy50aW1lO1xuICAgIHRoaXMucmVzZXQoKTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiB0aGlzLmNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgIH0gLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cblxuICAgIGlmICh2YWxpZE1vdmVtZW50ICYmIHZhbGlkVG91Y2hUaW1lICYmIHZhbGlkUG9pbnRlcnMpIHtcbiAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT09IElOUFVUX0VORCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmFsaWRJbnRlcnZhbCA9IHRoaXMucFRpbWUgPyBpbnB1dC50aW1lU3RhbXAgLSB0aGlzLnBUaW1lIDwgb3B0aW9ucy5pbnRlcnZhbCA6IHRydWU7XG4gICAgICB2YXIgdmFsaWRNdWx0aVRhcCA9ICF0aGlzLnBDZW50ZXIgfHwgZ2V0RGlzdGFuY2UodGhpcy5wQ2VudGVyLCBpbnB1dC5jZW50ZXIpIDwgb3B0aW9ucy5wb3NUaHJlc2hvbGQ7XG4gICAgICB0aGlzLnBUaW1lID0gaW5wdXQudGltZVN0YW1wO1xuICAgICAgdGhpcy5wQ2VudGVyID0gaW5wdXQuY2VudGVyO1xuXG4gICAgICBpZiAoIXZhbGlkTXVsdGlUYXAgfHwgIXZhbGlkSW50ZXJ2YWwpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIGlmIHRhcCBjb3VudCBtYXRjaGVzIHdlIGhhdmUgcmVjb2duaXplZCBpdCxcbiAgICAgIC8vIGVsc2UgaXQgaGFzIGJlZ2FuIHJlY29nbml6aW5nLi4uXG5cbiAgICAgIHZhciB0YXBDb3VudCA9IHRoaXMuY291bnQgJSBvcHRpb25zLnRhcHM7XG5cbiAgICAgIGlmICh0YXBDb3VudCA9PT0gMCkge1xuICAgICAgICAvLyBubyBmYWlsaW5nIHJlcXVpcmVtZW50cywgaW1tZWRpYXRlbHkgdHJpZ2dlciB0aGUgdGFwIGV2ZW50XG4gICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZUZhaWx1cmVzKCkpIHtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcblxuICAgICAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgICAgICB9LCBvcHRpb25zLmludGVydmFsKTtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5mYWlsVGltZW91dCA9IGZ1bmN0aW9uIGZhaWxUaW1lb3V0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LCB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHRoaXMuX2lucHV0LnRhcENvdW50ID0gdGhpcy5jb3VudDtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gVGFwUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFRoaXMgcmVjb2duaXplciBpcyBqdXN0IHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgc2ltcGxlIGF0dHJpYnV0ZSByZWNvZ25pemVycy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBBdHRyUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoQXR0clJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBBdHRyUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFVzZWQgdG8gY2hlY2sgaWYgaXQgdGhlIHJlY29nbml6ZXIgcmVjZWl2ZXMgdmFsaWQgaW5wdXQsIGxpa2UgaW5wdXQuZGlzdGFuY2UgPiAxMC5cbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gcmVjb2duaXplZFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBBdHRyUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICB2YXIgb3B0aW9uUG9pbnRlcnMgPSB0aGlzLm9wdGlvbnMucG9pbnRlcnM7XG4gICAgcmV0dXJuIG9wdGlvblBvaW50ZXJzID09PSAwIHx8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9uUG9pbnRlcnM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICovXG5cblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIHZhciBldmVudFR5cGUgPSBpbnB1dC5ldmVudFR5cGU7XG4gICAgdmFyIGlzUmVjb2duaXplZCA9IHN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCk7XG4gICAgdmFyIGlzVmFsaWQgPSB0aGlzLmF0dHJUZXN0KGlucHV0KTsgLy8gb24gY2FuY2VsIGlucHV0IGFuZCB3ZSd2ZSByZWNvZ25pemVkIGJlZm9yZSwgcmV0dXJuIFNUQVRFX0NBTkNFTExFRFxuXG4gICAgaWYgKGlzUmVjb2duaXplZCAmJiAoZXZlbnRUeXBlICYgSU5QVVRfQ0FOQ0VMIHx8ICFpc1ZhbGlkKSkge1xuICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0FOQ0VMTEVEO1xuICAgIH0gZWxzZSBpZiAoaXNSZWNvZ25pemVkIHx8IGlzVmFsaWQpIHtcbiAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfRU5ERUQ7XG4gICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgcmV0dXJuIFNUQVRFX0JFR0FOO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgcmV0dXJuIEF0dHJSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZGlyZWN0aW9uIGNvbnMgdG8gc3RyaW5nXG4gKiBAcGFyYW0ge2NvbnN0YW50fSBkaXJlY3Rpb25cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZGlyZWN0aW9uU3RyKGRpcmVjdGlvbikge1xuICBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fRE9XTikge1xuICAgIHJldHVybiAnZG93bic7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fVVApIHtcbiAgICByZXR1cm4gJ3VwJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgcmV0dXJuICdsZWZ0JztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9SSUdIVCkge1xuICAgIHJldHVybiAncmlnaHQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQYW5cbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGFuZCBtb3ZlZCBpbiB0aGUgYWxsb3dlZCBkaXJlY3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFBhblJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQYW5SZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFBhblJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGFuJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0FMTFxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICAgIF90aGlzLnBYID0gbnVsbDtcbiAgICBfdGhpcy5wWSA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFBhblJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciBhY3Rpb25zID0gW107XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1kpO1xuICAgIH1cblxuICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9O1xuXG4gIF9wcm90by5kaXJlY3Rpb25UZXN0ID0gZnVuY3Rpb24gZGlyZWN0aW9uVGVzdChpbnB1dCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBoYXNNb3ZlZCA9IHRydWU7XG4gICAgdmFyIGRpc3RhbmNlID0gaW5wdXQuZGlzdGFuY2U7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0LmRpcmVjdGlvbjtcbiAgICB2YXIgeCA9IGlucHV0LmRlbHRhWDtcbiAgICB2YXIgeSA9IGlucHV0LmRlbHRhWTsgLy8gbG9jayB0byBheGlzP1xuXG4gICAgaWYgKCEoZGlyZWN0aW9uICYgb3B0aW9ucy5kaXJlY3Rpb24pKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICBkaXJlY3Rpb24gPSB4ID09PSAwID8gRElSRUNUSU9OX05PTkUgOiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgICAgICBoYXNNb3ZlZCA9IHggIT09IHRoaXMucFg7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFYKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IHkgPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG4gICAgICAgIGhhc01vdmVkID0geSAhPT0gdGhpcy5wWTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gaGFzTW92ZWQgJiYgZGlzdGFuY2UgPiBvcHRpb25zLnRocmVzaG9sZCAmJiBkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBBdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKCAvLyByZXBsYWNlIHdpdGggYSBzdXBlciBjYWxsXG4gICAgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOIHx8ICEodGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKSAmJiB0aGlzLmRpcmVjdGlvblRlc3QoaW5wdXQpKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB0aGlzLnBYID0gaW5wdXQuZGVsdGFYO1xuICAgIHRoaXMucFkgPSBpbnB1dC5kZWx0YVk7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5kaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gUGFuUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTd2lwZVxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIG1vdmluZyBmYXN0ICh2ZWxvY2l0eSksIHdpdGggZW5vdWdoIGRpc3RhbmNlIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgU3dpcGVSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoU3dpcGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFN3aXBlUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICB2ZWxvY2l0eTogMC4zLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3dpcGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciB2ZWxvY2l0eTtcblxuICAgIGlmIChkaXJlY3Rpb24gJiAoRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5WTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiBkaXJlY3Rpb24gJiBpbnB1dC5vZmZzZXREaXJlY3Rpb24gJiYgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmIGlucHV0Lm1heFBvaW50ZXJzID09PSB0aGlzLm9wdGlvbnMucG9pbnRlcnMgJiYgYWJzKHZlbG9jaXR5KSA+IHRoaXMub3B0aW9ucy52ZWxvY2l0eSAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQ7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5vZmZzZXREaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uLCBpbnB1dCk7XG4gICAgfVxuXG4gICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFN3aXBlUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQaW5jaFxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXJzIGFyZSBtb3ZpbmcgdG93YXJkICh6b29tLWluKSBvciBhd2F5IGZyb20gZWFjaCBvdGhlciAoem9vbS1vdXQpLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBQaW5jaFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQaW5jaFJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUGluY2hSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGluY2gnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQaW5jaFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnNjYWxlIC0gMSkgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnNjYWxlICE9PSAxKSB7XG4gICAgICB2YXIgaW5PdXQgPSBpbnB1dC5zY2FsZSA8IDEgPyAnaW4nIDogJ291dCc7XG4gICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICB9XG5cbiAgICBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmVtaXQuY2FsbCh0aGlzLCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFBpbmNoUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSb3RhdGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVyIGFyZSBtb3ZpbmcgaW4gYSBjaXJjdWxhciBtb3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFJvdGF0ZVJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShSb3RhdGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFJvdGF0ZVJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdyb3RhdGUnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSb3RhdGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIChNYXRoLmFicyhpbnB1dC5yb3RhdGlvbikgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgcmV0dXJuIFJvdGF0ZVJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUHJlc3NcbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGZvciB4IG1zIHdpdGhvdXQgYW55IG1vdmVtZW50LlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFByZXNzUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUHJlc3NSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUHJlc3NSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncHJlc3MnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0aW1lOiAyNTEsXG4gICAgICAvLyBtaW5pbWFsIHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgcHJlc3NlZFxuICAgICAgdGhyZXNob2xkOiA5XG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gICAgX3RoaXMuX3RpbWVyID0gbnVsbDtcbiAgICBfdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQcmVzc1JlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX0FVVE9dO1xuICB9O1xuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgIHZhciB2YWxpZFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPiBvcHRpb25zLnRpbWU7XG4gICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cbiAgICBpZiAoIXZhbGlkTW92ZW1lbnQgfHwgIXZhbGlkUG9pbnRlcnMgfHwgaW5wdXQuZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgIXZhbGlkVGltZSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG5cbiAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgIH0sIG9wdGlvbnMudGltZSk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpbnB1dCAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIFwidXBcIiwgaW5wdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUHJlc3NSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IGlmIERPTSBldmVudHMgYXJlIGJlaW5nIHRyaWdnZXJlZC5cbiAgICogQnV0IHRoaXMgaXMgc2xvd2VyIGFuZCB1bnVzZWQgYnkgc2ltcGxlIGltcGxlbWVudGF0aW9ucywgc28gZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkb21FdmVudHM6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eS9mYWxsYmFjay5cbiAgICogV2hlbiBzZXQgdG8gYGNvbXB1dGVgIGl0IHdpbGwgbWFnaWNhbGx5IHNldCB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgYWRkZWQgcmVjb2duaXplcnMuXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqIEBkZWZhdWx0IGNvbXB1dGVcbiAgICovXG4gIHRvdWNoQWN0aW9uOiBUT1VDSF9BQ1RJT05fQ09NUFVURSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGVuYWJsZTogdHJ1ZSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogRVhQRVJJTUVOVEFMIEZFQVRVUkUgLS0gY2FuIGJlIHJlbW92ZWQvY2hhbmdlZFxuICAgKiBDaGFuZ2UgdGhlIHBhcmVudCBpbnB1dCB0YXJnZXQgZWxlbWVudC5cbiAgICogSWYgTnVsbCwgdGhlbiBpdCBpcyBiZWluZyBzZXQgdGhlIHRvIG1haW4gZWxlbWVudC5cbiAgICogQHR5cGUge051bGx8RXZlbnRUYXJnZXR9XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGlucHV0VGFyZ2V0OiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBmb3JjZSBhbiBpbnB1dCBjbGFzc1xuICAgKiBAdHlwZSB7TnVsbHxGdW5jdGlvbn1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5wdXRDbGFzczogbnVsbCxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogU29tZSBDU1MgcHJvcGVydGllcyBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB3b3JraW5nIG9mIEhhbW1lci5cbiAgICogQWRkIHRoZW0gdG8gdGhpcyBtZXRob2QgYW5kIHRoZXkgd2lsbCBiZSBzZXQgd2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyLlxuICAgKiBAbmFtZXNwYWNlXG4gICAqL1xuICBjc3NQcm9wczoge1xuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZXMgdGV4dCBzZWxlY3Rpb24gdG8gaW1wcm92ZSB0aGUgZHJhZ2dpbmcgZ2VzdHVyZS4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlclNlbGVjdDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGUgdGhlIFdpbmRvd3MgUGhvbmUgZ3JpcHBlcnMgd2hlbiBwcmVzc2luZyBhbiBlbGVtZW50LlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdG91Y2hTZWxlY3Q6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlcyB0aGUgZGVmYXVsdCBjYWxsb3V0IHNob3duIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0LlxuICAgICAqIE9uIGlPUywgd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQgc3VjaCBhcyBhIGxpbmssIFNhZmFyaSBkaXNwbGF5c1xuICAgICAqIGEgY2FsbG91dCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rLiBUaGlzIHByb3BlcnR5IGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGF0IGNhbGxvdXQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB0b3VjaENhbGxvdXQ6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB6b29taW5nIGlzIGVuYWJsZWQuIFVzZWQgYnkgSUUxMD5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIGNvbnRlbnRab29taW5nOiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlckRyYWc6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBPdmVycmlkZXMgdGhlIGhpZ2hsaWdodCBjb2xvciBzaG93biB3aGVuIHRoZSB1c2VyIHRhcHMgYSBsaW5rIG9yIGEgSmF2YVNjcmlwdFxuICAgICAqIGNsaWNrYWJsZSBlbGVtZW50IGluIGlPUy4gVGhpcyBwcm9wZXJ0eSBvYmV5cyB0aGUgYWxwaGEgdmFsdWUsIGlmIHNwZWNpZmllZC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdyZ2JhKDAsMCwwLDApJ1xuICAgICAqL1xuICAgIHRhcEhpZ2hsaWdodENvbG9yOiBcInJnYmEoMCwwLDAsMClcIlxuICB9XG59O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogRGVmYXVsdCByZWNvZ25pemVyIHNldHVwIHdoZW4gY2FsbGluZyBgSGFtbWVyKClgXG4gKiBXaGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIgdGhlc2Ugd2lsbCBiZSBza2lwcGVkLlxuICogVGhpcyBpcyBzZXBhcmF0ZWQgd2l0aCBvdGhlciBkZWZhdWx0cyBiZWNhdXNlIG9mIHRyZWUtc2hha2luZy5cbiAqIEB0eXBlIHtBcnJheX1cbiAqL1xuXG52YXIgcHJlc2V0ID0gW1tSb3RhdGVSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn1dLCBbUGluY2hSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn0sIFsncm90YXRlJ11dLCBbU3dpcGVSZWNvZ25pemVyLCB7XG4gIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUxcbn1dLCBbUGFuUmVjb2duaXplciwge1xuICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG59LCBbJ3N3aXBlJ11dLCBbVGFwUmVjb2duaXplcl0sIFtUYXBSZWNvZ25pemVyLCB7XG4gIGV2ZW50OiAnZG91YmxldGFwJyxcbiAgdGFwczogMlxufSwgWyd0YXAnXV0sIFtQcmVzc1JlY29nbml6ZXJdXTtcblxudmFyIFNUT1AgPSAxO1xudmFyIEZPUkNFRF9TVE9QID0gMjtcbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZC9yZW1vdmUgdGhlIGNzcyBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gbWFuYWdlci5vcHRpb25zLmNzc1Byb3BzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYWRkXG4gKi9cblxuZnVuY3Rpb24gdG9nZ2xlQ3NzUHJvcHMobWFuYWdlciwgYWRkKSB7XG4gIHZhciBlbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuXG4gIGlmICghZWxlbWVudC5zdHlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwcm9wO1xuICBlYWNoKG1hbmFnZXIub3B0aW9ucy5jc3NQcm9wcywgZnVuY3Rpb24gKHZhbHVlLCBuYW1lKSB7XG4gICAgcHJvcCA9IHByZWZpeGVkKGVsZW1lbnQuc3R5bGUsIG5hbWUpO1xuXG4gICAgaWYgKGFkZCkge1xuICAgICAgbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSA9IGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSBtYW5hZ2VyLm9sZENzc1Byb3BzW3Byb3BdIHx8IFwiXCI7XG4gICAgfVxuICB9KTtcblxuICBpZiAoIWFkZCkge1xuICAgIG1hbmFnZXIub2xkQ3NzUHJvcHMgPSB7fTtcbiAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdHJpZ2dlciBkb20gZXZlbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqL1xuXG5cbmZ1bmN0aW9uIHRyaWdnZXJEb21FdmVudChldmVudCwgZGF0YSkge1xuICB2YXIgZ2VzdHVyZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgZ2VzdHVyZUV2ZW50LmluaXRFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gIGdlc3R1cmVFdmVudC5nZXN0dXJlID0gZGF0YTtcbiAgZGF0YS50YXJnZXQuZGlzcGF0Y2hFdmVudChnZXN0dXJlRXZlbnQpO1xufVxuLyoqXG4qIEBwcml2YXRlXG4gKiBNYW5hZ2VyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG5cbnZhciBNYW5hZ2VyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMub3B0aW9ucyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMucmVjb2duaXplcnMgPSBbXTtcbiAgICB0aGlzLm9sZENzc1Byb3BzID0ge307XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmlucHV0ID0gY3JlYXRlSW5wdXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnRvdWNoQWN0aW9uID0gbmV3IFRvdWNoQWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG4gICAgZWFjaCh0aGlzLm9wdGlvbnMucmVjb2duaXplcnMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgcmVjb2duaXplciA9IF90aGlzLmFkZChuZXcgaXRlbVswXShpdGVtWzFdKSk7XG5cbiAgICAgIGl0ZW1bMl0gJiYgcmVjb2duaXplci5yZWNvZ25pemVXaXRoKGl0ZW1bMl0pO1xuICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7TWFuYWdlcn1cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgYXNzaWduJDEodGhpcy5vcHRpb25zLCBvcHRpb25zKTsgLy8gT3B0aW9ucyB0aGF0IG5lZWQgYSBsaXR0bGUgbW9yZSBzZXR1cFxuXG4gICAgaWYgKG9wdGlvbnMudG91Y2hBY3Rpb24pIHtcbiAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaW5wdXRUYXJnZXQpIHtcbiAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaW5wdXQudGFyZ2V0ID0gb3B0aW9ucy5pbnB1dFRhcmdldDtcbiAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc3RvcCByZWNvZ25pemluZyBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBUaGlzIHNlc3Npb24gd2lsbCBiZSBkaXNjYXJkZWQsIHdoZW4gYSBuZXcgW2lucHV0XXN0YXJ0IGV2ZW50IGlzIGZpcmVkLlxuICAgKiBXaGVuIGZvcmNlZCwgdGhlIHJlY29nbml6ZXIgY3ljbGUgaXMgc3RvcHBlZCBpbW1lZGlhdGVseS5cbiAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VdXG4gICAqL1xuXG5cbiAgX3Byb3RvLnN0b3AgPSBmdW5jdGlvbiBzdG9wKGZvcmNlKSB7XG4gICAgdGhpcy5zZXNzaW9uLnN0b3BwZWQgPSBmb3JjZSA/IEZPUkNFRF9TVE9QIDogU1RPUDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJ1biB0aGUgcmVjb2duaXplcnMhXG4gICAqIGNhbGxlZCBieSB0aGUgaW5wdXRIYW5kbGVyIGZ1bmN0aW9uIG9uIGV2ZXJ5IG1vdmVtZW50IG9mIHRoZSBwb2ludGVycyAodG91Y2hlcylcbiAgICogaXQgd2Fsa3MgdGhyb3VnaCBhbGwgdGhlIHJlY29nbml6ZXJzIGFuZCB0cmllcyB0byBkZXRlY3QgdGhlIGdlc3R1cmUgdGhhdCBpcyBiZWluZyBtYWRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xuXG4gICAgaWYgKHNlc3Npb24uc3RvcHBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gcnVuIHRoZSB0b3VjaC1hY3Rpb24gcG9seWZpbGxcblxuXG4gICAgdGhpcy50b3VjaEFjdGlvbi5wcmV2ZW50RGVmYXVsdHMoaW5wdXREYXRhKTtcbiAgICB2YXIgcmVjb2duaXplcjtcbiAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzOyAvLyB0aGlzIGhvbGRzIHRoZSByZWNvZ25pemVyIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAvLyBzbyB0aGUgcmVjb2duaXplcidzIHN0YXRlIG5lZWRzIHRvIGJlIEJFR0FOLCBDSEFOR0VELCBFTkRFRCBvciBSRUNPR05JWkVEXG4gICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuXG4gICAgdmFyIGN1clJlY29nbml6ZXIgPSBzZXNzaW9uLmN1clJlY29nbml6ZXI7IC8vIHJlc2V0IHdoZW4gdGhlIGxhc3QgcmVjb2duaXplciBpcyByZWNvZ25pemVkXG4gICAgLy8gb3Igd2hlbiB3ZSdyZSBpbiBhIG5ldyBzZXNzaW9uXG5cbiAgICBpZiAoIWN1clJlY29nbml6ZXIgfHwgY3VyUmVjb2duaXplciAmJiBjdXJSZWNvZ25pemVyLnN0YXRlICYgU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICAgIGN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgcmVjb2duaXplcnMubGVuZ3RoKSB7XG4gICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07IC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgIC8vIDEuICAgYWxsb3cgaWYgdGhlIHNlc3Npb24gaXMgTk9UIGZvcmNlZCBzdG9wcGVkIChzZWUgdGhlIC5zdG9wKCkgbWV0aG9kKVxuICAgICAgLy8gMi4gICBhbGxvdyBpZiB3ZSBzdGlsbCBoYXZlbid0IHJlY29nbml6ZWQgYSBnZXN0dXJlIGluIHRoaXMgc2Vzc2lvbiwgb3IgdGhlIHRoaXMgcmVjb2duaXplciBpcyB0aGUgb25lXG4gICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgIC8vIDMuICAgYWxsb3cgaWYgdGhlIHJlY29nbml6ZXIgaXMgYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzIHdpdGggdGhlIGN1cnJlbnQgcmVjb2duaXplZCByZWNvZ25pemVyLlxuICAgICAgLy8gICAgICB0aGlzIGNhbiBiZSBzZXR1cCB3aXRoIHRoZSBgcmVjb2duaXplV2l0aCgpYCBtZXRob2Qgb24gdGhlIHJlY29nbml6ZXIuXG5cbiAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQgIT09IEZPUkNFRF9TVE9QICYmICggLy8gMVxuICAgICAgIWN1clJlY29nbml6ZXIgfHwgcmVjb2duaXplciA9PT0gY3VyUmVjb2duaXplciB8fCAvLyAyXG4gICAgICByZWNvZ25pemVyLmNhblJlY29nbml6ZVdpdGgoY3VyUmVjb2duaXplcikpKSB7XG4gICAgICAgIC8vIDNcbiAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemUoaW5wdXREYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29nbml6ZXIucmVzZXQoKTtcbiAgICAgIH0gLy8gaWYgdGhlIHJlY29nbml6ZXIgaGFzIGJlZW4gcmVjb2duaXppbmcgdGhlIGlucHV0IGFzIGEgdmFsaWQgZ2VzdHVyZSwgd2Ugd2FudCB0byBzdG9yZSB0aGlzIG9uZSBhcyB0aGVcbiAgICAgIC8vIGN1cnJlbnQgYWN0aXZlIHJlY29nbml6ZXIuIGJ1dCBvbmx5IGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBhY3RpdmUgcmVjb2duaXplclxuXG5cbiAgICAgIGlmICghY3VyUmVjb2duaXplciAmJiByZWNvZ25pemVyLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEKSkge1xuICAgICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSByZWNvZ25pemVyO1xuICAgICAgICBjdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGdldCBhIHJlY29nbml6ZXIgYnkgaXRzIGV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TnVsbH1cbiAgICovXG5cblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHJlY29nbml6ZXIpIHtcbiAgICBpZiAocmVjb2duaXplciBpbnN0YW5jZW9mIFJlY29nbml6ZXIpIHtcbiAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgIH1cblxuICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVjb2duaXplcnNbaV0ub3B0aW9ucy5ldmVudCA9PT0gcmVjb2duaXplcikge1xuICAgICAgICByZXR1cm4gcmVjb2duaXplcnNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSBhZGQgYSByZWNvZ25pemVyIHRvIHRoZSBtYW5hZ2VyXG4gICAqIGV4aXN0aW5nIHJlY29nbml6ZXJzIHdpdGggdGhlIHNhbWUgZXZlbnQgbmFtZSB3aWxsIGJlIHJlbW92ZWRcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE1hbmFnZXJ9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChyZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsIFwiYWRkXCIsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IC8vIHJlbW92ZSBleGlzdGluZ1xuXG5cbiAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aGlzLnJlbW92ZShleGlzdGluZyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWNvZ25pemVycy5wdXNoKHJlY29nbml6ZXIpO1xuICAgIHJlY29nbml6ZXIubWFuYWdlciA9IHRoaXM7XG4gICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlbW92ZSBhIHJlY29nbml6ZXIgYnkgbmFtZSBvciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgKi9cblxuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhyZWNvZ25pemVyLCBcInJlbW92ZVwiLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFJlY29nbml6ZXIgPSB0aGlzLmdldChyZWNvZ25pemVyKTsgLy8gbGV0J3MgbWFrZSBzdXJlIHRoaXMgcmVjb2duaXplciBleGlzdHNcblxuICAgIGlmIChyZWNvZ25pemVyKSB7XG4gICAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuICAgICAgdmFyIGluZGV4ID0gaW5BcnJheShyZWNvZ25pemVycywgdGFyZ2V0UmVjb2duaXplcik7XG5cbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGJpbmQgZXZlbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub24gPSBmdW5jdGlvbiBvbihldmVudHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQgfHwgaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBoYW5kbGVyc1tldmVudF0gPSBoYW5kbGVyc1tldmVudF0gfHwgW107XG4gICAgICBoYW5kbGVyc1tldmVudF0ucHVzaChoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIHVuYmluZCBldmVudCwgbGVhdmUgZW1pdCBibGFuayB0byByZW1vdmUgYWxsIGhhbmRsZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2hhbmRsZXJdXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub2ZmID0gZnVuY3Rpb24gb2ZmKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVyc1tldmVudF0gJiYgaGFuZGxlcnNbZXZlbnRdLnNwbGljZShpbkFycmF5KGhhbmRsZXJzW2V2ZW50XSwgaGFuZGxlciksIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgZGF0YSkge1xuICAgIC8vIHdlIGFsc28gd2FudCB0byB0cmlnZ2VyIGRvbSBldmVudHNcbiAgICBpZiAodGhpcy5vcHRpb25zLmRvbUV2ZW50cykge1xuICAgICAgdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKTtcbiAgICB9IC8vIG5vIGhhbmRsZXJzLCBzbyBza2lwIGl0IGFsbFxuXG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzW2V2ZW50XSAmJiB0aGlzLmhhbmRsZXJzW2V2ZW50XS5zbGljZSgpO1xuXG4gICAgaWYgKCFoYW5kbGVycyB8fCAhaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGF0YS50eXBlID0gZXZlbnQ7XG5cbiAgICBkYXRhLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGF0YS5zcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgaGFuZGxlcnNbaV0oZGF0YSk7XG4gICAgICBpKys7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZGVzdHJveSB0aGUgbWFuYWdlciBhbmQgdW5iaW5kcyBhbGwgZXZlbnRzXG4gICAqIGl0IGRvZXNuJ3QgdW5iaW5kIGRvbSBldmVudHMsIHRoYXQgaXMgdGhlIHVzZXIgb3duIHJlc3BvbnNpYmlsaXR5XG4gICAqL1xuXG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuZWxlbWVudCAmJiB0b2dnbGVDc3NQcm9wcyh0aGlzLCBmYWxzZSk7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIE1hbmFnZXI7XG59KCk7XG5cbnZhciBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQID0ge1xuICB0b3VjaHN0YXJ0OiBJTlBVVF9TVEFSVCxcbiAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICB0b3VjaGNhbmNlbDogSU5QVVRfQ0FOQ0VMXG59O1xudmFyIFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQnO1xudmFyIFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcbi8qKlxuICogQHByaXZhdGVcbiAqIFRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBTaW5nbGVUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoU2luZ2xlVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBTaW5nbGVUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IFNpbmdsZVRvdWNoSW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2VGFyZ2V0ID0gU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTaW5nbGVUb3VjaElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgdHlwZSA9IFNJTkdMRV9UT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07IC8vIHNob3VsZCB3ZSBoYW5kbGUgdGhlIHRvdWNoIGV2ZW50cz9cblxuICAgIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3VjaGVzID0gbm9ybWFsaXplU2luZ2xlVG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTsgLy8gd2hlbiBkb25lLCByZXNldCB0aGUgc3RhcnRlZCBzdGF0ZVxuXG4gICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiB0b3VjaGVzWzBdLmxlbmd0aCAtIHRvdWNoZXNbMV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgdHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHRvdWNoZXNbMF0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBTaW5nbGVUb3VjaElucHV0O1xufShJbnB1dCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgdmFyIGFsbCA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciBjaGFuZ2VkID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG5cbiAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgIGFsbCA9IHVuaXF1ZUFycmF5KGFsbC5jb25jYXQoY2hhbmdlZCksICdpZGVudGlmaWVyJywgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gW2FsbCwgY2hhbmdlZF07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdyYXAgYSBtZXRob2Qgd2l0aCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgYW5kIHN0YWNrIHRyYWNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB3cmFwcGluZyB0aGUgc3VwcGxpZWQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBkZXByZWNhdGUobWV0aG9kLCBuYW1lLCBtZXNzYWdlKSB7XG4gIHZhciBkZXByZWNhdGlvbk1lc3NhZ2UgPSBcIkRFUFJFQ0FURUQgTUVUSE9EOiBcIiArIG5hbWUgKyBcIlxcblwiICsgbWVzc2FnZSArIFwiIEFUIFxcblwiO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICB2YXIgc3RhY2sgPSBlICYmIGUuc3RhY2sgPyBlLnN0YWNrLnJlcGxhY2UoL15bXlxcKF0rP1tcXG4kXS9nbSwgJycpLnJlcGxhY2UoL15cXHMrYXRcXHMrL2dtLCAnJykucmVwbGFjZSgvXk9iamVjdC48YW5vbnltb3VzPlxccypcXCgvZ20sICd7YW5vbnltb3VzfSgpQCcpIDogJ1Vua25vd24gU3RhY2sgVHJhY2UnO1xuICAgIHZhciBsb2cgPSB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUud2FybiB8fCB3aW5kb3cuY29uc29sZS5sb2cpO1xuXG4gICAgaWYgKGxvZykge1xuICAgICAgbG9nLmNhbGwod2luZG93LmNvbnNvbGUsIGRlcHJlY2F0aW9uTWVzc2FnZSwgc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW21lcmdlPWZhbHNlXVxuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG5cbnZhciBleHRlbmQgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYywgbWVyZ2UpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBrZXlzLmxlbmd0aCkge1xuICAgIGlmICghbWVyZ2UgfHwgbWVyZ2UgJiYgZGVzdFtrZXlzW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXN0W2tleXNbaV1dID0gc3JjW2tleXNbaV1dO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufSwgJ2V4dGVuZCcsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgdGhhdCBleGlzdCBpbiBkZXN0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuIGJ5IHNyY1xuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xuXG52YXIgbWVyZ2UgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYykge1xuICByZXR1cm4gZXh0ZW5kKGRlc3QsIHNyYywgdHJ1ZSk7XG59LCAnbWVyZ2UnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzaW1wbGUgY2xhc3MgaW5oZXJpdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoaWxkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBiYXNlXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXNdXG4gKi9cblxuZnVuY3Rpb24gaW5oZXJpdChjaGlsZCwgYmFzZSwgcHJvcGVydGllcykge1xuICB2YXIgYmFzZVAgPSBiYXNlLnByb3RvdHlwZTtcbiAgdmFyIGNoaWxkUDtcbiAgY2hpbGRQID0gY2hpbGQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShiYXNlUCk7XG4gIGNoaWxkUC5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuICBjaGlsZFAuX3N1cGVyID0gYmFzZVA7XG5cbiAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICBhc3NpZ24kMShjaGlsZFAsIHByb3BlcnRpZXMpO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNpbXBsZSBmdW5jdGlvbiBiaW5kXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gYmluZEZuKGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBib3VuZEZuKCkge1xuICAgIHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIG1hbmFnZXIgd2l0aCBhIGRlZmF1bHQgc2V0IG9mIHJlY29nbml6ZXJzLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIEhhbW1lciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIHZhciBIYW1tZXIgPVxuICAvKipcbiAgICAqIEBwcml2YXRlXG4gICAgKiBAY29uc3Qge3N0cmluZ31cbiAgICAqL1xuICBmdW5jdGlvbiBIYW1tZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1hbmFnZXIoZWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgcmVjb2duaXplcnM6IHByZXNldC5jb25jYXQoKVxuICAgIH0sIG9wdGlvbnMpKTtcbiAgfTtcblxuICBIYW1tZXIuVkVSU0lPTiA9IFwiMi4wLjE3LXJjXCI7XG4gIEhhbW1lci5ESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0FMTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9ET1dOID0gRElSRUNUSU9OX0RPV047XG4gIEhhbW1lci5ESVJFQ1RJT05fTEVGVCA9IERJUkVDVElPTl9MRUZUO1xuICBIYW1tZXIuRElSRUNUSU9OX1JJR0hUID0gRElSRUNUSU9OX1JJR0hUO1xuICBIYW1tZXIuRElSRUNUSU9OX1VQID0gRElSRUNUSU9OX1VQO1xuICBIYW1tZXIuRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9WRVJUSUNBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9OT05FID0gRElSRUNUSU9OX05PTkU7XG4gIEhhbW1lci5ESVJFQ1RJT05fRE9XTiA9IERJUkVDVElPTl9ET1dOO1xuICBIYW1tZXIuSU5QVVRfU1RBUlQgPSBJTlBVVF9TVEFSVDtcbiAgSGFtbWVyLklOUFVUX01PVkUgPSBJTlBVVF9NT1ZFO1xuICBIYW1tZXIuSU5QVVRfRU5EID0gSU5QVVRfRU5EO1xuICBIYW1tZXIuSU5QVVRfQ0FOQ0VMID0gSU5QVVRfQ0FOQ0VMO1xuICBIYW1tZXIuU1RBVEVfUE9TU0lCTEUgPSBTVEFURV9QT1NTSUJMRTtcbiAgSGFtbWVyLlNUQVRFX0JFR0FOID0gU1RBVEVfQkVHQU47XG4gIEhhbW1lci5TVEFURV9DSEFOR0VEID0gU1RBVEVfQ0hBTkdFRDtcbiAgSGFtbWVyLlNUQVRFX0VOREVEID0gU1RBVEVfRU5ERUQ7XG4gIEhhbW1lci5TVEFURV9SRUNPR05JWkVEID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgSGFtbWVyLlNUQVRFX0NBTkNFTExFRCA9IFNUQVRFX0NBTkNFTExFRDtcbiAgSGFtbWVyLlNUQVRFX0ZBSUxFRCA9IFNUQVRFX0ZBSUxFRDtcbiAgSGFtbWVyLk1hbmFnZXIgPSBNYW5hZ2VyO1xuICBIYW1tZXIuSW5wdXQgPSBJbnB1dDtcbiAgSGFtbWVyLlRvdWNoQWN0aW9uID0gVG91Y2hBY3Rpb247XG4gIEhhbW1lci5Ub3VjaElucHV0ID0gVG91Y2hJbnB1dDtcbiAgSGFtbWVyLk1vdXNlSW5wdXQgPSBNb3VzZUlucHV0O1xuICBIYW1tZXIuUG9pbnRlckV2ZW50SW5wdXQgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgSGFtbWVyLlRvdWNoTW91c2VJbnB1dCA9IFRvdWNoTW91c2VJbnB1dDtcbiAgSGFtbWVyLlNpbmdsZVRvdWNoSW5wdXQgPSBTaW5nbGVUb3VjaElucHV0O1xuICBIYW1tZXIuUmVjb2duaXplciA9IFJlY29nbml6ZXI7XG4gIEhhbW1lci5BdHRyUmVjb2duaXplciA9IEF0dHJSZWNvZ25pemVyO1xuICBIYW1tZXIuVGFwID0gVGFwUmVjb2duaXplcjtcbiAgSGFtbWVyLlBhbiA9IFBhblJlY29nbml6ZXI7XG4gIEhhbW1lci5Td2lwZSA9IFN3aXBlUmVjb2duaXplcjtcbiAgSGFtbWVyLlBpbmNoID0gUGluY2hSZWNvZ25pemVyO1xuICBIYW1tZXIuUm90YXRlID0gUm90YXRlUmVjb2duaXplcjtcbiAgSGFtbWVyLlByZXNzID0gUHJlc3NSZWNvZ25pemVyO1xuICBIYW1tZXIub24gPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLm9mZiA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIuZWFjaCA9IGVhY2g7XG4gIEhhbW1lci5tZXJnZSA9IG1lcmdlO1xuICBIYW1tZXIuZXh0ZW5kID0gZXh0ZW5kO1xuICBIYW1tZXIuYmluZEZuID0gYmluZEZuO1xuICBIYW1tZXIuYXNzaWduID0gYXNzaWduJDE7XG4gIEhhbW1lci5pbmhlcml0ID0gaW5oZXJpdDtcbiAgSGFtbWVyLmJpbmRGbiA9IGJpbmRGbjtcbiAgSGFtbWVyLnByZWZpeGVkID0gcHJlZml4ZWQ7XG4gIEhhbW1lci50b0FycmF5ID0gdG9BcnJheTtcbiAgSGFtbWVyLmluQXJyYXkgPSBpbkFycmF5O1xuICBIYW1tZXIudW5pcXVlQXJyYXkgPSB1bmlxdWVBcnJheTtcbiAgSGFtbWVyLnNwbGl0U3RyID0gc3BsaXRTdHI7XG4gIEhhbW1lci5ib29sT3JGbiA9IGJvb2xPckZuO1xuICBIYW1tZXIuaGFzUGFyZW50ID0gaGFzUGFyZW50O1xuICBIYW1tZXIuYWRkRXZlbnRMaXN0ZW5lcnMgPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLnJlbW92ZUV2ZW50TGlzdGVuZXJzID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5kZWZhdWx0cyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywge1xuICAgIHByZXNldDogcHJlc2V0XG4gIH0pO1xuICByZXR1cm4gSGFtbWVyO1xufSgpO1xuXG4vLyAgc3R5bGUgbG9hZGVyIGJ1dCBieSBzY3JpcHQgdGFnLCBub3QgYnkgdGhlIGxvYWRlci5cblxudmFyIGRlZmF1bHRzJDEgPSBIYW1tZXIuZGVmYXVsdHM7XG5cbmV4cG9ydCBkZWZhdWx0IEhhbW1lcjtcbmV4cG9ydCB7IElOUFVUX1NUQVJULCBJTlBVVF9NT1ZFLCBJTlBVVF9FTkQsIElOUFVUX0NBTkNFTCwgU1RBVEVfUE9TU0lCTEUsIFNUQVRFX0JFR0FOLCBTVEFURV9DSEFOR0VELCBTVEFURV9FTkRFRCwgU1RBVEVfUkVDT0dOSVpFRCwgU1RBVEVfQ0FOQ0VMTEVELCBTVEFURV9GQUlMRUQsIERJUkVDVElPTl9OT05FLCBESVJFQ1RJT05fTEVGVCwgRElSRUNUSU9OX1JJR0hULCBESVJFQ1RJT05fVVAsIERJUkVDVElPTl9ET1dOLCBESVJFQ1RJT05fSE9SSVpPTlRBTCwgRElSRUNUSU9OX1ZFUlRJQ0FMLCBESVJFQ1RJT05fQUxMLCBNYW5hZ2VyLCBJbnB1dCwgVG91Y2hBY3Rpb24sIFRvdWNoSW5wdXQsIE1vdXNlSW5wdXQsIFBvaW50ZXJFdmVudElucHV0LCBUb3VjaE1vdXNlSW5wdXQsIFNpbmdsZVRvdWNoSW5wdXQsIFJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCBUYXBSZWNvZ25pemVyIGFzIFRhcCwgUGFuUmVjb2duaXplciBhcyBQYW4sIFN3aXBlUmVjb2duaXplciBhcyBTd2lwZSwgUGluY2hSZWNvZ25pemVyIGFzIFBpbmNoLCBSb3RhdGVSZWNvZ25pemVyIGFzIFJvdGF0ZSwgUHJlc3NSZWNvZ25pemVyIGFzIFByZXNzLCBhZGRFdmVudExpc3RlbmVycyBhcyBvbiwgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMgYXMgb2ZmLCBlYWNoLCBtZXJnZSwgZXh0ZW5kLCBhc3NpZ24kMSBhcyBhc3NpZ24sIGluaGVyaXQsIGJpbmRGbiwgcHJlZml4ZWQsIHRvQXJyYXksIGluQXJyYXksIHVuaXF1ZUFycmF5LCBzcGxpdFN0ciwgYm9vbE9yRm4sIGhhc1BhcmVudCwgYWRkRXZlbnRMaXN0ZW5lcnMsIHJlbW92ZUV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0cyQxIGFzIGRlZmF1bHRzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW1tZXIuZXNtLmpzLm1hcFxuIiwgIi8qKlxuICogdmlzLXV0aWxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqcy92aXMtdXRpbFxuICpcbiAqIHV0aWxpdGllIGNvbGxlY3Rpb24gZm9yIHZpc2pzXG4gKlxuICogQHZlcnNpb24gNS4wLjdcbiAqIEBkYXRlICAgIDIwMjMtMTEtMjBUMDk6MDY6NTEuMDY3WlxuICpcbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTEtMjAxNyBBbG1lbmRlIEIuViwgaHR0cDovL2FsbWVuZGUuY29tXG4gKiBAY29weXJpZ2h0IChjKSAyMDE3LTIwMTkgdmlzanMgY29udHJpYnV0b3JzLCBodHRwczovL2dpdGh1Yi5jb20vdmlzanNcbiAqXG4gKiBAbGljZW5zZVxuICogdmlzLmpzIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aFxuICpcbiAqICAgMS4gVGhlIEFwYWNoZSAyLjAgTGljZW5zZVxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgIGFuZFxuICpcbiAqICAgMi4gVGhlIE1JVCBMaWNlbnNlXG4gKiAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiB2aXMuanMgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGVpdGhlciBsaWNlbnNlLlxuICovXG5cbmltcG9ydCBFbWl0dGVyIGZyb20gJ2NvbXBvbmVudC1lbWl0dGVyJztcbmltcG9ydCBSZWFsSGFtbWVyIGZyb20gJ0BlZ2pzL2hhbW1lcmpzJztcblxuLyoqXHJcbiAqIFVzZSB0aGlzIHN5bWJvbCB0byBkZWxldGUgcHJvcGVyaWVzIGluIGRlZXBPYmplY3RBc3NpZ24uXHJcbiAqL1xyXG5jb25zdCBERUxFVEUgPSBTeW1ib2woXCJERUxFVEVcIik7XHJcbi8qKlxyXG4gKiBQdXJlIHZlcnNpb24gb2YgZGVlcE9iamVjdEFzc2lnbiwgaXQgZG9lc24ndCBtb2RpZnkgYW55IG9mIGl0J3MgYXJndW1lbnRzLlxyXG4gKlxyXG4gKiBAcGFyYW0gYmFzZSAtIFRoZSBiYXNlIG9iamVjdCB0aGF0IGZ1bGxmaWxzIHRoZSB3aG9sZSBpbnRlcmZhY2UgVC5cclxuICogQHBhcmFtIHVwZGF0ZXMgLSBVcGRhdGVzIHRoYXQgbWF5IGNoYW5nZSBvciBkZWxldGUgcHJvcHMuXHJcbiAqIEByZXR1cm5zIEEgYnJhbmQgbmV3IGluc3RhbmNlIHdpdGggYWxsIHRoZSBzdXBwbGllZCBvYmplY3RzIGRlZXBseSBtZXJnZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwdXJlRGVlcE9iamVjdEFzc2lnbihiYXNlLCAuLi51cGRhdGVzKSB7XHJcbiAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbih7fSwgYmFzZSwgLi4udXBkYXRlcyk7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgdmVyc2lvbiBvZiBvYmplY3QgYXNzaWduIHdpdGggYWRkaXRpb25hbCBkZWxldGluZyBieSB0aGUgREVMRVRFIHN5bWJvbC5cclxuICpcclxuICogQHBhcmFtIHZhbHVlcyAtIE9iamVjdHMgdG8gYmUgZGVlcGx5IG1lcmdlZC5cclxuICogQHJldHVybnMgVGhlIGZpcnN0IG9iamVjdCBmcm9tIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBPYmplY3RBc3NpZ24oLi4udmFsdWVzKSB7XHJcbiAgICBjb25zdCBtZXJnZWQgPSBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKTtcclxuICAgIHN0cmlwRGVsZXRlKG1lcmdlZCk7XHJcbiAgICByZXR1cm4gbWVyZ2VkO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIHZlcnNpb24gb2Ygb2JqZWN0IGFzc2lnbiB3aXRoIGFkZGl0aW9uYWwgZGVsZXRpbmcgYnkgdGhlIERFTEVURSBzeW1ib2wuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoaXMgZG9lc24ndCBzdHJpcCB0aGUgREVMRVRFIHN5bWJvbHMgc28gdGhleSBtYXkgZW5kIHVwIGluIHRoZSBmaW5hbCBvYmplY3QuXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBPYmplY3RzIHRvIGJlIGRlZXBseSBtZXJnZWQuXHJcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBvYmplY3QgZnJvbSB2YWx1ZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKSB7XHJcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KGRlZXBPYmplY3RBc3NpZ24odmFsdWVzWzBdLCB2YWx1ZXNbMV0pLCAuLi52YWx1ZXMuc2xpY2UoMikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYSA9IHZhbHVlc1swXTtcclxuICAgIGNvbnN0IGIgPSB2YWx1ZXNbMV07XHJcbiAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICBhLnNldFRpbWUoYi5nZXRUaW1lKCkpO1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIFJlZmxlY3Qub3duS2V5cyhiKSkge1xyXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGIsIHByb3ApKSA7XHJcbiAgICAgICAgZWxzZSBpZiAoYltwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIGJbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGJbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYVtwcm9wXSkgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeShhW3Byb3BdLCBiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBjbG9uZShiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRGVlcCBjbG9uZSBnaXZlbiBvYmplY3Qgb3IgYXJyYXkuIEluIGNhc2Ugb2YgcHJpbWl0aXZlIHNpbXBseSByZXR1cm4uXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gQW55dGhpbmcuXHJcbiAqIEByZXR1cm5zIERlZXAgY2xvbmVkIG9iamVjdC9hcnJheSBvciB1bmNoYW5nZWQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGNsb25lKGEpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XHJcbiAgICAgICAgcmV0dXJuIGEubWFwKCh2YWx1ZSkgPT4gY2xvbmUodmFsdWUpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBhID09PSBcIm9iamVjdFwiICYmIGEgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGEuZ2V0VGltZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSh7fSwgYSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogU3RyaXAgREVMRVRFIGZyb20gZ2l2ZW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIE9iamVjdCB3aGljaCBtYXkgY29udGFpbiBERUxFVEUgYnV0IHdvbid0IGFmdGVyIHRoaXMgaXMgZXhlY3V0ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBzdHJpcERlbGV0ZShhKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoYSkpIHtcclxuICAgICAgICBpZiAoYVtwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJiBhW3Byb3BdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHN0cmlwRGVsZXRlKGFbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG4vKipcclxuICogU2VlZGFibGUsIGZhc3QgYW5kIHJlYXNvbmFibHkgZ29vZCAobm90IGNyeXB0byBidXQgbW9yZSB0aGFuIG9rYXkgZm9yIG91clxyXG4gKiBuZWVkcykgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIEFkYXB0ZWQgZnJvbSB7QGxpbmsgaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTEwNDI5MTAwNzM2L2h0dHA6Ly9iYWFnb2UuY29tOjgwL2VuL1JhbmRvbU11c2luZ3MvamF2YXNjcmlwdH0uXHJcbiAqIE9yaWdpbmFsIGFsZ29yaXRobSBjcmVhdGVkIGJ5IEpvaGFubmVzIEJhYWfDuGUgXFw8YmFhZ29lXFxAYmFhZ29lLmNvbVxcPiBpbiAyMDEwLlxyXG4gKi9cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIGdlbmVyYXRvciBiYXNlZCBvbiBBbGVhIGJ5IEpvaGFubmVzIEJhYWfDuGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gQWxsIHN1cHBsaWVkIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWQgYXMgYSBzZWVkLiBJbiBjYXNlIG5vdGhpbmdcclxuICogaXMgc3VwcGxpZWQgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWQgdG8gc2VlZCB0aGUgZ2VuZXJhdG9yLlxyXG4gKiBAcmV0dXJucyBBIHJlYWR5IHRvIHVzZSBzZWVkZWQgZ2VuZXJhdG9yLlxyXG4gKi9cclxuZnVuY3Rpb24gQWxlYSguLi5zZWVkKSB7XHJcbiAgICByZXR1cm4gQWxlYUltcGxlbWVudGF0aW9uKHNlZWQubGVuZ3RoID8gc2VlZCA6IFtEYXRlLm5vdygpXSk7XHJcbn1cclxuLyoqXHJcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIFtbQWxlYV1dIHdpdGhvdXQgdXNlciBpbnB1dCB2YWxpZGF0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIFRoZSBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNlZWQgdGhlIGdlbmVyYXRvci5cclxuICogQHJldHVybnMgQSByZWFkeSB0byB1c2Ugc2VlZGVkIGdlbmVyYXRvci5cclxuICovXHJcbmZ1bmN0aW9uIEFsZWFJbXBsZW1lbnRhdGlvbihzZWVkKSB7XHJcbiAgICBsZXQgW3MwLCBzMSwgczJdID0gbWFzaFNlZWQoc2VlZCk7XHJcbiAgICBsZXQgYyA9IDE7XHJcbiAgICBjb25zdCByYW5kb20gPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdCA9IDIwOTE2MzkgKiBzMCArIGMgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxyXG4gICAgICAgIHMwID0gczE7XHJcbiAgICAgICAgczEgPSBzMjtcclxuICAgICAgICByZXR1cm4gKHMyID0gdCAtIChjID0gdCB8IDApKTtcclxuICAgIH07XHJcbiAgICByYW5kb20udWludDMyID0gKCkgPT4gcmFuZG9tKCkgKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgcmFuZG9tLmZyYWN0NTMgPSAoKSA9PiByYW5kb20oKSArICgocmFuZG9tKCkgKiAweDIwMDAwMCkgfCAwKSAqIDEuMTEwMjIzMDI0NjI1MTU2NWUtMTY7IC8vIDJeLTUzXHJcbiAgICByYW5kb20uYWxnb3JpdGhtID0gXCJBbGVhXCI7XHJcbiAgICByYW5kb20uc2VlZCA9IHNlZWQ7XHJcbiAgICByYW5kb20udmVyc2lvbiA9IFwiMC45XCI7XHJcbiAgICByZXR1cm4gcmFuZG9tO1xyXG59XHJcbi8qKlxyXG4gKiBUdXJuIGFyYml0cmFyeSBkYXRhIGludG8gdmFsdWVzIFtbQWxlYUltcGxlbWVudGF0aW9uXV0gY2FuIHVzZSB0byBnZW5lcmF0ZVxyXG4gKiByYW5kb20gbnVtYmVycy5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBBcmJpdHJhcnkgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgc2VlZC5cclxuICogQHJldHVybnMgVGhyZWUgbnVtYmVycyB0byB1c2UgYXMgaW5pdGlhbCB2YWx1ZXMgZm9yIFtbQWxlYUltcGxlbWVudGF0aW9uXV0uXHJcbiAqL1xyXG5mdW5jdGlvbiBtYXNoU2VlZCguLi5zZWVkKSB7XHJcbiAgICBjb25zdCBtYXNoID0gTWFzaCgpO1xyXG4gICAgbGV0IHMwID0gbWFzaChcIiBcIik7XHJcbiAgICBsZXQgczEgPSBtYXNoKFwiIFwiKTtcclxuICAgIGxldCBzMiA9IG1hc2goXCIgXCIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgczAgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczAgPCAwKSB7XHJcbiAgICAgICAgICAgIHMwICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMxIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMxIDwgMCkge1xyXG4gICAgICAgICAgICBzMSArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzMiAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMiA8IDApIHtcclxuICAgICAgICAgICAgczIgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW3MwLCBzMSwgczJdO1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWFzaCBmdW5jdGlvbi5cclxuICpcclxuICogQHJldHVybnMgQSBub25wdXJlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYXJiaXRyYXJ5IFtbTWFzaGFibGVdXSBkYXRhIGFuZCB0dXJuc1xyXG4gKiB0aGVtIGludG8gbnVtYmVycy5cclxuICovXHJcbmZ1bmN0aW9uIE1hc2goKSB7XHJcbiAgICBsZXQgbiA9IDB4ZWZjODI0OWQ7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICBjb25zdCBzdHJpbmcgPSBkYXRhLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbiArPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgbGV0IGggPSAwLjAyNTE5NjAzMjgyNDE2OTM4ICogbjtcclxuICAgICAgICAgICAgbiA9IGggPj4+IDA7XHJcbiAgICAgICAgICAgIGggLT0gbjtcclxuICAgICAgICAgICAgaCAqPSBuO1xyXG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcclxuICAgICAgICAgICAgaCAtPSBuO1xyXG4gICAgICAgICAgICBuICs9IGggKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcclxuICAgIH07XHJcbn1cblxuLyoqXG4gKiBTZXR1cCBhIG1vY2sgaGFtbWVyLmpzIG9iamVjdCwgZm9yIHVuaXQgdGVzdGluZy5cbiAqXG4gKiBJbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3ViZXIvZGVjay5nbC9wdWxsLzY1OFxuICpcbiAqIEByZXR1cm5zIHt7b246IG5vb3AsIG9mZjogbm9vcCwgZGVzdHJveTogbm9vcCwgZW1pdDogbm9vcCwgZ2V0OiBnZXR9fVxuICovXG5mdW5jdGlvbiBoYW1tZXJNb2NrKCkge1xuICBjb25zdCBub29wID0gKCkgPT4ge307XG5cbiAgcmV0dXJuIHtcbiAgICBvbjogbm9vcCxcbiAgICBvZmY6IG5vb3AsXG4gICAgZGVzdHJveTogbm9vcCxcbiAgICBlbWl0OiBub29wLFxuXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0OiBub29wLFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBIYW1tZXIkMSA9XG4gIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IHdpbmRvdy5IYW1tZXIgfHwgUmVhbEhhbW1lclxuICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBoYW1tZXIuanMgaXMgb25seSBhdmFpbGFibGUgaW4gYSBicm93c2VyLCBub3QgaW4gbm9kZS5qcy4gUmVwbGFjaW5nIGl0IHdpdGggYSBtb2NrIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIGhhbW1lck1vY2soKTtcbiAgICAgIH07XG5cbi8qKlxuICogVHVybiBhbiBlbGVtZW50IGludG8gYW4gY2xpY2tUb1VzZSBlbGVtZW50LlxuICogV2hlbiBub3QgYWN0aXZlLCB0aGUgZWxlbWVudCBoYXMgYSB0cmFuc3BhcmVudCBvdmVybGF5LiBXaGVuIHRoZSBvdmVybGF5IGlzXG4gKiBjbGlja2VkLCB0aGUgbW9kZSBpcyBjaGFuZ2VkIHRvIGFjdGl2ZS5cbiAqIFdoZW4gYWN0aXZlLCB0aGUgZWxlbWVudCBpcyBkaXNwbGF5ZWQgd2l0aCBhIGJsdWUgYm9yZGVyIGFyb3VuZCBpdCwgYW5kXG4gKiB0aGUgaW50ZXJhY3RpdmUgY29udGVudHMgb2YgdGhlIGVsZW1lbnQgY2FuIGJlIHVzZWQuIFdoZW4gY2xpY2tlZCBvdXRzaWRlXG4gKiB0aGUgZWxlbWVudCwgdGhlIGVsZW1lbnRzIG1vZGUgaXMgY2hhbmdlZCB0byBpbmFjdGl2ZS5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lclxuICogQGNsYXNzIEFjdGl2YXRvclxuICovXG5mdW5jdGlvbiBBY3RpdmF0b3IkMShjb250YWluZXIpIHtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlID0gW107XG5cbiAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcblxuICB0aGlzLl9kb20gPSB7XG4gICAgY29udGFpbmVyLFxuICAgIG92ZXJsYXk6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gIH07XG5cbiAgdGhpcy5fZG9tLm92ZXJsYXkuY2xhc3NMaXN0LmFkZChcInZpcy1vdmVybGF5XCIpO1xuXG4gIHRoaXMuX2RvbS5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZG9tLm92ZXJsYXkpO1xuICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgdGhpcy5fZG9tLm92ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIH0pO1xuXG4gIGNvbnN0IGhhbW1lciA9IEhhbW1lciQxKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgaGFtbWVyLm9uKFwidGFwXCIsIHRoaXMuX29uVGFwT3ZlcmxheS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgIGhhbW1lci5kZXN0cm95KCk7XG4gICAgLy8gRklYTUU6IGNsZWFuaW5nIHVwIGhhbW1lciBpbnN0YW5jZXMgZG9lc24ndCB3b3JrIChUaW1lbGluZSBub3QgcmVtb3ZlZFxuICAgIC8vIGZyb20gbWVtb3J5KVxuICB9KTtcblxuICAvLyBibG9jayBhbGwgdG91Y2ggZXZlbnRzIChleGNlcHQgdGFwKVxuICBjb25zdCBldmVudHMgPSBbXG4gICAgXCJ0YXBcIixcbiAgICBcImRvdWJsZXRhcFwiLFxuICAgIFwicHJlc3NcIixcbiAgICBcInBpbmNoXCIsXG4gICAgXCJwYW5cIixcbiAgICBcInBhbnN0YXJ0XCIsXG4gICAgXCJwYW5tb3ZlXCIsXG4gICAgXCJwYW5lbmRcIixcbiAgXTtcbiAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgaGFtbWVyLm9uKGV2ZW50LCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBhdHRhY2ggYSBjbGljayBldmVudCB0byB0aGUgd2luZG93LCBpbiBvcmRlciB0byBkZWFjdGl2YXRlIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSB0aGUgdGltZWxpbmVcbiAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LmJvZHkpIHtcbiAgICB0aGlzLl9vbkNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIV9oYXNQYXJlbnQoZXZlbnQudGFyZ2V0LCBjb250YWluZXIpKSB7XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBwcmVwYXJlIGVzY2FwZSBrZXkgbGlzdGVuZXIgZm9yIGRlYWN0aXZhdGluZyB3aGVuIGFjdGl2ZVxuICB0aGlzLl9lc2NMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIFwia2V5XCIgaW4gZXZlbnRcbiAgICAgICAgPyBldmVudC5rZXkgPT09IFwiRXNjYXBlXCJcbiAgICAgICAgOiBldmVudC5rZXlDb2RlID09PSAyNyAvKiB0aGUga2V5Q29kZSBpcyBmb3IgSUUxMSAqL1xuICAgICkge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgfVxuICB9O1xufVxuXG4vLyB0dXJuIGludG8gYW4gZXZlbnQgZW1pdHRlclxuRW1pdHRlcihBY3RpdmF0b3IkMS5wcm90b3R5cGUpO1xuXG4vLyBUaGUgY3VycmVudGx5IGFjdGl2ZSBhY3RpdmF0b3JcbkFjdGl2YXRvciQxLmN1cnJlbnQgPSBudWxsO1xuXG4vKipcbiAqIERlc3Ryb3kgdGhlIGFjdGl2YXRvci4gQ2xlYW5zIHVwIGFsbCBjcmVhdGVkIERPTSBhbmQgZXZlbnQgbGlzdGVuZXJzXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmRlYWN0aXZhdGUoKTtcblxuICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2NsZWFudXBRdWV1ZS5zcGxpY2UoMCkucmV2ZXJzZSgpKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBoaWRkZW4sIGVsZW1lbnQgaXMgZGVjb3JhdGVkIHdpdGggYSBibHVlIHNoYWRvdyBib3JkZXJcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICAvLyB3ZSBhbGxvdyBvbmx5IG9uZSBhY3RpdmUgYWN0aXZhdG9yIGF0IGEgdGltZVxuICBpZiAoQWN0aXZhdG9yJDEuY3VycmVudCkge1xuICAgIEFjdGl2YXRvciQxLmN1cnJlbnQuZGVhY3RpdmF0ZSgpO1xuICB9XG4gIEFjdGl2YXRvciQxLmN1cnJlbnQgPSB0aGlzO1xuXG4gIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgdGhpcy5fZG9tLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ2aXMtYWN0aXZlXCIpO1xuXG4gIHRoaXMuZW1pdChcImNoYW5nZVwiKTtcbiAgdGhpcy5lbWl0KFwiYWN0aXZhdGVcIik7XG5cbiAgLy8gdWdseSBoYWNrOiBiaW5kIEVTQyBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnRzLCBhcyB0aGUgTmV0d29yayByZWJpbmRzIGFsbFxuICAvLyBrZXlib2FyZCBldmVudHMgb24gYSAnY2hhbmdlJyBldmVudFxuICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBkaXNwbGF5ZWQgb24gdG9wIG9mIHRoZSBlbGVtZW50XG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB0aGlzLl9kb20ub3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJ2aXMtYWN0aXZlXCIpO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcblxuICB0aGlzLmVtaXQoXCJjaGFuZ2VcIik7XG4gIHRoaXMuZW1pdChcImRlYWN0aXZhdGVcIik7XG59O1xuXG4vKipcbiAqIEhhbmRsZSBhIHRhcCBldmVudDogYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLl9vblRhcE92ZXJsYXkgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICB0aGlzLmFjdGl2YXRlKCk7XG4gIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIHRoZSByZXF1ZXN0ZWQgcGFyZW50IGVsZW1lbnQgc29tZXdoZXJlIGluXG4gKiBpdHMgY2hhaW4gb2YgcGFyZW50IG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwYXJlbnQgaXMgZm91bmQgc29tZXdoZXJlIGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgIGNoYWluIG9mIHBhcmVudCBub2Rlcy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9oYXNQYXJlbnQoZWxlbWVudCwgcGFyZW50KSB7XG4gIHdoaWxlIChlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyB1dGlsaXR5IGZ1bmN0aW9uc1xyXG4vLyBwYXJzZSBBU1AuTmV0IERhdGUgcGF0dGVybixcclxuLy8gZm9yIGV4YW1wbGUgJy9EYXRlKDExOTg5MDg3MTcwNTYpLycgb3IgJy9EYXRlKDExOTg5MDg3MTcwNTYtMDcwMCkvJ1xyXG4vLyBjb2RlIGZyb20gaHR0cDovL21vbWVudGpzLmNvbS9cclxuY29uc3QgQVNQRGF0ZVJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2k7XHJcbi8vIENvbG9yIFJFc1xyXG5jb25zdCBmdWxsSGV4UkUgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pO1xyXG5jb25zdCBzaG9ydEhleFJFID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcclxuY29uc3QgcmdiUkUgPSAvXnJnYlxcKCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqXFwpJC9pO1xyXG5jb25zdCByZ2JhUkUgPSAvXnJnYmFcXCggKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKihbMDFdfDA/XFwuXFxkKykgKlxcKSQvaTtcclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBudW1iZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBudW1iZXIsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgZXZlcnl0aGluZyBpbiB0aGUgRE9NIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIERPTW9iamVjdCAtIE5vZGUgd2hvc2UgY2hpbGQgbm9kZXMgd2lsbCBiZSByZWN1cnNpdmVseSBkZWxldGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVjdXJzaXZlRE9NRGVsZXRlKERPTW9iamVjdCkge1xyXG4gICAgaWYgKERPTW9iamVjdCkge1xyXG4gICAgICAgIHdoaWxlIChET01vYmplY3QuaGFzQ2hpbGROb2RlcygpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gRE9Nb2JqZWN0LmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlRE9NRGVsZXRlKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIERPTW9iamVjdC5yZW1vdmVDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgb2JqZWN0IChub3QgcHJpbWl0aXZlIG9yIG51bGwpLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgbm90IG51bGwgb2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIERhdGUsIG9yIGEgU3RyaW5nIGNvbnRhaW5pbmcgYSBEYXRlLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgRGF0ZSBpbnN0YW5jZSBvciBzdHJpbmcgZGF0ZSByZXByZXNlbnRhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAvLyB0ZXN0IHdoZXRoZXIgdGhpcyBzdHJpbmcgY29udGFpbnMgYSBkYXRlXHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBBU1BEYXRlUmVnZXguZXhlYyh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG4vKipcclxuICogQ29weSBwcm9wZXJ0eSBmcm9tIGIgdG8gYSBpZiBwcm9wZXJ0eSBwcmVzZW50IGluIGEuXHJcbiAqIElmIHByb3BlcnR5IGluIGIgZXhwbGljaXRseSBzZXQgdG8gbnVsbCwgZGVsZXRlIGl0IGlmIGBhbGxvd0RlbGV0aW9uYCBzZXQuXHJcbiAqXHJcbiAqIEludGVybmFsIGhlbHBlciByb3V0aW5lLCBzaG91bGQgbm90IGJlIGV4cG9ydGVkLiBOb3QgYWRkZWQgdG8gYGV4cG9ydHNgIGZvciB0aGF0IHJlYXNvbi5cclxuICpcclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBwcm9wIC0gTmFtZSBvZiBwcm9wZXJ0eSB0byBjb3B5IGZyb20gYiB0byBhLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKSB7XHJcbiAgICBsZXQgZG9EZWxldGlvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUpIHtcclxuICAgICAgICBkb0RlbGV0aW9uID0gYltwcm9wXSA9PT0gbnVsbCAmJiBhW3Byb3BdICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoZG9EZWxldGlvbikge1xyXG4gICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF07IC8vIFJlbWVtYmVyLCB0aGlzIGlzIGEgcmVmZXJlbmNlIGNvcHkhXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEZpbGwgYW4gb2JqZWN0IHdpdGggYSBwb3NzaWJseSBwYXJ0aWFsbHkgZGVmaW5lZCBvdGhlciBvYmplY3QuXHJcbiAqXHJcbiAqIE9ubHkgY29waWVzIHZhbHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgYWxyZWFkeSBwcmVzZW50IGluIGEuXHJcbiAqIFRoYXQgbWVhbnMgYW4gb2JqZWN0IGlzIG5vdCBjcmVhdGVkIG9uIGEgcHJvcGVydHkgaWYgb25seSB0aGUgYiBvYmplY3QgaGFzIGl0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBvYmplY3QgdGhhdCB3aWxsIGhhdmUgaXQncyBwcm9wZXJ0aWVzIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSBiIC0gVGhlIG9iamVjdCB3aXRoIHByb3BlcnR5IHVwZGF0ZXMuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnRpZXMgaW4gYSB0aGF0IGFyZSBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqL1xyXG5mdW5jdGlvbiBmaWxsSWZEZWZpbmVkKGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gTk9URTogaXRlcmF0aW9uIG9mIHByb3BlcnRpZXMgb2YgYVxyXG4gICAgLy8gTk9URTogcHJvdG90eXBlIHByb3BlcnRpZXMgaXRlcmF0ZWQgb3ZlciBhcyB3ZWxsXHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYSkge1xyXG4gICAgICAgIGlmIChiW3Byb3BdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGJbcHJvcF0gPT09IG51bGwgfHwgdHlwZW9mIGJbcHJvcF0gIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIE5vdGU6IHR5cGVvZiBudWxsID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYVByb3AgPSBhW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYlByb3AgPSBiW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGFQcm9wKSAmJiBpc09iamVjdChiUHJvcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsSWZEZWZpbmVkKGFQcm9wLCBiUHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhXHJcbiAqIHRhcmdldCBvYmplY3QuIFJldHVybnMgdGhlIHRhcmdldCBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBjb3B5IHRvLlxyXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXHJcbiAqIEByZXR1cm5zIFRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gKi9cclxuY29uc3QgZXh0ZW5kID0gT2JqZWN0LmFzc2lnbjtcclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIgb3IgYSBzZXJpZXMgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHJlbWFya3NcclxuICogT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZCB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICogQHBhcmFtIHByb3BzIC0gUHJvcGVydGllcyB0byBiZSBjb3BpZWQgdG8gYS5cclxuICogQHBhcmFtIGEgLSBUaGUgdGFyZ2V0LlxyXG4gKiBAcGFyYW0gb3RoZXJzIC0gVGhlIHNvdXJjZXMuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVFeHRlbmQocHJvcHMsIGEsIC4uLm90aGVycykge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFycmF5IHdpdGggcHJvcGVydHkgbmFtZXMgZXhwZWN0ZWQgYXMgZmlyc3QgYXJndW1lbnRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG90aGVyIG9mIG90aGVycykge1xyXG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW3BdO1xyXG4gICAgICAgICAgICBpZiAob3RoZXIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBwcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IG90aGVyW3Byb3BdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWQgdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyByb3V0aW5lIGltcGxpZWQgdGhhdCBtdWx0aXBsZSBzb3VyY2Ugb2JqZWN0cyBjb3VsZFxyXG4gKiBiZSB1c2VkOyBob3dldmVyLCB0aGUgaW1wbGVtZW50YXRpb24gd2FzICoqd3JvbmcqKi4gU2luY2UgbXVsdGlwbGUgKFxcPjEpXHJcbiAqIHNvdXJjZXMgd2VyZW4ndCB1c2VkIGFueXdoZXJlIGluIHRoZSBgdmlzLmpzYCBjb2RlLCB0aGlzIGhhcyBiZWVuIHJlbW92ZWRcclxuICogQHBhcmFtIHByb3BzIC0gTmFtZXMgb2YgZmlyc3QtbGV2ZWwgcHJvcGVydGllcyB0byBjb3B5IG92ZXIuXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZURlZXBFeHRlbmQocHJvcHMsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbcF07XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSkge1xyXG4gICAgICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBmYWxzZSwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYGFgIHdpdGggcHJvcGVydGllcyBvZiBvYmplY3QgYGJgLCBpZ25vcmluZyBwcm9wZXJ0aWVzIHdoaWNoXHJcbiAqIGFyZSBleHBsaWNpdGx5IHNwZWNpZmllZCB0byBiZSBleGNsdWRlZC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhlIHByb3BlcnRpZXMgb2YgYGJgIGFyZSBjb25zaWRlcmVkIGZvciBjb3B5aW5nLiBQcm9wZXJ0aWVzIHdoaWNoIGFyZVxyXG4gKiB0aGVtc2VsdmVzIG9iamVjdHMgYXJlIGFyZSBhbHNvIGV4dGVuZGVkLiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkXHJcbiAqIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKiBAcGFyYW0gcHJvcHNUb0V4Y2x1ZGUgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHdoaWNoIHNob3VsZCAqbm90KiBiZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBhIC0gT2JqZWN0IHRvIGV4dGVuZC5cclxuICogQHBhcmFtIGIgLSBPYmplY3QgdG8gdGFrZSBwcm9wZXJ0aWVzIGZyb20gZm9yIGV4dGVuc2lvbi5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydGllcyBpbiBhIHRoYXQgYXJlIGV4cGxpY2l0bHlcclxuICogc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQocHJvcHNUb0V4Y2x1ZGUsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICAvLyBOT1RFOiBhcnJheSBwcm9wZXJ0aWVzIGhhdmUgYW4gZWxzZS1iZWxvdzsgYXBwYXJlbnRseSwgdGhlcmUgaXMgYSBwcm9ibGVtIGhlcmUuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBiKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSAvLyBIYW5kbGUgbG9jYWwgcHJvcGVydGllcyBvbmx5XHJcbiAgICAgICAgaWYgKHByb3BzVG9FeGNsdWRlLmluY2x1ZGVzKHByb3ApKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH0gLy8gSW4gZXhjbHVzaW9uIGxpc3QsIHNraXBcclxuICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYltwcm9wXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXS5wdXNoKGJbcHJvcF1baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgZXh0ZW5kIGFuIG9iamVjdCBhIHdpdGggdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gcHJvdG9FeHRlbmQgLSBJZiB0cnVlLCB0aGUgcHJvdG90eXBlIHZhbHVlcyB3aWxsIGFsc28gYmUgZXh0ZW5kZWQuXHJcbiAqIChUaGF0IGlzIHRoZSBvcHRpb25zIG9iamVjdHMgdGhhdCBpbmhlcml0IGZyb20gb3RoZXJzIHdpbGwgYWxzbyBnZXQgdGhlXHJcbiAqIGluaGVyaXRlZCBvcHRpb25zKS5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCB0aGUgdmFsdWVzIG9mIGZpZWxkcyB0aGF0IGFyZSBudWxsIHdpbGwgYmUgZGVsZXRlZC5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBFeHRlbmQoYSwgYiwgcHJvdG9FeHRlbmQgPSBmYWxzZSwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYikge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkgfHwgcHJvdG9FeHRlbmQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICAgICBiW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYltwcm9wXSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0gZGVlcEV4dGVuZCh7fSwgYltwcm9wXSwgcHJvdG9FeHRlbmQpOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFbcHJvcF0pID09PSBPYmplY3QucHJvdG90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBwcm90b0V4dGVuZCk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF0uc2xpY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgYWxsIGVsZW1lbnRzIGluIHR3byBhcnJheXMgYXJlIGVxdWFsLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIEZpcnN0IGFycmF5LlxyXG4gKiBAcGFyYW0gYiAtIFNlY29uZCBhcnJheS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBib3RoIGFycmF5cyBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2FtZSBlbGVtZW50cyAoMSA9ICcxJykuXHJcbiAqL1xyXG5mdW5jdGlvbiBlcXVhbEFycmF5KGEsIGIpIHtcclxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBHZXQgdGhlIHR5cGUgb2YgYW4gb2JqZWN0LCBmb3IgZXhhbXBsZSBleHBvcnRzLmdldFR5cGUoW10pIHJldHVybnMgJ0FycmF5Jy5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgRGV0ZWN0ZWQgdHlwZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFR5cGUob2JqZWN0KSB7XHJcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcclxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJTdHJpbmdcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJBcnJheVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJEYXRlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIk9iamVjdFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiU3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZTtcclxufVxyXG4vKipcclxuICogVXNlZCB0byBleHRlbmQgYW4gYXJyYXkgYW5kIGNvcHkgaXQuIFRoaXMgaXMgdXNlZCB0byBwcm9wYWdhdGUgcGF0aHMgcmVjdXJzaXZlbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcnIgLSBGaXJzdCBwYXJ0LlxyXG4gKiBAcGFyYW0gbmV3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgYWFkZGVkIGludG8gdGhlIGFycmF5LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBhcnJheSB3aXRoIGFsbCBpdGVtcyBmcm9tIGFyciBhbmQgbmV3VmFsdWUgKHdoaWNoIGlzIGxhc3QpLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weUFuZEV4dGVuZEFycmF5KGFyciwgbmV3VmFsdWUpIHtcclxuICAgIHJldHVybiBbLi4uYXJyLCBuZXdWYWx1ZV07XHJcbn1cclxuLyoqXHJcbiAqIFVzZWQgdG8gZXh0ZW5kIGFuIGFycmF5IGFuZCBjb3B5IGl0LiBUaGlzIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHBhdGhzIHJlY3Vyc2l2ZWx5LlxyXG4gKlxyXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIGJlIGNvcGllZC5cclxuICogQHJldHVybnMgU2hhbGxvdyBjb3B5IG9mIGFyci5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlBcnJheShhcnIpIHtcclxuICAgIHJldHVybiBhcnIuc2xpY2UoKTtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIGxlZnQgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIGxlZnQgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZUxlZnQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIHJpZ2h0IHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSByaWdodCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlUmlnaHQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSB0b3AgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHRvcCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlVG9wKGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxufVxyXG4vKipcclxuICogQWRkIGEgY2xhc3NOYW1lIHRvIHRoZSBnaXZlbiBlbGVtZW50cyBzdHlsZS5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIGFkZGVkLlxyXG4gKiBAcGFyYW0gY2xhc3NOYW1lcyAtIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lcykge1xyXG4gICAgbGV0IGNsYXNzZXMgPSBlbGVtLmNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBuZXdDbGFzc2VzID0gY2xhc3NOYW1lcy5zcGxpdChcIiBcIik7XHJcbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5jb25jYXQobmV3Q2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhY2xhc3Nlcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xyXG4gICAgfSkpO1xyXG4gICAgZWxlbS5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oXCIgXCIpO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgYSBjbGFzc05hbWUgZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudHMgc3R5bGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjbGFzc05hbWVzIC0gU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNsYXNzTmFtZShlbGVtLCBjbGFzc05hbWVzKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9IGVsZW0uY2xhc3NOYW1lLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IG9sZENsYXNzZXMgPSBjbGFzc05hbWVzLnNwbGl0KFwiIFwiKTtcclxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICFvbGRDbGFzc2VzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XHJcbiAgICB9KTtcclxuICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcclxufVxyXG4vKipcclxuICogRm9yIGVhY2ggbWV0aG9kIGZvciBib3RoIGFycmF5cyBhbmQgb2JqZWN0cy5cclxuICogSW4gY2FzZSBvZiBhbiBhcnJheSwgdGhlIGJ1aWx0LWluIEFycmF5LmZvckVhY2goKSBpcyBhcHBsaWVkICgqKk5vLCBpdCdzIG5vdCEqKikuXHJcbiAqIEluIGNhc2Ugb2YgYW4gT2JqZWN0LCB0aGUgbWV0aG9kIGxvb3BzIG92ZXIgYWxsIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIEFuIE9iamVjdCBvciBBcnJheSB0byBiZSBpdGVyYXRlZCBvdmVyLlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBBcnJheS5mb3JFYWNoLWxpa2UgY2FsbGJhY2suXHJcbiAqL1xyXG5mdW5jdGlvbiBmb3JFYWNoKG9iamVjdCwgY2FsbGJhY2spIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcclxuICAgICAgICAvLyBhcnJheVxyXG4gICAgICAgIGNvbnN0IGxlbiA9IG9iamVjdC5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhvYmplY3RbaV0sIGksIG9iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gb2JqZWN0XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGFuIGFycmF5OiBhbGwgb2JqZWN0cyBwcm9wZXJ0aWVzIGFyZSBwdXQgaW50byB0aGUgYXJyYXkuIFRoZSByZXN1bHRpbmcgYXJyYXkgaXMgdW5vcmRlcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbyAtIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxyXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bm9yZGVyZWQgdmFsdWVzLlxyXG4gKi9cclxuY29uc3QgdG9BcnJheSA9IE9iamVjdC52YWx1ZXM7XHJcbi8qKlxyXG4gKiBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IHdpbGwgYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIGtleSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUgdG8gYmUgYXNzaWduZWQuXHJcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIHdhcyB1cGRhdGVkICh0cnVlKSBvciBhbHJlYWR5IHN0cmljdGx5IHRoZSBzYW1lIGluIHRoZSBvcmlnaW5hbCBvYmplY3QgKGZhbHNlKS5cclxuICovXHJcbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5KG9iamVjdCwga2V5LCB2YWx1ZSkge1xyXG4gICAgaWYgKG9iamVjdFtrZXldICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRocm90dGxlIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBiZSBvbmx5IGV4ZWN1dGVkIG9uY2UgcGVyIGFuaW1hdGlvbiBmcmFtZS5cclxuICpcclxuICogQHBhcmFtIGZuIC0gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxyXG4gKiBAcmV0dXJucyBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uLlxyXG4gKi9cclxuZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcclxuICAgIGxldCBzY2hlZHVsZWQgPSBmYWxzZTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzY2hlZHVsZWQpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm4oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ2FuY2VscyB0aGUgZXZlbnQncyBkZWZhdWx0IGFjdGlvbiBpZiBpdCBpcyBjYW5jZWxhYmxlLCB3aXRob3V0IHN0b3BwaW5nIGZ1cnRoZXIgcHJvcGFnYXRpb24gb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgd2hvc2UgZGVmYXVsdCBhY3Rpb24gc2hvdWxkIGJlIHByZXZlbnRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7XHJcbiAgICB9XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIG5vbi1JRSBicm93c2Vyc1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEdldCBIVE1MIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudC5cclxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgb3IgbnVsbCBpZiBub3Qgb2J0YWluYWJsZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFRhcmdldChldmVudCA9IHdpbmRvdy5ldmVudCkge1xyXG4gICAgLy8gY29kZSBmcm9tIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxyXG4gICAgLy8gQFRPRE86IEV2ZW50VGFyZ2V0IGNhbiBiZSBhbG1vc3QgYW55dGhpbmcsIGlzIGl0IG9rYXkgdG8gcmV0dXJuIG9ubHkgRWxlbWVudHM/XHJcbiAgICBsZXQgdGFyZ2V0ID0gbnVsbDtcclxuICAgIGlmICghZXZlbnQpIDtcclxuICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LnNyY0VsZW1lbnQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC5zcmNFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQubm9kZVR5cGUgIT0gbnVsbCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykge1xyXG4gICAgICAgIC8vIGRlZmVhdCBTYWZhcmkgYnVnXHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG4vKipcclxuICogQ2hlY2sgaWYgZ2l2ZW4gZWxlbWVudCBjb250YWlucyBnaXZlbiBwYXJlbnQgc29tZXdoZXJlIGluIHRoZSBET00gdHJlZS5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiZSB0ZXN0ZWQuXHJcbiAqIEBwYXJhbSBwYXJlbnQgLSBUaGUgYW5jZXN0b3IgKG5vdCBuZWNlc3NhcmlseSBwYXJlbnQpIG9mIHRoZSBlbGVtZW50LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHBhcmVudCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgZWxlbWVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xyXG4gICAgbGV0IGVsZW0gPSBlbGVtZW50O1xyXG4gICAgd2hpbGUgKGVsZW0pIHtcclxuICAgICAgICBpZiAoZWxlbSA9PT0gcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgZWxlbSA9IGVsZW0ucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9ib29sZWFuLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nIGJvb2xlYW4gdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzQm9vbGVhbih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgbnVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvbnVtYmVyLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nICoqYm94ZWQqKiBudW1iZXIgdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzTnVtYmVyKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIHN0cmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3N0cmluZywgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogc3RyaW5nIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1N0cmluZyh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvc2l6ZSwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUgKG51bWJlciArICdweCcpLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1NpemUodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBET00gRWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50byBET00gRWxlbWVudCwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIERPTSBFbGVtZW50LCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0VsZW1lbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxufTtcclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MjM4MzgvcmdiLXRvLWhleC1hbmQtaGV4LXRvLXJnYn1cclxuICogQHBhcmFtIGhleCAtIEhleCBjb2xvciBzdHJpbmcgKDMgb3IgNiBkaWdpdHMsIHdpdGggb3Igd2l0aG91dCAjKS5cclxuICogQHJldHVybnMgUkdCIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvUkdCKGhleCkge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIHN3aXRjaCAoaGV4Lmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHNob3J0SGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0gKyByZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0gKyByZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10gKyByZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBmdWxsSGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBzdHJpbmcgY29sb3IgaW4gaGV4IG9yIFJHQiBmb3JtYXQgYW5kIGFkZHMgdGhlIG9wYWNpdHksIFJHQkEgaXMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLlxyXG4gKlxyXG4gKiBAcGFyYW0gY29sb3IgLSBUaGUgY29sb3Igc3RyaW5nIChoZXgsIFJHQiwgUkdCQSkuXHJcbiAqIEBwYXJhbSBvcGFjaXR5IC0gVGhlIG5ldyBvcGFjaXR5LlxyXG4gKiBAcmV0dXJucyBSR0JBIHN0cmluZywgZm9yIGV4YW1wbGUgJ3JnYmEoMjU1LCAwLCAxMjcsIDAuMyknLlxyXG4gKi9cclxuZnVuY3Rpb24gb3ZlcnJpZGVPcGFjaXR5KGNvbG9yLCBvcGFjaXR5KSB7XHJcbiAgICBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JhXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JcIikpIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBjb2xvclxyXG4gICAgICAgICAgICAuc3Vic3RyKGNvbG9yLmluZGV4T2YoXCIoXCIpICsgMSlcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgICAgIC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYlswXSArIFwiLFwiICsgcmdiWzFdICsgXCIsXCIgKyByZ2JbMl0gKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJnYiA9IGhleFRvUkdCKGNvbG9yKTtcclxuICAgICAgICBpZiAocmdiID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYi5yICsgXCIsXCIgKyByZ2IuZyArIFwiLFwiICsgcmdiLmIgKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcgKGZvciBleGFtcGxlOiAnIzBhY2RjMCcpLlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IZXgocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmV0dXJuIChcIiNcIiArICgoMSA8PCAyNCkgKyAocmVkIDw8IDE2KSArIChncmVlbiA8PCA4KSArIGJsdWUpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XHJcbn1cclxuLyoqXHJcbiAqIFBhcnNlIGEgY29sb3IgcHJvcGVydHkgaW50byBhbiBvYmplY3Qgd2l0aCBib3JkZXIsIGJhY2tncm91bmQsIGFuZCBoaWdobGlnaHQgY29sb3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5wdXRDb2xvciAtIFNob3J0aGFuZCBjb2xvciBzdHJpbmcgb3IgaW5wdXQgY29sb3Igb2JqZWN0LlxyXG4gKiBAcGFyYW0gZGVmYXVsdENvbG9yIC0gRnVsbCBjb2xvciBvYmplY3QgdG8gZmlsbCBpbiBtaXNzaW5nIHZhbHVlcyBpbiBpbnB1dENvbG9yLlxyXG4gKiBAcmV0dXJucyBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0Q29sb3IsIGRlZmF1bHRDb2xvcikge1xyXG4gICAgaWYgKGlzU3RyaW5nKGlucHV0Q29sb3IpKSB7XHJcbiAgICAgICAgbGV0IGNvbG9yU3RyID0gaW5wdXRDb2xvcjtcclxuICAgICAgICBpZiAoaXNWYWxpZFJHQihjb2xvclN0cikpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiID0gY29sb3JTdHJcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoNClcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3JTdHIubGVuZ3RoIC0gNSlcclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIixcIilcclxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29sb3JTdHIgPSBSR0JUb0hleChyZ2JbMF0sIHJnYlsxXSwgcmdiWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVmFsaWRIZXgoY29sb3JTdHIpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzdiA9IGhleFRvSFNWKGNvbG9yU3RyKTtcclxuICAgICAgICAgICAgY29uc3QgbGlnaHRlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBoc3YucyAqIDAuOCxcclxuICAgICAgICAgICAgICAgIHY6IE1hdGgubWluKDEsIGhzdi52ICogMS4wMiksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBNYXRoLm1pbigxLCBoc3YucyAqIDEuMjUpLFxyXG4gICAgICAgICAgICAgICAgdjogaHN2LnYgKiAwLjgsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySGV4ID0gSFNWVG9IZXgoZGFya2VyQ29sb3JIU1YuaCwgZGFya2VyQ29sb3JIU1YucywgZGFya2VyQ29sb3JIU1Yudik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhleCA9IEhTVlRvSGV4KGxpZ2h0ZXJDb2xvckhTVi5oLCBsaWdodGVyQ29sb3JIU1YucywgbGlnaHRlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBob3Zlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChkZWZhdWx0Q29sb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgZGVmYXVsdENvbG9yLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IGRlZmF1bHRDb2xvci5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5ob3ZlciAmJiBpbnB1dENvbG9yLmhvdmVyLmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuYmFja2dyb3VuZCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogaXNTdHJpbmcoaW5wdXRDb2xvci5oaWdobGlnaHQpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcikgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBSR0IgXFw8MCwgMjU1XFw+IGludG8gSFNWIG9iamVjdC5cclxuICpcclxuICogQHJlbWFya3NcclxuICoge0BsaW5rIGh0dHA6Ly93d3cuamF2YXNjcmlwdGVyLm5ldC9mYXEvcmdiMmhzdi5odG19XHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhTViBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBSR0JUb0hTVihyZWQsIGdyZWVuLCBibHVlKSB7XHJcbiAgICByZWQgPSByZWQgLyAyNTU7XHJcbiAgICBncmVlbiA9IGdyZWVuIC8gMjU1O1xyXG4gICAgYmx1ZSA9IGJsdWUgLyAyNTU7XHJcbiAgICBjb25zdCBtaW5SR0IgPSBNYXRoLm1pbihyZWQsIE1hdGgubWluKGdyZWVuLCBibHVlKSk7XHJcbiAgICBjb25zdCBtYXhSR0IgPSBNYXRoLm1heChyZWQsIE1hdGgubWF4KGdyZWVuLCBibHVlKSk7XHJcbiAgICAvLyBCbGFjay1ncmF5LXdoaXRlXHJcbiAgICBpZiAobWluUkdCID09PSBtYXhSR0IpIHtcclxuICAgICAgICByZXR1cm4geyBoOiAwLCBzOiAwLCB2OiBtaW5SR0IgfTtcclxuICAgIH1cclxuICAgIC8vIENvbG9ycyBvdGhlciB0aGFuIGJsYWNrLWdyYXktd2hpdGU6XHJcbiAgICBjb25zdCBkID0gcmVkID09PSBtaW5SR0IgPyBncmVlbiAtIGJsdWUgOiBibHVlID09PSBtaW5SR0IgPyByZWQgLSBncmVlbiA6IGJsdWUgLSByZWQ7XHJcbiAgICBjb25zdCBoID0gcmVkID09PSBtaW5SR0IgPyAzIDogYmx1ZSA9PT0gbWluUkdCID8gMSA6IDU7XHJcbiAgICBjb25zdCBodWUgPSAoNjAgKiAoaCAtIGQgLyAobWF4UkdCIC0gbWluUkdCKSkpIC8gMzYwO1xyXG4gICAgY29uc3Qgc2F0dXJhdGlvbiA9IChtYXhSR0IgLSBtaW5SR0IpIC8gbWF4UkdCO1xyXG4gICAgY29uc3QgdmFsdWUgPSBtYXhSR0I7XHJcbiAgICByZXR1cm4geyBoOiBodWUsIHM6IHNhdHVyYXRpb24sIHY6IHZhbHVlIH07XHJcbn1cclxuLyoqXHJcbiAqIFNwbGl0IGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBpbnRvIGFuIG9iamVjdCB3aXRoIGtleS92YWx1ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gQ1NTIHNvdXJjZSBjb2RlIHRvIHNwbGl0IGludG8ga2V5L3ZhbHVlIG9iamVjdC5cclxuICogQHJldHVybnMgS2V5L3ZhbHVlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHtAbGluayBjc3NUZXh0fS5cclxuICovXHJcbmZ1bmN0aW9uIHNwbGl0Q1NTVGV4dChjc3NUZXh0KSB7XHJcbiAgICBjb25zdCB0bXBFbGxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBjb25zdCBzdHlsZXMgPSB7fTtcclxuICAgIHRtcEVsbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bXBFbGxlbWVudC5zdHlsZS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIHN0eWxlc1t0bXBFbGxlbWVudC5zdHlsZVtpXV0gPSB0bXBFbGxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRtcEVsbGVtZW50LnN0eWxlW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZXM7XHJcbn1cclxuLyoqXHJcbiAqIEFwcGVuZCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgdG8gYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0aGF0IHdpbGwgcmVjZWl2ZSBuZXcgc3R5bGVzLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgYXBwZW5kZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDc3NUZXh0KGVsZW1lbnQsIGNzc1RleHQpIHtcclxuICAgIGNvbnN0IGNzc1N0eWxlID0gc3BsaXRDU1NUZXh0KGNzc1RleHQpO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3NzU3R5bGUpKSB7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCBzdHlsZXMgc2hvdWxkIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gVGhlIHN0eWxlcyB0byBiZSByZW1vdmVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tamlqYWNrc29uLzUzMTEyNTZ9XHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb1JHQihoLCBzLCB2KSB7XHJcbiAgICBsZXQgcjtcclxuICAgIGxldCBnO1xyXG4gICAgbGV0IGI7XHJcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihoICogNik7XHJcbiAgICBjb25zdCBmID0gaCAqIDYgLSBpO1xyXG4gICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xyXG4gICAgY29uc3QgcSA9IHYgKiAoMSAtIGYgKiBzKTtcclxuICAgIGNvbnN0IHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyk7XHJcbiAgICBzd2l0Y2ggKGkgJSA2KSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAociA9IHYpLCAoZyA9IHQpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIChyID0gcSksIChnID0gdiksIChiID0gcCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSB2KSwgKGIgPSB0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAociA9IHApLCAoZyA9IHEpLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIChyID0gdCksIChnID0gcCksIChiID0gdik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSBwKSwgKGIgPSBxKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHI6IE1hdGguZmxvb3IociAqIDI1NSksXHJcbiAgICAgICAgZzogTWF0aC5mbG9vcihnICogMjU1KSxcclxuICAgICAgICBiOiBNYXRoLmZsb29yKGIgKiAyNTUpLFxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb0hleChoLCBzLCB2KSB7XHJcbiAgICBjb25zdCByZ2IgPSBIU1ZUb1JHQihoLCBzLCB2KTtcclxuICAgIHJldHVybiBSR0JUb0hleChyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBoZXggY29sb3Igc3RyaW5nIGludG8gSFNWIFxcPDAsIDFcXD4uXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gaGV4VG9IU1YoaGV4KSB7XHJcbiAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihoZXgpO1xyXG4gICAgaWYgKCFyZ2IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHtoZXh9JyBpcyBub3QgYSB2YWxpZCBjb2xvci5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSR0JUb0hTVihyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgaGV4IGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIGhleCAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkSGV4KGhleCkge1xyXG4gICAgY29uc3QgaXNPayA9IC8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KGhleCk7XHJcbiAgICByZXR1cm4gaXNPaztcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCIGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHJnYiAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCKHJnYikge1xyXG4gICAgcmV0dXJuIHJnYlJFLnRlc3QocmdiKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCQSBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2JhIC0gVW5rbm93biBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiBhIGNvbG9yLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzVmFsaWRSR0JBKHJnYmEpIHtcclxuICAgIHJldHVybiByZ2JhUkUudGVzdChyZ2JhKTtcclxufVxyXG4vKipcclxuICogVGhpcyByZWN1cnNpdmVseSByZWRpcmVjdHMgdGhlIHByb3RvdHlwZSBvZiBKU09OIG9iamVjdHMgdG8gdGhlIHJlZmVyZW5jZU9iamVjdC5cclxuICogVGhpcyBpcyB1c2VkIGZvciBkZWZhdWx0IG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWVsZHMgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHRvIGJlIGJyaWRnZWQuXHJcbiAqIEBwYXJhbSByZWZlcmVuY2VPYmplY3QgLSBUaGUgb3JpZ2luYWwgb2JqZWN0LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVCcmlkZ2VPYmplY3QoZmllbGRzLCByZWZlcmVuY2VPYmplY3QpIHtcclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIHJlZmVyZW5jZU9iamVjdCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIC8vICEhISB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICBjb25zdCBvYmplY3RUbyA9IE9iamVjdC5jcmVhdGUocmVmZXJlbmNlT2JqZWN0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZmVyZW5jZU9iamVjdCwgZmllbGRzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0VG9bZmllbGRzW2ldXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFRvO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgVGhlIEVsZW1lbnQgaWYgdGhlIHJlZmVyZW5jZU9iamVjdCBpcyBhbiBFbGVtZW50LCBvciBhIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiByZWZlcmVuY2VPYmplY3QgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KSB7XHJcbiAgICAgICAgLy8gQXZvaWQgYnJpZGdpbmcgRE9NIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlT2JqZWN0O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGkpKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ldID09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFRvW2ldID0gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0VG87XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgc3RhYmxlIHNvcnQgaW1wbGVtZW50YXRpb24sIHZlcnkgZmFzdCBmb3IgcHJlc29ydGVkIGRhdGEuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIGFycmF5IHRvIGJlIHNvcnRlZCAoaW4tcGxhY2UpLlxyXG4gKiBAcGFyYW0gY29tcGFyZSAtIEFuIG9yZGVyIGNvbXBhcmF0b3IuXHJcbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gaW5zZXJ0U29ydChhLCBjb21wYXJlKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBrID0gYVtpXTtcclxuICAgICAgICBsZXQgajtcclxuICAgICAgICBmb3IgKGogPSBpOyBqID4gMCAmJiBjb21wYXJlKGssIGFbaiAtIDFdKSA8IDA7IGotLSkge1xyXG4gICAgICAgICAgICBhW2pdID0gYVtqIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFbal0gPSBrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIG9wdGlvbnMgb2Ygc3Vib2JqZWN0cyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXHJcbiAqXHJcbiAqIEEgcmVxdWlyZW1lbnQgb2YgdGhlc2Ugc3Vib2JqZWN0cyBpcyB0aGF0IHRoZXkgaGF2ZSBhbiAnZW5hYmxlZCcgZWxlbWVudFxyXG4gKiB3aGljaCBpcyBvcHRpb25hbCBmb3IgdGhlIHVzZXIgYnV0IG1hbmRhdG9yeSBmb3IgdGhlIHByb2dyYW0uXHJcbiAqXHJcbiAqIFRoZSBhZGRlZCB2YWx1ZSBoZXJlIG9mIHRoZSBtZXJnZSBpcyB0aGF0IG9wdGlvbiAnZW5hYmxlZCcgaXMgc2V0IGFzIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWVyZ2VUYXJnZXQgLSBFaXRoZXIgdGhpcy5vcHRpb25zIG9yIHRoZSBvcHRpb25zIHVzZWQgZm9yIHRoZSBncm91cHMuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICogQHBhcmFtIG9wdGlvbiAtIE9wdGlvbiBrZXkgaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQuXHJcbiAqIEBwYXJhbSBnbG9iYWxPcHRpb25zIC0gR2xvYmFsIG9wdGlvbnMsIHBhc3NlZCBpbiB0byBkZXRlcm1pbmUgdmFsdWUgb2Ygb3B0aW9uICdlbmFibGVkJy5cclxuICovXHJcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhtZXJnZVRhcmdldCwgb3B0aW9ucywgb3B0aW9uLCBnbG9iYWxPcHRpb25zID0ge30pIHtcclxuICAgIC8vIExvY2FsIGhlbHBlcnNcclxuICAgIGNvbnN0IGlzUHJlc2VudCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIG9iaiAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIjtcclxuICAgIH07XHJcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzQ0OTEyODcvMTIyMzUzMVxyXG4gICAgY29uc3QgaXNFbXB0eSA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHggaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCB4KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8vIEd1YXJkc1xyXG4gICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgbWVyZ2VUYXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzUHJlc2VudChvcHRpb24pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbiBtdXN0IGhhdmUgYSB2YWx1ZVwiKTtcclxuICAgIH1cclxuICAgIGlmICghaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgZ2xvYmFsT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdFwiKTtcclxuICAgIH1cclxuICAgIC8vXHJcbiAgICAvLyBBY3R1YWwgbWVyZ2Ugcm91dGluZSwgc2VwYXJhdGVkIGZyb20gbWFpbiBsb2dpY1xyXG4gICAgLy8gT25seSBhIHNpbmdsZSBsZXZlbCBvZiBvcHRpb25zIGlzIG1lcmdlZC4gRGVlcGVyIGxldmVscyBhcmUgcmVmJ2QuIFRoaXMgbWF5IGFjdHVhbGx5IGJlIGFuIGlzc3VlLlxyXG4gICAgLy9cclxuICAgIGNvbnN0IGRvTWVyZ2UgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KHRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbb3B0aW9uXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzcmMgPSBvcHRpb25zW29wdGlvbl07XHJcbiAgICAgICAgY29uc3QgZHN0ID0gdGFyZ2V0W29wdGlvbl07XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHNyYykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNyYywgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRzdFtwcm9wXSA9IHNyY1twcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBMb2NhbCBpbml0aWFsaXphdGlvblxyXG4gICAgY29uc3Qgc3JjT3B0aW9uID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgY29uc3QgZ2xvYmFsUGFzc2VkID0gaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykgJiYgIWlzRW1wdHkoZ2xvYmFsT3B0aW9ucyk7XHJcbiAgICBjb25zdCBnbG9iYWxPcHRpb24gPSBnbG9iYWxQYXNzZWQgPyBnbG9iYWxPcHRpb25zW29wdGlvbl0gOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBnbG9iYWxFbmFibGVkID0gZ2xvYmFsT3B0aW9uID8gZ2xvYmFsT3B0aW9uLmVuYWJsZWQgOiB1bmRlZmluZWQ7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTWFpbiByb3V0aW5lXHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgaWYgKHNyY09wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNyY09wdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gc3JjT3B0aW9uO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChzcmNPcHRpb24gPT09IG51bGwgJiYgIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgLy8gSWYgcG9zc2libGUsIGV4cGxpY2l0IGNvcHkgZnJvbSBnbG9iYWxzXHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChnbG9iYWxPcHRpb24pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KHNyY09wdGlvbikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gRW5zdXJlIHRoYXQgJ2VuYWJsZWQnIGlzIHByb3Blcmx5IHNldC4gSXQgaXMgcmVxdWlyZWQgaW50ZXJuYWxseVxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB2YWx1ZSBmcm9tIG9wdGlvbnMgd2lsbCBhbHdheXMgb3ZlcndyaXRlIHRoZSBleGlzdGluZyB2YWx1ZVxyXG4gICAgLy9cclxuICAgIGxldCBlbmFibGVkID0gdHJ1ZTsgLy8gZGVmYXVsdCB2YWx1ZVxyXG4gICAgaWYgKHNyY09wdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBlbmFibGVkID0gc3JjT3B0aW9uLmVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBUYWtlIGZyb20gZ2xvYmFscywgaWYgcHJlc2VudFxyXG4gICAgICAgIGlmIChnbG9iYWxFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZCA9IGdsb2JhbE9wdGlvbi5lbmFibGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRvTWVyZ2UobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbik7XHJcbiAgICBtZXJnZVRhcmdldFtvcHRpb25dLmVuYWJsZWQgPSBlbmFibGVkO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBiaW5hcnkgc2VhcmNoIGZvciBhIHZpc2libGUgaXRlbSBpbiBhIHNvcnRlZCBsaXN0LiBJZiB3ZSBmaW5kIGEgdmlzaWJsZSBpdGVtLCB0aGUgY29kZSB0aGF0IHVzZXNcclxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHRoZW4gaXRlcmF0ZSBpbiBib3RoIGRpcmVjdGlvbnMgb3ZlciB0aGlzIHNvcnRlZCBsaXN0IHRvIGZpbmQgYWxsIHZpc2libGUgaXRlbXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBJdGVtcyBvcmRlcmVkIGJ5IHN0YXJ0LlxyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIC0xIGlzIGxvd2VyLCAwIGlzIGVxdWFsLCAxIGlzIGhpZ2hlci5cclxuICogQHBhcmFtIGZpZWxkIC0gUHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdKS5cclxuICogQHBhcmFtIGZpZWxkMiAtIFNlY29uZCBwcm9wZXJ0eSBuYW1lIG9uIGFuIGl0ZW0gKFRoYXQgaXMgaXRlbVtmaWVsZF1bZmllbGQyXSkuXHJcbiAqIEByZXR1cm5zIEluZGV4IG9mIHRoZSBmb3VuZCBpdGVtIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoQ3VzdG9tKG9yZGVyZWRJdGVtcywgY29tcGFyYXRvciwgZmllbGQsIGZpZWxkMikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQyID09PSB1bmRlZmluZWQgPyBpdGVtW2ZpZWxkXSA6IGl0ZW1bZmllbGRdW2ZpZWxkMl07XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGppaGFhLCBmb3VuZCBhIHZpc2libGUgaXRlbSFcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2VhcmNoUmVzdWx0ID09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBzbWFsbCAtLT4gaW5jcmVhc2UgbG93XHJcbiAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSBzcGVjaWZpYyB2YWx1ZSBpbiBhIHNvcnRlZCBhcnJheS5cclxuICogSWYgaXQgZG9lcyBub3QgZXhpc3QgYnV0IGlzIGluIGJldHdlZW4gb2YgdHdvIHZhbHVlcywgd2UgcmV0dXJuIGVpdGhlciB0aGVcclxuICogb25lIGJlZm9yZSBvciB0aGUgb25lIGFmdGVyLCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dCBJZiBpdCBpcyBmb3VuZCwgd2VcclxuICogcmV0dXJuIHRoZSBpbmRleCwgZWxzZSAtMS5cclxuICpcclxuICogQHBhcmFtIG9yZGVyZWRJdGVtcyAtIFNvcnRlZCBhcnJheS5cclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSBzZWFyY2hlZCB2YWx1ZS5cclxuICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgaW4gaXRlbXMgdG8gYmUgc2VhcmNoZWQuXHJcbiAqIEBwYXJhbSBzaWRlUHJlZmVyZW5jZSAtIElmIHRoZSB0YXJnZXQgaXMgYmV0d2VlbiB0d28gdmFsdWVzLCBzaG91bGQgdGhlIGluZGV4IG9mIHRoZSBiZWZvcmUgb3IgdGhlIGFmdGVyIGJlIHJldHVybmVkP1xyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIEFuIG9wdGlvbmFsIGNvbXBhcmF0b3IsIHJldHVybmluZyAtMSwgMCwgMSBmb3IgXFw8LCA9PT0sIFxcPi5cclxuICogQHJldHVybnMgVGhlIGluZGV4IG9mIGZvdW5kIHZhbHVlIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoVmFsdWUob3JkZXJlZEl0ZW1zLCB0YXJnZXQsIGZpZWxkLCBzaWRlUHJlZmVyZW5jZSwgY29tcGFyYXRvcikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgcHJldlZhbHVlO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IG5leHRWYWx1ZTtcclxuICAgIGxldCBtaWRkbGU7XHJcbiAgICBjb21wYXJhdG9yID1cclxuICAgICAgICBjb21wYXJhdG9yICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGNvbXBhcmF0b3JcclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYiA/IDAgOiBhIDwgYiA/IC0xIDogMTtcclxuICAgICAgICAgICAgfTtcclxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKSB7XHJcbiAgICAgICAgLy8gZ2V0IGEgbmV3IGd1ZXNzXHJcbiAgICAgICAgbWlkZGxlID0gTWF0aC5mbG9vcigwLjUgKiAoaGlnaCArIGxvdykpO1xyXG4gICAgICAgIHByZXZWYWx1ZSA9IG9yZGVyZWRJdGVtc1tNYXRoLm1heCgwLCBtaWRkbGUgLSAxKV1bZmllbGRdO1xyXG4gICAgICAgIHZhbHVlID0gb3JkZXJlZEl0ZW1zW21pZGRsZV1bZmllbGRdO1xyXG4gICAgICAgIG5leHRWYWx1ZSA9XHJcbiAgICAgICAgICAgIG9yZGVyZWRJdGVtc1tNYXRoLm1pbihvcmRlcmVkSXRlbXMubGVuZ3RoIC0gMSwgbWlkZGxlICsgMSldW2ZpZWxkXTtcclxuICAgICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIHRoZSB0YXJnZXRcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcihwcmV2VmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBwcmV2aW91cyBhbmQgdGhlIGN1cnJlbnRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCIgPyBNYXRoLm1heCgwLCBtaWRkbGUgLSAxKSA6IG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA8IDAgJiZcclxuICAgICAgICAgICAgY29tcGFyYXRvcihuZXh0VmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dFxyXG4gICAgICAgICAgICByZXR1cm4gc2lkZVByZWZlcmVuY2UgPT0gXCJiZWZvcmVcIlxyXG4gICAgICAgICAgICAgICAgPyBtaWRkbGVcclxuICAgICAgICAgICAgICAgIDogTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGlkbnQgZmluZCB0aGUgdGFyZ2V0LCB3ZSBuZWVkIHRvIGNoYW5nZSBvdXIgYm91bmRhcmllcy5cclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICAgICAgbG93ID0gbWlkZGxlICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBiaWcgLS0+IGRlY3JlYXNlIGhpZ2hcclxuICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgfVxyXG4gICAgLy8gZGlkbnQgZmluZCBhbnl0aGluZy4gUmV0dXJuIC0xLlxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbi8qXHJcbiAqIEVhc2luZyBGdW5jdGlvbnMuXHJcbiAqIE9ubHkgY29uc2lkZXJpbmcgdGhlIHQgdmFsdWUgZm9yIHRoZSByYW5nZSBbMCwgMV0gPT4gWzAsIDFdLlxyXG4gKlxyXG4gKiBJbnNwaXJhdGlvbjogZnJvbSBodHRwOi8vZ2l6bWEuY29tL2Vhc2luZy9cclxuICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ3JlLzE2NTAyOTRcclxuICovXHJcbmNvbnN0IGVhc2luZ0Z1bmN0aW9ucyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgbm8gZWFzaW5nIGFuZCBubyBhY2NlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBsaW5lYXIodCkge1xyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5RdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiAoMiAtIHQpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDIgKiB0ICogdCA6IC0xICsgKDQgLSAyICogdCkgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5DdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRDdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gNCAqIHQgKiB0ICogdCA6ICh0IC0gMSkgKiAoMiAqIHQgLSAyKSAqICgyICogdCAtIDIpICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gMSAtIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gOCAqIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgKyAtLXQgKiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAxNiAqIHQgKiB0ICogdCAqIHQgKiB0IDogMSArIDE2ICogLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBFeHBlcmltZW50YWx5IGNvbXB1dGUgdGhlIHdpZHRoIG9mIHRoZSBzY3JvbGxiYXIgZm9yIHRoaXMgYnJvd3Nlci5cclxuICpcclxuICogQHJldHVybnMgVGhlIHdpZHRoIGluIHBpeGVscy5cclxuICovXHJcbmZ1bmN0aW9uIGdldFNjcm9sbEJhcldpZHRoKCkge1xyXG4gICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgIGlubmVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSBcIjIwMHB4XCI7XHJcbiAgICBjb25zdCBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBvdXRlci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgIG91dGVyLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuc3R5bGUud2lkdGggPSBcIjIwMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5oZWlnaHQgPSBcIjE1MHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcbiAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcclxuICAgIGNvbnN0IHcxID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwic2Nyb2xsXCI7XHJcbiAgICBsZXQgdzIgPSBpbm5lci5vZmZzZXRXaWR0aDtcclxuICAgIGlmICh3MSA9PSB3Mikge1xyXG4gICAgICAgIHcyID0gb3V0ZXIuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyKTtcclxuICAgIHJldHVybiB3MSAtIHcyO1xyXG59XHJcbi8vIEBUT0RPOiBUaGlzIGRvZXNuJ3Qgd29yayBwcm9wZXJseS5cclxuLy8gSXQgd29ya3Mgb25seSBmb3Igc2luZ2xlIHByb3BlcnR5IG9iamVjdHMsXHJcbi8vIG90aGVyd2lzZSBpdCBjb21iaW5lcyBhbGwgb2YgdGhlIHR5cGVzIGluIGEgdW5pb24uXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBWMT4gKFxyXG4vLyAgIHBpbGU6IFJlY29yZDxLMSwgdW5kZWZpbmVkIHwgVjE+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBLMSB8IFtLMV1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjFcclxuLy8gZXhwb3J0IGZ1bmN0aW9uIHRvcE1vc3Q8SzEgZXh0ZW5kcyBzdHJpbmcsIEsyIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjI+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgSzMgZXh0ZW5kcyBzdHJpbmcsIFYxLCBWMiwgVjM+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMiB8IFJlY29yZDxLMywgdW5kZWZpbmVkIHwgVjM+Pj5bXSxcclxuLy8gICBhY2Nlc3NvcnM6IFtLMSwgSzIsIEszXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyIHwgVjNcclxuLyoqXHJcbiAqIEdldCB0aGUgdG9wIG1vc3QgcHJvcGVydHkgdmFsdWUgZnJvbSBhIHBpbGUgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHBhcmFtIHBpbGUgLSBBcnJheSBvZiBvYmplY3RzLCBubyByZXF1aXJlZCBmb3JtYXQuXHJcbiAqIEBwYXJhbSBhY2Nlc3NvcnMgLSBBcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cclxuICogRm9yIGV4YW1wbGUgYG9iamVjdFsnZm9vJ11bJ2JhciddYCDihpIgYFsnZm9vJywgJ2JhciddYC5cclxuICogQHJldHVybnMgVmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpdGggZ2l2ZW4gYWNjZXNzb3JzIHBhdGggZnJvbSB0aGUgZmlyc3QgcGlsZSBpdGVtIHdoZXJlIGl0J3Mgbm90IHVuZGVmaW5lZC5cclxuICovXHJcbmZ1bmN0aW9uIHRvcE1vc3QocGlsZSwgYWNjZXNzb3JzKSB7XHJcbiAgICBsZXQgY2FuZGlkYXRlO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjY2Vzc29ycykpIHtcclxuICAgICAgICBhY2Nlc3NvcnMgPSBbYWNjZXNzb3JzXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHBpbGUpIHtcclxuICAgICAgICBpZiAobWVtYmVyKSB7XHJcbiAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG1lbWJlclthY2Nlc3NvcnNbMF1dO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFjY2Vzc29ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZVthY2Nlc3NvcnNbaV1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjYW5kaWRhdGU7XHJcbn1cblxuY29uc3QgaHRtbENvbG9ycyA9IHtcbiAgYmxhY2s6IFwiIzAwMDAwMFwiLFxuICBuYXZ5OiBcIiMwMDAwODBcIixcbiAgZGFya2JsdWU6IFwiIzAwMDA4QlwiLFxuICBtZWRpdW1ibHVlOiBcIiMwMDAwQ0RcIixcbiAgYmx1ZTogXCIjMDAwMEZGXCIsXG4gIGRhcmtncmVlbjogXCIjMDA2NDAwXCIsXG4gIGdyZWVuOiBcIiMwMDgwMDBcIixcbiAgdGVhbDogXCIjMDA4MDgwXCIsXG4gIGRhcmtjeWFuOiBcIiMwMDhCOEJcIixcbiAgZGVlcHNreWJsdWU6IFwiIzAwQkZGRlwiLFxuICBkYXJrdHVycXVvaXNlOiBcIiMwMENFRDFcIixcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IFwiIzAwRkE5QVwiLFxuICBsaW1lOiBcIiMwMEZGMDBcIixcbiAgc3ByaW5nZ3JlZW46IFwiIzAwRkY3RlwiLFxuICBhcXVhOiBcIiMwMEZGRkZcIixcbiAgY3lhbjogXCIjMDBGRkZGXCIsXG4gIG1pZG5pZ2h0Ymx1ZTogXCIjMTkxOTcwXCIsXG4gIGRvZGdlcmJsdWU6IFwiIzFFOTBGRlwiLFxuICBsaWdodHNlYWdyZWVuOiBcIiMyMEIyQUFcIixcbiAgZm9yZXN0Z3JlZW46IFwiIzIyOEIyMlwiLFxuICBzZWFncmVlbjogXCIjMkU4QjU3XCIsXG4gIGRhcmtzbGF0ZWdyYXk6IFwiIzJGNEY0RlwiLFxuICBsaW1lZ3JlZW46IFwiIzMyQ0QzMlwiLFxuICBtZWRpdW1zZWFncmVlbjogXCIjM0NCMzcxXCIsXG4gIHR1cnF1b2lzZTogXCIjNDBFMEQwXCIsXG4gIHJveWFsYmx1ZTogXCIjNDE2OUUxXCIsXG4gIHN0ZWVsYmx1ZTogXCIjNDY4MkI0XCIsXG4gIGRhcmtzbGF0ZWJsdWU6IFwiIzQ4M0Q4QlwiLFxuICBtZWRpdW10dXJxdW9pc2U6IFwiIzQ4RDFDQ1wiLFxuICBpbmRpZ286IFwiIzRCMDA4MlwiLFxuICBkYXJrb2xpdmVncmVlbjogXCIjNTU2QjJGXCIsXG4gIGNhZGV0Ymx1ZTogXCIjNUY5RUEwXCIsXG4gIGNvcm5mbG93ZXJibHVlOiBcIiM2NDk1RURcIixcbiAgbWVkaXVtYXF1YW1hcmluZTogXCIjNjZDREFBXCIsXG4gIGRpbWdyYXk6IFwiIzY5Njk2OVwiLFxuICBzbGF0ZWJsdWU6IFwiIzZBNUFDRFwiLFxuICBvbGl2ZWRyYWI6IFwiIzZCOEUyM1wiLFxuICBzbGF0ZWdyYXk6IFwiIzcwODA5MFwiLFxuICBsaWdodHNsYXRlZ3JheTogXCIjNzc4ODk5XCIsXG4gIG1lZGl1bXNsYXRlYmx1ZTogXCIjN0I2OEVFXCIsXG4gIGxhd25ncmVlbjogXCIjN0NGQzAwXCIsXG4gIGNoYXJ0cmV1c2U6IFwiIzdGRkYwMFwiLFxuICBhcXVhbWFyaW5lOiBcIiM3RkZGRDRcIixcbiAgbWFyb29uOiBcIiM4MDAwMDBcIixcbiAgcHVycGxlOiBcIiM4MDAwODBcIixcbiAgb2xpdmU6IFwiIzgwODAwMFwiLFxuICBncmF5OiBcIiM4MDgwODBcIixcbiAgc2t5Ymx1ZTogXCIjODdDRUVCXCIsXG4gIGxpZ2h0c2t5Ymx1ZTogXCIjODdDRUZBXCIsXG4gIGJsdWV2aW9sZXQ6IFwiIzhBMkJFMlwiLFxuICBkYXJrcmVkOiBcIiM4QjAwMDBcIixcbiAgZGFya21hZ2VudGE6IFwiIzhCMDA4QlwiLFxuICBzYWRkbGVicm93bjogXCIjOEI0NTEzXCIsXG4gIGRhcmtzZWFncmVlbjogXCIjOEZCQzhGXCIsXG4gIGxpZ2h0Z3JlZW46IFwiIzkwRUU5MFwiLFxuICBtZWRpdW1wdXJwbGU6IFwiIzkzNzBEOFwiLFxuICBkYXJrdmlvbGV0OiBcIiM5NDAwRDNcIixcbiAgcGFsZWdyZWVuOiBcIiM5OEZCOThcIixcbiAgZGFya29yY2hpZDogXCIjOTkzMkNDXCIsXG4gIHllbGxvd2dyZWVuOiBcIiM5QUNEMzJcIixcbiAgc2llbm5hOiBcIiNBMDUyMkRcIixcbiAgYnJvd246IFwiI0E1MkEyQVwiLFxuICBkYXJrZ3JheTogXCIjQTlBOUE5XCIsXG4gIGxpZ2h0Ymx1ZTogXCIjQUREOEU2XCIsXG4gIGdyZWVueWVsbG93OiBcIiNBREZGMkZcIixcbiAgcGFsZXR1cnF1b2lzZTogXCIjQUZFRUVFXCIsXG4gIGxpZ2h0c3RlZWxibHVlOiBcIiNCMEM0REVcIixcbiAgcG93ZGVyYmx1ZTogXCIjQjBFMEU2XCIsXG4gIGZpcmVicmljazogXCIjQjIyMjIyXCIsXG4gIGRhcmtnb2xkZW5yb2Q6IFwiI0I4ODYwQlwiLFxuICBtZWRpdW1vcmNoaWQ6IFwiI0JBNTVEM1wiLFxuICByb3N5YnJvd246IFwiI0JDOEY4RlwiLFxuICBkYXJra2hha2k6IFwiI0JEQjc2QlwiLFxuICBzaWx2ZXI6IFwiI0MwQzBDMFwiLFxuICBtZWRpdW12aW9sZXRyZWQ6IFwiI0M3MTU4NVwiLFxuICBpbmRpYW5yZWQ6IFwiI0NENUM1Q1wiLFxuICBwZXJ1OiBcIiNDRDg1M0ZcIixcbiAgY2hvY29sYXRlOiBcIiNEMjY5MUVcIixcbiAgdGFuOiBcIiNEMkI0OENcIixcbiAgbGlnaHRncmV5OiBcIiNEM0QzRDNcIixcbiAgcGFsZXZpb2xldHJlZDogXCIjRDg3MDkzXCIsXG4gIHRoaXN0bGU6IFwiI0Q4QkZEOFwiLFxuICBvcmNoaWQ6IFwiI0RBNzBENlwiLFxuICBnb2xkZW5yb2Q6IFwiI0RBQTUyMFwiLFxuICBjcmltc29uOiBcIiNEQzE0M0NcIixcbiAgZ2FpbnNib3JvOiBcIiNEQ0RDRENcIixcbiAgcGx1bTogXCIjRERBMEREXCIsXG4gIGJ1cmx5d29vZDogXCIjREVCODg3XCIsXG4gIGxpZ2h0Y3lhbjogXCIjRTBGRkZGXCIsXG4gIGxhdmVuZGVyOiBcIiNFNkU2RkFcIixcbiAgZGFya3NhbG1vbjogXCIjRTk5NjdBXCIsXG4gIHZpb2xldDogXCIjRUU4MkVFXCIsXG4gIHBhbGVnb2xkZW5yb2Q6IFwiI0VFRThBQVwiLFxuICBsaWdodGNvcmFsOiBcIiNGMDgwODBcIixcbiAga2hha2k6IFwiI0YwRTY4Q1wiLFxuICBhbGljZWJsdWU6IFwiI0YwRjhGRlwiLFxuICBob25leWRldzogXCIjRjBGRkYwXCIsXG4gIGF6dXJlOiBcIiNGMEZGRkZcIixcbiAgc2FuZHlicm93bjogXCIjRjRBNDYwXCIsXG4gIHdoZWF0OiBcIiNGNURFQjNcIixcbiAgYmVpZ2U6IFwiI0Y1RjVEQ1wiLFxuICB3aGl0ZXNtb2tlOiBcIiNGNUY1RjVcIixcbiAgbWludGNyZWFtOiBcIiNGNUZGRkFcIixcbiAgZ2hvc3R3aGl0ZTogXCIjRjhGOEZGXCIsXG4gIHNhbG1vbjogXCIjRkE4MDcyXCIsXG4gIGFudGlxdWV3aGl0ZTogXCIjRkFFQkQ3XCIsXG4gIGxpbmVuOiBcIiNGQUYwRTZcIixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiI0ZBRkFEMlwiLFxuICBvbGRsYWNlOiBcIiNGREY1RTZcIixcbiAgcmVkOiBcIiNGRjAwMDBcIixcbiAgZnVjaHNpYTogXCIjRkYwMEZGXCIsXG4gIG1hZ2VudGE6IFwiI0ZGMDBGRlwiLFxuICBkZWVwcGluazogXCIjRkYxNDkzXCIsXG4gIG9yYW5nZXJlZDogXCIjRkY0NTAwXCIsXG4gIHRvbWF0bzogXCIjRkY2MzQ3XCIsXG4gIGhvdHBpbms6IFwiI0ZGNjlCNFwiLFxuICBjb3JhbDogXCIjRkY3RjUwXCIsXG4gIGRhcmtvcmFuZ2U6IFwiI0ZGOEMwMFwiLFxuICBsaWdodHNhbG1vbjogXCIjRkZBMDdBXCIsXG4gIG9yYW5nZTogXCIjRkZBNTAwXCIsXG4gIGxpZ2h0cGluazogXCIjRkZCNkMxXCIsXG4gIHBpbms6IFwiI0ZGQzBDQlwiLFxuICBnb2xkOiBcIiNGRkQ3MDBcIixcbiAgcGVhY2hwdWZmOiBcIiNGRkRBQjlcIixcbiAgbmF2YWpvd2hpdGU6IFwiI0ZGREVBRFwiLFxuICBtb2NjYXNpbjogXCIjRkZFNEI1XCIsXG4gIGJpc3F1ZTogXCIjRkZFNEM0XCIsXG4gIG1pc3R5cm9zZTogXCIjRkZFNEUxXCIsXG4gIGJsYW5jaGVkYWxtb25kOiBcIiNGRkVCQ0RcIixcbiAgcGFwYXlhd2hpcDogXCIjRkZFRkQ1XCIsXG4gIGxhdmVuZGVyYmx1c2g6IFwiI0ZGRjBGNVwiLFxuICBzZWFzaGVsbDogXCIjRkZGNUVFXCIsXG4gIGNvcm5zaWxrOiBcIiNGRkY4RENcIixcbiAgbGVtb25jaGlmZm9uOiBcIiNGRkZBQ0RcIixcbiAgZmxvcmFsd2hpdGU6IFwiI0ZGRkFGMFwiLFxuICBzbm93OiBcIiNGRkZBRkFcIixcbiAgeWVsbG93OiBcIiNGRkZGMDBcIixcbiAgbGlnaHR5ZWxsb3c6IFwiI0ZGRkZFMFwiLFxuICBpdm9yeTogXCIjRkZGRkYwXCIsXG4gIHdoaXRlOiBcIiNGRkZGRkZcIixcbn07XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gKi9cbmxldCBDb2xvclBpY2tlciQxID0gY2xhc3MgQ29sb3JQaWNrZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwaXhlbFJhdGlvID0gMSkge1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiAyODkgLyAyLCB5OiAyODkgLyAyIH07XG4gICAgdGhpcy5yID0gMjg5ICogMC40OTtcbiAgICB0aGlzLmNvbG9yID0geyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhOiAxLjAgfTtcbiAgICB0aGlzLmh1ZUNpcmNsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmluaXRpYWxDb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5wcmV2aW91c0NvbG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuXG4gICAgLy8gYm91bmQgYnlcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gKCkgPT4ge307XG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gKCkgPT4ge307XG5cbiAgICAvLyBjcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgIHRoaXMuX2NyZWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgaW5zZXJ0cyB0aGUgY29sb3JQaWNrZXIgaW50byBhIGRpdiBmcm9tIHRoZSBET01cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAgICovXG4gIGluc2VydFRvKGNvbnRhaW5lcikge1xuICAgIGlmICh0aGlzLmhhbW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhhbW1lci5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhhbW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuXG4gICAgdGhpcy5fc2V0U2l6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldFVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIG9uIGFwcGx5IGFuZCBzYXZlLiBCaW5kIGl0IHRvIHRoZSBhcHBsaWNhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgc2V0Q2xvc2VDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIGNsb3NpbmcgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lzQ29sb3JTdHJpbmcoY29sb3IpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gaHRtbENvbG9yc1tjb2xvcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29sb3Igb2YgdGhlIGNvbG9yUGlja2VyXG4gICAqIFN1cHBvcnRlZCBmb3JtYXRzOlxuICAgKiAncmVkJyAgICAgICAgICAgICAgICAgICAtLT4gSFRNTCBjb2xvciBzdHJpbmdcbiAgICogJyNmZmZmZmYnICAgICAgICAgICAgICAgLS0+IGhleCBzdHJpbmdcbiAgICogJ3JnYigyNTUsMjU1LDI1NSknICAgICAgLS0+IHJnYiBzdHJpbmdcbiAgICogJ3JnYmEoMjU1LDI1NSwyNTUsMS4wKScgLS0+IHJnYmEgc3RyaW5nXG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NX0gICAgIC0tPiByZ2Igb2JqZWN0XG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NSxhOjEuMH0gLS0+IHJnYmEgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgb2JqZWN0fSBjb2xvclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqL1xuICBzZXRDb2xvcihjb2xvciwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICBpZiAoY29sb3IgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJnYmE7XG5cbiAgICAvLyBpZiBhIGh0bWwgY29sb3Igc2hvcnRoYW5kIGlzIHVzZWQsIGNvbnZlcnQgdG8gaGV4XG4gICAgY29uc3QgaHRtbENvbG9yID0gdGhpcy5faXNDb2xvclN0cmluZyhjb2xvcik7XG4gICAgaWYgKGh0bWxDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IGh0bWxDb2xvcjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3JtYXRcbiAgICBpZiAoaXNTdHJpbmcoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICBpZiAoaXNWYWxpZFJHQihjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDQpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA1KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYmFBcnJheVswXSwgZzogcmdiYUFycmF5WzFdLCBiOiByZ2JhQXJyYXlbMl0sIGE6IDEuMCB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkUkdCQShjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDUpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA2KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7XG4gICAgICAgICAgcjogcmdiYUFycmF5WzBdLFxuICAgICAgICAgIGc6IHJnYmFBcnJheVsxXSxcbiAgICAgICAgICBiOiByZ2JhQXJyYXlbMl0sXG4gICAgICAgICAgYTogcmdiYUFycmF5WzNdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkSGV4KGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZ2JPYmogPSBoZXhUb1JHQihjb2xvcik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYk9iai5yLCBnOiByZ2JPYmouZywgYjogcmdiT2JqLmIsIGE6IDEuMCB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29sb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbG9yLnIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmIgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBhbHBoYSA9IGNvbG9yLmEgIT09IHVuZGVmaW5lZCA/IGNvbG9yLmEgOiBcIjEuMFwiO1xuICAgICAgICAgIHJnYmEgPSB7IHI6IGNvbG9yLnIsIGc6IGNvbG9yLmcsIGI6IGNvbG9yLmIsIGE6IGFscGhhIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBpZiAocmdiYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biBjb2xvciBwYXNzZWQgdG8gdGhlIGNvbG9yUGlja2VyLiBTdXBwb3J0ZWQgYXJlIHN0cmluZ3M6IHJnYiwgaGV4LCByZ2JhLiBPYmplY3Q6IHJnYiAoe3I6cixnOmcsYjpiLFthOmFdfSkuIFN1cHBsaWVkOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29sb3IpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzaG93cyB0aGUgY29sb3IgcGlja2VyLlxuICAgKiBUaGUgaHVlIGNpcmNsZSBpcyBjb25zdHJ1Y3RlZCBvbmNlIGFuZCBzdG9yZWQuXG4gICAqL1xuICBzaG93KCkge1xuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrKCk7XG4gICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIHRoaXMuX2dlbmVyYXRlSHVlQ2lyY2xlKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFJJVkFURSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwaWNrZXIuIElzIGNhbGxlZCBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogT3B0aW9uYWwgYm9vbGVhbiB0byBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIGVhc3kgYWNjZXNzIGxhdGVyIG9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdG9yZVByZXZpb3VzPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGlkZShzdG9yZVByZXZpb3VzID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBwcmV2aW91cyBjb2xvciBmb3IgbmV4dCB0aW1lO1xuICAgIGlmIChzdG9yZVByZXZpb3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnByZXZpb3VzQ29sb3IgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbG9yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHBsaWVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuaW5pdGlhbENvbG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblxuICAgIC8vIGNhbGwgdGhlIGNsb3NpbmcgY2FsbGJhY2ssIHJlc3RvcmluZyB0aGUgb25jbGljayBtZXRob2QuXG4gICAgLy8gdGhpcyBpcyBpbiBhIHNldFRpbWVvdXQgYmVjYXVzZSBpdCB3aWxsIHRyaWdnZXIgdGhlIHNob3cgYWdhaW4gYmVmb3JlIHRoZSBjbGljayBpcyBkb25lLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2xvc2VDYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gdGhlIHNhdmUgYnV0dG9uLiBTYXZlcyBhbmQgaGlkZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2F2ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuY29sb3IpO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuX2hpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCb3VuZCB0byBhcHBseSBidXR0b24uIFNhdmVzIGJ1dCBkb2VzIG5vdCBjbG9zZS4gSXMgdW5kb25lIGJ5IHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FwcGx5KCkge1xuICAgIHRoaXMuYXBwbGllZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogbG9hZCB0aGUgY29sb3IgZnJvbSB0aGUgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkTGFzdCgpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c0NvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0Q29sb3IodGhpcy5wcmV2aW91c0NvbG9yLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsZXJ0KFwiVGhlcmUgaXMgbm8gbGFzdCBjb2xvciB0byBsb2FkLi4uXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGNvbG9yLCBwbGFjZSB0aGUgcGlja2VyXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZ2JhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NldEluaXRpYWw9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBpbml0aWFsIGNvbG9yXG4gICAgaWYgKHNldEluaXRpYWwgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgcmdiYSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvciA9IHJnYmE7XG4gICAgY29uc3QgaHN2ID0gUkdCVG9IU1YocmdiYS5yLCByZ2JhLmcsIHJnYmEuYik7XG5cbiAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAyICogTWF0aC5QSTtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLnIgKiBoc3YucztcbiAgICBjb25zdCB4ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcbiAgICBjb25zdCB5ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIHggLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICB5IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudEhlaWdodCArIFwicHhcIjtcblxuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcihyZ2JhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBvcGFjaXR5IGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0T3BhY2l0eSh2YWx1ZSkge1xuICAgIHRoaXMuY29sb3IuYSA9IHZhbHVlIC8gMTAwO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcih0aGlzLmNvbG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBicmlnaHRuZXNzIGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QnJpZ2h0bmVzcyh2YWx1ZSkge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi52ID0gdmFsdWUgLyAxMDA7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgY29sb3IgcGlja2VyLiBBIGJsYWNrIGNpcmNsZSBvdmVybGF5cyB0aGUgaHVlIGNpcmNsZSB0byBtaW1pYyB0aGUgYnJpZ2h0bmVzcyBkZWNyZWFzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZVBpY2tlcihyZ2JhID0gdGhpcy5jb2xvcikge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgfVxuICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuXG4gICAgY3R4LnB1dEltYWdlRGF0YSh0aGlzLmh1ZUNpcmNsZSwgMCwgMCk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgwLDAsMCxcIiArICgxIC0gaHN2LnYpICsgXCIpXCI7XG4gICAgY3R4LmNpcmNsZSh0aGlzLmNlbnRlckNvb3JkaW5hdGVzLngsIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSwgdGhpcy5yKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudmFsdWUgPSAxMDAgKiBoc3YudjtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IDEwMCAqIHJnYmEuYTtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgY3JlYXRlIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFNpemUoKSB7XG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLndpZHRoID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuaGVpZ2h0ID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhbGwgZG9tIGVsZW1lbnRzXG4gICAqIFRPRE86IGNsZWFudXAsIGxvdHMgb2Ygc2ltaWxhciBkb20gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5mcmFtZS5jbGFzc05hbWUgPSBcInZpcy1jb2xvci1waWNrZXJcIjtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsYXNzTmFtZSA9IFwidmlzLXNlbGVjdG9yXCI7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcblxuICAgIGlmICghdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KSB7XG4gICAgICBjb25zdCBub0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIik7XG4gICAgICBub0NhbnZhcy5zdHlsZS5jb2xvciA9IFwicmVkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5wYWRkaW5nID0gXCIxMHB4XCI7XG4gICAgICBub0NhbnZhcy5pbm5lclRleHQgPSBcIkVycm9yOiB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBIVE1MIGNhbnZhc1wiO1xuICAgICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5hcHBlbmRDaGlsZChub0NhbnZhcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgKGN0eC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAxKTtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXNcbiAgICAgICAgLmdldENvbnRleHQoXCIyZFwiKVxuICAgICAgICAuc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbG9yXCI7XG5cbiAgICB0aGlzLm9wYWNpdHlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eURpdi5jbGFzc05hbWUgPSBcInZpcy1vcGFjaXR5XCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0Rpdi5jbGFzc05hbWUgPSBcInZpcy1icmlnaHRuZXNzXCI7XG5cbiAgICB0aGlzLmFycm93RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmFycm93RGl2LmNsYXNzTmFtZSA9IFwidmlzLWFycm93XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS50eXBlID0gXCJyYW5nZVwiOyAvLyBOb3Qgc3VwcG9ydGVkIG9uIElFOVxuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWluID0gXCIwXCI7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5tYXggPSBcIjEwMFwiO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVE9ETzogQWRkIHNvbWUgZXJyb3IgaGFuZGxpbmcuXG4gICAgfVxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gXCIxMDBcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5jbGFzc05hbWUgPSBcInZpcy1yYW5nZVwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2LmFwcGVuZENoaWxkKHRoaXMub3BhY2l0eVJhbmdlKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuYXBwZW5kQ2hpbGQodGhpcy5icmlnaHRuZXNzUmFuZ2UpO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmlucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLWJyaWdodG5lc3NcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbC5pbm5lclRleHQgPSBcImJyaWdodG5lc3M6XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLW9wYWNpdHlcIjtcbiAgICB0aGlzLm9wYWNpdHlMYWJlbC5pbm5lclRleHQgPSBcIm9wYWNpdHk6XCI7XG5cbiAgICB0aGlzLm5ld0NvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmNsYXNzTmFtZSA9IFwidmlzLW5ldy1jb2xvclwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuaW5uZXJUZXh0ID0gXCJuZXdcIjtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1pbml0aWFsLWNvbG9yXCI7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuaW5uZXJUZXh0ID0gXCJpbml0aWFsXCI7XG5cbiAgICB0aGlzLmNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1jYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5pbm5lclRleHQgPSBcImNhbmNlbFwiO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9oaWRlLmJpbmQodGhpcywgZmFsc2UpO1xuXG4gICAgdGhpcy5hcHBseUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5pbm5lclRleHQgPSBcImFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fYXBwbHkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2F2ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5zYXZlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtc2F2ZVwiO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5pbm5lclRleHQgPSBcInNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24ub25jbGljayA9IHRoaXMuX3NhdmUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubG9hZEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5sb2FkQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtbG9hZFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5pbm5lclRleHQgPSBcImxvYWQgbGFzdFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fbG9hZExhc3QuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFycm93RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0xhYmVsKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uZXdDb2xvckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmluaXRpYWxDb2xvckRpdik7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY2FuY2VsQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYXBwbHlCdXR0b24pO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5zYXZlQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubG9hZEJ1dHRvbik7XG4gIH1cblxuICAvKipcbiAgICogYmluZCBoYW1tZXIgdG8gdGhlIGNvbG9yIHBpY2tlclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JpbmRIYW1tZXIoKSB7XG4gICAgdGhpcy5kcmFnID0ge307XG4gICAgdGhpcy5waW5jaCA9IHt9O1xuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lciQxKHRoaXMuY29sb3JQaWNrZXJDYW52YXMpO1xuICAgIHRoaXMuaGFtbWVyLmdldChcInBpbmNoXCIpLnNldCh7IGVuYWJsZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuaGFtbWVyLm9uKFwiaGFtbWVyLmlucHV0XCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmlzRmlyc3QpIHtcbiAgICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5zdGFydFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5tb3ZlXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbmVuZFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2VuZXJhdGUgdGhlIGh1ZSBjaXJjbGUuIFRoaXMgaXMgcmVsYXRpdmVseSBoZWF2eSAoMjAwbXMpIGFuZCBpcyBkb25lIG9ubHkgb25jZSBvbiB0aGUgZmlyc3QgdGltZSBpdCBpcyBzaG93bi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZW5lcmF0ZUh1ZUNpcmNsZSgpIHtcbiAgICBpZiAodGhpcy5nZW5lcmF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIDEpO1xuICAgICAgfVxuICAgICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG5cbiAgICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgaCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gZHJhdyBodWUgY2lyY2xlXG4gICAgICBsZXQgeCwgeSwgaHVlLCBzYXQ7XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiB3ICogMC41LCB5OiBoICogMC41IH07XG4gICAgICB0aGlzLnIgPSAwLjQ5ICogdztcbiAgICAgIGNvbnN0IGFuZ2xlQ29udmVydCA9ICgyICogTWF0aC5QSSkgLyAzNjA7XG4gICAgICBjb25zdCBoZmFjID0gMSAvIDM2MDtcbiAgICAgIGNvbnN0IHNmYWMgPSAxIC8gdGhpcy5yO1xuICAgICAgbGV0IHJnYjtcbiAgICAgIGZvciAoaHVlID0gMDsgaHVlIDwgMzYwOyBodWUrKykge1xuICAgICAgICBmb3IgKHNhdCA9IDA7IHNhdCA8IHRoaXMucjsgc2F0KyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy54ICsgc2F0ICogTWF0aC5zaW4oYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICB5ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy55ICsgc2F0ICogTWF0aC5jb3MoYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICByZ2IgPSBIU1ZUb1JHQihodWUgKiBoZmFjLCBzYXQgKiBzZmFjLCAxKTtcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2IoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIpXCI7XG4gICAgICAgICAgY3R4LmZpbGxSZWN0KHggLSAwLjUsIHkgLSAwLjUsIDIsIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsMSlcIjtcbiAgICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIHRoaXMuaHVlQ2lyY2xlID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIHNlbGVjdG9yLiBUaGlzIGlzIGNhbGxlZCBieSBoYW1tZXIgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlU2VsZWN0b3IoZXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jb2xvclBpY2tlckRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBsZWZ0ID0gZXZlbnQuY2VudGVyLnggLSByZWN0LmxlZnQ7XG4gICAgY29uc3QgdG9wID0gZXZlbnQuY2VudGVyLnkgLSByZWN0LnRvcDtcblxuICAgIGNvbnN0IGNlbnRlclkgPSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyRGl2LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBjZW50ZXJYID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRXaWR0aDtcblxuICAgIGNvbnN0IHggPSBsZWZ0IC0gY2VudGVyWDtcbiAgICBjb25zdCB5ID0gdG9wIC0gY2VudGVyWTtcblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMih4LCB5KTtcbiAgICBjb25zdCByYWRpdXMgPSAwLjk4ICogTWF0aC5taW4oTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpLCBjZW50ZXJYKTtcblxuICAgIGNvbnN0IG5ld1RvcCA9IE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclk7XG4gICAgY29uc3QgbmV3TGVmdCA9IE1hdGguc2luKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclg7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUudG9wID1cbiAgICAgIG5ld1RvcCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLmxlZnQgPVxuICAgICAgbmV3TGVmdCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRXaWR0aCArIFwicHhcIjtcblxuICAgIC8vIHNldCBjb2xvclxuICAgIGxldCBoID0gYW5nbGUgLyAoMiAqIE1hdGguUEkpO1xuICAgIGggPSBoIDwgMCA/IGggKyAxIDogaDtcbiAgICBjb25zdCBzID0gcmFkaXVzIC8gdGhpcy5yO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi5oID0gaDtcbiAgICBoc3YucyA9IHM7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuXG4gICAgLy8gdXBkYXRlIHByZXZpZXdzXG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmNvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gIH1cbn07XG5cbi8qKlxuICogV3JhcCBnaXZlbiB0ZXh0IChsYXN0IGFyZ3VtZW50KSBpbiBIVE1MIGVsZW1lbnRzIChhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cykuXG4gKlxuICogQHBhcmFtIHsuLi5hbnl9IHJlc3QgLSBMaXN0IG9mIHRhZyBuYW1lcyBmb2xsb3dlZCBieSBpbm5lciB0ZXh0LlxuICogQHJldHVybnMgQW4gZWxlbWVudCBvciBhIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gd3JhcEluVGFnKC4uLnJlc3QpIHtcbiAgaWYgKHJlc3QubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cy5cIik7XG4gIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVzdFswXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmVzdFswXSk7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoLi4ucmVzdC5zbGljZSgxKSkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHdheSB0aGlzIHdvcmtzIGlzIGZvciBhbGwgcHJvcGVydGllcyBvZiB0aGlzLnBvc3NpYmxlIG9wdGlvbnMsIHlvdSBjYW4gc3VwcGx5IHRoZSBwcm9wZXJ0eSBuYW1lIGluIGFueSBmb3JtIHRvIGxpc3QgdGhlIG9wdGlvbnMuXG4gKiBCb29sZWFuIG9wdGlvbnMgYXJlIHJlY29nbmlzZWQgYXMgQm9vbGVhblxuICogTnVtYmVyIG9wdGlvbnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtkZWZhdWx0IHZhbHVlLCBtaW4gdmFsdWUsIG1heCB2YWx1ZSwgc3RlcHNpemVdXG4gKiBDb2xvcnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFsnY29sb3InLCAnI2ZmZmZmZiddXG4gKiBTdHJpbmdzIHdpdGggc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtvcHRpb24xLCBvcHRpb24yLCBvcHRpb24zLCAuLl1cbiAqXG4gKiBUaGUgb3B0aW9ucyBhcmUgbWF0Y2hlZCB3aXRoIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiBlYWNoIG9mIHRoZSBtb2R1bGVzIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYXJlXG4gKi9cbmxldCBDb25maWd1cmF0b3IkMSA9IGNsYXNzIENvbmZpZ3VyYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50TW9kdWxlICAgICAgICB8IHRoZSBsb2NhdGlvbiB3aGVyZSBwYXJlbnRNb2R1bGUuc2V0T3B0aW9ucygpIGNhbiBiZSBjYWxsZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRDb250YWluZXIgICAgfCB0aGUgZGVmYXVsdCBjb250YWluZXIgb2YgdGhlIG1vZHVsZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlndXJlT3B0aW9ucyAgICB8IHRoZSBmdWxseSBjb25maWd1cmVkIGFuZCBwcmVkZWZpbmVkIG9wdGlvbnMgc2V0IGZvdW5kIGluIGFsbE9wdGlvbnMuanNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBpeGVsUmF0aW8gICAgICAgICAgfCBjYW52YXMgcGl4ZWwgcmF0aW9cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGlkZU9wdGlvbiAgICAgICAgfCBjdXN0b20gbG9naWMgdG8gZHluYW1pY2FsbHkgaGlkZSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnRNb2R1bGUsXG4gICAgZGVmYXVsdENvbnRhaW5lcixcbiAgICBjb25maWd1cmVPcHRpb25zLFxuICAgIHBpeGVsUmF0aW8gPSAxLFxuICAgIGhpZGVPcHRpb24gPSAoKSA9PiBmYWxzZVxuICApIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudE1vZHVsZTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG4gICAgdGhpcy5jb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyO1xuICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaGlkZU9wdGlvbiA9IGhpZGVPcHRpb247XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5wb3B1cENvdW50ZXIgPSAwO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgIGNvbnRhaW5lcjogdW5kZWZpbmVkLFxuICAgICAgc2hvd0J1dHRvbjogdHJ1ZSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuY29uZmlndXJlT3B0aW9ucyA9IGNvbmZpZ3VyZU9wdGlvbnM7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0ge307XG4gICAgdGhpcy5kb21FbGVtZW50cyA9IFtdO1xuICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB0aGlzLnBvcHVwTGltaXQgPSA1O1xuICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgdGhpcy5jb2xvclBpY2tlciA9IG5ldyBDb2xvclBpY2tlciQxKHBpeGVsUmF0aW8pO1xuICAgIHRoaXMud3JhcHBlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoIGFsbCBvcHRpb25zLlxuICAgKiBCZWNhdXNlIGFsbCBtb2R1bGVzIHBhcnNlIHRoZWlyIG9wdGlvbnMgYnkgdGhlbXNlbHZlcywgd2UganVzdCB1c2UgdGhlaXIgb3B0aW9ucy4gV2UgY29weSB0aGVtIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXNldCB0aGUgcG9wdXAgaGlzdG9yeSBiZWNhdXNlIHRoZSBpbmRpY2VzIG1heSBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuXG4gICAgICBsZXQgZW5hYmxlZCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuam9pbigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbnMgY2Fubm90IGJlIG51bGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0J1dHRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3dCdXR0b24gPSBvcHRpb25zLnNob3dCdXR0b247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgIGVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICBlbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICB9XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kdWxlT3B0aW9uc1xuICAgKi9cbiAgc2V0TW9kdWxlT3B0aW9ucyhtb2R1bGVPcHRpb25zKSB7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0gbW9kdWxlT3B0aW9ucztcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NyZWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMgPSBbXTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMub3B0aW9ucy5maWx0ZXI7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gdGhpcy5jb25maWd1cmVPcHRpb25zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlndXJlT3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICAgICAgc2hvdyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc2hvdyA9IGZpbHRlcihvcHRpb24sIFtdKTtcbiAgICAgICAgICBzaG93ID1cbiAgICAgICAgICAgIHNob3cgfHxcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnNbb3B0aW9uXSwgW29wdGlvbl0sIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIuaW5kZXhPZihvcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIGxpbmVicmVhayBiZXR3ZWVuIGNhdGVnb3JpZXNcbiAgICAgICAgICBpZiAoY291bnRlciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VJdGVtKFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYSBoZWFkZXIgZm9yIHRoZSBjYXRlZ29yeVxuICAgICAgICAgIHRoaXMuX21ha2VIZWFkZXIob3B0aW9uKTtcblxuICAgICAgICAgIC8vIGdldCB0aGUgc3ViIG9wdGlvbnNcbiAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dKTtcbiAgICAgICAgfVxuICAgICAgICBjb3VudGVyKys7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX21ha2VCdXR0b24oKTtcbiAgICB0aGlzLl9wdXNoKCk7XG4gICAgLy9+IHRoaXMuY29sb3JQaWNrZXIuaW5zZXJ0VG8odGhpcy5jb250YWluZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRyYXcgYWxsIERPTSBlbGVtZW50cyBvbiB0aGUgc2NyZWVuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHVzaCgpIHtcbiAgICB0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMud3JhcHBlci5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uLXdyYXBwZXJcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuZG9tRWxlbWVudHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX3Nob3dQb3B1cElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogZGVsZXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5yZW1vdmVDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53cmFwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcblxuICAgIHRoaXMuX3JlbW92ZVBvcHVwKCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBhY3R1YWxPcHRpb25zIGlmIGl0IGV4aXN0c1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0VmFsdWUocGF0aCkge1xuICAgIGxldCBiYXNlID0gdGhpcy5tb2R1bGVPcHRpb25zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJhc2VbcGF0aFtpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBiYXNlID0gYmFzZVtwYXRoW2ldXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGwgb3B0aW9uIGVsZW1lbnRzIGFyZSB3cmFwcGVkIGluIGFuIGl0ZW1cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnQ+fSBkb21FbGVtZW50c1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VJdGVtKHBhdGgsIC4uLmRvbUVsZW1lbnRzKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBpdGVtLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1pdGVtIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgICBkb21FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogaGVhZGVyIGZvciBtYWpvciBzdWJqZWN0c1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VIZWFkZXIobmFtZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1oZWFkZXJcIjtcbiAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZTtcbiAgICB0aGlzLl9tYWtlSXRlbShbXSwgZGl2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgbGFiZWwsIGlmIGl0IGlzIGFuIG9iamVjdCBsYWJlbCwgaXQgZ2V0cyBkaWZmZXJlbnQgc3R5bGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RMYWJlbFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUxhYmVsKG5hbWUsIHBhdGgsIG9iamVjdExhYmVsID0gZmFsc2UpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWxhYmVsIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgaWYgKG9iamVjdExhYmVsID09PSB0cnVlKSB7XG4gICAgICB3aGlsZSAoZGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIGRpdi5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoXCJpXCIsIFwiYlwiLCBuYW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBuYW1lICsgXCI6XCI7XG4gICAgfVxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGRyb3Bkb3duIGxpc3QgZm9yIG11bHRpcGxlIHBvc3NpYmxlIHN0cmluZyBvcHRvaW5zXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgIHNlbGVjdC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctc2VsZWN0XCI7XG4gICAgbGV0IHNlbGVjdGVkVmFsdWUgPSAwO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYXJyLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gYXJyLmluZGV4T2YodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgb3B0aW9uLnZhbHVlID0gYXJyW2ldO1xuICAgICAgaWYgKGkgPT09IHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gXCJzZWxlY3RlZFwiO1xuICAgICAgfVxuICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IGFycltpXTtcbiAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBzZWxlY3Qub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBzZWxlY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSByYW5nZSBvYmplY3QgZm9yIG51bWVyaWMgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VSYW5nZShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXJyWzBdO1xuICAgIGNvbnN0IG1pbiA9IGFyclsxXTtcbiAgICBjb25zdCBtYXggPSBhcnJbMl07XG4gICAgY29uc3Qgc3RlcCA9IGFyclszXTtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICByYW5nZS5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctcmFuZ2VcIjtcbiAgICB0cnkge1xuICAgICAgcmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gbm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHJhbmdlLm1pbiA9IG1pbjtcbiAgICAgIHJhbmdlLm1heCA9IG1heDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICByYW5nZS5zdGVwID0gc3RlcDtcblxuICAgIC8vIHNldCB1cCB0aGUgcG9wdXAgc2V0dGluZ3MgaW4gY2FzZSB0aGV5IGFyZSBuZWVkZWQuXG4gICAgbGV0IHBvcHVwU3RyaW5nID0gXCJcIjtcbiAgICBsZXQgcG9wdXBWYWx1ZSA9IDA7XG5cbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmFjdG9yID0gMS4yO1xuICAgICAgaWYgKHZhbHVlIDwgMCAmJiB2YWx1ZSAqIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgKiBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIC8gZmFjdG9yIDwgbWluKSB7XG4gICAgICAgIHJhbmdlLm1pbiA9IE1hdGguY2VpbCh2YWx1ZSAvIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5taW47XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAqIGZhY3RvciA+IG1heCAmJiBtYXggIT09IDEpIHtcbiAgICAgICAgcmFuZ2UubWF4ID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1heDtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfVxuICAgICAgcmFuZ2UudmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgaW5wdXQuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlaW5wdXRcIjtcbiAgICBpbnB1dC52YWx1ZSA9IHJhbmdlLnZhbHVlO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgbWUuX3VwZGF0ZShOdW1iZXIodGhpcy52YWx1ZSksIHBhdGgpO1xuICAgIH07XG4gICAgcmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgcmFuZ2UsIGlucHV0KTtcblxuICAgIC8vIGlmIGEgcG9wdXAgaXMgbmVlZGVkIEFORCBpdCBoYXMgbm90IGJlZW4gc2hvd24gZm9yIHRoaXMgdmFsdWUsIHNob3cgaXQuXG4gICAgaWYgKHBvcHVwU3RyaW5nICE9PSBcIlwiICYmIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gIT09IHBvcHVwVmFsdWUpIHtcbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gPSBwb3B1cFZhbHVlO1xuICAgICAgdGhpcy5fc2V0dXBQb3B1cChwb3B1cFN0cmluZywgaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGJ1dHRvbiBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0J1dHRvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZ2VuZXJhdGVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvblwiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uaW5uZXJUZXh0ID0gXCJnZW5lcmF0ZSBvcHRpb25zXCI7XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9wcmludE9wdGlvbnMoKTtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3ZlciA9ICgpID0+IHtcbiAgICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiBob3ZlclwiO1xuICAgICAgfTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLm9ubW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLW9wdGlvbi1jb250YWluZXJcIjtcblxuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKHRoaXMub3B0aW9uc0NvbnRhaW5lcik7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goZ2VuZXJhdGVCdXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwcmVwYXJlIHRoZSBwb3B1cFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldHVwUG9wdXAoc3RyaW5nLCBpbmRleCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5wb3B1cENvdW50ZXIgPCB0aGlzLnBvcHVwTGltaXRcbiAgICApIHtcbiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBkaXYuaWQgPSBcInZpcy1jb25maWd1cmF0aW9uLXBvcHVwXCI7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmlubmVyVGV4dCA9IHN0cmluZztcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyICs9IDE7XG4gICAgICB0aGlzLnBvcHVwRGl2ID0geyBodG1sOiBkaXYsIGluZGV4OiBpbmRleCB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmUgdGhlIHBvcHVwIGZyb20gdGhlIGRvbVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZVBvcHVwKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmhpZGVUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBwb3B1cCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd1BvcHVwSWZOZWVkZWQoKSB7XG4gICAgaWYgKHRoaXMucG9wdXBEaXYuaHRtbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudHNbdGhpcy5wb3B1cERpdi5pbmRleF07XG4gICAgICBjb25zdCByZWN0ID0gY29ycmVzcG9uZGluZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5zdHlsZS50b3AgPSByZWN0LnRvcCAtIDMwICsgXCJweFwiOyAvLyAzMCBpcyB0aGUgaGVpZ2h0O1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwRGl2Lmh0bWwpO1xuICAgICAgdGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICB9LCAxNTAwKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuZGVsZXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfSwgMTgwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBjaGVja2JveCBmb3IgYm9vbGVhbiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQ2hlY2tib3goZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy5jaGVja2VkLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgY2hlY2tib3gpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSB0ZXh0IGlucHV0IGZpZWxkIGZvciBzdHJpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZVRleHRJbnB1dChkZWZhdWx0VmFsdWUsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgY2hlY2tib3gudHlwZSA9IFwidGV4dFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy10ZXh0XCI7XG4gICAgY2hlY2tib3gudmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy52YWx1ZSwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY29sb3IgZmllbGQgd2l0aCBhIGNvbG9yIHBpY2tlciBmb3IgY29sb3IgZmllbGRzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRDb2xvciA9IGFyclsxXTtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICE9PSBcIm5vbmVcIikge1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jb2xvckJsb2NrXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9jayBub25lXCI7XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbG9yIDogdmFsdWU7XG4gICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogdXNlZCBieSB0aGUgY29sb3IgYnV0dG9ucyB0byBjYWxsIHRoZSBjb2xvciBwaWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBkaXZcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpIHtcbiAgICAvLyBjbGVhciB0aGUgY2FsbGJhY2sgZnJvbSB0aGlzIGRpdlxuICAgIGRpdi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKGRpdik7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zaG93KCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENvbG9yKHZhbHVlKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldFVwZGF0ZUNhbGxiYWNrKChjb2xvcikgPT4ge1xuICAgICAgY29uc3QgY29sb3JTdHJpbmcgPVxuICAgICAgICBcInJnYmEoXCIgKyBjb2xvci5yICsgXCIsXCIgKyBjb2xvci5nICsgXCIsXCIgKyBjb2xvci5iICsgXCIsXCIgKyBjb2xvci5hICsgXCIpXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JTdHJpbmc7XG4gICAgICB0aGlzLl91cGRhdGUoY29sb3JTdHJpbmcsIHBhdGgpO1xuICAgIH0pO1xuXG4gICAgLy8gb24gY2xvc2Ugb2YgdGhlIGNvbG9ycGlja2VyLCByZXN0b3JlIHRoZSBjYWxsYmFjay5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENsb3NlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogcGFyc2UgYW4gb2JqZWN0IGFuZCBkcmF3IHRoZSBjb3JyZWN0IGl0ZW1zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtBcnJheX0gW3BhdGg9W11dICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tPbmx5PWZhbHNlXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVPYmplY3Qob2JqLCBwYXRoID0gW10sIGNoZWNrT25seSA9IGZhbHNlKSB7XG4gICAgbGV0IHNob3cgPSBmYWxzZTtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCB2aXNpYmxlSW5TZXQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHN1Yk9iaiBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBzdWJPYmopKSB7XG4gICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICBjb25zdCBpdGVtID0gb2JqW3N1Yk9ial07XG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgc3ViT2JqKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIoc3ViT2JqLCBwYXRoKTtcblxuICAgICAgICAgIC8vIGlmIG5lZWRlZCB3ZSBtdXN0IGdvIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICAgICAgaWYgKHNob3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGl0ZW0pICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICAgICAgICBpdGVtIGluc3RhbmNlb2YgT2JqZWN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgIHNob3cgPSB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGNoZWNrT25seSA9PT0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdmlzaWJsZUluU2V0ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKG5ld1BhdGgpO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycmF5KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlVGV4dElucHV0KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIHNraXAgdGhlIG9wdGlvbnMgdGhhdCBhcmUgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5oaWRlT3B0aW9uKHBhdGgsIHN1Yk9iaiwgdGhpcy5tb2R1bGVPcHRpb25zKSkge1xuICAgICAgICAgICAgICAvLyBpbml0aWFsbHkgY29sbGFwc2Ugb3B0aW9ucyB3aXRoIGFuIGRpc2FibGVkIGVuYWJsZWQgb3B0aW9uLlxuICAgICAgICAgICAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmFibGVkUGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShuZXdQYXRoLCBcImVuYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoZW5hYmxlZFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChlbmFibGVkVmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgICB2aXNpYmxlSW5TZXQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlQ2hlY2tib3goaXRlbSwgZW5hYmxlZFZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwoc3ViT2JqLCBuZXdQYXRoLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdChpdGVtLCBuZXdQYXRoKSB8fCB2aXNpYmxlSW5TZXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImRvbnQga25vdyBob3cgdG8gaGFuZGxlXCIsIGl0ZW0sIHN1Yk9iaiwgbmV3UGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlSW5TZXQ7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSBhcnJheSB0eXBlIG9mIG9wdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUFycmF5KGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIiAmJiBhcnJbMF0gPT09IFwiY29sb3JcIikge1xuICAgICAgdGhpcy5fbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzFdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9tYWtlRHJvcGRvd24oYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogTnVtYmVyKHZhbHVlKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGVkIHRvIHVwZGF0ZSB0aGUgbmV0d29yayB3aXRoIHRoZSBuZXcgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGUodmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBhcmVudC5ib2R5ICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIgJiZcbiAgICAgIHRoaXMucGFyZW50LmJvZHkuZW1pdHRlci5lbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdChcImNvbmZpZ0NoYW5nZVwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5wYXJlbnQuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IGJvb2xlYW59IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHt7fX0gb3B0aW9uc09ialxuICAgKiBAcmV0dXJucyB7e319XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCwgb3B0aW9uc09iaiA9IHt9KSB7XG4gICAgbGV0IHBvaW50ZXIgPSBvcHRpb25zT2JqO1xuXG4gICAgLy8gd2hlbiBkcm9wZG93biBib3hlcyBjYW4gYmUgc3RyaW5nIG9yIGJvb2xlYW4sIHdlIHR5cGVjYXN0IGl0IGludG8gY29ycmVjdCB0eXBlc1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdmFsdWU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXRoW2ldICE9PSBcImdsb2JhbFwiKSB7XG4gICAgICAgIGlmIChwb2ludGVyW3BhdGhbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBhdGgubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHBvaW50ZXIgPSBwb2ludGVyW3BhdGhbaV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvaW50ZXJbcGF0aFtpXV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc09iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByaW50T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG5cbiAgICB3aGlsZSAodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm9wdGlvbnNDb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChcbiAgICAgIHdyYXBJblRhZyhcInByZVwiLCBcImNvbnN0IG9wdGlvbnMgPSBcIiArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMsIG51bGwsIDIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge3t9fSBvcHRpb25zXG4gICAqL1xuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hhbmdlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2NvbnN0cnVjdE9wdGlvbnMoXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0udmFsdWUsXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0ucGF0aCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn07XG5cbi8qKlxuICogUG9wdXAgaXMgYSBjbGFzcyB0byBjcmVhdGUgYSBwb3B1cCB3aW5kb3cgd2l0aCBzb21lIHRleHRcbiAqL1xubGV0IFBvcHVwJDEgPSBjbGFzcyBQb3B1cCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgICAgICBUaGUgY29udGFpbmVyIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvdmVyZmxvd01ldGhvZCAgSG93IHRoZSBwb3B1cCBzaG91bGQgYWN0IHRvIG92ZXJmbG93aW5nICgnZmxpcCcgb3IgJ2NhcCcpXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIG92ZXJmbG93TWV0aG9kKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5vdmVyZmxvd01ldGhvZCA9IG92ZXJmbG93TWV0aG9kIHx8IFwiY2FwXCI7XG5cbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5wYWRkaW5nID0gNTtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBmcmFtZVxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtdG9vbHRpcFwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4ICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcG9wdXAgd2luZG93XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgc2V0UG9zaXRpb24oeCwgeSkge1xuICAgIHRoaXMueCA9IHBhcnNlSW50KHgpO1xuICAgIHRoaXMueSA9IHBhcnNlSW50KHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29udGVudCBmb3IgdGhlIHBvcHVwIHdpbmRvdy4gVGhpcyBjYW4gYmUgSFRNTCBjb2RlIG9yIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgRWxlbWVudH0gY29udGVudFxuICAgKi9cbiAgc2V0VGV4dChjb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICB3aGlsZSAodGhpcy5mcmFtZS5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0cmluZyBjb250YWluaW5nIGxpdGVyYWwgdGV4dCwgZWxlbWVudCBoYXMgdG8gYmUgdXNlZCBmb3IgSFRNTCBkdWUgdG9cbiAgICAgIC8vIFhTUyByaXNrcyBhc3NvY2lhdGVkIHdpdGggaW5uZXJIVE1MIChpLmUuIHByZXZlbnQgWFNTIGJ5IGFjY2lkZW50KS5cbiAgICAgIHRoaXMuZnJhbWUuaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgd2luZG93XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvU2hvd10gICAgU2hvdyBvciBoaWRlIHRoZSB3aW5kb3dcbiAgICovXG4gIHNob3coZG9TaG93KSB7XG4gICAgaWYgKGRvU2hvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb1Nob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkb1Nob3cgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmZyYW1lLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudFdpZHRoO1xuXG4gICAgICBsZXQgbGVmdCA9IDAsXG4gICAgICAgIHRvcCA9IDA7XG5cbiAgICAgIGlmICh0aGlzLm92ZXJmbG93TWV0aG9kID09IFwiZmxpcFwiKSB7XG4gICAgICAgIGxldCBpc0xlZnQgPSBmYWxzZSxcbiAgICAgICAgICBpc1RvcCA9IHRydWU7IC8vIFdoZXJlIGFyb3VuZCB0aGUgcG9zaXRpb24gaXQncyBsb2NhdGVkXG5cbiAgICAgICAgaWYgKHRoaXMueSAtIGhlaWdodCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzVG9wID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy54ICsgd2lkdGggPiBtYXhXaWR0aCAtIHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzTGVmdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMZWZ0KSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMueCAtIHdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUb3ApIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIGlmICh0b3AgKyBoZWlnaHQgKyB0aGlzLnBhZGRpbmcgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICB0b3AgPSBtYXhIZWlnaHQgLSBoZWlnaHQgLSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvcCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIHRvcCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIGlmIChsZWZ0ICsgd2lkdGggKyB0aGlzLnBhZGRpbmcgPiBtYXhXaWR0aCkge1xuICAgICAgICAgIGxlZnQgPSBtYXhXaWR0aCAtIHdpZHRoIC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWZ0IDwgdGhpcy5wYWRkaW5nKSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcbiAgICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZSk7IC8vIFJlbW92ZSBlbGVtZW50IGZyb20gRE9NXG4gIH1cbn07XG5cbmxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5sZXQgYWxsT3B0aW9ucztcblxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDEgPSBcImJhY2tncm91bmQ6ICNGRmVlZWU7IGNvbG9yOiAjZGQwMDAwXCI7XG5cbi8qKlxuICogIFVzZWQgdG8gdmFsaWRhdGUgb3B0aW9ucy5cbiAqL1xubGV0IFZhbGlkYXRvciQxID0gY2xhc3MgVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWJPYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBzdWJPYmplY3QpIHtcbiAgICBlcnJvckZvdW5kID0gZmFsc2U7XG4gICAgYWxsT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgbGV0IHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9ucztcbiAgICBpZiAoc3ViT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9uc1tzdWJPYmplY3RdO1xuICAgIH1cbiAgICBWYWxpZGF0b3IucGFyc2Uob3B0aW9ucywgdXNlZE9wdGlvbnMsIFtdKTtcbiAgICByZXR1cm4gZXJyb3JGb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIHRyYXZlcnNlIGFuIG9iamVjdCByZWN1cnNpdmVseSBhbmQgY2hlY2sgZXZlcnkgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICAgIFZhbGlkYXRvci5jaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBldmVyeSB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbCB0aGUgcGFyc2UgZnVuY3Rpb24gb24gdGhhdCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpIHtcbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIFZhbGlkYXRvci5nZXRTdWdnZXN0aW9uKG9wdGlvbiwgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlZmVyZW5jZU9wdGlvbiA9IG9wdGlvbjtcbiAgICBsZXQgaXNfb2JqZWN0ID0gdHJ1ZTtcblxuICAgIGlmIChcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnNbb3B0aW9uXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICByZWZlcmVuY2VPcHRpb25zLl9fYW55X18gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTk9URTogVGhpcyBvbmx5IHRyaWdnZXJzIGlmIHRoZSBfX2FueV9fIGlzIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgLy8gICAgICAgVEhBVCdTIEEgUkVBTExZIEJBRCBQTEFDRSBUTyBBTExPVyBJVCEhISFcbiAgICAgIC8vIFRPRE86IEV4YW1pbmUgaWYgbmVlZGVkLCByZW1vdmUgaWYgcG9zc2libGVcblxuICAgICAgLy8gX19hbnlfXyBpcyBhIHdpbGRjYXJkLiBBbnkgdmFsdWUgaXMgYWNjZXB0ZWQgYW5kIHdpbGwgYmUgZnVydGhlciBhbmFseXNlZCBieSByZWZlcmVuY2UuXG4gICAgICByZWZlcmVuY2VPcHRpb24gPSBcIl9fYW55X19cIjtcblxuICAgICAgLy8gaWYgdGhlIGFueS1zdWJncm91cCBpcyBub3QgYSBwcmVkZWZpbmVkIG9iamVjdCBpbiB0aGUgY29uZmlndXJhdG9yLFxuICAgICAgLy8gd2UgZG8gbm90IGxvb2sgZGVlcGVyIGludG8gdGhlIG9iamVjdC5cbiAgICAgIGlzX29iamVjdCA9IFZhbGlkYXRvci5nZXRUeXBlKG9wdGlvbnNbb3B0aW9uXSkgPT09IFwib2JqZWN0XCI7XG4gICAgfVxuXG4gICAgbGV0IHJlZk9wdGlvbk9iaiA9IHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXTtcbiAgICBpZiAoaXNfb2JqZWN0ICYmIHJlZk9wdGlvbk9iai5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWZPcHRpb25PYmogPSByZWZPcHRpb25PYmouX190eXBlX187XG4gICAgfVxuXG4gICAgVmFsaWRhdG9yLmNoZWNrRmllbGRzKFxuICAgICAgb3B0aW9uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb24sXG4gICAgICByZWZPcHRpb25PYmosXG4gICAgICBwYXRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIG9wdGlvbiAgICAgICAgICAgfCB0aGUgb3B0aW9uIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgb3B0aW9ucyAgICAgICAgICB8IFRoZSBzdXBwbGllZCBvcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge29iamVjdH0gIHJlZmVyZW5jZU9wdGlvbnMgfCBUaGUgcmVmZXJlbmNlIG9wdGlvbnMgY29udGFpbmluZyBhbGwgb3B0aW9ucyBhbmQgdGhlaXIgYWxsb3dlZCBmb3JtYXRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgcmVmZXJlbmNlT3B0aW9uICB8IFVzdWFsbHkgdGhpcyBpcyB0aGUgc2FtZSBhcyBvcHRpb24sIGV4Y2VwdCB3aGVuIGhhbmRsaW5nIGFuIF9fYW55X18gdGFnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZk9wdGlvbk9iaiAgICAgfCBUaGlzIGlzIHRoZSB0eXBlIG9iamVjdCBmcm9tIHRoZSByZWZlcmVuY2Ugb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSAgIHBhdGggICAgICAgICAgICAgfCB3aGVyZSBpbiB0aGUgb2JqZWN0IGlzIHRoZSBvcHRpb25cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNoZWNrRmllbGRzKFxuICAgIG9wdGlvbixcbiAgICBvcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgIHJlZk9wdGlvbk9iaixcbiAgICBwYXRoXG4gICkge1xuICAgIGNvbnN0IGxvZyA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjXCIgKyBtZXNzYWdlICsgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKSxcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvblR5cGUgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pO1xuICAgIGNvbnN0IHJlZk9wdGlvblR5cGUgPSByZWZPcHRpb25PYmpbb3B0aW9uVHlwZV07XG5cbiAgICBpZiAocmVmT3B0aW9uVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpZiB0aGUgdHlwZSBpcyBjb3JyZWN0LCB3ZSBjaGVjayBpZiBpdCBpcyBzdXBwb3NlZCB0byBiZSBvbmUgb2YgYSBmZXcgc2VsZWN0IHZhbHVlc1xuICAgICAgaWYgKFxuICAgICAgICBWYWxpZGF0b3IuZ2V0VHlwZShyZWZPcHRpb25UeXBlKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgIHJlZk9wdGlvblR5cGUuaW5kZXhPZihvcHRpb25zW29wdGlvbl0pID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICAnSW52YWxpZCBvcHRpb24gZGV0ZWN0ZWQgaW4gXCInICtcbiAgICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgICAnXCIuJyArXG4gICAgICAgICAgICBcIiBBbGxvd2VkIHZhbHVlcyBhcmU6XCIgK1xuICAgICAgICAgICAgVmFsaWRhdG9yLnByaW50KHJlZk9wdGlvblR5cGUpICtcbiAgICAgICAgICAgICcgbm90IFwiJyArXG4gICAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICAgJ1wiLiAnXG4gICAgICAgICk7XG4gICAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25UeXBlID09PSBcIm9iamVjdFwiICYmIHJlZmVyZW5jZU9wdGlvbiAhPT0gXCJfX2FueV9fXCIpIHtcbiAgICAgICAgcGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcHRpb24pO1xuICAgICAgICBWYWxpZGF0b3IucGFyc2UoXG4gICAgICAgICAgb3B0aW9uc1tvcHRpb25dLFxuICAgICAgICAgIHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWZPcHRpb25PYmpbXCJhbnlcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdHlwZSBvZiB0aGUgZmllbGQgaXMgaW5jb3JyZWN0IGFuZCB0aGUgZmllbGQgY2Fubm90IGJlIGFueVxuICAgICAgbG9nKFxuICAgICAgICAnSW52YWxpZCB0eXBlIHJlY2VpdmVkIGZvciBcIicgK1xuICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgJ1wiLiBFeHBlY3RlZDogJyArXG4gICAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKHJlZk9wdGlvbk9iaikpICtcbiAgICAgICAgICBcIi4gUmVjZWl2ZWQgW1wiICtcbiAgICAgICAgICBvcHRpb25UeXBlICtcbiAgICAgICAgICAnXSBcIicgK1xuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSArXG4gICAgICAgICAgJ1wiJ1xuICAgICAgKTtcbiAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcgfCBBcnJheS48bnVtYmVyPiB8IERhdGUgfCBOb2RlIHwgTW9tZW50IHwgdW5kZWZpbmVkIHwgbnVsbH0gb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRUeXBlKG9iamVjdCkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xuXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Lm5vZGVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFwiZG9tXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Ll9pc0FNb21lbnRPYmplY3QgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIFwibW9tZW50XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRTdWdnZXN0aW9uKG9wdGlvbiwgb3B0aW9ucywgcGF0aCkge1xuICAgIGNvbnN0IGxvY2FsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCBmYWxzZSk7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBhbGxPcHRpb25zLCBbXSwgdHJ1ZSk7XG5cbiAgICBjb25zdCBsb2NhbFNlYXJjaFRocmVzaG9sZCA9IDg7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoVGhyZXNob2xkID0gNDtcblxuICAgIGxldCBtc2c7XG4gICAgaWYgKGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgJ1BlcmhhcHMgaXQgd2FzIGluY29tcGxldGU/IERpZCB5b3UgbWVhbjogXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guaW5kZXhNYXRjaCArXG4gICAgICAgICdcIj9cXG5cXG4nO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBnbG9iYWxTZWFyY2guZGlzdGFuY2UgPD0gZ2xvYmFsU2VhcmNoVGhyZXNob2xkICYmXG4gICAgICBsb2NhbFNlYXJjaC5kaXN0YW5jZSA+IGdsb2JhbFNlYXJjaC5kaXN0YW5jZVxuICAgICkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgXCJQZXJoYXBzIGl0IHdhcyBtaXNwbGFjZWQ/IE1hdGNoaW5nIG9wdGlvbiBmb3VuZCBhdDogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihcbiAgICAgICAgICBnbG9iYWxTZWFyY2gucGF0aCxcbiAgICAgICAgICBnbG9iYWxTZWFyY2guY2xvc2VzdE1hdGNoLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxvY2FsU2VhcmNoLmRpc3RhbmNlIDw9IGxvY2FsU2VhcmNoVGhyZXNob2xkKSB7XG4gICAgICBtc2cgPVxuICAgICAgICAnLiBEaWQgeW91IG1lYW4gXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guY2xvc2VzdE1hdGNoICtcbiAgICAgICAgJ1wiPycgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPVxuICAgICAgICBcIi4gRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZTogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnQoT2JqZWN0LmtleXMob3B0aW9ucykpICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6IFwiJyArIG9wdGlvbiArICdcIicgKyBtc2csXG4gICAgICBWQUxJREFUT1JfUFJJTlRfU1RZTEUkMVxuICAgICk7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2UgdGhlIG9wdGlvbnMgaW4gc2VhcmNoIGZvciBhIG1hdGNoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWN1cnNpdmU9ZmFsc2VdXG4gICAqIEByZXR1cm5zIHt7Y2xvc2VzdE1hdGNoOiBzdHJpbmcsIHBhdGg6IEFycmF5LCBkaXN0YW5jZTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCByZWN1cnNpdmUgPSBmYWxzZSkge1xuICAgIGxldCBtaW4gPSAxZTk7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaCA9IFwiXCI7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaFBhdGggPSBbXTtcbiAgICBjb25zdCBsb3dlckNhc2VPcHRpb24gPSBvcHRpb24udG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgaW5kZXhNYXRjaCA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IG9wIGluIG9wdGlvbnMpIHtcbiAgICAgIGxldCBkaXN0YW5jZTtcbiAgICAgIGlmIChvcHRpb25zW29wXS5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkICYmIHJlY3Vyc2l2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBWYWxpZGF0b3IuZmluZEluT3B0aW9ucyhcbiAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgb3B0aW9uc1tvcF0sXG4gICAgICAgICAgY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIG9wKVxuICAgICAgICApO1xuICAgICAgICBpZiAobWluID4gcmVzdWx0LmRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gcmVzdWx0LmNsb3Nlc3RNYXRjaDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gcmVzdWx0LnBhdGg7XG4gICAgICAgICAgbWluID0gcmVzdWx0LmRpc3RhbmNlO1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSByZXN1bHQuaW5kZXhNYXRjaDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihsb3dlckNhc2VPcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSBvcDtcbiAgICAgICAgfVxuICAgICAgICBkaXN0YW5jZSA9IFZhbGlkYXRvci5sZXZlbnNodGVpbkRpc3RhbmNlKG9wdGlvbiwgb3ApO1xuICAgICAgICBpZiAobWluID4gZGlzdGFuY2UpIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2ggPSBvcDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gY29weUFycmF5KHBhdGgpO1xuICAgICAgICAgIG1pbiA9IGRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZXN0TWF0Y2g6IGNsb3Nlc3RNYXRjaCxcbiAgICAgIHBhdGg6IGNsb3Nlc3RNYXRjaFBhdGgsXG4gICAgICBkaXN0YW5jZTogbWluLFxuICAgICAgaW5kZXhNYXRjaDogaW5kZXhNYXRjaCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiwgcHJlZml4ID0gXCJQcm9ibGVtIHZhbHVlIGZvdW5kIGF0OiBcXG5cIikge1xuICAgIGxldCBzdHIgPSBcIlxcblxcblwiICsgcHJlZml4ICsgXCJvcHRpb25zID0ge1xcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpICsgMTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gcGF0aFtpXSArIFwiOiB7XFxuXCI7XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggKyAxOyBqKyspIHtcbiAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgfVxuICAgIHN0ciArPSBvcHRpb24gKyBcIlxcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggLSBpOyBqKyspIHtcbiAgICAgICAgc3RyICs9IFwiICBcIjtcbiAgICAgIH1cbiAgICAgIHN0ciArPSBcIn1cXG5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0ciArIFwiXFxuXFxuXCI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHByaW50KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3B0aW9ucylcbiAgICAgIC5yZXBsYWNlKC8oXCIpfChcXFspfChcXF0pfCgsXCJfX3R5cGVfX1wiKS9nLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoLygsKS9nLCBcIiwgXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqICBDb21wdXRlIHRoZSBlZGl0IGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBnaXZlbiBzdHJpbmdzXG4gICAqIGh0dHA6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL1N0cmluZ3MvTGV2ZW5zaHRlaW5fZGlzdGFuY2UjSmF2YVNjcmlwdFxuICAgKlxuICAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQW5kcmVpIE1hY2tlbnppZVxuICAgKlxuICAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgKlxuICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgICpcbiAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGxldmVuc2h0ZWluRGlzdGFuY2UoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGEubGVuZ3RoO1xuXG4gICAgY29uc3QgbWF0cml4ID0gW107XG5cbiAgICAvLyBpbmNyZW1lbnQgYWxvbmcgdGhlIGZpcnN0IGNvbHVtbiBvZiBlYWNoIHJvd1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4W2ldID0gW2ldO1xuICAgIH1cblxuICAgIC8vIGluY3JlbWVudCBlYWNoIGNvbHVtbiBpbiB0aGUgZmlyc3Qgcm93XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cblxuICAgIC8vIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIG1hdHJpeFxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT0gYS5jaGFyQXQoaiAtIDEpKSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2kgLSAxXVtqIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgICAgICBtYXRyaXhbaSAtIDFdW2ogLSAxXSArIDEsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgIG1hdHJpeFtpXVtqIC0gMV0gKyAxLCAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqXSArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApOyAvLyBkZWxldGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xuICB9XG59O1xuXG5jb25zdCBBY3RpdmF0b3IgPSBBY3RpdmF0b3IkMTtcclxuY29uc3QgQ29sb3JQaWNrZXIgPSBDb2xvclBpY2tlciQxO1xyXG5jb25zdCBDb25maWd1cmF0b3IgPSBDb25maWd1cmF0b3IkMTtcclxuY29uc3QgSGFtbWVyID0gSGFtbWVyJDE7XHJcbmNvbnN0IFBvcHVwID0gUG9wdXAkMTtcclxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFID0gVkFMSURBVE9SX1BSSU5UX1NUWUxFJDE7XHJcbmNvbnN0IFZhbGlkYXRvciA9IFZhbGlkYXRvciQxO1xuXG5leHBvcnQgeyBBY3RpdmF0b3IsIEFsZWEsIENvbG9yUGlja2VyLCBDb25maWd1cmF0b3IsIERFTEVURSwgSFNWVG9IZXgsIEhTVlRvUkdCLCBIYW1tZXIsIFBvcHVwLCBSR0JUb0hTViwgUkdCVG9IZXgsIFZBTElEQVRPUl9QUklOVF9TVFlMRSwgVmFsaWRhdG9yLCBhZGRDbGFzc05hbWUsIGFkZENzc1RleHQsIGJpbmFyeVNlYXJjaEN1c3RvbSwgYmluYXJ5U2VhcmNoVmFsdWUsIGJyaWRnZU9iamVjdCwgY29weUFuZEV4dGVuZEFycmF5LCBjb3B5QXJyYXksIGRlZXBFeHRlbmQsIGRlZXBPYmplY3RBc3NpZ24sIGVhc2luZ0Z1bmN0aW9ucywgZXF1YWxBcnJheSwgZXh0ZW5kLCBmaWxsSWZEZWZpbmVkLCBmb3JFYWNoLCBnZXRBYnNvbHV0ZUxlZnQsIGdldEFic29sdXRlUmlnaHQsIGdldEFic29sdXRlVG9wLCBnZXRTY3JvbGxCYXJXaWR0aCwgZ2V0VGFyZ2V0LCBnZXRUeXBlLCBoYXNQYXJlbnQsIGhleFRvSFNWLCBoZXhUb1JHQiwgaW5zZXJ0U29ydCwgaXNEYXRlLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1ZhbGlkSGV4LCBpc1ZhbGlkUkdCLCBpc1ZhbGlkUkdCQSwgbWVyZ2VPcHRpb25zLCBvcHRpb24sIG92ZXJyaWRlT3BhY2l0eSwgcGFyc2VDb2xvciwgcHJldmVudERlZmF1bHQsIHB1cmVEZWVwT2JqZWN0QXNzaWduLCByZWN1cnNpdmVET01EZWxldGUsIHJlbW92ZUNsYXNzTmFtZSwgcmVtb3ZlQ3NzVGV4dCwgc2VsZWN0aXZlQnJpZGdlT2JqZWN0LCBzZWxlY3RpdmVEZWVwRXh0ZW5kLCBzZWxlY3RpdmVFeHRlbmQsIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsIHRocm90dGxlLCB0b0FycmF5LCB0b3BNb3N0LCB1cGRhdGVQcm9wZXJ0eSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmlzLXV0aWwuanMubWFwXG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ29uc3RydWN0b3IoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xudmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgbmF0aXZlQ29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgUmVmbGVjdC5jb25zdHJ1Y3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmNvbnN0cnVjdFxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEobmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcblxudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxudmFyIEZPUkNFRCA9IE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHO1xuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiBGT1JDRUQgfSwge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhQ29uc3RydWN0b3IoVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhQ29uc3RydWN0b3IoYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gbmF0aXZlQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICBhcHBseShwdXNoLCAkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChhcHBseShiaW5kLCBUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3RQcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBhcHBseShUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5SZWZsZWN0LmNvbnN0cnVjdDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcmVmbGVjdC9jb25zdHJ1Y3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9yZWZsZWN0L2NvbnN0cnVjdFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xufTtcblxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSkgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIga2V5LCBkZXNjcmlwdG9yO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSA9IGtleXNbaW5kZXgrK10pO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yc1wiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgIT09IGRlZmluZVByb3BlcnRpZXMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnRpZXM6IGRlZmluZVByb3BlcnRpZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoVCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVCwgRCk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMuc2hhbSkgZGVmaW5lUHJvcGVydGllcy5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzXCIpOyIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3QvY3JlYXRlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBzZXRQcm90b3R5cGVPZjogc2V0UHJvdG90eXBlT2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL29iamVjdC9zZXQtcHJvdG90eXBlLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL2JpbmQnKTtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfc2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRzZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkY3JlYXRlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZ2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfZ2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRnZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBfT2JqZWN0JGdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsICJ2YXIgX1N5bWJvbCA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCIpO1xudmFyIF9TeW1ib2wkaXRlcmF0b3IgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qc1wiKTtcbmZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgX1N5bWJvbCRpdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gX1N5bWJvbCAmJiBvICE9PSBfU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzKSwgX3R5cGVvZihvKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvaW5zdGFuY2UvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL2Zvci1lYWNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZID0gL1xcblxccyphdCBbXjpdKjpbXlxcbl0qLztcbnZhciBJU19WOF9PUl9DSEFLUkFfU1RBQ0sgPSBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkudGVzdChURVNUKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChJU19WOF9PUl9DSEFLUkFfU1RBQ0sgJiYgdHlwZW9mIHN0YWNrID09ICdzdHJpbmcnICYmICEkRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcbiAgICB3aGlsZSAoZHJvcEVudHJpZXMtLSkgc3RhY2sgPSByZXBsYWNlKHN0YWNrLCBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlksICcnKTtcbiAgfSByZXR1cm4gc3RhY2s7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY2xlYXJFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyJyk7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUnKTtcblxuLy8gbm9uLXN0YW5kYXJkIFY4XG52YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXJyb3IsIEMsIHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIHtcbiAgICBpZiAoY2FwdHVyZVN0YWNrVHJhY2UpIGNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBDKTtcbiAgICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY2xlYXJFcnJvclN0YWNrKHN0YWNrLCBkcm9wRW50cmllcykpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgUmVzdWx0UHJvdG90eXBlID0gUmVzdWx0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIHVuYm91bmRGdW5jdGlvbiwgb3B0aW9ucykge1xuICB2YXIgdGhhdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGF0O1xuICB2YXIgQVNfRU5UUklFUyA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5BU19FTlRSSUVTKTtcbiAgdmFyIElTX1JFQ09SRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19SRUNPUkQpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX1JFQ09SRCkge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGUuaXRlcmF0b3I7XG4gIH0gZWxzZSBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAoIWl0ZXJGbikgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoaXRlcmFibGUpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZXJhYmxlKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbEZuKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSwgaXRlckZuKTtcbiAgfVxuXG4gIG5leHQgPSBJU19SRUNPUkQgPyBpdGVyYWJsZS5uZXh0IDogaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxGbihzdGVwLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCAkZGVmYXVsdCkge1xuICByZXR1cm4gYXJndW1lbnQgPT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gJycgOiAkZGVmYXVsdCA6IHRvU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgaW5zdGFsbEVycm9yQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZScpO1xudmFyIGluc3RhbGxFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBub3JtYWxpemVTdHJpbmdBcmd1bWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG52YXIgJEFnZ3JlZ2F0ZUVycm9yID0gZnVuY3Rpb24gQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBtZXNzYWdlIC8qICwgb3B0aW9ucyAqLykge1xuICB2YXIgaXNJbnN0YW5jZSA9IGlzUHJvdG90eXBlT2YoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIHRoaXMpO1xuICB2YXIgdGhhdDtcbiAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgdGhhdCA9IHNldFByb3RvdHlwZU9mKG5ldyAkRXJyb3IoKSwgaXNJbnN0YW5jZSA/IGdldFByb3RvdHlwZU9mKHRoaXMpIDogQWdncmVnYXRlRXJyb3JQcm90b3R5cGUpO1xuICB9IGVsc2Uge1xuICAgIHRoYXQgPSBpc0luc3RhbmNlID8gdGhpcyA6IGNyZWF0ZShBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsIFRPX1NUUklOR19UQUcsICdFcnJvcicpO1xuICB9XG4gIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnbWVzc2FnZScsIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KG1lc3NhZ2UpKTtcbiAgaW5zdGFsbEVycm9yU3RhY2sodGhhdCwgJEFnZ3JlZ2F0ZUVycm9yLCB0aGF0LnN0YWNrLCAxKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSBpbnN0YWxsRXJyb3JDYXVzZSh0aGF0LCBhcmd1bWVudHNbMl0pO1xuICB2YXIgZXJyb3JzQXJyYXkgPSBbXTtcbiAgaXRlcmF0ZShlcnJvcnMsIHB1c2gsIHsgdGhhdDogZXJyb3JzQXJyYXkgfSk7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnZXJyb3JzJywgZXJyb3JzQXJyYXkpO1xuICByZXR1cm4gdGhhdDtcbn07XG5cbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoJEFnZ3JlZ2F0ZUVycm9yLCAkRXJyb3IpO1xuZWxzZSBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKCRBZ2dyZWdhdGVFcnJvciwgJEVycm9yLCB7IG5hbWU6IHRydWUgfSk7XG5cbnZhciBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSA9ICRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUgPSBjcmVhdGUoJEVycm9yLnByb3RvdHlwZSwge1xuICBjb25zdHJ1Y3RvcjogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICRBZ2dyZWdhdGVFcnJvciksXG4gIG1lc3NhZ2U6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnJyksXG4gIG5hbWU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnQWdncmVnYXRlRXJyb3InKVxufSk7XG5cbi8vIGBBZ2dyZWdhdGVFcnJvcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWdncmVnYXRlLWVycm9yLWNvbnN0cnVjdG9yXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDIgfSwge1xuICBBZ2dyZWdhdGVFcnJvcjogJEFnZ3JlZ2F0ZUVycm9yXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoQ29uc3RydWN0b3IsIFNQRUNJRVMsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICAgIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCBpc051bGxPclVuZGVmaW5lZChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUNvbnN0cnVjdG9yKFMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gLyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgc2V0ID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyICRsb2NhdGlvbiwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbmZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gRGVubyB0aHJvd3MgYSBSZWZlcmVuY2VFcnJvciBvbiBgbG9jYXRpb25gIGFjY2VzcyB3aXRob3V0IGAtLWxvY2F0aW9uYCBmbGFnXG4gICRsb2NhdGlvbiA9IGdsb2JhbC5sb2NhdGlvbjtcbn0pO1xuXG52YXIgcnVuID0gZnVuY3Rpb24gKGlkKSB7XG4gIGlmIChoYXNPd24ocXVldWUsIGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG5cbnZhciBydW5uZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBydW4oaWQpO1xuICB9O1xufTtcblxudmFyIGV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuKGV2ZW50LmRhdGEpO1xufTtcblxudmFyIGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gb2xkIGVuZ2luZXMgaGF2ZSBub3QgbG9jYXRpb24ub3JpZ2luXG4gIGdsb2JhbC5wb3N0TWVzc2FnZShTdHJpbmcoaWQpLCAkbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgJGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShoYW5kbGVyKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXIgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAoSVNfTk9ERSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3cocnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICAvLyBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzYyNFxuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsICYmICFJU19JT1MpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBldmVudExpc3RlbmVyO1xuICAgIGRlZmVyID0gYmluZChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0KTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoXG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiZcbiAgICBpc0NhbGxhYmxlKGdsb2JhbC5wb3N0TWVzc2FnZSkgJiZcbiAgICAhZ2xvYmFsLmltcG9ydFNjcmlwdHMgJiZcbiAgICAkbG9jYXRpb24gJiYgJGxvY2F0aW9uLnByb3RvY29sICE9PSAnZmlsZTonICYmXG4gICAgIWZhaWxzKGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIpXG4gICkge1xuICAgIGRlZmVyID0gZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlcjtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhlYWQgPSBudWxsO1xuICB0aGlzLnRhaWwgPSBudWxsO1xufTtcblxuUXVldWUucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdmFyIGVudHJ5ID0geyBpdGVtOiBpdGVtLCBuZXh0OiBudWxsIH07XG4gICAgdmFyIHRhaWwgPSB0aGlzLnRhaWw7XG4gICAgaWYgKHRhaWwpIHRhaWwubmV4dCA9IGVudHJ5O1xuICAgIGVsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgdGhpcy50YWlsID0gZW50cnk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbnRyeSA9IHRoaXMuaGVhZDtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHZhciBuZXh0ID0gdGhpcy5oZWFkID0gZW50cnkubmV4dDtcbiAgICAgIGlmIChuZXh0ID09PSBudWxsKSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgcmV0dXJuIGVudHJ5Lml0ZW07XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1ZXVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvaXBhZHxpcGhvbmV8aXBvZC9pLnRlc3QodXNlckFnZW50KSAmJiB0eXBlb2YgUGViYmxlICE9ICd1bmRlZmluZWQnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfSU9TX1BFQkJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZScpO1xudmFyIElTX1dFQk9TX1dFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0Jyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG4vLyBOb2RlLmpzIDExIHNob3dzIEV4cGVyaW1lbnRhbFdhcm5pbmcgb24gZ2V0dGluZyBgcXVldWVNaWNyb3Rhc2tgXG52YXIgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgbWljcm90YXNrID0gcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yICYmIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvci52YWx1ZTtcbnZhciBub3RpZnksIHRvZ2dsZSwgbm9kZSwgcHJvbWlzZSwgdGhlbjtcblxuLy8gbW9kZXJuIGVuZ2luZXMgaGF2ZSBxdWV1ZU1pY3JvdGFzayBtZXRob2RcbmlmICghbWljcm90YXNrKSB7XG4gIHZhciBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChmbiA9IHF1ZXVlLmdldCgpKSB0cnkge1xuICAgICAgZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHF1ZXVlLmhlYWQpIG5vdGlmeSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgLy8gYWxzbyBleGNlcHQgV2ViT1MgV2Via2l0IGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84OThcbiAgaWYgKCFJU19JT1MgJiYgIUlTX05PREUgJiYgIUlTX1dFQk9TX1dFQktJVCAmJiBNdXRhdGlvbk9ic2VydmVyICYmIGRvY3VtZW50KSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoIUlTX0lPU19QRUJCTEUgJiYgUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAvLyB3b3JrYXJvdW5kIG9mIFdlYktpdCB+IGlPUyBTYWZhcmkgMTAuMSBidWdcbiAgICBwcm9taXNlLmNvbnN0cnVjdG9yID0gUHJvbWlzZTtcbiAgICB0aGVuID0gYmluZChwcm9taXNlLnRoZW4sIHByb21pc2UpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIE5vZGUuanMgd2l0aG91dCBwcm9taXNlc1xuICB9IGVsc2UgaWYgKElTX05PREUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdlXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIC8vIGB3ZWJwYWNrYCBkZXYgc2VydmVyIGJ1ZyBvbiBJRSBnbG9iYWwgbWV0aG9kcyAtIHVzZSBiaW5kKGZuLCBnbG9iYWwpXG4gICAgbWFjcm90YXNrID0gYmluZChtYWNyb3Rhc2ssIGdsb2JhbCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFjcm90YXNrKGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgbWljcm90YXNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgaWYgKCFxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICBxdWV1ZS5hZGQoZm4pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1pY3JvdGFzaztcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gc2FmZVxuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjb25zb2xlLmVycm9yKGEpIDogY29uc29sZS5lcnJvcihhLCBiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLlByb21pc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIERlbm8gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBEZW5vID09ICdvYmplY3QnICYmIERlbm8gJiYgdHlwZW9mIERlbm8udmVyc2lvbiA9PSAnb2JqZWN0JztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfREVOTyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtZGVubycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhSVNfREVOTyAmJiAhSVNfTk9ERVxuICAmJiB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnXG4gICYmIHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfQlJPV1NFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3NlcicpO1xudmFyIElTX0RFTk8gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8nKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFNVQkNMQVNTSU5HID0gZmFsc2U7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gaXNDYWxsYWJsZShnbG9iYWwuUHJvbWlzZVJlamVjdGlvbkV2ZW50KTtcblxudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gaXNGb3JjZWQoJ1Byb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSA9IGluc3BlY3RTb3VyY2UoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSAhPT0gU3RyaW5nKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gIC8vIFdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiBWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSN7IGNhdGNoLCBmaW5hbGx5IH0gaW4gdGhlIHB1cmUgdmVyc2lvbiBmb3IgcHJldmVudGluZyBwcm90b3R5cGUgcG9sbHV0aW9uXG4gIGlmIChJU19QVVJFICYmICEoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10pKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKCFWOF9WRVJTSU9OIHx8IFY4X1ZFUlNJT04gPCA1MSB8fCAhL25hdGl2ZSBjb2RlLy50ZXN0KFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFKSkge1xuICAgIC8vIERldGVjdCBjb3JyZWN0bmVzcyBvZiBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSBuZXcgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUoMSk7IH0pO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgICB9O1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICAgIFNVQkNMQVNTSU5HID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZTtcbiAgICBpZiAoIVNVQkNMQVNTSU5HKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICB9IHJldHVybiAhR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiAoSVNfQlJPV1NFUiB8fCBJU19ERU5PKSAmJiAhTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDT05TVFJVQ1RPUjogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsXG4gIFJFSkVDVElPTl9FVkVOVDogTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5ULFxuICBTVUJDTEFTU0lORzogU1VCQ0xBU1NJTkdcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhQ2FsbGFibGUocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUNhbGxhYmxlKHJlamVjdCk7XG59O1xuXG4vLyBgTmV3UHJvbWlzZUNhcGFiaWxpdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uZXdwcm9taXNlY2FwYWJpbGl0eVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLkNPTlNUUlVDVE9SO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5SRUpFQ1RJT05fRVZFTlQ7XG52YXIgTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uU1VCQ0xBU1NJTkc7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvciA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcjtcbnZhciBQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG52YXIgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHk7XG5cbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcblxudmFyIEludGVybmFsLCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgUHJvbWlzZVdyYXBwZXIsIG5hdGl2ZVRoZW47XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIGlzQ2FsbGFibGUodGhlbiA9IGl0LnRoZW4pID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIGNhbGxSZWFjdGlvbiA9IGZ1bmN0aW9uIChyZWFjdGlvbiwgc3RhdGUpIHtcbiAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gIHZhciBvayA9IHN0YXRlLnN0YXRlID09PSBGVUxGSUxMRUQ7XG4gIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICB0cnkge1xuICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIGlmIChzdGF0ZS5yZWplY3Rpb24gPT09IFVOSEFORExFRCkgb25IYW5kbGVVbmhhbmRsZWQoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgfVxuICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTsgLy8gY2FuIHRocm93XG4gICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgY2FsbCh0aGVuLCByZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICByZWplY3QoZXJyb3IpO1xuICB9XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciByZWFjdGlvbnMgPSBzdGF0ZS5yZWFjdGlvbnM7XG4gICAgdmFyIHJlYWN0aW9uO1xuICAgIHdoaWxlIChyZWFjdGlvbiA9IHJlYWN0aW9ucy5nZXQoKSkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfVxuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCAmJiAoaGFuZGxlciA9IGdsb2JhbFsnb24nICsgbmFtZV0pKSBoYW5kbGVyKGV2ZW50KTtcbiAgZWxzZSBpZiAobmFtZSA9PT0gVU5IQU5ETEVEX1JFSkVDVElPTikgaG9zdFJlcG9ydEVycm9ycygnVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgcmVhc29uKTtcbn07XG5cbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgaWYgKElTX05PREUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFJFSkVDVElPTl9IQU5ETEVELCBwcm9taXNlLCBzdGF0ZS52YWx1ZSk7XG4gIH0pO1xufTtcblxudmFyIGJpbmQgPSBmdW5jdGlvbiAoZm4sIHN0YXRlLCB1bndyYXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGZuKHN0YXRlLCB2YWx1ZSwgdW53cmFwKTtcbiAgfTtcbn07XG5cbnZhciBpbnRlcm5hbFJlamVjdCA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlLnN0YXRlID0gUkVKRUNURUQ7XG4gIG5vdGlmeShzdGF0ZSwgdHJ1ZSk7XG59O1xuXG52YXIgaW50ZXJuYWxSZXNvbHZlID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgdHJ5IHtcbiAgICBpZiAoc3RhdGUuZmFjYWRlID09PSB2YWx1ZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGwodGhlbiwgdmFsdWUsXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVzb2x2ZSwgd3JhcHBlciwgc3RhdGUpLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlamVjdCwgd3JhcHBlciwgc3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpbnRlcm5hbFJlamVjdCh3cmFwcGVyLCBlcnJvciwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHN0YXRlLnN0YXRlID0gRlVMRklMTEVEO1xuICAgICAgbm90aWZ5KHN0YXRlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGludGVybmFsUmVqZWN0KHsgZG9uZTogZmFsc2UgfSwgZXJyb3IsIHN0YXRlKTtcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmIChGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUikge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICBhQ2FsbGFibGUoZXhlY3V0b3IpO1xuICAgIGNhbGwoSW50ZXJuYWwsIHRoaXMpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdChzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBQcm9taXNlUHJvdG90eXBlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIHR5cGU6IFBST01JU0UsXG4gICAgICBkb25lOiBmYWxzZSxcbiAgICAgIG5vdGlmaWVkOiBmYWxzZSxcbiAgICAgIHBhcmVudDogZmFsc2UsXG4gICAgICByZWFjdGlvbnM6IG5ldyBRdWV1ZSgpLFxuICAgICAgcmVqZWN0aW9uOiBmYWxzZSxcbiAgICAgIHN0YXRlOiBQRU5ESU5HLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9O1xuXG4gIC8vIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gIEludGVybmFsLnByb3RvdHlwZSA9IGRlZmluZUJ1aWx0SW4oUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgIHN0YXRlLnBhcmVudCA9IHRydWU7XG4gICAgcmVhY3Rpb24ub2sgPSBpc0NhbGxhYmxlKG9uRnVsZmlsbGVkKSA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICByZWFjdGlvbi5mYWlsID0gaXNDYWxsYWJsZShvblJlamVjdGVkKSAmJiBvblJlamVjdGVkO1xuICAgIHJlYWN0aW9uLmRvbWFpbiA9IElTX05PREUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc3RhdGUuc3RhdGUgPT09IFBFTkRJTkcpIHN0YXRlLnJlYWN0aW9ucy5hZGQocmVhY3Rpb24pO1xuICAgIGVsc2UgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxSZWFjdGlvbihyZWFjdGlvbiwgc3RhdGUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICB9KTtcblxuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHByb21pc2UpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKTtcbiAgICB0aGlzLnJlamVjdCA9IGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKTtcbiAgfTtcblxuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSBQcm9taXNlQ29uc3RydWN0b3IgfHwgQyA9PT0gUHJvbWlzZVdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcblxuICBpZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBuYXRpdmVUaGVuID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZS50aGVuO1xuXG4gICAgaWYgKCFOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORykge1xuICAgICAgLy8gbWFrZSBgUHJvbWlzZSN0aGVuYCByZXR1cm4gYSBwb2x5ZmlsbGVkIGBQcm9taXNlYCBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgY2FsbChuYXRpdmVUaGVuLCB0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NDBcbiAgICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8vIG1ha2UgYC5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIHRyeSB7XG4gICAgICBkZWxldGUgTmF0aXZlUHJvbWlzZVByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgICAvLyBtYWtlIGBpbnN0YW5jZW9mIFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIHNldFByb3RvdHlwZU9mKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIFByb21pc2U6IFByb21pc2VDb25zdHJ1Y3RvclxufSk7XG5cbnNldFRvU3RyaW5nVGFnKFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSwgZmFsc2UsIHRydWUpO1xuc2V0U3BlY2llcyhQUk9NSVNFKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbm1vZHVsZS5leHBvcnRzID0gRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfHwgIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLmFsbChpdGVyYWJsZSkudGhlbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5hbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwoJHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuLy8gYFByb21pc2UucHJvdG90eXBlLmNhdGNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsIHJlYWw6IHRydWUgfSwge1xuICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgfVxufSk7XG5cbi8vIG1ha2VzIHN1cmUgdGhhdCBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzIGBQcm9taXNlI2NhdGNoYCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2NhdGNoJ107XG4gIGlmIChOYXRpdmVQcm9taXNlUHJvdG90eXBlWydjYXRjaCddICE9PSBtZXRob2QpIHtcbiAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICdjYXRjaCcsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5yYWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlamVjdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVqZWN0XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKHRoaXMpO1xuICAgIGNhbGwoY2FwYWJpbGl0eS5yZWplY3QsIHVuZGVmaW5lZCwgcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG5cbnZhciBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID0gZ2V0QnVpbHRJbignUHJvbWlzZScpO1xudmFyIENIRUNLX1dSQVBQRVIgPSBJU19QVVJFICYmICFGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVzb2x2ZVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQ0hFQ0tfV1JBUFBFUiAmJiB0aGlzID09PSBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID8gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbFNldHRsZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbHNldHRsZWRcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFsbFNldHRsZWQ6IGZ1bmN0aW9uIGFsbFNldHRsZWQoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbChwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ2Z1bGZpbGxlZCcsIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdyZWplY3RlZCcsIHJlYXNvbjogZXJyb3IgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG52YXIgUFJPTUlTRV9BTllfRVJST1IgPSAnTm8gb25lIHByb21pc2UgcmVzb2x2ZWQnO1xuXG4vLyBgUHJvbWlzZS5hbnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFueVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYW55OiBmdW5jdGlvbiBhbnkoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIEFnZ3JlZ2F0ZUVycm9yID0gZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKTtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICB2YXIgYWxyZWFkeVJlc29sdmVkID0gZmFsc2U7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5UmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3JzW2luZGV4XSA9IGVycm9yO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbi8vIFNhZmFyaSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgyOVxudmFyIE5PTl9HRU5FUklDID0gISFOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10aGVuYWJsZSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10uY2FsbCh7IHRoZW46IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuZmluYWxseVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBOT05fR0VORVJJQyB9LCB7XG4gICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKSk7XG4gICAgdmFyIGlzRnVuY3Rpb24gPSBpc0NhbGxhYmxlKG9uRmluYWxseSk7XG4gICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5LFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseVxuICAgICk7XG4gIH1cbn0pO1xuXG4vLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNmaW5hbGx5YCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2ZpbmFsbHknXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSAhPT0gbWV0aG9kKSB7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnZmluYWxseScsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFueScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5Qcm9taXNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG4vLyBgUHJvbWlzZS53aXRoUmVzb2x2ZXJzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2Utd2l0aC1yZXNvbHZlcnNcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHdpdGhSZXNvbHZlcnM6IGZ1bmN0aW9uIHdpdGhSZXNvbHZlcnMoKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvbWlzZTogcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZSxcbiAgICAgIHJlc29sdmU6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUsXG4gICAgICByZWplY3Q6IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdFxuICAgIH07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvcHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS53aXRoLXJlc29sdmVycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xuXG4vLyBgUHJvbWlzZS50cnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgICAocmVzdWx0LmVycm9yID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9wcm9taXNlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuYWdncmVnYXRlLWVycm9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLmFsbC1zZXR0bGVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS5hbnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3Byb21pc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3JldmVyc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9pbnN0YW5jZS9yZXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9yZXZlcnNlJyk7XG4iLCAidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIF9PYmplY3QkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIik7XG52YXIgX1N5bWJvbCA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCIpO1xudmFyIF9PYmplY3QkY3JlYXRlID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzXCIpO1xudmFyIF9PYmplY3QkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvZm9yLWVhY2guanNcIik7XG52YXIgX3B1c2hJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9wdXNoLmpzXCIpO1xudmFyIF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIF9Qcm9taXNlID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9wcm9taXNlL2luZGV4LmpzXCIpO1xudmFyIF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZS5qc1wiKTtcbnZhciBfc2xpY2VJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZS5qc1wiKTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBfT2JqZWN0JGRlZmluZVByb3BlcnR5IHx8IGZ1bmN0aW9uICh0LCBlLCByKSB7XG4gICAgICB0W2VdID0gci52YWx1ZTtcbiAgICB9LFxuICAgIGkgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgPyBfU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHQsIGUsIHtcbiAgICAgIHZhbHVlOiByLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIHRbZV07XG4gIH1cbiAgdHJ5IHtcbiAgICBkZWZpbmUoe30sIFwiXCIpO1xuICB9IGNhdGNoICh0KSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICAgIHJldHVybiB0W2VdID0gcjtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdyYXAodCwgZSwgciwgbikge1xuICAgIHZhciBpID0gZSAmJiBlLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IGUgOiBHZW5lcmF0b3IsXG4gICAgICBhID0gX09iamVjdCRjcmVhdGUoaS5wcm90b3R5cGUpLFxuICAgICAgYyA9IG5ldyBDb250ZXh0KG4gfHwgW10pO1xuICAgIHJldHVybiBvKGEsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogbWFrZUludm9rZU1ldGhvZCh0LCByLCBjKVxuICAgIH0pLCBhO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKHQsIGUsIHIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICAgICAgYXJnOiB0LmNhbGwoZSwgcilcbiAgICAgIH07XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IHRcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGUud3JhcCA9IHdyYXA7XG4gIHZhciBoID0gXCJzdXNwZW5kZWRTdGFydFwiLFxuICAgIGwgPSBcInN1c3BlbmRlZFlpZWxkXCIsXG4gICAgZiA9IFwiZXhlY3V0aW5nXCIsXG4gICAgcyA9IFwiY29tcGxldGVkXCIsXG4gICAgeSA9IHt9O1xuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cbiAgdmFyIHAgPSB7fTtcbiAgZGVmaW5lKHAsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG4gIHZhciBkID0gX09iamVjdCRnZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHApO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHModCkge1xuICAgIHZhciBfY29udGV4dDtcbiAgICBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0pLmNhbGwoX2NvbnRleHQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkZWZpbmUodCwgZSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShlLCB0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IodCwgZSkge1xuICAgIGZ1bmN0aW9uIGludm9rZShyLCBvLCBpLCBhKSB7XG4gICAgICB2YXIgYyA9IHRyeUNhdGNoKHRbcl0sIHQsIG8pO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gYy50eXBlKSB7XG4gICAgICAgIHZhciB1ID0gYy5hcmcsXG4gICAgICAgICAgaCA9IHUudmFsdWU7XG4gICAgICAgIHJldHVybiBoICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZihoKSAmJiBuLmNhbGwoaCwgXCJfX2F3YWl0XCIpID8gZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pIDogZS5yZXNvbHZlKGgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICB1LnZhbHVlID0gdCwgaSh1KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYShjLmFyZyk7XG4gICAgfVxuICAgIHZhciByO1xuICAgIG8odGhpcywgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh0LCBuKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgZShmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgaW52b2tlKHQsIG4sIGUsIHIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByID0gciA/IHIudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGUsIHIsIG4pIHtcbiAgICB2YXIgbyA9IGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpLCBhKSB7XG4gICAgICBpZiAobyA9PT0gZikgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIGlmIChvID09PSBzKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IGkpIHRocm93IGE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IHQsXG4gICAgICAgICAgZG9uZTogITBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZvciAobi5tZXRob2QgPSBpLCBuLmFyZyA9IGE7Oykge1xuICAgICAgICB2YXIgYyA9IG4uZGVsZWdhdGU7XG4gICAgICAgIGlmIChjKSB7XG4gICAgICAgICAgdmFyIHUgPSBtYXliZUludm9rZURlbGVnYXRlKGMsIG4pO1xuICAgICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgICBpZiAodSA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gdTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwibmV4dFwiID09PSBuLm1ldGhvZCkgbi5zZW50ID0gbi5fc2VudCA9IG4uYXJnO2Vsc2UgaWYgKFwidGhyb3dcIiA9PT0gbi5tZXRob2QpIHtcbiAgICAgICAgICBpZiAobyA9PT0gaCkgdGhyb3cgbyA9IHMsIG4uYXJnO1xuICAgICAgICAgIG4uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpO1xuICAgICAgICB9IGVsc2UgXCJyZXR1cm5cIiA9PT0gbi5tZXRob2QgJiYgbi5hYnJ1cHQoXCJyZXR1cm5cIiwgbi5hcmcpO1xuICAgICAgICBvID0gZjtcbiAgICAgICAgdmFyIHAgPSB0cnlDYXRjaChlLCByLCBuKTtcbiAgICAgICAgaWYgKFwibm9ybWFsXCIgPT09IHAudHlwZSkge1xuICAgICAgICAgIGlmIChvID0gbi5kb25lID8gcyA6IGwsIHAuYXJnID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHAuYXJnLFxuICAgICAgICAgICAgZG9uZTogbi5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcInRocm93XCIgPT09IHAudHlwZSAmJiAobyA9IHMsIG4ubWV0aG9kID0gXCJ0aHJvd1wiLCBuLmFyZyA9IHAuYXJnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgcikge1xuICAgIHZhciBuID0gci5tZXRob2QsXG4gICAgICBvID0gZS5pdGVyYXRvcltuXTtcbiAgICBpZiAobyA9PT0gdCkgcmV0dXJuIHIuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG4gJiYgZS5pdGVyYXRvcltcInJldHVyblwiXSAmJiAoci5tZXRob2QgPSBcInJldHVyblwiLCByLmFyZyA9IHQsIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgciksIFwidGhyb3dcIiA9PT0gci5tZXRob2QpIHx8IFwicmV0dXJuXCIgIT09IG4gJiYgKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG4gKyBcIicgbWV0aG9kXCIpKSwgeTtcbiAgICB2YXIgaSA9IHRyeUNhdGNoKG8sIGUuaXRlcmF0b3IsIHIuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSBpLnR5cGUpIHJldHVybiByLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBpLmFyZywgci5kZWxlZ2F0ZSA9IG51bGwsIHk7XG4gICAgdmFyIGEgPSBpLmFyZztcbiAgICByZXR1cm4gYSA/IGEuZG9uZSA/IChyW2UucmVzdWx0TmFtZV0gPSBhLnZhbHVlLCByLm5leHQgPSBlLm5leHRMb2MsIFwicmV0dXJuXCIgIT09IHIubWV0aG9kICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCByLmRlbGVnYXRlID0gbnVsbCwgeSkgOiBhIDogKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeSh0KSB7XG4gICAgdmFyIF9jb250ZXh0MjtcbiAgICB2YXIgZSA9IHtcbiAgICAgIHRyeUxvYzogdFswXVxuICAgIH07XG4gICAgMSBpbiB0ICYmIChlLmNhdGNoTG9jID0gdFsxXSksIDIgaW4gdCAmJiAoZS5maW5hbGx5TG9jID0gdFsyXSwgZS5hZnRlckxvYyA9IHRbM10pLCBfcHVzaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQyID0gdGhpcy50cnlFbnRyaWVzKS5jYWxsKF9jb250ZXh0MiwgZSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeSh0KSB7XG4gICAgdmFyIGUgPSB0LmNvbXBsZXRpb24gfHwge307XG4gICAgZS50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIGUuYXJnLCB0LmNvbXBsZXRpb24gPSBlO1xuICB9XG4gIGZ1bmN0aW9uIENvbnRleHQodCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSh0KS5jYWxsKHQsIHB1c2hUcnlFbnRyeSwgdGhpcyksIHRoaXMucmVzZXQoITApO1xuICB9XG4gIGZ1bmN0aW9uIHZhbHVlcyhlKSB7XG4gICAgaWYgKGUgfHwgXCJcIiA9PT0gZSkge1xuICAgICAgdmFyIHIgPSBlW2FdO1xuICAgICAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLm5leHQpIHJldHVybiBlO1xuICAgICAgaWYgKCFpc05hTihlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIG8gPSAtMSxcbiAgICAgICAgICBpID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIGZvciAoOyArK28gPCBlLmxlbmd0aDspIGlmIChuLmNhbGwoZSwgbykpIHJldHVybiBuZXh0LnZhbHVlID0gZVtvXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBpLm5leHQgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF90eXBlb2YoZSkgKyBcIiBpcyBub3QgaXRlcmFibGVcIik7XG4gIH1cbiAgcmV0dXJuIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBvKGcsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBvKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb24sXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHQgJiYgdC5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFlICYmIChlID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChlLmRpc3BsYXlOYW1lIHx8IGUubmFtZSkpO1xuICB9LCBlLm1hcmsgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX09iamVjdCRzZXRQcm90b3R5cGVPZih0LCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAodC5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKHQsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCB0LnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKGcpLCB0O1xuICB9LCBlLmF3cmFwID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogdFxuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYywgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZS5hc3luYyA9IGZ1bmN0aW9uICh0LCByLCBuLCBvLCBpKSB7XG4gICAgdm9pZCAwID09PSBpICYmIChpID0gX1Byb21pc2UpO1xuICAgIHZhciBhID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcCh0LCByLCBuLCBvKSwgaSk7XG4gICAgcmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKSA/IGEgOiBhLm5leHQoKS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5kb25lID8gdC52YWx1ZSA6IGEubmV4dCgpO1xuICAgIH0pO1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoZyksIGRlZmluZShnLCB1LCBcIkdlbmVyYXRvclwiKSwgZGVmaW5lKGcsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGRlZmluZShnLCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfSksIGUua2V5cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBPYmplY3QodCksXG4gICAgICByID0gW107XG4gICAgZm9yICh2YXIgbiBpbiBlKSBfcHVzaEluc3RhbmNlUHJvcGVydHkocikuY2FsbChyLCBuKTtcbiAgICByZXR1cm4gX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5KHIpLmNhbGwociksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsgci5sZW5ndGg7KSB7XG4gICAgICAgIHZhciB0ID0gci5wb3AoKTtcbiAgICAgICAgaWYgKHQgaW4gZSkgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICB9O1xuICB9LCBlLnZhbHVlcyA9IHZhbHVlcywgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGUpIHtcbiAgICAgIHZhciBfY29udGV4dDM7XG4gICAgICBpZiAodGhpcy5wcmV2ID0gMCwgdGhpcy5uZXh0ID0gMCwgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB0LCBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQzID0gdGhpcy50cnlFbnRyaWVzKS5jYWxsKF9jb250ZXh0MywgcmVzZXRUcnlFbnRyeSksICFlKSBmb3IgKHZhciByIGluIHRoaXMpIFwidFwiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtfc2xpY2VJbnN0YW5jZVByb3BlcnR5KHIpLmNhbGwociwgMSkpICYmICh0aGlzW3JdID0gdCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgdCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZSkge1xuICAgICAgaWYgKHRoaXMuZG9uZSkgdGhyb3cgZTtcbiAgICAgIHZhciByID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShuLCBvKSB7XG4gICAgICAgIHJldHVybiBhLnR5cGUgPSBcInRocm93XCIsIGEuYXJnID0gZSwgci5uZXh0ID0gbiwgbyAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgISFvO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgbyA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBvID49IDA7IC0tbykge1xuICAgICAgICB2YXIgaSA9IHRoaXMudHJ5RW50cmllc1tvXSxcbiAgICAgICAgICBhID0gaS5jb21wbGV0aW9uO1xuICAgICAgICBpZiAoXCJyb290XCIgPT09IGkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoaS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGMgPSBuLmNhbGwoaSwgXCJjYXRjaExvY1wiKSxcbiAgICAgICAgICAgIHUgPSBuLmNhbGwoaSwgXCJmaW5hbGx5TG9jXCIpO1xuICAgICAgICAgIGlmIChjICYmIHUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF1KSB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChlLCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcixcbiAgICAgICAgbmV4dExvYzogblxuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHQpLCB5O1xuICAgIH1cbiAgfSwgZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gRkYyNi0gYnVnOiBBcnJheUJ1ZmZlcnMgYXJlIG5vbi1leHRlbnNpYmxlLCBidXQgT2JqZWN0LmlzRXh0ZW5zaWJsZSBkb2VzIG5vdCByZXBvcnQgaXRcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShidWZmZXIpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoYnVmZmVyLCAnYScsIHsgdmFsdWU6IDggfSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkaXNFeHRlbnNpYmxlKDEpOyB9KTtcblxuLy8gYE9iamVjdC5pc0V4dGVuc2libGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuaXNleHRlbnNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IChGQUlMU19PTl9QUklNSVRJVkVTIHx8IEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSkgPyBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBmYWxzZTtcbiAgaWYgKEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSAmJiBjbGFzc29mKGl0KSA9PT0gJ0FycmF5QnVmZmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZTtcbn0gOiAkaXNFeHRlbnNpYmxlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtcHJldmVudGV4dGVuc2lvbnMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgaXNFeHRlbnNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG5cbnZhciBSRVFVSVJFRCA9IGZhbHNlO1xudmFyIE1FVEFEQVRBID0gdWlkKCdtZXRhJyk7XG52YXIgaWQgPSAwO1xuXG52YXIgc2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgZGVmaW5lUHJvcGVydHkoaXQsIE1FVEFEQVRBLCB7IHZhbHVlOiB7XG4gICAgb2JqZWN0SUQ6ICdPJyArIGlkKyssIC8vIG9iamVjdCBJRFxuICAgIHdlYWtEYXRhOiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcblxudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gYSBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS5vYmplY3RJRDtcbn07XG5cbnZhciBnZXRXZWFrRGF0YSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gdGhlIHN0b3JlIG9mIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS53ZWFrRGF0YTtcbn07XG5cbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWklORyAmJiBSRVFVSVJFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXNPd24oaXQsIE1FVEFEQVRBKSkgc2V0TWV0YWRhdGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuXG52YXIgZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICBtZXRhLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiAgUkVRVUlSRUQgPSB0cnVlO1xuICB2YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZjtcbiAgdmFyIHNwbGljZSA9IHVuY3VycnlUaGlzKFtdLnNwbGljZSk7XG4gIHZhciB0ZXN0ID0ge307XG4gIHRlc3RbTUVUQURBVEFdID0gMTtcblxuICAvLyBwcmV2ZW50IGV4cG9zaW5nIG9mIG1ldGFkYXRhIGtleVxuICBpZiAoZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0KS5sZW5ndGgpIHtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdFtpXSA9PT0gTUVUQURBVEEpIHtcbiAgICAgICAgICBzcGxpY2UocmVzdWx0LCBpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAkKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZS5mXG4gICAgfSk7XG4gIH1cbn07XG5cbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuYWJsZTogZW5hYmxlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrRGF0YTogZ2V0V2Vha0RhdGEsXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcblxuaGlkZGVuS2V5c1tNRVRBREFUQV0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSwgd3JhcHBlciwgY29tbW9uKSB7XG4gIHZhciBJU19NQVAgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ01hcCcpICE9PSAtMTtcbiAgdmFyIElTX1dFQUsgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ1dlYWsnKSAhPT0gLTE7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl9OQU1FXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgdmFyIGV4cG9ydGVkID0ge307XG4gIHZhciBDb25zdHJ1Y3RvcjtcblxuICBpZiAoIURFU0NSSVBUT1JTIHx8ICFpc0NhbGxhYmxlKE5hdGl2ZUNvbnN0cnVjdG9yKVxuICAgIHx8ICEoSVNfV0VBSyB8fCBOYXRpdmVQcm90b3R5cGUuZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKS5lbnRyaWVzKCkubmV4dCgpOyB9KSlcbiAgKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDb25zdHJ1Y3RvciA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB9IGVsc2Uge1xuICAgIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZShhbkluc3RhbmNlKHRhcmdldCwgUHJvdG90eXBlKSwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBjb2xsZWN0aW9uOiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGFyZ2V0W0FEREVSXSwgeyB0aGF0OiB0YXJnZXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICBmb3JFYWNoKFsnYWRkJywgJ2NsZWFyJywgJ2RlbGV0ZScsICdmb3JFYWNoJywgJ2dldCcsICdoYXMnLCAnc2V0JywgJ2tleXMnLCAndmFsdWVzJywgJ2VudHJpZXMnXSwgZnVuY3Rpb24gKEtFWSkge1xuICAgICAgdmFyIElTX0FEREVSID0gS0VZID09PSAnYWRkJyB8fCBLRVkgPT09ICdzZXQnO1xuICAgICAgaWYgKEtFWSBpbiBOYXRpdmVQcm90b3R5cGUgJiYgIShJU19XRUFLICYmIEtFWSA9PT0gJ2NsZWFyJykpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFByb3RvdHlwZSwgS0VZLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5jb2xsZWN0aW9uO1xuICAgICAgICAgIGlmICghSVNfQURERVIgJiYgSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkpIHJldHVybiBLRVkgPT09ICdnZXQnID8gdW5kZWZpbmVkIDogZmFsc2U7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGNvbGxlY3Rpb25bS0VZXShhID09PSAwID8gMCA6IGEsIGIpO1xuICAgICAgICAgIHJldHVybiBJU19BRERFUiA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgSVNfV0VBSyB8fCBkZWZpbmVQcm9wZXJ0eShQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb24uc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgZXhwb3J0ZWRbQ09OU1RSVUNUT1JfTkFNRV0gPSBDb25zdHJ1Y3RvcjtcbiAgJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIGV4cG9ydGVkKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudW5zYWZlICYmIHRhcmdldFtrZXldKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICB9IHJldHVybiB0YXJnZXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBkZWZpbmVCdWlsdElucyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZmFzdEtleTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgUHJvdG90eXBlKTtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBpbmRleDogY3JlYXRlKG51bGwpLFxuICAgICAgICBmaXJzdDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWQsXG4gICAgICAgIHNpemU6IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCFERVNDUklQVE9SUykgdGhhdC5zaXplID0gMDtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0aGF0W0FEREVSXSwgeyB0aGF0OiB0aGF0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgUHJvdG90eXBlID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgdmFyIGdldEludGVybmFsU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gICAgdmFyIGRlZmluZSA9IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgIHZhciBwcmV2aW91cywgaW5kZXg7XG4gICAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUubGFzdCA9IGVudHJ5ID0ge1xuICAgICAgICAgIGluZGV4OiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSxcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgcHJldmlvdXM6IHByZXZpb3VzID0gc3RhdGUubGFzdCxcbiAgICAgICAgICBuZXh0OiB1bmRlZmluZWQsXG4gICAgICAgICAgcmVtb3ZlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdGF0ZS5maXJzdCkgc3RhdGUuZmlyc3QgPSBlbnRyeTtcbiAgICAgICAgaWYgKHByZXZpb3VzKSBwcmV2aW91cy5uZXh0ID0gZW50cnk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSsrO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSsrO1xuICAgICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHN0YXRlLmluZGV4W2luZGV4XSA9IGVudHJ5O1xuICAgICAgfSByZXR1cm4gdGhhdDtcbiAgICB9O1xuXG4gICAgdmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIC8vIGZhc3QgY2FzZVxuICAgICAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICAgICAgdmFyIGVudHJ5O1xuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiBzdGF0ZS5pbmRleFtpbmRleF07XG4gICAgICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgICAgIGZvciAoZW50cnkgPSBzdGF0ZS5maXJzdDsgZW50cnk7IGVudHJ5ID0gZW50cnkubmV4dCkge1xuICAgICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCB7XG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5jbGVhcigpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5jbGVhclxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBkYXRhID0gc3RhdGUuaW5kZXg7XG4gICAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmZpcnN0O1xuICAgICAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucHJldmlvdXMpIGVudHJ5LnByZXZpb3VzID0gZW50cnkucHJldmlvdXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmZpcnN0ID0gc3RhdGUubGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplID0gMDtcbiAgICAgICAgZWxzZSB0aGF0LnNpemUgPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmRlbGV0ZShrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubmV4dDtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5pbmRleFtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubmV4dCA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucHJldmlvdXMgPSBwcmV2O1xuICAgICAgICAgIGlmIChzdGF0ZS5maXJzdCA9PT0gZW50cnkpIHN0YXRlLmZpcnN0ID0gbmV4dDtcbiAgICAgICAgICBpZiAoc3RhdGUubGFzdCA9PT0gZW50cnkpIHN0YXRlLmxhc3QgPSBwcmV2O1xuICAgICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZS0tO1xuICAgICAgICAgIGVsc2UgdGhhdC5zaXplLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuZmlyc3QpIHtcbiAgICAgICAgICBib3VuZEZ1bmN0aW9uKGVudHJ5LnZhbHVlLCBlbnRyeS5rZXksIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXR9LnByb3RvdHlwZS5oYXMoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmhhc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmhhc1xuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIElTX01BUCA/IHtcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLmdldChrZXkpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5nZXRcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudmFsdWU7XG4gICAgICB9LFxuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5zZXRcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSA6IHtcbiAgICAgIC8vIGBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmFkZFxuICAgICAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCkge1xuICAgIHZhciBJVEVSQVRPUl9OQU1FID0gQ09OU1RSVUNUT1JfTkFNRSArICcgSXRlcmF0b3InO1xuICAgIHZhciBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG4gICAgdmFyIGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoSVRFUkFUT1JfTkFNRSk7XG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUueyBrZXlzLCB2YWx1ZXMsIGVudHJpZXMsIEBAaXRlcmF0b3IgfSgpYCBtZXRob2RzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICBkZWZpbmVJdGVyYXRvcihDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgICAgdHlwZTogSVRFUkFUT1JfTkFNRSxcbiAgICAgICAgdGFyZ2V0OiBpdGVyYXRlZCxcbiAgICAgICAgc3RhdGU6IGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlKGl0ZXJhdGVkKSxcbiAgICAgICAga2luZDoga2luZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUodGhpcyk7XG4gICAgICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gICAgICB2YXIgZW50cnkgPSBzdGF0ZS5sYXN0O1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXN0YXRlLnRhcmdldCB8fCAhKHN0YXRlLmxhc3QgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLnN0YXRlLmZpcnN0KSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PT0gJ2tleXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS5rZXksIGZhbHNlKTtcbiAgICAgIGlmIChraW5kID09PSAndmFsdWVzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkudmFsdWUsIGZhbHNlKTtcbiAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSwgZmFsc2UpO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlW0BAc3BlY2llc11gIGFjY2Vzc29yc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LW1hcC1AQHNwZWNpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1zZXQtQEBzcGVjaWVzXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAtb2JqZWN0c1xuY29sbGVjdGlvbignTWFwJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hcCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguTWFwO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9tYXAnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL21hcFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb21lJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvbWUnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc29tZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvbWUnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29tZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29tZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zb21lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29tZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2tleXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC9rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9rZXlzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmtleXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmtleXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXNcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgbWVyZ2VTb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICByZXR1cm4gbGVuZ3RoIDwgOCA/IGluc2VydGlvblNvcnQoYXJyYXksIGNvbXBhcmVmbikgOiBtZXJnZShcbiAgICBhcnJheSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgMCwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBjb21wYXJlZm5cbiAgKTtcbn07XG5cbnZhciBpbnNlcnRpb25Tb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIGkgPSAxO1xuICB2YXIgZWxlbWVudCwgajtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGogPSBpO1xuICAgIGVsZW1lbnQgPSBhcnJheVtpXTtcbiAgICB3aGlsZSAoaiAmJiBjb21wYXJlZm4oYXJyYXlbaiAtIDFdLCBlbGVtZW50KSA+IDApIHtcbiAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXTtcbiAgICB9XG4gICAgaWYgKGogIT09IGkrKykgYXJyYXlbal0gPSBlbGVtZW50O1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIChhcnJheSwgbGVmdCwgcmlnaHQsIGNvbXBhcmVmbikge1xuICB2YXIgbGxlbmd0aCA9IGxlZnQubGVuZ3RoO1xuICB2YXIgcmxlbmd0aCA9IHJpZ2h0Lmxlbmd0aDtcbiAgdmFyIGxpbmRleCA9IDA7XG4gIHZhciByaW5kZXggPSAwO1xuXG4gIHdoaWxlIChsaW5kZXggPCBsbGVuZ3RoIHx8IHJpbmRleCA8IHJsZW5ndGgpIHtcbiAgICBhcnJheVtsaW5kZXggKyByaW5kZXhdID0gKGxpbmRleCA8IGxsZW5ndGggJiYgcmluZGV4IDwgcmxlbmd0aClcbiAgICAgID8gY29tcGFyZWZuKGxlZnRbbGluZGV4XSwgcmlnaHRbcmluZGV4XSkgPD0gMCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdXG4gICAgICA6IGxpbmRleCA8IGxsZW5ndGggPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXTtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlU29ydDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBmaXJlZm94ID0gdXNlckFnZW50Lm1hdGNoKC9maXJlZm94XFwvKFxcZCspL2kpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhZmlyZWZveCAmJiArZmlyZWZveFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVUEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciB3ZWJraXQgPSB1c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvKFxcZCspXFwuLyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISF3ZWJraXQgJiYgK3dlYmtpdFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJuYWxTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBGRiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtZmYtdmVyc2lvbicpO1xudmFyIElFX09SX0VER0UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWllLW9yLWVkZ2UnKTtcbnZhciBWOCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIFdFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24nKTtcblxudmFyIHRlc3QgPSBbXTtcbnZhciBuYXRpdmVTb3J0ID0gdW5jdXJyeVRoaXModGVzdC5zb3J0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXModGVzdC5wdXNoKTtcblxuLy8gSUU4LVxudmFyIEZBSUxTX09OX1VOREVGSU5FRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KTtcbi8vIFY4IGJ1Z1xudmFyIEZBSUxTX09OX05VTEwgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydChudWxsKTtcbn0pO1xuLy8gT2xkIFdlYktpdFxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb3J0Jyk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGZlYXR1cmUgZGV0ZWN0aW9uIGNhbiBiZSB0b28gc2xvdywgc28gY2hlY2sgZW5naW5lcyB2ZXJzaW9uc1xuICBpZiAoVjgpIHJldHVybiBWOCA8IDcwO1xuICBpZiAoRkYgJiYgRkYgPiAzKSByZXR1cm47XG4gIGlmIChJRV9PUl9FREdFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFdFQktJVCkgcmV0dXJuIFdFQktJVCA8IDYwMztcblxuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBjb2RlLCBjaHIsIHZhbHVlLCBpbmRleDtcblxuICAvLyBnZW5lcmF0ZSBhbiBhcnJheSB3aXRoIG1vcmUgNTEyIGVsZW1lbnRzIChDaGFrcmEgYW5kIG9sZCBWOCBmYWlscyBvbmx5IGluIHRoaXMgY2FzZSlcbiAgZm9yIChjb2RlID0gNjU7IGNvZGUgPCA3NjsgY29kZSsrKSB7XG4gICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSA2NjogY2FzZSA2OTogY2FzZSA3MDogY2FzZSA3MjogdmFsdWUgPSAzOyBicmVhaztcbiAgICAgIGNhc2UgNjg6IGNhc2UgNzE6IHZhbHVlID0gNDsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB2YWx1ZSA9IDI7XG4gICAgfVxuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDc7IGluZGV4KyspIHtcbiAgICAgIHRlc3QucHVzaCh7IGs6IGNociArIGluZGV4LCB2OiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0ZXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudiAtIGEudjsgfSk7XG5cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGVzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSB0ZXN0W2luZGV4XS5rLmNoYXJBdCgwKTtcbiAgICBpZiAocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IGNocikgcmVzdWx0ICs9IGNocjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgIT09ICdER0JFRkhBQ0lKSyc7XG59KTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCAhU1RSSUNUX01FVEhPRCB8fCAhU1RBQkxFX1NPUlQ7XG5cbnZhciBnZXRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uIChjb21wYXJlZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICByZXR1cm4gdG9TdHJpbmcoeCkgPiB0b1N0cmluZyh5KSA/IDEgOiAtMTtcbiAgfTtcbn07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb3J0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG5cbiAgICB2YXIgYXJyYXkgPSB0b09iamVjdCh0aGlzKTtcblxuICAgIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkID8gbmF0aXZlU29ydChhcnJheSkgOiBuYXRpdmVTb3J0KGFycmF5LCBjb21wYXJlZm4pO1xuXG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGFycmF5TGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoYXJyYXkpO1xuICAgIHZhciBpdGVtc0xlbmd0aCwgaW5kZXg7XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGluZGV4IGluIGFycmF5KSBwdXNoKGl0ZW1zLCBhcnJheVtpbmRleF0pO1xuICAgIH1cblxuICAgIGludGVybmFsU29ydChpdGVtcywgZ2V0U29ydENvbXBhcmUoY29tcGFyZWZuKSk7XG5cbiAgICBpdGVtc0xlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZW1zKTtcbiAgICBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBpdGVtc0xlbmd0aCkgYXJyYXlbaW5kZXhdID0gaXRlbXNbaW5kZXgrK107XG4gICAgd2hpbGUgKGluZGV4IDwgYXJyYXlMZW5ndGgpIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhhcnJheSwgaW5kZXgrKyk7XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc29ydCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdzb3J0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc29ydCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zb3J0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb3J0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb3J0XCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAndmFsdWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudmFsdWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS52YWx1ZXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlc1wiKTsiLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3JcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdlbnRyaWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5lbnRyaWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5lbnRyaWVzKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9lbnRyaWVzXCIpOyIsICIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbmxldCBnZXRSYW5kb21WYWx1ZXM7XG5jb25zdCBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byk7XG5cbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xufSIsICJpbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cblxuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHJldHVybiBieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghdmFsaWRhdGUodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCcpO1xuICB9XG5cbiAgcmV0dXJuIHV1aWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmluZ2lmeTsiLCAiY29uc3QgcmFuZG9tVVVJRCA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5yYW5kb21VVUlEICYmIGNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmFuZG9tVVVJRFxufTsiLCAiaW1wb3J0IG5hdGl2ZSBmcm9tICcuL25hdGl2ZS5qcyc7XG5pbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCB7IHVuc2FmZVN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgaWYgKG5hdGl2ZS5yYW5kb21VVUlEICYmICFidWYgJiYgIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmF0aXZlLnJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG4gIHJuZHNbNl0gPSBybmRzWzZdICYgMHgwZiB8IDB4NDA7XG4gIHJuZHNbOF0gPSBybmRzWzhdICYgMHgzZiB8IDB4ODA7IC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuXG4gIGlmIChidWYpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgYnVmW29mZnNldCArIGldID0gcm5kc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmO1xuICB9XG5cbiAgcmV0dXJuIHVuc2FmZVN0cmluZ2lmeShybmRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdjQ7IiwgImltcG9ydCB7IEFzc2lnbmFibGUgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcbmltcG9ydCB7IERhdGFTdHJlYW0gfSBmcm9tIFwiLi9kYXRhLXN0cmVhbVwiO1xuXG50eXBlIFZhbHVlT2Y8VD4gPSBUW2tleW9mIFRdO1xuXG4vKiogVmFsaWQgaWQgdHlwZS4gKi9cbmV4cG9ydCB0eXBlIElkID0gbnVtYmVyIHwgc3RyaW5nO1xuLyoqIE51bGxhYmxlIGlkIHR5cGUuICovXG5leHBvcnQgdHlwZSBPcHRJZCA9IHVuZGVmaW5lZCB8IG51bGwgfCBJZDtcbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgYSB2YWx1ZSBjYW4gYmUgdXNlZCBhcyBhbiBpZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZCBpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIElkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XG59XG5cbi8qKlxuICogTWFrZSBhbiBvYmplY3QgZGVlcGx5IHBhcnRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIGFueVtdIHwgRnVuY3Rpb24gfCBOb2RlXG4gID8gVFxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgPyB7IFtrZXkgaW4ga2V5b2YgVF0/OiBEZWVwUGFydGlhbDxUW2tleV0+IH1cbiAgOiBUO1xuXG4vKipcbiAqIEFuIGl0ZW0gdGhhdCBtYXkgKHtAbGluayBJZH0pIG9yIG1heSBub3QgKGFic2VudCwgdW5kZWZpbmVkIG9yIG51bGwpIGhhdmUgYW4gaWQgcHJvcGVydHkuXG4gKlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgUGFydEl0ZW08SWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IFBhcnRpYWw8UmVjb3JkPElkUHJvcCwgT3B0SWQ+Pjtcbi8qKlxuICogQW4gaXRlbSB0aGF0IGhhcyBhIHByb3BlcnR5IGNvbnRhaW5pbmcgYW4gaWQgYW5kIGFsbCBvdGhlciByZXF1aXJlZCBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRnVsbEl0ZW08XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gPSBJdGVtICYgUmVjb3JkPElkUHJvcCwgSWQ+O1xuLyoqXG4gKiBBbiBpdGVtIHRoYXQgaGFzIGEgcHJvcGVydHkgY29udGFpbmluZyBhbiBpZCBhbmQgb3B0aW9uYWxseSBvdGhlciBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgVXBkYXRlSXRlbTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiA9IEFzc2lnbmFibGU8RnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4gJiBSZWNvcmQ8SWRQcm9wLCBJZD47XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGFuIGl0ZW0gaGFzIGFuIGlkIChpcyBhIHtAbGluayBGdWxsSXRlbX0pLlxuICpcbiAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIGlkUHJvcCAtIE5hbWUgb2YgdGhlIGlkIHByb3BlcnR5LlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoaXMgdmFsdWUgaXMgYSB7QGxpbmsgRnVsbEl0ZW19LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGxJdGVtPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+KGl0ZW06IEl0ZW0sIGlkUHJvcDogSWRQcm9wKTogaXRlbSBpcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIGl0ZW1baWRQcm9wXSAhPSBudWxsO1xufVxuXG4vKiogQWRkIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEV2ZW50UGF5bG9hZCB7XG4gIC8qKiBJZHMgb2YgYWRkZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xufVxuLyoqIFVwZGF0ZSBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVFdmVudFBheWxvYWQ8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKiogSWRzIG9mIHVwZGF0ZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xuICAvKiogSXRlbXMgYXMgdGhleSB3ZXJlIGJlZm9yZSB0aGlzIHVwZGF0ZS4gKi9cbiAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogSXRlbXMgYXMgdGhleSBhcmUgbm93LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBKdXN0IGdldCB0aGUgZGF0YSBmcm9tIHRoZSBkYXRhIHNldCBvciBkYXRhIHZpZXcuXG4gICAqL1xuICBkYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG59XG4vKiogUmVtb3ZlIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbW92ZUV2ZW50UGF5bG9hZDxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIC8qKiBJZHMgb2YgcmVtb3ZlZCBpdGVtcy4gKi9cbiAgaXRlbXM6IElkW107XG4gIC8qKiBJdGVtcyBhcyB0aGV5IHdlcmUgYmVmb3JlIHRoZWlyIHJlbW92YWwuICovXG4gIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbn1cblxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyAoZXZlbnQgbmFtZSDihpIgcGF5bG9hZCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQYXlsb2FkczxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIGFkZDogQWRkRXZlbnRQYXlsb2FkO1xuICB1cGRhdGU6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xuICByZW1vdmU6IFJlbW92ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xufVxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBwYXlsb2FkKS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFBheWxvYWRzV2l0aEFueTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBleHRlbmRzIEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPiB7XG4gIFwiKlwiOiBWYWx1ZU9mPEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPj47XG59XG5cbi8qKlxuICogTWFwIG9mIGV2ZW50IGNhbGxiYWNrIHR5cGVzIChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3M8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgYWRkKG5hbWU6IFwiYWRkXCIsIHBheWxvYWQ6IEFkZEV2ZW50UGF5bG9hZCB8IG51bGwsIHNlbmRlcklkPzogSWQgfCBudWxsKTogdm9pZDtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIHVwZGF0ZShcbiAgICBuYW1lOiBcInVwZGF0ZVwiLFxuICAgIHBheWxvYWQ6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+IHwgbnVsbCxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgcmVtb3ZlKFxuICAgIG5hbWU6IFwicmVtb3ZlXCIsXG4gICAgcGF5bG9hZDogUmVtb3ZlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4gfCBudWxsLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG59XG4vKipcbiAqIE1hcCBvZiBldmVudCBjYWxsYmFjayB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3NXaXRoQW55PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGV4dGVuZHMgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCAoe0BsaW5rIEV2ZW50TmFtZX0pLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIERhdGEgYWJvdXQgdGhlIGl0ZW1zIGFmZmVjdGVkIGJ5IHRoaXMgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIEEgc2VuZGVySWQsIG9wdGlvbmFsbHkgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2hpY2ggdHJpZ2dlcmVkIHRoZSBldmVudC4gSWYgc2VuZGVySWQgaXMgbm90IHByb3ZpZGVkLCB0aGUgYXJndW1lbnQgd2lsbCBiZSBgbnVsbGAuXG4gICAqL1xuICBcIipcIjxOIGV4dGVuZHMga2V5b2YgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPj4oXG4gICAgbmFtZTogTixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bTl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbn1cblxuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcy4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50TmFtZSA9IGtleW9mIEV2ZW50UGF5bG9hZHM8bmV2ZXIsIFwiXCI+O1xuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcyBhbmQgJyonIHRvIGxpc3RlbiBmb3IgYWxsLiAqL1xuZXhwb3J0IHR5cGUgRXZlbnROYW1lV2l0aEFueSA9IGtleW9mIEV2ZW50UGF5bG9hZHNXaXRoQW55PG5ldmVyLCBcIlwiPjtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBvcmRlciBwYXJhbWV0ZXIuXG4gKiAtIEEgc3RyaW5nIHZhbHVlIGRldGVybWluZXMgd2hpY2ggcHJvcGVydHkgd2lsbCBiZSB1c2VkIGZvciBzb3J0aW5nICh1c2luZyA8IGFuZCA+IG9wZXJhdG9ycyBmb3IgbnVtZXJpYyBjb21wYXJpc29uKS5cbiAqIC0gQSBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdGhlIHNhbWUgd2F5IGFzIGluIEFycmF5LnNvcnQuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YUludGVyZmFjZU9yZGVyPEl0ZW0+ID1cbiAgfCBrZXlvZiBJdGVtXG4gIHwgKChhOiBJdGVtLCBiOiBJdGVtKSA9PiBudW1iZXIpO1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm4gdHlwZSBpbmRlcGVuZGVudCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0Jhc2U8SXRlbT4ge1xuICAvKipcbiAgICogQW4gYXJyYXkgd2l0aCBmaWVsZCBuYW1lcywgb3IgYW4gb2JqZWN0IHdpdGggY3VycmVudCBmaWVsZCBuYW1lIGFuZCBuZXcgZmllbGQgbmFtZSB0aGF0IHRoZSBmaWVsZCBpcyByZXR1cm5lZCBhcy4gQnkgZGVmYXVsdCwgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW1zIGFyZSBlbWl0dGVkLiBXaGVuIGZpZWxkcyBpcyBkZWZpbmVkLCBvbmx5IHRoZSBwcm9wZXJ0aWVzIHdob3NlIG5hbWUgaXMgc3BlY2lmaWVkIGluIGZpZWxkcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogV2FybmluZyoqOiBUaGVyZSBpcyBubyBUeXBlU2NyaXB0IHN1cHBvcnQgZm9yIHRoaXMuXG4gICAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZ2V0IG9wdGlvbnMgKHJldHVybnMgYSBzaW5nbGUgaXRlbSBvciBhbiBhcnJheSkuXG4gKlxuICogQHJlbWFya3NcbiAqIFdoZXRoZXIgYW4gaXRlbSBvciBhbmQgYXJyYXkgb2YgaXRlbXMgaXMgcmV0dXJuZWQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdHlwZSBvZiB0aGUgaWQocykgYXJndW1lbnQuXG4gKiBJZiBhbiBhcnJheSBvZiBpZHMgaXMgcmVxdWVzdGVkIGFuIGFycmF5IG9mIGl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiBhIHNpbmdsZSBpZCBpcyByZXF1ZXN0ZWQgYSBzaW5nbGUgaXRlbSAob3IgbnVsbCBpZiB0aGUgaWQgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBpdGVtKSB3aWxsIGJlIHJldHVybmVkLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzaW5nbGUgaXRlbSAoaWYgaW52b2tlZCB3aXRoIGFuIGlkKSBvciBhbiBhcnJheSBvZiBpdGVtcyAoaWYgaW52b2tlZCB3aXRoIGFuIGFycmF5IG9mIGlkcykuICovXG4gIHJldHVyblR5cGU/OiB1bmRlZmluZWQgfCBcIkFycmF5XCI7XG59XG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm5zIGFuIG9iamVjdCkuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSByZXR1cm5lZCBvYmplY3QgaGFzIGlkcyBhcyBrZXlzIGFuZCBpdGVtcyBhcyB2YWx1ZXMgb2YgY29ycmVzcG9uZGluZyBpZHMuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG1hcCAoaWQg4oaSIGl0ZW0pLiAqL1xuICByZXR1cm5UeXBlOiBcIk9iamVjdFwiO1xufVxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJucyBzaW5nbGUgaXRlbSwgYW4gYXJyYXkgb3Igb2JqZWN0KS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgdHlwZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiA9XG4gIHwgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICB8IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+O1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBpZHMgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBmb3IgZWFjaCBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEFuIGFycmF5IHdpdGggZmllbGQgbmFtZXMsIG9yIGFuIG9iamVjdCB3aXRoIGN1cnJlbnQgZmllbGQgbmFtZSBhbmQgbmV3IGZpZWxkIG5hbWUgdGhhdCB0aGUgZmllbGQgaXMgcmV0dXJuZWQgYXMuIEJ5IGRlZmF1bHQsIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBpdGVtcyBhcmUgZW1pdHRlZC4gV2hlbiBmaWVsZHMgaXMgZGVmaW5lZCwgb25seSB0aGUgcHJvcGVydGllcyB3aG9zZSBuYW1lIGlzIHNwZWNpZmllZCBpbiBmaWVsZHMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgaXRlbXMuICovXG4gIGZpZWxkcz86IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBtYXAgb3ByaW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIE9yaWdpbmFsIC0gVGhlIG9yaWdpbmFsIGl0ZW0gdHlwZSBpbiB0aGUgZGF0YS5cbiAqIEB0eXBlUGFyYW0gTWFwcGVkIC0gVGhlIHR5cGUgYWZ0ZXIgbWFwcGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxPcmlnaW5hbCwgTWFwcGVkPiB7XG4gIC8qKiBBbiBhcnJheSB3aXRoIGZpZWxkIG5hbWVzLCBvciBhbiBvYmplY3Qgd2l0aCBjdXJyZW50IGZpZWxkIG5hbWUgYW5kIG5ldyBmaWVsZCBuYW1lIHRoYXQgdGhlIGZpZWxkIGlzIHJldHVybmVkIGFzLiBCeSBkZWZhdWx0LCBhbGwgcHJvcGVydGllcyBvZiB0aGUgaXRlbXMgYXJlIGVtaXR0ZWQuIFdoZW4gZmllbGRzIGlzIGRlZmluZWQsIG9ubHkgdGhlIHByb3BlcnRpZXMgd2hvc2UgbmFtZSBpcyBzcGVjaWZpZWQgaW4gZmllbGRzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIGl0ZW1zLiAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBPcmlnaW5hbCkgPT4gYm9vbGVhbjtcbiAgLyoqIE9yZGVyIHRoZSBpdGVtcyBieSBhIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uICovXG4gIG9yZGVyPzogRGF0YUludGVyZmFjZU9yZGVyPE1hcHBlZD47XG59XG5cbi8qKlxuICogQ29tbW9uIGludGVyZmFjZSBmb3IgZGF0YSBzZXRzIGFuZCBkYXRhIHZpZXcuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZCAobWlzc2luZyBpZHMgd2lsbCBiZSBnZW5lcmF0ZWQgdXBvbiBpbnNlcnRpb24pLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgSXRlbSB0eXBlIHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2U8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4ge1xuICAvKiogVGhlIG51bWJlciBvZiBpdGVtcy4gKi9cbiAgbGVuZ3RoOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBrZXkgb2YgaWQgcHJvcGVydHkuICovXG4gIGlkUHJvcDogSWRQcm9wO1xuXG4gIC8qKlxuICAgKiBBZGQgYSB1bml2ZXJzYWwgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgKmAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW55IG9mIHRoZSBldmVudHMgYGFkZGAsIGB1cGRhdGVgLCBhbmQgYHJlbW92ZWAgb2NjdXJzLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcIipcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYGFkZGAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgYWRkYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIGFkZGVkLCBvciB3aGVuIGFuIGl0ZW0gaXMgdXBkYXRlZCB3aGlsZSBub3QgeWV0IGV4aXN0aW5nLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcImFkZFwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl0pOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGEgYHJlbW92ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgcmVtb3ZlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgdXBkYXRlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBleGlzdGluZyBpdGVtIG9yIGEgc2V0IG9mIGV4aXN0aW5nIGl0ZW1zIGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHVuaXZlcnNhbCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiKlwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdKTogdm9pZDtcbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBgYWRkYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiYWRkXCIsIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYSBgcmVtb3ZlYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zLlxuICAgKi9cbiAgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyByZXF1ZXN0ZWQgaXRlbXMuXG4gICAqL1xuICBnZXQob3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPik6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBhcmUgbm8gaXRlbXMpLlxuICAgKi9cbiAgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgcmVxdWVzdGVkIGl0ZW1zIG9yIGlmIHJlcXVlc3RlZCBhbiBvYmplY3QgbWFwIG9mIGl0ZW1zIChtYXkgYmUgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGFyZSBubyBpdGVtcykuXG4gICAqL1xuICBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBvciBudWxsIGlmIHRoZSBpZCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGl0ZW0uXG4gICAqL1xuICBnZXQoaWQ6IElkKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIG9yIG51bGwgaWYgdGhlIGlkIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbS5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIGlmIGZvdW5kIG9yIG51bGwgb3RoZXJ3aXNlLiBJZiByZXF1ZXN0ZWQgYW4gb2JqZWN0IG1hcCB3aXRoIDAgdG8gMSBpdGVtcy5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChpZHM6IElkW10pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICogSWYgcmVxdWVzdGVkIGFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gSWQgb3IgaWRzIHRvIGJlIHJldHVybmVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIGl0ZW1zIChmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSBpZHMgKHNpbmdsZSBvciBhcnJheSkgYW5kIHRoZSBvcHRpb25zLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIERhdGFTZXQgdG8gd2hpY2ggdGhlIGluc3RhbmNlIGltcGxlbWVudGluZyB0aGlzIGludGVyZmFjZSBpcyBjb25uZWN0ZWQuXG4gICAqIEluIGNhc2UgdGhlcmUgaXMgYSBjaGFpbiBvZiBtdWx0aXBsZSBEYXRhVmlld3MsIHRoZSByb290IERhdGFTZXQgb2YgdGhpcyBjaGFpbiBpcyByZXR1cm5lZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRhdGEgc2V0IHRoYXQgYWN0dWFsbHkgY29udGFpbnMgdGhlIGRhdGEuXG4gICAqL1xuICBnZXREYXRhU2V0KCk6IERhdGFTZXQ8SXRlbSwgSWRQcm9wPjtcblxuICAvKipcbiAgICogR2V0IGlkcyBvZiBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiByZXR1cm5lZCBpZHMgdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICovXG4gIGdldElkcyhvcHRpb25zPzogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT4pOiBJZFtdO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiBpdGVyYXRpb24gdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBFeGVjdXRlZCBpbiBzaW1pbGFyIGZhc2hpb24gdG8gQXJyYXkuZm9yRWFjaCBjYWxsYmFjaywgYnV0IGluc3RlYWQgb2YgaXRlbSwgaW5kZXgsIGFycmF5IHJlY2VpdmVzIGl0ZW0sIGlkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICovXG4gIGZvckVhY2goXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPlxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBNYXAgZWFjaCBpdGVtIGludG8gZGlmZmVyZW50IGl0ZW0gYW5kIHJldHVybiB0aGVtIGFzIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBObyBndWFyYW50ZWUgaXMgZ2l2ZW4gYWJvdXQgdGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBldmVuIGlmIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkICh0aGUgaXRlbXMgYXJlIHNvcnRlZCBhZnRlciB0aGUgbWFwcGluZykuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEFycmF5Lm1hcC1saWtlIGNhbGxiYWNrLCBidXQgb25seSB3aXRoIHRoZSBmaXJzdCB0d28gcGFyYW1zLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIG1hcHBlZCBpdGVtcy5cbiAgICovXG4gIG1hcDxUPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5cbiAgKTogVFtdO1xuXG4gIC8qKlxuICAgKiBTdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBJZHMgb2YgdGhlIGl0ZW1zIHRvIGJlIGluY2x1ZGVkIGluIHRoaXMgc3RyZWFtIChtaXNzaW5nIGFyZSBpZ25vcmVkKSwgYWxsIGlmIG9taXR0ZWQuXG4gICAqIEByZXR1cm5zIFRoZSBkYXRhIHN0cmVhbSBmb3IgdGhpcyBkYXRhIHNldC5cbiAgICovXG4gIHN0cmVhbShpZHM/OiBJdGVyYWJsZTxJZD4pOiBEYXRhU3RyZWFtPEl0ZW0+O1xufVxuIiwgIi8qKiBRdWV1ZSBjb25maWd1cmF0aW9uIG9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVPcHRpb25zIHtcbiAgLyoqIFRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBCeSBkZWZhdWx0IHRoZXJlIGlzIG5vIGF1dG9tYXRpYyBmbHVzaGluZyAoYG51bGxgKS4gKi9cbiAgZGVsYXk/OiBudWxsIHwgbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBpcyBgSW5maW5pdHlgLiAqL1xuICBtYXg/OiBudW1iZXI7XG59XG4vKipcbiAqIFF1ZXVlIGV4dGVuZGluZyBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIG1ldGhvZCBuYW1lcyB0byBiZSByZXBsYWNlZCBieSBxdWV1ZWQgdmVyc2lvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVFeHRlbmRPcHRpb25zPFQ+IHtcbiAgLyoqIEEgbGlzdCB3aXRoIG1ldGhvZCBuYW1lcyBvZiB0aGUgbWV0aG9kcyBvbiB0aGUgb2JqZWN0IHRvIGJlIHJlcGxhY2VkIHdpdGggcXVldWVkIG9uZXMuICovXG4gIHJlcGxhY2U6IFRbXTtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0IHZhbHVlIGlzIG51bGwuICovXG4gIGRlbGF5PzogbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBvZiBtYXggaXMgSW5maW5pdHkuICovXG4gIG1heD86IG51bWJlcjtcbn1cbi8qKlxuICogUXVldWUgY2FsbCBlbnRyeS5cbiAqIC0gQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZC5cbiAqIC0gQW4gb2JqZWN0IHdpdGggZnVuY3Rpb24sIGFyZ3MsIGNvbnRleHQgKGxpa2UgZnVuY3Rpb24uYmluZChjb250ZXh0LCAuLi5hcmdzKSkuXG4gKi9cbnR5cGUgUXVldWVDYWxsRW50cnkgPVxuICB8IEZ1bmN0aW9uXG4gIHwge1xuICAgICAgZm46IEZ1bmN0aW9uO1xuICAgICAgYXJnczogdW5rbm93bltdO1xuICAgIH1cbiAgfCB7XG4gICAgICBmbjogRnVuY3Rpb247XG4gICAgICBhcmdzOiB1bmtub3duW107XG4gICAgICBjb250ZXh0OiB1bmtub3duO1xuICAgIH07XG5cbmludGVyZmFjZSBRdWV1ZUV4dGVuZGVkPE8+IHtcbiAgb2JqZWN0OiBPO1xuICBtZXRob2RzOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG9yaWdpbmFsOiB1bmtub3duO1xuICB9W107XG59XG5cbi8qKlxuICogQSBxdWV1ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBtZXRob2QgbmFtZXMgdG8gYmUgcmVwbGFjZWQgYnkgcXVldWVkIHZlcnNpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUXVldWU8VCA9IG5ldmVyPiB7XG4gIC8qKiBEZWxheSBpbiBtaWxsaXNlY29uZHMuIElmIGRlZmluZWQgdGhlIHF1ZXVlIHdpbGwgYmUgcGVyaW9kaWNhbGx5IGZsdXNoZWQuICovXG4gIHB1YmxpYyBkZWxheTogbnVsbCB8IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHF1ZXVlIGJlZm9yZSBpdCB3aWxsIGJlIGZsdXNoZWQuICovXG4gIHB1YmxpYyBtYXg6IG51bWJlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9xdWV1ZToge1xuICAgIGZuOiBGdW5jdGlvbjtcbiAgICBhcmdzPzogdW5rbm93bltdO1xuICAgIGNvbnRleHQ/OiB1bmtub3duO1xuICB9W10gPSBbXTtcblxuICBwcml2YXRlIF90aW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9leHRlbmRlZDogbnVsbCB8IFF1ZXVlRXh0ZW5kZWQ8VD4gPSBudWxsO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgUXVldWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUXVldWUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zPzogUXVldWVPcHRpb25zKSB7XG4gICAgLy8gb3B0aW9uc1xuICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgIHRoaXMubWF4ID0gSW5maW5pdHk7XG5cbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBRdWV1ZSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHNldE9wdGlvbnMob3B0aW9ucz86IFF1ZXVlT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmRlbGF5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLmRlbGF5ID0gb3B0aW9ucy5kZWxheTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLm1heCA9IG9wdGlvbnMubWF4O1xuICAgIH1cblxuICAgIHRoaXMuX2ZsdXNoSWZOZWVkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmQgYW4gb2JqZWN0IHdpdGggcXVldWluZyBmdW5jdGlvbmFsaXR5LlxuICAgKiBUaGUgb2JqZWN0IHdpbGwgYmUgZXh0ZW5kZWQgd2l0aCBhIGZ1bmN0aW9uIGZsdXNoLCBhbmQgdGhlIG1ldGhvZHMgcHJvdmlkZWQgaW4gb3B0aW9ucy5yZXBsYWNlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBxdWV1ZWQgb25lcy5cbiAgICpcbiAgICogQHBhcmFtIG9iamVjdCAtIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBxdWV1ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZXh0ZW5kPE8gZXh0ZW5kcyB7IGZsdXNoPzogKCkgPT4gdm9pZCB9LCBLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IE8sXG4gICAgb3B0aW9uczogUXVldWVFeHRlbmRPcHRpb25zPEs+XG4gICk6IFF1ZXVlPE8+IHtcbiAgICBjb25zdCBxdWV1ZSA9IG5ldyBRdWV1ZTxPPihvcHRpb25zKTtcblxuICAgIGlmIChvYmplY3QuZmx1c2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFyZ2V0IG9iamVjdCBhbHJlYWR5IGhhcyBhIHByb3BlcnR5IGZsdXNoXCIpO1xuICAgIH1cbiAgICBvYmplY3QuZmx1c2ggPSAoKTogdm9pZCA9PiB7XG4gICAgICBxdWV1ZS5mbHVzaCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBtZXRob2RzOiBRdWV1ZUV4dGVuZGVkPE8+W1wibWV0aG9kc1wiXSA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJmbHVzaFwiLFxuICAgICAgICBvcmlnaW5hbDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXBsYWNlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMucmVwbGFjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBuYW1lID0gb3B0aW9ucy5yZXBsYWNlW2ldO1xuICAgICAgICBtZXRob2RzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBvcmlnaW5hbDogKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPilbbmFtZV0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICBxdWV1ZS5yZXBsYWNlKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPiwgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVldWUuX2V4dGVuZGVkID0ge1xuICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICBtZXRob2RzOiBtZXRob2RzLFxuICAgIH07XG5cbiAgICByZXR1cm4gcXVldWU7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSB0aGUgcXVldWUuIFRoZSBxdWV1ZSB3aWxsIGZpcnN0IGZsdXNoIGFsbCBxdWV1ZWQgYWN0aW9ucywgYW5kIGluIGNhc2UgaXQgaGFzIGV4dGVuZGVkIGFuIG9iamVjdCwgd2lsbCByZXN0b3JlIHRoZSBvcmlnaW5hbCBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsdXNoKCk7XG5cbiAgICBpZiAodGhpcy5fZXh0ZW5kZWQpIHtcbiAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuX2V4dGVuZGVkLm9iamVjdDtcbiAgICAgIGNvbnN0IG1ldGhvZHMgPSB0aGlzLl9leHRlbmRlZC5tZXRob2RzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IG1ldGhvZHNbaV07XG4gICAgICAgIGlmIChtZXRob2Qub3JpZ2luYWwpIHtcbiAgICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICAgIChvYmplY3QgYXMgYW55KVttZXRob2QubmFtZV0gPSBtZXRob2Qub3JpZ2luYWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBkZWxldGUgKG9iamVjdCBhcyBhbnkpW21ldGhvZC5uYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fZXh0ZW5kZWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgbWV0aG9kIG9uIGFuIG9iamVjdCB3aXRoIGEgcXVldWVkIHZlcnNpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgLSBPYmplY3QgaGF2aW5nIHRoZSBtZXRob2QuXG4gICAqIEBwYXJhbSBtZXRob2QgLSBUaGUgbWV0aG9kIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgcmVwbGFjZTxNIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IFJlY29yZDxNLCAoKSA9PiB2b2lkPixcbiAgICBtZXRob2Q6IE1cbiAgKTogdm9pZCB7XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzIC0tIEZ1bmN0aW9uIHRoaXMgaXMgbmVjZXNzYXJ5IGluIHRoZSBmdW5jdGlvbiBiZWxsb3csIHNvIGNsYXNzIHRoaXMgaGFzIHRvIGJlIHNhdmVkIGludG8gYSB2YXJpYWJsZSBoZXJlLiAqL1xuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjb25zdCBvcmlnaW5hbCA9IG9iamVjdFttZXRob2RdO1xuICAgIGlmICghb3JpZ2luYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBcIiArIG1ldGhvZCArIFwiIHVuZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBvYmplY3RbbWV0aG9kXSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICAgIC8vIGFkZCB0aGlzIGNhbGwgdG8gdGhlIHF1ZXVlXG4gICAgICBtZS5xdWV1ZSh7XG4gICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgIGZuOiBvcmlnaW5hbCxcbiAgICAgICAgY29udGV4dDogdGhpcyxcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUXVldWUgYSBjYWxsLlxuICAgKlxuICAgKiBAcGFyYW0gZW50cnkgLSBUaGUgZnVuY3Rpb24gb3IgZW50cnkgdG8gYmUgcXVldWVkLlxuICAgKi9cbiAgcHVibGljIHF1ZXVlKGVudHJ5OiBRdWV1ZUNhbGxFbnRyeSk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7IGZuOiBlbnRyeSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWUucHVzaChlbnRyeSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmx1c2hJZk5lZWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHF1ZXVlIG5lZWRzIHRvIGJlIGZsdXNoZWQuXG4gICAqL1xuICBwcml2YXRlIF9mbHVzaElmTmVlZGVkKCk6IHZvaWQge1xuICAgIC8vIGZsdXNoIHdoZW4gdGhlIG1heGltdW0gaXMgZXhjZWVkZWQuXG4gICAgaWYgKHRoaXMuX3F1ZXVlLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gICAgLy8gZmx1c2ggYWZ0ZXIgYSBwZXJpb2Qgb2YgaW5hY3Rpdml0eSB3aGVuIGEgZGVsYXkgaXMgY29uZmlndXJlZFxuICAgIGlmICh0aGlzLl90aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHR5cGVvZiB0aGlzLmRlbGF5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH0sIHRoaXMuZGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaCBhbGwgcXVldWVkIGNhbGxzXG4gICAqL1xuICBwdWJsaWMgZmx1c2goKTogdm9pZCB7XG4gICAgdGhpcy5fcXVldWUuc3BsaWNlKDApLmZvckVhY2goKGVudHJ5KTogdm9pZCA9PiB7XG4gICAgICBlbnRyeS5mbi5hcHBseShlbnRyeS5jb250ZXh0IHx8IGVudHJ5LmZuLCBlbnRyeS5hcmdzIHx8IFtdKTtcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIERhdGFJbnRlcmZhY2UsXG4gIEV2ZW50Q2FsbGJhY2tzV2l0aEFueSxcbiAgRXZlbnROYW1lLFxuICBFdmVudE5hbWVXaXRoQW55LFxuICBFdmVudFBheWxvYWRzLFxuICBJZCxcbiAgUGFydEl0ZW0sXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbnR5cGUgRXZlbnRTdWJzY3JpYmVyczxJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPiwgSWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgW05hbWUgaW4ga2V5b2YgRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5dOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG59O1xuXG4vKipcbiAqIHtAbGluayBEYXRhU2V0fSBjb2RlIHRoYXQgY2FuIGJlIHJldXNlZCBpbiB7QGxpbmsgRGF0YVZpZXd9IG9yIG90aGVyIHNpbWlsYXIgaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBEYXRhSW50ZXJmYWNlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFTZXRQYXJ0PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGltcGxlbWVudHMgUGljazxEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4sIFwib25cIiB8IFwib2ZmXCI+XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmliZXJzOiB7XG4gICAgW05hbWUgaW4gRXZlbnROYW1lV2l0aEFueV06IEV2ZW50U3Vic2NyaWJlcnM8SXRlbSwgSWRQcm9wPltOYW1lXVtdO1xuICB9ID0ge1xuICAgIFwiKlwiOiBbXSxcbiAgICBhZGQ6IFtdLFxuICAgIHJlbW92ZTogW10sXG4gICAgdXBkYXRlOiBbXSxcbiAgfTtcblxuICBwcm90ZWN0ZWQgX3RyaWdnZXIoXG4gICAgZXZlbnQ6IFwiYWRkXCIsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1wiYWRkXCJdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG4gIHByb3RlY3RlZCBfdHJpZ2dlcihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgcHJvdGVjdGVkIF90cmlnZ2VyKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogVHJpZ2dlciBhbiBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIEV2ZW50IHBheWxvYWQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIElkIG9mIHRoZSBzZW5kZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3RyaWdnZXI8TmFtZSBleHRlbmRzIEV2ZW50TmFtZT4oXG4gICAgZXZlbnQ6IE5hbWUsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W05hbWVdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIGlmICgoZXZlbnQgYXMgc3RyaW5nKSA9PT0gXCIqXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB0cmlnZ2VyIGV2ZW50ICpcIik7XG4gICAgfVxuXG4gICAgWy4uLnRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XSwgLi4udGhpcy5fc3Vic2NyaWJlcnNbXCIqXCJdXS5mb3JFYWNoKFxuICAgICAgKHN1YnNjcmliZXIpOiB2b2lkID0+IHtcbiAgICAgICAgc3Vic2NyaWJlcihldmVudCwgcGF5bG9hZCwgc2VuZGVySWQgIT0gbnVsbCA/IHNlbmRlcklkIDogbnVsbCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwiKlwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJhZGRcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl1cbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBhbiBldmVudCwgYWRkIGFuIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBOb24tZnVuY3Rpb24gY2FsbGJhY2tzIGFyZSBpZ25vcmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgb248TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XS5wdXNoKGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLy8gQFRPRE86IE1heWJlIHRocm93IGZvciBpbnZhbGlkIGNhbGxiYWNrcz9cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcIipcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcImFkZFwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXVxuICApOiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvZmYoXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIGFuIGV2ZW50LCByZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIElmIHRoZSBzYW1lIGNhbGxiYWNrIHdhcyBzdWJzY3JpYmVkIG1vcmUgdGhhbiBvbmNlICoqYWxsKiogb2NjdXJlbmNlcyB3aWxsIGJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIG1ldGhvZC5cbiAgICovXG4gIHB1YmxpYyBvZmY8TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0gPSB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0uZmlsdGVyKFxuICAgICAgKHN1YnNjcmliZXIpOiBib29sZWFuID0+IHN1YnNjcmliZXIgIT09IGNhbGxiYWNrXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb24gaW5zdGVhZCAoUFM6IERhdGFWaWV3LnN1YnNjcmliZSA9PT0gRGF0YVZpZXcub24pLlxuICAgKi9cbiAgcHVibGljIHN1YnNjcmliZTogRGF0YVNldFBhcnQ8SXRlbSwgSWRQcm9wPltcIm9uXCJdID0gRGF0YVNldFBhcnQucHJvdG90eXBlLm9uO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9mZiBpbnN0ZWFkIChQUzogRGF0YVZpZXcudW5zdWJzY3JpYmUgPT09IERhdGFWaWV3Lm9mZikuXG4gICAqL1xuICBwdWJsaWMgdW5zdWJzY3JpYmU6IERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5bXCJvZmZcIl0gPVxuICAgIERhdGFTZXRQYXJ0LnByb3RvdHlwZS5vZmY7XG5cbiAgLyogZGV2ZWxibG9jazpzdGFydCAqL1xuICBwdWJsaWMgZ2V0IHRlc3RMZWFrU3Vic2NyaWJlcnMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlcnM7XG4gIH1cbiAgLyogZGV2ZWxibG9jazplbmQgKi9cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgU2V0YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQtb2JqZWN0c1xuY29sbGVjdGlvbignU2V0JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU2V0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zZXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3NldFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vZXMvZ2V0LWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL3N0YWJsZS9nZXQtaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL2FjdHVhbC9nZXQtaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9mdWxsL2dldC1pdGVyYXRvcicpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3JcIik7IiwgImltcG9ydCB7IElkIH0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcblxuLyoqXG4gKiBEYXRhIHN0cmVhbVxuICpcbiAqIEByZW1hcmtzXG4gKiB7QGxpbmsgRGF0YVN0cmVhbX0gb2ZmZXJzIGFuIGFsd2F5cyB1cCB0byBkYXRlIHN0cmVhbSBvZiBpdGVtcyBmcm9tIGEge0BsaW5rIERhdGFTZXR9IG9yIHtAbGluayBEYXRhVmlld30uXG4gKiBUaGF0IG1lYW5zIHRoYXQgdGhlIHN0cmVhbSBpcyBldmFsdWF0ZWQgYXQgdGhlIHRpbWUgb2YgaXRlcmF0aW9uLCBjb252ZXJzaW9uIHRvIGFub3RoZXIgZGF0YSB0eXBlIG9yIHdoZW4ge0BsaW5rIGNhY2hlfSBpcyBjYWxsZWQsIG5vdCB3aGVuIHRoZSB7QGxpbmsgRGF0YVN0cmVhbX0gd2FzIGNyZWF0ZWQuXG4gKiBNdWx0aXBsZSBpbnZvY2F0aW9ucyBvZiBmb3IgZXhhbXBsZSB7QGxpbmsgdG9JdGVtQXJyYXl9IG1heSB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cyAoaWYgdGhlIGRhdGEgc291cmNlIGxpa2UgZm9yIGV4YW1wbGUge0BsaW5rIERhdGFTZXR9IGdldHMgbW9kaWZpZWQpLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gVGhlIGl0ZW0gdHlwZSB0aGlzIHN0cmVhbSBpcyBnb2luZyB0byB3b3JrIHdpdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU3RyZWFtPEl0ZW0+IGltcGxlbWVudHMgSXRlcmFibGU8W0lkLCBJdGVtXT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWlyczogSXRlcmFibGU8W0lkLCBJdGVtXT47XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBkYXRhIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIHBhaXJzIC0gVGhlIGlkLCBpdGVtIHBhaXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhaXJzOiBJdGVyYWJsZTxbSWQsIEl0ZW1dPikge1xuICAgIHRoaXMuX3BhaXJzID0gcGFpcnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGl0ZXJhYmxlIG9mIGtleSwgdmFsdWUgcGFpcnMgZm9yIGV2ZXJ5IGVudHJ5IGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBJdGVtXT4ge1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgeWllbGQgW2lkLCBpdGVtXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGl0ZXJhYmxlIG9mIGtleSwgdmFsdWUgcGFpcnMgZm9yIGV2ZXJ5IGVudHJ5IGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKmVudHJpZXMoKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiB7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICB5aWVsZCBbaWQsIGl0ZW1dO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2Yga2V5cyBpbiB0aGUgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljICprZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8SWQ+IHtcbiAgICBmb3IgKGNvbnN0IFtpZF0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHlpZWxkIGlkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2YgdmFsdWVzIGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKnZhbHVlcygpOiBJdGVyYWJsZUl0ZXJhdG9yPEl0ZW0+IHtcbiAgICBmb3IgKGNvbnN0IFssIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICB5aWVsZCBpdGVtO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGlkcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFycmF5IG1heSBjb250YWluIGR1cGxpY2l0aWVzLlxuICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCBhbGwgaWRzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9JZEFycmF5KCk6IElkW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcGFpcnNdLm1hcCgocGFpcik6IElkID0+IHBhaXJbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgaXRlbXMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBhcnJheSBtYXkgY29udGFpbiBkdXBsaWNpdGllcy5cbiAgICogQHJldHVybnMgVGhlIGFycmF5IHdpdGggYWxsIGl0ZW1zIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9JdGVtQXJyYXkoKTogSXRlbVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3BhaXJzXS5tYXAoKHBhaXIpOiBJdGVtID0+IHBhaXJbMV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgZW50cmllcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFycmF5IG1heSBjb250YWluIGR1cGxpY2l0aWVzLlxuICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCBhbGwgZW50cmllcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvRW50cnlBcnJheSgpOiBbSWQsIEl0ZW1dW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcGFpcnNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvYmplY3QgbWFwIGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBpbiB0aGlzIHN0cmVhbSBhY2Nlc3NpYmxlIGJ5IGlkcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSW4gY2FzZSBvZiBkdXBsaWNhdGUgaWRzIChjb2VyY2VkIHRvIHN0cmluZyBzbyBgNyA9PSAnNydgKSB0aGUgbGFzdCBlbmNvdXRlcmVkIGFwcGVhcnMgaW4gdGhlIHJldHVybmVkIG9iamVjdC5cbiAgICogQHJldHVybnMgVGhlIG9iamVjdCBtYXAgb2YgYWxsIGlkIOKGkiBpdGVtIHBhaXJzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9PYmplY3RNYXAoKTogUmVjb3JkPElkLCBJdGVtPiB7XG4gICAgY29uc3QgbWFwOiBSZWNvcmQ8SWQsIEl0ZW0+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIG1hcFtpZF0gPSBpdGVtO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hcCBjb250YWluaW5nIGFsbCB0aGUgaXRlbXMgaW4gdGhpcyBzdHJlYW0gYWNjZXNzaWJsZSBieSBpZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBtYXAgb2YgYWxsIGlkIOKGkiBpdGVtIHBhaXJzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9NYXAoKTogTWFwPElkLCBJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBNYXAodGhpcy5fcGFpcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHNldCBjb250YWluaW5nIGFsbCB0aGUgKHVuaXF1ZSkgaWRzIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2V0IG9mIGFsbCBpZHMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0lkU2V0KCk6IFNldDxJZD4ge1xuICAgIHJldHVybiBuZXcgU2V0KHRoaXMudG9JZEFycmF5KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHNldCBjb250YWluaW5nIGFsbCB0aGUgKHVuaXF1ZSkgaXRlbXMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBzZXQgb2YgYWxsIGl0ZW1zIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9JdGVtU2V0KCk6IFNldDxJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBTZXQodGhpcy50b0l0ZW1BcnJheSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWNoZSB0aGUgaXRlbXMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBtZXRob2QgYWxsb3dzIGZvciBpdGVtcyB0byBiZSBmZXRjaGVkIGltbWVkaWF0ZWxseSBhbmQgdXNlZCAocG9zc2libHkgbXVsdGlwbGUgdGltZXMpIGxhdGVyLlxuICAgKiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIG9wdGltaXplIHBlcmZvcm1hbmNlIGFzIHtAbGluayBEYXRhU3RyZWFtfSB3b3VsZCBvdGhlcndpc2UgcmVldmFsdWF0ZSBldmVyeXRoaW5nIHVwb24gZWFjaCBpdGVyYXRpb24uXG4gICAqXG4gICAqICMjIEV4YW1wbGVcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiBjb25zdCBkcyA9IG5ldyBEYXRhU2V0KFvigKZdKVxuICAgKlxuICAgKiBjb25zdCBjYWNoZWRTdHJlYW0gPSBkcy5zdHJlYW0oKVxuICAgKiAgIC5maWx0ZXIo4oCmKVxuICAgKiAgIC5zb3J0KOKApilcbiAgICogICAubWFwKOKApilcbiAgICogICAuY2FjaGVkKOKApikgLy8gRGF0YSBhcmUgZmV0Y2hlZCwgcHJvY2Vzc2VkIGFuZCBjYWNoZWQgaGVyZS5cbiAgICpcbiAgICogZHMuY2xlYXIoKVxuICAgKiBjaGFjaGVkU3RyZWFtIC8vIFN0aWxsIGhhcyBhbGwgdGhlIGl0ZW1zLlxuICAgKiBgYGBcbiAgICogQHJldHVybnMgQSBuZXcge0BsaW5rIERhdGFTdHJlYW19IHdpdGggY2FjaGVkIGl0ZW1zIChkZXRhY2hlZCBmcm9tIHRoZSBvcmlnaW5hbCB7QGxpbmsgRGF0YVNldH0pLlxuICAgKi9cbiAgcHVibGljIGNhY2hlKCk6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbShbLi4udGhpcy5fcGFpcnNdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRpc3RpbmN0IHZhbHVlcyBvZiBnaXZlbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcGlja3MgYW5kIHBvc3NpYmx5IGNvbnZlcnRzIHRoZSBwcm9wZXJ0eS5cbiAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGRpc3RpbmN0IHZhbHVlLlxuICAgKiBAcmV0dXJucyBBIHNldCBvZiBhbGwgZGlzdGluY3QgcHJvcGVydGllcy5cbiAgICovXG4gIHB1YmxpYyBkaXN0aW5jdDxUPihjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCk6IFNldDxUPiB7XG4gICAgY29uc3Qgc2V0ID0gbmV3IFNldDxUPigpO1xuXG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICBzZXQuYWRkKGNhbGxiYWNrKGl0ZW0sIGlkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIGl0ZW1zIG9mIHRoZSBzdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IGRlY2lkZXMgd2hldGhlciBhbiBpdGVtIHdpbGwgYmUgaW5jbHVkZWQuXG4gICAqIEByZXR1cm5zIEEgbmV3IGRhdGEgc3RyZWFtIHdpdGggdGhlIGZpbHRlcmVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIGZpbHRlcihjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gYm9vbGVhbik6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIGNvbnN0IHBhaXJzID0gdGhpcy5fcGFpcnM7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtPEl0ZW0+KHtcbiAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+IHtcbiAgICAgICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHBhaXJzKSB7XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKGl0ZW0sIGlkKSkge1xuICAgICAgICAgICAgeWllbGQgW2lkLCBpdGVtXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIGl0ZW0gb2YgdGhlIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnZva2VkIGZvciBlYWNoIGl0ZW0uXG4gICAqL1xuICBwdWJsaWMgZm9yRWFjaChjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gYm9vbGVhbik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgdGhlIGl0ZW1zIGludG8gYSBkaWZmZXJlbnQgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgY29udmVyc2lvbi5cbiAgICogQHR5cGVQYXJhbSBNYXBwZWQgLSBUaGUgdHlwZSBvZiB0aGUgaXRlbSBhZnRlciBtYXBwaW5nLlxuICAgKiBAcmV0dXJucyBBIG5ldyBkYXRhIHN0cmVhbSB3aXRoIHRoZSBtYXBwZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgbWFwPE1hcHBlZD4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IE1hcHBlZFxuICApOiBEYXRhU3RyZWFtPE1hcHBlZD4ge1xuICAgIGNvbnN0IHBhaXJzID0gdGhpcy5fcGFpcnM7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtPE1hcHBlZD4oe1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBNYXBwZWRdPiB7XG4gICAgICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiBwYWlycykge1xuICAgICAgICAgIHlpZWxkIFtpZCwgY2FsbGJhY2soaXRlbSwgaWQpXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGl0ZW0gd2l0aCB0aGUgbWF4aW11bSB2YWx1ZSBvZiBnaXZlbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcGlja3MgYW5kIHBvc3NpYmx5IGNvbnZlcnRzIHRoZSBwcm9wZXJ0eS5cbiAgICogQHJldHVybnMgVGhlIGl0ZW0gd2l0aCB0aGUgbWF4aW11bSBpZiBmb3VuZCBvdGhlcndpc2UgbnVsbC5cbiAgICovXG4gIHB1YmxpYyBtYXgoY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IG51bWJlcik6IEl0ZW0gfCBudWxsIHtcbiAgICBjb25zdCBpdGVyID0gdGhpcy5fcGFpcnNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIGxldCBjdXJyID0gaXRlci5uZXh0KCk7XG4gICAgaWYgKGN1cnIuZG9uZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IG1heEl0ZW06IEl0ZW0gPSBjdXJyLnZhbHVlWzFdO1xuICAgIGxldCBtYXhWYWx1ZTogbnVtYmVyID0gY2FsbGJhY2soY3Vyci52YWx1ZVsxXSwgY3Vyci52YWx1ZVswXSk7XG4gICAgd2hpbGUgKCEoY3VyciA9IGl0ZXIubmV4dCgpKS5kb25lKSB7XG4gICAgICBjb25zdCBbaWQsIGl0ZW1dID0gY3Vyci52YWx1ZTtcbiAgICAgIGNvbnN0IHZhbHVlID0gY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgaWYgKHZhbHVlID4gbWF4VmFsdWUpIHtcbiAgICAgICAgbWF4VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgbWF4SXRlbSA9IGl0ZW07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heEl0ZW07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpdGVtIHdpdGggdGhlIG1pbmltdW0gdmFsdWUgb2YgZ2l2ZW4gcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IHBpY2tzIGFuZCBwb3NzaWJseSBjb252ZXJ0cyB0aGUgcHJvcGVydHkuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIHdpdGggdGhlIG1pbmltdW0gaWYgZm91bmQgb3RoZXJ3aXNlIG51bGwuXG4gICAqL1xuICBwdWJsaWMgbWluKGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBudW1iZXIpOiBJdGVtIHwgbnVsbCB7XG4gICAgY29uc3QgaXRlciA9IHRoaXMuX3BhaXJzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICBsZXQgY3VyciA9IGl0ZXIubmV4dCgpO1xuICAgIGlmIChjdXJyLmRvbmUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBtaW5JdGVtOiBJdGVtID0gY3Vyci52YWx1ZVsxXTtcbiAgICBsZXQgbWluVmFsdWU6IG51bWJlciA9IGNhbGxiYWNrKGN1cnIudmFsdWVbMV0sIGN1cnIudmFsdWVbMF0pO1xuICAgIHdoaWxlICghKGN1cnIgPSBpdGVyLm5leHQoKSkuZG9uZSkge1xuICAgICAgY29uc3QgW2lkLCBpdGVtXSA9IGN1cnIudmFsdWU7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICAgIGlmICh2YWx1ZSA8IG1pblZhbHVlKSB7XG4gICAgICAgIG1pblZhbHVlID0gdmFsdWU7XG4gICAgICAgIG1pbkl0ZW0gPSBpdGVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtaW5JdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHVjZSB0aGUgaXRlbXMgaW50byBhIHNpbmdsZSB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgcmVkdWN0aW9uLlxuICAgKiBAcGFyYW0gYWNjdW11bGF0b3IgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYWNjdW11bGF0b3IuXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhlIHJlZHVjZWQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgcmVkdWNlPFQ+KFxuICAgIGNhbGxiYWNrOiAoYWNjdW11bGF0b3I6IFQsIGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBhY2N1bXVsYXRvcjogVFxuICApOiBUIHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gY2FsbGJhY2soYWNjdW11bGF0b3IsIGl0ZW0sIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnQgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBJdGVtIGNvbXBhcmF0b3IuXG4gICAqIEByZXR1cm5zIEEgbmV3IHN0cmVhbSB3aXRoIHNvcnRlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBzb3J0KFxuICAgIGNhbGxiYWNrOiAoaXRlbUE6IEl0ZW0sIGl0ZW1COiBJdGVtLCBpZEE6IElkLCBpZEI6IElkKSA9PiBudW1iZXJcbiAgKTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtKHtcbiAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiAoKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiA9PlxuICAgICAgICBbLi4udGhpcy5fcGFpcnNdXG4gICAgICAgICAgLnNvcnQoKFtpZEEsIGl0ZW1BXSwgW2lkQiwgaXRlbUJdKTogbnVtYmVyID0+XG4gICAgICAgICAgICBjYWxsYmFjayhpdGVtQSwgaXRlbUIsIGlkQSwgaWRCKVxuICAgICAgICAgIClcbiAgICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpLFxuICAgIH0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgdjQgYXMgdXVpZDQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgcHVyZURlZXBPYmplY3RBc3NpZ24gfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbmltcG9ydCB7XG4gIERhdGFJbnRlcmZhY2UsXG4gIERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldElkc09wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5LFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdCxcbiAgRGF0YUludGVyZmFjZU1hcE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VPcmRlcixcbiAgRGVlcFBhcnRpYWwsXG4gIEV2ZW50UGF5bG9hZHMsXG4gIEZ1bGxJdGVtLFxuICBJZCxcbiAgT3B0SWQsXG4gIFBhcnRJdGVtLFxuICBVcGRhdGVJdGVtLFxuICBpc0lkLFxufSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG5pbXBvcnQgeyBRdWV1ZSwgUXVldWVPcHRpb25zIH0gZnJvbSBcIi4vcXVldWVcIjtcbmltcG9ydCB7IERhdGFTZXRQYXJ0IH0gZnJvbSBcIi4vZGF0YS1zZXQtcGFydFwiO1xuaW1wb3J0IHsgRGF0YVN0cmVhbSB9IGZyb20gXCIuL2RhdGEtc3RyZWFtXCI7XG5cbi8qKlxuICogSW5pdGlhbCBEYXRhU2V0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICpcbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcCBleHRlbmRzIHN0cmluZz4ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZpZWxkIGNvbnRhaW5pbmcgdGhlIGlkIG9mIHRoZSBpdGVtcy4gV2hlbiBkYXRhIGlzIGZldGNoZWQgZnJvbSBhIHNlcnZlciB3aGljaCB1c2VzIHNvbWUgc3BlY2lmaWMgZmllbGQgdG8gaWRlbnRpZnkgaXRlbXMsIHRoaXMgZmllbGQgbmFtZSBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBEYXRhU2V0IHVzaW5nIHRoZSBvcHRpb24gYGZpZWxkSWRgLiBGb3IgZXhhbXBsZSBbQ291Y2hEQl0oaHR0cDovL2NvdWNoZGIuYXBhY2hlLm9yZy8pIHVzZXMgdGhlIGZpZWxkIGAnX2lkJ2AgdG8gaWRlbnRpZnkgZG9jdW1lbnRzLlxuICAgKi9cbiAgZmllbGRJZD86IElkUHJvcDtcbiAgLyoqXG4gICAqIFF1ZXVlIGRhdGEgY2hhbmdlcyAoJ2FkZCcsICd1cGRhdGUnLCAncmVtb3ZlJykgYW5kIGZsdXNoIHRoZW0gYXQgb25jZS4gVGhlIHF1ZXVlIGNhbiBiZSBmbHVzaGVkIG1hbnVhbGx5IGJ5IGNhbGxpbmcgYERhdGFTZXQuZmx1c2goKWAsIG9yIGNhbiBiZSBmbHVzaGVkIGFmdGVyIGEgY29uZmlndXJlZCBkZWxheSBvciBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzLlxuICAgKlxuICAgKiBXaGVuIHF1ZXVlIGlzIHRydWUsIGEgcXVldWUgaXMgY3JlYXRlZCB3aXRoIGRlZmF1bHQgb3B0aW9ucy4gT3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHByb3ZpZGluZyBhbiBvYmplY3QuXG4gICAqL1xuICBxdWV1ZT86IFF1ZXVlT3B0aW9ucyB8IGZhbHNlO1xufVxuLyoqIERhdGFTZXQgY29uZmlndXJhdGlvbiBvYmplY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFF1ZXVlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IG9yIGZhbHNlIGlmIG5vIHF1ZXVlIHNob3VsZCBiZSB1c2VkLlxuICAgKlxuICAgKiAtIElmIGZhbHNlIGFuZCB0aGVyZSB3YXMgYSBxdWV1ZSBiZWZvcmUgaXQgd2lsbCBiZSBmbHVzaGVkIGFuZCB0aGVuIHJlbW92ZWQuXG4gICAqIC0gSWYge0BsaW5rIFF1ZXVlT3B0aW9uc30gdGhlIGV4aXN0aW5nIHF1ZXVlIHdpbGwgYmUgcmVjb25maWd1cmVkIG9yIGEgbmV3IHF1ZXVlIHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIHF1ZXVlPzogUXVldWUgfCBRdWV1ZU9wdGlvbnMgfCBmYWxzZTtcbn1cblxuLyoqXG4gKiBBZGQgYW4gaWQgdG8gZ2l2ZW4gaXRlbSBpZiBpdCBkb2Vzbid0IGhhdmUgb25lIGFscmVhZHkuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBpdGVtIHdpbGwgYmUgbW9kaWZpZWQuXG4gKiBAcGFyYW0gaXRlbSAtIFRoZSBpdGVtIHRoYXQgd2lsbCBoYXZlIGFuIGlkIGFmdGVyIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIGlkUHJvcCAtIFRoZSBrZXkgb2YgdGhlIGlkIHByb3BlcnR5LlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKiBAcmV0dXJucyB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVuc3VyZUZ1bGxJdGVtPEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LCBJZFByb3AgZXh0ZW5kcyBzdHJpbmc+KFxuICBpdGVtOiBJdGVtLFxuICBpZFByb3A6IElkUHJvcFxuKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB7XG4gIGlmIChpdGVtW2lkUHJvcF0gPT0gbnVsbCkge1xuICAgIC8vIGdlbmVyYXRlIGFuIGlkXG4gICAgaXRlbVtpZFByb3BdID0gdXVpZDQoKSBhcyBhbnk7XG4gIH1cblxuICByZXR1cm4gaXRlbSBhcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xufVxuXG4vKipcbiAqICMgRGF0YVNldFxuICpcbiAqIFZpcy5qcyBjb21lcyB3aXRoIGEgZmxleGlibGUgRGF0YVNldCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gaG9sZCBhbmRcbiAqIG1hbmlwdWxhdGUgdW5zdHJ1Y3R1cmVkIGRhdGEgYW5kIGxpc3RlbiBmb3IgY2hhbmdlcyBpbiB0aGUgZGF0YS4gVGhlIERhdGFTZXRcbiAqIGlzIGtleS92YWx1ZSBiYXNlZC4gRGF0YSBpdGVtcyBjYW4gYmUgYWRkZWQsIHVwZGF0ZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGVcbiAqIERhdGFTZXQsIGFuZCBvbmUgY2FuIHN1YnNjcmliZSB0byBjaGFuZ2VzIGluIHRoZSBEYXRhU2V0LiBUaGUgZGF0YSBpbiB0aGVcbiAqIERhdGFTZXQgY2FuIGJlIGZpbHRlcmVkIGFuZCBvcmRlcmVkLiBEYXRhIGNhbiBiZSBub3JtYWxpemVkIHdoZW4gYXBwZW5kaW5nIGl0XG4gKiB0byB0aGUgRGF0YVNldCBhcyB3ZWxsLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHVzZSBhIERhdGFTZXQuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICogdmFyIG9wdGlvbnMgPSB7fTtcbiAqIHZhciBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KG9wdGlvbnMpO1xuICpcbiAqIC8vIGFkZCBpdGVtc1xuICogLy8gbm90ZSB0aGF0IHRoZSBkYXRhIGl0ZW1zIGNhbiBjb250YWluIGRpZmZlcmVudCBwcm9wZXJ0aWVzIGFuZCBkYXRhIGZvcm1hdHNcbiAqIGRhdGEuYWRkKFtcbiAqICAge2lkOiAxLCB0ZXh0OiAnaXRlbSAxJywgZGF0ZTogbmV3IERhdGUoMjAxMywgNiwgMjApLCBncm91cDogMSwgZmlyc3Q6IHRydWV9LFxuICogICB7aWQ6IDIsIHRleHQ6ICdpdGVtIDInLCBkYXRlOiAnMjAxMy0wNi0yMycsIGdyb3VwOiAyfSxcbiAqICAge2lkOiAzLCB0ZXh0OiAnaXRlbSAzJywgZGF0ZTogJzIwMTMtMDYtMjUnLCBncm91cDogMn0sXG4gKiAgIHtpZDogNCwgdGV4dDogJ2l0ZW0gNCd9XG4gKiBdKTtcbiAqXG4gKiAvLyBzdWJzY3JpYmUgdG8gYW55IGNoYW5nZSBpbiB0aGUgRGF0YVNldFxuICogZGF0YS5vbignKicsIGZ1bmN0aW9uIChldmVudCwgcHJvcGVydGllcywgc2VuZGVySWQpIHtcbiAqICAgY29uc29sZS5sb2coJ2V2ZW50JywgZXZlbnQsIHByb3BlcnRpZXMpO1xuICogfSk7XG4gKlxuICogLy8gdXBkYXRlIGFuIGV4aXN0aW5nIGl0ZW1cbiAqIGRhdGEudXBkYXRlKHtpZDogMiwgZ3JvdXA6IDF9KTtcbiAqXG4gKiAvLyByZW1vdmUgYW4gaXRlbVxuICogZGF0YS5yZW1vdmUoNCk7XG4gKlxuICogLy8gZ2V0IGFsbCBpZHNcbiAqIHZhciBpZHMgPSBkYXRhLmdldElkcygpO1xuICogY29uc29sZS5sb2coJ2lkcycsIGlkcyk7XG4gKlxuICogLy8gZ2V0IGEgc3BlY2lmaWMgaXRlbVxuICogdmFyIGl0ZW0xID0gZGF0YS5nZXQoMSk7XG4gKiBjb25zb2xlLmxvZygnaXRlbTEnLCBpdGVtMSk7XG4gKlxuICogLy8gcmV0cmlldmUgYSBmaWx0ZXJlZCBzdWJzZXQgb2YgdGhlIGRhdGFcbiAqIHZhciBpdGVtcyA9IGRhdGEuZ2V0KHtcbiAqICAgZmlsdGVyOiBmdW5jdGlvbiAoaXRlbSkge1xuICogICAgIHJldHVybiBpdGVtLmdyb3VwID09IDE7XG4gKiAgIH1cbiAqIH0pO1xuICogY29uc29sZS5sb2coJ2ZpbHRlcmVkIGl0ZW1zJywgaXRlbXMpO1xuICogYGBgXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU2V0PFxuICAgIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICAgIElkUHJvcCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuICA+XG4gIGV4dGVuZHMgRGF0YVNldFBhcnQ8SXRlbSwgSWRQcm9wPlxuICBpbXBsZW1lbnRzIERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPlxue1xuICAvKiogRmx1c2ggYWxsIHF1ZXVlZCBjYWxscy4gKi9cbiAgcHVibGljIGZsdXNoPzogKCkgPT4gdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBsZW5ndGg6IG51bWJlcjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQgaWRQcm9wKCk6IElkUHJvcCB7XG4gICAgcmV0dXJuIHRoaXMuX2lkUHJvcDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhOiBNYXA8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pZFByb3A6IElkUHJvcDtcbiAgcHJpdmF0ZSBfcXVldWU6IFF1ZXVlPHRoaXM+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRGF0YVNldCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPik7XG4gIC8qKlxuICAgKiBAcGFyYW0gZGF0YSAtIEFuIGluaXRpYWwgc2V0IG9mIGl0ZW1zIGZvciB0aGUgbmV3IGluc3RhbmNlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIERhdGFTZXQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihkYXRhOiBJdGVtW10sIG9wdGlvbnM/OiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPik7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgRGF0YVNldC5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBJbml0aWFsIGRhdGEgb3Igb3B0aW9ucy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zICh0eXBlIGVycm9yIGlmIGRhdGEgaXMgYWxzbyBvcHRpb25zKS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBkYXRhPzogSXRlbVtdIHwgRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD4sXG4gICAgb3B0aW9ucz86IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+XG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBjb3JyZWN0bHkgcmVhZCBvcHRpb25hbCBhcmd1bWVudHNcbiAgICBpZiAoZGF0YSAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgb3B0aW9ucyA9IGRhdGE7XG4gICAgICBkYXRhID0gW107XG4gICAgfVxuXG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5fZGF0YSA9IG5ldyBNYXAoKTsgLy8gbWFwIHdpdGggZGF0YSBpbmRleGVkIGJ5IGlkXG4gICAgdGhpcy5sZW5ndGggPSAwOyAvLyBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIERhdGFTZXRcbiAgICB0aGlzLl9pZFByb3AgPSB0aGlzLl9vcHRpb25zLmZpZWxkSWQgfHwgKFwiaWRcIiBhcyBJZFByb3ApOyAvLyBuYW1lIG9mIHRoZSBmaWVsZCBjb250YWluaW5nIGlkXG5cbiAgICAvLyBhZGQgaW5pdGlhbCBkYXRhIHdoZW4gcHJvdmlkZWRcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCkge1xuICAgICAgdGhpcy5hZGQoZGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBuZXcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgbmV3IG9wdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zPzogRGF0YVNldE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLnF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICAvLyBkZWxldGUgcXVldWUgaWYgbG9hZGVkXG4gICAgICAgIGlmICh0aGlzLl9xdWV1ZSkge1xuICAgICAgICAgIHRoaXMuX3F1ZXVlLmRlc3Ryb3koKTtcbiAgICAgICAgICB0aGlzLl9xdWV1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNyZWF0ZSBxdWV1ZSBhbmQgdXBkYXRlIGl0cyBvcHRpb25zXG4gICAgICAgIGlmICghdGhpcy5fcXVldWUpIHtcbiAgICAgICAgICB0aGlzLl9xdWV1ZSA9IFF1ZXVlLmV4dGVuZCh0aGlzLCB7XG4gICAgICAgICAgICByZXBsYWNlOiBbXCJhZGRcIiwgXCJ1cGRhdGVcIiwgXCJyZW1vdmVcIl0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5xdWV1ZSAmJiB0eXBlb2Ygb3B0aW9ucy5xdWV1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHRoaXMuX3F1ZXVlLnNldE9wdGlvbnMob3B0aW9ucy5xdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZGF0YSBpdGVtIG9yIGFuIGFycmF5IHdpdGggaXRlbXMuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgYWRkZWQgdG8gdGhlIERhdGFTZXQsIHRoZSBEYXRhU2V0IHdpbGwgdHJpZ2dlciBhbiBldmVudCBgYWRkYC4gV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAgICogY29uc3QgZGF0YSA9IG5ldyB2aXMuRGF0YVNldCgpXG4gICAqXG4gICAqIC8vIGFkZCBpdGVtc1xuICAgKiBjb25zdCBpZHMgPSBkYXRhLmFkZChbXG4gICAqICAgeyBpZDogMSwgdGV4dDogJ2l0ZW0gMScgfSxcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyJyB9LFxuICAgKiAgIHsgdGV4dDogJ2l0ZW0gd2l0aG91dCBhbiBpZCcgfVxuICAgKiBdKVxuICAgKlxuICAgKiBjb25zb2xlLmxvZyhpZHMpIC8vIFsxLCAyLCAnPFVVSUR2ND4nXVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBJdGVtcyB0byBiZSBhZGRlZCAoaWRzIHdpbGwgYmUgZ2VuZXJhdGVkIGlmIG1pc3NpbmcpLlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIGFkZGVkSWRzIC0gQXJyYXkgd2l0aCB0aGUgaWRzIChnZW5lcmF0ZWQgaWYgbm90IHByZXNlbnQpIG9mIHRoZSBhZGRlZCBpdGVtcy5cbiAgICogQHRocm93cyBXaGVuIGFuIGl0ZW0gd2l0aCB0aGUgc2FtZSBpZCBhcyBhbnkgb2YgdGhlIGFkZGVkIGl0ZW1zIGFscmVhZHkgZXhpc3RzLlxuICAgKi9cbiAgcHVibGljIGFkZChkYXRhOiBJdGVtIHwgSXRlbVtdLCBzZW5kZXJJZD86IElkIHwgbnVsbCk6IChzdHJpbmcgfCBudW1iZXIpW10ge1xuICAgIGNvbnN0IGFkZGVkSWRzOiBJZFtdID0gW107XG4gICAgbGV0IGlkOiBJZDtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAvLyBBcnJheVxuICAgICAgY29uc3QgaWRzVG9BZGQ6IElkW10gPSBkYXRhLm1hcCgoZCkgPT4gZFt0aGlzLl9pZFByb3BdIGFzIElkKTtcbiAgICAgIGlmIChpZHNUb0FkZC5zb21lKChpZCkgPT4gdGhpcy5fZGF0YS5oYXMoaWQpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGR1cGxpY2F0ZSBpZCB3YXMgZm91bmQgaW4gdGhlIHBhcmFtZXRlciBhcnJheS5cIik7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZGF0YS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZCA9IHRoaXMuX2FkZEl0ZW0oZGF0YVtpXSk7XG4gICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgLy8gU2luZ2xlIGl0ZW1cbiAgICAgIGlkID0gdGhpcy5fYWRkSXRlbShkYXRhKTtcbiAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlXCIpO1xuICAgIH1cblxuICAgIGlmIChhZGRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogYWRkZWRJZHMgfSwgc2VuZGVySWQpO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRlZElkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZXhpc3RpbmcgaXRlbXMuIFdoZW4gYW4gaXRlbSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgcHJvdmlkZWQgcHJvcGVydGllcyB3aWxsIGJlIG1lcmdlZCBpbiB0aGUgZXhpc3RpbmcgaXRlbS4gV2hlbiBhbiBpdGVtIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgdXBkYXRlZCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGBhZGRgIGZvciB0aGUgYWRkZWQgaXRlbXMsIGFuZCBhbiBldmVudCBgdXBkYXRlYC4gV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAgICogY29uc3QgZGF0YSA9IG5ldyB2aXMuRGF0YVNldChbXG4gICAqICAgeyBpZDogMSwgdGV4dDogJ2l0ZW0gMScgfSxcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyJyB9LFxuICAgKiAgIHsgaWQ6IDMsIHRleHQ6ICdpdGVtIDMnIH1cbiAgICogXSlcbiAgICpcbiAgICogLy8gdXBkYXRlIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEudXBkYXRlKFtcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyICh1cGRhdGVkKScgfSxcbiAgICogICB7IGlkOiA0LCB0ZXh0OiAnaXRlbSA0IChuZXcpJyB9XG4gICAqIF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzIsIDRdXG4gICAqIGBgYFxuICAgKlxuICAgKiAjIyBXYXJuaW5nIGZvciBUeXBlU2NyaXB0IHVzZXJzXG4gICAqIFRoaXMgbWV0aG9kIG1heSBpbnRyb2R1Y2UgcGFydGlhbCBpdGVtcyBpbnRvIHRoZSBkYXRhIHNldC4gVXNlIGFkZCBvciB1cGRhdGVPbmx5IGluc3RlYWQgZm9yIGJldHRlciB0eXBlIHNhZmV0eS5cbiAgICogQHBhcmFtIGRhdGEgLSBJdGVtcyB0byBiZSB1cGRhdGVkIChpZiB0aGUgaWQgaXMgYWxyZWFkeSBwcmVzZW50KSBvciBhZGRlZCAoaWYgdGhlIGlkIGlzIG1pc3NpbmcpLlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIHVwZGF0ZWRJZHMgLSBUaGUgaWRzIG9mIHRoZSBhZGRlZCAodGhlc2UgbWF5IGJlIG5ld2x5IGdlbmVyYXRlZCBpZiB0aGVyZSB3YXMgbm8gaWQgaW4gdGhlIGl0ZW0gZnJvbSB0aGUgZGF0YSkgb3IgdXBkYXRlZCBpdGVtcy5cbiAgICogQHRocm93cyBXaGVuIHRoZSBzdXBwbGllZCBkYXRhIGlzIG5laXRoZXIgYW4gaXRlbSBub3IgYW4gYXJyYXkgb2YgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlKFxuICAgIGRhdGE6IERlZXBQYXJ0aWFsPEl0ZW0+IHwgRGVlcFBhcnRpYWw8SXRlbT5bXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiBJZFtdIHtcbiAgICBjb25zdCBhZGRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCBvbGREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBjb25zdCB1cGRhdGVkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG4gICAgY29uc3QgaWRQcm9wID0gdGhpcy5faWRQcm9wO1xuXG4gICAgY29uc3QgYWRkT3JVcGRhdGUgPSAoaXRlbTogRGVlcFBhcnRpYWw8SXRlbT4pOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IG9yaWdJZDogT3B0SWQgPSBpdGVtW2lkUHJvcF07XG4gICAgICBpZiAob3JpZ0lkICE9IG51bGwgJiYgdGhpcy5fZGF0YS5oYXMob3JpZ0lkKSkge1xuICAgICAgICBjb25zdCBmdWxsSXRlbSA9IGl0ZW0gYXMgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjsgLy8gaXQgaGFzIGFuIGlkLCB0aGVyZWZvcmUgaXQgaXMgYSBmdWxsaXRlbVxuICAgICAgICBjb25zdCBvbGRJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZGF0YS5nZXQob3JpZ0lkKSk7XG4gICAgICAgIC8vIHVwZGF0ZSBpdGVtXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5fdXBkYXRlSXRlbShmdWxsSXRlbSk7XG4gICAgICAgIHVwZGF0ZWRJZHMucHVzaChpZCk7XG4gICAgICAgIHVwZGF0ZWREYXRhLnB1c2goZnVsbEl0ZW0pO1xuICAgICAgICBvbGREYXRhLnB1c2gob2xkSXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhZGQgbmV3IGl0ZW1cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLl9hZGRJdGVtKGl0ZW0gYXMgYW55KTtcbiAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAvLyBBcnJheVxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGRhdGFbaV0gJiYgdHlwZW9mIGRhdGFbaV0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBhZGRPclVwZGF0ZShkYXRhW2ldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIklnbm9yaW5nIGlucHV0IGl0ZW0sIHdoaWNoIGlzIG5vdCBhbiBvYmplY3QgYXQgaW5kZXggXCIgKyBpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgLy8gU2luZ2xlIGl0ZW1cbiAgICAgIGFkZE9yVXBkYXRlKGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlXCIpO1xuICAgIH1cblxuICAgIGlmIChhZGRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogYWRkZWRJZHMgfSwgc2VuZGVySWQpO1xuICAgIH1cbiAgICBpZiAodXBkYXRlZElkcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByb3BzID0geyBpdGVtczogdXBkYXRlZElkcywgb2xkRGF0YTogb2xkRGF0YSwgZGF0YTogdXBkYXRlZERhdGEgfTtcbiAgICAgIC8vIFRPRE86IHJlbW92ZSBkZXByZWNhdGVkIHByb3BlcnR5ICdkYXRhJyBzb21lIGRheVxuICAgICAgLy9PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdkYXRhJywge1xuICAgICAgLy8gICdnZXQnOiAoZnVuY3Rpb24oKSB7XG4gICAgICAvLyAgICBjb25zb2xlLndhcm4oJ1Byb3BlcnR5IGRhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIERhdGFTZXQuZ2V0KGlkcykgdG8gcmV0cmlldmUgdGhlIG5ldyBkYXRhLCB1c2UgdGhlIG9sZERhdGEgcHJvcGVydHkgb24gdGhpcyBvYmplY3QgdG8gZ2V0IHRoZSBvbGQgZGF0YScpO1xuICAgICAgLy8gICAgcmV0dXJuIHVwZGF0ZWREYXRhO1xuICAgICAgLy8gIH0pLmJpbmQodGhpcylcbiAgICAgIC8vfSk7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwidXBkYXRlXCIsIHByb3BzLCBzZW5kZXJJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZGVkSWRzLmNvbmNhdCh1cGRhdGVkSWRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZXhpc3RpbmcgaXRlbXMuIFdoZW4gYW4gaXRlbSBkb2VzIG5vdCBleGlzdCwgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBwcm92aWRlZCBwcm9wZXJ0aWVzIHdpbGwgYmUgZGVlcGx5IG1lcmdlZCBpbnRvIHRoZSBleGlzdGluZyBpdGVtLlxuICAgKiBXaGVuIGFuIGl0ZW0gZG9lcyBub3QgZXhpc3QgKGlkIG5vdCBwcmVzZW50IGluIHRoZSBkYXRhIHNldCBvciBhYnNlbnQpLCBhbiBlcnJvciB3aWxsIGJlIHRocm93biBhbmQgbm90aGluZyB3aWxsIGJlIGNoYW5nZWQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgdXBkYXRlZCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGB1cGRhdGVgLlxuICAgKiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyBpZDogMywgdGV4dDogJ2l0ZW0gMycgfSxcbiAgICogXSlcbiAgICpcbiAgICogLy8gdXBkYXRlIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEudXBkYXRlKFtcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyICh1cGRhdGVkKScgfSwgLy8gd29ya3NcbiAgICogICAvLyB7IGlkOiA0LCB0ZXh0OiAnaXRlbSA0IChuZXcpJyB9LCAvLyB3b3VsZCB0aHJvd1xuICAgKiAgIC8vIHsgdGV4dDogJ2l0ZW0gNCAobmV3KScgfSwgLy8gd291bGQgYWxzbyB0aHJvd1xuICAgKiBdKVxuICAgKlxuICAgKiBjb25zb2xlLmxvZyhpZHMpIC8vIFsyXVxuICAgKiBgYGBcbiAgICogQHBhcmFtIGRhdGEgLSBVcGRhdGVzICh0aGUgaWQgYW5kIG9wdGlvbmFsbHkgb3RoZXIgcHJvcHMpIHRvIHRoZSBpdGVtcyBpbiB0aGlzIGRhdGEgc2V0LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIHVwZGF0ZWRJZHMgLSBUaGUgaWRzIG9mIHRoZSB1cGRhdGVkIGl0ZW1zLlxuICAgKiBAdGhyb3dzIFdoZW4gdGhlIHN1cHBsaWVkIGRhdGEgaXMgbmVpdGhlciBhbiBpdGVtIG5vciBhbiBhcnJheSBvZiBpdGVtcywgd2hlbiB0aGUgaWRzIGFyZSBtaXNzaW5nLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZU9ubHkoXG4gICAgZGF0YTogVXBkYXRlSXRlbTxJdGVtLCBJZFByb3A+IHwgVXBkYXRlSXRlbTxJdGVtLCBJZFByb3A+W10sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogSWRbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBkYXRhID0gW2RhdGFdO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZUV2ZW50RGF0YSA9IGRhdGFcbiAgICAgIC5tYXAoXG4gICAgICAgIChcbiAgICAgICAgICB1cGRhdGVcbiAgICAgICAgKToge1xuICAgICAgICAgIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgICAgdXBkYXRlOiBVcGRhdGVJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgIH0gPT4ge1xuICAgICAgICAgIGNvbnN0IG9sZERhdGEgPSB0aGlzLl9kYXRhLmdldCh1cGRhdGVbdGhpcy5faWRQcm9wXSk7XG4gICAgICAgICAgaWYgKG9sZERhdGEgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVXBkYXRpbmcgbm9uLWV4aXN0ZW50IGl0ZW1zIGlzIG5vdCBhbGxvd2VkLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgb2xkRGF0YSwgdXBkYXRlIH07XG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC5tYXAoXG4gICAgICAgICh7XG4gICAgICAgICAgb2xkRGF0YSxcbiAgICAgICAgICB1cGRhdGUsXG4gICAgICAgIH0pOiB7XG4gICAgICAgICAgaWQ6IElkO1xuICAgICAgICAgIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgICAgdXBkYXRlZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgIH0gPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gb2xkRGF0YVt0aGlzLl9pZFByb3BdO1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gcHVyZURlZXBPYmplY3RBc3NpZ24ob2xkRGF0YSwgdXBkYXRlKTtcblxuICAgICAgICAgIHRoaXMuX2RhdGEuc2V0KGlkLCB1cGRhdGVkRGF0YSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBvbGREYXRhOiBvbGREYXRhLFxuICAgICAgICAgICAgdXBkYXRlZERhdGEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgIGlmICh1cGRhdGVFdmVudERhdGEubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwcm9wczogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdID0ge1xuICAgICAgICBpdGVtczogdXBkYXRlRXZlbnREYXRhLm1hcCgodmFsdWUpOiBJZCA9PiB2YWx1ZS5pZCksXG4gICAgICAgIG9sZERhdGE6IHVwZGF0ZUV2ZW50RGF0YS5tYXAoXG4gICAgICAgICAgKHZhbHVlKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiA9PiB2YWx1ZS5vbGREYXRhXG4gICAgICAgICksXG4gICAgICAgIGRhdGE6IHVwZGF0ZUV2ZW50RGF0YS5tYXAoXG4gICAgICAgICAgKHZhbHVlKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiA9PiB2YWx1ZS51cGRhdGVkRGF0YVxuICAgICAgICApLFxuICAgICAgfTtcbiAgICAgIC8vIFRPRE86IHJlbW92ZSBkZXByZWNhdGVkIHByb3BlcnR5ICdkYXRhJyBzb21lIGRheVxuICAgICAgLy9PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdkYXRhJywge1xuICAgICAgLy8gICdnZXQnOiAoZnVuY3Rpb24oKSB7XG4gICAgICAvLyAgICBjb25zb2xlLndhcm4oJ1Byb3BlcnR5IGRhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIERhdGFTZXQuZ2V0KGlkcykgdG8gcmV0cmlldmUgdGhlIG5ldyBkYXRhLCB1c2UgdGhlIG9sZERhdGEgcHJvcGVydHkgb24gdGhpcyBvYmplY3QgdG8gZ2V0IHRoZSBvbGQgZGF0YScpO1xuICAgICAgLy8gICAgcmV0dXJuIHVwZGF0ZWREYXRhO1xuICAgICAgLy8gIH0pLmJpbmQodGhpcylcbiAgICAgIC8vfSk7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwidXBkYXRlXCIsIHByb3BzLCBzZW5kZXJJZCk7XG5cbiAgICAgIHJldHVybiBwcm9wcy5pdGVtcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkOiBJZCk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkczogSWRbXSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGZpcnN0PzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gfCBJZCB8IElkW10sXG4gICAgc2Vjb25kPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PiB7XG4gICAgLy8gQFRPRE86IFdvdWRuJ3QgaXQgYmUgYmV0dGVyIHRvIHNwbGl0IHRoaXMgaW50byBtdWx0aXBsZSBtZXRob2RzP1xuXG4gICAgLy8gcGFyc2UgdGhlIGFyZ3VtZW50c1xuICAgIGxldCBpZDogSWQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGlkczogSWRbXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzSWQoZmlyc3QpKSB7XG4gICAgICAvLyBnZXQoaWQgWywgb3B0aW9uc10pXG4gICAgICBpZCA9IGZpcnN0O1xuICAgICAgb3B0aW9ucyA9IHNlY29uZDtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmlyc3QpKSB7XG4gICAgICAvLyBnZXQoaWRzIFssIG9wdGlvbnNdKVxuICAgICAgaWRzID0gZmlyc3Q7XG4gICAgICBvcHRpb25zID0gc2Vjb25kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBnZXQoWywgb3B0aW9uc10pXG4gICAgICBvcHRpb25zID0gZmlyc3Q7XG4gICAgfVxuXG4gICAgLy8gZGV0ZXJtaW5lIHRoZSByZXR1cm4gdHlwZVxuICAgIGNvbnN0IHJldHVyblR5cGUgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnJldHVyblR5cGUgPT09IFwiT2JqZWN0XCIgPyBcIk9iamVjdFwiIDogXCJBcnJheVwiO1xuICAgIC8vIEBUT0RPOiBXVEYgaXMgdGhpcz8gT3IgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz9cbiAgICAvLyB2YXIgcmV0dXJuVHlwZVxuICAgIC8vIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmV0dXJuVHlwZSkge1xuICAgIC8vICAgdmFyIGFsbG93ZWRWYWx1ZXMgPSBbJ0FycmF5JywgJ09iamVjdCddXG4gICAgLy8gICByZXR1cm5UeXBlID1cbiAgICAvLyAgICAgYWxsb3dlZFZhbHVlcy5pbmRleE9mKG9wdGlvbnMucmV0dXJuVHlwZSkgPT0gLTFcbiAgICAvLyAgICAgICA/ICdBcnJheSdcbiAgICAvLyAgICAgICA6IG9wdGlvbnMucmV0dXJuVHlwZVxuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICByZXR1cm5UeXBlID0gJ0FycmF5J1xuICAgIC8vIH1cblxuICAgIC8vIGJ1aWxkIG9wdGlvbnNcbiAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IGl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBsZXQgaXRlbTogdW5kZWZpbmVkIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaXRlbUlkczogdW5kZWZpbmVkIHwgSWRbXSA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaXRlbUlkOiB1bmRlZmluZWQgfCBJZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIGNvbnZlcnQgaXRlbXNcbiAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgLy8gcmV0dXJuIGEgc2luZ2xlIGl0ZW1cbiAgICAgIGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICBpZiAoaXRlbSAmJiBmaWx0ZXIgJiYgIWZpbHRlcihpdGVtKSkge1xuICAgICAgICBpdGVtID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaWRzICE9IG51bGwpIHtcbiAgICAgIC8vIHJldHVybiBhIHN1YnNldCBvZiBpdGVtc1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWRzW2ldKTtcbiAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoaXRlbSkpKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXR1cm4gYWxsIGl0ZW1zXG4gICAgICBpdGVtSWRzID0gWy4uLnRoaXMuX2RhdGEua2V5cygpXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGl0ZW1JZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgIGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpdGVtSWQpO1xuICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmICghZmlsdGVyIHx8IGZpbHRlcihpdGVtKSkpIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gb3JkZXIgdGhlIHJlc3VsdHNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyICYmIGlkID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fc29ydChpdGVtcywgb3B0aW9ucy5vcmRlcik7XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIGZpZWxkcyBvZiB0aGUgaXRlbXNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmZpZWxkcykge1xuICAgICAgY29uc3QgZmllbGRzID0gb3B0aW9ucy5maWVsZHM7XG4gICAgICBpZiAoaWQgIT0gdW5kZWZpbmVkICYmIGl0ZW0gIT0gbnVsbCkge1xuICAgICAgICBpdGVtID0gdGhpcy5fZmlsdGVyRmllbGRzKGl0ZW0sIGZpZWxkcykgYXMgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGl0ZW1zW2ldID0gdGhpcy5fZmlsdGVyRmllbGRzKGl0ZW1zW2ldLCBmaWVsZHMpIGFzIEZ1bGxJdGVtPFxuICAgICAgICAgICAgSXRlbSxcbiAgICAgICAgICAgIElkUHJvcFxuICAgICAgICAgID47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZXR1cm4gdGhlIHJlc3VsdHNcbiAgICBpZiAocmV0dXJuVHlwZSA9PSBcIk9iamVjdFwiKSB7XG4gICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+ID0ge307XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVzdWx0YW50ID0gaXRlbXNbaV07XG4gICAgICAgIC8vIEBUT0RPOiBTaG91ZG4ndCB0aGlzIGJlIHRoaXMuX2ZpZWxkSWQ/XG4gICAgICAgIC8vIHJlc3VsdFtyZXN1bHRhbnQuaWRdID0gcmVzdWx0YW50XG4gICAgICAgIGNvbnN0IGlkOiBJZCA9IHJlc3VsdGFudFt0aGlzLl9pZFByb3BdO1xuICAgICAgICByZXN1bHRbaWRdID0gcmVzdWx0YW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgLy8gYSBzaW5nbGUgaXRlbVxuICAgICAgICByZXR1cm4gaXRlbSA/PyBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8ganVzdCByZXR1cm4gb3VyIGFycmF5XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldElkcyhvcHRpb25zPzogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT4pOiBJZFtdIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IG9yZGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuICAgIGNvbnN0IGlkczogSWRbXSA9IFtdO1xuXG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgLy8gZ2V0IGZpbHRlcmVkIGl0ZW1zXG4gICAgICBpZiAob3JkZXIpIHtcbiAgICAgICAgLy8gY3JlYXRlIG9yZGVyZWQgbGlzdFxuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgZmlsdGVyKGl0ZW0pKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NvcnQoaXRlbXMsIG9yZGVyKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZHMucHVzaChpdGVtc1tpXVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIHVub3JkZXJlZCBsaXN0XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiBmaWx0ZXIoaXRlbSkpIHtcbiAgICAgICAgICAgIGlkcy5wdXNoKGl0ZW1bdGhpcy5faWRQcm9wXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldCBhbGwgaXRlbXNcbiAgICAgIGlmIChvcmRlcikge1xuICAgICAgICAvLyBjcmVhdGUgYW4gb3JkZXJlZCBsaXN0XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGl0ZW1zLnB1c2goZGF0YS5nZXQoaWQpISk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zb3J0KGl0ZW1zLCBvcmRlcik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaWRzLnB1c2goaXRlbXNbaV1bdGhpcy5faWRQcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNyZWF0ZSB1bm9yZGVyZWQgbGlzdFxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YS5nZXQoaWQpO1xuICAgICAgICAgIGlmIChpdGVtICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlkcy5wdXNoKGl0ZW1bdGhpcy5faWRQcm9wXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0RGF0YVNldCgpOiBEYXRhU2V0PEl0ZW0sIElkUHJvcD4ge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBmb3JFYWNoKFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiB2b2lkLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnM8SXRlbT5cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICBjb25zdCBpdGVtSWRzID0gWy4uLmRhdGEua2V5cygpXTtcblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMub3JkZXIpIHtcbiAgICAgIC8vIGV4ZWN1dGUgZm9yRWFjaCBvbiBvcmRlcmVkIGxpc3RcbiAgICAgIGNvbnN0IGl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSB0aGlzLmdldChvcHRpb25zKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgY29uc3QgaWQgPSBpdGVtW3RoaXMuX2lkUHJvcF07XG4gICAgICAgIGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5vcmRlcmVkXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGl0ZW0pKSkge1xuICAgICAgICAgIGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgbWFwPFQ+KFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBULFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxJdGVtLCBUPlxuICApOiBUW10ge1xuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3QgbWFwcGVkSXRlbXM6IFRbXSA9IFtdO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuXG4gICAgLy8gY29udmVydCBhbmQgZmlsdGVyIGl0ZW1zXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICBpZiAoaXRlbSAhPSBudWxsICYmICghZmlsdGVyIHx8IGZpbHRlcihpdGVtKSkpIHtcbiAgICAgICAgbWFwcGVkSXRlbXMucHVzaChjYWxsYmFjayhpdGVtLCBpZCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9yZGVyIGl0ZW1zXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcikge1xuICAgICAgdGhpcy5fc29ydChtYXBwZWRJdGVtcywgb3B0aW9ucy5vcmRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBlZEl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KGl0ZW06IG51bGwsIGZpZWxkczogS1tdKTogbnVsbDtcbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGl0ZW06IFJlY29yZDxLLCB1bmtub3duPixcbiAgICBmaWVsZHM6IEtbXVxuICApOiBSZWNvcmQ8SywgdW5rbm93bj47XG4gIHByaXZhdGUgX2ZpbHRlckZpZWxkczxLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpdGVtOiBSZWNvcmQ8SywgdW5rbm93bj4sXG4gICAgZmllbGRzOiBLW10gfCBSZWNvcmQ8Sywgc3RyaW5nPlxuICApOiBhbnk7XG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIGZpZWxkcyBvZiBhbiBpdGVtLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSAtIFRoZSBpdGVtIHdob3NlIGZpZWxkcyBzaG91bGQgYmUgZmlsdGVyZWQuXG4gICAqIEBwYXJhbSBmaWVsZHMgLSBUaGUgbmFtZXMgb2YgdGhlIGZpZWxkcyB0aGF0IHdpbGwgYmUga2VwdC5cbiAgICogQHR5cGVQYXJhbSBLIC0gRmllbGQgbmFtZSB0eXBlLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGZpZWxkcy5cbiAgICovXG4gIHByaXZhdGUgX2ZpbHRlckZpZWxkczxLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpdGVtOiBSZWNvcmQ8SywgdW5rbm93bj4gfCBudWxsLFxuICAgIGZpZWxkczogS1tdIHwgUmVjb3JkPEssIHVua25vd24+XG4gICk6IFJlY29yZDxLLCB1bmtub3duPiB8IG51bGwge1xuICAgIGlmICghaXRlbSkge1xuICAgICAgLy8gaXRlbSBpcyBudWxsXG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgQXJyYXkuaXNBcnJheShmaWVsZHMpXG4gICAgICAgID8gLy8gVXNlIHRoZSBzdXBwbGllZCBhcnJheVxuICAgICAgICAgIGZpZWxkc1xuICAgICAgICA6IC8vIFVzZSB0aGUga2V5cyBvZiB0aGUgc3VwcGxpZWQgb2JqZWN0XG4gICAgICAgICAgKE9iamVjdC5rZXlzKGZpZWxkcykgYXMgS1tdKVxuICAgICkucmVkdWNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICAgIChmaWx0ZXJlZEl0ZW0sIGZpZWxkKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICAgICAgICBmaWx0ZXJlZEl0ZW1bZmllbGRdID0gaXRlbVtmaWVsZF07XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZEl0ZW07XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnQgdGhlIHByb3ZpZGVkIGFycmF5IHdpdGggaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIEl0ZW1zIHRvIGJlIHNvcnRlZCBpbiBwbGFjZS5cbiAgICogQHBhcmFtIG9yZGVyIC0gQSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgaXRlbXMgaW4gdGhlIGl0ZW1zIGFycmF5LlxuICAgKi9cbiAgcHJpdmF0ZSBfc29ydDxUPihpdGVtczogVFtdLCBvcmRlcjogRGF0YUludGVyZmFjZU9yZGVyPFQ+KTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBvcmRlciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gb3JkZXIgYnkgcHJvdmlkZWQgZmllbGQgbmFtZVxuICAgICAgY29uc3QgbmFtZSA9IG9yZGVyOyAvLyBmaWVsZCBuYW1lXG4gICAgICBpdGVtcy5zb3J0KChhLCBiKTogLTEgfCAwIHwgMSA9PiB7XG4gICAgICAgIC8vIEBUT0RPOiBIb3cgdG8gdHJlYXQgbWlzc2luZyBwcm9wZXJ0aWVzP1xuICAgICAgICBjb25zdCBhdiA9IChhIGFzIGFueSlbbmFtZV07XG4gICAgICAgIGNvbnN0IGJ2ID0gKGIgYXMgYW55KVtuYW1lXTtcbiAgICAgICAgcmV0dXJuIGF2ID4gYnYgPyAxIDogYXYgPCBidiA/IC0xIDogMDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9yZGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIG9yZGVyIGJ5IHNvcnQgZnVuY3Rpb25cbiAgICAgIGl0ZW1zLnNvcnQob3JkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBleHRlbmQgb3JkZXIgYnkgYW4gT2JqZWN0IHtmaWVsZDpzdHJpbmcsIGRpcmVjdGlvbjpzdHJpbmd9XG4gICAgICAvLyAgICAgICB3aGVyZSBkaXJlY3Rpb24gY2FuIGJlICdhc2MnIG9yICdkZXNjJ1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9yZGVyIG11c3QgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1wiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGl0ZW0gb3IgbXVsdGlwbGUgaXRlbXMgYnkg4oCccmVmZXJlbmNl4oCdIChvbmx5IHRoZSBpZCBpcyB1c2VkKSBvciBieSBpZC5cbiAgICpcbiAgICogVGhlIG1ldGhvZCBpZ25vcmVzIHJlbW92YWwgb2Ygbm9uLWV4aXN0aW5nIGl0ZW1zLCBhbmQgcmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBpZHMgb2YgdGhlIGl0ZW1zIHdoaWNoIGFyZSBhY3R1YWxseSByZW1vdmVkIGZyb20gdGhlIERhdGFTZXQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgcmVtb3ZlZCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGByZW1vdmVgIGZvciB0aGUgcmVtb3ZlZCBpdGVtcy4gV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAgICogY29uc3QgZGF0YSA9IG5ldyB2aXMuRGF0YVNldChbXG4gICAqICAgeyBpZDogMSwgdGV4dDogJ2l0ZW0gMScgfSxcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyJyB9LFxuICAgKiAgIHsgaWQ6IDMsIHRleHQ6ICdpdGVtIDMnIH1cbiAgICogXSlcbiAgICpcbiAgICogLy8gcmVtb3ZlIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEucmVtb3ZlKFsyLCB7IGlkOiAzIH0sIDRdKVxuICAgKlxuICAgKiBjb25zb2xlLmxvZyhpZHMpIC8vIFsyLCAzXVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGlkIC0gT25lIG9yIG1vcmUgaXRlbXMgb3IgaWRzIG9mIGl0ZW1zIHRvIGJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgVGhlIGlkcyBvZiB0aGUgcmVtb3ZlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyByZW1vdmUoaWQ6IElkIHwgSXRlbSB8IChJZCB8IEl0ZW0pW10sIHNlbmRlcklkPzogSWQgfCBudWxsKTogSWRbXSB7XG4gICAgY29uc3QgcmVtb3ZlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICAvLyBmb3JjZSBldmVyeXRoaW5nIHRvIGJlIGFuIGFycmF5IGZvciBzaW1wbGljaXR5XG4gICAgY29uc3QgaWRzID0gQXJyYXkuaXNBcnJheShpZCkgPyBpZCA6IFtpZF07XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fcmVtb3ZlKGlkc1tpXSk7XG4gICAgICBpZiAoaXRlbSkge1xuICAgICAgICBjb25zdCBpdGVtSWQ6IE9wdElkID0gaXRlbVt0aGlzLl9pZFByb3BdO1xuICAgICAgICBpZiAoaXRlbUlkICE9IG51bGwpIHtcbiAgICAgICAgICByZW1vdmVkSWRzLnB1c2goaXRlbUlkKTtcbiAgICAgICAgICByZW1vdmVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZW1vdmVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgXCJyZW1vdmVcIixcbiAgICAgICAgeyBpdGVtczogcmVtb3ZlZElkcywgb2xkRGF0YTogcmVtb3ZlZEl0ZW1zIH0sXG4gICAgICAgIHNlbmRlcklkXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZW1vdmVkSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpdGVtIGJ5IGl0cyBpZCBvciByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIElkIG9mIGFuIGl0ZW0gb3IgdGhlIGl0ZW0gaXRzZWxmLlxuICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBpdGVtIGlmIHJlbW92ZWQsIG51bGwgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVtb3ZlKGlkOiBJZCB8IEl0ZW0pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHwgbnVsbCB7XG4gICAgLy8gQFRPRE86IEl0IG9yaWdpYW5sbHkgcmV0dXJuZWQgdGhlIGl0ZW0gYWx0aG91Z2ggdGhlIGRvY3Mgc2F5IGlkLlxuICAgIC8vIFRoZSBjb2RlIGV4cGVjdHMgdGhlIGl0ZW0sIHNvIHByb2JhYmx5IGFuIGVycm9yIGluIHRoZSBkb2NzLlxuICAgIGxldCBpZGVudDogT3B0SWQ7XG5cbiAgICAvLyBjb25maXJtIHRoZSBpZCB0byB1c2UgYmFzZWQgb24gdGhlIGFyZ3MgdHlwZVxuICAgIGlmIChpc0lkKGlkKSkge1xuICAgICAgaWRlbnQgPSBpZDtcbiAgICB9IGVsc2UgaWYgKGlkICYmIHR5cGVvZiBpZCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgaWRlbnQgPSBpZFt0aGlzLl9pZFByb3BdOyAvLyBsb29rIGZvciB0aGUgaWRlbnRpZmllciBmaWVsZCB1c2luZyAuX2lkUHJvcFxuICAgIH1cblxuICAgIC8vIGRvIHRoZSByZW1vdmluZyBpZiB0aGUgaXRlbSBpcyBmb3VuZFxuICAgIGlmIChpZGVudCAhPSBudWxsICYmIHRoaXMuX2RhdGEuaGFzKGlkZW50KSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkZW50KSB8fCBudWxsO1xuICAgICAgdGhpcy5fZGF0YS5kZWxldGUoaWRlbnQpO1xuICAgICAgLS10aGlzLmxlbmd0aDtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBlbnRpcmUgZGF0YSBzZXQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgcmVtb3ZlZCwgdGhlIHtAbGluayBEYXRhU2V0fSB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYHJlbW92ZWAgZm9yIGFsbCByZW1vdmVkIGl0ZW1zLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIHJlbW92ZWRJZHMgLSBUaGUgaWRzIG9mIGFsbCByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIGNsZWFyKHNlbmRlcklkPzogSWQgfCBudWxsKTogSWRbXSB7XG4gICAgY29uc3QgaWRzID0gWy4uLnRoaXMuX2RhdGEua2V5cygpXTtcbiAgICBjb25zdCBpdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpdGVtcy5wdXNoKHRoaXMuX2RhdGEuZ2V0KGlkc1tpXSkhKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhLmNsZWFyKCk7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fdHJpZ2dlcihcInJlbW92ZVwiLCB7IGl0ZW1zOiBpZHMsIG9sZERhdGE6IGl0ZW1zIH0sIHNlbmRlcklkKTtcblxuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaXRlbSB3aXRoIG1heGltdW0gdmFsdWUgb2YgYSBzcGVjaWZpZWQgZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkIGZvciBtYXggdmFsdWUuXG4gICAqIEByZXR1cm5zIEl0ZW0gY29udGFpbmluZyBtYXggdmFsdWUsIG9yIG51bGwgaWYgbm8gaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgbWF4KGZpZWxkOiBrZXlvZiBJdGVtKTogSXRlbSB8IG51bGwge1xuICAgIGxldCBtYXggPSBudWxsO1xuICAgIGxldCBtYXhGaWVsZCA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fZGF0YS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgaXRlbUZpZWxkID0gaXRlbVtmaWVsZF07XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBpdGVtRmllbGQgPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgKG1heEZpZWxkID09IG51bGwgfHwgaXRlbUZpZWxkID4gbWF4RmllbGQpXG4gICAgICApIHtcbiAgICAgICAgbWF4ID0gaXRlbTtcbiAgICAgICAgbWF4RmllbGQgPSBpdGVtRmllbGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heCB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGl0ZW0gd2l0aCBtaW5pbXVtIHZhbHVlIG9mIGEgc3BlY2lmaWVkIGZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZmllbGQgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHNob3VsZCBiZSBzZWFyY2hlZCBmb3IgbWluIHZhbHVlLlxuICAgKiBAcmV0dXJucyBJdGVtIGNvbnRhaW5pbmcgbWluIHZhbHVlLCBvciBudWxsIGlmIG5vIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIG1pbihmaWVsZDoga2V5b2YgSXRlbSk6IEl0ZW0gfCBudWxsIHtcbiAgICBsZXQgbWluID0gbnVsbDtcbiAgICBsZXQgbWluRmllbGQgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuX2RhdGEudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGl0ZW1GaWVsZCA9IGl0ZW1bZmllbGRdO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgaXRlbUZpZWxkID09PSBcIm51bWJlclwiICYmXG4gICAgICAgIChtaW5GaWVsZCA9PSBudWxsIHx8IGl0ZW1GaWVsZCA8IG1pbkZpZWxkKVxuICAgICAgKSB7XG4gICAgICAgIG1pbiA9IGl0ZW07XG4gICAgICAgIG1pbkZpZWxkID0gaXRlbUZpZWxkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtaW4gfHwgbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBkaXN0aW5jdDxUIGV4dGVuZHMga2V5b2YgSXRlbT4ocHJvcDogVCk6IEl0ZW1bVF1bXTtcbiAgcHVibGljIGRpc3RpbmN0KHByb3A6IHN0cmluZyk6IHVua25vd25bXTtcbiAgLyoqXG4gICAqIEZpbmQgYWxsIGRpc3RpbmN0IHZhbHVlcyBvZiBhIHNwZWNpZmllZCBmaWVsZFxuICAgKlxuICAgKiBAcGFyYW0gcHJvcCAtIFRoZSBwcm9wZXJ0eSBuYW1lIHdob3NlIGRpc3RpbmN0IHZhbHVlcyBzaG91bGQgYmUgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIFVub3JkZXJlZCBhcnJheSBjb250YWluaW5nIGFsbCBkaXN0aW5jdCB2YWx1ZXMuIEl0ZW1zIHdpdGhvdXQgc3BlY2lmaWVkIHByb3BlcnR5IGFyZSBpZ25vcmVkLlxuICAgKi9cbiAgcHVibGljIGRpc3RpbmN0PFQgZXh0ZW5kcyBzdHJpbmc+KHByb3A6IFQpOiB1bmtub3duW10ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuICAgIGNvbnN0IHZhbHVlczogdW5rbm93bltdID0gW107XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICBjb25zdCBpdGVtID0gZGF0YS5nZXQoaWQpO1xuICAgICAgY29uc3QgdmFsdWUgPSAoaXRlbSBhcyBhbnkpW3Byb3BdO1xuICAgICAgbGV0IGV4aXN0cyA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbal0gPT0gdmFsdWUpIHtcbiAgICAgICAgICBleGlzdHMgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWV4aXN0cyAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlc1tjb3VudF0gPSB2YWx1ZTtcbiAgICAgICAgY291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpbmdsZSBpdGVtLiBXaWxsIGZhaWwgd2hlbiBhbiBpdGVtIHdpdGggdGhlIHNhbWUgaWQgYWxyZWFkeSBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtIC0gQSBuZXcgaXRlbSB0byBiZSBhZGRlZC5cbiAgICogQHJldHVybnMgQWRkZWQgaXRlbSdzIGlkLiBBbiBpZCBpcyBnZW5lcmF0ZWQgd2hlbiBpdCBpcyBub3QgcHJlc2VudCBpbiB0aGUgaXRlbS5cbiAgICovXG4gIHByaXZhdGUgX2FkZEl0ZW0oaXRlbTogSXRlbSk6IElkIHtcbiAgICBjb25zdCBmdWxsSXRlbSA9IGVuc3VyZUZ1bGxJdGVtKGl0ZW0sIHRoaXMuX2lkUHJvcCk7XG4gICAgY29uc3QgaWQgPSBmdWxsSXRlbVt0aGlzLl9pZFByb3BdO1xuXG4gICAgLy8gY2hlY2sgd2hldGhlciB0aGlzIGlkIGlzIGFscmVhZHkgdGFrZW5cbiAgICBpZiAodGhpcy5fZGF0YS5oYXMoaWQpKSB7XG4gICAgICAvLyBpdGVtIGFscmVhZHkgZXhpc3RzXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IGFkZCBpdGVtOiBpdGVtIHdpdGggaWQgXCIgKyBpZCArIFwiIGFscmVhZHkgZXhpc3RzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YS5zZXQoaWQsIGZ1bGxJdGVtKTtcbiAgICArK3RoaXMubGVuZ3RoO1xuXG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhIHNpbmdsZSBpdGVtOiBtZXJnZSB3aXRoIGV4aXN0aW5nIGl0ZW0uXG4gICAqIFdpbGwgZmFpbCB3aGVuIHRoZSBpdGVtIGhhcyBubyBpZCwgb3Igd2hlbiB0aGVyZSBkb2VzIG5vdCBleGlzdCBhbiBpdGVtIHdpdGggdGhlIHNhbWUgaWQuXG4gICAqXG4gICAqIEBwYXJhbSB1cGRhdGUgLSBUaGUgbmV3IGl0ZW1cbiAgICogQHJldHVybnMgVGhlIGlkIG9mIHRoZSB1cGRhdGVkIGl0ZW0uXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVJdGVtKHVwZGF0ZTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPik6IElkIHtcbiAgICBjb25zdCBpZDogT3B0SWQgPSB1cGRhdGVbdGhpcy5faWRQcm9wXTtcbiAgICBpZiAoaWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCB1cGRhdGUgaXRlbTogaXRlbSBoYXMgbm8gaWQgKGl0ZW06IFwiICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh1cGRhdGUpICtcbiAgICAgICAgICBcIilcIlxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIC8vIGl0ZW0gZG9lc24ndCBleGlzdFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHVwZGF0ZSBpdGVtOiBubyBpdGVtIHdpdGggaWQgXCIgKyBpZCArIFwiIGZvdW5kXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGEuc2V0KGlkLCB7IC4uLml0ZW0sIC4uLnVwZGF0ZSB9KTtcblxuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RyZWFtKGlkcz86IEl0ZXJhYmxlPElkPik6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIGlmIChpZHMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgICByZXR1cm4gbmV3IERhdGFTdHJlYW08SXRlbT4oe1xuICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiB7XG4gICAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmdldChpZCk7XG4gICAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHlpZWxkIFtpZCwgaXRlbV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbSh7XG4gICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiB0aGlzLl9kYXRhLmVudHJpZXMuYmluZCh0aGlzLl9kYXRhKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qIGRldmVsYmxvY2s6c3RhcnQgKi9cbiAgcHVibGljIGdldCB0ZXN0TGVha0RhdGEoKTogTWFwPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cbiAgcHVibGljIGdldCB0ZXN0TGVha0lkUHJvcCgpOiBJZFByb3Age1xuICAgIHJldHVybiB0aGlzLl9pZFByb3A7XG4gIH1cbiAgcHVibGljIGdldCB0ZXN0TGVha09wdGlvbnMoKTogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD4ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG4gIHB1YmxpYyBnZXQgdGVzdExlYWtRdWV1ZSgpOiBRdWV1ZTx0aGlzPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHRlc3RMZWFrUXVldWUodjogUXVldWU8dGhpcz4gfCBudWxsKSB7XG4gICAgdGhpcy5fcXVldWUgPSB2O1xuICB9XG4gIC8qIGRldmVsYmxvY2s6ZW5kICovXG59XG4iLCAiaW1wb3J0IHtcbiAgRGF0YUludGVyZmFjZSxcbiAgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXksXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0LFxuICBEYXRhSW50ZXJmYWNlTWFwT3B0aW9ucyxcbiAgRXZlbnRDYWxsYmFja3NXaXRoQW55LFxuICBFdmVudE5hbWUsXG4gIEV2ZW50UGF5bG9hZHMsXG4gIEZ1bGxJdGVtLFxuICBJZCxcbiAgUGFydEl0ZW0sXG4gIFJlbW92ZUV2ZW50UGF5bG9hZCxcbiAgVXBkYXRlRXZlbnRQYXlsb2FkLFxuICBpc0lkLFxufSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcbmltcG9ydCB7IERhdGFTZXRQYXJ0IH0gZnJvbSBcIi4vZGF0YS1zZXQtcGFydFwiO1xuaW1wb3J0IHsgRGF0YVN0cmVhbSB9IGZyb20gXCIuL2RhdGEtc3RyZWFtXCI7XG5cbi8qKlxuICogRGF0YSB2aWV3IG9wdGlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVZpZXdPcHRpb25zPEl0ZW0sIElkUHJvcCBleHRlbmRzIHN0cmluZz4ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZpZWxkIGNvbnRhaW5pbmcgdGhlIGlkIG9mIHRoZSBpdGVtcy4gV2hlbiBkYXRhIGlzIGZldGNoZWQgZnJvbSBhIHNlcnZlciB3aGljaCB1c2VzIHNvbWUgc3BlY2lmaWMgZmllbGQgdG8gaWRlbnRpZnkgaXRlbXMsIHRoaXMgZmllbGQgbmFtZSBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBEYXRhU2V0IHVzaW5nIHRoZSBvcHRpb24gYGZpZWxkSWRgLiBGb3IgZXhhbXBsZSBbQ291Y2hEQl0oaHR0cDovL2NvdWNoZGIuYXBhY2hlLm9yZy8pIHVzZXMgdGhlIGZpZWxkIGAnX2lkJ2AgdG8gaWRlbnRpZnkgZG9jdW1lbnRzLlxuICAgKi9cbiAgZmllbGRJZD86IElkUHJvcDtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGF0YVZpZXdcbiAqXG4gKiBBIERhdGFWaWV3IG9mZmVycyBhIGZpbHRlcmVkIGFuZC9vciBmb3JtYXR0ZWQgdmlldyBvbiBhIERhdGFTZXQuIE9uZSBjYW4gc3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gYSBEYXRhVmlldywgYW5kIGVhc2lseSBnZXQgZmlsdGVyZWQgb3IgZm9ybWF0dGVkIGRhdGEgd2l0aG91dCBoYXZpbmcgdG8gc3BlY2lmeSBmaWx0ZXJzIGFuZCBmaWVsZCB0eXBlcyBhbGwgdGhlIHRpbWUuXG4gKlxuICogIyMgRXhhbXBsZVxuICogYGBgamF2YXNjcmlwdFxuICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICogdmFyIGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQoKTtcbiAqIGRhdGEuYWRkKFtcbiAqICAge2lkOiAxLCB0ZXh0OiAnaXRlbSAxJywgZGF0ZTogbmV3IERhdGUoMjAxMywgNiwgMjApLCBncm91cDogMSwgZmlyc3Q6IHRydWV9LFxuICogICB7aWQ6IDIsIHRleHQ6ICdpdGVtIDInLCBkYXRlOiAnMjAxMy0wNi0yMycsIGdyb3VwOiAyfSxcbiAqICAge2lkOiAzLCB0ZXh0OiAnaXRlbSAzJywgZGF0ZTogJzIwMTMtMDYtMjUnLCBncm91cDogMn0sXG4gKiAgIHtpZDogNCwgdGV4dDogJ2l0ZW0gNCd9XG4gKiBdKTtcbiAqXG4gKiAvLyBjcmVhdGUgYSBEYXRhVmlld1xuICogLy8gdGhlIHZpZXcgd2lsbCBvbmx5IGNvbnRhaW4gaXRlbXMgaGF2aW5nIGEgcHJvcGVydHkgZ3JvdXAgd2l0aCB2YWx1ZSAxLFxuICogLy8gYW5kIHdpbGwgb25seSBvdXRwdXQgZmllbGRzIGlkLCB0ZXh0LCBhbmQgZGF0ZS5cbiAqIHZhciB2aWV3ID0gbmV3IHZpcy5EYXRhVmlldyhkYXRhLCB7XG4gKiAgIGZpbHRlcjogZnVuY3Rpb24gKGl0ZW0pIHtcbiAqICAgICByZXR1cm4gKGl0ZW0uZ3JvdXAgPT0gMSk7XG4gKiAgIH0sXG4gKiAgIGZpZWxkczogWydpZCcsICd0ZXh0JywgJ2RhdGUnXVxuICogfSk7XG4gKlxuICogLy8gc3Vic2NyaWJlIHRvIGFueSBjaGFuZ2UgaW4gdGhlIERhdGFWaWV3XG4gKiB2aWV3Lm9uKCcqJywgZnVuY3Rpb24gKGV2ZW50LCBwcm9wZXJ0aWVzLCBzZW5kZXJJZCkge1xuICogICBjb25zb2xlLmxvZygnZXZlbnQnLCBldmVudCwgcHJvcGVydGllcyk7XG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGUgYW4gaXRlbSBpbiB0aGUgZGF0YSBzZXRcbiAqIGRhdGEudXBkYXRlKHtpZDogMiwgZ3JvdXA6IDF9KTtcbiAqXG4gKiAvLyBnZXQgYWxsIGlkcyBpbiB0aGUgdmlld1xuICogdmFyIGlkcyA9IHZpZXcuZ2V0SWRzKCk7XG4gKiBjb25zb2xlLmxvZygnaWRzJywgaWRzKTsgLy8gd2lsbCBvdXRwdXQgWzEsIDJdXG4gKlxuICogLy8gZ2V0IGFsbCBpdGVtcyBpbiB0aGUgdmlld1xuICogdmFyIGl0ZW1zID0gdmlldy5nZXQoKTtcbiAqIGBgYFxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVZpZXc8XG4gICAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gICAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4gID5cbiAgZXh0ZW5kcyBEYXRhU2V0UGFydDxJdGVtLCBJZFByb3A+XG4gIGltcGxlbWVudHMgRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+XG57XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgbGVuZ3RoID0gMDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQgaWRQcm9wKCk6IElkUHJvcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVNldCgpLmlkUHJvcDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl07XG4gIHByaXZhdGUgX2RhdGEhOiBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD47IC8vIGNvbnN0cnVjdG9yIOKGkiBzZXREYXRhXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lkczogU2V0PElkPiA9IG5ldyBTZXQoKTsgLy8gaWRzIG9mIHRoZSBpdGVtcyBjdXJyZW50bHkgaW4gbWVtb3J5IChqdXN0IGNvbnRhaW5zIGEgYm9vbGVhbiB0cnVlKVxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBEYXRhVmlld09wdGlvbnM8SXRlbSwgSWRQcm9wPjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0YVZpZXcuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGluc3RhbmNlIGNvbnRhaW5pbmcgZGF0YSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgdGhpcyBkYXRhIHZpZXcuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgZGF0YTogRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+LFxuICAgIG9wdGlvbnM/OiBEYXRhVmlld09wdGlvbnM8SXRlbSwgSWRQcm9wPlxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICB0aGlzLl9saXN0ZW5lciA9IHRoaXMuX29uRXZlbnQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2V0RGF0YShkYXRhKTtcbiAgfVxuXG4gIC8vIFRPRE86IGltcGxlbWVudCBhIGZ1bmN0aW9uIC5jb25maWcoKSB0byBkeW5hbWljYWxseSB1cGRhdGUgdGhpbmdzIGxpa2UgY29uZmlndXJlZCBmaWx0ZXJcbiAgLy8gYW5kIHRyaWdnZXIgY2hhbmdlcyBhY2NvcmRpbmdseVxuXG4gIC8qKlxuICAgKiBTZXQgYSBkYXRhIHNvdXJjZSBmb3IgdGhlIHZpZXcuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGluc3RhbmNlIGNvbnRhaW5pbmcgZGF0YSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkuXG4gICAqIEByZW1hcmtzXG4gICAqIE5vdGUgdGhhdCB3aGVuIHRoZSBkYXRhIHZpZXcgaXMgYm91bmQgdG8gYSBkYXRhIHNldCBpdCB3b24ndCBiZSBnYXJiYWdlXG4gICAqIGNvbGxlY3RlZCB1bmxlc3MgdGhlIGRhdGEgc2V0IGlzIHRvby4gVXNlIGBkYXRhVmlldy5zZXREYXRhKG51bGwpYCBvclxuICAgKiBgZGF0YVZpZXcuZGlzcG9zZSgpYCB0byBlbmFibGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGJlZm9yZSB5b3UgbG9zZSB0aGUgbGFzdFxuICAgKiByZWZlcmVuY2UuXG4gICAqL1xuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgLy8gdW5zdWJzY3JpYmUgZnJvbSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGlmICh0aGlzLl9kYXRhLm9mZikge1xuICAgICAgICB0aGlzLl9kYXRhLm9mZihcIipcIiwgdGhpcy5fbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICAvLyB0cmlnZ2VyIGEgcmVtb3ZlIG9mIGFsbCBpdGVtcyBpbiBtZW1vcnlcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuX2RhdGEuZ2V0SWRzKHsgZmlsdGVyOiB0aGlzLl9vcHRpb25zLmZpbHRlciB9KTtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fZGF0YS5nZXQoaWRzKTtcblxuICAgICAgdGhpcy5faWRzLmNsZWFyKCk7XG4gICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwicmVtb3ZlXCIsIHsgaXRlbXM6IGlkcywgb2xkRGF0YTogaXRlbXMgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG5cbiAgICAgIC8vIHRyaWdnZXIgYW4gYWRkIG9mIGFsbCBhZGRlZCBpdGVtc1xuICAgICAgY29uc3QgaWRzID0gdGhpcy5fZGF0YS5nZXRJZHMoeyBmaWx0ZXI6IHRoaXMuX29wdGlvbnMuZmlsdGVyIH0pO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgICAgdGhpcy5faWRzLmFkZChpZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmxlbmd0aCA9IGlkcy5sZW5ndGg7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGlkcyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGF0YSA9IG5ldyBEYXRhU2V0PEl0ZW0sIElkUHJvcD4oKTtcbiAgICB9XG5cbiAgICAvLyBzdWJzY3JpYmUgdG8gbmV3IGRhdGFzZXRcbiAgICBpZiAodGhpcy5fZGF0YS5vbikge1xuICAgICAgdGhpcy5fZGF0YS5vbihcIipcIiwgdGhpcy5fbGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBEYXRhVmlldy5cbiAgICogVXNlZnVsIHdoZW4gdGhlIERhdGFWaWV3IGhhcyBhIGZpbHRlciBmdW5jdGlvbiBjb250YWluaW5nIGEgdmFyaWFibGUgcGFyYW1ldGVyLlxuICAgKi9cbiAgcHVibGljIHJlZnJlc2goKTogdm9pZCB7XG4gICAgY29uc3QgaWRzID0gdGhpcy5fZGF0YS5nZXRJZHMoe1xuICAgICAgZmlsdGVyOiB0aGlzLl9vcHRpb25zLmZpbHRlcixcbiAgICB9KTtcbiAgICBjb25zdCBvbGRJZHMgPSBbLi4udGhpcy5faWRzXTtcbiAgICBjb25zdCBuZXdJZHM6IFJlY29yZDxJZCwgYm9vbGVhbj4gPSB7fTtcbiAgICBjb25zdCBhZGRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCByZW1vdmVkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuXG4gICAgLy8gY2hlY2sgZm9yIGFkZGl0aW9uc1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgbmV3SWRzW2lkXSA9IHRydWU7XG4gICAgICBpZiAoIXRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgcmVtb3ZhbHNcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gb2xkSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IG9sZElkc1tpXTtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICBpZiAoaXRlbSA9PSBudWxsKSB7XG4gICAgICAgIC8vIEBUT0RPOiBJbnZlc3RpZ2F0ZS5cbiAgICAgICAgLy8gRG9lc24ndCBoYXBwZW4gZHVyaW5nIHRlc3RzIG9yIGV4YW1wbGVzLlxuICAgICAgICAvLyBJcyBpdCByZWFsbHkgaW1wb3NzaWJsZSBvciBjb3VsZCBpdCBldmVudHVhbGx5IGhhcHBlbj9cbiAgICAgICAgLy8gSG93IHRvIGhhbmRsZSBpdCBpZiBpdCBkb2VzPyBUaGUgdHlwZXMgZ3VhcmFudGVlIG5vbi1udWxsYWJsZSBpdGVtcy5cbiAgICAgICAgY29uc29sZS5lcnJvcihcIklmIHlvdSBzZWUgdGhpcywgcmVwb3J0IGl0IHBsZWFzZS5cIik7XG4gICAgICB9IGVsc2UgaWYgKCFuZXdJZHNbaWRdKSB7XG4gICAgICAgIHJlbW92ZWRJZHMucHVzaChpZCk7XG4gICAgICAgIHJlbW92ZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB0aGlzLl9pZHMuZGVsZXRlKGlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCArPSBhZGRlZElkcy5sZW5ndGggLSByZW1vdmVkSWRzLmxlbmd0aDtcblxuICAgIC8vIHRyaWdnZXIgZXZlbnRzXG4gICAgaWYgKGFkZGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBhZGRlZElkcyB9KTtcbiAgICB9XG4gICAgaWYgKHJlbW92ZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwicmVtb3ZlXCIsIHsgaXRlbXM6IHJlbW92ZWRJZHMsIG9sZERhdGE6IHJlbW92ZWRJdGVtcyB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCgpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChpZDogSWQpOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChpZHM6IElkW10pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkIHwgSWRbXSxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBmaXJzdD86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+IHwgSWQgfCBJZFtdLFxuICAgIHNlY29uZD86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6XG4gICAgfCBudWxsXG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+XG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W11cbiAgICB8IFJlY29yZDxzdHJpbmcsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+IHtcbiAgICBpZiAodGhpcy5fZGF0YSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBwYXJzZSB0aGUgYXJndW1lbnRzXG4gICAgbGV0IGlkczogSWQgfCBJZFtdIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IG9wdGlvbnM6IGFueTtcbiAgICBpZiAoaXNJZChmaXJzdCkgfHwgQXJyYXkuaXNBcnJheShmaXJzdCkpIHtcbiAgICAgIGlkcyA9IGZpcnN0O1xuICAgICAgb3B0aW9ucyA9IHNlY29uZDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucyA9IGZpcnN0O1xuICAgIH1cblxuICAgIC8vIGV4dGVuZCB0aGUgb3B0aW9ucyB3aXRoIHRoZSBkZWZhdWx0IG9wdGlvbnMgYW5kIHByb3ZpZGVkIG9wdGlvbnNcbiAgICBjb25zdCB2aWV3T3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICB0aGlzLl9vcHRpb25zLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG5cbiAgICAvLyBjcmVhdGUgYSBjb21iaW5lZCBmaWx0ZXIgbWV0aG9kIHdoZW4gbmVlZGVkXG4gICAgY29uc3QgdGhpc0ZpbHRlciA9IHRoaXMuX29wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IG9wdGlvbnNGaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGlmICh0aGlzRmlsdGVyICYmIG9wdGlvbnNGaWx0ZXIpIHtcbiAgICAgIHZpZXdPcHRpb25zLmZpbHRlciA9IChpdGVtKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzRmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpZHMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0KHZpZXdPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0KGlkcywgdmlld09wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0SWRzKG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9uczxJdGVtPik6IElkW10ge1xuICAgIGlmICh0aGlzLl9kYXRhLmxlbmd0aCkge1xuICAgICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IHRoaXMuX29wdGlvbnMuZmlsdGVyO1xuICAgICAgY29uc3Qgb3B0aW9uc0ZpbHRlciA9IG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMuZmlsdGVyIDogbnVsbDtcbiAgICAgIGxldCBmaWx0ZXI6IERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+W1wiZmlsdGVyXCJdO1xuXG4gICAgICBpZiAob3B0aW9uc0ZpbHRlcikge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgIGZpbHRlciA9IChpdGVtKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZpbHRlcihpdGVtKSAmJiBvcHRpb25zRmlsdGVyKGl0ZW0pO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVyID0gb3B0aW9uc0ZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0SWRzKHtcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIG9yZGVyOiBvcHRpb25zICYmIG9wdGlvbnMub3JkZXIsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZm9yRWFjaChcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gdm9pZCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zPEl0ZW0+XG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgICBjb25zdCBvcHRpb25zRmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICAgIGxldCBmaWx0ZXI6IHVuZGVmaW5lZCB8ICgoaXRlbTogSXRlbSkgPT4gYm9vbGVhbik7XG5cbiAgICAgIGlmIChvcHRpb25zRmlsdGVyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgZmlsdGVyID0gZnVuY3Rpb24gKGl0ZW06IEl0ZW0pOiBib29sZWFuIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXIgPSBvcHRpb25zRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9kYXRhLmZvckVhY2goY2FsbGJhY2ssIHtcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIG9yZGVyOiBvcHRpb25zICYmIG9wdGlvbnMub3JkZXIsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG1hcDxUPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5cbiAgKTogVFtdIHtcbiAgICB0eXBlIEZpbHRlciA9IE5vbk51bGxhYmxlPERhdGFJbnRlcmZhY2VNYXBPcHRpb25zPEl0ZW0sIFQ+W1wiZmlsdGVyXCJdPjtcblxuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgICBjb25zdCBvcHRpb25zRmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICAgIGxldCBmaWx0ZXI6IHVuZGVmaW5lZCB8IEZpbHRlcjtcblxuICAgICAgaWYgKG9wdGlvbnNGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXIpIHtcbiAgICAgICAgICBmaWx0ZXIgPSAoaXRlbSk6IFJldHVyblR5cGU8RmlsdGVyPiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZpbHRlcihpdGVtKSAmJiBvcHRpb25zRmlsdGVyKGl0ZW0pO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVyID0gb3B0aW9uc0ZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEubWFwKGNhbGxiYWNrLCB7XG4gICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICBvcmRlcjogb3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldERhdGFTZXQoKTogRGF0YVNldDxJdGVtLCBJZFByb3A+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXREYXRhU2V0KCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIHN0cmVhbShpZHM/OiBJdGVyYWJsZTxJZD4pOiBEYXRhU3RyZWFtPEl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5zdHJlYW0oXG4gICAgICBpZHMgfHwge1xuICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXTogdGhpcy5faWRzLmtleXMuYmluZCh0aGlzLl9pZHMpLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBpbnN0YW5jZSB1bnVzYWJsZSBwcmlvciB0byBnYXJiYWdlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBpbnRlbnRpb24gb2YgdGhpcyBtZXRob2QgaXMgdG8gaGVscCBkaXNjb3ZlciBzY2VuYXJpb3Mgd2hlcmUgdGhlIGRhdGFcbiAgICogdmlldyBpcyBiZWluZyB1c2VkIHdoZW4gdGhlIHByb2dyYW1tZXIgdGhpbmtzIGl0IGhhcyBiZWVuIGdhcmJhZ2UgY29sbGVjdGVkXG4gICAqIGFscmVhZHkuIEl0J3Mgc3RyaWN0ZXIgdmVyc2lvbiBvZiBgZGF0YVZpZXcuc2V0RGF0YShudWxsKWAuXG4gICAqL1xuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGF0YT8ub2ZmKSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZihcIipcIiwgdGhpcy5fbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBcIlRoaXMgZGF0YSB2aWV3IGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQgb2YuXCI7XG4gICAgY29uc3QgcmVwbGFjZW1lbnQgPSB7XG4gICAgICBnZXQ6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICAgIHNldDogKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9LFxuXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKERhdGFWaWV3LnByb3RvdHlwZSkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHJlcGxhY2VtZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgbGlzdGVuZXIuIFdpbGwgcHJvcGFnYXRlIGFsbCBldmVudHMgZnJvbSB0aGUgY29ubmVjdGVkIGRhdGEgc2V0IHRvIHRoZSBzdWJzY3JpYmVycyBvZiB0aGUgRGF0YVZpZXcsIGJ1dCB3aWxsIGZpbHRlciB0aGUgaXRlbXMgYW5kIG9ubHkgdHJpZ2dlciB3aGVuIHRoZXJlIGFyZSBjaGFuZ2VzIGluIHRoZSBmaWx0ZXJlZCBkYXRhIHNldC5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIElkIHN1cHBsaWVkIGJ5IHRoZSBzZW5kZXIuXG4gICAqL1xuICBwcml2YXRlIF9vbkV2ZW50PEVOIGV4dGVuZHMgRXZlbnROYW1lPihcbiAgICBldmVudDogRU4sXG4gICAgcGFyYW1zOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bRU5dLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMuaXRlbXMgfHwgIXRoaXMuX2RhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpZHMgPSBwYXJhbXMuaXRlbXM7XG4gICAgY29uc3QgYWRkZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCB1cGRhdGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IG9sZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICBjYXNlIFwiYWRkXCI6XG4gICAgICAgIC8vIGZpbHRlciB0aGUgaWRzIG9mIHRoZSBhZGRlZCBpdGVtc1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5faWRzLmFkZChpZCk7XG4gICAgICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgICAvLyBkZXRlcm1pbmUgdGhlIGV2ZW50IGZyb20gdGhlIHZpZXdzIHZpZXdwb2ludDogYW4gdXBkYXRlZFxuICAgICAgICAvLyBpdGVtIGNhbiBiZSBhZGRlZCwgdXBkYXRlZCwgb3IgcmVtb3ZlZCBmcm9tIHRoaXMgdmlldy5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldChpZCk7XG5cbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgICAgIHVwZGF0ZWRJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAgIChwYXJhbXMgYXMgVXBkYXRlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4pLmRhdGFbaV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgb2xkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAocGFyYW1zIGFzIFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+KS5vbGREYXRhW2ldXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgICAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgICB0aGlzLl9pZHMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgcmVtb3ZlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgKHBhcmFtcyBhcyBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPikub2xkRGF0YVtpXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gbm90aGluZyBpbnRlcmVzdGluZyBmb3IgbWUgOi0oXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJyZW1vdmVcIjpcbiAgICAgICAgLy8gZmlsdGVyIHRoZSBpZHMgb2YgdGhlIHJlbW92ZWQgaXRlbXNcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgICAgIGlmICh0aGlzLl9pZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgdGhpcy5faWRzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICByZW1vdmVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgIChwYXJhbXMgYXMgUmVtb3ZlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4pLm9sZERhdGFbaV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggKz0gYWRkZWRJZHMubGVuZ3RoIC0gcmVtb3ZlZElkcy5sZW5ndGg7XG5cbiAgICBpZiAoYWRkZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGFkZGVkSWRzIH0sIHNlbmRlcklkKTtcbiAgICB9XG4gICAgaWYgKHVwZGF0ZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICBcInVwZGF0ZVwiLFxuICAgICAgICB7IGl0ZW1zOiB1cGRhdGVkSWRzLCBvbGREYXRhOiBvbGRJdGVtcywgZGF0YTogdXBkYXRlZEl0ZW1zIH0sXG4gICAgICAgIHNlbmRlcklkXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocmVtb3ZlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXG4gICAgICAgIFwicmVtb3ZlXCIsXG4gICAgICAgIHsgaXRlbXM6IHJlbW92ZWRJZHMsIG9sZERhdGE6IHJlbW92ZWRJdGVtcyB9LFxuICAgICAgICBzZW5kZXJJZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBQYXJ0SXRlbSB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcblxuLyoqXG4gKiBDaGVjayB0aGF0IGdpdmVuIHZhbHVlIGlzIGNvbXBhdGlibGUgd2l0aCBWaXMgRGF0YSBTZXQgaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBpZFByb3AgLSBUaGUgZXhwZWN0ZWQgcHJvcGVydHkgdG8gY29udGFpbiBpdGVtIGlkLlxuICogQHBhcmFtIHYgLSBUaGUgdmFsdWUgdG8gYmUgdGVzdGVkLlxuICogQHJldHVybnMgVHJ1ZSBpZiBhbGwgZXhwZWN0ZWQgdmFsdWVzIGFuZCBtZXRob2RzIG1hdGNoLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFTZXRMaWtlPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+KGlkUHJvcDogSWRQcm9wLCB2OiBhbnkpOiB2IGlzIERhdGFTZXQ8SXRlbSwgSWRQcm9wPiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiZcbiAgICB2ICE9PSBudWxsICYmXG4gICAgaWRQcm9wID09PSB2LmlkUHJvcCAmJlxuICAgIHR5cGVvZiB2LmFkZCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuY2xlYXIgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmRpc3RpbmN0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5mb3JFYWNoID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldERhdGFTZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldElkcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgdHlwZW9mIHYubWFwID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5tYXggPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm1pbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYub2ZmID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYucmVtb3ZlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5zZXRPcHRpb25zID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5zdHJlYW0gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYudXBkYXRlT25seSA9PT0gXCJmdW5jdGlvblwiXG4gICk7XG59XG4iLCAiaW1wb3J0IHsgRGF0YVZpZXcgfSBmcm9tIFwiLi9kYXRhLXZpZXdcIjtcbmltcG9ydCB7IFBhcnRJdGVtIH0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcbmltcG9ydCB7IGlzRGF0YVNldExpa2UgfSBmcm9tIFwiLi9kYXRhLXNldC1jaGVja1wiO1xuXG4vKipcbiAqIENoZWNrIHRoYXQgZ2l2ZW4gdmFsdWUgaXMgY29tcGF0aWJsZSB3aXRoIFZpcyBEYXRhIFZpZXcgaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBpZFByb3AgLSBUaGUgZXhwZWN0ZWQgcHJvcGVydHkgdG8gY29udGFpbiBpdGVtIGlkLlxuICogQHBhcmFtIHYgLSBUaGUgdmFsdWUgdG8gYmUgdGVzdGVkLlxuICogQHJldHVybnMgVHJ1ZSBpZiBhbGwgZXhwZWN0ZWQgdmFsdWVzIGFuZCBtZXRob2RzIG1hdGNoLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFWaWV3TGlrZTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPihpZFByb3A6IElkUHJvcCwgdjogYW55KTogdiBpcyBEYXRhVmlldzxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHYgIT09IG51bGwgJiZcbiAgICBpZFByb3AgPT09IHYuaWRQcm9wICYmXG4gICAgdHlwZW9mIHYuZm9yRWFjaCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXREYXRhU2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXRJZHMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiB2Lm1hcCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYub2ZmID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuc3RyZWFtID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICBpc0RhdGFTZXRMaWtlKGlkUHJvcCwgdi5nZXREYXRhU2V0KCkpXG4gICk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IHRoaXMgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1yZWZsZWN0IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgPT0gJ29iamVjdCcgJiYgUmVmbGVjdC5hcHBseSB8fCAoTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgLy8gTmFzaG9ybiBidWc6XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMjhcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEzMFxuICBpZiAoY2xhc3NvZlJhdyhmbikgPT09ICdGdW5jdGlvbicpIHJldHVybiB1bmN1cnJ5VGhpcyhmbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3Rcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBJU19IVE1MRERBID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhbGw6IGRvY3VtZW50QWxsLFxuICBJU19IVE1MRERBOiBJU19IVE1MRERBXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkZG9jdW1lbnRBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsJyk7XG5cbnZhciBkb2N1bWVudEFsbCA9ICRkb2N1bWVudEFsbC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxubW9kdWxlLmV4cG9ydHMgPSAkZG9jdW1lbnRBbGwuSVNfSFRNTEREQSA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciAkZG9jdW1lbnRBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsJyk7XG5cbnZhciBkb2N1bWVudEFsbCA9ICRkb2N1bWVudEFsbC5hbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gJGRvY3VtZW50QWxsLklTX0hUTUxEREEgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCkgfHwgaXQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh2YXJpYWJsZSkgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgbmF2aWdhdG9yICE9ICd1bmRlZmluZWQnICYmIFN0cmluZyhuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAnJztcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWwsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zMy4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjMgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zMy4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBiaW5kID0gdW5jdXJyeVRoaXModW5jdXJyeVRoaXMuYmluZCk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQpIHtcbiAgYUNhbGxhYmxlKGZuKTtcbiAgcmV0dXJuIHRoYXQgPT09IHVuZGVmaW5lZCA/IGZuIDogTkFUSVZFX0JJTkQgPyBiaW5kKGZuLCB0aGF0KSA6IGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIHdyYXBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChOYXRpdmVDb25zdHJ1Y3Rvcikge1xuICB2YXIgV3JhcHBlciA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcmFwcGVyKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIGFwcGx5KE5hdGl2ZUNvbnN0cnVjdG9yLCB0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICBXcmFwcGVyLnByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIFdyYXBwZXI7XG59O1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWwgOiBTVEFUSUMgPyBnbG9iYWxbVEFSR0VUXSA6IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBUQVJHRVQsIHt9KVtUQVJHRVRdO1xuICB2YXIgdGFyZ2V0UHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcblxuICB2YXIgRk9SQ0VELCBVU0VfTkFUSVZFLCBWSVJUVUFMX1BST1RPVFlQRTtcbiAgdmFyIGtleSwgc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5LCBuYXRpdmVQcm9wZXJ0eSwgcmVzdWx0UHJvcGVydHksIGRlc2NyaXB0b3I7XG5cbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBVU0VfTkFUSVZFID0gIUZPUkNFRCAmJiBuYXRpdmVTb3VyY2UgJiYgaGFzT3duKG5hdGl2ZVNvdXJjZSwga2V5KTtcblxuICAgIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSkgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmF0aXZlU291cmNlLCBrZXkpO1xuICAgICAgbmF0aXZlUHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIG5hdGl2ZVByb3BlcnR5ID0gbmF0aXZlU291cmNlW2tleV07XG5cbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIGltcGxlbWVudGF0aW9uXG4gICAgc291cmNlUHJvcGVydHkgPSAoVVNFX05BVElWRSAmJiBuYXRpdmVQcm9wZXJ0eSkgPyBuYXRpdmVQcm9wZXJ0eSA6IHNvdXJjZVtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUgJiYgdHlwZW9mIHRhcmdldFByb3BlcnR5ID09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIG1ldGhvZHMgdG8gZ2xvYmFsIGZvciBjYWxsaW5nIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBpZiAob3B0aW9ucy5iaW5kICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gYmluZChzb3VyY2VQcm9wZXJ0eSwgZ2xvYmFsKTtcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlcyBpbiB0aGlzIHZlcnNpb25cbiAgICBlbHNlIGlmIChvcHRpb25zLndyYXAgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSB3cmFwQ29uc3RydWN0b3Ioc291cmNlUHJvcGVydHkpO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIGVsc2UgaWYgKFBST1RPICYmIGlzQ2FsbGFibGUoc291cmNlUHJvcGVydHkpKSByZXN1bHRQcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCByZXN1bHRQcm9wZXJ0eSk7XG5cbiAgICBpZiAoUFJPVE8pIHtcbiAgICAgIFZJUlRVQUxfUFJPVE9UWVBFID0gVEFSR0VUICsgJ1Byb3RvdHlwZSc7XG4gICAgICBpZiAoIWhhc093bihwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFLCB7fSk7XG4gICAgICB9XG4gICAgICAvLyBleHBvcnQgdmlydHVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGhbVklSVFVBTF9QUk9UT1RZUEVdLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIC8vIGV4cG9ydCByZWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBpZiAob3B0aW9ucy5yZWFsICYmIHRhcmdldFByb3RvdHlwZSAmJiAoRk9SQ0VEIHx8ICF0YXJnZXRQcm90b3R5cGVba2V5XSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldFByb3RvdHlwZSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBhcmd1bWVudCA+IDAgPyBtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSBzYWZlXG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gc2hvdWxkIGhhdmUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIChFZGdlIGJ1ZylcbiAgaWYgKERFU0NSSVBUT1JTICYmICRhc3NpZ24oeyBiOiAxIH0sICRhc3NpZ24oZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYicsIHtcbiAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pLCB7IGI6IDIgfSkpLmIgIT09IDEpIHJldHVybiB0cnVlO1xuICAvLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1ZylcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN5bWJvbCAtLSBzYWZlXG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ2Fzc2lnbiBkZXRlY3Rpb24nKTtcbiAgdmFyIGFscGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtzeW1ib2xdID0gNztcbiAgYWxwaGFiZXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGNocikgeyBCW2Nocl0gPSBjaHI7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbc3ltYm9sXSAhPT0gNyB8fCBvYmplY3RLZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPT0gYWxwaGFiZXQ7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICB2YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xuICB3aGlsZSAoYXJndW1lbnRzTGVuZ3RoID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IEluZGV4ZWRPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChvYmplY3RLZXlzKFMpLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZSwgUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtYXNzaWduJyk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBhcml0eTogMiwgZm9yY2VkOiBPYmplY3QuYXNzaWduICE9PSBhc3NpZ24gfSwge1xuICBhc3NpZ246IGFzc2lnblxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuYXNzaWduO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyhbXS5zbGljZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEMsIGFyZ3NMZW5ndGgsIGFyZ3MpIHtcbiAgaWYgKCFoYXNPd24oZmFjdG9yaWVzLCBhcmdzTGVuZ3RoKSkge1xuICAgIHZhciBsaXN0ID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSBsaXN0W2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgZmFjdG9yaWVzW2FyZ3NMZW5ndGhdID0gJEZ1bmN0aW9uKCdDLGEnLCAncmV0dXJuIG5ldyBDKCcgKyBqb2luKGxpc3QsICcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbYXJnc0xlbmd0aF0oQywgYXJncyk7XG59O1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/ICRGdW5jdGlvbi5iaW5kIDogZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgRiA9IGFDYWxsYWJsZSh0aGlzKTtcbiAgdmFyIFByb3RvdHlwZSA9IEYucHJvdG90eXBlO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gZnVuY3Rpb24gYm91bmQoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gY29uY2F0KHBhcnRBcmdzLCBhcnJheVNsaWNlKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmRGdW5jdGlvbiA/IGNvbnN0cnVjdChGLCBhcmdzLmxlbmd0aCwgYXJncykgOiBGLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoUHJvdG90eXBlKSkgYm91bmRGdW5jdGlvbi5wcm90b3R5cGUgPSBQcm90b3R5cGU7XG4gIHJldHVybiBib3VuZEZ1bmN0aW9uO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gZGV0ZWN0aW9uXG4kKHsgdGFyZ2V0OiAnRnVuY3Rpb24nLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGdW5jdGlvbi5iaW5kICE9PSBiaW5kIH0sIHtcbiAgYmluZDogYmluZFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUikge1xuICByZXR1cm4gcGF0aFtDT05TVFJVQ1RPUiArICdQcm90b3R5cGUnXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0Z1bmN0aW9uJykuYmluZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vZnVuY3Rpb24vdmlydHVhbC9iaW5kJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmJpbmQ7XG4gIHJldHVybiBpdCA9PT0gRnVuY3Rpb25Qcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoRnVuY3Rpb25Qcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmRcIik7IiwgIi8qKlxuICogRHJhdyBhIGNpcmNsZS5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3Q2lyY2xlKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4LmFyYyh4LCB5LCByLCAwLCAyICogTWF0aC5QSSwgZmFsc2UpO1xuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhIHNxdWFyZS5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBIYWxmIG9mIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBzcXVhcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3U3F1YXJlKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4LnJlY3QoeCAtIHIsIHkgLSByLCByICogMiwgciAqIDIpO1xuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhbiBlcXVpbGF0ZXJhbCB0cmlhbmdsZSBzdGFuZGluZyBvbiBhIHNpZGUuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gSGFsZiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBzaWRlcy5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VxdWlsYXRlcmFsX3RyaWFuZ2xlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3VHJpYW5nbGUoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY3R4LmJlZ2luUGF0aCgpO1xuXG4gIC8vIHRoZSBjaGFuZ2UgaW4gcmFkaXVzIGFuZCB0aGUgb2Zmc2V0IGlzIGhlcmUgdG8gY2VudGVyIHRoZSBzaGFwZVxuICByICo9IDEuMTU7XG4gIHkgKz0gMC4yNzUgKiByO1xuXG4gIGNvbnN0IHMgPSByICogMjtcbiAgY29uc3QgczIgPSBzIC8gMjtcbiAgY29uc3QgaXIgPSAoTWF0aC5zcXJ0KDMpIC8gNikgKiBzOyAvLyByYWRpdXMgb2YgaW5uZXIgY2lyY2xlXG4gIGNvbnN0IGggPSBNYXRoLnNxcnQocyAqIHMgLSBzMiAqIHMyKTsgLy8gaGVpZ2h0XG5cbiAgY3R4Lm1vdmVUbyh4LCB5IC0gKGggLSBpcikpO1xuICBjdHgubGluZVRvKHggKyBzMiwgeSArIGlyKTtcbiAgY3R4LmxpbmVUbyh4IC0gczIsIHkgKyBpcik7XG4gIGN0eC5saW5lVG8oeCwgeSAtIChoIC0gaXIpKTtcbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG4vKipcbiAqIERyYXcgYW4gZXF1aWxhdGVyYWwgdHJpYW5nbGUgc3RhbmRpbmcgb24gYSB2ZXJ0ZXguXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gSGFsZiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBzaWRlcy5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VxdWlsYXRlcmFsX3RyaWFuZ2xlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3VHJpYW5nbGVEb3duKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcblxuICAvLyB0aGUgY2hhbmdlIGluIHJhZGl1cyBhbmQgdGhlIG9mZnNldCBpcyBoZXJlIHRvIGNlbnRlciB0aGUgc2hhcGVcbiAgciAqPSAxLjE1O1xuICB5IC09IDAuMjc1ICogcjtcblxuICBjb25zdCBzID0gciAqIDI7XG4gIGNvbnN0IHMyID0gcyAvIDI7XG4gIGNvbnN0IGlyID0gKE1hdGguc3FydCgzKSAvIDYpICogczsgLy8gcmFkaXVzIG9mIGlubmVyIGNpcmNsZVxuICBjb25zdCBoID0gTWF0aC5zcXJ0KHMgKiBzIC0gczIgKiBzMik7IC8vIGhlaWdodFxuXG4gIGN0eC5tb3ZlVG8oeCwgeSArIChoIC0gaXIpKTtcbiAgY3R4LmxpbmVUbyh4ICsgczIsIHkgLSBpcik7XG4gIGN0eC5saW5lVG8oeCAtIHMyLCB5IC0gaXIpO1xuICBjdHgubGluZVRvKHgsIHkgKyAoaCAtIGlyKSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGEgc3Rhci5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBUaGUgb3V0ZXIgcmFkaXVzIG9mIHRoZSBzdGFyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd1N0YXIoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgLy8gaHR0cDovL3d3dy5odG1sNWNhbnZhc3R1dG9yaWFscy5jb20vbGFicy9odG1sNS1jYW52YXMtc3Rhci1zcGlubmVyL1xuICBjdHguYmVnaW5QYXRoKCk7XG5cbiAgLy8gdGhlIGNoYW5nZSBpbiByYWRpdXMgYW5kIHRoZSBvZmZzZXQgaXMgaGVyZSB0byBjZW50ZXIgdGhlIHNoYXBlXG4gIHIgKj0gMC44MjtcbiAgeSArPSAwLjEgKiByO1xuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgMTA7IG4rKykge1xuICAgIGNvbnN0IHJhZGl1cyA9IG4gJSAyID09PSAwID8gciAqIDEuMyA6IHIgKiAwLjU7XG4gICAgY3R4LmxpbmVUbyhcbiAgICAgIHggKyByYWRpdXMgKiBNYXRoLnNpbigobiAqIDIgKiBNYXRoLlBJKSAvIDEwKSxcbiAgICAgIHkgLSByYWRpdXMgKiBNYXRoLmNvcygobiAqIDIgKiBNYXRoLlBJKSAvIDEwKVxuICAgICk7XG4gIH1cblxuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhIGRpYW1vbmQuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gSGFsZiBvZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZGlhbW9uZC5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vd3d3Lmh0bWw1Y2FudmFzdHV0b3JpYWxzLmNvbS9sYWJzL2h0bWw1LWNhbnZhcy1zdGFyLXNwaW5uZXIvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3RGlhbW9uZChcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICByOiBudW1iZXJcbik6IHZvaWQge1xuICBjdHguYmVnaW5QYXRoKCk7XG5cbiAgY3R4LmxpbmVUbyh4LCB5ICsgcik7XG4gIGN0eC5saW5lVG8oeCArIHIsIHkpO1xuICBjdHgubGluZVRvKHgsIHkgLSByKTtcbiAgY3R4LmxpbmVUbyh4IC0gciwgeSk7XG5cbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG4vKipcbiAqIERyYXcgYSByZWN0YW5nbGUgd2l0aCByb3VuZGVkIGNvcm5lcnMuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSB3IC0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuXG4gKiBAcGFyYW0gaCAtIFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS5cbiAqIEBwYXJhbSByIC0gVGhlIHJhZGl1cyBvZiB0aGUgY29ybmVycy5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEyNTU1MTIvaG93LXRvLWRyYXctYS1yb3VuZGVkLXJlY3RhbmdsZS1vbi1odG1sLWNhbnZhc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd1JvdW5kUmVjdChcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB3OiBudW1iZXIsXG4gIGg6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY29uc3QgcjJkID0gTWF0aC5QSSAvIDE4MDtcbiAgaWYgKHcgLSAyICogciA8IDApIHtcbiAgICByID0gdyAvIDI7XG4gIH0gLy9lbnN1cmUgdGhhdCB0aGUgcmFkaXVzIGlzbid0IHRvbyBsYXJnZSBmb3IgeFxuICBpZiAoaCAtIDIgKiByIDwgMCkge1xuICAgIHIgPSBoIC8gMjtcbiAgfSAvL2Vuc3VyZSB0aGF0IHRoZSByYWRpdXMgaXNuJ3QgdG9vIGxhcmdlIGZvciB5XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4Lm1vdmVUbyh4ICsgciwgeSk7XG4gIGN0eC5saW5lVG8oeCArIHcgLSByLCB5KTtcbiAgY3R4LmFyYyh4ICsgdyAtIHIsIHkgKyByLCByLCByMmQgKiAyNzAsIHIyZCAqIDM2MCwgZmFsc2UpO1xuICBjdHgubGluZVRvKHggKyB3LCB5ICsgaCAtIHIpO1xuICBjdHguYXJjKHggKyB3IC0gciwgeSArIGggLSByLCByLCAwLCByMmQgKiA5MCwgZmFsc2UpO1xuICBjdHgubGluZVRvKHggKyByLCB5ICsgaCk7XG4gIGN0eC5hcmMoeCArIHIsIHkgKyBoIC0gciwgciwgcjJkICogOTAsIHIyZCAqIDE4MCwgZmFsc2UpO1xuICBjdHgubGluZVRvKHgsIHkgKyByKTtcbiAgY3R4LmFyYyh4ICsgciwgeSArIHIsIHIsIHIyZCAqIDE4MCwgcjJkICogMjcwLCBmYWxzZSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSB3IC0gVGhlIHdpZHRoIG9mIHRoZSBlbGxpcHNlLlxuICogQHBhcmFtIGggLSBUaGUgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlLlxuICogQHJlbWFya3NcbiAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuICpcbiAqIFBvc3RmaXggJ192aXMnIGFkZGVkIHRvIGRpc2Nlcm4gaXQgZnJvbSBzdGFuZGFyZCBtZXRob2QgZWxsaXBzZSgpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0VsbGlwc2UoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgdzogbnVtYmVyLFxuICBoOiBudW1iZXJcbik6IHZvaWQge1xuICBjb25zdCBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgIHhlID0geCArIHcsIC8vIHgtZW5kXG4gICAgeWUgPSB5ICsgaCwgLy8geS1lbmRcbiAgICB4bSA9IHggKyB3IC8gMiwgLy8geC1taWRkbGVcbiAgICB5bSA9IHkgKyBoIC8gMjsgLy8geS1taWRkbGVcblxuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5tb3ZlVG8oeCwgeW0pO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGFuIGlzb21ldHJpYyBjeWxpbmRlci5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHcgLSBUaGUgd2lkdGggb2YgdGhlIGRhdGFiYXNlLlxuICogQHBhcmFtIGggLSBUaGUgaGVpZ2h0IG9mIHRoZSBkYXRhYmFzZS5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYXdEYXRhYmFzZShcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB3OiBudW1iZXIsXG4gIGg6IG51bWJlclxuKTogdm9pZCB7XG4gIGNvbnN0IGYgPSAxIC8gMztcbiAgY29uc3Qgd0VsbGlwc2UgPSB3O1xuICBjb25zdCBoRWxsaXBzZSA9IGggKiBmO1xuXG4gIGNvbnN0IGthcHBhID0gMC41NTIyODQ4LFxuICAgIG94ID0gKHdFbGxpcHNlIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgIG95ID0gKGhFbGxpcHNlIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICB4ZSA9IHggKyB3RWxsaXBzZSwgLy8geC1lbmRcbiAgICB5ZSA9IHkgKyBoRWxsaXBzZSwgLy8geS1lbmRcbiAgICB4bSA9IHggKyB3RWxsaXBzZSAvIDIsIC8vIHgtbWlkZGxlXG4gICAgeW0gPSB5ICsgaEVsbGlwc2UgLyAyLCAvLyB5LW1pZGRsZVxuICAgIHltYiA9IHkgKyAoaCAtIGhFbGxpcHNlIC8gMiksIC8vIHktbWlkbGxlLCBib3R0b20gZWxsaXBzZVxuICAgIHllYiA9IHkgKyBoOyAvLyB5LWVuZCwgYm90dG9tIGVsbGlwc2VcblxuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5tb3ZlVG8oeGUsIHltKTtcblxuICBjdHguYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgY3R4LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcblxuICBjdHgubGluZVRvKHhlLCB5bWIpO1xuXG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhlLCB5bWIgKyBveSwgeG0gKyBveCwgeWViLCB4bSwgeWViKTtcbiAgY3R4LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWViLCB4LCB5bWIgKyBveSwgeCwgeW1iKTtcblxuICBjdHgubGluZVRvKHgsIHltKTtcbn1cblxuLyoqXG4gKiBEcmF3IGEgZGFzaGVkIGxpbmUuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9uIHRoZSB4IGF4aXMuXG4gKiBAcGFyYW0geSAtIFRoZSBzdGFydCBwb3NpdGlvbiBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHgyIC0gVGhlIGVuZCBwb3NpdGlvbiBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkyIC0gVGhlIGVuZCBwb3NpdGlvbiBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHBhdHRlcm4gLSBMaXN0IG9mIGxlbmd0aHMgc3RhcnRpbmcgd2l0aCBsaW5lIGFuZCB0aGVuIGFsdGVybmF0aW5nIGJldHdlZW4gc3BhY2UgYW5kIGxpbmUuXG4gKiBAYXV0aG9yIERhdmlkIEpvcmRhblxuICogQHJlbWFya3NcbiAqIGRhdGUgMjAxMi0wOC0wOFxuICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NTc2NzI0L2RvdHRlZC1zdHJva2UtaW4tY2FudmFzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3RGFzaGVkTGluZShcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB4MjogbnVtYmVyLFxuICB5MjogbnVtYmVyLFxuICBwYXR0ZXJuOiBudW1iZXJbXVxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4Lm1vdmVUbyh4LCB5KTtcblxuICBjb25zdCBwYXR0ZXJuTGVuZ3RoID0gcGF0dGVybi5sZW5ndGg7XG4gIGNvbnN0IGR4ID0geDIgLSB4O1xuICBjb25zdCBkeSA9IHkyIC0geTtcbiAgY29uc3Qgc2xvcGUgPSBkeSAvIGR4O1xuICBsZXQgZGlzdFJlbWFpbmluZyA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gIGxldCBwYXR0ZXJuSW5kZXggPSAwO1xuICBsZXQgZHJhdyA9IHRydWU7XG4gIGxldCB4U3RlcCA9IDA7XG4gIGxldCBkYXNoTGVuZ3RoID0gK3BhdHRlcm5bMF07XG5cbiAgd2hpbGUgKGRpc3RSZW1haW5pbmcgPj0gMC4xKSB7XG4gICAgZGFzaExlbmd0aCA9ICtwYXR0ZXJuW3BhdHRlcm5JbmRleCsrICUgcGF0dGVybkxlbmd0aF07XG4gICAgaWYgKGRhc2hMZW5ndGggPiBkaXN0UmVtYWluaW5nKSB7XG4gICAgICBkYXNoTGVuZ3RoID0gZGlzdFJlbWFpbmluZztcbiAgICB9XG5cbiAgICB4U3RlcCA9IE1hdGguc3FydCgoZGFzaExlbmd0aCAqIGRhc2hMZW5ndGgpIC8gKDEgKyBzbG9wZSAqIHNsb3BlKSk7XG4gICAgeFN0ZXAgPSBkeCA8IDAgPyAteFN0ZXAgOiB4U3RlcDtcbiAgICB4ICs9IHhTdGVwO1xuICAgIHkgKz0gc2xvcGUgKiB4U3RlcDtcblxuICAgIGlmIChkcmF3ID09PSB0cnVlKSB7XG4gICAgICBjdHgubGluZVRvKHgsIHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdHgubW92ZVRvKHgsIHkpO1xuICAgIH1cblxuICAgIGRpc3RSZW1haW5pbmcgLT0gZGFzaExlbmd0aDtcbiAgICBkcmF3ID0gIWRyYXc7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3IGEgaGV4YWdvbi5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBUaGUgcmFkaXVzIG9mIHRoZSBoZXhhZ29uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0hleGFnb24oXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBjb25zdCBzaWRlcyA9IDY7XG4gIGNvbnN0IGEgPSAoTWF0aC5QSSAqIDIpIC8gc2lkZXM7XG4gIGN0eC5tb3ZlVG8oeCArIHIsIHkpO1xuICBmb3IgKGxldCBpID0gMTsgaSA8IHNpZGVzOyBpKyspIHtcbiAgICBjdHgubGluZVRvKHggKyByICogTWF0aC5jb3MoYSAqIGkpLCB5ICsgciAqIE1hdGguc2luKGEgKiBpKSk7XG4gIH1cbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG5jb25zdCBzaGFwZU1hcCA9IHtcbiAgY2lyY2xlOiBkcmF3Q2lyY2xlLFxuICBkYXNoZWRMaW5lOiBkcmF3RGFzaGVkTGluZSxcbiAgZGF0YWJhc2U6IGRyYXdEYXRhYmFzZSxcbiAgZGlhbW9uZDogZHJhd0RpYW1vbmQsXG4gIGVsbGlwc2U6IGRyYXdFbGxpcHNlLFxuICBlbGxpcHNlX3ZpczogZHJhd0VsbGlwc2UsXG4gIGhleGFnb246IGRyYXdIZXhhZ29uLFxuICByb3VuZFJlY3Q6IGRyYXdSb3VuZFJlY3QsXG4gIHNxdWFyZTogZHJhd1NxdWFyZSxcbiAgc3RhcjogZHJhd1N0YXIsXG4gIHRyaWFuZ2xlOiBkcmF3VHJpYW5nbGUsXG4gIHRyaWFuZ2xlRG93bjogZHJhd1RyaWFuZ2xlRG93bixcbn07XG5cbi8qKlxuICogUmV0dXJucyBlaXRoZXIgY3VzdG9tIG9yIG5hdGl2ZSBkcmF3aW5nIGZ1bmN0aW9uIGJhc2Ugb24gc3VwcGxpZWQgbmFtZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4gRWl0aGVyIHRoZSBuYW1lIG9mIGFcbiAqIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBwcm9wZXJ0eSBvciBhbiBleHBvcnQgZnJvbSBzaGFwZXMudHMgd2l0aG91dCB0aGVcbiAqIGRyYXcgcHJlZml4LlxuICogQHJldHVybnMgVGhlIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHJlbmRlcmluZy4gSW4gY2FzZSBvZiBuYXRpdmVcbiAqIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBmdW5jdGlvbiB0aGUgQVBJIGlzIG5vcm1hbGl6ZWQgdG9cbiAqIGAoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIC4uLm9yaWdpbmFsQXJncykgPT4gdm9pZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaGFwZShcbiAgbmFtZToga2V5b2YgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwga2V5b2YgdHlwZW9mIHNoYXBlTWFwXG4pOiBhbnkge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNoYXBlTWFwLCBuYW1lKSkge1xuICAgIHJldHVybiAoc2hhcGVNYXAgYXMgYW55KVtuYW1lXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5wcm90b3R5cGUgYXMgYW55KVtuYW1lXS5jYWxsKGN0eCwgYXJncyk7XG4gICAgfTtcbiAgfVxufVxuIiwgIlxyXG4vKipcclxuICogRXhwb3NlIGBFbWl0dGVyYC5cclxuICovXHJcblxyXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICBtb2R1bGUuZXhwb3J0cyA9IEVtaXR0ZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXplIGEgbmV3IGBFbWl0dGVyYC5cclxuICpcclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5mdW5jdGlvbiBFbWl0dGVyKG9iaikge1xyXG4gIGlmIChvYmopIHJldHVybiBtaXhpbihvYmopO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE1peGluIHRoZSBlbWl0dGVyIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKiBAYXBpIHByaXZhdGVcclxuICovXHJcblxyXG5mdW5jdGlvbiBtaXhpbihvYmopIHtcclxuICBmb3IgKHZhciBrZXkgaW4gRW1pdHRlci5wcm90b3R5cGUpIHtcclxuICAgIG9ialtrZXldID0gRW1pdHRlci5wcm90b3R5cGVba2V5XTtcclxuICB9XHJcbiAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuLyoqXHJcbiAqIExpc3RlbiBvbiB0aGUgZ2l2ZW4gYGV2ZW50YCB3aXRoIGBmbmAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxyXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLm9uID1cclxuRW1pdHRlci5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XHJcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xyXG4gICh0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdID0gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XSB8fCBbXSlcclxuICAgIC5wdXNoKGZuKTtcclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGFuIGBldmVudGAgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgYSBzaW5nbGVcclxuICogdGltZSB0aGVuIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZC5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXHJcbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuRW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XHJcbiAgZnVuY3Rpb24gb24oKSB7XHJcbiAgICB0aGlzLm9mZihldmVudCwgb24pO1xyXG4gICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICB9XHJcblxyXG4gIG9uLmZuID0gZm47XHJcbiAgdGhpcy5vbihldmVudCwgb24pO1xyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSB0aGUgZ2l2ZW4gY2FsbGJhY2sgZm9yIGBldmVudGAgb3IgYWxsXHJcbiAqIHJlZ2lzdGVyZWQgY2FsbGJhY2tzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cclxuICogQHJldHVybiB7RW1pdHRlcn1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5FbWl0dGVyLnByb3RvdHlwZS5vZmYgPVxyXG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XHJcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XHJcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgZm4pe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuXHJcbiAgLy8gYWxsXHJcbiAgaWYgKDAgPT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgdGhpcy5fY2FsbGJhY2tzID0ge307XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIHNwZWNpZmljIGV2ZW50XHJcbiAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcbiAgaWYgKCFjYWxsYmFja3MpIHJldHVybiB0aGlzO1xyXG5cclxuICAvLyByZW1vdmUgYWxsIGhhbmRsZXJzXHJcbiAgaWYgKDEgPT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBzcGVjaWZpYyBoYW5kbGVyXHJcbiAgdmFyIGNiO1xyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBjYiA9IGNhbGxiYWNrc1tpXTtcclxuICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XHJcbiAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gUmVtb3ZlIGV2ZW50IHNwZWNpZmljIGFycmF5cyBmb3IgZXZlbnQgdHlwZXMgdGhhdCBub1xyXG4gIC8vIG9uZSBpcyBzdWJzY3JpYmVkIGZvciB0byBhdm9pZCBtZW1vcnkgbGVhay5cclxuICBpZiAoY2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBFbWl0IGBldmVudGAgd2l0aCB0aGUgZ2l2ZW4gYXJncy5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEBwYXJhbSB7TWl4ZWR9IC4uLlxyXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbihldmVudCl7XHJcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xyXG5cclxuICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSlcclxuICAgICwgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XTtcclxuXHJcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNhbGxiYWNrcykge1xyXG4gICAgY2FsbGJhY2tzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xyXG4gICAgICBjYWxsYmFja3NbaV0uYXBwbHkodGhpcywgYXJncyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gYXJyYXkgb2YgY2FsbGJhY2tzIGZvciBgZXZlbnRgLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHJldHVybiB7QXJyYXl9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuRW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24oZXZlbnQpe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuICByZXR1cm4gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XSB8fCBbXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiB0aGlzIGVtaXR0ZXIgaGFzIGBldmVudGAgaGFuZGxlcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcmV0dXJuIHtCb29sZWFufVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLmhhc0xpc3RlbmVycyA9IGZ1bmN0aW9uKGV2ZW50KXtcclxuICByZXR1cm4gISEgdGhpcy5saXN0ZW5lcnMoZXZlbnQpLmxlbmd0aDtcclxufTtcclxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyT3JJbmZpbml0eShwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBjaGFyQXQoUywgcG9zaXRpb24pXG4gICAgICAgICAgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBzdHJpbmdTbGljZShTLCBwb3NpdGlvbiwgcG9zaXRpb24gKyAyKVxuICAgICAgICAgIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgJiYgIVY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBwcm9wc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnVtZXJhYmxlKSB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgdmFsdWUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICBpZiAoaXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGU7XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAodHlwZW9mIGFyZ3VtZW50ID09ICdvYmplY3QnIHx8IGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgJFN0cmluZyhhcmd1bWVudCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nLCAnc2V0Jyk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICBhbk9iamVjdChPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG5cbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICBkZWZpbmVCdWlsdEluKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBgQ3JlYXRlSXRlclJlc3VsdE9iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWl0ZXJyZXN1bHRvYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBkb25lKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogZG9uZSB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHRvU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICBwb2ludCA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgc3RhdGUuaW5kZXggKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChwb2ludCwgZmFsc2UpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG90eXBlW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIGVtcHR5ID0gW107XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAudGVzdChub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgZW1wdHksIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgICAvLyBgRnVuY3Rpb24jdG9TdHJpbmdgIHRocm93cyBvbiBzb21lIGJ1aWx0LWl0IGZ1bmN0aW9uIGluIHNvbWUgbGVnYWN5IGVuZ2luZXNcbiAgICAvLyAoZm9yIGV4YW1wbGUsIGBET01RdWFkYCBhbmQgc2ltaWxhciBpbiBGRjQxLSlcbiAgICByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuaXNDb25zdHJ1Y3RvckxlZ2FjeS5zaGFtID0gdHJ1ZTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKHByb3BlcnR5S2V5IGluIG9iamVjdCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIHByb3BlcnR5S2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbcHJvcGVydHlLZXldID0gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXQpKSByZXR1cm4gZ2V0TWV0aG9kKGl0LCBJVEVSQVRPUilcbiAgICB8fCBnZXRNZXRob2QoaXQsICdAQGl0ZXJhdG9yJylcbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRJdGVyYXRvck1ldGhvZChhcmd1bWVudCkgOiB1c2luZ0l0ZXJhdG9yO1xuICBpZiAoYUNhbGxhYmxlKGl0ZXJhdG9yTWV0aG9kKSkgcmV0dXJuIGFuT2JqZWN0KGNhbGwoaXRlcmF0b3JNZXRob2QsIGFyZ3VtZW50KSk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgdmFyIElTX0NPTlNUUlVDVE9SID0gaXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgaWYgKG1hcHBpbmcpIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0LCB2YWx1ZTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICYmICEodGhpcyA9PT0gJEFycmF5ICYmIGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpKSB7XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcygpIDogW107XG4gICAgZm9yICg7IShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6ICRBcnJheShsZW5ndGgpO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIG5vLXRocm93LWxpdGVyYWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICB0cnkge1xuICAgIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIHdvcmthcm91bmQgb2Ygb2xkIFdlYktpdCArIGBldmFsYCBidWdcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20nKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG5cbnZhciBJTkNPUlJFQ1RfSVRFUkFUSU9OID0gIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYWJsZSk7XG59KTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBmcm9tOiBmcm9tXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mcm9tJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5mcm9tO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9mcm9tJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvZnJvbVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICB9XG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgJ2tleXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChpbmRleCwgZmFsc2UpO1xuICAgIGNhc2UgJ3ZhbHVlcyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHRhcmdldFtpbmRleF0sIGZhbHNlKTtcbiAgfSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbaW5kZXgsIHRhcmdldFtpbmRleF1dLCBmYWxzZSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVtYXBwZWRhcmd1bWVudHNvYmplY3RcbnZhciB2YWx1ZXMgPSBJdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcblxuLy8gVjggfiBDaHJvbWUgNDUtIGJ1Z1xuaWYgKCFJU19QVVJFICYmIERFU0NSSVBUT1JTICYmIHZhbHVlcy5uYW1lICE9PSAndmFsdWVzJykgdHJ5IHtcbiAgZGVmaW5lUHJvcGVydHkodmFsdWVzLCAnbmFtZScsIHsgdmFsdWU6ICd2YWx1ZXMnIH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yTWV0aG9kO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdO1xuICB2YXIgQ29sbGVjdGlvblByb3RvdHlwZSA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlICYmIGNsYXNzb2YoQ29sbGVjdGlvblByb3RvdHlwZSkgIT09IFRPX1NUUklOR19UQUcpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgfVxuICBJdGVyYXRvcnNbQ09MTEVDVElPTl9OQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG4vLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vZnVsbC9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2RcIik7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSBkZWZpbmVQcm9wZXJ0eSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IGRlZmluZVByb3BlcnR5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkuc2hhbSkgZGVmaW5lUHJvcGVydHkuc2hhbSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYSBwYXJ0IG9mIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXkpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAoaXNDb25zdHJ1Y3RvcihDKSAmJiAoQyA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IEM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuXG4vLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbi8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCA9IFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycmF5ID0gW107XG4gIGFycmF5W0lTX0NPTkNBVF9TUFJFQURBQkxFXSA9IGZhbHNlO1xuICByZXR1cm4gYXJyYXkuY29uY2F0KClbMF0gIT09IGFycmF5O1xufSk7XG5cbnZhciBpc0NvbmNhdFNwcmVhZGFibGUgPSBmdW5jdGlvbiAoTykge1xuICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzcHJlYWRhYmxlID0gT1tJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gIHJldHVybiBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KE8pO1xufTtcblxudmFyIEZPUkNFRCA9ICFJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUIHx8ICFhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdjb25jYXQnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb25jYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBjb25jYXQ6IGZ1bmN0aW9uIGNvbmNhdChhcmcpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgaSwgaywgbGVuZ3RoLCBsZW4sIEU7XG4gICAgZm9yIChpID0gLTEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgRSA9IGkgPT09IC0xID8gTyA6IGFyZ3VtZW50c1tpXTtcbiAgICAgIGlmIChpc0NvbmNhdFNwcmVhZGFibGUoRSkpIHtcbiAgICAgICAgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoRSk7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgbGVuKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKG4gKyAxKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gIHZhciByZXN1bHQgPSAkQXJyYXkobWF4KGZpbiAtIGssIDApKTtcbiAgdmFyIG4gPSAwO1xuICBmb3IgKDsgayA8IGZpbjsgaysrLCBuKyspIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gIHJlc3VsdC5sZW5ndGggPSBuO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcikge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbmV4cG9ydHMuZiA9IHdlbGxLbm93blN5bWJvbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICB2YXIgU3ltYm9sID0gcGF0aC5TeW1ib2wgfHwgKHBhdGguU3ltYm9sID0ge30pO1xuICBpZiAoIWhhc093bihTeW1ib2wsIE5BTUUpKSBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsIE5BTUUsIHtcbiAgICB2YWx1ZTogd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKE5BTUUpXG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShzZWxmKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG5cbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sICYmICRTeW1ib2xbUFJPVE9UWVBFXTtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBVU0VfU0VUVEVSID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufTtcblxudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT09IDc7XG59KSA/IGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgOiBuYXRpdmVEZWZpbmVQcm9wZXJ0eTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnLCBkZXNjcmlwdGlvbikge1xuICB2YXIgc3ltYm9sID0gQWxsU3ltYm9sc1t0YWddID0gbmF0aXZlT2JqZWN0Q3JlYXRlKFN5bWJvbFByb3RvdHlwZSk7XG4gIHNldEludGVybmFsU3RhdGUoc3ltYm9sLCB7XG4gICAgdHlwZTogU1lNQk9MLFxuICAgIHRhZzogdGFnLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgc3ltYm9sLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIHJldHVybiBzeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhc093bihPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB7fSkpO1xuICAgICAgT1tISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzT3duKE8sIEhJRERFTikgJiYgT1tISURERU5dW2tleV0pIE9bSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBBdHRyaWJ1dGVzID0gbmF0aXZlT2JqZWN0Q3JlYXRlKEF0dHJpYnV0ZXMsIHsgZW51bWVyYWJsZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjcmlwdG9yKE8sIGtleSwgQXR0cmlidXRlcyk7XG4gIH0gcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIGtleSwgQXR0cmlidXRlcyk7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wZXJ0aWVzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMocHJvcGVydGllcykuY29uY2F0KCRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMocHJvcGVydGllcykpO1xuICAkZm9yRWFjaChrZXlzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKCRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgcHJvcGVydGllcywga2V5KSkgJGRlZmluZVByb3BlcnR5KE8sIGtleSwgcHJvcGVydGllc1trZXldKTtcbiAgfSk7XG4gIHJldHVybiBPO1xufTtcblxudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gbmF0aXZlT2JqZWN0Q3JlYXRlKE8pIDogJGRlZmluZVByb3BlcnRpZXMobmF0aXZlT2JqZWN0Q3JlYXRlKE8pLCBQcm9wZXJ0aWVzKTtcbn07XG5cbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBQID0gdG9Qcm9wZXJ0eUtleShWKTtcbiAgdmFyIGVudW1lcmFibGUgPSBjYWxsKG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlLCB0aGlzLCBQKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywgUCkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZW51bWVyYWJsZSB8fCAhaGFzT3duKHRoaXMsIFApIHx8ICFoYXNPd24oQWxsU3ltYm9scywgUCkgfHwgaGFzT3duKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW1BdXG4gICAgPyBlbnVtZXJhYmxlIDogdHJ1ZTtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgdmFyIGl0ID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBkZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xuICBpZiAoZGVzY3JpcHRvciAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhKGhhc093bihpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSB7XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIWhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSkgcHVzaChyZXN1bHQsIGtleSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiAoTykge1xuICB2YXIgSVNfT0JKRUNUX1BST1RPVFlQRSA9IE8gPT09IE9iamVjdFByb3RvdHlwZTtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyhJU19PQkpFQ1RfUFJPVE9UWVBFID8gT2JqZWN0UHJvdG90eXBlU3ltYm9scyA6IHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgKCFJU19PQkpFQ1RfUFJPVE9UWVBFIHx8IGhhc093bihPYmplY3RQcm90b3R5cGUsIGtleSkpKSB7XG4gICAgICBwdXNoKHJlc3VsdCwgQWxsU3ltYm9sc1trZXldKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gYFN5bWJvbGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLWNvbnN0cnVjdG9yXG5pZiAoIU5BVElWRV9TWU1CT0wpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAoaXNQcm90b3R5cGVPZihTeW1ib2xQcm90b3R5cGUsIHRoaXMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSAhYXJndW1lbnRzLmxlbmd0aCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICR0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciB0YWcgPSB1aWQoZGVzY3JpcHRpb24pO1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIGNhbGwoc2V0dGVyLCBPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKHRoaXMsIEhJRERFTikgJiYgaGFzT3duKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IodGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikpIHRocm93IGVycm9yO1xuICAgICAgICBmYWxsYmFja0RlZmluZVByb3BlcnR5KHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBkZWZpbmVCdWlsdEluKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydGllcztcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3ZWxsS25vd25TeW1ib2wobmFtZSksIG5hbWUpO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLVN5bWJvbC1kZXNjcmlwdGlvblxuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihPYmplY3RQcm90b3R5cGUsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wuZm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVwbGFjZXIpIHtcbiAgaWYgKGlzQ2FsbGFibGUocmVwbGFjZXIpKSByZXR1cm4gcmVwbGFjZXI7XG4gIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJldHVybjtcbiAgdmFyIHJhd0xlbmd0aCA9IHJlcGxhY2VyLmxlbmd0aDtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdMZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGVtZW50ID0gcmVwbGFjZXJbaV07XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdzdHJpbmcnKSBwdXNoKGtleXMsIGVsZW1lbnQpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdudW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdOdW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdTdHJpbmcnKSBwdXNoKGtleXMsIHRvU3RyaW5nKGVsZW1lbnQpKTtcbiAgfVxuICB2YXIga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgcm9vdCA9IHRydWU7XG4gIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChyb290KSB7XG4gICAgICByb290ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHRoaXMpKSByZXR1cm4gdmFsdWU7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzTGVuZ3RoOyBqKyspIGlmIChrZXlzW2pdID09PSBrZXkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBnZXRSZXBsYWNlckZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxudmFyIHRlc3RlciA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKCdzdHJpbmdpZnkgZGV0ZWN0aW9uJyk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPT0gJ1tudWxsXSdcbiAgICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9PSAne30nXG4gICAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPT0gJ3t9Jztcbn0pO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbnZhciBJTExfRk9STUVEX1VOSUNPREUgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkc3RyaW5naWZ5KCdcXHVERjA2XFx1RDgzNCcpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIidcbiAgICB8fCAkc3RyaW5naWZ5KCdcXHVERUFEJykgIT09ICdcIlxcXFx1ZGVhZFwiJztcbn0pO1xuXG52YXIgc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggPSBmdW5jdGlvbiAoaXQsIHJlcGxhY2VyKSB7XG4gIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICB2YXIgJHJlcGxhY2VyID0gZ2V0UmVwbGFjZXJGdW5jdGlvbihyZXBsYWNlcik7XG4gIGlmICghaXNDYWxsYWJsZSgkcmVwbGFjZXIpICYmIChpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICBhcmdzWzFdID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBzb21lIG9sZCBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgV2ViS2l0KSBjb3VsZCBwYXNzIG51bWJlcnMgYXMga2V5c1xuICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gY2FsbCgkcmVwbGFjZXIsIHRoaXMsICRTdHJpbmcoa2V5KSwgdmFsdWUpO1xuICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHJldHVybiBhcHBseSgkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbn07XG5cbnZhciBmaXhJbGxGb3JtZWQgPSBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCwgc3RyaW5nKSB7XG4gIHZhciBwcmV2ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0IC0gMSk7XG4gIHZhciBuZXh0ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0ICsgMSk7XG4gIGlmICgoZXhlYyhsb3csIG1hdGNoKSAmJiAhZXhlYyhoaSwgbmV4dCkpIHx8IChleGVjKGhpLCBtYXRjaCkgJiYgIWV4ZWMobG93LCBwcmV2KSkpIHtcbiAgICByZXR1cm4gJ1xcXFx1JyArIG51bWJlclRvU3RyaW5nKGNoYXJDb2RlQXQobWF0Y2gsIDApLCAxNik7XG4gIH0gcmV0dXJuIG1hdGNoO1xufTtcblxuaWYgKCRzdHJpbmdpZnkpIHtcbiAgLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLnN0cmluZ2lmeVxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGFyaXR5OiAzLCBmb3JjZWQ6IFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiB8fCBJTExfRk9STUVEX1VOSUNPREUgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICB2YXIgcmVzdWx0ID0gYXBwbHkoV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID8gc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggOiAkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbiAgICAgIHJldHVybiBJTExfRk9STUVEX1VOSUNPREUgJiYgdHlwZW9mIHJlc3VsdCA9PSAnc3RyaW5nJyA/IHJlcGxhY2UocmVzdWx0LCB0ZXN0ZXIsIGZpeElsbEZvcm1lZCkgOiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZPUkNFRCA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eXN5bWJvbHNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgdmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5U3ltYm9scyA/ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHModG9PYmplY3QoaXQpKSA6IFtdO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmFzeW5jSXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5hc3luY2l0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jSXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmhhc0luc3RhbmNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaGFzaW5zdGFuY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaGFzSW5zdGFuY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmlzY29uY2F0c3ByZWFkYWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLml0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoQWxsYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hhbGxcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2hBbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnJlcGxhY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5yZXBsYWNlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNlYXJjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNlYXJjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzZWFyY2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNwZWNpZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGVjaWVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNwbGl0YCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BsaXRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BsaXQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wudG9QcmltaXRpdmVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3ByaW1pdGl2ZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gYFN5bWJvbC50b1N0cmluZ1RhZ2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvc3RyaW5ndGFnXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdldEJ1aWx0SW4oJ1N5bWJvbCcpLCAnU3ltYm9sJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC51bnNjb3BhYmxlc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnVuc2NvcGFibGVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBKU09OW0BAdG9TdHJpbmdUYWddIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24tQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pcy1jb25jYXQtc3ByZWFkYWJsZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnJlcGxhY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc3BlY2llcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc3BsaXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudW5zY29wYWJsZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hdGgudG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0LnRvLXN0cmluZy10YWcnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlN5bWJvbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgTUVUQURBVEEgPSB3ZWxsS25vd25TeW1ib2woJ21ldGFkYXRhJyk7XG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8vIEZ1bmN0aW9uLnByb3RvdHlwZVtAQG1ldGFkYXRhXVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yLW1ldGFkYXRhXG5pZiAoRnVuY3Rpb25Qcm90b3R5cGVbTUVUQURBVEFdID09PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHkoRnVuY3Rpb25Qcm90b3R5cGUsIE1FVEFEQVRBLCB7XG4gICAgdmFsdWU6IG51bGxcbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hc3luYy1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jRGlzcG9zZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuZGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnZGlzcG9zZScpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sJyk7XG5cbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuYXN5bmMtZGlzcG9zZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyIGtleUZvciA9IFN5bWJvbC5rZXlGb3I7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sIHx8IGZ1bmN0aW9uIGlzUmVnaXN0ZXJlZFN5bWJvbCh2YWx1ZSkge1xuICB0cnkge1xuICAgIHJldHVybiBrZXlGb3IodGhpc1N5bWJvbFZhbHVlKHZhbHVlKSkgIT09IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNSZWdpc3RlcmVkU3ltYm9sOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyICRpc1dlbGxLbm93blN5bWJvbCA9IFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbDtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0QnVpbHRJbignT2JqZWN0JywgJ2dldE93blByb3BlcnR5TmFtZXMnKTtcbnZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbmZvciAodmFyIGkgPSAwLCBzeW1ib2xLZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhTeW1ib2wpLCBzeW1ib2xLZXlzTGVuZ3RoID0gc3ltYm9sS2V5cy5sZW5ndGg7IGkgPCBzeW1ib2xLZXlzTGVuZ3RoOyBpKyspIHtcbiAgLy8gc29tZSBvbGQgZW5naW5lcyB0aHJvd3Mgb24gYWNjZXNzIHRvIHNvbWUga2V5cyBsaWtlIGBhcmd1bWVudHNgIG9yIGBjYWxsZXJgXG4gIHRyeSB7XG4gICAgdmFyIHN5bWJvbEtleSA9IHN5bWJvbEtleXNbaV07XG4gICAgaWYgKGlzU3ltYm9sKFN5bWJvbFtzeW1ib2xLZXldKSkgd2VsbEtub3duU3ltYm9sKHN5bWJvbEtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn1cblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkge1xuICBpZiAoJGlzV2VsbEtub3duU3ltYm9sICYmICRpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIHZhciBzeW1ib2wgPSB0aGlzU3ltYm9sVmFsdWUodmFsdWUpO1xuICAgIGZvciAodmFyIGogPSAwLCBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7IGogPCBrZXlzTGVuZ3RoOyBqKyspIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXEgLS0gcG9seWZpbGxlZCBzeW1ib2xzIGNhc2VcbiAgICAgIGlmIChXZWxsS25vd25TeW1ib2xzU3RvcmVba2V5c1tqXV0gPT0gc3ltYm9sKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1dlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtd2VsbC1rbm93bicpO1xuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd25TeW1ib2w6IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoZXJgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoZXInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm9ic2VydmFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ29ic2VydmFibGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1JlZ2lzdGVyZWRTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXJlZ2lzdGVyZWQnKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRgIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzUmVnaXN0ZXJlZFN5bWJvbCcgfSwge1xuICBpc1JlZ2lzdGVyZWQ6IGlzUmVnaXN0ZXJlZFN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93bmAgbWV0aG9kXG4vLyBvYnNvbGV0ZSB2ZXJzaW9uIG9mIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzV2VsbEtub3duU3ltYm9sJywgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd246IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhS2V5YCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yLW1ldGFkYXRhXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21ldGFkYXRhS2V5Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucGF0dGVybk1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdwYXR0ZXJuTWF0Y2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlQWxsJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWF0Y2hlcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm9ic2VydmFibGUnKTtcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucmVwbGFjZS1hbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3InKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ2l0ZXJhdG9yJyk7XG4iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfU3ltYm9sJGl0ZXJhdG9yIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IF9TeW1ib2wgJiYgbyAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuZGF0ZS50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZigndG9QcmltaXRpdmUnKTtcbiIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IF9TeW1ib2wkdG9QcmltaXRpdmUgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbX1N5bWJvbCR0b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIF9PYmplY3QkZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG4vLyBgQXJyYXkuaXNBcnJheWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmlzYXJyYXlcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUgfSwge1xuICBpc0FycmF5OiBpc0FycmF5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5pc0FycmF5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggYW5kIFNhZmFyaSA8PSAxNS40LCBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5wdXNoJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykucHVzaDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9wdXNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnB1c2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnB1c2gpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcHVzaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIG5hdGl2ZVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKGlzQ29uc3RydWN0b3IoQ29uc3RydWN0b3IpICYmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQ29uc3RydWN0b3IucHJvdG90eXBlKSkpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KENvbnN0cnVjdG9yKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yW1NQRUNJRVNdO1xuICAgICAgICBpZiAoQ29uc3RydWN0b3IgPT09IG51bGwpIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU2xpY2UoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQ29uc3RydWN0b3IpKG1heChmaW4gLSBrLCAwKSk7XG4gICAgZm9yIChuID0gMDsgayA8IGZpbjsgaysrLCBuKyspIGlmIChrIGluIE8pIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zbGljZScpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnNsaWNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNsaWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3NsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvYXJyYXkvZnJvbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuICByZXR1cm4gYXJyMjtcbn0iLCAiaW1wb3J0IF9zbGljZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZS5qc1wiO1xuaW1wb3J0IF9BcnJheSRmcm9tIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvZnJvbS5qc1wiO1xuaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICB2YXIgX2NvbnRleHQ7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSkuY2FsbChfY29udGV4dCwgOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gX0FycmF5JGZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsICJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn0iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59IiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX2dldEl0ZXJhdG9yTWV0aG9kIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiO1xuaW1wb3J0IF9wdXNoSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIF9TeW1ib2wgJiYgX2dldEl0ZXJhdG9yTWV0aG9kKHIpIHx8IHJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSB0KSB7XG4gICAgdmFyIGUsXG4gICAgICBuLFxuICAgICAgaSxcbiAgICAgIHUsXG4gICAgICBhID0gW10sXG4gICAgICBmID0gITAsXG4gICAgICBvID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHtcbiAgICAgICAgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuO1xuICAgICAgICBmID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoX3B1c2hJbnN0YW5jZVByb3BlcnR5KGEpLmNhbGwoYSwgZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCAiaW1wb3J0IGFycmF5V2l0aG91dEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVTcHJlYWQgZnJvbSBcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufSIsICJpbXBvcnQgX0FycmF5JGlzQXJyYXkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9pcy1hcnJheS5qc1wiO1xuaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoX0FycmF5JGlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn0iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfZ2V0SXRlcmF0b3JNZXRob2QgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXCI7XG5pbXBvcnQgX0FycmF5JGZyb20gZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBfU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIF9nZXRJdGVyYXRvck1ldGhvZChpdGVyKSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBfQXJyYXkkZnJvbShpdGVyKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2xcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuY29uY2F0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2NvbmNhdCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5jb25jYXQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmNvbmNhdCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9jb25jYXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zbGljZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5tYXA7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ21hcCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lm1hcCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLm1hcDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQubWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5tYXApID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvbWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5rZXlzO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyICREYXRlID0gRGF0ZTtcbnZhciB0aGlzVGltZVZhbHVlID0gdW5jdXJyeVRoaXMoJERhdGUucHJvdG90eXBlLmdldFRpbWUpO1xuXG4vLyBgRGF0ZS5ub3dgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLm5vd1xuJCh7IHRhcmdldDogJ0RhdGUnLCBzdGF0OiB0cnVlIH0sIHtcbiAgbm93OiBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuIHRoaXNUaW1lVmFsdWUobmV3ICREYXRlKCkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUubm93Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5EYXRlLm5vdztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAhU1RSSUNUX01FVEhPRCA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG59IDogW10uZm9yRWFjaDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogW10uZm9yRWFjaCAhPT0gZm9yRWFjaCB9LCB7XG4gIGZvckVhY2g6IGZvckVhY2hcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2gnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5mb3JFYWNoO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5mb3JFYWNoO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5mb3JFYWNoKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IHVuY3VycnlUaGlzKFtdLnJldmVyc2UpO1xudmFyIHRlc3QgPSBbMSwgMl07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmV2ZXJzZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZXZlcnNlXG4vLyBmaXggZm9yIFNhZmFyaSAxMi4wIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODc5NFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU3RyaW5nKHRlc3QpID09PSBTdHJpbmcodGVzdC5yZXZlcnNlKCkpIH0sIHtcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ24gLS0gZGlydHkgaGFja1xuICAgIGlmIChpc0FycmF5KHRoaXMpKSB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHJldHVybiBuYXRpdmVSZXZlcnNlKHRoaXMpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZXZlcnNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JldmVyc2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmV2ZXJzZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmV2ZXJzZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9yZXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIGlmICghZGVsZXRlIE9bUF0pIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICcgKyB0cnlUb1N0cmluZyhQKSArICcgb2YgJyArIHRyeVRvU3RyaW5nKE8pKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NwbGljZScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc3BsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNwbGljZVxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc3BsaWNlOiBmdW5jdGlvbiBzcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50IC8qICwgLi4uaXRlbXMgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYWN0dWFsU3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGluc2VydENvdW50LCBhY3R1YWxEZWxldGVDb3VudCwgQSwgaywgZnJvbSwgdG87XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMCkge1xuICAgICAgaW5zZXJ0Q291bnQgPSBhY3R1YWxEZWxldGVDb3VudCA9IDA7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDEpIHtcbiAgICAgIGluc2VydENvdW50ID0gMDtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbGVuIC0gYWN0dWFsU3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc2VydENvdW50ID0gYXJndW1lbnRzTGVuZ3RoIC0gMjtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbWluKG1heCh0b0ludGVnZXJPckluZmluaXR5KGRlbGV0ZUNvdW50KSwgMCksIGxlbiAtIGFjdHVhbFN0YXJ0KTtcbiAgICB9XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGluc2VydENvdW50IC0gYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIGZvciAoayA9IDA7IGsgPCBhY3R1YWxEZWxldGVDb3VudDsgaysrKSB7XG4gICAgICBmcm9tID0gYWN0dWFsU3RhcnQgKyBrO1xuICAgICAgaWYgKGZyb20gaW4gTykgY3JlYXRlUHJvcGVydHkoQSwgaywgT1tmcm9tXSk7XG4gICAgfVxuICAgIEEubGVuZ3RoID0gYWN0dWFsRGVsZXRlQ291bnQ7XG4gICAgaWYgKGluc2VydENvdW50IDwgYWN0dWFsRGVsZXRlQ291bnQpIHtcbiAgICAgIGZvciAoayA9IGFjdHVhbFN0YXJ0OyBrIDwgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgICBmcm9tID0gayArIGFjdHVhbERlbGV0ZUNvdW50O1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudDtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgICBmb3IgKGsgPSBsZW47IGsgPiBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50OyBrLS0pIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCBrIC0gMSk7XG4gICAgfSBlbHNlIGlmIChpbnNlcnRDb3VudCA+IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBsZW4gLSBhY3R1YWxEZWxldGVDb3VudDsgayA+IGFjdHVhbFN0YXJ0OyBrLS0pIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudCAtIDE7XG4gICAgICAgIHRvID0gayArIGluc2VydENvdW50IC0gMTtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoayA9IDA7IGsgPCBpbnNlcnRDb3VudDsgaysrKSB7XG4gICAgICBPW2sgKyBhY3R1YWxTdGFydF0gPSBhcmd1bWVudHNbayArIDJdO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50KTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zcGxpY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc3BsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNwbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc3BsaWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NwbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmNsdWRlcztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIEZGOTkrIGJ1Z1xudmFyIEJST0tFTl9PTl9TUEFSU0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtaW5jbHVkZXMgLS0gZGV0ZWN0aW9uXG4gIHJldHVybiAhQXJyYXkoMSkuaW5jbHVkZXMoKTtcbn0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCUk9LRU5fT05fU1BBUlNFIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2luY2x1ZGVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcycpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmluY2x1ZGVzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09PSAnUmVnRXhwJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc1JlZ0V4cChpdCkpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICB2YXIgcmVnZXhwID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICB0cnkge1xuICAgICAgcmVnZXhwW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICAgIH0gY2F0Y2ggKGVycm9yMikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBub3RBUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vdC1hLXJlZ2V4cCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMnKTtcblxudmFyIHN0cmluZ0luZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIWNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdpbmNsdWRlcycpIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5zdHJpbmdJbmRleE9mKFxuICAgICAgdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSksXG4gICAgICB0b1N0cmluZyhub3RBUmVnRXhwKHNlYXJjaFN0cmluZykpLFxuICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcycpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdTdHJpbmcnKS5pbmNsdWRlcztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYXJyYXlNZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2luY2x1ZGVzJyk7XG52YXIgc3RyaW5nTWV0aG9kID0gcmVxdWlyZSgnLi4vc3RyaW5nL3ZpcnR1YWwvaW5jbHVkZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xudmFyIFN0cmluZ1Byb3RvdHlwZSA9IFN0cmluZy5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5pbmNsdWRlcztcbiAgaWYgKGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuaW5jbHVkZXMpKSByZXR1cm4gYXJyYXlNZXRob2Q7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgfHwgaXQgPT09IFN0cmluZ1Byb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihTdHJpbmdQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IFN0cmluZ1Byb3RvdHlwZS5pbmNsdWRlcykpIHtcbiAgICByZXR1cm4gc3RyaW5nTWV0aG9kO1xuICB9IHJldHVybiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9pbmNsdWRlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0UHJvdG90eXBlT2YoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIH0sIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmlsdGVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbHRlcikgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbm1vZHVsZS5leHBvcnRzID0gJ1xcdTAwMDlcXHUwMDBBXFx1MDAwQlxcdTAwMENcXHUwMDBEXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MjAwMFxcdTIwMDFcXHUyMDAyJyArXG4gICdcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXlsnICsgd2hpdGVzcGFjZXMgKyAnXSsnKTtcbnZhciBydHJpbSA9IFJlZ0V4cCgnKF58W14nICsgd2hpdGVzcGFjZXMgKyAnXSlbJyArIHdoaXRlc3BhY2VzICsgJ10rJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgbHRyaW0sICcnKTtcbiAgICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBydHJpbSwgJyQxJyk7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1MZWZ0LCB0cmltU3RhcnQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbXN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbVJpZ2h0LCB0cmltRW5kIH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuICB0cmltOiBjcmVhdGVNZXRob2QoMylcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciAkcGFyc2VJbnQgPSBnbG9iYWwucGFyc2VJbnQ7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBJVEVSQVRPUiA9IFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgaGV4ID0gL15bKy1dPzB4L2k7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGhleC5leGVjKTtcbnZhciBGT1JDRUQgPSAkcGFyc2VJbnQod2hpdGVzcGFjZXMgKyAnMDgnKSAhPT0gOCB8fCAkcGFyc2VJbnQod2hpdGVzcGFjZXMgKyAnMHgxNicpICE9PSAyMlxuICAvLyBNUyBFZGdlIDE4LSBicm9rZW4gd2l0aCBib3hlZCBzeW1ib2xzXG4gIHx8IChJVEVSQVRPUiAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyAkcGFyc2VJbnQoT2JqZWN0KElURVJBVE9SKSk7IH0pKTtcblxuLy8gYHBhcnNlSW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VpbnQtc3RyaW5nLXJhZGl4XG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIHBhcnNlSW50KHN0cmluZywgcmFkaXgpIHtcbiAgdmFyIFMgPSB0cmltKHRvU3RyaW5nKHN0cmluZykpO1xuICByZXR1cm4gJHBhcnNlSW50KFMsIChyYWRpeCA+Pj4gMCkgfHwgKGV4ZWMoaGV4LCBTKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1wYXJzZS1pbnQnKTtcblxuLy8gYHBhcnNlSW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VpbnQtc3RyaW5nLXJhZGl4XG4kKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHBhcnNlSW50ICE9PSAkcGFyc2VJbnQgfSwge1xuICBwYXJzZUludDogJHBhcnNlSW50XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnBhcnNlLWludCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGgucGFyc2VJbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWluZGV4b2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciAkaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBuYXRpdmVJbmRleE9mID0gdW5jdXJyeVRoaXMoW10uaW5kZXhPZik7XG5cbnZhciBORUdBVElWRV9aRVJPID0gISFuYXRpdmVJbmRleE9mICYmIDEgLyBuYXRpdmVJbmRleE9mKFsxXSwgMSwgLTApIDwgMDtcbnZhciBGT1JDRUQgPSBORUdBVElWRV9aRVJPIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdpbmRleE9mJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgdmFyIGZyb21JbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/IG5hdGl2ZUluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4KSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaW5kZXgtb2YnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5pbmRleE9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2luZGV4LW9mJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmluZGV4T2Y7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmluZGV4T2YpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvaW5kZXgtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgY3JlYXRlOiBjcmVhdGVcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlKFAsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoUCwgRCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2NyZWF0ZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1qc29uIC0tIHNhZmVcbmlmICghcGF0aC5KU09OKSBwYXRoLkpTT04gPSB7IHN0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnkgfTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgcmV0dXJuIGFwcGx5KHBhdGguSlNPTi5zdHJpbmdpZnksIG51bGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9qc29uL3N0cmluZ2lmeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQnVuIC0tIERlbm8gY2FzZSAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgQnVuID09ICdmdW5jdGlvbicgJiYgQnVuICYmIHR5cGVvZiBCdW4udmVyc2lvbiA9PSAnc3RyaW5nJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFzc2VkLCByZXF1aXJlZCkge1xuICBpZiAocGFzc2VkIDwgcmVxdWlyZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuICByZXR1cm4gcGFzc2VkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIEVOR0lORV9JU19CVU4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bicpO1xudmFyIFVTRVJfQUdFTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xuXG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG4vLyBkaXJ0eSBJRTktIGFuZCBCdW4gMC4zLjAtIGNoZWNrc1xudmFyIFdSQVAgPSAvTVNJRSAuXFwuLy50ZXN0KFVTRVJfQUdFTlQpIHx8IEVOR0lORV9JU19CVU4gJiYgKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlcnNpb24gPSBnbG9iYWwuQnVuLnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoIDwgMyB8fCB2ZXJzaW9uWzBdID09PSAnMCcgJiYgKHZlcnNpb25bMV0gPCAzIHx8IHZlcnNpb25bMV0gPT09ICczJyAmJiB2ZXJzaW9uWzJdID09PSAnMCcpO1xufSkoKTtcblxuLy8gSUU5LSAvIEJ1biAwLjMuMC0gc2V0VGltZW91dCAvIHNldEludGVydmFsIC8gc2V0SW1tZWRpYXRlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjdGltZXJzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzE2MzNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaGFzVGltZUFyZykge1xuICB2YXIgZmlyc3RQYXJhbUluZGV4ID0gaGFzVGltZUFyZyA/IDIgOiAxO1xuICByZXR1cm4gV1JBUCA/IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0IC8qICwgLi4uYXJndW1lbnRzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpID4gZmlyc3RQYXJhbUluZGV4O1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIHBhcmFtcyA9IGJvdW5kQXJncyA/IGFycmF5U2xpY2UoYXJndW1lbnRzLCBmaXJzdFBhcmFtSW5kZXgpIDogW107XG4gICAgdmFyIGNhbGxiYWNrID0gYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHRoaXMsIHBhcmFtcyk7XG4gICAgfSA6IGZuO1xuICAgIHJldHVybiBoYXNUaW1lQXJnID8gc2NoZWR1bGVyKGNhbGxiYWNrLCB0aW1lb3V0KSA6IHNjaGVkdWxlcihjYWxsYmFjayk7XG4gIH0gOiBzY2hlZHVsZXI7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRJbnRlcnZhbCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldEludGVydmFsLCB0cnVlKTtcblxuLy8gQnVuIC8gSUU5LSBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0SW50ZXJ2YWwgIT09IHNldEludGVydmFsIH0sIHtcbiAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG52YXIgc2V0VGltZW91dCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldFRpbWVvdXQsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldFRpbWVvdXQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0dGltZW91dFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0VGltZW91dCAhPT0gc2V0VGltZW91dCB9LCB7XG4gIHNldFRpbWVvdXQ6IHNldFRpbWVvdXRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnRpbWVycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguc2V0VGltZW91dDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWxsYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbGxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50c0xlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmlsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1maWxsJyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbGxcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmlsbDogZmlsbFxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2ZpbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbGwnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5maWxsO1xuIiwgIi8qISBIYW1tZXIuSlMgLSB2Mi4wLjE3LXJjIC0gMjAxOS0xMi0xNlxuICogaHR0cDovL25hdmVyLmdpdGh1Yi5pby9lZ2pzXG4gKlxuICogRm9ya2VkIEJ5IE5hdmVyIGVnanNcbiAqIENvcHlyaWdodCAoYykgaGFtbWVyanNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAqL1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBleHRlbmQgb2JqZWN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIGluIGRlc3Qgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgb25lcyBpbiBzcmMuXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gey4uLk9iamVjdH0gb2JqZWN0c190b19hc3NpZ25cbiAqIEByZXR1cm5zIHtPYmplY3R9IHRhcmdldFxuICovXG52YXIgYXNzaWduO1xuXG5pZiAodHlwZW9mIE9iamVjdC5hc3NpZ24gIT09ICdmdW5jdGlvbicpIHtcbiAgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCkge1xuICAgIGlmICh0YXJnZXQgPT09IHVuZGVmaW5lZCB8fCB0YXJnZXQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHZhciBvdXRwdXQgPSBPYmplY3QodGFyZ2V0KTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBhcmd1bWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2luZGV4XTtcblxuICAgICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkICYmIHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBuZXh0S2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIHtcbiAgICAgICAgICAgIG91dHB1dFtuZXh0S2V5XSA9IHNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9O1xufSBlbHNlIHtcbiAgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbn1cblxudmFyIGFzc2lnbiQxID0gYXNzaWduO1xuXG52YXIgVkVORE9SX1BSRUZJWEVTID0gWycnLCAnd2Via2l0JywgJ01veicsICdNUycsICdtcycsICdvJ107XG52YXIgVEVTVF9FTEVNRU5UID0gdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiID8ge1xuICBzdHlsZToge31cbn0gOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbnZhciBUWVBFX0ZVTkNUSU9OID0gJ2Z1bmN0aW9uJztcbnZhciByb3VuZCA9IE1hdGgucm91bmQsXG4gICAgYWJzID0gTWF0aC5hYnM7XG52YXIgbm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgcHJlZml4ZWQgcHJvcGVydHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICogQHJldHVybnMge1N0cmluZ3xVbmRlZmluZWR9IHByZWZpeGVkXG4gKi9cblxuZnVuY3Rpb24gcHJlZml4ZWQob2JqLCBwcm9wZXJ0eSkge1xuICB2YXIgcHJlZml4O1xuICB2YXIgcHJvcDtcbiAgdmFyIGNhbWVsUHJvcCA9IHByb3BlcnR5WzBdLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zbGljZSgxKTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgVkVORE9SX1BSRUZJWEVTLmxlbmd0aCkge1xuICAgIHByZWZpeCA9IFZFTkRPUl9QUkVGSVhFU1tpXTtcbiAgICBwcm9wID0gcHJlZml4ID8gcHJlZml4ICsgY2FtZWxQcm9wIDogcHJvcGVydHk7XG5cbiAgICBpZiAocHJvcCBpbiBvYmopIHtcbiAgICAgIHJldHVybiBwcm9wO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldy1mdW5jLCBuby1uZXN0ZWQtdGVybmFyeSAqL1xudmFyIHdpbjtcblxuaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgLy8gd2luZG93IGlzIHVuZGVmaW5lZCBpbiBub2RlLmpzXG4gIHdpbiA9IHt9O1xufSBlbHNlIHtcbiAgd2luID0gd2luZG93O1xufVxuXG52YXIgUFJFRklYRURfVE9VQ0hfQUNUSU9OID0gcHJlZml4ZWQoVEVTVF9FTEVNRU5ULnN0eWxlLCAndG91Y2hBY3Rpb24nKTtcbnZhciBOQVRJVkVfVE9VQ0hfQUNUSU9OID0gUFJFRklYRURfVE9VQ0hfQUNUSU9OICE9PSB1bmRlZmluZWQ7XG5mdW5jdGlvbiBnZXRUb3VjaEFjdGlvblByb3BzKCkge1xuICBpZiAoIU5BVElWRV9UT1VDSF9BQ1RJT04pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdG91Y2hNYXAgPSB7fTtcbiAgdmFyIGNzc1N1cHBvcnRzID0gd2luLkNTUyAmJiB3aW4uQ1NTLnN1cHBvcnRzO1xuICBbJ2F1dG8nLCAnbWFuaXB1bGF0aW9uJywgJ3Bhbi15JywgJ3Bhbi14JywgJ3Bhbi14IHBhbi15JywgJ25vbmUnXS5mb3JFYWNoKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAvLyBJZiBjc3Muc3VwcG9ydHMgaXMgbm90IHN1cHBvcnRlZCBidXQgdGhlcmUgaXMgbmF0aXZlIHRvdWNoLWFjdGlvbiBhc3N1bWUgaXQgc3VwcG9ydHNcbiAgICAvLyBhbGwgdmFsdWVzLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBJRSAxMCBhbmQgMTEuXG4gICAgcmV0dXJuIHRvdWNoTWFwW3ZhbF0gPSBjc3NTdXBwb3J0cyA/IHdpbi5DU1Muc3VwcG9ydHMoJ3RvdWNoLWFjdGlvbicsIHZhbCkgOiB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIHRvdWNoTWFwO1xufVxuXG52YXIgVE9VQ0hfQUNUSU9OX0NPTVBVVEUgPSAnY29tcHV0ZSc7XG52YXIgVE9VQ0hfQUNUSU9OX0FVVE8gPSAnYXV0byc7XG52YXIgVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTiA9ICdtYW5pcHVsYXRpb24nOyAvLyBub3QgaW1wbGVtZW50ZWRcblxudmFyIFRPVUNIX0FDVElPTl9OT05FID0gJ25vbmUnO1xudmFyIFRPVUNIX0FDVElPTl9QQU5fWCA9ICdwYW4teCc7XG52YXIgVE9VQ0hfQUNUSU9OX1BBTl9ZID0gJ3Bhbi15JztcbnZhciBUT1VDSF9BQ1RJT05fTUFQID0gZ2V0VG91Y2hBY3Rpb25Qcm9wcygpO1xuXG52YXIgTU9CSUxFX1JFR0VYID0gL21vYmlsZXx0YWJsZXR8aXAoYWR8aG9uZXxvZCl8YW5kcm9pZC9pO1xudmFyIFNVUFBPUlRfVE9VQ0ggPSAnb250b3VjaHN0YXJ0JyBpbiB3aW47XG52YXIgU1VQUE9SVF9QT0lOVEVSX0VWRU5UUyA9IHByZWZpeGVkKHdpbiwgJ1BvaW50ZXJFdmVudCcpICE9PSB1bmRlZmluZWQ7XG52YXIgU1VQUE9SVF9PTkxZX1RPVUNIID0gU1VQUE9SVF9UT1VDSCAmJiBNT0JJTEVfUkVHRVgudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJTlBVVF9UWVBFX1RPVUNIID0gJ3RvdWNoJztcbnZhciBJTlBVVF9UWVBFX1BFTiA9ICdwZW4nO1xudmFyIElOUFVUX1RZUEVfTU9VU0UgPSAnbW91c2UnO1xudmFyIElOUFVUX1RZUEVfS0lORUNUID0gJ2tpbmVjdCc7XG52YXIgQ09NUFVURV9JTlRFUlZBTCA9IDI1O1xudmFyIElOUFVUX1NUQVJUID0gMTtcbnZhciBJTlBVVF9NT1ZFID0gMjtcbnZhciBJTlBVVF9FTkQgPSA0O1xudmFyIElOUFVUX0NBTkNFTCA9IDg7XG52YXIgRElSRUNUSU9OX05PTkUgPSAxO1xudmFyIERJUkVDVElPTl9MRUZUID0gMjtcbnZhciBESVJFQ1RJT05fUklHSFQgPSA0O1xudmFyIERJUkVDVElPTl9VUCA9IDg7XG52YXIgRElSRUNUSU9OX0RPV04gPSAxNjtcbnZhciBESVJFQ1RJT05fSE9SSVpPTlRBTCA9IERJUkVDVElPTl9MRUZUIHwgRElSRUNUSU9OX1JJR0hUO1xudmFyIERJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9VUCB8IERJUkVDVElPTl9ET1dOO1xudmFyIERJUkVDVElPTl9BTEwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTDtcbnZhciBQUk9QU19YWSA9IFsneCcsICd5J107XG52YXIgUFJPUFNfQ0xJRU5UX1hZID0gWydjbGllbnRYJywgJ2NsaWVudFknXTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogd2FsayBvYmplY3RzIGFuZCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICovXG5mdW5jdGlvbiBlYWNoKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgdmFyIGk7XG5cbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAob2JqLmZvckVhY2gpIHtcbiAgICBvYmouZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCk7XG4gIH0gZWxzZSBpZiAob2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IG9iai5sZW5ndGgpIHtcbiAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgICAgaSsrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgaW4gb2JqKSB7XG4gICAgICBvYmouaGFzT3duUHJvcGVydHkoaSkgJiYgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGxldCBhIGJvb2xlYW4gdmFsdWUgYWxzbyBiZSBhIGZ1bmN0aW9uIHRoYXQgbXVzdCByZXR1cm4gYSBib29sZWFuXG4gKiB0aGlzIGZpcnN0IGl0ZW0gaW4gYXJncyB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSB7Qm9vbGVhbnxGdW5jdGlvbn0gdmFsXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnc11cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGJvb2xPckZuKHZhbCwgYXJncykge1xuICBpZiAodHlwZW9mIHZhbCA9PT0gVFlQRV9GVU5DVElPTikge1xuICAgIHJldHVybiB2YWwuYXBwbHkoYXJncyA/IGFyZ3NbMF0gfHwgdW5kZWZpbmVkIDogdW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB2YWw7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNtYWxsIGluZGV4T2Ygd3JhcHBlclxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEByZXR1cm5zIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBpblN0cihzdHIsIGZpbmQpIHtcbiAgcmV0dXJuIHN0ci5pbmRleE9mKGZpbmQpID4gLTE7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdoZW4gdGhlIHRvdWNoQWN0aW9ucyBhcmUgY29sbGVjdGVkIHRoZXkgYXJlIG5vdCBhIHZhbGlkIHZhbHVlLCBzbyB3ZSBuZWVkIHRvIGNsZWFuIHRoaW5ncyB1cC4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFjdGlvbnNcbiAqIEByZXR1cm5zIHsqfVxuICovXG5cbmZ1bmN0aW9uIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMpIHtcbiAgLy8gbm9uZVxuICBpZiAoaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX05PTkUpKSB7XG4gICAgcmV0dXJuIFRPVUNIX0FDVElPTl9OT05FO1xuICB9XG5cbiAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICB2YXIgaGFzUGFuWSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWSk7IC8vIGlmIGJvdGggcGFuLXggYW5kIHBhbi15IGFyZSBzZXQgKGRpZmZlcmVudCByZWNvZ25pemVyc1xuICAvLyBmb3IgZGlmZmVyZW50IGRpcmVjdGlvbnMsIGUuZy4gaG9yaXpvbnRhbCBwYW4gYnV0IHZlcnRpY2FsIHN3aXBlPylcbiAgLy8gd2UgbmVlZCBub25lIChhcyBvdGhlcndpc2Ugd2l0aCBwYW4teCBwYW4teSBjb21iaW5lZCBub25lIG9mIHRoZXNlXG4gIC8vIHJlY29nbml6ZXJzIHdpbGwgd29yaywgc2luY2UgdGhlIGJyb3dzZXIgd291bGQgaGFuZGxlIGFsbCBwYW5uaW5nXG5cbiAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTk9ORTtcbiAgfSAvLyBwYW4teCBPUiBwYW4teVxuXG5cbiAgaWYgKGhhc1BhblggfHwgaGFzUGFuWSkge1xuICAgIHJldHVybiBoYXNQYW5YID8gVE9VQ0hfQUNUSU9OX1BBTl9YIDogVE9VQ0hfQUNUSU9OX1BBTl9ZO1xuICB9IC8vIG1hbmlwdWxhdGlvblxuXG5cbiAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04pKSB7XG4gICAgcmV0dXJuIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT047XG4gIH1cblxuICByZXR1cm4gVE9VQ0hfQUNUSU9OX0FVVE87XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFRvdWNoIEFjdGlvblxuICogc2V0cyB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkgb3IgdXNlcyB0aGUganMgYWx0ZXJuYXRpdmVcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG52YXIgVG91Y2hBY3Rpb24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUb3VjaEFjdGlvbihtYW5hZ2VyLCB2YWx1ZSkge1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5zZXQodmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlIG9uIHRoZSBlbGVtZW50IG9yIGVuYWJsZSB0aGUgcG9seWZpbGxcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFRvdWNoQWN0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gZmluZCBvdXQgdGhlIHRvdWNoLWFjdGlvbiBieSB0aGUgZXZlbnQgaGFuZGxlcnNcbiAgICBpZiAodmFsdWUgPT09IFRPVUNIX0FDVElPTl9DT01QVVRFKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuY29tcHV0ZSgpO1xuICAgIH1cblxuICAgIGlmIChOQVRJVkVfVE9VQ0hfQUNUSU9OICYmIHRoaXMubWFuYWdlci5lbGVtZW50LnN0eWxlICYmIFRPVUNIX0FDVElPTl9NQVBbdmFsdWVdKSB7XG4gICAgICB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZVtQUkVGSVhFRF9UT1VDSF9BQ1RJT05dID0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25zID0gdmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBqdXN0IHJlLXNldCB0aGUgdG91Y2hBY3Rpb24gdmFsdWVcbiAgICovXG5cblxuICBfcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHRoaXMuc2V0KHRoaXMubWFuYWdlci5vcHRpb25zLnRvdWNoQWN0aW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNvbXB1dGUgdGhlIHZhbHVlIGZvciB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkgYmFzZWQgb24gdGhlIHJlY29nbml6ZXIncyBzZXR0aW5nc1xuICAgKiBAcmV0dXJucyB7U3RyaW5nfSB2YWx1ZVxuICAgKi9cblxuXG4gIF9wcm90by5jb21wdXRlID0gZnVuY3Rpb24gY29tcHV0ZSgpIHtcbiAgICB2YXIgYWN0aW9ucyA9IFtdO1xuICAgIGVhY2godGhpcy5tYW5hZ2VyLnJlY29nbml6ZXJzLCBmdW5jdGlvbiAocmVjb2duaXplcikge1xuICAgICAgaWYgKGJvb2xPckZuKHJlY29nbml6ZXIub3B0aW9ucy5lbmFibGUsIFtyZWNvZ25pemVyXSkpIHtcbiAgICAgICAgYWN0aW9ucyA9IGFjdGlvbnMuY29uY2F0KHJlY29nbml6ZXIuZ2V0VG91Y2hBY3Rpb24oKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMuam9pbignICcpKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiBlYWNoIGlucHV0IGN5Y2xlIGFuZCBwcm92aWRlcyB0aGUgcHJldmVudGluZyBvZiB0aGUgYnJvd3NlciBiZWhhdmlvclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8ucHJldmVudERlZmF1bHRzID0gZnVuY3Rpb24gcHJldmVudERlZmF1bHRzKGlucHV0KSB7XG4gICAgdmFyIHNyY0V2ZW50ID0gaW5wdXQuc3JjRXZlbnQ7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0Lm9mZnNldERpcmVjdGlvbjsgLy8gaWYgdGhlIHRvdWNoIGFjdGlvbiBkaWQgcHJldmVudGVkIG9uY2UgdGhpcyBzZXNzaW9uXG5cbiAgICBpZiAodGhpcy5tYW5hZ2VyLnNlc3Npb24ucHJldmVudGVkKSB7XG4gICAgICBzcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgIHZhciBoYXNOb25lID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX05PTkUpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgICB2YXIgaGFzUGFuWSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWSkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX1BBTl9ZXTtcbiAgICB2YXIgaGFzUGFuWCA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWCkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX1BBTl9YXTtcblxuICAgIGlmIChoYXNOb25lKSB7XG4gICAgICAvLyBkbyBub3QgcHJldmVudCBkZWZhdWx0cyBpZiB0aGlzIGlzIGEgdGFwIGdlc3R1cmVcbiAgICAgIHZhciBpc1RhcFBvaW50ZXIgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IDE7XG4gICAgICB2YXIgaXNUYXBNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgMjtcbiAgICAgIHZhciBpc1RhcFRvdWNoVGltZSA9IGlucHV0LmRlbHRhVGltZSA8IDI1MDtcblxuICAgICAgaWYgKGlzVGFwUG9pbnRlciAmJiBpc1RhcE1vdmVtZW50ICYmIGlzVGFwVG91Y2hUaW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgICAvLyBgcGFuLXggcGFuLXlgIG1lYW5zIGJyb3dzZXIgaGFuZGxlcyBhbGwgc2Nyb2xsaW5nL3Bhbm5pbmcsIGRvIG5vdCBwcmV2ZW50XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGhhc05vbmUgfHwgaGFzUGFuWSAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8fCBoYXNQYW5YICYmIGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJldmVudFNyYyhzcmNFdmVudCk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FsbCBwcmV2ZW50RGVmYXVsdCB0byBwcmV2ZW50IHRoZSBicm93c2VyJ3MgZGVmYXVsdCBiZWhhdmlvciAoc2Nyb2xsaW5nIGluIG1vc3QgY2FzZXMpXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzcmNFdmVudFxuICAgKi9cblxuXG4gIF9wcm90by5wcmV2ZW50U3JjID0gZnVuY3Rpb24gcHJldmVudFNyYyhzcmNFdmVudCkge1xuICAgIHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCA9IHRydWU7XG4gICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfTtcblxuICByZXR1cm4gVG91Y2hBY3Rpb247XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGZpbmQgaWYgYSBub2RlIGlzIGluIHRoZSBnaXZlbiBwYXJlbnRcbiAqIEBtZXRob2QgaGFzUGFyZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYXJlbnRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGhhc1BhcmVudChub2RlLCBwYXJlbnQpIHtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZSA9PT0gcGFyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIGNlbnRlciBvZiBhbGwgdGhlIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBwb2ludGVyc1xuICogQHJldHVybiB7T2JqZWN0fSBjZW50ZXIgY29udGFpbnMgYHhgIGFuZCBgeWAgcHJvcGVydGllc1xuICovXG5cbmZ1bmN0aW9uIGdldENlbnRlcihwb2ludGVycykge1xuICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIG5vIG5lZWQgdG8gbG9vcCB3aGVuIG9ubHkgb25lIHRvdWNoXG5cbiAgaWYgKHBvaW50ZXJzTGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFgpLFxuICAgICAgeTogcm91bmQocG9pbnRlcnNbMF0uY2xpZW50WSlcbiAgICB9O1xuICB9XG5cbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IHBvaW50ZXJzTGVuZ3RoKSB7XG4gICAgeCArPSBwb2ludGVyc1tpXS5jbGllbnRYO1xuICAgIHkgKz0gcG9pbnRlcnNbaV0uY2xpZW50WTtcbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKHggLyBwb2ludGVyc0xlbmd0aCksXG4gICAgeTogcm91bmQoeSAvIHBvaW50ZXJzTGVuZ3RoKVxuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjcmVhdGUgYSBzaW1wbGUgY2xvbmUgZnJvbSB0aGUgaW5wdXQgdXNlZCBmb3Igc3RvcmFnZSBvZiBmaXJzdElucHV0IGFuZCBmaXJzdE11bHRpcGxlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IGNsb25lZElucHV0RGF0YVxuICovXG5cbmZ1bmN0aW9uIHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KSB7XG4gIC8vIG1ha2UgYSBzaW1wbGUgY29weSBvZiB0aGUgcG9pbnRlcnMgYmVjYXVzZSB3ZSB3aWxsIGdldCBhIHJlZmVyZW5jZSBpZiB3ZSBkb24ndFxuICAvLyB3ZSBvbmx5IG5lZWQgY2xpZW50WFkgZm9yIHRoZSBjYWxjdWxhdGlvbnNcbiAgdmFyIHBvaW50ZXJzID0gW107XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgIHBvaW50ZXJzW2ldID0ge1xuICAgICAgY2xpZW50WDogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WCksXG4gICAgICBjbGllbnRZOiByb3VuZChpbnB1dC5wb2ludGVyc1tpXS5jbGllbnRZKVxuICAgIH07XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0aW1lU3RhbXA6IG5vdygpLFxuICAgIHBvaW50ZXJzOiBwb2ludGVycyxcbiAgICBjZW50ZXI6IGdldENlbnRlcihwb2ludGVycyksXG4gICAgZGVsdGFYOiBpbnB1dC5kZWx0YVgsXG4gICAgZGVsdGFZOiBpbnB1dC5kZWx0YVlcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBhYnNvbHV0ZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMSB7eCwgeX1cbiAqIEBwYXJhbSB7T2JqZWN0fSBwMiB7eCwgeX1cbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAqIEByZXR1cm4ge051bWJlcn0gZGlzdGFuY2VcbiAqL1xuXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICBwcm9wcyA9IFBST1BTX1hZO1xuICB9XG5cbiAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV07XG4gIHZhciB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICByZXR1cm4gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIGFuZ2xlIGJldHdlZW4gdHdvIGNvb3JkaW5hdGVzXG4gKiBAcGFyYW0ge09iamVjdH0gcDFcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMlxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzXSBjb250YWluaW5nIHggYW5kIHkga2V5c1xuICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICovXG5cbmZ1bmN0aW9uIGdldEFuZ2xlKHAxLCBwMiwgcHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHByb3BzID0gUFJPUFNfWFk7XG4gIH1cblxuICB2YXIgeCA9IHAyW3Byb3BzWzBdXSAtIHAxW3Byb3BzWzBdXTtcbiAgdmFyIHkgPSBwMltwcm9wc1sxXV0gLSBwMVtwcm9wc1sxXV07XG4gIHJldHVybiBNYXRoLmF0YW4yKHksIHgpICogMTgwIC8gTWF0aC5QSTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBkaXJlY3Rpb24gYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge051bWJlcn0gZGlyZWN0aW9uXG4gKi9cblxuZnVuY3Rpb24gZ2V0RGlyZWN0aW9uKHgsIHkpIHtcbiAgaWYgKHggPT09IHkpIHtcbiAgICByZXR1cm4gRElSRUNUSU9OX05PTkU7XG4gIH1cblxuICBpZiAoYWJzKHgpID49IGFicyh5KSkge1xuICAgIHJldHVybiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICB9XG5cbiAgcmV0dXJuIHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KSB7XG4gIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXI7IC8vIGxldCB7IG9mZnNldERlbHRhOm9mZnNldCA9IHt9LCBwcmV2RGVsdGEgPSB7fSwgcHJldklucHV0ID0ge30gfSA9IHNlc3Npb247XG4gIC8vIGpzY3MgdGhyb3dpbmcgZXJyb3Igb24gZGVmYWx1dCBkZXN0cnVjdHVyZWQgdmFsdWVzIGFuZCB3aXRob3V0IGRlZmF1bHRzIHRlc3RzIGZhaWxcblxuICB2YXIgb2Zmc2V0ID0gc2Vzc2lvbi5vZmZzZXREZWx0YSB8fCB7fTtcbiAgdmFyIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhIHx8IHt9O1xuICB2YXIgcHJldklucHV0ID0gc2Vzc2lvbi5wcmV2SW5wdXQgfHwge307XG5cbiAgaWYgKGlucHV0LmV2ZW50VHlwZSA9PT0gSU5QVVRfU1RBUlQgfHwgcHJldklucHV0LmV2ZW50VHlwZSA9PT0gSU5QVVRfRU5EKSB7XG4gICAgcHJldkRlbHRhID0gc2Vzc2lvbi5wcmV2RGVsdGEgPSB7XG4gICAgICB4OiBwcmV2SW5wdXQuZGVsdGFYIHx8IDAsXG4gICAgICB5OiBwcmV2SW5wdXQuZGVsdGFZIHx8IDBcbiAgICB9O1xuICAgIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgPSB7XG4gICAgICB4OiBjZW50ZXIueCxcbiAgICAgIHk6IGNlbnRlci55XG4gICAgfTtcbiAgfVxuXG4gIGlucHV0LmRlbHRhWCA9IHByZXZEZWx0YS54ICsgKGNlbnRlci54IC0gb2Zmc2V0LngpO1xuICBpbnB1dC5kZWx0YVkgPSBwcmV2RGVsdGEueSArIChjZW50ZXIueSAtIG9mZnNldC55KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSB2ZWxvY2l0eSBiZXR3ZWVuIHR3byBwb2ludHMuIHVuaXQgaXMgaW4gcHggcGVyIG1zLlxuICogQHBhcmFtIHtOdW1iZXJ9IGRlbHRhVGltZVxuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtPYmplY3R9IHZlbG9jaXR5IGB4YCBhbmQgYHlgXG4gKi9cbmZ1bmN0aW9uIGdldFZlbG9jaXR5KGRlbHRhVGltZSwgeCwgeSkge1xuICByZXR1cm4ge1xuICAgIHg6IHggLyBkZWx0YVRpbWUgfHwgMCxcbiAgICB5OiB5IC8gZGVsdGFUaW1lIHx8IDBcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBzY2FsZSBmYWN0b3IgYmV0d2VlbiB0d28gcG9pbnRlcnNldHNcbiAqIG5vIHNjYWxlIGlzIDEsIGFuZCBnb2VzIGRvd24gdG8gMCB3aGVuIHBpbmNoZWQgdG9nZXRoZXIsIGFuZCBiaWdnZXIgd2hlbiBwaW5jaGVkIG91dFxuICogQHBhcmFtIHtBcnJheX0gc3RhcnQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IGVuZCBhcnJheSBvZiBwb2ludGVyc1xuICogQHJldHVybiB7TnVtYmVyfSBzY2FsZVxuICovXG5cbmZ1bmN0aW9uIGdldFNjYWxlKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGdldERpc3RhbmNlKGVuZFswXSwgZW5kWzFdLCBQUk9QU19DTElFTlRfWFkpIC8gZ2V0RGlzdGFuY2Uoc3RhcnRbMF0sIHN0YXJ0WzFdLCBQUk9QU19DTElFTlRfWFkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIHJvdGF0aW9uIGRlZ3JlZXMgYmV0d2VlbiB0d28gcG9pbnRlcnNldHNcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gcm90YXRpb25cbiAqL1xuXG5mdW5jdGlvbiBnZXRSb3RhdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBnZXRBbmdsZShlbmRbMV0sIGVuZFswXSwgUFJPUFNfQ0xJRU5UX1hZKSArIGdldEFuZ2xlKHN0YXJ0WzFdLCBzdGFydFswXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdmVsb2NpdHkgaXMgY2FsY3VsYXRlZCBldmVyeSB4IG1zXG4gKiBAcGFyYW0ge09iamVjdH0gc2Vzc2lvblxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cblxuZnVuY3Rpb24gY29tcHV0ZUludGVydmFsSW5wdXREYXRhKHNlc3Npb24sIGlucHV0KSB7XG4gIHZhciBsYXN0ID0gc2Vzc2lvbi5sYXN0SW50ZXJ2YWwgfHwgaW5wdXQ7XG4gIHZhciBkZWx0YVRpbWUgPSBpbnB1dC50aW1lU3RhbXAgLSBsYXN0LnRpbWVTdGFtcDtcbiAgdmFyIHZlbG9jaXR5O1xuICB2YXIgdmVsb2NpdHlYO1xuICB2YXIgdmVsb2NpdHlZO1xuICB2YXIgZGlyZWN0aW9uO1xuXG4gIGlmIChpbnB1dC5ldmVudFR5cGUgIT09IElOUFVUX0NBTkNFTCAmJiAoZGVsdGFUaW1lID4gQ09NUFVURV9JTlRFUlZBTCB8fCBsYXN0LnZlbG9jaXR5ID09PSB1bmRlZmluZWQpKSB7XG4gICAgdmFyIGRlbHRhWCA9IGlucHV0LmRlbHRhWCAtIGxhc3QuZGVsdGFYO1xuICAgIHZhciBkZWx0YVkgPSBpbnB1dC5kZWx0YVkgLSBsYXN0LmRlbHRhWTtcbiAgICB2YXIgdiA9IGdldFZlbG9jaXR5KGRlbHRhVGltZSwgZGVsdGFYLCBkZWx0YVkpO1xuICAgIHZlbG9jaXR5WCA9IHYueDtcbiAgICB2ZWxvY2l0eVkgPSB2Lnk7XG4gICAgdmVsb2NpdHkgPSBhYnModi54KSA+IGFicyh2LnkpID8gdi54IDogdi55O1xuICAgIGRpcmVjdGlvbiA9IGdldERpcmVjdGlvbihkZWx0YVgsIGRlbHRhWSk7XG4gICAgc2Vzc2lvbi5sYXN0SW50ZXJ2YWwgPSBpbnB1dDtcbiAgfSBlbHNlIHtcbiAgICAvLyB1c2UgbGF0ZXN0IHZlbG9jaXR5IGluZm8gaWYgaXQgZG9lc24ndCBvdmVydGFrZSBhIG1pbmltdW0gcGVyaW9kXG4gICAgdmVsb2NpdHkgPSBsYXN0LnZlbG9jaXR5O1xuICAgIHZlbG9jaXR5WCA9IGxhc3QudmVsb2NpdHlYO1xuICAgIHZlbG9jaXR5WSA9IGxhc3QudmVsb2NpdHlZO1xuICAgIGRpcmVjdGlvbiA9IGxhc3QuZGlyZWN0aW9uO1xuICB9XG5cbiAgaW5wdXQudmVsb2NpdHkgPSB2ZWxvY2l0eTtcbiAgaW5wdXQudmVsb2NpdHlYID0gdmVsb2NpdHlYO1xuICBpbnB1dC52ZWxvY2l0eVkgPSB2ZWxvY2l0eVk7XG4gIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbn1cblxuLyoqXG4qIEBwcml2YXRlXG4gKiBleHRlbmQgdGhlIGRhdGEgd2l0aCBzb21lIHVzYWJsZSBwcm9wZXJ0aWVzIGxpa2Ugc2NhbGUsIHJvdGF0ZSwgdmVsb2NpdHkgZXRjXG4gKiBAcGFyYW0ge09iamVjdH0gbWFuYWdlclxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cblxuZnVuY3Rpb24gY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCkge1xuICB2YXIgc2Vzc2lvbiA9IG1hbmFnZXIuc2Vzc2lvbjtcbiAgdmFyIHBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnM7XG4gIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDsgLy8gc3RvcmUgdGhlIGZpcnN0IGlucHV0IHRvIGNhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYW5kIGRpcmVjdGlvblxuXG4gIGlmICghc2Vzc2lvbi5maXJzdElucHV0KSB7XG4gICAgc2Vzc2lvbi5maXJzdElucHV0ID0gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpO1xuICB9IC8vIHRvIGNvbXB1dGUgc2NhbGUgYW5kIHJvdGF0aW9uIHdlIG5lZWQgdG8gc3RvcmUgdGhlIG11bHRpcGxlIHRvdWNoZXNcblxuXG4gIGlmIChwb2ludGVyc0xlbmd0aCA+IDEgJiYgIXNlc3Npb24uZmlyc3RNdWx0aXBsZSkge1xuICAgIHNlc3Npb24uZmlyc3RNdWx0aXBsZSA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgfSBlbHNlIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgIHNlc3Npb24uZmlyc3RNdWx0aXBsZSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGZpcnN0SW5wdXQgPSBzZXNzaW9uLmZpcnN0SW5wdXQsXG4gICAgICBmaXJzdE11bHRpcGxlID0gc2Vzc2lvbi5maXJzdE11bHRpcGxlO1xuICB2YXIgb2Zmc2V0Q2VudGVyID0gZmlyc3RNdWx0aXBsZSA/IGZpcnN0TXVsdGlwbGUuY2VudGVyIDogZmlyc3RJbnB1dC5jZW50ZXI7XG4gIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXIgPSBnZXRDZW50ZXIocG9pbnRlcnMpO1xuICBpbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgaW5wdXQuZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gZmlyc3RJbnB1dC50aW1lU3RhbXA7XG4gIGlucHV0LmFuZ2xlID0gZ2V0QW5nbGUob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICBpbnB1dC5kaXN0YW5jZSA9IGdldERpc3RhbmNlKG9mZnNldENlbnRlciwgY2VudGVyKTtcbiAgY29tcHV0ZURlbHRhWFkoc2Vzc2lvbiwgaW5wdXQpO1xuICBpbnB1dC5vZmZzZXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICB2YXIgb3ZlcmFsbFZlbG9jaXR5ID0gZ2V0VmVsb2NpdHkoaW5wdXQuZGVsdGFUaW1lLCBpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVggPSBvdmVyYWxsVmVsb2NpdHkueDtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5WSA9IG92ZXJhbGxWZWxvY2l0eS55O1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHkgPSBhYnMob3ZlcmFsbFZlbG9jaXR5LngpID4gYWJzKG92ZXJhbGxWZWxvY2l0eS55KSA/IG92ZXJhbGxWZWxvY2l0eS54IDogb3ZlcmFsbFZlbG9jaXR5Lnk7XG4gIGlucHV0LnNjYWxlID0gZmlyc3RNdWx0aXBsZSA/IGdldFNjYWxlKGZpcnN0TXVsdGlwbGUucG9pbnRlcnMsIHBvaW50ZXJzKSA6IDE7XG4gIGlucHV0LnJvdGF0aW9uID0gZmlyc3RNdWx0aXBsZSA/IGdldFJvdGF0aW9uKGZpcnN0TXVsdGlwbGUucG9pbnRlcnMsIHBvaW50ZXJzKSA6IDA7XG4gIGlucHV0Lm1heFBvaW50ZXJzID0gIXNlc3Npb24ucHJldklucHV0ID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogaW5wdXQucG9pbnRlcnMubGVuZ3RoID4gc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnMgPyBpbnB1dC5wb2ludGVycy5sZW5ndGggOiBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycztcbiAgY29tcHV0ZUludGVydmFsSW5wdXREYXRhKHNlc3Npb24sIGlucHV0KTsgLy8gZmluZCB0aGUgY29ycmVjdCB0YXJnZXRcblxuICB2YXIgdGFyZ2V0ID0gbWFuYWdlci5lbGVtZW50O1xuICB2YXIgc3JjRXZlbnQgPSBpbnB1dC5zcmNFdmVudDtcbiAgdmFyIHNyY0V2ZW50VGFyZ2V0O1xuXG4gIGlmIChzcmNFdmVudC5jb21wb3NlZFBhdGgpIHtcbiAgICBzcmNFdmVudFRhcmdldCA9IHNyY0V2ZW50LmNvbXBvc2VkUGF0aCgpWzBdO1xuICB9IGVsc2UgaWYgKHNyY0V2ZW50LnBhdGgpIHtcbiAgICBzcmNFdmVudFRhcmdldCA9IHNyY0V2ZW50LnBhdGhbMF07XG4gIH0gZWxzZSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC50YXJnZXQ7XG4gIH1cblxuICBpZiAoaGFzUGFyZW50KHNyY0V2ZW50VGFyZ2V0LCB0YXJnZXQpKSB7XG4gICAgdGFyZ2V0ID0gc3JjRXZlbnRUYXJnZXQ7XG4gIH1cblxuICBpbnB1dC50YXJnZXQgPSB0YXJnZXQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGhhbmRsZSBpbnB1dCBldmVudHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50VHlwZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cblxuZnVuY3Rpb24gaW5wdXRIYW5kbGVyKG1hbmFnZXIsIGV2ZW50VHlwZSwgaW5wdXQpIHtcbiAgdmFyIHBvaW50ZXJzTGVuID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoO1xuICB2YXIgY2hhbmdlZFBvaW50ZXJzTGVuID0gaW5wdXQuY2hhbmdlZFBvaW50ZXJzLmxlbmd0aDtcbiAgdmFyIGlzRmlyc3QgPSBldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMDtcbiAgdmFyIGlzRmluYWwgPSBldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiBwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMDtcbiAgaW5wdXQuaXNGaXJzdCA9ICEhaXNGaXJzdDtcbiAgaW5wdXQuaXNGaW5hbCA9ICEhaXNGaW5hbDtcblxuICBpZiAoaXNGaXJzdCkge1xuICAgIG1hbmFnZXIuc2Vzc2lvbiA9IHt9O1xuICB9IC8vIHNvdXJjZSBldmVudCBpcyB0aGUgbm9ybWFsaXplZCB2YWx1ZSBvZiB0aGUgZG9tRXZlbnRzXG4gIC8vIGxpa2UgJ3RvdWNoc3RhcnQsIG1vdXNldXAsIHBvaW50ZXJkb3duJ1xuXG5cbiAgaW5wdXQuZXZlbnRUeXBlID0gZXZlbnRUeXBlOyAvLyBjb21wdXRlIHNjYWxlLCByb3RhdGlvbiBldGNcblxuICBjb21wdXRlSW5wdXREYXRhKG1hbmFnZXIsIGlucHV0KTsgLy8gZW1pdCBzZWNyZXQgZXZlbnRcblxuICBtYW5hZ2VyLmVtaXQoJ2hhbW1lci5pbnB1dCcsIGlucHV0KTtcbiAgbWFuYWdlci5yZWNvZ25pemUoaW5wdXQpO1xuICBtYW5hZ2VyLnNlc3Npb24ucHJldklucHV0ID0gaW5wdXQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNwbGl0IHN0cmluZyBvbiB3aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7QXJyYXl9IHdvcmRzXG4gKi9cbmZ1bmN0aW9uIHNwbGl0U3RyKHN0cikge1xuICByZXR1cm4gc3RyLnRyaW0oKS5zcGxpdCgvXFxzKy9nKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogYWRkRXZlbnRMaXN0ZW5lciB3aXRoIG11bHRpcGxlIGV2ZW50cyBhdCBvbmNlXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICovXG5cbmZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXJzKHRhcmdldCwgdHlwZXMsIGhhbmRsZXIpIHtcbiAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogcmVtb3ZlRXZlbnRMaXN0ZW5lciB3aXRoIG11bHRpcGxlIGV2ZW50cyBhdCBvbmNlXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICovXG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRhcmdldCwgdHlwZXMsIGhhbmRsZXIpIHtcbiAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSB3aW5kb3cgb2JqZWN0IG9mIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtEb2N1bWVudFZpZXd8V2luZG93fVxuICovXG5mdW5jdGlvbiBnZXRXaW5kb3dGb3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGRvYyA9IGVsZW1lbnQub3duZXJEb2N1bWVudCB8fCBlbGVtZW50O1xuICByZXR1cm4gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3cgfHwgd2luZG93O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjcmVhdGUgbmV3IGlucHV0IHR5cGUgbWFuYWdlclxuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0lucHV0fVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gSW5wdXQobWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5lbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuICAgIHRoaXMudGFyZ2V0ID0gbWFuYWdlci5vcHRpb25zLmlucHV0VGFyZ2V0OyAvLyBzbWFsbGVyIHdyYXBwZXIgYXJvdW5kIHRoZSBoYW5kbGVyLCBmb3IgdGhlIHNjb3BlIGFuZCB0aGUgZW5hYmxlZCBzdGF0ZSBvZiB0aGUgbWFuYWdlcixcbiAgICAvLyBzbyB3aGVuIGRpc2FibGVkIHRoZSBpbnB1dCBldmVudHMgYXJlIGNvbXBsZXRlbHkgYnlwYXNzZWQuXG5cbiAgICB0aGlzLmRvbUhhbmRsZXIgPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgIGlmIChib29sT3JGbihtYW5hZ2VyLm9wdGlvbnMuZW5hYmxlLCBbbWFuYWdlcl0pKSB7XG4gICAgICAgIHNlbGYuaGFuZGxlcihldik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuaW5pdCgpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzaG91bGQgaGFuZGxlIHRoZSBpbnB1dEV2ZW50IGRhdGEgYW5kIHRyaWdnZXIgdGhlIGNhbGxiYWNrXG4gICAqIEB2aXJ0dWFsXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoKSB7fTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGJpbmQgdGhlIGV2ZW50c1xuICAgKi9cblxuXG4gIF9wcm90by5pbml0ID0gZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB0aGlzLmV2RWwgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldlRhcmdldCAmJiBhZGRFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2V2luICYmIGFkZEV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHVuYmluZCB0aGUgZXZlbnRzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuZXZFbCAmJiByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLmVsZW1lbnQsIHRoaXMuZXZFbCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2VGFyZ2V0ICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRoaXMudGFyZ2V0LCB0aGlzLmV2VGFyZ2V0LCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZXaW4gJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICB9O1xuXG4gIHJldHVybiBJbnB1dDtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZmluZCBpZiBhIGFycmF5IGNvbnRhaW5zIHRoZSBvYmplY3QgdXNpbmcgaW5kZXhPZiBvciBhIHNpbXBsZSBwb2x5RmlsbFxuICogQHBhcmFtIHtBcnJheX0gc3JjXG4gKiBAcGFyYW0ge1N0cmluZ30gZmluZFxuICogQHBhcmFtIHtTdHJpbmd9IFtmaW5kQnlLZXldXG4gKiBAcmV0dXJuIHtCb29sZWFufE51bWJlcn0gZmFsc2Ugd2hlbiBub3QgZm91bmQsIG9yIHRoZSBpbmRleFxuICovXG5mdW5jdGlvbiBpbkFycmF5KHNyYywgZmluZCwgZmluZEJ5S2V5KSB7XG4gIGlmIChzcmMuaW5kZXhPZiAmJiAhZmluZEJ5S2V5KSB7XG4gICAgcmV0dXJuIHNyYy5pbmRleE9mKGZpbmQpO1xuICB9IGVsc2Uge1xuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgICAgaWYgKGZpbmRCeUtleSAmJiBzcmNbaV1bZmluZEJ5S2V5XSA9PSBmaW5kIHx8ICFmaW5kQnlLZXkgJiYgc3JjW2ldID09PSBmaW5kKSB7XG4gICAgICAgIC8vIGRvIG5vdCB1c2UgPT09IGhlcmUsIHRlc3QgZmFpbHNcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG4gIH1cbn1cblxudmFyIFBPSU5URVJfSU5QVVRfTUFQID0ge1xuICBwb2ludGVyZG93bjogSU5QVVRfU1RBUlQsXG4gIHBvaW50ZXJtb3ZlOiBJTlBVVF9NT1ZFLFxuICBwb2ludGVydXA6IElOUFVUX0VORCxcbiAgcG9pbnRlcmNhbmNlbDogSU5QVVRfQ0FOQ0VMLFxuICBwb2ludGVyb3V0OiBJTlBVVF9DQU5DRUxcbn07IC8vIGluIElFMTAgdGhlIHBvaW50ZXIgdHlwZXMgaXMgZGVmaW5lZCBhcyBhbiBlbnVtXG5cbnZhciBJRTEwX1BPSU5URVJfVFlQRV9FTlVNID0ge1xuICAyOiBJTlBVVF9UWVBFX1RPVUNILFxuICAzOiBJTlBVVF9UWVBFX1BFTixcbiAgNDogSU5QVVRfVFlQRV9NT1VTRSxcbiAgNTogSU5QVVRfVFlQRV9LSU5FQ1QgLy8gc2VlIGh0dHBzOi8vdHdpdHRlci5jb20vamFjb2Jyb3NzaS9zdGF0dXMvNDgwNTk2NDM4NDg5ODkwODE2XG5cbn07XG52YXIgUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyA9ICdwb2ludGVyZG93bic7XG52YXIgUE9JTlRFUl9XSU5ET1dfRVZFTlRTID0gJ3BvaW50ZXJtb3ZlIHBvaW50ZXJ1cCBwb2ludGVyY2FuY2VsJzsgLy8gSUUxMCBoYXMgcHJlZml4ZWQgc3VwcG9ydCwgYW5kIGNhc2Utc2Vuc2l0aXZlXG5cbmlmICh3aW4uTVNQb2ludGVyRXZlbnQgJiYgIXdpbi5Qb2ludGVyRXZlbnQpIHtcbiAgUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyA9ICdNU1BvaW50ZXJEb3duJztcbiAgUE9JTlRFUl9XSU5ET1dfRVZFTlRTID0gJ01TUG9pbnRlck1vdmUgTVNQb2ludGVyVXAgTVNQb2ludGVyQ2FuY2VsJztcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqIFBvaW50ZXIgZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxuXG52YXIgUG9pbnRlckV2ZW50SW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShQb2ludGVyRXZlbnRJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBQb2ludGVyRXZlbnRJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBQb2ludGVyRXZlbnRJbnB1dC5wcm90b3R5cGU7XG4gICAgcHJvdG8uZXZFbCA9IFBPSU5URVJfRUxFTUVOVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBQT0lOVEVSX1dJTkRPV19FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0b3JlID0gX3RoaXMubWFuYWdlci5zZXNzaW9uLnBvaW50ZXJFdmVudHMgPSBbXTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhbmRsZSBtb3VzZSBldmVudHNcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFBvaW50ZXJFdmVudElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgc3RvcmUgPSB0aGlzLnN0b3JlO1xuICAgIHZhciByZW1vdmVQb2ludGVyID0gZmFsc2U7XG4gICAgdmFyIGV2ZW50VHlwZU5vcm1hbGl6ZWQgPSBldi50eXBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnbXMnLCAnJyk7XG4gICAgdmFyIGV2ZW50VHlwZSA9IFBPSU5URVJfSU5QVVRfTUFQW2V2ZW50VHlwZU5vcm1hbGl6ZWRdO1xuICAgIHZhciBwb2ludGVyVHlwZSA9IElFMTBfUE9JTlRFUl9UWVBFX0VOVU1bZXYucG9pbnRlclR5cGVdIHx8IGV2LnBvaW50ZXJUeXBlO1xuICAgIHZhciBpc1RvdWNoID0gcG9pbnRlclR5cGUgPT09IElOUFVUX1RZUEVfVE9VQ0g7IC8vIGdldCBpbmRleCBvZiB0aGUgZXZlbnQgaW4gdGhlIHN0b3JlXG5cbiAgICB2YXIgc3RvcmVJbmRleCA9IGluQXJyYXkoc3RvcmUsIGV2LnBvaW50ZXJJZCwgJ3BvaW50ZXJJZCcpOyAvLyBzdGFydCBhbmQgbW91c2UgbXVzdCBiZSBkb3duXG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgKGV2LmJ1dHRvbiA9PT0gMCB8fCBpc1RvdWNoKSkge1xuICAgICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICAgIHN0b3JlLnB1c2goZXYpO1xuICAgICAgICBzdG9yZUluZGV4ID0gc3RvcmUubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICByZW1vdmVQb2ludGVyID0gdHJ1ZTtcbiAgICB9IC8vIGl0IG5vdCBmb3VuZCwgc28gdGhlIHBvaW50ZXIgaGFzbid0IGJlZW4gZG93biAoc28gaXQncyBwcm9iYWJseSBhIGhvdmVyKVxuXG5cbiAgICBpZiAoc3RvcmVJbmRleCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHVwZGF0ZSB0aGUgZXZlbnQgaW4gdGhlIHN0b3JlXG5cblxuICAgIHN0b3JlW3N0b3JlSW5kZXhdID0gZXY7XG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIGV2ZW50VHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHN0b3JlLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgcG9pbnRlclR5cGU6IHBvaW50ZXJUeXBlLFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG5cbiAgICBpZiAocmVtb3ZlUG9pbnRlcikge1xuICAgICAgLy8gcmVtb3ZlIGZyb20gdGhlIHN0b3JlXG4gICAgICBzdG9yZS5zcGxpY2Uoc3RvcmVJbmRleCwgMSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBQb2ludGVyRXZlbnRJbnB1dDtcbn0oSW5wdXQpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjb252ZXJ0IGFycmF5LWxpa2Ugb2JqZWN0cyB0byByZWFsIGFycmF5c1xuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiB0b0FycmF5KG9iaikge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwob2JqLCAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdW5pcXVlIGFycmF5IHdpdGggb2JqZWN0cyBiYXNlZCBvbiBhIGtleSAobGlrZSAnaWQnKSBvciBqdXN0IGJ5IHRoZSBhcnJheSdzIHZhbHVlXG4gKiBAcGFyYW0ge0FycmF5fSBzcmMgW3tpZDoxfSx7aWQ6Mn0se2lkOjF9XVxuICogQHBhcmFtIHtTdHJpbmd9IFtrZXldXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtzb3J0PUZhbHNlXVxuICogQHJldHVybnMge0FycmF5fSBbe2lkOjF9LHtpZDoyfV1cbiAqL1xuXG5mdW5jdGlvbiB1bmlxdWVBcnJheShzcmMsIGtleSwgc29ydCkge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICB2YXIgdmFsdWVzID0gW107XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICB2YXIgdmFsID0ga2V5ID8gc3JjW2ldW2tleV0gOiBzcmNbaV07XG5cbiAgICBpZiAoaW5BcnJheSh2YWx1ZXMsIHZhbCkgPCAwKSB7XG4gICAgICByZXN1bHRzLnB1c2goc3JjW2ldKTtcbiAgICB9XG5cbiAgICB2YWx1ZXNbaV0gPSB2YWw7XG4gICAgaSsrO1xuICB9XG5cbiAgaWYgKHNvcnQpIHtcbiAgICBpZiAoIWtleSkge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhW2tleV0gPiBiW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxudmFyIFRPVUNIX0lOUFVUX01BUCA9IHtcbiAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gIHRvdWNobW92ZTogSU5QVVRfTU9WRSxcbiAgdG91Y2hlbmQ6IElOUFVUX0VORCxcbiAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcbnZhciBUT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcbi8qKlxuICogQHByaXZhdGVcbiAqIE11bHRpLXVzZXIgdG91Y2ggZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIFRvdWNoSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShUb3VjaElucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIFRvdWNoSW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgVG91Y2hJbnB1dC5wcm90b3R5cGUuZXZUYXJnZXQgPSBUT1VDSF9UQVJHRVRfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy50YXJnZXRJZHMgPSB7fTsgLy8gdGhpcy5ldlRhcmdldCA9IFRPVUNIX1RBUkdFVF9FVkVOVFM7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVG91Y2hJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHR5cGUgPSBUT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07XG4gICAgdmFyIHRvdWNoZXMgPSBnZXRUb3VjaGVzLmNhbGwodGhpcywgZXYsIHR5cGUpO1xuXG4gICAgaWYgKCF0b3VjaGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIHR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiB0b3VjaGVzWzFdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gVG91Y2hJbnB1dDtcbn0oSW5wdXQpO1xuXG5mdW5jdGlvbiBnZXRUb3VjaGVzKGV2LCB0eXBlKSB7XG4gIHZhciBhbGxUb3VjaGVzID0gdG9BcnJheShldi50b3VjaGVzKTtcbiAgdmFyIHRhcmdldElkcyA9IHRoaXMudGFyZ2V0SWRzOyAvLyB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIHRvdWNoLCB0aGUgcHJvY2VzcyBjYW4gYmUgc2ltcGxpZmllZFxuXG4gIGlmICh0eXBlICYgKElOUFVUX1NUQVJUIHwgSU5QVVRfTU9WRSkgJiYgYWxsVG91Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICB0YXJnZXRJZHNbYWxsVG91Y2hlc1swXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgcmV0dXJuIFthbGxUb3VjaGVzLCBhbGxUb3VjaGVzXTtcbiAgfVxuXG4gIHZhciBpO1xuICB2YXIgdGFyZ2V0VG91Y2hlcztcbiAgdmFyIGNoYW5nZWRUb3VjaGVzID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG4gIHZhciBjaGFuZ2VkVGFyZ2V0VG91Y2hlcyA9IFtdO1xuICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7IC8vIGdldCB0YXJnZXQgdG91Y2hlcyBmcm9tIHRvdWNoZXNcblxuICB0YXJnZXRUb3VjaGVzID0gYWxsVG91Y2hlcy5maWx0ZXIoZnVuY3Rpb24gKHRvdWNoKSB7XG4gICAgcmV0dXJuIGhhc1BhcmVudCh0b3VjaC50YXJnZXQsIHRhcmdldCk7XG4gIH0pOyAvLyBjb2xsZWN0IHRvdWNoZXNcblxuICBpZiAodHlwZSA9PT0gSU5QVVRfU1RBUlQpIHtcbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgdGFyZ2V0VG91Y2hlcy5sZW5ndGgpIHtcbiAgICAgIHRhcmdldElkc1t0YXJnZXRUb3VjaGVzW2ldLmlkZW50aWZpZXJdID0gdHJ1ZTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH0gLy8gZmlsdGVyIGNoYW5nZWQgdG91Y2hlcyB0byBvbmx5IGNvbnRhaW4gdG91Y2hlcyB0aGF0IGV4aXN0IGluIHRoZSBjb2xsZWN0ZWQgdGFyZ2V0IGlkc1xuXG5cbiAgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBjaGFuZ2VkVG91Y2hlcy5sZW5ndGgpIHtcbiAgICBpZiAodGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdKSB7XG4gICAgICBjaGFuZ2VkVGFyZ2V0VG91Y2hlcy5wdXNoKGNoYW5nZWRUb3VjaGVzW2ldKTtcbiAgICB9IC8vIGNsZWFudXAgcmVtb3ZlZCB0b3VjaGVzXG5cblxuICAgIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXRJZHNbY2hhbmdlZFRvdWNoZXNbaV0uaWRlbnRpZmllcl07XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgaWYgKCFjaGFuZ2VkVGFyZ2V0VG91Y2hlcy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gWy8vIG1lcmdlIHRhcmdldFRvdWNoZXMgd2l0aCBjaGFuZ2VkVGFyZ2V0VG91Y2hlcyBzbyBpdCBjb250YWlucyBBTEwgdG91Y2hlcywgaW5jbHVkaW5nICdlbmQnIGFuZCAnY2FuY2VsJ1xuICB1bmlxdWVBcnJheSh0YXJnZXRUb3VjaGVzLmNvbmNhdChjaGFuZ2VkVGFyZ2V0VG91Y2hlcyksICdpZGVudGlmaWVyJywgdHJ1ZSksIGNoYW5nZWRUYXJnZXRUb3VjaGVzXTtcbn1cblxudmFyIE1PVVNFX0lOUFVUX01BUCA9IHtcbiAgbW91c2Vkb3duOiBJTlBVVF9TVEFSVCxcbiAgbW91c2Vtb3ZlOiBJTlBVVF9NT1ZFLFxuICBtb3VzZXVwOiBJTlBVVF9FTkRcbn07XG52YXIgTU9VU0VfRUxFTUVOVF9FVkVOVFMgPSAnbW91c2Vkb3duJztcbnZhciBNT1VTRV9XSU5ET1dfRVZFTlRTID0gJ21vdXNlbW92ZSBtb3VzZXVwJztcbi8qKlxuICogQHByaXZhdGVcbiAqIE1vdXNlIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBNb3VzZUlucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoTW91c2VJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBNb3VzZUlucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IE1vdXNlSW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2RWwgPSBNT1VTRV9FTEVNRU5UX0VWRU5UUztcbiAgICBwcm90by5ldldpbiA9IE1PVVNFX1dJTkRPV19FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnByZXNzZWQgPSBmYWxzZTsgLy8gbW91c2Vkb3duIHN0YXRlXG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhbmRsZSBtb3VzZSBldmVudHNcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IE1vdXNlSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciBldmVudFR5cGUgPSBNT1VTRV9JTlBVVF9NQVBbZXYudHlwZV07IC8vIG9uIHN0YXJ0IHdlIHdhbnQgdG8gaGF2ZSB0aGUgbGVmdCBtb3VzZSBidXR0b24gZG93blxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIGV2LmJ1dHRvbiA9PT0gMCkge1xuICAgICAgdGhpcy5wcmVzc2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfTU9WRSAmJiBldi53aGljaCAhPT0gMSkge1xuICAgICAgZXZlbnRUeXBlID0gSU5QVVRfRU5EO1xuICAgIH0gLy8gbW91c2UgbXVzdCBiZSBkb3duXG5cblxuICAgIGlmICghdGhpcy5wcmVzc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgdGhpcy5wcmVzc2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIGV2ZW50VHlwZSwge1xuICAgICAgcG9pbnRlcnM6IFtldl0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IFtldl0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9NT1VTRSxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNb3VzZUlucHV0O1xufShJbnB1dCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIENvbWJpbmVkIHRvdWNoIGFuZCBtb3VzZSBpbnB1dFxuICpcbiAqIFRvdWNoIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGVuIG1vdXNlLCBhbmQgd2hpbGUgdG91Y2hpbmcgbm8gbW91c2UgZXZlbnRzIGFyZSBhbGxvd2VkLlxuICogVGhpcyBiZWNhdXNlIHRvdWNoIGRldmljZXMgYWxzbyBlbWl0IG1vdXNlIGV2ZW50cyB3aGlsZSBkb2luZyBhIHRvdWNoLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgREVEVVBfVElNRU9VVCA9IDI1MDA7XG52YXIgREVEVVBfRElTVEFOQ0UgPSAyNTtcblxuZnVuY3Rpb24gc2V0TGFzdFRvdWNoKGV2ZW50RGF0YSkge1xuICB2YXIgX2V2ZW50RGF0YSRjaGFuZ2VkUG9pID0gZXZlbnREYXRhLmNoYW5nZWRQb2ludGVycyxcbiAgICAgIHRvdWNoID0gX2V2ZW50RGF0YSRjaGFuZ2VkUG9pWzBdO1xuXG4gIGlmICh0b3VjaC5pZGVudGlmaWVyID09PSB0aGlzLnByaW1hcnlUb3VjaCkge1xuICAgIHZhciBsYXN0VG91Y2ggPSB7XG4gICAgICB4OiB0b3VjaC5jbGllbnRYLFxuICAgICAgeTogdG91Y2guY2xpZW50WVxuICAgIH07XG4gICAgdmFyIGx0cyA9IHRoaXMubGFzdFRvdWNoZXM7XG4gICAgdGhpcy5sYXN0VG91Y2hlcy5wdXNoKGxhc3RUb3VjaCk7XG5cbiAgICB2YXIgcmVtb3ZlTGFzdFRvdWNoID0gZnVuY3Rpb24gcmVtb3ZlTGFzdFRvdWNoKCkge1xuICAgICAgdmFyIGkgPSBsdHMuaW5kZXhPZihsYXN0VG91Y2gpO1xuXG4gICAgICBpZiAoaSA+IC0xKSB7XG4gICAgICAgIGx0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNldFRpbWVvdXQocmVtb3ZlTGFzdFRvdWNoLCBERURVUF9USU1FT1VUKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvcmRUb3VjaGVzKGV2ZW50VHlwZSwgZXZlbnREYXRhKSB7XG4gIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgIHRoaXMucHJpbWFyeVRvdWNoID0gZXZlbnREYXRhLmNoYW5nZWRQb2ludGVyc1swXS5pZGVudGlmaWVyO1xuICAgIHNldExhc3RUb3VjaC5jYWxsKHRoaXMsIGV2ZW50RGF0YSk7XG4gIH0gZWxzZSBpZiAoZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU3ludGhldGljRXZlbnQoZXZlbnREYXRhKSB7XG4gIHZhciB4ID0gZXZlbnREYXRhLnNyY0V2ZW50LmNsaWVudFg7XG4gIHZhciB5ID0gZXZlbnREYXRhLnNyY0V2ZW50LmNsaWVudFk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxhc3RUb3VjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHQgPSB0aGlzLmxhc3RUb3VjaGVzW2ldO1xuICAgIHZhciBkeCA9IE1hdGguYWJzKHggLSB0LngpO1xuICAgIHZhciBkeSA9IE1hdGguYWJzKHkgLSB0LnkpO1xuXG4gICAgaWYgKGR4IDw9IERFRFVQX0RJU1RBTkNFICYmIGR5IDw9IERFRFVQX0RJU1RBTkNFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBUb3VjaE1vdXNlSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICB2YXIgVG91Y2hNb3VzZUlucHV0ID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoX0lucHV0KSB7XG4gICAgX2luaGVyaXRzTG9vc2UoVG91Y2hNb3VzZUlucHV0LCBfSW5wdXQpO1xuXG4gICAgZnVuY3Rpb24gVG91Y2hNb3VzZUlucHV0KF9tYW5hZ2VyLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9JbnB1dC5jYWxsKHRoaXMsIF9tYW5hZ2VyLCBjYWxsYmFjaykgfHwgdGhpcztcblxuICAgICAgX3RoaXMuaGFuZGxlciA9IGZ1bmN0aW9uIChtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpIHtcbiAgICAgICAgdmFyIGlzVG91Y2ggPSBpbnB1dERhdGEucG9pbnRlclR5cGUgPT09IElOUFVUX1RZUEVfVE9VQ0g7XG4gICAgICAgIHZhciBpc01vdXNlID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX01PVVNFO1xuXG4gICAgICAgIGlmIChpc01vdXNlICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMgJiYgaW5wdXREYXRhLnNvdXJjZUNhcGFiaWxpdGllcy5maXJlc1RvdWNoRXZlbnRzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIHdoZW4gd2UncmUgaW4gYSB0b3VjaCBldmVudCwgcmVjb3JkIHRvdWNoZXMgdG8gIGRlLWR1cGUgc3ludGhldGljIG1vdXNlIGV2ZW50XG5cblxuICAgICAgICBpZiAoaXNUb3VjaCkge1xuICAgICAgICAgIHJlY29yZFRvdWNoZXMuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgaW5wdXRFdmVudCwgaW5wdXREYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01vdXNlICYmIGlzU3ludGhldGljRXZlbnQuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgaW5wdXREYXRhKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLmNhbGxiYWNrKG1hbmFnZXIsIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy50b3VjaCA9IG5ldyBUb3VjaElucHV0KF90aGlzLm1hbmFnZXIsIF90aGlzLmhhbmRsZXIpO1xuICAgICAgX3RoaXMubW91c2UgPSBuZXcgTW91c2VJbnB1dChfdGhpcy5tYW5hZ2VyLCBfdGhpcy5oYW5kbGVyKTtcbiAgICAgIF90aGlzLnByaW1hcnlUb3VjaCA9IG51bGw7XG4gICAgICBfdGhpcy5sYXN0VG91Y2hlcyA9IFtdO1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIGhhbmRsZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzXG4gICAgICogQHBhcmFtIHtIYW1tZXJ9IG1hbmFnZXJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXRFdmVudFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICAgKi9cblxuXG4gICAgdmFyIF9wcm90byA9IFRvdWNoTW91c2VJbnB1dC5wcm90b3R5cGU7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIHJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXJzXG4gICAgICovXG4gICAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdGhpcy50b3VjaC5kZXN0cm95KCk7XG4gICAgICB0aGlzLm1vdXNlLmRlc3Ryb3koKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFRvdWNoTW91c2VJbnB1dDtcbiAgfShJbnB1dCk7XG5cbiAgcmV0dXJuIFRvdWNoTW91c2VJbnB1dDtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIGNhbGxlZCBieSB0aGUgTWFuYWdlciBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtIYW1tZXJ9IG1hbmFnZXJcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVJbnB1dEluc3RhbmNlKG1hbmFnZXIpIHtcbiAgdmFyIFR5cGU7IC8vIGxldCBpbnB1dENsYXNzID0gbWFuYWdlci5vcHRpb25zLmlucHV0Q2xhc3M7XG5cbiAgdmFyIGlucHV0Q2xhc3MgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRDbGFzcztcblxuICBpZiAoaW5wdXRDbGFzcykge1xuICAgIFR5cGUgPSBpbnB1dENsYXNzO1xuICB9IGVsc2UgaWYgKFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMpIHtcbiAgICBUeXBlID0gUG9pbnRlckV2ZW50SW5wdXQ7XG4gIH0gZWxzZSBpZiAoU1VQUE9SVF9PTkxZX1RPVUNIKSB7XG4gICAgVHlwZSA9IFRvdWNoSW5wdXQ7XG4gIH0gZWxzZSBpZiAoIVNVUFBPUlRfVE9VQ0gpIHtcbiAgICBUeXBlID0gTW91c2VJbnB1dDtcbiAgfSBlbHNlIHtcbiAgICBUeXBlID0gVG91Y2hNb3VzZUlucHV0O1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUeXBlKG1hbmFnZXIsIGlucHV0SGFuZGxlcik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGlmIHRoZSBhcmd1bWVudCBpcyBhbiBhcnJheSwgd2Ugd2FudCB0byBleGVjdXRlIHRoZSBmbiBvbiBlYWNoIGVudHJ5XG4gKiBpZiBpdCBhaW50IGFuIGFycmF5IHdlIGRvbid0IHdhbnQgdG8gZG8gYSB0aGluZy5cbiAqIHRoaXMgaXMgdXNlZCBieSBhbGwgdGhlIG1ldGhvZHMgdGhhdCBhY2NlcHQgYSBzaW5nbGUgYW5kIGFycmF5IGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfEFycmF5fSBhcmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBmblxuICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0XVxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cblxuZnVuY3Rpb24gaW52b2tlQXJyYXlBcmcoYXJnLCBmbiwgY29udGV4dCkge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgZWFjaChhcmcsIGNvbnRleHRbZm5dLCBjb250ZXh0KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIFNUQVRFX1BPU1NJQkxFID0gMTtcbnZhciBTVEFURV9CRUdBTiA9IDI7XG52YXIgU1RBVEVfQ0hBTkdFRCA9IDQ7XG52YXIgU1RBVEVfRU5ERUQgPSA4O1xudmFyIFNUQVRFX1JFQ09HTklaRUQgPSBTVEFURV9FTkRFRDtcbnZhciBTVEFURV9DQU5DRUxMRUQgPSAxNjtcbnZhciBTVEFURV9GQUlMRUQgPSAzMjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IGEgdW5pcXVlIGlkXG4gKiBAcmV0dXJucyB7bnVtYmVyfSB1bmlxdWVJZFxuICovXG52YXIgX3VuaXF1ZUlkID0gMTtcbmZ1bmN0aW9uIHVuaXF1ZUlkKCkge1xuICByZXR1cm4gX3VuaXF1ZUlkKys7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHJlY29nbml6ZXIgYnkgbmFtZSBpZiBpdCBpcyBib3VuZCB0byBhIG1hbmFnZXJcbiAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IG90aGVyUmVjb2duaXplclxuICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gKiBAcmV0dXJucyB7UmVjb2duaXplcn1cbiAqL1xuZnVuY3Rpb24gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHJlY29nbml6ZXIpIHtcbiAgdmFyIG1hbmFnZXIgPSByZWNvZ25pemVyLm1hbmFnZXI7XG5cbiAgaWYgKG1hbmFnZXIpIHtcbiAgICByZXR1cm4gbWFuYWdlci5nZXQob3RoZXJSZWNvZ25pemVyKTtcbiAgfVxuXG4gIHJldHVybiBvdGhlclJlY29nbml6ZXI7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHVzYWJsZSBzdHJpbmcsIHVzZWQgYXMgZXZlbnQgcG9zdGZpeFxuICogQHBhcmFtIHtjb25zdGFudH0gc3RhdGVcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0YXRlXG4gKi9cblxuZnVuY3Rpb24gc3RhdGVTdHIoc3RhdGUpIHtcbiAgaWYgKHN0YXRlICYgU1RBVEVfQ0FOQ0VMTEVEKSB7XG4gICAgcmV0dXJuICdjYW5jZWwnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfRU5ERUQpIHtcbiAgICByZXR1cm4gJ2VuZCc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9DSEFOR0VEKSB7XG4gICAgcmV0dXJuICdtb3ZlJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0JFR0FOKSB7XG4gICAgcmV0dXJuICdzdGFydCc7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJlY29nbml6ZXIgZmxvdyBleHBsYWluZWQ7ICpcbiAqIEFsbCByZWNvZ25pemVycyBoYXZlIHRoZSBpbml0aWFsIHN0YXRlIG9mIFBPU1NJQkxFIHdoZW4gYSBpbnB1dCBzZXNzaW9uIHN0YXJ0cy5cbiAqIFRoZSBkZWZpbml0aW9uIG9mIGEgaW5wdXQgc2Vzc2lvbiBpcyBmcm9tIHRoZSBmaXJzdCBpbnB1dCB1bnRpbCB0aGUgbGFzdCBpbnB1dCwgd2l0aCBhbGwgaXQncyBtb3ZlbWVudCBpbiBpdC4gKlxuICogRXhhbXBsZSBzZXNzaW9uIGZvciBtb3VzZS1pbnB1dDogbW91c2Vkb3duIC0+IG1vdXNlbW92ZSAtPiBtb3VzZXVwXG4gKlxuICogT24gZWFjaCByZWNvZ25pemluZyBjeWNsZSAoc2VlIE1hbmFnZXIucmVjb2duaXplKSB0aGUgLnJlY29nbml6ZSgpIG1ldGhvZCBpcyBleGVjdXRlZFxuICogd2hpY2ggZGV0ZXJtaW5lcyB3aXRoIHN0YXRlIGl0IHNob3VsZCBiZS5cbiAqXG4gKiBJZiB0aGUgcmVjb2duaXplciBoYXMgdGhlIHN0YXRlIEZBSUxFRCwgQ0FOQ0VMTEVEIG9yIFJFQ09HTklaRUQgKGVxdWFscyBFTkRFRCksIGl0IGlzIHJlc2V0IHRvXG4gKiBQT1NTSUJMRSB0byBnaXZlIGl0IGFub3RoZXIgY2hhbmdlIG9uIHRoZSBuZXh0IGN5Y2xlLlxuICpcbiAqICAgICAgICAgICAgICAgUG9zc2libGVcbiAqICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICArLS0tLS0rLS0tLS0tLS0tLS0tLS0tK1xuICogICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICArLS0tLS0rLS0tLS0rICAgICAgICAgICAgICAgfFxuICogICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfFxuICogICBGYWlsZWQgICAgICBDYW5jZWxsZWQgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLStcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICBSZWNvZ25pemVkICAgICAgIEJlZ2FuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRlZC9SZWNvZ25pemVkXG4gKi9cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUmVjb2duaXplclxuICogRXZlcnkgcmVjb2duaXplciBuZWVkcyB0byBleHRlbmQgZnJvbSB0aGlzIGNsYXNzLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5cbnZhciBSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHtcbiAgICAgIGVuYWJsZTogdHJ1ZVxuICAgIH0sIG9wdGlvbnMpO1xuICAgIHRoaXMuaWQgPSB1bmlxdWVJZCgpO1xuICAgIHRoaXMubWFuYWdlciA9IG51bGw7IC8vIGRlZmF1bHQgaXMgZW5hYmxlIHRydWVcblxuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcbiAgICB0aGlzLnNpbXVsdGFuZW91cyA9IHt9O1xuICAgIHRoaXMucmVxdWlyZUZhaWwgPSBbXTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7UmVjb2duaXplcn1cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgYXNzaWduJDEodGhpcy5vcHRpb25zLCBvcHRpb25zKTsgLy8gYWxzbyB1cGRhdGUgdGhlIHRvdWNoQWN0aW9uLCBpbiBjYXNlIHNvbWV0aGluZyBjaGFuZ2VkIGFib3V0IHRoZSBkaXJlY3Rpb25zL2VuYWJsZWQgc3RhdGVcblxuICAgIHRoaXMubWFuYWdlciAmJiB0aGlzLm1hbmFnZXIudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplci5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplV2l0aCA9IGZ1bmN0aW9uIHJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ3JlY29nbml6ZVdpdGgnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHNpbXVsdGFuZW91cyA9IHRoaXMuc2ltdWx0YW5lb3VzO1xuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcblxuICAgIGlmICghc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF0pIHtcbiAgICAgIHNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdID0gb3RoZXJSZWNvZ25pemVyO1xuICAgICAgb3RoZXJSZWNvZ25pemVyLnJlY29nbml6ZVdpdGgodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBkcm9wIHRoZSBzaW11bHRhbmVvdXMgbGluay4gaXQgZG9lc250IHJlbW92ZSB0aGUgbGluayBvbiB0aGUgb3RoZXIgcmVjb2duaXplci5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8uZHJvcFJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiBkcm9wUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAnZHJvcFJlY29nbml6ZVdpdGgnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuICAgIGRlbGV0ZSB0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVjb2duaXplciBjYW4gb25seSBydW4gd2hlbiBhbiBvdGhlciBpcyBmYWlsaW5nXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlcXVpcmVGYWlsdXJlID0gZnVuY3Rpb24gcmVxdWlyZUZhaWx1cmUob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ3JlcXVpcmVGYWlsdXJlJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciByZXF1aXJlRmFpbCA9IHRoaXMucmVxdWlyZUZhaWw7XG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuXG4gICAgaWYgKGluQXJyYXkocmVxdWlyZUZhaWwsIG90aGVyUmVjb2duaXplcikgPT09IC0xKSB7XG4gICAgICByZXF1aXJlRmFpbC5wdXNoKG90aGVyUmVjb2duaXplcik7XG4gICAgICBvdGhlclJlY29nbml6ZXIucmVxdWlyZUZhaWx1cmUodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBkcm9wIHRoZSByZXF1aXJlRmFpbHVyZSBsaW5rLiBpdCBkb2VzIG5vdCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRyb3BSZXF1aXJlRmFpbHVyZSA9IGZ1bmN0aW9uIGRyb3BSZXF1aXJlRmFpbHVyZShvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAnZHJvcFJlcXVpcmVGYWlsdXJlJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICB2YXIgaW5kZXggPSBpbkFycmF5KHRoaXMucmVxdWlyZUZhaWwsIG90aGVyUmVjb2duaXplcik7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5yZXF1aXJlRmFpbC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaGFzIHJlcXVpcmUgZmFpbHVyZXMgYm9vbGVhblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBfcHJvdG8uaGFzUmVxdWlyZUZhaWx1cmVzID0gZnVuY3Rpb24gaGFzUmVxdWlyZUZhaWx1cmVzKCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCA+IDA7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBpZiB0aGUgcmVjb2duaXplciBjYW4gcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmNhblJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiBjYW5SZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIHJldHVybiAhIXRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBZb3Ugc2hvdWxkIHVzZSBgdHJ5RW1pdGAgaW5zdGVhZCBvZiBgZW1pdGAgZGlyZWN0bHkgdG8gY2hlY2tcbiAgICogdGhhdCBhbGwgdGhlIG5lZWRlZCByZWNvZ25pemVycyBoYXMgZmFpbGVkIGJlZm9yZSBlbWl0dGluZy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGU7XG5cbiAgICBmdW5jdGlvbiBlbWl0KGV2ZW50KSB7XG4gICAgICBzZWxmLm1hbmFnZXIuZW1pdChldmVudCwgaW5wdXQpO1xuICAgIH0gLy8gJ3BhbnN0YXJ0JyBhbmQgJ3Bhbm1vdmUnXG5cblxuICAgIGlmIChzdGF0ZSA8IFNUQVRFX0VOREVEKSB7XG4gICAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCArIHN0YXRlU3RyKHN0YXRlKSk7XG4gICAgfVxuXG4gICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQpOyAvLyBzaW1wbGUgJ2V2ZW50TmFtZScgZXZlbnRzXG5cbiAgICBpZiAoaW5wdXQuYWRkaXRpb25hbEV2ZW50KSB7XG4gICAgICAvLyBhZGRpdGlvbmFsIGV2ZW50KHBhbmxlZnQsIHBhbnJpZ2h0LCBwaW5jaGluLCBwaW5jaG91dC4uLilcbiAgICAgIGVtaXQoaW5wdXQuYWRkaXRpb25hbEV2ZW50KTtcbiAgICB9IC8vIHBhbmVuZCBhbmQgcGFuY2FuY2VsXG5cblxuICAgIGlmIChzdGF0ZSA+PSBTVEFURV9FTkRFRCkge1xuICAgICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQgKyBzdGF0ZVN0cihzdGF0ZSkpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIENoZWNrIHRoYXQgYWxsIHRoZSByZXF1aXJlIGZhaWx1cmUgcmVjb2duaXplcnMgaGFzIGZhaWxlZCxcbiAgICogaWYgdHJ1ZSwgaXQgZW1pdHMgYSBnZXN0dXJlIGV2ZW50LFxuICAgKiBvdGhlcndpc2UsIHNldHVwIHRoZSBzdGF0ZSB0byBGQUlMRUQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by50cnlFbWl0ID0gZnVuY3Rpb24gdHJ5RW1pdChpbnB1dCkge1xuICAgIGlmICh0aGlzLmNhbkVtaXQoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW1pdChpbnB1dCk7XG4gICAgfSAvLyBpdCdzIGZhaWxpbmcgYW55d2F5XG5cblxuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYW4gd2UgZW1pdD9cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmNhbkVtaXQgPSBmdW5jdGlvbiBjYW5FbWl0KCkge1xuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGgpIHtcbiAgICAgIGlmICghKHRoaXMucmVxdWlyZUZhaWxbaV0uc3RhdGUgJiAoU1RBVEVfRkFJTEVEIHwgU1RBVEVfUE9TU0lCTEUpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHVwZGF0ZSB0aGUgcmVjb2duaXplclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZSA9IGZ1bmN0aW9uIHJlY29nbml6ZShpbnB1dERhdGEpIHtcbiAgICAvLyBtYWtlIGEgbmV3IGNvcHkgb2YgdGhlIGlucHV0RGF0YVxuICAgIC8vIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIGlucHV0RGF0YSB3aXRob3V0IG1lc3NpbmcgdXAgdGhlIG90aGVyIHJlY29nbml6ZXJzXG4gICAgdmFyIGlucHV0RGF0YUNsb25lID0gYXNzaWduJDEoe30sIGlucHV0RGF0YSk7IC8vIGlzIGlzIGVuYWJsZWQgYW5kIGFsbG93IHJlY29nbml6aW5nP1xuXG4gICAgaWYgKCFib29sT3JGbih0aGlzLm9wdGlvbnMuZW5hYmxlLCBbdGhpcywgaW5wdXREYXRhQ2xvbmVdKSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHJlc2V0IHdoZW4gd2UndmUgcmVhY2hlZCB0aGUgZW5kXG5cblxuICAgIGlmICh0aGlzLnN0YXRlICYgKFNUQVRFX1JFQ09HTklaRUQgfCBTVEFURV9DQU5DRUxMRUQgfCBTVEFURV9GQUlMRUQpKSB7XG4gICAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMucHJvY2VzcyhpbnB1dERhdGFDbG9uZSk7IC8vIHRoZSByZWNvZ25pemVyIGhhcyByZWNvZ25pemVkIGEgZ2VzdHVyZVxuICAgIC8vIHNvIHRyaWdnZXIgYW4gZXZlbnRcblxuICAgIGlmICh0aGlzLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEIHwgU1RBVEVfQ0FOQ0VMTEVEKSkge1xuICAgICAgdGhpcy50cnlFbWl0KGlucHV0RGF0YUNsb25lKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZXR1cm4gdGhlIHN0YXRlIG9mIHRoZSByZWNvZ25pemVyXG4gICAqIHRoZSBhY3R1YWwgcmVjb2duaXppbmcgaGFwcGVucyBpbiB0aGlzIG1ldGhvZFxuICAgKiBAdmlydHVhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAqIEByZXR1cm5zIHtjb25zdGFudH0gU1RBVEVcbiAgICovXG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuXG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0RGF0YSkge307XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJldHVybiB0aGUgcHJlZmVycmVkIHRvdWNoLWFjdGlvblxuICAgKiBAdmlydHVhbFxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7fTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbGxlZCB3aGVuIHRoZSBnZXN0dXJlIGlzbid0IGFsbG93ZWQgdG8gcmVjb2duaXplXG4gICAqIGxpa2Ugd2hlbiBhbm90aGVyIGlzIGJlaW5nIHJlY29nbml6ZWQgb3IgaXQgaXMgZGlzYWJsZWRcbiAgICogQHZpcnR1YWxcbiAgICovXG5cblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHt9O1xuXG4gIHJldHVybiBSZWNvZ25pemVyO1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBBIHRhcCBpcyByZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG9pbmcgYSBzbWFsbCB0YXAvY2xpY2suIE11bHRpcGxlIHRhcHMgYXJlIHJlY29nbml6ZWQgaWYgdGhleSBvY2N1clxuICogYmV0d2VlbiB0aGUgZ2l2ZW4gaW50ZXJ2YWwgYW5kIHBvc2l0aW9uLiBUaGUgZGVsYXkgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlY29nbml6ZSBtdWx0aS10YXBzIHdpdGhvdXQgZmlyaW5nXG4gKiBhIHNpbmdsZSB0YXAuXG4gKlxuICogVGhlIGV2ZW50RGF0YSBmcm9tIHRoZSBlbWl0dGVkIGV2ZW50IGNvbnRhaW5zIHRoZSBwcm9wZXJ0eSBgdGFwQ291bnRgLCB3aGljaCBjb250YWlucyB0aGUgYW1vdW50IG9mXG4gKiBtdWx0aS10YXBzIGJlaW5nIHJlY29nbml6ZWQuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuXG52YXIgVGFwUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoVGFwUmVjb2duaXplciwgX1JlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFRhcFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICd0YXAnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0YXBzOiAxLFxuICAgICAgaW50ZXJ2YWw6IDMwMCxcbiAgICAgIC8vIG1heCB0aW1lIGJldHdlZW4gdGhlIG11bHRpLXRhcCB0YXBzXG4gICAgICB0aW1lOiAyNTAsXG4gICAgICAvLyBtYXggdGltZSBvZiB0aGUgcG9pbnRlciB0byBiZSBkb3duIChsaWtlIGZpbmdlciBvbiB0aGUgc2NyZWVuKVxuICAgICAgdGhyZXNob2xkOiA5LFxuICAgICAgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcbiAgICAgIHBvc1RocmVzaG9sZDogMTBcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpczsgLy8gcHJldmlvdXMgdGltZSBhbmQgY2VudGVyLFxuICAgIC8vIHVzZWQgZm9yIHRhcCBjb3VudGluZ1xuXG4gICAgX3RoaXMucFRpbWUgPSBmYWxzZTtcbiAgICBfdGhpcy5wQ2VudGVyID0gZmFsc2U7XG4gICAgX3RoaXMuX3RpbWVyID0gbnVsbDtcbiAgICBfdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIF90aGlzLmNvdW50ID0gMDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVGFwUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OXTtcbiAgfTtcblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciB2YWxpZFBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25zLnBvaW50ZXJzO1xuICAgIHZhciB2YWxpZE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCBvcHRpb25zLnRocmVzaG9sZDtcbiAgICB2YXIgdmFsaWRUb3VjaFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPCBvcHRpb25zLnRpbWU7XG4gICAgdGhpcy5yZXNldCgpO1xuXG4gICAgaWYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIHRoaXMuY291bnQgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmZhaWxUaW1lb3V0KCk7XG4gICAgfSAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgIC8vIGFuZCB3ZSd2ZSByZWFjaGVkIGFuIGVuZCBldmVudCwgc28gYSB0YXAgaXMgcG9zc2libGVcblxuXG4gICAgaWYgKHZhbGlkTW92ZW1lbnQgJiYgdmFsaWRUb3VjaFRpbWUgJiYgdmFsaWRQb2ludGVycykge1xuICAgICAgaWYgKGlucHV0LmV2ZW50VHlwZSAhPT0gSU5QVVRfRU5EKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZhaWxUaW1lb3V0KCk7XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWxpZEludGVydmFsID0gdGhpcy5wVGltZSA/IGlucHV0LnRpbWVTdGFtcCAtIHRoaXMucFRpbWUgPCBvcHRpb25zLmludGVydmFsIDogdHJ1ZTtcbiAgICAgIHZhciB2YWxpZE11bHRpVGFwID0gIXRoaXMucENlbnRlciB8fCBnZXREaXN0YW5jZSh0aGlzLnBDZW50ZXIsIGlucHV0LmNlbnRlcikgPCBvcHRpb25zLnBvc1RocmVzaG9sZDtcbiAgICAgIHRoaXMucFRpbWUgPSBpbnB1dC50aW1lU3RhbXA7XG4gICAgICB0aGlzLnBDZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG5cbiAgICAgIGlmICghdmFsaWRNdWx0aVRhcCB8fCAhdmFsaWRJbnRlcnZhbCkge1xuICAgICAgICB0aGlzLmNvdW50ID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY291bnQgKz0gMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gaWYgdGFwIGNvdW50IG1hdGNoZXMgd2UgaGF2ZSByZWNvZ25pemVkIGl0LFxuICAgICAgLy8gZWxzZSBpdCBoYXMgYmVnYW4gcmVjb2duaXppbmcuLi5cblxuICAgICAgdmFyIHRhcENvdW50ID0gdGhpcy5jb3VudCAlIG9wdGlvbnMudGFwcztcblxuICAgICAgaWYgKHRhcENvdW50ID09PSAwKSB7XG4gICAgICAgIC8vIG5vIGZhaWxpbmcgcmVxdWlyZW1lbnRzLCBpbW1lZGlhdGVseSB0cmlnZ2VyIHRoZSB0YXAgZXZlbnRcbiAgICAgICAgLy8gb3Igd2FpdCBhcyBsb25nIGFzIHRoZSBtdWx0aXRhcCBpbnRlcnZhbCB0byB0cmlnZ2VyXG4gICAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlRmFpbHVyZXMoKSkge1xuICAgICAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpczIuc3RhdGUgPSBTVEFURV9SRUNPR05JWkVEO1xuXG4gICAgICAgICAgICBfdGhpczIudHJ5RW1pdCgpO1xuICAgICAgICAgIH0sIG9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgICAgICAgIHJldHVybiBTVEFURV9CRUdBTjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLmZhaWxUaW1lb3V0ID0gZnVuY3Rpb24gZmFpbFRpbWVvdXQoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgIH0sIHRoaXMub3B0aW9ucy5pbnRlcnZhbCk7XG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdCgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgdGhpcy5faW5wdXQudGFwQ291bnQgPSB0aGlzLmNvdW50O1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBUYXBSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogVGhpcyByZWNvZ25pemVyIGlzIGp1c3QgdXNlZCBhcyBhIGJhc2UgZm9yIHRoZSBzaW1wbGUgYXR0cmlidXRlIHJlY29nbml6ZXJzLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIEF0dHJSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShBdHRyUmVjb2duaXplciwgX1JlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIEF0dHJSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9SZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgcG9pbnRlcnM6IDFcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogVXNlZCB0byBjaGVjayBpZiBpdCB0aGUgcmVjb2duaXplciByZWNlaXZlcyB2YWxpZCBpbnB1dCwgbGlrZSBpbnB1dC5kaXN0YW5jZSA+IDEwLlxuICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqIEByZXR1cm5zIHtCb29sZWFufSByZWNvZ25pemVkXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IEF0dHJSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHZhciBvcHRpb25Qb2ludGVycyA9IHRoaXMub3B0aW9ucy5wb2ludGVycztcbiAgICByZXR1cm4gb3B0aW9uUG9pbnRlcnMgPT09IDAgfHwgaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25Qb2ludGVycztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFByb2Nlc3MgdGhlIGlucHV0IGFuZCByZXR1cm4gdGhlIHN0YXRlIGZvciB0aGUgcmVjb2duaXplclxuICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqIEByZXR1cm5zIHsqfSBTdGF0ZVxuICAgKi9cblxuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgdmFyIGV2ZW50VHlwZSA9IGlucHV0LmV2ZW50VHlwZTtcbiAgICB2YXIgaXNSZWNvZ25pemVkID0gc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEKTtcbiAgICB2YXIgaXNWYWxpZCA9IHRoaXMuYXR0clRlc3QoaW5wdXQpOyAvLyBvbiBjYW5jZWwgaW5wdXQgYW5kIHdlJ3ZlIHJlY29nbml6ZWQgYmVmb3JlLCByZXR1cm4gU1RBVEVfQ0FOQ0VMTEVEXG5cbiAgICBpZiAoaXNSZWNvZ25pemVkICYmIChldmVudFR5cGUgJiBJTlBVVF9DQU5DRUwgfHwgIWlzVmFsaWQpKSB7XG4gICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DQU5DRUxMRUQ7XG4gICAgfSBlbHNlIGlmIChpc1JlY29nbml6ZWQgfHwgaXNWYWxpZCkge1xuICAgICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9FTkRFRDtcbiAgICAgIH0gZWxzZSBpZiAoIShzdGF0ZSAmIFNUQVRFX0JFR0FOKSkge1xuICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0NIQU5HRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICByZXR1cm4gQXR0clJlY29nbml6ZXI7XG59KFJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBkaXJlY3Rpb24gY29ucyB0byBzdHJpbmdcbiAqIEBwYXJhbSB7Y29uc3RhbnR9IGRpcmVjdGlvblxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBkaXJlY3Rpb25TdHIoZGlyZWN0aW9uKSB7XG4gIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9ET1dOKSB7XG4gICAgcmV0dXJuICdkb3duJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9VUCkge1xuICAgIHJldHVybiAndXAnO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQpIHtcbiAgICByZXR1cm4gJ2xlZnQnO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX1JJR0hUKSB7XG4gICAgcmV0dXJuICdyaWdodCc7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFBhblxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvd24gYW5kIG1vdmVkIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgUGFuUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFBhblJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUGFuUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIF90aGlzID0gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdwYW4nLFxuICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fQUxMXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gICAgX3RoaXMucFggPSBudWxsO1xuICAgIF90aGlzLnBZID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUGFuUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5kaXJlY3Rpb247XG4gICAgdmFyIGFjdGlvbnMgPSBbXTtcblxuICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgYWN0aW9ucy5wdXNoKFRPVUNIX0FDVElPTl9QQU5fWSk7XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgYWN0aW9ucy5wdXNoKFRPVUNIX0FDVElPTl9QQU5fWCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLmRpcmVjdGlvblRlc3QgPSBmdW5jdGlvbiBkaXJlY3Rpb25UZXN0KGlucHV0KSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIGhhc01vdmVkID0gdHJ1ZTtcbiAgICB2YXIgZGlzdGFuY2UgPSBpbnB1dC5kaXN0YW5jZTtcbiAgICB2YXIgZGlyZWN0aW9uID0gaW5wdXQuZGlyZWN0aW9uO1xuICAgIHZhciB4ID0gaW5wdXQuZGVsdGFYO1xuICAgIHZhciB5ID0gaW5wdXQuZGVsdGFZOyAvLyBsb2NrIHRvIGF4aXM/XG5cbiAgICBpZiAoIShkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbikpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IHggPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHggPCAwID8gRElSRUNUSU9OX0xFRlQgOiBESVJFQ1RJT05fUklHSFQ7XG4gICAgICAgIGhhc01vdmVkID0geCAhPT0gdGhpcy5wWDtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlyZWN0aW9uID0geSA9PT0gMCA/IERJUkVDVElPTl9OT05FIDogeSA8IDAgPyBESVJFQ1RJT05fVVAgOiBESVJFQ1RJT05fRE9XTjtcbiAgICAgICAgaGFzTW92ZWQgPSB5ICE9PSB0aGlzLnBZO1xuICAgICAgICBkaXN0YW5jZSA9IE1hdGguYWJzKGlucHV0LmRlbHRhWSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5wdXQuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgIHJldHVybiBoYXNNb3ZlZCAmJiBkaXN0YW5jZSA+IG9wdGlvbnMudGhyZXNob2xkICYmIGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIEF0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiAoIC8vIHJlcGxhY2Ugd2l0aCBhIHN1cGVyIGNhbGxcbiAgICB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4gfHwgISh0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pICYmIHRoaXMuZGlyZWN0aW9uVGVzdChpbnB1dCkpO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHRoaXMucFggPSBpbnB1dC5kZWx0YVg7XG4gICAgdGhpcy5wWSA9IGlucHV0LmRlbHRhWTtcbiAgICB2YXIgZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyKGlucHV0LmRpcmVjdGlvbik7XG5cbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBkaXJlY3Rpb247XG4gICAgfVxuXG4gICAgX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5lbWl0LmNhbGwodGhpcywgaW5wdXQpO1xuICB9O1xuXG4gIHJldHVybiBQYW5SZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFN3aXBlXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgbW92aW5nIGZhc3QgKHZlbG9jaXR5KSwgd2l0aCBlbm91Z2ggZGlzdGFuY2UgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBTd2lwZVJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShTd2lwZVJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gU3dpcGVSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAnc3dpcGUnLFxuICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgIHZlbG9jaXR5OiAwLjMsXG4gICAgICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMIHwgRElSRUNUSU9OX1ZFUlRJQ0FMLFxuICAgICAgcG9pbnRlcnM6IDFcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTd2lwZVJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBQYW5SZWNvZ25pemVyLnByb3RvdHlwZS5nZXRUb3VjaEFjdGlvbi5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5kaXJlY3Rpb247XG4gICAgdmFyIHZlbG9jaXR5O1xuXG4gICAgaWYgKGRpcmVjdGlvbiAmIChESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCkpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5O1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5WDtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgdmVsb2NpdHkgPSBpbnB1dC5vdmVyYWxsVmVsb2NpdHlZO1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIGRpcmVjdGlvbiAmIGlucHV0Lm9mZnNldERpcmVjdGlvbiAmJiBpbnB1dC5kaXN0YW5jZSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgJiYgaW5wdXQubWF4UG9pbnRlcnMgPT09IHRoaXMub3B0aW9ucy5wb2ludGVycyAmJiBhYnModmVsb2NpdHkpID4gdGhpcy5vcHRpb25zLnZlbG9jaXR5ICYmIGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORDtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyKGlucHV0Lm9mZnNldERpcmVjdGlvbik7XG5cbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQgKyBkaXJlY3Rpb24sIGlucHV0KTtcbiAgICB9XG5cbiAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gU3dpcGVSZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFBpbmNoXG4gKiBSZWNvZ25pemVkIHdoZW4gdHdvIG9yIG1vcmUgcG9pbnRlcnMgYXJlIG1vdmluZyB0b3dhcmQgKHpvb20taW4pIG9yIGF3YXkgZnJvbSBlYWNoIG90aGVyICh6b29tLW91dCkuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFBpbmNoUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFBpbmNoUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBQaW5jaFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdwaW5jaCcsXG4gICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICBwb2ludGVyczogMlxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFBpbmNoUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiAoTWF0aC5hYnMoaW5wdXQuc2NhbGUgLSAxKSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgfHwgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQuc2NhbGUgIT09IDEpIHtcbiAgICAgIHZhciBpbk91dCA9IGlucHV0LnNjYWxlIDwgMSA/ICdpbicgOiAnb3V0JztcbiAgICAgIGlucHV0LmFkZGl0aW9uYWxFdmVudCA9IHRoaXMub3B0aW9ucy5ldmVudCArIGluT3V0O1xuICAgIH1cblxuICAgIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gUGluY2hSZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJvdGF0ZVxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXIgYXJlIG1vdmluZyBpbiBhIGNpcmN1bGFyIG1vdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgUm90YXRlUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFJvdGF0ZVJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUm90YXRlUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3JvdGF0ZScsXG4gICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICBwb2ludGVyczogMlxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFJvdGF0ZVJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnJvdGF0aW9uKSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgfHwgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKTtcbiAgfTtcblxuICByZXR1cm4gUm90YXRlUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQcmVzc1xuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvd24gZm9yIHggbXMgd2l0aG91dCBhbnkgbW92ZW1lbnQuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuXG52YXIgUHJlc3NSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQcmVzc1JlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBQcmVzc1JlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdwcmVzcycsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIHRpbWU6IDI1MSxcbiAgICAgIC8vIG1pbmltYWwgdGltZSBvZiB0aGUgcG9pbnRlciB0byBiZSBwcmVzc2VkXG4gICAgICB0aHJlc2hvbGQ6IDlcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgICBfdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIF90aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFByZXNzUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fQVVUT107XG4gIH07XG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgdmFyIHZhbGlkVGltZSA9IGlucHV0LmRlbHRhVGltZSA+IG9wdGlvbnMudGltZTtcbiAgICB0aGlzLl9pbnB1dCA9IGlucHV0OyAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgIC8vIGFuZCB3ZSd2ZSByZWFjaGVkIGFuIGVuZCBldmVudCwgc28gYSB0YXAgaXMgcG9zc2libGVcblxuICAgIGlmICghdmFsaWRNb3ZlbWVudCB8fCAhdmFsaWRQb2ludGVycyB8fCBpbnB1dC5ldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiAhdmFsaWRUaW1lKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcblxuICAgICAgICBfdGhpczIudHJ5RW1pdCgpO1xuICAgICAgfSwgb3B0aW9ucy50aW1lKTtcbiAgICB9IGVsc2UgaWYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgcmV0dXJuIFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlucHV0ICYmIGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50ICsgXCJ1cFwiLCBpbnB1dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lucHV0LnRpbWVTdGFtcCA9IG5vdygpO1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBQcmVzc1JlY29nbml6ZXI7XG59KFJlY29nbml6ZXIpO1xuXG52YXIgZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgaWYgRE9NIGV2ZW50cyBhcmUgYmVpbmcgdHJpZ2dlcmVkLlxuICAgKiBCdXQgdGhpcyBpcyBzbG93ZXIgYW5kIHVudXNlZCBieSBzaW1wbGUgaW1wbGVtZW50YXRpb25zLCBzbyBkaXNhYmxlZCBieSBkZWZhdWx0LlxuICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRvbUV2ZW50czogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5L2ZhbGxiYWNrLlxuICAgKiBXaGVuIHNldCB0byBgY29tcHV0ZWAgaXQgd2lsbCBtYWdpY2FsbHkgc2V0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBhZGRlZCByZWNvZ25pemVycy5cbiAgICogQHR5cGUge1N0cmluZ31cbiAgICogQGRlZmF1bHQgY29tcHV0ZVxuICAgKi9cbiAgdG91Y2hBY3Rpb246IFRPVUNIX0FDVElPTl9DT01QVVRFLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgZW5hYmxlOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBFWFBFUklNRU5UQUwgRkVBVFVSRSAtLSBjYW4gYmUgcmVtb3ZlZC9jaGFuZ2VkXG4gICAqIENoYW5nZSB0aGUgcGFyZW50IGlucHV0IHRhcmdldCBlbGVtZW50LlxuICAgKiBJZiBOdWxsLCB0aGVuIGl0IGlzIGJlaW5nIHNldCB0aGUgdG8gbWFpbiBlbGVtZW50LlxuICAgKiBAdHlwZSB7TnVsbHxFdmVudFRhcmdldH1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5wdXRUYXJnZXQ6IG51bGwsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGZvcmNlIGFuIGlucHV0IGNsYXNzXG4gICAqIEB0eXBlIHtOdWxsfEZ1bmN0aW9ufVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBpbnB1dENsYXNzOiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBTb21lIENTUyBwcm9wZXJ0aWVzIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgdGhlIHdvcmtpbmcgb2YgSGFtbWVyLlxuICAgKiBBZGQgdGhlbSB0byB0aGlzIG1ldGhvZCBhbmQgdGhleSB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIuXG4gICAqIEBuYW1lc3BhY2VcbiAgICovXG4gIGNzc1Byb3BzOiB7XG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlcyB0ZXh0IHNlbGVjdGlvbiB0byBpbXByb3ZlIHRoZSBkcmFnZ2luZyBnZXN0dXJlLiBNYWlubHkgZm9yIGRlc2t0b3AgYnJvd3NlcnMuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZSB0aGUgV2luZG93cyBQaG9uZSBncmlwcGVycyB3aGVuIHByZXNzaW5nIGFuIGVsZW1lbnQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB0b3VjaFNlbGVjdDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGVzIHRoZSBkZWZhdWx0IGNhbGxvdXQgc2hvd24gd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQuXG4gICAgICogT24gaU9TLCB3aGVuIHlvdSB0b3VjaCBhbmQgaG9sZCBhIHRvdWNoIHRhcmdldCBzdWNoIGFzIGEgbGluaywgU2FmYXJpIGRpc3BsYXlzXG4gICAgICogYSBjYWxsb3V0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmsuIFRoaXMgcHJvcGVydHkgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoYXQgY2FsbG91dC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHRvdWNoQ2FsbG91dDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHpvb21pbmcgaXMgZW5hYmxlZC4gVXNlZCBieSBJRTEwPlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgY29udGVudFpvb21pbmc6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBTcGVjaWZpZXMgdGhhdCBhbiBlbnRpcmUgZWxlbWVudCBzaG91bGQgYmUgZHJhZ2dhYmxlIGluc3RlYWQgb2YgaXRzIGNvbnRlbnRzLiBNYWlubHkgZm9yIGRlc2t0b3AgYnJvd3NlcnMuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB1c2VyRHJhZzogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIE92ZXJyaWRlcyB0aGUgaGlnaGxpZ2h0IGNvbG9yIHNob3duIHdoZW4gdGhlIHVzZXIgdGFwcyBhIGxpbmsgb3IgYSBKYXZhU2NyaXB0XG4gICAgICogY2xpY2thYmxlIGVsZW1lbnQgaW4gaU9TLiBUaGlzIHByb3BlcnR5IG9iZXlzIHRoZSBhbHBoYSB2YWx1ZSwgaWYgc3BlY2lmaWVkLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ3JnYmEoMCwwLDAsMCknXG4gICAgICovXG4gICAgdGFwSGlnaGxpZ2h0Q29sb3I6IFwicmdiYSgwLDAsMCwwKVwiXG4gIH1cbn07XG4vKipcbiAqIEBwcml2YXRlXG4gKiBEZWZhdWx0IHJlY29nbml6ZXIgc2V0dXAgd2hlbiBjYWxsaW5nIGBIYW1tZXIoKWBcbiAqIFdoZW4gY3JlYXRpbmcgYSBuZXcgTWFuYWdlciB0aGVzZSB3aWxsIGJlIHNraXBwZWQuXG4gKiBUaGlzIGlzIHNlcGFyYXRlZCB3aXRoIG90aGVyIGRlZmF1bHRzIGJlY2F1c2Ugb2YgdHJlZS1zaGFraW5nLlxuICogQHR5cGUge0FycmF5fVxuICovXG5cbnZhciBwcmVzZXQgPSBbW1JvdGF0ZVJlY29nbml6ZXIsIHtcbiAgZW5hYmxlOiBmYWxzZVxufV0sIFtQaW5jaFJlY29nbml6ZXIsIHtcbiAgZW5hYmxlOiBmYWxzZVxufSwgWydyb3RhdGUnXV0sIFtTd2lwZVJlY29nbml6ZXIsIHtcbiAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTFxufV0sIFtQYW5SZWNvZ25pemVyLCB7XG4gIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUxcbn0sIFsnc3dpcGUnXV0sIFtUYXBSZWNvZ25pemVyXSwgW1RhcFJlY29nbml6ZXIsIHtcbiAgZXZlbnQ6ICdkb3VibGV0YXAnLFxuICB0YXBzOiAyXG59LCBbJ3RhcCddXSwgW1ByZXNzUmVjb2duaXplcl1dO1xuXG52YXIgU1RPUCA9IDE7XG52YXIgRk9SQ0VEX1NUT1AgPSAyO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogYWRkL3JlbW92ZSB0aGUgY3NzIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBpbiBtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtCb29sZWFufSBhZGRcbiAqL1xuXG5mdW5jdGlvbiB0b2dnbGVDc3NQcm9wcyhtYW5hZ2VyLCBhZGQpIHtcbiAgdmFyIGVsZW1lbnQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG5cbiAgaWYgKCFlbGVtZW50LnN0eWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHByb3A7XG4gIGVhY2gobWFuYWdlci5vcHRpb25zLmNzc1Byb3BzLCBmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICBwcm9wID0gcHJlZml4ZWQoZWxlbWVudC5zdHlsZSwgbmFtZSk7XG5cbiAgICBpZiAoYWRkKSB7XG4gICAgICBtYW5hZ2VyLm9sZENzc1Byb3BzW3Byb3BdID0gZWxlbWVudC5zdHlsZVtwcm9wXTtcbiAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IG1hbmFnZXIub2xkQ3NzUHJvcHNbcHJvcF0gfHwgXCJcIjtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICghYWRkKSB7XG4gICAgbWFuYWdlci5vbGRDc3NQcm9wcyA9IHt9O1xuICB9XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiB0cmlnZ2VyIGRvbSBldmVudFxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICovXG5cblxuZnVuY3Rpb24gdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKSB7XG4gIHZhciBnZXN0dXJlRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICBnZXN0dXJlRXZlbnQuaW5pdEV2ZW50KGV2ZW50LCB0cnVlLCB0cnVlKTtcbiAgZ2VzdHVyZUV2ZW50Lmdlc3R1cmUgPSBkYXRhO1xuICBkYXRhLnRhcmdldC5kaXNwYXRjaEV2ZW50KGdlc3R1cmVFdmVudCk7XG59XG4vKipcbiogQHByaXZhdGVcbiAqIE1hbmFnZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cblxudmFyIE1hbmFnZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNYW5hZ2VyKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5vcHRpb25zID0gYXNzaWduJDEoe30sIGRlZmF1bHRzLCBvcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLm9wdGlvbnMuaW5wdXRUYXJnZXQgPSB0aGlzLm9wdGlvbnMuaW5wdXRUYXJnZXQgfHwgZWxlbWVudDtcbiAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgdGhpcy5yZWNvZ25pemVycyA9IFtdO1xuICAgIHRoaXMub2xkQ3NzUHJvcHMgPSB7fTtcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuaW5wdXQgPSBjcmVhdGVJbnB1dEluc3RhbmNlKHRoaXMpO1xuICAgIHRoaXMudG91Y2hBY3Rpb24gPSBuZXcgVG91Y2hBY3Rpb24odGhpcywgdGhpcy5vcHRpb25zLnRvdWNoQWN0aW9uKTtcbiAgICB0b2dnbGVDc3NQcm9wcyh0aGlzLCB0cnVlKTtcbiAgICBlYWNoKHRoaXMub3B0aW9ucy5yZWNvZ25pemVycywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciByZWNvZ25pemVyID0gX3RoaXMuYWRkKG5ldyBpdGVtWzBdKGl0ZW1bMV0pKTtcblxuICAgICAgaXRlbVsyXSAmJiByZWNvZ25pemVyLnJlY29nbml6ZVdpdGgoaXRlbVsyXSk7XG4gICAgICBpdGVtWzNdICYmIHJlY29nbml6ZXIucmVxdWlyZUZhaWx1cmUoaXRlbVszXSk7XG4gICAgfSwgdGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICBhc3NpZ24kMSh0aGlzLm9wdGlvbnMsIG9wdGlvbnMpOyAvLyBPcHRpb25zIHRoYXQgbmVlZCBhIGxpdHRsZSBtb3JlIHNldHVwXG5cbiAgICBpZiAob3B0aW9ucy50b3VjaEFjdGlvbikge1xuICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5pbnB1dFRhcmdldCkge1xuICAgICAgLy8gQ2xlYW4gdXAgZXhpc3RpbmcgZXZlbnQgbGlzdGVuZXJzIGFuZCByZWluaXRpYWxpemVcbiAgICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgICAgdGhpcy5pbnB1dC50YXJnZXQgPSBvcHRpb25zLmlucHV0VGFyZ2V0O1xuICAgICAgdGhpcy5pbnB1dC5pbml0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzdG9wIHJlY29nbml6aW5nIGZvciB0aGlzIHNlc3Npb24uXG4gICAqIFRoaXMgc2Vzc2lvbiB3aWxsIGJlIGRpc2NhcmRlZCwgd2hlbiBhIG5ldyBbaW5wdXRdc3RhcnQgZXZlbnQgaXMgZmlyZWQuXG4gICAqIFdoZW4gZm9yY2VkLCB0aGUgcmVjb2duaXplciBjeWNsZSBpcyBzdG9wcGVkIGltbWVkaWF0ZWx5LlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZV1cbiAgICovXG5cblxuICBfcHJvdG8uc3RvcCA9IGZ1bmN0aW9uIHN0b3AoZm9yY2UpIHtcbiAgICB0aGlzLnNlc3Npb24uc3RvcHBlZCA9IGZvcmNlID8gRk9SQ0VEX1NUT1AgOiBTVE9QO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcnVuIHRoZSByZWNvZ25pemVycyFcbiAgICogY2FsbGVkIGJ5IHRoZSBpbnB1dEhhbmRsZXIgZnVuY3Rpb24gb24gZXZlcnkgbW92ZW1lbnQgb2YgdGhlIHBvaW50ZXJzICh0b3VjaGVzKVxuICAgKiBpdCB3YWxrcyB0aHJvdWdoIGFsbCB0aGUgcmVjb2duaXplcnMgYW5kIHRyaWVzIHRvIGRldGVjdCB0aGUgZ2VzdHVyZSB0aGF0IGlzIGJlaW5nIG1hZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemUgPSBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG5cbiAgICBpZiAoc2Vzc2lvbi5zdG9wcGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBydW4gdGhlIHRvdWNoLWFjdGlvbiBwb2x5ZmlsbFxuXG5cbiAgICB0aGlzLnRvdWNoQWN0aW9uLnByZXZlbnREZWZhdWx0cyhpbnB1dERhdGEpO1xuICAgIHZhciByZWNvZ25pemVyO1xuICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7IC8vIHRoaXMgaG9sZHMgdGhlIHJlY29nbml6ZXIgdGhhdCBpcyBiZWluZyByZWNvZ25pemVkLlxuICAgIC8vIHNvIHRoZSByZWNvZ25pemVyJ3Mgc3RhdGUgbmVlZHMgdG8gYmUgQkVHQU4sIENIQU5HRUQsIEVOREVEIG9yIFJFQ09HTklaRURcbiAgICAvLyBpZiBubyByZWNvZ25pemVyIGlzIGRldGVjdGluZyBhIHRoaW5nLCBpdCBpcyBzZXQgdG8gYG51bGxgXG5cbiAgICB2YXIgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplcjsgLy8gcmVzZXQgd2hlbiB0aGUgbGFzdCByZWNvZ25pemVyIGlzIHJlY29nbml6ZWRcbiAgICAvLyBvciB3aGVuIHdlJ3JlIGluIGEgbmV3IHNlc3Npb25cblxuICAgIGlmICghY3VyUmVjb2duaXplciB8fCBjdXJSZWNvZ25pemVyICYmIGN1clJlY29nbml6ZXIuc3RhdGUgJiBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgICAgY3VyUmVjb2duaXplciA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCByZWNvZ25pemVycy5sZW5ndGgpIHtcbiAgICAgIHJlY29nbml6ZXIgPSByZWNvZ25pemVyc1tpXTsgLy8gZmluZCBvdXQgaWYgd2UgYXJlIGFsbG93ZWQgdHJ5IHRvIHJlY29nbml6ZSB0aGUgaW5wdXQgZm9yIHRoaXMgb25lLlxuICAgICAgLy8gMS4gICBhbGxvdyBpZiB0aGUgc2Vzc2lvbiBpcyBOT1QgZm9yY2VkIHN0b3BwZWQgKHNlZSB0aGUgLnN0b3AoKSBtZXRob2QpXG4gICAgICAvLyAyLiAgIGFsbG93IGlmIHdlIHN0aWxsIGhhdmVuJ3QgcmVjb2duaXplZCBhIGdlc3R1cmUgaW4gdGhpcyBzZXNzaW9uLCBvciB0aGUgdGhpcyByZWNvZ25pemVyIGlzIHRoZSBvbmVcbiAgICAgIC8vICAgICAgdGhhdCBpcyBiZWluZyByZWNvZ25pemVkLlxuICAgICAgLy8gMy4gICBhbGxvdyBpZiB0aGUgcmVjb2duaXplciBpcyBhbGxvd2VkIHRvIHJ1biBzaW11bHRhbmVvdXMgd2l0aCB0aGUgY3VycmVudCByZWNvZ25pemVkIHJlY29nbml6ZXIuXG4gICAgICAvLyAgICAgIHRoaXMgY2FuIGJlIHNldHVwIHdpdGggdGhlIGByZWNvZ25pemVXaXRoKClgIG1ldGhvZCBvbiB0aGUgcmVjb2duaXplci5cblxuICAgICAgaWYgKHNlc3Npb24uc3RvcHBlZCAhPT0gRk9SQ0VEX1NUT1AgJiYgKCAvLyAxXG4gICAgICAhY3VyUmVjb2duaXplciB8fCByZWNvZ25pemVyID09PSBjdXJSZWNvZ25pemVyIHx8IC8vIDJcbiAgICAgIHJlY29nbml6ZXIuY2FuUmVjb2duaXplV2l0aChjdXJSZWNvZ25pemVyKSkpIHtcbiAgICAgICAgLy8gM1xuICAgICAgICByZWNvZ25pemVyLnJlY29nbml6ZShpbnB1dERhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjb2duaXplci5yZXNldCgpO1xuICAgICAgfSAvLyBpZiB0aGUgcmVjb2duaXplciBoYXMgYmVlbiByZWNvZ25pemluZyB0aGUgaW5wdXQgYXMgYSB2YWxpZCBnZXN0dXJlLCB3ZSB3YW50IHRvIHN0b3JlIHRoaXMgb25lIGFzIHRoZVxuICAgICAgLy8gY3VycmVudCBhY3RpdmUgcmVjb2duaXplci4gYnV0IG9ubHkgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGFjdGl2ZSByZWNvZ25pemVyXG5cblxuICAgICAgaWYgKCFjdXJSZWNvZ25pemVyICYmIHJlY29nbml6ZXIuc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEIHwgU1RBVEVfRU5ERUQpKSB7XG4gICAgICAgIHNlc3Npb24uY3VyUmVjb2duaXplciA9IHJlY29nbml6ZXI7XG4gICAgICAgIGN1clJlY29nbml6ZXIgPSByZWNvZ25pemVyO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZ2V0IGEgcmVjb2duaXplciBieSBpdHMgZXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gcmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxOdWxsfVxuICAgKi9cblxuXG4gIF9wcm90by5nZXQgPSBmdW5jdGlvbiBnZXQocmVjb2duaXplcikge1xuICAgIGlmIChyZWNvZ25pemVyIGluc3RhbmNlb2YgUmVjb2duaXplcikge1xuICAgICAgcmV0dXJuIHJlY29nbml6ZXI7XG4gICAgfVxuXG4gICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjb2duaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWNvZ25pemVyc1tpXS5vcHRpb25zLmV2ZW50ID09PSByZWNvZ25pemVyKSB7XG4gICAgICAgIHJldHVybiByZWNvZ25pemVyc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIGFkZCBhIHJlY29nbml6ZXIgdG8gdGhlIG1hbmFnZXJcbiAgICogZXhpc3RpbmcgcmVjb2duaXplcnMgd2l0aCB0aGUgc2FtZSBldmVudCBuYW1lIHdpbGwgYmUgcmVtb3ZlZFxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TWFuYWdlcn1cbiAgICovXG5cblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKHJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgXCJhZGRcIiwgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gLy8gcmVtb3ZlIGV4aXN0aW5nXG5cblxuICAgIHZhciBleGlzdGluZyA9IHRoaXMuZ2V0KHJlY29nbml6ZXIub3B0aW9ucy5ldmVudCk7XG5cbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHRoaXMucmVtb3ZlKGV4aXN0aW5nKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlY29nbml6ZXJzLnB1c2gocmVjb2duaXplcik7XG4gICAgcmVjb2duaXplci5tYW5hZ2VyID0gdGhpcztcbiAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIHJldHVybiByZWNvZ25pemVyO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVtb3ZlIGEgcmVjb2duaXplciBieSBuYW1lIG9yIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge01hbmFnZXJ9XG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShyZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsIFwicmVtb3ZlXCIsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0UmVjb2duaXplciA9IHRoaXMuZ2V0KHJlY29nbml6ZXIpOyAvLyBsZXQncyBtYWtlIHN1cmUgdGhpcyByZWNvZ25pemVyIGV4aXN0c1xuXG4gICAgaWYgKHJlY29nbml6ZXIpIHtcbiAgICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG4gICAgICB2YXIgaW5kZXggPSBpbkFycmF5KHJlY29nbml6ZXJzLCB0YXJnZXRSZWNvZ25pemVyKTtcblxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICByZWNvZ25pemVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogYmluZCBldmVudFxuICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAgICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCB8fCBoYW5kbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgZWFjaChzcGxpdFN0cihldmVudHMpLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGhhbmRsZXJzW2V2ZW50XSA9IGhhbmRsZXJzW2V2ZW50XSB8fCBbXTtcbiAgICAgIGhhbmRsZXJzW2V2ZW50XS5wdXNoKGhhbmRsZXIpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgdW5iaW5kIGV2ZW50LCBsZWF2ZSBlbWl0IGJsYW5rIHRvIHJlbW92ZSBhbGwgaGFuZGxlcnNcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaGFuZGxlcl1cbiAgICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5vZmYgPSBmdW5jdGlvbiBvZmYoZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgZGVsZXRlIGhhbmRsZXJzW2V2ZW50XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZXJzW2V2ZW50XSAmJiBoYW5kbGVyc1tldmVudF0uc3BsaWNlKGluQXJyYXkoaGFuZGxlcnNbZXZlbnRdLCBoYW5kbGVyKSwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSBlbWl0IGV2ZW50IHRvIHRoZSBsaXN0ZW5lcnNcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAqL1xuXG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBkYXRhKSB7XG4gICAgLy8gd2UgYWxzbyB3YW50IHRvIHRyaWdnZXIgZG9tIGV2ZW50c1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZG9tRXZlbnRzKSB7XG4gICAgICB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpO1xuICAgIH0gLy8gbm8gaGFuZGxlcnMsIHNvIHNraXAgaXQgYWxsXG5cblxuICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNbZXZlbnRdICYmIHRoaXMuaGFuZGxlcnNbZXZlbnRdLnNsaWNlKCk7XG5cbiAgICBpZiAoIWhhbmRsZXJzIHx8ICFoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLnR5cGUgPSBldmVudDtcblxuICAgIGRhdGEucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBkYXRhLnNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfTtcblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICBoYW5kbGVyc1tpXShkYXRhKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBkZXN0cm95IHRoZSBtYW5hZ2VyIGFuZCB1bmJpbmRzIGFsbCBldmVudHNcbiAgICogaXQgZG9lc24ndCB1bmJpbmQgZG9tIGV2ZW50cywgdGhhdCBpcyB0aGUgdXNlciBvd24gcmVzcG9uc2liaWxpdHlcbiAgICovXG5cblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5lbGVtZW50ICYmIHRvZ2dsZUNzc1Byb3BzKHRoaXMsIGZhbHNlKTtcbiAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgdGhpcy5pbnB1dC5kZXN0cm95KCk7XG4gICAgdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gTWFuYWdlcjtcbn0oKTtcblxudmFyIFNJTkdMRV9UT1VDSF9JTlBVVF9NQVAgPSB7XG4gIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICB0b3VjaG1vdmU6IElOUFVUX01PVkUsXG4gIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG52YXIgU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFMgPSAndG91Y2hzdGFydCc7XG52YXIgU0lOR0xFX1RPVUNIX1dJTkRPV19FVkVOVFMgPSAndG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWwnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogVG91Y2ggZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIFNpbmdsZVRvdWNoSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShTaW5nbGVUb3VjaElucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIFNpbmdsZVRvdWNoSW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gU2luZ2xlVG91Y2hJbnB1dC5wcm90b3R5cGU7XG4gICAgcHJvdG8uZXZUYXJnZXQgPSBTSU5HTEVfVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICBwcm90by5ldldpbiA9IFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFNpbmdsZVRvdWNoSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciB0eXBlID0gU0lOR0xFX1RPVUNIX0lOUFVUX01BUFtldi50eXBlXTsgLy8gc2hvdWxkIHdlIGhhbmRsZSB0aGUgdG91Y2ggZXZlbnRzP1xuXG4gICAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRvdWNoZXMgPSBub3JtYWxpemVTaW5nbGVUb3VjaGVzLmNhbGwodGhpcywgZXYsIHR5cGUpOyAvLyB3aGVuIGRvbmUsIHJlc2V0IHRoZSBzdGFydGVkIHN0YXRlXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIHRvdWNoZXNbMF0ubGVuZ3RoIC0gdG91Y2hlc1sxXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFNpbmdsZVRvdWNoSW5wdXQ7XG59KElucHV0KTtcblxuZnVuY3Rpb24gbm9ybWFsaXplU2luZ2xlVG91Y2hlcyhldiwgdHlwZSkge1xuICB2YXIgYWxsID0gdG9BcnJheShldi50b3VjaGVzKTtcbiAgdmFyIGNoYW5nZWQgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKTtcblxuICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgYWxsID0gdW5pcXVlQXJyYXkoYWxsLmNvbmNhdChjaGFuZ2VkKSwgJ2lkZW50aWZpZXInLCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiBbYWxsLCBjaGFuZ2VkXTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogd3JhcCBhIG1ldGhvZCB3aXRoIGEgZGVwcmVjYXRpb24gd2FybmluZyBhbmQgc3RhY2sgdHJhY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgbmV3IGZ1bmN0aW9uIHdyYXBwaW5nIHRoZSBzdXBwbGllZCBtZXRob2QuXG4gKi9cbmZ1bmN0aW9uIGRlcHJlY2F0ZShtZXRob2QsIG5hbWUsIG1lc3NhZ2UpIHtcbiAgdmFyIGRlcHJlY2F0aW9uTWVzc2FnZSA9IFwiREVQUkVDQVRFRCBNRVRIT0Q6IFwiICsgbmFtZSArIFwiXFxuXCIgKyBtZXNzYWdlICsgXCIgQVQgXFxuXCI7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGUgPSBuZXcgRXJyb3IoJ2dldC1zdGFjay10cmFjZScpO1xuICAgIHZhciBzdGFjayA9IGUgJiYgZS5zdGFjayA/IGUuc3RhY2sucmVwbGFjZSgvXlteXFwoXSs/W1xcbiRdL2dtLCAnJykucmVwbGFjZSgvXlxccythdFxccysvZ20sICcnKS5yZXBsYWNlKC9eT2JqZWN0Ljxhbm9ueW1vdXM+XFxzKlxcKC9nbSwgJ3thbm9ueW1vdXN9KClAJykgOiAnVW5rbm93biBTdGFjayBUcmFjZSc7XG4gICAgdmFyIGxvZyA9IHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS53YXJuIHx8IHdpbmRvdy5jb25zb2xlLmxvZyk7XG5cbiAgICBpZiAobG9nKSB7XG4gICAgICBsb2cuY2FsbCh3aW5kb3cuY29uc29sZSwgZGVwcmVjYXRpb25NZXNzYWdlLCBzdGFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBleHRlbmQgb2JqZWN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIGluIGRlc3Qgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgb25lcyBpbiBzcmMuXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzdFxuICogQHBhcmFtIHtPYmplY3R9IHNyY1xuICogQHBhcmFtIHtCb29sZWFufSBbbWVyZ2U9ZmFsc2VdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBkZXN0XG4gKi9cblxudmFyIGV4dGVuZCA9IGRlcHJlY2F0ZShmdW5jdGlvbiAoZGVzdCwgc3JjLCBtZXJnZSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHNyYyk7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IGtleXMubGVuZ3RoKSB7XG4gICAgaWYgKCFtZXJnZSB8fCBtZXJnZSAmJiBkZXN0W2tleXNbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc3Rba2V5c1tpXV0gPSBzcmNba2V5c1tpXV07XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIGRlc3Q7XG59LCAnZXh0ZW5kJywgJ1VzZSBgYXNzaWduYC4nKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogbWVyZ2UgdGhlIHZhbHVlcyBmcm9tIHNyYyBpbiB0aGUgZGVzdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyB0aGF0IGV4aXN0IGluIGRlc3Qgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW4gYnkgc3JjXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzdFxuICogQHBhcmFtIHtPYmplY3R9IHNyY1xuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG5cbnZhciBtZXJnZSA9IGRlcHJlY2F0ZShmdW5jdGlvbiAoZGVzdCwgc3JjKSB7XG4gIHJldHVybiBleHRlbmQoZGVzdCwgc3JjLCB0cnVlKTtcbn0sICdtZXJnZScsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNpbXBsZSBjbGFzcyBpbmhlcml0YW5jZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2hpbGRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGJhc2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllc11cbiAqL1xuXG5mdW5jdGlvbiBpbmhlcml0KGNoaWxkLCBiYXNlLCBwcm9wZXJ0aWVzKSB7XG4gIHZhciBiYXNlUCA9IGJhc2UucHJvdG90eXBlO1xuICB2YXIgY2hpbGRQO1xuICBjaGlsZFAgPSBjaGlsZC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGJhc2VQKTtcbiAgY2hpbGRQLmNvbnN0cnVjdG9yID0gY2hpbGQ7XG4gIGNoaWxkUC5fc3VwZXIgPSBiYXNlUDtcblxuICBpZiAocHJvcGVydGllcykge1xuICAgIGFzc2lnbiQxKGNoaWxkUCwgcHJvcGVydGllcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc2ltcGxlIGZ1bmN0aW9uIGJpbmRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBiaW5kRm4oZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvdW5kRm4oKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFNpbXBsZSB3YXkgdG8gY3JlYXRlIGEgbWFuYWdlciB3aXRoIGEgZGVmYXVsdCBzZXQgb2YgcmVjb2duaXplcnMuXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG52YXIgSGFtbWVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIEhhbW1lciA9XG4gIC8qKlxuICAgICogQHByaXZhdGVcbiAgICAqIEBjb25zdCB7c3RyaW5nfVxuICAgICovXG4gIGZ1bmN0aW9uIEhhbW1lcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTWFuYWdlcihlbGVtZW50LCBfZXh0ZW5kcyh7XG4gICAgICByZWNvZ25pemVyczogcHJlc2V0LmNvbmNhdCgpXG4gICAgfSwgb3B0aW9ucykpO1xuICB9O1xuXG4gIEhhbW1lci5WRVJTSU9OID0gXCIyLjAuMTctcmNcIjtcbiAgSGFtbWVyLkRJUkVDVElPTl9BTEwgPSBESVJFQ1RJT05fQUxMO1xuICBIYW1tZXIuRElSRUNUSU9OX0RPV04gPSBESVJFQ1RJT05fRE9XTjtcbiAgSGFtbWVyLkRJUkVDVElPTl9MRUZUID0gRElSRUNUSU9OX0xFRlQ7XG4gIEhhbW1lci5ESVJFQ1RJT05fUklHSFQgPSBESVJFQ1RJT05fUklHSFQ7XG4gIEhhbW1lci5ESVJFQ1RJT05fVVAgPSBESVJFQ1RJT05fVVA7XG4gIEhhbW1lci5ESVJFQ1RJT05fSE9SSVpPTlRBTCA9IERJUkVDVElPTl9IT1JJWk9OVEFMO1xuICBIYW1tZXIuRElSRUNUSU9OX1ZFUlRJQ0FMID0gRElSRUNUSU9OX1ZFUlRJQ0FMO1xuICBIYW1tZXIuRElSRUNUSU9OX05PTkUgPSBESVJFQ1RJT05fTk9ORTtcbiAgSGFtbWVyLkRJUkVDVElPTl9ET1dOID0gRElSRUNUSU9OX0RPV047XG4gIEhhbW1lci5JTlBVVF9TVEFSVCA9IElOUFVUX1NUQVJUO1xuICBIYW1tZXIuSU5QVVRfTU9WRSA9IElOUFVUX01PVkU7XG4gIEhhbW1lci5JTlBVVF9FTkQgPSBJTlBVVF9FTkQ7XG4gIEhhbW1lci5JTlBVVF9DQU5DRUwgPSBJTlBVVF9DQU5DRUw7XG4gIEhhbW1lci5TVEFURV9QT1NTSUJMRSA9IFNUQVRFX1BPU1NJQkxFO1xuICBIYW1tZXIuU1RBVEVfQkVHQU4gPSBTVEFURV9CRUdBTjtcbiAgSGFtbWVyLlNUQVRFX0NIQU5HRUQgPSBTVEFURV9DSEFOR0VEO1xuICBIYW1tZXIuU1RBVEVfRU5ERUQgPSBTVEFURV9FTkRFRDtcbiAgSGFtbWVyLlNUQVRFX1JFQ09HTklaRUQgPSBTVEFURV9SRUNPR05JWkVEO1xuICBIYW1tZXIuU1RBVEVfQ0FOQ0VMTEVEID0gU1RBVEVfQ0FOQ0VMTEVEO1xuICBIYW1tZXIuU1RBVEVfRkFJTEVEID0gU1RBVEVfRkFJTEVEO1xuICBIYW1tZXIuTWFuYWdlciA9IE1hbmFnZXI7XG4gIEhhbW1lci5JbnB1dCA9IElucHV0O1xuICBIYW1tZXIuVG91Y2hBY3Rpb24gPSBUb3VjaEFjdGlvbjtcbiAgSGFtbWVyLlRvdWNoSW5wdXQgPSBUb3VjaElucHV0O1xuICBIYW1tZXIuTW91c2VJbnB1dCA9IE1vdXNlSW5wdXQ7XG4gIEhhbW1lci5Qb2ludGVyRXZlbnRJbnB1dCA9IFBvaW50ZXJFdmVudElucHV0O1xuICBIYW1tZXIuVG91Y2hNb3VzZUlucHV0ID0gVG91Y2hNb3VzZUlucHV0O1xuICBIYW1tZXIuU2luZ2xlVG91Y2hJbnB1dCA9IFNpbmdsZVRvdWNoSW5wdXQ7XG4gIEhhbW1lci5SZWNvZ25pemVyID0gUmVjb2duaXplcjtcbiAgSGFtbWVyLkF0dHJSZWNvZ25pemVyID0gQXR0clJlY29nbml6ZXI7XG4gIEhhbW1lci5UYXAgPSBUYXBSZWNvZ25pemVyO1xuICBIYW1tZXIuUGFuID0gUGFuUmVjb2duaXplcjtcbiAgSGFtbWVyLlN3aXBlID0gU3dpcGVSZWNvZ25pemVyO1xuICBIYW1tZXIuUGluY2ggPSBQaW5jaFJlY29nbml6ZXI7XG4gIEhhbW1lci5Sb3RhdGUgPSBSb3RhdGVSZWNvZ25pemVyO1xuICBIYW1tZXIuUHJlc3MgPSBQcmVzc1JlY29nbml6ZXI7XG4gIEhhbW1lci5vbiA9IGFkZEV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIub2ZmID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5lYWNoID0gZWFjaDtcbiAgSGFtbWVyLm1lcmdlID0gbWVyZ2U7XG4gIEhhbW1lci5leHRlbmQgPSBleHRlbmQ7XG4gIEhhbW1lci5iaW5kRm4gPSBiaW5kRm47XG4gIEhhbW1lci5hc3NpZ24gPSBhc3NpZ24kMTtcbiAgSGFtbWVyLmluaGVyaXQgPSBpbmhlcml0O1xuICBIYW1tZXIuYmluZEZuID0gYmluZEZuO1xuICBIYW1tZXIucHJlZml4ZWQgPSBwcmVmaXhlZDtcbiAgSGFtbWVyLnRvQXJyYXkgPSB0b0FycmF5O1xuICBIYW1tZXIuaW5BcnJheSA9IGluQXJyYXk7XG4gIEhhbW1lci51bmlxdWVBcnJheSA9IHVuaXF1ZUFycmF5O1xuICBIYW1tZXIuc3BsaXRTdHIgPSBzcGxpdFN0cjtcbiAgSGFtbWVyLmJvb2xPckZuID0gYm9vbE9yRm47XG4gIEhhbW1lci5oYXNQYXJlbnQgPSBoYXNQYXJlbnQ7XG4gIEhhbW1lci5hZGRFdmVudExpc3RlbmVycyA9IGFkZEV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcnMgPSByZW1vdmVFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLmRlZmF1bHRzID0gYXNzaWduJDEoe30sIGRlZmF1bHRzLCB7XG4gICAgcHJlc2V0OiBwcmVzZXRcbiAgfSk7XG4gIHJldHVybiBIYW1tZXI7XG59KCk7XG5cbi8vICBzdHlsZSBsb2FkZXIgYnV0IGJ5IHNjcmlwdCB0YWcsIG5vdCBieSB0aGUgbG9hZGVyLlxuXG52YXIgZGVmYXVsdHMkMSA9IEhhbW1lci5kZWZhdWx0cztcblxuZXhwb3J0IGRlZmF1bHQgSGFtbWVyO1xuZXhwb3J0IHsgSU5QVVRfU1RBUlQsIElOUFVUX01PVkUsIElOUFVUX0VORCwgSU5QVVRfQ0FOQ0VMLCBTVEFURV9QT1NTSUJMRSwgU1RBVEVfQkVHQU4sIFNUQVRFX0NIQU5HRUQsIFNUQVRFX0VOREVELCBTVEFURV9SRUNPR05JWkVELCBTVEFURV9DQU5DRUxMRUQsIFNUQVRFX0ZBSUxFRCwgRElSRUNUSU9OX05PTkUsIERJUkVDVElPTl9MRUZULCBESVJFQ1RJT05fUklHSFQsIERJUkVDVElPTl9VUCwgRElSRUNUSU9OX0RPV04sIERJUkVDVElPTl9IT1JJWk9OVEFMLCBESVJFQ1RJT05fVkVSVElDQUwsIERJUkVDVElPTl9BTEwsIE1hbmFnZXIsIElucHV0LCBUb3VjaEFjdGlvbiwgVG91Y2hJbnB1dCwgTW91c2VJbnB1dCwgUG9pbnRlckV2ZW50SW5wdXQsIFRvdWNoTW91c2VJbnB1dCwgU2luZ2xlVG91Y2hJbnB1dCwgUmVjb2duaXplciwgQXR0clJlY29nbml6ZXIsIFRhcFJlY29nbml6ZXIgYXMgVGFwLCBQYW5SZWNvZ25pemVyIGFzIFBhbiwgU3dpcGVSZWNvZ25pemVyIGFzIFN3aXBlLCBQaW5jaFJlY29nbml6ZXIgYXMgUGluY2gsIFJvdGF0ZVJlY29nbml6ZXIgYXMgUm90YXRlLCBQcmVzc1JlY29nbml6ZXIgYXMgUHJlc3MsIGFkZEV2ZW50TGlzdGVuZXJzIGFzIG9uLCByZW1vdmVFdmVudExpc3RlbmVycyBhcyBvZmYsIGVhY2gsIG1lcmdlLCBleHRlbmQsIGFzc2lnbiQxIGFzIGFzc2lnbiwgaW5oZXJpdCwgYmluZEZuLCBwcmVmaXhlZCwgdG9BcnJheSwgaW5BcnJheSwgdW5pcXVlQXJyYXksIHNwbGl0U3RyLCBib29sT3JGbiwgaGFzUGFyZW50LCBhZGRFdmVudExpc3RlbmVycywgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMsIGRlZmF1bHRzJDEgYXMgZGVmYXVsdHMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhbW1lci5lc20uanMubWFwXG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmlsbCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWxsO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWxsKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZpbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiLyoqXG4gKiB2aXMtdXRpbFxuICogaHR0cHM6Ly9naXRodWIuY29tL3Zpc2pzL3Zpcy11dGlsXG4gKlxuICogdXRpbGl0aWUgY29sbGVjdGlvbiBmb3IgdmlzanNcbiAqXG4gKiBAdmVyc2lvbiA1LjAuNVxuICogQGRhdGUgICAgMjAyMy0xMC0wM1QxODo0Nzo1OC4wNjFaXG4gKlxuICogQGNvcHlyaWdodCAoYykgMjAxMS0yMDE3IEFsbWVuZGUgQi5WLCBodHRwOi8vYWxtZW5kZS5jb21cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTctMjAxOSB2aXNqcyBjb250cmlidXRvcnMsIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqc1xuICpcbiAqIEBsaWNlbnNlXG4gKiB2aXMuanMgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciBib3RoXG4gKlxuICogICAxLiBUaGUgQXBhY2hlIDIuMCBMaWNlbnNlXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICAgYW5kXG4gKlxuICogICAyLiBUaGUgTUlUIExpY2Vuc2VcbiAqICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICpcbiAqIHZpcy5qcyBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IEVtaXR0ZXIgZnJvbSAnY29tcG9uZW50LWVtaXR0ZXInO1xuaW1wb3J0IFJlYWxIYW1tZXIgZnJvbSAnQGVnanMvaGFtbWVyanMnO1xuXG4vKipcclxuICogVXNlIHRoaXMgc3ltYm9sIHRvIGRlbGV0ZSBwcm9wZXJpZXMgaW4gZGVlcE9iamVjdEFzc2lnbi5cclxuICovXHJcbmNvbnN0IERFTEVURSA9IFN5bWJvbChcIkRFTEVURVwiKTtcclxuLyoqXHJcbiAqIFB1cmUgdmVyc2lvbiBvZiBkZWVwT2JqZWN0QXNzaWduLCBpdCBkb2Vzbid0IG1vZGlmeSBhbnkgb2YgaXQncyBhcmd1bWVudHMuXHJcbiAqXHJcbiAqIEBwYXJhbSBiYXNlIC0gVGhlIGJhc2Ugb2JqZWN0IHRoYXQgZnVsbGZpbHMgdGhlIHdob2xlIGludGVyZmFjZSBULlxyXG4gKiBAcGFyYW0gdXBkYXRlcyAtIFVwZGF0ZXMgdGhhdCBtYXkgY2hhbmdlIG9yIGRlbGV0ZSBwcm9wcy5cclxuICogQHJldHVybnMgQSBicmFuZCBuZXcgaW5zdGFuY2Ugd2l0aCBhbGwgdGhlIHN1cHBsaWVkIG9iamVjdHMgZGVlcGx5IG1lcmdlZC5cclxuICovXHJcbmZ1bmN0aW9uIHB1cmVEZWVwT2JqZWN0QXNzaWduKGJhc2UsIC4uLnVwZGF0ZXMpIHtcclxuICAgIHJldHVybiBkZWVwT2JqZWN0QXNzaWduKHt9LCBiYXNlLCAuLi51cGRhdGVzKTtcclxufVxyXG4vKipcclxuICogRGVlcCB2ZXJzaW9uIG9mIG9iamVjdCBhc3NpZ24gd2l0aCBhZGRpdGlvbmFsIGRlbGV0aW5nIGJ5IHRoZSBERUxFVEUgc3ltYm9sLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWVzIC0gT2JqZWN0cyB0byBiZSBkZWVwbHkgbWVyZ2VkLlxyXG4gKiBAcmV0dXJucyBUaGUgZmlyc3Qgb2JqZWN0IGZyb20gdmFsdWVzLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVlcE9iamVjdEFzc2lnbiguLi52YWx1ZXMpIHtcclxuICAgIGNvbnN0IG1lcmdlZCA9IGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSguLi52YWx1ZXMpO1xyXG4gICAgc3RyaXBEZWxldGUobWVyZ2VkKTtcclxuICAgIHJldHVybiBtZXJnZWQ7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgdmVyc2lvbiBvZiBvYmplY3QgYXNzaWduIHdpdGggYWRkaXRpb25hbCBkZWxldGluZyBieSB0aGUgREVMRVRFIHN5bWJvbC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhpcyBkb2Vzbid0IHN0cmlwIHRoZSBERUxFVEUgc3ltYm9scyBzbyB0aGV5IG1heSBlbmQgdXAgaW4gdGhlIGZpbmFsIG9iamVjdC5cclxuICogQHBhcmFtIHZhbHVlcyAtIE9iamVjdHMgdG8gYmUgZGVlcGx5IG1lcmdlZC5cclxuICogQHJldHVybnMgVGhlIGZpcnN0IG9iamVjdCBmcm9tIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSguLi52YWx1ZXMpIHtcclxuICAgIGlmICh2YWx1ZXMubGVuZ3RoIDwgMikge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZXNbMF07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID4gMikge1xyXG4gICAgICAgIHJldHVybiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoZGVlcE9iamVjdEFzc2lnbih2YWx1ZXNbMF0sIHZhbHVlc1sxXSksIC4uLnZhbHVlcy5zbGljZSgyKSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhID0gdmFsdWVzWzBdO1xyXG4gICAgY29uc3QgYiA9IHZhbHVlc1sxXTtcclxuICAgIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgIGEuc2V0VGltZShiLmdldFRpbWUoKSk7XHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgUmVmbGVjdC5vd25LZXlzKGIpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoYiwgcHJvcCkpIDtcclxuICAgICAgICBlbHNlIGlmIChiW3Byb3BdID09PSBERUxFVEUpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGFbcHJvcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgYltwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgYltwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShhW3Byb3BdKSAmJlxyXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KGFbcHJvcF0sIGJbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IGNsb25lKGJbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIGNsb25lIGdpdmVuIG9iamVjdCBvciBhcnJheS4gSW4gY2FzZSBvZiBwcmltaXRpdmUgc2ltcGx5IHJldHVybi5cclxuICpcclxuICogQHBhcmFtIGEgLSBBbnl0aGluZy5cclxuICogQHJldHVybnMgRGVlcCBjbG9uZWQgb2JqZWN0L2FycmF5IG9yIHVuY2hhbmdlZCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gY2xvbmUoYSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcclxuICAgICAgICByZXR1cm4gYS5tYXAoKHZhbHVlKSA9PiBjbG9uZSh2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGEgPT09IFwib2JqZWN0XCIgJiYgYSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChhIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoYS5nZXRUaW1lKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KHt9LCBhKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBTdHJpcCBERUxFVEUgZnJvbSBnaXZlbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gT2JqZWN0IHdoaWNoIG1heSBjb250YWluIERFTEVURSBidXQgd29uJ3QgYWZ0ZXIgdGhpcyBpcyBleGVjdXRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHN0cmlwRGVsZXRlKGEpIHtcclxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhhKSkge1xyXG4gICAgICAgIGlmIChhW3Byb3BdID09PSBERUxFVEUpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGFbcHJvcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBhW3Byb3BdID09PSBcIm9iamVjdFwiICYmIGFbcHJvcF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgc3RyaXBEZWxldGUoYVtwcm9wXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbi8qKlxyXG4gKiBTZWVkYWJsZSwgZmFzdCBhbmQgcmVhc29uYWJseSBnb29kIChub3QgY3J5cHRvIGJ1dCBtb3JlIHRoYW4gb2theSBmb3Igb3VyXHJcbiAqIG5lZWRzKSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci5cclxuICpcclxuICogQHJlbWFya3NcclxuICogQWRhcHRlZCBmcm9tIHtAbGluayBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMTA0MjkxMDA3MzYvaHR0cDovL2JhYWdvZS5jb206ODAvZW4vUmFuZG9tTXVzaW5ncy9qYXZhc2NyaXB0fS5cclxuICogT3JpZ2luYWwgYWxnb3JpdGhtIGNyZWF0ZWQgYnkgSm9oYW5uZXMgQmFhZ8O4ZSBcXDxiYWFnb2VcXEBiYWFnb2UuY29tXFw+IGluIDIwMTAuXHJcbiAqL1xyXG4vKipcclxuICogQ3JlYXRlIGEgc2VlZGVkIHBzZXVkbyByYW5kb20gZ2VuZXJhdG9yIGJhc2VkIG9uIEFsZWEgYnkgSm9oYW5uZXMgQmFhZ8O4ZS5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBBbGwgc3VwcGxpZWQgYXJndW1lbnRzIHdpbGwgYmUgdXNlZCBhcyBhIHNlZWQuIEluIGNhc2Ugbm90aGluZ1xyXG4gKiBpcyBzdXBwbGllZCB0aGUgY3VycmVudCB0aW1lIHdpbGwgYmUgdXNlZCB0byBzZWVkIHRoZSBnZW5lcmF0b3IuXHJcbiAqIEByZXR1cm5zIEEgcmVhZHkgdG8gdXNlIHNlZWRlZCBnZW5lcmF0b3IuXHJcbiAqL1xyXG5mdW5jdGlvbiBBbGVhKC4uLnNlZWQpIHtcclxuICAgIHJldHVybiBBbGVhSW1wbGVtZW50YXRpb24oc2VlZC5sZW5ndGggPyBzZWVkIDogW0RhdGUubm93KCldKTtcclxufVxyXG4vKipcclxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgW1tBbGVhXV0gd2l0aG91dCB1c2VyIGlucHV0IHZhbGlkYXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gVGhlIGRhdGEgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc2VlZCB0aGUgZ2VuZXJhdG9yLlxyXG4gKiBAcmV0dXJucyBBIHJlYWR5IHRvIHVzZSBzZWVkZWQgZ2VuZXJhdG9yLlxyXG4gKi9cclxuZnVuY3Rpb24gQWxlYUltcGxlbWVudGF0aW9uKHNlZWQpIHtcclxuICAgIGxldCBbczAsIHMxLCBzMl0gPSBtYXNoU2VlZChzZWVkKTtcclxuICAgIGxldCBjID0gMTtcclxuICAgIGNvbnN0IHJhbmRvbSA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCB0ID0gMjA5MTYzOSAqIHMwICsgYyAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXHJcbiAgICAgICAgczAgPSBzMTtcclxuICAgICAgICBzMSA9IHMyO1xyXG4gICAgICAgIHJldHVybiAoczIgPSB0IC0gKGMgPSB0IHwgMCkpO1xyXG4gICAgfTtcclxuICAgIHJhbmRvbS51aW50MzIgPSAoKSA9PiByYW5kb20oKSAqIDB4MTAwMDAwMDAwOyAvLyAyXjMyXHJcbiAgICByYW5kb20uZnJhY3Q1MyA9ICgpID0+IHJhbmRvbSgpICsgKChyYW5kb20oKSAqIDB4MjAwMDAwKSB8IDApICogMS4xMTAyMjMwMjQ2MjUxNTY1ZS0xNjsgLy8gMl4tNTNcclxuICAgIHJhbmRvbS5hbGdvcml0aG0gPSBcIkFsZWFcIjtcclxuICAgIHJhbmRvbS5zZWVkID0gc2VlZDtcclxuICAgIHJhbmRvbS52ZXJzaW9uID0gXCIwLjlcIjtcclxuICAgIHJldHVybiByYW5kb207XHJcbn1cclxuLyoqXHJcbiAqIFR1cm4gYXJiaXRyYXJ5IGRhdGEgaW50byB2YWx1ZXMgW1tBbGVhSW1wbGVtZW50YXRpb25dXSBjYW4gdXNlIHRvIGdlbmVyYXRlXHJcbiAqIHJhbmRvbSBudW1iZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIEFyYml0cmFyeSBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWVkLlxyXG4gKiBAcmV0dXJucyBUaHJlZSBudW1iZXJzIHRvIHVzZSBhcyBpbml0aWFsIHZhbHVlcyBmb3IgW1tBbGVhSW1wbGVtZW50YXRpb25dXS5cclxuICovXHJcbmZ1bmN0aW9uIG1hc2hTZWVkKC4uLnNlZWQpIHtcclxuICAgIGNvbnN0IG1hc2ggPSBNYXNoKCk7XHJcbiAgICBsZXQgczAgPSBtYXNoKFwiIFwiKTtcclxuICAgIGxldCBzMSA9IG1hc2goXCIgXCIpO1xyXG4gICAgbGV0IHMyID0gbWFzaChcIiBcIik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZWQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBzMCAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMCA8IDApIHtcclxuICAgICAgICAgICAgczAgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgczEgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczEgPCAwKSB7XHJcbiAgICAgICAgICAgIHMxICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMyIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMyIDwgMCkge1xyXG4gICAgICAgICAgICBzMiArPSAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbczAsIHMxLCBzMl07XHJcbn1cclxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyBtYXNoIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJucyBBIG5vbnB1cmUgZnVuY3Rpb24gdGhhdCB0YWtlcyBhcmJpdHJhcnkgW1tNYXNoYWJsZV1dIGRhdGEgYW5kIHR1cm5zXHJcbiAqIHRoZW0gaW50byBudW1iZXJzLlxyXG4gKi9cclxuZnVuY3Rpb24gTWFzaCgpIHtcclxuICAgIGxldCBuID0gMHhlZmM4MjQ5ZDtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHN0cmluZyA9IGRhdGEudG9TdHJpbmcoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBuICs9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgICAgICBsZXQgaCA9IDAuMDI1MTk2MDMyODI0MTY5MzggKiBuO1xyXG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcclxuICAgICAgICAgICAgaCAtPSBuO1xyXG4gICAgICAgICAgICBoICo9IG47XHJcbiAgICAgICAgICAgIG4gPSBoID4+PiAwO1xyXG4gICAgICAgICAgICBoIC09IG47XHJcbiAgICAgICAgICAgIG4gKz0gaCAqIDB4MTAwMDAwMDAwOyAvLyAyXjMyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAobiA+Pj4gMCkgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxyXG4gICAgfTtcclxufVxuXG4vKipcbiAqIFNldHVwIGEgbW9jayBoYW1tZXIuanMgb2JqZWN0LCBmb3IgdW5pdCB0ZXN0aW5nLlxuICpcbiAqIEluc3BpcmF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20vdWJlci9kZWNrLmdsL3B1bGwvNjU4XG4gKlxuICogQHJldHVybnMge3tvbjogbm9vcCwgb2ZmOiBub29wLCBkZXN0cm95OiBub29wLCBlbWl0OiBub29wLCBnZXQ6IGdldH19XG4gKi9cbmZ1bmN0aW9uIGhhbW1lck1vY2soKSB7XG4gIGNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuICByZXR1cm4ge1xuICAgIG9uOiBub29wLFxuICAgIG9mZjogbm9vcCxcbiAgICBkZXN0cm95OiBub29wLFxuICAgIGVtaXQ6IG5vb3AsXG5cbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXQ6IG5vb3AsXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59XG5cbmNvbnN0IEhhbW1lciQxID1cbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIlxuICAgID8gd2luZG93LkhhbW1lciB8fCBSZWFsSGFtbWVyXG4gICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGhhbW1lci5qcyBpcyBvbmx5IGF2YWlsYWJsZSBpbiBhIGJyb3dzZXIsIG5vdCBpbiBub2RlLmpzLiBSZXBsYWNpbmcgaXQgd2l0aCBhIG1vY2sgb2JqZWN0LlxuICAgICAgICByZXR1cm4gaGFtbWVyTW9jaygpO1xuICAgICAgfTtcblxuLyoqXG4gKiBUdXJuIGFuIGVsZW1lbnQgaW50byBhbiBjbGlja1RvVXNlIGVsZW1lbnQuXG4gKiBXaGVuIG5vdCBhY3RpdmUsIHRoZSBlbGVtZW50IGhhcyBhIHRyYW5zcGFyZW50IG92ZXJsYXkuIFdoZW4gdGhlIG92ZXJsYXkgaXNcbiAqIGNsaWNrZWQsIHRoZSBtb2RlIGlzIGNoYW5nZWQgdG8gYWN0aXZlLlxuICogV2hlbiBhY3RpdmUsIHRoZSBlbGVtZW50IGlzIGRpc3BsYXllZCB3aXRoIGEgYmx1ZSBib3JkZXIgYXJvdW5kIGl0LCBhbmRcbiAqIHRoZSBpbnRlcmFjdGl2ZSBjb250ZW50cyBvZiB0aGUgZWxlbWVudCBjYW4gYmUgdXNlZC4gV2hlbiBjbGlja2VkIG91dHNpZGVcbiAqIHRoZSBlbGVtZW50LCB0aGUgZWxlbWVudHMgbW9kZSBpcyBjaGFuZ2VkIHRvIGluYWN0aXZlLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyXG4gKiBAY2xhc3MgQWN0aXZhdG9yXG4gKi9cbmZ1bmN0aW9uIEFjdGl2YXRvciQxKGNvbnRhaW5lcikge1xuICB0aGlzLl9jbGVhbnVwUXVldWUgPSBbXTtcblxuICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuXG4gIHRoaXMuX2RvbSA9IHtcbiAgICBjb250YWluZXIsXG4gICAgb3ZlcmxheTogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxcbiAgfTtcblxuICB0aGlzLl9kb20ub3ZlcmxheS5jbGFzc0xpc3QuYWRkKFwidmlzLW92ZXJsYXlcIik7XG5cbiAgdGhpcy5fZG9tLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIHRoaXMuX2NsZWFudXBRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICB0aGlzLl9kb20ub3ZlcmxheS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgfSk7XG5cbiAgY29uc3QgaGFtbWVyID0gSGFtbWVyJDEodGhpcy5fZG9tLm92ZXJsYXkpO1xuICBoYW1tZXIub24oXCJ0YXBcIiwgdGhpcy5fb25UYXBPdmVybGF5LmJpbmQodGhpcykpO1xuICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgaGFtbWVyLmRlc3Ryb3koKTtcbiAgICAvLyBGSVhNRTogY2xlYW5pbmcgdXAgaGFtbWVyIGluc3RhbmNlcyBkb2Vzbid0IHdvcmsgKFRpbWVsaW5lIG5vdCByZW1vdmVkXG4gICAgLy8gZnJvbSBtZW1vcnkpXG4gIH0pO1xuXG4gIC8vIGJsb2NrIGFsbCB0b3VjaCBldmVudHMgKGV4Y2VwdCB0YXApXG4gIGNvbnN0IGV2ZW50cyA9IFtcbiAgICBcInRhcFwiLFxuICAgIFwiZG91YmxldGFwXCIsXG4gICAgXCJwcmVzc1wiLFxuICAgIFwicGluY2hcIixcbiAgICBcInBhblwiLFxuICAgIFwicGFuc3RhcnRcIixcbiAgICBcInBhbm1vdmVcIixcbiAgICBcInBhbmVuZFwiLFxuICBdO1xuICBldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICBoYW1tZXIub24oZXZlbnQsIChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuc3JjRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGF0dGFjaCBhIGNsaWNrIGV2ZW50IHRvIHRoZSB3aW5kb3csIGluIG9yZGVyIHRvIGRlYWN0aXZhdGUgd2hlbiBjbGlja2luZyBvdXRzaWRlIHRoZSB0aW1lbGluZVxuICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQuYm9keSkge1xuICAgIHRoaXMuX29uQ2xpY2sgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmICghX2hhc1BhcmVudChldmVudC50YXJnZXQsIGNvbnRhaW5lcikpIHtcbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9vbkNsaWNrKTtcbiAgICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9vbkNsaWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHByZXBhcmUgZXNjYXBlIGtleSBsaXN0ZW5lciBmb3IgZGVhY3RpdmF0aW5nIHdoZW4gYWN0aXZlXG4gIHRoaXMuX2VzY0xpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKFxuICAgICAgXCJrZXlcIiBpbiBldmVudFxuICAgICAgICA/IGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIlxuICAgICAgICA6IGV2ZW50LmtleUNvZGUgPT09IDI3IC8qIHRoZSBrZXlDb2RlIGlzIGZvciBJRTExICovXG4gICAgKSB7XG4gICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgICB9XG4gIH07XG59XG5cbi8vIHR1cm4gaW50byBhbiBldmVudCBlbWl0dGVyXG5FbWl0dGVyKEFjdGl2YXRvciQxLnByb3RvdHlwZSk7XG5cbi8vIFRoZSBjdXJyZW50bHkgYWN0aXZlIGFjdGl2YXRvclxuQWN0aXZhdG9yJDEuY3VycmVudCA9IG51bGw7XG5cbi8qKlxuICogRGVzdHJveSB0aGUgYWN0aXZhdG9yLiBDbGVhbnMgdXAgYWxsIGNyZWF0ZWQgRE9NIGFuZCBldmVudCBsaXN0ZW5lcnNcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZGVhY3RpdmF0ZSgpO1xuXG4gIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgdGhpcy5fY2xlYW51cFF1ZXVlLnNwbGljZSgwKS5yZXZlcnNlKCkpIHtcbiAgICBjYWxsYmFjaygpO1xuICB9XG59O1xuXG4vKipcbiAqIEFjdGl2YXRlIHRoZSBlbGVtZW50XG4gKiBPdmVybGF5IGlzIGhpZGRlbiwgZWxlbWVudCBpcyBkZWNvcmF0ZWQgd2l0aCBhIGJsdWUgc2hhZG93IGJvcmRlclxuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIHdlIGFsbG93IG9ubHkgb25lIGFjdGl2ZSBhY3RpdmF0b3IgYXQgYSB0aW1lXG4gIGlmIChBY3RpdmF0b3IkMS5jdXJyZW50KSB7XG4gICAgQWN0aXZhdG9yJDEuY3VycmVudC5kZWFjdGl2YXRlKCk7XG4gIH1cbiAgQWN0aXZhdG9yJDEuY3VycmVudCA9IHRoaXM7XG5cbiAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICB0aGlzLl9kb20ub3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gIHRoaXMuX2RvbS5jb250YWluZXIuY2xhc3NMaXN0LmFkZChcInZpcy1hY3RpdmVcIik7XG5cbiAgdGhpcy5lbWl0KFwiY2hhbmdlXCIpO1xuICB0aGlzLmVtaXQoXCJhY3RpdmF0ZVwiKTtcblxuICAvLyB1Z2x5IGhhY2s6IGJpbmQgRVNDIGFmdGVyIGVtaXR0aW5nIHRoZSBldmVudHMsIGFzIHRoZSBOZXR3b3JrIHJlYmluZHMgYWxsXG4gIC8vIGtleWJvYXJkIGV2ZW50cyBvbiBhICdjaGFuZ2UnIGV2ZW50XG4gIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5fZXNjTGlzdGVuZXIpO1xufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRlIHRoZSBlbGVtZW50XG4gKiBPdmVybGF5IGlzIGRpc3BsYXllZCBvbiB0b3Agb2YgdGhlIGVsZW1lbnRcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gIHRoaXMuX2RvbS5vdmVybGF5LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gIHRoaXMuX2RvbS5jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcInZpcy1hY3RpdmVcIik7XG4gIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5fZXNjTGlzdGVuZXIpO1xuXG4gIHRoaXMuZW1pdChcImNoYW5nZVwiKTtcbiAgdGhpcy5lbWl0KFwiZGVhY3RpdmF0ZVwiKTtcbn07XG5cbi8qKlxuICogSGFuZGxlIGEgdGFwIGV2ZW50OiBhY3RpdmF0ZSB0aGUgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuX29uVGFwT3ZlcmxheSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAvLyBhY3RpdmF0ZSB0aGUgY29udGFpbmVyXG4gIHRoaXMuYWN0aXZhdGUoKTtcbiAgZXZlbnQuc3JjRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59O1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgZWxlbWVudCBoYXMgdGhlIHJlcXVlc3RlZCBwYXJlbnQgZWxlbWVudCBzb21ld2hlcmUgaW5cbiAqIGl0cyBjaGFpbiBvZiBwYXJlbnQgbm9kZXMuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHBhcmVudCBpcyBmb3VuZCBzb21ld2hlcmUgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgY2hhaW4gb2YgcGFyZW50IG5vZGVzLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2hhc1BhcmVudChlbGVtZW50LCBwYXJlbnQpIHtcbiAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudCA9PT0gcGFyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIHV0aWxpdHkgZnVuY3Rpb25zXHJcbi8vIHBhcnNlIEFTUC5OZXQgRGF0ZSBwYXR0ZXJuLFxyXG4vLyBmb3IgZXhhbXBsZSAnL0RhdGUoMTE5ODkwODcxNzA1NikvJyBvciAnL0RhdGUoMTE5ODkwODcxNzA1Ni0wNzAwKS8nXHJcbi8vIGNvZGUgZnJvbSBodHRwOi8vbW9tZW50anMuY29tL1xyXG5jb25zdCBBU1BEYXRlUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaTtcclxuLy8gQ29sb3IgUkVzXHJcbmNvbnN0IGZ1bGxIZXhSRSA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2k7XHJcbmNvbnN0IHNob3J0SGV4UkUgPSAvXiM/KFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pJC9pO1xyXG5jb25zdCByZ2JSRSA9IC9ecmdiXFwoICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICpcXCkkL2k7XHJcbmNvbnN0IHJnYmFSRSA9IC9ecmdiYVxcKCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKFswMV18MD9cXC5cXGQrKSAqXFwpJC9pO1xyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIG51bWJlci5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIG51bWJlciwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE51bWJlciB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBldmVyeXRoaW5nIGluIHRoZSBET00gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gRE9Nb2JqZWN0IC0gTm9kZSB3aG9zZSBjaGlsZCBub2RlcyB3aWxsIGJlIHJlY3Vyc2l2ZWx5IGRlbGV0ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiByZWN1cnNpdmVET01EZWxldGUoRE9Nb2JqZWN0KSB7XHJcbiAgICBpZiAoRE9Nb2JqZWN0KSB7XHJcbiAgICAgICAgd2hpbGUgKERPTW9iamVjdC5oYXNDaGlsZE5vZGVzKCkgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBET01vYmplY3QuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgaWYgKGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVET01EZWxldGUoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgRE9Nb2JqZWN0LnJlbW92ZUNoaWxkKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHN0cmluZywgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBvYmplY3QgKG5vdCBwcmltaXRpdmUgb3IgbnVsbCkuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBub3QgbnVsbCBvYmplY3QsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgRGF0ZSwgb3IgYSBTdHJpbmcgY29udGFpbmluZyBhIERhdGUuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBEYXRlIGluc3RhbmNlIG9yIHN0cmluZyBkYXRlIHJlcHJlc2VudGF0aW9uLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgIC8vIHRlc3Qgd2hldGhlciB0aGlzIHN0cmluZyBjb250YWlucyBhIGRhdGVcclxuICAgICAgICBjb25zdCBtYXRjaCA9IEFTUERhdGVSZWdleC5leGVjKHZhbHVlKTtcclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFpc05hTihEYXRlLnBhcnNlKHZhbHVlKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbi8qKlxyXG4gKiBDb3B5IHByb3BlcnR5IGZyb20gYiB0byBhIGlmIHByb3BlcnR5IHByZXNlbnQgaW4gYS5cclxuICogSWYgcHJvcGVydHkgaW4gYiBleHBsaWNpdGx5IHNldCB0byBudWxsLCBkZWxldGUgaXQgaWYgYGFsbG93RGVsZXRpb25gIHNldC5cclxuICpcclxuICogSW50ZXJuYWwgaGVscGVyIHJvdXRpbmUsIHNob3VsZCBub3QgYmUgZXhwb3J0ZWQuIE5vdCBhZGRlZCB0byBgZXhwb3J0c2AgZm9yIHRoYXQgcmVhc29uLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRhcmdldCBvYmplY3QuXHJcbiAqIEBwYXJhbSBiIC0gU291cmNlIG9iamVjdC5cclxuICogQHBhcmFtIHByb3AgLSBOYW1lIG9mIHByb3BlcnR5IHRvIGNvcHkgZnJvbSBiIHRvIGEuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnR5IGluIGEgaWYgZXhwbGljaXRseSBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pIHtcclxuICAgIGxldCBkb0RlbGV0aW9uID0gZmFsc2U7XHJcbiAgICBpZiAoYWxsb3dEZWxldGlvbiA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGRvRGVsZXRpb24gPSBiW3Byb3BdID09PSBudWxsICYmIGFbcHJvcF0gIT09IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGlmIChkb0RlbGV0aW9uKSB7XHJcbiAgICAgICAgZGVsZXRlIGFbcHJvcF07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBhW3Byb3BdID0gYltwcm9wXTsgLy8gUmVtZW1iZXIsIHRoaXMgaXMgYSByZWZlcmVuY2UgY29weSFcclxuICAgIH1cclxufVxyXG4vKipcclxuICogRmlsbCBhbiBvYmplY3Qgd2l0aCBhIHBvc3NpYmx5IHBhcnRpYWxseSBkZWZpbmVkIG90aGVyIG9iamVjdC5cclxuICpcclxuICogT25seSBjb3BpZXMgdmFsdWVzIGZvciB0aGUgcHJvcGVydGllcyBhbHJlYWR5IHByZXNlbnQgaW4gYS5cclxuICogVGhhdCBtZWFucyBhbiBvYmplY3QgaXMgbm90IGNyZWF0ZWQgb24gYSBwcm9wZXJ0eSBpZiBvbmx5IHRoZSBiIG9iamVjdCBoYXMgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIG9iamVjdCB0aGF0IHdpbGwgaGF2ZSBpdCdzIHByb3BlcnRpZXMgdXBkYXRlZC5cclxuICogQHBhcmFtIGIgLSBUaGUgb2JqZWN0IHdpdGggcHJvcGVydHkgdXBkYXRlcy5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydGllcyBpbiBhIHRoYXQgYXJlIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICovXHJcbmZ1bmN0aW9uIGZpbGxJZkRlZmluZWQoYSwgYiwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICAvLyBOT1RFOiBpdGVyYXRpb24gb2YgcHJvcGVydGllcyBvZiBhXHJcbiAgICAvLyBOT1RFOiBwcm90b3R5cGUgcHJvcGVydGllcyBpdGVyYXRlZCBvdmVyIGFzIHdlbGxcclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBhKSB7XHJcbiAgICAgICAgaWYgKGJbcHJvcF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAoYltwcm9wXSA9PT0gbnVsbCB8fCB0eXBlb2YgYltwcm9wXSAhPT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gTm90ZTogdHlwZW9mIG51bGwgPT09ICdvYmplY3QnXHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhUHJvcCA9IGFbcHJvcF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBiUHJvcCA9IGJbcHJvcF07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QoYVByb3ApICYmIGlzT2JqZWN0KGJQcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGxJZkRlZmluZWQoYVByb3AsIGJQcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIG9mIGFsbCBvZiB0aGUgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGFcclxuICogdGFyZ2V0IG9iamVjdC4gUmV0dXJucyB0aGUgdGFyZ2V0IG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIGNvcHkgdG8uXHJcbiAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCBmcm9tIHdoaWNoIHRvIGNvcHkgcHJvcGVydGllcy5cclxuICogQHJldHVybnMgVGhlIHRhcmdldCBvYmplY3QuXHJcbiAqL1xyXG5jb25zdCBleHRlbmQgPSBPYmplY3QuYXNzaWduO1xyXG4vKipcclxuICogRXh0ZW5kIG9iamVjdCBhIHdpdGggc2VsZWN0ZWQgcHJvcGVydGllcyBvZiBvYmplY3QgYiBvciBhIHNlcmllcyBvZiBvYmplY3RzLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKiBAcGFyYW0gcHJvcHMgLSBQcm9wZXJ0aWVzIHRvIGJlIGNvcGllZCB0byBhLlxyXG4gKiBAcGFyYW0gYSAtIFRoZSB0YXJnZXQuXHJcbiAqIEBwYXJhbSBvdGhlcnMgLSBUaGUgc291cmNlcy5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZUV4dGVuZChwcm9wcywgYSwgLi4ub3RoZXJzKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcHMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXJyYXkgd2l0aCBwcm9wZXJ0eSBuYW1lcyBleHBlY3RlZCBhcyBmaXJzdCBhcmd1bWVudFwiKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgb3RoZXIgb2Ygb3RoZXJzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBwcm9wcy5sZW5ndGg7IHArKykge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbcF07XHJcbiAgICAgICAgICAgIGlmIChvdGhlciAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdID0gb3RoZXJbcHJvcF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRXh0ZW5kIG9iamVjdCBhIHdpdGggc2VsZWN0ZWQgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cclxuICogT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZCB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogUHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIHJvdXRpbmUgaW1wbGllZCB0aGF0IG11bHRpcGxlIHNvdXJjZSBvYmplY3RzIGNvdWxkXHJcbiAqIGJlIHVzZWQ7IGhvd2V2ZXIsIHRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgKip3cm9uZyoqLiBTaW5jZSBtdWx0aXBsZSAoXFw+MSlcclxuICogc291cmNlcyB3ZXJlbid0IHVzZWQgYW55d2hlcmUgaW4gdGhlIGB2aXMuanNgIGNvZGUsIHRoaXMgaGFzIGJlZW4gcmVtb3ZlZFxyXG4gKiBAcGFyYW0gcHJvcHMgLSBOYW1lcyBvZiBmaXJzdC1sZXZlbCBwcm9wZXJ0aWVzIHRvIGNvcHkgb3Zlci5cclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnR5IGluIGEgaWYgZXhwbGljaXRseSBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlRGVlcEV4dGVuZChwcm9wcywgYSwgYiwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgQXJyYXlzIHRvIGRlZXBFeHRlbmRcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgcCA9IDA7IHAgPCBwcm9wcy5sZW5ndGg7IHArKykge1xyXG4gICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1twXTtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHByb3ApKSB7XHJcbiAgICAgICAgICAgIGlmIChiW3Byb3BdICYmIGJbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFbcHJvcF0gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0sIGZhbHNlLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRXh0ZW5kIG9iamVjdCBgYWAgd2l0aCBwcm9wZXJ0aWVzIG9mIG9iamVjdCBgYmAsIGlnbm9yaW5nIHByb3BlcnRpZXMgd2hpY2hcclxuICogYXJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHRvIGJlIGV4Y2x1ZGVkLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBUaGUgcHJvcGVydGllcyBvZiBgYmAgYXJlIGNvbnNpZGVyZWQgZm9yIGNvcHlpbmcuIFByb3BlcnRpZXMgd2hpY2ggYXJlXHJcbiAqIHRoZW1zZWx2ZXMgb2JqZWN0cyBhcmUgYXJlIGFsc28gZXh0ZW5kZWQuIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWRcclxuICogdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBwcm9wc1RvRXhjbHVkZSAtIE5hbWVzIG9mIHByb3BlcnRpZXMgd2hpY2ggc2hvdWxkICpub3QqIGJlIGNvcGllZC5cclxuICogQHBhcmFtIGEgLSBPYmplY3QgdG8gZXh0ZW5kLlxyXG4gKiBAcGFyYW0gYiAtIE9iamVjdCB0byB0YWtlIHByb3BlcnRpZXMgZnJvbSBmb3IgZXh0ZW5zaW9uLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0aWVzIGluIGEgdGhhdCBhcmUgZXhwbGljaXRseVxyXG4gKiBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlTm90RGVlcEV4dGVuZChwcm9wc1RvRXhjbHVkZSwgYSwgYiwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgQXJyYXlzIHRvIGRlZXBFeHRlbmRcclxuICAgIC8vIE5PVEU6IGFycmF5IHByb3BlcnRpZXMgaGF2ZSBhbiBlbHNlLWJlbG93OyBhcHBhcmVudGx5LCB0aGVyZSBpcyBhIHByb2JsZW0gaGVyZS5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwcm9wIGluIGIpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9IC8vIEhhbmRsZSBsb2NhbCBwcm9wZXJ0aWVzIG9ubHlcclxuICAgICAgICBpZiAocHJvcHNUb0V4Y2x1ZGUuaW5jbHVkZXMocHJvcCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSAvLyBJbiBleGNsdXNpb24gbGlzdCwgc2tpcFxyXG4gICAgICAgIGlmIChiW3Byb3BdICYmIGJbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoYVtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGFbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdKTsgLy8gTk9URTogYWxsb3dEZWxldGlvbiBub3QgcHJvcGFnYXRlZCFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiW3Byb3BdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdLnB1c2goYltwcm9wXVtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRGVlcCBleHRlbmQgYW4gb2JqZWN0IGEgd2l0aCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cclxuICpcclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBwcm90b0V4dGVuZCAtIElmIHRydWUsIHRoZSBwcm90b3R5cGUgdmFsdWVzIHdpbGwgYWxzbyBiZSBleHRlbmRlZC5cclxuICogKFRoYXQgaXMgdGhlIG9wdGlvbnMgb2JqZWN0cyB0aGF0IGluaGVyaXQgZnJvbSBvdGhlcnMgd2lsbCBhbHNvIGdldCB0aGVcclxuICogaW5oZXJpdGVkIG9wdGlvbnMpLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIHRoZSB2YWx1ZXMgb2YgZmllbGRzIHRoYXQgYXJlIG51bGwgd2lsbCBiZSBkZWxldGVkLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVlcEV4dGVuZChhLCBiLCBwcm90b0V4dGVuZCA9IGZhbHNlLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBiKSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSB8fCBwcm90b0V4dGVuZCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGJbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgICAgIGJbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihiW3Byb3BdKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFbcHJvcF0gPSBkZWVwRXh0ZW5kKHt9LCBiW3Byb3BdLCBwcm90b0V4dGVuZCk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGFbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYVtwcm9wXSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0sIHByb3RvRXh0ZW5kKTsgLy8gTk9URTogYWxsb3dEZWxldGlvbiBub3QgcHJvcGFnYXRlZCFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdID0gYltwcm9wXS5zbGljZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBhbGwgZWxlbWVudHMgaW4gdHdvIGFycmF5cyBhcmUgZXF1YWwuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gRmlyc3QgYXJyYXkuXHJcbiAqIEBwYXJhbSBiIC0gU2Vjb25kIGFycmF5LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIGJvdGggYXJyYXlzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzYW1lIGVsZW1lbnRzICgxID0gJzEnKS5cclxuICovXHJcbmZ1bmN0aW9uIGVxdWFsQXJyYXkoYSwgYikge1xyXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuLyoqXHJcbiAqIEdldCB0aGUgdHlwZSBvZiBhbiBvYmplY3QsIGZvciBleGFtcGxlIGV4cG9ydHMuZ2V0VHlwZShbXSkgcmV0dXJucyAnQXJyYXknLlxyXG4gKlxyXG4gKiBAcGFyYW0gb2JqZWN0IC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBEZXRlY3RlZCB0eXBlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0VHlwZShvYmplY3QpIHtcclxuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xyXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiQm9vbGVhblwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIk51bWJlclwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlN0cmluZ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkFycmF5XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkRhdGVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiT2JqZWN0XCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIHJldHVybiBcIk51bWJlclwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiQm9vbGVhblwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJTdHJpbmdcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcclxuICAgIH1cclxuICAgIHJldHVybiB0eXBlO1xyXG59XHJcbi8qKlxyXG4gKiBVc2VkIHRvIGV4dGVuZCBhbiBhcnJheSBhbmQgY29weSBpdC4gVGhpcyBpcyB1c2VkIHRvIHByb3BhZ2F0ZSBwYXRocyByZWN1cnNpdmVseS5cclxuICpcclxuICogQHBhcmFtIGFyciAtIEZpcnN0IHBhcnQuXHJcbiAqIEBwYXJhbSBuZXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBhYWRkZWQgaW50byB0aGUgYXJyYXkuXHJcbiAqIEByZXR1cm5zIEEgbmV3IGFycmF5IHdpdGggYWxsIGl0ZW1zIGZyb20gYXJyIGFuZCBuZXdWYWx1ZSAod2hpY2ggaXMgbGFzdCkuXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3B5QW5kRXh0ZW5kQXJyYXkoYXJyLCBuZXdWYWx1ZSkge1xyXG4gICAgcmV0dXJuIFsuLi5hcnIsIG5ld1ZhbHVlXTtcclxufVxyXG4vKipcclxuICogVXNlZCB0byBleHRlbmQgYW4gYXJyYXkgYW5kIGNvcHkgaXQuIFRoaXMgaXMgdXNlZCB0byBwcm9wYWdhdGUgcGF0aHMgcmVjdXJzaXZlbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcnIgLSBUaGUgYXJyYXkgdG8gYmUgY29waWVkLlxyXG4gKiBAcmV0dXJucyBTaGFsbG93IGNvcHkgb2YgYXJyLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weUFycmF5KGFycikge1xyXG4gICAgcmV0dXJuIGFyci5zbGljZSgpO1xyXG59XHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgYWJzb2x1dGUgbGVmdCB2YWx1ZSBvZiBhIERPTSBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIEEgZG9tIGVsZW1lbnQsIGZvciBleGFtcGxlIGEgZGl2LlxyXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgbGVmdCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlTGVmdChlbGVtKSB7XHJcbiAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xyXG59XHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgYWJzb2x1dGUgcmlnaHQgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHJpZ2h0IHBvc2l0aW9uIG9mIHRoaXMgZWxlbWVudCBpbiB0aGUgYnJvd3NlciBwYWdlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWJzb2x1dGVSaWdodChlbGVtKSB7XHJcbiAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIHRvcCB2YWx1ZSBvZiBhIERPTSBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIEEgZG9tIGVsZW1lbnQsIGZvciBleGFtcGxlIGEgZGl2LlxyXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgdG9wIHBvc2l0aW9uIG9mIHRoaXMgZWxlbWVudCBpbiB0aGUgYnJvd3NlciBwYWdlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWJzb2x1dGVUb3AoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xyXG59XHJcbi8qKlxyXG4gKiBBZGQgYSBjbGFzc05hbWUgdG8gdGhlIGdpdmVuIGVsZW1lbnRzIHN0eWxlLlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIFRoZSBlbGVtZW50IHRvIHdoaWNoIHRoZSBjbGFzc2VzIHdpbGwgYmUgYWRkZWQuXHJcbiAqIEBwYXJhbSBjbGFzc05hbWVzIC0gU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy5cclxuICovXHJcbmZ1bmN0aW9uIGFkZENsYXNzTmFtZShlbGVtLCBjbGFzc05hbWVzKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9IGVsZW0uY2xhc3NOYW1lLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IG5ld0NsYXNzZXMgPSBjbGFzc05hbWVzLnNwbGl0KFwiIFwiKTtcclxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLmNvbmNhdChuZXdDbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICFjbGFzc2VzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XHJcbiAgICB9KSk7XHJcbiAgICBlbGVtLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbihcIiBcIik7XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBhIGNsYXNzTmFtZSBmcm9tIHRoZSBnaXZlbiBlbGVtZW50cyBzdHlsZS5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCBmcm9tIHdoaWNoIHRoZSBjbGFzc2VzIHdpbGwgYmUgcmVtb3ZlZC5cclxuICogQHBhcmFtIGNsYXNzTmFtZXMgLSBTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc2VzLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ2xhc3NOYW1lKGVsZW0sIGNsYXNzTmFtZXMpIHtcclxuICAgIGxldCBjbGFzc2VzID0gZWxlbS5jbGFzc05hbWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgY29uc3Qgb2xkQ2xhc3NlcyA9IGNsYXNzTmFtZXMuc3BsaXQoXCIgXCIpO1xyXG4gICAgY2xhc3NlcyA9IGNsYXNzZXMuZmlsdGVyKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcclxuICAgICAgICByZXR1cm4gIW9sZENsYXNzZXMuaW5jbHVkZXMoY2xhc3NOYW1lKTtcclxuICAgIH0pO1xyXG4gICAgZWxlbS5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oXCIgXCIpO1xyXG59XHJcbi8qKlxyXG4gKiBGb3IgZWFjaCBtZXRob2QgZm9yIGJvdGggYXJyYXlzIGFuZCBvYmplY3RzLlxyXG4gKiBJbiBjYXNlIG9mIGFuIGFycmF5LCB0aGUgYnVpbHQtaW4gQXJyYXkuZm9yRWFjaCgpIGlzIGFwcGxpZWQgKCoqTm8sIGl0J3Mgbm90ISoqKS5cclxuICogSW4gY2FzZSBvZiBhbiBPYmplY3QsIHRoZSBtZXRob2QgbG9vcHMgb3ZlciBhbGwgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gb2JqZWN0IC0gQW4gT2JqZWN0IG9yIEFycmF5IHRvIGJlIGl0ZXJhdGVkIG92ZXIuXHJcbiAqIEBwYXJhbSBjYWxsYmFjayAtIEFycmF5LmZvckVhY2gtbGlrZSBjYWxsYmFjay5cclxuICovXHJcbmZ1bmN0aW9uIGZvckVhY2gob2JqZWN0LCBjYWxsYmFjaykge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xyXG4gICAgICAgIC8vIGFycmF5XHJcbiAgICAgICAgY29uc3QgbGVuID0gb2JqZWN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG9iamVjdFtpXSwgaSwgb2JqZWN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBvYmplY3RcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgYW4gb2JqZWN0IGludG8gYW4gYXJyYXk6IGFsbCBvYmplY3RzIHByb3BlcnRpZXMgYXJlIHB1dCBpbnRvIHRoZSBhcnJheS4gVGhlIHJlc3VsdGluZyBhcnJheSBpcyB1bm9yZGVyZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSBvIC0gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuXHJcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHVub3JkZXJlZCB2YWx1ZXMuXHJcbiAqL1xyXG5jb25zdCB0b0FycmF5ID0gT2JqZWN0LnZhbHVlcztcclxuLyoqXHJcbiAqIFVwZGF0ZSBhIHByb3BlcnR5IGluIGFuIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIFRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydHkgd2lsbCBiZSB1cGRhdGVkLlxyXG4gKiBAcGFyYW0ga2V5IC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIHZhbHVlIC0gVGhlIG5ldyB2YWx1ZSB0byBiZSBhc3NpZ25lZC5cclxuICogQHJldHVybnMgV2hldGhlciB0aGUgdmFsdWUgd2FzIHVwZGF0ZWQgKHRydWUpIG9yIGFscmVhZHkgc3RyaWN0bHkgdGhlIHNhbWUgaW4gdGhlIG9yaWdpbmFsIG9iamVjdCAoZmFsc2UpLlxyXG4gKi9cclxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydHkob2JqZWN0LCBrZXksIHZhbHVlKSB7XHJcbiAgICBpZiAob2JqZWN0W2tleV0gIT09IHZhbHVlKSB7XHJcbiAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhyb3R0bGUgdGhlIGdpdmVuIGZ1bmN0aW9uIHRvIGJlIG9ubHkgZXhlY3V0ZWQgb25jZSBwZXIgYW5pbWF0aW9uIGZyYW1lLlxyXG4gKlxyXG4gKiBAcGFyYW0gZm4gLSBUaGUgb3JpZ2luYWwgZnVuY3Rpb24uXHJcbiAqIEByZXR1cm5zIFRoZSB0aHJvdHRsZWQgZnVuY3Rpb24uXHJcbiAqL1xyXG5mdW5jdGlvbiB0aHJvdHRsZShmbikge1xyXG4gICAgbGV0IHNjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICBpZiAoIXNjaGVkdWxlZCkge1xyXG4gICAgICAgICAgICBzY2hlZHVsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmbigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbi8qKlxyXG4gKiBBZGQgYW5kIGV2ZW50IGxpc3RlbmVyLiBXb3JrcyBmb3IgYWxsIGJyb3dzZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGJpbmQgdGhlIGV2ZW50IGxpc3RlbmVyIHRvLlxyXG4gKiBAcGFyYW0gYWN0aW9uIC0gU2FtZSBhcyBFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYWN0aW9uLCDigJQsIOKAlCkuXHJcbiAqIEBwYXJhbSBsaXN0ZW5lciAtIFNhbWUgYXMgRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKOKAlCwgbGlzdGVuZXIsIOKAlCkuXHJcbiAqIEBwYXJhbSB1c2VDYXB0dXJlIC0gU2FtZSBhcyBFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo4oCULCDigJQsIHVzZUNhcHR1cmUpLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihlbGVtZW50LCBhY3Rpb24sIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSB7XHJcbiAgICBpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKSB7XHJcbiAgICAgICAgaWYgKHVzZUNhcHR1cmUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB1c2VDYXB0dXJlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhY3Rpb24gPT09IFwibW91c2V3aGVlbFwiICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoXCJGaXJlZm94XCIpKSB7XHJcbiAgICAgICAgICAgIGFjdGlvbiA9IFwiRE9NTW91c2VTY3JvbGxcIjsgLy8gRm9yIEZpcmVmb3hcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGFjdGlvbiwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoXCJvblwiICsgYWN0aW9uLCBsaXN0ZW5lcik7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBhbiBldmVudCBsaXN0ZW5lciBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gYmluZCB0aGUgZXZlbnQgbGlzdGVuZXIgdG8uXHJcbiAqIEBwYXJhbSBhY3Rpb24gLSBTYW1lIGFzIEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhY3Rpb24sIOKAlCwg4oCUKS5cclxuICogQHBhcmFtIGxpc3RlbmVyIC0gU2FtZSBhcyBFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIo4oCULCBsaXN0ZW5lciwg4oCUKS5cclxuICogQHBhcmFtIHVzZUNhcHR1cmUgLSBTYW1lIGFzIEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcijigJQsIOKAlCwgdXNlQ2FwdHVyZSkuXHJcbiAqL1xyXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKGVsZW1lbnQsIGFjdGlvbiwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpIHtcclxuICAgIGlmIChlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcclxuICAgICAgICAvLyBub24tSUUgYnJvd3NlcnNcclxuICAgICAgICBpZiAodXNlQ2FwdHVyZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHVzZUNhcHR1cmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJtb3VzZXdoZWVsXCIgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmNsdWRlcyhcIkZpcmVmb3hcIikpIHtcclxuICAgICAgICAgICAgYWN0aW9uID0gXCJET01Nb3VzZVNjcm9sbFwiOyAvLyBGb3IgRmlyZWZveFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYWN0aW9uLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBAVE9ETzogSUUgdHlwZXM/IERvZXMgYW55b25lIGNhcmU/XHJcbiAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudChcIm9uXCIgKyBhY3Rpb24sIGxpc3RlbmVyKTsgLy8gSUUgYnJvd3NlcnNcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ2FuY2VscyB0aGUgZXZlbnQncyBkZWZhdWx0IGFjdGlvbiBpZiBpdCBpcyBjYW5jZWxhYmxlLCB3aXRob3V0IHN0b3BwaW5nIGZ1cnRoZXIgcHJvcGFnYXRpb24gb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgd2hvc2UgZGVmYXVsdCBhY3Rpb24gc2hvdWxkIGJlIHByZXZlbnRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7XHJcbiAgICB9XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIG5vbi1JRSBicm93c2Vyc1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEdldCBIVE1MIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudC5cclxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgb3IgbnVsbCBpZiBub3Qgb2J0YWluYWJsZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFRhcmdldChldmVudCA9IHdpbmRvdy5ldmVudCkge1xyXG4gICAgLy8gY29kZSBmcm9tIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxyXG4gICAgLy8gQFRPRE86IEV2ZW50VGFyZ2V0IGNhbiBiZSBhbG1vc3QgYW55dGhpbmcsIGlzIGl0IG9rYXkgdG8gcmV0dXJuIG9ubHkgRWxlbWVudHM/XHJcbiAgICBsZXQgdGFyZ2V0ID0gbnVsbDtcclxuICAgIGlmICghZXZlbnQpIDtcclxuICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LnNyY0VsZW1lbnQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC5zcmNFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQubm9kZVR5cGUgIT0gbnVsbCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykge1xyXG4gICAgICAgIC8vIGRlZmVhdCBTYWZhcmkgYnVnXHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG4vKipcclxuICogQ2hlY2sgaWYgZ2l2ZW4gZWxlbWVudCBjb250YWlucyBnaXZlbiBwYXJlbnQgc29tZXdoZXJlIGluIHRoZSBET00gdHJlZS5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiZSB0ZXN0ZWQuXHJcbiAqIEBwYXJhbSBwYXJlbnQgLSBUaGUgYW5jZXN0b3IgKG5vdCBuZWNlc3NhcmlseSBwYXJlbnQpIG9mIHRoZSBlbGVtZW50LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHBhcmVudCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgZWxlbWVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xyXG4gICAgbGV0IGVsZW0gPSBlbGVtZW50O1xyXG4gICAgd2hpbGUgKGVsZW0pIHtcclxuICAgICAgICBpZiAoZWxlbSA9PT0gcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgZWxlbSA9IGVsZW0ucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9ib29sZWFuLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nIGJvb2xlYW4gdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzQm9vbGVhbih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgbnVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvbnVtYmVyLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nICoqYm94ZWQqKiBudW1iZXIgdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzTnVtYmVyKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIHN0cmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3N0cmluZywgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogc3RyaW5nIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1N0cmluZyh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvc2l6ZSwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUgKG51bWJlciArICdweCcpLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1NpemUodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBET00gRWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50byBET00gRWxlbWVudCwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIERPTSBFbGVtZW50LCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0VsZW1lbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxufTtcclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MjM4MzgvcmdiLXRvLWhleC1hbmQtaGV4LXRvLXJnYn1cclxuICogQHBhcmFtIGhleCAtIEhleCBjb2xvciBzdHJpbmcgKDMgb3IgNiBkaWdpdHMsIHdpdGggb3Igd2l0aG91dCAjKS5cclxuICogQHJldHVybnMgUkdCIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvUkdCKGhleCkge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIHN3aXRjaCAoaGV4Lmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHNob3J0SGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0gKyByZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0gKyByZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10gKyByZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBmdWxsSGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBzdHJpbmcgY29sb3IgaW4gaGV4IG9yIFJHQiBmb3JtYXQgYW5kIGFkZHMgdGhlIG9wYWNpdHksIFJHQkEgaXMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLlxyXG4gKlxyXG4gKiBAcGFyYW0gY29sb3IgLSBUaGUgY29sb3Igc3RyaW5nIChoZXgsIFJHQiwgUkdCQSkuXHJcbiAqIEBwYXJhbSBvcGFjaXR5IC0gVGhlIG5ldyBvcGFjaXR5LlxyXG4gKiBAcmV0dXJucyBSR0JBIHN0cmluZywgZm9yIGV4YW1wbGUgJ3JnYmEoMjU1LCAwLCAxMjcsIDAuMyknLlxyXG4gKi9cclxuZnVuY3Rpb24gb3ZlcnJpZGVPcGFjaXR5KGNvbG9yLCBvcGFjaXR5KSB7XHJcbiAgICBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JhXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JcIikpIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBjb2xvclxyXG4gICAgICAgICAgICAuc3Vic3RyKGNvbG9yLmluZGV4T2YoXCIoXCIpICsgMSlcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgICAgIC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYlswXSArIFwiLFwiICsgcmdiWzFdICsgXCIsXCIgKyByZ2JbMl0gKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJnYiA9IGhleFRvUkdCKGNvbG9yKTtcclxuICAgICAgICBpZiAocmdiID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYi5yICsgXCIsXCIgKyByZ2IuZyArIFwiLFwiICsgcmdiLmIgKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcgKGZvciBleGFtcGxlOiAnIzBhY2RjMCcpLlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IZXgocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmV0dXJuIChcIiNcIiArICgoMSA8PCAyNCkgKyAocmVkIDw8IDE2KSArIChncmVlbiA8PCA4KSArIGJsdWUpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XHJcbn1cclxuLyoqXHJcbiAqIFBhcnNlIGEgY29sb3IgcHJvcGVydHkgaW50byBhbiBvYmplY3Qgd2l0aCBib3JkZXIsIGJhY2tncm91bmQsIGFuZCBoaWdobGlnaHQgY29sb3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5wdXRDb2xvciAtIFNob3J0aGFuZCBjb2xvciBzdHJpbmcgb3IgaW5wdXQgY29sb3Igb2JqZWN0LlxyXG4gKiBAcGFyYW0gZGVmYXVsdENvbG9yIC0gRnVsbCBjb2xvciBvYmplY3QgdG8gZmlsbCBpbiBtaXNzaW5nIHZhbHVlcyBpbiBpbnB1dENvbG9yLlxyXG4gKiBAcmV0dXJucyBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0Q29sb3IsIGRlZmF1bHRDb2xvcikge1xyXG4gICAgaWYgKGlzU3RyaW5nKGlucHV0Q29sb3IpKSB7XHJcbiAgICAgICAgbGV0IGNvbG9yU3RyID0gaW5wdXRDb2xvcjtcclxuICAgICAgICBpZiAoaXNWYWxpZFJHQihjb2xvclN0cikpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiID0gY29sb3JTdHJcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoNClcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3JTdHIubGVuZ3RoIC0gNSlcclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIixcIilcclxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29sb3JTdHIgPSBSR0JUb0hleChyZ2JbMF0sIHJnYlsxXSwgcmdiWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVmFsaWRIZXgoY29sb3JTdHIpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzdiA9IGhleFRvSFNWKGNvbG9yU3RyKTtcclxuICAgICAgICAgICAgY29uc3QgbGlnaHRlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBoc3YucyAqIDAuOCxcclxuICAgICAgICAgICAgICAgIHY6IE1hdGgubWluKDEsIGhzdi52ICogMS4wMiksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBNYXRoLm1pbigxLCBoc3YucyAqIDEuMjUpLFxyXG4gICAgICAgICAgICAgICAgdjogaHN2LnYgKiAwLjgsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySGV4ID0gSFNWVG9IZXgoZGFya2VyQ29sb3JIU1YuaCwgZGFya2VyQ29sb3JIU1YucywgZGFya2VyQ29sb3JIU1Yudik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhleCA9IEhTVlRvSGV4KGxpZ2h0ZXJDb2xvckhTVi5oLCBsaWdodGVyQ29sb3JIU1YucywgbGlnaHRlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBob3Zlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChkZWZhdWx0Q29sb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgZGVmYXVsdENvbG9yLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IGRlZmF1bHRDb2xvci5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5ob3ZlciAmJiBpbnB1dENvbG9yLmhvdmVyLmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuYmFja2dyb3VuZCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogaXNTdHJpbmcoaW5wdXRDb2xvci5oaWdobGlnaHQpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcikgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBSR0IgXFw8MCwgMjU1XFw+IGludG8gSFNWIG9iamVjdC5cclxuICpcclxuICogQHJlbWFya3NcclxuICoge0BsaW5rIGh0dHA6Ly93d3cuamF2YXNjcmlwdGVyLm5ldC9mYXEvcmdiMmhzdi5odG19XHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhTViBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBSR0JUb0hTVihyZWQsIGdyZWVuLCBibHVlKSB7XHJcbiAgICByZWQgPSByZWQgLyAyNTU7XHJcbiAgICBncmVlbiA9IGdyZWVuIC8gMjU1O1xyXG4gICAgYmx1ZSA9IGJsdWUgLyAyNTU7XHJcbiAgICBjb25zdCBtaW5SR0IgPSBNYXRoLm1pbihyZWQsIE1hdGgubWluKGdyZWVuLCBibHVlKSk7XHJcbiAgICBjb25zdCBtYXhSR0IgPSBNYXRoLm1heChyZWQsIE1hdGgubWF4KGdyZWVuLCBibHVlKSk7XHJcbiAgICAvLyBCbGFjay1ncmF5LXdoaXRlXHJcbiAgICBpZiAobWluUkdCID09PSBtYXhSR0IpIHtcclxuICAgICAgICByZXR1cm4geyBoOiAwLCBzOiAwLCB2OiBtaW5SR0IgfTtcclxuICAgIH1cclxuICAgIC8vIENvbG9ycyBvdGhlciB0aGFuIGJsYWNrLWdyYXktd2hpdGU6XHJcbiAgICBjb25zdCBkID0gcmVkID09PSBtaW5SR0IgPyBncmVlbiAtIGJsdWUgOiBibHVlID09PSBtaW5SR0IgPyByZWQgLSBncmVlbiA6IGJsdWUgLSByZWQ7XHJcbiAgICBjb25zdCBoID0gcmVkID09PSBtaW5SR0IgPyAzIDogYmx1ZSA9PT0gbWluUkdCID8gMSA6IDU7XHJcbiAgICBjb25zdCBodWUgPSAoNjAgKiAoaCAtIGQgLyAobWF4UkdCIC0gbWluUkdCKSkpIC8gMzYwO1xyXG4gICAgY29uc3Qgc2F0dXJhdGlvbiA9IChtYXhSR0IgLSBtaW5SR0IpIC8gbWF4UkdCO1xyXG4gICAgY29uc3QgdmFsdWUgPSBtYXhSR0I7XHJcbiAgICByZXR1cm4geyBoOiBodWUsIHM6IHNhdHVyYXRpb24sIHY6IHZhbHVlIH07XHJcbn1cclxuLyoqXHJcbiAqIFNwbGl0IGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBpbnRvIGFuIG9iamVjdCB3aXRoIGtleS92YWx1ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gQ1NTIHNvdXJjZSBjb2RlIHRvIHNwbGl0IGludG8ga2V5L3ZhbHVlIG9iamVjdC5cclxuICogQHJldHVybnMgS2V5L3ZhbHVlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHtAbGluayBjc3NUZXh0fS5cclxuICovXHJcbmZ1bmN0aW9uIHNwbGl0Q1NTVGV4dChjc3NUZXh0KSB7XHJcbiAgICBjb25zdCB0bXBFbGxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBjb25zdCBzdHlsZXMgPSB7fTtcclxuICAgIHRtcEVsbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bXBFbGxlbWVudC5zdHlsZS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIHN0eWxlc1t0bXBFbGxlbWVudC5zdHlsZVtpXV0gPSB0bXBFbGxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRtcEVsbGVtZW50LnN0eWxlW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZXM7XHJcbn1cclxuLyoqXHJcbiAqIEFwcGVuZCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgdG8gYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0aGF0IHdpbGwgcmVjZWl2ZSBuZXcgc3R5bGVzLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgYXBwZW5kZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDc3NUZXh0KGVsZW1lbnQsIGNzc1RleHQpIHtcclxuICAgIGNvbnN0IGNzc1N0eWxlID0gc3BsaXRDU1NUZXh0KGNzc1RleHQpO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3NzU3R5bGUpKSB7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCBzdHlsZXMgc2hvdWxkIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gVGhlIHN0eWxlcyB0byBiZSByZW1vdmVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tamlqYWNrc29uLzUzMTEyNTZ9XHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb1JHQihoLCBzLCB2KSB7XHJcbiAgICBsZXQgcjtcclxuICAgIGxldCBnO1xyXG4gICAgbGV0IGI7XHJcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihoICogNik7XHJcbiAgICBjb25zdCBmID0gaCAqIDYgLSBpO1xyXG4gICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xyXG4gICAgY29uc3QgcSA9IHYgKiAoMSAtIGYgKiBzKTtcclxuICAgIGNvbnN0IHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyk7XHJcbiAgICBzd2l0Y2ggKGkgJSA2KSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAociA9IHYpLCAoZyA9IHQpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIChyID0gcSksIChnID0gdiksIChiID0gcCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSB2KSwgKGIgPSB0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAociA9IHApLCAoZyA9IHEpLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIChyID0gdCksIChnID0gcCksIChiID0gdik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSBwKSwgKGIgPSBxKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHI6IE1hdGguZmxvb3IociAqIDI1NSksXHJcbiAgICAgICAgZzogTWF0aC5mbG9vcihnICogMjU1KSxcclxuICAgICAgICBiOiBNYXRoLmZsb29yKGIgKiAyNTUpLFxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb0hleChoLCBzLCB2KSB7XHJcbiAgICBjb25zdCByZ2IgPSBIU1ZUb1JHQihoLCBzLCB2KTtcclxuICAgIHJldHVybiBSR0JUb0hleChyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBoZXggY29sb3Igc3RyaW5nIGludG8gSFNWIFxcPDAsIDFcXD4uXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gaGV4VG9IU1YoaGV4KSB7XHJcbiAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihoZXgpO1xyXG4gICAgaWYgKCFyZ2IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHtoZXh9JyBpcyBub3QgYSB2YWxpZCBjb2xvci5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSR0JUb0hTVihyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgaGV4IGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIGhleCAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkSGV4KGhleCkge1xyXG4gICAgY29uc3QgaXNPayA9IC8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KGhleCk7XHJcbiAgICByZXR1cm4gaXNPaztcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCIGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHJnYiAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCKHJnYikge1xyXG4gICAgcmV0dXJuIHJnYlJFLnRlc3QocmdiKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCQSBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2JhIC0gVW5rbm93biBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiBhIGNvbG9yLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzVmFsaWRSR0JBKHJnYmEpIHtcclxuICAgIHJldHVybiByZ2JhUkUudGVzdChyZ2JhKTtcclxufVxyXG4vKipcclxuICogVGhpcyByZWN1cnNpdmVseSByZWRpcmVjdHMgdGhlIHByb3RvdHlwZSBvZiBKU09OIG9iamVjdHMgdG8gdGhlIHJlZmVyZW5jZU9iamVjdC5cclxuICogVGhpcyBpcyB1c2VkIGZvciBkZWZhdWx0IG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWVsZHMgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHRvIGJlIGJyaWRnZWQuXHJcbiAqIEBwYXJhbSByZWZlcmVuY2VPYmplY3QgLSBUaGUgb3JpZ2luYWwgb2JqZWN0LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVCcmlkZ2VPYmplY3QoZmllbGRzLCByZWZlcmVuY2VPYmplY3QpIHtcclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIHJlZmVyZW5jZU9iamVjdCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIC8vICEhISB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICBjb25zdCBvYmplY3RUbyA9IE9iamVjdC5jcmVhdGUocmVmZXJlbmNlT2JqZWN0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZmVyZW5jZU9iamVjdCwgZmllbGRzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0VG9bZmllbGRzW2ldXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFRvO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgVGhlIEVsZW1lbnQgaWYgdGhlIHJlZmVyZW5jZU9iamVjdCBpcyBhbiBFbGVtZW50LCBvciBhIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiByZWZlcmVuY2VPYmplY3QgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KSB7XHJcbiAgICAgICAgLy8gQXZvaWQgYnJpZGdpbmcgRE9NIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlT2JqZWN0O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGkpKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ldID09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFRvW2ldID0gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0VG87XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgc3RhYmxlIHNvcnQgaW1wbGVtZW50YXRpb24sIHZlcnkgZmFzdCBmb3IgcHJlc29ydGVkIGRhdGEuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIGFycmF5IHRvIGJlIHNvcnRlZCAoaW4tcGxhY2UpLlxyXG4gKiBAcGFyYW0gY29tcGFyZSAtIEFuIG9yZGVyIGNvbXBhcmF0b3IuXHJcbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gaW5zZXJ0U29ydChhLCBjb21wYXJlKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBrID0gYVtpXTtcclxuICAgICAgICBsZXQgajtcclxuICAgICAgICBmb3IgKGogPSBpOyBqID4gMCAmJiBjb21wYXJlKGssIGFbaiAtIDFdKSA8IDA7IGotLSkge1xyXG4gICAgICAgICAgICBhW2pdID0gYVtqIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFbal0gPSBrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIG9wdGlvbnMgb2Ygc3Vib2JqZWN0cyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXHJcbiAqXHJcbiAqIEEgcmVxdWlyZW1lbnQgb2YgdGhlc2Ugc3Vib2JqZWN0cyBpcyB0aGF0IHRoZXkgaGF2ZSBhbiAnZW5hYmxlZCcgZWxlbWVudFxyXG4gKiB3aGljaCBpcyBvcHRpb25hbCBmb3IgdGhlIHVzZXIgYnV0IG1hbmRhdG9yeSBmb3IgdGhlIHByb2dyYW0uXHJcbiAqXHJcbiAqIFRoZSBhZGRlZCB2YWx1ZSBoZXJlIG9mIHRoZSBtZXJnZSBpcyB0aGF0IG9wdGlvbiAnZW5hYmxlZCcgaXMgc2V0IGFzIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWVyZ2VUYXJnZXQgLSBFaXRoZXIgdGhpcy5vcHRpb25zIG9yIHRoZSBvcHRpb25zIHVzZWQgZm9yIHRoZSBncm91cHMuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICogQHBhcmFtIG9wdGlvbiAtIE9wdGlvbiBrZXkgaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQuXHJcbiAqIEBwYXJhbSBnbG9iYWxPcHRpb25zIC0gR2xvYmFsIG9wdGlvbnMsIHBhc3NlZCBpbiB0byBkZXRlcm1pbmUgdmFsdWUgb2Ygb3B0aW9uICdlbmFibGVkJy5cclxuICovXHJcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhtZXJnZVRhcmdldCwgb3B0aW9ucywgb3B0aW9uLCBnbG9iYWxPcHRpb25zID0ge30pIHtcclxuICAgIC8vIExvY2FsIGhlbHBlcnNcclxuICAgIGNvbnN0IGlzUHJlc2VudCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIG9iaiAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIjtcclxuICAgIH07XHJcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzQ0OTEyODcvMTIyMzUzMVxyXG4gICAgY29uc3QgaXNFbXB0eSA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHggaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCB4KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8vIEd1YXJkc1xyXG4gICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgbWVyZ2VUYXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzUHJlc2VudChvcHRpb24pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbiBtdXN0IGhhdmUgYSB2YWx1ZVwiKTtcclxuICAgIH1cclxuICAgIGlmICghaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgZ2xvYmFsT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdFwiKTtcclxuICAgIH1cclxuICAgIC8vXHJcbiAgICAvLyBBY3R1YWwgbWVyZ2Ugcm91dGluZSwgc2VwYXJhdGVkIGZyb20gbWFpbiBsb2dpY1xyXG4gICAgLy8gT25seSBhIHNpbmdsZSBsZXZlbCBvZiBvcHRpb25zIGlzIG1lcmdlZC4gRGVlcGVyIGxldmVscyBhcmUgcmVmJ2QuIFRoaXMgbWF5IGFjdHVhbGx5IGJlIGFuIGlzc3VlLlxyXG4gICAgLy9cclxuICAgIGNvbnN0IGRvTWVyZ2UgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KHRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbb3B0aW9uXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzcmMgPSBvcHRpb25zW29wdGlvbl07XHJcbiAgICAgICAgY29uc3QgZHN0ID0gdGFyZ2V0W29wdGlvbl07XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHNyYykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNyYywgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRzdFtwcm9wXSA9IHNyY1twcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBMb2NhbCBpbml0aWFsaXphdGlvblxyXG4gICAgY29uc3Qgc3JjT3B0aW9uID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgY29uc3QgZ2xvYmFsUGFzc2VkID0gaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykgJiYgIWlzRW1wdHkoZ2xvYmFsT3B0aW9ucyk7XHJcbiAgICBjb25zdCBnbG9iYWxPcHRpb24gPSBnbG9iYWxQYXNzZWQgPyBnbG9iYWxPcHRpb25zW29wdGlvbl0gOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBnbG9iYWxFbmFibGVkID0gZ2xvYmFsT3B0aW9uID8gZ2xvYmFsT3B0aW9uLmVuYWJsZWQgOiB1bmRlZmluZWQ7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTWFpbiByb3V0aW5lXHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgaWYgKHNyY09wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNyY09wdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gc3JjT3B0aW9uO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChzcmNPcHRpb24gPT09IG51bGwgJiYgIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgLy8gSWYgcG9zc2libGUsIGV4cGxpY2l0IGNvcHkgZnJvbSBnbG9iYWxzXHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChnbG9iYWxPcHRpb24pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KHNyY09wdGlvbikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gRW5zdXJlIHRoYXQgJ2VuYWJsZWQnIGlzIHByb3Blcmx5IHNldC4gSXQgaXMgcmVxdWlyZWQgaW50ZXJuYWxseVxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB2YWx1ZSBmcm9tIG9wdGlvbnMgd2lsbCBhbHdheXMgb3ZlcndyaXRlIHRoZSBleGlzdGluZyB2YWx1ZVxyXG4gICAgLy9cclxuICAgIGxldCBlbmFibGVkID0gdHJ1ZTsgLy8gZGVmYXVsdCB2YWx1ZVxyXG4gICAgaWYgKHNyY09wdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBlbmFibGVkID0gc3JjT3B0aW9uLmVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBUYWtlIGZyb20gZ2xvYmFscywgaWYgcHJlc2VudFxyXG4gICAgICAgIGlmIChnbG9iYWxFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZCA9IGdsb2JhbE9wdGlvbi5lbmFibGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRvTWVyZ2UobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbik7XHJcbiAgICBtZXJnZVRhcmdldFtvcHRpb25dLmVuYWJsZWQgPSBlbmFibGVkO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBiaW5hcnkgc2VhcmNoIGZvciBhIHZpc2libGUgaXRlbSBpbiBhIHNvcnRlZCBsaXN0LiBJZiB3ZSBmaW5kIGEgdmlzaWJsZSBpdGVtLCB0aGUgY29kZSB0aGF0IHVzZXNcclxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHRoZW4gaXRlcmF0ZSBpbiBib3RoIGRpcmVjdGlvbnMgb3ZlciB0aGlzIHNvcnRlZCBsaXN0IHRvIGZpbmQgYWxsIHZpc2libGUgaXRlbXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBJdGVtcyBvcmRlcmVkIGJ5IHN0YXJ0LlxyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIC0xIGlzIGxvd2VyLCAwIGlzIGVxdWFsLCAxIGlzIGhpZ2hlci5cclxuICogQHBhcmFtIGZpZWxkIC0gUHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdKS5cclxuICogQHBhcmFtIGZpZWxkMiAtIFNlY29uZCBwcm9wZXJ0eSBuYW1lIG9uIGFuIGl0ZW0gKFRoYXQgaXMgaXRlbVtmaWVsZF1bZmllbGQyXSkuXHJcbiAqIEByZXR1cm5zIEluZGV4IG9mIHRoZSBmb3VuZCBpdGVtIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoQ3VzdG9tKG9yZGVyZWRJdGVtcywgY29tcGFyYXRvciwgZmllbGQsIGZpZWxkMikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQyID09PSB1bmRlZmluZWQgPyBpdGVtW2ZpZWxkXSA6IGl0ZW1bZmllbGRdW2ZpZWxkMl07XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGppaGFhLCBmb3VuZCBhIHZpc2libGUgaXRlbSFcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2VhcmNoUmVzdWx0ID09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBzbWFsbCAtLT4gaW5jcmVhc2UgbG93XHJcbiAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSBzcGVjaWZpYyB2YWx1ZSBpbiBhIHNvcnRlZCBhcnJheS5cclxuICogSWYgaXQgZG9lcyBub3QgZXhpc3QgYnV0IGlzIGluIGJldHdlZW4gb2YgdHdvIHZhbHVlcywgd2UgcmV0dXJuIGVpdGhlciB0aGVcclxuICogb25lIGJlZm9yZSBvciB0aGUgb25lIGFmdGVyLCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dCBJZiBpdCBpcyBmb3VuZCwgd2VcclxuICogcmV0dXJuIHRoZSBpbmRleCwgZWxzZSAtMS5cclxuICpcclxuICogQHBhcmFtIG9yZGVyZWRJdGVtcyAtIFNvcnRlZCBhcnJheS5cclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSBzZWFyY2hlZCB2YWx1ZS5cclxuICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgaW4gaXRlbXMgdG8gYmUgc2VhcmNoZWQuXHJcbiAqIEBwYXJhbSBzaWRlUHJlZmVyZW5jZSAtIElmIHRoZSB0YXJnZXQgaXMgYmV0d2VlbiB0d28gdmFsdWVzLCBzaG91bGQgdGhlIGluZGV4IG9mIHRoZSBiZWZvcmUgb3IgdGhlIGFmdGVyIGJlIHJldHVybmVkP1xyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIEFuIG9wdGlvbmFsIGNvbXBhcmF0b3IsIHJldHVybmluZyAtMSwgMCwgMSBmb3IgXFw8LCA9PT0sIFxcPi5cclxuICogQHJldHVybnMgVGhlIGluZGV4IG9mIGZvdW5kIHZhbHVlIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoVmFsdWUob3JkZXJlZEl0ZW1zLCB0YXJnZXQsIGZpZWxkLCBzaWRlUHJlZmVyZW5jZSwgY29tcGFyYXRvcikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgcHJldlZhbHVlO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IG5leHRWYWx1ZTtcclxuICAgIGxldCBtaWRkbGU7XHJcbiAgICBjb21wYXJhdG9yID1cclxuICAgICAgICBjb21wYXJhdG9yICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGNvbXBhcmF0b3JcclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYiA/IDAgOiBhIDwgYiA/IC0xIDogMTtcclxuICAgICAgICAgICAgfTtcclxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKSB7XHJcbiAgICAgICAgLy8gZ2V0IGEgbmV3IGd1ZXNzXHJcbiAgICAgICAgbWlkZGxlID0gTWF0aC5mbG9vcigwLjUgKiAoaGlnaCArIGxvdykpO1xyXG4gICAgICAgIHByZXZWYWx1ZSA9IG9yZGVyZWRJdGVtc1tNYXRoLm1heCgwLCBtaWRkbGUgLSAxKV1bZmllbGRdO1xyXG4gICAgICAgIHZhbHVlID0gb3JkZXJlZEl0ZW1zW21pZGRsZV1bZmllbGRdO1xyXG4gICAgICAgIG5leHRWYWx1ZSA9XHJcbiAgICAgICAgICAgIG9yZGVyZWRJdGVtc1tNYXRoLm1pbihvcmRlcmVkSXRlbXMubGVuZ3RoIC0gMSwgbWlkZGxlICsgMSldW2ZpZWxkXTtcclxuICAgICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIHRoZSB0YXJnZXRcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcihwcmV2VmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBwcmV2aW91cyBhbmQgdGhlIGN1cnJlbnRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCIgPyBNYXRoLm1heCgwLCBtaWRkbGUgLSAxKSA6IG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA8IDAgJiZcclxuICAgICAgICAgICAgY29tcGFyYXRvcihuZXh0VmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dFxyXG4gICAgICAgICAgICByZXR1cm4gc2lkZVByZWZlcmVuY2UgPT0gXCJiZWZvcmVcIlxyXG4gICAgICAgICAgICAgICAgPyBtaWRkbGVcclxuICAgICAgICAgICAgICAgIDogTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGlkbnQgZmluZCB0aGUgdGFyZ2V0LCB3ZSBuZWVkIHRvIGNoYW5nZSBvdXIgYm91bmRhcmllcy5cclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICAgICAgbG93ID0gbWlkZGxlICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBiaWcgLS0+IGRlY3JlYXNlIGhpZ2hcclxuICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgfVxyXG4gICAgLy8gZGlkbnQgZmluZCBhbnl0aGluZy4gUmV0dXJuIC0xLlxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbi8qXHJcbiAqIEVhc2luZyBGdW5jdGlvbnMuXHJcbiAqIE9ubHkgY29uc2lkZXJpbmcgdGhlIHQgdmFsdWUgZm9yIHRoZSByYW5nZSBbMCwgMV0gPT4gWzAsIDFdLlxyXG4gKlxyXG4gKiBJbnNwaXJhdGlvbjogZnJvbSBodHRwOi8vZ2l6bWEuY29tL2Vhc2luZy9cclxuICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ3JlLzE2NTAyOTRcclxuICovXHJcbmNvbnN0IGVhc2luZ0Z1bmN0aW9ucyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgbm8gZWFzaW5nIGFuZCBubyBhY2NlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBsaW5lYXIodCkge1xyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5RdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiAoMiAtIHQpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDIgKiB0ICogdCA6IC0xICsgKDQgLSAyICogdCkgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5DdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRDdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gNCAqIHQgKiB0ICogdCA6ICh0IC0gMSkgKiAoMiAqIHQgLSAyKSAqICgyICogdCAtIDIpICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gMSAtIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gOCAqIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgKyAtLXQgKiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAxNiAqIHQgKiB0ICogdCAqIHQgKiB0IDogMSArIDE2ICogLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBFeHBlcmltZW50YWx5IGNvbXB1dGUgdGhlIHdpZHRoIG9mIHRoZSBzY3JvbGxiYXIgZm9yIHRoaXMgYnJvd3Nlci5cclxuICpcclxuICogQHJldHVybnMgVGhlIHdpZHRoIGluIHBpeGVscy5cclxuICovXHJcbmZ1bmN0aW9uIGdldFNjcm9sbEJhcldpZHRoKCkge1xyXG4gICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgIGlubmVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSBcIjIwMHB4XCI7XHJcbiAgICBjb25zdCBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBvdXRlci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgIG91dGVyLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuc3R5bGUud2lkdGggPSBcIjIwMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5oZWlnaHQgPSBcIjE1MHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcbiAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcclxuICAgIGNvbnN0IHcxID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwic2Nyb2xsXCI7XHJcbiAgICBsZXQgdzIgPSBpbm5lci5vZmZzZXRXaWR0aDtcclxuICAgIGlmICh3MSA9PSB3Mikge1xyXG4gICAgICAgIHcyID0gb3V0ZXIuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyKTtcclxuICAgIHJldHVybiB3MSAtIHcyO1xyXG59XHJcbi8vIEBUT0RPOiBUaGlzIGRvZXNuJ3Qgd29yayBwcm9wZXJseS5cclxuLy8gSXQgd29ya3Mgb25seSBmb3Igc2luZ2xlIHByb3BlcnR5IG9iamVjdHMsXHJcbi8vIG90aGVyd2lzZSBpdCBjb21iaW5lcyBhbGwgb2YgdGhlIHR5cGVzIGluIGEgdW5pb24uXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBWMT4gKFxyXG4vLyAgIHBpbGU6IFJlY29yZDxLMSwgdW5kZWZpbmVkIHwgVjE+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBLMSB8IFtLMV1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjFcclxuLy8gZXhwb3J0IGZ1bmN0aW9uIHRvcE1vc3Q8SzEgZXh0ZW5kcyBzdHJpbmcsIEsyIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjI+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgSzMgZXh0ZW5kcyBzdHJpbmcsIFYxLCBWMiwgVjM+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMiB8IFJlY29yZDxLMywgdW5kZWZpbmVkIHwgVjM+Pj5bXSxcclxuLy8gICBhY2Nlc3NvcnM6IFtLMSwgSzIsIEszXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyIHwgVjNcclxuLyoqXHJcbiAqIEdldCB0aGUgdG9wIG1vc3QgcHJvcGVydHkgdmFsdWUgZnJvbSBhIHBpbGUgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHBhcmFtIHBpbGUgLSBBcnJheSBvZiBvYmplY3RzLCBubyByZXF1aXJlZCBmb3JtYXQuXHJcbiAqIEBwYXJhbSBhY2Nlc3NvcnMgLSBBcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cclxuICogRm9yIGV4YW1wbGUgYG9iamVjdFsnZm9vJ11bJ2JhciddYCDihpIgYFsnZm9vJywgJ2JhciddYC5cclxuICogQHJldHVybnMgVmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpdGggZ2l2ZW4gYWNjZXNzb3JzIHBhdGggZnJvbSB0aGUgZmlyc3QgcGlsZSBpdGVtIHdoZXJlIGl0J3Mgbm90IHVuZGVmaW5lZC5cclxuICovXHJcbmZ1bmN0aW9uIHRvcE1vc3QocGlsZSwgYWNjZXNzb3JzKSB7XHJcbiAgICBsZXQgY2FuZGlkYXRlO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjY2Vzc29ycykpIHtcclxuICAgICAgICBhY2Nlc3NvcnMgPSBbYWNjZXNzb3JzXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHBpbGUpIHtcclxuICAgICAgICBpZiAobWVtYmVyKSB7XHJcbiAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG1lbWJlclthY2Nlc3NvcnNbMF1dO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFjY2Vzc29ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZVthY2Nlc3NvcnNbaV1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjYW5kaWRhdGU7XHJcbn1cblxuY29uc3QgaHRtbENvbG9ycyA9IHtcbiAgYmxhY2s6IFwiIzAwMDAwMFwiLFxuICBuYXZ5OiBcIiMwMDAwODBcIixcbiAgZGFya2JsdWU6IFwiIzAwMDA4QlwiLFxuICBtZWRpdW1ibHVlOiBcIiMwMDAwQ0RcIixcbiAgYmx1ZTogXCIjMDAwMEZGXCIsXG4gIGRhcmtncmVlbjogXCIjMDA2NDAwXCIsXG4gIGdyZWVuOiBcIiMwMDgwMDBcIixcbiAgdGVhbDogXCIjMDA4MDgwXCIsXG4gIGRhcmtjeWFuOiBcIiMwMDhCOEJcIixcbiAgZGVlcHNreWJsdWU6IFwiIzAwQkZGRlwiLFxuICBkYXJrdHVycXVvaXNlOiBcIiMwMENFRDFcIixcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IFwiIzAwRkE5QVwiLFxuICBsaW1lOiBcIiMwMEZGMDBcIixcbiAgc3ByaW5nZ3JlZW46IFwiIzAwRkY3RlwiLFxuICBhcXVhOiBcIiMwMEZGRkZcIixcbiAgY3lhbjogXCIjMDBGRkZGXCIsXG4gIG1pZG5pZ2h0Ymx1ZTogXCIjMTkxOTcwXCIsXG4gIGRvZGdlcmJsdWU6IFwiIzFFOTBGRlwiLFxuICBsaWdodHNlYWdyZWVuOiBcIiMyMEIyQUFcIixcbiAgZm9yZXN0Z3JlZW46IFwiIzIyOEIyMlwiLFxuICBzZWFncmVlbjogXCIjMkU4QjU3XCIsXG4gIGRhcmtzbGF0ZWdyYXk6IFwiIzJGNEY0RlwiLFxuICBsaW1lZ3JlZW46IFwiIzMyQ0QzMlwiLFxuICBtZWRpdW1zZWFncmVlbjogXCIjM0NCMzcxXCIsXG4gIHR1cnF1b2lzZTogXCIjNDBFMEQwXCIsXG4gIHJveWFsYmx1ZTogXCIjNDE2OUUxXCIsXG4gIHN0ZWVsYmx1ZTogXCIjNDY4MkI0XCIsXG4gIGRhcmtzbGF0ZWJsdWU6IFwiIzQ4M0Q4QlwiLFxuICBtZWRpdW10dXJxdW9pc2U6IFwiIzQ4RDFDQ1wiLFxuICBpbmRpZ286IFwiIzRCMDA4MlwiLFxuICBkYXJrb2xpdmVncmVlbjogXCIjNTU2QjJGXCIsXG4gIGNhZGV0Ymx1ZTogXCIjNUY5RUEwXCIsXG4gIGNvcm5mbG93ZXJibHVlOiBcIiM2NDk1RURcIixcbiAgbWVkaXVtYXF1YW1hcmluZTogXCIjNjZDREFBXCIsXG4gIGRpbWdyYXk6IFwiIzY5Njk2OVwiLFxuICBzbGF0ZWJsdWU6IFwiIzZBNUFDRFwiLFxuICBvbGl2ZWRyYWI6IFwiIzZCOEUyM1wiLFxuICBzbGF0ZWdyYXk6IFwiIzcwODA5MFwiLFxuICBsaWdodHNsYXRlZ3JheTogXCIjNzc4ODk5XCIsXG4gIG1lZGl1bXNsYXRlYmx1ZTogXCIjN0I2OEVFXCIsXG4gIGxhd25ncmVlbjogXCIjN0NGQzAwXCIsXG4gIGNoYXJ0cmV1c2U6IFwiIzdGRkYwMFwiLFxuICBhcXVhbWFyaW5lOiBcIiM3RkZGRDRcIixcbiAgbWFyb29uOiBcIiM4MDAwMDBcIixcbiAgcHVycGxlOiBcIiM4MDAwODBcIixcbiAgb2xpdmU6IFwiIzgwODAwMFwiLFxuICBncmF5OiBcIiM4MDgwODBcIixcbiAgc2t5Ymx1ZTogXCIjODdDRUVCXCIsXG4gIGxpZ2h0c2t5Ymx1ZTogXCIjODdDRUZBXCIsXG4gIGJsdWV2aW9sZXQ6IFwiIzhBMkJFMlwiLFxuICBkYXJrcmVkOiBcIiM4QjAwMDBcIixcbiAgZGFya21hZ2VudGE6IFwiIzhCMDA4QlwiLFxuICBzYWRkbGVicm93bjogXCIjOEI0NTEzXCIsXG4gIGRhcmtzZWFncmVlbjogXCIjOEZCQzhGXCIsXG4gIGxpZ2h0Z3JlZW46IFwiIzkwRUU5MFwiLFxuICBtZWRpdW1wdXJwbGU6IFwiIzkzNzBEOFwiLFxuICBkYXJrdmlvbGV0OiBcIiM5NDAwRDNcIixcbiAgcGFsZWdyZWVuOiBcIiM5OEZCOThcIixcbiAgZGFya29yY2hpZDogXCIjOTkzMkNDXCIsXG4gIHllbGxvd2dyZWVuOiBcIiM5QUNEMzJcIixcbiAgc2llbm5hOiBcIiNBMDUyMkRcIixcbiAgYnJvd246IFwiI0E1MkEyQVwiLFxuICBkYXJrZ3JheTogXCIjQTlBOUE5XCIsXG4gIGxpZ2h0Ymx1ZTogXCIjQUREOEU2XCIsXG4gIGdyZWVueWVsbG93OiBcIiNBREZGMkZcIixcbiAgcGFsZXR1cnF1b2lzZTogXCIjQUZFRUVFXCIsXG4gIGxpZ2h0c3RlZWxibHVlOiBcIiNCMEM0REVcIixcbiAgcG93ZGVyYmx1ZTogXCIjQjBFMEU2XCIsXG4gIGZpcmVicmljazogXCIjQjIyMjIyXCIsXG4gIGRhcmtnb2xkZW5yb2Q6IFwiI0I4ODYwQlwiLFxuICBtZWRpdW1vcmNoaWQ6IFwiI0JBNTVEM1wiLFxuICByb3N5YnJvd246IFwiI0JDOEY4RlwiLFxuICBkYXJra2hha2k6IFwiI0JEQjc2QlwiLFxuICBzaWx2ZXI6IFwiI0MwQzBDMFwiLFxuICBtZWRpdW12aW9sZXRyZWQ6IFwiI0M3MTU4NVwiLFxuICBpbmRpYW5yZWQ6IFwiI0NENUM1Q1wiLFxuICBwZXJ1OiBcIiNDRDg1M0ZcIixcbiAgY2hvY29sYXRlOiBcIiNEMjY5MUVcIixcbiAgdGFuOiBcIiNEMkI0OENcIixcbiAgbGlnaHRncmV5OiBcIiNEM0QzRDNcIixcbiAgcGFsZXZpb2xldHJlZDogXCIjRDg3MDkzXCIsXG4gIHRoaXN0bGU6IFwiI0Q4QkZEOFwiLFxuICBvcmNoaWQ6IFwiI0RBNzBENlwiLFxuICBnb2xkZW5yb2Q6IFwiI0RBQTUyMFwiLFxuICBjcmltc29uOiBcIiNEQzE0M0NcIixcbiAgZ2FpbnNib3JvOiBcIiNEQ0RDRENcIixcbiAgcGx1bTogXCIjRERBMEREXCIsXG4gIGJ1cmx5d29vZDogXCIjREVCODg3XCIsXG4gIGxpZ2h0Y3lhbjogXCIjRTBGRkZGXCIsXG4gIGxhdmVuZGVyOiBcIiNFNkU2RkFcIixcbiAgZGFya3NhbG1vbjogXCIjRTk5NjdBXCIsXG4gIHZpb2xldDogXCIjRUU4MkVFXCIsXG4gIHBhbGVnb2xkZW5yb2Q6IFwiI0VFRThBQVwiLFxuICBsaWdodGNvcmFsOiBcIiNGMDgwODBcIixcbiAga2hha2k6IFwiI0YwRTY4Q1wiLFxuICBhbGljZWJsdWU6IFwiI0YwRjhGRlwiLFxuICBob25leWRldzogXCIjRjBGRkYwXCIsXG4gIGF6dXJlOiBcIiNGMEZGRkZcIixcbiAgc2FuZHlicm93bjogXCIjRjRBNDYwXCIsXG4gIHdoZWF0OiBcIiNGNURFQjNcIixcbiAgYmVpZ2U6IFwiI0Y1RjVEQ1wiLFxuICB3aGl0ZXNtb2tlOiBcIiNGNUY1RjVcIixcbiAgbWludGNyZWFtOiBcIiNGNUZGRkFcIixcbiAgZ2hvc3R3aGl0ZTogXCIjRjhGOEZGXCIsXG4gIHNhbG1vbjogXCIjRkE4MDcyXCIsXG4gIGFudGlxdWV3aGl0ZTogXCIjRkFFQkQ3XCIsXG4gIGxpbmVuOiBcIiNGQUYwRTZcIixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiI0ZBRkFEMlwiLFxuICBvbGRsYWNlOiBcIiNGREY1RTZcIixcbiAgcmVkOiBcIiNGRjAwMDBcIixcbiAgZnVjaHNpYTogXCIjRkYwMEZGXCIsXG4gIG1hZ2VudGE6IFwiI0ZGMDBGRlwiLFxuICBkZWVwcGluazogXCIjRkYxNDkzXCIsXG4gIG9yYW5nZXJlZDogXCIjRkY0NTAwXCIsXG4gIHRvbWF0bzogXCIjRkY2MzQ3XCIsXG4gIGhvdHBpbms6IFwiI0ZGNjlCNFwiLFxuICBjb3JhbDogXCIjRkY3RjUwXCIsXG4gIGRhcmtvcmFuZ2U6IFwiI0ZGOEMwMFwiLFxuICBsaWdodHNhbG1vbjogXCIjRkZBMDdBXCIsXG4gIG9yYW5nZTogXCIjRkZBNTAwXCIsXG4gIGxpZ2h0cGluazogXCIjRkZCNkMxXCIsXG4gIHBpbms6IFwiI0ZGQzBDQlwiLFxuICBnb2xkOiBcIiNGRkQ3MDBcIixcbiAgcGVhY2hwdWZmOiBcIiNGRkRBQjlcIixcbiAgbmF2YWpvd2hpdGU6IFwiI0ZGREVBRFwiLFxuICBtb2NjYXNpbjogXCIjRkZFNEI1XCIsXG4gIGJpc3F1ZTogXCIjRkZFNEM0XCIsXG4gIG1pc3R5cm9zZTogXCIjRkZFNEUxXCIsXG4gIGJsYW5jaGVkYWxtb25kOiBcIiNGRkVCQ0RcIixcbiAgcGFwYXlhd2hpcDogXCIjRkZFRkQ1XCIsXG4gIGxhdmVuZGVyYmx1c2g6IFwiI0ZGRjBGNVwiLFxuICBzZWFzaGVsbDogXCIjRkZGNUVFXCIsXG4gIGNvcm5zaWxrOiBcIiNGRkY4RENcIixcbiAgbGVtb25jaGlmZm9uOiBcIiNGRkZBQ0RcIixcbiAgZmxvcmFsd2hpdGU6IFwiI0ZGRkFGMFwiLFxuICBzbm93OiBcIiNGRkZBRkFcIixcbiAgeWVsbG93OiBcIiNGRkZGMDBcIixcbiAgbGlnaHR5ZWxsb3c6IFwiI0ZGRkZFMFwiLFxuICBpdm9yeTogXCIjRkZGRkYwXCIsXG4gIHdoaXRlOiBcIiNGRkZGRkZcIixcbn07XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gKi9cbmxldCBDb2xvclBpY2tlciQxID0gY2xhc3MgQ29sb3JQaWNrZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwaXhlbFJhdGlvID0gMSkge1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiAyODkgLyAyLCB5OiAyODkgLyAyIH07XG4gICAgdGhpcy5yID0gMjg5ICogMC40OTtcbiAgICB0aGlzLmNvbG9yID0geyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhOiAxLjAgfTtcbiAgICB0aGlzLmh1ZUNpcmNsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmluaXRpYWxDb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5wcmV2aW91c0NvbG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuXG4gICAgLy8gYm91bmQgYnlcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gKCkgPT4ge307XG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gKCkgPT4ge307XG5cbiAgICAvLyBjcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgIHRoaXMuX2NyZWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgaW5zZXJ0cyB0aGUgY29sb3JQaWNrZXIgaW50byBhIGRpdiBmcm9tIHRoZSBET01cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAgICovXG4gIGluc2VydFRvKGNvbnRhaW5lcikge1xuICAgIGlmICh0aGlzLmhhbW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhhbW1lci5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhhbW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuXG4gICAgdGhpcy5fc2V0U2l6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldFVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIG9uIGFwcGx5IGFuZCBzYXZlLiBCaW5kIGl0IHRvIHRoZSBhcHBsaWNhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgc2V0Q2xvc2VDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIGNsb3NpbmcgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lzQ29sb3JTdHJpbmcoY29sb3IpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gaHRtbENvbG9yc1tjb2xvcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29sb3Igb2YgdGhlIGNvbG9yUGlja2VyXG4gICAqIFN1cHBvcnRlZCBmb3JtYXRzOlxuICAgKiAncmVkJyAgICAgICAgICAgICAgICAgICAtLT4gSFRNTCBjb2xvciBzdHJpbmdcbiAgICogJyNmZmZmZmYnICAgICAgICAgICAgICAgLS0+IGhleCBzdHJpbmdcbiAgICogJ3JnYigyNTUsMjU1LDI1NSknICAgICAgLS0+IHJnYiBzdHJpbmdcbiAgICogJ3JnYmEoMjU1LDI1NSwyNTUsMS4wKScgLS0+IHJnYmEgc3RyaW5nXG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NX0gICAgIC0tPiByZ2Igb2JqZWN0XG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NSxhOjEuMH0gLS0+IHJnYmEgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgb2JqZWN0fSBjb2xvclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqL1xuICBzZXRDb2xvcihjb2xvciwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICBpZiAoY29sb3IgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJnYmE7XG5cbiAgICAvLyBpZiBhIGh0bWwgY29sb3Igc2hvcnRoYW5kIGlzIHVzZWQsIGNvbnZlcnQgdG8gaGV4XG4gICAgY29uc3QgaHRtbENvbG9yID0gdGhpcy5faXNDb2xvclN0cmluZyhjb2xvcik7XG4gICAgaWYgKGh0bWxDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IGh0bWxDb2xvcjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3JtYXRcbiAgICBpZiAoaXNTdHJpbmcoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICBpZiAoaXNWYWxpZFJHQihjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDQpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA1KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYmFBcnJheVswXSwgZzogcmdiYUFycmF5WzFdLCBiOiByZ2JhQXJyYXlbMl0sIGE6IDEuMCB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkUkdCQShjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDUpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA2KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7XG4gICAgICAgICAgcjogcmdiYUFycmF5WzBdLFxuICAgICAgICAgIGc6IHJnYmFBcnJheVsxXSxcbiAgICAgICAgICBiOiByZ2JhQXJyYXlbMl0sXG4gICAgICAgICAgYTogcmdiYUFycmF5WzNdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkSGV4KGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZ2JPYmogPSBoZXhUb1JHQihjb2xvcik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYk9iai5yLCBnOiByZ2JPYmouZywgYjogcmdiT2JqLmIsIGE6IDEuMCB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29sb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbG9yLnIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmIgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBhbHBoYSA9IGNvbG9yLmEgIT09IHVuZGVmaW5lZCA/IGNvbG9yLmEgOiBcIjEuMFwiO1xuICAgICAgICAgIHJnYmEgPSB7IHI6IGNvbG9yLnIsIGc6IGNvbG9yLmcsIGI6IGNvbG9yLmIsIGE6IGFscGhhIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBpZiAocmdiYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biBjb2xvciBwYXNzZWQgdG8gdGhlIGNvbG9yUGlja2VyLiBTdXBwb3J0ZWQgYXJlIHN0cmluZ3M6IHJnYiwgaGV4LCByZ2JhLiBPYmplY3Q6IHJnYiAoe3I6cixnOmcsYjpiLFthOmFdfSkuIFN1cHBsaWVkOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29sb3IpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzaG93cyB0aGUgY29sb3IgcGlja2VyLlxuICAgKiBUaGUgaHVlIGNpcmNsZSBpcyBjb25zdHJ1Y3RlZCBvbmNlIGFuZCBzdG9yZWQuXG4gICAqL1xuICBzaG93KCkge1xuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrKCk7XG4gICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIHRoaXMuX2dlbmVyYXRlSHVlQ2lyY2xlKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFJJVkFURSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwaWNrZXIuIElzIGNhbGxlZCBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogT3B0aW9uYWwgYm9vbGVhbiB0byBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIGVhc3kgYWNjZXNzIGxhdGVyIG9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdG9yZVByZXZpb3VzPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGlkZShzdG9yZVByZXZpb3VzID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBwcmV2aW91cyBjb2xvciBmb3IgbmV4dCB0aW1lO1xuICAgIGlmIChzdG9yZVByZXZpb3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnByZXZpb3VzQ29sb3IgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbG9yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHBsaWVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuaW5pdGlhbENvbG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblxuICAgIC8vIGNhbGwgdGhlIGNsb3NpbmcgY2FsbGJhY2ssIHJlc3RvcmluZyB0aGUgb25jbGljayBtZXRob2QuXG4gICAgLy8gdGhpcyBpcyBpbiBhIHNldFRpbWVvdXQgYmVjYXVzZSBpdCB3aWxsIHRyaWdnZXIgdGhlIHNob3cgYWdhaW4gYmVmb3JlIHRoZSBjbGljayBpcyBkb25lLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2xvc2VDYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gdGhlIHNhdmUgYnV0dG9uLiBTYXZlcyBhbmQgaGlkZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2F2ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuY29sb3IpO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuX2hpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCb3VuZCB0byBhcHBseSBidXR0b24uIFNhdmVzIGJ1dCBkb2VzIG5vdCBjbG9zZS4gSXMgdW5kb25lIGJ5IHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FwcGx5KCkge1xuICAgIHRoaXMuYXBwbGllZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogbG9hZCB0aGUgY29sb3IgZnJvbSB0aGUgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkTGFzdCgpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c0NvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0Q29sb3IodGhpcy5wcmV2aW91c0NvbG9yLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsZXJ0KFwiVGhlcmUgaXMgbm8gbGFzdCBjb2xvciB0byBsb2FkLi4uXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGNvbG9yLCBwbGFjZSB0aGUgcGlja2VyXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZ2JhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NldEluaXRpYWw9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBpbml0aWFsIGNvbG9yXG4gICAgaWYgKHNldEluaXRpYWwgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgcmdiYSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvciA9IHJnYmE7XG4gICAgY29uc3QgaHN2ID0gUkdCVG9IU1YocmdiYS5yLCByZ2JhLmcsIHJnYmEuYik7XG5cbiAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAyICogTWF0aC5QSTtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLnIgKiBoc3YucztcbiAgICBjb25zdCB4ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcbiAgICBjb25zdCB5ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIHggLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICB5IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudEhlaWdodCArIFwicHhcIjtcblxuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcihyZ2JhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBvcGFjaXR5IGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0T3BhY2l0eSh2YWx1ZSkge1xuICAgIHRoaXMuY29sb3IuYSA9IHZhbHVlIC8gMTAwO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcih0aGlzLmNvbG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBicmlnaHRuZXNzIGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QnJpZ2h0bmVzcyh2YWx1ZSkge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi52ID0gdmFsdWUgLyAxMDA7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgY29sb3IgcGlja2VyLiBBIGJsYWNrIGNpcmNsZSBvdmVybGF5cyB0aGUgaHVlIGNpcmNsZSB0byBtaW1pYyB0aGUgYnJpZ2h0bmVzcyBkZWNyZWFzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZVBpY2tlcihyZ2JhID0gdGhpcy5jb2xvcikge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgfVxuICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuXG4gICAgY3R4LnB1dEltYWdlRGF0YSh0aGlzLmh1ZUNpcmNsZSwgMCwgMCk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgwLDAsMCxcIiArICgxIC0gaHN2LnYpICsgXCIpXCI7XG4gICAgY3R4LmNpcmNsZSh0aGlzLmNlbnRlckNvb3JkaW5hdGVzLngsIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSwgdGhpcy5yKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudmFsdWUgPSAxMDAgKiBoc3YudjtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IDEwMCAqIHJnYmEuYTtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgY3JlYXRlIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFNpemUoKSB7XG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLndpZHRoID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuaGVpZ2h0ID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhbGwgZG9tIGVsZW1lbnRzXG4gICAqIFRPRE86IGNsZWFudXAsIGxvdHMgb2Ygc2ltaWxhciBkb20gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5mcmFtZS5jbGFzc05hbWUgPSBcInZpcy1jb2xvci1waWNrZXJcIjtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsYXNzTmFtZSA9IFwidmlzLXNlbGVjdG9yXCI7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcblxuICAgIGlmICghdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KSB7XG4gICAgICBjb25zdCBub0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIik7XG4gICAgICBub0NhbnZhcy5zdHlsZS5jb2xvciA9IFwicmVkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5wYWRkaW5nID0gXCIxMHB4XCI7XG4gICAgICBub0NhbnZhcy5pbm5lclRleHQgPSBcIkVycm9yOiB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBIVE1MIGNhbnZhc1wiO1xuICAgICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5hcHBlbmRDaGlsZChub0NhbnZhcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgKGN0eC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAxKTtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXNcbiAgICAgICAgLmdldENvbnRleHQoXCIyZFwiKVxuICAgICAgICAuc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbG9yXCI7XG5cbiAgICB0aGlzLm9wYWNpdHlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eURpdi5jbGFzc05hbWUgPSBcInZpcy1vcGFjaXR5XCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0Rpdi5jbGFzc05hbWUgPSBcInZpcy1icmlnaHRuZXNzXCI7XG5cbiAgICB0aGlzLmFycm93RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmFycm93RGl2LmNsYXNzTmFtZSA9IFwidmlzLWFycm93XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS50eXBlID0gXCJyYW5nZVwiOyAvLyBOb3Qgc3VwcG9ydGVkIG9uIElFOVxuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWluID0gXCIwXCI7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5tYXggPSBcIjEwMFwiO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVE9ETzogQWRkIHNvbWUgZXJyb3IgaGFuZGxpbmcuXG4gICAgfVxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gXCIxMDBcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5jbGFzc05hbWUgPSBcInZpcy1yYW5nZVwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2LmFwcGVuZENoaWxkKHRoaXMub3BhY2l0eVJhbmdlKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuYXBwZW5kQ2hpbGQodGhpcy5icmlnaHRuZXNzUmFuZ2UpO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmlucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLWJyaWdodG5lc3NcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbC5pbm5lclRleHQgPSBcImJyaWdodG5lc3M6XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLW9wYWNpdHlcIjtcbiAgICB0aGlzLm9wYWNpdHlMYWJlbC5pbm5lclRleHQgPSBcIm9wYWNpdHk6XCI7XG5cbiAgICB0aGlzLm5ld0NvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmNsYXNzTmFtZSA9IFwidmlzLW5ldy1jb2xvclwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuaW5uZXJUZXh0ID0gXCJuZXdcIjtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1pbml0aWFsLWNvbG9yXCI7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuaW5uZXJUZXh0ID0gXCJpbml0aWFsXCI7XG5cbiAgICB0aGlzLmNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1jYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5pbm5lclRleHQgPSBcImNhbmNlbFwiO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9oaWRlLmJpbmQodGhpcywgZmFsc2UpO1xuXG4gICAgdGhpcy5hcHBseUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5pbm5lclRleHQgPSBcImFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fYXBwbHkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2F2ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5zYXZlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtc2F2ZVwiO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5pbm5lclRleHQgPSBcInNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24ub25jbGljayA9IHRoaXMuX3NhdmUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubG9hZEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5sb2FkQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtbG9hZFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5pbm5lclRleHQgPSBcImxvYWQgbGFzdFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fbG9hZExhc3QuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFycm93RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0xhYmVsKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uZXdDb2xvckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmluaXRpYWxDb2xvckRpdik7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY2FuY2VsQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYXBwbHlCdXR0b24pO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5zYXZlQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubG9hZEJ1dHRvbik7XG4gIH1cblxuICAvKipcbiAgICogYmluZCBoYW1tZXIgdG8gdGhlIGNvbG9yIHBpY2tlclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JpbmRIYW1tZXIoKSB7XG4gICAgdGhpcy5kcmFnID0ge307XG4gICAgdGhpcy5waW5jaCA9IHt9O1xuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lciQxKHRoaXMuY29sb3JQaWNrZXJDYW52YXMpO1xuICAgIHRoaXMuaGFtbWVyLmdldChcInBpbmNoXCIpLnNldCh7IGVuYWJsZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuaGFtbWVyLm9uKFwiaGFtbWVyLmlucHV0XCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmlzRmlyc3QpIHtcbiAgICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5zdGFydFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5tb3ZlXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbmVuZFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2VuZXJhdGUgdGhlIGh1ZSBjaXJjbGUuIFRoaXMgaXMgcmVsYXRpdmVseSBoZWF2eSAoMjAwbXMpIGFuZCBpcyBkb25lIG9ubHkgb25jZSBvbiB0aGUgZmlyc3QgdGltZSBpdCBpcyBzaG93bi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZW5lcmF0ZUh1ZUNpcmNsZSgpIHtcbiAgICBpZiAodGhpcy5nZW5lcmF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIDEpO1xuICAgICAgfVxuICAgICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG5cbiAgICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgaCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gZHJhdyBodWUgY2lyY2xlXG4gICAgICBsZXQgeCwgeSwgaHVlLCBzYXQ7XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiB3ICogMC41LCB5OiBoICogMC41IH07XG4gICAgICB0aGlzLnIgPSAwLjQ5ICogdztcbiAgICAgIGNvbnN0IGFuZ2xlQ29udmVydCA9ICgyICogTWF0aC5QSSkgLyAzNjA7XG4gICAgICBjb25zdCBoZmFjID0gMSAvIDM2MDtcbiAgICAgIGNvbnN0IHNmYWMgPSAxIC8gdGhpcy5yO1xuICAgICAgbGV0IHJnYjtcbiAgICAgIGZvciAoaHVlID0gMDsgaHVlIDwgMzYwOyBodWUrKykge1xuICAgICAgICBmb3IgKHNhdCA9IDA7IHNhdCA8IHRoaXMucjsgc2F0KyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy54ICsgc2F0ICogTWF0aC5zaW4oYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICB5ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy55ICsgc2F0ICogTWF0aC5jb3MoYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICByZ2IgPSBIU1ZUb1JHQihodWUgKiBoZmFjLCBzYXQgKiBzZmFjLCAxKTtcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2IoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIpXCI7XG4gICAgICAgICAgY3R4LmZpbGxSZWN0KHggLSAwLjUsIHkgLSAwLjUsIDIsIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsMSlcIjtcbiAgICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIHRoaXMuaHVlQ2lyY2xlID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIHNlbGVjdG9yLiBUaGlzIGlzIGNhbGxlZCBieSBoYW1tZXIgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlU2VsZWN0b3IoZXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jb2xvclBpY2tlckRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBsZWZ0ID0gZXZlbnQuY2VudGVyLnggLSByZWN0LmxlZnQ7XG4gICAgY29uc3QgdG9wID0gZXZlbnQuY2VudGVyLnkgLSByZWN0LnRvcDtcblxuICAgIGNvbnN0IGNlbnRlclkgPSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyRGl2LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBjZW50ZXJYID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRXaWR0aDtcblxuICAgIGNvbnN0IHggPSBsZWZ0IC0gY2VudGVyWDtcbiAgICBjb25zdCB5ID0gdG9wIC0gY2VudGVyWTtcblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMih4LCB5KTtcbiAgICBjb25zdCByYWRpdXMgPSAwLjk4ICogTWF0aC5taW4oTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpLCBjZW50ZXJYKTtcblxuICAgIGNvbnN0IG5ld1RvcCA9IE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclk7XG4gICAgY29uc3QgbmV3TGVmdCA9IE1hdGguc2luKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclg7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUudG9wID1cbiAgICAgIG5ld1RvcCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLmxlZnQgPVxuICAgICAgbmV3TGVmdCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRXaWR0aCArIFwicHhcIjtcblxuICAgIC8vIHNldCBjb2xvclxuICAgIGxldCBoID0gYW5nbGUgLyAoMiAqIE1hdGguUEkpO1xuICAgIGggPSBoIDwgMCA/IGggKyAxIDogaDtcbiAgICBjb25zdCBzID0gcmFkaXVzIC8gdGhpcy5yO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi5oID0gaDtcbiAgICBoc3YucyA9IHM7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuXG4gICAgLy8gdXBkYXRlIHByZXZpZXdzXG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmNvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gIH1cbn07XG5cbi8qKlxuICogV3JhcCBnaXZlbiB0ZXh0IChsYXN0IGFyZ3VtZW50KSBpbiBIVE1MIGVsZW1lbnRzIChhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cykuXG4gKlxuICogQHBhcmFtIHsuLi5hbnl9IHJlc3QgLSBMaXN0IG9mIHRhZyBuYW1lcyBmb2xsb3dlZCBieSBpbm5lciB0ZXh0LlxuICogQHJldHVybnMgQW4gZWxlbWVudCBvciBhIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gd3JhcEluVGFnKC4uLnJlc3QpIHtcbiAgaWYgKHJlc3QubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cy5cIik7XG4gIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVzdFswXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmVzdFswXSk7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoLi4ucmVzdC5zbGljZSgxKSkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHdheSB0aGlzIHdvcmtzIGlzIGZvciBhbGwgcHJvcGVydGllcyBvZiB0aGlzLnBvc3NpYmxlIG9wdGlvbnMsIHlvdSBjYW4gc3VwcGx5IHRoZSBwcm9wZXJ0eSBuYW1lIGluIGFueSBmb3JtIHRvIGxpc3QgdGhlIG9wdGlvbnMuXG4gKiBCb29sZWFuIG9wdGlvbnMgYXJlIHJlY29nbmlzZWQgYXMgQm9vbGVhblxuICogTnVtYmVyIG9wdGlvbnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtkZWZhdWx0IHZhbHVlLCBtaW4gdmFsdWUsIG1heCB2YWx1ZSwgc3RlcHNpemVdXG4gKiBDb2xvcnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFsnY29sb3InLCAnI2ZmZmZmZiddXG4gKiBTdHJpbmdzIHdpdGggc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtvcHRpb24xLCBvcHRpb24yLCBvcHRpb24zLCAuLl1cbiAqXG4gKiBUaGUgb3B0aW9ucyBhcmUgbWF0Y2hlZCB3aXRoIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiBlYWNoIG9mIHRoZSBtb2R1bGVzIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYXJlXG4gKi9cbmxldCBDb25maWd1cmF0b3IkMSA9IGNsYXNzIENvbmZpZ3VyYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50TW9kdWxlICAgICAgICB8IHRoZSBsb2NhdGlvbiB3aGVyZSBwYXJlbnRNb2R1bGUuc2V0T3B0aW9ucygpIGNhbiBiZSBjYWxsZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRDb250YWluZXIgICAgfCB0aGUgZGVmYXVsdCBjb250YWluZXIgb2YgdGhlIG1vZHVsZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlndXJlT3B0aW9ucyAgICB8IHRoZSBmdWxseSBjb25maWd1cmVkIGFuZCBwcmVkZWZpbmVkIG9wdGlvbnMgc2V0IGZvdW5kIGluIGFsbE9wdGlvbnMuanNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBpeGVsUmF0aW8gICAgICAgICAgfCBjYW52YXMgcGl4ZWwgcmF0aW9cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGlkZU9wdGlvbiAgICAgICAgfCBjdXN0b20gbG9naWMgdG8gZHluYW1pY2FsbHkgaGlkZSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnRNb2R1bGUsXG4gICAgZGVmYXVsdENvbnRhaW5lcixcbiAgICBjb25maWd1cmVPcHRpb25zLFxuICAgIHBpeGVsUmF0aW8gPSAxLFxuICAgIGhpZGVPcHRpb24gPSAoKSA9PiBmYWxzZVxuICApIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudE1vZHVsZTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG4gICAgdGhpcy5jb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyO1xuICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaGlkZU9wdGlvbiA9IGhpZGVPcHRpb247XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5wb3B1cENvdW50ZXIgPSAwO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgIGNvbnRhaW5lcjogdW5kZWZpbmVkLFxuICAgICAgc2hvd0J1dHRvbjogdHJ1ZSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuY29uZmlndXJlT3B0aW9ucyA9IGNvbmZpZ3VyZU9wdGlvbnM7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0ge307XG4gICAgdGhpcy5kb21FbGVtZW50cyA9IFtdO1xuICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB0aGlzLnBvcHVwTGltaXQgPSA1O1xuICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgdGhpcy5jb2xvclBpY2tlciA9IG5ldyBDb2xvclBpY2tlciQxKHBpeGVsUmF0aW8pO1xuICAgIHRoaXMud3JhcHBlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoIGFsbCBvcHRpb25zLlxuICAgKiBCZWNhdXNlIGFsbCBtb2R1bGVzIHBhcnNlIHRoZWlyIG9wdGlvbnMgYnkgdGhlbXNlbHZlcywgd2UganVzdCB1c2UgdGhlaXIgb3B0aW9ucy4gV2UgY29weSB0aGVtIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXNldCB0aGUgcG9wdXAgaGlzdG9yeSBiZWNhdXNlIHRoZSBpbmRpY2VzIG1heSBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuXG4gICAgICBsZXQgZW5hYmxlZCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuam9pbigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbnMgY2Fubm90IGJlIG51bGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0J1dHRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3dCdXR0b24gPSBvcHRpb25zLnNob3dCdXR0b247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgIGVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICBlbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICB9XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kdWxlT3B0aW9uc1xuICAgKi9cbiAgc2V0TW9kdWxlT3B0aW9ucyhtb2R1bGVPcHRpb25zKSB7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0gbW9kdWxlT3B0aW9ucztcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NyZWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMgPSBbXTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMub3B0aW9ucy5maWx0ZXI7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gdGhpcy5jb25maWd1cmVPcHRpb25zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlndXJlT3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICAgICAgc2hvdyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc2hvdyA9IGZpbHRlcihvcHRpb24sIFtdKTtcbiAgICAgICAgICBzaG93ID1cbiAgICAgICAgICAgIHNob3cgfHxcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnNbb3B0aW9uXSwgW29wdGlvbl0sIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIuaW5kZXhPZihvcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIGxpbmVicmVhayBiZXR3ZWVuIGNhdGVnb3JpZXNcbiAgICAgICAgICBpZiAoY291bnRlciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VJdGVtKFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYSBoZWFkZXIgZm9yIHRoZSBjYXRlZ29yeVxuICAgICAgICAgIHRoaXMuX21ha2VIZWFkZXIob3B0aW9uKTtcblxuICAgICAgICAgIC8vIGdldCB0aGUgc3ViIG9wdGlvbnNcbiAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dKTtcbiAgICAgICAgfVxuICAgICAgICBjb3VudGVyKys7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX21ha2VCdXR0b24oKTtcbiAgICB0aGlzLl9wdXNoKCk7XG4gICAgLy9+IHRoaXMuY29sb3JQaWNrZXIuaW5zZXJ0VG8odGhpcy5jb250YWluZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRyYXcgYWxsIERPTSBlbGVtZW50cyBvbiB0aGUgc2NyZWVuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHVzaCgpIHtcbiAgICB0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMud3JhcHBlci5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uLXdyYXBwZXJcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuZG9tRWxlbWVudHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX3Nob3dQb3B1cElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogZGVsZXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5yZW1vdmVDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53cmFwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcblxuICAgIHRoaXMuX3JlbW92ZVBvcHVwKCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBhY3R1YWxPcHRpb25zIGlmIGl0IGV4aXN0c1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0VmFsdWUocGF0aCkge1xuICAgIGxldCBiYXNlID0gdGhpcy5tb2R1bGVPcHRpb25zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJhc2VbcGF0aFtpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBiYXNlID0gYmFzZVtwYXRoW2ldXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGwgb3B0aW9uIGVsZW1lbnRzIGFyZSB3cmFwcGVkIGluIGFuIGl0ZW1cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnQ+fSBkb21FbGVtZW50c1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VJdGVtKHBhdGgsIC4uLmRvbUVsZW1lbnRzKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBpdGVtLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1pdGVtIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgICBkb21FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogaGVhZGVyIGZvciBtYWpvciBzdWJqZWN0c1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VIZWFkZXIobmFtZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1oZWFkZXJcIjtcbiAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZTtcbiAgICB0aGlzLl9tYWtlSXRlbShbXSwgZGl2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgbGFiZWwsIGlmIGl0IGlzIGFuIG9iamVjdCBsYWJlbCwgaXQgZ2V0cyBkaWZmZXJlbnQgc3R5bGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RMYWJlbFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUxhYmVsKG5hbWUsIHBhdGgsIG9iamVjdExhYmVsID0gZmFsc2UpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWxhYmVsIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgaWYgKG9iamVjdExhYmVsID09PSB0cnVlKSB7XG4gICAgICB3aGlsZSAoZGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIGRpdi5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoXCJpXCIsIFwiYlwiLCBuYW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBuYW1lICsgXCI6XCI7XG4gICAgfVxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGRyb3Bkb3duIGxpc3QgZm9yIG11bHRpcGxlIHBvc3NpYmxlIHN0cmluZyBvcHRvaW5zXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgIHNlbGVjdC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctc2VsZWN0XCI7XG4gICAgbGV0IHNlbGVjdGVkVmFsdWUgPSAwO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYXJyLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gYXJyLmluZGV4T2YodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgb3B0aW9uLnZhbHVlID0gYXJyW2ldO1xuICAgICAgaWYgKGkgPT09IHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gXCJzZWxlY3RlZFwiO1xuICAgICAgfVxuICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IGFycltpXTtcbiAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBzZWxlY3Qub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBzZWxlY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSByYW5nZSBvYmplY3QgZm9yIG51bWVyaWMgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VSYW5nZShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXJyWzBdO1xuICAgIGNvbnN0IG1pbiA9IGFyclsxXTtcbiAgICBjb25zdCBtYXggPSBhcnJbMl07XG4gICAgY29uc3Qgc3RlcCA9IGFyclszXTtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICByYW5nZS5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctcmFuZ2VcIjtcbiAgICB0cnkge1xuICAgICAgcmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gbm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHJhbmdlLm1pbiA9IG1pbjtcbiAgICAgIHJhbmdlLm1heCA9IG1heDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICByYW5nZS5zdGVwID0gc3RlcDtcblxuICAgIC8vIHNldCB1cCB0aGUgcG9wdXAgc2V0dGluZ3MgaW4gY2FzZSB0aGV5IGFyZSBuZWVkZWQuXG4gICAgbGV0IHBvcHVwU3RyaW5nID0gXCJcIjtcbiAgICBsZXQgcG9wdXBWYWx1ZSA9IDA7XG5cbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmFjdG9yID0gMS4yO1xuICAgICAgaWYgKHZhbHVlIDwgMCAmJiB2YWx1ZSAqIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgKiBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIC8gZmFjdG9yIDwgbWluKSB7XG4gICAgICAgIHJhbmdlLm1pbiA9IE1hdGguY2VpbCh2YWx1ZSAvIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5taW47XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAqIGZhY3RvciA+IG1heCAmJiBtYXggIT09IDEpIHtcbiAgICAgICAgcmFuZ2UubWF4ID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1heDtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfVxuICAgICAgcmFuZ2UudmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgaW5wdXQuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlaW5wdXRcIjtcbiAgICBpbnB1dC52YWx1ZSA9IHJhbmdlLnZhbHVlO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgbWUuX3VwZGF0ZShOdW1iZXIodGhpcy52YWx1ZSksIHBhdGgpO1xuICAgIH07XG4gICAgcmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgcmFuZ2UsIGlucHV0KTtcblxuICAgIC8vIGlmIGEgcG9wdXAgaXMgbmVlZGVkIEFORCBpdCBoYXMgbm90IGJlZW4gc2hvd24gZm9yIHRoaXMgdmFsdWUsIHNob3cgaXQuXG4gICAgaWYgKHBvcHVwU3RyaW5nICE9PSBcIlwiICYmIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gIT09IHBvcHVwVmFsdWUpIHtcbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gPSBwb3B1cFZhbHVlO1xuICAgICAgdGhpcy5fc2V0dXBQb3B1cChwb3B1cFN0cmluZywgaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGJ1dHRvbiBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0J1dHRvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZ2VuZXJhdGVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvblwiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uaW5uZXJUZXh0ID0gXCJnZW5lcmF0ZSBvcHRpb25zXCI7XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9wcmludE9wdGlvbnMoKTtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3ZlciA9ICgpID0+IHtcbiAgICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiBob3ZlclwiO1xuICAgICAgfTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLm9ubW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLW9wdGlvbi1jb250YWluZXJcIjtcblxuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKHRoaXMub3B0aW9uc0NvbnRhaW5lcik7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goZ2VuZXJhdGVCdXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwcmVwYXJlIHRoZSBwb3B1cFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldHVwUG9wdXAoc3RyaW5nLCBpbmRleCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5wb3B1cENvdW50ZXIgPCB0aGlzLnBvcHVwTGltaXRcbiAgICApIHtcbiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBkaXYuaWQgPSBcInZpcy1jb25maWd1cmF0aW9uLXBvcHVwXCI7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmlubmVyVGV4dCA9IHN0cmluZztcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyICs9IDE7XG4gICAgICB0aGlzLnBvcHVwRGl2ID0geyBodG1sOiBkaXYsIGluZGV4OiBpbmRleCB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmUgdGhlIHBvcHVwIGZyb20gdGhlIGRvbVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZVBvcHVwKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmhpZGVUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBwb3B1cCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd1BvcHVwSWZOZWVkZWQoKSB7XG4gICAgaWYgKHRoaXMucG9wdXBEaXYuaHRtbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudHNbdGhpcy5wb3B1cERpdi5pbmRleF07XG4gICAgICBjb25zdCByZWN0ID0gY29ycmVzcG9uZGluZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5zdHlsZS50b3AgPSByZWN0LnRvcCAtIDMwICsgXCJweFwiOyAvLyAzMCBpcyB0aGUgaGVpZ2h0O1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwRGl2Lmh0bWwpO1xuICAgICAgdGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICB9LCAxNTAwKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuZGVsZXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfSwgMTgwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBjaGVja2JveCBmb3IgYm9vbGVhbiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQ2hlY2tib3goZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy5jaGVja2VkLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgY2hlY2tib3gpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSB0ZXh0IGlucHV0IGZpZWxkIGZvciBzdHJpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZVRleHRJbnB1dChkZWZhdWx0VmFsdWUsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgY2hlY2tib3gudHlwZSA9IFwidGV4dFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy10ZXh0XCI7XG4gICAgY2hlY2tib3gudmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy52YWx1ZSwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY29sb3IgZmllbGQgd2l0aCBhIGNvbG9yIHBpY2tlciBmb3IgY29sb3IgZmllbGRzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRDb2xvciA9IGFyclsxXTtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICE9PSBcIm5vbmVcIikge1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jb2xvckJsb2NrXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9jayBub25lXCI7XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbG9yIDogdmFsdWU7XG4gICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogdXNlZCBieSB0aGUgY29sb3IgYnV0dG9ucyB0byBjYWxsIHRoZSBjb2xvciBwaWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBkaXZcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpIHtcbiAgICAvLyBjbGVhciB0aGUgY2FsbGJhY2sgZnJvbSB0aGlzIGRpdlxuICAgIGRpdi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKGRpdik7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zaG93KCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENvbG9yKHZhbHVlKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldFVwZGF0ZUNhbGxiYWNrKChjb2xvcikgPT4ge1xuICAgICAgY29uc3QgY29sb3JTdHJpbmcgPVxuICAgICAgICBcInJnYmEoXCIgKyBjb2xvci5yICsgXCIsXCIgKyBjb2xvci5nICsgXCIsXCIgKyBjb2xvci5iICsgXCIsXCIgKyBjb2xvci5hICsgXCIpXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JTdHJpbmc7XG4gICAgICB0aGlzLl91cGRhdGUoY29sb3JTdHJpbmcsIHBhdGgpO1xuICAgIH0pO1xuXG4gICAgLy8gb24gY2xvc2Ugb2YgdGhlIGNvbG9ycGlja2VyLCByZXN0b3JlIHRoZSBjYWxsYmFjay5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENsb3NlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogcGFyc2UgYW4gb2JqZWN0IGFuZCBkcmF3IHRoZSBjb3JyZWN0IGl0ZW1zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtBcnJheX0gW3BhdGg9W11dICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tPbmx5PWZhbHNlXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVPYmplY3Qob2JqLCBwYXRoID0gW10sIGNoZWNrT25seSA9IGZhbHNlKSB7XG4gICAgbGV0IHNob3cgPSBmYWxzZTtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCB2aXNpYmxlSW5TZXQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHN1Yk9iaiBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBzdWJPYmopKSB7XG4gICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICBjb25zdCBpdGVtID0gb2JqW3N1Yk9ial07XG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgc3ViT2JqKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIoc3ViT2JqLCBwYXRoKTtcblxuICAgICAgICAgIC8vIGlmIG5lZWRlZCB3ZSBtdXN0IGdvIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICAgICAgaWYgKHNob3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGl0ZW0pICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICAgICAgICBpdGVtIGluc3RhbmNlb2YgT2JqZWN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgIHNob3cgPSB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGNoZWNrT25seSA9PT0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdmlzaWJsZUluU2V0ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKG5ld1BhdGgpO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycmF5KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlVGV4dElucHV0KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIHNraXAgdGhlIG9wdGlvbnMgdGhhdCBhcmUgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5oaWRlT3B0aW9uKHBhdGgsIHN1Yk9iaiwgdGhpcy5tb2R1bGVPcHRpb25zKSkge1xuICAgICAgICAgICAgICAvLyBpbml0aWFsbHkgY29sbGFwc2Ugb3B0aW9ucyB3aXRoIGFuIGRpc2FibGVkIGVuYWJsZWQgb3B0aW9uLlxuICAgICAgICAgICAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmFibGVkUGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShuZXdQYXRoLCBcImVuYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoZW5hYmxlZFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChlbmFibGVkVmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgICB2aXNpYmxlSW5TZXQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlQ2hlY2tib3goaXRlbSwgZW5hYmxlZFZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwoc3ViT2JqLCBuZXdQYXRoLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdChpdGVtLCBuZXdQYXRoKSB8fCB2aXNpYmxlSW5TZXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImRvbnQga25vdyBob3cgdG8gaGFuZGxlXCIsIGl0ZW0sIHN1Yk9iaiwgbmV3UGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlSW5TZXQ7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSBhcnJheSB0eXBlIG9mIG9wdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUFycmF5KGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIiAmJiBhcnJbMF0gPT09IFwiY29sb3JcIikge1xuICAgICAgdGhpcy5fbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzFdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9tYWtlRHJvcGRvd24oYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogTnVtYmVyKHZhbHVlKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGVkIHRvIHVwZGF0ZSB0aGUgbmV0d29yayB3aXRoIHRoZSBuZXcgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGUodmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBhcmVudC5ib2R5ICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIgJiZcbiAgICAgIHRoaXMucGFyZW50LmJvZHkuZW1pdHRlci5lbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdChcImNvbmZpZ0NoYW5nZVwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5wYXJlbnQuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IGJvb2xlYW59IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHt7fX0gb3B0aW9uc09ialxuICAgKiBAcmV0dXJucyB7e319XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCwgb3B0aW9uc09iaiA9IHt9KSB7XG4gICAgbGV0IHBvaW50ZXIgPSBvcHRpb25zT2JqO1xuXG4gICAgLy8gd2hlbiBkcm9wZG93biBib3hlcyBjYW4gYmUgc3RyaW5nIG9yIGJvb2xlYW4sIHdlIHR5cGVjYXN0IGl0IGludG8gY29ycmVjdCB0eXBlc1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdmFsdWU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXRoW2ldICE9PSBcImdsb2JhbFwiKSB7XG4gICAgICAgIGlmIChwb2ludGVyW3BhdGhbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBhdGgubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHBvaW50ZXIgPSBwb2ludGVyW3BhdGhbaV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvaW50ZXJbcGF0aFtpXV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc09iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByaW50T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG5cbiAgICB3aGlsZSAodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm9wdGlvbnNDb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChcbiAgICAgIHdyYXBJblRhZyhcInByZVwiLCBcImNvbnN0IG9wdGlvbnMgPSBcIiArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMsIG51bGwsIDIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge3t9fSBvcHRpb25zXG4gICAqL1xuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hhbmdlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2NvbnN0cnVjdE9wdGlvbnMoXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0udmFsdWUsXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0ucGF0aCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn07XG5cbi8qKlxuICogUG9wdXAgaXMgYSBjbGFzcyB0byBjcmVhdGUgYSBwb3B1cCB3aW5kb3cgd2l0aCBzb21lIHRleHRcbiAqL1xubGV0IFBvcHVwJDEgPSBjbGFzcyBQb3B1cCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgICAgICBUaGUgY29udGFpbmVyIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvdmVyZmxvd01ldGhvZCAgSG93IHRoZSBwb3B1cCBzaG91bGQgYWN0IHRvIG92ZXJmbG93aW5nICgnZmxpcCcgb3IgJ2NhcCcpXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIG92ZXJmbG93TWV0aG9kKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5vdmVyZmxvd01ldGhvZCA9IG92ZXJmbG93TWV0aG9kIHx8IFwiY2FwXCI7XG5cbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5wYWRkaW5nID0gNTtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBmcmFtZVxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtdG9vbHRpcFwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4ICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcG9wdXAgd2luZG93XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgc2V0UG9zaXRpb24oeCwgeSkge1xuICAgIHRoaXMueCA9IHBhcnNlSW50KHgpO1xuICAgIHRoaXMueSA9IHBhcnNlSW50KHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29udGVudCBmb3IgdGhlIHBvcHVwIHdpbmRvdy4gVGhpcyBjYW4gYmUgSFRNTCBjb2RlIG9yIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgRWxlbWVudH0gY29udGVudFxuICAgKi9cbiAgc2V0VGV4dChjb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICB3aGlsZSAodGhpcy5mcmFtZS5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0cmluZyBjb250YWluaW5nIGxpdGVyYWwgdGV4dCwgZWxlbWVudCBoYXMgdG8gYmUgdXNlZCBmb3IgSFRNTCBkdWUgdG9cbiAgICAgIC8vIFhTUyByaXNrcyBhc3NvY2lhdGVkIHdpdGggaW5uZXJIVE1MIChpLmUuIHByZXZlbnQgWFNTIGJ5IGFjY2lkZW50KS5cbiAgICAgIHRoaXMuZnJhbWUuaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgd2luZG93XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvU2hvd10gICAgU2hvdyBvciBoaWRlIHRoZSB3aW5kb3dcbiAgICovXG4gIHNob3coZG9TaG93KSB7XG4gICAgaWYgKGRvU2hvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb1Nob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkb1Nob3cgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmZyYW1lLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudFdpZHRoO1xuXG4gICAgICBsZXQgbGVmdCA9IDAsXG4gICAgICAgIHRvcCA9IDA7XG5cbiAgICAgIGlmICh0aGlzLm92ZXJmbG93TWV0aG9kID09IFwiZmxpcFwiKSB7XG4gICAgICAgIGxldCBpc0xlZnQgPSBmYWxzZSxcbiAgICAgICAgICBpc1RvcCA9IHRydWU7IC8vIFdoZXJlIGFyb3VuZCB0aGUgcG9zaXRpb24gaXQncyBsb2NhdGVkXG5cbiAgICAgICAgaWYgKHRoaXMueSAtIGhlaWdodCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzVG9wID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy54ICsgd2lkdGggPiBtYXhXaWR0aCAtIHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzTGVmdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMZWZ0KSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMueCAtIHdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUb3ApIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIGlmICh0b3AgKyBoZWlnaHQgKyB0aGlzLnBhZGRpbmcgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICB0b3AgPSBtYXhIZWlnaHQgLSBoZWlnaHQgLSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvcCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIHRvcCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIGlmIChsZWZ0ICsgd2lkdGggKyB0aGlzLnBhZGRpbmcgPiBtYXhXaWR0aCkge1xuICAgICAgICAgIGxlZnQgPSBtYXhXaWR0aCAtIHdpZHRoIC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWZ0IDwgdGhpcy5wYWRkaW5nKSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcbiAgICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZSk7IC8vIFJlbW92ZSBlbGVtZW50IGZyb20gRE9NXG4gIH1cbn07XG5cbmxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5sZXQgYWxsT3B0aW9ucztcblxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDEgPSBcImJhY2tncm91bmQ6ICNGRmVlZWU7IGNvbG9yOiAjZGQwMDAwXCI7XG5cbi8qKlxuICogIFVzZWQgdG8gdmFsaWRhdGUgb3B0aW9ucy5cbiAqL1xubGV0IFZhbGlkYXRvciQxID0gY2xhc3MgVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWJPYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBzdWJPYmplY3QpIHtcbiAgICBlcnJvckZvdW5kID0gZmFsc2U7XG4gICAgYWxsT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgbGV0IHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9ucztcbiAgICBpZiAoc3ViT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9uc1tzdWJPYmplY3RdO1xuICAgIH1cbiAgICBWYWxpZGF0b3IucGFyc2Uob3B0aW9ucywgdXNlZE9wdGlvbnMsIFtdKTtcbiAgICByZXR1cm4gZXJyb3JGb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIHRyYXZlcnNlIGFuIG9iamVjdCByZWN1cnNpdmVseSBhbmQgY2hlY2sgZXZlcnkgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICAgIFZhbGlkYXRvci5jaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBldmVyeSB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbCB0aGUgcGFyc2UgZnVuY3Rpb24gb24gdGhhdCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpIHtcbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIFZhbGlkYXRvci5nZXRTdWdnZXN0aW9uKG9wdGlvbiwgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlZmVyZW5jZU9wdGlvbiA9IG9wdGlvbjtcbiAgICBsZXQgaXNfb2JqZWN0ID0gdHJ1ZTtcblxuICAgIGlmIChcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnNbb3B0aW9uXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICByZWZlcmVuY2VPcHRpb25zLl9fYW55X18gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTk9URTogVGhpcyBvbmx5IHRyaWdnZXJzIGlmIHRoZSBfX2FueV9fIGlzIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgLy8gICAgICAgVEhBVCdTIEEgUkVBTExZIEJBRCBQTEFDRSBUTyBBTExPVyBJVCEhISFcbiAgICAgIC8vIFRPRE86IEV4YW1pbmUgaWYgbmVlZGVkLCByZW1vdmUgaWYgcG9zc2libGVcblxuICAgICAgLy8gX19hbnlfXyBpcyBhIHdpbGRjYXJkLiBBbnkgdmFsdWUgaXMgYWNjZXB0ZWQgYW5kIHdpbGwgYmUgZnVydGhlciBhbmFseXNlZCBieSByZWZlcmVuY2UuXG4gICAgICByZWZlcmVuY2VPcHRpb24gPSBcIl9fYW55X19cIjtcblxuICAgICAgLy8gaWYgdGhlIGFueS1zdWJncm91cCBpcyBub3QgYSBwcmVkZWZpbmVkIG9iamVjdCBpbiB0aGUgY29uZmlndXJhdG9yLFxuICAgICAgLy8gd2UgZG8gbm90IGxvb2sgZGVlcGVyIGludG8gdGhlIG9iamVjdC5cbiAgICAgIGlzX29iamVjdCA9IFZhbGlkYXRvci5nZXRUeXBlKG9wdGlvbnNbb3B0aW9uXSkgPT09IFwib2JqZWN0XCI7XG4gICAgfVxuXG4gICAgbGV0IHJlZk9wdGlvbk9iaiA9IHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXTtcbiAgICBpZiAoaXNfb2JqZWN0ICYmIHJlZk9wdGlvbk9iai5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWZPcHRpb25PYmogPSByZWZPcHRpb25PYmouX190eXBlX187XG4gICAgfVxuXG4gICAgVmFsaWRhdG9yLmNoZWNrRmllbGRzKFxuICAgICAgb3B0aW9uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb24sXG4gICAgICByZWZPcHRpb25PYmosXG4gICAgICBwYXRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIG9wdGlvbiAgICAgICAgICAgfCB0aGUgb3B0aW9uIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgb3B0aW9ucyAgICAgICAgICB8IFRoZSBzdXBwbGllZCBvcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge29iamVjdH0gIHJlZmVyZW5jZU9wdGlvbnMgfCBUaGUgcmVmZXJlbmNlIG9wdGlvbnMgY29udGFpbmluZyBhbGwgb3B0aW9ucyBhbmQgdGhlaXIgYWxsb3dlZCBmb3JtYXRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgcmVmZXJlbmNlT3B0aW9uICB8IFVzdWFsbHkgdGhpcyBpcyB0aGUgc2FtZSBhcyBvcHRpb24sIGV4Y2VwdCB3aGVuIGhhbmRsaW5nIGFuIF9fYW55X18gdGFnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZk9wdGlvbk9iaiAgICAgfCBUaGlzIGlzIHRoZSB0eXBlIG9iamVjdCBmcm9tIHRoZSByZWZlcmVuY2Ugb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSAgIHBhdGggICAgICAgICAgICAgfCB3aGVyZSBpbiB0aGUgb2JqZWN0IGlzIHRoZSBvcHRpb25cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNoZWNrRmllbGRzKFxuICAgIG9wdGlvbixcbiAgICBvcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgIHJlZk9wdGlvbk9iaixcbiAgICBwYXRoXG4gICkge1xuICAgIGNvbnN0IGxvZyA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjXCIgKyBtZXNzYWdlICsgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKSxcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvblR5cGUgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pO1xuICAgIGNvbnN0IHJlZk9wdGlvblR5cGUgPSByZWZPcHRpb25PYmpbb3B0aW9uVHlwZV07XG5cbiAgICBpZiAocmVmT3B0aW9uVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpZiB0aGUgdHlwZSBpcyBjb3JyZWN0LCB3ZSBjaGVjayBpZiBpdCBpcyBzdXBwb3NlZCB0byBiZSBvbmUgb2YgYSBmZXcgc2VsZWN0IHZhbHVlc1xuICAgICAgaWYgKFxuICAgICAgICBWYWxpZGF0b3IuZ2V0VHlwZShyZWZPcHRpb25UeXBlKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgIHJlZk9wdGlvblR5cGUuaW5kZXhPZihvcHRpb25zW29wdGlvbl0pID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICAnSW52YWxpZCBvcHRpb24gZGV0ZWN0ZWQgaW4gXCInICtcbiAgICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgICAnXCIuJyArXG4gICAgICAgICAgICBcIiBBbGxvd2VkIHZhbHVlcyBhcmU6XCIgK1xuICAgICAgICAgICAgVmFsaWRhdG9yLnByaW50KHJlZk9wdGlvblR5cGUpICtcbiAgICAgICAgICAgICcgbm90IFwiJyArXG4gICAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICAgJ1wiLiAnXG4gICAgICAgICk7XG4gICAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25UeXBlID09PSBcIm9iamVjdFwiICYmIHJlZmVyZW5jZU9wdGlvbiAhPT0gXCJfX2FueV9fXCIpIHtcbiAgICAgICAgcGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcHRpb24pO1xuICAgICAgICBWYWxpZGF0b3IucGFyc2UoXG4gICAgICAgICAgb3B0aW9uc1tvcHRpb25dLFxuICAgICAgICAgIHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWZPcHRpb25PYmpbXCJhbnlcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdHlwZSBvZiB0aGUgZmllbGQgaXMgaW5jb3JyZWN0IGFuZCB0aGUgZmllbGQgY2Fubm90IGJlIGFueVxuICAgICAgbG9nKFxuICAgICAgICAnSW52YWxpZCB0eXBlIHJlY2VpdmVkIGZvciBcIicgK1xuICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgJ1wiLiBFeHBlY3RlZDogJyArXG4gICAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKHJlZk9wdGlvbk9iaikpICtcbiAgICAgICAgICBcIi4gUmVjZWl2ZWQgW1wiICtcbiAgICAgICAgICBvcHRpb25UeXBlICtcbiAgICAgICAgICAnXSBcIicgK1xuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSArXG4gICAgICAgICAgJ1wiJ1xuICAgICAgKTtcbiAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcgfCBBcnJheS48bnVtYmVyPiB8IERhdGUgfCBOb2RlIHwgTW9tZW50IHwgdW5kZWZpbmVkIHwgbnVsbH0gb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRUeXBlKG9iamVjdCkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xuXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Lm5vZGVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFwiZG9tXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Ll9pc0FNb21lbnRPYmplY3QgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIFwibW9tZW50XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRTdWdnZXN0aW9uKG9wdGlvbiwgb3B0aW9ucywgcGF0aCkge1xuICAgIGNvbnN0IGxvY2FsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCBmYWxzZSk7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBhbGxPcHRpb25zLCBbXSwgdHJ1ZSk7XG5cbiAgICBjb25zdCBsb2NhbFNlYXJjaFRocmVzaG9sZCA9IDg7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoVGhyZXNob2xkID0gNDtcblxuICAgIGxldCBtc2c7XG4gICAgaWYgKGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgJ1BlcmhhcHMgaXQgd2FzIGluY29tcGxldGU/IERpZCB5b3UgbWVhbjogXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guaW5kZXhNYXRjaCArXG4gICAgICAgICdcIj9cXG5cXG4nO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBnbG9iYWxTZWFyY2guZGlzdGFuY2UgPD0gZ2xvYmFsU2VhcmNoVGhyZXNob2xkICYmXG4gICAgICBsb2NhbFNlYXJjaC5kaXN0YW5jZSA+IGdsb2JhbFNlYXJjaC5kaXN0YW5jZVxuICAgICkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgXCJQZXJoYXBzIGl0IHdhcyBtaXNwbGFjZWQ/IE1hdGNoaW5nIG9wdGlvbiBmb3VuZCBhdDogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihcbiAgICAgICAgICBnbG9iYWxTZWFyY2gucGF0aCxcbiAgICAgICAgICBnbG9iYWxTZWFyY2guY2xvc2VzdE1hdGNoLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxvY2FsU2VhcmNoLmRpc3RhbmNlIDw9IGxvY2FsU2VhcmNoVGhyZXNob2xkKSB7XG4gICAgICBtc2cgPVxuICAgICAgICAnLiBEaWQgeW91IG1lYW4gXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guY2xvc2VzdE1hdGNoICtcbiAgICAgICAgJ1wiPycgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPVxuICAgICAgICBcIi4gRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZTogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnQoT2JqZWN0LmtleXMob3B0aW9ucykpICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6IFwiJyArIG9wdGlvbiArICdcIicgKyBtc2csXG4gICAgICBWQUxJREFUT1JfUFJJTlRfU1RZTEUkMVxuICAgICk7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2UgdGhlIG9wdGlvbnMgaW4gc2VhcmNoIGZvciBhIG1hdGNoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWN1cnNpdmU9ZmFsc2VdXG4gICAqIEByZXR1cm5zIHt7Y2xvc2VzdE1hdGNoOiBzdHJpbmcsIHBhdGg6IEFycmF5LCBkaXN0YW5jZTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCByZWN1cnNpdmUgPSBmYWxzZSkge1xuICAgIGxldCBtaW4gPSAxZTk7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaCA9IFwiXCI7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaFBhdGggPSBbXTtcbiAgICBjb25zdCBsb3dlckNhc2VPcHRpb24gPSBvcHRpb24udG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgaW5kZXhNYXRjaCA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IG9wIGluIG9wdGlvbnMpIHtcbiAgICAgIGxldCBkaXN0YW5jZTtcbiAgICAgIGlmIChvcHRpb25zW29wXS5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkICYmIHJlY3Vyc2l2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBWYWxpZGF0b3IuZmluZEluT3B0aW9ucyhcbiAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgb3B0aW9uc1tvcF0sXG4gICAgICAgICAgY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIG9wKVxuICAgICAgICApO1xuICAgICAgICBpZiAobWluID4gcmVzdWx0LmRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gcmVzdWx0LmNsb3Nlc3RNYXRjaDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gcmVzdWx0LnBhdGg7XG4gICAgICAgICAgbWluID0gcmVzdWx0LmRpc3RhbmNlO1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSByZXN1bHQuaW5kZXhNYXRjaDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihsb3dlckNhc2VPcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSBvcDtcbiAgICAgICAgfVxuICAgICAgICBkaXN0YW5jZSA9IFZhbGlkYXRvci5sZXZlbnNodGVpbkRpc3RhbmNlKG9wdGlvbiwgb3ApO1xuICAgICAgICBpZiAobWluID4gZGlzdGFuY2UpIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2ggPSBvcDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gY29weUFycmF5KHBhdGgpO1xuICAgICAgICAgIG1pbiA9IGRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZXN0TWF0Y2g6IGNsb3Nlc3RNYXRjaCxcbiAgICAgIHBhdGg6IGNsb3Nlc3RNYXRjaFBhdGgsXG4gICAgICBkaXN0YW5jZTogbWluLFxuICAgICAgaW5kZXhNYXRjaDogaW5kZXhNYXRjaCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiwgcHJlZml4ID0gXCJQcm9ibGVtIHZhbHVlIGZvdW5kIGF0OiBcXG5cIikge1xuICAgIGxldCBzdHIgPSBcIlxcblxcblwiICsgcHJlZml4ICsgXCJvcHRpb25zID0ge1xcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpICsgMTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gcGF0aFtpXSArIFwiOiB7XFxuXCI7XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggKyAxOyBqKyspIHtcbiAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgfVxuICAgIHN0ciArPSBvcHRpb24gKyBcIlxcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggLSBpOyBqKyspIHtcbiAgICAgICAgc3RyICs9IFwiICBcIjtcbiAgICAgIH1cbiAgICAgIHN0ciArPSBcIn1cXG5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0ciArIFwiXFxuXFxuXCI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHByaW50KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3B0aW9ucylcbiAgICAgIC5yZXBsYWNlKC8oXCIpfChcXFspfChcXF0pfCgsXCJfX3R5cGVfX1wiKS9nLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoLygsKS9nLCBcIiwgXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqICBDb21wdXRlIHRoZSBlZGl0IGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBnaXZlbiBzdHJpbmdzXG4gICAqIGh0dHA6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL1N0cmluZ3MvTGV2ZW5zaHRlaW5fZGlzdGFuY2UjSmF2YVNjcmlwdFxuICAgKlxuICAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQW5kcmVpIE1hY2tlbnppZVxuICAgKlxuICAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgKlxuICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgICpcbiAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGxldmVuc2h0ZWluRGlzdGFuY2UoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGEubGVuZ3RoO1xuXG4gICAgY29uc3QgbWF0cml4ID0gW107XG5cbiAgICAvLyBpbmNyZW1lbnQgYWxvbmcgdGhlIGZpcnN0IGNvbHVtbiBvZiBlYWNoIHJvd1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4W2ldID0gW2ldO1xuICAgIH1cblxuICAgIC8vIGluY3JlbWVudCBlYWNoIGNvbHVtbiBpbiB0aGUgZmlyc3Qgcm93XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cblxuICAgIC8vIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIG1hdHJpeFxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT0gYS5jaGFyQXQoaiAtIDEpKSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2kgLSAxXVtqIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgICAgICBtYXRyaXhbaSAtIDFdW2ogLSAxXSArIDEsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgIG1hdHJpeFtpXVtqIC0gMV0gKyAxLCAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqXSArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApOyAvLyBkZWxldGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xuICB9XG59O1xuXG5jb25zdCBBY3RpdmF0b3IgPSBBY3RpdmF0b3IkMTtcclxuY29uc3QgQ29sb3JQaWNrZXIgPSBDb2xvclBpY2tlciQxO1xyXG5jb25zdCBDb25maWd1cmF0b3IgPSBDb25maWd1cmF0b3IkMTtcclxuY29uc3QgSGFtbWVyID0gSGFtbWVyJDE7XHJcbmNvbnN0IFBvcHVwID0gUG9wdXAkMTtcclxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFID0gVkFMSURBVE9SX1BSSU5UX1NUWUxFJDE7XHJcbmNvbnN0IFZhbGlkYXRvciA9IFZhbGlkYXRvciQxO1xuXG5leHBvcnQgeyBBY3RpdmF0b3IsIEFsZWEsIENvbG9yUGlja2VyLCBDb25maWd1cmF0b3IsIERFTEVURSwgSFNWVG9IZXgsIEhTVlRvUkdCLCBIYW1tZXIsIFBvcHVwLCBSR0JUb0hTViwgUkdCVG9IZXgsIFZBTElEQVRPUl9QUklOVF9TVFlMRSwgVmFsaWRhdG9yLCBhZGRDbGFzc05hbWUsIGFkZENzc1RleHQsIGFkZEV2ZW50TGlzdGVuZXIsIGJpbmFyeVNlYXJjaEN1c3RvbSwgYmluYXJ5U2VhcmNoVmFsdWUsIGJyaWRnZU9iamVjdCwgY29weUFuZEV4dGVuZEFycmF5LCBjb3B5QXJyYXksIGRlZXBFeHRlbmQsIGRlZXBPYmplY3RBc3NpZ24sIGVhc2luZ0Z1bmN0aW9ucywgZXF1YWxBcnJheSwgZXh0ZW5kLCBmaWxsSWZEZWZpbmVkLCBmb3JFYWNoLCBnZXRBYnNvbHV0ZUxlZnQsIGdldEFic29sdXRlUmlnaHQsIGdldEFic29sdXRlVG9wLCBnZXRTY3JvbGxCYXJXaWR0aCwgZ2V0VGFyZ2V0LCBnZXRUeXBlLCBoYXNQYXJlbnQsIGhleFRvSFNWLCBoZXhUb1JHQiwgaW5zZXJ0U29ydCwgaXNEYXRlLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1ZhbGlkSGV4LCBpc1ZhbGlkUkdCLCBpc1ZhbGlkUkdCQSwgbWVyZ2VPcHRpb25zLCBvcHRpb24sIG92ZXJyaWRlT3BhY2l0eSwgcGFyc2VDb2xvciwgcHJldmVudERlZmF1bHQsIHB1cmVEZWVwT2JqZWN0QXNzaWduLCByZWN1cnNpdmVET01EZWxldGUsIHJlbW92ZUNsYXNzTmFtZSwgcmVtb3ZlQ3NzVGV4dCwgcmVtb3ZlRXZlbnRMaXN0ZW5lciwgc2VsZWN0aXZlQnJpZGdlT2JqZWN0LCBzZWxlY3RpdmVEZWVwRXh0ZW5kLCBzZWxlY3RpdmVFeHRlbmQsIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsIHRocm90dGxlLCB0b0FycmF5LCB0b3BNb3N0LCB1cGRhdGVQcm9wZXJ0eSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmlzLXV0aWwuanMubWFwXG4iLCAiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG5cbi8qKlxuICogUGFyc2UgYSB0ZXh0IHNvdXJjZSBjb250YWluaW5nIGRhdGEgaW4gRE9UIGxhbmd1YWdlIGludG8gYSBKU09OIG9iamVjdC5cbiAqIFRoZSBvYmplY3QgY29udGFpbnMgdHdvIGxpc3RzOiBvbmUgd2l0aCBub2RlcyBhbmQgb25lIHdpdGggZWRnZXMuXG4gKlxuICogRE9UIGxhbmd1YWdlIHJlZmVyZW5jZTogaHR0cDovL3d3dy5ncmFwaHZpei5vcmcvZG9jL2luZm8vbGFuZy5odG1sXG4gKlxuICogRE9UIGxhbmd1YWdlIGF0dHJpYnV0ZXM6IGh0dHA6Ly9ncmFwaHZpei5vcmcvY29udGVudC9hdHRyc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhICAgICBUZXh0IGNvbnRhaW5pbmcgYSBncmFwaCBpbiBET1Qtbm90YXRpb25cbiAqIEByZXR1cm5zIHtvYmplY3R9IGdyYXBoICAgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdHdvIHBhcmFtZXRlcnM6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAge09iamVjdFtdfSBub2Rlc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIHtPYmplY3RbXX0gZWRnZXNcbiAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBUT0RPXG4gKiA9PT09XG4gKlxuICogRm9yIGxhYmVsIGhhbmRsaW5nLCB0aGlzIGlzIGFuIGluY29tcGxldGUgaW1wbGVtZW50YXRpb24uIEZyb20gZG9jcyAocXVvdGUgIzMwMTUpOlxuICpcbiAqID4gdGhlIGVzY2FwZSBzZXF1ZW5jZXMgXCJcXG5cIiwgXCJcXGxcIiBhbmQgXCJcXHJcIiBkaXZpZGUgdGhlIGxhYmVsIGludG8gbGluZXMsIGNlbnRlcmVkLFxuICogPiBsZWZ0LWp1c3RpZmllZCwgYW5kIHJpZ2h0LWp1c3RpZmllZCwgcmVzcGVjdGl2ZWx5LlxuICpcbiAqIFNvdXJjZTogaHR0cDovL3d3dy5ncmFwaHZpei5vcmcvY29udGVudC9hdHRycyNrZXNjU3RyaW5nXG4gKlxuICogPiBBcyBhbm90aGVyIGFpZCBmb3IgcmVhZGFiaWxpdHksIGRvdCBhbGxvd3MgZG91YmxlLXF1b3RlZCBzdHJpbmdzIHRvIHNwYW4gbXVsdGlwbGUgcGh5c2ljYWxcbiAqID4gbGluZXMgdXNpbmcgdGhlIHN0YW5kYXJkIEMgY29udmVudGlvbiBvZiBhIGJhY2tzbGFzaCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYSBuZXdsaW5lXG4gKiA+IGNoYXJhY3RlclxuICogPiBJbiBhZGRpdGlvbiwgZG91YmxlLXF1b3RlZCBzdHJpbmdzIGNhbiBiZSBjb25jYXRlbmF0ZWQgdXNpbmcgYSAnKycgb3BlcmF0b3IuXG4gKiA+IEFzIEhUTUwgc3RyaW5ncyBjYW4gY29udGFpbiBuZXdsaW5lIGNoYXJhY3RlcnMsIHdoaWNoIGFyZSB1c2VkIHNvbGVseSBmb3IgZm9ybWF0dGluZyxcbiAqID4gdGhlIGxhbmd1YWdlIGRvZXMgbm90IGFsbG93IGVzY2FwZWQgbmV3bGluZXMgb3IgY29uY2F0ZW5hdGlvbiBvcGVyYXRvcnMgdG8gYmUgdXNlZFxuICogPiB3aXRoaW4gdGhlbS5cbiAqXG4gKiAtIEN1cnJlbnRseSwgb25seSAnXFxcXG4nIGlzIGhhbmRsZWRcbiAqIC0gTm90ZSB0aGF0IHRleHQgZXhwbGljaXRseSBzYXlzICdsYWJlbHMnOyB0aGUgZG90IHBhcnNlciBjdXJyZW50bHkgaGFuZGxlcyBlc2NhcGVcbiAqICAgc2VxdWVuY2VzIGluICoqYWxsKiogc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRE9UKGRhdGEpIHtcbiAgZG90ID0gZGF0YTtcbiAgcmV0dXJuIHBhcnNlR3JhcGgoKTtcbn1cblxuLy8gbWFwcGluZyBvZiBhdHRyaWJ1dGVzIGZyb20gRE9UICh0aGUga2V5cykgdG8gdmlzLmpzICh0aGUgdmFsdWVzKVxudmFyIE5PREVfQVRUUl9NQVBQSU5HID0ge1xuICBmb250c2l6ZTogXCJmb250LnNpemVcIixcbiAgZm9udGNvbG9yOiBcImZvbnQuY29sb3JcIixcbiAgbGFiZWxmb250Y29sb3I6IFwiZm9udC5jb2xvclwiLFxuICBmb250bmFtZTogXCJmb250LmZhY2VcIixcbiAgY29sb3I6IFtcImNvbG9yLmJvcmRlclwiLCBcImNvbG9yLmJhY2tncm91bmRcIl0sXG4gIGZpbGxjb2xvcjogXCJjb2xvci5iYWNrZ3JvdW5kXCIsXG4gIHRvb2x0aXA6IFwidGl0bGVcIixcbiAgbGFiZWx0b29sdGlwOiBcInRpdGxlXCIsXG59O1xudmFyIEVER0VfQVRUUl9NQVBQSU5HID0gT2JqZWN0LmNyZWF0ZShOT0RFX0FUVFJfTUFQUElORyk7XG5FREdFX0FUVFJfTUFQUElORy5jb2xvciA9IFwiY29sb3IuY29sb3JcIjtcbkVER0VfQVRUUl9NQVBQSU5HLnN0eWxlID0gXCJkYXNoZXNcIjtcblxuLy8gdG9rZW4gdHlwZXMgZW51bWVyYXRpb25cbnZhciBUT0tFTlRZUEUgPSB7XG4gIE5VTEw6IDAsXG4gIERFTElNSVRFUjogMSxcbiAgSURFTlRJRklFUjogMixcbiAgVU5LTk9XTjogMyxcbn07XG5cbi8vIG1hcCB3aXRoIGFsbCBkZWxpbWl0ZXJzXG52YXIgREVMSU1JVEVSUyA9IHtcbiAgXCJ7XCI6IHRydWUsXG4gIFwifVwiOiB0cnVlLFxuICBcIltcIjogdHJ1ZSxcbiAgXCJdXCI6IHRydWUsXG4gIFwiO1wiOiB0cnVlLFxuICBcIj1cIjogdHJ1ZSxcbiAgXCIsXCI6IHRydWUsXG5cbiAgXCItPlwiOiB0cnVlLFxuICBcIi0tXCI6IHRydWUsXG59O1xuXG52YXIgZG90ID0gXCJcIjsgLy8gY3VycmVudCBkb3QgZmlsZVxudmFyIGluZGV4ID0gMDsgLy8gY3VycmVudCBpbmRleCBpbiBkb3QgZmlsZVxudmFyIGMgPSBcIlwiOyAvLyBjdXJyZW50IHRva2VuIGNoYXJhY3RlciBpbiBleHByXG52YXIgdG9rZW4gPSBcIlwiOyAvLyBjdXJyZW50IHRva2VuXG52YXIgdG9rZW5UeXBlID0gVE9LRU5UWVBFLk5VTEw7IC8vIHR5cGUgb2YgdGhlIHRva2VuXG5cbi8qKlxuICogR2V0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgZnJvbSB0aGUgZG90IGZpbGUuXG4gKiBUaGUgY2hhcmFjdGVyIGlzIHN0b3JlZCBpbnRvIHRoZSBjaGFyIGMuIElmIHRoZSBlbmQgb2YgdGhlIGRvdCBmaWxlIGlzXG4gKiByZWFjaGVkLCB0aGUgZnVuY3Rpb24gcHV0cyBhbiBlbXB0eSBzdHJpbmcgaW4gYy5cbiAqL1xuZnVuY3Rpb24gZmlyc3QoKSB7XG4gIGluZGV4ID0gMDtcbiAgYyA9IGRvdC5jaGFyQXQoMCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBkb3QgZmlsZS5cbiAqIFRoZSBjaGFyYWN0ZXIgaXMgc3RvcmVkIGludG8gdGhlIGNoYXIgYy4gSWYgdGhlIGVuZCBvZiB0aGUgZG90IGZpbGUgaXNcbiAqIHJlYWNoZWQsIHRoZSBmdW5jdGlvbiBwdXRzIGFuIGVtcHR5IHN0cmluZyBpbiBjLlxuICovXG5mdW5jdGlvbiBuZXh0KCkge1xuICBpbmRleCsrO1xuICBjID0gZG90LmNoYXJBdChpbmRleCk7XG59XG5cbi8qKlxuICogUHJldmlldyB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgZG90IGZpbGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY05leHRcbiAqL1xuZnVuY3Rpb24gbmV4dFByZXZpZXcoKSB7XG4gIHJldHVybiBkb3QuY2hhckF0KGluZGV4ICsgMSk7XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGdpdmVuIGNoYXJhY3RlciBpcyBhbHBoYWJldGljIG9yIG51bWVyaWMgKCBhLXpBLVpfMC05LjojIClcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY1xuICogQHJldHVybnMge2Jvb2xlYW59IGlzQWxwaGFOdW1lcmljXG4gKi9cbmZ1bmN0aW9uIGlzQWxwaGFOdW1lcmljKGMpIHtcbiAgdmFyIGNoYXJDb2RlID0gYy5jaGFyQ29kZUF0KDApO1xuXG4gIGlmIChjaGFyQ29kZSA8IDQ3KSB7XG4gICAgLy8gIy5cbiAgICByZXR1cm4gY2hhckNvZGUgPT09IDM1IHx8IGNoYXJDb2RlID09PSA0NjtcbiAgfVxuICBpZiAoY2hhckNvZGUgPCA1OSkge1xuICAgIC8vIDAtOSBhbmQgOlxuICAgIHJldHVybiBjaGFyQ29kZSA+IDQ3O1xuICB9XG4gIGlmIChjaGFyQ29kZSA8IDkxKSB7XG4gICAgLy8gQS1aXG4gICAgcmV0dXJuIGNoYXJDb2RlID4gNjQ7XG4gIH1cbiAgaWYgKGNoYXJDb2RlIDwgOTYpIHtcbiAgICAvLyBfXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSA5NTtcbiAgfVxuICBpZiAoY2hhckNvZGUgPCAxMjMpIHtcbiAgICAvLyBhLXpcbiAgICByZXR1cm4gY2hhckNvZGUgPiA5NjtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbGwgb3B0aW9ucyBvZiBvYmplY3QgYiBpbnRvIG9iamVjdCBiXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGFcbiAqIEBwYXJhbSB7b2JqZWN0fSBiXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBhXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKGEsIGIpIHtcbiAgaWYgKCFhKSB7XG4gICAgYSA9IHt9O1xuICB9XG5cbiAgaWYgKGIpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIGIpIHtcbiAgICAgIGlmIChiLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGFbbmFtZV0gPSBiW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBTZXQgYSB2YWx1ZSBpbiBhbiBvYmplY3QsIHdoZXJlIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXIgbmFtZSBjYW4gYmUgYVxuICogcGF0aCB3aXRoIG5lc3RlZCBwYXJhbWV0ZXJzLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgdmFyIG9iaiA9IHthOiAyfTtcbiAqICAgICBzZXRWYWx1ZShvYmosICdiLmMnLCAzKTsgICAgIC8vIG9iaiA9IHthOiAyLCBiOiB7YzogM319XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9ialxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggIEEgcGFyYW1ldGVyIG5hbWUgb3IgZG90LXNlcGFyYXRlZCBwYXJhbWV0ZXIgcGF0aCxcbiAqICAgICAgICAgICAgICAgICAgICAgIGxpa2UgXCJjb2xvci5oaWdobGlnaHQuYm9yZGVyXCIuXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHNldFZhbHVlKG9iaiwgcGF0aCwgdmFsdWUpIHtcbiAgdmFyIGtleXMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgdmFyIG8gPSBvYmo7XG4gIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBrZXlzLnNoaWZ0KCk7XG4gICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgICAvLyB0aGlzIGlzbid0IHRoZSBlbmQgcG9pbnRcbiAgICAgIGlmICghb1trZXldKSB7XG4gICAgICAgIG9ba2V5XSA9IHt9O1xuICAgICAgfVxuICAgICAgbyA9IG9ba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyBpcyB0aGUgZW5kIHBvaW50XG4gICAgICBvW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYSBub2RlIHRvIGEgZ3JhcGggb2JqZWN0LiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgbm9kZSB3aXRoXG4gKiB0aGUgc2FtZSBpZCwgdGhlaXIgYXR0cmlidXRlcyB3aWxsIGJlIG1lcmdlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEBwYXJhbSB7b2JqZWN0fSBub2RlXG4gKi9cbmZ1bmN0aW9uIGFkZE5vZGUoZ3JhcGgsIG5vZGUpIHtcbiAgdmFyIGksIGxlbjtcbiAgdmFyIGN1cnJlbnQgPSBudWxsO1xuXG4gIC8vIGZpbmQgcm9vdCBncmFwaCAoaW4gY2FzZSBvZiBzdWJncmFwaClcbiAgdmFyIGdyYXBocyA9IFtncmFwaF07IC8vIGxpc3Qgd2l0aCBhbGwgZ3JhcGhzIGZyb20gY3VycmVudCBncmFwaCB0byByb290IGdyYXBoXG4gIHZhciByb290ID0gZ3JhcGg7XG4gIHdoaWxlIChyb290LnBhcmVudCkge1xuICAgIGdyYXBocy5wdXNoKHJvb3QucGFyZW50KTtcbiAgICByb290ID0gcm9vdC5wYXJlbnQ7XG4gIH1cblxuICAvLyBmaW5kIGV4aXN0aW5nIG5vZGUgKGF0IHJvb3QgbGV2ZWwpIGJ5IGl0cyBpZFxuICBpZiAocm9vdC5ub2Rlcykge1xuICAgIGZvciAoaSA9IDAsIGxlbiA9IHJvb3Qubm9kZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChub2RlLmlkID09PSByb290Lm5vZGVzW2ldLmlkKSB7XG4gICAgICAgIGN1cnJlbnQgPSByb290Lm5vZGVzW2ldO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWN1cnJlbnQpIHtcbiAgICAvLyB0aGlzIGlzIGEgbmV3IG5vZGVcbiAgICBjdXJyZW50ID0ge1xuICAgICAgaWQ6IG5vZGUuaWQsXG4gICAgfTtcbiAgICBpZiAoZ3JhcGgubm9kZSkge1xuICAgICAgLy8gY2xvbmUgZGVmYXVsdCBhdHRyaWJ1dGVzXG4gICAgICBjdXJyZW50LmF0dHIgPSBtZXJnZShjdXJyZW50LmF0dHIsIGdyYXBoLm5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCBub2RlIHRvIHRoaXMgKHN1YilncmFwaCBhbmQgYWxsIGl0cyBwYXJlbnQgZ3JhcGhzXG4gIGZvciAoaSA9IGdyYXBocy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBnID0gZ3JhcGhzW2ldO1xuXG4gICAgaWYgKCFnLm5vZGVzKSB7XG4gICAgICBnLm5vZGVzID0gW107XG4gICAgfVxuICAgIGlmIChnLm5vZGVzLmluZGV4T2YoY3VycmVudCkgPT09IC0xKSB7XG4gICAgICBnLm5vZGVzLnB1c2goY3VycmVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2UgYXR0cmlidXRlc1xuICBpZiAobm9kZS5hdHRyKSB7XG4gICAgY3VycmVudC5hdHRyID0gbWVyZ2UoY3VycmVudC5hdHRyLCBub2RlLmF0dHIpO1xuICB9XG59XG5cbi8qKlxuICogQWRkIGFuIGVkZ2UgdG8gYSBncmFwaCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEBwYXJhbSB7b2JqZWN0fSBlZGdlXG4gKi9cbmZ1bmN0aW9uIGFkZEVkZ2UoZ3JhcGgsIGVkZ2UpIHtcbiAgaWYgKCFncmFwaC5lZGdlcykge1xuICAgIGdyYXBoLmVkZ2VzID0gW107XG4gIH1cbiAgZ3JhcGguZWRnZXMucHVzaChlZGdlKTtcbiAgaWYgKGdyYXBoLmVkZ2UpIHtcbiAgICB2YXIgYXR0ciA9IG1lcmdlKHt9LCBncmFwaC5lZGdlKTsgLy8gY2xvbmUgZGVmYXVsdCBhdHRyaWJ1dGVzXG4gICAgZWRnZS5hdHRyID0gbWVyZ2UoYXR0ciwgZWRnZS5hdHRyKTsgLy8gbWVyZ2UgYXR0cmlidXRlc1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGVkZ2UgdG8gYSBncmFwaCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgb2JqZWN0fSBmcm9tXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IG9iamVjdH0gdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IGF0dHJcbiAqIEByZXR1cm5zIHtvYmplY3R9IGVkZ2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWRnZShncmFwaCwgZnJvbSwgdG8sIHR5cGUsIGF0dHIpIHtcbiAgdmFyIGVkZ2UgPSB7XG4gICAgZnJvbTogZnJvbSxcbiAgICB0bzogdG8sXG4gICAgdHlwZTogdHlwZSxcbiAgfTtcblxuICBpZiAoZ3JhcGguZWRnZSkge1xuICAgIGVkZ2UuYXR0ciA9IG1lcmdlKHt9LCBncmFwaC5lZGdlKTsgLy8gY2xvbmUgZGVmYXVsdCBhdHRyaWJ1dGVzXG4gIH1cbiAgZWRnZS5hdHRyID0gbWVyZ2UoZWRnZS5hdHRyIHx8IHt9LCBhdHRyKTsgLy8gbWVyZ2UgYXR0cmlidXRlc1xuXG4gIC8vIE1vdmUgYXJyb3dzIGF0dHJpYnV0ZSBmcm9tIGF0dHIgdG8gZWRnZSB0ZW1wb3JhbGx5IGNyZWF0ZWQgaW5cbiAgLy8gcGFyc2VBdHRyaWJ1dGVMaXN0KCkuXG4gIGlmIChhdHRyICE9IG51bGwpIHtcbiAgICBpZiAoYXR0ci5oYXNPd25Qcm9wZXJ0eShcImFycm93c1wiKSAmJiBhdHRyW1wiYXJyb3dzXCJdICE9IG51bGwpIHtcbiAgICAgIGVkZ2VbXCJhcnJvd3NcIl0gPSB7IHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGF0dHIuYXJyb3dzLnR5cGUgfSB9O1xuICAgICAgYXR0cltcImFycm93c1wiXSA9IG51bGw7XG4gICAgfVxuICB9XG4gIHJldHVybiBlZGdlO1xufVxuXG4vKipcbiAqIEdldCBuZXh0IHRva2VuIGluIHRoZSBjdXJyZW50IGRvdCBmaWxlLlxuICogVGhlIHRva2VuIGFuZCB0b2tlbiB0eXBlIGFyZSBhdmFpbGFibGUgYXMgdG9rZW4gYW5kIHRva2VuVHlwZVxuICovXG5mdW5jdGlvbiBnZXRUb2tlbigpIHtcbiAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLk5VTEw7XG4gIHRva2VuID0gXCJcIjtcblxuICAvLyBza2lwIG92ZXIgd2hpdGVzcGFjZXNcbiAgd2hpbGUgKGMgPT09IFwiIFwiIHx8IGMgPT09IFwiXFx0XCIgfHwgYyA9PT0gXCJcXG5cIiB8fCBjID09PSBcIlxcclwiKSB7XG4gICAgLy8gc3BhY2UsIHRhYiwgZW50ZXJcbiAgICBuZXh0KCk7XG4gIH1cblxuICBkbyB7XG4gICAgdmFyIGlzQ29tbWVudCA9IGZhbHNlO1xuXG4gICAgLy8gc2tpcCBjb21tZW50XG4gICAgaWYgKGMgPT09IFwiI1wiKSB7XG4gICAgICAvLyBmaW5kIHRoZSBwcmV2aW91cyBub24tc3BhY2UgY2hhcmFjdGVyXG4gICAgICB2YXIgaSA9IGluZGV4IC0gMTtcbiAgICAgIHdoaWxlIChkb3QuY2hhckF0KGkpID09PSBcIiBcIiB8fCBkb3QuY2hhckF0KGkpID09PSBcIlxcdFwiKSB7XG4gICAgICAgIGktLTtcbiAgICAgIH1cbiAgICAgIGlmIChkb3QuY2hhckF0KGkpID09PSBcIlxcblwiIHx8IGRvdC5jaGFyQXQoaSkgPT09IFwiXCIpIHtcbiAgICAgICAgLy8gdGhlICMgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSwgdGhpcyBpcyBpbmRlZWQgYSBsaW5lIGNvbW1lbnRcbiAgICAgICAgd2hpbGUgKGMgIT0gXCJcIiAmJiBjICE9IFwiXFxuXCIpIHtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaXNDb21tZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGMgPT09IFwiL1wiICYmIG5leHRQcmV2aWV3KCkgPT09IFwiL1wiKSB7XG4gICAgICAvLyBza2lwIGxpbmUgY29tbWVudFxuICAgICAgd2hpbGUgKGMgIT0gXCJcIiAmJiBjICE9IFwiXFxuXCIpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgICAgaXNDb21tZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGMgPT09IFwiL1wiICYmIG5leHRQcmV2aWV3KCkgPT09IFwiKlwiKSB7XG4gICAgICAvLyBza2lwIGJsb2NrIGNvbW1lbnRcbiAgICAgIHdoaWxlIChjICE9IFwiXCIpIHtcbiAgICAgICAgaWYgKGMgPT09IFwiKlwiICYmIG5leHRQcmV2aWV3KCkgPT09IFwiL1wiKSB7XG4gICAgICAgICAgLy8gZW5kIG9mIGJsb2NrIGNvbW1lbnQgZm91bmQuIHNraXAgdGhlc2UgbGFzdCB0d28gY2hhcmFjdGVyc1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc0NvbW1lbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHNraXAgb3ZlciB3aGl0ZXNwYWNlc1xuICAgIHdoaWxlIChjID09PSBcIiBcIiB8fCBjID09PSBcIlxcdFwiIHx8IGMgPT09IFwiXFxuXCIgfHwgYyA9PT0gXCJcXHJcIikge1xuICAgICAgLy8gc3BhY2UsIHRhYiwgZW50ZXJcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH0gd2hpbGUgKGlzQ29tbWVudCk7XG5cbiAgLy8gY2hlY2sgZm9yIGVuZCBvZiBkb3QgZmlsZVxuICBpZiAoYyA9PT0gXCJcIikge1xuICAgIC8vIHRva2VuIGlzIHN0aWxsIGVtcHR5XG4gICAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBjaGVjayBmb3IgZGVsaW1pdGVycyBjb25zaXN0aW5nIG9mIDIgY2hhcmFjdGVyc1xuICB2YXIgYzIgPSBjICsgbmV4dFByZXZpZXcoKTtcbiAgaWYgKERFTElNSVRFUlNbYzJdKSB7XG4gICAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICB0b2tlbiA9IGMyO1xuICAgIG5leHQoKTtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gY2hlY2sgZm9yIGRlbGltaXRlcnMgY29uc2lzdGluZyBvZiAxIGNoYXJhY3RlclxuICBpZiAoREVMSU1JVEVSU1tjXSkge1xuICAgIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgdG9rZW4gPSBjO1xuICAgIG5leHQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBjaGVjayBmb3IgYW4gaWRlbnRpZmllciAobnVtYmVyIG9yIHN0cmluZylcbiAgLy8gVE9ETzogbW9yZSBwcmVjaXNlIHBhcnNpbmcgb2YgbnVtYmVycy9zdHJpbmdzIChhbmQgdGhlIHBvcnQgc2VwYXJhdG9yICc6JylcbiAgaWYgKGlzQWxwaGFOdW1lcmljKGMpIHx8IGMgPT09IFwiLVwiKSB7XG4gICAgdG9rZW4gKz0gYztcbiAgICBuZXh0KCk7XG5cbiAgICB3aGlsZSAoaXNBbHBoYU51bWVyaWMoYykpIHtcbiAgICAgIHRva2VuICs9IGM7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICAgIGlmICh0b2tlbiA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICB0b2tlbiA9IGZhbHNlOyAvLyBjb252ZXJ0IHRvIGJvb2xlYW5cbiAgICB9IGVsc2UgaWYgKHRva2VuID09PSBcInRydWVcIikge1xuICAgICAgdG9rZW4gPSB0cnVlOyAvLyBjb252ZXJ0IHRvIGJvb2xlYW5cbiAgICB9IGVsc2UgaWYgKCFpc05hTihOdW1iZXIodG9rZW4pKSkge1xuICAgICAgdG9rZW4gPSBOdW1iZXIodG9rZW4pOyAvLyBjb252ZXJ0IHRvIG51bWJlclxuICAgIH1cbiAgICB0b2tlblR5cGUgPSBUT0tFTlRZUEUuSURFTlRJRklFUjtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBjaGVjayBmb3IgYSBzdHJpbmcgZW5jbG9zZWQgYnkgZG91YmxlIHF1b3Rlc1xuICBpZiAoYyA9PT0gJ1wiJykge1xuICAgIG5leHQoKTtcbiAgICB3aGlsZSAoYyAhPSBcIlwiICYmIChjICE9ICdcIicgfHwgKGMgPT09ICdcIicgJiYgbmV4dFByZXZpZXcoKSA9PT0gJ1wiJykpKSB7XG4gICAgICBpZiAoYyA9PT0gJ1wiJykge1xuICAgICAgICAvLyBza2lwIHRoZSBlc2NhcGUgY2hhcmFjdGVyXG4gICAgICAgIHRva2VuICs9IGM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0gZWxzZSBpZiAoYyA9PT0gXCJcXFxcXCIgJiYgbmV4dFByZXZpZXcoKSA9PT0gXCJuXCIpIHtcbiAgICAgICAgLy8gSG9ub3IgYSBuZXdsaW5lIGVzY2FwZSBzZXF1ZW5jZVxuICAgICAgICB0b2tlbiArPSBcIlxcblwiO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlbiArPSBjO1xuICAgICAgfVxuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICBpZiAoYyAhPSAnXCInKSB7XG4gICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcignRW5kIG9mIHN0cmluZyBcIiBleHBlY3RlZCcpO1xuICAgIH1cbiAgICBuZXh0KCk7XG4gICAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLklERU5USUZJRVI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gc29tZXRoaW5nIHVua25vd24gaXMgZm91bmQsIHdyb25nIGNoYXJhY3RlcnMsIGEgc3ludGF4IGVycm9yXG4gIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5VTktOT1dOO1xuICB3aGlsZSAoYyAhPSBcIlwiKSB7XG4gICAgdG9rZW4gKz0gYztcbiAgICBuZXh0KCk7XG4gIH1cbiAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdTeW50YXggZXJyb3IgaW4gcGFydCBcIicgKyBjaG9wKHRva2VuLCAzMCkgKyAnXCInKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIGdyYXBoLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IGdyYXBoXG4gKi9cbmZ1bmN0aW9uIHBhcnNlR3JhcGgoKSB7XG4gIHZhciBncmFwaCA9IHt9O1xuXG4gIGZpcnN0KCk7XG4gIGdldFRva2VuKCk7XG5cbiAgLy8gb3B0aW9uYWwgc3RyaWN0IGtleXdvcmRcbiAgaWYgKHRva2VuID09PSBcInN0cmljdFwiKSB7XG4gICAgZ3JhcGguc3RyaWN0ID0gdHJ1ZTtcbiAgICBnZXRUb2tlbigpO1xuICB9XG5cbiAgLy8gZ3JhcGggb3IgZGlncmFwaCBrZXl3b3JkXG4gIGlmICh0b2tlbiA9PT0gXCJncmFwaFwiIHx8IHRva2VuID09PSBcImRpZ3JhcGhcIikge1xuICAgIGdyYXBoLnR5cGUgPSB0b2tlbjtcbiAgICBnZXRUb2tlbigpO1xuICB9XG5cbiAgLy8gb3B0aW9uYWwgZ3JhcGggaWRcbiAgaWYgKHRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICBncmFwaC5pZCA9IHRva2VuO1xuICAgIGdldFRva2VuKCk7XG4gIH1cblxuICAvLyBvcGVuIGFuZ2xlIGJyYWNrZXRcbiAgaWYgKHRva2VuICE9IFwie1wiKSB7XG4gICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJBbmdsZSBicmFja2V0IHsgZXhwZWN0ZWRcIik7XG4gIH1cbiAgZ2V0VG9rZW4oKTtcblxuICAvLyBzdGF0ZW1lbnRzXG4gIHBhcnNlU3RhdGVtZW50cyhncmFwaCk7XG5cbiAgLy8gY2xvc2UgYW5nbGUgYnJhY2tldFxuICBpZiAodG9rZW4gIT0gXCJ9XCIpIHtcbiAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkFuZ2xlIGJyYWNrZXQgfSBleHBlY3RlZFwiKTtcbiAgfVxuICBnZXRUb2tlbigpO1xuXG4gIC8vIGVuZCBvZiBmaWxlXG4gIGlmICh0b2tlbiAhPT0gXCJcIikge1xuICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiRW5kIG9mIGZpbGUgZXhwZWN0ZWRcIik7XG4gIH1cbiAgZ2V0VG9rZW4oKTtcblxuICAvLyByZW1vdmUgdGVtcG9yYXJ5IGRlZmF1bHQgb3B0aW9uc1xuICBkZWxldGUgZ3JhcGgubm9kZTtcbiAgZGVsZXRlIGdyYXBoLmVkZ2U7XG4gIGRlbGV0ZSBncmFwaC5ncmFwaDtcblxuICByZXR1cm4gZ3JhcGg7XG59XG5cbi8qKlxuICogUGFyc2UgYSBsaXN0IHdpdGggc3RhdGVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqL1xuZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnRzKGdyYXBoKSB7XG4gIHdoaWxlICh0b2tlbiAhPT0gXCJcIiAmJiB0b2tlbiAhPSBcIn1cIikge1xuICAgIHBhcnNlU3RhdGVtZW50KGdyYXBoKTtcbiAgICBpZiAodG9rZW4gPT09IFwiO1wiKSB7XG4gICAgICBnZXRUb2tlbigpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGEgc2luZ2xlIHN0YXRlbWVudC4gQ2FuIGJlIGEgYW4gYXR0cmlidXRlIHN0YXRlbWVudCwgbm9kZVxuICogc3RhdGVtZW50LCBhIHNlcmllcyBvZiBub2RlIHN0YXRlbWVudHMgYW5kIGVkZ2Ugc3RhdGVtZW50cywgb3IgYVxuICogcGFyYW1ldGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaFxuICovXG5mdW5jdGlvbiBwYXJzZVN0YXRlbWVudChncmFwaCkge1xuICAvLyBwYXJzZSBzdWJncmFwaFxuICB2YXIgc3ViZ3JhcGggPSBwYXJzZVN1YmdyYXBoKGdyYXBoKTtcbiAgaWYgKHN1YmdyYXBoKSB7XG4gICAgLy8gZWRnZSBzdGF0ZW1lbnRzXG4gICAgcGFyc2VFZGdlKGdyYXBoLCBzdWJncmFwaCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBwYXJzZSBhbiBhdHRyaWJ1dGUgc3RhdGVtZW50XG4gIHZhciBhdHRyID0gcGFyc2VBdHRyaWJ1dGVTdGF0ZW1lbnQoZ3JhcGgpO1xuICBpZiAoYXR0cikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHBhcnNlIG5vZGVcbiAgaWYgKHRva2VuVHlwZSAhPSBUT0tFTlRZUEUuSURFTlRJRklFUikge1xuICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiSWRlbnRpZmllciBleHBlY3RlZFwiKTtcbiAgfVxuICB2YXIgaWQgPSB0b2tlbjsgLy8gaWQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyXG4gIGdldFRva2VuKCk7XG5cbiAgaWYgKHRva2VuID09PSBcIj1cIikge1xuICAgIC8vIGlkIHN0YXRlbWVudFxuICAgIGdldFRva2VuKCk7XG4gICAgaWYgKHRva2VuVHlwZSAhPSBUT0tFTlRZUEUuSURFTlRJRklFUikge1xuICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJJZGVudGlmaWVyIGV4cGVjdGVkXCIpO1xuICAgIH1cbiAgICBncmFwaFtpZF0gPSB0b2tlbjtcbiAgICBnZXRUb2tlbigpO1xuICAgIC8vIFRPRE86IGltcGxlbWVudCBjb21tYSBzZXBhcmF0ZWQgbGlzdCB3aXRoIFwiYV9saXN0OiBJRD1JRCBbJywnXSBbYV9saXN0XSBcIlxuICB9IGVsc2Uge1xuICAgIHBhcnNlTm9kZVN0YXRlbWVudChncmFwaCwgaWQpO1xuICB9XG59XG5cbi8qKlxuICogUGFyc2UgYSBzdWJncmFwaFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaCAgICBwYXJlbnQgZ3JhcGggb2JqZWN0XG4gKiBAcmV0dXJucyB7b2JqZWN0IHwgbnVsbH0gc3ViZ3JhcGhcbiAqL1xuZnVuY3Rpb24gcGFyc2VTdWJncmFwaChncmFwaCkge1xuICB2YXIgc3ViZ3JhcGggPSBudWxsO1xuXG4gIC8vIG9wdGlvbmFsIHN1YmdyYXBoIGtleXdvcmRcbiAgaWYgKHRva2VuID09PSBcInN1YmdyYXBoXCIpIHtcbiAgICBzdWJncmFwaCA9IHt9O1xuICAgIHN1YmdyYXBoLnR5cGUgPSBcInN1YmdyYXBoXCI7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIC8vIG9wdGlvbmFsIGdyYXBoIGlkXG4gICAgaWYgKHRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICAgIHN1YmdyYXBoLmlkID0gdG9rZW47XG4gICAgICBnZXRUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG9wZW4gYW5nbGUgYnJhY2tldFxuICBpZiAodG9rZW4gPT09IFwie1wiKSB7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIGlmICghc3ViZ3JhcGgpIHtcbiAgICAgIHN1YmdyYXBoID0ge307XG4gICAgfVxuICAgIHN1YmdyYXBoLnBhcmVudCA9IGdyYXBoO1xuICAgIHN1YmdyYXBoLm5vZGUgPSBncmFwaC5ub2RlO1xuICAgIHN1YmdyYXBoLmVkZ2UgPSBncmFwaC5lZGdlO1xuICAgIHN1YmdyYXBoLmdyYXBoID0gZ3JhcGguZ3JhcGg7XG5cbiAgICAvLyBzdGF0ZW1lbnRzXG4gICAgcGFyc2VTdGF0ZW1lbnRzKHN1YmdyYXBoKTtcblxuICAgIC8vIGNsb3NlIGFuZ2xlIGJyYWNrZXRcbiAgICBpZiAodG9rZW4gIT0gXCJ9XCIpIHtcbiAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiQW5nbGUgYnJhY2tldCB9IGV4cGVjdGVkXCIpO1xuICAgIH1cbiAgICBnZXRUb2tlbigpO1xuXG4gICAgLy8gcmVtb3ZlIHRlbXBvcmFyeSBkZWZhdWx0IG9wdGlvbnNcbiAgICBkZWxldGUgc3ViZ3JhcGgubm9kZTtcbiAgICBkZWxldGUgc3ViZ3JhcGguZWRnZTtcbiAgICBkZWxldGUgc3ViZ3JhcGguZ3JhcGg7XG4gICAgZGVsZXRlIHN1YmdyYXBoLnBhcmVudDtcblxuICAgIC8vIHJlZ2lzdGVyIGF0IHRoZSBwYXJlbnQgZ3JhcGhcbiAgICBpZiAoIWdyYXBoLnN1YmdyYXBocykge1xuICAgICAgZ3JhcGguc3ViZ3JhcGhzID0gW107XG4gICAgfVxuICAgIGdyYXBoLnN1YmdyYXBocy5wdXNoKHN1YmdyYXBoKTtcbiAgfVxuXG4gIHJldHVybiBzdWJncmFwaDtcbn1cblxuLyoqXG4gKiBwYXJzZSBhbiBhdHRyaWJ1dGUgc3RhdGVtZW50IGxpa2UgXCJub2RlIFtzaGFwZT1jaXJjbGUgZm9udFNpemU9MTZdXCIuXG4gKiBBdmFpbGFibGUga2V5d29yZHMgYXJlICdub2RlJywgJ2VkZ2UnLCAnZ3JhcGgnLlxuICogVGhlIHByZXZpb3VzIGxpc3Qgd2l0aCBkZWZhdWx0IGF0dHJpYnV0ZXMgd2lsbCBiZSByZXBsYWNlZFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaFxuICogQHJldHVybnMge3N0cmluZyB8IG51bGx9IGtleXdvcmQgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcGFyc2VkIGF0dHJpYnV0ZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vZGUsIGVkZ2UsIGdyYXBoKSwgb3IgbnVsbCBpZiBub3RoaW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBwYXJzZWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlU3RhdGVtZW50KGdyYXBoKSB7XG4gIC8vIGF0dHJpYnV0ZSBzdGF0ZW1lbnRzXG4gIGlmICh0b2tlbiA9PT0gXCJub2RlXCIpIHtcbiAgICBnZXRUb2tlbigpO1xuXG4gICAgLy8gbm9kZSBhdHRyaWJ1dGVzXG4gICAgZ3JhcGgubm9kZSA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuICAgIHJldHVybiBcIm5vZGVcIjtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gXCJlZGdlXCIpIHtcbiAgICBnZXRUb2tlbigpO1xuXG4gICAgLy8gZWRnZSBhdHRyaWJ1dGVzXG4gICAgZ3JhcGguZWRnZSA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuICAgIHJldHVybiBcImVkZ2VcIjtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gXCJncmFwaFwiKSB7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIC8vIGdyYXBoIGF0dHJpYnV0ZXNcbiAgICBncmFwaC5ncmFwaCA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuICAgIHJldHVybiBcImdyYXBoXCI7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBwYXJzZSBhIG5vZGUgc3RhdGVtZW50XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGdyYXBoXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gaWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VOb2RlU3RhdGVtZW50KGdyYXBoLCBpZCkge1xuICAvLyBub2RlIHN0YXRlbWVudFxuICB2YXIgbm9kZSA9IHtcbiAgICBpZDogaWQsXG4gIH07XG4gIHZhciBhdHRyID0gcGFyc2VBdHRyaWJ1dGVMaXN0KCk7XG4gIGlmIChhdHRyKSB7XG4gICAgbm9kZS5hdHRyID0gYXR0cjtcbiAgfVxuICBhZGROb2RlKGdyYXBoLCBub2RlKTtcblxuICAvLyBlZGdlIHN0YXRlbWVudHNcbiAgcGFyc2VFZGdlKGdyYXBoLCBpZCk7XG59XG5cbi8qKlxuICogUGFyc2UgYW4gZWRnZSBvciBhIHNlcmllcyBvZiBlZGdlc1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaFxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGZyb20gICAgICAgIElkIG9mIHRoZSBmcm9tIG5vZGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VFZGdlKGdyYXBoLCBmcm9tKSB7XG4gIHdoaWxlICh0b2tlbiA9PT0gXCItPlwiIHx8IHRva2VuID09PSBcIi0tXCIpIHtcbiAgICB2YXIgdG87XG4gICAgdmFyIHR5cGUgPSB0b2tlbjtcbiAgICBnZXRUb2tlbigpO1xuXG4gICAgdmFyIHN1YmdyYXBoID0gcGFyc2VTdWJncmFwaChncmFwaCk7XG4gICAgaWYgKHN1YmdyYXBoKSB7XG4gICAgICB0byA9IHN1YmdyYXBoO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodG9rZW5UeXBlICE9IFRPS0VOVFlQRS5JREVOVElGSUVSKSB7XG4gICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiSWRlbnRpZmllciBvciBzdWJncmFwaCBleHBlY3RlZFwiKTtcbiAgICAgIH1cbiAgICAgIHRvID0gdG9rZW47XG4gICAgICBhZGROb2RlKGdyYXBoLCB7XG4gICAgICAgIGlkOiB0byxcbiAgICAgIH0pO1xuICAgICAgZ2V0VG9rZW4oKTtcbiAgICB9XG5cbiAgICAvLyBwYXJzZSBlZGdlIGF0dHJpYnV0ZXNcbiAgICB2YXIgYXR0ciA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuXG4gICAgLy8gY3JlYXRlIGVkZ2VcbiAgICB2YXIgZWRnZSA9IGNyZWF0ZUVkZ2UoZ3JhcGgsIGZyb20sIHRvLCB0eXBlLCBhdHRyKTtcbiAgICBhZGRFZGdlKGdyYXBoLCBlZGdlKTtcblxuICAgIGZyb20gPSB0bztcbiAgfVxufVxuXG4vKipcbiAqIEFzIGV4cGxhaW5lZCBpbiBbMV0sIGdyYXBodml6IGhhcyBsaW1pdGF0aW9ucyBmb3IgY29tYmluYXRpb24gb2ZcbiAqIGFycm93W2hlYWR8dGFpbF0gYW5kIGRpci4gSWYgYXR0cmlidXRlIGxpc3QgaW5jbHVkZXMgJ2RpcicsXG4gKiBmb2xsb3dpbmcgY2FzZXMganVzdCBiZSBzdXBwb3J0ZWQuXG4gKiAgIDEuIGJvdGggb3Igbm9uZSArIGFycm93aGVhZCwgYXJyb3d0YWlsXG4gKiAgIDIuIGZvcndhcmQgKyBhcnJvd2hlYWQgKGFycm93dGFpbCBpcyBub3QgYWZmZWR0ZWQpXG4gKiAgIDMuIGJhY2sgKyBhcnJvd3RhaWwgKGFycm93aGVhZCBpcyBub3QgYWZmZWN0ZWQpXG4gKiBbMV0gaHR0cHM6Ly93d3cuZ3JhcGh2aXoub3JnL2RvYy9pbmZvL2F0dHJzLmh0bWwjaDp1bmRpcl9ub3RlXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwYXJzZUF0dHJpYnV0ZUxpc3QoKSB0byBwYXJzZSAnZGlyJ1xuICogYXR0cmlidXRlIHdpdGggZ2l2ZW4gJ2F0dHJfbmFtZXMnIGFuZCAnYXR0cl9saXN0Jy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gYXR0cl9uYW1lcyAgQXJyYXkgb2YgYXR0cmlidXRlIG5hbWVzXG4gKiBAcGFyYW0ge29iamVjdH0gYXR0cl9saXN0ICBBcnJheSBvZiBvYmplY3RzIG9mIGF0dHJpYnV0ZSBzZXRcbiAqIEByZXR1cm5zIHtvYmplY3R9IGF0dHJfbGlzdCAgVXBkYXRlZCBhdHRyX2xpc3RcbiAqL1xuZnVuY3Rpb24gcGFyc2VEaXJBdHRyaWJ1dGUoYXR0cl9uYW1lcywgYXR0cl9saXN0KSB7XG4gIHZhciBpO1xuICBpZiAoYXR0cl9uYW1lcy5pbmNsdWRlcyhcImRpclwiKSkge1xuICAgIHZhciBpZHggPSB7fTsgLy8gZ2V0IGluZGV4IG9mICdhcnJvd3MnIGFuZCAnZGlyJ1xuICAgIGlkeC5hcnJvd3MgPSB7fTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cl9saXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwiYXJyb3dzXCIpIHtcbiAgICAgICAgaWYgKGF0dHJfbGlzdFtpXS52YWx1ZS50byAhPSBudWxsKSB7XG4gICAgICAgICAgaWR4LmFycm93cy50byA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXR0cl9saXN0W2ldLnZhbHVlLmZyb20gIT0gbnVsbCkge1xuICAgICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJJbnZhbGlkIHZhbHVlIG9mIGFycm93c1wiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChhdHRyX2xpc3RbaV0ubmFtZSA9PT0gXCJkaXJcIikge1xuICAgICAgICBpZHguZGlyID0gaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaXJzdCwgYWRkIGRlZmF1bHQgYXJyb3cgc2hhcGUgaWYgaXQgaXMgbm90IGFzc2lnbmVkIHRvIGF2b2lkIGVycm9yXG4gICAgdmFyIGRpcl90eXBlID0gYXR0cl9saXN0W2lkeC5kaXJdLnZhbHVlO1xuICAgIGlmICghYXR0cl9uYW1lcy5pbmNsdWRlcyhcImFycm93c1wiKSkge1xuICAgICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyB0bzogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgZnJvbTogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgdG86IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcImJhY2tcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyBmcm9tOiB7IGVuYWJsZWQ6IHRydWUgfSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWR4LmFycm93cy5mcm9tID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKCdJbnZhbGlkIGRpciB0eXBlIFwiJyArIGRpcl90eXBlICsgJ1wiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZyb21fdHlwZTtcbiAgICB2YXIgdG9fdHlwZTtcbiAgICAvLyB1cGRhdGUgJ2Fycm93cycgYXR0cmlidXRlIGZyb20gJ2RpcicuXG4gICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgLy8gYm90aCBvZiBzaGFwZXMgb2YgJ2Zyb20nIGFuZCAndG8nIGFyZSBnaXZlblxuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0udmFsdWUuZnJvbS50eXBlO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYXR0cl9saXN0LnNwbGljZShpZHguYXJyb3dzLmZyb20sIDEpO1xuXG4gICAgICAgIC8vIHNoYXBlIG9mICd0bycgaXMgYXNzaWduZWQgYW5kIHVzZSBkZWZhdWx0IHRvICdmcm9tJ1xuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBvbmx5IHNoYXBlIG9mICdmcm9tJyBpcyBhc3NpZ25lZCBhbmQgdXNlIGRlZmF1bHQgZm9yICd0bydcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJiYWNrXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ2Zyb20nXG4gICAgICBpZiAoaWR4LmFycm93cy50byAmJiBpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiXCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gZ2l2ZW4gc2hhcGUgb2YgJ3RvJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGlkeC5hcnJvd3MudG87XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFzc2lnbiBnaXZlbiAnZnJvbScgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZnJvbToge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgdmFyIGlkeF9hcnJvdztcbiAgICAgIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIGlkeF9hcnJvdyA9IGlkeC5hcnJvd3MudG87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZHhfYXJyb3cgPSBpZHguYXJyb3dzLmZyb207XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHhfYXJyb3ddID0ge1xuICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5uYW1lLFxuICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ3RvJ1xuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYXNzaWduIGdpdmVuICd0bycgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGdpdmVuIHNoYXBlIG9mICdmcm9tJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiYXJyb3dcIjtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgaWR4LmFycm93cy50byA9IGlkeC5hcnJvd3MuZnJvbTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHRvOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKCdJbnZhbGlkIGRpciB0eXBlIFwiJyArIGRpcl90eXBlICsgJ1wiJyk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlICdkaXInIGF0dHJpYnV0ZSBubyBuZWVkIGFueW1vcmVcbiAgICBhdHRyX2xpc3Quc3BsaWNlKGlkeC5kaXIsIDEpO1xuICB9XG4gIHJldHVybiBhdHRyX2xpc3Q7XG59XG5cbi8qKlxuICogUGFyc2UgYSBzZXQgd2l0aCBhdHRyaWJ1dGVzLFxuICogZm9yIGV4YW1wbGUgW2xhYmVsPVwiMS4wMDBcIiwgc2hhcGU9c29saWRdXG4gKlxuICogQHJldHVybnMge29iamVjdCB8IG51bGx9IGF0dHJcbiAqL1xuZnVuY3Rpb24gcGFyc2VBdHRyaWJ1dGVMaXN0KCkge1xuICB2YXIgaTtcbiAgdmFyIGF0dHIgPSBudWxsO1xuXG4gIC8vIGVkZ2Ugc3R5bGVzIG9mIGRvdCBhbmQgdmlzXG4gIHZhciBlZGdlU3R5bGVzID0ge1xuICAgIGRhc2hlZDogdHJ1ZSxcbiAgICBzb2xpZDogZmFsc2UsXG4gICAgZG90dGVkOiBbMSwgNV0sXG4gIH07XG5cbiAgLyoqXG4gICAqIERlZmluZSBhcnJvdyB0eXBlcy5cbiAgICogdmlzIGN1cnJlbnRseSBzdXBwb3J0cyB0eXBlcyBkZWZpbmVkIGluICdhcnJvd1R5cGVzJy5cbiAgICogRGV0YWlscyBvZiBhcnJvdyBzaGFwZXMgYXJlIGRlc2NyaWJlZCBpblxuICAgKiBodHRwOi8vd3d3LmdyYXBodml6Lm9yZy9jb250ZW50L2Fycm93LXNoYXBlc1xuICAgKi9cbiAgdmFyIGFycm93VHlwZXMgPSB7XG4gICAgZG90OiBcImNpcmNsZVwiLFxuICAgIGJveDogXCJib3hcIixcbiAgICBjcm93OiBcImNyb3dcIixcbiAgICBjdXJ2ZTogXCJjdXJ2ZVwiLFxuICAgIGljdXJ2ZTogXCJpbnZfY3VydmVcIixcbiAgICBub3JtYWw6IFwidHJpYW5nbGVcIixcbiAgICBpbnY6IFwiaW52X3RyaWFuZ2xlXCIsXG4gICAgZGlhbW9uZDogXCJkaWFtb25kXCIsXG4gICAgdGVlOiBcImJhclwiLFxuICAgIHZlZTogXCJ2ZWVcIixcbiAgfTtcblxuICAvKipcbiAgICogJ2F0dHJfbGlzdCcgY29udGFpbnMgYXR0cmlidXRlcyBmb3IgY2hlY2tpbmcgaWYgc29tZSBvZiB0aGVtIGFyZSBhZmZlY3RlZFxuICAgKiBsYXRlci4gRm9yIGluc3RhbmNlLCBib3RoIG9mICdhcnJvd2hlYWQnIGFuZCAnZGlyJyAoZWRnZSBzdHlsZSBkZWZpbmVkXG4gICAqIGluIERPVCkgbWFrZSBjaGFuZ2VzIHRvICdhcnJvd3MnIGF0dHJpYnV0ZSBpbiB2aXMuXG4gICAqL1xuICB2YXIgYXR0cl9saXN0ID0gbmV3IEFycmF5KCk7XG4gIHZhciBhdHRyX25hbWVzID0gbmV3IEFycmF5KCk7IC8vIHVzZWQgZm9yIGNoZWNraW5nIHRoZSBjYXNlLlxuXG4gIC8vIHBhcnNlIGF0dHJpYnV0ZXNcbiAgd2hpbGUgKHRva2VuID09PSBcIltcIikge1xuICAgIGdldFRva2VuKCk7XG4gICAgYXR0ciA9IHt9O1xuICAgIHdoaWxlICh0b2tlbiAhPT0gXCJcIiAmJiB0b2tlbiAhPSBcIl1cIikge1xuICAgICAgaWYgKHRva2VuVHlwZSAhPSBUT0tFTlRZUEUuSURFTlRJRklFUikge1xuICAgICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkF0dHJpYnV0ZSBuYW1lIGV4cGVjdGVkXCIpO1xuICAgICAgfVxuICAgICAgdmFyIG5hbWUgPSB0b2tlbjtcblxuICAgICAgZ2V0VG9rZW4oKTtcbiAgICAgIGlmICh0b2tlbiAhPSBcIj1cIikge1xuICAgICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkVxdWFsIHNpZ24gPSBleHBlY3RlZFwiKTtcbiAgICAgIH1cbiAgICAgIGdldFRva2VuKCk7XG5cbiAgICAgIGlmICh0b2tlblR5cGUgIT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJBdHRyaWJ1dGUgdmFsdWUgZXhwZWN0ZWRcIik7XG4gICAgICB9XG4gICAgICB2YXIgdmFsdWUgPSB0b2tlbjtcblxuICAgICAgLy8gY29udmVydCBmcm9tIGRvdCBzdHlsZSB0byB2aXNcbiAgICAgIGlmIChuYW1lID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgdmFsdWUgPSBlZGdlU3R5bGVzW3ZhbHVlXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFycm93VHlwZTtcbiAgICAgIGlmIChuYW1lID09PSBcImFycm93aGVhZFwiKSB7XG4gICAgICAgIGFycm93VHlwZSA9IGFycm93VHlwZXNbdmFsdWVdO1xuICAgICAgICBuYW1lID0gXCJhcnJvd3NcIjtcbiAgICAgICAgdmFsdWUgPSB7IHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGFycm93VHlwZSB9IH07XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lID09PSBcImFycm93dGFpbFwiKSB7XG4gICAgICAgIGFycm93VHlwZSA9IGFycm93VHlwZXNbdmFsdWVdO1xuICAgICAgICBuYW1lID0gXCJhcnJvd3NcIjtcbiAgICAgICAgdmFsdWUgPSB7IGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogYXJyb3dUeXBlIH0gfTtcbiAgICAgIH1cblxuICAgICAgYXR0cl9saXN0LnB1c2goeyBhdHRyOiBhdHRyLCBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICBhdHRyX25hbWVzLnB1c2gobmFtZSk7XG5cbiAgICAgIGdldFRva2VuKCk7XG4gICAgICBpZiAodG9rZW4gPT0gXCIsXCIpIHtcbiAgICAgICAgZ2V0VG9rZW4oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG9rZW4gIT0gXCJdXCIpIHtcbiAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiQnJhY2tldCBdIGV4cGVjdGVkXCIpO1xuICAgIH1cbiAgICBnZXRUb2tlbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzIGV4cGxhaW5lZCBpbiBbMV0sIGdyYXBodml6IGhhcyBsaW1pdGF0aW9ucyBmb3IgY29tYmluYXRpb24gb2ZcbiAgICogYXJyb3dbaGVhZHx0YWlsXSBhbmQgZGlyLiBJZiBhdHRyaWJ1dGUgbGlzdCBpbmNsdWRlcyAnZGlyJyxcbiAgICogZm9sbG93aW5nIGNhc2VzIGp1c3QgYmUgc3VwcG9ydGVkLlxuICAgKiAgIDEuIGJvdGggb3Igbm9uZSArIGFycm93aGVhZCwgYXJyb3d0YWlsXG4gICAqICAgMi4gZm9yd2FyZCArIGFycm93aGVhZCAoYXJyb3d0YWlsIGlzIG5vdCBhZmZlZHRlZClcbiAgICogICAzLiBiYWNrICsgYXJyb3d0YWlsIChhcnJvd2hlYWQgaXMgbm90IGFmZmVjdGVkKVxuICAgKiBbMV0gaHR0cHM6Ly93d3cuZ3JhcGh2aXoub3JnL2RvYy9pbmZvL2F0dHJzLmh0bWwjaDp1bmRpcl9ub3RlXG4gICAqL1xuICBpZiAoYXR0cl9uYW1lcy5pbmNsdWRlcyhcImRpclwiKSkge1xuICAgIHZhciBpZHggPSB7fTsgLy8gZ2V0IGluZGV4IG9mICdhcnJvd3MnIGFuZCAnZGlyJ1xuICAgIGlkeC5hcnJvd3MgPSB7fTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cl9saXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwiYXJyb3dzXCIpIHtcbiAgICAgICAgaWYgKGF0dHJfbGlzdFtpXS52YWx1ZS50byAhPSBudWxsKSB7XG4gICAgICAgICAgaWR4LmFycm93cy50byA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXR0cl9saXN0W2ldLnZhbHVlLmZyb20gIT0gbnVsbCkge1xuICAgICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJJbnZhbGlkIHZhbHVlIG9mIGFycm93c1wiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChhdHRyX2xpc3RbaV0ubmFtZSA9PT0gXCJkaXJcIikge1xuICAgICAgICBpZHguZGlyID0gaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaXJzdCwgYWRkIGRlZmF1bHQgYXJyb3cgc2hhcGUgaWYgaXQgaXMgbm90IGFzc2lnbmVkIHRvIGF2b2lkIGVycm9yXG4gICAgdmFyIGRpcl90eXBlID0gYXR0cl9saXN0W2lkeC5kaXJdLnZhbHVlO1xuICAgIGlmICghYXR0cl9uYW1lcy5pbmNsdWRlcyhcImFycm93c1wiKSkge1xuICAgICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyB0bzogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgZnJvbTogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgdG86IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcImJhY2tcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyBmcm9tOiB7IGVuYWJsZWQ6IHRydWUgfSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWR4LmFycm93cy5mcm9tID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKCdJbnZhbGlkIGRpciB0eXBlIFwiJyArIGRpcl90eXBlICsgJ1wiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZyb21fdHlwZTtcbiAgICB2YXIgdG9fdHlwZTtcbiAgICAvLyB1cGRhdGUgJ2Fycm93cycgYXR0cmlidXRlIGZyb20gJ2RpcicuXG4gICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgLy8gYm90aCBvZiBzaGFwZXMgb2YgJ2Zyb20nIGFuZCAndG8nIGFyZSBnaXZlblxuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0udmFsdWUuZnJvbS50eXBlO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYXR0cl9saXN0LnNwbGljZShpZHguYXJyb3dzLmZyb20sIDEpO1xuXG4gICAgICAgIC8vIHNoYXBlIG9mICd0bycgaXMgYXNzaWduZWQgYW5kIHVzZSBkZWZhdWx0IHRvICdmcm9tJ1xuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBvbmx5IHNoYXBlIG9mICdmcm9tJyBpcyBhc3NpZ25lZCBhbmQgdXNlIGRlZmF1bHQgZm9yICd0bydcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJiYWNrXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ2Zyb20nXG4gICAgICBpZiAoaWR4LmFycm93cy50byAmJiBpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiXCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gZ2l2ZW4gc2hhcGUgb2YgJ3RvJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGlkeC5hcnJvd3MudG87XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFzc2lnbiBnaXZlbiAnZnJvbScgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZnJvbToge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgdmFyIGlkeF9hcnJvdztcbiAgICAgIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIGlkeF9hcnJvdyA9IGlkeC5hcnJvd3MudG87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZHhfYXJyb3cgPSBpZHguYXJyb3dzLmZyb207XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHhfYXJyb3ddID0ge1xuICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5uYW1lLFxuICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ3RvJ1xuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYXNzaWduIGdpdmVuICd0bycgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGdpdmVuIHNoYXBlIG9mICdmcm9tJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiYXJyb3dcIjtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgaWR4LmFycm93cy50byA9IGlkeC5hcnJvd3MuZnJvbTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS52YWx1ZS50by50eXBlIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcignSW52YWxpZCBkaXIgdHlwZSBcIicgKyBkaXJfdHlwZSArICdcIicpO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSAnZGlyJyBhdHRyaWJ1dGUgbm8gbmVlZCBhbnltb3JlXG4gICAgYXR0cl9saXN0LnNwbGljZShpZHguZGlyLCAxKTtcbiAgfVxuXG4gIC8vIHBhcnNlICdwZW53aWR0aCdcbiAgdmFyIG5vZl9hdHRyX2xpc3Q7XG4gIGlmIChhdHRyX25hbWVzLmluY2x1ZGVzKFwicGVud2lkdGhcIikpIHtcbiAgICB2YXIgdG1wX2F0dHJfbGlzdCA9IFtdO1xuXG4gICAgbm9mX2F0dHJfbGlzdCA9IGF0dHJfbGlzdC5sZW5ndGg7XG4gICAgZm9yIChpID0gMDsgaSA8IG5vZl9hdHRyX2xpc3Q7IGkrKykge1xuICAgICAgLy8gZXhjbHVkZSAnd2lkdGgnIGZyb20gYXR0cl9saXN0IGlmICdwZW53aWR0aCcgZXhpc3RzXG4gICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgIT09IFwid2lkdGhcIikge1xuICAgICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwicGVud2lkdGhcIikge1xuICAgICAgICAgIGF0dHJfbGlzdFtpXS5uYW1lID0gXCJ3aWR0aFwiO1xuICAgICAgICB9XG4gICAgICAgIHRtcF9hdHRyX2xpc3QucHVzaChhdHRyX2xpc3RbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBhdHRyX2xpc3QgPSB0bXBfYXR0cl9saXN0O1xuICB9XG5cbiAgbm9mX2F0dHJfbGlzdCA9IGF0dHJfbGlzdC5sZW5ndGg7XG4gIGZvciAoaSA9IDA7IGkgPCBub2ZfYXR0cl9saXN0OyBpKyspIHtcbiAgICBzZXRWYWx1ZShhdHRyX2xpc3RbaV0uYXR0ciwgYXR0cl9saXN0W2ldLm5hbWUsIGF0dHJfbGlzdFtpXS52YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gYXR0cjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzeW50YXggZXJyb3Igd2l0aCBleHRyYSBpbmZvcm1hdGlvbiBvbiBjdXJyZW50IHRva2VuIGFuZCBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge1N5bnRheEVycm9yfSBlcnJcbiAqL1xuZnVuY3Rpb24gbmV3U3ludGF4RXJyb3IobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IFN5bnRheEVycm9yKFxuICAgIG1lc3NhZ2UgKyAnLCBnb3QgXCInICsgY2hvcCh0b2tlbiwgMzApICsgJ1wiIChjaGFyICcgKyBpbmRleCArIFwiKVwiXG4gICk7XG59XG5cbi8qKlxuICogQ2hvcCBvZmYgdGV4dCBhZnRlciBhIG1heGltdW0gbGVuZ3RoXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhMZW5ndGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNob3AodGV4dCwgbWF4TGVuZ3RoKSB7XG4gIHJldHVybiB0ZXh0Lmxlbmd0aCA8PSBtYXhMZW5ndGggPyB0ZXh0IDogdGV4dC5zdWJzdHIoMCwgMjcpICsgXCIuLi5cIjtcbn1cblxuLyoqXG4gKiBFeGVjdXRlIGEgZnVuY3Rpb24gZm4gZm9yIGVhY2ggcGFpciBvZiBlbGVtZW50cyBpbiB0d28gYXJyYXlzXG4gKlxuICogQHBhcmFtIHtBcnJheSB8ICp9IGFycmF5MVxuICogQHBhcmFtIHtBcnJheSB8ICp9IGFycmF5MlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaDIoYXJyYXkxLCBhcnJheTIsIGZuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycmF5MSkpIHtcbiAgICBhcnJheTEuZm9yRWFjaChmdW5jdGlvbiAoZWxlbTEpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5MikpIHtcbiAgICAgICAgYXJyYXkyLmZvckVhY2goZnVuY3Rpb24gKGVsZW0yKSB7XG4gICAgICAgICAgZm4oZWxlbTEsIGVsZW0yKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbihlbGVtMSwgYXJyYXkyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheTIpKSB7XG4gICAgICBhcnJheTIuZm9yRWFjaChmdW5jdGlvbiAoZWxlbTIpIHtcbiAgICAgICAgZm4oYXJyYXkxLCBlbGVtMik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm4oYXJyYXkxLCBhcnJheTIpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNldCBhIG5lc3RlZCBwcm9wZXJ0eSBvbiBhbiBvYmplY3RcbiAqIFdoZW4gbmVzdGVkIG9iamVjdHMgYXJlIG1pc3NpbmcsIHRoZXkgd2lsbCBiZSBjcmVhdGVkLlxuICogRm9yIGV4YW1wbGUgc2V0UHJvcCh7fSwgJ2ZvbnQuY29sb3InLCAncmVkJykgd2lsbCByZXR1cm4ge2ZvbnQ6IHtjb2xvcjogJ3JlZCd9fVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoICAgQSBkb3Qgc2VwYXJhdGVkIHN0cmluZyBsaWtlICdmb250LmNvbG9yJ1xuICogQHBhcmFtIHsqfSB2YWx1ZSAgICAgICBWYWx1ZSBmb3IgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIHRoZSBvcmlnaW5hbCBvYmplY3QsIGFsbG93cyBmb3IgY2hhaW5pbmcuXG4gKi9cbmZ1bmN0aW9uIHNldFByb3Aob2JqZWN0LCBwYXRoLCB2YWx1ZSkge1xuICB2YXIgbmFtZXMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgdmFyIHByb3AgPSBuYW1lcy5wb3AoKTtcblxuICAvLyB0cmF2ZXJzZSBvdmVyIHRoZSBuZXN0ZWQgb2JqZWN0c1xuICB2YXIgb2JqID0gb2JqZWN0O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5hbWUgPSBuYW1lc1tpXTtcbiAgICBpZiAoIShuYW1lIGluIG9iaikpIHtcbiAgICAgIG9ialtuYW1lXSA9IHt9O1xuICAgIH1cbiAgICBvYmogPSBvYmpbbmFtZV07XG4gIH1cblxuICAvLyBzZXQgdGhlIHByb3BlcnR5IHZhbHVlXG4gIG9ialtwcm9wXSA9IHZhbHVlO1xuXG4gIHJldHVybiBvYmplY3Q7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBvYmplY3Qgd2l0aCBET1QgYXR0cmlidXRlcyB0byB0aGVpciB2aXMuanMgZXF1aXZhbGVudHMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGF0dHIgICAgIE9iamVjdCB3aXRoIERPVCBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge29iamVjdH0gbWFwcGluZ1xuICogQHJldHVybnMge29iamVjdH0gICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHZpcy5qcyBhdHRyaWJ1dGVzXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBdHRyKGF0dHIsIG1hcHBpbmcpIHtcbiAgdmFyIGNvbnZlcnRlZCA9IHt9O1xuXG4gIGZvciAodmFyIHByb3AgaW4gYXR0cikge1xuICAgIGlmIChhdHRyLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICB2YXIgdmlzUHJvcCA9IG1hcHBpbmdbcHJvcF07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2aXNQcm9wKSkge1xuICAgICAgICB2aXNQcm9wLmZvckVhY2goZnVuY3Rpb24gKHZpc1Byb3BJKSB7XG4gICAgICAgICAgc2V0UHJvcChjb252ZXJ0ZWQsIHZpc1Byb3BJLCBhdHRyW3Byb3BdKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2aXNQcm9wID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHNldFByb3AoY29udmVydGVkLCB2aXNQcm9wLCBhdHRyW3Byb3BdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFByb3AoY29udmVydGVkLCBwcm9wLCBhdHRyW3Byb3BdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29udmVydGVkO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBzdHJpbmcgY29udGFpbmluZyBhIGdyYXBoIGluIERPVCBsYW5ndWFnZSBpbnRvIGEgbWFwIGNvbnRhaW5pbmdcbiAqIHdpdGggbm9kZXMgYW5kIGVkZ2VzIGluIHRoZSBmb3JtYXQgb2YgZ3JhcGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgICAgICAgICBUZXh0IGNvbnRhaW5pbmcgYSBncmFwaCBpbiBET1Qtbm90YXRpb25cbiAqIEByZXR1cm5zIHtvYmplY3R9IGdyYXBoRGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gRE9UVG9HcmFwaChkYXRhKSB7XG4gIC8vIHBhcnNlIHRoZSBET1QgZmlsZVxuICB2YXIgZG90RGF0YSA9IHBhcnNlRE9UKGRhdGEpO1xuICB2YXIgZ3JhcGhEYXRhID0ge1xuICAgIG5vZGVzOiBbXSxcbiAgICBlZGdlczogW10sXG4gICAgb3B0aW9uczoge30sXG4gIH07XG5cbiAgLy8gY29weSB0aGUgbm9kZXNcbiAgaWYgKGRvdERhdGEubm9kZXMpIHtcbiAgICBkb3REYXRhLm5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGRvdE5vZGUpIHtcbiAgICAgIHZhciBncmFwaE5vZGUgPSB7XG4gICAgICAgIGlkOiBkb3ROb2RlLmlkLFxuICAgICAgICBsYWJlbDogU3RyaW5nKGRvdE5vZGUubGFiZWwgfHwgZG90Tm9kZS5pZCksXG4gICAgICB9O1xuICAgICAgbWVyZ2UoZ3JhcGhOb2RlLCBjb252ZXJ0QXR0cihkb3ROb2RlLmF0dHIsIE5PREVfQVRUUl9NQVBQSU5HKSk7XG4gICAgICBpZiAoZ3JhcGhOb2RlLmltYWdlKSB7XG4gICAgICAgIGdyYXBoTm9kZS5zaGFwZSA9IFwiaW1hZ2VcIjtcbiAgICAgIH1cbiAgICAgIGdyYXBoRGF0YS5ub2Rlcy5wdXNoKGdyYXBoTm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBjb3B5IHRoZSBlZGdlc1xuICBpZiAoZG90RGF0YS5lZGdlcykge1xuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYW4gZWRnZSBpbiBET1QgZm9ybWF0IHRvIGFuIGVkZ2Ugd2l0aCBWaXNHcmFwaCBmb3JtYXRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkb3RFZGdlXG4gICAgICogQHJldHVybnMge29iamVjdH0gZ3JhcGhFZGdlXG4gICAgICovXG4gICAgdmFyIGNvbnZlcnRFZGdlID0gZnVuY3Rpb24gKGRvdEVkZ2UpIHtcbiAgICAgIHZhciBncmFwaEVkZ2UgPSB7XG4gICAgICAgIGZyb206IGRvdEVkZ2UuZnJvbSxcbiAgICAgICAgdG86IGRvdEVkZ2UudG8sXG4gICAgICB9O1xuICAgICAgbWVyZ2UoZ3JhcGhFZGdlLCBjb252ZXJ0QXR0cihkb3RFZGdlLmF0dHIsIEVER0VfQVRUUl9NQVBQSU5HKSk7XG5cbiAgICAgIC8vIEFkZCBhcnJvd3MgYXR0cmlidXRlIHRvIGRlZmF1bHQgc3R5bGVkIGFycm93LlxuICAgICAgLy8gVGhlIHJlYXNvbiB3aHkgZGVmYXVsdCBzdHlsZSBpcyBub3QgYWRkZWQgaW4gcGFyc2VBdHRyaWJ1dGVMaXN0KCkgaXNcbiAgICAgIC8vIGJlY2F1c2Ugb25seSBkZWZhdWx0IGlzIGNsZWFyZWQgYmVmb3JlIGhlcmUuXG4gICAgICBpZiAoZ3JhcGhFZGdlLmFycm93cyA9PSBudWxsICYmIGRvdEVkZ2UudHlwZSA9PT0gXCItPlwiKSB7XG4gICAgICAgIGdyYXBoRWRnZS5hcnJvd3MgPSBcInRvXCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBncmFwaEVkZ2U7XG4gICAgfTtcblxuICAgIGRvdERhdGEuZWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoZG90RWRnZSkge1xuICAgICAgdmFyIGZyb20sIHRvO1xuICAgICAgaWYgKGRvdEVkZ2UuZnJvbSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICBmcm9tID0gZG90RWRnZS5mcm9tLm5vZGVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnJvbSA9IHtcbiAgICAgICAgICBpZDogZG90RWRnZS5mcm9tLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZG90RWRnZS50byBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0byA9IGRvdEVkZ2UudG8ubm9kZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0byA9IHtcbiAgICAgICAgICBpZDogZG90RWRnZS50byxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRvdEVkZ2UuZnJvbSBpbnN0YW5jZW9mIE9iamVjdCAmJiBkb3RFZGdlLmZyb20uZWRnZXMpIHtcbiAgICAgICAgZG90RWRnZS5mcm9tLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKHN1YkVkZ2UpIHtcbiAgICAgICAgICB2YXIgZ3JhcGhFZGdlID0gY29udmVydEVkZ2Uoc3ViRWRnZSk7XG4gICAgICAgICAgZ3JhcGhEYXRhLmVkZ2VzLnB1c2goZ3JhcGhFZGdlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZvckVhY2gyKGZyb20sIHRvLCBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcbiAgICAgICAgdmFyIHN1YkVkZ2UgPSBjcmVhdGVFZGdlKFxuICAgICAgICAgIGdyYXBoRGF0YSxcbiAgICAgICAgICBmcm9tLmlkLFxuICAgICAgICAgIHRvLmlkLFxuICAgICAgICAgIGRvdEVkZ2UudHlwZSxcbiAgICAgICAgICBkb3RFZGdlLmF0dHJcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIGdyYXBoRWRnZSA9IGNvbnZlcnRFZGdlKHN1YkVkZ2UpO1xuICAgICAgICBncmFwaERhdGEuZWRnZXMucHVzaChncmFwaEVkZ2UpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChkb3RFZGdlLnRvIGluc3RhbmNlb2YgT2JqZWN0ICYmIGRvdEVkZ2UudG8uZWRnZXMpIHtcbiAgICAgICAgZG90RWRnZS50by5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJFZGdlKSB7XG4gICAgICAgICAgdmFyIGdyYXBoRWRnZSA9IGNvbnZlcnRFZGdlKHN1YkVkZ2UpO1xuICAgICAgICAgIGdyYXBoRGF0YS5lZGdlcy5wdXNoKGdyYXBoRWRnZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gY29weSB0aGUgb3B0aW9uc1xuICBpZiAoZG90RGF0YS5hdHRyKSB7XG4gICAgZ3JhcGhEYXRhLm9wdGlvbnMgPSBkb3REYXRhLmF0dHI7XG4gIH1cblxuICByZXR1cm4gZ3JhcGhEYXRhO1xufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXZhciAqL1xuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWVuYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbiIsICJleHBvcnQgdHlwZSBJZCA9IG51bWJlciB8IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBDb2xvck9iamVjdCB7XG4gIGJhY2tncm91bmQ6IHN0cmluZztcbiAgYm9yZGVyOiBzdHJpbmc7XG4gIGhpZ2hsaWdodDoge1xuICAgIGJhY2tncm91bmQ6IHN0cmluZztcbiAgICBib3JkZXI6IHN0cmluZztcbiAgfTtcbiAgaG92ZXI6IHtcbiAgICBiYWNrZ3JvdW5kOiBzdHJpbmc7XG4gICAgYm9yZGVyOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VwaGlEYXRhIHtcbiAgbm9kZXM6IEdlcGhpTm9kZVtdO1xuICBlZGdlczogR2VwaGlFZGdlW107XG59XG5leHBvcnQgaW50ZXJmYWNlIEdlcGhpUGFyc2VPcHRpb25zIHtcbiAgZml4ZWQ/OiBib29sZWFuO1xuICBpbmhlcml0Q29sb3I/OiBib29sZWFuO1xuICBwYXJzZUNvbG9yPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXBoaU5vZGUge1xuICBpZDogSWQ7XG5cbiAgYXR0cmlidXRlcz86IHsgdGl0bGU/OiBzdHJpbmcgfTtcbiAgY29sb3I/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBzaXplPzogbnVtYmVyO1xuICB0aXRsZT86IHN0cmluZztcbiAgeD86IG51bWJlcjtcbiAgeT86IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2VwaGlFZGdlIHtcbiAgaWQ6IElkO1xuICBzb3VyY2U6IElkO1xuICB0YXJnZXQ6IElkO1xuXG4gIGF0dHJpYnV0ZXM/OiB7IHRpdGxlPzogc3RyaW5nIH07XG4gIGNvbG9yPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaXNEYXRhIHtcbiAgbm9kZXM6IFZpc05vZGVbXTtcbiAgZWRnZXM6IFZpc0VkZ2VbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaXNOb2RlIHtcbiAgaWQ6IElkO1xuICBmaXhlZDogYm9vbGVhbjtcblxuICBjb2xvcj86IHN0cmluZyB8IENvbG9yT2JqZWN0O1xuICBsYWJlbD86IHN0cmluZztcbiAgc2l6ZT86IG51bWJlcjtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG5cbiAgYXR0cmlidXRlcz86IHVua25vd247XG59XG5leHBvcnQgaW50ZXJmYWNlIFZpc0VkZ2Uge1xuICBpZDogSWQ7XG4gIGZyb206IElkO1xuICB0bzogSWQ7XG5cbiAgYXJyb3dzPzogXCJ0b1wiO1xuICBjb2xvcj86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIGF0dHJpYnV0ZXM/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIENvbnZlcnQgR2VwaGkgdG8gVmlzLlxuICpcbiAqIEBwYXJhbSBnZXBoaUpTT04gLSBUaGUgcGFyc2VkIEpTT04gZGF0YSBpbiBHZXBoaSBmb3JtYXQuXG4gKiBAcGFyYW0gb3B0aW9uc09iaiAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgZGF0YSByZWFkeSB0byBiZSB1c2VkIGluIFZpcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlR2VwaGkoXG4gIGdlcGhpSlNPTjogR2VwaGlEYXRhLFxuICBvcHRpb25zT2JqPzogR2VwaGlQYXJzZU9wdGlvbnNcbik6IFZpc0RhdGEge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIGVkZ2VzOiB7XG4gICAgICBpbmhlcml0Q29sb3I6IGZhbHNlLFxuICAgIH0sXG4gICAgbm9kZXM6IHtcbiAgICAgIGZpeGVkOiBmYWxzZSxcbiAgICAgIHBhcnNlQ29sb3I6IGZhbHNlLFxuICAgIH0sXG4gIH07XG5cbiAgaWYgKG9wdGlvbnNPYmogIT0gbnVsbCkge1xuICAgIGlmIChvcHRpb25zT2JqLmZpeGVkICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMubm9kZXMuZml4ZWQgPSBvcHRpb25zT2JqLmZpeGVkO1xuICAgIH1cbiAgICBpZiAob3B0aW9uc09iai5wYXJzZUNvbG9yICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMubm9kZXMucGFyc2VDb2xvciA9IG9wdGlvbnNPYmoucGFyc2VDb2xvcjtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnNPYmouaW5oZXJpdENvbG9yICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZWRnZXMuaW5oZXJpdENvbG9yID0gb3B0aW9uc09iai5pbmhlcml0Q29sb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ0VkZ2VzID0gZ2VwaGlKU09OLmVkZ2VzO1xuICBjb25zdCB2RWRnZXMgPSBnRWRnZXMubWFwKChnRWRnZSk6IFZpc0VkZ2UgPT4ge1xuICAgIGNvbnN0IHZFZGdlOiBWaXNFZGdlID0ge1xuICAgICAgZnJvbTogZ0VkZ2Uuc291cmNlLFxuICAgICAgaWQ6IGdFZGdlLmlkLFxuICAgICAgdG86IGdFZGdlLnRhcmdldCxcbiAgICB9O1xuXG4gICAgaWYgKGdFZGdlLmF0dHJpYnV0ZXMgIT0gbnVsbCkge1xuICAgICAgdkVkZ2UuYXR0cmlidXRlcyA9IGdFZGdlLmF0dHJpYnV0ZXM7XG4gICAgfVxuICAgIGlmIChnRWRnZS5sYWJlbCAhPSBudWxsKSB7XG4gICAgICB2RWRnZS5sYWJlbCA9IGdFZGdlLmxhYmVsO1xuICAgIH1cbiAgICBpZiAoZ0VkZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIGdFZGdlLmF0dHJpYnV0ZXMudGl0bGUgIT0gbnVsbCkge1xuICAgICAgdkVkZ2UudGl0bGUgPSBnRWRnZS5hdHRyaWJ1dGVzLnRpdGxlO1xuICAgIH1cbiAgICBpZiAoZ0VkZ2UudHlwZSA9PT0gXCJEaXJlY3RlZFwiKSB7XG4gICAgICB2RWRnZS5hcnJvd3MgPSBcInRvXCI7XG4gICAgfVxuICAgIC8vIGVkZ2VbJ3ZhbHVlJ10gPSBnRWRnZS5hdHRyaWJ1dGVzICE9IG51bGwgPyBnRWRnZS5hdHRyaWJ1dGVzLldlaWdodCA6IHVuZGVmaW5lZDtcbiAgICAvLyBlZGdlWyd3aWR0aCddID0gZWRnZVsndmFsdWUnXSAhPSBudWxsID8gdW5kZWZpbmVkIDogZWRnZWdFZGdlLnNpemU7XG4gICAgaWYgKGdFZGdlLmNvbG9yICYmIG9wdGlvbnMuZWRnZXMuaW5oZXJpdENvbG9yID09PSBmYWxzZSkge1xuICAgICAgdkVkZ2UuY29sb3IgPSBnRWRnZS5jb2xvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdkVkZ2U7XG4gIH0pO1xuXG4gIGNvbnN0IHZOb2RlcyA9IGdlcGhpSlNPTi5ub2Rlcy5tYXAoKGdOb2RlKTogVmlzTm9kZSA9PiB7XG4gICAgY29uc3Qgdk5vZGU6IFZpc05vZGUgPSB7XG4gICAgICBpZDogZ05vZGUuaWQsXG4gICAgICBmaXhlZDogb3B0aW9ucy5ub2Rlcy5maXhlZCAmJiBnTm9kZS54ICE9IG51bGwgJiYgZ05vZGUueSAhPSBudWxsLFxuICAgIH07XG5cbiAgICBpZiAoZ05vZGUuYXR0cmlidXRlcyAhPSBudWxsKSB7XG4gICAgICB2Tm9kZS5hdHRyaWJ1dGVzID0gZ05vZGUuYXR0cmlidXRlcztcbiAgICB9XG4gICAgaWYgKGdOb2RlLmxhYmVsICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLmxhYmVsID0gZ05vZGUubGFiZWw7XG4gICAgfVxuICAgIGlmIChnTm9kZS5zaXplICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLnNpemUgPSBnTm9kZS5zaXplO1xuICAgIH1cbiAgICBpZiAoZ05vZGUuYXR0cmlidXRlcyAhPSBudWxsICYmIGdOb2RlLmF0dHJpYnV0ZXMudGl0bGUgIT0gbnVsbCkge1xuICAgICAgdk5vZGUudGl0bGUgPSBnTm9kZS5hdHRyaWJ1dGVzLnRpdGxlO1xuICAgIH1cbiAgICBpZiAoZ05vZGUudGl0bGUgIT0gbnVsbCkge1xuICAgICAgdk5vZGUudGl0bGUgPSBnTm9kZS50aXRsZTtcbiAgICB9XG4gICAgaWYgKGdOb2RlLnggIT0gbnVsbCkge1xuICAgICAgdk5vZGUueCA9IGdOb2RlLng7XG4gICAgfVxuICAgIGlmIChnTm9kZS55ICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLnkgPSBnTm9kZS55O1xuICAgIH1cbiAgICBpZiAoZ05vZGUuY29sb3IgIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMubm9kZXMucGFyc2VDb2xvciA9PT0gdHJ1ZSkge1xuICAgICAgICB2Tm9kZS5jb2xvciA9IGdOb2RlLmNvbG9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdk5vZGUuY29sb3IgPSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogZ05vZGUuY29sb3IsXG4gICAgICAgICAgYm9yZGVyOiBnTm9kZS5jb2xvcixcbiAgICAgICAgICBoaWdobGlnaHQ6IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGdOb2RlLmNvbG9yLFxuICAgICAgICAgICAgYm9yZGVyOiBnTm9kZS5jb2xvcixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBnTm9kZS5jb2xvcixcbiAgICAgICAgICAgIGJvcmRlcjogZ05vZGUuY29sb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdk5vZGU7XG4gIH0pO1xuXG4gIHJldHVybiB7IG5vZGVzOiB2Tm9kZXMsIGVkZ2VzOiB2RWRnZXMgfTtcbn1cbiIsICJleHBvcnQgaW50ZXJmYWNlIExvY2FsZSB7XG4gIGFkZERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGFkZEVkZ2U6IHN0cmluZztcbiAgYWRkTm9kZTogc3RyaW5nO1xuICBiYWNrOiBzdHJpbmc7XG4gIGNsb3NlOiBzdHJpbmc7XG4gIGNyZWF0ZUVkZ2VFcnJvcjogc3RyaW5nO1xuICBkZWw6IHN0cmluZztcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBzdHJpbmc7XG4gIGVkZ2VEZXNjcmlwdGlvbjogc3RyaW5nO1xuICBlZGl0OiBzdHJpbmc7XG4gIGVkaXRDbHVzdGVyRXJyb3I6IHN0cmluZztcbiAgZWRpdEVkZ2U6IHN0cmluZztcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjogc3RyaW5nO1xuICBlZGl0Tm9kZTogc3RyaW5nO1xufVxuZXhwb3J0IHR5cGUgTG9jYWxlcyA9IFJlY29yZDxzdHJpbmcsIExvY2FsZT47XG5cbi8vIEVuZ2xpc2hcbmV4cG9ydCBjb25zdCBlbjogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJDbGljayBpbiBhbiBlbXB0eSBzcGFjZSB0byBwbGFjZSBhIG5ldyBub2RlLlwiLFxuICBhZGRFZGdlOiBcIkFkZCBFZGdlXCIsXG4gIGFkZE5vZGU6IFwiQWRkIE5vZGVcIixcbiAgYmFjazogXCJCYWNrXCIsXG4gIGNsb3NlOiBcIkNsb3NlXCIsXG4gIGNyZWF0ZUVkZ2VFcnJvcjogXCJDYW5ub3QgbGluayBlZGdlcyB0byBhIGNsdXN0ZXIuXCIsXG4gIGRlbDogXCJEZWxldGUgc2VsZWN0ZWRcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIkNsdXN0ZXJzIGNhbm5vdCBiZSBkZWxldGVkLlwiLFxuICBlZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGljayBvbiBhIG5vZGUgYW5kIGRyYWcgdGhlIGVkZ2UgdG8gYW5vdGhlciBub2RlIHRvIGNvbm5lY3QgdGhlbS5cIixcbiAgZWRpdDogXCJFZGl0XCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwiQ2x1c3RlcnMgY2Fubm90IGJlIGVkaXRlZC5cIixcbiAgZWRpdEVkZ2U6IFwiRWRpdCBFZGdlXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGljayBvbiB0aGUgY29udHJvbCBwb2ludHMgYW5kIGRyYWcgdGhlbSB0byBhIG5vZGUgdG8gY29ubmVjdCB0byBpdC5cIixcbiAgZWRpdE5vZGU6IFwiRWRpdCBOb2RlXCIsXG59O1xuXG4vLyBHZXJtYW5cbmV4cG9ydCBjb25zdCBkZTogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjpcbiAgICBcIktsaWNrZSBhdWYgZWluZSBmcmVpZSBTdGVsbGUsIHVtIGVpbmVuIG5ldWVuIEtub3RlbiB6dSBwbGF6aWVyZW4uXCIsXG4gIGFkZEVkZ2U6IFwiS2FudGUgaGluenVmXFx1MDBmY2dlblwiLFxuICBhZGROb2RlOiBcIktub3RlbiBoaW56dWZcXHUwMGZjZ2VuXCIsXG4gIGJhY2s6IFwiWnVyXFx1MDBmY2NrXCIsXG4gIGNsb3NlOiBcIlNjaGxpZcOfZW5cIixcbiAgY3JlYXRlRWRnZUVycm9yOlxuICAgIFwiRXMgaXN0IG5pY2h0IG1cXHUwMGY2Z2xpY2gsIEthbnRlbiBtaXQgQ2x1c3Rlcm4genUgdmVyYmluZGVuLlwiLFxuICBkZWw6IFwiTFxcdTAwZjZzY2hlIEF1c3dhaGxcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIkNsdXN0ZXIga1xcdTAwZjZubmVuIG5pY2h0IGdlbFxcdTAwZjZzY2h0IHdlcmRlbi5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiS2xpY2tlIGF1ZiBlaW5lbiBLbm90ZW4gdW5kIHppZWhlIGRpZSBLYW50ZSB6dSBlaW5lbSBhbmRlcmVuIEtub3RlbiwgdW0gZGllc2UgenUgdmVyYmluZGVuLlwiLFxuICBlZGl0OiBcIkVkaXRpZXJlblwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIkNsdXN0ZXIga1xcdTAwZjZubmVuIG5pY2h0IGVkaXRpZXJ0IHdlcmRlbi5cIixcbiAgZWRpdEVkZ2U6IFwiS2FudGUgZWRpdGllcmVuXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJLbGlja2UgYXVmIGRpZSBWZXJiaW5kdW5nc3B1bmt0ZSB1bmQgemllaGUgZGllc2UgYXVmIGVpbmVuIEtub3RlbiwgdW0gc2llIHp1IHZlcmJpbmRlbi5cIixcbiAgZWRpdE5vZGU6IFwiS25vdGVuIGVkaXRpZXJlblwiLFxufTtcblxuLy8gU3BhbmlzaFxuZXhwb3J0IGNvbnN0IGVzOiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOlxuICAgIFwiSGFnYSBjbGljIGVuIHVuIGx1Z2FyIHZhY1xcdTAwZWRvIHBhcmEgY29sb2NhciB1biBudWV2byBub2RvLlwiLFxuICBhZGRFZGdlOiBcIkFcXHUwMGYxYWRpciBhcmlzdGFcIixcbiAgYWRkTm9kZTogXCJBXFx1MDBmMWFkaXIgbm9kb1wiLFxuICBiYWNrOiBcIkF0clxcdTAwZTFzXCIsXG4gIGNsb3NlOiBcIkNlcnJhclwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwiTm8gc2UgcHVlZGUgY29uZWN0YXIgdW5hIGFyaXN0YSBhIHVuIGdydXBvLlwiLFxuICBkZWw6IFwiRWxpbWluYXIgc2VsZWNjaVxcdTAwZjNuXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJObyBlcyBwb3NpYmxlIGVsaW1pbmFyIGdydXBvcy5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiSGFnYSBjbGljIGVuIHVuIG5vZG8geSBhcnJhc3RyZSBsYSBhcmlzdGEgaGFjaWEgb3RybyBub2RvIHBhcmEgY29uZWN0YXJsb3MuXCIsXG4gIGVkaXQ6IFwiRWRpdGFyXCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwiTm8gZXMgcG9zaWJsZSBlZGl0YXIgZ3J1cG9zLlwiLFxuICBlZGl0RWRnZTogXCJFZGl0YXIgYXJpc3RhXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJIYWdhIGNsaWMgZW4gdW4gcHVudG8gZGUgY29udHJvbCB5IGFycmFzdHJlbG8gYSB1biBub2RvIHBhcmEgY29uZWN0YXJsby5cIixcbiAgZWRpdE5vZGU6IFwiRWRpdGFyIG5vZG9cIixcbn07XG5cbi8vSXRhbGlhbm9cbmV4cG9ydCBjb25zdCBpdDogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJDbGljY2EgcGVyIGFnZ2l1bmdlcmUgdW4gbnVvdm8gbm9kb1wiLFxuICBhZGRFZGdlOiBcIkFnZ2l1bmdpIHVuIHZlcnRpY2VcIixcbiAgYWRkTm9kZTogXCJBZ2dpdW5naSB1biBub2RvXCIsXG4gIGJhY2s6IFwiSW5kaWV0cm9cIixcbiAgY2xvc2U6IFwiQ2hpdWRlcmVcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIk5vbiBzaSBwb3Nzb25vIGNvbGxlZ2FyZSB2ZXJ0aWNpIGFkIHVuIGNsdXN0ZXJcIixcbiAgZGVsOiBcIkNhbmNlbGxhIGxhIHNlbGV6aW9uZVwiLFxuICBkZWxldGVDbHVzdGVyRXJyb3I6IFwiSSBjbHVzdGVyIG5vbiBwb3Nzb25vIGVzc2VyZSBjYW5jZWxsYXRpXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkNsaWNjYSBzdSB1biBub2RvIGUgdHJhc2NpbmFsbyBhZCB1biBhbHRybyBub2RvIHBlciBjb25uZXR0ZXJsaS5cIixcbiAgZWRpdDogXCJNb2RpZmljYVwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIkkgY2x1c3RlcnMgbm9uIHBvc3Nvbm8gZXNzZXJlIG1vZGlmaWNhdGkuXCIsXG4gIGVkaXRFZGdlOiBcIk1vZGlmaWNhIGlsIHZlcnRpY2VcIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkNsaWNjYSBzdWkgUHVudGkgZGkgY29udHJvbGxvIGUgdHJhc2NpbmFsaSBhZCB1biBub2RvIHBlciBjb25uZXR0ZXJsaS5cIixcbiAgZWRpdE5vZGU6IFwiTW9kaWZpY2EgaWwgbm9kb1wiLFxufTtcblxuLy8gRHV0Y2hcbmV4cG9ydCBjb25zdCBubDogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJLbGlrIG9wIGVlbiBsZWVnIGdlYmllZCBvbSBlZW4gbmlldXdlIG5vZGUgdGUgbWFrZW4uXCIsXG4gIGFkZEVkZ2U6IFwiTGluayB0b2V2b2VnZW5cIixcbiAgYWRkTm9kZTogXCJOb2RlIHRvZXZvZWdlblwiLFxuICBiYWNrOiBcIlRlcnVnXCIsXG4gIGNsb3NlOiBcIlNsdWl0ZW5cIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIkthbiBnZWVuIGxpbmsgbWFrZW4gbmFhciBlZW4gY2x1c3Rlci5cIixcbiAgZGVsOiBcIlNlbGVjdGllIHZlcndpamRlcmVuXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBrdW5uZW4gbmlldCB3b3JkZW4gdmVyd2lqZGVyZC5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiS2xpayBvcCBlZW4gbm9kZSBlbiBzbGVlcCBkZSBsaW5rIG5hYXIgZWVuIGFuZGVyZSBub2RlIG9tIHplIHRlIHZlcmJpbmRlbi5cIixcbiAgZWRpdDogXCJXaWp6aWdlblwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIkNsdXN0ZXJzIGt1bm5lbiBuaWV0IHdvcmRlbiBhYW5nZXBhc3QuXCIsXG4gIGVkaXRFZGdlOiBcIkxpbmsgd2lqemlnZW5cIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIktsaWsgb3AgZGUgdmVyYmluZGluZ3NwdW50ZW4gZW4gc2xlZXAgemUgbmFhciBlZW4gbm9kZSBvbSBkYWFybWVlIHRlIHZlcmJpbmRlbi5cIixcbiAgZWRpdE5vZGU6IFwiTm9kZSB3aWp6aWdlblwiLFxufTtcblxuLy8gUG9ydHVndWVzZSBCcmF6aWxcbmV4cG9ydCBjb25zdCBwdDogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJDbGlxdWUgZW0gdW0gZXNwYcOnbyBlbSBicmFuY28gcGFyYSBhZGljaW9uYXIgdW0gbm92byBuw7NcIixcbiAgYWRkRWRnZTogXCJBZGljaW9uYXIgYXJlc3RhXCIsXG4gIGFkZE5vZGU6IFwiQWRpY2lvbmFyIG7Ds1wiLFxuICBiYWNrOiBcIlZvbHRhclwiLFxuICBjbG9zZTogXCJGZWNoYXJcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIk7Do28gZm9pIHBvc3PDrXZlbCBsaW5rYXIgYXJlc3RhcyBhIHVtIGNsdXN0ZXIuXCIsXG4gIGRlbDogXCJSZW1vdmVyIHNlbGVjaW9uYWRvXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBuw6NvIHB1ZGVyYW0gc2VyIHJlbW92aWRvcy5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpcXVlIGVtIHVtIG7DsyBlIGFycmFzdGUgYSBhcmVzdGEgYXTDqSBvdXRybyBuw7MgcGFyYSBjb25lY3TDoS1sb3NcIixcbiAgZWRpdDogXCJFZGl0YXJcIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBuw6NvIHB1ZGVyYW0gc2VyIGVkaXRhZG9zLlwiLFxuICBlZGl0RWRnZTogXCJFZGl0YXIgYXJlc3RhXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGlxdWUgbm9zIHBvbnRvcyBkZSBjb250cm9sZSBlIG9zIGFycmFzdGUgcGFyYSB1bSBuw7MgcGFyYSBjb25lY3TDoS1sb3NcIixcbiAgZWRpdE5vZGU6IFwiRWRpdGFyIG7Ds1wiLFxufTtcblxuLy8gUnVzc2lhblxuZXhwb3J0IGNvbnN0IHJ1OiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOiBcItCa0LvQuNC60L3QuNGC0LUg0LIg0YHQstC+0LHQvtC00L3QvtC1INC80LXRgdGC0L4sINGH0YLQvtCx0Ysg0LTQvtCx0LDQstC40YLRjCDQvdC+0LLRi9C5INGD0LfQtdC7LlwiLFxuICBhZGRFZGdlOiBcItCU0L7QsdCw0LLQuNGC0Ywg0YDQtdCx0YDQvlwiLFxuICBhZGROb2RlOiBcItCU0L7QsdCw0LLQuNGC0Ywg0YPQt9C10LtcIixcbiAgYmFjazogXCLQndCw0LfQsNC0XCIsXG4gIGNsb3NlOiBcItCX0LDQutGA0YvQstCw0YLRjFwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwi0J3QtdCy0L7Qt9C80L7QttC90L4g0YHQvtC10LTQuNC90LjRgtGMINGA0LXQsdGA0LAg0LIg0LrQu9Cw0YHRgtC10YAuXCIsXG4gIGRlbDogXCLQo9C00LDQu9C40YLRjCDQstGL0LHRgNCw0L3QvdC+0LVcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcItCa0LvQsNGB0YLQtdGA0Ysg0L3QtSDQvNC+0LPRg9GCINCx0YvRgtGMINGD0LTQsNC70LXQvdGLXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvQuNC60L3QuNGC0LUg0L3QsCDRg9C30LXQuyDQuCDQv9GA0L7RgtGP0L3QuNGC0LUg0YDQtdCx0YDQviDQuiDQtNGA0YPQs9C+0LzRgyDRg9C30LvRgywg0YfRgtC+0LHRiyDRgdC+0LXQtNC40L3QuNGC0Ywg0LjRhS5cIixcbiAgZWRpdDogXCLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjFwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcItCa0LvQsNGB0YLQtdGA0Ysg0L3QtdC00L7RgdGC0YPQv9C90Ysg0LTQu9GPINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8uXCIsXG4gIGVkaXRFZGdlOiBcItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGA0LXQsdGA0L5cIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvQuNC60L3QuNGC0LUg0L3QsCDQutC+0L3RgtGA0L7Qu9GM0L3Ri9C1INGC0L7Rh9C60Lgg0Lgg0L/QtdGA0LXRgtCw0YnQuNGC0LUg0LjRhSDQsiDRg9C30LXQuywg0YfRgtC+0LHRiyDQv9C+0LTQutC70Y7Rh9C40YLRjNGB0Y8g0Log0L3QtdC80YMuXCIsXG4gIGVkaXROb2RlOiBcItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGD0LfQtdC7XCIsXG59O1xuXG4vLyBDaGluZXNlXG5leHBvcnQgY29uc3QgY246IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwi5Y2V5Ye756m655m95aSE5pS+572u5paw6IqC54K544CCXCIsXG4gIGFkZEVkZ2U6IFwi5re75Yqg6L+e5o6l57q/XCIsXG4gIGFkZE5vZGU6IFwi5re75Yqg6IqC54K5XCIsXG4gIGJhY2s6IFwi6L+U5ZueXCIsXG4gIGNsb3NlOiBcIumXnOmWiVwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwi5peg5rOV5bCG6L+e5o6l57q/6L+e5o6l5Yiw576k6ZuG44CCXCIsXG4gIGRlbDogXCLliKDpmaTpgInlrppcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIuaXoOazleWIoOmZpOe+pOmbhuOAglwiLFxuICBlZGdlRGVzY3JpcHRpb246IFwi5Y2V5Ye75p+Q5Liq6IqC54K55bm25bCG6K+l6L+e5o6l57q/5ouW5Yqo5Yiw5Y+m5LiA5Liq6IqC54K55Lul6L+e5o6l5a6D5Lus44CCXCIsXG4gIGVkaXQ6IFwi57yW6L6RXCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwi5peg5rOV57yW6L6R576k6ZuG44CCXCIsXG4gIGVkaXRFZGdlOiBcIue8lui+kei/nuaOpee6v1wiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOiBcIuWNleWHu+aOp+WItuiKgueCueW5tuWwhuWug+S7rOaLluWIsOiKgueCueS4iui/nuaOpeOAglwiLFxuICBlZGl0Tm9kZTogXCLnvJbovpHoioLngrlcIixcbn07XG5cbi8vIFVrcmFpbmlhblxuZXhwb3J0IGNvbnN0IHVrOiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOiBcIkvQu9GW0LrQvdGW0YLRjCDQvdCwINCy0ZbQu9GM0L3QtSDQvNGW0YHRhtC1LCDRidC+0LEg0LTQvtC00LDRgtC4INC90L7QstC40Lkg0LLRg9C30L7Quy5cIixcbiAgYWRkRWRnZTogXCLQlNC+0LTQsNGC0Lgg0LrRgNCw0LlcIixcbiAgYWRkTm9kZTogXCLQlNC+0LTQsNGC0Lgg0LLRg9C30L7Qu1wiLFxuICBiYWNrOiBcItCd0LDQt9Cw0LRcIixcbiAgY2xvc2U6IFwi0JfQsNC60YDQuNGC0LhcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcItCd0LUg0LzQvtC20LvQuNCy0L4g0L7QsSfRlNC00L3QsNGC0Lgg0LrRgNCw0Zcg0LIg0LPRgNGD0L/Rgy5cIixcbiAgZGVsOiBcItCS0LjQtNCw0LvQuNGC0Lgg0L7QsdGA0LDQvdC1XCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCLQk9GA0YPQv9C4INC90LUg0LzQvtC20YPRgtGMINCx0YPRgtC4INCy0LjQtNCw0LvQtdC90ZYuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvRltC60L3RltGC0Ywg0L3QsCDQstGD0LfQvtC7INGWINC/0LXRgNC10YLRj9Cz0L3RltGC0Ywg0LrRgNCw0Lkg0LTQviDRltC90YjQvtCz0L4g0LLRg9C30LvQsCwg0YnQvtCxINGX0YUg0Lcn0ZTQtNC90LDRgtC4LlwiLFxuICBlZGl0OiBcItCg0LXQtNCw0LPRg9Cy0LDRgtC4XCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwi0JPRgNGD0L/QuCDQvdC10LTQvtGB0YLRg9C/0L3RliDQtNC70Y8g0YDQtdC00LDQs9GD0LLQsNC90L3Rjy5cIixcbiAgZWRpdEVkZ2U6IFwi0KDQtdC00LDQs9GD0LLQsNGC0Lgg0LrRgNCw0LlcIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvRltC60L3RltGC0Ywg0L3QsCDQutC+0L3RgtGA0L7Qu9GM0L3RliDRgtC+0YfQutC4INGWINC/0LXRgNC10YLRj9Cz0L3RltGC0Ywg0ZfRhSDRgyDQstGD0LfQvtC7LCDRidC+0LEg0L/RltC00LrQu9GO0YfQuNGC0LjRgdGPINC00L4g0L3RjNC+0LPQvi5cIixcbiAgZWRpdE5vZGU6IFwi0KDQtdC00LDQs9GD0LLQsNGC0Lgg0LLRg9C30L7Qu1wiLFxufTtcblxuLy8gRnJlbmNoXG5leHBvcnQgY29uc3QgZnI6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiQ2xpcXVleiBkYW5zIHVuIGVuZHJvaXQgdmlkZSBwb3VyIHBsYWNlciB1biBuxZN1ZC5cIixcbiAgYWRkRWRnZTogXCJBam91dGVyIHVuIGxpZW5cIixcbiAgYWRkTm9kZTogXCJBam91dGVyIHVuIG7Fk3VkXCIsXG4gIGJhY2s6IFwiUmV0b3VyXCIsXG4gIGNsb3NlOiBcIkZlcm1lclwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwiSW1wb3NzaWJsZSBkZSBjcsOpZXIgdW4gbGllbiB2ZXJzIHVuIGNsdXN0ZXIuXCIsXG4gIGRlbDogXCJFZmZhY2VyIGxhIHPDqWxlY3Rpb25cIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIkxlcyBjbHVzdGVycyBuZSBwZXV2ZW50IHBhcyDDqnRyZSBlZmZhY8Opcy5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpcXVleiBzdXIgdW4gbsWTdWQgZXQgZ2xpc3NleiBsZSBsaWVuIHZlcnMgdW4gYXV0cmUgbsWTdWQgcG91ciBsZXMgY29ubmVjdGVyLlwiLFxuICBlZGl0OiBcIsOJZGl0ZXJcIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJMZXMgY2x1c3RlcnMgbmUgcGV1dmVudCBwYXMgw6p0cmUgw6lkaXTDqXMuXCIsXG4gIGVkaXRFZGdlOiBcIsOJZGl0ZXIgbGUgbGllblwiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpcXVleiBzdXIgbGVzIHBvaW50cyBkZSBjb250csO0bGUgZXQgZ2xpc3Nlei1sZXMgcG91ciBjb25uZWN0ZXIgdW4gbsWTdWQuXCIsXG4gIGVkaXROb2RlOiBcIsOJZGl0ZXIgbGUgbsWTdWRcIixcbn07XG5cbi8vIEN6ZWNoXG5leHBvcnQgY29uc3QgY3M6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiS2x1a251dMOtbSBkbyBwcsOhemRuw6lobyBwcm9zdG9ydSBtxa/FvmV0ZSBwxZlpZGF0IG5vdsO9IHZyY2hvbC5cIixcbiAgYWRkRWRnZTogXCJQxZlpZGF0IGhyYW51XCIsXG4gIGFkZE5vZGU6IFwiUMWZaWRhdCB2cmNob2xcIixcbiAgYmFjazogXCJacMSbdFwiLFxuICBjbG9zZTogXCJaYXbFmcOtdFwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwiTmVsemUgcMWZaXBvaml0IGhyYW51IGtlIHNobHVrdS5cIixcbiAgZGVsOiBcIlNtYXphdCB2w71ixJtyXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJOZWx6ZSBtYXphdCBzaGx1a3kuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIlDFmWV0YcW+ZW7DrW0geiBqZWRub2hvIHZyY2hvbHUgZG8gZHJ1aMOpaG8gbcWvxb5ldGUgc3Bvaml0IHR5dG8gdnJjaG9seSBub3ZvdSBocmFub3UuXCIsXG4gIGVkaXQ6IFwiVXByYXZpdFwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIk5lbHplIHVwcmF2b3ZhdCBzaGx1a3kuXCIsXG4gIGVkaXRFZGdlOiBcIlVwcmF2aXQgaHJhbnVcIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIlDFmWV0YcW+ZW7DrW0ga29udHJvbG7DrWhvIHZyY2hvbHUgaHJhbnkgamkgbcWvxb5ldGUgcMWZaXBvaml0IGsgamluw6ltdSB2cmNob2x1LlwiLFxuICBlZGl0Tm9kZTogXCJVcHJhdml0IHZyY2hvbFwiLFxufTtcbiIsICIvKipcbiAqIEFzc29jaWF0ZXMgYSBjYW52YXMgdG8gYSBnaXZlbiBpbWFnZSwgY29udGFpbmluZyBhIG51bWJlciBvZiByZW5kZXJpbmdzXG4gKiBvZiB0aGUgaW1hZ2UgYXQgdmFyaW91cyBzaXplcy5cbiAqXG4gKiBUaGlzIHRlY2huaXF1ZSBpcyBrbm93biBhcyAnbWlwbWFwcGluZycuXG4gKlxuICogTk9URTogSW1hZ2VzIGNhbiBhbHNvIGJlIG9mIHR5cGUgJ2RhdGE6c3ZnK3htbGAuIFRoaXMgY29kZSBhbHNvIHdvcmtzXG4gKiAgICAgICBmb3Igc3ZnLCBidXQgdGhlIG1pcG1hcHBpbmcgbWF5IG5vdCBiZSBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHtJbWFnZX0gaW1hZ2VcbiAqL1xuY2xhc3MgQ2FjaGVkSW1hZ2Uge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5OVU1fSVRFUkFUSU9OUyA9IDQ7IC8vIE51bWJlciBvZiBpdGVtcyBpbiB0aGUgY29vcmRpbmF0ZXMgYXJyYXlcblxuICAgIHRoaXMuaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGltYWdlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAqL1xuICBpbml0KCkge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKCkpIHJldHVybjtcblxuICAgIHRoaXMuc3JjID0gdGhpcy5pbWFnZS5zcmM7IC8vIEZvciBzYW1lIGludGVyZmFjZSB3aXRoIEltYWdlXG4gICAgY29uc3QgdyA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgY29uc3QgaCA9IHRoaXMuaW1hZ2UuaGVpZ2h0O1xuXG4gICAgLy8gRWFzZSBleHRlcm5hbCBhY2Nlc3NcbiAgICB0aGlzLndpZHRoID0gdztcbiAgICB0aGlzLmhlaWdodCA9IGg7XG5cbiAgICBjb25zdCBoMiA9IE1hdGguZmxvb3IoaCAvIDIpO1xuICAgIGNvbnN0IGg0ID0gTWF0aC5mbG9vcihoIC8gNCk7XG4gICAgY29uc3QgaDggPSBNYXRoLmZsb29yKGggLyA4KTtcbiAgICBjb25zdCBoMTYgPSBNYXRoLmZsb29yKGggLyAxNik7XG5cbiAgICBjb25zdCB3MiA9IE1hdGguZmxvb3IodyAvIDIpO1xuICAgIGNvbnN0IHc0ID0gTWF0aC5mbG9vcih3IC8gNCk7XG4gICAgY29uc3QgdzggPSBNYXRoLmZsb29yKHcgLyA4KTtcbiAgICBjb25zdCB3MTYgPSBNYXRoLmZsb29yKHcgLyAxNik7XG5cbiAgICAvLyBNYWtlIGNhbnZhcyBhcyBzbWFsbCBhcyBwb3NzaWJsZVxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gMyAqIHc0O1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGgyO1xuXG4gICAgLy8gQ29vcmRpbmF0ZXMgYW5kIHNpemVzIG9mIGltYWdlcyBjb250YWluZWQgaW4gdGhlIGNhbnZhc1xuICAgIC8vIFZhbHVlcyBwZXIgcm93OiAgW3RvcCB4LCBsZWZ0IHksIHdpZHRoLCBoZWlnaHRdXG5cbiAgICB0aGlzLmNvb3JkaW5hdGVzID0gW1xuICAgICAgWzAsIDAsIHcyLCBoMl0sXG4gICAgICBbdzIsIDAsIHc0LCBoNF0sXG4gICAgICBbdzIsIGg0LCB3OCwgaDhdLFxuICAgICAgWzUgKiB3OCwgaDQsIHcxNiwgaDE2XSxcbiAgICBdO1xuXG4gICAgdGhpcy5fZmlsbE1pcE1hcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGluaXQoKSBoYXMgYmVlbiBjYWxsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGluaXRpYWxpemVkKCkge1xuICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGVzICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IG1haW4gaW1hZ2UgaW4gdmFyaW91cyBzaXplcyB0byB0aGUgY29udGV4dC5cbiAgICpcbiAgICogVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBpcyB0byByZWR1Y2UgYXJ0ZWZhY3RzIGR1ZSB0byBpbnRlcnBvbGF0aW9uXG4gICAqIGF0IGRpZmZlcmluZyB6b29tIGxldmVscy5cbiAgICpcbiAgICogU291cmNlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xODc2MTQwNC8xMjIzNTMxXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kcyB0YWtlcyB0aGUgcmVzaXppbmcgb3V0IG9mIHRoZSBkcmF3aW5nIGxvb3AsIGluIG9yZGVyIHRvXG4gICAqIHJlZHVjZSBwZXJmb3JtYW5jZSBvdmVyaGVhZC5cbiAgICpcbiAgICogVE9ETzogVGhlIGNvZGUgYXNzdW1lcyB0aGF0IGEgMkQgY29udGV4dCBjYW4gYWx3YXlzIGJlIGdvdHRlbi4gVGhpcyBpc1xuICAgKiAgICAgICBub3QgbmVjZXNzYXJpbHkgdHJ1ZSEgT1RPSCwgaWYgbm90IHRydWUgdGhlbiB1c2FnZSBvZiB0aGlzIGNsYXNzXG4gICAqICAgICAgIGlzIHNlbnNlbGVzcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9maWxsTWlwTWFwKCkge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcblxuICAgIC8vIEZpcnN0IHpvb20tbGV2ZWwgY29tZXMgZnJvbSB0aGUgaW1hZ2VcbiAgICBjb25zdCB0byA9IHRoaXMuY29vcmRpbmF0ZXNbMF07XG4gICAgY3R4LmRyYXdJbWFnZSh0aGlzLmltYWdlLCB0b1swXSwgdG9bMV0sIHRvWzJdLCB0b1szXSk7XG5cbiAgICAvLyBUaGUgcmVzdCBhcmUgY29weSBhY3Rpb25zIGludGVybmFsIHRvIHRoZSBjYW52YXMvY29udGV4dFxuICAgIGZvciAobGV0IGl0ZXJhdGlvbnMgPSAxOyBpdGVyYXRpb25zIDwgdGhpcy5OVU1fSVRFUkFUSU9OUzsgaXRlcmF0aW9ucysrKSB7XG4gICAgICBjb25zdCBmcm9tID0gdGhpcy5jb29yZGluYXRlc1tpdGVyYXRpb25zIC0gMV07XG4gICAgICBjb25zdCB0byA9IHRoaXMuY29vcmRpbmF0ZXNbaXRlcmF0aW9uc107XG5cbiAgICAgIGN0eC5kcmF3SW1hZ2UoXG4gICAgICAgIHRoaXMuY2FudmFzLFxuICAgICAgICBmcm9tWzBdLFxuICAgICAgICBmcm9tWzFdLFxuICAgICAgICBmcm9tWzJdLFxuICAgICAgICBmcm9tWzNdLFxuICAgICAgICB0b1swXSxcbiAgICAgICAgdG9bMV0sXG4gICAgICAgIHRvWzJdLFxuICAgICAgICB0b1szXVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHJhdyB0aGUgaW1hZ2UsIHVzaW5nIHRoZSBtaXBtYXAgaWYgbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBNaXBNYXAgaXMgb25seSB1c2VkIGlmIHBhcmFtIGZhY3RvciA+IDI7IG90aGVyd2lzZSwgb3JpZ2luYWwgYml0bWFwXG4gICAqIGlzIHJlc2l6ZWQuIFRoaXMgaXMgYWxzbyB1c2VkIHRvIHNraXAgbWlwbWFwIHVzYWdlLCBlLmcuIGJ5IHNldHRpbmcgZmFjdG9yID0gMVxuICAgKlxuICAgKiBDcmVkaXRzIHRvICdBbGV4IGRlIE11bGRlcicgZm9yIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4ICBjb250ZXh0IG9uIHdoaWNoIHRvIGRyYXcgem9vbWVkIGltYWdlXG4gICAqIEBwYXJhbSB7RmxvYXR9IGZhY3RvciBzY2FsZSBmYWN0b3IgYXQgd2hpY2ggdG8gZHJhd1xuICAgKiBAcGFyYW0ge251bWJlcn0gbGVmdFxuICAgKiBAcGFyYW0ge251bWJlcn0gdG9wXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XG4gICAqL1xuICBkcmF3SW1hZ2VBdFBvc2l0aW9uKGN0eCwgZmFjdG9yLCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQoKSkgcmV0dXJuOyAvL2Nhbid0IGRyYXcgaW1hZ2UgeWV0IG5vdCBpbnRpYWxpemVkXG5cbiAgICBpZiAoZmFjdG9yID4gMikge1xuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHpvb21lZCBpbWFnZSB0byB1c2VcbiAgICAgIGZhY3RvciAqPSAwLjU7XG4gICAgICBsZXQgaXRlcmF0aW9ucyA9IDA7XG4gICAgICB3aGlsZSAoZmFjdG9yID4gMiAmJiBpdGVyYXRpb25zIDwgdGhpcy5OVU1fSVRFUkFUSU9OUykge1xuICAgICAgICBmYWN0b3IgKj0gMC41O1xuICAgICAgICBpdGVyYXRpb25zICs9IDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVyYXRpb25zID49IHRoaXMuTlVNX0lURVJBVElPTlMpIHtcbiAgICAgICAgaXRlcmF0aW9ucyA9IHRoaXMuTlVNX0lURVJBVElPTlMgLSAxO1xuICAgICAgfVxuICAgICAgLy9jb25zb2xlLmxvZyhcIml0ZXJhdGlvbnM6IFwiICsgaXRlcmF0aW9ucyk7XG5cbiAgICAgIGNvbnN0IGZyb20gPSB0aGlzLmNvb3JkaW5hdGVzW2l0ZXJhdGlvbnNdO1xuICAgICAgY3R4LmRyYXdJbWFnZShcbiAgICAgICAgdGhpcy5jYW52YXMsXG4gICAgICAgIGZyb21bMF0sXG4gICAgICAgIGZyb21bMV0sXG4gICAgICAgIGZyb21bMl0sXG4gICAgICAgIGZyb21bM10sXG4gICAgICAgIGxlZnQsXG4gICAgICAgIHRvcCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRHJhdyBpbWFnZSBkaXJlY3RseVxuICAgICAgY3R4LmRyYXdJbWFnZSh0aGlzLmltYWdlLCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYWNoZWRJbWFnZTtcbiIsICJpbXBvcnQgQ2FjaGVkSW1hZ2UgZnJvbSBcIi4vQ2FjaGVkSW1hZ2VcIjtcblxuLyoqXG4gKiBUaGlzIGNhbGxiYWNrIGlzIGEgY2FsbGJhY2sgdGhhdCBhY2NlcHRzIGFuIEltYWdlLlxuICpcbiAqIEBjYWxsYmFjayBJbWFnZUNhbGxiYWNrXG4gKiBAcGFyYW0ge0ltYWdlfSBpbWFnZVxuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyBsb2FkcyBpbWFnZXMgYW5kIGtlZXBzIHRoZW0gc3RvcmVkLlxuICpcbiAqIEBwYXJhbSB7SW1hZ2VDYWxsYmFja30gY2FsbGJhY2tcbiAqL1xuY2xhc3MgSW1hZ2VzIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7SW1hZ2VDYWxsYmFja30gY2FsbGJhY2tcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5pbWFnZXMgPSB7fTtcbiAgICB0aGlzLmltYWdlQnJva2VuID0ge307XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgICAgICAgICAgICAgICAgICAgICAgVGhlIG9yaWdpbmFsIFVybCB0aGF0IGZhaWxlZCB0byBsb2FkLCBpZiB0aGUgYnJva2VuIGltYWdlIGlzIHN1Y2Nlc3NmdWxseSBsb2FkZWQgaXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgY2FjaGUgdXNpbmcgdGhpcyBVcmwgYXMgdGhlIGtleSBzbyB0aGF0IHN1YnNlcXVlbnQgcmVxdWVzdHMgZm9yIHRoaXMgVXJsIHdpbGwgcmV0dXJuIHRoZSBicm9rZW4gaW1hZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJyb2tlblVybCAgICAgICAgICAgICAgICBVcmwgdGhlIGJyb2tlbiBpbWFnZSB0byB0cnkgYW5kIGxvYWRcbiAgICogQHBhcmFtIHtJbWFnZX0gaW1hZ2VUb0xvYWRCcm9rZW5VcmxPbiAgIFRoZSBpbWFnZSBvYmplY3RcbiAgICovXG4gIF90cnlsb2FkQnJva2VuVXJsKHVybCwgYnJva2VuVXJsLCBpbWFnZVRvTG9hZEJyb2tlblVybE9uKSB7XG4gICAgLy9JZiB0aGVzZSBwYXJhbWV0ZXJzIGFyZW4ndCBzcGVjaWZpZWQgdGhlbiBleGl0IHRoZSBmdW5jdGlvbiBiZWNhdXNlIG5vdGhpbmcgY29uc3RydWN0aXZlIGNhbiBiZSBkb25lXG4gICAgaWYgKHVybCA9PT0gdW5kZWZpbmVkIHx8IGltYWdlVG9Mb2FkQnJva2VuVXJsT24gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIGlmIChicm9rZW5VcmwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFwiTm8gYnJva2VuIHVybCBpbWFnZSBkZWZpbmVkXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vQ2xlYXIgdGhlIG9sZCBzdWJzY3JpcHRpb24gdG8gdGhlIGVycm9yIGV2ZW50IGFuZCBwdXQgYSBuZXcgaW4gcGxhY2UgdGhhdCBvbmx5IGhhbmRsZSBlcnJvcnMgaW4gbG9hZGluZyB0aGUgYnJva2VuSW1hZ2VVcmxcbiAgICBpbWFnZVRvTG9hZEJyb2tlblVybE9uLmltYWdlLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgYnJva2VuSW1hZ2U6XCIsIGJyb2tlblVybCk7XG4gICAgICAvLyBjYWNoZSBpdGVtIHdpbGwgY29udGFpbiBlbXB0eSBpbWFnZSwgdGhpcyBzaG91bGQgYmUgT0sgZm9yIGRlZmF1bHRcbiAgICB9O1xuXG4gICAgLy9TZXQgdGhlIHNvdXJjZSBvZiB0aGUgaW1hZ2UgdG8gdGhlIGJyb2tlblVybCwgdGhpcyBpcyBhY3R1YWxseSB3aGF0IGtpY2tzIG9mZiB0aGUgbG9hZGluZyBvZiB0aGUgYnJva2VuIGltYWdlXG4gICAgaW1hZ2VUb0xvYWRCcm9rZW5VcmxPbi5pbWFnZS5zcmMgPSBicm9rZW5Vcmw7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHt2aXMuSW1hZ2V9IGltYWdlVG9SZWRyYXdXaXRoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVkcmF3V2l0aEltYWdlKGltYWdlVG9SZWRyYXdXaXRoKSB7XG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2soaW1hZ2VUb1JlZHJhd1dpdGgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsICAgICAgICAgIFVybCBvZiB0aGUgaW1hZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJyb2tlblVybCAgICBVcmwgb2YgYW4gaW1hZ2UgdG8gdXNlIGlmIHRoZSB1cmwgaW1hZ2UgaXMgbm90IGZvdW5kXG4gICAqIEByZXR1cm5zIHtJbWFnZX0gaW1nICAgICAgICAgIFRoZSBpbWFnZSBvYmplY3RcbiAgICovXG4gIGxvYWQodXJsLCBicm9rZW5VcmwpIHtcbiAgICAvL1RyeSBhbmQgZ2V0IHRoZSBpbWFnZSBmcm9tIHRoZSBjYWNoZSwgaWYgc3VjY2Vzc2Z1bCB0aGVuIHJldHVybiB0aGUgY2FjaGVkIGltYWdlXG4gICAgY29uc3QgY2FjaGVkSW1hZ2UgPSB0aGlzLmltYWdlc1t1cmxdO1xuICAgIGlmIChjYWNoZWRJbWFnZSkgcmV0dXJuIGNhY2hlZEltYWdlO1xuXG4gICAgLy9DcmVhdGUgYSBuZXcgaW1hZ2VcbiAgICBjb25zdCBpbWcgPSBuZXcgQ2FjaGVkSW1hZ2UoKTtcblxuICAgIC8vIE5lZWQgdG8gYWRkIHRvIGNhY2hlIGhlcmUsIG90aGVyd2lzZSBmaW5hbCByZXR1cm4gd2lsbCBzcGF3biBkaWZmZXJlbnQgY29waWVzIG9mIHRoZSBzYW1lIGltYWdlLFxuICAgIC8vIEFsc28sIHRoZXJlIHdpbGwgYmUgbXVsdGlwbGUgbG9hZHMgb2YgdGhlIHNhbWUgaW1hZ2UuXG4gICAgdGhpcy5pbWFnZXNbdXJsXSA9IGltZztcblxuICAgIC8vU3Vic2NyaWJlIHRvIHRoZSBldmVudCB0aGF0IGlzIHJhaXNlZCBpZiB0aGUgaW1hZ2UgbG9hZHMgc3VjY2Vzc2Z1bGx5XG4gICAgaW1nLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIC8vIFByb3Blcmx5IGluaXQgdGhlIGNhY2hlZCBpdGVtIGFuZCB0aGVuIHJlcXVlc3QgYSByZWRyYXdcbiAgICAgIHRoaXMuX2ZpeEltYWdlQ29vcmRpbmF0ZXMoaW1nLmltYWdlKTtcbiAgICAgIGltZy5pbml0KCk7XG4gICAgICB0aGlzLl9yZWRyYXdXaXRoSW1hZ2UoaW1nKTtcbiAgICB9O1xuXG4gICAgLy9TdWJzY3JpYmUgdG8gdGhlIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGlmIHRoZSBpbWFnZSBmYWlscyB0byBsb2FkXG4gICAgaW1nLmltYWdlLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgaW1hZ2U6XCIsIHVybCk7XG4gICAgICAvL1RyeSBhbmQgbG9hZCB0aGUgaW1hZ2Ugc3BlY2lmaWVkIGJ5IHRoZSBicm9rZW5VcmwgdXNpbmdcbiAgICAgIHRoaXMuX3RyeWxvYWRCcm9rZW5VcmwodXJsLCBicm9rZW5VcmwsIGltZyk7XG4gICAgfTtcblxuICAgIC8vU2V0IHRoZSBzb3VyY2Ugb2YgdGhlIGltYWdlIHRvIHRoZSB1cmwsIHRoaXMgaXMgd2hhdCBhY3R1YWxseSBraWNrcyBvZmYgdGhlIGxvYWRpbmcgb2YgdGhlIGltYWdlXG4gICAgaW1nLmltYWdlLnNyYyA9IHVybDtcblxuICAgIC8vUmV0dXJuIHRoZSBuZXcgaW1hZ2VcbiAgICByZXR1cm4gaW1nO1xuICB9XG5cbiAgLyoqXG4gICAqIElFMTEgZml4IC0tIHRoYW5rcyBkcG9uY2ghXG4gICAqXG4gICAqIExvY2FsIGhlbHBlciBmdW5jdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5JbWFnZX0gaW1hZ2VUb0NhY2hlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZml4SW1hZ2VDb29yZGluYXRlcyhpbWFnZVRvQ2FjaGUpIHtcbiAgICBpZiAoaW1hZ2VUb0NhY2hlLndpZHRoID09PSAwKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGltYWdlVG9DYWNoZSk7XG4gICAgICBpbWFnZVRvQ2FjaGUud2lkdGggPSBpbWFnZVRvQ2FjaGUub2Zmc2V0V2lkdGg7XG4gICAgICBpbWFnZVRvQ2FjaGUuaGVpZ2h0ID0gaW1hZ2VUb0NhY2hlLm9mZnNldEhlaWdodDtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW1hZ2VUb0NhY2hlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VzO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIEZGMjYtIGJ1ZzogQXJyYXlCdWZmZXJzIGFyZSBub24tZXh0ZW5zaWJsZSwgYnV0IE9iamVjdC5pc0V4dGVuc2libGUgZG9lcyBub3QgcmVwb3J0IGl0XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoYnVmZmVyKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1ZmZlciwgJ2EnLCB7IHZhbHVlOiA4IH0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSAtLSBzYWZlXG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgJGlzRXh0ZW5zaWJsZSgxKTsgfSk7XG5cbi8vIGBPYmplY3QuaXNFeHRlbnNpYmxlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmlzZXh0ZW5zaWJsZVxubW9kdWxlLmV4cG9ydHMgPSAoRkFJTFNfT05fUFJJTUlUSVZFUyB8fCBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUpID8gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgJiYgY2xhc3NvZihpdCkgPT09ICdBcnJheUJ1ZmZlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWU7XG59IDogJGlzRXh0ZW5zaWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LXByZXZlbnRleHRlbnNpb25zIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGlzRXh0ZW5zaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xuXG52YXIgUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBNRVRBREFUQSA9IHVpZCgnbWV0YScpO1xudmFyIGlkID0gMDtcblxudmFyIHNldE1ldGFkYXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIGRlZmluZVByb3BlcnR5KGl0LCBNRVRBREFUQSwgeyB2YWx1ZToge1xuICAgIG9iamVjdElEOiAnTycgKyBpZCsrLCAvLyBvYmplY3QgSURcbiAgICB3ZWFrRGF0YToge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG5cbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIGEgcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBREFUQV0ub2JqZWN0SUQ7XG59O1xuXG52YXIgZ2V0V2Vha0RhdGEgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIHRoZSBzdG9yZSBvZiB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBREFUQV0ud2Vha0RhdGE7XG59O1xuXG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpJTkcgJiYgUkVRVUlSRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzT3duKGl0LCBNRVRBREFUQSkpIHNldE1ldGFkYXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxudmFyIGVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgbWV0YS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4gIFJFUVVJUkVEID0gdHJ1ZTtcbiAgdmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmY7XG4gIHZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xuICB2YXIgdGVzdCA9IHt9O1xuICB0ZXN0W01FVEFEQVRBXSA9IDE7XG5cbiAgLy8gcHJldmVudCBleHBvc2luZyBvZiBtZXRhZGF0YSBrZXlcbiAgaWYgKGdldE93blByb3BlcnR5TmFtZXModGVzdCkubGVuZ3RoKSB7XG4gICAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZXN1bHRbaV0gPT09IE1FVEFEQVRBKSB7XG4gICAgICAgICAgc3BsaWNlKHJlc3VsdCwgaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUuZlxuICAgIH0pO1xuICB9XG59O1xuXG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBlbmFibGU6IGVuYWJsZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2Vha0RhdGE6IGdldFdlYWtEYXRhLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG5cbmhpZGRlbktleXNbTUVUQURBVEFdID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIFJlc3VsdFByb3RvdHlwZSA9IFJlc3VsdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19SRUNPUkQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfUkVDT1JEKTtcbiAgdmFyIElTX0lURVJBVE9SID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX0lURVJBVE9SKTtcbiAgdmFyIElOVEVSUlVQVEVEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklOVEVSUlVQVEVEKTtcbiAgdmFyIGZuID0gYmluZCh1bmJvdW5kRnVuY3Rpb24sIHRoYXQpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIHZhciBzdG9wID0gZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuICAgIGlmIChpdGVyYXRvcikgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgY29uZGl0aW9uKTtcbiAgfTtcblxuICB2YXIgY2FsbEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKEFTX0VOVFJJRVMpIHtcbiAgICAgIGFuT2JqZWN0KHZhbHVlKTtcbiAgICAgIHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSwgc3RvcCkgOiBmbih2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgIH0gcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWUsIHN0b3ApIDogZm4odmFsdWUpO1xuICB9O1xuXG4gIGlmIChJU19SRUNPUkQpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlLml0ZXJhdG9yO1xuICB9IGVsc2UgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKCFpdGVyRm4pIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0ZXJhYmxlKSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVyYWJsZSk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUsIGl0ZXJGbik7XG4gIH1cblxuICBuZXh0ID0gSVNfUkVDT1JEID8gaXRlcmFibGUubmV4dCA6IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsRm4oc3RlcC52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFByb3RvdHlwZSkge1xuICBpZiAoaXNQcm90b3R5cGVPZihQcm90b3R5cGUsIGl0KSkgcmV0dXJuIGl0O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcignSW5jb3JyZWN0IGludm9jYXRpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SX05BTUVdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICB2YXIgZXhwb3J0ZWQgPSB7fTtcbiAgdmFyIENvbnN0cnVjdG9yO1xuXG4gIGlmICghREVTQ1JJUFRPUlMgfHwgIWlzQ2FsbGFibGUoTmF0aXZlQ29uc3RydWN0b3IpXG4gICAgfHwgIShJU19XRUFLIHx8IE5hdGl2ZVByb3RvdHlwZS5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLmVudHJpZXMoKS5uZXh0KCk7IH0pKVxuICApIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIENvbnN0cnVjdG9yID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpO1xuICAgIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIH0gZWxzZSB7XG4gICAgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKGFuSW5zdGFuY2UodGFyZ2V0LCBQcm90b3R5cGUpLCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGNvbGxlY3Rpb246IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0YXJnZXRbQURERVJdLCB7IHRoYXQ6IHRhcmdldCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIGZvckVhY2goWydhZGQnLCAnY2xlYXInLCAnZGVsZXRlJywgJ2ZvckVhY2gnLCAnZ2V0JywgJ2hhcycsICdzZXQnLCAna2V5cycsICd2YWx1ZXMnLCAnZW50cmllcyddLCBmdW5jdGlvbiAoS0VZKSB7XG4gICAgICB2YXIgSVNfQURERVIgPSBLRVkgPT09ICdhZGQnIHx8IEtFWSA9PT0gJ3NldCc7XG4gICAgICBpZiAoS0VZIGluIE5hdGl2ZVByb3RvdHlwZSAmJiAhKElTX1dFQUsgJiYgS0VZID09PSAnY2xlYXInKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUHJvdG90eXBlLCBLRVksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb247XG4gICAgICAgICAgaWYgKCFJU19BRERFUiAmJiBJU19XRUFLICYmICFpc09iamVjdChhKSkgcmV0dXJuIEtFWSA9PT0gJ2dldCcgPyB1bmRlZmluZWQgOiBmYWxzZTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gY29sbGVjdGlvbltLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgICAgcmV0dXJuIElTX0FEREVSID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBJU19XRUFLIHx8IGRlZmluZVByb3BlcnR5KFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuY29sbGVjdGlvbi5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZhbHNlLCB0cnVlKTtcblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwgZXhwb3J0ZWQpO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgb3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bnNhZmUgJiYgdGFyZ2V0W2tleV0pIHRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgZWxzZSBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLmZhc3RLZXk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIFByb3RvdHlwZSk7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgaW5kZXg6IGNyZWF0ZShudWxsKSxcbiAgICAgICAgZmlyc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMpIHRoYXQuc2l6ZSA9IDA7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlbW92ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RhdGUuZmlyc3QpIHN0YXRlLmZpcnN0ID0gZW50cnk7XG4gICAgICAgIGlmIChwcmV2aW91cykgcHJldmlvdXMubmV4dCA9IGVudHJ5O1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUrKztcbiAgICAgICAgZWxzZSB0aGF0LnNpemUrKztcbiAgICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSBzdGF0ZS5pbmRleFtpbmRleF0gPSBlbnRyeTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIHZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAvLyBmYXN0IGNhc2VcbiAgICAgIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgICAgIHZhciBlbnRyeTtcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gc3RhdGUuaW5kZXhbaW5kZXhdO1xuICAgICAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gICAgICBmb3IgKGVudHJ5ID0gc3RhdGUuZmlyc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm5leHQpIHtcbiAgICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5KSByZXR1cm4gZW50cnk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwge1xuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuY2xlYXIoKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmNsZWFyXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZGF0YSA9IHN0YXRlLmluZGV4O1xuICAgICAgICB2YXIgZW50cnkgPSBzdGF0ZS5maXJzdDtcbiAgICAgICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnByZXZpb3VzKSBlbnRyeS5wcmV2aW91cyA9IGVudHJ5LnByZXZpb3VzLm5leHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5maXJzdCA9IHN0YXRlLmxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSA9IDA7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgICBkZWxldGUgc3RhdGUuaW5kZXhbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnByZXZpb3VzID0gcHJldjtcbiAgICAgICAgICBpZiAoc3RhdGUuZmlyc3QgPT09IGVudHJ5KSBzdGF0ZS5maXJzdCA9IG5leHQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApIHtcbiAgICB2YXIgSVRFUkFUT1JfTkFNRSA9IENPTlNUUlVDVE9SX05BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICB2YXIgZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuICAgIHZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKElURVJBVE9SX05BTUUpO1xuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLnsga2V5cywgdmFsdWVzLCBlbnRyaWVzLCBAQGl0ZXJhdG9yIH0oKWAgbWV0aG9kc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgZGVmaW5lSXRlcmF0b3IoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICAgIHR5cGU6IElURVJBVE9SX05BTUUsXG4gICAgICAgIHRhcmdldDogaXRlcmF0ZWQsXG4gICAgICAgIHN0YXRlOiBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZShpdGVyYXRlZCksXG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICAgICAgdmFyIGVudHJ5ID0gc3RhdGUubGFzdDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCFzdGF0ZS50YXJnZXQgfHwgIShzdGF0ZS5sYXN0ID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5zdGF0ZS5maXJzdCkpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT09ICdrZXlzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkua2V5LCBmYWxzZSk7XG4gICAgICBpZiAoa2luZCA9PT0gJ3ZhbHVlcycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LnZhbHVlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbZW50cnkua2V5LCBlbnRyeS52YWx1ZV0sIGZhbHNlKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZVtAQHNwZWNpZXNdYCBhY2Nlc3NvcnNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1tYXAtQEBzcGVjaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtc2V0LUBAc3BlY2llc1xuICAgIHNldFNwZWNpZXMoQ09OU1RSVUNUT1JfTkFNRSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYE1hcGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLW9iamVjdHNcbmNvbGxlY3Rpb24oJ01hcCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXAnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk1hcDtcbiIsICIvKipcbiAqIFRoaXMgY2xhc3MgY2FuIHN0b3JlIGdyb3VwcyBhbmQgb3B0aW9ucyBzcGVjaWZpYyBmb3IgZ3JvdXBzLlxuICovXG5leHBvcnQgY2xhc3MgR3JvdXBzIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLl9kZWZhdWx0SW5kZXggPSAwO1xuICAgIHRoaXMuX2dyb3VwSW5kZXggPSAwO1xuXG4gICAgdGhpcy5fZGVmYXVsdEdyb3VwcyA9IFtcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiMyQjdDRTlcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjOTdDMkZDXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiIzJCN0NFOVwiLCBiYWNrZ3JvdW5kOiBcIiNEMkU1RkZcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiIzJCN0NFOVwiLCBiYWNrZ3JvdW5kOiBcIiNEMkU1RkZcIiB9LFxuICAgICAgfSwgLy8gMDogYmx1ZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0ZGQTUwMFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRkZGMDBcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRkZBNTAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGRkZBM1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRkZBNTAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGRkZBM1wiIH0sXG4gICAgICB9LCAvLyAxOiB5ZWxsb3dcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNGQTBBMTBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkI3RTgxXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0ZBMEExMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRkFGQjFcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0ZBMEExMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRkFGQjFcIiB9LFxuICAgICAgfSwgLy8gMjogcmVkXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjNDFBOTA2XCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzdCRTE0MVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiM0MUE5MDZcIiwgYmFja2dyb3VuZDogXCIjQTFFQzc2XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiM0MUE5MDZcIiwgYmFja2dyb3VuZDogXCIjQTFFQzc2XCIgfSxcbiAgICAgIH0sIC8vIDM6IGdyZWVuXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjRTEyOUYwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0VCN0RGNFwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNFMTI5RjBcIiwgYmFja2dyb3VuZDogXCIjRjBCM0Y1XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNFMTI5RjBcIiwgYmFja2dyb3VuZDogXCIjRjBCM0Y1XCIgfSxcbiAgICAgIH0sIC8vIDQ6IG1hZ2VudGFcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiM3QzI5RjBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjQUQ4NUU0XCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiIzdDMjlGMFwiLCBiYWNrZ3JvdW5kOiBcIiNEM0JERjBcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiIzdDMjlGMFwiLCBiYWNrZ3JvdW5kOiBcIiNEM0JERjBcIiB9LFxuICAgICAgfSwgLy8gNTogcHVycGxlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjQzM3RjAwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0ZGQTgwN1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNDMzdGMDBcIiwgYmFja2dyb3VuZDogXCIjRkZDQTY2XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNDMzdGMDBcIiwgYmFja2dyb3VuZDogXCIjRkZDQTY2XCIgfSxcbiAgICAgIH0sIC8vIDY6IG9yYW5nZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzQyMjBGQlwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM2RTZFRkRcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjNDIyMEZCXCIsIGJhY2tncm91bmQ6IFwiIzlCOUJGRFwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjNDIyMEZCXCIsIGJhY2tncm91bmQ6IFwiIzlCOUJGRFwiIH0sXG4gICAgICB9LCAvLyA3OiBkYXJrYmx1ZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0ZENUE3N1wiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRkMwQ0JcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRkQ1QTc3XCIsIGJhY2tncm91bmQ6IFwiI0ZGRDFEOVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRkQ1QTc3XCIsIGJhY2tncm91bmQ6IFwiI0ZGRDFEOVwiIH0sXG4gICAgICB9LCAvLyA4OiBwaW5rXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjNEFENjNBXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0MyRkFCQ1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiM0QUQ2M0FcIiwgYmFja2dyb3VuZDogXCIjRTZGRkUzXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiM0QUQ2M0FcIiwgYmFja2dyb3VuZDogXCIjRTZGRkUzXCIgfSxcbiAgICAgIH0sIC8vIDk6IG1pbnRcblxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzk5MDAwMFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNFRTAwMDBcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjQkIwMDAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGMzMzM1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjQkIwMDAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGMzMzM1wiIH0sXG4gICAgICB9LCAvLyAxMDpicmlnaHQgcmVkXG5cbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNGRjYwMDBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkY2MDAwXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0ZGNjAwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjYwMDBcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0ZGNjAwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjYwMDBcIiB9LFxuICAgICAgfSwgLy8gMTI6IHJlYWwgb3JhbmdlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjOTdDMkZDXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzJCN0NFOVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNEMkU1RkZcIiwgYmFja2dyb3VuZDogXCIjMkI3Q0U5XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNEMkU1RkZcIiwgYmFja2dyb3VuZDogXCIjMkI3Q0U5XCIgfSxcbiAgICAgIH0sIC8vIDEzOiBibHVlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjMzk5NjA1XCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzI1NUMwM1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiMzOTk2MDVcIiwgYmFja2dyb3VuZDogXCIjMjU1QzAzXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiMzOTk2MDVcIiwgYmFja2dyb3VuZDogXCIjMjU1QzAzXCIgfSxcbiAgICAgIH0sIC8vIDE0OiBncmVlblxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0I3MDA1NFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRjAwN0VcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjQjcwMDU0XCIsIGJhY2tncm91bmQ6IFwiI0ZGMDA3RVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjQjcwMDU0XCIsIGJhY2tncm91bmQ6IFwiI0ZGMDA3RVwiIH0sXG4gICAgICB9LCAvLyAxNTogbWFnZW50YVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0FEODVFNFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM3QzI5RjBcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRDNCREYwXCIsIGJhY2tncm91bmQ6IFwiIzdDMjlGMFwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRDNCREYwXCIsIGJhY2tncm91bmQ6IFwiIzdDMjlGMFwiIH0sXG4gICAgICB9LCAvLyAxNjogcHVycGxlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjNDU1N0ZBXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzAwMEVBMVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiM2RTZFRkRcIiwgYmFja2dyb3VuZDogXCIjMDAwRUExXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiM2RTZFRkRcIiwgYmFja2dyb3VuZDogXCIjMDAwRUExXCIgfSxcbiAgICAgIH0sIC8vIDE3OiBkYXJrYmx1ZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0ZGQzBDQlwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRDVBNzdcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRkZEMUQ5XCIsIGJhY2tncm91bmQ6IFwiI0ZENUE3N1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRkZEMUQ5XCIsIGJhY2tncm91bmQ6IFwiI0ZENUE3N1wiIH0sXG4gICAgICB9LCAvLyAxODogcGlua1xuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0MyRkFCQ1wiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM3NEQ2NkFcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRTZGRkUzXCIsIGJhY2tncm91bmQ6IFwiIzc0RDY2QVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRTZGRkUzXCIsIGJhY2tncm91bmQ6IFwiIzc0RDY2QVwiIH0sXG4gICAgICB9LCAvLyAxOTogbWludFxuXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjRUUwMDAwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzk5MDAwMFwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNGRjMzMzNcIiwgYmFja2dyb3VuZDogXCIjQkIwMDAwXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNGRjMzMzNcIiwgYmFja2dyb3VuZDogXCIjQkIwMDAwXCIgfSxcbiAgICAgIH0sIC8vIDIwOmJyaWdodCByZWRcbiAgICBdO1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIHVzZURlZmF1bHRHcm91cHM6IHRydWUsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGNvbnN0IG9wdGlvbkZpZWxkcyA9IFtcInVzZURlZmF1bHRHcm91cHNcIl07XG5cbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IGdyb3VwTmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgZ3JvdXBOYW1lKSkge1xuICAgICAgICAgIGlmIChvcHRpb25GaWVsZHMuaW5kZXhPZihncm91cE5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25zW2dyb3VwTmFtZV07XG4gICAgICAgICAgICB0aGlzLmFkZChncm91cE5hbWUsIGdyb3VwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGdyb3Vwc1xuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5fZ3JvdXBzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX2dyb3VwTmFtZXMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZ3JvdXAgb3B0aW9ucyBvZiBhIGdyb3VwbmFtZS5cbiAgICogSWYgZ3JvdXBuYW1lIGlzIG5vdCBmb3VuZCwgYSBuZXcgZ3JvdXAgbWF5IGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gICAgICAgZ3JvdXBuYW1lICAgICBDYW4gYmUgYSBudW1iZXIsIHN0cmluZywgRGF0ZSwgZXRjLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaG91bGRDcmVhdGU9dHJ1ZV0gSWYgdHJ1ZSwgY3JlYXRlIGEgbmV3IGdyb3VwXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBmb3VuZCBvciBjcmVhdGVkIGdyb3VwXG4gICAqL1xuICBnZXQoZ3JvdXBuYW1lLCBzaG91bGRDcmVhdGUgPSB0cnVlKSB7XG4gICAgbGV0IGdyb3VwID0gdGhpcy5fZ3JvdXBzLmdldChncm91cG5hbWUpO1xuXG4gICAgaWYgKGdyb3VwID09PSB1bmRlZmluZWQgJiYgc2hvdWxkQ3JlYXRlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMub3B0aW9ucy51c2VEZWZhdWx0R3JvdXBzID09PSBmYWxzZSAmJlxuICAgICAgICB0aGlzLl9ncm91cE5hbWVzLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICAvLyBjcmVhdGUgbmV3IGdyb3VwXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZ3JvdXBJbmRleCAlIHRoaXMuX2dyb3VwTmFtZXMubGVuZ3RoO1xuICAgICAgICArK3RoaXMuX2dyb3VwSW5kZXg7XG4gICAgICAgIGdyb3VwID0ge307XG4gICAgICAgIGdyb3VwLmNvbG9yID0gdGhpcy5fZ3JvdXBzLmdldCh0aGlzLl9ncm91cE5hbWVzW2luZGV4XSk7XG4gICAgICAgIHRoaXMuX2dyb3Vwcy5zZXQoZ3JvdXBuYW1lLCBncm91cCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgbmV3IGdyb3VwXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZGVmYXVsdEluZGV4ICUgdGhpcy5fZGVmYXVsdEdyb3Vwcy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRJbmRleCsrO1xuICAgICAgICBncm91cCA9IHt9O1xuICAgICAgICBncm91cC5jb2xvciA9IHRoaXMuX2RlZmF1bHRHcm91cHNbaW5kZXhdO1xuICAgICAgICB0aGlzLl9ncm91cHMuc2V0KGdyb3VwbmFtZSwgZ3JvdXApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgY3VzdG9tIGdyb3VwIHN0eWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXBOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGdyb3VwLCBhIG5ldyBncm91cCB3aWxsIGJlXG4gICAqIGNyZWF0ZWQgaWYgYSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgZG9lc24ndCBleGlzdCwgb3RoZXJ3aXNlIHRoZSBvbGRcbiAgICogZ3JvdXBzIHN0eWxlIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZSAtIEFuIG9iamVjdCBjb250YWluaW5nIGJvcmRlckNvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsXG4gICAqIGV0Yy5cbiAgICogQHJldHVybnMge29iamVjdH0gVGhlIGNyZWF0ZWQgZ3JvdXAgb2JqZWN0LlxuICAgKi9cbiAgYWRkKGdyb3VwTmFtZSwgc3R5bGUpIHtcbiAgICAvLyBPbmx5IHB1c2ggZ3JvdXAgbmFtZSBvbmNlIHRvIHByZXZlbnQgZHVwbGljYXRlcyB3aGljaCB3b3VsZCBjb25zdW1lIG1vcmVcbiAgICAvLyBSQU0gYW5kIGFsc28gc2tldyB0aGUgZGlzdHJpYnV0aW9uIHRvd2FyZHMgbW9yZSBvZnRlbiB1cGRhdGVkIGdyb3VwcyxcbiAgICAvLyBuZWl0aGVyIG9mIHdoaWNoIGlzIGRlc2lyYWJsZS5cbiAgICBpZiAoIXRoaXMuX2dyb3Vwcy5oYXMoZ3JvdXBOYW1lKSkge1xuICAgICAgdGhpcy5fZ3JvdXBOYW1lcy5wdXNoKGdyb3VwTmFtZSk7XG4gICAgfVxuICAgIHRoaXMuX2dyb3Vwcy5zZXQoZ3JvdXBOYW1lLCBzdHlsZSk7XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBOdW1iZXIuaXNOYU5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNuYW5cbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm51bWJlci5pcy1uYW4nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk51bWJlci5pc05hTjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgZ2xvYmFsSXNGaW5pdGUgPSBnbG9iYWwuaXNGaW5pdGU7XG5cbi8vIGBOdW1iZXIuaXNGaW5pdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNmaW5pdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1udW1iZXItaXNmaW5pdGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gaXNGaW5pdGUoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBnbG9iYWxJc0Zpbml0ZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG51bWJlcklzRmluaXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1pcy1maW5pdGUnKTtcblxuLy8gYE51bWJlci5pc0Zpbml0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci5pc2Zpbml0ZVxuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUgfSwgeyBpc0Zpbml0ZTogbnVtYmVySXNGaW5pdGUgfSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5udW1iZXIuaXMtZmluaXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5OdW1iZXIuaXNGaW5pdGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb21lJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvbWUnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zb21lO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvbWUnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29tZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29tZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zb21lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG59O1xuXG5pZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtKSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBrZXksIGRlc2NyaXB0b3I7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywga2V5ID0ga2V5c1tpbmRleCsrXSk7XG4gICAgICBpZiAoZGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKS5mO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzICE9PSBkZWZpbmVQcm9wZXJ0aWVzLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0aWVzOiBkZWZpbmVQcm9wZXJ0aWVzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKFQsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQsIEQpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLnNoYW0pIGRlZmluZVByb3BlcnRpZXMuc2hhbSA9IHRydWU7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpOyIsICJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIjtcbmltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyICRwYXJzZUZsb2F0ID0gZ2xvYmFsLnBhcnNlRmxvYXQ7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBJVEVSQVRPUiA9IFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRk9SQ0VEID0gMSAvICRwYXJzZUZsb2F0KHdoaXRlc3BhY2VzICsgJy0wJykgIT09IC1JbmZpbml0eVxuICAvLyBNUyBFZGdlIDE4LSBicm9rZW4gd2l0aCBib3hlZCBzeW1ib2xzXG4gIHx8IChJVEVSQVRPUiAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyAkcGFyc2VGbG9hdChPYmplY3QoSVRFUkFUT1IpKTsgfSkpO1xuXG4vLyBgcGFyc2VGbG9hdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlZmxvYXQtc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyaW5nKSB7XG4gIHZhciB0cmltbWVkU3RyaW5nID0gdHJpbSh0b1N0cmluZyhzdHJpbmcpKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHRyaW1tZWRTdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIGNoYXJBdCh0cmltbWVkU3RyaW5nLCAwKSA9PT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWZsb2F0Jyk7XG5cbi8vIGBwYXJzZUZsb2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VmbG9hdC1zdHJpbmdcbiQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogcGFyc2VGbG9hdCAhPT0gJHBhcnNlRmxvYXQgfSwge1xuICBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wYXJzZS1mbG9hdCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGgucGFyc2VGbG9hdDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKS5mO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyByZXR1cm4gIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgeyB0b3BNb3N0IH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIGNvbXBvbmVudHNcbiAqL1xuXG4vKipcbiAqIERldGVybWluZSB2YWx1ZXMgdG8gdXNlIGZvciAoc3ViKW9wdGlvbnMgb2YgJ2Nob3NlbicuXG4gKlxuICogVGhpcyBvcHRpb24gaXMgZWl0aGVyIGEgYm9vbGVhbiBvciBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBleGFtaW5lZCBmdXJ0aGVyLlxuICogVGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYXJlOlxuICpcbiAqIC0gY2hvc2VuOiA8Ym9vbGVhbiB2YWx1ZT5cbiAqIC0gY2hvc2VuOiB7IHN1Yk9wdGlvbjogPGJvb2xlYW4gb3IgZnVuY3Rpb24+IH1cbiAqXG4gKiBXaGVyZSBzdWJPcHRpb24gaXMgJ25vZGUnLCAnZWRnZScgb3IgJ2xhYmVsJy5cbiAqXG4gKiBUaGUgaW50ZW50aW9uIG9mIHRoaXMgbWV0aG9kIGFwcGVhcnMgdG8gYmUgdG8gc2V0IGEgc3BlY2lmaWMgcHJpb3JpdHkgdG8gdGhlIG9wdGlvbnM7XG4gKiBTaW5jZSBtb3N0IHByb3BlcnRpZXMgYXJlIGVpdGhlciBicmlkZ2VkIG9yIG1lcmdlZCBpbnRvIHRoZSBsb2NhbCBvcHRpb25zIG9iamVjdHMsIHRoZXJlXG4gKiBpcyBub3QgbXVjaCBwb2ludCBpbiBoYW5kbGluZyB0aGVtIHNlcGFyYXRlbHkuXG4gKiBUT0RPOiBleGFtaW5lIGlmICdtb3N0JyBpbiBwcmV2aW91cyBzZW50ZW5jZSBjYW4gYmUgcmVwbGFjZWQgd2l0aCAnYWxsJy4gSW4gdGhhdCBjYXNlLCB3ZVxuICogICAgICAgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHJpZCBvZiB0aGlzIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gIHN1Yk9wdGlvbiAgb3B0aW9uIHdpdGhpbiBvYmplY3QgJ2Nob3NlbicgdG8gY29uc2lkZXI7IGVpdGhlciAnbm9kZScsICdlZGdlJyBvciAnbGFiZWwnXG4gKiBAcGFyYW0ge29iamVjdH0gIHBpbGUgICAgICAgYXJyYXkgb2Ygb3B0aW9ucyBvYmplY3RzIHRvIGNvbnNpZGVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbiB8IEZ1bmN0aW9ufSAgdmFsdWUgZm9yIHBhc3NlZCBzdWJPcHRpb24gb2YgJ2Nob3NlbicgdG8gdXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaG9vc2lmeShzdWJPcHRpb24sIHBpbGUpIHtcbiAgLy8gYWxsb3dlZCB2YWx1ZXMgZm9yIHN1Yk9wdGlvblxuICBjb25zdCBhbGxvd2VkID0gW1wibm9kZVwiLCBcImVkZ2VcIiwgXCJsYWJlbFwiXTtcbiAgbGV0IHZhbHVlID0gdHJ1ZTtcblxuICBjb25zdCBjaG9zZW4gPSB0b3BNb3N0KHBpbGUsIFwiY2hvc2VuXCIpO1xuICBpZiAodHlwZW9mIGNob3NlbiA9PT0gXCJib29sZWFuXCIpIHtcbiAgICB2YWx1ZSA9IGNob3NlbjtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2hvc2VuID09PSBcIm9iamVjdFwiKSB7XG4gICAgaWYgKGFsbG93ZWQuaW5kZXhPZihzdWJPcHRpb24pID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImNob29zaWZ5OiBzdWJPcHRpb24gJ1wiICtcbiAgICAgICAgICBzdWJPcHRpb24gK1xuICAgICAgICAgIFwiJyBzaG91bGQgYmUgb25lIG9mIFwiICtcbiAgICAgICAgICBcIidcIiArXG4gICAgICAgICAgYWxsb3dlZC5qb2luKFwiJywgJ1wiKSArXG4gICAgICAgICAgXCInXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hvc2VuRWRnZSA9IHRvcE1vc3QocGlsZSwgW1wiY2hvc2VuXCIsIHN1Yk9wdGlvbl0pO1xuICAgIGlmICh0eXBlb2YgY2hvc2VuRWRnZSA9PT0gXCJib29sZWFuXCIgfHwgdHlwZW9mIGNob3NlbkVkZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdmFsdWUgPSBjaG9zZW5FZGdlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcG9pbnQgZmFsbHMgd2l0aGluIHRoZSBnaXZlbiByZWN0YW5nbGUuXG4gKlxuICogQHBhcmFtIHtyZWN0fSByZWN0XG4gKiBAcGFyYW0ge3BvaW50fSBwb2ludFxuICogQHBhcmFtIHtyb3RhdGlvblBvaW50fSBbcm90YXRpb25Qb2ludF0gaWYgc3BlY2lmaWVkLCB0aGUgcm90YXRpb24gdGhhdCBhcHBsaWVzIHRvIHRoZSByZWN0YW5nbGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gIHRydWUgaWYgcG9pbnQgd2l0aGluIHJlY3RhbmdsZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb2ludEluUmVjdChyZWN0LCBwb2ludCwgcm90YXRpb25Qb2ludCkge1xuICBpZiAocmVjdC53aWR0aCA8PSAwIHx8IHJlY3QuaGVpZ2h0IDw9IDApIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIGVhcmx5IG91dFxuICB9XG5cbiAgaWYgKHJvdGF0aW9uUG9pbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFJvdGF0ZSB0aGUgcG9pbnQgdGhlIHNhbWUgYW1vdW50IGFzIHRoZSByZWN0YW5nbGVcbiAgICBjb25zdCB0bXAgPSB7XG4gICAgICB4OiBwb2ludC54IC0gcm90YXRpb25Qb2ludC54LFxuICAgICAgeTogcG9pbnQueSAtIHJvdGF0aW9uUG9pbnQueSxcbiAgICB9O1xuXG4gICAgaWYgKHJvdGF0aW9uUG9pbnQuYW5nbGUgIT09IDApIHtcbiAgICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgY29vcmRpbmF0ZXMgdGhlIHNhbWUsIHlvdSBuZWVkIHRvXG4gICAgICAvLyByb3RhdGUgaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uXG4gICAgICBjb25zdCBhbmdsZSA9IC1yb3RhdGlvblBvaW50LmFuZ2xlO1xuXG4gICAgICBjb25zdCB0bXAyID0ge1xuICAgICAgICB4OiBNYXRoLmNvcyhhbmdsZSkgKiB0bXAueCAtIE1hdGguc2luKGFuZ2xlKSAqIHRtcC55LFxuICAgICAgICB5OiBNYXRoLnNpbihhbmdsZSkgKiB0bXAueCArIE1hdGguY29zKGFuZ2xlKSAqIHRtcC55LFxuICAgICAgfTtcbiAgICAgIHBvaW50ID0gdG1wMjtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9pbnQgPSB0bXA7XG4gICAgfVxuXG4gICAgLy8gTm90ZSB0aGF0IGlmIGEgcm90YXRpb24gaXMgc3BlY2lmaWVkLCB0aGUgcmVjdGFuZ2xlIGNvb3JkaW5hdGVzXG4gICAgLy8gYXJlICoqbm90KiB0aGUgZnVsbCBjYW52YXMgY29vcmRpbmF0ZXMuIFRoZXkgYXJlIHJlbGF0aXZlIHRvIHRoZVxuICAgIC8vIHJvdGF0aW9uUG9pbnQuIEhlbmNlLCB0aGUgcG9pbnQgY29vcmRpbmF0ZXMgbmVlZCBub3QgYmUgdHJhbnNsYXRlZFxuICAgIC8vIGJhY2sgaW4gdGhpcyBjYXNlLlxuICB9XG5cbiAgY29uc3QgcmlnaHQgPSByZWN0LnggKyByZWN0LndpZHRoO1xuICBjb25zdCBib3R0b20gPSByZWN0LnkgKyByZWN0LndpZHRoO1xuXG4gIHJldHVybiAoXG4gICAgcmVjdC5sZWZ0IDwgcG9pbnQueCAmJlxuICAgIHJpZ2h0ID4gcG9pbnQueCAmJlxuICAgIHJlY3QudG9wIDwgcG9pbnQueSAmJlxuICAgIGJvdHRvbSA+IHBvaW50LnlcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBnaXZlbiB2YWx1ZSBpcyBhY2NlcHRhYmxlIGFzIGEgbGFiZWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0geyp9IHRleHQgdmFsdWUgdG8gY2hlY2s7IGNhbiBiZSBhbnl0aGluZyBhdCB0aGlzIHBvaW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB2YWxpZCBsYWJlbCB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTGFiZWwodGV4dCkge1xuICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBxdWl0ZSBzdHJpY3Q6IHR5cGVzIHRoYXQgKm1pZ2h0KiBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIGFyZSBkaXNhbGxvd2VkXG4gIHJldHVybiB0eXBlb2YgdGV4dCA9PT0gXCJzdHJpbmdcIiAmJiB0ZXh0ICE9PSBcIlwiO1xufVxuXG4vKipcbiAqIFJldHVybnMgeCwgeSBvZiBzZWxmIHJlZmVyZW5jZSBjaXJjbGUgYmFzZWQgb24gcHJvdmlkZWQgYW5nbGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY3R4XG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXNcbiAqIEBwYXJhbSB7VmlzTm9kZX0gbm9kZVxuICogQHJldHVybnMge29iamVjdH0geCBhbmQgeSBjb29yZGluYXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZlJlZkNvb3JkaW5hdGVzKGN0eCwgYW5nbGUsIHJhZGl1cywgbm9kZSkge1xuICBsZXQgeCA9IG5vZGUueDtcbiAgbGV0IHkgPSBub2RlLnk7XG5cbiAgaWYgKHR5cGVvZiBub2RlLmRpc3RhbmNlVG9Cb3JkZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIC8vY2FsY3VsYXRpbmcgb3Bwb3NpdGUgYW5kIGFkamFjZW50XG4gICAgLy9kaXN0YW5lVG9Cb3JkZXIgYmVjb21lcyBIeXBvdGVudXNlLlxuICAgIC8vRm9ybXVsYXMgc2luKGEpID0gT3Bwb3NpdGUgLyBIeXBvdGVudXNlIGFuZCBjb3MoYSkgPSBBZGphY2VudCAvIEh5cG90ZW51c2VcbiAgICBjb25zdCB0b0JvcmRlckRpc3QgPSBub2RlLmRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gICAgY29uc3QgeUZyb21Ob2RlQ2VudGVyID0gTWF0aC5zaW4oYW5nbGUpICogdG9Cb3JkZXJEaXN0O1xuICAgIGNvbnN0IHhGcm9tTm9kZUNlbnRlciA9IE1hdGguY29zKGFuZ2xlKSAqIHRvQm9yZGVyRGlzdDtcbiAgICAvL3hGcm9tTm9kZUNlbnRlciBpcyBiYXNpY2FsbHkgeCBhbmQgaWYgeEZyb21Ob2RlQ2VudGVyIGVxdWFscyB0byB0aGUgZGlzdGFuY2UgdG8gYm9yZGVyIHRoZW4gaXQgbWVhbnNcbiAgICAvL3RoYXQgeSBkb2VzIG5vdCBuZWVkIGNhbGN1bGF0aW9uIGJlY2F1c2UgaXQgaXMgZXF1YWwgbm9kZS5oZWlnaHQgLyAyIG9yIG5vZGUueVxuICAgIC8vc2FtZSB0aGluZyB3aXRoIHlGcm9tTm9kZUNlbnRlciBhbmQgaWYgeUZyb21Ob2RlQ2VudGVyIGVxdWFscyB0byB0aGUgZGlzdGFuY2UgdG8gYm9yZGVyIHRoZW4gaXQgbWVhbnNcbiAgICAvL3RoYXQgeCBpcyBlcXVhbCBub2RlLndpZHRoIC8gMiBvciBub2RlLnhcbiAgICBpZiAoeEZyb21Ob2RlQ2VudGVyID09PSB0b0JvcmRlckRpc3QpIHtcbiAgICAgIHggKz0gdG9Cb3JkZXJEaXN0O1xuICAgICAgeSA9IG5vZGUueTtcbiAgICB9IGVsc2UgaWYgKHlGcm9tTm9kZUNlbnRlciA9PT0gdG9Cb3JkZXJEaXN0KSB7XG4gICAgICB4ID0gbm9kZS54O1xuICAgICAgeSAtPSB0b0JvcmRlckRpc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHggKz0geEZyb21Ob2RlQ2VudGVyO1xuICAgICAgeSAtPSB5RnJvbU5vZGVDZW50ZXI7XG4gICAgfVxuICB9IGVsc2UgaWYgKG5vZGUuc2hhcGUud2lkdGggPiBub2RlLnNoYXBlLmhlaWdodCkge1xuICAgIHggPSBub2RlLnggKyBub2RlLnNoYXBlLndpZHRoICogMC41O1xuICAgIHkgPSBub2RlLnkgLSByYWRpdXM7XG4gIH0gZWxzZSB7XG4gICAgeCA9IG5vZGUueCArIHJhZGl1cztcbiAgICB5ID0gbm9kZS55IC0gbm9kZS5zaGFwZS5oZWlnaHQgKiAwLjU7XG4gIH1cblxuICByZXR1cm4geyB4LCB5IH07XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykudmFsdWVzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudmFsdWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS52YWx1ZXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXNcIik7IiwgIi8qKlxuICogQ2FsbGJhY2sgdG8gZGV0ZXJtaW5lIHRleHQgZGltZW5zaW9ucywgdXNpbmcgdGhlIHBhcmVudCBsYWJlbCBzZXR0aW5ncy5cbiAqXG4gKiBAY2FsbGJhY2sgTWVhc3VyZVRleHRcbiAqIEBwYXJhbSB7dGV4dH0gdGV4dFxuICogQHBhcmFtIHt0ZXh0fSBtb2RcbiAqIEByZXR1cm5zIHtvYmplY3R9IHsgd2lkdGgsIHZhbHVlc30gd2lkdGggaW4gcGl4ZWxzIGFuZCBmb250IGF0dHJpYnV0ZXNcbiAqL1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgTGFiZWwgd2hpY2ggY29sbGVjdHMgcmVzdWx0cyBvZiBzcGxpdHRpbmcgbGFiZWxzIGludG8gbGluZXMgYW5kIGJsb2Nrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBMYWJlbEFjY3VtdWxhdG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7TWVhc3VyZVRleHR9IG1lYXN1cmVUZXh0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZWFzdXJlVGV4dCkge1xuICAgIHRoaXMubWVhc3VyZVRleHQgPSBtZWFzdXJlVGV4dDtcbiAgICB0aGlzLmN1cnJlbnQgPSAwO1xuICAgIHRoaXMud2lkdGggPSAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kIGdpdmVuIHRleHQgdG8gdGhlIGdpdmVuIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSAgbCAgICBpbmRleCBvZiBsaW5lIHRvIGFkZCB0b1xuICAgKiBAcGFyYW0ge3N0cmluZ30gIHRleHQgc3RyaW5nIHRvIGFwcGVuZCB0byBsaW5lXG4gICAqIEBwYXJhbSB7J2JvbGQnfCdpdGFsJ3wnYm9sZGl0YWwnfCdtb25vJ3wnbm9ybWFsJ30gW21vZD0nbm9ybWFsJ11cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGQobCwgdGV4dCwgbW9kID0gXCJub3JtYWxcIikge1xuICAgIGlmICh0aGlzLmxpbmVzW2xdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubGluZXNbbF0gPSB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGJsb2NrczogW10sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFdlIHN0aWxsIG5lZWQgdG8gc2V0IGEgYmxvY2sgZm9yIHVuZGVmaW5lZCBhbmQgZW1wdHkgdGV4dHMsIGhlbmNlIHJldHVybiBhdCB0aGlzIHBvaW50XG4gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQgaWYgd2UncmUgYXQgdGhlXG4gICAgLy8gc3RhcnQgb2YgYW4gZW1wdHkgbGluZSBvciBub3QuXG4gICAgLy8gVG8gY29tcGVuc2F0ZSwgZW1wdHkgYmxvY2tzIGFyZSByZW1vdmVkIGluIGBmaW5hbGl6ZSgpYC5cbiAgICAvL1xuICAgIC8vIEVtcHR5IHN0cmluZ3Mgc2hvdWxkIHN0aWxsIGhhdmUgYSBoZWlnaHRcbiAgICBsZXQgdG1wVGV4dCA9IHRleHQ7XG4gICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCB8fCB0ZXh0ID09PSBcIlwiKSB0bXBUZXh0ID0gXCIgXCI7XG5cbiAgICAvLyBEZXRlcm1pbmUgd2lkdGggYW5kIGdldCB0aGUgZm9udCBwcm9wZXJ0aWVzXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tZWFzdXJlVGV4dCh0bXBUZXh0LCBtb2QpO1xuICAgIGNvbnN0IGJsb2NrID0gT2JqZWN0LmFzc2lnbih7fSwgcmVzdWx0LnZhbHVlcyk7XG4gICAgYmxvY2sudGV4dCA9IHRleHQ7XG4gICAgYmxvY2sud2lkdGggPSByZXN1bHQud2lkdGg7XG4gICAgYmxvY2subW9kID0gbW9kO1xuXG4gICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCB8fCB0ZXh0ID09PSBcIlwiKSB7XG4gICAgICBibG9jay53aWR0aCA9IDA7XG4gICAgfVxuXG4gICAgdGhpcy5saW5lc1tsXS5ibG9ja3MucHVzaChibG9jayk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGxpbmUgd2lkdGguIFdlIG5lZWQgdGhpcyBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBzdHJpbmcgZ29lcyBvdmVyIG1heCB3aWR0aFxuICAgIHRoaXMubGluZXNbbF0ud2lkdGggKz0gYmxvY2sud2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2lkdGggaW4gcGl4ZWxzIG9mIHRoZSBjdXJyZW50IGxpbmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBjdXJXaWR0aCgpIHtcbiAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1t0aGlzLmN1cnJlbnRdO1xuICAgIGlmIChsaW5lID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuXG4gICAgcmV0dXJuIGxpbmUud2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRleHQgaW4gYmxvY2sgdG8gY3VycmVudCBsaW5lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEBwYXJhbSB7J2JvbGQnfCdpdGFsJ3wnYm9sZGl0YWwnfCdtb25vJ3wnbm9ybWFsJ30gW21vZD0nbm9ybWFsJ11cbiAgICovXG4gIGFwcGVuZCh0ZXh0LCBtb2QgPSBcIm5vcm1hbFwiKSB7XG4gICAgdGhpcy5fYWRkKHRoaXMuY3VycmVudCwgdGV4dCwgbW9kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGV4dCBpbiBibG9jayB0byBjdXJyZW50IGxpbmUgYW5kIHN0YXJ0IGEgbmV3IGxpbmVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICogQHBhcmFtIHsnYm9sZCd8J2l0YWwnfCdib2xkaXRhbCd8J21vbm8nfCdub3JtYWwnfSBbbW9kPSdub3JtYWwnXVxuICAgKi9cbiAgbmV3TGluZSh0ZXh0LCBtb2QgPSBcIm5vcm1hbFwiKSB7XG4gICAgdGhpcy5fYWRkKHRoaXMuY3VycmVudCwgdGV4dCwgbW9kKTtcbiAgICB0aGlzLmN1cnJlbnQrKztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgYW5kIHNldCB0aGUgaGVpZ2h0cyBvZiBhbGwgdGhlIGxpbmVzIGN1cnJlbnRseSBjb250YWluZWQgaW4gdGhpcyBpbnN0YW5jZVxuICAgKlxuICAgKiBOb3RlIHRoYXQgd2lkdGggaGFzIGFscmVhZHkgYmVlbiBzZXQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZXRlcm1pbmVMaW5lSGVpZ2h0cygpIHtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMubGluZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmxpbmVzW2tdO1xuXG4gICAgICAvLyBMb29raW5nIGZvciBtYXggaGVpZ2h0IG9mIGJsb2NrcyBpbiBsaW5lXG4gICAgICBsZXQgaGVpZ2h0ID0gMDtcblxuICAgICAgaWYgKGxpbmUuYmxvY2tzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gQ2FuIGhhcHBlbiBpZiB0ZXh0IGNvbnRhaW5zIGUuZy4gJ1xcbiAnXG4gICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZS5ibG9ja3MubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgICBjb25zdCBibG9jayA9IGxpbmUuYmxvY2tzW2xdO1xuXG4gICAgICAgICAgaWYgKGhlaWdodCA8IGJsb2NrLmhlaWdodCkge1xuICAgICAgICAgICAgaGVpZ2h0ID0gYmxvY2suaGVpZ2h0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaW5lLmhlaWdodCA9IGhlaWdodDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBmdWxsIHNpemUgb2YgdGhlIGxhYmVsIHRleHQsIGFzIGRldGVybWluZWQgYnkgY3VycmVudCBsaW5lcyBhbmQgYmxvY2tzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZXRlcm1pbmVMYWJlbFNpemUoKSB7XG4gICAgbGV0IHdpZHRoID0gMDtcbiAgICBsZXQgaGVpZ2h0ID0gMDtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMubGluZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmxpbmVzW2tdO1xuXG4gICAgICBpZiAobGluZS53aWR0aCA+IHdpZHRoKSB7XG4gICAgICAgIHdpZHRoID0gbGluZS53aWR0aDtcbiAgICAgIH1cbiAgICAgIGhlaWdodCArPSBsaW5lLmhlaWdodDtcbiAgICB9XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBlbXB0eSBibG9ja3MgYW5kIGVtcHR5IGxpbmVzIHdlIGRvbid0IG5lZWRcbiAgICpcbiAgICogVGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIHdpZHRoL2hlaWdodCBkZXRlcm1pbmF0aW9uLFxuICAgKiBzbyB0aGF0IHRoZXNlIGFyZSBzZXQgcHJvcGVybHkgZm9yIHByb2Nlc3NpbmcgaGVyZS5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5PExpbmU+fSBMaW5lcyB3aXRoIGVtcHR5IGJsb2NrcyAoYW5kIHNvbWUgZW1wdHkgbGluZXMpIHJlbW92ZWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlbW92ZUVtcHR5QmxvY2tzKCkge1xuICAgIGNvbnN0IHRtcExpbmVzID0gW107XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaysrKSB7XG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1trXTtcblxuICAgICAgLy8gTm90ZTogYW4gZW1wdHkgbGluZSBpbiBiZXR3ZWVuIHRleHQgaGFzIHdpZHRoIHplcm8gYnV0IGlzIHN0aWxsIHJlbGV2YW50IHRvIGxheW91dC5cbiAgICAgIC8vIFNvIHdlIGNhbid0IHVzZSB3aWR0aCBmb3IgdGVzdGluZyBlbXB0eSBsaW5lIGhlcmVcbiAgICAgIGlmIChsaW5lLmJsb2Nrcy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAvLyBEaXNjYXJkIGZpbmFsIGVtcHR5IGxpbmUgYWx3YXlzXG4gICAgICBpZiAoayA9PT0gdGhpcy5saW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGlmIChsaW5lLndpZHRoID09PSAwKSBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG1wTGluZSA9IHt9O1xuICAgICAgT2JqZWN0LmFzc2lnbih0bXBMaW5lLCBsaW5lKTtcbiAgICAgIHRtcExpbmUuYmxvY2tzID0gW107XG5cbiAgICAgIGxldCBmaXJzdEVtcHR5QmxvY2s7XG4gICAgICBjb25zdCB0bXBCbG9ja3MgPSBbXTtcbiAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZS5ibG9ja3MubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgY29uc3QgYmxvY2sgPSBsaW5lLmJsb2Nrc1tsXTtcbiAgICAgICAgaWYgKGJsb2NrLndpZHRoICE9PSAwKSB7XG4gICAgICAgICAgdG1wQmxvY2tzLnB1c2goYmxvY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmaXJzdEVtcHR5QmxvY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlyc3RFbXB0eUJsb2NrID0gYmxvY2s7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZXJlIGlzICpzb21lKiB0ZXh0IHByZXNlbnRcbiAgICAgIGlmICh0bXBCbG9ja3MubGVuZ3RoID09PSAwICYmIGZpcnN0RW1wdHlCbG9jayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRtcEJsb2Nrcy5wdXNoKGZpcnN0RW1wdHlCbG9jayk7XG4gICAgICB9XG5cbiAgICAgIHRtcExpbmUuYmxvY2tzID0gdG1wQmxvY2tzO1xuXG4gICAgICB0bXBMaW5lcy5wdXNoKHRtcExpbmUpO1xuICAgIH1cblxuICAgIHJldHVybiB0bXBMaW5lcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHNpemVzIGZvciBhbGwgbGluZXMgYW5kIHRoZSB3aG9sZSB0aGluZy5cbiAgICpcbiAgICogQHJldHVybnMge3t3aWR0aDogKG51bWJlcnwqKSwgaGVpZ2h0OiAobnVtYmVyfCopLCBsaW5lczogQXJyYXl9fVxuICAgKi9cbiAgZmluYWxpemUoKSB7XG4gICAgLy9jb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLmxpbmVzLCBudWxsLCAyKSk7XG5cbiAgICB0aGlzLmRldGVybWluZUxpbmVIZWlnaHRzKCk7XG4gICAgdGhpcy5kZXRlcm1pbmVMYWJlbFNpemUoKTtcbiAgICBjb25zdCB0bXBMaW5lcyA9IHRoaXMucmVtb3ZlRW1wdHlCbG9ja3MoKTtcblxuICAgIC8vIFJldHVybiBhIHNpbXBsZSBoYXNoIG9iamVjdCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICBsaW5lczogdG1wTGluZXMsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYWJlbEFjY3VtdWxhdG9yO1xuIiwgImltcG9ydCBMYWJlbEFjY3VtdWxhdG9yIGZyb20gXCIuL0xhYmVsQWNjdW11bGF0b3JcIjtcbmltcG9ydCB7IGlzVmFsaWRMYWJlbCB9IGZyb20gXCIuL0NvbXBvbmVudFV0aWxcIjtcblxuLy8gSGFzaCBvZiBwcmVwYXJlZCByZWdleHAncyBmb3IgdGFnc1xuY29uc3QgdGFnUGF0dGVybiA9IHtcbiAgLy8gSFRNTFxuICBcIjxiPlwiOiAvPGI+LyxcbiAgXCI8aT5cIjogLzxpPi8sXG4gIFwiPGNvZGU+XCI6IC88Y29kZT4vLFxuICBcIjwvYj5cIjogLzxcXC9iPi8sXG4gIFwiPC9pPlwiOiAvPFxcL2k+LyxcbiAgXCI8L2NvZGU+XCI6IC88XFwvY29kZT4vLFxuICAvLyBNYXJrZG93blxuICBcIipcIjogL1xcKi8sIC8vIGJvbGRcbiAgXzogL18vLCAvLyBpdGFsXG4gIFwiYFwiOiAvYC8sIC8vIG1vbm9cbiAgYWZ0ZXJCb2xkOiAvW14qXS8sXG4gIGFmdGVySXRhbDogL1teX10vLFxuICBhZnRlck1vbm86IC9bXmBdLyxcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgaGVscGVyIGNsYXNzIGZvciBwYXJzaW5nIHRoZSBtYXJrdXAgdGFncyBmb3IgSFRNTCBhbmQgTWFya2Rvd24uXG4gKlxuICogTk9URTogU2VxdWVuY2VzIG9mIHRhYnMgYW5kIHNwYWNlcyBhcmUgcmVkdWNlZCB0byBzaW5nbGUgc3BhY2UuXG4gKiAgICAgICBTY2FuIHVzYWdlIG9mIGB0aGlzLnNwYWNpbmdgIHdpdGhpbiBtZXRob2RcbiAqL1xuY2xhc3MgTWFya3VwQWNjdW11bGF0b3Ige1xuICAvKipcbiAgICogQ3JlYXRlIGFuIGluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0ICB0ZXh0IHRvIHBhcnNlIGZvciBtYXJrdXBcbiAgICovXG4gIGNvbnN0cnVjdG9yKHRleHQpIHtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuYm9sZCA9IGZhbHNlO1xuICAgIHRoaXMuaXRhbCA9IGZhbHNlO1xuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xuICAgIHRoaXMuc3BhY2luZyA9IGZhbHNlO1xuICAgIHRoaXMucG9zaXRpb24gPSAwO1xuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcbiAgICB0aGlzLm1vZFN0YWNrID0gW107XG5cbiAgICB0aGlzLmJsb2NrcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbW9kIGxhYmVsIGN1cnJlbnRseSBvbiB0aGUgdG9wIG9mIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAgbGFiZWwgb2YgdG9wbW9zdCBtb2RcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG1vZCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RTdGFjay5sZW5ndGggPT09IDAgPyBcIm5vcm1hbFwiIDogdGhpcy5tb2RTdGFja1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1vZCBsYWJlbCBjdXJyZW50bHkgYWN0aXZlXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9ICBsYWJlbCBvZiBhY3RpdmUgbW9kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtb2ROYW1lKCkge1xuICAgIGlmICh0aGlzLm1vZFN0YWNrLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwibm9ybWFsXCI7XG4gICAgZWxzZSBpZiAodGhpcy5tb2RTdGFja1swXSA9PT0gXCJtb25vXCIpIHJldHVybiBcIm1vbm9cIjtcbiAgICBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmJvbGQgJiYgdGhpcy5pdGFsKSB7XG4gICAgICAgIHJldHVybiBcImJvbGRpdGFsXCI7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYm9sZCkge1xuICAgICAgICByZXR1cm4gXCJib2xkXCI7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXRhbCkge1xuICAgICAgICByZXR1cm4gXCJpdGFsXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0QmxvY2soKSB7XG4gICAgaWYgKHRoaXMuc3BhY2luZykge1xuICAgICAgdGhpcy5hZGQoXCIgXCIpO1xuICAgICAgdGhpcy5zcGFjaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmJsb2Nrcy5wdXNoKHsgdGV4dDogdGhpcy5idWZmZXIsIG1vZDogdGhpcy5tb2ROYW1lKCkgfSk7XG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dCB0ZXh0IHRvIGJ1ZmZlclxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAgdGV4dCB0byBhZGRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFkZCh0ZXh0KSB7XG4gICAgaWYgKHRleHQgPT09IFwiIFwiKSB7XG4gICAgICB0aGlzLnNwYWNpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcGFjaW5nKSB7XG4gICAgICB0aGlzLmJ1ZmZlciArPSBcIiBcIjtcbiAgICAgIHRoaXMuc3BhY2luZyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGV4dCAhPSBcIiBcIikge1xuICAgICAgdGhpcy5idWZmZXIgKz0gdGV4dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHBhcnNpbmcgb2Ygd2hpdGVzcGFjZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2ggIHRoZSBjaGFyYWN0ZXIgdG8gY2hlY2tcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGNoYXJhY3RlciB3YXMgcHJvY2Vzc2VkIGFzIHdoaXRlc3BhY2UsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcGFyc2VXUyhjaCkge1xuICAgIGlmICgvWyBcXHRdLy50ZXN0KGNoKSkge1xuICAgICAgaWYgKCF0aGlzLm1vbm8pIHtcbiAgICAgICAgdGhpcy5zcGFjaW5nID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWRkKGNoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSAgbGFiZWwgZm9yIGJsb2NrIHR5cGUgdG8gc2V0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXRUYWcodGFnTmFtZSkge1xuICAgIHRoaXMuZW1pdEJsb2NrKCk7XG4gICAgdGhpc1t0YWdOYW1lXSA9IHRydWU7XG4gICAgdGhpcy5tb2RTdGFjay51bnNoaWZ0KHRhZ05hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lICBsYWJlbCBmb3IgYmxvY2sgdHlwZSB0byB1bnNldFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdW5zZXRUYWcodGFnTmFtZSkge1xuICAgIHRoaXMuZW1pdEJsb2NrKCk7XG4gICAgdGhpc1t0YWdOYW1lXSA9IGZhbHNlO1xuICAgIHRoaXMubW9kU3RhY2suc2hpZnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSBsYWJlbCBmb3IgYmxvY2sgdHlwZSB3ZSBhcmUgY3VycmVudGx5IHByb2Nlc3NpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB0YWcgc3RyaW5nIHRvIG1hdGNoIGluIHRleHRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHRhZyB3YXMgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHBhcnNlU3RhcnRUYWcodGFnTmFtZSwgdGFnKSB7XG4gICAgLy8gTm90ZTogaWYgJ21vbm8nIHBhc3NlZCBhcyB0YWdOYW1lLCB0aGVyZSBpcyBhIGRvdWJsZSBjaGVjayBoZXJlLiBUaGlzIGlzIE9LXG4gICAgaWYgKCF0aGlzLm1vbm8gJiYgIXRoaXNbdGFnTmFtZV0gJiYgdGhpcy5tYXRjaCh0YWcpKSB7XG4gICAgICB0aGlzLnNldFRhZyh0YWdOYW1lKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHRhZ1xuICAgKiBAcGFyYW0ge251bWJlcn0gW2FkdmFuY2U9dHJ1ZV0gaWYgc2V0LCBhZHZhbmNlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGV4dFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBtYXRjaCBhdCBnaXZlbiBwb3NpdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtYXRjaCh0YWcsIGFkdmFuY2UgPSB0cnVlKSB7XG4gICAgY29uc3QgW3JlZ0V4cCwgbGVuZ3RoXSA9IHRoaXMucHJlcGFyZVJlZ0V4cCh0YWcpO1xuICAgIGNvbnN0IG1hdGNoZWQgPSByZWdFeHAudGVzdCh0aGlzLnRleHQuc3Vic3RyKHRoaXMucG9zaXRpb24sIGxlbmd0aCkpO1xuXG4gICAgaWYgKG1hdGNoZWQgJiYgYWR2YW5jZSkge1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIGxhYmVsIGZvciBibG9jayB0eXBlIHdlIGFyZSBjdXJyZW50bHkgcHJvY2Vzc2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHRhZyBzdHJpbmcgdG8gbWF0Y2ggaW4gdGV4dFxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gW25leHRUYWddIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBmb3IgY2hhcmFjdGVycyAqZm9sbG93aW5nKiB0aGUgY3VycmVudCB0YWdcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHRhZyB3YXMgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHBhcnNlRW5kVGFnKHRhZ05hbWUsIHRhZywgbmV4dFRhZykge1xuICAgIGxldCBjaGVja1RhZyA9IHRoaXMubW9kKCkgPT09IHRhZ05hbWU7XG4gICAgaWYgKHRhZ05hbWUgPT09IFwibW9ub1wiKSB7XG4gICAgICAvLyBzcGVjaWFsIGhhbmRsaW5nIGZvciAnbW9ubydcbiAgICAgIGNoZWNrVGFnID0gY2hlY2tUYWcgJiYgdGhpcy5tb25vO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVja1RhZyA9IGNoZWNrVGFnICYmICF0aGlzLm1vbm87XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrVGFnICYmIHRoaXMubWF0Y2godGFnKSkge1xuICAgICAgaWYgKG5leHRUYWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBQdXJwb3NlIG9mIHRoZSBmb2xsb3dpbmcgbWF0Y2ggaXMgdG8gcHJldmVudCBhIGRpcmVjdCB1bnNldC9zZXQgb2YgYSBnaXZlbiB0YWdcbiAgICAgICAgLy8gRS5nLiAnKmJvbGQgKipzdGlsbCBib2xkKicgPT4gJypib2xkIHN0aWxsIGJvbGQqJ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbiA9PT0gdGhpcy50ZXh0Lmxlbmd0aCAtIDEgfHxcbiAgICAgICAgICB0aGlzLm1hdGNoKG5leHRUYWcsIGZhbHNlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVuc2V0VGFnKHRhZ05hbWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVuc2V0VGFnKHRhZ05hbWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB0YWcgIHN0cmluZyB0byBtYXRjaCBpbiB0ZXh0XG4gICAqIEBwYXJhbSB7dmFsdWV9IHZhbHVlICBzdHJpbmcgdG8gcmVwbGFjZSB0YWcgd2l0aCwgaWYgZm91bmQgYXQgY3VycmVudCBwb3NpdGlvblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgdGFnIHdhcyBwcm9jZXNzZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcmVwbGFjZSh0YWcsIHZhbHVlKSB7XG4gICAgaWYgKHRoaXMubWF0Y2godGFnKSkge1xuICAgICAgdGhpcy5hZGQodmFsdWUpO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGggLSAxO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdGhlIHRhZyBpZiBpdCBpc24ndCBhbHJlYWR5IG9uZS5cbiAgICpcbiAgICogVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBhcnJheSBgW1JlZ0V4cCwgbnVtYmVyXWAsIHdpdGggZXhhY3RseSB0d28gdmFsdWUsIHdoZXJlOlxuICAgKiAgLSBSZWdFeHAgaXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB1c2VcbiAgICogIC0gbnVtYmVyIGlzIHRoZSBsZW50aCBvZiB0aGUgaW5wdXQgc3RyaW5nIHRvIG1hdGNoXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdGFnICBzdHJpbmcgdG8gbWF0Y2ggaW4gdGV4dFxuICAgKiBAcmV0dXJucyB7QXJyYXl9ICByZWd1bGFyIGV4cHJlc3Npb24gdG8gdXNlIGFuZCBsZW5ndGggb2YgaW5wdXQgc3RyaW5nIHRvIG1hdGNoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcmVwYXJlUmVnRXhwKHRhZykge1xuICAgIGxldCBsZW5ndGg7XG4gICAgbGV0IHJlZ0V4cDtcbiAgICBpZiAodGFnIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICByZWdFeHAgPSB0YWc7XG4gICAgICBsZW5ndGggPSAxOyAvLyBBU1NVTVBUSU9OOiByZWdleHAgb25seSB0ZXN0cyBvbmUgY2hhcmFjdGVyXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVzZSBwcmVwYXJlZCByZWdleHAgaWYgcHJlc2VudFxuICAgICAgY29uc3QgcHJlcGFyZWQgPSB0YWdQYXR0ZXJuW3RhZ107XG4gICAgICBpZiAocHJlcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZWdFeHAgPSBwcmVwYXJlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZ0V4cCA9IG5ldyBSZWdFeHAodGFnKTtcbiAgICAgIH1cblxuICAgICAgbGVuZ3RoID0gdGFnLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gW3JlZ0V4cCwgbGVuZ3RoXTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgTGFiZWwgd2hpY2ggZXhwbG9kZXMgdGhlIGxhYmVsIHRleHQgaW50byBsaW5lcyBhbmQgYmxvY2tzIHdpdGhpbiBsaW5lc1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIExhYmVsU3BsaXR0ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCBDYW52YXMgcmVuZGVyaW5nIGNvbnRleHRcbiAgICogQHBhcmFtIHtMYWJlbH0gcGFyZW50IHJlZmVyZW5jZSB0byB0aGUgTGFiZWwgaW5zdGFuY2UgdXNpbmcgY3VycmVudCBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKGN0eCwgcGFyZW50LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICB0aGlzLmN0eCA9IGN0eDtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgdGhpcy5ob3ZlciA9IGhvdmVyO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gZGV0ZXJtaW5lIHRleHQgd2lkdGg7IHBhc3NlZCB0byBMYWJlbEFjY3VtdWxhdG9yIGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRleHQgc3RyaW5nIHRvIGRldGVybWluZSB3aWR0aCBvZlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbW9kICBmb250IHR5cGUgdG8gdXNlIGZvciB0aGlzIHRleHRcbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSB7IHdpZHRoLCB2YWx1ZXN9IHdpZHRoIGluIHBpeGVscyBhbmQgZm9udCBhdHRyaWJ1dGVzXG4gICAgICovXG4gICAgY29uc3QgdGV4dFdpZHRoID0gKHRleHQsIG1vZCkgPT4ge1xuICAgICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG5cbiAgICAgIC8vIFRPRE86IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBlZmZpY2llbnRseSB3aXRoIGNhY2hpbmdcbiAgICAgIC8vIFRoaXMgd2lsbCBzZXQgdGhlIGN0eC5mb250IGNvcnJlY3RseSwgZGVwZW5kaW5nIG9uIHNlbGVjdGVkL2hvdmVyIGFuZCBtb2QgLSBzbyB0aGF0IGN0eC5tZWFzdXJlVGV4dCgpIHdpbGwgYmUgYWNjdXJhdGUuXG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnBhcmVudC5nZXRGb3JtYXR0aW5nVmFsdWVzKGN0eCwgc2VsZWN0ZWQsIGhvdmVyLCBtb2QpO1xuXG4gICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgaWYgKHRleHQgIT09IFwiXCIpIHtcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KHRleHQpO1xuICAgICAgICB3aWR0aCA9IG1lYXN1cmUud2lkdGg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHdpZHRoLCB2YWx1ZXM6IHZhbHVlcyB9O1xuICAgIH07XG5cbiAgICB0aGlzLmxpbmVzID0gbmV3IExhYmVsQWNjdW11bGF0b3IodGV4dFdpZHRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCBwYXNzZWQgdGV4dCBvZiBhIGxhYmVsIGludG8gbGluZXMgYW5kIGJsb2Nrcy5cbiAgICpcbiAgICogIyBOT1RFXG4gICAqXG4gICAqIFRoZSBoYW5kbGluZyBvZiBzcGFjaW5nIGlzIG9wdGlvbiBkZXBlbmRlbnQ6XG4gICAqXG4gICAqIC0gaWYgYGZvbnQubXVsdGkgOiBmYWxzZWAsIGFsbCBzcGFjZXMgYXJlIHJldGFpbmVkXG4gICAqIC0gaWYgYGZvbnQubXVsdGkgOiB0cnVlYCwgZXZlcnkgc2VxdWVuY2Ugb2Ygc3BhY2VzIGlzIGNvbXByZXNzZWQgdG8gYSBzaW5nbGUgc3BhY2VcbiAgICpcbiAgICogVGhpcyBtaWdodCBub3QgYmUgdGhlIGJlc3Qgd2F5IHRvIGRvIGl0LCBidXQgdGhpcyBpcyBhcyBpdCBoYXMgYmVlbiB3b3JraW5nIHRpbGwgbm93LlxuICAgKiBJbiBvcmRlciBub3QgdG8gYnJlYWsgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSwgZm9yIHRoZSB0aW1lIGJlaW5nIHRoaXMgYmVoYXZpb3VyIHdpbGxcbiAgICogYmUgcmV0YWluZWQgaW4gYW55IGNvZGUgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgIHRleHQgdG8gc3BsaXRcbiAgICogQHJldHVybnMge0FycmF5PGxpbmU+fVxuICAgKi9cbiAgcHJvY2Vzcyh0ZXh0KSB7XG4gICAgaWYgKCFpc1ZhbGlkTGFiZWwodGV4dCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpbmVzLmZpbmFsaXplKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZm9udCA9IHRoaXMucGFyZW50LmZvbnRPcHRpb25zO1xuXG4gICAgLy8gTm9ybWFsaXplIHRoZSBlbmQtb2YtbGluZSdzIHRvIGEgc2luZ2xlIHJlcHJlc2VudGF0aW9uIC0gb3JkZXIgaW1wb3J0YW50XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxyXFxuL2csIFwiXFxuXCIpOyAvLyBEb3MgRU9MJ3NcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXHIvZywgXCJcXG5cIik7IC8vIE1hYyBFT0wnc1xuXG4gICAgLy8gTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQsIHRoZXJlIGNhbiBiZSBubyBcXHIncyBpbiB0aGUgdGV4dC5cbiAgICAvLyBUaGlzIGlzIHVzZWQgbGF0ZXIgb24gc3BsaXRTdHJpbmdJbnRvTGluZXMoKSB0byBzcGxpdCBtdWx0aWZvbnQgdGV4dHMuXG5cbiAgICBjb25zdCBubExpbmVzID0gU3RyaW5nKHRleHQpLnNwbGl0KFwiXFxuXCIpO1xuICAgIGNvbnN0IGxpbmVDb3VudCA9IG5sTGluZXMubGVuZ3RoO1xuXG4gICAgaWYgKGZvbnQubXVsdGkpIHtcbiAgICAgIC8vIE11bHRpLWZvbnQgY2FzZTogc3R5bGluZyB0YWdzIGFjdGl2ZVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lQ291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBibG9ja3MgPSB0aGlzLnNwbGl0QmxvY2tzKG5sTGluZXNbaV0sIGZvbnQubXVsdGkpO1xuICAgICAgICAvLyBQb3N0OiBTZXF1ZW5jZXMgb2YgdGFicyBhbmQgc3BhY2VzIGFyZSByZWR1Y2VkIHRvIHNpbmdsZSBzcGFjZVxuXG4gICAgICAgIGlmIChibG9ja3MgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgICAgaWYgKGJsb2Nrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmxpbmVzLm5ld0xpbmUoXCJcIik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9udC5tYXhXZHQgPiAwKSB7XG4gICAgICAgICAgLy8gd2lkdGhDb25zdHJhaW50Lm1heGltdW0gZGVmaW5lZFxuICAgICAgICAgIC8vY29uc29sZS5sb2coJ1J1bm5pbmcgd2lkdGhDb25zdHJhaW50IG11bHRpLCBtYXg6ICcgKyB0aGlzLmZvbnRPcHRpb25zLm1heFdkdCk7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBibG9ja3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IGJsb2Nrc1tqXS5tb2Q7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gYmxvY2tzW2pdLnRleHQ7XG4gICAgICAgICAgICB0aGlzLnNwbGl0U3RyaW5nSW50b0xpbmVzKHRleHQsIG1vZCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHdpZHRoQ29uc3RyYWludC5tYXhpbXVtIE5PVCBkZWZpbmVkXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBibG9ja3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IGJsb2Nrc1tqXS5tb2Q7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gYmxvY2tzW2pdLnRleHQ7XG4gICAgICAgICAgICB0aGlzLmxpbmVzLmFwcGVuZCh0ZXh0LCBtb2QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGluZXMubmV3TGluZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTaW5nbGUtZm9udCBjYXNlXG4gICAgICBpZiAoZm9udC5tYXhXZHQgPiAwKSB7XG4gICAgICAgIC8vIHdpZHRoQ29uc3RyYWludC5tYXhpbXVtIGRlZmluZWRcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1J1bm5pbmcgd2lkdGhDb25zdHJhaW50IG5vcm1hbCwgbWF4OiAnICsgdGhpcy5mb250T3B0aW9ucy5tYXhXZHQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVDb3VudDsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5zcGxpdFN0cmluZ0ludG9MaW5lcyhubExpbmVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gd2lkdGhDb25zdHJhaW50Lm1heGltdW0gTk9UIGRlZmluZWRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lQ291bnQ7IGkrKykge1xuICAgICAgICAgIHRoaXMubGluZXMubmV3TGluZShubExpbmVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxpbmVzLmZpbmFsaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogbm9ybWFsaXplIHRoZSBtYXJrdXAgc3lzdGVtXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbnwnbWQnfCdtYXJrZG93bid8J2h0bWwnfSBtYXJrdXBTeXN0ZW1cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGRlY29kZU1hcmt1cFN5c3RlbShtYXJrdXBTeXN0ZW0pIHtcbiAgICBsZXQgc3lzdGVtID0gXCJub25lXCI7XG4gICAgaWYgKG1hcmt1cFN5c3RlbSA9PT0gXCJtYXJrZG93blwiIHx8IG1hcmt1cFN5c3RlbSA9PT0gXCJtZFwiKSB7XG4gICAgICBzeXN0ZW0gPSBcIm1hcmtkb3duXCI7XG4gICAgfSBlbHNlIGlmIChtYXJrdXBTeXN0ZW0gPT09IHRydWUgfHwgbWFya3VwU3lzdGVtID09PSBcImh0bWxcIikge1xuICAgICAgc3lzdGVtID0gXCJodG1sXCI7XG4gICAgfVxuICAgIHJldHVybiBzeXN0ZW07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgc3BsaXRIdG1sQmxvY2tzKHRleHQpIHtcbiAgICBjb25zdCBzID0gbmV3IE1hcmt1cEFjY3VtdWxhdG9yKHRleHQpO1xuXG4gICAgY29uc3QgcGFyc2VFbnRpdGllcyA9IChjaCkgPT4ge1xuICAgICAgaWYgKC8mLy50ZXN0KGNoKSkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPVxuICAgICAgICAgIHMucmVwbGFjZShzLnRleHQsIFwiJmx0O1wiLCBcIjxcIikgfHwgcy5yZXBsYWNlKHMudGV4dCwgXCImYW1wO1wiLCBcIiZcIik7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBzLmFkZChcIiZcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB3aGlsZSAocy5wb3NpdGlvbiA8IHMudGV4dC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNoID0gcy50ZXh0LmNoYXJBdChzLnBvc2l0aW9uKTtcblxuICAgICAgY29uc3QgcGFyc2VkID1cbiAgICAgICAgcy5wYXJzZVdTKGNoKSB8fFxuICAgICAgICAoLzwvLnRlc3QoY2gpICYmXG4gICAgICAgICAgKHMucGFyc2VTdGFydFRhZyhcImJvbGRcIiwgXCI8Yj5cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VTdGFydFRhZyhcIml0YWxcIiwgXCI8aT5cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VTdGFydFRhZyhcIm1vbm9cIiwgXCI8Y29kZT5cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VFbmRUYWcoXCJib2xkXCIsIFwiPC9iPlwiKSB8fFxuICAgICAgICAgICAgcy5wYXJzZUVuZFRhZyhcIml0YWxcIiwgXCI8L2k+XCIpIHx8XG4gICAgICAgICAgICBzLnBhcnNlRW5kVGFnKFwibW9ub1wiLCBcIjwvY29kZT5cIikpKSB8fFxuICAgICAgICBwYXJzZUVudGl0aWVzKGNoKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgcy5hZGQoY2gpO1xuICAgICAgfVxuICAgICAgcy5wb3NpdGlvbisrO1xuICAgIH1cbiAgICBzLmVtaXRCbG9jaygpO1xuICAgIHJldHVybiBzLmJsb2NrcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBzcGxpdE1hcmtkb3duQmxvY2tzKHRleHQpIHtcbiAgICBjb25zdCBzID0gbmV3IE1hcmt1cEFjY3VtdWxhdG9yKHRleHQpO1xuICAgIGxldCBiZWdpbmFibGUgPSB0cnVlO1xuXG4gICAgY29uc3QgcGFyc2VPdmVycmlkZSA9IChjaCkgPT4ge1xuICAgICAgaWYgKC9cXFxcLy50ZXN0KGNoKSkge1xuICAgICAgICBpZiAocy5wb3NpdGlvbiA8IHRoaXMudGV4dC5sZW5ndGggKyAxKSB7XG4gICAgICAgICAgcy5wb3NpdGlvbisrO1xuICAgICAgICAgIGNoID0gdGhpcy50ZXh0LmNoYXJBdChzLnBvc2l0aW9uKTtcbiAgICAgICAgICBpZiAoLyBcXHQvLnRlc3QoY2gpKSB7XG4gICAgICAgICAgICBzLnNwYWNpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzLmFkZChjaCk7XG4gICAgICAgICAgICBiZWdpbmFibGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB3aGlsZSAocy5wb3NpdGlvbiA8IHMudGV4dC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNoID0gcy50ZXh0LmNoYXJBdChzLnBvc2l0aW9uKTtcblxuICAgICAgY29uc3QgcGFyc2VkID1cbiAgICAgICAgcy5wYXJzZVdTKGNoKSB8fFxuICAgICAgICBwYXJzZU92ZXJyaWRlKGNoKSB8fFxuICAgICAgICAoKGJlZ2luYWJsZSB8fCBzLnNwYWNpbmcpICYmXG4gICAgICAgICAgKHMucGFyc2VTdGFydFRhZyhcImJvbGRcIiwgXCIqXCIpIHx8XG4gICAgICAgICAgICBzLnBhcnNlU3RhcnRUYWcoXCJpdGFsXCIsIFwiX1wiKSB8fFxuICAgICAgICAgICAgcy5wYXJzZVN0YXJ0VGFnKFwibW9ub1wiLCBcImBcIikpKSB8fFxuICAgICAgICBzLnBhcnNlRW5kVGFnKFwiYm9sZFwiLCBcIipcIiwgXCJhZnRlckJvbGRcIikgfHxcbiAgICAgICAgcy5wYXJzZUVuZFRhZyhcIml0YWxcIiwgXCJfXCIsIFwiYWZ0ZXJJdGFsXCIpIHx8XG4gICAgICAgIHMucGFyc2VFbmRUYWcoXCJtb25vXCIsIFwiYFwiLCBcImFmdGVyTW9ub1wiKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgcy5hZGQoY2gpO1xuICAgICAgICBiZWdpbmFibGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHMucG9zaXRpb24rKztcbiAgICB9XG4gICAgcy5lbWl0QmxvY2soKTtcbiAgICByZXR1cm4gcy5ibG9ja3M7XG4gIH1cblxuICAvKipcbiAgICogRXhwbG9kZXMgYSBwaWVjZSBvZiB0ZXh0IGludG8gc2luZ2xlLWZvbnQgYmxvY2tzIHVzaW5nIGEgZ2l2ZW4gbWFya3VwXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbnwnbWQnfCdtYXJrZG93bid8J2h0bWwnfSBtYXJrdXBTeXN0ZW1cbiAgICogQHJldHVybnMge0FycmF5Ljx7dGV4dDogc3RyaW5nLCBtb2Q6IHN0cmluZ30+fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3BsaXRCbG9ja3ModGV4dCwgbWFya3VwU3lzdGVtKSB7XG4gICAgY29uc3Qgc3lzdGVtID0gdGhpcy5kZWNvZGVNYXJrdXBTeXN0ZW0obWFya3VwU3lzdGVtKTtcbiAgICBpZiAoc3lzdGVtID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgbW9kOiBcIm5vcm1hbFwiLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9IGVsc2UgaWYgKHN5c3RlbSA9PT0gXCJtYXJrZG93blwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcGxpdE1hcmtkb3duQmxvY2tzKHRleHQpO1xuICAgIH0gZWxzZSBpZiAoc3lzdGVtID09PSBcImh0bWxcIikge1xuICAgICAgcmV0dXJuIHRoaXMuc3BsaXRIdG1sQmxvY2tzKHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0ZXh0IGxlbmd0aCBvdmVyIHRoZSBjdXJyZW50IG1heCB3aXRoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvdmVyTWF4V2lkdGgodGV4dCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5jdHgubWVhc3VyZVRleHQodGV4dCkud2lkdGg7XG4gICAgcmV0dXJuIHRoaXMubGluZXMuY3VyV2lkdGgoKSArIHdpZHRoID4gdGhpcy5wYXJlbnQuZm9udE9wdGlvbnMubWF4V2R0O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgbG9uZ2VzdCBwYXJ0IG9mIHRoZSBzZW50ZW5jZSB3aGljaCBzdGlsbCBmaXRzIGluIHRoZVxuICAgKiBjdXJyZW50IG1heCB3aWR0aC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgIEFycmF5IG9mIHN0cmluZ3Mgc2lnbmlmeWluZyBhIHRleHQgbGluZXNcbiAgICogQHJldHVybnMge251bWJlcn0gICAgICBpbmRleCBvZiBmaXJzdCBpdGVtIGluIHN0cmluZyBtYWtpbmcgc3RyaW5nIGdvIG92ZXIgbWF4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRMb25nZXN0Rml0KHdvcmRzKSB7XG4gICAgbGV0IHRleHQgPSBcIlwiO1xuICAgIGxldCB3ID0gMDtcblxuICAgIHdoaWxlICh3IDwgd29yZHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwcmUgPSB0ZXh0ID09PSBcIlwiID8gXCJcIiA6IFwiIFwiO1xuICAgICAgY29uc3QgbmV3VGV4dCA9IHRleHQgKyBwcmUgKyB3b3Jkc1t3XTtcblxuICAgICAgaWYgKHRoaXMub3Zlck1heFdpZHRoKG5ld1RleHQpKSBicmVhaztcbiAgICAgIHRleHQgPSBuZXdUZXh0O1xuICAgICAgdysrO1xuICAgIH1cblxuICAgIHJldHVybiB3O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgbG9uZ2VzdCBwYXJ0IG9mIHRoZSBzdHJpbmcgd2hpY2ggc3RpbGwgZml0cyBpbiB0aGVcbiAgICogY3VycmVudCBtYXggd2lkdGguXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIEFycmF5IG9mIHN0cmluZ3Mgc2lnbmlmeWluZyBhIHRleHQgbGluZXNcbiAgICogQHJldHVybnMge251bWJlcn0gaW5kZXggb2YgZmlyc3QgaXRlbSBpbiBzdHJpbmcgbWFraW5nIHN0cmluZyBnbyBvdmVyIG1heFxuICAgKi9cbiAgZ2V0TG9uZ2VzdEZpdFdvcmQod29yZHMpIHtcbiAgICBsZXQgdyA9IDA7XG5cbiAgICB3aGlsZSAodyA8IHdvcmRzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMub3Zlck1heFdpZHRoKHdvcmRzLnNsaWNlKDAsIHcpKSkgYnJlYWs7XG4gICAgICB3Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHc7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgdGhlIHBhc3NlZCB0ZXh0IGludG8gbGluZXMsIGFjY29yZGluZyB0byB3aWR0aCBjb25zdHJhaW50IChpZiBhbnkpLlxuICAgKlxuICAgKiBUaGUgbWV0aG9kIGFzc3VtZXMgdGhhdCB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgc2luZ2xlIGxpbmUsIGkuZS4gd2l0aG91dCBsaW5lcyBicmVhay5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgcmV0YWlucyBzcGFjZXMsIGlmIHN0aWxsIHByZXNlbnQgKGNhc2UgYGZvbnQubXVsdGk6IGZhbHNlYCkuXG4gICAqIEEgc3BhY2Ugd2hpY2ggZmFsbHMgb24gYW4gaW50ZXJuYWwgbGluZSBicmVhaywgd2lsbCBiZSByZXBsYWNlZCBieSBhIG5ld2xpbmUuXG4gICAqIFRoZXJlIGlzIG5vIHNwZWNpYWwgaGFuZGxpbmcgb2YgdGFiczsgdGhlc2UgZ28gYWxvbmcgd2l0aCB0aGUgZmxvdy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gW21vZD0nbm9ybWFsJ11cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXBwZW5kTGFzdD1mYWxzZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNwbGl0U3RyaW5nSW50b0xpbmVzKHN0ciwgbW9kID0gXCJub3JtYWxcIiwgYXBwZW5kTGFzdCA9IGZhbHNlKSB7XG4gICAgLy8gU2V0IHRoZSBjYW52YXMgY29udGV4dCBmb250LCBiYXNlZCB1cG9uIHRoZSBjdXJyZW50IHNlbGVjdGVkL2hvdmVyIHN0YXRlXG4gICAgLy8gYW5kIHRoZSBwcm92aWRlZCBtb2QsIHNvIHRoZSB0ZXh0IG1lYXN1cmVtZW50IHBlcmZvcm1lZCBieSBnZXRMb25nZXN0Rml0XG4gICAgLy8gd2lsbCBiZSBhY2N1cmF0ZSAtIGFuZCBub3QganVzdCB1c2UgdGhlIGZvbnQgb2Ygd2hvZXZlciBsYXN0IHVzZWQgdGhlIGNhbnZhcy5cbiAgICB0aGlzLnBhcmVudC5nZXRGb3JtYXR0aW5nVmFsdWVzKHRoaXMuY3R4LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyLCBtb2QpO1xuXG4gICAgLy8gU3RpbGwtcHJlc2VudCBzcGFjZXMgYXJlIHJlbGV2YW50LCByZXRhaW4gdGhlbVxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9eKCArKS9nLCBcIiQxXFxyXCIpO1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8oW15cXHJdW14gXSopKCArKS9nLCBcIiQxXFxyJDJcXHJcIik7XG4gICAgbGV0IHdvcmRzID0gc3RyLnNwbGl0KFwiXFxyXCIpO1xuXG4gICAgd2hpbGUgKHdvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCB3ID0gdGhpcy5nZXRMb25nZXN0Rml0KHdvcmRzKTtcblxuICAgICAgaWYgKHcgPT09IDApIHtcbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlOiB0aGUgZmlyc3Qgd29yZCBpcyBhbHJlYWR5IGxhcmdlciB0aGFuIHRoZSBtYXggd2lkdGguXG4gICAgICAgIGNvbnN0IHdvcmQgPSB3b3Jkc1swXTtcblxuICAgICAgICAvLyBCcmVhayB0aGUgd29yZCB0byB0aGUgbGFyZ2VzdCBwYXJ0IHRoYXQgZml0cyB0aGUgbGluZVxuICAgICAgICBjb25zdCB4ID0gdGhpcy5nZXRMb25nZXN0Rml0V29yZCh3b3JkKTtcbiAgICAgICAgdGhpcy5saW5lcy5uZXdMaW5lKHdvcmQuc2xpY2UoMCwgeCksIG1vZCk7XG5cbiAgICAgICAgLy8gQWRqdXN0IHRoZSB3b3JkLCBzbyB0aGF0IHRoZSByZXN0IHdpbGwgYmUgZG9uZSBuZXh0IGl0ZXJhdGlvblxuICAgICAgICB3b3Jkc1swXSA9IHdvcmQuc2xpY2UoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBza2lwIGFueSBzcGFjZSB0aGF0IGlzIHJlcGxhY2VkIGJ5IGEgbmV3bGluZVxuICAgICAgICBsZXQgbmV3VyA9IHc7XG4gICAgICAgIGlmICh3b3Jkc1t3IC0gMV0gPT09IFwiIFwiKSB7XG4gICAgICAgICAgdy0tO1xuICAgICAgICB9IGVsc2UgaWYgKHdvcmRzW25ld1ddID09PSBcIiBcIikge1xuICAgICAgICAgIG5ld1crKztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRleHQgPSB3b3Jkcy5zbGljZSgwLCB3KS5qb2luKFwiXCIpO1xuXG4gICAgICAgIGlmICh3ID09IHdvcmRzLmxlbmd0aCAmJiBhcHBlbmRMYXN0KSB7XG4gICAgICAgICAgdGhpcy5saW5lcy5hcHBlbmQodGV4dCwgbW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxpbmVzLm5ld0xpbmUodGV4dCwgbW9kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkanVzdCB0aGUgd29yZCwgc28gdGhhdCB0aGUgcmVzdCB3aWxsIGJlIGRvbmUgbmV4dCBpdGVyYXRpb25cbiAgICAgICAgd29yZHMgPSB3b3Jkcy5zbGljZShuZXdXKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGFiZWxTcGxpdHRlcjtcbiIsICJpbXBvcnQgeyBkZWVwRXh0ZW5kLCBmb3JFYWNoLCBvdmVycmlkZU9wYWNpdHksIHRvcE1vc3QgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBjaG9vc2lmeSwgaXNWYWxpZExhYmVsIH0gZnJvbSBcIi4vQ29tcG9uZW50VXRpbFwiO1xuaW1wb3J0IExhYmVsU3BsaXR0ZXIgZnJvbSBcIi4vTGFiZWxTcGxpdHRlclwiO1xuXG4vKipcbiAqIExpc3Qgb2Ygc3BlY2lhbCBzdHlsZXMgZm9yIG11bHRpLWZvbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgbXVsdGlGb250U3R5bGUgPSBbXCJib2xkXCIsIFwiaXRhbFwiLCBcImJvbGRpdGFsXCIsIFwibW9ub1wiXTtcblxuLyoqXG4gKiBBIExhYmVsIHRvIGJlIHVzZWQgZm9yIE5vZGVzIG9yIEVkZ2VzLlxuICovXG5jbGFzcyBMYWJlbCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtlZGdlbGFiZWw9ZmFsc2VdXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBvcHRpb25zLCBlZGdlbGFiZWwgPSBmYWxzZSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5wb2ludFRvU2VsZiA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZVNpemUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mb250T3B0aW9ucyA9IHt9OyAvLyBpbnN0YW5jZSB2YXJpYWJsZSBjb250YWluaW5nIHRoZSAqaW5zdGFuY2UtbG9jYWwqIGZvbnQgb3B0aW9uc1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB0aGlzLnNpemUgPSB7IHRvcDogMCwgbGVmdDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCwgeUxpbmU6IDAgfTtcbiAgICB0aGlzLmlzRWRnZUxhYmVsID0gZWRnZWxhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIHRoZSBvcHRpb25zIG9mIHRoZSBwYXJlbnQgTm9kZS1pbnN0YW5jZVxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5lbGVtZW50T3B0aW9ucyA9IG9wdGlvbnM7IC8vIFJlZmVyZW5jZSB0byB0aGUgb3B0aW9ucyBvZiB0aGUgcGFyZW50IE5vZGUtaW5zdGFuY2VcblxuICAgIHRoaXMuaW5pdEZvbnRPcHRpb25zKG9wdGlvbnMuZm9udCk7XG5cbiAgICBpZiAoaXNWYWxpZExhYmVsKG9wdGlvbnMubGFiZWwpKSB7XG4gICAgICB0aGlzLmxhYmVsRGlydHkgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCYWQgbGFiZWwhIENoYW5nZSB0aGUgb3B0aW9uIHZhbHVlIHRvIHByZXZlbnQgYmFkIHN0dWZmIGhhcHBlbmluZ1xuICAgICAgb3B0aW9ucy5sYWJlbCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5mb250ICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5mb250ICE9PSBudWxsKSB7XG4gICAgICAvLyBmb250IG9wdGlvbnMgY2FuIGJlIGRlbGV0ZWQgYXQgdmFyaW91cyBsZXZlbHNcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mb250ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMuYmFzZVNpemUgPSB0aGlzLmZvbnRPcHRpb25zLnNpemU7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmZvbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IG9wdGlvbnMuZm9udC5zaXplO1xuXG4gICAgICAgIGlmIChzaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmJhc2VTaXplID0gc2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0IHRoZSBmb250IE9wdGlvbnMgc3RydWN0dXJlLlxuICAgKlxuICAgKiBNZW1iZXIgZm9udE9wdGlvbnMgc2VydmVzIGFzIGFuIGFjY3VtdWxhdG9yIGZvciB0aGUgY3VycmVudCBmb250IG9wdGlvbnMuXG4gICAqIEFzIHN1Y2gsIGl0IG5lZWRzIHRvIGJlIGNvbXBsZXRlbHkgc2VwYXJhdGVkIGZyb20gdGhlIG5vZGUgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld0ZvbnRPcHRpb25zIHRoZSBuZXcgZm9udCBvcHRpb25zIHRvIHByb2Nlc3NcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluaXRGb250T3B0aW9ucyhuZXdGb250T3B0aW9ucykge1xuICAgIC8vIFByZXBhcmUgdGhlIG11bHRpLWZvbnQgb3B0aW9uIG9iamVjdHMuXG4gICAgLy8gVGhlc2Ugd2lsbCBiZSBmaWxsZWQgaW4gcHJvcGFnYXRlRm9udHMoKSwgaWYgcmVxdWlyZWRcbiAgICBmb3JFYWNoKG11bHRpRm9udFN0eWxlLCAoc3R5bGUpID0+IHtcbiAgICAgIHRoaXMuZm9udE9wdGlvbnNbc3R5bGVdID0ge307XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgc2hvcnRoYW5kIG9wdGlvbiwgaWYgcHJlc2VudFxuICAgIGlmIChMYWJlbC5wYXJzZUZvbnRTdHJpbmcodGhpcy5mb250T3B0aW9ucywgbmV3Rm9udE9wdGlvbnMpKSB7XG4gICAgICB0aGlzLmZvbnRPcHRpb25zLnZhZGp1c3QgPSAwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENvcHkgb3ZlciB0aGUgbm9uLW11bHRpZm9udCBvcHRpb25zLCBpZiBzcGVjaWZpZWRcbiAgICBmb3JFYWNoKG5ld0ZvbnRPcHRpb25zLCAocHJvcCwgbikgPT4ge1xuICAgICAgaWYgKHByb3AgIT09IHVuZGVmaW5lZCAmJiBwcm9wICE9PSBudWxsICYmIHR5cGVvZiBwcm9wICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRoaXMuZm9udE9wdGlvbnNbbl0gPSBwcm9wO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGluLXZhcmlhYmxlIGlzIGEgc3RyaW5nLCBwYXJzZSBpdCBhcyBhIGZvbnQgc3BlY2lmaWVyLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgZm9sbG93aW5nIGlzIG5vdCBkb25lIGhlcmUgYW5kIGhhdmUgdG8gYmUgZG9uZSBhZnRlciB0aGUgY2FsbDpcbiAgICogLSBOb3QgYWxsIGZvbnQgb3B0aW9ucyBhcmUgc2V0ICh2YWRqdXN0LCBtb2QpXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvdXRPcHRpb25zICBvdXQtcGFyYW1ldGVyLCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHBhcnNlIHJlc3VsdHMgKGlmIGFueSlcbiAgICogQHBhcmFtIHtvYmplY3R9IGluT3B0aW9ucyAgZm9udCBvcHRpb25zIHRvIHBhcnNlXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGZvbnQgcGFyc2VkIGFzIHN0cmluZywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZUZvbnRTdHJpbmcob3V0T3B0aW9ucywgaW5PcHRpb25zKSB7XG4gICAgaWYgKCFpbk9wdGlvbnMgfHwgdHlwZW9mIGluT3B0aW9ucyAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgbmV3T3B0aW9uc0FycmF5ID0gaW5PcHRpb25zLnNwbGl0KFwiIFwiKTtcblxuICAgIG91dE9wdGlvbnMuc2l6ZSA9ICtuZXdPcHRpb25zQXJyYXlbMF0ucmVwbGFjZShcInB4XCIsIFwiXCIpO1xuICAgIG91dE9wdGlvbnMuZmFjZSA9IG5ld09wdGlvbnNBcnJheVsxXTtcbiAgICBvdXRPcHRpb25zLmNvbG9yID0gbmV3T3B0aW9uc0FycmF5WzJdO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGNvbnN0cmFpbnRzIGJhc2VkIG9uICduZWFyZXN0JyB2YWx1ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwaWxlIGFycmF5IG9mIG9wdGlvbiBvYmplY3RzIHRvIGNvbnNpZGVyXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IHRoZSBhY3R1YWwgY29uc3RyYWludCB2YWx1ZXMgdG8gdXNlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJhaW4ocGlsZSkge1xuICAgIC8vIE5PVEU6IGNvbnN0cmFpbldpZHRoIGFuZCAgY29uc3RyYWluSGVpZ2h0IG5ldmVyIHNldCFcbiAgICAvLyBOT1RFOiBmb3IgZWRnZSBsYWJlbHMsIG9ubHkgJ21heFdkdCcgc2V0XG4gICAgLy8gTm9kZSBsYWJlbHMgY2FuIHNldCBhbGwgdGhlIGZpZWxkc1xuICAgIGNvbnN0IGZvbnRPcHRpb25zID0ge1xuICAgICAgY29uc3RyYWluV2lkdGg6IGZhbHNlLFxuICAgICAgbWF4V2R0OiAtMSxcbiAgICAgIG1pbldkdDogLTEsXG4gICAgICBjb25zdHJhaW5IZWlnaHQ6IGZhbHNlLFxuICAgICAgbWluSGd0OiAtMSxcbiAgICAgIHZhbGlnbjogXCJtaWRkbGVcIixcbiAgICB9O1xuXG4gICAgY29uc3Qgd2lkdGhDb25zdHJhaW50ID0gdG9wTW9zdChwaWxlLCBcIndpZHRoQ29uc3RyYWludFwiKTtcbiAgICBpZiAodHlwZW9mIHdpZHRoQ29uc3RyYWludCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZm9udE9wdGlvbnMubWF4V2R0ID0gTnVtYmVyKHdpZHRoQ29uc3RyYWludCk7XG4gICAgICBmb250T3B0aW9ucy5taW5XZHQgPSBOdW1iZXIod2lkdGhDb25zdHJhaW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aWR0aENvbnN0cmFpbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGNvbnN0IHdpZHRoQ29uc3RyYWludE1heGltdW0gPSB0b3BNb3N0KHBpbGUsIFtcbiAgICAgICAgXCJ3aWR0aENvbnN0cmFpbnRcIixcbiAgICAgICAgXCJtYXhpbXVtXCIsXG4gICAgICBdKTtcbiAgICAgIGlmICh0eXBlb2Ygd2lkdGhDb25zdHJhaW50TWF4aW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBmb250T3B0aW9ucy5tYXhXZHQgPSBOdW1iZXIod2lkdGhDb25zdHJhaW50TWF4aW11bSk7XG4gICAgICB9XG4gICAgICBjb25zdCB3aWR0aENvbnN0cmFpbnRNaW5pbXVtID0gdG9wTW9zdChwaWxlLCBbXG4gICAgICAgIFwid2lkdGhDb25zdHJhaW50XCIsXG4gICAgICAgIFwibWluaW11bVwiLFxuICAgICAgXSk7XG4gICAgICBpZiAodHlwZW9mIHdpZHRoQ29uc3RyYWludE1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgZm9udE9wdGlvbnMubWluV2R0ID0gTnVtYmVyKHdpZHRoQ29uc3RyYWludE1pbmltdW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhlaWdodENvbnN0cmFpbnQgPSB0b3BNb3N0KHBpbGUsIFwiaGVpZ2h0Q29uc3RyYWludFwiKTtcbiAgICBpZiAodHlwZW9mIGhlaWdodENvbnN0cmFpbnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGZvbnRPcHRpb25zLm1pbkhndCA9IE51bWJlcihoZWlnaHRDb25zdHJhaW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBoZWlnaHRDb25zdHJhaW50ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBjb25zdCBoZWlnaHRDb25zdHJhaW50TWluaW11bSA9IHRvcE1vc3QocGlsZSwgW1xuICAgICAgICBcImhlaWdodENvbnN0cmFpbnRcIixcbiAgICAgICAgXCJtaW5pbXVtXCIsXG4gICAgICBdKTtcbiAgICAgIGlmICh0eXBlb2YgaGVpZ2h0Q29uc3RyYWludE1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgZm9udE9wdGlvbnMubWluSGd0ID0gTnVtYmVyKGhlaWdodENvbnN0cmFpbnRNaW5pbXVtKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhlaWdodENvbnN0cmFpbnRWYWxpZ24gPSB0b3BNb3N0KHBpbGUsIFtcbiAgICAgICAgXCJoZWlnaHRDb25zdHJhaW50XCIsXG4gICAgICAgIFwidmFsaWduXCIsXG4gICAgICBdKTtcbiAgICAgIGlmICh0eXBlb2YgaGVpZ2h0Q29uc3RyYWludFZhbGlnbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaGVpZ2h0Q29uc3RyYWludFZhbGlnbiA9PT0gXCJ0b3BcIiB8fFxuICAgICAgICAgIGhlaWdodENvbnN0cmFpbnRWYWxpZ24gPT09IFwiYm90dG9tXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9udE9wdGlvbnMudmFsaWduID0gaGVpZ2h0Q29uc3RyYWludFZhbGlnbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb250T3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgb3B0aW9ucyBhbmQgdXBkYXRlIGludGVybmFsIHN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICBvcHRpb25zIHRvIHNldFxuICAgKiBAcGFyYW0ge0FycmF5fSAgcGlsZSAgICAgYXJyYXkgb2Ygb3B0aW9uIG9iamVjdHMgdG8gY29uc2lkZXIgZm9yIG9wdGlvbiAnY2hvc2VuJ1xuICAgKi9cbiAgdXBkYXRlKG9wdGlvbnMsIHBpbGUpIHtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucywgdHJ1ZSk7XG4gICAgdGhpcy5wcm9wYWdhdGVGb250cyhwaWxlKTtcbiAgICBkZWVwRXh0ZW5kKHRoaXMuZm9udE9wdGlvbnMsIHRoaXMuY29uc3RyYWluKHBpbGUpKTtcbiAgICB0aGlzLmZvbnRPcHRpb25zLmNob29zZXIgPSBjaG9vc2lmeShcImxhYmVsXCIsIHBpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gbWFyZ2lucyBhcmUgc2V0IGluIGFuIGVsZW1lbnQsIGFkanVzdCBzaXplcyBpcyBjYWxsZWQgdG8gcmVtb3ZlIHRoZW1cbiAgICogZnJvbSB0aGUgd2lkdGgvaGVpZ2h0IGNvbnN0cmFpbnRzLiBUaGlzIG11c3QgYmUgZG9uZSBwcmlvciB0byBsYWJlbCBzaXppbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7e3RvcDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBib3R0b206IG51bWJlciwgbGVmdDogbnVtYmVyfX0gbWFyZ2luc1xuICAgKi9cbiAgYWRqdXN0U2l6ZXMobWFyZ2lucykge1xuICAgIGNvbnN0IHdpZHRoQmlhcyA9IG1hcmdpbnMgPyBtYXJnaW5zLnJpZ2h0ICsgbWFyZ2lucy5sZWZ0IDogMDtcbiAgICBpZiAodGhpcy5mb250T3B0aW9ucy5jb25zdHJhaW5XaWR0aCkge1xuICAgICAgdGhpcy5mb250T3B0aW9ucy5tYXhXZHQgLT0gd2lkdGhCaWFzO1xuICAgICAgdGhpcy5mb250T3B0aW9ucy5taW5XZHQgLT0gd2lkdGhCaWFzO1xuICAgIH1cbiAgICBjb25zdCBoZWlnaHRCaWFzID0gbWFyZ2lucyA/IG1hcmdpbnMudG9wICsgbWFyZ2lucy5ib3R0b20gOiAwO1xuICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLmNvbnN0cmFpbkhlaWdodCkge1xuICAgICAgdGhpcy5mb250T3B0aW9ucy5taW5IZ3QgLT0gaGVpZ2h0QmlhcztcbiAgICB9XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gTWV0aG9kcyBmb3IgaGFuZGxpbmcgb3B0aW9ucyBwaWxlc1xuICAvLyBFdmVudHVhbGx5LCB0aGVzZSB3aWxsIGJlIG1vdmVkIHRvIGEgc2VwYXJhdGUgY2xhc3NcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZm9udCBtZW1iZXJzIG9mIHRoZSBwYXNzZWQgbGlzdCBvZiBvcHRpb24gb2JqZWN0cyB0byB0aGUgcGlsZS5cbiAgICpcbiAgICogQHBhcmFtIHtQaWxlfSBkc3RQaWxlICBwaWxlIG9mIG9wdGlvbiBvYmplY3RzIGFkZCB0b1xuICAgKiBAcGFyYW0ge1BpbGV9IHNyY1BpbGUgIHBpbGUgb2Ygb3B0aW9uIG9iamVjdHMgdG8gdGFrZSBmb250IG9wdGlvbnMgZnJvbVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkRm9udE9wdGlvbnNUb1BpbGUoZHN0UGlsZSwgc3JjUGlsZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3JjUGlsZS5sZW5ndGg7ICsraSkge1xuICAgICAgdGhpcy5hZGRGb250VG9QaWxlKGRzdFBpbGUsIHNyY1BpbGVbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZ2l2ZW4gZm9udCBvcHRpb24gb2JqZWN0IHRvIHRoZSBsaXN0IG9mIG9iamVjdHMgKHRoZSAncGlsZScpIHRvIGNvbnNpZGVyIGZvciBkZXRlcm1pbmluZ1xuICAgKiBtdWx0aS1mb250IG9wdGlvbiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UGlsZX0gcGlsZSAgcGlsZSBvZiBvcHRpb24gb2JqZWN0cyB0byB1c2VcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgIGluc3RhbmNlIHRvIGFkZCB0byBwaWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhZGRGb250VG9QaWxlKHBpbGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgaWYgKG9wdGlvbnMuZm9udCA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuZm9udCA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgaXRlbSA9IG9wdGlvbnMuZm9udDtcbiAgICBwaWxlLnB1c2goaXRlbSk7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdCBhbGwgb3duLXByb3BlcnR5IHZhbHVlcyBmcm9tIHRoZSBmb250IHBpbGUgdGhhdCBhcmVuJ3QgbXVsdGktZm9udCBvcHRpb24gb2JqZWN0c3MuXG4gICAqXG4gICAqIEBwYXJhbSB7UGlsZX0gcGlsZSAgcGlsZSBvZiBvcHRpb24gb2JqZWN0cyB0byB1c2VcbiAgICogQHJldHVybnMge29iamVjdH0gb2JqZWN0IHdpdGggYWxsIGN1cnJlbnQgb3duIGJhc2ljIGZvbnQgcHJvcGVydGllc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0QmFzaWNPcHRpb25zKHBpbGUpIHtcbiAgICBjb25zdCByZXQgPSB7fTtcblxuICAgIC8vIFNjYW5zIHRoZSB3aG9sZSBwaWxlIHRvIGdldCBhbGwgb3B0aW9ucyBwcmVzZW50XG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCBwaWxlLmxlbmd0aDsgKytuKSB7XG4gICAgICBsZXQgZm9udE9wdGlvbnMgPSBwaWxlW25dO1xuXG4gICAgICAvLyBDb252ZXJ0IHNob3J0aGFuZCBpZiBuZWNlc3NhcnlcbiAgICAgIGNvbnN0IHRtcFNob3J0aGFuZCA9IHt9O1xuICAgICAgaWYgKExhYmVsLnBhcnNlRm9udFN0cmluZyh0bXBTaG9ydGhhbmQsIGZvbnRPcHRpb25zKSkge1xuICAgICAgICBmb250T3B0aW9ucyA9IHRtcFNob3J0aGFuZDtcbiAgICAgIH1cblxuICAgICAgZm9yRWFjaChmb250T3B0aW9ucywgKG9wdCwgbmFtZSkgPT4ge1xuICAgICAgICBpZiAob3B0ID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gbXVsdGktZm9udCBvcHRpb24gbmVlZCBub3QgYmUgcHJlc2VudFxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJldCwgbmFtZSkpIHJldHVybjsgLy8gS2VlcCBmaXJzdCB2YWx1ZSB3ZSBlbmNvdW50ZXJcblxuICAgICAgICBpZiAobXVsdGlGb250U3R5bGUuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAvLyBTa2lwIG11bHRpLWZvbnQgcHJvcGVydGllcyBidXQgd2UgZG8gbmVlZCB0aGUgc3RydWN0dXJlXG4gICAgICAgICAgcmV0W25hbWVdID0ge307XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0W25hbWVdID0gb3B0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdmFsdWUgZm9yIGdpdmVuIG9wdGlvbiBmb3IgdGhlIGdpdmVuIG11bHRpLWZvbnQuXG4gICAqXG4gICAqIEFsbCBhdmFpbGFibGUgb3B0aW9uIG9iamVjdHMgYXJlIHRyYXdsZWQgaW4gdGhlIHNldCBvcmRlciB0byBjb25zdHJ1Y3QgdGhlIG9wdGlvbiB2YWx1ZXMuXG4gICAqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiAjIyBUcmF2ZXJzYWwgb2YgcGlsZSBmb3IgbXVsdGktZm9udHNcbiAgICpcbiAgICogVGhlIGRldGVybWluYXRpb24gb2YgbXVsdGktZm9udCBvcHRpb24gdmFsdWVzIGlzIGEgc3BlY2lhbCBjYXNlLCBiZWNhdXNlIGFueSB2YWx1ZXMgbm90XG4gICAqIHByZXNlbnQgaW4gdGhlIG11bHRpLWZvbnQgb3B0aW9ucyBzaG91bGQgYnkgZGVmaW5pdGlvbiBiZSB0YWtlbiBmcm9tIHRoZSBtYWluIGZvbnQgb3B0aW9ucyxcbiAgICogaS5lLiBmcm9tIHRoZSBjdXJyZW50ICdwYXJlbnQnIG9iamVjdCBvZiB0aGUgbXVsdGktZm9udCBvcHRpb24uXG4gICAqXG4gICAqICMjIyBTZWFyY2ggb3JkZXIgZm9yIG11bHRpLWZvbnRzXG4gICAqXG4gICAqICdib2xkJyB1c2VkIGFzIGV4YW1wbGU6XG4gICAqXG4gICAqICAgLSBzZWFyY2ggaW4gb3B0aW9uIGdyb3VwICdib2xkJyBpbiBsb2NhbCBwcm9wZXJ0aWVzXG4gICAqICAgLSBzZWFyY2ggaW4gbWFpbiBmb250IG9wdGlvbiBncm91cCBpbiBsb2NhbCBwcm9wZXJ0aWVzXG4gICAqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKlxuICAgKiBAcGFyYW0ge1BpbGV9IHBpbGUgIHBpbGUgb2Ygb3B0aW9uIG9iamVjdHMgdG8gdXNlXG4gICAqIEBwYXJhbSB7TXVsdGlGb250U3R5bGV9IG11bHRpTmFtZSBzdWIgcGF0aCBmb3IgdGhlIG11bHRpLWZvbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbiAgdGhlIG9wdGlvbiB0byBzZWFyY2ggZm9yLCBmb3IgdGhlIGdpdmVuIG11bHRpLWZvbnRcbiAgICogQHJldHVybnMge3N0cmluZ3xudW1iZXJ9IHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0Rm9udE9wdGlvbihwaWxlLCBtdWx0aU5hbWUsIG9wdGlvbikge1xuICAgIGxldCBtdWx0aUZvbnQ7XG5cbiAgICAvLyBTZWFyY2ggbXVsdGkgZm9udCBpbiBsb2NhbCBwcm9wZXJ0aWVzXG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCBwaWxlLmxlbmd0aDsgKytuKSB7XG4gICAgICBjb25zdCBmb250T3B0aW9ucyA9IHBpbGVbbl07XG5cbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9udE9wdGlvbnMsIG11bHRpTmFtZSkpIHtcbiAgICAgICAgbXVsdGlGb250ID0gZm9udE9wdGlvbnNbbXVsdGlOYW1lXTtcbiAgICAgICAgaWYgKG11bHRpRm9udCA9PT0gdW5kZWZpbmVkIHx8IG11bHRpRm9udCA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgICAgLy8gQ29udmVydCBzaG9ydGhhbmQgaWYgbmVjZXNzYXJ5XG4gICAgICAgIC8vIFRPRE86IGluZWZmaWNpZW50IHRvIGRvIHRoaXMgY29udmVyc2lvbiBldmVyeSB0aW1lOyBmaW5kIGEgYmV0dGVyIHdheS5cbiAgICAgICAgY29uc3QgdG1wU2hvcnRoYW5kID0ge307XG4gICAgICAgIGlmIChMYWJlbC5wYXJzZUZvbnRTdHJpbmcodG1wU2hvcnRoYW5kLCBtdWx0aUZvbnQpKSB7XG4gICAgICAgICAgbXVsdGlGb250ID0gdG1wU2hvcnRoYW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtdWx0aUZvbnQsIG9wdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gbXVsdGlGb250W29wdGlvbl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPcHRpb24gaXMgbm90IG1lbnRpb25lZCBpbiB0aGUgbXVsdGkgZm9udCBvcHRpb25zOyB0YWtlIGl0IGZyb20gdGhlIHBhcmVudCBmb250IG9wdGlvbnMuXG4gICAgLy8gVGhlc2UgaGF2ZSBhbHJlYWR5IGJlZW4gY29udmVydGVkIHdpdGggZ2V0QmFzaWNPcHRpb25zKCksIHNvIHVzZSB0aGUgY29udmVydGVkIHZhbHVlcy5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZm9udE9wdGlvbnMsIG9wdGlvbikpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvbnRPcHRpb25zW29wdGlvbl07XG4gICAgfVxuXG4gICAgLy8gQSB2YWx1ZSAqKm11c3QqKiBiZSBmb3VuZDsgeW91IHNob3VsZCBuZXZlciBnZXQgaGVyZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkRpZCBub3QgZmluZCB2YWx1ZSBmb3IgbXVsdGktZm9udCBmb3IgcHJvcGVydHk6ICdcIiArIG9wdGlvbiArIFwiJ1wiXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIG9wdGlvbnMgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gbXVsdGktZm9udC5cbiAgICpcbiAgICogQWxsIGF2YWlsYWJsZSBvcHRpb24gb2JqZWN0cyBhcmUgdHJhd2xlZCBpbiB0aGUgc2V0IG9yZGVyIHRvIGNvbnN0cnVjdCB0aGUgb3B0aW9uIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtQaWxlfSBwaWxlICBwaWxlIG9mIG9wdGlvbiBvYmplY3RzIHRvIHVzZVxuICAgKiBAcGFyYW0ge011bHRpRm9udFN0eWxlfSBtdWx0aU5hbWUgc3ViIHBhdGggZm9yIHRoZSBtb2QtZm9udFxuICAgKiBAcmV0dXJucyB7TXVsdGlGb250T3B0aW9uc31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldEZvbnRPcHRpb25zKHBpbGUsIG11bHRpTmFtZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IG9wdGlvbk5hbWVzID0gW1wiY29sb3JcIiwgXCJzaXplXCIsIFwiZmFjZVwiLCBcIm1vZFwiLCBcInZhZGp1c3RcIl07IC8vIExpc3Qgb2YgYWxsb3dlZCBvcHRpb25zIHBlciBtdWx0aS1mb250XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbk5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBtb2QgPSBvcHRpb25OYW1lc1tpXTtcbiAgICAgIHJlc3VsdFttb2RdID0gdGhpcy5nZXRGb250T3B0aW9uKHBpbGUsIG11bHRpTmFtZSwgbW9kKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIEVuZCBtZXRob2RzIGZvciBoYW5kbGluZyBvcHRpb25zIHBpbGVzXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBDb2xsYXBzZSB0aGUgZm9udCBvcHRpb25zIGZvciB0aGUgbXVsdGktZm9udCB0byBzaW5nbGUgb2JqZWN0cywgZnJvbVxuICAgKiB0aGUgY2hhaW4gb2Ygb3B0aW9uIG9iamVjdHMgcGFzc2VkICh0aGUgJ3BpbGUnKS5cbiAgICpcbiAgICogQHBhcmFtIHtQaWxlfSBwaWxlICBzZXF1ZW5jZSBvZiBvcHRpb24gb2JqZWN0cyB0byBjb25zaWRlci5cbiAgICogICAgICAgICAgICAgICAgICAgICBGaXJzdCBpdGVtIGluIGxpc3QgYXNzdW1lZCB0byBiZSB0aGUgbmV3bHkgc2V0IG9wdGlvbnMuXG4gICAqL1xuICBwcm9wYWdhdGVGb250cyhwaWxlKSB7XG4gICAgY29uc3QgZm9udFBpbGUgPSBbXTsgLy8gc2VxdWVuY2Ugb2YgZm9udCBvYmplY3RzIHRvIGNvbnNpZGVyLCBvcmRlciBpbXBvcnRhbnRcblxuICAgIC8vIE5vdGUgdGhhdCB0aGlzLmVsZW1lbnRPcHRpb25zIGlzIG5vdCB1c2VkIGhlcmUuXG4gICAgdGhpcy5hZGRGb250T3B0aW9uc1RvUGlsZShmb250UGlsZSwgcGlsZSk7XG4gICAgdGhpcy5mb250T3B0aW9ucyA9IHRoaXMuZ2V0QmFzaWNPcHRpb25zKGZvbnRQaWxlKTtcblxuICAgIC8vIFdlIHNldCBtdWx0aWZvbnQgdmFsdWVzIGV2ZW4gaWYgbXVsdGkgPT09IGZhbHNlLCBmb3IgY29uc2lzdGVuY3kgKHRoaW5ncyBicmVhayBvdGhlcndpc2UpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtdWx0aUZvbnRTdHlsZS5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgbW9kID0gbXVsdGlGb250U3R5bGVbaV07XG4gICAgICBjb25zdCBtb2RPcHRpb25zID0gdGhpcy5mb250T3B0aW9uc1ttb2RdO1xuICAgICAgY29uc3QgdG1wTXVsdGlGb250T3B0aW9ucyA9IHRoaXMuZ2V0Rm9udE9wdGlvbnMoZm9udFBpbGUsIG1vZCk7XG5cbiAgICAgIC8vIENvcHkgb3ZlciBmb3VuZCB2YWx1ZXNcbiAgICAgIGZvckVhY2godG1wTXVsdGlGb250T3B0aW9ucywgKG9wdGlvbiwgbikgPT4ge1xuICAgICAgICBtb2RPcHRpb25zW25dID0gb3B0aW9uO1xuICAgICAgfSk7XG5cbiAgICAgIG1vZE9wdGlvbnMuc2l6ZSA9IE51bWJlcihtb2RPcHRpb25zLnNpemUpO1xuICAgICAgbW9kT3B0aW9ucy52YWRqdXN0ID0gTnVtYmVyKG1vZE9wdGlvbnMudmFkanVzdCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24uIFRoaXMgaXMgY2FsbGVkIGZyb20gYW55dGhpbmcgdGhhdCB3YW50cyB0byBkcmF3IGEgbGFiZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZWxpbmU9J21pZGRsZSddXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCBiYXNlbGluZSA9IFwibWlkZGxlXCIpIHtcbiAgICAvLyBpZiBubyBsYWJlbCwgcmV0dXJuXG4gICAgaWYgKHRoaXMuZWxlbWVudE9wdGlvbnMubGFiZWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG4gICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byByZW5kZXIgdGhlIGxhYmVsXG4gICAgbGV0IHZpZXdGb250U2l6ZSA9IHRoaXMuZm9udE9wdGlvbnMuc2l6ZSAqIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZWxlbWVudE9wdGlvbnMubGFiZWwgJiZcbiAgICAgIHZpZXdGb250U2l6ZSA8IHRoaXMuZWxlbWVudE9wdGlvbnMuc2NhbGluZy5sYWJlbC5kcmF3VGhyZXNob2xkIC0gMVxuICAgIClcbiAgICAgIHJldHVybjtcblxuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZXJlIHdpbGwgbm90IGJlIEhVR0UgbGV0dGVycyBvbiBzY3JlZW5cbiAgICAvLyBieSBzZXR0aW5nIGFuIHVwcGVyIGxpbWl0IG9uIHRoZSB2aXNpYmxlIHRleHQgc2l6ZSAocmVnYXJkbGVzcyBvZiB6b29tTGV2ZWwpXG4gICAgaWYgKHZpZXdGb250U2l6ZSA+PSB0aGlzLmVsZW1lbnRPcHRpb25zLnNjYWxpbmcubGFiZWwubWF4VmlzaWJsZSkge1xuICAgICAgdmlld0ZvbnRTaXplID1cbiAgICAgICAgTnVtYmVyKHRoaXMuZWxlbWVudE9wdGlvbnMuc2NhbGluZy5sYWJlbC5tYXhWaXNpYmxlKSAvXG4gICAgICAgIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSB0aGUgc2l6ZSBjYWNoZSBpZiByZXF1aXJlZFxuICAgIHRoaXMuY2FsY3VsYXRlTGFiZWxTaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyLCB4LCB5LCBiYXNlbGluZSk7XG4gICAgdGhpcy5fZHJhd0JhY2tncm91bmQoY3R4KTtcbiAgICB0aGlzLl9kcmF3VGV4dChjdHgsIHgsIHRoaXMuc2l6ZS55TGluZSwgYmFzZWxpbmUsIHZpZXdGb250U2l6ZSk7XG4gIH1cblxuICAvKipcbiAgICogRHJhd3MgdGhlIGxhYmVsIGJhY2tncm91bmRcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdCYWNrZ3JvdW5kKGN0eCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9udE9wdGlvbnMuYmFja2dyb3VuZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmZvbnRPcHRpb25zLmJhY2tncm91bmQgIT09IFwibm9uZVwiXG4gICAgKSB7XG4gICAgICBjdHguZmlsbFN0eWxlID0gdGhpcy5mb250T3B0aW9ucy5iYWNrZ3JvdW5kO1xuICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuICAgICAgY3R4LmZpbGxSZWN0KHNpemUubGVmdCwgc2l6ZS50b3AsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Jhc2VsaW5lPSdtaWRkbGUnXVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmlld0ZvbnRTaXplXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd1RleHQoY3R4LCB4LCB5LCBiYXNlbGluZSA9IFwibWlkZGxlXCIsIHZpZXdGb250U2l6ZSkge1xuICAgIFt4LCB5XSA9IHRoaXMuX3NldEFsaWdubWVudChjdHgsIHgsIHksIGJhc2VsaW5lKTtcblxuICAgIGN0eC50ZXh0QWxpZ24gPSBcImxlZnRcIjtcbiAgICB4ID0geCAtIHRoaXMuc2l6ZS53aWR0aCAvIDI7IC8vIFNoaWZ0IGxhYmVsIDEvMi1kaXN0YW5jZSB0byB0aGUgbGVmdFxuICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLnZhbGlnbiAmJiB0aGlzLnNpemUuaGVpZ2h0ID4gdGhpcy5zaXplLmxhYmVsSGVpZ2h0KSB7XG4gICAgICBpZiAodGhpcy5mb250T3B0aW9ucy52YWxpZ24gPT09IFwidG9wXCIpIHtcbiAgICAgICAgeSAtPSAodGhpcy5zaXplLmhlaWdodCAtIHRoaXMuc2l6ZS5sYWJlbEhlaWdodCkgLyAyO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZm9udE9wdGlvbnMudmFsaWduID09PSBcImJvdHRvbVwiKSB7XG4gICAgICAgIHkgKz0gKHRoaXMuc2l6ZS5oZWlnaHQgLSB0aGlzLnNpemUubGFiZWxIZWlnaHQpIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkcmF3IHRoZSB0ZXh0XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1tpXTtcbiAgICAgIGlmIChsaW5lICYmIGxpbmUuYmxvY2tzKSB7XG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgIGlmICh0aGlzLmlzRWRnZUxhYmVsIHx8IHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwiY2VudGVyXCIpIHtcbiAgICAgICAgICB3aWR0aCArPSAodGhpcy5zaXplLndpZHRoIC0gbGluZS53aWR0aCkgLyAyO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwicmlnaHRcIikge1xuICAgICAgICAgIHdpZHRoICs9IHRoaXMuc2l6ZS53aWR0aCAtIGxpbmUud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lLmJsb2Nrcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGNvbnN0IGJsb2NrID0gbGluZS5ibG9ja3Nbal07XG4gICAgICAgICAgY3R4LmZvbnQgPSBibG9jay5mb250O1xuICAgICAgICAgIGNvbnN0IFtmb250Q29sb3IsIHN0cm9rZUNvbG9yXSA9IHRoaXMuX2dldENvbG9yKFxuICAgICAgICAgICAgYmxvY2suY29sb3IsXG4gICAgICAgICAgICB2aWV3Rm9udFNpemUsXG4gICAgICAgICAgICBibG9jay5zdHJva2VDb2xvclxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGJsb2NrLnN0cm9rZVdpZHRoID4gMCkge1xuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGJsb2NrLnN0cm9rZVdpZHRoO1xuICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlQ29sb3I7XG4gICAgICAgICAgICBjdHgubGluZUpvaW4gPSBcInJvdW5kXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBmb250Q29sb3I7XG5cbiAgICAgICAgICBpZiAoYmxvY2suc3Ryb2tlV2lkdGggPiAwKSB7XG4gICAgICAgICAgICBjdHguc3Ryb2tlVGV4dChibG9jay50ZXh0LCB4ICsgd2lkdGgsIHkgKyBibG9jay52YWRqdXN0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3R4LmZpbGxUZXh0KGJsb2NrLnRleHQsIHggKyB3aWR0aCwgeSArIGJsb2NrLnZhZGp1c3QpO1xuICAgICAgICAgIHdpZHRoICs9IGJsb2NrLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHkgKz0gbGluZS5oZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VsaW5lXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRBbGlnbm1lbnQoY3R4LCB4LCB5LCBiYXNlbGluZSkge1xuICAgIC8vIGNoZWNrIGZvciBsYWJlbCBhbGlnbm1lbnQgKGZvciBlZGdlcylcbiAgICAvLyBUT0RPOiBtYWtlIGFsaWdubWVudCBmb3Igbm9kZXNcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzRWRnZUxhYmVsICYmXG4gICAgICB0aGlzLmZvbnRPcHRpb25zLmFsaWduICE9PSBcImhvcml6b250YWxcIiAmJlxuICAgICAgdGhpcy5wb2ludFRvU2VsZiA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIHggPSAwO1xuICAgICAgeSA9IDA7XG5cbiAgICAgIGNvbnN0IGxpbmVNYXJnaW4gPSAyO1xuICAgICAgaWYgKHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwidG9wXCIpIHtcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9IFwiYWxwaGFiZXRpY1wiO1xuICAgICAgICB5IC09IDIgKiBsaW5lTWFyZ2luOyAvLyBkaXN0YW5jZSBmcm9tIGVkZ2UsIHJlcXVpcmVkIGJlY2F1c2Ugd2UgdXNlIGFscGhhYmV0aWMuIEFscGhhYmV0aWMgaGFzIGxlc3MgZGlmZmVyZW5jZSBiZXR3ZWVuIGJyb3dzZXJzXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwiYm90dG9tXCIpIHtcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9IFwiaGFuZ2luZ1wiO1xuICAgICAgICB5ICs9IDIgKiBsaW5lTWFyZ2luOyAvLyBkaXN0YW5jZSBmcm9tIGVkZ2UsIHJlcXVpcmVkIGJlY2F1c2Ugd2UgdXNlIGhhbmdpbmcuIEhhbmdpbmcgaGFzIGxlc3MgZGlmZmVyZW5jZSBiZXR3ZWVuIGJyb3dzZXJzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY3R4LnRleHRCYXNlbGluZSA9IGJhc2VsaW5lO1xuICAgIH1cbiAgICByZXR1cm4gW3gsIHldO1xuICB9XG5cbiAgLyoqXG4gICAqIGZhZGUgaW4gd2hlbiByZWxhdGl2ZSBzY2FsZSBpcyBiZXR3ZWVuIHRocmVzaG9sZCBhbmQgdGhyZXNob2xkIC0gMS5cbiAgICogSWYgdGhlIHJlbGF0aXZlIHNjYWxlIHdvdWxkIGJlIHNtYWxsZXIgdGhhbiB0aHJlc2hvbGQgLTEgdGhlIGRyYXcgZnVuY3Rpb24gd291bGQgaGF2ZSByZXR1cm5lZCBiZWZvcmUgY29taW5nIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAgVGhlIGZvbnQgY29sb3IgdG8gdXNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2aWV3Rm9udFNpemVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGluaXRpYWxTdHJva2VDb2xvclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGZvbnQgY29sb3IgYW5kIHN0cm9rZSBjb2xvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldENvbG9yKGNvbG9yLCB2aWV3Rm9udFNpemUsIGluaXRpYWxTdHJva2VDb2xvcikge1xuICAgIGxldCBmb250Q29sb3IgPSBjb2xvciB8fCBcIiMwMDAwMDBcIjtcbiAgICBsZXQgc3Ryb2tlQ29sb3IgPSBpbml0aWFsU3Ryb2tlQ29sb3IgfHwgXCIjZmZmZmZmXCI7XG4gICAgaWYgKHZpZXdGb250U2l6ZSA8PSB0aGlzLmVsZW1lbnRPcHRpb25zLnNjYWxpbmcubGFiZWwuZHJhd1RocmVzaG9sZCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IE1hdGgubWF4KFxuICAgICAgICAwLFxuICAgICAgICBNYXRoLm1pbihcbiAgICAgICAgICAxLFxuICAgICAgICAgIDEgLSAodGhpcy5lbGVtZW50T3B0aW9ucy5zY2FsaW5nLmxhYmVsLmRyYXdUaHJlc2hvbGQgLSB2aWV3Rm9udFNpemUpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBmb250Q29sb3IgPSBvdmVycmlkZU9wYWNpdHkoZm9udENvbG9yLCBvcGFjaXR5KTtcbiAgICAgIHN0cm9rZUNvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KHN0cm9rZUNvbG9yLCBvcGFjaXR5KTtcbiAgICB9XG4gICAgcmV0dXJuIFtmb250Q29sb3IsIHN0cm9rZUNvbG9yXTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcmV0dXJucyB7e3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyfX1cbiAgICovXG4gIGdldFRleHRTaXplKGN0eCwgc2VsZWN0ZWQgPSBmYWxzZSwgaG92ZXIgPSBmYWxzZSkge1xuICAgIHRoaXMuX3Byb2Nlc3NMYWJlbChjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB0aGlzLnNpemUud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuc2l6ZS5oZWlnaHQsXG4gICAgICBsaW5lQ291bnQ6IHRoaXMubGluZUNvdW50LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGRpbWVuc2lvbnMgb2YgdGhlIGxhYmVsXG4gICAqXG4gICAqIEByZXR1cm5zIHtyZWN0fVxuICAgKi9cbiAgZ2V0U2l6ZSgpIHtcbiAgICBjb25zdCBsaW5lTWFyZ2luID0gMjtcbiAgICBsZXQgeCA9IHRoaXMuc2l6ZS5sZWZ0OyAvLyBkZWZhdWx0IHZhbHVlcyB3aGljaCBtaWdodCBiZSBvdmVycmlkZGVuIGJlbG93XG4gICAgbGV0IHkgPSB0aGlzLnNpemUudG9wIC0gMC41ICogbGluZU1hcmdpbjsgLy8gaWRlbVxuXG4gICAgaWYgKHRoaXMuaXNFZGdlTGFiZWwpIHtcbiAgICAgIGNvbnN0IHgyID0gLXRoaXMuc2l6ZS53aWR0aCAqIDAuNTtcblxuICAgICAgc3dpdGNoICh0aGlzLmZvbnRPcHRpb25zLmFsaWduKSB7XG4gICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcbiAgICAgICAgICB4ID0geDI7XG4gICAgICAgICAgeSA9IC10aGlzLnNpemUuaGVpZ2h0ICogMC41O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidG9wXCI6XG4gICAgICAgICAgeCA9IHgyO1xuICAgICAgICAgIHkgPSAtKHRoaXMuc2l6ZS5oZWlnaHQgKyBsaW5lTWFyZ2luKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxuICAgICAgICAgIHggPSB4MjtcbiAgICAgICAgICB5ID0gbGluZU1hcmdpbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSB7XG4gICAgICBsZWZ0OiB4LFxuICAgICAgdG9wOiB5LFxuICAgICAgd2lkdGg6IHRoaXMuc2l6ZS53aWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5zaXplLmhlaWdodCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MF1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdXG4gICAqIEBwYXJhbSB7J21pZGRsZSd8J2hhbmdpbmcnfSBbYmFzZWxpbmU9J21pZGRsZSddXG4gICAqL1xuICBjYWxjdWxhdGVMYWJlbFNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIsIHggPSAwLCB5ID0gMCwgYmFzZWxpbmUgPSBcIm1pZGRsZVwiKSB7XG4gICAgdGhpcy5fcHJvY2Vzc0xhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLnNpemUubGVmdCA9IHggLSB0aGlzLnNpemUud2lkdGggKiAwLjU7XG4gICAgdGhpcy5zaXplLnRvcCA9IHkgLSB0aGlzLnNpemUuaGVpZ2h0ICogMC41O1xuICAgIHRoaXMuc2l6ZS55TGluZSA9IHkgKyAoMSAtIHRoaXMubGluZUNvdW50KSAqIDAuNSAqIHRoaXMuZm9udE9wdGlvbnMuc2l6ZTtcbiAgICBpZiAoYmFzZWxpbmUgPT09IFwiaGFuZ2luZ1wiKSB7XG4gICAgICB0aGlzLnNpemUudG9wICs9IDAuNSAqIHRoaXMuZm9udE9wdGlvbnMuc2l6ZTtcbiAgICAgIHRoaXMuc2l6ZS50b3AgKz0gNDsgLy8gZGlzdGFuY2UgZnJvbSBub2RlLCByZXF1aXJlZCBiZWNhdXNlIHdlIHVzZSBoYW5naW5nLiBIYW5naW5nIGhhcyBsZXNzIGRpZmZlcmVuY2UgYmV0d2VlbiBicm93c2Vyc1xuICAgICAgdGhpcy5zaXplLnlMaW5lICs9IDQ7IC8vIGRpc3RhbmNlIGZyb20gbm9kZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kXG4gICAqIEByZXR1cm5zIHt7Y29sb3IsIHNpemUsIGZhY2UsIG1vZCwgdmFkanVzdCwgc3Ryb2tlV2lkdGg6ICosIHN0cm9rZUNvbG9yOiAoKnxzdHJpbmd8YWxsT3B0aW9ucy5lZGdlcy5mb250LnN0cm9rZUNvbG9yfHtzdHJpbmd9fGFsbE9wdGlvbnMubm9kZXMuZm9udC5zdHJva2VDb2xvcnxBcnJheSl9fVxuICAgKi9cbiAgZ2V0Rm9ybWF0dGluZ1ZhbHVlcyhjdHgsIHNlbGVjdGVkLCBob3ZlciwgbW9kKSB7XG4gICAgY29uc3QgZ2V0VmFsdWUgPSBmdW5jdGlvbiAoZm9udE9wdGlvbnMsIG1vZCwgb3B0aW9uKSB7XG4gICAgICBpZiAobW9kID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgIGlmIChvcHRpb24gPT09IFwibW9kXCIpIHJldHVybiBcIlwiO1xuICAgICAgICByZXR1cm4gZm9udE9wdGlvbnNbb3B0aW9uXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvbnRPcHRpb25zW21vZF1bb3B0aW9uXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIEdydW1ibCBsZWF2aW5nIG91dCB0ZXN0IG9uIHVuZGVmaW5lZCBlcXVhbHMgZmFsc2UgZm9yIFwiXCJcbiAgICAgICAgcmV0dXJuIGZvbnRPcHRpb25zW21vZF1bb3B0aW9uXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRha2UgZnJvbSBwYXJlbnQgZm9udCBvcHRpb25cbiAgICAgICAgcmV0dXJuIGZvbnRPcHRpb25zW29wdGlvbl07XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbHVlcyA9IHtcbiAgICAgIGNvbG9yOiBnZXRWYWx1ZSh0aGlzLmZvbnRPcHRpb25zLCBtb2QsIFwiY29sb3JcIiksXG4gICAgICBzaXplOiBnZXRWYWx1ZSh0aGlzLmZvbnRPcHRpb25zLCBtb2QsIFwic2l6ZVwiKSxcbiAgICAgIGZhY2U6IGdldFZhbHVlKHRoaXMuZm9udE9wdGlvbnMsIG1vZCwgXCJmYWNlXCIpLFxuICAgICAgbW9kOiBnZXRWYWx1ZSh0aGlzLmZvbnRPcHRpb25zLCBtb2QsIFwibW9kXCIpLFxuICAgICAgdmFkanVzdDogZ2V0VmFsdWUodGhpcy5mb250T3B0aW9ucywgbW9kLCBcInZhZGp1c3RcIiksXG4gICAgICBzdHJva2VXaWR0aDogdGhpcy5mb250T3B0aW9ucy5zdHJva2VXaWR0aCxcbiAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLmZvbnRPcHRpb25zLnN0cm9rZUNvbG9yLFxuICAgIH07XG4gICAgaWYgKHNlbGVjdGVkIHx8IGhvdmVyKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG1vZCA9PT0gXCJub3JtYWxcIiAmJlxuICAgICAgICB0aGlzLmZvbnRPcHRpb25zLmNob29zZXIgPT09IHRydWUgJiZcbiAgICAgICAgdGhpcy5lbGVtZW50T3B0aW9ucy5sYWJlbEhpZ2hsaWdodEJvbGRcbiAgICAgICkge1xuICAgICAgICB2YWx1ZXMubW9kID0gXCJib2xkXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZm9udE9wdGlvbnMuY2hvb3NlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgdGhpcy5mb250T3B0aW9ucy5jaG9vc2VyKFxuICAgICAgICAgICAgdmFsdWVzLFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50T3B0aW9ucy5pZCxcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgaG92ZXJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZvbnRTdHJpbmcgPSBcIlwiO1xuICAgIGlmICh2YWx1ZXMubW9kICE9PSB1bmRlZmluZWQgJiYgdmFsdWVzLm1vZCAhPT0gXCJcIikge1xuICAgICAgLy8gc2FmZWd1YXJkIGZvciB1bmRlZmluZWQgLSB0aGlzIGhhcHBlbmVkXG4gICAgICBmb250U3RyaW5nICs9IHZhbHVlcy5tb2QgKyBcIiBcIjtcbiAgICB9XG4gICAgZm9udFN0cmluZyArPSB2YWx1ZXMuc2l6ZSArIFwicHggXCIgKyB2YWx1ZXMuZmFjZTtcblxuICAgIGN0eC5mb250ID0gZm9udFN0cmluZy5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICB2YWx1ZXMuZm9udCA9IGN0eC5mb250O1xuICAgIHZhbHVlcy5oZWlnaHQgPSB2YWx1ZXMuc2l6ZTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGRpZmZlcmVudFN0YXRlKHNlbGVjdGVkLCBob3Zlcikge1xuICAgIHJldHVybiBzZWxlY3RlZCAhPT0gdGhpcy5zZWxlY3RlZFN0YXRlIHx8IGhvdmVyICE9PSB0aGlzLmhvdmVyU3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBleHBsb2RlcyB0aGUgcGFzc2VkIHRleHQgaW50byBsaW5lcyBhbmQgZGV0ZXJtaW5lcyB0aGUgd2lkdGgsIGhlaWdodCBhbmQgbnVtYmVyIG9mIGxpbmVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaW5UZXh0ICB0aGUgdGV4dCB0byBleHBsb2RlXG4gICAqIEByZXR1cm5zIHt7d2lkdGgsIGhlaWdodCwgbGluZXN9fCp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHJvY2Vzc0xhYmVsVGV4dChjdHgsIHNlbGVjdGVkLCBob3ZlciwgaW5UZXh0KSB7XG4gICAgY29uc3Qgc3BsaXR0ZXIgPSBuZXcgTGFiZWxTcGxpdHRlcihjdHgsIHRoaXMsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgcmV0dXJuIHNwbGl0dGVyLnByb2Nlc3MoaW5UZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGV4cGxvZGVzIHRoZSBsYWJlbCBzdHJpbmcgaW50byBsaW5lcyBhbmQgc2V0cyB0aGUgd2lkdGgsIGhlaWdodCBhbmQgbnVtYmVyIG9mIGxpbmVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Byb2Nlc3NMYWJlbChjdHgsIHNlbGVjdGVkLCBob3Zlcikge1xuICAgIGlmICh0aGlzLmxhYmVsRGlydHkgPT09IGZhbHNlICYmICF0aGlzLmRpZmZlcmVudFN0YXRlKHNlbGVjdGVkLCBob3ZlcikpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3Byb2Nlc3NMYWJlbFRleHQoXG4gICAgICBjdHgsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyLFxuICAgICAgdGhpcy5lbGVtZW50T3B0aW9ucy5sYWJlbFxuICAgICk7XG5cbiAgICBpZiAodGhpcy5mb250T3B0aW9ucy5taW5XZHQgPiAwICYmIHN0YXRlLndpZHRoIDwgdGhpcy5mb250T3B0aW9ucy5taW5XZHQpIHtcbiAgICAgIHN0YXRlLndpZHRoID0gdGhpcy5mb250T3B0aW9ucy5taW5XZHQ7XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLmxhYmVsSGVpZ2h0ID0gc3RhdGUuaGVpZ2h0O1xuICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLm1pbkhndCA+IDAgJiYgc3RhdGUuaGVpZ2h0IDwgdGhpcy5mb250T3B0aW9ucy5taW5IZ3QpIHtcbiAgICAgIHN0YXRlLmhlaWdodCA9IHRoaXMuZm9udE9wdGlvbnMubWluSGd0O1xuICAgIH1cblxuICAgIHRoaXMubGluZXMgPSBzdGF0ZS5saW5lcztcbiAgICB0aGlzLmxpbmVDb3VudCA9IHN0YXRlLmxpbmVzLmxlbmd0aDtcbiAgICB0aGlzLnNpemUud2lkdGggPSBzdGF0ZS53aWR0aDtcbiAgICB0aGlzLnNpemUuaGVpZ2h0ID0gc3RhdGUuaGVpZ2h0O1xuICAgIHRoaXMuc2VsZWN0ZWRTdGF0ZSA9IHNlbGVjdGVkO1xuICAgIHRoaXMuaG92ZXJTdGF0ZSA9IGhvdmVyO1xuXG4gICAgdGhpcy5sYWJlbERpcnR5ID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBsYWJlbCBpcyB2aXNpYmxlXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoaXMgbGFiZWwgd2lsbCBiZSBzaG93LCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHZpc2libGUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zaXplLndpZHRoID09PSAwIHx8XG4gICAgICB0aGlzLnNpemUuaGVpZ2h0ID09PSAwIHx8XG4gICAgICB0aGlzLmVsZW1lbnRPcHRpb25zLmxhYmVsID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gbm90aGluZyB0byBkaXNwbGF5XG4gICAgfVxuXG4gICAgY29uc3Qgdmlld0ZvbnRTaXplID0gdGhpcy5mb250T3B0aW9ucy5zaXplICogdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgaWYgKHZpZXdGb250U2l6ZSA8IHRoaXMuZWxlbWVudE9wdGlvbnMuc2NhbGluZy5sYWJlbC5kcmF3VGhyZXNob2xkIC0gMSkge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUb28gc21hbGwgb3IgdG9vIGZhciBhd2F5IHRvIHNob3dcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYWJlbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ29uc3RydWN0b3IoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBuYXRpdmVDb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbi8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3QuY29uc3RydWN0XG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShuYXRpdmVDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xuXG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBuYXRpdmVDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG52YXIgRk9SQ0VEID0gTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUc7XG5cbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06IEZPUkNFRCB9LCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFDb25zdHJ1Y3RvcihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFDb25zdHJ1Y3Rvcihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiBuYXRpdmVDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgIGFwcGx5KHB1c2gsICRhcmdzLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGFwcGx5KGJpbmQsIFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdFByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IGFwcGx5KFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC5jb25zdHJ1Y3QnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlJlZmxlY3QuY29uc3RydWN0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIHNldFByb3RvdHlwZU9mOiBzZXRQcm90b3R5cGVPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfc2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRzZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkY3JlYXRlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgImltcG9ydCBfT2JqZWN0JHNldFByb3RvdHlwZU9mIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanNcIjtcbmltcG9ydCBfYmluZEluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9iaW5kLmpzXCI7XG5pbXBvcnQgX09iamVjdCRnZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICB2YXIgX2NvbnRleHQ7XG4gIF9nZXRQcm90b3R5cGVPZiA9IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPyBfYmluZEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBfT2JqZWN0JGdldFByb3RvdHlwZU9mKS5jYWxsKF9jb250ZXh0KSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IF9PYmplY3QkZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59IiwgIi8qKlxuICogVGhlIEJhc2UgY2xhc3MgZm9yIGFsbCBOb2Rlcy5cbiAqL1xuY2xhc3MgTm9kZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlID0gbGFiZWxNb2R1bGU7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIHRoaXMudG9wID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubGVmdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLndpZHRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmFkaXVzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubWFyZ2luID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVmcmVzaE5lZWRlZCA9IHRydWU7XG4gICAgdGhpcy5ib3VuZGluZ0JveCA9IHsgdG9wOiAwLCBsZWZ0OiAwLCByaWdodDogMCwgYm90dG9tOiAwIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKSB7XG4gICAgdGhpcy5tYXJnaW4gPSB7fTtcbiAgICBpZiAodGhpcy5vcHRpb25zLm1hcmdpbikge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMubWFyZ2luID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhpcy5tYXJnaW4udG9wID0gdGhpcy5vcHRpb25zLm1hcmdpbi50b3A7XG4gICAgICAgIHRoaXMubWFyZ2luLnJpZ2h0ID0gdGhpcy5vcHRpb25zLm1hcmdpbi5yaWdodDtcbiAgICAgICAgdGhpcy5tYXJnaW4uYm90dG9tID0gdGhpcy5vcHRpb25zLm1hcmdpbi5ib3R0b207XG4gICAgICAgIHRoaXMubWFyZ2luLmxlZnQgPSB0aGlzLm9wdGlvbnMubWFyZ2luLmxlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1hcmdpbi50b3AgPSB0aGlzLm9wdGlvbnMubWFyZ2luO1xuICAgICAgICB0aGlzLm1hcmdpbi5yaWdodCA9IHRoaXMub3B0aW9ucy5tYXJnaW47XG4gICAgICAgIHRoaXMubWFyZ2luLmJvdHRvbSA9IHRoaXMub3B0aW9ucy5tYXJnaW47XG4gICAgICAgIHRoaXMubWFyZ2luLmxlZnQgPSB0aGlzLm9wdGlvbnMubWFyZ2luO1xuICAgICAgfVxuICAgIH1cbiAgICBsYWJlbE1vZHVsZS5hZGp1c3RTaXplcyh0aGlzLm1hcmdpbik7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICBjb25zdCBib3JkZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIE1hdGguYWJzKHRoaXMud2lkdGggLyAyIC8gTWF0aC5jb3MoYW5nbGUpKSxcbiAgICAgICAgTWF0aC5hYnModGhpcy5oZWlnaHQgLyAyIC8gTWF0aC5zaW4oYW5nbGUpKVxuICAgICAgKSArIGJvcmRlcldpZHRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcykge1xuICAgIGlmICh2YWx1ZXMuc2hhZG93KSB7XG4gICAgICBjdHguc2hhZG93Q29sb3IgPSB2YWx1ZXMuc2hhZG93Q29sb3I7XG4gICAgICBjdHguc2hhZG93Qmx1ciA9IHZhbHVlcy5zaGFkb3dTaXplO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFggPSB2YWx1ZXMuc2hhZG93WDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gdmFsdWVzLnNoYWRvd1k7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcykge1xuICAgIGlmICh2YWx1ZXMuc2hhZG93KSB7XG4gICAgICBjdHguc2hhZG93Q29sb3IgPSBcInJnYmEoMCwwLDAsMClcIjtcbiAgICAgIGN0eC5zaGFkb3dCbHVyID0gMDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRYID0gMDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBlbmFibGVCb3JkZXJEYXNoZXMoY3R4LCB2YWx1ZXMpIHtcbiAgICBpZiAodmFsdWVzLmJvcmRlckRhc2hlcyAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChjdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgZGFzaGVzID0gdmFsdWVzLmJvcmRlckRhc2hlcztcbiAgICAgICAgaWYgKGRhc2hlcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGRhc2hlcyA9IFs1LCAxNV07XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnNldExpbmVEYXNoKGRhc2hlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJzZXRMaW5lRGFzaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci4gVGhlIGRhc2hlZCBib3JkZXJzIGNhbm5vdCBiZSB1c2VkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyRGFzaGVzID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5ib3JkZXJEYXNoZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBkaXNhYmxlQm9yZGVyRGFzaGVzKGN0eCwgdmFsdWVzKSB7XG4gICAgaWYgKHZhbHVlcy5ib3JkZXJEYXNoZXMgIT09IGZhbHNlKSB7XG4gICAgICBpZiAoY3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3R4LnNldExpbmVEYXNoKFswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJzZXRMaW5lRGFzaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci4gVGhlIGRhc2hlZCBib3JkZXJzIGNhbm5vdCBiZSB1c2VkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyRGFzaGVzID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5ib3JkZXJEYXNoZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBzaGFwZSBvZiBhIG5vZGUgbmVlZHMgdG8gYmUgcmVjYWxjdWxhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIG5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAodGhpcy5yZWZyZXNoTmVlZGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IG5vdCB0aGUgYmVzdCBsb2NhdGlvbiB0byByZXNldCB0aGlzIG1lbWJlci5cbiAgICAgIC8vIEhvd2V2ZXIsIGluIHRoZSBjdXJyZW50IGxvZ2ljLCBpdCBpcyB0aGUgbW9zdCBjb252ZW5pZW50IG9uZS5cbiAgICAgIHRoaXMucmVmcmVzaE5lZWRlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMud2lkdGggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5kaWZmZXJlbnRTdGF0ZShzZWxlY3RlZCwgaG92ZXIpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcykge1xuICAgIGNvbnN0IGJvcmRlcldpZHRoID0gdmFsdWVzLmJvcmRlcldpZHRoIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG5cbiAgICBjdHgubGluZVdpZHRoID0gTWF0aC5taW4odGhpcy53aWR0aCwgYm9yZGVyV2lkdGgpO1xuICAgIGN0eC5zdHJva2VTdHlsZSA9IHZhbHVlcy5ib3JkZXJDb2xvcjtcbiAgICBjdHguZmlsbFN0eWxlID0gdmFsdWVzLmNvbG9yO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgcGVyZm9ybVN0cm9rZShjdHgsIHZhbHVlcykge1xuICAgIGNvbnN0IGJvcmRlcldpZHRoID0gdmFsdWVzLmJvcmRlcldpZHRoIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG5cbiAgICAvL2RyYXcgZGFzaGVkIGJvcmRlciBpZiBlbmFibGVkLCBzYXZlIGFuZCByZXN0b3JlIGlzIHJlcXVpcmVkIGZvciBmaXJlZm94IG5vdCB0byBjcmFzaCBvbiB1bml4LlxuICAgIGN0eC5zYXZlKCk7XG4gICAgLy8gaWYgYm9yZGVycyBhcmUgemVybyB3aWR0aCwgdGhleSB3aWxsIGJlIGRyYXduIHdpdGggd2lkdGggMSBieSBkZWZhdWx0LiBUaGlzIHByZXZlbnRzIHRoYXRcbiAgICBpZiAoYm9yZGVyV2lkdGggPiAwKSB7XG4gICAgICB0aGlzLmVuYWJsZUJvcmRlckRhc2hlcyhjdHgsIHZhbHVlcyk7XG4gICAgICAvL2RyYXcgdGhlIGJvcmRlclxuICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgLy9kaXNhYmxlIGRhc2hlZCBib3JkZXIgZm9yIG90aGVyIGVsZW1lbnRzXG4gICAgICB0aGlzLmRpc2FibGVCb3JkZXJEYXNoZXMoY3R4LCB2YWx1ZXMpO1xuICAgIH1cbiAgICBjdHgucmVzdG9yZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgcGVyZm9ybUZpbGwoY3R4LCB2YWx1ZXMpIHtcbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC5maWxsU3R5bGUgPSB2YWx1ZXMuY29sb3I7XG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICAvLyBkcmF3IHRoZSBiYWNrZ3JvdW5kXG4gICAgY3R4LmZpbGwoKTtcbiAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG5cbiAgICBjdHgucmVzdG9yZSgpO1xuICAgIHRoaXMucGVyZm9ybVN0cm9rZShjdHgsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1hcmdpblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZEJvdW5kaW5nQm94TWFyZ2luKG1hcmdpbikge1xuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCAtPSBtYXJnaW47XG4gICAgdGhpcy5ib3VuZGluZ0JveC50b3AgLT0gbWFyZ2luO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICs9IG1hcmdpbjtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ICs9IG1hcmdpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgY2FsbC5cbiAgICpcbiAgICogRG9pbmcgaXQgbGlrZSB0aGlzIG1ha2VzIGl0IGVhc2llciB0byBvdmVycmlkZVxuICAgKiBpbiB0aGUgY2hpbGQgY2xhc3Nlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlQm91bmRpbmdCb3goeCwgeSwgY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAoY3R4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0gdGhpcy5sZWZ0O1xuICAgIHRoaXMuYm91bmRpbmdCb3gudG9wID0gdGhpcy50b3A7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSB0aGlzLnRvcCArIHRoaXMuaGVpZ2h0O1xuICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB0aGlzLmxlZnQgKyB0aGlzLndpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgY2FsbC5cbiAgICogVGhpcyBhY3RzIGFzIGEgc3R1YiB3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcikge1xuICAgIHRoaXMuX3VwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGRpbWVuc2lvbnMgdG8gdXNlIGZvciBub2RlcyB3aXRoIGFuIGludGVybmFsIGxhYmVsXG4gICAqXG4gICAqIEN1cnJlbnRseSwgdGhlc2UgYXJlOiBDaXJjbGUsIEVsbGlwc2UsIERhdGFiYXNlLCBCb3hcbiAgICogVGhlIG90aGVyIG5vZGVzIGhhdmUgZXh0ZXJuYWwgbGFiZWxzLCBhbmQgd2lsbCBub3QgY2FsbCB0aGlzIG1ldGhvZFxuICAgKlxuICAgKiBJZiB0aGVyZSBpcyBubyBsYWJlbCwgZGVjZW50IGRlZmF1bHQgdmFsdWVzIGFyZSBzdXBwbGllZC5cbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqIEByZXR1cm5zIHt7d2lkdGg6bnVtYmVyLCBoZWlnaHQ6bnVtYmVyfX1cbiAgICovXG4gIGdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICAvLyBOT1RFOiBwcmV2aW91c2x5ICd0ZXh0U2l6ZScgd2FzIG5vdCBwdXQgaW4gJ3RoaXMnIGZvciBFbGxpcHNlXG4gICAgLy8gVE9ETzogZXhhbWluZSB0aGUgY29uc2VxdWVuY2VzLlxuICAgIHRoaXMudGV4dFNpemUgPSB0aGlzLmxhYmVsTW9kdWxlLmdldFRleHRTaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICBsZXQgd2lkdGggPSB0aGlzLnRleHRTaXplLndpZHRoO1xuICAgIGxldCBoZWlnaHQgPSB0aGlzLnRleHRTaXplLmhlaWdodDtcblxuICAgIGNvbnN0IERFRkFVTFRfU0laRSA9IDE0O1xuICAgIGlmICh3aWR0aCA9PT0gMCkge1xuICAgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gdGhlcmUgaXMgbm8gbGFiZWwgdGV4dCBzZXRcbiAgICAgIHdpZHRoID0gREVGQVVMVF9TSVpFOyAvLyB1c2UgYSBkZWNlbnQgZGVmYXVsdFxuICAgICAgaGVpZ2h0ID0gREVGQVVMVF9TSVpFOyAvLyBpZiB3aWR0aCB6ZXJvLCB0aGVuIGhlaWdodCBhbHNvIGFsd2F5cyB6ZXJvXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5vZGVCYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9kZUJhc2UgZnJvbSBcIi4uL3V0aWwvTm9kZUJhc2VcIjtcbmltcG9ydCB7IGRyYXdSb3VuZFJlY3QgfSBmcm9tIFwiLi4vdXRpbC9zaGFwZXNcIjtcblxuLyoqXG4gKiBBIEJveCBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIE5vZGVCYXNlXG4gKi9cbmNsYXNzIEJveCBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgICB0aGlzLl9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlbGVjdGVkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3Zlcl1cbiAgICovXG4gIHJlc2l6ZShjdHgsIHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZCwgaG92ZXIgPSB0aGlzLmhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgICB0aGlzLndpZHRoID0gZGltZW5zaW9ucy53aWR0aCArIHRoaXMubWFyZ2luLnJpZ2h0ICsgdGhpcy5tYXJnaW4ubGVmdDtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gZGltZW5zaW9ucy5oZWlnaHQgKyB0aGlzLm1hcmdpbi50b3AgKyB0aGlzLm1hcmdpbi5ib3R0b207XG4gICAgICB0aGlzLnJhZGl1cyA9IHRoaXMud2lkdGggLyAyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICB0aGlzLmluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcyk7XG4gICAgZHJhd1JvdW5kUmVjdChcbiAgICAgIGN0eCxcbiAgICAgIHRoaXMubGVmdCxcbiAgICAgIHRoaXMudG9wLFxuICAgICAgdGhpcy53aWR0aCxcbiAgICAgIHRoaXMuaGVpZ2h0LFxuICAgICAgdmFsdWVzLmJvcmRlclJhZGl1c1xuICAgICk7XG4gICAgdGhpcy5wZXJmb3JtRmlsbChjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoXG4gICAgICBjdHgsXG4gICAgICB0aGlzLmxlZnQgKyB0aGlzLnRleHRTaXplLndpZHRoIC8gMiArIHRoaXMubWFyZ2luLmxlZnQsXG4gICAgICB0aGlzLnRvcCArIHRoaXMudGV4dFNpemUuaGVpZ2h0IC8gMiArIHRoaXMubWFyZ2luLnRvcCxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgaG92ZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSwgY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICB0aGlzLl91cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG5cbiAgICBjb25zdCBib3JkZXJSYWRpdXMgPSB0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmJvcmRlclJhZGl1czsgLy8gb25seSBlZmZlY3RpdmUgZm9yIGJveFxuICAgIHRoaXMuX2FkZEJvdW5kaW5nQm94TWFyZ2luKGJvcmRlclJhZGl1cyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIGlmIChjdHgpIHtcbiAgICAgIHRoaXMucmVzaXplKGN0eCk7XG4gICAgfVxuICAgIGNvbnN0IGJvcmRlcldpZHRoID0gdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIE1hdGgubWluKFxuICAgICAgICBNYXRoLmFicyh0aGlzLndpZHRoIC8gMiAvIE1hdGguY29zKGFuZ2xlKSksXG4gICAgICAgIE1hdGguYWJzKHRoaXMuaGVpZ2h0IC8gMiAvIE1hdGguc2luKGFuZ2xlKSlcbiAgICAgICkgKyBib3JkZXJXaWR0aFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm94O1xuIiwgImltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi9Ob2RlQmFzZVwiO1xuaW1wb3J0IHsgZHJhd0NpcmNsZSB9IGZyb20gXCIuL3NoYXBlc1wiO1xuXG4vKipcbiAqIE5PVEU6IFRoaXMgaXMgYSBiYWQgYmFzZSBjbGFzc1xuICpcbiAqIENoaWxkIGNsYXNzZXMgYXJlOlxuICpcbiAqICAgSW1hZ2UgICAgICAgLSB1c2VzICpvbmx5KiBpbWFnZSBtZXRob2RzXG4gKiAgIENpcmNsZSAgICAgIC0gdXNlcyAqb25seSogX2RyYXdSYXdDaXJjbGVcbiAqICAgQ2lyY2xlSW1hZ2UgLSB1c2VzIGFsbFxuICpcbiAqIFRPRE86IFJlZmFjdG9yLCBtb3ZlIF9kcmF3UmF3Q2lyY2xlIHRvIGRpZmZlcmVudCBtb2R1bGUsIGRlcml2ZSBDaXJjbGUgZnJvbSBOb2RlQmFzZVxuICogICAgICAgUmVuYW1lIHRoaXMgdG8gSW1hZ2VCYXNlXG4gKiAgICAgICBDb25zb2xpZGF0ZSBjb21tb24gY29kZSBpbiBJbWFnZSBhbmQgQ2lyY2xlSW1hZ2UgdG8gYmFzZSBjbGFzc1xuICpcbiAqIEBhdWdtZW50cyBOb2RlQmFzZVxuICovXG5jbGFzcyBDaXJjbGVJbWFnZUJhc2UgZXh0ZW5kcyBOb2RlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gICAgdGhpcy5sYWJlbE9mZnNldCA9IDA7XG4gICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbaW1hZ2VPYmpdXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbaW1hZ2VPYmpBbHRdXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMsIGltYWdlT2JqLCBpbWFnZU9iakFsdCkge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAoIShpbWFnZU9iaiA9PT0gdW5kZWZpbmVkICYmIGltYWdlT2JqQWx0ID09PSB1bmRlZmluZWQpKSB7XG4gICAgICB0aGlzLnNldEltYWdlcyhpbWFnZU9iaiwgaW1hZ2VPYmpBbHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGltYWdlcyBmb3IgdGhpcyBub2RlLlxuICAgKlxuICAgKiBUaGUgaW1hZ2VzIGNhbiBiZSB1cGRhdGVkIGFmdGVyIHRoZSBpbml0aWFsIHNldHRpbmcgb2Ygb3B0aW9ucztcbiAgICogdGhlcmVmb3JlLCB0aGlzIG1ldGhvZCBuZWVkcyB0byBiZSByZWVudHJhbnQuXG4gICAqXG4gICAqIEZvciBjb3JyZWN0IHdvcmtpbmcgaW4gZXJyb3IgY2FzZXMsIGl0IGlzIG5lY2Vzc2FyeSB0byBwcm9wZXJseSBzZXRcbiAgICogZmllbGQgJ25vZGVzLmJyb2tlbkltYWdlJyBpbiB0aGUgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtJbWFnZX0gaW1hZ2VPYmogIHJlcXVpcmVkOyBtYWluIGltYWdlIHRvIHNob3cgZm9yIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge0ltYWdlfHVuZGVmaW5lZH0gaW1hZ2VPYmpBbHQgb3B0aW9uYWw7IGltYWdlIHRvIHNob3cgd2hlbiBub2RlIGlzIHNlbGVjdGVkXG4gICAqL1xuICBzZXRJbWFnZXMoaW1hZ2VPYmosIGltYWdlT2JqQWx0KSB7XG4gICAgaWYgKGltYWdlT2JqQWx0ICYmIHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuaW1hZ2VPYmogPSBpbWFnZU9iakFsdDtcbiAgICAgIHRoaXMuaW1hZ2VPYmpBbHQgPSBpbWFnZU9iajtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbWFnZU9iaiA9IGltYWdlT2JqO1xuICAgICAgdGhpcy5pbWFnZU9iakFsdCA9IGltYWdlT2JqQWx0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgc2VsZWN0aW9uIGFuZCBzd2l0Y2ggYmV0d2VlbiB0aGUgYmFzZSBhbmQgdGhlIHNlbGVjdGVkIGltYWdlLlxuICAgKlxuICAgKiBEbyB0aGUgc3dpdGNoIG9ubHkgaWYgaW1hZ2VPYmpBbHQgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkIHZhbHVlIG9mIG5ldyBzZWxlY3RlZCBzdGF0ZSBmb3IgY3VycmVudCBub2RlXG4gICAqL1xuICBzd2l0Y2hJbWFnZXMoc2VsZWN0ZWQpIHtcbiAgICBjb25zdCBzZWxlY3Rpb25fY2hhbmdlZCA9XG4gICAgICAoc2VsZWN0ZWQgJiYgIXRoaXMuc2VsZWN0ZWQpIHx8ICghc2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3RlZCk7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkOyAvLyBSZW1lbWJlciBuZXcgc2VsZWN0aW9uXG5cbiAgICBpZiAodGhpcy5pbWFnZU9iakFsdCAhPT0gdW5kZWZpbmVkICYmIHNlbGVjdGlvbl9jaGFuZ2VkKSB7XG4gICAgICBjb25zdCBpbWFnZVRtcCA9IHRoaXMuaW1hZ2VPYmo7XG4gICAgICB0aGlzLmltYWdlT2JqID0gdGhpcy5pbWFnZU9iakFsdDtcbiAgICAgIHRoaXMuaW1hZ2VPYmpBbHQgPSBpbWFnZVRtcDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBJbWFnZSBQYWRkaW5nIGZyb20gbm9kZSBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsbGVmdDogbnVtYmVyLGJvdHRvbTogbnVtYmVyLHJpZ2h0OiBudW1iZXJ9fSBpbWFnZSBwYWRkaW5nIGluc2lkZSB0aGlzIHNoYXBlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0SW1hZ2VQYWRkaW5nKCkge1xuICAgIGNvbnN0IGltZ1BhZGRpbmcgPSB7IHRvcDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCwgbGVmdDogMCB9O1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaW1hZ2VQYWRkaW5nKSB7XG4gICAgICBjb25zdCBvcHRJbWdQYWRkaW5nID0gdGhpcy5vcHRpb25zLmltYWdlUGFkZGluZztcbiAgICAgIGlmICh0eXBlb2Ygb3B0SW1nUGFkZGluZyA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGltZ1BhZGRpbmcudG9wID0gb3B0SW1nUGFkZGluZy50b3A7XG4gICAgICAgIGltZ1BhZGRpbmcucmlnaHQgPSBvcHRJbWdQYWRkaW5nLnJpZ2h0O1xuICAgICAgICBpbWdQYWRkaW5nLmJvdHRvbSA9IG9wdEltZ1BhZGRpbmcuYm90dG9tO1xuICAgICAgICBpbWdQYWRkaW5nLmxlZnQgPSBvcHRJbWdQYWRkaW5nLmxlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbWdQYWRkaW5nLnRvcCA9IG9wdEltZ1BhZGRpbmc7XG4gICAgICAgIGltZ1BhZGRpbmcucmlnaHQgPSBvcHRJbWdQYWRkaW5nO1xuICAgICAgICBpbWdQYWRkaW5nLmJvdHRvbSA9IG9wdEltZ1BhZGRpbmc7XG4gICAgICAgIGltZ1BhZGRpbmcubGVmdCA9IG9wdEltZ1BhZGRpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGltZ1BhZGRpbmc7XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0IHRoZSBub2RlIGRpbWVuc2lvbnMgZm9yIGEgbG9hZGVkIGltYWdlLlxuICAgKlxuICAgKiBQcmU6IHRoaXMuaW1hZ2VPYmogaXMgdmFsaWRcbiAgICovXG4gIF9yZXNpemVJbWFnZSgpIHtcbiAgICBsZXQgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLnVzZUltYWdlU2l6ZSA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIFVzZSB0aGUgc2l6ZSBwcm9wZXJ0eVxuICAgICAgbGV0IHJhdGlvX3dpZHRoID0gMTtcbiAgICAgIGxldCByYXRpb19oZWlnaHQgPSAxO1xuXG4gICAgICAvLyBPbmx5IGNhbGN1bGF0ZSB0aGUgcHJvcGVyIHJhdGlvIGlmIGJvdGggd2lkdGggYW5kIGhlaWdodCBub3QgemVyb1xuICAgICAgaWYgKHRoaXMuaW1hZ2VPYmoud2lkdGggJiYgdGhpcy5pbWFnZU9iai5oZWlnaHQpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VPYmoud2lkdGggPiB0aGlzLmltYWdlT2JqLmhlaWdodCkge1xuICAgICAgICAgIHJhdGlvX3dpZHRoID0gdGhpcy5pbWFnZU9iai53aWR0aCAvIHRoaXMuaW1hZ2VPYmouaGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJhdGlvX2hlaWdodCA9IHRoaXMuaW1hZ2VPYmouaGVpZ2h0IC8gdGhpcy5pbWFnZU9iai53aWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3aWR0aCA9IHRoaXMub3B0aW9ucy5zaXplICogMiAqIHJhdGlvX3dpZHRoO1xuICAgICAgaGVpZ2h0ID0gdGhpcy5vcHRpb25zLnNpemUgKiAyICogcmF0aW9faGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVc2UgdGhlIGltYWdlIHNpemUgd2l0aCBpbWFnZSBwYWRkaW5nXG4gICAgICBjb25zdCBpbWdQYWRkaW5nID0gdGhpcy5fZ2V0SW1hZ2VQYWRkaW5nKCk7XG4gICAgICB3aWR0aCA9IHRoaXMuaW1hZ2VPYmoud2lkdGggKyBpbWdQYWRkaW5nLmxlZnQgKyBpbWdQYWRkaW5nLnJpZ2h0O1xuICAgICAgaGVpZ2h0ID0gdGhpcy5pbWFnZU9iai5oZWlnaHQgKyBpbWdQYWRkaW5nLnRvcCArIGltZ1BhZGRpbmcuYm90dG9tO1xuICAgIH1cblxuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICB0aGlzLnJhZGl1cyA9IDAuNSAqIHRoaXMud2lkdGg7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdSYXdDaXJjbGUoY3R4LCB4LCB5LCB2YWx1ZXMpIHtcbiAgICB0aGlzLmluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcyk7XG4gICAgZHJhd0NpcmNsZShjdHgsIHgsIHksIHZhbHVlcy5zaXplKTtcbiAgICB0aGlzLnBlcmZvcm1GaWxsKGN0eCwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3SW1hZ2VBdFBvc2l0aW9uKGN0eCwgdmFsdWVzKSB7XG4gICAgaWYgKHRoaXMuaW1hZ2VPYmoud2lkdGggIT0gMCkge1xuICAgICAgLy8gZHJhdyB0aGUgaW1hZ2VcbiAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IHZhbHVlcy5vcGFjaXR5ICE9PSB1bmRlZmluZWQgPyB2YWx1ZXMub3BhY2l0eSA6IDE7XG5cbiAgICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcblxuICAgICAgbGV0IGZhY3RvciA9IDE7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5pbnRlcnBvbGF0aW9uID09PSB0cnVlKSB7XG4gICAgICAgIGZhY3RvciA9IHRoaXMuaW1hZ2VPYmoud2lkdGggLyB0aGlzLndpZHRoIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGltZ1BhZGRpbmcgPSB0aGlzLl9nZXRJbWFnZVBhZGRpbmcoKTtcblxuICAgICAgY29uc3QgaW1nUG9zTGVmdCA9IHRoaXMubGVmdCArIGltZ1BhZGRpbmcubGVmdDtcbiAgICAgIGNvbnN0IGltZ1Bvc1RvcCA9IHRoaXMudG9wICsgaW1nUGFkZGluZy50b3A7XG4gICAgICBjb25zdCBpbWdXaWR0aCA9IHRoaXMud2lkdGggLSBpbWdQYWRkaW5nLmxlZnQgLSBpbWdQYWRkaW5nLnJpZ2h0O1xuICAgICAgY29uc3QgaW1nSGVpZ2h0ID0gdGhpcy5oZWlnaHQgLSBpbWdQYWRkaW5nLnRvcCAtIGltZ1BhZGRpbmcuYm90dG9tO1xuICAgICAgdGhpcy5pbWFnZU9iai5kcmF3SW1hZ2VBdFBvc2l0aW9uKFxuICAgICAgICBjdHgsXG4gICAgICAgIGZhY3RvcixcbiAgICAgICAgaW1nUG9zTGVmdCxcbiAgICAgICAgaW1nUG9zVG9wLFxuICAgICAgICBpbWdXaWR0aCxcbiAgICAgICAgaW1nSGVpZ2h0XG4gICAgICApO1xuXG4gICAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd0ltYWdlTGFiZWwoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcblxuICAgIGlmICh0aGlzLmhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvZmZzZXQgPSB0aGlzLmhlaWdodCAqIDAuNTtcbiAgICAgIGNvbnN0IGxhYmVsRGltZW5zaW9ucyA9IHRoaXMubGFiZWxNb2R1bGUuZ2V0VGV4dFNpemUoXG4gICAgICAgIGN0eCxcbiAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgIGhvdmVyXG4gICAgICApO1xuICAgICAgaWYgKGxhYmVsRGltZW5zaW9ucy5saW5lQ291bnQgPj0gMSkge1xuICAgICAgICBvZmZzZXQgKz0gbGFiZWxEaW1lbnNpb25zLmhlaWdodCAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeUxhYmVsID0geSArIG9mZnNldDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwpIHtcbiAgICAgIHRoaXMubGFiZWxPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHgsIHlMYWJlbCwgc2VsZWN0ZWQsIGhvdmVyLCBcImhhbmdpbmdcIik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlSW1hZ2VCYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgQ2lyY2xlSW1hZ2VCYXNlIGZyb20gXCIuLi91dGlsL0NpcmNsZUltYWdlQmFzZVwiO1xuXG4vKipcbiAqIEEgQ2lyY2xlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgQ2lyY2xlSW1hZ2VCYXNlXG4gKi9cbmNsYXNzIENpcmNsZSBleHRlbmRzIENpcmNsZUltYWdlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gICAgdGhpcy5fc2V0TWFyZ2lucyhsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsIGhvdmVyID0gdGhpcy5ob3Zlcikge1xuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5nZXREaW1lbnNpb25zRnJvbUxhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcblxuICAgICAgY29uc3QgZGlhbWV0ZXIgPSBNYXRoLm1heChcbiAgICAgICAgZGltZW5zaW9ucy53aWR0aCArIHRoaXMubWFyZ2luLnJpZ2h0ICsgdGhpcy5tYXJnaW4ubGVmdCxcbiAgICAgICAgZGltZW5zaW9ucy5oZWlnaHQgKyB0aGlzLm1hcmdpbi50b3AgKyB0aGlzLm1hcmdpbi5ib3R0b21cbiAgICAgICk7XG5cbiAgICAgIHRoaXMub3B0aW9ucy5zaXplID0gZGlhbWV0ZXIgLyAyOyAvLyBOT1RFOiB0aGlzIHNpemUgZmllbGQgb25seSBzZXQgaGVyZSwgbm90IGluIEVsbGlwc2UsIERhdGFiYXNlLCBCb3hcbiAgICAgIHRoaXMud2lkdGggPSBkaWFtZXRlcjtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gZGlhbWV0ZXI7XG4gICAgICB0aGlzLnJhZGl1cyA9IHRoaXMud2lkdGggLyAyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICB0aGlzLl9kcmF3UmF3Q2lyY2xlKGN0eCwgeCwgeSwgdmFsdWVzKTtcblxuICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goeCwgeSk7XG4gICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KFxuICAgICAgY3R4LFxuICAgICAgdGhpcy5sZWZ0ICsgdGhpcy50ZXh0U2l6ZS53aWR0aCAvIDIgKyB0aGlzLm1hcmdpbi5sZWZ0LFxuICAgICAgeSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgaG92ZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSkge1xuICAgIHRoaXMuYm91bmRpbmdCb3gudG9wID0geSAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHggLSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0geCArIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0geSArIHRoaXMub3B0aW9ucy5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4KSB7XG4gICAgaWYgKGN0eCkge1xuICAgICAgdGhpcy5yZXNpemUoY3R4KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMud2lkdGggKiAwLjU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgQ2lyY2xlSW1hZ2VCYXNlIGZyb20gXCIuLi91dGlsL0NpcmNsZUltYWdlQmFzZVwiO1xuXG4vKipcbiAqIEEgQ2lyY3VsYXJJbWFnZSBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIENpcmNsZUltYWdlQmFzZVxuICovXG5jbGFzcyBDaXJjdWxhckltYWdlIGV4dGVuZHMgQ2lyY2xlSW1hZ2VCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqQWx0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSwgaW1hZ2VPYmosIGltYWdlT2JqQWx0KSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuXG4gICAgdGhpcy5zZXRJbWFnZXMoaW1hZ2VPYmosIGltYWdlT2JqQWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlbGVjdGVkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3Zlcl1cbiAgICovXG4gIHJlc2l6ZShjdHgsIHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZCwgaG92ZXIgPSB0aGlzLmhvdmVyKSB7XG4gICAgY29uc3QgaW1hZ2VBYnNlbnQgPVxuICAgICAgdGhpcy5pbWFnZU9iai5zcmMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5pbWFnZU9iai53aWR0aCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLmltYWdlT2JqLmhlaWdodCA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGltYWdlQWJzZW50KSB7XG4gICAgICBjb25zdCBkaWFtZXRlciA9IHRoaXMub3B0aW9ucy5zaXplICogMjtcbiAgICAgIHRoaXMud2lkdGggPSBkaWFtZXRlcjtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gZGlhbWV0ZXI7XG4gICAgICB0aGlzLnJhZGl1cyA9IDAuNSAqIHRoaXMud2lkdGg7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgYW4gaW1hZ2UgaXMgcHJlc2VudCwgaS5lLiB0aGlzLmltYWdlT2JqIGlzIHZhbGlkLlxuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICB0aGlzLl9yZXNpemVJbWFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5zd2l0Y2hJbWFnZXMoc2VsZWN0ZWQpO1xuICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICBsZXQgbGFiZWxYID0geCxcbiAgICAgIGxhYmVsWSA9IHk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5jb29yZGluYXRlT3JpZ2luID09PSBcInRvcC1sZWZ0XCIpIHtcbiAgICAgIHRoaXMubGVmdCA9IHg7XG4gICAgICB0aGlzLnRvcCA9IHk7XG4gICAgICBsYWJlbFggKz0gdGhpcy53aWR0aCAvIDI7XG4gICAgICBsYWJlbFkgKz0gdGhpcy5oZWlnaHQgLyAyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG4gICAgfVxuXG4gICAgLy8gZHJhdyB0aGUgYmFja2dyb3VuZCBjaXJjbGUuIElNUE9SVEFOVDogdGhlIHN0cm9rZSBpbiB0aGlzIG1ldGhvZCBpcyB1c2VkIGJ5IHRoZSBjbGlwIG1ldGhvZCBiZWxvdy5cbiAgICB0aGlzLl9kcmF3UmF3Q2lyY2xlKGN0eCwgbGFiZWxYLCBsYWJlbFksIHZhbHVlcyk7XG5cbiAgICAvLyBub3cgd2UgZHJhdyBpbiB0aGUgY2lyY2xlLCB3ZSBzYXZlIHNvIHdlIGNhbiByZXZlcnQgdGhlIGNsaXAgb3BlcmF0aW9uIGFmdGVyIGRyYXdpbmcuXG4gICAgY3R4LnNhdmUoKTtcbiAgICAvLyBjbGlwIGlzIHVzZWQgdG8gdXNlIHRoZSBzdHJva2UgaW4gZHJhd1Jhd0NpcmNsZSBhcyBhbiBhcmVhIHRoYXQgd2UgY2FuIGRyYXcgaW4uXG4gICAgY3R4LmNsaXAoKTtcbiAgICAvLyBkcmF3IHRoZSBpbWFnZVxuICAgIHRoaXMuX2RyYXdJbWFnZUF0UG9zaXRpb24oY3R4LCB2YWx1ZXMpO1xuICAgIC8vIHJlc3RvcmUgc28gd2UgY2FuIGFnYWluIGRyYXcgb24gdGhlIGZ1bGwgY2FudmFzXG4gICAgY3R4LnJlc3RvcmUoKTtcblxuICAgIHRoaXMuX2RyYXdJbWFnZUxhYmVsKGN0eCwgbGFiZWxYLCBsYWJlbFksIHNlbGVjdGVkLCBob3Zlcik7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpO1xuICB9XG5cbiAgLy8gVE9ETzogY29tcGFyZSB3aXRoIENpcmNsZS51cGRhdGVCb3VuZGluZ0JveCgpLCBjb25zb2xpZGF0ZT8gTW9yZSBzdHVmZiBpcyBoYXBwZW5pbmcgaGVyZVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5KSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuY29vcmRpbmF0ZU9yaWdpbiA9PT0gXCJ0b3AtbGVmdFwiKSB7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSB4O1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IHggKyB0aGlzLm9wdGlvbnMuc2l6ZSAqIDI7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IHkgKyB0aGlzLm9wdGlvbnMuc2l6ZSAqIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gudG9wID0geSAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0geCAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IHggKyB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0geSArIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGNvbXBhcmUgd2l0aCBJbWFnZS51cGRhdGVCb3VuZGluZ0JveCgpLCBjb25zb2xpZGF0ZT9cbiAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSBNYXRoLm1pbihcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCxcbiAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0XG4gICAgKTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0LFxuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQgKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGhcbiAgICApO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0gTWF0aC5tYXgoXG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSxcbiAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICsgdGhpcy5sYWJlbE9mZnNldFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgpIHtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53aWR0aCAqIDAuNTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDaXJjdWxhckltYWdlO1xuIiwgImltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi4vdXRpbC9Ob2RlQmFzZVwiO1xuaW1wb3J0IHsgZ2V0U2hhcGUgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjb25zdHJ1Y3RpbmcgTm9kZS9DbHVzdGVyIFNoYXBlcy5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgU2hhcGVCYXNlIGV4dGVuZHMgTm9kZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2VsZWN0ZWRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hvdmVyXVxuICAgKiBAcGFyYW0ge29iamVjdH0gW3ZhbHVlcz17c2l6ZTogdGhpcy5vcHRpb25zLnNpemV9XVxuICAgKi9cbiAgcmVzaXplKFxuICAgIGN0eCxcbiAgICBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsXG4gICAgaG92ZXIgPSB0aGlzLmhvdmVyLFxuICAgIHZhbHVlcyA9IHsgc2l6ZTogdGhpcy5vcHRpb25zLnNpemUgfVxuICApIHtcbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5nZXRUZXh0U2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgICBjb25zdCBzaXplID0gMiAqIHZhbHVlcy5zaXplO1xuICAgICAgdGhpcy53aWR0aCA9IHRoaXMuY3VzdG9tU2l6ZVdpZHRoID8/IHNpemU7XG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMuY3VzdG9tU2l6ZUhlaWdodCA/PyBzaXplO1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaGFwZVxuICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZU11bHRpcGxpZXIgLSBVbnVzZWQhIFRPRE86IFJlbW92ZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIF9kcmF3U2hhcGUoY3R4LCBzaGFwZSwgc2l6ZU11bHRpcGxpZXIsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcblxuICAgIHRoaXMuaW5pdENvbnRleHRGb3JEcmF3KGN0eCwgdmFsdWVzKTtcbiAgICBnZXRTaGFwZShzaGFwZSkoY3R4LCB4LCB5LCB2YWx1ZXMuc2l6ZSk7XG4gICAgdGhpcy5wZXJmb3JtRmlsbChjdHgsIHZhbHVlcyk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmljb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pY29uLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjdHguZm9udCA9XG4gICAgICAgICAgKHNlbGVjdGVkID8gXCJib2xkIFwiIDogXCJcIikgK1xuICAgICAgICAgIHRoaXMuaGVpZ2h0IC8gMiArXG4gICAgICAgICAgXCJweCBcIiArXG4gICAgICAgICAgKHRoaXMub3B0aW9ucy5pY29uLmZhY2UgfHwgXCJGb250QXdlc29tZVwiKTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMub3B0aW9ucy5pY29uLmNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICAgICAgY3R4LnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XG4gICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuICAgICAgICBjdHguZmlsbFRleHQodGhpcy5vcHRpb25zLmljb24uY29kZSwgeCwgeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYXdFeHRlcm5hbExhYmVsOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIE5lZWQgdG8gY2FsbCBmb2xsb3dpbmcgaGVyZSBpbiBvcmRlciB0byBlbnN1cmUgdmFsdWUgZm9yXG4gICAgICAgICAgLy8gYHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5oZWlnaHRgLlxuICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGUuY2FsY3VsYXRlTGFiZWxTaXplKFxuICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICBob3ZlcixcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5LFxuICAgICAgICAgICAgXCJoYW5naW5nXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHlMYWJlbCA9XG4gICAgICAgICAgICB5ICsgMC41ICogdGhpcy5oZWlnaHQgKyAwLjUgKiB0aGlzLmxhYmVsTW9kdWxlLnNpemUuaGVpZ2h0O1xuICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHgsIHlMYWJlbCwgc2VsZWN0ZWQsIGhvdmVyLCBcImhhbmdpbmdcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5KSB7XG4gICAgdGhpcy5ib3VuZGluZ0JveC50b3AgPSB5IC0gdGhpcy5vcHRpb25zLnNpemU7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0geCAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB4ICsgdGhpcy5vcHRpb25zLnNpemU7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSB5ICsgdGhpcy5vcHRpb25zLnNpemU7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoID4gMCkge1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0gTWF0aC5taW4oXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnRcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQsXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0ICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoXG4gICAgICApO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20sXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmhlaWdodFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2hhcGVCYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgQ3VzdG9tU2hhcGUgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgQ3VzdG9tU2hhcGUgZXh0ZW5kcyBTaGFwZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3R4UmVuZGVyZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlLCBjdHhSZW5kZXJlcikge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlLCBjdHhSZW5kZXJlcik7XG4gICAgdGhpcy5jdHhSZW5kZXJlciA9IGN0eFJlbmRlcmVyO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGRpZmZlcmVudCBsYXllcnMuXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICB0aGlzLnJlc2l6ZShjdHgsIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgLy8gR3VhcmQgcmlnaHQgYXdheSBiZWNhdXNlIHNvbWVvbmUgbWF5IGp1c3QgZHJhdyBpbiB0aGUgZnVuY3Rpb24gaXRzZWxmLlxuICAgIGN0eC5zYXZlKCk7XG4gICAgY29uc3QgZHJhd0xhdGVyID0gdGhpcy5jdHhSZW5kZXJlcih7XG4gICAgICBjdHgsXG4gICAgICBpZDogdGhpcy5vcHRpb25zLmlkLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBzdGF0ZTogeyBzZWxlY3RlZCwgaG92ZXIgfSxcbiAgICAgIHN0eWxlOiB7IC4uLnZhbHVlcyB9LFxuICAgICAgbGFiZWw6IHRoaXMub3B0aW9ucy5sYWJlbCxcbiAgICB9KTtcbiAgICAvLyBSZW5kZXIgdGhlIG5vZGUgc2hhcGUgYmVsbG93IGFycm93cy5cbiAgICBpZiAoZHJhd0xhdGVyLmRyYXdOb2RlICE9IG51bGwpIHtcbiAgICAgIGRyYXdMYXRlci5kcmF3Tm9kZSgpO1xuICAgIH1cbiAgICBjdHgucmVzdG9yZSgpO1xuXG4gICAgaWYgKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCkge1xuICAgICAgLy8gR3VhcmQgdGhlIGV4dGVybmFsIGxhYmVsIChhYm92ZSBhcnJvd3MpIGRyYXdpbmcgZnVuY3Rpb24uXG4gICAgICBjb25zdCBkcmF3RXh0ZXJuYWxMYWJlbCA9IGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbDtcbiAgICAgIGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCA9ICgpID0+IHtcbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgZHJhd0V4dGVybmFsTGFiZWwoKTtcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGRyYXdMYXRlci5ub2RlRGltZW5zaW9ucykge1xuICAgICAgdGhpcy5jdXN0b21TaXplV2lkdGggPSBkcmF3TGF0ZXIubm9kZURpbWVuc2lvbnMud2lkdGg7XG4gICAgICB0aGlzLmN1c3RvbVNpemVIZWlnaHQgPSBkcmF3TGF0ZXIubm9kZURpbWVuc2lvbnMuaGVpZ2h0O1xuICAgIH1cblxuICAgIHJldHVybiBkcmF3TGF0ZXI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEN1c3RvbVNoYXBlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9kZUJhc2UgZnJvbSBcIi4uL3V0aWwvTm9kZUJhc2VcIjtcbmltcG9ydCB7IGRyYXdEYXRhYmFzZSB9IGZyb20gXCIuLi91dGlsL3NoYXBlc1wiO1xuXG4vKipcbiAqIEEgRGF0YWJhc2UgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBOb2RlQmFzZVxuICovXG5jbGFzcyBEYXRhYmFzZSBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgICB0aGlzLl9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKi9cbiAgcmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgICAgY29uc3Qgc2l6ZSA9IGRpbWVuc2lvbnMud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQ7XG5cbiAgICAgIHRoaXMud2lkdGggPSBzaXplO1xuICAgICAgdGhpcy5oZWlnaHQgPSBzaXplO1xuICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLndpZHRoIC8gMjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgdGhpcy5pbml0Q29udGV4dEZvckRyYXcoY3R4LCB2YWx1ZXMpO1xuICAgIGRyYXdEYXRhYmFzZShcbiAgICAgIGN0eCxcbiAgICAgIHggLSB0aGlzLndpZHRoIC8gMixcbiAgICAgIHkgLSB0aGlzLmhlaWdodCAvIDIsXG4gICAgICB0aGlzLndpZHRoLFxuICAgICAgdGhpcy5oZWlnaHRcbiAgICApO1xuICAgIHRoaXMucGVyZm9ybUZpbGwoY3R4LCB2YWx1ZXMpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KFxuICAgICAgY3R4LFxuICAgICAgdGhpcy5sZWZ0ICsgdGhpcy50ZXh0U2l6ZS53aWR0aCAvIDIgKyB0aGlzLm1hcmdpbi5sZWZ0LFxuICAgICAgdGhpcy50b3AgKyB0aGlzLnRleHRTaXplLmhlaWdodCAvIDIgKyB0aGlzLm1hcmdpbi50b3AsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGFiYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgRGlhbW9uZCBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIFNoYXBlQmFzZVxuICovXG5jbGFzcyBEaWFtb25kIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwiZGlhbW9uZFwiLCA0LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpYW1vbmQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaGFwZUJhc2UgZnJvbSBcIi4uL3V0aWwvU2hhcGVCYXNlXCI7XG5cbi8qKlxuICogQSBEb3QgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgRG90IGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwiY2lyY2xlXCIsIDIsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCkge1xuICAgIGlmIChjdHgpIHtcbiAgICAgIHRoaXMucmVzaXplKGN0eCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEb3Q7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi4vdXRpbC9Ob2RlQmFzZVwiO1xuaW1wb3J0IHsgZHJhd0VsbGlwc2UgfSBmcm9tIFwiLi4vdXRpbC9zaGFwZXNcIjtcblxuLyoqXG4gKiBBbSBFbGxpcHNlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgRWxsaXBzZSBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlbGVjdGVkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3Zlcl1cbiAgICovXG4gIHJlc2l6ZShjdHgsIHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZCwgaG92ZXIgPSB0aGlzLmhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgICB0aGlzLmhlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0ICogMjtcbiAgICAgIHRoaXMud2lkdGggPSBkaW1lbnNpb25zLndpZHRoICsgZGltZW5zaW9ucy5oZWlnaHQ7XG4gICAgICB0aGlzLnJhZGl1cyA9IDAuNSAqIHRoaXMud2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICB0aGlzLnJlc2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggKiAwLjU7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgKiAwLjU7XG5cbiAgICB0aGlzLmluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcyk7XG4gICAgZHJhd0VsbGlwc2UoY3R4LCB0aGlzLmxlZnQsIHRoaXMudG9wLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgdGhpcy5wZXJmb3JtRmlsbChjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICBjb25zdCBhID0gdGhpcy53aWR0aCAqIDAuNTtcbiAgICBjb25zdCBiID0gdGhpcy5oZWlnaHQgKiAwLjU7XG4gICAgY29uc3QgdyA9IE1hdGguc2luKGFuZ2xlKSAqIGE7XG4gICAgY29uc3QgaCA9IE1hdGguY29zKGFuZ2xlKSAqIGI7XG4gICAgcmV0dXJuIChhICogYikgLyBNYXRoLnNxcnQodyAqIHcgKyBoICogaCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRWxsaXBzZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vZGVCYXNlIGZyb20gXCIuLi91dGlsL05vZGVCYXNlXCI7XG5cbi8qKlxuICogQW4gaWNvbiByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgTm9kZSBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgSWNvbiBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgICB0aGlzLl9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4IC0gVW51c2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy5pY29uU2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IE51bWJlcih0aGlzLm9wdGlvbnMuaWNvbi5zaXplKSxcbiAgICAgICAgaGVpZ2h0OiBOdW1iZXIodGhpcy5vcHRpb25zLmljb24uc2l6ZSksXG4gICAgICB9O1xuICAgICAgdGhpcy53aWR0aCA9IHRoaXMuaWNvblNpemUud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQ7XG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMuaWNvblNpemUuaGVpZ2h0ICsgdGhpcy5tYXJnaW4udG9wICsgdGhpcy5tYXJnaW4uYm90dG9tO1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMub3B0aW9ucy5pY29uLnNpemUgPSB0aGlzLm9wdGlvbnMuaWNvbi5zaXplIHx8IDUwO1xuXG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcbiAgICB0aGlzLl9pY29uKGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYXdFeHRlcm5hbExhYmVsOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGljb25UZXh0U3BhY2luZyA9IDU7XG4gICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KFxuICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgdGhpcy5sZWZ0ICsgdGhpcy5pY29uU2l6ZS53aWR0aCAvIDIgKyB0aGlzLm1hcmdpbi5sZWZ0LFxuICAgICAgICAgICAgeSArIHRoaXMuaGVpZ2h0IC8gMiArIGljb25UZXh0U3BhY2luZyxcbiAgICAgICAgICAgIHNlbGVjdGVkXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goeCwgeSk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICovXG4gIHVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpIHtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHkgLSB0aGlzLm9wdGlvbnMuaWNvbi5zaXplICogMC41O1xuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHggLSB0aGlzLm9wdGlvbnMuaWNvbi5zaXplICogMC41O1xuICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB4ICsgdGhpcy5vcHRpb25zLmljb24uc2l6ZSAqIDAuNTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IHkgKyB0aGlzLm9wdGlvbnMuaWNvbi5zaXplICogMC41O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS53aWR0aCA+IDApIHtcbiAgICAgIGNvbnN0IGljb25UZXh0U3BhY2luZyA9IDU7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0LFxuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdFxuICAgICAgKTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQgKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGhcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IE1hdGgubWF4KFxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSxcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUuaGVpZ2h0ICsgaWNvblRleHRTcGFjaW5nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXIgLSBVbnVzZWRcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgX2ljb24oY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIGNvbnN0IGljb25TaXplID0gTnVtYmVyKHRoaXMub3B0aW9ucy5pY29uLnNpemUpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pY29uLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3R4LmZvbnQgPSBbXG4gICAgICAgIHRoaXMub3B0aW9ucy5pY29uLndlaWdodCAhPSBudWxsXG4gICAgICAgICAgPyB0aGlzLm9wdGlvbnMuaWNvbi53ZWlnaHRcbiAgICAgICAgICA6IHNlbGVjdGVkXG4gICAgICAgICAgPyBcImJvbGRcIlxuICAgICAgICAgIDogXCJcIixcbiAgICAgICAgLy8gSWYgdGhlIHdlaWdodCBpcyBmb3JjZWQgKGZvciBleGFtcGxlIHRvIG1ha2UgRm9udCBBd2Vzb21lIDUgd29ya1xuICAgICAgICAvLyBwcm9wZXJseSkgc3Vic3RpdHV0ZSBzbGlnaHRseSBiaWdnZXIgc2l6ZSBmb3IgYm9sZCBmb250IGZhY2UuXG4gICAgICAgICh0aGlzLm9wdGlvbnMuaWNvbi53ZWlnaHQgIT0gbnVsbCAmJiBzZWxlY3RlZCA/IDUgOiAwKSArXG4gICAgICAgICAgaWNvblNpemUgK1xuICAgICAgICAgIFwicHhcIixcbiAgICAgICAgdGhpcy5vcHRpb25zLmljb24uZmFjZSxcbiAgICAgIF0uam9pbihcIiBcIik7XG5cbiAgICAgIC8vIGRyYXcgaWNvblxuICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMub3B0aW9ucy5pY29uLmNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICAgIGN0eC50ZXh0QWxpZ24gPSBcImNlbnRlclwiO1xuICAgICAgY3R4LnRleHRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG5cbiAgICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICAgIGN0eC5maWxsVGV4dCh0aGlzLm9wdGlvbnMuaWNvbi5jb2RlLCB4LCB5KTtcblxuICAgICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiV2hlbiB1c2luZyB0aGUgaWNvbiBzaGFwZSwgeW91IG5lZWQgdG8gZGVmaW5lIHRoZSBjb2RlIGluIHRoZSBpY29uIG9wdGlvbnMgb2JqZWN0LiBUaGlzIGNhbiBiZSBkb25lIHBlciBub2RlIG9yIGdsb2JhbGx5LlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IENpcmNsZUltYWdlQmFzZSBmcm9tIFwiLi4vdXRpbC9DaXJjbGVJbWFnZUJhc2VcIjtcbmltcG9ydCB7IG92ZXJyaWRlT3BhY2l0eSB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBBbiBpbWFnZS1iYXNlZCByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgTm9kZSBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgQ2lyY2xlSW1hZ2VCYXNlXG4gKi9cbmNsYXNzIEltYWdlIGV4dGVuZHMgQ2lyY2xlSW1hZ2VCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqQWx0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSwgaW1hZ2VPYmosIGltYWdlT2JqQWx0KSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuXG4gICAgdGhpcy5zZXRJbWFnZXMoaW1hZ2VPYmosIGltYWdlT2JqQWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4IC0gVW51c2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsIGhvdmVyID0gdGhpcy5ob3Zlcikge1xuICAgIGNvbnN0IGltYWdlQWJzZW50ID1cbiAgICAgIHRoaXMuaW1hZ2VPYmouc3JjID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuaW1hZ2VPYmoud2lkdGggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5pbWFnZU9iai5oZWlnaHQgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpbWFnZUFic2VudCkge1xuICAgICAgY29uc3Qgc2lkZSA9IHRoaXMub3B0aW9ucy5zaXplICogMjtcbiAgICAgIHRoaXMud2lkdGggPSBzaWRlO1xuICAgICAgdGhpcy5oZWlnaHQgPSBzaWRlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICB0aGlzLl9yZXNpemVJbWFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgY3R4LnNhdmUoKTtcbiAgICB0aGlzLnN3aXRjaEltYWdlcyhzZWxlY3RlZCk7XG4gICAgdGhpcy5yZXNpemUoKTtcblxuICAgIGxldCBsYWJlbFggPSB4LFxuICAgICAgbGFiZWxZID0geTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW4gPT09IFwidG9wLWxlZnRcIikge1xuICAgICAgdGhpcy5sZWZ0ID0geDtcbiAgICAgIHRoaXMudG9wID0geTtcbiAgICAgIGxhYmVsWCArPSB0aGlzLndpZHRoIC8gMjtcbiAgICAgIGxhYmVsWSArPSB0aGlzLmhlaWdodCAvIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy51c2VCb3JkZXJXaXRoSW1hZ2UgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IG5ldXRyYWxib3JkZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbkxpbmVXaWR0aCA9XG4gICAgICAgIHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aFNlbGVjdGVkIHx8IDIgKiB0aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGg7XG4gICAgICBjb25zdCBib3JkZXJXaWR0aCA9XG4gICAgICAgIChzZWxlY3RlZCA/IHNlbGVjdGlvbkxpbmVXaWR0aCA6IG5ldXRyYWxib3JkZXJXaWR0aCkgL1xuICAgICAgICB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIGN0eC5saW5lV2lkdGggPSBNYXRoLm1pbih0aGlzLndpZHRoLCBib3JkZXJXaWR0aCk7XG5cbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGxldCBzdHJva2VTdHlsZSA9IHNlbGVjdGVkXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodC5ib3JkZXJcbiAgICAgICAgOiBob3ZlclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5jb2xvci5ob3Zlci5ib3JkZXJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuY29sb3IuYm9yZGVyO1xuICAgICAgbGV0IGZpbGxTdHlsZSA9IHNlbGVjdGVkXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kXG4gICAgICAgIDogaG92ZXJcbiAgICAgICAgPyB0aGlzLm9wdGlvbnMuY29sb3IuaG92ZXIuYmFja2dyb3VuZFxuICAgICAgICA6IHRoaXMub3B0aW9ucy5jb2xvci5iYWNrZ3JvdW5kO1xuXG4gICAgICBpZiAodmFsdWVzLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdHJva2VTdHlsZSA9IG92ZXJyaWRlT3BhY2l0eShzdHJva2VTdHlsZSwgdmFsdWVzLm9wYWNpdHkpO1xuICAgICAgICBmaWxsU3R5bGUgPSBvdmVycmlkZU9wYWNpdHkoZmlsbFN0eWxlLCB2YWx1ZXMub3BhY2l0eSk7XG4gICAgICB9XG4gICAgICAvLyBzZXR1cCB0aGUgbGluZSBwcm9wZXJ0aWVzLlxuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGU7XG5cbiAgICAgIC8vIHNldCBhIGZpbGxzdHlsZVxuICAgICAgY3R4LmZpbGxTdHlsZSA9IGZpbGxTdHlsZTtcblxuICAgICAgLy8gZHJhdyBhIHJlY3RhbmdsZSB0byBmb3JtIHRoZSBib3JkZXIgYXJvdW5kLiBUaGlzIHJlY3RhbmdsZSBpcyBmaWxsZWQgc28gdGhlIG9wYWNpdHkgb2YgYSBwaWN0dXJlIChpbiBmdXR1cmUgdmlzIHJlbGVhc2VzPykgY2FuIGJlIHVzZWQgdG8gdGludCB0aGUgaW1hZ2VcbiAgICAgIGN0eC5yZWN0KFxuICAgICAgICB0aGlzLmxlZnQgLSAwLjUgKiBjdHgubGluZVdpZHRoLFxuICAgICAgICB0aGlzLnRvcCAtIDAuNSAqIGN0eC5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMud2lkdGggKyBjdHgubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmhlaWdodCArIGN0eC5saW5lV2lkdGhcbiAgICAgICk7XG4gICAgICBjdHguZmlsbCgpO1xuXG4gICAgICB0aGlzLnBlcmZvcm1TdHJva2UoY3R4LCB2YWx1ZXMpO1xuXG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZHJhd0ltYWdlQXRQb3NpdGlvbihjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLl9kcmF3SW1hZ2VMYWJlbChjdHgsIGxhYmVsWCwgbGFiZWxZLCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5KTtcbiAgICBjdHgucmVzdG9yZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5KSB7XG4gICAgdGhpcy5yZXNpemUoKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW4gPT09IFwidG9wLWxlZnRcIikge1xuICAgICAgdGhpcy5sZWZ0ID0geDtcbiAgICAgIHRoaXMudG9wID0geTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuICAgIH1cblxuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHRoaXMubGVmdDtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHRoaXMudG9wO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0gdGhpcy50b3AgKyB0aGlzLmhlaWdodDtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gdGhpcy5sZWZ0ICsgdGhpcy53aWR0aDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGggPiAwKSB7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0LFxuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdFxuICAgICAgKTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQgKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGhcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IE1hdGgubWF4KFxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSxcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gKyB0aGlzLmxhYmVsT2Zmc2V0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2U7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaGFwZUJhc2UgZnJvbSBcIi4uL3V0aWwvU2hhcGVCYXNlXCI7XG5cbi8qKlxuICogQSBTcXVhcmUgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgU3F1YXJlIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwic3F1YXJlXCIsIDIsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3F1YXJlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgSGV4YWdvbiBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIFNoYXBlQmFzZVxuICovXG5jbGFzcyBIZXhhZ29uIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwiaGV4YWdvblwiLCA0LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhleGFnb247XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaGFwZUJhc2UgZnJvbSBcIi4uL3V0aWwvU2hhcGVCYXNlXCI7XG5cbi8qKlxuICogQSBTdGFyIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIFN0YXIgZXh0ZW5kcyBTaGFwZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGhpZ2hlciBsYXllcnMuXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhd1NoYXBlKGN0eCwgXCJzdGFyXCIsIDQsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RhcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vZGVCYXNlIGZyb20gXCIuLi91dGlsL05vZGVCYXNlXCI7XG5cbi8qKlxuICogQSB0ZXh0LWJhc2VkIHJlcGxhY2VtZW50IGZvciB0aGUgZGVmYXVsdCBOb2RlIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBOb2RlQmFzZVxuICovXG5jbGFzcyBUZXh0IGV4dGVuZHMgTm9kZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICAgIHRoaXMuX3NldE1hcmdpbnMobGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy50ZXh0U2l6ZSA9IHRoaXMubGFiZWxNb2R1bGUuZ2V0VGV4dFNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgICAgdGhpcy53aWR0aCA9IHRoaXMudGV4dFNpemUud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQ7XG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMudGV4dFNpemUuaGVpZ2h0ICsgdGhpcy5tYXJnaW4udG9wICsgdGhpcy5tYXJnaW4uYm90dG9tO1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICAvLyBkcmF3IHNoYWRvdyBpZiBlbmFibGVkXG4gICAgdGhpcy5lbmFibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhcbiAgICAgIGN0eCxcbiAgICAgIHRoaXMubGVmdCArIHRoaXMudGV4dFNpemUud2lkdGggLyAyICsgdGhpcy5tYXJnaW4ubGVmdCxcbiAgICAgIHRoaXMudG9wICsgdGhpcy50ZXh0U2l6ZS5oZWlnaHQgLyAyICsgdGhpcy5tYXJnaW4udG9wLFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBob3ZlclxuICAgICk7XG5cbiAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNoYXBlQmFzZSBmcm9tIFwiLi4vdXRpbC9TaGFwZUJhc2VcIjtcblxuLyoqXG4gKiBBIFRyaWFuZ2xlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIFRyaWFuZ2xlIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGhpZ2hlciBsYXllcnMuXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhd1NoYXBlKGN0eCwgXCJ0cmlhbmdsZVwiLCAzLCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyaWFuZ2xlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgZG93bndhcmQgZmFjaW5nIFRyaWFuZ2xlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIFRyaWFuZ2xlRG93biBleHRlbmRzIFNoYXBlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShcbiAgICAgIGN0eCxcbiAgICAgIFwidHJpYW5nbGVEb3duXCIsXG4gICAgICAzLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyLFxuICAgICAgdmFsdWVzXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVHJpYW5nbGVEb3duO1xuIiwgImltcG9ydCB7XG4gIFZBTElEQVRPUl9QUklOVF9TVFlMRSxcbiAgYnJpZGdlT2JqZWN0LFxuICBmaWxsSWZEZWZpbmVkLFxuICBtZXJnZU9wdGlvbnMsXG4gIG92ZXJyaWRlT3BhY2l0eSxcbiAgcGFyc2VDb2xvcixcbiAgc2VsZWN0aXZlTm90RGVlcEV4dGVuZCxcbn0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG5pbXBvcnQgTGFiZWwgZnJvbSBcIi4vc2hhcmVkL0xhYmVsXCI7XG5pbXBvcnQgeyBjaG9vc2lmeSwgcG9pbnRJblJlY3QgfSBmcm9tIFwiLi9zaGFyZWQvQ29tcG9uZW50VXRpbFwiO1xuaW1wb3J0IEJveCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvQm94XCI7XG5pbXBvcnQgQ2lyY2xlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9DaXJjbGVcIjtcbmltcG9ydCBDaXJjdWxhckltYWdlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9DaXJjdWxhckltYWdlXCI7XG5pbXBvcnQgQ3VzdG9tU2hhcGUgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0N1c3RvbVNoYXBlXCI7XG5pbXBvcnQgRGF0YWJhc2UgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0RhdGFiYXNlXCI7XG5pbXBvcnQgRGlhbW9uZCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvRGlhbW9uZFwiO1xuaW1wb3J0IERvdCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvRG90XCI7XG5pbXBvcnQgRWxsaXBzZSBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvRWxsaXBzZVwiO1xuaW1wb3J0IEljb24gZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0ljb25cIjtcbmltcG9ydCBJbWFnZSBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvSW1hZ2VcIjtcbmltcG9ydCBTcXVhcmUgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL1NxdWFyZVwiO1xuaW1wb3J0IEhleGFnb24gZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0hleGFnb25cIjtcbmltcG9ydCBTdGFyIGZyb20gXCIuL25vZGVzL3NoYXBlcy9TdGFyXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvVGV4dFwiO1xuaW1wb3J0IFRyaWFuZ2xlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9UcmlhbmdsZVwiO1xuaW1wb3J0IFRyaWFuZ2xlRG93biBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvVHJpYW5nbGVEb3duXCI7XG5cbi8qKlxuICogQSBub2RlLiBBIG5vZGUgY2FuIGJlIGNvbm5lY3RlZCB0byBvdGhlciBub2RlcyB2aWEgb25lIG9yIG11bHRpcGxlIGVkZ2VzLlxuICovXG5jbGFzcyBOb2RlIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIEFuIG9iamVjdCBjb250YWluaW5nIG9wdGlvbnMgZm9yIHRoZSBub2RlLiBBbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyBhcmUgb3B0aW9uYWwsIGV4Y2VwdCBmb3IgdGhlIGlkLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGlkICAgICBJZCBvZiB0aGUgbm9kZS4gUmVxdWlyZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBsYWJlbCAgVGV4dCBsYWJlbCBmb3IgdGhlIG5vZGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSB4ICAgICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgbm9kZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IHkgICAgICBWZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgbm9kZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IHNoYXBlICBOb2RlIHNoYXBlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gaW1hZ2UgIEFuIGltYWdlIHVybFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IHRpdGxlICBBIHRpdGxlIHRleHQsIGNhbiBiZSBIVE1MXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FueXR5cGV9IGdyb3VwIEEgZ3JvdXAgbmFtZSBvciBudW1iZXJcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHkgICAgICAgICAgICAgICBTaGFyZWQgc3RhdGUgb2YgY3VycmVudCBuZXR3b3JrIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7TmV0d29yay5JbWFnZXN9IGltYWdlbGlzdCAgQSBsaXN0IHdpdGggaW1hZ2VzLiBPbmx5IG5lZWRlZCB3aGVuIHRoZSBub2RlIGhhcyBhbiBpbWFnZVxuICAgKiBAcGFyYW0ge0dyb3Vwc30gZ3JvdXBsaXN0ICAgICAgICAgIEEgbGlzdCB3aXRoIGdyb3Vwcy4gTmVlZGVkIGZvciByZXRyaWV2aW5nIGdyb3VwIG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbE9wdGlvbnMgICAgICBDdXJyZW50IGdsb2JhbCBub2RlIG9wdGlvbnM7IHRoZXNlIHNlcnZlIGFzIGRlZmF1bHRzIGZvciB0aGUgbm9kZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdE9wdGlvbnMgICAgIEdsb2JhbCBkZWZhdWx0IG9wdGlvbnMgZm9yIG5vZGVzOyBub3RlIHRoYXQgdGhpcyBpcyBhbHNvIHRoZSBwcm90b3R5cGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGBnbG9iYWxPcHRpb25zYC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnMsXG4gICAgYm9keSxcbiAgICBpbWFnZWxpc3QsXG4gICAgZ3JvdXBsaXN0LFxuICAgIGdsb2JhbE9wdGlvbnMsXG4gICAgZGVmYXVsdE9wdGlvbnNcbiAgKSB7XG4gICAgdGhpcy5vcHRpb25zID0gYnJpZGdlT2JqZWN0KGdsb2JhbE9wdGlvbnMpO1xuICAgIHRoaXMuZ2xvYmFsT3B0aW9ucyA9IGdsb2JhbE9wdGlvbnM7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG5cbiAgICB0aGlzLmVkZ2VzID0gW107IC8vIGFsbCBlZGdlcyBjb25uZWN0ZWQgdG8gdGhpcyBub2RlXG5cbiAgICAvLyBzZXQgZGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zXG4gICAgdGhpcy5pZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmltYWdlbGlzdCA9IGltYWdlbGlzdDtcbiAgICB0aGlzLmdyb3VwbGlzdCA9IGdyb3VwbGlzdDtcblxuICAgIC8vIHN0YXRlIG9wdGlvbnNcbiAgICB0aGlzLnggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy55ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYmFzZVNpemUgPSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB0aGlzLmJhc2VGb250U2l6ZSA9IHRoaXMub3B0aW9ucy5mb250LnNpemU7XG4gICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSBmYWxzZTsgLy8gdXNlZCB0byBjaGVjayBpZiBpbml0aWFsIGZpdCBzaG91bGQganVzdCB0YWtlIHRoZSByYW5nZSBvciBhcHByb3hpbWF0ZVxuICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhvdmVyID0gZmFsc2U7XG5cbiAgICB0aGlzLmxhYmVsTW9kdWxlID0gbmV3IExhYmVsKFxuICAgICAgdGhpcy5ib2R5LFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgZmFsc2UgLyogTm90IGVkZ2UgbGFiZWwgKi9cbiAgICApO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSBlZGdlIHRvIHRoZSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZX0gZWRnZVxuICAgKi9cbiAgYXR0YWNoRWRnZShlZGdlKSB7XG4gICAgaWYgKHRoaXMuZWRnZXMuaW5kZXhPZihlZGdlKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuZWRnZXMucHVzaChlZGdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0YWNoIGEgZWRnZSBmcm9tIHRoZSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZX0gZWRnZVxuICAgKi9cbiAgZGV0YWNoRWRnZShlZGdlKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmVkZ2VzLmluZGV4T2YoZWRnZSk7XG4gICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICB0aGlzLmVkZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBvciBvdmVyd3JpdGUgb3B0aW9ucyBmb3IgdGhlIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgYW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7bnVsbHxib29sZWFufVxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgY29uc3QgY3VycmVudFNoYXBlID0gdGhpcy5vcHRpb25zLnNoYXBlO1xuXG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm47IC8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgJ3VuZGVmaW5lZCchIFRoaXMgaXMgT0suXG4gICAgfVxuXG4gICAgLy8gU2F2ZSB0aGUgY29sb3IgZm9yIGxhdGVyLlxuICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHByZXZlbnQgbG9jYWwgY29sb3IgZnJvbSBiZWluZyBvdmVyd3JpdHRlbiBieSBncm91cCBjb2xvci5cbiAgICAvLyBUT0RPOiBUbyBwcmV2ZW50IHN1Y2ggd29ya2Fyb3VuZHMgdGhlIHdheSBvcHRpb25zIGFyZSBoYW5kbGVkIHNob3VsZCBiZSByZXdyaXR0ZW4gZnJvbSBzY3JhdGNoLlxuICAgIC8vIFRoaXMgaXMgbm90IHRoZSBvbmx5IHByb2JsZW0gd2l0aCBjdXJyZW50IG9wdGlvbnMgaGFuZGxpbmcuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbG9yICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLl9sb2NhbENvbG9yID0gb3B0aW9ucy5jb2xvcjtcbiAgICB9XG5cbiAgICAvLyBiYXNpYyBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pZCA9IG9wdGlvbnMuaWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm9kZSBtdXN0IGhhdmUgYW4gaWRcIik7XG4gICAgfVxuXG4gICAgTm9kZS5jaGVja01hc3Mob3B0aW9ucywgdGhpcy5pZCk7XG5cbiAgICAvLyBzZXQgdGhlc2Ugb3B0aW9ucyBsb2NhbGx5XG4gICAgLy8gY2xlYXIgeCBhbmQgeSBwb3NpdGlvbnNcbiAgICBpZiAob3B0aW9ucy54ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLnggPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy54ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnByZWRlZmluZWRQb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy54ID0gcGFyc2VJbnQob3B0aW9ucy54KTtcbiAgICAgICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy55ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLnkgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy55ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnByZWRlZmluZWRQb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy55ID0gcGFyc2VJbnQob3B0aW9ucy55KTtcbiAgICAgICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYmFzZVNpemUgPSBvcHRpb25zLnNpemU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMudmFsdWUgPSBwYXJzZUZsb2F0KG9wdGlvbnMudmFsdWUpO1xuICAgIH1cblxuICAgIC8vIHRoaXMgdHJhbnNmb3JtcyBhbGwgc2hvcnRoYW5kcyBpbnRvIGZ1bGx5IGRlZmluZWQgb3B0aW9uc1xuICAgIE5vZGUucGFyc2VPcHRpb25zKFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHRydWUsXG4gICAgICB0aGlzLmdsb2JhbE9wdGlvbnMsXG4gICAgICB0aGlzLmdyb3VwbGlzdFxuICAgICk7XG5cbiAgICBjb25zdCBwaWxlID0gW29wdGlvbnMsIHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9uc107XG4gICAgdGhpcy5jaG9vc2VyID0gY2hvb3NpZnkoXCJub2RlXCIsIHBpbGUpO1xuXG4gICAgdGhpcy5fbG9hZF9pbWFnZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKG9wdGlvbnMpO1xuXG4gICAgLy8gTmVlZCB0byBzZXQgbG9jYWwgb3BhY2l0eSBhZnRlciBgdGhpcy51cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKTtgIGJlY2F1c2UgYHRoaXMudXBkYXRlTGFiZWxNb2R1bGUob3B0aW9ucyk7YCBvdmVycml0ZXMgbG9jYWwgb3BhY2l0eSB3aXRoIGdyb3VwIG9wYWNpdHlcbiAgICBpZiAob3B0aW9ucy5vcGFjaXR5ICE9PSB1bmRlZmluZWQgJiYgTm9kZS5jaGVja09wYWNpdHkob3B0aW9ucy5vcGFjaXR5KSkge1xuICAgICAgdGhpcy5vcHRpb25zLm9wYWNpdHkgPSBvcHRpb25zLm9wYWNpdHk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTaGFwZShjdXJyZW50U2hhcGUpO1xuXG4gICAgcmV0dXJuIG9wdGlvbnMuaGlkZGVuICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5waHlzaWNzICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgaW1hZ2VzIGZyb20gdGhlIG9wdGlvbnMsIGZvciB0aGUgbm9kZXMgdGhhdCBuZWVkIHRoZW0uXG4gICAqXG4gICAqIEltYWdlcyBhcmUgYWx3YXlzIGxvYWRlZCwgZXZlbiBpZiB0aGV5IGFyZSBub3QgdXNlZCBpbiB0aGUgY3VycmVudCBzaGFwZS5cbiAgICogVGhlIHVzZXIgbWF5IHN3aXRjaCB0byBhbiBpbWFnZSBzaGFwZSBsYXRlciBvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkX2ltYWdlcygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnMuc2hhcGUgPT09IFwiY2lyY3VsYXJJbWFnZVwiIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuc2hhcGUgPT09IFwiaW1hZ2VcIlxuICAgICkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbWFnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIk9wdGlvbiBpbWFnZSBtdXN0IGJlIGRlZmluZWQgZm9yIG5vZGUgdHlwZSAnXCIgK1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNoYXBlICtcbiAgICAgICAgICAgIFwiJ1wiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pbWFnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW1hZ2VsaXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludGVybmFsIEVycm9yOiBObyBpbWFnZXMgcHJvdmlkZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuaW1hZ2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuaW1hZ2VPYmogPSB0aGlzLmltYWdlbGlzdC5sb2FkKFxuICAgICAgICB0aGlzLm9wdGlvbnMuaW1hZ2UsXG4gICAgICAgIHRoaXMub3B0aW9ucy5icm9rZW5JbWFnZSxcbiAgICAgICAgdGhpcy5pZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbWFnZS51bnNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdW5zZWxlY3RlZCBpbWFnZSBwcm92aWRlZFwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbWFnZU9iaiA9IHRoaXMuaW1hZ2VsaXN0LmxvYWQoXG4gICAgICAgIHRoaXMub3B0aW9ucy5pbWFnZS51bnNlbGVjdGVkLFxuICAgICAgICB0aGlzLm9wdGlvbnMuYnJva2VuSW1hZ2UsXG4gICAgICAgIHRoaXMuaWRcbiAgICAgICk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW1hZ2Uuc2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmltYWdlT2JqQWx0ID0gdGhpcy5pbWFnZWxpc3QubG9hZChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuaW1hZ2Uuc2VsZWN0ZWQsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmJyb2tlbkltYWdlLFxuICAgICAgICAgIHRoaXMuaWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW1hZ2VPYmpBbHQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgb3BhY2l0eSBpcyBvbmx5IGJldHdlZW4gMCBhbmQgMVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gb3BhY2l0eVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBjaGVja09wYWNpdHkob3BhY2l0eSkge1xuICAgIHJldHVybiAwIDw9IG9wYWNpdHkgJiYgb3BhY2l0eSA8PSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgb3JpZ2luIGlzICdjZW50ZXInIG9yICd0b3AtbGVmdCdcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9yaWdpblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBjaGVja0Nvb3JkaW5hdGVPcmlnaW4ob3JpZ2luKSB7XG4gICAgcmV0dXJuIG9yaWdpbiA9PT0gdW5kZWZpbmVkIHx8IG9yaWdpbiA9PT0gXCJjZW50ZXJcIiB8fCBvcmlnaW4gPT09IFwidG9wLWxlZnRcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IGdyb3VwIG9wdGlvbiB2YWx1ZXMgaW50byB0aGUgbm9kZSBvcHRpb25zLlxuICAgKlxuICAgKiBUaGUgZ3JvdXAgb3B0aW9ucyBvdmVycmlkZSB0aGUgZ2xvYmFsIG5vZGUgb3B0aW9ucywgc28gdGhlIGNvcHkgb2YgZ3JvdXAgb3B0aW9uc1xuICAgKiAgbXVzdCBoYXBwZW4gKmFmdGVyKiB0aGUgZ2xvYmFsIG5vZGUgb3B0aW9ucyBoYXZlIGJlZW4gc2V0LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBtdXN0IGFsc28gYmUgY2FsbGVkIGFsc28gaWYgdGhlIGdsb2JhbCBub2RlIG9wdGlvbnMgaGF2ZSBjaGFuZ2VkIGFuZCB0aGUgZ3JvdXAgb3B0aW9ucyBkaWQgbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50T3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3T3B0aW9ucyAgbmV3IHZhbHVlcyBmb3IgdGhlIG9wdGlvbnMsIGN1cnJlbnRseSBvbmx5IHBhc3NlZCBpbiBmb3IgY2hlY2tcbiAgICogQHBhcmFtIHtvYmplY3R9IGdyb3VwTGlzdFxuICAgKi9cbiAgc3RhdGljIHVwZGF0ZUdyb3VwT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBncm91cExpc3QpIHtcbiAgICBpZiAoZ3JvdXBMaXN0ID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gTm8gZ3JvdXBzLCBub3RoaW5nIHRvIGRvXG5cbiAgICBjb25zdCBncm91cCA9IHBhcmVudE9wdGlvbnMuZ3JvdXA7XG5cbiAgICAvLyBwYXJhbm9pYTogdGhlIHNlbGVjdGVkIGdyb3VwIGlzIGFscmVhZHkgbWVyZ2VkIGludG8gbm9kZSBvcHRpb25zLCBjaGVjay5cbiAgICBpZiAoXG4gICAgICBuZXdPcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG5ld09wdGlvbnMuZ3JvdXAgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgZ3JvdXAgIT09IG5ld09wdGlvbnMuZ3JvdXBcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJ1cGRhdGVHcm91cE9wdGlvbnM6IGdyb3VwIHZhbHVlcyBpbiBvcHRpb25zIGRvbid0IG1hdGNoLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0dyb3VwID1cbiAgICAgIHR5cGVvZiBncm91cCA9PT0gXCJudW1iZXJcIiB8fCAodHlwZW9mIGdyb3VwID09PSBcInN0cmluZ1wiICYmIGdyb3VwICE9IFwiXCIpO1xuICAgIGlmICghaGFzR3JvdXApIHJldHVybjsgLy8gY3VycmVudCBub2RlIGhhcyBubyBncm91cCwgbm8gbmVlZCB0byBtZXJnZVxuXG4gICAgY29uc3QgZ3JvdXBPYmogPSBncm91cExpc3QuZ2V0KGdyb3VwKTtcblxuICAgIGlmIChncm91cE9iai5vcGFjaXR5ICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5vcGFjaXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghTm9kZS5jaGVja09wYWNpdHkoZ3JvdXBPYmoub3BhY2l0eSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIG9wYWNpdHkuIFZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBmb3VuZDogXCIgK1xuICAgICAgICAgICAgZ3JvdXBPYmoub3BhY2l0eVxuICAgICAgICApO1xuICAgICAgICBncm91cE9iai5vcGFjaXR5ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNraXAgYW55IG5ldyBvcHRpb24gdG8gYXZvaWQgdGhlbSBiZWluZyBvdmVycmlkZGVuIGJ5IHRoZSBncm91cCBvcHRpb25zLlxuICAgIGNvbnN0IHNraXBQcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobmV3T3B0aW9ucykuZmlsdGVyKFxuICAgICAgKHApID0+IG5ld09wdGlvbnNbcF0gIT0gbnVsbFxuICAgICk7XG4gICAgLy8gQWx3YXlzIHNraXAgbWVyZ2luZyBncm91cCBmb250IG9wdGlvbnMgaW50byBwYXJlbnQ7IHRoZXNlIGFyZSByZXF1aXJlZCB0byBiZSBkaXN0aW5jdCBmb3IgbGFiZWxzXG4gICAgc2tpcFByb3BlcnRpZXMucHVzaChcImZvbnRcIik7XG4gICAgc2VsZWN0aXZlTm90RGVlcEV4dGVuZChza2lwUHJvcGVydGllcywgcGFyZW50T3B0aW9ucywgZ3JvdXBPYmopO1xuXG4gICAgLy8gdGhlIGNvbG9yIG9iamVjdCBuZWVkcyB0byBiZSBjb21wbGV0ZWx5IGRlZmluZWQuXG4gICAgLy8gU2luY2UgZ3JvdXBzIGNhbiBwYXJ0aWFsbHkgb3ZlcndyaXRlIHRoZSBjb2xvcnMsIHdlIHBhcnNlIGl0IGFnYWluLCBqdXN0IGluIGNhc2UuXG4gICAgcGFyZW50T3B0aW9ucy5jb2xvciA9IHBhcnNlQ29sb3IocGFyZW50T3B0aW9ucy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwcm9jZXNzIGFsbCBwb3NzaWJsZSBzaG9ydGhhbmRzIGluIHRoZSBuZXcgb3B0aW9ucyBhbmQgbWFrZXMgc3VyZSB0aGF0IHRoZSBwYXJlbnRPcHRpb25zIGFyZSBmdWxseSBkZWZpbmVkLlxuICAgKiBTdGF0aWMgc28gaXQgY2FuIGFsc28gYmUgdXNlZCBieSB0aGUgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudE9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld09wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dEZWxldGlvbj1mYWxzZV1cbiAgICogQHBhcmFtIHtvYmplY3R9IFtnbG9iYWxPcHRpb25zPXt9XVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2dyb3VwTGlzdF1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHBhcnNlT3B0aW9ucyhcbiAgICBwYXJlbnRPcHRpb25zLFxuICAgIG5ld09wdGlvbnMsXG4gICAgYWxsb3dEZWxldGlvbiA9IGZhbHNlLFxuICAgIGdsb2JhbE9wdGlvbnMgPSB7fSxcbiAgICBncm91cExpc3RcbiAgKSB7XG4gICAgY29uc3QgZmllbGRzID0gW1wiY29sb3JcIiwgXCJmaXhlZFwiLCBcInNoYWRvd1wiXTtcbiAgICBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kKGZpZWxkcywgcGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgYWxsb3dEZWxldGlvbik7XG5cbiAgICBOb2RlLmNoZWNrTWFzcyhuZXdPcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnRPcHRpb25zLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFOb2RlLmNoZWNrT3BhY2l0eShwYXJlbnRPcHRpb25zLm9wYWNpdHkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIG9wdGlvbiBmb3Igbm9kZSBvcGFjaXR5LiBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZm91bmQ6IFwiICtcbiAgICAgICAgICAgIHBhcmVudE9wdGlvbnMub3BhY2l0eVxuICAgICAgICApO1xuICAgICAgICBwYXJlbnRPcHRpb25zLm9wYWNpdHkgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5ld09wdGlvbnMub3BhY2l0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIU5vZGUuY2hlY2tPcGFjaXR5KG5ld09wdGlvbnMub3BhY2l0eSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIG9wYWNpdHkuIFZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBmb3VuZDogXCIgK1xuICAgICAgICAgICAgbmV3T3B0aW9ucy5vcGFjaXR5XG4gICAgICAgICk7XG4gICAgICAgIG5ld09wdGlvbnMub3BhY2l0eSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBuZXdPcHRpb25zLnNoYXBlUHJvcGVydGllcyAmJlxuICAgICAgIU5vZGUuY2hlY2tDb29yZGluYXRlT3JpZ2luKG5ld09wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW4pXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIGNvb3JkaW5hdGVPcmlnaW4sIGZvdW5kOiBcIiArXG4gICAgICAgICAgbmV3T3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuY29vcmRpbmF0ZU9yaWdpblxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBtZXJnZSB0aGUgc2hhZG93IG9wdGlvbnMgaW50byB0aGUgcGFyZW50LlxuICAgIG1lcmdlT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBcInNoYWRvd1wiLCBnbG9iYWxPcHRpb25zKTtcblxuICAgIC8vIGluZGl2aWR1YWwgc2hhcGUgbmV3T3B0aW9uc1xuICAgIGlmIChuZXdPcHRpb25zLmNvbG9yICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5jb2xvciAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcGFyc2VkQ29sb3IgPSBwYXJzZUNvbG9yKG5ld09wdGlvbnMuY29sb3IpO1xuICAgICAgZmlsbElmRGVmaW5lZChwYXJlbnRPcHRpb25zLmNvbG9yLCBwYXJzZWRDb2xvcik7XG4gICAgfSBlbHNlIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuY29sb3IgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuY29sb3IgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5jb2xvcik7IC8vIHNldCB0aGUgb2JqZWN0IGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb25zXG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHRoZSBmaXhlZCBvcHRpb25zXG4gICAgaWYgKG5ld09wdGlvbnMuZml4ZWQgIT09IHVuZGVmaW5lZCAmJiBuZXdPcHRpb25zLmZpeGVkICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG5ld09wdGlvbnMuZml4ZWQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZml4ZWQueCA9IG5ld09wdGlvbnMuZml4ZWQ7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZml4ZWQueSA9IG5ld09wdGlvbnMuZml4ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbmV3T3B0aW9ucy5maXhlZC54ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICB0eXBlb2YgbmV3T3B0aW9ucy5maXhlZC54ID09PSBcImJvb2xlYW5cIlxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJlbnRPcHRpb25zLmZpeGVkLnggPSBuZXdPcHRpb25zLmZpeGVkLng7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5ld09wdGlvbnMuZml4ZWQueSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdHlwZW9mIG5ld09wdGlvbnMuZml4ZWQueSA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcGFyZW50T3B0aW9ucy5maXhlZC55ID0gbmV3T3B0aW9ucy5maXhlZC55O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUgJiYgbmV3T3B0aW9ucy5mb250ID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmZvbnQgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5mb250KTsgLy8gc2V0IHRoZSBvYmplY3QgYmFjayB0byB0aGUgZ2xvYmFsIG9wdGlvbnNcbiAgICB9XG5cbiAgICBOb2RlLnVwZGF0ZUdyb3VwT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBncm91cExpc3QpO1xuXG4gICAgLy8gaGFuZGxlIHRoZSBzY2FsaW5nIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgbGFiZWwgcGFydFxuICAgIGlmIChuZXdPcHRpb25zLnNjYWxpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbWVyZ2VPcHRpb25zKFxuICAgICAgICBwYXJlbnRPcHRpb25zLnNjYWxpbmcsXG4gICAgICAgIG5ld09wdGlvbnMuc2NhbGluZyxcbiAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICBnbG9iYWxPcHRpb25zLnNjYWxpbmdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHt7Y29sb3I6ICosIGJvcmRlcldpZHRoOiAqLCBib3JkZXJDb2xvcjogKiwgc2l6ZTogKiwgYm9yZGVyRGFzaGVzOiAoYm9vbGVhbnxBcnJheXxhbGxPcHRpb25zLm5vZGVzLnNoYXBlUHJvcGVydGllcy5ib3JkZXJEYXNoZXN8e2Jvb2xlYW4sIGFycmF5fSksIGJvcmRlclJhZGl1czogKG51bWJlcnxhbGxPcHRpb25zLm5vZGVzLnNoYXBlUHJvcGVydGllcy5ib3JkZXJSYWRpdXN8e251bWJlcn18QXJyYXkpLCBzaGFkb3c6ICosIHNoYWRvd0NvbG9yOiAqLCBzaGFkb3dTaXplOiAqLCBzaGFkb3dYOiAqLCBzaGFkb3dZOiAqfX1cbiAgICovXG4gIGdldEZvcm1hdHRpbmdWYWx1ZXMoKSB7XG4gICAgY29uc3QgdmFsdWVzID0ge1xuICAgICAgY29sb3I6IHRoaXMub3B0aW9ucy5jb2xvci5iYWNrZ3JvdW5kLFxuICAgICAgb3BhY2l0eTogdGhpcy5vcHRpb25zLm9wYWNpdHksXG4gICAgICBib3JkZXJXaWR0aDogdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoLFxuICAgICAgYm9yZGVyQ29sb3I6IHRoaXMub3B0aW9ucy5jb2xvci5ib3JkZXIsXG4gICAgICBzaXplOiB0aGlzLm9wdGlvbnMuc2l6ZSxcbiAgICAgIGJvcmRlckRhc2hlczogdGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5ib3JkZXJEYXNoZXMsXG4gICAgICBib3JkZXJSYWRpdXM6IHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzLFxuICAgICAgc2hhZG93OiB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQsXG4gICAgICBzaGFkb3dDb2xvcjogdGhpcy5vcHRpb25zLnNoYWRvdy5jb2xvcixcbiAgICAgIHNoYWRvd1NpemU6IHRoaXMub3B0aW9ucy5zaGFkb3cuc2l6ZSxcbiAgICAgIHNoYWRvd1g6IHRoaXMub3B0aW9ucy5zaGFkb3cueCxcbiAgICAgIHNoYWRvd1k6IHRoaXMub3B0aW9ucy5zaGFkb3cueSxcbiAgICB9O1xuICAgIGlmICh0aGlzLnNlbGVjdGVkIHx8IHRoaXMuaG92ZXIpIHtcbiAgICAgIGlmICh0aGlzLmNob29zZXIgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJvcmRlcldpZHRoU2VsZWN0ZWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsdWVzLmJvcmRlcldpZHRoID0gdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoU2VsZWN0ZWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlcy5ib3JkZXJXaWR0aCAqPSAyO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZXMuY29sb3IgPSB0aGlzLm9wdGlvbnMuY29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQ7XG4gICAgICAgICAgdmFsdWVzLmJvcmRlckNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodC5ib3JkZXI7XG4gICAgICAgICAgdmFsdWVzLnNoYWRvdyA9IHRoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhvdmVyKSB7XG4gICAgICAgICAgdmFsdWVzLmNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyLmJhY2tncm91bmQ7XG4gICAgICAgICAgdmFsdWVzLmJvcmRlckNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyLmJvcmRlcjtcbiAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNob29zZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLmNob29zZXIodmFsdWVzLCB0aGlzLm9wdGlvbnMuaWQsIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuICAgICAgICBpZiAodmFsdWVzLnNoYWRvdyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93Q29sb3IgIT09IHRoaXMub3B0aW9ucy5zaGFkb3cuY29sb3IgfHxcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3dTaXplICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LnNpemUgfHxcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3dYICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LnggfHxcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3dZICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LnlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3cgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZXMuc2hhZG93ID0gdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IHRoaXMub3B0aW9ucy5vcGFjaXR5O1xuICAgICAgdmFsdWVzLmJvcmRlckNvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KHZhbHVlcy5ib3JkZXJDb2xvciwgb3BhY2l0eSk7XG4gICAgICB2YWx1ZXMuY29sb3IgPSBvdmVycmlkZU9wYWNpdHkodmFsdWVzLmNvbG9yLCBvcGFjaXR5KTtcbiAgICAgIHZhbHVlcy5zaGFkb3dDb2xvciA9IG92ZXJyaWRlT3BhY2l0eSh2YWx1ZXMuc2hhZG93Q29sb3IsIG9wYWNpdHkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICB1cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMub3B0aW9ucy5sYWJlbCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5vcHRpb25zLmxhYmVsID0gXCJcIjtcbiAgICB9XG5cbiAgICBOb2RlLnVwZGF0ZUdyb3VwT3B0aW9ucyhcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgY29sb3I6IChvcHRpb25zICYmIG9wdGlvbnMuY29sb3IpIHx8IHRoaXMuX2xvY2FsQ29sb3IgfHwgdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHRoaXMuZ3JvdXBsaXN0XG4gICAgKTtcblxuICAgIC8vXG4gICAgLy8gTm90ZTpUaGUgcHJvdG90eXBlIGNoYWluIGZvciB0aGlzLm9wdGlvbnMgaXM6XG4gICAgLy9cbiAgICAvLyB0aGlzLm9wdGlvbnMgLT4gICAgTm9kZXNIYW5kbGVyLm9wdGlvbnMgICAgLT4gTm9kZXNIYW5kbGVyLmRlZmF1bHRPcHRpb25zXG4gICAgLy8gICAgICAgICAgICAgICAgIChhbHNvOiB0aGlzLmdsb2JhbE9wdGlvbnMpXG4gICAgLy9cbiAgICAvLyBOb3RlIHRoYXQgdGhlIHByb3RvdHlwZXMgYXJlIG1lbnRpb25lZCBleHBsaWNpdGx5IGluIHRoZSBwaWxlIGxpc3QgYmVsb3c7XG4gICAgLy8gV0UgRE9OJ1QgV0FOVCBUSEUgT1JERVIgT0YgVEhFIFBST1RPVFlQRVMhISEhIEF0IGxlYXN0LCBub3QgZm9yIGZvbnQgaGFuZGxpbmcgb2YgbGFiZWxzLlxuICAgIC8vIFRoaXMgaXMgYSBnb29kIGluZGljYXRpb24gdGhhdCB0aGUgcHJvdG90eXBlIHVzYWdlIG9mIG9wdGlvbnMgaXMgZGVmaWNpZW50LlxuICAgIC8vXG4gICAgY29uc3QgY3VycmVudEdyb3VwID0gdGhpcy5ncm91cGxpc3QuZ2V0KHRoaXMub3B0aW9ucy5ncm91cCwgZmFsc2UpO1xuICAgIGNvbnN0IHBpbGUgPSBbXG4gICAgICBvcHRpb25zLCAvLyBuZXcgb3B0aW9uc1xuICAgICAgdGhpcy5vcHRpb25zLCAvLyBjdXJyZW50IG5vZGUgb3B0aW9ucywgc2VlIGNvbW1lbnQgYWJvdmUgZm9yIHByb3RvdHlwZVxuICAgICAgY3VycmVudEdyb3VwLCAvLyBncm91cCBvcHRpb25zLCBpZiBhbnlcbiAgICAgIHRoaXMuZ2xvYmFsT3B0aW9ucywgLy8gQ3VycmVudGx5IHNldCBnbG9iYWwgbm9kZSBvcHRpb25zXG4gICAgICB0aGlzLmRlZmF1bHRPcHRpb25zLCAvLyBEZWZhdWx0IGdsb2JhbCBub2RlIG9wdGlvbnNcbiAgICBdO1xuICAgIHRoaXMubGFiZWxNb2R1bGUudXBkYXRlKHRoaXMub3B0aW9ucywgcGlsZSk7XG5cbiAgICBpZiAodGhpcy5sYWJlbE1vZHVsZS5iYXNlU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJhc2VGb250U2l6ZSA9IHRoaXMubGFiZWxNb2R1bGUuYmFzZVNpemU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50U2hhcGVcbiAgICovXG4gIHVwZGF0ZVNoYXBlKGN1cnJlbnRTaGFwZSkge1xuICAgIGlmIChjdXJyZW50U2hhcGUgPT09IHRoaXMub3B0aW9ucy5zaGFwZSAmJiB0aGlzLnNoYXBlKSB7XG4gICAgICB0aGlzLnNoYXBlLnNldE9wdGlvbnModGhpcy5vcHRpb25zLCB0aGlzLmltYWdlT2JqLCB0aGlzLmltYWdlT2JqQWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2hvb3NlIGRyYXcgbWV0aG9kIGRlcGVuZGluZyBvbiB0aGUgc2hhcGVcbiAgICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLnNoYXBlKSB7XG4gICAgICAgIGNhc2UgXCJib3hcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEJveCh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjaXJjbGVcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IENpcmNsZSh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjaXJjdWxhckltYWdlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBDaXJjdWxhckltYWdlKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZSxcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VPYmosXG4gICAgICAgICAgICB0aGlzLmltYWdlT2JqQWx0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImN1c3RvbVwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgQ3VzdG9tU2hhcGUoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmN0eFJlbmRlcmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRhdGFiYXNlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBEYXRhYmFzZSh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkaWFtb25kXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBEaWFtb25kKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRvdFwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgRG90KHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImVsbGlwc2VcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEVsbGlwc2UodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaWNvblwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgSWNvbih0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbWFnZVwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgSW1hZ2UoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLFxuICAgICAgICAgICAgdGhpcy5pbWFnZU9iaixcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VPYmpBbHRcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3F1YXJlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBTcXVhcmUodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaGV4YWdvblwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgSGV4YWdvbih0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzdGFyXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBTdGFyKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IFRleHQodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidHJpYW5nbGVcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IFRyaWFuZ2xlKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRyaWFuZ2xlRG93blwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgVHJpYW5nbGVEb3duKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBFbGxpcHNlKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5uZWVkc1JlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZWxlY3QgdGhpcyBub2RlXG4gICAqL1xuICBzZWxlY3QoKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5uZWVkc1JlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB1bnNlbGVjdCB0aGlzIG5vZGVcbiAgICovXG4gIHVuc2VsZWN0KCkge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLm5lZWRzUmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBjYWxjdWxhdGVkIHNpemUgb2YgdGhlIG5vZGUsIGZvcmNlcyBpdCB0byByZWNhbGN1bGF0ZSBpdHMgc2l6ZVxuICAgKi9cbiAgbmVlZHNSZWZyZXNoKCkge1xuICAgIHRoaXMuc2hhcGUucmVmcmVzaE5lZWRlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB0aXRsZSBvZiB0aGlzIG5vZGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRpdGxlICAgIFRoZSB0aXRsZSBvZiB0aGUgbm9kZSwgb3IgdW5kZWZpbmVkIHdoZW4gbm8gdGl0bGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiBzZXQuXG4gICAqL1xuICBnZXRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRpdGxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgdG8gdGhlIGJvcmRlciBvZiB0aGUgTm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gICBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlICAgICAgICBBbmdsZSBpbiByYWRpYW5zXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IGRpc3RhbmNlICAgRGlzdGFuY2UgdG8gdGhlIGJvcmRlciBpbiBwaXhlbHNcbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLnNoYXBlLmRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBub2RlIGhhcyBhIGZpeGVkIHggYW5kIHkgcG9zaXRpb25cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59ICAgICAgdHJ1ZSBpZiBmaXhlZCwgZmFsc2UgaWYgbm90XG4gICAqL1xuICBpc0ZpeGVkKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZml4ZWQueCAmJiB0aGlzLm9wdGlvbnMuZml4ZWQueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBpZiB0aGlzIG5vZGUgaXMgc2VsZWN0ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gc2VsZWN0ZWQgICBUcnVlIGlmIG5vZGUgaXMgc2VsZWN0ZWQsIGVsc2UgZmFsc2VcbiAgICovXG4gIGlzU2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHZhbHVlIG9mIHRoZSBub2RlLiBDYW4gYmUgdW5kZWZpbmVkXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IHZhbHVlXG4gICAqL1xuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBkaW1lbnNpb25zIG9mIHRoZSBsYWJlbFxuICAgKlxuICAgKiBAcmV0dXJucyB7cmVjdH1cbiAgICovXG4gIGdldExhYmVsU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbE1vZHVsZS5zaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0IHRoZSB2YWx1ZSByYW5nZSBvZiB0aGUgbm9kZS4gVGhlIG5vZGUgd2lsbCBhZGp1c3QgaXQncyBzaXplXG4gICAqIGJhc2VkIG9uIGl0cyB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pblxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFxuICAgKi9cbiAgc2V0VmFsdWVSYW5nZShtaW4sIG1heCwgdG90YWwpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5vcHRpb25zLnNjYWxpbmcuY3VzdG9tU2NhbGluZ0Z1bmN0aW9uKFxuICAgICAgICBtaW4sXG4gICAgICAgIG1heCxcbiAgICAgICAgdG90YWwsXG4gICAgICAgIHRoaXMub3B0aW9ucy52YWx1ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNpemVEaWZmID0gdGhpcy5vcHRpb25zLnNjYWxpbmcubWF4IC0gdGhpcy5vcHRpb25zLnNjYWxpbmcubWluO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgZm9udERpZmYgPVxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1heCAtIHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1pbjtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvbnQuc2l6ZSA9XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwubWluICsgc2NhbGUgKiBmb250RGlmZjtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0aW9ucy5zaXplID0gdGhpcy5vcHRpb25zLnNjYWxpbmcubWluICsgc2NhbGUgKiBzaXplRGlmZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zLnNpemUgPSB0aGlzLmJhc2VTaXplO1xuICAgICAgdGhpcy5vcHRpb25zLmZvbnQuc2l6ZSA9IHRoaXMuYmFzZUZvbnRTaXplO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTGFiZWxNb2R1bGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgbm9kZSBpbiB0aGUgZ2l2ZW4gY2FudmFzXG4gICAqIFRoZSAyZCBjb250ZXh0IG9mIGEgSFRNTCBjYW52YXMgY2FuIGJlIHJldHJpZXZlZCBieSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gICBjdHhcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4KSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRGb3JtYXR0aW5nVmFsdWVzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hhcGUuZHJhdyhjdHgsIHRoaXMueCwgdGhpcy55LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyLCB2YWx1ZXMpIHx8XG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIHNoYXBlXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSAgIGN0eFxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goY3R4KSB7XG4gICAgdGhpcy5zaGFwZS51cGRhdGVCb3VuZGluZ0JveCh0aGlzLngsIHRoaXMueSwgY3R4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGlzIG5vZGUgaW4gdGhlIGdpdmVuIGNhbnZhc1xuICAgKiBUaGUgMmQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqL1xuICByZXNpemUoY3R4KSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRGb3JtYXR0aW5nVmFsdWVzKCk7XG4gICAgdGhpcy5zaGFwZS5yZXNpemUoY3R4LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyLCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBhbGwgdmlzdWFsIGVsZW1lbnRzIG9mIHRoaXMgbm9kZSBpbnN0YW5jZSwgaW4gd2hpY2ggdGhlIGdpdmVuXG4gICAqIHBvaW50IGZhbGxzIHdpdGhpbiB0aGUgYm91bmRpbmcgc2hhcGUuXG4gICAqXG4gICAqIEBwYXJhbSB7cG9pbnR9IHBvaW50XG4gICAqIEByZXR1cm5zIHtBcnJheS48bm9kZUNsaWNrSXRlbXxub2RlTGFiZWxDbGlja0l0ZW0+fSBsaXN0IHdpdGggdGhlIGl0ZW1zIHdoaWNoIGFyZSBvbiB0aGUgcG9pbnRcbiAgICovXG4gIGdldEl0ZW1zT25Qb2ludChwb2ludCkge1xuICAgIGNvbnN0IHJldCA9IFtdO1xuXG4gICAgaWYgKHRoaXMubGFiZWxNb2R1bGUudmlzaWJsZSgpKSB7XG4gICAgICBpZiAocG9pbnRJblJlY3QodGhpcy5sYWJlbE1vZHVsZS5nZXRTaXplKCksIHBvaW50KSkge1xuICAgICAgICByZXQucHVzaCh7IG5vZGVJZDogdGhpcy5pZCwgbGFiZWxJZDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9pbnRJblJlY3QodGhpcy5zaGFwZS5ib3VuZGluZ0JveCwgcG9pbnQpKSB7XG4gICAgICByZXQucHVzaCh7IG5vZGVJZDogdGhpcy5pZCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgb2JqZWN0IGlzIG92ZXJsYXBwaW5nIHdpdGggdGhlIHByb3ZpZGVkIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqICAgYW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b21cbiAgICogQHJldHVybnMge2Jvb2xlYW59ICAgICBUcnVlIGlmIGxvY2F0aW9uIGlzIGxvY2F0ZWQgb24gbm9kZVxuICAgKi9cbiAgaXNPdmVybGFwcGluZ1dpdGgob2JqKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hhcGUubGVmdCA8IG9iai5yaWdodCAmJlxuICAgICAgdGhpcy5zaGFwZS5sZWZ0ICsgdGhpcy5zaGFwZS53aWR0aCA+IG9iai5sZWZ0ICYmXG4gICAgICB0aGlzLnNoYXBlLnRvcCA8IG9iai5ib3R0b20gJiZcbiAgICAgIHRoaXMuc2hhcGUudG9wICsgdGhpcy5zaGFwZS5oZWlnaHQgPiBvYmoudG9wXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIG9iamVjdCBpcyBvdmVybGFwcGluZyB3aXRoIHRoZSBwcm92aWRlZCBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iaiAgIGFuIG9iamVjdCB3aXRoIHBhcmFtZXRlcnMgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAgICAgVHJ1ZSBpZiBsb2NhdGlvbiBpcyBsb2NhdGVkIG9uIG5vZGVcbiAgICovXG4gIGlzQm91bmRpbmdCb3hPdmVybGFwcGluZ1dpdGgob2JqKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hhcGUuYm91bmRpbmdCb3gubGVmdCA8IG9iai5yaWdodCAmJlxuICAgICAgdGhpcy5zaGFwZS5ib3VuZGluZ0JveC5yaWdodCA+IG9iai5sZWZ0ICYmXG4gICAgICB0aGlzLnNoYXBlLmJvdW5kaW5nQm94LnRvcCA8IG9iai5ib3R0b20gJiZcbiAgICAgIHRoaXMuc2hhcGUuYm91bmRpbmdCb3guYm90dG9tID4gb2JqLnRvcFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdmFsaWQgdmFsdWVzIGZvciBtYXNzXG4gICAqXG4gICAqIFRoZSBtYXNzIG1heSBub3QgYmUgbmVnYXRpdmUgb3IgemVyby4gSWYgaXQgaXMsIHJlc2V0IHRvIDFcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBpZFxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgY2hlY2tNYXNzKG9wdGlvbnMsIGlkKSB7XG4gICAgaWYgKG9wdGlvbnMubWFzcyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMubWFzcyA8PSAwKSB7XG4gICAgICBsZXQgc3RySWQgPSBcIlwiO1xuICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3RySWQgPSBcIiBpbiBub2RlIGlkOiBcIiArIGlkO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCIlY05lZ2F0aXZlIG9yIHplcm8gbWFzcyBkaXNhbGxvd2VkXCIgKyBzdHJJZCArIFwiLCBzZXR0aW5nIG1hc3MgdG8gMS5cIixcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFXG4gICAgICApO1xuICAgICAgb3B0aW9ucy5tYXNzID0gMTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTm9kZTtcbiIsICJpbXBvcnQgeyBicmlkZ2VPYmplY3QsIGZvckVhY2ggfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBEYXRhU2V0LCBpc0RhdGFWaWV3TGlrZSB9IGZyb20gXCJ2aXMtZGF0YS9lc25leHRcIjtcbmltcG9ydCBOb2RlIGZyb20gXCIuL2NvbXBvbmVudHMvTm9kZVwiO1xuXG4vKipcbiAqIEhhbmRsZXIgZm9yIE5vZGVzXG4gKi9cbmNsYXNzIE5vZGVzSGFuZGxlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0ltYWdlc30gaW1hZ2VzXG4gICAqIEBwYXJhbSB7QXJyYXkuPEdyb3VwPn0gZ3JvdXBzXG4gICAqIEBwYXJhbSB7TGF5b3V0RW5naW5lfSBsYXlvdXRFbmdpbmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGltYWdlcywgZ3JvdXBzLCBsYXlvdXRFbmdpbmUpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuaW1hZ2VzID0gaW1hZ2VzO1xuICAgIHRoaXMuZ3JvdXBzID0gZ3JvdXBzO1xuICAgIHRoaXMubGF5b3V0RW5naW5lID0gbGF5b3V0RW5naW5lO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBub2RlIEFQSSBpbiB0aGUgYm9keSBjb250YWluZXJcbiAgICB0aGlzLmJvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGUgPSB0aGlzLmNyZWF0ZS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5ub2Rlc0xpc3RlbmVycyA9IHtcbiAgICAgIGFkZDogKGV2ZW50LCBwYXJhbXMpID0+IHtcbiAgICAgICAgdGhpcy5hZGQocGFyYW1zLml0ZW1zKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlKHBhcmFtcy5pdGVtcywgcGFyYW1zLmRhdGEsIHBhcmFtcy5vbGREYXRhKTtcbiAgICAgIH0sXG4gICAgICByZW1vdmU6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlKHBhcmFtcy5pdGVtcyk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICBib3JkZXJXaWR0aFNlbGVjdGVkOiB1bmRlZmluZWQsXG4gICAgICBicm9rZW5JbWFnZTogdW5kZWZpbmVkLFxuICAgICAgY29sb3I6IHtcbiAgICAgICAgYm9yZGVyOiBcIiMyQjdDRTlcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjOTdDMkZDXCIsXG4gICAgICAgIGhpZ2hsaWdodDoge1xuICAgICAgICAgIGJvcmRlcjogXCIjMkI3Q0U5XCIsXG4gICAgICAgICAgYmFja2dyb3VuZDogXCIjRDJFNUZGXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgYm9yZGVyOiBcIiMyQjdDRTlcIixcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBcIiNEMkU1RkZcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBvcGFjaXR5OiB1bmRlZmluZWQsIC8vIG51bWJlciBiZXR3ZWVuIDAgYW5kIDFcbiAgICAgIGZpeGVkOiB7XG4gICAgICAgIHg6IGZhbHNlLFxuICAgICAgICB5OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBmb250OiB7XG4gICAgICAgIGNvbG9yOiBcIiMzNDM0MzRcIixcbiAgICAgICAgc2l6ZTogMTQsIC8vIHB4XG4gICAgICAgIGZhY2U6IFwiYXJpYWxcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCJub25lXCIsXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLCAvLyBweFxuICAgICAgICBzdHJva2VDb2xvcjogXCIjZmZmZmZmXCIsXG4gICAgICAgIGFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICB2YWRqdXN0OiAwLFxuICAgICAgICBtdWx0aTogZmFsc2UsXG4gICAgICAgIGJvbGQ6IHtcbiAgICAgICAgICBtb2Q6IFwiYm9sZFwiLFxuICAgICAgICB9LFxuICAgICAgICBib2xkaXRhbDoge1xuICAgICAgICAgIG1vZDogXCJib2xkIGl0YWxpY1wiLFxuICAgICAgICB9LFxuICAgICAgICBpdGFsOiB7XG4gICAgICAgICAgbW9kOiBcIml0YWxpY1wiLFxuICAgICAgICB9LFxuICAgICAgICBtb25vOiB7XG4gICAgICAgICAgbW9kOiBcIlwiLFxuICAgICAgICAgIHNpemU6IDE1LCAvLyBweFxuICAgICAgICAgIGZhY2U6IFwibW9ub3NwYWNlXCIsXG4gICAgICAgICAgdmFkanVzdDogMixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBncm91cDogdW5kZWZpbmVkLFxuICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgIGljb246IHtcbiAgICAgICAgZmFjZTogXCJGb250QXdlc29tZVwiLCAvLydGb250QXdlc29tZScsXG4gICAgICAgIGNvZGU6IHVuZGVmaW5lZCwgLy8nXFx1ZjAwNycsXG4gICAgICAgIHNpemU6IDUwLCAvLzUwLFxuICAgICAgICBjb2xvcjogXCIjMkI3Q0U5XCIsIC8vJyNhYTAwZmYnXG4gICAgICB9LFxuICAgICAgaW1hZ2U6IHVuZGVmaW5lZCwgLy8gLS0+IFVSTFxuICAgICAgaW1hZ2VQYWRkaW5nOiB7XG4gICAgICAgIC8vIG9ubHkgZm9yIGltYWdlIHNoYXBlXG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgIH0sXG4gICAgICBsYWJlbDogdW5kZWZpbmVkLFxuICAgICAgbGFiZWxIaWdobGlnaHRCb2xkOiB0cnVlLFxuICAgICAgbGV2ZWw6IHVuZGVmaW5lZCxcbiAgICAgIG1hcmdpbjoge1xuICAgICAgICB0b3A6IDUsXG4gICAgICAgIHJpZ2h0OiA1LFxuICAgICAgICBib3R0b206IDUsXG4gICAgICAgIGxlZnQ6IDUsXG4gICAgICB9LFxuICAgICAgbWFzczogMSxcbiAgICAgIHBoeXNpY3M6IHRydWUsXG4gICAgICBzY2FsaW5nOiB7XG4gICAgICAgIG1pbjogMTAsXG4gICAgICAgIG1heDogMzAsXG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgbWluOiAxNCxcbiAgICAgICAgICBtYXg6IDMwLFxuICAgICAgICAgIG1heFZpc2libGU6IDMwLFxuICAgICAgICAgIGRyYXdUaHJlc2hvbGQ6IDUsXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbVNjYWxpbmdGdW5jdGlvbjogZnVuY3Rpb24gKG1pbiwgbWF4LCB0b3RhbCwgdmFsdWUpIHtcbiAgICAgICAgICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICAgICAgICAgIHJldHVybiAwLjU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gMSAvIChtYXggLSBtaW4pO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsICh2YWx1ZSAtIG1pbikgKiBzY2FsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNoYWRvdzoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgY29sb3I6IFwicmdiYSgwLDAsMCwwLjUpXCIsXG4gICAgICAgIHNpemU6IDEwLFxuICAgICAgICB4OiA1LFxuICAgICAgICB5OiA1LFxuICAgICAgfSxcbiAgICAgIHNoYXBlOiBcImVsbGlwc2VcIixcbiAgICAgIHNoYXBlUHJvcGVydGllczoge1xuICAgICAgICBib3JkZXJEYXNoZXM6IGZhbHNlLCAvLyBvbmx5IGZvciBib3JkZXJzXG4gICAgICAgIGJvcmRlclJhZGl1czogNiwgLy8gb25seSBmb3IgYm94IHNoYXBlXG4gICAgICAgIGludGVycG9sYXRpb246IHRydWUsIC8vIG9ubHkgZm9yIGltYWdlIGFuZCBjaXJjdWxhckltYWdlIHNoYXBlc1xuICAgICAgICB1c2VJbWFnZVNpemU6IGZhbHNlLCAvLyBvbmx5IGZvciBpbWFnZSBhbmQgY2lyY3VsYXJJbWFnZSBzaGFwZXNcbiAgICAgICAgdXNlQm9yZGVyV2l0aEltYWdlOiBmYWxzZSwgLy8gb25seSBmb3IgaW1hZ2Ugc2hhcGVcbiAgICAgICAgY29vcmRpbmF0ZU9yaWdpbjogXCJjZW50ZXJcIiwgLy8gb25seSBmb3IgaW1hZ2UgYW5kIGNpcmN1bGFySW1hZ2Ugc2hhcGVzXG4gICAgICB9LFxuICAgICAgc2l6ZTogMjUsXG4gICAgICB0aXRsZTogdW5kZWZpbmVkLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIHg6IHVuZGVmaW5lZCxcbiAgICAgIHk6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgLy8gUHJvdGVjdCBmcm9tIGlkaW9jeVxuICAgIGlmICh0aGlzLmRlZmF1bHRPcHRpb25zLm1hc3MgPD0gMCkge1xuICAgICAgdGhyb3cgXCJJbnRlcm5hbCBlcnJvcjogbWFzcyBpbiBkZWZhdWx0T3B0aW9ucyBvZiBOb2Rlc0hhbmRsZXIgbWF5IG5vdCBiZSB6ZXJvIG9yIG5lZ2F0aXZlXCI7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gYnJpZGdlT2JqZWN0KHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICAvLyByZWZyZXNoIHRoZSBub2Rlcy4gVXNlZCB3aGVuIHJldmVydGluZyBmcm9tIGhpZXJhcmNoaWNhbCBsYXlvdXRcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInJlZnJlc2hOb2Rlc1wiLCB0aGlzLnJlZnJlc2guYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJyZWZyZXNoXCIsIHRoaXMucmVmcmVzaC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgZm9yRWFjaCh0aGlzLm5vZGVzTGlzdGVuZXJzLCAoY2FsbGJhY2ssIGV2ZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmJvZHkuZGF0YS5ub2RlcykgdGhpcy5ib2R5LmRhdGEubm9kZXMub2ZmKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGU7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycy5hZGQ7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycy51cGRhdGU7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycy5yZW1vdmU7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgTm9kZS5wYXJzZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgLy8gTmVlZCB0byBzZXQgb3BhY2l0eSBoZXJlIGJlY2F1c2UgTm9kZS5wYXJzZU9wdGlvbnMgaXMgYWxzbyB1c2VkIGZvciBncm91cHMsXG4gICAgICAvLyBpZiB5b3Ugc2V0IG9wYWNpdHkgaW4gTm9kZS5wYXJzZU9wdGlvbnMgaXQgb3ZlcndyaXRlcyBncm91cCBvcGFjaXR5LlxuICAgICAgaWYgKG9wdGlvbnMub3BhY2l0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBOdW1iZXIuaXNOYU4ob3B0aW9ucy5vcGFjaXR5KSB8fFxuICAgICAgICAgICFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5vcGFjaXR5KSB8fFxuICAgICAgICAgIG9wdGlvbnMub3BhY2l0eSA8IDAgfHxcbiAgICAgICAgICBvcHRpb25zLm9wYWNpdHkgPiAxXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIG9wYWNpdHkuIFZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBmb3VuZDogXCIgK1xuICAgICAgICAgICAgICBvcHRpb25zLm9wYWNpdHlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5vcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgc2hhcGUgaW4gYWxsIG5vZGVzXG4gICAgICBpZiAob3B0aW9ucy5zaGFwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS51cGRhdGVTaGFwZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgdGhlIGxhYmVscyBvZiBub2RlcyBpZiBhbnkgcmVsZXZhbnQgb3B0aW9ucyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5mb250ICE9PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAgIHR5cGVvZiBvcHRpb25zLndpZHRoQ29uc3RyYWludCAhPT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5oZWlnaHRDb25zdHJhaW50ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBub2RlSWQgb2YgT2JqZWN0LmtleXModGhpcy5ib2R5Lm5vZGVzKSkge1xuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLnVwZGF0ZUxhYmVsTW9kdWxlKCk7XG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0ubmVlZHNSZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIHRoZSBzaGFwZSBzaXplIGluIGFsbCBub2Rlc1xuICAgICAgaWYgKG9wdGlvbnMuc2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS5uZWVkc1JlZnJlc2goKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgdmFyaWFibGVzIGlmIG5lZWRlZFxuICAgICAgaWYgKG9wdGlvbnMuaGlkZGVuICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5waHlzaWNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgZGF0YSBzZXQgd2l0aCBub2RlcyBmb3IgdGhlIG5ldHdvcmtcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IERhdGFTZXQgfCBEYXRhVmlld30gbm9kZXMgICAgICAgICBUaGUgZGF0YSBjb250YWluaW5nIHRoZSBub2Rlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9Ob3RFbWl0PWZhbHNlXSAtIFN1cHByZXNzIGRhdGEgY2hhbmdlZCBldmVudC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNldERhdGEobm9kZXMsIGRvTm90RW1pdCA9IGZhbHNlKSB7XG4gICAgY29uc3Qgb2xkTm9kZXNEYXRhID0gdGhpcy5ib2R5LmRhdGEubm9kZXM7XG5cbiAgICBpZiAoaXNEYXRhVmlld0xpa2UoXCJpZFwiLCBub2RlcykpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzID0gbm9kZXM7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5vZGVzKSkge1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMgPSBuZXcgRGF0YVNldCgpO1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuYWRkKG5vZGVzKTtcbiAgICB9IGVsc2UgaWYgKCFub2Rlcykge1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMgPSBuZXcgRGF0YVNldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXkgb3IgRGF0YVNldCBleHBlY3RlZFwiKTtcbiAgICB9XG5cbiAgICBpZiAob2xkTm9kZXNEYXRhKSB7XG4gICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIG9sZCBkYXRhc2V0XG4gICAgICBmb3JFYWNoKHRoaXMubm9kZXNMaXN0ZW5lcnMsIGZ1bmN0aW9uIChjYWxsYmFjaywgZXZlbnQpIHtcbiAgICAgICAgb2xkTm9kZXNEYXRhLm9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGRyYXduIG5vZGVzXG4gICAgdGhpcy5ib2R5Lm5vZGVzID0ge307XG5cbiAgICBpZiAodGhpcy5ib2R5LmRhdGEubm9kZXMpIHtcbiAgICAgIC8vIHN1YnNjcmliZSB0byBuZXcgZGF0YXNldFxuICAgICAgY29uc3QgbWUgPSB0aGlzO1xuICAgICAgZm9yRWFjaCh0aGlzLm5vZGVzTGlzdGVuZXJzLCBmdW5jdGlvbiAoY2FsbGJhY2ssIGV2ZW50KSB7XG4gICAgICAgIG1lLmJvZHkuZGF0YS5ub2Rlcy5vbihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGRyYXcgYWxsIG5ldyBub2Rlc1xuICAgICAgY29uc3QgaWRzID0gdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0SWRzKCk7XG4gICAgICB0aGlzLmFkZChpZHMsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChkb05vdEVtaXQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbm9kZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXSB8IHN0cmluZ1tdfSBpZHNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9Ob3RFbWl0PWZhbHNlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkKGlkcywgZG9Ob3RFbWl0ID0gZmFsc2UpIHtcbiAgICBsZXQgaWQ7XG4gICAgY29uc3QgbmV3Tm9kZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWQgPSBpZHNbaV07XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0KGlkKTtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZShwcm9wZXJ0aWVzKTtcbiAgICAgIG5ld05vZGVzLnB1c2gobm9kZSk7XG4gICAgICB0aGlzLmJvZHkubm9kZXNbaWRdID0gbm9kZTsgLy8gbm90ZTogdGhpcyBtYXkgcmVwbGFjZSBhbiBleGlzdGluZyBub2RlXG4gICAgfVxuXG4gICAgdGhpcy5sYXlvdXRFbmdpbmUucG9zaXRpb25Jbml0aWFsbHkobmV3Tm9kZXMpO1xuXG4gICAgaWYgKGRvTm90RW1pdCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBub2Rlcywgb3IgY3JlYXRlIHRoZW0gd2hlbiBub3QgeWV0IGV4aXN0aW5nXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzIGlkJ3Mgb2YgY2hhbmdlZCBub2Rlc1xuICAgKiBAcGFyYW0ge0FycmF5fSBjaGFuZ2VkRGF0YSBhcnJheSB3aXRoIGNoYW5nZWQgZGF0YVxuICAgKiBAcGFyYW0ge0FycmF5fHVuZGVmaW5lZH0gb2xkRGF0YSBvcHRpb25hbDsgYXJyYXkgd2l0aCBwcmV2aW91cyBkYXRhXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1cGRhdGUoaWRzLCBjaGFuZ2VkRGF0YSwgb2xkRGF0YSkge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgIGxldCBub2RlID0gbm9kZXNbaWRdO1xuICAgICAgY29uc3QgZGF0YSA9IGNoYW5nZWREYXRhW2ldO1xuICAgICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyB1cGRhdGUgbm9kZVxuICAgICAgICBpZiAobm9kZS5zZXRPcHRpb25zKGRhdGEpKSB7XG4gICAgICAgICAgZGF0YUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIC8vIGNyZWF0ZSBub2RlXG4gICAgICAgIG5vZGUgPSB0aGlzLmNyZWF0ZShkYXRhKTtcbiAgICAgICAgbm9kZXNbaWRdID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWRhdGFDaGFuZ2VkICYmIG9sZERhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ2hlY2sgZm9yIGFueSBjaGFuZ2VzIHdoaWNoIHNob3VsZCB0cmlnZ2VyIGEgbGF5b3V0IHJlY2FsY3VsYXRpb25cbiAgICAgIC8vIEZvciBub3csIHRoaXMgaXMganVzdCAnbGV2ZWwnIGZvciBoaWVyYXJjaGljYWwgbGF5b3V0XG4gICAgICAvLyBBc3N1bXB0aW9uOiBvbGQgYW5kIG5ldyBkYXRhIGFycmFuZ2VkIGluIHNhbWUgb3JkZXI7IGF0IHRpbWUgb2Ygd3JpdGluZywgdGhpcyBob2xkcy5cbiAgICAgIGRhdGFDaGFuZ2VkID0gY2hhbmdlZERhdGEuc29tZShmdW5jdGlvbiAobmV3VmFsdWUsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gb2xkRGF0YVtpbmRleF07XG4gICAgICAgIHJldHVybiBvbGRWYWx1ZSAmJiBvbGRWYWx1ZS5sZXZlbCAhPT0gbmV3VmFsdWUubGV2ZWw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YUNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YVVwZGF0ZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBleGlzdGluZyBub2Rlcy4gSWYgbm9kZXMgZG8gbm90IGV4aXN0LCB0aGUgbWV0aG9kIHdpbGwganVzdCBpZ25vcmUgaXQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZW1vdmUoaWRzKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICBkZWxldGUgbm9kZXNbaWRdO1xuICAgIH1cblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIGEgbm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcGVydGllc1xuICAgKiBAcGFyYW0ge2NsYXNzfSBbY29uc3RydWN0b3JDbGFzcz1Ob2RlLmRlZmF1bHRdXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgY3JlYXRlKHByb3BlcnRpZXMsIGNvbnN0cnVjdG9yQ2xhc3MgPSBOb2RlKSB7XG4gICAgcmV0dXJuIG5ldyBjb25zdHJ1Y3RvckNsYXNzKFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHRoaXMuYm9keSxcbiAgICAgIHRoaXMuaW1hZ2VzLFxuICAgICAgdGhpcy5ncm91cHMsXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0aGlzLmRlZmF1bHRPcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjbGVhclBvc2l0aW9ucz1mYWxzZV1cbiAgICovXG4gIHJlZnJlc2goY2xlYXJQb3NpdGlvbnMgPSBmYWxzZSkge1xuICAgIGZvckVhY2godGhpcy5ib2R5Lm5vZGVzLCAobm9kZSwgbm9kZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0KG5vZGVJZCk7XG4gICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjbGVhclBvc2l0aW9ucyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIG5vZGUuc2V0T3B0aW9ucyh7IHg6IG51bGwsIHk6IG51bGwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5zZXRPcHRpb25zKHsgZml4ZWQ6IGZhbHNlIH0pO1xuICAgICAgICBub2RlLnNldE9wdGlvbnMoZGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcG9zaXRpb25zIG9mIHRoZSBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZS5pZD4gfCBzdHJpbmd9IFtpZHNdICAtLT4gb3B0aW9uYWwsIGNhbiBiZSBhcnJheSBvZiBub2RlSWRzLCBjYW4gYmUgc3RyaW5nXG4gICAqIEByZXR1cm5zIHt7fX1cbiAgICovXG4gIGdldFBvc2l0aW9ucyhpZHMpIHtcbiAgICBjb25zdCBkYXRhQXJyYXkgPSB7fTtcbiAgICBpZiAoaWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGlkcykgPT09IHRydWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW2lkc1tpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpZHNbaV1dO1xuICAgICAgICAgICAgZGF0YUFycmF5W2lkc1tpXV0gPSB7XG4gICAgICAgICAgICAgIHg6IE1hdGgucm91bmQobm9kZS54KSxcbiAgICAgICAgICAgICAgeTogTWF0aC5yb3VuZChub2RlLnkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmJvZHkubm9kZXNbaWRzXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpZHNdO1xuICAgICAgICAgIGRhdGFBcnJheVtpZHNdID0geyB4OiBNYXRoLnJvdW5kKG5vZGUueCksIHk6IE1hdGgucm91bmQobm9kZS55KSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldXTtcbiAgICAgICAgZGF0YUFycmF5W3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV0gPSB7XG4gICAgICAgICAgeDogTWF0aC5yb3VuZChub2RlLngpLFxuICAgICAgICAgIHk6IE1hdGgucm91bmQobm9kZS55KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFBcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHggeSBwb3NpdGlvbiBvZiBhIHNwZWNpZmljIGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIGlkIHRvIHJldHJpZXZlLlxuICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIG5vIGlkIGlzIGluY2x1ZGVkLlxuICAgKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gSWYgYW4gaW52YWxpZCBpZCBpcyBwcm92aWRlZC5cbiAgICogQHJldHVybnMge3sgeDogbnVtYmVyLCB5OiBudW1iZXIgfX0gUmV0dXJucyBYLCBZIGNhbnZhcyBwb3NpdGlvbiBvZiB0aGUgbm9kZSB3aXRoIGdpdmVuIGlkLlxuICAgKi9cbiAgZ2V0UG9zaXRpb24oaWQpIHtcbiAgICBpZiAoaWQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gaWQgd2FzIHNwZWNpZmllZCBmb3IgZ2V0UG9zaXRpb24gbWV0aG9kLlwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYm9keS5ub2Rlc1tpZF0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXG4gICAgICAgIGBOb2RlSWQgcHJvdmlkZWQgZm9yIGdldFBvc2l0aW9uIGRvZXMgbm90IGV4aXN0LiBQcm92aWRlZDogJHtpZH1gXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBNYXRoLnJvdW5kKHRoaXMuYm9keS5ub2Rlc1tpZF0ueCksXG4gICAgICAgIHk6IE1hdGgucm91bmQodGhpcy5ib2R5Lm5vZGVzW2lkXS55KSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIFhZIHBvc2l0aW9ucyBvZiB0aGUgbm9kZXMgaW50byB0aGUgZGF0YXNldC5cbiAgICovXG4gIHN0b3JlUG9zaXRpb25zKCkge1xuICAgIC8vIHRvZG86IGFkZCBzdXBwb3J0IGZvciBjbHVzdGVycyBhbmQgaGllcmFyY2hpY2FsLlxuICAgIGNvbnN0IGRhdGFBcnJheSA9IFtdO1xuICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmJvZHkuZGF0YS5ub2Rlcy5nZXREYXRhU2V0KCk7XG5cbiAgICBmb3IgKGNvbnN0IGRzTm9kZSBvZiBkYXRhc2V0LmdldCgpKSB7XG4gICAgICBjb25zdCBpZCA9IGRzTm9kZS5pZDtcbiAgICAgIGNvbnN0IGJvZHlOb2RlID0gdGhpcy5ib2R5Lm5vZGVzW2lkXTtcbiAgICAgIGNvbnN0IHggPSBNYXRoLnJvdW5kKGJvZHlOb2RlLngpO1xuICAgICAgY29uc3QgeSA9IE1hdGgucm91bmQoYm9keU5vZGUueSk7XG5cbiAgICAgIGlmIChkc05vZGUueCAhPT0geCB8fCBkc05vZGUueSAhPT0geSkge1xuICAgICAgICBkYXRhQXJyYXkucHVzaCh7IGlkLCB4LCB5IH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRhdGFzZXQudXBkYXRlKGRhdGFBcnJheSk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBib3VuZGluZyBib3ggb2YgYSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKiBAcmV0dXJucyB7anwqfVxuICAgKi9cbiAgZ2V0Qm91bmRpbmdCb3gobm9kZUlkKSB7XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS5zaGFwZS5ib3VuZGluZ0JveDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBJZHMgb2Ygbm9kZXMgY29ubmVjdGVkIHRvIHRoaXMgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHBhcmFtIHsndG8nfCdmcm9tJ3x1bmRlZmluZWR9IGRpcmVjdGlvbiB2YWx1ZXMgJ2Zyb20nIGFuZCAndG8nIHNlbGVjdCByZXNwZWN0aXZlbHkgcGFyZW50IGFuZCBjaGlsZCBub2RlcyBvbmx5LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFueSBvdGhlciB2YWx1ZSByZXR1cm5zIGJvdGggcGFyZW50IGFuZCBjaGlsZCBub2Rlcy5cbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0Q29ubmVjdGVkTm9kZXMobm9kZUlkLCBkaXJlY3Rpb24pIHtcbiAgICBjb25zdCBub2RlTGlzdCA9IFtdO1xuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICBjb25zdCBub2RlT2JqID0ge307IC8vIHVzZWQgdG8gcXVpY2tseSBjaGVjayBpZiBub2RlIGFscmVhZHkgZXhpc3RzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZWRnZSA9IG5vZGUuZWRnZXNbaV07XG4gICAgICAgIGlmIChkaXJlY3Rpb24gIT09IFwidG9cIiAmJiBlZGdlLnRvSWQgPT0gbm9kZS5pZCkge1xuICAgICAgICAgIC8vIHRoZXNlIGFyZSBkb3VibGUgZXF1YWxzIHNpbmNlIGlkcyBjYW4gYmUgbnVtZXJpYyBvciBzdHJpbmdcbiAgICAgICAgICBpZiAobm9kZU9ialtlZGdlLmZyb21JZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbm9kZUxpc3QucHVzaChlZGdlLmZyb21JZCk7XG4gICAgICAgICAgICBub2RlT2JqW2VkZ2UuZnJvbUlkXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAhPT0gXCJmcm9tXCIgJiYgZWRnZS5mcm9tSWQgPT0gbm9kZS5pZCkge1xuICAgICAgICAgIC8vIHRoZXNlIGFyZSBkb3VibGUgZXF1YWxzIHNpbmNlIGlkcyBjYW4gYmUgbnVtZXJpYyBvciBzdHJpbmdcbiAgICAgICAgICBpZiAobm9kZU9ialtlZGdlLnRvSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5vZGVMaXN0LnB1c2goZWRnZS50b0lkKTtcbiAgICAgICAgICAgIG5vZGVPYmpbZWRnZS50b0lkXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2RlTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGlkcyBvZiB0aGUgZWRnZXMgY29ubmVjdGVkIHRvIHRoaXMgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBnZXRDb25uZWN0ZWRFZGdlcyhub2RlSWQpIHtcbiAgICBjb25zdCBlZGdlTGlzdCA9IFtdO1xuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWRnZUxpc3QucHVzaChub2RlLmVkZ2VzW2ldLmlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJOb2RlSWQgcHJvdmlkZWQgZm9yIGdldENvbm5lY3RlZEVkZ2VzIGRvZXMgbm90IGV4aXN0LiBQcm92aWRlZDogXCIsXG4gICAgICAgIG5vZGVJZFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGVkZ2VMaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgYSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKi9cbiAgbW92ZU5vZGUobm9kZUlkLCB4LCB5KSB7XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLnggPSBOdW1iZXIoeCk7XG4gICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS55ID0gTnVtYmVyKHkpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJOb2RlIGlkIHN1cHBsaWVkIHRvIG1vdmVOb2RlIGRvZXMgbm90IGV4aXN0LiBQcm92aWRlZDogXCIsXG4gICAgICAgIG5vZGVJZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTm9kZXNIYW5kbGVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkZXNjcmlwdG9yKSB7XG4gIHJldHVybiBkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQgJiYgKGhhc093bihkZXNjcmlwdG9yLCAndmFsdWUnKSB8fCBoYXNPd24oZGVzY3JpcHRvciwgJ3dyaXRhYmxlJykpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWRhdGEtZGVzY3JpcHRvcicpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYFJlZmxlY3QuZ2V0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5nZXRcbmZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3BlcnR5S2V5IC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiBhcmd1bWVudHNbMl07XG4gIHZhciBkZXNjcmlwdG9yLCBwcm90b3R5cGU7XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZih0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IpIHJldHVybiBpc0RhdGFEZXNjcmlwdG9yKGRlc2NyaXB0b3IpXG4gICAgPyBkZXNjcmlwdG9yLnZhbHVlXG4gICAgOiBkZXNjcmlwdG9yLmdldCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogY2FsbChkZXNjcmlwdG9yLmdldCwgcmVjZWl2ZXIpO1xuICBpZiAoaXNPYmplY3QocHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG90eXBlLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBnZXQ6IGdldFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0LmdldCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUmVmbGVjdC5nZXQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgImltcG9ydCBfUmVmbGVjdCRnZXQgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9yZWZsZWN0L2dldC5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmltcG9ydCBfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvciBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanNcIjtcbmltcG9ydCBzdXBlclByb3BCYXNlIGZyb20gXCIuL3N1cGVyUHJvcEJhc2UuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXQoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBfUmVmbGVjdCRnZXQpIHtcbiAgICB2YXIgX2NvbnRleHQ7XG4gICAgX2dldCA9IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9SZWZsZWN0JGdldCkuY2FsbChfY29udGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgX2dldCA9IGZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICAgIHZhciBiYXNlID0gc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgdmFyIGRlc2MgPSBfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7XG4gICAgICBpZiAoZGVzYy5nZXQpIHtcbiAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiByZWNlaXZlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVzYy52YWx1ZTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBfZ2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwgImltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkge1xuICB3aGlsZSAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSkge1xuICAgIG9iamVjdCA9IGdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLWh5cG90IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgJGh5cG90ID0gTWF0aC5oeXBvdDtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xuXG4vLyBDaHJvbWUgNzcgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD05NTQ2XG52YXIgRk9SQ0VEID0gISEkaHlwb3QgJiYgJGh5cG90KEluZmluaXR5LCBOYU4pICE9PSBJbmZpbml0eTtcblxuLy8gYE1hdGguaHlwb3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmh5cG90XG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGFyaXR5OiAyLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikge1xuICAgIHZhciBzdW0gPSAwO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGxhcmcgPSAwO1xuICAgIHZhciBhcmcsIGRpdjtcbiAgICB3aGlsZSAoaSA8IGFMZW4pIHtcbiAgICAgIGFyZyA9IGFicyhhcmd1bWVudHNbaSsrXSk7XG4gICAgICBpZiAobGFyZyA8IGFyZykge1xuICAgICAgICBkaXYgPSBsYXJnIC8gYXJnO1xuICAgICAgICBzdW0gPSBzdW0gKiBkaXYgKiBkaXYgKyAxO1xuICAgICAgICBsYXJnID0gYXJnO1xuICAgICAgfSBlbHNlIGlmIChhcmcgPiAwKSB7XG4gICAgICAgIGRpdiA9IGFyZyAvIGxhcmc7XG4gICAgICAgIHN1bSArPSBkaXYgKiBkaXY7XG4gICAgICB9IGVsc2Ugc3VtICs9IGFyZztcbiAgICB9XG4gICAgcmV0dXJuIGxhcmcgPT09IEluZmluaXR5ID8gSW5maW5pdHkgOiBsYXJnICogc3FydChzdW0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hdGguaHlwb3QnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk1hdGguaHlwb3Q7XG4iLCAiLyoqXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBMb2NhdGlvbiBvZiBhbGwgdGhlIGVuZHBvaW50IGRyYXdpbmcgcm91dGluZXMuXG4gKlxuICogRXZlcnkgZW5kcG9pbnQgaGFzIGl0cyBvd24gZHJhd2luZyByb3V0aW5lLCB3aGljaCBjb250YWlucyBhbiBlbmRwb2ludCBkZWZpbml0aW9uLlxuICpcbiAqIFRoZSBlbmRwb2ludCBkZWZpbml0aW9ucyBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJpZXM6XG4gKlxuICogLSAoMCwwKSBpcyB0aGUgY29ubmVjdGlvbiBwb2ludCB0byB0aGUgbm9kZSBpdCBhdHRhY2hlcyB0b1xuICogLSBUaGUgZW5kcG9pbnRzIGFyZSBvcmllbnRhdGVkIHRvIHRoZSBwb3NpdGl2ZSB4LWRpcmVjdGlvblxuICogLSBUaGUgbGVuZ3RoIG9mIHRoZSBlbmRwb2ludCBpcyBhdCBtb3N0IDFcbiAqXG4gKiBBcyBsb25nIGFzIHRoZSBlbmRwb2ludCBjbGFzc2VzIHJlbWFpbiBzaW1wbGUgYW5kIG5vdCB0b28gbnVtZXJvdXMsIHRoZXkgd2lsbFxuICogYmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIG1vZHVsZS5cbiAqIEFsbCBjbGFzc2VzIGhlcmUgZXhjZXB0IGBFbmRQb2ludHNgIHNob3VsZCBiZSBjb25zaWRlcmVkIGFzIHByaXZhdGUgdG8gdGhpcyBtb2R1bGUuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqICMjIyBGdXJ0aGVyIEFjdGlvbnNcbiAqXG4gKiBBZnRlciBhZGRpbmcgYSBuZXcgZW5kcG9pbnQgaGVyZSwgeW91IGFsc28gbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nIHRoaW5nczpcbiAqXG4gKiAtIEFkZCB0aGUgbmV3IGVuZHBvaW50IG5hbWUgdG8gYG5ldHdvcmsvb3B0aW9ucy5qc2AgaW4gYXJyYXkgYGVuZFBvaW50c2AuXG4gKiAtIEFkZCB0aGUgbmV3IGVuZHBvaW50IG5hbWUgdG8gdGhlIGRvY3VtZW50YXRpb24uXG4gKiAgIFNjYW4gZm9yICdhcnJvd3MudG8udHlwZWAgYW5kIGFkZCBpdCB0byB0aGUgZGVzY3JpcHRpb24uXG4gKiAtIEFkZCB0aGUgZW5kcG9pbnQgdG8gdGhlIGV4YW1wbGVzLiBBdCB0aGUgdmVyeSBsZWFzdCwgYWRkIGl0IHRvIGV4YW1wbGVcbiAqICAgYGVkZ2VTdHlsZXMvYXJyb3dUeXBlc2AuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7IEFycm93RGF0YSwgUG9pbnQgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgZHJhd0NpcmNsZSB9IGZyb20gXCIuL3NoYXBlc1wiO1xuXG4vKipcbiAqIENvbW1vbiBtZXRob2RzIGZvciBlbmRwb2ludHNcbiAqXG4gKiBAY2xhc3NcbiAqL1xuY2xhc3MgRW5kUG9pbnQge1xuICAvKipcbiAgICogQXBwbHkgdHJhbnNmb3JtYXRpb24gb24gcG9pbnRzIGZvciBkaXNwbGF5LlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGlzIGRvbmU6XG4gICAqIC0gcm90YXRlIGJ5IHRoZSBzcGVjaWZpZWQgYW5nbGVcbiAgICogLSBtdWx0aXBseSB0aGUgKG5vcm1hbGl6ZWQpIGNvb3JkaW5hdGVzIGJ5IHRoZSBwYXNzZWQgbGVuZ3RoXG4gICAqIC0gb2Zmc2V0IGJ5IHRoZSB0YXJnZXQgY29vcmRpbmF0ZXNcbiAgICpcbiAgICogQHBhcmFtIHBvaW50cyAtIFRoZSBwb2ludChzKSB0byBiZSB0cmFuc2Zvcm1lZC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIHRyYW5zZm9ybWF0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0cmFuc2Zvcm0ocG9pbnRzOiBQb2ludCB8IFBvaW50W10sIGFycm93RGF0YTogQXJyb3dEYXRhKTogdm9pZCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpIHtcbiAgICAgIHBvaW50cyA9IFtwb2ludHNdO1xuICAgIH1cblxuICAgIGNvbnN0IHggPSBhcnJvd0RhdGEucG9pbnQueDtcbiAgICBjb25zdCB5ID0gYXJyb3dEYXRhLnBvaW50Lnk7XG4gICAgY29uc3QgYW5nbGUgPSBhcnJvd0RhdGEuYW5nbGU7XG4gICAgY29uc3QgbGVuZ3RoID0gYXJyb3dEYXRhLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBwID0gcG9pbnRzW2ldO1xuICAgICAgY29uc3QgeHQgPSBwLnggKiBNYXRoLmNvcyhhbmdsZSkgLSBwLnkgKiBNYXRoLnNpbihhbmdsZSk7XG4gICAgICBjb25zdCB5dCA9IHAueCAqIE1hdGguc2luKGFuZ2xlKSArIHAueSAqIE1hdGguY29zKGFuZ2xlKTtcblxuICAgICAgcC54ID0geCArIGxlbmd0aCAqIHh0O1xuICAgICAgcC55ID0geSArIGxlbmd0aCAqIHl0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGEgY2xvc2VkIHBhdGggdXNpbmcgdGhlIGdpdmVuIHJlYWwgY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgcGF0aCB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gcG9pbnRzIC0gVGhlIHBvaW50cyBvZiB0aGUgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhd1BhdGgoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHBvaW50czogUG9pbnRbXSk6IHZvaWQge1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGN0eC5saW5lVG8ocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICB9XG4gICAgY3R4LmNsb3NlUGF0aCgpO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgYXJyb3cgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIEltYWdlIGV4dGVuZHMgRW5kUG9pbnQge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIEZhbHNlIGFzIHRoZXJlIGlzIG5vIHdheSB0byBmaWxsIGFuIGltYWdlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IGZhbHNlIHtcbiAgICBpZiAoYXJyb3dEYXRhLmltYWdlKSB7XG4gICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICBjdHgudHJhbnNsYXRlKGFycm93RGF0YS5wb2ludC54LCBhcnJvd0RhdGEucG9pbnQueSk7XG4gICAgICBjdHgucm90YXRlKE1hdGguUEkgLyAyICsgYXJyb3dEYXRhLmFuZ2xlKTtcblxuICAgICAgY29uc3Qgd2lkdGggPVxuICAgICAgICBhcnJvd0RhdGEuaW1hZ2VXaWR0aCAhPSBudWxsXG4gICAgICAgICAgPyBhcnJvd0RhdGEuaW1hZ2VXaWR0aFxuICAgICAgICAgIDogYXJyb3dEYXRhLmltYWdlLndpZHRoO1xuICAgICAgY29uc3QgaGVpZ2h0ID1cbiAgICAgICAgYXJyb3dEYXRhLmltYWdlSGVpZ2h0ICE9IG51bGxcbiAgICAgICAgICA/IGFycm93RGF0YS5pbWFnZUhlaWdodFxuICAgICAgICAgIDogYXJyb3dEYXRhLmltYWdlLmhlaWdodDtcblxuICAgICAgYXJyb3dEYXRhLmltYWdlLmRyYXdJbWFnZUF0UG9zaXRpb24oXG4gICAgICAgIGN0eCxcbiAgICAgICAgMSwgLy8gc2NhbGVcbiAgICAgICAgLXdpZHRoIC8gMiwgLy8geFxuICAgICAgICAwLCAvLyB5XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgICk7XG5cbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgYXJyb3cgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIEFycm93IGV4dGVuZHMgRW5kUG9pbnQge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIC8vIE5vcm1hbGl6ZWQgcG9pbnRzIG9mIGNsb3NlZCBwYXRoLCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkcmF3bi5cbiAgICAvLyAoMCwgMCkgaXMgdGhlIGF0dGFjaG1lbnQgcG9pbnQsIGFuZCB0aGUgcG9pbnQgYXJvdW5kIHdoaWNoIHNob3VsZCBiZSByb3RhdGVkXG4gICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgeyB4OiAwLCB5OiAwIH0sXG4gICAgICB7IHg6IC0xLCB5OiAwLjMgfSxcbiAgICAgIHsgeDogLTAuOSwgeTogMCB9LFxuICAgICAgeyB4OiAtMSwgeTogLTAuMyB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgY3JvdyBlbmRwb2ludC5cbiAqL1xuY2xhc3MgQ3JvdyB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IC0xLCB5OiAwIH0sXG4gICAgICB7IHg6IDAsIHk6IDAuMyB9LFxuICAgICAgeyB4OiAtMC40LCB5OiAwIH0sXG4gICAgICB7IHg6IDAsIHk6IC0wLjMgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGN1cnZlIGVuZHBvaW50LlxuICovXG5jbGFzcyBDdXJ2ZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludCA9IHsgeDogLTAuNCwgeTogMCB9O1xuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludCwgYXJyb3dEYXRhKTtcblxuICAgIC8vIFVwZGF0ZSBlbmRwb2ludCBzdHlsZSBmb3IgZHJhd2luZyB0cmFuc3BhcmVudCBhcmMuXG4gICAgY3R4LnN0cm9rZVN0eWxlID0gY3R4LmZpbGxTdHlsZTtcbiAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2JhKDAsIDAsIDAsIDApXCI7XG5cbiAgICAvLyBEZWZpbmUgY3VydmUgZW5kcG9pbnQgYXMgc2VtaWNpcmNsZS5cbiAgICBjb25zdCBwaSA9IE1hdGguUEk7XG4gICAgY29uc3Qgc3RhcnRBbmdsZSA9IGFycm93RGF0YS5hbmdsZSAtIHBpIC8gMjtcbiAgICBjb25zdCBlbmRBbmdsZSA9IGFycm93RGF0YS5hbmdsZSArIHBpIC8gMjtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyhcbiAgICAgIHBvaW50LngsXG4gICAgICBwb2ludC55LFxuICAgICAgYXJyb3dEYXRhLmxlbmd0aCAqIDAuNCxcbiAgICAgIHN0YXJ0QW5nbGUsXG4gICAgICBlbmRBbmdsZSxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGludmVydGVkIGN1cnZlIGVuZHBvaW50LlxuICovXG5jbGFzcyBJbnZlcnRlZEN1cnZlIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvLyBOb3JtYWxpemVkIHBvaW50cyBvZiBjbG9zZWQgcGF0aCwgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgZHJhd24uXG4gICAgLy8gKDAsIDApIGlzIHRoZSBhdHRhY2htZW50IHBvaW50LCBhbmQgdGhlIHBvaW50IGFyb3VuZCB3aGljaCBzaG91bGQgYmUgcm90YXRlZFxuICAgIGNvbnN0IHBvaW50ID0geyB4OiAtMC4zLCB5OiAwIH07XG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50LCBhcnJvd0RhdGEpO1xuXG4gICAgLy8gVXBkYXRlIGVuZHBvaW50IHN0eWxlIGZvciBkcmF3aW5nIHRyYW5zcGFyZW50IGFyYy5cbiAgICBjdHguc3Ryb2tlU3R5bGUgPSBjdHguZmlsbFN0eWxlO1xuICAgIGN0eC5maWxsU3R5bGUgPSBcInJnYmEoMCwgMCwgMCwgMClcIjtcblxuICAgIC8vIERlZmluZSBpbnZlcnRlZCBjdXJ2ZSBlbmRwb2ludCBhcyBzZW1pY2lyY2xlLlxuICAgIGNvbnN0IHBpID0gTWF0aC5QSTtcbiAgICBjb25zdCBzdGFydEFuZ2xlID0gYXJyb3dEYXRhLmFuZ2xlICsgcGkgLyAyO1xuICAgIGNvbnN0IGVuZEFuZ2xlID0gYXJyb3dEYXRhLmFuZ2xlICsgKDMgKiBwaSkgLyAyO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHguYXJjKFxuICAgICAgcG9pbnQueCxcbiAgICAgIHBvaW50LnksXG4gICAgICBhcnJvd0RhdGEubGVuZ3RoICogMC40LFxuICAgICAgc3RhcnRBbmdsZSxcbiAgICAgIGVuZEFuZ2xlLFxuICAgICAgZmFsc2VcbiAgICApO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgdHJpbmFnbGUgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIFRyaWFuZ2xlIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvLyBOb3JtYWxpemVkIHBvaW50cyBvZiBjbG9zZWQgcGF0aCwgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgZHJhd24uXG4gICAgLy8gKDAsIDApIGlzIHRoZSBhdHRhY2htZW50IHBvaW50LCBhbmQgdGhlIHBvaW50IGFyb3VuZCB3aGljaCBzaG91bGQgYmUgcm90YXRlZFxuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMC4wMiwgeTogMCB9LFxuICAgICAgeyB4OiAtMSwgeTogMC4zIH0sXG4gICAgICB7IHg6IC0xLCB5OiAtMC4zIH0sXG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgRW5kUG9pbnQuZHJhd1BhdGgoY3R4LCBwb2ludHMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBpbnZlcnRlZCB0cmluYWdsZSBlbmRwb2ludC5cbiAqL1xuY2xhc3MgSW52ZXJ0ZWRUcmlhbmdsZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IDAsIHk6IDAuMyB9LFxuICAgICAgeyB4OiAwLCB5OiAtMC4zIH0sXG4gICAgICB7IHg6IC0xLCB5OiAwIH0sXG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgRW5kUG9pbnQuZHJhd1BhdGgoY3R4LCBwb2ludHMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBjaXJjbGUgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIENpcmNsZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgY29uc3QgcG9pbnQgPSB7IHg6IC0wLjQsIHk6IDAgfTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludCwgYXJyb3dEYXRhKTtcbiAgICBkcmF3Q2lyY2xlKGN0eCwgcG9pbnQueCwgcG9pbnQueSwgYXJyb3dEYXRhLmxlbmd0aCAqIDAuNCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGJhciBlbmRwb2ludC5cbiAqL1xuY2xhc3MgQmFyIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvKlxuICAgIHZhciBwb2ludHMgPSBbXG4gICAgICB7eDowLCB5OjAuNX0sXG4gICAgICB7eDowLCB5Oi0wLjV9XG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5tb3ZlVG8ocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTtcbiAgICBjdHgubGluZVRvKHBvaW50c1sxXS54LCBwb2ludHNbMV0ueSk7XG4gICAgY3R4LnN0cm9rZSgpO1xuKi9cblxuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMCwgeTogMC41IH0sXG4gICAgICB7IHg6IDAsIHk6IC0wLjUgfSxcbiAgICAgIHsgeDogLTAuMTUsIHk6IC0wLjUgfSxcbiAgICAgIHsgeDogLTAuMTUsIHk6IDAuNSB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgYm94IGVuZHBvaW50LlxuICovXG5jbGFzcyBCb3gge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMCwgeTogMC4zIH0sXG4gICAgICB7IHg6IDAsIHk6IC0wLjMgfSxcbiAgICAgIHsgeDogLTAuNiwgeTogLTAuMyB9LFxuICAgICAgeyB4OiAtMC42LCB5OiAwLjMgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGRpYW1vbmQgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIERpYW1vbmQge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgICAgeyB4OiAtMC41LCB5OiAtMC4zIH0sXG4gICAgICB7IHg6IC0xLCB5OiAwIH0sXG4gICAgICB7IHg6IC0wLjUsIHk6IDAuMyB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgdmVlIGVuZHBvaW50LlxuICovXG5jbGFzcyBWZWUge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIC8vIE5vcm1hbGl6ZWQgcG9pbnRzIG9mIGNsb3NlZCBwYXRoLCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkcmF3bi5cbiAgICAvLyAoMCwgMCkgaXMgdGhlIGF0dGFjaG1lbnQgcG9pbnQsIGFuZCB0aGUgcG9pbnQgYXJvdW5kIHdoaWNoIHNob3VsZCBiZSByb3RhdGVkXG4gICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgeyB4OiAtMSwgeTogMC4zIH0sXG4gICAgICB7IHg6IC0wLjUsIHk6IDAgfSxcbiAgICAgIHsgeDogLTEsIHk6IC0wLjMgfSxcbiAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgZW5kcG9pbnRzLlxuICovXG5leHBvcnQgY2xhc3MgRW5kUG9pbnRzIHtcbiAgLyoqXG4gICAqIERyYXcgYW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogYm9vbGVhbiB7XG4gICAgbGV0IHR5cGU7XG4gICAgaWYgKGFycm93RGF0YS50eXBlKSB7XG4gICAgICB0eXBlID0gYXJyb3dEYXRhLnR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJpbWFnZVwiOlxuICAgICAgICByZXR1cm4gSW1hZ2UuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiY2lyY2xlXCI6XG4gICAgICAgIHJldHVybiBDaXJjbGUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiYm94XCI6XG4gICAgICAgIHJldHVybiBCb3guZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiY3Jvd1wiOlxuICAgICAgICByZXR1cm4gQ3Jvdy5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJjdXJ2ZVwiOlxuICAgICAgICByZXR1cm4gQ3VydmUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiZGlhbW9uZFwiOlxuICAgICAgICByZXR1cm4gRGlhbW9uZC5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJpbnZfY3VydmVcIjpcbiAgICAgICAgcmV0dXJuIEludmVydGVkQ3VydmUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwidHJpYW5nbGVcIjpcbiAgICAgICAgcmV0dXJuIFRyaWFuZ2xlLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuICAgICAgY2FzZSBcImludl90cmlhbmdsZVwiOlxuICAgICAgICByZXR1cm4gSW52ZXJ0ZWRUcmlhbmdsZS5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJiYXJcIjpcbiAgICAgICAgcmV0dXJuIEJhci5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJ2ZWVcIjpcbiAgICAgICAgcmV0dXJuIFZlZS5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJhcnJvd1wiOiAvLyBmYWxsLXRocm91Z2hcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBBcnJvdy5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBvdmVycmlkZU9wYWNpdHkgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBFbmRQb2ludHMgfSBmcm9tIFwiLi9lbmQtcG9pbnRzXCI7XG5pbXBvcnQge1xuICBBcnJvd0RhdGEsXG4gIEFycm93RGF0YVdpdGhDb3JlLFxuICBBcnJvd1R5cGUsXG4gIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICBFZGdlVHlwZSxcbiAgSWQsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGRyYXdEYXNoZWRMaW5lIH0gZnJvbSBcIi4vc2hhcGVzXCI7XG5pbXBvcnQgeyBnZXRTZWxmUmVmQ29vcmRpbmF0ZXMgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL0NvbXBvbmVudFV0aWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGaW5kQm9yZGVyUG9zaXRpb25PcHRpb25zPFZpYT4ge1xuICB2aWE6IFZpYTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlT3B0aW9ucyB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICBsb3c6IG51bWJlcjtcbiAgaGlnaDogbnVtYmVyO1xuICBkaXJlY3Rpb246IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgQmFzZSBDbGFzcyBmb3IgYWxsIGVkZ2VzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWRnZUJhc2U8VmlhID0gdW5kZWZpbmVkPiBpbXBsZW1lbnRzIEVkZ2VUeXBlIHtcbiAgcHVibGljIGZyb20hOiBWTm9kZTsgLy8gSW5pdGlhbGl6ZWQgaW4gc2V0T3B0aW9uc1xuICBwdWJsaWMgZnJvbVBvaW50OiBQb2ludDtcbiAgcHVibGljIHRvITogVk5vZGU7IC8vIEluaXRpYWxpemVkIGluIHNldE9wdGlvbnNcbiAgcHVibGljIHRvUG9pbnQ6IFBvaW50O1xuICBwdWJsaWMgdmlhPzogVk5vZGU7XG5cbiAgcHVibGljIGNvbG9yOiB1bmtub3duID0ge307XG4gIHB1YmxpYyBjb2xvckRpcnR5ID0gdHJ1ZTtcbiAgcHVibGljIGlkITogSWQ7IC8vIEluaXRpYWxpemVkIGluIHNldE9wdGlvbnNcbiAgcHVibGljIG9wdGlvbnMhOiBFZGdlT3B0aW9uczsgLy8gSW5pdGlhbGl6ZWQgaW4gc2V0T3B0aW9uc1xuICBwdWJsaWMgaG92ZXJXaWR0aCA9IDEuNTtcbiAgcHVibGljIHNlbGVjdGlvbldpZHRoID0gMjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBvZiBnaXZlbiBlZGdlLlxuICAgKiBAcGFyYW0gX2JvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIF9sYWJlbE1vZHVsZSAtIExhYmVsIG1vZHVsZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zOiBFZGdlT3B0aW9ucyxcbiAgICBwcm90ZWN0ZWQgX2JvZHk6IFZCb2R5LFxuICAgIHByb3RlY3RlZCBfbGFiZWxNb2R1bGU6IExhYmVsXG4gICkge1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgIHRoaXMuZnJvbVBvaW50ID0gdGhpcy5mcm9tO1xuICAgIHRoaXMudG9Qb2ludCA9IHRoaXMudG87XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgKGVpdGhlciBmcm9tIG9yIHRvIG5vZGUgb2YgdGhlIGVkZ2UpLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2ZpbmRCb3JkZXJQb3NpdGlvbihcbiAgICBub2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBvcHRpb25zPzogRmluZEJvcmRlclBvc2l0aW9uT3B0aW9uczxWaWE+XG4gICk6IFBvaW50VDtcblxuICAvKipcbiAgICogUmV0dXJuIGFkZGl0aW9uYWwgcG9pbnQocykgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQocykgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZ2V0VmlhTm9kZSgpOiBWaWE7XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBhYnN0cmFjdCBnZXRQb2ludChwb3NpdGlvbjogbnVtYmVyLCB2aWFOb2RlPzogVmlhKTogUG9pbnQ7XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBjb25uZWN0KCk6IHZvaWQge1xuICAgIHRoaXMuZnJvbSA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLmZyb21dO1xuICAgIHRoaXMudG8gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy50b107XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGNsZWFudXAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBuZXcgZWRnZSBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBuZXcgZWRnZSBvcHRpb25zIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM6IEVkZ2VPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIHRoaXMuZnJvbSA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLmZyb21dO1xuICAgIHRoaXMudG8gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy50b107XG4gICAgdGhpcy5pZCA9IHRoaXMub3B0aW9ucy5pZDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZHJhd0xpbmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImNvbG9yXCJcbiAgICAgIHwgXCJvcGFjaXR5XCJcbiAgICAgIHwgXCJzaGFkb3dDb2xvclwiXG4gICAgICB8IFwic2hhZG93U2l6ZVwiXG4gICAgICB8IFwic2hhZG93WFwiXG4gICAgICB8IFwic2hhZG93WVwiXG4gICAgICB8IFwid2lkdGhcIlxuICAgID4sXG4gICAgX3NlbGVjdGVkPzogYm9vbGVhbixcbiAgICBfaG92ZXI/OiBib29sZWFuLFxuICAgIHZpYU5vZGU6IFZpYSA9IHRoaXMuZ2V0VmlhTm9kZSgpXG4gICk6IHZvaWQge1xuICAgIC8vIHNldCBzdHlsZVxuICAgIGN0eC5zdHJva2VTdHlsZSA9IHRoaXMuZ2V0Q29sb3IoY3R4LCB2YWx1ZXMpO1xuICAgIGN0eC5saW5lV2lkdGggPSB2YWx1ZXMud2lkdGg7XG5cbiAgICBpZiAodmFsdWVzLmRhc2hlcyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX2RyYXdEYXNoZWRMaW5lKGN0eCwgdmFsdWVzLCB2aWFOb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZHJhd0xpbmUoY3R4LCB2YWx1ZXMsIHZpYU5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGEgbGluZSB3aXRoIGdpdmVuIHN0eWxlIGJldHdlZW4gdHdvIG5vZGVzIHRocm91Z2ggc3VwcGxpZWQgbm9kZShzKS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHZpYU5vZGUgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcGFyYW0gZnJvbVBvaW50IC0gVE9ETzogU2VlbXMgaWdub3JlZCwgcmVtb3ZlP1xuICAgKiBAcGFyYW0gdG9Qb2ludCAtIFRPRE86IFNlZW1zIGlnbm9yZWQsIHJlbW92ZT9cbiAgICovXG4gIHByaXZhdGUgX2RyYXdMaW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwic2hhZG93Q29sb3JcIiB8IFwic2hhZG93U2l6ZVwiIHwgXCJzaGFkb3dYXCIgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZTogVmlhLFxuICAgIGZyb21Qb2ludD86IFBvaW50LFxuICAgIHRvUG9pbnQ/OiBQb2ludFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mcm9tICE9IHRoaXMudG8pIHtcbiAgICAgIC8vIGRyYXcgbGluZVxuICAgICAgdGhpcy5fbGluZShjdHgsIHZhbHVlcywgdmlhTm9kZSwgZnJvbVBvaW50LCB0b1BvaW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3gsIHksIHJhZGl1c10gPSB0aGlzLl9nZXRDaXJjbGVEYXRhKGN0eCk7XG4gICAgICB0aGlzLl9jaXJjbGUoY3R4LCB2YWx1ZXMsIHgsIHksIHJhZGl1cyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERyYXcgYSBkYXNoZWQgbGluZSB3aXRoIGdpdmVuIHN0eWxlIGJldHdlZW4gdHdvIG5vZGVzIHRocm91Z2ggc3VwcGxpZWQgbm9kZShzKS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHZpYU5vZGUgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcGFyYW0gX2Zyb21Qb2ludCAtIElnbm9yZWQgKFRPRE86IHJlbW92ZSBpbiB0aGUgZnV0dXJlKS5cbiAgICogQHBhcmFtIF90b1BvaW50IC0gSWdub3JlZCAoVE9ETzogcmVtb3ZlIGluIHRoZSBmdXR1cmUpLlxuICAgKi9cbiAgcHJpdmF0ZSBfZHJhd0Rhc2hlZExpbmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJzaGFkb3dDb2xvclwiIHwgXCJzaGFkb3dTaXplXCIgfCBcInNoYWRvd1hcIiB8IFwic2hhZG93WVwiXG4gICAgPixcbiAgICB2aWFOb2RlOiBWaWEsXG4gICAgX2Zyb21Qb2ludD86IFBvaW50LFxuICAgIF90b1BvaW50PzogUG9pbnRcbiAgKTogdm9pZCB7XG4gICAgY3R4LmxpbmVDYXAgPSBcInJvdW5kXCI7XG4gICAgY29uc3QgcGF0dGVybiA9IEFycmF5LmlzQXJyYXkodmFsdWVzLmRhc2hlcykgPyB2YWx1ZXMuZGFzaGVzIDogWzUsIDVdO1xuXG4gICAgLy8gb25seSBmaXJlZm94IGFuZCBjaHJvbWUgc3VwcG9ydCB0aGlzIG1ldGhvZCwgZWxzZSB3ZSB1c2UgdGhlIGxlZ2FjeSBvbmUuXG4gICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICAvLyBzZXQgZGFzaCBzZXR0aW5ncyBmb3IgY2hyb21lIG9yIGZpcmVmb3hcbiAgICAgIGN0eC5zZXRMaW5lRGFzaChwYXR0ZXJuKTtcbiAgICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IDA7XG5cbiAgICAgIC8vIGRyYXcgdGhlIGxpbmVcbiAgICAgIGlmICh0aGlzLmZyb20gIT0gdGhpcy50bykge1xuICAgICAgICAvLyBkcmF3IGxpbmVcbiAgICAgICAgdGhpcy5fbGluZShjdHgsIHZhbHVlcywgdmlhTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbeCwgeSwgcmFkaXVzXSA9IHRoaXMuX2dldENpcmNsZURhdGEoY3R4KTtcbiAgICAgICAgdGhpcy5fY2lyY2xlKGN0eCwgdmFsdWVzLCB4LCB5LCByYWRpdXMpO1xuICAgICAgfVxuXG4gICAgICAvLyByZXN0b3JlIHRoZSBkYXNoIHNldHRpbmdzLlxuICAgICAgY3R4LnNldExpbmVEYXNoKFswXSk7XG4gICAgICBjdHgubGluZURhc2hPZmZzZXQgPSAwO1xuICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5zdXBwb3J0aW5nIHNtb290aCBsaW5lc1xuICAgICAgaWYgKHRoaXMuZnJvbSAhPSB0aGlzLnRvKSB7XG4gICAgICAgIC8vIGRyYXcgbGluZVxuICAgICAgICBkcmF3RGFzaGVkTGluZShcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgdGhpcy5mcm9tLngsXG4gICAgICAgICAgdGhpcy5mcm9tLnksXG4gICAgICAgICAgdGhpcy50by54LFxuICAgICAgICAgIHRoaXMudG8ueSxcbiAgICAgICAgICBwYXR0ZXJuXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbeCwgeSwgcmFkaXVzXSA9IHRoaXMuX2dldENpcmNsZURhdGEoY3R4KTtcbiAgICAgICAgdGhpcy5fY2lyY2xlKGN0eCwgdmFsdWVzLCB4LCB5LCByYWRpdXMpO1xuICAgICAgfVxuICAgICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgICAgdGhpcy5lbmFibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuXG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIC8vIGRpc2FibGUgc2hhZG93cyBmb3Igb3RoZXIgZWxlbWVudHMuXG4gICAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGEgbGluZSB3aXRoIGdpdmVuIHN0eWxlIGJldHdlZW4gdHdvIG5vZGVzIHRocm91Z2ggc3VwcGxpZWQgbm9kZShzKS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHZpYU5vZGUgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcGFyYW0gZnJvbVBvaW50IC0gVE9ETzogU2VlbXMgaWdub3JlZCwgcmVtb3ZlP1xuICAgKiBAcGFyYW0gdG9Qb2ludCAtIFRPRE86IFNlZW1zIGlnbm9yZWQsIHJlbW92ZT9cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgIHZpYU5vZGU6IFZpYSxcbiAgICBmcm9tUG9pbnQ/OiBQb2ludCxcbiAgICB0b1BvaW50PzogUG9pbnRcbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogRmluZCB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgKGVpdGhlciBmcm9tIG9yIHRvIG5vZGUgb2YgdGhlIGVkZ2UpLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqL1xuICBwdWJsaWMgZmluZEJvcmRlclBvc2l0aW9uKFxuICAgIG5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIG9wdGlvbnM/OiBGaW5kQm9yZGVyUG9zaXRpb25PcHRpb25zPFZpYT4gfCBGaW5kQm9yZGVyUG9zaXRpb25DaXJjbGVPcHRpb25zXG4gICk6IFBvaW50VCB7XG4gICAgaWYgKHRoaXMuZnJvbSAhPSB0aGlzLnRvKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uKG5vZGUsIGN0eCwgb3B0aW9ucyBhcyBhbnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlKG5vZGUsIGN0eCwgb3B0aW9ucyBhcyBhbnkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZmluZEJvcmRlclBvc2l0aW9ucyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHtcbiAgICBmcm9tOiBQb2ludDtcbiAgICB0bzogUG9pbnQ7XG4gIH0ge1xuICAgIGlmICh0aGlzLmZyb20gIT0gdGhpcy50bykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbTogdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uKHRoaXMuZnJvbSwgY3R4KSxcbiAgICAgICAgdG86IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbih0aGlzLnRvLCBjdHgpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3gsIHldID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YShjdHgpLnNsaWNlKDAsIDIpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmcm9tOiB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgICAgbG93OiAwLjI1LFxuICAgICAgICAgIGhpZ2g6IDAuNixcbiAgICAgICAgICBkaXJlY3Rpb246IC0xLFxuICAgICAgICB9KSxcbiAgICAgICAgdG86IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICBsb3c6IDAuNixcbiAgICAgICAgICBoaWdoOiAwLjgsXG4gICAgICAgICAgZGlyZWN0aW9uOiAxLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGNlbnRlciBwb2ludCBhbmQgcmFkaXVzIG9mIGFuIGVkZ2UgY29ubmVjdGVkIHRvIHRoZSBzYW1lIG5vZGUgYXQgYm90aCBlbmRzLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHJldHVybnMgYFt4LCB5LCByYWRpdXNdYFxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXRDaXJjbGVEYXRhKFxuICAgIGN0eD86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFxuICApOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgIGNvbnN0IHJhZGl1cyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLnNpemU7XG5cbiAgICBpZiAoY3R4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLmZyb20uc2hhcGUud2lkdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmZyb20uc2hhcGUucmVzaXplKGN0eCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IGNpcmNsZSBjb29yZGluYXRlc1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gZ2V0U2VsZlJlZkNvb3JkaW5hdGVzKFxuICAgICAgY3R4LFxuICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUsXG4gICAgICByYWRpdXMsXG4gICAgICB0aGlzLmZyb21cbiAgICApO1xuXG4gICAgcmV0dXJuIFtjb29yZGluYXRlcy54LCBjb29yZGluYXRlcy55LCByYWRpdXNdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHBvaW50IG9uIGEgY2lyY2xlLlxuICAgKlxuICAgKiBAcGFyYW0geCAtIENlbnRlciBvZiB0aGUgY2lyY2xlIG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5IC0gQ2VudGVyIG9mIHRoZSBjaXJjbGUgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHJhZGl1cyAtIFJhZGl1cyBvZiB0aGUgY2lyY2xlLlxuICAgKiBAcGFyYW0gcG9zaXRpb24gLSBWYWx1ZSBiZXR3ZWVuIDAgKGxpbmUgc3RhcnQpIGFuZCAxIChsaW5lIGVuZCkuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiByZXF1ZXN0ZWQgcG9pbnQgb24gdGhlIGNpcmNsZS5cbiAgICovXG4gIHByaXZhdGUgX3BvaW50T25DaXJjbGUoXG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICByYWRpdXM6IG51bWJlcixcbiAgICBwb3NpdGlvbjogbnVtYmVyXG4gICk6IFBvaW50IHtcbiAgICBjb25zdCBhbmdsZSA9IHBvc2l0aW9uICogMiAqIE1hdGguUEk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHggKyByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSksXG4gICAgICB5OiB5IC0gcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgZnVuY3Rpb24gdXNlcyBiaW5hcnkgc2VhcmNoIHRvIGxvb2sgZm9yIHRoZSBwb2ludCB3aGVyZSB0aGUgY2lyY2xlIGNyb3NzZXMgdGhlIGJvcmRlciBvZiB0aGUgbm9kZS5cbiAgICogQHBhcmFtIG5lYXJOb2RlIC0gVGhlIG5vZGUgKGVpdGhlciBmcm9tIG9yIHRvIG5vZGUgb2YgdGhlIGVkZ2UpLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqL1xuICBwcml2YXRlIF9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUoXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIG9wdGlvbnM6IEZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZU9wdGlvbnNcbiAgKTogUG9pbnRUIHtcbiAgICBjb25zdCB4ID0gb3B0aW9ucy54O1xuICAgIGNvbnN0IHkgPSBvcHRpb25zLnk7XG4gICAgbGV0IGxvdyA9IG9wdGlvbnMubG93O1xuICAgIGxldCBoaWdoID0gb3B0aW9ucy5oaWdoO1xuICAgIGNvbnN0IGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZWN0aW9uO1xuXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwO1xuICAgIGNvbnN0IHJhZGl1cyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLnNpemU7XG4gICAgY29uc3QgdGhyZXNob2xkID0gMC4wNTtcbiAgICBsZXQgcG9zOiBQb2ludDtcblxuICAgIGxldCBtaWRkbGUgPSAobG93ICsgaGlnaCkgKiAwLjU7XG5cbiAgICBsZXQgZW5kUG9pbnRPZmZzZXQgPSAwO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuYXJyb3dTdHJpa2V0aHJvdWdoID09PSB0cnVlKSB7XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAtMSkge1xuICAgICAgICBlbmRQb2ludE9mZnNldCA9IHRoaXMub3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IDEpIHtcbiAgICAgICAgZW5kUG9pbnRPZmZzZXQgPSB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gICAgZG8ge1xuICAgICAgbWlkZGxlID0gKGxvdyArIGhpZ2gpICogMC41O1xuXG4gICAgICBwb3MgPSB0aGlzLl9wb2ludE9uQ2lyY2xlKHgsIHksIHJhZGl1cywgbWlkZGxlKTtcbiAgICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMihuZWFyTm9kZS55IC0gcG9zLnksIG5lYXJOb2RlLnggLSBwb3MueCk7XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9Cb3JkZXIgPVxuICAgICAgICBuZWFyTm9kZS5kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpICsgZW5kUG9pbnRPZmZzZXQ7XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9Qb2ludCA9IE1hdGguc3FydChcbiAgICAgICAgTWF0aC5wb3cocG9zLnggLSBuZWFyTm9kZS54LCAyKSArIE1hdGgucG93KHBvcy55IC0gbmVhck5vZGUueSwgMilcbiAgICAgICk7XG4gICAgICBjb25zdCBkaWZmZXJlbmNlID0gZGlzdGFuY2VUb0JvcmRlciAtIGRpc3RhbmNlVG9Qb2ludDtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmZXJlbmNlKSA8IHRocmVzaG9sZCkge1xuICAgICAgICBicmVhazsgLy8gZm91bmRcbiAgICAgIH0gZWxzZSBpZiAoZGlmZmVyZW5jZSA+IDApIHtcbiAgICAgICAgLy8gZGlzdGFuY2UgdG8gbm9kZXMgaXMgbGFyZ2VyIHRoYW4gZGlzdGFuY2UgdG8gYm9yZGVyIC0tPiB0IG5lZWRzIHRvIGJlIGJpZ2dlciBpZiB3ZSdyZSBsb29raW5nIGF0IHRoZSB0byBub2RlLlxuICAgICAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgICAgIGhpZ2ggPSBtaWRkbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG93ID0gbWlkZGxlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICsraXRlcmF0aW9uO1xuICAgIH0gd2hpbGUgKGxvdyA8PSBoaWdoICYmIGl0ZXJhdGlvbiA8IG1heEl0ZXJhdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBvcyxcbiAgICAgIHQ6IG1pZGRsZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGluZSB3aWR0aCBvZiB0aGUgZWRnZS4gRGVwZW5kcyBvbiB3aWR0aCBhbmQgd2hldGhlciBvbmUgb2YgdGhlIGNvbm5lY3RlZCBub2RlcyBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHNlbGVjdGVkIC0gRGV0ZXJtaW5lcyB3aGV0ZXIgdGhlIGxpbmUgaXMgc2VsZWN0ZWQuXG4gICAqIEBwYXJhbSBob3ZlciAtIERldGVybWluZXMgd2hldGVyIHRoZSBsaW5lIGlzIGJlaW5nIGhvdmVyZWQsIG9ubHkgYXBwbGllcyBpZiBzZWxlY3RlZCBpcyBmYWxzZS5cbiAgICogQHJldHVybnMgVGhlIHdpZHRoIG9mIHRoZSBsaW5lLlxuICAgKi9cbiAgcHVibGljIGdldExpbmVXaWR0aChzZWxlY3RlZDogYm9vbGVhbiwgaG92ZXI6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGlmIChzZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuc2VsZWN0aW9uV2lkdGgsIDAuMyAvIHRoaXMuX2JvZHkudmlldy5zY2FsZSk7XG4gICAgfSBlbHNlIGlmIChob3ZlciA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuaG92ZXJXaWR0aCwgMC4zIC8gdGhpcy5fYm9keS52aWV3LnNjYWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMub3B0aW9ucy53aWR0aCwgMC4zIC8gdGhpcy5fYm9keS52aWV3LnNjYWxlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgY29sb3Igb3IgZ3JhZGllbnQgZm9yIGdpdmVuIGVkZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgbGlrZSBjb2xvciwgb3BhY2l0eSBvciBzaGFkb3cuXG4gICAqIEBwYXJhbSBfc2VsZWN0ZWQgLSBJZ25vcmVkIChUT0RPOiByZW1vdmUgaW4gdGhlIGZ1dHVyZSkuXG4gICAqIEBwYXJhbSBfaG92ZXIgLSBJZ25vcmVkIChUT0RPOiByZW1vdmUgaW4gdGhlIGZ1dHVyZSkuXG4gICAqIEByZXR1cm5zIENvbG9yIHN0cmluZyBpZiBzaW5nbGUgY29sb3IgaXMgaW5oZXJpdGVkIG9yIGdyYWRpZW50IGlmIHR3by5cbiAgICovXG4gIHB1YmxpYyBnZXRDb2xvcihcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPEVkZ2VGb3JtYXR0aW5nVmFsdWVzLCBcImNvbG9yXCIgfCBcIm9wYWNpdHlcIj5cbiAgKTogc3RyaW5nIHwgQ2FudmFzR3JhZGllbnQge1xuICAgIGlmICh2YWx1ZXMuaW5oZXJpdHNDb2xvciAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIHdoZW4gdGhpcyBpcyBhIGxvb3AgZWRnZSwganVzdCB1c2UgdGhlICdmcm9tJyBtZXRob2RcbiAgICAgIGlmICh2YWx1ZXMuaW5oZXJpdHNDb2xvciA9PT0gXCJib3RoXCIgJiYgdGhpcy5mcm9tLmlkICE9PSB0aGlzLnRvLmlkKSB7XG4gICAgICAgIGNvbnN0IGdyZCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudChcbiAgICAgICAgICB0aGlzLmZyb20ueCxcbiAgICAgICAgICB0aGlzLmZyb20ueSxcbiAgICAgICAgICB0aGlzLnRvLngsXG4gICAgICAgICAgdGhpcy50by55XG4gICAgICAgICk7XG4gICAgICAgIGxldCBmcm9tQ29sb3IgPSB0aGlzLmZyb20ub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyO1xuICAgICAgICBsZXQgdG9Db2xvciA9IHRoaXMudG8ub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyO1xuXG4gICAgICAgIGlmICh0aGlzLmZyb20uc2VsZWN0ZWQgPT09IGZhbHNlICYmIHRoaXMudG8uc2VsZWN0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgZnJvbUNvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KFxuICAgICAgICAgICAgdGhpcy5mcm9tLm9wdGlvbnMuY29sb3IuYm9yZGVyLFxuICAgICAgICAgICAgdmFsdWVzLm9wYWNpdHlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRvQ29sb3IgPSBvdmVycmlkZU9wYWNpdHkoXG4gICAgICAgICAgICB0aGlzLnRvLm9wdGlvbnMuY29sb3IuYm9yZGVyLFxuICAgICAgICAgICAgdmFsdWVzLm9wYWNpdHlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZnJvbS5zZWxlY3RlZCA9PT0gdHJ1ZSAmJiB0aGlzLnRvLnNlbGVjdGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIHRvQ29sb3IgPSB0aGlzLnRvLm9wdGlvbnMuY29sb3IuYm9yZGVyO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZnJvbS5zZWxlY3RlZCA9PT0gZmFsc2UgJiYgdGhpcy50by5zZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGZyb21Db2xvciA9IHRoaXMuZnJvbS5vcHRpb25zLmNvbG9yLmJvcmRlcjtcbiAgICAgICAgfVxuICAgICAgICBncmQuYWRkQ29sb3JTdG9wKDAsIGZyb21Db2xvcik7XG4gICAgICAgIGdyZC5hZGRDb2xvclN0b3AoMSwgdG9Db2xvcik7XG5cbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGhpcyByZXR1cm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG4gICAgICAgIHJldHVybiBncmQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZXMuaW5oZXJpdHNDb2xvciA9PT0gXCJ0b1wiKSB7XG4gICAgICAgIHJldHVybiBvdmVycmlkZU9wYWNpdHkodGhpcy50by5vcHRpb25zLmNvbG9yLmJvcmRlciwgdmFsdWVzLm9wYWNpdHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gXCJmcm9tXCJcbiAgICAgICAgcmV0dXJuIG92ZXJyaWRlT3BhY2l0eSh0aGlzLmZyb20ub3B0aW9ucy5jb2xvci5ib3JkZXIsIHZhbHVlcy5vcGFjaXR5KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG92ZXJyaWRlT3BhY2l0eSh2YWx1ZXMuY29sb3IsIHZhbHVlcy5vcGFjaXR5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHJhdyBhIGxpbmUgZnJvbSBhIG5vZGUgdG8gaXRzZWxmLCBhIGNpcmNsZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHggLSBDZW50ZXIgb2YgdGhlIGNpcmNsZSBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geSAtIENlbnRlciBvZiB0aGUgY2lyY2xlIG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSByYWRpdXMgLSBSYWRpdXMgb2YgdGhlIGNpcmNsZS5cbiAgICovXG4gIHByaXZhdGUgX2NpcmNsZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcInNoYWRvd0NvbG9yXCIgfCBcInNoYWRvd1NpemVcIiB8IFwic2hhZG93WFwiIHwgXCJzaGFkb3dZXCJcbiAgICA+LFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgcmFkaXVzOiBudW1iZXJcbiAgKTogdm9pZCB7XG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcblxuICAgIC8vZnVsbCBjaXJjbGVcbiAgICBsZXQgYW5nbGVGcm9tID0gMDtcbiAgICBsZXQgYW5nbGVUbyA9IE1hdGguUEkgKiAyO1xuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5yZW5kZXJCZWhpbmRUaGVOb2RlKSB7XG4gICAgICAvL3JlbmRlciBvbmx5IHBhcnRzIHdoaWNoIGFyZSBub3Qgb3ZlcmxhcGluZyB3aXRoIHBhcmVudCBub2RlXG4gICAgICAvL25lZWQgdG8gZmluZCB4LHkgb2YgZnJvbSBwb2ludCBhbmQgeCx5IHRvIHBvaW50XG4gICAgICAvL2NhbGN1bGF0aW5nIHJhZGlhbnNcbiAgICAgIGNvbnN0IGxvdyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlO1xuICAgICAgY29uc3QgaGlnaCA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlICsgTWF0aC5QSTtcbiAgICAgIGNvbnN0IHBvaW50VEZyb20gPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbG93LFxuICAgICAgICBoaWdoLFxuICAgICAgICBkaXJlY3Rpb246IC0xLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwb2ludFRUbyA9IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBsb3csXG4gICAgICAgIGhpZ2gsXG4gICAgICAgIGRpcmVjdGlvbjogMSxcbiAgICAgIH0pO1xuICAgICAgYW5nbGVGcm9tID0gTWF0aC5hdGFuMihwb2ludFRGcm9tLnkgLSB5LCBwb2ludFRGcm9tLnggLSB4KTtcbiAgICAgIGFuZ2xlVG8gPSBNYXRoLmF0YW4yKHBvaW50VFRvLnkgLSB5LCBwb2ludFRUby54IC0geCk7XG4gICAgfVxuXG4gICAgLy8gZHJhdyBhIGNpcmNsZVxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHguYXJjKHgsIHksIHJhZGl1cywgYW5nbGVGcm9tLCBhbmdsZVRvLCBmYWxzZSk7XG4gICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqIEByZW1hcmtzXG4gICAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODQ5MjExL3Nob3J0ZXN0LWRpc3RhbmNhZS1iZXR3ZWVuLWEtcG9pbnQtYW5kLWEtbGluZS1zZWdtZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXJcbiAgKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5mcm9tICE9IHRoaXMudG8pIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXREaXN0YW5jZVRvRWRnZSh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3gsIHksIHJhZGl1c10gPSB0aGlzLl9nZXRDaXJjbGVEYXRhKHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBkeCA9IHggLSB4MztcbiAgICAgIGNvbnN0IGR5ID0geSAtIHkzO1xuICAgICAgcmV0dXJuIE1hdGguYWJzKE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSkgLSByYWRpdXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBwb2ludCAoeDMsIHkzKSBhbmQgYSBsaW5lIHNlZ21lbnQgZnJvbSAoeDEsIHkxKSB0byAoeDIsIHkyKS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84NDkyMTEvc2hvcnRlc3QtZGlzdGFuY2FlLWJldHdlZW4tYS1wb2ludC1hbmQtYS1saW5lLXNlZ21lbnRcbiAgICogQHBhcmFtIHgxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB2aWEgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbGluZSBzZWdtZW50IGFuZCB0aGUgcG9pbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2dldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyLFxuICAgIHZpYT86IFZpYVxuICApOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBhIHBvaW50ICh4MywgeTMpIGFuZCBhIGxpbmUgc2VnbWVudCBmcm9tICh4MSwgeTEpIHRvICh4MiwgeTIpLlxuICAgKlxuICAgKiBAcGFyYW0geDEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDIgLSBTZWNvbmQgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB4MyAtIFBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHJldHVybnMgVGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGxpbmUgc2VnbWVudCBhbmQgdGhlIHBvaW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXREaXN0YW5jZVRvTGluZShcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlclxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IHB4ID0geDIgLSB4MTtcbiAgICBjb25zdCBweSA9IHkyIC0geTE7XG4gICAgY29uc3Qgc29tZXRoaW5nID0gcHggKiBweCArIHB5ICogcHk7XG4gICAgbGV0IHUgPSAoKHgzIC0geDEpICogcHggKyAoeTMgLSB5MSkgKiBweSkgLyBzb21ldGhpbmc7XG5cbiAgICBpZiAodSA+IDEpIHtcbiAgICAgIHUgPSAxO1xuICAgIH0gZWxzZSBpZiAodSA8IDApIHtcbiAgICAgIHUgPSAwO1xuICAgIH1cblxuICAgIGNvbnN0IHggPSB4MSArIHUgKiBweDtcbiAgICBjb25zdCB5ID0geTEgKyB1ICogcHk7XG4gICAgY29uc3QgZHggPSB4IC0geDM7XG4gICAgY29uc3QgZHkgPSB5IC0geTM7XG5cbiAgICAvLyMgTm90ZTogSWYgdGhlIGFjdHVhbCBkaXN0YW5jZSBkb2VzIG5vdCBtYXR0ZXIsXG4gICAgLy8jIGlmIHlvdSBvbmx5IHdhbnQgdG8gY29tcGFyZSB3aGF0IHRoaXMgZnVuY3Rpb25cbiAgICAvLyMgcmV0dXJucyB0byBvdGhlciByZXN1bHRzIG9mIHRoaXMgZnVuY3Rpb24sIHlvdVxuICAgIC8vIyBjYW4ganVzdCByZXR1cm4gdGhlIHNxdWFyZWQgZGlzdGFuY2UgaW5zdGVhZFxuICAgIC8vIyAoaS5lLiByZW1vdmUgdGhlIHNxcnQpIHRvIGdhaW4gYSBsaXR0bGUgcGVyZm9ybWFuY2VcblxuICAgIHJldHVybiBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwibWlkZGxlXCIsXG4gICAgdmlhTm9kZTogVk5vZGUsXG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgaG92ZXI6IGJvb2xlYW4sXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJtaWRkbGVBcnJvd1R5cGVcIiB8IFwibWlkZGxlQXJyb3dTY2FsZVwiIHwgXCJ3aWR0aFwiXG4gICAgPlxuICApOiBBcnJvd0RhdGFXaXRoQ29yZTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwidG9cIixcbiAgICB2aWFOb2RlOiBWTm9kZSxcbiAgICBzZWxlY3RlZDogYm9vbGVhbixcbiAgICBob3ZlcjogYm9vbGVhbixcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcInRvQXJyb3dUeXBlXCIgfCBcInRvQXJyb3dTY2FsZVwiIHwgXCJ3aWR0aFwiXG4gICAgPlxuICApOiBBcnJvd0RhdGFXaXRoQ29yZTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwiZnJvbVwiLFxuICAgIHZpYU5vZGU6IFZOb2RlLFxuICAgIHNlbGVjdGVkOiBib29sZWFuLFxuICAgIGhvdmVyOiBib29sZWFuLFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwiZnJvbUFycm93VHlwZVwiIHwgXCJmcm9tQXJyb3dTY2FsZVwiIHwgXCJ3aWR0aFwiXG4gICAgPlxuICApOiBBcnJvd0RhdGFXaXRoQ29yZTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwiZnJvbVwiIHwgXCJ0b1wiIHwgXCJtaWRkbGVcIixcbiAgICB2aWFOb2RlOiBWTm9kZSxcbiAgICBfc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgX2hvdmVyOiBib29sZWFuLFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8RWRnZUZvcm1hdHRpbmdWYWx1ZXMsIFwid2lkdGhcIj5cbiAgKTogQXJyb3dEYXRhV2l0aENvcmUge1xuICAgIC8vIHNldCBsZXRzXG4gICAgbGV0IGFuZ2xlOiBudW1iZXI7XG4gICAgbGV0IGFycm93UG9pbnQ6IFBvaW50O1xuICAgIGxldCBub2RlMTogVk5vZGU7XG4gICAgbGV0IG5vZGUyOiBWTm9kZTtcbiAgICBsZXQgcmV2ZXJzZWQ6IGJvb2xlYW47XG4gICAgbGV0IHNjYWxlRmFjdG9yOiBudW1iZXI7XG4gICAgbGV0IHR5cGU6IEFycm93VHlwZTtcbiAgICBjb25zdCBsaW5lV2lkdGg6IG51bWJlciA9IHZhbHVlcy53aWR0aDtcblxuICAgIGlmIChwb3NpdGlvbiA9PT0gXCJmcm9tXCIpIHtcbiAgICAgIG5vZGUxID0gdGhpcy5mcm9tO1xuICAgICAgbm9kZTIgPSB0aGlzLnRvO1xuICAgICAgcmV2ZXJzZWQgPSB2YWx1ZXMuZnJvbUFycm93U2NhbGUhIDwgMDtcbiAgICAgIHNjYWxlRmFjdG9yID0gTWF0aC5hYnModmFsdWVzLmZyb21BcnJvd1NjYWxlISk7XG4gICAgICB0eXBlID0gdmFsdWVzLmZyb21BcnJvd1R5cGUhO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09IFwidG9cIikge1xuICAgICAgbm9kZTEgPSB0aGlzLnRvO1xuICAgICAgbm9kZTIgPSB0aGlzLmZyb207XG4gICAgICByZXZlcnNlZCA9IHZhbHVlcy50b0Fycm93U2NhbGUhIDwgMDtcbiAgICAgIHNjYWxlRmFjdG9yID0gTWF0aC5hYnModmFsdWVzLnRvQXJyb3dTY2FsZSEpO1xuICAgICAgdHlwZSA9IHZhbHVlcy50b0Fycm93VHlwZSE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUxID0gdGhpcy50bztcbiAgICAgIG5vZGUyID0gdGhpcy5mcm9tO1xuICAgICAgcmV2ZXJzZWQgPSB2YWx1ZXMubWlkZGxlQXJyb3dTY2FsZSEgPCAwO1xuICAgICAgc2NhbGVGYWN0b3IgPSBNYXRoLmFicyh2YWx1ZXMubWlkZGxlQXJyb3dTY2FsZSEpO1xuICAgICAgdHlwZSA9IHZhbHVlcy5taWRkbGVBcnJvd1R5cGUhO1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IDE1ICogc2NhbGVGYWN0b3IgKyAzICogbGluZVdpZHRoOyAvLyAzKiBsaW5lV2lkdGggaXMgdGhlIHdpZHRoIG9mIHRoZSBlZGdlLlxuXG4gICAgLy8gaWYgbm90IGNvbm5lY3RlZCB0byBpdHNlbGZcbiAgICBpZiAobm9kZTEgIT0gbm9kZTIpIHtcbiAgICAgIGNvbnN0IGFwcHJveGltYXRlRWRnZUxlbmd0aCA9IE1hdGguaHlwb3QoXG4gICAgICAgIG5vZGUxLnggLSBub2RlMi54LFxuICAgICAgICBub2RlMS55IC0gbm9kZTIueVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlbGF0aXZlTGVuZ3RoID0gbGVuZ3RoIC8gYXBwcm94aW1hdGVFZGdlTGVuZ3RoO1xuXG4gICAgICBpZiAocG9zaXRpb24gIT09IFwibWlkZGxlXCIpIHtcbiAgICAgICAgLy8gZHJhdyBhcnJvdyBoZWFkXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc21vb3RoLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBwb2ludFQgPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb24obm9kZTEsIGN0eCwgeyB2aWE6IHZpYU5vZGUgfSk7XG4gICAgICAgICAgY29uc3QgZ3VpZGVQb3MgPSB0aGlzLmdldFBvaW50KFxuICAgICAgICAgICAgcG9pbnRULnQgKyByZWxhdGl2ZUxlbmd0aCAqIChwb3NpdGlvbiA9PT0gXCJmcm9tXCIgPyAxIDogLTEpLFxuICAgICAgICAgICAgdmlhTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYW5nbGUgPSBNYXRoLmF0YW4yKHBvaW50VC55IC0gZ3VpZGVQb3MueSwgcG9pbnRULnggLSBndWlkZVBvcy54KTtcbiAgICAgICAgICBhcnJvd1BvaW50ID0gcG9pbnRUO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFuZ2xlID0gTWF0aC5hdGFuMihub2RlMS55IC0gbm9kZTIueSwgbm9kZTEueCAtIG5vZGUyLngpO1xuICAgICAgICAgIGFycm93UG9pbnQgPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb24obm9kZTEsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5lZ2F0aXZlIGhhbGYgbGVuZ3RoIHJldmVyc2VzIGFycm93IGRpcmVjdGlvbi5cbiAgICAgICAgY29uc3QgaGFsZkxlbmd0aCA9IChyZXZlcnNlZCA/IC1yZWxhdGl2ZUxlbmd0aCA6IHJlbGF0aXZlTGVuZ3RoKSAvIDI7XG4gICAgICAgIGNvbnN0IGd1aWRlUG9zMSA9IHRoaXMuZ2V0UG9pbnQoMC41ICsgaGFsZkxlbmd0aCwgdmlhTm9kZSk7XG4gICAgICAgIGNvbnN0IGd1aWRlUG9zMiA9IHRoaXMuZ2V0UG9pbnQoMC41IC0gaGFsZkxlbmd0aCwgdmlhTm9kZSk7XG4gICAgICAgIGFuZ2xlID0gTWF0aC5hdGFuMihcbiAgICAgICAgICBndWlkZVBvczEueSAtIGd1aWRlUG9zMi55LFxuICAgICAgICAgIGd1aWRlUG9zMS54IC0gZ3VpZGVQb3MyLnhcbiAgICAgICAgKTtcbiAgICAgICAgYXJyb3dQb2ludCA9IHRoaXMuZ2V0UG9pbnQoMC41LCB2aWFOb2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZHJhdyBjaXJjbGVcbiAgICAgIGNvbnN0IFt4LCB5LCByYWRpdXNdID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YShjdHgpO1xuXG4gICAgICBpZiAocG9zaXRpb24gPT09IFwiZnJvbVwiKSB7XG4gICAgICAgIGNvbnN0IGxvdyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlO1xuICAgICAgICBjb25zdCBoaWdoID0gdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUgKyBNYXRoLlBJO1xuXG4gICAgICAgIGNvbnN0IHBvaW50VCA9IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICBsb3csXG4gICAgICAgICAgaGlnaCxcbiAgICAgICAgICBkaXJlY3Rpb246IC0xLFxuICAgICAgICB9KTtcbiAgICAgICAgYW5nbGUgPSBwb2ludFQudCAqIC0yICogTWF0aC5QSSArIDEuNSAqIE1hdGguUEkgKyAwLjEgKiBNYXRoLlBJO1xuICAgICAgICBhcnJvd1BvaW50ID0gcG9pbnRUO1xuICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gXCJ0b1wiKSB7XG4gICAgICAgIGNvbnN0IGxvdyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlO1xuICAgICAgICBjb25zdCBoaWdoID0gdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUgKyBNYXRoLlBJO1xuXG4gICAgICAgIGNvbnN0IHBvaW50VCA9IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICBsb3csXG4gICAgICAgICAgaGlnaCxcbiAgICAgICAgICBkaXJlY3Rpb246IDEsXG4gICAgICAgIH0pO1xuICAgICAgICBhbmdsZSA9IHBvaW50VC50ICogLTIgKiBNYXRoLlBJICsgMS41ICogTWF0aC5QSSAtIDEuMSAqIE1hdGguUEk7XG4gICAgICAgIGFycm93UG9pbnQgPSBwb2ludFQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZSAvICgyICogTWF0aC5QSSk7XG4gICAgICAgIGFycm93UG9pbnQgPSB0aGlzLl9wb2ludE9uQ2lyY2xlKHgsIHksIHJhZGl1cywgcG9zKTtcbiAgICAgICAgYW5nbGUgPSBwb3MgKiAtMiAqIE1hdGguUEkgKyAxLjUgKiBNYXRoLlBJICsgMC4xICogTWF0aC5QSTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB4aSA9IGFycm93UG9pbnQueCAtIGxlbmd0aCAqIDAuOSAqIE1hdGguY29zKGFuZ2xlKTtcbiAgICBjb25zdCB5aSA9IGFycm93UG9pbnQueSAtIGxlbmd0aCAqIDAuOSAqIE1hdGguc2luKGFuZ2xlKTtcbiAgICBjb25zdCBhcnJvd0NvcmUgPSB7IHg6IHhpLCB5OiB5aSB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBvaW50OiBhcnJvd1BvaW50LFxuICAgICAgY29yZTogYXJyb3dDb3JlLFxuICAgICAgYW5nbGU6IGFuZ2xlLFxuICAgICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGRyYXdBcnJvd0hlYWQoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImNvbG9yXCJcbiAgICAgIHwgXCJvcGFjaXR5XCJcbiAgICAgIHwgXCJzaGFkb3dDb2xvclwiXG4gICAgICB8IFwic2hhZG93U2l6ZVwiXG4gICAgICB8IFwic2hhZG93WFwiXG4gICAgICB8IFwic2hhZG93WVwiXG4gICAgICB8IFwid2lkdGhcIlxuICAgID4sXG4gICAgX3NlbGVjdGVkOiBib29sZWFuLFxuICAgIF9ob3ZlcjogYm9vbGVhbixcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB2b2lkIHtcbiAgICAvLyBzZXQgc3R5bGVcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmdldENvbG9yKGN0eCwgdmFsdWVzKTtcbiAgICBjdHguZmlsbFN0eWxlID0gY3R4LnN0cm9rZVN0eWxlO1xuICAgIGN0eC5saW5lV2lkdGggPSB2YWx1ZXMud2lkdGg7XG5cbiAgICBjb25zdCBjYW5GaWxsID0gRW5kUG9pbnRzLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuXG4gICAgaWYgKGNhbkZpbGwpIHtcbiAgICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICAgIGN0eC5maWxsKCk7XG4gICAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzaGFkb3cgZm9ybWF0dGluZyB2YWx1ZXMgaW4gdGhlIGNvbnRleHQgaWYgZW5hYmxlZCwgZG8gbm90aGluZyBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgZm9yIHRoZSBzaGFkb3cuXG4gICAqL1xuICBwdWJsaWMgZW5hYmxlU2hhZG93KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwic2hhZG93Q29sb3JcIiB8IFwic2hhZG93U2l6ZVwiIHwgXCJzaGFkb3dYXCIgfCBcInNoYWRvd1lcIlxuICAgID5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlcy5zaGFkb3cgPT09IHRydWUpIHtcbiAgICAgIGN0eC5zaGFkb3dDb2xvciA9IHZhbHVlcy5zaGFkb3dDb2xvcjtcbiAgICAgIGN0eC5zaGFkb3dCbHVyID0gdmFsdWVzLnNoYWRvd1NpemU7XG4gICAgICBjdHguc2hhZG93T2Zmc2V0WCA9IHZhbHVlcy5zaGFkb3dYO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSB2YWx1ZXMuc2hhZG93WTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHNoYWRvdyBmb3JtYXR0aW5nIHZhbHVlcyBpbiB0aGUgY29udGV4dCBpZiBlbmFibGVkLCBkbyBub3RoaW5nIG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBmb3IgdGhlIHNoYWRvdy5cbiAgICovXG4gIHB1YmxpYyBkaXNhYmxlU2hhZG93KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogRWRnZUZvcm1hdHRpbmdWYWx1ZXNcbiAgKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlcy5zaGFkb3cgPT09IHRydWUpIHtcbiAgICAgIGN0eC5zaGFkb3dDb2xvciA9IFwicmdiYSgwLDAsMCwwKVwiO1xuICAgICAgY3R4LnNoYWRvd0JsdXIgPSAwO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFggPSAwO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSAwO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGJhY2tncm91bmQgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXR0aW5nIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBmb3IgdGhlIGJhY2tncm91bmQuXG4gICAqL1xuICBwdWJsaWMgZHJhd0JhY2tncm91bmQoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJiYWNrZ3JvdW5kQ29sb3JcIiB8IFwiYmFja2dyb3VuZFNpemVcIlxuICAgID5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlcy5iYWNrZ3JvdW5kICE9PSBmYWxzZSkge1xuICAgICAgLy8gc2F2ZSBvcmlnaW5hbCBsaW5lIGF0dHJzXG4gICAgICBjb25zdCBvcmlnQ3R4QXR0ciA9IHtcbiAgICAgICAgc3Ryb2tlU3R5bGU6IGN0eC5zdHJva2VTdHlsZSxcbiAgICAgICAgbGluZVdpZHRoOiBjdHgubGluZVdpZHRoLFxuICAgICAgICBkYXNoZXM6IChjdHggYXMgYW55KS5kYXNoZXMsXG4gICAgICB9O1xuXG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSB2YWx1ZXMuYmFja2dyb3VuZENvbG9yO1xuICAgICAgY3R4LmxpbmVXaWR0aCA9IHZhbHVlcy5iYWNrZ3JvdW5kU2l6ZTtcbiAgICAgIHRoaXMuc2V0U3Ryb2tlRGFzaGVkKGN0eCwgdmFsdWVzLmJhY2tncm91bmREYXNoZXMpO1xuXG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgbGluZSBhdHRyc1xuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gb3JpZ0N0eEF0dHIuc3Ryb2tlU3R5bGU7XG4gICAgICBjdHgubGluZVdpZHRoID0gb3JpZ0N0eEF0dHIubGluZVdpZHRoO1xuICAgICAgKGN0eCBhcyBhbnkpLmRhc2hlcyA9IG9yaWdDdHhBdHRyLmRhc2hlcztcbiAgICAgIHRoaXMuc2V0U3Ryb2tlRGFzaGVkKGN0eCwgdmFsdWVzLmRhc2hlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbGluZSBkYXNoIHBhdHRlcm4gaWYgc3VwcG9ydGVkLiBMb2dzIGEgd2FybmluZyB0byB0aGUgY29uc29sZSBpZiBpdCBpc24ndCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gZGFzaGVzIC0gVGhlIHBhdHRlcm4gW2xpbmUsIHNwYWNlLCBsaW5l4oCmXSwgdHJ1ZSBmb3IgZGVmYXVsdCBkYXNoZWQgbGluZSBvciBmYWxzZSBmb3Igbm9ybWFsIGxpbmUuXG4gICAqL1xuICBwdWJsaWMgc2V0U3Ryb2tlRGFzaGVkKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGRhc2hlcz86IGJvb2xlYW4gfCBudW1iZXJbXVxuICApOiB2b2lkIHtcbiAgICBpZiAoZGFzaGVzICE9PSBmYWxzZSkge1xuICAgICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBBcnJheS5pc0FycmF5KGRhc2hlcykgPyBkYXNoZXMgOiBbNSwgNV07XG4gICAgICAgIGN0eC5zZXRMaW5lRGFzaChwYXR0ZXJuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcInNldExpbmVEYXNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLiBUaGUgZGFzaGVkIHN0cm9rZSBjYW5ub3QgYmUgdXNlZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3R4LnNldExpbmVEYXNoKFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcInNldExpbmVEYXNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLiBUaGUgZGFzaGVkIHN0cm9rZSBjYW5ub3QgYmUgdXNlZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IEVkZ2VCYXNlIH0gZnJvbSBcIi4vZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIFRoZSBCYXNlIENsYXNzIGZvciBhbGwgQmV6aWVyIGVkZ2VzLlxuICogQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbCBzbW9vdGggZ3JhZHVhbCBjdXJ2ZXMgaW4gcGF0aHMgYmV0d2VlbiBub2Rlcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJlemllckVkZ2VCYXNlPFZpYT4gZXh0ZW5kcyBFZGdlQmFzZTxWaWE+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgYWRkaXRpb25hbCBwb2ludChzKSB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICpcbiAgICogQHJldHVybnMgQ2FydGVzaWFuIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludChzKSB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBfZ2V0VmlhQ29vcmRpbmF0ZXMoKTogVmlhO1xuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgYm9yZGVyIG9mIHRoZSBub2RlIGFuZCB0aGUgZWRnZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBmdW5jdGlvbiB1c2VzIGJpbmFyeSBzZWFyY2ggdG8gbG9vayBmb3IgdGhlIHBvaW50IHdoZXJlIHRoZSBiZXppZXIgY3VydmUgY3Jvc3NlcyB0aGUgYm9yZGVyIG9mIHRoZSBub2RlLlxuICAgKiBAcGFyYW0gbmVhck5vZGUgLSBUaGUgbm9kZSAoZWl0aGVyIGZyb20gb3IgdG8gbm9kZSBvZiB0aGUgZWRnZSkuXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmlhTm9kZSAtIEFkZGl0aW9uYWwgbm9kZShzKSB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICogQHJldHVybnMgQ2FydGVzaWFuIGNvb3JkaW5hdGVzIG9mIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgYm9yZGVyIG9mIHRoZSBub2RlIGFuZCB0aGUgZWRnZS5cbiAgICovXG4gIHByb3RlY3RlZCBfZmluZEJvcmRlclBvc2l0aW9uQmV6aWVyKFxuICAgIG5lYXJOb2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2aWFOb2RlOiBWaWEgPSB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpXG4gICk6IFBvaW50VCB7XG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwO1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IDAuMjtcbiAgICBsZXQgZnJvbSA9IGZhbHNlO1xuICAgIGxldCBoaWdoID0gMTtcbiAgICBsZXQgbG93ID0gMDtcbiAgICBsZXQgbm9kZSA9IHRoaXMudG87XG4gICAgbGV0IHBvczogUG9pbnQ7XG4gICAgbGV0IG1pZGRsZTogbnVtYmVyO1xuXG4gICAgbGV0IGVuZFBvaW50T2Zmc2V0ID0gdGhpcy5vcHRpb25zLmVuZFBvaW50T2Zmc2V0XG4gICAgICA/IHRoaXMub3B0aW9ucy5lbmRQb2ludE9mZnNldC50b1xuICAgICAgOiAwO1xuXG4gICAgaWYgKG5lYXJOb2RlLmlkID09PSB0aGlzLmZyb20uaWQpIHtcbiAgICAgIG5vZGUgPSB0aGlzLmZyb207XG4gICAgICBmcm9tID0gdHJ1ZTtcblxuICAgICAgZW5kUG9pbnRPZmZzZXQgPSB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXRcbiAgICAgICAgPyB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbVxuICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcnJvd1N0cmlrZXRocm91Z2ggPT09IGZhbHNlKSB7XG4gICAgICBlbmRQb2ludE9mZnNldCA9IDA7XG4gICAgfVxuXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gICAgZG8ge1xuICAgICAgbWlkZGxlID0gKGxvdyArIGhpZ2gpICogMC41O1xuXG4gICAgICBwb3MgPSB0aGlzLmdldFBvaW50KG1pZGRsZSwgdmlhTm9kZSk7XG4gICAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIobm9kZS55IC0gcG9zLnksIG5vZGUueCAtIHBvcy54KTtcblxuICAgICAgY29uc3QgZGlzdGFuY2VUb0JvcmRlciA9XG4gICAgICAgIG5vZGUuZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSArIGVuZFBvaW50T2Zmc2V0O1xuXG4gICAgICBjb25zdCBkaXN0YW5jZVRvUG9pbnQgPSBNYXRoLnNxcnQoXG4gICAgICAgIE1hdGgucG93KHBvcy54IC0gbm9kZS54LCAyKSArIE1hdGgucG93KHBvcy55IC0gbm9kZS55LCAyKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBkaXN0YW5jZVRvQm9yZGVyIC0gZGlzdGFuY2VUb1BvaW50O1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZlcmVuY2UpIDwgdGhyZXNob2xkKSB7XG4gICAgICAgIGJyZWFrOyAvLyBmb3VuZFxuICAgICAgfSBlbHNlIGlmIChkaWZmZXJlbmNlIDwgMCkge1xuICAgICAgICAvLyBkaXN0YW5jZSB0byBub2RlcyBpcyBsYXJnZXIgdGhhbiBkaXN0YW5jZSB0byBib3JkZXIgLS0+IHQgbmVlZHMgdG8gYmUgYmlnZ2VyIGlmIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIHRvIG5vZGUuXG4gICAgICAgIGlmIChmcm9tID09PSBmYWxzZSkge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZnJvbSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICArK2l0ZXJhdGlvbjtcbiAgICB9IHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wb3MsXG4gICAgICB0OiBtaWRkbGUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBwb2ludCAoeDMseTMpIGFuZCBhIGxpbmUgc2VnbWVudCBmcm9tICh4MSx5MSkgdG8gKHgyLHkyKS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84NDkyMTEvc2hvcnRlc3QtZGlzdGFuY2FlLWJldHdlZW4tYS1wb2ludC1hbmQtYS1saW5lLXNlZ21lbnRcbiAgICogQHBhcmFtIHgxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB2aWEgLSBUaGUgY29udHJvbCBwb2ludCBmb3IgdGhlIGVkZ2UuXG4gICAqIEByZXR1cm5zIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBsaW5lIHNlZ21lbnQgYW5kIHRoZSBwb2ludC5cbiAgICovXG4gIHByb3RlY3RlZCBfZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXIsXG4gICAgdmlhOiBQb2ludFxuICApOiBudW1iZXIge1xuICAgIC8vIHgzLHkzIGlzIHRoZSBwb2ludFxuICAgIGxldCBtaW5EaXN0YW5jZSA9IDFlOTtcbiAgICBsZXQgZGlzdGFuY2U7XG4gICAgbGV0IGksIHQsIHgsIHk7XG4gICAgbGV0IGxhc3RYID0geDE7XG4gICAgbGV0IGxhc3RZID0geTE7XG4gICAgZm9yIChpID0gMTsgaSA8IDEwOyBpKyspIHtcbiAgICAgIHQgPSAwLjEgKiBpO1xuICAgICAgeCA9XG4gICAgICAgIE1hdGgucG93KDEgLSB0LCAyKSAqIHgxICsgMiAqIHQgKiAoMSAtIHQpICogdmlhLnggKyBNYXRoLnBvdyh0LCAyKSAqIHgyO1xuICAgICAgeSA9XG4gICAgICAgIE1hdGgucG93KDEgLSB0LCAyKSAqIHkxICsgMiAqIHQgKiAoMSAtIHQpICogdmlhLnkgKyBNYXRoLnBvdyh0LCAyKSAqIHkyO1xuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIGRpc3RhbmNlID0gdGhpcy5fZ2V0RGlzdGFuY2VUb0xpbmUobGFzdFgsIGxhc3RZLCB4LCB5LCB4MywgeTMpO1xuICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlIDwgbWluRGlzdGFuY2UgPyBkaXN0YW5jZSA6IG1pbkRpc3RhbmNlO1xuICAgICAgfVxuICAgICAgbGFzdFggPSB4O1xuICAgICAgbGFzdFkgPSB5O1xuICAgIH1cblxuICAgIHJldHVybiBtaW5EaXN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgYSBiZXppZXIgY3VydmUgYmV0d2VlbiB0d28gbm9kZXMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBtZXRob2QgYWNjZXB0cyB6ZXJvLCBvbmUgb3IgdHdvIGNvbnRyb2wgcG9pbnRzLlxuICAgKiBQYXNzaW5nIHplcm8gY29udHJvbCBwb2ludHMganVzdCBkcmF3cyBhIHN0cmFpZ2h0IGxpbmUuXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gU3R5bGUgb3B0aW9ucyBmb3IgZWRnZSBkcmF3aW5nLlxuICAgKiBAcGFyYW0gdmlhTm9kZTEgLSBGaXJzdCBjb250cm9sIHBvaW50IGZvciBjdXJ2ZSBkcmF3aW5nLlxuICAgKiBAcGFyYW0gdmlhTm9kZTIgLSBTZWNvbmQgY29udHJvbCBwb2ludCBmb3IgY3VydmUgZHJhd2luZy5cbiAgICovXG4gIHByb3RlY3RlZCBfYmV6aWVyQ3VydmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImJhY2tncm91bmRDb2xvclwiXG4gICAgICB8IFwiYmFja2dyb3VuZFNpemVcIlxuICAgICAgfCBcInNoYWRvd0NvbG9yXCJcbiAgICAgIHwgXCJzaGFkb3dTaXplXCJcbiAgICAgIHwgXCJzaGFkb3dYXCJcbiAgICAgIHwgXCJzaGFkb3dZXCJcbiAgICA+LFxuICAgIHZpYU5vZGUxPzogUG9pbnQsXG4gICAgdmlhTm9kZTI/OiBQb2ludFxuICApOiB2b2lkIHtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyh0aGlzLmZyb21Qb2ludC54LCB0aGlzLmZyb21Qb2ludC55KTtcblxuICAgIGlmICh2aWFOb2RlMSAhPSBudWxsICYmIHZpYU5vZGUxLnggIT0gbnVsbCkge1xuICAgICAgaWYgKHZpYU5vZGUyICE9IG51bGwgJiYgdmlhTm9kZTIueCAhPSBudWxsKSB7XG4gICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKFxuICAgICAgICAgIHZpYU5vZGUxLngsXG4gICAgICAgICAgdmlhTm9kZTEueSxcbiAgICAgICAgICB2aWFOb2RlMi54LFxuICAgICAgICAgIHZpYU5vZGUyLnksXG4gICAgICAgICAgdGhpcy50b1BvaW50LngsXG4gICAgICAgICAgdGhpcy50b1BvaW50LnlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKFxuICAgICAgICAgIHZpYU5vZGUxLngsXG4gICAgICAgICAgdmlhTm9kZTEueSxcbiAgICAgICAgICB0aGlzLnRvUG9pbnQueCxcbiAgICAgICAgICB0aGlzLnRvUG9pbnQueVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmYWxsYmFjayB0byBub3JtYWwgc3RyYWlnaHQgZWRnZVxuICAgICAgY3R4LmxpbmVUbyh0aGlzLnRvUG9pbnQueCwgdGhpcy50b1BvaW50LnkpO1xuICAgIH1cblxuICAgIC8vIGRyYXcgYSBiYWNrZ3JvdW5kXG4gICAgdGhpcy5kcmF3QmFja2dyb3VuZChjdHgsIHZhbHVlcyk7XG5cbiAgICAvLyBkcmF3IHNoYWRvdyBpZiBlbmFibGVkXG4gICAgdGhpcy5lbmFibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICAgIGN0eC5zdHJva2UoKTtcbiAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFZpYSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFZpYUNvb3JkaW5hdGVzKCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCZXppZXJFZGdlQmFzZSB9IGZyb20gXCIuL3V0aWwvYmV6aWVyLWVkZ2UtYmFzZVwiO1xuaW1wb3J0IHtcbiAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdXRpbC90eXBlc1wiO1xuXG4vKipcbiAqIEEgRHluYW1pYyBCZXppZXIgRWRnZS4gQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbCBzbW9vdGggZ3JhZHVhbFxuICogY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuIFRoZSBEeW5hbWljIHBpZWNlIHJlZmVycyB0byBob3cgdGhlIGN1cnZlXG4gKiByZWFjdHMgdG8gcGh5c2ljcyBjaGFuZ2VzLlxuICpcbiAqIEBhdWdtZW50cyBCZXppZXJFZGdlQmFzZVxuICovXG5leHBvcnQgY2xhc3MgQmV6aWVyRWRnZUR5bmFtaWMgZXh0ZW5kcyBCZXppZXJFZGdlQmFzZTxQb2ludD4ge1xuICBwdWJsaWMgdmlhOiBWTm9kZSA9IHRoaXMudmlhOyAvLyBjb25zdHJ1Y3RvciDihpIgc3VwZXIg4oaSIHN1cGVyIOKGkiBzZXRPcHRpb25zIOKGkiBzZXR1cFN1cHBvcnROb2RlXG4gIHByaXZhdGUgcmVhZG9ubHkgX2JvdW5kRnVuY3Rpb246ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgLy90aGlzLnZpYSA9IHVuZGVmaW5lZDsgLy8gSGVyZSBmb3IgY29tcGxldGVuZXNzIGJ1dCBub3QgYWxsb3dlZCB0byBkZWZpbmVkIGJlZm9yZSBzdXBlcigpIGlzIGludm9rZWQuXG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpOyAvLyAtLT4gdGhpcyBjYWxscyB0aGUgc2V0T3B0aW9ucyBiZWxvd1xuICAgIHRoaXMuX2JvdW5kRnVuY3Rpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnBvc2l0aW9uQmV6aWVyTm9kZSgpO1xuICAgIH07XG4gICAgdGhpcy5fYm9keS5lbWl0dGVyLm9uKFwiX3JlcG9zaXRpb25CZXppZXJOb2Rlc1wiLCB0aGlzLl9ib3VuZEZ1bmN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zOiBFZGdlT3B0aW9ucyk6IHZvaWQge1xuICAgIHN1cGVyLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgcGh5c2ljcyBoYXMgY2hhbmdlZC5cbiAgICBsZXQgcGh5c2ljc0NoYW5nZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm9wdGlvbnMucGh5c2ljcyAhPT0gb3B0aW9ucy5waHlzaWNzKSB7XG4gICAgICBwaHlzaWNzQ2hhbmdlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG9wdGlvbnMgYW5kIHRoZSB0byBhbmQgZnJvbSBub2Rlc1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5pZCA9IHRoaXMub3B0aW9ucy5pZDtcbiAgICB0aGlzLmZyb20gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy5mcm9tXTtcbiAgICB0aGlzLnRvID0gdGhpcy5fYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMudG9dO1xuXG4gICAgLy8gc2V0dXAgdGhlIHN1cHBvcnQgbm9kZSBhbmQgY29ubmVjdFxuICAgIHRoaXMuc2V0dXBTdXBwb3J0Tm9kZSgpO1xuICAgIHRoaXMuY29ubmVjdCgpO1xuXG4gICAgLy8gd2hlbiB3ZSBjaGFuZ2UgdGhlIHBoeXNpY3Mgc3RhdGUgb2YgdGhlIGVkZ2UsIHdlIHJlcG9zaXRpb24gdGhlIHN1cHBvcnQgbm9kZS5cbiAgICBpZiAocGh5c2ljc0NoYW5nZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy52aWEuc2V0T3B0aW9ucyh7IHBoeXNpY3M6IHRoaXMub3B0aW9ucy5waHlzaWNzIH0pO1xuICAgICAgdGhpcy5wb3NpdGlvbkJlemllck5vZGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGNvbm5lY3QoKTogdm9pZCB7XG4gICAgdGhpcy5mcm9tID0gdGhpcy5fYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMuZnJvbV07XG4gICAgdGhpcy50byA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLnRvXTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZyb20gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy50byA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLm9wdGlvbnMucGh5c2ljcyA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIHRoaXMudmlhLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZml4IHdlaXJkIGJlaGF2aW91ciB3aGVyZSBhIHNlbGYgcmVmZXJlbmNpbmcgbm9kZSBoYXMgcGh5c2ljcyBlbmFibGVkXG4gICAgICBpZiAodGhpcy5mcm9tLmlkID09PSB0aGlzLnRvLmlkKSB7XG4gICAgICAgIHRoaXMudmlhLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmlhLnNldE9wdGlvbnMoeyBwaHlzaWNzOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgY2xlYW51cCgpOiBib29sZWFuIHtcbiAgICB0aGlzLl9ib2R5LmVtaXR0ZXIub2ZmKFwiX3JlcG9zaXRpb25CZXppZXJOb2Rlc1wiLCB0aGlzLl9ib3VuZEZ1bmN0aW9uKTtcbiAgICBpZiAodGhpcy52aWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIHRoaXMuX2JvZHkubm9kZXNbdGhpcy52aWEuaWRdO1xuICAgICAgdGhpcy52aWEgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbmQgYWRkIGEgc3VwcG9ydCBub2RlIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEJlemllciBjdXJ2ZXMgcmVxdWlyZSBhbiBhbmNob3IgcG9pbnQgdG8gY2FsY3VsYXRlIHRoZSBzbW9vdGggZmxvdy5cbiAgICogVGhlc2UgcG9pbnRzIGFyZSBub2Rlcy5cbiAgICogVGhlc2Ugbm9kZXMgYXJlIGludmlzaWJsZSBidXQgYXJlIHVzZWQgZm9yIHRoZSBmb3JjZSBjYWxjdWxhdGlvbi5cbiAgICpcbiAgICogVGhlIGNoYW5nZWQgZGF0YSBpcyBub3QgY2FsbGVkLCBpZiBuZWVkZWQsIGl0IGlzIHJldHVybmVkIGJ5IHRoZSBtYWluIGVkZ2UgY29uc3RydWN0b3IuXG4gICAqL1xuICBwdWJsaWMgc2V0dXBTdXBwb3J0Tm9kZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgbm9kZUlkID0gXCJlZGdlSWQ6XCIgKyB0aGlzLmlkO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuX2JvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGUoe1xuICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcGh5c2ljczogdHJ1ZSxcbiAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ib2R5Lm5vZGVzW25vZGVJZF0gPSBub2RlO1xuICAgICAgdGhpcy52aWEgPSBub2RlO1xuICAgICAgdGhpcy52aWEucGFyZW50RWRnZUlkID0gdGhpcy5pZDtcbiAgICAgIHRoaXMucG9zaXRpb25CZXppZXJOb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9uIGJlemllciBub2RlLlxuICAgKi9cbiAgcHVibGljIHBvc2l0aW9uQmV6aWVyTm9kZSgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnZpYSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmZyb20gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy50byAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLnZpYS54ID0gMC41ICogKHRoaXMuZnJvbS54ICsgdGhpcy50by54KTtcbiAgICAgIHRoaXMudmlhLnkgPSAwLjUgKiAodGhpcy5mcm9tLnkgKyB0aGlzLnRvLnkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy52aWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy52aWEueCA9IDA7XG4gICAgICB0aGlzLnZpYS55ID0gMDtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9saW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIHwgXCJiYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgfCBcImJhY2tncm91bmRTaXplXCJcbiAgICAgIHwgXCJzaGFkb3dDb2xvclwiXG4gICAgICB8IFwic2hhZG93U2l6ZVwiXG4gICAgICB8IFwic2hhZG93WFwiXG4gICAgICB8IFwic2hhZG93WVwiXG4gICAgPixcbiAgICB2aWFOb2RlOiBWTm9kZVxuICApOiB2b2lkIHtcbiAgICB0aGlzLl9iZXppZXJDdXJ2ZShjdHgsIHZhbHVlcywgdmlhTm9kZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9nZXRWaWFDb29yZGluYXRlcygpOiBQb2ludCB7XG4gICAgcmV0dXJuIHRoaXMudmlhO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFBvaW50IHtcbiAgICByZXR1cm4gdGhpcy52aWE7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldFBvaW50KHBvc2l0aW9uOiBudW1iZXIsIHZpYU5vZGU6IFBvaW50ID0gdGhpcy52aWEpOiBQb2ludCB7XG4gICAgaWYgKHRoaXMuZnJvbSA9PT0gdGhpcy50bykge1xuICAgICAgY29uc3QgW2N4LCBjeSwgY3JdID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YSgpO1xuICAgICAgY29uc3QgYSA9IDIgKiBNYXRoLlBJICogKDEgLSBwb3NpdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBjeCArIGNyICogTWF0aC5zaW4oYSksXG4gICAgICAgIHk6IGN5ICsgY3IgLSBjciAqICgxIC0gTWF0aC5jb3MoYSkpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDpcbiAgICAgICAgICBNYXRoLnBvdygxIC0gcG9zaXRpb24sIDIpICogdGhpcy5mcm9tUG9pbnQueCArXG4gICAgICAgICAgMiAqIHBvc2l0aW9uICogKDEgLSBwb3NpdGlvbikgKiB2aWFOb2RlLnggK1xuICAgICAgICAgIE1hdGgucG93KHBvc2l0aW9uLCAyKSAqIHRoaXMudG9Qb2ludC54LFxuICAgICAgICB5OlxuICAgICAgICAgIE1hdGgucG93KDEgLSBwb3NpdGlvbiwgMikgKiB0aGlzLmZyb21Qb2ludC55ICtcbiAgICAgICAgICAyICogcG9zaXRpb24gKiAoMSAtIHBvc2l0aW9uKSAqIHZpYU5vZGUueSArXG4gICAgICAgICAgTWF0aC5wb3cocG9zaXRpb24sIDIpICogdGhpcy50b1BvaW50LnksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2ZpbmRCb3JkZXJQb3NpdGlvbihcbiAgICBuZWFyTm9kZTogVk5vZGUsXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcbiAgKTogUG9pbnRUIHtcbiAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQmV6aWVyKG5lYXJOb2RlLCBjdHgsIHRoaXMudmlhKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyXG4gICk6IG51bWJlciB7XG4gICAgLy8geDMseTMgaXMgdGhlIHBvaW50XG4gICAgcmV0dXJuIHRoaXMuX2dldERpc3RhbmNlVG9CZXppZXJFZGdlKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHRoaXMudmlhKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJlemllckVkZ2VCYXNlIH0gZnJvbSBcIi4vdXRpbC9iZXppZXItZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi91dGlsL3R5cGVzXCI7XG5cbi8qKlxuICogQSBTdGF0aWMgQmV6aWVyIEVkZ2UuIEJlemllciBjdXJ2ZXMgYXJlIHVzZWQgdG8gbW9kZWwgc21vb3RoIGdyYWR1YWwgY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCZXppZXJFZGdlU3RhdGljIGV4dGVuZHMgQmV6aWVyRWRnZUJhc2U8UG9pbnQ+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICB8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAgICAgIHwgXCJiYWNrZ3JvdW5kU2l6ZVwiXG4gICAgICB8IFwic2hhZG93Q29sb3JcIlxuICAgICAgfCBcInNoYWRvd1NpemVcIlxuICAgICAgfCBcInNoYWRvd1hcIlxuICAgICAgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZTogUG9pbnRcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fYmV6aWVyQ3VydmUoY3R4LCB2YWx1ZXMsIHZpYU5vZGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFBvaW50IHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdmlhIG5vZGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFdlIGRvIG5vdCB1c2UgdGhlIHRvIGFuZCBmcm9tUG9pbnRzIGhlcmUgdG8gbWFrZSB0aGUgdmlhIG5vZGVzIHRoZSBzYW1lIGFzIGVkZ2VzIHdpdGhvdXQgYXJyb3dzLlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIHZpYSBub2RlLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXRWaWFDb29yZGluYXRlcygpOiBQb2ludCB7XG4gICAgLy8gQXNzdW1wdGlvbjogeC95IGNvb3JkaW5hdGVzIGluIGZyb20vdG8gYWx3YXlzIGRlZmluZWRcbiAgICBjb25zdCBmYWN0b3IgPSB0aGlzLm9wdGlvbnMuc21vb3RoLnJvdW5kbmVzcztcbiAgICBjb25zdCB0eXBlID0gdGhpcy5vcHRpb25zLnNtb290aC50eXBlO1xuICAgIGxldCBkeCA9IE1hdGguYWJzKHRoaXMuZnJvbS54IC0gdGhpcy50by54KTtcbiAgICBsZXQgZHkgPSBNYXRoLmFicyh0aGlzLmZyb20ueSAtIHRoaXMudG8ueSk7XG4gICAgaWYgKHR5cGUgPT09IFwiZGlzY3JldGVcIiB8fCB0eXBlID09PSBcImRpYWdvbmFsQ3Jvc3NcIikge1xuICAgICAgbGV0IHN0ZXBYO1xuICAgICAgbGV0IHN0ZXBZO1xuXG4gICAgICBpZiAoZHggPD0gZHkpIHtcbiAgICAgICAgc3RlcFggPSBzdGVwWSA9IGZhY3RvciAqIGR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RlcFggPSBzdGVwWSA9IGZhY3RvciAqIGR4O1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5mcm9tLnggPiB0aGlzLnRvLngpIHtcbiAgICAgICAgc3RlcFggPSAtc3RlcFg7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5mcm9tLnkgPj0gdGhpcy50by55KSB7XG4gICAgICAgIHN0ZXBZID0gLXN0ZXBZO1xuICAgICAgfVxuXG4gICAgICBsZXQgeFZpYSA9IHRoaXMuZnJvbS54ICsgc3RlcFg7XG4gICAgICBsZXQgeVZpYSA9IHRoaXMuZnJvbS55ICsgc3RlcFk7XG5cbiAgICAgIGlmICh0eXBlID09PSBcImRpc2NyZXRlXCIpIHtcbiAgICAgICAgaWYgKGR4IDw9IGR5KSB7XG4gICAgICAgICAgeFZpYSA9IGR4IDwgZmFjdG9yICogZHkgPyB0aGlzLmZyb20ueCA6IHhWaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeVZpYSA9IGR5IDwgZmFjdG9yICogZHggPyB0aGlzLmZyb20ueSA6IHlWaWE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgeDogeFZpYSwgeTogeVZpYSB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJzdHJhaWdodENyb3NzXCIpIHtcbiAgICAgIGxldCBzdGVwWCA9ICgxIC0gZmFjdG9yKSAqIGR4O1xuICAgICAgbGV0IHN0ZXBZID0gKDEgLSBmYWN0b3IpICogZHk7XG5cbiAgICAgIGlmIChkeCA8PSBkeSkge1xuICAgICAgICAvLyB1cCAtIGRvd25cbiAgICAgICAgc3RlcFggPSAwO1xuICAgICAgICBpZiAodGhpcy5mcm9tLnkgPCB0aGlzLnRvLnkpIHtcbiAgICAgICAgICBzdGVwWSA9IC1zdGVwWTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGVmdCAtIHJpZ2h0XG4gICAgICAgIGlmICh0aGlzLmZyb20ueCA8IHRoaXMudG8ueCkge1xuICAgICAgICAgIHN0ZXBYID0gLXN0ZXBYO1xuICAgICAgICB9XG4gICAgICAgIHN0ZXBZID0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogdGhpcy50by54ICsgc3RlcFgsXG4gICAgICAgIHk6IHRoaXMudG8ueSArIHN0ZXBZLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICBsZXQgc3RlcFggPSAoMSAtIGZhY3RvcikgKiBkeDtcbiAgICAgIGlmICh0aGlzLmZyb20ueCA8IHRoaXMudG8ueCkge1xuICAgICAgICBzdGVwWCA9IC1zdGVwWDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogdGhpcy50by54ICsgc3RlcFgsXG4gICAgICAgIHk6IHRoaXMuZnJvbS55LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwidmVydGljYWxcIikge1xuICAgICAgbGV0IHN0ZXBZID0gKDEgLSBmYWN0b3IpICogZHk7XG4gICAgICBpZiAodGhpcy5mcm9tLnkgPCB0aGlzLnRvLnkpIHtcbiAgICAgICAgc3RlcFkgPSAtc3RlcFk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHRoaXMuZnJvbS54LFxuICAgICAgICB5OiB0aGlzLnRvLnkgKyBzdGVwWSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcImN1cnZlZENXXCIpIHtcbiAgICAgIGR4ID0gdGhpcy50by54IC0gdGhpcy5mcm9tLng7XG4gICAgICBkeSA9IHRoaXMuZnJvbS55IC0gdGhpcy50by55O1xuICAgICAgY29uc3QgcmFkaXVzID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgICAgIGNvbnN0IHBpID0gTWF0aC5QSTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxBbmdsZSA9IE1hdGguYXRhbjIoZHksIGR4KTtcbiAgICAgIGNvbnN0IG15QW5nbGUgPSAob3JpZ2luYWxBbmdsZSArIChmYWN0b3IgKiAwLjUgKyAwLjUpICogcGkpICUgKDIgKiBwaSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHRoaXMuZnJvbS54ICsgKGZhY3RvciAqIDAuNSArIDAuNSkgKiByYWRpdXMgKiBNYXRoLnNpbihteUFuZ2xlKSxcbiAgICAgICAgeTogdGhpcy5mcm9tLnkgKyAoZmFjdG9yICogMC41ICsgMC41KSAqIHJhZGl1cyAqIE1hdGguY29zKG15QW5nbGUpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiY3VydmVkQ0NXXCIpIHtcbiAgICAgIGR4ID0gdGhpcy50by54IC0gdGhpcy5mcm9tLng7XG4gICAgICBkeSA9IHRoaXMuZnJvbS55IC0gdGhpcy50by55O1xuICAgICAgY29uc3QgcmFkaXVzID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgICAgIGNvbnN0IHBpID0gTWF0aC5QSTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxBbmdsZSA9IE1hdGguYXRhbjIoZHksIGR4KTtcbiAgICAgIGNvbnN0IG15QW5nbGUgPSAob3JpZ2luYWxBbmdsZSArICgtZmFjdG9yICogMC41ICsgMC41KSAqIHBpKSAlICgyICogcGkpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiB0aGlzLmZyb20ueCArIChmYWN0b3IgKiAwLjUgKyAwLjUpICogcmFkaXVzICogTWF0aC5zaW4obXlBbmdsZSksXG4gICAgICAgIHk6IHRoaXMuZnJvbS55ICsgKGZhY3RvciAqIDAuNSArIDAuNSkgKiByYWRpdXMgKiBNYXRoLmNvcyhteUFuZ2xlKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbnRpbnVvdXNcbiAgICAgIGxldCBzdGVwWDtcbiAgICAgIGxldCBzdGVwWTtcblxuICAgICAgaWYgKGR4IDw9IGR5KSB7XG4gICAgICAgIHN0ZXBYID0gc3RlcFkgPSBmYWN0b3IgKiBkeTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZXBYID0gc3RlcFkgPSBmYWN0b3IgKiBkeDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZnJvbS54ID4gdGhpcy50by54KSB7XG4gICAgICAgIHN0ZXBYID0gLXN0ZXBYO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZnJvbS55ID49IHRoaXMudG8ueSkge1xuICAgICAgICBzdGVwWSA9IC1zdGVwWTtcbiAgICAgIH1cblxuICAgICAgbGV0IHhWaWEgPSB0aGlzLmZyb20ueCArIHN0ZXBYO1xuICAgICAgbGV0IHlWaWEgPSB0aGlzLmZyb20ueSArIHN0ZXBZO1xuXG4gICAgICBpZiAoZHggPD0gZHkpIHtcbiAgICAgICAgaWYgKHRoaXMuZnJvbS54IDw9IHRoaXMudG8ueCkge1xuICAgICAgICAgIHhWaWEgPSB0aGlzLnRvLnggPCB4VmlhID8gdGhpcy50by54IDogeFZpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB4VmlhID0gdGhpcy50by54ID4geFZpYSA/IHRoaXMudG8ueCA6IHhWaWE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmZyb20ueSA+PSB0aGlzLnRvLnkpIHtcbiAgICAgICAgICB5VmlhID0gdGhpcy50by55ID4geVZpYSA/IHRoaXMudG8ueSA6IHlWaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeVZpYSA9IHRoaXMudG8ueSA8IHlWaWEgPyB0aGlzLnRvLnkgOiB5VmlhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHg6IHhWaWEsIHk6IHlWaWEgfTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9maW5kQm9yZGVyUG9zaXRpb24oXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIG9wdGlvbnM6IHsgdmlhPzogUG9pbnQgfSA9IHt9XG4gICk6IFBvaW50VCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkJlemllcihuZWFyTm9kZSwgY3R4LCBvcHRpb25zLnZpYSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9nZXREaXN0YW5jZVRvRWRnZShcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlcixcbiAgICB2aWFOb2RlID0gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKVxuICApIHtcbiAgICAvLyB4Myx5MyBpcyB0aGUgcG9pbnRcbiAgICByZXR1cm4gdGhpcy5fZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgdmlhTm9kZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldFBvaW50KFxuICAgIHBvc2l0aW9uOiBudW1iZXIsXG4gICAgdmlhTm9kZTogUG9pbnQgPSB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpXG4gICk6IFBvaW50IHtcbiAgICBjb25zdCB0ID0gcG9zaXRpb247XG4gICAgY29uc3QgeCA9XG4gICAgICBNYXRoLnBvdygxIC0gdCwgMikgKiB0aGlzLmZyb21Qb2ludC54ICtcbiAgICAgIDIgKiB0ICogKDEgLSB0KSAqIHZpYU5vZGUueCArXG4gICAgICBNYXRoLnBvdyh0LCAyKSAqIHRoaXMudG9Qb2ludC54O1xuICAgIGNvbnN0IHkgPVxuICAgICAgTWF0aC5wb3coMSAtIHQsIDIpICogdGhpcy5mcm9tUG9pbnQueSArXG4gICAgICAyICogdCAqICgxIC0gdCkgKiB2aWFOb2RlLnkgK1xuICAgICAgTWF0aC5wb3codCwgMikgKiB0aGlzLnRvUG9pbnQueTtcblxuICAgIHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJlemllckVkZ2VCYXNlIH0gZnJvbSBcIi4vYmV6aWVyLWVkZ2UtYmFzZVwiO1xuaW1wb3J0IHsgTGFiZWwsIEVkZ2VPcHRpb25zLCBQb2ludCwgVkJvZHkgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEEgQmFzZSBDbGFzcyBmb3IgYWxsIEN1YmljIEJlemllciBFZGdlcy4gQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbFxuICogc21vb3RoIGdyYWR1YWwgY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuXG4gKlxuICogQGF1Z21lbnRzIEJlemllckVkZ2VCYXNlXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDdWJpY0JlemllckVkZ2VCYXNlPFZpYT4gZXh0ZW5kcyBCZXppZXJFZGdlQmFzZTxWaWE+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBhIHBvaW50ICh4Myx5MykgYW5kIGEgbGluZSBzZWdtZW50IGZyb20gKHgxLHkxKSB0byAoeDIseTIpLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzg0OTIxMS9zaG9ydGVzdC1kaXN0YW5jYWUtYmV0d2Vlbi1hLXBvaW50LWFuZC1hLWxpbmUtc2VnbWVudFxuICAgKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CJUMzJUE5emllcl9jdXJ2ZVxuICAgKiBAcGFyYW0geDEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDIgLSBTZWNvbmQgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB4MyAtIFBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHZpYTEgLSBUaGUgZmlyc3QgcG9pbnQgdGhpcyBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKiBAcGFyYW0gdmlhMiAtIFRoZSBzZWNvbmQgcG9pbnQgdGhpcyBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbGluZSBzZWdtZW50IGFuZCB0aGUgcG9pbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9CZXppZXJFZGdlMihcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlcixcbiAgICB2aWExOiBQb2ludCxcbiAgICB2aWEyOiBQb2ludFxuICApOiBudW1iZXIge1xuICAgIC8vIHgzLHkzIGlzIHRoZSBwb2ludFxuICAgIGxldCBtaW5EaXN0YW5jZSA9IDFlOTtcbiAgICBsZXQgbGFzdFggPSB4MTtcbiAgICBsZXQgbGFzdFkgPSB5MTtcbiAgICBjb25zdCB2ZWMgPSBbMCwgMCwgMCwgMF07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxMDsgaSsrKSB7XG4gICAgICBjb25zdCB0ID0gMC4xICogaTtcbiAgICAgIHZlY1swXSA9IE1hdGgucG93KDEgLSB0LCAzKTtcbiAgICAgIHZlY1sxXSA9IDMgKiB0ICogTWF0aC5wb3coMSAtIHQsIDIpO1xuICAgICAgdmVjWzJdID0gMyAqIE1hdGgucG93KHQsIDIpICogKDEgLSB0KTtcbiAgICAgIHZlY1szXSA9IE1hdGgucG93KHQsIDMpO1xuICAgICAgY29uc3QgeCA9IHZlY1swXSAqIHgxICsgdmVjWzFdICogdmlhMS54ICsgdmVjWzJdICogdmlhMi54ICsgdmVjWzNdICogeDI7XG4gICAgICBjb25zdCB5ID0gdmVjWzBdICogeTEgKyB2ZWNbMV0gKiB2aWExLnkgKyB2ZWNbMl0gKiB2aWEyLnkgKyB2ZWNbM10gKiB5MjtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IHRoaXMuX2dldERpc3RhbmNlVG9MaW5lKGxhc3RYLCBsYXN0WSwgeCwgeSwgeDMsIHkzKTtcbiAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZSA8IG1pbkRpc3RhbmNlID8gZGlzdGFuY2UgOiBtaW5EaXN0YW5jZTtcbiAgICAgIH1cbiAgICAgIGxhc3RYID0geDtcbiAgICAgIGxhc3RZID0geTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWluRGlzdGFuY2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBDdWJpY0JlemllckVkZ2VCYXNlIH0gZnJvbSBcIi4vdXRpbC9jdWJpYy1iZXppZXItZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi91dGlsL3R5cGVzXCI7XG5cbi8qKlxuICogQSBDdWJpYyBCZXppZXIgRWRnZS4gQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbCBzbW9vdGggZ3JhZHVhbCBjdXJ2ZXMgaW4gcGF0aHMgYmV0d2VlbiBub2Rlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEN1YmljQmV6aWVyRWRnZSBleHRlbmRzIEN1YmljQmV6aWVyRWRnZUJhc2U8W1BvaW50LCBQb2ludF0+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICB8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAgICAgIHwgXCJiYWNrZ3JvdW5kU2l6ZVwiXG4gICAgICB8IFwic2hhZG93Q29sb3JcIlxuICAgICAgfCBcInNoYWRvd1NpemVcIlxuICAgICAgfCBcInNoYWRvd1hcIlxuICAgICAgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZXM6IFtQb2ludCwgUG9pbnRdXG4gICk6IHZvaWQge1xuICAgIC8vIGdldCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHN1cHBvcnQgcG9pbnRzLlxuICAgIGNvbnN0IHZpYTEgPSB2aWFOb2Rlc1swXTtcbiAgICBjb25zdCB2aWEyID0gdmlhTm9kZXNbMV07XG4gICAgdGhpcy5fYmV6aWVyQ3VydmUoY3R4LCB2YWx1ZXMsIHZpYTEsIHZpYTIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGFkZGl0aW9uYWwgcG9pbnRzIHRoZSBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50cyB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICovXG4gIHByb3RlY3RlZCBfZ2V0VmlhQ29vcmRpbmF0ZXMoKTogW1BvaW50LCBQb2ludF0ge1xuICAgIGNvbnN0IGR4ID0gdGhpcy5mcm9tLnggLSB0aGlzLnRvLng7XG4gICAgY29uc3QgZHkgPSB0aGlzLmZyb20ueSAtIHRoaXMudG8ueTtcblxuICAgIGxldCB4MTogbnVtYmVyO1xuICAgIGxldCB5MTogbnVtYmVyO1xuICAgIGxldCB4MjogbnVtYmVyO1xuICAgIGxldCB5MjogbnVtYmVyO1xuICAgIGNvbnN0IHJvdW5kbmVzcyA9IHRoaXMub3B0aW9ucy5zbW9vdGgucm91bmRuZXNzO1xuXG4gICAgLy8gaG9yaXpvbnRhbCBpZiB4ID4geSBvciBpZiBkaXJlY3Rpb24gaXMgZm9yY2VkIG9yIGlmIGRpcmVjdGlvbiBpcyBob3Jpem9udGFsXG4gICAgaWYgKFxuICAgICAgKE1hdGguYWJzKGR4KSA+IE1hdGguYWJzKGR5KSB8fFxuICAgICAgICB0aGlzLm9wdGlvbnMuc21vb3RoLmZvcmNlRGlyZWN0aW9uID09PSB0cnVlIHx8XG4gICAgICAgIHRoaXMub3B0aW9ucy5zbW9vdGguZm9yY2VEaXJlY3Rpb24gPT09IFwiaG9yaXpvbnRhbFwiKSAmJlxuICAgICAgdGhpcy5vcHRpb25zLnNtb290aC5mb3JjZURpcmVjdGlvbiAhPT0gXCJ2ZXJ0aWNhbFwiXG4gICAgKSB7XG4gICAgICB5MSA9IHRoaXMuZnJvbS55O1xuICAgICAgeTIgPSB0aGlzLnRvLnk7XG4gICAgICB4MSA9IHRoaXMuZnJvbS54IC0gcm91bmRuZXNzICogZHg7XG4gICAgICB4MiA9IHRoaXMudG8ueCArIHJvdW5kbmVzcyAqIGR4O1xuICAgIH0gZWxzZSB7XG4gICAgICB5MSA9IHRoaXMuZnJvbS55IC0gcm91bmRuZXNzICogZHk7XG4gICAgICB5MiA9IHRoaXMudG8ueSArIHJvdW5kbmVzcyAqIGR5O1xuICAgICAgeDEgPSB0aGlzLmZyb20ueDtcbiAgICAgIHgyID0gdGhpcy50by54O1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICB7IHg6IHgxLCB5OiB5MSB9LFxuICAgICAgeyB4OiB4MiwgeTogeTIgfSxcbiAgICBdO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFtQb2ludCwgUG9pbnRdIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2ZpbmRCb3JkZXJQb3NpdGlvbihcbiAgICBuZWFyTm9kZTogVk5vZGUsXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcbiAgKTogUG9pbnRUIHtcbiAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQmV6aWVyKG5lYXJOb2RlLCBjdHgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXIsXG4gICAgW3ZpYTEsIHZpYTJdOiBbUG9pbnQsIFBvaW50XSA9IHRoaXMuX2dldFZpYUNvb3JkaW5hdGVzKClcbiAgKTogbnVtYmVyIHtcbiAgICAvLyB4Myx5MyBpcyB0aGUgcG9pbnRcbiAgICByZXR1cm4gdGhpcy5fZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UyKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHZpYTEsIHZpYTIpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRQb2ludChcbiAgICBwb3NpdGlvbjogbnVtYmVyLFxuICAgIFt2aWExLCB2aWEyXTogW1BvaW50LCBQb2ludF0gPSB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpXG4gICk6IFBvaW50IHtcbiAgICBjb25zdCB0ID0gcG9zaXRpb247XG4gICAgY29uc3QgdmVjOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFtcbiAgICAgIE1hdGgucG93KDEgLSB0LCAzKSxcbiAgICAgIDMgKiB0ICogTWF0aC5wb3coMSAtIHQsIDIpLFxuICAgICAgMyAqIE1hdGgucG93KHQsIDIpICogKDEgLSB0KSxcbiAgICAgIE1hdGgucG93KHQsIDMpLFxuICAgIF07XG4gICAgY29uc3QgeCA9XG4gICAgICB2ZWNbMF0gKiB0aGlzLmZyb21Qb2ludC54ICtcbiAgICAgIHZlY1sxXSAqIHZpYTEueCArXG4gICAgICB2ZWNbMl0gKiB2aWEyLnggK1xuICAgICAgdmVjWzNdICogdGhpcy50b1BvaW50Lng7XG4gICAgY29uc3QgeSA9XG4gICAgICB2ZWNbMF0gKiB0aGlzLmZyb21Qb2ludC55ICtcbiAgICAgIHZlY1sxXSAqIHZpYTEueSArXG4gICAgICB2ZWNbMl0gKiB2aWEyLnkgK1xuICAgICAgdmVjWzNdICogdGhpcy50b1BvaW50Lnk7XG5cbiAgICByZXR1cm4geyB4OiB4LCB5OiB5IH07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFZGdlQmFzZSB9IGZyb20gXCIuL3V0aWwvZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi91dGlsL3R5cGVzXCI7XG5cbi8qKlxuICogQSBTdHJhaWdodCBFZGdlLlxuICovXG5leHBvcnQgY2xhc3MgU3RyYWlnaHRFZGdlIGV4dGVuZHMgRWRnZUJhc2Uge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBvZiBnaXZlbiBlZGdlLlxuICAgKiBAcGFyYW0gYm9keSAtIFRoZSBib2R5IG9mIHRoZSBuZXR3b3JrLlxuICAgKiBAcGFyYW0gbGFiZWxNb2R1bGUgLSBMYWJlbCBtb2R1bGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogRWRnZU9wdGlvbnMsIGJvZHk6IFZCb2R5LCBsYWJlbE1vZHVsZTogTGFiZWwpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9saW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwic2hhZG93Q29sb3JcIiB8IFwic2hhZG93U2l6ZVwiIHwgXCJzaGFkb3dYXCIgfCBcInNoYWRvd1lcIlxuICAgID5cbiAgKTogdm9pZCB7XG4gICAgLy8gZHJhdyBhIHN0cmFpZ2h0IGxpbmVcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyh0aGlzLmZyb21Qb2ludC54LCB0aGlzLmZyb21Qb2ludC55KTtcbiAgICBjdHgubGluZVRvKHRoaXMudG9Qb2ludC54LCB0aGlzLnRvUG9pbnQueSk7XG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICBjdHguc3Ryb2tlKCk7XG4gICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0VmlhTm9kZSgpOiB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldFBvaW50KHBvc2l0aW9uOiBudW1iZXIpOiBQb2ludCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6ICgxIC0gcG9zaXRpb24pICogdGhpcy5mcm9tUG9pbnQueCArIHBvc2l0aW9uICogdGhpcy50b1BvaW50LngsXG4gICAgICB5OiAoMSAtIHBvc2l0aW9uKSAqIHRoaXMuZnJvbVBvaW50LnkgKyBwb3NpdGlvbiAqIHRoaXMudG9Qb2ludC55LFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9maW5kQm9yZGVyUG9zaXRpb24oXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXG4gICk6IFBvaW50VCB7XG4gICAgbGV0IG5vZGUxID0gdGhpcy50bztcbiAgICBsZXQgbm9kZTIgPSB0aGlzLmZyb207XG4gICAgaWYgKG5lYXJOb2RlLmlkID09PSB0aGlzLmZyb20uaWQpIHtcbiAgICAgIG5vZGUxID0gdGhpcy5mcm9tO1xuICAgICAgbm9kZTIgPSB0aGlzLnRvO1xuICAgIH1cblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMihub2RlMS55IC0gbm9kZTIueSwgbm9kZTEueCAtIG5vZGUyLngpO1xuICAgIGNvbnN0IGR4ID0gbm9kZTEueCAtIG5vZGUyLng7XG4gICAgY29uc3QgZHkgPSBub2RlMS55IC0gbm9kZTIueTtcbiAgICBjb25zdCBlZGdlU2VnbWVudExlbmd0aCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgY29uc3QgdG9Cb3JkZXJEaXN0ID0gbmVhck5vZGUuZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKTtcbiAgICBjb25zdCB0b0JvcmRlclBvaW50ID1cbiAgICAgIChlZGdlU2VnbWVudExlbmd0aCAtIHRvQm9yZGVyRGlzdCkgLyBlZGdlU2VnbWVudExlbmd0aDtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiAoMSAtIHRvQm9yZGVyUG9pbnQpICogbm9kZTIueCArIHRvQm9yZGVyUG9pbnQgKiBub2RlMS54LFxuICAgICAgeTogKDEgLSB0b0JvcmRlclBvaW50KSAqIG5vZGUyLnkgKyB0b0JvcmRlclBvaW50ICogbm9kZTEueSxcbiAgICAgIHQ6IDAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyXG4gICk6IG51bWJlciB7XG4gICAgLy8geDMseTMgaXMgdGhlIHBvaW50XG4gICAgcmV0dXJuIHRoaXMuX2dldERpc3RhbmNlVG9MaW5lKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpO1xuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgYnJpZGdlT2JqZWN0LFxuICBkZWVwRXh0ZW5kLFxuICBpc1N0cmluZyxcbiAgbWVyZ2VPcHRpb25zLFxuICBzZWxlY3RpdmVEZWVwRXh0ZW5kLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcIi4vc2hhcmVkL0xhYmVsXCI7XG5pbXBvcnQge1xuICBjaG9vc2lmeSxcbiAgZ2V0U2VsZlJlZkNvb3JkaW5hdGVzLFxuICBpc1ZhbGlkTGFiZWwsXG4gIHBvaW50SW5SZWN0LFxufSBmcm9tIFwiLi9zaGFyZWQvQ29tcG9uZW50VXRpbFwiO1xuaW1wb3J0IHtcbiAgQmV6aWVyRWRnZUR5bmFtaWMsXG4gIEJlemllckVkZ2VTdGF0aWMsXG4gIEN1YmljQmV6aWVyRWRnZSxcbiAgU3RyYWlnaHRFZGdlLFxufSBmcm9tIFwiLi9lZGdlc1wiO1xuXG4vKipcbiAqIEFuIGVkZ2UgY29ubmVjdHMgdHdvIG5vZGVzIGFuZCBoYXMgYSBzcGVjaWZpYyBkaXJlY3Rpb24uXG4gKi9cbmNsYXNzIEVkZ2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgICAgICAgIHZhbHVlcyBzcGVjaWZpYyB0byB0aGlzIGVkZ2UsIG11c3QgY29udGFpbiBhdCBsZWFzdCAnZnJvbScgYW5kICd0bydcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHkgICAgICAgICAgIHNoYXJlZCBzdGF0ZSBmcm9tIE5ldHdvcmsgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtOZXR3b3JrLkltYWdlc30gaW1hZ2VsaXN0ICBBIGxpc3Qgd2l0aCBpbWFnZXMuIE9ubHkgbmVlZGVkIHdoZW4gdGhlIGVkZ2UgaGFzIGltYWdlIGFycm93cy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbE9wdGlvbnMgIG9wdGlvbnMgZnJvbSB0aGUgRWRnZXNIYW5kbGVyIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0T3B0aW9ucyBkZWZhdWx0IG9wdGlvbnMgZnJvbSB0aGUgRWRnZUhhbmRsZXIgaW5zdGFuY2UuIFZhbHVlIGFuZCByZWZlcmVuY2UgYXJlIGNvbnN0YW50XG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBpbWFnZWxpc3QsIGdsb2JhbE9wdGlvbnMsIGRlZmF1bHRPcHRpb25zKSB7XG4gICAgaWYgKGJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYm9keSBwcm92aWRlZFwiKTtcbiAgICB9XG5cbiAgICAvLyBTaW5jZSBnbG9iYWxPcHRpb25zIGlzIGNvbnN0YW50IGluIHZhbHVlcyBhcyB3ZWxsIGFzIHJlZmVyZW5jZSxcbiAgICAvLyBGb2xsb3dpbmcgbmVlZHMgdG8gYmUgZG9uZSBvbmx5IG9uY2UuXG5cbiAgICB0aGlzLm9wdGlvbnMgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucyk7XG4gICAgdGhpcy5nbG9iYWxPcHRpb25zID0gZ2xvYmFsT3B0aW9ucztcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmltYWdlbGlzdCA9IGltYWdlbGlzdDtcblxuICAgIC8vIGluaXRpYWxpemUgdmFyaWFibGVzXG4gICAgdGhpcy5pZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZyb21JZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRvSWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuaG92ZXIgPSBmYWxzZTtcbiAgICB0aGlzLmxhYmVsRGlydHkgPSB0cnVlO1xuXG4gICAgdGhpcy5iYXNlV2lkdGggPSB0aGlzLm9wdGlvbnMud2lkdGg7XG4gICAgdGhpcy5iYXNlRm9udFNpemUgPSB0aGlzLm9wdGlvbnMuZm9udC5zaXplO1xuXG4gICAgdGhpcy5mcm9tID0gdW5kZWZpbmVkOyAvLyBhIG5vZGVcbiAgICB0aGlzLnRvID0gdW5kZWZpbmVkOyAvLyBhIG5vZGVcblxuICAgIHRoaXMuZWRnZVR5cGUgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5sYWJlbE1vZHVsZSA9IG5ldyBMYWJlbChcbiAgICAgIHRoaXMuYm9keSxcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIHRydWUgLyogSXQncyBhbiBlZGdlIGxhYmVsICovXG4gICAgKTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG9yIG92ZXJ3cml0ZSBvcHRpb25zIGZvciB0aGUgZWRnZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAgYW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfGJvb2xlYW59IHVuZGVmaW5lZCBpZiBubyBvcHRpb25zLCB0cnVlIGlmIGxheW91dCBhZmZlY3RpbmcgZGF0YSBjaGFuZ2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGb2xsb3dpbmcgb3B0aW9ucyBpZiBjaGFuZ2VkIGFmZmVjdCB0aGUgbGF5b3V0LlxuICAgIGxldCBhZmZlY3RzTGF5b3V0ID1cbiAgICAgICh0eXBlb2Ygb3B0aW9ucy5waHlzaWNzICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHRoaXMub3B0aW9ucy5waHlzaWNzICE9PSBvcHRpb25zLnBoeXNpY3MpIHx8XG4gICAgICAodHlwZW9mIG9wdGlvbnMuaGlkZGVuICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICh0aGlzLm9wdGlvbnMuaGlkZGVuIHx8IGZhbHNlKSAhPT0gKG9wdGlvbnMuaGlkZGVuIHx8IGZhbHNlKSkgfHxcbiAgICAgICh0eXBlb2Ygb3B0aW9ucy5mcm9tICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHRoaXMub3B0aW9ucy5mcm9tICE9PSBvcHRpb25zLmZyb20pIHx8XG4gICAgICAodHlwZW9mIG9wdGlvbnMudG8gIT09IFwidW5kZWZpbmVkXCIgJiYgdGhpcy5vcHRpb25zLnRvICE9PSBvcHRpb25zLnRvKTtcblxuICAgIEVkZ2UucGFyc2VPcHRpb25zKHRoaXMub3B0aW9ucywgb3B0aW9ucywgdHJ1ZSwgdGhpcy5nbG9iYWxPcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5mcm9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZnJvbUlkID0gb3B0aW9ucy5mcm9tO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50byAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRvSWQgPSBvcHRpb25zLnRvO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50aXRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRpdGxlID0gb3B0aW9ucy50aXRsZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy52YWx1ZSA9IHBhcnNlRmxvYXQob3B0aW9ucy52YWx1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGlsZSA9IFtvcHRpb25zLCB0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnNdO1xuICAgIHRoaXMuY2hvb3NlciA9IGNob29zaWZ5KFwiZWRnZVwiLCBwaWxlKTtcblxuICAgIC8vIHVwZGF0ZSBsYWJlbCBNb2R1bGVcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKG9wdGlvbnMpO1xuXG4gICAgLy8gVXBkYXRlIGVkZ2UgdHlwZSwgdGhpcyBpZiBjaGFuZ2VkIGFmZmVjdHMgdGhlIGxheW91dC5cbiAgICBhZmZlY3RzTGF5b3V0ID0gdGhpcy51cGRhdGVFZGdlVHlwZSgpIHx8IGFmZmVjdHNMYXlvdXQ7XG5cbiAgICAvLyBpZiBhbnl0aGluZyBoYXMgYmVlbiB1cGRhdGVzLCByZXNldCB0aGUgc2VsZWN0aW9uIHdpZHRoIGFuZCB0aGUgaG92ZXIgd2lkdGhcbiAgICB0aGlzLl9zZXRJbnRlcmFjdGlvbldpZHRocygpO1xuXG4gICAgLy8gQSBub2RlIGlzIGNvbm5lY3RlZCB3aGVuIGl0IGhhcyBhIGZyb20gYW5kIHRvIG5vZGUgdGhhdCBib3RoIGV4aXN0IGluIHRoZSBuZXR3b3JrLmJvZHkubm9kZXMuXG4gICAgdGhpcy5jb25uZWN0KCk7XG5cbiAgICByZXR1cm4gYWZmZWN0c0xheW91dDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50T3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3T3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd0RlbGV0aW9uPWZhbHNlXVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2dsb2JhbE9wdGlvbnM9e31dXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHlGcm9tR2xvYmFscz1mYWxzZV1cbiAgICovXG4gIHN0YXRpYyBwYXJzZU9wdGlvbnMoXG4gICAgcGFyZW50T3B0aW9ucyxcbiAgICBuZXdPcHRpb25zLFxuICAgIGFsbG93RGVsZXRpb24gPSBmYWxzZSxcbiAgICBnbG9iYWxPcHRpb25zID0ge30sXG4gICAgY29weUZyb21HbG9iYWxzID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgZmllbGRzID0gW1xuICAgICAgXCJlbmRQb2ludE9mZnNldFwiLFxuICAgICAgXCJhcnJvd1N0cmlrZXRocm91Z2hcIixcbiAgICAgIFwiaWRcIixcbiAgICAgIFwiZnJvbVwiLFxuICAgICAgXCJoaWRkZW5cIixcbiAgICAgIFwiaG92ZXJXaWR0aFwiLFxuICAgICAgXCJsYWJlbEhpZ2hsaWdodEJvbGRcIixcbiAgICAgIFwibGVuZ3RoXCIsXG4gICAgICBcImxpbmVcIixcbiAgICAgIFwib3BhY2l0eVwiLFxuICAgICAgXCJwaHlzaWNzXCIsXG4gICAgICBcInNjYWxpbmdcIixcbiAgICAgIFwic2VsZWN0aW9uV2lkdGhcIixcbiAgICAgIFwic2VsZlJlZmVyZW5jZVNpemVcIixcbiAgICAgIFwic2VsZlJlZmVyZW5jZVwiLFxuICAgICAgXCJ0b1wiLFxuICAgICAgXCJ0aXRsZVwiLFxuICAgICAgXCJ2YWx1ZVwiLFxuICAgICAgXCJ3aWR0aFwiLFxuICAgICAgXCJmb250XCIsXG4gICAgICBcImNob3NlblwiLFxuICAgICAgXCJ3aWR0aENvbnN0cmFpbnRcIixcbiAgICBdO1xuXG4gICAgLy8gb25seSBkZWVwIGV4dGVuZCB0aGUgaXRlbXMgaW4gdGhlIGZpZWxkIGFycmF5LiBUaGVzZSBkbyBub3QgaGF2ZSBzaG9ydGhhbmQuXG4gICAgc2VsZWN0aXZlRGVlcEV4dGVuZChmaWVsZHMsIHBhcmVudE9wdGlvbnMsIG5ld09wdGlvbnMsIGFsbG93RGVsZXRpb24pO1xuXG4gICAgLy8gT25seSB1c2UgZW5kUG9pbnRPZmZzZXQgdmFsdWVzIChmcm9tIGFuZCB0bykgaWYgaXQncyB2YWxpZCB2YWx1ZXNcbiAgICBpZiAoXG4gICAgICBuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbSAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbSkpIHtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tID0gbmV3T3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tID1cbiAgICAgICAgICBnbG9iYWxPcHRpb25zLmVuZFBvaW50T2Zmc2V0LmZyb20gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBnbG9iYWxPcHRpb25zLmVuZFBvaW50T2Zmc2V0LmZyb21cbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc29sZS5lcnJvcihcImVuZFBvaW50T2Zmc2V0LmZyb20gaXMgbm90IGEgdmFsaWQgbnVtYmVyXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgbmV3T3B0aW9ucy5lbmRQb2ludE9mZnNldC50byAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG8pKSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG8gPSBuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0LnRvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5lbmRQb2ludE9mZnNldC50byA9XG4gICAgICAgICAgZ2xvYmFsT3B0aW9ucy5lbmRQb2ludE9mZnNldC50byAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGdsb2JhbE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG9cbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc29sZS5lcnJvcihcImVuZFBvaW50T2Zmc2V0LnRvIGlzIG5vdCBhIHZhbGlkIG51bWJlclwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPbmx5IGNvcHkgbGFiZWwgaWYgaXQncyBhIGxlZ2FsIHZhbHVlLlxuICAgIGlmIChpc1ZhbGlkTGFiZWwobmV3T3B0aW9ucy5sYWJlbCkpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMubGFiZWwgPSBuZXdPcHRpb25zLmxhYmVsO1xuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRMYWJlbChwYXJlbnRPcHRpb25zLmxhYmVsKSkge1xuICAgICAgcGFyZW50T3B0aW9ucy5sYWJlbCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBtZXJnZU9wdGlvbnMocGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgXCJzbW9vdGhcIiwgZ2xvYmFsT3B0aW9ucyk7XG4gICAgbWVyZ2VPcHRpb25zKHBhcmVudE9wdGlvbnMsIG5ld09wdGlvbnMsIFwic2hhZG93XCIsIGdsb2JhbE9wdGlvbnMpO1xuICAgIG1lcmdlT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBcImJhY2tncm91bmRcIiwgZ2xvYmFsT3B0aW9ucyk7XG5cbiAgICBpZiAobmV3T3B0aW9ucy5kYXNoZXMgIT09IHVuZGVmaW5lZCAmJiBuZXdPcHRpb25zLmRhc2hlcyAhPT0gbnVsbCkge1xuICAgICAgcGFyZW50T3B0aW9ucy5kYXNoZXMgPSBuZXdPcHRpb25zLmRhc2hlcztcbiAgICB9IGVsc2UgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUgJiYgbmV3T3B0aW9ucy5kYXNoZXMgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuZGFzaGVzID0gT2JqZWN0LmNyZWF0ZShnbG9iYWxPcHRpb25zLmRhc2hlcyk7IC8vIHRoaXMgc2V0cyB0aGUgcG9pbnRlciBvZiB0aGUgb3B0aW9uIGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb24uXG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBzY2FsaW5nIG5ld09wdGlvbnNcbiAgICBpZiAobmV3T3B0aW9ucy5zY2FsaW5nICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5zY2FsaW5nICE9PSBudWxsKSB7XG4gICAgICBpZiAobmV3T3B0aW9ucy5zY2FsaW5nLm1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuc2NhbGluZy5taW4gPSBuZXdPcHRpb25zLnNjYWxpbmcubWluO1xuICAgICAgfVxuICAgICAgaWYgKG5ld09wdGlvbnMuc2NhbGluZy5tYXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYXJlbnRPcHRpb25zLnNjYWxpbmcubWF4ID0gbmV3T3B0aW9ucy5zY2FsaW5nLm1heDtcbiAgICAgIH1cbiAgICAgIG1lcmdlT3B0aW9ucyhcbiAgICAgICAgcGFyZW50T3B0aW9ucy5zY2FsaW5nLFxuICAgICAgICBuZXdPcHRpb25zLnNjYWxpbmcsXG4gICAgICAgIFwibGFiZWxcIixcbiAgICAgICAgZ2xvYmFsT3B0aW9ucy5zY2FsaW5nXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoYWxsb3dEZWxldGlvbiA9PT0gdHJ1ZSAmJiBuZXdPcHRpb25zLnNjYWxpbmcgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuc2NhbGluZyA9IE9iamVjdC5jcmVhdGUoZ2xvYmFsT3B0aW9ucy5zY2FsaW5nKTsgLy8gdGhpcyBzZXRzIHRoZSBwb2ludGVyIG9mIHRoZSBvcHRpb24gYmFjayB0byB0aGUgZ2xvYmFsIG9wdGlvbi5cbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgbXVsdGlwbGUgaW5wdXQgY2FzZXMgZm9yIGFycm93c1xuICAgIGlmIChuZXdPcHRpb25zLmFycm93cyAhPT0gdW5kZWZpbmVkICYmIG5ld09wdGlvbnMuYXJyb3dzICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG5ld09wdGlvbnMuYXJyb3dzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IGFycm93cyA9IG5ld09wdGlvbnMuYXJyb3dzLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuYXJyb3dzLnRvLmVuYWJsZWQgPSBhcnJvd3MuaW5kZXhPZihcInRvXCIpICE9IC0xO1xuICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cy5taWRkbGUuZW5hYmxlZCA9IGFycm93cy5pbmRleE9mKFwibWlkZGxlXCIpICE9IC0xO1xuICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cy5mcm9tLmVuYWJsZWQgPSBhcnJvd3MuaW5kZXhPZihcImZyb21cIikgIT0gLTE7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXdPcHRpb25zLmFycm93cyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBtZXJnZU9wdGlvbnMoXG4gICAgICAgICAgcGFyZW50T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgbmV3T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgXCJ0b1wiLFxuICAgICAgICAgIGdsb2JhbE9wdGlvbnMuYXJyb3dzXG4gICAgICAgICk7XG4gICAgICAgIG1lcmdlT3B0aW9ucyhcbiAgICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBuZXdPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBcIm1pZGRsZVwiLFxuICAgICAgICAgIGdsb2JhbE9wdGlvbnMuYXJyb3dzXG4gICAgICAgICk7XG4gICAgICAgIG1lcmdlT3B0aW9ucyhcbiAgICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBuZXdPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBcImZyb21cIixcbiAgICAgICAgICBnbG9iYWxPcHRpb25zLmFycm93c1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGFycm93IG5ld09wdGlvbnMgY2FuIG9ubHkgYmUgYW4gb2JqZWN0IG9yIGEgc3RyaW5nLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbi4gWW91IHVzZWQ6XCIgK1xuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobmV3T3B0aW9ucy5hcnJvd3MpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuYXJyb3dzID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmFycm93cyA9IE9iamVjdC5jcmVhdGUoZ2xvYmFsT3B0aW9ucy5hcnJvd3MpOyAvLyB0aGlzIHNldHMgdGhlIHBvaW50ZXIgb2YgdGhlIG9wdGlvbiBiYWNrIHRvIHRoZSBnbG9iYWwgb3B0aW9uLlxuICAgIH1cblxuICAgIC8vIGhhbmRsZSBtdWx0aXBsZSBpbnB1dCBjYXNlcyBmb3IgY29sb3JcbiAgICBpZiAobmV3T3B0aW9ucy5jb2xvciAhPT0gdW5kZWZpbmVkICYmIG5ld09wdGlvbnMuY29sb3IgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZyb21Db2xvciA9IGlzU3RyaW5nKG5ld09wdGlvbnMuY29sb3IpXG4gICAgICAgID8ge1xuICAgICAgICAgICAgY29sb3I6IG5ld09wdGlvbnMuY29sb3IsXG4gICAgICAgICAgICBoaWdobGlnaHQ6IG5ld09wdGlvbnMuY29sb3IsXG4gICAgICAgICAgICBob3ZlcjogbmV3T3B0aW9ucy5jb2xvcixcbiAgICAgICAgICAgIGluaGVyaXQ6IGZhbHNlLFxuICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICB9XG4gICAgICAgIDogbmV3T3B0aW9ucy5jb2xvcjtcbiAgICAgIGNvbnN0IHRvQ29sb3IgPSBwYXJlbnRPcHRpb25zLmNvbG9yO1xuXG4gICAgICAvLyBJZiBwYXNzZWQsIGZpbGwgaW4gdmFsdWVzIGZyb20gZGVmYXVsdCBvcHRpb25zIC0gcmVxdWlyZWQgaW4gdGhlIGNhc2Ugb2Ygbm8gcHJvdG90eXBlIGJyaWRnaW5nXG4gICAgICBpZiAoY29weUZyb21HbG9iYWxzKSB7XG4gICAgICAgIGRlZXBFeHRlbmQodG9Db2xvciwgZ2xvYmFsT3B0aW9ucy5jb2xvciwgZmFsc2UsIGFsbG93RGVsZXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2xlYXIgbG9jYWwgcHJvcGVydGllcyAtIG5lZWQgdG8gZG8gaXQgbGlrZSB0aGlzIGluIG9yZGVyIHRvIHJldGFpbiBwcm90b3R5cGUgYnJpZGdlc1xuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gdG9Db2xvcikge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodG9Db2xvciwgaSkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0b0NvbG9yW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNTdHJpbmcodG9Db2xvcikpIHtcbiAgICAgICAgdG9Db2xvci5jb2xvciA9IHRvQ29sb3I7XG4gICAgICAgIHRvQ29sb3IuaGlnaGxpZ2h0ID0gdG9Db2xvcjtcbiAgICAgICAgdG9Db2xvci5ob3ZlciA9IHRvQ29sb3I7XG4gICAgICAgIHRvQ29sb3IuaW5oZXJpdCA9IGZhbHNlO1xuICAgICAgICBpZiAoZnJvbUNvbG9yLm9wYWNpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3Iub3BhY2l0eSA9IDEuMDsgLy8gc2V0IGRlZmF1bHRcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNvbG9yc0RlZmluZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGZyb21Db2xvci5jb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdG9Db2xvci5jb2xvciA9IGZyb21Db2xvci5jb2xvcjtcbiAgICAgICAgICBjb2xvcnNEZWZpbmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZnJvbUNvbG9yLmhpZ2hsaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdG9Db2xvci5oaWdobGlnaHQgPSBmcm9tQ29sb3IuaGlnaGxpZ2h0O1xuICAgICAgICAgIGNvbG9yc0RlZmluZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tQ29sb3IuaG92ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3IuaG92ZXIgPSBmcm9tQ29sb3IuaG92ZXI7XG4gICAgICAgICAgY29sb3JzRGVmaW5lZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZyb21Db2xvci5pbmhlcml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0b0NvbG9yLmluaGVyaXQgPSBmcm9tQ29sb3IuaW5oZXJpdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZnJvbUNvbG9yLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3Iub3BhY2l0eSA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIGZyb21Db2xvci5vcGFjaXR5KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sb3JzRGVmaW5lZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRvQ29sb3IuaW5oZXJpdCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0b0NvbG9yLmluaGVyaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdG9Db2xvci5pbmhlcml0ID0gXCJmcm9tXCI7IC8vIFNldCBkZWZhdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuY29sb3IgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuY29sb3IgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5jb2xvcik7IC8vIHNldCB0aGUgb2JqZWN0IGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb25zXG4gICAgfVxuXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUgJiYgbmV3T3B0aW9ucy5mb250ID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmZvbnQgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5mb250KTsgLy8gc2V0IHRoZSBvYmplY3QgYmFjayB0byB0aGUgZ2xvYmFsIG9wdGlvbnNcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld09wdGlvbnMsIFwic2VsZlJlZmVyZW5jZVNpemVcIikpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJUaGUgc2VsZlJlZmVyZW5jZVNpemUgcHJvcGVydHkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBzZWxmUmVmZXJlbmNlIHByb3BlcnR5IGluc3RlYWQuIFRoZSBzZWxmUmVmZXJlbmNlIGNhbiBiZSBzZXQgbGlrZSB0aGlzZSBzZWxmUmVmZXJlbmNlOntzaXplOjMwLCBhbmdsZTpNYXRoLlBJIC8gNH1cIlxuICAgICAgKTtcbiAgICAgIHBhcmVudE9wdGlvbnMuc2VsZlJlZmVyZW5jZS5zaXplID0gbmV3T3B0aW9ucy5zZWxmUmVmZXJlbmNlU2l6ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge0Fycm93T3B0aW9uc31cbiAgICovXG4gIGdldEZvcm1hdHRpbmdWYWx1ZXMoKSB7XG4gICAgY29uc3QgdG9BcnJvdyA9XG4gICAgICB0aGlzLm9wdGlvbnMuYXJyb3dzLnRvID09PSB0cnVlIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuYXJyb3dzLnRvLmVuYWJsZWQgPT09IHRydWU7XG4gICAgY29uc3QgZnJvbUFycm93ID1cbiAgICAgIHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbSA9PT0gdHJ1ZSB8fFxuICAgICAgdGhpcy5vcHRpb25zLmFycm93cy5mcm9tLmVuYWJsZWQgPT09IHRydWU7XG4gICAgY29uc3QgbWlkZGxlQXJyb3cgPVxuICAgICAgdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUgPT09IHRydWUgfHxcbiAgICAgIHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLmVuYWJsZWQgPT09IHRydWU7XG4gICAgY29uc3QgaW5oZXJpdHNDb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvci5pbmhlcml0O1xuICAgIGNvbnN0IHZhbHVlcyA9IHtcbiAgICAgIHRvQXJyb3c6IHRvQXJyb3csXG4gICAgICB0b0Fycm93U2NhbGU6IHRoaXMub3B0aW9ucy5hcnJvd3MudG8uc2NhbGVGYWN0b3IsXG4gICAgICB0b0Fycm93VHlwZTogdGhpcy5vcHRpb25zLmFycm93cy50by50eXBlLFxuICAgICAgdG9BcnJvd1NyYzogdGhpcy5vcHRpb25zLmFycm93cy50by5zcmMsXG4gICAgICB0b0Fycm93SW1hZ2VXaWR0aDogdGhpcy5vcHRpb25zLmFycm93cy50by5pbWFnZVdpZHRoLFxuICAgICAgdG9BcnJvd0ltYWdlSGVpZ2h0OiB0aGlzLm9wdGlvbnMuYXJyb3dzLnRvLmltYWdlSGVpZ2h0LFxuICAgICAgbWlkZGxlQXJyb3c6IG1pZGRsZUFycm93LFxuICAgICAgbWlkZGxlQXJyb3dTY2FsZTogdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUuc2NhbGVGYWN0b3IsXG4gICAgICBtaWRkbGVBcnJvd1R5cGU6IHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLnR5cGUsXG4gICAgICBtaWRkbGVBcnJvd1NyYzogdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUuc3JjLFxuICAgICAgbWlkZGxlQXJyb3dJbWFnZVdpZHRoOiB0aGlzLm9wdGlvbnMuYXJyb3dzLm1pZGRsZS5pbWFnZVdpZHRoLFxuICAgICAgbWlkZGxlQXJyb3dJbWFnZUhlaWdodDogdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUuaW1hZ2VIZWlnaHQsXG4gICAgICBmcm9tQXJyb3c6IGZyb21BcnJvdyxcbiAgICAgIGZyb21BcnJvd1NjYWxlOiB0aGlzLm9wdGlvbnMuYXJyb3dzLmZyb20uc2NhbGVGYWN0b3IsXG4gICAgICBmcm9tQXJyb3dUeXBlOiB0aGlzLm9wdGlvbnMuYXJyb3dzLmZyb20udHlwZSxcbiAgICAgIGZyb21BcnJvd1NyYzogdGhpcy5vcHRpb25zLmFycm93cy5mcm9tLnNyYyxcbiAgICAgIGZyb21BcnJvd0ltYWdlV2lkdGg6IHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbS5pbWFnZVdpZHRoLFxuICAgICAgZnJvbUFycm93SW1hZ2VIZWlnaHQ6IHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbS5pbWFnZUhlaWdodCxcbiAgICAgIGFycm93U3RyaWtldGhyb3VnaDogdGhpcy5vcHRpb25zLmFycm93U3RyaWtldGhyb3VnaCxcbiAgICAgIGNvbG9yOiBpbmhlcml0c0NvbG9yID8gdW5kZWZpbmVkIDogdGhpcy5vcHRpb25zLmNvbG9yLmNvbG9yLFxuICAgICAgaW5oZXJpdHNDb2xvcjogaW5oZXJpdHNDb2xvcixcbiAgICAgIG9wYWNpdHk6IHRoaXMub3B0aW9ucy5jb2xvci5vcGFjaXR5LFxuICAgICAgaGlkZGVuOiB0aGlzLm9wdGlvbnMuaGlkZGVuLFxuICAgICAgbGVuZ3RoOiB0aGlzLm9wdGlvbnMubGVuZ3RoLFxuICAgICAgc2hhZG93OiB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQsXG4gICAgICBzaGFkb3dDb2xvcjogdGhpcy5vcHRpb25zLnNoYWRvdy5jb2xvcixcbiAgICAgIHNoYWRvd1NpemU6IHRoaXMub3B0aW9ucy5zaGFkb3cuc2l6ZSxcbiAgICAgIHNoYWRvd1g6IHRoaXMub3B0aW9ucy5zaGFkb3cueCxcbiAgICAgIHNoYWRvd1k6IHRoaXMub3B0aW9ucy5zaGFkb3cueSxcbiAgICAgIGRhc2hlczogdGhpcy5vcHRpb25zLmRhc2hlcyxcbiAgICAgIHdpZHRoOiB0aGlzLm9wdGlvbnMud2lkdGgsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZC5lbmFibGVkLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZC5jb2xvcixcbiAgICAgIGJhY2tncm91bmRTaXplOiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZC5zaXplLFxuICAgICAgYmFja2dyb3VuZERhc2hlczogdGhpcy5vcHRpb25zLmJhY2tncm91bmQuZGFzaGVzLFxuICAgIH07XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQgfHwgdGhpcy5ob3Zlcikge1xuICAgICAgaWYgKHRoaXMuY2hvb3NlciA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkV2lkdGggPSB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uV2lkdGg7XG4gICAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RlZFdpZHRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhbHVlcy53aWR0aCA9IHNlbGVjdGVkV2lkdGgodmFsdWVzLndpZHRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxlY3RlZFdpZHRoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB2YWx1ZXMud2lkdGggKz0gc2VsZWN0ZWRXaWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWVzLndpZHRoID0gTWF0aC5tYXgodmFsdWVzLndpZHRoLCAwLjMgLyB0aGlzLmJvZHkudmlldy5zY2FsZSk7XG4gICAgICAgICAgdmFsdWVzLmNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodDtcbiAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaG92ZXIpIHtcbiAgICAgICAgICBjb25zdCBob3ZlcldpZHRoID0gdGhpcy5vcHRpb25zLmhvdmVyV2lkdGg7XG4gICAgICAgICAgaWYgKHR5cGVvZiBob3ZlcldpZHRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhbHVlcy53aWR0aCA9IGhvdmVyV2lkdGgodmFsdWVzLndpZHRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBob3ZlcldpZHRoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB2YWx1ZXMud2lkdGggKz0gaG92ZXJXaWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWVzLndpZHRoID0gTWF0aC5tYXgodmFsdWVzLndpZHRoLCAwLjMgLyB0aGlzLmJvZHkudmlldy5zY2FsZSk7XG4gICAgICAgICAgdmFsdWVzLmNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyO1xuICAgICAgICAgIHZhbHVlcy5zaGFkb3cgPSB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuY2hvb3NlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMuY2hvb3Nlcih2YWx1ZXMsIHRoaXMub3B0aW9ucy5pZCwgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3Zlcik7XG4gICAgICAgIGlmICh2YWx1ZXMuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhbHVlcy5pbmhlcml0c0NvbG9yID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlcy5zaGFkb3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsdWVzLnNoYWRvd0NvbG9yICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LmNvbG9yIHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93U2l6ZSAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy5zaXplIHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93WCAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy54IHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93WSAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy55XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVzLnNoYWRvdyA9IHRoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZDtcbiAgICAgIHZhbHVlcy53aWR0aCA9IE1hdGgubWF4KHZhbHVlcy53aWR0aCwgMC4zIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgb3B0aW9ucyBpbiB0aGUgbGFiZWwgbW9kdWxlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICB1cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKSB7XG4gICAgY29uc3QgcGlsZSA9IFtcbiAgICAgIG9wdGlvbnMsXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0aGlzLmdsb2JhbE9wdGlvbnMsIC8vIEN1cnJlbnRseSBzZXQgZ2xvYmFsIGVkZ2Ugb3B0aW9uc1xuICAgICAgdGhpcy5kZWZhdWx0T3B0aW9ucyxcbiAgICBdO1xuXG4gICAgdGhpcy5sYWJlbE1vZHVsZS51cGRhdGUodGhpcy5vcHRpb25zLCBwaWxlKTtcblxuICAgIGlmICh0aGlzLmxhYmVsTW9kdWxlLmJhc2VTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYmFzZUZvbnRTaXplID0gdGhpcy5sYWJlbE1vZHVsZS5iYXNlU2l6ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdXBkYXRlIHRoZSBlZGdlIHR5cGUsIHNldCB0aGUgb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHVwZGF0ZUVkZ2VUeXBlKCkge1xuICAgIGNvbnN0IHNtb290aCA9IHRoaXMub3B0aW9ucy5zbW9vdGg7XG4gICAgbGV0IGRhdGFDaGFuZ2VkID0gZmFsc2U7XG4gICAgbGV0IGNoYW5nZUluVHlwZSA9IHRydWU7XG4gICAgaWYgKHRoaXMuZWRnZVR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKFxuICAgICAgICAodGhpcy5lZGdlVHlwZSBpbnN0YW5jZW9mIEJlemllckVkZ2VEeW5hbWljICYmXG4gICAgICAgICAgc21vb3RoLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgICAgICBzbW9vdGgudHlwZSA9PT0gXCJkeW5hbWljXCIpIHx8XG4gICAgICAgICh0aGlzLmVkZ2VUeXBlIGluc3RhbmNlb2YgQ3ViaWNCZXppZXJFZGdlICYmXG4gICAgICAgICAgc21vb3RoLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgICAgICBzbW9vdGgudHlwZSA9PT0gXCJjdWJpY0JlemllclwiKSB8fFxuICAgICAgICAodGhpcy5lZGdlVHlwZSBpbnN0YW5jZW9mIEJlemllckVkZ2VTdGF0aWMgJiZcbiAgICAgICAgICBzbW9vdGguZW5hYmxlZCA9PT0gdHJ1ZSAmJlxuICAgICAgICAgIHNtb290aC50eXBlICE9PSBcImR5bmFtaWNcIiAmJlxuICAgICAgICAgIHNtb290aC50eXBlICE9PSBcImN1YmljQmV6aWVyXCIpIHx8XG4gICAgICAgICh0aGlzLmVkZ2VUeXBlIGluc3RhbmNlb2YgU3RyYWlnaHRFZGdlICYmIHNtb290aC50eXBlLmVuYWJsZWQgPT09IGZhbHNlKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZUluVHlwZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZUluVHlwZSA9PT0gdHJ1ZSkge1xuICAgICAgICBkYXRhQ2hhbmdlZCA9IHRoaXMuY2xlYW51cCgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlSW5UeXBlID09PSB0cnVlKSB7XG4gICAgICBpZiAoc21vb3RoLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHNtb290aC50eXBlID09PSBcImR5bmFtaWNcIikge1xuICAgICAgICAgIGRhdGFDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmVkZ2VUeXBlID0gbmV3IEJlemllckVkZ2VEeW5hbWljKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoc21vb3RoLnR5cGUgPT09IFwiY3ViaWNCZXppZXJcIikge1xuICAgICAgICAgIHRoaXMuZWRnZVR5cGUgPSBuZXcgQ3ViaWNCZXppZXJFZGdlKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lZGdlVHlwZSA9IG5ldyBCZXppZXJFZGdlU3RhdGljKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRnZVR5cGUgPSBuZXcgU3RyYWlnaHRFZGdlKFxuICAgICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBub3RoaW5nIGNoYW5nZXMsIHdlIGp1c3Qgc2V0IHRoZSBvcHRpb25zLlxuICAgICAgdGhpcy5lZGdlVHlwZS5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhQ2hhbmdlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IGFuIGVkZ2UgdG8gaXRzIG5vZGVzXG4gICAqL1xuICBjb25uZWN0KCkge1xuICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuXG4gICAgdGhpcy5mcm9tID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMuZnJvbUlkXSB8fCB1bmRlZmluZWQ7XG4gICAgdGhpcy50byA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRvSWRdIHx8IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbm5lY3RlZCA9IHRoaXMuZnJvbSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudG8gIT09IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLmNvbm5lY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5mcm9tLmF0dGFjaEVkZ2UodGhpcyk7XG4gICAgICB0aGlzLnRvLmF0dGFjaEVkZ2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmZyb20pIHtcbiAgICAgICAgdGhpcy5mcm9tLmRldGFjaEVkZ2UodGhpcyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50bykge1xuICAgICAgICB0aGlzLnRvLmRldGFjaEVkZ2UodGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lZGdlVHlwZS5jb25uZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzY29ubmVjdCBhbiBlZGdlIGZyb20gaXRzIG5vZGVzXG4gICAqL1xuICBkaXNjb25uZWN0KCkge1xuICAgIGlmICh0aGlzLmZyb20pIHtcbiAgICAgIHRoaXMuZnJvbS5kZXRhY2hFZGdlKHRoaXMpO1xuICAgICAgdGhpcy5mcm9tID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodGhpcy50bykge1xuICAgICAgdGhpcy50by5kZXRhY2hFZGdlKHRoaXMpO1xuICAgICAgdGhpcy50byA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgdGl0bGUgb2YgdGhpcyBlZGdlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aXRsZSAgICBUaGUgdGl0bGUgb2YgdGhlIGVkZ2UsIG9yIHVuZGVmaW5lZCB3aGVuIG5vIHRpdGxlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gc2V0LlxuICAgKi9cbiAgZ2V0VGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGU7XG4gIH1cblxuICAvKipcbiAgICogY2hlY2sgaWYgdGhpcyBub2RlIGlzIHNlbGVjdGVcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHNlbGVjdGVkICAgVHJ1ZSBpZiBub2RlIGlzIHNlbGVjdGVkLCBlbHNlIGZhbHNlXG4gICAqL1xuICBpc1NlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiB0aGUgZWRnZS4gQ2FuIGJlIHVuZGVmaW5lZFxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSB2YWx1ZVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGp1c3QgdGhlIHZhbHVlIHJhbmdlIG9mIHRoZSBlZGdlLiBUaGUgZWRnZSB3aWxsIGFkanVzdCBpdCdzIHdpZHRoXG4gICAqIGJhc2VkIG9uIGl0cyB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pblxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFxuICAgKi9cbiAgc2V0VmFsdWVSYW5nZShtaW4sIG1heCwgdG90YWwpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5vcHRpb25zLnNjYWxpbmcuY3VzdG9tU2NhbGluZ0Z1bmN0aW9uKFxuICAgICAgICBtaW4sXG4gICAgICAgIG1heCxcbiAgICAgICAgdG90YWwsXG4gICAgICAgIHRoaXMub3B0aW9ucy52YWx1ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHdpZHRoRGlmZiA9IHRoaXMub3B0aW9ucy5zY2FsaW5nLm1heCAtIHRoaXMub3B0aW9ucy5zY2FsaW5nLm1pbjtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGZvbnREaWZmID1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5tYXggLSB0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5taW47XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb250LnNpemUgPVxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1pbiArIHNjYWxlICogZm9udERpZmY7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMud2lkdGggPSB0aGlzLm9wdGlvbnMuc2NhbGluZy5taW4gKyBzY2FsZSAqIHdpZHRoRGlmZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zLndpZHRoID0gdGhpcy5iYXNlV2lkdGg7XG4gICAgICB0aGlzLm9wdGlvbnMuZm9udC5zaXplID0gdGhpcy5iYXNlRm9udFNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0SW50ZXJhY3Rpb25XaWR0aHMoKTtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRJbnRlcmFjdGlvbldpZHRocygpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5ob3ZlcldpZHRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuZWRnZVR5cGUuaG92ZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ob3ZlcldpZHRoKHRoaXMub3B0aW9ucy53aWR0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWRnZVR5cGUuaG92ZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ob3ZlcldpZHRoICsgdGhpcy5vcHRpb25zLndpZHRoO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5zZWxlY3Rpb25XaWR0aCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLnNlbGVjdGlvbldpZHRoID0gdGhpcy5vcHRpb25zLnNlbGVjdGlvbldpZHRoKFxuICAgICAgICB0aGlzLm9wdGlvbnMud2lkdGhcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWRnZVR5cGUuc2VsZWN0aW9uV2lkdGggPVxuICAgICAgICB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uV2lkdGggKyB0aGlzLm9wdGlvbnMud2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBhIGVkZ2VcbiAgICogRHJhdyB0aGlzIGVkZ2UgaW4gdGhlIGdpdmVuIGNhbnZhc1xuICAgKiBUaGUgMmQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqL1xuICBkcmF3KGN0eCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0Rm9ybWF0dGluZ1ZhbHVlcygpO1xuICAgIGlmICh2YWx1ZXMuaGlkZGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSB2aWEgbm9kZSBmcm9tIHRoZSBlZGdlIHR5cGVcbiAgICBjb25zdCB2aWFOb2RlID0gdGhpcy5lZGdlVHlwZS5nZXRWaWFOb2RlKCk7XG5cbiAgICAvLyBkcmF3IGxpbmUgYW5kIGxhYmVsXG4gICAgdGhpcy5lZGdlVHlwZS5kcmF3TGluZShjdHgsIHZhbHVlcywgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3ZlciwgdmlhTm9kZSk7XG4gICAgdGhpcy5kcmF3TGFiZWwoY3R4LCB2aWFOb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgYXJyb3dzXG4gICAqIERyYXcgdGhpcyBhcnJvd3MgaW4gdGhlIGdpdmVuIGNhbnZhc1xuICAgKiBUaGUgMmQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqL1xuICBkcmF3QXJyb3dzKGN0eCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0Rm9ybWF0dGluZ1ZhbHVlcygpO1xuICAgIGlmICh2YWx1ZXMuaGlkZGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSB2aWEgbm9kZSBmcm9tIHRoZSBlZGdlIHR5cGVcbiAgICBjb25zdCB2aWFOb2RlID0gdGhpcy5lZGdlVHlwZS5nZXRWaWFOb2RlKCk7XG4gICAgY29uc3QgYXJyb3dEYXRhID0ge307XG5cbiAgICAvLyByZXN0b3JlIGVkZ2UgdGFyZ2V0cyB0byBkZWZhdWx0c1xuICAgIHRoaXMuZWRnZVR5cGUuZnJvbVBvaW50ID0gdGhpcy5lZGdlVHlwZS5mcm9tO1xuICAgIHRoaXMuZWRnZVR5cGUudG9Qb2ludCA9IHRoaXMuZWRnZVR5cGUudG87XG5cbiAgICAvLyBmcm9tIGFuZCB0byBhcnJvd3MgZ2l2ZSBhIGRpZmZlcmVudCBlbmQgcG9pbnQgZm9yIGVkZ2VzLiB3ZSBzZXQgdGhlbSBoZXJlXG4gICAgaWYgKHZhbHVlcy5mcm9tQXJyb3cpIHtcbiAgICAgIGFycm93RGF0YS5mcm9tID0gdGhpcy5lZGdlVHlwZS5nZXRBcnJvd0RhdGEoXG4gICAgICAgIGN0eCxcbiAgICAgICAgXCJmcm9tXCIsXG4gICAgICAgIHZpYU5vZGUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgIHRoaXMuaG92ZXIsXG4gICAgICAgIHZhbHVlc1xuICAgICAgKTtcbiAgICAgIGlmICh2YWx1ZXMuYXJyb3dTdHJpa2V0aHJvdWdoID09PSBmYWxzZSlcbiAgICAgICAgdGhpcy5lZGdlVHlwZS5mcm9tUG9pbnQgPSBhcnJvd0RhdGEuZnJvbS5jb3JlO1xuICAgICAgaWYgKHZhbHVlcy5mcm9tQXJyb3dTcmMpIHtcbiAgICAgICAgYXJyb3dEYXRhLmZyb20uaW1hZ2UgPSB0aGlzLmltYWdlbGlzdC5sb2FkKHZhbHVlcy5mcm9tQXJyb3dTcmMpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlcy5mcm9tQXJyb3dJbWFnZVdpZHRoKSB7XG4gICAgICAgIGFycm93RGF0YS5mcm9tLmltYWdlV2lkdGggPSB2YWx1ZXMuZnJvbUFycm93SW1hZ2VXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMuZnJvbUFycm93SW1hZ2VIZWlnaHQpIHtcbiAgICAgICAgYXJyb3dEYXRhLmZyb20uaW1hZ2VIZWlnaHQgPSB2YWx1ZXMuZnJvbUFycm93SW1hZ2VIZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2YWx1ZXMudG9BcnJvdykge1xuICAgICAgYXJyb3dEYXRhLnRvID0gdGhpcy5lZGdlVHlwZS5nZXRBcnJvd0RhdGEoXG4gICAgICAgIGN0eCxcbiAgICAgICAgXCJ0b1wiLFxuICAgICAgICB2aWFOb2RlLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICB2YWx1ZXNcbiAgICAgICk7XG4gICAgICBpZiAodmFsdWVzLmFycm93U3RyaWtldGhyb3VnaCA9PT0gZmFsc2UpXG4gICAgICAgIHRoaXMuZWRnZVR5cGUudG9Qb2ludCA9IGFycm93RGF0YS50by5jb3JlO1xuICAgICAgaWYgKHZhbHVlcy50b0Fycm93U3JjKSB7XG4gICAgICAgIGFycm93RGF0YS50by5pbWFnZSA9IHRoaXMuaW1hZ2VsaXN0LmxvYWQodmFsdWVzLnRvQXJyb3dTcmMpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlcy50b0Fycm93SW1hZ2VXaWR0aCkge1xuICAgICAgICBhcnJvd0RhdGEudG8uaW1hZ2VXaWR0aCA9IHZhbHVlcy50b0Fycm93SW1hZ2VXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMudG9BcnJvd0ltYWdlSGVpZ2h0KSB7XG4gICAgICAgIGFycm93RGF0YS50by5pbWFnZUhlaWdodCA9IHZhbHVlcy50b0Fycm93SW1hZ2VIZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhlIG1pZGRsZSBhcnJvdyBkZXBlbmRzIG9uIHRoZSBsaW5lLCB3aGljaCBjYW4gZGVwZW5kIG9uIHRoZSB0byBhbmQgZnJvbSBhcnJvd3Mgc28gd2UgZG8gdGhpcyBvbmUgbGFzdGx5LlxuICAgIGlmICh2YWx1ZXMubWlkZGxlQXJyb3cpIHtcbiAgICAgIGFycm93RGF0YS5taWRkbGUgPSB0aGlzLmVkZ2VUeXBlLmdldEFycm93RGF0YShcbiAgICAgICAgY3R4LFxuICAgICAgICBcIm1pZGRsZVwiLFxuICAgICAgICB2aWFOb2RlLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICB2YWx1ZXNcbiAgICAgICk7XG5cbiAgICAgIGlmICh2YWx1ZXMubWlkZGxlQXJyb3dTcmMpIHtcbiAgICAgICAgYXJyb3dEYXRhLm1pZGRsZS5pbWFnZSA9IHRoaXMuaW1hZ2VsaXN0LmxvYWQodmFsdWVzLm1pZGRsZUFycm93U3JjKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMubWlkZGxlQXJyb3dJbWFnZVdpZHRoKSB7XG4gICAgICAgIGFycm93RGF0YS5taWRkbGUuaW1hZ2VXaWR0aCA9IHZhbHVlcy5taWRkbGVBcnJvd0ltYWdlV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVzLm1pZGRsZUFycm93SW1hZ2VIZWlnaHQpIHtcbiAgICAgICAgYXJyb3dEYXRhLm1pZGRsZS5pbWFnZUhlaWdodCA9IHZhbHVlcy5taWRkbGVBcnJvd0ltYWdlSGVpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZXMuZnJvbUFycm93KSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLmRyYXdBcnJvd0hlYWQoXG4gICAgICAgIGN0eCxcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICBhcnJvd0RhdGEuZnJvbVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlcy5taWRkbGVBcnJvdykge1xuICAgICAgdGhpcy5lZGdlVHlwZS5kcmF3QXJyb3dIZWFkKFxuICAgICAgICBjdHgsXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgYXJyb3dEYXRhLm1pZGRsZVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlcy50b0Fycm93KSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLmRyYXdBcnJvd0hlYWQoXG4gICAgICAgIGN0eCxcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICBhcnJvd0RhdGEudG9cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtOb2RlfSB2aWFOb2RlXG4gICAqL1xuICBkcmF3TGFiZWwoY3R4LCB2aWFOb2RlKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBzZXQgc3R5bGVcbiAgICAgIGNvbnN0IG5vZGUxID0gdGhpcy5mcm9tO1xuICAgICAgY29uc3Qgbm9kZTIgPSB0aGlzLnRvO1xuXG4gICAgICBpZiAodGhpcy5sYWJlbE1vZHVsZS5kaWZmZXJlbnRTdGF0ZSh0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyKSkge1xuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLmdldFRleHRTaXplKGN0eCwgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3Zlcik7XG4gICAgICB9XG5cbiAgICAgIGxldCBwb2ludDtcbiAgICAgIGlmIChub2RlMS5pZCAhPSBub2RlMi5pZCkge1xuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLnBvaW50VG9TZWxmID0gZmFsc2U7XG4gICAgICAgIHBvaW50ID0gdGhpcy5lZGdlVHlwZS5nZXRQb2ludCgwLjUsIHZpYU5vZGUpO1xuICAgICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICAgIGNvbnN0IHJvdGF0aW9uUG9pbnQgPSB0aGlzLl9nZXRSb3RhdGlvbihjdHgpO1xuICAgICAgICBpZiAocm90YXRpb25Qb2ludC5hbmdsZSAhPSAwKSB7XG4gICAgICAgICAgY3R4LnRyYW5zbGF0ZShyb3RhdGlvblBvaW50LngsIHJvdGF0aW9uUG9pbnQueSk7XG4gICAgICAgICAgY3R4LnJvdGF0ZShyb3RhdGlvblBvaW50LmFuZ2xlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRyYXcgdGhlIGxhYmVsXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHBvaW50LngsIHBvaW50LnksIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuXG4gICAgICAgIC8qXG4gICAgICAgIC8vIFVzZWZ1bCBkZWJ1ZyBjb2RlOiBkcmF3IGEgYm9yZGVyIGFyb3VuZCB0aGUgbGFiZWxcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgKipub3QqKiBiZSBlbmFibGVkIGluIHByb2R1Y3Rpb24hXG4gICAgICAgIHZhciBzaXplID0gdGhpcy5sYWJlbE1vZHVsZS5nZXRTaXplKCk7OyAvLyA7OyBpbnRlbnRpb25hbCBzbyBsaW50IGNhdGNoZXMgaXRcbiAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCIjZmYwMDAwXCI7XG4gICAgICAgIGN0eC5zdHJva2VSZWN0KHNpemUubGVmdCwgc2l6ZS50b3AsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtcbiAgICAgICAgLy8gRW5kICBkZWJ1ZyBjb2RlXG4qL1xuXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIG9yaWVudGF0aW9ucy5cbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5wb2ludFRvU2VsZiA9IHRydWU7XG5cbiAgICAgICAgLy8gZ2V0IGNpcmNsZSBjb29yZGluYXRlc1xuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IGdldFNlbGZSZWZDb29yZGluYXRlcyhcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2Uuc2l6ZSxcbiAgICAgICAgICBub2RlMVxuICAgICAgICApO1xuXG4gICAgICAgIHBvaW50ID0gdGhpcy5fcG9pbnRPbkNpcmNsZShcbiAgICAgICAgICBjb29yZGluYXRlcy54LFxuICAgICAgICAgIGNvb3JkaW5hdGVzLnksXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2Uuc2l6ZSxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHBvaW50LngsIHBvaW50LnksIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgYWxsIHZpc3VhbCBlbGVtZW50cyBvZiB0aGlzIGVkZ2UgaW5zdGFuY2UsIGluIHdoaWNoIHRoZSBnaXZlblxuICAgKiBwb2ludCBmYWxscyB3aXRoaW4gdGhlIGJvdW5kaW5nIHNoYXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb2ludFxuICAgKiBAcmV0dXJucyB7QXJyYXkuPGVkZ2VDbGlja0l0ZW18ZWRnZUxhYmVsQ2xpY2tJdGVtPn0gbGlzdCB3aXRoIHRoZSBpdGVtcyB3aGljaCBhcmUgb24gdGhlIHBvaW50XG4gICAqL1xuICBnZXRJdGVtc09uUG9pbnQocG9pbnQpIHtcbiAgICBjb25zdCByZXQgPSBbXTtcblxuICAgIGlmICh0aGlzLmxhYmVsTW9kdWxlLnZpc2libGUoKSkge1xuICAgICAgY29uc3Qgcm90YXRpb25Qb2ludCA9IHRoaXMuX2dldFJvdGF0aW9uKCk7XG4gICAgICBpZiAocG9pbnRJblJlY3QodGhpcy5sYWJlbE1vZHVsZS5nZXRTaXplKCksIHBvaW50LCByb3RhdGlvblBvaW50KSkge1xuICAgICAgICByZXQucHVzaCh7IGVkZ2VJZDogdGhpcy5pZCwgbGFiZWxJZDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBsZWZ0OiBwb2ludC54LFxuICAgICAgdG9wOiBwb2ludC55LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5pc092ZXJsYXBwaW5nV2l0aChvYmopKSB7XG4gICAgICByZXQucHVzaCh7IGVkZ2VJZDogdGhpcy5pZCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgb2JqZWN0IGlzIG92ZXJsYXBwaW5nIHdpdGggdGhlIHByb3ZpZGVkIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqICAgYW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3BcbiAgICogQHJldHVybnMge2Jvb2xlYW59ICAgICBUcnVlIGlmIGxvY2F0aW9uIGlzIGxvY2F0ZWQgb24gdGhlIGVkZ2VcbiAgICovXG4gIGlzT3ZlcmxhcHBpbmdXaXRoKG9iaikge1xuICAgIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgICAgY29uc3QgZGlzdE1heCA9IDEwO1xuICAgICAgY29uc3QgeEZyb20gPSB0aGlzLmZyb20ueDtcbiAgICAgIGNvbnN0IHlGcm9tID0gdGhpcy5mcm9tLnk7XG4gICAgICBjb25zdCB4VG8gPSB0aGlzLnRvLng7XG4gICAgICBjb25zdCB5VG8gPSB0aGlzLnRvLnk7XG4gICAgICBjb25zdCB4T2JqID0gb2JqLmxlZnQ7XG4gICAgICBjb25zdCB5T2JqID0gb2JqLnRvcDtcblxuICAgICAgY29uc3QgZGlzdCA9IHRoaXMuZWRnZVR5cGUuZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgICAgIHhGcm9tLFxuICAgICAgICB5RnJvbSxcbiAgICAgICAgeFRvLFxuICAgICAgICB5VG8sXG4gICAgICAgIHhPYmosXG4gICAgICAgIHlPYmpcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBkaXN0IDwgZGlzdE1heDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHJvdGF0aW9uIHBvaW50LCBpZiBhbnkuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBbY3R4XSBpZiBwYXNzZWQsIGRvIGEgcmVjYWxjdWxhdGlvbiBvZiB0aGUgbGFiZWwgc2l6ZVxuICAgKiBAcmV0dXJucyB7cm90YXRpb25Qb2ludH0gdGhlIHBvaW50IHRvIHJvdGF0ZSBhcm91bmQgYW5kIHRoZSBhbmdsZSBpbiByYWRpYW5zIHRvIHJvdGF0ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFJvdGF0aW9uKGN0eCkge1xuICAgIGNvbnN0IHZpYU5vZGUgPSB0aGlzLmVkZ2VUeXBlLmdldFZpYU5vZGUoKTtcbiAgICBjb25zdCBwb2ludCA9IHRoaXMuZWRnZVR5cGUuZ2V0UG9pbnQoMC41LCB2aWFOb2RlKTtcblxuICAgIGlmIChjdHggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5jYWxjdWxhdGVMYWJlbFNpemUoXG4gICAgICAgIGN0eCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgcG9pbnQueCxcbiAgICAgICAgcG9pbnQueVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSB7XG4gICAgICB4OiBwb2ludC54LFxuICAgICAgeTogdGhpcy5sYWJlbE1vZHVsZS5zaXplLnlMaW5lLFxuICAgICAgYW5nbGU6IDAsXG4gICAgfTtcblxuICAgIGlmICghdGhpcy5sYWJlbE1vZHVsZS52aXNpYmxlKCkpIHtcbiAgICAgIHJldHVybiByZXQ7IC8vIERvbid0IGV2ZW4gYm90aGVyIGRvaW5nIHRoZSBhdGFuMiwgdGhlcmUncyBub3RoaW5nIHRvIGRyYXdcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmZvbnQuYWxpZ24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICByZXR1cm4gcmV0OyAvLyBObyBuZWVkIHRvIGNhbGN1bGF0ZSBhbmdsZVxuICAgIH1cblxuICAgIGNvbnN0IGR5ID0gdGhpcy5mcm9tLnkgLSB0aGlzLnRvLnk7XG4gICAgY29uc3QgZHggPSB0aGlzLmZyb20ueCAtIHRoaXMudG8ueDtcbiAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCk7IC8vIHJhZGlhbnNcblxuICAgIC8vIHJvdGF0ZSBzbyB0aGF0IGxhYmVsIGlzIHJlYWRhYmxlXG4gICAgaWYgKChhbmdsZSA8IC0xICYmIGR4IDwgMCkgfHwgKGFuZ2xlID4gMCAmJiBkeCA8IDApKSB7XG4gICAgICBhbmdsZSArPSBNYXRoLlBJO1xuICAgIH1cbiAgICByZXQuYW5nbGUgPSBhbmdsZTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcG9pbnQgb24gYSBjaXJjbGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1c1xuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge29iamVjdH0gcG9pbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wb2ludE9uQ2lyY2xlKHgsIHksIHJhZGl1cywgYW5nbGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogeCArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKSxcbiAgICAgIHk6IHkgLSByYWRpdXMgKiBNYXRoLnNpbihhbmdsZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHNlbGVjdGVkIHN0YXRlIHRvIHRydWVcbiAgICovXG4gIHNlbGVjdCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHNlbGVjdGVkIHN0YXRlIHRvIGZhbHNlXG4gICAqL1xuICB1bnNlbGVjdCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogY2xlYW5zIGFsbCByZXF1aXJlZCB0aGluZ3Mgb24gZGVsZXRlXG4gICAqXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgY2xlYW51cCgpIHtcbiAgICByZXR1cm4gdGhpcy5lZGdlVHlwZS5jbGVhbnVwKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGVkZ2UgZnJvbSB0aGUgbGlzdCBhbmQgcGVyZm9ybSBuZWNlc3NhcnkgY2xlYW51cC5cbiAgICovXG4gIHJlbW92ZSgpIHtcbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICBkZWxldGUgdGhpcy5ib2R5LmVkZ2VzW3RoaXMuaWRdO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGJvdGggY29ubmVjdGluZyBub2RlcyBleGlzdFxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGVuZFBvaW50c1ZhbGlkKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmJvZHkubm9kZXNbdGhpcy5mcm9tSWRdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRvSWRdICE9PSB1bmRlZmluZWRcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkZ2U7XG4iLCAiaW1wb3J0IHsgZGVlcEV4dGVuZCwgZm9yRWFjaCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCB7IERhdGFTZXQsIGlzRGF0YVZpZXdMaWtlIH0gZnJvbSBcInZpcy1kYXRhL2VzbmV4dFwiO1xuaW1wb3J0IEVkZ2UgZnJvbSBcIi4vY29tcG9uZW50cy9FZGdlXCI7XG5cbi8qKlxuICogSGFuZGxlciBmb3IgRWRnZXNcbiAqL1xuY2xhc3MgRWRnZXNIYW5kbGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7QXJyYXkuPEltYWdlPn0gaW1hZ2VzXG4gICAqIEBwYXJhbSB7QXJyYXkuPEdyb3VwPn0gZ3JvdXBzXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBpbWFnZXMsIGdyb3Vwcykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5pbWFnZXMgPSBpbWFnZXM7XG4gICAgdGhpcy5ncm91cHMgPSBncm91cHM7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGVkZ2UgQVBJIGluIHRoZSBib2R5IGNvbnRhaW5lclxuICAgIHRoaXMuYm9keS5mdW5jdGlvbnMuY3JlYXRlRWRnZSA9IHRoaXMuY3JlYXRlLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmVkZ2VzTGlzdGVuZXJzID0ge1xuICAgICAgYWRkOiAoZXZlbnQsIHBhcmFtcykgPT4ge1xuICAgICAgICB0aGlzLmFkZChwYXJhbXMuaXRlbXMpO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZTogKGV2ZW50LCBwYXJhbXMpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGUocGFyYW1zLml0ZW1zKTtcbiAgICAgIH0sXG4gICAgICByZW1vdmU6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlKHBhcmFtcy5pdGVtcyk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgYXJyb3dzOiB7XG4gICAgICAgIHRvOiB7IGVuYWJsZWQ6IGZhbHNlLCBzY2FsZUZhY3RvcjogMSwgdHlwZTogXCJhcnJvd1wiIH0sIC8vIGJvb2xlYW4gLyB7YXJyb3dTY2FsZUZhY3RvcjoxfSAvIHtlbmFibGVkOiBmYWxzZSwgYXJyb3dTY2FsZUZhY3RvcjoxfVxuICAgICAgICBtaWRkbGU6IHsgZW5hYmxlZDogZmFsc2UsIHNjYWxlRmFjdG9yOiAxLCB0eXBlOiBcImFycm93XCIgfSxcbiAgICAgICAgZnJvbTogeyBlbmFibGVkOiBmYWxzZSwgc2NhbGVGYWN0b3I6IDEsIHR5cGU6IFwiYXJyb3dcIiB9LFxuICAgICAgfSxcbiAgICAgIGVuZFBvaW50T2Zmc2V0OiB7XG4gICAgICAgIGZyb206IDAsXG4gICAgICAgIHRvOiAwLFxuICAgICAgfSxcbiAgICAgIGFycm93U3RyaWtldGhyb3VnaDogdHJ1ZSxcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIGNvbG9yOiBcIiM4NDg0ODRcIixcbiAgICAgICAgaGlnaGxpZ2h0OiBcIiM4NDg0ODRcIixcbiAgICAgICAgaG92ZXI6IFwiIzg0ODQ4NFwiLFxuICAgICAgICBpbmhlcml0OiBcImZyb21cIixcbiAgICAgICAgb3BhY2l0eTogMS4wLFxuICAgICAgfSxcbiAgICAgIGRhc2hlczogZmFsc2UsXG4gICAgICBmb250OiB7XG4gICAgICAgIGNvbG9yOiBcIiMzNDM0MzRcIixcbiAgICAgICAgc2l6ZTogMTQsIC8vIHB4XG4gICAgICAgIGZhY2U6IFwiYXJpYWxcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCJub25lXCIsXG4gICAgICAgIHN0cm9rZVdpZHRoOiAyLCAvLyBweFxuICAgICAgICBzdHJva2VDb2xvcjogXCIjZmZmZmZmXCIsXG4gICAgICAgIGFsaWduOiBcImhvcml6b250YWxcIixcbiAgICAgICAgbXVsdGk6IGZhbHNlLFxuICAgICAgICB2YWRqdXN0OiAwLFxuICAgICAgICBib2xkOiB7XG4gICAgICAgICAgbW9kOiBcImJvbGRcIixcbiAgICAgICAgfSxcbiAgICAgICAgYm9sZGl0YWw6IHtcbiAgICAgICAgICBtb2Q6IFwiYm9sZCBpdGFsaWNcIixcbiAgICAgICAgfSxcbiAgICAgICAgaXRhbDoge1xuICAgICAgICAgIG1vZDogXCJpdGFsaWNcIixcbiAgICAgICAgfSxcbiAgICAgICAgbW9ubzoge1xuICAgICAgICAgIG1vZDogXCJcIixcbiAgICAgICAgICBzaXplOiAxNSwgLy8gcHhcbiAgICAgICAgICBmYWNlOiBcImNvdXJpZXIgbmV3XCIsXG4gICAgICAgICAgdmFkanVzdDogMixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgaG92ZXJXaWR0aDogMS41LFxuICAgICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogdHJ1ZSxcbiAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgcGh5c2ljczogdHJ1ZSxcbiAgICAgIHNjYWxpbmc6IHtcbiAgICAgICAgbWluOiAxLFxuICAgICAgICBtYXg6IDE1LFxuICAgICAgICBsYWJlbDoge1xuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgbWluOiAxNCxcbiAgICAgICAgICBtYXg6IDMwLFxuICAgICAgICAgIG1heFZpc2libGU6IDMwLFxuICAgICAgICAgIGRyYXdUaHJlc2hvbGQ6IDUsXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbVNjYWxpbmdGdW5jdGlvbjogZnVuY3Rpb24gKG1pbiwgbWF4LCB0b3RhbCwgdmFsdWUpIHtcbiAgICAgICAgICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICAgICAgICAgIHJldHVybiAwLjU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gMSAvIChtYXggLSBtaW4pO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsICh2YWx1ZSAtIG1pbikgKiBzY2FsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNlbGVjdGlvbldpZHRoOiAxLjUsXG4gICAgICBzZWxmUmVmZXJlbmNlOiB7XG4gICAgICAgIHNpemU6IDIwLFxuICAgICAgICBhbmdsZTogTWF0aC5QSSAvIDQsXG4gICAgICAgIHJlbmRlckJlaGluZFRoZU5vZGU6IHRydWUsXG4gICAgICB9LFxuICAgICAgc2hhZG93OiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBjb2xvcjogXCJyZ2JhKDAsMCwwLDAuNSlcIixcbiAgICAgICAgc2l6ZTogMTAsXG4gICAgICAgIHg6IDUsXG4gICAgICAgIHk6IDUsXG4gICAgICB9LFxuICAgICAgYmFja2dyb3VuZDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgY29sb3I6IFwicmdiYSgxMTEsMTExLDExMSwxKVwiLFxuICAgICAgICBzaXplOiAxMCxcbiAgICAgICAgZGFzaGVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBzbW9vdGg6IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJkeW5hbWljXCIsXG4gICAgICAgIGZvcmNlRGlyZWN0aW9uOiBcIm5vbmVcIixcbiAgICAgICAgcm91bmRuZXNzOiAwLjUsXG4gICAgICB9LFxuICAgICAgdGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgIHdpZHRoOiAxLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgZGVlcEV4dGVuZCh0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICAvLyB0aGlzIGFsbG93cyBleHRlcm5hbCBtb2R1bGVzIHRvIGZvcmNlIGFsbCBkeW5hbWljIGN1cnZlcyB0byB0dXJuIHN0YXRpYy5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9mb3JjZURpc2FibGVEeW5hbWljQ3VydmVzXCIsICh0eXBlLCBlbWl0ID0gdHJ1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGUgPT09IFwiZHluYW1pY1wiKSB7XG4gICAgICAgIHR5cGUgPSBcImNvbnRpbnVvdXNcIjtcbiAgICAgIH1cbiAgICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgZm9yIChjb25zdCBlZGdlSWQgaW4gdGhpcy5ib2R5LmVkZ2VzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlSWQpKSB7XG4gICAgICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICAgICAgICAgIGNvbnN0IGVkZ2VEYXRhID0gdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0KGVkZ2VJZCk7XG5cbiAgICAgICAgICAvLyBvbmx5IGZvcmNpYmx5IHJlbW92ZSB0aGUgc21vb3RoIGN1cnZlIGlmIHRoZSBkYXRhIGhhcyBiZWVuIHNldCBvZiB0aGUgZWRnZSBoYXMgdGhlIHNtb290aCBjdXJ2ZXMgZGVmaW5lZC5cbiAgICAgICAgICAvLyB0aGlzIGlzIGJlY2F1c2UgYSBjaGFuZ2UgaW4gdGhlIGdsb2JhbCB3b3VsZCBub3QgYWZmZWN0IHRoZXNlIGN1cnZlcy5cbiAgICAgICAgICBpZiAoZWRnZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc21vb3RoT3B0aW9ucyA9IGVkZ2VEYXRhLnNtb290aDtcbiAgICAgICAgICAgIGlmIChzbW9vdGhPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHNtb290aE9wdGlvbnMuZW5hYmxlZCA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgICAgIHNtb290aE9wdGlvbnMudHlwZSA9PT0gXCJkeW5hbWljXCJcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgZWRnZS5zZXRPcHRpb25zKHsgc21vb3RoOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZWRnZS5zZXRPcHRpb25zKHsgc21vb3RoOiB7IHR5cGU6IHR5cGUgfSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZW1pdCA9PT0gdHJ1ZSAmJiBkYXRhQ2hhbmdlZCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gdGhpcyBpcyBjYWxsZWQgd2hlbiBvcHRpb25zIG9mIEVYSVNUSU5HIG5vZGVzIG9yIGVkZ2VzIGhhdmUgY2hhbmdlZC5cbiAgICAvL1xuICAgIC8vIE5PVEU6IE5vdCB0cnVlLCBjYWxsZWQgd2hlbiBvcHRpb25zIGhhdmUgTk9UIGNoYW5nZWQsIGZvciBib3RoIGV4aXN0aW5nIGFzIHdlbGwgYXMgbmV3IG5vZGVzLlxuICAgIC8vICAgICAgIFNlZSB1cGRhdGUoKSBmb3IgbG9naWMuXG4gICAgLy8gVE9ETzogVmVyaWZ5IGFuZCBleGFtaW5lIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcy4gSXQgbWlnaHQgc3RpbGwgdHJpZ2dlciB3aGVuXG4gICAgLy8gICAgICAgbm9uLW9wdGlvbiBmaWVsZHMgaGF2ZSBjaGFuZ2VkLCBidXQgdGhlbiByZWNvbm5lY3RpbmcgZWRnZXMgaXMgc3RpbGwgdXNlbGVzcy5cbiAgICAvLyAgICAgICBBbHRlcm5hdGl2ZWx5LCBpdCBtaWdodCBhbHNvIGJlIGNhbGxlZCB3aGVuIGVkZ2VzIGFyZSByZW1vdmVkLlxuICAgIC8vXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YVVwZGF0ZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvbm5lY3RFZGdlcygpO1xuICAgIH0pO1xuXG4gICAgLy8gcmVmcmVzaCB0aGUgZWRnZXMuIFVzZWQgd2hlbiByZXZlcnRpbmcgZnJvbSBoaWVyYXJjaGljYWwgbGF5b3V0XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJyZWZyZXNoRWRnZXNcIiwgdGhpcy5yZWZyZXNoLmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwicmVmcmVzaFwiLCB0aGlzLnJlZnJlc2guYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZXN0cm95XCIsICgpID0+IHtcbiAgICAgIGZvckVhY2godGhpcy5lZGdlc0xpc3RlbmVycywgKGNhbGxiYWNrLCBldmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5ib2R5LmRhdGEuZWRnZXMpIHRoaXMuYm9keS5kYXRhLmVkZ2VzLm9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgICBkZWxldGUgdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVFZGdlO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnMuYWRkO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnMudXBkYXRlO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnMucmVtb3ZlO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnM7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHVzZSB0aGUgcGFyc2VyIGZyb20gdGhlIEVkZ2UgY2xhc3MgdG8gZmlsbCBpbiBhbGwgc2hvcnRoYW5kIG5vdGF0aW9uc1xuICAgICAgRWRnZS5wYXJzZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zLCB0cnVlLCB0aGlzLmRlZmF1bHRPcHRpb25zLCB0cnVlKTtcblxuICAgICAgLy8gdXBkYXRlIHNtb290aCBzZXR0aW5ncyBpbiBhbGwgZWRnZXNcbiAgICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgaWYgKG9wdGlvbnMuc21vb3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBlZGdlSWQgaW4gdGhpcy5ib2R5LmVkZ2VzKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkuZWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgICAgICAgIGRhdGFDaGFuZ2VkID1cbiAgICAgICAgICAgICAgdGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0udXBkYXRlRWRnZVR5cGUoKSB8fCBkYXRhQ2hhbmdlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIGZvbnRzIGluIGFsbCBlZGdlc1xuICAgICAgaWYgKG9wdGlvbnMuZm9udCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgZWRnZUlkIGluIHRoaXMuYm9keS5lZGdlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXS51cGRhdGVMYWJlbE1vZHVsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGUgdGhlIHN0YXRlIG9mIHRoZSB2YXJpYWJsZXMgaWYgbmVlZGVkXG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMuaGlkZGVuICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgb3B0aW9ucy5waHlzaWNzICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgZGF0YUNoYW5nZWQgPT09IHRydWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGVkZ2VzIGJ5IHJlYWRpbmcgdGhlIGRhdGEgdGFibGVcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IERhdGFTZXQgfCBEYXRhVmlld30gZWRnZXMgICAgVGhlIGRhdGEgY29udGFpbmluZyB0aGUgZWRnZXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvTm90RW1pdD1mYWxzZV0gLSBTdXBwcmVzcyBkYXRhIGNoYW5nZWQgZXZlbnQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXREYXRhKGVkZ2VzLCBkb05vdEVtaXQgPSBmYWxzZSkge1xuICAgIGNvbnN0IG9sZEVkZ2VzRGF0YSA9IHRoaXMuYm9keS5kYXRhLmVkZ2VzO1xuXG4gICAgaWYgKGlzRGF0YVZpZXdMaWtlKFwiaWRcIiwgZWRnZXMpKSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcyA9IGVkZ2VzO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlZGdlcykpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzID0gbmV3IERhdGFTZXQoKTtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzLmFkZChlZGdlcyk7XG4gICAgfSBlbHNlIGlmICghZWRnZXMpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzID0gbmV3IERhdGFTZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5IG9yIERhdGFTZXQgZXhwZWN0ZWRcIik7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogaXMgdGhpcyBudWxsIG9yIHVuZGVmaW5lZCBvciBmYWxzZT9cbiAgICBpZiAob2xkRWRnZXNEYXRhKSB7XG4gICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIG9sZCBkYXRhc2V0XG4gICAgICBmb3JFYWNoKHRoaXMuZWRnZXNMaXN0ZW5lcnMsIChjYWxsYmFjaywgZXZlbnQpID0+IHtcbiAgICAgICAgb2xkRWRnZXNEYXRhLm9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGRyYXduIGVkZ2VzXG4gICAgdGhpcy5ib2R5LmVkZ2VzID0ge307XG5cbiAgICAvLyBUT0RPOiBpcyB0aGlzIG51bGwgb3IgdW5kZWZpbmVkIG9yIGZhbHNlP1xuICAgIGlmICh0aGlzLmJvZHkuZGF0YS5lZGdlcykge1xuICAgICAgLy8gc3Vic2NyaWJlIHRvIG5ldyBkYXRhc2V0XG4gICAgICBmb3JFYWNoKHRoaXMuZWRnZXNMaXN0ZW5lcnMsIChjYWxsYmFjaywgZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMub24oZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBkcmF3IGFsbCBuZXcgbm9kZXNcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuYm9keS5kYXRhLmVkZ2VzLmdldElkcygpO1xuICAgICAgdGhpcy5hZGQoaWRzLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2FkanVzdEVkZ2VzRm9ySGllcmFyY2hpY2FsTGF5b3V0XCIpO1xuICAgIGlmIChkb05vdEVtaXQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZWRnZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXSB8IHN0cmluZ1tdfSBpZHNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9Ob3RFbWl0PWZhbHNlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkKGlkcywgZG9Ob3RFbWl0ID0gZmFsc2UpIHtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBlZGdlc0RhdGEgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGlkc1tpXTtcblxuICAgICAgY29uc3Qgb2xkRWRnZSA9IGVkZ2VzW2lkXTtcbiAgICAgIGlmIChvbGRFZGdlKSB7XG4gICAgICAgIG9sZEVkZ2UuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gZWRnZXNEYXRhLmdldChpZCwgeyBzaG93SW50ZXJuYWxJZHM6IHRydWUgfSk7XG4gICAgICBlZGdlc1tpZF0gPSB0aGlzLmNyZWF0ZShkYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2FkanVzdEVkZ2VzRm9ySGllcmFyY2hpY2FsTGF5b3V0XCIpO1xuXG4gICAgaWYgKGRvTm90RW1pdCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBlZGdlcywgb3IgY3JlYXRlIHRoZW0gd2hlbiBub3QgeWV0IGV4aXN0aW5nXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1cGRhdGUoaWRzKSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgZWRnZXNEYXRhID0gdGhpcy5ib2R5LmRhdGEuZWRnZXM7XG4gICAgbGV0IGRhdGFDaGFuZ2VkID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgY29uc3QgZGF0YSA9IGVkZ2VzRGF0YS5nZXQoaWQpO1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2lkXTtcbiAgICAgIGlmIChlZGdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gdXBkYXRlIGVkZ2VcbiAgICAgICAgZWRnZS5kaXNjb25uZWN0KCk7XG4gICAgICAgIGRhdGFDaGFuZ2VkID0gZWRnZS5zZXRPcHRpb25zKGRhdGEpIHx8IGRhdGFDaGFuZ2VkOyAvLyBpZiBhIHN1cHBvcnQgbm9kZSBpcyBhZGRlZCwgZGF0YSBjYW4gYmUgY2hhbmdlZC5cbiAgICAgICAgZWRnZS5jb25uZWN0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgZWRnZVxuICAgICAgICB0aGlzLmJvZHkuZWRnZXNbaWRdID0gdGhpcy5jcmVhdGUoZGF0YSk7XG4gICAgICAgIGRhdGFDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YUNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfYWRqdXN0RWRnZXNGb3JIaWVyYXJjaGljYWxMYXlvdXRcIik7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFVcGRhdGVkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZXhpc3RpbmcgZWRnZXMuIE5vbiBleGlzdGluZyBpZHMgd2lsbCBiZSBpZ25vcmVkXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2VtaXQ9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlbW92ZShpZHMsIGVtaXQgPSB0cnVlKSB7XG4gICAgaWYgKGlkcy5sZW5ndGggPT09IDApIHJldHVybjsgLy8gZWFybHkgb3V0XG5cbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBmb3JFYWNoKGlkcywgKGlkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbaWRdO1xuICAgICAgaWYgKGVkZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlZGdlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGVtaXQpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyBFZGdlIEhhbmRsZXJcbiAgICovXG4gIHJlZnJlc2goKSB7XG4gICAgZm9yRWFjaCh0aGlzLmJvZHkuZWRnZXMsIChlZGdlLCBlZGdlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXQoZWRnZUlkKTtcbiAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWRnZS5zZXRPcHRpb25zKGRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIHtFZGdlfVxuICAgKi9cbiAgY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICByZXR1cm4gbmV3IEVkZ2UoXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgdGhpcy5ib2R5LFxuICAgICAgdGhpcy5pbWFnZXMsXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0aGlzLmRlZmF1bHRPcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbm5lY3QgYWxsIGVkZ2VzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWNvbm5lY3RFZGdlcygpIHtcbiAgICBsZXQgaWQ7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG5cbiAgICBmb3IgKGlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBpZCkpIHtcbiAgICAgICAgbm9kZXNbaWRdLmVkZ2VzID0gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpZCBpbiBlZGdlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZGdlcywgaWQpKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tpZF07XG4gICAgICAgIGVkZ2UuZnJvbSA9IG51bGw7XG4gICAgICAgIGVkZ2UudG8gPSBudWxsO1xuICAgICAgICBlZGdlLmNvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtFZGdlLmlkfSBlZGdlSWRcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0Q29ubmVjdGVkTm9kZXMoZWRnZUlkKSB7XG4gICAgY29uc3Qgbm9kZUxpc3QgPSBbXTtcbiAgICBpZiAodGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICAgICAgaWYgKGVkZ2UuZnJvbUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm9kZUxpc3QucHVzaChlZGdlLmZyb21JZCk7XG4gICAgICB9XG4gICAgICBpZiAoZWRnZS50b0lkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm9kZUxpc3QucHVzaChlZGdlLnRvSWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZUxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhlcmUgaXMgbm8gZGlyZWN0IHJlbGF0aW9uIGJldHdlZW4gdGhlIG5vZGVzIGFuZCB0aGUgZWRnZXMgRGF0YVNldCxcbiAgICogc28gdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIGNhbGwgdGhpcyBpcyBpbiB0aGUgaGFuZGxlciBmb3IgZXZlbnQgYF9kYXRhVXBkYXRlZGAuXG4gICAqL1xuICBfdXBkYXRlU3RhdGUoKSB7XG4gICAgdGhpcy5fYWRkTWlzc2luZ0VkZ2VzKCk7XG4gICAgdGhpcy5fcmVtb3ZlSW52YWxpZEVkZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2NhbiBmb3IgbWlzc2luZyBub2RlcyBhbmQgcmVtb3ZlIGNvcnJlc3BvbmRpbmcgZWRnZXMsIGlmIGFueS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVJbnZhbGlkRWRnZXMoKSB7XG4gICAgY29uc3QgZWRnZXNUb0RlbGV0ZSA9IFtdO1xuXG4gICAgZm9yRWFjaCh0aGlzLmJvZHkuZWRnZXMsIChlZGdlLCBpZCkgPT4ge1xuICAgICAgY29uc3QgdG9Ob2RlID0gdGhpcy5ib2R5Lm5vZGVzW2VkZ2UudG9JZF07XG4gICAgICBjb25zdCBmcm9tTm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tlZGdlLmZyb21JZF07XG5cbiAgICAgIC8vIFNraXAgY2x1c3RlcmluZyBlZGdlcyBoZXJlLCBsZXQgdGhlIENsdXN0ZXJpbmcgbW9kdWxlIGhhbmRsZSB0aG9zZVxuICAgICAgaWYgKFxuICAgICAgICAodG9Ob2RlICE9PSB1bmRlZmluZWQgJiYgdG9Ob2RlLmlzQ2x1c3RlciA9PT0gdHJ1ZSkgfHxcbiAgICAgICAgKGZyb21Ob2RlICE9PSB1bmRlZmluZWQgJiYgZnJvbU5vZGUuaXNDbHVzdGVyID09PSB0cnVlKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRvTm9kZSA9PT0gdW5kZWZpbmVkIHx8IGZyb21Ob2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWRnZXNUb0RlbGV0ZS5wdXNoKGlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucmVtb3ZlKGVkZ2VzVG9EZWxldGUsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhZGQgYWxsIGVkZ2VzIGZyb20gZGF0YXNldCB0aGF0IGFyZSBub3QgaW4gdGhlIGNhY2hlZCBzdGF0ZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZE1pc3NpbmdFZGdlcygpIHtcbiAgICBjb25zdCBlZGdlc0RhdGEgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcztcbiAgICBpZiAoZWRnZXNEYXRhID09PSB1bmRlZmluZWQgfHwgZWRnZXNEYXRhID09PSBudWxsKSB7XG4gICAgICByZXR1cm47IC8vIE5vIGVkZ2VzIERhdGFTZXQgeWV0OyBjYW4gaGFwcGVuIG9uIHN0YXJ0dXBcbiAgICB9XG5cbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBhZGRJZHMgPSBbXTtcblxuICAgIGVkZ2VzRGF0YS5mb3JFYWNoKChlZGdlRGF0YSwgZWRnZUlkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUlkXTtcbiAgICAgIGlmIChlZGdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWRkSWRzLnB1c2goZWRnZUlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYWRkKGFkZElkcywgdHJ1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRWRnZXNIYW5kbGVyO1xuIiwgImltcG9ydCB7IEFsZWEgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogQmFybmVzIEh1dCBTb2x2ZXJcbiAqL1xuY2xhc3MgQmFybmVzSHV0U29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5iYXJuZXNIdXRUcmVlO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB0aGlzLl9ybmcgPSBBbGVhKFwiQkFSTkVTIEhVVCBTT0xWRVJcIik7XG5cbiAgICAvLyBkZWJ1Zzogc2hvdyBncmlkXG4gICAgLy8gdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJhZnRlckRyYXdpbmdcIiwgKGN0eCkgPT4ge3RoaXMuX2RlYnVnKGN0eCwnI2ZmMDAwMCcpfSlcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnRoZXRhSW52ZXJzZWQgPSAxIC8gdGhpcy5vcHRpb25zLnRoZXRhO1xuXG4gICAgLy8gaWYgMSB0aGVuIG1pbiBkaXN0YW5jZSA9IDAuNSwgaWYgMC41IHRoZW4gbWluIGRpc3RhbmNlID0gMC41ICsgMC41Km5vZGUuc2hhcGUucmFkaXVzXG4gICAgdGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yID1cbiAgICAgIDEgLSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0aGlzLm9wdGlvbnMuYXZvaWRPdmVybGFwKSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBmb3JjZXMgdGhlIG5vZGVzIGFwcGx5IG9uIGVhY2ggb3RoZXIgYmFzZWQgb24gYSBncmF2aXRhdGlvbmFsIG1vZGVsLlxuICAgKiBUaGUgQmFybmVzIEh1dCBtZXRob2QgaXMgdXNlZCB0byBzcGVlZCB1cCB0aGlzIE4tYm9keSBzaW11bGF0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLmdyYXZpdGF0aW9uYWxDb25zdGFudCAhPT0gMCAmJlxuICAgICAgdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgICBjb25zdCBub2RlQ291bnQgPSBub2RlSW5kaWNlcy5sZW5ndGg7XG5cbiAgICAgIC8vIGNyZWF0ZSB0aGUgdHJlZVxuICAgICAgY29uc3QgYmFybmVzSHV0VHJlZSA9IHRoaXMuX2Zvcm1CYXJuZXNIdXRUcmVlKG5vZGVzLCBub2RlSW5kaWNlcyk7XG5cbiAgICAgIC8vIGZvciBkZWJ1Z2dpbmdcbiAgICAgIHRoaXMuYmFybmVzSHV0VHJlZSA9IGJhcm5lc0h1dFRyZWU7XG5cbiAgICAgIC8vIHBsYWNlIHRoZSBub2RlcyBvbmUgYnkgb25lIHJlY3Vyc2l2ZWx5XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVDb3VudDsgaSsrKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tub2RlSW5kaWNlc1tpXV07XG4gICAgICAgIGlmIChub2RlLm9wdGlvbnMubWFzcyA+IDApIHtcbiAgICAgICAgICAvLyBzdGFydGluZyB3aXRoIHJvb3QgaXMgaXJyZWxldmFudCwgaXQgbmV2ZXIgcGFzc2VzIHRoZSBCYXJuZXNIdXRTb2x2ZXIgY29uZGl0aW9uXG4gICAgICAgICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb25zKGJhcm5lc0h1dFRyZWUucm9vdCwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudEJyYW5jaFxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRGb3JjZUNvbnRyaWJ1dGlvbnMocGFyZW50QnJhbmNoLCBub2RlKSB7XG4gICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb24ocGFyZW50QnJhbmNoLmNoaWxkcmVuLk5XLCBub2RlKTtcbiAgICB0aGlzLl9nZXRGb3JjZUNvbnRyaWJ1dGlvbihwYXJlbnRCcmFuY2guY2hpbGRyZW4uTkUsIG5vZGUpO1xuICAgIHRoaXMuX2dldEZvcmNlQ29udHJpYnV0aW9uKHBhcmVudEJyYW5jaC5jaGlsZHJlbi5TVywgbm9kZSk7XG4gICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb24ocGFyZW50QnJhbmNoLmNoaWxkcmVuLlNFLCBub2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgYmFybmVzSHV0VHJlZS4gSXQgY2hlY2tzIHdoZW4gaXQgY2FuIGFwcHJveGltYXRlIGRpc3RhbnQgbm9kZXMgd2l0aCB0aGVpciBjZW50ZXIgb2YgbWFzcy5cbiAgICogSWYgYSByZWdpb24gY29udGFpbnMgYSBzaW5nbGUgbm9kZSwgd2UgY2hlY2sgaWYgaXQgaXMgbm90IGl0c2VsZiwgdGhlbiB3ZSBhcHBseSB0aGUgZm9yY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Rm9yY2VDb250cmlidXRpb24ocGFyZW50QnJhbmNoLCBub2RlKSB7XG4gICAgLy8gd2UgZ2V0IG5vIGZvcmNlIGNvbnRyaWJ1dGlvbiBmcm9tIGFuIGVtcHR5IHJlZ2lvblxuICAgIGlmIChwYXJlbnRCcmFuY2guY2hpbGRyZW5Db3VudCA+IDApIHtcbiAgICAgIC8vIGdldCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgY2VudGVyIG9mIG1hc3MgdG8gdGhlIG5vZGUuXG4gICAgICBjb25zdCBkeCA9IHBhcmVudEJyYW5jaC5jZW50ZXJPZk1hc3MueCAtIG5vZGUueDtcbiAgICAgIGNvbnN0IGR5ID0gcGFyZW50QnJhbmNoLmNlbnRlck9mTWFzcy55IC0gbm9kZS55O1xuICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICAvLyBCYXJuZXNIdXRTb2x2ZXIgY29uZGl0aW9uXG4gICAgICAvLyBvcmlnaW5hbCBjb25kaXRpb24gOiBzL2QgPCB0aGV0YSA9IHBhc3NlZCAgPT09ICBkL3MgPiAxL3RoZXRhID0gcGFzc2VkXG4gICAgICAvLyBjYWxjU2l6ZSA9IDEvcyAtLT4gZCAqIDEvcyA+IDEvdGhldGEgPSBwYXNzZWRcbiAgICAgIGlmIChkaXN0YW5jZSAqIHBhcmVudEJyYW5jaC5jYWxjU2l6ZSA+IHRoaXMudGhldGFJbnZlcnNlZCkge1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgbm9kZSwgcGFyZW50QnJhbmNoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERpZCBub3QgcGFzcyB0aGUgY29uZGl0aW9uLCBnbyBpbnRvIGNoaWxkcmVuIGlmIGF2YWlsYWJsZVxuICAgICAgICBpZiAocGFyZW50QnJhbmNoLmNoaWxkcmVuQ291bnQgPT09IDQpIHtcbiAgICAgICAgICB0aGlzLl9nZXRGb3JjZUNvbnRyaWJ1dGlvbnMocGFyZW50QnJhbmNoLCBub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBwYXJlbnRCcmFuY2ggbXVzdCBoYXZlIG9ubHkgb25lIG5vZGUsIGlmIGl0IHdhcyBlbXB0eSB3ZSB3b3VsZG50IGJlIGhlcmVcbiAgICAgICAgICBpZiAocGFyZW50QnJhbmNoLmNoaWxkcmVuLmRhdGEuaWQgIT0gbm9kZS5pZCkge1xuICAgICAgICAgICAgLy8gaWYgaXQgaXMgbm90IHNlbGZcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUZvcmNlcyhkaXN0YW5jZSwgZHgsIGR5LCBub2RlLCBwYXJlbnRCcmFuY2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGZvcmNlcyBiYXNlZCBvbiB0aGUgZGlzdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxuICAgKiBAcGFyYW0ge251bWJlcn0gZHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGR5XG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2FsY3VsYXRlRm9yY2VzKGRpc3RhbmNlLCBkeCwgZHksIG5vZGUsIHBhcmVudEJyYW5jaCkge1xuICAgIGlmIChkaXN0YW5jZSA9PT0gMCkge1xuICAgICAgZGlzdGFuY2UgPSAwLjE7XG4gICAgICBkeCA9IGRpc3RhbmNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm92ZXJsYXBBdm9pZGFuY2VGYWN0b3IgPCAxICYmIG5vZGUuc2hhcGUucmFkaXVzKSB7XG4gICAgICBkaXN0YW5jZSA9IE1hdGgubWF4KFxuICAgICAgICAwLjEgKyB0aGlzLm92ZXJsYXBBdm9pZGFuY2VGYWN0b3IgKiBub2RlLnNoYXBlLnJhZGl1cyxcbiAgICAgICAgZGlzdGFuY2UgLSBub2RlLnNoYXBlLnJhZGl1c1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgZGl2aWRpbmcgYnkgdGhlIGRpc3RhbmNlIGN1YmVkIGluc3RlYWQgb2Ygc3F1YXJlZCBhbGxvd3MgdXMgdG8gZ2V0IHRoZSBmeCBhbmQgZnkgY29tcG9uZW50cyB3aXRob3V0IHNpbmVzIGFuZCBjb3NpbmVzXG4gICAgLy8gaXQgaXMgc2hvcnRoYW5kIGZvciBncmF2aXR5Zm9yY2Ugd2l0aCBkaXN0YW5jZSBzcXVhcmVkIGFuZCBmeCA9IGR4L2Rpc3RhbmNlICogZ3Jhdml0eUZvcmNlXG4gICAgY29uc3QgZ3Jhdml0eUZvcmNlID1cbiAgICAgICh0aGlzLm9wdGlvbnMuZ3Jhdml0YXRpb25hbENvbnN0YW50ICpcbiAgICAgICAgcGFyZW50QnJhbmNoLm1hc3MgKlxuICAgICAgICBub2RlLm9wdGlvbnMubWFzcykgL1xuICAgICAgTWF0aC5wb3coZGlzdGFuY2UsIDMpO1xuICAgIGNvbnN0IGZ4ID0gZHggKiBncmF2aXR5Rm9yY2U7XG4gICAgY29uc3QgZnkgPSBkeSAqIGdyYXZpdHlGb3JjZTtcblxuICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUuaWRdLnggKz0gZng7XG4gICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZS5pZF0ueSArPSBmeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNvbnN0cnVjdHMgdGhlIGJhcm5lc0h1dCB0cmVlIHJlY3Vyc2l2ZWx5LiBJdCBjcmVhdGVzIHRoZSByb290LCBzcGxpdHMgaXQgYW5kIHN0YXJ0cyBwbGFjaW5nIHRoZSBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG5vZGVJbmRpY2VzXG4gICAqIEByZXR1cm5zIHt7cm9vdDoge2NlbnRlck9mTWFzczoge3g6IG51bWJlciwgeTogbnVtYmVyfSwgbWFzczogbnVtYmVyLCByYW5nZToge21pblg6IG51bWJlciwgbWF4WDogbnVtYmVyLCBtaW5ZOiBudW1iZXIsIG1heFk6IG51bWJlcn0sIHNpemU6IG51bWJlciwgY2FsY1NpemU6IG51bWJlciwgY2hpbGRyZW46IHtkYXRhOiBudWxsfSwgbWF4V2lkdGg6IG51bWJlciwgbGV2ZWw6IG51bWJlciwgY2hpbGRyZW5Db3VudDogbnVtYmVyfX19IEJhcm5lc0h1dFRyZWVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9mb3JtQmFybmVzSHV0VHJlZShub2Rlcywgbm9kZUluZGljZXMpIHtcbiAgICBsZXQgbm9kZTtcbiAgICBjb25zdCBub2RlQ291bnQgPSBub2RlSW5kaWNlcy5sZW5ndGg7XG5cbiAgICBsZXQgbWluWCA9IG5vZGVzW25vZGVJbmRpY2VzWzBdXS54O1xuICAgIGxldCBtaW5ZID0gbm9kZXNbbm9kZUluZGljZXNbMF1dLnk7XG4gICAgbGV0IG1heFggPSBub2Rlc1tub2RlSW5kaWNlc1swXV0ueDtcbiAgICBsZXQgbWF4WSA9IG5vZGVzW25vZGVJbmRpY2VzWzBdXS55O1xuXG4gICAgLy8gZ2V0IHRoZSByYW5nZSBvZiB0aGUgbm9kZXNcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IG5vZGVDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgY29uc3QgeCA9IG5vZGUueDtcbiAgICAgIGNvbnN0IHkgPSBub2RlLnk7XG4gICAgICBpZiAobm9kZS5vcHRpb25zLm1hc3MgPiAwKSB7XG4gICAgICAgIGlmICh4IDwgbWluWCkge1xuICAgICAgICAgIG1pblggPSB4O1xuICAgICAgICB9XG4gICAgICAgIGlmICh4ID4gbWF4WCkge1xuICAgICAgICAgIG1heFggPSB4O1xuICAgICAgICB9XG4gICAgICAgIGlmICh5IDwgbWluWSkge1xuICAgICAgICAgIG1pblkgPSB5O1xuICAgICAgICB9XG4gICAgICAgIGlmICh5ID4gbWF4WSkge1xuICAgICAgICAgIG1heFkgPSB5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG1ha2UgdGhlIHJhbmdlIGEgc3F1YXJlXG4gICAgY29uc3Qgc2l6ZURpZmYgPSBNYXRoLmFicyhtYXhYIC0gbWluWCkgLSBNYXRoLmFicyhtYXhZIC0gbWluWSk7IC8vIGRpZmZlcmVuY2UgYmV0d2VlbiBYIGFuZCBZXG4gICAgaWYgKHNpemVEaWZmID4gMCkge1xuICAgICAgbWluWSAtPSAwLjUgKiBzaXplRGlmZjtcbiAgICAgIG1heFkgKz0gMC41ICogc2l6ZURpZmY7XG4gICAgfSAvLyB4U2l6ZSA+IHlTaXplXG4gICAgZWxzZSB7XG4gICAgICBtaW5YICs9IDAuNSAqIHNpemVEaWZmO1xuICAgICAgbWF4WCAtPSAwLjUgKiBzaXplRGlmZjtcbiAgICB9IC8vIHhTaXplIDwgeVNpemVcblxuICAgIGNvbnN0IG1pbmltdW1UcmVlU2l6ZSA9IDFlLTU7XG4gICAgY29uc3Qgcm9vdFNpemUgPSBNYXRoLm1heChtaW5pbXVtVHJlZVNpemUsIE1hdGguYWJzKG1heFggLSBtaW5YKSk7XG4gICAgY29uc3QgaGFsZlJvb3RTaXplID0gMC41ICogcm9vdFNpemU7XG4gICAgY29uc3QgY2VudGVyWCA9IDAuNSAqIChtaW5YICsgbWF4WCksXG4gICAgICBjZW50ZXJZID0gMC41ICogKG1pblkgKyBtYXhZKTtcblxuICAgIC8vIGNvbnN0cnVjdCB0aGUgYmFybmVzSHV0VHJlZVxuICAgIGNvbnN0IGJhcm5lc0h1dFRyZWUgPSB7XG4gICAgICByb290OiB7XG4gICAgICAgIGNlbnRlck9mTWFzczogeyB4OiAwLCB5OiAwIH0sXG4gICAgICAgIG1hc3M6IDAsXG4gICAgICAgIHJhbmdlOiB7XG4gICAgICAgICAgbWluWDogY2VudGVyWCAtIGhhbGZSb290U2l6ZSxcbiAgICAgICAgICBtYXhYOiBjZW50ZXJYICsgaGFsZlJvb3RTaXplLFxuICAgICAgICAgIG1pblk6IGNlbnRlclkgLSBoYWxmUm9vdFNpemUsXG4gICAgICAgICAgbWF4WTogY2VudGVyWSArIGhhbGZSb290U2l6ZSxcbiAgICAgICAgfSxcbiAgICAgICAgc2l6ZTogcm9vdFNpemUsXG4gICAgICAgIGNhbGNTaXplOiAxIC8gcm9vdFNpemUsXG4gICAgICAgIGNoaWxkcmVuOiB7IGRhdGE6IG51bGwgfSxcbiAgICAgICAgbWF4V2lkdGg6IDAsXG4gICAgICAgIGxldmVsOiAwLFxuICAgICAgICBjaGlsZHJlbkNvdW50OiA0LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuX3NwbGl0QnJhbmNoKGJhcm5lc0h1dFRyZWUucm9vdCk7XG5cbiAgICAvLyBwbGFjZSB0aGUgbm9kZXMgb25lIGJ5IG9uZSByZWN1cnNpdmVseVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUNvdW50OyBpKyspIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tub2RlSW5kaWNlc1tpXV07XG4gICAgICBpZiAobm9kZS5vcHRpb25zLm1hc3MgPiAwKSB7XG4gICAgICAgIHRoaXMuX3BsYWNlSW5UcmVlKGJhcm5lc0h1dFRyZWUucm9vdCwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbWFrZSBnbG9iYWxcbiAgICByZXR1cm4gYmFybmVzSHV0VHJlZTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIHVwZGF0ZXMgdGhlIG1hc3Mgb2YgYSBicmFuY2guIHRoaXMgaXMgaW5jcmVhc2VkIGJ5IGFkZGluZyBhIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlQnJhbmNoTWFzcyhwYXJlbnRCcmFuY2gsIG5vZGUpIHtcbiAgICBjb25zdCBjZW50ZXJPZk1hc3MgPSBwYXJlbnRCcmFuY2guY2VudGVyT2ZNYXNzO1xuICAgIGNvbnN0IHRvdGFsTWFzcyA9IHBhcmVudEJyYW5jaC5tYXNzICsgbm9kZS5vcHRpb25zLm1hc3M7XG4gICAgY29uc3QgdG90YWxNYXNzSW52ID0gMSAvIHRvdGFsTWFzcztcblxuICAgIGNlbnRlck9mTWFzcy54ID1cbiAgICAgIGNlbnRlck9mTWFzcy54ICogcGFyZW50QnJhbmNoLm1hc3MgKyBub2RlLnggKiBub2RlLm9wdGlvbnMubWFzcztcbiAgICBjZW50ZXJPZk1hc3MueCAqPSB0b3RhbE1hc3NJbnY7XG5cbiAgICBjZW50ZXJPZk1hc3MueSA9XG4gICAgICBjZW50ZXJPZk1hc3MueSAqIHBhcmVudEJyYW5jaC5tYXNzICsgbm9kZS55ICogbm9kZS5vcHRpb25zLm1hc3M7XG4gICAgY2VudGVyT2ZNYXNzLnkgKj0gdG90YWxNYXNzSW52O1xuXG4gICAgcGFyZW50QnJhbmNoLm1hc3MgPSB0b3RhbE1hc3M7XG4gICAgY29uc3QgYmlnZ2VzdFNpemUgPSBNYXRoLm1heChcbiAgICAgIE1hdGgubWF4KG5vZGUuaGVpZ2h0LCBub2RlLnJhZGl1cyksXG4gICAgICBub2RlLndpZHRoXG4gICAgKTtcbiAgICBwYXJlbnRCcmFuY2gubWF4V2lkdGggPVxuICAgICAgcGFyZW50QnJhbmNoLm1heFdpZHRoIDwgYmlnZ2VzdFNpemUgPyBiaWdnZXN0U2l6ZSA6IHBhcmVudEJyYW5jaC5tYXhXaWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBkZXRlcm1pbmUgaW4gd2hpY2ggYnJhbmNoIHRoZSBub2RlIHdpbGwgYmUgcGxhY2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNraXBNYXNzVXBkYXRlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGxhY2VJblRyZWUocGFyZW50QnJhbmNoLCBub2RlLCBza2lwTWFzc1VwZGF0ZSkge1xuICAgIGlmIChza2lwTWFzc1VwZGF0ZSAhPSB0cnVlIHx8IHNraXBNYXNzVXBkYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHVwZGF0ZSB0aGUgbWFzcyBvZiB0aGUgYnJhbmNoLlxuICAgICAgdGhpcy5fdXBkYXRlQnJhbmNoTWFzcyhwYXJlbnRCcmFuY2gsIG5vZGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gcGFyZW50QnJhbmNoLmNoaWxkcmVuLk5XLnJhbmdlO1xuICAgIGxldCByZWdpb247XG4gICAgaWYgKHJhbmdlLm1heFggPiBub2RlLngpIHtcbiAgICAgIC8vIGluIE5XIG9yIFNXXG4gICAgICBpZiAocmFuZ2UubWF4WSA+IG5vZGUueSkge1xuICAgICAgICByZWdpb24gPSBcIk5XXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWdpb24gPSBcIlNXXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluIE5FIG9yIFNFXG4gICAgICBpZiAocmFuZ2UubWF4WSA+IG5vZGUueSkge1xuICAgICAgICByZWdpb24gPSBcIk5FXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWdpb24gPSBcIlNFXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcGxhY2VJblJlZ2lvbihwYXJlbnRCcmFuY2gsIG5vZGUsIHJlZ2lvbik7XG4gIH1cblxuICAvKipcbiAgICogYWN0dWFsbHkgcGxhY2UgdGhlIG5vZGUgaW4gYSByZWdpb24gKG9yIGJyYW5jaClcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudEJyYW5jaFxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHsnTlcnfCAnTkUnIHwgJ1NXJyB8ICdTRSd9IHJlZ2lvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BsYWNlSW5SZWdpb24ocGFyZW50QnJhbmNoLCBub2RlLCByZWdpb24pIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudEJyYW5jaC5jaGlsZHJlbltyZWdpb25dO1xuXG4gICAgc3dpdGNoIChjaGlsZHJlbi5jaGlsZHJlbkNvdW50KSB7XG4gICAgICBjYXNlIDA6IC8vIHBsYWNlIG5vZGUgaGVyZVxuICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5kYXRhID0gbm9kZTtcbiAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW5Db3VudCA9IDE7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUJyYW5jaE1hc3MoY2hpbGRyZW4sIG5vZGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTogLy8gY29udmVydCBpbnRvIGNoaWxkcmVuXG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSB0d28gbm9kZXMgZXhhY3RseSBvdmVybGFwcGluZyAob24gaW5pdCwgb24gb3BlbmluZyBvZiBjbHVzdGVyIGV0Yy4pXG4gICAgICAgIC8vIHdlIG1vdmUgb25lIG5vZGUgYSBsaXR0bGUgYml0IGFuZCB3ZSBkbyBub3QgcHV0IGl0IGluIHRoZSB0cmVlLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4uZGF0YS54ID09PSBub2RlLnggJiZcbiAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5kYXRhLnkgPT09IG5vZGUueVxuICAgICAgICApIHtcbiAgICAgICAgICBub2RlLnggKz0gdGhpcy5fcm5nKCk7XG4gICAgICAgICAgbm9kZS55ICs9IHRoaXMuX3JuZygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3NwbGl0QnJhbmNoKGNoaWxkcmVuKTtcbiAgICAgICAgICB0aGlzLl9wbGFjZUluVHJlZShjaGlsZHJlbiwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6IC8vIHBsYWNlIGluIGJyYW5jaFxuICAgICAgICB0aGlzLl9wbGFjZUluVHJlZShjaGlsZHJlbiwgbm9kZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGZ1bmN0aW9uIHNwbGl0cyBhIGJyYW5jaCBpbnRvIDQgc3ViIGJyYW5jaGVzLiBJZiB0aGUgYnJhbmNoIGNvbnRhaW5lZCBhIG5vZGUsIHdlIHBsYWNlIGl0IGluIHRoZSBzdWJicmFuY2hcbiAgICogYWZ0ZXIgdGhlIHNwbGl0IGlzIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3BsaXRCcmFuY2gocGFyZW50QnJhbmNoKSB7XG4gICAgLy8gaWYgdGhlIGJyYW5jaCBpcyBzaGFkZWQgd2l0aCBhIG5vZGUsIHJlcGxhY2UgdGhlIG5vZGUgaW4gdGhlIG5ldyBzdWJzZXQuXG4gICAgbGV0IGNvbnRhaW5lZE5vZGUgPSBudWxsO1xuICAgIGlmIChwYXJlbnRCcmFuY2guY2hpbGRyZW5Db3VudCA9PT0gMSkge1xuICAgICAgY29udGFpbmVkTm9kZSA9IHBhcmVudEJyYW5jaC5jaGlsZHJlbi5kYXRhO1xuICAgICAgcGFyZW50QnJhbmNoLm1hc3MgPSAwO1xuICAgICAgcGFyZW50QnJhbmNoLmNlbnRlck9mTWFzcy54ID0gMDtcbiAgICAgIHBhcmVudEJyYW5jaC5jZW50ZXJPZk1hc3MueSA9IDA7XG4gICAgfVxuICAgIHBhcmVudEJyYW5jaC5jaGlsZHJlbkNvdW50ID0gNDtcbiAgICBwYXJlbnRCcmFuY2guY2hpbGRyZW4uZGF0YSA9IG51bGw7XG4gICAgdGhpcy5faW5zZXJ0UmVnaW9uKHBhcmVudEJyYW5jaCwgXCJOV1wiKTtcbiAgICB0aGlzLl9pbnNlcnRSZWdpb24ocGFyZW50QnJhbmNoLCBcIk5FXCIpO1xuICAgIHRoaXMuX2luc2VydFJlZ2lvbihwYXJlbnRCcmFuY2gsIFwiU1dcIik7XG4gICAgdGhpcy5faW5zZXJ0UmVnaW9uKHBhcmVudEJyYW5jaCwgXCJTRVwiKTtcblxuICAgIGlmIChjb250YWluZWROb2RlICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3BsYWNlSW5UcmVlKHBhcmVudEJyYW5jaCwgY29udGFpbmVkTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gc3ViZGl2aWRlcyB0aGUgcmVnaW9uIGludG8gZm91ciBuZXcgc2VnbWVudHMuXG4gICAqIFNwZWNpZmljYWxseSwgdGhpcyBpbnNlcnRzIGEgc2luZ2xlIG5ldyBzZWdtZW50LlxuICAgKiBJdCBmaWxscyB0aGUgY2hpbGRyZW4gc2VjdGlvbiBvZiB0aGUgcGFyZW50QnJhbmNoXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHsnTlcnfCAnTkUnIHwgJ1NXJyB8ICdTRSd9IHJlZ2lvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luc2VydFJlZ2lvbihwYXJlbnRCcmFuY2gsIHJlZ2lvbikge1xuICAgIGxldCBtaW5YLCBtYXhYLCBtaW5ZLCBtYXhZO1xuICAgIGNvbnN0IGNoaWxkU2l6ZSA9IDAuNSAqIHBhcmVudEJyYW5jaC5zaXplO1xuICAgIHN3aXRjaCAocmVnaW9uKSB7XG4gICAgICBjYXNlIFwiTldcIjpcbiAgICAgICAgbWluWCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YO1xuICAgICAgICBtYXhYID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblggKyBjaGlsZFNpemU7XG4gICAgICAgIG1pblkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWTtcbiAgICAgICAgbWF4WSA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5ZICsgY2hpbGRTaXplO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJORVwiOlxuICAgICAgICBtaW5YID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblggKyBjaGlsZFNpemU7XG4gICAgICAgIG1heFggPSBwYXJlbnRCcmFuY2gucmFuZ2UubWF4WDtcbiAgICAgICAgbWluWSA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5ZO1xuICAgICAgICBtYXhZID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblkgKyBjaGlsZFNpemU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlNXXCI6XG4gICAgICAgIG1pblggPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWDtcbiAgICAgICAgbWF4WCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YICsgY2hpbGRTaXplO1xuICAgICAgICBtaW5ZID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblkgKyBjaGlsZFNpemU7XG4gICAgICAgIG1heFkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWF4WTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiU0VcIjpcbiAgICAgICAgbWluWCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YICsgY2hpbGRTaXplO1xuICAgICAgICBtYXhYID0gcGFyZW50QnJhbmNoLnJhbmdlLm1heFg7XG4gICAgICAgIG1pblkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWSArIGNoaWxkU2l6ZTtcbiAgICAgICAgbWF4WSA9IHBhcmVudEJyYW5jaC5yYW5nZS5tYXhZO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBwYXJlbnRCcmFuY2guY2hpbGRyZW5bcmVnaW9uXSA9IHtcbiAgICAgIGNlbnRlck9mTWFzczogeyB4OiAwLCB5OiAwIH0sXG4gICAgICBtYXNzOiAwLFxuICAgICAgcmFuZ2U6IHsgbWluWDogbWluWCwgbWF4WDogbWF4WCwgbWluWTogbWluWSwgbWF4WTogbWF4WSB9LFxuICAgICAgc2l6ZTogMC41ICogcGFyZW50QnJhbmNoLnNpemUsXG4gICAgICBjYWxjU2l6ZTogMiAqIHBhcmVudEJyYW5jaC5jYWxjU2l6ZSxcbiAgICAgIGNoaWxkcmVuOiB7IGRhdGE6IG51bGwgfSxcbiAgICAgIG1heFdpZHRoOiAwLFxuICAgICAgbGV2ZWw6IHBhcmVudEJyYW5jaC5sZXZlbCArIDEsXG4gICAgICBjaGlsZHJlbkNvdW50OiAwLFxuICAgIH07XG4gIH1cblxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVCVUdHSU5HIEJFTE9XICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZWQsIGl0IGRyYXdzIHRoZSB0cmVlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RlYnVnKGN0eCwgY29sb3IpIHtcbiAgICBpZiAodGhpcy5iYXJuZXNIdXRUcmVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGN0eC5saW5lV2lkdGggPSAxO1xuXG4gICAgICB0aGlzLl9kcmF3QnJhbmNoKHRoaXMuYmFybmVzSHV0VHJlZS5yb290LCBjdHgsIGNvbG9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBJdCBkcmF3cyB0aGUgYnJhbmNoZXMgcmVjdXJzaXZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBicmFuY2hcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3QnJhbmNoKGJyYW5jaCwgY3R4LCBjb2xvcikge1xuICAgIGlmIChjb2xvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IFwiI0ZGMDAwMFwiO1xuICAgIH1cblxuICAgIGlmIChicmFuY2guY2hpbGRyZW5Db3VudCA9PT0gNCkge1xuICAgICAgdGhpcy5fZHJhd0JyYW5jaChicmFuY2guY2hpbGRyZW4uTlcsIGN0eCk7XG4gICAgICB0aGlzLl9kcmF3QnJhbmNoKGJyYW5jaC5jaGlsZHJlbi5ORSwgY3R4KTtcbiAgICAgIHRoaXMuX2RyYXdCcmFuY2goYnJhbmNoLmNoaWxkcmVuLlNFLCBjdHgpO1xuICAgICAgdGhpcy5fZHJhd0JyYW5jaChicmFuY2guY2hpbGRyZW4uU1csIGN0eCk7XG4gICAgfVxuICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5taW5YLCBicmFuY2gucmFuZ2UubWluWSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWF4WCwgYnJhbmNoLnJhbmdlLm1pblkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5tYXhYLCBicmFuY2gucmFuZ2UubWluWSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWF4WCwgYnJhbmNoLnJhbmdlLm1heFkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5tYXhYLCBicmFuY2gucmFuZ2UubWF4WSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWluWCwgYnJhbmNoLnJhbmdlLm1heFkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5taW5YLCBicmFuY2gucmFuZ2UubWF4WSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWluWCwgYnJhbmNoLnJhbmdlLm1pblkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIC8qXG4gICAgIGlmIChicmFuY2gubWFzcyA+IDApIHtcbiAgICAgY3R4LmNpcmNsZShicmFuY2guY2VudGVyT2ZNYXNzLngsIGJyYW5jaC5jZW50ZXJPZk1hc3MueSwgMypicmFuY2gubWFzcyk7XG4gICAgIGN0eC5zdHJva2UoKTtcbiAgICAgfVxuICAgICAqL1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhcm5lc0h1dFNvbHZlcjtcbiIsICJpbXBvcnQgeyBBbGVhIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIFJlcHVsc2lvbiBTb2x2ZXJcbiAqL1xuY2xhc3MgUmVwdWxzaW9uU29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5fcm5nID0gQWxlYShcIlJFUFVMU0lPTiBTT0xWRVJcIik7XG5cbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucGh5c2ljc0JvZHkgPSBwaHlzaWNzQm9keTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgdGhlIG5vZGVzIGFwcGx5IG9uIGVhY2ggb3RoZXIgYmFzZWQgb24gYSByZXB1bHNpb24gZmllbGQuXG4gICAqIFRoaXMgZmllbGQgaXMgbGluZWFybHkgYXBwcm94aW1hdGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgbGV0IGR4LCBkeSwgZGlzdGFuY2UsIGZ4LCBmeSwgcmVwdWxzaW5nRm9yY2UsIG5vZGUxLCBub2RlMjtcblxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgY29uc3QgZm9yY2VzID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXM7XG5cbiAgICAvLyByZXB1bHNpbmcgZm9yY2VzIGJldHdlZW4gbm9kZXNcbiAgICBjb25zdCBub2RlRGlzdGFuY2UgPSB0aGlzLm9wdGlvbnMubm9kZURpc3RhbmNlO1xuXG4gICAgLy8gYXBwcm94aW1hdGlvbiBjb25zdGFudHNcbiAgICBjb25zdCBhID0gLTIgLyAzIC8gbm9kZURpc3RhbmNlO1xuICAgIGNvbnN0IGIgPSA0IC8gMztcblxuICAgIC8vIHdlIGxvb3AgZnJvbSBpIG92ZXIgYWxsIGJ1dCB0aGUgbGFzdCBlbnRyZWUgaW4gdGhlIGFycmF5XG4gICAgLy8gaiBsb29wcyBmcm9tIGkrMSB0byB0aGUgbGFzdC4gVGhpcyB3YXkgd2UgZG8gbm90IGRvdWJsZSBjb3VudCBhbnkgb2YgdGhlIGluZGljZXMsIG5vciBpID09PSBqXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIG5vZGUxID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgbm9kZUluZGljZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgbm9kZTIgPSBub2Rlc1tub2RlSW5kaWNlc1tqXV07XG5cbiAgICAgICAgZHggPSBub2RlMi54IC0gbm9kZTEueDtcbiAgICAgICAgZHkgPSBub2RlMi55IC0gbm9kZTEueTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICAgIC8vIHNhbWUgY29uZGl0aW9uIGFzIEJhcm5lc0h1dFNvbHZlciwgbWFraW5nIHN1cmUgbm9kZXMgYXJlIG5ldmVyIDEwMCUgb3ZlcmxhcHBpbmcuXG4gICAgICAgIGlmIChkaXN0YW5jZSA9PT0gMCkge1xuICAgICAgICAgIGRpc3RhbmNlID0gMC4xICogdGhpcy5fcm5nKCk7XG4gICAgICAgICAgZHggPSBkaXN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXN0YW5jZSA8IDIgKiBub2RlRGlzdGFuY2UpIHtcbiAgICAgICAgICBpZiAoZGlzdGFuY2UgPCAwLjUgKiBub2RlRGlzdGFuY2UpIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID0gMS4wO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXB1bHNpbmdGb3JjZSA9IGEgKiBkaXN0YW5jZSArIGI7IC8vIGxpbmVhciBhcHByb3ggb2YgIDEgLyAoMSArIE1hdGguZXhwKChkaXN0YW5jZSAvIG5vZGVEaXN0YW5jZSAtIDEpICogc3RlZXBuZXNzKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVwdWxzaW5nRm9yY2UgPSByZXB1bHNpbmdGb3JjZSAvIGRpc3RhbmNlO1xuXG4gICAgICAgICAgZnggPSBkeCAqIHJlcHVsc2luZ0ZvcmNlO1xuICAgICAgICAgIGZ5ID0gZHkgKiByZXB1bHNpbmdGb3JjZTtcblxuICAgICAgICAgIGZvcmNlc1tub2RlMS5pZF0ueCAtPSBmeDtcbiAgICAgICAgICBmb3JjZXNbbm9kZTEuaWRdLnkgLT0gZnk7XG4gICAgICAgICAgZm9yY2VzW25vZGUyLmlkXS54ICs9IGZ4O1xuICAgICAgICAgIGZvcmNlc1tub2RlMi5pZF0ueSArPSBmeTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXB1bHNpb25Tb2x2ZXI7XG4iLCAiLyoqXG4gKiBIaWVyYXJjaGljYWwgUmVwdWxzaW9uIFNvbHZlclxuICovXG5jbGFzcyBIaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHt7cGh5c2ljc05vZGVJbmRpY2VzOiBBcnJheSwgcGh5c2ljc0VkZ2VJbmRpY2VzOiBBcnJheSwgZm9yY2VzOiB7fSwgdmVsb2NpdGllczoge319fSBwaHlzaWNzQm9keVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucGh5c2ljc0JvZHkgPSBwaHlzaWNzQm9keTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oMSwgdGhpcy5vcHRpb25zLmF2b2lkT3ZlcmxhcCB8fCAwKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgdGhlIG5vZGVzIGFwcGx5IG9uIGVhY2ggb3RoZXIgYmFzZWQgb24gYSByZXB1bHNpb24gZmllbGQuXG4gICAqIFRoaXMgZmllbGQgaXMgbGluZWFybHkgYXBwcm94aW1hdGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3Qgbm9kZUluZGljZXMgPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlcztcbiAgICBjb25zdCBmb3JjZXMgPSB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlcztcblxuICAgIC8vIHJlcHVsc2luZyBmb3JjZXMgYmV0d2VlbiBub2Rlc1xuICAgIGNvbnN0IG5vZGVEaXN0YW5jZSA9IHRoaXMub3B0aW9ucy5ub2RlRGlzdGFuY2U7XG5cbiAgICAvLyB3ZSBsb29wIGZyb20gaSBvdmVyIGFsbCBidXQgdGhlIGxhc3QgZW50cmVlIGluIHRoZSBhcnJheVxuICAgIC8vIGogbG9vcHMgZnJvbSBpKzEgdG8gdGhlIGxhc3QuIFRoaXMgd2F5IHdlIGRvIG5vdCBkb3VibGUgY291bnQgYW55IG9mIHRoZSBpbmRpY2VzLCBub3IgaSA9PT0galxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlMSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IG5vZGUyID0gbm9kZXNbbm9kZUluZGljZXNbal1dO1xuXG4gICAgICAgIC8vIG5vZGVzIG9ubHkgYWZmZWN0IG5vZGVzIG9uIHRoZWlyIGxldmVsXG4gICAgICAgIGlmIChub2RlMS5sZXZlbCA9PT0gbm9kZTIubGV2ZWwpIHtcbiAgICAgICAgICBjb25zdCB0aGVzZU5vZGVzRGlzdGFuY2UgPVxuICAgICAgICAgICAgbm9kZURpc3RhbmNlICtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxhcEF2b2lkYW5jZUZhY3RvciAqXG4gICAgICAgICAgICAgICgobm9kZTEuc2hhcGUucmFkaXVzIHx8IDApIC8gMiArIChub2RlMi5zaGFwZS5yYWRpdXMgfHwgMCkgLyAyKTtcblxuICAgICAgICAgIGNvbnN0IGR4ID0gbm9kZTIueCAtIG5vZGUxLng7XG4gICAgICAgICAgY29uc3QgZHkgPSBub2RlMi55IC0gbm9kZTEueTtcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICAgICAgICBjb25zdCBzdGVlcG5lc3MgPSAwLjA1O1xuICAgICAgICAgIGxldCByZXB1bHNpbmdGb3JjZTtcbiAgICAgICAgICBpZiAoZGlzdGFuY2UgPCB0aGVzZU5vZGVzRGlzdGFuY2UpIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID1cbiAgICAgICAgICAgICAgLU1hdGgucG93KHN0ZWVwbmVzcyAqIGRpc3RhbmNlLCAyKSArXG4gICAgICAgICAgICAgIE1hdGgucG93KHN0ZWVwbmVzcyAqIHRoZXNlTm9kZXNEaXN0YW5jZSwgMik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbm9ybWFsaXplIGZvcmNlIHdpdGhcbiAgICAgICAgICBpZiAoZGlzdGFuY2UgIT09IDApIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID0gcmVwdWxzaW5nRm9yY2UgLyBkaXN0YW5jZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZnggPSBkeCAqIHJlcHVsc2luZ0ZvcmNlO1xuICAgICAgICAgIGNvbnN0IGZ5ID0gZHkgKiByZXB1bHNpbmdGb3JjZTtcblxuICAgICAgICAgIGZvcmNlc1tub2RlMS5pZF0ueCAtPSBmeDtcbiAgICAgICAgICBmb3JjZXNbbm9kZTEuaWRdLnkgLT0gZnk7XG4gICAgICAgICAgZm9yY2VzW25vZGUyLmlkXS54ICs9IGZ4O1xuICAgICAgICAgIGZvcmNlc1tub2RlMi5pZF0ueSArPSBmeTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXI7XG4iLCAiLyoqXG4gKiBTcHJpbmcgU29sdmVyXG4gKi9cbmNsYXNzIFNwcmluZ1NvbHZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge3twaHlzaWNzTm9kZUluZGljZXM6IEFycmF5LCBwaHlzaWNzRWRnZUluZGljZXM6IEFycmF5LCBmb3JjZXM6IHt9LCB2ZWxvY2l0aWVzOiB7fX19IHBoeXNpY3NCb2R5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waHlzaWNzQm9keSA9IHBoeXNpY3NCb2R5O1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHNwcmluZ2ZvcmNlcyBvbiB0aGUgbm9kZXMsIGFjY291bnRpbmcgZm9yIHRoZSBzdXBwb3J0IG5vZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgbGV0IGVkZ2VMZW5ndGgsIGVkZ2U7XG4gICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NFZGdlSW5kaWNlcztcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBsZXQgbm9kZTEsIG5vZGUyLCBub2RlMztcblxuICAgIC8vIGZvcmNlcyBjYXVzZWQgYnkgdGhlIGVkZ2VzLCBtb2RlbGxlZCBhcyBzcHJpbmdzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZWRnZSA9IGVkZ2VzW2VkZ2VJbmRpY2VzW2ldXTtcbiAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCA9PT0gdHJ1ZSAmJiBlZGdlLnRvSWQgIT09IGVkZ2UuZnJvbUlkKSB7XG4gICAgICAgIC8vIG9ubHkgY2FsY3VsYXRlIGZvcmNlcyBpZiBub2RlcyBhcmUgaW4gdGhlIHNhbWUgc2VjdG9yXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbZWRnZS50b0lkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW2VkZ2UuZnJvbUlkXSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChlZGdlLmVkZ2VUeXBlLnZpYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlZGdlTGVuZ3RoID1cbiAgICAgICAgICAgICAgZWRnZS5vcHRpb25zLmxlbmd0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLm9wdGlvbnMuc3ByaW5nTGVuZ3RoXG4gICAgICAgICAgICAgICAgOiBlZGdlLm9wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgbm9kZTEgPSBlZGdlLnRvO1xuICAgICAgICAgICAgbm9kZTIgPSBlZGdlLmVkZ2VUeXBlLnZpYTtcbiAgICAgICAgICAgIG5vZGUzID0gZWRnZS5mcm9tO1xuXG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVTcHJpbmdGb3JjZShub2RlMSwgbm9kZTIsIDAuNSAqIGVkZ2VMZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlU3ByaW5nRm9yY2Uobm9kZTIsIG5vZGUzLCAwLjUgKiBlZGdlTGVuZ3RoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdGhlICogMS41IGlzIGhlcmUgc28gdGhlIGVkZ2UgbG9va3MgYXMgbGFyZ2UgYXMgYSBzbW9vdGggZWRnZS4gSXQgZG9lcyBub3QgaW5pdGlhbGx5IGJlY2F1c2UgdGhlIHNtb290aCBlZGdlcyB1c2VcbiAgICAgICAgICAgIC8vIHRoZSBzdXBwb3J0IG5vZGVzIHdoaWNoIGV4ZXJ0IGEgcmVwdWxzaXZlIGZvcmNlIG9uIHRoZSB0byBhbmQgZnJvbSBub2RlcywgbWFraW5nIHRoZSBlZGdlIGFwcGVhciBsYXJnZXIuXG4gICAgICAgICAgICBlZGdlTGVuZ3RoID1cbiAgICAgICAgICAgICAgZWRnZS5vcHRpb25zLmxlbmd0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLm9wdGlvbnMuc3ByaW5nTGVuZ3RoICogMS41XG4gICAgICAgICAgICAgICAgOiBlZGdlLm9wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlU3ByaW5nRm9yY2UoZWRnZS5mcm9tLCBlZGdlLnRvLCBlZGdlTGVuZ3RoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgY29kZSBhY3R1YWxseSBwZXJmb3JtaW5nIHRoZSBjYWxjdWxhdGlvbiBmb3IgdGhlIGZ1bmN0aW9uIGFib3ZlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUxXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZTJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VMZW5ndGhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVTcHJpbmdGb3JjZShub2RlMSwgbm9kZTIsIGVkZ2VMZW5ndGgpIHtcbiAgICBjb25zdCBkeCA9IG5vZGUxLnggLSBub2RlMi54O1xuICAgIGNvbnN0IGR5ID0gbm9kZTEueSAtIG5vZGUyLnk7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLm1heChNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpLCAwLjAxKTtcblxuICAgIC8vIHRoZSAxL2Rpc3RhbmNlIGlzIHNvIHRoZSBmeCBhbmQgZnkgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBzaW5lIG9yIGNvc2luZS5cbiAgICBjb25zdCBzcHJpbmdGb3JjZSA9XG4gICAgICAodGhpcy5vcHRpb25zLnNwcmluZ0NvbnN0YW50ICogKGVkZ2VMZW5ndGggLSBkaXN0YW5jZSkpIC8gZGlzdGFuY2U7XG5cbiAgICBjb25zdCBmeCA9IGR4ICogc3ByaW5nRm9yY2U7XG4gICAgY29uc3QgZnkgPSBkeSAqIHNwcmluZ0ZvcmNlO1xuXG4gICAgLy8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG9uZSBub2RlIGlzIG5vdCBwYXJ0IG9mIHRoZSBwaHlzY2lzXG4gICAgaWYgKHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUxLmlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMS5pZF0ueCArPSBmeDtcbiAgICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUxLmlkXS55ICs9IGZ5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMi5pZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZTIuaWRdLnggLT0gZng7XG4gICAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMi5pZF0ueSAtPSBmeTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3ByaW5nU29sdmVyO1xuIiwgIi8qKlxuICogSGllcmFyY2hpY2FsIFNwcmluZyBTb2x2ZXJcbiAqL1xuY2xhc3MgSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgc3ByaW5nZm9yY2VzIG9uIHRoZSBub2RlcywgYWNjb3VudGluZyBmb3IgdGhlIHN1cHBvcnQgbm9kZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzb2x2ZSgpIHtcbiAgICBsZXQgZWRnZUxlbmd0aCwgZWRnZTtcbiAgICBsZXQgZHgsIGR5LCBmeCwgZnksIHNwcmluZ0ZvcmNlLCBkaXN0YW5jZTtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBmYWN0b3IgPSAwLjU7XG5cbiAgICBjb25zdCBlZGdlSW5kaWNlcyA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc0VkZ2VJbmRpY2VzO1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgY29uc3QgZm9yY2VzID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXM7XG5cbiAgICAvLyBpbml0aWFsaXplIHRoZSBzcHJpbmcgZm9yY2UgY291bnRlcnNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z4ID0gMDtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z5ID0gMDtcbiAgICB9XG5cbiAgICAvLyBmb3JjZXMgY2F1c2VkIGJ5IHRoZSBlZGdlcywgbW9kZWxsZWQgYXMgc3ByaW5nc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVkZ2UgPSBlZGdlc1tlZGdlSW5kaWNlc1tpXV07XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgZWRnZUxlbmd0aCA9XG4gICAgICAgICAgZWRnZS5vcHRpb25zLmxlbmd0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMub3B0aW9ucy5zcHJpbmdMZW5ndGhcbiAgICAgICAgICAgIDogZWRnZS5vcHRpb25zLmxlbmd0aDtcblxuICAgICAgICBkeCA9IGVkZ2UuZnJvbS54IC0gZWRnZS50by54O1xuICAgICAgICBkeSA9IGVkZ2UuZnJvbS55IC0gZWRnZS50by55O1xuICAgICAgICBkaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgICAgIGRpc3RhbmNlID0gZGlzdGFuY2UgPT09IDAgPyAwLjAxIDogZGlzdGFuY2U7XG5cbiAgICAgICAgLy8gdGhlIDEvZGlzdGFuY2UgaXMgc28gdGhlIGZ4IGFuZCBmeSBjYW4gYmUgY2FsY3VsYXRlZCB3aXRob3V0IHNpbmUgb3IgY29zaW5lLlxuICAgICAgICBzcHJpbmdGb3JjZSA9XG4gICAgICAgICAgKHRoaXMub3B0aW9ucy5zcHJpbmdDb25zdGFudCAqIChlZGdlTGVuZ3RoIC0gZGlzdGFuY2UpKSAvIGRpc3RhbmNlO1xuXG4gICAgICAgIGZ4ID0gZHggKiBzcHJpbmdGb3JjZTtcbiAgICAgICAgZnkgPSBkeSAqIHNwcmluZ0ZvcmNlO1xuXG4gICAgICAgIGlmIChlZGdlLnRvLmxldmVsICE9IGVkZ2UuZnJvbS5sZXZlbCkge1xuICAgICAgICAgIGlmIChmb3JjZXNbZWRnZS50b0lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS50b0lkXS5zcHJpbmdGeCAtPSBmeDtcbiAgICAgICAgICAgIGZvcmNlc1tlZGdlLnRvSWRdLnNwcmluZ0Z5IC09IGZ5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9yY2VzW2VkZ2UuZnJvbUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS5mcm9tSWRdLnNwcmluZ0Z4ICs9IGZ4O1xuICAgICAgICAgICAgZm9yY2VzW2VkZ2UuZnJvbUlkXS5zcHJpbmdGeSArPSBmeTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZvcmNlc1tlZGdlLnRvSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvcmNlc1tlZGdlLnRvSWRdLnggLT0gZmFjdG9yICogZng7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS50b0lkXS55IC09IGZhY3RvciAqIGZ5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9yY2VzW2VkZ2UuZnJvbUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS5mcm9tSWRdLnggKz0gZmFjdG9yICogZng7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS5mcm9tSWRdLnkgKz0gZmFjdG9yICogZnk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm9ybWFsaXplIHNwcmluZyBmb3JjZXNcbiAgICBzcHJpbmdGb3JjZSA9IDE7XG4gICAgbGV0IHNwcmluZ0Z4LCBzcHJpbmdGeTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIHNwcmluZ0Z4ID0gTWF0aC5taW4oXG4gICAgICAgIHNwcmluZ0ZvcmNlLFxuICAgICAgICBNYXRoLm1heCgtc3ByaW5nRm9yY2UsIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z4KVxuICAgICAgKTtcbiAgICAgIHNwcmluZ0Z5ID0gTWF0aC5taW4oXG4gICAgICAgIHNwcmluZ0ZvcmNlLFxuICAgICAgICBNYXRoLm1heCgtc3ByaW5nRm9yY2UsIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z5KVxuICAgICAgKTtcblxuICAgICAgZm9yY2VzW25vZGVJZF0ueCArPSBzcHJpbmdGeDtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnkgKz0gc3ByaW5nRnk7XG4gICAgfVxuXG4gICAgLy8gcmV0YWluIGVuZXJneSBiYWxhbmNlXG4gICAgbGV0IHRvdGFsRnggPSAwO1xuICAgIGxldCB0b3RhbEZ5ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIHRvdGFsRnggKz0gZm9yY2VzW25vZGVJZF0ueDtcbiAgICAgIHRvdGFsRnkgKz0gZm9yY2VzW25vZGVJZF0ueTtcbiAgICB9XG4gICAgY29uc3QgY29ycmVjdGlvbkZ4ID0gdG90YWxGeCAvIG5vZGVJbmRpY2VzLmxlbmd0aDtcbiAgICBjb25zdCBjb3JyZWN0aW9uRnkgPSB0b3RhbEZ5IC8gbm9kZUluZGljZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gbm9kZUluZGljZXNbaV07XG4gICAgICBmb3JjZXNbbm9kZUlkXS54IC09IGNvcnJlY3Rpb25GeDtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnkgLT0gY29ycmVjdGlvbkZ5O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIaWVyYXJjaGljYWxTcHJpbmdTb2x2ZXI7XG4iLCAiLyoqXG4gKiBDZW50cmFsIEdyYXZpdHkgU29sdmVyXG4gKi9cbmNsYXNzIENlbnRyYWxHcmF2aXR5U29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgZm9yY2VzIGZvciBlYWNoIG5vZGVcbiAgICovXG4gIHNvbHZlKCkge1xuICAgIGxldCBkeCwgZHksIGRpc3RhbmNlLCBub2RlO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgY29uc3QgZm9yY2VzID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIG5vZGUgPSBub2Rlc1tub2RlSWRdO1xuICAgICAgZHggPSAtbm9kZS54O1xuICAgICAgZHkgPSAtbm9kZS55O1xuICAgICAgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICB0aGlzLl9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgZm9yY2VzLCBub2RlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgYmFzZWQgb24gdGhlIGRpc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IGR4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeVxuICAgKiBAcGFyYW0ge09iamVjdDxOb2RlLmlkLCB2aXMuTm9kZT59IGZvcmNlc1xuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgZm9yY2VzLCBub2RlKSB7XG4gICAgY29uc3QgZ3Jhdml0eUZvcmNlID1cbiAgICAgIGRpc3RhbmNlID09PSAwID8gMCA6IHRoaXMub3B0aW9ucy5jZW50cmFsR3Jhdml0eSAvIGRpc3RhbmNlO1xuICAgIGZvcmNlc1tub2RlLmlkXS54ID0gZHggKiBncmF2aXR5Rm9yY2U7XG4gICAgZm9yY2VzW25vZGUuaWRdLnkgPSBkeSAqIGdyYXZpdHlGb3JjZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDZW50cmFsR3Jhdml0eVNvbHZlcjtcbiIsICJpbXBvcnQgQmFybmVzSHV0U29sdmVyIGZyb20gXCIuL0Jhcm5lc0h1dFNvbHZlclwiO1xuaW1wb3J0IHsgQWxlYSB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBAYXVnbWVudHMgQmFybmVzSHV0U29sdmVyXG4gKi9cbmNsYXNzIEZvcmNlQXRsYXMyQmFzZWRSZXB1bHNpb25Tb2x2ZXIgZXh0ZW5kcyBCYXJuZXNIdXRTb2x2ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHt7cGh5c2ljc05vZGVJbmRpY2VzOiBBcnJheSwgcGh5c2ljc0VkZ2VJbmRpY2VzOiBBcnJheSwgZm9yY2VzOiB7fSwgdmVsb2NpdGllczoge319fSBwaHlzaWNzQm9keVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpIHtcbiAgICBzdXBlcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9ybmcgPSBBbGVhKFwiRk9SQ0UgQVRMQVMgMiBCQVNFRCBSRVBVTFNJT04gU09MVkVSXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIGJhc2VkIG9uIHRoZSBkaXN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeFxuICAgKiBAcGFyYW0ge251bWJlcn0gZHlcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgbm9kZSwgcGFyZW50QnJhbmNoKSB7XG4gICAgaWYgKGRpc3RhbmNlID09PSAwKSB7XG4gICAgICBkaXN0YW5jZSA9IDAuMSAqIHRoaXMuX3JuZygpO1xuICAgICAgZHggPSBkaXN0YW5jZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yIDwgMSAmJiBub2RlLnNoYXBlLnJhZGl1cykge1xuICAgICAgZGlzdGFuY2UgPSBNYXRoLm1heChcbiAgICAgICAgMC4xICsgdGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yICogbm9kZS5zaGFwZS5yYWRpdXMsXG4gICAgICAgIGRpc3RhbmNlIC0gbm9kZS5zaGFwZS5yYWRpdXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVncmVlID0gbm9kZS5lZGdlcy5sZW5ndGggKyAxO1xuICAgIC8vIHRoZSBkaXZpZGluZyBieSB0aGUgZGlzdGFuY2UgY3ViZWQgaW5zdGVhZCBvZiBzcXVhcmVkIGFsbG93cyB1cyB0byBnZXQgdGhlIGZ4IGFuZCBmeSBjb21wb25lbnRzIHdpdGhvdXQgc2luZXMgYW5kIGNvc2luZXNcbiAgICAvLyBpdCBpcyBzaG9ydGhhbmQgZm9yIGdyYXZpdHlmb3JjZSB3aXRoIGRpc3RhbmNlIHNxdWFyZWQgYW5kIGZ4ID0gZHgvZGlzdGFuY2UgKiBncmF2aXR5Rm9yY2VcbiAgICBjb25zdCBncmF2aXR5Rm9yY2UgPVxuICAgICAgKHRoaXMub3B0aW9ucy5ncmF2aXRhdGlvbmFsQ29uc3RhbnQgKlxuICAgICAgICBwYXJlbnRCcmFuY2gubWFzcyAqXG4gICAgICAgIG5vZGUub3B0aW9ucy5tYXNzICpcbiAgICAgICAgZGVncmVlKSAvXG4gICAgICBNYXRoLnBvdyhkaXN0YW5jZSwgMik7XG4gICAgY29uc3QgZnggPSBkeCAqIGdyYXZpdHlGb3JjZTtcbiAgICBjb25zdCBmeSA9IGR5ICogZ3Jhdml0eUZvcmNlO1xuXG4gICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZS5pZF0ueCArPSBmeDtcbiAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlLmlkXS55ICs9IGZ5O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvcmNlQXRsYXMyQmFzZWRSZXB1bHNpb25Tb2x2ZXI7XG4iLCAiaW1wb3J0IENlbnRyYWxHcmF2aXR5U29sdmVyIGZyb20gXCIuL0NlbnRyYWxHcmF2aXR5U29sdmVyXCI7XG5cbi8qKlxuICogQGF1Z21lbnRzIENlbnRyYWxHcmF2aXR5U29sdmVyXG4gKi9cbmNsYXNzIEZvcmNlQXRsYXMyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlciBleHRlbmRzIENlbnRyYWxHcmF2aXR5U29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgc3VwZXIoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIGJhc2VkIG9uIHRoZSBkaXN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeFxuICAgKiBAcGFyYW0ge251bWJlcn0gZHlcbiAgICogQHBhcmFtIHtPYmplY3Q8Tm9kZS5pZCwgTm9kZT59IGZvcmNlc1xuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgZm9yY2VzLCBub2RlKSB7XG4gICAgaWYgKGRpc3RhbmNlID4gMCkge1xuICAgICAgY29uc3QgZGVncmVlID0gbm9kZS5lZGdlcy5sZW5ndGggKyAxO1xuICAgICAgY29uc3QgZ3Jhdml0eUZvcmNlID1cbiAgICAgICAgdGhpcy5vcHRpb25zLmNlbnRyYWxHcmF2aXR5ICogZGVncmVlICogbm9kZS5vcHRpb25zLm1hc3M7XG4gICAgICBmb3JjZXNbbm9kZS5pZF0ueCA9IGR4ICogZ3Jhdml0eUZvcmNlO1xuICAgICAgZm9yY2VzW25vZGUuaWRdLnkgPSBkeSAqIGdyYXZpdHlGb3JjZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9yY2VBdGxhczJCYXNlZENlbnRyYWxHcmF2aXR5U29sdmVyO1xuIiwgImltcG9ydCBCYXJuZXNIdXRTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0Jhcm5lc0h1dFNvbHZlclwiO1xuaW1wb3J0IFJlcHVsc2lvbiBmcm9tIFwiLi9jb21wb25lbnRzL3BoeXNpY3MvUmVwdWxzaW9uU29sdmVyXCI7XG5pbXBvcnQgSGllcmFyY2hpY2FsUmVwdWxzaW9uIGZyb20gXCIuL2NvbXBvbmVudHMvcGh5c2ljcy9IaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXJcIjtcbmltcG9ydCBTcHJpbmdTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL1NwcmluZ1NvbHZlclwiO1xuaW1wb3J0IEhpZXJhcmNoaWNhbFNwcmluZ1NvbHZlciBmcm9tIFwiLi9jb21wb25lbnRzL3BoeXNpY3MvSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyXCI7XG5pbXBvcnQgQ2VudHJhbEdyYXZpdHlTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0NlbnRyYWxHcmF2aXR5U29sdmVyXCI7XG5pbXBvcnQgRm9yY2VBdGxhczJCYXNlZFJlcHVsc2lvblNvbHZlciBmcm9tIFwiLi9jb21wb25lbnRzL3BoeXNpY3MvRkEyQmFzZWRSZXB1bHNpb25Tb2x2ZXJcIjtcbmltcG9ydCBGb3JjZUF0bGFzMkJhc2VkQ2VudHJhbEdyYXZpdHlTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0ZBMkJhc2VkQ2VudHJhbEdyYXZpdHlTb2x2ZXJcIjtcbmltcG9ydCB7XG4gIEhTVlRvSGV4LFxuICBtZXJnZU9wdGlvbnMsXG4gIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsXG59IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCB7IEVuZFBvaW50cyB9IGZyb20gXCIuL2NvbXBvbmVudHMvZWRnZXNcIjsgLy8gZm9yIGRlYnVnZ2luZyB3aXRoIF9kcmF3Rm9yY2VzKClcblxuLyoqXG4gKiBUaGUgcGh5c2ljcyBlbmdpbmVcbiAqL1xuY2xhc3MgUGh5c2ljc0VuZ2luZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waHlzaWNzQm9keSA9IHtcbiAgICAgIHBoeXNpY3NOb2RlSW5kaWNlczogW10sXG4gICAgICBwaHlzaWNzRWRnZUluZGljZXM6IFtdLFxuICAgICAgZm9yY2VzOiB7fSxcbiAgICAgIHZlbG9jaXRpZXM6IHt9LFxuICAgIH07XG5cbiAgICB0aGlzLnBoeXNpY3NFbmFibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNpbXVsYXRpb25JbnRlcnZhbCA9IDEwMDAgLyA2MDtcbiAgICB0aGlzLnJlcXVpcmVzVGltZW91dCA9IHRydWU7XG4gICAgdGhpcy5wcmV2aW91c1N0YXRlcyA9IHt9O1xuICAgIHRoaXMucmVmZXJlbmNlU3RhdGUgPSB7fTtcbiAgICB0aGlzLmZyZWV6ZUNhY2hlID0ge307XG4gICAgdGhpcy5yZW5kZXJUaW1lciA9IHVuZGVmaW5lZDtcblxuICAgIC8vIHBhcmFtZXRlcnMgZm9yIHRoZSBhZGFwdGl2ZSB0aW1lc3RlcFxuICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcCA9IGZhbHNlO1xuICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcEVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmFkYXB0aXZlQ291bnRlciA9IDA7XG4gICAgdGhpcy5hZGFwdGl2ZUludGVydmFsID0gMztcblxuICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuc3RhcnRlZFN0YWJpbGl6YXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zID0gMDtcbiAgICB0aGlzLnJlYWR5ID0gZmFsc2U7IC8vIHdpbGwgYmUgc2V0IHRvIHRydWUgaWYgdGhlIHN0YWJpbGl6ZVxuXG4gICAgLy8gZGVmYXVsdCBvcHRpb25zXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBiYXJuZXNIdXQ6IHtcbiAgICAgICAgdGhldGE6IDAuNSxcbiAgICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiAtMjAwMCxcbiAgICAgICAgY2VudHJhbEdyYXZpdHk6IDAuMyxcbiAgICAgICAgc3ByaW5nTGVuZ3RoOiA5NSxcbiAgICAgICAgc3ByaW5nQ29uc3RhbnQ6IDAuMDQsXG4gICAgICAgIGRhbXBpbmc6IDAuMDksXG4gICAgICAgIGF2b2lkT3ZlcmxhcDogMCxcbiAgICAgIH0sXG4gICAgICBmb3JjZUF0bGFzMkJhc2VkOiB7XG4gICAgICAgIHRoZXRhOiAwLjUsXG4gICAgICAgIGdyYXZpdGF0aW9uYWxDb25zdGFudDogLTUwLFxuICAgICAgICBjZW50cmFsR3Jhdml0eTogMC4wMSxcbiAgICAgICAgc3ByaW5nQ29uc3RhbnQ6IDAuMDgsXG4gICAgICAgIHNwcmluZ0xlbmd0aDogMTAwLFxuICAgICAgICBkYW1waW5nOiAwLjQsXG4gICAgICAgIGF2b2lkT3ZlcmxhcDogMCxcbiAgICAgIH0sXG4gICAgICByZXB1bHNpb246IHtcbiAgICAgICAgY2VudHJhbEdyYXZpdHk6IDAuMixcbiAgICAgICAgc3ByaW5nTGVuZ3RoOiAyMDAsXG4gICAgICAgIHNwcmluZ0NvbnN0YW50OiAwLjA1LFxuICAgICAgICBub2RlRGlzdGFuY2U6IDEwMCxcbiAgICAgICAgZGFtcGluZzogMC4wOSxcbiAgICAgICAgYXZvaWRPdmVybGFwOiAwLFxuICAgICAgfSxcbiAgICAgIGhpZXJhcmNoaWNhbFJlcHVsc2lvbjoge1xuICAgICAgICBjZW50cmFsR3Jhdml0eTogMC4wLFxuICAgICAgICBzcHJpbmdMZW5ndGg6IDEwMCxcbiAgICAgICAgc3ByaW5nQ29uc3RhbnQ6IDAuMDEsXG4gICAgICAgIG5vZGVEaXN0YW5jZTogMTIwLFxuICAgICAgICBkYW1waW5nOiAwLjA5LFxuICAgICAgfSxcbiAgICAgIG1heFZlbG9jaXR5OiA1MCxcbiAgICAgIG1pblZlbG9jaXR5OiAwLjc1LCAvLyBweC9zXG4gICAgICBzb2x2ZXI6IFwiYmFybmVzSHV0XCIsXG4gICAgICBzdGFiaWxpemF0aW9uOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGl0ZXJhdGlvbnM6IDEwMDAsIC8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbiB0byBzdGFiaWxpemVcbiAgICAgICAgdXBkYXRlSW50ZXJ2YWw6IDUwLFxuICAgICAgICBvbmx5RHluYW1pY0VkZ2VzOiBmYWxzZSxcbiAgICAgICAgZml0OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHRpbWVzdGVwOiAwLjUsXG4gICAgICBhZGFwdGl2ZVRpbWVzdGVwOiB0cnVlLFxuICAgICAgd2luZDogeyB4OiAwLCB5OiAwIH0sXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG4gICAgdGhpcy50aW1lc3RlcCA9IDAuNTtcbiAgICB0aGlzLmxheW91dEZhaWxlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImluaXRQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuaW5pdFBoeXNpY3MoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9sYXlvdXRGYWlsZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXRGYWlsZWQgPSB0cnVlO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwicmVzZXRQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc3RvcFNpbXVsYXRpb24oKTtcbiAgICAgIHRoaXMucmVhZHkgPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRpc2FibGVQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMucGh5c2ljc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3RvcFNpbXVsYXRpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInJlc3RvcmVQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgICAgaWYgKHRoaXMucmVhZHkgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5zdGFydFNpbXVsYXRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInN0YXJ0U2ltdWxhdGlvblwiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5yZWFkeSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnN0YXJ0U2ltdWxhdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwic3RvcFNpbXVsYXRpb25cIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKGZhbHNlKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9mZigpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFDaGFuZ2VkXCIsICgpID0+IHtcbiAgICAgIC8vIE5vZGVzIGFuZC9vciBlZGdlcyBoYXZlIGJlZW4gYWRkZWQgb3IgcmVtb3ZlZCwgdXBkYXRlIHNob3J0Y3V0IGxpc3RzLlxuICAgICAgdGhpcy51cGRhdGVQaHlzaWNzRGF0YSgpO1xuICAgIH0pO1xuXG4gICAgLy8gZGVidWc6IHNob3cgZm9yY2VzXG4gICAgLy8gdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJhZnRlckRyYXdpbmdcIiwgKGN0eCkgPT4ge3RoaXMuX2RyYXdGb3JjZXMoY3R4KTt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIHBoeXNpY3Mgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGh5c2ljc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5waHlzaWNzRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RhcnRTaW11bGF0aW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBoeXNpY3NFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgc2VsZWN0aXZlTm90RGVlcEV4dGVuZChbXCJzdGFiaWxpemF0aW9uXCJdLCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zLCBcInN0YWJpbGl6YXRpb25cIik7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMucGh5c2ljc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aW5kID0gdGhpcy5vcHRpb25zLndpbmQ7XG4gICAgICAgIGlmICh3aW5kKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kLnggIT09IFwibnVtYmVyXCIgfHwgTnVtYmVyLmlzTmFOKHdpbmQueCkpIHtcbiAgICAgICAgICAgIHdpbmQueCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZC55ICE9PSBcIm51bWJlclwiIHx8IE51bWJlci5pc05hTih3aW5kLnkpKSB7XG4gICAgICAgICAgICB3aW5kLnkgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCB0aGUgdGltZXN0ZXBcbiAgICAgICAgdGhpcy50aW1lc3RlcCA9IHRoaXMub3B0aW9ucy50aW1lc3RlcDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICAvKipcbiAgICogY29uZmlndXJlIHRoZSBlbmdpbmUuXG4gICAqL1xuICBpbml0KCkge1xuICAgIGxldCBvcHRpb25zO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc29sdmVyID09PSBcImZvcmNlQXRsYXMyQmFzZWRcIikge1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5mb3JjZUF0bGFzMkJhc2VkO1xuICAgICAgdGhpcy5ub2Rlc1NvbHZlciA9IG5ldyBGb3JjZUF0bGFzMkJhc2VkUmVwdWxzaW9uU29sdmVyKFxuICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgIHRoaXMucGh5c2ljc0JvZHksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgICB0aGlzLmVkZ2VzU29sdmVyID0gbmV3IFNwcmluZ1NvbHZlcih0aGlzLmJvZHksIHRoaXMucGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuICAgICAgdGhpcy5ncmF2aXR5U29sdmVyID0gbmV3IEZvcmNlQXRsYXMyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlcihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnNvbHZlciA9PT0gXCJyZXB1bHNpb25cIikge1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5yZXB1bHNpb247XG4gICAgICB0aGlzLm5vZGVzU29sdmVyID0gbmV3IFJlcHVsc2lvbih0aGlzLmJvZHksIHRoaXMucGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuICAgICAgdGhpcy5lZGdlc1NvbHZlciA9IG5ldyBTcHJpbmdTb2x2ZXIodGhpcy5ib2R5LCB0aGlzLnBoeXNpY3NCb2R5LCBvcHRpb25zKTtcbiAgICAgIHRoaXMuZ3Jhdml0eVNvbHZlciA9IG5ldyBDZW50cmFsR3Jhdml0eVNvbHZlcihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnNvbHZlciA9PT0gXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIikge1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWxSZXB1bHNpb247XG4gICAgICB0aGlzLm5vZGVzU29sdmVyID0gbmV3IEhpZXJhcmNoaWNhbFJlcHVsc2lvbihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgICAgdGhpcy5lZGdlc1NvbHZlciA9IG5ldyBIaWVyYXJjaGljYWxTcHJpbmdTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICAgIHRoaXMuZ3Jhdml0eVNvbHZlciA9IG5ldyBDZW50cmFsR3Jhdml0eVNvbHZlcihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBiYXJuZXNIdXRcbiAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuYmFybmVzSHV0O1xuICAgICAgdGhpcy5ub2Rlc1NvbHZlciA9IG5ldyBCYXJuZXNIdXRTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICAgIHRoaXMuZWRnZXNTb2x2ZXIgPSBuZXcgU3ByaW5nU29sdmVyKHRoaXMuYm9keSwgdGhpcy5waHlzaWNzQm9keSwgb3B0aW9ucyk7XG4gICAgICB0aGlzLmdyYXZpdHlTb2x2ZXIgPSBuZXcgQ2VudHJhbEdyYXZpdHlTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLm1vZGVsT3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogaW5pdGlhbGl6ZSB0aGUgZW5naW5lXG4gICAqL1xuICBpbml0UGh5c2ljcygpIHtcbiAgICBpZiAodGhpcy5waHlzaWNzRW5hYmxlZCA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5zdGFiaWxpemUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImZpdFwiLCB7fSwgdGhpcy5sYXlvdXRGYWlsZWQpOyAvLyBpZiB0aGUgbGF5b3V0IGZhaWxlZCwgd2UgdXNlIHRoZSBhcHByb3hpbWF0aW9uIGZvciB0aGUgem9vbVxuICAgICAgICB0aGlzLnN0YXJ0U2ltdWxhdGlvbigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJmaXRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBzaW11bGF0aW9uXG4gICAqL1xuICBzdGFydFNpbXVsYXRpb24oKSB7XG4gICAgaWYgKHRoaXMucGh5c2ljc0VuYWJsZWQgPT09IHRydWUgJiYgdGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuXG4gICAgICAvLyB3aGVuIHZpc2libGUsIGFkYXB0aXZpdHkgaXMgZGlzYWJsZWQuXG4gICAgICB0aGlzLmFkYXB0aXZlVGltZXN0ZXAgPSBmYWxzZTtcblxuICAgICAgLy8gdGhpcyBzZXRzIHRoZSB3aWR0aCBvZiBhbGwgbm9kZXMgaW5pdGlhbGx5IHdoaWNoIGNvdWxkIGJlIHJlcXVpcmVkIGZvciB0aGUgYXZvaWRPdmVybGFwXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3Jlc2l6ZU5vZGVzXCIpO1xuICAgICAgaWYgKHRoaXMudmlld0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52aWV3RnVuY3Rpb24gPSB0aGlzLnNpbXVsYXRpb25TdGVwLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiaW5pdFJlZHJhd1wiLCB0aGlzLnZpZXdGdW5jdGlvbik7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfc3RhcnRSZW5kZXJpbmdcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHRoZSBzaW11bGF0aW9uLCBmb3JjZSBzdGFiaWxpemF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtlbWl0PXRydWVdXG4gICAqL1xuICBzdG9wU2ltdWxhdGlvbihlbWl0ID0gdHJ1ZSkge1xuICAgIHRoaXMuc3RhYmlsaXplZCA9IHRydWU7XG4gICAgaWYgKGVtaXQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2VtaXRTdGFiaWxpemVkKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnZpZXdGdW5jdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIHRoaXMudmlld0Z1bmN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGVtaXQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9zdG9wUmVuZGVyaW5nXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmlld0Z1bmN0aW9uIGluc2VydHMgdGhpcyBzdGVwIGludG8gZWFjaCByZW5kZXIgbG9vcC4gSXQgY2FsbHMgdGhlIHBoeXNpY3MgdGljayBhbmQgaGFuZGxlcyB0aGUgY2xlYW51cCBhdCBzdGFiaWxpemVkLlxuICAgKlxuICAgKi9cbiAgc2ltdWxhdGlvblN0ZXAoKSB7XG4gICAgLy8gY2hlY2sgaWYgdGhlIHBoeXNpY3MgaGF2ZSBzZXR0bGVkXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLnBoeXNpY3NUaWNrKCk7XG4gICAgY29uc3QgcGh5c2ljc1RpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuXG4gICAgLy8gcnVuIGRvdWJsZSBzcGVlZCBpZiBpdCBpcyBhIGxpdHRsZSBncmFwaFxuICAgIGlmIChcbiAgICAgIChwaHlzaWNzVGltZSA8IDAuNCAqIHRoaXMuc2ltdWxhdGlvbkludGVydmFsIHx8XG4gICAgICAgIHRoaXMucnVuRG91YmxlU3BlZWQgPT09IHRydWUpICYmXG4gICAgICB0aGlzLnN0YWJpbGl6ZWQgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICB0aGlzLnBoeXNpY3NUaWNrKCk7XG5cbiAgICAgIC8vIHRoaXMgbWFrZXMgc3VyZSB0aGVyZSBpcyBubyBqaXR0ZXIuIFRoZSBkZWNpc2lvbiBpcyB0YWtlbiBvbmNlIHRvIHJ1biBpdCBhdCBkb3VibGUgc3BlZWQuXG4gICAgICB0aGlzLnJ1bkRvdWJsZVNwZWVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFiaWxpemVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRyaWdnZXIgdGhlIHN0YWJpbGl6ZWQgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYW1vdW50T2ZJdGVyYXRpb25zPXRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnNdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZW1pdFN0YWJpbGl6ZWQoYW1vdW50T2ZJdGVyYXRpb25zID0gdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucykge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMgPiAxIHx8XG4gICAgICB0aGlzLnN0YXJ0ZWRTdGFiaWxpemF0aW9uID09PSB0cnVlXG4gICAgKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YWJpbGl6ZWRcIiwge1xuICAgICAgICAgIGl0ZXJhdGlvbnM6IGFtb3VudE9mSXRlcmF0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3RhcnRlZFN0YWJpbGl6YXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucyA9IDA7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgZm9yIG9uZSBwaHlzaWNzIGl0ZXJhdGlvbiBhbmQgbW92ZSB0aGUgbm9kZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwaHlzaWNzU3RlcCgpIHtcbiAgICB0aGlzLmdyYXZpdHlTb2x2ZXIuc29sdmUoKTtcbiAgICB0aGlzLm5vZGVzU29sdmVyLnNvbHZlKCk7XG4gICAgdGhpcy5lZGdlc1NvbHZlci5zb2x2ZSgpO1xuICAgIHRoaXMubW92ZU5vZGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBkeW5hbWljIGFkanVzdG1lbnRzIHRvIHRoZSB0aW1lc3RlcCwgYmFzZWQgb24gY3VycmVudCBzdGF0ZS5cbiAgICpcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBwaHlzaWNzVGljaygpLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRqdXN0VGltZVN0ZXAoKSB7XG4gICAgY29uc3QgZmFjdG9yID0gMS4yOyAvLyBGYWN0b3IgZm9yIGluY3JlYXNpbmcgdGhlIHRpbWVzdGVwIG9uIHN1Y2Nlc3MuXG5cbiAgICAvLyB3ZSBjb21wYXJlIHRoZSB0d28gc3RlcHMuIGlmIGl0IGlzIGFjY2VwdGFibGUgd2UgZG91YmxlIHRoZSBzdGVwLlxuICAgIGlmICh0aGlzLl9ldmFsdWF0ZVN0ZXBRdWFsaXR5KCkgPT09IHRydWUpIHtcbiAgICAgIHRoaXMudGltZXN0ZXAgPSBmYWN0b3IgKiB0aGlzLnRpbWVzdGVwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBub3QsIHdlIGRlY3JlYXNlIHRoZSBzdGVwIHRvIGEgbWluaW11bSBvZiB0aGUgb3B0aW9ucyB0aW1lc3RlcC5cbiAgICAgIC8vIGlmIHRoZSBkZWNyZWFzZWQgdGltZXN0ZXAgaXMgc21hbGxlciB0aGFuIHRoZSBvcHRpb25zIHN0ZXAsIHdlIGRvIG5vdCByZXNldCB0aGUgY291bnRlclxuICAgICAgLy8gd2UgYXNzdW1lIHRoYXQgdGhlIG9wdGlvbnMgdGltZXN0ZXAgaXMgc3RhYmxlIGVub3VnaC5cbiAgICAgIGlmICh0aGlzLnRpbWVzdGVwIC8gZmFjdG9yIDwgdGhpcy5vcHRpb25zLnRpbWVzdGVwKSB7XG4gICAgICAgIHRoaXMudGltZXN0ZXAgPSB0aGlzLm9wdGlvbnMudGltZXN0ZXA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiB0aGUgdGltZXN0ZXAgd2FzIGxhcmdlciB0aGFuIDIgdGltZXMgdGhlIG9wdGlvbiBvbmUgd2UgY2hlY2sgdGhlIGFkYXB0aXZpdHkgYWdhaW4gdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgbGFyZ2UgaW5zdGFiaWxpdGllcyBkbyBub3QgZm9ybS5cbiAgICAgICAgdGhpcy5hZGFwdGl2ZUNvdW50ZXIgPSAtMTsgLy8gY2hlY2sgYWdhaW4gbmV4dCBpdGVyYXRpb25cbiAgICAgICAgdGhpcy50aW1lc3RlcCA9IE1hdGgubWF4KHRoaXMub3B0aW9ucy50aW1lc3RlcCwgdGhpcy50aW1lc3RlcCAvIGZhY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgc2luZ2xlIHNpbXVsYXRpb24gc3RlcCAob3IgJ3RpY2snKSBpbiB0aGUgcGh5c2ljcyBzaW11bGF0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwaHlzaWNzVGljaygpIHtcbiAgICB0aGlzLl9zdGFydFN0YWJpbGl6aW5nKCk7IC8vIHRoaXMgZW5zdXJlcyB0aGF0IHRoZXJlIGlzIG5vIHN0YXJ0IGV2ZW50IHdoZW4gdGhlIG5ldHdvcmsgaXMgYWxyZWFkeSBzdGFibGUuXG4gICAgaWYgKHRoaXMuc3RhYmlsaXplZCA9PT0gdHJ1ZSkgcmV0dXJuO1xuXG4gICAgLy8gYWRhcHRpdml0eSBtZWFucyB0aGUgdGltZXN0ZXAgYWRhcHRzIHRvIHRoZSBzaXR1YXRpb24sIG9ubHkgYXBwbGljYWJsZSBmb3Igc3RhYmlsaXphdGlvblxuICAgIGlmIChcbiAgICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcCA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5hZGFwdGl2ZVRpbWVzdGVwRW5hYmxlZCA9PT0gdHJ1ZVxuICAgICkge1xuICAgICAgLy8gdGltZXN0ZXAgcmVtYWlucyBzdGFibGUgZm9yIFwiaW50ZXJ2YWxcIiBpdGVyYXRpb25zLlxuICAgICAgY29uc3QgZG9BZGFwdGl2ZSA9IHRoaXMuYWRhcHRpdmVDb3VudGVyICUgdGhpcy5hZGFwdGl2ZUludGVydmFsID09PSAwO1xuXG4gICAgICBpZiAoZG9BZGFwdGl2ZSkge1xuICAgICAgICAvLyBmaXJzdCB0aGUgYmlnIHN0ZXAgYW5kIHJldmVydC5cbiAgICAgICAgdGhpcy50aW1lc3RlcCA9IDIgKiB0aGlzLnRpbWVzdGVwO1xuICAgICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7XG4gICAgICAgIHRoaXMucmV2ZXJ0KCk7IC8vIHNhdmVzIHRoZSByZWZlcmVuY2Ugc3RhdGVcblxuICAgICAgICAvLyBub3cgdGhlIG5vcm1hbCBzdGVwLiBTaW5jZSB0aGlzIGlzIHRoZSBsYXN0IHN0ZXAsIGl0IGlzIHRoZSBtb3JlIHN0YWJsZSBvbmUgYW5kIHdlIHdpbGwgdGFrZSB0aGlzLlxuICAgICAgICB0aGlzLnRpbWVzdGVwID0gMC41ICogdGhpcy50aW1lc3RlcDtcblxuICAgICAgICAvLyBzaW5jZSBpdCdzIGhhbGYgdGhlIHN0ZXAsIHdlIGRvIGl0IHR3aWNlLlxuICAgICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7XG4gICAgICAgIHRoaXMucGh5c2ljc1N0ZXAoKTtcblxuICAgICAgICB0aGlzLmFkanVzdFRpbWVTdGVwKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7IC8vIG5vcm1hbCBzdGVwLCBrZWVwaW5nIHRpbWVzdGVwIGNvbnN0YW50XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWRhcHRpdmVDb3VudGVyICs9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNhc2UgZm9yIHRoZSBzdGF0aWMgdGltZXN0ZXAsIHdlIHJlc2V0IGl0IHRvIHRoZSBvbmUgaW4gb3B0aW9ucyBhbmQgdGFrZSBhIG5vcm1hbCBzdGVwLlxuICAgICAgdGhpcy50aW1lc3RlcCA9IHRoaXMub3B0aW9ucy50aW1lc3RlcDtcbiAgICAgIHRoaXMucGh5c2ljc1N0ZXAoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFiaWxpemVkID09PSB0cnVlKSB0aGlzLnJldmVydCgpO1xuICAgIHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMrKztcbiAgfVxuXG4gIC8qKlxuICAgKiBOb2RlcyBhbmQgZWRnZXMgY2FuIGhhdmUgdGhlIHBoeXNpY3MgdG9nZ2xlcyBvbiBvciBvZmYuIEEgY29sbGVjdGlvbiBvZiBpbmRpY2VzIGlzIGNyZWF0ZWQgaGVyZSBzbyB3ZSBjYW4gc2tpcCB0aGUgY2hlY2sgYWxsIHRoZSB0aW1lLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlUGh5c2ljc0RhdGEoKSB7XG4gICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXMgPSB7fTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlcyA9IFtdO1xuICAgIHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc0VkZ2VJbmRpY2VzID0gW107XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG5cbiAgICAvLyBnZXQgbm9kZSBpbmRpY2VzIGZvciBwaHlzaWNzXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gbm9kZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgaWYgKG5vZGVzW25vZGVJZF0ub3B0aW9ucy5waHlzaWNzID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXMucHVzaChub2Rlc1tub2RlSWRdLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGdldCBlZGdlIGluZGljZXMgZm9yIHBoeXNpY3NcbiAgICBmb3IgKGNvbnN0IGVkZ2VJZCBpbiBlZGdlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZGdlcywgZWRnZUlkKSkge1xuICAgICAgICBpZiAoZWRnZXNbZWRnZUlkXS5vcHRpb25zLnBoeXNpY3MgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NFZGdlSW5kaWNlcy5wdXNoKGVkZ2VzW2VkZ2VJZF0uaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSB2ZWxvY2l0eSBhbmQgdGhlIGZvcmNlcyB2ZWN0b3JcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlc1tpXTtcbiAgICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGVJZF0gPSB7IHg6IDAsIHk6IDAgfTtcblxuICAgICAgLy8gZm9yY2VzIGNhbiBiZSByZXNldCBiZWNhdXNlIHRoZXkgYXJlIHJlY2FsY3VsYXRlZC4gVmVsb2NpdGllcyBoYXZlIHRvIHBlcnNpc3QuXG4gICAgICBpZiAodGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXNbbm9kZUlkXSA9IHsgeDogMCwgeTogMCB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNsZWFuIGRlbGV0ZWQgbm9kZXMgZnJvbSB0aGUgdmVsb2NpdHkgdmVjdG9yXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzKSB7XG4gICAgICBpZiAobm9kZXNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXNbbm9kZUlkXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV2ZXJ0IHRoZSBzaW11bGF0aW9uIG9uZSBzdGVwLiBUaGlzIGlzIGRvbmUgc28gYWZ0ZXIgc3RhYmlsaXphdGlvbiwgZXZlcnkgbmV3IHN0YXJ0IG9mIHRoZSBzaW11bGF0aW9uIHdpbGwgYWxzbyBzYXkgc3RhYmlsaXplZC5cbiAgICovXG4gIHJldmVydCgpIHtcbiAgICBjb25zdCBub2RlSWRzID0gT2JqZWN0LmtleXModGhpcy5wcmV2aW91c1N0YXRlcyk7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgdmVsb2NpdGllcyA9IHRoaXMucGh5c2ljc0JvZHkudmVsb2NpdGllcztcbiAgICB0aGlzLnJlZmVyZW5jZVN0YXRlID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IG5vZGVJZHNbaV07XG4gICAgICBpZiAobm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChub2Rlc1tub2RlSWRdLm9wdGlvbnMucGh5c2ljcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMucmVmZXJlbmNlU3RhdGVbbm9kZUlkXSA9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uczogeyB4OiBub2Rlc1tub2RlSWRdLngsIHk6IG5vZGVzW25vZGVJZF0ueSB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgdmVsb2NpdGllc1tub2RlSWRdLnggPSB0aGlzLnByZXZpb3VzU3RhdGVzW25vZGVJZF0udng7XG4gICAgICAgICAgdmVsb2NpdGllc1tub2RlSWRdLnkgPSB0aGlzLnByZXZpb3VzU3RhdGVzW25vZGVJZF0udnk7XG4gICAgICAgICAgbm9kZXNbbm9kZUlkXS54ID0gdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdLng7XG4gICAgICAgICAgbm9kZXNbbm9kZUlkXS55ID0gdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdLnk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnByZXZpb3VzU3RhdGVzW25vZGVJZF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgY29tcGFyZXMgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byB0aGUgY3VycmVudCBzdGF0ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmFsdWF0ZVN0ZXBRdWFsaXR5KCkge1xuICAgIGxldCBkeCwgZHksIGRwb3M7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2VTdGF0ZTtcbiAgICBjb25zdCBwb3NUaHJlc2hvbGQgPSAwLjM7XG5cbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0aGlzLnJlZmVyZW5jZVN0YXRlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnJlZmVyZW5jZVN0YXRlLCBub2RlSWQpICYmXG4gICAgICAgIG5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIGR4ID0gbm9kZXNbbm9kZUlkXS54IC0gcmVmZXJlbmNlW25vZGVJZF0ucG9zaXRpb25zLng7XG4gICAgICAgIGR5ID0gbm9kZXNbbm9kZUlkXS55IC0gcmVmZXJlbmNlW25vZGVJZF0ucG9zaXRpb25zLnk7XG5cbiAgICAgICAgZHBvcyA9IE1hdGguc3FydChNYXRoLnBvdyhkeCwgMikgKyBNYXRoLnBvdyhkeSwgMikpO1xuXG4gICAgICAgIGlmIChkcG9zID4gcG9zVGhyZXNob2xkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIG5vZGVzIG9uZSB0aW1lc3RlcCBhbmQgY2hlY2sgaWYgdGhleSBhcmUgc3RhYmlsaXplZFxuICAgKi9cbiAgbW92ZU5vZGVzKCkge1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgbGV0IG1heE5vZGVWZWxvY2l0eSA9IDA7XG4gICAgbGV0IGF2ZXJhZ2VOb2RlVmVsb2NpdHkgPSAwO1xuXG4gICAgLy8gdGhlIHZlbG9jaXR5IHRocmVzaG9sZCAoZW5lcmd5IGluIHRoZSBzeXN0ZW0pIGZvciB0aGUgYWRhcHRpdml0eSB0b2dnbGVcbiAgICBjb25zdCB2ZWxvY2l0eUFkYXB0aXZlVGhyZXNob2xkID0gNTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IG5vZGVJbmRpY2VzW2ldO1xuICAgICAgY29uc3Qgbm9kZVZlbG9jaXR5ID0gdGhpcy5fcGVyZm9ybVN0ZXAobm9kZUlkKTtcbiAgICAgIC8vIHN0YWJpbGl6ZWQgaXMgdHJ1ZSBpZiBzdGFiaWxpemVkIGlzIHRydWUgYW5kIHZlbG9jaXR5IGlzIHNtYWxsZXIgdGhhbiB2bWluIC0tPiBhbGwgbm9kZXMgbXVzdCBiZSBzdGFiaWxpemVkXG4gICAgICBtYXhOb2RlVmVsb2NpdHkgPSBNYXRoLm1heChtYXhOb2RlVmVsb2NpdHksIG5vZGVWZWxvY2l0eSk7XG4gICAgICBhdmVyYWdlTm9kZVZlbG9jaXR5ICs9IG5vZGVWZWxvY2l0eTtcbiAgICB9XG5cbiAgICAvLyBldmFsdWF0aW5nIHRoZSBzdGFiaWxpemVkIGFuZCBhZGFwdGl2ZVRpbWVzdGVwRW5hYmxlZCBjb25kaXRpb25zXG4gICAgdGhpcy5hZGFwdGl2ZVRpbWVzdGVwRW5hYmxlZCA9XG4gICAgICBhdmVyYWdlTm9kZVZlbG9jaXR5IC8gbm9kZUluZGljZXMubGVuZ3RoIDwgdmVsb2NpdHlBZGFwdGl2ZVRocmVzaG9sZDtcbiAgICB0aGlzLnN0YWJpbGl6ZWQgPSBtYXhOb2RlVmVsb2NpdHkgPCB0aGlzLm9wdGlvbnMubWluVmVsb2NpdHk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIG5ldyB2ZWxvY2l0eSBmb3IgYSBjb29yZGluYXRlIGRpcmVjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdiAgdmVsb2NpdHkgZm9yIGN1cnJlbnQgY29vcmRpbmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gZiAgcmVndWxhciBmb3JjZSBmb3IgY3VycmVudCBjb29yZGluYXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtICBtYXNzIG9mIGN1cnJlbnQgbm9kZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBuZXcgdmVsb2NpdHkgZm9yIGN1cnJlbnQgY29vcmRpbmF0ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2FsY3VsYXRlQ29tcG9uZW50VmVsb2NpdHkodiwgZiwgbSkge1xuICAgIGNvbnN0IGRmID0gdGhpcy5tb2RlbE9wdGlvbnMuZGFtcGluZyAqIHY7IC8vIGRhbXBpbmcgZm9yY2VcbiAgICBjb25zdCBhID0gKGYgLSBkZikgLyBtOyAvLyBhY2NlbGVyYXRpb25cblxuICAgIHYgKz0gYSAqIHRoaXMudGltZXN0ZXA7XG5cbiAgICAvLyBQdXQgYSBsaW1pdCBvbiB0aGUgdmVsb2NpdGllcyBpZiBpdCBpcyByZWFsbHkgaGlnaFxuICAgIGNvbnN0IG1heFYgPSB0aGlzLm9wdGlvbnMubWF4VmVsb2NpdHkgfHwgMWU5O1xuICAgIGlmIChNYXRoLmFicyh2KSA+IG1heFYpIHtcbiAgICAgIHYgPSB2ID4gMCA/IG1heFYgOiAtbWF4VjtcbiAgICB9XG5cbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBhY3R1YWwgc3RlcFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgbmV3IHZlbG9jaXR5IG9mIGdpdmVuIG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtU3RlcChub2RlSWQpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgY29uc3QgZm9yY2UgPSB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlSWRdO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy53aW5kKSB7XG4gICAgICBmb3JjZS54ICs9IHRoaXMub3B0aW9ucy53aW5kLng7XG4gICAgICBmb3JjZS55ICs9IHRoaXMub3B0aW9ucy53aW5kLnk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVsb2NpdHkgPSB0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXNbbm9kZUlkXTtcblxuICAgIC8vIHN0b3JlIHRoZSBzdGF0ZSBzbyB3ZSBjYW4gcmV2ZXJ0XG4gICAgdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdID0ge1xuICAgICAgeDogbm9kZS54LFxuICAgICAgeTogbm9kZS55LFxuICAgICAgdng6IHZlbG9jaXR5LngsXG4gICAgICB2eTogdmVsb2NpdHkueSxcbiAgICB9O1xuXG4gICAgaWYgKG5vZGUub3B0aW9ucy5maXhlZC54ID09PSBmYWxzZSkge1xuICAgICAgdmVsb2NpdHkueCA9IHRoaXMuY2FsY3VsYXRlQ29tcG9uZW50VmVsb2NpdHkoXG4gICAgICAgIHZlbG9jaXR5LngsXG4gICAgICAgIGZvcmNlLngsXG4gICAgICAgIG5vZGUub3B0aW9ucy5tYXNzXG4gICAgICApO1xuICAgICAgbm9kZS54ICs9IHZlbG9jaXR5LnggKiB0aGlzLnRpbWVzdGVwO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JjZS54ID0gMDtcbiAgICAgIHZlbG9jaXR5LnggPSAwO1xuICAgIH1cblxuICAgIGlmIChub2RlLm9wdGlvbnMuZml4ZWQueSA9PT0gZmFsc2UpIHtcbiAgICAgIHZlbG9jaXR5LnkgPSB0aGlzLmNhbGN1bGF0ZUNvbXBvbmVudFZlbG9jaXR5KFxuICAgICAgICB2ZWxvY2l0eS55LFxuICAgICAgICBmb3JjZS55LFxuICAgICAgICBub2RlLm9wdGlvbnMubWFzc1xuICAgICAgKTtcbiAgICAgIG5vZGUueSArPSB2ZWxvY2l0eS55ICogdGhpcy50aW1lc3RlcDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yY2UueSA9IDA7XG4gICAgICB2ZWxvY2l0eS55ID0gMDtcbiAgICB9XG5cbiAgICBjb25zdCB0b3RhbFZlbG9jaXR5ID0gTWF0aC5zcXJ0KFxuICAgICAgTWF0aC5wb3codmVsb2NpdHkueCwgMikgKyBNYXRoLnBvdyh2ZWxvY2l0eS55LCAyKVxuICAgICk7XG4gICAgcmV0dXJuIHRvdGFsVmVsb2NpdHk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBpbml0aWFsaXppbmcgYW5kIHN0YWJpbGl6aW5nLCB3ZSBjYW4gZnJlZXplIG5vZGVzIHdpdGggYSBwcmVkZWZpbmVkIHBvc2l0aW9uLlxuICAgKiBUaGlzIGdyZWF0bHkgc3BlZWRzIHVwIHN0YWJpbGl6YXRpb24gYmVjYXVzZSBvbmx5IHRoZSBzdXBwb3J0bm9kZXMgZm9yIHRoZSBzbW9vdGhDdXJ2ZXMgaGF2ZSB0byBzZXR0bGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZnJlZXplTm9kZXMoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgZm9yIChjb25zdCBpZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlcywgaWQpKSB7XG4gICAgICAgIGlmIChub2Rlc1tpZF0ueCAmJiBub2Rlc1tpZF0ueSkge1xuICAgICAgICAgIGNvbnN0IGZpeGVkID0gbm9kZXNbaWRdLm9wdGlvbnMuZml4ZWQ7XG4gICAgICAgICAgdGhpcy5mcmVlemVDYWNoZVtpZF0gPSB7IHg6IGZpeGVkLngsIHk6IGZpeGVkLnkgfTtcbiAgICAgICAgICBmaXhlZC54ID0gdHJ1ZTtcbiAgICAgICAgICBmaXhlZC55ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbmZyZWV6ZXMgdGhlIG5vZGVzIHRoYXQgaGF2ZSBiZWVuIGZyb3plbiBieSBfZnJlZXplRGVmaW5lZE5vZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc3RvcmVGcm96ZW5Ob2RlcygpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBmb3IgKGNvbnN0IGlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBpZCkpIHtcbiAgICAgICAgaWYgKHRoaXMuZnJlZXplQ2FjaGVbaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub2Rlc1tpZF0ub3B0aW9ucy5maXhlZC54ID0gdGhpcy5mcmVlemVDYWNoZVtpZF0ueDtcbiAgICAgICAgICBub2Rlc1tpZF0ub3B0aW9ucy5maXhlZC55ID0gdGhpcy5mcmVlemVDYWNoZVtpZF0ueTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmZyZWV6ZUNhY2hlID0ge307XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIHN0YWJsZSBwb3NpdGlvbiBmb3IgYWxsIG5vZGVzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaXRlcmF0aW9ucz10aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi5pdGVyYXRpb25zXVxuICAgKi9cbiAgc3RhYmlsaXplKGl0ZXJhdGlvbnMgPSB0aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi5pdGVyYXRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRpb25zICE9PSBcIm51bWJlclwiKSB7XG4gICAgICBpdGVyYXRpb25zID0gdGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24uaXRlcmF0aW9ucztcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiVGhlIHN0YWJpbGl6ZSBtZXRob2QgbmVlZHMgYSBudW1lcmljIGFtb3VudCBvZiBpdGVyYXRpb25zLiBTd2l0Y2hpbmcgdG8gZGVmYXVsdDogXCIsXG4gICAgICAgIGl0ZXJhdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZW5hYmxlIGFkYXB0aXZlIHRpbWVzdGVwc1xuICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcCA9IHRydWUgJiYgdGhpcy5vcHRpb25zLmFkYXB0aXZlVGltZXN0ZXA7XG5cbiAgICAvLyB0aGlzIHNldHMgdGhlIHdpZHRoIG9mIGFsbCBub2RlcyBpbml0aWFsbHkgd2hpY2ggY291bGQgYmUgcmVxdWlyZWQgZm9yIHRoZSBhdm9pZE92ZXJsYXBcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3Jlc2l6ZU5vZGVzXCIpO1xuXG4gICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpOyAvLyBzdG9wIHRoZSByZW5kZXIgbG9vcFxuICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuXG4gICAgLy8gYmxvY2sgcmVkcmF3IHJlcXVlc3RzXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9ibG9ja1JlZHJhd1wiKTtcbiAgICB0aGlzLnRhcmdldEl0ZXJhdGlvbnMgPSBpdGVyYXRpb25zO1xuXG4gICAgLy8gc3RhcnQgdGhlIHN0YWJpbGl6YXRpb25cbiAgICBpZiAodGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24ub25seUR5bmFtaWNFZGdlcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5fZnJlZXplTm9kZXMoKTtcbiAgICB9XG4gICAgdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucyA9IDA7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3N0YWJpbGl6YXRpb25CYXRjaCgpLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBub3QgYWxyZWFkeSBzdGFiaWxpemluZywgc3RhcnQgaXQgYW5kIGVtaXQgYSBzdGFydCBldmVudC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgc3RhYmlsaXphdGlvbiBzdGFydGVkIHdpdGggdGhpcyBjYWxsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RhcnRTdGFiaWxpemluZygpIHtcbiAgICBpZiAodGhpcy5zdGFydGVkU3RhYmlsaXphdGlvbiA9PT0gdHJ1ZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U3RhYmlsaXppbmdcIik7XG4gICAgdGhpcy5zdGFydGVkU3RhYmlsaXphdGlvbiA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogT25lIGJhdGNoIG9mIHN0YWJpbGl6YXRpb25cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zdGFiaWxpemF0aW9uQmF0Y2goKSB7XG4gICAgY29uc3QgcnVubmluZyA9ICgpID0+XG4gICAgICB0aGlzLnN0YWJpbGl6ZWQgPT09IGZhbHNlICYmXG4gICAgICB0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zIDwgdGhpcy50YXJnZXRJdGVyYXRpb25zO1xuXG4gICAgY29uc3Qgc2VuZFByb2dyZXNzID0gKCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YWJpbGl6YXRpb25Qcm9ncmVzc1wiLCB7XG4gICAgICAgIGl0ZXJhdGlvbnM6IHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMsXG4gICAgICAgIHRvdGFsOiB0aGlzLnRhcmdldEl0ZXJhdGlvbnMsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3N0YXJ0U3RhYmlsaXppbmcoKSkge1xuICAgICAgc2VuZFByb2dyZXNzKCk7IC8vIEVuc3VyZSB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBzdGFydCBldmVudC5cbiAgICB9XG5cbiAgICBsZXQgY291bnQgPSAwO1xuICAgIHdoaWxlIChydW5uaW5nKCkgJiYgY291bnQgPCB0aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi51cGRhdGVJbnRlcnZhbCkge1xuICAgICAgdGhpcy5waHlzaWNzVGljaygpO1xuICAgICAgY291bnQrKztcbiAgICB9XG5cbiAgICBzZW5kUHJvZ3Jlc3MoKTtcblxuICAgIGlmIChydW5uaW5nKCkpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5fc3RhYmlsaXphdGlvbkJhdGNoLmJpbmQodGhpcyksIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9maW5hbGl6ZVN0YWJpbGl6YXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JhcCB1cCB0aGUgc3RhYmlsaXphdGlvbiwgZml0IGFuZCBlbWl0IHRoZSBldmVudHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmluYWxpemVTdGFiaWxpemF0aW9uKCkge1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfYWxsb3dSZWRyYXdcIik7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLmZpdCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImZpdFwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24ub25seUR5bmFtaWNFZGdlcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5fcmVzdG9yZUZyb3plbk5vZGVzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YWJpbGl6YXRpb25JdGVyYXRpb25zRG9uZVwiKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG5cbiAgICBpZiAodGhpcy5zdGFiaWxpemVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLl9lbWl0U3RhYmlsaXplZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0U2ltdWxhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICB9XG5cbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFQlVHR0lORyBCRUxPVyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cblxuICAvKipcbiAgICogRGVidWcgZnVuY3Rpb24gdGhhdCBkaXNwbGF5IGFycm93cyBmb3IgdGhlIGZvcmNlcyBjdXJyZW50bHkgYWN0aXZlIGluIHRoZSBuZXR3b3JrLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIGRlYnVnZ2luZyBvbmx5LlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd0ZvcmNlcyhjdHgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzW2ldO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpbmRleF07XG4gICAgICBjb25zdCBmb3JjZSA9IHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW2luZGV4XTtcbiAgICAgIGNvbnN0IGZhY3RvciA9IDIwO1xuICAgICAgY29uc3QgY29sb3JGYWN0b3IgPSAwLjAzO1xuICAgICAgY29uc3QgZm9yY2VTaXplID0gTWF0aC5zcXJ0KE1hdGgucG93KGZvcmNlLngsIDIpICsgTWF0aC5wb3coZm9yY2UueCwgMikpO1xuXG4gICAgICBjb25zdCBzaXplID0gTWF0aC5taW4oTWF0aC5tYXgoNSwgZm9yY2VTaXplKSwgMTUpO1xuICAgICAgY29uc3QgYXJyb3dTaXplID0gMyAqIHNpemU7XG5cbiAgICAgIGNvbnN0IGNvbG9yID0gSFNWVG9IZXgoXG4gICAgICAgICgxODAgLSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBjb2xvckZhY3RvciAqIGZvcmNlU2l6ZSkpICogMTgwKSAvIDM2MCxcbiAgICAgICAgMSxcbiAgICAgICAgMVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcG9pbnQgPSB7XG4gICAgICAgIHg6IG5vZGUueCArIGZhY3RvciAqIGZvcmNlLngsXG4gICAgICAgIHk6IG5vZGUueSArIGZhY3RvciAqIGZvcmNlLnksXG4gICAgICB9O1xuXG4gICAgICBjdHgubGluZVdpZHRoID0gc2l6ZTtcbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY3R4Lm1vdmVUbyhub2RlLngsIG5vZGUueSk7XG4gICAgICBjdHgubGluZVRvKHBvaW50LngsIHBvaW50LnkpO1xuICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIoZm9yY2UueSwgZm9yY2UueCk7XG4gICAgICBjdHguZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICBFbmRQb2ludHMuZHJhdyhjdHgsIHtcbiAgICAgICAgdHlwZTogXCJhcnJvd1wiLFxuICAgICAgICBwb2ludDogcG9pbnQsXG4gICAgICAgIGFuZ2xlOiBhbmdsZSxcbiAgICAgICAgbGVuZ3RoOiBhcnJvd1NpemUsXG4gICAgICB9KTtcbiAgICAgIGN0eC5maWxsKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBoeXNpY3NFbmdpbmU7XG4iLCAiLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG5sZXQgZ2V0UmFuZG9tVmFsdWVzO1xuY29uc3Qgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cbiAgICBnZXRSYW5kb21WYWx1ZXMgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pO1xuXG4gICAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbn0iLCAiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5cbmNvbnN0IGJ5dGVUb0hleCA9IFtdO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICByZXR1cm4gYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV07XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgY29uc3QgdXVpZCA9IHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7IiwgImNvbnN0IHJhbmRvbVVVSUQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCAmJiBjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byk7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHJhbmRvbVVVSURcbn07IiwgImltcG9ydCBuYXRpdmUgZnJvbSAnLi9uYXRpdmUuanMnO1xuaW1wb3J0IHJuZyBmcm9tICcuL3JuZy5qcyc7XG5pbXBvcnQgeyB1bnNhZmVTdHJpbmdpZnkgfSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChuYXRpdmUucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5hdGl2ZS5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3Qgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7IC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcblxuICBybmRzWzZdID0gcm5kc1s2XSAmIDB4MGYgfCAweDQwO1xuICBybmRzWzhdID0gcm5kc1s4XSAmIDB4M2YgfCAweDgwOyAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcblxuICBpZiAoYnVmKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIHJldHVybiB1bnNhZmVTdHJpbmdpZnkocm5kcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHY0OyIsICJpbXBvcnQgeyBkZWVwRXh0ZW5kIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIFV0aWxpdHkgQ2xhc3NcbiAqL1xuY2xhc3MgTmV0d29ya1V0aWwge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBjZW50ZXIgcG9zaXRpb24gb2YgdGhlIG5ldHdvcmsgY29uc2lkZXJpbmcgdGhlIGJvdW5kaW5nIGJveGVzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBhbGxOb2Rlc1xuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gW3NwZWNpZmljTm9kZXM9W11dXG4gICAqIEByZXR1cm5zIHt7bWluWDogbnVtYmVyLCBtYXhYOiBudW1iZXIsIG1pblk6IG51bWJlciwgbWF4WTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGdldFJhbmdlKGFsbE5vZGVzLCBzcGVjaWZpY05vZGVzID0gW10pIHtcbiAgICBsZXQgbWluWSA9IDFlOSxcbiAgICAgIG1heFkgPSAtMWU5LFxuICAgICAgbWluWCA9IDFlOSxcbiAgICAgIG1heFggPSAtMWU5LFxuICAgICAgbm9kZTtcbiAgICBpZiAoc3BlY2lmaWNOb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwZWNpZmljTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZSA9IGFsbE5vZGVzW3NwZWNpZmljTm9kZXNbaV1dO1xuICAgICAgICBpZiAobWluWCA+IG5vZGUuc2hhcGUuYm91bmRpbmdCb3gubGVmdCkge1xuICAgICAgICAgIG1pblggPSBub2RlLnNoYXBlLmJvdW5kaW5nQm94LmxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heFggPCBub2RlLnNoYXBlLmJvdW5kaW5nQm94LnJpZ2h0KSB7XG4gICAgICAgICAgbWF4WCA9IG5vZGUuc2hhcGUuYm91bmRpbmdCb3gucmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pblkgPiBub2RlLnNoYXBlLmJvdW5kaW5nQm94LnRvcCkge1xuICAgICAgICAgIG1pblkgPSBub2RlLnNoYXBlLmJvdW5kaW5nQm94LnRvcDtcbiAgICAgICAgfSAvLyB0b3AgaXMgbmVnYXRpdmUsIGJvdHRvbSBpcyBwb3NpdGl2ZVxuICAgICAgICBpZiAobWF4WSA8IG5vZGUuc2hhcGUuYm91bmRpbmdCb3guYm90dG9tKSB7XG4gICAgICAgICAgbWF4WSA9IG5vZGUuc2hhcGUuYm91bmRpbmdCb3guYm90dG9tO1xuICAgICAgICB9IC8vIHRvcCBpcyBuZWdhdGl2ZSwgYm90dG9tIGlzIHBvc2l0aXZlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1pblggPT09IDFlOSAmJiBtYXhYID09PSAtMWU5ICYmIG1pblkgPT09IDFlOSAmJiBtYXhZID09PSAtMWU5KSB7XG4gICAgICAobWluWSA9IDApLCAobWF4WSA9IDApLCAobWluWCA9IDApLCAobWF4WCA9IDApO1xuICAgIH1cbiAgICByZXR1cm4geyBtaW5YOiBtaW5YLCBtYXhYOiBtYXhYLCBtaW5ZOiBtaW5ZLCBtYXhZOiBtYXhZIH07XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgY2VudGVyIHBvc2l0aW9uIG9mIHRoZSBuZXR3b3JrXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBhbGxOb2Rlc1xuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gW3NwZWNpZmljTm9kZXM9W11dXG4gICAqIEByZXR1cm5zIHt7bWluWDogbnVtYmVyLCBtYXhYOiBudW1iZXIsIG1pblk6IG51bWJlciwgbWF4WTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGdldFJhbmdlQ29yZShhbGxOb2Rlcywgc3BlY2lmaWNOb2RlcyA9IFtdKSB7XG4gICAgbGV0IG1pblkgPSAxZTksXG4gICAgICBtYXhZID0gLTFlOSxcbiAgICAgIG1pblggPSAxZTksXG4gICAgICBtYXhYID0gLTFlOSxcbiAgICAgIG5vZGU7XG4gICAgaWYgKHNwZWNpZmljTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGVjaWZpY05vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5vZGUgPSBhbGxOb2Rlc1tzcGVjaWZpY05vZGVzW2ldXTtcbiAgICAgICAgaWYgKG1pblggPiBub2RlLngpIHtcbiAgICAgICAgICBtaW5YID0gbm9kZS54O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhYIDwgbm9kZS54KSB7XG4gICAgICAgICAgbWF4WCA9IG5vZGUueDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWluWSA+IG5vZGUueSkge1xuICAgICAgICAgIG1pblkgPSBub2RlLnk7XG4gICAgICAgIH0gLy8gdG9wIGlzIG5lZ2F0aXZlLCBib3R0b20gaXMgcG9zaXRpdmVcbiAgICAgICAgaWYgKG1heFkgPCBub2RlLnkpIHtcbiAgICAgICAgICBtYXhZID0gbm9kZS55O1xuICAgICAgICB9IC8vIHRvcCBpcyBuZWdhdGl2ZSwgYm90dG9tIGlzIHBvc2l0aXZlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1pblggPT09IDFlOSAmJiBtYXhYID09PSAtMWU5ICYmIG1pblkgPT09IDFlOSAmJiBtYXhZID09PSAtMWU5KSB7XG4gICAgICAobWluWSA9IDApLCAobWF4WSA9IDApLCAobWluWCA9IDApLCAobWF4WCA9IDApO1xuICAgIH1cbiAgICByZXR1cm4geyBtaW5YOiBtaW5YLCBtYXhYOiBtYXhYLCBtaW5ZOiBtaW5ZLCBtYXhZOiBtYXhZIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHJhbmdlID0ge21pblg6IG1pblgsIG1heFg6IG1heFgsIG1pblk6IG1pblksIG1heFk6IG1heFl9O1xuICAgKiBAcmV0dXJucyB7e3g6IG51bWJlciwgeTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRDZW50ZXIocmFuZ2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogMC41ICogKHJhbmdlLm1heFggKyByYW5nZS5taW5YKSxcbiAgICAgIHk6IDAuNSAqIChyYW5nZS5tYXhZICsgcmFuZ2UubWluWSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHJldHVybnMgYSBjbG9uZSBvZiB0aGUgb3B0aW9ucyBvciBvcHRpb25zIG9mIHRoZSBlZGdlIG9yIG5vZGUgdG8gYmUgdXNlZCBmb3IgY29uc3RydWN0aW9uIG9mIG5ldyBlZGdlcyBvciBjaGVjayBmdW5jdGlvbnMgZm9yIG5ldyBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHt2aXMuSXRlbX0gaXRlbVxuICAgKiBAcGFyYW0geydub2RlJ3x1bmRlZmluZWR9IHR5cGVcbiAgICogQHJldHVybnMge3t9fVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgY2xvbmVPcHRpb25zKGl0ZW0sIHR5cGUpIHtcbiAgICBjb25zdCBjbG9uZWRPcHRpb25zID0ge307XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcIm5vZGVcIikge1xuICAgICAgZGVlcEV4dGVuZChjbG9uZWRPcHRpb25zLCBpdGVtLm9wdGlvbnMsIHRydWUpO1xuICAgICAgY2xvbmVkT3B0aW9ucy54ID0gaXRlbS54O1xuICAgICAgY2xvbmVkT3B0aW9ucy55ID0gaXRlbS55O1xuICAgICAgY2xvbmVkT3B0aW9ucy5hbW91bnRPZkNvbm5lY3Rpb25zID0gaXRlbS5lZGdlcy5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZXBFeHRlbmQoY2xvbmVkT3B0aW9ucywgaXRlbS5vcHRpb25zLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lZE9wdGlvbnM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTmV0d29ya1V0aWw7XG4iLCAiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCBOb2RlIGZyb20gXCIuLi9Ob2RlXCI7XG5cbi8qKlxuICogQSBDbHVzdGVyIGlzIGEgc3BlY2lhbCBOb2RlIHRoYXQgYWxsb3dzIGEgZ3JvdXAgb2YgTm9kZXMgcG9zaXRpb25lZCBjbG9zZWx5IHRvZ2V0aGVyXG4gKiB0byBiZSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBDbHVzdGVyIE5vZGUuXG4gKlxuICogQGF1Z21lbnRzIE5vZGVcbiAqL1xuY2xhc3MgQ2x1c3RlciBleHRlbmRzIE5vZGUge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtBcnJheS48SFRNTEltYWdlRWxlbWVudD59aW1hZ2VsaXN0XG4gICAqIEBwYXJhbSB7QXJyYXl9IGdyb3VwbGlzdFxuICAgKiBAcGFyYW0ge29iamVjdH0gZ2xvYmFsT3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdE9wdGlvbnMgICAgIEdsb2JhbCBkZWZhdWx0IG9wdGlvbnMgZm9yIG5vZGVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zLFxuICAgIGJvZHksXG4gICAgaW1hZ2VsaXN0LFxuICAgIGdyb3VwbGlzdCxcbiAgICBnbG9iYWxPcHRpb25zLFxuICAgIGRlZmF1bHRPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGltYWdlbGlzdCwgZ3JvdXBsaXN0LCBnbG9iYWxPcHRpb25zLCBkZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmlzQ2x1c3RlciA9IHRydWU7XG4gICAgdGhpcy5jb250YWluZWROb2RlcyA9IHt9O1xuICAgIHRoaXMuY29udGFpbmVkRWRnZXMgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2ZlciBjaGlsZCBjbHVzdGVyIGRhdGEgdG8gY3VycmVudCBhbmQgZGlzY29ubmVjdCB0aGUgY2hpbGQgY2x1c3Rlci5cbiAgICpcbiAgICogUGxlYXNlIGNvbnN1bHQgdGhlIGhlYWRlciBjb21tZW50IGluICdDbHVzdGVyaW5nLmpzJyBmb3IgdGhlIGZpZWxkcyBzZXQgaGVyZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBjaGlsZENsdXN0ZXJJZCAgaWQgb2YgY2hpbGQgY2x1c3RlciB0byBvcGVuXG4gICAqL1xuICBfb3BlbkNoaWxkQ2x1c3RlcihjaGlsZENsdXN0ZXJJZCkge1xuICAgIGNvbnN0IGNoaWxkQ2x1c3RlciA9IHRoaXMuYm9keS5ub2Rlc1tjaGlsZENsdXN0ZXJJZF07XG4gICAgaWYgKHRoaXMuY29udGFpbmVkTm9kZXNbY2hpbGRDbHVzdGVySWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJub2RlIHdpdGggaWQ6IFwiICsgY2hpbGRDbHVzdGVySWQgKyBcIiBub3QgaW4gY3VycmVudCBjbHVzdGVyXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY2hpbGRDbHVzdGVyLmlzQ2x1c3Rlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm9kZSB3aXRoIGlkOiBcIiArIGNoaWxkQ2x1c3RlcklkICsgXCIgaXMgbm90IGEgY2x1c3RlclwiKTtcbiAgICB9XG5cbiAgICAvLyBEaXNjb25uZWN0IGNoaWxkIGNsdXN0ZXIgZnJvbSBjdXJyZW50IGNsdXN0ZXJcbiAgICBkZWxldGUgdGhpcy5jb250YWluZWROb2Rlc1tjaGlsZENsdXN0ZXJJZF07XG4gICAgZm9yRWFjaChjaGlsZENsdXN0ZXIuZWRnZXMsIChlZGdlKSA9PiB7XG4gICAgICBkZWxldGUgdGhpcy5jb250YWluZWRFZGdlc1tlZGdlLmlkXTtcbiAgICB9KTtcblxuICAgIC8vIFRyYW5zZmVyIG5vZGVzIGFuZCBlZGdlc1xuICAgIGZvckVhY2goY2hpbGRDbHVzdGVyLmNvbnRhaW5lZE5vZGVzLCAobm9kZSwgbm9kZUlkKSA9PiB7XG4gICAgICB0aGlzLmNvbnRhaW5lZE5vZGVzW25vZGVJZF0gPSBub2RlO1xuICAgIH0pO1xuICAgIGNoaWxkQ2x1c3Rlci5jb250YWluZWROb2RlcyA9IHt9O1xuXG4gICAgZm9yRWFjaChjaGlsZENsdXN0ZXIuY29udGFpbmVkRWRnZXMsIChlZGdlLCBlZGdlSWQpID0+IHtcbiAgICAgIHRoaXMuY29udGFpbmVkRWRnZXNbZWRnZUlkXSA9IGVkZ2U7XG4gICAgfSk7XG4gICAgY2hpbGRDbHVzdGVyLmNvbnRhaW5lZEVkZ2VzID0ge307XG5cbiAgICAvLyBUcmFuc2ZlciBlZGdlcyB3aXRoaW4gY2x1c3RlciBlZGdlcyB3aGljaCBhcmUgY2x1c3RlcmVkXG4gICAgZm9yRWFjaChjaGlsZENsdXN0ZXIuZWRnZXMsIChjbHVzdGVyRWRnZSkgPT4ge1xuICAgICAgZm9yRWFjaCh0aGlzLmVkZ2VzLCAocGFyZW50Q2x1c3RlckVkZ2UpID0+IHtcbiAgICAgICAgLy8gQXNzdW1wdGlvbjogYSBjbHVzdGVyZWQgZWRnZSBjYW4gb25seSBiZSBwcmVzZW50IGluIGEgc2luZ2xlIGNsdXN0ZXJpbmcgZWRnZVxuICAgICAgICAvLyBOb3QgdGVzdGVkIGhlcmVcbiAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRDbHVzdGVyRWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcy5pbmRleE9mKFxuICAgICAgICAgIGNsdXN0ZXJFZGdlLmlkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybjtcblxuICAgICAgICBmb3JFYWNoKGNsdXN0ZXJFZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzLCAoc3JjSWQpID0+IHtcbiAgICAgICAgICBwYXJlbnRDbHVzdGVyRWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcy5wdXNoKHNyY0lkKTtcblxuICAgICAgICAgIC8vIE1haW50YWluIGNvcnJlY3QgYm9va2tlZXBpbmcgZm9yIHRyYW5zZmVycmVkIGVkZ2VcbiAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbc3JjSWRdLmVkZ2VSZXBsYWNlZEJ5SWQgPSBwYXJlbnRDbHVzdGVyRWRnZS5pZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGNsdXN0ZXIgZWRnZSBmcm9tIHBhcmVudCBjbHVzdGVyIGVkZ2VcbiAgICAgICAgcGFyZW50Q2x1c3RlckVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNoaWxkQ2x1c3Rlci5lZGdlcyA9IFtdO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENsdXN0ZXI7XG4iLCAiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiMgVE9ET1xuXG4tIGBlZGdlUmVwbGFjZWRCeUlkYCBub3QgY2xlYW5lZCB1cCB5ZXQgb24gY2x1c3RlciBlZGdlIHJlbW92YWxcbi0gYWxsb3dTaW5nbGVOb2RlQ2x1c3RlciBjb3VsZCBiZSBhIGdsb2JhbCBvcHRpb24gYXMgd2VsbDsgY3VycmVudGx5IG5lZWRzIHRvIGFsd2F5c1xuICBiZSBwYXNzZWQgdG8gY2x1c3RlcmluZyBtZXRob2RzXG5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIyBTdGF0ZSBNb2RlbCBmb3IgQ2x1c3RlcmluZ1xuXG5UaGUgdG90YWwgc3RhdGUgZm9yIGNsdXN0ZXJpbmcgaXMgbm9uLXRyaXZpYWwuIEl0IGlzIHVzZWZ1bCB0byBoYXZlIGEgbW9kZWxcbmF2YWlsYWJsZSBhcyB0byBob3cgaXQgd29ya3MuIFRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIHRoZSByZWxldmFudCBzdGF0ZSBpdGVtcy5cblxuXG4jIyBOZXR3b3JrIFN0YXRlXG5cblRoZSBmb2xsb3dpbmcgYG5ldHdvcmtgLW1lbWJlcnMgYXJlIHJlbGV2YW50IHRvIGNsdXN0ZXJpbmc6XG5cbi0gYGJvZHkubm9kZXNgICAgICAgIC0gYWxsIG5vZGVzIGFjdGl2ZWx5IHBhcnRpY2lwYXRpbmcgaW4gdGhlIG5ldHdvcmtcbi0gYGJvZHkuZWRnZXNgICAgICAgIC0gc2FtZSBmb3IgZWRnZXNcbi0gYGJvZHkubm9kZUluZGljZXNgIC0gaWQncyBvZiBub2RlcyB0aGF0IGFyZSB2aXNpYmxlIGF0IGEgZ2l2ZW4gbW9tZW50XG4tIGBib2R5LmVkZ2VJbmRpY2VzYCAtIHNhbWUgZm9yIGVkZ2VzXG5cblRoaXMgaW5jbHVkZXM6XG5cbi0gaGVscGVyIG5vZGVzIGZvciBkcmFnZ2luZyBpbiBgbWFuaXB1bGF0aW9uYFxuLSBoZWxwZXIgbm9kZXMgZm9yIGVkZ2UgdHlwZSBgZHluYW1pY2Bcbi0gY2x1c3RlciBub2RlcyBhbmQgZWRnZXNcbi0gdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiB0aGlzLlxuXG5BIG5vZGUvZWRnZSBtYXkgYmUgbWlzc2luZyBpbiB0aGUgYEluZGljZXNgIG1lbWJlciBpZjpcblxuLSBpdCBpcyBhIGhlbHBlciBub2RlXG4tIHRoZSBub2RlIG9yIGVkZ2Ugc3RhdGUgaGFzIG9wdGlvbiBgaGlkZGVuYCBzZXRcbi0gSXQgaXMgbm90IHZpc2libGUgZHVlIHRvIGNsdXN0ZXJpbmdcblxuXG4jIyBDbHVzdGVyaW5nIFN0YXRlXG5cbkZvciB0aGUgaGFzaGVzLCB0aGUgaWQncyBvZiB0aGUgbm9kZXMvZWRnZXMgYXJlIHVzZWQgYXMga2V5LlxuXG5NZW1iZXIgYG5ldHdvcmsuY2x1c3RlcmluZ2AgY29udGFpbnMgdGhlIGZvbGxvd2luZyBpdGVtczpcblxuLSBgY2x1c3RlcmVkTm9kZXNgIC0gaGFzaCB3aXRoIHZhbHVlczogeyBjbHVzdGVySWQ6IDxpZCBvZiBjbHVzdGVyPiwgbm9kZTogPG5vZGUgaW5zdGFuY2U+fVxuLSBgY2x1c3RlcmVkRWRnZXNgIC0gaGFzaCB3aXRoIHZhbHVlczogcmVzdG9yZSBpbmZvcm1hdGlvbiBmb3IgZ2l2ZW4gZWRnZVxuXG5cbkR1ZSB0byBuZXN0aW5nIG9mIGNsdXN0ZXJzLCB0aGVzZSBtZW1iZXJzIGNhbiBjb250YWluIGNsdXN0ZXIgbm9kZXMgYW5kIGVkZ2VzIGFzIHdlbGwuXG5cblRoZSBpbXBvcnRhbnQgdGhpbmcgdG8gbm90ZSBoZXJlLCBpcyB0aGF0IHRoZSBjbHVzdGVyZWQgbm9kZXMgYW5kIGVkZ2VzIGFsc29cbmFwcGVhciBpbiB0aGUgbWVtYmVycyBvZiB0aGUgY2x1c3RlciBub2Rlcy4gRm9yIGRhdGEgdXBkYXRlLCBpdCBpcyB0aGVyZWZvcmVcbmltcG9ydGFudCB0byBzY2FuIHRoZXNlIGxpc3RzIGFzIHdlbGwgYXMgdGhlIGNsdXN0ZXIgbm9kZXMuXG5cblxuIyMjIENsdXN0ZXIgTm9kZVxuXG5BIGNsdXN0ZXIgbm9kZSBoYXMgdGhlIGZvbGxvd2luZyBleHRyYSBmaWVsZHM6XG5cbi0gYGlzQ2x1c3RlciA6IHRydWVgIC0gaW5kaWNhdGlvbiB0aGF0IHRoaXMgaXMgYSBjbHVzdGVyIG5vZGVcbi0gYGNvbnRhaW5lZE5vZGVzYCAgIC0gaGFzaCBvZiBub2RlcyBjb250YWluZWQgaW4gdGhpcyBjbHVzdGVyXG4tIGBjb250YWluZWRFZGdlc2AgICAtIHNhbWUgZm9yIGVkZ2VzXG4tIGBlZGdlc2AgICAgICAgICAgICAtIGFycmF5IG9mIGNsdXN0ZXIgZWRnZXMgZm9yIHRoaXMgbm9kZVxuXG5cbioqTk9URToqKlxuXG4tIGBjb250YWluZWRFZGdlc2AgY2FuIGFsc28gY29udGFpbiBlZGdlcyB3aGljaCBhcmUgbm90IGNsdXN0ZXJlZDsgZS5nLiBhbiBlZGdlXG4gICBjb25uZWN0aW5nIHR3byBub2RlcyBpbiB0aGUgc2FtZSBjbHVzdGVyLlxuXG5cbiMjIyBDbHVzdGVyIEVkZ2VcblxuVGhlc2UgYXJlIHRoZSBpdGVtcyBpbiB0aGUgYGVkZ2VzYCBtZW1iZXIgb2YgYSBjbHVzdGVyZWQgbm9kZS4gVGhleSBoYXZlIHRoZVxuZm9sbG93aW5nIHJlbGV2YW50IG1lbWJlcnM6XG5cbi0gJ2NsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzYCAtIGFycmF5IG9mIGlkJ3Mgb2YgZWRnZXMgcmVwbGFjZWQgYnkgdGhpcyBlZGdlXG5cbk5vdGUgdGhhdCBpdCdzIHBvc3NpYmxlIHRvIG5lc3QgY2x1c3RlcnMsIHNvIHRoYXQgYGNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzYFxuY2FuIGNvbnRhaW4gZWRnZSBpZCdzIG9mIG90aGVyIGNsdXN0ZXJzLlxuXG5cbiMjIyBDbHVzdGVyZWQgRWRnZVxuXG5UaGlzIGlzIGFueSBlZGdlIGNvbnRhaW5lZCBieSBhIGNsdXN0ZXIgZWRnZS4gSXQgZ2V0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWxcbm1lbWJlcjpcblxuLSBgZWRnZVJlcGxhY2VkQnlJZGAgLSBpZCBvZiB0aGUgY2x1c3RlciBlZGdlIGluIHdoaWNoIGN1cnJlbnQgZWRnZSBpcyBjbHVzdGVyZWRcblxuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbmltcG9ydCB7IGRlZXBFeHRlbmQsIGZvckVhY2ggfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyB2NCBhcyByYW5kb21VVUlEIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCBOZXR3b3JrVXRpbCBmcm9tIFwiLi4vTmV0d29ya1V0aWxcIjtcbmltcG9ydCBDbHVzdGVyIGZyb20gXCIuL2NvbXBvbmVudHMvbm9kZXMvQ2x1c3RlclwiO1xuaW1wb3J0IEVkZ2UgZnJvbSBcIi4vY29tcG9uZW50cy9FZGdlXCI7IC8vIE9ubHkgbmVlZGVkIGZvciBjaGVjayBvbiB0eXBlIVxuaW1wb3J0IE5vZGUgZnJvbSBcIi4vY29tcG9uZW50cy9Ob2RlXCI7IC8vIE9ubHkgbmVlZGVkIGZvciBjaGVjayBvbiB0eXBlIVxuXG4vKipcbiAqIFRoZSBjbHVzdGVyaW5nIGVuZ2luZVxuICovXG5jbGFzcyBDbHVzdGVyRW5naW5lIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5KSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNsdXN0ZXJlZE5vZGVzID0ge307IC8vIGtleTogbm9kZSBpZCwgdmFsdWU6IHsgY2x1c3RlcklkOiA8aWQgb2YgY2x1c3Rlcj4sIG5vZGU6IDxub2RlIGluc3RhbmNlPn1cbiAgICB0aGlzLmNsdXN0ZXJlZEVkZ2VzID0ge307IC8vIGtleTogZWRnZSBpZCwgdmFsdWU6IHJlc3RvcmUgaW5mb3JtYXRpb24gZm9yIGdpdmVuIGVkZ2VcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7fTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9yZXNldERhdGFcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5jbHVzdGVyZWROb2RlcyA9IHt9O1xuICAgICAgdGhpcy5jbHVzdGVyZWRFZGdlcyA9IHt9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBodWJzaXplXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjbHVzdGVyQnlIdWJzaXplKGh1YnNpemUsIG9wdGlvbnMpIHtcbiAgICBpZiAoaHVic2l6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBodWJzaXplID0gdGhpcy5fZ2V0SHViU2l6ZSgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGh1YnNpemUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIG9wdGlvbnMgPSB0aGlzLl9jaGVja09wdGlvbnMoaHVic2l6ZSk7XG4gICAgICBodWJzaXplID0gdGhpcy5fZ2V0SHViU2l6ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVzVG9DbHVzdGVyID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldXTtcbiAgICAgIGlmIChub2RlLmVkZ2VzLmxlbmd0aCA+PSBodWJzaXplKSB7XG4gICAgICAgIG5vZGVzVG9DbHVzdGVyLnB1c2gobm9kZS5pZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlc1RvQ2x1c3Rlci5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jbHVzdGVyQnlDb25uZWN0aW9uKG5vZGVzVG9DbHVzdGVyW2ldLCBvcHRpb25zLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGxvb3Agb3ZlciBhbGwgbm9kZXMsIGNoZWNrIGlmIHRoZXkgYWRoZXJlIHRvIHRoZSBjb25kaXRpb24gYW5kIGNsdXN0ZXIgaWYgbmVlZGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWZyZXNoRGF0YT10cnVlXVxuICAgKi9cbiAgY2x1c3RlcihvcHRpb25zID0ge30sIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIGlmIChvcHRpb25zLmpvaW5Db25kaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBjYWxsIGNsdXN0ZXJCeU5vZGVEYXRhIHdpdGhvdXQgYSBqb2luQ29uZGl0aW9uIGZ1bmN0aW9uIGluIHRoZSBvcHRpb25zLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHRoZSBvcHRpb25zIG9iamVjdCBpcyBmaW5lLCBhcHBlbmQgaWYgbmVlZGVkXG4gICAgb3B0aW9ucyA9IHRoaXMuX2NoZWNrT3B0aW9ucyhvcHRpb25zKTtcblxuICAgIGNvbnN0IGNoaWxkTm9kZXNPYmogPSB7fTtcbiAgICBjb25zdCBjaGlsZEVkZ2VzT2JqID0ge307XG5cbiAgICAvLyBjb2xsZWN0IHRoZSBub2RlcyB0aGF0IHdpbGwgYmUgaW4gdGhlIGNsdXN0ZXJcbiAgICBmb3JFYWNoKHRoaXMuYm9keS5ub2RlcywgKG5vZGUsIG5vZGVJZCkgPT4ge1xuICAgICAgaWYgKG5vZGUub3B0aW9ucyAmJiBvcHRpb25zLmpvaW5Db25kaXRpb24obm9kZS5vcHRpb25zKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjaGlsZE5vZGVzT2JqW25vZGVJZF0gPSBub2RlO1xuXG4gICAgICAgIC8vIGNvbGxlY3QgdGhlIGVkZ2VzIHRoYXQgd2lsbCBiZSBpbiB0aGUgY2x1c3RlclxuICAgICAgICBmb3JFYWNoKG5vZGUuZWRnZXMsIChlZGdlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2hpbGRFZGdlc09ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2NsdXN0ZXIoY2hpbGROb2Rlc09iaiwgY2hpbGRFZGdlc09iaiwgb3B0aW9ucywgcmVmcmVzaERhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsdXN0ZXIgYWxsIG5vZGVzIGluIHRoZSBuZXR3b3JrIHRoYXQgaGF2ZSBvbmx5IFggZWRnZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VDb3VudFxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWZyZXNoRGF0YT10cnVlXVxuICAgKi9cbiAgY2x1c3RlckJ5RWRnZUNvdW50KGVkZ2VDb3VudCwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgb3B0aW9ucyA9IHRoaXMuX2NoZWNrT3B0aW9ucyhvcHRpb25zKTtcbiAgICBjb25zdCBjbHVzdGVycyA9IFtdO1xuICAgIGNvbnN0IHVzZWROb2RlcyA9IHt9O1xuICAgIGxldCBlZGdlLCBlZGdlcywgcmVsZXZhbnRFZGdlQ291bnQ7XG4gICAgLy8gY29sbGVjdCB0aGUgbm9kZXMgdGhhdCB3aWxsIGJlIGluIHRoZSBjbHVzdGVyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkTm9kZXNPYmogPSB7fTtcbiAgICAgIGNvbnN0IGNoaWxkRWRnZXNPYmogPSB7fTtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IHRoaXMuYm9keS5ub2RlSW5kaWNlc1tpXTtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcblxuICAgICAgLy8gaWYgdGhpcyBub2RlIGlzIGFscmVhZHkgdXNlZCBpbiBhbm90aGVyIGNsdXN0ZXIgdGhpcyBzZXNzaW9uLCB3ZSBkbyBub3QgaGF2ZSB0byByZS1ldmFsdWF0ZSBpdC5cbiAgICAgIGlmICh1c2VkTm9kZXNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlbGV2YW50RWRnZUNvdW50ID0gMDtcbiAgICAgICAgZWRnZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBub2RlLmVkZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgZWRnZSA9IG5vZGUuZWRnZXNbal07XG4gICAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGVkZ2UudG9JZCAhPT0gZWRnZS5mcm9tSWQpIHtcbiAgICAgICAgICAgICAgcmVsZXZhbnRFZGdlQ291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkZ2VzLnB1c2goZWRnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcyBub2RlIHF1YWxpZmllcywgd2UgY29sbGVjdCBpdHMgbmVpZ2hib3VycyB0byBzdGFydCB0aGUgY2x1c3RlcmluZyBwcm9jZXNzLlxuICAgICAgICBpZiAocmVsZXZhbnRFZGdlQ291bnQgPT09IGVkZ2VDb3VudCkge1xuICAgICAgICAgIGNvbnN0IGNoZWNrSm9pbkNvbmRpdGlvbiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9wdGlvbnMuam9pbkNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgIG9wdGlvbnMuam9pbkNvbmRpdGlvbiA9PT0gbnVsbFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKG5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuam9pbkNvbmRpdGlvbihjbG9uZWRPcHRpb25zKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgbGV0IGdhdGhlcmluZ1N1Y2Nlc3NmdWwgPSB0cnVlO1xuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGVkZ2UgPSBlZGdlc1tqXTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZUlkID0gdGhpcy5fZ2V0Q29ubmVjdGVkSWQoZWRnZSwgbm9kZUlkKTtcbiAgICAgICAgICAgIC8vIGFkZCB0aGUgbm9kZXMgdG8gdGhlIGxpc3QgYnkgdGhlIGpvaW4gY29uZGl0aW9uLlxuICAgICAgICAgICAgaWYgKGNoZWNrSm9pbkNvbmRpdGlvbihub2RlKSkge1xuICAgICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2UuaWRdID0gZWRnZTtcbiAgICAgICAgICAgICAgY2hpbGROb2Rlc09ialtub2RlSWRdID0gbm9kZTtcbiAgICAgICAgICAgICAgY2hpbGROb2Rlc09ialtjaGlsZE5vZGVJZF0gPSB0aGlzLmJvZHkubm9kZXNbY2hpbGROb2RlSWRdO1xuICAgICAgICAgICAgICB1c2VkTm9kZXNbbm9kZUlkXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyB0aGlzIG5vZGUgZG9lcyBub3QgcXVhbGlmeSBhZnRlciBhbGwuXG4gICAgICAgICAgICAgIGdhdGhlcmluZ1N1Y2Nlc3NmdWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gYWRkIHRvIHRoZSBjbHVzdGVyIHF1ZXVlXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaikubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY2hpbGRFZGdlc09iaikubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgZ2F0aGVyaW5nU3VjY2Vzc2Z1bCA9PT0gdHJ1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTZWFyY2ggZm9yIGNsdXN0ZXIgZGF0YSB0aGF0IGNvbnRhaW5zIGFueSBvZiB0aGUgbm9kZSBpZCdzXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgbm8gam9pbkNvbmRpdGlvbiwgb3RoZXJ3aXNlIHJldHVybiB2YWx1ZSBvZiBqb2luQ29uZGl0aW9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IGZpbmRDbHVzdGVyRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBjbHVzdGVycy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgIC8vIFNlYXJjaCBmb3IgYSBjbHVzdGVyIGNvbnRhaW5pbmcgYW55IG9mIHRoZSBub2RlIGlkJ3NcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gaW4gY2hpbGROb2Rlc09iaikge1xuICAgICAgICAgICAgICAgICAgaWYgKGNsdXN0ZXJzW25dLm5vZGVzW21dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsdXN0ZXJzW25dO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBJZiBhbnkgb2YgdGhlIGZvdW5kIG5vZGVzIGlzIHBhcnQgb2YgYSBjbHVzdGVyIGZvdW5kIGluIHRoaXMgbWV0aG9kLFxuICAgICAgICAgICAgLy8gYWRkIHRoZSBjdXJyZW50IHZhbHVlcyB0byB0aGF0IGNsdXN0ZXJcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kQ2x1c3RlciA9IGZpbmRDbHVzdGVyRGF0YSgpO1xuICAgICAgICAgICAgaWYgKGZvdW5kQ2x1c3RlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIC8vIEFkZCBub2RlcyB0byBmb3VuZCBjbHVzdGVyIGlmIG5vdCBwcmVzZW50XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbSBpbiBjaGlsZE5vZGVzT2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kQ2x1c3Rlci5ub2Rlc1ttXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBmb3VuZENsdXN0ZXIubm9kZXNbbV0gPSBjaGlsZE5vZGVzT2JqW21dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIEFkZCBlZGdlcyB0byBmb3VuZCBjbHVzdGVyLCBpZiBub3QgcHJlc2VudFxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gaW4gY2hpbGRFZGdlc09iaikge1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZENsdXN0ZXIuZWRnZXNbbV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgZm91bmRDbHVzdGVyLmVkZ2VzW21dID0gY2hpbGRFZGdlc09ialttXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBjbHVzdGVyIGdyb3VwXG4gICAgICAgICAgICAgIGNsdXN0ZXJzLnB1c2goeyBub2RlczogY2hpbGROb2Rlc09iaiwgZWRnZXM6IGNoaWxkRWRnZXNPYmogfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbHVzdGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5fY2x1c3RlcihjbHVzdGVyc1tpXS5ub2RlcywgY2x1c3RlcnNbaV0uZWRnZXMsIG9wdGlvbnMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocmVmcmVzaERhdGEgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsdXN0ZXIgYWxsIG5vZGVzIGluIHRoZSBuZXR3b3JrIHRoYXQgaGF2ZSBvbmx5IDEgZWRnZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWZyZXNoRGF0YT10cnVlXVxuICAgKi9cbiAgY2x1c3Rlck91dGxpZXJzKG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIHRoaXMuY2x1c3RlckJ5RWRnZUNvdW50KDEsIG9wdGlvbnMsIHJlZnJlc2hEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbHVzdGVyIGFsbCBub2RlcyBpbiB0aGUgbmV0d29yayB0aGF0IGhhdmUgb25seSAyIGVkZ2VcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVmcmVzaERhdGE9dHJ1ZV1cbiAgICovXG4gIGNsdXN0ZXJCcmlkZ2VzKG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIHRoaXMuY2x1c3RlckJ5RWRnZUNvdW50KDIsIG9wdGlvbnMsIHJlZnJlc2hEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzdWNrIGFsbCBjb25uZWN0ZWQgbm9kZXMgb2YgYSBub2RlIGludG8gdGhlIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlZnJlc2hEYXRhPXRydWVdXG4gICAqL1xuICBjbHVzdGVyQnlDb25uZWN0aW9uKG5vZGVJZCwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgLy8ga2lsbCBjb25kaXRpb25zXG4gICAgaWYgKG5vZGVJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlSWQgc3VwcGxpZWQgdG8gY2x1c3RlckJ5Q29ubmVjdGlvbiFcIik7XG4gICAgfVxuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlIG5vZGVJZCBnaXZlbiB0byBjbHVzdGVyQnlDb25uZWN0aW9uIGRvZXMgbm90IGV4aXN0IVwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICBvcHRpb25zID0gdGhpcy5fY2hlY2tPcHRpb25zKG9wdGlvbnMsIG5vZGUpO1xuICAgIGlmIChvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy54ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnggPSBub2RlLng7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy55ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnkgPSBub2RlLnk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy5maXhlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy5maXhlZCA9IHt9O1xuICAgICAgb3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuZml4ZWQueCA9IG5vZGUub3B0aW9ucy5maXhlZC54O1xuICAgICAgb3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuZml4ZWQueSA9IG5vZGUub3B0aW9ucy5maXhlZC55O1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkTm9kZXNPYmogPSB7fTtcbiAgICBjb25zdCBjaGlsZEVkZ2VzT2JqID0ge307XG4gICAgY29uc3QgcGFyZW50Tm9kZUlkID0gbm9kZS5pZDtcbiAgICBjb25zdCBwYXJlbnRDbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKG5vZGUpO1xuICAgIGNoaWxkTm9kZXNPYmpbcGFyZW50Tm9kZUlkXSA9IG5vZGU7XG5cbiAgICAvLyBjb2xsZWN0IHRoZSBub2RlcyB0aGF0IHdpbGwgYmUgaW4gdGhlIGNsdXN0ZXJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBub2RlLmVkZ2VzW2ldO1xuICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVJZCA9IHRoaXMuX2dldENvbm5lY3RlZElkKGVkZ2UsIHBhcmVudE5vZGVJZCk7XG5cbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIG5vZGUgaXMgbm90IGluIGEgY2x1c3RlclxuICAgICAgICBpZiAodGhpcy5jbHVzdGVyZWROb2Rlc1tjaGlsZE5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChjaGlsZE5vZGVJZCAhPT0gcGFyZW50Tm9kZUlkKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5qb2luQ29uZGl0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY2hpbGRFZGdlc09ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZXNPYmpbY2hpbGROb2RlSWRdID0gdGhpcy5ib2R5Lm5vZGVzW2NoaWxkTm9kZUlkXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGNsb25lIHRoZSBvcHRpb25zIGFuZCBpbnNlcnQgc29tZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZy5cbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRDbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKFxuICAgICAgICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tjaGlsZE5vZGVJZF1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuam9pbkNvbmRpdGlvbihcbiAgICAgICAgICAgICAgICAgIHBhcmVudENsb25lZE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICBjaGlsZENsb25lZE9wdGlvbnNcbiAgICAgICAgICAgICAgICApID09PSB0cnVlXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNoaWxkRWRnZXNPYmpbZWRnZS5pZF0gPSBlZGdlO1xuICAgICAgICAgICAgICAgIGNoaWxkTm9kZXNPYmpbY2hpbGROb2RlSWRdID0gdGhpcy5ib2R5Lm5vZGVzW2NoaWxkTm9kZUlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzd2FsbG93IHRoZSBlZGdlIGlmIGl0IGlzIHNlbGYtcmVmZXJlbmNpbmcuXG4gICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2UuaWRdID0gZWRnZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY2hpbGROb2RlSURzID0gT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaikubWFwKGZ1bmN0aW9uIChjaGlsZE5vZGUpIHtcbiAgICAgIHJldHVybiBjaGlsZE5vZGVzT2JqW2NoaWxkTm9kZV0uaWQ7XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkTm9kZUtleSBpbiBjaGlsZE5vZGVzT2JqKSB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZE5vZGVzT2JqLCBjaGlsZE5vZGVLZXkpKVxuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY29uc3QgY2hpbGROb2RlID0gY2hpbGROb2Rlc09ialtjaGlsZE5vZGVLZXldO1xuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBjaGlsZE5vZGUuZWRnZXMubGVuZ3RoOyB5KyspIHtcbiAgICAgICAgY29uc3QgY2hpbGRFZGdlID0gY2hpbGROb2RlLmVkZ2VzW3ldO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGROb2RlSURzLmluZGV4T2YodGhpcy5fZ2V0Q29ubmVjdGVkSWQoY2hpbGRFZGdlLCBjaGlsZE5vZGUuaWQpKSA+XG4gICAgICAgICAgLTFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2hpbGRFZGdlc09ialtjaGlsZEVkZ2UuaWRdID0gY2hpbGRFZGdlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2NsdXN0ZXIoY2hpbGROb2Rlc09iaiwgY2hpbGRFZGdlc09iaiwgb3B0aW9ucywgcmVmcmVzaERhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgZWRnZXMgdGhhdCB3aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBjbHVzdGVyXG4gICAqIEl0IGxvb2tzIGZvciBlZGdlcyB0aGF0IGFyZSBjb25uZWN0ZWQgdG8gdGhlIG5vZGVzIGZyb20gdGhlIFwib3V0c2lkZScgb2YgdGhlIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7e05vZGUuaWQ6IHZpcy5Ob2RlfX0gY2hpbGROb2Rlc09ialxuICAgKiBAcGFyYW0ge3t2aXMuRWRnZS5pZDogdmlzLkVkZ2V9fSBjaGlsZEVkZ2VzT2JqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjbHVzdGVyTm9kZVByb3BlcnRpZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IGNsdXN0ZXJFZGdlUHJvcGVydGllc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUNsdXN0ZXJFZGdlcyhcbiAgICBjaGlsZE5vZGVzT2JqLFxuICAgIGNoaWxkRWRnZXNPYmosXG4gICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLFxuICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllc1xuICApIHtcbiAgICBsZXQgZWRnZSwgY2hpbGROb2RlSWQsIGNoaWxkTm9kZSwgdG9JZCwgZnJvbUlkLCBvdGhlck5vZGVJZDtcblxuICAgIC8vIGxvb3Agb3ZlciBhbGwgY2hpbGQgbm9kZXMgYW5kIHRoZWlyIGVkZ2VzIHRvIGZpbmQgZWRnZXMgZ29pbmcgb3V0IG9mIHRoZSBjbHVzdGVyXG4gICAgLy8gdGhlc2UgZWRnZXMgd2lsbCBiZSByZXBsYWNlZCBieSBjbHVzdGVyRWRnZXMuXG4gICAgY29uc3QgY2hpbGRLZXlzID0gT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaik7XG4gICAgY29uc3QgY3JlYXRlRWRnZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGROb2RlSWQgPSBjaGlsZEtleXNbaV07XG4gICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzT2JqW2NoaWxkTm9kZUlkXTtcblxuICAgICAgLy8gY29uc3RydWN0IG5ldyBlZGdlcyBmcm9tIHRoZSBjbHVzdGVyIHRvIG90aGVyc1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaGlsZE5vZGUuZWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgZWRnZSA9IGNoaWxkTm9kZS5lZGdlc1tqXTtcbiAgICAgICAgLy8gd2Ugb25seSBoYW5kbGUgZWRnZXMgdGhhdCBhcmUgdmlzaWJsZSB0byB0aGUgc3lzdGVtLCBub3QgdGhlIGRpc2FibGVkIG9uZXMgZnJvbSB0aGUgY2x1c3RlcmluZyBwcm9jZXNzLlxuICAgICAgICBpZiAodGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gc2VsZi1yZWZlcmVuY2luZyBlZGdlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBcImhpZGRlblwiIGxpc3RcbiAgICAgICAgICBpZiAoZWRnZS50b0lkID09IGVkZ2UuZnJvbUlkKSB7XG4gICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2UuaWRdID0gZWRnZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2V0IHVwIHRoZSBmcm9tIGFuZCB0by5cbiAgICAgICAgICAgIGlmIChlZGdlLnRvSWQgPT0gY2hpbGROb2RlSWQpIHtcbiAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhIGRvdWJsZSBlcXVhbHMgYmVjYXVzZSBpbnRzIGFuZCBzdHJpbmdzIGNhbiBiZSBpbnRlcmNoYW5nZWQgaGVyZS5cbiAgICAgICAgICAgICAgdG9JZCA9IGNsdXN0ZXJOb2RlUHJvcGVydGllcy5pZDtcbiAgICAgICAgICAgICAgZnJvbUlkID0gZWRnZS5mcm9tSWQ7XG4gICAgICAgICAgICAgIG90aGVyTm9kZUlkID0gZnJvbUlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdG9JZCA9IGVkZ2UudG9JZDtcbiAgICAgICAgICAgICAgZnJvbUlkID0gY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkO1xuICAgICAgICAgICAgICBvdGhlck5vZGVJZCA9IHRvSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gT25seSBlZGdlcyBmcm9tIHRoZSBjbHVzdGVyIG91dHdhcmRzIGFyZSBiZWluZyByZXBsYWNlZC5cbiAgICAgICAgICBpZiAoY2hpbGROb2Rlc09ialtvdGhlck5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY3JlYXRlRWRnZXMucHVzaCh7IGVkZ2U6IGVkZ2UsIGZyb21JZDogZnJvbUlkLCB0b0lkOiB0b0lkIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gSGVyZSB3ZSBhY3R1YWxseSBjcmVhdGUgdGhlIHJlcGxhY2VtZW50IGVkZ2VzLlxuICAgIC8vXG4gICAgLy8gV2UgY291bGQgbm90IGRvIHRoaXMgaW4gdGhlIGxvb3AgYWJvdmUgYXMgdGhlIGNyZWF0aW9uIHByb2Nlc3NcbiAgICAvLyB3b3VsZCBhZGQgYW4gZWRnZSB0byB0aGUgZWRnZXMgYXJyYXkgd2UgYXJlIGl0ZXJhdGluZyBvdmVyLlxuICAgIC8vXG4gICAgLy8gTk9URTogYSBjbHVzdGVyZWQgZWRnZSBjYW4gaGF2ZSBtdWx0aXBsZSBiYXNlIGVkZ2VzIVxuICAgIC8vXG4gICAgY29uc3QgbmV3RWRnZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSBjbHVzdGVyIGVkZ2Ugd2hpY2ggbWF0Y2hlcyB0aGUgZ2l2ZW4gY3JlYXRlZCBlZGdlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHt2aXMuRWRnZX0gY3JlYXRlZEVkZ2VcbiAgICAgKiBAcmV0dXJucyB7dmlzLkVkZ2V9XG4gICAgICovXG4gICAgY29uc3QgZ2V0TmV3RWRnZSA9IGZ1bmN0aW9uIChjcmVhdGVkRWRnZSkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuZXdFZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBuZXdFZGdlID0gbmV3RWRnZXNbal07XG5cbiAgICAgICAgLy8gV2UgcmVwbGFjZSBib3RoIHRvIGFuZCBmcm9tIGVkZ2VzIHdpdGggYSBzaW5nbGUgY2x1c3RlciBlZGdlXG4gICAgICAgIGNvbnN0IG1hdGNoVG9EaXJlY3Rpb24gPVxuICAgICAgICAgIGNyZWF0ZWRFZGdlLmZyb21JZCA9PT0gbmV3RWRnZS5mcm9tSWQgJiZcbiAgICAgICAgICBjcmVhdGVkRWRnZS50b0lkID09PSBuZXdFZGdlLnRvSWQ7XG4gICAgICAgIGNvbnN0IG1hdGNoRnJvbURpcmVjdGlvbiA9XG4gICAgICAgICAgY3JlYXRlZEVkZ2UuZnJvbUlkID09PSBuZXdFZGdlLnRvSWQgJiZcbiAgICAgICAgICBjcmVhdGVkRWRnZS50b0lkID09PSBuZXdFZGdlLmZyb21JZDtcblxuICAgICAgICBpZiAobWF0Y2hUb0RpcmVjdGlvbiB8fCBtYXRjaEZyb21EaXJlY3Rpb24pIHtcbiAgICAgICAgICByZXR1cm4gbmV3RWRnZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjcmVhdGVFZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgY3JlYXRlZEVkZ2UgPSBjcmVhdGVFZGdlc1tqXTtcbiAgICAgIGNvbnN0IGVkZ2UgPSBjcmVhdGVkRWRnZS5lZGdlO1xuICAgICAgbGV0IG5ld0VkZ2UgPSBnZXROZXdFZGdlKGNyZWF0ZWRFZGdlKTtcblxuICAgICAgaWYgKG5ld0VkZ2UgPT09IG51bGwpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgY2x1c3RlcmVkIGVkZ2UgZm9yIHRoaXMgY29ubmVjdGlvblxuICAgICAgICBuZXdFZGdlID0gdGhpcy5fY3JlYXRlQ2x1c3RlcmVkRWRnZShcbiAgICAgICAgICBjcmVhdGVkRWRnZS5mcm9tSWQsXG4gICAgICAgICAgY3JlYXRlZEVkZ2UudG9JZCxcbiAgICAgICAgICBlZGdlLFxuICAgICAgICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllc1xuICAgICAgICApO1xuXG4gICAgICAgIG5ld0VkZ2VzLnB1c2gobmV3RWRnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdFZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzLnB1c2goZWRnZS5pZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFsc28gcmVmZXJlbmNlIHRoZSBuZXcgZWRnZSBpbiB0aGUgb2xkIGVkZ2VcbiAgICAgIHRoaXMuYm9keS5lZGdlc1tlZGdlLmlkXS5lZGdlUmVwbGFjZWRCeUlkID0gbmV3RWRnZS5pZDtcblxuICAgICAgLy8gaGlkZSB0aGUgcmVwbGFjZWQgZWRnZVxuICAgICAgdGhpcy5fYmFja3VwRWRnZU9wdGlvbnMoZWRnZSk7XG4gICAgICBlZGdlLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3VwcGxpZWQgdG8gdGhlIGRpZmZlcmVudCBjbHVzdGVyIGZ1bmN0aW9uc1xuICAgKiBmb3IgY2VydGFpbiBmaWVsZHMgYW5kIGluc2VydHMgZGVmYXVsdHMgaWYgbmVlZGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrT3B0aW9ucyhvcHRpb25zID0ge30pIHtcbiAgICBpZiAob3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXMgPSB7fTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9ICAgIGNoaWxkTm9kZXNPYmogICAgICAgICB8IG9iamVjdCB3aXRoIG5vZGUgb2JqZWN0cywgaWQgYXMga2V5cywgc2FtZSBhcyBjaGlsZE5vZGVzIGV4Y2VwdCBpdCBhbHNvIGNvbnRhaW5zIGEgc291cmNlIG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9ICAgIGNoaWxkRWRnZXNPYmogICAgICAgICB8IG9iamVjdCB3aXRoIGVkZ2Ugb2JqZWN0cywgaWQgYXMga2V5c1xuICAgKiBAcGFyYW0ge0FycmF5fSAgICAgb3B0aW9ucyAgICAgICAgICAgICAgIHwgb2JqZWN0IHdpdGgge2NsdXN0ZXJOb2RlUHJvcGVydGllcywgY2x1c3RlckVkZ2VQcm9wZXJ0aWVzLCBwcm9jZXNzUHJvcGVydGllc31cbiAgICogQHBhcmFtIHtib29sZWFufSAgIHJlZnJlc2hEYXRhIHwgd2hlbiB0cnVlLCBkbyBub3Qgd3JhcCB1cFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NsdXN0ZXIoY2hpbGROb2Rlc09iaiwgY2hpbGRFZGdlc09iaiwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgLy8gUmVtb3ZlIG5vZGVzIHdoaWNoIGFyZSBhbHJlYWR5IGNsdXN0ZXJlZFxuICAgIGNvbnN0IHRtcE5vZGVzVG9SZW1vdmUgPSBbXTtcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBjaGlsZE5vZGVzT2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoaWxkTm9kZXNPYmosIG5vZGVJZCkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkTm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdG1wTm9kZXNUb1JlbW92ZS5wdXNoKG5vZGVJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IHRtcE5vZGVzVG9SZW1vdmUubGVuZ3RoOyArK24pIHtcbiAgICAgIGRlbGV0ZSBjaGlsZE5vZGVzT2JqW3RtcE5vZGVzVG9SZW1vdmVbbl1dO1xuICAgIH1cblxuICAgIC8vIGtpbGwgY29uZGl0aW9uOiBubyBub2RlcyBkb24ndCBib3RoZXJcbiAgICBpZiAoT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaikubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhbGxvdyBjbHVzdGVycyBvZiAxIGlmIG9wdGlvbnMgYWxsb3dcbiAgICBpZiAoXG4gICAgICBPYmplY3Qua2V5cyhjaGlsZE5vZGVzT2JqKS5sZW5ndGggPT0gMSAmJlxuICAgICAgb3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuYWxsb3dTaW5nbGVOb2RlQ2x1c3RlciAhPSB0cnVlXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGNsdXN0ZXJOb2RlUHJvcGVydGllcyA9IGRlZXBFeHRlbmQoe30sIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzKTtcblxuICAgIC8vIGNvbnN0cnVjdCB0aGUgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzXG4gICAgaWYgKG9wdGlvbnMucHJvY2Vzc1Byb3BlcnRpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZ2V0IHRoZSBjaGlsZE5vZGUgb3B0aW9uc1xuICAgICAgY29uc3QgY2hpbGROb2Rlc09wdGlvbnMgPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNoaWxkTm9kZXNPYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZE5vZGVzT2JqLCBub2RlSWQpKSB7XG4gICAgICAgICAgY29uc3QgY2xvbmVkT3B0aW9ucyA9IE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhjaGlsZE5vZGVzT2JqW25vZGVJZF0pO1xuICAgICAgICAgIGNoaWxkTm9kZXNPcHRpb25zLnB1c2goY2xvbmVkT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZ2V0IGNsdXN0ZXIgcHJvcGVydGllcyBiYXNlZCBvbiBjaGlsZE5vZGVzXG4gICAgICBjb25zdCBjaGlsZEVkZ2VzT3B0aW9ucyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBlZGdlSWQgaW4gY2hpbGRFZGdlc09iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoaWxkRWRnZXNPYmosIGVkZ2VJZCkpIHtcbiAgICAgICAgICAvLyB0aGVzZSBjbHVzdGVyIGVkZ2VzIHdpbGwgYmUgcmVtb3ZlZCBvbiBjcmVhdGlvbiBvZiB0aGUgY2x1c3Rlci5cbiAgICAgICAgICBpZiAoZWRnZUlkLnN1YnN0cigwLCAxMikgIT09IFwiY2x1c3RlckVkZ2U6XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lZE9wdGlvbnMgPSBOZXR3b3JrVXRpbC5jbG9uZU9wdGlvbnMoXG4gICAgICAgICAgICAgIGNoaWxkRWRnZXNPYmpbZWRnZUlkXSxcbiAgICAgICAgICAgICAgXCJlZGdlXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjaGlsZEVkZ2VzT3B0aW9ucy5wdXNoKGNsb25lZE9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMgPSBvcHRpb25zLnByb2Nlc3NQcm9wZXJ0aWVzKFxuICAgICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMsXG4gICAgICAgIGNoaWxkTm9kZXNPcHRpb25zLFxuICAgICAgICBjaGlsZEVkZ2VzT3B0aW9uc1xuICAgICAgKTtcbiAgICAgIGlmICghY2x1c3Rlck5vZGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRoZSBwcm9jZXNzUHJvcGVydGllcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gcHJvcGVydGllcyFcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgYW4gdW5pcXVlIGlkO1xuICAgIGlmIChjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkID0gXCJjbHVzdGVyOlwiICsgcmFuZG9tVVVJRCgpO1xuICAgIH1cbiAgICBjb25zdCBjbHVzdGVySWQgPSBjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWQ7XG5cbiAgICBpZiAoY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmxhYmVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcy5sYWJlbCA9IFwiY2x1c3RlclwiO1xuICAgIH1cblxuICAgIC8vIGdpdmUgdGhlIGNsdXN0ZXJOb2RlIGEgcG9zaXRpb24gaWYgaXQgZG9lcyBub3QgaGF2ZSBvbmUuXG4gICAgbGV0IHBvcyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcG9zID0gdGhpcy5fZ2V0Q2x1c3RlclBvc2l0aW9uKGNoaWxkTm9kZXNPYmopO1xuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnggPSBwb3MueDtcbiAgICB9XG4gICAgaWYgKGNsdXN0ZXJOb2RlUHJvcGVydGllcy55ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChwb3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwb3MgPSB0aGlzLl9nZXRDbHVzdGVyUG9zaXRpb24oY2hpbGROb2Rlc09iaik7XG4gICAgICB9XG4gICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMueSA9IHBvcy55O1xuICAgIH1cblxuICAgIC8vIGZvcmNlIHRoZSBJRCB0byByZW1haW4gdGhlIHNhbWVcbiAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWQgPSBjbHVzdGVySWQ7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGNsdXN0ZXIgTm9kZVxuICAgIC8vIE5vdGUgdGhhdCBhbGxvd1NpbmdsZU5vZGVDbHVzdGVyLCBpZiBwcmVzZW50LCBpcyBzdG9yZWQgaW4gdGhlIG9wdGlvbnMgYXMgd2VsbFxuICAgIGNvbnN0IGNsdXN0ZXJOb2RlID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVOb2RlKFxuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLFxuICAgICAgQ2x1c3RlclxuICAgICk7XG4gICAgY2x1c3Rlck5vZGUuY29udGFpbmVkTm9kZXMgPSBjaGlsZE5vZGVzT2JqO1xuICAgIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzID0gY2hpbGRFZGdlc09iajtcbiAgICAvLyBjYWNoZSBhIGNvcHkgZnJvbSB0aGUgY2x1c3RlciBlZGdlIHByb3BlcnRpZXMgaWYgd2UgaGF2ZSB0byByZWNvbm5lY3Qgb3RoZXJzIGxhdGVyIG9uXG4gICAgY2x1c3Rlck5vZGUuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzID0gb3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXM7XG5cbiAgICAvLyBmaW5hbGx5IHB1dCB0aGUgY2x1c3RlciBub2RlIGludG8gZ2xvYmFsXG4gICAgdGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJOb2RlUHJvcGVydGllcy5pZF0gPSBjbHVzdGVyTm9kZTtcblxuICAgIHRoaXMuX2NsdXN0ZXJFZGdlcyhcbiAgICAgIGNoaWxkTm9kZXNPYmosXG4gICAgICBjaGlsZEVkZ2VzT2JqLFxuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLFxuICAgICAgb3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXNcbiAgICApO1xuXG4gICAgLy8gc2V0IElEIHRvIHVuZGVmaW5lZCBzbyBubyBkdXBsaWNhdGVzIGFyaXNlXG4gICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gd3JhcCB1cFxuICAgIGlmIChyZWZyZXNoRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtFZGdlfSBlZGdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYmFja3VwRWRnZU9wdGlvbnMoZWRnZSkge1xuICAgIGlmICh0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPSB7IHBoeXNpY3M6IGVkZ2Uub3B0aW9ucy5waHlzaWNzIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZX0gZWRnZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc3RvcmVFZGdlKGVkZ2UpIHtcbiAgICBjb25zdCBvcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdO1xuICAgIGlmIChvcmlnaW5hbE9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZWRnZS5zZXRPcHRpb25zKHsgcGh5c2ljczogb3JpZ2luYWxPcHRpb25zLnBoeXNpY3MgfSk7XG4gICAgICBkZWxldGUgdGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlLmlkXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBub2RlIGlzIGEgY2x1c3Rlci5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBpc0NsdXN0ZXIobm9kZUlkKSB7XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS5pc0NsdXN0ZXIgPT09IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb2RlIGRvZXMgbm90IGV4aXN0LlwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgY2x1c3RlciBub2RlIGJhc2VkIG9uIHdoYXQncyBpbnNpZGVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNoaWxkTm9kZXNPYmogICAgfCBvYmplY3Qgd2l0aCBub2RlIG9iamVjdHMsIGlkIGFzIGtleXNcbiAgICogQHJldHVybnMge3t4OiBudW1iZXIsIHk6IG51bWJlcn19XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q2x1c3RlclBvc2l0aW9uKGNoaWxkTm9kZXNPYmopIHtcbiAgICBjb25zdCBjaGlsZEtleXMgPSBPYmplY3Qua2V5cyhjaGlsZE5vZGVzT2JqKTtcbiAgICBsZXQgbWluWCA9IGNoaWxkTm9kZXNPYmpbY2hpbGRLZXlzWzBdXS54O1xuICAgIGxldCBtYXhYID0gY2hpbGROb2Rlc09ialtjaGlsZEtleXNbMF1dLng7XG4gICAgbGV0IG1pblkgPSBjaGlsZE5vZGVzT2JqW2NoaWxkS2V5c1swXV0ueTtcbiAgICBsZXQgbWF4WSA9IGNoaWxkTm9kZXNPYmpbY2hpbGRLZXlzWzBdXS55O1xuICAgIGxldCBub2RlO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgY2hpbGRLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gY2hpbGROb2Rlc09ialtjaGlsZEtleXNbaV1dO1xuICAgICAgbWluWCA9IG5vZGUueCA8IG1pblggPyBub2RlLnggOiBtaW5YO1xuICAgICAgbWF4WCA9IG5vZGUueCA+IG1heFggPyBub2RlLnggOiBtYXhYO1xuICAgICAgbWluWSA9IG5vZGUueSA8IG1pblkgPyBub2RlLnkgOiBtaW5ZO1xuICAgICAgbWF4WSA9IG5vZGUueSA+IG1heFkgPyBub2RlLnkgOiBtYXhZO1xuICAgIH1cblxuICAgIHJldHVybiB7IHg6IDAuNSAqIChtaW5YICsgbWF4WCksIHk6IDAuNSAqIChtaW5ZICsgbWF4WSkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIGEgY2x1c3RlciBieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkVkZ2UuaWR9ICBjbHVzdGVyTm9kZUlkIHwgdGhlIElEIG9mIHRoZSBjbHVzdGVyIG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSByZWZyZXNoRGF0YSB8IHdyYXAgdXAgYWZ0ZXJ3YXJkcyBpZiBub3QgdHJ1ZVxuICAgKi9cbiAgb3BlbkNsdXN0ZXIoY2x1c3Rlck5vZGVJZCwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgLy8ga2lsbCBjb25kaXRpb25zXG4gICAgaWYgKGNsdXN0ZXJOb2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY2x1c3Rlck5vZGVJZCBzdXBwbGllZCB0byBvcGVuQ2x1c3Rlci5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgY2x1c3Rlck5vZGUgPSB0aGlzLmJvZHkubm9kZXNbY2x1c3Rlck5vZGVJZF07XG5cbiAgICBpZiAoY2x1c3Rlck5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSBjbHVzdGVyTm9kZUlkIHN1cHBsaWVkIHRvIG9wZW5DbHVzdGVyIGRvZXMgbm90IGV4aXN0LlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjbHVzdGVyTm9kZS5pc0NsdXN0ZXIgIT09IHRydWUgfHxcbiAgICAgIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZE5vZGVzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBub2RlOlwiICsgY2x1c3Rlck5vZGVJZCArIFwiIGlzIG5vdCBhIHZhbGlkIGNsdXN0ZXIuXCIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGN1cnJlbnQgY2x1c3RlciBpcyBjbHVzdGVyZWQgaXRzZWxmXG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLmZpbmROb2RlKGNsdXN0ZXJOb2RlSWQpO1xuICAgIGNvbnN0IHBhcmVudEluZGV4ID0gc3RhY2suaW5kZXhPZihjbHVzdGVyTm9kZUlkKSAtIDE7XG4gICAgaWYgKHBhcmVudEluZGV4ID49IDApIHtcbiAgICAgIC8vIEN1cnJlbnQgY2x1c3RlciBpcyBjbHVzdGVyZWQ7IHRyYW5zZmVyIGNvbnRhaW5lZCBub2RlcyBhbmQgZWRnZXMgdG8gcGFyZW50XG4gICAgICBjb25zdCBwYXJlbnRDbHVzdGVyTm9kZUlkID0gc3RhY2tbcGFyZW50SW5kZXhdO1xuICAgICAgY29uc3QgcGFyZW50Q2x1c3Rlck5vZGUgPSB0aGlzLmJvZHkubm9kZXNbcGFyZW50Q2x1c3Rlck5vZGVJZF07XG5cbiAgICAgIC8vIGNsdXN0ZXJpbmcuY2x1c3RlcmVkTm9kZXMgYW5kIGNsdXN0ZXJpbmcuY2x1c3RlcmVkRWRnZXMgcmVtYWluIHVuY2hhbmdlZFxuICAgICAgcGFyZW50Q2x1c3Rlck5vZGUuX29wZW5DaGlsZENsdXN0ZXIoY2x1c3Rlck5vZGVJZCk7XG5cbiAgICAgIC8vIEFsbCBjb21wb25lbnRzIG9mIGNoaWxkIGNsdXN0ZXIgbm9kZSBoYXZlIGJlZW4gdHJhbnNmZXJyZWQuIEl0IGNhbiBkaWUgbm93LlxuICAgICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1tjbHVzdGVyTm9kZUlkXTtcbiAgICAgIGlmIChyZWZyZXNoRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gbWFpbiBib2R5XG4gICAgY29uc3QgY29udGFpbmVkTm9kZXMgPSBjbHVzdGVyTm9kZS5jb250YWluZWROb2RlcztcbiAgICBjb25zdCBjb250YWluZWRFZGdlcyA9IGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzO1xuXG4gICAgLy8gYWxsb3cgdGhlIHVzZXIgdG8gcG9zaXRpb24gdGhlIG5vZGVzIGFmdGVyIHJlbGVhc2UuXG4gICAgaWYgKFxuICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvcHRpb25zLnJlbGVhc2VGdW5jdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5yZWxlYXNlRnVuY3Rpb24gPT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgY29uc3QgcG9zaXRpb25zID0ge307XG4gICAgICBjb25zdCBjbHVzdGVyUG9zaXRpb24gPSB7IHg6IGNsdXN0ZXJOb2RlLngsIHk6IGNsdXN0ZXJOb2RlLnkgfTtcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNvbnRhaW5lZE5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBjb25zdCBjb250YWluZWROb2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgICAgcG9zaXRpb25zW25vZGVJZF0gPSB7IHg6IGNvbnRhaW5lZE5vZGUueCwgeTogY29udGFpbmVkTm9kZS55IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld1Bvc2l0aW9ucyA9IG9wdGlvbnMucmVsZWFzZUZ1bmN0aW9uKGNsdXN0ZXJQb3NpdGlvbiwgcG9zaXRpb25zKTtcblxuICAgICAgZm9yIChjb25zdCBub2RlSWQgaW4gY29udGFpbmVkTm9kZXMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb250YWluZWROb2Rlcywgbm9kZUlkKSkge1xuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lZE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgICBpZiAobmV3UG9zaXRpb25zW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGFpbmVkTm9kZS54ID1cbiAgICAgICAgICAgICAgbmV3UG9zaXRpb25zW25vZGVJZF0ueCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBjbHVzdGVyTm9kZS54XG4gICAgICAgICAgICAgICAgOiBuZXdQb3NpdGlvbnNbbm9kZUlkXS54O1xuICAgICAgICAgICAgY29udGFpbmVkTm9kZS55ID1cbiAgICAgICAgICAgICAgbmV3UG9zaXRpb25zW25vZGVJZF0ueSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBjbHVzdGVyTm9kZS55XG4gICAgICAgICAgICAgICAgOiBuZXdQb3NpdGlvbnNbbm9kZUlkXS55O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb3B5IHRoZSBwb3NpdGlvbiBmcm9tIHRoZSBjbHVzdGVyXG4gICAgICBmb3JFYWNoKGNvbnRhaW5lZE5vZGVzLCBmdW5jdGlvbiAoY29udGFpbmVkTm9kZSkge1xuICAgICAgICAvLyBpbmhlcml0IHBvc2l0aW9uXG4gICAgICAgIGlmIChjb250YWluZWROb2RlLm9wdGlvbnMuZml4ZWQueCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBjb250YWluZWROb2RlLnggPSBjbHVzdGVyTm9kZS54O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250YWluZWROb2RlLm9wdGlvbnMuZml4ZWQueSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBjb250YWluZWROb2RlLnkgPSBjbHVzdGVyTm9kZS55O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyByZWxlYXNlIG5vZGVzXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gY29udGFpbmVkTm9kZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVkTm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuXG4gICAgICAgIC8vIGluaGVyaXQgc3BlZWRcbiAgICAgICAgY29udGFpbmVkTm9kZS52eCA9IGNsdXN0ZXJOb2RlLnZ4O1xuICAgICAgICBjb250YWluZWROb2RlLnZ5ID0gY2x1c3Rlck5vZGUudnk7XG5cbiAgICAgICAgY29udGFpbmVkTm9kZS5zZXRPcHRpb25zKHsgcGh5c2ljczogdHJ1ZSB9KTtcblxuICAgICAgICBkZWxldGUgdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvcHkgdGhlIGNsdXN0ZXJOb2RlIGVkZ2VzIGJlY2F1c2Ugd2UgY2Fubm90IGl0ZXJhdGUgb3ZlciBhbiBvYmplY3QgdGhhdCB3ZSBhZGQgb3IgcmVtb3ZlIGZyb20uXG4gICAgY29uc3QgZWRnZXNUb0JlRGVsZXRlZCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2x1c3Rlck5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVkZ2VzVG9CZURlbGV0ZWQucHVzaChjbHVzdGVyTm9kZS5lZGdlc1tpXSk7XG4gICAgfVxuXG4gICAgLy8gYWN0dWFsbHkgaGFuZGxpbmcgdGhlIGRlbGV0aW5nLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZXNUb0JlRGVsZXRlZC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzVG9CZURlbGV0ZWRbaV07XG4gICAgICBjb25zdCBvdGhlck5vZGVJZCA9IHRoaXMuX2dldENvbm5lY3RlZElkKGVkZ2UsIGNsdXN0ZXJOb2RlSWQpO1xuICAgICAgY29uc3Qgb3RoZXJOb2RlID0gdGhpcy5jbHVzdGVyZWROb2Rlc1tvdGhlck5vZGVJZF07XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCB0cmFuc2ZlcklkID0gZWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkc1tqXTtcbiAgICAgICAgY29uc3QgdHJhbnNmZXJFZGdlID0gdGhpcy5ib2R5LmVkZ2VzW3RyYW5zZmVySWRdO1xuICAgICAgICBpZiAodHJhbnNmZXJFZGdlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIGlmIHRoZSBvdGhlciBub2RlIGlzIGluIGFub3RoZXIgY2x1c3Rlciwgd2UgdHJhbnNmZXIgb3duZXJzaGlwIG9mIHRoaXMgZWRnZSB0byB0aGUgb3RoZXIgY2x1c3RlclxuICAgICAgICBpZiAob3RoZXJOb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyB0cmFuc2ZlciBvd25lcnNoaXA6XG4gICAgICAgICAgY29uc3Qgb3RoZXJDbHVzdGVyID0gdGhpcy5ib2R5Lm5vZGVzW290aGVyTm9kZS5jbHVzdGVySWRdO1xuICAgICAgICAgIG90aGVyQ2x1c3Rlci5jb250YWluZWRFZGdlc1t0cmFuc2ZlckVkZ2UuaWRdID0gdHJhbnNmZXJFZGdlO1xuXG4gICAgICAgICAgLy8gZGVsZXRlIGxvY2FsIHJlZmVyZW5jZVxuICAgICAgICAgIGRlbGV0ZSBjb250YWluZWRFZGdlc1t0cmFuc2ZlckVkZ2UuaWRdO1xuXG4gICAgICAgICAgLy8gZ2V0IHRvIGFuZCBmcm9tXG4gICAgICAgICAgbGV0IGZyb21JZCA9IHRyYW5zZmVyRWRnZS5mcm9tSWQ7XG4gICAgICAgICAgbGV0IHRvSWQgPSB0cmFuc2ZlckVkZ2UudG9JZDtcbiAgICAgICAgICBpZiAodHJhbnNmZXJFZGdlLnRvSWQgPT0gb3RoZXJOb2RlSWQpIHtcbiAgICAgICAgICAgIHRvSWQgPSBvdGhlck5vZGUuY2x1c3RlcklkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcm9tSWQgPSBvdGhlck5vZGUuY2x1c3RlcklkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgY2x1c3RlciBlZGdlIGZyb20gdGhlIG90aGVyQ2x1c3RlclxuICAgICAgICAgIHRoaXMuX2NyZWF0ZUNsdXN0ZXJlZEVkZ2UoXG4gICAgICAgICAgICBmcm9tSWQsXG4gICAgICAgICAgICB0b0lkLFxuICAgICAgICAgICAgdHJhbnNmZXJFZGdlLFxuICAgICAgICAgICAgb3RoZXJDbHVzdGVyLmNsdXN0ZXJFZGdlUHJvcGVydGllcyxcbiAgICAgICAgICAgIHsgaGlkZGVuOiBmYWxzZSwgcGh5c2ljczogdHJ1ZSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9yZXN0b3JlRWRnZSh0cmFuc2ZlckVkZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVkZ2UucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHRoZSByZWxlYXNpbmcgb2YgdGhlIGVkZ2VzXG4gICAgZm9yIChjb25zdCBlZGdlSWQgaW4gY29udGFpbmVkRWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkRWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgICAgdGhpcy5fcmVzdG9yZUVkZ2UoY29udGFpbmVkRWRnZXNbZWRnZUlkXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGNsdXN0ZXJOb2RlXG4gICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1tjbHVzdGVyTm9kZUlkXTtcblxuICAgIGlmIChyZWZyZXNoRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDbHVzdGVyLmlkfSBjbHVzdGVySWRcbiAgICogQHJldHVybnMge0FycmF5LjxOb2RlLmlkPn1cbiAgICovXG4gIGdldE5vZGVzSW5DbHVzdGVyKGNsdXN0ZXJJZCkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSBbXTtcbiAgICBpZiAodGhpcy5pc0NsdXN0ZXIoY2x1c3RlcklkKSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgY29udGFpbmVkTm9kZXMgPSB0aGlzLmJvZHkubm9kZXNbY2x1c3RlcklkXS5jb250YWluZWROb2RlcztcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNvbnRhaW5lZE5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBub2Rlc0FycmF5LnB1c2godGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0uaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGVzQXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGFjayBjbHVzdGVySWQncyB0aGF0IGEgY2VydGFpbiBub2RlIHJlc2lkZXMgaW4uIGNsdXN0ZXIgQSAtPiBjbHVzdGVyIEIgLT4gY2x1c3RlciBDIC0+IG5vZGVcbiAgICpcbiAgICogSWYgYSBub2RlIGNhbid0IGJlIGZvdW5kIGluIHRoZSBjaGFpbiwgcmV0dXJuIGFuIGVtcHR5IGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5vZGVJZFxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBmaW5kTm9kZShub2RlSWQpIHtcbiAgICBjb25zdCBzdGFjayA9IFtdO1xuICAgIGNvbnN0IG1heCA9IDEwMDtcbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAgbGV0IG5vZGU7XG5cbiAgICB3aGlsZSAodGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQgJiYgY291bnRlciA8IG1heCkge1xuICAgICAgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuICAgICAgc3RhY2sucHVzaChub2RlLmlkKTtcblxuICAgICAgbm9kZUlkID0gdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdLmNsdXN0ZXJJZDtcbiAgICAgIGNvdW50ZXIrKztcbiAgICB9XG5cbiAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuICAgIHN0YWNrLnB1c2gobm9kZS5pZCk7XG5cbiAgICBzdGFjay5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzaW5nIGEgY2x1c3RlcmVkIG5vZGVJZCwgdXBkYXRlIHdpdGggdGhlIG5ldyBvcHRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gY2x1c3RlcmVkTm9kZUlkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdPcHRpb25zXG4gICAqL1xuICB1cGRhdGVDbHVzdGVyZWROb2RlKGNsdXN0ZXJlZE5vZGVJZCwgbmV3T3B0aW9ucykge1xuICAgIGlmIChjbHVzdGVyZWROb2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY2x1c3RlcmVkTm9kZUlkIHN1cHBsaWVkIHRvIHVwZGF0ZUNsdXN0ZXJlZE5vZGUuXCIpO1xuICAgIH1cbiAgICBpZiAobmV3T3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBuZXdPcHRpb25zIHN1cHBsaWVkIHRvIHVwZGF0ZUNsdXN0ZXJlZE5vZGUuXCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJlZE5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSBjbHVzdGVyZWROb2RlSWQgc3VwcGxpZWQgdG8gdXBkYXRlQ2x1c3RlcmVkTm9kZSBkb2VzIG5vdCBleGlzdC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkubm9kZXNbY2x1c3RlcmVkTm9kZUlkXS5zZXRPcHRpb25zKG5ld09wdGlvbnMpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gIH1cblxuICAvKipcbiAgICogVXNpbmcgYSBiYXNlIGVkZ2VJZCwgdXBkYXRlIGFsbCByZWxhdGVkIGNsdXN0ZXJlZCBlZGdlcyB3aXRoIHRoZSBuZXcgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBzdGFydEVkZ2VJZFxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3T3B0aW9uc1xuICAgKi9cbiAgdXBkYXRlRWRnZShzdGFydEVkZ2VJZCwgbmV3T3B0aW9ucykge1xuICAgIGlmIChzdGFydEVkZ2VJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdGFydEVkZ2VJZCBzdXBwbGllZCB0byB1cGRhdGVFZGdlLlwiKTtcbiAgICB9XG4gICAgaWYgKG5ld09wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbmV3T3B0aW9ucyBzdXBwbGllZCB0byB1cGRhdGVFZGdlLlwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYm9keS5lZGdlc1tzdGFydEVkZ2VJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0YXJ0RWRnZUlkIHN1cHBsaWVkIHRvIHVwZGF0ZUVkZ2UgZG9lcyBub3QgZXhpc3QuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbEVkZ2VJZHMgPSB0aGlzLmdldENsdXN0ZXJlZEVkZ2VzKHN0YXJ0RWRnZUlkKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbEVkZ2VJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbYWxsRWRnZUlkc1tpXV07XG4gICAgICBlZGdlLnNldE9wdGlvbnMobmV3T3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3RhY2sgb2YgY2x1c3RlckVkZ2VJZCdzICgrYmFzZSBlZGdlaWQpIHRoYXQgYSBiYXNlIGVkZ2UgaXMgdGhlIHNhbWUgYXMuIGNsdXN0ZXIgZWRnZSBDIC0+IGNsdXN0ZXIgZWRnZSBCIC0+IGNsdXN0ZXIgZWRnZSBBIC0+IGJhc2UgZWRnZShlZGdlSWQpXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkVkZ2UuaWR9IGVkZ2VJZFxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHZpcy5FZGdlLmlkPn1cbiAgICovXG4gIGdldENsdXN0ZXJlZEVkZ2VzKGVkZ2VJZCkge1xuICAgIGNvbnN0IHN0YWNrID0gW107XG4gICAgY29uc3QgbWF4ID0gMTAwO1xuICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgIHdoaWxlIChcbiAgICAgIGVkZ2VJZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBjb3VudGVyIDwgbWF4XG4gICAgKSB7XG4gICAgICBzdGFjay5wdXNoKHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdLmlkKTtcbiAgICAgIGVkZ2VJZCA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdLmVkZ2VSZXBsYWNlZEJ5SWQ7XG4gICAgICBjb3VudGVyKys7XG4gICAgfVxuICAgIHN0YWNrLnJldmVyc2UoKTtcbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBiYXNlIGVkZ2UgaWQgb2YgY2x1c3RlckVkZ2VJZC4gY2x1c3RlciBlZGdlIChjbHVzdGVyZWRFZGdlSWQpIC0+IGNsdXN0ZXIgZWRnZSBCIC0+IGNsdXN0ZXIgZWRnZSBDIC0+IGJhc2UgZWRnZVxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBjbHVzdGVyZWRFZGdlSWRcbiAgICogQHJldHVybnMge3Zpcy5FZGdlLmlkfSBiYXNlRWRnZUlkXG4gICAqXG4gICAqIFRPRE86IGRlcHJlY2F0ZSBpbiA1LjAuMC4gTWV0aG9kIGdldEJhc2VFZGdlcygpIGlzIHRoZSBjb3JyZWN0IG9uZSB0byB1c2UuXG4gICAqL1xuICBnZXRCYXNlRWRnZShjbHVzdGVyZWRFZGdlSWQpIHtcbiAgICAvLyBKdXN0IGtsdWRnZSB0aGlzIGJ5IHJldHVybmluZyB0aGUgZmlyc3QgYmFzZSBlZGdlIGlkIGZvdW5kXG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZUVkZ2VzKGNsdXN0ZXJlZEVkZ2VJZClbMF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCByZWd1bGFyIGVkZ2VzIGZvciB0aGlzIGNsdXN0ZXJlZCBlZGdlIGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBjbHVzdGVyZWRFZGdlSWRcbiAgICogQHJldHVybnMge0FycmF5Ljx2aXMuRWRnZS5pZD59IGFsbCBiYXNlRWRnZUlkJ3MgdW5kZXIgdGhpcyBjbHVzdGVyZWQgZWRnZVxuICAgKi9cbiAgZ2V0QmFzZUVkZ2VzKGNsdXN0ZXJlZEVkZ2VJZCkge1xuICAgIGNvbnN0IElkc1RvSGFuZGxlID0gW2NsdXN0ZXJlZEVkZ2VJZF07XG4gICAgY29uc3QgZG9uZUlkcyA9IFtdO1xuICAgIGNvbnN0IGZvdW5kSWRzID0gW107XG4gICAgY29uc3QgbWF4ID0gMTAwO1xuICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgIHdoaWxlIChJZHNUb0hhbmRsZS5sZW5ndGggPiAwICYmIGNvdW50ZXIgPCBtYXgpIHtcbiAgICAgIGNvbnN0IG5leHRJZCA9IElkc1RvSGFuZGxlLnBvcCgpO1xuICAgICAgaWYgKG5leHRJZCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTsgLy8gUGFyYW5vaWEgaGVyZSBhbmQgb253YXJkc1xuICAgICAgY29uc3QgbmV4dEVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbbmV4dElkXTtcbiAgICAgIGlmIChuZXh0RWRnZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgIGNvdW50ZXIrKztcblxuICAgICAgY29uc3QgcmVwbGFjaW5nSWRzID0gbmV4dEVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHM7XG4gICAgICBpZiAocmVwbGFjaW5nSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gbmV4dElkIGlzIGEgYmFzZSBpZFxuICAgICAgICBmb3VuZElkcy5wdXNoKG5leHRJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbm90aGVyIGNsdXN0ZXIgZWRnZSwgdW5yYXZlbCB0aGlzIG9uZSBhcyB3ZWxsXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVwbGFjaW5nSWRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY29uc3QgcmVwbGFjaW5nSWQgPSByZXBsYWNpbmdJZHNbaV07XG5cbiAgICAgICAgICAvLyBEb24ndCBhZGQgaWYgYWxyZWFkeSBoYW5kbGVkXG4gICAgICAgICAgLy8gVE9ETzogbmV2ZXIgdHJpZ2dlcnM7IGZpbmQgYSB0ZXN0LWNhc2Ugd2hpY2ggZG9lc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIElkc1RvSGFuZGxlLmluZGV4T2YocmVwbGFjaW5nSWRzKSAhPT0gLTEgfHxcbiAgICAgICAgICAgIGRvbmVJZHMuaW5kZXhPZihyZXBsYWNpbmdJZHMpICE9PSAtMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgSWRzVG9IYW5kbGUucHVzaChyZXBsYWNpbmdJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZG9uZUlkcy5wdXNoKG5leHRJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSWQgdGhlIG5vZGUgaXMgY29ubmVjdGVkIHRvXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkVkZ2V9IGVkZ2VcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q29ubmVjdGVkSWQoZWRnZSwgbm9kZUlkKSB7XG4gICAgaWYgKGVkZ2UudG9JZCAhPSBub2RlSWQpIHtcbiAgICAgIHJldHVybiBlZGdlLnRvSWQ7XG4gICAgfSBlbHNlIGlmIChlZGdlLmZyb21JZCAhPSBub2RlSWQpIHtcbiAgICAgIHJldHVybiBlZGdlLmZyb21JZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVkZ2UuZnJvbUlkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXZSBkZXRlcm1pbmUgaG93IG1hbnkgY29ubmVjdGlvbnMgZGVub3RlIGFuIGltcG9ydGFudCBodWIuXG4gICAqIFdlIHRha2UgdGhlIG1lYW4gKyAyKnN0ZCBhcyB0aGUgaW1wb3J0YW50IGh1YiBzaXplLiAoQXNzdW1pbmcgYSBub3JtYWwgZGlzdHJpYnV0aW9uIG9mIGRhdGEsIH4yLjIlKVxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEh1YlNpemUoKSB7XG4gICAgbGV0IGF2ZXJhZ2UgPSAwO1xuICAgIGxldCBhdmVyYWdlU3F1YXJlZCA9IDA7XG4gICAgbGV0IGh1YkNvdW50ZXIgPSAwO1xuICAgIGxldCBsYXJnZXN0SHViID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV07XG4gICAgICBpZiAobm9kZS5lZGdlcy5sZW5ndGggPiBsYXJnZXN0SHViKSB7XG4gICAgICAgIGxhcmdlc3RIdWIgPSBub2RlLmVkZ2VzLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGF2ZXJhZ2UgKz0gbm9kZS5lZGdlcy5sZW5ndGg7XG4gICAgICBhdmVyYWdlU3F1YXJlZCArPSBNYXRoLnBvdyhub2RlLmVkZ2VzLmxlbmd0aCwgMik7XG4gICAgICBodWJDb3VudGVyICs9IDE7XG4gICAgfVxuICAgIGF2ZXJhZ2UgPSBhdmVyYWdlIC8gaHViQ291bnRlcjtcbiAgICBhdmVyYWdlU3F1YXJlZCA9IGF2ZXJhZ2VTcXVhcmVkIC8gaHViQ291bnRlcjtcblxuICAgIGNvbnN0IHZhcmlhbmNlID0gYXZlcmFnZVNxdWFyZWQgLSBNYXRoLnBvdyhhdmVyYWdlLCAyKTtcbiAgICBjb25zdCBzdGFuZGFyZERldmlhdGlvbiA9IE1hdGguc3FydCh2YXJpYW5jZSk7XG5cbiAgICBsZXQgaHViVGhyZXNob2xkID0gTWF0aC5mbG9vcihhdmVyYWdlICsgMiAqIHN0YW5kYXJkRGV2aWF0aW9uKTtcblxuICAgIC8vIGFsd2F5cyBoYXZlIGF0IGxlYXN0IG9uZSB0byBjbHVzdGVyXG4gICAgaWYgKGh1YlRocmVzaG9sZCA+IGxhcmdlc3RIdWIpIHtcbiAgICAgIGh1YlRocmVzaG9sZCA9IGxhcmdlc3RIdWI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh1YlRocmVzaG9sZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZWRnZSBmb3IgdGhlIGNsdXN0ZXIgcmVwcmVzZW50YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gZnJvbUlkXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gdG9JZFxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlfSBiYXNlRWRnZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY2x1c3RlckVkZ2VQcm9wZXJ0aWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBleHRyYU9wdGlvbnNcbiAgICogQHJldHVybnMge0VkZ2V9IG5ld2x5IGNyZWF0ZWQgY2x1c3RlcmVkIGVkZ2VcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVDbHVzdGVyZWRFZGdlKFxuICAgIGZyb21JZCxcbiAgICB0b0lkLFxuICAgIGJhc2VFZGdlLFxuICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllcyxcbiAgICBleHRyYU9wdGlvbnNcbiAgKSB7XG4gICAgLy8gY29weSB0aGUgb3B0aW9ucyBvZiB0aGUgZWRnZSB3ZSB3aWxsIHJlcGxhY2VcbiAgICBjb25zdCBjbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKGJhc2VFZGdlLCBcImVkZ2VcIik7XG4gICAgLy8gbWFrZSBzdXJlIHRoZSBwcm9wZXJ0aWVzIG9mIGNsdXN0ZXJFZGdlcyBhcmUgc3VwZXJpbXBvc2VkIG9uIGl0XG4gICAgZGVlcEV4dGVuZChjbG9uZWRPcHRpb25zLCBjbHVzdGVyRWRnZVByb3BlcnRpZXMpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBlZGdlXG4gICAgY2xvbmVkT3B0aW9ucy5mcm9tID0gZnJvbUlkO1xuICAgIGNsb25lZE9wdGlvbnMudG8gPSB0b0lkO1xuICAgIGNsb25lZE9wdGlvbnMuaWQgPSBcImNsdXN0ZXJFZGdlOlwiICsgcmFuZG9tVVVJRCgpO1xuXG4gICAgLy8gYXBwbHkgdGhlIGVkZ2Ugc3BlY2lmaWMgb3B0aW9ucyB0byBpdCBpZiBzcGVjaWZpZWRcbiAgICBpZiAoZXh0cmFPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlZXBFeHRlbmQoY2xvbmVkT3B0aW9ucywgZXh0cmFPcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdFZGdlID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVFZGdlKGNsb25lZE9wdGlvbnMpO1xuICAgIG5ld0VkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMgPSBbYmFzZUVkZ2UuaWRdO1xuICAgIG5ld0VkZ2UuY29ubmVjdCgpO1xuXG4gICAgLy8gUmVnaXN0ZXIgdGhlIG5ldyBlZGdlXG4gICAgdGhpcy5ib2R5LmVkZ2VzW25ld0VkZ2UuaWRdID0gbmV3RWRnZTtcblxuICAgIHJldHVybiBuZXdFZGdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgcGFzc2VkIGNoaWxkIG5vZGVzIGFuZCBlZGdlcyB0byB0aGUgZ2l2ZW4gY2x1c3RlciBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IE5vZGV9IGNoaWxkTm9kZXMgIGhhc2ggb2Ygbm9kZXMgb3Igc2luZ2xlIG5vZGUgdG8gYWRkIGluIGNsdXN0ZXJcbiAgICogQHBhcmFtIHtvYmplY3QgfCBFZGdlfSBjaGlsZEVkZ2VzICBoYXNoIG9mIGVkZ2VzIG9yIHNpbmdsZSBlZGdlIHRvIHRha2UgaW50byBhY2NvdW50IHdoZW4gY2x1c3RlcmluZ1xuICAgKiBAcGFyYW0ge05vZGV9IGNsdXN0ZXJOb2RlICBjbHVzdGVyIG5vZGUgdG8gYWRkIG5vZGVzIGFuZCBlZGdlcyB0b1xuICAgKiBAcGFyYW0ge29iamVjdH0gW2NsdXN0ZXJFZGdlUHJvcGVydGllc11cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbHVzdGVyRWRnZXMoY2hpbGROb2RlcywgY2hpbGRFZGdlcywgY2x1c3Rlck5vZGUsIGNsdXN0ZXJFZGdlUHJvcGVydGllcykge1xuICAgIGlmIChjaGlsZEVkZ2VzIGluc3RhbmNlb2YgRWRnZSkge1xuICAgICAgY29uc3QgZWRnZSA9IGNoaWxkRWRnZXM7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIG9ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICBjaGlsZEVkZ2VzID0gb2JqO1xuICAgIH1cblxuICAgIGlmIChjaGlsZE5vZGVzIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZXM7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIG9ialtub2RlLmlkXSA9IG5vZGU7XG4gICAgICBjaGlsZE5vZGVzID0gb2JqO1xuICAgIH1cblxuICAgIGlmIChjbHVzdGVyTm9kZSA9PT0gdW5kZWZpbmVkIHx8IGNsdXN0ZXJOb2RlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJfY2x1c3RlckVkZ2VzOiBwYXJhbWV0ZXIgY2x1c3Rlck5vZGUgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGNsdXN0ZXJFZGdlUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUYWtlIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIGZyb20gdGhlIGNsdXN0ZXIgbm9kZVxuICAgICAgY2x1c3RlckVkZ2VQcm9wZXJ0aWVzID0gY2x1c3Rlck5vZGUuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIC8vIGNyZWF0ZSB0aGUgbmV3IGVkZ2VzIHRoYXQgd2lsbCBjb25uZWN0IHRvIHRoZSBjbHVzdGVyLlxuICAgIC8vIEFsbCBzZWxmLXJlZmVyZW5jaW5nIGVkZ2VzIHdpbGwgYmUgYWRkZWQgdG8gY2hpbGRFZGdlcyBoZXJlLlxuICAgIHRoaXMuX2NyZWF0ZUNsdXN0ZXJFZGdlcyhcbiAgICAgIGNoaWxkTm9kZXMsXG4gICAgICBjaGlsZEVkZ2VzLFxuICAgICAgY2x1c3Rlck5vZGUsXG4gICAgICBjbHVzdGVyRWRnZVByb3BlcnRpZXNcbiAgICApO1xuXG4gICAgLy8gZGlzYWJsZSB0aGUgY2hpbGRFZGdlc1xuICAgIGZvciAoY29uc3QgZWRnZUlkIGluIGNoaWxkRWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hpbGRFZGdlcywgZWRnZUlkKSkge1xuICAgICAgICBpZiAodGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgICAgICAgICAvLyBjYWNoZSB0aGUgb3B0aW9ucyBiZWZvcmUgY2hhbmdpbmdcbiAgICAgICAgICB0aGlzLl9iYWNrdXBFZGdlT3B0aW9ucyhlZGdlKTtcbiAgICAgICAgICAvLyBkaXNhYmxlIHBoeXNpY3MgYW5kIGhpZGUgdGhlIGVkZ2VcbiAgICAgICAgICBlZGdlLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRpc2FibGUgdGhlIGNoaWxkTm9kZXNcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBjaGlsZE5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoaWxkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdID0ge1xuICAgICAgICAgIGNsdXN0ZXJJZDogY2x1c3Rlck5vZGUuaWQsXG4gICAgICAgICAgbm9kZTogdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGluIHdoaWNoIGNsdXN0ZXIgZ2l2ZW4gbm9kZUlkIHJlc2lkZXMuXG4gICAqXG4gICAqIElmIG5vdCBpbiBjbHVzdGVyLCByZXR1cm4gdW5kZWZpbmVkLlxuICAgKlxuICAgKiBOT1RFOiBJZiB5b3Uga25vdyBhIGNsZWFuZXIgd2F5IHRvIGRvIHRoaXMsIHBsZWFzZSBlbmxpZ2h0ZW4gbWUgKHdpbXJpam5kZXJzKS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge05vZGV8dW5kZWZpbmVkfSBOb2RlIGluc3RhbmNlIGZvciBjbHVzdGVyLCBpZiBwcmVzZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q2x1c3Rlck5vZGVGb3JOb2RlKG5vZGVJZCkge1xuICAgIGlmIChub2RlSWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBjbHVzdGVyZWROb2RlID0gdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdO1xuXG4gICAgLy8gTk9URTogSWYgbm8gY2x1c3RlciBpbmZvIGZvdW5kLCBpdCBzaG91bGQgYWN0dWFsbHkgYmUgYW4gZXJyb3JcbiAgICBpZiAoY2x1c3RlcmVkTm9kZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNsdXN0ZXJJZCA9IGNsdXN0ZXJlZE5vZGUuY2x1c3RlcklkO1xuICAgIGlmIChjbHVzdGVySWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB0aGlzLmJvZHkubm9kZXNbY2x1c3RlcklkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGNvbmRpdGlvbmFsbHkgcmVtb3ZpbmcgaXRlbXMgaW4gYXJyYXlcbiAgICpcbiAgICogRG9uZSBsaWtlIHRoaXMgYmVjYXVzZSBBcnJheS5maWx0ZXIoKSBpcyBub3QgZnVsbHkgc3VwcG9ydGVkIGJ5IGFsbCBJRSdzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpbHRlcihhcnIsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgcmV0ID0gW107XG5cbiAgICBmb3JFYWNoKGFyciwgKGl0ZW0pID0+IHtcbiAgICAgIGlmIChjYWxsYmFjayhpdGVtKSkge1xuICAgICAgICByZXQucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogU2NhbiBhbGwgZWRnZXMgZm9yIGNoYW5nZXMgaW4gY2x1c3RlcmluZyBhbmQgYWRqdXN0IHRoaXMgaWYgbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBDYWxsIHRoaXMgKGludGVybmFsbHkpIGFmdGVyIHRoZXJlIGhhcyBiZWVuIGEgY2hhbmdlIGluIG5vZGUgb3IgZWRnZSBkYXRhLlxuICAgKlxuICAgKiBQcmU6IFN0YXRlcyBvZiB0aGlzLmJvZHkubm9kZXMgYW5kIHRoaXMuYm9keS5lZGdlcyBjb25zaXN0ZW50XG4gICAqIFByZTogdGhpcy5jbHVzdGVyZWROb2RlcyBhbmQgdGhpcy5jbHVzdGVyZWRFZGdlIGNvbnNpc3RlbnQgd2l0aCBjb250YWluZWROb2RlcyBhbmQgY29udGFpbmVkRWRnZXNcbiAgICogICAgICBvZiBjbHVzdGVyIG5vZGVzLlxuICAgKi9cbiAgX3VwZGF0ZVN0YXRlKCkge1xuICAgIGxldCBub2RlSWQ7XG4gICAgY29uc3QgZGVsZXRlZE5vZGVJZHMgPSBbXTtcbiAgICBjb25zdCBkZWxldGVkRWRnZUlkcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogVXRpbGl0eSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgY2x1c3RlcmluZyBub2RlcyBvbmx5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBjbHVzdGVyIG5vZGVcbiAgICAgKi9cbiAgICBjb25zdCBlYWNoQ2x1c3Rlck5vZGUgPSAoY2FsbGJhY2spID0+IHtcbiAgICAgIGZvckVhY2godGhpcy5ib2R5Lm5vZGVzLCAobm9kZSkgPT4ge1xuICAgICAgICBpZiAobm9kZS5pc0NsdXN0ZXIgPT09IHRydWUpIHtcbiAgICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vXG4gICAgLy8gUmVtb3ZlIGRlbGV0ZWQgcmVndWxhciBub2RlcyBmcm9tIGNsdXN0ZXJpbmdcbiAgICAvL1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBkZWxldGVkIG5vZGVzXG4gICAgZm9yIChub2RlSWQgaW4gdGhpcy5jbHVzdGVyZWROb2Rlcykge1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jbHVzdGVyZWROb2Rlcywgbm9kZUlkKSlcbiAgICAgICAgY29udGludWU7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG5cbiAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlZE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBub2RlcyBmcm9tIGNsdXN0ZXIgbm9kZXNcbiAgICBlYWNoQ2x1c3Rlck5vZGUoZnVuY3Rpb24gKGNsdXN0ZXJOb2RlKSB7XG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGRlbGV0ZWROb2RlSWRzLmxlbmd0aDsgbisrKSB7XG4gICAgICAgIGRlbGV0ZSBjbHVzdGVyTm9kZS5jb250YWluZWROb2Rlc1tkZWxldGVkTm9kZUlkc1tuXV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgbm9kZXMgZnJvbSBjbHVzdGVyIGxpc3RcbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IGRlbGV0ZWROb2RlSWRzLmxlbmd0aDsgbisrKSB7XG4gICAgICBkZWxldGUgdGhpcy5jbHVzdGVyZWROb2Rlc1tkZWxldGVkTm9kZUlkc1tuXV07XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZW1vdmUgZGVsZXRlZCBlZGdlcyBmcm9tIGNsdXN0ZXJpbmdcbiAgICAvL1xuXG4gICAgLy8gQWRkIHRoZSBkZWxldGVkIGNsdXN0ZXJlZCBlZGdlcyB0byB0aGUgbGlzdFxuICAgIGZvckVhY2godGhpcy5jbHVzdGVyZWRFZGdlcywgKGVkZ2VJZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICAgICAgaWYgKGVkZ2UgPT09IHVuZGVmaW5lZCB8fCAhZWRnZS5lbmRQb2ludHNWYWxpZCgpKSB7XG4gICAgICAgIGRlbGV0ZWRFZGdlSWRzW2VkZ2VJZF0gPSBlZGdlSWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDbHVzdGVyIG5vZGVzIGNhbiBhbHNvIGNvbnRhaW4gZWRnZXMgd2hpY2ggYXJlIG5vdCBjbHVzdGVyZWQsXG4gICAgLy8gaS5lLiBub2RlcyAxLTIgd2l0aGluIGNsdXN0ZXIgd2l0aCBhbiBlZGdlIGluIGJldHdlZW4uXG4gICAgLy8gU28gdGhlIGNsdXN0ZXIgbm9kZXMgYWxzbyBuZWVkIHRvIGJlIHNjYW5uZWQgZm9yIGludmFsaWQgZWRnZXNcbiAgICBlYWNoQ2x1c3Rlck5vZGUoZnVuY3Rpb24gKGNsdXN0ZXJOb2RlKSB7XG4gICAgICBmb3JFYWNoKGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzLCAoZWRnZSwgZWRnZUlkKSA9PiB7XG4gICAgICAgIGlmICghZWRnZS5lbmRQb2ludHNWYWxpZCgpICYmICFkZWxldGVkRWRnZUlkc1tlZGdlSWRdKSB7XG4gICAgICAgICAgZGVsZXRlZEVkZ2VJZHNbZWRnZUlkXSA9IGVkZ2VJZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBBbHNvIHNjYW4gZm9yIGNsdXN0ZXIgZWRnZXMgd2hpY2ggbmVlZCB0byBiZSByZW1vdmVkIGluIHRoZSBhY3RpdmUgbGlzdC5cbiAgICAvLyBSZWd1bGFyIGVkZ2VzIGhhdmUgYmVlbiByZW1vdmVkIGJlZm9yZWhhbmQsIHNvIHRoaXMgb25seSBwaWNrcyB1cCB0aGUgY2x1c3RlciBlZGdlcy5cbiAgICBmb3JFYWNoKHRoaXMuYm9keS5lZGdlcywgKGVkZ2UsIGVkZ2VJZCkgPT4ge1xuICAgICAgLy8gRXhwbGljaXRseSBzY2FuIHRoZSBjb250YWluZWQgZWRnZXMgZm9yIHZhbGlkaXR5XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgICBjb25zdCByZXBsYWNlZElkcyA9IGVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHM7XG4gICAgICBpZiAocmVwbGFjZWRJZHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgbnVtVmFsaWQgPSAwO1xuXG4gICAgICAgIGZvckVhY2gocmVwbGFjZWRJZHMsIChjb250YWluZWRFZGdlSWQpID0+IHtcbiAgICAgICAgICBjb25zdCBjb250YWluZWRFZGdlID0gdGhpcy5ib2R5LmVkZ2VzW2NvbnRhaW5lZEVkZ2VJZF07XG5cbiAgICAgICAgICBpZiAoY29udGFpbmVkRWRnZSAhPT0gdW5kZWZpbmVkICYmIGNvbnRhaW5lZEVkZ2UuZW5kUG9pbnRzVmFsaWQoKSkge1xuICAgICAgICAgICAgbnVtVmFsaWQgKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlzVmFsaWQgPSBudW1WYWxpZCA+IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICghZWRnZS5lbmRQb2ludHNWYWxpZCgpIHx8ICFpc1ZhbGlkKSB7XG4gICAgICAgIGRlbGV0ZWRFZGdlSWRzW2VkZ2VJZF0gPSBlZGdlSWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgZWRnZXMgZnJvbSBjbHVzdGVyIG5vZGVzXG4gICAgZWFjaENsdXN0ZXJOb2RlKChjbHVzdGVyTm9kZSkgPT4ge1xuICAgICAgZm9yRWFjaChkZWxldGVkRWRnZUlkcywgKGRlbGV0ZWRFZGdlSWQpID0+IHtcbiAgICAgICAgZGVsZXRlIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzW2RlbGV0ZWRFZGdlSWRdO1xuXG4gICAgICAgIGZvckVhY2goY2x1c3Rlck5vZGUuZWRnZXMsIChlZGdlLCBtKSA9PiB7XG4gICAgICAgICAgaWYgKGVkZ2UuaWQgPT09IGRlbGV0ZWRFZGdlSWQpIHtcbiAgICAgICAgICAgIGNsdXN0ZXJOb2RlLmVkZ2VzW21dID0gbnVsbDsgLy8gRG9uJ3Qgd2FudCB0byBkaXJlY3RseSBkZWxldGUgaGVyZSwgYmVjYXVzZSBpbiB0aGUgbG9vcFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMgPSB0aGlzLl9maWx0ZXIoXG4gICAgICAgICAgICBlZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzLFxuICAgICAgICAgICAgZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgICAgICAgIHJldHVybiAhZGVsZXRlZEVkZ2VJZHNbaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENsZWFuIHVwIHRoZSBudWxsc1xuICAgICAgICBjbHVzdGVyTm9kZS5lZGdlcyA9IHRoaXMuX2ZpbHRlcihjbHVzdGVyTm9kZS5lZGdlcywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gaXRlbSAhPT0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlbW92ZSBmcm9tIGNsdXN0ZXIgbGlzdFxuICAgIGZvckVhY2goZGVsZXRlZEVkZ2VJZHMsIChlZGdlSWQpID0+IHtcbiAgICAgIGRlbGV0ZSB0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2VJZF07XG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgY2x1c3RlciBlZGdlcyBmcm9tIGFjdGl2ZSBsaXN0ICh0aGlzLmJvZHkuZWRnZXMpLlxuICAgIC8vIGRlbGV0ZWRFZGdlSWRzIHN0aWxsIGNvbnRhaW5zIGlkIG9mIHJlZ3VsYXIgZWRnZXMsIGJ1dCB0aGVzZSBzaG91bGQgYWxsXG4gICAgLy8gYmUgZ29uZSB3aGVuIHlvdSByZWFjaCBoZXJlLlxuICAgIGZvckVhY2goZGVsZXRlZEVkZ2VJZHMsIChlZGdlSWQpID0+IHtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgICB9KTtcblxuICAgIC8vXG4gICAgLy8gQ2hlY2sgY2hhbmdlZCBjbHVzdGVyIHN0YXRlIG9mIGVkZ2VzXG4gICAgLy9cblxuICAgIC8vIEl0ZXJhdGluZyBvdmVyIGtleXMgaGVyZSwgYmVjYXVzZSBlZGdlcyBtYXkgYmUgcmVtb3ZlZCBpbiB0aGUgbG9vcFxuICAgIGNvbnN0IGlkcyA9IE9iamVjdC5rZXlzKHRoaXMuYm9keS5lZGdlcyk7XG4gICAgZm9yRWFjaChpZHMsIChlZGdlSWQpID0+IHtcbiAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcblxuICAgICAgY29uc3Qgc2hvdWxkQmVDbHVzdGVyZWQgPVxuICAgICAgICB0aGlzLl9pc0NsdXN0ZXJlZE5vZGUoZWRnZS5mcm9tSWQpIHx8IHRoaXMuX2lzQ2x1c3RlcmVkTm9kZShlZGdlLnRvSWQpO1xuICAgICAgaWYgKHNob3VsZEJlQ2x1c3RlcmVkID09PSB0aGlzLl9pc0NsdXN0ZXJlZEVkZ2UoZWRnZS5pZCkpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBhbGwgaXMgd2VsbFxuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkQmVDbHVzdGVyZWQpIHtcbiAgICAgICAgLy8gYWRkIGVkZ2UgdG8gY2x1c3RlcmluZ1xuICAgICAgICBjb25zdCBjbHVzdGVyRnJvbSA9IHRoaXMuX2dldENsdXN0ZXJOb2RlRm9yTm9kZShlZGdlLmZyb21JZCk7XG4gICAgICAgIGlmIChjbHVzdGVyRnJvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fY2x1c3RlckVkZ2VzKHRoaXMuYm9keS5ub2Rlc1tlZGdlLmZyb21JZF0sIGVkZ2UsIGNsdXN0ZXJGcm9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsdXN0ZXJUbyA9IHRoaXMuX2dldENsdXN0ZXJOb2RlRm9yTm9kZShlZGdlLnRvSWQpO1xuICAgICAgICBpZiAoY2x1c3RlclRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9jbHVzdGVyRWRnZXModGhpcy5ib2R5Lm5vZGVzW2VkZ2UudG9JZF0sIGVkZ2UsIGNsdXN0ZXJUbyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBjaGVjayB0aGF0IGl0IHdvcmtzIGZvciBib3RoIGVkZ2VzIGNsdXN0ZXJlZFxuICAgICAgICAvLyAgICAgICAoVGhpcyBtaWdodCBiZSBwYXJhbm9pYSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jbHVzdGVyRWRnZXNbZWRnZUlkXTtcbiAgICAgICAgdGhpcy5fcmVzdG9yZUVkZ2UoZWRnZSk7XG4gICAgICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBoYXBwZW5pbmcsIHRoZSBzdGF0ZSBzaG91bGRcbiAgICAgICAgLy8gYmUgcHJvcGVybHkgdXBkYXRlZCBhdCB0aGlzIHBvaW50LlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiBpdCAqaXMqIHJlYWNoZWQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24sIHRoZW4gd2UgaGF2ZSB0byBpbXBsZW1lbnRcbiAgICAgICAgLy8gdW5kbyBjbHVzdGVyaW5nIGZvciB0aGlzIGVkZ2UgaGVyZS5cbiAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKCdyZW1vdmUgZWRnZSBmcm9tIGNsdXN0ZXJpbmcgbm90IGltcGxlbWVudGVkIScpXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDbHVzdGVycyBtYXkgYmUgbmVzdGVkIHRvIGFueSBsZXZlbC4gS2VlcCBvbiBvcGVuaW5nIHVudGlsIG5vdGhpbmcgdG8gb3BlblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgbGV0IGNvbnRpbnVlTG9vcCA9IHRydWU7XG4gICAgd2hpbGUgKGNvbnRpbnVlTG9vcCkge1xuICAgICAgY29uc3QgY2x1c3RlcnNUb09wZW4gPSBbXTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBpZCdzIG9mIGNsdXN0ZXJzIHRoYXQgbmVlZCBvcGVuaW5nXG4gICAgICBlYWNoQ2x1c3Rlck5vZGUoZnVuY3Rpb24gKGNsdXN0ZXJOb2RlKSB7XG4gICAgICAgIGNvbnN0IG51bU5vZGVzID0gT2JqZWN0LmtleXMoY2x1c3Rlck5vZGUuY29udGFpbmVkTm9kZXMpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYWxsb3dTaW5nbGUgPSBjbHVzdGVyTm9kZS5vcHRpb25zLmFsbG93U2luZ2xlTm9kZUNsdXN0ZXIgPT09IHRydWU7XG4gICAgICAgIGlmICgoYWxsb3dTaW5nbGUgJiYgbnVtTm9kZXMgPCAxKSB8fCAoIWFsbG93U2luZ2xlICYmIG51bU5vZGVzIDwgMikpIHtcbiAgICAgICAgICBjbHVzdGVyc1RvT3Blbi5wdXNoKGNsdXN0ZXJOb2RlLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIE9wZW4gdGhlbVxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBjbHVzdGVyc1RvT3Blbi5sZW5ndGg7ICsrbikge1xuICAgICAgICB0aGlzLm9wZW5DbHVzdGVyKFxuICAgICAgICAgIGNsdXN0ZXJzVG9PcGVuW25dLFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIGZhbHNlIC8qIERvbid0IHJlZnJlc2gsIHdlJ3JlIGluIGFuIHJlZnJlc2gvdXBkYXRlIGFscmVhZHkgKi9cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29udGludWVMb29wID0gY2x1c3RlcnNUb09wZW4ubGVuZ3RoID4gMDtcbiAgICAgIGNoYW5nZWQgPSBjaGFuZ2VkIHx8IGNvbnRpbnVlTG9vcDtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoKTsgLy8gUmVkbyB0aGlzIG1ldGhvZCAocmVjdXJzaW9uIHBvc3NpYmxlISBzaG91bGQgYmUgc2FmZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIG5vZGUgd2l0aCBnaXZlbiBpZCBpcyBwYXJ0IG9mIGEgY2x1c3Rlci5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgcGFydCBvZiBhIGNsdXN0ZXIuXG4gICAqL1xuICBfaXNDbHVzdGVyZWROb2RlKG5vZGVJZCkge1xuICAgIHJldHVybiB0aGlzLmNsdXN0ZXJlZE5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgZWRnZSB3aXRoIGdpdmVuIGlkIGlzIG5vdCB2aXNpYmxlIGR1ZSB0byBjbHVzdGVyaW5nLlxuICAgKlxuICAgKiBBbiBlZGdlIGlzIGNvbnNpZGVyZWQgY2x1c3RlcmVkIGlmOlxuICAgKiAtIGl0IGlzIGRpcmVjdGx5IHJlcGxhY2VkIGJ5IGEgY2x1c3RlcmluZyBlZGdlXG4gICAqIC0gYW55IG9mIGl0cyBjb25uZWN0aW5nIG5vZGVzIGlzIGluIGEgY2x1c3RlclxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBlZGdlSWRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgcGFydCBvZiBhIGNsdXN0ZXIuXG4gICAqL1xuICBfaXNDbHVzdGVyZWRFZGdlKGVkZ2VJZCkge1xuICAgIHJldHVybiB0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2VJZF0gIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDbHVzdGVyRW5naW5lO1xuIiwgImltcG9ydCB7IHNlbGVjdGl2ZURlZXBFeHRlbmQgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgpIHRvIGEgdXNhYmxlIGZvcm0uXG4gKlxuICogU3BlY2lmaWNhbGx5LCBzZXQgdXAgdGhpcyBtZXRob2QgZm9yIHRoZSBjYXNlIG9mIHJ1bm5pbmcgb24gbm9kZS5qcyB3aXRoIGpzZG9tIGVuYWJsZWQuXG4gKlxuICogTk9URVM6XG4gKlxuICogT24gbm9kZS5qcywgd2hlbiBjYWxsaW5nIHRoaXMgZGlyZWN0bHkgb3V0c2lkZSBvZiB0aGlzIGNsYXNzLCBgd2luZG93YCBpcyBub3QgZGVmaW5lZC5cbiAqICAgVGhpcyBoYXBwZW5zIGV2ZW4gaWYganNkb20gaXMgdXNlZC5cbiAqIEZvciBub2RlLmpzICsganNkb20sIGB3aW5kb3dgIGlzIGF2YWlsYWJsZSBhdCB0aGUgbW9tZW50IHRoZSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQuXG4gKiAgIEZvciB0aGlzIHJlYXNvbiwgdGhlIGNhbGxlZCBpcyBwbGFjZWQgd2l0aGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAqIEV2ZW4gdGhlbiwgYHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKWAgaXMgbm90IGRlZmluZWQsIHNvIGl0IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkLlxuICogRHVyaW5nIHVuaXQgdGVzdGluZywgaXQgaGFwcGVucyB0aGF0IHRoZSB3aW5kb3cgb2JqZWN0IGlzIHJlc2V0IGR1cmluZyBleGVjdXRpb24sIGNhdXNpbmdcbiAqICAgYSBydW50aW1lIGVycm9yIGR1ZSB0byBtaXNzaW5nIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKWAuIFRoaXMgbmVlZHMgdG8gYmUgY29tcGVuc2F0ZWQgZm9yLFxuICogICBzZWUgYF9yZXF1ZXN0TmV4dEZyYW1lKClgLlxuICogU2luY2UgdGhpcyBpcyBhIGdsb2JhbCBvYmplY3QsIGl0IG1heSBhZmZlY3Qgb3RoZXIgbW9kdWxlcyBiZXNpZGVzIGBOZXR3b3JrYC4gV2l0aCBub3JtYWxcbiAqICAgdXNhZ2UsIHRoaXMgZG9lcyBub3QgY2F1c2UgYW55IHByb2JsZW1zLiBEdXJpbmcgdW5pdCB0ZXN0aW5nLCBlcnJvcnMgbWF5IG9jY3VyLiBUaGVzZSBoYXZlXG4gKiAgIGJlZW4gY29tcGVuc2F0ZWQgZm9yLCBzZWUgY29tbWVudCBibG9jayBpbiBfcmVxdWVzdE5leHRGcmFtZSgpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9pbml0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkge1xuICBsZXQgZnVuYztcblxuICBpZiAod2luZG93ICE9PSB1bmRlZmluZWQpIHtcbiAgICBmdW5jID1cbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgfVxuXG4gIGlmIChmdW5jID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyB3aW5kb3cgb3IgbWV0aG9kIG5vdCBwcmVzZW50LCBzZXR0aW5nIG1vY2sgcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgLy9jb25zb2xlLmxvZyhcIkNhbGxlZCBtb2NrIHJlcXVlc3RBbmltYXRpb25GcmFtZVwiKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuYztcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqL1xuY2xhc3MgQ2FudmFzUmVuZGVyZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzKSB7XG4gICAgX2luaXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xuXG4gICAgdGhpcy5yZWRyYXdSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlclRpbWVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVxdWlyZXNUaW1lb3V0ID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyUmVxdWVzdHMgPSAwO1xuICAgIHRoaXMuYWxsb3dSZWRyYXcgPSB0cnVlO1xuXG4gICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuem9vbWluZyA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBoaWRlRWRnZXNPbkRyYWc6IGZhbHNlLFxuICAgICAgaGlkZUVkZ2VzT25ab29tOiBmYWxzZSxcbiAgICAgIGhpZGVOb2Rlc09uRHJhZzogZmFsc2UsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLl9kZXRlcm1pbmVCcm93c2VyTWV0aG9kKCk7XG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRyYWdTdGFydFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRyYWdFbmRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiem9vbVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnpvb21pbmcgPSB0cnVlO1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnpvb21UaW1lb3V0SWQpO1xuICAgICAgdGhpcy56b29tVGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnpvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdFJlZHJhdy5iaW5kKHRoaXMpKCk7XG4gICAgICB9LCAyNTApO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX3Jlc2l6ZU5vZGVzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuX3Jlc2l6ZU5vZGVzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfcmVkcmF3XCIsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fcmVkcmF3KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfYmxvY2tSZWRyYXdcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5hbGxvd1JlZHJhdyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2FsbG93UmVkcmF3XCIsICgpID0+IHtcbiAgICAgIHRoaXMuYWxsb3dSZWRyYXcgPSB0cnVlO1xuICAgICAgdGhpcy5yZWRyYXdSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9yZXF1ZXN0UmVkcmF3XCIsIHRoaXMuX3JlcXVlc3RSZWRyYXcuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfc3RhcnRSZW5kZXJpbmdcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJSZXF1ZXN0cyArPSAxO1xuICAgICAgdGhpcy5yZW5kZXJpbmdBY3RpdmUgPSB0cnVlO1xuICAgICAgdGhpcy5fc3RhcnRSZW5kZXJpbmcoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9zdG9wUmVuZGVyaW5nXCIsICgpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyUmVxdWVzdHMgLT0gMTtcbiAgICAgIHRoaXMucmVuZGVyaW5nQWN0aXZlID0gdGhpcy5yZW5kZXJSZXF1ZXN0cyA+IDA7XG4gICAgICB0aGlzLnJlbmRlclRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlclJlcXVlc3RzID0gMDtcbiAgICAgIHRoaXMuYWxsb3dSZWRyYXcgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVuZGVyaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5yZXF1aXJlc1RpbWVvdXQgPT09IHRydWUpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVuZGVyVGltZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMucmVuZGVyVGltZXIpO1xuICAgICAgfVxuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IFtcImhpZGVFZGdlc09uRHJhZ1wiLCBcImhpZGVFZGdlc09uWm9vbVwiLCBcImhpZGVOb2Rlc09uRHJhZ1wiXTtcbiAgICAgIHNlbGVjdGl2ZURlZXBFeHRlbmQoZmllbGRzLCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIHRoZSBkcmF3aW5nIG9mIHRoZSBuZXh0IGZyYW1lLlxuICAgKlxuICAgKiBDYWxscyB0aGUgY2FsbGJhY2sgd2hlbiB0aGUgbmV4dCBmcmFtZSBjYW4gb3Igd2lsbCBiZSBkcmF3bi5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5IC0gdGltZW91dCBjYXNlIG9ubHksIHdhaXQgdGhpcyBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbiB8IHVuZGVmaW5lZH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXF1ZXN0TmV4dEZyYW1lKGNhbGxiYWNrLCBkZWxheSkge1xuICAgIC8vIER1cmluZyB1bml0IHRlc3RpbmcsIGl0IGhhcHBlbnMgdGhhdCB0aGUgbW9jayB3aW5kb3cgb2JqZWN0IGlzIHJlc2V0IHdoaWxlXG4gICAgLy8gdGhlIG5leHQgZnJhbWUgaXMgc3RpbGwgcGVuZGluZy4gVGhlbiwgZWl0aGVyICd3aW5kb3cnIGlzIG5vdCBwcmVzZW50LCBvclxuICAgIC8vICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKScgaXMgbm90IHByZXNlbnQgYmVjYXVzZSBpdCBpcyBub3QgZGVmaW5lZCBvbiB0aGVcbiAgICAvLyBtb2NrIHdpbmRvdyBvYmplY3QuXG4gICAgLy9cbiAgICAvLyBBcyBhIGNvbnNlcXVlbmNlLCB1bnJlbGF0ZWQgdW5pdCB0ZXN0cyBtYXkgYXBwZWFyIHRvIGZhaWwsIGV2ZW4gaWYgdGhlIHByb2JsZW1cbiAgICAvLyBkZXNjcmliZWQgaGFwcGVucyBpbiB0aGUgY3VycmVudCB1bml0IHRlc3QuXG4gICAgLy9cbiAgICAvLyBUaGlzIGlzIG5vdCBzb21ldGhpbmcgdGhhdCB3aWxsIGhhcHBlbiBpbiBub3JtYWwgb3BlcmF0aW9uLCBidXQgd2Ugc3RpbGwgbmVlZFxuICAgIC8vIHRvIHRha2UgaXQgaW50byBhY2NvdW50LlxuICAgIC8vXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjsgLy8gRG9pbmcgYGlmICh3aW5kb3cgPT09IHVuZGVmaW5lZClgIGRvZXMgbm90IHdvcmsgaGVyZSFcblxuICAgIGxldCB0aW1lcjtcblxuICAgIGNvbnN0IG15V2luZG93ID0gd2luZG93OyAvLyBHcmFiIGEgcmVmZXJlbmNlIHRvIHJlZHVjZSB0aGUgcG9zc2liaWxpdHkgdGhhdCAnd2luZG93JyBpcyByZXNldFxuICAgIC8vIHdoaWxlIHJ1bm5pbmcgdGhpcyBtZXRob2QuXG5cbiAgICBpZiAodGhpcy5yZXF1aXJlc1RpbWVvdXQgPT09IHRydWUpIHtcbiAgICAgIC8vIHdhaXQgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBhbmQgcGVyZm9ybSB0aGUgYW5pbWF0aW9uIHN0ZXAgZnVuY3Rpb25cbiAgICAgIHRpbWVyID0gbXlXaW5kb3cuc2V0VGltZW91dChjYWxsYmFjaywgZGVsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobXlXaW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIHRpbWVyID0gbXlXaW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGltZXI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zdGFydFJlbmRlcmluZygpIHtcbiAgICBpZiAodGhpcy5yZW5kZXJpbmdBY3RpdmUgPT09IHRydWUpIHtcbiAgICAgIGlmICh0aGlzLnJlbmRlclRpbWVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJUaW1lciA9IHRoaXMuX3JlcXVlc3ROZXh0RnJhbWUoXG4gICAgICAgICAgdGhpcy5fcmVuZGVyU3RlcC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHRoaXMuc2ltdWxhdGlvbkludGVydmFsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVuZGVyU3RlcCgpIHtcbiAgICBpZiAodGhpcy5yZW5kZXJpbmdBY3RpdmUgPT09IHRydWUpIHtcbiAgICAgIC8vIHJlc2V0IHRoZSByZW5kZXJUaW1lciBzbyBhIG5ldyBzY2hlZHVsZWQgYW5pbWF0aW9uIHN0ZXAgY2FuIGJlIHNldFxuICAgICAgdGhpcy5yZW5kZXJUaW1lciA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHRoaXMucmVxdWlyZXNUaW1lb3V0ID09PSB0cnVlKSB7XG4gICAgICAgIC8vIHRoaXMgc2NoZWR1bGVzIGEgbmV3IHNpbXVsYXRpb24gc3RlcFxuICAgICAgICB0aGlzLl9zdGFydFJlbmRlcmluZygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZWRyYXcoKTtcblxuICAgICAgaWYgKHRoaXMucmVxdWlyZXNUaW1lb3V0ID09PSBmYWxzZSkge1xuICAgICAgICAvLyB0aGlzIHNjaGVkdWxlcyBhIG5ldyBzaW11bGF0aW9uIHN0ZXBcbiAgICAgICAgdGhpcy5fc3RhcnRSZW5kZXJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IHRoZSBuZXR3b3JrIHdpdGggdGhlIGN1cnJlbnQgZGF0YVxuICAgKiBjaGFydCB3aWxsIGJlIHJlc2l6ZWQgdG9vLlxuICAgKi9cbiAgcmVkcmF3KCkge1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzZXRTaXplXCIpO1xuICAgIHRoaXMuX3JlZHJhdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyB0aGUgbmV0d29yayB3aXRoIHRoZSBjdXJyZW50IGRhdGFcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXF1ZXN0UmVkcmF3KCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVkcmF3UmVxdWVzdGVkICE9PSB0cnVlICYmXG4gICAgICB0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9PT0gZmFsc2UgJiZcbiAgICAgIHRoaXMuYWxsb3dSZWRyYXcgPT09IHRydWVcbiAgICApIHtcbiAgICAgIHRoaXMucmVkcmF3UmVxdWVzdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3JlcXVlc3ROZXh0RnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZWRyYXcoZmFsc2UpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyB0aGUgbmV0d29yayB3aXRoIHRoZSBjdXJyZW50IGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlkZGVuPWZhbHNlXSB8IFVzZWQgdG8gZ2V0IHRoZSBmaXJzdCBlc3RpbWF0ZSBvZiB0aGUgbm9kZSBzaXplcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgdGhlIG5vZGVzIGFyZSBkcmF3biBhZnRlciB3aGljaCB0aGV5IGFyZSBxdWlja2x5IGRyYXduIG92ZXIuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVkcmF3KGhpZGRlbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dSZWRyYXcgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJpbml0UmVkcmF3XCIpO1xuXG4gICAgICB0aGlzLnJlZHJhd1JlcXVlc3RlZCA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBkcmF3TGF0ZXIgPSB7XG4gICAgICAgIGRyYXdFeHRlcm5hbExhYmVsczogbnVsbCxcbiAgICAgIH07XG5cbiAgICAgIC8vIHdoZW4gdGhlIGNvbnRhaW5lciBkaXYgd2FzIGhpZGRlbiwgdGhpcyBmaXhlcyBpdCBiYWNrIHVwIVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMud2lkdGggPT09IDAgfHxcbiAgICAgICAgdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmhlaWdodCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2FudmFzLnNldFNpemUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jYW52YXMuc2V0VHJhbnNmb3JtKCk7XG5cbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoKTtcblxuICAgICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgICAgY29uc3QgdyA9IHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IGggPSB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gaWYgdGhlIGRpdiBpcyBoaWRkZW4sIHdlIHN0b3AgdGhlIHJlZHJhdyBoZXJlIGZvciBwZXJmb3JtYW5jZS5cbiAgICAgIGlmICh0aGlzLmNhbnZhcy5mcmFtZS5jbGllbnRXaWR0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCBzY2FsaW5nIGFuZCB0cmFuc2xhdGlvblxuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGN0eC50cmFuc2xhdGUodGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueCwgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueSk7XG4gICAgICBjdHguc2NhbGUodGhpcy5ib2R5LnZpZXcuc2NhbGUsIHRoaXMuYm9keS52aWV3LnNjYWxlKTtcblxuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImJlZm9yZURyYXdpbmdcIiwgY3R4KTtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcblxuICAgICAgaWYgKGhpZGRlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0aGlzLmRyYWdnaW5nID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgKHRoaXMuZHJhZ2dpbmcgPT09IHRydWUgJiZcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmhpZGVFZGdlc09uRHJhZyA9PT0gZmFsc2UpKSAmJlxuICAgICAgICAgICh0aGlzLnpvb21pbmcgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAodGhpcy56b29taW5nID09PSB0cnVlICYmIHRoaXMub3B0aW9ucy5oaWRlRWRnZXNPblpvb20gPT09IGZhbHNlKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fZHJhd0VkZ2VzKGN0eCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmRyYWdnaW5nID09PSBmYWxzZSB8fFxuICAgICAgICAodGhpcy5kcmFnZ2luZyA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuaGlkZU5vZGVzT25EcmFnID09PSBmYWxzZSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCB7IGRyYXdFeHRlcm5hbExhYmVscyB9ID0gdGhpcy5fZHJhd05vZGVzKGN0eCwgaGlkZGVuKTtcbiAgICAgICAgZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVscyA9IGRyYXdFeHRlcm5hbExhYmVscztcbiAgICAgIH1cblxuICAgICAgLy8gZHJhdyB0aGUgYXJyb3dzIGxhc3Qgc28gdGhleSB3aWxsIGJlIGF0IHRoZSB0b3BcbiAgICAgIGlmIChoaWRkZW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodGhpcy5kcmFnZ2luZyA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgICh0aGlzLmRyYWdnaW5nID09PSB0cnVlICYmXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5oaWRlRWRnZXNPbkRyYWcgPT09IGZhbHNlKSkgJiZcbiAgICAgICAgICAodGhpcy56b29taW5nID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgKHRoaXMuem9vbWluZyA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuaGlkZUVkZ2VzT25ab29tID09PSBmYWxzZSkpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX2RyYXdBcnJvd3MoY3R4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVscyAhPSBudWxsKSB7XG4gICAgICAgIGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbHMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhpZGRlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fZHJhd1NlbGVjdGlvbkJveChjdHgpO1xuICAgICAgfVxuXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYWZ0ZXJEcmF3aW5nXCIsIGN0eCk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG5cbiAgICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgc2NhbGluZyBhbmQgdHJhbnNsYXRpb25cbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICBpZiAoaGlkZGVuID09PSB0cnVlKSB7XG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBhbGwgbm9kZXNcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Fsd2F5c1Nob3ddXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzaXplTm9kZXMoKSB7XG4gICAgdGhpcy5jYW52YXMuc2V0VHJhbnNmb3JtKCk7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgpO1xuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LnRyYW5zbGF0ZSh0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi54LCB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55KTtcbiAgICBjdHguc2NhbGUodGhpcy5ib2R5LnZpZXcuc2NhbGUsIHRoaXMuYm9keS52aWV3LnNjYWxlKTtcblxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGxldCBub2RlO1xuXG4gICAgLy8gcmVzaXplIGFsbCBub2Rlc1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tub2RlSWRdO1xuICAgICAgICBub2RlLnJlc2l6ZShjdHgpO1xuICAgICAgICBub2RlLnVwZGF0ZUJvdW5kaW5nQm94KGN0eCwgbm9kZS5zZWxlY3RlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVzdG9yZSBvcmlnaW5hbCBzY2FsaW5nIGFuZCB0cmFuc2xhdGlvblxuICAgIGN0eC5yZXN0b3JlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IGFsbCBub2Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4ICAyRCBjb250ZXh0IG9mIGEgSFRNTCBjYW52YXNcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWx3YXlzU2hvd11cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIF9kcmF3Tm9kZXMoY3R4LCBhbHdheXNTaG93ID0gZmFsc2UpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcbiAgICBsZXQgbm9kZTtcbiAgICBjb25zdCBzZWxlY3RlZCA9IFtdO1xuICAgIGNvbnN0IGhvdmVyZWQgPSBbXTtcbiAgICBjb25zdCBtYXJnaW4gPSAyMDtcbiAgICBjb25zdCB0b3BMZWZ0ID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoeyB4OiAtbWFyZ2luLCB5OiAtbWFyZ2luIH0pO1xuICAgIGNvbnN0IGJvdHRvbVJpZ2h0ID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoe1xuICAgICAgeDogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoICsgbWFyZ2luLFxuICAgICAgeTogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCArIG1hcmdpbixcbiAgICB9KTtcbiAgICBjb25zdCB2aWV3YWJsZUFyZWEgPSB7XG4gICAgICB0b3A6IHRvcExlZnQueSxcbiAgICAgIGxlZnQ6IHRvcExlZnQueCxcbiAgICAgIGJvdHRvbTogYm90dG9tUmlnaHQueSxcbiAgICAgIHJpZ2h0OiBib3R0b21SaWdodC54LFxuICAgIH07XG5cbiAgICBjb25zdCBkcmF3RXh0ZXJuYWxMYWJlbHMgPSBbXTtcblxuICAgIC8vIGRyYXcgdW5zZWxlY3RlZCBub2RlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgLy8gc2V0IHNlbGVjdGVkIGFuZCBob3ZlcmVkIG5vZGVzIGFzaWRlXG4gICAgICBpZiAobm9kZS5ob3Zlcikge1xuICAgICAgICBob3ZlcmVkLnB1c2gobm9kZUluZGljZXNbaV0pO1xuICAgICAgfSBlbHNlIGlmIChub2RlLmlzU2VsZWN0ZWQoKSkge1xuICAgICAgICBzZWxlY3RlZC5wdXNoKG5vZGVJbmRpY2VzW2ldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhbHdheXNTaG93ID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3QgZHJhd0xhdGVyID0gbm9kZS5kcmF3KGN0eCk7XG4gICAgICAgICAgaWYgKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCAhPSBudWxsKSB7XG4gICAgICAgICAgICBkcmF3RXh0ZXJuYWxMYWJlbHMucHVzaChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmlzQm91bmRpbmdCb3hPdmVybGFwcGluZ1dpdGgodmlld2FibGVBcmVhKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IGRyYXdMYXRlciA9IG5vZGUuZHJhdyhjdHgpO1xuICAgICAgICAgIGlmIChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgZHJhd0V4dGVybmFsTGFiZWxzLnB1c2goZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZS51cGRhdGVCb3VuZGluZ0JveChjdHgsIG5vZGUuc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGk7XG4gICAgY29uc3Qgc2VsZWN0ZWRMZW5ndGggPSBzZWxlY3RlZC5sZW5ndGg7XG4gICAgY29uc3QgaG92ZXJlZExlbmd0aCA9IGhvdmVyZWQubGVuZ3RoO1xuXG4gICAgLy8gZHJhdyB0aGUgc2VsZWN0ZWQgbm9kZXMgb24gdG9wXG4gICAgZm9yIChpID0gMDsgaSA8IHNlbGVjdGVkTGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tzZWxlY3RlZFtpXV07XG4gICAgICBjb25zdCBkcmF3TGF0ZXIgPSBub2RlLmRyYXcoY3R4KTtcbiAgICAgIGlmIChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwgIT0gbnVsbCkge1xuICAgICAgICBkcmF3RXh0ZXJuYWxMYWJlbHMucHVzaChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRyYXcgaG92ZXJlZCBub2RlcyBhYm92ZSBldmVyeXRoaW5nIGVsc2U6IGZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqcy92aXMtbmV0d29yay9pc3N1ZXMvMjI2XG4gICAgZm9yIChpID0gMDsgaSA8IGhvdmVyZWRMZW5ndGg7IGkrKykge1xuICAgICAgbm9kZSA9IG5vZGVzW2hvdmVyZWRbaV1dO1xuICAgICAgY29uc3QgZHJhd0xhdGVyID0gbm9kZS5kcmF3KGN0eCk7XG4gICAgICBpZiAoZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsICE9IG51bGwpIHtcbiAgICAgICAgZHJhd0V4dGVybmFsTGFiZWxzLnB1c2goZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZHJhd0V4dGVybmFsTGFiZWxzOiAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZHJhdyBvZiBkcmF3RXh0ZXJuYWxMYWJlbHMpIHtcbiAgICAgICAgICBkcmF3KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgYWxsIGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHggIDJEIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdFZGdlcyhjdHgpIHtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBlZGdlSW5kaWNlcyA9IHRoaXMuYm9keS5lZGdlSW5kaWNlcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tlZGdlSW5kaWNlc1tpXV07XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgZWRnZS5kcmF3KGN0eCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBhbGwgYXJyb3dzXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHggIDJEIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdBcnJvd3MoY3R4KSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLmJvZHkuZWRnZUluZGljZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUluZGljZXNbaV1dO1xuICAgICAgaWYgKGVkZ2UuY29ubmVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgIGVkZ2UuZHJhd0Fycm93cyhjdHgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgcmVxdWlyZXMgYSBzZXRUaW1lb3V0IG9yIGEgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBUaGlzIHdhcyByZXF1aXJlZCBiZWNhdXNlXG4gICAqIHNvbWUgaW1wbGVtZW50YXRpb25zIChzYWZhcmkgYW5kIElFOSkgZGlkIG5vdCBzdXBwb3J0IHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RldGVybWluZUJyb3dzZXJNZXRob2QoKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IGJyb3dzZXJUeXBlID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgdGhpcy5yZXF1aXJlc1RpbWVvdXQgPSBmYWxzZTtcbiAgICAgIGlmIChicm93c2VyVHlwZS5pbmRleE9mKFwibXNpZSA5LjBcIikgIT0gLTEpIHtcbiAgICAgICAgLy8gSUUgOVxuICAgICAgICB0aGlzLnJlcXVpcmVzVGltZW91dCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGJyb3dzZXJUeXBlLmluZGV4T2YoXCJzYWZhcmlcIikgIT0gLTEpIHtcbiAgICAgICAgLy8gc2FmYXJpXG4gICAgICAgIGlmIChicm93c2VyVHlwZS5pbmRleE9mKFwiY2hyb21lXCIpIDw9IC0xKSB7XG4gICAgICAgICAgdGhpcy5yZXF1aXJlc1RpbWVvdXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVxdWlyZXNUaW1lb3V0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IHNlbGVjdGlvbiBib3hcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAgMkQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd1NlbGVjdGlvbkJveChjdHgpIHtcbiAgICBpZiAodGhpcy5ib2R5LnNlbGVjdGlvbkJveC5zaG93KSB7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjb25zdCB3aWR0aCA9XG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uZW5kLnggLVxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLnN0YXJ0Lng7XG4gICAgICBjb25zdCBoZWlnaHQgPVxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLmVuZC55IC1cbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5zdGFydC55O1xuICAgICAgY3R4LnJlY3QoXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQueCxcbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5zdGFydC55LFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICApO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgxNTEsIDE5NCwgMjUyLCAwLjIpXCI7XG4gICAgICBjdHguZmlsbFJlY3QoXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQueCxcbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5zdGFydC55LFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICApO1xuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCJyZ2JhKDE1MSwgMTk0LCAyNTIsIDEpXCI7XG4gICAgICBjdHguc3Ryb2tlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FudmFzUmVuZGVyZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRJbnRlcnZhbDtcbiIsICIvKipcbiAqIFJlZ2lzdGVyIGEgdG91Y2ggZXZlbnQsIHRha2luZyBwbGFjZSBiZWZvcmUgYSBnZXN0dXJlXG4gKlxuICogQHBhcmFtIHtIYW1tZXJ9IGhhbW1lciAgICAgICBBIGhhbW1lciBpbnN0YW5jZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBDYWxsYmFjaywgY2FsbGVkIGFzIGNhbGxiYWNrKGV2ZW50KVxuICovXG5leHBvcnQgZnVuY3Rpb24gb25Ub3VjaChoYW1tZXIsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrLmlucHV0SGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC5pc0ZpcnN0KSB7XG4gICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGhhbW1lci5vbihcImhhbW1lci5pbnB1dFwiLCBjYWxsYmFjay5pbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgcmVsZWFzZSBldmVudCwgdGFraW5nIHBsYWNlIGFmdGVyIGEgZ2VzdHVyZVxuICpcbiAqIEBwYXJhbSB7SGFtbWVyfSBoYW1tZXIgICAgICAgQSBoYW1tZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgQ2FsbGJhY2ssIGNhbGxlZCBhcyBjYWxsYmFjayhldmVudClcbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gb25SZWxlYXNlKGhhbW1lciwgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2suaW5wdXRIYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmlzRmluYWwpIHtcbiAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGhhbW1lci5vbihcImhhbW1lci5pbnB1dFwiLCBjYWxsYmFjay5pbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIFVucmVnaXN0ZXIgYSB0b3VjaCBldmVudCwgdGFraW5nIHBsYWNlIGJlZm9yZSBhIGdlc3R1cmVcbiAqXG4gKiBAcGFyYW0ge0hhbW1lcn0gaGFtbWVyICAgICAgIEEgaGFtbWVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxiYWNrLCBjYWxsZWQgYXMgY2FsbGJhY2soZXZlbnQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZmZUb3VjaChoYW1tZXIsIGNhbGxiYWNrKSB7XG4gIGhhbW1lci5vZmYoXCJoYW1tZXIuaW5wdXRcIiwgY2FsbGJhY2suaW5wdXRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBVbnJlZ2lzdGVyIGEgcmVsZWFzZSBldmVudCwgdGFraW5nIHBsYWNlIGJlZm9yZSBhIGdlc3R1cmVcbiAqXG4gKiBAcGFyYW0ge0hhbW1lcn0gaGFtbWVyICAgICAgIEEgaGFtbWVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxiYWNrLCBjYWxsZWQgYXMgY2FsbGJhY2soZXZlbnQpXG4gKi9cbmV4cG9ydCBjb25zdCBvZmZSZWxlYXNlID0gb2ZmVG91Y2g7XG5cbi8qKlxuICogSGFjayB0aGUgUGluY2hSZWNvZ25pemVyIHN1Y2ggdGhhdCBpdCBkb2Vzbid0IHByZXZlbnQgZGVmYXVsdCBiZWhhdmlvclxuICogZm9yIHZlcnRpY2FsIHBhbm5pbmcuXG4gKlxuICogWWVhaCAuLi4gdGhpcyBpcyBxdWl0ZSBhIGhhY2sgLi4uIHNlZSBodHRwczovL2dpdGh1Yi5jb20vaGFtbWVyanMvaGFtbWVyLmpzL2lzc3Vlcy85MzJcbiAqXG4gKiBAcGFyYW0ge0hhbW1lci5QaW5jaH0gcGluY2hSZWNvZ25pemVyXG4gKiBAcmV0dXJucyB7SGFtbWVyLlBpbmNofSByZXR1cm5zIHRoZSBwaW5jaFJlY29nbml6ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVQcmV2ZW50RGVmYXVsdFZlcnRpY2FsbHkocGluY2hSZWNvZ25pemVyKSB7XG4gIGNvbnN0IFRPVUNIX0FDVElPTl9QQU5fWSA9IFwicGFuLXlcIjtcblxuICBwaW5jaFJlY29nbml6ZXIuZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gZGVmYXVsdCBtZXRob2QgcmV0dXJucyBbVE9VQ0hfQUNUSU9OX05PTkVdXG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fUEFOX1ldO1xuICB9O1xuXG4gIHJldHVybiBwaW5jaFJlY29nbml6ZXI7XG59XG4iLCAiaW1wb3J0IHsgb25SZWxlYXNlLCBvblRvdWNoIH0gZnJvbSBcIi4uLy4uL2hhbW1lclV0aWxcIjtcblxuaW1wb3J0IHsgSGFtbWVyLCBzZWxlY3RpdmVEZWVwRXh0ZW5kIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgbWFpbiBmcmFtZSBmb3IgdGhlIE5ldHdvcmsuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIG9uY2Ugd2hlbiBhIE5ldHdvcmsgb2JqZWN0IGlzIGNyZWF0ZWQuIFRoZSBmcmFtZVxuICogY29udGFpbnMgYSBjYW52YXMsIGFuZCB0aGlzIGNhbnZhcyBjb250YWlucyBhbGwgb2JqZWN0cyBsaWtlIHRoZSBheGlzIGFuZFxuICogbm9kZXMuXG4gKi9cbmNsYXNzIENhbnZhcyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waXhlbFJhdGlvID0gMTtcbiAgICB0aGlzLmNhbWVyYVN0YXRlID0ge307XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuY2FudmFzVmlld0NlbnRlciA9IHt9O1xuICAgIHRoaXMuX2NsZWFudXBDYWxsYmFja3MgPSBbXTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBhdXRvUmVzaXplOiB0cnVlLFxuICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgLy8gYmluZCB0aGUgZXZlbnRzXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub25jZShcInJlc2l6ZVwiLCAob2JqKSA9PiB7XG4gICAgICBpZiAob2JqLndpZHRoICE9PSAwKSB7XG4gICAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnggPSBvYmoud2lkdGggKiAwLjU7XG4gICAgICB9XG4gICAgICBpZiAob2JqLmhlaWdodCAhPT0gMCkge1xuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55ID0gb2JqLmhlaWdodCAqIDAuNTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInNldFNpemVcIiwgdGhpcy5zZXRTaXplLmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmhhbW1lckZyYW1lLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaGFtbWVyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX2NsZWFuVXAoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmllbGRzID0gW1wid2lkdGhcIiwgXCJoZWlnaHRcIiwgXCJhdXRvUmVzaXplXCJdO1xuICAgICAgc2VsZWN0aXZlRGVlcEV4dGVuZChmaWVsZHMsIHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gQXV0b21hdGljYWxseSBhZGFwdCB0byBjaGFuZ2luZyBzaXplIG9mIHRoZSBjb250YWluZXIgZWxlbWVudC5cbiAgICB0aGlzLl9jbGVhblVwKCk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUmVzaXplID09PSB0cnVlKSB7XG4gICAgICBpZiAod2luZG93LlJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIGRlY2VudCBicm93c2VycywgaW1tZWRpYXRlIHJlYWN0aW9uc1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuc2V0U2l6ZSgpO1xuICAgICAgICAgIGlmIChjaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgeyBmcmFtZSB9ID0gdGhpcztcblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGZyYW1lKTtcbiAgICAgICAgdGhpcy5fY2xlYW51cENhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZnJhbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElFMTEsIGNvbnRpbm91cyBwb2xsaW5nXG4gICAgICAgIGNvbnN0IHJlc2l6ZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLnNldFNpemUoKTtcbiAgICAgICAgICBpZiAoY2hhbmdlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIHRoaXMuX2NsZWFudXBDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChyZXNpemVUaW1lcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBdXRvbWF0aWNhbGx5IGFkYXB0IHRvIGNoYW5naW5nIHNpemUgb2YgdGhlIGJyb3dzZXIuXG4gICAgICBjb25zdCByZXNpemVGdW5jdGlvbiA9IHRoaXMuX29uUmVzaXplLmJpbmQodGhpcyk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemVGdW5jdGlvbik7XG4gICAgICB0aGlzLl9jbGVhbnVwQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemVGdW5jdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhblVwKCkge1xuICAgIHRoaXMuX2NsZWFudXBDYWxsYmFja3NcbiAgICAgIC5zcGxpY2UoMClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25SZXNpemUoKSB7XG4gICAgdGhpcy5zZXRTaXplKCk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuZCBzdG9yZSB0aGUgY2FtZXJhU3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPXRoaXMucGl4ZWxSYXRpb11cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRDYW1lcmFTdGF0ZShwaXhlbFJhdGlvID0gdGhpcy5waXhlbFJhdGlvKSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNXaWR0aCA9IHRoaXMuZnJhbWUuY2FudmFzLndpZHRoIC8gcGl4ZWxSYXRpbztcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNIZWlnaHQgPSB0aGlzLmZyYW1lLmNhbnZhcy5oZWlnaHQgLyBwaXhlbFJhdGlvO1xuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5zY2FsZSA9IHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wb3NpdGlvbiA9IHRoaXMuRE9NdG9DYW52YXMoe1xuICAgICAgICB4OiAoMC41ICogdGhpcy5mcmFtZS5jYW52YXMud2lkdGgpIC8gcGl4ZWxSYXRpbyxcbiAgICAgICAgeTogKDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCkgLyBwaXhlbFJhdGlvLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY2FtZXJhU3RhdGVcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDYW1lcmFTdGF0ZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmNhbWVyYVN0YXRlLnNjYWxlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoICE9PSAwICYmXG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQgIT09IDAgJiZcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyAhPT0gMCAmJlxuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wcmV2aW91c1dpZHRoID4gMCAmJlxuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wcmV2aW91c0hlaWdodCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnN0IHdpZHRoUmF0aW8gPVxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCAvXG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyAvXG4gICAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNXaWR0aDtcbiAgICAgIGNvbnN0IGhlaWdodFJhdGlvID1cbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMuaGVpZ2h0IC9cbiAgICAgICAgdGhpcy5waXhlbFJhdGlvIC9cbiAgICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wcmV2aW91c0hlaWdodDtcbiAgICAgIGxldCBuZXdTY2FsZSA9IHRoaXMuY2FtZXJhU3RhdGUuc2NhbGU7XG5cbiAgICAgIGlmICh3aWR0aFJhdGlvICE9IDEgJiYgaGVpZ2h0UmF0aW8gIT0gMSkge1xuICAgICAgICBuZXdTY2FsZSA9IHRoaXMuY2FtZXJhU3RhdGUuc2NhbGUgKiAwLjUgKiAod2lkdGhSYXRpbyArIGhlaWdodFJhdGlvKTtcbiAgICAgIH0gZWxzZSBpZiAod2lkdGhSYXRpbyAhPSAxKSB7XG4gICAgICAgIG5ld1NjYWxlID0gdGhpcy5jYW1lcmFTdGF0ZS5zY2FsZSAqIHdpZHRoUmF0aW87XG4gICAgICB9IGVsc2UgaWYgKGhlaWdodFJhdGlvICE9IDEpIHtcbiAgICAgICAgbmV3U2NhbGUgPSB0aGlzLmNhbWVyYVN0YXRlLnNjYWxlICogaGVpZ2h0UmF0aW87XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gbmV3U2NhbGU7XG4gICAgICAvLyB0aGlzIGNvbWVzIGZyb20gdGhlIHZpZXcgbW9kdWxlLlxuICAgICAgY29uc3QgY3VycmVudFZpZXdDZW50ZXIgPSB0aGlzLkRPTXRvQ2FudmFzKHtcbiAgICAgICAgeDogMC41ICogdGhpcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGgsXG4gICAgICAgIHk6IDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkaXN0YW5jZUZyb21DZW50ZXIgPSB7XG4gICAgICAgIC8vIG9mZnNldCBmcm9tIHZpZXcsIGRpc3RhbmNlIHZpZXcgaGFzIHRvIGNoYW5nZSBieSB0aGVzZSB4IGFuZCB5IHRvIGNlbnRlciB0aGUgbm9kZVxuICAgICAgICB4OiBjdXJyZW50Vmlld0NlbnRlci54IC0gdGhpcy5jYW1lcmFTdGF0ZS5wb3NpdGlvbi54LFxuICAgICAgICB5OiBjdXJyZW50Vmlld0NlbnRlci55IC0gdGhpcy5jYW1lcmFTdGF0ZS5wb3NpdGlvbi55LFxuICAgICAgfTtcbiAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnggKz1cbiAgICAgICAgZGlzdGFuY2VGcm9tQ2VudGVyLnggKiB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnkgKz1cbiAgICAgICAgZGlzdGFuY2VGcm9tQ2VudGVyLnkgKiB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByZXBhcmVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSArIFwicHhcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKHZhbHVlLmluZGV4T2YoXCIlXCIpICE9PSAtMSB8fCB2YWx1ZS5pbmRleE9mKFwicHhcIikgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZihcIiVcIikgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSArIFwicHhcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJDb3VsZCBub3QgdXNlIHRoZSB2YWx1ZSBzdXBwbGllZCBmb3Igd2lkdGggb3IgaGVpZ2h0OlwiICsgdmFsdWVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgSFRNTFxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICAvLyByZW1vdmUgYWxsIGVsZW1lbnRzIGZyb20gdGhlIGNvbnRhaW5lciBlbGVtZW50LlxuICAgIHdoaWxlICh0aGlzLmJvZHkuY29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgdGhpcy5ib2R5LmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLmJvZHkuY29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtbmV0d29ya1wiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG4gICAgdGhpcy5mcmFtZS50YWJJbmRleCA9IDA7IC8vIHRhYiBpbmRleCBpcyByZXF1aXJlZCBmb3Iga2V5Y2hhcm0gdG8gYmluZCBrZXlzdHJva2VzIHRvIHRoZSBkaXYgaW5zdGVhZCBvZiB0aGUgd2luZG93XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIHRoaXMuZnJhbWUuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICB0aGlzLmZyYW1lLmNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUuY2FudmFzKTtcblxuICAgIGlmICghdGhpcy5mcmFtZS5jYW52YXMuZ2V0Q29udGV4dCkge1xuICAgICAgY29uc3Qgbm9DYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpO1xuICAgICAgbm9DYW52YXMuc3R5bGUuY29sb3IgPSBcInJlZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUucGFkZGluZyA9IFwiMTBweFwiO1xuICAgICAgbm9DYW52YXMuaW5uZXJUZXh0ID0gXCJFcnJvcjogeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgSFRNTCBjYW52YXNcIjtcbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmFwcGVuZENoaWxkKG5vQ2FudmFzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0UGl4ZWxSYXRpbygpO1xuICAgICAgdGhpcy5zZXRUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgdGhlIGZyYW1lIHRvIHRoZSBjb250YWluZXIgZWxlbWVudFxuICAgIHRoaXMuYm9keS5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG5cbiAgICB0aGlzLmJvZHkudmlldy5zY2FsZSA9IDE7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7XG4gICAgICB4OiAwLjUgKiB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCxcbiAgICAgIHk6IDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICB9O1xuXG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gYmluZHMgaGFtbWVyLCBpdCBjYW4gYmUgcmVwZWF0ZWQgb3ZlciBhbmQgb3ZlciBkdWUgdG8gdGhlIHVuaXF1ZW5lc3MgY2hlY2suXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYmluZEhhbW1lcigpIHtcbiAgICBpZiAodGhpcy5oYW1tZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5oYW1tZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLmRyYWcgPSB7fTtcbiAgICB0aGlzLnBpbmNoID0ge307XG5cbiAgICAvLyBpbml0IGhhbW1lclxuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lcih0aGlzLmZyYW1lLmNhbnZhcyk7XG4gICAgdGhpcy5oYW1tZXIuZ2V0KFwicGluY2hcIikuc2V0KHsgZW5hYmxlOiB0cnVlIH0pO1xuICAgIC8vIGVuYWJsZSB0byBnZXQgYmV0dGVyIHJlc3BvbnNlLCB0b2RvOiB0ZXN0IG9uIG1vYmlsZS5cbiAgICB0aGlzLmhhbW1lclxuICAgICAgLmdldChcInBhblwiKVxuICAgICAgLnNldCh7IHRocmVzaG9sZDogNSwgZGlyZWN0aW9uOiBIYW1tZXIuRElSRUNUSU9OX0FMTCB9KTtcblxuICAgIG9uVG91Y2godGhpcy5oYW1tZXIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uVG91Y2goZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwidGFwXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uVGFwKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcImRvdWJsZXRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRvdWJsZVRhcChldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwcmVzc1wiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkhvbGQoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFuc3RhcnRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25EcmFnU3RhcnQoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFubW92ZVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWcoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFuZW5kXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uRHJhZ0VuZChldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwaW5jaFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblBpbmNoKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIC8vIFRPRE86IG5lYXRseSBjbGVhbnVwIHRoZXNlIGhhbmRsZXJzIHdoZW4gcmUtY3JlYXRpbmcgdGhlIENhbnZhcywgSUYgdGhlc2UgYXJlIGRvbmUgd2l0aCBoYW1tZXIsIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiB3aWxsIG5vdCB3b3JrP1xuICAgIHRoaXMuZnJhbWUuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbk1vdXNlV2hlZWwoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mcmFtZS5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbk1vdXNlTW92ZShldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5mcmFtZS5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uQ29udGV4dChldmVudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmhhbW1lckZyYW1lID0gbmV3IEhhbW1lcih0aGlzLmZyYW1lKTtcbiAgICBvblJlbGVhc2UodGhpcy5oYW1tZXJGcmFtZSwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25SZWxlYXNlKGV2ZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBuZXcgc2l6ZSBmb3IgdGhlIG5ldHdvcmtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHdpZHRoICAgV2lkdGggaW4gcGl4ZWxzIG9yIHBlcmNlbnRhZ2UgKGZvciBleGFtcGxlICc4MDBweCdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgb3IgJzUwJScpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoZWlnaHQgIEhlaWdodCBpbiBwaXhlbHMgb3IgcGVyY2VudGFnZSAgKGZvciBleGFtcGxlICc0MDBweCdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgb3IgJzMwJScpXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2V0U2l6ZSh3aWR0aCA9IHRoaXMub3B0aW9ucy53aWR0aCwgaGVpZ2h0ID0gdGhpcy5vcHRpb25zLmhlaWdodCkge1xuICAgIHdpZHRoID0gdGhpcy5fcHJlcGFyZVZhbHVlKHdpZHRoKTtcbiAgICBoZWlnaHQgPSB0aGlzLl9wcmVwYXJlVmFsdWUoaGVpZ2h0KTtcblxuICAgIGxldCBlbWl0RXZlbnQgPSBmYWxzZTtcbiAgICBjb25zdCBvbGRXaWR0aCA9IHRoaXMuZnJhbWUuY2FudmFzLndpZHRoO1xuICAgIGNvbnN0IG9sZEhlaWdodCA9IHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgcGl4ZWwgcmF0aW9cbiAgICAvL1xuICAgIC8vIE5PVEU6IENvbW1lbnQgaW4gZm9sbG93aW5nIGlzIHJhdGhlciBpbmNvbnNpc3RlbnQ7IHRoaXMgaXMgdGhlIE9OTFkgcGxhY2UgaW4gdGhlIGNvZGVcbiAgICAvLyAgICAgICB3aGVyZSBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHBpeGVsIHJhdGlvIGNvdWxkIGNoYW5nZSBhdCBydW50aW1lLlxuICAgIC8vICAgICAgIFRoZSBvbmx5IHdheSBJIGNhbiB0aGluayBvZiB0aGlzIGhhcHBlbmluZyBpcyBhIHJvdGF0aW5nIHNjcmVlbiBvciB0YWJsZXQ7IGJ1dCB0aGVuXG4gICAgLy8gICAgICAgdGhlcmUgc2hvdWxkIGJlIGEgbWVjaGFuaXNtIGZvciByZWxvYWRpbmcgdGhlIGRhdGEgKFRPRE86IGNoZWNrIGlmIHRoaXMgaXMgcHJlc2VudCkuXG4gICAgLy9cbiAgICAvLyAgICAgICBJZiB0aGUgYXNzdW1wdGlvbiBpcyB0cnVlIChpLmUuIHBpeGVsIHJhdGlvIGNhbiBjaGFuZ2UgYXQgcnVudGltZSksIHRoZW4gKmFsbCogdXNhZ2VcbiAgICAvLyAgICAgICBvZiBwaXhlbCByYXRpbyBtdXN0IGJlIG92ZXJoYXVsZWQgZm9yIHRoaXMuXG4gICAgLy9cbiAgICAvLyAgICAgICBGb3IgdGhlIHRpbWUgYmVpbmcsIEkgd2lsbCBodW1vciB0aGUgYXNzdW1wdGlvbiBoZXJlLCBhbmQgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgYXNzdW1lIGl0IGlzXG4gICAgLy8gICAgICAgY29uc3RhbnQuXG4gICAgY29uc3QgcHJldmlvdXNSYXRpbyA9IHRoaXMucGl4ZWxSYXRpbzsgLy8gd2UgY2FjaGUgdGhpcyBiZWNhdXNlIHRoZSBjYW1lcmEgc3RhdGUgc3RvcmFnZSBuZWVkcyB0aGUgb2xkIHZhbHVlXG4gICAgdGhpcy5fc2V0UGl4ZWxSYXRpbygpO1xuXG4gICAgaWYgKFxuICAgICAgd2lkdGggIT0gdGhpcy5vcHRpb25zLndpZHRoIHx8XG4gICAgICBoZWlnaHQgIT0gdGhpcy5vcHRpb25zLmhlaWdodCB8fFxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS53aWR0aCAhPSB3aWR0aCB8fFxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS5oZWlnaHQgIT0gaGVpZ2h0XG4gICAgKSB7XG4gICAgICB0aGlzLl9nZXRDYW1lcmFTdGF0ZShwcmV2aW91c1JhdGlvKTtcblxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS53aWR0aCA9IHdpZHRoO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSBcIjEwMCVcIjtcblxuICAgICAgdGhpcy5mcmFtZS5jYW52YXMud2lkdGggPSBNYXRoLnJvdW5kKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCA9IE1hdGgucm91bmQoXG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcblxuICAgICAgdGhpcy5vcHRpb25zLndpZHRoID0gd2lkdGg7XG4gICAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICB0aGlzLmNhbnZhc1ZpZXdDZW50ZXIgPSB7XG4gICAgICAgIHg6IDAuNSAqIHRoaXMuZnJhbWUuY2xpZW50V2lkdGgsXG4gICAgICAgIHk6IDAuNSAqIHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgZW1pdEV2ZW50ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyB3b3VsZCBhZGFwdCB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB0byB0aGUgd2lkdGggZnJvbSAxMDAlIGlmIGFuZCBvbmx5IGlmXG4gICAgICAvLyB0aGVyZSBpcyBhIGNoYW5nZS5cblxuICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLnJvdW5kKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcbiAgICAgIGNvbnN0IG5ld0hlaWdodCA9IE1hdGgucm91bmQoXG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcblxuICAgICAgLy8gc3RvcmUgdGhlIGNhbWVyYSBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBzaXplLlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCAhPT0gbmV3V2lkdGggfHxcbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMuaGVpZ2h0ICE9PSBuZXdIZWlnaHRcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9nZXRDYW1lcmFTdGF0ZShwcmV2aW91c1JhdGlvKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZnJhbWUuY2FudmFzLndpZHRoICE9PSBuZXdXaWR0aCkge1xuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCA9IG5ld1dpZHRoO1xuICAgICAgICBlbWl0RXZlbnQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCAhPT0gbmV3SGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCA9IG5ld0hlaWdodDtcbiAgICAgICAgZW1pdEV2ZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW1pdEV2ZW50ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVzaXplXCIsIHtcbiAgICAgICAgd2lkdGg6IE1hdGgucm91bmQodGhpcy5mcmFtZS5jYW52YXMud2lkdGggLyB0aGlzLnBpeGVsUmF0aW8pLFxuICAgICAgICBoZWlnaHQ6IE1hdGgucm91bmQodGhpcy5mcmFtZS5jYW52YXMuaGVpZ2h0IC8gdGhpcy5waXhlbFJhdGlvKSxcbiAgICAgICAgb2xkV2lkdGg6IE1hdGgucm91bmQob2xkV2lkdGggLyB0aGlzLnBpeGVsUmF0aW8pLFxuICAgICAgICBvbGRIZWlnaHQ6IE1hdGgucm91bmQob2xkSGVpZ2h0IC8gdGhpcy5waXhlbFJhdGlvKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyByZXN0b3JlIHRoZSBjYW1lcmEgb24gY2hhbmdlLlxuICAgICAgdGhpcy5fc2V0Q2FtZXJhU3RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgaW5pdGlhbGl6ZWQgc28gdGhlIGdldCBhbmQgc2V0IGNhbWVyYSB3aWxsIHdvcmsgZnJvbSBub3cgb24uXG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgcmV0dXJuIGVtaXRFdmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgKi9cbiAgZ2V0Q29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZS5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgcGl4ZWwgcmF0aW8gZm9yIHZhcmlvdXMgYnJvd3NlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lUGl4ZWxSYXRpbygpIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICBpZiAoY3R4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgY2FudmF4IGNvbnRleHRcIik7XG4gICAgfVxuXG4gICAgbGV0IG51bWVyYXRvciA9IDE7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIC8vICh3aW5kb3cgIT09IHVuZGVmaW5lZCkgZG9lc24ndCB3b3JrIGhlcmUhXG4gICAgICAvLyBQcm90ZWN0aW9uIGR1cmluZyB1bml0IHRlc3RzLCB3aGVyZSAnd2luZG93JyBjYW4gYmUgbWlzc2luZ1xuICAgICAgbnVtZXJhdG9yID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgICB9XG5cbiAgICBjb25zdCBkZW5vbWluYXRvciA9XG4gICAgICBjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIDE7XG5cbiAgICByZXR1cm4gbnVtZXJhdG9yIC8gZGVub21pbmF0b3I7XG4gIH1cblxuICAvKipcbiAgICogTGF6eSBkZXRlcm1pbmF0aW9uIG9mIHBpeGVsIHJhdGlvLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFBpeGVsUmF0aW8oKSB7XG4gICAgdGhpcy5waXhlbFJhdGlvID0gdGhpcy5fZGV0ZXJtaW5lUGl4ZWxSYXRpbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNmb3JtIGluIHRoZSBjb250YWluZWQgY29udGV4dCwgYmFzZWQgb24gaXRzIHBpeGVsUmF0aW9cbiAgICovXG4gIHNldFRyYW5zZm9ybSgpIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICBpZiAoY3R4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgY2FudmF4IGNvbnRleHRcIik7XG4gICAgfVxuXG4gICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgWCBjb29yZGluYXRlIGluIERPTS1zcGFjZSAoY29vcmRpbmF0ZSBwb2ludCBpbiBicm93c2VyIHJlbGF0aXZlIHRvIHRoZSBjb250YWluZXIgZGl2KSB0b1xuICAgKiB0aGUgWCBjb29yZGluYXRlIGluIGNhbnZhcy1zcGFjZSAodGhlIHNpbXVsYXRpb24gc2FuZGJveCwgd2hpY2ggdGhlIGNhbWVyYSBsb29rcyB1cG9uKVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX1hjb252ZXJ0RE9NdG9DYW52YXMoeCkge1xuICAgIHJldHVybiAoeCAtIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLngpIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgWCBjb29yZGluYXRlIGluIGNhbnZhcy1zcGFjZSAodGhlIHNpbXVsYXRpb24gc2FuZGJveCwgd2hpY2ggdGhlIGNhbWVyYSBsb29rcyB1cG9uKSB0b1xuICAgKiB0aGUgWCBjb29yZGluYXRlIGluIERPTS1zcGFjZSAoY29vcmRpbmF0ZSBwb2ludCBpbiBicm93c2VyIHJlbGF0aXZlIHRvIHRoZSBjb250YWluZXIgZGl2KVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX1hjb252ZXJ0Q2FudmFzVG9ET00oeCkge1xuICAgIHJldHVybiB4ICogdGhpcy5ib2R5LnZpZXcuc2NhbGUgKyB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi54O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIFkgY29vcmRpbmF0ZSBpbiBET00tc3BhY2UgKGNvb3JkaW5hdGUgcG9pbnQgaW4gYnJvd3NlciByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyIGRpdikgdG9cbiAgICogdGhlIFkgY29vcmRpbmF0ZSBpbiBjYW52YXMtc3BhY2UgKHRoZSBzaW11bGF0aW9uIHNhbmRib3gsIHdoaWNoIHRoZSBjYW1lcmEgbG9va3MgdXBvbilcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ZY29udmVydERPTXRvQ2FudmFzKHkpIHtcbiAgICByZXR1cm4gKHkgLSB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55KSAvIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIFkgY29vcmRpbmF0ZSBpbiBjYW52YXMtc3BhY2UgKHRoZSBzaW11bGF0aW9uIHNhbmRib3gsIHdoaWNoIHRoZSBjYW1lcmEgbG9va3MgdXBvbikgdG9cbiAgICogdGhlIFkgY29vcmRpbmF0ZSBpbiBET00tc3BhY2UgKGNvb3JkaW5hdGUgcG9pbnQgaW4gYnJvd3NlciByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyIGRpdilcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ZY29udmVydENhbnZhc1RvRE9NKHkpIHtcbiAgICByZXR1cm4geSAqIHRoaXMuYm9keS52aWV3LnNjYWxlICsgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb3NcbiAgICogQHJldHVybnMge3BvaW50fVxuICAgKi9cbiAgY2FudmFzVG9ET00ocG9zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRoaXMuX1hjb252ZXJ0Q2FudmFzVG9ET00ocG9zLngpLFxuICAgICAgeTogdGhpcy5fWWNvbnZlcnRDYW52YXNUb0RPTShwb3MueSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb3NcbiAgICogQHJldHVybnMge3BvaW50fVxuICAgKi9cbiAgRE9NdG9DYW52YXMocG9zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRoaXMuX1hjb252ZXJ0RE9NdG9DYW52YXMocG9zLngpLFxuICAgICAgeTogdGhpcy5fWWNvbnZlcnRET010b0NhbnZhcyhwb3MueSksXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW52YXM7XG4iLCAiaW1wb3J0IHsgZWFzaW5nRnVuY3Rpb25zIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG5pbXBvcnQgTmV0d29ya1V0aWwgZnJvbSBcIi4uL05ldHdvcmtVdGlsXCI7XG5pbXBvcnQgeyBub3JtYWxpemVGaXRPcHRpb25zIH0gZnJvbSBcIi4vdmlldy1oYW5kbGVyXCI7XG5cbi8qKlxuICogVGhlIHZpZXdcbiAqL1xuY2xhc3MgVmlldyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBjYW52YXMpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xuXG4gICAgdGhpcy5hbmltYXRpb25TcGVlZCA9IDEgLyB0aGlzLnJlbmRlclJlZnJlc2hSYXRlO1xuICAgIHRoaXMuYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb24gPSBcImVhc2VJbk91dFF1aW50XCI7XG4gICAgdGhpcy5lYXNpbmdUaW1lID0gMDtcbiAgICB0aGlzLnNvdXJjZVNjYWxlID0gMDtcbiAgICB0aGlzLnRhcmdldFNjYWxlID0gMDtcbiAgICB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uID0gMDtcbiAgICB0aGlzLnRhcmdldFRyYW5zbGF0aW9uID0gMDtcbiAgICB0aGlzLmxvY2tlZE9uTm9kZUlkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubG9ja2VkT25Ob2RlT2Zmc2V0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudG91Y2hUaW1lID0gMDtcblxuICAgIHRoaXMudmlld0Z1bmN0aW9uID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJmaXRcIiwgdGhpcy5maXQuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJhbmltYXRpb25GaW5pc2hlZFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0b3BSZW5kZXJpbmdcIik7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJ1bmxvY2tOb2RlXCIsIHRoaXMucmVsZWFzZU5vZGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XVxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gem9vbXMgb3V0IHRvIGZpdCBhbGwgZGF0YSBvbiBzY3JlZW4gYmFzZWQgb24gYW1vdW50IG9mIG5vZGVzXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17e25vZGVzPUFycmF5fX1dXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRpYWxab29tPWZhbHNlXSAgfCB6b29tIGJhc2VkIG9uIGZpdHRlZCBmb3JtdWxhIG9yIHJhbmdlLCB0cnVlID0gZml0dGVkLCBkZWZhdWx0ID0gZmFsc2U7XG4gICAqL1xuICBmaXQob3B0aW9ucywgaW5pdGlhbFpvb20gPSBmYWxzZSkge1xuICAgIG9wdGlvbnMgPSBub3JtYWxpemVGaXRPcHRpb25zKG9wdGlvbnMsIHRoaXMuYm9keS5ub2RlSW5kaWNlcyk7XG5cbiAgICBjb25zdCBjYW52YXNXaWR0aCA9IHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBjYW52YXNIZWlnaHQgPSB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0O1xuXG4gICAgbGV0IHJhbmdlO1xuICAgIGxldCB6b29tTGV2ZWw7XG4gICAgaWYgKGNhbnZhc1dpZHRoID09PSAwIHx8IGNhbnZhc0hlaWdodCA9PT0gMCkge1xuICAgICAgLy8gVGhlcmUncyBubyBwb2ludCBpbiB0cnlpbmcgdG8gZml0IGludG8gemVybyBzaXplZCBjYW52YXMuIFRoaXMgY291bGRcbiAgICAgIC8vIHBvdGVudGlhbGx5IGV2ZW4gcmVzdWx0IGluIGludmFsaWQgdmFsdWVzIGJlaW5nIGNvbXB1dGVkLiBGb3IgZXhhbXBsZVxuICAgICAgLy8gZm9yIG5ldHdvcmsgd2l0aG91dCBub2RlcyBhbmQgemVybyBzaXplZCBjYW52YXMgdGhlIHpvb20gbGV2ZWwgd291bGRcbiAgICAgIC8vIGVuZCB1cCBiZWluZyBjb21wdXRlZCBhcyAwLzAgd2hpY2ggcmVzdWx0cyBpbiBOYU4uIEluIGFueSBvdGhlciBjYXNlXG4gICAgICAvLyB0aGlzIHdvdWxkIGJlIDAvc29tZXRoaW5nIHdoaWNoIGlzIGFnYWluIHBvaW50bGVzcyB0byBjb21wdXRlLlxuICAgICAgem9vbUxldmVsID0gMTtcblxuICAgICAgcmFuZ2UgPSBOZXR3b3JrVXRpbC5nZXRSYW5nZSh0aGlzLmJvZHkubm9kZXMsIG9wdGlvbnMubm9kZXMpO1xuICAgIH0gZWxzZSBpZiAoaW5pdGlhbFpvb20gPT09IHRydWUpIHtcbiAgICAgIC8vIGNoZWNrIGlmIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSBub2RlcyBoYXZlIGEgcHJlZGVmaW5lZCBwb3NpdGlvbi4gSWYgc28sIHdlIHVzZSB0aGUgcmFuZ2UsIG5vdCB0aGUgYXBwcm94aW1hdGlvbi5cbiAgICAgIGxldCBwb3NpdGlvbkRlZmluZWQgPSAwO1xuICAgICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgICAgIGlmIChub2RlLnByZWRlZmluZWRQb3NpdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcG9zaXRpb25EZWZpbmVkICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocG9zaXRpb25EZWZpbmVkID4gMC41ICogdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZpdChvcHRpb25zLCBmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmFuZ2UgPSBOZXR3b3JrVXRpbC5nZXRSYW5nZSh0aGlzLmJvZHkubm9kZXMsIG9wdGlvbnMubm9kZXMpO1xuXG4gICAgICBjb25zdCBudW1iZXJPZk5vZGVzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDtcbiAgICAgIHpvb21MZXZlbCA9IDEyLjY2MiAvIChudW1iZXJPZk5vZGVzICsgNy40MTQ3KSArIDAuMDk2NDgyMjsgLy8gdGhpcyBpcyBvYnRhaW5lZCBmcm9tIGZpdHRpbmcgYSBkYXRhc2V0IGZyb20gNSBwb2ludHMgd2l0aCBzY2FsZSBsZXZlbHMgdGhhdCBsb29rZWQgZ29vZC5cblxuICAgICAgLy8gY29ycmVjdCBmb3IgbGFyZ2VyIGNhbnZhc3Nlcy5cbiAgICAgIGNvbnN0IGZhY3RvciA9IE1hdGgubWluKGNhbnZhc1dpZHRoIC8gNjAwLCBjYW52YXNIZWlnaHQgLyA2MDApO1xuICAgICAgem9vbUxldmVsICo9IGZhY3RvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXNpemVOb2Rlc1wiKTtcbiAgICAgIHJhbmdlID0gTmV0d29ya1V0aWwuZ2V0UmFuZ2UodGhpcy5ib2R5Lm5vZGVzLCBvcHRpb25zLm5vZGVzKTtcblxuICAgICAgY29uc3QgeERpc3RhbmNlID0gTWF0aC5hYnMocmFuZ2UubWF4WCAtIHJhbmdlLm1pblgpICogMS4xO1xuICAgICAgY29uc3QgeURpc3RhbmNlID0gTWF0aC5hYnMocmFuZ2UubWF4WSAtIHJhbmdlLm1pblkpICogMS4xO1xuXG4gICAgICBjb25zdCB4Wm9vbUxldmVsID0gY2FudmFzV2lkdGggLyB4RGlzdGFuY2U7XG4gICAgICBjb25zdCB5Wm9vbUxldmVsID0gY2FudmFzSGVpZ2h0IC8geURpc3RhbmNlO1xuXG4gICAgICB6b29tTGV2ZWwgPSB4Wm9vbUxldmVsIDw9IHlab29tTGV2ZWwgPyB4Wm9vbUxldmVsIDogeVpvb21MZXZlbDtcbiAgICB9XG5cbiAgICBpZiAoem9vbUxldmVsID4gb3B0aW9ucy5tYXhab29tTGV2ZWwpIHtcbiAgICAgIHpvb21MZXZlbCA9IG9wdGlvbnMubWF4Wm9vbUxldmVsO1xuICAgIH0gZWxzZSBpZiAoem9vbUxldmVsIDwgb3B0aW9ucy5taW5ab29tTGV2ZWwpIHtcbiAgICAgIHpvb21MZXZlbCA9IG9wdGlvbnMubWluWm9vbUxldmVsO1xuICAgIH1cblxuICAgIGNvbnN0IGNlbnRlciA9IE5ldHdvcmtVdGlsLmZpbmRDZW50ZXIocmFuZ2UpO1xuICAgIGNvbnN0IGFuaW1hdGlvbk9wdGlvbnMgPSB7XG4gICAgICBwb3NpdGlvbjogY2VudGVyLFxuICAgICAgc2NhbGU6IHpvb21MZXZlbCxcbiAgICAgIGFuaW1hdGlvbjogb3B0aW9ucy5hbmltYXRpb24sXG4gICAgfTtcbiAgICB0aGlzLm1vdmVUbyhhbmltYXRpb25PcHRpb25zKTtcbiAgfVxuXG4gIC8vIGFuaW1hdGlvblxuXG4gIC8qKlxuICAgKiBDZW50ZXIgYSBub2RlIGluIHZpZXcuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBub2RlSWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zXVxuICAgKi9cbiAgZm9jdXMobm9kZUlkLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICB4OiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS54LFxuICAgICAgICB5OiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS55LFxuICAgICAgfTtcbiAgICAgIG9wdGlvbnMucG9zaXRpb24gPSBub2RlUG9zaXRpb247XG4gICAgICBvcHRpb25zLmxvY2tlZE9uTm9kZSA9IG5vZGVJZDtcblxuICAgICAgdGhpcy5tb3ZlVG8ob3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb2RlOiBcIiArIG5vZGVJZCArIFwiIGNhbm5vdCBiZSBmb3VuZC5cIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICB8ICBvcHRpb25zLm9mZnNldCAgID0ge3g6bnVtYmVyLCB5Om51bWJlcn0gICAvLyBvZmZzZXQgZnJvbSB0aGUgY2VudGVyIGluIERPTSBwaXhlbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuc2NhbGUgICAgPSBudW1iZXIgICAgICAgICAgICAgICAgIC8vIHNjYWxlIHRvIG1vdmUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMucG9zaXRpb24gPSB7eDpudW1iZXIsIHk6bnVtYmVyfSAgIC8vIHBvc2l0aW9uIHRvIG1vdmUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuYW5pbWF0aW9uID0ge2R1cmF0aW9uOm51bWJlciwgZWFzaW5nRnVuY3Rpb246U3RyaW5nfSB8fCBCb29sZWFuICAgLy8gcG9zaXRpb24gdG8gbW92ZSB0b1xuICAgKi9cbiAgbW92ZVRvKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMub2Zmc2V0ICE9IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLm9mZnNldC54ICE9IG51bGwpIHtcbiAgICAgICAgLy8gQ29lcmNlIGFuZCB2ZXJpZnkgdGhhdCB4IGlzIHZhbGlkLlxuICAgICAgICBvcHRpb25zLm9mZnNldC54ID0gK29wdGlvbnMub2Zmc2V0Lng7XG4gICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG9wdGlvbnMub2Zmc2V0LngpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICdUaGUgb3B0aW9uIFwib2Zmc2V0LnhcIiBoYXMgdG8gYmUgYSBmaW5pdGUgbnVtYmVyLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLm9mZnNldC54ID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMub2Zmc2V0LnkgIT0gbnVsbCkge1xuICAgICAgICAvLyBDb2VyY2UgYW5kIHZlcmlmeSB0aGF0IHkgaXMgdmFsaWQuXG4gICAgICAgIG9wdGlvbnMub2Zmc2V0LnkgPSArb3B0aW9ucy5vZmZzZXQueTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5vZmZzZXQueSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgJ1RoZSBvcHRpb24gXCJvZmZzZXQueVwiIGhhcyB0byBiZSBhIGZpbml0ZSBudW1iZXIuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMub2Zmc2V0LnggPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLm9mZnNldCA9IHtcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMucG9zaXRpb24ueCAhPSBudWxsKSB7XG4gICAgICAgIC8vIENvZXJjZSBhbmQgdmVyaWZ5IHRoYXQgeCBpcyB2YWxpZC5cbiAgICAgICAgb3B0aW9ucy5wb3NpdGlvbi54ID0gK29wdGlvbnMucG9zaXRpb24ueDtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5wb3NpdGlvbi54KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAnVGhlIG9wdGlvbiBcInBvc2l0aW9uLnhcIiBoYXMgdG8gYmUgYSBmaW5pdGUgbnVtYmVyLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLnBvc2l0aW9uLnggPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wb3NpdGlvbi55ICE9IG51bGwpIHtcbiAgICAgICAgLy8gQ29lcmNlIGFuZCB2ZXJpZnkgdGhhdCB5IGlzIHZhbGlkLlxuICAgICAgICBvcHRpb25zLnBvc2l0aW9uLnkgPSArb3B0aW9ucy5wb3NpdGlvbi55O1xuICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShvcHRpb25zLnBvc2l0aW9uLnkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICdUaGUgb3B0aW9uIFwicG9zaXRpb24ueVwiIGhhcyB0byBiZSBhIGZpbml0ZSBudW1iZXIuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMucG9zaXRpb24ueCA9IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMucG9zaXRpb24gPSB0aGlzLmdldFZpZXdQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNjYWxlICE9IG51bGwpIHtcbiAgICAgIC8vIENvZXJjZSBhbmQgdmVyaWZ5IHRoYXQgdGhlIHNjYWxlIGlzIHZhbGlkLlxuICAgICAgb3B0aW9ucy5zY2FsZSA9ICtvcHRpb25zLnNjYWxlO1xuICAgICAgaWYgKCEob3B0aW9ucy5zY2FsZSA+IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ1RoZSBvcHRpb24gXCJzY2FsZVwiIGhhcyB0byBiZSBhIG51bWJlciBncmVhdGVyIHRoYW4gemVyby4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy5hbmltYXRpb24gPSB7IGR1cmF0aW9uOiAwIH07XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMuYW5pbWF0aW9uID0geyBkdXJhdGlvbjogMCB9O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24gPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMuYW5pbWF0aW9uID0ge307XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbi5kdXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmFuaW1hdGlvbi5kdXJhdGlvbiA9IDEwMDA7XG4gICAgfSAvLyBkZWZhdWx0IGR1cmF0aW9uXG4gICAgaWYgKG9wdGlvbnMuYW5pbWF0aW9uLmVhc2luZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuYW5pbWF0aW9uLmVhc2luZ0Z1bmN0aW9uID0gXCJlYXNlSW5PdXRRdWFkXCI7XG4gICAgfSAvLyBkZWZhdWx0IGVhc2luZyBmdW5jdGlvblxuXG4gICAgdGhpcy5hbmltYXRlVmlldyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAgfCAgb3B0aW9ucy5vZmZzZXQgICA9IHt4Om51bWJlciwgeTpudW1iZXJ9ICAgLy8gb2Zmc2V0IGZyb20gdGhlIGNlbnRlciBpbiBET00gcGl4ZWxzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLnRpbWUgICAgID0gbnVtYmVyICAgICAgICAgICAgICAgICAvLyBhbmltYXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuc2NhbGUgICAgPSBudW1iZXIgICAgICAgICAgICAgICAgIC8vIHNjYWxlIHRvIGFuaW1hdGUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMucG9zaXRpb24gPSB7eDpudW1iZXIsIHk6bnVtYmVyfSAgIC8vIHBvc2l0aW9uIHRvIGFuaW1hdGUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuZWFzaW5nRnVuY3Rpb24gPSBTdHJpbmcgICAgICAgICAgIC8vIGxpbmVhciwgZWFzZUluUXVhZCwgZWFzZU91dFF1YWQsIGVhc2VJbk91dFF1YWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYXNlSW5DdWJpYywgZWFzZU91dEN1YmljLCBlYXNlSW5PdXRDdWJpYyxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhc2VJblF1YXJ0LCBlYXNlT3V0UXVhcnQsIGVhc2VJbk91dFF1YXJ0LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFzZUluUXVpbnQsIGVhc2VPdXRRdWludCwgZWFzZUluT3V0UXVpbnRcbiAgICovXG4gIGFuaW1hdGVWaWV3KG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb24gPSBvcHRpb25zLmFuaW1hdGlvbi5lYXNpbmdGdW5jdGlvbjtcbiAgICAvLyByZWxlYXNlIGlmIHNvbWV0aGluZyBmb2N1c3NlZCBvbiB0aGUgbm9kZVxuICAgIHRoaXMucmVsZWFzZU5vZGUoKTtcbiAgICBpZiAob3B0aW9ucy5sb2NrZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMubG9ja2VkT25Ob2RlSWQgPSBvcHRpb25zLmxvY2tlZE9uTm9kZTtcbiAgICAgIHRoaXMubG9ja2VkT25Ob2RlT2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQ7XG4gICAgfVxuXG4gICAgLy8gZm9yY2VmdWxseSBjb21wbGV0ZSB0aGUgb2xkIGFuaW1hdGlvbiBpZiBpdCB3YXMgc3RpbGwgcnVubmluZ1xuICAgIGlmICh0aGlzLmVhc2luZ1RpbWUgIT0gMCkge1xuICAgICAgdGhpcy5fdHJhbnNpdGlvblJlZHJhdyh0cnVlKTsgLy8gYnkgc2V0dGluZyBlYXNpbmd0aW1lIHRvIDEsIHdlIGZpbmlzaCB0aGUgYW5pbWF0aW9uLlxuICAgIH1cblxuICAgIHRoaXMuc291cmNlU2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uID0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb247XG4gICAgdGhpcy50YXJnZXRTY2FsZSA9IG9wdGlvbnMuc2NhbGU7XG5cbiAgICAvLyBzZXQgdGhlIHNjYWxlIHNvIHRoZSB2aWV3Q2VudGVyIGlzIGJhc2VkIG9uIHRoZSBjb3JyZWN0IHpvb20gbGV2ZWwuIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgdHJhbnNpdGlvblJlZHJhd1xuICAgIC8vIGJ1dCBhdCBsZWFzdCB0aGVuIHdlJ2xsIGhhdmUgdGhlIHRhcmdldCB0cmFuc2l0aW9uXG4gICAgdGhpcy5ib2R5LnZpZXcuc2NhbGUgPSB0aGlzLnRhcmdldFNjYWxlO1xuICAgIGNvbnN0IHZpZXdDZW50ZXIgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyh7XG4gICAgICB4OiAwLjUgKiB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGgsXG4gICAgICB5OiAwLjUgKiB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGlzdGFuY2VGcm9tQ2VudGVyID0ge1xuICAgICAgLy8gb2Zmc2V0IGZyb20gdmlldywgZGlzdGFuY2UgdmlldyBoYXMgdG8gY2hhbmdlIGJ5IHRoZXNlIHggYW5kIHkgdG8gY2VudGVyIHRoZSBub2RlXG4gICAgICB4OiB2aWV3Q2VudGVyLnggLSBvcHRpb25zLnBvc2l0aW9uLngsXG4gICAgICB5OiB2aWV3Q2VudGVyLnkgLSBvcHRpb25zLnBvc2l0aW9uLnksXG4gICAgfTtcbiAgICB0aGlzLnRhcmdldFRyYW5zbGF0aW9uID0ge1xuICAgICAgeDpcbiAgICAgICAgdGhpcy5zb3VyY2VUcmFuc2xhdGlvbi54ICtcbiAgICAgICAgZGlzdGFuY2VGcm9tQ2VudGVyLnggKiB0aGlzLnRhcmdldFNjYWxlICtcbiAgICAgICAgb3B0aW9ucy5vZmZzZXQueCxcbiAgICAgIHk6XG4gICAgICAgIHRoaXMuc291cmNlVHJhbnNsYXRpb24ueSArXG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci55ICogdGhpcy50YXJnZXRTY2FsZSArXG4gICAgICAgIG9wdGlvbnMub2Zmc2V0LnksXG4gICAgfTtcblxuICAgIC8vIGlmIHRoZSB0aW1lIGlzIHNldCB0byAwLCBkb24ndCBkbyBhbiBhbmltYXRpb25cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24uZHVyYXRpb24gPT09IDApIHtcbiAgICAgIGlmICh0aGlzLmxvY2tlZE9uTm9kZUlkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnZpZXdGdW5jdGlvbiA9IHRoaXMuX2xvY2tlZFJlZHJhdy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImluaXRSZWRyYXdcIiwgdGhpcy52aWV3RnVuY3Rpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ib2R5LnZpZXcuc2NhbGUgPSB0aGlzLnRhcmdldFNjYWxlO1xuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHRoaXMudGFyZ2V0VHJhbnNsYXRpb247XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbmltYXRpb25TcGVlZCA9XG4gICAgICAgIDEgLyAoNjAgKiBvcHRpb25zLmFuaW1hdGlvbi5kdXJhdGlvbiAqIDAuMDAxKSB8fCAxIC8gNjA7IC8vIDYwIGZvciA2MCBzZWNvbmRzLCAwLjAwMSBmb3IgbWlsbGknc1xuICAgICAgdGhpcy5hbmltYXRpb25FYXNpbmdGdW5jdGlvbiA9IG9wdGlvbnMuYW5pbWF0aW9uLmVhc2luZ0Z1bmN0aW9uO1xuXG4gICAgICB0aGlzLnZpZXdGdW5jdGlvbiA9IHRoaXMuX3RyYW5zaXRpb25SZWRyYXcuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiaW5pdFJlZHJhd1wiLCB0aGlzLnZpZXdGdW5jdGlvbik7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0YXJ0UmVuZGVyaW5nXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB1c2VkIHRvIGFuaW1hdGUgc21vb3RobHkgYnkgaGlqYWNraW5nIHRoZSByZWRyYXcgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbG9ja2VkUmVkcmF3KCkge1xuICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgIHg6IHRoaXMuYm9keS5ub2Rlc1t0aGlzLmxvY2tlZE9uTm9kZUlkXS54LFxuICAgICAgeTogdGhpcy5ib2R5Lm5vZGVzW3RoaXMubG9ja2VkT25Ob2RlSWRdLnksXG4gICAgfTtcbiAgICBjb25zdCB2aWV3Q2VudGVyID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoe1xuICAgICAgeDogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoLFxuICAgICAgeTogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICB9KTtcbiAgICBjb25zdCBkaXN0YW5jZUZyb21DZW50ZXIgPSB7XG4gICAgICAvLyBvZmZzZXQgZnJvbSB2aWV3LCBkaXN0YW5jZSB2aWV3IGhhcyB0byBjaGFuZ2UgYnkgdGhlc2UgeCBhbmQgeSB0byBjZW50ZXIgdGhlIG5vZGVcbiAgICAgIHg6IHZpZXdDZW50ZXIueCAtIG5vZGVQb3NpdGlvbi54LFxuICAgICAgeTogdmlld0NlbnRlci55IC0gbm9kZVBvc2l0aW9uLnksXG4gICAgfTtcbiAgICBjb25zdCBzb3VyY2VUcmFuc2xhdGlvbiA9IHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uO1xuICAgIGNvbnN0IHRhcmdldFRyYW5zbGF0aW9uID0ge1xuICAgICAgeDpcbiAgICAgICAgc291cmNlVHJhbnNsYXRpb24ueCArXG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci54ICogdGhpcy5ib2R5LnZpZXcuc2NhbGUgK1xuICAgICAgICB0aGlzLmxvY2tlZE9uTm9kZU9mZnNldC54LFxuICAgICAgeTpcbiAgICAgICAgc291cmNlVHJhbnNsYXRpb24ueSArXG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci55ICogdGhpcy5ib2R5LnZpZXcuc2NhbGUgK1xuICAgICAgICB0aGlzLmxvY2tlZE9uTm9kZU9mZnNldC55LFxuICAgIH07XG5cbiAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHRhcmdldFRyYW5zbGF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBzdGF0ZSBvZiBhIGxvY2tlZCBvbiBOb2RlXG4gICAqL1xuICByZWxlYXNlTm9kZSgpIHtcbiAgICBpZiAodGhpcy5sb2NrZWRPbk5vZGVJZCAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmlld0Z1bmN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9mZihcImluaXRSZWRyYXdcIiwgdGhpcy52aWV3RnVuY3Rpb24pO1xuICAgICAgdGhpcy5sb2NrZWRPbk5vZGVJZCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubG9ja2VkT25Ob2RlT2Zmc2V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmaW5pc2hlZD1mYWxzZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF90cmFuc2l0aW9uUmVkcmF3KGZpbmlzaGVkID0gZmFsc2UpIHtcbiAgICB0aGlzLmVhc2luZ1RpbWUgKz0gdGhpcy5hbmltYXRpb25TcGVlZDtcbiAgICB0aGlzLmVhc2luZ1RpbWUgPSBmaW5pc2hlZCA9PT0gdHJ1ZSA/IDEuMCA6IHRoaXMuZWFzaW5nVGltZTtcblxuICAgIGNvbnN0IHByb2dyZXNzID0gZWFzaW5nRnVuY3Rpb25zW3RoaXMuYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb25dKFxuICAgICAgdGhpcy5lYXNpbmdUaW1lXG4gICAgKTtcblxuICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID1cbiAgICAgIHRoaXMuc291cmNlU2NhbGUgKyAodGhpcy50YXJnZXRTY2FsZSAtIHRoaXMuc291cmNlU2NhbGUpICogcHJvZ3Jlc3M7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7XG4gICAgICB4OlxuICAgICAgICB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uLnggK1xuICAgICAgICAodGhpcy50YXJnZXRUcmFuc2xhdGlvbi54IC0gdGhpcy5zb3VyY2VUcmFuc2xhdGlvbi54KSAqIHByb2dyZXNzLFxuICAgICAgeTpcbiAgICAgICAgdGhpcy5zb3VyY2VUcmFuc2xhdGlvbi55ICtcbiAgICAgICAgKHRoaXMudGFyZ2V0VHJhbnNsYXRpb24ueSAtIHRoaXMuc291cmNlVHJhbnNsYXRpb24ueSkgKiBwcm9ncmVzcyxcbiAgICB9O1xuXG4gICAgLy8gY2xlYW51cFxuICAgIGlmICh0aGlzLmVhc2luZ1RpbWUgPj0gMS4wKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIHRoaXMuZWFzaW5nVGltZSA9IDA7XG4gICAgICBpZiAodGhpcy5sb2NrZWRPbk5vZGVJZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52aWV3RnVuY3Rpb24gPSB0aGlzLl9sb2NrZWRSZWRyYXcuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJhbmltYXRpb25GaW5pc2hlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFNjYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7e3g6IG51bWJlciwgeTogbnVtYmVyfX1cbiAgICovXG4gIGdldFZpZXdQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoe1xuICAgICAgeDogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoLFxuICAgICAgeTogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWV3O1xuIiwgInR5cGUgSWRUeXBlID0gc3RyaW5nIHwgbnVtYmVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdGaXRPcHRpb25zIHtcbiAgbm9kZXM6IElkVHlwZVtdO1xuICBtaW5ab29tTGV2ZWw6IG51bWJlcjtcbiAgbWF4Wm9vbUxldmVsOiBudW1iZXI7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgdGhlIGZpdCBvcHRpb25zLCByZXBsYWNlIG1pc3Npbmcgb3B0aW9uYWwgdmFsdWVzIGJ5IGRlZmF1bHRzIGV0Yy5cbiAqXG4gKiBAcGFyYW0gcmF3T3B0aW9ucyAtIFRoZSByYXcgb3B0aW9ucy5cbiAqIEBwYXJhbSBhbGxOb2RlSWRzIC0gQWxsIG5vZGUgaWRzIHRoYXQgd2lsbCBiZSB1c2VkIGlmIG5vZGVzIGFyZSBvbWl0dGVkIGluXG4gKiB0aGUgcmF3IG9wdGlvbnMuXG4gKiBAcmV0dXJucyBPcHRpb25zIHdpdGggZXZlcnl0aGluZyBmaWxsZWQgaW4gYW5kIHZhbGlkYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUZpdE9wdGlvbnMoXG4gIHJhd09wdGlvbnM6IFBhcnRpYWw8Vmlld0ZpdE9wdGlvbnM+LFxuICBhbGxOb2RlSWRzOiBJZFR5cGVbXVxuKTogVmlld0ZpdE9wdGlvbnMge1xuICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbjxWaWV3Rml0T3B0aW9ucywgUGFydGlhbDxWaWV3Rml0T3B0aW9ucz4+KFxuICAgIHtcbiAgICAgIG5vZGVzOiBhbGxOb2RlSWRzLFxuICAgICAgbWluWm9vbUxldmVsOiBOdW1iZXIuTUlOX1ZBTFVFLFxuICAgICAgbWF4Wm9vbUxldmVsOiAxLFxuICAgIH0sXG4gICAgcmF3T3B0aW9ucyA/PyB7fVxuICApO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zLm5vZGVzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJOb2RlcyBoYXMgdG8gYmUgYW4gYXJyYXkgb2YgaWRzLlwiKTtcbiAgfVxuICBpZiAob3B0aW9ucy5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICBvcHRpb25zLm5vZGVzID0gYWxsTm9kZUlkcztcbiAgfVxuXG4gIGlmICghKHR5cGVvZiBvcHRpb25zLm1pblpvb21MZXZlbCA9PT0gXCJudW1iZXJcIiAmJiBvcHRpb25zLm1pblpvb21MZXZlbCA+IDApKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1pbiB6b29tIGxldmVsIGhhcyB0byBiZSBhIG51bWJlciBoaWdoZXIgdGhhbiB6ZXJvLlwiKTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKFxuICAgICAgdHlwZW9mIG9wdGlvbnMubWF4Wm9vbUxldmVsID09PSBcIm51bWJlclwiICYmXG4gICAgICBvcHRpb25zLm1pblpvb21MZXZlbCA8PSBvcHRpb25zLm1heFpvb21MZXZlbFxuICAgIClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiTWF4IHpvb20gbGV2ZWwgaGFzIHRvIGJlIGEgbnVtYmVyIGhpZ2hlciB0aGFuIG1pbiB6b29tIGxldmVsLlwiXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuIiwgIi8qKlxyXG4gKiBDcmVhdGVkIGJ5IEFsZXggb24gMTEvNi8yMDE0LlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ga2V5Y2hhcm0ob3B0aW9ucykge1xyXG4gIHZhciBwcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wcmV2ZW50RGVmYXVsdCB8fCBmYWxzZTtcclxuXHJcbiAgdmFyIGNvbnRhaW5lciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250YWluZXIgfHwgd2luZG93O1xyXG5cclxuICB2YXIgX2V4cG9ydEZ1bmN0aW9ucyA9IHt9O1xyXG4gIHZhciBfYm91bmQgPSB7a2V5ZG93bjp7fSwga2V5dXA6e319O1xyXG4gIHZhciBfa2V5cyA9IHt9O1xyXG4gIHZhciBpO1xyXG5cclxuICAvLyBhIC0gelxyXG4gIGZvciAoaSA9IDk3OyBpIDw9IDEyMjsgaSsrKSB7X2tleXNbU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSB7Y29kZTo2NSArIChpIC0gOTcpLCBzaGlmdDogZmFsc2V9O31cclxuICAvLyBBIC0gWlxyXG4gIGZvciAoaSA9IDY1OyBpIDw9IDkwOyBpKyspIHtfa2V5c1tTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IHtjb2RlOmksIHNoaWZ0OiB0cnVlfTt9XHJcbiAgLy8gMCAtIDlcclxuICBmb3IgKGkgPSAwOyAgaSA8PSA5OyAgIGkrKykge19rZXlzWycnICsgaV0gPSB7Y29kZTo0OCArIGksIHNoaWZ0OiBmYWxzZX07fVxyXG4gIC8vIEYxIC0gRjEyXHJcbiAgZm9yIChpID0gMTsgIGkgPD0gMTI7ICAgaSsrKSB7X2tleXNbJ0YnICsgaV0gPSB7Y29kZToxMTEgKyBpLCBzaGlmdDogZmFsc2V9O31cclxuICAvLyBudW0wIC0gbnVtOVxyXG4gIGZvciAoaSA9IDA7ICBpIDw9IDk7ICAgaSsrKSB7X2tleXNbJ251bScgKyBpXSA9IHtjb2RlOjk2ICsgaSwgc2hpZnQ6IGZhbHNlfTt9XHJcblxyXG4gIC8vIG51bXBhZCBtaXNjXHJcbiAgX2tleXNbJ251bSonXSA9IHtjb2RlOjEwNiwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snbnVtKyddID0ge2NvZGU6MTA3LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydudW0tJ10gPSB7Y29kZToxMDksIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ251bS8nXSA9IHtjb2RlOjExMSwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snbnVtLiddID0ge2NvZGU6MTEwLCBzaGlmdDogZmFsc2V9O1xyXG4gIC8vIGFycm93c1xyXG4gIF9rZXlzWydsZWZ0J10gID0ge2NvZGU6MzcsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3VwJ10gICAgPSB7Y29kZTozOCwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1sncmlnaHQnXSA9IHtjb2RlOjM5LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydkb3duJ10gID0ge2NvZGU6NDAsIHNoaWZ0OiBmYWxzZX07XHJcbiAgLy8gZXh0cmEga2V5c1xyXG4gIF9rZXlzWydzcGFjZSddID0ge2NvZGU6MzIsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ2VudGVyJ10gPSB7Y29kZToxMywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snc2hpZnQnXSA9IHtjb2RlOjE2LCBzaGlmdDogdW5kZWZpbmVkfTtcclxuICBfa2V5c1snZXNjJ10gICA9IHtjb2RlOjI3LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydiYWNrc3BhY2UnXSA9IHtjb2RlOjgsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3RhYiddICAgICAgID0ge2NvZGU6OSwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snY3RybCddICAgICAgPSB7Y29kZToxNywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snYWx0J10gICAgICAgPSB7Y29kZToxOCwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snZGVsZXRlJ10gICAgPSB7Y29kZTo0Niwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1sncGFnZXVwJ10gICAgPSB7Y29kZTozMywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1sncGFnZWRvd24nXSAgPSB7Y29kZTozNCwgc2hpZnQ6IGZhbHNlfTtcclxuICAvLyBzeW1ib2xzXHJcbiAgX2tleXNbJz0nXSAgICAgPSB7Y29kZToxODcsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJy0nXSAgICAgPSB7Y29kZToxODksIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ10nXSAgICAgPSB7Y29kZToyMjEsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ1snXSAgICAgPSB7Y29kZToyMTksIHNoaWZ0OiBmYWxzZX07XHJcblxyXG5cclxuXHJcbiAgdmFyIGRvd24gPSBmdW5jdGlvbihldmVudCkge2hhbmRsZUV2ZW50KGV2ZW50LCdrZXlkb3duJyk7fTtcclxuICB2YXIgdXAgPSBmdW5jdGlvbihldmVudCkge2hhbmRsZUV2ZW50KGV2ZW50LCdrZXl1cCcpO307XHJcblxyXG4gIC8vIGhhbmRsZSB0aGUgYWN0dWFseSBib3VuZCBrZXkgd2l0aCB0aGUgZXZlbnRcclxuICB2YXIgaGFuZGxlRXZlbnQgPSBmdW5jdGlvbihldmVudCx0eXBlKSB7XHJcbiAgICBpZiAoX2JvdW5kW3R5cGVdW2V2ZW50LmtleUNvZGVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdmFyIGJvdW5kID0gX2JvdW5kW3R5cGVdW2V2ZW50LmtleUNvZGVdO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGJvdW5kW2ldLnNoaWZ0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGJvdW5kW2ldLmZuKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYm91bmRbaV0uc2hpZnQgPT0gdHJ1ZSAmJiBldmVudC5zaGlmdEtleSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICBib3VuZFtpXS5mbihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGJvdW5kW2ldLnNoaWZ0ID09IGZhbHNlICYmIGV2ZW50LnNoaWZ0S2V5ID09IGZhbHNlKSB7XHJcbiAgICAgICAgICBib3VuZFtpXS5mbihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocHJldmVudERlZmF1bHQgPT0gdHJ1ZSkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyBiaW5kIGEga2V5IHRvIGEgY2FsbGJhY2tcclxuICBfZXhwb3J0RnVuY3Rpb25zLmJpbmQgPSBmdW5jdGlvbihrZXksIGNhbGxiYWNrLCB0eXBlKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHR5cGUgPSAna2V5ZG93bic7XHJcbiAgICB9XHJcbiAgICBpZiAoX2tleXNba2V5XSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGtleTogXCIgKyBrZXkpO1xyXG4gICAgfVxyXG4gICAgaWYgKF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgX2JvdW5kW3R5cGVdW19rZXlzW2tleV0uY29kZV0gPSBbXTtcclxuICAgIH1cclxuICAgIF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdLnB1c2goe2ZuOmNhbGxiYWNrLCBzaGlmdDpfa2V5c1trZXldLnNoaWZ0fSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8vIGJpbmQgYWxsIGtleXMgdG8gYSBjYWxsIGJhY2sgKGRlbW8gcHVycG9zZXMpXHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy5iaW5kQWxsID0gZnVuY3Rpb24oY2FsbGJhY2ssIHR5cGUpIHtcclxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdHlwZSA9ICdrZXlkb3duJztcclxuICAgIH1cclxuICAgIGZvciAodmFyIGtleSBpbiBfa2V5cykge1xyXG4gICAgICBpZiAoX2tleXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIF9leHBvcnRGdW5jdGlvbnMuYmluZChrZXksY2FsbGJhY2ssdHlwZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyBnZXQgdGhlIGtleSBsYWJlbCBmcm9tIGFuIGV2ZW50XHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy5nZXRLZXkgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgZm9yICh2YXIga2V5IGluIF9rZXlzKSB7XHJcbiAgICAgIGlmIChfa2V5cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ID09IHRydWUgJiYgX2tleXNba2V5XS5zaGlmdCA9PSB0cnVlICYmIGV2ZW50LmtleUNvZGUgPT0gX2tleXNba2V5XS5jb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChldmVudC5zaGlmdEtleSA9PSBmYWxzZSAmJiBfa2V5c1trZXldLnNoaWZ0ID09IGZhbHNlICYmIGV2ZW50LmtleUNvZGUgPT0gX2tleXNba2V5XS5jb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChldmVudC5rZXlDb2RlID09IF9rZXlzW2tleV0uY29kZSAmJiBrZXkgPT0gJ3NoaWZ0Jykge1xyXG4gICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBcInVua25vd24ga2V5LCBjdXJyZW50bHkgbm90IHN1cHBvcnRlZFwiO1xyXG4gIH07XHJcblxyXG4gIC8vIHVuYmluZCBlaXRoZXIgYSBzcGVjaWZpYyBjYWxsYmFjayBmcm9tIGEga2V5IG9yIGFsbCBvZiB0aGVtIChieSBsZWF2aW5nIGNhbGxiYWNrIHVuZGVmaW5lZClcclxuICBfZXhwb3J0RnVuY3Rpb25zLnVuYmluZCA9IGZ1bmN0aW9uKGtleSwgY2FsbGJhY2ssIHR5cGUpIHtcclxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdHlwZSA9ICdrZXlkb3duJztcclxuICAgIH1cclxuICAgIGlmIChfa2V5c1trZXldID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQga2V5OiBcIiArIGtleSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB2YXIgbmV3QmluZGluZ3MgPSBbXTtcclxuICAgICAgdmFyIGJvdW5kID0gX2JvdW5kW3R5cGVdW19rZXlzW2tleV0uY29kZV07XHJcbiAgICAgIGlmIChib3VuZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKCEoYm91bmRbaV0uZm4gPT0gY2FsbGJhY2sgJiYgYm91bmRbaV0uc2hpZnQgPT0gX2tleXNba2V5XS5zaGlmdCkpIHtcclxuICAgICAgICAgICAgbmV3QmluZGluZ3MucHVzaChfYm91bmRbdHlwZV1bX2tleXNba2V5XS5jb2RlXVtpXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdID0gbmV3QmluZGluZ3M7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgX2JvdW5kW3R5cGVdW19rZXlzW2tleV0uY29kZV0gPSBbXTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyByZXNldCBhbGwgYm91bmQgdmFyaWFibGVzLlxyXG4gIF9leHBvcnRGdW5jdGlvbnMucmVzZXQgPSBmdW5jdGlvbigpIHtcclxuICAgIF9ib3VuZCA9IHtrZXlkb3duOnt9LCBrZXl1cDp7fX07XHJcbiAgfTtcclxuXHJcbiAgLy8gdW5iaW5kIGFsbCBsaXN0ZW5lcnMgYW5kIHJlc2V0IGFsbCB2YXJpYWJsZXMuXHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfYm91bmQgPSB7a2V5ZG93bjp7fSwga2V5dXA6e319O1xyXG4gICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBkb3duLCB0cnVlKTtcclxuICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHVwLCB0cnVlKTtcclxuICB9O1xyXG5cclxuICAvLyBjcmVhdGUgbGlzdGVuZXJzLlxyXG4gIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyxkb3duLHRydWUpO1xyXG4gIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsdXAsdHJ1ZSk7XHJcblxyXG4gIC8vIHJldHVybiB0aGUgcHVibGljIGZ1bmN0aW9ucy5cclxuICByZXR1cm4gX2V4cG9ydEZ1bmN0aW9ucztcclxufVxyXG4iLCAiaW1wb3J0IFwiLi9OYXZpZ2F0aW9uSGFuZGxlci5jc3NcIjtcblxuaW1wb3J0IHsgSGFtbWVyIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgb25SZWxlYXNlLCBvblRvdWNoIH0gZnJvbSBcIi4uLy4uLy4uL2hhbW1lclV0aWxcIjtcbmltcG9ydCBrZXljaGFybSBmcm9tIFwia2V5Y2hhcm1cIjtcblxuLyoqXG4gKiBOYXZpZ2F0aW9uIEhhbmRsZXJcbiAqL1xuY2xhc3MgTmF2aWdhdGlvbkhhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcblxuICAgIHRoaXMuaWNvbnNDcmVhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5uYXZpZ2F0aW9uSGFtbWVycyA9IFtdO1xuICAgIHRoaXMuYm91bmRGdW5jdGlvbnMgPSB7fTtcbiAgICB0aGlzLnRvdWNoVGltZSA9IDA7XG4gICAgdGhpcy5hY3RpdmF0ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiYWN0aXZhdGVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5hY3RpdmF0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jb25maWd1cmVLZXlib2FyZEJpbmRpbmdzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZWFjdGl2YXRlXCIsICgpID0+IHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbmZpZ3VyZUtleWJvYXJkQmluZGluZ3MoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMua2V5Y2hhcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmtleWNoYXJtLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgdGhpcy5jcmVhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBvciByZWZyZXNoZXMgbmF2aWdhdGlvbiBhbmQgc2V0cyBrZXkgYmluZGluZ3NcbiAgICovXG4gIGNyZWF0ZSgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm5hdmlnYXRpb25CdXR0b25zID09PSB0cnVlKSB7XG4gICAgICBpZiAodGhpcy5pY29uc0NyZWF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubG9hZE5hdmlnYXRpb25FbGVtZW50cygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pY29uc0NyZWF0ZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY2xlYW5OYXZpZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWd1cmVLZXlib2FyZEJpbmRpbmdzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW5zIHVwIHByZXZpb3VzIG5hdmlnYXRpb24gaXRlbXNcbiAgICovXG4gIGNsZWFuTmF2aWdhdGlvbigpIHtcbiAgICAvLyBjbGVhbiBoYW1tZXIgYmluZGluZ3NcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uSGFtbWVycy5sZW5ndGggIT0gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5hdmlnYXRpb25IYW1tZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkhhbW1lcnNbaV0uZGVzdHJveSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5uYXZpZ2F0aW9uSGFtbWVycyA9IFtdO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHByZXZpb3VzIG5hdmlnYXRpb24gaXRlbXNcbiAgICBpZiAoXG4gICAgICB0aGlzLm5hdmlnYXRpb25ET00gJiZcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0gJiZcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0ucGFyZW50Tm9kZVxuICAgICkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFxuICAgICAgICB0aGlzLm5hdmlnYXRpb25ET01bXCJ3cmFwcGVyXCJdXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaWNvbnNDcmVhdGVkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRpb24gb2YgdGhlIG5hdmlnYXRpb24gY29udHJvbHMgbm9kZXMuIFRoZXkgYXJlIGRyYXduIG92ZXIgdGhlIHJlc3Qgb2YgdGhlIG5vZGVzIGFuZCBhcmUgbm90IGFmZmVjdGVkIGJ5IHNjYWxlIGFuZCB0cmFuc2xhdGlvblxuICAgKiB0aGV5IGhhdmUgYSB0cmlnZ2VyRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uIGNsaWNrLiBJZiB0aGUgcG9zaXRpb24gb2YgdGhlIG5hdmlnYXRpb24gY29udHJvbHMgaXMgZGVwZW5kZW50XG4gICAqIG9uIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoIG9yIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCwgd2UgZmxhZyBob3Jpem9udGFsQWxpZ25MZWZ0IGFuZCB2ZXJ0aWNhbEFsaWduVG9wIGZhbHNlLlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGxvY2F0aW9uIHdpbGwgYmUgY29ycmVjdGVkIGJ5IHRoZSBfcmVsb2NhdGVOYXZpZ2F0aW9uIGZ1bmN0aW9uIG9uIGEgc2l6ZSBjaGFuZ2Ugb2YgdGhlIGNhbnZhcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGxvYWROYXZpZ2F0aW9uRWxlbWVudHMoKSB7XG4gICAgdGhpcy5jbGVhbk5hdmlnYXRpb24oKTtcblxuICAgIHRoaXMubmF2aWdhdGlvbkRPTSA9IHt9O1xuICAgIGNvbnN0IG5hdmlnYXRpb25EaXZzID0gW1xuICAgICAgXCJ1cFwiLFxuICAgICAgXCJkb3duXCIsXG4gICAgICBcImxlZnRcIixcbiAgICAgIFwicmlnaHRcIixcbiAgICAgIFwiem9vbUluXCIsXG4gICAgICBcInpvb21PdXRcIixcbiAgICAgIFwiem9vbUV4dGVuZHNcIixcbiAgICBdO1xuICAgIGNvbnN0IG5hdmlnYXRpb25EaXZBY3Rpb25zID0gW1xuICAgICAgXCJfbW92ZVVwXCIsXG4gICAgICBcIl9tb3ZlRG93blwiLFxuICAgICAgXCJfbW92ZUxlZnRcIixcbiAgICAgIFwiX21vdmVSaWdodFwiLFxuICAgICAgXCJfem9vbUluXCIsXG4gICAgICBcIl96b29tT3V0XCIsXG4gICAgICBcIl9maXRcIixcbiAgICBdO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXS5jbGFzc05hbWUgPSBcInZpcy1uYXZpZ2F0aW9uXCI7XG4gICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdmlnYXRpb25EaXZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25ET01bbmF2aWdhdGlvbkRpdnNbaV1dID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtuYXZpZ2F0aW9uRGl2c1tpXV0uY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtYnV0dG9uIHZpcy1cIiArIG5hdmlnYXRpb25EaXZzW2ldO1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXS5hcHBlbmRDaGlsZChcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW25hdmlnYXRpb25EaXZzW2ldXVxuICAgICAgKTtcblxuICAgICAgY29uc3QgaGFtbWVyID0gbmV3IEhhbW1lcih0aGlzLm5hdmlnYXRpb25ET01bbmF2aWdhdGlvbkRpdnNbaV1dKTtcbiAgICAgIGlmIChuYXZpZ2F0aW9uRGl2QWN0aW9uc1tpXSA9PT0gXCJfZml0XCIpIHtcbiAgICAgICAgb25Ub3VjaChoYW1tZXIsIHRoaXMuX2ZpdC5iaW5kKHRoaXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uVG91Y2goaGFtbWVyLCB0aGlzLmJpbmRUb1JlZHJhdy5iaW5kKHRoaXMsIG5hdmlnYXRpb25EaXZBY3Rpb25zW2ldKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmF2aWdhdGlvbkhhbW1lcnMucHVzaChoYW1tZXIpO1xuICAgIH1cblxuICAgIC8vIHVzZSBhIGhhbW1lciBmb3IgdGhlIHJlbGVhc2Ugc28gd2UgZG8gbm90IHJlcXVpcmUgdGhlIG9uZSB1c2VkIGluIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrXG4gICAgLy8gdGhlIG9uZSB0aGUgcmVzdCB1c2VzIGNhbiBiZSBvdmVybG9hZGVkIGJ5IHRoZSBtYW5pcHVsYXRpb24gc3lzdGVtLlxuICAgIGNvbnN0IGhhbW1lckZyYW1lID0gbmV3IEhhbW1lcih0aGlzLmNhbnZhcy5mcmFtZSk7XG4gICAgb25SZWxlYXNlKGhhbW1lckZyYW1lLCAoKSA9PiB7XG4gICAgICB0aGlzLl9zdG9wTW92ZW1lbnQoKTtcbiAgICB9KTtcbiAgICB0aGlzLm5hdmlnYXRpb25IYW1tZXJzLnB1c2goaGFtbWVyRnJhbWUpO1xuXG4gICAgdGhpcy5pY29uc0NyZWF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25cbiAgICovXG4gIGJpbmRUb1JlZHJhdyhhY3Rpb24pIHtcbiAgICBpZiAodGhpcy5ib3VuZEZ1bmN0aW9uc1thY3Rpb25dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYm91bmRGdW5jdGlvbnNbYWN0aW9uXSA9IHRoaXNbYWN0aW9uXS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJpbml0UmVkcmF3XCIsIHRoaXMuYm91bmRGdW5jdGlvbnNbYWN0aW9uXSk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0YXJ0UmVuZGVyaW5nXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uXG4gICAqL1xuICB1bmJpbmRGcm9tUmVkcmF3KGFjdGlvbikge1xuICAgIGlmICh0aGlzLmJvdW5kRnVuY3Rpb25zW2FjdGlvbl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKFwiaW5pdFJlZHJhd1wiLCB0aGlzLmJvdW5kRnVuY3Rpb25zW2FjdGlvbl0pO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9zdG9wUmVuZGVyaW5nXCIpO1xuICAgICAgZGVsZXRlIHRoaXMuYm91bmRGdW5jdGlvbnNbYWN0aW9uXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzdG9wcyBhbGwgbW92ZW1lbnQgaW5kdWNlZCBieSB0aGUgbmF2aWdhdGlvbiBidXR0b25zXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZml0KCkge1xuICAgIGlmIChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAtIHRoaXMudG91Y2hUaW1lID4gNzAwKSB7XG4gICAgICAvLyBUT0RPOiBmaXggdWdseSBoYWNrIHRvIGF2b2lkIGhhbW1lcidzIGRvdWJsZSBmaXJlaW5nIG9mIGV2ZW50IChiZWNhdXNlIHdlIHVzZSByZWxlYXNlPylcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJmaXRcIiwgeyBkdXJhdGlvbjogNzAwIH0pO1xuICAgICAgdGhpcy50b3VjaFRpbWUgPSBuZXcgRGF0ZSgpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzdG9wcyBhbGwgbW92ZW1lbnQgaW5kdWNlZCBieSB0aGUgbmF2aWdhdGlvbiBidXR0b25zXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RvcE1vdmVtZW50KCkge1xuICAgIGZvciAoY29uc3QgYm91bmRBY3Rpb24gaW4gdGhpcy5ib3VuZEZ1bmN0aW9ucykge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib3VuZEZ1bmN0aW9ucywgYm91bmRBY3Rpb24pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKFwiaW5pdFJlZHJhd1wiLCB0aGlzLmJvdW5kRnVuY3Rpb25zW2JvdW5kQWN0aW9uXSk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfc3RvcFJlbmRlcmluZ1wiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ib3VuZEZ1bmN0aW9ucyA9IHt9O1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21vdmVVcCgpIHtcbiAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55ICs9IHRoaXMub3B0aW9ucy5rZXlib2FyZC5zcGVlZC55O1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21vdmVEb3duKCkge1xuICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnkgLT0gdGhpcy5vcHRpb25zLmtleWJvYXJkLnNwZWVkLnk7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbW92ZUxlZnQoKSB7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueCArPSB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuc3BlZWQueDtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlUmlnaHQoKSB7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueCAtPSB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuc3BlZWQueDtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF96b29tSW4oKSB7XG4gICAgY29uc3Qgc2NhbGVPbGQgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICBjb25zdCBzY2FsZSA9IHRoaXMuYm9keS52aWV3LnNjYWxlICogKDEgKyB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuc3BlZWQuem9vbSk7XG4gICAgY29uc3QgdHJhbnNsYXRpb24gPSB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbjtcbiAgICBjb25zdCBzY2FsZUZyYWMgPSBzY2FsZSAvIHNjYWxlT2xkO1xuICAgIGNvbnN0IHR4ID1cbiAgICAgICgxIC0gc2NhbGVGcmFjKSAqIHRoaXMuY2FudmFzLmNhbnZhc1ZpZXdDZW50ZXIueCArXG4gICAgICB0cmFuc2xhdGlvbi54ICogc2NhbGVGcmFjO1xuICAgIGNvbnN0IHR5ID1cbiAgICAgICgxIC0gc2NhbGVGcmFjKSAqIHRoaXMuY2FudmFzLmNhbnZhc1ZpZXdDZW50ZXIueSArXG4gICAgICB0cmFuc2xhdGlvbi55ICogc2NhbGVGcmFjO1xuXG4gICAgdGhpcy5ib2R5LnZpZXcuc2NhbGUgPSBzY2FsZTtcbiAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHsgeDogdHgsIHk6IHR5IH07XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInpvb21cIiwge1xuICAgICAgZGlyZWN0aW9uOiBcIitcIixcbiAgICAgIHNjYWxlOiB0aGlzLmJvZHkudmlldy5zY2FsZSxcbiAgICAgIHBvaW50ZXI6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF96b29tT3V0KCkge1xuICAgIGNvbnN0IHNjYWxlT2xkID0gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgY29uc3Qgc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZSAvICgxICsgdGhpcy5vcHRpb25zLmtleWJvYXJkLnNwZWVkLnpvb20pO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb247XG4gICAgY29uc3Qgc2NhbGVGcmFjID0gc2NhbGUgLyBzY2FsZU9sZDtcbiAgICBjb25zdCB0eCA9XG4gICAgICAoMSAtIHNjYWxlRnJhYykgKiB0aGlzLmNhbnZhcy5jYW52YXNWaWV3Q2VudGVyLnggK1xuICAgICAgdHJhbnNsYXRpb24ueCAqIHNjYWxlRnJhYztcbiAgICBjb25zdCB0eSA9XG4gICAgICAoMSAtIHNjYWxlRnJhYykgKiB0aGlzLmNhbnZhcy5jYW52YXNWaWV3Q2VudGVyLnkgK1xuICAgICAgdHJhbnNsYXRpb24ueSAqIHNjYWxlRnJhYztcblxuICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gc2NhbGU7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7IHg6IHR4LCB5OiB0eSB9O1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJ6b29tXCIsIHtcbiAgICAgIGRpcmVjdGlvbjogXCItXCIsXG4gICAgICBzY2FsZTogdGhpcy5ib2R5LnZpZXcuc2NhbGUsXG4gICAgICBwb2ludGVyOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGJpbmQgYWxsIGtleXMgdXNpbmcga2V5Y2hhcm0uXG4gICAqL1xuICBjb25maWd1cmVLZXlib2FyZEJpbmRpbmdzKCkge1xuICAgIGlmICh0aGlzLmtleWNoYXJtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMua2V5Y2hhcm0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMua2V5Ym9hcmQuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5rZXlib2FyZC5iaW5kVG9XaW5kb3cgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5rZXljaGFybSA9IGtleWNoYXJtKHsgY29udGFpbmVyOiB3aW5kb3csIHByZXZlbnREZWZhdWx0OiB0cnVlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5rZXljaGFybSA9IGtleWNoYXJtKHtcbiAgICAgICAgICBjb250YWluZXI6IHRoaXMuY2FudmFzLmZyYW1lLFxuICAgICAgICAgIHByZXZlbnREZWZhdWx0OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5rZXljaGFybS5yZXNldCgpO1xuXG4gICAgICBpZiAodGhpcy5hY3RpdmF0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwidXBcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl9tb3ZlVXBcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJkb3duXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfbW92ZURvd25cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJsZWZ0XCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfbW92ZUxlZnRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJyaWdodFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX21vdmVSaWdodFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIj1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJudW0rXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbUluXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibnVtLVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21PdXRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCItXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIltcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiXVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21JblwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcInBhZ2V1cFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21JblwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcInBhZ2Vkb3duXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwidXBcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfbW92ZVVwXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcImRvd25cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfbW92ZURvd25cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibGVmdFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl9tb3ZlTGVmdFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJyaWdodFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl9tb3ZlUmlnaHRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiPVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibnVtK1wiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibnVtLVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIi1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJbXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRGcm9tUmVkcmF3KFwiX3pvb21PdXRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiXVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwicGFnZXVwXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRGcm9tUmVkcmF3KFwiX3pvb21JblwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJwYWdlZG93blwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb25IYW5kbGVyO1xuIiwgImltcG9ydCB7XG4gIFBvcHVwLFxuICBnZXRBYnNvbHV0ZUxlZnQsXG4gIGdldEFic29sdXRlVG9wLFxuICBtZXJnZU9wdGlvbnMsXG4gIHBhcnNlQ29sb3IsXG4gIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsXG59IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCBOYXZpZ2F0aW9uSGFuZGxlciBmcm9tIFwiLi9jb21wb25lbnRzL05hdmlnYXRpb25IYW5kbGVyXCI7XG5cbi8qKlxuICogSGFuZGxlciBmb3IgaW50ZXJhY3Rpb25zXG4gKi9cbmNsYXNzIEludGVyYWN0aW9uSGFuZGxlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gICAqIEBwYXJhbSB7U2VsZWN0aW9uSGFuZGxlcn0gc2VsZWN0aW9uSGFuZGxlclxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzLCBzZWxlY3Rpb25IYW5kbGVyKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBzZWxlY3Rpb25IYW5kbGVyO1xuICAgIHRoaXMubmF2aWdhdGlvbkhhbmRsZXIgPSBuZXcgTmF2aWdhdGlvbkhhbmRsZXIoYm9keSwgY2FudmFzKTtcblxuICAgIC8vIGJpbmQgdGhlIGV2ZW50cyBmcm9tIGhhbW1lciB0byBmdW5jdGlvbnMgaW4gdGhpcyBvYmplY3RcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25UYXAgPSB0aGlzLm9uVGFwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uVG91Y2ggPSB0aGlzLm9uVG91Y2guYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Eb3VibGVUYXAgPSB0aGlzLm9uRG91YmxlVGFwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uSG9sZCA9IHRoaXMub25Ib2xkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uRHJhZ1N0YXJ0ID0gdGhpcy5vbkRyYWdTdGFydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWcgPSB0aGlzLm9uRHJhZy5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWdFbmQgPSB0aGlzLm9uRHJhZ0VuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbk1vdXNlV2hlZWwgPSB0aGlzLm9uTW91c2VXaGVlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblBpbmNoID0gdGhpcy5vblBpbmNoLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblJlbGVhc2UgPSB0aGlzLm9uUmVsZWFzZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkNvbnRleHQgPSB0aGlzLm9uQ29udGV4dC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy50b3VjaFRpbWUgPSAwO1xuICAgIHRoaXMuZHJhZyA9IHt9O1xuICAgIHRoaXMucGluY2ggPSB7fTtcbiAgICB0aGlzLnBvcHVwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucG9wdXBPYmogPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wb3B1cFRpbWVyID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyID0gdGhpcy5nZXRQb2ludGVyLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgZHJhZ05vZGVzOiB0cnVlLFxuICAgICAgZHJhZ1ZpZXc6IHRydWUsXG4gICAgICBob3ZlcjogZmFsc2UsXG4gICAgICBrZXlib2FyZDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgc3BlZWQ6IHsgeDogMTAsIHk6IDEwLCB6b29tOiAwLjAyIH0sXG4gICAgICAgIGJpbmRUb1dpbmRvdzogdHJ1ZSxcbiAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIG5hdmlnYXRpb25CdXR0b25zOiBmYWxzZSxcbiAgICAgIHRvb2x0aXBEZWxheTogMzAwLFxuICAgICAgem9vbVZpZXc6IHRydWUsXG4gICAgICB6b29tU3BlZWQ6IDEsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmJpbmRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGV2ZW50IGxpc3RlbmVyc1xuICAgKi9cbiAgYmluZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cFRpbWVyKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXI7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGV4dGVuZCBhbGwgYnV0IHRoZSB2YWx1ZXMgaW4gZmllbGRzXG4gICAgICBjb25zdCBmaWVsZHMgPSBbXG4gICAgICAgIFwiaGlkZUVkZ2VzT25EcmFnXCIsXG4gICAgICAgIFwiaGlkZUVkZ2VzT25ab29tXCIsXG4gICAgICAgIFwiaGlkZU5vZGVzT25EcmFnXCIsXG4gICAgICAgIFwia2V5Ym9hcmRcIixcbiAgICAgICAgXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBcInNlbGVjdGFibGVcIixcbiAgICAgICAgXCJzZWxlY3RDb25uZWN0ZWRFZGdlc1wiLFxuICAgICAgXTtcbiAgICAgIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQoZmllbGRzLCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBtZXJnZSB0aGUga2V5Ym9hcmQgb3B0aW9ucyBpbi5cbiAgICAgIG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG9wdGlvbnMsIFwia2V5Ym9hcmRcIik7XG5cbiAgICAgIGlmIChvcHRpb25zLnRvb2x0aXApIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMudG9vbHRpcCwgb3B0aW9ucy50b29sdGlwKTtcbiAgICAgICAgaWYgKG9wdGlvbnMudG9vbHRpcC5jb2xvcikge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy50b29sdGlwLmNvbG9yID0gcGFyc2VDb2xvcihvcHRpb25zLnRvb2x0aXAuY29sb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5uYXZpZ2F0aW9uSGFuZGxlci5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwb2ludGVyIGxvY2F0aW9uIGZyb20gYSB0b3VjaCBsb2NhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHRvdWNoXG4gICAqIEByZXR1cm5zIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRQb2ludGVyKHRvdWNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRvdWNoLnggLSBnZXRBYnNvbHV0ZUxlZnQodGhpcy5jYW52YXMuZnJhbWUuY2FudmFzKSxcbiAgICAgIHk6IHRvdWNoLnkgLSBnZXRBYnNvbHV0ZVRvcCh0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogT24gc3RhcnQgb2YgYSB0b3VjaCBnZXN0dXJlLCBzdG9yZSB0aGUgcG9pbnRlclxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uVG91Y2goZXZlbnQpIHtcbiAgICBpZiAobmV3IERhdGUoKS52YWx1ZU9mKCkgLSB0aGlzLnRvdWNoVGltZSA+IDUwKSB7XG4gICAgICB0aGlzLmRyYWcucG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgICAgdGhpcy5kcmFnLnBpbmNoZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMucGluY2guc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIC8vIHRvIGF2b2lkIGRvdWJsZSBmaXJlaW5nIG9mIHRoaXMgZXZlbnQgYmVjYXVzZSB3ZSBoYXZlIHR3byBoYW1tZXIgaW5zdGFuY2VzLiAob24gY2FudmFzIGFuZCBvbiBmcmFtZSlcbiAgICAgIHRoaXMudG91Y2hUaW1lID0gbmV3IERhdGUoKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSB0YXAvY2xpY2sgZXZlbnQ6IHNlbGVjdC91bnNlbGVjdCBhIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uVGFwKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIGNvbnN0IG11bHRpc2VsZWN0ID1cbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5vcHRpb25zLm11bHRpc2VsZWN0ICYmXG4gICAgICAoZXZlbnQuY2hhbmdlZFBvaW50ZXJzWzBdLmN0cmxLZXkgfHwgZXZlbnQuY2hhbmdlZFBvaW50ZXJzWzBdLm1ldGFLZXkpO1xuXG4gICAgdGhpcy5jaGVja1NlbGVjdGlvbkNoYW5nZXMocG9pbnRlciwgbXVsdGlzZWxlY3QpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmNvbW1pdEFuZEVtaXQocG9pbnRlciwgZXZlbnQpO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJjbGlja1wiLCBldmVudCwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIGRvdWJsZXRhcCBldmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Eb3VibGVUYXAoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcImRvdWJsZUNsaWNrXCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBoYW5kbGUgbG9uZyB0YXAgZXZlbnQ6IG11bHRpIHNlbGVjdCBub2Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Ib2xkKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIGNvbnN0IG11bHRpc2VsZWN0ID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLm9wdGlvbnMubXVsdGlzZWxlY3Q7XG5cbiAgICB0aGlzLmNoZWNrU2VsZWN0aW9uQ2hhbmdlcyhwb2ludGVyLCBtdWx0aXNlbGVjdCk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuY29tbWl0QW5kRW1pdChwb2ludGVyLCBldmVudCk7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcImNsaWNrXCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwiaG9sZFwiLCBldmVudCwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSByZWxlYXNlIG9mIHRoZSBzY3JlZW5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uUmVsZWFzZShldmVudCkge1xuICAgIGlmIChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAtIHRoaXMudG91Y2hUaW1lID4gMTApIHtcbiAgICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJyZWxlYXNlXCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgICAgIC8vIHRvIGF2b2lkIGRvdWJsZSBmaXJlaW5nIG9mIHRoaXMgZXZlbnQgYmVjYXVzZSB3ZSBoYXZlIHR3byBoYW1tZXIgaW5zdGFuY2VzLiAob24gY2FudmFzIGFuZCBvbiBmcmFtZSlcbiAgICAgIHRoaXMudG91Y2hUaW1lID0gbmV3IERhdGUoKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqL1xuICBvbkNvbnRleHQoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9KTtcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwib25jb250ZXh0XCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgYW5kIGRlc2VsZWN0IG5vZGVzIGRlcGVuZGluZyBjdXJyZW50IHNlbGVjdGlvbiBjaGFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGQ9ZmFsc2VdXG4gICAqL1xuICBjaGVja1NlbGVjdGlvbkNoYW5nZXMocG9pbnRlciwgYWRkID0gZmFsc2UpIHtcbiAgICBpZiAoYWRkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0QWRkaXRpb25hbE9uUG9pbnQocG9pbnRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5zZWxlY3RPblBvaW50KHBvaW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIG5vZGUgYW5kIGVkZ2UgaWQncyBmcm9tIHRoZSBmaXJzdCBzZXQgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgc2Vjb25kIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHt7bm9kZXM6IEFycmF5LjxOb2RlPiwgZWRnZXM6IEFycmF5Ljx2aXMuRWRnZT59fSBmaXJzdFNldFxuICAgKiBAcGFyYW0ge3tub2RlczogQXJyYXkuPE5vZGU+LCBlZGdlczogQXJyYXkuPHZpcy5FZGdlPn19IHNlY29uZFNldFxuICAgKiBAcmV0dXJucyB7e25vZGVzOiBBcnJheS48Tm9kZT4sIGVkZ2VzOiBBcnJheS48dmlzLkVkZ2U+fX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZXRlcm1pbmVEaWZmZXJlbmNlKGZpcnN0U2V0LCBzZWNvbmRTZXQpIHtcbiAgICBjb25zdCBhcnJheURpZmYgPSBmdW5jdGlvbiAoZmlyc3RBcnIsIHNlY29uZEFycikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlyc3RBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmaXJzdEFycltpXTtcbiAgICAgICAgaWYgKHNlY29uZEFyci5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5vZGVzOiBhcnJheURpZmYoZmlyc3RTZXQubm9kZXMsIHNlY29uZFNldC5ub2RlcyksXG4gICAgICBlZGdlczogYXJyYXlEaWZmKGZpcnN0U2V0LmVkZ2VzLCBzZWNvbmRTZXQuZWRnZXMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgb25EcmFnU3RhcnQuXG4gICAqIEl0IGlzIHNlcGFyYXRlZCBvdXQgYmVjYXVzZSB3ZSBjYW4gdGhlbiBvdmVybG9hZCBpdCBmb3IgdGhlIGRhdGFtYW5pcHVsYXRpb24gc3lzdGVtLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25EcmFnU3RhcnQoZXZlbnQpIHtcbiAgICAvLyBpZiBhbHJlYWR5IGRyYWdnaW5nLCBkbyBub3Qgc3RhcnRcbiAgICAvLyB0aGlzIGNhbiBoYXBwZW4gb24gdG91Y2ggc2NyZWVucyB3aXRoIG11bHRpcGxlIGZpbmdlcnNcbiAgICBpZiAodGhpcy5kcmFnLmRyYWdnaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9pbiBjYXNlIHRoZSB0b3VjaCBldmVudCB3YXMgdHJpZ2dlcmVkIG9uIGFuIGV4dGVybmFsIGRpdiwgZG8gdGhlIGluaXRpYWwgdG91Y2ggbm93LlxuICAgIGlmICh0aGlzLmRyYWcucG9pbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2goZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIG5vdGU6IGRyYWcucG9pbnRlciBpcyBzZXQgaW4gb25Ub3VjaCB0byBnZXQgdGhlIGluaXRpYWwgdG91Y2ggbG9jYXRpb25cbiAgICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldE5vZGVBdCh0aGlzLmRyYWcucG9pbnRlcik7XG5cbiAgICB0aGlzLmRyYWcuZHJhZ2dpbmcgPSB0cnVlO1xuICAgIHRoaXMuZHJhZy5zZWxlY3Rpb24gPSBbXTtcbiAgICB0aGlzLmRyYWcudHJhbnNsYXRpb24gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbik7IC8vIGNvcHkgdGhlIG9iamVjdFxuICAgIHRoaXMuZHJhZy5ub2RlSWQgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZXZlbnQuc3JjRXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3guc2hvdyA9IHRydWU7XG4gICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG5cbiAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQgPSB7XG4gICAgICAgIHg6IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCksXG4gICAgICAgIHk6IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueSksXG4gICAgICB9O1xuICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5lbmQgPSB7XG4gICAgICAgIHg6IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCksXG4gICAgICAgIHk6IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueSksXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobm9kZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMub3B0aW9ucy5kcmFnTm9kZXMgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZHJhZy5ub2RlSWQgPSBub2RlLmlkO1xuICAgICAgLy8gc2VsZWN0IHRoZSBjbGlja2VkIG5vZGUgaWYgbm90IHlldCBzZWxlY3RlZFxuICAgICAgaWYgKG5vZGUuaXNTZWxlY3RlZCgpID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2V0U2VsZWN0aW9uKHsgbm9kZXM6IFtub2RlLmlkXSB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gYWZ0ZXIgc2VsZWN0IHRvIGNvbnRhaW4gdGhlIG5vZGVcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgIFwiZHJhZ1N0YXJ0XCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0aGlzLmRyYWcucG9pbnRlclxuICAgICAgKTtcblxuICAgICAgLy8gY3JlYXRlIGFuIGFycmF5IHdpdGggdGhlIHNlbGVjdGVkIG5vZGVzIGFuZCB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbiBhbmQgc3RhdHVzXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkTm9kZXMoKSkge1xuICAgICAgICBjb25zdCBzID0ge1xuICAgICAgICAgIGlkOiBub2RlLmlkLFxuICAgICAgICAgIG5vZGU6IG5vZGUsXG5cbiAgICAgICAgICAvLyBzdG9yZSBvcmlnaW5hbCB4LCB5LCB4Rml4ZWQgYW5kIHlGaXhlZCwgbWFrZSB0aGUgbm9kZSB0ZW1wb3JhcmlseSBGaXhlZFxuICAgICAgICAgIHg6IG5vZGUueCxcbiAgICAgICAgICB5OiBub2RlLnksXG4gICAgICAgICAgeEZpeGVkOiBub2RlLm9wdGlvbnMuZml4ZWQueCxcbiAgICAgICAgICB5Rml4ZWQ6IG5vZGUub3B0aW9ucy5maXhlZC55LFxuICAgICAgICB9O1xuXG4gICAgICAgIG5vZGUub3B0aW9ucy5maXhlZC54ID0gdHJ1ZTtcbiAgICAgICAgbm9kZS5vcHRpb25zLmZpeGVkLnkgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuZHJhZy5zZWxlY3Rpb24ucHVzaChzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbGJhY2sgaWYgbm8gbm9kZSBpcyBzZWxlY3RlZCBhbmQgdGh1cyB0aGUgdmlldyBpcyBkcmFnZ2VkLlxuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgXCJkcmFnU3RhcnRcIixcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHRoaXMuZHJhZy5wb2ludGVyLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSBkcmFnIGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvbkRyYWcoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5kcmFnLnBpbmNoZWQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdGhlIGZvY3VzIG9uIG5vZGUgaWYgaXQgaXMgZm9jdXNzZWQgb24gYnkgdGhlIGZvY3VzT25Ob2RlXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInVubG9ja05vZGVcIik7XG5cbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG5cbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmRyYWcuc2VsZWN0aW9uO1xuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLmxlbmd0aCAmJiB0aGlzLm9wdGlvbnMuZHJhZ05vZGVzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwiZHJhZ2dpbmdcIiwgZXZlbnQsIHBvaW50ZXIpO1xuXG4gICAgICAvLyBjYWxjdWxhdGUgZGVsdGEncyBhbmQgbmV3IGxvY2F0aW9uXG4gICAgICBjb25zdCBkZWx0YVggPSBwb2ludGVyLnggLSB0aGlzLmRyYWcucG9pbnRlci54O1xuICAgICAgY29uc3QgZGVsdGFZID0gcG9pbnRlci55IC0gdGhpcy5kcmFnLnBvaW50ZXIueTtcblxuICAgICAgLy8gdXBkYXRlIHBvc2l0aW9uIG9mIGFsbCBzZWxlY3RlZCBub2Rlc1xuICAgICAgc2VsZWN0aW9uLmZvckVhY2goKHNlbGVjdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gc2VsZWN0aW9uLm5vZGU7XG4gICAgICAgIC8vIG9ubHkgbW92ZSB0aGUgbm9kZSBpZiBpdCB3YXMgbm90IGZpeGVkIGluaXRpYWxseVxuICAgICAgICBpZiAoc2VsZWN0aW9uLnhGaXhlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBub2RlLnggPSB0aGlzLmNhbnZhcy5fWGNvbnZlcnRET010b0NhbnZhcyhcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLl9YY29udmVydENhbnZhc1RvRE9NKHNlbGVjdGlvbi54KSArIGRlbHRhWFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb25seSBtb3ZlIHRoZSBub2RlIGlmIGl0IHdhcyBub3QgZml4ZWQgaW5pdGlhbGx5XG4gICAgICAgIGlmIChzZWxlY3Rpb24ueUZpeGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIG5vZGUueSA9IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKFxuICAgICAgICAgICAgdGhpcy5jYW52YXMuX1ljb252ZXJ0Q2FudmFzVG9ET00oc2VsZWN0aW9uLnkpICsgZGVsdGFZXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHN0YXJ0IHRoZSBzaW11bGF0aW9uIG9mIHRoZSBwaHlzaWNzXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwic3RhcnRTaW11bGF0aW9uXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjcmVhdGUgc2VsZWN0aW9uIGJveFxuICAgICAgaWYgKGV2ZW50LnNyY0V2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgICAgXCJkcmFnZ2luZ1wiLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHBvaW50ZXIsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBpZiB0aGUgZHJhZyB3YXMgbm90IHN0YXJ0ZWQgcHJvcGVybHkgYmVjYXVzZSB0aGUgY2xpY2sgc3RhcnRlZCBvdXRzaWRlIHRoZSBuZXR3b3JrIGRpdiwgc3RhcnQgaXQgbm93LlxuICAgICAgICBpZiAodGhpcy5kcmFnLnBvaW50ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMub25EcmFnU3RhcnQoZXZlbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uZW5kID0ge1xuICAgICAgICAgIHg6IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCksXG4gICAgICAgICAgeTogdGhpcy5jYW52YXMuX1ljb252ZXJ0RE9NdG9DYW52YXMocG9pbnRlci55KSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBtb3ZlIHRoZSBuZXR3b3JrXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRyYWdWaWV3ID09PSB0cnVlICYmICFldmVudC5zcmNFdmVudC5zaGlmdEtleSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICAgIFwiZHJhZ2dpbmdcIixcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBwb2ludGVyLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaWYgdGhlIGRyYWcgd2FzIG5vdCBzdGFydGVkIHByb3Blcmx5IGJlY2F1c2UgdGhlIGNsaWNrIHN0YXJ0ZWQgb3V0c2lkZSB0aGUgbmV0d29yayBkaXYsIHN0YXJ0IGl0IG5vdy5cbiAgICAgICAgaWYgKHRoaXMuZHJhZy5wb2ludGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9uRHJhZ1N0YXJ0KGV2ZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWZmWCA9IHBvaW50ZXIueCAtIHRoaXMuZHJhZy5wb2ludGVyLng7XG4gICAgICAgIGNvbnN0IGRpZmZZID0gcG9pbnRlci55IC0gdGhpcy5kcmFnLnBvaW50ZXIueTtcblxuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHtcbiAgICAgICAgICB4OiB0aGlzLmRyYWcudHJhbnNsYXRpb24ueCArIGRpZmZYLFxuICAgICAgICAgIHk6IHRoaXMuZHJhZy50cmFuc2xhdGlvbi55ICsgZGlmZlksXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIGRyYWcgc3RhcnQgZXZlbnRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uRHJhZ0VuZChldmVudCkge1xuICAgIHRoaXMuZHJhZy5kcmFnZ2luZyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuYm9keS5zZWxlY3Rpb25Cb3guc2hvdykge1xuICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5zaG93ID0gZmFsc2U7XG4gICAgICBjb25zdCBzZWxlY3Rpb25Cb3hQb3NpdGlvbiA9IHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb247XG4gICAgICBjb25zdCBzZWxlY3Rpb25Cb3hQb3NpdGlvbk1pbk1heCA9IHtcbiAgICAgICAgbWluWDogTWF0aC5taW4oXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uc3RhcnQueCxcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5lbmQueFxuICAgICAgICApLFxuICAgICAgICBtaW5ZOiBNYXRoLm1pbihcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5zdGFydC55LFxuICAgICAgICAgIHNlbGVjdGlvbkJveFBvc2l0aW9uLmVuZC55XG4gICAgICAgICksXG4gICAgICAgIG1heFg6IE1hdGgubWF4KFxuICAgICAgICAgIHNlbGVjdGlvbkJveFBvc2l0aW9uLnN0YXJ0LngsXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uZW5kLnhcbiAgICAgICAgKSxcbiAgICAgICAgbWF4WTogTWF0aC5tYXgoXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uc3RhcnQueSxcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5lbmQueVxuICAgICAgICApLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdG9CZVNlbGVjdGVkTm9kZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXMuZmlsdGVyKChub2RlSWQpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG5vZGUueCA+PSBzZWxlY3Rpb25Cb3hQb3NpdGlvbk1pbk1heC5taW5YICYmXG4gICAgICAgICAgbm9kZS54IDw9IHNlbGVjdGlvbkJveFBvc2l0aW9uTWluTWF4Lm1heFggJiZcbiAgICAgICAgICBub2RlLnkgPj0gc2VsZWN0aW9uQm94UG9zaXRpb25NaW5NYXgubWluWSAmJlxuICAgICAgICAgIG5vZGUueSA8PSBzZWxlY3Rpb25Cb3hQb3NpdGlvbk1pbk1heC5tYXhZXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgdG9CZVNlbGVjdGVkTm9kZXMuZm9yRWFjaCgobm9kZUlkKSA9PlxuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0T2JqZWN0KHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmNvbW1pdEFuZEVtaXQocG9pbnRlciwgZXZlbnQpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgXCJkcmFnRW5kXCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmRyYWcuc2VsZWN0aW9uO1xuICAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgIHNlbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgLy8gcmVzdG9yZSBvcmlnaW5hbCB4Rml4ZWQgYW5kIHlGaXhlZFxuICAgICAgICAgIHMubm9kZS5vcHRpb25zLmZpeGVkLnggPSBzLnhGaXhlZDtcbiAgICAgICAgICBzLm5vZGUub3B0aW9ucy5maXhlZC55ID0gcy55Rml4ZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICAgIFwiZHJhZ0VuZFwiLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICAgIFwiZHJhZ0VuZFwiLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHBpbmNoIGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25QaW5jaChldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcblxuICAgIHRoaXMuZHJhZy5waW5jaGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5waW5jaFtcInNjYWxlXCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGluY2guc2NhbGUgPSAxO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGVuYWJsZWQgbW92aW5nIHdoaWxlIHBpbmNoaW5nP1xuICAgIGNvbnN0IHNjYWxlID0gdGhpcy5waW5jaC5zY2FsZSAqIGV2ZW50LnNjYWxlO1xuICAgIHRoaXMuem9vbShzY2FsZSwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogWm9vbSB0aGUgbmV0d29yayBpbiBvciBvdXRcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlIGEgbnVtYmVyIGFyb3VuZCAxLCBhbmQgYmV0d2VlbiAwLjAxIGFuZCAxMFxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvaW50ZXIgICAgUG9zaXRpb24gb24gc2NyZWVuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB6b29tKHNjYWxlLCBwb2ludGVyKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy56b29tVmlldyA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3Qgc2NhbGVPbGQgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIGlmIChzY2FsZSA8IDAuMDAwMDEpIHtcbiAgICAgICAgc2NhbGUgPSAwLjAwMDAxO1xuICAgICAgfVxuICAgICAgaWYgKHNjYWxlID4gMTApIHtcbiAgICAgICAgc2NhbGUgPSAxMDtcbiAgICAgIH1cblxuICAgICAgbGV0IHByZVNjYWxlRHJhZ1BvaW50ZXIgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5kcmFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZy5kcmFnZ2luZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHByZVNjYWxlRHJhZ1BvaW50ZXIgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyh0aGlzLmRyYWcucG9pbnRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vICsgdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCAvIDJcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb247XG5cbiAgICAgIGNvbnN0IHNjYWxlRnJhYyA9IHNjYWxlIC8gc2NhbGVPbGQ7XG4gICAgICBjb25zdCB0eCA9ICgxIC0gc2NhbGVGcmFjKSAqIHBvaW50ZXIueCArIHRyYW5zbGF0aW9uLnggKiBzY2FsZUZyYWM7XG4gICAgICBjb25zdCB0eSA9ICgxIC0gc2NhbGVGcmFjKSAqIHBvaW50ZXIueSArIHRyYW5zbGF0aW9uLnkgKiBzY2FsZUZyYWM7XG5cbiAgICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gc2NhbGU7XG4gICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHsgeDogdHgsIHk6IHR5IH07XG5cbiAgICAgIGlmIChwcmVTY2FsZURyYWdQb2ludGVyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBwb3N0U2NhbGVEcmFnUG9pbnRlciA9XG4gICAgICAgICAgdGhpcy5jYW52YXMuY2FudmFzVG9ET00ocHJlU2NhbGVEcmFnUG9pbnRlcik7XG4gICAgICAgIHRoaXMuZHJhZy5wb2ludGVyLnggPSBwb3N0U2NhbGVEcmFnUG9pbnRlci54O1xuICAgICAgICB0aGlzLmRyYWcucG9pbnRlci55ID0gcG9zdFNjYWxlRHJhZ1BvaW50ZXIueTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuXG4gICAgICBpZiAoc2NhbGVPbGQgPCBzY2FsZSkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiem9vbVwiLCB7XG4gICAgICAgICAgZGlyZWN0aW9uOiBcIitcIixcbiAgICAgICAgICBzY2FsZTogdGhpcy5ib2R5LnZpZXcuc2NhbGUsXG4gICAgICAgICAgcG9pbnRlcjogcG9pbnRlcixcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiem9vbVwiLCB7XG4gICAgICAgICAgZGlyZWN0aW9uOiBcIi1cIixcbiAgICAgICAgICBzY2FsZTogdGhpcy5ib2R5LnZpZXcuc2NhbGUsXG4gICAgICAgICAgcG9pbnRlcjogcG9pbnRlcixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGhhbmRsZXIgZm9yIG1vdXNlIHdoZWVsIGV2ZW50LCB1c2VkIHRvIHpvb20gdGhlIHRpbWVsaW5lXG4gICAqIFNlZSBodHRwOi8vYWRvbWFzLm9yZy9qYXZhc2NyaXB0LW1vdXNlLXdoZWVsL1xuICAgKiAgICAgaHR0cHM6Ly9naXRodWIuY29tL0VpZ2h0TWVkaWEvaGFtbWVyLmpzL2lzc3Vlcy8yNTZcbiAgICpcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSAgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uTW91c2VXaGVlbChldmVudCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuem9vbVZpZXcgPT09IHRydWUpIHtcbiAgICAgIC8vIElmIGRlbHRhIGlzIG5vbnplcm8sIGhhbmRsZSBpdC5cbiAgICAgIC8vIEJhc2ljYWxseSwgZGVsdGEgaXMgbm93IHBvc2l0aXZlIGlmIHdoZWVsIHdhcyBzY3JvbGxlZCB1cCxcbiAgICAgIC8vIGFuZCBuZWdhdGl2ZSwgaWYgd2hlZWwgd2FzIHNjcm9sbGVkIGRvd24uXG4gICAgICBpZiAoZXZlbnQuZGVsdGFZICE9PSAwKSB7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgbmV3IHNjYWxlXG4gICAgICAgIGxldCBzY2FsZSA9IHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgICAgICBzY2FsZSAqPVxuICAgICAgICAgIDEgKyAoZXZlbnQuZGVsdGFZIDwgMCA/IDEgOiAtMSkgKiAodGhpcy5vcHRpb25zLnpvb21TcGVlZCAqIDAuMSk7XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBwb2ludGVyIGxvY2F0aW9uXG4gICAgICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoeyB4OiBldmVudC5jbGllbnRYLCB5OiBldmVudC5jbGllbnRZIH0pO1xuXG4gICAgICAgIC8vIGFwcGx5IHRoZSBuZXcgc2NhbGVcbiAgICAgICAgdGhpcy56b29tKHNjYWxlLCBwb2ludGVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGFjdGlvbnMgY2F1c2VkIGJ5IG1vdXNlIHdoZWVsLlxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW91c2UgbW92ZSBoYW5kbGVyIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSB0aXRsZSBtb3ZlcyBvdmVyIGEgbm9kZSB3aXRoIGEgdGl0bGUuXG4gICAqXG4gICAqIEBwYXJhbSAge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Nb3VzZU1vdmUoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9KTtcbiAgICBsZXQgcG9wdXBWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBub2RlIGlzIHN0aWxsIHNlbGVjdGVkXG4gICAgaWYgKHRoaXMucG9wdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMucG9wdXAuaGlkZGVuID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9jaGVja0hpZGVQb3B1cChwb2ludGVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIHBvcHVwIHdhcyBub3QgaGlkZGVuIGFib3ZlXG4gICAgICBpZiAodGhpcy5wb3B1cC5oaWRkZW4gPT09IGZhbHNlKSB7XG4gICAgICAgIHBvcHVwVmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHRoaXMucG9wdXAuc2V0UG9zaXRpb24ocG9pbnRlci54ICsgMywgcG9pbnRlci55IC0gNSk7XG4gICAgICAgIHRoaXMucG9wdXAuc2hvdygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHdlIGJpbmQgdGhlIGtleWJvYXJkIHRvIHRoZSBkaXYsIHdlIGhhdmUgdG8gaGlnaGxpZ2h0IGl0IHRvIHVzZSBpdC4gVGhpcyBoaWdobGlnaHRzIGl0IG9uIG1vdXNlIG92ZXIuXG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLmtleWJvYXJkLmF1dG9Gb2N1cyAmJlxuICAgICAgdGhpcy5vcHRpb25zLmtleWJvYXJkLmJpbmRUb1dpbmRvdyA9PT0gZmFsc2UgJiZcbiAgICAgIHRoaXMub3B0aW9ucy5rZXlib2FyZC5lbmFibGVkID09PSB0cnVlXG4gICAgKSB7XG4gICAgICB0aGlzLmNhbnZhcy5mcmFtZS5mb2N1cygpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IGEgdGltZW91dCB0aGF0IHdpbGwgY2hlY2sgaWYgdGhlIG1vdXNlIGlzIHBvc2l0aW9uZWQgYWJvdmUgYW4gZWxlbWVudFxuICAgIGlmIChwb3B1cFZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICBpZiAodGhpcy5wb3B1cFRpbWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBvcHVwVGltZXIpOyAvLyBzdG9wIGFueSBydW5uaW5nIGNhbGN1bGF0aW9uVGltZXJcbiAgICAgICAgdGhpcy5wb3B1cFRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmRyYWcuZHJhZ2dpbmcpIHtcbiAgICAgICAgdGhpcy5wb3B1cFRpbWVyID0gc2V0VGltZW91dChcbiAgICAgICAgICAoKSA9PiB0aGlzLl9jaGVja1Nob3dQb3B1cChwb2ludGVyKSxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMudG9vbHRpcERlbGF5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRkaW5nIGhvdmVyIGhpZ2hsaWdodHNcbiAgICBpZiAodGhpcy5vcHRpb25zLmhvdmVyID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuaG92ZXJPYmplY3QoZXZlbnQsIHBvaW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBlbGVtZW50IG9uIHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGUgbmV0d29ya1xuICAgKiAoYSBub2RlIG9yIGVkZ2UpLiBJZiBzbywgYW5kIGlmIHRoaXMgZWxlbWVudCBoYXMgYSB0aXRsZSxcbiAgICogc2hvdyBhIHBvcHVwIHdpbmRvdyB3aXRoIGl0cyB0aXRsZS5cbiAgICpcbiAgICogQHBhcmFtIHt7eDpudW1iZXIsIHk6bnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrU2hvd1BvcHVwKHBvaW50ZXIpIHtcbiAgICBjb25zdCB4ID0gdGhpcy5jYW52YXMuX1hjb252ZXJ0RE9NdG9DYW52YXMocG9pbnRlci54KTtcbiAgICBjb25zdCB5ID0gdGhpcy5jYW52YXMuX1ljb252ZXJ0RE9NdG9DYW52YXMocG9pbnRlci55KTtcbiAgICBjb25zdCBwb2ludGVyT2JqID0ge1xuICAgICAgbGVmdDogeCxcbiAgICAgIHRvcDogeSxcbiAgICAgIHJpZ2h0OiB4LFxuICAgICAgYm90dG9tOiB5LFxuICAgIH07XG5cbiAgICBjb25zdCBwcmV2aW91c1BvcHVwT2JqSWQgPVxuICAgICAgdGhpcy5wb3B1cE9iaiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy5wb3B1cE9iai5pZDtcbiAgICBsZXQgbm9kZVVuZGVyQ3Vyc29yID0gZmFsc2U7XG4gICAgbGV0IHBvcHVwVHlwZSA9IFwibm9kZVwiO1xuXG4gICAgLy8gY2hlY2sgaWYgYSBub2RlIGlzIHVuZGVyIHRoZSBjdXJzb3IuXG4gICAgaWYgKHRoaXMucG9wdXBPYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2VhcmNoIHRoZSBub2RlcyBmb3Igb3ZlcmxhcCwgc2VsZWN0IHRoZSB0b3Agb25lIGluIGNhc2Ugb2YgbXVsdGlwbGUgbm9kZXNcbiAgICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZXMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgICAgaWYgKG5vZGUuaXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaikgPT09IHRydWUpIHtcbiAgICAgICAgICBub2RlVW5kZXJDdXJzb3IgPSB0cnVlO1xuICAgICAgICAgIGlmIChub2RlLmdldFRpdGxlKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3ZlcmxhcHBpbmdOb2Rlcy5wdXNoKG5vZGVJbmRpY2VzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG92ZXJsYXBwaW5nTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBpZiB0aGVyZSBhcmUgb3ZlcmxhcHBpbmcgbm9kZXMsIHNlbGVjdCB0aGUgbGFzdCBvbmUsIHRoaXMgaXMgdGhlIG9uZSB3aGljaCBpcyBkcmF3biBvbiB0b3Agb2YgdGhlIG90aGVyc1xuICAgICAgICB0aGlzLnBvcHVwT2JqID0gbm9kZXNbb3ZlcmxhcHBpbmdOb2Rlc1tvdmVybGFwcGluZ05vZGVzLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgLy8gaWYgeW91IGhvdmVyIG92ZXIgYSBub2RlLCB0aGUgdGl0bGUgb2YgdGhlIGVkZ2UgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHNob3duLlxuICAgICAgICBub2RlVW5kZXJDdXJzb3IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBvcHVwT2JqID09PSB1bmRlZmluZWQgJiYgbm9kZVVuZGVyQ3Vyc29yID09PSBmYWxzZSkge1xuICAgICAgLy8gc2VhcmNoIHRoZSBlZGdlcyBmb3Igb3ZlcmxhcFxuICAgICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLmJvZHkuZWRnZUluZGljZXM7XG4gICAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICAgIGxldCBlZGdlO1xuICAgICAgY29uc3Qgb3ZlcmxhcHBpbmdFZGdlcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBlZGdlID0gZWRnZXNbZWRnZUluZGljZXNbaV1dO1xuICAgICAgICBpZiAoZWRnZS5pc092ZXJsYXBwaW5nV2l0aChwb2ludGVyT2JqKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCA9PT0gdHJ1ZSAmJiBlZGdlLmdldFRpdGxlKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3ZlcmxhcHBpbmdFZGdlcy5wdXNoKGVkZ2VJbmRpY2VzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG92ZXJsYXBwaW5nRWRnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnBvcHVwT2JqID0gZWRnZXNbb3ZlcmxhcHBpbmdFZGdlc1tvdmVybGFwcGluZ0VkZ2VzLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgcG9wdXBUeXBlID0gXCJlZGdlXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9wdXBPYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2hvdyBwb3B1cCBtZXNzYWdlIHdpbmRvd1xuICAgICAgaWYgKHRoaXMucG9wdXBPYmouaWQgIT09IHByZXZpb3VzUG9wdXBPYmpJZCkge1xuICAgICAgICBpZiAodGhpcy5wb3B1cCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5wb3B1cCA9IG5ldyBQb3B1cCh0aGlzLmNhbnZhcy5mcmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvcHVwLnBvcHVwVGFyZ2V0VHlwZSA9IHBvcHVwVHlwZTtcbiAgICAgICAgdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkID0gdGhpcy5wb3B1cE9iai5pZDtcblxuICAgICAgICAvLyBhZGp1c3QgYSBzbWFsbCBvZmZzZXQgc3VjaCB0aGF0IHRoZSBtb3VzZSBjdXJzb3IgaXMgbG9jYXRlZCBpbiB0aGVcbiAgICAgICAgLy8gYm90dG9tIGxlZnQgbG9jYXRpb24gb2YgdGhlIHBvcHVwLCBhbmQgeW91IGNhbiBlYXNpbHkgbW92ZSBvdmVyIHRoZVxuICAgICAgICAvLyBwb3B1cCBhcmVhXG4gICAgICAgIHRoaXMucG9wdXAuc2V0UG9zaXRpb24ocG9pbnRlci54ICsgMywgcG9pbnRlci55IC0gNSk7XG4gICAgICAgIHRoaXMucG9wdXAuc2V0VGV4dCh0aGlzLnBvcHVwT2JqLmdldFRpdGxlKCkpO1xuICAgICAgICB0aGlzLnBvcHVwLnNob3coKTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInNob3dQb3B1cFwiLCB0aGlzLnBvcHVwT2JqLmlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucG9wdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnBvcHVwLmhpZGUoKTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImhpZGVQb3B1cFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHBvcHVwIG11c3QgYmUgaGlkZGVuLCB3aGljaCBpcyB0aGUgY2FzZSB3aGVuIHRoZSBtb3VzZSBpcyBub1xuICAgKiBsb25nZXIgaG92ZXJpbmcgb24gdGhlIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge3t4Om51bWJlciwgeTpudW1iZXJ9fSBwb2ludGVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2hlY2tIaWRlUG9wdXAocG9pbnRlcikge1xuICAgIGNvbnN0IHBvaW50ZXJPYmogPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpO1xuXG4gICAgbGV0IHN0aWxsT25PYmogPSBmYWxzZTtcbiAgICBpZiAodGhpcy5wb3B1cC5wb3B1cFRhcmdldFR5cGUgPT09IFwibm9kZVwiKSB7XG4gICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW3RoaXMucG9wdXAucG9wdXBUYXJnZXRJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdGlsbE9uT2JqID1cbiAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkXS5pc092ZXJsYXBwaW5nV2l0aChcbiAgICAgICAgICAgIHBvaW50ZXJPYmpcbiAgICAgICAgICApO1xuXG4gICAgICAgIC8vIGlmIHRoZSBtb3VzZSBpcyBzdGlsbCBvbmUgdGhlIG5vZGUsIHdlIGhhdmUgdG8gY2hlY2sgaWYgaXQgaXMgbm90IGFsc28gb24gb25lIHRoYXQgaXMgZHJhd24gb24gdG9wIG9mIGl0LlxuICAgICAgICAvLyB3ZSBpbml0aWFsbHkgb25seSBjaGVjayBzdGlsbE9uT2JqIGJlY2F1c2UgdGhpcyBpcyBtdWNoIGZhc3Rlci5cbiAgICAgICAgaWYgKHN0aWxsT25PYmogPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBvdmVyTm9kZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXROb2RlQXQocG9pbnRlcik7XG4gICAgICAgICAgc3RpbGxPbk9iaiA9XG4gICAgICAgICAgICBvdmVyTm9kZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgOiBvdmVyTm9kZS5pZCA9PT0gdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0Tm9kZUF0KHBvaW50ZXIpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuYm9keS5lZGdlc1t0aGlzLnBvcHVwLnBvcHVwVGFyZ2V0SWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdGlsbE9uT2JqID1cbiAgICAgICAgICAgIHRoaXMuYm9keS5lZGdlc1t0aGlzLnBvcHVwLnBvcHVwVGFyZ2V0SWRdLmlzT3ZlcmxhcHBpbmdXaXRoKFxuICAgICAgICAgICAgICBwb2ludGVyT2JqXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0aWxsT25PYmogPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnBvcHVwT2JqID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5wb3B1cC5oaWRlKCk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiaGlkZVBvcHVwXCIpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmFjdGlvbkhhbmRsZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYFNldGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LW9iamVjdHNcbmNvbGxlY3Rpb24oJ1NldCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlNldDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIGdldFdlYWtEYXRhID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZ2V0V2Vha0RhdGE7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgQXJyYXlJdGVyYXRpb25Nb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xudmFyIGZpbmQgPSBBcnJheUl0ZXJhdGlvbk1vZHVsZS5maW5kO1xudmFyIGZpbmRJbmRleCA9IEFycmF5SXRlcmF0aW9uTW9kdWxlLmZpbmRJbmRleDtcbnZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xudmFyIGlkID0gMDtcblxuLy8gZmFsbGJhY2sgZm9yIHVuY2F1Z2h0IGZyb3plbiBrZXlzXG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuZnJvemVuIHx8IChzdGF0ZS5mcm96ZW4gPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG5cbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVudHJpZXMgPSBbXTtcbn07XG5cbnZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiAoc3RvcmUsIGtleSkge1xuICByZXR1cm4gZmluZChzdG9yZS5lbnRyaWVzLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuXG5VbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSByZXR1cm4gZW50cnlbMV07XG4gIH0sXG4gIGhhczogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSBlbnRyeVsxXSA9IHZhbHVlO1xuICAgIGVsc2UgdGhpcy5lbnRyaWVzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSxcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXgodGhpcy5lbnRyaWVzLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHNwbGljZSh0aGlzLmVudHJpZXMsIGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGlkOiBpZCsrLFxuICAgICAgICBmcm96ZW46IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgdW5jYXVnaHRGcm96ZW5TdG9yZShzdGF0ZSkuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgZWxzZSBkYXRhW3N0YXRlLmlkXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwge1xuICAgICAgLy8gYHsgV2Vha01hcCwgV2Vha1NldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrRGF0YShrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiBoYXNPd24oZGF0YSwgc3RhdGUuaWQpICYmIGRlbGV0ZSBkYXRhW3N0YXRlLmlkXTtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBXZWFrTWFwLCBXZWFrU2V0IH0ucHJvdG90eXBlLmhhcyhrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWttYXAucHJvdG90eXBlLmhhc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrRGF0YShrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiBoYXNPd24oZGF0YSwgc3RhdGUuaWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgV2Vha01hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5nZXRcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoa2V5KTtcbiAgICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpLmdldChrZXkpO1xuICAgICAgICAgIHJldHVybiBkYXRhID8gZGF0YVtzdGF0ZS5pZF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSA6IHtcbiAgICAgIC8vIGBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgRlJFRVpJTkcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnJlZXppbmcnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uV2VhayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmVuZm9yY2U7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyIGlzRXh0ZW5zaWJsZSA9ICRPYmplY3QuaXNFeHRlbnNpYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2Zyb3plbiAtLSBzYWZlXG52YXIgaXNGcm96ZW4gPSAkT2JqZWN0LmlzRnJvemVuO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc3NlYWxlZCAtLSBzYWZlXG52YXIgaXNTZWFsZWQgPSAkT2JqZWN0LmlzU2VhbGVkO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1mcmVlemUgLS0gc2FmZVxudmFyIGZyZWV6ZSA9ICRPYmplY3QuZnJlZXplO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZWFsIC0tIHNhZmVcbnZhciBzZWFsID0gJE9iamVjdC5zZWFsO1xuXG52YXIgRlJPWkVOID0ge307XG52YXIgU0VBTEVEID0ge307XG52YXIgSVNfSUUxMSA9ICFnbG9iYWwuQWN0aXZlWE9iamVjdCAmJiAnQWN0aXZlWE9iamVjdCcgaW4gZ2xvYmFsO1xudmFyIEludGVybmFsV2Vha01hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbi8vIGBXZWFrTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLWNvbnN0cnVjdG9yXG52YXIgJFdlYWtNYXAgPSBjb2xsZWN0aW9uKCdXZWFrTWFwJywgd3JhcHBlciwgY29sbGVjdGlvbldlYWspO1xudmFyIFdlYWtNYXBQcm90b3R5cGUgPSAkV2Vha01hcC5wcm90b3R5cGU7XG52YXIgbmF0aXZlU2V0ID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5zZXQpO1xuXG4vLyBDaGFrcmEgRWRnZSBidWc6IGFkZGluZyBmcm96ZW4gYXJyYXlzIHRvIFdlYWtNYXAgdW5mcmVlemUgdGhlbVxudmFyIGhhc01TRWRnZUZyZWV6aW5nQnVnID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRlJFRVpJTkcgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBmcm96ZW5BcnJheSA9IGZyZWV6ZShbXSk7XG4gICAgbmF0aXZlU2V0KG5ldyAkV2Vha01hcCgpLCBmcm96ZW5BcnJheSwgMSk7XG4gICAgcmV0dXJuICFpc0Zyb3plbihmcm96ZW5BcnJheSk7XG4gIH0pO1xufTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuLy8gV2UgY2FuJ3QgdXNlIGZlYXR1cmUgZGV0ZWN0aW9uIGJlY2F1c2UgaXQgY3Jhc2ggc29tZSBvbGQgSUUgYnVpbGRzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDg1XG5pZiAoTkFUSVZFX1dFQUtfTUFQKSBpZiAoSVNfSUUxMSkge1xuICBJbnRlcm5hbFdlYWtNYXAgPSBjb2xsZWN0aW9uV2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCAnV2Vha01hcCcsIHRydWUpO1xuICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB2YXIgbmF0aXZlRGVsZXRlID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZVsnZGVsZXRlJ10pO1xuICB2YXIgbmF0aXZlSGFzID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5oYXMpO1xuICB2YXIgbmF0aXZlR2V0ID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5nZXQpO1xuICBkZWZpbmVCdWlsdElucyhXZWFrTWFwUHJvdG90eXBlLCB7XG4gICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmIChpc09iamVjdChrZXkpICYmICFpc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFzdGF0ZS5mcm96ZW4pIHN0YXRlLmZyb3plbiA9IG5ldyBJbnRlcm5hbFdlYWtNYXAoKTtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZURlbGV0ZSh0aGlzLCBrZXkpIHx8IHN0YXRlLmZyb3plblsnZGVsZXRlJ10oa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZURlbGV0ZSh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICBpZiAoaXNPYmplY3Qoa2V5KSAmJiAhaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghc3RhdGUuZnJvemVuKSBzdGF0ZS5mcm96ZW4gPSBuZXcgSW50ZXJuYWxXZWFrTWFwKCk7XG4gICAgICAgIHJldHVybiBuYXRpdmVIYXModGhpcywga2V5KSB8fCBzdGF0ZS5mcm96ZW4uaGFzKGtleSk7XG4gICAgICB9IHJldHVybiBuYXRpdmVIYXModGhpcywga2V5KTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICByZXR1cm4gbmF0aXZlSGFzKHRoaXMsIGtleSkgPyBuYXRpdmVHZXQodGhpcywga2V5KSA6IHN0YXRlLmZyb3plbi5nZXQoa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZUdldCh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICBuYXRpdmVIYXModGhpcywga2V5KSA/IG5hdGl2ZVNldCh0aGlzLCBrZXksIHZhbHVlKSA6IHN0YXRlLmZyb3plbi5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgbmF0aXZlU2V0KHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9KTtcbi8vIENoYWtyYSBFZGdlIGZyb3plbiBrZXlzIGZpeFxufSBlbHNlIGlmIChoYXNNU0VkZ2VGcmVlemluZ0J1ZygpKSB7XG4gIGRlZmluZUJ1aWx0SW5zKFdlYWtNYXBQcm90b3R5cGUsIHtcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgYXJyYXlJbnRlZ3JpdHlMZXZlbDtcbiAgICAgIGlmIChpc0FycmF5KGtleSkpIHtcbiAgICAgICAgaWYgKGlzRnJvemVuKGtleSkpIGFycmF5SW50ZWdyaXR5TGV2ZWwgPSBGUk9aRU47XG4gICAgICAgIGVsc2UgaWYgKGlzU2VhbGVkKGtleSkpIGFycmF5SW50ZWdyaXR5TGV2ZWwgPSBTRUFMRUQ7XG4gICAgICB9XG4gICAgICBuYXRpdmVTZXQodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoYXJyYXlJbnRlZ3JpdHlMZXZlbCA9PT0gRlJPWkVOKSBmcmVlemUoa2V5KTtcbiAgICAgIGlmIChhcnJheUludGVncml0eUxldmVsID09PSBTRUFMRUQpIHNlYWwoa2V5KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLndlYWstbWFwJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5XZWFrTWFwO1xuIiwgImV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0YWJsZSB7XG4gIHNlbGVjdCgpOiB2b2lkO1xuICB1bnNlbGVjdCgpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yQ2hhbmdlczxUPiB7XG4gIGFkZGVkOiBUW107XG4gIGRlbGV0ZWQ6IFRbXTtcbiAgcHJldmlvdXM6IFRbXTtcbiAgY3VycmVudDogVFtdO1xufVxuXG4vKipcbiAqIEBwYXJhbSBwcmV2XG4gKiBAcGFyYW0gbmV4dFxuICovXG5mdW5jdGlvbiBkaWZmU2V0czxUPihwcmV2OiBSZWFkb25seVNldDxUPiwgbmV4dDogUmVhZG9ubHlTZXQ8VD4pOiBTZXQ8VD4ge1xuICBjb25zdCBkaWZmID0gbmV3IFNldDxUPigpO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbmV4dCkge1xuICAgIGlmICghcHJldi5oYXMoaXRlbSkpIHtcbiAgICAgIGRpZmYuYWRkKGl0ZW0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGlmZjtcbn1cblxuY2xhc3MgU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yPFQgZXh0ZW5kcyBTZWxlY3RhYmxlPiB7XG4gICNwcmV2aW91c1NlbGVjdGlvbjogUmVhZG9ubHlTZXQ8VD4gPSBuZXcgU2V0KCk7XG4gICNzZWxlY3Rpb246IFNldDxUPiA9IG5ldyBTZXQoKTtcblxuICBwdWJsaWMgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uLnNpemU7XG4gIH1cblxuICBwdWJsaWMgYWRkKC4uLml0ZW1zOiByZWFkb25seSBUW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIHRoaXMuI3NlbGVjdGlvbi5hZGQoaXRlbSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBkZWxldGUoLi4uaXRlbXM6IHJlYWRvbmx5IFRbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgdGhpcy4jc2VsZWN0aW9uLmRlbGV0ZShpdGVtKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuI3NlbGVjdGlvbi5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGlvbigpOiBUW10ge1xuICAgIHJldHVybiBbLi4udGhpcy4jc2VsZWN0aW9uXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDaGFuZ2VzKCk6IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8VD4ge1xuICAgIHJldHVybiB7XG4gICAgICBhZGRlZDogWy4uLmRpZmZTZXRzKHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uLCB0aGlzLiNzZWxlY3Rpb24pXSxcbiAgICAgIGRlbGV0ZWQ6IFsuLi5kaWZmU2V0cyh0aGlzLiNzZWxlY3Rpb24sIHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uKV0sXG4gICAgICBwcmV2aW91czogWy4uLm5ldyBTZXQ8VD4odGhpcy4jcHJldmlvdXNTZWxlY3Rpb24pXSxcbiAgICAgIGN1cnJlbnQ6IFsuLi5uZXcgU2V0PFQ+KHRoaXMuI3NlbGVjdGlvbildLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY29tbWl0KCk6IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8VD4ge1xuICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmdldENoYW5nZXMoKTtcblxuICAgIHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uID0gdGhpcy4jc2VsZWN0aW9uO1xuICAgIHRoaXMuI3NlbGVjdGlvbiA9IG5ldyBTZXQodGhpcy4jcHJldmlvdXNTZWxlY3Rpb24pO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNoYW5nZXMuYWRkZWQpIHtcbiAgICAgIGl0ZW0uc2VsZWN0KCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaGFuZ2VzLmRlbGV0ZWQpIHtcbiAgICAgIGl0ZW0udW5zZWxlY3QoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlcztcbiAgfVxufVxuXG4vLyBUT0RPOiBUaGVzZSBzaG91bGQgYmUgcmVhbCB0eXBlcyBpbXBvcnRlZCBmcm9tIG5vZGUudHMgYW5kIGVkZ2UudHMgdGhhdCBkb24ndFxuLy8gZXhpc3QgeWV0LlxuaW50ZXJmYWNlIE5vZGUgZXh0ZW5kcyBTZWxlY3RhYmxlIHtcbiAgJDogXCJub2RlXCI7XG59XG5pbnRlcmZhY2UgRWRnZSBleHRlbmRzIFNlbGVjdGFibGUge1xuICAkOiBcImVkZ2VcIjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25BY2N1bXVsYXRvckNvbW1pdFN1bW1hcnkge1xuICBub2RlczogU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yQ2hhbmdlczxOb2RlPjtcbiAgZWRnZXM6IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8RWRnZT47XG59XG5cbmV4cG9ydCB0eXBlIFNlbGVjdGlvbkFjY3VtdWxhdG9yQ29tbWl0SGFuZGxlcjxcbiAgQ29tbWl0QXJncyBleHRlbmRzIHJlYWRvbmx5IGFueVtdXG4+ID0gKHN1bW1hcnk6IFNlbGVjdGlvbkFjY3VtdWxhdG9yQ29tbWl0U3VtbWFyeSwgLi4ucmVzdDogQ29tbWl0QXJncykgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbkFjY3VtdWxhdG9yPENvbW1pdEFyZ3MgZXh0ZW5kcyByZWFkb25seSBhbnlbXT4ge1xuICAjbm9kZXMgPSBuZXcgU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yPE5vZGU+KCk7XG4gICNlZGdlcyA9IG5ldyBTaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3I8RWRnZT4oKTtcblxuICByZWFkb25seSAjY29tbWl0SGFuZGxlcjogU2VsZWN0aW9uQWNjdW11bGF0b3JDb21taXRIYW5kbGVyPENvbW1pdEFyZ3M+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBjb21taXRIYW5kbGVyOiBTZWxlY3Rpb25BY2N1bXVsYXRvckNvbW1pdEhhbmRsZXI8Q29tbWl0QXJncz4gPSAoKTogdm9pZCA9PiB7fVxuICApIHtcbiAgICB0aGlzLiNjb21taXRIYW5kbGVyID0gY29tbWl0SGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2l6ZU5vZGVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI25vZGVzLnNpemU7XG4gIH1cbiAgcHVibGljIGdldCBzaXplRWRnZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jZWRnZXMuc2l6ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROb2RlcygpOiBOb2RlW10ge1xuICAgIHJldHVybiB0aGlzLiNub2Rlcy5nZXRTZWxlY3Rpb24oKTtcbiAgfVxuICBwdWJsaWMgZ2V0RWRnZXMoKTogRWRnZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jZWRnZXMuZ2V0U2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgYWRkTm9kZXMoLi4ubm9kZXM6IHJlYWRvbmx5IE5vZGVbXSk6IHZvaWQge1xuICAgIHRoaXMuI25vZGVzLmFkZCguLi5ub2Rlcyk7XG4gIH1cbiAgcHVibGljIGFkZEVkZ2VzKC4uLmVkZ2VzOiByZWFkb25seSBFZGdlW10pOiB2b2lkIHtcbiAgICB0aGlzLiNlZGdlcy5hZGQoLi4uZWRnZXMpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZU5vZGVzKG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICB0aGlzLiNub2Rlcy5kZWxldGUobm9kZSk7XG4gIH1cbiAgcHVibGljIGRlbGV0ZUVkZ2VzKGVkZ2U6IEVkZ2UpOiB2b2lkIHtcbiAgICB0aGlzLiNlZGdlcy5kZWxldGUoZWRnZSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy4jbm9kZXMuY2xlYXIoKTtcbiAgICB0aGlzLiNlZGdlcy5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGNvbW1pdCguLi5yZXN0OiBDb21taXRBcmdzKTogU2VsZWN0aW9uQWNjdW11bGF0b3JDb21taXRTdW1tYXJ5IHtcbiAgICBjb25zdCBzdW1tYXJ5ID0ge1xuICAgICAgbm9kZXM6IHRoaXMuI25vZGVzLmNvbW1pdCgpLFxuICAgICAgZWRnZXM6IHRoaXMuI2VkZ2VzLmNvbW1pdCgpLFxuICAgIH07XG4gICAgdGhpcy4jY29tbWl0SGFuZGxlcihzdW1tYXJ5LCAuLi5yZXN0KTtcbiAgICByZXR1cm4gc3VtbWFyeTtcbiAgfVxufVxuIiwgImltcG9ydCBOb2RlIGZyb20gXCIuL2NvbXBvbmVudHMvTm9kZVwiO1xuaW1wb3J0IEVkZ2UgZnJvbSBcIi4vY29tcG9uZW50cy9FZGdlXCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25BY2N1bXVsYXRvciB9IGZyb20gXCIuL3NlbGVjdGlvblwiO1xuXG5pbXBvcnQgeyBzZWxlY3RpdmVEZWVwRXh0ZW5kIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIFRoZSBoYW5kbGVyIGZvciBzZWxlY3Rpb25zXG4gKi9cbmNsYXNzIFNlbGVjdGlvbkhhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcbiAgICAvLyBUT0RPOiBDb25zaWRlciBmaXJpbmcgYW4gZXZlbnQgb24gYW55IGNoYW5nZSB0byB0aGUgc2VsZWN0aW9uLCBub3RcbiAgICAvLyBvbmx5IHRob3NlIGNhdXNlZCBieSBjbGlja3MgYW5kIHRhcHMuIEl0IHdvdWxkIGJlIGVhc3kgdG8gaW1wbGVtZW50XG4gICAgLy8gbm93IGFuZCAoYXQgbGVhc3QgdG8gbWUpIGl0IHNlZW1zIGxpa2Ugc29tZXRoaW5nIHRoYXQgY291bGQgYmVcbiAgICAvLyBxdWl0ZSB1c2VmdWwuXG4gICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IgPSBuZXcgU2VsZWN0aW9uQWNjdW11bGF0b3IoKTtcbiAgICB0aGlzLmhvdmVyT2JqID0geyBub2Rlczoge30sIGVkZ2VzOiB7fSB9O1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIG11bHRpc2VsZWN0OiBmYWxzZSxcbiAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICBzZWxlY3RDb25uZWN0ZWRFZGdlczogdHJ1ZSxcbiAgICAgIGhvdmVyQ29ubmVjdGVkRWRnZXM6IHRydWUsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9kYXRhQ2hhbmdlZFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbigpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc11cbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IFtcbiAgICAgICAgXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBcImhvdmVyQ29ubmVjdGVkRWRnZXNcIixcbiAgICAgICAgXCJzZWxlY3RhYmxlXCIsXG4gICAgICAgIFwic2VsZWN0Q29ubmVjdGVkRWRnZXNcIixcbiAgICAgIF07XG4gICAgICBzZWxlY3RpdmVEZWVwRXh0ZW5kKGZpZWxkcywgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlcyB0aGUgc2VsZWN0aW9uIHBhcnQgb2YgdGhlIHRhcDtcbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2VsZWN0T25Qb2ludChwb2ludGVyKSB7XG4gICAgbGV0IHNlbGVjdGVkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlY3RhYmxlID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBvYmogPSB0aGlzLmdldE5vZGVBdChwb2ludGVyKSB8fCB0aGlzLmdldEVkZ2VBdChwb2ludGVyKTtcblxuICAgICAgLy8gdW5zZWxlY3QgYWZ0ZXIgZ2V0dGluZyB0aGUgb2JqZWN0cyBpbiBvcmRlciB0byByZXN0b3JlIHdpZHRoIGFuZCBoZWlnaHQuXG4gICAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XG5cbiAgICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0T2JqZWN0KG9iaik7XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvaW50ZXJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzZWxlY3RBZGRpdGlvbmFsT25Qb2ludChwb2ludGVyKSB7XG4gICAgbGV0IHNlbGVjdGlvbkNoYW5nZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVjdGFibGUgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IG9iaiA9IHRoaXMuZ2V0Tm9kZUF0KHBvaW50ZXIpIHx8IHRoaXMuZ2V0RWRnZUF0KHBvaW50ZXIpO1xuXG4gICAgICBpZiAob2JqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIGlmIChvYmouaXNTZWxlY3RlZCgpID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5kZXNlbGVjdE9iamVjdChvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KG9iaik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3Rpb25DaGFuZ2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgc3RhbmRhcmQgZmllbGRzIGZvciBhbiBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIE9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICogQHJldHVybnMge3t9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXRCYXNlRXZlbnQoZXZlbnQsIHBvaW50ZXIpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0ge307XG5cbiAgICBwcm9wZXJ0aWVzW1wicG9pbnRlclwiXSA9IHtcbiAgICAgIERPTTogeyB4OiBwb2ludGVyLngsIHk6IHBvaW50ZXIueSB9LFxuICAgICAgY2FudmFzOiB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKSxcbiAgICB9O1xuICAgIHByb3BlcnRpZXNbXCJldmVudFwiXSA9IGV2ZW50O1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYW4gZXZlbnQgd2hpY2ggdGhlIHVzZXIgY2FuIGNhdGNoLlxuICAgKlxuICAgKiBUaGlzIGFkZHMgc29tZSBleHRyYSBkYXRhIHRvIHRoZSBldmVudCB3aXRoIHJlc3BlY3QgdG8gY3Vyc29yIHBvc2l0aW9uIGFuZFxuICAgKiBzZWxlY3RlZCBub2RlcyBhbmQgZWRnZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgb2YgZXZlbnQgdG8gc2VuZFxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyICAgICAgICAgICAgT2JqZWN0IHdpdGggdGhlIHggYW5kIHkgc2NyZWVuIGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZVxuICAgKiBAcGFyYW0ge29iamVjdCB8IHVuZGVmaW5lZH0gb2xkU2VsZWN0aW9uICAgICAgICAgICAgIElmIHByZXNlbnQsIHNlbGVjdGlvbiBzdGF0ZSBiZWZvcmUgZXZlbnQgb2NjdXJlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBbZW1wdHlTZWxlY3Rpb249ZmFsc2VdICBJbmRpY2F0ZSBpZiBzZWxlY3Rpb24gZGF0YSBzaG91bGQgYmUgcGFzc2VkXG4gICAqL1xuICBnZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgZXZlbnRUeXBlLFxuICAgIGV2ZW50LFxuICAgIHBvaW50ZXIsXG4gICAgb2xkU2VsZWN0aW9uLFxuICAgIGVtcHR5U2VsZWN0aW9uID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuX2luaXRCYXNlRXZlbnQoZXZlbnQsIHBvaW50ZXIpO1xuXG4gICAgaWYgKGVtcHR5U2VsZWN0aW9uID09PSB0cnVlKSB7XG4gICAgICBwcm9wZXJ0aWVzLm5vZGVzID0gW107XG4gICAgICBwcm9wZXJ0aWVzLmVkZ2VzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRtcCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBwcm9wZXJ0aWVzLm5vZGVzID0gdG1wLm5vZGVzO1xuICAgICAgcHJvcGVydGllcy5lZGdlcyA9IHRtcC5lZGdlcztcbiAgICB9XG5cbiAgICBpZiAob2xkU2VsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb3BlcnRpZXNbXCJwcmV2aW91c1NlbGVjdGlvblwiXSA9IG9sZFNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRUeXBlID09IFwiY2xpY2tcIikge1xuICAgICAgLy8gRm9yIHRoZSB0aW1lIGJlaW5nLCByZXN0cmljdCB0aGlzIGZ1bmN0aW9uYWxpdHkgdG9cbiAgICAgIC8vIGp1c3QgdGhlIGNsaWNrIGV2ZW50LlxuICAgICAgcHJvcGVydGllcy5pdGVtcyA9IHRoaXMuZ2V0Q2xpY2tlZEl0ZW1zKHBvaW50ZXIpO1xuICAgIH1cblxuICAgIGlmIChldmVudC5jb250cm9sRWRnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9wZXJ0aWVzLmNvbnRyb2xFZGdlID0gZXZlbnQuY29udHJvbEVkZ2U7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChldmVudFR5cGUsIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlnaGxpZ2h0RWRnZXM9dGhpcy5vcHRpb25zLnNlbGVjdENvbm5lY3RlZEVkZ2VzXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNlbGVjdE9iamVjdChvYmosIGhpZ2hsaWdodEVkZ2VzID0gdGhpcy5vcHRpb25zLnNlbGVjdENvbm5lY3RlZEVkZ2VzKSB7XG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICBpZiAoaGlnaGxpZ2h0RWRnZXMgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5hZGRFZGdlcyguLi5vYmouZWRnZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmFkZE5vZGVzKG9iaik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5hZGRFZGdlcyhvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqL1xuICBkZXNlbGVjdE9iamVjdChvYmopIHtcbiAgICBpZiAob2JqLmlzU2VsZWN0ZWQoKSA9PT0gdHJ1ZSkge1xuICAgICAgb2JqLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9yZW1vdmVGcm9tU2VsZWN0aW9uKG9iaik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHJpZXZlIGFsbCBub2RlcyBvdmVybGFwcGluZyB3aXRoIGdpdmVuIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0ICBBbiBvYmplY3Qgd2l0aCBwYXJhbWV0ZXJzIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbVxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119ICAgQW4gYXJyYXkgd2l0aCBpZCdzIG9mIHRoZSBvdmVybGFwcGluZyBub2Rlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCkge1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZXMgPSBbXTtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldO1xuICAgICAgaWYgKG5vZGVzW25vZGVJZF0uaXNPdmVybGFwcGluZ1dpdGgob2JqZWN0KSkge1xuICAgICAgICBvdmVybGFwcGluZ05vZGVzLnB1c2gobm9kZUlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG92ZXJsYXBwaW5nTm9kZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcG9zaXRpb24gb2JqZWN0IGluIGNhbnZhc3NwYWNlIGZyb20gYSBzaW5nbGUgcG9pbnQgaW4gc2NyZWVuc3BhY2VcbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEByZXR1cm5zIHt7bGVmdDogbnVtYmVyLCB0b3A6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYm90dG9tOiBudW1iZXJ9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpIHtcbiAgICBjb25zdCBjYW52YXNQb3MgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKTtcbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogY2FudmFzUG9zLnggLSAxLFxuICAgICAgdG9wOiBjYW52YXNQb3MueSArIDEsXG4gICAgICByaWdodDogY2FudmFzUG9zLnggKyAxLFxuICAgICAgYm90dG9tOiBjYW52YXNQb3MueSAtIDEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRvcCBub2RlIGF0IHRoZSBwYXNzZWQgcG9pbnQgKGxpa2UgYSBjbGljaylcbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldHVybk5vZGU9dHJ1ZV1cbiAgICogQHJldHVybnMge05vZGUgfCB1bmRlZmluZWR9IG5vZGVcbiAgICovXG4gIGdldE5vZGVBdChwb2ludGVyLCByZXR1cm5Ob2RlID0gdHJ1ZSkge1xuICAgIC8vIHdlIGZpcnN0IGNoZWNrIGlmIHRoaXMgaXMgYW4gbmF2aWdhdGlvbiBjb250cm9scyBlbGVtZW50XG4gICAgY29uc3QgcG9zaXRpb25PYmplY3QgPSB0aGlzLl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKTtcbiAgICBjb25zdCBvdmVybGFwcGluZ05vZGVzID0gdGhpcy5fZ2V0QWxsTm9kZXNPdmVybGFwcGluZ1dpdGgocG9zaXRpb25PYmplY3QpO1xuICAgIC8vIGlmIHRoZXJlIGFyZSBvdmVybGFwcGluZyBub2Rlcywgc2VsZWN0IHRoZSBsYXN0IG9uZSwgdGhpcyBpcyB0aGVcbiAgICAvLyBvbmUgd2hpY2ggaXMgZHJhd24gb24gdG9wIG9mIHRoZSBvdGhlcnNcbiAgICBpZiAob3ZlcmxhcHBpbmdOb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAocmV0dXJuTm9kZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2R5Lm5vZGVzW292ZXJsYXBwaW5nTm9kZXNbb3ZlcmxhcHBpbmdOb2Rlcy5sZW5ndGggLSAxXV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb3ZlcmxhcHBpbmdOb2Rlc1tvdmVybGFwcGluZ05vZGVzLmxlbmd0aCAtIDFdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXRyaWV2ZSBhbGwgZWRnZXMgb3ZlcmxhcHBpbmcgd2l0aCBnaXZlbiBvYmplY3QsIHNlbGVjdG9yIGlzIGFyb3VuZCBjZW50ZXJcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAgQW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b21cbiAgICogQHBhcmFtIHtudW1iZXJbXX0gb3ZlcmxhcHBpbmdFZGdlcyBBbiBhcnJheSB3aXRoIGlkJ3Mgb2YgdGhlIG92ZXJsYXBwaW5nIG5vZGVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0RWRnZXNPdmVybGFwcGluZ1dpdGgob2JqZWN0LCBvdmVybGFwcGluZ0VkZ2VzKSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkuZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2VJZCA9IHRoaXMuYm9keS5lZGdlSW5kaWNlc1tpXTtcbiAgICAgIGlmIChlZGdlc1tlZGdlSWRdLmlzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCkpIHtcbiAgICAgICAgb3ZlcmxhcHBpbmdFZGdlcy5wdXNoKGVkZ2VJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHJpZXZlIGFsbCBub2RlcyBvdmVybGFwcGluZyB3aXRoIGdpdmVuIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0ICBBbiBvYmplY3Qgd2l0aCBwYXJhbWV0ZXJzIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbVxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119ICAgQW4gYXJyYXkgd2l0aCBpZCdzIG9mIHRoZSBvdmVybGFwcGluZyBub2Rlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEFsbEVkZ2VzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCkge1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nRWRnZXMgPSBbXTtcbiAgICB0aGlzLl9nZXRFZGdlc092ZXJsYXBwaW5nV2l0aChvYmplY3QsIG92ZXJsYXBwaW5nRWRnZXMpO1xuICAgIHJldHVybiBvdmVybGFwcGluZ0VkZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZWRnZXMgbmVhcmVzdCB0byB0aGUgcGFzc2VkIHBvaW50IChsaWtlIGEgY2xpY2spXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXR1cm5FZGdlPXRydWVdXG4gICAqIEByZXR1cm5zIHtFZGdlIHwgdW5kZWZpbmVkfSBub2RlXG4gICAqL1xuICBnZXRFZGdlQXQocG9pbnRlciwgcmV0dXJuRWRnZSA9IHRydWUpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgZWRnZXMsIHBpY2sgY2xvc2VzdCB3aXRoaW4gMTBcbiAgICBjb25zdCBjYW52YXNQb3MgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKTtcbiAgICBsZXQgbWluZGlzdCA9IDEwO1xuICAgIGxldCBvdmVybGFwcGluZ0VkZ2UgPSBudWxsO1xuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5ib2R5LmVkZ2VzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlSWQgPSB0aGlzLmJvZHkuZWRnZUluZGljZXNbaV07XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUlkXTtcbiAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCkge1xuICAgICAgICBjb25zdCB4RnJvbSA9IGVkZ2UuZnJvbS54O1xuICAgICAgICBjb25zdCB5RnJvbSA9IGVkZ2UuZnJvbS55O1xuICAgICAgICBjb25zdCB4VG8gPSBlZGdlLnRvLng7XG4gICAgICAgIGNvbnN0IHlUbyA9IGVkZ2UudG8ueTtcbiAgICAgICAgY29uc3QgZGlzdCA9IGVkZ2UuZWRnZVR5cGUuZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgICAgICAgeEZyb20sXG4gICAgICAgICAgeUZyb20sXG4gICAgICAgICAgeFRvLFxuICAgICAgICAgIHlUbyxcbiAgICAgICAgICBjYW52YXNQb3MueCxcbiAgICAgICAgICBjYW52YXNQb3MueVxuICAgICAgICApO1xuICAgICAgICBpZiAoZGlzdCA8IG1pbmRpc3QpIHtcbiAgICAgICAgICBvdmVybGFwcGluZ0VkZ2UgPSBlZGdlSWQ7XG4gICAgICAgICAgbWluZGlzdCA9IGRpc3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG92ZXJsYXBwaW5nRWRnZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHJldHVybkVkZ2UgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5lZGdlc1tvdmVybGFwcGluZ0VkZ2VdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXBwaW5nRWRnZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIG9iamVjdCB0byB0aGUgc2VsZWN0aW9uIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYWRkVG9Ib3ZlcihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgdGhpcy5ob3Zlck9iai5ub2Rlc1tvYmouaWRdID0gb2JqO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhvdmVyT2JqLmVkZ2VzW29iai5pZF0gPSBvYmo7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHNpbmdsZSBvcHRpb24gZnJvbSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVGcm9tU2VsZWN0aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBOb2RlKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5kZWxldGVOb2RlcyhvYmopO1xuICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZGVsZXRlRWRnZXMoLi4ub2JqLmVkZ2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZGVsZXRlRWRnZXMob2JqKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zZWxlY3QgYWxsIG5vZGVzIGFuZCBlZGdlcy5cbiAgICovXG4gIHVuc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgbm9kZXNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFNlbGVjdGVkTm9kZUNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5zaXplTm9kZXM7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgZWRnZXNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFNlbGVjdGVkRWRnZUNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5zaXplRWRnZXM7XG4gIH1cblxuICAvKipcbiAgICogc2VsZWN0IHRoZSBlZGdlcyBjb25uZWN0ZWQgdG8gdGhlIG5vZGUgdGhhdCBpcyBiZWluZyBzZWxlY3RlZFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ob3ZlckNvbm5lY3RlZEVkZ2VzKG5vZGUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBub2RlLmVkZ2VzW2ldO1xuICAgICAgZWRnZS5ob3ZlciA9IHRydWU7XG4gICAgICB0aGlzLl9hZGRUb0hvdmVyKGVkZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGhpZ2hsaWdodCBmcm9tIGEgbm9kZSBvciBlZGdlLCBpbiByZXNwb25zZSB0byBtb3VzZSBtb3ZlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIG9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICogQHBhcmFtIHtOb2RlfHZpcy5FZGdlfSBvYmplY3RcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXRCbHVyRXZlbnQoZXZlbnQsIHBvaW50ZXIsIG9iamVjdCkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9pbml0QmFzZUV2ZW50KGV2ZW50LCBwb2ludGVyKTtcblxuICAgIGlmIChvYmplY3QuaG92ZXIgPT09IHRydWUpIHtcbiAgICAgIG9iamVjdC5ob3ZlciA9IGZhbHNlO1xuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgcHJvcGVydGllcy5ub2RlID0gb2JqZWN0LmlkO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYmx1ck5vZGVcIiwgcHJvcGVydGllcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wZXJ0aWVzLmVkZ2UgPSBvYmplY3QuaWQ7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJibHVyRWRnZVwiLCBwcm9wZXJ0aWVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBoaWdobGlnaHQgZm9yIGEgbm9kZSBvciBlZGdlLCBpbiByZXNwb25zZSB0byBtb3VzZSBtb3ZlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIG9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICogQHBhcmFtIHtOb2RlfHZpcy5FZGdlfSBvYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59IGhvdmVyQ2hhbmdlZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdEhvdmVyRXZlbnQoZXZlbnQsIHBvaW50ZXIsIG9iamVjdCkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9pbml0QmFzZUV2ZW50KGV2ZW50LCBwb2ludGVyKTtcbiAgICBsZXQgaG92ZXJDaGFuZ2VkID0gZmFsc2U7XG5cbiAgICBpZiAob2JqZWN0LmhvdmVyID09PSBmYWxzZSkge1xuICAgICAgb2JqZWN0LmhvdmVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2FkZFRvSG92ZXIob2JqZWN0KTtcbiAgICAgIGhvdmVyQ2hhbmdlZCA9IHRydWU7XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICBwcm9wZXJ0aWVzLm5vZGUgPSBvYmplY3QuaWQ7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJob3Zlck5vZGVcIiwgcHJvcGVydGllcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wZXJ0aWVzLmVkZ2UgPSBvYmplY3QuaWQ7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJob3ZlckVkZ2VcIiwgcHJvcGVydGllcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdmVyQ2hhbmdlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGFjdGlvbnMgaW4gcmVzcG9uc2UgdG8gYSBtb3VzZSBtb3ZlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50XG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlciB8IG9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICovXG4gIGhvdmVyT2JqZWN0KGV2ZW50LCBwb2ludGVyKSB7XG4gICAgbGV0IG9iamVjdCA9IHRoaXMuZ2V0Tm9kZUF0KHBvaW50ZXIpO1xuICAgIGlmIChvYmplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqZWN0ID0gdGhpcy5nZXRFZGdlQXQocG9pbnRlcik7XG4gICAgfVxuXG4gICAgbGV0IGhvdmVyQ2hhbmdlZCA9IGZhbHNlO1xuICAgIC8vIHJlbW92ZSBhbGwgbm9kZSBob3ZlciBoaWdobGlnaHRzXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5ob3Zlck9iai5ub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmhvdmVyT2JqLm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBvYmplY3QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChvYmplY3QgaW5zdGFuY2VvZiBOb2RlICYmIG9iamVjdC5pZCAhPSBub2RlSWQpIHx8XG4gICAgICAgICAgb2JqZWN0IGluc3RhbmNlb2YgRWRnZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmVtaXRCbHVyRXZlbnQoZXZlbnQsIHBvaW50ZXIsIHRoaXMuaG92ZXJPYmoubm9kZXNbbm9kZUlkXSk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuaG92ZXJPYmoubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgICBob3ZlckNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZpbmcgYWxsIGVkZ2UgaG92ZXIgaGlnaGxpZ2h0c1xuICAgIGZvciAoY29uc3QgZWRnZUlkIGluIHRoaXMuaG92ZXJPYmouZWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ob3Zlck9iai5lZGdlcywgZWRnZUlkKSkge1xuICAgICAgICAvLyBpZiB0aGUgaG92ZXIgaGFzIGJlZW4gY2hhbmdlZCBoZXJlIGl0IG1lYW5zIHRoYXQgdGhlIG5vZGUgaGFzIGJlZW4gaG92ZXJlZCBvdmVyIG9yIG9mZlxuICAgICAgICAvLyB3ZSB0aGVuIGRvIG5vdCB1c2UgdGhlIGVtaXRCbHVyRXZlbnQgbWV0aG9kIGhlcmUuXG4gICAgICAgIGlmIChob3ZlckNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmhvdmVyT2JqLmVkZ2VzW2VkZ2VJZF0uaG92ZXIgPSBmYWxzZTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5ob3Zlck9iai5lZGdlc1tlZGdlSWRdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHRoZSBibHVyIHJlbWFpbnMgdGhlIHNhbWUgYW5kIHRoZSBvYmplY3QgaXMgdW5kZWZpbmVkIChtb3VzZSBvZmYpIG9yIGFub3RoZXJcbiAgICAgICAgLy8gZWRnZSBoYXMgYmVlbiBob3ZlcmVkLCBvciBhbm90aGVyIG5vZGUgaGFzIGJlZW4gaG92ZXJlZCB3ZSBibHVyIHRoZSBlZGdlLlxuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICBvYmplY3QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChvYmplY3QgaW5zdGFuY2VvZiBFZGdlICYmIG9iamVjdC5pZCAhPSBlZGdlSWQpIHx8XG4gICAgICAgICAgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUgJiYgIW9iamVjdC5ob3ZlcilcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5lbWl0Qmx1ckV2ZW50KGV2ZW50LCBwb2ludGVyLCB0aGlzLmhvdmVyT2JqLmVkZ2VzW2VkZ2VJZF0pO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmhvdmVyT2JqLmVkZ2VzW2VkZ2VJZF07XG4gICAgICAgICAgaG92ZXJDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvYmplY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaG92ZXJlZEVkZ2VzQ291bnQgPSBPYmplY3Qua2V5cyh0aGlzLmhvdmVyT2JqLmVkZ2VzKS5sZW5ndGg7XG4gICAgICBjb25zdCBob3ZlcmVkTm9kZXNDb3VudCA9IE9iamVjdC5rZXlzKHRoaXMuaG92ZXJPYmoubm9kZXMpLmxlbmd0aDtcbiAgICAgIGNvbnN0IG5ld09ubHlIb3ZlcmVkRWRnZSA9XG4gICAgICAgIG9iamVjdCBpbnN0YW5jZW9mIEVkZ2UgJiZcbiAgICAgICAgaG92ZXJlZEVkZ2VzQ291bnQgPT09IDAgJiZcbiAgICAgICAgaG92ZXJlZE5vZGVzQ291bnQgPT09IDA7XG4gICAgICBjb25zdCBuZXdPbmx5SG92ZXJlZE5vZGUgPVxuICAgICAgICBvYmplY3QgaW5zdGFuY2VvZiBOb2RlICYmXG4gICAgICAgIGhvdmVyZWRFZGdlc0NvdW50ID09PSAwICYmXG4gICAgICAgIGhvdmVyZWROb2Rlc0NvdW50ID09PSAwO1xuXG4gICAgICBpZiAoaG92ZXJDaGFuZ2VkIHx8IG5ld09ubHlIb3ZlcmVkRWRnZSB8fCBuZXdPbmx5SG92ZXJlZE5vZGUpIHtcbiAgICAgICAgaG92ZXJDaGFuZ2VkID0gdGhpcy5lbWl0SG92ZXJFdmVudChldmVudCwgcG9pbnRlciwgb2JqZWN0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUgJiYgdGhpcy5vcHRpb25zLmhvdmVyQ29ubmVjdGVkRWRnZXMgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5faG92ZXJDb25uZWN0ZWRFZGdlcyhvYmplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChob3ZlckNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0IHRoZSBzZWxlY3Rpb24gY2hhbmdlcyBidXQgZG9uJ3QgZW1pdCBhbnkgZXZlbnRzLlxuICAgKi9cbiAgY29tbWl0V2l0aG91dEVtaXR0aW5nKCkge1xuICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmNvbW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhbmQgZGVzZWxlY3Qgbm9kZXMgZGVwZW5kaW5nIGN1cnJlbnQgc2VsZWN0aW9uIGNoYW5nZS5cbiAgICpcbiAgICogRm9yIGNoYW5naW5nIG5vZGVzLCBzZWxlY3QvZGVzZWxlY3QgZXZlbnRzIGFyZSBmaXJlZC5cbiAgICpcbiAgICogTk9URTogRm9yIGEgZ2l2ZW4gZWRnZSwgaWYgb25lIGNvbm5lY3Rpbmcgbm9kZSBpcyBkZXNlbGVjdGVkIGFuZCB3aXRoIHRoZVxuICAgKiBzYW1lIGNsaWNrIHRoZSBvdGhlciBub2RlIGlzIHNlbGVjdGVkLCBubyBldmVudHMgZm9yIHRoZSBlZGdlIHdpbGwgZmlyZS4gSXRcbiAgICogd2FzIHNlbGVjdGVkIGFuZCBpdCB3aWxsIHJlbWFpbiBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIC0gVGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgb2YgdGhlXG4gICAqIGNsaWNrLCB0YXAsIGRyYWdlbmTigKYgdGhhdCB0cmlnZ2VyZWQgdGhpcy5cbiAgICogQHBhcmFtIHtVSUV2ZW50fSBldmVudCAtIFRoZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzLlxuICAgKi9cbiAgY29tbWl0QW5kRW1pdChwb2ludGVyLCBldmVudCkge1xuICAgIGxldCBzZWxlY3RlZCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2VsZWN0aW9uQ2hhbmdlcyA9IHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmNvbW1pdCgpO1xuICAgIGNvbnN0IHByZXZpb3VzU2VsZWN0aW9uID0ge1xuICAgICAgbm9kZXM6IHNlbGVjdGlvbkNoYW5nZXMubm9kZXMucHJldmlvdXMsXG4gICAgICBlZGdlczogc2VsZWN0aW9uQ2hhbmdlcy5lZGdlcy5wcmV2aW91cyxcbiAgICB9O1xuXG4gICAgaWYgKHNlbGVjdGlvbkNoYW5nZXMuZWRnZXMuZGVsZXRlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgXCJkZXNlbGVjdEVkZ2VcIixcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHBvaW50ZXIsXG4gICAgICAgIHByZXZpb3VzU2VsZWN0aW9uXG4gICAgICApO1xuICAgICAgc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VzLm5vZGVzLmRlbGV0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgIFwiZGVzZWxlY3ROb2RlXCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBwb2ludGVyLFxuICAgICAgICBwcmV2aW91c1NlbGVjdGlvblxuICAgICAgKTtcbiAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlcy5ub2Rlcy5hZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2xpY2tFdmVudChcInNlbGVjdE5vZGVcIiwgZXZlbnQsIHBvaW50ZXIpO1xuICAgICAgc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VzLmVkZ2VzLmFkZGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDbGlja0V2ZW50KFwic2VsZWN0RWRnZVwiLCBldmVudCwgcG9pbnRlcik7XG4gICAgICBzZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmlyZSB0aGUgc2VsZWN0IGV2ZW50IGlmIGFueXRoaW5nIGhhcyBiZWVuIHNlbGVjdGVkIG9yIGRlc2VsZWN0ZWRcbiAgICBpZiAoc2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIHNlbGVjdCBvciB1bnNlbGVjdFxuICAgICAgdGhpcy5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJzZWxlY3RcIiwgZXZlbnQsIHBvaW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5vZGUgYW5kIGVkZ2UgaWRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7e25vZGVzOiBBcnJheS48c3RyaW5nPiwgZWRnZXM6IEFycmF5LjxzdHJpbmc+fX0gQXJyYXlzIHdpdGggdGhlXG4gICAqIGlkcyBvZiB0aGUgc2VsZWN0ZWQgbm9kZXMgYW5kIGVkZ2VzLlxuICAgKi9cbiAgZ2V0U2VsZWN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBub2RlczogdGhpcy5nZXRTZWxlY3RlZE5vZGVJZHMoKSxcbiAgICAgIGVkZ2VzOiB0aGlzLmdldFNlbGVjdGVkRWRnZUlkcygpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBub2Rlcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSB3aXRoIHNlbGVjdGVkIG5vZGVzLlxuICAgKi9cbiAgZ2V0U2VsZWN0ZWROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0Tm9kZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGVkZ2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEFuIGFycmF5IHdpdGggc2VsZWN0ZWQgZWRnZXMuXG4gICAqL1xuICBnZXRTZWxlY3RlZEVkZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5nZXRFZGdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZSBpZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX0gQW4gYXJyYXkgd2l0aCB0aGUgaWRzIG9mIHRoZSBzZWxlY3RlZCBub2Rlcy5cbiAgICovXG4gIGdldFNlbGVjdGVkTm9kZUlkcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0Tm9kZXMoKS5tYXAoKG5vZGUpID0+IG5vZGUuaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZWRnZSBpZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX0gQW4gYXJyYXkgd2l0aCB0aGUgaWRzIG9mIHRoZSBzZWxlY3RlZCBlZGdlcy5cbiAgICovXG4gIGdldFNlbGVjdGVkRWRnZUlkcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0RWRnZXMoKS5tYXAoKGVkZ2UpID0+IGVkZ2UuaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7e25vZGVzOiBBcnJheS48c3RyaW5nPiwgZWRnZXM6IEFycmF5LjxzdHJpbmc+fX0gc2VsZWN0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uc1xuICAgKi9cbiAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgKCFzZWxlY3Rpb24ubm9kZXMgJiYgIXNlbGVjdGlvbi5lZGdlcykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiU2VsZWN0aW9uIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggbm9kZXMgYW5kL29yIGVkZ2VzIHByb3BlcnRpZXNcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB1bnNlbGVjdCBhbnkgc2VsZWN0ZWQgbm9kZSwgaWYgb3B0aW9uIGlzIHRydWUgb3IgdW5kZWZpbmVkXG4gICAgaWYgKG9wdGlvbnMudW5zZWxlY3RBbGwgfHwgb3B0aW9ucy51bnNlbGVjdEFsbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XG4gICAgfVxuICAgIGlmIChzZWxlY3Rpb24ubm9kZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaWQgb2Ygc2VsZWN0aW9uLm5vZGVzKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbaWRdO1xuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTm9kZSB3aXRoIGlkIFwiJyArIGlkICsgJ1wiIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvbid0IHNlbGVjdCBlZGdlcyB3aXRoIGl0XG4gICAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KG5vZGUsIG9wdGlvbnMuaGlnaGxpZ2h0RWRnZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzZWxlY3Rpb24uZWRnZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaWQgb2Ygc2VsZWN0aW9uLmVkZ2VzKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbaWRdO1xuICAgICAgICBpZiAoIWVkZ2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRWRnZSB3aXRoIGlkIFwiJyArIGlkICsgJ1wiIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KGVkZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuY29tbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogc2VsZWN0IHplcm8gb3IgbW9yZSBub2RlcyB3aXRoIHRoZSBvcHRpb24gdG8gaGlnaGxpZ2h0IGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gc2VsZWN0aW9uICAgICBBbiBhcnJheSB3aXRoIHRoZSBpZHMgb2YgdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBub2Rlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlnaGxpZ2h0RWRnZXNdXG4gICAqL1xuICBzZWxlY3ROb2RlcyhzZWxlY3Rpb24sIGhpZ2hsaWdodEVkZ2VzID0gdHJ1ZSkge1xuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5sZW5ndGggPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IFwiU2VsZWN0aW9uIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBpZHNcIjtcblxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHsgbm9kZXM6IHNlbGVjdGlvbiB9LCB7IGhpZ2hsaWdodEVkZ2VzOiBoaWdobGlnaHRFZGdlcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZWxlY3QgemVybyBvciBtb3JlIGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gc2VsZWN0aW9uICAgICBBbiBhcnJheSB3aXRoIHRoZSBpZHMgb2YgdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBub2Rlcy5cbiAgICovXG4gIHNlbGVjdEVkZ2VzKHNlbGVjdGlvbikge1xuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5sZW5ndGggPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IFwiU2VsZWN0aW9uIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBpZHNcIjtcblxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHsgZWRnZXM6IHNlbGVjdGlvbiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgc2VsZWN0aW9uOiByZW1vdmUgaWRzIG9mIG5vZGVzIHdoaWNoIG5vIGxvbmdlciBleGlzdFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlU2VsZWN0aW9uKCkge1xuICAgIGZvciAoY29uc3Qgbm9kZSBpbiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5nZXROb2RlcygpKSB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkubm9kZXMsIG5vZGUuaWQpKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmRlbGV0ZU5vZGVzKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVkZ2UgaW4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0RWRnZXMoKSkge1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlLmlkKSkge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5kZWxldGVFZGdlcyhlZGdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGFsbCB0aGUgdmlzdWFsIGVsZW1lbnRzIGNsaWNrZWQgd2hpY2ggYXJlIG9uIHRoZSBnaXZlbiBwb2ludC5cbiAgICpcbiAgICogQWxsIGVsZW1lbnRzIGFyZSByZXR1cm5lZDsgdGhpcyBpbmNsdWRlcyBub2RlcywgZWRnZXMgYW5kIHRoZWlyIGxhYmVscy5cbiAgICogVGhlIG9yZGVyIHJldHVybmVkIGlzIGZyb20gaGlnaGVzdCB0byBsb3dlc3QsIGkuZS4gZWxlbWVudCAwIG9mIHRoZSByZXR1cm5cbiAgICogdmFsdWUgaXMgdGhlIHRvcG1vc3QgaXRlbSBjbGlja2VkIG9uLlxuICAgKlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIGNvbnNpc3RzIG9mIGFuIGFycmF5IG9mIHRoZSBmb2xsb3dpbmcgcG9zc2libGUgZWxlbWVudHM6XG4gICAqXG4gICAqIC0gYHtub2RlSWQ6bnVtYmVyfWAgICAgICAgICAgICAgLSBub2RlIHdpdGggZ2l2ZW4gaWQgY2xpY2tlZCBvblxuICAgKiAtIGB7bm9kZUlkOm51bWJlciwgbGFiZWxJZDowfWAgIC0gbGFiZWwgb2Ygbm9kZSB3aXRoIGdpdmVuIGlkIGNsaWNrZWQgb25cbiAgICogLSBge2VkZ2VJZDpudW1iZXJ9YCAgICAgICAgICAgICAtIGVkZ2Ugd2l0aCBnaXZlbiBpZCBjbGlja2VkIG9uXG4gICAqIC0gYHtlZGdlOm51bWJlciwgbGFiZWxJZDowfWAgICAgLSBsYWJlbCBvZiBlZGdlIHdpdGggZ2l2ZW4gaWQgY2xpY2tlZCBvblxuICAgKlxuICAgKiAjIyBOT1RFU1xuICAgKlxuICAgKiAtIEN1cnJlbnRseSwgdGhlcmUgaXMgb25seSBvbmUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIGEgbm9kZSBvciBhbiBlZGdlLFxuICAgKiAgIGJ1dCB0aGlzIGlzIGV4cGVjdGVkIHRvIGNoYW5nZSBzb21ld2hlcmUgaW4gdGhlIGZ1dHVyZS5cbiAgICogLSBTaW5jZSB0aGVyZSBpcyBubyB6LWluZGV4aW5nIHlldCwgaXQgaXMgbm90IHJlYWxseSBwb3NzaWJsZSB0byBzZXQgdGhlIG5vZGVzIGFuZFxuICAgKiAgIGVkZ2VzIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBGb3IgdGhlIHRpbWUgYmVpbmcsIG5vZGVzIGNvbWUgZmlyc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7cG9pbnR9IHBvaW50ZXIgIG1vdXNlIHBvc2l0aW9uIGluIHNjcmVlbiBjb29yZGluYXRlc1xuICAgKiBAcmV0dXJucyB7QXJyYXkuPG5vZGVDbGlja0l0ZW18bm9kZUxhYmVsQ2xpY2tJdGVtfGVkZ2VDbGlja0l0ZW18ZWRnZUxhYmVsQ2xpY2tJdGVtPn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldENsaWNrZWRJdGVtcyhwb2ludGVyKSB7XG4gICAgY29uc3QgcG9pbnQgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKTtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuXG4gICAgLy8gTm90ZSByZXZlcnNlIG9yZGVyOyB3ZSB3YW50IHRoZSB0b3Btb3N0IGNsaWNrZWQgaXRlbXMgdG8gYmUgZmlyc3QgaW4gdGhlIGFycmF5XG4gICAgLy8gQWxzbyBub3RlIHRoYXQgc2VsZWN0ZWQgbm9kZXMgYXJlIGRpc3JlZ2FyZGVkIGhlcmU7IHRoZXNlIG5vcm1hbGx5IGRpc3BsYXkgb24gdG9wXG4gICAgY29uc3Qgbm9kZUluZGljZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgZm9yIChsZXQgaSA9IG5vZGVJbmRpY2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgY29uc3QgcmV0ID0gbm9kZS5nZXRJdGVtc09uUG9pbnQocG9pbnQpO1xuICAgICAgaXRlbXMucHVzaC5hcHBseShpdGVtcywgcmV0KTsgLy8gQXBwZW5kIHRoZSByZXR1cm4gdmFsdWUgdG8gdGhlIHJ1bm5pbmcgbGlzdC5cbiAgICB9XG5cbiAgICBjb25zdCBlZGdlSW5kaWNlcyA9IHRoaXMuYm9keS5lZGdlSW5kaWNlcztcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBmb3IgKGxldCBpID0gZWRnZUluZGljZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tlZGdlSW5kaWNlc1tpXV07XG4gICAgICBjb25zdCByZXQgPSBlZGdlLmdldEl0ZW1zT25Qb2ludChwb2ludCk7XG4gICAgICBpdGVtcy5wdXNoLmFwcGx5KGl0ZW1zLCByZXQpOyAvLyBBcHBlbmQgdGhlIHJldHVybiB2YWx1ZSB0byB0aGUgcnVubmluZyBsaXN0LlxuICAgIH1cblxuICAgIHJldHVybiBpdGVtcztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Rpb25IYW5kbGVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgbWVyZ2VTb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICByZXR1cm4gbGVuZ3RoIDwgOCA/IGluc2VydGlvblNvcnQoYXJyYXksIGNvbXBhcmVmbikgOiBtZXJnZShcbiAgICBhcnJheSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgMCwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBjb21wYXJlZm5cbiAgKTtcbn07XG5cbnZhciBpbnNlcnRpb25Tb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIGkgPSAxO1xuICB2YXIgZWxlbWVudCwgajtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGogPSBpO1xuICAgIGVsZW1lbnQgPSBhcnJheVtpXTtcbiAgICB3aGlsZSAoaiAmJiBjb21wYXJlZm4oYXJyYXlbaiAtIDFdLCBlbGVtZW50KSA+IDApIHtcbiAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXTtcbiAgICB9XG4gICAgaWYgKGogIT09IGkrKykgYXJyYXlbal0gPSBlbGVtZW50O1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIChhcnJheSwgbGVmdCwgcmlnaHQsIGNvbXBhcmVmbikge1xuICB2YXIgbGxlbmd0aCA9IGxlZnQubGVuZ3RoO1xuICB2YXIgcmxlbmd0aCA9IHJpZ2h0Lmxlbmd0aDtcbiAgdmFyIGxpbmRleCA9IDA7XG4gIHZhciByaW5kZXggPSAwO1xuXG4gIHdoaWxlIChsaW5kZXggPCBsbGVuZ3RoIHx8IHJpbmRleCA8IHJsZW5ndGgpIHtcbiAgICBhcnJheVtsaW5kZXggKyByaW5kZXhdID0gKGxpbmRleCA8IGxsZW5ndGggJiYgcmluZGV4IDwgcmxlbmd0aClcbiAgICAgID8gY29tcGFyZWZuKGxlZnRbbGluZGV4XSwgcmlnaHRbcmluZGV4XSkgPD0gMCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdXG4gICAgICA6IGxpbmRleCA8IGxsZW5ndGggPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXTtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlU29ydDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBmaXJlZm94ID0gdXNlckFnZW50Lm1hdGNoKC9maXJlZm94XFwvKFxcZCspL2kpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhZmlyZWZveCAmJiArZmlyZWZveFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVUEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciB3ZWJraXQgPSB1c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvKFxcZCspXFwuLyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISF3ZWJraXQgJiYgK3dlYmtpdFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJuYWxTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBGRiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtZmYtdmVyc2lvbicpO1xudmFyIElFX09SX0VER0UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWllLW9yLWVkZ2UnKTtcbnZhciBWOCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIFdFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24nKTtcblxudmFyIHRlc3QgPSBbXTtcbnZhciBuYXRpdmVTb3J0ID0gdW5jdXJyeVRoaXModGVzdC5zb3J0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXModGVzdC5wdXNoKTtcblxuLy8gSUU4LVxudmFyIEZBSUxTX09OX1VOREVGSU5FRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KTtcbi8vIFY4IGJ1Z1xudmFyIEZBSUxTX09OX05VTEwgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydChudWxsKTtcbn0pO1xuLy8gT2xkIFdlYktpdFxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb3J0Jyk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGZlYXR1cmUgZGV0ZWN0aW9uIGNhbiBiZSB0b28gc2xvdywgc28gY2hlY2sgZW5naW5lcyB2ZXJzaW9uc1xuICBpZiAoVjgpIHJldHVybiBWOCA8IDcwO1xuICBpZiAoRkYgJiYgRkYgPiAzKSByZXR1cm47XG4gIGlmIChJRV9PUl9FREdFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFdFQktJVCkgcmV0dXJuIFdFQktJVCA8IDYwMztcblxuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBjb2RlLCBjaHIsIHZhbHVlLCBpbmRleDtcblxuICAvLyBnZW5lcmF0ZSBhbiBhcnJheSB3aXRoIG1vcmUgNTEyIGVsZW1lbnRzIChDaGFrcmEgYW5kIG9sZCBWOCBmYWlscyBvbmx5IGluIHRoaXMgY2FzZSlcbiAgZm9yIChjb2RlID0gNjU7IGNvZGUgPCA3NjsgY29kZSsrKSB7XG4gICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSA2NjogY2FzZSA2OTogY2FzZSA3MDogY2FzZSA3MjogdmFsdWUgPSAzOyBicmVhaztcbiAgICAgIGNhc2UgNjg6IGNhc2UgNzE6IHZhbHVlID0gNDsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB2YWx1ZSA9IDI7XG4gICAgfVxuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDc7IGluZGV4KyspIHtcbiAgICAgIHRlc3QucHVzaCh7IGs6IGNociArIGluZGV4LCB2OiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0ZXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudiAtIGEudjsgfSk7XG5cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGVzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSB0ZXN0W2luZGV4XS5rLmNoYXJBdCgwKTtcbiAgICBpZiAocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IGNocikgcmVzdWx0ICs9IGNocjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgIT09ICdER0JFRkhBQ0lKSyc7XG59KTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCAhU1RSSUNUX01FVEhPRCB8fCAhU1RBQkxFX1NPUlQ7XG5cbnZhciBnZXRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uIChjb21wYXJlZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICByZXR1cm4gdG9TdHJpbmcoeCkgPiB0b1N0cmluZyh5KSA/IDEgOiAtMTtcbiAgfTtcbn07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb3J0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG5cbiAgICB2YXIgYXJyYXkgPSB0b09iamVjdCh0aGlzKTtcblxuICAgIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkID8gbmF0aXZlU29ydChhcnJheSkgOiBuYXRpdmVTb3J0KGFycmF5LCBjb21wYXJlZm4pO1xuXG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGFycmF5TGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoYXJyYXkpO1xuICAgIHZhciBpdGVtc0xlbmd0aCwgaW5kZXg7XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGluZGV4IGluIGFycmF5KSBwdXNoKGl0ZW1zLCBhcnJheVtpbmRleF0pO1xuICAgIH1cblxuICAgIGludGVybmFsU29ydChpdGVtcywgZ2V0U29ydENvbXBhcmUoY29tcGFyZWZuKSk7XG5cbiAgICBpdGVtc0xlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZW1zKTtcbiAgICBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBpdGVtc0xlbmd0aCkgYXJyYXlbaW5kZXhdID0gaXRlbXNbaW5kZXgrK107XG4gICAgd2hpbGUgKGluZGV4IDwgYXJyYXlMZW5ndGgpIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhhcnJheSwgaW5kZXgrKyk7XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc29ydCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnNvcnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc29ydCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zb3J0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb3J0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgcmVkdWNlLCByZWR1Y2VSaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX1JJR0hUKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYXJndW1lbnRzTGVuZ3RoLCBtZW1vKSB7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgaW5kZXggPSBJU19SSUdIVCA/IGxlbmd0aCAtIDEgOiAwO1xuICAgIHZhciBpID0gSVNfUklHSFQgPyAtMSA6IDE7XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8IDIpIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGlmIChJU19SSUdIVCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDtJU19SSUdIVCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4gIGxlZnQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VyaWdodFxuICByaWdodDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09PSAncHJvY2Vzcyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5sZWZ0O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIENIUk9NRV9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG4vLyBDaHJvbWUgODAtODIgaGFzIGEgY3JpdGljYWwgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDQ5OTgyXG52YXIgQ0hST01FX0JVRyA9ICFJU19OT0RFICYmIENIUk9NRV9WRVJTSU9OID4gNzkgJiYgQ0hST01FX1ZFUlNJT04gPCA4MztcbnZhciBGT1JDRUQgPSBDSFJPTUVfQlVHIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdyZWR1Y2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgbGVuZ3RoLCBsZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZWR1Y2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmVkdWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJlZHVjZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmVkdWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JlZHVjZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIvKipcbiAqIEhlbHBlciBjbGFzc2VzIGZvciBMYXlvdXRFbmdpbmUuXG4gKlxuICogU3RyYXRlZ3kgcGF0dGVybiBmb3IgdXNhZ2Ugb2YgZGlyZWN0aW9uIG1ldGhvZHMgZm9yIGhpZXJhcmNoaWNhbCBsYXlvdXRzLlxuICovXG5cbi8qKlxuICogSW50ZXJmYWNlIGRlZmluaXRpb24gZm9yIGRpcmVjdGlvbiBzdHJhdGVneSBjbGFzc2VzLlxuICpcbiAqIFRoaXMgY2xhc3MgZGVzY3JpYmVzIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBTdHJhdGVneVxuICogcGF0dGVybiBjbGFzc2VzIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbFxuICogZGlyZWN0aW9uIG9mIGhpZXJhcmNoaWNhbCByZXN1bHRzLlxuICpcbiAqIEZvciBhIGdpdmVuIGRpcmVjdGlvbiwgb25lIGNvb3JkaW5hdGUgd2lsbCBiZSAnZml4ZWQnLCBtZWFuaW5nIHRoYXQgaXQgaXNcbiAqIGRldGVybWluZWQgYnkgbGV2ZWwuXG4gKiBUaGUgb3RoZXIgY29vcmRpbmF0ZSBpcyAndW5maXhlZCcsIG1lYW5pbmcgdGhhdCB0aGUgbm9kZXMgb24gYSBnaXZlbiBsZXZlbFxuICogY2FuIHN0aWxsIG1vdmUgYWxvbmcgdGhhdCBjb29yZGluYXRlLiBTbzpcbiAqXG4gKiAtIGB2ZXJ0aWNhbGAgbGF5b3V0OiBgeGAgdW5maXhlZCwgYHlgIGZpeGVkIHBlciBsZXZlbFxuICogLSBgaG9yaXpvbnRhbGAgbGF5b3V0OiBgeGAgZml4ZWQgcGVyIGxldmVsLCBgeWAgdW5maXhlZFxuICpcbiAqIFRoZSBsb2NhbCBtZXRob2RzIGFyZSBzdHVicyBhbmQgc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIGFic3RyYWN0LlxuICogRGVyaXZlZCBjbGFzc2VzICoqbXVzdCoqIGltcGxlbWVudCBhbGwgdGhlIG1ldGhvZHMgdGhlbXNlbHZlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBEaXJlY3Rpb25JbnRlcmZhY2Uge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgYWJzdHJhY3QoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgaW5zdGFudGlhdGUgYWJzdHJhY3QgY2xhc3MhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBkdW1teSBjYWxsIHdoaWNoIGlzIHVzZWQgdG8gc3VwcHJlc3MgdGhlIGpzZG9jIGVycm9ycyBvZiB0eXBlOlxuICAgKlxuICAgKiAgIFwiJ3BhcmFtJyBpcyBhc3NpZ25lZCBhIHZhbHVlIGJ1dCBuZXZlciB1c2VkXCJcbiAgICpcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZmFrZV91c2UoKSB7XG4gICAgLy8gRG8gbm90aGluZyBzcGVjaWFsXG4gIH1cblxuICAvKipcbiAgICogVHlwZSB0byB1c2UgdG8gdHJhbnNsYXRlIGR5bmFtaWMgY3VydmVzIHRvLCBpbiB0aGUgY2FzZSBvZiBoaWVyYXJjaGljYWwgbGF5b3V0LlxuICAgKiBEeW5hbWljIGN1cnZlcyBkbyBub3Qgd29yayBmb3IgdGhlc2UuXG4gICAqXG4gICAqIFRoZSB2YWx1ZSBzaG91bGQgYmUgcGVycGVuZGljdWxhciB0byB0aGUgYWN0dWFsIGRpcmVjdGlvbiBvZiB0aGUgbGF5b3V0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBEaXJlY3Rpb24sIGVpdGhlciAndmVydGljYWwnIG9yICdob3Jpem9udGFsJ1xuICAgKi9cbiAgY3VydmVUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY29vcmRpbmF0ZSB0aGF0IGlzIG5vdCBmaXhlZCBmb3IgdGhpcyBkaXJlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBUaGUgbm9kZSB0byByZWFkXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIG9mIHRoZSB1bmZpeGVkIGNvb3JkaW5hdGVcbiAgICovXG4gIGdldFBvc2l0aW9uKG5vZGUpIHtcbiAgICB0aGlzLmZha2VfdXNlKG5vZGUpO1xuICAgIHJldHVybiB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgY29vcmRpbmF0ZSB0aGF0IGlzIG5vdCBmaXhlZCBmb3IgdGhpcyBkaXJlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBUaGUgbm9kZSB0byBhZGp1c3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbGV2ZWxdIGlmIHNwZWNpZmllZCwgdGhlIGhpZXJhcmNoeSBsZXZlbCB0aGF0IHRoaXMgbm9kZSBzaG91bGQgYmUgZml4ZWQgdG9cbiAgICovXG4gIHNldFBvc2l0aW9uKG5vZGUsIHBvc2l0aW9uLCBsZXZlbCA9IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZmFrZV91c2Uobm9kZSwgcG9zaXRpb24sIGxldmVsKTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3aWR0aCBvZiBhIHRyZWUuXG4gICAqXG4gICAqIEEgYHRyZWVgIGhlcmUgaXMgYSBzdWJzZXQgb2Ygbm9kZXMgd2l0aGluIHRoZSBuZXR3b3JrIHdoaWNoIGFyZSBub3QgY29ubmVjdGVkIHRvIG90aGVyIG5vZGVzLFxuICAgKiBvbmx5IGFtb25nIHRoZW1zZWx2ZXMuIEluIGVzc2VuY2UsIGl0IGlzIGEgc3ViLW5ldHdvcmsuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggbnVtYmVyIG9mIGEgdHJlZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgd2lkdGggb2YgYSB0cmVlIGluIHRoZSB2aWV3IGNvb3JkaW5hdGVzXG4gICAqL1xuICBnZXRUcmVlU2l6ZShpbmRleCkge1xuICAgIHRoaXMuZmFrZV91c2UoaW5kZXgpO1xuICAgIHJldHVybiB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogU29ydCBhcnJheSBvZiBub2RlcyBvbiB0aGUgdW5maXhlZCBjb29yZGluYXRlcy5cbiAgICpcbiAgICogTm90ZToqKiBjaHJvbWUgaGFzIG5vbi1zdGFibGUgc29ydGluZyBpbXBsZW1lbnRhdGlvbiwgd2hpY2hcbiAgICogaGFzIGEgdGVuZGVuY3kgdG8gY2hhbmdlIHRoZSBvcmRlciBvZiB0aGUgYXJyYXkgaXRlbXMsXG4gICAqIGV2ZW4gaWYgdGhlIGN1c3RvbSBzb3J0IGZ1bmN0aW9uIHJldHVybnMgMC5cbiAgICpcbiAgICogRm9yIHRoaXMgcmVhc29uLCBhbiBleHRlcm5hbCBzb3J0IGltcGxlbWVudGF0aW9uIGlzIHVzZWQsXG4gICAqIHdoaWNoIGhhcyB0aGUgYWRkZWQgYmVuZWZpdCBvZiBiZWluZyBmYXN0ZXIgdGhhbiB0aGUgc3RhbmRhcmRcbiAgICogcGxhdGZvcm1zIGltcGxlbWVudGF0aW9uLiBUaGlzIGhhcyBiZWVuIHZlcmlmaWVkIG9uIGBub2RlLmpzYCxcbiAgICogYGZpcmVmb3hgIGFuZCBgY2hyb21lYCAoYWxsIGxpbnV4KS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVBcnJheSBhcnJheSBvZiBub2RlcyB0byBzb3J0XG4gICAqL1xuICBzb3J0KG5vZGVBcnJheSkge1xuICAgIHRoaXMuZmFrZV91c2Uobm9kZUFycmF5KTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIHRoZSBmaXhlZCBjb29yZGluYXRlIG9mIHRoZSBub2RlIHRvIHRoZSBnaXZlbiBsZXZlbFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIG5vZGUgdG8gYWRqdXN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbCBUaGUgbGV2ZWwgdG8gZml4IHRvXG4gICAqL1xuICBmaXgobm9kZSwgbGV2ZWwpIHtcbiAgICB0aGlzLmZha2VfdXNlKG5vZGUsIGxldmVsKTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIG9mZnNldCB0byB0aGUgdW5maXhlZCBjb29yZGluYXRlIG9mIHRoZSBnaXZlbiBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGVJZH0gbm9kZUlkIElkIG9mIHRoZSBub2RlIHRvIGFkanVzdFxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlmZiBPZmZzZXQgdG8gYWRkIHRvIHRoZSB1bmZpeGVkIGNvb3JkaW5hdGVcbiAgICovXG4gIHNoaWZ0KG5vZGVJZCwgZGlmZikge1xuICAgIHRoaXMuZmFrZV91c2Uobm9kZUlkLCBkaWZmKTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJ0aWNhbCBTdHJhdGVneVxuICpcbiAqIENvb3JkaW5hdGUgYHlgIGlzIGZpeGVkIG9uIGxldmVscywgY29vcmRpbmF0ZSBgeGAgaXMgdW5maXhlZC5cbiAqXG4gKiBAYXVnbWVudHMgRGlyZWN0aW9uSW50ZXJmYWNlXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBWZXJ0aWNhbFN0cmF0ZWd5IGV4dGVuZHMgRGlyZWN0aW9uSW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBsYXlvdXQgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgTGF5b3V0RW5naW5lIGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3IobGF5b3V0KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBjdXJ2ZVR5cGUoKSB7XG4gICAgcmV0dXJuIFwiaG9yaXpvbnRhbFwiO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFBvc2l0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS54O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHNldFBvc2l0aW9uKG5vZGUsIHBvc2l0aW9uLCBsZXZlbCA9IHVuZGVmaW5lZCkge1xuICAgIGlmIChsZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxheW91dC5oaWVyYXJjaGljYWwuYWRkVG9PcmRlcmluZyhub2RlLCBsZXZlbCk7XG4gICAgfVxuICAgIG5vZGUueCA9IHBvc2l0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFRyZWVTaXplKGluZGV4KSB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5sYXlvdXQuaGllcmFyY2hpY2FsLmdldFRyZWVTaXplKFxuICAgICAgdGhpcy5sYXlvdXQuYm9keS5ub2RlcyxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgICByZXR1cm4geyBtaW46IHJlcy5taW5feCwgbWF4OiByZXMubWF4X3ggfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzb3J0KG5vZGVBcnJheSkge1xuICAgIG5vZGVBcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS54IC0gYi54O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGZpeChub2RlLCBsZXZlbCkge1xuICAgIG5vZGUueSA9IHRoaXMubGF5b3V0Lm9wdGlvbnMuaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbiAqIGxldmVsO1xuICAgIG5vZGUub3B0aW9ucy5maXhlZC55ID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzaGlmdChub2RlSWQsIGRpZmYpIHtcbiAgICB0aGlzLmxheW91dC5ib2R5Lm5vZGVzW25vZGVJZF0ueCArPSBkaWZmO1xuICB9XG59XG5cbi8qKlxuICogSG9yaXpvbnRhbCBTdHJhdGVneVxuICpcbiAqIENvb3JkaW5hdGUgYHhgIGlzIGZpeGVkIG9uIGxldmVscywgY29vcmRpbmF0ZSBgeWAgaXMgdW5maXhlZC5cbiAqXG4gKiBAYXVnbWVudHMgRGlyZWN0aW9uSW50ZXJmYWNlXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBIb3Jpem9udGFsU3RyYXRlZ3kgZXh0ZW5kcyBEaXJlY3Rpb25JbnRlcmZhY2Uge1xuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGxheW91dCByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBMYXlvdXRFbmdpbmUgaW5zdGFuY2UuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihsYXlvdXQpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGN1cnZlVHlwZSgpIHtcbiAgICByZXR1cm4gXCJ2ZXJ0aWNhbFwiO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFBvc2l0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS55O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHNldFBvc2l0aW9uKG5vZGUsIHBvc2l0aW9uLCBsZXZlbCA9IHVuZGVmaW5lZCkge1xuICAgIGlmIChsZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxheW91dC5oaWVyYXJjaGljYWwuYWRkVG9PcmRlcmluZyhub2RlLCBsZXZlbCk7XG4gICAgfVxuICAgIG5vZGUueSA9IHBvc2l0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFRyZWVTaXplKGluZGV4KSB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5sYXlvdXQuaGllcmFyY2hpY2FsLmdldFRyZWVTaXplKFxuICAgICAgdGhpcy5sYXlvdXQuYm9keS5ub2RlcyxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgICByZXR1cm4geyBtaW46IHJlcy5taW5feSwgbWF4OiByZXMubWF4X3kgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzb3J0KG5vZGVBcnJheSkge1xuICAgIG5vZGVBcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS55IC0gYi55O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGZpeChub2RlLCBsZXZlbCkge1xuICAgIG5vZGUueCA9IHRoaXMubGF5b3V0Lm9wdGlvbnMuaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbiAqIGxldmVsO1xuICAgIG5vZGUub3B0aW9ucy5maXhlZC54ID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzaGlmdChub2RlSWQsIGRpZmYpIHtcbiAgICB0aGlzLmxheW91dC5ib2R5Lm5vZGVzW25vZGVJZF0ueSArPSBkaWZmO1xuICB9XG59XG5cbmV4cG9ydCB7IEhvcml6b250YWxTdHJhdGVneSwgVmVydGljYWxTdHJhdGVneSB9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5ldmVyeTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdldmVyeScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZXZlcnkodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmV2ZXJ5Jyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZXZlcnk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZXZlcnknKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZXZlcnk7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmV2ZXJ5KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2V2ZXJ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgInR5cGUgTGV2ZWxzID0gUmVjb3JkPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPjtcbnR5cGUgSWQgPSBzdHJpbmcgfCBudW1iZXI7XG5pbnRlcmZhY2UgRWRnZSB7XG4gIGNvbm5lY3RlZDogYm9vbGVhbjtcbiAgZnJvbTogTm9kZTtcbiAgZnJvbUlkOiBJZDtcbiAgdG86IE5vZGU7XG4gIHRvSWQ6IElkO1xufVxuaW50ZXJmYWNlIE5vZGUge1xuICBpZDogSWQ7XG4gIGVkZ2VzOiBFZGdlW107XG59XG5cbi8qKlxuICogVHJ5IHRvIGFzc2lnbiBsZXZlbHMgdG8gbm9kZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9ucyBpbiB0aGUgY3ljbGljIOKAnGhpZXJhcmNoeeKAnS5cbiAqXG4gKiBAcGFyYW0gbm9kZXMgLSBWaXNpYmxlIG5vZGVzIG9mIHRoZSBncmFwaC5cbiAqIEBwYXJhbSBsZXZlbHMgLSBJZiBwcmVzZW50IGxldmVscyB3aWxsIGJlIGFkZGVkIHRvIGl0LCBpZiBub3QgYSBuZXcgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZC5cbiAqIEByZXR1cm5zIFBvcHVsYXRlZCBub2RlIGxldmVscy5cbiAqL1xuZnVuY3Rpb24gZmlsbExldmVsc0J5RGlyZWN0aW9uQ3ljbGljKFxuICBub2RlczogTWFwPElkLCBOb2RlPixcbiAgbGV2ZWxzOiBMZXZlbHNcbik6IExldmVscyB7XG4gIGNvbnN0IGVkZ2VzID0gbmV3IFNldDxFZGdlPigpO1xuICBub2Rlcy5mb3JFYWNoKChub2RlKTogdm9pZCA9PiB7XG4gICAgbm9kZS5lZGdlcy5mb3JFYWNoKChlZGdlKTogdm9pZCA9PiB7XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQpIHtcbiAgICAgICAgZWRnZXMuYWRkKGVkZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBlZGdlcy5mb3JFYWNoKChlZGdlKTogdm9pZCA9PiB7XG4gICAgY29uc3QgZnJvbUlkID0gZWRnZS5mcm9tLmlkO1xuICAgIGNvbnN0IHRvSWQgPSBlZGdlLnRvLmlkO1xuXG4gICAgaWYgKGxldmVsc1tmcm9tSWRdID09IG51bGwpIHtcbiAgICAgIGxldmVsc1tmcm9tSWRdID0gMDtcbiAgICB9XG5cbiAgICBpZiAobGV2ZWxzW3RvSWRdID09IG51bGwgfHwgbGV2ZWxzW2Zyb21JZF0gPj0gbGV2ZWxzW3RvSWRdKSB7XG4gICAgICBsZXZlbHNbdG9JZF0gPSBsZXZlbHNbZnJvbUlkXSArIDE7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbGV2ZWxzO1xufVxuXG4vKipcbiAqIEFzc2lnbiBsZXZlbHMgdG8gbm9kZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9ucyBpbiB0aGUgaGllcmFyY2h5LiBMZWF2ZXMgd2lsbCBiZSBsaW5lZCB1cCBhdCB0aGUgYm90dG9tIGFuZCBhbGwgb3RoZXIgbm9kZXMgYXMgY2xvc2UgdG8gdGhlaXIgY2hpbGRyZW4gYXMgcG9zc2libGUuXG4gKlxuICogQHBhcmFtIG5vZGVzIC0gVmlzaWJsZSBub2RlcyBvZiB0aGUgZ3JhcGguXG4gKiBAcmV0dXJucyBQb3B1bGF0ZWQgbm9kZSBsZXZlbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25MZWF2ZXMobm9kZXM6IE1hcDxJZCwgTm9kZT4pOiBMZXZlbHMge1xuICByZXR1cm4gZmlsbExldmVsc0J5RGlyZWN0aW9uKFxuICAgIC8vIFBpY2sgb25seSBsZWF2ZXMgKG5vZGVzIHdpdGhvdXQgY2hpbGRyZW4pLlxuICAgIChub2RlKTogYm9vbGVhbiA9PlxuICAgICAgbm9kZS5lZGdlc1xuICAgICAgICAvLyBUYWtlIG9ubHkgdmlzaWJsZSBub2RlcyBpbnRvIGFjY291bnQuXG4gICAgICAgIC5maWx0ZXIoKGVkZ2UpOiBib29sZWFuID0+IG5vZGVzLmhhcyhlZGdlLnRvSWQpKVxuICAgICAgICAvLyBDaGVjayB0aGF0IGFsbCBlZGdlcyBsZWFkIHRvIHRoaXMgbm9kZSAobGVhZikuXG4gICAgICAgIC5ldmVyeSgoZWRnZSk6IGJvb2xlYW4gPT4gZWRnZS50byA9PT0gbm9kZSksXG4gICAgLy8gVXNlIHRoZSBsb3dlc3QgbGV2ZWwuXG4gICAgKG5ld0xldmVsLCBvbGRMZXZlbCk6IGJvb2xlYW4gPT4gb2xkTGV2ZWwgPiBuZXdMZXZlbCxcbiAgICAvLyBHbyBhZ2FpbnN0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGVkZ2VzLlxuICAgIFwiZnJvbVwiLFxuICAgIG5vZGVzXG4gICk7XG59XG5cbi8qKlxuICogQXNzaWduIGxldmVscyB0byBub2RlcyBhY2NvcmRpbmcgdG8gdGhlaXIgcG9zaXRpb25zIGluIHRoZSBoaWVyYXJjaHkuIFJvb3RzIHdpbGwgYmUgbGluZWQgdXAgYXQgdGhlIHRvcCBhbmQgYWxsIG5vZGVzIGFzIGNsb3NlIHRvIHRoZWlyIHBhcmVudHMgYXMgcG9zc2libGUuXG4gKlxuICogQHBhcmFtIG5vZGVzIC0gVmlzaWJsZSBub2RlcyBvZiB0aGUgZ3JhcGguXG4gKiBAcmV0dXJucyBQb3B1bGF0ZWQgbm9kZSBsZXZlbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25Sb290cyhub2RlczogTWFwPElkLCBOb2RlPik6IExldmVscyB7XG4gIHJldHVybiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb24oXG4gICAgLy8gUGljayBvbmx5IHJvb3RzIChub2RlcyB3aXRob3V0IHBhcmVudHMpLlxuICAgIChub2RlKTogYm9vbGVhbiA9PlxuICAgICAgbm9kZS5lZGdlc1xuICAgICAgICAvLyBUYWtlIG9ubHkgdmlzaWJsZSBub2RlcyBpbnRvIGFjY291bnQuXG4gICAgICAgIC5maWx0ZXIoKGVkZ2UpOiBib29sZWFuID0+IG5vZGVzLmhhcyhlZGdlLnRvSWQpKVxuICAgICAgICAvLyBDaGVjayB0aGF0IGFsbCBlZGdlcyBsZWFkIGZyb20gdGhpcyBub2RlIChyb290KS5cbiAgICAgICAgLmV2ZXJ5KChlZGdlKTogYm9vbGVhbiA9PiBlZGdlLmZyb20gPT09IG5vZGUpLFxuICAgIC8vIFVzZSB0aGUgaGlnaGVzdCBsZXZlbC5cbiAgICAobmV3TGV2ZWwsIG9sZExldmVsKTogYm9vbGVhbiA9PiBvbGRMZXZlbCA8IG5ld0xldmVsLFxuICAgIC8vIEdvIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGVkZ2VzLlxuICAgIFwidG9cIixcbiAgICBub2Rlc1xuICApO1xufVxuXG4vKipcbiAqIEFzc2lnbiBsZXZlbHMgdG8gbm9kZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9ucyBpbiB0aGUgaGllcmFyY2h5LlxuICpcbiAqIEBwYXJhbSBpc0VudHJ5Tm9kZSAtIENoZWNrcyBhbmQgcmV0dXJuIHRydWUgaWYgdGhlIGdyYXBoIHNob3VsZCBiZSB0cmF2ZXJzZWQgZnJvbSB0aGlzIG5vZGUuXG4gKiBAcGFyYW0gc2hvdWxkTGV2ZWxCZVJlcGxhY2VkIC0gQ2hlY2tzIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIGxldmVsIG9mIGdpdmVuIG5vZGUgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdGhlIG5ldyB2YWx1ZS5cbiAqIEBwYXJhbSBkaXJlY3Rpb24gLSBXaGV0ZXIgdGhlIGdyYXBoIHNob3VsZCBiZSB0cmF2ZXJzZWQgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgZWRnZXMgYFwidG9cImAgb3IgaW4gdGhlIG90aGVyIHdheSBgXCJmcm9tXCJgLlxuICogQHBhcmFtIG5vZGVzIC0gVmlzaWJsZSBub2RlcyBvZiB0aGUgZ3JhcGguXG4gKiBAcmV0dXJucyBQb3B1bGF0ZWQgbm9kZSBsZXZlbHMuXG4gKi9cbmZ1bmN0aW9uIGZpbGxMZXZlbHNCeURpcmVjdGlvbihcbiAgaXNFbnRyeU5vZGU6IChub2RlOiBOb2RlKSA9PiBib29sZWFuLFxuICBzaG91bGRMZXZlbEJlUmVwbGFjZWQ6IChuZXdMZXZlbDogbnVtYmVyLCBvbGRMZXZlbDogbnVtYmVyKSA9PiBib29sZWFuLFxuICBkaXJlY3Rpb246IFwidG9cIiB8IFwiZnJvbVwiLFxuICBub2RlczogTWFwPElkLCBOb2RlPlxuKTogTGV2ZWxzIHtcbiAgY29uc3QgbGV2ZWxzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvLyBJZiBhY3ljbGljLCB0aGUgZ3JhcGggY2FuIGJlIHdhbGtlZCB0aHJvdWdoIHdpdGggKG1vc3QgbGlrZWx5IHdheSkgZmV3ZXJcbiAgLy8gc3RlcHMgdGhhbiB0aGUgbnVtYmVyIGJlbGxvdy4gVGhlIGV4YWN0IHZhbHVlIGlzbid0IHRvbyBpbXBvcnRhbnQgYXMgbG9uZ1xuICAvLyBhcyBpdCdzIHF1aWNrIHRvIGNvbXB1dGUgKGRvZXNuJ3QgaW1wYWN0IGFjeWNsaWMgZ3JhcGhzIHRvbyBtdWNoKSwgaXNcbiAgLy8gaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZiBzdGVwcyBhY3R1YWxseSBuZWVkZWQgKGRvZXNuJ3QgY3V0IG9mZiBiZWZvcmVcbiAgLy8gYWN5Y2xpYyBncmFwaCBpcyB3YWxrZWQgdGhyb3VnaCkgYW5kIHByZXZlbnRzIGluZmluaXRlIGxvb3BzIChjdXRzIG9mZiBmb3JcbiAgLy8gY3ljbGljIGdyYXBocykuXG4gIGNvbnN0IGxpbWl0ID0gWy4uLm5vZGVzLnZhbHVlcygpXS5yZWR1Y2U8bnVtYmVyPihcbiAgICAoYWNjLCBub2RlKTogbnVtYmVyID0+IGFjYyArIDEgKyBub2RlLmVkZ2VzLmxlbmd0aCxcbiAgICAwXG4gICk7XG5cbiAgY29uc3QgZWRnZUlkUHJvcDogXCJmcm9tSWRcIiB8IFwidG9JZFwiID0gKGRpcmVjdGlvbiArIFwiSWRcIikgYXMgXCJmcm9tSWRcIiB8IFwidG9JZFwiO1xuICBjb25zdCBuZXdMZXZlbERpZmYgPSBkaXJlY3Rpb24gPT09IFwidG9cIiA/IDEgOiAtMTtcblxuICBmb3IgKGNvbnN0IFtlbnRyeU5vZGVJZCwgZW50cnlOb2RlXSBvZiBub2Rlcykge1xuICAgIGlmIChcbiAgICAgIC8vIFNraXAgaWYgdGhlIG5vZGUgaXMgbm90IHZpc2libGUuXG4gICAgICAhbm9kZXMuaGFzKGVudHJ5Tm9kZUlkKSB8fFxuICAgICAgLy8gU2tpcCBpZiB0aGUgbm9kZSBpcyBub3QgYW4gZW50cnkgbm9kZS5cbiAgICAgICFpc0VudHJ5Tm9kZShlbnRyeU5vZGUpXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBMaW5lIHVwIGFsbCB0aGUgZW50cnkgbm9kZXMgb24gbGV2ZWwgMC5cbiAgICBsZXZlbHNbZW50cnlOb2RlSWRdID0gMDtcblxuICAgIGNvbnN0IHN0YWNrOiBOb2RlW10gPSBbZW50cnlOb2RlXTtcbiAgICBsZXQgZG9uZSA9IDA7XG4gICAgbGV0IG5vZGU6IE5vZGUgfCB1bmRlZmluZWQ7XG4gICAgd2hpbGUgKChub2RlID0gc3RhY2sucG9wKCkpKSB7XG4gICAgICBpZiAoIW5vZGVzLmhhcyhlbnRyeU5vZGVJZCkpIHtcbiAgICAgICAgLy8gU2tpcCBpZiB0aGUgbm9kZSBpcyBub3QgdmlzaWJsZS5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0xldmVsID0gbGV2ZWxzW25vZGUuaWRdICsgbmV3TGV2ZWxEaWZmO1xuXG4gICAgICBub2RlLmVkZ2VzXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGVkZ2UpOiBib29sZWFuID0+XG4gICAgICAgICAgICAvLyBJZ25vcmUgZGlzY29ubmVjdGVkIGVkZ2VzLlxuICAgICAgICAgICAgZWRnZS5jb25uZWN0ZWQgJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBjaXJjdWxhciBlZGdlcy5cbiAgICAgICAgICAgIGVkZ2UudG8gIT09IGVkZ2UuZnJvbSAmJlxuICAgICAgICAgICAgLy8gSWdub3JlIGVkZ2VzIGxlYWRpbmcgdG8gdGhlIG5vZGUgdGhhdCdzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuXG4gICAgICAgICAgICBlZGdlW2RpcmVjdGlvbl0gIT09IG5vZGUgJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBlZGdlcyBjb25uZWN0aW5nIHRvIGFuIGludmlzaWJsZSBub2RlLlxuICAgICAgICAgICAgbm9kZXMuaGFzKGVkZ2UudG9JZCkgJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBlZGdlcyBjb25uZWN0aW5nIGZyb20gYW4gaW52aXNpYmxlIG5vZGUuXG4gICAgICAgICAgICBub2Rlcy5oYXMoZWRnZS5mcm9tSWQpXG4gICAgICAgIClcbiAgICAgICAgLmZvckVhY2goKGVkZ2UpOiB2b2lkID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXROb2RlSWQgPSBlZGdlW2VkZ2VJZFByb3BdO1xuICAgICAgICAgIGNvbnN0IG9sZExldmVsID0gbGV2ZWxzW3RhcmdldE5vZGVJZF07XG5cbiAgICAgICAgICBpZiAob2xkTGV2ZWwgPT0gbnVsbCB8fCBzaG91bGRMZXZlbEJlUmVwbGFjZWQobmV3TGV2ZWwsIG9sZExldmVsKSkge1xuICAgICAgICAgICAgbGV2ZWxzW3RhcmdldE5vZGVJZF0gPSBuZXdMZXZlbDtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goZWRnZVtkaXJlY3Rpb25dKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAoZG9uZSA+IGxpbWl0KSB7XG4gICAgICAgIC8vIFRoaXMgd291bGQgcnVuIGZvcmV2ZXIgb24gYSBjeWNsaWMgZ3JhcGguXG4gICAgICAgIHJldHVybiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25DeWNsaWMobm9kZXMsIGxldmVscyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICArK2RvbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxldmVscztcbn1cbiIsICIvKipcbiAqIFRoZXJlJ3MgYSBtaXgtdXAgd2l0aCB0ZXJtcyBpbiB0aGUgY29kZS4gRm9sbG93aW5nIGFyZSB0aGUgZm9ybWFsIGRlZmluaXRpb25zOlxuICpcbiAqICAgdHJlZSAgIC0gYSBzdHJpY3QgaGllcmFyY2hpY2FsIG5ldHdvcmssIGkuZS4gZXZlcnkgbm9kZSBoYXMgYXQgbW9zdCBvbmUgcGFyZW50XG4gKiAgIGZvcmVzdCAtIGEgY29sbGVjdGlvbiBvZiB0cmVlcy4gVGhlc2UgZGlzdGluY3QgdHJlZXMgYXJlIHRodXMgbm90IGNvbm5lY3RlZC5cbiAqXG4gKiBTbzpcbiAqIC0gaW4gYSBuZXR3b3JrIHRoYXQgaXMgbm90IGEgdHJlZSwgdGhlcmUgZXhpc3Qgbm9kZXMgd2l0aCBtdWx0aXBsZSBwYXJlbnRzLlxuICogLSBhIG5ldHdvcmsgY29uc2lzdGluZyBvZiB1bmNvbm5lY3RlZCBzdWItbmV0d29ya3MsIG9mIHdoaWNoIGF0IGxlYXN0IG9uZVxuICogICBpcyBub3QgYSB0cmVlLCBpcyBub3QgYSBmb3Jlc3QuXG4gKlxuICogSW4gdGhlIGNvZGUsIHRoZSBkZWZpbml0aW9ucyBhcmU6XG4gKlxuICogICB0cmVlICAgLSBhbnkgZGlzY29ubmVjdGVkIHN1Yi1uZXR3b3JrLCBzdHJpY3QgaGllcmFyY2hpY2FsIG9yIG5vdC5cbiAqICAgZm9yZXN0IC0gYSBidW5jaCBvZiB0aGVzZSBzdWItbmV0d29ya3NcbiAqXG4gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRyZWUgYW5kIG5vdC10cmVlIGlzIGltcG9ydGFudCBpbiB0aGUgY29kZSwgbm90YWJseSB3aXRoaW5cbiAqIHRvIHRoZSBibG9jay1zaGlmdGluZyBhbGdvcml0aG0uIFRoZSBhbGdvcml0aG0gYXNzdW1lcyBmb3JtYWwgdHJlZXMgYW5kIGZhaWxzXG4gKiBmb3Igbm90LXRyZWVzLCBvZnRlbiBpbiBhIHNwZWN0YWN1bGFyIG1hbm5lciAoc2VhcmNoIGZvciAnZXhwbG9kaW5nIG5ldHdvcmsnIGluIHRoZSBpc3N1ZXMpLlxuICpcbiAqIEluIG9yZGVyIHRvIGRpc3Rpbmd1aXNoIHRoZSBkZWZpbml0aW9ucyBpbiB0aGUgZm9sbG93aW5nIGNvZGUsIHRoZSBhZGplY3RpdmUgJ2Zvcm1hbCcgaXNcbiAqIHVzZWQuIElmICdmb3JtYWwnIGlzIGFic2VudCwgeW91IG11c3QgYXNzdW1lIHRoZSBub24tZm9ybWFsIGRlZmluaXRpb24uXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogTk9URVNcbiAqID09PT09XG4gKlxuICogQSBoaWVyYXJjaGljYWwgbGF5b3V0IGlzIGEgZGlmZmVyZW50IHRoaW5nIGZyb20gYSBoaWVyYXJjaGljYWwgbmV0d29yay5cbiAqIFRoZSBsYXlvdXQgaXMgYSB3YXkgdG8gYXJyYW5nZSB0aGUgbm9kZXMgaW4gdGhlIHZpZXc7IHRoaXMgY2FuIGJlIGRvbmVcbiAqIG9uIG5vbi1oaWVyYXJjaGljYWwgbmV0d29ya3MgYXMgd2VsbC4gVGhlIGNvbnZlcnNlIGlzIGFsc28gcG9zc2libGUuXG4gKi9cblwidXNlIHN0cmljdFwiO1xuaW1wb3J0IHtcbiAgQWxlYSxcbiAgZGVlcEV4dGVuZCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2VPcHRpb25zLFxuICBzZWxlY3RpdmVEZWVwRXh0ZW5kLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgTmV0d29ya1V0aWwgZnJvbSBcIi4uL05ldHdvcmtVdGlsXCI7XG5pbXBvcnQge1xuICBIb3Jpem9udGFsU3RyYXRlZ3ksXG4gIFZlcnRpY2FsU3RyYXRlZ3ksXG59IGZyb20gXCIuL2NvbXBvbmVudHMvRGlyZWN0aW9uU3RyYXRlZ3kuanNcIjtcbmltcG9ydCB7XG4gIGZpbGxMZXZlbHNCeURpcmVjdGlvbkxlYXZlcyxcbiAgZmlsbExldmVsc0J5RGlyZWN0aW9uUm9vdHMsXG59IGZyb20gXCIuL2xheW91dC1lbmdpbmVcIjtcblxuLyoqXG4gKiBDb250YWluZXIgZm9yIGRlcml2ZWQgZGF0YSBvbiBjdXJyZW50IG5ldHdvcmssIHJlbGF0aW5nIHRvIGhpZXJhcmNoeS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBIaWVyYXJjaGljYWxTdGF0dXMge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jaGlsZHJlblJlZmVyZW5jZSA9IHt9OyAvLyBjaGlsZCBpZCdzIHBlciBub2RlIGlkXG4gICAgdGhpcy5wYXJlbnRSZWZlcmVuY2UgPSB7fTsgLy8gcGFyZW50IGlkJ3MgcGVyIG5vZGUgaWRcbiAgICB0aGlzLnRyZWVzID0ge307IC8vIHRyZWUgaWQgcGVyIG5vZGUgaWQ7IGkuZS4gdG8gd2hpY2ggdHJlZSBkb2VzIGdpdmVuIG5vZGUgaWQgYmVsb25nXG5cbiAgICB0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nID0ge307IC8vIFRoZSBub2RlcyBwZXIgbGV2ZWwsIGluIHRoZSBkaXNwbGF5IG9yZGVyXG4gICAgdGhpcy5sZXZlbHMgPSB7fTsgLy8gaGllcmFyY2h5IGxldmVsIHBlciBub2RlIGlkXG4gICAgdGhpcy5kaXN0cmlidXRpb25JbmRleCA9IHt9OyAvLyBUaGUgcG9zaXRpb24gb2YgdGhlIG5vZGUgaW4gdGhlIGxldmVsIHNvcnRpbmcgb3JkZXIsIHBlciBub2RlIGlkLlxuXG4gICAgdGhpcy5pc1RyZWUgPSBmYWxzZTsgLy8gVHJ1ZSBpZiBjdXJyZW50IG5ldHdvcmsgaXMgYSBmb3JtYWwgdHJlZVxuICAgIHRoaXMudHJlZUluZGV4ID0gLTE7IC8vIEhpZ2hlc3QgdHJlZSBpZCBpbiBjdXJyZW50IG5ldHdvcmsuXG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSByZWxhdGlvbiBiZXR3ZWVuIGdpdmVuIG5vZGVzIHRvIHRoZSBjdXJyZW50IHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IHBhcmVudE5vZGVJZFxuICAgKiBAcGFyYW0ge05vZGUuaWR9IGNoaWxkTm9kZUlkXG4gICAqL1xuICBhZGRSZWxhdGlvbihwYXJlbnROb2RlSWQsIGNoaWxkTm9kZUlkKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW5SZWZlcmVuY2VbcGFyZW50Tm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoaWxkcmVuUmVmZXJlbmNlW3BhcmVudE5vZGVJZF0gPSBbXTtcbiAgICB9XG4gICAgdGhpcy5jaGlsZHJlblJlZmVyZW5jZVtwYXJlbnROb2RlSWRdLnB1c2goY2hpbGROb2RlSWQpO1xuXG4gICAgaWYgKHRoaXMucGFyZW50UmVmZXJlbmNlW2NoaWxkTm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBhcmVudFJlZmVyZW5jZVtjaGlsZE5vZGVJZF0gPSBbXTtcbiAgICB9XG4gICAgdGhpcy5wYXJlbnRSZWZlcmVuY2VbY2hpbGROb2RlSWRdLnB1c2gocGFyZW50Tm9kZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBmb3IgYSBmb3JtYWwgdHJlZSBvciBmb3JtYWwgZm9yZXN0LlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBjYXNlIGlmIGV2ZXJ5IG5vZGUgaGFzIGF0IG1vc3Qgb25lIHBhcmVudC5cbiAgICpcbiAgICogUHJlOiBwYXJlbnRSZWZlcmVuY2UgaW5pdCdlZCBwcm9wZXJseSBmb3IgY3VycmVudCBuZXR3b3JrXG4gICAqL1xuICBjaGVja0lmVHJlZSgpIHtcbiAgICBmb3IgKGNvbnN0IGkgaW4gdGhpcy5wYXJlbnRSZWZlcmVuY2UpIHtcbiAgICAgIGlmICh0aGlzLnBhcmVudFJlZmVyZW5jZVtpXS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMuaXNUcmVlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmlzVHJlZSA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VwYXJhdGUgdHJlZXMgaW4gdGhlIGN1cnJlbnQgbmV0d29yay5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIG51bVRyZWVzKCkge1xuICAgIHJldHVybiB0aGlzLnRyZWVJbmRleCArIDE7IC8vIFRoaXMgYXNzdW1lcyB0aGUgaW5kZXhlcyBhcmUgYXNzaWduZWQgY29uc2VjaXRpdmVseVxuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIHRyZWUgaWQgdG8gYSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHRyZWVJZFxuICAgKi9cbiAgc2V0VHJlZUluZGV4KG5vZGUsIHRyZWVJZCkge1xuICAgIGlmICh0cmVlSWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuOyAvLyBEb24ndCBib3RoZXJcblxuICAgIGlmICh0aGlzLnRyZWVzW25vZGUuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudHJlZXNbbm9kZS5pZF0gPSB0cmVlSWQ7XG4gICAgICB0aGlzLnRyZWVJbmRleCA9IE1hdGgubWF4KHRyZWVJZCwgdGhpcy50cmVlSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgbGV2ZWwgZm9yIGdpdmVuIGlkIGlzIGRlZmluZWQuXG4gICAqXG4gICAqIFNldHMgbGV2ZWwgdG8gemVybyBmb3IgZ2l2ZW4gbm9kZSBpZCBpZiBub3QgYWxyZWFkeSBwcmVzZW50XG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqL1xuICBlbnN1cmVMZXZlbChub2RlSWQpIHtcbiAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxldmVsc1tub2RlSWRdID0gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBtYXhpbXVtIGxldmVsIG9mIGEgYnJhbmNoLlxuICAgKlxuICAgKiBUT0RPOiBOZXZlciBlbnRlcmVkOyBmaW5kIGEgdGVzdCBjYXNlIHRvIHRlc3QgdGhpcyFcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldE1heExldmVsKG5vZGVJZCkge1xuICAgIGNvbnN0IGFjY3VtdWxhdG9yID0ge307XG5cbiAgICBjb25zdCBfZ2V0TWF4TGV2ZWwgPSAobm9kZUlkKSA9PiB7XG4gICAgICBpZiAoYWNjdW11bGF0b3Jbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcltub2RlSWRdO1xuICAgICAgfVxuICAgICAgbGV0IGxldmVsID0gdGhpcy5sZXZlbHNbbm9kZUlkXTtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuUmVmZXJlbmNlW25vZGVJZF0pIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuUmVmZXJlbmNlW25vZGVJZF07XG4gICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV2ZWwgPSBNYXRoLm1heChsZXZlbCwgX2dldE1heExldmVsKGNoaWxkcmVuW2ldKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhY2N1bXVsYXRvcltub2RlSWRdID0gbGV2ZWw7XG4gICAgICByZXR1cm4gbGV2ZWw7XG4gICAgfTtcblxuICAgIHJldHVybiBfZ2V0TWF4TGV2ZWwobm9kZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVBXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZUJcbiAgICovXG4gIGxldmVsRG93bnN0cmVhbShub2RlQSwgbm9kZUIpIHtcbiAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUIuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHNldCBpbml0aWFsIGxldmVsXG4gICAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUEuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5sZXZlbHNbbm9kZUEuaWRdID0gMDtcbiAgICAgIH1cbiAgICAgIC8vIHNldCBsZXZlbFxuICAgICAgdGhpcy5sZXZlbHNbbm9kZUIuaWRdID0gdGhpcy5sZXZlbHNbbm9kZUEuaWRdICsgMTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU21hbGwgdXRpbCBtZXRob2QgdG8gc2V0IHRoZSBtaW5pbXVtIGxldmVscyBvZiB0aGUgbm9kZXMgdG8gemVyby5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzXG4gICAqL1xuICBzZXRNaW5MZXZlbFRvWmVybyhub2Rlcykge1xuICAgIGxldCBtaW5MZXZlbCA9IDFlOTtcbiAgICAvLyBnZXQgdGhlIG1pbmltdW0gbGV2ZWxcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbWluTGV2ZWwgPSBNYXRoLm1pbih0aGlzLmxldmVsc1tub2RlSWRdLCBtaW5MZXZlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzdWJ0cmFjdCB0aGUgbWluaW11bSBmcm9tIHRoZSBzZXQgc28gd2UgaGF2ZSBhIHJhbmdlIHN0YXJ0aW5nIGZyb20gMFxuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIGlmICh0aGlzLmxldmVsc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmxldmVsc1tub2RlSWRdIC09IG1pbkxldmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWluIGFuZCBtYXggeHktY29vcmRpbmF0ZXMgb2YgYSBnaXZlbiB0cmVlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBub2Rlc1xuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICogQHJldHVybnMge3ttaW5feDogbnVtYmVyLCBtYXhfeDogbnVtYmVyLCBtaW5feTogbnVtYmVyLCBtYXhfeTogbnVtYmVyfX1cbiAgICovXG4gIGdldFRyZWVTaXplKG5vZGVzLCBpbmRleCkge1xuICAgIGxldCBtaW5feCA9IDFlOTtcbiAgICBsZXQgbWF4X3ggPSAtMWU5O1xuICAgIGxldCBtaW5feSA9IDFlOTtcbiAgICBsZXQgbWF4X3kgPSAtMWU5O1xuXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy50cmVlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnRyZWVzLCBub2RlSWQpKSB7XG4gICAgICAgIGlmICh0aGlzLnRyZWVzW25vZGVJZF0gPT09IGluZGV4KSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW25vZGVJZF07XG4gICAgICAgICAgbWluX3ggPSBNYXRoLm1pbihub2RlLngsIG1pbl94KTtcbiAgICAgICAgICBtYXhfeCA9IE1hdGgubWF4KG5vZGUueCwgbWF4X3gpO1xuICAgICAgICAgIG1pbl95ID0gTWF0aC5taW4obm9kZS55LCBtaW5feSk7XG4gICAgICAgICAgbWF4X3kgPSBNYXRoLm1heChub2RlLnksIG1heF95KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtaW5feDogbWluX3gsXG4gICAgICBtYXhfeDogbWF4X3gsXG4gICAgICBtaW5feTogbWluX3ksXG4gICAgICBtYXhfeTogbWF4X3ksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gbm9kZXMgaGF2ZSB0aGUgc2FtZSBwYXJlbnQocylcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlMVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSB0d28gbm9kZXMgaGF2ZSBhIHNhbWUgYW5jZXN0b3Igbm9kZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBoYXNTYW1lUGFyZW50KG5vZGUxLCBub2RlMikge1xuICAgIGNvbnN0IHBhcmVudHMxID0gdGhpcy5wYXJlbnRSZWZlcmVuY2Vbbm9kZTEuaWRdO1xuICAgIGNvbnN0IHBhcmVudHMyID0gdGhpcy5wYXJlbnRSZWZlcmVuY2Vbbm9kZTIuaWRdO1xuICAgIGlmIChwYXJlbnRzMSA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudHMyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudHMxLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhcmVudHMyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChwYXJlbnRzMVtpXSA9PSBwYXJlbnRzMltqXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gbm9kZXMgYXJlIGluIHRoZSBzYW1lIHRyZWUuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZTFcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlMlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGlzIGlzIHNvLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGluU2FtZVN1Yk5ldHdvcmsobm9kZTEsIG5vZGUyKSB7XG4gICAgcmV0dXJuIHRoaXMudHJlZXNbbm9kZTEuaWRdID09PSB0aGlzLnRyZWVzW25vZGUyLmlkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBsaXN0IG9mIHRoZSBkaXN0aW5jdCBsZXZlbHMgaW4gdGhlIGN1cnJlbnQgbmV0d29ya1xuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBnZXRMZXZlbHMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5vZGUgdG8gdGhlIG9yZGVyaW5nIHBlciBsZXZlbFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXG4gICAqL1xuICBhZGRUb09yZGVyaW5nKG5vZGUsIGxldmVsKSB7XG4gICAgaWYgKHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdID0gW107XG4gICAgfVxuXG4gICAgbGV0IGlzUHJlc2VudCA9IGZhbHNlO1xuICAgIGNvbnN0IGN1ckxldmVsID0gdGhpcy5kaXN0cmlidXRpb25PcmRlcmluZ1tsZXZlbF07XG4gICAgZm9yIChjb25zdCBuIGluIGN1ckxldmVsKSB7XG4gICAgICAvL2lmIChjdXJMZXZlbFtuXS5pZCA9PT0gbm9kZS5pZCkge1xuICAgICAgaWYgKGN1ckxldmVsW25dID09PSBub2RlKSB7XG4gICAgICAgIGlzUHJlc2VudCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNQcmVzZW50KSB7XG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXS5wdXNoKG5vZGUpO1xuICAgICAgdGhpcy5kaXN0cmlidXRpb25JbmRleFtub2RlLmlkXSA9XG4gICAgICAgIHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdLmxlbmd0aCAtIDE7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhlIExheW91dCBFbmdpbmVcbiAqL1xuY2xhc3MgTGF5b3V0RW5naW5lIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5KSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhbHdheXMgaXMgc29tZSBSTkcgYmVjYXVzZSB0aGUgc2V0T3B0aW9ucyBtZXRob2Qgd29uJ3RcbiAgICAvLyBzZXQgaXQgdW5sZXNzIHRoZXJlJ3MgYSBzZWVkIGZvciBpdC5cbiAgICB0aGlzLl9yZXNldFJORyhNYXRoLnJhbmRvbSgpICsgXCI6XCIgKyBEYXRlLm5vdygpKTtcblxuICAgIHRoaXMuc2V0UGh5c2ljcyA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMub3B0aW9uc0JhY2t1cCA9IHsgcGh5c2ljczoge30gfTtcblxuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICByYW5kb21TZWVkOiB1bmRlZmluZWQsXG4gICAgICBpbXByb3ZlZExheW91dDogdHJ1ZSxcbiAgICAgIGNsdXN0ZXJUaHJlc2hvbGQ6IDE1MCxcbiAgICAgIGhpZXJhcmNoaWNhbDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbGV2ZWxTZXBhcmF0aW9uOiAxNTAsXG4gICAgICAgIG5vZGVTcGFjaW5nOiAxMDAsXG4gICAgICAgIHRyZWVTcGFjaW5nOiAyMDAsXG4gICAgICAgIGJsb2NrU2hpZnRpbmc6IHRydWUsXG4gICAgICAgIGVkZ2VNaW5pbWl6YXRpb246IHRydWUsXG4gICAgICAgIHBhcmVudENlbnRyYWxpemF0aW9uOiB0cnVlLFxuICAgICAgICBkaXJlY3Rpb246IFwiVURcIiwgLy8gVUQsIERVLCBMUiwgUkxcbiAgICAgICAgc29ydE1ldGhvZDogXCJodWJzaXplXCIsIC8vIGh1YnNpemUsIGRpcmVjdGVkXG4gICAgICB9LFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YUNoYW5nZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zZXR1cEhpZXJhcmNoaWNhbExheW91dCgpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFMb2FkZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXROZXR3b3JrKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfcmVzZXRIaWVyYXJjaGljYWxMYXlvdXRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zZXR1cEhpZXJhcmNoaWNhbExheW91dCgpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2FkanVzdEVkZ2VzRm9ySGllcmFyY2hpY2FsTGF5b3V0XCIsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmVuYWJsZWQgIT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IHRoZSB0eXBlIG9mIHN0YXRpYyBzbW9vdGggY3VydmUgaW4gY2FzZSBpdCBpcyByZXF1aXJlZFxuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZGlyZWN0aW9uLmN1cnZlVHlwZSgpO1xuXG4gICAgICAvLyBmb3JjZSBhbGwgZWRnZXMgaW50byBzdGF0aWMgc21vb3RoIGN1cnZlcy5cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZm9yY2VEaXNhYmxlRHluYW1pY0N1cnZlc1wiLCB0eXBlLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGFsbE9wdGlvbnNcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucywgYWxsT3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGhpZXJhcmNoaWNhbCA9IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWw7XG4gICAgICBjb25zdCBwcmV2SGllcmFyY2hpY2FsU3RhdGUgPSBoaWVyYXJjaGljYWwuZW5hYmxlZDtcbiAgICAgIHNlbGVjdGl2ZURlZXBFeHRlbmQoXG4gICAgICAgIFtcInJhbmRvbVNlZWRcIiwgXCJpbXByb3ZlZExheW91dFwiLCBcImNsdXN0ZXJUaHJlc2hvbGRcIl0sXG4gICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICAgIG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG9wdGlvbnMsIFwiaGllcmFyY2hpY2FsXCIpO1xuXG4gICAgICBpZiAob3B0aW9ucy5yYW5kb21TZWVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fcmVzZXRSTkcob3B0aW9ucy5yYW5kb21TZWVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhpZXJhcmNoaWNhbC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChwcmV2SGllcmFyY2hpY2FsU3RhdGUgPT09IHRydWUpIHtcbiAgICAgICAgICAvLyByZWZyZXNoIHRoZSBvdmVycmlkZGVuIG9wdGlvbnMgZm9yIG5vZGVzIGFuZCBlZGdlcy5cbiAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVmcmVzaFwiLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgbGV2ZWwgc2VwYXJhdGlvbiBpcyB0aGUgcmlnaHQgd2F5IHVwXG4gICAgICAgIGlmIChcbiAgICAgICAgICBoaWVyYXJjaGljYWwuZGlyZWN0aW9uID09PSBcIlJMXCIgfHxcbiAgICAgICAgICBoaWVyYXJjaGljYWwuZGlyZWN0aW9uID09PSBcIkRVXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gPiAwKSB7XG4gICAgICAgICAgICBoaWVyYXJjaGljYWwubGV2ZWxTZXBhcmF0aW9uICo9IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbiA8IDApIHtcbiAgICAgICAgICAgIGhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gKj0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXREaXJlY3Rpb25TdHJhdGVneSgpO1xuXG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVzZXRIaWVyYXJjaGljYWxMYXlvdXRcIik7XG4gICAgICAgIC8vIGJlY2F1c2UgdGhlIGhpZXJhcmNoaWNhbCBzeXN0ZW0gbmVlZHMgaXQncyBvd24gcGh5c2ljcyBhbmQgc21vb3RoIGN1cnZlIHNldHRpbmdzLFxuICAgICAgICAvLyB3ZSBhZGFwdCB0aGUgb3RoZXIgb3B0aW9ucyBpZiBuZWVkZWQuXG4gICAgICAgIHJldHVybiB0aGlzLmFkYXB0QWxsT3B0aW9uc0ZvckhpZXJhcmNoaWNhbExheW91dChhbGxPcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcmV2SGllcmFyY2hpY2FsU3RhdGUgPT09IHRydWUpIHtcbiAgICAgICAgICAvLyByZWZyZXNoIHRoZSBvdmVycmlkZGVuIG9wdGlvbnMgZm9yIG5vZGVzIGFuZCBlZGdlcy5cbiAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVmcmVzaFwiKTtcbiAgICAgICAgICByZXR1cm4gZGVlcEV4dGVuZChhbGxPcHRpb25zLCB0aGlzLm9wdGlvbnNCYWNrdXApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhbGxPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aXRoIGdpdmVuIHNlZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBzZWVkIC0gVGhlIHNlZWQgdGhhdCB3aWxsIGJlIGZvcndhcmRlZCB0aGUgdGhlIFJORy5cbiAgICovXG4gIF9yZXNldFJORyhzZWVkKSB7XG4gICAgdGhpcy5pbml0aWFsUmFuZG9tU2VlZCA9IHNlZWQ7XG4gICAgdGhpcy5fcm5nID0gQWxlYSh0aGlzLmluaXRpYWxSYW5kb21TZWVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYWxsT3B0aW9uc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgYWRhcHRBbGxPcHRpb25zRm9ySGllcmFyY2hpY2FsTGF5b3V0KGFsbE9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBiYWNrdXBQaHlzaWNzID0gdGhpcy5vcHRpb25zQmFja3VwLnBoeXNpY3M7XG5cbiAgICAgIC8vIHNldCB0aGUgcGh5c2ljc1xuICAgICAgaWYgKGFsbE9wdGlvbnMucGh5c2ljcyA9PT0gdW5kZWZpbmVkIHx8IGFsbE9wdGlvbnMucGh5c2ljcyA9PT0gdHJ1ZSkge1xuICAgICAgICBhbGxPcHRpb25zLnBoeXNpY3MgPSB7XG4gICAgICAgICAgZW5hYmxlZDpcbiAgICAgICAgICAgIGJhY2t1cFBoeXNpY3MuZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGJhY2t1cFBoeXNpY3MuZW5hYmxlZCxcbiAgICAgICAgICBzb2x2ZXI6IFwiaGllcmFyY2hpY2FsUmVwdWxzaW9uXCIsXG4gICAgICAgIH07XG4gICAgICAgIGJhY2t1cFBoeXNpY3MuZW5hYmxlZCA9XG4gICAgICAgICAgYmFja3VwUGh5c2ljcy5lbmFibGVkID09PSB1bmRlZmluZWQgPyB0cnVlIDogYmFja3VwUGh5c2ljcy5lbmFibGVkO1xuICAgICAgICBiYWNrdXBQaHlzaWNzLnNvbHZlciA9IGJhY2t1cFBoeXNpY3Muc29sdmVyIHx8IFwiYmFybmVzSHV0XCI7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhbGxPcHRpb25zLnBoeXNpY3MgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgYmFja3VwUGh5c2ljcy5lbmFibGVkID1cbiAgICAgICAgICBhbGxPcHRpb25zLnBoeXNpY3MuZW5hYmxlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgIDogYWxsT3B0aW9ucy5waHlzaWNzLmVuYWJsZWQ7XG4gICAgICAgIGJhY2t1cFBoeXNpY3Muc29sdmVyID0gYWxsT3B0aW9ucy5waHlzaWNzLnNvbHZlciB8fCBcImJhcm5lc0h1dFwiO1xuICAgICAgICBhbGxPcHRpb25zLnBoeXNpY3Muc29sdmVyID0gXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIjtcbiAgICAgIH0gZWxzZSBpZiAoYWxsT3B0aW9ucy5waHlzaWNzICE9PSBmYWxzZSkge1xuICAgICAgICBiYWNrdXBQaHlzaWNzLnNvbHZlciA9IFwiYmFybmVzSHV0XCI7XG4gICAgICAgIGFsbE9wdGlvbnMucGh5c2ljcyA9IHsgc29sdmVyOiBcImhpZXJhcmNoaWNhbFJlcHVsc2lvblwiIH07XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCB0aGUgdHlwZSBvZiBzdGF0aWMgc21vb3RoIGN1cnZlIGluIGNhc2UgaXQgaXMgcmVxdWlyZWRcbiAgICAgIGxldCB0eXBlID0gdGhpcy5kaXJlY3Rpb24uY3VydmVUeXBlKCk7XG5cbiAgICAgIC8vIGRpc2FibGUgc21vb3RoIGN1cnZlcyBpZiBub3RoaW5nIGlzIGRlZmluZWQuIElmIHNtb290aCBjdXJ2ZXMgaGF2ZSBiZWVuIHR1cm5lZCBvbixcbiAgICAgIC8vIHR1cm4gdGhlbSBpbnRvIHN0YXRpYyBzbW9vdGggY3VydmVzLlxuICAgICAgaWYgKGFsbE9wdGlvbnMuZWRnZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNCYWNrdXAuZWRnZXMgPSB7XG4gICAgICAgICAgc21vb3RoOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IFwiZHluYW1pY1wiIH0sXG4gICAgICAgIH07XG4gICAgICAgIGFsbE9wdGlvbnMuZWRnZXMgPSB7IHNtb290aDogZmFsc2UgfTtcbiAgICAgIH0gZWxzZSBpZiAoYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNCYWNrdXAuZWRnZXMgPSB7XG4gICAgICAgICAgc21vb3RoOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IFwiZHluYW1pY1wiIH0sXG4gICAgICAgIH07XG4gICAgICAgIGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0JhY2t1cC5lZGdlcyA9IHsgc21vb3RoOiBhbGxPcHRpb25zLmVkZ2VzLnNtb290aCB9O1xuICAgICAgICAgIGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID0ge1xuICAgICAgICAgICAgZW5hYmxlZDogYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGgsXG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc21vb3RoID0gYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGg7XG5cbiAgICAgICAgICAvLyBhbGxvdyBjdXN0b20gdHlwZXMgZXhjZXB0IGZvciBkeW5hbWljXG4gICAgICAgICAgaWYgKHNtb290aC50eXBlICE9PSB1bmRlZmluZWQgJiYgc21vb3RoLnR5cGUgIT09IFwiZHluYW1pY1wiKSB7XG4gICAgICAgICAgICB0eXBlID0gc21vb3RoLnR5cGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVE9ETzogdGhpcyBpcyBvcHRpb25zIG1lcmdpbmc7IHNlZSBpZiB0aGUgc3RhbmRhcmQgcm91dGluZXMgY2FuIGJlIHVzZWQgaGVyZS5cbiAgICAgICAgICB0aGlzLm9wdGlvbnNCYWNrdXAuZWRnZXMgPSB7XG4gICAgICAgICAgICBzbW9vdGg6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogc21vb3RoLmVuYWJsZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBzbW9vdGguZW5hYmxlZCxcbiAgICAgICAgICAgICAgdHlwZTogc21vb3RoLnR5cGUgPT09IHVuZGVmaW5lZCA/IFwiZHluYW1pY1wiIDogc21vb3RoLnR5cGUsXG4gICAgICAgICAgICAgIHJvdW5kbmVzczpcbiAgICAgICAgICAgICAgICBzbW9vdGgucm91bmRuZXNzID09PSB1bmRlZmluZWQgPyAwLjUgOiBzbW9vdGgucm91bmRuZXNzLFxuICAgICAgICAgICAgICBmb3JjZURpcmVjdGlvbjpcbiAgICAgICAgICAgICAgICBzbW9vdGguZm9yY2VEaXJlY3Rpb24gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgICAgOiBzbW9vdGguZm9yY2VEaXJlY3Rpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICAvLyBOT1RFOiBDb3B5aW5nIGFuIG9iamVjdCB0byBzZWxmOyB0aGlzIGlzIGJhc2ljYWxseSBzZXR0aW5nIGRlZmF1bHRzIGZvciB1bmRlZmluZWQgdmFyaWFibGVzXG4gICAgICAgICAgYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGggPSB7XG4gICAgICAgICAgICBlbmFibGVkOiBzbW9vdGguZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHNtb290aC5lbmFibGVkLFxuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIHJvdW5kbmVzczogc21vb3RoLnJvdW5kbmVzcyA9PT0gdW5kZWZpbmVkID8gMC41IDogc21vb3RoLnJvdW5kbmVzcyxcbiAgICAgICAgICAgIGZvcmNlRGlyZWN0aW9uOlxuICAgICAgICAgICAgICBzbW9vdGguZm9yY2VEaXJlY3Rpb24gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6IHNtb290aC5mb3JjZURpcmVjdGlvbixcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEZvcmNlIGFsbCBlZGdlcyBpbnRvIHN0YXRpYyBzbW9vdGggY3VydmVzLlxuICAgICAgLy8gT25seSBhcHBsaWVzIHRvIGVkZ2VzIHRoYXQgZG8gbm90IHVzZSB0aGUgZ2xvYmFsIG9wdGlvbnMgZm9yIHNtb290aC5cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZm9yY2VEaXNhYmxlRHluYW1pY0N1cnZlc1wiLCB0eXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWxsT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gbm9kZXNBcnJheVxuICAgKi9cbiAgcG9zaXRpb25Jbml0aWFsbHkobm9kZXNBcnJheSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmVuYWJsZWQgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuX3Jlc2V0Uk5HKHRoaXMuaW5pdGlhbFJhbmRvbVNlZWQpO1xuICAgICAgY29uc3QgcmFkaXVzID0gbm9kZXNBcnJheS5sZW5ndGggKyA1MDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBub2RlID0gbm9kZXNBcnJheVtpXTtcbiAgICAgICAgY29uc3QgYW5nbGUgPSAyICogTWF0aC5QSSAqIHRoaXMuX3JuZygpO1xuICAgICAgICBpZiAobm9kZS54ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub2RlLnggPSByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUueSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbm9kZS55ID0gcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBLYW1hZGEgS2F3YWkgdG8gcG9zaXRpb24gbm9kZXMuIFRoaXMgaXMgcXVpdGUgYSBoZWF2eSBhbGdvcml0aG0gc28gaWYgdGhlcmUgYXJlIGEgbG90IG9mIG5vZGVzIHdlXG4gICAqIGNsdXN0ZXIgdGhlbSBmaXJzdCB0byByZWR1Y2UgdGhlIGFtb3VudC5cbiAgICovXG4gIGxheW91dE5ldHdvcmsoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lbmFibGVkICE9PSB0cnVlICYmXG4gICAgICB0aGlzLm9wdGlvbnMuaW1wcm92ZWRMYXlvdXQgPT09IHRydWVcbiAgICApIHtcbiAgICAgIGNvbnN0IGluZGljZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG5cbiAgICAgIC8vIGZpcnN0IGNoZWNrIGlmIHdlIHNob3VsZCBLYW1hZGEgS2F3YWkgdG8gbGF5b3V0LiBUaGUgdGhyZXNob2xkIGlzIGlmIGxlc3MgdGhhbiBoYWxmIG9mIHRoZSB2aXNpYmxlXG4gICAgICAvLyBub2RlcyBoYXZlIHByZWRlZmluZWQgcG9zaXRpb25zIHdlIHVzZSB0aGlzLlxuICAgICAgbGV0IHBvc2l0aW9uRGVmaW5lZCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpbmRpY2VzW2ldXTtcbiAgICAgICAgaWYgKG5vZGUucHJlZGVmaW5lZFBvc2l0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgcG9zaXRpb25EZWZpbmVkICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gaWYgbGVzcyB0aGFuIGhhbGYgb2YgdGhlIG5vZGVzIGhhdmUgYSBwcmVkZWZpbmVkIHBvc2l0aW9uIHdlIGNvbnRpbnVlXG4gICAgICBpZiAocG9zaXRpb25EZWZpbmVkIDwgMC41ICogaW5kaWNlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgTUFYX0xFVkVMUyA9IDEwO1xuICAgICAgICBsZXQgbGV2ZWwgPSAwO1xuICAgICAgICBjb25zdCBjbHVzdGVyVGhyZXNob2xkID0gdGhpcy5vcHRpb25zLmNsdXN0ZXJUaHJlc2hvbGQ7XG5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gRGVmaW5lIHRoZSBvcHRpb25zIGZvciB0aGUgaGlkZGVuIGNsdXN0ZXIgbm9kZXNcbiAgICAgICAgLy8gVGhlc2Ugb3B0aW9ucyBkb24ndCBwcm9wYWdhdGUgb3V0c2lkZSB0aGUgY2x1c3RlcmluZyBwaGFzZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gU29tZSBvcHRpb25zIGFyZSBleHBsaWNpdGx5IGRpc2FibGVkLCBiZWNhdXNlIHRoZXkgbWF5IGJlIHNldCBpbiBncm91cCBvciBkZWZhdWx0IG5vZGUgb3B0aW9ucy5cbiAgICAgICAgLy8gVGhlIGNsdXN0ZXJzIGFyZSBuZXZlciBkaXNwbGF5ZWQsIHNvIG1vc3QgZXhwbGljaXQgc2V0dGluZ3MgaGVyZSBzZXJ2ZSBhcyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGUgZXhwbGljaXQgc2V0dGluZyBvZiAnc2hhcGUnIGlzIHRvIGF2b2lkIGBzaGFwZTogJ2ltYWdlJ2A7IGltYWdlcyBhcmUgbm90IHBhc3NlZCB0byB0aGUgaGlkZGVuXG4gICAgICAgIC8vIGNsdXN0ZXIgbm9kZXMsIGxlYWRpbmcgdG8gYW4gZXhjZXB0aW9uIG9uIGNyZWF0aW9uLlxuICAgICAgICAvL1xuICAgICAgICAvLyBBbGwgc2V0dGluZ3MgaGVyZSBhcmUgcGVyZm9ybWFuY2UgcmVsYXRlZCwgZXhjZXB0IHdoZW4gbm90ZWQgb3RoZXJ3aXNlLlxuICAgICAgICAvL1xuICAgICAgICBjb25zdCBjbHVzdGVyT3B0aW9ucyA9IHtcbiAgICAgICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNoYXBlOiBcImVsbGlwc2VcIiwgLy8gQnVnZml4OiBhdm9pZCB0eXBlICdpbWFnZScsIG5vIGltYWdlcyBzdXBwbGllZFxuICAgICAgICAgICAgbGFiZWw6IFwiXCIsIC8vIGF2b2lkIGxhYmVsIGhhbmRsaW5nXG4gICAgICAgICAgICBncm91cDogXCJcIiwgLy8gYXZvaWQgZ3JvdXAgaGFuZGxpbmdcbiAgICAgICAgICAgIGZvbnQ6IHsgbXVsdGk6IGZhbHNlIH0sIC8vIGF2b2lkIGZvbnQgcHJvcGFnYXRpb25cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFiZWw6IFwiXCIsIC8vIGF2b2lkIGxhYmVsIGhhbmRsaW5nXG4gICAgICAgICAgICBmb250OiB7IG11bHRpOiBmYWxzZSB9LCAvLyBhdm9pZCBmb250IHByb3BhZ2F0aW9uXG4gICAgICAgICAgICBzbW9vdGg6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsIC8vIGF2b2lkIGRyYXdpbmcgcGVuYWx0eSBmb3IgY29tcGxleCBlZGdlc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSBhIGxvdCBvZiBub2Rlcywgd2UgY2x1c3RlciBiZWZvcmUgd2UgcnVuIHRoZSBhbGdvcml0aG0uXG4gICAgICAgIC8vIE5PVEU6IHRoaXMgcGFydCBmYWlscyB0byBmaW5kIGNsdXN0ZXJzIGZvciBsYXJnZSBzY2FsZS1mcmVlIG5ldHdvcmtzLCB3aGljaCBzaG91bGRcbiAgICAgICAgLy8gICAgICAgYmUgZWFzaWx5IGNsdXN0ZXJhYmxlLlxuICAgICAgICAvLyBUT0RPOiBleGFtaW5lIHdoeSB0aGlzIGlzIHNvXG4gICAgICAgIGlmIChpbmRpY2VzLmxlbmd0aCA+IGNsdXN0ZXJUaHJlc2hvbGQpIHtcbiAgICAgICAgICBjb25zdCBzdGFydExlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpbmRpY2VzLmxlbmd0aCA+IGNsdXN0ZXJUaHJlc2hvbGQgJiYgbGV2ZWwgPD0gTUFYX0xFVkVMUykge1xuICAgICAgICAgICAgLy9jb25zb2xlLnRpbWUoXCJjbHVzdGVyaW5nXCIpXG4gICAgICAgICAgICBsZXZlbCArPSAxO1xuICAgICAgICAgICAgY29uc3QgYmVmb3JlID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUgbWFueSBub2RlcyB3ZSBkbyBhIGh1YnNpemUgY2x1c3RlclxuICAgICAgICAgICAgaWYgKGxldmVsICUgMyA9PT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLmJvZHkubW9kdWxlcy5jbHVzdGVyaW5nLmNsdXN0ZXJCcmlkZ2VzKGNsdXN0ZXJPcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuYm9keS5tb2R1bGVzLmNsdXN0ZXJpbmcuY2x1c3Rlck91dGxpZXJzKGNsdXN0ZXJPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFmdGVyID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoYmVmb3JlID09IGFmdGVyICYmIGxldmVsICUgMyAhPT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLl9kZWNsdXN0ZXJBbGwoKTtcbiAgICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9sYXlvdXRGYWlsZWRcIik7XG4gICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgICAgICBcIlRoaXMgbmV0d29yayBjb3VsZCBub3QgYmUgcG9zaXRpb25lZCBieSB0aGlzIHZlcnNpb24gb2YgdGhlIGltcHJvdmVkIGxheW91dCBhbGdvcml0aG0uXCIgK1xuICAgICAgICAgICAgICAgICAgXCIgUGxlYXNlIGRpc2FibGUgaW1wcm92ZWRMYXlvdXQgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NvbnNvbGUudGltZUVuZChcImNsdXN0ZXJpbmdcIilcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYmVmb3JlLGxldmVsLGFmdGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGVkZ2VzXG4gICAgICAgICAgdGhpcy5ib2R5Lm1vZHVsZXMua2FtYWRhS2F3YWkuc2V0T3B0aW9ucyh7XG4gICAgICAgICAgICBzcHJpbmdMZW5ndGg6IE1hdGgubWF4KDE1MCwgMiAqIHN0YXJ0TGVuZ3RoKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGV2ZWwgPiBNQVhfTEVWRUxTKSB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgXCJUaGUgY2x1c3RlcmluZyBkaWRuJ3Qgc3VjY2VlZCB3aXRoaW4gdGhlIGFtb3VudCBvZiBpbnRlcmF0aW9ucyBhbGxvd2VkLFwiICtcbiAgICAgICAgICAgICAgXCIgcHJvZ3Jlc3Npbmcgd2l0aCBwYXJ0aWFsIHJlc3VsdC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwb3NpdGlvbiB0aGUgc3lzdGVtIGZvciB0aGVzZSBub2RlcyBhbmQgZWRnZXNcbiAgICAgICAgdGhpcy5ib2R5Lm1vZHVsZXMua2FtYWRhS2F3YWkuc29sdmUoXG4gICAgICAgICAgaW5kaWNlcyxcbiAgICAgICAgICB0aGlzLmJvZHkuZWRnZUluZGljZXMsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHNoaWZ0IHRvIGNlbnRlciBwb2ludFxuICAgICAgICB0aGlzLl9zaGlmdFRvQ2VudGVyKCk7XG5cbiAgICAgICAgLy8gcGVydHVyYiB0aGUgbm9kZXMgYSBsaXR0bGUgYml0IHRvIGZvcmNlIHRoZSBwaHlzaWNzIHRvIGtpY2sgaW5cbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gNzA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIC8vIE9ubHkgcGVydHVyYiB0aGUgbm9kZXMgdGhhdCBhcmVuJ3QgZml4ZWRcbiAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW2luZGljZXNbaV1dO1xuICAgICAgICAgIGlmIChub2RlLnByZWRlZmluZWRQb3NpdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG5vZGUueCArPSAoMC41IC0gdGhpcy5fcm5nKCkpICogb2Zmc2V0O1xuICAgICAgICAgICAgbm9kZS55ICs9ICgwLjUgLSB0aGlzLl9ybmcoKSkgKiBvZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW5jbHVzdGVyIGFsbCBjbHVzdGVyc1xuICAgICAgICB0aGlzLl9kZWNsdXN0ZXJBbGwoKTtcblxuICAgICAgICAvLyByZXBvc2l0aW9uIGFsbCBiZXppZXIgbm9kZXMuXG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVwb3NpdGlvbkJlemllck5vZGVzXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIGFsbCB0aGUgbm9kZXMgdG93YXJkcyB0byB0aGUgY2VudGVyIHNvIGdyYXZpdGF0aW9uYWwgcHVsbCB3aWwgbm90IG1vdmUgdGhlIG5vZGVzIGF3YXkgZnJvbSB2aWV3XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hpZnRUb0NlbnRlcigpIHtcbiAgICBjb25zdCByYW5nZSA9IE5ldHdvcmtVdGlsLmdldFJhbmdlQ29yZShcbiAgICAgIHRoaXMuYm9keS5ub2RlcyxcbiAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlc1xuICAgICk7XG4gICAgY29uc3QgY2VudGVyID0gTmV0d29ya1V0aWwuZmluZENlbnRlcihyYW5nZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldXTtcbiAgICAgIG5vZGUueCAtPSBjZW50ZXIueDtcbiAgICAgIG5vZGUueSAtPSBjZW50ZXIueTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kcyBhbGwgY2x1c3RlcnNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZWNsdXN0ZXJBbGwoKSB7XG4gICAgbGV0IGNsdXN0ZXJzUHJlc2VudCA9IHRydWU7XG4gICAgd2hpbGUgKGNsdXN0ZXJzUHJlc2VudCA9PT0gdHJ1ZSkge1xuICAgICAgY2x1c3RlcnNQcmVzZW50ID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV0uaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgY2x1c3RlcnNQcmVzZW50ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmJvZHkubW9kdWxlcy5jbHVzdGVyaW5nLm9wZW5DbHVzdGVyKFxuICAgICAgICAgICAgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjbHVzdGVyc1ByZXNlbnQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcnwqfVxuICAgKi9cbiAgZ2V0U2VlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsUmFuZG9tU2VlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIHRvIGxheW91dCB0aGUgbm9kZXMgaW4gYSBoaWVyYXJjaGljYWwgd2F5LlxuICAgKiBJdCBjaGVja3MgaWYgdGhlIG5vZGUgZGV0YWlscyBhcmUgc3VwcGxpZWQgY29ycmVjdGx5XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXR1cEhpZXJhcmNoaWNhbExheW91dCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICAvLyBnZXQgdGhlIHNpemUgb2YgdGhlIGxhcmdlc3QgaHVicyBhbmQgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIGRlZmluZWQgYSBsZXZlbCBmb3IgYSBub2RlLlxuICAgICAgbGV0IG5vZGUsIG5vZGVJZDtcbiAgICAgIGxldCBkZWZpbmVkTGV2ZWwgPSBmYWxzZTtcbiAgICAgIGxldCB1bmRlZmluZWRMZXZlbCA9IGZhbHNlO1xuICAgICAgdGhpcy5sYXN0Tm9kZU9uTGV2ZWwgPSB7fTtcbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsID0gbmV3IEhpZXJhcmNoaWNhbFN0YXR1cygpO1xuXG4gICAgICBmb3IgKG5vZGVJZCBpbiB0aGlzLmJvZHkubm9kZXMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkubm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgICAgaWYgKG5vZGUub3B0aW9ucy5sZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkZWZpbmVkTGV2ZWwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW25vZGVJZF0gPSBub2RlLm9wdGlvbnMubGV2ZWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuZGVmaW5lZExldmVsID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIHVzZXIgZGVmaW5lZCBzb21lIGxldmVscyBidXQgbm90IGFsbCwgYWxlcnQgYW5kIHJ1biB3aXRob3V0IGhpZXJhcmNoaWNhbCBsYXlvdXRcbiAgICAgIGlmICh1bmRlZmluZWRMZXZlbCA9PT0gdHJ1ZSAmJiBkZWZpbmVkTGV2ZWwgPT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVG8gdXNlIHRoZSBoaWVyYXJjaGljYWwgbGF5b3V0LCBub2RlcyByZXF1aXJlIGVpdGhlciBubyBwcmVkZWZpbmVkIGxldmVsc1wiICtcbiAgICAgICAgICAgIFwiIG9yIGxldmVscyBoYXZlIHRvIGJlIGRlZmluZWQgZm9yIGFsbCBub2Rlcy5cIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmaW5lIGxldmVscyBpZiB1bmRlZmluZWQgYnkgdGhlIHVzZXJzLiBCYXNlZCBvbiBodWJzaXplLlxuICAgICAgICBpZiAodW5kZWZpbmVkTGV2ZWwgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBzb3J0TWV0aG9kID0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5zb3J0TWV0aG9kO1xuICAgICAgICAgIGlmIChzb3J0TWV0aG9kID09PSBcImh1YnNpemVcIikge1xuICAgICAgICAgICAgdGhpcy5fZGV0ZXJtaW5lTGV2ZWxzQnlIdWJzaXplKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzb3J0TWV0aG9kID09PSBcImRpcmVjdGVkXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RldGVybWluZUxldmVsc0RpcmVjdGVkKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzb3J0TWV0aG9kID09PSBcImN1c3RvbVwiKSB7XG4gICAgICAgICAgICB0aGlzLl9kZXRlcm1pbmVMZXZlbHNDdXN0b21DYWxsYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZhbGxiYWNrIGZvciBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgbm9kZXMgYnV0IG5vIGVkZ2VzXG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5lbnN1cmVMZXZlbChub2RlSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBub2RlcyBwZXIgbGV2ZWwuXG4gICAgICAgIGNvbnN0IGRpc3RyaWJ1dGlvbiA9IHRoaXMuX2dldERpc3RyaWJ1dGlvbigpO1xuXG4gICAgICAgIC8vIGdldCB0aGUgcGFyZW50IGNoaWxkcmVuIHJlbGF0aW9ucy5cbiAgICAgICAgdGhpcy5fZ2VuZXJhdGVNYXAoKTtcblxuICAgICAgICAvLyBwbGFjZSB0aGUgbm9kZXMgb24gdGhlIGNhbnZhcy5cbiAgICAgICAgdGhpcy5fcGxhY2VOb2Rlc0J5SGllcmFyY2h5KGRpc3RyaWJ1dGlvbik7XG5cbiAgICAgICAgLy8gY29uZGVuc2UgdGhlIHdoaXRlc3BhY2UuXG4gICAgICAgIHRoaXMuX2NvbmRlbnNlSGllcmFyY2h5KCk7XG5cbiAgICAgICAgLy8gc2hpZnQgdG8gY2VudGVyIHNvIGdyYXZpdHkgZG9lcyBub3QgaGF2ZSB0byBkbyBtdWNoXG4gICAgICAgIHRoaXMuX3NoaWZ0VG9DZW50ZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb25kZW5zZUhpZXJhcmNoeSgpIHtcbiAgICAvLyBHbG9iYWwgdmFyIGluIHRoaXMgc2NvcGUgdG8gZGVmaW5lIHdoZW4gdGhlIG1vdmVtZW50IGhhcyBzdG9wcGVkLlxuICAgIGxldCBzdGlsbFNoaWZ0aW5nID0gZmFsc2U7XG4gICAgY29uc3QgYnJhbmNoZXMgPSB7fTtcbiAgICAvLyBmaXJzdCB3ZSBoYXZlIHNvbWUgbWV0aG9kcyB0byBoZWxwIHNoaWZ0aW5nIHRyZWVzIGFyb3VuZC5cbiAgICAvLyB0aGUgbWFpbiBtZXRob2QgdG8gc2hpZnQgdGhlIHRyZWVzXG4gICAgY29uc3Qgc2hpZnRUcmVlcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHRyZWVTaXplcyA9IGdldFRyZWVTaXplcygpO1xuICAgICAgbGV0IHNoaWZ0QnkgPSAwO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmVlU2l6ZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRpZmYgPSB0cmVlU2l6ZXNbaV0ubWF4IC0gdHJlZVNpemVzW2kgKyAxXS5taW47XG4gICAgICAgIHNoaWZ0QnkgKz0gZGlmZiArIHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwudHJlZVNwYWNpbmc7XG4gICAgICAgIHNoaWZ0VHJlZShpICsgMSwgc2hpZnRCeSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHNoaWZ0IGEgc2luZ2xlIHRyZWUgYnkgYW4gb2Zmc2V0XG4gICAgY29uc3Qgc2hpZnRUcmVlID0gKGluZGV4LCBvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IHRyZWVzID0gdGhpcy5oaWVyYXJjaGljYWwudHJlZXM7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRyZWVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodHJlZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBpZiAodHJlZXNbbm9kZUlkXSA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLnNoaWZ0KG5vZGVJZCwgb2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gZ2V0IHRoZSB3aWR0aCBvZiBhbGwgdHJlZXNcbiAgICBjb25zdCBnZXRUcmVlU2l6ZXMgPSAoKSA9PiB7XG4gICAgICBjb25zdCB0cmVlV2lkdGhzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaGllcmFyY2hpY2FsLm51bVRyZWVzKCk7IGkrKykge1xuICAgICAgICB0cmVlV2lkdGhzLnB1c2godGhpcy5kaXJlY3Rpb24uZ2V0VHJlZVNpemUoaSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyZWVXaWR0aHM7XG4gICAgfTtcblxuICAgIC8vIGdldCBhIG1hcCBvZiBhbGwgbm9kZXMgaW4gdGhpcyBicmFuY2hcbiAgICBjb25zdCBnZXRCcmFuY2hOb2RlcyA9IChzb3VyY2UsIG1hcCkgPT4ge1xuICAgICAgaWYgKG1hcFtzb3VyY2UuaWRdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG1hcFtzb3VyY2UuaWRdID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLmhpZXJhcmNoaWNhbC5jaGlsZHJlblJlZmVyZW5jZVtzb3VyY2UuaWRdKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5oaWVyYXJjaGljYWwuY2hpbGRyZW5SZWZlcmVuY2Vbc291cmNlLmlkXTtcbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBnZXRCcmFuY2hOb2Rlcyh0aGlzLmJvZHkubm9kZXNbY2hpbGRyZW5baV1dLCBtYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBnZXQgYSBtaW4gbWF4IHdpZHRoIGFzIHdlbGwgYXMgdGhlIG1heGltdW0gbW92ZW1lbnQgc3BhY2UgaXQgaGFzIG9uIGVpdGhlciBzaWRlc1xuICAgIC8vIHdlIHVzZSBtaW4gbWF4IHRlcm1pbm9sb2d5IGJlY2F1c2Ugd2lkdGggYW5kIGhlaWdodCBjYW4gaW50ZXJjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGxheW91dFxuICAgIGNvbnN0IGdldEJyYW5jaEJvdW5kYXJ5ID0gKGJyYW5jaE1hcCwgbWF4TGV2ZWwgPSAxZTkpID0+IHtcbiAgICAgIGxldCBtaW5TcGFjZSA9IDFlOTtcbiAgICAgIGxldCBtYXhTcGFjZSA9IDFlOTtcbiAgICAgIGxldCBtaW4gPSAxZTk7XG4gICAgICBsZXQgbWF4ID0gLTFlOTtcbiAgICAgIGZvciAoY29uc3QgYnJhbmNoTm9kZSBpbiBicmFuY2hNYXApIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChicmFuY2hNYXAsIGJyYW5jaE5vZGUpKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1ticmFuY2hOb2RlXTtcbiAgICAgICAgICBjb25zdCBsZXZlbCA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlLmlkXTtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuXG4gICAgICAgICAgLy8gZ2V0IHRoZSBzcGFjZSBhcm91bmQgdGhlIG5vZGUuXG4gICAgICAgICAgY29uc3QgW21pblNwYWNlTm9kZSwgbWF4U3BhY2VOb2RlXSA9IHRoaXMuX2dldFNwYWNlQXJvdW5kTm9kZShcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBicmFuY2hNYXBcbiAgICAgICAgICApO1xuICAgICAgICAgIG1pblNwYWNlID0gTWF0aC5taW4obWluU3BhY2VOb2RlLCBtaW5TcGFjZSk7XG4gICAgICAgICAgbWF4U3BhY2UgPSBNYXRoLm1pbihtYXhTcGFjZU5vZGUsIG1heFNwYWNlKTtcblxuICAgICAgICAgIC8vIHRoZSB3aWR0aCBpcyBvbmx5IHJlbGV2YW50IGZvciB0aGUgbGV2ZWxzIHR3byBub2RlcyBoYXZlIGluIGNvbW1vbi4gVGhpcyBpcyB3aHkgd2UgZmlsdGVyIG9uIHRoaXMuXG4gICAgICAgICAgaWYgKGxldmVsIDw9IG1heExldmVsKSB7XG4gICAgICAgICAgICBtaW4gPSBNYXRoLm1pbihwb3NpdGlvbiwgbWluKTtcbiAgICAgICAgICAgIG1heCA9IE1hdGgubWF4KHBvc2l0aW9uLCBtYXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gW21pbiwgbWF4LCBtaW5TcGFjZSwgbWF4U3BhY2VdO1xuICAgIH07XG5cbiAgICAvLyBjaGVjayB3aGF0IHRoZSBtYXhpbXVtIGxldmVsIGlzIHRoZXNlIG5vZGVzIGhhdmUgaW4gY29tbW9uLlxuICAgIGNvbnN0IGdldENvbGxpc2lvbkxldmVsID0gKG5vZGUxLCBub2RlMikgPT4ge1xuICAgICAgY29uc3QgbWF4TGV2ZWwxID0gdGhpcy5oaWVyYXJjaGljYWwuZ2V0TWF4TGV2ZWwobm9kZTEuaWQpO1xuICAgICAgY29uc3QgbWF4TGV2ZWwyID0gdGhpcy5oaWVyYXJjaGljYWwuZ2V0TWF4TGV2ZWwobm9kZTIuaWQpO1xuICAgICAgcmV0dXJuIE1hdGgubWluKG1heExldmVsMSwgbWF4TGV2ZWwyKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ29uZGVuc2UgZWxlbWVudHMuIFRoZXNlIGNhbiBiZSBub2RlcyBvciBicmFuY2hlcyBkZXBlbmRpbmcgb24gdGhlIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBsZXZlbHNcbiAgICAgKiBAcGFyYW0geyp9IGNlbnRlclBhcmVudHNcbiAgICAgKi9cbiAgICBjb25zdCBzaGlmdEVsZW1lbnRzQ2xvc2VyID0gKGNhbGxiYWNrLCBsZXZlbHMsIGNlbnRlclBhcmVudHMpID0+IHtcbiAgICAgIGNvbnN0IGhpZXIgPSB0aGlzLmhpZXJhcmNoaWNhbDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZXZlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbGV2ZWwgPSBsZXZlbHNbaV07XG4gICAgICAgIGNvbnN0IGxldmVsTm9kZXMgPSBoaWVyLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXTtcbiAgICAgICAgaWYgKGxldmVsTm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV2ZWxOb2Rlcy5sZW5ndGggLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUxID0gbGV2ZWxOb2Rlc1tqXTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUyID0gbGV2ZWxOb2Rlc1tqICsgMV07XG5cbiAgICAgICAgICAgIC8vIE5PVEU6IGxvZ2ljIG1haW50YWluZWQgYXMgaXQgd2FzOyBpZiBub2RlcyBoYXZlIHNhbWUgYW5jZXN0b3IsXG4gICAgICAgICAgICAvLyAgICAgICB0aGVuIG9mIGNvdXJzZSB0aGV5IGFyZSBpbiB0aGUgc2FtZSBzdWItbmV0d29yay5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaGllci5oYXNTYW1lUGFyZW50KG5vZGUxLCBub2RlMikgJiZcbiAgICAgICAgICAgICAgaGllci5pblNhbWVTdWJOZXR3b3JrKG5vZGUxLCBub2RlMilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjYWxsYmFjayhub2RlMSwgbm9kZTIsIGNlbnRlclBhcmVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBjYWxsYmFjayBmb3Igc2hpZnRpbmcgYnJhbmNoZXNcbiAgICBjb25zdCBicmFuY2hTaGlmdENhbGxiYWNrID0gKG5vZGUxLCBub2RlMiwgY2VudGVyUGFyZW50ID0gZmFsc2UpID0+IHtcbiAgICAgIC8vd2luZG93LkNBTExCQUNLUy5wdXNoKCgpID0+IHtcbiAgICAgIGNvbnN0IHBvczEgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihub2RlMSk7XG4gICAgICBjb25zdCBwb3MyID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24obm9kZTIpO1xuICAgICAgY29uc3QgZGlmZkFicyA9IE1hdGguYWJzKHBvczIgLSBwb3MxKTtcbiAgICAgIGNvbnN0IG5vZGVTcGFjaW5nID0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZztcbiAgICAgIC8vY29uc29sZS5sb2coXCJOT1cgQ0hFQ0tJTkc6XCIsIG5vZGUxLmlkLCBub2RlMi5pZCwgZGlmZkFicyk7XG4gICAgICBpZiAoZGlmZkFicyA+IG5vZGVTcGFjaW5nKSB7XG4gICAgICAgIGNvbnN0IGJyYW5jaE5vZGVzMSA9IHt9O1xuICAgICAgICBjb25zdCBicmFuY2hOb2RlczIgPSB7fTtcblxuICAgICAgICBnZXRCcmFuY2hOb2Rlcyhub2RlMSwgYnJhbmNoTm9kZXMxKTtcbiAgICAgICAgZ2V0QnJhbmNoTm9kZXMobm9kZTIsIGJyYW5jaE5vZGVzMik7XG5cbiAgICAgICAgLy8gY2hlY2sgdGhlIGxhcmdlc3QgZGlzdGFuY2UgYmV0d2VlbiB0aGUgYnJhbmNoZXNcbiAgICAgICAgY29uc3QgbWF4TGV2ZWwgPSBnZXRDb2xsaXNpb25MZXZlbChub2RlMSwgbm9kZTIpO1xuICAgICAgICBjb25zdCBicmFuY2hOb2RlQm91bmRhcnkxID0gZ2V0QnJhbmNoQm91bmRhcnkoYnJhbmNoTm9kZXMxLCBtYXhMZXZlbCk7XG4gICAgICAgIGNvbnN0IGJyYW5jaE5vZGVCb3VuZGFyeTIgPSBnZXRCcmFuY2hCb3VuZGFyeShicmFuY2hOb2RlczIsIG1heExldmVsKTtcbiAgICAgICAgY29uc3QgbWF4MSA9IGJyYW5jaE5vZGVCb3VuZGFyeTFbMV07XG4gICAgICAgIGNvbnN0IG1pbjIgPSBicmFuY2hOb2RlQm91bmRhcnkyWzBdO1xuICAgICAgICBjb25zdCBtaW5TcGFjZTIgPSBicmFuY2hOb2RlQm91bmRhcnkyWzJdO1xuXG4gICAgICAgIC8vY29uc29sZS5sb2cobm9kZTEuaWQsIGdldEJyYW5jaEJvdW5kYXJ5KGJyYW5jaE5vZGVzMSwgbWF4TGV2ZWwpLCBub2RlMi5pZCxcbiAgICAgICAgLy8gICAgICAgICAgICBnZXRCcmFuY2hCb3VuZGFyeShicmFuY2hOb2RlczIsIG1heExldmVsKSwgbWF4TGV2ZWwpO1xuICAgICAgICBjb25zdCBkaWZmQnJhbmNoID0gTWF0aC5hYnMobWF4MSAtIG1pbjIpO1xuICAgICAgICBpZiAoZGlmZkJyYW5jaCA+IG5vZGVTcGFjaW5nKSB7XG4gICAgICAgICAgbGV0IG9mZnNldCA9IG1heDEgLSBtaW4yICsgbm9kZVNwYWNpbmc7XG4gICAgICAgICAgaWYgKG9mZnNldCA8IC1taW5TcGFjZTIgKyBub2RlU3BhY2luZykge1xuICAgICAgICAgICAgb2Zmc2V0ID0gLW1pblNwYWNlMiArIG5vZGVTcGFjaW5nO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlJFU0VUVElORyBPRkZTRVRcIiwgbWF4MSAtIG1pbjIgKyB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nLCAtbWluU3BhY2UyLCBvZmZzZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlNISUZUSU5HXCIsIG5vZGUyLmlkLCBvZmZzZXQpO1xuICAgICAgICAgICAgdGhpcy5fc2hpZnRCbG9jayhub2RlMi5pZCwgb2Zmc2V0KTtcbiAgICAgICAgICAgIHN0aWxsU2hpZnRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoY2VudGVyUGFyZW50ID09PSB0cnVlKSB0aGlzLl9jZW50ZXJQYXJlbnQobm9kZTIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy90aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTt9KVxuICAgIH07XG5cbiAgICBjb25zdCBtaW5pbWl6ZUVkZ2VMZW5ndGggPSAoaXRlcmF0aW9ucywgbm9kZSkgPT4ge1xuICAgICAgLy93aW5kb3cuQ0FMTEJBQ0tTLnB1c2goKCkgPT4ge1xuICAgICAgLy8gIGNvbnNvbGUubG9nKFwidHNcIixub2RlLmlkKTtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IG5vZGUuaWQ7XG4gICAgICBjb25zdCBhbGxFZGdlcyA9IG5vZGUuZWRnZXM7XG4gICAgICBjb25zdCBub2RlTGV2ZWwgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZS5pZF07XG5cbiAgICAgIC8vIGdhdGhlciBjb25zdGFudHNcbiAgICAgIGNvbnN0IEMyID1cbiAgICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gKlxuICAgICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbjtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGVzID0ge307XG4gICAgICBjb25zdCBhYm92ZUVkZ2VzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbEVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBhbGxFZGdlc1tpXTtcbiAgICAgICAgaWYgKGVkZ2UudG9JZCAhPSBlZGdlLmZyb21JZCkge1xuICAgICAgICAgIGNvbnN0IG90aGVyTm9kZSA9IGVkZ2UudG9JZCA9PSBub2RlSWQgPyBlZGdlLmZyb20gOiBlZGdlLnRvO1xuICAgICAgICAgIHJlZmVyZW5jZU5vZGVzW2FsbEVkZ2VzW2ldLmlkXSA9IG90aGVyTm9kZTtcbiAgICAgICAgICBpZiAodGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW290aGVyTm9kZS5pZF0gPCBub2RlTGV2ZWwpIHtcbiAgICAgICAgICAgIGFib3ZlRWRnZXMucHVzaChlZGdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZGlmZmVyZW50aWF0ZWQgc3VtIG9mIGxlbmd0aHMgYmFzZWQgb24gb25seSBtb3Zpbmcgb25lIG5vZGUgb3ZlciBvbmUgYXhpc1xuICAgICAgY29uc3QgZ2V0RnggPSAocG9pbnQsIGVkZ2VzKSA9PiB7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlZmVyZW5jZU5vZGVzW2VkZ2VzW2ldLmlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBhID1cbiAgICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24ocmVmZXJlbmNlTm9kZXNbZWRnZXNbaV0uaWRdKSAtIHBvaW50O1xuICAgICAgICAgICAgc3VtICs9IGEgLyBNYXRoLnNxcnQoYSAqIGEgKyBDMik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgICB9O1xuXG4gICAgICAvLyBkb3VibHkgZGlmZmVyZW50aWF0ZWQgc3VtIG9mIGxlbmd0aHMgYmFzZWQgb24gb25seSBtb3Zpbmcgb25lIG5vZGUgb3ZlciBvbmUgYXhpc1xuICAgICAgY29uc3QgZ2V0REZ4ID0gKHBvaW50LCBlZGdlcykgPT4ge1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChyZWZlcmVuY2VOb2Rlc1tlZGdlc1tpXS5pZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgYSA9XG4gICAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKHJlZmVyZW5jZU5vZGVzW2VkZ2VzW2ldLmlkXSkgLSBwb2ludDtcbiAgICAgICAgICAgIHN1bSAtPSBDMiAqIE1hdGgucG93KGEgKiBhICsgQzIsIC0xLjUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VtO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZ2V0R3Vlc3MgPSAoaXRlcmF0aW9ucywgZWRnZXMpID0+IHtcbiAgICAgICAgbGV0IGd1ZXNzID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24obm9kZSk7XG4gICAgICAgIC8vIE5ld3RvbidzIG1ldGhvZCBmb3Igb3B0aW1pemF0aW9uXG4gICAgICAgIGNvbnN0IGd1ZXNzTWFwID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZnggPSBnZXRGeChndWVzcywgZWRnZXMpO1xuICAgICAgICAgIGNvbnN0IGRmeCA9IGdldERGeChndWVzcywgZWRnZXMpO1xuXG4gICAgICAgICAgLy8gd2UgbGltaXQgdGhlIG1vdmVtZW50IHRvIGF2b2lkIGluc3RhYmlsaXR5LlxuICAgICAgICAgIGNvbnN0IGxpbWl0ID0gNDA7XG4gICAgICAgICAgY29uc3QgcmF0aW8gPSBNYXRoLm1heCgtbGltaXQsIE1hdGgubWluKGxpbWl0LCBNYXRoLnJvdW5kKGZ4IC8gZGZ4KSkpO1xuICAgICAgICAgIGd1ZXNzID0gZ3Vlc3MgLSByYXRpbztcbiAgICAgICAgICAvLyByZWR1Y2UgZHVwbGljYXRlc1xuICAgICAgICAgIGlmIChndWVzc01hcFtndWVzc10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGd1ZXNzTWFwW2d1ZXNzXSA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGd1ZXNzO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgbW92ZUJyYW5jaCA9IChndWVzcykgPT4ge1xuICAgICAgICAvLyBwb3NpdGlvbiBub2RlIGlmIHRoZXJlIGlzIHNwYWNlXG4gICAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuXG4gICAgICAgIC8vIGNoZWNrIG1vdmFibGUgYXJlYSBvZiB0aGUgYnJhbmNoXG4gICAgICAgIGlmIChicmFuY2hlc1tub2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgYnJhbmNoTm9kZXMgPSB7fTtcbiAgICAgICAgICBnZXRCcmFuY2hOb2Rlcyhub2RlLCBicmFuY2hOb2Rlcyk7XG4gICAgICAgICAgYnJhbmNoZXNbbm9kZS5pZF0gPSBicmFuY2hOb2RlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBicmFuY2hCb3VuZGFyeSA9IGdldEJyYW5jaEJvdW5kYXJ5KGJyYW5jaGVzW25vZGUuaWRdKTtcbiAgICAgICAgY29uc3QgbWluU3BhY2VCcmFuY2ggPSBicmFuY2hCb3VuZGFyeVsyXTtcbiAgICAgICAgY29uc3QgbWF4U3BhY2VCcmFuY2ggPSBicmFuY2hCb3VuZGFyeVszXTtcblxuICAgICAgICBjb25zdCBkaWZmID0gZ3Vlc3MgLSBub2RlUG9zaXRpb247XG5cbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIGFsbG93ZWQgdG8gbW92ZSB0aGUgbm9kZTpcbiAgICAgICAgbGV0IGJyYW5jaE9mZnNldCA9IDA7XG4gICAgICAgIGlmIChkaWZmID4gMCkge1xuICAgICAgICAgIGJyYW5jaE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgICAgICAgZGlmZixcbiAgICAgICAgICAgIG1heFNwYWNlQnJhbmNoIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGlmZiA8IDApIHtcbiAgICAgICAgICBicmFuY2hPZmZzZXQgPSAtTWF0aC5taW4oXG4gICAgICAgICAgICAtZGlmZixcbiAgICAgICAgICAgIG1pblNwYWNlQnJhbmNoIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnJhbmNoT2Zmc2V0ICE9IDApIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwibW92aW5nIGJyYW5jaDpcIixicmFuY2hPZmZzZXQsIG1heFNwYWNlQnJhbmNoLCBtaW5TcGFjZUJyYW5jaClcbiAgICAgICAgICB0aGlzLl9zaGlmdEJsb2NrKG5vZGUuaWQsIGJyYW5jaE9mZnNldCk7XG4gICAgICAgICAgLy90aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgICAgICAgICBzdGlsbFNoaWZ0aW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW92ZU5vZGUgPSAoZ3Vlc3MpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZVBvc2l0aW9uID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24obm9kZSk7XG5cbiAgICAgICAgLy8gcG9zaXRpb24gbm9kZSBpZiB0aGVyZSBpcyBzcGFjZVxuICAgICAgICBjb25zdCBbbWluU3BhY2UsIG1heFNwYWNlXSA9IHRoaXMuX2dldFNwYWNlQXJvdW5kTm9kZShub2RlKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IGd1ZXNzIC0gbm9kZVBvc2l0aW9uO1xuICAgICAgICAvLyBjaGVjayBpZiB3ZSBhcmUgYWxsb3dlZCB0byBtb3ZlIHRoZSBub2RlOlxuICAgICAgICBsZXQgbmV3UG9zaXRpb24gPSBub2RlUG9zaXRpb247XG4gICAgICAgIGlmIChkaWZmID4gMCkge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gTWF0aC5taW4oXG4gICAgICAgICAgICBub2RlUG9zaXRpb24gKyAobWF4U3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKSxcbiAgICAgICAgICAgIGd1ZXNzXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChkaWZmIDwgMCkge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gTWF0aC5tYXgoXG4gICAgICAgICAgICBub2RlUG9zaXRpb24gLSAobWluU3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKSxcbiAgICAgICAgICAgIGd1ZXNzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdQb3NpdGlvbiAhPT0gbm9kZVBvc2l0aW9uKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIm1vdmluZyBOb2RlOlwiLGRpZmYsIG1pblNwYWNlLCBtYXhTcGFjZSk7XG4gICAgICAgICAgdGhpcy5kaXJlY3Rpb24uc2V0UG9zaXRpb24obm9kZSwgbmV3UG9zaXRpb24pO1xuICAgICAgICAgIC8vdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gICAgICAgICAgc3RpbGxTaGlmdGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGxldCBndWVzcyA9IGdldEd1ZXNzKGl0ZXJhdGlvbnMsIGFib3ZlRWRnZXMpO1xuICAgICAgbW92ZUJyYW5jaChndWVzcyk7XG4gICAgICBndWVzcyA9IGdldEd1ZXNzKGl0ZXJhdGlvbnMsIGFsbEVkZ2VzKTtcbiAgICAgIG1vdmVOb2RlKGd1ZXNzKTtcbiAgICAgIC8vfSlcbiAgICB9O1xuXG4gICAgLy8gbWV0aG9kIHRvIHJlbW92ZSB3aGl0ZXNwYWNlIGJldHdlZW4gYnJhbmNoZXMuIEJlY2F1c2Ugd2UgZG8gYm90dG9tIHVwLCB3ZSBjYW4gY2VudGVyIHRoZSBwYXJlbnRzLlxuICAgIGNvbnN0IG1pbmltaXplRWRnZUxlbmd0aEJvdHRvbVVwID0gKGl0ZXJhdGlvbnMpID0+IHtcbiAgICAgIGxldCBsZXZlbHMgPSB0aGlzLmhpZXJhcmNoaWNhbC5nZXRMZXZlbHMoKTtcbiAgICAgIGxldmVscyA9IGxldmVscy5yZXZlcnNlKCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICBzdGlsbFNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV2ZWxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY29uc3QgbGV2ZWwgPSBsZXZlbHNbal07XG4gICAgICAgICAgY29uc3QgbGV2ZWxOb2RlcyA9IHRoaXMuaGllcmFyY2hpY2FsLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXTtcbiAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxldmVsTm9kZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIG1pbmltaXplRWRnZUxlbmd0aCgxMDAwLCBsZXZlbE5vZGVzW2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0aWxsU2hpZnRpbmcgIT09IHRydWUpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiRklOSVNIRUQgbWluaW1pemVFZGdlTGVuZ3RoQm90dG9tVXAgSU4gXCIgKyBpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBtZXRob2QgdG8gcmVtb3ZlIHdoaXRlc3BhY2UgYmV0d2VlbiBicmFuY2hlcy4gQmVjYXVzZSB3ZSBkbyBib3R0b20gdXAsIHdlIGNhbiBjZW50ZXIgdGhlIHBhcmVudHMuXG4gICAgY29uc3Qgc2hpZnRCcmFuY2hlc0Nsb3NlckJvdHRvbVVwID0gKGl0ZXJhdGlvbnMpID0+IHtcbiAgICAgIGxldCBsZXZlbHMgPSB0aGlzLmhpZXJhcmNoaWNhbC5nZXRMZXZlbHMoKTtcbiAgICAgIGxldmVscyA9IGxldmVscy5yZXZlcnNlKCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICBzdGlsbFNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgIHNoaWZ0RWxlbWVudHNDbG9zZXIoYnJhbmNoU2hpZnRDYWxsYmFjaywgbGV2ZWxzLCB0cnVlKTtcbiAgICAgICAgaWYgKHN0aWxsU2hpZnRpbmcgIT09IHRydWUpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiRklOSVNIRUQgc2hpZnRCcmFuY2hlc0Nsb3NlckJvdHRvbVVwIElOIFwiICsgKGkrMSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGNlbnRlciBhbGwgcGFyZW50c1xuICAgIGNvbnN0IGNlbnRlckFsbFBhcmVudHMgPSAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0aGlzLmJvZHkubm9kZXMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkubm9kZXMsIG5vZGVJZCkpXG4gICAgICAgICAgdGhpcy5fY2VudGVyUGFyZW50KHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gY2VudGVyIGFsbCBwYXJlbnRzXG4gICAgY29uc3QgY2VudGVyQWxsUGFyZW50c0JvdHRvbVVwID0gKCkgPT4ge1xuICAgICAgbGV0IGxldmVscyA9IHRoaXMuaGllcmFyY2hpY2FsLmdldExldmVscygpO1xuICAgICAgbGV2ZWxzID0gbGV2ZWxzLnJldmVyc2UoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGV2ZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxldmVsID0gbGV2ZWxzW2ldO1xuICAgICAgICBjb25zdCBsZXZlbE5vZGVzID0gdGhpcy5oaWVyYXJjaGljYWwuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldmVsTm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB0aGlzLl9jZW50ZXJQYXJlbnQobGV2ZWxOb2Rlc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gdGhlIGFjdHVhbCB3b3JrIGlzIGRvbmUgaGVyZS5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ibG9ja1NoaWZ0aW5nID09PSB0cnVlKSB7XG4gICAgICBzaGlmdEJyYW5jaGVzQ2xvc2VyQm90dG9tVXAoNSk7XG4gICAgICBjZW50ZXJBbGxQYXJlbnRzKCk7XG4gICAgfVxuXG4gICAgLy8gbWluaW1pemUgZWRnZSBsZW5ndGhcbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lZGdlTWluaW1pemF0aW9uID09PSB0cnVlKSB7XG4gICAgICBtaW5pbWl6ZUVkZ2VMZW5ndGhCb3R0b21VcCgyMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwucGFyZW50Q2VudHJhbGl6YXRpb24gPT09IHRydWUpIHtcbiAgICAgIGNlbnRlckFsbFBhcmVudHNCb3R0b21VcCgpO1xuICAgIH1cblxuICAgIHNoaWZ0VHJlZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGdpdmVzIHRoZSBzcGFjZSBhcm91bmQgdGhlIG5vZGUuIElGIGEgbWFwIGlzIHN1cHBsaWVkLCBpdCB3aWxsIG9ubHkgY2hlY2sgYWdhaW5zdCBub2RlcyBOT1QgaW4gdGhlIG1hcC5cbiAgICogVGhpcyBpcyB1c2VkIHRvIG9ubHkgZ2V0IHRoZSBkaXN0YW5jZXMgdG8gbm9kZXMgb3V0c2lkZSBvZiBhIGJyYW5jaC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7e05vZGUuaWQ6IHZpcy5Ob2RlfX0gbWFwXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRTcGFjZUFyb3VuZE5vZGUobm9kZSwgbWFwKSB7XG4gICAgbGV0IHVzZU1hcCA9IHRydWU7XG4gICAgaWYgKG1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1c2VNYXAgPSBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbGV2ZWwgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZS5pZF07XG4gICAgaWYgKGxldmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5oaWVyYXJjaGljYWwuZGlzdHJpYnV0aW9uSW5kZXhbbm9kZS5pZF07XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuICAgICAgY29uc3Qgb3JkZXJpbmcgPSB0aGlzLmhpZXJhcmNoaWNhbC5kaXN0cmlidXRpb25PcmRlcmluZ1tsZXZlbF07XG4gICAgICBsZXQgbWluU3BhY2UgPSAxZTk7XG4gICAgICBsZXQgbWF4U3BhY2UgPSAxZTk7XG4gICAgICBpZiAoaW5kZXggIT09IDApIHtcbiAgICAgICAgY29uc3QgcHJldk5vZGUgPSBvcmRlcmluZ1tpbmRleCAtIDFdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHVzZU1hcCA9PT0gdHJ1ZSAmJiBtYXBbcHJldk5vZGUuaWRdID09PSB1bmRlZmluZWQpIHx8XG4gICAgICAgICAgdXNlTWFwID09PSBmYWxzZVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBwcmV2UG9zID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24ocHJldk5vZGUpO1xuICAgICAgICAgIG1pblNwYWNlID0gcG9zaXRpb24gLSBwcmV2UG9zO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleCAhPSBvcmRlcmluZy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGNvbnN0IG5leHROb2RlID0gb3JkZXJpbmdbaW5kZXggKyAxXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh1c2VNYXAgPT09IHRydWUgJiYgbWFwW25leHROb2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB8fFxuICAgICAgICAgIHVzZU1hcCA9PT0gZmFsc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgbmV4dFBvcyA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5leHROb2RlKTtcbiAgICAgICAgICBtYXhTcGFjZSA9IE1hdGgubWluKG1heFNwYWNlLCBuZXh0UG9zIC0gcG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbWluU3BhY2UsIG1heFNwYWNlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFswLCAwXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2UgdXNlIHRoaXMgbWV0aG9kIHRvIGNlbnRlciBhIHBhcmVudCBub2RlIGFuZCBjaGVjayBpZiBpdCBkb2VzIG5vdCBjcm9zcyBvdGhlciBub2RlcyB3aGVuIGl0IGRvZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NlbnRlclBhcmVudChub2RlKSB7XG4gICAgaWYgKHRoaXMuaGllcmFyY2hpY2FsLnBhcmVudFJlZmVyZW5jZVtub2RlLmlkXSkge1xuICAgICAgY29uc3QgcGFyZW50cyA9IHRoaXMuaGllcmFyY2hpY2FsLnBhcmVudFJlZmVyZW5jZVtub2RlLmlkXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHBhcmVudHNbaV07XG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbcGFyZW50SWRdO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuaGllcmFyY2hpY2FsLmNoaWxkcmVuUmVmZXJlbmNlW3BhcmVudElkXTtcblxuICAgICAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIGdldCB0aGUgcmFuZ2Ugb2YgdGhlIGNoaWxkcmVuXG4gICAgICAgICAgY29uc3QgbmV3UG9zaXRpb24gPSB0aGlzLl9nZXRDZW50ZXJQb3NpdGlvbihjaGlsZHJlbik7XG5cbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKHBhcmVudE5vZGUpO1xuICAgICAgICAgIGNvbnN0IFttaW5TcGFjZSwgbWF4U3BhY2VdID0gdGhpcy5fZ2V0U3BhY2VBcm91bmROb2RlKHBhcmVudE5vZGUpO1xuICAgICAgICAgIGNvbnN0IGRpZmYgPSBwb3NpdGlvbiAtIG5ld1Bvc2l0aW9uO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChkaWZmIDwgMCAmJlxuICAgICAgICAgICAgICBNYXRoLmFicyhkaWZmKSA8XG4gICAgICAgICAgICAgICAgbWF4U3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKSB8fFxuICAgICAgICAgICAgKGRpZmYgPiAwICYmXG4gICAgICAgICAgICAgIE1hdGguYWJzKGRpZmYpIDwgbWluU3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24uc2V0UG9zaXRpb24ocGFyZW50Tm9kZSwgbmV3UG9zaXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHBsYWNlcyB0aGUgbm9kZXMgb24gdGhlIGNhbnZhcyBiYXNlZCBvbiB0aGUgaGllcmFyY2hpYWwgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZGlzdHJpYnV0aW9uIHwgb2J0YWluZWQgYnkgdGhlIGZ1bmN0aW9uIHRoaXMuX2dldERpc3RyaWJ1dGlvbigpXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGxhY2VOb2Rlc0J5SGllcmFyY2h5KGRpc3RyaWJ1dGlvbikge1xuICAgIHRoaXMucG9zaXRpb25lZE5vZGVzID0ge307XG4gICAgLy8gc3RhcnQgcGxhY2luZyBhbGwgdGhlIGxldmVsIDAgbm9kZXMgZmlyc3QuIFRoZW4gcmVjdXJzaXZlbHkgcG9zaXRpb24gdGhlaXIgYnJhbmNoZXMuXG4gICAgZm9yIChjb25zdCBsZXZlbCBpbiBkaXN0cmlidXRpb24pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGlzdHJpYnV0aW9uLCBsZXZlbCkpIHtcbiAgICAgICAgLy8gc29ydCBub2RlcyBpbiBsZXZlbCBieSBwb3NpdGlvbjpcbiAgICAgICAgbGV0IG5vZGVBcnJheSA9IE9iamVjdC5rZXlzKGRpc3RyaWJ1dGlvbltsZXZlbF0pO1xuICAgICAgICBub2RlQXJyYXkgPSB0aGlzLl9pbmRleEFycmF5VG9Ob2Rlcyhub2RlQXJyYXkpO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbi5zb3J0KG5vZGVBcnJheSk7XG4gICAgICAgIGxldCBoYW5kbGVkTm9kZUNvdW50ID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2RlQXJyYXlbaV07XG4gICAgICAgICAgaWYgKHRoaXMucG9zaXRpb25lZE5vZGVzW25vZGUuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYWNpbmcgPSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nO1xuICAgICAgICAgICAgbGV0IHBvcyA9IHNwYWNpbmcgKiBoYW5kbGVkTm9kZUNvdW50O1xuICAgICAgICAgICAgLy8gV2UgZ2V0IHRoZSBYIG9yIFkgdmFsdWVzIHdlIG5lZWQgYW5kIHN0b3JlIHRoZW0gaW4gcG9zIGFuZCBwcmV2aW91c1Bvcy5cbiAgICAgICAgICAgIC8vIFRoZSBnZXQgYW5kIHNldCBtYWtlIHN1cmUgd2UgZ2V0IFggb3IgWVxuICAgICAgICAgICAgaWYgKGhhbmRsZWROb2RlQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgIHBvcyA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGVBcnJheVtpIC0gMV0pICsgc3BhY2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKG5vZGUsIHBvcywgbGV2ZWwpO1xuICAgICAgICAgICAgdGhpcy5fdmFsaWRhdGVQb3NpdGlvbkFuZENvbnRpbnVlKG5vZGUsIGxldmVsLCBwb3MpO1xuXG4gICAgICAgICAgICBoYW5kbGVkTm9kZUNvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSByZWN1cnNpdmVseSBjYWxsZWQgZnVuY3Rpb24gdG8gZW51bWVyYXRlIHRoZSBicmFuY2hlcyBmcm9tIHRoZSBsYXJnZXN0IGh1YnMgYW5kIHBsYWNlIHRoZSBub2Rlc1xuICAgKiBvbiBhIFggcG9zaXRpb24gdGhhdCBlbnN1cmVzIHRoZXJlIHdpbGwgYmUgbm8gb3ZlcmxhcC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBwYXJlbnRJZFxuICAgKiBAcGFyYW0ge251bWJlcn0gcGFyZW50TGV2ZWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wbGFjZUJyYW5jaE5vZGVzKHBhcmVudElkLCBwYXJlbnRMZXZlbCkge1xuICAgIGNvbnN0IGNoaWxkUmVmID0gdGhpcy5oaWVyYXJjaGljYWwuY2hpbGRyZW5SZWZlcmVuY2VbcGFyZW50SWRdO1xuXG4gICAgLy8gaWYgdGhpcyBpcyBub3QgYSBwYXJlbnQsIGNhbmNlbCB0aGUgcGxhY2luZy4gVGhpcyBjYW4gaGFwcGVuIHdpdGggbXVsdGlwbGUgcGFyZW50cyB0byBvbmUgY2hpbGQuXG4gICAgaWYgKGNoaWxkUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgYSBsaXN0IG9mIGNoaWxkTm9kZXNcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZFJlZi5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGROb2Rlcy5wdXNoKHRoaXMuYm9keS5ub2Rlc1tjaGlsZFJlZltpXV0pO1xuICAgIH1cblxuICAgIC8vIHVzZSB0aGUgcG9zaXRpb25zIHRvIG9yZGVyIHRoZSBub2Rlcy5cbiAgICB0aGlzLmRpcmVjdGlvbi5zb3J0KGNoaWxkTm9kZXMpO1xuXG4gICAgLy8gcG9zaXRpb24gdGhlIGNoaWxkTm9kZXNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGNoaWxkTm9kZXNbaV07XG4gICAgICBjb25zdCBjaGlsZE5vZGVMZXZlbCA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tjaGlsZE5vZGUuaWRdO1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIGNoaWxkIG5vZGUgaXMgYmVsb3cgdGhlIHBhcmVudCBub2RlIGFuZCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIHBvc2l0aW9uZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoaWxkTm9kZUxldmVsID4gcGFyZW50TGV2ZWwgJiZcbiAgICAgICAgdGhpcy5wb3NpdGlvbmVkTm9kZXNbY2hpbGROb2RlLmlkXSA9PT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgLy8gZ2V0IHRoZSBhbW91bnQgb2Ygc3BhY2UgcmVxdWlyZWQgZm9yIHRoaXMgbm9kZS4gSWYgcGFyZW50IHRoZSB3aWR0aCBpcyBiYXNlZCBvbiB0aGUgYW1vdW50IG9mIGNoaWxkcmVuLlxuICAgICAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZztcbiAgICAgICAgbGV0IHBvcztcblxuICAgICAgICAvLyB3ZSBnZXQgdGhlIFggb3IgWSB2YWx1ZXMgd2UgbmVlZCBhbmQgc3RvcmUgdGhlbSBpbiBwb3MgYW5kIHByZXZpb3VzUG9zLlxuICAgICAgICAvLyBUaGUgZ2V0IGFuZCBzZXQgbWFrZSBzdXJlIHdlIGdldCBYIG9yIFlcbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICBwb3MgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbih0aGlzLmJvZHkubm9kZXNbcGFyZW50SWRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwb3MgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihjaGlsZE5vZGVzW2kgLSAxXSkgKyBzcGFjaW5nO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKGNoaWxkTm9kZSwgcG9zLCBjaGlsZE5vZGVMZXZlbCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25BbmRDb250aW51ZShjaGlsZE5vZGUsIGNoaWxkTm9kZUxldmVsLCBwb3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNlbnRlciB0aGUgcGFyZW50IG5vZGVzLlxuICAgIGNvbnN0IGNlbnRlciA9IHRoaXMuX2dldENlbnRlclBvc2l0aW9uKGNoaWxkTm9kZXMpO1xuICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKHRoaXMuYm9keS5ub2Rlc1twYXJlbnRJZF0sIGNlbnRlciwgcGFyZW50TGV2ZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBmb3Igb3ZlcmxhcCBhbmQgaWYgcmVxdWlyZWQgc2hpZnRzIHRoZSBicmFuY2guIEl0IGFsc28ga2VlcHMgcmVjb3JkcyBvZiBwb3NpdGlvbmVkIG5vZGVzLlxuICAgKiBGaW5hbGx5IGl0IHdpbGwgY2FsbCBfcGxhY2VCcmFuY2hOb2RlcyB0byBwbGFjZSB0aGUgYnJhbmNoIG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb3NcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF92YWxpZGF0ZVBvc2l0aW9uQW5kQ29udGludWUobm9kZSwgbGV2ZWwsIHBvcykge1xuICAgIC8vIFRoaXMgbWV0aG9kIG9ubHkgd29ya3MgZm9yIGZvcm1hbCB0cmVlcyBhbmQgZm9ybWFsIGZvcmVzdHNcbiAgICAvLyBFYXJseSBleGl0IGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlXG4gICAgaWYgKCF0aGlzLmhpZXJhcmNoaWNhbC5pc1RyZWUpIHJldHVybjtcblxuICAgIC8vIGlmIG92ZXJsYXAgaGFzIGJlZW4gZGV0ZWN0ZWQsIHdlIHNoaWZ0IHRoZSBicmFuY2hcbiAgICBpZiAodGhpcy5sYXN0Tm9kZU9uTGV2ZWxbbGV2ZWxdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzUG9zID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24oXG4gICAgICAgIHRoaXMuYm9keS5ub2Rlc1t0aGlzLmxhc3ROb2RlT25MZXZlbFtsZXZlbF1dXG4gICAgICApO1xuICAgICAgaWYgKHBvcyAtIHByZXZpb3VzUG9zIDwgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZykge1xuICAgICAgICBjb25zdCBkaWZmID0gcHJldmlvdXNQb3MgKyB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nIC0gcG9zO1xuICAgICAgICBjb25zdCBzaGFyZWRQYXJlbnQgPSB0aGlzLl9maW5kQ29tbW9uUGFyZW50KFxuICAgICAgICAgIHRoaXMubGFzdE5vZGVPbkxldmVsW2xldmVsXSxcbiAgICAgICAgICBub2RlLmlkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3NoaWZ0QmxvY2soc2hhcmVkUGFyZW50LndpdGhDaGlsZCwgZGlmZik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0Tm9kZU9uTGV2ZWxbbGV2ZWxdID0gbm9kZS5pZDsgLy8gc3RvcmUgY2hhbmdlIGluIHBvc2l0aW9uLlxuICAgIHRoaXMucG9zaXRpb25lZE5vZGVzW25vZGUuaWRdID0gdHJ1ZTtcbiAgICB0aGlzLl9wbGFjZUJyYW5jaE5vZGVzKG5vZGUuaWQsIGxldmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNlaXZlcyBhbiBhcnJheSB3aXRoIG5vZGUgaW5kaWNlcyBhbmQgcmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBhY3R1YWwgbm9kZSByZWZlcmVuY2VzLlxuICAgKiBVc2VkIGZvciBzb3J0aW5nIGJhc2VkIG9uIG5vZGUgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZS5pZD59IGlkQXJyYXlcbiAgICogQHJldHVybnMge0FycmF5LjxOb2RlPn1cbiAgICovXG4gIF9pbmRleEFycmF5VG9Ob2RlcyhpZEFycmF5KSB7XG4gICAgY29uc3QgYXJyYXkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycmF5LnB1c2godGhpcy5ib2R5Lm5vZGVzW2lkQXJyYXlbaV1dKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gZ2V0IHRoZSBkaXN0cmlidXRpb24gb2YgbGV2ZWxzIGJhc2VkIG9uIGh1YnNpemVcbiAgICpcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXREaXN0cmlidXRpb24oKSB7XG4gICAgY29uc3QgZGlzdHJpYnV0aW9uID0ge307XG4gICAgbGV0IG5vZGVJZCwgbm9kZTtcblxuICAgIC8vIHdlIGZpeCBZIGJlY2F1c2UgdGhlIGhpZXJhcmNoeSBpcyB2ZXJ0aWNhbCxcbiAgICAvLyB3ZSBmaXggWCBzbyB3ZSBkbyBub3QgZ2l2ZSBhIG5vZGUgYW4geCBwb3NpdGlvbiBmb3IgYSBzZWNvbmQgdGltZS5cbiAgICAvLyB0aGUgZml4IG9mIFggaXMgcmVtb3ZlZCBhZnRlciB0aGUgeCB2YWx1ZSBoYXMgYmVlbiBzZXQuXG4gICAgZm9yIChub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5ub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgIGNvbnN0IGxldmVsID1cbiAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW25vZGVJZF07XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uLmZpeChub2RlLCBsZXZlbCk7XG4gICAgICAgIGlmIChkaXN0cmlidXRpb25bbGV2ZWxdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkaXN0cmlidXRpb25bbGV2ZWxdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZGlzdHJpYnV0aW9uW2xldmVsXVtub2RlSWRdID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRpc3RyaWJ1dGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGFjdGl2ZSAoaS5lLiB2aXNpYmxlKSBlZGdlcyBmb3IgdGhpcyBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHZpcy5FZGdlPn0gQXJyYXkgb2YgZWRnZSBpbnN0YW5jZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRBY3RpdmVFZGdlcyhub2RlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICBmb3JFYWNoKG5vZGUuZWRnZXMsIChlZGdlKSA9PiB7XG4gICAgICBpZiAodGhpcy5ib2R5LmVkZ2VJbmRpY2VzLmluZGV4T2YoZWRnZS5pZCkgIT09IC0xKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVkZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGh1YnNpemVzIGZvciBhbGwgYWN0aXZlIG5vZGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEh1YlNpemVzKCkge1xuICAgIGNvbnN0IGh1YlNpemVzID0ge307XG4gICAgY29uc3Qgbm9kZUlkcyA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcblxuICAgIGZvckVhY2gobm9kZUlkcywgKG5vZGVJZCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgY29uc3QgaHViU2l6ZSA9IHRoaXMuX2dldEFjdGl2ZUVkZ2VzKG5vZGUpLmxlbmd0aDtcbiAgICAgIGh1YlNpemVzW2h1YlNpemVdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIC8vIE1ha2UgYW4gYXJyYXkgb2YgdGhlIHNpemUgc29ydGVkIGRlc2NlbmRpbmdcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3JFYWNoKGh1YlNpemVzLCAoc2l6ZSkgPT4ge1xuICAgICAgcmVzdWx0LnB1c2goTnVtYmVyKHNpemUpKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYiAtIGE7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG5vZGVzIGluIGxldmVscyBiYXNlZCBvbiB0aGUgcmVjdXJzaXZlIGJyYW5jaGluZyBmcm9tIHRoZSBsYXJnZXN0IGh1YnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lTGV2ZWxzQnlIdWJzaXplKCkge1xuICAgIGNvbnN0IGxldmVsRG93bnN0cmVhbSA9IChub2RlQSwgbm9kZUIpID0+IHtcbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVsRG93bnN0cmVhbShub2RlQSwgbm9kZUIpO1xuICAgIH07XG5cbiAgICBjb25zdCBodWJTaXplcyA9IHRoaXMuX2dldEh1YlNpemVzKCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGh1YlNpemVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBodWJTaXplID0gaHViU2l6ZXNbaV07XG4gICAgICBpZiAoaHViU2l6ZSA9PT0gMCkgYnJlYWs7XG5cbiAgICAgIGZvckVhY2godGhpcy5ib2R5Lm5vZGVJbmRpY2VzLCAobm9kZUlkKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcblxuICAgICAgICBpZiAoaHViU2l6ZSA9PT0gdGhpcy5fZ2V0QWN0aXZlRWRnZXMobm9kZSkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5fY3Jhd2xOZXR3b3JrKGxldmVsRG93bnN0cmVhbSwgbm9kZUlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRPRE86IHJlbGVhc2UgZmVhdHVyZVxuICAgKiBUT0RPOiBEZXRlcm1pbmUgaWYgdGhpcyBmZWF0dXJlIGlzIG5lZWRlZCBhdCBhbGxcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZXRlcm1pbmVMZXZlbHNDdXN0b21DYWxsYmFjaygpIHtcbiAgICBjb25zdCBtaW5MZXZlbCA9IDEwMDAwMDtcblxuICAgIC8vIFRPRE86IHRoaXMgc2hvdWxkIGNvbWUgZnJvbSBvcHRpb25zLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSBUaGlzIHNob3VsZCBldmVudHVhbGx5IGJlIGltcGxlbWVudGVkIHdpdGggdGhlc2UgcGFyYW1ldGVycyB1c2VkLlxuICAgIGNvbnN0IGN1c3RvbUNhbGxiYWNrID0gZnVuY3Rpb24gKG5vZGVBLCBub2RlQiwgZWRnZSkge307XG5cbiAgICAvLyBUT0RPOiBwZXJoYXBzIG1vdmUgdG8gSGllcmFyY2hpY2FsU3RhdHVzLlxuICAgIC8vICAgICAgIEJ1dCBJIGN1cnJlbnRseSBkb24ndCBzZWUgdGhlIHBvaW50LCB0aGlzIG1ldGhvZCBpcyBub3QgdXNlZC5cbiAgICBjb25zdCBsZXZlbEJ5RGlyZWN0aW9uID0gKG5vZGVBLCBub2RlQiwgZWRnZSkgPT4ge1xuICAgICAgbGV0IGxldmVsQSA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlQS5pZF07XG4gICAgICAvLyBzZXQgaW5pdGlhbCBsZXZlbFxuICAgICAgaWYgKGxldmVsQSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldmVsQSA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlQS5pZF0gPSBtaW5MZXZlbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlmZiA9IGN1c3RvbUNhbGxiYWNrKFxuICAgICAgICBOZXR3b3JrVXRpbC5jbG9uZU9wdGlvbnMobm9kZUEsIFwibm9kZVwiKSxcbiAgICAgICAgTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKG5vZGVCLCBcIm5vZGVcIiksXG4gICAgICAgIE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhlZGdlLCBcImVkZ2VcIilcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlQi5pZF0gPSBsZXZlbEEgKyBkaWZmO1xuICAgIH07XG5cbiAgICB0aGlzLl9jcmF3bE5ldHdvcmsobGV2ZWxCeURpcmVjdGlvbik7XG4gICAgdGhpcy5oaWVyYXJjaGljYWwuc2V0TWluTGV2ZWxUb1plcm8odGhpcy5ib2R5Lm5vZGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvY2F0ZSBub2RlcyBpbiBsZXZlbHMgYmFzZWQgb24gdGhlIGRpcmVjdGlvbiBvZiB0aGUgZWRnZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lTGV2ZWxzRGlyZWN0ZWQoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXMucmVkdWNlKChhY2MsIGlkKSA9PiB7XG4gICAgICBhY2Muc2V0KGlkLCB0aGlzLmJvZHkubm9kZXNbaWRdKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbmV3IE1hcCgpKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLnNoYWtlVG93YXJkcyA9PT0gXCJyb290c1wiKSB7XG4gICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHMgPSBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25Sb290cyhub2Rlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVscyA9IGZpbGxMZXZlbHNCeURpcmVjdGlvbkxlYXZlcyhub2Rlcyk7XG4gICAgfVxuXG4gICAgdGhpcy5oaWVyYXJjaGljYWwuc2V0TWluTGV2ZWxUb1plcm8odGhpcy5ib2R5Lm5vZGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGJvb2trZWVwaW5nIG9mIHBhcmVudCBhbmQgY2hpbGQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2VuZXJhdGVNYXAoKSB7XG4gICAgY29uc3QgZmlsbEluUmVsYXRpb25zID0gKHBhcmVudE5vZGUsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbY2hpbGROb2RlLmlkXSA+XG4gICAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1twYXJlbnROb2RlLmlkXVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmFkZFJlbGF0aW9uKHBhcmVudE5vZGUuaWQsIGNoaWxkTm9kZS5pZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuX2NyYXdsTmV0d29yayhmaWxsSW5SZWxhdGlvbnMpO1xuICAgIHRoaXMuaGllcmFyY2hpY2FsLmNoZWNrSWZUcmVlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3Jhd2wgb3ZlciB0aGUgZW50aXJlIG5ldHdvcmsgYW5kIHVzZSBhIGNhbGxiYWNrIG9uIGVhY2ggbm9kZSBjb3VwbGUgdGhhdCBpcyBjb25uZWN0ZWQgdG8gZWFjaCBvdGhlci5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrPWZ1bmN0aW9uKCl7fV0gICAgICAgICAgfCB3aWxsIHJlY2VpdmUgbm9kZUEsIG5vZGVCIGFuZCB0aGUgY29ubmVjdGluZyBlZGdlLiBBIGFuZCBCIGFyZSBkaXN0aW5jdC5cbiAgICogQHBhcmFtIHtOb2RlLmlkfSBzdGFydGluZ05vZGVJZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyYXdsTmV0d29yayhjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9LCBzdGFydGluZ05vZGVJZCkge1xuICAgIGNvbnN0IHByb2dyZXNzID0ge307XG5cbiAgICBjb25zdCBjcmF3bGVyID0gKG5vZGUsIHRyZWUpID0+IHtcbiAgICAgIGlmIChwcm9ncmVzc1tub2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaGllcmFyY2hpY2FsLnNldFRyZWVJbmRleChub2RlLCB0cmVlKTtcblxuICAgICAgICBwcm9ncmVzc1tub2RlLmlkXSA9IHRydWU7XG4gICAgICAgIGxldCBjaGlsZE5vZGU7XG4gICAgICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5fZ2V0QWN0aXZlRWRnZXMobm9kZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBlZGdlID0gZWRnZXNbaV07XG4gICAgICAgICAgaWYgKGVkZ2UuY29ubmVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoZWRnZS50b0lkID09IG5vZGUuaWQpIHtcbiAgICAgICAgICAgICAgLy8gTm90ICc9PT0nIGJlY2F1c2UgaWQncyBjYW4gYmUgc3RyaW5nIGFuZCBudW1lcmljXG4gICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGVkZ2UuZnJvbTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGVkZ2UudG87XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlLmlkICE9IGNoaWxkTm9kZS5pZCkge1xuICAgICAgICAgICAgICAvLyBOb3QgJyE9PScgYmVjYXVzZSBpZCdzIGNhbiBiZSBzdHJpbmcgYW5kIG51bWVyaWNcbiAgICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgY2hpbGROb2RlLCBlZGdlKTtcbiAgICAgICAgICAgICAgY3Jhd2xlcihjaGlsZE5vZGUsIHRyZWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3RhcnRpbmdOb2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ3Jhd2wgb3ZlciBhbGwgbm9kZXNcbiAgICAgIGxldCB0cmVlSW5kZXggPSAwOyAvLyBTZXJ2ZXMgdG8gcGFzcyBhIHVuaXF1ZSBpZCBmb3IgdGhlIGN1cnJlbnQgZGlzdGluY3QgdHJlZVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBub2RlSWQgPSB0aGlzLmJvZHkubm9kZUluZGljZXNbaV07XG5cbiAgICAgICAgaWYgKHByb2dyZXNzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgICBjcmF3bGVyKG5vZGUsIHRyZWVJbmRleCk7XG4gICAgICAgICAgdHJlZUluZGV4ICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3Jhd2wgZnJvbSB0aGUgZ2l2ZW4gc3RhcnRpbmcgbm9kZVxuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tzdGFydGluZ05vZGVJZF07XG4gICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb2RlIG5vdCBmb3VuZDpcIiwgc3RhcnRpbmdOb2RlSWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjcmF3bGVyKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaGlmdCBhIGJyYW5jaCBhIGNlcnRhaW4gZGlzdGFuY2VcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBwYXJlbnRJZFxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlmZlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NoaWZ0QmxvY2socGFyZW50SWQsIGRpZmYpIHtcbiAgICBjb25zdCBwcm9ncmVzcyA9IHt9O1xuICAgIGNvbnN0IHNoaWZ0ZXIgPSAocGFyZW50SWQpID0+IHtcbiAgICAgIGlmIChwcm9ncmVzc1twYXJlbnRJZF0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcHJvZ3Jlc3NbcGFyZW50SWRdID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGlyZWN0aW9uLnNoaWZ0KHBhcmVudElkLCBkaWZmKTtcblxuICAgICAgY29uc3QgY2hpbGRSZWYgPSB0aGlzLmhpZXJhcmNoaWNhbC5jaGlsZHJlblJlZmVyZW5jZVtwYXJlbnRJZF07XG4gICAgICBpZiAoY2hpbGRSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkUmVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgc2hpZnRlcihjaGlsZFJlZltpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHNoaWZ0ZXIocGFyZW50SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSBjb21tb24gcGFyZW50IGJldHdlZW4gYnJhbmNoZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gY2hpbGRBXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gY2hpbGRCXG4gICAqIEByZXR1cm5zIHt7Zm91bmRQYXJlbnQsIHdpdGhDaGlsZH19XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmluZENvbW1vblBhcmVudChjaGlsZEEsIGNoaWxkQikge1xuICAgIGNvbnN0IHBhcmVudHMgPSB7fTtcbiAgICBjb25zdCBpdGVyYXRlUGFyZW50cyA9IChwYXJlbnRzLCBjaGlsZCkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50UmVmID0gdGhpcy5oaWVyYXJjaGljYWwucGFyZW50UmVmZXJlbmNlW2NoaWxkXTtcbiAgICAgIGlmIChwYXJlbnRSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudFJlZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudFJlZltpXTtcbiAgICAgICAgICBwYXJlbnRzW3BhcmVudF0gPSB0cnVlO1xuICAgICAgICAgIGl0ZXJhdGVQYXJlbnRzKHBhcmVudHMsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXJlbnQgPSAocGFyZW50cywgY2hpbGQpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudFJlZiA9IHRoaXMuaGllcmFyY2hpY2FsLnBhcmVudFJlZmVyZW5jZVtjaGlsZF07XG4gICAgICBpZiAocGFyZW50UmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnRSZWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBwYXJlbnRSZWZbaV07XG4gICAgICAgICAgaWYgKHBhcmVudHNbcGFyZW50XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBmb3VuZFBhcmVudDogcGFyZW50LCB3aXRoQ2hpbGQ6IGNoaWxkIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGJyYW5jaCA9IGZpbmRQYXJlbnQocGFyZW50cywgcGFyZW50KTtcbiAgICAgICAgICBpZiAoYnJhbmNoLmZvdW5kUGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYnJhbmNoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZm91bmRQYXJlbnQ6IG51bGwsIHdpdGhDaGlsZDogY2hpbGQgfTtcbiAgICB9O1xuXG4gICAgaXRlcmF0ZVBhcmVudHMocGFyZW50cywgY2hpbGRBKTtcbiAgICByZXR1cm4gZmluZFBhcmVudChwYXJlbnRzLCBjaGlsZEIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3RyYXRlZ3kgcGF0dGVybiBmb3IgaGFuZGxpbmcgdGhlIGNvb3JkaW5hdGVzIGdpdmVuIHRoZSBjdXJyZW50IGRpcmVjdGlvbi5cbiAgICpcbiAgICogVGhlIGluZGl2aWR1YWwgaW5zdGFuY2VzIGNvbnRhaW4gYWxsIHRoZSBvcGVyYXRpb25zIGFuZCBkYXRhIHNwZWNpZmljIHRvIGEgbGF5b3V0IGRpcmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9zaXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvTm90VXBkYXRlPWZhbHNlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2V0RGlyZWN0aW9uU3RyYXRlZ3koKSB7XG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9XG4gICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmRpcmVjdGlvbiA9PT0gXCJVRFwiIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmRpcmVjdGlvbiA9PT0gXCJEVVwiO1xuXG4gICAgaWYgKGlzVmVydGljYWwpIHtcbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gbmV3IFZlcnRpY2FsU3RyYXRlZ3kodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gbmV3IEhvcml6b250YWxTdHJhdGVneSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBjZW50ZXIgcG9zaXRpb24gb2YgYSBicmFuY2ggZnJvbSB0aGUgcGFzc2VkIGxpc3Qgb2YgY2hpbGQgbm9kZXNcbiAgICpcbiAgICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHBvc2l0aW9ucyBvZiBhbGwgdGhlIGNoaWxkIG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlfHZpcy5Ob2RlLmlkPn0gY2hpbGROb2RlcyAgQXJyYXkgb2YgZWl0aGVyIGNoaWxkIG5vZGVzIG9yIG5vZGUgaWQnc1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldENlbnRlclBvc2l0aW9uKGNoaWxkTm9kZXMpIHtcbiAgICBsZXQgbWluUG9zID0gMWU5O1xuICAgIGxldCBtYXhQb3MgPSAtMWU5O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY2hpbGROb2RlO1xuICAgICAgaWYgKGNoaWxkTm9kZXNbaV0uaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlSWQgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgICBjaGlsZE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbY2hpbGROb2RlSWRdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKGNoaWxkTm9kZSk7XG4gICAgICBtaW5Qb3MgPSBNYXRoLm1pbihtaW5Qb3MsIHBvc2l0aW9uKTtcbiAgICAgIG1heFBvcyA9IE1hdGgubWF4KG1heFBvcywgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiAwLjUgKiAobWluUG9zICsgbWF4UG9zKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYXlvdXRFbmdpbmU7XG4iLCAiaW1wb3J0IFwiLi9NYW5pcHVsYXRpb25TeXN0ZW0uY3NzXCI7XG5cbmltcG9ydCB7IEhhbW1lciwgZGVlcEV4dGVuZCwgcmVjdXJzaXZlRE9NRGVsZXRlIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgdjQgYXMgcmFuZG9tVVVJRCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyBvblRvdWNoIH0gZnJvbSBcIi4uLy4uL2hhbW1lclV0aWxcIjtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIHRvb2xiYXIgZGl2IGVsZW1lbnQgb2YgY2hpbGRyZW5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBNYW5pcHVsYXRpb25TeXN0ZW0ge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkhhbmRsZXJ9IHNlbGVjdGlvbkhhbmRsZXJcbiAgICogQHBhcmFtIHtJbnRlcmFjdGlvbkhhbmRsZXJ9IGludGVyYWN0aW9uSGFuZGxlclxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzLCBzZWxlY3Rpb25IYW5kbGVyLCBpbnRlcmFjdGlvbkhhbmRsZXIpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IHNlbGVjdGlvbkhhbmRsZXI7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIgPSBpbnRlcmFjdGlvbkhhbmRsZXI7XG5cbiAgICB0aGlzLmVkaXRNb2RlID0gZmFsc2U7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0TW9kZURpdiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNsb3NlRGl2ID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5fZG9tRXZlbnRMaXN0ZW5lckNsZWFudXBRdWV1ZSA9IFtdO1xuICAgIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnMgPSB7fTtcbiAgICB0aGlzLnRlbXBvcmFyeUV2ZW50RnVuY3Rpb25zID0gW107XG5cbiAgICB0aGlzLnRvdWNoVGltZSA9IDA7XG4gICAgdGhpcy50ZW1wb3JhcnlJZHMgPSB7IG5vZGVzOiBbXSwgZWRnZXM6IFtdIH07XG4gICAgdGhpcy5ndWlFbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5pbk1vZGUgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBpbml0aWFsbHlBY3RpdmU6IGZhbHNlLFxuICAgICAgYWRkTm9kZTogdHJ1ZSxcbiAgICAgIGFkZEVkZ2U6IHRydWUsXG4gICAgICBlZGl0Tm9kZTogdW5kZWZpbmVkLFxuICAgICAgZWRpdEVkZ2U6IHRydWUsXG4gICAgICBkZWxldGVOb2RlOiB0cnVlLFxuICAgICAgZGVsZXRlRWRnZTogdHJ1ZSxcbiAgICAgIGNvbnRyb2xOb2RlU3R5bGU6IHtcbiAgICAgICAgc2hhcGU6IFwiZG90XCIsXG4gICAgICAgIHNpemU6IDYsXG4gICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgYmFja2dyb3VuZDogXCIjZmYwMDAwXCIsXG4gICAgICAgICAgYm9yZGVyOiBcIiMzYzNjM2NcIixcbiAgICAgICAgICBoaWdobGlnaHQ6IHsgYmFja2dyb3VuZDogXCIjMDdmOTY4XCIsIGJvcmRlcjogXCIjM2MzYzNjXCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYm9yZGVyV2lkdGg6IDIsXG4gICAgICAgIGJvcmRlcldpZHRoU2VsZWN0ZWQ6IDIsXG4gICAgICB9LFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZXN0cm95XCIsICgpID0+IHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YUNoYW5nZWRcIiwgdGhpcy5fcmVzdG9yZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9yZXNldERhdGFcIiwgdGhpcy5fcmVzdG9yZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBzb21ldGhpbmcgY2hhbmdlcyBpbiB0aGUgZGF0YSBkdXJpbmcgZWRpdGluZywgc3dpdGNoIGJhY2sgdG8gdGhlIGluaXRpYWwgZGF0YW1hbmlwdWxhdGlvbiBzdGF0ZSBhbmQgY2xvc2UgYWxsIGVkaXQgbW9kZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzdG9yZSgpIHtcbiAgICBpZiAodGhpcy5pbk1vZGUgIT09IGZhbHNlKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmluaXRpYWxseUFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc2FibGVFZGl0TW9kZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIE9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGFsbE9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbE9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucywgYWxsT3B0aW9ucywgZ2xvYmFsT3B0aW9ucykge1xuICAgIGlmIChhbGxPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChhbGxPcHRpb25zLmxvY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGUgPSBhbGxPcHRpb25zLmxvY2FsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGUgPSBnbG9iYWxPcHRpb25zLmxvY2FsZTtcbiAgICAgIH1cbiAgICAgIGlmIChhbGxPcHRpb25zLmxvY2FsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlcyA9IGFsbE9wdGlvbnMubG9jYWxlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzID0gZ2xvYmFsT3B0aW9ucy5sb2NhbGVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICBkZWVwRXh0ZW5kKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmluaXRpYWxseUFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmVkaXRNb2RlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NldHVwKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGVkaXQtbW9kZS4gRHJhd3MgdGhlIERPTSByZXF1aXJlZCBhbmQgY2xlYW5zIHVwIGFmdGVyIGl0c2VsZi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRvZ2dsZUVkaXRNb2RlKCkge1xuICAgIGlmICh0aGlzLmVkaXRNb2RlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmRpc2FibGVFZGl0TW9kZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgRWRpdCBNb2RlXG4gICAqL1xuICBlbmFibGVFZGl0TW9kZSgpIHtcbiAgICB0aGlzLmVkaXRNb2RlID0gdHJ1ZTtcblxuICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuY2xvc2VEaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuZWRpdE1vZGVEaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIEVkaXQgTW9kZVxuICAgKi9cbiAgZGlzYWJsZUVkaXRNb2RlKCkge1xuICAgIHRoaXMuZWRpdE1vZGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgdGhpcy5jbG9zZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICB0aGlzLmVkaXRNb2RlRGl2LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB0aGlzLl9jcmVhdGVFZGl0QnV0dG9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIG1haW4gdG9vbGJhci4gUmVtb3ZlcyBmdW5jdGlvbnMgYm91bmQgdG8gdGhlIHNlbGVjdCBldmVudC4gQmluZHMgYWxsIHRoZSBidXR0b25zIG9mIHRoZSB0b29sYmFyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpIHtcbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICAvLyByZXNldCBnbG9iYWwgdmFyaWFibGVzXG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET00gPSB7fTtcblxuICAgIC8vIGlmIHRoZSBndWkgaXMgZW5hYmxlZCwgZHJhdyBhbGwgZWxlbWVudHMuXG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gYSBfcmVzdG9yZSB3aWxsIGhpZGUgdGhlc2UgbWVudXNcbiAgICAgIHRoaXMuZWRpdE1vZGUgPSB0cnVlO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuY2xvc2VEaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuICAgICAgY29uc3Qgc2VsZWN0ZWROb2RlQ291bnQgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWROb2RlQ291bnQoKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRWRnZUNvdW50ID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkRWRnZUNvdW50KCk7XG4gICAgICBjb25zdCBzZWxlY3RlZFRvdGFsQ291bnQgPSBzZWxlY3RlZE5vZGVDb3VudCArIHNlbGVjdGVkRWRnZUNvdW50O1xuICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV07XG4gICAgICBsZXQgbmVlZFNlcGVyYXRvciA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFkZE5vZGUgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUFkZE5vZGVCdXR0b24obG9jYWxlKTtcbiAgICAgICAgbmVlZFNlcGVyYXRvciA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFkZEVkZ2UgIT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChuZWVkU2VwZXJhdG9yID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5fY3JlYXRlU2VwZXJhdG9yKDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5lZWRTZXBlcmF0b3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NyZWF0ZUFkZEVkZ2VCdXR0b24obG9jYWxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBzZWxlY3RlZE5vZGVDb3VudCA9PT0gMSAmJlxuICAgICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVkaXROb2RlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICkge1xuICAgICAgICBpZiAobmVlZFNlcGVyYXRvciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZWVkU2VwZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jcmVhdGVFZGl0Tm9kZUJ1dHRvbihsb2NhbGUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc2VsZWN0ZWRFZGdlQ291bnQgPT09IDEgJiZcbiAgICAgICAgc2VsZWN0ZWROb2RlQ291bnQgPT09IDAgJiZcbiAgICAgICAgdGhpcy5vcHRpb25zLmVkaXRFZGdlICE9PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIGlmIChuZWVkU2VwZXJhdG9yID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5fY3JlYXRlU2VwZXJhdG9yKDMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5lZWRTZXBlcmF0b3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NyZWF0ZUVkaXRFZGdlQnV0dG9uKGxvY2FsZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlbW92ZSBidXR0b25zXG4gICAgICBpZiAoc2VsZWN0ZWRUb3RhbENvdW50ICE9PSAwKSB7XG4gICAgICAgIGlmIChzZWxlY3RlZE5vZGVDb3VudCA+IDAgJiYgdGhpcy5vcHRpb25zLmRlbGV0ZU5vZGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKG5lZWRTZXBlcmF0b3IgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcig0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fY3JlYXRlRGVsZXRlQnV0dG9uKGxvY2FsZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgc2VsZWN0ZWROb2RlQ291bnQgPT09IDAgJiZcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZGVsZXRlRWRnZSAhPT0gZmFsc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKG5lZWRTZXBlcmF0b3IgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcig0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fY3JlYXRlRGVsZXRlQnV0dG9uKGxvY2FsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuXG4gICAgICAvLyByZWZyZXNoIHRoaXMgYmFyIGJhc2VkIG9uIHdoYXQgaGFzIGJlZW4gc2VsZWN0ZWRcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRFdmVudChcbiAgICAgICAgXCJzZWxlY3RcIixcbiAgICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyLmJpbmQodGhpcylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gcmVkcmF3IHRvIHNob3cgYW55IHBvc3NpYmxlIGNoYW5nZXNcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIHRvb2xiYXIgZm9yIGFkZGluZyBOb2Rlc1xuICAgKi9cbiAgYWRkTm9kZU1vZGUoKSB7XG4gICAgLy8gd2hlbiB1c2luZyB0aGUgZ3VpLCBlbmFibGUgZWRpdCBtb2RlIGlmIGl0IHdhc250IGFscmVhZHkuXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICB9XG5cbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICB0aGlzLmluTW9kZSA9IFwiYWRkTm9kZVwiO1xuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25ET00gPSB7fTtcbiAgICAgIHRoaXMuX2NyZWF0ZUJhY2tCdXR0b24obG9jYWxlKTtcbiAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigpO1xuICAgICAgdGhpcy5fY3JlYXRlRGVzY3JpcHRpb24oXG4gICAgICAgIGxvY2FsZVtcImFkZERlc2NyaXB0aW9uXCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJhZGREZXNjcmlwdGlvblwiXVxuICAgICAgKTtcblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRFdmVudChcImNsaWNrXCIsIHRoaXMuX3BlcmZvcm1BZGROb2RlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGwgdGhlIGJvdW5kIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgZWRpdGluZyBvZiB0aGUgbm9kZS4gVGhlIG5vZGUgaGFzIHRvIGJlIHNlbGVjdGVkLlxuICAgKi9cbiAgZWRpdE5vZGUoKSB7XG4gICAgLy8gd2hlbiB1c2luZyB0aGUgZ3VpLCBlbmFibGUgZWRpdCBtb2RlIGlmIGl0IHdhc250IGFscmVhZHkuXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICB9XG5cbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3RlZE5vZGVzKClbMF07XG4gICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pbk1vZGUgPSBcImVkaXROb2RlXCI7XG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5lZGl0Tm9kZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGlmIChub2RlLmlzQ2x1c3RlciAhPT0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBkZWVwRXh0ZW5kKHt9LCBub2RlLm9wdGlvbnMsIGZhbHNlKTtcbiAgICAgICAgICBkYXRhLnggPSBub2RlLng7XG4gICAgICAgICAgZGF0YS55ID0gbm9kZS55O1xuXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lZGl0Tm9kZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5lZGl0Tm9kZShkYXRhLCAoZmluYWxpemVkRGF0YSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuaW5Nb2RlID09PSBcImVkaXROb2RlXCJcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpLnVwZGF0ZShmaW5hbGl6ZWREYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBlZGl0IGRvZXMgbm90IHN1cHBvcnQgdHdvIGFyZ3VtZW50cyAoZGF0YSwgY2FsbGJhY2spXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFsZXJ0KFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV1bXCJlZGl0Q2x1c3RlckVycm9yXCJdIHx8XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJlZGl0Q2x1c3RlckVycm9yXCJdXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiTm8gZnVuY3Rpb24gaGFzIGJlZW4gY29uZmlndXJlZCB0byBoYW5kbGUgdGhlIGVkaXRpbmcgb2Ygbm9kZXMuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSB0aGUgdG9vbGJhciB0byBjb25uZWN0IG5vZGVzXG4gICAqL1xuICBhZGRFZGdlTW9kZSgpIHtcbiAgICAvLyB3aGVuIHVzaW5nIHRoZSBndWksIGVuYWJsZSBlZGl0IG1vZGUgaWYgaXQgd2FzbnQgYWxyZWFkeS5cbiAgICBpZiAodGhpcy5lZGl0TW9kZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpO1xuICAgIH1cblxuICAgIC8vIHJlc3RvcmUgdGhlIHN0YXRlIG9mIGFueSBib3VuZCBmdW5jdGlvbnMgb3IgZXZlbnRzLCByZW1vdmUgY29udHJvbCBub2RlcywgcmVzdG9yZSBwaHlzaWNzXG4gICAgdGhpcy5fY2xlYW4oKTtcblxuICAgIHRoaXMuaW5Nb2RlID0gXCJhZGRFZGdlXCI7XG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV07XG4gICAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTSA9IHt9O1xuICAgICAgdGhpcy5fY3JlYXRlQmFja0J1dHRvbihsb2NhbGUpO1xuICAgICAgdGhpcy5fY3JlYXRlU2VwZXJhdG9yKCk7XG4gICAgICB0aGlzLl9jcmVhdGVEZXNjcmlwdGlvbihcbiAgICAgICAgbG9jYWxlW1wiZWRnZURlc2NyaXB0aW9uXCJdIHx8XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImVkZ2VEZXNjcmlwdGlvblwiXVxuICAgICAgKTtcblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIC8vIHRlbXBvcmFyaWx5IG92ZXJsb2FkIGZ1bmN0aW9uc1xuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uVG91Y2hcIiwgdGhpcy5faGFuZGxlQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbkRyYWdFbmRcIiwgdGhpcy5fZmluaXNoQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbkRyYWdcIiwgdGhpcy5fZHJhZ0NvbnRyb2xOb2RlLmJpbmQodGhpcykpO1xuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uUmVsZWFzZVwiLCB0aGlzLl9maW5pc2hDb25uZWN0LmJpbmQodGhpcykpO1xuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uRHJhZ1N0YXJ0XCIsIHRoaXMuX2RyYWdTdGFydEVkZ2UuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25Ib2xkXCIsICgpID0+IHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGUgdGhlIHRvb2xiYXIgdG8gZWRpdCBlZGdlc1xuICAgKi9cbiAgZWRpdEVkZ2VNb2RlKCkge1xuICAgIC8vIHdoZW4gdXNpbmcgdGhlIGd1aSwgZW5hYmxlIGVkaXQgbW9kZSBpZiBpdCB3YXNuJ3QgYWxyZWFkeS5cbiAgICBpZiAodGhpcy5lZGl0TW9kZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpO1xuICAgIH1cblxuICAgIC8vIHJlc3RvcmUgdGhlIHN0YXRlIG9mIGFueSBib3VuZCBmdW5jdGlvbnMgb3IgZXZlbnRzLCByZW1vdmUgY29udHJvbCBub2RlcywgcmVzdG9yZSBwaHlzaWNzXG4gICAgdGhpcy5fY2xlYW4oKTtcblxuICAgIHRoaXMuaW5Nb2RlID0gXCJlZGl0RWRnZVwiO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiB0aGlzLm9wdGlvbnMuZWRpdEVkZ2UgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHR5cGVvZiB0aGlzLm9wdGlvbnMuZWRpdEVkZ2UuZWRpdFdpdGhvdXREcmFnID09PSBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgIHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWRFZGdlSWRzKClbMF07XG4gICAgICBpZiAodGhpcy5lZGdlQmVpbmdFZGl0ZWRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy5lZGdlQmVpbmdFZGl0ZWRJZF07XG4gICAgICAgIHRoaXMuX3BlcmZvcm1FZGl0RWRnZShlZGdlLmZyb20uaWQsIGVkZ2UudG8uaWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25ET00gPSB7fTtcbiAgICAgIHRoaXMuX2NyZWF0ZUJhY2tCdXR0b24obG9jYWxlKTtcbiAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigpO1xuICAgICAgdGhpcy5fY3JlYXRlRGVzY3JpcHRpb24oXG4gICAgICAgIGxvY2FsZVtcImVkaXRFZGdlRGVzY3JpcHRpb25cIl0gfHxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdEVkZ2VEZXNjcmlwdGlvblwiXVxuICAgICAgKTtcblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWRFZGdlSWRzKClbMF07XG4gICAgaWYgKHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1t0aGlzLmVkZ2VCZWluZ0VkaXRlZElkXTtcblxuICAgICAgLy8gY3JlYXRlIGNvbnRyb2wgbm9kZXNcbiAgICAgIGNvbnN0IGNvbnRyb2xOb2RlRnJvbSA9IHRoaXMuX2dldE5ld1RhcmdldE5vZGUoZWRnZS5mcm9tLngsIGVkZ2UuZnJvbS55KTtcbiAgICAgIGNvbnN0IGNvbnRyb2xOb2RlVG8gPSB0aGlzLl9nZXROZXdUYXJnZXROb2RlKGVkZ2UudG8ueCwgZWRnZS50by55KTtcblxuICAgICAgdGhpcy50ZW1wb3JhcnlJZHMubm9kZXMucHVzaChjb250cm9sTm9kZUZyb20uaWQpO1xuICAgICAgdGhpcy50ZW1wb3JhcnlJZHMubm9kZXMucHVzaChjb250cm9sTm9kZVRvLmlkKTtcblxuICAgICAgdGhpcy5ib2R5Lm5vZGVzW2NvbnRyb2xOb2RlRnJvbS5pZF0gPSBjb250cm9sTm9kZUZyb207XG4gICAgICB0aGlzLmJvZHkubm9kZUluZGljZXMucHVzaChjb250cm9sTm9kZUZyb20uaWQpO1xuICAgICAgdGhpcy5ib2R5Lm5vZGVzW2NvbnRyb2xOb2RlVG8uaWRdID0gY29udHJvbE5vZGVUbztcbiAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5wdXNoKGNvbnRyb2xOb2RlVG8uaWQpO1xuXG4gICAgICAvLyB0ZW1wb3JhcmlseSBvdmVybG9hZCBVSSBmdW5jdGlvbnMsIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseSBiZWNhdXNlIG9mIF90ZW1wb3JhcnlCaW5kVUlcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uVG91Y2hcIiwgdGhpcy5fY29udHJvbE5vZGVUb3VjaC5iaW5kKHRoaXMpKTsgLy8gdXNlZCB0byBnZXQgdGhlIHBvc2l0aW9uXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvblRhcFwiLCAoKSA9PiB7fSk7IC8vIGRpc2FibGVkXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbkhvbGRcIiwgKCkgPT4ge30pOyAvLyBkaXNhYmxlZFxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFxuICAgICAgICBcIm9uRHJhZ1N0YXJ0XCIsXG4gICAgICAgIHRoaXMuX2NvbnRyb2xOb2RlRHJhZ1N0YXJ0LmJpbmQodGhpcylcbiAgICAgICk7IC8vIHVzZWQgdG8gc2VsZWN0IGNvbnRyb2wgbm9kZVxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25EcmFnXCIsIHRoaXMuX2NvbnRyb2xOb2RlRHJhZy5iaW5kKHRoaXMpKTsgLy8gdXNlZCB0byBkcmFnIGNvbnRyb2wgbm9kZVxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25EcmFnRW5kXCIsIHRoaXMuX2NvbnRyb2xOb2RlRHJhZ0VuZC5iaW5kKHRoaXMpKTsgLy8gdXNlZCB0byBjb25uZWN0IG9yIHJldmVydCBjb250cm9sIG5vZGVzXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbk1vdXNlTW92ZVwiLCAoKSA9PiB7fSk7IC8vIGRpc2FibGVkXG5cbiAgICAgIC8vIGNyZWF0ZSBmdW5jdGlvbiB0byBwb3NpdGlvbiBjb250cm9sIG5vZGVzIGNvcnJlY3RseSBvbiBtb3ZlbWVudFxuICAgICAgLy8gYXV0b21hdGljYWxseSBjbGVhbmVkIHVwIGJlY2F1c2Ugd2UgdXNlIHRoZSB0ZW1wb3JhcnkgYmluZFxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZEV2ZW50KFwiYmVmb3JlRHJhd2luZ1wiLCAoY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGVkZ2UuZWRnZVR5cGUuZmluZEJvcmRlclBvc2l0aW9ucyhjdHgpO1xuICAgICAgICBpZiAoY29udHJvbE5vZGVGcm9tLnNlbGVjdGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIGNvbnRyb2xOb2RlRnJvbS54ID0gcG9zaXRpb25zLmZyb20ueDtcbiAgICAgICAgICBjb250cm9sTm9kZUZyb20ueSA9IHBvc2l0aW9ucy5mcm9tLnk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRyb2xOb2RlVG8uc2VsZWN0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgY29udHJvbE5vZGVUby54ID0gcG9zaXRpb25zLnRvLng7XG4gICAgICAgICAgY29udHJvbE5vZGVUby55ID0gcG9zaXRpb25zLnRvLnk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBldmVyeXRoaW5nIGluIHRoZSBzZWxlY3Rpb25cbiAgICovXG4gIGRlbGV0ZVNlbGVjdGVkKCkge1xuICAgIC8vIHdoZW4gdXNpbmcgdGhlIGd1aSwgZW5hYmxlIGVkaXQgbW9kZSBpZiBpdCB3YXNudCBhbHJlYWR5LlxuICAgIGlmICh0aGlzLmVkaXRNb2RlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgfVxuXG4gICAgLy8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgYW55IGJvdW5kIGZ1bmN0aW9ucyBvciBldmVudHMsIHJlbW92ZSBjb250cm9sIG5vZGVzLCByZXN0b3JlIHBoeXNpY3NcbiAgICB0aGlzLl9jbGVhbigpO1xuXG4gICAgdGhpcy5pbk1vZGUgPSBcImRlbGV0ZVwiO1xuICAgIGNvbnN0IHNlbGVjdGVkTm9kZXMgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWROb2RlSWRzKCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRFZGdlcyA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3RlZEVkZ2VJZHMoKTtcbiAgICBsZXQgZGVsZXRlRnVuY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgaWYgKHNlbGVjdGVkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLmJvZHkubm9kZXNbc2VsZWN0ZWROb2Rlc1tpXV0uaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgYWxlcnQoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXVtcImRlbGV0ZUNsdXN0ZXJFcnJvclwiXSB8fFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZGVsZXRlQ2x1c3RlckVycm9yXCJdXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuZGVsZXRlTm9kZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRlbGV0ZUZ1bmN0aW9uID0gdGhpcy5vcHRpb25zLmRlbGV0ZU5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZEVkZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmRlbGV0ZUVkZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkZWxldGVGdW5jdGlvbiA9IHRoaXMub3B0aW9ucy5kZWxldGVFZGdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGVsZXRlRnVuY3Rpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY29uc3QgZGF0YSA9IHsgbm9kZXM6IHNlbGVjdGVkTm9kZXMsIGVkZ2VzOiBzZWxlY3RlZEVkZ2VzIH07XG4gICAgICBpZiAoZGVsZXRlRnVuY3Rpb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGRlbGV0ZUZ1bmN0aW9uKGRhdGEsIChmaW5hbGl6ZWREYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0aGlzLmluTW9kZSA9PT0gXCJkZWxldGVcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkucmVtb3ZlKGZpbmFsaXplZERhdGEuZWRnZXMpO1xuICAgICAgICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpLnJlbW92ZShmaW5hbGl6ZWREYXRhLm5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U2ltdWxhdGlvblwiKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgZnVuY3Rpb24gZm9yIGRlbGV0ZSBkb2VzIG5vdCBzdXBwb3J0IHR3byBhcmd1bWVudHMgKGRhdGEsIGNhbGxiYWNrKVwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzLmdldERhdGFTZXQoKS5yZW1vdmUoc2VsZWN0ZWRFZGdlcyk7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5ub2Rlcy5nZXREYXRhU2V0KCkucmVtb3ZlKHNlbGVjdGVkTm9kZXMpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U2ltdWxhdGlvblwiKTtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQUklWQVRFICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vXG5cbiAgLyoqXG4gICAqIGRyYXcgb3IgcmVtb3ZlIHRoZSBET01cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXR1cCgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIEVuYWJsZSB0aGUgR1VJXG4gICAgICB0aGlzLmd1aUVuYWJsZWQgPSB0cnVlO1xuXG4gICAgICB0aGlzLl9jcmVhdGVXcmFwcGVycygpO1xuICAgICAgaWYgKHRoaXMuZWRpdE1vZGUgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUVkaXRCdXR0b24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZW1vdmVNYW5pcHVsYXRpb25ET00oKTtcblxuICAgICAgLy8gZGlzYWJsZSB0aGUgZ3VpXG4gICAgICB0aGlzLmd1aUVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIHRoZSBkaXYgb3ZlcmxheXMgdGhhdCBjb250YWluIHRoZSBET01cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVXcmFwcGVycygpIHtcbiAgICAvLyBsb2FkIHRoZSBtYW5pcHVsYXRvciBIVE1MIGVsZW1lbnRzLiBBbGwgc3R5bGluZyBkb25lIGluIGNzcy5cbiAgICBpZiAodGhpcy5tYW5pcHVsYXRpb25EaXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuY2xhc3NOYW1lID0gXCJ2aXMtbWFuaXB1bGF0aW9uXCI7XG4gICAgICBpZiAodGhpcy5lZGl0TW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgfVxuICAgICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5tYW5pcHVsYXRpb25EaXYpO1xuICAgIH1cblxuICAgIC8vIGNvbnRhaW5lciBmb3IgdGhlIGVkaXQgYnV0dG9uLlxuICAgIGlmICh0aGlzLmVkaXRNb2RlRGl2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdE1vZGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5lZGl0TW9kZURpdi5jbGFzc05hbWUgPSBcInZpcy1lZGl0LW1vZGVcIjtcbiAgICAgIGlmICh0aGlzLmVkaXRNb2RlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuZWRpdE1vZGVEaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0TW9kZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgfVxuICAgICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5lZGl0TW9kZURpdik7XG4gICAgfVxuXG4gICAgLy8gY29udGFpbmVyIGZvciB0aGUgY2xvc2UgZGl2IGJ1dHRvblxuICAgIGlmICh0aGlzLmNsb3NlRGl2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuICAgICAgdGhpcy5jbG9zZURpdi5jbGFzc05hbWUgPSBcInZpcy1jbG9zZVwiO1xuICAgICAgdGhpcy5jbG9zZURpdi5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiLFxuICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXT8uW1wiY2xvc2VcIl0gPz9cbiAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiY2xvc2VcIl1cbiAgICAgICk7XG4gICAgICB0aGlzLmNsb3NlRGl2LnN0eWxlLmRpc3BsYXkgPSB0aGlzLm1hbmlwdWxhdGlvbkRpdi5zdHlsZS5kaXNwbGF5O1xuICAgICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jbG9zZURpdik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlIGEgbmV3IHRhcmdldCBub2RlLiBVc2VkIGZvciBjcmVhdGluZyBuZXcgZWRnZXMgYW5kIGVkaXRpbmcgZWRnZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybnMge05vZGV9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0TmV3VGFyZ2V0Tm9kZSh4LCB5KSB7XG4gICAgY29uc3QgY29udHJvbE5vZGVTdHlsZSA9IGRlZXBFeHRlbmQoe30sIHRoaXMub3B0aW9ucy5jb250cm9sTm9kZVN0eWxlKTtcblxuICAgIGNvbnRyb2xOb2RlU3R5bGUuaWQgPSBcInRhcmdldE5vZGVcIiArIHJhbmRvbVVVSUQoKTtcbiAgICBjb250cm9sTm9kZVN0eWxlLmhpZGRlbiA9IGZhbHNlO1xuICAgIGNvbnRyb2xOb2RlU3R5bGUucGh5c2ljcyA9IGZhbHNlO1xuICAgIGNvbnRyb2xOb2RlU3R5bGUueCA9IHg7XG4gICAgY29udHJvbE5vZGVTdHlsZS55ID0geTtcblxuICAgIC8vIHdlIGhhdmUgdG8gZGVmaW5lIHRoZSBib3VuZGluZyBib3ggaW4gb3JkZXIgZm9yIHRoZSBub2RlcyB0byBiZSBkcmF3biBpbW1lZGlhdGVseVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGUoY29udHJvbE5vZGVTdHlsZSk7XG4gICAgbm9kZS5zaGFwZS5ib3VuZGluZ0JveCA9IHsgbGVmdDogeCwgcmlnaHQ6IHgsIHRvcDogeSwgYm90dG9tOiB5IH07XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGVkaXQgYnV0dG9uXG4gICAqL1xuICBfY3JlYXRlRWRpdEJ1dHRvbigpIHtcbiAgICAvLyByZXN0b3JlIGV2ZXJ5dGhpbmcgdG8gaXQncyBvcmlnaW5hbCBzdGF0ZSAoaWYgYXBwbGljYWJsZSlcbiAgICB0aGlzLl9jbGVhbigpO1xuXG4gICAgLy8gcmVzZXQgdGhlIG1hbmlwdWxhdGlvbkRPTVxuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NID0ge307XG5cbiAgICAvLyBlbXB0eSB0aGUgZWRpdE1vZGVEaXZcbiAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5lZGl0TW9kZURpdik7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGNvbnRlbnRzIGZvciB0aGUgZWRpdE1vZGUgYnV0dG9uXG4gICAgY29uc3QgbG9jYWxlID0gdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV07XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKFxuICAgICAgXCJlZGl0TW9kZVwiLFxuICAgICAgXCJ2aXMtZWRpdCB2aXMtZWRpdC1tb2RlXCIsXG4gICAgICBsb2NhbGVbXCJlZGl0XCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJlZGl0XCJdXG4gICAgKTtcbiAgICB0aGlzLmVkaXRNb2RlRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICAvLyBiaW5kIGEgaGFtbWVyIGxpc3RlbmVyIHRvIHRoZSBidXR0b24sIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHRvZ2dsZUVkaXRNb2RlLlxuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy50b2dnbGVFZGl0TW9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGZ1bmN0aW9uIGNsZWFucyB1cCBhZnRlciBldmVyeXRoaW5nIHRoaXMgbW9kdWxlIGRvZXMuIFRlbXBvcmFyeSBlbGVtZW50cywgZnVuY3Rpb25zIGFuZCBldmVudHMgYXJlIHJlbW92ZWQsIHBoeXNpY3MgcmVzdG9yZWQsIGhhbW1lcnMgcmVtb3ZlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICAvLyBub3QgaW4gbW9kZVxuICAgIHRoaXMuaW5Nb2RlID0gZmFsc2U7XG5cbiAgICAvLyBfY2xlYW4gdGhlIGRpdnNcbiAgICBpZiAodGhpcy5ndWlFbmFibGVkID09PSB0cnVlKSB7XG4gICAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5lZGl0TW9kZURpdik7XG4gICAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5tYW5pcHVsYXRpb25EaXYpO1xuXG4gICAgICAvLyByZW1vdmVzIGFsbCB0aGUgYmluZGluZ3MgYW5kIG92ZXJsb2Fkc1xuICAgICAgdGhpcy5fY2xlYW51cERPTUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHRlbXBvcmFyeSBub2RlcyBhbmQgZWRnZXNcbiAgICB0aGlzLl9jbGVhbnVwVGVtcG9yYXJ5Tm9kZXNBbmRFZGdlcygpO1xuXG4gICAgLy8gcmVzdG9yZSBvdmVybG9hZGVkIFVJIGZ1bmN0aW9uc1xuICAgIHRoaXMuX3VuYmluZFRlbXBvcmFyeVVJcygpO1xuXG4gICAgLy8gcmVtb3ZlIHRoZSB0ZW1wb3JhcnlFdmVudEZ1bmN0aW9uc1xuICAgIHRoaXMuX3VuYmluZFRlbXBvcmFyeUV2ZW50cygpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgcGh5c2ljcyBpZiByZXF1aXJlZFxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJyZXN0b3JlUGh5c2ljc1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFYWNoIGRvbSBlbGVtZW50IGhhcyBpdCdzIG93biBoYW1tZXIuIFRoZXkgYXJlIHN0b3JlZCBpbiB0aGlzLm1hbmlwdWxhdGlvbkhhbW1lcnMuIFRoaXMgY2xlYW5zIHRoZW0gdXAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW51cERPTUV2ZW50TGlzdGVuZXJzKCkge1xuICAgIC8vIF9jbGVhbiBET00gZXZlbnQgbGlzdGVuZXIgYmluZGluZ3NcbiAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2RvbUV2ZW50TGlzdGVuZXJDbGVhbnVwUXVldWUuc3BsaWNlKDApKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIERPTSBlbGVtZW50cyBjcmVhdGVkIGJ5IHRoaXMgbW9kdWxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZU1hbmlwdWxhdGlvbkRPTSgpIHtcbiAgICAvLyByZW1vdmVzIGFsbCB0aGUgYmluZGluZ3MgYW5kIG92ZXJsb2Fkc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICAvLyBlbXB0eSB0aGUgbWFuaXB1bGF0aW9uIGRpdnNcbiAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5tYW5pcHVsYXRpb25EaXYpO1xuICAgIHJlY3Vyc2l2ZURPTURlbGV0ZSh0aGlzLmVkaXRNb2RlRGl2KTtcbiAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5jbG9zZURpdik7XG5cbiAgICAvLyByZW1vdmUgdGhlIG1hbmlwdWxhdGlvbiBkaXZzXG4gICAgaWYgKHRoaXMubWFuaXB1bGF0aW9uRGl2KSB7XG4gICAgICB0aGlzLmNhbnZhcy5mcmFtZS5yZW1vdmVDaGlsZCh0aGlzLm1hbmlwdWxhdGlvbkRpdik7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXRNb2RlRGl2KSB7XG4gICAgICB0aGlzLmNhbnZhcy5mcmFtZS5yZW1vdmVDaGlsZCh0aGlzLmVkaXRNb2RlRGl2KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xvc2VEaXYpIHtcbiAgICAgIHRoaXMuY2FudmFzLmZyYW1lLnJlbW92ZUNoaWxkKHRoaXMuY2xvc2VEaXYpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgcmVmZXJlbmNlcyB0byB1bmRlZmluZWRcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRNb2RlRGl2ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2xvc2VEaXYgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIGEgc2VwZXJhdG9yIGxpbmUuIHRoZSBpbmRleCBpcyB0byBkaWZmZXJlbnRpYXRlIGluIHRoZSBtYW5pcHVsYXRpb24gZG9tXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaW5kZXg9MV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVTZXBlcmF0b3IoaW5kZXggPSAxKSB7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01bXCJzZXBlcmF0b3JMaW5lRGl2XCIgKyBpbmRleF0gPVxuICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtcInNlcGVyYXRvckxpbmVEaXZcIiArIGluZGV4XS5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtc2VwYXJhdG9yLWxpbmVcIjtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW1wic2VwZXJhdG9yTGluZURpdlwiICsgaW5kZXhdXG4gICAgKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgRE9NIGZ1bmN0aW9ucyBmb3IgYnV0dG9ucyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TG9jYWxlfSBsb2NhbGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVBZGROb2RlQnV0dG9uKGxvY2FsZSkge1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihcbiAgICAgIFwiYWRkTm9kZVwiLFxuICAgICAgXCJ2aXMtYWRkXCIsXG4gICAgICBsb2NhbGVbXCJhZGROb2RlXCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJhZGROb2RlXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5hZGROb2RlTW9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQWRkRWRnZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImFkZEVkZ2VcIixcbiAgICAgIFwidmlzLWNvbm5lY3RcIixcbiAgICAgIGxvY2FsZVtcImFkZEVkZ2VcIl0gfHwgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImFkZEVkZ2VcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLmFkZEVkZ2VNb2RlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TG9jYWxlfSBsb2NhbGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVFZGl0Tm9kZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImVkaXROb2RlXCIsXG4gICAgICBcInZpcy1lZGl0XCIsXG4gICAgICBsb2NhbGVbXCJlZGl0Tm9kZVwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdE5vZGVcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLmVkaXROb2RlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TG9jYWxlfSBsb2NhbGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVFZGl0RWRnZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImVkaXRFZGdlXCIsXG4gICAgICBcInZpcy1lZGl0XCIsXG4gICAgICBsb2NhbGVbXCJlZGl0RWRnZVwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdEVkZ2VcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLmVkaXRFZGdlTW9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlRGVsZXRlQnV0dG9uKGxvY2FsZSkge1xuICAgIGxldCBkZWxldGVCdG5DbGFzcztcbiAgICBpZiAodGhpcy5vcHRpb25zLnJ0bCkge1xuICAgICAgZGVsZXRlQnRuQ2xhc3MgPSBcInZpcy1kZWxldGUtcnRsXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUJ0bkNsYXNzID0gXCJ2aXMtZGVsZXRlXCI7XG4gICAgfVxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihcbiAgICAgIFwiZGVsZXRlXCIsXG4gICAgICBkZWxldGVCdG5DbGFzcyxcbiAgICAgIGxvY2FsZVtcImRlbFwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZGVsXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5kZWxldGVTZWxlY3RlZC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQmFja0J1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImJhY2tcIixcbiAgICAgIFwidmlzLWJhY2tcIixcbiAgICAgIGxvY2FsZVtcImJhY2tcIl0gfHwgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImJhY2tcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBpZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXG4gICAqIEBwYXJhbSB7bGFiZWx9IGxhYmVsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbENsYXNzTmFtZVxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQnV0dG9uKGlkLCBjbGFzc05hbWUsIGxhYmVsLCBsYWJlbENsYXNzTmFtZSA9IFwidmlzLWxhYmVsXCIpIHtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiRGl2XCJdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiRGl2XCJdLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiBcIiArIGNsYXNzTmFtZTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiTGFiZWxcIl0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW2lkICsgXCJMYWJlbFwiXS5jbGFzc05hbWUgPSBsYWJlbENsYXNzTmFtZTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiTGFiZWxcIl0uaW5uZXJUZXh0ID0gbGFiZWw7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01baWQgKyBcIkRpdlwiXS5hcHBlbmRDaGlsZChcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW2lkICsgXCJMYWJlbFwiXVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMubWFuaXB1bGF0aW9uRE9NW2lkICsgXCJEaXZcIl07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVEZXNjcmlwdGlvbihsYWJlbCkge1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW1wiZGVzY3JpcHRpb25MYWJlbFwiXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01bXCJkZXNjcmlwdGlvbkxhYmVsXCJdLmNsYXNzTmFtZSA9IFwidmlzLW5vbmVcIjtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtcImRlc2NyaXB0aW9uTGFiZWxcIl0uaW5uZXJUZXh0ID0gbGFiZWw7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuYXBwZW5kQ2hpbGQodGhpcy5tYW5pcHVsYXRpb25ET01bXCJkZXNjcmlwdGlvbkxhYmVsXCJdKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVuZCBvZiBET00gZnVuY3Rpb25zIGZvciBidXR0b25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqIHRoaXMgYmluZHMgYW4gZXZlbnQgdW50aWwgY2xlYW51cCBieSB0aGUgY2xlYW4gZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbmV3RnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF90ZW1wb3JhcnlCaW5kRXZlbnQoZXZlbnQsIG5ld0Z1bmN0aW9uKSB7XG4gICAgdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucy5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGJvdW5kRnVuY3Rpb246IG5ld0Z1bmN0aW9uLFxuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKGV2ZW50LCBuZXdGdW5jdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBvdmVycmlkZXMgYW4gVUkgZnVuY3Rpb24gdW50aWwgY2xlYW51cCBieSB0aGUgY2xlYW4gZnVuY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFVJZnVuY3Rpb25OYW1lXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG5ld0Z1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdGVtcG9yYXJ5QmluZFVJKFVJZnVuY3Rpb25OYW1lLCBuZXdGdW5jdGlvbikge1xuICAgIGlmICh0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnNbVUlmdW5jdGlvbk5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnNbVUlmdW5jdGlvbk5hbWVdID1cbiAgICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzW1VJZnVuY3Rpb25OYW1lXTtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVyc1tVSWZ1bmN0aW9uTmFtZV0gPSBuZXdGdW5jdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoaXMgVUkgZnVuY3Rpb24gZG9lcyBub3QgZXhpc3QuIFR5cG8/IFlvdSB0cmllZDogXCIgK1xuICAgICAgICAgIFVJZnVuY3Rpb25OYW1lICtcbiAgICAgICAgICBcIiBwb3NzaWJsZSBhcmU6IFwiICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyh0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSB0aGUgb3ZlcnJpZGRlbiBVSSBmdW5jdGlvbnMgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdW5iaW5kVGVtcG9yYXJ5VUlzKCkge1xuICAgIGZvciAoY29uc3QgZnVuY3Rpb25OYW1lIGluIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuICAgICAgICAgIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnMsXG4gICAgICAgICAgZnVuY3Rpb25OYW1lXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnNbZnVuY3Rpb25OYW1lXSA9XG4gICAgICAgICAgdGhpcy50ZW1wb3JhcnlVSUZ1bmN0aW9uc1tmdW5jdGlvbk5hbWVdO1xuICAgICAgICBkZWxldGUgdGhpcy50ZW1wb3JhcnlVSUZ1bmN0aW9uc1tmdW5jdGlvbk5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnRlbXBvcmFyeVVJRnVuY3Rpb25zID0ge307XG4gIH1cblxuICAvKipcbiAgICogVW5iaW5kIHRoZSBldmVudHMgY3JlYXRlZCBieSBfdGVtcG9yYXJ5QmluZEV2ZW50XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdW5iaW5kVGVtcG9yYXJ5RXZlbnRzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZXZlbnROYW1lID0gdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9uc1tpXS5ldmVudDtcbiAgICAgIGNvbnN0IGJvdW5kRnVuY3Rpb24gPSB0aGlzLnRlbXBvcmFyeUV2ZW50RnVuY3Rpb25zW2ldLmJvdW5kRnVuY3Rpb247XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoZXZlbnROYW1lLCBib3VuZEZ1bmN0aW9uKTtcbiAgICB9XG4gICAgdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgYW4gaGFtbWVyIGluc3RhbmNlIHRvIGEgRE9NIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZG9tRWxlbWVudFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBib3VuZEZ1bmN0aW9uXG4gICAqL1xuICBfYmluZEVsZW1lbnRFdmVudHMoZG9tRWxlbWVudCwgYm91bmRGdW5jdGlvbikge1xuICAgIC8vIEJpbmQgdG91Y2ggZXZlbnRzLlxuICAgIGNvbnN0IGhhbW1lciA9IG5ldyBIYW1tZXIoZG9tRWxlbWVudCwge30pO1xuICAgIG9uVG91Y2goaGFtbWVyLCBib3VuZEZ1bmN0aW9uKTtcbiAgICB0aGlzLl9kb21FdmVudExpc3RlbmVyQ2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgaGFtbWVyLmRlc3Ryb3koKTtcbiAgICB9KTtcblxuICAgIC8vIEJpbmQga2V5Ym9hcmQgZXZlbnRzLlxuICAgIGNvbnN0IGtleXVwTGlzdGVuZXIgPSAoeyBrZXlDb2RlLCBrZXkgfSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gXCJFbnRlclwiIHx8IGtleSA9PT0gXCIgXCIgfHwga2V5Q29kZSA9PT0gMTMgfHwga2V5Q29kZSA9PT0gMzIpIHtcbiAgICAgICAgYm91bmRGdW5jdGlvbigpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwga2V5dXBMaXN0ZW5lciwgZmFsc2UpO1xuICAgIHRoaXMuX2RvbUV2ZW50TGlzdGVuZXJDbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgICBkb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBrZXl1cExpc3RlbmVyLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTmVhdGx5IGNsZWFuIHVwIHRlbXBvcmFyeSBlZGdlcyBhbmQgbm9kZXNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbnVwVGVtcG9yYXJ5Tm9kZXNBbmRFZGdlcygpIHtcbiAgICAvLyBfY2xlYW4gdGVtcG9yYXJ5IGVkZ2VzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRlbXBvcmFyeUlkcy5lZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5ib2R5LmVkZ2VzW3RoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzW2ldXS5kaXNjb25uZWN0KCk7XG4gICAgICBkZWxldGUgdGhpcy5ib2R5LmVkZ2VzW3RoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzW2ldXTtcbiAgICAgIGNvbnN0IGluZGV4VGVtcEVkZ2UgPSB0aGlzLmJvZHkuZWRnZUluZGljZXMuaW5kZXhPZihcbiAgICAgICAgdGhpcy50ZW1wb3JhcnlJZHMuZWRnZXNbaV1cbiAgICAgICk7XG4gICAgICBpZiAoaW5kZXhUZW1wRWRnZSAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLnNwbGljZShpbmRleFRlbXBFZGdlLCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBfY2xlYW4gdGVtcG9yYXJ5IG5vZGVzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlc1tpXV07XG4gICAgICBjb25zdCBpbmRleFRlbXBOb2RlID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmluZGV4T2YoXG4gICAgICAgIHRoaXMudGVtcG9yYXJ5SWRzLm5vZGVzW2ldXG4gICAgICApO1xuICAgICAgaWYgKGluZGV4VGVtcE5vZGUgIT09IC0xKSB7XG4gICAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5zcGxpY2UoaW5kZXhUZW1wTm9kZSwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50ZW1wb3JhcnlJZHMgPSB7IG5vZGVzOiBbXSwgZWRnZXM6IFtdIH07XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRURJVCBFREdFIEZVTkNUSU9OUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqIHRoZSB0b3VjaCBpcyB1c2VkIHRvIGdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGluaXRpYWwgY2xpY2tcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29udHJvbE5vZGVUb3VjaChldmVudCkge1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgIHRoaXMubGFzdFRvdWNoID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgdGhpcy5sYXN0VG91Y2gudHJhbnNsYXRpb24gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbik7IC8vIGNvcHkgdGhlIG9iamVjdFxuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBkcmFnIHN0YXJ0IGlzIHVzZWQgdG8gbWFyayBvbmUgb2YgdGhlIGNvbnRyb2wgbm9kZXMgYXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29udHJvbE5vZGVEcmFnU3RhcnQoKSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMubGFzdFRvdWNoO1xuICAgIGNvbnN0IHBvaW50ZXJPYmogPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpO1xuICAgIGNvbnN0IGZyb20gPSB0aGlzLmJvZHkubm9kZXNbdGhpcy50ZW1wb3JhcnlJZHMubm9kZXNbMF1dO1xuICAgIGNvbnN0IHRvID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMudGVtcG9yYXJ5SWRzLm5vZGVzWzFdXTtcbiAgICBjb25zdCBlZGdlID0gdGhpcy5ib2R5LmVkZ2VzW3RoaXMuZWRnZUJlaW5nRWRpdGVkSWRdO1xuICAgIHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGZyb21TZWxlY3QgPSBmcm9tLmlzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopO1xuICAgIGNvbnN0IHRvU2VsZWN0ID0gdG8uaXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaik7XG5cbiAgICBpZiAoZnJvbVNlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlID0gZnJvbTtcbiAgICAgIGVkZ2UuZWRnZVR5cGUuZnJvbSA9IGZyb207XG4gICAgfSBlbHNlIGlmICh0b1NlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlID0gdG87XG4gICAgICBlZGdlLmVkZ2VUeXBlLnRvID0gdG87XG4gICAgfVxuXG4gICAgLy8gd2UgdXNlIHRoZSBzZWxlY3Rpb24gdG8gZmluZCB0aGUgbm9kZSB0aGF0IGlzIGJlaW5nIGRyYWdnZWQuIFdlIGV4cGxpY2l0bHkgc2VsZWN0IGl0IGhlcmUuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0T2JqZWN0KHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvKipcbiAgICogZHJhZ2dpbmcgdGhlIGNvbnRyb2wgbm9kZXMgb3IgdGhlIGNhbnZhc1xuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb250cm9sTm9kZURyYWcoZXZlbnQpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiZGlzYWJsZVBoeXNpY3NcIik7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuYm9keS5mdW5jdGlvbnMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIGNvbnN0IHBvcyA9IHRoaXMuY2FudmFzLkRPTXRvQ2FudmFzKHBvaW50ZXIpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlLnggPSBwb3MueDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZS55ID0gcG9zLnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyLm9uRHJhZyhldmVudCk7XG4gICAgfVxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNvbm5lY3Rpbmcgb3IgcmVzdG9yaW5nIHRoZSBjb250cm9sIG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb250cm9sTm9kZURyYWdFbmQoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgY29uc3QgcG9pbnRlck9iaiA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5fcG9pbnRlclRvUG9zaXRpb25PYmplY3QocG9pbnRlcik7XG4gICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1t0aGlzLmVkZ2VCZWluZ0VkaXRlZElkXTtcbiAgICAvLyBpZiB0aGUgbm9kZSB0aGF0IHdhcyBkcmFnZ2VkIGlzIG5vdCBhIGNvbnRyb2wgbm9kZSwgcmV0dXJuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gd2UgdXNlIHRoZSBzZWxlY3Rpb24gdG8gZmluZCB0aGUgbm9kZSB0aGF0IGlzIGJlaW5nIGRyYWdnZWQuIFdlIGV4cGxpY2l0bHkgREVzZWxlY3QgdGhlIGNvbnRyb2wgbm9kZSBoZXJlLlxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZUlkcyA9XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopO1xuICAgIGxldCBub2RlID0gdW5kZWZpbmVkO1xuICAgIGZvciAobGV0IGkgPSBvdmVybGFwcGluZ05vZGVJZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChvdmVybGFwcGluZ05vZGVJZHNbaV0gIT09IHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZS5pZCkge1xuICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW292ZXJsYXBwaW5nTm9kZUlkc1tpXV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBwZXJmb3JtIHRoZSBjb25uZWN0aW9uXG4gICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG5vZGUuaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgIGFsZXJ0KFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdW1wiY3JlYXRlRWRnZUVycm9yXCJdIHx8XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiY3JlYXRlRWRnZUVycm9yXCJdXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmcm9tID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMudGVtcG9yYXJ5SWRzLm5vZGVzWzBdXTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZS5pZCA9PT0gZnJvbS5pZCkge1xuICAgICAgICAgIHRoaXMuX3BlcmZvcm1FZGl0RWRnZShub2RlLmlkLCBlZGdlLnRvLmlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9wZXJmb3JtRWRpdEVkZ2UoZWRnZS5mcm9tLmlkLCBub2RlLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlZGdlLnVwZGF0ZUVkZ2VUeXBlKCk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVzdG9yZVBoeXNpY3NcIik7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EIE9GIEVESVQgRURHRSBGVU5DVElPTlMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQUREIEVER0UgRlVOQ1RJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cbiAgLyoqXG4gICAqIHRoZSBmdW5jdGlvbiBib3VuZCB0byB0aGUgc2VsZWN0aW9uIGV2ZW50LiBJdCBjaGVja3MgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIGNsdXN0ZXIgYW5kIGNoYW5nZXMgdGhlIGRlc2NyaXB0aW9uXG4gICAqIHRvIHdhbGsgdGhlIHVzZXIgdGhyb3VnaCB0aGUgcHJvY2Vzcy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVDb25uZWN0KGV2ZW50KSB7XG4gICAgLy8gY2hlY2sgdG8gYXZvaWQgZG91YmxlIGZpcmVpbmcgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICBpZiAobmV3IERhdGUoKS52YWx1ZU9mKCkgLSB0aGlzLnRvdWNoVGltZSA+IDEwMCkge1xuICAgICAgdGhpcy5sYXN0VG91Y2ggPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICAgIHRoaXMubGFzdFRvdWNoLnRyYW5zbGF0aW9uID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uXG4gICAgICApOyAvLyBjb3B5IHRoZSBvYmplY3RcblxuICAgICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIuZHJhZy5wb2ludGVyID0gdGhpcy5sYXN0VG91Y2g7IC8vIERyYWcgcG9pbnRlciBpcyBub3QgdXBkYXRlZCB3aGVuIGFkZGluZyBlZGdlc1xuICAgICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIuZHJhZy50cmFuc2xhdGlvbiA9IHRoaXMubGFzdFRvdWNoLnRyYW5zbGF0aW9uO1xuXG4gICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5sYXN0VG91Y2g7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldE5vZGVBdChwb2ludGVyKTtcblxuICAgICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobm9kZS5pc0NsdXN0ZXIgPT09IHRydWUpIHtcbiAgICAgICAgICBhbGVydChcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdW1wiY3JlYXRlRWRnZUVycm9yXCJdIHx8XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJjcmVhdGVFZGdlRXJyb3JcIl1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNyZWF0ZSBhIG5vZGUgdGhlIHRlbXBvcmFyeSBsaW5lIGNhbiBsb29rIGF0XG4gICAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuX2dldE5ld1RhcmdldE5vZGUobm9kZS54LCBub2RlLnkpO1xuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1t0YXJnZXROb2RlLmlkXSA9IHRhcmdldE5vZGU7XG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLnB1c2godGFyZ2V0Tm9kZS5pZCk7XG5cbiAgICAgICAgICAvLyBjcmVhdGUgYSB0ZW1wb3JhcnkgZWRnZVxuICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb25FZGdlID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVFZGdlKHtcbiAgICAgICAgICAgIGlkOiBcImNvbm5lY3Rpb25FZGdlXCIgKyByYW5kb21VVUlEKCksXG4gICAgICAgICAgICBmcm9tOiBub2RlLmlkLFxuICAgICAgICAgICAgdG86IHRhcmdldE5vZGUuaWQsXG4gICAgICAgICAgICBwaHlzaWNzOiBmYWxzZSxcbiAgICAgICAgICAgIHNtb290aDoge1xuICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICB0eXBlOiBcImNvbnRpbnVvdXNcIixcbiAgICAgICAgICAgICAgcm91bmRuZXNzOiAwLjUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuYm9keS5lZGdlc1tjb25uZWN0aW9uRWRnZS5pZF0gPSBjb25uZWN0aW9uRWRnZTtcbiAgICAgICAgICB0aGlzLmJvZHkuZWRnZUluZGljZXMucHVzaChjb25uZWN0aW9uRWRnZS5pZCk7XG5cbiAgICAgICAgICB0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5wdXNoKHRhcmdldE5vZGUuaWQpO1xuICAgICAgICAgIHRoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzLnB1c2goY29ubmVjdGlvbkVkZ2UuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnRvdWNoVGltZSA9IG5ldyBEYXRlKCkudmFsdWVPZigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYWdDb250cm9sTm9kZShldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcblxuICAgIGNvbnN0IHBvaW50ZXJPYmogPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpO1xuICAgIC8vIHJlbWVtYmVyIHRoZSBlZGdlIGlkXG4gICAgbGV0IGNvbm5lY3RGcm9tSWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbm5lY3RGcm9tSWQgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy50ZW1wb3JhcnlJZHMuZWRnZXNbMF1dLmZyb21JZDtcbiAgICB9XG5cbiAgICAvLyBnZXQgdGhlIG92ZXJsYXBwaW5nIG5vZGUgYnV0IE5PVCB0aGUgdGVtcG9yYXJ5IG5vZGU7XG4gICAgY29uc3Qgb3ZlcmxhcHBpbmdOb2RlSWRzID1cbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5fZ2V0QWxsTm9kZXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaik7XG4gICAgbGV0IG5vZGUgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgaSA9IG92ZXJsYXBwaW5nTm9kZUlkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgLy8gaWYgdGhlIG5vZGUgaWQgaXMgTk9UIGEgdGVtcG9yYXJ5IG5vZGUsIGFjY2VwdCB0aGUgbm9kZS5cbiAgICAgIGlmICh0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5pbmRleE9mKG92ZXJsYXBwaW5nTm9kZUlkc1tpXSkgPT09IC0xKSB7XG4gICAgICAgIG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbb3ZlcmxhcHBpbmdOb2RlSWRzW2ldXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXZlbnQuY29udHJvbEVkZ2UgPSB7IGZyb206IGNvbm5lY3RGcm9tSWQsIHRvOiBub2RlID8gbm9kZS5pZCA6IHVuZGVmaW5lZCB9O1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICBcImNvbnRyb2xOb2RlRHJhZ2dpbmdcIixcbiAgICAgIGV2ZW50LFxuICAgICAgcG9pbnRlclxuICAgICk7XG5cbiAgICBpZiAodGhpcy50ZW1wb3JhcnlJZHMubm9kZXNbMF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlc1swXV07IC8vIHRoZXJlIGlzIG9ubHkgb25lIHRlbXAgbm9kZSBpbiB0aGUgYWRkIGVkZ2UgbW9kZS5cbiAgICAgIHRhcmdldE5vZGUueCA9IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCk7XG4gICAgICB0YXJnZXROb2RlLnkgPSB0aGlzLmNhbnZhcy5fWWNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLnkpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyLm9uRHJhZyhldmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbm5lY3QgdGhlIG5ldyBlZGdlIHRvIHRoZSB0YXJnZXQgaWYgb25lIGV4aXN0cywgb3RoZXJ3aXNlIHJlbW92ZSB0ZW1wIGxpbmVcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmluaXNoQ29ubmVjdChldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICBjb25zdCBwb2ludGVyT2JqID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKTtcblxuICAgIC8vIHJlbWVtYmVyIHRoZSBlZGdlIGlkXG4gICAgbGV0IGNvbm5lY3RGcm9tSWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbm5lY3RGcm9tSWQgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy50ZW1wb3JhcnlJZHMuZWRnZXNbMF1dLmZyb21JZDtcbiAgICB9XG5cbiAgICAvLyBnZXQgdGhlIG92ZXJsYXBwaW5nIG5vZGUgYnV0IE5PVCB0aGUgdGVtcG9yYXJ5IG5vZGU7XG4gICAgY29uc3Qgb3ZlcmxhcHBpbmdOb2RlSWRzID1cbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5fZ2V0QWxsTm9kZXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaik7XG4gICAgbGV0IG5vZGUgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgaSA9IG92ZXJsYXBwaW5nTm9kZUlkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgLy8gaWYgdGhlIG5vZGUgaWQgaXMgTk9UIGEgdGVtcG9yYXJ5IG5vZGUsIGFjY2VwdCB0aGUgbm9kZS5cbiAgICAgIGlmICh0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5pbmRleE9mKG92ZXJsYXBwaW5nTm9kZUlkc1tpXSkgPT09IC0xKSB7XG4gICAgICAgIG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbb3ZlcmxhcHBpbmdOb2RlSWRzW2ldXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdGVtcG9yYXJ5IG5vZGVzIGFuZCBlZGdlcy5cbiAgICB0aGlzLl9jbGVhbnVwVGVtcG9yYXJ5Tm9kZXNBbmRFZGdlcygpO1xuXG4gICAgLy8gcGVyZm9ybSB0aGUgY29ubmVjdGlvblxuICAgIGlmIChub2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChub2RlLmlzQ2x1c3RlciA9PT0gdHJ1ZSkge1xuICAgICAgICBhbGVydChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXVtcImNyZWF0ZUVkZ2VFcnJvclwiXSB8fFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImNyZWF0ZUVkZ2VFcnJvclwiXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tjb25uZWN0RnJvbUlkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW25vZGUuaWRdICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fcGVyZm9ybUFkZEVkZ2UoY29ubmVjdEZyb21JZCwgbm9kZS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBldmVudC5jb250cm9sRWRnZSA9IHsgZnJvbTogY29ubmVjdEZyb21JZCwgdG86IG5vZGUgPyBub2RlLmlkIDogdW5kZWZpbmVkIH07XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgIFwiY29udHJvbE5vZGVEcmFnRW5kXCIsXG4gICAgICBldmVudCxcbiAgICAgIHBvaW50ZXJcbiAgICApO1xuXG4gICAgLy8gTm8gbmVlZCB0byBkbyBfZ2VuZXJhdGVjbGlja2V2ZW50KCdkcmFnRW5kJykgaGVyZSwgdGhlIHJlZ3VsYXIgZHJhZ0VuZCBldmVudCBmaXJlcy5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYWdTdGFydEVkZ2UoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5sYXN0VG91Y2g7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgIFwiZHJhZ1N0YXJ0XCIsXG4gICAgICBldmVudCxcbiAgICAgIHBvaW50ZXIsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQgT0YgQUREIEVER0UgRlVOQ1RJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQZXJmb3JtaW5nIGFsbCB0aGUgYWN0dWFsIGRhdGEgbWFuaXB1bGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqIEFkZHMgYSBub2RlIG9uIHRoZSBzcGVjaWZpZWQgbG9jYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNsaWNrRGF0YVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BlcmZvcm1BZGROb2RlKGNsaWNrRGF0YSkge1xuICAgIGNvbnN0IGRlZmF1bHREYXRhID0ge1xuICAgICAgaWQ6IHJhbmRvbVVVSUQoKSxcbiAgICAgIHg6IGNsaWNrRGF0YS5wb2ludGVyLmNhbnZhcy54LFxuICAgICAgeTogY2xpY2tEYXRhLnBvaW50ZXIuY2FudmFzLnksXG4gICAgICBsYWJlbDogXCJuZXdcIixcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuYWRkTm9kZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFkZE5vZGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5hZGROb2RlKGRlZmF1bHREYXRhLCAoZmluYWxpemVkRGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IG51bGwgJiZcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdGhpcy5pbk1vZGUgPT09IFwiYWRkTm9kZVwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBpZiBmb3Igd2hhdGV2ZXIgcmVhc29uIHRoZSBtb2RlIGhhcyBjaGFuZ2VzIChkdWUgdG8gZGF0YXNldCBjaGFuZ2UpIGRpc3JlZ2FyZCB0aGUgY2FsbGJhY2tcbiAgICAgICAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldERhdGFTZXQoKS5hZGQoZmluYWxpemVkRGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgZnVuY3Rpb24gZm9yIGFkZCBkb2VzIG5vdCBzdXBwb3J0IHR3byBhcmd1bWVudHMgKGRhdGEsY2FsbGJhY2spXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpLmFkZChkZWZhdWx0RGF0YSk7XG4gICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY29ubmVjdCB0d28gbm9kZXMgd2l0aCBhIG5ldyBlZGdlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IHNvdXJjZU5vZGVJZFxuICAgKiBAcGFyYW0ge05vZGUuaWR9IHRhcmdldE5vZGVJZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BlcmZvcm1BZGRFZGdlKHNvdXJjZU5vZGVJZCwgdGFyZ2V0Tm9kZUlkKSB7XG4gICAgY29uc3QgZGVmYXVsdERhdGEgPSB7IGZyb206IHNvdXJjZU5vZGVJZCwgdG86IHRhcmdldE5vZGVJZCB9O1xuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmFkZEVkZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hZGRFZGdlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuYWRkRWRnZShkZWZhdWx0RGF0YSwgKGZpbmFsaXplZERhdGEpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhICE9PSBudWxsICYmXG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHRoaXMuaW5Nb2RlID09PSBcImFkZEVkZ2VcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrXG4gICAgICAgICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkuYWRkKGZpbmFsaXplZERhdGEpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsKCk7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBjb25uZWN0IGRvZXMgbm90IHN1cHBvcnQgdHdvIGFyZ3VtZW50cyAoZGF0YSxjYWxsYmFjaylcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkuYWRkKGRlZmF1bHREYXRhKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNvbm5lY3QgdHdvIG5vZGVzIHdpdGggYSBuZXcgZWRnZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBzb3VyY2VOb2RlSWRcbiAgICogQHBhcmFtIHtOb2RlLmlkfSB0YXJnZXROb2RlSWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtRWRpdEVkZ2Uoc291cmNlTm9kZUlkLCB0YXJnZXROb2RlSWQpIHtcbiAgICBjb25zdCBkZWZhdWx0RGF0YSA9IHtcbiAgICAgIGlkOiB0aGlzLmVkZ2VCZWluZ0VkaXRlZElkLFxuICAgICAgZnJvbTogc291cmNlTm9kZUlkLFxuICAgICAgdG86IHRhcmdldE5vZGVJZCxcbiAgICAgIGxhYmVsOiB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXQodGhpcy5lZGdlQmVpbmdFZGl0ZWRJZCkubGFiZWwsXG4gICAgfTtcbiAgICBsZXQgZWVGdW5jdCA9IHRoaXMub3B0aW9ucy5lZGl0RWRnZTtcbiAgICBpZiAodHlwZW9mIGVlRnVuY3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGVlRnVuY3QgPSBlZUZ1bmN0LmVkaXRXaXRob3V0RHJhZztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlZUZ1bmN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGlmIChlZUZ1bmN0Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICBlZUZ1bmN0KGRlZmF1bHREYXRhLCAoZmluYWxpemVkRGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgdGhpcy5pbk1vZGUgIT09IFwiZWRpdEVkZ2VcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbZGVmYXVsdERhdGEuaWRdLnVwZGF0ZUVkZ2VUeXBlKCk7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkudXBkYXRlKGZpbmFsaXplZERhdGEpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsKCk7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBlZGl0IGRvZXMgbm90IHN1cHBvcnQgdHdvIGFyZ3VtZW50cyAoZGF0YSwgY2FsbGJhY2spXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0RGF0YVNldCgpLnVwZGF0ZShkZWZhdWx0RGF0YSk7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwoKTtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYW5pcHVsYXRpb25TeXN0ZW07XG4iLCAiaW1wb3J0IHtcbiAgQ29uZmlndXJhdG9yQ29uZmlnLFxuICBDb25maWd1cmF0b3JIaWRlT3B0aW9uLFxuICBPcHRpb25zQ29uZmlnLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogVGhpcyBvYmplY3QgY29udGFpbnMgYWxsIHBvc3NpYmxlIG9wdGlvbnMuIEl0IHdpbGwgY2hlY2sgaWYgdGhlIHR5cGVzIGFyZSBjb3JyZWN0LCBpZiByZXF1aXJlZCBpZiB0aGUgb3B0aW9uIGlzIG9uZVxuICogb2YgdGhlIGFsbG93ZWQgdmFsdWVzLlxuICpcbiAqIF9fYW55X18gbWVhbnMgdGhhdCB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgbWF0dGVyLlxuICogX190eXBlX18gaXMgYSByZXF1aXJlZCBmaWVsZCBmb3IgYWxsIG9iamVjdHMgYW5kIGNvbnRhaW5zIHRoZSBhbGxvd2VkIHR5cGVzIG9mIGFsbCBvYmplY3RzXG4gKi9cbmNvbnN0IHN0cmluZyA9IFwic3RyaW5nXCI7XG5jb25zdCBib29sID0gXCJib29sZWFuXCI7XG5jb25zdCBudW1iZXIgPSBcIm51bWJlclwiO1xuY29uc3QgYXJyYXkgPSBcImFycmF5XCI7XG5jb25zdCBvYmplY3QgPSBcIm9iamVjdFwiOyAvLyBzaG91bGQgb25seSBiZSBpbiBhIF9fdHlwZV9fIHByb3BlcnR5XG5jb25zdCBkb20gPSBcImRvbVwiO1xuY29uc3QgYW55ID0gXCJhbnlcIjtcblxuLy8gTGlzdCBvZiBlbmRwb2ludHNcbmNvbnN0IGVuZFBvaW50cyA9IFtcbiAgXCJhcnJvd1wiLFxuICBcImJhclwiLFxuICBcImJveFwiLFxuICBcImNpcmNsZVwiLFxuICBcImNyb3dcIixcbiAgXCJjdXJ2ZVwiLFxuICBcImRpYW1vbmRcIixcbiAgXCJpbWFnZVwiLFxuICBcImludl9jdXJ2ZVwiLFxuICBcImludl90cmlhbmdsZVwiLFxuICBcInRyaWFuZ2xlXCIsXG4gIFwidmVlXCIsXG5dO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gLS0gVGhlIF9fKl9fIGZvcm1hdCBpcyB1c2VkIHRvIHByZXZlbnQgY29sbGlzaW9ucyB3aXRoIGFjdHVhbCBvcHRpb24gbmFtZXMuICovXG5jb25zdCBub2RlT3B0aW9uczogT3B0aW9uc0NvbmZpZyA9IHtcbiAgYm9yZGVyV2lkdGg6IHsgbnVtYmVyIH0sXG4gIGJvcmRlcldpZHRoU2VsZWN0ZWQ6IHsgbnVtYmVyLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgYnJva2VuSW1hZ2U6IHsgc3RyaW5nLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgY2hvc2VuOiB7XG4gICAgbGFiZWw6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIG5vZGU6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuICBjb2xvcjoge1xuICAgIGJvcmRlcjogeyBzdHJpbmcgfSxcbiAgICBiYWNrZ3JvdW5kOiB7IHN0cmluZyB9LFxuICAgIGhpZ2hsaWdodDoge1xuICAgICAgYm9yZGVyOiB7IHN0cmluZyB9LFxuICAgICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBob3Zlcjoge1xuICAgICAgYm9yZGVyOiB7IHN0cmluZyB9LFxuICAgICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICB9LFxuICBvcGFjaXR5OiB7IG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIGZpeGVkOiB7XG4gICAgeDogeyBib29sZWFuOiBib29sIH0sXG4gICAgeTogeyBib29sZWFuOiBib29sIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gIH0sXG4gIGZvbnQ6IHtcbiAgICBhbGlnbjogeyBzdHJpbmcgfSxcbiAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICBzdHJva2VXaWR0aDogeyBudW1iZXIgfSwgLy8gcHhcbiAgICBzdHJva2VDb2xvcjogeyBzdHJpbmcgfSxcbiAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgIG11bHRpOiB7IGJvb2xlYW46IGJvb2wsIHN0cmluZyB9LFxuICAgIGJvbGQ6IHtcbiAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgc2l6ZTogeyBudW1iZXIgfSwgLy8gcHhcbiAgICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgICBtb2Q6IHsgc3RyaW5nIH0sXG4gICAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICB9LFxuICAgIGJvbGRpdGFsOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBpdGFsOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBtb25vOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICB9LFxuICBncm91cDogeyBzdHJpbmcsIG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIGhlaWdodENvbnN0cmFpbnQ6IHtcbiAgICBtaW5pbXVtOiB7IG51bWJlciB9LFxuICAgIHZhbGlnbjogeyBzdHJpbmcgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wsIG51bWJlciB9LFxuICB9LFxuICBoaWRkZW46IHsgYm9vbGVhbjogYm9vbCB9LFxuICBpY29uOiB7XG4gICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICBjb2RlOiB7IHN0cmluZyB9LCAvLydcXHVmMDA3JyxcbiAgICBzaXplOiB7IG51bWJlciB9LCAvLzUwLFxuICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgIHdlaWdodDogeyBzdHJpbmcsIG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICB9LFxuICBpZDogeyBzdHJpbmcsIG51bWJlciB9LFxuICBpbWFnZToge1xuICAgIHNlbGVjdGVkOiB7IHN0cmluZywgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sIC8vIC0tPiBVUkxcbiAgICB1bnNlbGVjdGVkOiB7IHN0cmluZywgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sIC8vIC0tPiBVUkxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICB9LFxuICBpbWFnZVBhZGRpbmc6IHtcbiAgICB0b3A6IHsgbnVtYmVyIH0sXG4gICAgcmlnaHQ6IHsgbnVtYmVyIH0sXG4gICAgYm90dG9tOiB7IG51bWJlciB9LFxuICAgIGxlZnQ6IHsgbnVtYmVyIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBudW1iZXIgfSxcbiAgfSxcbiAgbGFiZWw6IHsgc3RyaW5nLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgbGFiZWxIaWdobGlnaHRCb2xkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgbGV2ZWw6IHsgbnVtYmVyLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgbWFyZ2luOiB7XG4gICAgdG9wOiB7IG51bWJlciB9LFxuICAgIHJpZ2h0OiB7IG51bWJlciB9LFxuICAgIGJvdHRvbTogeyBudW1iZXIgfSxcbiAgICBsZWZ0OiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgbnVtYmVyIH0sXG4gIH0sXG4gIG1hc3M6IHsgbnVtYmVyIH0sXG4gIHBoeXNpY3M6IHsgYm9vbGVhbjogYm9vbCB9LFxuICBzY2FsaW5nOiB7XG4gICAgbWluOiB7IG51bWJlciB9LFxuICAgIG1heDogeyBudW1iZXIgfSxcbiAgICBsYWJlbDoge1xuICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBtaW46IHsgbnVtYmVyIH0sXG4gICAgICBtYXg6IHsgbnVtYmVyIH0sXG4gICAgICBtYXhWaXNpYmxlOiB7IG51bWJlciB9LFxuICAgICAgZHJhd1RocmVzaG9sZDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgY3VzdG9tU2NhbGluZ0Z1bmN0aW9uOiB7IGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgc2hhZG93OiB7XG4gICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgc2l6ZTogeyBudW1iZXIgfSxcbiAgICB4OiB7IG51bWJlciB9LFxuICAgIHk6IHsgbnVtYmVyIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gIH0sXG4gIHNoYXBlOiB7XG4gICAgc3RyaW5nOiBbXG4gICAgICBcImN1c3RvbVwiLFxuICAgICAgXCJlbGxpcHNlXCIsXG4gICAgICBcImNpcmNsZVwiLFxuICAgICAgXCJkYXRhYmFzZVwiLFxuICAgICAgXCJib3hcIixcbiAgICAgIFwidGV4dFwiLFxuICAgICAgXCJpbWFnZVwiLFxuICAgICAgXCJjaXJjdWxhckltYWdlXCIsXG4gICAgICBcImRpYW1vbmRcIixcbiAgICAgIFwiZG90XCIsXG4gICAgICBcInN0YXJcIixcbiAgICAgIFwidHJpYW5nbGVcIixcbiAgICAgIFwidHJpYW5nbGVEb3duXCIsXG4gICAgICBcInNxdWFyZVwiLFxuICAgICAgXCJpY29uXCIsXG4gICAgICBcImhleGFnb25cIixcbiAgICBdLFxuICB9LFxuICBjdHhSZW5kZXJlcjogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gIHNoYXBlUHJvcGVydGllczoge1xuICAgIGJvcmRlckRhc2hlczogeyBib29sZWFuOiBib29sLCBhcnJheSB9LFxuICAgIGJvcmRlclJhZGl1czogeyBudW1iZXIgfSxcbiAgICBpbnRlcnBvbGF0aW9uOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICB1c2VJbWFnZVNpemU6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHVzZUJvcmRlcldpdGhJbWFnZTogeyBib29sZWFuOiBib29sIH0sXG4gICAgY29vcmRpbmF0ZU9yaWdpbjogeyBzdHJpbmc6IFtcImNlbnRlclwiLCBcInRvcC1sZWZ0XCJdIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gIH0sXG4gIHNpemU6IHsgbnVtYmVyIH0sXG4gIHRpdGxlOiB7IHN0cmluZywgZG9tLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgdmFsdWU6IHsgbnVtYmVyLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgd2lkdGhDb25zdHJhaW50OiB7XG4gICAgbWluaW11bTogeyBudW1iZXIgfSxcbiAgICBtYXhpbXVtOiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCwgbnVtYmVyIH0sXG4gIH0sXG4gIHg6IHsgbnVtYmVyIH0sXG4gIHk6IHsgbnVtYmVyIH0sXG4gIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxufTtcbmNvbnN0IGFsbE9wdGlvbnM6IE9wdGlvbnNDb25maWcgPSB7XG4gIGNvbmZpZ3VyZToge1xuICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGZpbHRlcjogeyBib29sZWFuOiBib29sLCBzdHJpbmcsIGFycmF5LCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgY29udGFpbmVyOiB7IGRvbSB9LFxuICAgIHNob3dCdXR0b246IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCwgc3RyaW5nLCBhcnJheSwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICB9LFxuICBlZGdlczoge1xuICAgIGFycm93czoge1xuICAgICAgdG86IHtcbiAgICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICAgIHNjYWxlRmFjdG9yOiB7IG51bWJlciB9LFxuICAgICAgICB0eXBlOiB7IHN0cmluZzogZW5kUG9pbnRzIH0sXG4gICAgICAgIGltYWdlSGVpZ2h0OiB7IG51bWJlciB9LFxuICAgICAgICBpbWFnZVdpZHRoOiB7IG51bWJlciB9LFxuICAgICAgICBzcmM6IHsgc3RyaW5nIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgfSxcbiAgICAgIG1pZGRsZToge1xuICAgICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgICAgc2NhbGVGYWN0b3I6IHsgbnVtYmVyIH0sXG4gICAgICAgIHR5cGU6IHsgc3RyaW5nOiBlbmRQb2ludHMgfSxcbiAgICAgICAgaW1hZ2VXaWR0aDogeyBudW1iZXIgfSxcbiAgICAgICAgaW1hZ2VIZWlnaHQ6IHsgbnVtYmVyIH0sXG4gICAgICAgIHNyYzogeyBzdHJpbmcgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgICB9LFxuICAgICAgZnJvbToge1xuICAgICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgICAgc2NhbGVGYWN0b3I6IHsgbnVtYmVyIH0sXG4gICAgICAgIHR5cGU6IHsgc3RyaW5nOiBlbmRQb2ludHMgfSxcbiAgICAgICAgaW1hZ2VXaWR0aDogeyBudW1iZXIgfSxcbiAgICAgICAgaW1hZ2VIZWlnaHQ6IHsgbnVtYmVyIH0sXG4gICAgICAgIHNyYzogeyBzdHJpbmcgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHsgc3RyaW5nOiBbXCJmcm9tXCIsIFwidG9cIiwgXCJtaWRkbGVcIl0sIG9iamVjdCB9LFxuICAgIH0sXG4gICAgZW5kUG9pbnRPZmZzZXQ6IHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXIsXG4gICAgICB9LFxuICAgICAgdG86IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXIsXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHtcbiAgICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICAgIG51bWJlcjogbnVtYmVyLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGFycm93U3RyaWtldGhyb3VnaDogeyBib29sZWFuOiBib29sIH0sXG4gICAgYmFja2dyb3VuZDoge1xuICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sXG4gICAgICBkYXNoZXM6IHsgYm9vbGVhbjogYm9vbCwgYXJyYXkgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgY2hvc2VuOiB7XG4gICAgICBsYWJlbDogeyBib29sZWFuOiBib29sLCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgICBlZGdlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgY29sb3I6IHtcbiAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgaGlnaGxpZ2h0OiB7IHN0cmluZyB9LFxuICAgICAgaG92ZXI6IHsgc3RyaW5nIH0sXG4gICAgICBpbmhlcml0OiB7IHN0cmluZzogW1wiZnJvbVwiLCBcInRvXCIsIFwiYm90aFwiXSwgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgb3BhY2l0eTogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBkYXNoZXM6IHsgYm9vbGVhbjogYm9vbCwgYXJyYXkgfSxcbiAgICBmb250OiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICAgIHN0cm9rZVdpZHRoOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgc3Ryb2tlQ29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICBhbGlnbjogeyBzdHJpbmc6IFtcImhvcml6b250YWxcIiwgXCJ0b3BcIiwgXCJtaWRkbGVcIiwgXCJib3R0b21cIl0gfSxcbiAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICBtdWx0aTogeyBib29sZWFuOiBib29sLCBzdHJpbmcgfSxcbiAgICAgIGJvbGQ6IHtcbiAgICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICAgIH0sXG4gICAgICBib2xkaXRhbDoge1xuICAgICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgICAgc2l6ZTogeyBudW1iZXIgfSwgLy8gcHhcbiAgICAgICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgICAgfSxcbiAgICAgIGl0YWw6IHtcbiAgICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICAgIH0sXG4gICAgICBtb25vOiB7XG4gICAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgICBtb2Q6IHsgc3RyaW5nIH0sXG4gICAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICB9LFxuICAgIGhpZGRlbjogeyBib29sZWFuOiBib29sIH0sXG4gICAgaG92ZXJXaWR0aDogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiLCBudW1iZXIgfSxcbiAgICBsYWJlbDogeyBzdHJpbmcsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgbGVuZ3RoOiB7IG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gICAgcGh5c2ljczogeyBib29sZWFuOiBib29sIH0sXG4gICAgc2NhbGluZzoge1xuICAgICAgbWluOiB7IG51bWJlciB9LFxuICAgICAgbWF4OiB7IG51bWJlciB9LFxuICAgICAgbGFiZWw6IHtcbiAgICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICAgIG1pbjogeyBudW1iZXIgfSxcbiAgICAgICAgbWF4OiB7IG51bWJlciB9LFxuICAgICAgICBtYXhWaXNpYmxlOiB7IG51bWJlciB9LFxuICAgICAgICBkcmF3VGhyZXNob2xkOiB7IG51bWJlciB9LFxuICAgICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIH0sXG4gICAgICBjdXN0b21TY2FsaW5nRnVuY3Rpb246IHsgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgfSxcbiAgICBzZWxlY3Rpb25XaWR0aDogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiLCBudW1iZXIgfSxcbiAgICBzZWxmUmVmZXJlbmNlU2l6ZTogeyBudW1iZXIgfSxcbiAgICBzZWxmUmVmZXJlbmNlOiB7XG4gICAgICBzaXplOiB7IG51bWJlciB9LFxuICAgICAgYW5nbGU6IHsgbnVtYmVyIH0sXG4gICAgICByZW5kZXJCZWhpbmRUaGVOb2RlOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICAgIH0sXG4gICAgc2hhZG93OiB7XG4gICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgc2l6ZTogeyBudW1iZXIgfSxcbiAgICAgIHg6IHsgbnVtYmVyIH0sXG4gICAgICB5OiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgfSxcbiAgICBzbW9vdGg6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgdHlwZToge1xuICAgICAgICBzdHJpbmc6IFtcbiAgICAgICAgICBcImR5bmFtaWNcIixcbiAgICAgICAgICBcImNvbnRpbnVvdXNcIixcbiAgICAgICAgICBcImRpc2NyZXRlXCIsXG4gICAgICAgICAgXCJkaWFnb25hbENyb3NzXCIsXG4gICAgICAgICAgXCJzdHJhaWdodENyb3NzXCIsXG4gICAgICAgICAgXCJob3Jpem9udGFsXCIsXG4gICAgICAgICAgXCJ2ZXJ0aWNhbFwiLFxuICAgICAgICAgIFwiY3VydmVkQ1dcIixcbiAgICAgICAgICBcImN1cnZlZENDV1wiLFxuICAgICAgICAgIFwiY3ViaWNCZXppZXJcIixcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICByb3VuZG5lc3M6IHsgbnVtYmVyIH0sXG4gICAgICBmb3JjZURpcmVjdGlvbjoge1xuICAgICAgICBzdHJpbmc6IFtcImhvcml6b250YWxcIiwgXCJ2ZXJ0aWNhbFwiLCBcIm5vbmVcIl0sXG4gICAgICAgIGJvb2xlYW46IGJvb2wsXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgfSxcbiAgICB0aXRsZTogeyBzdHJpbmcsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICAgIHdpZHRoOiB7IG51bWJlciB9LFxuICAgIHdpZHRoQ29uc3RyYWludDoge1xuICAgICAgbWF4aW11bTogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCwgbnVtYmVyIH0sXG4gICAgfSxcbiAgICB2YWx1ZTogeyBudW1iZXIsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICB9LFxuICBncm91cHM6IHtcbiAgICB1c2VEZWZhdWx0R3JvdXBzOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBfX2FueV9fOiBub2RlT3B0aW9ucyxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgaW50ZXJhY3Rpb246IHtcbiAgICBkcmFnTm9kZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGRyYWdWaWV3OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBoaWRlRWRnZXNPbkRyYWc6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGhpZGVFZGdlc09uWm9vbTogeyBib29sZWFuOiBib29sIH0sXG4gICAgaGlkZU5vZGVzT25EcmFnOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBob3ZlcjogeyBib29sZWFuOiBib29sIH0sXG4gICAga2V5Ym9hcmQ6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgc3BlZWQ6IHtcbiAgICAgICAgeDogeyBudW1iZXIgfSxcbiAgICAgICAgeTogeyBudW1iZXIgfSxcbiAgICAgICAgem9vbTogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgICB9LFxuICAgICAgYmluZFRvV2luZG93OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIGF1dG9Gb2N1czogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICB9LFxuICAgIG11bHRpc2VsZWN0OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBuYXZpZ2F0aW9uQnV0dG9uczogeyBib29sZWFuOiBib29sIH0sXG4gICAgc2VsZWN0YWJsZTogeyBib29sZWFuOiBib29sIH0sXG4gICAgc2VsZWN0Q29ubmVjdGVkRWRnZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGhvdmVyQ29ubmVjdGVkRWRnZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHRvb2x0aXBEZWxheTogeyBudW1iZXIgfSxcbiAgICB6b29tVmlldzogeyBib29sZWFuOiBib29sIH0sXG4gICAgem9vbVNwZWVkOiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICB9LFxuICBsYXlvdXQ6IHtcbiAgICByYW5kb21TZWVkOiB7IHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiwgbnVtYmVyLCBzdHJpbmcgfSxcbiAgICBpbXByb3ZlZExheW91dDogeyBib29sZWFuOiBib29sIH0sXG4gICAgY2x1c3RlclRocmVzaG9sZDogeyBudW1iZXIgfSxcbiAgICBoaWVyYXJjaGljYWw6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgbGV2ZWxTZXBhcmF0aW9uOiB7IG51bWJlciB9LFxuICAgICAgbm9kZVNwYWNpbmc6IHsgbnVtYmVyIH0sXG4gICAgICB0cmVlU3BhY2luZzogeyBudW1iZXIgfSxcbiAgICAgIGJsb2NrU2hpZnRpbmc6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgZWRnZU1pbmltaXphdGlvbjogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBwYXJlbnRDZW50cmFsaXphdGlvbjogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBkaXJlY3Rpb246IHsgc3RyaW5nOiBbXCJVRFwiLCBcIkRVXCIsIFwiTFJcIiwgXCJSTFwiXSB9LCAvLyBVRCwgRFUsIExSLCBSTFxuICAgICAgc29ydE1ldGhvZDogeyBzdHJpbmc6IFtcImh1YnNpemVcIiwgXCJkaXJlY3RlZFwiXSB9LCAvLyBodWJzaXplLCBkaXJlY3RlZFxuICAgICAgc2hha2VUb3dhcmRzOiB7IHN0cmluZzogW1wibGVhdmVzXCIsIFwicm9vdHNcIl0gfSwgLy8gbGVhdmVzLCByb290c1xuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgbWFuaXB1bGF0aW9uOiB7XG4gICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgaW5pdGlhbGx5QWN0aXZlOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBhZGROb2RlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBhZGRFZGdlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBlZGl0Tm9kZTogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgZWRpdEVkZ2U6IHtcbiAgICAgIGVkaXRXaXRob3V0RHJhZzogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICB9LFxuICAgIGRlbGV0ZU5vZGU6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIGRlbGV0ZUVkZ2U6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIGNvbnRyb2xOb2RlU3R5bGU6IG5vZGVPcHRpb25zLFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuICBub2Rlczogbm9kZU9wdGlvbnMsXG4gIHBoeXNpY3M6IHtcbiAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBiYXJuZXNIdXQ6IHtcbiAgICAgIHRoZXRhOiB7IG51bWJlciB9LFxuICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiB7IG51bWJlciB9LFxuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBhdm9pZE92ZXJsYXA6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIGZvcmNlQXRsYXMyQmFzZWQ6IHtcbiAgICAgIHRoZXRhOiB7IG51bWJlciB9LFxuICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiB7IG51bWJlciB9LFxuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBhdm9pZE92ZXJsYXA6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIHJlcHVsc2lvbjoge1xuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIG5vZGVEaXN0YW5jZTogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIGhpZXJhcmNoaWNhbFJlcHVsc2lvbjoge1xuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIG5vZGVEaXN0YW5jZTogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBhdm9pZE92ZXJsYXA6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIG1heFZlbG9jaXR5OiB7IG51bWJlciB9LFxuICAgIG1pblZlbG9jaXR5OiB7IG51bWJlciB9LCAvLyBweC9zXG4gICAgc29sdmVyOiB7XG4gICAgICBzdHJpbmc6IFtcbiAgICAgICAgXCJiYXJuZXNIdXRcIixcbiAgICAgICAgXCJyZXB1bHNpb25cIixcbiAgICAgICAgXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIixcbiAgICAgICAgXCJmb3JjZUF0bGFzMkJhc2VkXCIsXG4gICAgICBdLFxuICAgIH0sXG4gICAgc3RhYmlsaXphdGlvbjoge1xuICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBpdGVyYXRpb25zOiB7IG51bWJlciB9LCAvLyBtYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb24gdG8gc3RhYmlsaXplXG4gICAgICB1cGRhdGVJbnRlcnZhbDogeyBudW1iZXIgfSxcbiAgICAgIG9ubHlEeW5hbWljRWRnZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgZml0OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgdGltZXN0ZXA6IHsgbnVtYmVyIH0sXG4gICAgYWRhcHRpdmVUaW1lc3RlcDogeyBib29sZWFuOiBib29sIH0sXG4gICAgd2luZDoge1xuICAgICAgeDogeyBudW1iZXIgfSxcbiAgICAgIHk6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuXG4gIC8vZ2xvYmFscyA6XG4gIGF1dG9SZXNpemU6IHsgYm9vbGVhbjogYm9vbCB9LFxuICBjbGlja1RvVXNlOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgbG9jYWxlOiB7IHN0cmluZyB9LFxuICBsb2NhbGVzOiB7XG4gICAgX19hbnlfXzogeyBhbnkgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgaGVpZ2h0OiB7IHN0cmluZyB9LFxuICB3aWR0aDogeyBzdHJpbmcgfSxcbiAgX190eXBlX186IHsgb2JqZWN0IH0sXG59O1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cblxuLyoqXG4gKiBUaGlzIHByb3ZpZGVzIHJhbmdlcywgaW5pdGlhbCB2YWx1ZXMsIHN0ZXBzIGFuZCBkcm9wZG93biBtZW51IGNob2ljZXMgZm9yIHRoZVxuICogY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAcmVtYXJrc1xuICogQ2hlY2tib3g6IGBib29sZWFuYFxuICogICBUaGUgdmFsdWUgc3VwbGxpZWQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbml0aWFsIHZhbHVlLlxuICpcbiAqIFRleHQgZmllbGQ6IGBzdHJpbmdgXG4gKiAgIFRoZSBwYXNzZWQgdGV4dCB3aWxsIGJlIHVzZWQgYXMgdGhlIGluaXRpYWwgdmFsdWUuIEFueSB0ZXh0IHdpbGwgYmVcbiAqICAgYWNjZXB0ZWQgYWZ0ZXJ3YXJkcy5cbiAqXG4gKiBOdW1iZXIgcmFuZ2U6IGBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXWBcbiAqICAgVGhlIG1lYW5pbmdzIGFyZSBgW2luaXRpYWwgdmFsdWUsIG1pbiwgbWF4LCBzdGVwXWAuXG4gKlxuICogRHJvcGRvd246IGBbRXhjbHVkZTxzdHJpbmcsIFwiY29sb3JcIj4sIC4uLihzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKVtdXWBcbiAqICAgVHJhbnNsYXRpb25zIGZvciBwZW9wbGUgd2l0aCBwb29yIHVuZGVyc3RhbmRpbmcgb2YgVHlwZVNjcmlwdDogdGhlIGZpcnN0XG4gKiAgIHZhbHVlIGFsd2F5cyBoYXMgdG8gYmUgYSBzdHJpbmcgYnV0IG5ldmVyIGBcImNvbG9yXCJgLCB0aGUgcmVzdCBjYW4gYmUgYW55XG4gKiAgIGNvbWJpbmF0aW9uIG9mIHN0cmluZ3MsIG51bWJlcnMgYW5kIGJvb2xlYW5zLlxuICpcbiAqIENvbG9yIHBpY2tlcjogYFtcImNvbG9yXCIsIHN0cmluZ11gXG4gKiAgIFRoZSBmaXJzdCB2YWx1ZSBzYXlzIHRoaXMgd2lsbCBiZSBhIGNvbG9yIHBpY2tlciBub3QgYSBkcm9wZG93biBtZW51LiBUaGVcbiAqICAgbmV4dCB2YWx1ZSBpcyB0aGUgaW5pdGlhbCBjb2xvci5cbiAqL1xuY29uc3QgY29uZmlndXJlT3B0aW9uczogQ29uZmlndXJhdG9yQ29uZmlnID0ge1xuICBub2Rlczoge1xuICAgIGJvcmRlcldpZHRoOiBbMSwgMCwgMTAsIDFdLFxuICAgIGJvcmRlcldpZHRoU2VsZWN0ZWQ6IFsyLCAwLCAxMCwgMV0sXG4gICAgY29sb3I6IHtcbiAgICAgIGJvcmRlcjogW1wiY29sb3JcIiwgXCIjMkI3Q0U5XCJdLFxuICAgICAgYmFja2dyb3VuZDogW1wiY29sb3JcIiwgXCIjOTdDMkZDXCJdLFxuICAgICAgaGlnaGxpZ2h0OiB7XG4gICAgICAgIGJvcmRlcjogW1wiY29sb3JcIiwgXCIjMkI3Q0U5XCJdLFxuICAgICAgICBiYWNrZ3JvdW5kOiBbXCJjb2xvclwiLCBcIiNEMkU1RkZcIl0sXG4gICAgICB9LFxuICAgICAgaG92ZXI6IHtcbiAgICAgICAgYm9yZGVyOiBbXCJjb2xvclwiLCBcIiMyQjdDRTlcIl0sXG4gICAgICAgIGJhY2tncm91bmQ6IFtcImNvbG9yXCIsIFwiI0QyRTVGRlwiXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBvcGFjaXR5OiBbMCwgMCwgMSwgMC4xXSxcbiAgICBmaXhlZDoge1xuICAgICAgeDogZmFsc2UsXG4gICAgICB5OiBmYWxzZSxcbiAgICB9LFxuICAgIGZvbnQ6IHtcbiAgICAgIGNvbG9yOiBbXCJjb2xvclwiLCBcIiMzNDM0MzRcIl0sXG4gICAgICBzaXplOiBbMTQsIDAsIDEwMCwgMV0sIC8vIHB4XG4gICAgICBmYWNlOiBbXCJhcmlhbFwiLCBcInZlcmRhbmFcIiwgXCJ0YWhvbWFcIl0sXG4gICAgICBiYWNrZ3JvdW5kOiBbXCJjb2xvclwiLCBcIm5vbmVcIl0sXG4gICAgICBzdHJva2VXaWR0aDogWzAsIDAsIDUwLCAxXSwgLy8gcHhcbiAgICAgIHN0cm9rZUNvbG9yOiBbXCJjb2xvclwiLCBcIiNmZmZmZmZcIl0sXG4gICAgfSxcbiAgICAvL2dyb3VwOiAnc3RyaW5nJyxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogdHJ1ZSxcbiAgICAvL2ljb246IHtcbiAgICAvLyAgZmFjZTogJ3N0cmluZycsICAvLydGb250QXdlc29tZScsXG4gICAgLy8gIGNvZGU6ICdzdHJpbmcnLCAgLy8nXFx1ZjAwNycsXG4gICAgLy8gIHNpemU6IFs1MCwgMCwgMjAwLCAxXSwgIC8vNTAsXG4gICAgLy8gIGNvbG9yOiBbJ2NvbG9yJywnIzJCN0NFOSddICAgLy8nI2FhMDBmZidcbiAgICAvL30sXG4gICAgLy9pbWFnZTogJ3N0cmluZycsIC8vIC0tPiBVUkxcbiAgICBwaHlzaWNzOiB0cnVlLFxuICAgIHNjYWxpbmc6IHtcbiAgICAgIG1pbjogWzEwLCAwLCAyMDAsIDFdLFxuICAgICAgbWF4OiBbMzAsIDAsIDIwMCwgMV0sXG4gICAgICBsYWJlbDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbWluOiBbMTQsIDAsIDIwMCwgMV0sXG4gICAgICAgIG1heDogWzMwLCAwLCAyMDAsIDFdLFxuICAgICAgICBtYXhWaXNpYmxlOiBbMzAsIDAsIDIwMCwgMV0sXG4gICAgICAgIGRyYXdUaHJlc2hvbGQ6IFs1LCAwLCAyMCwgMV0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgc2hhZG93OiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGNvbG9yOiBcInJnYmEoMCwwLDAsMC41KVwiLFxuICAgICAgc2l6ZTogWzEwLCAwLCAyMCwgMV0sXG4gICAgICB4OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgICB5OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgfSxcbiAgICBzaGFwZTogW1xuICAgICAgXCJlbGxpcHNlXCIsXG4gICAgICBcImJveFwiLFxuICAgICAgXCJjaXJjbGVcIixcbiAgICAgIFwiZGF0YWJhc2VcIixcbiAgICAgIFwiZGlhbW9uZFwiLFxuICAgICAgXCJkb3RcIixcbiAgICAgIFwic3F1YXJlXCIsXG4gICAgICBcInN0YXJcIixcbiAgICAgIFwidGV4dFwiLFxuICAgICAgXCJ0cmlhbmdsZVwiLFxuICAgICAgXCJ0cmlhbmdsZURvd25cIixcbiAgICAgIFwiaGV4YWdvblwiLFxuICAgIF0sXG4gICAgc2hhcGVQcm9wZXJ0aWVzOiB7XG4gICAgICBib3JkZXJEYXNoZXM6IGZhbHNlLFxuICAgICAgYm9yZGVyUmFkaXVzOiBbNiwgMCwgMjAsIDFdLFxuICAgICAgaW50ZXJwb2xhdGlvbjogdHJ1ZSxcbiAgICAgIHVzZUltYWdlU2l6ZTogZmFsc2UsXG4gICAgfSxcbiAgICBzaXplOiBbMjUsIDAsIDIwMCwgMV0sXG4gIH0sXG4gIGVkZ2VzOiB7XG4gICAgYXJyb3dzOiB7XG4gICAgICB0bzogeyBlbmFibGVkOiBmYWxzZSwgc2NhbGVGYWN0b3I6IFsxLCAwLCAzLCAwLjA1XSwgdHlwZTogXCJhcnJvd1wiIH0sXG4gICAgICBtaWRkbGU6IHsgZW5hYmxlZDogZmFsc2UsIHNjYWxlRmFjdG9yOiBbMSwgMCwgMywgMC4wNV0sIHR5cGU6IFwiYXJyb3dcIiB9LFxuICAgICAgZnJvbTogeyBlbmFibGVkOiBmYWxzZSwgc2NhbGVGYWN0b3I6IFsxLCAwLCAzLCAwLjA1XSwgdHlwZTogXCJhcnJvd1wiIH0sXG4gICAgfSxcbiAgICBlbmRQb2ludE9mZnNldDoge1xuICAgICAgZnJvbTogWzAsIC0xMCwgMTAsIDFdLFxuICAgICAgdG86IFswLCAtMTAsIDEwLCAxXSxcbiAgICB9LFxuICAgIGFycm93U3RyaWtldGhyb3VnaDogdHJ1ZSxcbiAgICBjb2xvcjoge1xuICAgICAgY29sb3I6IFtcImNvbG9yXCIsIFwiIzg0ODQ4NFwiXSxcbiAgICAgIGhpZ2hsaWdodDogW1wiY29sb3JcIiwgXCIjODQ4NDg0XCJdLFxuICAgICAgaG92ZXI6IFtcImNvbG9yXCIsIFwiIzg0ODQ4NFwiXSxcbiAgICAgIGluaGVyaXQ6IFtcImZyb21cIiwgXCJ0b1wiLCBcImJvdGhcIiwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgb3BhY2l0eTogWzEsIDAsIDEsIDAuMDVdLFxuICAgIH0sXG4gICAgZGFzaGVzOiBmYWxzZSxcbiAgICBmb250OiB7XG4gICAgICBjb2xvcjogW1wiY29sb3JcIiwgXCIjMzQzNDM0XCJdLFxuICAgICAgc2l6ZTogWzE0LCAwLCAxMDAsIDFdLCAvLyBweFxuICAgICAgZmFjZTogW1wiYXJpYWxcIiwgXCJ2ZXJkYW5hXCIsIFwidGFob21hXCJdLFxuICAgICAgYmFja2dyb3VuZDogW1wiY29sb3JcIiwgXCJub25lXCJdLFxuICAgICAgc3Ryb2tlV2lkdGg6IFsyLCAwLCA1MCwgMV0sIC8vIHB4XG4gICAgICBzdHJva2VDb2xvcjogW1wiY29sb3JcIiwgXCIjZmZmZmZmXCJdLFxuICAgICAgYWxpZ246IFtcImhvcml6b250YWxcIiwgXCJ0b3BcIiwgXCJtaWRkbGVcIiwgXCJib3R0b21cIl0sXG4gICAgfSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGhvdmVyV2lkdGg6IFsxLjUsIDAsIDUsIDAuMV0sXG4gICAgbGFiZWxIaWdobGlnaHRCb2xkOiB0cnVlLFxuICAgIHBoeXNpY3M6IHRydWUsXG4gICAgc2NhbGluZzoge1xuICAgICAgbWluOiBbMSwgMCwgMTAwLCAxXSxcbiAgICAgIG1heDogWzE1LCAwLCAxMDAsIDFdLFxuICAgICAgbGFiZWw6IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbWluOiBbMTQsIDAsIDIwMCwgMV0sXG4gICAgICAgIG1heDogWzMwLCAwLCAyMDAsIDFdLFxuICAgICAgICBtYXhWaXNpYmxlOiBbMzAsIDAsIDIwMCwgMV0sXG4gICAgICAgIGRyYXdUaHJlc2hvbGQ6IFs1LCAwLCAyMCwgMV0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgc2VsZWN0aW9uV2lkdGg6IFsxLjUsIDAsIDUsIDAuMV0sXG4gICAgc2VsZlJlZmVyZW5jZVNpemU6IFsyMCwgMCwgMjAwLCAxXSxcbiAgICBzZWxmUmVmZXJlbmNlOiB7XG4gICAgICBzaXplOiBbMjAsIDAsIDIwMCwgMV0sXG4gICAgICBhbmdsZTogW01hdGguUEkgLyAyLCAtNiAqIE1hdGguUEksIDYgKiBNYXRoLlBJLCBNYXRoLlBJIC8gOF0sXG4gICAgICByZW5kZXJCZWhpbmRUaGVOb2RlOiB0cnVlLFxuICAgIH0sXG4gICAgc2hhZG93OiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGNvbG9yOiBcInJnYmEoMCwwLDAsMC41KVwiLFxuICAgICAgc2l6ZTogWzEwLCAwLCAyMCwgMV0sXG4gICAgICB4OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgICB5OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgfSxcbiAgICBzbW9vdGg6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICB0eXBlOiBbXG4gICAgICAgIFwiZHluYW1pY1wiLFxuICAgICAgICBcImNvbnRpbnVvdXNcIixcbiAgICAgICAgXCJkaXNjcmV0ZVwiLFxuICAgICAgICBcImRpYWdvbmFsQ3Jvc3NcIixcbiAgICAgICAgXCJzdHJhaWdodENyb3NzXCIsXG4gICAgICAgIFwiaG9yaXpvbnRhbFwiLFxuICAgICAgICBcInZlcnRpY2FsXCIsXG4gICAgICAgIFwiY3VydmVkQ1dcIixcbiAgICAgICAgXCJjdXJ2ZWRDQ1dcIixcbiAgICAgICAgXCJjdWJpY0JlemllclwiLFxuICAgICAgXSxcbiAgICAgIGZvcmNlRGlyZWN0aW9uOiBbXCJob3Jpem9udGFsXCIsIFwidmVydGljYWxcIiwgXCJub25lXCJdLFxuICAgICAgcm91bmRuZXNzOiBbMC41LCAwLCAxLCAwLjA1XSxcbiAgICB9LFxuICAgIHdpZHRoOiBbMSwgMCwgMzAsIDFdLFxuICB9LFxuICBsYXlvdXQ6IHtcbiAgICAvL3JhbmRvbVNlZWQ6IFswLCAwLCA1MDAsIDFdLFxuICAgIC8vaW1wcm92ZWRMYXlvdXQ6IHRydWUsXG4gICAgaGllcmFyY2hpY2FsOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGxldmVsU2VwYXJhdGlvbjogWzE1MCwgMjAsIDUwMCwgNV0sXG4gICAgICBub2RlU3BhY2luZzogWzEwMCwgMjAsIDUwMCwgNV0sXG4gICAgICB0cmVlU3BhY2luZzogWzIwMCwgMjAsIDUwMCwgNV0sXG4gICAgICBibG9ja1NoaWZ0aW5nOiB0cnVlLFxuICAgICAgZWRnZU1pbmltaXphdGlvbjogdHJ1ZSxcbiAgICAgIHBhcmVudENlbnRyYWxpemF0aW9uOiB0cnVlLFxuICAgICAgZGlyZWN0aW9uOiBbXCJVRFwiLCBcIkRVXCIsIFwiTFJcIiwgXCJSTFwiXSwgLy8gVUQsIERVLCBMUiwgUkxcbiAgICAgIHNvcnRNZXRob2Q6IFtcImh1YnNpemVcIiwgXCJkaXJlY3RlZFwiXSwgLy8gaHVic2l6ZSwgZGlyZWN0ZWRcbiAgICAgIHNoYWtlVG93YXJkczogW1wibGVhdmVzXCIsIFwicm9vdHNcIl0sIC8vIGxlYXZlcywgcm9vdHNcbiAgICB9LFxuICB9LFxuICBpbnRlcmFjdGlvbjoge1xuICAgIGRyYWdOb2RlczogdHJ1ZSxcbiAgICBkcmFnVmlldzogdHJ1ZSxcbiAgICBoaWRlRWRnZXNPbkRyYWc6IGZhbHNlLFxuICAgIGhpZGVFZGdlc09uWm9vbTogZmFsc2UsXG4gICAgaGlkZU5vZGVzT25EcmFnOiBmYWxzZSxcbiAgICBob3ZlcjogZmFsc2UsXG4gICAga2V5Ym9hcmQ6IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgc3BlZWQ6IHtcbiAgICAgICAgeDogWzEwLCAwLCA0MCwgMV0sXG4gICAgICAgIHk6IFsxMCwgMCwgNDAsIDFdLFxuICAgICAgICB6b29tOiBbMC4wMiwgMCwgMC4xLCAwLjAwNV0sXG4gICAgICB9LFxuICAgICAgYmluZFRvV2luZG93OiB0cnVlLFxuICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgIH0sXG4gICAgbXVsdGlzZWxlY3Q6IGZhbHNlLFxuICAgIG5hdmlnYXRpb25CdXR0b25zOiBmYWxzZSxcbiAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgIHNlbGVjdENvbm5lY3RlZEVkZ2VzOiB0cnVlLFxuICAgIGhvdmVyQ29ubmVjdGVkRWRnZXM6IHRydWUsXG4gICAgdG9vbHRpcERlbGF5OiBbMzAwLCAwLCAxMDAwLCAyNV0sXG4gICAgem9vbVZpZXc6IHRydWUsXG4gICAgem9vbVNwZWVkOiBbMSwgMC4xLCAyLCAwLjFdLFxuICB9LFxuICBtYW5pcHVsYXRpb246IHtcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBpbml0aWFsbHlBY3RpdmU6IGZhbHNlLFxuICB9LFxuICBwaHlzaWNzOiB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBiYXJuZXNIdXQ6IHtcbiAgICAgIHRoZXRhOiBbMC41LCAwLjEsIDEsIDAuMDVdLFxuICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiBbLTIwMDAsIC0zMDAwMCwgMCwgNTBdLFxuICAgICAgY2VudHJhbEdyYXZpdHk6IFswLjMsIDAsIDEwLCAwLjA1XSxcbiAgICAgIHNwcmluZ0xlbmd0aDogWzk1LCAwLCA1MDAsIDVdLFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IFswLjA0LCAwLCAxLjIsIDAuMDA1XSxcbiAgICAgIGRhbXBpbmc6IFswLjA5LCAwLCAxLCAwLjAxXSxcbiAgICAgIGF2b2lkT3ZlcmxhcDogWzAsIDAsIDEsIDAuMDFdLFxuICAgIH0sXG4gICAgZm9yY2VBdGxhczJCYXNlZDoge1xuICAgICAgdGhldGE6IFswLjUsIDAuMSwgMSwgMC4wNV0sXG4gICAgICBncmF2aXRhdGlvbmFsQ29uc3RhbnQ6IFstNTAsIC01MDAsIDAsIDFdLFxuICAgICAgY2VudHJhbEdyYXZpdHk6IFswLjAxLCAwLCAxLCAwLjAwNV0sXG4gICAgICBzcHJpbmdMZW5ndGg6IFs5NSwgMCwgNTAwLCA1XSxcbiAgICAgIHNwcmluZ0NvbnN0YW50OiBbMC4wOCwgMCwgMS4yLCAwLjAwNV0sXG4gICAgICBkYW1waW5nOiBbMC40LCAwLCAxLCAwLjAxXSxcbiAgICAgIGF2b2lkT3ZlcmxhcDogWzAsIDAsIDEsIDAuMDFdLFxuICAgIH0sXG4gICAgcmVwdWxzaW9uOiB7XG4gICAgICBjZW50cmFsR3Jhdml0eTogWzAuMiwgMCwgMTAsIDAuMDVdLFxuICAgICAgc3ByaW5nTGVuZ3RoOiBbMjAwLCAwLCA1MDAsIDVdLFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IFswLjA1LCAwLCAxLjIsIDAuMDA1XSxcbiAgICAgIG5vZGVEaXN0YW5jZTogWzEwMCwgMCwgNTAwLCA1XSxcbiAgICAgIGRhbXBpbmc6IFswLjA5LCAwLCAxLCAwLjAxXSxcbiAgICB9LFxuICAgIGhpZXJhcmNoaWNhbFJlcHVsc2lvbjoge1xuICAgICAgY2VudHJhbEdyYXZpdHk6IFswLjIsIDAsIDEwLCAwLjA1XSxcbiAgICAgIHNwcmluZ0xlbmd0aDogWzEwMCwgMCwgNTAwLCA1XSxcbiAgICAgIHNwcmluZ0NvbnN0YW50OiBbMC4wMSwgMCwgMS4yLCAwLjAwNV0sXG4gICAgICBub2RlRGlzdGFuY2U6IFsxMjAsIDAsIDUwMCwgNV0sXG4gICAgICBkYW1waW5nOiBbMC4wOSwgMCwgMSwgMC4wMV0sXG4gICAgICBhdm9pZE92ZXJsYXA6IFswLCAwLCAxLCAwLjAxXSxcbiAgICB9LFxuICAgIG1heFZlbG9jaXR5OiBbNTAsIDAsIDE1MCwgMV0sXG4gICAgbWluVmVsb2NpdHk6IFswLjEsIDAuMDEsIDAuNSwgMC4wMV0sXG4gICAgc29sdmVyOiBbXG4gICAgICBcImJhcm5lc0h1dFwiLFxuICAgICAgXCJmb3JjZUF0bGFzMkJhc2VkXCIsXG4gICAgICBcInJlcHVsc2lvblwiLFxuICAgICAgXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIixcbiAgICBdLFxuICAgIHRpbWVzdGVwOiBbMC41LCAwLjAxLCAxLCAwLjAxXSxcbiAgICB3aW5kOiB7XG4gICAgICB4OiBbMCwgLTEwLCAxMCwgMC4xXSxcbiAgICAgIHk6IFswLCAtMTAsIDEwLCAwLjFdLFxuICAgIH0sXG4gICAgLy9hZGFwdGl2ZVRpbWVzdGVwOiB0cnVlXG4gIH0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgY29uZmlndXJhdG9ySGlkZU9wdGlvbjogQ29uZmlndXJhdG9ySGlkZU9wdGlvbiA9IChcbiAgcGFyZW50UGF0aCxcbiAgb3B0aW9uTmFtZSxcbiAgb3B0aW9uc1xuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChcbiAgICBwYXJlbnRQYXRoLmluY2x1ZGVzKFwicGh5c2ljc1wiKSAmJlxuICAgIChjb25maWd1cmVPcHRpb25zIGFzIGFueSkucGh5c2ljcy5zb2x2ZXIuaW5jbHVkZXMob3B0aW9uTmFtZSkgJiZcbiAgICBvcHRpb25zLnBoeXNpY3Muc29sdmVyICE9PSBvcHRpb25OYW1lICYmXG4gICAgb3B0aW9uTmFtZSAhPT0gXCJ3aW5kXCJcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgeyBhbGxPcHRpb25zLCBjb25maWd1cmVPcHRpb25zIH07XG4iLCAiLyoqXG4gKiAgVGhlIEZsb3lk4oCTV2Fyc2hhbGwgYWxnb3JpdGhtIGlzIGFuIGFsZ29yaXRobSBmb3IgZmluZGluZyBzaG9ydGVzdCBwYXRocyBpblxuICogIGEgd2VpZ2h0ZWQgZ3JhcGggd2l0aCBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBlZGdlIHdlaWdodHMgKGJ1dCB3aXRoIG5vIG5lZ2F0aXZlXG4gKiAgY3ljbGVzKS4gLSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GbG95ZOKAk1dhcnNoYWxsX2FsZ29yaXRobVxuICovXG5jbGFzcyBGbG95ZFdhcnNoYWxsIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzQXJyYXlcbiAgICogQHBhcmFtIHtBcnJheS48RWRnZT59IGVkZ2VzQXJyYXlcbiAgICogQHJldHVybnMge3t9fVxuICAgKi9cbiAgZ2V0RGlzdGFuY2VzKGJvZHksIG5vZGVzQXJyYXksIGVkZ2VzQXJyYXkpIHtcbiAgICBjb25zdCBEX21hdHJpeCA9IHt9O1xuICAgIGNvbnN0IGVkZ2VzID0gYm9keS5lZGdlcztcblxuICAgIC8vIHByZXBhcmUgbWF0cml4IHdpdGggbGFyZ2UgbnVtYmVyc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzQXJyYXlbaV07XG4gICAgICBjb25zdCBjZWxsID0ge307XG4gICAgICBEX21hdHJpeFtub2RlXSA9IGNlbGw7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5vZGVzQXJyYXkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY2VsbFtub2Rlc0FycmF5W2pdXSA9IGkgPT0gaiA/IDAgOiAxZTk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcHV0IHRoZSB3ZWlnaHRzIGZvciB0aGUgZWRnZXMgaW4uIFRoaXMgYXNzdW1lcyB1bmlkaXJlY3Rpb25hbGl0eS5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tlZGdlc0FycmF5W2ldXTtcbiAgICAgIC8vIGVkZ2UgaGFzIHRvIGJlIGNvbm5lY3RlZCBpZiBpdCBjb3VudHMgdG8gdGhlIGRpc3RhbmNlcy4gSWYgaXQgaXMgY29ubmVjdGVkIHRvIGlubmVyIGNsdXN0ZXJzIGl0IHdpbGwgY3Jhc2ggc28gd2UgYWxzbyBjaGVjayBpZiBpdCBpcyBpbiB0aGUgRF9tYXRyaXhcbiAgICAgIGlmIChcbiAgICAgICAgZWRnZS5jb25uZWN0ZWQgPT09IHRydWUgJiZcbiAgICAgICAgRF9tYXRyaXhbZWRnZS5mcm9tSWRdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgRF9tYXRyaXhbZWRnZS50b0lkXSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgRF9tYXRyaXhbZWRnZS5mcm9tSWRdW2VkZ2UudG9JZF0gPSAxO1xuICAgICAgICBEX21hdHJpeFtlZGdlLnRvSWRdW2VkZ2UuZnJvbUlkXSA9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZUNvdW50ID0gbm9kZXNBcnJheS5sZW5ndGg7XG5cbiAgICAvLyBBZGFwdGVkIEZsb3lkV2Fyc2hhbGwgYmFzZWQgb24gdW5pZGlyZWN0aW9uYWxpdHkgdG8gZ3JlYXRseSByZWR1Y2UgY29tcGxleGl0eS5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IG5vZGVDb3VudDsgaysrKSB7XG4gICAgICBjb25zdCBrbm9kZSA9IG5vZGVzQXJyYXlba107XG4gICAgICBjb25zdCBrY29sbSA9IERfbWF0cml4W2tub2RlXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUNvdW50IC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlub2RlID0gbm9kZXNBcnJheVtpXTtcbiAgICAgICAgY29uc3QgaWNvbG0gPSBEX21hdHJpeFtpbm9kZV07XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5vZGVDb3VudDsgaisrKSB7XG4gICAgICAgICAgY29uc3Qgam5vZGUgPSBub2Rlc0FycmF5W2pdO1xuICAgICAgICAgIGNvbnN0IGpjb2xtID0gRF9tYXRyaXhbam5vZGVdO1xuXG4gICAgICAgICAgY29uc3QgdmFsID0gTWF0aC5taW4oaWNvbG1bam5vZGVdLCBpY29sbVtrbm9kZV0gKyBrY29sbVtqbm9kZV0pO1xuICAgICAgICAgIGljb2xtW2pub2RlXSA9IHZhbDtcbiAgICAgICAgICBqY29sbVtpbm9kZV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gRF9tYXRyaXg7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxveWRXYXJzaGFsbDtcbiIsICIvLyBkaXN0YW5jZSBmaW5kaW5nIGFsZ29yaXRobVxuaW1wb3J0IEZsb3lkV2Fyc2hhbGwgZnJvbSBcIi4vY29tcG9uZW50cy9hbGdvcml0aG1zL0Zsb3lkV2Fyc2hhbGwuanNcIjtcblxuLyoqXG4gKiBLYW1hZGFLYXdhaSBwb3NpdGlvbnMgdGhlIG5vZGVzIGluaXRpYWxseSBiYXNlZCBvblxuICpcbiAqIFwiQU4gQUxHT1JJVEhNIEZPUiBEUkFXSU5HIEdFTkVSQUwgVU5ESVJFQ1RFRCBHUkFQSFNcIlxuICogLS0gVG9taWhpc2EgS0FNQURBIGFuZCBTYXRvcnUgS0FXQUkgaW4gMTk4OVxuICpcbiAqIFBvc3NpYmxlIG9wdGltaXphdGlvbnMgaW4gdGhlIGRpc3RhbmNlIGNhbGN1bGF0aW9uIGNhbiBiZSBpbXBsZW1lbnRlZC5cbiAqL1xuY2xhc3MgS2FtYWRhS2F3YWkge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VMZW5ndGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VTdHJlbmd0aFxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgZWRnZUxlbmd0aCwgZWRnZVN0cmVuZ3RoKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnNwcmluZ0xlbmd0aCA9IGVkZ2VMZW5ndGg7XG4gICAgdGhpcy5zcHJpbmdDb25zdGFudCA9IGVkZ2VTdHJlbmd0aDtcbiAgICB0aGlzLmRpc3RhbmNlU29sdmVyID0gbmV3IEZsb3lkV2Fyc2hhbGwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3Qgc3VyZSBpZiBuZWVkZWQgYnV0IGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgc3ByaW5nIGxlbmd0aCBhbmQgc3ByaW5nIGNvbnN0YW50XG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuc3ByaW5nTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc3ByaW5nTGVuZ3RoID0gb3B0aW9ucy5zcHJpbmdMZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5zcHJpbmdDb25zdGFudCkge1xuICAgICAgICB0aGlzLnNwcmluZ0NvbnN0YW50ID0gb3B0aW9ucy5zcHJpbmdDb25zdGFudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUG9zaXRpb24gdGhlIHN5c3RlbVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gbm9kZXNBcnJheVxuICAgKiBAcGFyYW0ge0FycmF5Ljx2aXMuRWRnZT59IGVkZ2VzQXJyYXlcbiAgICogQHBhcmFtIHtib29sZWFufSBbaWdub3JlQ2x1c3RlcnM9ZmFsc2VdXG4gICAqL1xuICBzb2x2ZShub2Rlc0FycmF5LCBlZGdlc0FycmF5LCBpZ25vcmVDbHVzdGVycyA9IGZhbHNlKSB7XG4gICAgLy8gZ2V0IGRpc3RhbmNlIG1hdHJpeFxuICAgIGNvbnN0IERfbWF0cml4ID0gdGhpcy5kaXN0YW5jZVNvbHZlci5nZXREaXN0YW5jZXMoXG4gICAgICB0aGlzLmJvZHksXG4gICAgICBub2Rlc0FycmF5LFxuICAgICAgZWRnZXNBcnJheVxuICAgICk7IC8vIGRpc3RhbmNlIG1hdHJpeFxuXG4gICAgLy8gZ2V0IHRoZSBMIE1hdHJpeFxuICAgIHRoaXMuX2NyZWF0ZUxfbWF0cml4KERfbWF0cml4KTtcblxuICAgIC8vIGdldCB0aGUgSyBNYXRyaXhcbiAgICB0aGlzLl9jcmVhdGVLX21hdHJpeChEX21hdHJpeCk7XG5cbiAgICAvLyBpbml0aWFsIEUgTWF0cml4XG4gICAgdGhpcy5fY3JlYXRlRV9tYXRyaXgoKTtcblxuICAgIC8vIGNhbGN1bGF0ZSBwb3NpdGlvbnNcbiAgICBjb25zdCB0aHJlc2hvbGQgPSAwLjAxO1xuICAgIGNvbnN0IGlubmVyVGhyZXNob2xkID0gMTtcbiAgICBsZXQgaXRlcmF0aW9ucyA9IDA7XG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IE1hdGgubWF4KFxuICAgICAgMTAwMCxcbiAgICAgIE1hdGgubWluKDEwICogdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aCwgNjAwMClcbiAgICApO1xuICAgIGNvbnN0IG1heElubmVySXRlcmF0aW9ucyA9IDU7XG5cbiAgICBsZXQgbWF4RW5lcmd5ID0gMWU5O1xuICAgIGxldCBoaWdoRV9ub2RlSWQgPSAwLFxuICAgICAgZEVfZHggPSAwLFxuICAgICAgZEVfZHkgPSAwLFxuICAgICAgZGVsdGFfbSA9IDAsXG4gICAgICBzdWJJdGVyYXRpb25zID0gMDtcblxuICAgIHdoaWxlIChtYXhFbmVyZ3kgPiB0aHJlc2hvbGQgJiYgaXRlcmF0aW9ucyA8IG1heEl0ZXJhdGlvbnMpIHtcbiAgICAgIGl0ZXJhdGlvbnMgKz0gMTtcbiAgICAgIFtoaWdoRV9ub2RlSWQsIG1heEVuZXJneSwgZEVfZHgsIGRFX2R5XSA9XG4gICAgICAgIHRoaXMuX2dldEhpZ2hlc3RFbmVyZ3lOb2RlKGlnbm9yZUNsdXN0ZXJzKTtcbiAgICAgIGRlbHRhX20gPSBtYXhFbmVyZ3k7XG4gICAgICBzdWJJdGVyYXRpb25zID0gMDtcbiAgICAgIHdoaWxlIChkZWx0YV9tID4gaW5uZXJUaHJlc2hvbGQgJiYgc3ViSXRlcmF0aW9ucyA8IG1heElubmVySXRlcmF0aW9ucykge1xuICAgICAgICBzdWJJdGVyYXRpb25zICs9IDE7XG4gICAgICAgIHRoaXMuX21vdmVOb2RlKGhpZ2hFX25vZGVJZCwgZEVfZHgsIGRFX2R5KTtcbiAgICAgICAgW2RlbHRhX20sIGRFX2R4LCBkRV9keV0gPSB0aGlzLl9nZXRFbmVyZ3koaGlnaEVfbm9kZUlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBub2RlIHdpdGggdGhlIGhpZ2hlc3QgZW5lcmd5XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaWdub3JlQ2x1c3RlcnNcbiAgICogQHJldHVybnMge251bWJlcltdfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEhpZ2hlc3RFbmVyZ3lOb2RlKGlnbm9yZUNsdXN0ZXJzKSB7XG4gICAgY29uc3Qgbm9kZXNBcnJheSA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBsZXQgbWF4RW5lcmd5ID0gMDtcbiAgICBsZXQgbWF4RW5lcmd5Tm9kZUlkID0gbm9kZXNBcnJheVswXTtcbiAgICBsZXQgZEVfZHhfbWF4ID0gMCxcbiAgICAgIGRFX2R5X21heCA9IDA7XG5cbiAgICBmb3IgKGxldCBub2RlSWR4ID0gMDsgbm9kZUlkeCA8IG5vZGVzQXJyYXkubGVuZ3RoOyBub2RlSWR4KyspIHtcbiAgICAgIGNvbnN0IG0gPSBub2Rlc0FycmF5W25vZGVJZHhdO1xuICAgICAgLy8gYnkgbm90IGV2YWx1YXRpbmcgbm9kZXMgd2l0aCBwcmVkZWZpbmVkIHBvc2l0aW9ucyB3ZSBzaG91bGQgb25seSBtb3ZlIG5vZGVzIHRoYXQgaGF2ZSBubyBwb3NpdGlvbnMuXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGVzW21dLnByZWRlZmluZWRQb3NpdGlvbiAhPT0gdHJ1ZSB8fFxuICAgICAgICAobm9kZXNbbV0uaXNDbHVzdGVyID09PSB0cnVlICYmIGlnbm9yZUNsdXN0ZXJzID09PSB0cnVlKSB8fFxuICAgICAgICBub2Rlc1ttXS5vcHRpb25zLmZpeGVkLnggIT09IHRydWUgfHxcbiAgICAgICAgbm9kZXNbbV0ub3B0aW9ucy5maXhlZC55ICE9PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgW2RlbHRhX20sIGRFX2R4LCBkRV9keV0gPSB0aGlzLl9nZXRFbmVyZ3kobSk7XG4gICAgICAgIGlmIChtYXhFbmVyZ3kgPCBkZWx0YV9tKSB7XG4gICAgICAgICAgbWF4RW5lcmd5ID0gZGVsdGFfbTtcbiAgICAgICAgICBtYXhFbmVyZ3lOb2RlSWQgPSBtO1xuICAgICAgICAgIGRFX2R4X21heCA9IGRFX2R4O1xuICAgICAgICAgIGRFX2R5X21heCA9IGRFX2R5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFttYXhFbmVyZ3lOb2RlSWQsIG1heEVuZXJneSwgZEVfZHhfbWF4LCBkRV9keV9tYXhdO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGN1bGF0ZSB0aGUgZW5lcmd5IG9mIGEgc2luZ2xlIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBtXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRFbmVyZ3kobSkge1xuICAgIGNvbnN0IFtkRV9keCwgZEVfZHldID0gdGhpcy5FX3N1bXNbbV07XG4gICAgY29uc3QgZGVsdGFfbSA9IE1hdGguc3FydChkRV9keCAqKiAyICsgZEVfZHkgKiogMik7XG4gICAgcmV0dXJuIFtkZWx0YV9tLCBkRV9keCwgZEVfZHldO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIG5vZGUgYmFzZWQgb24gaXQncyBlbmVyZ3lcbiAgICogdGhlIGR4IGFuZCBkeSBhcmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBsaW5lYXIgc3lzdGVtIHByb3Bvc2VkIGJ5IEthbWFkYSBhbmQgS2F3YWlcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRFX2R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkRV9keVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21vdmVOb2RlKG0sIGRFX2R4LCBkRV9keSkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgbGV0IGQyRV9keDIgPSAwO1xuICAgIGxldCBkMkVfZHhkeSA9IDA7XG4gICAgbGV0IGQyRV9keTIgPSAwO1xuXG4gICAgY29uc3QgeF9tID0gbm9kZXNbbV0ueDtcbiAgICBjb25zdCB5X20gPSBub2Rlc1ttXS55O1xuICAgIGNvbnN0IGttID0gdGhpcy5LX21hdHJpeFttXTtcbiAgICBjb25zdCBsbSA9IHRoaXMuTF9tYXRyaXhbbV07XG5cbiAgICBmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IG5vZGVzQXJyYXkubGVuZ3RoOyBpSWR4KyspIHtcbiAgICAgIGNvbnN0IGkgPSBub2Rlc0FycmF5W2lJZHhdO1xuICAgICAgaWYgKGkgIT09IG0pIHtcbiAgICAgICAgY29uc3QgeF9pID0gbm9kZXNbaV0ueDtcbiAgICAgICAgY29uc3QgeV9pID0gbm9kZXNbaV0ueTtcbiAgICAgICAgY29uc3Qga21hdCA9IGttW2ldO1xuICAgICAgICBjb25zdCBsbWF0ID0gbG1baV07XG4gICAgICAgIGNvbnN0IGRlbm9taW5hdG9yID0gMS4wIC8gKCh4X20gLSB4X2kpICoqIDIgKyAoeV9tIC0geV9pKSAqKiAyKSAqKiAxLjU7XG4gICAgICAgIGQyRV9keDIgKz0ga21hdCAqICgxIC0gbG1hdCAqICh5X20gLSB5X2kpICoqIDIgKiBkZW5vbWluYXRvcik7XG4gICAgICAgIGQyRV9keGR5ICs9IGttYXQgKiAobG1hdCAqICh4X20gLSB4X2kpICogKHlfbSAtIHlfaSkgKiBkZW5vbWluYXRvcik7XG4gICAgICAgIGQyRV9keTIgKz0ga21hdCAqICgxIC0gbG1hdCAqICh4X20gLSB4X2kpICoqIDIgKiBkZW5vbWluYXRvcik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG1ha2UgdGhlIHZhcmlhYmxlIG5hbWVzIGVhc2llciB0byBtYWtlIHRoZSBzb2x2aW5nIG9mIHRoZSBsaW5lYXIgc3lzdGVtIGVhc2llciB0byByZWFkXG4gICAgY29uc3QgQSA9IGQyRV9keDIsXG4gICAgICBCID0gZDJFX2R4ZHksXG4gICAgICBDID0gZEVfZHgsXG4gICAgICBEID0gZDJFX2R5MixcbiAgICAgIEUgPSBkRV9keTtcblxuICAgIC8vIHNvbHZlIHRoZSBsaW5lYXIgc3lzdGVtIGZvciBkeCBhbmQgZHlcbiAgICBjb25zdCBkeSA9IChDIC8gQSArIEUgLyBCKSAvIChCIC8gQSAtIEQgLyBCKTtcbiAgICBjb25zdCBkeCA9IC0oQiAqIGR5ICsgQykgLyBBO1xuXG4gICAgLy8gbW92ZSB0aGUgbm9kZVxuICAgIG5vZGVzW21dLnggKz0gZHg7XG4gICAgbm9kZXNbbV0ueSArPSBkeTtcblxuICAgIC8vIFJlY2FsY3VsYXRlIEVfbWF0cml4IChzaG91bGQgYmUgaW5jcmVtZW50YWwpXG4gICAgdGhpcy5fdXBkYXRlRV9tYXRyaXgobSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBMIG1hdHJpeDogZWRnZSBsZW5ndGggdGltZXMgc2hvcnRlc3QgcGF0aFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gRF9tYXRyaXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVMX21hdHJpeChEX21hdHJpeCkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3QgZWRnZUxlbmd0aCA9IHRoaXMuc3ByaW5nTGVuZ3RoO1xuXG4gICAgdGhpcy5MX21hdHJpeCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5MX21hdHJpeFtub2Rlc0FycmF5W2ldXSA9IHt9O1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBub2Rlc0FycmF5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHRoaXMuTF9tYXRyaXhbbm9kZXNBcnJheVtpXV1bbm9kZXNBcnJheVtqXV0gPVxuICAgICAgICAgIGVkZ2VMZW5ndGggKiBEX21hdHJpeFtub2Rlc0FycmF5W2ldXVtub2Rlc0FycmF5W2pdXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBLIG1hdHJpeDogc3ByaW5nIGNvbnN0YW50cyB0aW1lcyBzaG9ydGVzdCBwYXRoXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBEX21hdHJpeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUtfbWF0cml4KERfbWF0cml4KSB7XG4gICAgY29uc3Qgbm9kZXNBcnJheSA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcbiAgICBjb25zdCBlZGdlU3RyZW5ndGggPSB0aGlzLnNwcmluZ0NvbnN0YW50O1xuXG4gICAgdGhpcy5LX21hdHJpeCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5LX21hdHJpeFtub2Rlc0FycmF5W2ldXSA9IHt9O1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBub2Rlc0FycmF5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHRoaXMuS19tYXRyaXhbbm9kZXNBcnJheVtpXV1bbm9kZXNBcnJheVtqXV0gPVxuICAgICAgICAgIGVkZ2VTdHJlbmd0aCAqIERfbWF0cml4W25vZGVzQXJyYXlbaV1dW25vZGVzQXJyYXlbal1dICoqIC0yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiAgQ3JlYXRlIG1hdHJpeCB3aXRoIGFsbCBlbmVyZ2llcyBiZXR3ZWVuIG5vZGVzXG4gICAqXG4gICAqICBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUVfbWF0cml4KCkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgdGhpcy5FX21hdHJpeCA9IHt9O1xuICAgIHRoaXMuRV9zdW1zID0ge307XG4gICAgZm9yIChsZXQgbUlkeCA9IDA7IG1JZHggPCBub2Rlc0FycmF5Lmxlbmd0aDsgbUlkeCsrKSB7XG4gICAgICB0aGlzLkVfbWF0cml4W25vZGVzQXJyYXlbbUlkeF1dID0gW107XG4gICAgfVxuICAgIGZvciAobGV0IG1JZHggPSAwOyBtSWR4IDwgbm9kZXNBcnJheS5sZW5ndGg7IG1JZHgrKykge1xuICAgICAgY29uc3QgbSA9IG5vZGVzQXJyYXlbbUlkeF07XG4gICAgICBjb25zdCB4X20gPSBub2Rlc1ttXS54O1xuICAgICAgY29uc3QgeV9tID0gbm9kZXNbbV0ueTtcbiAgICAgIGxldCBkRV9keCA9IDA7XG4gICAgICBsZXQgZEVfZHkgPSAwO1xuICAgICAgZm9yIChsZXQgaUlkeCA9IG1JZHg7IGlJZHggPCBub2Rlc0FycmF5Lmxlbmd0aDsgaUlkeCsrKSB7XG4gICAgICAgIGNvbnN0IGkgPSBub2Rlc0FycmF5W2lJZHhdO1xuICAgICAgICBpZiAoaSAhPT0gbSkge1xuICAgICAgICAgIGNvbnN0IHhfaSA9IG5vZGVzW2ldLng7XG4gICAgICAgICAgY29uc3QgeV9pID0gbm9kZXNbaV0ueTtcbiAgICAgICAgICBjb25zdCBkZW5vbWluYXRvciA9XG4gICAgICAgICAgICAxLjAgLyBNYXRoLnNxcnQoKHhfbSAtIHhfaSkgKiogMiArICh5X20gLSB5X2kpICoqIDIpO1xuICAgICAgICAgIHRoaXMuRV9tYXRyaXhbbV1baUlkeF0gPSBbXG4gICAgICAgICAgICB0aGlzLktfbWF0cml4W21dW2ldICpcbiAgICAgICAgICAgICAgKHhfbSAtIHhfaSAtIHRoaXMuTF9tYXRyaXhbbV1baV0gKiAoeF9tIC0geF9pKSAqIGRlbm9taW5hdG9yKSxcbiAgICAgICAgICAgIHRoaXMuS19tYXRyaXhbbV1baV0gKlxuICAgICAgICAgICAgICAoeV9tIC0geV9pIC0gdGhpcy5MX21hdHJpeFttXVtpXSAqICh5X20gLSB5X2kpICogZGVub21pbmF0b3IpLFxuICAgICAgICAgIF07XG4gICAgICAgICAgdGhpcy5FX21hdHJpeFtpXVttSWR4XSA9IHRoaXMuRV9tYXRyaXhbbV1baUlkeF07XG4gICAgICAgICAgZEVfZHggKz0gdGhpcy5FX21hdHJpeFttXVtpSWR4XVswXTtcbiAgICAgICAgICBkRV9keSArPSB0aGlzLkVfbWF0cml4W21dW2lJZHhdWzFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvL1N0b3JlIHN1bVxuICAgICAgdGhpcy5FX3N1bXNbbV0gPSBbZEVfZHgsIGRFX2R5XTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG1ldGhvZCwganVzdCBkb2luZyBzaW5nbGUgY29sdW1uIChyb3dzIGFyZSBhdXRvLXVwZGF0ZWQpICh1cGRhdGUgYWxsIHN1bXMpXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlRV9tYXRyaXgobSkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgY29sbSA9IHRoaXMuRV9tYXRyaXhbbV07XG4gICAgY29uc3Qga2NvbG0gPSB0aGlzLktfbWF0cml4W21dO1xuICAgIGNvbnN0IGxjb2xtID0gdGhpcy5MX21hdHJpeFttXTtcbiAgICBjb25zdCB4X20gPSBub2Rlc1ttXS54O1xuICAgIGNvbnN0IHlfbSA9IG5vZGVzW21dLnk7XG4gICAgbGV0IGRFX2R4ID0gMDtcbiAgICBsZXQgZEVfZHkgPSAwO1xuICAgIGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgbm9kZXNBcnJheS5sZW5ndGg7IGlJZHgrKykge1xuICAgICAgY29uc3QgaSA9IG5vZGVzQXJyYXlbaUlkeF07XG4gICAgICBpZiAoaSAhPT0gbSkge1xuICAgICAgICAvL0tlZXAgb2xkIGVuZXJneSB2YWx1ZSBmb3Igc3VtIG1vZGlmaWNhdGlvbiBiZWxvd1xuICAgICAgICBjb25zdCBjZWxsID0gY29sbVtpSWR4XTtcbiAgICAgICAgY29uc3Qgb2xkRHggPSBjZWxsWzBdO1xuICAgICAgICBjb25zdCBvbGREeSA9IGNlbGxbMV07XG5cbiAgICAgICAgLy9DYWxjIG5ldyBlbmVyZ3k6XG4gICAgICAgIGNvbnN0IHhfaSA9IG5vZGVzW2ldLng7XG4gICAgICAgIGNvbnN0IHlfaSA9IG5vZGVzW2ldLnk7XG4gICAgICAgIGNvbnN0IGRlbm9taW5hdG9yID1cbiAgICAgICAgICAxLjAgLyBNYXRoLnNxcnQoKHhfbSAtIHhfaSkgKiogMiArICh5X20gLSB5X2kpICoqIDIpO1xuICAgICAgICBjb25zdCBkeCA9XG4gICAgICAgICAga2NvbG1baV0gKiAoeF9tIC0geF9pIC0gbGNvbG1baV0gKiAoeF9tIC0geF9pKSAqIGRlbm9taW5hdG9yKTtcbiAgICAgICAgY29uc3QgZHkgPVxuICAgICAgICAgIGtjb2xtW2ldICogKHlfbSAtIHlfaSAtIGxjb2xtW2ldICogKHlfbSAtIHlfaSkgKiBkZW5vbWluYXRvcik7XG4gICAgICAgIGNvbG1baUlkeF0gPSBbZHgsIGR5XTtcbiAgICAgICAgZEVfZHggKz0gZHg7XG4gICAgICAgIGRFX2R5ICs9IGR5O1xuXG4gICAgICAgIC8vYWRkIG5ldyBlbmVyZ3kgdG8gc3VtIG9mIGVhY2ggY29sdW1uXG4gICAgICAgIGNvbnN0IHN1bSA9IHRoaXMuRV9zdW1zW2ldO1xuICAgICAgICBzdW1bMF0gKz0gZHggLSBvbGREeDtcbiAgICAgICAgc3VtWzFdICs9IGR5IC0gb2xkRHk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vU3RvcmUgc3VtIGF0IC0xIGluZGV4XG4gICAgdGhpcy5FX3N1bXNbbV0gPSBbZEVfZHgsIGRFX2R5XTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBLYW1hZGFLYXdhaTtcbiIsICIvLyBMb2FkIGN1c3RvbSBzaGFwZXMgaW50byBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcbmltcG9ydCBcIi4vc2hhcGVzXCI7XG5cbmltcG9ydCBcInZpcy11dGlsL2VzbmV4dC9zdHlsZXMvYWN0aXZhdG9yLmNzc1wiO1xuaW1wb3J0IFwidmlzLXV0aWwvZXNuZXh0L3N0eWxlcy9ib290c3RyYXAuY3NzXCI7XG5pbXBvcnQgXCJ2aXMtdXRpbC9lc25leHQvc3R5bGVzL2NvbG9yLXBpY2tlci5jc3NcIjtcbmltcG9ydCBcInZpcy11dGlsL2VzbmV4dC9zdHlsZXMvY29uZmlndXJhdG9yLmNzc1wiO1xuaW1wb3J0IFwidmlzLXV0aWwvZXNuZXh0L3N0eWxlcy9wb3B1cC5jc3NcIjtcblxuaW1wb3J0IEVtaXR0ZXIgZnJvbSBcImNvbXBvbmVudC1lbWl0dGVyXCI7XG5pbXBvcnQge1xuICBBY3RpdmF0b3IsXG4gIENvbmZpZ3VyYXRvcixcbiAgVkFMSURBVE9SX1BSSU5UX1NUWUxFLFxuICBWYWxpZGF0b3IsXG4gIGRlZXBFeHRlbmQsXG4gIHJlY3Vyc2l2ZURPTURlbGV0ZSxcbiAgc2VsZWN0aXZlRGVlcEV4dGVuZCxcbn0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgRE9UVG9HcmFwaCB9IGZyb20gXCIuL2RvdHBhcnNlclwiO1xuaW1wb3J0IHsgcGFyc2VHZXBoaSB9IGZyb20gXCIuL2dlcGhpUGFyc2VyXCI7XG5pbXBvcnQgKiBhcyBsb2NhbGVzIGZyb20gXCIuL2xvY2FsZXNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUxhbmd1YWdlQ29kZSB9IGZyb20gXCIuL2xvY2FsZS11dGlsc1wiO1xuXG5pbXBvcnQgSW1hZ2VzIGZyb20gXCIuL0ltYWdlc1wiO1xuaW1wb3J0IHsgR3JvdXBzIH0gZnJvbSBcIi4vbW9kdWxlcy9Hcm91cHNcIjtcbmltcG9ydCBOb2Rlc0hhbmRsZXIgZnJvbSBcIi4vbW9kdWxlcy9Ob2Rlc0hhbmRsZXJcIjtcbmltcG9ydCBFZGdlc0hhbmRsZXIgZnJvbSBcIi4vbW9kdWxlcy9FZGdlc0hhbmRsZXJcIjtcbmltcG9ydCBQaHlzaWNzRW5naW5lIGZyb20gXCIuL21vZHVsZXMvUGh5c2ljc0VuZ2luZVwiO1xuaW1wb3J0IENsdXN0ZXJFbmdpbmUgZnJvbSBcIi4vbW9kdWxlcy9DbHVzdGVyaW5nXCI7XG5pbXBvcnQgQ2FudmFzUmVuZGVyZXIgZnJvbSBcIi4vbW9kdWxlcy9DYW52YXNSZW5kZXJlclwiO1xuaW1wb3J0IENhbnZhcyBmcm9tIFwiLi9tb2R1bGVzL0NhbnZhc1wiO1xuaW1wb3J0IFZpZXcgZnJvbSBcIi4vbW9kdWxlcy9WaWV3XCI7XG5pbXBvcnQgSW50ZXJhY3Rpb25IYW5kbGVyIGZyb20gXCIuL21vZHVsZXMvSW50ZXJhY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgU2VsZWN0aW9uSGFuZGxlciBmcm9tIFwiLi9tb2R1bGVzL1NlbGVjdGlvbkhhbmRsZXJcIjtcbmltcG9ydCBMYXlvdXRFbmdpbmUgZnJvbSBcIi4vbW9kdWxlcy9MYXlvdXRFbmdpbmVcIjtcbmltcG9ydCBNYW5pcHVsYXRpb25TeXN0ZW0gZnJvbSBcIi4vbW9kdWxlcy9NYW5pcHVsYXRpb25TeXN0ZW1cIjtcbmltcG9ydCB7XG4gIGFsbE9wdGlvbnMsXG4gIGNvbmZpZ3VyZU9wdGlvbnMsXG4gIGNvbmZpZ3VyYXRvckhpZGVPcHRpb24sXG59IGZyb20gXCIuL29wdGlvbnNcIjtcbmltcG9ydCBLYW1hZGFLYXdhaSBmcm9tIFwiLi9tb2R1bGVzL0thbWFkYUthd2FpLmpzXCI7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV0d29yayB2aXN1YWxpemF0aW9uLCBkaXNwbGF5aW5nIG5vZGVzIGFuZCBlZGdlcy5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgIFRoZSBET00gZWxlbWVudCBpbiB3aGljaCB0aGUgTmV0d29yayB3aWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBjcmVhdGVkLiBOb3JtYWxseSBhIGRpdiBlbGVtZW50LlxuICogQHBhcmFtIHtvYmplY3R9IGRhdGEgICAgICAgICBBbiBvYmplY3QgY29udGFpbmluZyBwYXJhbWV0ZXJzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtBcnJheX0gbm9kZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0FycmF5fSBlZGdlc1xuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgICAgICBPcHRpb25zXG4gKiBAY2xhc3MgTmV0d29ya1xuICovXG5leHBvcnQgZnVuY3Rpb24gTmV0d29yayhjb250YWluZXIsIGRhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE5ldHdvcmspKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yXCIpO1xuICB9XG5cbiAgLy8gc2V0IGNvbnN0YW50IHZhbHVlc1xuICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBsb2NhbGU6IFwiZW5cIixcbiAgICBsb2NhbGVzOiBsb2NhbGVzLFxuICAgIGNsaWNrVG9Vc2U6IGZhbHNlLFxuICB9O1xuICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lcnMgZm9yIG5vZGVzIGFuZCBlZGdlcy5cbiAgICpcbiAgICogJ2VkZ2VzJyBhbmQgJ25vZGVzJyBjb250YWluIHRoZSBmdWxsIGRlZmluaXRpb25zIG9mIGFsbCB0aGUgbmV0d29yayBlbGVtZW50cy5cbiAgICogJ25vZGVJbmRpY2VzJyBhbmQgJ2VkZ2VJbmRpY2VzJyBjb250YWluIHRoZSBpZCdzIG9mIHRoZSBhY3RpdmUgZWxlbWVudHMuXG4gICAqXG4gICAqIFRoZSBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgYSBkZWZpbmVkIG5vZGUgbmVlZCBub3QgYmUgYWN0aXZlLCBpLmUuXG4gICAqIHZpc2libGUgb24gdGhlIGNhbnZhcy4gVGhpcyBoYXBwZW5zIGluIHBhcnRpY3VsYXIgd2hlbiBjbHVzdGVycyBhcmUgZGVmaW5lZCwgaW5cbiAgICogdGhhdCBjYXNlIHRoZXJlIHdpbGwgYmUgbm9kZXMgYW5kIGVkZ2VzIG5vdCBkaXNwbGF5ZWQuXG4gICAqIFRoZSBib3R0b20gbGluZSBpcyB0aGF0IGFsbCBjb2RlIHdpdGggYWN0aW9ucyByZWxhdGVkIHRvIHZpc2liaWxpdHksICptdXN0KiB1c2VcbiAgICogJ25vZGVJbmRpY2VzJyBhbmQgJ2VkZ2VJbmRpY2VzJywgbm90ICdub2RlcycgYW5kICdlZGdlcycgZGlyZWN0bHkuXG4gICAqL1xuICB0aGlzLmJvZHkgPSB7XG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG5cbiAgICAvLyBTZWUgY29tbWVudCBhYm92ZSBmb3IgZm9sbG93aW5nIGZpZWxkc1xuICAgIG5vZGVzOiB7fSxcbiAgICBub2RlSW5kaWNlczogW10sXG4gICAgZWRnZXM6IHt9LFxuICAgIGVkZ2VJbmRpY2VzOiBbXSxcblxuICAgIGVtaXR0ZXI6IHtcbiAgICAgIG9uOiB0aGlzLm9uLmJpbmQodGhpcyksXG4gICAgICBvZmY6IHRoaXMub2ZmLmJpbmQodGhpcyksXG4gICAgICBlbWl0OiB0aGlzLmVtaXQuYmluZCh0aGlzKSxcbiAgICAgIG9uY2U6IHRoaXMub25jZS5iaW5kKHRoaXMpLFxuICAgIH0sXG4gICAgZXZlbnRMaXN0ZW5lcnM6IHtcbiAgICAgIG9uVGFwOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uVG91Y2g6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Eb3VibGVUYXA6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Ib2xkOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uRHJhZ1N0YXJ0OiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uRHJhZzogZnVuY3Rpb24gKCkge30sXG4gICAgICBvbkRyYWdFbmQ6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Nb3VzZVdoZWVsOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uUGluY2g6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Nb3VzZU1vdmU6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25SZWxlYXNlOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uQ29udGV4dDogZnVuY3Rpb24gKCkge30sXG4gICAgfSxcbiAgICBkYXRhOiB7XG4gICAgICBub2RlczogbnVsbCwgLy8gQSBEYXRhU2V0IG9yIERhdGFWaWV3XG4gICAgICBlZGdlczogbnVsbCwgLy8gQSBEYXRhU2V0IG9yIERhdGFWaWV3XG4gICAgfSxcbiAgICBmdW5jdGlvbnM6IHtcbiAgICAgIGNyZWF0ZU5vZGU6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgY3JlYXRlRWRnZTogZnVuY3Rpb24gKCkge30sXG4gICAgICBnZXRQb2ludGVyOiBmdW5jdGlvbiAoKSB7fSxcbiAgICB9LFxuICAgIG1vZHVsZXM6IHt9LFxuICAgIHZpZXc6IHtcbiAgICAgIHNjYWxlOiAxLFxuICAgICAgdHJhbnNsYXRpb246IHsgeDogMCwgeTogMCB9LFxuICAgIH0sXG4gICAgc2VsZWN0aW9uQm94OiB7XG4gICAgICBzaG93OiBmYWxzZSxcbiAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIHN0YXJ0OiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgICAgZW5kOiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICAvLyBiaW5kIHRoZSBldmVudCBsaXN0ZW5lcnNcbiAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAvLyBzZXR0aW5nIHVwIGFsbCBtb2R1bGVzXG4gIHRoaXMuaW1hZ2VzID0gbmV3IEltYWdlcygoKSA9PiB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIikpOyAvLyBvYmplY3Qgd2l0aCBpbWFnZXNcbiAgdGhpcy5ncm91cHMgPSBuZXcgR3JvdXBzKCk7IC8vIG9iamVjdCB3aXRoIGdyb3Vwc1xuICB0aGlzLmNhbnZhcyA9IG5ldyBDYW52YXModGhpcy5ib2R5KTsgLy8gRE9NIGhhbmRsZXJcbiAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gbmV3IFNlbGVjdGlvbkhhbmRsZXIodGhpcy5ib2R5LCB0aGlzLmNhbnZhcyk7IC8vIFNlbGVjdGlvbiBoYW5kbGVyXG4gIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyID0gbmV3IEludGVyYWN0aW9uSGFuZGxlcihcbiAgICB0aGlzLmJvZHksXG4gICAgdGhpcy5jYW52YXMsXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyXG4gICk7IC8vIEludGVyYWN0aW9uIGhhbmRsZXIgaGFuZGxlcyBhbGwgdGhlIGhhbW1lciBiaW5kaW5ncyAodGhhdCBhcmUgYm91bmQgYnkgY2FudmFzKSwga2V5XG4gIHRoaXMudmlldyA9IG5ldyBWaWV3KHRoaXMuYm9keSwgdGhpcy5jYW52YXMpOyAvLyBjYW1lcmEgaGFuZGxlciwgZG9lcyBhbmltYXRpb25zIGFuZCB6b29tc1xuICB0aGlzLnJlbmRlcmVyID0gbmV3IENhbnZhc1JlbmRlcmVyKHRoaXMuYm9keSwgdGhpcy5jYW52YXMpOyAvLyByZW5kZXJlciwgc3RhcnRzIHJlbmRlcmxvb3AsIGhhcyBldmVudHMgdGhhdCBtb2R1bGVzIGNhbiBob29rIGludG9cbiAgdGhpcy5waHlzaWNzID0gbmV3IFBoeXNpY3NFbmdpbmUodGhpcy5ib2R5KTsgLy8gcGh5c2ljcyBlbmdpbmUsIGRvZXMgYWxsIHRoZSBzaW11bGF0aW9uc1xuICB0aGlzLmxheW91dEVuZ2luZSA9IG5ldyBMYXlvdXRFbmdpbmUodGhpcy5ib2R5KTsgLy8gbGF5b3V0IGVuZ2luZSBmb3IgaW5pdGFsIGxheW91dCBhbmQgaGllcmFyY2hpY2FsIGxheW91dFxuICB0aGlzLmNsdXN0ZXJpbmcgPSBuZXcgQ2x1c3RlckVuZ2luZSh0aGlzLmJvZHkpOyAvLyBjbHVzdGVyaW5nIGFwaVxuICB0aGlzLm1hbmlwdWxhdGlvbiA9IG5ldyBNYW5pcHVsYXRpb25TeXN0ZW0oXG4gICAgdGhpcy5ib2R5LFxuICAgIHRoaXMuY2FudmFzLFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICB0aGlzLmludGVyYWN0aW9uSGFuZGxlclxuICApOyAvLyBkYXRhIG1hbmlwdWxhdGlvbiBzeXN0ZW1cblxuICB0aGlzLm5vZGVzSGFuZGxlciA9IG5ldyBOb2Rlc0hhbmRsZXIoXG4gICAgdGhpcy5ib2R5LFxuICAgIHRoaXMuaW1hZ2VzLFxuICAgIHRoaXMuZ3JvdXBzLFxuICAgIHRoaXMubGF5b3V0RW5naW5lXG4gICk7IC8vIEhhbmRsZSBhZGRpbmcsIGRlbGV0aW5nIGFuZCB1cGRhdGluZyBvZiBub2RlcyBhcyB3ZWxsIGFzIGdsb2JhbCBvcHRpb25zXG4gIHRoaXMuZWRnZXNIYW5kbGVyID0gbmV3IEVkZ2VzSGFuZGxlcih0aGlzLmJvZHksIHRoaXMuaW1hZ2VzLCB0aGlzLmdyb3Vwcyk7IC8vIEhhbmRsZSBhZGRpbmcsIGRlbGV0aW5nIGFuZCB1cGRhdGluZyBvZiBlZGdlcyBhcyB3ZWxsIGFzIGdsb2JhbCBvcHRpb25zXG5cbiAgdGhpcy5ib2R5Lm1vZHVsZXNbXCJrYW1hZGFLYXdhaVwiXSA9IG5ldyBLYW1hZGFLYXdhaSh0aGlzLmJvZHksIDE1MCwgMC4wNSk7IC8vIExheW91dGluZyBhbGdvcml0aG0uXG4gIHRoaXMuYm9keS5tb2R1bGVzW1wiY2x1c3RlcmluZ1wiXSA9IHRoaXMuY2x1c3RlcmluZztcblxuICAvLyBjcmVhdGUgdGhlIERPTSBlbGVtZW50c1xuICB0aGlzLmNhbnZhcy5fY3JlYXRlKCk7XG5cbiAgLy8gYXBwbHkgb3B0aW9uc1xuICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgLy8gbG9hZCBkYXRhICh0aGUgZGlzYWJsZSBzdGFydCB2YXJpYWJsZSB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBlbmFibGVkIGNsdXN0ZXJpbmcpXG4gIHRoaXMuc2V0RGF0YShkYXRhKTtcbn1cblxuLy8gRXh0ZW5kIE5ldHdvcmsgd2l0aCBhbiBFbWl0dGVyIG1peGluXG5FbWl0dGVyKE5ldHdvcmsucHJvdG90eXBlKTtcblxuLyoqXG4gKiBTZXQgb3B0aW9uc1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gbnVsbCkge1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7IC8vIFRoaXMgZW5zdXJlcyB0aGF0IG9wdGlvbnMgaGFuZGxpbmcgZG9lc24ndCBjcmFzaCBpbiB0aGUgaGFuZGxpbmdcbiAgfVxuXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBlcnJvckZvdW5kID0gVmFsaWRhdG9yLnZhbGlkYXRlKG9wdGlvbnMsIGFsbE9wdGlvbnMpO1xuICAgIGlmIChlcnJvckZvdW5kID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjRXJyb3JzIGhhdmUgYmVlbiBmb3VuZCBpbiB0aGUgc3VwcGxpZWQgb3B0aW9ucyBvYmplY3QuXCIsXG4gICAgICAgIFZBTElEQVRPUl9QUklOVF9TVFlMRVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjb3B5IHRoZSBnbG9iYWwgZmllbGRzIG92ZXJcbiAgICBjb25zdCBmaWVsZHMgPSBbXCJsb2NhbGVcIiwgXCJsb2NhbGVzXCIsIFwiY2xpY2tUb1VzZVwiXTtcbiAgICBzZWxlY3RpdmVEZWVwRXh0ZW5kKGZpZWxkcywgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcblxuICAgIC8vIG5vcm1hbGl6ZSB0aGUgbG9jYWxlIG9yIHVzZSBFbmdsaXNoXG4gICAgaWYgKG9wdGlvbnMubG9jYWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMubG9jYWxlID0gbm9ybWFsaXplTGFuZ3VhZ2VDb2RlKFxuICAgICAgICBvcHRpb25zLmxvY2FsZXMgfHwgdGhpcy5vcHRpb25zLmxvY2FsZXMsXG4gICAgICAgIG9wdGlvbnMubG9jYWxlXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHRoZSBoaWVyYXJjaGljYWwgc3lzdGVtIGNhbiBhZGFwdCB0aGUgZWRnZXMgYW5kIHRoZSBwaHlzaWNzIHRvIGl0J3Mgb3duIG9wdGlvbnMgYmVjYXVzZSBub3QgYWxsIGNvbWJpbmF0aW9ucyB3b3JrIHdpdGggdGhlIGhpZXJhcmljaGljYWwgc3lzdGVtLlxuICAgIG9wdGlvbnMgPSB0aGlzLmxheW91dEVuZ2luZS5zZXRPcHRpb25zKG9wdGlvbnMubGF5b3V0LCBvcHRpb25zKTtcblxuICAgIHRoaXMuY2FudmFzLnNldE9wdGlvbnMob3B0aW9ucyk7IC8vIG9wdGlvbnMgZm9yIGNhbnZhcyBhcmUgaW4gZ2xvYmFsc1xuXG4gICAgLy8gcGFzcyB0aGUgb3B0aW9ucyB0byB0aGUgbW9kdWxlc1xuICAgIHRoaXMuZ3JvdXBzLnNldE9wdGlvbnMob3B0aW9ucy5ncm91cHMpO1xuICAgIHRoaXMubm9kZXNIYW5kbGVyLnNldE9wdGlvbnMob3B0aW9ucy5ub2Rlcyk7XG4gICAgdGhpcy5lZGdlc0hhbmRsZXIuc2V0T3B0aW9ucyhvcHRpb25zLmVkZ2VzKTtcbiAgICB0aGlzLnBoeXNpY3Muc2V0T3B0aW9ucyhvcHRpb25zLnBoeXNpY3MpO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uLnNldE9wdGlvbnMob3B0aW9ucy5tYW5pcHVsYXRpb24sIG9wdGlvbnMsIHRoaXMub3B0aW9ucyk7IC8vIG1hbmlwdWxhdGlvbiB1c2VzIHRoZSBsb2NhbGVzIGluIHRoZSBnbG9iYWxzXG5cbiAgICB0aGlzLmludGVyYWN0aW9uSGFuZGxlci5zZXRPcHRpb25zKG9wdGlvbnMuaW50ZXJhY3Rpb24pO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T3B0aW9ucyhvcHRpb25zLmludGVyYWN0aW9uKTsgLy8gb3B0aW9ucyBmb3IgcmVuZGVyaW5nIGFyZSBpbiBpbnRlcmFjdGlvblxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5zZXRPcHRpb25zKG9wdGlvbnMuaW50ZXJhY3Rpb24pOyAvLyBvcHRpb25zIGZvciBzZWxlY3Rpb24gYXJlIGluIGludGVyYWN0aW9uXG5cbiAgICAvLyByZWxvYWQgdGhlIHNldHRpbmdzIG9mIHRoZSBub2RlcyB0byBhcHBseSBjaGFuZ2VzIGluIGdyb3VwcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBieSBwb2ludGVyLlxuICAgIGlmIChvcHRpb25zLmdyb3VwcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVmcmVzaE5vZGVzXCIpO1xuICAgIH1cbiAgICAvLyB0aGVzZSB0d28gZG8gbm90IGhhdmUgb3B0aW9ucyBhdCB0aGUgbW9tZW50LCBoZXJlIGZvciBjb21wbGV0ZW5lc3NcbiAgICAvL3RoaXMudmlldy5zZXRPcHRpb25zKG9wdGlvbnMudmlldyk7XG4gICAgLy90aGlzLmNsdXN0ZXJpbmcuc2V0T3B0aW9ucyhvcHRpb25zLmNsdXN0ZXJpbmcpO1xuXG4gICAgaWYgKFwiY29uZmlndXJlXCIgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRvcikge1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRvciA9IG5ldyBDb25maWd1cmF0b3IoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmJvZHkuY29udGFpbmVyLFxuICAgICAgICAgIGNvbmZpZ3VyZU9wdGlvbnMsXG4gICAgICAgICAgdGhpcy5jYW52YXMucGl4ZWxSYXRpbyxcbiAgICAgICAgICBjb25maWd1cmF0b3JIaWRlT3B0aW9uXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29uZmlndXJhdG9yLnNldE9wdGlvbnMob3B0aW9ucy5jb25maWd1cmUpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBpcyBlbmFibGVkLCBjb3B5IGFsbCBvcHRpb25zIGFuZCBwdXQgdGhlbSBpbnRvIHRoZSBjb25maWcgc3lzdGVtXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdG9yICYmIHRoaXMuY29uZmlndXJhdG9yLm9wdGlvbnMuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgbmV0d29ya09wdGlvbnMgPSB7XG4gICAgICAgIG5vZGVzOiB7fSxcbiAgICAgICAgZWRnZXM6IHt9LFxuICAgICAgICBsYXlvdXQ6IHt9LFxuICAgICAgICBpbnRlcmFjdGlvbjoge30sXG4gICAgICAgIG1hbmlwdWxhdGlvbjoge30sXG4gICAgICAgIHBoeXNpY3M6IHt9LFxuICAgICAgICBnbG9iYWw6IHt9LFxuICAgICAgfTtcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMubm9kZXMsIHRoaXMubm9kZXNIYW5kbGVyLm9wdGlvbnMpO1xuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5lZGdlcywgdGhpcy5lZGdlc0hhbmRsZXIub3B0aW9ucyk7XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLmxheW91dCwgdGhpcy5sYXlvdXRFbmdpbmUub3B0aW9ucyk7XG4gICAgICAvLyBsb2FkIHRoZSBzZWxlY3Rpb25IYW5kbGVyIGFuZCByZW5kZXIgZGVmYXVsdCBvcHRpb25zIGluIHRvIHRoZSBpbnRlcmFjdGlvbiBncm91cFxuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5pbnRlcmFjdGlvbiwgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLm9wdGlvbnMpO1xuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5pbnRlcmFjdGlvbiwgdGhpcy5yZW5kZXJlci5vcHRpb25zKTtcblxuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5pbnRlcmFjdGlvbiwgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIub3B0aW9ucyk7XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLm1hbmlwdWxhdGlvbiwgdGhpcy5tYW5pcHVsYXRpb24ub3B0aW9ucyk7XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLnBoeXNpY3MsIHRoaXMucGh5c2ljcy5vcHRpb25zKTtcblxuICAgICAgLy8gbG9hZCBnbG9iYWxzIGludG8gdGhlIGdsb2JhbCBvYmplY3RcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuZ2xvYmFsLCB0aGlzLmNhbnZhcy5vcHRpb25zKTtcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuZ2xvYmFsLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRvci5zZXRNb2R1bGVPcHRpb25zKG5ldHdvcmtPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgbmV0d29yayBnbG9iYWwgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zLmNsaWNrVG9Vc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMuY2xpY2tUb1VzZSA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZhdG9yID0gbmV3IEFjdGl2YXRvcih0aGlzLmNhbnZhcy5mcmFtZSk7XG4gICAgICAgICAgdGhpcy5hY3RpdmF0b3Iub24oXCJjaGFuZ2VcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImFjdGl2YXRlXCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmF0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZhdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5hY3RpdmF0b3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImFjdGl2YXRlXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYWN0aXZhdGVcIik7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuc2V0U2l6ZSgpO1xuICAgIC8vIHN0YXJ0IHRoZSBwaHlzaWNzIHNpbXVsYXRpb24uIENhbiBiZSBzYWZlbHkgY2FsbGVkIG11bHRpcGxlIHRpbWVzLlxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gIH1cbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSB2aXNpYmxlIG5vZGVzIGFuZCBlZGdlcyBsaXN0IHdpdGggdGhlIG1vc3QgcmVjZW50IG5vZGUgc3RhdGUuXG4gKlxuICogVmlzaWJsZSBub2RlcyBhcmUgc3RvcmVkIGluIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5cbiAqIFZpc2libGUgZWRnZXMgYXJlIHN0b3JlZCBpbiB0aGlzLmJvZHkuZWRnZUluZGljZXMuXG4gKiBBIG5vZGUgb3IgZWRnZXMgaXMgdmlzaWJsZSBpZiBpdCBpcyBub3QgaGlkZGVuIG9yIGNsdXN0ZXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5OZXR3b3JrLnByb3RvdHlwZS5fdXBkYXRlVmlzaWJsZUluZGljZXMgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzID0gW107XG4gIHRoaXMuYm9keS5lZGdlSW5kaWNlcyA9IFtdO1xuXG4gIGZvciAoY29uc3Qgbm9kZUlkIGluIG5vZGVzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2Rlcywgbm9kZUlkKSkge1xuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5jbHVzdGVyaW5nLl9pc0NsdXN0ZXJlZE5vZGUobm9kZUlkKSAmJlxuICAgICAgICBub2Rlc1tub2RlSWRdLm9wdGlvbnMuaGlkZGVuID09PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5wdXNoKG5vZGVzW25vZGVJZF0uaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZWRnZUlkIGluIGVkZ2VzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZGdlcywgZWRnZUlkKSkge1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2VkZ2VJZF07XG5cbiAgICAgIC8vIEl0IGNhbiBoYXBwZW4gdGhhdCB0aGlzIGlzIGV4ZWN1dGVkICphZnRlciogYSBub2RlIGVkZ2UgaGFzIGJlZW4gcmVtb3ZlZCxcbiAgICAgIC8vIGJ1dCAqYmVmb3JlKiB0aGUgZWRnZSBpdHNlbGYgaGFzIGJlZW4gcmVtb3ZlZC4gVGFraW5nIHRoaXMgaW50byBhY2NvdW50LlxuICAgICAgY29uc3QgZnJvbU5vZGUgPSBub2Rlc1tlZGdlLmZyb21JZF07XG4gICAgICBjb25zdCB0b05vZGUgPSBub2Rlc1tlZGdlLnRvSWRdO1xuICAgICAgY29uc3QgZWRnZU5vZGVzUHJlc2VudCA9IGZyb21Ob2RlICE9PSB1bmRlZmluZWQgJiYgdG9Ob2RlICE9PSB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGlzVmlzaWJsZSA9XG4gICAgICAgICF0aGlzLmNsdXN0ZXJpbmcuX2lzQ2x1c3RlcmVkRWRnZShlZGdlSWQpICYmXG4gICAgICAgIGVkZ2Uub3B0aW9ucy5oaWRkZW4gPT09IGZhbHNlICYmXG4gICAgICAgIGVkZ2VOb2Rlc1ByZXNlbnQgJiZcbiAgICAgICAgZnJvbU5vZGUub3B0aW9ucy5oaWRkZW4gPT09IGZhbHNlICYmIC8vIEFsc28gaGlkZGVuIGlmIGFueSBvZiBpdHMgY29ubmVjdGluZyBub2RlcyBhcmUgaGlkZGVuXG4gICAgICAgIHRvTm9kZS5vcHRpb25zLmhpZGRlbiA9PT0gZmFsc2U7IC8vIGlkZW1cblxuICAgICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgICB0aGlzLmJvZHkuZWRnZUluZGljZXMucHVzaChlZGdlLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQmluZCBhbGwgZXZlbnRzXG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLmJpbmRFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhpcyBldmVudCB3aWxsIHRyaWdnZXIgYSByZWJ1aWxkaW5nIG9mIHRoZSBjYWNoZSBldmVyeXRoaW5nLlxuICAvLyBVc2VkIHdoZW4gbm9kZXMgb3IgZWRnZXMgaGF2ZSBiZWVuIGFkZGVkIG9yIHJlbW92ZWQuXG4gIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFDaGFuZ2VkXCIsICgpID0+IHtcbiAgICB0aGlzLmVkZ2VzSGFuZGxlci5fdXBkYXRlU3RhdGUoKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFVcGRhdGVkXCIpO1xuICB9KTtcblxuICAvLyB0aGlzIGlzIGNhbGxlZCB3aGVuIG9wdGlvbnMgb2YgRVhJU1RJTkcgbm9kZXMgb3IgZWRnZXMgaGF2ZSBjaGFuZ2VkLlxuICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9kYXRhVXBkYXRlZFwiLCAoKSA9PiB7XG4gICAgLy8gT3JkZXIgaW1wb3J0YW50IGluIGZvbGxvd2luZyBibG9ja1xuICAgIHRoaXMuY2x1c3RlcmluZy5fdXBkYXRlU3RhdGUoKTtcbiAgICB0aGlzLl91cGRhdGVWaXNpYmxlSW5kaWNlcygpO1xuXG4gICAgdGhpcy5fdXBkYXRlVmFsdWVSYW5nZSh0aGlzLmJvZHkubm9kZXMpO1xuICAgIHRoaXMuX3VwZGF0ZVZhbHVlUmFuZ2UodGhpcy5ib2R5LmVkZ2VzKTtcbiAgICAvLyBzdGFydCBzaW11bGF0aW9uIChjYW4gYmUgY2FsbGVkIHNhZmVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcpXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U2ltdWxhdGlvblwiKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBTZXQgbm9kZXMgYW5kIGVkZ2VzLCBhbmQgb3B0aW9uYWxseSBvcHRpb25zIGFzIHdlbGwuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRhdGEgICAgICAgICAgICAgIE9iamVjdCBjb250YWluaW5nIHBhcmFtZXRlcnM6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0FycmF5IHwgRGF0YVNldCB8IERhdGFWaWV3fSBbbm9kZXNdIEFycmF5IHdpdGggbm9kZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QXJyYXkgfCBEYXRhU2V0IHwgRGF0YVZpZXd9IFtlZGdlc10gQXJyYXkgd2l0aCBlZGdlc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmd9IFtkb3RdIFN0cmluZyBjb250YWluaW5nIGRhdGEgaW4gRE9UIGZvcm1hdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmd9IFtnZXBoaV0gU3RyaW5nIGNvbnRhaW5pbmcgZGF0YSBpbiBnZXBoaSBKU09OIGZvcm1hdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtPcHRpb25zfSBbb3B0aW9uc10gT2JqZWN0IHdpdGggb3B0aW9uc1xuICovXG5OZXR3b3JrLnByb3RvdHlwZS5zZXREYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgLy8gcmVzZXQgdGhlIHBoeXNpY3MgZW5naW5lLlxuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVzZXRQaHlzaWNzXCIpO1xuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3Jlc2V0RGF0YVwiKTtcblxuICAvLyB1bnNlbGVjdCBhbGwgdG8gZW5zdXJlIG5vIHNlbGVjdGlvbnMgZnJvbSBvbGQgZGF0YSBhcmUgY2FycmllZCBvdmVyLlxuICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwoKTtcblxuICBpZiAoZGF0YSAmJiBkYXRhLmRvdCAmJiAoZGF0YS5ub2RlcyB8fCBkYXRhLmVkZ2VzKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICdEYXRhIG11c3QgY29udGFpbiBlaXRoZXIgcGFyYW1ldGVyIFwiZG90XCIgb3IgJyArXG4gICAgICAgICcgcGFyYW1ldGVyIHBhaXIgXCJub2Rlc1wiIGFuZCBcImVkZ2VzXCIsIGJ1dCBub3QgYm90aC4nXG4gICAgKTtcbiAgfVxuXG4gIC8vIHNldCBvcHRpb25zXG4gIHRoaXMuc2V0T3B0aW9ucyhkYXRhICYmIGRhdGEub3B0aW9ucyk7XG4gIC8vIHNldCBhbGwgZGF0YVxuICBpZiAoZGF0YSAmJiBkYXRhLmRvdCkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIFwiVGhlIGRvdCBwcm9wZXJ0eSBoYXMgYmVlbiBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRoZSBzdGF0aWMgY29udmVydERvdCBtZXRob2QgdG8gY29udmVydCBET1QgaW50byB2aXMubmV0d29yayBmb3JtYXQgYW5kIHVzZSB0aGUgbm9ybWFsIGRhdGEgZm9ybWF0IHdpdGggbm9kZXMgYW5kIGVkZ2VzLiBUaGlzIGNvbnZlcnRlciBpcyB1c2VkIGxpa2UgdGhpczogdmFyIGRhdGEgPSB2aXMubmV0d29yay5jb252ZXJ0RG90KGRvdFN0cmluZyk7XCJcbiAgICApO1xuICAgIC8vIHBhcnNlIERPVCBmaWxlXG4gICAgY29uc3QgZG90RGF0YSA9IERPVFRvR3JhcGgoZGF0YS5kb3QpO1xuICAgIHRoaXMuc2V0RGF0YShkb3REYXRhKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLmdlcGhpKSB7XG4gICAgLy8gcGFyc2UgRE9UIGZpbGVcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIlRoZSBnZXBoaSBwcm9wZXJ0eSBoYXMgYmVlbiBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRoZSBzdGF0aWMgY29udmVydEdlcGhpIG1ldGhvZCB0byBjb252ZXJ0IGdlcGhpIGludG8gdmlzLm5ldHdvcmsgZm9ybWF0IGFuZCB1c2UgdGhlIG5vcm1hbCBkYXRhIGZvcm1hdCB3aXRoIG5vZGVzIGFuZCBlZGdlcy4gVGhpcyBjb252ZXJ0ZXIgaXMgdXNlZCBsaWtlIHRoaXM6IHZhciBkYXRhID0gdmlzLm5ldHdvcmsuY29udmVydEdlcGhpKGdlcGhpSnNvbik7XCJcbiAgICApO1xuICAgIGNvbnN0IGdlcGhpRGF0YSA9IHBhcnNlR2VwaGkoZGF0YS5nZXBoaSk7XG4gICAgdGhpcy5zZXREYXRhKGdlcGhpRGF0YSk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubm9kZXNIYW5kbGVyLnNldERhdGEoZGF0YSAmJiBkYXRhLm5vZGVzLCB0cnVlKTtcbiAgICB0aGlzLmVkZ2VzSGFuZGxlci5zZXREYXRhKGRhdGEgJiYgZGF0YS5lZGdlcywgdHJ1ZSk7XG4gIH1cblxuICAvLyBlbWl0IGNoYW5nZSBpbiBkYXRhXG4gIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG5cbiAgLy8gZW1pdCBkYXRhIGxvYWRlZFxuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFMb2FkZWRcIik7XG5cbiAgLy8gZmluZCBhIHN0YWJsZSBwb3NpdGlvbiBvciBzdGFydCBhbmltYXRpbmcgdG8gYSBzdGFibGUgcG9zaXRpb25cbiAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImluaXRQaHlzaWNzXCIpO1xufTtcblxuLyoqXG4gKiBDbGVhbnMgdXAgYWxsIGJpbmRpbmdzIG9mIHRoZSBuZXR3b3JrLCByZW1vdmluZyBpdCBmdWxseSBmcm9tIHRoZSBtZW1vcnkgSUYgdGhlIHZhcmlhYmxlIGlzIHNldCB0byBudWxsIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbiAqIHZhciBuZXR3b3JrID0gbmV3IHZpcy5OZXR3b3JrKC4uKTtcbiAqIG5ldHdvcmsuZGVzdHJveSgpO1xuICogbmV0d29yayA9IG51bGw7XG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJkZXN0cm95XCIpO1xuICAvLyBjbGVhciBldmVudHNcbiAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKCk7XG4gIHRoaXMub2ZmKCk7XG5cbiAgLy8gZGVsZXRlIG1vZHVsZXNcbiAgZGVsZXRlIHRoaXMuZ3JvdXBzO1xuICBkZWxldGUgdGhpcy5jYW52YXM7XG4gIGRlbGV0ZSB0aGlzLnNlbGVjdGlvbkhhbmRsZXI7XG4gIGRlbGV0ZSB0aGlzLmludGVyYWN0aW9uSGFuZGxlcjtcbiAgZGVsZXRlIHRoaXMudmlldztcbiAgZGVsZXRlIHRoaXMucmVuZGVyZXI7XG4gIGRlbGV0ZSB0aGlzLnBoeXNpY3M7XG4gIGRlbGV0ZSB0aGlzLmxheW91dEVuZ2luZTtcbiAgZGVsZXRlIHRoaXMuY2x1c3RlcmluZztcbiAgZGVsZXRlIHRoaXMubWFuaXB1bGF0aW9uO1xuICBkZWxldGUgdGhpcy5ub2Rlc0hhbmRsZXI7XG4gIGRlbGV0ZSB0aGlzLmVkZ2VzSGFuZGxlcjtcbiAgZGVsZXRlIHRoaXMuY29uZmlndXJhdG9yO1xuICBkZWxldGUgdGhpcy5pbWFnZXM7XG5cbiAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKVxuICAgICAgY29udGludWU7XG4gICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICB9XG5cbiAgZm9yIChjb25zdCBlZGdlSWQgaW4gdGhpcy5ib2R5LmVkZ2VzKSB7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlSWQpKVxuICAgICAgY29udGludWU7XG4gICAgZGVsZXRlIHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICB9XG5cbiAgLy8gcmVtb3ZlIHRoZSBjb250YWluZXIgYW5kIGV2ZXJ5dGhpbmcgaW5zaWRlIGl0IHJlY3Vyc2l2ZWx5XG4gIHJlY3Vyc2l2ZURPTURlbGV0ZSh0aGlzLmJvZHkuY29udGFpbmVyKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSB2YWx1ZXMgb2YgYWxsIG9iamVjdCBpbiB0aGUgZ2l2ZW4gYXJyYXkgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50XG4gKiB2YWx1ZSByYW5nZSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iaiAgICBBbiBvYmplY3QgY29udGFpbmluZyBhIHNldCBvZiBFZGdlcyBvciBOb2Rlc1xuICogICAgICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0cyBtdXN0IGhhdmUgYSBtZXRob2QgZ2V0VmFsdWUoKSBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWVSYW5nZShtaW4sIG1heCkuXG4gKiBAcHJpdmF0ZVxuICovXG5OZXR3b3JrLnByb3RvdHlwZS5fdXBkYXRlVmFsdWVSYW5nZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgbGV0IGlkO1xuXG4gIC8vIGRldGVybWluZSB0aGUgcmFuZ2Ugb2YgdGhlIG9iamVjdHNcbiAgbGV0IHZhbHVlTWluID0gdW5kZWZpbmVkO1xuICBsZXQgdmFsdWVNYXggPSB1bmRlZmluZWQ7XG4gIGxldCB2YWx1ZVRvdGFsID0gMDtcbiAgZm9yIChpZCBpbiBvYmopIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaWQpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtpZF0uZ2V0VmFsdWUoKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlTWluID0gdmFsdWVNaW4gPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogTWF0aC5taW4odmFsdWUsIHZhbHVlTWluKTtcbiAgICAgICAgdmFsdWVNYXggPSB2YWx1ZU1heCA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBNYXRoLm1heCh2YWx1ZSwgdmFsdWVNYXgpO1xuICAgICAgICB2YWx1ZVRvdGFsICs9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGFkanVzdCB0aGUgcmFuZ2Ugb2YgYWxsIG9iamVjdHNcbiAgaWYgKHZhbHVlTWluICE9PSB1bmRlZmluZWQgJiYgdmFsdWVNYXggIT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoaWQgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaWQpKSB7XG4gICAgICAgIG9ialtpZF0uc2V0VmFsdWVSYW5nZSh2YWx1ZU1pbiwgdmFsdWVNYXgsIHZhbHVlVG90YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgTmV0d29yayBpcyBhY3RpdmUuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIXRoaXMuYWN0aXZhdG9yIHx8IHRoaXMuYWN0aXZhdG9yLmFjdGl2ZTtcbn07XG5cbk5ldHdvcmsucHJvdG90eXBlLnNldFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNhbnZhcy5zZXRTaXplLmFwcGx5KHRoaXMuY2FudmFzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmNhbnZhc1RvRE9NID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jYW52YXMuY2FudmFzVG9ET00uYXBwbHkodGhpcy5jYW52YXMsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuRE9NdG9DYW52YXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNhbnZhcy5ET010b0NhbnZhcy5hcHBseSh0aGlzLmNhbnZhcywgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogTm9kZXMgY2FuIGJlIGluIGNsdXN0ZXJzLiBDbHVzdGVycyBjYW4gYWxzbyBiZSBpbiBjbHVzdGVycy4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuZCBhcnJheSBvZlxuICogbm9kZUlkcyBzaG93aW5nIHdoZXJlIHRoZSBub2RlIGlzLlxuICpcbiAqIElmIGFueSBub2RlSWQgaW4gdGhlIGNoYWluLCBlc3BlY2lhbGx5IHRoZSBmaXJzdCBwYXNzZWQgaW4gYXMgYSBwYXJhbWV0ZXIsIGlzIG5vdCBwcmVzZW50IGluXG4gKiB0aGUgY3VycmVudCBub2RlcyBsaXN0LCBhbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZC5cbiAqXG4gKiBFeGFtcGxlOlxuICogY2x1c3RlciAnQScgY29udGFpbnMgY2x1c3RlciAnQicsXG4gKiBjbHVzdGVyICdCJyBjb250YWlucyBjbHVzdGVyICdDJyxcbiAqIGNsdXN0ZXIgJ0MnIGNvbnRhaW5zIG5vZGUgJ2ZyZWQnLlxuICogYGpzbmV0d29yay5jbHVzdGVyaW5nLmZpbmROb2RlKCdmcmVkJylgIHdpbGwgcmV0dXJuIGBbJ0EnLCdCJywnQycsJ2ZyZWQnXWAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBub2RlSWRcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuTmV0d29yay5wcm90b3R5cGUuZmluZE5vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuZmluZE5vZGUuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcblxuTmV0d29yay5wcm90b3R5cGUuaXNDbHVzdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmlzQ2x1c3Rlci5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUub3BlbkNsdXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcub3BlbkNsdXN0ZXIuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmNsdXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuY2x1c3Rlci5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0Tm9kZXNJbkNsdXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuZ2V0Tm9kZXNJbkNsdXN0ZXIuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmNsdXN0ZXJCeUNvbm5lY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuY2x1c3RlckJ5Q29ubmVjdGlvbi5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuY2x1c3RlckJ5SHVic2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy5jbHVzdGVyQnlIdWJzaXplLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS51cGRhdGVDbHVzdGVyZWROb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLnVwZGF0ZUNsdXN0ZXJlZE5vZGUuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldENsdXN0ZXJlZEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmdldENsdXN0ZXJlZEVkZ2VzLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRCYXNlRWRnZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy5nZXRCYXNlRWRnZS5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0QmFzZUVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmdldEJhc2VFZGdlcy5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUudXBkYXRlRWRnZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy51cGRhdGVFZGdlLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2Qgd2lsbCBjbHVzdGVyIGFsbCBub2RlcyB3aXRoIDEgZWRnZSB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgY29ubmVjdGVkIG5vZGUuXG4gKiBUaGUgb3B0aW9ucyBvYmplY3QgaXMgZXhwbGFpbmVkIGluIGZ1bGwgPGEgZGF0YS1zY3JvbGw9XCJcIiBkYXRhLW9wdGlvbnM9XCJ7ICZxdW90O2Vhc2luZyZxdW90OzogJnF1b3Q7ZWFzZUluQ3ViaWMmcXVvdDsgfVwiIGhyZWY9XCIjb3B0aW9uc09iamVjdFwiPmJlbG93PC9hPi5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5OZXR3b3JrLnByb3RvdHlwZS5jbHVzdGVyT3V0bGllcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuY2x1c3Rlck91dGxpZXJzLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5cbk5ldHdvcmsucHJvdG90eXBlLmdldFNlZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxheW91dEVuZ2luZS5nZXRTZWVkLmFwcGx5KHRoaXMubGF5b3V0RW5naW5lLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmVuYWJsZUVkaXRNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZW5hYmxlRWRpdE1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZGlzYWJsZUVkaXRNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZGlzYWJsZUVkaXRNb2RlLmFwcGx5KHRoaXMubWFuaXB1bGF0aW9uLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmFkZE5vZGVNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uYWRkTm9kZU1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZWRpdE5vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5lZGl0Tm9kZS5hcHBseSh0aGlzLm1hbmlwdWxhdGlvbiwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5lZGl0Tm9kZU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnNvbGUud2FybihcIkRlcHJlY2F0ZWQ6IFBsZWFzZSB1c2UgZWRpdE5vZGUgaW5zdGVhZCBvZiBlZGl0Tm9kZU1vZGUuXCIpO1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZWRpdE5vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuYWRkRWRnZU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5hZGRFZGdlTW9kZS5hcHBseSh0aGlzLm1hbmlwdWxhdGlvbiwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5lZGl0RWRnZU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5lZGl0RWRnZU1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZGVsZXRlU2VsZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5kZWxldGVTZWxlY3RlZC5hcHBseSh0aGlzLm1hbmlwdWxhdGlvbiwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRQb3NpdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5nZXRQb3NpdGlvbnMuYXBwbHkodGhpcy5ub2Rlc0hhbmRsZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5nZXRQb3NpdGlvbi5hcHBseSh0aGlzLm5vZGVzSGFuZGxlciwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5zdG9yZVBvc2l0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubm9kZXNIYW5kbGVyLnN0b3JlUG9zaXRpb25zLmFwcGx5KHRoaXMubm9kZXNIYW5kbGVyLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLm1vdmVOb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlc0hhbmRsZXIubW92ZU5vZGUuYXBwbHkodGhpcy5ub2Rlc0hhbmRsZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3ggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5nZXRCb3VuZGluZ0JveC5hcHBseSh0aGlzLm5vZGVzSGFuZGxlciwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRDb25uZWN0ZWROb2RlcyA9IGZ1bmN0aW9uIChvYmplY3RJZCkge1xuICBpZiAodGhpcy5ib2R5Lm5vZGVzW29iamVjdElkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXNIYW5kbGVyLmdldENvbm5lY3RlZE5vZGVzLmFwcGx5KFxuICAgICAgdGhpcy5ub2Rlc0hhbmRsZXIsXG4gICAgICBhcmd1bWVudHNcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLmVkZ2VzSGFuZGxlci5nZXRDb25uZWN0ZWROb2Rlcy5hcHBseShcbiAgICAgIHRoaXMuZWRnZXNIYW5kbGVyLFxuICAgICAgYXJndW1lbnRzXG4gICAgKTtcbiAgfVxufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldENvbm5lY3RlZEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlc0hhbmRsZXIuZ2V0Q29ubmVjdGVkRWRnZXMuYXBwbHkoXG4gICAgdGhpcy5ub2Rlc0hhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuc3RhcnRTaW11bGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5waHlzaWNzLnN0YXJ0U2ltdWxhdGlvbi5hcHBseSh0aGlzLnBoeXNpY3MsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuc3RvcFNpbXVsYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBoeXNpY3Muc3RvcFNpbXVsYXRpb24uYXBwbHkodGhpcy5waHlzaWNzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnN0YWJpbGl6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGh5c2ljcy5zdGFiaWxpemUuYXBwbHkodGhpcy5waHlzaWNzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3Rpb24uYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnNldFNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5zZXRTZWxlY3Rpb24uYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFNlbGVjdGVkTm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWROb2RlSWRzLmFwcGx5KFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICBhcmd1bWVudHNcbiAgKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRTZWxlY3RlZEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkRWRnZUlkcy5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0Tm9kZUF0ID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldE5vZGVBdC5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG4gIGlmIChub2RlICE9PSB1bmRlZmluZWQgJiYgbm9kZS5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5vZGUuaWQ7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0RWRnZUF0ID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBlZGdlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldEVkZ2VBdC5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG4gIGlmIChlZGdlICE9PSB1bmRlZmluZWQgJiYgZWRnZS5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGVkZ2UuaWQ7XG4gIH1cbiAgcmV0dXJuIGVkZ2U7XG59O1xuTmV0d29yay5wcm90b3R5cGUuc2VsZWN0Tm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0Tm9kZXMuYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnNlbGVjdEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnNlbGVjdEVkZ2VzLmFwcGx5KFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICBhcmd1bWVudHNcbiAgKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS51bnNlbGVjdEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsLmFwcGx5KHRoaXMuc2VsZWN0aW9uSGFuZGxlciwgYXJndW1lbnRzKTtcbiAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmNvbW1pdFdpdGhvdXRFbWl0dGluZy5hcHBseSh0aGlzLnNlbGVjdGlvbkhhbmRsZXIpO1xuICB0aGlzLnJlZHJhdygpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnJlZHJhdyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVuZGVyZXIucmVkcmF3LmFwcGx5KHRoaXMucmVuZGVyZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0U2NhbGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnZpZXcuZ2V0U2NhbGUuYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFZpZXdQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5nZXRWaWV3UG9zaXRpb24uYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmZpdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5maXQuYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5tb3ZlVG8uYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy52aWV3LmZvY3VzLmFwcGx5KHRoaXMudmlldywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5yZWxlYXNlTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5yZWxlYXNlTm9kZS5hcHBseSh0aGlzLnZpZXcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0T3B0aW9uc0Zyb21Db25maWd1cmF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIGxldCBvcHRpb25zID0ge307XG4gIGlmICh0aGlzLmNvbmZpZ3VyYXRvcikge1xuICAgIG9wdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRvci5nZXRPcHRpb25zLmFwcGx5KHRoaXMuY29uZmlndXJhdG9yKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE5ldHdvcms7XG4iLCAiLyoqXG4gKiBOb3JtYWxpemVzIGxhbmd1YWdlIGNvZGUgaW50byB0aGUgZm9ybWF0IHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAcGFyYW0gbG9jYWxlcyAtIEFsbCB0aGUgYXZhaWxhYmxlIGxvY2FsZXMuXG4gKiBAcGFyYW0gcmF3Q29kZSAtIFRoZSBvcmlnaW5hbCBjb2RlIGFzIHN1cHBsaWVkIGJ5IHRoZSB1c2VyLlxuICogQHJldHVybnMgTGFuZ3VhZ2UgY29kZSBpbiB0aGUgZm9ybWF0IGxhbmd1YWdlLUNPVU5UUlkgb3IgbGFuZ3VhZ2UsIGV2ZW50dWFsbHlcbiAqIGZhbGxiYWNrcyB0byBlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUxhbmd1YWdlQ29kZShcbiAgbG9jYWxlczogUmVjb3JkPHN0cmluZywgdW5kZWZpbmVkIHwgb2JqZWN0PixcbiAgcmF3Q29kZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IFtyYXdMYW5ndWFnZSwgcmF3Q291bnRyeV0gPSByYXdDb2RlLnNwbGl0KC9bLV8gL10vLCAyKTtcbiAgICBjb25zdCBsYW5ndWFnZSA9IHJhd0xhbmd1YWdlICE9IG51bGwgPyByYXdMYW5ndWFnZS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbiAgICBjb25zdCBjb3VudHJ5ID0gcmF3Q291bnRyeSAhPSBudWxsID8gcmF3Q291bnRyeS50b1VwcGVyQ2FzZSgpIDogbnVsbDtcblxuICAgIGlmIChsYW5ndWFnZSAmJiBjb3VudHJ5KSB7XG4gICAgICBjb25zdCBjb2RlID0gbGFuZ3VhZ2UgKyBcIi1cIiArIGNvdW50cnk7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxvY2FsZXMsIGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIHZhcmlhbnQgJHtjb3VudHJ5fSBvZiBsYW5ndWFnZSAke2xhbmd1YWdlfS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobGFuZ3VhZ2UpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBsYW5ndWFnZTtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobG9jYWxlcywgY29kZSkpIHtcbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gbGFuZ3VhZ2UgJHtsYW5ndWFnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oYFVua25vd24gbG9jYWxlICR7cmF3Q29kZX0sIGZhbGxpbmcgYmFjayB0byBFbmdsaXNoLmApO1xuXG4gICAgcmV0dXJuIFwiZW5cIjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgVW5leHBlY3RlZCBlcnJvciB3aGlsZSBub3JtYWxpemluZyBsb2NhbGUgJHtyYXdDb2RlfSwgZmFsbGluZyBiYWNrIHRvIEVuZ2xpc2guYFxuICAgICk7XG5cbiAgICByZXR1cm4gXCJlblwiO1xuICB9XG59XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vbmV0d29yay9OZXR3b3JrXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgTmV0d29ya0ltYWdlcyB9IGZyb20gXCIuL25ldHdvcmsvSW1hZ2VzXCI7XG5cbmltcG9ydCAqIGFzIGRvdHBhcnNlciBmcm9tIFwiLi9uZXR3b3JrL2RvdHBhcnNlclwiO1xuZXhwb3J0IHsgZG90cGFyc2VyIGFzIG5ldHdvcmtET1RQYXJzZXIgfTtcbmV4cG9ydCBjb25zdCBwYXJzZURPVE5ldHdvcmsgPSBkb3RwYXJzZXIuRE9UVG9HcmFwaDtcblxuaW1wb3J0ICogYXMgZ2VwaGlQYXJzZXIgZnJvbSBcIi4vbmV0d29yay9nZXBoaVBhcnNlclwiO1xuZXhwb3J0IHsgcGFyc2VHZXBoaSBhcyBwYXJzZUdlcGhpTmV0d29yayB9IGZyb20gXCIuL25ldHdvcmsvZ2VwaGlQYXJzZXJcIjtcbmV4cG9ydCB7IGdlcGhpUGFyc2VyIGFzIG5ldHdvcmtHZXBoaVBhcnNlciB9O1xuXG5pbXBvcnQgKiBhcyBhbGxPcHRpb25zIGZyb20gXCIuL25ldHdvcmsvb3B0aW9uc1wiO1xuZXhwb3J0IHsgYWxsT3B0aW9ucyBhcyBuZXR3b3JrT3B0aW9ucyB9O1xuXG4vLyBEYXRhU2V0LCB1dGlscyBldGMuIGNhbid0IGJlIHJlZXhwb3J0ZWQgaGVyZSBiZWNhdXNlIHRoYXQgd291bGQgY2F1c2Ugc3RhY2tcbi8vIG92ZXJmbG93IGluIFVNRCBidWlsZHMuIFRoZXkgYWxsIGV4cG9ydCB2aXMgbmFtZXNwYWNlIHRoZXJlZm9yZSByZWV4cG9ydGluZ1xuLy8gbGVhZHMgdG8gbG9hZGluZyB2aXMgdG8gbG9hZCB2aXMgdG8gbG9hZCB2aXPigKZcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufSIsICIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgdGhpcyB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYXBwbHkgPSBGdW5jdGlvblByb3RvdHlwZS5hcHBseTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXJlZmxlY3QgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgUmVmbGVjdCA9PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmFwcGx5IHx8IChOQVRJVkVfQklORCA/IGNhbGwuYmluZChhcHBseSkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbikge1xuICAvLyBOYXNob3JuIGJ1ZzpcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEyOFxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTMwXG4gIGlmIChjbGFzc29mUmF3KGZuKSA9PT0gJ0Z1bmN0aW9uJykgcmV0dXJuIHVuY3VycnlUaGlzKGZuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIElTX0hUTUxEREEgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZDtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFsbDogZG9jdW1lbnRBbGwsXG4gIElTX0hUTUxEREE6IElTX0hUTUxEREFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRkb2N1bWVudEFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1hbGwnKTtcblxudmFyIGRvY3VtZW50QWxsID0gJGRvY3VtZW50QWxsLmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG5tb2R1bGUuZXhwb3J0cyA9ICRkb2N1bWVudEFsbC5JU19IVE1MRERBID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWwuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyICRkb2N1bWVudEFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1hbGwnKTtcblxudmFyIGRvY3VtZW50QWxsID0gJGRvY3VtZW50QWxsLmFsbDtcblxubW9kdWxlLmV4cG9ydHMgPSAkZG9jdW1lbnRBbGwuSVNfSFRNTEREQSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KSB8fCBpdCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHZhcmlhYmxlKSA/IHZhcmlhYmxlIDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKHBhdGhbbmFtZXNwYWNlXSkgfHwgYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKVxuICAgIDogcGF0aFtuYW1lc3BhY2VdICYmIHBhdGhbbmFtZXNwYWNlXVttZXRob2RdIHx8IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBuYXZpZ2F0b3IgIT0gJ3VuZGVmaW5lZCcgJiYgU3RyaW5nKG5hdmlnYXRvci51c2VyQWdlbnQpIHx8ICcnO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjMzLjInLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyMyBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjMzLjIvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyYXBwZXIpIHtcbiAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYik7XG4gICAgICB9IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYiwgYyk7XG4gICAgfSByZXR1cm4gYXBwbHkoTmF0aXZlQ29uc3RydWN0b3IsIHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBQUk9UTyA9IG9wdGlvbnMucHJvdG87XG5cbiAgdmFyIG5hdGl2ZVNvdXJjZSA9IEdMT0JBTCA/IGdsb2JhbCA6IFNUQVRJQyA/IGdsb2JhbFtUQVJHRVRdIDogKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG5cbiAgdmFyIHRhcmdldCA9IEdMT0JBTCA/IHBhdGggOiBwYXRoW1RBUkdFVF0gfHwgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFRBUkdFVCwge30pW1RBUkdFVF07XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXNPd24obmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT0gdHlwZW9mIHNvdXJjZVByb3BlcnR5KSBjb250aW51ZTtcblxuICAgIC8vIGJpbmQgbWV0aG9kcyB0byBnbG9iYWwgZm9yIGNhbGxpbmcgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWwpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2VzIGluIHRoaXMgdmVyc2lvblxuICAgIGVsc2UgaWYgKG9wdGlvbnMud3JhcCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IHdyYXBDb25zdHJ1Y3Rvcihzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgZWxzZSBpZiAoUFJPVE8gJiYgaXNDYWxsYWJsZShzb3VyY2VQcm9wZXJ0eSkpIHJlc3VsdFByb3BlcnR5ID0gdW5jdXJyeVRoaXMoc291cmNlUHJvcGVydHkpO1xuICAgIC8vIGRlZmF1bHQgY2FzZVxuICAgIGVsc2UgcmVzdWx0UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eTtcblxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8IChzb3VyY2VQcm9wZXJ0eSAmJiBzb3VyY2VQcm9wZXJ0eS5zaGFtKSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShyZXN1bHRQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHJlc3VsdFByb3BlcnR5KTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzT3duKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aFtWSVJUVUFMX1BST1RPVFlQRV0sIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgLy8gZXhwb3J0IHJlYWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIGlmIChvcHRpb25zLnJlYWwgJiYgdGFyZ2V0UHJvdG90eXBlICYmIChGT1JDRUQgfHwgIXRhcmdldFByb3RvdHlwZVtrZXldKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0UHJvdG90eXBlLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eS5zaGFtKSBkZWZpbmVQcm9wZXJ0eS5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIHByb3BlcnR5S2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9ICRPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PT0gJ09iamVjdCcgJiYgaXNDYWxsYWJsZShPLmNhbGxlZSkgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBlbXB0eSA9IFtdO1xudmFyIGNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgY29uc3RydWN0b3JSZWdFeHAgPSAvXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKTtcbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gIWNvbnN0cnVjdG9yUmVnRXhwLnRlc3Qobm9vcCk7XG5cbnZhciBpc0NvbnN0cnVjdG9yTW9kZXJuID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3RydWN0KG5vb3AsIGVtcHR5LCBhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgaXNDb25zdHJ1Y3RvckxlZ2FjeSA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKGNsYXNzb2YoYXJndW1lbnQpKSB7XG4gICAgY2FzZSAnQXN5bmNGdW5jdGlvbic6XG4gICAgY2FzZSAnR2VuZXJhdG9yRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nOiByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyB3ZSBjYW4ndCBjaGVjayAucHJvdG90eXBlIHNpbmNlIGNvbnN0cnVjdG9ycyBwcm9kdWNlZCBieSAuYmluZCBoYXZlbid0IGl0XG4gICAgLy8gYEZ1bmN0aW9uI3RvU3RyaW5nYCB0aHJvd3Mgb24gc29tZSBidWlsdC1pdCBmdW5jdGlvbiBpbiBzb21lIGxlZ2FjeSBlbmdpbmVzXG4gICAgLy8gKGZvciBleGFtcGxlLCBgRE9NUXVhZGAgYW5kIHNpbWlsYXIgaW4gRkY0MS0pXG4gICAgcmV0dXJuIElOQ09SUkVDVF9UT19TVFJJTkcgfHwgISFleGVjKGNvbnN0cnVjdG9yUmVnRXhwLCBpbnNwZWN0U291cmNlKGFyZ3VtZW50KSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbmlzQ29uc3RydWN0b3JMZWdhY3kuc2hhbSA9IHRydWU7XG5cbi8vIGBJc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSAhY29uc3RydWN0IHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNhbGxlZDtcbiAgcmV0dXJuIGlzQ29uc3RydWN0b3JNb2Rlcm4oaXNDb25zdHJ1Y3Rvck1vZGVybi5jYWxsKVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKE9iamVjdClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihmdW5jdGlvbiAoKSB7IGNhbGxlZCA9IHRydWU7IH0pXG4gICAgfHwgY2FsbGVkO1xufSkgPyBpc0NvbnN0cnVjdG9yTGVnYWN5IDogaXNDb25zdHJ1Y3Rvck1vZGVybjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYSBwYXJ0IG9mIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXkpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAoaXNDb25zdHJ1Y3RvcihDKSAmJiAoQyA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IEM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuXG4vLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbi8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCA9IFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycmF5ID0gW107XG4gIGFycmF5W0lTX0NPTkNBVF9TUFJFQURBQkxFXSA9IGZhbHNlO1xuICByZXR1cm4gYXJyYXkuY29uY2F0KClbMF0gIT09IGFycmF5O1xufSk7XG5cbnZhciBpc0NvbmNhdFNwcmVhZGFibGUgPSBmdW5jdGlvbiAoTykge1xuICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzcHJlYWRhYmxlID0gT1tJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gIHJldHVybiBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KE8pO1xufTtcblxudmFyIEZPUkNFRCA9ICFJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUIHx8ICFhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdjb25jYXQnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb25jYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBjb25jYXQ6IGZ1bmN0aW9uIGNvbmNhdChhcmcpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgaSwgaywgbGVuZ3RoLCBsZW4sIEU7XG4gICAgZm9yIChpID0gLTEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgRSA9IGkgPT09IC0xID8gTyA6IGFyZ3VtZW50c1tpXTtcbiAgICAgIGlmIChpc0NvbmNhdFNwcmVhZGFibGUoRSkpIHtcbiAgICAgICAgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoRSk7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgbGVuKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKG4gKyAxKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgdmFyIHJlc3VsdCA9ICRBcnJheShtYXgoZmluIC0gaywgMCkpO1xuICB2YXIgbiA9IDA7XG4gIGZvciAoOyBrIDwgZmluOyBrKyssIG4rKykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmUgKi9cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlJyk7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBhcnJheVNsaWNlKHdpbmRvd05hbWVzKTtcbiAgfVxufTtcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIGNsYXNzb2YoaXQpID09PSAnV2luZG93J1xuICAgID8gZ2V0V2luZG93TmFtZXMoaXQpXG4gICAgOiAkZ2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnVtZXJhYmxlKSB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgdmFsdWUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG5leHBvcnRzLmYgPSB3ZWxsS25vd25TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgdmFyIFN5bWJvbCA9IHBhdGguU3ltYm9sIHx8IChwYXRoLlN5bWJvbCA9IHt9KTtcbiAgaWYgKCFoYXNPd24oU3ltYm9sLCBOQU1FKSkgZGVmaW5lUHJvcGVydHkoU3ltYm9sLCBOQU1FLCB7XG4gICAgdmFsdWU6IHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZihOQU1FKVxuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHZhciBTeW1ib2xQcm90b3R5cGUgPSBTeW1ib2wgJiYgU3ltYm9sLnByb3RvdHlwZTtcbiAgdmFyIHZhbHVlT2YgPSBTeW1ib2xQcm90b3R5cGUgJiYgU3ltYm9sUHJvdG90eXBlLnZhbHVlT2Y7XG4gIHZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbiAgaWYgKFN5bWJvbFByb3RvdHlwZSAmJiAhU3ltYm9sUHJvdG90eXBlW1RPX1BSSU1JVElWRV0pIHtcbiAgICAvLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIC5sZW5ndGhcbiAgICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBmdW5jdGlvbiAoaGludCkge1xuICAgICAgcmV0dXJuIGNhbGwodmFsdWVPZiwgdGhpcyk7XG4gICAgfSwgeyBhcml0eTogMSB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICBpZiAoaXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGU7XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlclJlamVjdCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PT0gNjtcbiAgdmFyIElTX0ZJTFRFUl9SRUpFQ1QgPSBUWVBFID09PSA3O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgfHwgSVNfRklMVEVSX1JFSkVDVCA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBmYWxzZTsgICAgICAgICAgICAgLy8gZXZlcnlcbiAgICAgICAgICBjYXNlIDc6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyUmVqZWN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJSZWplY3RgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maWx0ZXJpbmdcbiAgZmlsdGVyUmVqZWN0OiBjcmVhdGVNZXRob2QoNylcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIG5hdGl2ZU9iamVjdENyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG5cbnZhciBISURERU4gPSBzaGFyZWRLZXkoJ2hpZGRlbicpO1xudmFyIFNZTUJPTCA9ICdTeW1ib2wnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTWU1CT0wpO1xuXG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbCAmJiAkU3ltYm9sW1BST1RPVFlQRV07XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmY7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90b3R5cGVTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgVVNFX1NFVFRFUiA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoTywgUCwgQXR0cmlidXRlcykge1xuICB2YXIgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIFApO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcikgZGVsZXRlIE9iamVjdFByb3RvdHlwZVtQXTtcbiAgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yICYmIE8gIT09IE9iamVjdFByb3RvdHlwZSkge1xuICAgIG5hdGl2ZURlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZSwgUCwgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcik7XG4gIH1cbn07XG5cbnZhciBzZXRTeW1ib2xEZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0Q3JlYXRlKG5hdGl2ZURlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9PSA3O1xufSkgPyBmYWxsYmFja0RlZmluZVByb3BlcnR5IDogbmF0aXZlRGVmaW5lUHJvcGVydHk7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZywgZGVzY3JpcHRpb24pIHtcbiAgdmFyIHN5bWJvbCA9IEFsbFN5bWJvbHNbdGFnXSA9IG5hdGl2ZU9iamVjdENyZWF0ZShTeW1ib2xQcm90b3R5cGUpO1xuICBzZXRJbnRlcm5hbFN0YXRlKHN5bWJvbCwge1xuICAgIHR5cGU6IFNZTUJPTCxcbiAgICB0YWc6IHRhZyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHN5bWJvbC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICByZXR1cm4gc3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgaWYgKE8gPT09IE9iamVjdFByb3RvdHlwZSkgJGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFAsIEF0dHJpYnV0ZXMpO1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUF0dHJpYnV0ZXMuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXNPd24oTywgSElEREVOKSkgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgSElEREVOLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwge30pKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbCgkcHJvcGVydHlJc0VudW1lcmFibGUsIHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJvcGVydHlLZXkoVik7XG4gIHZhciBlbnVtZXJhYmxlID0gY2FsbChuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSwgdGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHB1c2gocmVzdWx0LCBrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcHVzaChyZXN1bHQsIEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgJHRoaXMgPSB0aGlzID09PSB1bmRlZmluZWQgPyBnbG9iYWwgOiB0aGlzO1xuICAgICAgaWYgKCR0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIGNhbGwoc2V0dGVyLCBPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKCR0aGlzLCBISURERU4pICYmIGhhc093bigkdGhpc1tISURERU5dLCB0YWcpKSAkdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSgkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBVU0VfU0VUVEVSKSBzZXRTeW1ib2xEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiBzZXR0ZXIgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnLCBkZXNjcmlwdGlvbik7XG4gIH07XG5cbiAgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbFtQUk9UT1RZUEVdO1xuXG4gIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS50YWc7XG4gIH0pO1xuXG4gIGRlZmluZUJ1aWx0SW4oJFN5bWJvbCwgJ3dpdGhvdXRTZXR0ZXInLCBmdW5jdGlvbiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gd3JhcCh1aWQoZGVzY3JpcHRpb24pLCBkZXNjcmlwdGlvbik7XG4gIH0pO1xuXG4gIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0aWVzO1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdlbGxLbm93blN5bWJvbChuYW1lKSwgbmFtZSk7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtU3ltYm9sLWRlc2NyaXB0aW9uXG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFN5bWJvbFByb3RvdHlwZSwgJ2Rlc2NyaXB0aW9uJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuZGVzY3JpcHRpb247XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFJU19QVVJFKSB7XG4gICAgICBkZWZpbmVCdWlsdEluKE9iamVjdFByb3RvdHlwZSwgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgU3ltYm9sOiAkU3ltYm9sXG59KTtcblxuJGZvckVhY2gob2JqZWN0S2V5cyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBmdW5jdGlvbiAobmFtZSkge1xuICBkZWZpbmVXZWxsS25vd25TeW1ib2wobmFtZSk7XG59KTtcblxuJCh7IHRhcmdldDogU1lNQk9MLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IGZhbHNlOyB9XG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIC8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Jcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXNcbn0pO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgU1lNQk9MKTtcblxuaGlkZGVuS2V5c1tISURERU5dID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSBzYWZlICovXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiYgISFTeW1ib2xbJ2ZvciddICYmICEhU3ltYm9sLmtleUZvcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeScpO1xudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5mb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuZm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKGtleSk7XG4gICAgaWYgKGhhc093bihTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5LCBzdHJpbmcpKSByZXR1cm4gU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddO1xuICAgIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKShzdHJpbmcpO1xuICAgIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXSA9IHN5bWJvbDtcbiAgICBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bWJvbF0gPSBzdHJpbmc7XG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmtleUZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5rZXlmb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBuZXcgVHlwZUVycm9yKHRyeVRvU3RyaW5nKHN5bSkgKyAnIGlzIG5vdCBhIHN5bWJvbCcpO1xuICAgIGlmIChoYXNPd24oU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSwgc3ltKSkgcmV0dXJuIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKFtdLnNsaWNlKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcGxhY2VyKSB7XG4gIGlmIChpc0NhbGxhYmxlKHJlcGxhY2VyKSkgcmV0dXJuIHJlcGxhY2VyO1xuICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXR1cm47XG4gIHZhciByYXdMZW5ndGggPSByZXBsYWNlci5sZW5ndGg7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlbWVudCA9IHJlcGxhY2VyW2ldO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykgcHVzaChrZXlzLCBlbGVtZW50KTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnbnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnTnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnU3RyaW5nJykgcHVzaChrZXlzLCB0b1N0cmluZyhlbGVtZW50KSk7XG4gIH1cbiAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIHJvb3QgPSB0cnVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAocm9vdCkge1xuICAgICAgcm9vdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgcmV0dXJuIHZhbHVlO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5c0xlbmd0aDsgaisrKSBpZiAoa2V5c1tqXSA9PT0ga2V5KSByZXR1cm4gdmFsdWU7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgZ2V0UmVwbGFjZXJGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbicpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbnZhciB0ZXN0ZXIgPSAvW1xcdUQ4MDAtXFx1REZGRl0vZztcbnZhciBsb3cgPSAvXltcXHVEODAwLVxcdURCRkZdJC87XG52YXIgaGkgPSAvXltcXHVEQzAwLVxcdURGRkZdJC87XG5cbnZhciBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKSgnc3RyaW5naWZ5IGRldGVjdGlvbicpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT09ICdbbnVsbF0nXG4gICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT09ICd7fSc7XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtd2VsbC1mb3JtZWQtc3RyaW5naWZ5XG52YXIgSUxMX0ZPUk1FRF9VTklDT0RFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHN0cmluZ2lmeSgnXFx1REYwNlxcdUQ4MzQnKSAhPT0gJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInXG4gICAgfHwgJHN0cmluZ2lmeSgnXFx1REVBRCcpICE9PSAnXCJcXFxcdWRlYWRcIic7XG59KTtcblxudmFyIHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4ID0gZnVuY3Rpb24gKGl0LCByZXBsYWNlcikge1xuICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgdmFyICRyZXBsYWNlciA9IGdldFJlcGxhY2VyRnVuY3Rpb24ocmVwbGFjZXIpO1xuICBpZiAoIWlzQ2FsbGFibGUoJHJlcGxhY2VyKSAmJiAoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgYXJnc1sxXSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgLy8gc29tZSBvbGQgaW1wbGVtZW50YXRpb25zIChsaWtlIFdlYktpdCkgY291bGQgcGFzcyBudW1iZXJzIGFzIGtleXNcbiAgICBpZiAoaXNDYWxsYWJsZSgkcmVwbGFjZXIpKSB2YWx1ZSA9IGNhbGwoJHJlcGxhY2VyLCB0aGlzLCAkU3RyaW5nKGtleSksIHZhbHVlKTtcbiAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9O1xuICByZXR1cm4gYXBwbHkoJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG59O1xuXG52YXIgZml4SWxsRm9ybWVkID0gZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cmluZykge1xuICB2YXIgcHJldiA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCAtIDEpO1xuICB2YXIgbmV4dCA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCArIDEpO1xuICBpZiAoKGV4ZWMobG93LCBtYXRjaCkgJiYgIWV4ZWMoaGksIG5leHQpKSB8fCAoZXhlYyhoaSwgbWF0Y2gpICYmICFleGVjKGxvdywgcHJldikpKSB7XG4gICAgcmV0dXJuICdcXFxcdScgKyBudW1iZXJUb1N0cmluZyhjaGFyQ29kZUF0KG1hdGNoLCAwKSwgMTYpO1xuICB9IHJldHVybiBtYXRjaDtcbn07XG5cbmlmICgkc3RyaW5naWZ5KSB7XG4gIC8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBhcml0eTogMywgZm9yY2VkOiBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gfHwgSUxMX0ZPUk1FRF9VTklDT0RFIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFwcGx5KFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA/IHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IDogJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG4gICAgICByZXR1cm4gSUxMX0ZPUk1FRF9VTklDT0RFICYmIHR5cGVvZiByZXN1bHQgPT0gJ3N0cmluZycgPyByZXBsYWNlKHJlc3VsdCwgdGVzdGVyLCBmaXhJbGxGb3JtZWQpIDogcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG4vLyBWOCB+IENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGT1JDRUQgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRvT2JqZWN0KGl0KSkgOiBbXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0l0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuYXN5bmNpdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5oYXNJbnN0YW5jZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmhhc2luc3RhbmNlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2hhc0luc3RhbmNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pc2NvbmNhdHNwcmVhZGFibGVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLml0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaEFsbGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoYWxsXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoQWxsJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5yZXBsYWNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucmVwbGFjZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zZWFyY2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zZWFyY2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc2VhcmNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zcGVjaWVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BlY2llc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zcGxpdGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwbGl0XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwbGl0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnRvUHJpbWl0aXZlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9wcmltaXRpdmVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIGBTeW1ib2wudG9TdHJpbmdUYWdgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3N0cmluZ3RhZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnZXRCdWlsdEluKCdTeW1ib2wnKSwgJ1N5bWJvbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wudW5zY29wYWJsZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC51bnNjb3BhYmxlc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gSlNPTltAQHRvU3RyaW5nVGFnXSBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXMtY29uY2F0LXNwcmVhZGFibGUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXRoLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC50by1zdHJpbmctdGFnJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWtleXMgLS0gc2FmZSAqL1xuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG52YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRSA9ICFpc09iamVjdChJdGVyYXRvclByb3RvdHlwZSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgdGVzdCA9IHt9O1xuICAvLyBGRjQ0LSBsZWdhY3kgaXRlcmF0b3JzIGNhc2VcbiAgcmV0dXJuIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXS5jYWxsKHRlc3QpICE9PSB0ZXN0O1xufSk7XG5cbmlmIChORVdfSVRFUkFUT1JfUFJPVE9UWVBFKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuZWxzZSBpZiAoSVNfUFVSRSkgSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1AQGl0ZXJhdG9yXG5pZiAoIWlzQ2FsbGFibGUoSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICBkZWZpbmVCdWlsdEluKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQsIEVOVU1FUkFCTEVfTkVYVCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCshRU5VTUVSQUJMRV9ORVhULCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKHR5cGVvZiBhcmd1bWVudCA9PSAnb2JqZWN0JyB8fCBpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LXNldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgc2V0dGVyID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJywgJ3NldCcpO1xuICAgIHNldHRlcih0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgYW5PYmplY3QoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlcihPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuXG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gY2FsbChuYXRpdmVJdGVyYXRvciwgdGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvciwgeyBuYW1lOiBERUZBVUxUIH0pO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYENyZWF0ZUl0ZXJSZXN1bHRPYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVpdGVycmVzdWx0b2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IGRvbmUgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICBzd2l0Y2ggKHN0YXRlLmtpbmQpIHtcbiAgICBjYXNlICdrZXlzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoaW5kZXgsIGZhbHNlKTtcbiAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh0YXJnZXRbaW5kZXhdLCBmYWxzZSk7XG4gIH0gcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZmFsc2UpO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG52YXIgdmFsdWVzID0gSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDQ1LSBidWdcbmlmICghSVNfUFVSRSAmJiBERVNDUklQVE9SUyAmJiB2YWx1ZXMubmFtZSAhPT0gJ3ZhbHVlcycpIHRyeSB7XG4gIGRlZmluZVByb3BlcnR5KHZhbHVlcywgJ25hbWUnLCB7IHZhbHVlOiAndmFsdWVzJyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiIsICIndXNlIHN0cmljdCc7XG4vLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgRE9NSXRlcmFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSAmJiBjbGFzc29mKENvbGxlY3Rpb25Qcm90b3R5cGUpICE9PSBUT19TVFJJTkdfVEFHKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIENPTExFQ1RJT05fTkFNRSk7XG4gIH1cbiAgSXRlcmF0b3JzW0NPTExFQ1RJT05fTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIE1FVEFEQVRBID0gd2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vLyBGdW5jdGlvbi5wcm90b3R5cGVbQEBtZXRhZGF0YV1cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuaWYgKEZ1bmN0aW9uUHJvdG90eXBlW01FVEFEQVRBXSA9PT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5KEZ1bmN0aW9uUHJvdG90eXBlLCBNRVRBREFUQSwge1xuICAgIHZhbHVlOiBudWxsXG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXN5bmMtZXhwbGljaXQtcmVzb3VyY2UtbWFuYWdlbWVudFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0Rpc3Bvc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmRpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2Rpc3Bvc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sJyk7XG5cbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuYXN5bmMtZGlzcG9zZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyIGtleUZvciA9IFN5bWJvbC5rZXlGb3I7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sIHx8IGZ1bmN0aW9uIGlzUmVnaXN0ZXJlZFN5bWJvbCh2YWx1ZSkge1xuICB0cnkge1xuICAgIHJldHVybiBrZXlGb3IodGhpc1N5bWJvbFZhbHVlKHZhbHVlKSkgIT09IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNSZWdpc3RlcmVkU3ltYm9sOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyICRpc1dlbGxLbm93blN5bWJvbCA9IFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbDtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0QnVpbHRJbignT2JqZWN0JywgJ2dldE93blByb3BlcnR5TmFtZXMnKTtcbnZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbmZvciAodmFyIGkgPSAwLCBzeW1ib2xLZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhTeW1ib2wpLCBzeW1ib2xLZXlzTGVuZ3RoID0gc3ltYm9sS2V5cy5sZW5ndGg7IGkgPCBzeW1ib2xLZXlzTGVuZ3RoOyBpKyspIHtcbiAgLy8gc29tZSBvbGQgZW5naW5lcyB0aHJvd3Mgb24gYWNjZXNzIHRvIHNvbWUga2V5cyBsaWtlIGBhcmd1bWVudHNgIG9yIGBjYWxsZXJgXG4gIHRyeSB7XG4gICAgdmFyIHN5bWJvbEtleSA9IHN5bWJvbEtleXNbaV07XG4gICAgaWYgKGlzU3ltYm9sKFN5bWJvbFtzeW1ib2xLZXldKSkgd2VsbEtub3duU3ltYm9sKHN5bWJvbEtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn1cblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkge1xuICBpZiAoJGlzV2VsbEtub3duU3ltYm9sICYmICRpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIHZhciBzeW1ib2wgPSB0aGlzU3ltYm9sVmFsdWUodmFsdWUpO1xuICAgIGZvciAodmFyIGogPSAwLCBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7IGogPCBrZXlzTGVuZ3RoOyBqKyspIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXEgLS0gcG9seWZpbGxlZCBzeW1ib2xzIGNhc2VcbiAgICAgIGlmIChXZWxsS25vd25TeW1ib2xzU3RvcmVba2V5c1tqXV0gPT0gc3ltYm9sKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1dlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtd2VsbC1rbm93bicpO1xuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd25TeW1ib2w6IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoZXJgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoZXInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm9ic2VydmFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ29ic2VydmFibGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1JlZ2lzdGVyZWRTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXJlZ2lzdGVyZWQnKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRgIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzUmVnaXN0ZXJlZFN5bWJvbCcgfSwge1xuICBpc1JlZ2lzdGVyZWQ6IGlzUmVnaXN0ZXJlZFN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93bmAgbWV0aG9kXG4vLyBvYnNvbGV0ZSB2ZXJzaW9uIG9mIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzV2VsbEtub3duU3ltYm9sJywgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd246IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YUtleWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YUtleScpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnBhdHRlcm5NYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncGF0dGVybk1hdGNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZUFsbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1hdGNoZXInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEta2V5Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucGF0dGVybi1tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9zeW1ib2wnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcblxudmFyIFNUUklOR19JVEVSQVRPUiA9ICdTdHJpbmcgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1RSSU5HX0lURVJBVE9SKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLUBAaXRlcmF0b3JcbmRlZmluZUl0ZXJhdG9yKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBTVFJJTkdfSVRFUkFUT1IsXG4gICAgc3RyaW5nOiB0b1N0cmluZyhpdGVyYXRlZCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG4vLyBgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXN0cmluZ2l0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc3RyaW5nID0gc3RhdGUuc3RyaW5nO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleDtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocG9pbnQsIGZhbHNlKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG52YXIgV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKCdpdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wvaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sL2l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfU3ltYm9sJGl0ZXJhdG9yIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IF9TeW1ib2wgJiYgbyAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuZGF0ZS50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZigndG9QcmltaXRpdmUnKTtcbiIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IF9TeW1ib2wkdG9QcmltaXRpdmUgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbX1N5bWJvbCR0b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIF9PYmplY3QkZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChDLCBhcmdzTGVuZ3RoLCBhcmdzKSB7XG4gIGlmICghaGFzT3duKGZhY3RvcmllcywgYXJnc0xlbmd0aCkpIHtcbiAgICB2YXIgbGlzdCA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IGFyZ3NMZW5ndGg7IGkrKykgbGlzdFtpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIGZhY3Rvcmllc1thcmdzTGVuZ3RoXSA9ICRGdW5jdGlvbignQyxhJywgJ3JldHVybiBuZXcgQygnICsgam9pbihsaXN0LCAnLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2FyZ3NMZW5ndGhdKEMsIGFyZ3MpO1xufTtcblxuLy8gYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBkZXRlY3Rpb25cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyAkRnVuY3Rpb24uYmluZCA6IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIEYgPSBhQ2FsbGFibGUodGhpcyk7XG4gIHZhciBQcm90b3R5cGUgPSBGLnByb3RvdHlwZTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJvdW5kKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IGNvbmNhdChwYXJ0QXJncywgYXJyYXlTbGljZShhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kRnVuY3Rpb24gPyBjb25zdHJ1Y3QoRiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogRi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KFByb3RvdHlwZSkpIGJvdW5kRnVuY3Rpb24ucHJvdG90eXBlID0gUHJvdG90eXBlO1xuICByZXR1cm4gYm91bmRGdW5jdGlvbjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxuJCh7IHRhcmdldDogJ0Z1bmN0aW9uJywgcHJvdG86IHRydWUsIGZvcmNlZDogRnVuY3Rpb24uYmluZCAhPT0gYmluZCB9LCB7XG4gIGJpbmQ6IGJpbmRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SLCBNRVRIT0QpIHtcbiAgdmFyIE5hbWVzcGFjZSA9IHBhdGhbQ09OU1RSVUNUT1IgKyAnUHJvdG90eXBlJ107XG4gIHZhciBwdXJlTWV0aG9kID0gTmFtZXNwYWNlICYmIE5hbWVzcGFjZVtNRVRIT0RdO1xuICBpZiAocHVyZU1ldGhvZCkgcmV0dXJuIHB1cmVNZXRob2Q7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBOYXRpdmVQcm90b3R5cGUgJiYgTmF0aXZlUHJvdG90eXBlW01FVEhPRF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdGdW5jdGlvbicsICdiaW5kJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9uL3ZpcnR1YWwvYmluZCcpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5iaW5kO1xuICByZXR1cm4gaXQgPT09IEZ1bmN0aW9uUHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEZ1bmN0aW9uUHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBGdW5jdGlvblByb3RvdHlwZS5iaW5kKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9iaW5kXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyByZWR1Y2UsIHJlZHVjZVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfUklHSFQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhcmd1bWVudHNMZW5ndGgsIG1lbW8pIHtcbiAgICBhQ2FsbGFibGUoY2FsbGJhY2tmbik7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IElTX1JJR0hUID8gbGVuZ3RoIC0gMSA6IDA7XG4gICAgdmFyIGkgPSBJU19SSUdIVCA/IC0xIDogMTtcbiAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDwgMikgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgICAgaW5kZXggKz0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgaWYgKElTX1JJR0hUID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoO0lTX1JJR0hUID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiAgbGVmdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZXJpZ2h0XG4gIHJpZ2h0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09PSAncHJvY2Vzcyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5sZWZ0O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIENIUk9NRV9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG4vLyBDaHJvbWUgODAtODIgaGFzIGEgY3JpdGljYWwgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDQ5OTgyXG52YXIgQ0hST01FX0JVRyA9ICFJU19OT0RFICYmIENIUk9NRV9WRVJTSU9OID4gNzkgJiYgQ0hST01FX1ZFUlNJT04gPCA4MztcbnZhciBGT1JDRUQgPSBDSFJPTUVfQlVHIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdyZWR1Y2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgbGVuZ3RoLCBsZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAncmVkdWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmVkdWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJlZHVjZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmVkdWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbHRlcicpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmaWx0ZXInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maWx0ZXInKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmlsdGVyO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLm1hcDtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnbWFwJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkubWFwJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ21hcCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL21hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5tYXA7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLm1hcCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG5cbi8vIGBGbGF0dGVuSW50b0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gZnVuY3Rpb24gKHRhcmdldCwgb3JpZ2luYWwsIHNvdXJjZSwgc291cmNlTGVuLCBzdGFydCwgZGVwdGgsIG1hcHBlciwgdGhpc0FyZykge1xuICB2YXIgdGFyZ2V0SW5kZXggPSBzdGFydDtcbiAgdmFyIHNvdXJjZUluZGV4ID0gMDtcbiAgdmFyIG1hcEZuID0gbWFwcGVyID8gYmluZChtYXBwZXIsIHRoaXNBcmcpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBlbGVtZW50TGVuO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBpZiAoZGVwdGggPiAwICYmIGlzQXJyYXkoZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudExlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKGVsZW1lbnQpO1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgZWxlbWVudExlbiwgdGFyZ2V0SW5kZXgsIGRlcHRoIC0gMSkgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKHRhcmdldEluZGV4ICsgMSk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbkludG9BcnJheTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mbGF0TWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZsYXRtYXBcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBBO1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIEEubGVuZ3RoID0gZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mbGF0LW1hcCcpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS51bnNjb3BhYmxlcy5mbGF0LW1hcCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmbGF0TWFwJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmxhdC1tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmxhdE1hcDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmxhdE1hcCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgImltcG9ydCB7IERhdGFJbnRlcmZhY2UsIEV2ZW50Q2FsbGJhY2tzLCBQYXJ0SXRlbSB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcblxuLyoqXG4gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVBpcGUge1xuICAvKipcbiAgICogVGFrZSBhbGwgaXRlbXMgZnJvbSB0aGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldywgdHJhbnNmb3JtIHRoZW0gYXNcbiAgICogY29uZmlndXJlZCBhbmQgdXBkYXRlIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBhbGwoKTogdGhpcztcblxuICAvKipcbiAgICogU3RhcnQgb2JzZXJ2aW5nIHRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LCB0cmFuc2Zvcm1pbmcgdGhlIGl0ZW1zXG4gICAqIGFuZCB1cGRhdGluZyB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgY3VycmVudCBjb250ZW50IG9mIHRoZSBzb3VyY2UgZGF0YSBzZXQgd2lsbCBiZSBpZ25vcmVkLiBJZiB5b3UgZm9yXG4gICAqIGV4YW1wbGUgd2FudCB0byBwcm9jZXNzIGFsbCB0aGUgaXRlbXMgdGhhdCBhcmUgYWxyZWFkeSB0aGVyZSB1c2U6XG4gICAqIGBwaXBlLmFsbCgpLnN0YXJ0KClgLlxuICAgKi9cbiAgc3RhcnQoKTogdGhpcztcblxuICAvKipcbiAgICogU3RvcCBvYnNlcnZpbmcgdGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcsIHRyYW5zZm9ybWluZyB0aGUgaXRlbXNcbiAgICogYW5kIHVwZGF0aW5nIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBzdG9wKCk6IHRoaXM7XG59XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFQaXBlRmFjdG9yeSA9IEluc3RhbmNlVHlwZTx0eXBlb2YgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbj47XG5cbi8qKlxuICogQ3JlYXRlIG5ldyBkYXRhIHBpcGUuXG4gKlxuICogQHBhcmFtIGZyb20gLSBUaGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldy5cbiAqIEByZW1hcmtzXG4gKiBFeGFtcGxlIHVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIEFwcEl0ZW0ge1xuICogICB3aG9hbWk6IHN0cmluZztcbiAqICAgYXBwRGF0YTogdW5rbm93bjtcbiAqICAgdmlzRGF0YTogVmlzSXRlbTtcbiAqIH1cbiAqIGludGVyZmFjZSBWaXNJdGVtIHtcbiAqICAgaWQ6IG51bWJlcjtcbiAqICAgbGFiZWw6IHN0cmluZztcbiAqICAgY29sb3I6IHN0cmluZztcbiAqICAgeDogbnVtYmVyO1xuICogICB5OiBudW1iZXI7XG4gKiB9XG4gKlxuICogY29uc3QgZHMxID0gbmV3IERhdGFTZXQ8QXBwSXRlbSwgXCJ3aG9hbWlcIj4oW10sIHsgZmllbGRJZDogXCJ3aG9hbWlcIiB9KTtcbiAqIGNvbnN0IGRzMiA9IG5ldyBEYXRhU2V0PFZpc0l0ZW0sIFwiaWRcIj4oKTtcbiAqXG4gKiBjb25zdCBwaXBlID0gY3JlYXRlTmV3RGF0YVBpcGVGcm9tKGRzMSlcbiAqICAgLmZpbHRlcigoaXRlbSk6IGJvb2xlYW4gPT4gaXRlbS5lbmFibGVkID09PSB0cnVlKVxuICogICAubWFwPFZpc0l0ZW0sIFwiaWRcIj4oKGl0ZW0pOiBWaXNJdGVtID0+IGl0ZW0udmlzRGF0YSlcbiAqICAgLnRvKGRzMik7XG4gKlxuICogcGlwZS5zdGFydCgpO1xuICogYGBgXG4gKiBAcmV0dXJucyBBIGZhY3Rvcnkgd2hvc2UgbWV0aG9kcyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdEYXRhUGlwZUZyb208XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPihmcm9tOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFNJLCBTUD4ge1xuICByZXR1cm4gbmV3IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb24oZnJvbSk7XG59XG5cbnR5cGUgVHJhbnNmb3JtZXI8VD4gPSAoaW5wdXQ6IFRbXSkgPT4gVFtdO1xuXG4vKipcbiAqIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwaXBlLiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlIG9ubHkgdGhyb3VnaFxuICogYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFNJIC0gU291cmNlIGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gU1AgLSBTb3VyY2UgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICogQHR5cGVQYXJhbSBUUCAtIFRhcmdldCBpdGVtIHR5cGUncyBpZCBwcm9wZXJ0eSBuYW1lLlxuICovXG5jbGFzcyBTaW1wbGVEYXRhUGlwZTxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nLFxuICBUSSBleHRlbmRzIFBhcnRJdGVtPFRQPixcbiAgVFAgZXh0ZW5kcyBzdHJpbmdcbj4gaW1wbGVtZW50cyBEYXRhUGlwZVxue1xuICAvKipcbiAgICogQm91bmQgbGlzdGVuZXJzIGZvciB1c2Ugd2l0aCBgRGF0YUludGVyZmFjZVsnb24nIHwgJ29mZiddYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogRXZlbnRDYWxsYmFja3M8U0ksIFNQPiA9IHtcbiAgICBhZGQ6IHRoaXMuX2FkZC5iaW5kKHRoaXMpLFxuICAgIHJlbW92ZTogdGhpcy5fcmVtb3ZlLmJpbmQodGhpcyksXG4gICAgdXBkYXRlOiB0aGlzLl91cGRhdGUuYmluZCh0aGlzKSxcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZS5cbiAgICpcbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IHRoYXQgd2lsbCBiZSBvYnNlcnZlZC5cbiAgICogQHBhcmFtIF90cmFuc2Zvcm1lcnMgLSBBbiBhcnJheSBvZiB0cmFuc2Zvcm1pbmcgZnVuY3Rpb25zIHRvIGJlIHVzZWQgdG9cbiAgICogZmlsdGVyIG9yIHRyYW5zZm9ybSB0aGUgaXRlbXMgaW4gdGhlIHBpcGUuXG4gICAqIEBwYXJhbSBfdGFyZ2V0IC0gVGhlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiByZWFkb25seSBUcmFuc2Zvcm1lcjx1bmtub3duPltdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhcmdldDogRGF0YVNldDxUSSwgVFA+XG4gICkge31cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGFsbCgpOiB0aGlzIHtcbiAgICB0aGlzLl90YXJnZXQudXBkYXRlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQoKSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdGFydCgpOiB0aGlzIHtcbiAgICB0aGlzLl9zb3VyY2Uub24oXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9uKFwicmVtb3ZlXCIsIHRoaXMuX2xpc3RlbmVycy5yZW1vdmUpO1xuICAgIHRoaXMuX3NvdXJjZS5vbihcInVwZGF0ZVwiLCB0aGlzLl9saXN0ZW5lcnMudXBkYXRlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdG9wKCk6IHRoaXMge1xuICAgIHRoaXMuX3NvdXJjZS5vZmYoXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9mZihcInJlbW92ZVwiLCB0aGlzLl9saXN0ZW5lcnMucmVtb3ZlKTtcbiAgICB0aGlzLl9zb3VyY2Uub2ZmKFwidXBkYXRlXCIsIHRoaXMuX2xpc3RlbmVycy51cGRhdGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdGhlIHRyYW5zZm9ybWVycyB0byB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIFRoZSBpdGVtcyB0byBiZSB0cmFuc2Zvcm1lZC5cbiAgICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdHJhbnNmb3JtSXRlbXMoaXRlbXM6IHVua25vd25bXSk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3JtZXJzLnJlZHVjZSgoaXRlbXMsIHRyYW5zZm9ybSk6IHVua25vd25bXSA9PiB7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtKGl0ZW1zKTtcbiAgICB9LCBpdGVtcyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFuIGFkZCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBpZHMgb2YgdGhlIGFkZGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJhZGRcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcImFkZFwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5hZGQodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhbiB1cGRhdGUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgaWRzIG9mIHRoZSB1cGRhdGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJ1cGRhdGVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInVwZGF0ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC51cGRhdGUodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHJlbW92ZSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBkYXRhIG9mIHRoZSByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVtb3ZlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJyZW1vdmVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInJlbW92ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5yZW1vdmUodGhpcy5fdHJhbnNmb3JtSXRlbXMocGF5bG9hZC5vbGREYXRhKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGlwZSBmYWN0b3J5LiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlXG4gKiBvbmx5IHRocm91Z2ggYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqL1xuY2xhc3MgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+IHtcbiAgLyoqXG4gICAqIEFycmF5IHRyYW5zZm9ybWVycyB1c2VkIHRvIHRyYW5zZm9ybSBpdGVtcyB3aXRoaW4gdGhlIHBpcGUuIFRoaXMgaXMgdHlwZWRcbiAgICogYXMgYW55IGZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiBUcmFuc2Zvcm1lcjxhbnk+W10gPSBbXTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZSBmYWN0b3J5LiBUaGlzIGlzIGFuIGludGVybmFsIGNvbnN0cnVjdG9yIHRoYXRcbiAgICogc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhpcyBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gX3NvdXJjZSAtIFRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IGZvciB0aGlzIHBpcGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pIHt9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgZmlsdGVyaW5nIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIGdpdmVuIGl0ZW1cbiAgICogc2hvdWxkIGJlIHBpcGVkIGFuZCBmYWxzZSBpZiBub3QuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZpbHRlcihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBib29sZWFuXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248U0ksIFNQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZpbHRlcihjYWxsYmFjaykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBlYWNoIHNvdXJjZSBpdGVtIHRvIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbS5cbiAgICogQHR5cGVQYXJhbSBUSSAtIFRhcmdldCBpdGVtIHR5cGUuXG4gICAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAgICogQHJldHVybnMgVGhpcyBmYWN0b3J5IGZvciBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgbWFwPFRJIGV4dGVuZHMgUGFydEl0ZW08VFA+LCBUUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIj4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gVElcbiAgKTogRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxUSSwgVFA+IHtcbiAgICB0aGlzLl90cmFuc2Zvcm1lcnMucHVzaCgoaW5wdXQpOiB1bmtub3duW10gPT4gaW5wdXQubWFwKGNhbGxiYWNrKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD47XG4gIH1cblxuICAvKipcbiAgICogTWFwIGVhY2ggc291cmNlIGl0ZW0gdG8gemVybyBvciBtb3JlIGl0ZW1zIG9mIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogYW4gYXJyYXkgb2YgY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbXMuXG4gICAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICAgKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZsYXRNYXA8VEkgZXh0ZW5kcyBQYXJ0SXRlbTxUUD4sIFRQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiPihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBUSVtdXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZsYXRNYXAoY2FsbGJhY2spKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IHRoaXMgcGlwZSB0byBnaXZlbiBkYXRhIHNldC5cbiAgICpcbiAgICogQHBhcmFtIHRhcmdldCAtIFRoZSBkYXRhIHNldCB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMgZnJvbSB0aGlzIHBpcGUuXG4gICAqIEByZXR1cm5zIFRoZSBwaXBlIGNvbm5lY3RlZCBiZXR3ZWVuIGdpdmVuIGRhdGEgc2V0cyBhbmQgcGVyZm9ybWluZ1xuICAgKiBjb25maWd1cmVkIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBwcm9jZXNzZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgdG8odGFyZ2V0OiBEYXRhU2V0PFNJLCBTUD4pOiBEYXRhUGlwZSB7XG4gICAgcmV0dXJuIG5ldyBTaW1wbGVEYXRhUGlwZSh0aGlzLl9zb3VyY2UsIHRoaXMuX3RyYW5zZm9ybWVycywgdGFyZ2V0KTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZyb20nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkFycmF5LmZyb207XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tXCIpOyIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Z1bGwvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yTWV0aG9kO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbi8vIGBBcnJheS5pc0FycmF5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuaXNhcnJheVxuJCh7IHRhcmdldDogJ0FycmF5Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzQXJyYXk6IGlzQXJyYXlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkFycmF5LmlzQXJyYXk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvYXJyYXkvaXMtYXJyYXknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBTYWZhcmkgPCAxMyBkb2VzIG5vdCB0aHJvdyBhbiBlcnJvciBpbiB0aGlzIGNhc2VcbnZhciBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPSBERVNDUklQVE9SUyAmJiAhZnVuY3Rpb24gKCkge1xuICAvLyBtYWtlcyBubyBzZW5zZSB3aXRob3V0IHByb3BlciBzdHJpY3QgbW9kZSBzdXBwb3J0XG4gIGlmICh0aGlzICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLmxlbmd0aCA9IDE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID8gZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICBpZiAoaXNBcnJheShPKSAmJiAhZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sICdsZW5ndGgnKS53cml0YWJsZSkge1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoJyk7XG4gIH0gcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufSA6IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBJTkNPUlJFQ1RfVE9fTEVOR1RIID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW10ucHVzaC5jYWxsKHsgbGVuZ3RoOiAweDEwMDAwMDAwMCB9LCAxKSAhPT0gNDI5NDk2NzI5Nztcbn0pO1xuXG4vLyBWOCBhbmQgU2FmYXJpIDw9IDE1LjQsIEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnB1c2gnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAncHVzaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3B1c2gnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucHVzaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucHVzaCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9wdXNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBuYXRpdmVTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKENvbnN0cnVjdG9yKSAmJiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc2xpY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc2xpY2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL3NsaWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59IiwgImltcG9ydCBfc2xpY2VJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanNcIjtcbmltcG9ydCBfQXJyYXkkZnJvbSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2Zyb20uanNcIjtcbmltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgdmFyIF9jb250ZXh0O1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IF9zbGljZUluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykpLmNhbGwoX2NvbnRleHQsIDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIF9BcnJheSRmcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCAiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwgImltcG9ydCBfQXJyYXkkaXNBcnJheSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2lzLWFycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChfQXJyYXkkaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsICJpbXBvcnQgX1N5bWJvbCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiO1xuaW1wb3J0IF9nZXRJdGVyYXRvck1ldGhvZCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanNcIjtcbmltcG9ydCBfcHVzaEluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9wdXNoLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkge1xuICB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBfU3ltYm9sICYmIF9nZXRJdGVyYXRvck1ldGhvZChyKSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKF9wdXNoSW5zdGFuY2VQcm9wZXJ0eShhKS5jYWxsKGEsIGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgbyA9ICEwLCBuID0gcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmICYmIG51bGwgIT0gdFtcInJldHVyblwiXSAmJiAodSA9IHRbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG8pIHRocm93IG47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgImltcG9ydCBhcnJheVdpdGhvdXRIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlU3ByZWFkIGZyb20gXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn0iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59IiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX2dldEl0ZXJhdG9yTWV0aG9kIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiO1xuaW1wb3J0IF9BcnJheSRmcm9tIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvZnJvbS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgX1N5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBfZ2V0SXRlcmF0b3JNZXRob2QoaXRlcikgIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gX0FycmF5JGZyb20oaXRlcik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdjb25jYXQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9jb25jYXQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuY29uY2F0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5jb25jYXQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NsaWNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG5cbi8vIGBSZWZsZWN0Lm93bktleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0Lm93bmtleXNcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIG93bktleXM6IG93bktleXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC5vd24ta2V5cycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUmVmbGVjdC5vd25LZXlzO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvaXMtYXJyYXlcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5rZXlzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2ZvckVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbm1vZHVsZS5leHBvcnRzID0gIVNUUklDVF9NRVRIT0QgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxufSA6IFtdLmZvckVhY2g7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mb3ItZWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFtdLmZvckVhY2ggIT09IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZvckVhY2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2gnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZm9yRWFjaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZm9yRWFjaClcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2hcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyIG5hdGl2ZVJldmVyc2UgPSB1bmN1cnJ5VGhpcyhbXS5yZXZlcnNlKTtcbnZhciB0ZXN0ID0gWzEsIDJdO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJldmVyc2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmV2ZXJzZVxuLy8gZml4IGZvciBTYWZhcmkgMTIuMCBidWdcbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg3OTRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFN0cmluZyh0ZXN0KSA9PT0gU3RyaW5nKHRlc3QucmV2ZXJzZSgpKSB9LCB7XG4gIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduIC0tIGRpcnR5IGhhY2tcbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gbmF0aXZlUmV2ZXJzZSh0aGlzKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3JldmVyc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9yZXZlcnNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJldmVyc2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJldmVyc2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmV2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JldmVyc2VcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIGlmICghZGVsZXRlIE9bUF0pIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICcgKyB0cnlUb1N0cmluZyhQKSArICcgb2YgJyArIHRyeVRvU3RyaW5nKE8pKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NwbGljZScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc3BsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNwbGljZVxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc3BsaWNlOiBmdW5jdGlvbiBzcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50IC8qICwgLi4uaXRlbXMgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYWN0dWFsU3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGluc2VydENvdW50LCBhY3R1YWxEZWxldGVDb3VudCwgQSwgaywgZnJvbSwgdG87XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMCkge1xuICAgICAgaW5zZXJ0Q291bnQgPSBhY3R1YWxEZWxldGVDb3VudCA9IDA7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDEpIHtcbiAgICAgIGluc2VydENvdW50ID0gMDtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbGVuIC0gYWN0dWFsU3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc2VydENvdW50ID0gYXJndW1lbnRzTGVuZ3RoIC0gMjtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbWluKG1heCh0b0ludGVnZXJPckluZmluaXR5KGRlbGV0ZUNvdW50KSwgMCksIGxlbiAtIGFjdHVhbFN0YXJ0KTtcbiAgICB9XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGluc2VydENvdW50IC0gYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIGZvciAoayA9IDA7IGsgPCBhY3R1YWxEZWxldGVDb3VudDsgaysrKSB7XG4gICAgICBmcm9tID0gYWN0dWFsU3RhcnQgKyBrO1xuICAgICAgaWYgKGZyb20gaW4gTykgY3JlYXRlUHJvcGVydHkoQSwgaywgT1tmcm9tXSk7XG4gICAgfVxuICAgIEEubGVuZ3RoID0gYWN0dWFsRGVsZXRlQ291bnQ7XG4gICAgaWYgKGluc2VydENvdW50IDwgYWN0dWFsRGVsZXRlQ291bnQpIHtcbiAgICAgIGZvciAoayA9IGFjdHVhbFN0YXJ0OyBrIDwgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgICBmcm9tID0gayArIGFjdHVhbERlbGV0ZUNvdW50O1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudDtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgICBmb3IgKGsgPSBsZW47IGsgPiBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50OyBrLS0pIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCBrIC0gMSk7XG4gICAgfSBlbHNlIGlmIChpbnNlcnRDb3VudCA+IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBsZW4gLSBhY3R1YWxEZWxldGVDb3VudDsgayA+IGFjdHVhbFN0YXJ0OyBrLS0pIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudCAtIDE7XG4gICAgICAgIHRvID0gayArIGluc2VydENvdW50IC0gMTtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoayA9IDA7IGsgPCBpbnNlcnRDb3VudDsgaysrKSB7XG4gICAgICBPW2sgKyBhY3R1YWxTdGFydF0gPSBhcmd1bWVudHNbayArIDJdO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50KTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc3BsaWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc3BsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNwbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc3BsaWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gc2FmZVxudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHNob3VsZCBoYXZlIGNvcnJlY3Qgb3JkZXIgb2Ygb3BlcmF0aW9ucyAoRWRnZSBidWcpXG4gIGlmIChERVNDUklQVE9SUyAmJiAkYXNzaWduKHsgYjogMSB9LCAkYXNzaWduKGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgJ2InLCB7XG4gICAgICAgIHZhbHVlOiAzLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9KSwgeyBiOiAyIH0pKS5iICE9PSAxKSByZXR1cm4gdHJ1ZTtcbiAgLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zeW1ib2wgLS0gc2FmZVxuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdhc3NpZ24gZGV0ZWN0aW9uJyk7XG4gIHZhciBhbHBoYWJldCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbc3ltYm9sXSA9IDc7XG4gIGFscGhhYmV0LnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChjaHIpIHsgQltjaHJdID0gY2hyOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW3N5bWJvbF0gIT09IDcgfHwgb2JqZWN0S2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT09IGFscGhhYmV0O1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQob2JqZWN0S2V5cyhTKSwgZ2V0T3duUHJvcGVydHlTeW1ib2xzKFMpKSA6IG9iamVjdEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwocHJvcGVydHlJc0VudW1lcmFibGUsIFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgYXJpdHk6IDIsIGZvcmNlZDogT2JqZWN0LmFzc2lnbiAhPT0gYXNzaWduIH0sIHtcbiAgYXNzaWduOiBhc3NpZ25cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmFzc2lnbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0UHJvdG90eXBlT2YoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIH0sIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBjcmVhdGU6IGNyZWF0ZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuY3JlYXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShQLCBEKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWpzb24gLS0gc2FmZVxuaWYgKCFwYXRoLkpTT04pIHBhdGguSlNPTiA9IHsgc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeSB9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICByZXR1cm4gYXBwbHkocGF0aC5KU09OLnN0cmluZ2lmeSwgbnVsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2pzb24vc3RyaW5naWZ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBCdW4gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBCdW4gPT0gJ2Z1bmN0aW9uJyAmJiBCdW4gJiYgdHlwZW9mIEJ1bi52ZXJzaW9uID09ICdzdHJpbmcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG4gIHJldHVybiBwYXNzZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgRU5HSU5FX0lTX0JVTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnVuJyk7XG52YXIgVVNFUl9BR0VOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG5cbnZhciBGdW5jdGlvbiA9IGdsb2JhbC5GdW5jdGlvbjtcbi8vIGRpcnR5IElFOS0gYW5kIEJ1biAwLjMuMC0gY2hlY2tzXG52YXIgV1JBUCA9IC9NU0lFIC5cXC4vLnRlc3QoVVNFUl9BR0VOVCkgfHwgRU5HSU5FX0lTX0JVTiAmJiAoZnVuY3Rpb24gKCkge1xuICB2YXIgdmVyc2lvbiA9IGdsb2JhbC5CdW4udmVyc2lvbi5zcGxpdCgnLicpO1xuICByZXR1cm4gdmVyc2lvbi5sZW5ndGggPCAzIHx8IHZlcnNpb25bMF0gPT09ICcwJyAmJiAodmVyc2lvblsxXSA8IDMgfHwgdmVyc2lvblsxXSA9PT0gJzMnICYmIHZlcnNpb25bMl0gPT09ICcwJyk7XG59KSgpO1xuXG4vLyBJRTktIC8gQnVuIDAuMy4wLSBzZXRUaW1lb3V0IC8gc2V0SW50ZXJ2YWwgLyBzZXRJbW1lZGlhdGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCN0aW1lcnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9pc3N1ZXMvMTYzM1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBoYXNUaW1lQXJnKSB7XG4gIHZhciBmaXJzdFBhcmFtSW5kZXggPSBoYXNUaW1lQXJnID8gMiA6IDE7XG4gIHJldHVybiBXUkFQID8gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSkgPiBmaXJzdFBhcmFtSW5kZXg7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgcGFyYW1zID0gYm91bmRBcmdzID8gYXJyYXlTbGljZShhcmd1bWVudHMsIGZpcnN0UGFyYW1JbmRleCkgOiBbXTtcbiAgICB2YXIgY2FsbGJhY2sgPSBib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdGhpcywgcGFyYW1zKTtcbiAgICB9IDogZm47XG4gICAgcmV0dXJuIGhhc1RpbWVBcmcgPyBzY2hlZHVsZXIoY2FsbGJhY2ssIHRpbWVvdXQpIDogc2NoZWR1bGVyKGNhbGxiYWNrKTtcbiAgfSA6IHNjaGVkdWxlcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNjaGVkdWxlcnNGaXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXgnKTtcblxudmFyIHNldEludGVydmFsID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0SW50ZXJ2YWwsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldGludGVydmFsXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRJbnRlcnZhbCAhPT0gc2V0SW50ZXJ2YWwgfSwge1xuICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWxcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRUaW1lb3V0ID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0VGltZW91dCwgdHJ1ZSk7XG5cbi8vIEJ1biAvIElFOS0gc2V0VGltZW91dCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRUaW1lb3V0ICE9PSBzZXRUaW1lb3V0IH0sIHtcbiAgc2V0VGltZW91dDogc2V0VGltZW91dFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRUaW1lb3V0O1xuIiwgImZ1bmN0aW9uIEVtaXR0ZXIob2JqZWN0KSB7XG5cdGlmIChvYmplY3QpIHtcblx0XHRyZXR1cm4gbWl4aW4ob2JqZWN0KTtcblx0fVxuXG5cdHRoaXMuX2NhbGxiYWNrcyA9IG5ldyBNYXAoKTtcbn1cblxuZnVuY3Rpb24gbWl4aW4ob2JqZWN0KSB7XG5cdE9iamVjdC5hc3NpZ24ob2JqZWN0LCBFbWl0dGVyLnByb3RvdHlwZSk7XG5cdG9iamVjdC5fY2FsbGJhY2tzID0gbmV3IE1hcCgpO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5FbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCkgPz8gW107XG5cdGNhbGxiYWNrcy5wdXNoKGxpc3RlbmVyKTtcblx0dGhpcy5fY2FsbGJhY2tzLnNldChldmVudCwgY2FsbGJhY2tzKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRjb25zdCBvbiA9ICguLi5hcmd1bWVudHNfKSA9PiB7XG5cdFx0dGhpcy5vZmYoZXZlbnQsIG9uKTtcblx0XHRsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHNfKTtcblx0fTtcblxuXHRvbi5mbiA9IGxpc3RlbmVyO1xuXHR0aGlzLm9uKGV2ZW50LCBvbik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRpZiAoZXZlbnQgPT09IHVuZGVmaW5lZCAmJiBsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5fY2FsbGJhY2tzLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpZiAobGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX2NhbGxiYWNrcy5kZWxldGUoZXZlbnQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCk7XG5cdGlmIChjYWxsYmFja3MpIHtcblx0XHRmb3IgKGNvbnN0IFtpbmRleCwgY2FsbGJhY2tdIG9mIGNhbGxiYWNrcy5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChjYWxsYmFjayA9PT0gbGlzdGVuZXIgfHwgY2FsbGJhY2suZm4gPT09IGxpc3RlbmVyKSB7XG5cdFx0XHRcdGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoY2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5fY2FsbGJhY2tzLmRlbGV0ZShldmVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2NhbGxiYWNrcy5zZXQoZXZlbnQsIGNhbGxiYWNrcyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50LCAuLi5hcmd1bWVudHNfKSB7XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpO1xuXHRpZiAoY2FsbGJhY2tzKSB7XG5cdFx0Ly8gQ3JlYXRlIGEgY29weSBvZiB0aGUgY2FsbGJhY2tzIGFycmF5IHRvIGF2b2lkIGlzc3VlcyBpZiBpdCdzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb25cblx0XHRjb25zdCBjYWxsYmFja3NDb3B5ID0gWy4uLmNhbGxiYWNrc107XG5cblx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrc0NvcHkpIHtcblx0XHRcdGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50c18pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLl9jYWxsYmFja3MuZ2V0KGV2ZW50KSA/PyBbXTtcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0aWYgKGV2ZW50KSB7XG5cdFx0cmV0dXJuIHRoaXMubGlzdGVuZXJzKGV2ZW50KS5sZW5ndGg7XG5cdH1cblxuXHRsZXQgdG90YWxDb3VudCA9IDA7XG5cdGZvciAoY29uc3QgY2FsbGJhY2tzIG9mIHRoaXMuX2NhbGxiYWNrcy52YWx1ZXMoKSkge1xuXHRcdHRvdGFsQ291bnQgKz0gY2FsbGJhY2tzLmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiB0b3RhbENvdW50O1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUuaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLmxpc3RlbmVyQ291bnQoZXZlbnQpID4gMDtcbn07XG5cbi8vIEFsaWFzZXNcbkVtaXR0ZXIucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5vbjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub2ZmO1xuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gRW1pdHRlcjtcbn1cbiIsICIvKiEgSGFtbWVyLkpTIC0gdjIuMC4xNy1yYyAtIDIwMTktMTItMTZcbiAqIGh0dHA6Ly9uYXZlci5naXRodWIuaW8vZWdqc1xuICpcbiAqIEZvcmtlZCBCeSBOYXZlciBlZ2pzXG4gKiBDb3B5cmlnaHQgKGMpIGhhbW1lcmpzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKi9cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHsuLi5PYmplY3R9IG9iamVjdHNfdG9fYXNzaWduXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB0YXJnZXRcbiAqL1xudmFyIGFzc2lnbjtcblxuaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQpIHtcbiAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gT2JqZWN0KHRhcmdldCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF07XG5cbiAgICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgbmV4dEtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSB7XG4gICAgICAgICAgICBvdXRwdXRbbmV4dEtleV0gPSBzb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcbn0gZWxzZSB7XG4gIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG59XG5cbnZhciBhc3NpZ24kMSA9IGFzc2lnbjtcblxudmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xudmFyIFRFU1RfRUxFTUVOVCA9IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IHtcbiAgc3R5bGU6IHt9XG59IDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgVFlQRV9GVU5DVElPTiA9ICdmdW5jdGlvbic7XG52YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgIGFicyA9IE1hdGguYWJzO1xudmFyIG5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIHByZWZpeGVkIHByb3BlcnR5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAqIEByZXR1cm5zIHtTdHJpbmd8VW5kZWZpbmVkfSBwcmVmaXhlZFxuICovXG5cbmZ1bmN0aW9uIHByZWZpeGVkKG9iaiwgcHJvcGVydHkpIHtcbiAgdmFyIHByZWZpeDtcbiAgdmFyIHByb3A7XG4gIHZhciBjYW1lbFByb3AgPSBwcm9wZXJ0eVswXS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICBwcmVmaXggPSBWRU5ET1JfUFJFRklYRVNbaV07XG4gICAgcHJvcCA9IHByZWZpeCA/IHByZWZpeCArIGNhbWVsUHJvcCA6IHByb3BlcnR5O1xuXG4gICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICByZXR1cm4gcHJvcDtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXctZnVuYywgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbnZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gIC8vIHdpbmRvdyBpcyB1bmRlZmluZWQgaW4gbm9kZS5qc1xuICB3aW4gPSB7fTtcbn0gZWxzZSB7XG4gIHdpbiA9IHdpbmRvdztcbn1cblxudmFyIFBSRUZJWEVEX1RPVUNIX0FDVElPTiA9IHByZWZpeGVkKFRFU1RfRUxFTUVOVC5zdHlsZSwgJ3RvdWNoQWN0aW9uJyk7XG52YXIgTkFUSVZFX1RPVUNIX0FDVElPTiA9IFBSRUZJWEVEX1RPVUNIX0FDVElPTiAhPT0gdW5kZWZpbmVkO1xuZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb25Qcm9wcygpIHtcbiAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRvdWNoTWFwID0ge307XG4gIHZhciBjc3NTdXBwb3J0cyA9IHdpbi5DU1MgJiYgd2luLkNTUy5zdXBwb3J0cztcbiAgWydhdXRvJywgJ21hbmlwdWxhdGlvbicsICdwYW4teScsICdwYW4teCcsICdwYW4teCBwYW4teScsICdub25lJ10uZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7XG4gICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgLy8gYWxsIHZhbHVlcy4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgSUUgMTAgYW5kIDExLlxuICAgIHJldHVybiB0b3VjaE1hcFt2YWxdID0gY3NzU3VwcG9ydHMgPyB3aW4uQ1NTLnN1cHBvcnRzKCd0b3VjaC1hY3Rpb24nLCB2YWwpIDogdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiB0b3VjaE1hcDtcbn1cblxudmFyIFRPVUNIX0FDVElPTl9DT01QVVRFID0gJ2NvbXB1dGUnO1xudmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xudmFyIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04gPSAnbWFuaXB1bGF0aW9uJzsgLy8gbm90IGltcGxlbWVudGVkXG5cbnZhciBUT1VDSF9BQ1RJT05fTk9ORSA9ICdub25lJztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1ggPSAncGFuLXgnO1xudmFyIFRPVUNIX0FDVElPTl9QQU5fWSA9ICdwYW4teSc7XG52YXIgVE9VQ0hfQUNUSU9OX01BUCA9IGdldFRvdWNoQWN0aW9uUHJvcHMoKTtcblxudmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcbnZhciBTVVBQT1JUX1RPVUNIID0gJ29udG91Y2hzdGFydCcgaW4gd2luO1xudmFyIFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMgPSBwcmVmaXhlZCh3aW4sICdQb2ludGVyRXZlbnQnKSAhPT0gdW5kZWZpbmVkO1xudmFyIFNVUFBPUlRfT05MWV9UT1VDSCA9IFNVUFBPUlRfVE9VQ0ggJiYgTU9CSUxFX1JFR0VYLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSU5QVVRfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG52YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbnZhciBJTlBVVF9UWVBFX01PVVNFID0gJ21vdXNlJztcbnZhciBJTlBVVF9UWVBFX0tJTkVDVCA9ICdraW5lY3QnO1xudmFyIENPTVBVVEVfSU5URVJWQUwgPSAyNTtcbnZhciBJTlBVVF9TVEFSVCA9IDE7XG52YXIgSU5QVVRfTU9WRSA9IDI7XG52YXIgSU5QVVRfRU5EID0gNDtcbnZhciBJTlBVVF9DQU5DRUwgPSA4O1xudmFyIERJUkVDVElPTl9OT05FID0gMTtcbnZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG52YXIgRElSRUNUSU9OX1JJR0hUID0gNDtcbnZhciBESVJFQ1RJT05fVVAgPSA4O1xudmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG52YXIgRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fTEVGVCB8IERJUkVDVElPTl9SSUdIVDtcbnZhciBESVJFQ1RJT05fVkVSVElDQUwgPSBESVJFQ1RJT05fVVAgfCBESVJFQ1RJT05fRE9XTjtcbnZhciBESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUw7XG52YXIgUFJPUFNfWFkgPSBbJ3gnLCAneSddO1xudmFyIFBST1BTX0NMSUVOVF9YWSA9IFsnY2xpZW50WCcsICdjbGllbnRZJ107XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdhbGsgb2JqZWN0cyBhbmQgYXJyYXlzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvclxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gIHZhciBpO1xuXG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9iai5mb3JFYWNoKSB7XG4gICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICB9IGVsc2UgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBvYmoubGVuZ3RoKSB7XG4gICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpIGluIG9iaikge1xuICAgICAgb2JqLmhhc093blByb3BlcnR5KGkpICYmIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBsZXQgYSBib29sZWFuIHZhbHVlIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IG11c3QgcmV0dXJuIGEgYm9vbGVhblxuICogdGhpcyBmaXJzdCBpdGVtIGluIGFyZ3Mgd2lsbCBiZSB1c2VkIGFzIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IHZhbFxuICogQHBhcmFtIHtBcnJheX0gW2FyZ3NdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBib29sT3JGbih2YWwsIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFRZUEVfRlVOQ1RJT04pIHtcbiAgICByZXR1cm4gdmFsLmFwcGx5KGFyZ3MgPyBhcmdzWzBdIHx8IHVuZGVmaW5lZCA6IHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzbWFsbCBpbmRleE9mIHdyYXBwZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gZm91bmRcbiAqL1xuZnVuY3Rpb24gaW5TdHIoc3RyLCBmaW5kKSB7XG4gIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3aGVuIHRoZSB0b3VjaEFjdGlvbnMgYXJlIGNvbGxlY3RlZCB0aGV5IGFyZSBub3QgYSB2YWxpZCB2YWx1ZSwgc28gd2UgbmVlZCB0byBjbGVhbiB0aGluZ3MgdXAuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuXG5mdW5jdGlvbiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zKSB7XG4gIC8vIG5vbmVcbiAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTk9ORTtcbiAgfVxuXG4gIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpOyAvLyBpZiBib3RoIHBhbi14IGFuZCBwYW4teSBhcmUgc2V0IChkaWZmZXJlbnQgcmVjb2duaXplcnNcbiAgLy8gZm9yIGRpZmZlcmVudCBkaXJlY3Rpb25zLCBlLmcuIGhvcml6b250YWwgcGFuIGJ1dCB2ZXJ0aWNhbCBzd2lwZT8pXG4gIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAvLyByZWNvZ25pemVycyB3aWxsIHdvcmssIHNpbmNlIHRoZSBicm93c2VyIHdvdWxkIGhhbmRsZSBhbGwgcGFubmluZ1xuXG4gIGlmIChoYXNQYW5YICYmIGhhc1BhblkpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gIH0gLy8gcGFuLXggT1IgcGFuLXlcblxuXG4gIGlmIChoYXNQYW5YIHx8IGhhc1BhblkpIHtcbiAgICByZXR1cm4gaGFzUGFuWCA/IFRPVUNIX0FDVElPTl9QQU5fWCA6IFRPVUNIX0FDVElPTl9QQU5fWTtcbiAgfSAvLyBtYW5pcHVsYXRpb25cblxuXG4gIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OO1xuICB9XG5cbiAgcmV0dXJuIFRPVUNIX0FDVElPTl9BVVRPO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUb3VjaCBBY3Rpb25cbiAqIHNldHMgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IG9yIHVzZXMgdGhlIGpzIGFsdGVybmF0aXZlXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIFRvdWNoQWN0aW9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG91Y2hBY3Rpb24obWFuYWdlciwgdmFsdWUpIHtcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuc2V0KHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZSBvbiB0aGUgZWxlbWVudCBvciBlbmFibGUgdGhlIHBvbHlmaWxsXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBUb3VjaEFjdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIGZpbmQgb3V0IHRoZSB0b3VjaC1hY3Rpb24gYnkgdGhlIGV2ZW50IGhhbmRsZXJzXG4gICAgaWYgKHZhbHVlID09PSBUT1VDSF9BQ1RJT05fQ09NUFVURSkge1xuICAgICAgdmFsdWUgPSB0aGlzLmNvbXB1dGUoKTtcbiAgICB9XG5cbiAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGVbUFJFRklYRURfVE9VQ0hfQUNUSU9OXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICoganVzdCByZS1zZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlXG4gICAqL1xuXG5cbiAgX3Byb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB0aGlzLnNldCh0aGlzLm1hbmFnZXIub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjb21wdXRlIHRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IGJhc2VkIG9uIHRoZSByZWNvZ25pemVyJ3Mgc2V0dGluZ3NcbiAgICogQHJldHVybnMge1N0cmluZ30gdmFsdWVcbiAgICovXG5cblxuICBfcHJvdG8uY29tcHV0ZSA9IGZ1bmN0aW9uIGNvbXB1dGUoKSB7XG4gICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICBlYWNoKHRoaXMubWFuYWdlci5yZWNvZ25pemVycywgZnVuY3Rpb24gKHJlY29nbml6ZXIpIHtcbiAgICAgIGlmIChib29sT3JGbihyZWNvZ25pemVyLm9wdGlvbnMuZW5hYmxlLCBbcmVjb2duaXplcl0pKSB7XG4gICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zLmpvaW4oJyAnKSk7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gZWFjaCBpbnB1dCBjeWNsZSBhbmQgcHJvdmlkZXMgdGhlIHByZXZlbnRpbmcgb2YgdGhlIGJyb3dzZXIgYmVoYXZpb3JcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLnByZXZlbnREZWZhdWx0cyA9IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0cyhpbnB1dCkge1xuICAgIHZhciBzcmNFdmVudCA9IGlucHV0LnNyY0V2ZW50O1xuICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5vZmZzZXREaXJlY3Rpb247IC8vIGlmIHRoZSB0b3VjaCBhY3Rpb24gZGlkIHByZXZlbnRlZCBvbmNlIHRoaXMgc2Vzc2lvblxuXG4gICAgaWYgKHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCkge1xuICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWV07XG4gICAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWF07XG5cbiAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgLy8gZG8gbm90IHByZXZlbnQgZGVmYXVsdHMgaWYgdGhpcyBpcyBhIHRhcCBnZXN0dXJlXG4gICAgICB2YXIgaXNUYXBQb2ludGVyID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSAxO1xuICAgICAgdmFyIGlzVGFwTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IDI7XG4gICAgICB2YXIgaXNUYXBUb3VjaFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPCAyNTA7XG5cbiAgICAgIGlmIChpc1RhcFBvaW50ZXIgJiYgaXNUYXBNb3ZlbWVudCAmJiBpc1RhcFRvdWNoVGltZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgICAgLy8gYHBhbi14IHBhbi15YCBtZWFucyBicm93c2VyIGhhbmRsZXMgYWxsIHNjcm9sbGluZy9wYW5uaW5nLCBkbyBub3QgcHJldmVudFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChoYXNOb25lIHx8IGhhc1BhblkgJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwgfHwgaGFzUGFuWCAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZlbnRTcmMoc3JjRXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbGwgcHJldmVudERlZmF1bHQgdG8gcHJldmVudCB0aGUgYnJvd3NlcidzIGRlZmF1bHQgYmVoYXZpb3IgKHNjcm9sbGluZyBpbiBtb3N0IGNhc2VzKVxuICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICovXG5cblxuICBfcHJvdG8ucHJldmVudFNyYyA9IGZ1bmN0aW9uIHByZXZlbnRTcmMoc3JjRXZlbnQpIHtcbiAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoQWN0aW9uO1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBmaW5kIGlmIGEgbm9kZSBpcyBpbiB0aGUgZ2l2ZW4gcGFyZW50XG4gKiBAbWV0aG9kIGhhc1BhcmVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBjZW50ZXIgb2YgYWxsIHRoZSBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gcG9pbnRlcnNcbiAqIEByZXR1cm4ge09iamVjdH0gY2VudGVyIGNvbnRhaW5zIGB4YCBhbmQgYHlgIHByb3BlcnRpZXNcbiAqL1xuXG5mdW5jdGlvbiBnZXRDZW50ZXIocG9pbnRlcnMpIHtcbiAgdmFyIHBvaW50ZXJzTGVuZ3RoID0gcG9pbnRlcnMubGVuZ3RoOyAvLyBubyBuZWVkIHRvIGxvb3Agd2hlbiBvbmx5IG9uZSB0b3VjaFxuXG4gIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRYKSxcbiAgICAgIHk6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFkpXG4gICAgfTtcbiAgfVxuXG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBwb2ludGVyc0xlbmd0aCkge1xuICAgIHggKz0gcG9pbnRlcnNbaV0uY2xpZW50WDtcbiAgICB5ICs9IHBvaW50ZXJzW2ldLmNsaWVudFk7XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4IC8gcG9pbnRlcnNMZW5ndGgpLFxuICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIGEgc2ltcGxlIGNsb25lIGZyb20gdGhlIGlucHV0IHVzZWQgZm9yIHN0b3JhZ2Ugb2YgZmlyc3RJbnB1dCBhbmQgZmlyc3RNdWx0aXBsZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBjbG9uZWRJbnB1dERhdGFcbiAqL1xuXG5mdW5jdGlvbiBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCkge1xuICAvLyBtYWtlIGEgc2ltcGxlIGNvcHkgb2YgdGhlIHBvaW50ZXJzIGJlY2F1c2Ugd2Ugd2lsbCBnZXQgYSByZWZlcmVuY2UgaWYgd2UgZG9uJ3RcbiAgLy8gd2Ugb25seSBuZWVkIGNsaWVudFhZIGZvciB0aGUgY2FsY3VsYXRpb25zXG4gIHZhciBwb2ludGVycyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBpbnB1dC5wb2ludGVycy5sZW5ndGgpIHtcbiAgICBwb2ludGVyc1tpXSA9IHtcbiAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgY2xpZW50WTogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WSlcbiAgICB9O1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGltZVN0YW1wOiBub3coKSxcbiAgICBwb2ludGVyczogcG9pbnRlcnMsXG4gICAgY2VudGVyOiBnZXRDZW50ZXIocG9pbnRlcnMpLFxuICAgIGRlbHRhWDogaW5wdXQuZGVsdGFYLFxuICAgIGRlbHRhWTogaW5wdXQuZGVsdGFZXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gcDEge3gsIHl9XG4gKiBAcGFyYW0ge09iamVjdH0gcDIge3gsIHl9XG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gKi9cblxuZnVuY3Rpb24gZ2V0RGlzdGFuY2UocDEsIHAyLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcHJvcHMgPSBQUk9QU19YWTtcbiAgfVxuXG4gIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dO1xuICB2YXIgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBhbmdsZSBiZXR3ZWVuIHR3byBjb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IHAxXG4gKiBAcGFyYW0ge09iamVjdH0gcDJcbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAqIEByZXR1cm4ge051bWJlcn0gYW5nbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRBbmdsZShwMSwgcDIsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICBwcm9wcyA9IFBST1BTX1hZO1xuICB9XG5cbiAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV07XG4gIHZhciB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KSAqIDE4MCAvIE1hdGguUEk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgZGlyZWN0aW9uIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpcmVjdGlvblxuICovXG5cbmZ1bmN0aW9uIGdldERpcmVjdGlvbih4LCB5KSB7XG4gIGlmICh4ID09PSB5KSB7XG4gICAgcmV0dXJuIERJUkVDVElPTl9OT05FO1xuICB9XG5cbiAgaWYgKGFicyh4KSA+PSBhYnMoeSkpIHtcbiAgICByZXR1cm4geCA8IDAgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgfVxuXG4gIHJldHVybiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyOyAvLyBsZXQgeyBvZmZzZXREZWx0YTpvZmZzZXQgPSB7fSwgcHJldkRlbHRhID0ge30sIHByZXZJbnB1dCA9IHt9IH0gPSBzZXNzaW9uO1xuICAvLyBqc2NzIHRocm93aW5nIGVycm9yIG9uIGRlZmFsdXQgZGVzdHJ1Y3R1cmVkIHZhbHVlcyBhbmQgd2l0aG91dCBkZWZhdWx0cyB0ZXN0cyBmYWlsXG5cbiAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gIHZhciBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSB8fCB7fTtcbiAgdmFyIHByZXZJbnB1dCA9IHNlc3Npb24ucHJldklucHV0IHx8IHt9O1xuXG4gIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhID0ge1xuICAgICAgeDogcHJldklucHV0LmRlbHRhWCB8fCAwLFxuICAgICAgeTogcHJldklucHV0LmRlbHRhWSB8fCAwXG4gICAgfTtcbiAgICBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhID0ge1xuICAgICAgeDogY2VudGVyLngsXG4gICAgICB5OiBjZW50ZXIueVxuICAgIH07XG4gIH1cblxuICBpbnB1dC5kZWx0YVggPSBwcmV2RGVsdGEueCArIChjZW50ZXIueCAtIG9mZnNldC54KTtcbiAgaW5wdXQuZGVsdGFZID0gcHJldkRlbHRhLnkgKyAoY2VudGVyLnkgLSBvZmZzZXQueSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgdmVsb2NpdHkgYmV0d2VlbiB0d28gcG9pbnRzLiB1bml0IGlzIGluIHB4IHBlciBtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIHgsIHkpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgeTogeSAvIGRlbHRhVGltZSB8fCAwXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgc2NhbGUgZmFjdG9yIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBubyBzY2FsZSBpcyAxLCBhbmQgZ29lcyBkb3duIHRvIDAgd2hlbiBwaW5jaGVkIHRvZ2V0aGVyLCBhbmQgYmlnZ2VyIHdoZW4gcGluY2hlZCBvdXRcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gc2NhbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRTY2FsZShzdGFydCwgZW5kKSB7XG4gIHJldHVybiBnZXREaXN0YW5jZShlbmRbMF0sIGVuZFsxXSwgUFJPUFNfQ0xJRU5UX1hZKSAvIGdldERpc3RhbmNlKHN0YXJ0WzBdLCBzdGFydFsxXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSByb3RhdGlvbiBkZWdyZWVzIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHJvdGF0aW9uXG4gKi9cblxuZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZ2V0QW5nbGUoZW5kWzFdLCBlbmRbMF0sIFBST1BTX0NMSUVOVF9YWSkgKyBnZXRBbmdsZShzdGFydFsxXSwgc3RhcnRbMF0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHZlbG9jaXR5IGlzIGNhbGN1bGF0ZWQgZXZlcnkgeCBtc1xuICogQHBhcmFtIHtPYmplY3R9IHNlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgbGFzdCA9IHNlc3Npb24ubGFzdEludGVydmFsIHx8IGlucHV0O1xuICB2YXIgZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gbGFzdC50aW1lU3RhbXA7XG4gIHZhciB2ZWxvY2l0eTtcbiAgdmFyIHZlbG9jaXR5WDtcbiAgdmFyIHZlbG9jaXR5WTtcbiAgdmFyIGRpcmVjdGlvbjtcblxuICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9PSBJTlBVVF9DQU5DRUwgJiYgKGRlbHRhVGltZSA+IENPTVBVVEVfSU5URVJWQUwgfHwgbGFzdC52ZWxvY2l0eSA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHZhciBkZWx0YVggPSBpbnB1dC5kZWx0YVggLSBsYXN0LmRlbHRhWDtcbiAgICB2YXIgZGVsdGFZID0gaW5wdXQuZGVsdGFZIC0gbGFzdC5kZWx0YVk7XG4gICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICB2ZWxvY2l0eVggPSB2Lng7XG4gICAgdmVsb2NpdHlZID0gdi55O1xuICAgIHZlbG9jaXR5ID0gYWJzKHYueCkgPiBhYnModi55KSA/IHYueCA6IHYueTtcbiAgICBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oZGVsdGFYLCBkZWx0YVkpO1xuICAgIHNlc3Npb24ubGFzdEludGVydmFsID0gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIGxhdGVzdCB2ZWxvY2l0eSBpbmZvIGlmIGl0IGRvZXNuJ3Qgb3ZlcnRha2UgYSBtaW5pbXVtIHBlcmlvZFxuICAgIHZlbG9jaXR5ID0gbGFzdC52ZWxvY2l0eTtcbiAgICB2ZWxvY2l0eVggPSBsYXN0LnZlbG9jaXR5WDtcbiAgICB2ZWxvY2l0eVkgPSBsYXN0LnZlbG9jaXR5WTtcbiAgICBkaXJlY3Rpb24gPSBsYXN0LmRpcmVjdGlvbjtcbiAgfVxuXG4gIGlucHV0LnZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gIGlucHV0LnZlbG9jaXR5WCA9IHZlbG9jaXR5WDtcbiAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG59XG5cbi8qKlxuKiBAcHJpdmF0ZVxuICogZXh0ZW5kIHRoZSBkYXRhIHdpdGggc29tZSB1c2FibGUgcHJvcGVydGllcyBsaWtlIHNjYWxlLCByb3RhdGUsIHZlbG9jaXR5IGV0Y1xuICogQHBhcmFtIHtPYmplY3R9IG1hbmFnZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnB1dERhdGEobWFuYWdlciwgaW5wdXQpIHtcbiAgdmFyIHNlc3Npb24gPSBtYW5hZ2VyLnNlc3Npb247XG4gIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIHN0b3JlIHRoZSBmaXJzdCBpbnB1dCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGFuZCBkaXJlY3Rpb25cblxuICBpZiAoIXNlc3Npb24uZmlyc3RJbnB1dCkge1xuICAgIHNlc3Npb24uZmlyc3RJbnB1dCA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgfSAvLyB0byBjb21wdXRlIHNjYWxlIGFuZCByb3RhdGlvbiB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBtdWx0aXBsZSB0b3VjaGVzXG5cblxuICBpZiAocG9pbnRlcnNMZW5ndGggPiAxICYmICFzZXNzaW9uLmZpcnN0TXVsdGlwbGUpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gIH0gZWxzZSBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBmaXJzdElucHV0ID0gc2Vzc2lvbi5maXJzdElucHV0LFxuICAgICAgZmlyc3RNdWx0aXBsZSA9IHNlc3Npb24uZmlyc3RNdWx0aXBsZTtcbiAgdmFyIG9mZnNldENlbnRlciA9IGZpcnN0TXVsdGlwbGUgPyBmaXJzdE11bHRpcGxlLmNlbnRlciA6IGZpcnN0SW5wdXQuY2VudGVyO1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyID0gZ2V0Q2VudGVyKHBvaW50ZXJzKTtcbiAgaW5wdXQudGltZVN0YW1wID0gbm93KCk7XG4gIGlucHV0LmRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGZpcnN0SW5wdXQudGltZVN0YW1wO1xuICBpbnB1dC5hbmdsZSA9IGdldEFuZ2xlKG9mZnNldENlbnRlciwgY2VudGVyKTtcbiAgaW5wdXQuZGlzdGFuY2UgPSBnZXREaXN0YW5jZShvZmZzZXRDZW50ZXIsIGNlbnRlcik7XG4gIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KTtcbiAgaW5wdXQub2Zmc2V0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgdmFyIG92ZXJhbGxWZWxvY2l0eSA9IGdldFZlbG9jaXR5KGlucHV0LmRlbHRhVGltZSwgaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYID0gb3ZlcmFsbFZlbG9jaXR5Lng7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVkgPSBvdmVyYWxsVmVsb2NpdHkueTtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5ID0gYWJzKG92ZXJhbGxWZWxvY2l0eS54KSA+IGFicyhvdmVyYWxsVmVsb2NpdHkueSkgPyBvdmVyYWxsVmVsb2NpdHkueCA6IG92ZXJhbGxWZWxvY2l0eS55O1xuICBpbnB1dC5zY2FsZSA9IGZpcnN0TXVsdGlwbGUgPyBnZXRTY2FsZShmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAxO1xuICBpbnB1dC5yb3RhdGlvbiA9IGZpcnN0TXVsdGlwbGUgPyBnZXRSb3RhdGlvbihmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAwO1xuICBpbnB1dC5tYXhQb2ludGVycyA9ICFzZXNzaW9uLnByZXZJbnB1dCA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA+IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnM7XG4gIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCk7IC8vIGZpbmQgdGhlIGNvcnJlY3QgdGFyZ2V0XG5cbiAgdmFyIHRhcmdldCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgdmFyIHNyY0V2ZW50ID0gaW5wdXQuc3JjRXZlbnQ7XG4gIHZhciBzcmNFdmVudFRhcmdldDtcblxuICBpZiAoc3JjRXZlbnQuY29tcG9zZWRQYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5jb21wb3NlZFBhdGgoKVswXTtcbiAgfSBlbHNlIGlmIChzcmNFdmVudC5wYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5wYXRoWzBdO1xuICB9IGVsc2Uge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQudGFyZ2V0O1xuICB9XG5cbiAgaWYgKGhhc1BhcmVudChzcmNFdmVudFRhcmdldCwgdGFyZ2V0KSkge1xuICAgIHRhcmdldCA9IHNyY0V2ZW50VGFyZ2V0O1xuICB9XG5cbiAgaW5wdXQudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBoYW5kbGUgaW5wdXQgZXZlbnRzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGlucHV0SGFuZGxlcihtYW5hZ2VyLCBldmVudFR5cGUsIGlucHV0KSB7XG4gIHZhciBwb2ludGVyc0xlbiA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aDtcbiAgdmFyIGNoYW5nZWRQb2ludGVyc0xlbiA9IGlucHV0LmNoYW5nZWRQb2ludGVycy5sZW5ndGg7XG4gIHZhciBpc0ZpcnN0ID0gZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIHZhciBpc0ZpbmFsID0gZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIGlucHV0LmlzRmlyc3QgPSAhIWlzRmlyc3Q7XG4gIGlucHV0LmlzRmluYWwgPSAhIWlzRmluYWw7XG5cbiAgaWYgKGlzRmlyc3QpIHtcbiAgICBtYW5hZ2VyLnNlc3Npb24gPSB7fTtcbiAgfSAvLyBzb3VyY2UgZXZlbnQgaXMgdGhlIG5vcm1hbGl6ZWQgdmFsdWUgb2YgdGhlIGRvbUV2ZW50c1xuICAvLyBsaWtlICd0b3VjaHN0YXJ0LCBtb3VzZXVwLCBwb2ludGVyZG93bidcblxuXG4gIGlucHV0LmV2ZW50VHlwZSA9IGV2ZW50VHlwZTsgLy8gY29tcHV0ZSBzY2FsZSwgcm90YXRpb24gZXRjXG5cbiAgY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCk7IC8vIGVtaXQgc2VjcmV0IGV2ZW50XG5cbiAgbWFuYWdlci5lbWl0KCdoYW1tZXIuaW5wdXQnLCBpbnB1dCk7XG4gIG1hbmFnZXIucmVjb2duaXplKGlucHV0KTtcbiAgbWFuYWdlci5zZXNzaW9uLnByZXZJbnB1dCA9IGlucHV0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzcGxpdCBzdHJpbmcgb24gd2hpdGVzcGFjZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge0FycmF5fSB3b3Jkc1xuICovXG5mdW5jdGlvbiBzcGxpdFN0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltKCkuc3BsaXQoL1xccysvZyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZEV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgd2luZG93IG9iamVjdCBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RG9jdW1lbnRWaWV3fFdpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93Rm9yRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZWxlbWVudDtcbiAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93IHx8IHdpbmRvdztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIElucHV0KG1hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgICB0aGlzLnRhcmdldCA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dFRhcmdldDsgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuXG4gICAgdGhpcy5kb21IYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICBpZiAoYm9vbE9yRm4obWFuYWdlci5vcHRpb25zLmVuYWJsZSwgW21hbmFnZXJdKSkge1xuICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2hvdWxkIGhhbmRsZSB0aGUgaW5wdXRFdmVudCBkYXRhIGFuZCB0cmlnZ2VyIHRoZSBjYWxsYmFja1xuICAgKiBAdmlydHVhbFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBiaW5kIHRoZSBldmVudHNcbiAgICovXG5cblxuICBfcHJvdG8uaW5pdCA9IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdGhpcy5ldkVsICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZUYXJnZXQgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldldpbiAmJiBhZGRFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgKi9cblxuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldlRhcmdldCAmJiByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2V2luICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4gSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGZpbmQgaWYgYSBhcnJheSBjb250YWlucyB0aGUgb2JqZWN0IHVzaW5nIGluZGV4T2Ygb3IgYSBzaW1wbGUgcG9seUZpbGxcbiAqIEBwYXJhbSB7QXJyYXl9IHNyY1xuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmluZEJ5S2V5XVxuICogQHJldHVybiB7Qm9vbGVhbnxOdW1iZXJ9IGZhbHNlIHdoZW4gbm90IGZvdW5kLCBvciB0aGUgaW5kZXhcbiAqL1xuZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICBpZiAoc3JjLmluZGV4T2YgJiYgIWZpbmRCeUtleSkge1xuICAgIHJldHVybiBzcmMuaW5kZXhPZihmaW5kKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICAgIGlmIChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCB8fCAhZmluZEJ5S2V5ICYmIHNyY1tpXSA9PT0gZmluZCkge1xuICAgICAgICAvLyBkbyBub3QgdXNlID09PSBoZXJlLCB0ZXN0IGZhaWxzXG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG5cbnZhciBQT0lOVEVSX0lOUFVUX01BUCA9IHtcbiAgcG9pbnRlcmRvd246IElOUFVUX1NUQVJULFxuICBwb2ludGVybW92ZTogSU5QVVRfTU9WRSxcbiAgcG9pbnRlcnVwOiBJTlBVVF9FTkQsXG4gIHBvaW50ZXJjYW5jZWw6IElOUFVUX0NBTkNFTCxcbiAgcG9pbnRlcm91dDogSU5QVVRfQ0FOQ0VMXG59OyAvLyBpbiBJRTEwIHRoZSBwb2ludGVyIHR5cGVzIGlzIGRlZmluZWQgYXMgYW4gZW51bVxuXG52YXIgSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSA9IHtcbiAgMjogSU5QVVRfVFlQRV9UT1VDSCxcbiAgMzogSU5QVVRfVFlQRV9QRU4sXG4gIDQ6IElOUFVUX1RZUEVfTU9VU0UsXG4gIDU6IElOUFVUX1RZUEVfS0lORUNUIC8vIHNlZSBodHRwczovL3R3aXR0ZXIuY29tL2phY29icm9zc2kvc3RhdHVzLzQ4MDU5NjQzODQ4OTg5MDgxNlxuXG59O1xudmFyIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAncG9pbnRlcmRvd24nO1xudmFyIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdwb2ludGVybW92ZSBwb2ludGVydXAgcG9pbnRlcmNhbmNlbCc7IC8vIElFMTAgaGFzIHByZWZpeGVkIHN1cHBvcnQsIGFuZCBjYXNlLXNlbnNpdGl2ZVxuXG5pZiAod2luLk1TUG9pbnRlckV2ZW50ICYmICF3aW4uUG9pbnRlckV2ZW50KSB7XG4gIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAnTVNQb2ludGVyRG93bic7XG4gIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCc7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBQb2ludGVyIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cblxudmFyIFBvaW50ZXJFdmVudElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUG9pbnRlckV2ZW50SW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2RWwgPSBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5zdG9yZSA9IF90aGlzLm1hbmFnZXIuc2Vzc2lvbi5wb2ludGVyRXZlbnRzID0gW107XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBQb2ludGVyRXZlbnRJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICB2YXIgcmVtb3ZlUG9pbnRlciA9IGZhbHNlO1xuICAgIHZhciBldmVudFR5cGVOb3JtYWxpemVkID0gZXYudHlwZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ21zJywgJycpO1xuICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICB2YXIgcG9pbnRlclR5cGUgPSBJRTEwX1BPSU5URVJfVFlQRV9FTlVNW2V2LnBvaW50ZXJUeXBlXSB8fCBldi5wb2ludGVyVHlwZTtcbiAgICB2YXIgaXNUb3VjaCA9IHBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIOyAvLyBnZXQgaW5kZXggb2YgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG4gICAgdmFyIHN0b3JlSW5kZXggPSBpbkFycmF5KHN0b3JlLCBldi5wb2ludGVySWQsICdwb2ludGVySWQnKTsgLy8gc3RhcnQgYW5kIG1vdXNlIG11c3QgYmUgZG93blxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIChldi5idXR0b24gPT09IDAgfHwgaXNUb3VjaCkpIHtcbiAgICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgICBzdG9yZS5wdXNoKGV2KTtcbiAgICAgICAgc3RvcmVJbmRleCA9IHN0b3JlLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgcmVtb3ZlUG9pbnRlciA9IHRydWU7XG4gICAgfSAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcblxuXG4gICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG5cbiAgICBzdG9yZVtzdG9yZUluZGV4XSA9IGV2O1xuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiBwb2ludGVyVHlwZSxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuXG4gICAgaWYgKHJlbW92ZVBvaW50ZXIpIHtcbiAgICAgIC8vIHJlbW92ZSBmcm9tIHRoZSBzdG9yZVxuICAgICAgc3RvcmUuc3BsaWNlKHN0b3JlSW5kZXgsIDEpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUG9pbnRlckV2ZW50SW5wdXQ7XG59KElucHV0KTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY29udmVydCBhcnJheS1saWtlIG9iamVjdHMgdG8gcmVhbCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaiwgMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHVuaXF1ZSBhcnJheSB3aXRoIG9iamVjdHMgYmFzZWQgb24gYSBrZXkgKGxpa2UgJ2lkJykgb3IganVzdCBieSB0aGUgYXJyYXkncyB2YWx1ZVxuICogQHBhcmFtIHtBcnJheX0gc3JjIFt7aWQ6MX0se2lkOjJ9LHtpZDoxfV1cbiAqIEBwYXJhbSB7U3RyaW5nfSBba2V5XVxuICogQHBhcmFtIHtCb29sZWFufSBbc29ydD1GYWxzZV1cbiAqIEByZXR1cm5zIHtBcnJheX0gW3tpZDoxfSx7aWQ6Mn1dXG4gKi9cblxuZnVuY3Rpb24gdW5pcXVlQXJyYXkoc3JjLCBrZXksIHNvcnQpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgdmFyIHZhbCA9IGtleSA/IHNyY1tpXVtrZXldIDogc3JjW2ldO1xuXG4gICAgaWYgKGluQXJyYXkodmFsdWVzLCB2YWwpIDwgMCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHNyY1tpXSk7XG4gICAgfVxuXG4gICAgdmFsdWVzW2ldID0gdmFsO1xuICAgIGkrKztcbiAgfVxuXG4gIGlmIChzb3J0KSB7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYVtrZXldID4gYltrZXldO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbnZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICB0b3VjaG1vdmU6IElOUFVUX01PVkUsXG4gIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG52YXIgVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNdWx0aS11c2VyIHRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIFRvdWNoSW5wdXQucHJvdG90eXBlLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMudGFyZ2V0SWRzID0ge307IC8vIHRoaXMuZXZUYXJnZXQgPSBUT1VDSF9UQVJHRVRfRVZFTlRTO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRvdWNoSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciB0eXBlID0gVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdO1xuICAgIHZhciB0b3VjaGVzID0gZ2V0VG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTtcblxuICAgIGlmICghdG91Y2hlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoSW5wdXQ7XG59KElucHV0KTtcblxuZnVuY3Rpb24gZ2V0VG91Y2hlcyhldiwgdHlwZSkge1xuICB2YXIgYWxsVG91Y2hlcyA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciB0YXJnZXRJZHMgPSB0aGlzLnRhcmdldElkczsgLy8gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSB0b3VjaCwgdGhlIHByb2Nlc3MgY2FuIGJlIHNpbXBsaWZpZWRcblxuICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgdGFyZ2V0SWRzW2FsbFRvdWNoZXNbMF0uaWRlbnRpZmllcl0gPSB0cnVlO1xuICAgIHJldHVybiBbYWxsVG91Y2hlcywgYWxsVG91Y2hlc107XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIHRhcmdldFRvdWNoZXM7XG4gIHZhciBjaGFuZ2VkVG91Y2hlcyA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpO1xuICB2YXIgY2hhbmdlZFRhcmdldFRvdWNoZXMgPSBbXTtcbiAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0OyAvLyBnZXQgdGFyZ2V0IHRvdWNoZXMgZnJvbSB0b3VjaGVzXG5cbiAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uICh0b3VjaCkge1xuICAgIHJldHVybiBoYXNQYXJlbnQodG91Y2gudGFyZ2V0LCB0YXJnZXQpO1xuICB9KTsgLy8gY29sbGVjdCB0b3VjaGVzXG5cbiAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICBpKys7XG4gICAgfVxuICB9IC8vIGZpbHRlciBjaGFuZ2VkIHRvdWNoZXMgdG8gb25seSBjb250YWluIHRvdWNoZXMgdGhhdCBleGlzdCBpbiB0aGUgY29sbGVjdGVkIHRhcmdldCBpZHNcblxuXG4gIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgY2hhbmdlZFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMucHVzaChjaGFuZ2VkVG91Y2hlc1tpXSk7XG4gICAgfSAvLyBjbGVhbnVwIHJlbW92ZWQgdG91Y2hlc1xuXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIGlmICghY2hhbmdlZFRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIFsvLyBtZXJnZSB0YXJnZXRUb3VjaGVzIHdpdGggY2hhbmdlZFRhcmdldFRvdWNoZXMgc28gaXQgY29udGFpbnMgQUxMIHRvdWNoZXMsIGluY2x1ZGluZyAnZW5kJyBhbmQgJ2NhbmNlbCdcbiAgdW5pcXVlQXJyYXkodGFyZ2V0VG91Y2hlcy5jb25jYXQoY2hhbmdlZFRhcmdldFRvdWNoZXMpLCAnaWRlbnRpZmllcicsIHRydWUpLCBjaGFuZ2VkVGFyZ2V0VG91Y2hlc107XG59XG5cbnZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gIG1vdXNlZG93bjogSU5QVVRfU1RBUlQsXG4gIG1vdXNlbW92ZTogSU5QVVRfTU9WRSxcbiAgbW91c2V1cDogSU5QVVRfRU5EXG59O1xudmFyIE1PVVNFX0VMRU1FTlRfRVZFTlRTID0gJ21vdXNlZG93bic7XG52YXIgTU9VU0VfV0lORE9XX0VWRU5UUyA9ICdtb3VzZW1vdmUgbW91c2V1cCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNb3VzZSBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgTW91c2VJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKE1vdXNlSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gTW91c2VJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldkVsID0gTU9VU0VfRUxFTUVOVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBNT1VTRV9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5wcmVzc2VkID0gZmFsc2U7IC8vIG1vdXNlZG93biBzdGF0ZVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgZXZlbnRUeXBlID0gTU9VU0VfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBvbiBzdGFydCB3ZSB3YW50IHRvIGhhdmUgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGRvd25cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBldi5idXR0b24gPT09IDApIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX01PVkUgJiYgZXYud2hpY2ggIT09IDEpIHtcbiAgICAgIGV2ZW50VHlwZSA9IElOUFVUX0VORDtcbiAgICB9IC8vIG1vdXNlIG11c3QgYmUgZG93blxuXG5cbiAgICBpZiAoIXRoaXMucHJlc3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBbZXZdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTW91c2VJbnB1dDtcbn0oSW5wdXQpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDb21iaW5lZCB0b3VjaCBhbmQgbW91c2UgaW5wdXRcbiAqXG4gKiBUb3VjaCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhlbiBtb3VzZSwgYW5kIHdoaWxlIHRvdWNoaW5nIG5vIG1vdXNlIGV2ZW50cyBhcmUgYWxsb3dlZC5cbiAqIFRoaXMgYmVjYXVzZSB0b3VjaCBkZXZpY2VzIGFsc28gZW1pdCBtb3VzZSBldmVudHMgd2hpbGUgZG9pbmcgYSB0b3VjaC5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIERFRFVQX1RJTUVPVVQgPSAyNTAwO1xudmFyIERFRFVQX0RJU1RBTkNFID0gMjU7XG5cbmZ1bmN0aW9uIHNldExhc3RUb3VjaChldmVudERhdGEpIHtcbiAgdmFyIF9ldmVudERhdGEkY2hhbmdlZFBvaSA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnMsXG4gICAgICB0b3VjaCA9IF9ldmVudERhdGEkY2hhbmdlZFBvaVswXTtcblxuICBpZiAodG91Y2guaWRlbnRpZmllciA9PT0gdGhpcy5wcmltYXJ5VG91Y2gpIHtcbiAgICB2YXIgbGFzdFRvdWNoID0ge1xuICAgICAgeDogdG91Y2guY2xpZW50WCxcbiAgICAgIHk6IHRvdWNoLmNsaWVudFlcbiAgICB9O1xuICAgIHZhciBsdHMgPSB0aGlzLmxhc3RUb3VjaGVzO1xuICAgIHRoaXMubGFzdFRvdWNoZXMucHVzaChsYXN0VG91Y2gpO1xuXG4gICAgdmFyIHJlbW92ZUxhc3RUb3VjaCA9IGZ1bmN0aW9uIHJlbW92ZUxhc3RUb3VjaCgpIHtcbiAgICAgIHZhciBpID0gbHRzLmluZGV4T2YobGFzdFRvdWNoKTtcblxuICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkVG91Y2hlcyhldmVudFR5cGUsIGV2ZW50RGF0YSkge1xuICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICB0aGlzLnByaW1hcnlUb3VjaCA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnNbMF0uaWRlbnRpZmllcjtcbiAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KGV2ZW50RGF0YSkge1xuICB2YXIgeCA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRYO1xuICB2YXIgeSA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRZO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sYXN0VG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0ID0gdGhpcy5sYXN0VG91Y2hlc1tpXTtcbiAgICB2YXIgZHggPSBNYXRoLmFicyh4IC0gdC54KTtcbiAgICB2YXIgZHkgPSBNYXRoLmFicyh5IC0gdC55KTtcblxuICAgIGlmIChkeCA8PSBERURVUF9ESVNUQU5DRSAmJiBkeSA8PSBERURVUF9ESVNUQU5DRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgVG91Y2hNb3VzZUlucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIFRvdWNoTW91c2VJbnB1dCA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9JbnB1dCkge1xuICAgIF9pbmhlcml0c0xvb3NlKFRvdWNoTW91c2VJbnB1dCwgX0lucHV0KTtcblxuICAgIGZ1bmN0aW9uIFRvdWNoTW91c2VJbnB1dChfbWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfSW5wdXQuY2FsbCh0aGlzLCBfbWFuYWdlciwgY2FsbGJhY2spIHx8IHRoaXM7XG5cbiAgICAgIF90aGlzLmhhbmRsZXIgPSBmdW5jdGlvbiAobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKSB7XG4gICAgICAgIHZhciBpc1RvdWNoID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIO1xuICAgICAgICB2YXIgaXNNb3VzZSA9IGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9NT1VTRTtcblxuICAgICAgICBpZiAoaXNNb3VzZSAmJiBpbnB1dERhdGEuc291cmNlQ2FwYWJpbGl0aWVzICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyB3aGVuIHdlJ3JlIGluIGEgdG91Y2ggZXZlbnQsIHJlY29yZCB0b3VjaGVzIHRvICBkZS1kdXBlIHN5bnRoZXRpYyBtb3VzZSBldmVudFxuXG5cbiAgICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgICByZWNvcmRUb3VjaGVzLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RGF0YSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5jYWxsYmFjayhtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMudG91Y2ggPSBuZXcgVG91Y2hJbnB1dChfdGhpcy5tYW5hZ2VyLCBfdGhpcy5oYW5kbGVyKTtcbiAgICAgIF90aGlzLm1vdXNlID0gbmV3IE1vdXNlSW5wdXQoX3RoaXMubWFuYWdlciwgX3RoaXMuaGFuZGxlcik7XG4gICAgICBfdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgICAgX3RoaXMubGFzdFRvdWNoZXMgPSBbXTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBoYW5kbGUgbW91c2UgYW5kIHRvdWNoIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGlucHV0RXZlbnRcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG5cblxuICAgIHZhciBfcHJvdG8gPSBUb3VjaE1vdXNlSW5wdXQucHJvdG90eXBlO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyc1xuICAgICAqL1xuICAgIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHRoaXMudG91Y2guZGVzdHJveSgpO1xuICAgICAgdGhpcy5tb3VzZS5kZXN0cm95KCk7XG4gICAgfTtcblxuICAgIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG4gIH0oSW5wdXQpO1xuXG4gIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBjYWxsZWQgYnkgdGhlIE1hbmFnZXIgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gIHZhciBUeXBlOyAvLyBsZXQgaW5wdXRDbGFzcyA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dENsYXNzO1xuXG4gIHZhciBpbnB1dENsYXNzID0gbWFuYWdlci5vcHRpb25zLmlucHV0Q2xhc3M7XG5cbiAgaWYgKGlucHV0Q2xhc3MpIHtcbiAgICBUeXBlID0gaW5wdXRDbGFzcztcbiAgfSBlbHNlIGlmIChTVVBQT1JUX1BPSU5URVJfRVZFTlRTKSB7XG4gICAgVHlwZSA9IFBvaW50ZXJFdmVudElucHV0O1xuICB9IGVsc2UgaWYgKFNVUFBPUlRfT05MWV9UT1VDSCkge1xuICAgIFR5cGUgPSBUb3VjaElucHV0O1xuICB9IGVsc2UgaWYgKCFTVVBQT1JUX1RPVUNIKSB7XG4gICAgVHlwZSA9IE1vdXNlSW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgVHlwZSA9IFRvdWNoTW91c2VJbnB1dDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZShtYW5hZ2VyLCBpbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZm4gb24gZWFjaCBlbnRyeVxuICogaWYgaXQgYWludCBhbiBhcnJheSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGhpbmcuXG4gKiB0aGlzIGlzIHVzZWQgYnkgYWxsIHRoZSBtZXRob2RzIHRoYXQgYWNjZXB0IGEgc2luZ2xlIGFuZCBhcnJheSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7KnxBcnJheX0gYXJnXG4gKiBAcGFyYW0ge1N0cmluZ30gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF1cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGludm9rZUFycmF5QXJnKGFyZywgZm4sIGNvbnRleHQpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIGVhY2goYXJnLCBjb250ZXh0W2ZuXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBTVEFURV9QT1NTSUJMRSA9IDE7XG52YXIgU1RBVEVfQkVHQU4gPSAyO1xudmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xudmFyIFNUQVRFX0VOREVEID0gODtcbnZhciBTVEFURV9SRUNPR05JWkVEID0gU1RBVEVfRU5ERUQ7XG52YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG52YXIgU1RBVEVfRkFJTEVEID0gMzI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHVuaXF1ZSBpZFxuICogQHJldHVybnMge251bWJlcn0gdW5pcXVlSWRcbiAqL1xudmFyIF91bmlxdWVJZCA9IDE7XG5mdW5jdGlvbiB1bmlxdWVJZCgpIHtcbiAgcmV0dXJuIF91bmlxdWVJZCsrO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSByZWNvZ25pemVyIGJ5IG5hbWUgaWYgaXQgaXMgYm91bmQgdG8gYSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSBvdGhlclJlY29nbml6ZXJcbiAqIEBwYXJhbSB7UmVjb2duaXplcn0gcmVjb2duaXplclxuICogQHJldHVybnMge1JlY29nbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCByZWNvZ25pemVyKSB7XG4gIHZhciBtYW5hZ2VyID0gcmVjb2duaXplci5tYW5hZ2VyO1xuXG4gIGlmIChtYW5hZ2VyKSB7XG4gICAgcmV0dXJuIG1hbmFnZXIuZ2V0KG90aGVyUmVjb2duaXplcik7XG4gIH1cblxuICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSB1c2FibGUgc3RyaW5nLCB1c2VkIGFzIGV2ZW50IHBvc3RmaXhcbiAqIEBwYXJhbSB7Y29uc3RhbnR9IHN0YXRlXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdGF0ZVxuICovXG5cbmZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gIGlmIChzdGF0ZSAmIFNUQVRFX0NBTkNFTExFRCkge1xuICAgIHJldHVybiAnY2FuY2VsJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0VOREVEKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfQ0hBTkdFRCkge1xuICAgIHJldHVybiAnbW92ZSc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9CRUdBTikge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSZWNvZ25pemVyIGZsb3cgZXhwbGFpbmVkOyAqXG4gKiBBbGwgcmVjb2duaXplcnMgaGF2ZSB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBQT1NTSUJMRSB3aGVuIGEgaW5wdXQgc2Vzc2lvbiBzdGFydHMuXG4gKiBUaGUgZGVmaW5pdGlvbiBvZiBhIGlucHV0IHNlc3Npb24gaXMgZnJvbSB0aGUgZmlyc3QgaW5wdXQgdW50aWwgdGhlIGxhc3QgaW5wdXQsIHdpdGggYWxsIGl0J3MgbW92ZW1lbnQgaW4gaXQuICpcbiAqIEV4YW1wbGUgc2Vzc2lvbiBmb3IgbW91c2UtaW5wdXQ6IG1vdXNlZG93biAtPiBtb3VzZW1vdmUgLT4gbW91c2V1cFxuICpcbiAqIE9uIGVhY2ggcmVjb2duaXppbmcgY3ljbGUgKHNlZSBNYW5hZ2VyLnJlY29nbml6ZSkgdGhlIC5yZWNvZ25pemUoKSBtZXRob2QgaXMgZXhlY3V0ZWRcbiAqIHdoaWNoIGRldGVybWluZXMgd2l0aCBzdGF0ZSBpdCBzaG91bGQgYmUuXG4gKlxuICogSWYgdGhlIHJlY29nbml6ZXIgaGFzIHRoZSBzdGF0ZSBGQUlMRUQsIENBTkNFTExFRCBvciBSRUNPR05JWkVEIChlcXVhbHMgRU5ERUQpLCBpdCBpcyByZXNldCB0b1xuICogUE9TU0lCTEUgdG8gZ2l2ZSBpdCBhbm90aGVyIGNoYW5nZSBvbiB0aGUgbmV4dCBjeWNsZS5cbiAqXG4gKiAgICAgICAgICAgICAgIFBvc3NpYmxlXG4gKiAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgKy0tLS0tKy0tLS0tLS0tLS0tLS0tLStcbiAqICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgKy0tLS0tKy0tLS0tKyAgICAgICAgICAgICAgIHxcbiAqICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgIHxcbiAqICAgRmFpbGVkICAgICAgQ2FuY2VsbGVkICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSstLS0tLS0rXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgUmVjb2duaXplZCAgICAgICBCZWdhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kZWQvUmVjb2duaXplZFxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJlY29nbml6ZXJcbiAqIEV2ZXJ5IHJlY29nbml6ZXIgbmVlZHMgdG8gZXh0ZW5kIGZyb20gdGhpcyBjbGFzcy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuXG52YXIgUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7XG4gICAgICBlbmFibGU6IHRydWVcbiAgICB9LCBvcHRpb25zKTtcbiAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsOyAvLyBkZWZhdWx0IGlzIGVuYWJsZSB0cnVlXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG4gICAgdGhpcy5zaW11bHRhbmVvdXMgPSB7fTtcbiAgICB0aGlzLnJlcXVpcmVGYWlsID0gW107XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge1JlY29nbml6ZXJ9XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQob3B0aW9ucykge1xuICAgIGFzc2lnbiQxKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7IC8vIGFsc28gdXBkYXRlIHRoZSB0b3VjaEFjdGlvbiwgaW4gY2FzZSBzb21ldGhpbmcgY2hhbmdlZCBhYm91dCB0aGUgZGlyZWN0aW9ucy9lbmFibGVkIHN0YXRlXG5cbiAgICB0aGlzLm1hbmFnZXIgJiYgdGhpcy5tYW5hZ2VyLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiByZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzaW11bHRhbmVvdXMgPSB0aGlzLnNpbXVsdGFuZW91cztcbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG5cbiAgICBpZiAoIXNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdKSB7XG4gICAgICBzaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXSA9IG90aGVyUmVjb2duaXplcjtcbiAgICAgIG90aGVyUmVjb2duaXplci5yZWNvZ25pemVXaXRoKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgc2ltdWx0YW5lb3VzIGxpbmsuIGl0IGRvZXNudCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRyb3BSZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gZHJvcFJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICBkZWxldGUgdGhpcy5zaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlY29nbml6ZXIgY2FuIG9ubHkgcnVuIHdoZW4gYW4gb3RoZXIgaXMgZmFpbGluZ1xuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5yZXF1aXJlRmFpbHVyZSA9IGZ1bmN0aW9uIHJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcblxuICAgIGlmIChpbkFycmF5KHJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpID09PSAtMSkge1xuICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgb3RoZXJSZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgcmVxdWlyZUZhaWx1cmUgbGluay4gaXQgZG9lcyBub3QgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5kcm9wUmVxdWlyZUZhaWx1cmUgPSBmdW5jdGlvbiBkcm9wUmVxdWlyZUZhaWx1cmUob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgdmFyIGluZGV4ID0gaW5BcnJheSh0aGlzLnJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhcyByZXF1aXJlIGZhaWx1cmVzIGJvb2xlYW5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmhhc1JlcXVpcmVGYWlsdXJlcyA9IGZ1bmN0aW9uIGhhc1JlcXVpcmVGYWlsdXJlcygpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGggPiAwO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaWYgdGhlIHJlY29nbml6ZXIgY2FuIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5SZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gY2FuUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gISF0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogWW91IHNob3VsZCB1c2UgYHRyeUVtaXRgIGluc3RlYWQgb2YgYGVtaXRgIGRpcmVjdGx5IHRvIGNoZWNrXG4gICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgc2VsZi5tYW5hZ2VyLmVtaXQoZXZlbnQsIGlucHV0KTtcbiAgICB9IC8vICdwYW5zdGFydCcgYW5kICdwYW5tb3ZlJ1xuXG5cbiAgICBpZiAoc3RhdGUgPCBTVEFURV9FTkRFRCkge1xuICAgICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQgKyBzdGF0ZVN0cihzdGF0ZSkpO1xuICAgIH1cblxuICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgaWYgKGlucHV0LmFkZGl0aW9uYWxFdmVudCkge1xuICAgICAgLy8gYWRkaXRpb25hbCBldmVudChwYW5sZWZ0LCBwYW5yaWdodCwgcGluY2hpbiwgcGluY2hvdXQuLi4pXG4gICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgfSAvLyBwYW5lbmQgYW5kIHBhbmNhbmNlbFxuXG5cbiAgICBpZiAoc3RhdGUgPj0gU1RBVEVfRU5ERUQpIHtcbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgcmVxdWlyZSBmYWlsdXJlIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQsXG4gICAqIGlmIHRydWUsIGl0IGVtaXRzIGEgZ2VzdHVyZSBldmVudCxcbiAgICogb3RoZXJ3aXNlLCBzZXR1cCB0aGUgc3RhdGUgdG8gRkFJTEVELlxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8udHJ5RW1pdCA9IGZ1bmN0aW9uIHRyeUVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5jYW5FbWl0KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgIH0gLy8gaXQncyBmYWlsaW5nIGFueXdheVxuXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FuIHdlIGVtaXQ/XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5FbWl0ID0gZnVuY3Rpb24gY2FuRW1pdCgpIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoKSB7XG4gICAgICBpZiAoISh0aGlzLnJlcXVpcmVGYWlsW2ldLnN0YXRlICYgKFNUQVRFX0ZBSUxFRCB8IFNUQVRFX1BPU1NJQkxFKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemUgPSBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgLy8gbWFrZSBhIG5ldyBjb3B5IG9mIHRoZSBpbnB1dERhdGFcbiAgICAvLyBzbyB3ZSBjYW4gY2hhbmdlIHRoZSBpbnB1dERhdGEgd2l0aG91dCBtZXNzaW5nIHVwIHRoZSBvdGhlciByZWNvZ25pemVyc1xuICAgIHZhciBpbnB1dERhdGFDbG9uZSA9IGFzc2lnbiQxKHt9LCBpbnB1dERhdGEpOyAvLyBpcyBpcyBlbmFibGVkIGFuZCBhbGxvdyByZWNvZ25pemluZz9cblxuICAgIGlmICghYm9vbE9yRm4odGhpcy5vcHRpb25zLmVuYWJsZSwgW3RoaXMsIGlucHV0RGF0YUNsb25lXSkpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyByZXNldCB3aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZFxuXG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9SRUNPR05JWkVEIHwgU1RBVEVfQ0FOQ0VMTEVEIHwgU1RBVEVfRkFJTEVEKSkge1xuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnByb2Nlc3MoaW5wdXREYXRhQ2xvbmUpOyAvLyB0aGUgcmVjb2duaXplciBoYXMgcmVjb2duaXplZCBhIGdlc3R1cmVcbiAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCB8IFNUQVRFX0NBTkNFTExFRCkpIHtcbiAgICAgIHRoaXMudHJ5RW1pdChpbnB1dERhdGFDbG9uZSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgcmVjb2duaXplclxuICAgKiB0aGUgYWN0dWFsIHJlY29nbml6aW5nIGhhcHBlbnMgaW4gdGhpcyBtZXRob2RcbiAgICogQHZpcnR1YWxcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKiBAcmV0dXJucyB7Y29uc3RhbnR9IFNUQVRFXG4gICAqL1xuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cblxuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dERhdGEpIHt9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZXR1cm4gdGhlIHByZWZlcnJlZCB0b3VjaC1hY3Rpb25cbiAgICogQHZpcnR1YWxcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cblxuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYWxsZWQgd2hlbiB0aGUgZ2VzdHVyZSBpc24ndCBhbGxvd2VkIHRvIHJlY29nbml6ZVxuICAgKiBsaWtlIHdoZW4gYW5vdGhlciBpcyBiZWluZyByZWNvZ25pemVkIG9yIGl0IGlzIGRpc2FibGVkXG4gICAqIEB2aXJ0dWFsXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7fTtcblxuICByZXR1cm4gUmVjb2duaXplcjtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQSB0YXAgaXMgcmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvaW5nIGEgc21hbGwgdGFwL2NsaWNrLiBNdWx0aXBsZSB0YXBzIGFyZSByZWNvZ25pemVkIGlmIHRoZXkgb2NjdXJcbiAqIGJldHdlZW4gdGhlIGdpdmVuIGludGVydmFsIGFuZCBwb3NpdGlvbi4gVGhlIGRlbGF5IG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvZ25pemUgbXVsdGktdGFwcyB3aXRob3V0IGZpcmluZ1xuICogYSBzaW5nbGUgdGFwLlxuICpcbiAqIFRoZSBldmVudERhdGEgZnJvbSB0aGUgZW1pdHRlZCBldmVudCBjb250YWlucyB0aGUgcHJvcGVydHkgYHRhcENvdW50YCwgd2hpY2ggY29udGFpbnMgdGhlIGFtb3VudCBvZlxuICogbXVsdGktdGFwcyBiZWluZyByZWNvZ25pemVkLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFRhcFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFRhcFJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBUYXBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAndGFwJyxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgdGFwczogMSxcbiAgICAgIGludGVydmFsOiAzMDAsXG4gICAgICAvLyBtYXggdGltZSBiZXR3ZWVuIHRoZSBtdWx0aS10YXAgdGFwc1xuICAgICAgdGltZTogMjUwLFxuICAgICAgLy8gbWF4IHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgZG93biAobGlrZSBmaW5nZXIgb24gdGhlIHNjcmVlbilcbiAgICAgIHRocmVzaG9sZDogOSxcbiAgICAgIC8vIGEgbWluaW1hbCBtb3ZlbWVudCBpcyBvaywgYnV0IGtlZXAgaXQgbG93XG4gICAgICBwb3NUaHJlc2hvbGQ6IDEwXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7IC8vIHByZXZpb3VzIHRpbWUgYW5kIGNlbnRlcixcbiAgICAvLyB1c2VkIGZvciB0YXAgY291bnRpbmdcblxuICAgIF90aGlzLnBUaW1lID0gZmFsc2U7XG4gICAgX3RoaXMucENlbnRlciA9IGZhbHNlO1xuICAgIF90aGlzLl90aW1lciA9IG51bGw7XG4gICAgX3RoaXMuX2lucHV0ID0gbnVsbDtcbiAgICBfdGhpcy5jb3VudCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRhcFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTl07XG4gIH07XG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgdmFyIHZhbGlkVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgb3B0aW9ucy50aW1lO1xuICAgIHRoaXMucmVzZXQoKTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiB0aGlzLmNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgIH0gLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cblxuICAgIGlmICh2YWxpZE1vdmVtZW50ICYmIHZhbGlkVG91Y2hUaW1lICYmIHZhbGlkUG9pbnRlcnMpIHtcbiAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT09IElOUFVUX0VORCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmFsaWRJbnRlcnZhbCA9IHRoaXMucFRpbWUgPyBpbnB1dC50aW1lU3RhbXAgLSB0aGlzLnBUaW1lIDwgb3B0aW9ucy5pbnRlcnZhbCA6IHRydWU7XG4gICAgICB2YXIgdmFsaWRNdWx0aVRhcCA9ICF0aGlzLnBDZW50ZXIgfHwgZ2V0RGlzdGFuY2UodGhpcy5wQ2VudGVyLCBpbnB1dC5jZW50ZXIpIDwgb3B0aW9ucy5wb3NUaHJlc2hvbGQ7XG4gICAgICB0aGlzLnBUaW1lID0gaW5wdXQudGltZVN0YW1wO1xuICAgICAgdGhpcy5wQ2VudGVyID0gaW5wdXQuY2VudGVyO1xuXG4gICAgICBpZiAoIXZhbGlkTXVsdGlUYXAgfHwgIXZhbGlkSW50ZXJ2YWwpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIGlmIHRhcCBjb3VudCBtYXRjaGVzIHdlIGhhdmUgcmVjb2duaXplZCBpdCxcbiAgICAgIC8vIGVsc2UgaXQgaGFzIGJlZ2FuIHJlY29nbml6aW5nLi4uXG5cbiAgICAgIHZhciB0YXBDb3VudCA9IHRoaXMuY291bnQgJSBvcHRpb25zLnRhcHM7XG5cbiAgICAgIGlmICh0YXBDb3VudCA9PT0gMCkge1xuICAgICAgICAvLyBubyBmYWlsaW5nIHJlcXVpcmVtZW50cywgaW1tZWRpYXRlbHkgdHJpZ2dlciB0aGUgdGFwIGV2ZW50XG4gICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZUZhaWx1cmVzKCkpIHtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcblxuICAgICAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgICAgICB9LCBvcHRpb25zLmludGVydmFsKTtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5mYWlsVGltZW91dCA9IGZ1bmN0aW9uIGZhaWxUaW1lb3V0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LCB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHRoaXMuX2lucHV0LnRhcENvdW50ID0gdGhpcy5jb3VudDtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gVGFwUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFRoaXMgcmVjb2duaXplciBpcyBqdXN0IHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgc2ltcGxlIGF0dHJpYnV0ZSByZWNvZ25pemVycy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBBdHRyUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoQXR0clJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBBdHRyUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFVzZWQgdG8gY2hlY2sgaWYgaXQgdGhlIHJlY29nbml6ZXIgcmVjZWl2ZXMgdmFsaWQgaW5wdXQsIGxpa2UgaW5wdXQuZGlzdGFuY2UgPiAxMC5cbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gcmVjb2duaXplZFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBBdHRyUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICB2YXIgb3B0aW9uUG9pbnRlcnMgPSB0aGlzLm9wdGlvbnMucG9pbnRlcnM7XG4gICAgcmV0dXJuIG9wdGlvblBvaW50ZXJzID09PSAwIHx8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9uUG9pbnRlcnM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICovXG5cblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIHZhciBldmVudFR5cGUgPSBpbnB1dC5ldmVudFR5cGU7XG4gICAgdmFyIGlzUmVjb2duaXplZCA9IHN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCk7XG4gICAgdmFyIGlzVmFsaWQgPSB0aGlzLmF0dHJUZXN0KGlucHV0KTsgLy8gb24gY2FuY2VsIGlucHV0IGFuZCB3ZSd2ZSByZWNvZ25pemVkIGJlZm9yZSwgcmV0dXJuIFNUQVRFX0NBTkNFTExFRFxuXG4gICAgaWYgKGlzUmVjb2duaXplZCAmJiAoZXZlbnRUeXBlICYgSU5QVVRfQ0FOQ0VMIHx8ICFpc1ZhbGlkKSkge1xuICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0FOQ0VMTEVEO1xuICAgIH0gZWxzZSBpZiAoaXNSZWNvZ25pemVkIHx8IGlzVmFsaWQpIHtcbiAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfRU5ERUQ7XG4gICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgcmV0dXJuIFNUQVRFX0JFR0FOO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgcmV0dXJuIEF0dHJSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZGlyZWN0aW9uIGNvbnMgdG8gc3RyaW5nXG4gKiBAcGFyYW0ge2NvbnN0YW50fSBkaXJlY3Rpb25cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZGlyZWN0aW9uU3RyKGRpcmVjdGlvbikge1xuICBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fRE9XTikge1xuICAgIHJldHVybiAnZG93bic7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fVVApIHtcbiAgICByZXR1cm4gJ3VwJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgcmV0dXJuICdsZWZ0JztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9SSUdIVCkge1xuICAgIHJldHVybiAncmlnaHQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQYW5cbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGFuZCBtb3ZlZCBpbiB0aGUgYWxsb3dlZCBkaXJlY3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFBhblJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQYW5SZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFBhblJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGFuJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0FMTFxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICAgIF90aGlzLnBYID0gbnVsbDtcbiAgICBfdGhpcy5wWSA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFBhblJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciBhY3Rpb25zID0gW107XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1kpO1xuICAgIH1cblxuICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9O1xuXG4gIF9wcm90by5kaXJlY3Rpb25UZXN0ID0gZnVuY3Rpb24gZGlyZWN0aW9uVGVzdChpbnB1dCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBoYXNNb3ZlZCA9IHRydWU7XG4gICAgdmFyIGRpc3RhbmNlID0gaW5wdXQuZGlzdGFuY2U7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0LmRpcmVjdGlvbjtcbiAgICB2YXIgeCA9IGlucHV0LmRlbHRhWDtcbiAgICB2YXIgeSA9IGlucHV0LmRlbHRhWTsgLy8gbG9jayB0byBheGlzP1xuXG4gICAgaWYgKCEoZGlyZWN0aW9uICYgb3B0aW9ucy5kaXJlY3Rpb24pKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICBkaXJlY3Rpb24gPSB4ID09PSAwID8gRElSRUNUSU9OX05PTkUgOiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgICAgICBoYXNNb3ZlZCA9IHggIT09IHRoaXMucFg7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFYKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IHkgPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG4gICAgICAgIGhhc01vdmVkID0geSAhPT0gdGhpcy5wWTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gaGFzTW92ZWQgJiYgZGlzdGFuY2UgPiBvcHRpb25zLnRocmVzaG9sZCAmJiBkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBBdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKCAvLyByZXBsYWNlIHdpdGggYSBzdXBlciBjYWxsXG4gICAgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOIHx8ICEodGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKSAmJiB0aGlzLmRpcmVjdGlvblRlc3QoaW5wdXQpKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB0aGlzLnBYID0gaW5wdXQuZGVsdGFYO1xuICAgIHRoaXMucFkgPSBpbnB1dC5kZWx0YVk7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5kaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gUGFuUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTd2lwZVxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIG1vdmluZyBmYXN0ICh2ZWxvY2l0eSksIHdpdGggZW5vdWdoIGRpc3RhbmNlIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgU3dpcGVSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoU3dpcGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFN3aXBlUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICB2ZWxvY2l0eTogMC4zLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3dpcGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciB2ZWxvY2l0eTtcblxuICAgIGlmIChkaXJlY3Rpb24gJiAoRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5WTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiBkaXJlY3Rpb24gJiBpbnB1dC5vZmZzZXREaXJlY3Rpb24gJiYgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmIGlucHV0Lm1heFBvaW50ZXJzID09PSB0aGlzLm9wdGlvbnMucG9pbnRlcnMgJiYgYWJzKHZlbG9jaXR5KSA+IHRoaXMub3B0aW9ucy52ZWxvY2l0eSAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQ7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5vZmZzZXREaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uLCBpbnB1dCk7XG4gICAgfVxuXG4gICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFN3aXBlUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQaW5jaFxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXJzIGFyZSBtb3ZpbmcgdG93YXJkICh6b29tLWluKSBvciBhd2F5IGZyb20gZWFjaCBvdGhlciAoem9vbS1vdXQpLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBQaW5jaFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQaW5jaFJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUGluY2hSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGluY2gnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQaW5jaFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnNjYWxlIC0gMSkgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnNjYWxlICE9PSAxKSB7XG4gICAgICB2YXIgaW5PdXQgPSBpbnB1dC5zY2FsZSA8IDEgPyAnaW4nIDogJ291dCc7XG4gICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICB9XG5cbiAgICBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmVtaXQuY2FsbCh0aGlzLCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFBpbmNoUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSb3RhdGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVyIGFyZSBtb3ZpbmcgaW4gYSBjaXJjdWxhciBtb3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFJvdGF0ZVJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShSb3RhdGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFJvdGF0ZVJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdyb3RhdGUnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSb3RhdGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIChNYXRoLmFicyhpbnB1dC5yb3RhdGlvbikgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgcmV0dXJuIFJvdGF0ZVJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUHJlc3NcbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGZvciB4IG1zIHdpdGhvdXQgYW55IG1vdmVtZW50LlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFByZXNzUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUHJlc3NSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUHJlc3NSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncHJlc3MnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0aW1lOiAyNTEsXG4gICAgICAvLyBtaW5pbWFsIHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgcHJlc3NlZFxuICAgICAgdGhyZXNob2xkOiA5XG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gICAgX3RoaXMuX3RpbWVyID0gbnVsbDtcbiAgICBfdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQcmVzc1JlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX0FVVE9dO1xuICB9O1xuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgIHZhciB2YWxpZFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPiBvcHRpb25zLnRpbWU7XG4gICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cbiAgICBpZiAoIXZhbGlkTW92ZW1lbnQgfHwgIXZhbGlkUG9pbnRlcnMgfHwgaW5wdXQuZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgIXZhbGlkVGltZSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG5cbiAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgIH0sIG9wdGlvbnMudGltZSk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpbnB1dCAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIFwidXBcIiwgaW5wdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUHJlc3NSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IGlmIERPTSBldmVudHMgYXJlIGJlaW5nIHRyaWdnZXJlZC5cbiAgICogQnV0IHRoaXMgaXMgc2xvd2VyIGFuZCB1bnVzZWQgYnkgc2ltcGxlIGltcGxlbWVudGF0aW9ucywgc28gZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkb21FdmVudHM6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eS9mYWxsYmFjay5cbiAgICogV2hlbiBzZXQgdG8gYGNvbXB1dGVgIGl0IHdpbGwgbWFnaWNhbGx5IHNldCB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgYWRkZWQgcmVjb2duaXplcnMuXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqIEBkZWZhdWx0IGNvbXB1dGVcbiAgICovXG4gIHRvdWNoQWN0aW9uOiBUT1VDSF9BQ1RJT05fQ09NUFVURSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGVuYWJsZTogdHJ1ZSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogRVhQRVJJTUVOVEFMIEZFQVRVUkUgLS0gY2FuIGJlIHJlbW92ZWQvY2hhbmdlZFxuICAgKiBDaGFuZ2UgdGhlIHBhcmVudCBpbnB1dCB0YXJnZXQgZWxlbWVudC5cbiAgICogSWYgTnVsbCwgdGhlbiBpdCBpcyBiZWluZyBzZXQgdGhlIHRvIG1haW4gZWxlbWVudC5cbiAgICogQHR5cGUge051bGx8RXZlbnRUYXJnZXR9XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGlucHV0VGFyZ2V0OiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBmb3JjZSBhbiBpbnB1dCBjbGFzc1xuICAgKiBAdHlwZSB7TnVsbHxGdW5jdGlvbn1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5wdXRDbGFzczogbnVsbCxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogU29tZSBDU1MgcHJvcGVydGllcyBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB3b3JraW5nIG9mIEhhbW1lci5cbiAgICogQWRkIHRoZW0gdG8gdGhpcyBtZXRob2QgYW5kIHRoZXkgd2lsbCBiZSBzZXQgd2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyLlxuICAgKiBAbmFtZXNwYWNlXG4gICAqL1xuICBjc3NQcm9wczoge1xuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZXMgdGV4dCBzZWxlY3Rpb24gdG8gaW1wcm92ZSB0aGUgZHJhZ2dpbmcgZ2VzdHVyZS4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlclNlbGVjdDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGUgdGhlIFdpbmRvd3MgUGhvbmUgZ3JpcHBlcnMgd2hlbiBwcmVzc2luZyBhbiBlbGVtZW50LlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdG91Y2hTZWxlY3Q6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlcyB0aGUgZGVmYXVsdCBjYWxsb3V0IHNob3duIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0LlxuICAgICAqIE9uIGlPUywgd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQgc3VjaCBhcyBhIGxpbmssIFNhZmFyaSBkaXNwbGF5c1xuICAgICAqIGEgY2FsbG91dCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rLiBUaGlzIHByb3BlcnR5IGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGF0IGNhbGxvdXQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB0b3VjaENhbGxvdXQ6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB6b29taW5nIGlzIGVuYWJsZWQuIFVzZWQgYnkgSUUxMD5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIGNvbnRlbnRab29taW5nOiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlckRyYWc6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBPdmVycmlkZXMgdGhlIGhpZ2hsaWdodCBjb2xvciBzaG93biB3aGVuIHRoZSB1c2VyIHRhcHMgYSBsaW5rIG9yIGEgSmF2YVNjcmlwdFxuICAgICAqIGNsaWNrYWJsZSBlbGVtZW50IGluIGlPUy4gVGhpcyBwcm9wZXJ0eSBvYmV5cyB0aGUgYWxwaGEgdmFsdWUsIGlmIHNwZWNpZmllZC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdyZ2JhKDAsMCwwLDApJ1xuICAgICAqL1xuICAgIHRhcEhpZ2hsaWdodENvbG9yOiBcInJnYmEoMCwwLDAsMClcIlxuICB9XG59O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogRGVmYXVsdCByZWNvZ25pemVyIHNldHVwIHdoZW4gY2FsbGluZyBgSGFtbWVyKClgXG4gKiBXaGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIgdGhlc2Ugd2lsbCBiZSBza2lwcGVkLlxuICogVGhpcyBpcyBzZXBhcmF0ZWQgd2l0aCBvdGhlciBkZWZhdWx0cyBiZWNhdXNlIG9mIHRyZWUtc2hha2luZy5cbiAqIEB0eXBlIHtBcnJheX1cbiAqL1xuXG52YXIgcHJlc2V0ID0gW1tSb3RhdGVSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn1dLCBbUGluY2hSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn0sIFsncm90YXRlJ11dLCBbU3dpcGVSZWNvZ25pemVyLCB7XG4gIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUxcbn1dLCBbUGFuUmVjb2duaXplciwge1xuICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG59LCBbJ3N3aXBlJ11dLCBbVGFwUmVjb2duaXplcl0sIFtUYXBSZWNvZ25pemVyLCB7XG4gIGV2ZW50OiAnZG91YmxldGFwJyxcbiAgdGFwczogMlxufSwgWyd0YXAnXV0sIFtQcmVzc1JlY29nbml6ZXJdXTtcblxudmFyIFNUT1AgPSAxO1xudmFyIEZPUkNFRF9TVE9QID0gMjtcbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZC9yZW1vdmUgdGhlIGNzcyBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gbWFuYWdlci5vcHRpb25zLmNzc1Byb3BzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYWRkXG4gKi9cblxuZnVuY3Rpb24gdG9nZ2xlQ3NzUHJvcHMobWFuYWdlciwgYWRkKSB7XG4gIHZhciBlbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuXG4gIGlmICghZWxlbWVudC5zdHlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwcm9wO1xuICBlYWNoKG1hbmFnZXIub3B0aW9ucy5jc3NQcm9wcywgZnVuY3Rpb24gKHZhbHVlLCBuYW1lKSB7XG4gICAgcHJvcCA9IHByZWZpeGVkKGVsZW1lbnQuc3R5bGUsIG5hbWUpO1xuXG4gICAgaWYgKGFkZCkge1xuICAgICAgbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSA9IGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSBtYW5hZ2VyLm9sZENzc1Byb3BzW3Byb3BdIHx8IFwiXCI7XG4gICAgfVxuICB9KTtcblxuICBpZiAoIWFkZCkge1xuICAgIG1hbmFnZXIub2xkQ3NzUHJvcHMgPSB7fTtcbiAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdHJpZ2dlciBkb20gZXZlbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqL1xuXG5cbmZ1bmN0aW9uIHRyaWdnZXJEb21FdmVudChldmVudCwgZGF0YSkge1xuICB2YXIgZ2VzdHVyZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgZ2VzdHVyZUV2ZW50LmluaXRFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gIGdlc3R1cmVFdmVudC5nZXN0dXJlID0gZGF0YTtcbiAgZGF0YS50YXJnZXQuZGlzcGF0Y2hFdmVudChnZXN0dXJlRXZlbnQpO1xufVxuLyoqXG4qIEBwcml2YXRlXG4gKiBNYW5hZ2VyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG5cbnZhciBNYW5hZ2VyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMub3B0aW9ucyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMucmVjb2duaXplcnMgPSBbXTtcbiAgICB0aGlzLm9sZENzc1Byb3BzID0ge307XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmlucHV0ID0gY3JlYXRlSW5wdXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnRvdWNoQWN0aW9uID0gbmV3IFRvdWNoQWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG4gICAgZWFjaCh0aGlzLm9wdGlvbnMucmVjb2duaXplcnMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgcmVjb2duaXplciA9IF90aGlzLmFkZChuZXcgaXRlbVswXShpdGVtWzFdKSk7XG5cbiAgICAgIGl0ZW1bMl0gJiYgcmVjb2duaXplci5yZWNvZ25pemVXaXRoKGl0ZW1bMl0pO1xuICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7TWFuYWdlcn1cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgYXNzaWduJDEodGhpcy5vcHRpb25zLCBvcHRpb25zKTsgLy8gT3B0aW9ucyB0aGF0IG5lZWQgYSBsaXR0bGUgbW9yZSBzZXR1cFxuXG4gICAgaWYgKG9wdGlvbnMudG91Y2hBY3Rpb24pIHtcbiAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaW5wdXRUYXJnZXQpIHtcbiAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaW5wdXQudGFyZ2V0ID0gb3B0aW9ucy5pbnB1dFRhcmdldDtcbiAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc3RvcCByZWNvZ25pemluZyBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBUaGlzIHNlc3Npb24gd2lsbCBiZSBkaXNjYXJkZWQsIHdoZW4gYSBuZXcgW2lucHV0XXN0YXJ0IGV2ZW50IGlzIGZpcmVkLlxuICAgKiBXaGVuIGZvcmNlZCwgdGhlIHJlY29nbml6ZXIgY3ljbGUgaXMgc3RvcHBlZCBpbW1lZGlhdGVseS5cbiAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VdXG4gICAqL1xuXG5cbiAgX3Byb3RvLnN0b3AgPSBmdW5jdGlvbiBzdG9wKGZvcmNlKSB7XG4gICAgdGhpcy5zZXNzaW9uLnN0b3BwZWQgPSBmb3JjZSA/IEZPUkNFRF9TVE9QIDogU1RPUDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJ1biB0aGUgcmVjb2duaXplcnMhXG4gICAqIGNhbGxlZCBieSB0aGUgaW5wdXRIYW5kbGVyIGZ1bmN0aW9uIG9uIGV2ZXJ5IG1vdmVtZW50IG9mIHRoZSBwb2ludGVycyAodG91Y2hlcylcbiAgICogaXQgd2Fsa3MgdGhyb3VnaCBhbGwgdGhlIHJlY29nbml6ZXJzIGFuZCB0cmllcyB0byBkZXRlY3QgdGhlIGdlc3R1cmUgdGhhdCBpcyBiZWluZyBtYWRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xuXG4gICAgaWYgKHNlc3Npb24uc3RvcHBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gcnVuIHRoZSB0b3VjaC1hY3Rpb24gcG9seWZpbGxcblxuXG4gICAgdGhpcy50b3VjaEFjdGlvbi5wcmV2ZW50RGVmYXVsdHMoaW5wdXREYXRhKTtcbiAgICB2YXIgcmVjb2duaXplcjtcbiAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzOyAvLyB0aGlzIGhvbGRzIHRoZSByZWNvZ25pemVyIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAvLyBzbyB0aGUgcmVjb2duaXplcidzIHN0YXRlIG5lZWRzIHRvIGJlIEJFR0FOLCBDSEFOR0VELCBFTkRFRCBvciBSRUNPR05JWkVEXG4gICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuXG4gICAgdmFyIGN1clJlY29nbml6ZXIgPSBzZXNzaW9uLmN1clJlY29nbml6ZXI7IC8vIHJlc2V0IHdoZW4gdGhlIGxhc3QgcmVjb2duaXplciBpcyByZWNvZ25pemVkXG4gICAgLy8gb3Igd2hlbiB3ZSdyZSBpbiBhIG5ldyBzZXNzaW9uXG5cbiAgICBpZiAoIWN1clJlY29nbml6ZXIgfHwgY3VyUmVjb2duaXplciAmJiBjdXJSZWNvZ25pemVyLnN0YXRlICYgU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICAgIGN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgcmVjb2duaXplcnMubGVuZ3RoKSB7XG4gICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07IC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgIC8vIDEuICAgYWxsb3cgaWYgdGhlIHNlc3Npb24gaXMgTk9UIGZvcmNlZCBzdG9wcGVkIChzZWUgdGhlIC5zdG9wKCkgbWV0aG9kKVxuICAgICAgLy8gMi4gICBhbGxvdyBpZiB3ZSBzdGlsbCBoYXZlbid0IHJlY29nbml6ZWQgYSBnZXN0dXJlIGluIHRoaXMgc2Vzc2lvbiwgb3IgdGhlIHRoaXMgcmVjb2duaXplciBpcyB0aGUgb25lXG4gICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgIC8vIDMuICAgYWxsb3cgaWYgdGhlIHJlY29nbml6ZXIgaXMgYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzIHdpdGggdGhlIGN1cnJlbnQgcmVjb2duaXplZCByZWNvZ25pemVyLlxuICAgICAgLy8gICAgICB0aGlzIGNhbiBiZSBzZXR1cCB3aXRoIHRoZSBgcmVjb2duaXplV2l0aCgpYCBtZXRob2Qgb24gdGhlIHJlY29nbml6ZXIuXG5cbiAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQgIT09IEZPUkNFRF9TVE9QICYmICggLy8gMVxuICAgICAgIWN1clJlY29nbml6ZXIgfHwgcmVjb2duaXplciA9PT0gY3VyUmVjb2duaXplciB8fCAvLyAyXG4gICAgICByZWNvZ25pemVyLmNhblJlY29nbml6ZVdpdGgoY3VyUmVjb2duaXplcikpKSB7XG4gICAgICAgIC8vIDNcbiAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemUoaW5wdXREYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29nbml6ZXIucmVzZXQoKTtcbiAgICAgIH0gLy8gaWYgdGhlIHJlY29nbml6ZXIgaGFzIGJlZW4gcmVjb2duaXppbmcgdGhlIGlucHV0IGFzIGEgdmFsaWQgZ2VzdHVyZSwgd2Ugd2FudCB0byBzdG9yZSB0aGlzIG9uZSBhcyB0aGVcbiAgICAgIC8vIGN1cnJlbnQgYWN0aXZlIHJlY29nbml6ZXIuIGJ1dCBvbmx5IGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBhY3RpdmUgcmVjb2duaXplclxuXG5cbiAgICAgIGlmICghY3VyUmVjb2duaXplciAmJiByZWNvZ25pemVyLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEKSkge1xuICAgICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSByZWNvZ25pemVyO1xuICAgICAgICBjdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGdldCBhIHJlY29nbml6ZXIgYnkgaXRzIGV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TnVsbH1cbiAgICovXG5cblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHJlY29nbml6ZXIpIHtcbiAgICBpZiAocmVjb2duaXplciBpbnN0YW5jZW9mIFJlY29nbml6ZXIpIHtcbiAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgIH1cblxuICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVjb2duaXplcnNbaV0ub3B0aW9ucy5ldmVudCA9PT0gcmVjb2duaXplcikge1xuICAgICAgICByZXR1cm4gcmVjb2duaXplcnNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSBhZGQgYSByZWNvZ25pemVyIHRvIHRoZSBtYW5hZ2VyXG4gICAqIGV4aXN0aW5nIHJlY29nbml6ZXJzIHdpdGggdGhlIHNhbWUgZXZlbnQgbmFtZSB3aWxsIGJlIHJlbW92ZWRcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE1hbmFnZXJ9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChyZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsIFwiYWRkXCIsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IC8vIHJlbW92ZSBleGlzdGluZ1xuXG5cbiAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aGlzLnJlbW92ZShleGlzdGluZyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWNvZ25pemVycy5wdXNoKHJlY29nbml6ZXIpO1xuICAgIHJlY29nbml6ZXIubWFuYWdlciA9IHRoaXM7XG4gICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlbW92ZSBhIHJlY29nbml6ZXIgYnkgbmFtZSBvciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgKi9cblxuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhyZWNvZ25pemVyLCBcInJlbW92ZVwiLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFJlY29nbml6ZXIgPSB0aGlzLmdldChyZWNvZ25pemVyKTsgLy8gbGV0J3MgbWFrZSBzdXJlIHRoaXMgcmVjb2duaXplciBleGlzdHNcblxuICAgIGlmIChyZWNvZ25pemVyKSB7XG4gICAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuICAgICAgdmFyIGluZGV4ID0gaW5BcnJheShyZWNvZ25pemVycywgdGFyZ2V0UmVjb2duaXplcik7XG5cbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGJpbmQgZXZlbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub24gPSBmdW5jdGlvbiBvbihldmVudHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQgfHwgaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBoYW5kbGVyc1tldmVudF0gPSBoYW5kbGVyc1tldmVudF0gfHwgW107XG4gICAgICBoYW5kbGVyc1tldmVudF0ucHVzaChoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIHVuYmluZCBldmVudCwgbGVhdmUgZW1pdCBibGFuayB0byByZW1vdmUgYWxsIGhhbmRsZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2hhbmRsZXJdXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub2ZmID0gZnVuY3Rpb24gb2ZmKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVyc1tldmVudF0gJiYgaGFuZGxlcnNbZXZlbnRdLnNwbGljZShpbkFycmF5KGhhbmRsZXJzW2V2ZW50XSwgaGFuZGxlciksIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgZGF0YSkge1xuICAgIC8vIHdlIGFsc28gd2FudCB0byB0cmlnZ2VyIGRvbSBldmVudHNcbiAgICBpZiAodGhpcy5vcHRpb25zLmRvbUV2ZW50cykge1xuICAgICAgdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKTtcbiAgICB9IC8vIG5vIGhhbmRsZXJzLCBzbyBza2lwIGl0IGFsbFxuXG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzW2V2ZW50XSAmJiB0aGlzLmhhbmRsZXJzW2V2ZW50XS5zbGljZSgpO1xuXG4gICAgaWYgKCFoYW5kbGVycyB8fCAhaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGF0YS50eXBlID0gZXZlbnQ7XG5cbiAgICBkYXRhLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGF0YS5zcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgaGFuZGxlcnNbaV0oZGF0YSk7XG4gICAgICBpKys7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZGVzdHJveSB0aGUgbWFuYWdlciBhbmQgdW5iaW5kcyBhbGwgZXZlbnRzXG4gICAqIGl0IGRvZXNuJ3QgdW5iaW5kIGRvbSBldmVudHMsIHRoYXQgaXMgdGhlIHVzZXIgb3duIHJlc3BvbnNpYmlsaXR5XG4gICAqL1xuXG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuZWxlbWVudCAmJiB0b2dnbGVDc3NQcm9wcyh0aGlzLCBmYWxzZSk7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIE1hbmFnZXI7XG59KCk7XG5cbnZhciBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQID0ge1xuICB0b3VjaHN0YXJ0OiBJTlBVVF9TVEFSVCxcbiAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICB0b3VjaGNhbmNlbDogSU5QVVRfQ0FOQ0VMXG59O1xudmFyIFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQnO1xudmFyIFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcbi8qKlxuICogQHByaXZhdGVcbiAqIFRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBTaW5nbGVUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoU2luZ2xlVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBTaW5nbGVUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IFNpbmdsZVRvdWNoSW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2VGFyZ2V0ID0gU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTaW5nbGVUb3VjaElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgdHlwZSA9IFNJTkdMRV9UT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07IC8vIHNob3VsZCB3ZSBoYW5kbGUgdGhlIHRvdWNoIGV2ZW50cz9cblxuICAgIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3VjaGVzID0gbm9ybWFsaXplU2luZ2xlVG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTsgLy8gd2hlbiBkb25lLCByZXNldCB0aGUgc3RhcnRlZCBzdGF0ZVxuXG4gICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiB0b3VjaGVzWzBdLmxlbmd0aCAtIHRvdWNoZXNbMV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgdHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHRvdWNoZXNbMF0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBTaW5nbGVUb3VjaElucHV0O1xufShJbnB1dCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgdmFyIGFsbCA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciBjaGFuZ2VkID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG5cbiAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgIGFsbCA9IHVuaXF1ZUFycmF5KGFsbC5jb25jYXQoY2hhbmdlZCksICdpZGVudGlmaWVyJywgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gW2FsbCwgY2hhbmdlZF07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdyYXAgYSBtZXRob2Qgd2l0aCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgYW5kIHN0YWNrIHRyYWNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB3cmFwcGluZyB0aGUgc3VwcGxpZWQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBkZXByZWNhdGUobWV0aG9kLCBuYW1lLCBtZXNzYWdlKSB7XG4gIHZhciBkZXByZWNhdGlvbk1lc3NhZ2UgPSBcIkRFUFJFQ0FURUQgTUVUSE9EOiBcIiArIG5hbWUgKyBcIlxcblwiICsgbWVzc2FnZSArIFwiIEFUIFxcblwiO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICB2YXIgc3RhY2sgPSBlICYmIGUuc3RhY2sgPyBlLnN0YWNrLnJlcGxhY2UoL15bXlxcKF0rP1tcXG4kXS9nbSwgJycpLnJlcGxhY2UoL15cXHMrYXRcXHMrL2dtLCAnJykucmVwbGFjZSgvXk9iamVjdC48YW5vbnltb3VzPlxccypcXCgvZ20sICd7YW5vbnltb3VzfSgpQCcpIDogJ1Vua25vd24gU3RhY2sgVHJhY2UnO1xuICAgIHZhciBsb2cgPSB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUud2FybiB8fCB3aW5kb3cuY29uc29sZS5sb2cpO1xuXG4gICAgaWYgKGxvZykge1xuICAgICAgbG9nLmNhbGwod2luZG93LmNvbnNvbGUsIGRlcHJlY2F0aW9uTWVzc2FnZSwgc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW21lcmdlPWZhbHNlXVxuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG5cbnZhciBleHRlbmQgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYywgbWVyZ2UpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBrZXlzLmxlbmd0aCkge1xuICAgIGlmICghbWVyZ2UgfHwgbWVyZ2UgJiYgZGVzdFtrZXlzW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXN0W2tleXNbaV1dID0gc3JjW2tleXNbaV1dO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufSwgJ2V4dGVuZCcsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgdGhhdCBleGlzdCBpbiBkZXN0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuIGJ5IHNyY1xuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xuXG52YXIgbWVyZ2UgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYykge1xuICByZXR1cm4gZXh0ZW5kKGRlc3QsIHNyYywgdHJ1ZSk7XG59LCAnbWVyZ2UnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzaW1wbGUgY2xhc3MgaW5oZXJpdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoaWxkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBiYXNlXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXNdXG4gKi9cblxuZnVuY3Rpb24gaW5oZXJpdChjaGlsZCwgYmFzZSwgcHJvcGVydGllcykge1xuICB2YXIgYmFzZVAgPSBiYXNlLnByb3RvdHlwZTtcbiAgdmFyIGNoaWxkUDtcbiAgY2hpbGRQID0gY2hpbGQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShiYXNlUCk7XG4gIGNoaWxkUC5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuICBjaGlsZFAuX3N1cGVyID0gYmFzZVA7XG5cbiAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICBhc3NpZ24kMShjaGlsZFAsIHByb3BlcnRpZXMpO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNpbXBsZSBmdW5jdGlvbiBiaW5kXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gYmluZEZuKGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBib3VuZEZuKCkge1xuICAgIHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIG1hbmFnZXIgd2l0aCBhIGRlZmF1bHQgc2V0IG9mIHJlY29nbml6ZXJzLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIEhhbW1lciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIHZhciBIYW1tZXIgPVxuICAvKipcbiAgICAqIEBwcml2YXRlXG4gICAgKiBAY29uc3Qge3N0cmluZ31cbiAgICAqL1xuICBmdW5jdGlvbiBIYW1tZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1hbmFnZXIoZWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgcmVjb2duaXplcnM6IHByZXNldC5jb25jYXQoKVxuICAgIH0sIG9wdGlvbnMpKTtcbiAgfTtcblxuICBIYW1tZXIuVkVSU0lPTiA9IFwiMi4wLjE3LXJjXCI7XG4gIEhhbW1lci5ESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0FMTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9ET1dOID0gRElSRUNUSU9OX0RPV047XG4gIEhhbW1lci5ESVJFQ1RJT05fTEVGVCA9IERJUkVDVElPTl9MRUZUO1xuICBIYW1tZXIuRElSRUNUSU9OX1JJR0hUID0gRElSRUNUSU9OX1JJR0hUO1xuICBIYW1tZXIuRElSRUNUSU9OX1VQID0gRElSRUNUSU9OX1VQO1xuICBIYW1tZXIuRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9WRVJUSUNBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9OT05FID0gRElSRUNUSU9OX05PTkU7XG4gIEhhbW1lci5ESVJFQ1RJT05fRE9XTiA9IERJUkVDVElPTl9ET1dOO1xuICBIYW1tZXIuSU5QVVRfU1RBUlQgPSBJTlBVVF9TVEFSVDtcbiAgSGFtbWVyLklOUFVUX01PVkUgPSBJTlBVVF9NT1ZFO1xuICBIYW1tZXIuSU5QVVRfRU5EID0gSU5QVVRfRU5EO1xuICBIYW1tZXIuSU5QVVRfQ0FOQ0VMID0gSU5QVVRfQ0FOQ0VMO1xuICBIYW1tZXIuU1RBVEVfUE9TU0lCTEUgPSBTVEFURV9QT1NTSUJMRTtcbiAgSGFtbWVyLlNUQVRFX0JFR0FOID0gU1RBVEVfQkVHQU47XG4gIEhhbW1lci5TVEFURV9DSEFOR0VEID0gU1RBVEVfQ0hBTkdFRDtcbiAgSGFtbWVyLlNUQVRFX0VOREVEID0gU1RBVEVfRU5ERUQ7XG4gIEhhbW1lci5TVEFURV9SRUNPR05JWkVEID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgSGFtbWVyLlNUQVRFX0NBTkNFTExFRCA9IFNUQVRFX0NBTkNFTExFRDtcbiAgSGFtbWVyLlNUQVRFX0ZBSUxFRCA9IFNUQVRFX0ZBSUxFRDtcbiAgSGFtbWVyLk1hbmFnZXIgPSBNYW5hZ2VyO1xuICBIYW1tZXIuSW5wdXQgPSBJbnB1dDtcbiAgSGFtbWVyLlRvdWNoQWN0aW9uID0gVG91Y2hBY3Rpb247XG4gIEhhbW1lci5Ub3VjaElucHV0ID0gVG91Y2hJbnB1dDtcbiAgSGFtbWVyLk1vdXNlSW5wdXQgPSBNb3VzZUlucHV0O1xuICBIYW1tZXIuUG9pbnRlckV2ZW50SW5wdXQgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgSGFtbWVyLlRvdWNoTW91c2VJbnB1dCA9IFRvdWNoTW91c2VJbnB1dDtcbiAgSGFtbWVyLlNpbmdsZVRvdWNoSW5wdXQgPSBTaW5nbGVUb3VjaElucHV0O1xuICBIYW1tZXIuUmVjb2duaXplciA9IFJlY29nbml6ZXI7XG4gIEhhbW1lci5BdHRyUmVjb2duaXplciA9IEF0dHJSZWNvZ25pemVyO1xuICBIYW1tZXIuVGFwID0gVGFwUmVjb2duaXplcjtcbiAgSGFtbWVyLlBhbiA9IFBhblJlY29nbml6ZXI7XG4gIEhhbW1lci5Td2lwZSA9IFN3aXBlUmVjb2duaXplcjtcbiAgSGFtbWVyLlBpbmNoID0gUGluY2hSZWNvZ25pemVyO1xuICBIYW1tZXIuUm90YXRlID0gUm90YXRlUmVjb2duaXplcjtcbiAgSGFtbWVyLlByZXNzID0gUHJlc3NSZWNvZ25pemVyO1xuICBIYW1tZXIub24gPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLm9mZiA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIuZWFjaCA9IGVhY2g7XG4gIEhhbW1lci5tZXJnZSA9IG1lcmdlO1xuICBIYW1tZXIuZXh0ZW5kID0gZXh0ZW5kO1xuICBIYW1tZXIuYmluZEZuID0gYmluZEZuO1xuICBIYW1tZXIuYXNzaWduID0gYXNzaWduJDE7XG4gIEhhbW1lci5pbmhlcml0ID0gaW5oZXJpdDtcbiAgSGFtbWVyLmJpbmRGbiA9IGJpbmRGbjtcbiAgSGFtbWVyLnByZWZpeGVkID0gcHJlZml4ZWQ7XG4gIEhhbW1lci50b0FycmF5ID0gdG9BcnJheTtcbiAgSGFtbWVyLmluQXJyYXkgPSBpbkFycmF5O1xuICBIYW1tZXIudW5pcXVlQXJyYXkgPSB1bmlxdWVBcnJheTtcbiAgSGFtbWVyLnNwbGl0U3RyID0gc3BsaXRTdHI7XG4gIEhhbW1lci5ib29sT3JGbiA9IGJvb2xPckZuO1xuICBIYW1tZXIuaGFzUGFyZW50ID0gaGFzUGFyZW50O1xuICBIYW1tZXIuYWRkRXZlbnRMaXN0ZW5lcnMgPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLnJlbW92ZUV2ZW50TGlzdGVuZXJzID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5kZWZhdWx0cyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywge1xuICAgIHByZXNldDogcHJlc2V0XG4gIH0pO1xuICByZXR1cm4gSGFtbWVyO1xufSgpO1xuXG4vLyAgc3R5bGUgbG9hZGVyIGJ1dCBieSBzY3JpcHQgdGFnLCBub3QgYnkgdGhlIGxvYWRlci5cblxudmFyIGRlZmF1bHRzJDEgPSBIYW1tZXIuZGVmYXVsdHM7XG5cbmV4cG9ydCBkZWZhdWx0IEhhbW1lcjtcbmV4cG9ydCB7IElOUFVUX1NUQVJULCBJTlBVVF9NT1ZFLCBJTlBVVF9FTkQsIElOUFVUX0NBTkNFTCwgU1RBVEVfUE9TU0lCTEUsIFNUQVRFX0JFR0FOLCBTVEFURV9DSEFOR0VELCBTVEFURV9FTkRFRCwgU1RBVEVfUkVDT0dOSVpFRCwgU1RBVEVfQ0FOQ0VMTEVELCBTVEFURV9GQUlMRUQsIERJUkVDVElPTl9OT05FLCBESVJFQ1RJT05fTEVGVCwgRElSRUNUSU9OX1JJR0hULCBESVJFQ1RJT05fVVAsIERJUkVDVElPTl9ET1dOLCBESVJFQ1RJT05fSE9SSVpPTlRBTCwgRElSRUNUSU9OX1ZFUlRJQ0FMLCBESVJFQ1RJT05fQUxMLCBNYW5hZ2VyLCBJbnB1dCwgVG91Y2hBY3Rpb24sIFRvdWNoSW5wdXQsIE1vdXNlSW5wdXQsIFBvaW50ZXJFdmVudElucHV0LCBUb3VjaE1vdXNlSW5wdXQsIFNpbmdsZVRvdWNoSW5wdXQsIFJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCBUYXBSZWNvZ25pemVyIGFzIFRhcCwgUGFuUmVjb2duaXplciBhcyBQYW4sIFN3aXBlUmVjb2duaXplciBhcyBTd2lwZSwgUGluY2hSZWNvZ25pemVyIGFzIFBpbmNoLCBSb3RhdGVSZWNvZ25pemVyIGFzIFJvdGF0ZSwgUHJlc3NSZWNvZ25pemVyIGFzIFByZXNzLCBhZGRFdmVudExpc3RlbmVycyBhcyBvbiwgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMgYXMgb2ZmLCBlYWNoLCBtZXJnZSwgZXh0ZW5kLCBhc3NpZ24kMSBhcyBhc3NpZ24sIGluaGVyaXQsIGJpbmRGbiwgcHJlZml4ZWQsIHRvQXJyYXksIGluQXJyYXksIHVuaXF1ZUFycmF5LCBzcGxpdFN0ciwgYm9vbE9yRm4sIGhhc1BhcmVudCwgYWRkRXZlbnRMaXN0ZW5lcnMsIHJlbW92ZUV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0cyQxIGFzIGRlZmF1bHRzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW1tZXIuZXNtLmpzLm1hcFxuIiwgIi8qKlxuICogdmlzLXV0aWxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqcy92aXMtdXRpbFxuICpcbiAqIHV0aWxpdGllIGNvbGxlY3Rpb24gZm9yIHZpc2pzXG4gKlxuICogQHZlcnNpb24gNS4wLjdcbiAqIEBkYXRlICAgIDIwMjMtMTEtMjBUMDk6MDY6NTEuMDY3WlxuICpcbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTEtMjAxNyBBbG1lbmRlIEIuViwgaHR0cDovL2FsbWVuZGUuY29tXG4gKiBAY29weXJpZ2h0IChjKSAyMDE3LTIwMTkgdmlzanMgY29udHJpYnV0b3JzLCBodHRwczovL2dpdGh1Yi5jb20vdmlzanNcbiAqXG4gKiBAbGljZW5zZVxuICogdmlzLmpzIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aFxuICpcbiAqICAgMS4gVGhlIEFwYWNoZSAyLjAgTGljZW5zZVxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgIGFuZFxuICpcbiAqICAgMi4gVGhlIE1JVCBMaWNlbnNlXG4gKiAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiB2aXMuanMgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGVpdGhlciBsaWNlbnNlLlxuICovXG5cbmltcG9ydCBFbWl0dGVyIGZyb20gJ2NvbXBvbmVudC1lbWl0dGVyJztcbmltcG9ydCBSZWFsSGFtbWVyIGZyb20gJ0BlZ2pzL2hhbW1lcmpzJztcblxuLyoqXHJcbiAqIFVzZSB0aGlzIHN5bWJvbCB0byBkZWxldGUgcHJvcGVyaWVzIGluIGRlZXBPYmplY3RBc3NpZ24uXHJcbiAqL1xyXG5jb25zdCBERUxFVEUgPSBTeW1ib2woXCJERUxFVEVcIik7XHJcbi8qKlxyXG4gKiBQdXJlIHZlcnNpb24gb2YgZGVlcE9iamVjdEFzc2lnbiwgaXQgZG9lc24ndCBtb2RpZnkgYW55IG9mIGl0J3MgYXJndW1lbnRzLlxyXG4gKlxyXG4gKiBAcGFyYW0gYmFzZSAtIFRoZSBiYXNlIG9iamVjdCB0aGF0IGZ1bGxmaWxzIHRoZSB3aG9sZSBpbnRlcmZhY2UgVC5cclxuICogQHBhcmFtIHVwZGF0ZXMgLSBVcGRhdGVzIHRoYXQgbWF5IGNoYW5nZSBvciBkZWxldGUgcHJvcHMuXHJcbiAqIEByZXR1cm5zIEEgYnJhbmQgbmV3IGluc3RhbmNlIHdpdGggYWxsIHRoZSBzdXBwbGllZCBvYmplY3RzIGRlZXBseSBtZXJnZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwdXJlRGVlcE9iamVjdEFzc2lnbihiYXNlLCAuLi51cGRhdGVzKSB7XHJcbiAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbih7fSwgYmFzZSwgLi4udXBkYXRlcyk7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgdmVyc2lvbiBvZiBvYmplY3QgYXNzaWduIHdpdGggYWRkaXRpb25hbCBkZWxldGluZyBieSB0aGUgREVMRVRFIHN5bWJvbC5cclxuICpcclxuICogQHBhcmFtIHZhbHVlcyAtIE9iamVjdHMgdG8gYmUgZGVlcGx5IG1lcmdlZC5cclxuICogQHJldHVybnMgVGhlIGZpcnN0IG9iamVjdCBmcm9tIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBPYmplY3RBc3NpZ24oLi4udmFsdWVzKSB7XHJcbiAgICBjb25zdCBtZXJnZWQgPSBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKTtcclxuICAgIHN0cmlwRGVsZXRlKG1lcmdlZCk7XHJcbiAgICByZXR1cm4gbWVyZ2VkO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIHZlcnNpb24gb2Ygb2JqZWN0IGFzc2lnbiB3aXRoIGFkZGl0aW9uYWwgZGVsZXRpbmcgYnkgdGhlIERFTEVURSBzeW1ib2wuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoaXMgZG9lc24ndCBzdHJpcCB0aGUgREVMRVRFIHN5bWJvbHMgc28gdGhleSBtYXkgZW5kIHVwIGluIHRoZSBmaW5hbCBvYmplY3QuXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBPYmplY3RzIHRvIGJlIGRlZXBseSBtZXJnZWQuXHJcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBvYmplY3QgZnJvbSB2YWx1ZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKSB7XHJcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KGRlZXBPYmplY3RBc3NpZ24odmFsdWVzWzBdLCB2YWx1ZXNbMV0pLCAuLi52YWx1ZXMuc2xpY2UoMikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYSA9IHZhbHVlc1swXTtcclxuICAgIGNvbnN0IGIgPSB2YWx1ZXNbMV07XHJcbiAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICBhLnNldFRpbWUoYi5nZXRUaW1lKCkpO1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIFJlZmxlY3Qub3duS2V5cyhiKSkge1xyXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGIsIHByb3ApKSA7XHJcbiAgICAgICAgZWxzZSBpZiAoYltwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIGJbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGJbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYVtwcm9wXSkgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeShhW3Byb3BdLCBiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBjbG9uZShiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRGVlcCBjbG9uZSBnaXZlbiBvYmplY3Qgb3IgYXJyYXkuIEluIGNhc2Ugb2YgcHJpbWl0aXZlIHNpbXBseSByZXR1cm4uXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gQW55dGhpbmcuXHJcbiAqIEByZXR1cm5zIERlZXAgY2xvbmVkIG9iamVjdC9hcnJheSBvciB1bmNoYW5nZWQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGNsb25lKGEpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XHJcbiAgICAgICAgcmV0dXJuIGEubWFwKCh2YWx1ZSkgPT4gY2xvbmUodmFsdWUpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBhID09PSBcIm9iamVjdFwiICYmIGEgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGEuZ2V0VGltZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSh7fSwgYSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogU3RyaXAgREVMRVRFIGZyb20gZ2l2ZW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIE9iamVjdCB3aGljaCBtYXkgY29udGFpbiBERUxFVEUgYnV0IHdvbid0IGFmdGVyIHRoaXMgaXMgZXhlY3V0ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBzdHJpcERlbGV0ZShhKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoYSkpIHtcclxuICAgICAgICBpZiAoYVtwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJiBhW3Byb3BdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHN0cmlwRGVsZXRlKGFbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG4vKipcclxuICogU2VlZGFibGUsIGZhc3QgYW5kIHJlYXNvbmFibHkgZ29vZCAobm90IGNyeXB0byBidXQgbW9yZSB0aGFuIG9rYXkgZm9yIG91clxyXG4gKiBuZWVkcykgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIEFkYXB0ZWQgZnJvbSB7QGxpbmsgaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTEwNDI5MTAwNzM2L2h0dHA6Ly9iYWFnb2UuY29tOjgwL2VuL1JhbmRvbU11c2luZ3MvamF2YXNjcmlwdH0uXHJcbiAqIE9yaWdpbmFsIGFsZ29yaXRobSBjcmVhdGVkIGJ5IEpvaGFubmVzIEJhYWfDuGUgXFw8YmFhZ29lXFxAYmFhZ29lLmNvbVxcPiBpbiAyMDEwLlxyXG4gKi9cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIGdlbmVyYXRvciBiYXNlZCBvbiBBbGVhIGJ5IEpvaGFubmVzIEJhYWfDuGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gQWxsIHN1cHBsaWVkIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWQgYXMgYSBzZWVkLiBJbiBjYXNlIG5vdGhpbmdcclxuICogaXMgc3VwcGxpZWQgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWQgdG8gc2VlZCB0aGUgZ2VuZXJhdG9yLlxyXG4gKiBAcmV0dXJucyBBIHJlYWR5IHRvIHVzZSBzZWVkZWQgZ2VuZXJhdG9yLlxyXG4gKi9cclxuZnVuY3Rpb24gQWxlYSguLi5zZWVkKSB7XHJcbiAgICByZXR1cm4gQWxlYUltcGxlbWVudGF0aW9uKHNlZWQubGVuZ3RoID8gc2VlZCA6IFtEYXRlLm5vdygpXSk7XHJcbn1cclxuLyoqXHJcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIFtbQWxlYV1dIHdpdGhvdXQgdXNlciBpbnB1dCB2YWxpZGF0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIFRoZSBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNlZWQgdGhlIGdlbmVyYXRvci5cclxuICogQHJldHVybnMgQSByZWFkeSB0byB1c2Ugc2VlZGVkIGdlbmVyYXRvci5cclxuICovXHJcbmZ1bmN0aW9uIEFsZWFJbXBsZW1lbnRhdGlvbihzZWVkKSB7XHJcbiAgICBsZXQgW3MwLCBzMSwgczJdID0gbWFzaFNlZWQoc2VlZCk7XHJcbiAgICBsZXQgYyA9IDE7XHJcbiAgICBjb25zdCByYW5kb20gPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdCA9IDIwOTE2MzkgKiBzMCArIGMgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxyXG4gICAgICAgIHMwID0gczE7XHJcbiAgICAgICAgczEgPSBzMjtcclxuICAgICAgICByZXR1cm4gKHMyID0gdCAtIChjID0gdCB8IDApKTtcclxuICAgIH07XHJcbiAgICByYW5kb20udWludDMyID0gKCkgPT4gcmFuZG9tKCkgKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgcmFuZG9tLmZyYWN0NTMgPSAoKSA9PiByYW5kb20oKSArICgocmFuZG9tKCkgKiAweDIwMDAwMCkgfCAwKSAqIDEuMTEwMjIzMDI0NjI1MTU2NWUtMTY7IC8vIDJeLTUzXHJcbiAgICByYW5kb20uYWxnb3JpdGhtID0gXCJBbGVhXCI7XHJcbiAgICByYW5kb20uc2VlZCA9IHNlZWQ7XHJcbiAgICByYW5kb20udmVyc2lvbiA9IFwiMC45XCI7XHJcbiAgICByZXR1cm4gcmFuZG9tO1xyXG59XHJcbi8qKlxyXG4gKiBUdXJuIGFyYml0cmFyeSBkYXRhIGludG8gdmFsdWVzIFtbQWxlYUltcGxlbWVudGF0aW9uXV0gY2FuIHVzZSB0byBnZW5lcmF0ZVxyXG4gKiByYW5kb20gbnVtYmVycy5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBBcmJpdHJhcnkgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgc2VlZC5cclxuICogQHJldHVybnMgVGhyZWUgbnVtYmVycyB0byB1c2UgYXMgaW5pdGlhbCB2YWx1ZXMgZm9yIFtbQWxlYUltcGxlbWVudGF0aW9uXV0uXHJcbiAqL1xyXG5mdW5jdGlvbiBtYXNoU2VlZCguLi5zZWVkKSB7XHJcbiAgICBjb25zdCBtYXNoID0gTWFzaCgpO1xyXG4gICAgbGV0IHMwID0gbWFzaChcIiBcIik7XHJcbiAgICBsZXQgczEgPSBtYXNoKFwiIFwiKTtcclxuICAgIGxldCBzMiA9IG1hc2goXCIgXCIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgczAgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczAgPCAwKSB7XHJcbiAgICAgICAgICAgIHMwICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMxIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMxIDwgMCkge1xyXG4gICAgICAgICAgICBzMSArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzMiAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMiA8IDApIHtcclxuICAgICAgICAgICAgczIgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW3MwLCBzMSwgczJdO1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWFzaCBmdW5jdGlvbi5cclxuICpcclxuICogQHJldHVybnMgQSBub25wdXJlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYXJiaXRyYXJ5IFtbTWFzaGFibGVdXSBkYXRhIGFuZCB0dXJuc1xyXG4gKiB0aGVtIGludG8gbnVtYmVycy5cclxuICovXHJcbmZ1bmN0aW9uIE1hc2goKSB7XHJcbiAgICBsZXQgbiA9IDB4ZWZjODI0OWQ7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICBjb25zdCBzdHJpbmcgPSBkYXRhLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbiArPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgbGV0IGggPSAwLjAyNTE5NjAzMjgyNDE2OTM4ICogbjtcclxuICAgICAgICAgICAgbiA9IGggPj4+IDA7XHJcbiAgICAgICAgICAgIGggLT0gbjtcclxuICAgICAgICAgICAgaCAqPSBuO1xyXG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcclxuICAgICAgICAgICAgaCAtPSBuO1xyXG4gICAgICAgICAgICBuICs9IGggKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcclxuICAgIH07XHJcbn1cblxuLyoqXG4gKiBTZXR1cCBhIG1vY2sgaGFtbWVyLmpzIG9iamVjdCwgZm9yIHVuaXQgdGVzdGluZy5cbiAqXG4gKiBJbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3ViZXIvZGVjay5nbC9wdWxsLzY1OFxuICpcbiAqIEByZXR1cm5zIHt7b246IG5vb3AsIG9mZjogbm9vcCwgZGVzdHJveTogbm9vcCwgZW1pdDogbm9vcCwgZ2V0OiBnZXR9fVxuICovXG5mdW5jdGlvbiBoYW1tZXJNb2NrKCkge1xuICBjb25zdCBub29wID0gKCkgPT4ge307XG5cbiAgcmV0dXJuIHtcbiAgICBvbjogbm9vcCxcbiAgICBvZmY6IG5vb3AsXG4gICAgZGVzdHJveTogbm9vcCxcbiAgICBlbWl0OiBub29wLFxuXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0OiBub29wLFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBIYW1tZXIkMSA9XG4gIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IHdpbmRvdy5IYW1tZXIgfHwgUmVhbEhhbW1lclxuICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBoYW1tZXIuanMgaXMgb25seSBhdmFpbGFibGUgaW4gYSBicm93c2VyLCBub3QgaW4gbm9kZS5qcy4gUmVwbGFjaW5nIGl0IHdpdGggYSBtb2NrIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIGhhbW1lck1vY2soKTtcbiAgICAgIH07XG5cbi8qKlxuICogVHVybiBhbiBlbGVtZW50IGludG8gYW4gY2xpY2tUb1VzZSBlbGVtZW50LlxuICogV2hlbiBub3QgYWN0aXZlLCB0aGUgZWxlbWVudCBoYXMgYSB0cmFuc3BhcmVudCBvdmVybGF5LiBXaGVuIHRoZSBvdmVybGF5IGlzXG4gKiBjbGlja2VkLCB0aGUgbW9kZSBpcyBjaGFuZ2VkIHRvIGFjdGl2ZS5cbiAqIFdoZW4gYWN0aXZlLCB0aGUgZWxlbWVudCBpcyBkaXNwbGF5ZWQgd2l0aCBhIGJsdWUgYm9yZGVyIGFyb3VuZCBpdCwgYW5kXG4gKiB0aGUgaW50ZXJhY3RpdmUgY29udGVudHMgb2YgdGhlIGVsZW1lbnQgY2FuIGJlIHVzZWQuIFdoZW4gY2xpY2tlZCBvdXRzaWRlXG4gKiB0aGUgZWxlbWVudCwgdGhlIGVsZW1lbnRzIG1vZGUgaXMgY2hhbmdlZCB0byBpbmFjdGl2ZS5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lclxuICogQGNsYXNzIEFjdGl2YXRvclxuICovXG5mdW5jdGlvbiBBY3RpdmF0b3IkMShjb250YWluZXIpIHtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlID0gW107XG5cbiAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcblxuICB0aGlzLl9kb20gPSB7XG4gICAgY29udGFpbmVyLFxuICAgIG92ZXJsYXk6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gIH07XG5cbiAgdGhpcy5fZG9tLm92ZXJsYXkuY2xhc3NMaXN0LmFkZChcInZpcy1vdmVybGF5XCIpO1xuXG4gIHRoaXMuX2RvbS5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZG9tLm92ZXJsYXkpO1xuICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgdGhpcy5fZG9tLm92ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIH0pO1xuXG4gIGNvbnN0IGhhbW1lciA9IEhhbW1lciQxKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgaGFtbWVyLm9uKFwidGFwXCIsIHRoaXMuX29uVGFwT3ZlcmxheS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgIGhhbW1lci5kZXN0cm95KCk7XG4gICAgLy8gRklYTUU6IGNsZWFuaW5nIHVwIGhhbW1lciBpbnN0YW5jZXMgZG9lc24ndCB3b3JrIChUaW1lbGluZSBub3QgcmVtb3ZlZFxuICAgIC8vIGZyb20gbWVtb3J5KVxuICB9KTtcblxuICAvLyBibG9jayBhbGwgdG91Y2ggZXZlbnRzIChleGNlcHQgdGFwKVxuICBjb25zdCBldmVudHMgPSBbXG4gICAgXCJ0YXBcIixcbiAgICBcImRvdWJsZXRhcFwiLFxuICAgIFwicHJlc3NcIixcbiAgICBcInBpbmNoXCIsXG4gICAgXCJwYW5cIixcbiAgICBcInBhbnN0YXJ0XCIsXG4gICAgXCJwYW5tb3ZlXCIsXG4gICAgXCJwYW5lbmRcIixcbiAgXTtcbiAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgaGFtbWVyLm9uKGV2ZW50LCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBhdHRhY2ggYSBjbGljayBldmVudCB0byB0aGUgd2luZG93LCBpbiBvcmRlciB0byBkZWFjdGl2YXRlIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSB0aGUgdGltZWxpbmVcbiAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LmJvZHkpIHtcbiAgICB0aGlzLl9vbkNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIV9oYXNQYXJlbnQoZXZlbnQudGFyZ2V0LCBjb250YWluZXIpKSB7XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBwcmVwYXJlIGVzY2FwZSBrZXkgbGlzdGVuZXIgZm9yIGRlYWN0aXZhdGluZyB3aGVuIGFjdGl2ZVxuICB0aGlzLl9lc2NMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIFwia2V5XCIgaW4gZXZlbnRcbiAgICAgICAgPyBldmVudC5rZXkgPT09IFwiRXNjYXBlXCJcbiAgICAgICAgOiBldmVudC5rZXlDb2RlID09PSAyNyAvKiB0aGUga2V5Q29kZSBpcyBmb3IgSUUxMSAqL1xuICAgICkge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgfVxuICB9O1xufVxuXG4vLyB0dXJuIGludG8gYW4gZXZlbnQgZW1pdHRlclxuRW1pdHRlcihBY3RpdmF0b3IkMS5wcm90b3R5cGUpO1xuXG4vLyBUaGUgY3VycmVudGx5IGFjdGl2ZSBhY3RpdmF0b3JcbkFjdGl2YXRvciQxLmN1cnJlbnQgPSBudWxsO1xuXG4vKipcbiAqIERlc3Ryb3kgdGhlIGFjdGl2YXRvci4gQ2xlYW5zIHVwIGFsbCBjcmVhdGVkIERPTSBhbmQgZXZlbnQgbGlzdGVuZXJzXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmRlYWN0aXZhdGUoKTtcblxuICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2NsZWFudXBRdWV1ZS5zcGxpY2UoMCkucmV2ZXJzZSgpKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBoaWRkZW4sIGVsZW1lbnQgaXMgZGVjb3JhdGVkIHdpdGggYSBibHVlIHNoYWRvdyBib3JkZXJcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICAvLyB3ZSBhbGxvdyBvbmx5IG9uZSBhY3RpdmUgYWN0aXZhdG9yIGF0IGEgdGltZVxuICBpZiAoQWN0aXZhdG9yJDEuY3VycmVudCkge1xuICAgIEFjdGl2YXRvciQxLmN1cnJlbnQuZGVhY3RpdmF0ZSgpO1xuICB9XG4gIEFjdGl2YXRvciQxLmN1cnJlbnQgPSB0aGlzO1xuXG4gIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgdGhpcy5fZG9tLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ2aXMtYWN0aXZlXCIpO1xuXG4gIHRoaXMuZW1pdChcImNoYW5nZVwiKTtcbiAgdGhpcy5lbWl0KFwiYWN0aXZhdGVcIik7XG5cbiAgLy8gdWdseSBoYWNrOiBiaW5kIEVTQyBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnRzLCBhcyB0aGUgTmV0d29yayByZWJpbmRzIGFsbFxuICAvLyBrZXlib2FyZCBldmVudHMgb24gYSAnY2hhbmdlJyBldmVudFxuICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBkaXNwbGF5ZWQgb24gdG9wIG9mIHRoZSBlbGVtZW50XG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB0aGlzLl9kb20ub3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJ2aXMtYWN0aXZlXCIpO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcblxuICB0aGlzLmVtaXQoXCJjaGFuZ2VcIik7XG4gIHRoaXMuZW1pdChcImRlYWN0aXZhdGVcIik7XG59O1xuXG4vKipcbiAqIEhhbmRsZSBhIHRhcCBldmVudDogYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLl9vblRhcE92ZXJsYXkgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICB0aGlzLmFjdGl2YXRlKCk7XG4gIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIHRoZSByZXF1ZXN0ZWQgcGFyZW50IGVsZW1lbnQgc29tZXdoZXJlIGluXG4gKiBpdHMgY2hhaW4gb2YgcGFyZW50IG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwYXJlbnQgaXMgZm91bmQgc29tZXdoZXJlIGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgIGNoYWluIG9mIHBhcmVudCBub2Rlcy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9oYXNQYXJlbnQoZWxlbWVudCwgcGFyZW50KSB7XG4gIHdoaWxlIChlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyB1dGlsaXR5IGZ1bmN0aW9uc1xyXG4vLyBwYXJzZSBBU1AuTmV0IERhdGUgcGF0dGVybixcclxuLy8gZm9yIGV4YW1wbGUgJy9EYXRlKDExOTg5MDg3MTcwNTYpLycgb3IgJy9EYXRlKDExOTg5MDg3MTcwNTYtMDcwMCkvJ1xyXG4vLyBjb2RlIGZyb20gaHR0cDovL21vbWVudGpzLmNvbS9cclxuY29uc3QgQVNQRGF0ZVJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2k7XHJcbi8vIENvbG9yIFJFc1xyXG5jb25zdCBmdWxsSGV4UkUgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pO1xyXG5jb25zdCBzaG9ydEhleFJFID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcclxuY29uc3QgcmdiUkUgPSAvXnJnYlxcKCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqXFwpJC9pO1xyXG5jb25zdCByZ2JhUkUgPSAvXnJnYmFcXCggKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKihbMDFdfDA/XFwuXFxkKykgKlxcKSQvaTtcclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBudW1iZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBudW1iZXIsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgZXZlcnl0aGluZyBpbiB0aGUgRE9NIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIERPTW9iamVjdCAtIE5vZGUgd2hvc2UgY2hpbGQgbm9kZXMgd2lsbCBiZSByZWN1cnNpdmVseSBkZWxldGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVjdXJzaXZlRE9NRGVsZXRlKERPTW9iamVjdCkge1xyXG4gICAgaWYgKERPTW9iamVjdCkge1xyXG4gICAgICAgIHdoaWxlIChET01vYmplY3QuaGFzQ2hpbGROb2RlcygpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gRE9Nb2JqZWN0LmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlRE9NRGVsZXRlKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIERPTW9iamVjdC5yZW1vdmVDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgb2JqZWN0IChub3QgcHJpbWl0aXZlIG9yIG51bGwpLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgbm90IG51bGwgb2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIERhdGUsIG9yIGEgU3RyaW5nIGNvbnRhaW5pbmcgYSBEYXRlLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgRGF0ZSBpbnN0YW5jZSBvciBzdHJpbmcgZGF0ZSByZXByZXNlbnRhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAvLyB0ZXN0IHdoZXRoZXIgdGhpcyBzdHJpbmcgY29udGFpbnMgYSBkYXRlXHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBBU1BEYXRlUmVnZXguZXhlYyh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG4vKipcclxuICogQ29weSBwcm9wZXJ0eSBmcm9tIGIgdG8gYSBpZiBwcm9wZXJ0eSBwcmVzZW50IGluIGEuXHJcbiAqIElmIHByb3BlcnR5IGluIGIgZXhwbGljaXRseSBzZXQgdG8gbnVsbCwgZGVsZXRlIGl0IGlmIGBhbGxvd0RlbGV0aW9uYCBzZXQuXHJcbiAqXHJcbiAqIEludGVybmFsIGhlbHBlciByb3V0aW5lLCBzaG91bGQgbm90IGJlIGV4cG9ydGVkLiBOb3QgYWRkZWQgdG8gYGV4cG9ydHNgIGZvciB0aGF0IHJlYXNvbi5cclxuICpcclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBwcm9wIC0gTmFtZSBvZiBwcm9wZXJ0eSB0byBjb3B5IGZyb20gYiB0byBhLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKSB7XHJcbiAgICBsZXQgZG9EZWxldGlvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUpIHtcclxuICAgICAgICBkb0RlbGV0aW9uID0gYltwcm9wXSA9PT0gbnVsbCAmJiBhW3Byb3BdICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoZG9EZWxldGlvbikge1xyXG4gICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF07IC8vIFJlbWVtYmVyLCB0aGlzIGlzIGEgcmVmZXJlbmNlIGNvcHkhXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEZpbGwgYW4gb2JqZWN0IHdpdGggYSBwb3NzaWJseSBwYXJ0aWFsbHkgZGVmaW5lZCBvdGhlciBvYmplY3QuXHJcbiAqXHJcbiAqIE9ubHkgY29waWVzIHZhbHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgYWxyZWFkeSBwcmVzZW50IGluIGEuXHJcbiAqIFRoYXQgbWVhbnMgYW4gb2JqZWN0IGlzIG5vdCBjcmVhdGVkIG9uIGEgcHJvcGVydHkgaWYgb25seSB0aGUgYiBvYmplY3QgaGFzIGl0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBvYmplY3QgdGhhdCB3aWxsIGhhdmUgaXQncyBwcm9wZXJ0aWVzIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSBiIC0gVGhlIG9iamVjdCB3aXRoIHByb3BlcnR5IHVwZGF0ZXMuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnRpZXMgaW4gYSB0aGF0IGFyZSBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqL1xyXG5mdW5jdGlvbiBmaWxsSWZEZWZpbmVkKGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gTk9URTogaXRlcmF0aW9uIG9mIHByb3BlcnRpZXMgb2YgYVxyXG4gICAgLy8gTk9URTogcHJvdG90eXBlIHByb3BlcnRpZXMgaXRlcmF0ZWQgb3ZlciBhcyB3ZWxsXHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYSkge1xyXG4gICAgICAgIGlmIChiW3Byb3BdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGJbcHJvcF0gPT09IG51bGwgfHwgdHlwZW9mIGJbcHJvcF0gIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIE5vdGU6IHR5cGVvZiBudWxsID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYVByb3AgPSBhW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYlByb3AgPSBiW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGFQcm9wKSAmJiBpc09iamVjdChiUHJvcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsSWZEZWZpbmVkKGFQcm9wLCBiUHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhXHJcbiAqIHRhcmdldCBvYmplY3QuIFJldHVybnMgdGhlIHRhcmdldCBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBjb3B5IHRvLlxyXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXHJcbiAqIEByZXR1cm5zIFRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gKi9cclxuY29uc3QgZXh0ZW5kID0gT2JqZWN0LmFzc2lnbjtcclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIgb3IgYSBzZXJpZXMgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHJlbWFya3NcclxuICogT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZCB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICogQHBhcmFtIHByb3BzIC0gUHJvcGVydGllcyB0byBiZSBjb3BpZWQgdG8gYS5cclxuICogQHBhcmFtIGEgLSBUaGUgdGFyZ2V0LlxyXG4gKiBAcGFyYW0gb3RoZXJzIC0gVGhlIHNvdXJjZXMuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVFeHRlbmQocHJvcHMsIGEsIC4uLm90aGVycykge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFycmF5IHdpdGggcHJvcGVydHkgbmFtZXMgZXhwZWN0ZWQgYXMgZmlyc3QgYXJndW1lbnRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG90aGVyIG9mIG90aGVycykge1xyXG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW3BdO1xyXG4gICAgICAgICAgICBpZiAob3RoZXIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBwcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IG90aGVyW3Byb3BdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWQgdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyByb3V0aW5lIGltcGxpZWQgdGhhdCBtdWx0aXBsZSBzb3VyY2Ugb2JqZWN0cyBjb3VsZFxyXG4gKiBiZSB1c2VkOyBob3dldmVyLCB0aGUgaW1wbGVtZW50YXRpb24gd2FzICoqd3JvbmcqKi4gU2luY2UgbXVsdGlwbGUgKFxcPjEpXHJcbiAqIHNvdXJjZXMgd2VyZW4ndCB1c2VkIGFueXdoZXJlIGluIHRoZSBgdmlzLmpzYCBjb2RlLCB0aGlzIGhhcyBiZWVuIHJlbW92ZWRcclxuICogQHBhcmFtIHByb3BzIC0gTmFtZXMgb2YgZmlyc3QtbGV2ZWwgcHJvcGVydGllcyB0byBjb3B5IG92ZXIuXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZURlZXBFeHRlbmQocHJvcHMsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbcF07XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSkge1xyXG4gICAgICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBmYWxzZSwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYGFgIHdpdGggcHJvcGVydGllcyBvZiBvYmplY3QgYGJgLCBpZ25vcmluZyBwcm9wZXJ0aWVzIHdoaWNoXHJcbiAqIGFyZSBleHBsaWNpdGx5IHNwZWNpZmllZCB0byBiZSBleGNsdWRlZC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhlIHByb3BlcnRpZXMgb2YgYGJgIGFyZSBjb25zaWRlcmVkIGZvciBjb3B5aW5nLiBQcm9wZXJ0aWVzIHdoaWNoIGFyZVxyXG4gKiB0aGVtc2VsdmVzIG9iamVjdHMgYXJlIGFyZSBhbHNvIGV4dGVuZGVkLiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkXHJcbiAqIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKiBAcGFyYW0gcHJvcHNUb0V4Y2x1ZGUgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHdoaWNoIHNob3VsZCAqbm90KiBiZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBhIC0gT2JqZWN0IHRvIGV4dGVuZC5cclxuICogQHBhcmFtIGIgLSBPYmplY3QgdG8gdGFrZSBwcm9wZXJ0aWVzIGZyb20gZm9yIGV4dGVuc2lvbi5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydGllcyBpbiBhIHRoYXQgYXJlIGV4cGxpY2l0bHlcclxuICogc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQocHJvcHNUb0V4Y2x1ZGUsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICAvLyBOT1RFOiBhcnJheSBwcm9wZXJ0aWVzIGhhdmUgYW4gZWxzZS1iZWxvdzsgYXBwYXJlbnRseSwgdGhlcmUgaXMgYSBwcm9ibGVtIGhlcmUuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBiKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSAvLyBIYW5kbGUgbG9jYWwgcHJvcGVydGllcyBvbmx5XHJcbiAgICAgICAgaWYgKHByb3BzVG9FeGNsdWRlLmluY2x1ZGVzKHByb3ApKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH0gLy8gSW4gZXhjbHVzaW9uIGxpc3QsIHNraXBcclxuICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYltwcm9wXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXS5wdXNoKGJbcHJvcF1baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgZXh0ZW5kIGFuIG9iamVjdCBhIHdpdGggdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gcHJvdG9FeHRlbmQgLSBJZiB0cnVlLCB0aGUgcHJvdG90eXBlIHZhbHVlcyB3aWxsIGFsc28gYmUgZXh0ZW5kZWQuXHJcbiAqIChUaGF0IGlzIHRoZSBvcHRpb25zIG9iamVjdHMgdGhhdCBpbmhlcml0IGZyb20gb3RoZXJzIHdpbGwgYWxzbyBnZXQgdGhlXHJcbiAqIGluaGVyaXRlZCBvcHRpb25zKS5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCB0aGUgdmFsdWVzIG9mIGZpZWxkcyB0aGF0IGFyZSBudWxsIHdpbGwgYmUgZGVsZXRlZC5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBFeHRlbmQoYSwgYiwgcHJvdG9FeHRlbmQgPSBmYWxzZSwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYikge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkgfHwgcHJvdG9FeHRlbmQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICAgICBiW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYltwcm9wXSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0gZGVlcEV4dGVuZCh7fSwgYltwcm9wXSwgcHJvdG9FeHRlbmQpOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFbcHJvcF0pID09PSBPYmplY3QucHJvdG90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBwcm90b0V4dGVuZCk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF0uc2xpY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgYWxsIGVsZW1lbnRzIGluIHR3byBhcnJheXMgYXJlIGVxdWFsLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIEZpcnN0IGFycmF5LlxyXG4gKiBAcGFyYW0gYiAtIFNlY29uZCBhcnJheS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBib3RoIGFycmF5cyBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2FtZSBlbGVtZW50cyAoMSA9ICcxJykuXHJcbiAqL1xyXG5mdW5jdGlvbiBlcXVhbEFycmF5KGEsIGIpIHtcclxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBHZXQgdGhlIHR5cGUgb2YgYW4gb2JqZWN0LCBmb3IgZXhhbXBsZSBleHBvcnRzLmdldFR5cGUoW10pIHJldHVybnMgJ0FycmF5Jy5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgRGV0ZWN0ZWQgdHlwZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFR5cGUob2JqZWN0KSB7XHJcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcclxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJTdHJpbmdcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJBcnJheVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJEYXRlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIk9iamVjdFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiU3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZTtcclxufVxyXG4vKipcclxuICogVXNlZCB0byBleHRlbmQgYW4gYXJyYXkgYW5kIGNvcHkgaXQuIFRoaXMgaXMgdXNlZCB0byBwcm9wYWdhdGUgcGF0aHMgcmVjdXJzaXZlbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcnIgLSBGaXJzdCBwYXJ0LlxyXG4gKiBAcGFyYW0gbmV3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgYWFkZGVkIGludG8gdGhlIGFycmF5LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBhcnJheSB3aXRoIGFsbCBpdGVtcyBmcm9tIGFyciBhbmQgbmV3VmFsdWUgKHdoaWNoIGlzIGxhc3QpLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weUFuZEV4dGVuZEFycmF5KGFyciwgbmV3VmFsdWUpIHtcclxuICAgIHJldHVybiBbLi4uYXJyLCBuZXdWYWx1ZV07XHJcbn1cclxuLyoqXHJcbiAqIFVzZWQgdG8gZXh0ZW5kIGFuIGFycmF5IGFuZCBjb3B5IGl0LiBUaGlzIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHBhdGhzIHJlY3Vyc2l2ZWx5LlxyXG4gKlxyXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIGJlIGNvcGllZC5cclxuICogQHJldHVybnMgU2hhbGxvdyBjb3B5IG9mIGFyci5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlBcnJheShhcnIpIHtcclxuICAgIHJldHVybiBhcnIuc2xpY2UoKTtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIGxlZnQgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIGxlZnQgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZUxlZnQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIHJpZ2h0IHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSByaWdodCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlUmlnaHQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSB0b3AgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHRvcCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlVG9wKGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxufVxyXG4vKipcclxuICogQWRkIGEgY2xhc3NOYW1lIHRvIHRoZSBnaXZlbiBlbGVtZW50cyBzdHlsZS5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIGFkZGVkLlxyXG4gKiBAcGFyYW0gY2xhc3NOYW1lcyAtIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lcykge1xyXG4gICAgbGV0IGNsYXNzZXMgPSBlbGVtLmNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBuZXdDbGFzc2VzID0gY2xhc3NOYW1lcy5zcGxpdChcIiBcIik7XHJcbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5jb25jYXQobmV3Q2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhY2xhc3Nlcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xyXG4gICAgfSkpO1xyXG4gICAgZWxlbS5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oXCIgXCIpO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgYSBjbGFzc05hbWUgZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudHMgc3R5bGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjbGFzc05hbWVzIC0gU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNsYXNzTmFtZShlbGVtLCBjbGFzc05hbWVzKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9IGVsZW0uY2xhc3NOYW1lLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IG9sZENsYXNzZXMgPSBjbGFzc05hbWVzLnNwbGl0KFwiIFwiKTtcclxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICFvbGRDbGFzc2VzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XHJcbiAgICB9KTtcclxuICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcclxufVxyXG4vKipcclxuICogRm9yIGVhY2ggbWV0aG9kIGZvciBib3RoIGFycmF5cyBhbmQgb2JqZWN0cy5cclxuICogSW4gY2FzZSBvZiBhbiBhcnJheSwgdGhlIGJ1aWx0LWluIEFycmF5LmZvckVhY2goKSBpcyBhcHBsaWVkICgqKk5vLCBpdCdzIG5vdCEqKikuXHJcbiAqIEluIGNhc2Ugb2YgYW4gT2JqZWN0LCB0aGUgbWV0aG9kIGxvb3BzIG92ZXIgYWxsIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIEFuIE9iamVjdCBvciBBcnJheSB0byBiZSBpdGVyYXRlZCBvdmVyLlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBBcnJheS5mb3JFYWNoLWxpa2UgY2FsbGJhY2suXHJcbiAqL1xyXG5mdW5jdGlvbiBmb3JFYWNoKG9iamVjdCwgY2FsbGJhY2spIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcclxuICAgICAgICAvLyBhcnJheVxyXG4gICAgICAgIGNvbnN0IGxlbiA9IG9iamVjdC5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhvYmplY3RbaV0sIGksIG9iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gb2JqZWN0XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGFuIGFycmF5OiBhbGwgb2JqZWN0cyBwcm9wZXJ0aWVzIGFyZSBwdXQgaW50byB0aGUgYXJyYXkuIFRoZSByZXN1bHRpbmcgYXJyYXkgaXMgdW5vcmRlcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbyAtIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxyXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bm9yZGVyZWQgdmFsdWVzLlxyXG4gKi9cclxuY29uc3QgdG9BcnJheSA9IE9iamVjdC52YWx1ZXM7XHJcbi8qKlxyXG4gKiBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IHdpbGwgYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIGtleSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUgdG8gYmUgYXNzaWduZWQuXHJcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIHdhcyB1cGRhdGVkICh0cnVlKSBvciBhbHJlYWR5IHN0cmljdGx5IHRoZSBzYW1lIGluIHRoZSBvcmlnaW5hbCBvYmplY3QgKGZhbHNlKS5cclxuICovXHJcbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5KG9iamVjdCwga2V5LCB2YWx1ZSkge1xyXG4gICAgaWYgKG9iamVjdFtrZXldICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRocm90dGxlIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBiZSBvbmx5IGV4ZWN1dGVkIG9uY2UgcGVyIGFuaW1hdGlvbiBmcmFtZS5cclxuICpcclxuICogQHBhcmFtIGZuIC0gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxyXG4gKiBAcmV0dXJucyBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uLlxyXG4gKi9cclxuZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcclxuICAgIGxldCBzY2hlZHVsZWQgPSBmYWxzZTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzY2hlZHVsZWQpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm4oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ2FuY2VscyB0aGUgZXZlbnQncyBkZWZhdWx0IGFjdGlvbiBpZiBpdCBpcyBjYW5jZWxhYmxlLCB3aXRob3V0IHN0b3BwaW5nIGZ1cnRoZXIgcHJvcGFnYXRpb24gb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgd2hvc2UgZGVmYXVsdCBhY3Rpb24gc2hvdWxkIGJlIHByZXZlbnRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7XHJcbiAgICB9XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIG5vbi1JRSBicm93c2Vyc1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEdldCBIVE1MIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudC5cclxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgb3IgbnVsbCBpZiBub3Qgb2J0YWluYWJsZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFRhcmdldChldmVudCA9IHdpbmRvdy5ldmVudCkge1xyXG4gICAgLy8gY29kZSBmcm9tIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxyXG4gICAgLy8gQFRPRE86IEV2ZW50VGFyZ2V0IGNhbiBiZSBhbG1vc3QgYW55dGhpbmcsIGlzIGl0IG9rYXkgdG8gcmV0dXJuIG9ubHkgRWxlbWVudHM/XHJcbiAgICBsZXQgdGFyZ2V0ID0gbnVsbDtcclxuICAgIGlmICghZXZlbnQpIDtcclxuICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LnNyY0VsZW1lbnQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC5zcmNFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQubm9kZVR5cGUgIT0gbnVsbCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykge1xyXG4gICAgICAgIC8vIGRlZmVhdCBTYWZhcmkgYnVnXHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG4vKipcclxuICogQ2hlY2sgaWYgZ2l2ZW4gZWxlbWVudCBjb250YWlucyBnaXZlbiBwYXJlbnQgc29tZXdoZXJlIGluIHRoZSBET00gdHJlZS5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiZSB0ZXN0ZWQuXHJcbiAqIEBwYXJhbSBwYXJlbnQgLSBUaGUgYW5jZXN0b3IgKG5vdCBuZWNlc3NhcmlseSBwYXJlbnQpIG9mIHRoZSBlbGVtZW50LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHBhcmVudCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgZWxlbWVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xyXG4gICAgbGV0IGVsZW0gPSBlbGVtZW50O1xyXG4gICAgd2hpbGUgKGVsZW0pIHtcclxuICAgICAgICBpZiAoZWxlbSA9PT0gcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgZWxlbSA9IGVsZW0ucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9ib29sZWFuLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nIGJvb2xlYW4gdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzQm9vbGVhbih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgbnVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvbnVtYmVyLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nICoqYm94ZWQqKiBudW1iZXIgdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzTnVtYmVyKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIHN0cmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3N0cmluZywgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogc3RyaW5nIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1N0cmluZyh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvc2l6ZSwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUgKG51bWJlciArICdweCcpLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1NpemUodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBET00gRWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50byBET00gRWxlbWVudCwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIERPTSBFbGVtZW50LCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0VsZW1lbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxufTtcclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MjM4MzgvcmdiLXRvLWhleC1hbmQtaGV4LXRvLXJnYn1cclxuICogQHBhcmFtIGhleCAtIEhleCBjb2xvciBzdHJpbmcgKDMgb3IgNiBkaWdpdHMsIHdpdGggb3Igd2l0aG91dCAjKS5cclxuICogQHJldHVybnMgUkdCIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvUkdCKGhleCkge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIHN3aXRjaCAoaGV4Lmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHNob3J0SGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0gKyByZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0gKyByZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10gKyByZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBmdWxsSGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBzdHJpbmcgY29sb3IgaW4gaGV4IG9yIFJHQiBmb3JtYXQgYW5kIGFkZHMgdGhlIG9wYWNpdHksIFJHQkEgaXMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLlxyXG4gKlxyXG4gKiBAcGFyYW0gY29sb3IgLSBUaGUgY29sb3Igc3RyaW5nIChoZXgsIFJHQiwgUkdCQSkuXHJcbiAqIEBwYXJhbSBvcGFjaXR5IC0gVGhlIG5ldyBvcGFjaXR5LlxyXG4gKiBAcmV0dXJucyBSR0JBIHN0cmluZywgZm9yIGV4YW1wbGUgJ3JnYmEoMjU1LCAwLCAxMjcsIDAuMyknLlxyXG4gKi9cclxuZnVuY3Rpb24gb3ZlcnJpZGVPcGFjaXR5KGNvbG9yLCBvcGFjaXR5KSB7XHJcbiAgICBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JhXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JcIikpIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBjb2xvclxyXG4gICAgICAgICAgICAuc3Vic3RyKGNvbG9yLmluZGV4T2YoXCIoXCIpICsgMSlcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgICAgIC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYlswXSArIFwiLFwiICsgcmdiWzFdICsgXCIsXCIgKyByZ2JbMl0gKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJnYiA9IGhleFRvUkdCKGNvbG9yKTtcclxuICAgICAgICBpZiAocmdiID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYi5yICsgXCIsXCIgKyByZ2IuZyArIFwiLFwiICsgcmdiLmIgKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcgKGZvciBleGFtcGxlOiAnIzBhY2RjMCcpLlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IZXgocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmV0dXJuIChcIiNcIiArICgoMSA8PCAyNCkgKyAocmVkIDw8IDE2KSArIChncmVlbiA8PCA4KSArIGJsdWUpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XHJcbn1cclxuLyoqXHJcbiAqIFBhcnNlIGEgY29sb3IgcHJvcGVydHkgaW50byBhbiBvYmplY3Qgd2l0aCBib3JkZXIsIGJhY2tncm91bmQsIGFuZCBoaWdobGlnaHQgY29sb3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5wdXRDb2xvciAtIFNob3J0aGFuZCBjb2xvciBzdHJpbmcgb3IgaW5wdXQgY29sb3Igb2JqZWN0LlxyXG4gKiBAcGFyYW0gZGVmYXVsdENvbG9yIC0gRnVsbCBjb2xvciBvYmplY3QgdG8gZmlsbCBpbiBtaXNzaW5nIHZhbHVlcyBpbiBpbnB1dENvbG9yLlxyXG4gKiBAcmV0dXJucyBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0Q29sb3IsIGRlZmF1bHRDb2xvcikge1xyXG4gICAgaWYgKGlzU3RyaW5nKGlucHV0Q29sb3IpKSB7XHJcbiAgICAgICAgbGV0IGNvbG9yU3RyID0gaW5wdXRDb2xvcjtcclxuICAgICAgICBpZiAoaXNWYWxpZFJHQihjb2xvclN0cikpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiID0gY29sb3JTdHJcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoNClcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3JTdHIubGVuZ3RoIC0gNSlcclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIixcIilcclxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29sb3JTdHIgPSBSR0JUb0hleChyZ2JbMF0sIHJnYlsxXSwgcmdiWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVmFsaWRIZXgoY29sb3JTdHIpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzdiA9IGhleFRvSFNWKGNvbG9yU3RyKTtcclxuICAgICAgICAgICAgY29uc3QgbGlnaHRlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBoc3YucyAqIDAuOCxcclxuICAgICAgICAgICAgICAgIHY6IE1hdGgubWluKDEsIGhzdi52ICogMS4wMiksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBNYXRoLm1pbigxLCBoc3YucyAqIDEuMjUpLFxyXG4gICAgICAgICAgICAgICAgdjogaHN2LnYgKiAwLjgsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySGV4ID0gSFNWVG9IZXgoZGFya2VyQ29sb3JIU1YuaCwgZGFya2VyQ29sb3JIU1YucywgZGFya2VyQ29sb3JIU1Yudik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhleCA9IEhTVlRvSGV4KGxpZ2h0ZXJDb2xvckhTVi5oLCBsaWdodGVyQ29sb3JIU1YucywgbGlnaHRlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBob3Zlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChkZWZhdWx0Q29sb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgZGVmYXVsdENvbG9yLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IGRlZmF1bHRDb2xvci5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5ob3ZlciAmJiBpbnB1dENvbG9yLmhvdmVyLmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuYmFja2dyb3VuZCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogaXNTdHJpbmcoaW5wdXRDb2xvci5oaWdobGlnaHQpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcikgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBSR0IgXFw8MCwgMjU1XFw+IGludG8gSFNWIG9iamVjdC5cclxuICpcclxuICogQHJlbWFya3NcclxuICoge0BsaW5rIGh0dHA6Ly93d3cuamF2YXNjcmlwdGVyLm5ldC9mYXEvcmdiMmhzdi5odG19XHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhTViBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBSR0JUb0hTVihyZWQsIGdyZWVuLCBibHVlKSB7XHJcbiAgICByZWQgPSByZWQgLyAyNTU7XHJcbiAgICBncmVlbiA9IGdyZWVuIC8gMjU1O1xyXG4gICAgYmx1ZSA9IGJsdWUgLyAyNTU7XHJcbiAgICBjb25zdCBtaW5SR0IgPSBNYXRoLm1pbihyZWQsIE1hdGgubWluKGdyZWVuLCBibHVlKSk7XHJcbiAgICBjb25zdCBtYXhSR0IgPSBNYXRoLm1heChyZWQsIE1hdGgubWF4KGdyZWVuLCBibHVlKSk7XHJcbiAgICAvLyBCbGFjay1ncmF5LXdoaXRlXHJcbiAgICBpZiAobWluUkdCID09PSBtYXhSR0IpIHtcclxuICAgICAgICByZXR1cm4geyBoOiAwLCBzOiAwLCB2OiBtaW5SR0IgfTtcclxuICAgIH1cclxuICAgIC8vIENvbG9ycyBvdGhlciB0aGFuIGJsYWNrLWdyYXktd2hpdGU6XHJcbiAgICBjb25zdCBkID0gcmVkID09PSBtaW5SR0IgPyBncmVlbiAtIGJsdWUgOiBibHVlID09PSBtaW5SR0IgPyByZWQgLSBncmVlbiA6IGJsdWUgLSByZWQ7XHJcbiAgICBjb25zdCBoID0gcmVkID09PSBtaW5SR0IgPyAzIDogYmx1ZSA9PT0gbWluUkdCID8gMSA6IDU7XHJcbiAgICBjb25zdCBodWUgPSAoNjAgKiAoaCAtIGQgLyAobWF4UkdCIC0gbWluUkdCKSkpIC8gMzYwO1xyXG4gICAgY29uc3Qgc2F0dXJhdGlvbiA9IChtYXhSR0IgLSBtaW5SR0IpIC8gbWF4UkdCO1xyXG4gICAgY29uc3QgdmFsdWUgPSBtYXhSR0I7XHJcbiAgICByZXR1cm4geyBoOiBodWUsIHM6IHNhdHVyYXRpb24sIHY6IHZhbHVlIH07XHJcbn1cclxuLyoqXHJcbiAqIFNwbGl0IGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBpbnRvIGFuIG9iamVjdCB3aXRoIGtleS92YWx1ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gQ1NTIHNvdXJjZSBjb2RlIHRvIHNwbGl0IGludG8ga2V5L3ZhbHVlIG9iamVjdC5cclxuICogQHJldHVybnMgS2V5L3ZhbHVlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHtAbGluayBjc3NUZXh0fS5cclxuICovXHJcbmZ1bmN0aW9uIHNwbGl0Q1NTVGV4dChjc3NUZXh0KSB7XHJcbiAgICBjb25zdCB0bXBFbGxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBjb25zdCBzdHlsZXMgPSB7fTtcclxuICAgIHRtcEVsbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bXBFbGxlbWVudC5zdHlsZS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIHN0eWxlc1t0bXBFbGxlbWVudC5zdHlsZVtpXV0gPSB0bXBFbGxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRtcEVsbGVtZW50LnN0eWxlW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZXM7XHJcbn1cclxuLyoqXHJcbiAqIEFwcGVuZCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgdG8gYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0aGF0IHdpbGwgcmVjZWl2ZSBuZXcgc3R5bGVzLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgYXBwZW5kZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDc3NUZXh0KGVsZW1lbnQsIGNzc1RleHQpIHtcclxuICAgIGNvbnN0IGNzc1N0eWxlID0gc3BsaXRDU1NUZXh0KGNzc1RleHQpO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3NzU3R5bGUpKSB7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCBzdHlsZXMgc2hvdWxkIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gVGhlIHN0eWxlcyB0byBiZSByZW1vdmVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tamlqYWNrc29uLzUzMTEyNTZ9XHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb1JHQihoLCBzLCB2KSB7XHJcbiAgICBsZXQgcjtcclxuICAgIGxldCBnO1xyXG4gICAgbGV0IGI7XHJcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihoICogNik7XHJcbiAgICBjb25zdCBmID0gaCAqIDYgLSBpO1xyXG4gICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xyXG4gICAgY29uc3QgcSA9IHYgKiAoMSAtIGYgKiBzKTtcclxuICAgIGNvbnN0IHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyk7XHJcbiAgICBzd2l0Y2ggKGkgJSA2KSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAociA9IHYpLCAoZyA9IHQpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIChyID0gcSksIChnID0gdiksIChiID0gcCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSB2KSwgKGIgPSB0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAociA9IHApLCAoZyA9IHEpLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIChyID0gdCksIChnID0gcCksIChiID0gdik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSBwKSwgKGIgPSBxKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHI6IE1hdGguZmxvb3IociAqIDI1NSksXHJcbiAgICAgICAgZzogTWF0aC5mbG9vcihnICogMjU1KSxcclxuICAgICAgICBiOiBNYXRoLmZsb29yKGIgKiAyNTUpLFxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb0hleChoLCBzLCB2KSB7XHJcbiAgICBjb25zdCByZ2IgPSBIU1ZUb1JHQihoLCBzLCB2KTtcclxuICAgIHJldHVybiBSR0JUb0hleChyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBoZXggY29sb3Igc3RyaW5nIGludG8gSFNWIFxcPDAsIDFcXD4uXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gaGV4VG9IU1YoaGV4KSB7XHJcbiAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihoZXgpO1xyXG4gICAgaWYgKCFyZ2IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHtoZXh9JyBpcyBub3QgYSB2YWxpZCBjb2xvci5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSR0JUb0hTVihyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgaGV4IGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIGhleCAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkSGV4KGhleCkge1xyXG4gICAgY29uc3QgaXNPayA9IC8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KGhleCk7XHJcbiAgICByZXR1cm4gaXNPaztcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCIGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHJnYiAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCKHJnYikge1xyXG4gICAgcmV0dXJuIHJnYlJFLnRlc3QocmdiKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCQSBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2JhIC0gVW5rbm93biBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiBhIGNvbG9yLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzVmFsaWRSR0JBKHJnYmEpIHtcclxuICAgIHJldHVybiByZ2JhUkUudGVzdChyZ2JhKTtcclxufVxyXG4vKipcclxuICogVGhpcyByZWN1cnNpdmVseSByZWRpcmVjdHMgdGhlIHByb3RvdHlwZSBvZiBKU09OIG9iamVjdHMgdG8gdGhlIHJlZmVyZW5jZU9iamVjdC5cclxuICogVGhpcyBpcyB1c2VkIGZvciBkZWZhdWx0IG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWVsZHMgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHRvIGJlIGJyaWRnZWQuXHJcbiAqIEBwYXJhbSByZWZlcmVuY2VPYmplY3QgLSBUaGUgb3JpZ2luYWwgb2JqZWN0LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVCcmlkZ2VPYmplY3QoZmllbGRzLCByZWZlcmVuY2VPYmplY3QpIHtcclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIHJlZmVyZW5jZU9iamVjdCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIC8vICEhISB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICBjb25zdCBvYmplY3RUbyA9IE9iamVjdC5jcmVhdGUocmVmZXJlbmNlT2JqZWN0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZmVyZW5jZU9iamVjdCwgZmllbGRzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0VG9bZmllbGRzW2ldXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFRvO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgVGhlIEVsZW1lbnQgaWYgdGhlIHJlZmVyZW5jZU9iamVjdCBpcyBhbiBFbGVtZW50LCBvciBhIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiByZWZlcmVuY2VPYmplY3QgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KSB7XHJcbiAgICAgICAgLy8gQXZvaWQgYnJpZGdpbmcgRE9NIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlT2JqZWN0O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGkpKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ldID09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFRvW2ldID0gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0VG87XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgc3RhYmxlIHNvcnQgaW1wbGVtZW50YXRpb24sIHZlcnkgZmFzdCBmb3IgcHJlc29ydGVkIGRhdGEuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIGFycmF5IHRvIGJlIHNvcnRlZCAoaW4tcGxhY2UpLlxyXG4gKiBAcGFyYW0gY29tcGFyZSAtIEFuIG9yZGVyIGNvbXBhcmF0b3IuXHJcbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gaW5zZXJ0U29ydChhLCBjb21wYXJlKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBrID0gYVtpXTtcclxuICAgICAgICBsZXQgajtcclxuICAgICAgICBmb3IgKGogPSBpOyBqID4gMCAmJiBjb21wYXJlKGssIGFbaiAtIDFdKSA8IDA7IGotLSkge1xyXG4gICAgICAgICAgICBhW2pdID0gYVtqIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFbal0gPSBrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIG9wdGlvbnMgb2Ygc3Vib2JqZWN0cyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXHJcbiAqXHJcbiAqIEEgcmVxdWlyZW1lbnQgb2YgdGhlc2Ugc3Vib2JqZWN0cyBpcyB0aGF0IHRoZXkgaGF2ZSBhbiAnZW5hYmxlZCcgZWxlbWVudFxyXG4gKiB3aGljaCBpcyBvcHRpb25hbCBmb3IgdGhlIHVzZXIgYnV0IG1hbmRhdG9yeSBmb3IgdGhlIHByb2dyYW0uXHJcbiAqXHJcbiAqIFRoZSBhZGRlZCB2YWx1ZSBoZXJlIG9mIHRoZSBtZXJnZSBpcyB0aGF0IG9wdGlvbiAnZW5hYmxlZCcgaXMgc2V0IGFzIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWVyZ2VUYXJnZXQgLSBFaXRoZXIgdGhpcy5vcHRpb25zIG9yIHRoZSBvcHRpb25zIHVzZWQgZm9yIHRoZSBncm91cHMuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICogQHBhcmFtIG9wdGlvbiAtIE9wdGlvbiBrZXkgaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQuXHJcbiAqIEBwYXJhbSBnbG9iYWxPcHRpb25zIC0gR2xvYmFsIG9wdGlvbnMsIHBhc3NlZCBpbiB0byBkZXRlcm1pbmUgdmFsdWUgb2Ygb3B0aW9uICdlbmFibGVkJy5cclxuICovXHJcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhtZXJnZVRhcmdldCwgb3B0aW9ucywgb3B0aW9uLCBnbG9iYWxPcHRpb25zID0ge30pIHtcclxuICAgIC8vIExvY2FsIGhlbHBlcnNcclxuICAgIGNvbnN0IGlzUHJlc2VudCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIG9iaiAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIjtcclxuICAgIH07XHJcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzQ0OTEyODcvMTIyMzUzMVxyXG4gICAgY29uc3QgaXNFbXB0eSA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHggaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCB4KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8vIEd1YXJkc1xyXG4gICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgbWVyZ2VUYXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzUHJlc2VudChvcHRpb24pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbiBtdXN0IGhhdmUgYSB2YWx1ZVwiKTtcclxuICAgIH1cclxuICAgIGlmICghaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgZ2xvYmFsT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdFwiKTtcclxuICAgIH1cclxuICAgIC8vXHJcbiAgICAvLyBBY3R1YWwgbWVyZ2Ugcm91dGluZSwgc2VwYXJhdGVkIGZyb20gbWFpbiBsb2dpY1xyXG4gICAgLy8gT25seSBhIHNpbmdsZSBsZXZlbCBvZiBvcHRpb25zIGlzIG1lcmdlZC4gRGVlcGVyIGxldmVscyBhcmUgcmVmJ2QuIFRoaXMgbWF5IGFjdHVhbGx5IGJlIGFuIGlzc3VlLlxyXG4gICAgLy9cclxuICAgIGNvbnN0IGRvTWVyZ2UgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KHRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbb3B0aW9uXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzcmMgPSBvcHRpb25zW29wdGlvbl07XHJcbiAgICAgICAgY29uc3QgZHN0ID0gdGFyZ2V0W29wdGlvbl07XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHNyYykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNyYywgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRzdFtwcm9wXSA9IHNyY1twcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBMb2NhbCBpbml0aWFsaXphdGlvblxyXG4gICAgY29uc3Qgc3JjT3B0aW9uID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgY29uc3QgZ2xvYmFsUGFzc2VkID0gaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykgJiYgIWlzRW1wdHkoZ2xvYmFsT3B0aW9ucyk7XHJcbiAgICBjb25zdCBnbG9iYWxPcHRpb24gPSBnbG9iYWxQYXNzZWQgPyBnbG9iYWxPcHRpb25zW29wdGlvbl0gOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBnbG9iYWxFbmFibGVkID0gZ2xvYmFsT3B0aW9uID8gZ2xvYmFsT3B0aW9uLmVuYWJsZWQgOiB1bmRlZmluZWQ7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTWFpbiByb3V0aW5lXHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgaWYgKHNyY09wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNyY09wdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gc3JjT3B0aW9uO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChzcmNPcHRpb24gPT09IG51bGwgJiYgIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgLy8gSWYgcG9zc2libGUsIGV4cGxpY2l0IGNvcHkgZnJvbSBnbG9iYWxzXHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChnbG9iYWxPcHRpb24pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KHNyY09wdGlvbikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gRW5zdXJlIHRoYXQgJ2VuYWJsZWQnIGlzIHByb3Blcmx5IHNldC4gSXQgaXMgcmVxdWlyZWQgaW50ZXJuYWxseVxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB2YWx1ZSBmcm9tIG9wdGlvbnMgd2lsbCBhbHdheXMgb3ZlcndyaXRlIHRoZSBleGlzdGluZyB2YWx1ZVxyXG4gICAgLy9cclxuICAgIGxldCBlbmFibGVkID0gdHJ1ZTsgLy8gZGVmYXVsdCB2YWx1ZVxyXG4gICAgaWYgKHNyY09wdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBlbmFibGVkID0gc3JjT3B0aW9uLmVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBUYWtlIGZyb20gZ2xvYmFscywgaWYgcHJlc2VudFxyXG4gICAgICAgIGlmIChnbG9iYWxFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZCA9IGdsb2JhbE9wdGlvbi5lbmFibGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRvTWVyZ2UobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbik7XHJcbiAgICBtZXJnZVRhcmdldFtvcHRpb25dLmVuYWJsZWQgPSBlbmFibGVkO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBiaW5hcnkgc2VhcmNoIGZvciBhIHZpc2libGUgaXRlbSBpbiBhIHNvcnRlZCBsaXN0LiBJZiB3ZSBmaW5kIGEgdmlzaWJsZSBpdGVtLCB0aGUgY29kZSB0aGF0IHVzZXNcclxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHRoZW4gaXRlcmF0ZSBpbiBib3RoIGRpcmVjdGlvbnMgb3ZlciB0aGlzIHNvcnRlZCBsaXN0IHRvIGZpbmQgYWxsIHZpc2libGUgaXRlbXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBJdGVtcyBvcmRlcmVkIGJ5IHN0YXJ0LlxyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIC0xIGlzIGxvd2VyLCAwIGlzIGVxdWFsLCAxIGlzIGhpZ2hlci5cclxuICogQHBhcmFtIGZpZWxkIC0gUHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdKS5cclxuICogQHBhcmFtIGZpZWxkMiAtIFNlY29uZCBwcm9wZXJ0eSBuYW1lIG9uIGFuIGl0ZW0gKFRoYXQgaXMgaXRlbVtmaWVsZF1bZmllbGQyXSkuXHJcbiAqIEByZXR1cm5zIEluZGV4IG9mIHRoZSBmb3VuZCBpdGVtIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoQ3VzdG9tKG9yZGVyZWRJdGVtcywgY29tcGFyYXRvciwgZmllbGQsIGZpZWxkMikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQyID09PSB1bmRlZmluZWQgPyBpdGVtW2ZpZWxkXSA6IGl0ZW1bZmllbGRdW2ZpZWxkMl07XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGppaGFhLCBmb3VuZCBhIHZpc2libGUgaXRlbSFcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2VhcmNoUmVzdWx0ID09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBzbWFsbCAtLT4gaW5jcmVhc2UgbG93XHJcbiAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSBzcGVjaWZpYyB2YWx1ZSBpbiBhIHNvcnRlZCBhcnJheS5cclxuICogSWYgaXQgZG9lcyBub3QgZXhpc3QgYnV0IGlzIGluIGJldHdlZW4gb2YgdHdvIHZhbHVlcywgd2UgcmV0dXJuIGVpdGhlciB0aGVcclxuICogb25lIGJlZm9yZSBvciB0aGUgb25lIGFmdGVyLCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dCBJZiBpdCBpcyBmb3VuZCwgd2VcclxuICogcmV0dXJuIHRoZSBpbmRleCwgZWxzZSAtMS5cclxuICpcclxuICogQHBhcmFtIG9yZGVyZWRJdGVtcyAtIFNvcnRlZCBhcnJheS5cclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSBzZWFyY2hlZCB2YWx1ZS5cclxuICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgaW4gaXRlbXMgdG8gYmUgc2VhcmNoZWQuXHJcbiAqIEBwYXJhbSBzaWRlUHJlZmVyZW5jZSAtIElmIHRoZSB0YXJnZXQgaXMgYmV0d2VlbiB0d28gdmFsdWVzLCBzaG91bGQgdGhlIGluZGV4IG9mIHRoZSBiZWZvcmUgb3IgdGhlIGFmdGVyIGJlIHJldHVybmVkP1xyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIEFuIG9wdGlvbmFsIGNvbXBhcmF0b3IsIHJldHVybmluZyAtMSwgMCwgMSBmb3IgXFw8LCA9PT0sIFxcPi5cclxuICogQHJldHVybnMgVGhlIGluZGV4IG9mIGZvdW5kIHZhbHVlIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoVmFsdWUob3JkZXJlZEl0ZW1zLCB0YXJnZXQsIGZpZWxkLCBzaWRlUHJlZmVyZW5jZSwgY29tcGFyYXRvcikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgcHJldlZhbHVlO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IG5leHRWYWx1ZTtcclxuICAgIGxldCBtaWRkbGU7XHJcbiAgICBjb21wYXJhdG9yID1cclxuICAgICAgICBjb21wYXJhdG9yICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGNvbXBhcmF0b3JcclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYiA/IDAgOiBhIDwgYiA/IC0xIDogMTtcclxuICAgICAgICAgICAgfTtcclxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKSB7XHJcbiAgICAgICAgLy8gZ2V0IGEgbmV3IGd1ZXNzXHJcbiAgICAgICAgbWlkZGxlID0gTWF0aC5mbG9vcigwLjUgKiAoaGlnaCArIGxvdykpO1xyXG4gICAgICAgIHByZXZWYWx1ZSA9IG9yZGVyZWRJdGVtc1tNYXRoLm1heCgwLCBtaWRkbGUgLSAxKV1bZmllbGRdO1xyXG4gICAgICAgIHZhbHVlID0gb3JkZXJlZEl0ZW1zW21pZGRsZV1bZmllbGRdO1xyXG4gICAgICAgIG5leHRWYWx1ZSA9XHJcbiAgICAgICAgICAgIG9yZGVyZWRJdGVtc1tNYXRoLm1pbihvcmRlcmVkSXRlbXMubGVuZ3RoIC0gMSwgbWlkZGxlICsgMSldW2ZpZWxkXTtcclxuICAgICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIHRoZSB0YXJnZXRcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcihwcmV2VmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBwcmV2aW91cyBhbmQgdGhlIGN1cnJlbnRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCIgPyBNYXRoLm1heCgwLCBtaWRkbGUgLSAxKSA6IG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA8IDAgJiZcclxuICAgICAgICAgICAgY29tcGFyYXRvcihuZXh0VmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dFxyXG4gICAgICAgICAgICByZXR1cm4gc2lkZVByZWZlcmVuY2UgPT0gXCJiZWZvcmVcIlxyXG4gICAgICAgICAgICAgICAgPyBtaWRkbGVcclxuICAgICAgICAgICAgICAgIDogTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGlkbnQgZmluZCB0aGUgdGFyZ2V0LCB3ZSBuZWVkIHRvIGNoYW5nZSBvdXIgYm91bmRhcmllcy5cclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICAgICAgbG93ID0gbWlkZGxlICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBiaWcgLS0+IGRlY3JlYXNlIGhpZ2hcclxuICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgfVxyXG4gICAgLy8gZGlkbnQgZmluZCBhbnl0aGluZy4gUmV0dXJuIC0xLlxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbi8qXHJcbiAqIEVhc2luZyBGdW5jdGlvbnMuXHJcbiAqIE9ubHkgY29uc2lkZXJpbmcgdGhlIHQgdmFsdWUgZm9yIHRoZSByYW5nZSBbMCwgMV0gPT4gWzAsIDFdLlxyXG4gKlxyXG4gKiBJbnNwaXJhdGlvbjogZnJvbSBodHRwOi8vZ2l6bWEuY29tL2Vhc2luZy9cclxuICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ3JlLzE2NTAyOTRcclxuICovXHJcbmNvbnN0IGVhc2luZ0Z1bmN0aW9ucyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgbm8gZWFzaW5nIGFuZCBubyBhY2NlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBsaW5lYXIodCkge1xyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5RdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiAoMiAtIHQpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDIgKiB0ICogdCA6IC0xICsgKDQgLSAyICogdCkgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5DdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRDdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gNCAqIHQgKiB0ICogdCA6ICh0IC0gMSkgKiAoMiAqIHQgLSAyKSAqICgyICogdCAtIDIpICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gMSAtIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gOCAqIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgKyAtLXQgKiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAxNiAqIHQgKiB0ICogdCAqIHQgKiB0IDogMSArIDE2ICogLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBFeHBlcmltZW50YWx5IGNvbXB1dGUgdGhlIHdpZHRoIG9mIHRoZSBzY3JvbGxiYXIgZm9yIHRoaXMgYnJvd3Nlci5cclxuICpcclxuICogQHJldHVybnMgVGhlIHdpZHRoIGluIHBpeGVscy5cclxuICovXHJcbmZ1bmN0aW9uIGdldFNjcm9sbEJhcldpZHRoKCkge1xyXG4gICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgIGlubmVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSBcIjIwMHB4XCI7XHJcbiAgICBjb25zdCBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBvdXRlci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgIG91dGVyLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuc3R5bGUud2lkdGggPSBcIjIwMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5oZWlnaHQgPSBcIjE1MHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcbiAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcclxuICAgIGNvbnN0IHcxID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwic2Nyb2xsXCI7XHJcbiAgICBsZXQgdzIgPSBpbm5lci5vZmZzZXRXaWR0aDtcclxuICAgIGlmICh3MSA9PSB3Mikge1xyXG4gICAgICAgIHcyID0gb3V0ZXIuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyKTtcclxuICAgIHJldHVybiB3MSAtIHcyO1xyXG59XHJcbi8vIEBUT0RPOiBUaGlzIGRvZXNuJ3Qgd29yayBwcm9wZXJseS5cclxuLy8gSXQgd29ya3Mgb25seSBmb3Igc2luZ2xlIHByb3BlcnR5IG9iamVjdHMsXHJcbi8vIG90aGVyd2lzZSBpdCBjb21iaW5lcyBhbGwgb2YgdGhlIHR5cGVzIGluIGEgdW5pb24uXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBWMT4gKFxyXG4vLyAgIHBpbGU6IFJlY29yZDxLMSwgdW5kZWZpbmVkIHwgVjE+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBLMSB8IFtLMV1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjFcclxuLy8gZXhwb3J0IGZ1bmN0aW9uIHRvcE1vc3Q8SzEgZXh0ZW5kcyBzdHJpbmcsIEsyIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjI+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgSzMgZXh0ZW5kcyBzdHJpbmcsIFYxLCBWMiwgVjM+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMiB8IFJlY29yZDxLMywgdW5kZWZpbmVkIHwgVjM+Pj5bXSxcclxuLy8gICBhY2Nlc3NvcnM6IFtLMSwgSzIsIEszXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyIHwgVjNcclxuLyoqXHJcbiAqIEdldCB0aGUgdG9wIG1vc3QgcHJvcGVydHkgdmFsdWUgZnJvbSBhIHBpbGUgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHBhcmFtIHBpbGUgLSBBcnJheSBvZiBvYmplY3RzLCBubyByZXF1aXJlZCBmb3JtYXQuXHJcbiAqIEBwYXJhbSBhY2Nlc3NvcnMgLSBBcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cclxuICogRm9yIGV4YW1wbGUgYG9iamVjdFsnZm9vJ11bJ2JhciddYCDihpIgYFsnZm9vJywgJ2JhciddYC5cclxuICogQHJldHVybnMgVmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpdGggZ2l2ZW4gYWNjZXNzb3JzIHBhdGggZnJvbSB0aGUgZmlyc3QgcGlsZSBpdGVtIHdoZXJlIGl0J3Mgbm90IHVuZGVmaW5lZC5cclxuICovXHJcbmZ1bmN0aW9uIHRvcE1vc3QocGlsZSwgYWNjZXNzb3JzKSB7XHJcbiAgICBsZXQgY2FuZGlkYXRlO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjY2Vzc29ycykpIHtcclxuICAgICAgICBhY2Nlc3NvcnMgPSBbYWNjZXNzb3JzXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHBpbGUpIHtcclxuICAgICAgICBpZiAobWVtYmVyKSB7XHJcbiAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG1lbWJlclthY2Nlc3NvcnNbMF1dO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFjY2Vzc29ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZVthY2Nlc3NvcnNbaV1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjYW5kaWRhdGU7XHJcbn1cblxuY29uc3QgaHRtbENvbG9ycyA9IHtcbiAgYmxhY2s6IFwiIzAwMDAwMFwiLFxuICBuYXZ5OiBcIiMwMDAwODBcIixcbiAgZGFya2JsdWU6IFwiIzAwMDA4QlwiLFxuICBtZWRpdW1ibHVlOiBcIiMwMDAwQ0RcIixcbiAgYmx1ZTogXCIjMDAwMEZGXCIsXG4gIGRhcmtncmVlbjogXCIjMDA2NDAwXCIsXG4gIGdyZWVuOiBcIiMwMDgwMDBcIixcbiAgdGVhbDogXCIjMDA4MDgwXCIsXG4gIGRhcmtjeWFuOiBcIiMwMDhCOEJcIixcbiAgZGVlcHNreWJsdWU6IFwiIzAwQkZGRlwiLFxuICBkYXJrdHVycXVvaXNlOiBcIiMwMENFRDFcIixcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IFwiIzAwRkE5QVwiLFxuICBsaW1lOiBcIiMwMEZGMDBcIixcbiAgc3ByaW5nZ3JlZW46IFwiIzAwRkY3RlwiLFxuICBhcXVhOiBcIiMwMEZGRkZcIixcbiAgY3lhbjogXCIjMDBGRkZGXCIsXG4gIG1pZG5pZ2h0Ymx1ZTogXCIjMTkxOTcwXCIsXG4gIGRvZGdlcmJsdWU6IFwiIzFFOTBGRlwiLFxuICBsaWdodHNlYWdyZWVuOiBcIiMyMEIyQUFcIixcbiAgZm9yZXN0Z3JlZW46IFwiIzIyOEIyMlwiLFxuICBzZWFncmVlbjogXCIjMkU4QjU3XCIsXG4gIGRhcmtzbGF0ZWdyYXk6IFwiIzJGNEY0RlwiLFxuICBsaW1lZ3JlZW46IFwiIzMyQ0QzMlwiLFxuICBtZWRpdW1zZWFncmVlbjogXCIjM0NCMzcxXCIsXG4gIHR1cnF1b2lzZTogXCIjNDBFMEQwXCIsXG4gIHJveWFsYmx1ZTogXCIjNDE2OUUxXCIsXG4gIHN0ZWVsYmx1ZTogXCIjNDY4MkI0XCIsXG4gIGRhcmtzbGF0ZWJsdWU6IFwiIzQ4M0Q4QlwiLFxuICBtZWRpdW10dXJxdW9pc2U6IFwiIzQ4RDFDQ1wiLFxuICBpbmRpZ286IFwiIzRCMDA4MlwiLFxuICBkYXJrb2xpdmVncmVlbjogXCIjNTU2QjJGXCIsXG4gIGNhZGV0Ymx1ZTogXCIjNUY5RUEwXCIsXG4gIGNvcm5mbG93ZXJibHVlOiBcIiM2NDk1RURcIixcbiAgbWVkaXVtYXF1YW1hcmluZTogXCIjNjZDREFBXCIsXG4gIGRpbWdyYXk6IFwiIzY5Njk2OVwiLFxuICBzbGF0ZWJsdWU6IFwiIzZBNUFDRFwiLFxuICBvbGl2ZWRyYWI6IFwiIzZCOEUyM1wiLFxuICBzbGF0ZWdyYXk6IFwiIzcwODA5MFwiLFxuICBsaWdodHNsYXRlZ3JheTogXCIjNzc4ODk5XCIsXG4gIG1lZGl1bXNsYXRlYmx1ZTogXCIjN0I2OEVFXCIsXG4gIGxhd25ncmVlbjogXCIjN0NGQzAwXCIsXG4gIGNoYXJ0cmV1c2U6IFwiIzdGRkYwMFwiLFxuICBhcXVhbWFyaW5lOiBcIiM3RkZGRDRcIixcbiAgbWFyb29uOiBcIiM4MDAwMDBcIixcbiAgcHVycGxlOiBcIiM4MDAwODBcIixcbiAgb2xpdmU6IFwiIzgwODAwMFwiLFxuICBncmF5OiBcIiM4MDgwODBcIixcbiAgc2t5Ymx1ZTogXCIjODdDRUVCXCIsXG4gIGxpZ2h0c2t5Ymx1ZTogXCIjODdDRUZBXCIsXG4gIGJsdWV2aW9sZXQ6IFwiIzhBMkJFMlwiLFxuICBkYXJrcmVkOiBcIiM4QjAwMDBcIixcbiAgZGFya21hZ2VudGE6IFwiIzhCMDA4QlwiLFxuICBzYWRkbGVicm93bjogXCIjOEI0NTEzXCIsXG4gIGRhcmtzZWFncmVlbjogXCIjOEZCQzhGXCIsXG4gIGxpZ2h0Z3JlZW46IFwiIzkwRUU5MFwiLFxuICBtZWRpdW1wdXJwbGU6IFwiIzkzNzBEOFwiLFxuICBkYXJrdmlvbGV0OiBcIiM5NDAwRDNcIixcbiAgcGFsZWdyZWVuOiBcIiM5OEZCOThcIixcbiAgZGFya29yY2hpZDogXCIjOTkzMkNDXCIsXG4gIHllbGxvd2dyZWVuOiBcIiM5QUNEMzJcIixcbiAgc2llbm5hOiBcIiNBMDUyMkRcIixcbiAgYnJvd246IFwiI0E1MkEyQVwiLFxuICBkYXJrZ3JheTogXCIjQTlBOUE5XCIsXG4gIGxpZ2h0Ymx1ZTogXCIjQUREOEU2XCIsXG4gIGdyZWVueWVsbG93OiBcIiNBREZGMkZcIixcbiAgcGFsZXR1cnF1b2lzZTogXCIjQUZFRUVFXCIsXG4gIGxpZ2h0c3RlZWxibHVlOiBcIiNCMEM0REVcIixcbiAgcG93ZGVyYmx1ZTogXCIjQjBFMEU2XCIsXG4gIGZpcmVicmljazogXCIjQjIyMjIyXCIsXG4gIGRhcmtnb2xkZW5yb2Q6IFwiI0I4ODYwQlwiLFxuICBtZWRpdW1vcmNoaWQ6IFwiI0JBNTVEM1wiLFxuICByb3N5YnJvd246IFwiI0JDOEY4RlwiLFxuICBkYXJra2hha2k6IFwiI0JEQjc2QlwiLFxuICBzaWx2ZXI6IFwiI0MwQzBDMFwiLFxuICBtZWRpdW12aW9sZXRyZWQ6IFwiI0M3MTU4NVwiLFxuICBpbmRpYW5yZWQ6IFwiI0NENUM1Q1wiLFxuICBwZXJ1OiBcIiNDRDg1M0ZcIixcbiAgY2hvY29sYXRlOiBcIiNEMjY5MUVcIixcbiAgdGFuOiBcIiNEMkI0OENcIixcbiAgbGlnaHRncmV5OiBcIiNEM0QzRDNcIixcbiAgcGFsZXZpb2xldHJlZDogXCIjRDg3MDkzXCIsXG4gIHRoaXN0bGU6IFwiI0Q4QkZEOFwiLFxuICBvcmNoaWQ6IFwiI0RBNzBENlwiLFxuICBnb2xkZW5yb2Q6IFwiI0RBQTUyMFwiLFxuICBjcmltc29uOiBcIiNEQzE0M0NcIixcbiAgZ2FpbnNib3JvOiBcIiNEQ0RDRENcIixcbiAgcGx1bTogXCIjRERBMEREXCIsXG4gIGJ1cmx5d29vZDogXCIjREVCODg3XCIsXG4gIGxpZ2h0Y3lhbjogXCIjRTBGRkZGXCIsXG4gIGxhdmVuZGVyOiBcIiNFNkU2RkFcIixcbiAgZGFya3NhbG1vbjogXCIjRTk5NjdBXCIsXG4gIHZpb2xldDogXCIjRUU4MkVFXCIsXG4gIHBhbGVnb2xkZW5yb2Q6IFwiI0VFRThBQVwiLFxuICBsaWdodGNvcmFsOiBcIiNGMDgwODBcIixcbiAga2hha2k6IFwiI0YwRTY4Q1wiLFxuICBhbGljZWJsdWU6IFwiI0YwRjhGRlwiLFxuICBob25leWRldzogXCIjRjBGRkYwXCIsXG4gIGF6dXJlOiBcIiNGMEZGRkZcIixcbiAgc2FuZHlicm93bjogXCIjRjRBNDYwXCIsXG4gIHdoZWF0OiBcIiNGNURFQjNcIixcbiAgYmVpZ2U6IFwiI0Y1RjVEQ1wiLFxuICB3aGl0ZXNtb2tlOiBcIiNGNUY1RjVcIixcbiAgbWludGNyZWFtOiBcIiNGNUZGRkFcIixcbiAgZ2hvc3R3aGl0ZTogXCIjRjhGOEZGXCIsXG4gIHNhbG1vbjogXCIjRkE4MDcyXCIsXG4gIGFudGlxdWV3aGl0ZTogXCIjRkFFQkQ3XCIsXG4gIGxpbmVuOiBcIiNGQUYwRTZcIixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiI0ZBRkFEMlwiLFxuICBvbGRsYWNlOiBcIiNGREY1RTZcIixcbiAgcmVkOiBcIiNGRjAwMDBcIixcbiAgZnVjaHNpYTogXCIjRkYwMEZGXCIsXG4gIG1hZ2VudGE6IFwiI0ZGMDBGRlwiLFxuICBkZWVwcGluazogXCIjRkYxNDkzXCIsXG4gIG9yYW5nZXJlZDogXCIjRkY0NTAwXCIsXG4gIHRvbWF0bzogXCIjRkY2MzQ3XCIsXG4gIGhvdHBpbms6IFwiI0ZGNjlCNFwiLFxuICBjb3JhbDogXCIjRkY3RjUwXCIsXG4gIGRhcmtvcmFuZ2U6IFwiI0ZGOEMwMFwiLFxuICBsaWdodHNhbG1vbjogXCIjRkZBMDdBXCIsXG4gIG9yYW5nZTogXCIjRkZBNTAwXCIsXG4gIGxpZ2h0cGluazogXCIjRkZCNkMxXCIsXG4gIHBpbms6IFwiI0ZGQzBDQlwiLFxuICBnb2xkOiBcIiNGRkQ3MDBcIixcbiAgcGVhY2hwdWZmOiBcIiNGRkRBQjlcIixcbiAgbmF2YWpvd2hpdGU6IFwiI0ZGREVBRFwiLFxuICBtb2NjYXNpbjogXCIjRkZFNEI1XCIsXG4gIGJpc3F1ZTogXCIjRkZFNEM0XCIsXG4gIG1pc3R5cm9zZTogXCIjRkZFNEUxXCIsXG4gIGJsYW5jaGVkYWxtb25kOiBcIiNGRkVCQ0RcIixcbiAgcGFwYXlhd2hpcDogXCIjRkZFRkQ1XCIsXG4gIGxhdmVuZGVyYmx1c2g6IFwiI0ZGRjBGNVwiLFxuICBzZWFzaGVsbDogXCIjRkZGNUVFXCIsXG4gIGNvcm5zaWxrOiBcIiNGRkY4RENcIixcbiAgbGVtb25jaGlmZm9uOiBcIiNGRkZBQ0RcIixcbiAgZmxvcmFsd2hpdGU6IFwiI0ZGRkFGMFwiLFxuICBzbm93OiBcIiNGRkZBRkFcIixcbiAgeWVsbG93OiBcIiNGRkZGMDBcIixcbiAgbGlnaHR5ZWxsb3c6IFwiI0ZGRkZFMFwiLFxuICBpdm9yeTogXCIjRkZGRkYwXCIsXG4gIHdoaXRlOiBcIiNGRkZGRkZcIixcbn07XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gKi9cbmxldCBDb2xvclBpY2tlciQxID0gY2xhc3MgQ29sb3JQaWNrZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwaXhlbFJhdGlvID0gMSkge1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiAyODkgLyAyLCB5OiAyODkgLyAyIH07XG4gICAgdGhpcy5yID0gMjg5ICogMC40OTtcbiAgICB0aGlzLmNvbG9yID0geyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhOiAxLjAgfTtcbiAgICB0aGlzLmh1ZUNpcmNsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmluaXRpYWxDb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5wcmV2aW91c0NvbG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuXG4gICAgLy8gYm91bmQgYnlcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gKCkgPT4ge307XG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gKCkgPT4ge307XG5cbiAgICAvLyBjcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgIHRoaXMuX2NyZWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgaW5zZXJ0cyB0aGUgY29sb3JQaWNrZXIgaW50byBhIGRpdiBmcm9tIHRoZSBET01cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAgICovXG4gIGluc2VydFRvKGNvbnRhaW5lcikge1xuICAgIGlmICh0aGlzLmhhbW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhhbW1lci5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhhbW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuXG4gICAgdGhpcy5fc2V0U2l6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldFVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIG9uIGFwcGx5IGFuZCBzYXZlLiBCaW5kIGl0IHRvIHRoZSBhcHBsaWNhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgc2V0Q2xvc2VDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIGNsb3NpbmcgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lzQ29sb3JTdHJpbmcoY29sb3IpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gaHRtbENvbG9yc1tjb2xvcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29sb3Igb2YgdGhlIGNvbG9yUGlja2VyXG4gICAqIFN1cHBvcnRlZCBmb3JtYXRzOlxuICAgKiAncmVkJyAgICAgICAgICAgICAgICAgICAtLT4gSFRNTCBjb2xvciBzdHJpbmdcbiAgICogJyNmZmZmZmYnICAgICAgICAgICAgICAgLS0+IGhleCBzdHJpbmdcbiAgICogJ3JnYigyNTUsMjU1LDI1NSknICAgICAgLS0+IHJnYiBzdHJpbmdcbiAgICogJ3JnYmEoMjU1LDI1NSwyNTUsMS4wKScgLS0+IHJnYmEgc3RyaW5nXG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NX0gICAgIC0tPiByZ2Igb2JqZWN0XG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NSxhOjEuMH0gLS0+IHJnYmEgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgb2JqZWN0fSBjb2xvclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqL1xuICBzZXRDb2xvcihjb2xvciwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICBpZiAoY29sb3IgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJnYmE7XG5cbiAgICAvLyBpZiBhIGh0bWwgY29sb3Igc2hvcnRoYW5kIGlzIHVzZWQsIGNvbnZlcnQgdG8gaGV4XG4gICAgY29uc3QgaHRtbENvbG9yID0gdGhpcy5faXNDb2xvclN0cmluZyhjb2xvcik7XG4gICAgaWYgKGh0bWxDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IGh0bWxDb2xvcjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3JtYXRcbiAgICBpZiAoaXNTdHJpbmcoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICBpZiAoaXNWYWxpZFJHQihjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDQpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA1KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYmFBcnJheVswXSwgZzogcmdiYUFycmF5WzFdLCBiOiByZ2JhQXJyYXlbMl0sIGE6IDEuMCB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkUkdCQShjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDUpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA2KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7XG4gICAgICAgICAgcjogcmdiYUFycmF5WzBdLFxuICAgICAgICAgIGc6IHJnYmFBcnJheVsxXSxcbiAgICAgICAgICBiOiByZ2JhQXJyYXlbMl0sXG4gICAgICAgICAgYTogcmdiYUFycmF5WzNdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkSGV4KGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZ2JPYmogPSBoZXhUb1JHQihjb2xvcik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYk9iai5yLCBnOiByZ2JPYmouZywgYjogcmdiT2JqLmIsIGE6IDEuMCB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29sb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbG9yLnIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmIgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBhbHBoYSA9IGNvbG9yLmEgIT09IHVuZGVmaW5lZCA/IGNvbG9yLmEgOiBcIjEuMFwiO1xuICAgICAgICAgIHJnYmEgPSB7IHI6IGNvbG9yLnIsIGc6IGNvbG9yLmcsIGI6IGNvbG9yLmIsIGE6IGFscGhhIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBpZiAocmdiYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biBjb2xvciBwYXNzZWQgdG8gdGhlIGNvbG9yUGlja2VyLiBTdXBwb3J0ZWQgYXJlIHN0cmluZ3M6IHJnYiwgaGV4LCByZ2JhLiBPYmplY3Q6IHJnYiAoe3I6cixnOmcsYjpiLFthOmFdfSkuIFN1cHBsaWVkOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29sb3IpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzaG93cyB0aGUgY29sb3IgcGlja2VyLlxuICAgKiBUaGUgaHVlIGNpcmNsZSBpcyBjb25zdHJ1Y3RlZCBvbmNlIGFuZCBzdG9yZWQuXG4gICAqL1xuICBzaG93KCkge1xuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrKCk7XG4gICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIHRoaXMuX2dlbmVyYXRlSHVlQ2lyY2xlKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFJJVkFURSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwaWNrZXIuIElzIGNhbGxlZCBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogT3B0aW9uYWwgYm9vbGVhbiB0byBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIGVhc3kgYWNjZXNzIGxhdGVyIG9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdG9yZVByZXZpb3VzPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGlkZShzdG9yZVByZXZpb3VzID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBwcmV2aW91cyBjb2xvciBmb3IgbmV4dCB0aW1lO1xuICAgIGlmIChzdG9yZVByZXZpb3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnByZXZpb3VzQ29sb3IgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbG9yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHBsaWVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuaW5pdGlhbENvbG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblxuICAgIC8vIGNhbGwgdGhlIGNsb3NpbmcgY2FsbGJhY2ssIHJlc3RvcmluZyB0aGUgb25jbGljayBtZXRob2QuXG4gICAgLy8gdGhpcyBpcyBpbiBhIHNldFRpbWVvdXQgYmVjYXVzZSBpdCB3aWxsIHRyaWdnZXIgdGhlIHNob3cgYWdhaW4gYmVmb3JlIHRoZSBjbGljayBpcyBkb25lLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2xvc2VDYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gdGhlIHNhdmUgYnV0dG9uLiBTYXZlcyBhbmQgaGlkZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2F2ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuY29sb3IpO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuX2hpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCb3VuZCB0byBhcHBseSBidXR0b24uIFNhdmVzIGJ1dCBkb2VzIG5vdCBjbG9zZS4gSXMgdW5kb25lIGJ5IHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FwcGx5KCkge1xuICAgIHRoaXMuYXBwbGllZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogbG9hZCB0aGUgY29sb3IgZnJvbSB0aGUgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkTGFzdCgpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c0NvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0Q29sb3IodGhpcy5wcmV2aW91c0NvbG9yLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsZXJ0KFwiVGhlcmUgaXMgbm8gbGFzdCBjb2xvciB0byBsb2FkLi4uXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGNvbG9yLCBwbGFjZSB0aGUgcGlja2VyXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZ2JhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NldEluaXRpYWw9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBpbml0aWFsIGNvbG9yXG4gICAgaWYgKHNldEluaXRpYWwgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgcmdiYSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvciA9IHJnYmE7XG4gICAgY29uc3QgaHN2ID0gUkdCVG9IU1YocmdiYS5yLCByZ2JhLmcsIHJnYmEuYik7XG5cbiAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAyICogTWF0aC5QSTtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLnIgKiBoc3YucztcbiAgICBjb25zdCB4ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcbiAgICBjb25zdCB5ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIHggLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICB5IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudEhlaWdodCArIFwicHhcIjtcblxuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcihyZ2JhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBvcGFjaXR5IGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0T3BhY2l0eSh2YWx1ZSkge1xuICAgIHRoaXMuY29sb3IuYSA9IHZhbHVlIC8gMTAwO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcih0aGlzLmNvbG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBicmlnaHRuZXNzIGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QnJpZ2h0bmVzcyh2YWx1ZSkge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi52ID0gdmFsdWUgLyAxMDA7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgY29sb3IgcGlja2VyLiBBIGJsYWNrIGNpcmNsZSBvdmVybGF5cyB0aGUgaHVlIGNpcmNsZSB0byBtaW1pYyB0aGUgYnJpZ2h0bmVzcyBkZWNyZWFzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZVBpY2tlcihyZ2JhID0gdGhpcy5jb2xvcikge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgfVxuICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuXG4gICAgY3R4LnB1dEltYWdlRGF0YSh0aGlzLmh1ZUNpcmNsZSwgMCwgMCk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgwLDAsMCxcIiArICgxIC0gaHN2LnYpICsgXCIpXCI7XG4gICAgY3R4LmNpcmNsZSh0aGlzLmNlbnRlckNvb3JkaW5hdGVzLngsIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSwgdGhpcy5yKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudmFsdWUgPSAxMDAgKiBoc3YudjtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IDEwMCAqIHJnYmEuYTtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgY3JlYXRlIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFNpemUoKSB7XG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLndpZHRoID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuaGVpZ2h0ID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhbGwgZG9tIGVsZW1lbnRzXG4gICAqIFRPRE86IGNsZWFudXAsIGxvdHMgb2Ygc2ltaWxhciBkb20gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5mcmFtZS5jbGFzc05hbWUgPSBcInZpcy1jb2xvci1waWNrZXJcIjtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsYXNzTmFtZSA9IFwidmlzLXNlbGVjdG9yXCI7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcblxuICAgIGlmICghdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KSB7XG4gICAgICBjb25zdCBub0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIik7XG4gICAgICBub0NhbnZhcy5zdHlsZS5jb2xvciA9IFwicmVkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5wYWRkaW5nID0gXCIxMHB4XCI7XG4gICAgICBub0NhbnZhcy5pbm5lclRleHQgPSBcIkVycm9yOiB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBIVE1MIGNhbnZhc1wiO1xuICAgICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5hcHBlbmRDaGlsZChub0NhbnZhcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgKGN0eC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAxKTtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXNcbiAgICAgICAgLmdldENvbnRleHQoXCIyZFwiKVxuICAgICAgICAuc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbG9yXCI7XG5cbiAgICB0aGlzLm9wYWNpdHlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eURpdi5jbGFzc05hbWUgPSBcInZpcy1vcGFjaXR5XCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0Rpdi5jbGFzc05hbWUgPSBcInZpcy1icmlnaHRuZXNzXCI7XG5cbiAgICB0aGlzLmFycm93RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmFycm93RGl2LmNsYXNzTmFtZSA9IFwidmlzLWFycm93XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS50eXBlID0gXCJyYW5nZVwiOyAvLyBOb3Qgc3VwcG9ydGVkIG9uIElFOVxuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWluID0gXCIwXCI7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5tYXggPSBcIjEwMFwiO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVE9ETzogQWRkIHNvbWUgZXJyb3IgaGFuZGxpbmcuXG4gICAgfVxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gXCIxMDBcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5jbGFzc05hbWUgPSBcInZpcy1yYW5nZVwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2LmFwcGVuZENoaWxkKHRoaXMub3BhY2l0eVJhbmdlKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuYXBwZW5kQ2hpbGQodGhpcy5icmlnaHRuZXNzUmFuZ2UpO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmlucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLWJyaWdodG5lc3NcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbC5pbm5lclRleHQgPSBcImJyaWdodG5lc3M6XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLW9wYWNpdHlcIjtcbiAgICB0aGlzLm9wYWNpdHlMYWJlbC5pbm5lclRleHQgPSBcIm9wYWNpdHk6XCI7XG5cbiAgICB0aGlzLm5ld0NvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmNsYXNzTmFtZSA9IFwidmlzLW5ldy1jb2xvclwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuaW5uZXJUZXh0ID0gXCJuZXdcIjtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1pbml0aWFsLWNvbG9yXCI7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuaW5uZXJUZXh0ID0gXCJpbml0aWFsXCI7XG5cbiAgICB0aGlzLmNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1jYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5pbm5lclRleHQgPSBcImNhbmNlbFwiO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9oaWRlLmJpbmQodGhpcywgZmFsc2UpO1xuXG4gICAgdGhpcy5hcHBseUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5pbm5lclRleHQgPSBcImFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fYXBwbHkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2F2ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5zYXZlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtc2F2ZVwiO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5pbm5lclRleHQgPSBcInNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24ub25jbGljayA9IHRoaXMuX3NhdmUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubG9hZEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5sb2FkQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtbG9hZFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5pbm5lclRleHQgPSBcImxvYWQgbGFzdFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fbG9hZExhc3QuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFycm93RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0xhYmVsKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uZXdDb2xvckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmluaXRpYWxDb2xvckRpdik7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY2FuY2VsQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYXBwbHlCdXR0b24pO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5zYXZlQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubG9hZEJ1dHRvbik7XG4gIH1cblxuICAvKipcbiAgICogYmluZCBoYW1tZXIgdG8gdGhlIGNvbG9yIHBpY2tlclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JpbmRIYW1tZXIoKSB7XG4gICAgdGhpcy5kcmFnID0ge307XG4gICAgdGhpcy5waW5jaCA9IHt9O1xuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lciQxKHRoaXMuY29sb3JQaWNrZXJDYW52YXMpO1xuICAgIHRoaXMuaGFtbWVyLmdldChcInBpbmNoXCIpLnNldCh7IGVuYWJsZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuaGFtbWVyLm9uKFwiaGFtbWVyLmlucHV0XCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmlzRmlyc3QpIHtcbiAgICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5zdGFydFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5tb3ZlXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbmVuZFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2VuZXJhdGUgdGhlIGh1ZSBjaXJjbGUuIFRoaXMgaXMgcmVsYXRpdmVseSBoZWF2eSAoMjAwbXMpIGFuZCBpcyBkb25lIG9ubHkgb25jZSBvbiB0aGUgZmlyc3QgdGltZSBpdCBpcyBzaG93bi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZW5lcmF0ZUh1ZUNpcmNsZSgpIHtcbiAgICBpZiAodGhpcy5nZW5lcmF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIDEpO1xuICAgICAgfVxuICAgICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG5cbiAgICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgaCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gZHJhdyBodWUgY2lyY2xlXG4gICAgICBsZXQgeCwgeSwgaHVlLCBzYXQ7XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiB3ICogMC41LCB5OiBoICogMC41IH07XG4gICAgICB0aGlzLnIgPSAwLjQ5ICogdztcbiAgICAgIGNvbnN0IGFuZ2xlQ29udmVydCA9ICgyICogTWF0aC5QSSkgLyAzNjA7XG4gICAgICBjb25zdCBoZmFjID0gMSAvIDM2MDtcbiAgICAgIGNvbnN0IHNmYWMgPSAxIC8gdGhpcy5yO1xuICAgICAgbGV0IHJnYjtcbiAgICAgIGZvciAoaHVlID0gMDsgaHVlIDwgMzYwOyBodWUrKykge1xuICAgICAgICBmb3IgKHNhdCA9IDA7IHNhdCA8IHRoaXMucjsgc2F0KyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy54ICsgc2F0ICogTWF0aC5zaW4oYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICB5ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy55ICsgc2F0ICogTWF0aC5jb3MoYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICByZ2IgPSBIU1ZUb1JHQihodWUgKiBoZmFjLCBzYXQgKiBzZmFjLCAxKTtcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2IoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIpXCI7XG4gICAgICAgICAgY3R4LmZpbGxSZWN0KHggLSAwLjUsIHkgLSAwLjUsIDIsIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsMSlcIjtcbiAgICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIHRoaXMuaHVlQ2lyY2xlID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIHNlbGVjdG9yLiBUaGlzIGlzIGNhbGxlZCBieSBoYW1tZXIgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlU2VsZWN0b3IoZXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jb2xvclBpY2tlckRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBsZWZ0ID0gZXZlbnQuY2VudGVyLnggLSByZWN0LmxlZnQ7XG4gICAgY29uc3QgdG9wID0gZXZlbnQuY2VudGVyLnkgLSByZWN0LnRvcDtcblxuICAgIGNvbnN0IGNlbnRlclkgPSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyRGl2LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBjZW50ZXJYID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRXaWR0aDtcblxuICAgIGNvbnN0IHggPSBsZWZ0IC0gY2VudGVyWDtcbiAgICBjb25zdCB5ID0gdG9wIC0gY2VudGVyWTtcblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMih4LCB5KTtcbiAgICBjb25zdCByYWRpdXMgPSAwLjk4ICogTWF0aC5taW4oTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpLCBjZW50ZXJYKTtcblxuICAgIGNvbnN0IG5ld1RvcCA9IE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclk7XG4gICAgY29uc3QgbmV3TGVmdCA9IE1hdGguc2luKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclg7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUudG9wID1cbiAgICAgIG5ld1RvcCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLmxlZnQgPVxuICAgICAgbmV3TGVmdCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRXaWR0aCArIFwicHhcIjtcblxuICAgIC8vIHNldCBjb2xvclxuICAgIGxldCBoID0gYW5nbGUgLyAoMiAqIE1hdGguUEkpO1xuICAgIGggPSBoIDwgMCA/IGggKyAxIDogaDtcbiAgICBjb25zdCBzID0gcmFkaXVzIC8gdGhpcy5yO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi5oID0gaDtcbiAgICBoc3YucyA9IHM7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuXG4gICAgLy8gdXBkYXRlIHByZXZpZXdzXG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmNvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gIH1cbn07XG5cbi8qKlxuICogV3JhcCBnaXZlbiB0ZXh0IChsYXN0IGFyZ3VtZW50KSBpbiBIVE1MIGVsZW1lbnRzIChhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cykuXG4gKlxuICogQHBhcmFtIHsuLi5hbnl9IHJlc3QgLSBMaXN0IG9mIHRhZyBuYW1lcyBmb2xsb3dlZCBieSBpbm5lciB0ZXh0LlxuICogQHJldHVybnMgQW4gZWxlbWVudCBvciBhIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gd3JhcEluVGFnKC4uLnJlc3QpIHtcbiAgaWYgKHJlc3QubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cy5cIik7XG4gIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVzdFswXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmVzdFswXSk7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoLi4ucmVzdC5zbGljZSgxKSkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHdheSB0aGlzIHdvcmtzIGlzIGZvciBhbGwgcHJvcGVydGllcyBvZiB0aGlzLnBvc3NpYmxlIG9wdGlvbnMsIHlvdSBjYW4gc3VwcGx5IHRoZSBwcm9wZXJ0eSBuYW1lIGluIGFueSBmb3JtIHRvIGxpc3QgdGhlIG9wdGlvbnMuXG4gKiBCb29sZWFuIG9wdGlvbnMgYXJlIHJlY29nbmlzZWQgYXMgQm9vbGVhblxuICogTnVtYmVyIG9wdGlvbnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtkZWZhdWx0IHZhbHVlLCBtaW4gdmFsdWUsIG1heCB2YWx1ZSwgc3RlcHNpemVdXG4gKiBDb2xvcnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFsnY29sb3InLCAnI2ZmZmZmZiddXG4gKiBTdHJpbmdzIHdpdGggc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtvcHRpb24xLCBvcHRpb24yLCBvcHRpb24zLCAuLl1cbiAqXG4gKiBUaGUgb3B0aW9ucyBhcmUgbWF0Y2hlZCB3aXRoIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiBlYWNoIG9mIHRoZSBtb2R1bGVzIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYXJlXG4gKi9cbmxldCBDb25maWd1cmF0b3IkMSA9IGNsYXNzIENvbmZpZ3VyYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50TW9kdWxlICAgICAgICB8IHRoZSBsb2NhdGlvbiB3aGVyZSBwYXJlbnRNb2R1bGUuc2V0T3B0aW9ucygpIGNhbiBiZSBjYWxsZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRDb250YWluZXIgICAgfCB0aGUgZGVmYXVsdCBjb250YWluZXIgb2YgdGhlIG1vZHVsZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlndXJlT3B0aW9ucyAgICB8IHRoZSBmdWxseSBjb25maWd1cmVkIGFuZCBwcmVkZWZpbmVkIG9wdGlvbnMgc2V0IGZvdW5kIGluIGFsbE9wdGlvbnMuanNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBpeGVsUmF0aW8gICAgICAgICAgfCBjYW52YXMgcGl4ZWwgcmF0aW9cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGlkZU9wdGlvbiAgICAgICAgfCBjdXN0b20gbG9naWMgdG8gZHluYW1pY2FsbHkgaGlkZSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnRNb2R1bGUsXG4gICAgZGVmYXVsdENvbnRhaW5lcixcbiAgICBjb25maWd1cmVPcHRpb25zLFxuICAgIHBpeGVsUmF0aW8gPSAxLFxuICAgIGhpZGVPcHRpb24gPSAoKSA9PiBmYWxzZVxuICApIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudE1vZHVsZTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG4gICAgdGhpcy5jb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyO1xuICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaGlkZU9wdGlvbiA9IGhpZGVPcHRpb247XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5wb3B1cENvdW50ZXIgPSAwO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgIGNvbnRhaW5lcjogdW5kZWZpbmVkLFxuICAgICAgc2hvd0J1dHRvbjogdHJ1ZSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuY29uZmlndXJlT3B0aW9ucyA9IGNvbmZpZ3VyZU9wdGlvbnM7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0ge307XG4gICAgdGhpcy5kb21FbGVtZW50cyA9IFtdO1xuICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB0aGlzLnBvcHVwTGltaXQgPSA1O1xuICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgdGhpcy5jb2xvclBpY2tlciA9IG5ldyBDb2xvclBpY2tlciQxKHBpeGVsUmF0aW8pO1xuICAgIHRoaXMud3JhcHBlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoIGFsbCBvcHRpb25zLlxuICAgKiBCZWNhdXNlIGFsbCBtb2R1bGVzIHBhcnNlIHRoZWlyIG9wdGlvbnMgYnkgdGhlbXNlbHZlcywgd2UganVzdCB1c2UgdGhlaXIgb3B0aW9ucy4gV2UgY29weSB0aGVtIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXNldCB0aGUgcG9wdXAgaGlzdG9yeSBiZWNhdXNlIHRoZSBpbmRpY2VzIG1heSBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuXG4gICAgICBsZXQgZW5hYmxlZCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuam9pbigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbnMgY2Fubm90IGJlIG51bGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0J1dHRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3dCdXR0b24gPSBvcHRpb25zLnNob3dCdXR0b247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgIGVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICBlbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICB9XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kdWxlT3B0aW9uc1xuICAgKi9cbiAgc2V0TW9kdWxlT3B0aW9ucyhtb2R1bGVPcHRpb25zKSB7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0gbW9kdWxlT3B0aW9ucztcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NyZWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMgPSBbXTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMub3B0aW9ucy5maWx0ZXI7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gdGhpcy5jb25maWd1cmVPcHRpb25zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlndXJlT3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICAgICAgc2hvdyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc2hvdyA9IGZpbHRlcihvcHRpb24sIFtdKTtcbiAgICAgICAgICBzaG93ID1cbiAgICAgICAgICAgIHNob3cgfHxcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnNbb3B0aW9uXSwgW29wdGlvbl0sIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIuaW5kZXhPZihvcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIGxpbmVicmVhayBiZXR3ZWVuIGNhdGVnb3JpZXNcbiAgICAgICAgICBpZiAoY291bnRlciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VJdGVtKFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYSBoZWFkZXIgZm9yIHRoZSBjYXRlZ29yeVxuICAgICAgICAgIHRoaXMuX21ha2VIZWFkZXIob3B0aW9uKTtcblxuICAgICAgICAgIC8vIGdldCB0aGUgc3ViIG9wdGlvbnNcbiAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dKTtcbiAgICAgICAgfVxuICAgICAgICBjb3VudGVyKys7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX21ha2VCdXR0b24oKTtcbiAgICB0aGlzLl9wdXNoKCk7XG4gICAgLy9+IHRoaXMuY29sb3JQaWNrZXIuaW5zZXJ0VG8odGhpcy5jb250YWluZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRyYXcgYWxsIERPTSBlbGVtZW50cyBvbiB0aGUgc2NyZWVuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHVzaCgpIHtcbiAgICB0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMud3JhcHBlci5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uLXdyYXBwZXJcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuZG9tRWxlbWVudHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX3Nob3dQb3B1cElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogZGVsZXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5yZW1vdmVDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53cmFwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcblxuICAgIHRoaXMuX3JlbW92ZVBvcHVwKCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBhY3R1YWxPcHRpb25zIGlmIGl0IGV4aXN0c1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0VmFsdWUocGF0aCkge1xuICAgIGxldCBiYXNlID0gdGhpcy5tb2R1bGVPcHRpb25zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJhc2VbcGF0aFtpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBiYXNlID0gYmFzZVtwYXRoW2ldXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGwgb3B0aW9uIGVsZW1lbnRzIGFyZSB3cmFwcGVkIGluIGFuIGl0ZW1cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnQ+fSBkb21FbGVtZW50c1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VJdGVtKHBhdGgsIC4uLmRvbUVsZW1lbnRzKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBpdGVtLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1pdGVtIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgICBkb21FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogaGVhZGVyIGZvciBtYWpvciBzdWJqZWN0c1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VIZWFkZXIobmFtZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1oZWFkZXJcIjtcbiAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZTtcbiAgICB0aGlzLl9tYWtlSXRlbShbXSwgZGl2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgbGFiZWwsIGlmIGl0IGlzIGFuIG9iamVjdCBsYWJlbCwgaXQgZ2V0cyBkaWZmZXJlbnQgc3R5bGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RMYWJlbFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUxhYmVsKG5hbWUsIHBhdGgsIG9iamVjdExhYmVsID0gZmFsc2UpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWxhYmVsIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgaWYgKG9iamVjdExhYmVsID09PSB0cnVlKSB7XG4gICAgICB3aGlsZSAoZGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIGRpdi5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoXCJpXCIsIFwiYlwiLCBuYW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBuYW1lICsgXCI6XCI7XG4gICAgfVxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGRyb3Bkb3duIGxpc3QgZm9yIG11bHRpcGxlIHBvc3NpYmxlIHN0cmluZyBvcHRvaW5zXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgIHNlbGVjdC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctc2VsZWN0XCI7XG4gICAgbGV0IHNlbGVjdGVkVmFsdWUgPSAwO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYXJyLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gYXJyLmluZGV4T2YodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgb3B0aW9uLnZhbHVlID0gYXJyW2ldO1xuICAgICAgaWYgKGkgPT09IHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gXCJzZWxlY3RlZFwiO1xuICAgICAgfVxuICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IGFycltpXTtcbiAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBzZWxlY3Qub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBzZWxlY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSByYW5nZSBvYmplY3QgZm9yIG51bWVyaWMgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VSYW5nZShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXJyWzBdO1xuICAgIGNvbnN0IG1pbiA9IGFyclsxXTtcbiAgICBjb25zdCBtYXggPSBhcnJbMl07XG4gICAgY29uc3Qgc3RlcCA9IGFyclszXTtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICByYW5nZS5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctcmFuZ2VcIjtcbiAgICB0cnkge1xuICAgICAgcmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gbm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHJhbmdlLm1pbiA9IG1pbjtcbiAgICAgIHJhbmdlLm1heCA9IG1heDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICByYW5nZS5zdGVwID0gc3RlcDtcblxuICAgIC8vIHNldCB1cCB0aGUgcG9wdXAgc2V0dGluZ3MgaW4gY2FzZSB0aGV5IGFyZSBuZWVkZWQuXG4gICAgbGV0IHBvcHVwU3RyaW5nID0gXCJcIjtcbiAgICBsZXQgcG9wdXBWYWx1ZSA9IDA7XG5cbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmFjdG9yID0gMS4yO1xuICAgICAgaWYgKHZhbHVlIDwgMCAmJiB2YWx1ZSAqIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgKiBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIC8gZmFjdG9yIDwgbWluKSB7XG4gICAgICAgIHJhbmdlLm1pbiA9IE1hdGguY2VpbCh2YWx1ZSAvIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5taW47XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAqIGZhY3RvciA+IG1heCAmJiBtYXggIT09IDEpIHtcbiAgICAgICAgcmFuZ2UubWF4ID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1heDtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfVxuICAgICAgcmFuZ2UudmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgaW5wdXQuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlaW5wdXRcIjtcbiAgICBpbnB1dC52YWx1ZSA9IHJhbmdlLnZhbHVlO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgbWUuX3VwZGF0ZShOdW1iZXIodGhpcy52YWx1ZSksIHBhdGgpO1xuICAgIH07XG4gICAgcmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgcmFuZ2UsIGlucHV0KTtcblxuICAgIC8vIGlmIGEgcG9wdXAgaXMgbmVlZGVkIEFORCBpdCBoYXMgbm90IGJlZW4gc2hvd24gZm9yIHRoaXMgdmFsdWUsIHNob3cgaXQuXG4gICAgaWYgKHBvcHVwU3RyaW5nICE9PSBcIlwiICYmIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gIT09IHBvcHVwVmFsdWUpIHtcbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gPSBwb3B1cFZhbHVlO1xuICAgICAgdGhpcy5fc2V0dXBQb3B1cChwb3B1cFN0cmluZywgaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGJ1dHRvbiBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0J1dHRvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZ2VuZXJhdGVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvblwiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uaW5uZXJUZXh0ID0gXCJnZW5lcmF0ZSBvcHRpb25zXCI7XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9wcmludE9wdGlvbnMoKTtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3ZlciA9ICgpID0+IHtcbiAgICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiBob3ZlclwiO1xuICAgICAgfTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLm9ubW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLW9wdGlvbi1jb250YWluZXJcIjtcblxuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKHRoaXMub3B0aW9uc0NvbnRhaW5lcik7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goZ2VuZXJhdGVCdXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwcmVwYXJlIHRoZSBwb3B1cFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldHVwUG9wdXAoc3RyaW5nLCBpbmRleCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5wb3B1cENvdW50ZXIgPCB0aGlzLnBvcHVwTGltaXRcbiAgICApIHtcbiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBkaXYuaWQgPSBcInZpcy1jb25maWd1cmF0aW9uLXBvcHVwXCI7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmlubmVyVGV4dCA9IHN0cmluZztcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyICs9IDE7XG4gICAgICB0aGlzLnBvcHVwRGl2ID0geyBodG1sOiBkaXYsIGluZGV4OiBpbmRleCB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmUgdGhlIHBvcHVwIGZyb20gdGhlIGRvbVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZVBvcHVwKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmhpZGVUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBwb3B1cCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd1BvcHVwSWZOZWVkZWQoKSB7XG4gICAgaWYgKHRoaXMucG9wdXBEaXYuaHRtbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudHNbdGhpcy5wb3B1cERpdi5pbmRleF07XG4gICAgICBjb25zdCByZWN0ID0gY29ycmVzcG9uZGluZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5zdHlsZS50b3AgPSByZWN0LnRvcCAtIDMwICsgXCJweFwiOyAvLyAzMCBpcyB0aGUgaGVpZ2h0O1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwRGl2Lmh0bWwpO1xuICAgICAgdGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICB9LCAxNTAwKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuZGVsZXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfSwgMTgwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBjaGVja2JveCBmb3IgYm9vbGVhbiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQ2hlY2tib3goZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy5jaGVja2VkLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgY2hlY2tib3gpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSB0ZXh0IGlucHV0IGZpZWxkIGZvciBzdHJpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZVRleHRJbnB1dChkZWZhdWx0VmFsdWUsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgY2hlY2tib3gudHlwZSA9IFwidGV4dFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy10ZXh0XCI7XG4gICAgY2hlY2tib3gudmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy52YWx1ZSwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY29sb3IgZmllbGQgd2l0aCBhIGNvbG9yIHBpY2tlciBmb3IgY29sb3IgZmllbGRzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRDb2xvciA9IGFyclsxXTtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICE9PSBcIm5vbmVcIikge1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jb2xvckJsb2NrXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9jayBub25lXCI7XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbG9yIDogdmFsdWU7XG4gICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogdXNlZCBieSB0aGUgY29sb3IgYnV0dG9ucyB0byBjYWxsIHRoZSBjb2xvciBwaWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBkaXZcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpIHtcbiAgICAvLyBjbGVhciB0aGUgY2FsbGJhY2sgZnJvbSB0aGlzIGRpdlxuICAgIGRpdi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKGRpdik7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zaG93KCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENvbG9yKHZhbHVlKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldFVwZGF0ZUNhbGxiYWNrKChjb2xvcikgPT4ge1xuICAgICAgY29uc3QgY29sb3JTdHJpbmcgPVxuICAgICAgICBcInJnYmEoXCIgKyBjb2xvci5yICsgXCIsXCIgKyBjb2xvci5nICsgXCIsXCIgKyBjb2xvci5iICsgXCIsXCIgKyBjb2xvci5hICsgXCIpXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JTdHJpbmc7XG4gICAgICB0aGlzLl91cGRhdGUoY29sb3JTdHJpbmcsIHBhdGgpO1xuICAgIH0pO1xuXG4gICAgLy8gb24gY2xvc2Ugb2YgdGhlIGNvbG9ycGlja2VyLCByZXN0b3JlIHRoZSBjYWxsYmFjay5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENsb3NlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogcGFyc2UgYW4gb2JqZWN0IGFuZCBkcmF3IHRoZSBjb3JyZWN0IGl0ZW1zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtBcnJheX0gW3BhdGg9W11dICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tPbmx5PWZhbHNlXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVPYmplY3Qob2JqLCBwYXRoID0gW10sIGNoZWNrT25seSA9IGZhbHNlKSB7XG4gICAgbGV0IHNob3cgPSBmYWxzZTtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCB2aXNpYmxlSW5TZXQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHN1Yk9iaiBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBzdWJPYmopKSB7XG4gICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICBjb25zdCBpdGVtID0gb2JqW3N1Yk9ial07XG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgc3ViT2JqKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIoc3ViT2JqLCBwYXRoKTtcblxuICAgICAgICAgIC8vIGlmIG5lZWRlZCB3ZSBtdXN0IGdvIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICAgICAgaWYgKHNob3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGl0ZW0pICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICAgICAgICBpdGVtIGluc3RhbmNlb2YgT2JqZWN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgIHNob3cgPSB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGNoZWNrT25seSA9PT0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdmlzaWJsZUluU2V0ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKG5ld1BhdGgpO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycmF5KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlVGV4dElucHV0KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIHNraXAgdGhlIG9wdGlvbnMgdGhhdCBhcmUgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5oaWRlT3B0aW9uKHBhdGgsIHN1Yk9iaiwgdGhpcy5tb2R1bGVPcHRpb25zKSkge1xuICAgICAgICAgICAgICAvLyBpbml0aWFsbHkgY29sbGFwc2Ugb3B0aW9ucyB3aXRoIGFuIGRpc2FibGVkIGVuYWJsZWQgb3B0aW9uLlxuICAgICAgICAgICAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmFibGVkUGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShuZXdQYXRoLCBcImVuYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoZW5hYmxlZFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChlbmFibGVkVmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgICB2aXNpYmxlSW5TZXQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlQ2hlY2tib3goaXRlbSwgZW5hYmxlZFZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwoc3ViT2JqLCBuZXdQYXRoLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdChpdGVtLCBuZXdQYXRoKSB8fCB2aXNpYmxlSW5TZXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImRvbnQga25vdyBob3cgdG8gaGFuZGxlXCIsIGl0ZW0sIHN1Yk9iaiwgbmV3UGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlSW5TZXQ7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSBhcnJheSB0eXBlIG9mIG9wdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUFycmF5KGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIiAmJiBhcnJbMF0gPT09IFwiY29sb3JcIikge1xuICAgICAgdGhpcy5fbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzFdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9tYWtlRHJvcGRvd24oYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogTnVtYmVyKHZhbHVlKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGVkIHRvIHVwZGF0ZSB0aGUgbmV0d29yayB3aXRoIHRoZSBuZXcgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGUodmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBhcmVudC5ib2R5ICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIgJiZcbiAgICAgIHRoaXMucGFyZW50LmJvZHkuZW1pdHRlci5lbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdChcImNvbmZpZ0NoYW5nZVwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5wYXJlbnQuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IGJvb2xlYW59IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHt7fX0gb3B0aW9uc09ialxuICAgKiBAcmV0dXJucyB7e319XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCwgb3B0aW9uc09iaiA9IHt9KSB7XG4gICAgbGV0IHBvaW50ZXIgPSBvcHRpb25zT2JqO1xuXG4gICAgLy8gd2hlbiBkcm9wZG93biBib3hlcyBjYW4gYmUgc3RyaW5nIG9yIGJvb2xlYW4sIHdlIHR5cGVjYXN0IGl0IGludG8gY29ycmVjdCB0eXBlc1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdmFsdWU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXRoW2ldICE9PSBcImdsb2JhbFwiKSB7XG4gICAgICAgIGlmIChwb2ludGVyW3BhdGhbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBhdGgubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHBvaW50ZXIgPSBwb2ludGVyW3BhdGhbaV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvaW50ZXJbcGF0aFtpXV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc09iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByaW50T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG5cbiAgICB3aGlsZSAodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm9wdGlvbnNDb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChcbiAgICAgIHdyYXBJblRhZyhcInByZVwiLCBcImNvbnN0IG9wdGlvbnMgPSBcIiArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMsIG51bGwsIDIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge3t9fSBvcHRpb25zXG4gICAqL1xuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hhbmdlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2NvbnN0cnVjdE9wdGlvbnMoXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0udmFsdWUsXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0ucGF0aCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn07XG5cbi8qKlxuICogUG9wdXAgaXMgYSBjbGFzcyB0byBjcmVhdGUgYSBwb3B1cCB3aW5kb3cgd2l0aCBzb21lIHRleHRcbiAqL1xubGV0IFBvcHVwJDEgPSBjbGFzcyBQb3B1cCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgICAgICBUaGUgY29udGFpbmVyIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvdmVyZmxvd01ldGhvZCAgSG93IHRoZSBwb3B1cCBzaG91bGQgYWN0IHRvIG92ZXJmbG93aW5nICgnZmxpcCcgb3IgJ2NhcCcpXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIG92ZXJmbG93TWV0aG9kKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5vdmVyZmxvd01ldGhvZCA9IG92ZXJmbG93TWV0aG9kIHx8IFwiY2FwXCI7XG5cbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5wYWRkaW5nID0gNTtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBmcmFtZVxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtdG9vbHRpcFwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4ICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcG9wdXAgd2luZG93XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgc2V0UG9zaXRpb24oeCwgeSkge1xuICAgIHRoaXMueCA9IHBhcnNlSW50KHgpO1xuICAgIHRoaXMueSA9IHBhcnNlSW50KHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29udGVudCBmb3IgdGhlIHBvcHVwIHdpbmRvdy4gVGhpcyBjYW4gYmUgSFRNTCBjb2RlIG9yIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgRWxlbWVudH0gY29udGVudFxuICAgKi9cbiAgc2V0VGV4dChjb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICB3aGlsZSAodGhpcy5mcmFtZS5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0cmluZyBjb250YWluaW5nIGxpdGVyYWwgdGV4dCwgZWxlbWVudCBoYXMgdG8gYmUgdXNlZCBmb3IgSFRNTCBkdWUgdG9cbiAgICAgIC8vIFhTUyByaXNrcyBhc3NvY2lhdGVkIHdpdGggaW5uZXJIVE1MIChpLmUuIHByZXZlbnQgWFNTIGJ5IGFjY2lkZW50KS5cbiAgICAgIHRoaXMuZnJhbWUuaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgd2luZG93XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvU2hvd10gICAgU2hvdyBvciBoaWRlIHRoZSB3aW5kb3dcbiAgICovXG4gIHNob3coZG9TaG93KSB7XG4gICAgaWYgKGRvU2hvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb1Nob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkb1Nob3cgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmZyYW1lLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudFdpZHRoO1xuXG4gICAgICBsZXQgbGVmdCA9IDAsXG4gICAgICAgIHRvcCA9IDA7XG5cbiAgICAgIGlmICh0aGlzLm92ZXJmbG93TWV0aG9kID09IFwiZmxpcFwiKSB7XG4gICAgICAgIGxldCBpc0xlZnQgPSBmYWxzZSxcbiAgICAgICAgICBpc1RvcCA9IHRydWU7IC8vIFdoZXJlIGFyb3VuZCB0aGUgcG9zaXRpb24gaXQncyBsb2NhdGVkXG5cbiAgICAgICAgaWYgKHRoaXMueSAtIGhlaWdodCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzVG9wID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy54ICsgd2lkdGggPiBtYXhXaWR0aCAtIHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzTGVmdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMZWZ0KSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMueCAtIHdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUb3ApIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIGlmICh0b3AgKyBoZWlnaHQgKyB0aGlzLnBhZGRpbmcgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICB0b3AgPSBtYXhIZWlnaHQgLSBoZWlnaHQgLSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvcCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIHRvcCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIGlmIChsZWZ0ICsgd2lkdGggKyB0aGlzLnBhZGRpbmcgPiBtYXhXaWR0aCkge1xuICAgICAgICAgIGxlZnQgPSBtYXhXaWR0aCAtIHdpZHRoIC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWZ0IDwgdGhpcy5wYWRkaW5nKSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcbiAgICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZSk7IC8vIFJlbW92ZSBlbGVtZW50IGZyb20gRE9NXG4gIH1cbn07XG5cbmxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5sZXQgYWxsT3B0aW9ucztcblxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDEgPSBcImJhY2tncm91bmQ6ICNGRmVlZWU7IGNvbG9yOiAjZGQwMDAwXCI7XG5cbi8qKlxuICogIFVzZWQgdG8gdmFsaWRhdGUgb3B0aW9ucy5cbiAqL1xubGV0IFZhbGlkYXRvciQxID0gY2xhc3MgVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWJPYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBzdWJPYmplY3QpIHtcbiAgICBlcnJvckZvdW5kID0gZmFsc2U7XG4gICAgYWxsT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgbGV0IHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9ucztcbiAgICBpZiAoc3ViT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9uc1tzdWJPYmplY3RdO1xuICAgIH1cbiAgICBWYWxpZGF0b3IucGFyc2Uob3B0aW9ucywgdXNlZE9wdGlvbnMsIFtdKTtcbiAgICByZXR1cm4gZXJyb3JGb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIHRyYXZlcnNlIGFuIG9iamVjdCByZWN1cnNpdmVseSBhbmQgY2hlY2sgZXZlcnkgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICAgIFZhbGlkYXRvci5jaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBldmVyeSB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbCB0aGUgcGFyc2UgZnVuY3Rpb24gb24gdGhhdCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpIHtcbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIFZhbGlkYXRvci5nZXRTdWdnZXN0aW9uKG9wdGlvbiwgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlZmVyZW5jZU9wdGlvbiA9IG9wdGlvbjtcbiAgICBsZXQgaXNfb2JqZWN0ID0gdHJ1ZTtcblxuICAgIGlmIChcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnNbb3B0aW9uXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICByZWZlcmVuY2VPcHRpb25zLl9fYW55X18gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTk9URTogVGhpcyBvbmx5IHRyaWdnZXJzIGlmIHRoZSBfX2FueV9fIGlzIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgLy8gICAgICAgVEhBVCdTIEEgUkVBTExZIEJBRCBQTEFDRSBUTyBBTExPVyBJVCEhISFcbiAgICAgIC8vIFRPRE86IEV4YW1pbmUgaWYgbmVlZGVkLCByZW1vdmUgaWYgcG9zc2libGVcblxuICAgICAgLy8gX19hbnlfXyBpcyBhIHdpbGRjYXJkLiBBbnkgdmFsdWUgaXMgYWNjZXB0ZWQgYW5kIHdpbGwgYmUgZnVydGhlciBhbmFseXNlZCBieSByZWZlcmVuY2UuXG4gICAgICByZWZlcmVuY2VPcHRpb24gPSBcIl9fYW55X19cIjtcblxuICAgICAgLy8gaWYgdGhlIGFueS1zdWJncm91cCBpcyBub3QgYSBwcmVkZWZpbmVkIG9iamVjdCBpbiB0aGUgY29uZmlndXJhdG9yLFxuICAgICAgLy8gd2UgZG8gbm90IGxvb2sgZGVlcGVyIGludG8gdGhlIG9iamVjdC5cbiAgICAgIGlzX29iamVjdCA9IFZhbGlkYXRvci5nZXRUeXBlKG9wdGlvbnNbb3B0aW9uXSkgPT09IFwib2JqZWN0XCI7XG4gICAgfVxuXG4gICAgbGV0IHJlZk9wdGlvbk9iaiA9IHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXTtcbiAgICBpZiAoaXNfb2JqZWN0ICYmIHJlZk9wdGlvbk9iai5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWZPcHRpb25PYmogPSByZWZPcHRpb25PYmouX190eXBlX187XG4gICAgfVxuXG4gICAgVmFsaWRhdG9yLmNoZWNrRmllbGRzKFxuICAgICAgb3B0aW9uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb24sXG4gICAgICByZWZPcHRpb25PYmosXG4gICAgICBwYXRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIG9wdGlvbiAgICAgICAgICAgfCB0aGUgb3B0aW9uIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgb3B0aW9ucyAgICAgICAgICB8IFRoZSBzdXBwbGllZCBvcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge29iamVjdH0gIHJlZmVyZW5jZU9wdGlvbnMgfCBUaGUgcmVmZXJlbmNlIG9wdGlvbnMgY29udGFpbmluZyBhbGwgb3B0aW9ucyBhbmQgdGhlaXIgYWxsb3dlZCBmb3JtYXRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgcmVmZXJlbmNlT3B0aW9uICB8IFVzdWFsbHkgdGhpcyBpcyB0aGUgc2FtZSBhcyBvcHRpb24sIGV4Y2VwdCB3aGVuIGhhbmRsaW5nIGFuIF9fYW55X18gdGFnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZk9wdGlvbk9iaiAgICAgfCBUaGlzIGlzIHRoZSB0eXBlIG9iamVjdCBmcm9tIHRoZSByZWZlcmVuY2Ugb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSAgIHBhdGggICAgICAgICAgICAgfCB3aGVyZSBpbiB0aGUgb2JqZWN0IGlzIHRoZSBvcHRpb25cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNoZWNrRmllbGRzKFxuICAgIG9wdGlvbixcbiAgICBvcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgIHJlZk9wdGlvbk9iaixcbiAgICBwYXRoXG4gICkge1xuICAgIGNvbnN0IGxvZyA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjXCIgKyBtZXNzYWdlICsgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKSxcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvblR5cGUgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pO1xuICAgIGNvbnN0IHJlZk9wdGlvblR5cGUgPSByZWZPcHRpb25PYmpbb3B0aW9uVHlwZV07XG5cbiAgICBpZiAocmVmT3B0aW9uVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpZiB0aGUgdHlwZSBpcyBjb3JyZWN0LCB3ZSBjaGVjayBpZiBpdCBpcyBzdXBwb3NlZCB0byBiZSBvbmUgb2YgYSBmZXcgc2VsZWN0IHZhbHVlc1xuICAgICAgaWYgKFxuICAgICAgICBWYWxpZGF0b3IuZ2V0VHlwZShyZWZPcHRpb25UeXBlKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgIHJlZk9wdGlvblR5cGUuaW5kZXhPZihvcHRpb25zW29wdGlvbl0pID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICAnSW52YWxpZCBvcHRpb24gZGV0ZWN0ZWQgaW4gXCInICtcbiAgICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgICAnXCIuJyArXG4gICAgICAgICAgICBcIiBBbGxvd2VkIHZhbHVlcyBhcmU6XCIgK1xuICAgICAgICAgICAgVmFsaWRhdG9yLnByaW50KHJlZk9wdGlvblR5cGUpICtcbiAgICAgICAgICAgICcgbm90IFwiJyArXG4gICAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICAgJ1wiLiAnXG4gICAgICAgICk7XG4gICAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25UeXBlID09PSBcIm9iamVjdFwiICYmIHJlZmVyZW5jZU9wdGlvbiAhPT0gXCJfX2FueV9fXCIpIHtcbiAgICAgICAgcGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcHRpb24pO1xuICAgICAgICBWYWxpZGF0b3IucGFyc2UoXG4gICAgICAgICAgb3B0aW9uc1tvcHRpb25dLFxuICAgICAgICAgIHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWZPcHRpb25PYmpbXCJhbnlcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdHlwZSBvZiB0aGUgZmllbGQgaXMgaW5jb3JyZWN0IGFuZCB0aGUgZmllbGQgY2Fubm90IGJlIGFueVxuICAgICAgbG9nKFxuICAgICAgICAnSW52YWxpZCB0eXBlIHJlY2VpdmVkIGZvciBcIicgK1xuICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgJ1wiLiBFeHBlY3RlZDogJyArXG4gICAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKHJlZk9wdGlvbk9iaikpICtcbiAgICAgICAgICBcIi4gUmVjZWl2ZWQgW1wiICtcbiAgICAgICAgICBvcHRpb25UeXBlICtcbiAgICAgICAgICAnXSBcIicgK1xuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSArXG4gICAgICAgICAgJ1wiJ1xuICAgICAgKTtcbiAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcgfCBBcnJheS48bnVtYmVyPiB8IERhdGUgfCBOb2RlIHwgTW9tZW50IHwgdW5kZWZpbmVkIHwgbnVsbH0gb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRUeXBlKG9iamVjdCkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xuXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Lm5vZGVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFwiZG9tXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Ll9pc0FNb21lbnRPYmplY3QgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIFwibW9tZW50XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRTdWdnZXN0aW9uKG9wdGlvbiwgb3B0aW9ucywgcGF0aCkge1xuICAgIGNvbnN0IGxvY2FsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCBmYWxzZSk7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBhbGxPcHRpb25zLCBbXSwgdHJ1ZSk7XG5cbiAgICBjb25zdCBsb2NhbFNlYXJjaFRocmVzaG9sZCA9IDg7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoVGhyZXNob2xkID0gNDtcblxuICAgIGxldCBtc2c7XG4gICAgaWYgKGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgJ1BlcmhhcHMgaXQgd2FzIGluY29tcGxldGU/IERpZCB5b3UgbWVhbjogXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guaW5kZXhNYXRjaCArXG4gICAgICAgICdcIj9cXG5cXG4nO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBnbG9iYWxTZWFyY2guZGlzdGFuY2UgPD0gZ2xvYmFsU2VhcmNoVGhyZXNob2xkICYmXG4gICAgICBsb2NhbFNlYXJjaC5kaXN0YW5jZSA+IGdsb2JhbFNlYXJjaC5kaXN0YW5jZVxuICAgICkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgXCJQZXJoYXBzIGl0IHdhcyBtaXNwbGFjZWQ/IE1hdGNoaW5nIG9wdGlvbiBmb3VuZCBhdDogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihcbiAgICAgICAgICBnbG9iYWxTZWFyY2gucGF0aCxcbiAgICAgICAgICBnbG9iYWxTZWFyY2guY2xvc2VzdE1hdGNoLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxvY2FsU2VhcmNoLmRpc3RhbmNlIDw9IGxvY2FsU2VhcmNoVGhyZXNob2xkKSB7XG4gICAgICBtc2cgPVxuICAgICAgICAnLiBEaWQgeW91IG1lYW4gXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guY2xvc2VzdE1hdGNoICtcbiAgICAgICAgJ1wiPycgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPVxuICAgICAgICBcIi4gRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZTogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnQoT2JqZWN0LmtleXMob3B0aW9ucykpICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6IFwiJyArIG9wdGlvbiArICdcIicgKyBtc2csXG4gICAgICBWQUxJREFUT1JfUFJJTlRfU1RZTEUkMVxuICAgICk7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2UgdGhlIG9wdGlvbnMgaW4gc2VhcmNoIGZvciBhIG1hdGNoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWN1cnNpdmU9ZmFsc2VdXG4gICAqIEByZXR1cm5zIHt7Y2xvc2VzdE1hdGNoOiBzdHJpbmcsIHBhdGg6IEFycmF5LCBkaXN0YW5jZTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCByZWN1cnNpdmUgPSBmYWxzZSkge1xuICAgIGxldCBtaW4gPSAxZTk7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaCA9IFwiXCI7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaFBhdGggPSBbXTtcbiAgICBjb25zdCBsb3dlckNhc2VPcHRpb24gPSBvcHRpb24udG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgaW5kZXhNYXRjaCA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IG9wIGluIG9wdGlvbnMpIHtcbiAgICAgIGxldCBkaXN0YW5jZTtcbiAgICAgIGlmIChvcHRpb25zW29wXS5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkICYmIHJlY3Vyc2l2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBWYWxpZGF0b3IuZmluZEluT3B0aW9ucyhcbiAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgb3B0aW9uc1tvcF0sXG4gICAgICAgICAgY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIG9wKVxuICAgICAgICApO1xuICAgICAgICBpZiAobWluID4gcmVzdWx0LmRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gcmVzdWx0LmNsb3Nlc3RNYXRjaDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gcmVzdWx0LnBhdGg7XG4gICAgICAgICAgbWluID0gcmVzdWx0LmRpc3RhbmNlO1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSByZXN1bHQuaW5kZXhNYXRjaDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihsb3dlckNhc2VPcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSBvcDtcbiAgICAgICAgfVxuICAgICAgICBkaXN0YW5jZSA9IFZhbGlkYXRvci5sZXZlbnNodGVpbkRpc3RhbmNlKG9wdGlvbiwgb3ApO1xuICAgICAgICBpZiAobWluID4gZGlzdGFuY2UpIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2ggPSBvcDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gY29weUFycmF5KHBhdGgpO1xuICAgICAgICAgIG1pbiA9IGRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZXN0TWF0Y2g6IGNsb3Nlc3RNYXRjaCxcbiAgICAgIHBhdGg6IGNsb3Nlc3RNYXRjaFBhdGgsXG4gICAgICBkaXN0YW5jZTogbWluLFxuICAgICAgaW5kZXhNYXRjaDogaW5kZXhNYXRjaCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiwgcHJlZml4ID0gXCJQcm9ibGVtIHZhbHVlIGZvdW5kIGF0OiBcXG5cIikge1xuICAgIGxldCBzdHIgPSBcIlxcblxcblwiICsgcHJlZml4ICsgXCJvcHRpb25zID0ge1xcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpICsgMTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gcGF0aFtpXSArIFwiOiB7XFxuXCI7XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggKyAxOyBqKyspIHtcbiAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgfVxuICAgIHN0ciArPSBvcHRpb24gKyBcIlxcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggLSBpOyBqKyspIHtcbiAgICAgICAgc3RyICs9IFwiICBcIjtcbiAgICAgIH1cbiAgICAgIHN0ciArPSBcIn1cXG5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0ciArIFwiXFxuXFxuXCI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHByaW50KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3B0aW9ucylcbiAgICAgIC5yZXBsYWNlKC8oXCIpfChcXFspfChcXF0pfCgsXCJfX3R5cGVfX1wiKS9nLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoLygsKS9nLCBcIiwgXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqICBDb21wdXRlIHRoZSBlZGl0IGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBnaXZlbiBzdHJpbmdzXG4gICAqIGh0dHA6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL1N0cmluZ3MvTGV2ZW5zaHRlaW5fZGlzdGFuY2UjSmF2YVNjcmlwdFxuICAgKlxuICAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQW5kcmVpIE1hY2tlbnppZVxuICAgKlxuICAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgKlxuICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgICpcbiAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGxldmVuc2h0ZWluRGlzdGFuY2UoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGEubGVuZ3RoO1xuXG4gICAgY29uc3QgbWF0cml4ID0gW107XG5cbiAgICAvLyBpbmNyZW1lbnQgYWxvbmcgdGhlIGZpcnN0IGNvbHVtbiBvZiBlYWNoIHJvd1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4W2ldID0gW2ldO1xuICAgIH1cblxuICAgIC8vIGluY3JlbWVudCBlYWNoIGNvbHVtbiBpbiB0aGUgZmlyc3Qgcm93XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cblxuICAgIC8vIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIG1hdHJpeFxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT0gYS5jaGFyQXQoaiAtIDEpKSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2kgLSAxXVtqIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgICAgICBtYXRyaXhbaSAtIDFdW2ogLSAxXSArIDEsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgIG1hdHJpeFtpXVtqIC0gMV0gKyAxLCAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqXSArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApOyAvLyBkZWxldGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xuICB9XG59O1xuXG5jb25zdCBBY3RpdmF0b3IgPSBBY3RpdmF0b3IkMTtcclxuY29uc3QgQ29sb3JQaWNrZXIgPSBDb2xvclBpY2tlciQxO1xyXG5jb25zdCBDb25maWd1cmF0b3IgPSBDb25maWd1cmF0b3IkMTtcclxuY29uc3QgSGFtbWVyID0gSGFtbWVyJDE7XHJcbmNvbnN0IFBvcHVwID0gUG9wdXAkMTtcclxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFID0gVkFMSURBVE9SX1BSSU5UX1NUWUxFJDE7XHJcbmNvbnN0IFZhbGlkYXRvciA9IFZhbGlkYXRvciQxO1xuXG5leHBvcnQgeyBBY3RpdmF0b3IsIEFsZWEsIENvbG9yUGlja2VyLCBDb25maWd1cmF0b3IsIERFTEVURSwgSFNWVG9IZXgsIEhTVlRvUkdCLCBIYW1tZXIsIFBvcHVwLCBSR0JUb0hTViwgUkdCVG9IZXgsIFZBTElEQVRPUl9QUklOVF9TVFlMRSwgVmFsaWRhdG9yLCBhZGRDbGFzc05hbWUsIGFkZENzc1RleHQsIGJpbmFyeVNlYXJjaEN1c3RvbSwgYmluYXJ5U2VhcmNoVmFsdWUsIGJyaWRnZU9iamVjdCwgY29weUFuZEV4dGVuZEFycmF5LCBjb3B5QXJyYXksIGRlZXBFeHRlbmQsIGRlZXBPYmplY3RBc3NpZ24sIGVhc2luZ0Z1bmN0aW9ucywgZXF1YWxBcnJheSwgZXh0ZW5kLCBmaWxsSWZEZWZpbmVkLCBmb3JFYWNoLCBnZXRBYnNvbHV0ZUxlZnQsIGdldEFic29sdXRlUmlnaHQsIGdldEFic29sdXRlVG9wLCBnZXRTY3JvbGxCYXJXaWR0aCwgZ2V0VGFyZ2V0LCBnZXRUeXBlLCBoYXNQYXJlbnQsIGhleFRvSFNWLCBoZXhUb1JHQiwgaW5zZXJ0U29ydCwgaXNEYXRlLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1ZhbGlkSGV4LCBpc1ZhbGlkUkdCLCBpc1ZhbGlkUkdCQSwgbWVyZ2VPcHRpb25zLCBvcHRpb24sIG92ZXJyaWRlT3BhY2l0eSwgcGFyc2VDb2xvciwgcHJldmVudERlZmF1bHQsIHB1cmVEZWVwT2JqZWN0QXNzaWduLCByZWN1cnNpdmVET01EZWxldGUsIHJlbW92ZUNsYXNzTmFtZSwgcmVtb3ZlQ3NzVGV4dCwgc2VsZWN0aXZlQnJpZGdlT2JqZWN0LCBzZWxlY3RpdmVEZWVwRXh0ZW5kLCBzZWxlY3RpdmVFeHRlbmQsIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsIHRocm90dGxlLCB0b0FycmF5LCB0b3BNb3N0LCB1cGRhdGVQcm9wZXJ0eSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmlzLXV0aWwuanMubWFwXG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ29uc3RydWN0b3IoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xudmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgbmF0aXZlQ29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgUmVmbGVjdC5jb25zdHJ1Y3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmNvbnN0cnVjdFxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEobmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcblxudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxudmFyIEZPUkNFRCA9IE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHO1xuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiBGT1JDRUQgfSwge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhQ29uc3RydWN0b3IoVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhQ29uc3RydWN0b3IoYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gbmF0aXZlQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICBhcHBseShwdXNoLCAkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChhcHBseShiaW5kLCBUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3RQcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBhcHBseShUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5SZWZsZWN0LmNvbnN0cnVjdDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xufTtcblxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSkgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGtleSwgZGVzY3JpcHRvcjtcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkgPSBrZXlzW2luZGV4KytdKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgIT09IGRlZmluZVByb3BlcnRpZXMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnRpZXM6IGRlZmluZVByb3BlcnRpZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoVCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVCwgRCk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMuc2hhbSkgZGVmaW5lUHJvcGVydGllcy5zaGFtID0gdHJ1ZTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL29iamVjdC9jcmVhdGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIHNldFByb3RvdHlwZU9mOiBzZXRQcm90b3R5cGVPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfc2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRzZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkY3JlYXRlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG4iLCAiaW1wb3J0IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmltcG9ydCBfT2JqZWN0JGdldFByb3RvdHlwZU9mIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIHZhciBfY29udGV4dDtcbiAgX2dldFByb3RvdHlwZU9mID0gX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3QkZ2V0UHJvdG90eXBlT2YpLmNhbGwoX2NvbnRleHQpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgX09iamVjdCRnZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCAidmFyIF9TeW1ib2wgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiKTtcbnZhciBfU3ltYm9sJGl0ZXJhdG9yID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanNcIik7XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IF9TeW1ib2wgJiYgbyAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL2Zvci1lYWNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbi8vIGBJbnN0YWxsRXJyb3JDYXVzZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtZXJyb3ItY2F1c2UvI3NlYy1lcnJvcm9iamVjdHMtaW5zdGFsbC1lcnJvci1jYXVzZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgb3B0aW9ucykge1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgJ2NhdXNlJyBpbiBvcHRpb25zKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE8sICdjYXVzZScsIG9wdGlvbnMuY2F1c2UpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcblxudmFyIFRFU1QgPSAoZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gU3RyaW5nKG5ldyAkRXJyb3IoYXJnKS5zdGFjayk7IH0pKCd6eGNhc2QnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbnZhciBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkgPSAvXFxuXFxzKmF0IFteOl0qOlteXFxuXSovO1xudmFyIElTX1Y4X09SX0NIQUtSQV9TVEFDSyA9IFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWS50ZXN0KFRFU1QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKElTX1Y4X09SX0NIQUtSQV9TVEFDSyAmJiB0eXBlb2Ygc3RhY2sgPT0gJ3N0cmluZycgJiYgISRFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuICAgIHdoaWxlIChkcm9wRW50cmllcy0tKSBzdGFjayA9IHJlcGxhY2Uoc3RhY2ssIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSwgJycpO1xuICB9IHJldHVybiBzdGFjaztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdhJyk7XG4gIGlmICghKCdzdGFjaycgaW4gZXJyb3IpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIDcpKTtcbiAgcmV0dXJuIGVycm9yLnN0YWNrICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjbGVhckVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXInKTtcbnZhciBFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZScpO1xuXG4vLyBub24tc3RhbmRhcmQgVjhcbnZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlcnJvciwgQywgc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSkge1xuICAgIGlmIChjYXB0dXJlU3RhY2tUcmFjZSkgY2FwdHVyZVN0YWNrVHJhY2UoZXJyb3IsIEMpO1xuICAgIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjbGVhckVycm9yU3RhY2soc3RhY2ssIGRyb3BFbnRyaWVzKSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbnZhciBSZXN1bHRQcm90b3R5cGUgPSBSZXN1bHQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgdW5ib3VuZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gIHZhciB0aGF0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoYXQ7XG4gIHZhciBBU19FTlRSSUVTID0gISEob3B0aW9ucyAmJiBvcHRpb25zLkFTX0VOVFJJRVMpO1xuICB2YXIgSVNfUkVDT1JEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX1JFQ09SRCk7XG4gIHZhciBJU19JVEVSQVRPUiA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19JVEVSQVRPUik7XG4gIHZhciBJTlRFUlJVUFRFRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JTlRFUlJVUFRFRCk7XG4gIHZhciBmbiA9IGJpbmQodW5ib3VuZEZ1bmN0aW9uLCB0aGF0KTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICB2YXIgc3RvcCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBjb25kaXRpb24pO1xuICAgIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIGNvbmRpdGlvbik7XG4gIH07XG5cbiAgdmFyIGNhbGxGbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChBU19FTlRSSUVTKSB7XG4gICAgICBhbk9iamVjdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZVswXSwgdmFsdWVbMV0sIHN0b3ApIDogZm4odmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICB9IHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlLCBzdG9wKSA6IGZuKHZhbHVlKTtcbiAgfTtcblxuICBpZiAoSVNfUkVDT1JEKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZS5pdGVyYXRvcjtcbiAgfSBlbHNlIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICghaXRlckZuKSB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhpdGVyYWJsZSkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlcmFibGUpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBjYWxsRm4oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlLCBpdGVyRm4pO1xuICB9XG5cbiAgbmV4dCA9IElTX1JFQ09SRCA/IGl0ZXJhYmxlLm5leHQgOiBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBpbnN0YWxsRXJyb3JDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlJyk7XG52YXIgaW5zdGFsbEVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJEVycm9yID0gRXJyb3I7XG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbnZhciAkQWdncmVnYXRlRXJyb3IgPSBmdW5jdGlvbiBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIG1lc3NhZ2UgLyogLCBvcHRpb25zICovKSB7XG4gIHZhciBpc0luc3RhbmNlID0gaXNQcm90b3R5cGVPZihBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSwgdGhpcyk7XG4gIHZhciB0aGF0O1xuICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICB0aGF0ID0gc2V0UHJvdG90eXBlT2YobmV3ICRFcnJvcigpLCBpc0luc3RhbmNlID8gZ2V0UHJvdG90eXBlT2YodGhpcykgOiBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhhdCA9IGlzSW5zdGFuY2UgPyB0aGlzIDogY3JlYXRlKEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlKTtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgVE9fU1RSSU5HX1RBRywgJ0Vycm9yJyk7XG4gIH1cbiAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdtZXNzYWdlJywgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQobWVzc2FnZSkpO1xuICBpbnN0YWxsRXJyb3JTdGFjayh0aGF0LCAkQWdncmVnYXRlRXJyb3IsIHRoYXQuc3RhY2ssIDEpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIGluc3RhbGxFcnJvckNhdXNlKHRoYXQsIGFyZ3VtZW50c1syXSk7XG4gIHZhciBlcnJvcnNBcnJheSA9IFtdO1xuICBpdGVyYXRlKGVycm9ycywgcHVzaCwgeyB0aGF0OiBlcnJvcnNBcnJheSB9KTtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdlcnJvcnMnLCBlcnJvcnNBcnJheSk7XG4gIHJldHVybiB0aGF0O1xufTtcblxuaWYgKHNldFByb3RvdHlwZU9mKSBzZXRQcm90b3R5cGVPZigkQWdncmVnYXRlRXJyb3IsICRFcnJvcik7XG5lbHNlIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoJEFnZ3JlZ2F0ZUVycm9yLCAkRXJyb3IsIHsgbmFtZTogdHJ1ZSB9KTtcblxudmFyIEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlID0gJEFnZ3JlZ2F0ZUVycm9yLnByb3RvdHlwZSA9IGNyZWF0ZSgkRXJyb3IucHJvdG90eXBlLCB7XG4gIGNvbnN0cnVjdG9yOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJEFnZ3JlZ2F0ZUVycm9yKSxcbiAgbWVzc2FnZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICcnKSxcbiAgbmFtZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICdBZ2dyZWdhdGVFcnJvcicpXG59KTtcblxuLy8gYEFnZ3JlZ2F0ZUVycm9yYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZ2dyZWdhdGUtZXJyb3ItY29uc3RydWN0b3JcbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBhcml0eTogMiB9LCB7XG4gIEFnZ3JlZ2F0ZUVycm9yOiAkQWdncmVnYXRlRXJyb3Jcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIHNldCA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIEZ1bmN0aW9uID0gZ2xvYmFsLkZ1bmN0aW9uO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciAkbG9jYXRpb24sIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG5mYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIERlbm8gdGhyb3dzIGEgUmVmZXJlbmNlRXJyb3Igb24gYGxvY2F0aW9uYCBhY2Nlc3Mgd2l0aG91dCBgLS1sb2NhdGlvbmAgZmxhZ1xuICAkbG9jYXRpb24gPSBnbG9iYWwubG9jYXRpb247XG59KTtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICBpZiAoaGFzT3duKHF1ZXVlLCBpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBldmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBnbG9iYWxQb3N0TWVzc2FnZURlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWwucG9zdE1lc3NhZ2UoU3RyaW5nKGlkKSwgJGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArICRsb2NhdGlvbi5ob3N0KTtcbn07XG5cbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0IHx8ICFjbGVhcikge1xuICBzZXQgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoaGFuZGxlcikge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwcGx5KGZuLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKElTX05PREUpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZXZlbnRMaXN0ZW5lcjtcbiAgICBkZWZlciA9IGJpbmQocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKFxuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmXG4gICAgaXNDYWxsYWJsZShnbG9iYWwucG9zdE1lc3NhZ2UpICYmXG4gICAgIWdsb2JhbC5pbXBvcnRTY3JpcHRzICYmXG4gICAgJGxvY2F0aW9uICYmICRsb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgICFmYWlscyhnbG9iYWxQb3N0TWVzc2FnZURlZmVyKVxuICApIHtcbiAgICBkZWZlciA9IGdsb2JhbFBvc3RNZXNzYWdlRGVmZXI7XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudExpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCBpc051bGxPclVuZGVmaW5lZChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUNvbnN0cnVjdG9yKFMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gLyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaGVhZCA9IG51bGw7XG4gIHRoaXMudGFpbCA9IG51bGw7XG59O1xuXG5RdWV1ZS5wcm90b3R5cGUgPSB7XG4gIGFkZDogZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB2YXIgZW50cnkgPSB7IGl0ZW06IGl0ZW0sIG5leHQ6IG51bGwgfTtcbiAgICB2YXIgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBpZiAodGFpbCkgdGFpbC5uZXh0ID0gZW50cnk7XG4gICAgZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5oZWFkO1xuICAgIGlmIChlbnRyeSkge1xuICAgICAgdmFyIG5leHQgPSB0aGlzLmhlYWQgPSBlbnRyeS5uZXh0O1xuICAgICAgaWYgKG5leHQgPT09IG51bGwpIHRoaXMudGFpbCA9IG51bGw7XG4gICAgICByZXR1cm4gZW50cnkuaXRlbTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUXVldWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfSU9TX1BFQkJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZScpO1xudmFyIElTX1dFQk9TX1dFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0Jyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG4vLyBOb2RlLmpzIDExIHNob3dzIEV4cGVyaW1lbnRhbFdhcm5pbmcgb24gZ2V0dGluZyBgcXVldWVNaWNyb3Rhc2tgXG52YXIgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgbWljcm90YXNrID0gcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yICYmIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvci52YWx1ZTtcbnZhciBub3RpZnksIHRvZ2dsZSwgbm9kZSwgcHJvbWlzZSwgdGhlbjtcblxuLy8gbW9kZXJuIGVuZ2luZXMgaGF2ZSBxdWV1ZU1pY3JvdGFzayBtZXRob2RcbmlmICghbWljcm90YXNrKSB7XG4gIHZhciBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChmbiA9IHF1ZXVlLmdldCgpKSB0cnkge1xuICAgICAgZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHF1ZXVlLmhlYWQpIG5vdGlmeSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgLy8gYWxzbyBleGNlcHQgV2ViT1MgV2Via2l0IGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84OThcbiAgaWYgKCFJU19JT1MgJiYgIUlTX05PREUgJiYgIUlTX1dFQk9TX1dFQktJVCAmJiBNdXRhdGlvbk9ic2VydmVyICYmIGRvY3VtZW50KSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoIUlTX0lPU19QRUJCTEUgJiYgUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAvLyB3b3JrYXJvdW5kIG9mIFdlYktpdCB+IGlPUyBTYWZhcmkgMTAuMSBidWdcbiAgICBwcm9taXNlLmNvbnN0cnVjdG9yID0gUHJvbWlzZTtcbiAgICB0aGVuID0gYmluZChwcm9taXNlLnRoZW4sIHByb21pc2UpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIE5vZGUuanMgd2l0aG91dCBwcm9taXNlc1xuICB9IGVsc2UgaWYgKElTX05PREUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdlXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIC8vIGB3ZWJwYWNrYCBkZXYgc2VydmVyIGJ1ZyBvbiBJRSBnbG9iYWwgbWV0aG9kcyAtIHVzZSBiaW5kKGZuLCBnbG9iYWwpXG4gICAgbWFjcm90YXNrID0gYmluZChtYWNyb3Rhc2ssIGdsb2JhbCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFjcm90YXNrKGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgbWljcm90YXNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgaWYgKCFxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICBxdWV1ZS5hZGQoZm4pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1pY3JvdGFzaztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KHVzZXJBZ2VudCkgJiYgdHlwZW9mIFBlYmJsZSAhPSAndW5kZWZpbmVkJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdCh1c2VyQWdlbnQpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIHZhbHVlOiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgdmFsdWU6IGVycm9yIH07XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuUHJvbWlzZTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgRGVubyAtLSBEZW5vIGNhc2UgKi9cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIERlbm8gPT0gJ29iamVjdCcgJiYgRGVubyAmJiB0eXBlb2YgRGVuby52ZXJzaW9uID09ICdvYmplY3QnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19ERU5PID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFJU19ERU5PICYmICFJU19OT0RFXG4gICYmIHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCdcbiAgJiYgdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19CUk9XU0VSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyJyk7XG52YXIgSVNfREVOTyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtZGVubycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgU1VCQ0xBU1NJTkcgPSBmYWxzZTtcbnZhciBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgPSBpc0NhbGxhYmxlKGdsb2JhbC5Qcm9taXNlUmVqZWN0aW9uRXZlbnQpO1xuXG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSBpc0ZvcmNlZCgnUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFID0gaW5zcGVjdFNvdXJjZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpO1xuICB2YXIgR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSA9IFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFICE9PSBTdHJpbmcoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgLy8gVjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgLy8gV2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgaWYgKCFHTE9CQUxfQ09SRV9KU19QUk9NSVNFICYmIFY4X1ZFUlNJT04gPT09IDY2KSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgbmVlZCBQcm9taXNlI3sgY2F0Y2gsIGZpbmFsbHkgfSBpbiB0aGUgcHVyZSB2ZXJzaW9uIGZvciBwcmV2ZW50aW5nIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgaWYgKElTX1BVUkUgJiYgIShOYXRpdmVQcm9taXNlUHJvdG90eXBlWydjYXRjaCddICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSkpIHJldHVybiB0cnVlO1xuICAvLyBXZSBjYW4ndCB1c2UgQEBzcGVjaWVzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxuICBpZiAoIVY4X1ZFUlNJT04gfHwgVjhfVkVSU0lPTiA8IDUxIHx8ICEvbmF0aXZlIGNvZGUvLnRlc3QoUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UpKSB7XG4gICAgLy8gRGV0ZWN0IGNvcnJlY3RuZXNzIG9mIHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSgxKTsgfSk7XG4gICAgdmFyIEZha2VQcm9taXNlID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICAgIH07XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gRmFrZVByb21pc2U7XG4gICAgU1VCQ0xBU1NJTkcgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlO1xuICAgIGlmICghU1VCQ0xBU1NJTkcpIHJldHVybiB0cnVlO1xuICAvLyBVbmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gIH0gcmV0dXJuICFHTE9CQUxfQ09SRV9KU19QUk9NSVNFICYmIChJU19CUk9XU0VSIHx8IElTX0RFTk8pICYmICFOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENPTlNUUlVDVE9SOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUixcbiAgUkVKRUNUSU9OX0VWRU5UOiBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQsXG4gIFNVQkNMQVNTSU5HOiBTVUJDTEFTU0lOR1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFDYWxsYWJsZShyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhQ2FsbGFibGUocmVqZWN0KTtcbn07XG5cbi8vIGBOZXdQcm9taXNlQ2FwYWJpbGl0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW5ld3Byb21pc2VjYXBhYmlsaXR5XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9taWNyb3Rhc2snKTtcbnZhciBob3N0UmVwb3J0RXJyb3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycycpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIFF1ZXVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3F1ZXVlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uQ09OU1RSVUNUT1I7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLlJFSkVDVElPTl9FVkVOVDtcbnZhciBOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORyA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5TVUJDTEFTU0lORztcbnZhciBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFBST01JU0UpO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yO1xudmFyIFByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcbnZhciBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eTtcblxudmFyIERJU1BBVENIX0VWRU5UID0gISEoZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRXZlbnQgJiYgZ2xvYmFsLmRpc3BhdGNoRXZlbnQpO1xudmFyIFVOSEFORExFRF9SRUpFQ1RJT04gPSAndW5oYW5kbGVkcmVqZWN0aW9uJztcbnZhciBSRUpFQ1RJT05fSEFORExFRCA9ICdyZWplY3Rpb25oYW5kbGVkJztcbnZhciBQRU5ESU5HID0gMDtcbnZhciBGVUxGSUxMRUQgPSAxO1xudmFyIFJFSkVDVEVEID0gMjtcbnZhciBIQU5ETEVEID0gMTtcbnZhciBVTkhBTkRMRUQgPSAyO1xuXG52YXIgSW50ZXJuYWwsIE93blByb21pc2VDYXBhYmlsaXR5LCBQcm9taXNlV3JhcHBlciwgbmF0aXZlVGhlbjtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgaXNDYWxsYWJsZSh0aGVuID0gaXQudGhlbikgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgY2FsbFJlYWN0aW9uID0gZnVuY3Rpb24gKHJlYWN0aW9uLCBzdGF0ZSkge1xuICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT09IEZVTEZJTExFRDtcbiAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gIHRyeSB7XG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGlmICghb2spIHtcbiAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChzdGF0ZSk7XG4gICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICBjYWxsKHRoZW4sIHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgIHJlamVjdChlcnJvcik7XG4gIH1cbn07XG5cbnZhciBub3RpZnkgPSBmdW5jdGlvbiAoc3RhdGUsIGlzUmVqZWN0KSB7XG4gIGlmIChzdGF0ZS5ub3RpZmllZCkgcmV0dXJuO1xuICBzdGF0ZS5ub3RpZmllZCA9IHRydWU7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlYWN0aW9ucyA9IHN0YXRlLnJlYWN0aW9ucztcbiAgICB2YXIgcmVhY3Rpb247XG4gICAgd2hpbGUgKHJlYWN0aW9uID0gcmVhY3Rpb25zLmdldCgpKSB7XG4gICAgICBjYWxsUmVhY3Rpb24ocmVhY3Rpb24sIHN0YXRlKTtcbiAgICB9XG4gICAgc3RhdGUubm90aWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXN0YXRlLnJlamVjdGlvbikgb25VbmhhbmRsZWQoc3RhdGUpO1xuICB9KTtcbn07XG5cbnZhciBkaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHByb21pc2UsIHJlYXNvbikge1xuICB2YXIgZXZlbnQsIGhhbmRsZXI7XG4gIGlmIChESVNQQVRDSF9FVkVOVCkge1xuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZlbnQucHJvbWlzZSA9IHByb21pc2U7XG4gICAgZXZlbnQucmVhc29uID0gcmVhc29uO1xuICAgIGV2ZW50LmluaXRFdmVudChuYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZ2xvYmFsLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9IGVsc2UgZXZlbnQgPSB7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcmVhc29uIH07XG4gIGlmICghTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UICYmIChoYW5kbGVyID0gZ2xvYmFsWydvbicgKyBuYW1lXSkpIGhhbmRsZXIoZXZlbnQpO1xuICBlbHNlIGlmIChuYW1lID09PSBVTkhBTkRMRURfUkVKRUNUSU9OKSBob3N0UmVwb3J0RXJyb3JzKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCByZWFzb24pO1xufTtcblxudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIElTX1VOSEFORExFRCA9IGlzVW5oYW5kbGVkKHN0YXRlKTtcbiAgICB2YXIgcmVzdWx0O1xuICAgIGlmIChJU19VTkhBTkRMRUQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChVTkhBTkRMRURfUkVKRUNUSU9OLCBwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBzdGF0ZS5yZWplY3Rpb24gPSBJU19OT0RFIHx8IGlzVW5oYW5kbGVkKHN0YXRlKSA/IFVOSEFORExFRCA6IEhBTkRMRUQ7XG4gICAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyByZXN1bHQudmFsdWU7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUucmVqZWN0aW9uICE9PSBIQU5ETEVEICYmICFzdGF0ZS5wYXJlbnQ7XG59O1xuXG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoUkVKRUNUSU9OX0hBTkRMRUQsIHByb21pc2UsIHN0YXRlLnZhbHVlKTtcbiAgfSk7XG59O1xuXG52YXIgYmluZCA9IGZ1bmN0aW9uIChmbiwgc3RhdGUsIHVud3JhcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZm4oc3RhdGUsIHZhbHVlLCB1bndyYXApO1xuICB9O1xufTtcblxudmFyIGludGVybmFsUmVqZWN0ID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgc3RhdGUuc3RhdGUgPSBSRUpFQ1RFRDtcbiAgbm90aWZ5KHN0YXRlLCB0cnVlKTtcbn07XG5cbnZhciBpbnRlcm5hbFJlc29sdmUgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICB0cnkge1xuICAgIGlmIChzdGF0ZS5mYWNhZGUgPT09IHZhbHVlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgdmFyIHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKTtcbiAgICBpZiAodGhlbikge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IGRvbmU6IGZhbHNlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2FsbCh0aGVuLCB2YWx1ZSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZXNvbHZlLCB3cmFwcGVyLCBzdGF0ZSksXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVqZWN0LCB3cmFwcGVyLCBzdGF0ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGludGVybmFsUmVqZWN0KHdyYXBwZXIsIGVycm9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgc3RhdGUuc3RhdGUgPSBGVUxGSUxMRUQ7XG4gICAgICBub3RpZnkoc3RhdGUsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW50ZXJuYWxSZWplY3QoeyBkb25lOiBmYWxzZSB9LCBlcnJvciwgc3RhdGUpO1xuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gIFByb21pc2VDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIGFDYWxsYWJsZShleGVjdXRvcik7XG4gICAgY2FsbChJbnRlcm5hbCwgdGhpcyk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSksIGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGludGVybmFsUmVqZWN0KHN0YXRlLCBlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIFByb21pc2VQcm90b3R5cGUgPSBQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgdHlwZTogUFJPTUlTRSxcbiAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgbm90aWZpZWQ6IGZhbHNlLFxuICAgICAgcGFyZW50OiBmYWxzZSxcbiAgICAgIHJlYWN0aW9uczogbmV3IFF1ZXVlKCksXG4gICAgICByZWplY3Rpb246IGZhbHNlLFxuICAgICAgc3RhdGU6IFBFTkRJTkcsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG5cbiAgLy8gYFByb21pc2UucHJvdG90eXBlLnRoZW5gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLnRoZW5cbiAgSW50ZXJuYWwucHJvdG90eXBlID0gZGVmaW5lQnVpbHRJbihQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSh0aGlzKTtcbiAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgUHJvbWlzZUNvbnN0cnVjdG9yKSk7XG4gICAgc3RhdGUucGFyZW50ID0gdHJ1ZTtcbiAgICByZWFjdGlvbi5vayA9IGlzQ2FsbGFibGUob25GdWxmaWxsZWQpID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgIHJlYWN0aW9uLmZhaWwgPSBpc0NhbGxhYmxlKG9uUmVqZWN0ZWQpICYmIG9uUmVqZWN0ZWQ7XG4gICAgcmVhY3Rpb24uZG9tYWluID0gSVNfTk9ERSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0gUEVORElORykgc3RhdGUucmVhY3Rpb25zLmFkZChyZWFjdGlvbik7XG4gICAgZWxzZSBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gIH0pO1xuXG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUocHJvbWlzZSk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpO1xuICAgIHRoaXMucmVqZWN0ID0gYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpO1xuICB9O1xuXG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikgJiYgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIG5hdGl2ZVRoZW4gPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLnRoZW47XG5cbiAgICBpZiAoIU5BVElWRV9QUk9NSVNFX1NVQkNMQVNTSU5HKSB7XG4gICAgICAvLyBtYWtlIGBQcm9taXNlI3RoZW5gIHJldHVybiBhIHBvbHlmaWxsZWQgYFByb21pc2VgIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBjYWxsKG5hdGl2ZVRoZW4sIHRoYXQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY0MFxuICAgICAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBgLmNvbnN0cnVjdG9yID09PSBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgdHJ5IHtcbiAgICAgIGRlbGV0ZSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICAgIC8vIG1ha2UgYGluc3RhbmNlb2YgUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgc2V0UHJvdG90eXBlT2YoTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBzYWZlXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxubW9kdWxlLmV4cG9ydHMgPSBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKS50aGVuKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5jYXRjaFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiwgcmVhbDogdHJ1ZSB9LCB7XG4gICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjY2F0Y2hgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSkge1xuICB2YXIgbWV0aG9kID0gZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnY2F0Y2gnXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2NhdGNoJywgbWV0aG9kLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgY2FsbChjYXBhYmlsaXR5LnJlamVjdCwgdW5kZWZpbmVkLCByKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcblxudmFyIFByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIgPSBnZXRCdWlsdEluKCdQcm9taXNlJyk7XG52YXIgQ0hFQ0tfV1JBUFBFUiA9IElTX1BVUkUgJiYgIUZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SO1xuXG4vLyBgUHJvbWlzZS5yZXNvbHZlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZXNvbHZlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB8fCBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDSEVDS19XUkFQUEVSICYmIHRoaXMgPT09IFByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIgPyBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbFNldHRsZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbHNldHRsZWRcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFsbFNldHRsZWQ6IGZ1bmN0aW9uIGFsbFNldHRsZWQoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbChwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ2Z1bGZpbGxlZCcsIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdyZWplY3RlZCcsIHJlYXNvbjogZXJyb3IgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG52YXIgUFJPTUlTRV9BTllfRVJST1IgPSAnTm8gb25lIHByb21pc2UgcmVzb2x2ZWQnO1xuXG4vLyBgUHJvbWlzZS5hbnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFueVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYW55OiBmdW5jdGlvbiBhbnkoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIEFnZ3JlZ2F0ZUVycm9yID0gZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKTtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICB2YXIgYWxyZWFkeVJlc29sdmVkID0gZmFsc2U7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5UmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3JzW2luZGV4XSA9IGVycm9yO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbi8vIFNhZmFyaSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgyOVxudmFyIE5PTl9HRU5FUklDID0gISFOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10aGVuYWJsZSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10uY2FsbCh7IHRoZW46IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuZmluYWxseVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBOT05fR0VORVJJQyB9LCB7XG4gICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKSk7XG4gICAgdmFyIGlzRnVuY3Rpb24gPSBpc0NhbGxhYmxlKG9uRmluYWxseSk7XG4gICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5LFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseVxuICAgICk7XG4gIH1cbn0pO1xuXG4vLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNmaW5hbGx5YCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2ZpbmFsbHknXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSAhPT0gbWV0aG9kKSB7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnZmluYWxseScsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFueScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5Qcm9taXNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG4vLyBgUHJvbWlzZS53aXRoUmVzb2x2ZXJzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2Utd2l0aC1yZXNvbHZlcnNcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHdpdGhSZXNvbHZlcnM6IGZ1bmN0aW9uIHdpdGhSZXNvbHZlcnMoKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvbWlzZTogcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZSxcbiAgICAgIHJlc29sdmU6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUsXG4gICAgICByZWplY3Q6IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdFxuICAgIH07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvcHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS53aXRoLXJlc29sdmVycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xuXG4vLyBgUHJvbWlzZS50cnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgICAocmVzdWx0LmVycm9yID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9wcm9taXNlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuYWdncmVnYXRlLWVycm9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLmFsbC1zZXR0bGVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS5hbnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3Byb21pc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvaW5zdGFuY2UvcmV2ZXJzZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvcmV2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiKTtcbnZhciBfU3ltYm9sID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIik7XG52YXIgX09iamVjdCRjcmVhdGUgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanNcIik7XG52YXIgX09iamVjdCRnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanNcIik7XG52YXIgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaC5qc1wiKTtcbnZhciBfcHVzaEluc3RhbmNlUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanNcIik7XG52YXIgX09iamVjdCRzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanNcIik7XG52YXIgX1Byb21pc2UgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3Byb21pc2UvaW5kZXguanNcIik7XG52YXIgX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlLmpzXCIpO1xudmFyIF9zbGljZUluc3RhbmNlUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzXCIpO1xuZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7IC8qISByZWdlbmVyYXRvci1ydW50aW1lIC0tIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLiAtLSBsaWNlbnNlIChNSVQpOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL0xJQ0VOU0UgKi9cbiAgbW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lID0gZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgICByZXR1cm4gZTtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICB2YXIgdCxcbiAgICBlID0ge30sXG4gICAgciA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgbiA9IHIuaGFzT3duUHJvcGVydHksXG4gICAgbyA9IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCA/IF9TeW1ib2wgOiB7fSxcbiAgICBhID0gaS5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIixcbiAgICBjID0gaS5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCIsXG4gICAgdSA9IGkudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG4gIGZ1bmN0aW9uIGRlZmluZSh0LCBlLCByKSB7XG4gICAgcmV0dXJuIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBfT2JqZWN0JGNyZWF0ZShpLnByb3RvdHlwZSksXG4gICAgICBjID0gbmV3IENvbnRleHQobiB8fCBbXSk7XG4gICAgcmV0dXJuIG8oYSwgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBtYWtlSW52b2tlTWV0aG9kKHQsIHIsIGMpXG4gICAgfSksIGE7XG4gIH1cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2godCwgZSwgcikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IHQuY2FsbChlLCByKVxuICAgICAgfTtcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRocm93XCIsXG4gICAgICAgIGFyZzogdFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZS53cmFwID0gd3JhcDtcbiAgdmFyIGggPSBcInN1c3BlbmRlZFN0YXJ0XCIsXG4gICAgbCA9IFwic3VzcGVuZGVkWWllbGRcIixcbiAgICBmID0gXCJleGVjdXRpbmdcIixcbiAgICBzID0gXCJjb21wbGV0ZWRcIixcbiAgICB5ID0ge307XG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuICB2YXIgcCA9IHt9O1xuICBkZWZpbmUocCwgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbiAgdmFyIGQgPSBfT2JqZWN0JGdldFByb3RvdHlwZU9mLFxuICAgIHYgPSBkICYmIGQoZCh2YWx1ZXMoW10pKSk7XG4gIHYgJiYgdiAhPT0gciAmJiBuLmNhbGwodiwgYSkgJiYgKHAgPSB2KTtcbiAgdmFyIGcgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPSBHZW5lcmF0b3IucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgdmFyIF9jb250ZXh0O1xuICAgIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXSkuY2FsbChfY29udGV4dCwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKG8gPT09IHMpIHtcbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gaSkgdGhyb3cgYTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdCxcbiAgICAgICAgICBkb25lOiAhMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZm9yIChuLm1ldGhvZCA9IGksIG4uYXJnID0gYTs7KSB7XG4gICAgICAgIHZhciBjID0gbi5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICB2YXIgdSA9IG1heWJlSW52b2tlRGVsZWdhdGUoYywgbik7XG4gICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgIGlmICh1ID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiB1O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJuZXh0XCIgPT09IG4ubWV0aG9kKSBuLnNlbnQgPSBuLl9zZW50ID0gbi5hcmc7ZWxzZSBpZiAoXCJ0aHJvd1wiID09PSBuLm1ldGhvZCkge1xuICAgICAgICAgIGlmIChvID09PSBoKSB0aHJvdyBvID0gcywgbi5hcmc7XG4gICAgICAgICAgbi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBuLm1ldGhvZCAmJiBuLmFicnVwdChcInJldHVyblwiLCBuLmFyZyk7XG4gICAgICAgIG8gPSBmO1xuICAgICAgICB2YXIgcCA9IHRyeUNhdGNoKGUsIHIsIG4pO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcC50eXBlKSB7XG4gICAgICAgICAgaWYgKG8gPSBuLmRvbmUgPyBzIDogbCwgcC5hcmcgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcC5hcmcsXG4gICAgICAgICAgICBkb25lOiBuLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcC50eXBlICYmIChvID0gcywgbi5tZXRob2QgPSBcInRocm93XCIsIG4uYXJnID0gcC5hcmcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSB7XG4gICAgdmFyIG4gPSByLm1ldGhvZCxcbiAgICAgIG8gPSBlLml0ZXJhdG9yW25dO1xuICAgIGlmIChvID09PSB0KSByZXR1cm4gci5kZWxlZ2F0ZSA9IG51bGwsIFwidGhyb3dcIiA9PT0gbiAmJiBlLml0ZXJhdG9yW1wicmV0dXJuXCJdICYmIChyLm1ldGhvZCA9IFwicmV0dXJuXCIsIHIuYXJnID0gdCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSwgXCJ0aHJvd1wiID09PSByLm1ldGhvZCkgfHwgXCJyZXR1cm5cIiAhPT0gbiAmJiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ1wiICsgbiArIFwiJyBtZXRob2RcIikpLCB5O1xuICAgIHZhciBpID0gdHJ5Q2F0Y2gobywgZS5pdGVyYXRvciwgci5hcmcpO1xuICAgIGlmIChcInRocm93XCIgPT09IGkudHlwZSkgcmV0dXJuIHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IGkuYXJnLCByLmRlbGVnYXRlID0gbnVsbCwgeTtcbiAgICB2YXIgYSA9IGkuYXJnO1xuICAgIHJldHVybiBhID8gYS5kb25lID8gKHJbZS5yZXN1bHROYW1lXSA9IGEudmFsdWUsIHIubmV4dCA9IGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gci5tZXRob2QgJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksIHIuZGVsZWdhdGUgPSBudWxsLCB5KSA6IGEgOiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLCByLmRlbGVnYXRlID0gbnVsbCwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgX2NvbnRleHQyO1xuICAgIHZhciBlID0ge1xuICAgICAgdHJ5TG9jOiB0WzBdXG4gICAgfTtcbiAgICAxIGluIHQgJiYgKGUuY2F0Y2hMb2MgPSB0WzFdKSwgMiBpbiB0ICYmIChlLmZpbmFsbHlMb2MgPSB0WzJdLCBlLmFmdGVyTG9jID0gdFszXSksIF9wdXNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDIgPSB0aGlzLnRyeUVudHJpZXMpLmNhbGwoX2NvbnRleHQyLCBlKTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHQuY29tcGxldGlvbiB8fCB7fTtcbiAgICBlLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgZS5hcmcsIHQuY29tcGxldGlvbiA9IGU7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0KSB7XG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XSwgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5KHQpLmNhbGwodCwgcHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGUpIHtcbiAgICBpZiAoZSB8fCBcIlwiID09PSBlKSB7XG4gICAgICB2YXIgciA9IGVbYV07XG4gICAgICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUubmV4dCkgcmV0dXJuIGU7XG4gICAgICBpZiAoIWlzTmFOKGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgbyA9IC0xLFxuICAgICAgICAgIGkgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsrbyA8IGUubGVuZ3RoOykgaWYgKG4uY2FsbChlLCBvKSkgcmV0dXJuIG5leHQudmFsdWUgPSBlW29dLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGkubmV4dCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoX3R5cGVvZihlKSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIG8oZywgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG8oR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdCAmJiB0LmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWUgJiYgKGUgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGUuZGlzcGxheU5hbWUgfHwgZS5uYW1lKSk7XG4gIH0sIGUubWFyayA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPyBfT2JqZWN0JHNldFByb3RvdHlwZU9mKHQsIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6ICh0Ll9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBkZWZpbmUodCwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSksIHQucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoZyksIHQ7XG4gIH0sIGUuYXdyYXAgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2F3YWl0OiB0XG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBjLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBlLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBlLmFzeW5jID0gZnVuY3Rpb24gKHQsIHIsIG4sIG8sIGkpIHtcbiAgICB2b2lkIDAgPT09IGkgJiYgKGkgPSBfUHJvbWlzZSk7XG4gICAgdmFyIGEgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKHQsIHIsIG4sIG8pLCBpKTtcbiAgICByZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpID8gYSA6IGEubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LmRvbmUgPyB0LnZhbHVlIDogYS5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhnKSwgZGVmaW5lKGcsIHUsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoZywgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZGVmaW5lKGcsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZS5rZXlzID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IE9iamVjdCh0KSxcbiAgICAgIHIgPSBbXTtcbiAgICBmb3IgKHZhciBuIGluIGUpIF9wdXNoSW5zdGFuY2VQcm9wZXJ0eShyKS5jYWxsKHIsIG4pO1xuICAgIHJldHVybiBfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkocikuY2FsbChyKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyByLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIHQgPSByLnBvcCgpO1xuICAgICAgICBpZiAodCBpbiBlKSByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGUudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoZSkge1xuICAgICAgdmFyIF9jb250ZXh0MztcbiAgICAgIGlmICh0aGlzLnByZXYgPSAwLCB0aGlzLm5leHQgPSAwLCB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLmFyZyA9IHQsIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDMgPSB0aGlzLnRyeUVudHJpZXMpLmNhbGwoX2NvbnRleHQzLCByZXNldFRyeUVudHJ5KSwgIWUpIGZvciAodmFyIHIgaW4gdGhpcykgXCJ0XCIgPT09IHIuY2hhckF0KDApICYmIG4uY2FsbCh0aGlzLCByKSAmJiAhaXNOYU4oK19zbGljZUluc3RhbmNlUHJvcGVydHkocikuY2FsbChyLCAxKSkgJiYgKHRoaXNbcl0gPSB0KTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciB0ID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihlKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBlO1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKG4sIG8pIHtcbiAgICAgICAgcmV0dXJuIGEudHlwZSA9IFwidGhyb3dcIiwgYS5hcmcgPSBlLCByLm5leHQgPSBuLCBvICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCAhIW87XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBvID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IG8gPj0gMDsgLS1vKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy50cnlFbnRyaWVzW29dLFxuICAgICAgICAgIGEgPSBpLmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gaS50cnlMb2MpIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIGlmIChpLnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgYyA9IG4uY2FsbChpLCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgdSA9IG4uY2FsbChpLCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGMgJiYgdSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYykge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXUpIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodCwgZSkge1xuICAgICAgZm9yICh2YXIgciA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyByID49IDA7IC0tcikge1xuICAgICAgICB2YXIgbyA9IHRoaXMudHJ5RW50cmllc1tyXTtcbiAgICAgICAgaWYgKG8udHJ5TG9jIDw9IHRoaXMucHJldiAmJiBuLmNhbGwobywgXCJmaW5hbGx5TG9jXCIpICYmIHRoaXMucHJldiA8IG8uZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBpID0gbztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaSAmJiAoXCJicmVha1wiID09PSB0IHx8IFwiY29udGludWVcIiA9PT0gdCkgJiYgaS50cnlMb2MgPD0gZSAmJiBlIDw9IGkuZmluYWxseUxvYyAmJiAoaSA9IG51bGwpO1xuICAgICAgdmFyIGEgPSBpID8gaS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gYS50eXBlID0gdCwgYS5hcmcgPSBlLCBpID8gKHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMubmV4dCA9IGkuZmluYWxseUxvYywgeSkgOiB0aGlzLmNvbXBsZXRlKGEpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHQsIGUpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gXCJicmVha1wiID09PSB0LnR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0LnR5cGUgPyB0aGlzLm5leHQgPSB0LmFyZyA6IFwicmV0dXJuXCIgPT09IHQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHQuYXJnLCB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCIsIHRoaXMubmV4dCA9IFwiZW5kXCIpIDogXCJub3JtYWxcIiA9PT0gdC50eXBlICYmIGUgJiYgKHRoaXMubmV4dCA9IGUpLCB5O1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2godCkge1xuICAgICAgZm9yICh2YXIgZSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBlID49IDA7IC0tZSkge1xuICAgICAgICB2YXIgciA9IHRoaXMudHJ5RW50cmllc1tlXTtcbiAgICAgICAgaWYgKHIuZmluYWxseUxvYyA9PT0gdCkgcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLCByLmFmdGVyTG9jKSwgcmVzZXRUcnlFbnRyeShyKSwgeTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24gX2NhdGNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLnRyeUxvYyA9PT0gdCkge1xuICAgICAgICAgIHZhciBuID0gci5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChcInRocm93XCIgPT09IG4udHlwZSkge1xuICAgICAgICAgICAgdmFyIG8gPSBuLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkocik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG4vLyBGRjI2LSBidWc6IEFycmF5QnVmZmVycyBhcmUgbm9uLWV4dGVuc2libGUsIGJ1dCBPYmplY3QuaXNFeHRlbnNpYmxlIGRvZXMgbm90IHJlcG9ydCBpdFxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyID09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIGlmIChPYmplY3QuaXNFeHRlbnNpYmxlKGJ1ZmZlcikpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidWZmZXIsICdhJywgeyB2YWx1ZTogOCB9KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRpc0V4dGVuc2libGUoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmlzRXh0ZW5zaWJsZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5pc2V4dGVuc2libGVcbm1vZHVsZS5leHBvcnRzID0gKEZBSUxTX09OX1BSSU1JVElWRVMgfHwgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFKSA/IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFICYmIGNsYXNzb2YoaXQpID09PSAnQXJyYXlCdWZmZXInKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlO1xufSA6ICRpc0V4dGVuc2libGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1wcmV2ZW50ZXh0ZW5zaW9ucyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBpc0V4dGVuc2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgRlJFRVpJTkcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnJlZXppbmcnKTtcblxudmFyIFJFUVVJUkVEID0gZmFsc2U7XG52YXIgTUVUQURBVEEgPSB1aWQoJ21ldGEnKTtcbnZhciBpZCA9IDA7XG5cbnZhciBzZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBkZWZpbmVQcm9wZXJ0eShpdCwgTUVUQURBVEEsIHsgdmFsdWU6IHtcbiAgICBvYmplY3RJRDogJ08nICsgaWQrKywgLy8gb2JqZWN0IElEXG4gICAgd2Vha0RhdGE6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xuXG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBhIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLm9iamVjdElEO1xufTtcblxudmFyIGdldFdlYWtEYXRhID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiB0aGUgc3RvcmUgb2Ygd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLndlYWtEYXRhO1xufTtcblxuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaSU5HICYmIFJFUVVJUkVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhc093bihpdCwgTUVUQURBVEEpKSBzZXRNZXRhZGF0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cbnZhciBlbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gIG1ldGEuZW5hYmxlID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuICBSRVFVSVJFRCA9IHRydWU7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mO1xuICB2YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdGVzdFtNRVRBREFUQV0gPSAxO1xuXG4gIC8vIHByZXZlbnQgZXhwb3Npbmcgb2YgbWV0YWRhdGEga2V5XG4gIGlmIChnZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QpLmxlbmd0aCkge1xuICAgIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocmVzdWx0W2ldID09PSBNRVRBREFUQSkge1xuICAgICAgICAgIHNwbGljZShyZXN1bHQsIGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgICQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlLmZcbiAgICB9KTtcbiAgfVxufTtcblxudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW5hYmxlOiBlbmFibGUsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWtEYXRhOiBnZXRXZWFrRGF0YSxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5oaWRkZW5LZXlzW01FVEFEQVRBXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SX05BTUVdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICB2YXIgZXhwb3J0ZWQgPSB7fTtcbiAgdmFyIENvbnN0cnVjdG9yO1xuXG4gIGlmICghREVTQ1JJUFRPUlMgfHwgIWlzQ2FsbGFibGUoTmF0aXZlQ29uc3RydWN0b3IpXG4gICAgfHwgIShJU19XRUFLIHx8IE5hdGl2ZVByb3RvdHlwZS5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLmVudHJpZXMoKS5uZXh0KCk7IH0pKVxuICApIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIENvbnN0cnVjdG9yID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpO1xuICAgIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIH0gZWxzZSB7XG4gICAgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKGFuSW5zdGFuY2UodGFyZ2V0LCBQcm90b3R5cGUpLCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGNvbGxlY3Rpb246IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0YXJnZXRbQURERVJdLCB7IHRoYXQ6IHRhcmdldCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIGZvckVhY2goWydhZGQnLCAnY2xlYXInLCAnZGVsZXRlJywgJ2ZvckVhY2gnLCAnZ2V0JywgJ2hhcycsICdzZXQnLCAna2V5cycsICd2YWx1ZXMnLCAnZW50cmllcyddLCBmdW5jdGlvbiAoS0VZKSB7XG4gICAgICB2YXIgSVNfQURERVIgPSBLRVkgPT09ICdhZGQnIHx8IEtFWSA9PT0gJ3NldCc7XG4gICAgICBpZiAoS0VZIGluIE5hdGl2ZVByb3RvdHlwZSAmJiAhKElTX1dFQUsgJiYgS0VZID09PSAnY2xlYXInKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUHJvdG90eXBlLCBLRVksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb247XG4gICAgICAgICAgaWYgKCFJU19BRERFUiAmJiBJU19XRUFLICYmICFpc09iamVjdChhKSkgcmV0dXJuIEtFWSA9PT0gJ2dldCcgPyB1bmRlZmluZWQgOiBmYWxzZTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gY29sbGVjdGlvbltLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgICAgcmV0dXJuIElTX0FEREVSID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBJU19XRUFLIHx8IGRlZmluZVByb3BlcnR5KFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuY29sbGVjdGlvbi5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZhbHNlLCB0cnVlKTtcblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwgZXhwb3J0ZWQpO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgb3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bnNhZmUgJiYgdGFyZ2V0W2tleV0pIHRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgZWxzZSBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5mYXN0S2V5O1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGluZGV4OiBjcmVhdGUobnVsbCksXG4gICAgICAgIGZpcnN0OiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgc2l6ZTogMFxuICAgICAgfSk7XG4gICAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGF0LnNpemUgPSAwO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICB2YXIgZGVmaW5lID0gZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgdmFyIHByZXZpb3VzLCBpbmRleDtcbiAgICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5sYXN0ID0gZW50cnkgPSB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLFxuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwcmV2aW91czogcHJldmlvdXMgPSBzdGF0ZS5sYXN0LFxuICAgICAgICAgIG5leHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXN0YXRlLmZpcnN0KSBzdGF0ZS5maXJzdCA9IGVudHJ5O1xuICAgICAgICBpZiAocHJldmlvdXMpIHByZXZpb3VzLm5leHQgPSBlbnRyeTtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplKys7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplKys7XG4gICAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09ICdGJykgc3RhdGUuaW5kZXhbaW5kZXhdID0gZW50cnk7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgLy8gZmFzdCBjYXNlXG4gICAgICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gICAgICB2YXIgZW50cnk7XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHN0YXRlLmluZGV4W2luZGV4XTtcbiAgICAgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICAgICAgZm9yIChlbnRyeSA9IHN0YXRlLmZpcnN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uZXh0KSB7XG4gICAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmNsZWFyKClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5jbGVhclxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmNsZWFyXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGRhdGEgPSBzdGF0ZS5pbmRleDtcbiAgICAgICAgdmFyIGVudHJ5ID0gc3RhdGUuZmlyc3Q7XG4gICAgICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wcmV2aW91cykgZW50cnkucHJldmlvdXMgPSBlbnRyeS5wcmV2aW91cy5uZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZmlyc3QgPSBzdGF0ZS5sYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUgPSAwO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZGVsZXRlKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5kZWxldGVcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uZXh0O1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgICAgZGVsZXRlIHN0YXRlLmluZGV4W2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uZXh0ID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wcmV2aW91cyA9IHByZXY7XG4gICAgICAgICAgaWYgKHN0YXRlLmZpcnN0ID09PSBlbnRyeSkgc3RhdGUuZmlyc3QgPSBuZXh0O1xuICAgICAgICAgIGlmIChzdGF0ZS5sYXN0ID09PSBlbnRyeSkgc3RhdGUubGFzdCA9IHByZXY7XG4gICAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplLS07XG4gICAgICAgICAgZWxzZSB0aGF0LnNpemUtLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5maXJzdCkge1xuICAgICAgICAgIGJvdW5kRnVuY3Rpb24oZW50cnkudmFsdWUsIGVudHJ5LmtleSwgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldH0ucHJvdG90eXBlLmhhcyhrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuaGFzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuaGFzXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwgSVNfTUFQID8ge1xuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmdldFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52YWx1ZTtcbiAgICAgIH0sXG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnNldFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IDoge1xuICAgICAgLy8gYFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKSB7XG4gICAgdmFyIElURVJBVE9SX05BTUUgPSBDT05TVFJVQ1RPUl9OQU1FICsgJyBJdGVyYXRvcic7XG4gICAgdmFyIGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICB2YXIgZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihJVEVSQVRPUl9OQU1FKTtcbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS57IGtleXMsIHZhbHVlcywgZW50cmllcywgQEBpdGVyYXRvciB9KClgIG1ldGhvZHNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIGRlZmluZUl0ZXJhdG9yKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgICB0eXBlOiBJVEVSQVRPUl9OQU1FLFxuICAgICAgICB0YXJnZXQ6IGl0ZXJhdGVkLFxuICAgICAgICBzdGF0ZTogZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUoaXRlcmF0ZWQpLFxuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmxhc3Q7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghc3RhdGUudGFyZ2V0IHx8ICEoc3RhdGUubGFzdCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuc3RhdGUuZmlyc3QpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09PSAna2V5cycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LmtleSwgZmFsc2UpO1xuICAgICAgaWYgKGtpbmQgPT09ICd2YWx1ZXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS52YWx1ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2VudHJ5LmtleSwgZW50cnkudmFsdWVdLCBmYWxzZSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGVbQEBzcGVjaWVzXWAgYWNjZXNzb3JzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtbWFwLUBAc3BlY2llc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXNldC1AQHNwZWNpZXNcbiAgICBzZXRTcGVjaWVzKENPTlNUUlVDVE9SX05BTUUpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uU3Ryb25nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nJyk7XG5cbi8vIGBNYXBgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC1vYmplY3RzXG5jb2xsZWN0aW9uKCdNYXAnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIGNvbGxlY3Rpb25TdHJvbmcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubWFwJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5NYXA7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb21lJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvbWUnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc29tZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvbWUnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29tZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29tZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdrZXlzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2tleXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQua2V5cztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUua2V5cylcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlJyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbnZhciBtZXJnZVNvcnQgPSBmdW5jdGlvbiAoYXJyYXksIGNvbXBhcmVmbikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB2YXIgbWlkZGxlID0gZmxvb3IobGVuZ3RoIC8gMik7XG4gIHJldHVybiBsZW5ndGggPCA4ID8gaW5zZXJ0aW9uU29ydChhcnJheSwgY29tcGFyZWZuKSA6IG1lcmdlKFxuICAgIGFycmF5LFxuICAgIG1lcmdlU29ydChhcnJheVNsaWNlKGFycmF5LCAwLCBtaWRkbGUpLCBjb21wYXJlZm4pLFxuICAgIG1lcmdlU29ydChhcnJheVNsaWNlKGFycmF5LCBtaWRkbGUpLCBjb21wYXJlZm4pLFxuICAgIGNvbXBhcmVmblxuICApO1xufTtcblxudmFyIGluc2VydGlvblNvcnQgPSBmdW5jdGlvbiAoYXJyYXksIGNvbXBhcmVmbikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB2YXIgaSA9IDE7XG4gIHZhciBlbGVtZW50LCBqO1xuXG4gIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgaiA9IGk7XG4gICAgZWxlbWVudCA9IGFycmF5W2ldO1xuICAgIHdoaWxlIChqICYmIGNvbXBhcmVmbihhcnJheVtqIC0gMV0sIGVsZW1lbnQpID4gMCkge1xuICAgICAgYXJyYXlbal0gPSBhcnJheVstLWpdO1xuICAgIH1cbiAgICBpZiAoaiAhPT0gaSsrKSBhcnJheVtqXSA9IGVsZW1lbnQ7XG4gIH0gcmV0dXJuIGFycmF5O1xufTtcblxudmFyIG1lcmdlID0gZnVuY3Rpb24gKGFycmF5LCBsZWZ0LCByaWdodCwgY29tcGFyZWZuKSB7XG4gIHZhciBsbGVuZ3RoID0gbGVmdC5sZW5ndGg7XG4gIHZhciBybGVuZ3RoID0gcmlnaHQubGVuZ3RoO1xuICB2YXIgbGluZGV4ID0gMDtcbiAgdmFyIHJpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGxpbmRleCA8IGxsZW5ndGggfHwgcmluZGV4IDwgcmxlbmd0aCkge1xuICAgIGFycmF5W2xpbmRleCArIHJpbmRleF0gPSAobGluZGV4IDwgbGxlbmd0aCAmJiByaW5kZXggPCBybGVuZ3RoKVxuICAgICAgPyBjb21wYXJlZm4obGVmdFtsaW5kZXhdLCByaWdodFtyaW5kZXhdKSA8PSAwID8gbGVmdFtsaW5kZXgrK10gOiByaWdodFtyaW5kZXgrK11cbiAgICAgIDogbGluZGV4IDwgbGxlbmd0aCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdO1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2VTb3J0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIGZpcmVmb3ggPSB1c2VyQWdlbnQubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvaSk7XG5cbm1vZHVsZS5leHBvcnRzID0gISFmaXJlZm94ICYmICtmaXJlZm94WzFdO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBVQSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC9NU0lFfFRyaWRlbnQvLnRlc3QoVUEpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHdlYmtpdCA9IHVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcXC8oXFxkKylcXC4vKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIXdlYmtpdCAmJiArd2Via2l0WzFdO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpbnRlcm5hbFNvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc29ydCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIEZGID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uJyk7XG52YXIgSUVfT1JfRURHRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZScpO1xudmFyIFY4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgV0VCS0lUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS13ZWJraXQtdmVyc2lvbicpO1xuXG52YXIgdGVzdCA9IFtdO1xudmFyIG5hdGl2ZVNvcnQgPSB1bmN1cnJ5VGhpcyh0ZXN0LnNvcnQpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyh0ZXN0LnB1c2gpO1xuXG4vLyBJRTgtXG52YXIgRkFJTFNfT05fVU5ERUZJTkVEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pO1xuLy8gVjggYnVnXG52YXIgRkFJTFNfT05fTlVMTCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KG51bGwpO1xufSk7XG4vLyBPbGQgV2ViS2l0XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ3NvcnQnKTtcblxudmFyIFNUQUJMRV9TT1JUID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZmVhdHVyZSBkZXRlY3Rpb24gY2FuIGJlIHRvbyBzbG93LCBzbyBjaGVjayBlbmdpbmVzIHZlcnNpb25zXG4gIGlmIChWOCkgcmV0dXJuIFY4IDwgNzA7XG4gIGlmIChGRiAmJiBGRiA+IDMpIHJldHVybjtcbiAgaWYgKElFX09SX0VER0UpIHJldHVybiB0cnVlO1xuICBpZiAoV0VCS0lUKSByZXR1cm4gV0VCS0lUIDwgNjAzO1xuXG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGNvZGUsIGNociwgdmFsdWUsIGluZGV4O1xuXG4gIC8vIGdlbmVyYXRlIGFuIGFycmF5IHdpdGggbW9yZSA1MTIgZWxlbWVudHMgKENoYWtyYSBhbmQgb2xkIFY4IGZhaWxzIG9ubHkgaW4gdGhpcyBjYXNlKVxuICBmb3IgKGNvZGUgPSA2NTsgY29kZSA8IDc2OyBjb2RlKyspIHtcbiAgICBjaHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICBjYXNlIDY2OiBjYXNlIDY5OiBjYXNlIDcwOiBjYXNlIDcyOiB2YWx1ZSA9IDM7IGJyZWFrO1xuICAgICAgY2FzZSA2ODogY2FzZSA3MTogdmFsdWUgPSA0OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHZhbHVlID0gMjtcbiAgICB9XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA0NzsgaW5kZXgrKykge1xuICAgICAgdGVzdC5wdXNoKHsgazogY2hyICsgaW5kZXgsIHY6IHZhbHVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRlc3Quc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi52IC0gYS52OyB9KTtcblxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0ZXN0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IHRlc3RbaW5kZXhdLmsuY2hhckF0KDApO1xuICAgIGlmIChyZXN1bHQuY2hhckF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gY2hyKSByZXN1bHQgKz0gY2hyO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCAhPT0gJ0RHQkVGSEFDSUpLJztcbn0pO1xuXG52YXIgRk9SQ0VEID0gRkFJTFNfT05fVU5ERUZJTkVEIHx8ICFGQUlMU19PTl9OVUxMIHx8ICFTVFJJQ1RfTUVUSE9EIHx8ICFTVEFCTEVfU09SVDtcblxudmFyIGdldFNvcnRDb21wYXJlID0gZnVuY3Rpb24gKGNvbXBhcmVmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLTE7XG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCkgcmV0dXJuIDE7XG4gICAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gK2NvbXBhcmVmbih4LCB5KSB8fCAwO1xuICAgIHJldHVybiB0b1N0cmluZyh4KSA+IHRvU3RyaW5nKHkpID8gMSA6IC0xO1xuICB9O1xufTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zb3J0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvcnRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSBhQ2FsbGFibGUoY29tcGFyZWZuKTtcblxuICAgIHZhciBhcnJheSA9IHRvT2JqZWN0KHRoaXMpO1xuXG4gICAgaWYgKFNUQUJMRV9TT1JUKSByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWQgPyBuYXRpdmVTb3J0KGFycmF5KSA6IG5hdGl2ZVNvcnQoYXJyYXksIGNvbXBhcmVmbik7XG5cbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB2YXIgYXJyYXlMZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShhcnJheSk7XG4gICAgdmFyIGl0ZW1zTGVuZ3RoLCBpbmRleDtcblxuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoaW5kZXggaW4gYXJyYXkpIHB1c2goaXRlbXMsIGFycmF5W2luZGV4XSk7XG4gICAgfVxuXG4gICAgaW50ZXJuYWxTb3J0KGl0ZW1zLCBnZXRTb3J0Q29tcGFyZShjb21wYXJlZm4pKTtcblxuICAgIGl0ZW1zTGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlbXMpO1xuICAgIGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChpbmRleCA8IGl0ZW1zTGVuZ3RoKSBhcnJheVtpbmRleF0gPSBpdGVtc1tpbmRleCsrXTtcbiAgICB3aGlsZSAoaW5kZXggPCBhcnJheUxlbmd0aCkgZGVsZXRlUHJvcGVydHlPclRocm93KGFycmF5LCBpbmRleCsrKTtcblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zb3J0Jyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NvcnQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zb3J0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNvcnQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNvcnQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAndmFsdWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC52YWx1ZXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnZhbHVlcylcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC9pdGVyYXRvclwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2VudHJpZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5lbnRyaWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5lbnRyaWVzKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbmxldCBnZXRSYW5kb21WYWx1ZXM7XG5jb25zdCBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byk7XG5cbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xufSIsICJpbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cblxuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHJldHVybiBieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghdmFsaWRhdGUodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCcpO1xuICB9XG5cbiAgcmV0dXJuIHV1aWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmluZ2lmeTsiLCAiY29uc3QgcmFuZG9tVVVJRCA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5yYW5kb21VVUlEICYmIGNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmFuZG9tVVVJRFxufTsiLCAiaW1wb3J0IG5hdGl2ZSBmcm9tICcuL25hdGl2ZS5qcyc7XG5pbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCB7IHVuc2FmZVN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgaWYgKG5hdGl2ZS5yYW5kb21VVUlEICYmICFidWYgJiYgIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmF0aXZlLnJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG4gIHJuZHNbNl0gPSBybmRzWzZdICYgMHgwZiB8IDB4NDA7XG4gIHJuZHNbOF0gPSBybmRzWzhdICYgMHgzZiB8IDB4ODA7IC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuXG4gIGlmIChidWYpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgYnVmW29mZnNldCArIGldID0gcm5kc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmO1xuICB9XG5cbiAgcmV0dXJuIHVuc2FmZVN0cmluZ2lmeShybmRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdjQ7IiwgImltcG9ydCB7IEFzc2lnbmFibGUgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcbmltcG9ydCB7IERhdGFTdHJlYW0gfSBmcm9tIFwiLi9kYXRhLXN0cmVhbVwiO1xuXG50eXBlIFZhbHVlT2Y8VD4gPSBUW2tleW9mIFRdO1xuXG4vKiogVmFsaWQgaWQgdHlwZS4gKi9cbmV4cG9ydCB0eXBlIElkID0gbnVtYmVyIHwgc3RyaW5nO1xuLyoqIE51bGxhYmxlIGlkIHR5cGUuICovXG5leHBvcnQgdHlwZSBPcHRJZCA9IHVuZGVmaW5lZCB8IG51bGwgfCBJZDtcbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgYSB2YWx1ZSBjYW4gYmUgdXNlZCBhcyBhbiBpZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZCBpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIElkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XG59XG5cbi8qKlxuICogTWFrZSBhbiBvYmplY3QgZGVlcGx5IHBhcnRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIGFueVtdIHwgRnVuY3Rpb24gfCBOb2RlXG4gID8gVFxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgPyB7IFtrZXkgaW4ga2V5b2YgVF0/OiBEZWVwUGFydGlhbDxUW2tleV0+IH1cbiAgOiBUO1xuXG4vKipcbiAqIEFuIGl0ZW0gdGhhdCBtYXkgKHtAbGluayBJZH0pIG9yIG1heSBub3QgKGFic2VudCwgdW5kZWZpbmVkIG9yIG51bGwpIGhhdmUgYW4gaWQgcHJvcGVydHkuXG4gKlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgUGFydEl0ZW08SWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IFBhcnRpYWw8UmVjb3JkPElkUHJvcCwgT3B0SWQ+Pjtcbi8qKlxuICogQW4gaXRlbSB0aGF0IGhhcyBhIHByb3BlcnR5IGNvbnRhaW5pbmcgYW4gaWQgYW5kIGFsbCBvdGhlciByZXF1aXJlZCBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRnVsbEl0ZW08XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gPSBJdGVtICYgUmVjb3JkPElkUHJvcCwgSWQ+O1xuLyoqXG4gKiBBbiBpdGVtIHRoYXQgaGFzIGEgcHJvcGVydHkgY29udGFpbmluZyBhbiBpZCBhbmQgb3B0aW9uYWxseSBvdGhlciBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgVXBkYXRlSXRlbTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiA9IEFzc2lnbmFibGU8RnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4gJiBSZWNvcmQ8SWRQcm9wLCBJZD47XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGFuIGl0ZW0gaGFzIGFuIGlkIChpcyBhIHtAbGluayBGdWxsSXRlbX0pLlxuICpcbiAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIGlkUHJvcCAtIE5hbWUgb2YgdGhlIGlkIHByb3BlcnR5LlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoaXMgdmFsdWUgaXMgYSB7QGxpbmsgRnVsbEl0ZW19LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGxJdGVtPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+KGl0ZW06IEl0ZW0sIGlkUHJvcDogSWRQcm9wKTogaXRlbSBpcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIGl0ZW1baWRQcm9wXSAhPSBudWxsO1xufVxuXG4vKiogQWRkIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEV2ZW50UGF5bG9hZCB7XG4gIC8qKiBJZHMgb2YgYWRkZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xufVxuLyoqIFVwZGF0ZSBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVFdmVudFBheWxvYWQ8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKiogSWRzIG9mIHVwZGF0ZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xuICAvKiogSXRlbXMgYXMgdGhleSB3ZXJlIGJlZm9yZSB0aGlzIHVwZGF0ZS4gKi9cbiAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogSXRlbXMgYXMgdGhleSBhcmUgbm93LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBKdXN0IGdldCB0aGUgZGF0YSBmcm9tIHRoZSBkYXRhIHNldCBvciBkYXRhIHZpZXcuXG4gICAqL1xuICBkYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG59XG4vKiogUmVtb3ZlIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbW92ZUV2ZW50UGF5bG9hZDxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIC8qKiBJZHMgb2YgcmVtb3ZlZCBpdGVtcy4gKi9cbiAgaXRlbXM6IElkW107XG4gIC8qKiBJdGVtcyBhcyB0aGV5IHdlcmUgYmVmb3JlIHRoZWlyIHJlbW92YWwuICovXG4gIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbn1cblxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyAoZXZlbnQgbmFtZSDihpIgcGF5bG9hZCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQYXlsb2FkczxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIGFkZDogQWRkRXZlbnRQYXlsb2FkO1xuICB1cGRhdGU6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xuICByZW1vdmU6IFJlbW92ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xufVxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBwYXlsb2FkKS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFBheWxvYWRzV2l0aEFueTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBleHRlbmRzIEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPiB7XG4gIFwiKlwiOiBWYWx1ZU9mPEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPj47XG59XG5cbi8qKlxuICogTWFwIG9mIGV2ZW50IGNhbGxiYWNrIHR5cGVzIChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3M8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgYWRkKG5hbWU6IFwiYWRkXCIsIHBheWxvYWQ6IEFkZEV2ZW50UGF5bG9hZCB8IG51bGwsIHNlbmRlcklkPzogSWQgfCBudWxsKTogdm9pZDtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIHVwZGF0ZShcbiAgICBuYW1lOiBcInVwZGF0ZVwiLFxuICAgIHBheWxvYWQ6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+IHwgbnVsbCxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgcmVtb3ZlKFxuICAgIG5hbWU6IFwicmVtb3ZlXCIsXG4gICAgcGF5bG9hZDogUmVtb3ZlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4gfCBudWxsLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG59XG4vKipcbiAqIE1hcCBvZiBldmVudCBjYWxsYmFjayB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3NXaXRoQW55PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGV4dGVuZHMgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCAoe0BsaW5rIEV2ZW50TmFtZX0pLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIERhdGEgYWJvdXQgdGhlIGl0ZW1zIGFmZmVjdGVkIGJ5IHRoaXMgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIEEgc2VuZGVySWQsIG9wdGlvbmFsbHkgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2hpY2ggdHJpZ2dlcmVkIHRoZSBldmVudC4gSWYgc2VuZGVySWQgaXMgbm90IHByb3ZpZGVkLCB0aGUgYXJndW1lbnQgd2lsbCBiZSBgbnVsbGAuXG4gICAqL1xuICBcIipcIjxOIGV4dGVuZHMga2V5b2YgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPj4oXG4gICAgbmFtZTogTixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bTl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbn1cblxuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcy4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50TmFtZSA9IGtleW9mIEV2ZW50UGF5bG9hZHM8bmV2ZXIsIFwiXCI+O1xuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcyBhbmQgJyonIHRvIGxpc3RlbiBmb3IgYWxsLiAqL1xuZXhwb3J0IHR5cGUgRXZlbnROYW1lV2l0aEFueSA9IGtleW9mIEV2ZW50UGF5bG9hZHNXaXRoQW55PG5ldmVyLCBcIlwiPjtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBvcmRlciBwYXJhbWV0ZXIuXG4gKiAtIEEgc3RyaW5nIHZhbHVlIGRldGVybWluZXMgd2hpY2ggcHJvcGVydHkgd2lsbCBiZSB1c2VkIGZvciBzb3J0aW5nICh1c2luZyA8IGFuZCA+IG9wZXJhdG9ycyBmb3IgbnVtZXJpYyBjb21wYXJpc29uKS5cbiAqIC0gQSBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdGhlIHNhbWUgd2F5IGFzIGluIEFycmF5LnNvcnQuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YUludGVyZmFjZU9yZGVyPEl0ZW0+ID1cbiAgfCBrZXlvZiBJdGVtXG4gIHwgKChhOiBJdGVtLCBiOiBJdGVtKSA9PiBudW1iZXIpO1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm4gdHlwZSBpbmRlcGVuZGVudCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0Jhc2U8SXRlbT4ge1xuICAvKipcbiAgICogQW4gYXJyYXkgd2l0aCBmaWVsZCBuYW1lcywgb3IgYW4gb2JqZWN0IHdpdGggY3VycmVudCBmaWVsZCBuYW1lIGFuZCBuZXcgZmllbGQgbmFtZSB0aGF0IHRoZSBmaWVsZCBpcyByZXR1cm5lZCBhcy4gQnkgZGVmYXVsdCwgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW1zIGFyZSBlbWl0dGVkLiBXaGVuIGZpZWxkcyBpcyBkZWZpbmVkLCBvbmx5IHRoZSBwcm9wZXJ0aWVzIHdob3NlIG5hbWUgaXMgc3BlY2lmaWVkIGluIGZpZWxkcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogV2FybmluZyoqOiBUaGVyZSBpcyBubyBUeXBlU2NyaXB0IHN1cHBvcnQgZm9yIHRoaXMuXG4gICAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZ2V0IG9wdGlvbnMgKHJldHVybnMgYSBzaW5nbGUgaXRlbSBvciBhbiBhcnJheSkuXG4gKlxuICogQHJlbWFya3NcbiAqIFdoZXRoZXIgYW4gaXRlbSBvciBhbmQgYXJyYXkgb2YgaXRlbXMgaXMgcmV0dXJuZWQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdHlwZSBvZiB0aGUgaWQocykgYXJndW1lbnQuXG4gKiBJZiBhbiBhcnJheSBvZiBpZHMgaXMgcmVxdWVzdGVkIGFuIGFycmF5IG9mIGl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiBhIHNpbmdsZSBpZCBpcyByZXF1ZXN0ZWQgYSBzaW5nbGUgaXRlbSAob3IgbnVsbCBpZiB0aGUgaWQgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBpdGVtKSB3aWxsIGJlIHJldHVybmVkLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzaW5nbGUgaXRlbSAoaWYgaW52b2tlZCB3aXRoIGFuIGlkKSBvciBhbiBhcnJheSBvZiBpdGVtcyAoaWYgaW52b2tlZCB3aXRoIGFuIGFycmF5IG9mIGlkcykuICovXG4gIHJldHVyblR5cGU/OiB1bmRlZmluZWQgfCBcIkFycmF5XCI7XG59XG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm5zIGFuIG9iamVjdCkuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSByZXR1cm5lZCBvYmplY3QgaGFzIGlkcyBhcyBrZXlzIGFuZCBpdGVtcyBhcyB2YWx1ZXMgb2YgY29ycmVzcG9uZGluZyBpZHMuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG1hcCAoaWQg4oaSIGl0ZW0pLiAqL1xuICByZXR1cm5UeXBlOiBcIk9iamVjdFwiO1xufVxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJucyBzaW5nbGUgaXRlbSwgYW4gYXJyYXkgb3Igb2JqZWN0KS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgdHlwZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiA9XG4gIHwgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICB8IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+O1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBpZHMgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBmb3IgZWFjaCBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEFuIGFycmF5IHdpdGggZmllbGQgbmFtZXMsIG9yIGFuIG9iamVjdCB3aXRoIGN1cnJlbnQgZmllbGQgbmFtZSBhbmQgbmV3IGZpZWxkIG5hbWUgdGhhdCB0aGUgZmllbGQgaXMgcmV0dXJuZWQgYXMuIEJ5IGRlZmF1bHQsIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBpdGVtcyBhcmUgZW1pdHRlZC4gV2hlbiBmaWVsZHMgaXMgZGVmaW5lZCwgb25seSB0aGUgcHJvcGVydGllcyB3aG9zZSBuYW1lIGlzIHNwZWNpZmllZCBpbiBmaWVsZHMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgaXRlbXMuICovXG4gIGZpZWxkcz86IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBtYXAgb3ByaW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIE9yaWdpbmFsIC0gVGhlIG9yaWdpbmFsIGl0ZW0gdHlwZSBpbiB0aGUgZGF0YS5cbiAqIEB0eXBlUGFyYW0gTWFwcGVkIC0gVGhlIHR5cGUgYWZ0ZXIgbWFwcGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxPcmlnaW5hbCwgTWFwcGVkPiB7XG4gIC8qKiBBbiBhcnJheSB3aXRoIGZpZWxkIG5hbWVzLCBvciBhbiBvYmplY3Qgd2l0aCBjdXJyZW50IGZpZWxkIG5hbWUgYW5kIG5ldyBmaWVsZCBuYW1lIHRoYXQgdGhlIGZpZWxkIGlzIHJldHVybmVkIGFzLiBCeSBkZWZhdWx0LCBhbGwgcHJvcGVydGllcyBvZiB0aGUgaXRlbXMgYXJlIGVtaXR0ZWQuIFdoZW4gZmllbGRzIGlzIGRlZmluZWQsIG9ubHkgdGhlIHByb3BlcnRpZXMgd2hvc2UgbmFtZSBpcyBzcGVjaWZpZWQgaW4gZmllbGRzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIGl0ZW1zLiAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBPcmlnaW5hbCkgPT4gYm9vbGVhbjtcbiAgLyoqIE9yZGVyIHRoZSBpdGVtcyBieSBhIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uICovXG4gIG9yZGVyPzogRGF0YUludGVyZmFjZU9yZGVyPE1hcHBlZD47XG59XG5cbi8qKlxuICogQ29tbW9uIGludGVyZmFjZSBmb3IgZGF0YSBzZXRzIGFuZCBkYXRhIHZpZXcuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZCAobWlzc2luZyBpZHMgd2lsbCBiZSBnZW5lcmF0ZWQgdXBvbiBpbnNlcnRpb24pLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgSXRlbSB0eXBlIHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2U8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4ge1xuICAvKiogVGhlIG51bWJlciBvZiBpdGVtcy4gKi9cbiAgbGVuZ3RoOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBrZXkgb2YgaWQgcHJvcGVydHkuICovXG4gIGlkUHJvcDogSWRQcm9wO1xuXG4gIC8qKlxuICAgKiBBZGQgYSB1bml2ZXJzYWwgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgKmAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW55IG9mIHRoZSBldmVudHMgYGFkZGAsIGB1cGRhdGVgLCBhbmQgYHJlbW92ZWAgb2NjdXJzLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcIipcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYGFkZGAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgYWRkYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIGFkZGVkLCBvciB3aGVuIGFuIGl0ZW0gaXMgdXBkYXRlZCB3aGlsZSBub3QgeWV0IGV4aXN0aW5nLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcImFkZFwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl0pOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGEgYHJlbW92ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgcmVtb3ZlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgdXBkYXRlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBleGlzdGluZyBpdGVtIG9yIGEgc2V0IG9mIGV4aXN0aW5nIGl0ZW1zIGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHVuaXZlcnNhbCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiKlwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdKTogdm9pZDtcbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBgYWRkYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiYWRkXCIsIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYSBgcmVtb3ZlYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zLlxuICAgKi9cbiAgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyByZXF1ZXN0ZWQgaXRlbXMuXG4gICAqL1xuICBnZXQob3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPik6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBhcmUgbm8gaXRlbXMpLlxuICAgKi9cbiAgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgcmVxdWVzdGVkIGl0ZW1zIG9yIGlmIHJlcXVlc3RlZCBhbiBvYmplY3QgbWFwIG9mIGl0ZW1zIChtYXkgYmUgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGFyZSBubyBpdGVtcykuXG4gICAqL1xuICBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBvciBudWxsIGlmIHRoZSBpZCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGl0ZW0uXG4gICAqL1xuICBnZXQoaWQ6IElkKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIG9yIG51bGwgaWYgdGhlIGlkIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbS5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIGlmIGZvdW5kIG9yIG51bGwgb3RoZXJ3aXNlLiBJZiByZXF1ZXN0ZWQgYW4gb2JqZWN0IG1hcCB3aXRoIDAgdG8gMSBpdGVtcy5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChpZHM6IElkW10pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICogSWYgcmVxdWVzdGVkIGFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gSWQgb3IgaWRzIHRvIGJlIHJldHVybmVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIGl0ZW1zIChmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSBpZHMgKHNpbmdsZSBvciBhcnJheSkgYW5kIHRoZSBvcHRpb25zLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIERhdGFTZXQgdG8gd2hpY2ggdGhlIGluc3RhbmNlIGltcGxlbWVudGluZyB0aGlzIGludGVyZmFjZSBpcyBjb25uZWN0ZWQuXG4gICAqIEluIGNhc2UgdGhlcmUgaXMgYSBjaGFpbiBvZiBtdWx0aXBsZSBEYXRhVmlld3MsIHRoZSByb290IERhdGFTZXQgb2YgdGhpcyBjaGFpbiBpcyByZXR1cm5lZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRhdGEgc2V0IHRoYXQgYWN0dWFsbHkgY29udGFpbnMgdGhlIGRhdGEuXG4gICAqL1xuICBnZXREYXRhU2V0KCk6IERhdGFTZXQ8SXRlbSwgSWRQcm9wPjtcblxuICAvKipcbiAgICogR2V0IGlkcyBvZiBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiByZXR1cm5lZCBpZHMgdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICovXG4gIGdldElkcyhvcHRpb25zPzogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT4pOiBJZFtdO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiBpdGVyYXRpb24gdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBFeGVjdXRlZCBpbiBzaW1pbGFyIGZhc2hpb24gdG8gQXJyYXkuZm9yRWFjaCBjYWxsYmFjaywgYnV0IGluc3RlYWQgb2YgaXRlbSwgaW5kZXgsIGFycmF5IHJlY2VpdmVzIGl0ZW0sIGlkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICovXG4gIGZvckVhY2goXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPlxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBNYXAgZWFjaCBpdGVtIGludG8gZGlmZmVyZW50IGl0ZW0gYW5kIHJldHVybiB0aGVtIGFzIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBObyBndWFyYW50ZWUgaXMgZ2l2ZW4gYWJvdXQgdGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBldmVuIGlmIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkICh0aGUgaXRlbXMgYXJlIHNvcnRlZCBhZnRlciB0aGUgbWFwcGluZykuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEFycmF5Lm1hcC1saWtlIGNhbGxiYWNrLCBidXQgb25seSB3aXRoIHRoZSBmaXJzdCB0d28gcGFyYW1zLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIG1hcHBlZCBpdGVtcy5cbiAgICovXG4gIG1hcDxUPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5cbiAgKTogVFtdO1xuXG4gIC8qKlxuICAgKiBTdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBJZHMgb2YgdGhlIGl0ZW1zIHRvIGJlIGluY2x1ZGVkIGluIHRoaXMgc3RyZWFtIChtaXNzaW5nIGFyZSBpZ25vcmVkKSwgYWxsIGlmIG9taXR0ZWQuXG4gICAqIEByZXR1cm5zIFRoZSBkYXRhIHN0cmVhbSBmb3IgdGhpcyBkYXRhIHNldC5cbiAgICovXG4gIHN0cmVhbShpZHM/OiBJdGVyYWJsZTxJZD4pOiBEYXRhU3RyZWFtPEl0ZW0+O1xufVxuIiwgIi8qKiBRdWV1ZSBjb25maWd1cmF0aW9uIG9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVPcHRpb25zIHtcbiAgLyoqIFRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBCeSBkZWZhdWx0IHRoZXJlIGlzIG5vIGF1dG9tYXRpYyBmbHVzaGluZyAoYG51bGxgKS4gKi9cbiAgZGVsYXk/OiBudWxsIHwgbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBpcyBgSW5maW5pdHlgLiAqL1xuICBtYXg/OiBudW1iZXI7XG59XG4vKipcbiAqIFF1ZXVlIGV4dGVuZGluZyBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIG1ldGhvZCBuYW1lcyB0byBiZSByZXBsYWNlZCBieSBxdWV1ZWQgdmVyc2lvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVFeHRlbmRPcHRpb25zPFQ+IHtcbiAgLyoqIEEgbGlzdCB3aXRoIG1ldGhvZCBuYW1lcyBvZiB0aGUgbWV0aG9kcyBvbiB0aGUgb2JqZWN0IHRvIGJlIHJlcGxhY2VkIHdpdGggcXVldWVkIG9uZXMuICovXG4gIHJlcGxhY2U6IFRbXTtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0IHZhbHVlIGlzIG51bGwuICovXG4gIGRlbGF5PzogbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBvZiBtYXggaXMgSW5maW5pdHkuICovXG4gIG1heD86IG51bWJlcjtcbn1cbi8qKlxuICogUXVldWUgY2FsbCBlbnRyeS5cbiAqIC0gQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZC5cbiAqIC0gQW4gb2JqZWN0IHdpdGggZnVuY3Rpb24sIGFyZ3MsIGNvbnRleHQgKGxpa2UgZnVuY3Rpb24uYmluZChjb250ZXh0LCAuLi5hcmdzKSkuXG4gKi9cbnR5cGUgUXVldWVDYWxsRW50cnkgPVxuICB8IEZ1bmN0aW9uXG4gIHwge1xuICAgICAgZm46IEZ1bmN0aW9uO1xuICAgICAgYXJnczogdW5rbm93bltdO1xuICAgIH1cbiAgfCB7XG4gICAgICBmbjogRnVuY3Rpb247XG4gICAgICBhcmdzOiB1bmtub3duW107XG4gICAgICBjb250ZXh0OiB1bmtub3duO1xuICAgIH07XG5cbmludGVyZmFjZSBRdWV1ZUV4dGVuZGVkPE8+IHtcbiAgb2JqZWN0OiBPO1xuICBtZXRob2RzOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG9yaWdpbmFsOiB1bmtub3duO1xuICB9W107XG59XG5cbi8qKlxuICogQSBxdWV1ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBtZXRob2QgbmFtZXMgdG8gYmUgcmVwbGFjZWQgYnkgcXVldWVkIHZlcnNpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUXVldWU8VCA9IG5ldmVyPiB7XG4gIC8qKiBEZWxheSBpbiBtaWxsaXNlY29uZHMuIElmIGRlZmluZWQgdGhlIHF1ZXVlIHdpbGwgYmUgcGVyaW9kaWNhbGx5IGZsdXNoZWQuICovXG4gIHB1YmxpYyBkZWxheTogbnVsbCB8IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHF1ZXVlIGJlZm9yZSBpdCB3aWxsIGJlIGZsdXNoZWQuICovXG4gIHB1YmxpYyBtYXg6IG51bWJlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9xdWV1ZToge1xuICAgIGZuOiBGdW5jdGlvbjtcbiAgICBhcmdzPzogdW5rbm93bltdO1xuICAgIGNvbnRleHQ/OiB1bmtub3duO1xuICB9W10gPSBbXTtcblxuICBwcml2YXRlIF90aW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9leHRlbmRlZDogbnVsbCB8IFF1ZXVlRXh0ZW5kZWQ8VD4gPSBudWxsO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgUXVldWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUXVldWUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zPzogUXVldWVPcHRpb25zKSB7XG4gICAgLy8gb3B0aW9uc1xuICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgIHRoaXMubWF4ID0gSW5maW5pdHk7XG5cbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBRdWV1ZSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHNldE9wdGlvbnMob3B0aW9ucz86IFF1ZXVlT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmRlbGF5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLmRlbGF5ID0gb3B0aW9ucy5kZWxheTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLm1heCA9IG9wdGlvbnMubWF4O1xuICAgIH1cblxuICAgIHRoaXMuX2ZsdXNoSWZOZWVkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmQgYW4gb2JqZWN0IHdpdGggcXVldWluZyBmdW5jdGlvbmFsaXR5LlxuICAgKiBUaGUgb2JqZWN0IHdpbGwgYmUgZXh0ZW5kZWQgd2l0aCBhIGZ1bmN0aW9uIGZsdXNoLCBhbmQgdGhlIG1ldGhvZHMgcHJvdmlkZWQgaW4gb3B0aW9ucy5yZXBsYWNlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBxdWV1ZWQgb25lcy5cbiAgICpcbiAgICogQHBhcmFtIG9iamVjdCAtIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBxdWV1ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZXh0ZW5kPE8gZXh0ZW5kcyB7IGZsdXNoPzogKCkgPT4gdm9pZCB9LCBLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IE8sXG4gICAgb3B0aW9uczogUXVldWVFeHRlbmRPcHRpb25zPEs+XG4gICk6IFF1ZXVlPE8+IHtcbiAgICBjb25zdCBxdWV1ZSA9IG5ldyBRdWV1ZTxPPihvcHRpb25zKTtcblxuICAgIGlmIChvYmplY3QuZmx1c2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFyZ2V0IG9iamVjdCBhbHJlYWR5IGhhcyBhIHByb3BlcnR5IGZsdXNoXCIpO1xuICAgIH1cbiAgICBvYmplY3QuZmx1c2ggPSAoKTogdm9pZCA9PiB7XG4gICAgICBxdWV1ZS5mbHVzaCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBtZXRob2RzOiBRdWV1ZUV4dGVuZGVkPE8+W1wibWV0aG9kc1wiXSA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJmbHVzaFwiLFxuICAgICAgICBvcmlnaW5hbDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXBsYWNlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMucmVwbGFjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBuYW1lID0gb3B0aW9ucy5yZXBsYWNlW2ldO1xuICAgICAgICBtZXRob2RzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBvcmlnaW5hbDogKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPilbbmFtZV0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICBxdWV1ZS5yZXBsYWNlKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPiwgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVldWUuX2V4dGVuZGVkID0ge1xuICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICBtZXRob2RzOiBtZXRob2RzLFxuICAgIH07XG5cbiAgICByZXR1cm4gcXVldWU7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSB0aGUgcXVldWUuIFRoZSBxdWV1ZSB3aWxsIGZpcnN0IGZsdXNoIGFsbCBxdWV1ZWQgYWN0aW9ucywgYW5kIGluIGNhc2UgaXQgaGFzIGV4dGVuZGVkIGFuIG9iamVjdCwgd2lsbCByZXN0b3JlIHRoZSBvcmlnaW5hbCBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsdXNoKCk7XG5cbiAgICBpZiAodGhpcy5fZXh0ZW5kZWQpIHtcbiAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuX2V4dGVuZGVkLm9iamVjdDtcbiAgICAgIGNvbnN0IG1ldGhvZHMgPSB0aGlzLl9leHRlbmRlZC5tZXRob2RzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IG1ldGhvZHNbaV07XG4gICAgICAgIGlmIChtZXRob2Qub3JpZ2luYWwpIHtcbiAgICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICAgIChvYmplY3QgYXMgYW55KVttZXRob2QubmFtZV0gPSBtZXRob2Qub3JpZ2luYWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBkZWxldGUgKG9iamVjdCBhcyBhbnkpW21ldGhvZC5uYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fZXh0ZW5kZWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgbWV0aG9kIG9uIGFuIG9iamVjdCB3aXRoIGEgcXVldWVkIHZlcnNpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgLSBPYmplY3QgaGF2aW5nIHRoZSBtZXRob2QuXG4gICAqIEBwYXJhbSBtZXRob2QgLSBUaGUgbWV0aG9kIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgcmVwbGFjZTxNIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IFJlY29yZDxNLCAoKSA9PiB2b2lkPixcbiAgICBtZXRob2Q6IE1cbiAgKTogdm9pZCB7XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzIC0tIEZ1bmN0aW9uIHRoaXMgaXMgbmVjZXNzYXJ5IGluIHRoZSBmdW5jdGlvbiBiZWxsb3csIHNvIGNsYXNzIHRoaXMgaGFzIHRvIGJlIHNhdmVkIGludG8gYSB2YXJpYWJsZSBoZXJlLiAqL1xuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjb25zdCBvcmlnaW5hbCA9IG9iamVjdFttZXRob2RdO1xuICAgIGlmICghb3JpZ2luYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBcIiArIG1ldGhvZCArIFwiIHVuZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBvYmplY3RbbWV0aG9kXSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICAgIC8vIGFkZCB0aGlzIGNhbGwgdG8gdGhlIHF1ZXVlXG4gICAgICBtZS5xdWV1ZSh7XG4gICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgIGZuOiBvcmlnaW5hbCxcbiAgICAgICAgY29udGV4dDogdGhpcyxcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUXVldWUgYSBjYWxsLlxuICAgKlxuICAgKiBAcGFyYW0gZW50cnkgLSBUaGUgZnVuY3Rpb24gb3IgZW50cnkgdG8gYmUgcXVldWVkLlxuICAgKi9cbiAgcHVibGljIHF1ZXVlKGVudHJ5OiBRdWV1ZUNhbGxFbnRyeSk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7IGZuOiBlbnRyeSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWUucHVzaChlbnRyeSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmx1c2hJZk5lZWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHF1ZXVlIG5lZWRzIHRvIGJlIGZsdXNoZWQuXG4gICAqL1xuICBwcml2YXRlIF9mbHVzaElmTmVlZGVkKCk6IHZvaWQge1xuICAgIC8vIGZsdXNoIHdoZW4gdGhlIG1heGltdW0gaXMgZXhjZWVkZWQuXG4gICAgaWYgKHRoaXMuX3F1ZXVlLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gICAgLy8gZmx1c2ggYWZ0ZXIgYSBwZXJpb2Qgb2YgaW5hY3Rpdml0eSB3aGVuIGEgZGVsYXkgaXMgY29uZmlndXJlZFxuICAgIGlmICh0aGlzLl90aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHR5cGVvZiB0aGlzLmRlbGF5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH0sIHRoaXMuZGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaCBhbGwgcXVldWVkIGNhbGxzXG4gICAqL1xuICBwdWJsaWMgZmx1c2goKTogdm9pZCB7XG4gICAgdGhpcy5fcXVldWUuc3BsaWNlKDApLmZvckVhY2goKGVudHJ5KTogdm9pZCA9PiB7XG4gICAgICBlbnRyeS5mbi5hcHBseShlbnRyeS5jb250ZXh0IHx8IGVudHJ5LmZuLCBlbnRyeS5hcmdzIHx8IFtdKTtcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIERhdGFJbnRlcmZhY2UsXG4gIEV2ZW50Q2FsbGJhY2tzV2l0aEFueSxcbiAgRXZlbnROYW1lLFxuICBFdmVudE5hbWVXaXRoQW55LFxuICBFdmVudFBheWxvYWRzLFxuICBJZCxcbiAgUGFydEl0ZW0sXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbnR5cGUgRXZlbnRTdWJzY3JpYmVyczxJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPiwgSWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgW05hbWUgaW4ga2V5b2YgRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5dOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG59O1xuXG4vKipcbiAqIHtAbGluayBEYXRhU2V0fSBjb2RlIHRoYXQgY2FuIGJlIHJldXNlZCBpbiB7QGxpbmsgRGF0YVZpZXd9IG9yIG90aGVyIHNpbWlsYXIgaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBEYXRhSW50ZXJmYWNlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFTZXRQYXJ0PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGltcGxlbWVudHMgUGljazxEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4sIFwib25cIiB8IFwib2ZmXCI+XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmliZXJzOiB7XG4gICAgW05hbWUgaW4gRXZlbnROYW1lV2l0aEFueV06IEV2ZW50U3Vic2NyaWJlcnM8SXRlbSwgSWRQcm9wPltOYW1lXVtdO1xuICB9ID0ge1xuICAgIFwiKlwiOiBbXSxcbiAgICBhZGQ6IFtdLFxuICAgIHJlbW92ZTogW10sXG4gICAgdXBkYXRlOiBbXSxcbiAgfTtcblxuICBwcm90ZWN0ZWQgX3RyaWdnZXIoXG4gICAgZXZlbnQ6IFwiYWRkXCIsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1wiYWRkXCJdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG4gIHByb3RlY3RlZCBfdHJpZ2dlcihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgcHJvdGVjdGVkIF90cmlnZ2VyKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogVHJpZ2dlciBhbiBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIEV2ZW50IHBheWxvYWQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIElkIG9mIHRoZSBzZW5kZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3RyaWdnZXI8TmFtZSBleHRlbmRzIEV2ZW50TmFtZT4oXG4gICAgZXZlbnQ6IE5hbWUsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W05hbWVdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIGlmICgoZXZlbnQgYXMgc3RyaW5nKSA9PT0gXCIqXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB0cmlnZ2VyIGV2ZW50ICpcIik7XG4gICAgfVxuXG4gICAgWy4uLnRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XSwgLi4udGhpcy5fc3Vic2NyaWJlcnNbXCIqXCJdXS5mb3JFYWNoKFxuICAgICAgKHN1YnNjcmliZXIpOiB2b2lkID0+IHtcbiAgICAgICAgc3Vic2NyaWJlcihldmVudCwgcGF5bG9hZCwgc2VuZGVySWQgIT0gbnVsbCA/IHNlbmRlcklkIDogbnVsbCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwiKlwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJhZGRcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl1cbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBhbiBldmVudCwgYWRkIGFuIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBOb24tZnVuY3Rpb24gY2FsbGJhY2tzIGFyZSBpZ25vcmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgb248TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XS5wdXNoKGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLy8gQFRPRE86IE1heWJlIHRocm93IGZvciBpbnZhbGlkIGNhbGxiYWNrcz9cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcIipcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcImFkZFwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXVxuICApOiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvZmYoXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIGFuIGV2ZW50LCByZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIElmIHRoZSBzYW1lIGNhbGxiYWNrIHdhcyBzdWJzY3JpYmVkIG1vcmUgdGhhbiBvbmNlICoqYWxsKiogb2NjdXJlbmNlcyB3aWxsIGJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIG1ldGhvZC5cbiAgICovXG4gIHB1YmxpYyBvZmY8TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0gPSB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0uZmlsdGVyKFxuICAgICAgKHN1YnNjcmliZXIpOiBib29sZWFuID0+IHN1YnNjcmliZXIgIT09IGNhbGxiYWNrXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb24gaW5zdGVhZCAoUFM6IERhdGFWaWV3LnN1YnNjcmliZSA9PT0gRGF0YVZpZXcub24pLlxuICAgKi9cbiAgcHVibGljIHN1YnNjcmliZTogRGF0YVNldFBhcnQ8SXRlbSwgSWRQcm9wPltcIm9uXCJdID0gRGF0YVNldFBhcnQucHJvdG90eXBlLm9uO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9mZiBpbnN0ZWFkIChQUzogRGF0YVZpZXcudW5zdWJzY3JpYmUgPT09IERhdGFWaWV3Lm9mZikuXG4gICAqL1xuICBwdWJsaWMgdW5zdWJzY3JpYmU6IERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5bXCJvZmZcIl0gPVxuICAgIERhdGFTZXRQYXJ0LnByb3RvdHlwZS5vZmY7XG5cbiAgLyogZGV2ZWxibG9jazpzdGFydCAqL1xuICBwdWJsaWMgZ2V0IHRlc3RMZWFrU3Vic2NyaWJlcnMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlcnM7XG4gIH1cbiAgLyogZGV2ZWxibG9jazplbmQgKi9cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgU2V0YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQtb2JqZWN0c1xuY29sbGVjdGlvbignU2V0JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU2V0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SXRlcmF0b3I7XG4iLCAiaW1wb3J0IHsgSWQgfSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG4vKipcbiAqIERhdGEgc3RyZWFtXG4gKlxuICogQHJlbWFya3NcbiAqIHtAbGluayBEYXRhU3RyZWFtfSBvZmZlcnMgYW4gYWx3YXlzIHVwIHRvIGRhdGUgc3RyZWFtIG9mIGl0ZW1zIGZyb20gYSB7QGxpbmsgRGF0YVNldH0gb3Ige0BsaW5rIERhdGFWaWV3fS5cbiAqIFRoYXQgbWVhbnMgdGhhdCB0aGUgc3RyZWFtIGlzIGV2YWx1YXRlZCBhdCB0aGUgdGltZSBvZiBpdGVyYXRpb24sIGNvbnZlcnNpb24gdG8gYW5vdGhlciBkYXRhIHR5cGUgb3Igd2hlbiB7QGxpbmsgY2FjaGV9IGlzIGNhbGxlZCwgbm90IHdoZW4gdGhlIHtAbGluayBEYXRhU3RyZWFtfSB3YXMgY3JlYXRlZC5cbiAqIE11bHRpcGxlIGludm9jYXRpb25zIG9mIGZvciBleGFtcGxlIHtAbGluayB0b0l0ZW1BcnJheX0gbWF5IHlpZWxkIGRpZmZlcmVudCByZXN1bHRzIChpZiB0aGUgZGF0YSBzb3VyY2UgbGlrZSBmb3IgZXhhbXBsZSB7QGxpbmsgRGF0YVNldH0gZ2V0cyBtb2RpZmllZCkuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBUaGUgaXRlbSB0eXBlIHRoaXMgc3RyZWFtIGlzIGdvaW5nIHRvIHdvcmsgd2l0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFTdHJlYW08SXRlbT4gaW1wbGVtZW50cyBJdGVyYWJsZTxbSWQsIEl0ZW1dPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhaXJzOiBJdGVyYWJsZTxbSWQsIEl0ZW1dPjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgc3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gcGFpcnMgLSBUaGUgaWQsIGl0ZW0gcGFpcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFpcnM6IEl0ZXJhYmxlPFtJZCwgSXRlbV0+KSB7XG4gICAgdGhpcy5fcGFpcnMgPSBwYWlycztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2Yga2V5LCB2YWx1ZSBwYWlycyBmb3IgZXZlcnkgZW50cnkgaW4gdGhlIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiB7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICB5aWVsZCBbaWQsIGl0ZW1dO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2Yga2V5LCB2YWx1ZSBwYWlycyBmb3IgZXZlcnkgZW50cnkgaW4gdGhlIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyAqZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+IHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHlpZWxkIFtpZCwgaXRlbV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpdGVyYWJsZSBvZiBrZXlzIGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKmtleXMoKTogSXRlcmFibGVJdGVyYXRvcjxJZD4ge1xuICAgIGZvciAoY29uc3QgW2lkXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgeWllbGQgaWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpdGVyYWJsZSBvZiB2YWx1ZXMgaW4gdGhlIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyAqdmFsdWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8SXRlbT4ge1xuICAgIGZvciAoY29uc3QgWywgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHlpZWxkIGl0ZW07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgaWRzIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYXJyYXkgbWF5IGNvbnRhaW4gZHVwbGljaXRpZXMuXG4gICAqIEByZXR1cm5zIFRoZSBhcnJheSB3aXRoIGFsbCBpZHMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0lkQXJyYXkoKTogSWRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9wYWlyc10ubWFwKChwYWlyKTogSWQgPT4gcGFpclswXSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFycmF5IG1heSBjb250YWluIGR1cGxpY2l0aWVzLlxuICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCBhbGwgaXRlbXMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0l0ZW1BcnJheSgpOiBJdGVtW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcGFpcnNdLm1hcCgocGFpcik6IEl0ZW0gPT4gcGFpclsxXSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBlbnRyaWVzIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYXJyYXkgbWF5IGNvbnRhaW4gZHVwbGljaXRpZXMuXG4gICAqIEByZXR1cm5zIFRoZSBhcnJheSB3aXRoIGFsbCBlbnRyaWVzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9FbnRyeUFycmF5KCk6IFtJZCwgSXRlbV1bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9wYWlyc107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIG9iamVjdCBtYXAgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIGluIHRoaXMgc3RyZWFtIGFjY2Vzc2libGUgYnkgaWRzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJbiBjYXNlIG9mIGR1cGxpY2F0ZSBpZHMgKGNvZXJjZWQgdG8gc3RyaW5nIHNvIGA3ID09ICc3J2ApIHRoZSBsYXN0IGVuY291dGVyZWQgYXBwZWFycyBpbiB0aGUgcmV0dXJuZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgb2JqZWN0IG1hcCBvZiBhbGwgaWQg4oaSIGl0ZW0gcGFpcnMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b09iamVjdE1hcCgpOiBSZWNvcmQ8SWQsIEl0ZW0+IHtcbiAgICBjb25zdCBtYXA6IFJlY29yZDxJZCwgSXRlbT4gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgbWFwW2lkXSA9IGl0ZW07XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgbWFwIGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBpbiB0aGlzIHN0cmVhbSBhY2Nlc3NpYmxlIGJ5IGlkcy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIG1hcCBvZiBhbGwgaWQg4oaSIGl0ZW0gcGFpcnMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b01hcCgpOiBNYXA8SWQsIEl0ZW0+IHtcbiAgICByZXR1cm4gbmV3IE1hcCh0aGlzLl9wYWlycyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc2V0IGNvbnRhaW5pbmcgYWxsIHRoZSAodW5pcXVlKSBpZHMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBzZXQgb2YgYWxsIGlkcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvSWRTZXQoKTogU2V0PElkPiB7XG4gICAgcmV0dXJuIG5ldyBTZXQodGhpcy50b0lkQXJyYXkoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc2V0IGNvbnRhaW5pbmcgYWxsIHRoZSAodW5pcXVlKSBpdGVtcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNldCBvZiBhbGwgaXRlbXMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0l0ZW1TZXQoKTogU2V0PEl0ZW0+IHtcbiAgICByZXR1cm4gbmV3IFNldCh0aGlzLnRvSXRlbUFycmF5KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhY2hlIHRoZSBpdGVtcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIG1ldGhvZCBhbGxvd3MgZm9yIGl0ZW1zIHRvIGJlIGZldGNoZWQgaW1tZWRpYXRlbGx5IGFuZCB1c2VkIChwb3NzaWJseSBtdWx0aXBsZSB0aW1lcykgbGF0ZXIuXG4gICAqIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gb3B0aW1pemUgcGVyZm9ybWFuY2UgYXMge0BsaW5rIERhdGFTdHJlYW19IHdvdWxkIG90aGVyd2lzZSByZWV2YWx1YXRlIGV2ZXJ5dGhpbmcgdXBvbiBlYWNoIGl0ZXJhdGlvbi5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIGNvbnN0IGRzID0gbmV3IERhdGFTZXQoW+KApl0pXG4gICAqXG4gICAqIGNvbnN0IGNhY2hlZFN0cmVhbSA9IGRzLnN0cmVhbSgpXG4gICAqICAgLmZpbHRlcijigKYpXG4gICAqICAgLnNvcnQo4oCmKVxuICAgKiAgIC5tYXAo4oCmKVxuICAgKiAgIC5jYWNoZWQo4oCmKSAvLyBEYXRhIGFyZSBmZXRjaGVkLCBwcm9jZXNzZWQgYW5kIGNhY2hlZCBoZXJlLlxuICAgKlxuICAgKiBkcy5jbGVhcigpXG4gICAqIGNoYWNoZWRTdHJlYW0gLy8gU3RpbGwgaGFzIGFsbCB0aGUgaXRlbXMuXG4gICAqIGBgYFxuICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgRGF0YVN0cmVhbX0gd2l0aCBjYWNoZWQgaXRlbXMgKGRldGFjaGVkIGZyb20gdGhlIG9yaWdpbmFsIHtAbGluayBEYXRhU2V0fSkuXG4gICAqL1xuICBwdWJsaWMgY2FjaGUoKTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtKFsuLi50aGlzLl9wYWlyc10pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGlzdGluY3QgdmFsdWVzIG9mIGdpdmVuIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBwaWNrcyBhbmQgcG9zc2libHkgY29udmVydHMgdGhlIHByb3BlcnR5LlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgZGlzdGluY3QgdmFsdWUuXG4gICAqIEByZXR1cm5zIEEgc2V0IG9mIGFsbCBkaXN0aW5jdCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIGRpc3RpbmN0PFQ+KGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBUKTogU2V0PFQ+IHtcbiAgICBjb25zdCBzZXQgPSBuZXcgU2V0PFQ+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHNldC5hZGQoY2FsbGJhY2soaXRlbSwgaWQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMgb2YgdGhlIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgZGVjaWRlcyB3aGV0aGVyIGFuIGl0ZW0gd2lsbCBiZSBpbmNsdWRlZC5cbiAgICogQHJldHVybnMgQSBuZXcgZGF0YSBzdHJlYW0gd2l0aCB0aGUgZmlsdGVyZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgZmlsdGVyKGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBib29sZWFuKTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgY29uc3QgcGFpcnMgPSB0aGlzLl9wYWlycztcbiAgICByZXR1cm4gbmV3IERhdGFTdHJlYW08SXRlbT4oe1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBJdGVtXT4ge1xuICAgICAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgcGFpcnMpIHtcbiAgICAgICAgICBpZiAoY2FsbGJhY2soaXRlbSwgaWQpKSB7XG4gICAgICAgICAgICB5aWVsZCBbaWQsIGl0ZW1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggaXRlbSBvZiB0aGUgc3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGludm9rZWQgZm9yIGVhY2ggaXRlbS5cbiAgICovXG4gIHB1YmxpYyBmb3JFYWNoKGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBib29sZWFuKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICBjYWxsYmFjayhpdGVtLCBpZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcCB0aGUgaXRlbXMgaW50byBhIGRpZmZlcmVudCB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSBjb252ZXJzaW9uLlxuICAgKiBAdHlwZVBhcmFtIE1hcHBlZCAtIFRoZSB0eXBlIG9mIHRoZSBpdGVtIGFmdGVyIG1hcHBpbmcuXG4gICAqIEByZXR1cm5zIEEgbmV3IGRhdGEgc3RyZWFtIHdpdGggdGhlIG1hcHBlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBtYXA8TWFwcGVkPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gTWFwcGVkXG4gICk6IERhdGFTdHJlYW08TWFwcGVkPiB7XG4gICAgY29uc3QgcGFpcnMgPSB0aGlzLl9wYWlycztcbiAgICByZXR1cm4gbmV3IERhdGFTdHJlYW08TWFwcGVkPih7XG4gICAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIE1hcHBlZF0+IHtcbiAgICAgICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHBhaXJzKSB7XG4gICAgICAgICAgeWllbGQgW2lkLCBjYWxsYmFjayhpdGVtLCBpZCldO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaXRlbSB3aXRoIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGdpdmVuIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBwaWNrcyBhbmQgcG9zc2libHkgY29udmVydHMgdGhlIHByb3BlcnR5LlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSB3aXRoIHRoZSBtYXhpbXVtIGlmIGZvdW5kIG90aGVyd2lzZSBudWxsLlxuICAgKi9cbiAgcHVibGljIG1heChjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gbnVtYmVyKTogSXRlbSB8IG51bGwge1xuICAgIGNvbnN0IGl0ZXIgPSB0aGlzLl9wYWlyc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgbGV0IGN1cnIgPSBpdGVyLm5leHQoKTtcbiAgICBpZiAoY3Vyci5kb25lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgbWF4SXRlbTogSXRlbSA9IGN1cnIudmFsdWVbMV07XG4gICAgbGV0IG1heFZhbHVlOiBudW1iZXIgPSBjYWxsYmFjayhjdXJyLnZhbHVlWzFdLCBjdXJyLnZhbHVlWzBdKTtcbiAgICB3aGlsZSAoIShjdXJyID0gaXRlci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIGNvbnN0IFtpZCwgaXRlbV0gPSBjdXJyLnZhbHVlO1xuICAgICAgY29uc3QgdmFsdWUgPSBjYWxsYmFjayhpdGVtLCBpZCk7XG4gICAgICBpZiAodmFsdWUgPiBtYXhWYWx1ZSkge1xuICAgICAgICBtYXhWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBtYXhJdGVtID0gaXRlbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF4SXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGl0ZW0gd2l0aCB0aGUgbWluaW11bSB2YWx1ZSBvZiBnaXZlbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcGlja3MgYW5kIHBvc3NpYmx5IGNvbnZlcnRzIHRoZSBwcm9wZXJ0eS5cbiAgICogQHJldHVybnMgVGhlIGl0ZW0gd2l0aCB0aGUgbWluaW11bSBpZiBmb3VuZCBvdGhlcndpc2UgbnVsbC5cbiAgICovXG4gIHB1YmxpYyBtaW4oY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IG51bWJlcik6IEl0ZW0gfCBudWxsIHtcbiAgICBjb25zdCBpdGVyID0gdGhpcy5fcGFpcnNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIGxldCBjdXJyID0gaXRlci5uZXh0KCk7XG4gICAgaWYgKGN1cnIuZG9uZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IG1pbkl0ZW06IEl0ZW0gPSBjdXJyLnZhbHVlWzFdO1xuICAgIGxldCBtaW5WYWx1ZTogbnVtYmVyID0gY2FsbGJhY2soY3Vyci52YWx1ZVsxXSwgY3Vyci52YWx1ZVswXSk7XG4gICAgd2hpbGUgKCEoY3VyciA9IGl0ZXIubmV4dCgpKS5kb25lKSB7XG4gICAgICBjb25zdCBbaWQsIGl0ZW1dID0gY3Vyci52YWx1ZTtcbiAgICAgIGNvbnN0IHZhbHVlID0gY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgaWYgKHZhbHVlIDwgbWluVmFsdWUpIHtcbiAgICAgICAgbWluVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgbWluSXRlbSA9IGl0ZW07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbkl0ZW07XG4gIH1cblxuICAvKipcbiAgICogUmVkdWNlIHRoZSBpdGVtcyBpbnRvIGEgc2luZ2xlIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSByZWR1Y3Rpb24uXG4gICAqIEBwYXJhbSBhY2N1bXVsYXRvciAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBhY2N1bXVsYXRvci5cbiAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgKiBAcmV0dXJucyBUaGUgcmVkdWNlZCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyByZWR1Y2U8VD4oXG4gICAgY2FsbGJhY2s6IChhY2N1bXVsYXRvcjogVCwgaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBULFxuICAgIGFjY3VtdWxhdG9yOiBUXG4gICk6IFQge1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgYWNjdW11bGF0b3IgPSBjYWxsYmFjayhhY2N1bXVsYXRvciwgaXRlbSwgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogU29ydCB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEl0ZW0gY29tcGFyYXRvci5cbiAgICogQHJldHVybnMgQSBuZXcgc3RyZWFtIHdpdGggc29ydGVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIHNvcnQoXG4gICAgY2FsbGJhY2s6IChpdGVtQTogSXRlbSwgaXRlbUI6IEl0ZW0sIGlkQTogSWQsIGlkQjogSWQpID0+IG51bWJlclxuICApOiBEYXRhU3RyZWFtPEl0ZW0+IHtcbiAgICByZXR1cm4gbmV3IERhdGFTdHJlYW0oe1xuICAgICAgW1N5bWJvbC5pdGVyYXRvcl06ICgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+ID0+XG4gICAgICAgIFsuLi50aGlzLl9wYWlyc11cbiAgICAgICAgICAuc29ydCgoW2lkQSwgaXRlbUFdLCBbaWRCLCBpdGVtQl0pOiBudW1iZXIgPT5cbiAgICAgICAgICAgIGNhbGxiYWNrKGl0ZW1BLCBpdGVtQiwgaWRBLCBpZEIpXG4gICAgICAgICAgKVxuICAgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCksXG4gICAgfSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyB2NCBhcyB1dWlkNCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyBwdXJlRGVlcE9iamVjdEFzc2lnbiB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuaW1wb3J0IHtcbiAgRGF0YUludGVyZmFjZSxcbiAgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXksXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0LFxuICBEYXRhSW50ZXJmYWNlTWFwT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZU9yZGVyLFxuICBEZWVwUGFydGlhbCxcbiAgRXZlbnRQYXlsb2FkcyxcbiAgRnVsbEl0ZW0sXG4gIElkLFxuICBPcHRJZCxcbiAgUGFydEl0ZW0sXG4gIFVwZGF0ZUl0ZW0sXG4gIGlzSWQsXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbmltcG9ydCB7IFF1ZXVlLCBRdWV1ZU9wdGlvbnMgfSBmcm9tIFwiLi9xdWV1ZVwiO1xuaW1wb3J0IHsgRGF0YVNldFBhcnQgfSBmcm9tIFwiLi9kYXRhLXNldC1wYXJ0XCI7XG5pbXBvcnQgeyBEYXRhU3RyZWFtIH0gZnJvbSBcIi4vZGF0YS1zdHJlYW1cIjtcblxuLyoqXG4gKiBJbml0aWFsIERhdGFTZXQgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wIGV4dGVuZHMgc3RyaW5nPiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmllbGQgY29udGFpbmluZyB0aGUgaWQgb2YgdGhlIGl0ZW1zLiBXaGVuIGRhdGEgaXMgZmV0Y2hlZCBmcm9tIGEgc2VydmVyIHdoaWNoIHVzZXMgc29tZSBzcGVjaWZpYyBmaWVsZCB0byBpZGVudGlmeSBpdGVtcywgdGhpcyBmaWVsZCBuYW1lIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlIERhdGFTZXQgdXNpbmcgdGhlIG9wdGlvbiBgZmllbGRJZGAuIEZvciBleGFtcGxlIFtDb3VjaERCXShodHRwOi8vY291Y2hkYi5hcGFjaGUub3JnLykgdXNlcyB0aGUgZmllbGQgYCdfaWQnYCB0byBpZGVudGlmeSBkb2N1bWVudHMuXG4gICAqL1xuICBmaWVsZElkPzogSWRQcm9wO1xuICAvKipcbiAgICogUXVldWUgZGF0YSBjaGFuZ2VzICgnYWRkJywgJ3VwZGF0ZScsICdyZW1vdmUnKSBhbmQgZmx1c2ggdGhlbSBhdCBvbmNlLiBUaGUgcXVldWUgY2FuIGJlIGZsdXNoZWQgbWFudWFsbHkgYnkgY2FsbGluZyBgRGF0YVNldC5mbHVzaCgpYCwgb3IgY2FuIGJlIGZsdXNoZWQgYWZ0ZXIgYSBjb25maWd1cmVkIGRlbGF5IG9yIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMuXG4gICAqXG4gICAqIFdoZW4gcXVldWUgaXMgdHJ1ZSwgYSBxdWV1ZSBpcyBjcmVhdGVkIHdpdGggZGVmYXVsdCBvcHRpb25zLiBPcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcHJvdmlkaW5nIGFuIG9iamVjdC5cbiAgICovXG4gIHF1ZXVlPzogUXVldWVPcHRpb25zIHwgZmFsc2U7XG59XG4vKiogRGF0YVNldCBjb25maWd1cmF0aW9uIG9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNldE9wdGlvbnMge1xuICAvKipcbiAgICogUXVldWUgY29uZmlndXJhdGlvbiBvYmplY3Qgb3IgZmFsc2UgaWYgbm8gcXVldWUgc2hvdWxkIGJlIHVzZWQuXG4gICAqXG4gICAqIC0gSWYgZmFsc2UgYW5kIHRoZXJlIHdhcyBhIHF1ZXVlIGJlZm9yZSBpdCB3aWxsIGJlIGZsdXNoZWQgYW5kIHRoZW4gcmVtb3ZlZC5cbiAgICogLSBJZiB7QGxpbmsgUXVldWVPcHRpb25zfSB0aGUgZXhpc3RpbmcgcXVldWUgd2lsbCBiZSByZWNvbmZpZ3VyZWQgb3IgYSBuZXcgcXVldWUgd2lsbCBiZSBjcmVhdGVkLlxuICAgKi9cbiAgcXVldWU/OiBRdWV1ZSB8IFF1ZXVlT3B0aW9ucyB8IGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBhbiBpZCB0byBnaXZlbiBpdGVtIGlmIGl0IGRvZXNuJ3QgaGF2ZSBvbmUgYWxyZWFkeS5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhlIGl0ZW0gd2lsbCBiZSBtb2RpZmllZC5cbiAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gdGhhdCB3aWxsIGhhdmUgYW4gaWQgYWZ0ZXIgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0gaWRQcm9wIC0gVGhlIGtleSBvZiB0aGUgaWQgcHJvcGVydHkuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqIEByZXR1cm5zIHRydWVcbiAqL1xuZnVuY3Rpb24gZW5zdXJlRnVsbEl0ZW08SXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sIElkUHJvcCBleHRlbmRzIHN0cmluZz4oXG4gIGl0ZW06IEl0ZW0sXG4gIGlkUHJvcDogSWRQcm9wXG4pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHtcbiAgaWYgKGl0ZW1baWRQcm9wXSA9PSBudWxsKSB7XG4gICAgLy8gZ2VuZXJhdGUgYW4gaWRcbiAgICBpdGVtW2lkUHJvcF0gPSB1dWlkNCgpIGFzIGFueTtcbiAgfVxuXG4gIHJldHVybiBpdGVtIGFzIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG59XG5cbi8qKlxuICogIyBEYXRhU2V0XG4gKlxuICogVmlzLmpzIGNvbWVzIHdpdGggYSBmbGV4aWJsZSBEYXRhU2V0LCB3aGljaCBjYW4gYmUgdXNlZCB0byBob2xkIGFuZFxuICogbWFuaXB1bGF0ZSB1bnN0cnVjdHVyZWQgZGF0YSBhbmQgbGlzdGVuIGZvciBjaGFuZ2VzIGluIHRoZSBkYXRhLiBUaGUgRGF0YVNldFxuICogaXMga2V5L3ZhbHVlIGJhc2VkLiBEYXRhIGl0ZW1zIGNhbiBiZSBhZGRlZCwgdXBkYXRlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZVxuICogRGF0YVNldCwgYW5kIG9uZSBjYW4gc3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gdGhlIERhdGFTZXQuIFRoZSBkYXRhIGluIHRoZVxuICogRGF0YVNldCBjYW4gYmUgZmlsdGVyZWQgYW5kIG9yZGVyZWQuIERhdGEgY2FuIGJlIG5vcm1hbGl6ZWQgd2hlbiBhcHBlbmRpbmcgaXRcbiAqIHRvIHRoZSBEYXRhU2V0IGFzIHdlbGwuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIGEgRGF0YVNldC5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gKiB2YXIgb3B0aW9ucyA9IHt9O1xuICogdmFyIGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQob3B0aW9ucyk7XG4gKlxuICogLy8gYWRkIGl0ZW1zXG4gKiAvLyBub3RlIHRoYXQgdGhlIGRhdGEgaXRlbXMgY2FuIGNvbnRhaW4gZGlmZmVyZW50IHByb3BlcnRpZXMgYW5kIGRhdGEgZm9ybWF0c1xuICogZGF0YS5hZGQoW1xuICogICB7aWQ6IDEsIHRleHQ6ICdpdGVtIDEnLCBkYXRlOiBuZXcgRGF0ZSgyMDEzLCA2LCAyMCksIGdyb3VwOiAxLCBmaXJzdDogdHJ1ZX0sXG4gKiAgIHtpZDogMiwgdGV4dDogJ2l0ZW0gMicsIGRhdGU6ICcyMDEzLTA2LTIzJywgZ3JvdXA6IDJ9LFxuICogICB7aWQ6IDMsIHRleHQ6ICdpdGVtIDMnLCBkYXRlOiAnMjAxMy0wNi0yNScsIGdyb3VwOiAyfSxcbiAqICAge2lkOiA0LCB0ZXh0OiAnaXRlbSA0J31cbiAqIF0pO1xuICpcbiAqIC8vIHN1YnNjcmliZSB0byBhbnkgY2hhbmdlIGluIHRoZSBEYXRhU2V0XG4gKiBkYXRhLm9uKCcqJywgZnVuY3Rpb24gKGV2ZW50LCBwcm9wZXJ0aWVzLCBzZW5kZXJJZCkge1xuICogICBjb25zb2xlLmxvZygnZXZlbnQnLCBldmVudCwgcHJvcGVydGllcyk7XG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGUgYW4gZXhpc3RpbmcgaXRlbVxuICogZGF0YS51cGRhdGUoe2lkOiAyLCBncm91cDogMX0pO1xuICpcbiAqIC8vIHJlbW92ZSBhbiBpdGVtXG4gKiBkYXRhLnJlbW92ZSg0KTtcbiAqXG4gKiAvLyBnZXQgYWxsIGlkc1xuICogdmFyIGlkcyA9IGRhdGEuZ2V0SWRzKCk7XG4gKiBjb25zb2xlLmxvZygnaWRzJywgaWRzKTtcbiAqXG4gKiAvLyBnZXQgYSBzcGVjaWZpYyBpdGVtXG4gKiB2YXIgaXRlbTEgPSBkYXRhLmdldCgxKTtcbiAqIGNvbnNvbGUubG9nKCdpdGVtMScsIGl0ZW0xKTtcbiAqXG4gKiAvLyByZXRyaWV2ZSBhIGZpbHRlcmVkIHN1YnNldCBvZiB0aGUgZGF0YVxuICogdmFyIGl0ZW1zID0gZGF0YS5nZXQoe1xuICogICBmaWx0ZXI6IGZ1bmN0aW9uIChpdGVtKSB7XG4gKiAgICAgcmV0dXJuIGl0ZW0uZ3JvdXAgPT0gMTtcbiAqICAgfVxuICogfSk7XG4gKiBjb25zb2xlLmxvZygnZmlsdGVyZWQgaXRlbXMnLCBpdGVtcyk7XG4gKiBgYGBcbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFTZXQ8XG4gICAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gICAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4gID5cbiAgZXh0ZW5kcyBEYXRhU2V0UGFydDxJdGVtLCBJZFByb3A+XG4gIGltcGxlbWVudHMgRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+XG57XG4gIC8qKiBGbHVzaCBhbGwgcXVldWVkIGNhbGxzLiAqL1xuICBwdWJsaWMgZmx1c2g/OiAoKSA9PiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGxlbmd0aDogbnVtYmVyO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCBpZFByb3AoKTogSWRQcm9wIHtcbiAgICByZXR1cm4gdGhpcy5faWRQcm9wO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGE6IE1hcDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lkUHJvcDogSWRQcm9wO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWU8dGhpcz4gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBEYXRhU2V0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9ucz86IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+KTtcbiAgLyoqXG4gICAqIEBwYXJhbSBkYXRhIC0gQW4gaW5pdGlhbCBzZXQgb2YgaXRlbXMgZm9yIHRoZSBuZXcgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRGF0YVNldCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGRhdGE6IEl0ZW1bXSwgb3B0aW9ucz86IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+KTtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBEYXRhU2V0LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIEluaXRpYWwgZGF0YSBvciBvcHRpb25zLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgKHR5cGUgZXJyb3IgaWYgZGF0YSBpcyBhbHNvIG9wdGlvbnMpLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIGRhdGE/OiBJdGVtW10gfCBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPixcbiAgICBvcHRpb25zPzogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD5cbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIC8vIGNvcnJlY3RseSByZWFkIG9wdGlvbmFsIGFyZ3VtZW50c1xuICAgIGlmIChkYXRhICYmICFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBvcHRpb25zID0gZGF0YTtcbiAgICAgIGRhdGEgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLl9kYXRhID0gbmV3IE1hcCgpOyAvLyBtYXAgd2l0aCBkYXRhIGluZGV4ZWQgYnkgaWRcbiAgICB0aGlzLmxlbmd0aCA9IDA7IC8vIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgRGF0YVNldFxuICAgIHRoaXMuX2lkUHJvcCA9IHRoaXMuX29wdGlvbnMuZmllbGRJZCB8fCAoXCJpZFwiIGFzIElkUHJvcCk7IC8vIG5hbWUgb2YgdGhlIGZpZWxkIGNvbnRhaW5pbmcgaWRcblxuICAgIC8vIGFkZCBpbml0aWFsIGRhdGEgd2hlbiBwcm92aWRlZFxuICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFkZChkYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG5ldyBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBuZXcgb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM/OiBEYXRhU2V0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucXVldWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMucXVldWUgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIGRlbGV0ZSBxdWV1ZSBpZiBsb2FkZWRcbiAgICAgICAgaWYgKHRoaXMuX3F1ZXVlKSB7XG4gICAgICAgICAgdGhpcy5fcXVldWUuZGVzdHJveSgpO1xuICAgICAgICAgIHRoaXMuX3F1ZXVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIHF1ZXVlIGFuZCB1cGRhdGUgaXRzIG9wdGlvbnNcbiAgICAgICAgaWYgKCF0aGlzLl9xdWV1ZSkge1xuICAgICAgICAgIHRoaXMuX3F1ZXVlID0gUXVldWUuZXh0ZW5kKHRoaXMsIHtcbiAgICAgICAgICAgIHJlcGxhY2U6IFtcImFkZFwiLCBcInVwZGF0ZVwiLCBcInJlbW92ZVwiXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnF1ZXVlICYmIHR5cGVvZiBvcHRpb25zLnF1ZXVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgdGhpcy5fcXVldWUuc2V0T3B0aW9ucyhvcHRpb25zLnF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBkYXRhIGl0ZW0gb3IgYW4gYXJyYXkgd2l0aCBpdGVtcy5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSBhZGRlZCB0byB0aGUgRGF0YVNldCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGBhZGRgLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KClcbiAgICpcbiAgICogLy8gYWRkIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEuYWRkKFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyB0ZXh0OiAnaXRlbSB3aXRob3V0IGFuIGlkJyB9XG4gICAqIF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzEsIDIsICc8VVVJRHY0PiddXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIEl0ZW1zIHRvIGJlIGFkZGVkIChpZHMgd2lsbCBiZSBnZW5lcmF0ZWQgaWYgbWlzc2luZykuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgYWRkZWRJZHMgLSBBcnJheSB3aXRoIHRoZSBpZHMgKGdlbmVyYXRlZCBpZiBub3QgcHJlc2VudCkgb2YgdGhlIGFkZGVkIGl0ZW1zLlxuICAgKiBAdGhyb3dzIFdoZW4gYW4gaXRlbSB3aXRoIHRoZSBzYW1lIGlkIGFzIGFueSBvZiB0aGUgYWRkZWQgaXRlbXMgYWxyZWFkeSBleGlzdHMuXG4gICAqL1xuICBwdWJsaWMgYWRkKGRhdGE6IEl0ZW0gfCBJdGVtW10sIHNlbmRlcklkPzogSWQgfCBudWxsKTogKHN0cmluZyB8IG51bWJlcilbXSB7XG4gICAgY29uc3QgYWRkZWRJZHM6IElkW10gPSBbXTtcbiAgICBsZXQgaWQ6IElkO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIC8vIEFycmF5XG4gICAgICBjb25zdCBpZHNUb0FkZDogSWRbXSA9IGRhdGEubWFwKChkKSA9PiBkW3RoaXMuX2lkUHJvcF0gYXMgSWQpO1xuICAgICAgaWYgKGlkc1RvQWRkLnNvbWUoKGlkKSA9PiB0aGlzLl9kYXRhLmhhcyhpZCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgZHVwbGljYXRlIGlkIHdhcyBmb3VuZCBpbiB0aGUgcGFyYW1ldGVyIGFycmF5LlwiKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBkYXRhLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlkID0gdGhpcy5fYWRkSXRlbShkYXRhW2ldKTtcbiAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvLyBTaW5nbGUgaXRlbVxuICAgICAgaWQgPSB0aGlzLl9hZGRJdGVtKGRhdGEpO1xuICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZGF0YVR5cGVcIik7XG4gICAgfVxuXG4gICAgaWYgKGFkZGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBhZGRlZElkcyB9LCBzZW5kZXJJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZGVkSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBpdGVtcy4gV2hlbiBhbiBpdGVtIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBwcm92aWRlZCBwcm9wZXJ0aWVzIHdpbGwgYmUgbWVyZ2VkIGluIHRoZSBleGlzdGluZyBpdGVtLiBXaGVuIGFuIGl0ZW0gZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSB1cGRhdGVkLCB0aGUgRGF0YVNldCB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYGFkZGAgZm9yIHRoZSBhZGRlZCBpdGVtcywgYW5kIGFuIGV2ZW50IGB1cGRhdGVgLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyBpZDogMywgdGV4dDogJ2l0ZW0gMycgfVxuICAgKiBdKVxuICAgKlxuICAgKiAvLyB1cGRhdGUgaXRlbXNcbiAgICogY29uc3QgaWRzID0gZGF0YS51cGRhdGUoW1xuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDIgKHVwZGF0ZWQpJyB9LFxuICAgKiAgIHsgaWQ6IDQsIHRleHQ6ICdpdGVtIDQgKG5ldyknIH1cbiAgICogXSlcbiAgICpcbiAgICogY29uc29sZS5sb2coaWRzKSAvLyBbMiwgNF1cbiAgICogYGBgXG4gICAqXG4gICAqICMjIFdhcm5pbmcgZm9yIFR5cGVTY3JpcHQgdXNlcnNcbiAgICogVGhpcyBtZXRob2QgbWF5IGludHJvZHVjZSBwYXJ0aWFsIGl0ZW1zIGludG8gdGhlIGRhdGEgc2V0LiBVc2UgYWRkIG9yIHVwZGF0ZU9ubHkgaW5zdGVhZCBmb3IgYmV0dGVyIHR5cGUgc2FmZXR5LlxuICAgKiBAcGFyYW0gZGF0YSAtIEl0ZW1zIHRvIGJlIHVwZGF0ZWQgKGlmIHRoZSBpZCBpcyBhbHJlYWR5IHByZXNlbnQpIG9yIGFkZGVkIChpZiB0aGUgaWQgaXMgbWlzc2luZykuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgdXBkYXRlZElkcyAtIFRoZSBpZHMgb2YgdGhlIGFkZGVkICh0aGVzZSBtYXkgYmUgbmV3bHkgZ2VuZXJhdGVkIGlmIHRoZXJlIHdhcyBubyBpZCBpbiB0aGUgaXRlbSBmcm9tIHRoZSBkYXRhKSBvciB1cGRhdGVkIGl0ZW1zLlxuICAgKiBAdGhyb3dzIFdoZW4gdGhlIHN1cHBsaWVkIGRhdGEgaXMgbmVpdGhlciBhbiBpdGVtIG5vciBhbiBhcnJheSBvZiBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGUoXG4gICAgZGF0YTogRGVlcFBhcnRpYWw8SXRlbT4gfCBEZWVwUGFydGlhbDxJdGVtPltdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IElkW10ge1xuICAgIGNvbnN0IGFkZGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgdXBkYXRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBjb25zdCBpZFByb3AgPSB0aGlzLl9pZFByb3A7XG5cbiAgICBjb25zdCBhZGRPclVwZGF0ZSA9IChpdGVtOiBEZWVwUGFydGlhbDxJdGVtPik6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qgb3JpZ0lkOiBPcHRJZCA9IGl0ZW1baWRQcm9wXTtcbiAgICAgIGlmIChvcmlnSWQgIT0gbnVsbCAmJiB0aGlzLl9kYXRhLmhhcyhvcmlnSWQpKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxJdGVtID0gaXRlbSBhcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+OyAvLyBpdCBoYXMgYW4gaWQsIHRoZXJlZm9yZSBpdCBpcyBhIGZ1bGxpdGVtXG4gICAgICAgIGNvbnN0IG9sZEl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kYXRhLmdldChvcmlnSWQpKTtcbiAgICAgICAgLy8gdXBkYXRlIGl0ZW1cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLl91cGRhdGVJdGVtKGZ1bGxJdGVtKTtcbiAgICAgICAgdXBkYXRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgdXBkYXRlZERhdGEucHVzaChmdWxsSXRlbSk7XG4gICAgICAgIG9sZERhdGEucHVzaChvbGRJdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFkZCBuZXcgaXRlbVxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuX2FkZEl0ZW0oaXRlbSBhcyBhbnkpO1xuICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIC8vIEFycmF5XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZGF0YS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoZGF0YVtpXSAmJiB0eXBlb2YgZGF0YVtpXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIGFkZE9yVXBkYXRlKGRhdGFbaV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiSWdub3JpbmcgaW5wdXQgaXRlbSwgd2hpY2ggaXMgbm90IGFuIG9iamVjdCBhdCBpbmRleCBcIiArIGlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvLyBTaW5nbGUgaXRlbVxuICAgICAgYWRkT3JVcGRhdGUoZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZGF0YVR5cGVcIik7XG4gICAgfVxuXG4gICAgaWYgKGFkZGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBhZGRlZElkcyB9LCBzZW5kZXJJZCk7XG4gICAgfVxuICAgIGlmICh1cGRhdGVkSWRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgcHJvcHMgPSB7IGl0ZW1zOiB1cGRhdGVkSWRzLCBvbGREYXRhOiBvbGREYXRhLCBkYXRhOiB1cGRhdGVkRGF0YSB9O1xuICAgICAgLy8gVE9ETzogcmVtb3ZlIGRlcHJlY2F0ZWQgcHJvcGVydHkgJ2RhdGEnIHNvbWUgZGF5XG4gICAgICAvL09iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2RhdGEnLCB7XG4gICAgICAvLyAgJ2dldCc6IChmdW5jdGlvbigpIHtcbiAgICAgIC8vICAgIGNvbnNvbGUud2FybignUHJvcGVydHkgZGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgRGF0YVNldC5nZXQoaWRzKSB0byByZXRyaWV2ZSB0aGUgbmV3IGRhdGEsIHVzZSB0aGUgb2xkRGF0YSBwcm9wZXJ0eSBvbiB0aGlzIG9iamVjdCB0byBnZXQgdGhlIG9sZCBkYXRhJyk7XG4gICAgICAvLyAgICByZXR1cm4gdXBkYXRlZERhdGE7XG4gICAgICAvLyAgfSkuYmluZCh0aGlzKVxuICAgICAgLy99KTtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJ1cGRhdGVcIiwgcHJvcHMsIHNlbmRlcklkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkZWRJZHMuY29uY2F0KHVwZGF0ZWRJZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBpdGVtcy4gV2hlbiBhbiBpdGVtIGRvZXMgbm90IGV4aXN0LCBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIHByb3ZpZGVkIHByb3BlcnRpZXMgd2lsbCBiZSBkZWVwbHkgbWVyZ2VkIGludG8gdGhlIGV4aXN0aW5nIGl0ZW0uXG4gICAqIFdoZW4gYW4gaXRlbSBkb2VzIG5vdCBleGlzdCAoaWQgbm90IHByZXNlbnQgaW4gdGhlIGRhdGEgc2V0IG9yIGFic2VudCksIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duIGFuZCBub3RoaW5nIHdpbGwgYmUgY2hhbmdlZC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSB1cGRhdGVkLCB0aGUgRGF0YVNldCB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYHVwZGF0ZWAuXG4gICAqIFdoZW4gYSBgc2VuZGVySWRgIGlzIHByb3ZpZGVkLCB0aGlzIGlkIHdpbGwgYmUgcGFzc2VkIHdpdGggdGhlIHRyaWdnZXJlZCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqICMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gICAqIGNvbnN0IGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQoW1xuICAgKiAgIHsgaWQ6IDEsIHRleHQ6ICdpdGVtIDEnIH0sXG4gICAqICAgeyBpZDogMiwgdGV4dDogJ2l0ZW0gMicgfSxcbiAgICogICB7IGlkOiAzLCB0ZXh0OiAnaXRlbSAzJyB9LFxuICAgKiBdKVxuICAgKlxuICAgKiAvLyB1cGRhdGUgaXRlbXNcbiAgICogY29uc3QgaWRzID0gZGF0YS51cGRhdGUoW1xuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDIgKHVwZGF0ZWQpJyB9LCAvLyB3b3Jrc1xuICAgKiAgIC8vIHsgaWQ6IDQsIHRleHQ6ICdpdGVtIDQgKG5ldyknIH0sIC8vIHdvdWxkIHRocm93XG4gICAqICAgLy8geyB0ZXh0OiAnaXRlbSA0IChuZXcpJyB9LCAvLyB3b3VsZCBhbHNvIHRocm93XG4gICAqIF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzJdXG4gICAqIGBgYFxuICAgKiBAcGFyYW0gZGF0YSAtIFVwZGF0ZXMgKHRoZSBpZCBhbmQgb3B0aW9uYWxseSBvdGhlciBwcm9wcykgdG8gdGhlIGl0ZW1zIGluIHRoaXMgZGF0YSBzZXQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgdXBkYXRlZElkcyAtIFRoZSBpZHMgb2YgdGhlIHVwZGF0ZWQgaXRlbXMuXG4gICAqIEB0aHJvd3MgV2hlbiB0aGUgc3VwcGxpZWQgZGF0YSBpcyBuZWl0aGVyIGFuIGl0ZW0gbm9yIGFuIGFycmF5IG9mIGl0ZW1zLCB3aGVuIHRoZSBpZHMgYXJlIG1pc3NpbmcuXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlT25seShcbiAgICBkYXRhOiBVcGRhdGVJdGVtPEl0ZW0sIElkUHJvcD4gfCBVcGRhdGVJdGVtPEl0ZW0sIElkUHJvcD5bXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiBJZFtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlRXZlbnREYXRhID0gZGF0YVxuICAgICAgLm1hcChcbiAgICAgICAgKFxuICAgICAgICAgIHVwZGF0ZVxuICAgICAgICApOiB7XG4gICAgICAgICAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgICB1cGRhdGU6IFVwZGF0ZUl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgfSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2xkRGF0YSA9IHRoaXMuX2RhdGEuZ2V0KHVwZGF0ZVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgICBpZiAob2xkRGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVcGRhdGluZyBub24tZXhpc3RlbnQgaXRlbXMgaXMgbm90IGFsbG93ZWQuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBvbGREYXRhLCB1cGRhdGUgfTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLm1hcChcbiAgICAgICAgKHtcbiAgICAgICAgICBvbGREYXRhLFxuICAgICAgICAgIHVwZGF0ZSxcbiAgICAgICAgfSk6IHtcbiAgICAgICAgICBpZDogSWQ7XG4gICAgICAgICAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgICB1cGRhdGVkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgfSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBvbGREYXRhW3RoaXMuX2lkUHJvcF07XG4gICAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBwdXJlRGVlcE9iamVjdEFzc2lnbihvbGREYXRhLCB1cGRhdGUpO1xuXG4gICAgICAgICAgdGhpcy5fZGF0YS5zZXQoaWQsIHVwZGF0ZWREYXRhKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG9sZERhdGE6IG9sZERhdGEsXG4gICAgICAgICAgICB1cGRhdGVkRGF0YSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgaWYgKHVwZGF0ZUV2ZW50RGF0YS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByb3BzOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl0gPSB7XG4gICAgICAgIGl0ZW1zOiB1cGRhdGVFdmVudERhdGEubWFwKCh2YWx1ZSk6IElkID0+IHZhbHVlLmlkKSxcbiAgICAgICAgb2xkRGF0YTogdXBkYXRlRXZlbnREYXRhLm1hcChcbiAgICAgICAgICAodmFsdWUpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+ID0+IHZhbHVlLm9sZERhdGFcbiAgICAgICAgKSxcbiAgICAgICAgZGF0YTogdXBkYXRlRXZlbnREYXRhLm1hcChcbiAgICAgICAgICAodmFsdWUpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+ID0+IHZhbHVlLnVwZGF0ZWREYXRhXG4gICAgICAgICksXG4gICAgICB9O1xuICAgICAgLy8gVE9ETzogcmVtb3ZlIGRlcHJlY2F0ZWQgcHJvcGVydHkgJ2RhdGEnIHNvbWUgZGF5XG4gICAgICAvL09iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2RhdGEnLCB7XG4gICAgICAvLyAgJ2dldCc6IChmdW5jdGlvbigpIHtcbiAgICAgIC8vICAgIGNvbnNvbGUud2FybignUHJvcGVydHkgZGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgRGF0YVNldC5nZXQoaWRzKSB0byByZXRyaWV2ZSB0aGUgbmV3IGRhdGEsIHVzZSB0aGUgb2xkRGF0YSBwcm9wZXJ0eSBvbiB0aGlzIG9iamVjdCB0byBnZXQgdGhlIG9sZCBkYXRhJyk7XG4gICAgICAvLyAgICByZXR1cm4gdXBkYXRlZERhdGE7XG4gICAgICAvLyAgfSkuYmluZCh0aGlzKVxuICAgICAgLy99KTtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJ1cGRhdGVcIiwgcHJvcHMsIHNlbmRlcklkKTtcblxuICAgICAgcmV0dXJuIHByb3BzLml0ZW1zO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoaWQ6IElkKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoaWRzOiBJZFtdKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZCB8IElkW10sXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6XG4gICAgfCBudWxsXG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+XG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W11cbiAgICB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgZmlyc3Q/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiB8IElkIHwgSWRbXSxcbiAgICBzZWNvbmQ/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+IHtcbiAgICAvLyBAVE9ETzogV291ZG4ndCBpdCBiZSBiZXR0ZXIgdG8gc3BsaXQgdGhpcyBpbnRvIG11bHRpcGxlIG1ldGhvZHM/XG5cbiAgICAvLyBwYXJzZSB0aGUgYXJndW1lbnRzXG4gICAgbGV0IGlkOiBJZCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaWRzOiBJZFtdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNJZChmaXJzdCkpIHtcbiAgICAgIC8vIGdldChpZCBbLCBvcHRpb25zXSlcbiAgICAgIGlkID0gZmlyc3Q7XG4gICAgICBvcHRpb25zID0gc2Vjb25kO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaXJzdCkpIHtcbiAgICAgIC8vIGdldChpZHMgWywgb3B0aW9uc10pXG4gICAgICBpZHMgPSBmaXJzdDtcbiAgICAgIG9wdGlvbnMgPSBzZWNvbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldChbLCBvcHRpb25zXSlcbiAgICAgIG9wdGlvbnMgPSBmaXJzdDtcbiAgICB9XG5cbiAgICAvLyBkZXRlcm1pbmUgdGhlIHJldHVybiB0eXBlXG4gICAgY29uc3QgcmV0dXJuVHlwZSA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMucmV0dXJuVHlwZSA9PT0gXCJPYmplY3RcIiA/IFwiT2JqZWN0XCIgOiBcIkFycmF5XCI7XG4gICAgLy8gQFRPRE86IFdURiBpcyB0aGlzPyBPciBhbSBJIG1pc3Npbmcgc29tZXRoaW5nP1xuICAgIC8vIHZhciByZXR1cm5UeXBlXG4gICAgLy8gaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXR1cm5UeXBlKSB7XG4gICAgLy8gICB2YXIgYWxsb3dlZFZhbHVlcyA9IFsnQXJyYXknLCAnT2JqZWN0J11cbiAgICAvLyAgIHJldHVyblR5cGUgPVxuICAgIC8vICAgICBhbGxvd2VkVmFsdWVzLmluZGV4T2Yob3B0aW9ucy5yZXR1cm5UeXBlKSA9PSAtMVxuICAgIC8vICAgICAgID8gJ0FycmF5J1xuICAgIC8vICAgICAgIDogb3B0aW9ucy5yZXR1cm5UeXBlXG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIHJldHVyblR5cGUgPSAnQXJyYXknXG4gICAgLy8gfVxuXG4gICAgLy8gYnVpbGQgb3B0aW9uc1xuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3QgaXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGxldCBpdGVtOiB1bmRlZmluZWQgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+ID0gdW5kZWZpbmVkO1xuICAgIGxldCBpdGVtSWRzOiB1bmRlZmluZWQgfCBJZFtdID0gdW5kZWZpbmVkO1xuICAgIGxldCBpdGVtSWQ6IHVuZGVmaW5lZCB8IElkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gY29udmVydCBpdGVtc1xuICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAvLyByZXR1cm4gYSBzaW5nbGUgaXRlbVxuICAgICAgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgIGlmIChpdGVtICYmIGZpbHRlciAmJiAhZmlsdGVyKGl0ZW0pKSB7XG4gICAgICAgIGl0ZW0gPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpZHMgIT0gbnVsbCkge1xuICAgICAgLy8gcmV0dXJuIGEgc3Vic2V0IG9mIGl0ZW1zXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZHNbaV0pO1xuICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmICghZmlsdGVyIHx8IGZpbHRlcihpdGVtKSkpIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJldHVybiBhbGwgaXRlbXNcbiAgICAgIGl0ZW1JZHMgPSBbLi4udGhpcy5fZGF0YS5rZXlzKCldO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaXRlbUlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGl0ZW1JZCk7XG4gICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGl0ZW0pKSkge1xuICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvcmRlciB0aGUgcmVzdWx0c1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMub3JkZXIgJiYgaWQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9zb3J0KGl0ZW1zLCBvcHRpb25zLm9yZGVyKTtcbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgZmllbGRzIG9mIHRoZSBpdGVtc1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZmllbGRzKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBvcHRpb25zLmZpZWxkcztcbiAgICAgIGlmIChpZCAhPSB1bmRlZmluZWQgJiYgaXRlbSAhPSBudWxsKSB7XG4gICAgICAgIGl0ZW0gPSB0aGlzLl9maWx0ZXJGaWVsZHMoaXRlbSwgZmllbGRzKSBhcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaXRlbXNbaV0gPSB0aGlzLl9maWx0ZXJGaWVsZHMoaXRlbXNbaV0sIGZpZWxkcykgYXMgRnVsbEl0ZW08XG4gICAgICAgICAgICBJdGVtLFxuICAgICAgICAgICAgSWRQcm9wXG4gICAgICAgICAgPjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJldHVybiB0aGUgcmVzdWx0c1xuICAgIGlmIChyZXR1cm5UeXBlID09IFwiT2JqZWN0XCIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4gPSB7fTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCByZXN1bHRhbnQgPSBpdGVtc1tpXTtcbiAgICAgICAgLy8gQFRPRE86IFNob3Vkbid0IHRoaXMgYmUgdGhpcy5fZmllbGRJZD9cbiAgICAgICAgLy8gcmVzdWx0W3Jlc3VsdGFudC5pZF0gPSByZXN1bHRhbnRcbiAgICAgICAgY29uc3QgaWQ6IElkID0gcmVzdWx0YW50W3RoaXMuX2lkUHJvcF07XG4gICAgICAgIHJlc3VsdFtpZF0gPSByZXN1bHRhbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAvLyBhIHNpbmdsZSBpdGVtXG4gICAgICAgIHJldHVybiBpdGVtID8/IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBqdXN0IHJldHVybiBvdXIgYXJyYXlcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0SWRzKG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9uczxJdGVtPik6IElkW10ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3Qgb3JkZXIgPSBvcHRpb25zICYmIG9wdGlvbnMub3JkZXI7XG4gICAgY29uc3QgaXRlbUlkcyA9IFsuLi5kYXRhLmtleXMoKV07XG4gICAgY29uc3QgaWRzOiBJZFtdID0gW107XG5cbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAvLyBnZXQgZmlsdGVyZWQgaXRlbXNcbiAgICAgIGlmIChvcmRlcikge1xuICAgICAgICAvLyBjcmVhdGUgb3JkZXJlZCBsaXN0XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiBmaWx0ZXIoaXRlbSkpIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc29ydChpdGVtcywgb3JkZXIpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlkcy5wdXNoKGl0ZW1zW2ldW3RoaXMuX2lkUHJvcF0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgdW5vcmRlcmVkIGxpc3RcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmIGZpbHRlcihpdGVtKSkge1xuICAgICAgICAgICAgaWRzLnB1c2goaXRlbVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZ2V0IGFsbCBpdGVtc1xuICAgICAgaWYgKG9yZGVyKSB7XG4gICAgICAgIC8vIGNyZWF0ZSBhbiBvcmRlcmVkIGxpc3RcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgICAgaXRlbXMucHVzaChkYXRhLmdldChpZCkhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NvcnQoaXRlbXMsIG9yZGVyKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZHMucHVzaChpdGVtc1tpXVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIHVub3JkZXJlZCBsaXN0XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmdldChpZCk7XG4gICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgaWRzLnB1c2goaXRlbVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaWRzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXREYXRhU2V0KCk6IERhdGFTZXQ8SXRlbSwgSWRQcm9wPiB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGZvckVhY2goXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcikge1xuICAgICAgLy8gZXhlY3V0ZSBmb3JFYWNoIG9uIG9yZGVyZWQgbGlzdFxuICAgICAgY29uc3QgaXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IHRoaXMuZ2V0KG9wdGlvbnMpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgICBjb25zdCBpZCA9IGl0ZW1bdGhpcy5faWRQcm9wXTtcbiAgICAgICAgY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bm9yZGVyZWRcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoaXRlbSkpKSB7XG4gICAgICAgICAgY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBtYXA8VD4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IFQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VNYXBPcHRpb25zPEl0ZW0sIFQ+XG4gICk6IFRbXSB7XG4gICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICBjb25zdCBtYXBwZWRJdGVtczogVFtdID0gW107XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgY29uc3QgaXRlbUlkcyA9IFsuLi5kYXRhLmtleXMoKV07XG5cbiAgICAvLyBjb252ZXJ0IGFuZCBmaWx0ZXIgaXRlbXNcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGl0ZW0pKSkge1xuICAgICAgICBtYXBwZWRJdGVtcy5wdXNoKGNhbGxiYWNrKGl0ZW0sIGlkKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gb3JkZXIgaXRlbXNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyKSB7XG4gICAgICB0aGlzLl9zb3J0KG1hcHBlZEl0ZW1zLCBvcHRpb25zLm9yZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwcGVkSXRlbXM7XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXJGaWVsZHM8SyBleHRlbmRzIHN0cmluZz4oaXRlbTogbnVsbCwgZmllbGRzOiBLW10pOiBudWxsO1xuICBwcml2YXRlIF9maWx0ZXJGaWVsZHM8SyBleHRlbmRzIHN0cmluZz4oXG4gICAgaXRlbTogUmVjb3JkPEssIHVua25vd24+LFxuICAgIGZpZWxkczogS1tdXG4gICk6IFJlY29yZDxLLCB1bmtub3duPjtcbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGl0ZW06IFJlY29yZDxLLCB1bmtub3duPixcbiAgICBmaWVsZHM6IEtbXSB8IFJlY29yZDxLLCBzdHJpbmc+XG4gICk6IGFueTtcbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgZmllbGRzIG9mIGFuIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gd2hvc2UgZmllbGRzIHNob3VsZCBiZSBmaWx0ZXJlZC5cbiAgICogQHBhcmFtIGZpZWxkcyAtIFRoZSBuYW1lcyBvZiB0aGUgZmllbGRzIHRoYXQgd2lsbCBiZSBrZXB0LlxuICAgKiBAdHlwZVBhcmFtIEsgLSBGaWVsZCBuYW1lIHR5cGUuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgZmllbGRzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGl0ZW06IFJlY29yZDxLLCB1bmtub3duPiB8IG51bGwsXG4gICAgZmllbGRzOiBLW10gfCBSZWNvcmQ8SywgdW5rbm93bj5cbiAgKTogUmVjb3JkPEssIHVua25vd24+IHwgbnVsbCB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICAvLyBpdGVtIGlzIG51bGxcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICBBcnJheS5pc0FycmF5KGZpZWxkcylcbiAgICAgICAgPyAvLyBVc2UgdGhlIHN1cHBsaWVkIGFycmF5XG4gICAgICAgICAgZmllbGRzXG4gICAgICAgIDogLy8gVXNlIHRoZSBrZXlzIG9mIHRoZSBzdXBwbGllZCBvYmplY3RcbiAgICAgICAgICAoT2JqZWN0LmtleXMoZmllbGRzKSBhcyBLW10pXG4gICAgKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgKGZpbHRlcmVkSXRlbSwgZmllbGQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gICAgICAgIGZpbHRlcmVkSXRlbVtmaWVsZF0gPSBpdGVtW2ZpZWxkXTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbTtcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU29ydCB0aGUgcHJvdmlkZWQgYXJyYXkgd2l0aCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIGl0ZW1zIC0gSXRlbXMgdG8gYmUgc29ydGVkIGluIHBsYWNlLlxuICAgKiBAcGFyYW0gb3JkZXIgLSBBIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBpdGVtcyBpbiB0aGUgaXRlbXMgYXJyYXkuXG4gICAqL1xuICBwcml2YXRlIF9zb3J0PFQ+KGl0ZW1zOiBUW10sIG9yZGVyOiBEYXRhSW50ZXJmYWNlT3JkZXI8VD4pOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIG9yZGVyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBvcmRlciBieSBwcm92aWRlZCBmaWVsZCBuYW1lXG4gICAgICBjb25zdCBuYW1lID0gb3JkZXI7IC8vIGZpZWxkIG5hbWVcbiAgICAgIGl0ZW1zLnNvcnQoKGEsIGIpOiAtMSB8IDAgfCAxID0+IHtcbiAgICAgICAgLy8gQFRPRE86IEhvdyB0byB0cmVhdCBtaXNzaW5nIHByb3BlcnRpZXM/XG4gICAgICAgIGNvbnN0IGF2ID0gKGEgYXMgYW55KVtuYW1lXTtcbiAgICAgICAgY29uc3QgYnYgPSAoYiBhcyBhbnkpW25hbWVdO1xuICAgICAgICByZXR1cm4gYXYgPiBidiA/IDEgOiBhdiA8IGJ2ID8gLTEgOiAwO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3JkZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgLy8gb3JkZXIgYnkgc29ydCBmdW5jdGlvblxuICAgICAgaXRlbXMuc29ydChvcmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IGV4dGVuZCBvcmRlciBieSBhbiBPYmplY3Qge2ZpZWxkOnN0cmluZywgZGlyZWN0aW9uOnN0cmluZ31cbiAgICAgIC8vICAgICAgIHdoZXJlIGRpcmVjdGlvbiBjYW4gYmUgJ2FzYycgb3IgJ2Rlc2MnXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT3JkZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaXRlbSBvciBtdWx0aXBsZSBpdGVtcyBieSDigJxyZWZlcmVuY2XigJ0gKG9ubHkgdGhlIGlkIGlzIHVzZWQpIG9yIGJ5IGlkLlxuICAgKlxuICAgKiBUaGUgbWV0aG9kIGlnbm9yZXMgcmVtb3ZhbCBvZiBub24tZXhpc3RpbmcgaXRlbXMsIGFuZCByZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGlkcyBvZiB0aGUgaXRlbXMgd2hpY2ggYXJlIGFjdHVhbGx5IHJlbW92ZWQgZnJvbSB0aGUgRGF0YVNldC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSByZW1vdmVkLCB0aGUgRGF0YVNldCB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYHJlbW92ZWAgZm9yIHRoZSByZW1vdmVkIGl0ZW1zLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyBpZDogMywgdGV4dDogJ2l0ZW0gMycgfVxuICAgKiBdKVxuICAgKlxuICAgKiAvLyByZW1vdmUgaXRlbXNcbiAgICogY29uc3QgaWRzID0gZGF0YS5yZW1vdmUoWzIsIHsgaWQ6IDMgfSwgNF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzIsIDNdXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBPbmUgb3IgbW9yZSBpdGVtcyBvciBpZHMgb2YgaXRlbXMgdG8gYmUgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gU2VuZGVyIGlkLlxuICAgKiBAcmV0dXJucyBUaGUgaWRzIG9mIHRoZSByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZShpZDogSWQgfCBJdGVtIHwgKElkIHwgSXRlbSlbXSwgc2VuZGVySWQ/OiBJZCB8IG51bGwpOiBJZFtdIHtcbiAgICBjb25zdCByZW1vdmVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcblxuICAgIC8vIGZvcmNlIGV2ZXJ5dGhpbmcgdG8gYmUgYW4gYXJyYXkgZm9yIHNpbXBsaWNpdHlcbiAgICBjb25zdCBpZHMgPSBBcnJheS5pc0FycmF5KGlkKSA/IGlkIDogW2lkXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9yZW1vdmUoaWRzW2ldKTtcbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1JZDogT3B0SWQgPSBpdGVtW3RoaXMuX2lkUHJvcF07XG4gICAgICAgIGlmIChpdGVtSWQgIT0gbnVsbCkge1xuICAgICAgICAgIHJlbW92ZWRJZHMucHVzaChpdGVtSWQpO1xuICAgICAgICAgIHJlbW92ZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbW92ZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICBcInJlbW92ZVwiLFxuICAgICAgICB7IGl0ZW1zOiByZW1vdmVkSWRzLCBvbGREYXRhOiByZW1vdmVkSXRlbXMgfSxcbiAgICAgICAgc2VuZGVySWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbW92ZWRJZHM7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGl0ZW0gYnkgaXRzIGlkIG9yIHJlZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gSWQgb2YgYW4gaXRlbSBvciB0aGUgaXRlbSBpdHNlbGYuXG4gICAqIEByZXR1cm5zIFRoZSByZW1vdmVkIGl0ZW0gaWYgcmVtb3ZlZCwgbnVsbCBvdGhlcndpc2UuXG4gICAqL1xuICBwcml2YXRlIF9yZW1vdmUoaWQ6IElkIHwgSXRlbSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBudWxsIHtcbiAgICAvLyBAVE9ETzogSXQgb3JpZ2lhbmxseSByZXR1cm5lZCB0aGUgaXRlbSBhbHRob3VnaCB0aGUgZG9jcyBzYXkgaWQuXG4gICAgLy8gVGhlIGNvZGUgZXhwZWN0cyB0aGUgaXRlbSwgc28gcHJvYmFibHkgYW4gZXJyb3IgaW4gdGhlIGRvY3MuXG4gICAgbGV0IGlkZW50OiBPcHRJZDtcblxuICAgIC8vIGNvbmZpcm0gdGhlIGlkIHRvIHVzZSBiYXNlZCBvbiB0aGUgYXJncyB0eXBlXG4gICAgaWYgKGlzSWQoaWQpKSB7XG4gICAgICBpZGVudCA9IGlkO1xuICAgIH0gZWxzZSBpZiAoaWQgJiYgdHlwZW9mIGlkID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZGVudCA9IGlkW3RoaXMuX2lkUHJvcF07IC8vIGxvb2sgZm9yIHRoZSBpZGVudGlmaWVyIGZpZWxkIHVzaW5nIC5faWRQcm9wXG4gICAgfVxuXG4gICAgLy8gZG8gdGhlIHJlbW92aW5nIGlmIHRoZSBpdGVtIGlzIGZvdW5kXG4gICAgaWYgKGlkZW50ICE9IG51bGwgJiYgdGhpcy5fZGF0YS5oYXMoaWRlbnQpKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWRlbnQpIHx8IG51bGw7XG4gICAgICB0aGlzLl9kYXRhLmRlbGV0ZShpZGVudCk7XG4gICAgICAtLXRoaXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIGVudGlyZSBkYXRhIHNldC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSByZW1vdmVkLCB0aGUge0BsaW5rIERhdGFTZXR9IHdpbGwgdHJpZ2dlciBhbiBldmVudCBgcmVtb3ZlYCBmb3IgYWxsIHJlbW92ZWQgaXRlbXMuIFdoZW4gYSBgc2VuZGVySWRgIGlzIHByb3ZpZGVkLCB0aGlzIGlkIHdpbGwgYmUgcGFzc2VkIHdpdGggdGhlIHRyaWdnZXJlZCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgcmVtb3ZlZElkcyAtIFRoZSBpZHMgb2YgYWxsIHJlbW92ZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoc2VuZGVySWQ/OiBJZCB8IG51bGwpOiBJZFtdIHtcbiAgICBjb25zdCBpZHMgPSBbLi4udGhpcy5fZGF0YS5rZXlzKCldO1xuICAgIGNvbnN0IGl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGl0ZW1zLnB1c2godGhpcy5fZGF0YS5nZXQoaWRzW2ldKSEpO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGEuY2xlYXIoKTtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl90cmlnZ2VyKFwicmVtb3ZlXCIsIHsgaXRlbXM6IGlkcywgb2xkRGF0YTogaXRlbXMgfSwgc2VuZGVySWQpO1xuXG4gICAgcmV0dXJuIGlkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBpdGVtIHdpdGggbWF4aW11bSB2YWx1ZSBvZiBhIHNwZWNpZmllZCBmaWVsZC5cbiAgICpcbiAgICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBzaG91bGQgYmUgc2VhcmNoZWQgZm9yIG1heCB2YWx1ZS5cbiAgICogQHJldHVybnMgSXRlbSBjb250YWluaW5nIG1heCB2YWx1ZSwgb3IgbnVsbCBpZiBubyBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBtYXgoZmllbGQ6IGtleW9mIEl0ZW0pOiBJdGVtIHwgbnVsbCB7XG4gICAgbGV0IG1heCA9IG51bGw7XG4gICAgbGV0IG1heEZpZWxkID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLl9kYXRhLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBpdGVtRmllbGQgPSBpdGVtW2ZpZWxkXTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGl0ZW1GaWVsZCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAobWF4RmllbGQgPT0gbnVsbCB8fCBpdGVtRmllbGQgPiBtYXhGaWVsZClcbiAgICAgICkge1xuICAgICAgICBtYXggPSBpdGVtO1xuICAgICAgICBtYXhGaWVsZCA9IGl0ZW1GaWVsZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF4IHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaXRlbSB3aXRoIG1pbmltdW0gdmFsdWUgb2YgYSBzcGVjaWZpZWQgZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkIGZvciBtaW4gdmFsdWUuXG4gICAqIEByZXR1cm5zIEl0ZW0gY29udGFpbmluZyBtaW4gdmFsdWUsIG9yIG51bGwgaWYgbm8gaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgbWluKGZpZWxkOiBrZXlvZiBJdGVtKTogSXRlbSB8IG51bGwge1xuICAgIGxldCBtaW4gPSBudWxsO1xuICAgIGxldCBtaW5GaWVsZCA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fZGF0YS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgaXRlbUZpZWxkID0gaXRlbVtmaWVsZF07XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBpdGVtRmllbGQgPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgKG1pbkZpZWxkID09IG51bGwgfHwgaXRlbUZpZWxkIDwgbWluRmllbGQpXG4gICAgICApIHtcbiAgICAgICAgbWluID0gaXRlbTtcbiAgICAgICAgbWluRmllbGQgPSBpdGVtRmllbGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbiB8fCBudWxsO1xuICB9XG5cbiAgcHVibGljIGRpc3RpbmN0PFQgZXh0ZW5kcyBrZXlvZiBJdGVtPihwcm9wOiBUKTogSXRlbVtUXVtdO1xuICBwdWJsaWMgZGlzdGluY3QocHJvcDogc3RyaW5nKTogdW5rbm93bltdO1xuICAvKipcbiAgICogRmluZCBhbGwgZGlzdGluY3QgdmFsdWVzIG9mIGEgc3BlY2lmaWVkIGZpZWxkXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wIC0gVGhlIHByb3BlcnR5IG5hbWUgd2hvc2UgZGlzdGluY3QgdmFsdWVzIHNob3VsZCBiZSByZXR1cm5lZC5cbiAgICogQHJldHVybnMgVW5vcmRlcmVkIGFycmF5IGNvbnRhaW5pbmcgYWxsIGRpc3RpbmN0IHZhbHVlcy4gSXRlbXMgd2l0aG91dCBzcGVjaWZpZWQgcHJvcGVydHkgYXJlIGlnbm9yZWQuXG4gICAqL1xuICBwdWJsaWMgZGlzdGluY3Q8VCBleHRlbmRzIHN0cmluZz4ocHJvcDogVCk6IHVua25vd25bXSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgY29uc3QgaXRlbUlkcyA9IFsuLi5kYXRhLmtleXMoKV07XG4gICAgY29uc3QgdmFsdWVzOiB1bmtub3duW10gPSBbXTtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmdldChpZCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IChpdGVtIGFzIGFueSlbcHJvcF07XG4gICAgICBsZXQgZXhpc3RzID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgaWYgKHZhbHVlc1tqXSA9PSB2YWx1ZSkge1xuICAgICAgICAgIGV4aXN0cyA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZXhpc3RzICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsdWVzW2NvdW50XSA9IHZhbHVlO1xuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc2luZ2xlIGl0ZW0uIFdpbGwgZmFpbCB3aGVuIGFuIGl0ZW0gd2l0aCB0aGUgc2FtZSBpZCBhbHJlYWR5IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIGl0ZW0gLSBBIG5ldyBpdGVtIHRvIGJlIGFkZGVkLlxuICAgKiBAcmV0dXJucyBBZGRlZCBpdGVtJ3MgaWQuIEFuIGlkIGlzIGdlbmVyYXRlZCB3aGVuIGl0IGlzIG5vdCBwcmVzZW50IGluIHRoZSBpdGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkSXRlbShpdGVtOiBJdGVtKTogSWQge1xuICAgIGNvbnN0IGZ1bGxJdGVtID0gZW5zdXJlRnVsbEl0ZW0oaXRlbSwgdGhpcy5faWRQcm9wKTtcbiAgICBjb25zdCBpZCA9IGZ1bGxJdGVtW3RoaXMuX2lkUHJvcF07XG5cbiAgICAvLyBjaGVjayB3aGV0aGVyIHRoaXMgaWQgaXMgYWxyZWFkeSB0YWtlblxuICAgIGlmICh0aGlzLl9kYXRhLmhhcyhpZCkpIHtcbiAgICAgIC8vIGl0ZW0gYWxyZWFkeSBleGlzdHNcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgYWRkIGl0ZW06IGl0ZW0gd2l0aCBpZCBcIiArIGlkICsgXCIgYWxyZWFkeSBleGlzdHNcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhLnNldChpZCwgZnVsbEl0ZW0pO1xuICAgICsrdGhpcy5sZW5ndGg7XG5cbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGEgc2luZ2xlIGl0ZW06IG1lcmdlIHdpdGggZXhpc3RpbmcgaXRlbS5cbiAgICogV2lsbCBmYWlsIHdoZW4gdGhlIGl0ZW0gaGFzIG5vIGlkLCBvciB3aGVuIHRoZXJlIGRvZXMgbm90IGV4aXN0IGFuIGl0ZW0gd2l0aCB0aGUgc2FtZSBpZC5cbiAgICpcbiAgICogQHBhcmFtIHVwZGF0ZSAtIFRoZSBuZXcgaXRlbVxuICAgKiBAcmV0dXJucyBUaGUgaWQgb2YgdGhlIHVwZGF0ZWQgaXRlbS5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZUl0ZW0odXBkYXRlOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+KTogSWQge1xuICAgIGNvbnN0IGlkOiBPcHRJZCA9IHVwZGF0ZVt0aGlzLl9pZFByb3BdO1xuICAgIGlmIChpZCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHVwZGF0ZSBpdGVtOiBpdGVtIGhhcyBubyBpZCAoaXRlbTogXCIgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHVwZGF0ZSkgK1xuICAgICAgICAgIFwiKVwiXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgIGlmICghaXRlbSkge1xuICAgICAgLy8gaXRlbSBkb2Vzbid0IGV4aXN0XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXBkYXRlIGl0ZW06IG5vIGl0ZW0gd2l0aCBpZCBcIiArIGlkICsgXCIgZm91bmRcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YS5zZXQoaWQsIHsgLi4uaXRlbSwgLi4udXBkYXRlIH0pO1xuXG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdHJlYW0oaWRzPzogSXRlcmFibGU8SWQ+KTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgaWYgKGlkcykge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbTxJdGVtPih7XG4gICAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRhdGEuZ2V0KGlkKTtcbiAgICAgICAgICAgIGlmIChpdGVtICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgeWllbGQgW2lkLCBpdGVtXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtKHtcbiAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl06IHRoaXMuX2RhdGEuZW50cmllcy5iaW5kKHRoaXMuX2RhdGEpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyogZGV2ZWxibG9jazpzdGFydCAqL1xuICBwdWJsaWMgZ2V0IHRlc3RMZWFrRGF0YSgpOiBNYXA8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRlc3RMZWFrSWRQcm9wKCk6IElkUHJvcCB7XG4gICAgcmV0dXJuIHRoaXMuX2lkUHJvcDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRlc3RMZWFrT3B0aW9ucygpOiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPiB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cbiAgcHVibGljIGdldCB0ZXN0TGVha1F1ZXVlKCk6IFF1ZXVlPHRoaXM+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlO1xuICB9XG4gIHB1YmxpYyBzZXQgdGVzdExlYWtRdWV1ZSh2OiBRdWV1ZTx0aGlzPiB8IG51bGwpIHtcbiAgICB0aGlzLl9xdWV1ZSA9IHY7XG4gIH1cbiAgLyogZGV2ZWxibG9jazplbmQgKi9cbn1cbiIsICJpbXBvcnQge1xuICBEYXRhSW50ZXJmYWNlLFxuICBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheSxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3QsXG4gIERhdGFJbnRlcmZhY2VNYXBPcHRpb25zLFxuICBFdmVudENhbGxiYWNrc1dpdGhBbnksXG4gIEV2ZW50TmFtZSxcbiAgRXZlbnRQYXlsb2FkcyxcbiAgRnVsbEl0ZW0sXG4gIElkLFxuICBQYXJ0SXRlbSxcbiAgUmVtb3ZlRXZlbnRQYXlsb2FkLFxuICBVcGRhdGVFdmVudFBheWxvYWQsXG4gIGlzSWQsXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbmltcG9ydCB7IERhdGFTZXQgfSBmcm9tIFwiLi9kYXRhLXNldFwiO1xuaW1wb3J0IHsgRGF0YVNldFBhcnQgfSBmcm9tIFwiLi9kYXRhLXNldC1wYXJ0XCI7XG5pbXBvcnQgeyBEYXRhU3RyZWFtIH0gZnJvbSBcIi4vZGF0YS1zdHJlYW1cIjtcblxuLyoqXG4gKiBEYXRhIHZpZXcgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhVmlld09wdGlvbnM8SXRlbSwgSWRQcm9wIGV4dGVuZHMgc3RyaW5nPiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmllbGQgY29udGFpbmluZyB0aGUgaWQgb2YgdGhlIGl0ZW1zLiBXaGVuIGRhdGEgaXMgZmV0Y2hlZCBmcm9tIGEgc2VydmVyIHdoaWNoIHVzZXMgc29tZSBzcGVjaWZpYyBmaWVsZCB0byBpZGVudGlmeSBpdGVtcywgdGhpcyBmaWVsZCBuYW1lIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlIERhdGFTZXQgdXNpbmcgdGhlIG9wdGlvbiBgZmllbGRJZGAuIEZvciBleGFtcGxlIFtDb3VjaERCXShodHRwOi8vY291Y2hkYi5hcGFjaGUub3JnLykgdXNlcyB0aGUgZmllbGQgYCdfaWQnYCB0byBpZGVudGlmeSBkb2N1bWVudHMuXG4gICAqL1xuICBmaWVsZElkPzogSWRQcm9wO1xuICAvKiogSXRlbXMgY2FuIGJlIGZpbHRlcmVkIG9uIHNwZWNpZmljIHByb3BlcnRpZXMgYnkgcHJvdmlkaW5nIGEgZmlsdGVyIGZ1bmN0aW9uLiBBIGZpbHRlciBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgaXRlbXMgaW4gdGhlIERhdGFTZXQsIGFuZCBpcyBjYWxsZWQgd2l0aCB0aGUgaXRlbSBhcyBwYXJhbWV0ZXIuIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIGJvb2xlYW4uIEFsbCBpdGVtcyBmb3Igd2hpY2ggdGhlIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2lsbCBiZSBlbWl0dGVkLiAqL1xuICBmaWx0ZXI/OiAoaXRlbTogSXRlbSkgPT4gYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEYXRhVmlld1xuICpcbiAqIEEgRGF0YVZpZXcgb2ZmZXJzIGEgZmlsdGVyZWQgYW5kL29yIGZvcm1hdHRlZCB2aWV3IG9uIGEgRGF0YVNldC4gT25lIGNhbiBzdWJzY3JpYmUgdG8gY2hhbmdlcyBpbiBhIERhdGFWaWV3LCBhbmQgZWFzaWx5IGdldCBmaWx0ZXJlZCBvciBmb3JtYXR0ZWQgZGF0YSB3aXRob3V0IGhhdmluZyB0byBzcGVjaWZ5IGZpbHRlcnMgYW5kIGZpZWxkIHR5cGVzIGFsbCB0aGUgdGltZS5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gKiB2YXIgZGF0YSA9IG5ldyB2aXMuRGF0YVNldCgpO1xuICogZGF0YS5hZGQoW1xuICogICB7aWQ6IDEsIHRleHQ6ICdpdGVtIDEnLCBkYXRlOiBuZXcgRGF0ZSgyMDEzLCA2LCAyMCksIGdyb3VwOiAxLCBmaXJzdDogdHJ1ZX0sXG4gKiAgIHtpZDogMiwgdGV4dDogJ2l0ZW0gMicsIGRhdGU6ICcyMDEzLTA2LTIzJywgZ3JvdXA6IDJ9LFxuICogICB7aWQ6IDMsIHRleHQ6ICdpdGVtIDMnLCBkYXRlOiAnMjAxMy0wNi0yNScsIGdyb3VwOiAyfSxcbiAqICAge2lkOiA0LCB0ZXh0OiAnaXRlbSA0J31cbiAqIF0pO1xuICpcbiAqIC8vIGNyZWF0ZSBhIERhdGFWaWV3XG4gKiAvLyB0aGUgdmlldyB3aWxsIG9ubHkgY29udGFpbiBpdGVtcyBoYXZpbmcgYSBwcm9wZXJ0eSBncm91cCB3aXRoIHZhbHVlIDEsXG4gKiAvLyBhbmQgd2lsbCBvbmx5IG91dHB1dCBmaWVsZHMgaWQsIHRleHQsIGFuZCBkYXRlLlxuICogdmFyIHZpZXcgPSBuZXcgdmlzLkRhdGFWaWV3KGRhdGEsIHtcbiAqICAgZmlsdGVyOiBmdW5jdGlvbiAoaXRlbSkge1xuICogICAgIHJldHVybiAoaXRlbS5ncm91cCA9PSAxKTtcbiAqICAgfSxcbiAqICAgZmllbGRzOiBbJ2lkJywgJ3RleHQnLCAnZGF0ZSddXG4gKiB9KTtcbiAqXG4gKiAvLyBzdWJzY3JpYmUgdG8gYW55IGNoYW5nZSBpbiB0aGUgRGF0YVZpZXdcbiAqIHZpZXcub24oJyonLCBmdW5jdGlvbiAoZXZlbnQsIHByb3BlcnRpZXMsIHNlbmRlcklkKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdldmVudCcsIGV2ZW50LCBwcm9wZXJ0aWVzKTtcbiAqIH0pO1xuICpcbiAqIC8vIHVwZGF0ZSBhbiBpdGVtIGluIHRoZSBkYXRhIHNldFxuICogZGF0YS51cGRhdGUoe2lkOiAyLCBncm91cDogMX0pO1xuICpcbiAqIC8vIGdldCBhbGwgaWRzIGluIHRoZSB2aWV3XG4gKiB2YXIgaWRzID0gdmlldy5nZXRJZHMoKTtcbiAqIGNvbnNvbGUubG9nKCdpZHMnLCBpZHMpOyAvLyB3aWxsIG91dHB1dCBbMSwgMl1cbiAqXG4gKiAvLyBnZXQgYWxsIGl0ZW1zIGluIHRoZSB2aWV3XG4gKiB2YXIgaXRlbXMgPSB2aWV3LmdldCgpO1xuICogYGBgXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhVmlldzxcbiAgICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbiAgPlxuICBleHRlbmRzIERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5cbiAgaW1wbGVtZW50cyBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD5cbntcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBsZW5ndGggPSAwO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCBpZFByb3AoKTogSWRQcm9wIHtcbiAgICByZXR1cm4gdGhpcy5nZXREYXRhU2V0KCkuaWRQcm9wO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXI6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXTtcbiAgcHJpdmF0ZSBfZGF0YSE6IERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPjsgLy8gY29uc3RydWN0b3Ig4oaSIHNldERhdGFcbiAgcHJpdmF0ZSByZWFkb25seSBfaWRzOiBTZXQ8SWQ+ID0gbmV3IFNldCgpOyAvLyBpZHMgb2YgdGhlIGl0ZW1zIGN1cnJlbnRseSBpbiBtZW1vcnkgKGp1c3QgY29udGFpbnMgYSBib29sZWFuIHRydWUpXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IERhdGFWaWV3T3B0aW9uczxJdGVtLCBJZFByb3A+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRhVmlldy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgaW5zdGFuY2UgY29udGFpbmluZyBkYXRhIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGlzIGRhdGEgdmlldy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBkYXRhOiBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4sXG4gICAgb3B0aW9ucz86IERhdGFWaWV3T3B0aW9uczxJdGVtLCBJZFByb3A+XG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHRoaXMuX2xpc3RlbmVyID0gdGhpcy5fb25FdmVudC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5zZXREYXRhKGRhdGEpO1xuICB9XG5cbiAgLy8gVE9ETzogaW1wbGVtZW50IGEgZnVuY3Rpb24gLmNvbmZpZygpIHRvIGR5bmFtaWNhbGx5IHVwZGF0ZSB0aGluZ3MgbGlrZSBjb25maWd1cmVkIGZpbHRlclxuICAvLyBhbmQgdHJpZ2dlciBjaGFuZ2VzIGFjY29yZGluZ2x5XG5cbiAgLyoqXG4gICAqIFNldCBhIGRhdGEgc291cmNlIGZvciB0aGUgdmlldy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgaW5zdGFuY2UgY29udGFpbmluZyBkYXRhIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KS5cbiAgICogQHJlbWFya3NcbiAgICogTm90ZSB0aGF0IHdoZW4gdGhlIGRhdGEgdmlldyBpcyBib3VuZCB0byBhIGRhdGEgc2V0IGl0IHdvbid0IGJlIGdhcmJhZ2VcbiAgICogY29sbGVjdGVkIHVubGVzcyB0aGUgZGF0YSBzZXQgaXMgdG9vLiBVc2UgYGRhdGFWaWV3LnNldERhdGEobnVsbClgIG9yXG4gICAqIGBkYXRhVmlldy5kaXNwb3NlKClgIHRvIGVuYWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24gYmVmb3JlIHlvdSBsb3NlIHRoZSBsYXN0XG4gICAqIHJlZmVyZW5jZS5cbiAgICovXG4gIHB1YmxpYyBzZXREYXRhKGRhdGE6IERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIGN1cnJlbnQgZGF0YXNldFxuICAgICAgaWYgKHRoaXMuX2RhdGEub2ZmKSB7XG4gICAgICAgIHRoaXMuX2RhdGEub2ZmKFwiKlwiLCB0aGlzLl9saXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIC8vIHRyaWdnZXIgYSByZW1vdmUgb2YgYWxsIGl0ZW1zIGluIG1lbW9yeVxuICAgICAgY29uc3QgaWRzID0gdGhpcy5fZGF0YS5nZXRJZHMoeyBmaWx0ZXI6IHRoaXMuX29wdGlvbnMuZmlsdGVyIH0pO1xuICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl9kYXRhLmdldChpZHMpO1xuXG4gICAgICB0aGlzLl9pZHMuY2xlYXIoKTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJyZW1vdmVcIiwgeyBpdGVtczogaWRzLCBvbGREYXRhOiBpdGVtcyB9KTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9kYXRhID0gZGF0YTtcblxuICAgICAgLy8gdHJpZ2dlciBhbiBhZGQgb2YgYWxsIGFkZGVkIGl0ZW1zXG4gICAgICBjb25zdCBpZHMgPSB0aGlzLl9kYXRhLmdldElkcyh7IGZpbHRlcjogdGhpcy5fb3B0aW9ucy5maWx0ZXIgfSk7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGVuZ3RoID0gaWRzLmxlbmd0aDtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogaWRzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhID0gbmV3IERhdGFTZXQ8SXRlbSwgSWRQcm9wPigpO1xuICAgIH1cblxuICAgIC8vIHN1YnNjcmliZSB0byBuZXcgZGF0YXNldFxuICAgIGlmICh0aGlzLl9kYXRhLm9uKSB7XG4gICAgICB0aGlzLl9kYXRhLm9uKFwiKlwiLCB0aGlzLl9saXN0ZW5lcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIERhdGFWaWV3LlxuICAgKiBVc2VmdWwgd2hlbiB0aGUgRGF0YVZpZXcgaGFzIGEgZmlsdGVyIGZ1bmN0aW9uIGNvbnRhaW5pbmcgYSB2YXJpYWJsZSBwYXJhbWV0ZXIuXG4gICAqL1xuICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICBjb25zdCBpZHMgPSB0aGlzLl9kYXRhLmdldElkcyh7XG4gICAgICBmaWx0ZXI6IHRoaXMuX29wdGlvbnMuZmlsdGVyLFxuICAgIH0pO1xuICAgIGNvbnN0IG9sZElkcyA9IFsuLi50aGlzLl9pZHNdO1xuICAgIGNvbnN0IG5ld0lkczogUmVjb3JkPElkLCBib29sZWFuPiA9IHt9O1xuICAgIGNvbnN0IGFkZGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICAvLyBjaGVjayBmb3IgYWRkaXRpb25zXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICBuZXdJZHNbaWRdID0gdHJ1ZTtcbiAgICAgIGlmICghdGhpcy5faWRzLmhhcyhpZCkpIHtcbiAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICAgIHRoaXMuX2lkcy5hZGQoaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNoZWNrIGZvciByZW1vdmFsc1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBvbGRJZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gb2xkSWRzW2ldO1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgIGlmIChpdGVtID09IG51bGwpIHtcbiAgICAgICAgLy8gQFRPRE86IEludmVzdGlnYXRlLlxuICAgICAgICAvLyBEb2Vzbid0IGhhcHBlbiBkdXJpbmcgdGVzdHMgb3IgZXhhbXBsZXMuXG4gICAgICAgIC8vIElzIGl0IHJlYWxseSBpbXBvc3NpYmxlIG9yIGNvdWxkIGl0IGV2ZW50dWFsbHkgaGFwcGVuP1xuICAgICAgICAvLyBIb3cgdG8gaGFuZGxlIGl0IGlmIGl0IGRvZXM/IFRoZSB0eXBlcyBndWFyYW50ZWUgbm9uLW51bGxhYmxlIGl0ZW1zLlxuICAgICAgICBjb25zb2xlLmVycm9yKFwiSWYgeW91IHNlZSB0aGlzLCByZXBvcnQgaXQgcGxlYXNlLlwiKTtcbiAgICAgIH0gZWxzZSBpZiAoIW5ld0lkc1tpZF0pIHtcbiAgICAgICAgcmVtb3ZlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgcmVtb3ZlZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIHRoaXMuX2lkcy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoICs9IGFkZGVkSWRzLmxlbmd0aCAtIHJlbW92ZWRJZHMubGVuZ3RoO1xuXG4gICAgLy8gdHJpZ2dlciBldmVudHNcbiAgICBpZiAoYWRkZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGFkZGVkSWRzIH0pO1xuICAgIH1cbiAgICBpZiAocmVtb3ZlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJyZW1vdmVcIiwgeyBpdGVtczogcmVtb3ZlZElkcywgb2xkRGF0YTogcmVtb3ZlZEl0ZW1zIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkOiBJZCk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkczogSWRbXSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGZpcnN0PzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gfCBJZCB8IElkW10sXG4gICAgc2Vjb25kPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPHN0cmluZywgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4ge1xuICAgIGlmICh0aGlzLl9kYXRhID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIHBhcnNlIHRoZSBhcmd1bWVudHNcbiAgICBsZXQgaWRzOiBJZCB8IElkW10gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgb3B0aW9uczogYW55O1xuICAgIGlmIChpc0lkKGZpcnN0KSB8fCBBcnJheS5pc0FycmF5KGZpcnN0KSkge1xuICAgICAgaWRzID0gZmlyc3Q7XG4gICAgICBvcHRpb25zID0gc2Vjb25kO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0gZmlyc3Q7XG4gICAgfVxuXG4gICAgLy8gZXh0ZW5kIHRoZSBvcHRpb25zIHdpdGggdGhlIGRlZmF1bHQgb3B0aW9ucyBhbmQgcHJvdmlkZWQgb3B0aW9uc1xuICAgIGNvbnN0IHZpZXdPcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHRoaXMuX29wdGlvbnMsXG4gICAgICBvcHRpb25zXG4gICAgKTtcblxuICAgIC8vIGNyZWF0ZSBhIGNvbWJpbmVkIGZpbHRlciBtZXRob2Qgd2hlbiBuZWVkZWRcbiAgICBjb25zdCB0aGlzRmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3Qgb3B0aW9uc0ZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgaWYgKHRoaXNGaWx0ZXIgJiYgb3B0aW9uc0ZpbHRlcikge1xuICAgICAgdmlld09wdGlvbnMuZmlsdGVyID0gKGl0ZW0pOiBib29sZWFuID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNGaWx0ZXIoaXRlbSkgJiYgb3B0aW9uc0ZpbHRlcihpdGVtKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGlkcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXQodmlld09wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXQoaWRzLCB2aWV3T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRJZHMob3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+KTogSWRbXSB7XG4gICAgaWYgKHRoaXMuX2RhdGEubGVuZ3RoKSB7XG4gICAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgICBjb25zdCBvcHRpb25zRmlsdGVyID0gb3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5maWx0ZXIgOiBudWxsO1xuICAgICAgbGV0IGZpbHRlcjogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT5bXCJmaWx0ZXJcIl07XG5cbiAgICAgIGlmIChvcHRpb25zRmlsdGVyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgZmlsdGVyID0gKGl0ZW0pOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXIgPSBvcHRpb25zRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXRJZHMoe1xuICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgb3JkZXI6IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBmb3JFYWNoKFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiB2b2lkLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnM8SXRlbT5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSB0aGlzLl9vcHRpb25zLmZpbHRlcjtcbiAgICAgIGNvbnN0IG9wdGlvbnNGaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgICAgbGV0IGZpbHRlcjogdW5kZWZpbmVkIHwgKChpdGVtOiBJdGVtKSA9PiBib29sZWFuKTtcblxuICAgICAgaWYgKG9wdGlvbnNGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXIpIHtcbiAgICAgICAgICBmaWx0ZXIgPSBmdW5jdGlvbiAoaXRlbTogSXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGaWx0ZXIoaXRlbSkgJiYgb3B0aW9uc0ZpbHRlcihpdGVtKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbHRlciA9IG9wdGlvbnNGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RhdGEuZm9yRWFjaChjYWxsYmFjaywge1xuICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgb3JkZXI6IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgbWFwPFQ+KFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBULFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxJdGVtLCBUPlxuICApOiBUW10ge1xuICAgIHR5cGUgRmlsdGVyID0gTm9uTnVsbGFibGU8RGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5bXCJmaWx0ZXJcIl0+O1xuXG4gICAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSB0aGlzLl9vcHRpb25zLmZpbHRlcjtcbiAgICAgIGNvbnN0IG9wdGlvbnNGaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgICAgbGV0IGZpbHRlcjogdW5kZWZpbmVkIHwgRmlsdGVyO1xuXG4gICAgICBpZiAob3B0aW9uc0ZpbHRlcikge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgIGZpbHRlciA9IChpdGVtKTogUmV0dXJuVHlwZTxGaWx0ZXI+ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXIgPSBvcHRpb25zRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5tYXAoY2FsbGJhY2ssIHtcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIG9yZGVyOiBvcHRpb25zICYmIG9wdGlvbnMub3JkZXIsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0RGF0YVNldCgpOiBEYXRhU2V0PEl0ZW0sIElkUHJvcD4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLmdldERhdGFTZXQoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RyZWFtKGlkcz86IEl0ZXJhYmxlPElkPik6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLnN0cmVhbShcbiAgICAgIGlkcyB8fCB7XG4gICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiB0aGlzLl9pZHMua2V5cy5iaW5kKHRoaXMuX2lkcyksXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGluc3RhbmNlIHVudXNhYmxlIHByaW9yIHRvIGdhcmJhZ2UgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGludGVudGlvbiBvZiB0aGlzIG1ldGhvZCBpcyB0byBoZWxwIGRpc2NvdmVyIHNjZW5hcmlvcyB3aGVyZSB0aGUgZGF0YVxuICAgKiB2aWV3IGlzIGJlaW5nIHVzZWQgd2hlbiB0aGUgcHJvZ3JhbW1lciB0aGlua3MgaXQgaGFzIGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWRcbiAgICogYWxyZWFkeS4gSXQncyBzdHJpY3RlciB2ZXJzaW9uIG9mIGBkYXRhVmlldy5zZXREYXRhKG51bGwpYC5cbiAgICovXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhPy5vZmYpIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmKFwiKlwiLCB0aGlzLl9saXN0ZW5lcik7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IFwiVGhpcyBkYXRhIHZpZXcgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi5cIjtcbiAgICBjb25zdCByZXBsYWNlbWVudCA9IHtcbiAgICAgIGdldDogKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9LFxuICAgICAgc2V0OiAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMoRGF0YVZpZXcucHJvdG90eXBlKSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgcmVwbGFjZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBsaXN0ZW5lci4gV2lsbCBwcm9wYWdhdGUgYWxsIGV2ZW50cyBmcm9tIHRoZSBjb25uZWN0ZWQgZGF0YSBzZXQgdG8gdGhlIHN1YnNjcmliZXJzIG9mIHRoZSBEYXRhVmlldywgYnV0IHdpbGwgZmlsdGVyIHRoZSBpdGVtcyBhbmQgb25seSB0cmlnZ2VyIHdoZW4gdGhlcmUgYXJlIGNoYW5nZXMgaW4gdGhlIGZpbHRlcmVkIGRhdGEgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gSWQgc3VwcGxpZWQgYnkgdGhlIHNlbmRlci5cbiAgICovXG4gIHByaXZhdGUgX29uRXZlbnQ8RU4gZXh0ZW5kcyBFdmVudE5hbWU+KFxuICAgIGV2ZW50OiBFTixcbiAgICBwYXJhbXM6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltFTl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy5pdGVtcyB8fCAhdGhpcy5fZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlkcyA9IHBhcmFtcy5pdGVtcztcbiAgICBjb25zdCBhZGRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCByZW1vdmVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3Qgb2xkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcblxuICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgIGNhc2UgXCJhZGRcIjpcbiAgICAgICAgLy8gZmlsdGVyIHRoZSBpZHMgb2YgdGhlIGFkZGVkIGl0ZW1zXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXQoaWQpO1xuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwidXBkYXRlXCI6XG4gICAgICAgIC8vIGRldGVybWluZSB0aGUgZXZlbnQgZnJvbSB0aGUgdmlld3Mgdmlld3BvaW50OiBhbiB1cGRhdGVkXG4gICAgICAgIC8vIGl0ZW0gY2FuIGJlIGFkZGVkLCB1cGRhdGVkLCBvciByZW1vdmVkIGZyb20gdGhpcyB2aWV3LlxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0KGlkKTtcblxuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faWRzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgdXBkYXRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgdXBkYXRlZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgKHBhcmFtcyBhcyBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPikuZGF0YVtpXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBvbGRJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAgIChwYXJhbXMgYXMgVXBkYXRlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4pLm9sZERhdGFbaV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuX2lkcy5hZGQoaWQpO1xuICAgICAgICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2lkcy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgICByZW1vdmVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgICAgICByZW1vdmVkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAocGFyYW1zIGFzIFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+KS5vbGREYXRhW2ldXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBub3RoaW5nIGludGVyZXN0aW5nIGZvciBtZSA6LShcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInJlbW92ZVwiOlxuICAgICAgICAvLyBmaWx0ZXIgdGhlIGlkcyBvZiB0aGUgcmVtb3ZlZCBpdGVtc1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICAgICAgaWYgKHRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICB0aGlzLl9pZHMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIHJlbW92ZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgICByZW1vdmVkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgKHBhcmFtcyBhcyBSZW1vdmVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPikub2xkRGF0YVtpXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCArPSBhZGRlZElkcy5sZW5ndGggLSByZW1vdmVkSWRzLmxlbmd0aDtcblxuICAgIGlmIChhZGRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogYWRkZWRJZHMgfSwgc2VuZGVySWQpO1xuICAgIH1cbiAgICBpZiAodXBkYXRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXG4gICAgICAgIFwidXBkYXRlXCIsXG4gICAgICAgIHsgaXRlbXM6IHVwZGF0ZWRJZHMsIG9sZERhdGE6IG9sZEl0ZW1zLCBkYXRhOiB1cGRhdGVkSXRlbXMgfSxcbiAgICAgICAgc2VuZGVySWRcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyZW1vdmVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgXCJyZW1vdmVcIixcbiAgICAgICAgeyBpdGVtczogcmVtb3ZlZElkcywgb2xkRGF0YTogcmVtb3ZlZEl0ZW1zIH0sXG4gICAgICAgIHNlbmRlcklkXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IFBhcnRJdGVtIH0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcbmltcG9ydCB7IERhdGFTZXQgfSBmcm9tIFwiLi9kYXRhLXNldFwiO1xuXG4vKipcbiAqIENoZWNrIHRoYXQgZ2l2ZW4gdmFsdWUgaXMgY29tcGF0aWJsZSB3aXRoIFZpcyBEYXRhIFNldCBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtIGlkUHJvcCAtIFRoZSBleHBlY3RlZCBwcm9wZXJ0eSB0byBjb250YWluIGl0ZW0gaWQuXG4gKiBAcGFyYW0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0ZXN0ZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIGFsbCBleHBlY3RlZCB2YWx1ZXMgYW5kIG1ldGhvZHMgbWF0Y2gsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YVNldExpa2U8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4oaWRQcm9wOiBJZFByb3AsIHY6IGFueSk6IHYgaXMgRGF0YVNldDxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHYgIT09IG51bGwgJiZcbiAgICBpZFByb3AgPT09IHYuaWRQcm9wICYmXG4gICAgdHlwZW9mIHYuYWRkID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5jbGVhciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZGlzdGluY3QgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmZvckVhY2ggPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0RGF0YVNldCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0SWRzID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICB0eXBlb2Ygdi5tYXAgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm1heCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYubWluID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vZmYgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm9uID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5yZW1vdmUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnNldE9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnN0cmVhbSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYudXBkYXRlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi51cGRhdGVPbmx5ID09PSBcImZ1bmN0aW9uXCJcbiAgKTtcbn1cbiIsICJpbXBvcnQgeyBEYXRhVmlldyB9IGZyb20gXCIuL2RhdGEtdmlld1wiO1xuaW1wb3J0IHsgUGFydEl0ZW0gfSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuaW1wb3J0IHsgaXNEYXRhU2V0TGlrZSB9IGZyb20gXCIuL2RhdGEtc2V0LWNoZWNrXCI7XG5cbi8qKlxuICogQ2hlY2sgdGhhdCBnaXZlbiB2YWx1ZSBpcyBjb21wYXRpYmxlIHdpdGggVmlzIERhdGEgVmlldyBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtIGlkUHJvcCAtIFRoZSBleHBlY3RlZCBwcm9wZXJ0eSB0byBjb250YWluIGl0ZW0gaWQuXG4gKiBAcGFyYW0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0ZXN0ZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIGFsbCBleHBlY3RlZCB2YWx1ZXMgYW5kIG1ldGhvZHMgbWF0Y2gsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YVZpZXdMaWtlPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+KGlkUHJvcDogSWRQcm9wLCB2OiBhbnkpOiB2IGlzIERhdGFWaWV3PEl0ZW0sIElkUHJvcD4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgdiAhPT0gbnVsbCAmJlxuICAgIGlkUHJvcCA9PT0gdi5pZFByb3AgJiZcbiAgICB0eXBlb2Ygdi5mb3JFYWNoID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldERhdGFTZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldElkcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgdHlwZW9mIHYubWFwID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vZmYgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm9uID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5zdHJlYW0gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIGlzRGF0YVNldExpa2UoaWRQcm9wLCB2LmdldERhdGFTZXQoKSlcbiAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uIH0gZnJvbSBcIkBlbGFzdGljL2V1aS9zcmMvY29tcG9uZW50cy9jb21ib19ib3gvdHlwZXNcIjtcbmltcG9ydCB7XG4gIEV1aUNvbWJvQm94LFxuICBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQsXG4gIGV1aVBhbGV0dGVDb2xvckJsaW5kLFxuICBFdWlIaWdobGlnaHQsXG4gIEV1aUhlYWx0aCxcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aUljb24sXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4uL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vc3R5bGUvdHM0bmZkaVN0eWxlcy90czRuZmRpQXV0b2NvbXBsZXRlU3R5bGUuY3NzXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9zdHlsZS90czRuZmRpU3R5bGVzL3RzNG5mZGlCcmVhZGNydW1iU3R5bGUuY3NzXCI7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuXG4vKipcbiAqIEEgUmVhY3QgY29tcG9uZW50IHRvIHByb3ZpZGUgQXV0b3N1Z2dlc3Rpb24gYmFzZWQgb24gU2VtTG9va1AuXG4gKi9cbmZ1bmN0aW9uIEF1dG9jb21wbGV0ZVdpZGdldChwcm9wczogQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgaGFzU2hvcnRTZWxlY3RlZExhYmVsLFxuICAgIGFsbG93Q3VzdG9tVGVybXMsXG4gICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LFxuICAgIHByZXNlbGVjdGVkLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHNpbmdsZVNlbGVjdGlvbixcbiAgICBzaW5nbGVTdWdnZXN0aW9uUm93LFxuICAgIHRzNG5mZGlHYXRld2F5ID0gZmFsc2UsXG4gICAgc2hvd0FwaVNvdXJjZSA9IHRydWUsXG4gICAgY2xhc3NOYW1lLFxuICAgIHVzZUxlZ2FjeSA9IGZhbHNlLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB2aXNDb2xvcnMgPSBldWlQYWxldHRlQ29sb3JCbGluZCgpO1xuICBjb25zdCB2aXNDb2xvcnNCZWhpbmRUZXh0ID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0KCk7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHNlYXJjaCB2YWx1ZVxuICAgKi9cbiAgY29uc3QgW3NlYXJjaFZhbHVlLCBzZXRTZWFyY2hWYWx1ZV0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiXCIpO1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0IG9mIGF2YWlsYWJsZSBvcHRpb25zLnNcbiAgICovXG4gIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IHVzZVN0YXRlPEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+PihcbiAgICBbXVxuICApO1xuXG4gIC8qKlxuICAgKiBTdG9yZSBjdXJyZW50IHNldCBvZiBzZWxlY3QgT3B0aW9ucy4gQSBzdWJzZXQgb2Ygb3B0aW9ucy5cbiAgICovXG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9uc10gPSB1c2VTdGF0ZTxcbiAgICBBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+PlxuICA+KFtdKTtcblxuICBjb25zdCBmaW5hbENsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcInRzNG5mZGktYXV0b2NvbXBsZXRlLXN0eWxlXCI7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IHJlbmRlck9wdGlvbiA9IChvcHRpb24sIHNlYXJjaFZhbHVlKSA9PiB7XG4gICAgY29uc3QgeyBsYWJlbCwgdmFsdWUgfSA9IG9wdGlvbjtcbiAgICBjb25zdCBkb3RDb2xvckluZGV4ID0gdmlzQ29sb3JzQmVoaW5kVGV4dC5pbmRleE9mKFxuICAgICAgdmFsdWUudHlwZSA9PT0gXCJjbGFzc1wiXG4gICAgICAgID8gdmlzQ29sb3JzQmVoaW5kVGV4dFs1XVxuICAgICAgICA6IHZhbHVlLnR5cGUgPT09IFwiaW5kaXZpZHVhbFwiXG4gICAgICAgID8gdmlzQ29sb3JzQmVoaW5kVGV4dFszXVxuICAgICAgICA6IHZhbHVlLnR5cGUgPT09IFwicHJvcGVydHlcIlxuICAgICAgICA/IHZpc0NvbG9yc0JlaGluZFRleHRbMV1cbiAgICAgICAgOiBcIlwiXG4gICAgKTtcbiAgICBjb25zdCBkb3RDb2xvciA9IHZpc0NvbG9yc1tkb3RDb2xvckluZGV4XTtcblxuICAgIGlmIChhbGxvd0N1c3RvbVRlcm1zICYmIHZhbHVlLmlyaSA9PSBcIlwiKSB7XG4gICAgICAvLyBpZiB3ZSBoYXZlIGEgY3VzdG9tIHRlcm0sIGp1c3Qgc2hvdyB0aGUgbGFiZWxcbiAgICAgIHJldHVybiBsYWJlbDtcbiAgICB9XG5cbiAgICBsZXQgcHJlZml4ID1cbiAgICAgIHZhbHVlLnR5cGUgPT09IFwib250b2xvZ3lcIlxuICAgICAgICA/IFwiUHJlZml4OiBcIiArIHZhbHVlLm9udG9sb2d5X25hbWVcbiAgICAgICAgOiBcIlByZWZpeCA+IFNob3J0IGZvcm06IFwiICtcbiAgICAgICAgICB2YWx1ZS5vbnRvbG9neV9uYW1lICtcbiAgICAgICAgICBcIiA+IFwiICtcbiAgICAgICAgICB2YWx1ZS5zaG9ydF9mb3JtO1xuXG4gICAgbGV0IGhvdmVyVGV4dCA9IGBUeXBlOiAke3ZhbHVlLnR5cGV9XFxuXFxuTGFiZWw6ICR7dmFsdWUubGFiZWx9XFxuXFxuJHtwcmVmaXh9YDtcbiAgICBpZiAodmFsdWUuZGVzY3JpcHRpb24gIT0gdW5kZWZpbmVkKSB7XG4gICAgICBob3ZlclRleHQgKz0gYFxcblxcbkRlc2NyaXB0aW9uOiAke3ZhbHVlLmRlc2NyaXB0aW9ufWA7XG4gICAgfVxuICAgIGlmIChzaG93QXBpU291cmNlICYmIHZhbHVlLnNvdXJjZV91cmwgJiYgdmFsdWUuc291cmNlX3VybCAhPT0gXCJcIikge1xuICAgICAgaG92ZXJUZXh0ICs9IFwiXFxuXFxuU291cmNlOiBcIiArIHZhbHVlLnNvdXJjZTtcbiAgICAgIGhvdmVyVGV4dCArPSBcIlxcblxcblNvdXJjZSBVUkw6IFwiICsgdmFsdWUuc291cmNlX3VybDtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJPbnRvbG9neSA9ICgpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PlxuICAgICAgICAgIDxFdWlIZWFsdGggY29sb3I9e2RvdENvbG9yfT5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICA8RXVpSGlnaGxpZ2h0IHNlYXJjaD17c2VhcmNoVmFsdWV9Pnt2YWx1ZS5sYWJlbH08L0V1aUhpZ2hsaWdodD5cbiAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgIHt2YWx1ZS5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L0V1aUhlYWx0aD5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyRW50aXR5ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNwYW4gdGl0bGU9e2hvdmVyVGV4dH0gY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8RXVpSGVhbHRoIGNvbG9yPXtkb3RDb2xvcn0+XG4gICAgICAgICAgICAgIDxFdWlIaWdobGlnaHQgc2VhcmNoPXtzZWFyY2hWYWx1ZX0+e3ZhbHVlLmxhYmVsfTwvRXVpSGlnaGxpZ2h0PlxuICAgICAgICAgICAgPC9FdWlIZWFsdGg+XG4gICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtcbiAgICAgICAgICAgIDxCcmVhZGNydW1iUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgIG9udG9sb2d5TmFtZT17dmFsdWUub250b2xvZ3lfbmFtZX1cbiAgICAgICAgICAgICAgc2hvcnRGb3JtPXt2YWx1ZS5zaG9ydF9mb3JtfVxuICAgICAgICAgICAgICBjb2xvckZpcnN0PXtcInByaW1hcnlcIn1cbiAgICAgICAgICAgICAgY29sb3JTZWNvbmQ9e1wic3VjY2Vzc1wifVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2ZpbmFsQ2xhc3NOYW1lfS1icmVhZGNydW1iYH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8RXVpSWNvblxuICAgICAgICAgICAgICB0eXBlPXtcImlJbkNpcmNsZVwifVxuICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5MZWZ0OiBcIjVweFwiIH19XG4gICAgICAgICAgICAgIHRpdGxlPXtob3ZlclRleHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB7IXNpbmdsZVN1Z2dlc3Rpb25Sb3cgJiYgdmFsdWUuZGVzY3JpcHRpb24gJiYgKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICAgICAgICB0ZXh0T3ZlcmZsb3c6IFwiZWxsaXBzaXNcIixcbiAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiLFxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIixcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3ZhbHVlLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfTtcblxuICAgIHJldHVybiB2YWx1ZS50eXBlID09PSBcIm9udG9sb2d5XCIgPyByZW5kZXJPbnRvbG9neSgpIDogcmVuZGVyRW50aXR5KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEZvciBwcmVzZWxlY3QgcHJvcGVydHlcbiAgICogQ3JlYXRlcyBvcHRpb24gZnJvbSBwcmVzZWxlY3RlZCBsYWJlbCBhbmQgaXJpXG4gICAqIEBwYXJhbSBwcmVzZWxlY3RlZEVsZW1lbnRcbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbVRlcm1PcHRpb24ocHJlc2VsZWN0ZWRFbGVtZW50OiBhbnkpOiBFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IHByZXNlbGVjdGVkRWxlbWVudC5sYWJlbCxcbiAgICAgIGtleTogcHJlc2VsZWN0ZWRFbGVtZW50LmxhYmVsLFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgaXJpOiBwcmVzZWxlY3RlZEVsZW1lbnQuaXJpIHx8IFwiXCIsXG4gICAgICAgIGxhYmVsOiBwcmVzZWxlY3RlZEVsZW1lbnQubGFiZWwsXG4gICAgICAgIG9udG9sb2d5X25hbWU6IFwiXCIsXG4gICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgIHNob3J0X2Zvcm06IFwiXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgICBzb3VyY2U6IFwiXCIsXG4gICAgICAgIHNvdXJjZV91cmw6IFwiXCIsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRm9yIHByZXNlbGVjdGVkIHByb3BlcnR5XG4gICAqIENyZWF0ZXMgb3B0aW9uIGZyb20gT0xTIEFQSSBzZWxlY3QgcmVzcG9uc2VcbiAgICogQHBhcmFtIHNlbGVjdGlvbiBUaGUgc2VsZWN0IHJlc3BvbnNlXG4gICAqL1xuICBmdW5jdGlvbiBjcmVhdGVTZWxlY3RPcHRpb24oc2VsZWN0aW9uOiBhbnkpOiBFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGhhc1Nob3J0U2VsZWN0ZWRMYWJlbFxuICAgICAgICA/IHNlbGVjdGlvbi5nZXRMYWJlbCgpXG4gICAgICAgIDogZ2VuZXJhdGVEaXNwbGF5TGFiZWwoc2VsZWN0aW9uKSxcbiAgICAgIGtleTogYCR7c2VsZWN0aW9uLmdldE9udG9sb2d5SWQoKX06OiR7c2VsZWN0aW9uLmdldElyaSgpfTo6JHtzZWxlY3Rpb24uZ2V0VHlwZSgpfWAsXG4gICAgICB2YWx1ZToge1xuICAgICAgICBpcmk6IHNlbGVjdGlvbi5nZXRJcmkoKSxcbiAgICAgICAgbGFiZWw6IHNlbGVjdGlvbi5nZXRMYWJlbCgpLFxuICAgICAgICBvbnRvbG9neV9uYW1lOiBzZWxlY3Rpb24uZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICB0eXBlOiBzZWxlY3Rpb24uZ2V0VHlwZSgpLFxuICAgICAgICBzaG9ydF9mb3JtOiBzZWxlY3Rpb24uZ2V0U2hvcnRGb3JtKCksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzZWxlY3Rpb24uZ2V0RGVzY3JpcHRpb24oKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgcHJlc2VsZWN0ZWQgcHJvcGVydHlcbiAgICogQ3JlYXRlcyBvcHRpb24gZnJvbSBPTFM0IEFQSSBlbnRpdHkgcmVzcG9uc2VcbiAgICogQHBhcmFtIGVudGl0eSBUaGUgRW50aXR5IG9iamVjdCByZXNwb25zZVxuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlRW50aXR5T3B0aW9uKGVudGl0eTogRW50aXR5KTogRXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBoYXNTaG9ydFNlbGVjdGVkTGFiZWxcbiAgICAgICAgPyBlbnRpdHkuZ2V0TGFiZWwoKVxuICAgICAgICA6IGdlbmVyYXRlRGlzcGxheUxhYmVsKGVudGl0eSksXG4gICAgICBrZXk6IGAke2VudGl0eS5nZXRPbnRvbG9neUlkKCl9Ojoke2VudGl0eS5nZXRJcmkoKX06OiR7ZW50aXR5LmdldFR5cGUoKX1gLFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgaXJpOiBlbnRpdHkuZ2V0SXJpKCksXG4gICAgICAgIGxhYmVsOiBlbnRpdHkuZ2V0TGFiZWwoKSxcbiAgICAgICAgb250b2xvZ3lfbmFtZTogZW50aXR5LmdldE9udG9sb2d5SWQoKSxcbiAgICAgICAgdHlwZTogZW50aXR5LmdldFR5cGUoKSxcbiAgICAgICAgc2hvcnRfZm9ybTogZW50aXR5LmdldFNob3J0Rm9ybSgpLFxuICAgICAgICBkZXNjcmlwdGlvbjogZW50aXR5LmdldERlc2NyaXB0aW9uKCksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRm9yIHByZXNlbGVjdGVkIHByb3BlcnR5XG4gICAqIFJlcXVlc3QgdGhlIE9MUzQgQVBJIGVudGl0eSBlbmRwb2ludCBhbmQgY3JlYXRlIHRoZSBlbnRpdHkgb3B0aW9uXG4gICAqIEBwYXJhbSBwcmVzZWxlY3RlZEVsZW1lbnRcbiAgICogQHBhcmFtIHByZXNlbGVjdGVkT3B0aW9uc1xuICAgKi9cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hBbmRQcm9jZXNzRW50aXR5T3B0aW9uKFxuICAgIHByZXNlbGVjdGVkRWxlbWVudDogYW55LFxuICAgIHByZXNlbGVjdGVkT3B0aW9uczogRXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55PltdXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoXG4gICAgICAgIHByZXNlbGVjdGVkRWxlbWVudC5pcmksXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgIHVzZUxlZ2FjeVxuICAgICAgKTtcblxuICAgICAgcHJlc2VsZWN0ZWRPcHRpb25zLnB1c2goY3JlYXRlRW50aXR5T3B0aW9uKHJlc3BvbnNlKSk7XG5cbiAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gJiYgcHJlc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcHJlc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9IDE7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChwcmVzZWxlY3RlZEVsZW1lbnQubGFiZWwgJiYgYWxsb3dDdXN0b21UZXJtcylcbiAgICAgICAgcHJlc2VsZWN0ZWRPcHRpb25zLnB1c2goY3JlYXRlQ3VzdG9tVGVybU9wdGlvbihwcmVzZWxlY3RlZEVsZW1lbnQpKTtcbiAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gJiYgcHJlc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcHJlc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9IDE7XG4gICAgICB9XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgZGF0YSBmb3Igb3B0aW9uOlwiLCBwcmVzZWxlY3RlZEVsZW1lbnQsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9yIHByZXNlbGVjdGVkIHByb3BlcnR5XG4gICAqIFJlcXVlc3QgdGhlIE9MUyBBUEkgc2VsZWN0IGVuZHBvaW50IGFuZCBjcmVhdGUgc2VsZWN0IG9wdGlvbiBieSBlaXRoZXIgdXNpbmcgc2VsZWN0IHJlc3BvbnNlIG9yIC0gaWYgbm8gcmVzcG9uc2UgLSB1c2UgdGhlIHByZXNlbGVjdGVkIGxhYmVsIGFuZCBpcmlcbiAgICogQHBhcmFtIHByZXNlbGVjdGVkRWxlbWVudFxuICAgKiBAcGFyYW0gcHJlc2VsZWN0ZWRPcHRpb25zXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBmZXRjaEFuZFByb2Nlc3NTZWxlY3RPcHRpb24oXG4gICAgcHJlc2VsZWN0ZWRFbGVtZW50OiBhbnksXG4gICAgcHJlc2VsZWN0ZWRPcHRpb25zOiBFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+W11cbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb2xzQXBpLmdldFNlbGVjdERhdGEoXG4gICAgICAgIHsgcXVlcnk6IHByZXNlbGVjdGVkRWxlbWVudC5pcmkgfSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgdHM0bmZkaUdhdGV3YXlcbiAgICAgICk7XG5cbiAgICAgIGlmICghcmVzcG9uc2UpIHJldHVybjtcblxuICAgICAgY29uc3QgbWF0Y2hGb3VuZCA9IHByb2Nlc3NTZWxlY3RSZXNwb25zZShcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgIHByZXNlbGVjdGVkRWxlbWVudCxcbiAgICAgICAgcHJlc2VsZWN0ZWRPcHRpb25zXG4gICAgICApO1xuXG4gICAgICBpZiAoIW1hdGNoRm91bmQgJiYgcHJlc2VsZWN0ZWRFbGVtZW50LmxhYmVsICYmIGFsbG93Q3VzdG9tVGVybXMpIHtcbiAgICAgICAgcHJlc2VsZWN0ZWRPcHRpb25zLnB1c2goY3JlYXRlQ3VzdG9tVGVybU9wdGlvbihwcmVzZWxlY3RlZEVsZW1lbnQpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbiAmJiBwcmVzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgICBwcmVzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID0gMTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHByZXNlbGVjdGVkRWxlbWVudC5sYWJlbCAmJiBhbGxvd0N1c3RvbVRlcm1zKVxuICAgICAgICBwcmVzZWxlY3RlZE9wdGlvbnMucHVzaChjcmVhdGVDdXN0b21UZXJtT3B0aW9uKHByZXNlbGVjdGVkRWxlbWVudCkpO1xuICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbiAmJiBwcmVzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgICBwcmVzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID0gMTtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBkYXRhIGZvciBvcHRpb246XCIsIHByZXNlbGVjdGVkRWxlbWVudCwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgcHJlc2VsZWN0ZWQgcHJvcGVydHlcbiAgICogSWYgdGhlIHByZXNlbGVjdGVkIGVsZW1lbnQgaGFzIGEgc2VsZWN0IHJlc3BvbnNlLCBjcmVhdGUgdGhlIHNlbGVjdCBvcHRpb25cbiAgICogSWYgbm8gc2VsZWN0IHJlc3BvbnNlLCByZXR1cm4gZmFsc2VcbiAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAqIEBwYXJhbSBwcmVzZWxlY3RlZEVsZW1lbnRcbiAgICogQHBhcmFtIHByZXNlbGVjdGVkT3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gcHJvY2Vzc1NlbGVjdFJlc3BvbnNlKFxuICAgIHJlc3BvbnNlOiBhbnksXG4gICAgcHJlc2VsZWN0ZWRFbGVtZW50OiBhbnksXG4gICAgcHJlc2VsZWN0ZWRPcHRpb25zOiBFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+W11cbiAgKTogYm9vbGVhbiB7XG4gICAgbGV0IG1hdGNoRm91bmQgPSBmYWxzZTtcblxuICAgIHJlc3BvbnNlLnByb3BlcnRpZXMuZm9yRWFjaCgoc2VsZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgIGlmIChwcmVzZWxlY3RlZEVsZW1lbnQuaXJpID09PSBzZWxlY3Rpb24uZ2V0SXJpKCkpIHtcbiAgICAgICAgbWF0Y2hGb3VuZCA9IHRydWU7XG4gICAgICAgIHByZXNlbGVjdGVkT3B0aW9ucy5wdXNoKGNyZWF0ZVNlbGVjdE9wdGlvbihzZWxlY3Rpb24pKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtYXRjaEZvdW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIG9uIG1vdW50OiBmZXRjaGVzIHRlcm0gZm9yIHByZXNlbGVjdGVkXG4gICAqIHNldHMgaXRzIGxhYmVsIG9yIHNldHMgYSBnaXZlbiBsYWJlbCBpZiBubyBpcmkgaXMgcHJvdmlkZWQvdGhlIGdpdmVuIGlyaSBjYW5ub3QgYmUgcmVzb2x2ZWRcbiAgICogb25seSBpZiBhbGxvd0N1c3RvbVRlcm1zIGlzIHRydWVcbiAgICovXG4gIGNvbnN0IHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdPbk1vdW50IH0gPSB1c2VRdWVyeShcbiAgICBbXCJvbk1vdW50XCIsIHByZXNlbGVjdGVkXSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgcHJlc2VsZWN0ZWRPcHRpb25zOiBFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+W10gPSBbXTtcblxuICAgICAgbGV0IHVuaXF1ZVZhbHVlcyA9IFsuLi5uZXcgU2V0KHByZXNlbGVjdGVkID8/IFtdKV0uZmlsdGVyKFxuICAgICAgICAob3B0aW9uKSA9PiAoYWxsb3dDdXN0b21UZXJtcyAmJiBvcHRpb24ubGFiZWwpIHx8IG9wdGlvbi5pcmlcbiAgICAgICk7XG5cbiAgICAgIGlmICh1bmlxdWVWYWx1ZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24pIHVuaXF1ZVZhbHVlcyA9IFt1bmlxdWVWYWx1ZXNbMF1dO1xuXG4gICAgICBmb3IgKGNvbnN0IHByZXNlbGVjdGVkRWxlbWVudCBvZiB1bmlxdWVWYWx1ZXMpIHtcbiAgICAgICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgICAgIGlmIChwcmVzZWxlY3RlZEVsZW1lbnQ/LmlyaT8uc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgICAgIGF3YWl0IGZldGNoQW5kUHJvY2Vzc1NlbGVjdE9wdGlvbihwcmVzZWxlY3RlZEVsZW1lbnQsIHByZXNlbGVjdGVkT3B0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwcmVzZWxlY3RlZEVsZW1lbnQ/LmxhYmVsICYmIGFsbG93Q3VzdG9tVGVybXMpIHtcbiAgICAgICAgICAgIHByZXNlbGVjdGVkT3B0aW9ucy5wdXNoKGNyZWF0ZUN1c3RvbVRlcm1PcHRpb24ocHJlc2VsZWN0ZWRFbGVtZW50KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcmVzZWxlY3RlZEVsZW1lbnQ/LmlyaT8uc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgICAgIGF3YWl0IGZldGNoQW5kUHJvY2Vzc0VudGl0eU9wdGlvbihwcmVzZWxlY3RlZEVsZW1lbnQsIHByZXNlbGVjdGVkT3B0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwcmVzZWxlY3RlZEVsZW1lbnQ/LmxhYmVsICYmIGFsbG93Q3VzdG9tVGVybXMpIHtcbiAgICAgICAgICAgIHByZXNlbGVjdGVkT3B0aW9ucy5wdXNoKGNyZWF0ZUN1c3RvbVRlcm1PcHRpb24ocHJlc2VsZWN0ZWRFbGVtZW50KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRPcHRpb25zKHByZXNlbGVjdGVkT3B0aW9ucyk7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMocHJlc2VsZWN0ZWRPcHRpb25zKTtcbiAgICB9XG4gICk7XG5cbiAgLyoqXG4gICAqIGZldGNoZXMgbmV3IG9wdGlvbnMgd2hlbiBzZWFyY2hWYWx1ZSBjaGFuZ2VzXG4gICAqL1xuICBjb25zdCB7IGlzTG9hZGluZzogaXNMb2FkaW5nVGVybXMgfSA9IHVzZVF1ZXJ5KFxuICAgIFtcIm9uU2VhcmNoQ2hhbmdlXCIsIHNlYXJjaFZhbHVlXSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoc2VhcmNoVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gb2xzQXBpXG4gICAgICAgICAgLmdldFNlbGVjdERhdGEoXG4gICAgICAgICAgICB7IHF1ZXJ5OiBzZWFyY2hWYWx1ZSB9LFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICAgICAgdHM0bmZkaUdhdGV3YXlcbiAgICAgICAgICApXG4gICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgc2V0T3B0aW9ucyhcbiAgICAgICAgICAgICAgICByZXNwb25zZS5wcm9wZXJ0aWVzLm1hcCgoc2VsZWN0aW9uOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAvLyBsYWJlbCB0byBkaXNwbGF5IHdpdGhpbiB0aGUgY29tYm9ib3ggZWl0aGVyIHJhdyB2YWx1ZSBvciBnZW5lcmF0ZWQgb25lXG4gICAgICAgICAgICAgICAgICAvLyAjcmVuZGVyT3B0aW9uKCkgaXMgdXNlZCB0byBkaXNwbGF5IGR1cmluZyBzZWxlY3Rpb24uXG4gICAgICAgICAgICAgICAgICBsYWJlbDogaGFzU2hvcnRTZWxlY3RlZExhYmVsXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZWN0aW9uLmdldExhYmVsKClcbiAgICAgICAgICAgICAgICAgICAgOiBnZW5lcmF0ZURpc3BsYXlMYWJlbChzZWxlY3Rpb24pLFxuICAgICAgICAgICAgICAgICAgLy8ga2V5IHRvIGRpc3Rpbmd1aXNoIHRoZSBvcHRpb25zIChlc3BlY2lhbGx5IHRob3NlIHdpdGggc2FtZSBsYWJlbClcbiAgICAgICAgICAgICAgICAgIGtleTogYCR7c2VsZWN0aW9uLmdldE9udG9sb2d5SWQoKX06OiR7c2VsZWN0aW9uLmdldElyaSgpfTo6JHtzZWxlY3Rpb24uZ2V0VHlwZSgpfWAsXG4gICAgICAgICAgICAgICAgICAvLyB2YWx1ZXMgdG8gcGFzcyB0byBjbGllbnRzXG4gICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICBpcmk6IHNlbGVjdGlvbi5nZXRJcmkoKSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHNlbGVjdGlvbi5nZXRMYWJlbCgpLFxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neV9uYW1lOiBzZWxlY3Rpb24uZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBzZWxlY3Rpb24uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICAgICAgICBzaG9ydF9mb3JtOiBzZWxlY3Rpb24uZ2V0U2hvcnRGb3JtKCksXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzZWxlY3Rpb24uZ2V0RGVzY3JpcHRpb24oKSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBzZWxlY3Rpb24uZ2V0QXBpU291cmNlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VfdXJsOiBzZWxlY3Rpb24uZ2V0QXBpU291cmNlRW5kcG9pbnQoKSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIC8qKlxuICAgKiBPbmNlIHRoZSBzZXQgb2Ygc2VsZWN0ZWQgb3B0aW9ucyBjaGFuZ2VzLCBwYXNzIHRoZSBldmVudCBieSBpbnZva2luZyB0aGUgcGFzc2VkIGZ1bmN0aW9uLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgaXNNb3VudGVkID0gdHJ1ZTtcbiAgICBpZiAoaXNNb3VudGVkKSB7XG4gICAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQoXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucy5tYXAoKHgpID0+IHtcbiAgICAgICAgICAvLyByZXR1cm4gdGhlIHZhbHVlIG9iamVjdCB3aXRoIHRoZSByYXcgdmFsdWVzIGZyb20gT0xTIHRvIGEgY2xpZW50XG4gICAgICAgICAgaWYgKGFsbG93Q3VzdG9tVGVybXMgJiYgeC52YWx1ZS5pcmkgPT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaXJpOiBcIlwiLFxuICAgICAgICAgICAgICBsYWJlbDogeC5sYWJlbCxcbiAgICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogXCJcIixcbiAgICAgICAgICAgICAgdHlwZTogXCJcIixcbiAgICAgICAgICAgICAgc2hvcnRfZm9ybTogeC52YWx1ZS5zaG9ydF9mb3JtLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogeC52YWx1ZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgc291cmNlOiB4LnZhbHVlLnNvdXJjZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmICh4LnZhbHVlLmlyaSA9PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpcmk6IFwiXCIsXG4gICAgICAgICAgICAgIGxhYmVsOiBcIlwiLFxuICAgICAgICAgICAgICBvbnRvbG9neV9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgICB0eXBlOiBcIlwiLFxuICAgICAgICAgICAgICBzaG9ydF9mb3JtOiBcIlwiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgICAgICAgc291cmNlOiBcIlwiLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaXJpOiB4LnZhbHVlLmlyaSxcbiAgICAgICAgICAgICAgbGFiZWw6IHgudmFsdWUubGFiZWwsXG4gICAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IHgudmFsdWUub250b2xvZ3lfbmFtZSxcbiAgICAgICAgICAgICAgdHlwZTogeC52YWx1ZS50eXBlLFxuICAgICAgICAgICAgICBzaG9ydF9mb3JtOiB4LnZhbHVlLnNob3J0X2Zvcm0sXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB4LnZhbHVlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICBzb3VyY2U6IHgudmFsdWUuc291cmNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaXNNb3VudGVkID0gZmFsc2U7XG4gICAgfTtcbiAgfSwgW3NlbGVjdGVkT3B0aW9uc10pO1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlRGlzcGxheUxhYmVsKGl0ZW06IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIGl0ZW0/LmdldExhYmVsKCkgPz9cbiAgICAgIFwiLVwiICsgXCIgKFwiICsgaXRlbT8uZ2V0T250b2xvZ3lJZCgpPy50b1VwcGVyQ2FzZSgpID8/XG4gICAgICBcIi1cIiArIFwiIFwiICsgaXRlbT8uZ2V0U2hvcnRGb3JtKCkgPz9cbiAgICAgIFwiLVwiICsgXCIpXCJcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DaGFuZ2VIYW5kbGVyKG9wdGlvbnM6IEFycmF5PGFueT4pOiB2b2lkIHtcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNyZWF0ZU9wdGlvbkhhbmRsZXIoc2VhcmNoVmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IG5ld09wdGlvbiA9IHtcbiAgICAgIGxhYmVsOiBzZWFyY2hWYWx1ZSxcbiAgICAgIGtleTogc2VhcmNoVmFsdWUsXG4gICAgICB2YWx1ZToge1xuICAgICAgICBpcmk6IFwiXCIsXG4gICAgICAgIGxhYmVsOiBcIlwiLFxuICAgICAgICBvbnRvbG9neV9uYW1lOiBcIlwiLFxuICAgICAgICB0eXBlOiBcIlwiLFxuICAgICAgICBzaG9ydF9mb3JtOiBcIlwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgc291cmNlOiBcIlwiLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgc2V0T3B0aW9ucyhbLi4ub3B0aW9ucywgbmV3T3B0aW9uXSk7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zKFxuICAgICAgc2luZ2xlU2VsZWN0aW9uID8gW25ld09wdGlvbl0gOiBbLi4uc2VsZWN0ZWRPcHRpb25zLCBuZXdPcHRpb25dXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfT5cbiAgICAgIDxFdWlDb21ib0JveFxuICAgICAgICBpc0NsZWFyYWJsZVxuICAgICAgICBhcmlhLWxhYmVsPVwic2VhcmNoQmFyXCJcbiAgICAgICAgZnVsbFdpZHRoPXt0cnVlfVxuICAgICAgICB7Li4ucmVzdH0gLy8gaXRlbXMgYWJvdmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBjbGllbnRcbiAgICAgICAgYXN5bmM9e3RydWV9XG4gICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nVGVybXMgfHwgaXNMb2FkaW5nT25Nb3VudH1cbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uPXtzaW5nbGVTZWxlY3Rpb24gPyB7IGFzUGxhaW5UZXh0OiB0cnVlIH0gOiBmYWxzZX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiBcIlNlYXJjaCBmb3IgYSBDb25jZXB0XCJ9XG4gICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucz17c2VsZWN0ZWRPcHRpb25zfVxuICAgICAgICBvblNlYXJjaENoYW5nZT17c2V0U2VhcmNoVmFsdWV9XG4gICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZUhhbmRsZXJ9XG4gICAgICAgIHJlbmRlck9wdGlvbj17cmVuZGVyT3B0aW9ufVxuICAgICAgICBvbkNyZWF0ZU9wdGlvbj17YWxsb3dDdXN0b21UZXJtcyA/IG9uQ3JlYXRlT3B0aW9uSGFuZGxlciA6IHVuZGVmaW5lZH1cbiAgICAgICAgcm93SGVpZ2h0PXtzaW5nbGVTdWdnZXN0aW9uUm93ID8gMzAgOiA1MH1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUF1dG9jb21wbGV0ZShcbiAgcHJvcHM6IEF1dG9jb21wbGV0ZVdpZGdldFByb3BzLFxuICBjb250YWluZXI6IGFueSxcbiAgY2FsbGJhY2s/OiAoKSA9PiB2b2lkXG4pIHtcbiAgLy8gQHRzLWlnbm9yZVxuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEF1dG9jb21wbGV0ZVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkQXV0b2NvbXBsZXRlV2lkZ2V0KHByb3BzOiBBdXRvY29tcGxldGVXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiIGdsb2JhbFN0eWxlcz17ZmFsc2V9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxBdXRvY29tcGxldGVXaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQ9e3Byb3BzLnNlbGVjdGlvbkNoYW5nZWRFdmVudH1cbiAgICAgICAgICBwcmVzZWxlY3RlZD17cHJvcHMucHJlc2VsZWN0ZWR9XG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uPXtwcm9wcy5zaW5nbGVTZWxlY3Rpb24gYXMgYm9vbGVhbn1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cHJvcHMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgaGFzU2hvcnRTZWxlY3RlZExhYmVsPXtwcm9wcy5oYXNTaG9ydFNlbGVjdGVkTGFiZWx9XG4gICAgICAgICAgYWxsb3dDdXN0b21UZXJtcz17cHJvcHMuYWxsb3dDdXN0b21UZXJtc31cbiAgICAgICAgICB0czRuZmRpR2F0ZXdheT17cHJvcHMudHM0bmZkaUdhdGV3YXl9XG4gICAgICAgICAgc2luZ2xlU3VnZ2VzdGlvblJvdz17cHJvcHMuc2luZ2xlU3VnZ2VzdGlvblJvd31cbiAgICAgICAgICBzaG93QXBpU291cmNlPXtwcm9wcy5zaG93QXBpU291cmNlfVxuICAgICAgICAgIGNsYXNzTmFtZT17cHJvcHMuY2xhc3NOYW1lfVxuICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IEF1dG9jb21wbGV0ZVdpZGdldCwgY3JlYXRlQXV0b2NvbXBsZXRlIH07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG5jb25zdCB7dG9TdHJpbmd9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHtnZXRQcm90b3R5cGVPZn0gPSBPYmplY3Q7XG5cbmNvbnN0IGtpbmRPZiA9IChjYWNoZSA9PiB0aGluZyA9PiB7XG4gICAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlXG59XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Zvcm1EYXRhID0gKHRoaW5nKSA9PiB7XG4gIGxldCBraW5kO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHwgKFxuICAgICAgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIChcbiAgICAgICAgKGtpbmQgPSBraW5kT2YodGhpbmcpKSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgICAgIChraW5kID09PSAnb2JqZWN0JyAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSAnW29iamVjdCBGb3JtRGF0YV0nKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuY29uc3QgW2lzUmVhZGFibGVTdHJlYW0sIGlzUmVxdWVzdCwgaXNSZXNwb25zZSwgaXNIZWFkZXJzXSA9IFsnUmVhZGFibGVTdHJlYW0nLCAnUmVxdWVzdCcsICdSZXNwb25zZScsICdIZWFkZXJzJ10ubWFwKGtpbmRPZlRlc3QpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5jb25zdCB0cmltID0gKHN0cikgPT4gc3RyLnRyaW0gP1xuICBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCAnJyk7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHthbGxPd25LZXlzID0gZmFsc2V9ID0ge30pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgaTtcbiAgbGV0IGw7XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGNvbnN0IGtleXMgPSBhbGxPd25LZXlzID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSA6IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEtleShvYmosIGtleSkge1xuICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIGxldCBfa2V5O1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIF9rZXkgPSBrZXlzW2ldO1xuICAgIGlmIChrZXkgPT09IF9rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIF9rZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBfZ2xvYmFsID0gKCgpID0+IHtcbiAgLyplc2xpbnQgbm8tdW5kZWY6MCovXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWwpXG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+ICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIGNvbnN0IHtjYXNlbGVzc30gPSBpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMgfHwge307XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCBhc3NpZ25WYWx1ZSA9ICh2YWwsIGtleSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEtleSA9IGNhc2VsZXNzICYmIGZpbmRLZXkocmVzdWx0LCBrZXkpIHx8IGtleTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRbdGFyZ2V0S2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHJlc3VsdFt0YXJnZXRLZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHthbGxPd25LZXlzfT0ge30pID0+IHtcbiAgZm9yRWFjaChiLCAodmFsLCBrZXkpID0+IHtcbiAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSwge2FsbE93bktleXN9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGluaGVyaXRzID0gKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpID0+IHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCAnc3VwZXInLCB7XG4gICAgdmFsdWU6IHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlXG4gIH0pO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0IG9yIG51bGwgaWYgZmFpbGVkXG4gKlxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKlxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuY29uc3QgdG9BcnJheSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7XG4gIGxldCBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoIWlzTnVtYmVyKGkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoVHlwZWRBcnJheSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiB0aGluZyA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufVxuXG4vKiBDaGVja2luZyBpZiB0aGUga2luZE9mVGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gSFRNTEZvcm1FbGVtZW50LiAqL1xuY29uc3QgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpO1xuXG5jb25zdCB0b0NhbWVsQ2FzZSA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLFxuICAgIGZ1bmN0aW9uIHJlcGxhY2VyKG0sIHAxLCBwMikge1xuICAgICAgcmV0dXJuIHAxLnRvVXBwZXJDYXNlKCkgKyBwMjtcbiAgICB9XG4gICk7XG59O1xuXG4vKiBDcmVhdGluZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuICovXG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9ICgoe2hhc093blByb3BlcnR5fSkgPT4gKG9iaiwgcHJvcCkgPT4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKShPYmplY3QucHJvdG90eXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVnRXhwID0ga2luZE9mVGVzdCgnUmVnRXhwJyk7XG5cbmNvbnN0IHJlZHVjZURlc2NyaXB0b3JzID0gKG9iaiwgcmVkdWNlcikgPT4ge1xuICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaik7XG4gIGNvbnN0IHJlZHVjZWREZXNjcmlwdG9ycyA9IHt9O1xuXG4gIGZvckVhY2goZGVzY3JpcHRvcnMsIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgbGV0IHJldDtcbiAgICBpZiAoKHJldCA9IHJlZHVjZXIoZGVzY3JpcHRvciwgbmFtZSwgb2JqKSkgIT09IGZhbHNlKSB7XG4gICAgICByZWR1Y2VkRGVzY3JpcHRvcnNbbmFtZV0gPSByZXQgfHwgZGVzY3JpcHRvcjtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwgcmVkdWNlZERlc2NyaXB0b3JzKTtcbn1cblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59XG5cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBpc0FycmF5KGFycmF5T3JTdHJpbmcpID8gZGVmaW5lKGFycmF5T3JTdHJpbmcpIDogZGVmaW5lKFN0cmluZyhhcnJheU9yU3RyaW5nKS5zcGxpdChkZWxpbWl0ZXIpKTtcblxuICByZXR1cm4gb2JqO1xufVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUgPSArdmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59XG5cbmNvbnN0IEFMUEhBID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J1xuXG5jb25zdCBESUdJVCA9ICcwMTIzNDU2Nzg5JztcblxuY29uc3QgQUxQSEFCRVQgPSB7XG4gIERJR0lULFxuICBBTFBIQSxcbiAgQUxQSEFfRElHSVQ6IEFMUEhBICsgQUxQSEEudG9VcHBlckNhc2UoKSArIERJR0lUXG59XG5cbmNvbnN0IGdlbmVyYXRlU3RyaW5nID0gKHNpemUgPSAxNiwgYWxwaGFiZXQgPSBBTFBIQUJFVC5BTFBIQV9ESUdJVCkgPT4ge1xuICBsZXQgc3RyID0gJyc7XG4gIGNvbnN0IHtsZW5ndGh9ID0gYWxwaGFiZXQ7XG4gIHdoaWxlIChzaXplLS0pIHtcbiAgICBzdHIgKz0gYWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIGxlbmd0aHwwXVxuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn1cblxuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpO1xuXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJiAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG4vLyBvcmlnaW5hbCBjb2RlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vRGlnaXRhbEJyYWluSlMvQXhpb3NQcm9taXNlL2Jsb2IvMTZkZWFiMTM3MTBlYzA5Nzc5OTIyMTMxZjNmYTU5NTQzMjBmODNhYi9saWIvdXRpbHMuanMjTDExLUwzNFxuXG5jb25zdCBfc2V0SW1tZWRpYXRlID0gKChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQsIHBvc3RNZXNzYWdlU3VwcG9ydGVkKSA9PiB7XG4gIGlmIChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQpIHtcbiAgICByZXR1cm4gc2V0SW1tZWRpYXRlO1xuICB9XG5cbiAgcmV0dXJuIHBvc3RNZXNzYWdlU3VwcG9ydGVkID8gKCh0b2tlbiwgY2FsbGJhY2tzKSA9PiB7XG4gICAgX2dsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoe3NvdXJjZSwgZGF0YX0pID0+IHtcbiAgICAgIGlmIChzb3VyY2UgPT09IF9nbG9iYWwgJiYgZGF0YSA9PT0gdG9rZW4pIHtcbiAgICAgICAgY2FsbGJhY2tzLmxlbmd0aCAmJiBjYWxsYmFja3Muc2hpZnQoKSgpO1xuICAgICAgfVxuICAgIH0sIGZhbHNlKTtcblxuICAgIHJldHVybiAoY2IpID0+IHtcbiAgICAgIGNhbGxiYWNrcy5wdXNoKGNiKTtcbiAgICAgIF9nbG9iYWwucG9zdE1lc3NhZ2UodG9rZW4sIFwiKlwiKTtcbiAgICB9XG4gIH0pKGBheGlvc0Ake01hdGgucmFuZG9tKCl9YCwgW10pIDogKGNiKSA9PiBzZXRUaW1lb3V0KGNiKTtcbn0pKFxuICB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nLFxuICBpc0Z1bmN0aW9uKF9nbG9iYWwucG9zdE1lc3NhZ2UpXG4pO1xuXG5jb25zdCBhc2FwID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrICE9PSAndW5kZWZpbmVkJyA/XG4gIHF1ZXVlTWljcm90YXNrLmJpbmQoX2dsb2JhbCkgOiAoIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLm5leHRUaWNrIHx8IF9zZXRJbW1lZGlhdGUpO1xuXG4vLyAqKioqKioqKioqKioqKioqKioqKipcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIEFMUEhBQkVULFxuICBnZW5lcmF0ZVN0cmluZyxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGUsXG4gIHNldEltbWVkaWF0ZTogX3NldEltbWVkaWF0ZSxcbiAgYXNhcFxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgaWYgKHJlc3BvbnNlKSB7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHRoaXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzID8gcmVzcG9uc2Uuc3RhdHVzIDogbnVsbDtcbiAgfVxufVxuXG51dGlscy5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB1dGlscy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1c1xuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSAoZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSA9PiB7XG4gIGNvbnN0IGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zRXJyb3I7XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxuZXhwb3J0IGRlZmF1bHQgbnVsbDtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuLy8gdGVtcG9yYXJ5IGhvdGZpeCB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzIHVudGlsIEF4aW9zVVJMU2VhcmNoUGFyYW1zIGlzIHJlZmFjdG9yZWRcbmltcG9ydCBQbGF0Zm9ybUZvcm1EYXRhIGZyb20gJy4uL3BsYXRmb3JtL25vZGUvY2xhc3Nlcy9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMuaXNBcnJheSh0aGluZyk7XG59XG5cbi8qKlxuICogSXQgcmVtb3ZlcyB0aGUgYnJhY2tldHMgZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBhcmFtZXRlci5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLlxuICovXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscy50b0ZsYXRPYmplY3QodXRpbHMsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKFBsYXRmb3JtRm9ybURhdGEgfHwgRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscy50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTtcbiAgfSk7XG5cbiAgY29uc3QgbWV0YVRva2VucyA9IG9wdGlvbnMubWV0YVRva2VucztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIGNvbnN0IHZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3IgfHwgZGVmYXVsdFZpc2l0b3I7XG4gIGNvbnN0IGRvdHMgPSBvcHRpb25zLmRvdHM7XG4gIGNvbnN0IGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXM7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucy5CbG9iIHx8IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscy5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscy5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCB2aXNpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBsZXQgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWUgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKSA6IChpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJyksXG4gICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZVxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIHZpc2l0b3IuY2FsbChcbiAgICAgICAgZm9ybURhdGEsIGVsLCB1dGlscy5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Gb3JtRGF0YTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogSXQgZW5jb2RlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSB1bnJlc2VydmVkIHNldCB3aXRoXG4gKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlbmNvZGUoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIGNvbnN0IF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUpO1xuICB9IDogZW5jb2RlO1xuXG4gIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICB9LCAnJykuam9pbignJicpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7PyhvYmplY3R8RnVuY3Rpb24pfSBvcHRpb25zXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBcbiAgY29uc3QgX2VuY29kZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUgfHwgZW5jb2RlO1xuXG4gIGlmICh1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIHNlcmlhbGl6ZTogb3B0aW9uc1xuICAgIH07XG4gIH0gXG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpID9cbiAgICAgIHBhcmFtcy50b1N0cmluZygpIDpcbiAgICAgIG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICBjb25zdCBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuXG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbmNsYXNzIEludGVyY2VwdG9yTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICAgKi9cbiAgdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgICAgZnVsZmlsbGVkLFxuICAgICAgcmVqZWN0ZWQsXG4gICAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnRlcmNlcHRvciB3YXMgcmVtb3ZlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIGVqZWN0KGlkKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICAgKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vLi4vLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcbiIsICIndXNlIHN0cmljdCdcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGxcbiIsICJpbXBvcnQgVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4vY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMnXG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnLi9jbGFzc2VzL0Zvcm1EYXRhLmpzJ1xuaW1wb3J0IEJsb2IgZnJvbSAnLi9jbGFzc2VzL0Jsb2IuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNCcm93c2VyOiB0cnVlLFxuICBjbGFzc2VzOiB7XG4gICAgVVJMU2VhcmNoUGFyYW1zLFxuICAgIEZvcm1EYXRhLFxuICAgIEJsb2JcbiAgfSxcbiAgcHJvdG9jb2xzOiBbJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScsICdibG9iJywgJ3VybCcsICdkYXRhJ11cbn07XG4iLCAiY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IF9uYXZpZ2F0b3IgPSB0eXBlb2YgbmF2aWdhdG9yID09PSAnb2JqZWN0JyAmJiBuYXZpZ2F0b3IgfHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gaGFzQnJvd3NlckVudiAmJlxuICAoIV9uYXZpZ2F0b3IgfHwgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKF9uYXZpZ2F0b3IucHJvZHVjdCkgPCAwKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuY29uc3Qgb3JpZ2luID0gaGFzQnJvd3NlckVudiAmJiB3aW5kb3cubG9jYXRpb24uaHJlZiB8fCAnaHR0cDovL2xvY2FsaG9zdCc7XG5cbmV4cG9ydCB7XG4gIGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBfbmF2aWdhdG9yIGFzIG5hdmlnYXRvcixcbiAgb3JpZ2luXG59XG4iLCAiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4vbm9kZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL2NvbW1vbi91dGlscy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtXG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscy5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoZWxwZXJzLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9LCBvcHRpb25zKSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1EYXRhVG9KU09OO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCB0b1VSTEVuY29kZWRGb3JtIGZyb20gJy4uL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4uL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBbJ3hocicsICdodHRwJywgJ2ZldGNoJ10sXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIGNvbnN0IGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscy5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscy5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBoYXNKU09OQ29udGVudFR5cGUgPyBKU09OLnN0cmluZ2lmeShmb3JtRGF0YVRvSlNPTihkYXRhKSkgOiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHV0aWxzLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhdGhpcy5yZXNwb25zZVR5cGUpIHx8IEpTT05SZXF1ZXN0ZWQpKSB7XG4gICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiBKU09OUmVxdWVzdGVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiBwbGF0Zm9ybS5jbGFzc2VzLkZvcm1EYXRhLFxuICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYlxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBhcnNlSGVhZGVycyBmcm9tICcuLi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyc7XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5jb25zdCBpc1ZhbGlkSGVhZGVyTmFtZSA9IChzdHIpID0+IC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVyVmFsdWUoY29udGV4dCwgdmFsdWUsIGhlYWRlciwgZmlsdGVyLCBpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgaWYgKHV0aWxzLmlzRnVuY3Rpb24oZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLCB2YWx1ZSwgaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgICB2YWx1ZSA9IGhlYWRlcjtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzLmlzU3RyaW5nKGZpbHRlcikpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc1JlZ0V4cChmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci50ZXN0KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCAodywgY2hhciwgc3RyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpICsgc3RyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFjY2Vzc29ycyhvYmosIGhlYWRlcikge1xuICBjb25zdCBhY2Nlc3Nvck5hbWUgPSB1dGlscy50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZigha2V5IHx8IHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8IF9yZXdyaXRlID09PSB0cnVlIHx8IChfcmV3cml0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbGZba2V5XSAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpXG4gICAgfSBlbHNlIGlmKHV0aWxzLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0hlYWRlcnMoaGVhZGVyKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaGVhZGVyLmVudHJpZXMoKSkge1xuICAgICAgICBzZXRIZWFkZXIodmFsdWUsIGtleSwgcmV3cml0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShrZXkgJiYgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzWyRpbnRlcm5hbHNdID0gKHRoaXNbJGludGVybmFsc10gPSB7XG4gICAgICBhY2Nlc3NvcnM6IHt9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscy5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0hlYWRlcnM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbGVkRXJyb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNwZWVkb21ldGVyO1xuIiwgIi8qKlxuICogVGhyb3R0bGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtOdW1iZXJ9IGZyZXFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgZnJlcSkge1xuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgbGV0IHRocmVzaG9sZCA9IDEwMDAgLyBmcmVxO1xuICBsZXQgbGFzdEFyZ3M7XG4gIGxldCB0aW1lcjtcblxuICBjb25zdCBpbnZva2UgPSAoYXJncywgbm93ID0gRGF0ZS5ub3coKSkgPT4ge1xuICAgIHRpbWVzdGFtcCA9IG5vdztcbiAgICBsYXN0QXJncyA9IG51bGw7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgfVxuXG4gIGNvbnN0IHRocm90dGxlZCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBwYXNzZWQgPSBub3cgLSB0aW1lc3RhbXA7XG4gICAgaWYgKCBwYXNzZWQgPj0gdGhyZXNob2xkKSB7XG4gICAgICBpbnZva2UoYXJncywgbm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICBpbnZva2UobGFzdEFyZ3MpXG4gICAgICAgIH0sIHRocmVzaG9sZCAtIHBhc3NlZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZmx1c2ggPSAoKSA9PiBsYXN0QXJncyAmJiBpbnZva2UobGFzdEFyZ3MpO1xuXG4gIHJldHVybiBbdGhyb3R0bGVkLCBmbHVzaF07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRocm90dGxlO1xuIiwgImltcG9ydCBzcGVlZG9tZXRlciBmcm9tIFwiLi9zcGVlZG9tZXRlci5qc1wiO1xuaW1wb3J0IHRocm90dGxlIGZyb20gXCIuL3Rocm90dGxlLmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBwcm9ncmVzc0V2ZW50UmVkdWNlciA9IChsaXN0ZW5lciwgaXNEb3dubG9hZFN0cmVhbSwgZnJlcSA9IDMpID0+IHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gdGhyb3R0bGUoZSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyAobG9hZGVkIC8gdG90YWwpIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZSxcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRvdGFsICE9IG51bGwsXG4gICAgICBbaXNEb3dubG9hZFN0cmVhbSA/ICdkb3dubG9hZCcgOiAndXBsb2FkJ106IHRydWVcbiAgICB9O1xuXG4gICAgbGlzdGVuZXIoZGF0YSk7XG4gIH0sIGZyZXEpO1xufVxuXG5leHBvcnQgY29uc3QgcHJvZ3Jlc3NFdmVudERlY29yYXRvciA9ICh0b3RhbCwgdGhyb3R0bGVkKSA9PiB7XG4gIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPSBudWxsO1xuXG4gIHJldHVybiBbKGxvYWRlZCkgPT4gdGhyb3R0bGVkWzBdKHtcbiAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgIHRvdGFsLFxuICAgIGxvYWRlZFxuICB9KSwgdGhyb3R0bGVkWzFdXTtcbn1cblxuZXhwb3J0IGNvbnN0IGFzeW5jRGVjb3JhdG9yID0gKGZuKSA9PiAoLi4uYXJncykgPT4gdXRpbHMuYXNhcCgoKSA9PiBmbiguLi5hcmdzKSk7XG4iLCAiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID8gKChvcmlnaW4sIGlzTVNJRSkgPT4gKHVybCkgPT4ge1xuICB1cmwgPSBuZXcgVVJMKHVybCwgcGxhdGZvcm0ub3JpZ2luKTtcblxuICByZXR1cm4gKFxuICAgIG9yaWdpbi5wcm90b2NvbCA9PT0gdXJsLnByb3RvY29sICYmXG4gICAgb3JpZ2luLmhvc3QgPT09IHVybC5ob3N0ICYmXG4gICAgKGlzTVNJRSB8fCBvcmlnaW4ucG9ydCA9PT0gdXJsLnBvcnQpXG4gICk7XG59KShcbiAgbmV3IFVSTChwbGF0Zm9ybS5vcmlnaW4pLFxuICBwbGF0Zm9ybS5uYXZpZ2F0b3IgJiYgLyhtc2llfHRyaWRlbnQpL2kudGVzdChwbGF0Zm9ybS5uYXZpZ2F0b3IudXNlckFnZW50KVxuKSA6ICgpID0+IHRydWU7XG4iLCAiaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMuaXNOdW1iZXIoZXhwaXJlcykgJiYgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuXG4gICAgICB1dGlscy5pc1N0cmluZyhwYXRoKSAmJiBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLz9cXC8kLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgaXNBYnNvbHV0ZVVSTCBmcm9tICcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMnO1xuaW1wb3J0IGNvbWJpbmVVUkxzIGZyb20gJy4uL2hlbHBlcnMvY29tYmluZVVSTHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi9BeGlvc0hlYWRlcnMuanNcIjtcblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyA/IHsgLi4udGhpbmcgfSA6IHRoaW5nO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICBjb25zdCBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgcHJvcCwgY2FzZWxlc3MpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlLmNhbGwoe2Nhc2VsZXNzfSwgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKGEsIGIsIHByb3AgLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBwcm9wICwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBwcm9wICwgY2FzZWxlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMoYSwgYiwgcHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiICwgcHJvcCkgPT4gbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSxwcm9wLCB0cnVlKVxuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnMSwgY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIGNvbnN0IG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0sIHByb3ApO1xuICAgICh1dGlscy5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cbiIsICJpbXBvcnQgcGxhdGZvcm0gZnJvbSBcIi4uL3BsYXRmb3JtL2luZGV4LmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgaXNVUkxTYW1lT3JpZ2luIGZyb20gXCIuL2lzVVJMU2FtZU9yaWdpbi5qc1wiO1xuaW1wb3J0IGNvb2tpZXMgZnJvbSBcIi4vY29va2llcy5qc1wiO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSBcIi4uL2NvcmUvYnVpbGRGdWxsUGF0aC5qc1wiO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gXCIuLi9jb3JlL21lcmdlQ29uZmlnLmpzXCI7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gXCIuL2J1aWxkVVJMLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChjb25maWcpID0+IHtcbiAgY29uc3QgbmV3Q29uZmlnID0gbWVyZ2VDb25maWcoe30sIGNvbmZpZyk7XG5cbiAgbGV0IHtkYXRhLCB3aXRoWFNSRlRva2VuLCB4c3JmSGVhZGVyTmFtZSwgeHNyZkNvb2tpZU5hbWUsIGhlYWRlcnMsIGF1dGh9ID0gbmV3Q29uZmlnO1xuXG4gIG5ld0NvbmZpZy5oZWFkZXJzID0gaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGhlYWRlcnMpO1xuXG4gIG5ld0NvbmZpZy51cmwgPSBidWlsZFVSTChidWlsZEZ1bGxQYXRoKG5ld0NvbmZpZy5iYXNlVVJMLCBuZXdDb25maWcudXJsKSwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuXG4gIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgaWYgKGF1dGgpIHtcbiAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICtcbiAgICAgIGJ0b2EoKGF1dGgudXNlcm5hbWUgfHwgJycpICsgJzonICsgKGF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYXV0aC5wYXNzd29yZCkpIDogJycpKVxuICAgICk7XG4gIH1cblxuICBsZXQgY29udGVudFR5cGU7XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSh1bmRlZmluZWQpOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfSBlbHNlIGlmICgoY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkpICE9PSBmYWxzZSkge1xuICAgICAgLy8gZml4IHNlbWljb2xvbiBkdXBsaWNhdGlvbiBpc3N1ZSBmb3IgUmVhY3ROYXRpdmUgRm9ybURhdGEgaW1wbGVtZW50YXRpb25cbiAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuXG4gIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYpIHtcbiAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikgJiYgKHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKG5ld0NvbmZpZykpO1xuXG4gICAgaWYgKHdpdGhYU1JGVG9rZW4gfHwgKHdpdGhYU1JGVG9rZW4gIT09IGZhbHNlICYmIGlzVVJMU2FtZU9yaWdpbihuZXdDb25maWcudXJsKSkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgY29uc3QgeHNyZlZhbHVlID0geHNyZkhlYWRlck5hbWUgJiYgeHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKHhzcmZDb29raWVOYW1lKTtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICBoZWFkZXJzLnNldCh4c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3Q29uZmlnO1xufVxuXG4iLCAiaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHNldHRsZSBmcm9tICcuLy4uL2NvcmUvc2V0dGxlLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBwYXJzZVByb3RvY29sIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQge3Byb2dyZXNzRXZlbnRSZWR1Y2VyfSBmcm9tICcuLi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzJztcbmltcG9ydCByZXNvbHZlQ29uZmlnIGZyb20gXCIuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanNcIjtcblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGRlZmF1bHQgaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBjb25zdCBfY29uZmlnID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuICAgIGxldCByZXF1ZXN0RGF0YSA9IF9jb25maWcuZGF0YTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKF9jb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgbGV0IHtyZXNwb25zZVR5cGUsIG9uVXBsb2FkUHJvZ3Jlc3MsIG9uRG93bmxvYWRQcm9ncmVzc30gPSBfY29uZmlnO1xuICAgIGxldCBvbkNhbmNlbGVkO1xuICAgIGxldCB1cGxvYWRUaHJvdHRsZWQsIGRvd25sb2FkVGhyb3R0bGVkO1xuICAgIGxldCBmbHVzaFVwbG9hZCwgZmx1c2hEb3dubG9hZDtcblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBmbHVzaFVwbG9hZCAmJiBmbHVzaFVwbG9hZCgpOyAvLyBmbHVzaCBldmVudHNcbiAgICAgIGZsdXNoRG93bmxvYWQgJiYgZmx1c2hEb3dubG9hZCgpOyAvLyBmbHVzaCBldmVudHNcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuXG4gICAgICBfY29uZmlnLnNpZ25hbCAmJiBfY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgIH1cblxuICAgIGxldCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oX2NvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgX2NvbmZpZy51cmwsIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBfY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKFxuICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIF9jb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKF9jb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIV9jb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IF9jb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAob25Eb3dubG9hZFByb2dyZXNzKSB7XG4gICAgICAoW2Rvd25sb2FkVGhyb3R0bGVkLCBmbHVzaERvd25sb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGRvd25sb2FkVGhyb3R0bGVkKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmIChvblVwbG9hZFByb2dyZXNzICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICAoW3VwbG9hZFRocm90dGxlZCwgZmx1c2hVcGxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25VcGxvYWRQcm9ncmVzcykpO1xuXG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHVwbG9hZFRocm90dGxlZCk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbHVzaFVwbG9hZCk7XG4gICAgfVxuXG4gICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4gfHwgX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gY2FuY2VsID0+IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgIF9jb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBfY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChfY29uZmlnLnVybCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufVxuIiwgImltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gXCIuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qc1wiO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuY29uc3QgY29tcG9zZVNpZ25hbHMgPSAoc2lnbmFscywgdGltZW91dCkgPT4ge1xuICBjb25zdCB7bGVuZ3RofSA9IChzaWduYWxzID0gc2lnbmFscyA/IHNpZ25hbHMuZmlsdGVyKEJvb2xlYW4pIDogW10pO1xuXG4gIGlmICh0aW1lb3V0IHx8IGxlbmd0aCkge1xuICAgIGxldCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgbGV0IGFib3J0ZWQ7XG5cbiAgICBjb25zdCBvbmFib3J0ID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgaWYgKCFhYm9ydGVkKSB7XG4gICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICBjb25zdCBlcnIgPSByZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbiA6IHRoaXMucmVhc29uO1xuICAgICAgICBjb250cm9sbGVyLmFib3J0KGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IgPyBlcnIgOiBuZXcgQ2FuY2VsZWRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHRpbWVyID0gdGltZW91dCAmJiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgIG9uYWJvcnQobmV3IEF4aW9zRXJyb3IoYHRpbWVvdXQgJHt0aW1lb3V0fSBvZiBtcyBleGNlZWRlZGAsIEF4aW9zRXJyb3IuRVRJTUVET1VUKSlcbiAgICB9LCB0aW1lb3V0KVxuXG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgICBpZiAoc2lnbmFscykge1xuICAgICAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgIHNpZ25hbHMuZm9yRWFjaChzaWduYWwgPT4ge1xuICAgICAgICAgIHNpZ25hbC51bnN1YnNjcmliZSA/IHNpZ25hbC51bnN1YnNjcmliZShvbmFib3J0KSA6IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2lnbmFscyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpKTtcblxuICAgIGNvbnN0IHtzaWduYWx9ID0gY29udHJvbGxlcjtcblxuICAgIHNpZ25hbC51bnN1YnNjcmliZSA9ICgpID0+IHV0aWxzLmFzYXAodW5zdWJzY3JpYmUpO1xuXG4gICAgcmV0dXJuIHNpZ25hbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlU2lnbmFscztcbiIsICJcbmV4cG9ydCBjb25zdCBzdHJlYW1DaHVuayA9IGZ1bmN0aW9uKiAoY2h1bmssIGNodW5rU2l6ZSkge1xuICBsZXQgbGVuID0gY2h1bmsuYnl0ZUxlbmd0aDtcblxuICBpZiAoIWNodW5rU2l6ZSB8fCBsZW4gPCBjaHVua1NpemUpIHtcbiAgICB5aWVsZCBjaHVuaztcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcG9zID0gMDtcbiAgbGV0IGVuZDtcblxuICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgZW5kID0gcG9zICsgY2h1bmtTaXplO1xuICAgIHlpZWxkIGNodW5rLnNsaWNlKHBvcywgZW5kKTtcbiAgICBwb3MgPSBlbmQ7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJlYWRCeXRlcyA9IGFzeW5jIGZ1bmN0aW9uKiAoaXRlcmFibGUsIGNodW5rU2l6ZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlYWRTdHJlYW0oaXRlcmFibGUpKSB7XG4gICAgeWllbGQqIHN0cmVhbUNodW5rKGNodW5rLCBjaHVua1NpemUpO1xuICB9XG59XG5cbmNvbnN0IHJlYWRTdHJlYW0gPSBhc3luYyBmdW5jdGlvbiogKHN0cmVhbSkge1xuICBpZiAoc3RyZWFtW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkge1xuICAgIHlpZWxkKiBzdHJlYW07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICB0cnkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB5aWVsZCB2YWx1ZTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcmVhZGVyLmNhbmNlbCgpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB0cmFja1N0cmVhbSA9IChzdHJlYW0sIGNodW5rU2l6ZSwgb25Qcm9ncmVzcywgb25GaW5pc2gpID0+IHtcbiAgY29uc3QgaXRlcmF0b3IgPSByZWFkQnl0ZXMoc3RyZWFtLCBjaHVua1NpemUpO1xuXG4gIGxldCBieXRlcyA9IDA7XG4gIGxldCBkb25lO1xuICBsZXQgX29uRmluaXNoID0gKGUpID0+IHtcbiAgICBpZiAoIWRvbmUpIHtcbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgb25GaW5pc2ggJiYgb25GaW5pc2goZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgYXN5bmMgcHVsbChjb250cm9sbGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICBfb25GaW5pc2goKTtcbiAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxlbiA9IHZhbHVlLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChvblByb2dyZXNzKSB7XG4gICAgICAgICAgbGV0IGxvYWRlZEJ5dGVzID0gYnl0ZXMgKz0gbGVuO1xuICAgICAgICAgIG9uUHJvZ3Jlc3MobG9hZGVkQnl0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheSh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9vbkZpbmlzaChlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfSxcbiAgICBjYW5jZWwocmVhc29uKSB7XG4gICAgICBfb25GaW5pc2gocmVhc29uKTtcbiAgICAgIHJldHVybiBpdGVyYXRvci5yZXR1cm4oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBoaWdoV2F0ZXJNYXJrOiAyXG4gIH0pXG59XG4iLCAiaW1wb3J0IHBsYXRmb3JtIGZyb20gXCIuLi9wbGF0Zm9ybS9pbmRleC5qc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlscy5qc1wiO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuaW1wb3J0IGNvbXBvc2VTaWduYWxzIGZyb20gXCIuLi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzXCI7XG5pbXBvcnQge3RyYWNrU3RyZWFtfSBmcm9tIFwiLi4vaGVscGVycy90cmFja1N0cmVhbS5qc1wiO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi4vY29yZS9BeGlvc0hlYWRlcnMuanNcIjtcbmltcG9ydCB7cHJvZ3Jlc3NFdmVudFJlZHVjZXIsIHByb2dyZXNzRXZlbnREZWNvcmF0b3IsIGFzeW5jRGVjb3JhdG9yfSBmcm9tIFwiLi4vaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qc1wiO1xuaW1wb3J0IHJlc29sdmVDb25maWcgZnJvbSBcIi4uL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qc1wiO1xuaW1wb3J0IHNldHRsZSBmcm9tIFwiLi4vY29yZS9zZXR0bGUuanNcIjtcblxuY29uc3QgaXNGZXRjaFN1cHBvcnRlZCA9IHR5cGVvZiBmZXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgUmVzcG9uc2UgPT09ICdmdW5jdGlvbic7XG5jb25zdCBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkID0gaXNGZXRjaFN1cHBvcnRlZCAmJiB0eXBlb2YgUmVhZGFibGVTdHJlYW0gPT09ICdmdW5jdGlvbic7XG5cbi8vIHVzZWQgb25seSBpbnNpZGUgdGhlIGZldGNoIGFkYXB0ZXJcbmNvbnN0IGVuY29kZVRleHQgPSBpc0ZldGNoU3VwcG9ydGVkICYmICh0eXBlb2YgVGV4dEVuY29kZXIgPT09ICdmdW5jdGlvbicgP1xuICAgICgoZW5jb2RlcikgPT4gKHN0cikgPT4gZW5jb2Rlci5lbmNvZGUoc3RyKSkobmV3IFRleHRFbmNvZGVyKCkpIDpcbiAgICBhc3luYyAoc3RyKSA9PiBuZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2Uoc3RyKS5hcnJheUJ1ZmZlcigpKVxuKTtcblxuY29uc3QgdGVzdCA9IChmbiwgLi4uYXJncykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAhIWZuKC4uLmFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuY29uc3Qgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJiB0ZXN0KCgpID0+IHtcbiAgbGV0IGR1cGxleEFjY2Vzc2VkID0gZmFsc2U7XG5cbiAgY29uc3QgaGFzQ29udGVudFR5cGUgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHtcbiAgICBib2R5OiBuZXcgUmVhZGFibGVTdHJlYW0oKSxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBnZXQgZHVwbGV4KCkge1xuICAgICAgZHVwbGV4QWNjZXNzZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuICdoYWxmJztcbiAgICB9LFxuICB9KS5oZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJyk7XG5cbiAgcmV0dXJuIGR1cGxleEFjY2Vzc2VkICYmICFoYXNDb250ZW50VHlwZTtcbn0pO1xuXG5jb25zdCBERUZBVUxUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7XG5cbmNvbnN0IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmXG4gIHRlc3QoKCkgPT4gdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoJycpLmJvZHkpKTtcblxuXG5jb25zdCByZXNvbHZlcnMgPSB7XG4gIHN0cmVhbTogc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAoKHJlcykgPT4gcmVzLmJvZHkpXG59O1xuXG5pc0ZldGNoU3VwcG9ydGVkICYmICgoKHJlcykgPT4ge1xuICBbJ3RleHQnLCAnYXJyYXlCdWZmZXInLCAnYmxvYicsICdmb3JtRGF0YScsICdzdHJlYW0nXS5mb3JFYWNoKHR5cGUgPT4ge1xuICAgICFyZXNvbHZlcnNbdHlwZV0gJiYgKHJlc29sdmVyc1t0eXBlXSA9IHV0aWxzLmlzRnVuY3Rpb24ocmVzW3R5cGVdKSA/IChyZXMpID0+IHJlc1t0eXBlXSgpIDpcbiAgICAgIChfLCBjb25maWcpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFJlc3BvbnNlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLCBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCwgY29uZmlnKTtcbiAgICAgIH0pXG4gIH0pO1xufSkobmV3IFJlc3BvbnNlKSk7XG5cbmNvbnN0IGdldEJvZHlMZW5ndGggPSBhc3luYyAoYm9keSkgPT4ge1xuICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZih1dGlscy5pc0Jsb2IoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5zaXplO1xuICB9XG5cbiAgaWYodXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShib2R5KSkge1xuICAgIGNvbnN0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHksXG4gICAgfSk7XG4gICAgcmV0dXJuIChhd2FpdCBfcmVxdWVzdC5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkgfHwgdXRpbHMuaXNBcnJheUJ1ZmZlcihib2R5KSkge1xuICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGg7XG4gIH1cblxuICBpZih1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuICAgIGJvZHkgPSBib2R5ICsgJyc7XG4gIH1cblxuICBpZih1dGlscy5pc1N0cmluZyhib2R5KSkge1xuICAgIHJldHVybiAoYXdhaXQgZW5jb2RlVGV4dChib2R5KSkuYnl0ZUxlbmd0aDtcbiAgfVxufVxuXG5jb25zdCByZXNvbHZlQm9keUxlbmd0aCA9IGFzeW5jIChoZWFkZXJzLCBib2R5KSA9PiB7XG4gIGNvbnN0IGxlbmd0aCA9IHV0aWxzLnRvRmluaXRlTnVtYmVyKGhlYWRlcnMuZ2V0Q29udGVudExlbmd0aCgpKTtcblxuICByZXR1cm4gbGVuZ3RoID09IG51bGwgPyBnZXRCb2R5TGVuZ3RoKGJvZHkpIDogbGVuZ3RoO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0ZldGNoU3VwcG9ydGVkICYmIChhc3luYyAoY29uZmlnKSA9PiB7XG4gIGxldCB7XG4gICAgdXJsLFxuICAgIG1ldGhvZCxcbiAgICBkYXRhLFxuICAgIHNpZ25hbCxcbiAgICBjYW5jZWxUb2tlbixcbiAgICB0aW1lb3V0LFxuICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICBvblVwbG9hZFByb2dyZXNzLFxuICAgIHJlc3BvbnNlVHlwZSxcbiAgICBoZWFkZXJzLFxuICAgIHdpdGhDcmVkZW50aWFscyA9ICdzYW1lLW9yaWdpbicsXG4gICAgZmV0Y2hPcHRpb25zXG4gIH0gPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG5cbiAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlID8gKHJlc3BvbnNlVHlwZSArICcnKS50b0xvd2VyQ2FzZSgpIDogJ3RleHQnO1xuXG4gIGxldCBjb21wb3NlZFNpZ25hbCA9IGNvbXBvc2VTaWduYWxzKFtzaWduYWwsIGNhbmNlbFRva2VuICYmIGNhbmNlbFRva2VuLnRvQWJvcnRTaWduYWwoKV0sIHRpbWVvdXQpO1xuXG4gIGxldCByZXF1ZXN0O1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlID0gY29tcG9zZWRTaWduYWwgJiYgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUgJiYgKCgpID0+IHtcbiAgICAgIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlKCk7XG4gIH0pO1xuXG4gIGxldCByZXF1ZXN0Q29udGVudExlbmd0aDtcblxuICB0cnkge1xuICAgIGlmIChcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MgJiYgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtICYmIG1ldGhvZCAhPT0gJ2dldCcgJiYgbWV0aG9kICE9PSAnaGVhZCcgJiZcbiAgICAgIChyZXF1ZXN0Q29udGVudExlbmd0aCA9IGF3YWl0IHJlc29sdmVCb2R5TGVuZ3RoKGhlYWRlcnMsIGRhdGEpKSAhPT0gMFxuICAgICkge1xuICAgICAgbGV0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICBkdXBsZXg6IFwiaGFsZlwiXG4gICAgICB9KTtcblxuICAgICAgbGV0IGNvbnRlbnRUeXBlSGVhZGVyO1xuXG4gICAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSAmJiAoY29udGVudFR5cGVIZWFkZXIgPSBfcmVxdWVzdC5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoY29udGVudFR5cGVIZWFkZXIpXG4gICAgICB9XG5cbiAgICAgIGlmIChfcmVxdWVzdC5ib2R5KSB7XG4gICAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPSBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICAgIHJlcXVlc3RDb250ZW50TGVuZ3RoLFxuICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uVXBsb2FkUHJvZ3Jlc3MpKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEgPSB0cmFja1N0cmVhbShfcmVxdWVzdC5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsIGZsdXNoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXV0aWxzLmlzU3RyaW5nKHdpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHdpdGhDcmVkZW50aWFscyA9IHdpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdvbWl0JztcbiAgICB9XG5cbiAgICAvLyBDbG91ZGZsYXJlIFdvcmtlcnMgdGhyb3dzIHdoZW4gY3JlZGVudGlhbHMgYXJlIGRlZmluZWRcbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nsb3VkZmxhcmUvd29ya2VyZC9pc3N1ZXMvOTAyXG4gICAgY29uc3QgaXNDcmVkZW50aWFsc1N1cHBvcnRlZCA9IFwiY3JlZGVudGlhbHNcIiBpbiBSZXF1ZXN0LnByb3RvdHlwZTtcbiAgICByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAuLi5mZXRjaE9wdGlvbnMsXG4gICAgICBzaWduYWw6IGNvbXBvc2VkU2lnbmFsLFxuICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMubm9ybWFsaXplKCkudG9KU09OKCksXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgZHVwbGV4OiBcImhhbGZcIixcbiAgICAgIGNyZWRlbnRpYWxzOiBpc0NyZWRlbnRpYWxzU3VwcG9ydGVkID8gd2l0aENyZWRlbnRpYWxzIDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0KTtcblxuICAgIGNvbnN0IGlzU3RyZWFtUmVzcG9uc2UgPSBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3Jlc3BvbnNlJyk7XG5cbiAgICBpZiAoc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAob25Eb3dubG9hZFByb2dyZXNzIHx8IChpc1N0cmVhbVJlc3BvbnNlICYmIHVuc3Vic2NyaWJlKSkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICAgICAgWydzdGF0dXMnLCAnc3RhdHVzVGV4dCcsICdoZWFkZXJzJ10uZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgb3B0aW9uc1twcm9wXSA9IHJlc3BvbnNlW3Byb3BdO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlQ29udGVudExlbmd0aCA9IHV0aWxzLnRvRmluaXRlTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpKTtcblxuICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IG9uRG93bmxvYWRQcm9ncmVzcyAmJiBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICByZXNwb25zZUNvbnRlbnRMZW5ndGgsXG4gICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uRG93bmxvYWRQcm9ncmVzcyksIHRydWUpXG4gICAgICApIHx8IFtdO1xuXG4gICAgICByZXNwb25zZSA9IG5ldyBSZXNwb25zZShcbiAgICAgICAgdHJhY2tTdHJlYW0ocmVzcG9uc2UuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCAoKSA9PiB7XG4gICAgICAgICAgZmx1c2ggJiYgZmx1c2goKTtcbiAgICAgICAgICB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuICAgICAgICB9KSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgbGV0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHJlc29sdmVyc1t1dGlscy5maW5kS2V5KHJlc29sdmVycywgcmVzcG9uc2VUeXBlKSB8fCAndGV4dCddKHJlc3BvbnNlLCBjb25maWcpO1xuXG4gICAgIWlzU3RyZWFtUmVzcG9uc2UgJiYgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgaGVhZGVyczogQXhpb3NIZWFkZXJzLmZyb20ocmVzcG9uc2UuaGVhZGVycyksXG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH0pXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgIGlmIChlcnIgJiYgZXJyLm5hbWUgPT09ICdUeXBlRXJyb3InICYmIC9mZXRjaC9pLnRlc3QoZXJyLm1lc3NhZ2UpKSB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKFxuICAgICAgICBuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCksXG4gICAgICAgIHtcbiAgICAgICAgICBjYXVzZTogZXJyLmNhdXNlIHx8IGVyclxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuXG4gICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGVyciwgZXJyICYmIGVyci5jb2RlLCBjb25maWcsIHJlcXVlc3QpO1xuICB9XG59KTtcblxuXG4iLCAiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBodHRwQWRhcHRlciBmcm9tICcuL2h0dHAuanMnO1xuaW1wb3J0IHhockFkYXB0ZXIgZnJvbSAnLi94aHIuanMnO1xuaW1wb3J0IGZldGNoQWRhcHRlciBmcm9tICcuL2ZldGNoLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcblxuY29uc3Qga25vd25BZGFwdGVycyA9IHtcbiAgaHR0cDogaHR0cEFkYXB0ZXIsXG4gIHhocjogeGhyQWRhcHRlcixcbiAgZmV0Y2g6IGZldGNoQWRhcHRlclxufVxuXG51dGlscy5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWV9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnYWRhcHRlck5hbWUnLCB7dmFsdWV9KTtcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbmNvbnN0IGlzUmVzb2x2ZWRIYW5kbGUgPSAoYWRhcHRlcikgPT4gdXRpbHMuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCBhZGFwdGVyID09PSBudWxsIHx8IGFkYXB0ZXIgPT09IGZhbHNlO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldEFkYXB0ZXI6IChhZGFwdGVycykgPT4ge1xuICAgIGFkYXB0ZXJzID0gdXRpbHMuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgICBjb25zdCB7bGVuZ3RofSA9IGFkYXB0ZXJzO1xuICAgIGxldCBuYW1lT3JBZGFwdGVyO1xuICAgIGxldCBhZGFwdGVyO1xuXG4gICAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBsZXQgaWQ7XG5cbiAgICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkYXB0ZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKSB7XG5cbiAgICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpXG4gICAgICAgIC5tYXAoKFtpZCwgc3RhdGVdKSA9PiBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzID0gbGVuZ3RoID9cbiAgICAgICAgKHJlYXNvbnMubGVuZ3RoID4gMSA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJykgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSkpIDpcbiAgICAgICAgJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0cmFuc2Zvcm1EYXRhIGZyb20gJy4vdHJhbnNmb3JtRGF0YS5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBhZGFwdGVycyBmcm9tIFwiLi4vYWRhcHRlcnMvYWRhcHRlcnMuanNcIjtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcik7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICByZXNwb25zZVxuICAgICk7XG5cbiAgICByZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVzcG9uc2UuaGVhZGVycyk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn1cbiIsICJleHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMS43LjlcIjsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge1ZFUlNJT059IGZyb20gJy4uL2Vudi9kYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKCh0eXBlLCBpKSA9PiB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG5jb25zdCBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycy50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiAodmFsdWUsIG9wdCwgb3B0cykgPT4ge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG52YWxpZGF0b3JzLnNwZWxsaW5nID0gZnVuY3Rpb24gc3BlbGxpbmcoY29ycmVjdFNwZWxsaW5nKSB7XG4gIHJldHVybiAodmFsdWUsIG9wdCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS53YXJuKGAke29wdH0gaXMgbGlrZWx5IGEgbWlzc3BlbGxpbmcgb2YgJHtjb3JyZWN0U3BlbGxpbmd9YCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4uL2hlbHBlcnMvYnVpbGRVUkwuanMnO1xuaW1wb3J0IEludGVyY2VwdG9yTWFuYWdlciBmcm9tICcuL0ludGVyY2VwdG9yTWFuYWdlci5qcyc7XG5pbXBvcnQgZGlzcGF0Y2hSZXF1ZXN0IGZyb20gJy4vZGlzcGF0Y2hSZXF1ZXN0LmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gJy4vYnVpbGRGdWxsUGF0aC5qcyc7XG5pbXBvcnQgdmFsaWRhdG9yIGZyb20gJy4uL2hlbHBlcnMvdmFsaWRhdG9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi9BeGlvc0hlYWRlcnMuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXkgPSB7fTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9IGR1bW15LnN0YWNrID8gZHVtbXkuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywgJycpIDogJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgICAgLy8gbWF0Y2ggd2l0aG91dCB0aGUgMiB0b3Agc3RhY2sgbGluZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrICYmICFTdHJpbmcoZXJyLnN0YWNrKS5lbmRzV2l0aChzdGFjay5yZXBsYWNlKC9eLitcXG4uK1xcbi8sICcnKSkpIHtcbiAgICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaWdub3JlIHRoZSBjYXNlIHdoZXJlIFwic3RhY2tcIiBpcyBhbiB1bi13cml0YWJsZSBwcm9wZXJ0eVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBfcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICAgIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICAgIH1cblxuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCB7dHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzfSA9IGNvbmZpZztcblxuICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXNTZXJpYWxpemVyICE9IG51bGwpIHtcbiAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplclxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhwYXJhbXNTZXJpYWxpemVyLCB7XG4gICAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICAgIHNlcmlhbGl6ZTogdmFsaWRhdG9ycy5mdW5jdGlvblxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhjb25maWcsIHtcbiAgICAgIGJhc2VVcmw6IHZhbGlkYXRvcnMuc3BlbGxpbmcoJ2Jhc2VVUkwnKSxcbiAgICAgIHdpdGhYc3JmVG9rZW46IHZhbGlkYXRvcnMuc3BlbGxpbmcoJ3dpdGhYU1JGVG9rZW4nKVxuICAgIH0sIHRydWUpO1xuXG4gICAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgICBjb25maWcubWV0aG9kID0gKGNvbmZpZy5tZXRob2QgfHwgdGhpcy5kZWZhdWx0cy5tZXRob2QgfHwgJ2dldCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgICBsZXQgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzLm1lcmdlKFxuICAgICAgaGVhZGVycy5jb21tb24sXG4gICAgICBoZWFkZXJzW2NvbmZpZy5tZXRob2RdXG4gICAgKTtcblxuICAgIGhlYWRlcnMgJiYgdXRpbHMuZm9yRWFjaChcbiAgICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgICAgKG1ldGhvZCkgPT4ge1xuICAgICAgICBkZWxldGUgaGVhZGVyc1ttZXRob2RdO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5jb25jYXQoY29udGV4dEhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgbGV0IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaC5hcHBseShjaGFpbiwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmwsXG4gICAgICAgIGRhdGFcbiAgICAgIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBnZW5lcmF0ZUhUVFBNZXRob2QoKTtcblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kICsgJ0Zvcm0nXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCh0cnVlKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvcztcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vQ2FuY2VsZWRFcnJvci5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKGNhbmNlbCA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gb25mdWxmaWxsZWQgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgdG9BYm9ydFNpZ25hbCgpIHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgY29uc3QgYWJvcnQgPSAoZXJyKSA9PiB7XG4gICAgICBjb250cm9sbGVyLmFib3J0KGVycik7XG4gICAgfTtcblxuICAgIHRoaXMuc3Vic2NyaWJlKGFib3J0KTtcblxuICAgIGNvbnRyb2xsZXIuc2lnbmFsLnVuc3Vic2NyaWJlID0gKCkgPT4gdGhpcy51bnN1YnNjcmliZShhYm9ydCk7XG5cbiAgICByZXR1cm4gY29udHJvbGxlci5zaWduYWw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICAgKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICAgKi9cbiAgc3RhdGljIHNvdXJjZSgpIHtcbiAgICBsZXQgY2FuY2VsO1xuICAgIGNvbnN0IHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICAgIGNhbmNlbCA9IGM7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuLFxuICAgICAgY2FuY2VsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxUb2tlbjtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn1cbiIsICJjb25zdCBIdHRwU3RhdHVzQ29kZSA9IHtcbiAgQ29udGludWU6IDEwMCxcbiAgU3dpdGNoaW5nUHJvdG9jb2xzOiAxMDEsXG4gIFByb2Nlc3Npbmc6IDEwMixcbiAgRWFybHlIaW50czogMTAzLFxuICBPazogMjAwLFxuICBDcmVhdGVkOiAyMDEsXG4gIEFjY2VwdGVkOiAyMDIsXG4gIE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjogMjAzLFxuICBOb0NvbnRlbnQ6IDIwNCxcbiAgUmVzZXRDb250ZW50OiAyMDUsXG4gIFBhcnRpYWxDb250ZW50OiAyMDYsXG4gIE11bHRpU3RhdHVzOiAyMDcsXG4gIEFscmVhZHlSZXBvcnRlZDogMjA4LFxuICBJbVVzZWQ6IDIyNixcbiAgTXVsdGlwbGVDaG9pY2VzOiAzMDAsXG4gIE1vdmVkUGVybWFuZW50bHk6IDMwMSxcbiAgRm91bmQ6IDMwMixcbiAgU2VlT3RoZXI6IDMwMyxcbiAgTm90TW9kaWZpZWQ6IDMwNCxcbiAgVXNlUHJveHk6IDMwNSxcbiAgVW51c2VkOiAzMDYsXG4gIFRlbXBvcmFyeVJlZGlyZWN0OiAzMDcsXG4gIFBlcm1hbmVudFJlZGlyZWN0OiAzMDgsXG4gIEJhZFJlcXVlc3Q6IDQwMCxcbiAgVW5hdXRob3JpemVkOiA0MDEsXG4gIFBheW1lbnRSZXF1aXJlZDogNDAyLFxuICBGb3JiaWRkZW46IDQwMyxcbiAgTm90Rm91bmQ6IDQwNCxcbiAgTWV0aG9kTm90QWxsb3dlZDogNDA1LFxuICBOb3RBY2NlcHRhYmxlOiA0MDYsXG4gIFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDogNDA3LFxuICBSZXF1ZXN0VGltZW91dDogNDA4LFxuICBDb25mbGljdDogNDA5LFxuICBHb25lOiA0MTAsXG4gIExlbmd0aFJlcXVpcmVkOiA0MTEsXG4gIFByZWNvbmRpdGlvbkZhaWxlZDogNDEyLFxuICBQYXlsb2FkVG9vTGFyZ2U6IDQxMyxcbiAgVXJpVG9vTG9uZzogNDE0LFxuICBVbnN1cHBvcnRlZE1lZGlhVHlwZTogNDE1LFxuICBSYW5nZU5vdFNhdGlzZmlhYmxlOiA0MTYsXG4gIEV4cGVjdGF0aW9uRmFpbGVkOiA0MTcsXG4gIEltQVRlYXBvdDogNDE4LFxuICBNaXNkaXJlY3RlZFJlcXVlc3Q6IDQyMSxcbiAgVW5wcm9jZXNzYWJsZUVudGl0eTogNDIyLFxuICBMb2NrZWQ6IDQyMyxcbiAgRmFpbGVkRGVwZW5kZW5jeTogNDI0LFxuICBUb29FYXJseTogNDI1LFxuICBVcGdyYWRlUmVxdWlyZWQ6IDQyNixcbiAgUHJlY29uZGl0aW9uUmVxdWlyZWQ6IDQyOCxcbiAgVG9vTWFueVJlcXVlc3RzOiA0MjksXG4gIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTogNDMxLFxuICBVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczogNDUxLFxuICBJbnRlcm5hbFNlcnZlckVycm9yOiA1MDAsXG4gIE5vdEltcGxlbWVudGVkOiA1MDEsXG4gIEJhZEdhdGV3YXk6IDUwMixcbiAgU2VydmljZVVuYXZhaWxhYmxlOiA1MDMsXG4gIEdhdGV3YXlUaW1lb3V0OiA1MDQsXG4gIEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOiA1MDUsXG4gIFZhcmlhbnRBbHNvTmVnb3RpYXRlczogNTA2LFxuICBJbnN1ZmZpY2llbnRTdG9yYWdlOiA1MDcsXG4gIExvb3BEZXRlY3RlZDogNTA4LFxuICBOb3RFeHRlbmRlZDogNTEwLFxuICBOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDogNTExLFxufTtcblxuT2JqZWN0LmVudHJpZXMoSHR0cFN0YXR1c0NvZGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICBIdHRwU3RhdHVzQ29kZVt2YWx1ZV0gPSBrZXk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgSHR0cFN0YXR1c0NvZGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5pbXBvcnQgQXhpb3MgZnJvbSAnLi9jb3JlL0F4aW9zLmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuL2NvcmUvbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBDYW5jZWxUb2tlbiBmcm9tICcuL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuL2Vudi9kYXRhLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBzcHJlYWQgZnJvbSAnLi9oZWxwZXJzL3NwcmVhZC5qcyc7XG5pbXBvcnQgaXNBeGlvc0Vycm9yIGZyb20gJy4vaGVscGVycy9pc0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gJy4vYWRhcHRlcnMvYWRhcHRlcnMuanMnO1xuaW1wb3J0IEh0dHBTdGF0dXNDb2RlIGZyb20gJy4vaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgY29uc3QgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbmNvbnN0IGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuO1xuYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDtcbmF4aW9zLlZFUlNJT04gPSBWRVJTSU9OO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGE7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbmF4aW9zLnNwcmVhZCA9IHNwcmVhZDtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yO1xuXG4vLyBFeHBvc2UgbWVyZ2VDb25maWdcbmF4aW9zLm1lcmdlQ29uZmlnID0gbWVyZ2VDb25maWc7XG5cbmF4aW9zLkF4aW9zSGVhZGVycyA9IEF4aW9zSGVhZGVycztcblxuYXhpb3MuZm9ybVRvSlNPTiA9IHRoaW5nID0+IGZvcm1EYXRhVG9KU09OKHV0aWxzLmlzSFRNTEZvcm0odGhpbmcpID8gbmV3IEZvcm1EYXRhKHRoaW5nKSA6IHRoaW5nKTtcblxuYXhpb3MuZ2V0QWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXI7XG5cbmF4aW9zLkh0dHBTdGF0dXNDb2RlID0gSHR0cFN0YXR1c0NvZGU7XG5cbmF4aW9zLmRlZmF1bHQgPSBheGlvcztcblxuLy8gdGhpcyBtb2R1bGUgc2hvdWxkIG9ubHkgaGF2ZSBhIGRlZmF1bHQgZXhwb3J0XG5leHBvcnQgZGVmYXVsdCBheGlvc1xuIiwgImltcG9ydCBheGlvcyBmcm9tICcuL2xpYi9heGlvcy5qcyc7XG5cbi8vIFRoaXMgbW9kdWxlIGlzIGludGVuZGVkIHRvIHVud3JhcCBBeGlvcyBkZWZhdWx0IGV4cG9ydCBhcyBuYW1lZC5cbi8vIEtlZXAgdG9wLWxldmVsIGV4cG9ydCBzYW1lIHdpdGggc3RhdGljIHByb3BlcnRpZXNcbi8vIHNvIHRoYXQgaXQgY2FuIGtlZXAgc2FtZSB3aXRoIGVzIG1vZHVsZSBvciBjanNcbmNvbnN0IHtcbiAgQXhpb3MsXG4gIEF4aW9zRXJyb3IsXG4gIENhbmNlbGVkRXJyb3IsXG4gIGlzQ2FuY2VsLFxuICBDYW5jZWxUb2tlbixcbiAgVkVSU0lPTixcbiAgYWxsLFxuICBDYW5jZWwsXG4gIGlzQXhpb3NFcnJvcixcbiAgc3ByZWFkLFxuICB0b0Zvcm1EYXRhLFxuICBBeGlvc0hlYWRlcnMsXG4gIEh0dHBTdGF0dXNDb2RlLFxuICBmb3JtVG9KU09OLFxuICBnZXRBZGFwdGVyLFxuICBtZXJnZUNvbmZpZ1xufSA9IGF4aW9zO1xuXG5leHBvcnQge1xuICBheGlvcyBhcyBkZWZhdWx0LFxuICBBeGlvcyxcbiAgQXhpb3NFcnJvcixcbiAgQ2FuY2VsZWRFcnJvcixcbiAgaXNDYW5jZWwsXG4gIENhbmNlbFRva2VuLFxuICBWRVJTSU9OLFxuICBhbGwsXG4gIENhbmNlbCxcbiAgaXNBeGlvc0Vycm9yLFxuICBzcHJlYWQsXG4gIHRvRm9ybURhdGEsXG4gIEF4aW9zSGVhZGVycyxcbiAgSHR0cFN0YXR1c0NvZGUsXG4gIGZvcm1Ub0pTT04sXG4gIGdldEFkYXB0ZXIsXG4gIG1lcmdlQ29uZmlnXG59XG4iLCAiaW1wb3J0IHtcbiAgVGhpbmcsXG4gIEVudGl0eSxcbiAgQ2xhc3MsXG4gIFByb3BlcnR5LFxuICBJbmRpdmlkdWFsLFxuICBPbnRvbG9neSxcbn0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuXG4vLyBSRUFET05MWSBhcnJheXMgY29udGFpbmluZyB0aGUgc3RyaW5ncyBkZWZpbmluZyBhIE1vZGVsIE9iamVjdCBUeXBlXG5leHBvcnQgY29uc3QgY2xhc3NUeXBlTmFtZXMgPSBbXCJjbGFzc1wiLCBcInRlcm1cIl0gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgcHJvcGVydHlUeXBlTmFtZXMgPSBbXG4gIFwicHJvcGVydHlcIixcbiAgXCJhbm5vdGF0aW9uUHJvcGVydHlcIixcbiAgXCJkYXRhUHJvcGVydHlcIixcbiAgXCJvYmplY3RQcm9wZXJ0eVwiLFxuXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBpbmRpdmlkdWFsVHlwZU5hbWVzID0gW1wiaW5kaXZpZHVhbFwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBvbnRvbG9neVR5cGVOYW1lcyA9IFtcIm9udG9sb2d5XCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IGVudGl0eVR5cGVOYW1lcyA9IFtcbiAgLi4uY2xhc3NUeXBlTmFtZXMsXG4gIC4uLmluZGl2aWR1YWxUeXBlTmFtZXMsXG4gIC4uLnByb3BlcnR5VHlwZU5hbWVzLFxuXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCB0aGluZ1R5cGVOYW1lcyA9IFtcbiAgLi4uZW50aXR5VHlwZU5hbWVzLFxuICAuLi5vbnRvbG9neVR5cGVOYW1lcyxcbl0gYXMgY29uc3Q7XG5cbi8vIFR5cGUtY3JlYXRpb24gb3V0IG9mIFJFQURPTkxZIGFycmF5c1xuZXhwb3J0IHR5cGUgQ2xhc3NUeXBlTmFtZSA9IHR5cGVvZiBjbGFzc1R5cGVOYW1lc1tudW1iZXJdO1xuZXhwb3J0IHR5cGUgUHJvcGVydHlUeXBlTmFtZSA9IHR5cGVvZiBwcm9wZXJ0eVR5cGVOYW1lc1tudW1iZXJdO1xuZXhwb3J0IHR5cGUgSW5kaXZpZHVhbFR5cGVOYW1lID0gdHlwZW9mIGluZGl2aWR1YWxUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIE9udG9sb2d5VHlwZU5hbWUgPSB0eXBlb2Ygb250b2xvZ3lUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIEVudGl0eVR5cGVOYW1lID0gdHlwZW9mIGVudGl0eVR5cGVOYW1lc1tudW1iZXJdO1xuZXhwb3J0IHR5cGUgVGhpbmdUeXBlTmFtZSA9IHR5cGVvZiB0aGluZ1R5cGVOYW1lc1tudW1iZXJdO1xuXG4vLyBGdW5jdGlvbnMgY2hlY2tpbmcgc3RyaW5nIGFnYWluc3QgdHlwZSBuYW1lcywgcmV0dXJuaW5nIHN0cmluZyBhcyB0eXBlIG5hbWUgaWYgY2hlY2sgcGFzc2VzXG5leHBvcnQgZnVuY3Rpb24gaXNDbGFzc1R5cGVOYW1lKHR5cGU6IHN0cmluZyk6IHR5cGUgaXMgQ2xhc3NUeXBlTmFtZSB7XG4gIHJldHVybiBjbGFzc1R5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIENsYXNzVHlwZU5hbWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGVydHlUeXBlTmFtZSh0eXBlOiBzdHJpbmcpOiB0eXBlIGlzIFByb3BlcnR5VHlwZU5hbWUge1xuICByZXR1cm4gcHJvcGVydHlUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBQcm9wZXJ0eVR5cGVOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0luZGl2aWR1YWxUeXBlTmFtZSh0eXBlOiBzdHJpbmcpOiB0eXBlIGlzIEluZGl2aWR1YWxUeXBlTmFtZSB7XG4gIHJldHVybiBpbmRpdmlkdWFsVHlwZU5hbWVzLmluY2x1ZGVzKHR5cGUgYXMgSW5kaXZpZHVhbFR5cGVOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc09udG9sb2d5VHlwZU5hbWUodHlwZTogc3RyaW5nKTogdHlwZSBpcyBPbnRvbG9neVR5cGVOYW1lIHtcbiAgcmV0dXJuIG9udG9sb2d5VHlwZU5hbWVzLmluY2x1ZGVzKHR5cGUgYXMgT250b2xvZ3lUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbnRpdHlUeXBlTmFtZSh0eXBlOiBzdHJpbmcpOiB0eXBlIGlzIEVudGl0eVR5cGVOYW1lIHtcbiAgcmV0dXJuIGVudGl0eVR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIEVudGl0eVR5cGVOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1RoaW5nVHlwZU5hbWUodHlwZTogc3RyaW5nKTogdHlwZSBpcyBUaGluZ1R5cGVOYW1lIHtcbiAgcmV0dXJuIHRoaW5nVHlwZU5hbWVzLmluY2x1ZGVzKHR5cGUgYXMgVGhpbmdUeXBlTmFtZSk7XG59XG5cbi8vIEZ1bmN0aW9ucyBjaGVja2luZyBUaGluZyBvYmplY3RzIGFnYWluc3Qgc3BlY2lmaWMgdHlwZSAodmlhIGNoZWNraW5nIGdldFR5cGUoKSBhZ2FpbnN0IHR5cGUgbmFtZXMpLCByZXR1cm5pbmcgb2JqZWN0IGFzIHNwZWNpZmljIHR5cGUgaWYgY2hlY2sgcGFzc2VzXG5leHBvcnQgZnVuY3Rpb24gaXNDbGFzcyh0aGluZzogVGhpbmcpOiB0aGluZyBpcyBDbGFzcyB7XG4gIHJldHVybiBpc0NsYXNzVHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5KHRoaW5nOiBUaGluZyk6IHRoaW5nIGlzIFByb3BlcnR5IHtcbiAgcmV0dXJuIGlzUHJvcGVydHlUeXBlTmFtZSh0aGluZy5nZXRUeXBlKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5kaXZpZHVhbCh0aGluZzogVGhpbmcpOiB0aGluZyBpcyBJbmRpdmlkdWFsIHtcbiAgcmV0dXJuIGlzSW5kaXZpZHVhbFR5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbnRpdHkodGhpbmc6IFRoaW5nKTogdGhpbmcgaXMgRW50aXR5IHtcbiAgcmV0dXJuIGlzRW50aXR5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc09udG9sb2d5KHRoaW5nOiBUaGluZyk6IHRoaW5nIGlzIE9udG9sb2d5IHtcbiAgcmV0dXJuIGlzT250b2xvZ3lUeXBlTmFtZSh0aGluZy5nZXRUeXBlKCkpO1xufVxuIiwgImltcG9ydCB7IEV1aUxpbmtDb2xvciB9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvbGluay9saW5rXCI7XG5pbXBvcnQge1xuICBpc0NsYXNzVHlwZU5hbWUsXG4gIGlzSW5kaXZpZHVhbFR5cGVOYW1lLFxuICBpc09udG9sb2d5VHlwZU5hbWUsXG4gIGlzUHJvcGVydHlUeXBlTmFtZSxcbiAgaXNUaGluZ1R5cGVOYW1lLFxuICBUaGluZ1R5cGVOYW1lLFxufSBmcm9tIFwiLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IFN0b3J5Q29udGV4dCB9IGZyb20gXCJAc3Rvcnlib29rL3JlYWN0XCI7XG5cbmV4cG9ydCBjb25zdCBPQk9fRk9VTkRSWV9SRVBPX1VSTF9SQVcgPVxuICBcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9PQk9Gb3VuZHJ5L09CT0ZvdW5kcnkuZ2l0aHViLmlvL21hc3RlclwiIGFzIGNvbnN0O1xuXG5leHBvcnQgZnVuY3Rpb24gYXNBcnJheTxUPihvYmo6IFQgfCBUW10pOiBUW10ge1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfSBlbHNlIGlmIChvYmopIHtcbiAgICByZXR1cm4gW29ial07XG4gIH1cbiAgcmV0dXJuIFtdIGFzIFRbXTtcbn1cblxuY29uc3QgREVGQVVMVF9VU0VfTEVHQUNZID0gdHJ1ZTtcbi8qKlxuICogUmV0dXJucyBgdXNlTGVnYWN5YCBpZiB1bmRlZmluZWQsIG90aGVyd2lzZSByZXR1cm5zIGRlZmF1bHQgdmFsdWUgZm9yIHVzZUxlZ2FjeVxuICogQHBhcmFtIHVzZUxlZ2FjeVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHVzZUxlZ2FjeSAhPT0gdW5kZWZpbmVkID8gdXNlTGVnYWN5IDogREVGQVVMVF9VU0VfTEVHQUNZO1xufVxuXG4vKipcbiAqIFJldHVybnMge0BsaW5rIHR5cGV9LiBJZiB7QGxpbmsgdHlwZX0gZXF1YWxzICd0ZXJtJywgJ2NsYXNzJyBnZXRzIHJldHVybmVkIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRpdHlUeXBlTmFtZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdHlwZSA9PT0gXCJ0ZXJtXCIgPyBcImNsYXNzXCIgOiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZUNhbWVsQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBjYXBpdGFsaXplKHN0cilcbiAgICAuc3BsaXQoLyg/PVtBLVpdW2Etel0pLylcbiAgICAuam9pbihcIiBcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZVVuZGVyc2NvcmUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY2FwaXRhbGl6ZShzdHIpLnJlcGxhY2UoXCJfXCIsIFwiIFwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRyaW1tZWQgYXBpIChvbWl0cyAvYXBpL3YyIGF0IHRoZSBlbmQpXG4gKiBAcGFyYW0gYXBpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGcm9udEVuZEFwaShhcGk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBhcGkucmVwbGFjZSgvXFwvYXBpXFwvPyQvLCBcIi9cIik7XG59XG5cbi8qKlxuICogUmV0dXJucyBcIm9udG9sb2dpZXMve29udG9sb2d5SWR9L3tlbnRpdHlUeXBlfS97aXJpfVwiLCB3aGljaCBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggZnJvbnRlbmRBcGkgdG8gZ2V0IGZ1bGwgbGlua1xuICogQHBhcmFtIG9udG9sb2d5SWQgdGhlIGVudGl0aWVzJyBvbnRvbG9neUlkXG4gKiBAcGFyYW0gaXJpIHRoZSBlbnRpdGllcycgaXJpXG4gKiBAcGFyYW0gZW50aXR5VHlwZUFycmF5IHRoZSBlbnRpdGllcycgdHlwZSBhcnJheSAoZnJvbSBhcGkgSlNPTiBsaW5rZWRFbnRpdGllcylcbiAqIEBwYXJhbSB1c2VMZWdhY3lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0eUluT250b2xvZ3lTdWZmaXgoXG4gIG9udG9sb2d5SWQ6IHN0cmluZyxcbiAgZW50aXR5VHlwZUFycmF5OiBzdHJpbmdbXSB8IHN0cmluZyxcbiAgaXJpPzogc3RyaW5nLFxuICB1c2VMZWdhY3k/OiBib29sZWFuXG4pOiBzdHJpbmcge1xuICByZXR1cm4gKFxuICAgIGBvbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vJHtwbHVyYWxpemVUeXBlKFxuICAgICAgYXNBcnJheShlbnRpdHlUeXBlQXJyYXkpLFxuICAgICAgdXNlTGVnYWN5XG4gICAgKX1gICtcbiAgICAoaXJpICE9IHVuZGVmaW5lZCA/IGAvJHtlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGlyaSkpfWAgOiBcIlwiKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGx1cmFsaXplVHlwZShcbiAgdHlwZUFycmF5OiBzdHJpbmdbXSB8IHN0cmluZyxcbiAgdXNlTGVnYWN5PzogYm9vbGVhblxuKTogXCJ0ZXJtc1wiIHwgXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB8IFwib250b2xvZ2llc1wiIHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIGFzQXJyYXkodHlwZUFycmF5KSkge1xuICAgIGlmIChpc1RoaW5nVHlwZU5hbWUodHlwZSkpIHtcbiAgICAgIGlmIChpc0NsYXNzVHlwZU5hbWUodHlwZSkpXG4gICAgICAgIHJldHVybiBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwidGVybXNcIiA6IFwiY2xhc3Nlc1wiO1xuICAgICAgaWYgKGlzUHJvcGVydHlUeXBlTmFtZSh0eXBlKSkgcmV0dXJuIFwicHJvcGVydGllc1wiO1xuICAgICAgaWYgKGlzSW5kaXZpZHVhbFR5cGVOYW1lKHR5cGUpKSByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgaWYgKGlzT250b2xvZ3lUeXBlTmFtZSh0eXBlKSkgcmV0dXJuIFwib250b2xvZ2llc1wiO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0aGluZ1R5cGUgZm91bmQgdG8gcGx1cmFsaXplIGluIHByb3ZpZGVkIHR5cGVBcnJheS5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW5ndWxhcml6ZVR5cGUoXG4gIHR5cGVBcnJheTogc3RyaW5nW10gfCBzdHJpbmcsXG4gIHVzZUxlZ2FjeT86IGJvb2xlYW5cbik6IFRoaW5nVHlwZU5hbWUge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgYXNBcnJheSh0eXBlQXJyYXkpKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwidGVybXNcIjpcbiAgICAgIGNhc2UgXCJjbGFzc2VzXCI6XG4gICAgICAgIHJldHVybiBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwidGVybVwiIDogXCJjbGFzc1wiO1xuICAgICAgY2FzZSBcInByb3BlcnRpZXNcIjpcbiAgICAgIGNhc2UgXCJkYXRhUHJvcGVydGllc1wiOlxuICAgICAgY2FzZSBcIm9iamVjdFByb3BlcnRpZXNcIjpcbiAgICAgIGNhc2UgXCJhbm5vdGF0aW9uUHJvcGVydGllc1wiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0eVwiO1xuICAgICAgY2FzZSBcImluZGl2aWR1YWxzXCI6XG4gICAgICAgIHJldHVybiBcImluZGl2aWR1YWxcIjtcbiAgICAgIGNhc2UgXCJvbnRvbG9naWVzXCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2d5XCI7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIHRoaW5nVHlwZSBmb3VuZCB0byBzaW5ndWxhcml6ZSBpbiBwcm92aWRlZCB0eXBlQXJyYXkuXCIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gc3RyaW5nIHVzZWQgbWFpbmx5IGZvciBjb21wb25lbnQga2V5cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVN0cmluZygpIHtcbiAgcmV0dXJuIChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMiwgNTQpKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hleENvbG9yKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvXiNbMC05QS1GXXs2fSQvaS50ZXN0KHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JnYkNvbG9yKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvXihyZ2J8aHNsKShhPylbKF1cXHMqKFtcXGQuXStcXHMqJT8pXFxzKixcXHMqKFtcXGQuXStcXHMqJT8pXFxzKixcXHMqKFtcXGQuXStcXHMqJT8pXFxzKig/OixcXHMqKFtcXGQuXSspXFxzKik/WyldJC9pLnRlc3QoXG4gICAgc3RyXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V1aUxpbmtDb2xvcihzdHI6IHN0cmluZyk6IHN0ciBpcyBFdWlMaW5rQ29sb3Ige1xuICByZXR1cm4gW1xuICAgIFwicHJpbWFyeVwiLFxuICAgIFwic3ViZHVlZFwiLFxuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwiYWNjZW50XCIsXG4gICAgXCJkYW5nZXJcIixcbiAgICBcIndhcm5pbmdcIixcbiAgICBcInRleHRcIixcbiAgICBcImdob3N0XCIsXG4gIF0uaW5jbHVkZXMoc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXVpQnV0dG9uQ29sb3Ioc3RyOiBzdHJpbmcpOiBzdHIgaXMgRXVpTGlua0NvbG9yIHtcbiAgcmV0dXJuIFtcInRleHRcIiwgXCJhY2NlbnRcIiwgXCJwcmltYXJ5XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIiwgXCJkYW5nZXJcIl0uaW5jbHVkZXMoXG4gICAgc3RyXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoXG4gIGVycm9yOiBhbnksXG4gIG1lc3NhZ2VQbGFjZWhvbGRlciA9IFwiaW5mb3JtYXRpb25cIlxuKTogc3RyaW5nIHtcbiAgY29uc3QgZXJyb3JfbXNnOiBzdHJpbmcgPSBlcnJvci5tZXNzYWdlO1xuICBpZiAoZXJyb3JfbXNnID09PSBcIlJlc3BvbnNlIGNvbnRhaW5zIDAgZWxlbWVudHNcIikge1xuICAgIHJldHVybiBcIk5vIGVsZW1lbnRzIGZvdW5kXCI7XG4gIH0gZWxzZSByZXR1cm4gYE5vICR7bWVzc2FnZVBsYWNlaG9sZGVyfSBhdmFpbGFibGVgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5mZXJUeXBlRnJvbVR5cGVBcnJheSh0eXBlczogc3RyaW5nW10pIHtcbiAgbGV0IHJlcyA9IHR5cGVzLmZpbHRlcigoZWxlbTogc3RyaW5nKSA9PiBpc1RoaW5nVHlwZU5hbWUoZWxlbSkpOyAvLyBmaWx0ZXIgbm90IG1hdGNoaW5nIHN0cmluZ3NcbiAgcmVzID0gcmVzLm1hcCgoaXRlbSkgPT5cbiAgICBpdGVtID09PSBcImFubm90YXRpb25Qcm9wZXJ0eVwiIHx8XG4gICAgaXRlbSA9PT0gXCJvYmplY3RQcm9wZXJ0eVwiIHx8XG4gICAgaXRlbSA9PT0gXCJkYXRhUHJvcGVydHlcIlxuICAgICAgPyBcInByb3BlcnR5XCJcbiAgICAgIDogaXRlbVxuICApO1xuICByZXMgPSBbXG4gICAgLi4ubmV3IFNldDxcbiAgICAgIHwgXCJjbGFzc1wiXG4gICAgICB8IFwidGVybVwiXG4gICAgICB8IFwiaW5kaXZpZHVhbFwiXG4gICAgICB8IFwicHJvcGVydHlcIlxuICAgICAgfCBcImFubm90YXRpb25Qcm9wZXJ0eVwiXG4gICAgICB8IFwiZGF0YVByb3BlcnR5XCJcbiAgICAgIHwgXCJvYmplY3RQcm9wZXJ0eVwiXG4gICAgICB8IFwib250b2xvZ3lcIlxuICAgID4ocmVzKSxcbiAgXTsgLy8gcmVtb3ZlIGR1cGxpY2F0ZXNcblxuICBpZiAocmVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHJlc1swXSBhcyBUaGluZ1R5cGVOYW1lO1xuICBlbHNlIGlmIChyZXMubGVuZ3RoID09PSAwKVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJFbnRpdHkgdHlwZSBjb3VsZCBub3QgYmUgY29ycmVjdGx5IGluZmVycmVkOiBObyBzdWl0YWJsZSB0eXBlIGZvdW5kIGluIGFycmF5LlwiXG4gICAgKTtcbiAgZWxzZVxuICAgIHRocm93IEVycm9yKFxuICAgICAgYEVudGl0eSB0eXBlIGNvdWxkIG5vdCBiZSBjb3JyZWN0bHkgaW5mZXJyZWQ6IE11bHRpcGxlIHR5cGVzIGZvdW5kIGluIGFycmF5LCBubyBkZWZpbml0ZSBjaG9pY2UgcG9zc2libGUgLSAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICByZXNcbiAgICAgICl9YFxuICAgICk7XG59XG5cbi8qIFRPRE86IHBsdXJhbGl6ZVR5cGUgbm90IGF2YWlsYWJsZSBpbiBodG1sIHZlcnNpb24sIHJlcGxhY2Ugd2l0aCBsb2NhbCBmdW5jdGlvbmFsaXR5ICovXG5leHBvcnQgZnVuY3Rpb24gbWFudWFsbHlFbWJlZE9uTmF2aWdhdGUoXG4gIGNvZGU6IHN0cmluZyxcbiAgc3RvcnlDb250ZXh0OiBTdG9yeUNvbnRleHRcbikge1xuICBzd2l0Y2ggKHN0b3J5Q29udGV4dC5hcmdzW1wib25OYXZpZ2F0ZVRvRW50aXR5XCJdKSB7XG4gICAgY2FzZSBcIkNvbnNvbGUgbWVzc2FnZVwiOlxuICAgICAgY29kZSA9IGNvZGUucmVwbGFjZShcbiAgICAgICAgL29uTmF2aWdhdGVUb0VudGl0eT1cXHsoXFwoXFwpID0+IFxce318ZnVuY3Rpb24gbm9SZWZDaGVja1xcKFxcKVxce30pfS8sXG4gICAgICAgIFwib25OYXZpZ2F0ZVRvRW50aXR5PXtcXG4gICAgKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgIGNvbnNvbGUubG9nKCdUcmlnZ2VyZWQgb25OYXZpZ2F0ZVRvRW50aXR5KCknICsgKGVudGl0eVR5cGUgPyBgIGZvciAke2VudGl0eVR5cGUgfHwgXFxcImVudGl0eVxcXCJ9YCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5sYWJlbCkgPyBgIFxcXCIke2VudGl0eS5sYWJlbH1cXFwiYCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5pcmkpID8gYCAoaXJpPVxcXCIke2VudGl0eS5pcml9XFxcIilgIDogJycpICsgJy4nKTtcXG4gICAgfVxcbiAgfVwiXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIk5hdmlnYXRlIHRvIEVCSSBwYWdlXCI6XG4gICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAvb25OYXZpZ2F0ZVRvRW50aXR5PVxceyhcXChcXCkgPT4gXFx7fXxmdW5jdGlvbiBub1JlZkNoZWNrXFwoXFwpXFx7fSl9LyxcbiAgICAgICAgJ29uTmF2aWdhdGVUb0VudGl0eT17XFxuICAgIChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICBpZihlbnRpdHkgJiYgZW50aXR5LmlyaSAmJiBlbnRpdHlUeXBlKSB7XFxuICAgICAgICB3aW5kb3cub3BlbihcXCdodHRwczovL3d3dy5lYmkuYWMudWsvb2xzNC9vbnRvbG9naWVzL1xcJyArIG9udG9sb2d5SWQgKyBcXCcvXFwnICsgbmV3IE1hcChbW1widGVybVwiLFwiY2xhc3Nlc1wiXSxbXCJjbGFzc1wiLFwiY2xhc3Nlc1wiXSxbXCJpbmRpdmlkdWFsXCIsXCJpbmRpdmlkdWFsc1wiXSxbXCJwcm9wZXJ0eVwiLFwicHJvcGVydGllc1wiXSxbXCJkYXRhUHJvcGVydHlcIixcInByb3BlcnRpZXNcIl0sW1wib2JqZWN0UHJvcGVydHlcIixcInByb3BlcnRpZXNcIl0sW1wiYW5ub3RhdGlvblByb3BlcnR5XCIsXCJwcm9wZXJ0aWVzXCJdXSkuZ2V0KGVudGl0eVR5cGUpICsgXFwnL1xcJyArIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoZW50aXR5LmlyaSkpLCBcIl90b3BcIik7XFxuICAgICAgfVxcbiAgICAgIGVsc2Uge1xcbiAgICAgICAgd2luZG93Lm9wZW4oXFwnaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvb250b2xvZ2llcy9cXCcgKyBvbnRvbG9neUlkLCBcIl90b3BcIik7XFxuICAgICAgfVxcbiAgICB9XFxuICB9J1xuICAgICAgKTtcbiAgfVxuICBzd2l0Y2ggKHN0b3J5Q29udGV4dC5hcmdzW1wib25OYXZpZ2F0ZVRvT250b2xvZ3lcIl0pIHtcbiAgICBjYXNlIFwiQ29uc29sZSBtZXNzYWdlXCI6XG4gICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAvb25OYXZpZ2F0ZVRvT250b2xvZ3k9XFx7KFxcKFxcKSA9PiBcXHt9fGZ1bmN0aW9uIG5vUmVmQ2hlY2tcXChcXClcXHt9KX0vLFxuICAgICAgICBcIm9uTmF2aWdhdGVUb09udG9sb2d5PXtcXG4gICAgKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgIGNvbnNvbGUubG9nKCdUcmlnZ2VyZWQgb25OYXZpZ2F0ZVRvT250b2xvZ3koKScgKyAoZW50aXR5VHlwZSA/IGAgZm9yICR7ZW50aXR5VHlwZSB8fCBcXFwiZW50aXR5XFxcIn1gIDogJycpICsgKChlbnRpdHkgJiYgZW50aXR5LmxhYmVsKSA/IGAgXFxcIiR7ZW50aXR5LmxhYmVsfVxcXCJgIDogJycpICsgKChlbnRpdHkgJiYgZW50aXR5LmlyaSkgPyBgIChpcmk9XFxcIiR7ZW50aXR5LmlyaX1cXFwiKWAgOiAnJykgKyBgIGZvciBvbnRvbG9neUlkIFxcXCIke29udG9sb2d5SWR9XFxcIi5gKTtcXG4gICAgfVxcbiAgfVwiXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIk5hdmlnYXRlIHRvIEVCSSBwYWdlXCI6XG4gICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAvb25OYXZpZ2F0ZVRvT250b2xvZ3k9XFx7KFxcKFxcKSA9PiBcXHt9fGZ1bmN0aW9uIG5vUmVmQ2hlY2tcXChcXClcXHt9KX0vLFxuICAgICAgICAnb25OYXZpZ2F0ZVRvT250b2xvZ3k9e1xcbiAgICAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlPzogc3RyaW5nLCBlbnRpdHk/OiB7IGlyaTogc3RyaW5nLCBsYWJlbD86IHN0cmluZyB9KSA9PiB7XFxuICAgICAgaWYoZW50aXR5ICYmIGVudGl0eS5pcmkgJiYgZW50aXR5VHlwZSkge1xcbiAgICAgICAgd2luZG93Lm9wZW4oXFwnaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvb250b2xvZ2llcy9cXCcgKyBvbnRvbG9neUlkICsgXFwnL1xcJyArIG5ldyBNYXAoW1tcInRlcm1cIixcImNsYXNzZXNcIl0sW1wiY2xhc3NcIixcImNsYXNzZXNcIl0sW1wiaW5kaXZpZHVhbFwiLFwiaW5kaXZpZHVhbHNcIl0sW1wicHJvcGVydHlcIixcInByb3BlcnRpZXNcIl0sW1wiZGF0YVByb3BlcnR5XCIsXCJwcm9wZXJ0aWVzXCJdLFtcIm9iamVjdFByb3BlcnR5XCIsXCJwcm9wZXJ0aWVzXCJdLFtcImFubm90YXRpb25Qcm9wZXJ0eVwiLFwicHJvcGVydGllc1wiXV0pLmdldChlbnRpdHlUeXBlKSArIFxcJy9cXCcgKyBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eS5pcmkpKSwgXCJfdG9wXCIpO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIHtcXG4gICAgICAgIHdpbmRvdy5vcGVuKFxcJ2h0dHBzOi8vd3d3LmViaS5hYy51ay9vbHM0L29udG9sb2dpZXMvXFwnICsgb250b2xvZ3lJZCwgXCJfdG9wXCIpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfSdcbiAgICAgICk7XG4gIH1cbiAgc3dpdGNoIChzdG9yeUNvbnRleHQuYXJnc1tcIm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZVwiXSkge1xuICAgIGNhc2UgXCJDb25zb2xlIG1lc3NhZ2VcIjpcbiAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgIC9vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9XFx7KFxcKFxcKSA9PiBcXHt9fGZ1bmN0aW9uIG5vUmVmQ2hlY2tcXChcXClcXHt9KX0vLFxuICAgICAgICBcIm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZT17XFxuICAgIChlbnRpdHlUeXBlPzogc3RyaW5nLCBlbnRpdHk/OiB7IGlyaTogc3RyaW5nLCBsYWJlbD86IHN0cmluZyB9KSA9PiB7XFxuICAgICAgIGNvbnNvbGUubG9nKCdUcmlnZ2VyZWQgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlKCknICsgKGVudGl0eVR5cGUgPyBgIGZvciAke2VudGl0eVR5cGUgfHwgXFxcImVudGl0eVxcXCJ9YCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5sYWJlbCkgPyBgIFxcXCIke2VudGl0eS5sYWJlbH1cXFwiYCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5pcmkpID8gYCAoaXJpPVxcXCIke2VudGl0eS5pcml9XFxcIilgIDogJycpICsgJy4nKTtcXG4gICAgfVxcbiAgfVwiXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIk5hdmlnYXRlIHRvIEVCSSBwYWdlXCI6XG4gICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAvb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPVxceyhcXChcXCkgPT4gXFx7fXxmdW5jdGlvbiBub1JlZkNoZWNrXFwoXFwpXFx7fSl9LyxcbiAgICAgICAgXCJvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e1xcbiAgICAoZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgICB3aW5kb3cub3BlbignaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvc2VhcmNoP3E9JyArICgoZW50aXR5ICYmIGVudGl0eS5sYWJlbCkgPyBlbnRpdHkubGFiZWwgOiBcXFwiXFxcIikgKyAnJmV4YWN0TWF0Y2g9dHJ1ZSZsYW5nPWVuJywgXFxcIl90b3BcXFwiKTtcXG4gICAgfVxcbiAgfVwiXG4gICAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNvZGU7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVpZmllZDxUPiB7XG4gIHZhbHVlOiBUO1xuICBheGlvbXM6IGFueVtdIHwgbnVsbDtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBULCBheGlvbXM6IGFueVtdIHwgbnVsbCkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmF4aW9tcyA9IGF4aW9tcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb248VD4oanNvbk5vZGU6IGFueSk6IFJlaWZpZWQ8VD5bXSB7XG4gICAgaWYgKCFqc29uTm9kZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShqc29uTm9kZSkpIHtcbiAgICAgIGpzb25Ob2RlID0gW2pzb25Ob2RlXTtcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbk5vZGUubWFwKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlLnR5cGUpICYmXG4gICAgICAgIHZhbHVlLnR5cGUuaW5kZXhPZihcInJlaWZpY2F0aW9uXCIpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVpZmllZDxUPih2YWx1ZS52YWx1ZSwgdmFsdWUuYXhpb21zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVpZmllZDxUPih2YWx1ZSwgbnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBoYXNNZXRhZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5heGlvbXMgIT0gbnVsbDtcbiAgfVxuXG4gIC8vIENvbWJpbmUgYWxsIG9mIHRoZSBheGlvbXMgaW50byBvbmUgbWV0YWRhdGEgb2JqZWN0IGZvciB0aGUgcHJvcGVydHkuXG4gIC8vXG4gIC8vIG5vdGU6IFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgc2FtZSBwcm9wZXJ0eSBpcyByZWlmaWVkIG11bHRpcGxlIHRpbWVzIHdpdGhcbiAgLy8gZGlmZmVyZW50IG1ldGFkYXRhLCBpdCB3aWxsIGFsbCBiZSBjb21iaW5lZCBpbiB0aGUgVUkuIFdoZXRoZXIgdGhpcyBpc1xuICAvLyB0aGUgZGVzaXJlZCBiZWhhdmlvdXIgaXMgVEJELlxuICAvL1xuICBnZXRNZXRhZGF0YSgpOiBhbnkgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuYXhpb21zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzOiBhbnkgPSB7fTtcblxuICAgIGZvciAoY29uc3QgYXhpb20gb2YgdGhpcy5heGlvbXMpIHtcbiAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhheGlvbSkpIHtcbiAgICAgICAgY29uc3QgdiA9IGF4aW9tW2tdO1xuICAgICAgICBjb25zdCBleGlzdGluZzogYW55W10gfCB1bmRlZmluZWQgPSBwcm9wZXJ0aWVzW2tdO1xuICAgICAgICBpZiAoZXhpc3RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGV4aXN0aW5nLnB1c2godik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvcGVydGllc1trXSA9IFt2XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG59XG4iLCAiaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4vUmVpZmllZFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExpbmtlZEVudGl0eSB7XG4gIGRlZmluZWRCeT86IHN0cmluZ1tdO1xuICBpcmk/OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbiAgbnVtQXBwZWFyc0luOiBzdHJpbmc7XG4gIGhhc0xvY2FsRGVmaW5pdGlvbjogYm9vbGVhbjtcbiAgbGFiZWw6IHN0cmluZyB8IHN0cmluZ1tdO1xuICB0eXBlOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlua2VkRW50aXRpZXMge1xuICBsaW5rZWRFbnRpdGllczogeyBba2V5OiBzdHJpbmddOiBMaW5rZWRFbnRpdHkgfTtcblxuICBjb25zdHJ1Y3RvcihsaW5rZWRFbnRpdGllczogYW55KSB7XG4gICAgaWYgKGxpbmtlZEVudGl0aWVzKSB0aGlzLmxpbmtlZEVudGl0aWVzID0geyAuLi5saW5rZWRFbnRpdGllcyB9O1xuICAgIGVsc2UgdGhpcy5saW5rZWRFbnRpdGllcyA9IHt9O1xuICB9XG5cbiAgbWVyZ2VXaXRoKGxpbmtlZEVudGl0aWVzOiBhbnkpOiBMaW5rZWRFbnRpdGllcyB7XG4gICAgaWYgKGxpbmtlZEVudGl0aWVzKVxuICAgICAgcmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMsIGxpbmtlZEVudGl0aWVzIH0pO1xuICAgIGVsc2UgcmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMgfSk7XG4gIH1cblxuICBnZXRMYWJlbEZvcklyaShpcmk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbGlua2VkRW50aXR5ID0gdGhpcy5saW5rZWRFbnRpdGllc1tpcmldO1xuXG4gICAgaWYgKGxpbmtlZEVudGl0eSkge1xuICAgICAgY29uc3QgbGFiZWwgPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4obGlua2VkRW50aXR5LmxhYmVsKTtcbiAgICAgIGlmIChsYWJlbCAmJiBsYWJlbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBsYWJlbFswXS52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQoaXJpOiBzdHJpbmcpOiBMaW5rZWRFbnRpdHkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpbmtlZEVudGl0aWVzW2lyaV07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5cbmltcG9ydCBMaW5rZWRFbnRpdGllcyBmcm9tIFwiLi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5pbXBvcnQgeyBUaGluZ1R5cGVOYW1lIH0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBwbHVyYWxpemVUeXBlIH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPTFMzVGhpbmcgaW1wbGVtZW50cyBUaGluZyB7XG4gIHByb3BlcnRpZXM6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBhbnkpIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0TGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl07XG4gIH1cblxuICAvLyBUT0RPOiBJcyBjdXJpZSAvIG9ib19pZCBtZWFudD8gXCJpZFwiIG9ubHkgZXhpc3RzIGluIHN0YW5kYXJkPyAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvb250b2xvZ2llcy9hZG8vcHJvcGVydGllcz9pcmk9aHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1JPXzAwMDIxNzUpXG4gIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlkXCJdO1xuICB9XG5cbiAgZ2V0SXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlyaVwiXTtcbiAgfVxuXG4gIC8vIHN0YW5kYXJkIHJlc3BvbnNlcyBkb24ndCBoYXZlIFwidHlwZVwiIGtleSAtPiBpbXBsZW1lbnQgc3RhdGljYWxseSBpbiBzdWJ0eXBlc1xuICBhYnN0cmFjdCBnZXRUeXBlKCk6IFRoaW5nVHlwZU5hbWU7XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOlxuICAgIHwgXCJvbnRvbG9naWVzXCJcbiAgICB8IFwiY2xhc3Nlc1wiXG4gICAgfCBcInRlcm1zXCJcbiAgICB8IFwicHJvcGVydGllc1wiXG4gICAgfCBcImluZGl2aWR1YWxzXCIge1xuICAgIHJldHVybiBwbHVyYWxpemVUeXBlKHRoaXMuZ2V0VHlwZSgpKTtcbiAgfVxuXG4gIC8vIG5vdCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgcmVzcG9uc2VzXG4gIGdldFJkZlR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmFtZXMoKVswXTtcbiAgfVxuXG4gIC8vIGhhcyBhZGRpdGlvbmFsIGtleSBcInNob3J0aGFuZFwiPyAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvb250b2xvZ2llcy9hZG8vcHJvcGVydGllcz9pcmk9aHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1JPXzAwMDIxNzUpXG4gIGdldE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsYWJlbHMgPSBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl0pO1xuICAgIGlmIChsYWJlbHMgJiYgbGFiZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBsYWJlbHMubWFwKChsYWJlbCkgPT4gbGFiZWwudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gW3RoaXMuZ2V0SXJpKCldO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdKTtcbiAgICBpZiAoZGVmaW5pdGlvbiAmJiBkZWZpbml0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBkZWZpbml0aW9uLm1hcCgoZGVmKSA9PiBkZWYudmFsdWUgfHwgXCJcIikuam9pbihcIiBcIik7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neV9uYW1lXCJdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGFwcGxpY2FibGUgLyBuZWNlc3NhcnkgaW4gc3RhbmRhcmQgYXMgdGhlcmUgYXJlIG5vIGxpbmtlZCBlbnRpdGllc1xuICBnZXRMYWJlbEZvcklyaShpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbGlua2VkRW50aXRpZXMgPSB0aGlzLnByb3BlcnRpZXNbXCJsaW5rZWRFbnRpdGllc1wiXTtcbiAgICBpZiAobGlua2VkRW50aXRpZXMpIHtcbiAgICAgIGNvbnN0IGxhYmVsOiBSZWlmaWVkPHN0cmluZz5bXSA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgICAgbGlua2VkRW50aXRpZXNbaWRdPy5sYWJlbFxuICAgICAgKTtcbiAgICAgIHJldHVybiBsYWJlbFswXT8udmFsdWUgfHwgaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gIH1cblxuICBhYnN0cmFjdCBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXTtcbiAgYWJzdHJhY3QgZ2V0QW5ub3RhdGlvblRpdGxlQnlJZChpZDogc3RyaW5nKTogc3RyaW5nO1xuICBhYnN0cmFjdCBnZXRBbm5vdGF0aW9uQnlJZChpZDogc3RyaW5nKTogUmVpZmllZDxhbnk+W107XG5cbiAgLy8gVE9ETzogbm90IGFwcGxpY2FibGUgLyBuZWNlc3NhcnkgaW4gc3RhbmRhcmRcbiAgZ2V0TGlua2VkRW50aXRpZXMoKTogTGlua2VkRW50aXRpZXMge1xuICAgIHJldHVybiBuZXcgTGlua2VkRW50aXRpZXModGhpcy5wcm9wZXJ0aWVzW1wibGlua2VkRW50aXRpZXNcIl0gfHwge30pO1xuICB9XG5cbiAgZ2V0RGVwaWN0aW9uVXJsKCk6IHN0cmluZyB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiYW5ub3RhdGlvblwiXSAmJlxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiYW5ub3RhdGlvblwiXVtcImRlcGljdGlvblwiXVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl1bXCJkZXBpY3Rpb25cIl1bMF07XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IE9MUzNUaGluZyB9IGZyb20gXCIuL09MUzNUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5LCBkZVVuZGVyc2NvcmUgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IEVudGl0eVR5cGVOYW1lIH0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPTFMzRW50aXR5IGV4dGVuZHMgT0xTM1RoaW5nIGltcGxlbWVudHMgRW50aXR5IHtcbiAgYWJzdHJhY3QgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXTtcbiAgYWJzdHJhY3QgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXTtcbiAgYWJzdHJhY3QgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W107XG5cbiAgaXNDYW5vbmljYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlzX2RlZmluaW5nX29udG9sb2d5XCJdID09PSB0cnVlO1xuICB9XG5cbiAgLy8gVE9ETzogZG9lcyBub3Qgc2VlbSB0byBvY2N1ciBpbiBzdGFuZGFyZCAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvdjIvZW50aXRpZXM/aXJpPWh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9GT09ET05fMDAwMDQ0NzQpXG4gIC8vICAgICAgIHYyIGhhcyBkZXByZWNhdGVkIGluZm9ybWF0aW9uLCBzdGFuZGFyZCBoYXMgbm90XG4gIGlzRGVwcmVjYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGVwcmVjYXRlZFwiXSA9PT0gXCJ0cnVlXCJcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25WZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgLy8gb25seSBzdXBwb3J0cyBFRk8gZm9yIG5vd1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vb2Jzb2xldGVkX2luX3ZlcnNpb25cIl07XG4gIH1cblxuICBnZXREZXByZWNhdGlvblJlYXNvbigpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDIzMVwiXVxuICAgICkuY29uY2F0KFxuICAgICAgUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vcmVhc29uX2Zvcl9vYnNvbGVzY2VuY2VcIl1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZXBsYWNlbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAxMDAwMDFcIl07XG4gIH1cblxuICAvLyBUT0RPOiBub3QgZXhpc3RlbnQgaW4gc3RhbmRhcmQuIENhbiBiZSBleHRyYWN0ZWQgZnJvbSBcImxpbmtzXCItPlwiZ3JhcGhcIlxuICAvLyAgICAgICAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvdGVybXM/aXJpPWh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9BR1JPXzAwMDAwMDAyKVxuICBnZXRSZWxhdGVkRnJvbSgpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJyZWxhdGVkRnJvbVwiXSk7XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbkFzQXJyYXkoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVzY3JpcHRpb25cIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGV4aXN0ZW50IGluIHN0YW5kYXJkLiBDYW4gYmUgZXh0cmFjdGVkIGZyb20gXCJsaW5rc1wiLT5cImNoaWxkcmVuXCJcbiAgaGFzRGlyZWN0Q2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc0RpcmVjdENoaWxkcmVuXCJdID09PSBcInRydWVcIjtcbiAgfVxuXG4gIC8vIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCBmcm9tIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxDaGlsZHJlblwiXG4gIGhhc0hpZXJhcmNoaWNhbENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNIaWVyYXJjaGljYWxDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzX2NoaWxkcmVuXCJdO1xuICB9XG5cbiAgLy8gVE9ETzogY291bGQgbm90IGZpbmQgZXhhbXBsZXMgb2YgYW5jZXN0b3JzIGluIG5ldyBhcGkgc28gZmFyXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogY2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsQW5jZXN0b3JzXCJcbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1zXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCB2aWEgc2VhcmNoaW5nIGZvciBlbnRpdHkgd2l0aG91dCBzcGVjaWZpYyBvbnRvbG9neSAtPiBnaXZlcyBhbGwgb2NjdXJyZW5jZXNcbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRDcm9zc1JlZmVyZW5jZXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW1wiaGFzX2RieHJlZlwiXSB8fCBbXTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gU3RhbmRhcmQgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIGlzX2RlZmluaW5nX29udG9sb2d5IGFzIHdlbGxcbiAgLy8gICAgICAgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3YyL29udG9sb2dpZXMvcm8vcHJvcGVydGllcz9pcmk9aHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1JPXzAwMDIxNzUpXG4gIGdldERlZmluZWRCeSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbmVkQnlcIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0SXNEZWZpbmluZ09udG9sb2d5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0gfHwgdW5kZWZpbmVkKSBhcyBib29sZWFuO1xuICB9XG5cbiAgZ2V0U2hvcnRGb3JtKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9ib19pZFwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydF9mb3JtXCJdO1xuICB9XG5cbiAgLy8gVE9ETzogYXJlIHRoZSBmb2xsb3dpbmcgMyBuZWVkZWQ/XG4gIGdldERlcGljdGVkQnkoKTogUmVpZmllZDxzdHJpbmc+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oW1xuICAgICAgLi4uYXNBcnJheShcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiXSB8fCBbXVxuICAgICAgKSxcbiAgICAgIC4uLmFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3Rpb25cIl0gfHwgW10pLFxuICAgIF0pO1xuICB9XG5cbiAgaXNQcmVkaWNhdGVGcm9tSW5mb3JtYWxWb2NhYnVsYXJ5KHByZWRpY2F0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwNC8wMi9za29zL2NvcmUjXCIpIHx8XG4gICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9cIikgfHxcbiAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9cIikgfHxcbiAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3NjaGVtYS5vcmcvXCIpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDYW4gYmUganVzdCBmb3VuZCB1bmRlciBgcHJvcGVydGllc1tcImFubm90YXRpb25cIl1gLlxuICAgKiAgTm90IHByZXNlbnQgaW4gb2xzNC9hcGksXG4gICAqICBidXQgaW4gc2VtYW50aWNsb29rdXAuemJtZWQuZGUvYXBpLlxuICAgKi9cbiAgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW10ge1xuICAgIC8qIG9sczQgZXhjbHVkZXMgXCJoYXMgcHJlZmVycmVkIHJvb3QgdGVybVwiLFxuICAgICAgIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYW5kIGFueXRoaW5nIGluIHJkZiwgcmRmcyBhbmQgb3dsIG5hbWVzcGFjZXMsXG4gICAgICAgYnV0IHRoaXMgaXMgbm90IHBvc3NpYmxlIGhlcmUgYXMgdGhlIGxhYmVscyBhcmUga2V5cyBoZXJlLCBub3QgdGhlIElSSSdzICovXG4gICAgcmV0dXJuIGFzQXJyYXk8c3RyaW5nPihPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdKSk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBkZVVuZGVyc2NvcmUoaWQpO1xuICB9XG5cbiAgZ2V0QW5ub3RhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbihhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl1baWRdKSk7XG4gIH1cblxuICAvLyBUT0RPOiBDYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXG4gIGdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgLy8gVE9ETzogQ2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiZGVzY2VuZGFudHNcIlxuICBnZXROdW1EZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIC8vIFRPRE86IENhbiBiZSBpbmZlcnJlZCB2aWEgXCJsaW5rc1wiLT5cImhpZXJhcmNoaWNhbFBhcmVudHNcIlxuICBnZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhwYXJlbnRJcmk6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHAgb2YgaGllcmFyY2hpY2FsUGFyZW50cykge1xuICAgICAgaWYgKHAudmFsdWUgPT09IHBhcmVudElyaSkge1xuICAgICAgICByZXR1cm4gcC5nZXRNZXRhZGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IGdldFR5cGUoKTogRW50aXR5VHlwZU5hbWU7XG59XG4iLCAiaW1wb3J0IHsgQ2xhc3MgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgT0xTM0VudGl0eSB9IGZyb20gXCIuL09MUzNFbnRpdHlcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgQ2xhc3NUeXBlTmFtZSB9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY2xhc3MgT0xTM0NsYXNzIGV4dGVuZHMgT0xTM0VudGl0eSBpbXBsZW1lbnRzIENsYXNzIHtcbiAgZ2V0VHlwZSgpOiBDbGFzc1R5cGVOYW1lIHtcbiAgICByZXR1cm4gXCJjbGFzc1wiO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHtcbiAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gIH1cblxuICAvLyBUT0RPOiBjYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxQYXJlbnRzXCJcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQYXJlbnRcIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogY2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwicGFyZW50c1wiXG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViQ2xhc3NPZlwiXVxuICAgICk7XG4gIH1cblxuICAvLyBUT0RPOiBjYW4gdGhpcyBiZSBpbmZlcnJlZD9cbiAgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNlcXVpdmFsZW50Q2xhc3NcIl1cbiAgICApO1xuICB9XG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldERpc2pvaW50V2l0aCgpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2Rpc2pvaW50V2l0aFwiXVxuICAgICk7XG4gIH1cblxuICAvLyBUT0RPOiBjYW4gdGhpcyBiZSBpbmZlcnJlZD9cbiAgZ2V0SGFzS2V5KCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2hhc0tleVwiXSk7XG4gIH1cblxuICBnZXRTdWJzZXRzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJpbl9zdWJzZXRcIl0pIHx8IFtdO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgUHJvcGVydHkgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgT0xTM0VudGl0eSB9IGZyb20gXCIuL09MUzNFbnRpdHlcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgUHJvcGVydHlUeXBlTmFtZSB9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY2xhc3MgT0xTM1Byb3BlcnR5IGV4dGVuZHMgT0xTM0VudGl0eSBpbXBsZW1lbnRzIFByb3BlcnR5IHtcbiAgZ2V0VHlwZSgpOiBQcm9wZXJ0eVR5cGVOYW1lIHtcbiAgICByZXR1cm4gXCJwcm9wZXJ0eVwiO1xuICB9XG5cbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudFByb3BlcnR5XCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3Byb3BlcnR5RGlzam9pbnRXaXRoXCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldEludmVyc2VPZigpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNpbnZlcnNlT2ZcIl0pO1xuICB9XG5cbiAgZ2V0RG9tYWluKCkge1xuICAgIHJldHVybiBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI2RvbWFpblwiXVxuICAgICk7XG4gIH1cblxuICBnZXRSYW5nZSgpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNyYW5nZVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUNoYWlucygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3Byb3BlcnR5Q2hhaW5BeGlvbVwiXVxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBJbmRpdmlkdWFsIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IE9MUzNFbnRpdHkgfSBmcm9tIFwiLi9PTFMzRW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IEluZGl2aWR1YWxUeXBlTmFtZSB9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY2xhc3MgT0xTM0luZGl2aWR1YWwgZXh0ZW5kcyBPTFMzRW50aXR5IGltcGxlbWVudHMgSW5kaXZpZHVhbCB7XG4gIGdldFR5cGUoKTogSW5kaXZpZHVhbFR5cGVOYW1lIHtcbiAgICByZXR1cm4gXCJpbmRpdmlkdWFsXCI7XG4gIH1cblxuICBnZXRQYXJlbnRzKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGlyZWN0UGFyZW50XCJdKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihbXSk7XG4gIH1cblxuICBnZXREaWZmZXJlbnRGcm9tKCkge1xuICAgIHJldHVybiBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlmZmVyZW50RnJvbVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRTYW1lQXMoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjc2FtZUFzXCJdKTtcbiAgfVxuXG4gIGdldEluZGl2aWR1YWxUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmRmVHlwZXM6IGFueSA9IHRoaXMuZ2V0UmRmVHlwZXMoKTtcblxuICAgIGlmICghcmRmVHlwZXMgfHwgIUFycmF5LmlzQXJyYXkocmRmVHlwZXMpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJkZlR5cGVzLmZpbHRlcihcbiAgICAgICh0OiBhbnkpID0+XG4gICAgICAgIHQgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjTmFtZWRJbmRpdmlkdWFsXCIgJiZcbiAgICAgICAgKCEodHlwZW9mIHQgPT09IFwic3RyaW5nXCIpIHx8XG4gICAgICAgICAgIXQuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikpXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IE9udG9sb2d5IH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IE9MUzNUaGluZyB9IGZyb20gXCIuL09MUzNUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5LCBkZUNhbWVsQ2FzZSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgVGhpbmdUeXBlTmFtZSB9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY2xhc3MgT0xTM09udG9sb2d5IGV4dGVuZHMgT0xTM1RoaW5nIGltcGxlbWVudHMgT250b2xvZ3kge1xuICBnZXRUeXBlKCk6IFRoaW5nVHlwZU5hbWUge1xuICAgIHJldHVybiBcIm9udG9sb2d5XCI7XG4gIH1cblxuICBnZXRUeXBlUGx1cmFsKCk6XG4gICAgfCBcIm9udG9sb2dpZXNcIlxuICAgIHwgXCJjbGFzc2VzXCJcbiAgICB8IFwidGVybXNcIlxuICAgIHwgXCJwcm9wZXJ0aWVzXCJcbiAgICB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgcmV0dXJuIFwib250b2xvZ2llc1wiO1xuICB9XG5cbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neUlkXCJdO1xuICB9XG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBuYW1lcyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcInRpdGxlXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAobmFtZXNbMF0gJiYgbmFtZXNbMF0udmFsdWUpIHx8IHRoaXMuZ2V0T250b2xvZ3lJZCgpO1xuICB9XG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb25zID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiZGVzY3JpcHRpb25cIl0gfHwgXCJcIlxuICAgICk7XG4gICAgcmV0dXJuIChkZXNjcmlwdGlvbnNbMF0gJiYgZGVzY3JpcHRpb25zWzBdLnZhbHVlKSB8fCBcIlwiO1xuICB9XG5cbiAgZ2V0Q3JlYXRvcnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdW1wiY3JlYXRvclwiXSk7XG4gIH1cblxuICBnZXRTb3VyY2VGaWxlVGltZXN0YW1wKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInVwZGF0ZWRcIl07XG4gIH1cbiAgZ2V0TnVtRW50aXRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZFbnRpdGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtQ2xhc3NlcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlRlcm1zXCJdKTtcbiAgfVxuICBnZXROdW1Qcm9wZXJ0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mUHJvcGVydGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtSW5kaXZpZHVhbHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZJbmRpdmlkdWFsc1wiXSk7XG4gIH1cbiAgZ2V0TG9nb1VSTCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJsb2dvXCJdIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIHVzZWQgYXMgSVJJXG4gIGdldE9udG9sb2d5UHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJmaWxlTG9jYXRpb25cIl07XG4gIH1cblxuICBnZXRIb21lcGFnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJob21lcGFnZVwiXTtcbiAgfVxuICBnZXRNYWlsaW5nTGlzdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJtYWlsaW5nTGlzdFwiXTtcbiAgfVxuICBnZXRUcmFja2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcInRyYWNrZXJcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbklyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ2ZXJzaW9uSXJpXCJdO1xuICB9XG4gIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1widmVyc2lvblwiXTtcbiAgfVxuICBnZXRWZXJzaW9uRnJvbUlyaSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlcnNpb25JcmkgPSB0aGlzLmdldFZlcnNpb25JcmkoKTtcbiAgICBpZiAoIXZlcnNpb25JcmkpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHZlcnNpb25Gcm9tRGF0ZSA9IHZlcnNpb25JcmkubWF0Y2goL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Lyk7XG5cbiAgICBpZiAodmVyc2lvbkZyb21EYXRlICYmIHZlcnNpb25Gcm9tRGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21EYXRlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2ZXJzaW9uRnJvbU51bWJlciA9IHZlcnNpb25JcmkubWF0Y2goL1xcL3ZbZC5dLipcXC8vKTtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbU51bWJlclxuICAgICAgICA/IHZlcnNpb25Gcm9tTnVtYmVyWzBdLnJlcGxhY2VBbGwoXCIvXCIsIFwiXCIpLnJlcGxhY2UoXCJ2XCIsIFwiXCIpXG4gICAgICAgIDogXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0TG9hZGVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxvYWRlZFwiXTtcbiAgfVxuXG4gIC8qKiBDYW4gYmUganVzdCBmb3VuZCB1bmRlciBgcHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdYC5cbiAgICogIE5vdCBwcmVzZW50IGluIG9sczQvYXBpLFxuICAgKiAgYnV0IGluIHNlbWFudGljbG9va3VwLnpibWVkLmRlL2FwaS5cbiAgICovXG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdICYmIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdKSB7XG4gICAgICAvKiBvbHM0IGV4Y2x1ZGVzIFwiaGFzIHByZWZlcnJlZCByb290IHRlcm1cIixcbiAgICAgICBwcm9wZXJ0aWVzIHdpdGhvdXQgYW4gSVJJIGFuZCBhbnl0aGluZyBpbiByZGYsIHJkZnMgYW5kIG93bCBuYW1lc3BhY2VzLFxuICAgICAgIGJ1dCB0aGlzIGlzIG5vdCBwb3NzaWJsZSBoZXJlIGFzIHRoZSBsYWJlbHMgYXJlIGtleXMgaGVyZSwgbm90IHRoZSBJUkkncyAqL1xuICAgICAgcmV0dXJuIGFzQXJyYXk8c3RyaW5nPihcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYW5ub3RhdGlvbnNcIl0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBcImFubm90YXRpb25zXCIga2V5IGlzIG5vdCBwcmVzZW50IGluIG9sczQvYXBpXG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgZ2V0QW5ub3RhdGlvblRpdGxlQnlJZChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGVDYW1lbENhc2UoaWQpO1xuICB9XG5cbiAgZ2V0QW5ub3RhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbihcbiAgICAgIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYW5ub3RhdGlvbnNcIl1baWRdKS5maWx0ZXIoKGVsZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBlbGVtICE9PSBcInN0cmluZ1wiIHx8IGVsZW0gIT09IFwiXCI7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRQcmVmZXJyZWRSb290cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaGFzUHJlZmVycmVkUm9vdFwiXSk7XG4gIH1cblxuICBnZXRQcmVmZXJyZWRQcmVmaXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wicHJlZmVycmVkUHJlZml4XCJdO1xuICB9XG5cbiAgZ2V0TGFuZ3VhZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICAvLyBub3QgYXZhaWxhYmxlIGluIHNlbWxvb2twIEFQSSwgYnV0IGluIGViaSBBUElcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJsYW5nXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBhdmFpbGFibGU/XG4gIGdldEltcG9ydHNGcm9tKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXZhaWxhYmxlP1xuICBnZXRFeHBvcnRzVG8oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImV4cG9ydHNUb1wiXSk7XG4gIH1cbiAgZ2V0QWxsb3dEb3dubG9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYWxsb3dEb3dubG9hZFwiXTtcbiAgfVxuXG4gIGdldExpY2Vuc2UoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJhbm5vdGF0aW9uc1wiXVtcImxpY2Vuc2VcIl07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBPbnRvbG9naWVzIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IE9MUzNPbnRvbG9neSB9IGZyb20gXCIuL09MUzNPbnRvbG9neVwiO1xuXG5leHBvcnQgY2xhc3MgT0xTM09udG9sb2dpZXMgaW1wbGVtZW50cyBPbnRvbG9naWVzIHtcbiAgcHJvcGVydGllczogT0xTM09udG9sb2d5W107XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogT0xTM09udG9sb2d5W10pIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0VG90YWxPbnRvbG9naWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5sZW5ndGg7XG4gIH1cblxuICBnZXROdW1FbnRpdGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgKHRvdGFsLCBvbnRvbG9neSkgPT4gdG90YWwgKyBvbnRvbG9neS5nZXROdW1FbnRpdGllcygpLFxuICAgICAgMFxuICAgICk7XG4gIH1cblxuICBnZXROdW1DbGFzc2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bUNsYXNzZXMoKSxcbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgZ2V0TnVtUHJvcGVydGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgKHRvdGFsLCBvbnRvbG9neSkgPT4gdG90YWwgKyBvbnRvbG9neS5nZXROdW1Qcm9wZXJ0aWVzKCksXG4gICAgICAwXG4gICAgKTtcbiAgfVxuXG4gIGdldE51bUluZGl2aWR1YWxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bUluZGl2aWR1YWxzKCksXG4gICAgICAwXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcblxuaW1wb3J0IExpbmtlZEVudGl0aWVzIGZyb20gXCIuLi9MaW5rZWRFbnRpdGllc1wiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgaXNUaGluZ1R5cGVOYW1lLCBUaGluZ1R5cGVOYW1lIH0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPTFM0VGhpbmcgaW1wbGVtZW50cyBUaGluZyB7XG4gIHByb3BlcnRpZXM6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBhbnkpIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0TGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdKVswXS52YWx1ZTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIGN1cmllIC8gb2JvX2lkIG1lYW50P1xuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpZFwiXTtcbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRUeXBlKCk6IFRoaW5nVHlwZU5hbWUge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5wcm9wZXJ0aWVzW1widHlwZVwiXSBhcyBzdHJpbmdbXTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKGlzVGhpbmdUeXBlTmFtZSh0eXBlKSkge1xuICAgICAgICByZXR1cm4gdHlwZSBhcyBhbnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOlxuICAgIHwgXCJvbnRvbG9naWVzXCJcbiAgICB8IFwiY2xhc3Nlc1wiXG4gICAgfCBcInByb3BlcnRpZXNcIlxuICAgIHwgXCJpbmRpdmlkdWFsc1wiXG4gICAgfCBcInRlcm1zXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIm9udG9sb2d5XCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgIGNhc2UgXCJhbm5vdGF0aW9uUHJvcGVydHlcIjpcbiAgICAgIGNhc2UgXCJkYXRhUHJvcGVydHlcIjpcbiAgICAgIGNhc2UgXCJvYmplY3RQcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldFJkZlR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlXCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXROYW1lcygpWzBdO1xuICB9XG5cbiAgZ2V0TmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhYmVscyA9IFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXSk7XG4gICAgaWYgKGxhYmVscyAmJiBsYWJlbHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGxhYmVscy5tYXAoKGxhYmVsKSA9PiBsYWJlbC52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBbdGhpcy5nZXRJcmkoKV07XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSk7XG4gICAgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZGVmaW5pdGlvbi5tYXAoKGRlZikgPT4gZGVmLnZhbHVlIHx8IFwiXCIpLmpvaW4oXCIgXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lJZFwiXTtcbiAgfVxuXG4gIGdldExhYmVsRm9ySXJpKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsaW5rZWRFbnRpdGllcyA9IHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdO1xuICAgIGlmIChsaW5rZWRFbnRpdGllcykge1xuICAgICAgY29uc3QgbGFiZWw6IFJlaWZpZWQ8c3RyaW5nPltdID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgICBsaW5rZWRFbnRpdGllc1tpZF0/LmxhYmVsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGxhYmVsWzBdPy52YWx1ZSB8fCBpZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdO1xuXG4gIGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb24oYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbaWRdKSk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExhYmVsRm9ySXJpKGlkKTtcbiAgfVxuXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxuXG4gIGdldERlcGljdGlvblVybCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGlvblwiXSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuIiwgImltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBPTFM0VGhpbmcgfSBmcm9tIFwiLi9PTFM0VGhpbmdcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgT0xTNEVudGl0eSBleHRlbmRzIE9MUzRUaGluZyBpbXBsZW1lbnRzIEVudGl0eSB7XG4gIGFic3RyYWN0IGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuXG4gIGlzQ2Fub25pY2FsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpc0RlZmluaW5nT250b2xvZ3lcIl07XG4gIH1cblxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl07XG4gIH1cblxuICBnZXREZXByZWNhdGlvblZlcnNpb24oKTogc3RyaW5nIHtcbiAgICAvLyBvbmx5IHN1cHBvcnRzIEVGTyBmb3Igbm93XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cuZWJpLmFjLnVrL2Vmby9vYnNvbGV0ZWRfaW5fdmVyc2lvblwiXTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uUmVhc29uKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMDAwMjMxXCJdXG4gICAgKS5jb25jYXQoXG4gICAgICBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cuZWJpLmFjLnVrL2Vmby9yZWFzb25fZm9yX29ic29sZXNjZW5jZVwiXVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBnZXREZXByZWNhdGlvblJlcGxhY2VtZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDEwMDAwMVwiXTtcbiAgfVxuXG4gIGdldFJlbGF0ZWRGcm9tKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInJlbGF0ZWRGcm9tXCJdKTtcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uQXNBcnJheSgpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uXCJdKTtcbiAgfVxuXG4gIGhhc0RpcmVjdENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNEaXJlY3RDaGlsZHJlblwiXTtcbiAgfVxuXG4gIGhhc0hpZXJhcmNoaWNhbENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNIaWVyYXJjaGljYWxDaGlsZHJlblwiXTtcbiAgfVxuXG4gIGhhc0NoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0RpcmVjdENoaWxkcmVuKCkgfHwgdGhpcy5oYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpO1xuICB9XG5cbiAgZ2V0QW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJhbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRIaWVyYXJjaGljYWxBbmNlc3RvcklyaXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbEFuY2VzdG9yXCJdKTtcbiAgfVxuXG4gIGdldFN5bm9ueW1zKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wic3lub255bVwiXSk7XG4gIH1cblxuICBnZXRBcHBlYXJzSW4oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiYXBwZWFyc0luXCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldENyb3NzUmVmZXJlbmNlcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXG4gICAgICBcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2hhc0RiWHJlZlwiXG4gICAgXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXREZWZpbmVkQnkoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5lZEJ5XCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldElzRGVmaW5pbmdPbnRvbG9neSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImlzX2RlZmluaW5nX29udG9sb2d5XCJdIHx8IHVuZGVmaW5lZCkgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjdXJpZVwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydEZvcm1cIl07XG4gIH1cblxuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFtcbiAgICAgIC4uLmFzQXJyYXkoXG4gICAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIl0gfHwgW11cbiAgICAgICksXG4gICAgICAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdIHx8IFtdKSxcbiAgICBdKTtcbiAgfVxuXG4gIGlzUHJlZGljYXRlRnJvbUluZm9ybWFsVm9jYWJ1bGFyeShwcmVkaWNhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDIvc2tvcy9jb3JlI1wiKSB8fFxuICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvXCIpIHx8XG4gICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvXCIpIHx8XG4gICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9zY2hlbWEub3JnL1wiKVxuICAgICk7XG4gIH1cbiAgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRlZmluaXRpb25Qcm9wZXJ0aWVzID0gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uUHJvcGVydHlcIl0pO1xuICAgIGNvbnN0IHN5bm9ueW1Qcm9wZXJ0aWVzID0gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJzeW5vbnltUHJvcGVydHlcIl0pO1xuICAgIGNvbnN0IGhpZXJhcmNoaWNhbFByb3BlcnRpZXMgPSBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsUHJvcGVydHlcIl1cbiAgICApO1xuICAgIGNvbnN0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChjb25zdCBwcmVkaWNhdGUgb2YgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKSkge1xuICAgICAgLy8gcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhcmUgdGhpbmdzIHRoYXQgd2VyZSBhZGRlZCBieSByZGYyanNvbiBzbyBzaG91bGQgbm90XG4gICAgICAvLyBiZSBpbmNsdWRlZCBhcyBhbm5vdGF0aW9uc1xuICAgICAgaWYgKHByZWRpY2F0ZS5pbmRleE9mKFwiOi8vXCIpID09PSAtMSkgY29udGludWU7XG5cbiAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBleHBsaWNpdGx5IGluIEVudGl0eVBhZ2VcbiAgICAgIGlmIChwcmVkaWNhdGUuc3RhcnRzV2l0aChcIm5lZ2F0aXZlUHJvcGVydHlBc3NlcnRpb24rXCIpKSBjb250aW51ZTtcblxuICAgICAgLy8gdGhpcyBpcyBoYW5kbGVkIGV4cGxpY2l0bHkgaW4gRW50aXR5UGFnZVxuICAgICAgaWYgKHByZWRpY2F0ZSA9PT0gXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGVkX2J5XCIpIGNvbnRpbnVlO1xuICAgICAgaWYgKHByZWRpY2F0ZSA9PT0gXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGlvblwiKSBjb250aW51ZTtcblxuICAgICAgLy8gT2JqZWN0IHByb3BlcnRpZXMgYW5kIGRhdGEgcHJvcGVydGllcyBhcmUgbm90IGFubm90YXRpb24gcHJvcGVydGllcywgZXhjZXB0IGluIHRoZSBjYXNlIG9mIGluZm9ybWFsIHZvY2FidWxhcmllcy5cbiAgICAgIGlmICghdGhpcy5pc1ByZWRpY2F0ZUZyb21JbmZvcm1hbFZvY2FidWxhcnkocHJlZGljYXRlKSkge1xuICAgICAgICBjb25zdCBsaW5rZWRFbnRpdHkgPSB0aGlzLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KHByZWRpY2F0ZSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBsaW5rZWRFbnRpdHkgIT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgbGlua2VkRW50aXR5LnR5cGUuaW5kZXhPZihcIm9iamVjdFByb3BlcnR5XCIpICE9PSAtMVxuICAgICAgICApXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBsaW5rZWRFbnRpdHkgIT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgbGlua2VkRW50aXR5LnR5cGUuaW5kZXhPZihcImRhdGFQcm9wZXJ0eVwiKSAhPT0gLTFcbiAgICAgICAgKVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgdmFsdWUgd2FzIGFscmVhZHkgaW50ZXJwcmV0ZWQgYXMgZGVmaW5pdGlvbi9zeW5vbnltL2hpZXJhcmNoaWNhbCwgZG9cbiAgICAgIC8vIG5vdCBpbmNsdWRlIGl0IGFzIGFuIGFubm90YXRpb25cbiAgICAgIGlmIChcbiAgICAgICAgZGVmaW5pdGlvblByb3BlcnRpZXMuaW5kZXhPZihwcmVkaWNhdGUpICE9PSAtMSB8fFxuICAgICAgICBzeW5vbnltUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xIHx8XG4gICAgICAgIGhpZXJhcmNoaWNhbFByb3BlcnRpZXMuaW5kZXhPZihwcmVkaWNhdGUpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhbnl0aGluZyBpbiB0aGUgcmRmLCByZGZzLCBvd2wgbmFtZXNwYWNlcyBhcmVuJ3QgZGlzcGxheWVkIGluIHRoZSBhbm5vdGF0aW9ucyBzZWN0aW9uLi4uXG4gICAgICBpZiAoXG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNcIilcbiAgICAgICkge1xuICAgICAgICAvLyAuLi5hcGFydCBmcm9tIHRoZXNlIG9uZXNcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjY29tbWVudFwiICYmXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzZWVBbHNvXCIgJiZcbiAgICAgICAgICAvLyBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzS2V5XCIgJiZcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlzam9pbnRVbmlvbk9mXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gd2hpbGUgaW4gZ2VuZXJhbCBvYm9Jbk93bCBuYW1lc3BhY2UgcHJvcGVydGllcyBhcmUgYW5ub3RhdGlvbnMsIHNvbWVcbiAgICAgIC8vIG9mIHRoZW0gd2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5XG4gICAgICAvL1xuICAgICAgaWYgKFxuICAgICAgICBwcmVkaWNhdGUgPT09IFwiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaW5TdWJzZXRcIiB8fFxuICAgICAgICBwcmVkaWNhdGUgPT09IFwiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaWRcIlxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBhbm5vdGF0aW9uUHJlZGljYXRlcy5hZGQocHJlZGljYXRlKTtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZyhcIkFQc1wiKTtcbiAgICAvLyBjb25zb2xlLmRpcihBcnJheS5mcm9tKGFubm90YXRpb25QcmVkaWNhdGVzKSk7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXROdW1IaWVyYXJjaGljYWxEZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1IaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1IaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIGdldE51bURlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bURpcmVjdERlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bURpcmVjdERlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgZ2V0SGllcmFyY2hpY2FsUGFyZW50UmVpZmljYXRpb25BeGlvbXMocGFyZW50SXJpOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IGhpZXJhcmNoaWNhbFBhcmVudHMgPSBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQYXJlbnRcIl1cbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBwIG9mIGhpZXJhcmNoaWNhbFBhcmVudHMpIHtcbiAgICAgIGlmIChwLnZhbHVlID09PSBwYXJlbnRJcmkpIHtcbiAgICAgICAgcmV0dXJuIHAuZ2V0TWV0YWRhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBDbGFzcyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBPTFM0RW50aXR5IH0gZnJvbSBcIi4vT0xTNEVudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0Q2xhc3MgZXh0ZW5kcyBPTFM0RW50aXR5IGltcGxlbWVudHMgQ2xhc3Mge1xuICBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXSk7XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRDbGFzc1wiXVxuICAgICk7XG4gIH1cblxuICBnZXREaXNqb2ludFdpdGgoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFdpdGhcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0SGFzS2V5KCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2hhc0tleVwiXSk7XG4gIH1cblxuICBnZXRTdWJzZXRzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXNBcnJheShcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaW5TdWJzZXRcIl1cbiAgICAgICkgfHwgW11cbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgUHJvcGVydHkgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgT0xTNEVudGl0eSB9IGZyb20gXCIuL09MUzRFbnRpdHlcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTNFByb3BlcnR5IGV4dGVuZHMgT0xTNEVudGl0eSBpbXBsZW1lbnRzIFByb3BlcnR5IHtcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudFByb3BlcnR5XCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3Byb3BlcnR5RGlzam9pbnRXaXRoXCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldEludmVyc2VPZigpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNpbnZlcnNlT2ZcIl0pO1xuICB9XG5cbiAgZ2V0RG9tYWluKCkge1xuICAgIHJldHVybiBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI2RvbWFpblwiXVxuICAgICk7XG4gIH1cblxuICBnZXRSYW5nZSgpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNyYW5nZVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUNoYWlucygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3Byb3BlcnR5Q2hhaW5BeGlvbVwiXVxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBJbmRpdmlkdWFsIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IE9MUzRFbnRpdHkgfSBmcm9tIFwiLi9PTFM0RW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzRJbmRpdmlkdWFsIGV4dGVuZHMgT0xTNEVudGl0eSBpbXBsZW1lbnRzIEluZGl2aWR1YWwge1xuICBnZXRQYXJlbnRzKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGlyZWN0UGFyZW50XCJdKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihbXSk7XG4gIH1cblxuICBnZXREaWZmZXJlbnRGcm9tKCkge1xuICAgIHJldHVybiBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlmZmVyZW50RnJvbVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRTYW1lQXMoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjc2FtZUFzXCJdKTtcbiAgfVxuXG4gIGdldEluZGl2aWR1YWxUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmRmVHlwZXM6IGFueSA9IHRoaXMuZ2V0UmRmVHlwZXMoKTtcblxuICAgIGlmICghcmRmVHlwZXMgfHwgIUFycmF5LmlzQXJyYXkocmRmVHlwZXMpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJkZlR5cGVzLmZpbHRlcihcbiAgICAgICh0OiBhbnkpID0+XG4gICAgICAgIHQgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjTmFtZWRJbmRpdmlkdWFsXCIgJiZcbiAgICAgICAgKCEodHlwZW9mIHQgPT09IFwic3RyaW5nXCIpIHx8XG4gICAgICAgICAgIXQuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikpXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IE9udG9sb2d5IH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IE9MUzRUaGluZyB9IGZyb20gXCIuL09MUzRUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0T250b2xvZ3kgZXh0ZW5kcyBPTFM0VGhpbmcgaW1wbGVtZW50cyBPbnRvbG9neSB7XG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lJZFwiXTtcbiAgfVxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbmFtZXMgPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJ0aXRsZVwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKG5hbWVzWzBdICYmIG5hbWVzWzBdLnZhbHVlKSB8fCB0aGlzLmdldE9udG9sb2d5SWQoKTtcbiAgfVxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9ucyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdIHx8IHRoaXMucHJvcGVydGllc1tcImRlZmluaXRpb25cIl0gfHwgXCJcIlxuICAgICk7XG4gICAgcmV0dXJuIChkZXNjcmlwdGlvbnNbMF0gJiYgZGVzY3JpcHRpb25zWzBdLnZhbHVlKSB8fCBcIlwiO1xuICB9XG5cbiAgZ2V0Q3JlYXRvcnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvY3JlYXRvclwiXSk7XG4gIH1cblxuICBnZXRTb3VyY2VGaWxlVGltZXN0YW1wKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInNvdXJjZUZpbGVUaW1lc3RhbXBcIl07XG4gIH1cbiAgZ2V0TnVtRW50aXRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZFbnRpdGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtQ2xhc3NlcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZkNsYXNzZXNcIl0pO1xuICB9XG4gIGdldE51bVByb3BlcnRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZQcm9wZXJ0aWVzXCJdKTtcbiAgfVxuICBnZXROdW1JbmRpdmlkdWFscygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZkluZGl2aWR1YWxzXCJdKTtcbiAgfVxuICBnZXRMb2dvVVJMKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImRlcGljdGVkX2J5XCJdO1xuICB9XG4gIGdldE9udG9sb2d5UHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neV9wdXJsXCJdO1xuICB9XG4gIGdldEhvbWVwYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhvbWVwYWdlXCJdO1xuICB9XG4gIGdldE1haWxpbmdMaXN0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm1haWxpbmdfbGlzdFwiXTtcbiAgfVxuICBnZXRUcmFja2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInRyYWNrZXJcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbklyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN2ZXJzaW9uSVJJXCJdO1xuICB9XG4gIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdmVyc2lvbkluZm9cIl07XG4gIH1cbiAgZ2V0VmVyc2lvbkZyb21JcmkoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2ZXJzaW9uSXJpID0gdGhpcy5nZXRWZXJzaW9uSXJpKCk7XG4gICAgaWYgKCF2ZXJzaW9uSXJpKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCB2ZXJzaW9uRnJvbURhdGUgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXGR7NH0tXFxkezJ9LVxcZHsyfS8pO1xuXG4gICAgaWYgKHZlcnNpb25Gcm9tRGF0ZSAmJiB2ZXJzaW9uRnJvbURhdGUubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHZlcnNpb25Gcm9tRGF0ZVswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmVyc2lvbkZyb21OdW1iZXIgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXC92W2QuXS4qXFwvLyk7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21OdW1iZXJcbiAgICAgICAgPyB2ZXJzaW9uRnJvbU51bWJlclswXS5yZXBsYWNlQWxsKFwiL1wiLCBcIlwiKS5yZXBsYWNlKFwidlwiLCBcIlwiKVxuICAgICAgICA6IFwiXCI7XG4gICAgfVxuICB9XG4gIGdldExvYWRlZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsb2FkZWRcIl07XG4gIH1cbiAgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChjb25zdCBwcmVkaWNhdGUgb2YgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKSkge1xuICAgICAgLy8gcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhcmUgdGhpbmdzIHRoYXQgd2VyZSBhZGRlZCBieSByZGYyanNvbiBzbyBzaG91bGQgbm90XG4gICAgICAvLyBiZSBpbmNsdWRlZCBhcyBhbm5vdGF0aW9uc1xuICAgICAgaWYgKHByZWRpY2F0ZS5pbmRleE9mKFwiOi8vXCIpID09PSAtMSkgY29udGludWU7XG5cbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMDAwNzAwXCIpIHtcbiAgICAgICAgLy8gXCJoYXMgcHJlZmVycmVkIHJvb3QgdGVybVwiXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhbnl0aGluZyBpbiB0aGUgcmRmLCByZGZzLCBvd2wgbmFtZXNwYWNlcyBhcmVuJ3QgY29uc2lkZXJlZCBhbm5vdGF0aW9uc1xuICAgICAgaWYgKFxuICAgICAgICAhKFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSB8fFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjXCIpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBhbm5vdGF0aW9uUHJlZGljYXRlcy5hZGQocHJlZGljYXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykgYXMgc3RyaW5nW107XG4gIH1cbiAgZ2V0UHJlZmVycmVkUm9vdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhhc1ByZWZlcnJlZFJvb3RcIl0pO1xuICB9XG4gIGdldFByZWZlcnJlZFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJwcmVmZXJyZWRQcmVmaXhcIl07XG4gIH1cblxuICBnZXRMYW5ndWFnZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImxhbmd1YWdlXCJdKTtcbiAgfVxuICBnZXRJbXBvcnRzRnJvbSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaW1wb3J0c0Zyb21cIl0pO1xuICB9XG4gIGdldEV4cG9ydHNUbygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiZXhwb3J0c1RvXCJdKTtcbiAgfVxuICBnZXRMaWNlbnNlKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibGljZW5zZVwiXTtcbiAgfVxuICBnZXRBbGxvd0Rvd25sb2FkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbGxvd0Rvd25sb2FkXCJdO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgT250b2xvZ2llcyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBPTFM0T250b2xvZ3kgfSBmcm9tIFwiLi9PTFM0T250b2xvZ3lcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzRPbnRvbG9naWVzIGltcGxlbWVudHMgT250b2xvZ2llcyB7XG4gIHByb3BlcnRpZXM6IE9MUzRPbnRvbG9neVtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IE9MUzRPbnRvbG9neVtdKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldFRvdGFsT250b2xvZ2llcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0TnVtRW50aXRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZShcbiAgICAgICh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtRW50aXRpZXMoKSxcbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgZ2V0TnVtQ2xhc3NlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgKHRvdGFsLCBvbnRvbG9neSkgPT4gdG90YWwgKyBvbnRvbG9neS5nZXROdW1DbGFzc2VzKCksXG4gICAgICAwXG4gICAgKTtcbiAgfVxuXG4gIGdldE51bVByb3BlcnRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZShcbiAgICAgICh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtUHJvcGVydGllcygpLFxuICAgICAgMFxuICAgICk7XG4gIH1cblxuICBnZXROdW1JbmRpdmlkdWFscygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgKHRvdGFsLCBvbnRvbG9neSkgPT4gdG90YWwgKyBvbnRvbG9neS5nZXROdW1JbmRpdmlkdWFscygpLFxuICAgICAgMFxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBPTFMzT250b2xvZ3ksXG4gIE9MUzNDbGFzcyxcbiAgT0xTM1Byb3BlcnR5LFxuICBPTFMzSW5kaXZpZHVhbCxcbn0gZnJvbSBcIi4vb2xzMy1tb2RlbFwiO1xuaW1wb3J0IHtcbiAgT0xTNE9udG9sb2d5LFxuICBPTFM0Q2xhc3MsXG4gIE9MUzRQcm9wZXJ0eSxcbiAgT0xTNEluZGl2aWR1YWwsXG59IGZyb20gXCIuL29sczQtbW9kZWxcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgVGhpbmdUeXBlTmFtZSB9IGZyb20gXCIuL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBhc0FycmF5LCBpbmZlclR5cGVGcm9tVHlwZUFycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbE9iamVjdChyZXNwb25zZTogYW55KSB7XG4gIGxldCB1c2VMZWdhY3k6IGJvb2xlYW47XG4gIGlmIChcbiAgICByZXNwb25zZVtcIl9lbWJlZGRlZFwiXSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgcmVzcG9uc2VbXCJudW1iZXJPZlRlcm1zXCJdICE9PSB1bmRlZmluZWRcbiAgKVxuICAgIHVzZUxlZ2FjeSA9IHRydWU7XG4gIGVsc2UgaWYgKFxuICAgIHJlc3BvbnNlW1wiZWxlbWVudHNcIl0gIT09IHVuZGVmaW5lZCB8fFxuICAgIHJlc3BvbnNlW1wibnVtYmVyT2ZDbGFzc2VzXCJdICE9PSB1bmRlZmluZWRcbiAgKVxuICAgIHVzZUxlZ2FjeSA9IGZhbHNlO1xuICBlbHNlXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBgUmVzcG9uc2Ugc3RydWN0dXJlIGRvZXMgbm90IGNvcnJlbGF0ZSB0byBhbnkgb2YgdGhlIGZlYXR1cmVkIHJlc3BvbnNlIHN0cnVjdHVyZXM6IFxcbiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICByZXNwb25zZVxuICAgICAgKX1gXG4gICAgKTtcblxuICBsZXQgZW50aXR5VHlwZTogVGhpbmdUeXBlTmFtZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgaWYgKHVzZUxlZ2FjeSkge1xuICAgIGlmIChyZXNwb25zZVtcIl9lbWJlZGRlZFwiXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbnRpdHlUeXBlID0gXCJvbnRvbG9neVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJ0ZXJtc1wiXSAhPT0gdW5kZWZpbmVkKSBlbnRpdHlUeXBlID0gXCJ0ZXJtXCI7XG4gICAgICBlbHNlIGlmIChyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcInByb3BlcnRpZXNcIl0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgZW50aXR5VHlwZSA9IFwicHJvcGVydHlcIjtcbiAgICAgIGVsc2UgaWYgKHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wiaW5kaXZpZHVhbHNcIl0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgZW50aXR5VHlwZSA9IFwiaW5kaXZpZHVhbFwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAocmVzcG9uc2VbXCJlbGVtZW50c1wiXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbnRpdHlUeXBlID0gXCJvbnRvbG9neVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVzcG9uc2VbXCJlbGVtZW50c1wiXVswXSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcihcIkVtcHR5IHJlc3BvbnNlLlwiKTtcblxuICAgICAgZW50aXR5VHlwZSA9IGluZmVyVHlwZUZyb21UeXBlQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXVswXVtcInR5cGVcIl0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlbnRpdHlUeXBlID09PSB1bmRlZmluZWQpXG4gICAgdGhyb3cgRXJyb3IoXCJFbnRpdHkgdHlwZSBjb3VsZCBub3QgYmUgY29ycmVjdGx5IGluZmVycmVkLlwiKTtcblxuICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3RXaXRoRW50aXR5VHlwZVdpdGhVc2VMZWdhY3koXG4gICAgcmVzcG9uc2UsXG4gICAgZW50aXR5VHlwZSxcbiAgICB1c2VMZWdhY3lcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTW9kZWxPYmplY3RXaXRoRW50aXR5VHlwZVdpdGhVc2VMZWdhY3koXG4gIHJlc3BvbnNlOiBhbnksXG4gIGVudGl0eVR5cGU6IHN0cmluZyxcbiAgdXNlTGVnYWN5OiBib29sZWFuXG4pOiBUaGluZyB7XG4gIHN3aXRjaCAoZW50aXR5VHlwZSkge1xuICAgIGNhc2UgXCJvbnRvbG9neVwiOlxuICAgICAgcmV0dXJuIHVzZUxlZ2FjeVxuICAgICAgICA/IG5ldyBPTFMzT250b2xvZ3kocmVzcG9uc2UpXG4gICAgICAgIDogbmV3IE9MUzRPbnRvbG9neShyZXNwb25zZSk7XG5cbiAgICBjYXNlIFwidGVybVwiOlxuICAgIGNhc2UgXCJjbGFzc1wiOiAvLyBhbGxvdyBCT1RILCBldmVuIGlmIGl0IHNob3VsZCBhY3R1YWxseSBiZSBcInRlcm1cIlxuICAgICAgcmV0dXJuIHVzZUxlZ2FjeVxuICAgICAgICA/IG5ldyBPTFMzQ2xhc3MoXG4gICAgICAgICAgICBnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oXG4gICAgICAgICAgICAgIGFzQXJyYXkocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJ0ZXJtc1wiXSksXG4gICAgICAgICAgICAgIHVzZUxlZ2FjeVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBuZXcgT0xTNENsYXNzKFxuICAgICAgICAgICAgZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSlcbiAgICAgICAgICApO1xuXG4gICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICByZXR1cm4gdXNlTGVnYWN5XG4gICAgICAgID8gbmV3IE9MUzNQcm9wZXJ0eShcbiAgICAgICAgICAgIGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihcbiAgICAgICAgICAgICAgYXNBcnJheShyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcInByb3BlcnRpZXNcIl0pLFxuICAgICAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbmV3IE9MUzRQcm9wZXJ0eShcbiAgICAgICAgICAgIGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiZWxlbWVudHNcIl0pLCB1c2VMZWdhY3kpXG4gICAgICAgICAgKTtcblxuICAgIGNhc2UgXCJpbmRpdmlkdWFsXCI6XG4gICAgICByZXR1cm4gdXNlTGVnYWN5XG4gICAgICAgID8gbmV3IE9MUzNJbmRpdmlkdWFsKFxuICAgICAgICAgICAgZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKFxuICAgICAgICAgICAgICBhc0FycmF5KHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wiaW5kaXZpZHVhbHNcIl0pLFxuICAgICAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbmV3IE9MUzRJbmRpdmlkdWFsKFxuICAgICAgICAgICAgZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSlcbiAgICAgICAgICApO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnSW52YWxpZCBlbnRpdHkgdHlwZSBcIicgK1xuICAgICAgICAgIGVudGl0eVR5cGUgK1xuICAgICAgICAgICdcIi4gTXVzdCBiZSBvbmUgb2Yge1widGVybVwiLCBcImNsYXNzXCIsIFwib250b2xvZ3lcIiwgXCJwcm9wZXJ0eVwiLCBcImluZGl2aWR1YWxcIn0nXG4gICAgICApO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgSlNPTiBvZiB0aGUgZW50aXR5IGluIGl0cyBkZWZpbmluZyBvbnRvbG9neSwgb3IsIGlmIG5vdCBhdmFpbGFibGUsIGp1c3QgdGhlIGZpcnN0IEpTT04gaW4gdGhlIGFycmF5LlxuICogSWYgb250b2xvZ3lJZCB3YXMgcHJvdmlkZWQgaW4gdGhlIHJlc3BvbnNlIHJlcXVlc3QsIHRoZSBhcnJheSBzaG91bGQgb25seSBjb250YWluIG9uZSBlbGVtZW50LCB0aHVzIHRoZSBmdW5jdGlvbmFsaXR5IGlzIGFzIGV4cGVjdGVkIGFzIHdlbGxcbiAqIEBwYXJhbSBlbnRpdHlBcnJheVJlc3BvbnNlIHRoZSBzdWItcmVzcG9uc2Ugb2YgdGhlIGluaXRpYWwgcXVlcnkgcmVzcG9uc2UgY29udGFpbmluZyBqdXN0IHRoZSBlbnRpdHkgYXJyYXlcbiAqIEBwYXJhbSB1c2VMZWdhY3kgYXBpIHZlcnNpb24gKG5lZWRlZCBiZWNhdXNlIGtleSBnaXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgZGVmaW5pbmcgb250b2xvZ3kgaGFzIGRpZmZlcmVudCBuYW1lcyBpbiBib3RoIHZlcnNpb25zKVxuICogQHBhcmFtIG9udG9sb2d5SWQgaWYgc3BlY2lmaWVkLCByZXR1cm5zIHRoZSBlbnRpdHkgaW4gdGhpcyBvbnRvbG9neSBpZiBhdmFpbGFibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihcbiAgZW50aXR5QXJyYXlSZXNwb25zZTogYW55W10sXG4gIHVzZUxlZ2FjeTogYm9vbGVhbixcbiAgb250b2xvZ3lJZD86IHN0cmluZ1xuKSB7XG4gIGlmIChvbnRvbG9neUlkKSB7XG4gICAgY29uc3QgZW50aXR5SW5PbnRvbG9neSA9IGFzQXJyYXkoZW50aXR5QXJyYXlSZXNwb25zZSkuZmlsdGVyKFxuICAgICAgKGVudGl0eSkgPT5cbiAgICAgICAgKHVzZUxlZ2FjeSA/IGVudGl0eVtcIm9udG9sb2d5X25hbWVcIl0gOiBlbnRpdHlbXCJvbnRvbG9neUlkXCJdKSA9PVxuICAgICAgICBvbnRvbG9neUlkXG4gICAgKTtcbiAgICBpZiAoZW50aXR5SW5PbnRvbG9neS5sZW5ndGggPiAwKSByZXR1cm4gZW50aXR5SW5PbnRvbG9neVswXTtcbiAgICBlbHNlXG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgSW52YWxpZCBvbnRvbG9neUlkICR7b250b2xvZ3lJZH0gZm9yIGdpdmVuIGVudGl0eUFycmF5UmVzcG9uc2UuYFxuICAgICAgKTtcbiAgfVxuXG4gIGNvbnN0IGRlZmluaW5nT250b2xvZ3lBcnIgPSBhc0FycmF5KGVudGl0eUFycmF5UmVzcG9uc2UpLmZpbHRlcigoZW50aXR5KSA9PlxuICAgIHVzZUxlZ2FjeSA/IGVudGl0eVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdIDogZW50aXR5W1wiaXNEZWZpbmluZ09udG9sb2d5XCJdXG4gICk7XG4gIGlmIChkZWZpbmluZ09udG9sb2d5QXJyLmxlbmd0aCA+IDApIHJldHVybiBkZWZpbmluZ09udG9sb2d5QXJyWzBdO1xuICBlbHNlIGlmIChlbnRpdHlBcnJheVJlc3BvbnNlLmxlbmd0aCA+IDApIHJldHVybiBlbnRpdHlBcnJheVJlc3BvbnNlWzBdO1xuICBlbHNlIHRocm93IEVycm9yKFwiRW1wdHkgcmVzcG9uc2UuXCIpO1xufVxuIiwgImltcG9ydCB7IEVudGl0eVR5cGVOYW1lIH0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBIaWVyYXJjaHlCdWlsZGVyIH0gZnJvbSBcIi4uLy4uL2FwaS9IaWVyYXJjaHlCdWlsZGVyXCI7XG5pbXBvcnQgeyBFbnRpdHlEYXRhIH0gZnJvbSBcIi4uLy4uL2FwcC90eXBlc1wiO1xuXG5leHBvcnQgdHlwZSBQYXJlbnRDaGlsZFJlbGF0aW9uID0ge1xuICBjaGlsZElyaTogc3RyaW5nO1xuICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY2xhc3MgVHJlZU5vZGUge1xuICBlbnRpdHlEYXRhOiBFbnRpdHlEYXRhO1xuICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ/OiBzdHJpbmc7XG4gIGxvYWRlZENoaWxkcmVuOiBUcmVlTm9kZVtdO1xuICBleHBhbmRlZDogYm9vbGVhbjtcbiAgbG9hZGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHBhcmFtIGVudGl0eURhdGFcbiAgICogQHBhcmFtIGNoaWxkUmVsYXRpb25Ub1BhcmVudFxuICAgKi9cbiAgY29uc3RydWN0b3IoZW50aXR5RGF0YTogRW50aXR5RGF0YSwgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nKSB7XG4gICAgdGhpcy5lbnRpdHlEYXRhID0gZW50aXR5RGF0YTtcbiAgICB0aGlzLmxvYWRlZENoaWxkcmVuID0gW107XG4gICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2hpbGRSZWxhdGlvblRvUGFyZW50ID0gY2hpbGRSZWxhdGlvblRvUGFyZW50O1xuICB9XG5cbiAgYWRkQ2hpbGQoY2hpbGQ6IFRyZWVOb2RlKSB7XG4gICAgdGhpcy5sb2FkZWRDaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgfVxufVxuXG5jb25zdCBERUZBVUxUX0lOQ0xVREVfT0JTT0xFVEVfRU5USVRJRVM6IGJvb2xlYW4gPSBmYWxzZSBhcyBjb25zdDtcbmNvbnN0IERFRkFVTFRfS0VFUF9FWFBBTlNJT05fU1RBVEU6IGJvb2xlYW4gPSB0cnVlIGFzIGNvbnN0O1xuXG5leHBvcnQgY2xhc3MgSGllcmFyY2h5IHtcbiAgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT47XG4gIGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YT47XG4gIGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz47XG4gIHJvb3RzOiBUcmVlTm9kZVtdOyAvLyBzdG9yZXMgdGhlIHRyZWUgaGllcmFyY2h5XG4gIHByb3RlY3RlZCBhcGk6IEhpZXJhcmNoeUJ1aWxkZXI7XG4gIG9udG9sb2d5SWQ6IHN0cmluZztcblxuICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogYm9vbGVhbiA9IERFRkFVTFRfSU5DTFVERV9PQlNPTEVURV9FTlRJVElFUztcbiAgZW50aXR5VHlwZT86IEVudGl0eVR5cGVOYW1lO1xuICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBib29sZWFuID0gREVGQVVMVF9LRUVQX0VYUEFOU0lPTl9TVEFURTtcbiAgcHJvdGVjdGVkIHVzZUxlZ2FjeT86IGJvb2xlYW47XG5cbiAgbWFpbkVudGl0eUlyaT86IHN0cmluZzsgLy8gdG8gaGlnaGxpZ2h0IGl0IGluIHRoZSBoaWVyYXJjaHlcblxuICBjb25zdHJ1Y3Rvcihwcm9wczoge1xuICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+O1xuICAgIGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YT47XG4gICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBTZXQ8c3RyaW5nPjtcbiAgICByb290czogVHJlZU5vZGVbXTtcbiAgICBhcGk6IEhpZXJhcmNoeUJ1aWxkZXI7XG4gICAgb250b2xvZ3lJZDogc3RyaW5nO1xuICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzPzogYm9vbGVhbjtcbiAgICBlbnRpdHlUeXBlPzogRW50aXR5VHlwZU5hbWU7XG4gICAgbWFpbkVudGl0eUlyaT86IHN0cmluZztcbiAgICBrZWVwRXhwYW5zaW9uU3RhdGVzPzogYm9vbGVhbjtcbiAgICB1c2VMZWdhY3k/OiBib29sZWFuO1xuICB9KSB7XG4gICAgY29uc3Qge1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMsXG4gICAgICBlbnRpdGllc0RhdGEsXG4gICAgICBhbGxDaGlsZHJlblByZXNlbnQsXG4gICAgICByb290cyxcbiAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAga2VlcEV4cGFuc2lvblN0YXRlcyxcbiAgICAgIGFwaSxcbiAgICAgIG1haW5FbnRpdHlJcmksXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIHVzZUxlZ2FjeSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zID0gcGFyZW50Q2hpbGRSZWxhdGlvbnM7XG4gICAgdGhpcy5lbnRpdGllc0RhdGEgPSBlbnRpdGllc0RhdGE7XG4gICAgdGhpcy5hbGxDaGlsZHJlblByZXNlbnQgPSBhbGxDaGlsZHJlblByZXNlbnQ7XG4gICAgdGhpcy5yb290cyA9IHJvb3RzO1xuICAgIGlmIChpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyAhPSB1bmRlZmluZWQpXG4gICAgICB0aGlzLmluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzID0gaW5jbHVkZU9ic29sZXRlRW50aXRpZXM7XG4gICAgaWYgKGtlZXBFeHBhbnNpb25TdGF0ZXMgIT0gdW5kZWZpbmVkKVxuICAgICAgdGhpcy5rZWVwRXhwYW5zaW9uU3RhdGVzID0ga2VlcEV4cGFuc2lvblN0YXRlcztcbiAgICB0aGlzLmFwaSA9IGFwaTtcbiAgICB0aGlzLm1haW5FbnRpdHlJcmkgPSBtYWluRW50aXR5SXJpO1xuICAgIHRoaXMuZW50aXR5VHlwZSA9IGVudGl0eVR5cGU7XG4gICAgdGhpcy5vbnRvbG9neUlkID0gb250b2xvZ3lJZDtcbiAgICBpZiAodXNlTGVnYWN5ICE9IHVuZGVmaW5lZCkgdGhpcy51c2VMZWdhY3kgPSB1c2VMZWdhY3k7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIHRoZSBlbnRyaWVzIG9mIGB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zKG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSlgIGludG8gYG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbmAuIEhlcmUsXG4gICAqIG9ubHkgbm90IGFscmVhZHkgcHJlc2VudCBjaGlsZHJlbiBhcmUgYWRkZWQgdG8ga2VlcCB0aGUgZXhwYW5zaW9uIHN0YXRlIG9mIHRoZSBhbHJlYWR5IGxvYWRlZCBjaGlsZHJlbi5cbiAgICogYG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbmAgaXMgc29ydGVkIGFscGhhYmV0aWNhbGx5IGJ5IGRpc3BsYXllZCBsYWJlbHMgYWZ0ZXJ3YXJkLlxuICAgKlxuICAgKiBBU1NVTVBUSU9OUzpcbiAgICogMS4gYHRoaXMucGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KG5vZGVUb0V4cGFuZClgIGlzIHNvcnRlZCBhbHBoYWJldGljYWxseSBieSBkaXNwbGF5ZWQgbGFiZWxzXG4gICAqXG4gICAqIEBwYXJhbSBub2RlVG9FeHBhbmQgdGhlIG5vZGUgaW5zaWRlIHRoZSBoaWVyYXJjaHkgKGB0aGlzLnJvb3RzYCkgdG8gbWVyZ2UgdGhlIGNoaWxkcmVuIGludG9cbiAgICovXG4gIHByaXZhdGUgbWVyZ2VDaGlsZHJlbkludG9Mb2FkZWRDaGlsZHJlbihub2RlVG9FeHBhbmQ6IFRyZWVOb2RlKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zLmdldChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpO1xuICAgIGlmIChjaGlsZHJlbiA9PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYHBhcmVudENoaWxkUmVsYXRpb25zIGhhcyBubyBlbnRyeSBmb3Iga2V5IFwiJHtub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcml9XCIgYWx0aG91Z2ggdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLmBcbiAgICAgICk7XG5cbiAgICBsZXQgaUxvYWRlZENoaWxkcmVuID0gMDtcbiAgICBjb25zdCBudW1Mb2FkZWRDaGlsZHJlbiA9IG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbi5sZW5ndGg7IC8vIGluaXRpYWwgbGVuZ3RoXG4gICAgbGV0IGlDaGlsZHJlbiA9IDA7XG5cbiAgICB3aGlsZSAoaUNoaWxkcmVuIDwgY2hpbGRyZW4ubGVuZ3RoICYmIGlMb2FkZWRDaGlsZHJlbiA8IG51bUxvYWRlZENoaWxkcmVuKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbltpTG9hZGVkQ2hpbGRyZW5dLmVudGl0eURhdGEuaXJpID09XG4gICAgICAgIGNoaWxkcmVuW2lDaGlsZHJlbl0uY2hpbGRJcmlcbiAgICAgICkge1xuICAgICAgICBpTG9hZGVkQ2hpbGRyZW4rKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgIG5vZGVUb0V4cGFuZC5hZGRDaGlsZChcbiAgICAgICAgICBuZXcgVHJlZU5vZGUoXG4gICAgICAgICAgICB0aGlzLmVudGl0aWVzRGF0YS5nZXQoY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZElyaSkhLFxuICAgICAgICAgICAgY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZFJlbGF0aW9uVG9QYXJlbnRcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpQ2hpbGRyZW4rKztcbiAgICB9XG4gICAgd2hpbGUgKGlDaGlsZHJlbiA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgIG5vZGVUb0V4cGFuZC5hZGRDaGlsZChcbiAgICAgICAgbmV3IFRyZWVOb2RlKFxuICAgICAgICAgIHRoaXMuZW50aXRpZXNEYXRhLmdldChjaGlsZHJlbltpQ2hpbGRyZW5dLmNoaWxkSXJpKSEsXG4gICAgICAgICAgY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZFJlbGF0aW9uVG9QYXJlbnRcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGlDaGlsZHJlbisrO1xuICAgIH1cblxuICAgIC8vIHNvcnQgYWxyZWFkeSBsb2FkZWQgY2hpbGRyZW4gaW4gY29ycmVjdGx5XG4gICAgZm9yIChcbiAgICAgIGxldCBpTG9hZGVkQ2hpbGRyZW4gPSBudW1Mb2FkZWRDaGlsZHJlbiAtIDE7XG4gICAgICBpTG9hZGVkQ2hpbGRyZW4gPj0gMDtcbiAgICAgIGlMb2FkZWRDaGlsZHJlbi0tXG4gICAgKSB7XG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgY3VycklkeCA9IGlMb2FkZWRDaGlsZHJlbiArIDE7XG4gICAgICAgIGN1cnJJZHggPCBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICBjdXJySWR4KytcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjdXJyTm9kZSA9IG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbltjdXJySWR4XTtcbiAgICAgICAgY29uc3QgcHJldk5vZGUgPSBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeCAtIDFdO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoY3Vyck5vZGUuZW50aXR5RGF0YS5sYWJlbCB8fCBjdXJyTm9kZS5lbnRpdHlEYXRhLmlyaSkubG9jYWxlQ29tcGFyZShcbiAgICAgICAgICAgIHByZXZOb2RlLmVudGl0eURhdGEubGFiZWwgfHwgcHJldk5vZGUuZW50aXR5RGF0YS5pcmlcbiAgICAgICAgICApIDwgMFxuICAgICAgICApIHtcbiAgICAgICAgICBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeF0gPSBwcmV2Tm9kZTtcbiAgICAgICAgICBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeCAtIDFdID0gY3Vyck5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbG9zZU5vZGUobm9kZVRvQ2xvc2U6IFRyZWVOb2RlKSB7XG4gICAgaWYgKCF0aGlzLmtlZXBFeHBhbnNpb25TdGF0ZXMpIHtcbiAgICAgIG5vZGVUb0Nsb3NlLmxvYWRlZENoaWxkcmVuID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbGwgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgZXhwYW5zaW9uIG9mIGBub2RlVG9FeHBhbmRgIGlzIGF2YWlsYWJsZSAoaS5lLiB0aGVyZSBhcmUgYWxyZWFkeSBjaGlsZHJlbiBsb2FkZWQpIGFuZCBmZXRjaGVzIGl0IGlmIG5vdC5cbiAgICogQHJldHVybiBib29sZWFuIGB0cnVlYCBpZiBpbmZvcm1hdGlvbiBoYWQgdG8gYmUgZmV0Y2hlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIGFzeW5jIGZldGNoSW5mb3JtYXRpb25Gb3JFeHBhbnNpb24obm9kZVRvRXhwYW5kOiBUcmVlTm9kZSkge1xuICAgIGlmICghbm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaGFzQ2hpbGRyZW4pXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYE5vZGUgY29udGFpbmluZyBpcmk9XCIke25vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaX1cIiBjb3VsZCBub3QgYmUgZXhwYW5kZWQ6IEVudGl0eSBpcyBub3QgZXhwYW5kYWJsZS5gXG4gICAgICApO1xuXG4gICAgY29uc3QgYWxsQ2hpbGRyZW5QcmVzZW50ID0gdGhpcy5hbGxDaGlsZHJlblByZXNlbnQuaGFzKFxuICAgICAgbm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpXG4gICAgKTtcbiAgICBjb25zdCBub2RlUGFyZW50Q2hpbGRSZWxhdGlvbnMgPVxuICAgICAgdGhpcy5wYXJlbnRDaGlsZFJlbGF0aW9ucy5nZXQobm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpKSB8fCBbXTtcbiAgICBpZiAoXG4gICAgICAhYWxsQ2hpbGRyZW5QcmVzZW50IHx8XG4gICAgICBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoIDw9IG5vZGVQYXJlbnRDaGlsZFJlbGF0aW9ucy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGlmICghYWxsQ2hpbGRyZW5QcmVzZW50KSB7XG4gICAgICAgIC8vIGR5bmFtaWNhbGx5IGxvYWQgY2hpbGRyZW4gZnJvbSBhcGlcbiAgICAgICAgY29uc3QgY2hpbGRyZW46IEVudGl0eURhdGFbXSA9IChcbiAgICAgICAgICBhd2FpdCB0aGlzLmFwaS5sb2FkSGllcmFyY2h5Q2hpbGRyZW4oe1xuICAgICAgICAgICAgbm9kZVRvRXhwYW5kOiBub2RlVG9FeHBhbmQsXG4gICAgICAgICAgICBlbnRpdHlUeXBlOiB0aGlzLmVudGl0eVR5cGUsXG4gICAgICAgICAgICBvbnRvbG9neUlkOiB0aGlzLm9udG9sb2d5SWQsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogdGhpcy5pbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgICAgIHVzZUxlZ2FjeTogdGhpcy51c2VMZWdhY3ksXG4gICAgICAgICAgfSlcbiAgICAgICAgKS5zb3J0KChhLCBiKSA9PiAoYS5sYWJlbCB8fCBhLmlyaSkubG9jYWxlQ29tcGFyZShiLmxhYmVsIHx8IGIuaXJpKSk7XG5cbiAgICAgICAgLy8gYWRkIGNoaWxkcmVuIHRvIHBhcmVudENoaWxkUmVsYXRpb25zIGZvciBpcmkgb2Ygbm9kZVRvRXhwYW5kXG4gICAgICAgIGNvbnN0IHBhckNoaWxkUmVsOiBQYXJlbnRDaGlsZFJlbGF0aW9uW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgIHRoaXMuZW50aXRpZXNEYXRhLnNldChjaGlsZC5pcmksIGNoaWxkKTtcbiAgICAgICAgICBpZiAoY2hpbGQucGFyZW50cykge1xuICAgICAgICAgICAgY29uc3QgcGFyUmVsYXRpb24gPSBjaGlsZC5wYXJlbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgKHBhcikgPT4gcGFyLnZhbHVlID09IG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHBhckNoaWxkUmVsLnB1c2goe1xuICAgICAgICAgICAgICBjaGlsZElyaTogY2hpbGQuaXJpLFxuICAgICAgICAgICAgICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6XG4gICAgICAgICAgICAgICAgcGFyUmVsYXRpb24ubGVuZ3RoID4gMCAmJiBwYXJSZWxhdGlvblswXS5nZXRNZXRhZGF0YSgpXG4gICAgICAgICAgICAgICAgICA/IHBhclJlbGF0aW9uWzBdLmdldE1ldGFkYXRhKClbXCJjaGlsZFJlbGF0aW9uVG9QYXJlbnRcIl1cbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSAvLyBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBlbGVtZW50XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXJlbnRDaGlsZFJlbGF0aW9ucy5zZXQobm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpLCBwYXJDaGlsZFJlbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubWVyZ2VDaGlsZHJlbkludG9Mb2FkZWRDaGlsZHJlbihub2RlVG9FeHBhbmQpO1xuXG4gICAgICB0aGlzLmFsbENoaWxkcmVuUHJlc2VudC5hZGQobm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBTZWxlY3QgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZWxlY3RcIjtcbmltcG9ydCB7IFNlbGVjdFJlc3VsdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlbGVjdFJlc3VsdFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTU2VsZWN0IGltcGxlbWVudHMgU2VsZWN0IHtcbiAgcHJvcGVydGllczogU2VsZWN0UmVzdWx0W107XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogU2VsZWN0UmVzdWx0W10pIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0VG90YWxTZWFyY2hSZXN1bHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5sZW5ndGg7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBTZWxlY3RSZXN1bHQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZWxlY3RSZXN1bHRcIjtcbmltcG9ydCB7IFRoaW5nVHlwZU5hbWUgfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGNsYXNzIE9MU1NlbGVjdFJlc3VsdCBpbXBsZW1lbnRzIFNlbGVjdFJlc3VsdCB7XG4gIHByb3BlcnRpZXM6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBhbnkpIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVzY3JpcHRpb24pKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb24uam9pbihcIiBcIik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGVzY3JpcHRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9XG5cbiAgZ2V0SXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlyaVwiXTtcbiAgfVxuXG4gIGdldExhYmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdO1xuICB9XG5cbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neV9uYW1lXCJdO1xuICB9XG5cbiAgZ2V0VHlwZSgpOiBUaGluZ1R5cGVOYW1lIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1widHlwZVwiXTtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTpcbiAgICB8IFwib250b2xvZ2llc1wiXG4gICAgfCBcImNsYXNzZXNcIlxuICAgIHwgXCJwcm9wZXJ0aWVzXCJcbiAgICB8IFwiaW5kaXZpZHVhbHNcIlxuICAgIHwgXCJ0ZXJtc1wiIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlKCk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJvbnRvbG9neVwiOlxuICAgICAgICByZXR1cm4gXCJvbnRvbG9naWVzXCI7XG4gICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgcmV0dXJuIFwiY2xhc3Nlc1wiO1xuICAgICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICAgIHJldHVybiBcInByb3BlcnRpZXNcIjtcbiAgICAgIGNhc2UgXCJpbmRpdmlkdWFsXCI6XG4gICAgICAgIHJldHVybiBcImluZGl2aWR1YWxzXCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGVcIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2hvcnRGb3JtKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInNob3J0X2Zvcm1cIl07XG4gIH1cblxuICBnZXRBcGlTb3VyY2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRBcGlTb3VyY2VFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgU2VsZWN0UmVzdWx0IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU2VsZWN0UmVzdWx0XCI7XG5pbXBvcnQgeyBUaGluZ1R5cGVOYW1lIH0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBUczRuZmRpU2VhcmNoUmVzdWx0IGltcGxlbWVudHMgU2VsZWN0UmVzdWx0IHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5wcm9wZXJ0aWVzW1wiZGVzY3JpcHRpb25cIl07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdGlvbi5qb2luKFwiIFwiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZXNjcmlwdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH1cblxuICBnZXRJcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXJpXCJdO1xuICB9XG5cbiAgZ2V0TGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl07XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5XCJdO1xuICB9XG5cbiAgZ2V0VHlwZSgpOiBUaGluZ1R5cGVOYW1lIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1widHlwZVwiXTtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTpcbiAgICB8IFwib250b2xvZ2llc1wiXG4gICAgfCBcImNsYXNzZXNcIlxuICAgIHwgXCJwcm9wZXJ0aWVzXCJcbiAgICB8IFwiaW5kaXZpZHVhbHNcIlxuICAgIHwgXCJ0ZXJtc1wiIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlKCk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJvbnRvbG9neVwiOlxuICAgICAgICByZXR1cm4gXCJvbnRvbG9naWVzXCI7XG4gICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgcmV0dXJuIFwiY2xhc3Nlc1wiO1xuICAgICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICAgIHJldHVybiBcInByb3BlcnRpZXNcIjtcbiAgICAgIGNhc2UgXCJpbmRpdmlkdWFsXCI6XG4gICAgICAgIHJldHVybiBcImluZGl2aWR1YWxzXCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGVcIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2hvcnRGb3JtKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInNob3J0X2Zvcm1cIl07XG4gIH1cblxuICBnZXRBcGlTb3VyY2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInNvdXJjZV9uYW1lXCJdO1xuICB9XG5cbiAgZ2V0QXBpU291cmNlRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic291cmNlXCJdO1xuICB9XG59XG4iLCAiaW1wb3J0IGF4aW9zLCB7IEF4aW9zSW5zdGFuY2UsIEF4aW9zUmVxdWVzdENvbmZpZyB9IGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHtcbiAgYXNBcnJheSxcbiAgZ2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeCxcbiAgZ2V0VXNlTGVnYWN5LFxuICBwbHVyYWxpemVUeXBlLFxufSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IGNyZWF0ZU1vZGVsT2JqZWN0IH0gZnJvbSBcIi4uL21vZGVsL01vZGVsT2JqZWN0Q3JlYXRvclwiO1xuaW1wb3J0IHtcbiAgT250b2xvZ3ksXG4gIE9udG9sb2dpZXMsXG4gIEVudGl0eSxcbiAgVGhpbmcsXG4gIEluZGl2aWR1YWwsXG59IGZyb20gXCIuLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBPTFMzT250b2xvZ2llcywgT0xTM09udG9sb2d5IH0gZnJvbSBcIi4uL21vZGVsL29sczMtbW9kZWxcIjtcbmltcG9ydCB7XG4gIGNsYXNzVHlwZU5hbWVzLFxuICBlbnRpdHlUeXBlTmFtZXMsXG4gIG9udG9sb2d5VHlwZU5hbWVzLFxuICB0aGluZ1R5cGVOYW1lcyxcbiAgRW50aXR5VHlwZU5hbWUsXG4gIFRoaW5nVHlwZU5hbWUsXG4gIGlzQ2xhc3NUeXBlTmFtZSxcbiAgaXNFbnRpdHlUeXBlTmFtZSxcbiAgaXNJbmRpdmlkdWFsVHlwZU5hbWUsXG4gIGlzT250b2xvZ3lUeXBlTmFtZSxcbn0gZnJvbSBcIi4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQge1xuICBIaWVyYXJjaHksXG4gIFBhcmVudENoaWxkUmVsYXRpb24sXG4gIFRyZWVOb2RlLFxufSBmcm9tIFwiLi4vbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHlcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9tb2RlbC9SZWlmaWVkXCI7XG5pbXBvcnQge1xuICBCdWlsZEhpZXJhcmNoeVByb3BzLFxuICBIaWVyYXJjaHlCdWlsZGVyLFxuICBIaWVyYXJjaHlJcmlQcm9wLFxuICBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wcyxcbn0gZnJvbSBcIi4vSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHsgT0xTU2VsZWN0IH0gZnJvbSBcIi4uL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3RcIjtcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gXCIuLi9tb2RlbC9pbnRlcmZhY2VzL1NlbGVjdFwiO1xuaW1wb3J0IHsgT0xTU2VsZWN0UmVzdWx0IH0gZnJvbSBcIi4uL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3RSZXN1bHRcIjtcbmltcG9ydCB7IFRzNG5mZGlTZWFyY2hSZXN1bHQgfSBmcm9tIFwiLi4vbW9kZWwvdHM0bmZkaS1tb2RlbC9UczRuZmRpU2VhcmNoUmVzdWx0XCI7XG5pbXBvcnQgeyBFbnRpdHlEYXRhIH0gZnJvbSBcIi4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgT0xTNE9udG9sb2dpZXMgfSBmcm9tIFwiLi4vbW9kZWwvb2xzNC1tb2RlbFwiO1xuXG4vLyB1c2VkIHRvIGZpbHRlciBlbnRpdGllcyBub3QgYmUgc2hvd24gaW4gaGllcmFyY2h5XG5mdW5jdGlvbiBpc1RvcChpcmk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGlyaSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNUaGluZ1wiIHx8XG4gICAgaXJpID09PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1RvcE9iamVjdFByb3BlcnR5XCJcbiAgKTtcbn1cblxuaW50ZXJmYWNlIFBhZ2luYXRpb25QYXJhbXMge1xuICBzaXplPzogc3RyaW5nO1xuICBwYWdlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU29ydGluZ1BhcmFtcyB7XG4gIHNvcnRGaWVsZDogc3RyaW5nIHwgbnVtYmVyO1xuICBzb3J0RGlyPzogXCJhc2NcIiB8IFwiZGVzY1wiO1xufVxuXG5pbnRlcmZhY2UgQ29udGVudFBhcmFtcyB7XG4gIG9udG9sb2d5SWQ/OiBzdHJpbmc7XG4gIHRlcm1Jcmk/OiBzdHJpbmc7XG4gIHByb3BlcnR5SXJpPzogc3RyaW5nO1xuICBpbmRpdmlkdWFsSXJpPzogc3RyaW5nO1xuICBxdWVyeVN0cmluZz86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgYXBpQ2FsbEZuID0gKFxuICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgc29ydGluZ1BhcmFtcz86IFNvcnRpbmdQYXJhbXMsXG4gIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLFxuICBwYXJhbWV0ZXI/OiBzdHJpbmcsXG4gIHVzZUxlZ2FjeT86IGJvb2xlYW4sXG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbikgPT4gUHJvbWlzZTxhbnk+O1xuXG5pbnRlcmZhY2UgU2VhcmNoUXVlcnlQYXJhbXMge1xuICBxdWVyeTogc3RyaW5nO1xuICBleGFjdE1hdGNoPzogYm9vbGVhbjtcbiAgc2hvd09ic29sZXRlVGVybXM/OiBib29sZWFuO1xuICB0eXBlcz86IHN0cmluZztcbiAgb250b2xvZ3k/OiBzdHJpbmc7XG4gIGdyb3VwQnlJcmk/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgU2VsZWN0UXVlcnlQYXJhbXMge1xuICBxdWVyeTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU3VnZ2VzdFF1ZXJ5UGFyYW1zIHtcbiAgcXVlcnk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEpzVHJlZVBhcmFtcyB7XG4gIHZpZXdNb2RlPzogc3RyaW5nO1xuICBzaWJsaW5ncz86IGJvb2xlYW47XG4gIGNoaWxkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBKU1RyZWVOb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBwYXJlbnQ6IHN0cmluZztcbiAgaXJpOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgc3RhdGU6IHtcbiAgICBvcGVuZWQ6IGJvb2xlYW47XG4gIH07XG4gIGNoaWxkcmVuOiBib29sZWFuO1xuICBhX2F0dHI6IHtcbiAgICBpcmk6IHN0cmluZztcbiAgICBvbnRvbG9neV9uYW1lOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBjbGFzczogc3RyaW5nO1xuICB9O1xuICBvbnRvbG9neV9uYW1lOiBzdHJpbmc7XG59O1xuXG5jb25zdCBERUZBVUxUX1NFQVJDSF9SRVNVTFRTX1BFUl9QQUdFID0gMTA7XG5cbmV4cG9ydCBjbGFzcyBPbHNBcGkgaW1wbGVtZW50cyBIaWVyYXJjaHlCdWlsZGVyIHtcbiAgcHJpdmF0ZSBheGlvc0luc3RhbmNlOiBBeGlvc0luc3RhbmNlO1xuXG4gIGNvbnN0cnVjdG9yKGFwaTogc3RyaW5nKSB7XG4gICAgdGhpcy5heGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkw6IGFwaSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQ29udGVudF9UeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFyYW1zRm9yR2V0KFxuICAgIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLFxuICAgIHNvcnRpbmdQYXJhbXM/OiBTb3J0aW5nUGFyYW1zLFxuICAgIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLFxuICAgIHBhcmFtZXRlcj86IHN0cmluZ1xuICApIHtcbiAgICBpZiAoc29ydGluZ1BhcmFtcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucGFnaW5hdGlvblBhcmFtcyxcbiAgICAgICAgc29ydDogYCR7c29ydGluZ1BhcmFtcy5zb3J0RmllbGR9LCR7c29ydGluZ1BhcmFtcy5zb3J0RGlyfWAsXG4gICAgICAgIC4uLmNvbnRlbnRQYXJhbXMsXG4gICAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBhZ2luYXRpb25QYXJhbXMsXG4gICAgICAuLi5jb250ZW50UGFyYW1zLFxuICAgICAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlciksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICByb3dzOiBwYWdpbmF0aW9uUGFyYW1zPy5zaXplLFxuICAgIH07XG5cbiAgICBpZiAocGFnaW5hdGlvblBhcmFtcz8ucGFnZSkge1xuICAgICAgaWYgKHBhZ2luYXRpb25QYXJhbXMuc2l6ZSkge1xuICAgICAgICBwYXJhbXMuc3RhcnQgPSAoXG4gICAgICAgICAgK3BhZ2luYXRpb25QYXJhbXMucGFnZSAqICtwYWdpbmF0aW9uUGFyYW1zLnNpemVcbiAgICAgICAgKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLnN0YXJ0ID0gKFxuICAgICAgICAgICtwYWdpbmF0aW9uUGFyYW1zLnBhZ2UgKiBERUZBVUxUX1NFQVJDSF9SRVNVTFRTX1BFUl9QQUdFXG4gICAgICAgICkudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvclNlYXJjaChcbiAgICBxdWVyeVBhcmFtczogU2VhcmNoUXVlcnlQYXJhbXMsXG4gICAgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsXG4gICAgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsXG4gICAgcGFyYW1ldGVyPzogc3RyaW5nLFxuICAgIHRzNG5mZGlHYXRld2F5PzogYm9vbGVhblxuICApIHtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIGV4YWN0OiBxdWVyeVBhcmFtcy5leGFjdE1hdGNoLFxuICAgICAgb2Jzb2xldGVzOiBxdWVyeVBhcmFtcy5zaG93T2Jzb2xldGVUZXJtcyxcbiAgICB9O1xuXG4gICAgaWYgKHRzNG5mZGlHYXRld2F5KSB7XG4gICAgICBwYXJhbXMucXVlcnkgPSBxdWVyeVBhcmFtcy5xdWVyeTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnEgPSBxdWVyeVBhcmFtcy5xdWVyeTtcbiAgICB9XG5cbiAgICBpZiAocXVlcnlQYXJhbXMuZ3JvdXBCeUlyaSkge1xuICAgICAgcGFyYW1zLmdyb3VwRmllbGQgPSBxdWVyeVBhcmFtcy5ncm91cEJ5SXJpO1xuICAgIH1cblxuICAgIGlmIChxdWVyeVBhcmFtcy50eXBlcykge1xuICAgICAgcGFyYW1zLnR5cGUgPSBxdWVyeVBhcmFtcy50eXBlcztcbiAgICB9XG5cbiAgICBpZiAocXVlcnlQYXJhbXMub250b2xvZ3kpIHtcbiAgICAgIHBhcmFtcy5vbnRvbG9neSA9IHF1ZXJ5UGFyYW1zLm9udG9sb2d5O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICAuLi50aGlzLmJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zKSxcbiAgICAgIC4uLmNvbnRlbnRQYXJhbXMsXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIGZvciBjcmVhdGluZyBhbiBvYmplY3QgZnJvbSBzdHJpbmcgb2YgcGFyYW1ldGVycyBmb3IgYXhpb3MgaW5wdXQgcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXI/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmIChwYXJhbWV0ZXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtc1NwbGl0dGVkID0gcGFyYW1ldGVyLnNwbGl0KFwiJlwiKTtcblxuICAgICAgcGFyYW1zU3BsaXR0ZWQuZm9yRWFjaCgocGFyYW06IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBrZXk6IHN0cmluZyA9IHBhcmFtLnNwbGl0KFwiPVwiKVswXTtcbiAgICAgICAgY29uc3QgdmFsdWU6IHN0cmluZyA9IHBhcmFtLnNwbGl0KFwiPVwiKVsxXTtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvclNlbGVjdChcbiAgICBxdWVyeVBhcmFtczogU3VnZ2VzdFF1ZXJ5UGFyYW1zLFxuICAgIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLFxuICAgIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLFxuICAgIHBhcmFtZXRlcnM/OiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBxOiBxdWVyeVBhcmFtcy5xdWVyeSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIC4uLnRoaXMuYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXMpLFxuICAgICAgLi4uY29udGVudFBhcmFtcyxcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXJzKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvclN1Z2dlc3QoXG4gICAgcXVlcnlQYXJhbXM6IFN1Z2dlc3RRdWVyeVBhcmFtcyxcbiAgICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXJzPzogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgcTogcXVlcnlQYXJhbXMucXVlcnksXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICAuLi50aGlzLmJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zKSxcbiAgICAgIC4uLmNvbnRlbnRQYXJhbXMsXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVycyksXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIHRoaXMgdGhlIGJlaGF2aW9yIHdlIHdhbnQgKGVzcGVjaWFsbHkgdGhyb3dpbmcgZXJyb3IgZm9yIGVtcHR5IHJlc3BvbnNlKT9cbiAgcHJpdmF0ZSBjaGVja19mb3JfZXJyb3JzKHJlc3BvbnNlOiBhbnkpOiBhbnkge1xuICAgIC8vIHJlc291cmNlIG5vdCBmb3VuZC9pbGxlZ2FsIGFyZ3VtZW50IGV4Y2VwdGlvbiBpbiBzZW1hbnRpY2xvb2t1cFxuICAgIGlmIChyZXNwb25zZVtcImVycm9yXCJdKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgcmVzcG9uc2VbXCJzdGF0dXNcIl0gK1xuICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICByZXNwb25zZVtcImVycm9yXCJdICtcbiAgICAgICAgICBcIiAtIFwiICtcbiAgICAgICAgICByZXNwb25zZVtcIm1lc3NhZ2VcIl0gK1xuICAgICAgICAgIFwiIC0gXCIgK1xuICAgICAgICAgIHJlc3BvbnNlW1wiZXhjZXB0aW9uXCJdICtcbiAgICAgICAgICBcIiBhdCBcIiArXG4gICAgICAgICAgcmVzcG9uc2VbXCJwYXRoXCJdXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBlbXB0eSByZXNwb25zZSAtIGNhbiBiZSBjYXVnaHQgaWYgdGhpcyBpcyBleHBlY3RlZCwgZS5nLiBmb3IgZmV0Y2hpbmcgaW5zdGFuY2VzXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2VbXCJwYWdlXCJdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHJlc3BvbnNlW1wicGFnZVwiXVtcInRvdGFsRWxlbWVudHNcIl0gPT09IDBcbiAgICApIHtcbiAgICAgIHRocm93IEVycm9yKFwiUmVzcG9uc2UgY29udGFpbnMgMCBlbGVtZW50c1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtYWtlQ2FsbChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZzxhbnk+IHwgdW5kZWZpbmVkLFxuICAgIHVzZUxlZ2FjeTogYm9vbGVhblxuICApIHtcbiAgICBjb25zdCBhcGlWZXJzaW9uUHJlZml4ID0gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcIlwiIDogXCJ2Mi9cIjtcbiAgICBjb25zdCByZXNwb25zZSA9IChcbiAgICAgIGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoYXBpVmVyc2lvblByZWZpeCArIHVybCwgY29uZmlnKVxuICAgICkuZGF0YTtcbiAgICByZXR1cm4gdGhpcy5jaGVja19mb3JfZXJyb3JzKHJlc3BvbnNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPbnRvbG9naWVzOiBhcGlDYWxsRm4gPSBhc3luYyAoXG4gICAgcGFnaW5hdGlvblBhcmFtcyxcbiAgICBzb3J0aW5nUGFyYW1zLFxuICAgIGNvbnRlbnRQYXJhbXMsXG4gICAgcGFyYW1ldGVyLFxuICAgIHVzZUxlZ2FjeSA9IHRydWVcbiAgKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXG4gICAgICBcIm9udG9sb2dpZXNcIixcbiAgICAgIHtcbiAgICAgICAgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KFxuICAgICAgICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgICAgICAgc29ydGluZ1BhcmFtcyxcbiAgICAgICAgICBjb250ZW50UGFyYW1zLFxuICAgICAgICAgIHBhcmFtZXRlclxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIHVzZUxlZ2FjeVxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEZldGNoIGFsbCBvbnRvbG9naWVzLiBDdXJyZW50bHkgb25seSBhdmFpbGFibGUgZm9yIHVzZUxlZ2FjeSBzaW5jZSBwYXJhbWV0ZXJzIGFyZW4ndCBhbGxvd2VkIGluIHRoZSBPTFMgdjIgQVBJIG9udG9sb2dpZXMgZW5kcG9pbnRcbiAgICogQHBhcmFtIHBhcmFtZXRlclxuICAgKiBAcGFyYW0gdXNlTGVnYWN5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0T250b2xvZ2llc0RhdGEoXG4gICAgcGFyYW1ldGVyPzogc3RyaW5nLFxuICAgIHVzZUxlZ2FjeSA9IHRydWVcbiAgKTogUHJvbWlzZTxPbnRvbG9naWVzPiB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGxldCBvbnRvbG9naWVzRGF0YTogT250b2xvZ3lbXSA9IFtdO1xuXG4gICAgbGV0IHBhZ2VOdW0gPSAwO1xuICAgIGNvbnN0IHBhZ2VTaXplID0gNTAwO1xuXG4gICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgZG8ge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0T250b2xvZ2llcyhcbiAgICAgICAgICB7IHNpemU6IHBhZ2VTaXplLnRvU3RyaW5nKCksIHBhZ2U6IHBhZ2VOdW0udG9TdHJpbmcoKSB9LFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICAgIHVzZUxlZ2FjeVxuICAgICAgICApOyAvLyBhc3N1bWluZyB0aGVyZSBhcmUgbm8gbW9yZSB0aGFuIDUwMCBvbnRvbG9naWVzXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFyZXNwb25zZSB8fFxuICAgICAgICAgICFyZXNwb25zZVtcIl9lbWJlZGRlZFwiXSB8fFxuICAgICAgICAgICFyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcIm9udG9sb2dpZXNcIl1cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT250b2xvZ2llcyBkYXRhIG5vdCBmb3VuZFwiKTsgLy9UT0RPIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbnRvbG9naWVzRGF0YSA9IG9udG9sb2dpZXNEYXRhLmNvbmNhdChcbiAgICAgICAgICAgIHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wib250b2xvZ2llc1wiXS5tYXAoKG9udG9sb2d5RGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVNb2RlbE9iamVjdChvbnRvbG9neURhdGEpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFnZU51bSArPSAxO1xuICAgICAgfSB3aGlsZSAocGFnZU51bSA8IHJlc3BvbnNlW1wicGFnZVwiXVtcInRvdGFsUGFnZXNcIl0pO1xuXG4gICAgICByZXR1cm4gbmV3IE9MUzNPbnRvbG9naWVzKG9udG9sb2dpZXNEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG8ge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0T250b2xvZ2llcyhcbiAgICAgICAgICB7IHNpemU6IHBhZ2VTaXplLnRvU3RyaW5nKCksIHBhZ2U6IHBhZ2VOdW0udG9TdHJpbmcoKSB9LFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICAgIHVzZUxlZ2FjeVxuICAgICAgICApOyAvLyBhc3N1bWluZyB0aGVyZSBhcmUgbm8gbW9yZSB0aGFuIDUwMCBvbnRvbG9naWVzXG5cbiAgICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2VbXCJlbGVtZW50c1wiXSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9udG9sb2dpZXMgZGF0YSBub3QgZm91bmRcIik7IC8vVE9ETyBjb25zaXN0ZW50IGVycm9yIGhhbmRsaW5nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb250b2xvZ2llc0RhdGEgPSBvbnRvbG9naWVzRGF0YS5jb25jYXQoXG4gICAgICAgICAgICByZXNwb25zZVtcImVsZW1lbnRzXCJdLm1hcCgob250b2xvZ3lEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU1vZGVsT2JqZWN0KG9udG9sb2d5RGF0YSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBwYWdlTnVtICs9IDE7XG4gICAgICB9IHdoaWxlIChwYWdlTnVtIDwgcmVzcG9uc2VbXCJ0b3RhbFBhZ2VzXCJdKTtcblxuICAgICAgcmV0dXJuIG5ldyBPTFM0T250b2xvZ2llcyhvbnRvbG9naWVzRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYWxsIHRlcm1zIGZyb20gdGhlIGFwaVxuICAgKiBAcGFyYW0gcGFnaW5hdGlvblBhcmFtc1xuICAgKiBAcGFyYW0gc29ydGluZ1BhcmFtc1xuICAgKiBAcGFyYW0gY29udGVudFBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSBgdXNlTGVnYWN5YCBEZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIGB1c2VMZWdhY3lgLCBgXCJ0ZXJtc1wiYCAoYHVzZUxlZ2FjeSA9PSB0cnVlYCkgb3IgYFwiY2xhc3Nlc1wiYCAoYHVzZUxlZ2FjeSA9PSBmYWxzZWApIHdpbGwgYmUgdXNlZCBpbiB0aGUgcXVlcnkgdXJsXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVybXM6IGFwaUNhbGxGbiA9IGFzeW5jIChcbiAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgIHNvcnRpbmdQYXJhbXMsXG4gICAgY29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhblxuICApID0+IHtcbiAgICBjb25zdCB0eXBlUHJlZml4ID0gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcInRlcm1zXCIgOiBcImNsYXNzZXNcIjtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcbiAgICAgIHR5cGVQcmVmaXgsXG4gICAgICB7XG4gICAgICAgIHBhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvckdldChcbiAgICAgICAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgICAgICAgIHNvcnRpbmdQYXJhbXMsXG4gICAgICAgICAgY29udGVudFBhcmFtc1xuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpXG4gICAgKTtcbiAgfTtcblxuICBwdWJsaWMgZ2V0UHJvcGVydGllczogYXBpQ2FsbEZuID0gYXN5bmMgKFxuICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgc29ydGluZ1BhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zLFxuICAgIHBhcmFtZXRlcixcbiAgICB1c2VMZWdhY3k/OiBib29sZWFuXG4gICkgPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFxuICAgICAgXCJwcm9wZXJ0aWVzXCIsXG4gICAgICB7XG4gICAgICAgIHBhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvckdldChcbiAgICAgICAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgICAgICAgIHNvcnRpbmdQYXJhbXMsXG4gICAgICAgICAgY29udGVudFBhcmFtc1xuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpXG4gICAgKTtcbiAgfTtcblxuICBwdWJsaWMgZ2V0SW5kaXZpZHVhbHM6IGFwaUNhbGxGbiA9IGFzeW5jIChcbiAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgIHNvcnRpbmdQYXJhbXMsXG4gICAgY29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhblxuICApID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcbiAgICAgIFwiaW5kaXZpZHVhbHNcIixcbiAgICAgIHtcbiAgICAgICAgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KFxuICAgICAgICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgICAgICAgc29ydGluZ1BhcmFtcyxcbiAgICAgICAgICBjb250ZW50UGFyYW1zXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSlcbiAgICApO1xuICB9O1xuXG4gIHB1YmxpYyBnZXRPbnRvbG9neTogYXBpQ2FsbEZuID0gYXN5bmMgKFxuICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgc29ydGluZ1BhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zLFxuICAgIHBhcmFtZXRlcixcbiAgICB1c2VMZWdhY3k/OiBib29sZWFuXG4gICkgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXG4gICAgICBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkLFxuICAgICAgcGFyYW1zLFxuICAgICAgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSlcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGFuIGVudGl0eSBmcm9tIHRoZSAvZW50aXRpZXMgZW5kcG9pbnQgaW4gdGhlIGFwaSBpbiBvbHM0LlxuICAgKiBBbHdheXMgcmVxdWlyZXMgdGhlIHJlc3BlY3RpdmUgb2JqZWN0IElSSSBpbiBjb250ZW50UGFyYW1zIHRvIGJlIHNldFxuICAgKiBJZiBvbnRvbG9neUlkIGlzIHVuZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb2JqZWN0IHdpbGwgYmUgcXVlcmllZCBmcm9tIGFsbCBvbnRvbG9naWVzLCBjb250YWluaW5nIGEgbGlzdCBvZiByZXN1bHRzXG4gICAqIElmIGFuIG9udG9sb2d5SWQgaXMgcHJvdmlkZWQgaW4gY29udGVudFBhcmFtcywgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG9iamVjdCBmcm9tIHRoYXQgc3BlY2lmaWMgb250b2xvZ3lcbiAgICovXG4gIHB1YmxpYyBnZXRFbnRpdHk6IGFwaUNhbGxGbiA9IGFzeW5jIChcbiAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgIHNvcnRpbmdQYXJhbXMsXG4gICAgY29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhblxuICApID0+IHtcbiAgICBjb25zdCBxdWVyeVByZWZpeCA9IGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWRcbiAgICAgID8gXCJvbnRvbG9naWVzL1wiICsgY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCArIFwiL1wiXG4gICAgICA6IFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgaXJpOiBjb250ZW50UGFyYW1zPy50ZXJtSXJpLFxuICAgICAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlciksXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcbiAgICAgIHF1ZXJ5UHJlZml4ICsgXCJlbnRpdGllc1wiLFxuICAgICAgeyBwYXJhbXM6IHBhcmFtcyB9LFxuICAgICAgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSlcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGEgdGVybSBmcm9tIHRoZSBhcGlcbiAgICogQHBhcmFtIHBhZ2luYXRpb25QYXJhbXNcbiAgICogQHBhcmFtIHNvcnRpbmdQYXJhbXNcbiAgICogQHBhcmFtIGBjb250ZW50UGFyYW1zYCBBbHdheXMgcmVxdWlyZXMgdGhlIHJlc3BlY3RpdmUgb2JqZWN0IElSSSBpbiBgY29udGVudFBhcmFtc2AgdG8gYmUgc2V0LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBJZiBvbnRvbG9neUlkIGlzIHVuZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb2JqZWN0IHdpbGwgYmUgcXVlcmllZCBmcm9tIGFsbCBvbnRvbG9naWVzLCBjb250YWluaW5nIGEgbGlzdCBvZiByZXN1bHRzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBJZiBhbiBvbnRvbG9neUlkIGlzIHByb3ZpZGVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwgb25seSBjb250YWluIHRoZSBvYmplY3QgZnJvbSB0aGF0IHNwZWNpZmljIG9udG9sb2d5LlxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSBgdXNlTGVnYWN5YCBEZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIGB1c2VMZWdhY3lgLCBgXCJ0ZXJtc1wiYCAoYHVzZUxlZ2FjeSA9PSB0cnVlYCkgb3IgYFwiY2xhc3Nlc1wiYCAoYHVzZUxlZ2FjeSA9PSBmYWxzZWApIHdpbGwgYmUgdXNlZCBpbiB0aGUgcXVlcnkgdXJsXG4gICAqIEBwYXJhbSBhYm9ydFNpZ25hbFxuICAgKi9cbiAgcHVibGljIGdldFRlcm06IGFwaUNhbGxGbiA9IGFzeW5jIChcbiAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgIHNvcnRpbmdQYXJhbXMsXG4gICAgY29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhbixcbiAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICkgPT4ge1xuICAgIGNvbnN0IG9udG9sb2d5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZFxuICAgICAgPyBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkICsgXCIvXCJcbiAgICAgIDogXCJcIjtcbiAgICBjb25zdCB0eXBlUHJlZml4ID0gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcInRlcm1zXCIgOiBcImNsYXNzZXNcIjtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LnRlcm1JcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFxuICAgICAgb250b2xvZ3lQcmVmaXggKyB0eXBlUHJlZml4LFxuICAgICAgeyBwYXJhbXM6IHBhcmFtcywgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LFxuICAgICAgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSlcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGEgcHJvcGVydHkgZnJvbSB0aGUgYXBpIGluIG9sczMuXG4gICAqIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGNvbnRlbnRQYXJhbXMgdG8gYmUgc2V0XG4gICAqIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHNcbiAgICogSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neVxuICAgKi9cbiAgcHVibGljIGdldFByb3BlcnR5OiBhcGlDYWxsRm4gPSBhc3luYyAoXG4gICAgcGFnaW5hdGlvblBhcmFtcyxcbiAgICBzb3J0aW5nUGFyYW1zLFxuICAgIGNvbnRlbnRQYXJhbXMsXG4gICAgcGFyYW1ldGVyLFxuICAgIHVzZUxlZ2FjeT86IGJvb2xlYW4sXG4gICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICApID0+IHtcbiAgICBjb25zdCBxdWVyeVByZWZpeCA9IGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWRcbiAgICAgID8gXCJvbnRvbG9naWVzL1wiICsgY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCArIFwiL1wiXG4gICAgICA6IFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgaXJpOiBjb250ZW50UGFyYW1zPy5wcm9wZXJ0eUlyaSxcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXG4gICAgICBxdWVyeVByZWZpeCArIFwicHJvcGVydGllc1wiLFxuICAgICAgeyBwYXJhbXM6IHBhcmFtcywgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LFxuICAgICAgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSlcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGFuIGluZGl2aWR1YWwgZnJvbSB0aGUgYXBpIGluIG9sczMuXG4gICAqIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGNvbnRlbnRQYXJhbXMgdG8gYmUgc2V0XG4gICAqIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHNcbiAgICogSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neVxuICAgKi9cbiAgcHVibGljIGdldEluZGl2aWR1YWw6IGFwaUNhbGxGbiA9IGFzeW5jIChcbiAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgIHNvcnRpbmdQYXJhbXMsXG4gICAgY29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhbixcbiAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZFxuICAgICAgPyBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkICsgXCIvXCJcbiAgICAgIDogXCJcIjtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LmluZGl2aWR1YWxJcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFxuICAgICAgcXVlcnlQcmVmaXggKyBcImluZGl2aWR1YWxzXCIsXG4gICAgICB7IHBhcmFtczogcGFyYW1zLCBzaWduYWw6IGFib3J0U2lnbmFsIH0sXG4gICAgICBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KVxuICAgICk7XG4gIH07XG5cbiAgcHVibGljIHNlYXJjaCA9IGFzeW5jIChcbiAgICBxdWVyeVBhcmFtczogU2VhcmNoUXVlcnlQYXJhbXMsXG4gICAgcGFnaW5hdGlvblBhcmFtczogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmcsXG4gICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICApOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFxuICAgICAgXCJzZWFyY2hcIixcbiAgICAgIHtcbiAgICAgICAgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yU2VhcmNoKFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgICAgICAgY29udGVudFBhcmFtcyxcbiAgICAgICAgICBwYXJhbWV0ZXJcbiAgICAgICAgKSxcbiAgICAgICAgc2lnbmFsOiBhYm9ydFNpZ25hbCxcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfTtcblxuICBwdWJsaWMgc2VsZWN0ID0gYXN5bmMgKFxuICAgIHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcyxcbiAgICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcbiAgICAgIFwic2VsZWN0XCIsXG4gICAgICB7XG4gICAgICAgIHBhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvclNlbGVjdChcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgICAgICAgIGNvbnRlbnRQYXJhbXMsXG4gICAgICAgICAgcGFyYW1ldGVyXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH07XG5cbiAgcHVibGljIHNlYXJjaFRzNG5mZGlHYXRld2F5ID0gYXN5bmMgKFxuICAgIHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcyxcbiAgICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmcsXG4gICAgdHM0bmZkaUdhdGV3YXk/OiBib29sZWFuXG4gICk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXG4gICAgICBcInNlYXJjaFwiLFxuICAgICAge1xuICAgICAgICBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTZWFyY2goXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcGFnaW5hdGlvblBhcmFtcyxcbiAgICAgICAgICBjb250ZW50UGFyYW1zLFxuICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICB0czRuZmRpR2F0ZXdheVxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGZXRjaCBzZWxlY3QgZGF0YS5cbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zXG4gICAqIEBwYXJhbSBwYWdpbmF0aW9uUGFyYW1zXG4gICAqIEBwYXJhbSBjb250ZW50UGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTZWxlY3REYXRhKFxuICAgIHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcyxcbiAgICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmcsXG4gICAgdHM0bmZkaUdhdGV3YXk/OiBib29sZWFuXG4gICk6IFByb21pc2U8U2VsZWN0PiB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGxldCBzZWxlY3REYXRhOiBPTFNTZWxlY3RSZXN1bHRbXSA9IFtdO1xuICAgIGxldCByZXN1bHROdW0gPSAwO1xuXG4gICAgaWYgKHRzNG5mZGlHYXRld2F5KSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VhcmNoVHM0bmZkaUdhdGV3YXkoXG4gICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgICAgICBjb250ZW50UGFyYW1zLFxuICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgIHRzNG5mZGlHYXRld2F5XG4gICAgICApO1xuICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWxlY3QgZGF0YSBub3QgZm91bmRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3REYXRhID0gc2VsZWN0RGF0YS5jb25jYXQoXG4gICAgICAgICAgcmVzcG9uc2UubWFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHM0bmZkaVNlYXJjaFJlc3VsdChkYXRhKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VsZWN0KFxuICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgcGFnaW5hdGlvblBhcmFtcyxcbiAgICAgICAgY29udGVudFBhcmFtcyxcbiAgICAgICAgcGFyYW1ldGVyXG4gICAgICApO1xuICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcImRvY3NcIl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0IGRhdGEgbm90IGZvdW5kXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0RGF0YSA9IHNlbGVjdERhdGEuY29uY2F0KFxuICAgICAgICAgIHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJkb2NzXCJdLm1hcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE9MU1NlbGVjdFJlc3VsdChkYXRhKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgT0xTU2VsZWN0KHNlbGVjdERhdGEpO1xuICB9XG5cbiAgcHVibGljIHN1Z2dlc3QgPSBhc3luYyAoXG4gICAgcXVlcnlQYXJhbXM6IFN1Z2dlc3RRdWVyeVBhcmFtcyxcbiAgICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcbiAgICAgIFwic3VnZ2VzdFwiLFxuICAgICAge1xuICAgICAgICBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTdWdnZXN0KFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgICAgICAgY29udGVudFBhcmFtcyxcbiAgICAgICAgICBwYXJhbWV0ZXJcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogZ2V0VGVybVRyZWU6XG4gICAqIFRoaXMgbWV0aG9kIGFsd2F5cyByZXF1aXJlcyBhbiBvbnRvbG9neUlkIGluIGNvbnRlbnRQYXJhbXNcbiAgICogMSkgSWYgbm8gdGVybUlyaSBpcyBkZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvbnRvbG9neSByb290cyB3aWxsIGJlIHF1ZXJpZWRcbiAgICogMikgSWYgYSB0ZXJtSXJpIGlzIGRlZmluZWQgYnV0IG5vIGNoaWxkIGluIGpzVHJlZVBhcmFtcywgdGhlIGhpZXJhcmNoeSBjb250YWluaW5nIHRoYXQgdGVybSB3aWxsIGJlIHF1ZXJpZWRcbiAgICogMykgSWYgYSB0ZXJtSXJpIGlzIGRlZmluZWQgYW5kIGFsc28gYSBjaGlsZCBpbiBqc1RyZWVQYXJhbXMsIHRoZSBzdWJoaWVyYXJjaHkgb2YgdGhhdCBjaGlsZCB3aWxsIGJlIHF1ZXJpZWRcbiAgICovXG4gIHB1YmxpYyBnZXRUZXJtVHJlZSA9IGFzeW5jIChcbiAgICBjb250ZW50UGFyYW1zOiBDb250ZW50UGFyYW1zLFxuICAgIHRyZWVQYXJhbXM6IEpzVHJlZVBhcmFtcyxcbiAgICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBzb3J0aW5nUGFyYW1zPzogU29ydGluZ1BhcmFtc1xuICApID0+IHtcbiAgICBsZXQgYmFzZVJlcXVlc3QgPSBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkICsgXCIvdGVybXNcIjtcbiAgICBpZiAoIWNvbnRlbnRQYXJhbXMudGVybUlyaSlcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChiYXNlUmVxdWVzdCArIFwiL3Jvb3RzXCIpKS5kYXRhOyAvLzEpXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGJhc2VSZXF1ZXN0ID1cbiAgICAgIGJhc2VSZXF1ZXN0ICtcbiAgICAgIFwiL1wiICtcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoY29udGVudFBhcmFtcz8udGVybUlyaSkpICtcbiAgICAgIFwiL2pzdHJlZVwiO1xuICAgIGlmICh0cmVlUGFyYW1zLmNoaWxkKVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChcbiAgICAgICAgICBiYXNlUmVxdWVzdCArIFwiL2NoaWxkcmVuL1wiICsgdHJlZVBhcmFtcy5jaGlsZFxuICAgICAgICApXG4gICAgICApLmRhdGE7XG4gICAgLy8zKVxuICAgIGVsc2VcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChiYXNlUmVxdWVzdCwgeyBwYXJhbXM6IHRyZWVQYXJhbXMgfSkpXG4gICAgICAgIC5kYXRhOyAvLzIpXG4gIH07XG5cbiAgcHVibGljIGdldFRlcm1SZWxhdGlvbnMgPSBhc3luYyAoXG4gICAgY29udGVudFBhcmFtczogQ29udGVudFBhcmFtcyxcbiAgICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBzb3J0aW5nUGFyYW1zPzogU29ydGluZ1BhcmFtc1xuICApID0+IHtcbiAgICBsZXQgYmFzZVJlcXVlc3QgPSBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkICsgXCIvdGVybXNcIjtcbiAgICBpZiAoIWNvbnRlbnRQYXJhbXMudGVybUlyaSlcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChiYXNlUmVxdWVzdCArIFwiL3Jvb3RzXCIpKS5kYXRhOyAvLzEpXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGJhc2VSZXF1ZXN0ID1cbiAgICAgIGJhc2VSZXF1ZXN0ICtcbiAgICAgIFwiL1wiICtcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoY29udGVudFBhcmFtcz8udGVybUlyaSkpICtcbiAgICAgIFwiL2dyYXBoXCI7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0KSkuZGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2hvbGUgZW50aXR5IHJlc3BvbnNlIGpzb24gd2l0aCBhIGNvbWZvcnRhYmxlIHdyYXBwZXIgaGFuZGxpbmcgZW50aXR5VHlwZSwgb250b2xvZ3lJZCBhbmQgdXNlTGVnYWN5XG4gICAqIEBwYXJhbSBpcmlcbiAgICogQHBhcmFtIGVudGl0eVR5cGUgcXVlcmllcyBzcGVjaWZpYyByb3V0ZXMgaWYgcHJvdmlkZWQgYW5kIGluZmVycyB0eXBlIGlmIG5vdFxuICAgKiBAcGFyYW0gb250b2xvZ3lJZCBxdWVyaWVzIG9udG9sb2d5IHJvdXRlcyBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIG5vdFxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB1c2VMZWdhY3kgYWZmZWN0cyBob3cgZW50aXR5VHlwZSBpcyBpbmZlcnJlZCBpZiBub3QgcHJvdmlkZWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRFbnRpdHlSZXNwb25zZShcbiAgICBpcmk6IHN0cmluZyxcbiAgICBlbnRpdHlUeXBlPzogRW50aXR5VHlwZU5hbWUsXG4gICAgb250b2xvZ3lJZD86IHN0cmluZyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmcsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhblxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGxldCByZXNwb25zZTtcbiAgICBpZiAoIWlyaSkgdGhyb3cgRXJyb3IoXCJObyBJUkkgcHJvdmlkZWRcIik7XG5cbiAgICBpZiAoZW50aXR5VHlwZSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEVudGl0eVdpdGhFbnRpdHlUeXBlUHJvdmlkZWQoXG4gICAgICAgIGlyaSxcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB1c2VMZWdhY3lcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSkge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0RW50aXR5V2l0aEluZmVycmVkRW50aXR5VHlwZShcbiAgICAgICAgICBpcmksXG4gICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICBwYXJhbWV0ZXJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRFbnRpdHkoXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB7IG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IGlyaSB9LFxuICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBFbnRpdHkgb2JqZWN0IChpbXBsZW1lbnRpbmcgJ0NsYXNzJywgJ1Byb3BlcnR5JyBvciAnSW5kaXZpZHVhbCcpLlxuICAgKiBJbmRpcmVjdGx5IGZldGNoZXMgdGhlIHJlc3BvbnNlIEpTT04gZm9yIHRoZSBzcGVjaWZpZWQgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIgYW5kIEFQSSB2ZXJzaW9uICh1c2VMZWdhY3kpLlxuICAgKlxuICAgKiBAcGFyYW0gZW50aXR5VHlwZVxuICAgKiBAcGFyYW0gaXJpXG4gICAqIEBwYXJhbSBvbnRvbG9neUlkXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIHVzZUxlZ2FjeVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEVudGl0eU9iamVjdChcbiAgICBpcmk6IHN0cmluZyxcbiAgICBlbnRpdHlUeXBlPzogRW50aXR5VHlwZU5hbWUsXG4gICAgb250b2xvZ3lJZD86IHN0cmluZyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmcsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhblxuICApOiBQcm9taXNlPEVudGl0eT4ge1xuICAgIHJldHVybiBjcmVhdGVNb2RlbE9iamVjdChcbiAgICAgIGF3YWl0IHRoaXMuZ2V0RW50aXR5UmVzcG9uc2UoXG4gICAgICAgIGlyaSxcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB1c2VMZWdhY3lcbiAgICAgIClcbiAgICApIGFzIEVudGl0eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIE9udG9sb2d5IG9iamVjdC5cbiAgICogSW5kaXJlY3RseSBmZXRjaGVzIHRoZSByZXNwb25zZSBKU09OIGZvciB0aGUgc3BlY2lmaWVkIG9udG9sb2d5SWQsIHBhcmFtZXRlciBhbmQgQVBJIHZlcnNpb24gKHVzZUxlZ2FjeSkuXG4gICAqXG4gICAqIEBwYXJhbSBvbnRvbG9neUlkXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIHVzZUxlZ2FjeVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldE9udG9sb2d5T2JqZWN0KFxuICAgIG9udG9sb2d5SWQ6IHN0cmluZyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmcsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhblxuICApOiBQcm9taXNlPE9udG9sb2d5PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9udG9sb2d5KFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkIH0sXG4gICAgICBwYXJhbWV0ZXIsXG4gICAgICB1c2VMZWdhY3lcbiAgICApO1xuXG4gICAgcmV0dXJuIGNyZWF0ZU1vZGVsT2JqZWN0KHJlc3BvbnNlKSBhcyBPbnRvbG9neTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUaGluZ09iamVjdChcbiAgICBpcmk/OiBzdHJpbmcsXG4gICAgdGhpbmdUeXBlPzogVGhpbmdUeXBlTmFtZSxcbiAgICBvbnRvbG9neUlkPzogc3RyaW5nLFxuICAgIHBhcmFtZXRlcj86IHN0cmluZyxcbiAgICB1c2VMZWdhY3k/OiBib29sZWFuXG4gICk6IFByb21pc2U8VGhpbmc+IHtcbiAgICBpZiAodGhpbmdUeXBlKSB7XG4gICAgICBpZiAoaXNPbnRvbG9neVR5cGVOYW1lKHRoaW5nVHlwZSkpIHtcbiAgICAgICAgaWYgKCFvbnRvbG9neUlkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBvbnRvbG9neUlkIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaW4ge1wiJHtvbnRvbG9neVR5cGVOYW1lcy5qb2luKFxuICAgICAgICAgICAgICAnXCIsIFwiJ1xuICAgICAgICAgICAgKX1cIn0uYFxuICAgICAgICAgICk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRW50aXR5VHlwZU5hbWUodGhpbmdUeXBlKSkge1xuICAgICAgICBpZiAoIWlyaSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgaXJpIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaW4ge1wiJHtlbnRpdHlUeXBlTmFtZXMuam9pbihcbiAgICAgICAgICAgICAgJ1wiLCBcIidcbiAgICAgICAgICAgICl9XCJ9LmBcbiAgICAgICAgICApO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RW50aXR5T2JqZWN0KFxuICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgdGhpbmdUeXBlLFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICAgIHVzZUxlZ2FjeVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBVbnN1cHBvcnRlZCB0aGluZ1R5cGUgXCIke3RoaW5nVHlwZX1cIiBwcm92aWRlZC4gTXVzdCBiZSBpbiB7XCIke3RoaW5nVHlwZU5hbWVzLmpvaW4oXG4gICAgICAgICAgICAnXCIsIFwiJ1xuICAgICAgICAgICl9XCJ9LmBcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFpcmkgJiYgb250b2xvZ3lJZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9IGVsc2UgaWYgKGlyaSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRFbnRpdHlPYmplY3QoXG4gICAgICAgICAgaXJpLFxuICAgICAgICAgIHRoaW5nVHlwZSxcbiAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGlyaSBvciBvbnRvbG9neUlkIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaXMgbm90IHByb3ZpZGVkLmBcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEVudGl0eVdpdGhFbnRpdHlUeXBlUHJvdmlkZWQoXG4gICAgaXJpOiBzdHJpbmcsXG4gICAgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsXG4gICAgb250b2xvZ3lJZD86IHN0cmluZyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmcsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhblxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIHN3aXRjaCAoZW50aXR5VHlwZSkge1xuICAgICAgY2FzZSBcInRlcm1cIjpcbiAgICAgIGNhc2UgXCJjbGFzc1wiOiAvLyBhbHNvIGFsbG93IFwiY2xhc3NcIiBldmVuIGlmIGl0IHNob3VsZCBhY3R1YWxseSBiZSBcInRlcm1cIlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRUZXJtKFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBpcmkgfSxcbiAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICk7XG5cbiAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgY2FzZSBcImFubm90YXRpb25Qcm9wZXJ0eVwiOlxuICAgICAgY2FzZSBcImRhdGFQcm9wZXJ0eVwiOlxuICAgICAgY2FzZSBcIm9iamVjdFByb3BlcnR5XCI6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFByb3BlcnR5KFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBwcm9wZXJ0eUlyaTogaXJpIH0sXG4gICAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICAgIHVzZUxlZ2FjeVxuICAgICAgICApO1xuXG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRJbmRpdmlkdWFsKFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBpbmRpdmlkdWFsSXJpOiBpcmkgfSxcbiAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdJbnZhbGlkIGVudGl0eSB0eXBlIFwiJyArXG4gICAgICAgICAgICBlbnRpdHlUeXBlICtcbiAgICAgICAgICAgIGBcIi4gTXVzdCBiZSBvbmUgb2YgeyR7ZW50aXR5VHlwZU5hbWVzXG4gICAgICAgICAgICAgIC5tYXAoKGVsZW0pID0+IGBcIiR7ZWxlbX1cImApXG4gICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9fS5gXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlXaXRoSW5mZXJyZWRFbnRpdHlUeXBlKFxuICAgIGlyaTogc3RyaW5nLFxuICAgIG9udG9sb2d5SWQ/OiBzdHJpbmcsXG4gICAgcGFyYW1ldGVyPzogc3RyaW5nXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgLypcbiAgICAgICAgICAgIFRlc3QgYWxsIHR5cGVzIG9mIGVudGl0aWVzICh0ZXJtLCBwcm9wZXJ0eSwgaW5kaXZpZHVhbCkgbWFudWFsbHkgd2l0aCBzZXBhcmF0ZSBxdWVyaWVzIChhcyAvZW50aXRpZXMgZG9lcyBub3QgZXhpc3QgZm9yIGxlZ2FjeSBBUEkpXG4gICAgICAgICAgICAtPiByZXR1cm4gdGhlIHJlc3BvbnNlIG9iamVjdCB3aGljaCByZXNvbHZlcyB3aXRoIGEgY29udGFpbmVkIGVudGl0eVxuICAgICAgICAgICAgLT4gdGhyb3cgZXJyb3IgaWYgbm9uZSBvZiB0aGUgdHlwZXMgY29udGFpbnMgYW4gZW50aXR5XG4gICAgICAgICAgKi9cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHNpZ25hbCA9IGNvbnRyb2xsZXIuc2lnbmFsO1xuXG4gICAgbGV0IHJlc3BvbnNlOyAvLyBzdG9yZXMgdGhlIGVudGl0eSB0byBiZSByZXR1cm5lZCBpbiB0aGUgZW5kXG5cbiAgICBmdW5jdGlvbiBzZXRBbmRTdG9wKHJlczogYW55KSB7XG4gICAgICBpZiAocmVzW1wiX2VtYmVkZGVkXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzcG9uc2UgPSByZXM7XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTsgLy8gYWJvcnQgcXVlcmllcyBmb3Igb3RoZXIgZW50aXR5VHlwZXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgdGhpcy5nZXRUZXJtKFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBpcmkgfSxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB0cnVlLFxuICAgICAgICBzaWduYWxcbiAgICAgICkudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgc2V0QW5kU3RvcChyZXMpO1xuICAgICAgfSksXG4gICAgICB0aGlzLmdldFByb3BlcnR5KFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBwcm9wZXJ0eUlyaTogaXJpIH0sXG4gICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgc2lnbmFsXG4gICAgICApLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgIHNldEFuZFN0b3AocmVzKTtcbiAgICAgIH0pLFxuICAgICAgdGhpcy5nZXRJbmRpdmlkdWFsKFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBpbmRpdmlkdWFsSXJpOiBpcmkgfSxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB0cnVlLFxuICAgICAgICBzaWduYWxcbiAgICAgICkudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgc2V0QW5kU3RvcChyZXMpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAocmVzcG9uc2UgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlc3BvbnNlO1xuICAgIGVsc2UgdGhyb3cgRXJyb3IoXCJJcmkgXCIgKyBpcmkgKyBcIiBjb3VsZCBub3QgYmUgcmVzb2x2ZWQuXCIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFuY2VzdG9ycyhcbiAgICBpcmk6IHN0cmluZyxcbiAgICBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSxcbiAgICBvbnRvbG9neUlkOiBzdHJpbmcsXG4gICAgdXNlTGVnYWN5ID0gZmFsc2UsXG4gICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgPSBmYWxzZVxuICApOiBQcm9taXNlPEVudGl0eVtdPiB7XG4gICAgbGV0IGFuY2VzdG9yczogYW55O1xuICAgIGlmIChpc0NsYXNzVHlwZU5hbWUoZW50aXR5VHlwZSkpIHtcbiAgICAgIGFuY2VzdG9ycyA9IGF3YWl0IHRoaXMubWFrZUNhbGwoXG4gICAgICAgIGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgoXG4gICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgIGlyaSxcbiAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgKX0vaGllcmFyY2hpY2FsQW5jZXN0b3JzYCxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdXNlTGVnYWN5XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbmNlc3RvcnMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgICBgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KFxuICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICBpcmksXG4gICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICl9L2FuY2VzdG9yc2AsXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHVzZUxlZ2FjeVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgbGV0IGxpc3RPZkFuY2VzdG9yT2JqOiBBcnJheTxFbnRpdHk+ID0gW107XG4gICAgICBsZXQgZXh0cmFjdEtleSA9IFwiXCI7XG4gICAgICBzd2l0Y2ggKGVudGl0eVR5cGUpIHtcbiAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgZXh0cmFjdEtleSA9IFwidGVybXNcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRlcm1cIjpcbiAgICAgICAgICBleHRyYWN0S2V5ID0gXCJ0ZXJtc1wiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgICAgICBleHRyYWN0S2V5ID0gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbmRpdmlkdWFsXCI6XG4gICAgICAgICAgZXh0cmFjdEtleSA9IFwiaW5kaXZpZHVhbHNcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkVudGl0eSB0eXBlIGNvdWxkIG5vdCBiZSBjb3JyZWN0bHkgaW5mZXJyZWQuXCIpO1xuICAgICAgfVxuICAgICAgYW5jZXN0b3JzW1wiX2VtYmVkZGVkXCJdW2V4dHJhY3RLZXldLm1hcCgob2JqOiBhbnkpID0+IHtcbiAgICAgICAgbGlzdE9mQW5jZXN0b3JPYmoucHVzaChcbiAgICAgICAgICBjcmVhdGVNb2RlbE9iamVjdCh7IF9lbWJlZGRlZDogeyBbZXh0cmFjdEtleV06IFtvYmpdIH0gfSkgYXMgRW50aXR5XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBsaXN0T2ZBbmNlc3Rvck9iajtcbiAgICB9XG4gICAgcmV0dXJuIGFuY2VzdG9yc1tcImVsZW1lbnRzXCJdLm1hcChcbiAgICAgIChvYmo6IGFueSkgPT4gY3JlYXRlTW9kZWxPYmplY3QoeyBlbGVtZW50czogW29ial0gfSkgYXMgRW50aXR5XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRKU1RyZWUoXG4gICAgaXJpOiBzdHJpbmcsXG4gICAgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsXG4gICAgb250b2xvZ3lJZDogc3RyaW5nXG4gICk6IFByb21pc2U8SlNUcmVlTm9kZVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZUNhbGwoXG4gICAgICBgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIGlyaSwgdHJ1ZSl9L2pzdHJlZWAsXG4gICAgICB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgdmlld01vZGU6IFwiQWxsXCIgfSB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICAvLyBUT0RPOiBEbyB3ZSB3YW50IHRoZSBzYW1lIGJlaGF2aW9yIGFzIEVNQkwgRUJJIChlLmcuIG5vdCBnZXR0aW5nIGluc3RhbmNlcyBmb3IgY2xhc3NlcyBpZiBlbnRpdHlUeXBlICE9IFwiaW5kaXZpZHVhbFwiKT9cbiAgcHVibGljIGFzeW5jIGdldENoaWxkcmVuKFxuICAgIGlyaTogc3RyaW5nLFxuICAgIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLFxuICAgIG9udG9sb2d5SWQ6IHN0cmluZyxcbiAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IGZhbHNlLFxuICAgIHVzZUxlZ2FjeSA9IGZhbHNlXG4gICk6IFByb21pc2U8RW50aXR5W10+IHtcbiAgICBsZXQgY2hpbGRyZW46IGFueTtcbiAgICBpZiAoaXNDbGFzc1R5cGVOYW1lKGVudGl0eVR5cGUpKSB7XG4gICAgICBjaGlsZHJlbiA9IGF3YWl0IHRoaXMubWFrZUNhbGwoXG4gICAgICAgIGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgoXG4gICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICBjbGFzc1R5cGVOYW1lc1swXSxcbiAgICAgICAgICBpcmksXG4gICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICl9L2hpZXJhcmNoaWNhbENoaWxkcmVuYCxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdXNlTGVnYWN5XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaXNJbmRpdmlkdWFsVHlwZU5hbWUoZW50aXR5VHlwZSkpIHtcbiAgICAgIC8vIGVudGl0eVR5cGUgZG9lcyBOT1QgaW5kaWNhdGUgd2hpY2ggdHlwZSB0aGUgZW50aXR5IG9mIHRoZSBwcm92aWRlZCBpcmkgaGFzLCBidXQgd2hpY2ggdHlwZSBvZiBoaWVyYXJjaHkgaXMgZGVzaXJlZFxuICAgICAgLy8gLT4gXCJjbGFzc1wiIGhhcyB0byBiZSBwcm92aWRlZCBmb3IgaW5kaXZpZHVhbCBoaWVyYXJjaHkgYXMgd2VsbCwgYXMgaW5kaXZpZHVhbHMgYXJlIGFsd2F5cyBjaGlsZHJlbiBvZiBjbGFzc2VzXG4gICAgICBpZiAodXNlTGVnYWN5KSB7XG4gICAgICAgIC8vIFRPRE86IERvZXMgZGVzY2VuZGFudHMgYWx3YXlzIHdvcmsgZm9yIHRoaXMgKG9yIGFyZSB0aGVyZSBjbGFzc2VzIHdpdGggYm90aCBpbmRpdmlkdWFscyBhbmQgY2xhc3NlcyBhcyBkZXNjZW5kYW50cyk/XG4gICAgICAgIGNoaWxkcmVuID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChcbiAgICAgICAgICBgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIGNsYXNzVHlwZU5hbWVzWzBdLFxuICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICAgKX0vZGVzY2VuZGFudHNgLFxuICAgICAgICAgIHsgcGFyYW1zOiB7IHNpemU6IFwiMTAwMFwiIH0gfSxcbiAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVuID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChcbiAgICAgICAgICBgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIGNsYXNzVHlwZU5hbWVzWzBdLFxuICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICAgKX0vaW5zdGFuY2VzYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgICBgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KFxuICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICBpcmksXG4gICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICl9L2NoaWxkcmVuYCxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdXNlTGVnYWN5XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh1c2VMZWdhY3kpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbltcIl9lbWJlZGRlZFwiXVtcbiAgICAgICAgaXNJbmRpdmlkdWFsVHlwZU5hbWUoZW50aXR5VHlwZSlcbiAgICAgICAgICA/IHBsdXJhbGl6ZVR5cGUoY2xhc3NUeXBlTmFtZXNbMF0sIHVzZUxlZ2FjeSlcbiAgICAgICAgICA6IHBsdXJhbGl6ZVR5cGUoZW50aXR5VHlwZSwgdXNlTGVnYWN5KVxuICAgICAgXS5tYXAoXG4gICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICBjcmVhdGVNb2RlbE9iamVjdCh7XG4gICAgICAgICAgICBbXCJfZW1iZWRkZWRcIl06IHtcbiAgICAgICAgICAgICAgW2lzSW5kaXZpZHVhbFR5cGVOYW1lKGVudGl0eVR5cGUpXG4gICAgICAgICAgICAgICAgPyBwbHVyYWxpemVUeXBlKGNsYXNzVHlwZU5hbWVzWzBdLCB1c2VMZWdhY3kpXG4gICAgICAgICAgICAgICAgOiBwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUpXTogW29ial0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pIGFzIEVudGl0eVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuW1wiZWxlbWVudHNcIl0ubWFwKFxuICAgICAgICAob2JqOiBhbnkpID0+IGNyZWF0ZU1vZGVsT2JqZWN0KHsgZWxlbWVudHM6IFtvYmpdIH0pIGFzIEVudGl0eVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Um9vdEVudGl0aWVzKFxuICAgIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLFxuICAgIG9udG9sb2d5SWQ6IHN0cmluZyxcbiAgICBwcmVmZXJyZWRSb290cyA9IGZhbHNlLFxuICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzID0gZmFsc2UsXG4gICAgdXNlTGVnYWN5ID0gZmFsc2VcbiAgKTogUHJvbWlzZTxFbnRpdHlbXT4ge1xuICAgIGlmICh1c2VMZWdhY3kpIHtcbiAgICAgIGlmIChpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSkge1xuICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsc1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiAvcHJlZmVycmVkUm9vdHMgcm91dGUgc2hvdWxkIGV4aXN0IGluIGxlZ2FjeSBhcGksIGJ1dCBkb2VzIG5vdCB3b3JrXG4gICAgICAgIGNvbnN0IHJvb3RzID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChcbiAgICAgICAgICBgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgICApfS9yb290c2AsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHJvb3RzW1wiX2VtYmVkZGVkXCJdW3BsdXJhbGl6ZVR5cGUoZW50aXR5VHlwZSwgdXNlTGVnYWN5KV0ubWFwKFxuICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHtcbiAgICAgICAgICAgICAgW1wiX2VtYmVkZGVkXCJdOiB7IFtwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUsIHVzZUxlZ2FjeSldOiBbb2JqXSB9LFxuICAgICAgICAgICAgfSkgYXMgRW50aXR5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSkge1xuICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsc1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByb290cyA9IGF3YWl0IHRoaXMubWFrZUNhbGwoXG4gICAgICAgICAgYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChcbiAgICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICAgKX1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICBzaXplOiBcIjEwMDBcIixcbiAgICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICAgICAgICBoYXNEaXJlY3RQYXJlbnRzOiBwcmVmZXJyZWRSb290cyA/IHVuZGVmaW5lZCA6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgaXNQcmVmZXJyZWRSb290OiBwcmVmZXJyZWRSb290cyA/IFwidHJ1ZVwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZUxlZ2FjeVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiByb290c1tcImVsZW1lbnRzXCJdLm1hcChcbiAgICAgICAgICAob2JqOiBhbnkpID0+IGNyZWF0ZU1vZGVsT2JqZWN0KHsgZWxlbWVudHM6IFtvYmpdIH0pIGFzIEVudGl0eVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDbGFzc0luc3RhbmNlcyhcbiAgICBpcmk6IHN0cmluZyxcbiAgICBvbnRvbG9neUlkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxJbmRpdmlkdWFsW10+IHtcbiAgICBjb25zdCBpbnN0YW5jZXMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgY2xhc3NUeXBlTmFtZXNbMF0sXG4gICAgICAgIGlyaSxcbiAgICAgICAgZmFsc2VcbiAgICAgICl9L2luZGl2aWR1YWxzYCxcbiAgICAgIHsgcGFyYW1zOiB7IHNpemU6IFwiMTAwMFwiIH0gfSxcbiAgICAgIGZhbHNlXG4gICAgKTtcblxuICAgIHJldHVybiBpbnN0YW5jZXNbXCJlbGVtZW50c1wiXS5tYXAoXG4gICAgICAob2JqOiBhbnkpID0+IGNyZWF0ZU1vZGVsT2JqZWN0KHsgZWxlbWVudHM6IFtvYmpdIH0pIGFzIEluZGl2aWR1YWxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkSGllcmFyY2h5V2l0aElyaShcbiAgICBwcm9wczogQnVpbGRIaWVyYXJjaHlQcm9wcyAmIEhpZXJhcmNoeUlyaVByb3BcbiAgKTogUHJvbWlzZTxIaWVyYXJjaHk+IHtcbiAgICBjb25zdCB7XG4gICAgICBpcmksXG4gICAgICBvbnRvbG9neUlkLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICAgIHByZWZlcnJlZFJvb3RzID0gZmFsc2UsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IGZhbHNlLFxuICAgICAga2VlcEV4cGFuc2lvblN0YXRlcyA9IHRydWUsXG4gICAgICBzaG93U2libGluZ3NPbkluaXQgPSBmYWxzZSxcbiAgICAgIHVzZUxlZ2FjeSA9IGZhbHNlLFxuICAgIH0gPSBwcm9wcztcblxuICAgIGlmIChpcmkpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEVudGl0eU9iamVjdChcbiAgICAgICAgaXJpLFxuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICBcIlwiLFxuICAgICAgICB1c2VMZWdhY3lcbiAgICAgICkudGhlbigoZW50aXR5KSA9PlxuICAgICAgICB0aGlzLmJ1aWxkSGllcmFyY2h5V2l0aEVudGl0eSh7XG4gICAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSB8fCAoZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZSksXG4gICAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCB8fCBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgICBwcmVmZXJyZWRSb290czogcHJlZmVycmVkUm9vdHMsXG4gICAgICAgICAgbWFpbkVudGl0eTogZW50aXR5LFxuICAgICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0OiBzaG93U2libGluZ3NPbkluaXQsXG4gICAgICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZW50aXR5VHlwZSA9PSB1bmRlZmluZWQgfHwgb250b2xvZ3lJZCA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiRWl0aGVyIGlyaSBvciBvbnRvbG9neUlkIGFuZCBlbnRpdHlUeXBlIGhhdmUgdG8gYmUgcHJvdmlkZWQuXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJ1aWxkUm9vdEhpZXJhcmNoeSh7XG4gICAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG4gICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsXG4gICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgcHJlZmVycmVkUm9vdHM6IHByZWZlcnJlZFJvb3RzLFxuICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBrZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgICBzaG93U2libGluZ3NPbkluaXQ6IHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMganNUcmVlTm9kZVRvRW50aXR5RGF0YShqc1RyZWVOb2RlOiBKU1RyZWVOb2RlKTogRW50aXR5RGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlyaToganNUcmVlTm9kZS5pcmksXG4gICAgICBsYWJlbDoganNUcmVlTm9kZS50ZXh0LFxuICAgICAgaGFzQ2hpbGRyZW46IGpzVHJlZU5vZGUuY2hpbGRyZW4gfHwganNUcmVlTm9kZS5zdGF0ZS5vcGVuZWQsXG4gICAgICBwYXJlbnRzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGVudGl0eVRvRW50aXR5RGF0YShlbnRpdHk6IEVudGl0eSk6IEVudGl0eURhdGEge1xuICAgIHJldHVybiB7XG4gICAgICBpcmk6IGVudGl0eS5nZXRJcmkoKSxcbiAgICAgIGxhYmVsOiBhc0FycmF5KGVudGl0eS5nZXRMYWJlbCgpKVswXSxcbiAgICAgIGRlZmluZWRCeTogZW50aXR5LmdldERlZmluZWRCeSgpLFxuICAgICAgaGFzQ2hpbGRyZW46IGVudGl0eS5oYXNDaGlsZHJlbigpLFxuICAgICAgbnVtRGVzY2VuZGFudHM6XG4gICAgICAgIGVudGl0eS5nZXROdW1IaWVyYXJjaGljYWxEZXNjZW5kYW50cygpIHx8IGVudGl0eS5nZXROdW1EZXNjZW5kYW50cygpLFxuICAgICAgcGFyZW50czogZW50aXR5LmdldFBhcmVudHMoKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkUm9vdEhpZXJhcmNoeShcbiAgICBwcm9wczoge1xuICAgICAgb250b2xvZ3lJZDogc3RyaW5nO1xuICAgICAgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWU7XG4gICAgfSAmIEJ1aWxkSGllcmFyY2h5UHJvcHNcbiAgKTogUHJvbWlzZTxIaWVyYXJjaHk+IHtcbiAgICBjb25zdCB7XG4gICAgICBvbnRvbG9neUlkLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICAgIHByZWZlcnJlZFJvb3RzLFxuICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICB1c2VMZWdhY3ksXG4gICAgfSA9IHByb3BzO1xuXG4gICAgLyogUVVFUlkgcm9vdCBlbnRpdGllcyAqL1xuICAgIGNvbnN0IHJvb3RFbnRpdGllc0RhdGEgPSAoXG4gICAgICBhd2FpdCB0aGlzLmdldFJvb3RFbnRpdGllcyhcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgcHJlZmVycmVkUm9vdHMsXG4gICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICB1c2VMZWdhY3lcbiAgICAgIClcbiAgICApXG4gICAgICAubWFwKChlbnRpdHkpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhKGVudGl0eSkpXG4gICAgICAuZmlsdGVyKChyb290KSA9PiAhaXNUb3Aocm9vdC5pcmkpKTtcbiAgICAvKiAtLS0gKi9cblxuICAgIC8qIElOSVRJQUxJWkUgZW50aXRpZXNEYXRhLCBwYXJlbnRDaGlsZFJlbGF0aW9ucyAqL1xuICAgIGNvbnN0IHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+ID0gbmV3IE1hcDxcbiAgICAgIHN0cmluZyxcbiAgICAgIFBhcmVudENoaWxkUmVsYXRpb25bXVxuICAgID4oKTtcbiAgICBjb25zdCBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+ID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+KCk7XG4gICAgZm9yIChjb25zdCBlbnRpdHlEYXRhIG9mIHJvb3RFbnRpdGllc0RhdGEpIHtcbiAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChlbnRpdHlEYXRhLmlyaSwgW10pOyAvLyBpbml0aWFsaXplIHdpdGggZW1wdHkgYXJyYXlcbiAgICAgIGVudGl0aWVzRGF0YS5zZXQoZW50aXR5RGF0YS5pcmksIGVudGl0eURhdGEpO1xuICAgIH1cbiAgICAvKiAtLS0gKi9cblxuICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBuZXcgU2V0KCksXG4gICAgICByb290czogcm9vdEVudGl0aWVzRGF0YVxuICAgICAgICAubWFwKChyb290KSA9PiBuZXcgVHJlZU5vZGUocm9vdCkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgIChhLmVudGl0eURhdGEubGFiZWwgfHwgYS5lbnRpdHlEYXRhLmlyaSkubG9jYWxlQ29tcGFyZShcbiAgICAgICAgICAgIGIuZW50aXR5RGF0YS5sYWJlbCB8fCBiLmVudGl0eURhdGEuaXJpXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgYXBpOiBuZXcgT2xzQXBpKHRoaXMuYXhpb3NJbnN0YW5jZS5nZXRVcmkoKSksXG4gICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcbiAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IHByb3BzLmtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBidWlsZEhpZXJhcmNoeVdpdGhFbnRpdHkoXG4gICAgcHJvcHM6IHtcbiAgICAgIG1haW5FbnRpdHk6IEVudGl0eTtcbiAgICAgIG9udG9sb2d5SWQ6IHN0cmluZztcbiAgICAgIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lO1xuICAgIH0gJiBCdWlsZEhpZXJhcmNoeVByb3BzXG4gICk6IFByb21pc2U8SGllcmFyY2h5PiB7XG4gICAgY29uc3Qge1xuICAgICAgbWFpbkVudGl0eSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgcHJlZmVycmVkUm9vdHMsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgIHVzZUxlZ2FjeSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICAvKiBMT0FEIGFuY2VzdG9ycyAqL1xuICAgIGxldCBlbnRpdGllczogRW50aXR5RGF0YVtdID0gW107XG5cbiAgICBpZiAodXNlTGVnYWN5KSB7XG4gICAgICAvLyBUT0RPOiBKU1RyZWUgc29tZXRpbWVzIHJldHVybnMgc21hbGxlciB0cmVlcyB0aGFuIHdvdWxkIGJlIHBvc3NpYmxlIHZpYSBxdWVyeWluZyBoaWVyYXJjaGljYWwgYW5jZXN0b3JzIGFuZCBhbGwgY2hpbGRyZW4gb2YgdGhvc2UgKGUuZy4gaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1VCRVJPTl8yMDAxNzQ3IC0+IHN0cmFuZ2UgYW5kIG5vdCByZWFsbHkgdXNlZnVsIGhpZXJhcmNoeSBiZWNhdXNlIG1hbnkgZW50aXRpZXMgYXJlIGJvdGggc2libGluZyBhbmQgY2hpbGRyZW4gb2Ygb3RoZXIgZW50aXRpZXMgKGlzIGl0IHdyb25nIHRvIHRha2UgaGllcmFyY2hpY2FsUGFyZW50IGluc3RlYWQgb2YgZGlyZWN0UGFyZW50IGluIGVudGl0eVRvRW50aXR5RGF0YVRvSGllcmFyY2h5PyBFTUJMLUVCSSBkb2VzIGl0IGxpa2UgdGhhdCBhcyB3ZWxsKSlcbiAgICAgIC8vICAgICAgIFF1ZXN0aW9uOiBTaG91bGQgd2UgcHJlZmVyIGNvbXBsZXRlIGhpZXJhcmNoaWVzIChxdWVyeSAvaGllcmFyY2hpY2FsQW5jZXN0b3JzICsgL2NoaWxkcmVuIGZvciBlYWNoKSBvciBzbGltIHF1ZXJpZXMgKHF1ZXJ5IC9qc3RyZWUpP1xuICAgICAgY29uc3QganNUcmVlID0gYXdhaXQgdGhpcy5nZXRKU1RyZWUoXG4gICAgICAgIG1haW5FbnRpdHkuZ2V0SXJpKCksXG4gICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgIG9udG9sb2d5SWRcbiAgICAgICk7XG4gICAgICBjb25zdCBpZFRvSXJpOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgIGNvbnN0IHBhcmVudHM6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PiA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcblxuICAgICAgZm9yIChjb25zdCBqc1RyZWVOb2RlIG9mIGpzVHJlZSkge1xuICAgICAgICBpZFRvSXJpLnNldChqc1RyZWVOb2RlLmlkLCBqc1RyZWVOb2RlLmlyaSk7XG4gICAgICAgIHBhcmVudHMuc2V0KGpzVHJlZU5vZGUuaXJpLCBuZXcgU2V0PHN0cmluZz4oKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QganNUcmVlTm9kZSBvZiBqc1RyZWUpIHtcbiAgICAgICAgY29uc3QgcGFyQXJyID0gcGFyZW50cy5nZXQoanNUcmVlTm9kZS5pcmkpO1xuICAgICAgICBjb25zdCBwYXJJcmkgPSBpZFRvSXJpLmdldChqc1RyZWVOb2RlLnBhcmVudCk7XG4gICAgICAgIGlmIChwYXJBcnIgIT0gdW5kZWZpbmVkICYmIHBhcklyaSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXJBcnIuYWRkKHBhcklyaSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZW50aXRpZXMgPSBbXTtcbiAgICAgIGNvbnN0IGluQXJyID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgIGZvciAoY29uc3QganNUcmVlTm9kZSBvZiBqc1RyZWUpIHtcbiAgICAgICAgaWYgKCFpbkFyci5oYXMoanNUcmVlTm9kZS5pcmkpKSB7XG4gICAgICAgICAgaW5BcnIuYWRkKGpzVHJlZU5vZGUuaXJpKTtcblxuICAgICAgICAgIGVudGl0aWVzLnB1c2godGhpcy5qc1RyZWVOb2RlVG9FbnRpdHlEYXRhKGpzVHJlZU5vZGUpKTtcbiAgICAgICAgICBjb25zdCBwYXIgPSBwYXJlbnRzLmdldChqc1RyZWVOb2RlLmlyaSk7XG4gICAgICAgICAgaWYgKHBhciAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICBlbnRpdGllc1tlbnRpdGllcy5sZW5ndGggLSAxXS5wYXJlbnRzID1cbiAgICAgICAgICAgICAgUmVpZmllZC5mcm9tSnNvbihBcnJheS5mcm9tKHBhci52YWx1ZXMoKSkpIHx8IFtdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFuY2VzdG9ycyA9IGF3YWl0IHRoaXMuZ2V0QW5jZXN0b3JzKFxuICAgICAgICBtYWluRW50aXR5LmdldElyaSgpLFxuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICBvbnRvbG9neUlkIHx8IG1haW5FbnRpdHkuZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllc1xuICAgICAgKTtcbiAgICAgIGVudGl0aWVzID0gW1xuICAgICAgICB0aGlzLmVudGl0eVRvRW50aXR5RGF0YShtYWluRW50aXR5KSxcbiAgICAgICAgLi4uYW5jZXN0b3JzLm1hcCgoZW50aXR5KSA9PiB0aGlzLmVudGl0eVRvRW50aXR5RGF0YShlbnRpdHkpKSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIHRvcCBlbnRpdGllc1xuICAgIGVudGl0aWVzID0gZW50aXRpZXMuZmlsdGVyKChlKSA9PiAhaXNUb3AoZS5pcmkpKTtcbiAgICAvKiAtLS0gKi9cblxuICAgIC8qIEJVSUxEIHBhcmVudENoaWxkUmVsYXRpb25zICovXG4gICAgY29uc3QgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4gPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgUGFyZW50Q2hpbGRSZWxhdGlvbltdXG4gICAgPigpO1xuICAgIGNvbnN0IGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+ID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+KCk7XG5cbiAgICAvLyBpbml0aWFsaXplIHBhcmVudENoaWxkUmVsYXRpb25zICYgZW50aXRpZXNEYXRhXG4gICAgZm9yIChjb25zdCBlbnRpdHlEYXRhIG9mIGVudGl0aWVzKSB7XG4gICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucy5zZXQoZW50aXR5RGF0YS5pcmksIFtdKTsgLy8gaW5pdGlhbGl6ZSB3aXRoIGVtcHR5IGFycmF5XG4gICAgICBlbnRpdGllc0RhdGEuc2V0KGVudGl0eURhdGEuaXJpLCBlbnRpdHlEYXRhKTtcbiAgICB9XG5cbiAgICBpZiAoc2hvd1NpYmxpbmdzT25Jbml0KSB7XG4gICAgICAvLyBhZGRpdGlvbmFsbHkgbG9hZCBzaWJsaW5ncyBmcm9tIGFwaVxuICAgICAgY29uc3QgcmVhbEVudGl0eVR5cGUgPSBlbnRpdHlUeXBlIHx8IG1haW5FbnRpdHkuZ2V0VHlwZSgpO1xuICAgICAgY29uc3QgZW50aXR5VHlwZUZvclF1ZXJ5ID1cbiAgICAgICAgcmVhbEVudGl0eVR5cGUgPT0gXCJpbmRpdmlkdWFsXCIgPyBcImNsYXNzXCIgOiByZWFsRW50aXR5VHlwZTsgLy8gVE9ETzogb25seSByZWxldmFudCBmb3IgZW50aXR5VHlwZSA9PSBcImluZGl2aWR1YWxcIiAobWF5YmUgd2UgZG9uJ3QgZXZlbiBuZWVkIHRoaXMgYXMgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzIGlzIG5vdCB5ZXQgZGV0ZXJtaW5lZClcblxuICAgICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBlbnRpdHlEYXRhIG9mIGVudGl0aWVzKSB7XG4gICAgICAgIGlmIChlbnRpdHlEYXRhLmlyaSAhPSBtYWluRW50aXR5LmdldElyaSgpKSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICAgICAgICB0aGlzLmdldENoaWxkcmVuKFxuICAgICAgICAgICAgICAgIGVudGl0eURhdGEuaXJpLFxuICAgICAgICAgICAgICAgIGVudGl0eVR5cGVGb3JRdWVyeSxcbiAgICAgICAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICAgICAgICAgIHVzZUxlZ2FjeVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnRoZW4oKGNoaWxkcmVuKSA9PlxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4gdGhpcy5lbnRpdHlUb0VudGl0eURhdGEoY2hpbGQpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAudGhlbigoY2hpbGRyZW4pID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhckNoaWxkUmVsOiBQYXJlbnRDaGlsZFJlbGF0aW9uW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgZW50aXRpZXNEYXRhLnNldChjaGlsZC5pcmksIGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLnBhcmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJSZWxhdGlvbiA9IGNoaWxkLnBhcmVudHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHBhcikgPT4gcGFyLnZhbHVlID09IGVudGl0eURhdGEuaXJpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBwYXJDaGlsZFJlbC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSXJpOiBjaGlsZC5pcmksXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhclJlbGF0aW9uLmxlbmd0aCA+IDAgJiYgcGFyUmVsYXRpb25bMF0uZ2V0TWV0YWRhdGEoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcGFyUmVsYXRpb25bMF0uZ2V0TWV0YWRhdGEoKVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGlsZFJlbGF0aW9uVG9QYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IC8vIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KGVudGl0eURhdGEuaXJpLCBwYXJDaGlsZFJlbCk7XG4gICAgICAgICAgICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQuYWRkKGVudGl0eURhdGEuaXJpKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocHJvbWlzZXMpO1xuXG4gICAgICAvLyBUT0RPOiBvbmx5IHJlbGV2YW50IGZvciBlbnRpdHlUeXBlID09IFwiaW5kaXZpZHVhbFwiIChtYXliZSB3ZSBkb24ndCBldmVuIG5lZWQgdGhpcyBhcyBiZWhhdmlvdXIgZm9yIGluZGl2aWR1YWwgaGllcmFyY2hpZXMgaXMgbm90IHlldCBkZXRlcm1pbmVkKVxuICAgICAgaWYgKHJlYWxFbnRpdHlUeXBlID09IFwiaW5kaXZpZHVhbFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGFyZW50UmVpZmllZCBvZiBtYWluRW50aXR5LmdldFBhcmVudHMoKSkge1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gKFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRDaGlsZHJlbihcbiAgICAgICAgICAgICAgcGFyZW50UmVpZmllZC52YWx1ZSxcbiAgICAgICAgICAgICAgcmVhbEVudGl0eVR5cGUsXG4gICAgICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKS5tYXAoKGNoaWxkKSA9PiB0aGlzLmVudGl0eVRvRW50aXR5RGF0YShjaGlsZCkpO1xuXG4gICAgICAgICAgY29uc3QgcGFyQ2hpbGRSZWw6IFBhcmVudENoaWxkUmVsYXRpb25bXSA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHBhckNoaWxkUmVsLnB1c2goe1xuICAgICAgICAgICAgICBjaGlsZElyaTogY2hpbGQuaXJpLFxuICAgICAgICAgICAgICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6XG4gICAgICAgICAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZVwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChwYXJlbnRSZWlmaWVkLnZhbHVlLCBwYXJDaGlsZFJlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBlbnRpdHlEYXRhIG9mIGVudGl0aWVzKSB7XG4gICAgICAgIGlmIChlbnRpdHlEYXRhLnBhcmVudHMpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRzID0gZW50aXR5RGF0YS5wYXJlbnRzLmZpbHRlcihcbiAgICAgICAgICAgIChwYXJlbnRSZWlmaWVkOiBSZWlmaWVkPHN0cmluZz4pID0+ICFpc1RvcChwYXJlbnRSZWlmaWVkLnZhbHVlKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZW50aXR5RGF0YS5pcmkgPT0gbWFpbkVudGl0eT8uZ2V0SXJpKCkgJiZcbiAgICAgICAgICAgIGlzSW5kaXZpZHVhbFR5cGVOYW1lKGVudGl0eVR5cGUgfHwgbWFpbkVudGl0eS5nZXRUeXBlKCkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmVudFJlaWZpZWQgb2YgcGFyZW50cykge1xuICAgICAgICAgICAgICBpZiAocGFyZW50Q2hpbGRSZWxhdGlvbnMuaGFzKHBhcmVudFJlaWZpZWQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KHBhcmVudFJlaWZpZWQudmFsdWUpPy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGNoaWxkSXJpOiBlbnRpdHlEYXRhLmlyaSxcbiAgICAgICAgICAgICAgICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudDpcbiAgICAgICAgICAgICAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZVwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFyZW50UmVpZmllZCBvZiBwYXJlbnRzKSB7XG4gICAgICAgICAgICAgIGlmIChwYXJlbnRDaGlsZFJlbGF0aW9ucy5oYXMocGFyZW50UmVpZmllZC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucy5nZXQocGFyZW50UmVpZmllZC52YWx1ZSk/LnB1c2goe1xuICAgICAgICAgICAgICAgICAgY2hpbGRJcmk6IGVudGl0eURhdGEuaXJpLFxuICAgICAgICAgICAgICAgICAgY2hpbGRSZWxhdGlvblRvUGFyZW50OiBwYXJlbnRSZWlmaWVkLmdldE1ldGFkYXRhKClcbiAgICAgICAgICAgICAgICAgICAgPyBwYXJlbnRSZWlmaWVkLmdldE1ldGFkYXRhKClbXCJjaGlsZFJlbGF0aW9uVG9QYXJlbnRcIl1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzb3J0IHBhcmVudENoaWxkUmVsYXRpb25zXG4gICAgZm9yIChjb25zdCByZWwgb2YgcGFyZW50Q2hpbGRSZWxhdGlvbnMudmFsdWVzKCkpXG4gICAgICByZWwuc29ydCgoYSwgYikgPT5cbiAgICAgICAgKGVudGl0aWVzRGF0YS5nZXQoYS5jaGlsZElyaSk/LmxhYmVsIHx8IGEuY2hpbGRJcmkpLmxvY2FsZUNvbXBhcmUoXG4gICAgICAgICAgZW50aXRpZXNEYXRhLmdldChiLmNoaWxkSXJpKT8ubGFiZWwgfHwgYi5jaGlsZElyaVxuICAgICAgICApXG4gICAgICApO1xuICAgIC8qIC0tLSAqL1xuXG4gICAgLyogQlVJTEQgcm9vdEVudGl0aWVzICovXG4gICAgY29uc3Qgcm9vdEVudGl0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChwcmVmZXJyZWRSb290cykge1xuICAgICAgY29uc3QgcHJlZmVycmVkUm9vdEVudGl0aWVzID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmdldE9udG9sb2d5T2JqZWN0KG9udG9sb2d5SWQsIHVuZGVmaW5lZCwgdXNlTGVnYWN5KVxuICAgICAgKS5nZXRQcmVmZXJyZWRSb290cygpO1xuICAgICAgZm9yIChjb25zdCBlIG9mIHByZWZlcnJlZFJvb3RFbnRpdGllcykge1xuICAgICAgICBpZiAoZW50aXRpZXNEYXRhLmhhcyhlKSkgcm9vdEVudGl0aWVzLnB1c2goZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgZW50aXR5RGF0YSBvZiBlbnRpdGllcykge1xuICAgICAgICBpZiAoZW50aXR5RGF0YS5wYXJlbnRzKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50cyA9IGVudGl0eURhdGEucGFyZW50cy5maWx0ZXIoXG4gICAgICAgICAgICAocGFyZW50UmVpZmllZDogUmVpZmllZDxzdHJpbmc+KSA9PiAhaXNUb3AocGFyZW50UmVpZmllZC52YWx1ZSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChwYXJlbnRzLmxlbmd0aCA9PSAwKSByb290RW50aXRpZXMucHVzaChlbnRpdHlEYXRhLmlyaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLyogLS0tICovXG5cbiAgICBmdW5jdGlvbiBjcmVhdGVUcmVlTm9kZShcbiAgICAgIGVudGl0eURhdGE6IEVudGl0eURhdGEsXG4gICAgICBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPixcbiAgICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudD86IHN0cmluZ1xuICAgICk6IFRyZWVOb2RlIHtcbiAgICAgIGN5Y2xlQ2hlY2suYWRkKGVudGl0eURhdGEuaXJpKTsgLy8gYWRkIGN1cnJlbnQgZW50aXR5IHRvIGN5Y2xlIGNoZWNrIHNldFxuXG4gICAgICBjb25zdCBub2RlID0gbmV3IFRyZWVOb2RlKGVudGl0eURhdGEpO1xuICAgICAgbm9kZS5jaGlsZFJlbGF0aW9uVG9QYXJlbnQgPSBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkUmVsYXRpb25zLmdldChlbnRpdHlEYXRhLmlyaSkgfHwgW107XG5cbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgIC8vIGN5Y2xpYyB0cmVlLCBza2lwIGN5Y2xlXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoaWxkRGF0YSA9IGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpO1xuICAgICAgICBpZiAoY2hpbGREYXRhICE9IHVuZGVmaW5lZClcbiAgICAgICAgICBub2RlLmFkZENoaWxkKFxuICAgICAgICAgICAgY3JlYXRlVHJlZU5vZGUoY2hpbGREYXRhLCBjeWNsZUNoZWNrLCBjaGlsZC5jaGlsZFJlbGF0aW9uVG9QYXJlbnQpXG4gICAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoID4gMCkgbm9kZS5leHBhbmRlZCA9IHRydWU7XG5cbiAgICAgIGN5Y2xlQ2hlY2suZGVsZXRlKGVudGl0eURhdGEuaXJpKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGNvbnN0IGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIENvbnRhaW5zIGlyaXMgb2YgYWxsIGVudGl0aWVzIHRoYXQgaGF2ZSBvY2N1cnJlZCB3aXRoaW4gdGhlIGN1cnJlbnQgcmVjdXJzaW9uIGJyYW5jaC4gSXMgdXNlZCB0byBjaGVjayBmb3IgY3ljbGVzLlxuXG4gICAgcmV0dXJuIG5ldyBIaWVyYXJjaHkoe1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IHBhcmVudENoaWxkUmVsYXRpb25zLFxuICAgICAgZW50aXRpZXNEYXRhOiBlbnRpdGllc0RhdGEsXG4gICAgICBhbGxDaGlsZHJlblByZXNlbnQ6IGFsbENoaWxkcmVuUHJlc2VudCxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICByb290czogcm9vdEVudGl0aWVzXG4gICAgICAgIC5tYXAoKHJvb3RFbnRpdHkpID0+XG4gICAgICAgICAgY3JlYXRlVHJlZU5vZGUoZW50aXRpZXNEYXRhLmdldChyb290RW50aXR5KSEsIGN5Y2xlQ2hlY2spXG4gICAgICAgIClcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgKGEuZW50aXR5RGF0YS5sYWJlbCB8fCBhLmVudGl0eURhdGEuaXJpKS5sb2NhbGVDb21wYXJlKFxuICAgICAgICAgICAgYi5lbnRpdHlEYXRhLmxhYmVsIHx8IGIuZW50aXR5RGF0YS5pcmlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICBhcGk6IG5ldyBPbHNBcGkodGhpcy5heGlvc0luc3RhbmNlLmdldFVyaSgpKSxcbiAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxuICAgICAgbWFpbkVudGl0eUlyaTogbWFpbkVudGl0eT8uZ2V0SXJpKCksXG4gICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEhpZXJhcmNoeUNoaWxkcmVuKFxuICAgIHByb3BzOiBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wc1xuICApOiBQcm9taXNlPEVudGl0eURhdGFbXT4ge1xuICAgIGlmIChwcm9wcy5lbnRpdHlUeXBlID09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IEVycm9yKFwiRW50aXR5VHlwZSBoYXMgdG8gYmUgcHJvdmlkZWQgdG8gbG9hZCBjaGlsZHJlbiBpbiBPTFMuXCIpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Q2hpbGRyZW4oXG4gICAgICAgIHByb3BzLm5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSxcbiAgICAgICAgcHJvcHMuZW50aXR5VHlwZSxcbiAgICAgICAgcHJvcHMub250b2xvZ3lJZCxcbiAgICAgICAgcHJvcHMuaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgIHByb3BzLnVzZUxlZ2FjeVxuICAgICAgKVxuICAgICkubWFwKChlbnRpdHkpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhKGVudGl0eSkpO1xuICB9XG59XG4iLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL3NjcmVlbl9yZWFkZXJfb25seSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTY3JlZW5SZWFkZXJMaXZlID0gZnVuY3Rpb24gRXVpU2NyZWVuUmVhZGVyTGl2ZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgX3JlZiRpc0FjdGl2ZSA9IF9yZWYuaXNBY3RpdmUsXG4gICAgaXNBY3RpdmUgPSBfcmVmJGlzQWN0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRpc0FjdGl2ZSxcbiAgICBfcmVmJHJvbGUgPSBfcmVmLnJvbGUsXG4gICAgcm9sZSA9IF9yZWYkcm9sZSA9PT0gdm9pZCAwID8gJ3N0YXR1cycgOiBfcmVmJHJvbGUsXG4gICAgX3JlZiRhcmlhTGl2ZSA9IF9yZWZbJ2FyaWEtbGl2ZSddLFxuICAgIGFyaWFMaXZlID0gX3JlZiRhcmlhTGl2ZSA9PT0gdm9pZCAwID8gJ3BvbGl0ZScgOiBfcmVmJGFyaWFMaXZlLFxuICAgIF9yZWYkZm9jdXNSZWdpb25PblRleCA9IF9yZWYuZm9jdXNSZWdpb25PblRleHRDaGFuZ2UsXG4gICAgZm9jdXNSZWdpb25PblRleHRDaGFuZ2UgPSBfcmVmJGZvY3VzUmVnaW9uT25UZXggPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRmb2N1c1JlZ2lvbk9uVGV4O1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHRvZ2dsZSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0VG9nZ2xlID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIGZvY3VzUmVmID0gdXNlUmVmKG51bGwpO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHNldFRvZ2dsZShmdW5jdGlvbiAodG9nZ2xlKSB7XG4gICAgICByZXR1cm4gIXRvZ2dsZTtcbiAgICB9KTtcbiAgfSwgW2NoaWxkcmVuXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZvY3VzUmVmLmN1cnJlbnQgIT09IG51bGwgJiYgZm9jdXNSZWdpb25PblRleHRDaGFuZ2UpIHtcbiAgICAgIGZvY3VzUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFt0b2dnbGUsIGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlXSk7XG4gIHJldHVybiAoXG4gICAgLyoqXG4gICAgICogSW50ZW50aW9uYWxseSB1c2VzIHR3byBwZXJzaXN0ZW50IGxpdmUgcmVnaW9ucyB3aXRoIG9zY2lsbGF0aW5nIGNvbnRlbnQgdXBkYXRlcy5cbiAgICAgKiBUaGlzIHJlc29sdmVzIHRoZSBwcm9ibGVtIG9mIGR1cGxpY2F0ZSBzY3JlZW4gcmVhZGVyIGFubm91bmNlbWVudHMgaW4gcmFwaWQgc3VjY2Vzc2lvblxuICAgICAqIGNhdXNlZCBieSBSZWFjdCdzIHZpcnR1YWwgRE9NIGJlaGF2aW91ciAoaHR0cHM6Ly9naXRodWIuY29tL252YWNjZXNzL252ZGEvaXNzdWVzLzc5OTYjaXNzdWVjb21tZW50LTQxMzY0MTcwOSlcbiAgICAgKlxuICAgICAqIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWxwaGFnb3YvYWNjZXNzaWJsZS1hdXRvY29tcGxldGUvYmxvYi9hNzEwNmYwMzE1MDk0MWZjMTVlNmMxY2ViMGE5MGU4ODcyZmE4NmVmL3NyYy9zdGF0dXMuanNcbiAgICAgKiBEZWJvdW5jaW5nIHdhcyBub3QgbmVlZGVkIGZvciB0aGlzIGNhc2UsIGJ1dCBjb3VsZCBwcm92ZSB0byBiZSB1c2VmdWwgZm9yIGZ1dHVyZSB1c2UgY2FzZXMuXG4gICAgICogU2VlIGFsc28gaHR0cHM6Ly9naXRodWIuY29tL0FsbWVyb1N0ZXluL3JlYWN0LWFyaWEtbGl2ZSBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2RlcXVlbGFicy9uZ0ExMXlcbiAgICAgKiBmb3IgbW9yZSBleGFtcGxlcyBvZiB0aGUgZG91YmxlIHJlZ2lvbiBhcHByb2FjaC5cbiAgICAgKi9cbiAgICBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgcmVmOiBmb2N1c1JlZixcbiAgICAgIHRhYkluZGV4OiBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA/IC0xIDogdW5kZWZpbmVkXG4gICAgfSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICByb2xlOiByb2xlLFxuICAgICAgXCJhcmlhLWF0b21pY1wiOiBcInRydWVcIlxuICAgICAgLy8gU2V0dGluZyBgYXJpYS1oaWRkZW5gIGFuZCBzZXR0aW5nIGBhcmlhLWxpdmVgIHRvIFwib2ZmXCIgcHJldmVudHNcbiAgICAgIC8vIGRvdWJsZSBhbm5vdW5jZW1lbnRzIGZyb20gVk8gd2hlbiBgZm9jdXNSZWdpb25PblRleHRDaGFuZ2VgIGlzIHRydWVcbiAgICAgICxcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogdG9nZ2xlID8gdW5kZWZpbmVkIDogJ3RydWUnLFxuICAgICAgXCJhcmlhLWxpdmVcIjogIXRvZ2dsZSB8fCBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA/ICdvZmYnIDogYXJpYUxpdmVcbiAgICB9LCBpc0FjdGl2ZSAmJiB0b2dnbGUgPyBjaGlsZHJlbiA6ICcnKSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICByb2xlOiByb2xlLFxuICAgICAgXCJhcmlhLWF0b21pY1wiOiBcInRydWVcIixcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogIXRvZ2dsZSA/IHVuZGVmaW5lZCA6ICd0cnVlJyxcbiAgICAgIFwiYXJpYS1saXZlXCI6IHRvZ2dsZSB8fCBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA/ICdvZmYnIDogYXJpYUxpdmVcbiAgICB9LCBpc0FjdGl2ZSAmJiAhdG9nZ2xlID8gY2hpbGRyZW4gOiAnJykpKVxuICApO1xufTtcbkV1aVNjcmVlblJlYWRlckxpdmUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIG1ha2Ugc2NyZWVuIHJlYWRlcnMgYXdhcmUgb2YgdGhlIGNvbnRlbnRcbiAgICAgKi9cbiAgaXNBY3RpdmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBDb250ZW50IGZvciBzY3JlZW4gcmVhZGVycyB0byBhbm5vdW5jZVxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIGByb2xlYCBhdHRyaWJ1dGUgZm9yIGJvdGggbGl2ZSByZWdpb25zLlxuICAgICAqXG4gICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQWNjZXNzaWJpbGl0eS9BUklBL0FSSUFfTGl2ZV9SZWdpb25zI3JvbGVzX3dpdGhfaW1wbGljaXRfbGl2ZV9yZWdpb25fYXR0cmlidXRlc1xuICAgICAqL1xuICByb2xlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBgYXJpYS1saXZlYCBhdHRyaWJ1dGUgZm9yIGJvdGggbGl2ZSByZWdpb25zXG4gICAgICovXG4gIFwiYXJpYS1saXZlXCI6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIE9uIGBjaGlsZHJlbmAvdGV4dCBjaGFuZ2UsIHRoZSByZWdpb24gd2lsbCBhdXRvLWZvY3VzIGl0c2VsZiwgY2F1c2luZyBzY3JlZW4gcmVhZGVyc1xuICAgICAqIHRvIGF1dG9tYXRpY2FsbHkgcmVhZCBvdXQgdGhlIHRleHQgY29udGVudC4gVGhpcyBwcm9wIHNob3VsZCBwcmltYXJpbHkgYmUgdXNlZCBmb3JcbiAgICAgKiBuYXZpZ2F0aW9uIG9yIHBhZ2UgY2hhbmdlcywgd2hlcmUgcHJvZ3JhbW1hdGljYWxseSByZXNldHRpbmcgZm9jdXMgbG9jYXRpb24gYmFjayB0b1xuICAgICAqIGEgY2VydGFpbiBwYXJ0IG9mIHRoZSBwYWdlIGlzIGRlc2lyZWQuXG4gICAgICovXG4gIGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVNjcmVlblJlYWRlck9ubHlTdHlsZXMgYXMgc3R5bGVzIH0gZnJvbSAnLi9zY3JlZW5fcmVhZGVyX29ubHkuc3R5bGVzJztcbmV4cG9ydCB2YXIgRXVpU2NyZWVuUmVhZGVyT25seSA9IGZ1bmN0aW9uIEV1aVNjcmVlblJlYWRlck9ubHkoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHNob3dPbkZvY3VzID0gX3JlZi5zaG93T25Gb2N1cztcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKGNsYXNzTmFtZSwgY2hpbGRyZW4ucHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIHByb3BzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5sZW5ndGggPyBjbGFzc2VzIDogdW5kZWZpbmVkLFxuICAgICAgY3NzOiBzaG93T25Gb2N1cyA/IHN0eWxlc1snZXVpU2NyZWVuUmVhZGVyT25seS1zaG93T25Gb2N1cyddIDogc3R5bGVzLmV1aVNjcmVlblJlYWRlck9ubHlcbiAgICB9O1xuICB9LCBbY2xhc3Nlcywgc2hvd09uRm9jdXNdKTtcbiAgcmV0dXJuIGNsb25lRWxlbWVudFdpdGhDc3MoY2hpbGRyZW4sIHByb3BzKTtcbn07XG5FdWlTY3JlZW5SZWFkZXJPbmx5LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3RFbGVtZW50IHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIEZvciBrZXlib2FyZCBuYXZpZ2F0aW9uLCBmb3JjZSBjb250ZW50IHRvIGRpc3BsYXkgdmlzdWFsbHkgdXBvbiBmb2N1cy9mb2N1cy13aXRoaW4uXG4gICAgICovXG4gIHNob3dPbkZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIEVOVEVSID0gJ0VudGVyJztcbmV4cG9ydCB2YXIgU1BBQ0UgPSAnICc7XG5leHBvcnQgdmFyIEVTQ0FQRSA9ICdFc2NhcGUnO1xuZXhwb3J0IHZhciBUQUIgPSAnVGFiJztcbmV4cG9ydCB2YXIgQkFDS1NQQUNFID0gJ0JhY2tzcGFjZSc7XG5leHBvcnQgdmFyIEYyID0gJ0YyJztcbmV4cG9ydCB2YXIgQUxUID0gJ0FsdCc7XG5leHBvcnQgdmFyIFNISUZUID0gJ1NoaWZ0JztcbmV4cG9ydCB2YXIgQ1RSTCA9ICdDb250cm9sJztcbmV4cG9ydCB2YXIgTUVUQSA9ICdNZXRhJzsgLy8gV2luZG93cywgQ29tbWFuZCwgT3B0aW9uXG5cbmV4cG9ydCB2YXIgQVJST1dfRE9XTiA9ICdBcnJvd0Rvd24nO1xuZXhwb3J0IHZhciBBUlJPV19VUCA9ICdBcnJvd1VwJztcbmV4cG9ydCB2YXIgQVJST1dfTEVGVCA9ICdBcnJvd0xlZnQnO1xuZXhwb3J0IHZhciBBUlJPV19SSUdIVCA9ICdBcnJvd1JpZ2h0JztcbmV4cG9ydCB2YXIgUEFHRV9VUCA9ICdQYWdlVXAnO1xuZXhwb3J0IHZhciBQQUdFX0RPV04gPSAnUGFnZURvd24nO1xuZXhwb3J0IHZhciBFTkQgPSAnRW5kJztcbmV4cG9ydCB2YXIgSE9NRSA9ICdIb21lJztcbmV4cG9ydCB2YXIga2V5cyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoa2V5cykge1xuICBrZXlzW1wiRU5URVJcIl0gPSBcIkVudGVyXCI7XG4gIGtleXNbXCJTUEFDRVwiXSA9IFwiIFwiO1xuICBrZXlzW1wiRVNDQVBFXCJdID0gXCJFc2NhcGVcIjtcbiAga2V5c1tcIlRBQlwiXSA9IFwiVGFiXCI7XG4gIGtleXNbXCJCQUNLU1BBQ0VcIl0gPSBcIkJhY2tzcGFjZVwiO1xuICBrZXlzW1wiRjJcIl0gPSBcIkYyXCI7XG4gIGtleXNbXCJBTFRcIl0gPSBcIkFsdFwiO1xuICBrZXlzW1wiU0hJRlRcIl0gPSBcIlNoaWZ0XCI7XG4gIGtleXNbXCJDVFJMXCJdID0gXCJDb250cm9sXCI7XG4gIGtleXNbXCJNRVRBXCJdID0gXCJNZXRhXCI7XG4gIGtleXNbXCJBUlJPV19ET1dOXCJdID0gXCJBcnJvd0Rvd25cIjtcbiAga2V5c1tcIkFSUk9XX1VQXCJdID0gXCJBcnJvd1VwXCI7XG4gIGtleXNbXCJBUlJPV19MRUZUXCJdID0gXCJBcnJvd0xlZnRcIjtcbiAga2V5c1tcIkFSUk9XX1JJR0hUXCJdID0gXCJBcnJvd1JpZ2h0XCI7XG4gIGtleXNbXCJQQUdFX1VQXCJdID0gXCJQYWdlVXBcIjtcbiAga2V5c1tcIlBBR0VfRE9XTlwiXSA9IFwiUGFnZURvd25cIjtcbiAga2V5c1tcIkVORFwiXSA9IFwiRW5kXCI7XG4gIGtleXNbXCJIT01FXCJdID0gXCJIb21lXCI7XG4gIHJldHVybiBrZXlzO1xufSh7fSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdjEgYXMgdXVpZHYxIH0gZnJvbSAndXVpZCc7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgaWRzLlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUsIGJ1dCBwcmVkaWN0YWJsZSBpZHMgdG8gcGFpciBsYWJlbHNcbiAqIHdpdGggdGhlaXIgaW5wdXRzLiBJdCB0YWtlcyBhbiBvcHRpb25hbCBwcmVmaXggYXMgYSBwYXJhbWV0ZXIuIElmIHlvdSBkb24ndFxuICogc3BlY2lmeSBpdCwgaXQgZ2VuZXJhdGVzIGEgcmFuZG9tIGlkIHByZWZpeC4gSWYgeW91IHNwZWNpZnkgYSBjdXN0b20gcHJlZml4XG4gKiBpdCBzaG91bGQgYmVnaW4gd2l0aCBhbiBsZXR0ZXIgdG8gYmUgSFRNTDQgY29tcGxpYW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaHRtbElkR2VuZXJhdG9yKCkge1xuICB2YXIgaWRQcmVmaXggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnO1xuICB2YXIgc3RhdGljVXVpZCA9IHV1aWR2MSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpZFN1ZmZpeCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7XG4gICAgdmFyIHByZWZpeCA9IFwiXCIuY29uY2F0KGlkUHJlZml4KS5jb25jYXQoaWRQcmVmaXggIT09ICcnID8gJ18nIDogJ2knKTtcbiAgICB2YXIgc3VmZml4ID0gaWRTdWZmaXggPyBcIl9cIi5jb25jYXQoaWRTdWZmaXgpIDogJyc7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHByZWZpeCkuY29uY2F0KHN1ZmZpeCA/IHN0YXRpY1V1aWQgOiB1dWlkdjEoKSkuY29uY2F0KHN1ZmZpeCk7XG4gIH07XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbWVtb2l6ZWQgSUQgdGhhdCByZW1haW5zIHN0YXRpYyB1bnRpbCBjb21wb25lbnQgdW5tb3VudC5cbiAqIFRoaXMgcHJldmVudHMgSURzIGZyb20gYmVpbmcgcmUtcmFuZG9taXplZCBvbiBldmVyeSBjb21wb25lbnQgdXBkYXRlLlxuICovXG5cbi8vIFdlIGNhbiByZW1vdmUgdGhpcyBkZXByZWNhdGVkIGhvb2sgb25jZSBFVUkgbm8gbG9uZ2VyIG5lZWRzIHRvIHN1cHBvcnQgUmVhY3QgMTYtMTdcbnZhciB1c2VEZXByZWNhdGVkR2VuZXJhdGVkSHRtbElkID0gZnVuY3Rpb24gdXNlRGVwcmVjYXRlZEdlbmVyYXRlZEh0bWxJZCgpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgIHByZWZpeCA9IF9yZWYucHJlZml4LFxuICAgIHN1ZmZpeCA9IF9yZWYuc3VmZml4LFxuICAgIGNvbmRpdGlvbmFsSWQgPSBfcmVmLmNvbmRpdGlvbmFsSWQ7XG4gIHJldHVybiB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29uZGl0aW9uYWxJZCB8fCBodG1sSWRHZW5lcmF0b3IocHJlZml4KShzdWZmaXgpO1xuICB9LCBbY29uZGl0aW9uYWxJZCwgcHJlZml4LCBzdWZmaXhdKTtcbn07XG52YXIgdXNlTmV3R2VuZXJhdGVkSHRtbElkID0gZnVuY3Rpb24gdXNlTmV3R2VuZXJhdGVkSHRtbElkKCkge1xuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgIF9yZWYyJHByZWZpeCA9IF9yZWYyLnByZWZpeCxcbiAgICBwcmVmaXggPSBfcmVmMiRwcmVmaXggPT09IHZvaWQgMCA/ICcnIDogX3JlZjIkcHJlZml4LFxuICAgIF9yZWYyJHN1ZmZpeCA9IF9yZWYyLnN1ZmZpeCxcbiAgICBzdWZmaXggPSBfcmVmMiRzdWZmaXggPT09IHZvaWQgMCA/ICcnIDogX3JlZjIkc3VmZml4LFxuICAgIGNvbmRpdGlvbmFsSWQgPSBfcmVmMi5jb25kaXRpb25hbElkO1xuICAvLyBVc2luZyB0aGUgZGVmYXVsdCBleHBvcnQgYW5kIGRvdCBub3RhdGlvbiBoZXJlIGlzIGludGVudGlvbmFsXG4gIC8vIHRvIHByZXZlbnQgUmVhY3QgPDE4IGltcG9ydCBlcnJvcnMuXG4gIHZhciBpZCA9IFJlYWN0LnVzZUlkKCk7XG4gIHJldHVybiB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29uZGl0aW9uYWxJZCB8fCBcIlwiLmNvbmNhdChwcmVmaXgpLmNvbmNhdChpZCkuY29uY2F0KHN1ZmZpeCk7XG4gIH0sIFtpZCwgY29uZGl0aW9uYWxJZCwgcHJlZml4LCBzdWZmaXhdKTtcbn07XG5leHBvcnQgdmFyIHVzZUdlbmVyYXRlZEh0bWxJZCA9ICd1c2VJZCcgaW4gUmVhY3QgPyB1c2VOZXdHZW5lcmF0ZWRIdG1sSWQgOiB1c2VEZXByZWNhdGVkR2VuZXJhdGVkSHRtbElkOyIsICIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbnZhciBnZXRSYW5kb21WYWx1ZXM7XG52YXIgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi4gQWxzbyxcbiAgICAvLyBmaW5kIHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBjcnlwdG8gKG1zQ3J5cHRvKSBvbiBJRTExLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0bykgfHwgdHlwZW9mIG1zQ3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzID09PSAnZnVuY3Rpb24nICYmIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKTtcblxuICAgIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59IiwgImV4cG9ydCBkZWZhdWx0IC9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTsiLCAiaW1wb3J0IFJFR0VYIGZyb20gJy4vcmVnZXguanMnO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZSh1dWlkKSB7XG4gIHJldHVybiB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgJiYgUkVHRVgudGVzdCh1dWlkKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGU7IiwgImltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcbi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xuXG52YXIgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIpIHtcbiAgdmFyIG9mZnNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHZhciB1dWlkID0gKGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgM11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDVdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA3XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDhdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxM11dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNV1dKS50b0xvd2VyQ2FzZSgpOyAvLyBDb25zaXN0ZW5jeSBjaGVjayBmb3IgdmFsaWQgVVVJRC4gIElmIHRoaXMgdGhyb3dzLCBpdCdzIGxpa2VseSBkdWUgdG8gb25lXG4gIC8vIG9mIHRoZSBmb2xsb3dpbmc6XG4gIC8vIC0gT25lIG9yIG1vcmUgaW5wdXQgYXJyYXkgdmFsdWVzIGRvbid0IG1hcCB0byBhIGhleCBvY3RldCAobGVhZGluZyB0b1xuICAvLyBcInVuZGVmaW5lZFwiIGluIHRoZSB1dWlkKVxuICAvLyAtIEludmFsaWQgaW5wdXQgdmFsdWVzIGZvciB0aGUgUkZDIGB2ZXJzaW9uYCBvciBgdmFyaWFudGAgZmllbGRzXG5cbiAgaWYgKCF2YWxpZGF0ZSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RyaW5naWZ5OyIsICJpbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCBzdHJpbmdpZnkgZnJvbSAnLi9zdHJpbmdpZnkuanMnOyAvLyAqKmB2MSgpYCAtIEdlbmVyYXRlIHRpbWUtYmFzZWQgVVVJRCoqXG4vL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcbi8vIGFuZCBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXVpZC5odG1sXG5cbnZhciBfbm9kZUlkO1xuXG52YXIgX2Nsb2Nrc2VxOyAvLyBQcmV2aW91cyB1dWlkIGNyZWF0aW9uIHRpbWVcblxuXG52YXIgX2xhc3RNU2VjcyA9IDA7XG52YXIgX2xhc3ROU2VjcyA9IDA7IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQgZm9yIEFQSSBkZXRhaWxzXG5cbmZ1bmN0aW9uIHYxKG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xuICB2YXIgYiA9IGJ1ZiB8fCBuZXcgQXJyYXkoMTYpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgX25vZGVJZDtcbiAgdmFyIGNsb2Nrc2VxID0gb3B0aW9ucy5jbG9ja3NlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jbG9ja3NlcSA6IF9jbG9ja3NlcTsgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XG4gIC8vIHNwZWNpZmllZC4gIFdlIGRvIHRoaXMgbGF6aWx5IHRvIG1pbmltaXplIGlzc3VlcyByZWxhdGVkIHRvIGluc3VmZmljaWVudFxuICAvLyBzeXN0ZW0gZW50cm9weS4gIFNlZSAjMTg5XG5cbiAgaWYgKG5vZGUgPT0gbnVsbCB8fCBjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgdmFyIHNlZWRCeXRlcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7XG5cbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcbiAgICAgIG5vZGUgPSBfbm9kZUlkID0gW3NlZWRCeXRlc1swXSB8IDB4MDEsIHNlZWRCeXRlc1sxXSwgc2VlZEJ5dGVzWzJdLCBzZWVkQnl0ZXNbM10sIHNlZWRCeXRlc1s0XSwgc2VlZEJ5dGVzWzVdXTtcbiAgICB9XG5cbiAgICBpZiAoY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgICAgLy8gUGVyIDQuMi4yLCByYW5kb21pemUgKDE0IGJpdCkgY2xvY2tzZXFcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcbiAgICB9XG4gIH0gLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcbiAgLy8gKDE1ODItMTAtMTUgMDA6MDApLiAgSlNOdW1iZXJzIGFyZW4ndCBwcmVjaXNlIGVub3VnaCBmb3IgdGhpcywgc29cbiAgLy8gdGltZSBpcyBoYW5kbGVkIGludGVybmFsbHkgYXMgJ21zZWNzJyAoaW50ZWdlciBtaWxsaXNlY29uZHMpIGFuZCAnbnNlY3MnXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXG5cblxuICB2YXIgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogRGF0ZS5ub3coKTsgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xuXG4gIHZhciBuc2VjcyA9IG9wdGlvbnMubnNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNlY3MgOiBfbGFzdE5TZWNzICsgMTsgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxuXG4gIHZhciBkdCA9IG1zZWNzIC0gX2xhc3RNU2VjcyArIChuc2VjcyAtIF9sYXN0TlNlY3MpIC8gMTAwMDA7IC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cblxuICBpZiAoZHQgPCAwICYmIG9wdGlvbnMuY2xvY2tzZXEgPT09IHVuZGVmaW5lZCkge1xuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xuICB9IC8vIFJlc2V0IG5zZWNzIGlmIGNsb2NrIHJlZ3Jlc3NlcyAobmV3IGNsb2Nrc2VxKSBvciB3ZSd2ZSBtb3ZlZCBvbnRvIGEgbmV3XG4gIC8vIHRpbWUgaW50ZXJ2YWxcblxuXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbnNlY3MgPSAwO1xuICB9IC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcblxuXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInV1aWQudjEoKTogQ2FuJ3QgY3JlYXRlIG1vcmUgdGhhbiAxME0gdXVpZHMvc2VjXCIpO1xuICB9XG5cbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xuICBfbGFzdE5TZWNzID0gbnNlY3M7XG4gIF9jbG9ja3NlcSA9IGNsb2Nrc2VxOyAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcblxuICBtc2VjcyArPSAxMjIxOTI5MjgwMDAwMDsgLy8gYHRpbWVfbG93YFxuXG4gIHZhciB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDE2ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bCAmIDB4ZmY7IC8vIGB0aW1lX21pZGBcblxuICB2YXIgdG1oID0gbXNlY3MgLyAweDEwMDAwMDAwMCAqIDEwMDAwICYgMHhmZmZmZmZmO1xuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bWggJiAweGZmOyAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMjQgJiAweGYgfCAweDEwOyAvLyBpbmNsdWRlIHZlcnNpb25cblxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjsgLy8gYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgIChQZXIgNC4yLjIgLSBpbmNsdWRlIHZhcmlhbnQpXG5cbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwOyAvLyBgY2xvY2tfc2VxX2xvd2BcblxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7IC8vIGBub2RlYFxuXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgKytuKSB7XG4gICAgYltpICsgbl0gPSBub2RlW25dO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCBzdHJpbmdpZnkoYik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHYxOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIExFRlRfQUxJR05NRU5UID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBSSUdIVF9BTElHTk1FTlQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBDRU5URVJfQUxJR05NRU5UID0gJ2NlbnRlcic7IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi90aGVtZS9ob29rcyc7XG5pbXBvcnQgeyB0aHJvdHRsZSB9IGZyb20gJy4uL3Rocm90dGxlJztcbmltcG9ydCB7IHNvcnRNYXBCeUxhcmdlVG9TbWFsbFZhbHVlcyB9IGZyb20gJy4vX3NvcnRpbmcnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGJyZWFrcG9pbnQgYmFzZWQgb24gd2luZG93IHdpZHRoLlxuICogVHlwaWNhbGx5IG9ubHkgY2FsbGVkIGJ5IHRoZSB0b3AtbGV2ZWwgYEV1aVByb3ZpZGVyYCAodG8gcmVkdWNlIHRoZSBudW1iZXJcbiAqIG9mIHdpbmRvdyByZXNpemUgbGlzdGVuZXJzIG9uIHRoZSBwYWdlKS4gQWxzbyBjb25kaXRpb25hbGx5IGNhbGxlZCBpZiBhXG4gKiBuZXN0ZWQgYEV1aVRoZW1lUHJvdmlkZXJgIGRlZmluZXMgYSBgbW9kaWZ5LmJyZWFrcG9pbnRgIG92ZXJyaWRlXG4gKi9cbmV4cG9ydCB2YXIgQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciA9IGZ1bmN0aW9uIEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICAvLyBPYnRhaW4gdGhlIGJyZWFrcG9pbnRzIG1hcCBmcm9tIHRoZSBFVUkgdGhlbWVcbiAgdmFyIF91c2VFdWlUaGVtZSA9IHVzZUV1aVRoZW1lKCksXG4gICAgYnJlYWtwb2ludHMgPSBfdXNlRXVpVGhlbWUuZXVpVGhlbWUuYnJlYWtwb2ludDtcblxuICAvLyBFbnN1cmUgdGhlIGJyZWFrcG9pbnRzIG1hcCBpcyBzb3J0ZWQgZnJvbSBsYXJnZXN0IHZhbHVlIHRvIHNtYWxsZXN0XG4gIHZhciBzb3J0ZWRCcmVha3BvaW50cyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzb3J0TWFwQnlMYXJnZVRvU21hbGxWYWx1ZXMoYnJlYWtwb2ludHMpO1xuICB9LCBbYnJlYWtwb2ludHNdKTtcblxuICAvLyBGaW5kIHRoZSBicmVha3BvaW50IChrZXkpIHdob3NlIHZhbHVlIGlzIDw9IHdpbmRvd1dpZHRoIHN0YXJ0aW5nIHdpdGggbGFyZ2VzdCBmaXJzdFxuICB2YXIgZ2V0QnJlYWtwb2ludCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICh3aWR0aCkge1xuICAgIHJldHVybiBrZXlzT2Yoc29ydGVkQnJlYWtwb2ludHMpLmZpbmQoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIHNvcnRlZEJyZWFrcG9pbnRzW2tleV0gPD0gd2lkdGg7XG4gICAgfSk7XG4gIH0sIFtzb3J0ZWRCcmVha3BvaW50c10pO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBnZXRCcmVha3BvaW50KHdpbmRvdy5pbm5lcldpZHRoKSA6IHVuZGVmaW5lZCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgY3VycmVudEJyZWFrcG9pbnQgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldEN1cnJlbnRCcmVha3BvaW50ID0gX3VzZVN0YXRlMlsxXTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb25XaW5kb3dSZXNpemUgPSB0aHJvdHRsZShmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRDdXJyZW50QnJlYWtwb2ludChnZXRCcmVha3BvaW50KHdpbmRvdy5pbm5lcldpZHRoKSk7XG4gICAgfSwgNTApO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBvbldpbmRvd1Jlc2l6ZSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25XaW5kb3dSZXNpemUpO1xuICAgIH07XG4gIH0sIFtnZXRCcmVha3BvaW50XSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEN1cnJlbnRFdWlCcmVha3BvaW50Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjdXJyZW50QnJlYWtwb2ludFxuICB9LCBjaGlsZHJlbik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIGFzc2VydE5ldmVyID0gZnVuY3Rpb24gYXNzZXJ0TmV2ZXIoeCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHZhbHVlIFwiLmNvbmNhdCh4KSk7XG59O1xuXG4vLyB1dGlsaXR5IHR5cGVzOlxuLyoqXG4gKiBYT1IgZm9yIHNvbWUgcHJvcGVydGllcyBhcHBsaWVkIHRvIGEgdHlwZVxuICogKFhPUiBpcyBvbmUgb2YgdGhlc2UgYnV0IG5vdCBib3RoIG9yIG5laXRoZXIpXG4gKlxuICogVXNhZ2U6IE9uZU9mPHR5cGVUb0V4dGVuZCwgb25lIHwgYnV0IHwgbm90IHwgbXVsdGlwbGUgfCBvZiB8IHRoZXNlIHwgYXJlIHwgcmVxdWlyZWQ+XG4gKlxuICogVG8gcmVxdWlyZSBhcmlhLWxhYmVsIG9yIGFyaWEtbGFiZWxsZWRieSBidXQgbm90IGJvdGhcbiAqIEV4YW1wbGU6IE9uZU9mPFR5cGUsICdhcmlhLWxhYmVsJyB8ICdhcmlhLWxhYmVsbGVkYnknPlxuICovXG5cbi8qKlxuICogV3JhcHMgT2JqZWN0LmtleXMgd2l0aCBwcm9wZXIgdHlwZXNjcmlwdCBkZWZpbml0aW9uIG9mIHRoZSByZXN1bHRpbmcgYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtleXNPZihvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG59XG5cbi8qKlxuICogTGlrZSBga2V5b2YgdHlwZW9mYCwgYnV0IGZvciBnZXR0aW5nIHZhbHVlcyBpbnN0ZWFkIG9mIGtleXNcbiAqIFZhbHVlT2Y8dHlwZW9mIHtrZXkxOiAndmFsdWUxJywga2V5MjogJ3ZhbHVlMid9PlxuICogUmVzdWx0cyBpbiBgJ3ZhbHVlMScgfCAndmFsdWUyJ2BcbiAqL1xuXG4vLyBSZXR1cm5zIHRoZSBwcm9wcyBvZiBhIGdpdmVuIEhUTUwgZWxlbWVudFxuXG4vLyBVdGlsaXR5IG1ldGhvZHMgZm9yIEFwcGx5Q2xhc3NDb21wb25lbnREZWZhdWx0c1xuXG4vKipcbiAqIEJlY2F1c2Ugb2YgaG93IFR5cGVTY3JpcHQncyBMaWJyYXJ5TWFuYWdlZEF0dHJpYnV0ZXMgaXMgZGVzaWduZWQgdG8gaGFuZGxlIGRlZmF1bHRQcm9wcyAoaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svcmVsZWFzZS1ub3Rlcy90eXBlc2NyaXB0LTMtMC5odG1sI3N1cHBvcnQtZm9yLWRlZmF1bHRwcm9wcy1pbi1qc3gpXG4gKiB3ZSBjYW4ndCBkaXJlY3RseSBleHBvcnQgdGhlIHByb3BzIGRlZmluaXRpb24gYXMgdGhlIGRlZmF1bHRlZCB2YWx1ZXMgYXJlIG5vdCBtYWRlIG9wdGlvbmFsLFxuICogYmVjYXVzZSBpdCBpc24ndCBwcm9jZXNzZWQgYnkgTGlicmFyeU1hbmFnZWRBdHRyaWJ1dGVzLiBUbyBnZXQgYXJvdW5kIHRoaXMsIHdlOlxuICogLSByZW1vdmUgdGhlIHByb3BzIHdoaWNoIGhhdmUgZGVmYXVsdCB2YWx1ZXMgYXBwbGllZFxuICogLSBleHBvcnQgKFByb3BzIC0gRGVmYXVsdHMpICYgUGFydGlhbDxEZWZhdWx0cz5cbiAqL1xuXG4vLyBkZWZpbml0aW9uIG9mIFByb3BzLCBtYWRlIG9wdGlvbmFsLCB0aGF0IGFyZSBoYXZlIGtleXMgaW4gZGVmYXVsdFByb3BzXG5cbi8qXG5odHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI4MzM5XG5Qcm9ibGVtOiBQaWNrIGFuZCBPbWl0IGRvIG5vdCBkaXN0cmlidXRlIG92ZXIgdW5pb24gdHlwZXMsIHdoaWNoIG1hbmlmZXN0cyB3aGVuXG5vcHRpb25hbCB2YWx1ZXMgYmVjb21lIHJlcXVpcmVkIGFmdGVyIGEgUGljayBvciBPbWl0IG9wZXJhdGlvbi4gVGhlc2VcbkRpc3RyaWJ1dGl2ZSBmb3JtcyBjb3JyZWN0bHkgb3BlcmF0ZSBvbiB1bmlvbiB0eXBlcywgcHJlc2VydmluZyBvcHRpb25hbGl0eS5cbiAqL1xuXG4vKlxuVHlwZVNjcmlwdCdzIGRpc2NyaW1pbmF0ZWQgdW5pb25zIGFyZSBvdmVybHkgcGVybWlzc2l2ZTogYXMgbG9uZyBhcyBvbmUgdHlwZSBvZiB0aGUgdW5pb24gaXMgc2F0aXNmaWVkXG50aGUgb3RoZXIgdHlwZXMgYXJlIG5vdCB2YWxpZGF0ZWQgYWdhaW5zdC4gRm9yIGV4YW1wbGU6XG5cbnR5cGUgRm9vID0ge1xuICB2YWx1ZTogc3RyaW5nLFxuICBmb286IHN0cmluZ1xufTtcbnR5cGUgQmFyID0ge1xuICB2YWx1ZTogbnVtYmVyLFxuICBiYXI6IHN0cmluZ1xufVxuZnVuY3Rpb24gd2hhdCh4OiBGb28gfCBCYXIpIHtcbiAgcmV0dXJuIHgudmFsdWU7XG59XG5cbkFzIHlvdSB3b3VsZCBleHBlY3QgLVxuXG53aGF0KHsgdmFsdWU6ICdhc2RmJywgZm9vOiAnYXNkZicgfSk7IC8vIGZpbmVcbndoYXQoeyB2YWx1ZTogNSwgZm9vOiAnYXNkZicgfSk7IC8vIGVycm9yXG53aGF0KHsgdmFsdWU6IDUsIGJhcjogJ2FzZGYnIH0pOyAvLyBmaW5lXG53aGF0KHsgdmFsdWU6ICdhc2RmJywgYmFyOiAnYXNkZicgfSk7IC8vIGVycm9yXG5cbkhvd2V2ZXIsIGlmIEZvbyBpcyBzYXRpc2ZpZWQgdGhlbiB5b3UgY2FuIHBhc3MgYW55IHZhbHVlIHlvdSB3YW50IHRvIEJhcidzIHVuaXF1ZSBwcm9wZXJ0aWVzOlxud2hhdCh7IHZhbHVlOiAnYXNkZicsIGZvbzogJ2FzZGYnLCBiYXI6IGZhbHNlIH0pIC8vIHdvcmtzXG5cblR5cGVTY3JpcHQgaXMgb2theSB3aXRoIHRoaXMgYXMgYSB0eXBlIGd1YXJkIHdvdWxkIGRldGVjdCB0aGUgb2JqZWN0IGlzIEZvbyBhbmQgcHJldmVudCBhY2Nlc3NpbmcgYGJhcmAuXG5VbmZvcnR1bmF0ZWx5IHRoaXMgcHJldmVudHMgZmVlZGJhY2sgdG8gdGhlIHVzZXIgYWJvdXQgcG90ZW50aWFsbHkgdW5pbnRlbnRpb25hbCBlZmZlY3RzLCBmb3IgZXhhbXBsZTpcblxuQSBjb21tb24gcGF0dGVybiBpbiBFVUkgaXMgdG8gcmVuZGVyIHNvbWV0aGluZyBhcyBhIGRpdiBPUiBhcyBhIGJ1dHRvbiwgZGVwZW5kaW5nIG9uIGlmIGFuIG9uQ2xpY2sgcHJvcCBpcyBwYXNzZWQuXG5wYXNzaW5nIGFkZGl0aW9uYWwgcHJvcHMgZG93biB0aHJvdWdoIGAuLi5yZXN0YCwgd2hpY2ggY2FuIGJlIHNwZWNpZmllZCBhc1xuXG50eXBlIFNwYW5saWtlID0gSFRNTEF0dHJpYnV0ZXM8SFRNTFNwYW5FbGVtZW50PjtcbnR5cGUgQnV0dG9ubGlrZSA9IHsgb25DbGljazogTW91c2VFdmVudEhhbmRsZXI8SFRNTEJ1dHRvbkVsZW1lbnQ+IH07IC8vIG9uQ2xpY2sgaXMgdGhlIGRpc2NyaW1pbmFudFxuUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8U3Bhbmxpa2UgfCBCdXR0b25saWtlPlxuXG5JbnRlcm5hbGx5LCB0aGUgY29tcG9uZW50IHdvdWxkIGhhdmUgYSB0eXBlIGd1YXJkIHRvIGNoZWNrIGlmIHByb3BzIGNvbnRhaW5zIGBvbkNsaWNrYCBhbmQgcmVzb2x2ZSB0byBCdXR0b25saWtlLlxuRXh0ZXJuYWxseSwgaG93ZXZlciwgeW91IGNvdWxkIHVzZSB0aGUgY29tcG9uZW50IGFzXG5cbjxDb21wb25lbnQgdmFsdWU9XCJidXp6XCIvPlxuXG5hbmQgbm8gZXJyb3Igd291bGQgb2NjdXIgYXMgdGhlIFNwYW5saWtlIHR5cGUgaXMgc2F0aXNmaWVkIGFuZCB0aGUgdHlwZSBndWFyZCB3b3VsZCBwcmV2ZW50IGFjY2Vzc2luZyBidXR0b24gYXR0cmlidXRlcy5cblRoaXMgcHJldmVudHMgaW1tZWRpYXRlIGZlZWRiYWNrIHRvIHRoZSBkZXZlbG9wLCBhbmQgd291bGQgYWN0dWFsbHkgbGVhZCB0byBSZWFjdCB3YXJuaW5ncyBhcyB0aGUgYHZhbHVlYCBwcm9wIHdvdWxkXG5zdGlsbCBwcm9wYWdhdGUgZG93biB0byB0aGUgc3BhbidzIHByb3BzLCB3aGljaCBpcyBpbnZhbGlkLiBUaGUgZm9sbG93aW5nIHR3byB1dGlsaXR5IHR5cGVzIHByb3ZpZGUgYSBzb2x1dGlvbiBmb3JcbmNyZWF0aW5nIGV4Y2x1c2l2ZSB1bmlvbnM6XG5cblJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PEV4Y2x1c2l2ZVVuaW9uPFNwYW5saWtlLCBCdXR0b25saWtlPj5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgbWVtYmVyIGtleXMgaW4gVSBub3QgcHJlc2VudCBpbiBUIHNldCB0byBuZXZlclxuICogVCA9IHsgJ29uZScsICd0d28nLCAndGhyZWUnIH1cbiAqIFUgPSB7ICd0aHJlZScsICdmb3VyJywgJ2ZpdmUnIH1cbiAqIHJldHVybnMgeyAnZm91cic6IG5ldmVyLCAnZml2ZSc6IG5ldmVyIH1cbiAqL1xuXG4vKipcbiAqIEFsbG93IGVpdGhlciBUIG9yIFUsIHByZXZlbnRpbmcgYW55IGFkZGl0aW9uYWwga2V5cyBvZiB0aGUgb3RoZXIgdHlwZSBmcm9tIGJlaW5nIHByZXNlbnRcbiAqL1xuXG4vKipcbiAqIEZvciBjb21wb25lbnRzIHRoYXQgY29uZGl0aW9uYWxseSByZW5kZXIgPGJ1dHRvbj4gb3IgPGE+XG4gKiBDb252ZW5pZW5jZSB0eXBlcyBmb3IgZXh0ZW5kaW5nIGJhc2UgcHJvcHMgKFQpIGFuZFxuICogZWxlbWVudC1zcGVjaWZpYyBwcm9wcyAoUCkgd2l0aCBzdGFuZGFyZCBjbGlja2FibGUgcHJvcGVydGllc1xuICpcbiAqIFRoZXNlIHdpbGwgbGlrZWx5IGJlIHVzZWQgdG9nZXRoZXIsIGFsb25nIHdpdGggYEV4Y2x1c2l2ZVVuaW9uYDpcbiAqXG4gKiB0eXBlIEFuY2hvckxpa2UgPSBQcm9wc0ZvckFuY2hvcjxCYXNlUHJvcHM+XG4gKiB0eXBlIEJ1dHRvbkxpa2UgPSBQcm9wc0ZvckJ1dHRvbjxCYXNlUHJvcHM+XG4gKiB0eXBlIENvbXBvbmVudFByb3BzID0gRXhjbHVzaXZlVW5pb248QW5jaG9yTGlrZSwgQnV0dG9uTGlrZT5cbiAqIGNvbnN0IENvbXBvbmVudDogRnVuY3Rpb25Db21wb25lbnQ8Q29tcG9uZW50UHJvcHM+IC4uLlxuICovXG5cbi8qKlxuICogUmVwbGFjZXMgYWxsIHByb3BlcnRpZXMgb24gYW55IHR5cGUgYXMgb3B0aW9uYWwsIGluY2x1ZGVzIG5lc3RlZCB0eXBlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW50ZXJmYWNlIFBlcnNvbiB7XG4gKiAgbmFtZTogc3RyaW5nO1xuICogIGFnZT86IG51bWJlcjtcbiAqICBzcG91c2U6IFBlcnNvbjtcbiAqICBjaGlsZHJlbjogUGVyc29uW107XG4gKiB9XG4gKiB0eXBlIFBhcnRpYWxQZXJzb24gPSBSZWN1cnNpdmVQYXJ0aWFsPFBlcnNvbj47XG4gKiAvLyByZXN1bHRzIGluXG4gKiBpbnRlcmZhY2UgUGFydGlhbFBlcnNvbiB7XG4gKiAgbmFtZT86IHN0cmluZztcbiAqICBhZ2U/OiBudW1iZXI7XG4gKiAgc3BvdXNlPzogUmVjdXJzaXZlUGFydGlhbDxQZXJzb24+O1xuICogIGNoaWxkcmVuPzogUmVjdXJzaXZlUGFydGlhbDxQZXJzb24+W11cbiAqIH1cbiAqIGBgYFxuICovIiwgImZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlUaGVtZUNvbnRleHQsIEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0LCBFdWlDb2xvck1vZGVDb250ZXh0LCBkZWZhdWx0Q29tcHV0ZWRUaGVtZSwgRXVpTmVzdGVkVGhlbWVDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IGVtaXRFdWlQcm92aWRlcldhcm5pbmcgfSBmcm9tICcuL3dhcm5pbmcnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBwcm92aWRlck1lc3NhZ2UgPSBcImBFdWlQcm92aWRlcmAgaXMgbWlzc2luZyB3aGljaCBjYW4gcmVzdWx0IGluIG5lZ2F0aXZlIGVmZmVjdHMuXFxuV3JhcCB5b3VyIGNvbXBvbmVudCBpbiBgRXVpUHJvdmlkZXJgOiBodHRwczovL2VsYS5zdC9ldWlwcm92aWRlci5cIjtcblxuLyoqXG4gKiBIb29rIGZvciBmdW5jdGlvbiBjb21wb25lbnRzXG4gKi9cblxuZXhwb3J0IHZhciB1c2VFdWlUaGVtZSA9IGZ1bmN0aW9uIHVzZUV1aVRoZW1lKCkge1xuICB2YXIgdGhlbWUgPSB1c2VDb250ZXh0KEV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBjb2xvck1vZGUgPSB1c2VDb250ZXh0KEV1aUNvbG9yTW9kZUNvbnRleHQpO1xuICB2YXIgbW9kaWZpY2F0aW9ucyA9IHVzZUNvbnRleHQoRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQpO1xuICB2YXIgaXNGYWxsYmFjayA9IHRoZW1lID09PSBkZWZhdWx0Q29tcHV0ZWRUaGVtZTtcbiAgaWYgKGlzRmFsbGJhY2spIHtcbiAgICBlbWl0RXVpUHJvdmlkZXJXYXJuaW5nKHByb3ZpZGVyTWVzc2FnZSk7XG4gIH1cbiAgdmFyIGFzc2VtYmxlZFRoZW1lID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV1aVRoZW1lOiB0aGVtZSxcbiAgICAgIGNvbG9yTW9kZTogY29sb3JNb2RlLFxuICAgICAgbW9kaWZpY2F0aW9uczogbW9kaWZpY2F0aW9uc1xuICAgIH07XG4gIH0sIFt0aGVtZSwgY29sb3JNb2RlLCBtb2RpZmljYXRpb25zXSk7XG4gIHJldHVybiBhc3NlbWJsZWRUaGVtZTtcbn07XG5cbi8qKlxuICogSE9DIGZvciBjbGFzcyBjb21wb25lbnRzXG4gKi9cblxuLy8gUHJvdmlkZSB0aGUgY29tcG9uZW50IHByb3BzIGludGVyZmFjZSBhcyB0aGUgZ2VuZXJpYyB0byBhbGxvdyB0aGUgZG9jcyBwcm9wcyB0YWJsZSB0byBwb3B1bGF0ZS5cbi8vIGUuZy4sIGBjb25zdCBFdWlDb21wb25lbnQgPSB3aXRoRXVpVGhlbWU8RXVpQ29tcG9uZW50UHJvcHM+KF9FdWlDb21wb25lbnQpYFxuZXhwb3J0IHZhciB3aXRoRXVpVGhlbWUgPSBmdW5jdGlvbiB3aXRoRXVpVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnRXaXRoVGhlbWUnO1xuICB2YXIgUmVuZGVyID0gZnVuY3Rpb24gUmVuZGVyKHByb3BzLCByZWYpIHtcbiAgICB2YXIgdGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcykpO1xuICB9O1xuICB2YXIgV2l0aEV1aVRoZW1lID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoUmVuZGVyKTtcbiAgV2l0aEV1aVRoZW1lLmRpc3BsYXlOYW1lID0gY29tcG9uZW50TmFtZTtcbiAgcmV0dXJuIFdpdGhFdWlUaGVtZTtcbn07XG5cbi8qKlxuICogUmVuZGVyIHByb3AgYWx0ZXJuYXRpdmUgZm9yIGNvbXBsZXggY2xhc3MgY29tcG9uZW50c1xuICogTW9zdCB1c2VmdWwgZm9yIHNjZW5hcmlvcyB3aGVyZSBhIEhPQyBtYXkgaW50ZXJmZXJlIHdpdGggdHlwaW5nXG4gKi9cbmV4cG9ydCB2YXIgUmVuZGVyV2l0aEV1aVRoZW1lID0gZnVuY3Rpb24gUmVuZGVyV2l0aEV1aVRoZW1lKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIHRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGNoaWxkcmVuKHRoZW1lKTtcbn07XG5cbi8qKlxuICogTWlub3Igc3ludGFjdGljYWwgc3VnYXIgaG9vayBmb3IgdGhlbWUgQ1NTIHZhcmlhYmxlcy5cbiAqIFByaW1hcmlseSBtZWFudCBmb3IgaW50ZXJuYWwgRVVJIHVzYWdlLlxuICovXG5leHBvcnQgdmFyIHVzZUV1aVRoZW1lQ1NTVmFyaWFibGVzID0gZnVuY3Rpb24gdXNlRXVpVGhlbWVDU1NWYXJpYWJsZXMoKSB7XG4gIHZhciBfdXNlQ29udGV4dCA9IHVzZUNvbnRleHQoRXVpTmVzdGVkVGhlbWVDb250ZXh0KSxcbiAgICBzZXRHbG9iYWxDU1NWYXJpYWJsZXMgPSBfdXNlQ29udGV4dC5zZXRHbG9iYWxDU1NWYXJpYWJsZXMsXG4gICAgZ2xvYmFsQ1NTVmFyaWFibGVzID0gX3VzZUNvbnRleHQuZ2xvYmFsQ1NTVmFyaWFibGVzLFxuICAgIHNldE5lYXJlc3RUaGVtZUNTU1ZhcmlhYmxlcyA9IF91c2VDb250ZXh0LnNldE5lYXJlc3RUaGVtZUNTU1ZhcmlhYmxlcyxcbiAgICB0aGVtZUNTU1ZhcmlhYmxlcyA9IF91c2VDb250ZXh0LnRoZW1lQ1NTVmFyaWFibGVzO1xuICByZXR1cm4ge1xuICAgIHNldEdsb2JhbENTU1ZhcmlhYmxlczogc2V0R2xvYmFsQ1NTVmFyaWFibGVzLFxuICAgIGdsb2JhbENTU1ZhcmlhYmxlczogZ2xvYmFsQ1NTVmFyaWFibGVzLFxuICAgIHNldE5lYXJlc3RUaGVtZUNTU1ZhcmlhYmxlczogc2V0TmVhcmVzdFRoZW1lQ1NTVmFyaWFibGVzLFxuICAgIHRoZW1lQ1NTVmFyaWFibGVzOiB0aGVtZUNTU1ZhcmlhYmxlc1xuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aVRoZW1lQW1zdGVyZGFtIH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS90aGVtZSc7XG5pbXBvcnQgeyBERUZBVUxUX0NPTE9SX01PREUsIGdldENvbXB1dGVkIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIEV1aVN5c3RlbUNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChFdWlUaGVtZUFtc3RlcmRhbSk7XG5leHBvcnQgdmFyIEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe30pO1xuZXhwb3J0IHZhciBFdWlDb2xvck1vZGVDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoREVGQVVMVF9DT0xPUl9NT0RFKTtcbmV4cG9ydCB2YXIgZGVmYXVsdENvbXB1dGVkVGhlbWUgPSBnZXRDb21wdXRlZChFdWlUaGVtZUFtc3RlcmRhbSwge30sIERFRkFVTFRfQ09MT1JfTU9ERSk7XG5leHBvcnQgdmFyIEV1aVRoZW1lQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KGRlZmF1bHRDb21wdXRlZFRoZW1lKTtcbmV4cG9ydCB2YXIgRXVpTmVzdGVkVGhlbWVDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe1xuICBpc0dsb2JhbFRoZW1lOiB0cnVlLFxuICBoYXNEaWZmZXJlbnRDb2xvckZyb21HbG9iYWxUaGVtZTogZmFsc2UsXG4gIGJvZHlDb2xvcjogJycsXG4gIGNvbG9yQ2xhc3NOYW1lOiAnJyxcbiAgc2V0R2xvYmFsQ1NTVmFyaWFibGVzOiBmdW5jdGlvbiBzZXRHbG9iYWxDU1NWYXJpYWJsZXMoKSB7fSxcbiAgc2V0TmVhcmVzdFRoZW1lQ1NTVmFyaWFibGVzOiBmdW5jdGlvbiBzZXROZWFyZXN0VGhlbWVDU1NWYXJpYWJsZXMoKSB7fVxufSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgQ09MT1JfTU9ERVNfU1RBTkRBUkQgPSB7XG4gIGxpZ2h0OiAnTElHSFQnLFxuICBkYXJrOiAnREFSSydcbn07XG5leHBvcnQgdmFyIENPTE9SX01PREVTX0lOVkVSU0UgPSAnSU5WRVJTRSc7IiwgImZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgQ09MT1JfTU9ERVNfU1RBTkRBUkQsIENPTE9SX01PREVTX0lOVkVSU0UgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCB2YXIgREVGQVVMVF9DT0xPUl9NT0RFID0gQ09MT1JfTU9ERVNfU1RBTkRBUkQubGlnaHQ7XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBwYXJhbWV0ZXIgaXMgYW4gb2JqZWN0XG4gKiBAcGFyYW0ge2FueX0gb2JqIC0gQW55dGhpbmdcbiAqL1xudmFyIGlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gIHJldHVybiBvYmogJiYgX3R5cGVvZihvYmopID09PSAnb2JqZWN0Jztcbn07XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBjb2xvciBtb2RlIGlzIGBpbnZlcnNlYFxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yTW9kZSAtIGBsaWdodGAsIGBkYXJrYCwgb3IgYGludmVyc2VgXG4gKi9cbmV4cG9ydCB2YXIgaXNJbnZlcnNlQ29sb3JNb2RlID0gZnVuY3Rpb24gaXNJbnZlcnNlQ29sb3JNb2RlKGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSBDT0xPUl9NT0RFU19JTlZFUlNFO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb2xvciBtb2RlIGNvbmZpZ3VyZWQgaW4gdGhlIGN1cnJlbnQgRXVpVGhlbWVQcm92aWRlci5cbiAqIFJldHVybnMgdGhlIHBhcmVudCBjb2xvciBtb2RlIGlmIG5vbmUgaXMgZXhwbGljaXR5IHNldC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgLCBgZGFya2AsIG9yIGBpbnZlcnNlYFxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudENvbG9yTW9kZSAtIGBMSUdIVGAgb3IgYERBUktgOyB1c2VkIGFzIHRoZSBmYWxsYmFja1xuICovXG5leHBvcnQgdmFyIGdldENvbG9yTW9kZSA9IGZ1bmN0aW9uIGdldENvbG9yTW9kZShjb2xvck1vZGUsIHBhcmVudENvbG9yTW9kZSkge1xuICBpZiAoY29sb3JNb2RlID09IG51bGwpIHtcbiAgICByZXR1cm4gcGFyZW50Q29sb3JNb2RlIHx8IERFRkFVTFRfQ09MT1JfTU9ERTtcbiAgfVxuICB2YXIgbW9kZSA9IGNvbG9yTW9kZS50b1VwcGVyQ2FzZSgpO1xuICBpZiAoaXNJbnZlcnNlQ29sb3JNb2RlKG1vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudENvbG9yTW9kZSA9PT0gQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyayB8fCBwYXJlbnRDb2xvck1vZGUgPT09IHVuZGVmaW5lZCA/IENPTE9SX01PREVTX1NUQU5EQVJELmxpZ2h0IDogQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyaztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbW9kZTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgdmFsdWUgYXQgYSBnaXZlbiBwYXRoIG9uIGFuIG9iamVjdC5cbiAqIElmIGBjb2xvck1vZGVgIGlzIHByb3ZpZGVkLCB3aWxsIHNjb3BlIHRoZSB2YWx1ZSB0byB0aGUgYXBwcm9wcmlhdGUgY29sb3IgbW9kZSBrZXkgKExJR0hUXFxEQVJLKVxuICogQHBhcmFtIHtvYmplY3R9IG1vZGVsIC0gT2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gX3BhdGggLSBEb3Qtbm90YXRlZCBzdHJpbmcgdG8gYSBwYXRoIG9uIHRoZSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgIG9yIGBkYXJrYFxuICovXG5leHBvcnQgdmFyIGdldE9uID0gZnVuY3Rpb24gZ2V0T24obW9kZWwsIF9wYXRoLCBjb2xvck1vZGUpIHtcbiAgdmFyIHBhdGggPSBfcGF0aC5zcGxpdCgnLicpO1xuICB2YXIgbm9kZSA9IG1vZGVsO1xuICB3aGlsZSAocGF0aC5sZW5ndGgpIHtcbiAgICB2YXIgc2VnbWVudCA9IHBhdGguc2hpZnQoKTtcbiAgICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChjb2xvck1vZGUgJiYgbm9kZS5oYXNPd25Qcm9wZXJ0eShjb2xvck1vZGUpID09PSB0cnVlICYmIG5vZGVbY29sb3JNb2RlXS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAobm9kZVtjb2xvck1vZGVdW3NlZ21lbnRdIGluc3RhbmNlb2YgQ29tcHV0ZWQpIHtcbiAgICAgICAgICBub2RlID0gbm9kZVtjb2xvck1vZGVdW3NlZ21lbnRdLmdldFZhbHVlKG51bGwsIG51bGwsIG5vZGUsIGNvbG9yTW9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGVbY29sb3JNb2RlXVtzZWdtZW50XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5vZGVbc2VnbWVudF0gaW5zdGFuY2VvZiBDb21wdXRlZCkge1xuICAgICAgICBub2RlID0gbm9kZVtzZWdtZW50XS5nZXRWYWx1ZShudWxsLCBudWxsLCBub2RlLCBjb2xvck1vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5vZGVbc2VnbWVudF07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBub2RlO1xufTtcblxuLyoqXG4gKiBTZXRzIGEgdmFsdWUgYXQgYSBnaXZlbiBwYXRoIG9uIGFuIG9iamVjdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IF9wYXRoIC0gRG90LW5vdGF0ZWQgc3RyaW5nIHRvIGEgcGF0aCBvbiB0aGUgb2JqZWN0XG4gKiBAcGFyYW0ge2FueX0gc3RyaW5nIC0gIFRoZSB2YWx1ZSB0byBzZXRcbiAqL1xuZXhwb3J0IHZhciBzZXRPbiA9IGZ1bmN0aW9uIHNldE9uKG1vZGVsLCBfcGF0aCwgdmFsdWUpIHtcbiAgdmFyIHBhdGggPSBfcGF0aC5zcGxpdCgnLicpO1xuICB2YXIgcHJvcGVydHlOYW1lID0gcGF0aC5wb3AoKTtcbiAgdmFyIG5vZGUgPSBtb2RlbDtcbiAgd2hpbGUgKHBhdGgubGVuZ3RoKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBwYXRoLnNoaWZ0KCk7XG4gICAgaWYgKG5vZGUuaGFzT3duUHJvcGVydHkoc2VnbWVudCkgPT09IGZhbHNlKSB7XG4gICAgICBub2RlW3NlZ21lbnRdID0ge307XG4gICAgfVxuICAgIG5vZGUgPSBub2RlW3NlZ21lbnRdO1xuICB9XG4gIG5vZGVbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsYXNzIHRvIHN0b3JlIHRoZSBgY29tcHV0ZXJgIG1ldGhvZCBhbmQgaXRzIGV2ZW50dWFsIHBhcmFtZXRlcnMuXG4gKiBBbGxvd3MgZm9yIG9uLWRlbWFuZCBjb21wdXRhdGlvbiB3aXRoIHVwLXRvLWRhdGUgcGFyYW1ldGVycyB2aWEgYGdldFZhbHVlYCBtZXRob2QuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXB1dGVyIC0gRnVuY3Rpb24gdG8gYmUgY29tcHV0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nIHwgYXJyYXl9IGRlcGVuZGVuY2llcyAtIERlcGVuZGVuY2llcyBwYXNzZWQgdG8gdGhlIGBjb21wdXRlcmAgYXMgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgdmFyIENvbXB1dGVkID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ29tcHV0ZWQoY29tcHV0ZXIpIHtcbiAgICB2YXIgZGVwZW5kZW5jaWVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29tcHV0ZWQpO1xuICAgIHRoaXMuY29tcHV0ZXIgPSBjb21wdXRlcjtcbiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llcztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgYGNvbXB1dGVyYCBtZXRob2Qgd2l0aCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdGhlbWVcbiAgICogYnkgdGFraW5nIGludG8gYWNjb3VudCBwcmV2aW91c2x5IGNvbXB1dGVkIHZhbHVlcyBhbmQgbW9kaWZpY2F0aW9ucy5cbiAgICogQHBhcmFtIHtQcm94eSB8IG9iamVjdH0gYmFzZSAtIENvbXB1dGVkIG9yIHVuY29tcHV0ZWQgdGhlbWVcbiAgICogQHBhcmFtIHtQcm94eSB8IG9iamVjdH0gbW9kaWZpY2F0aW9ucyAtIFRoZW1lIHZhbHVlIG92ZXJyaWRlc1xuICAgKiBAcGFyYW0ge29iamVjdH0gd29ya2luZyAtIFBhcnRpYWxseSBjb21wdXRlZCB0aGVtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JNb2RlIC0gYGxpZ2h0YCBvciBgZGFya2BcbiAgICovXG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoQ29tcHV0ZWQsIFt7XG4gICAga2V5OiBcImdldFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKGJhc2UpIHtcbiAgICAgIHZhciBtb2RpZmljYXRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIHZhciB3b3JraW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgY29sb3JNb2RlID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXRoaXMuZGVwZW5kZW5jaWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlcih3b3JraW5nKTtcbiAgICAgIH1cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmRlcGVuZGVuY2llcykpIHtcbiAgICAgICAgdmFyIF9yZWYsIF9nZXRPbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZXIoKF9yZWYgPSAoX2dldE9uID0gZ2V0T24od29ya2luZywgdGhpcy5kZXBlbmRlbmNpZXMpKSAhPT0gbnVsbCAmJiBfZ2V0T24gIT09IHZvaWQgMCA/IF9nZXRPbiA6IGdldE9uKG1vZGlmaWNhdGlvbnMsIHRoaXMuZGVwZW5kZW5jaWVzLCBjb2xvck1vZGUpKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZ2V0T24oYmFzZSwgdGhpcy5kZXBlbmRlbmNpZXMsIGNvbG9yTW9kZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZXIodGhpcy5kZXBlbmRlbmNpZXMubWFwKGZ1bmN0aW9uIChkZXBlbmRlbmN5KSB7XG4gICAgICAgIHZhciBfcmVmMiwgX2dldE9uMjtcbiAgICAgICAgcmV0dXJuIChfcmVmMiA9IChfZ2V0T24yID0gZ2V0T24od29ya2luZywgZGVwZW5kZW5jeSkpICE9PSBudWxsICYmIF9nZXRPbjIgIT09IHZvaWQgMCA/IF9nZXRPbjIgOiBnZXRPbihtb2RpZmljYXRpb25zLCBkZXBlbmRlbmN5LCBjb2xvck1vZGUpKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiBnZXRPbihiYXNlLCBkZXBlbmRlbmN5LCBjb2xvck1vZGUpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xufSgpO1xuXG4vKipcbiAqIFJldHVybnMgYSBDbGFzcyAoYENvbXB1dGVkYCkgdGhhdCBzdG9yZXMgdGhlIGFyYml0cmFyeSBjb21wdXRlciBtZXRob2RcbiAqIGFuZCByZWZlcmVuY2VzIHRvIGl0cyBvcHRpb25hbCBkZXBlbmRlY2llcy5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXB1dGVyIC0gQXJiaXRyYXJ5IG1ldGhvZCB0byBiZSBjYWxsZWQgYXQgY29tcHV0ZSB0aW1lLlxuICogQHBhcmFtIHtzdHJpbmcgfCBhcnJheX0gZGVwZW5kZW5jaWVzIC0gVmFsdWVzIHRoYXQgd2lsbCBiZSBwcm92aWRlZCB0byBgY29tcHV0ZXJgIGF0IGNvbXB1dGUgdGltZS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWQoY29tcCwgZGVwKSB7XG4gIHJldHVybiBuZXcgQ29tcHV0ZWQoY29tcCwgZGVwKTtcbn1cblxuLyoqXG4gKiBUYWtlcyBhbiB1bmNvbXB1dGVkIHRoZW1lLCBhbmQgY29tcHV0ZXMgYW5kIHJldHVybnMgYWxsIHZhbHVlcyB0YWtpbmdcbiAqIGludG8gY29uc2lkZXJhdGlvbiB2YWx1ZSBvdmVycmlkZXMgYW5kIGNvbmZpZ3VyZWQgY29sb3IgbW9kZS5cbiAqIE92ZXJyaWRlcyB0YWtlIHByZWNlZGVuY2UsIGFuZCBvbmx5IHZhbHVlcyBpbiB0aGUgY3VycmVudCBjb2xvciBtb2RlXG4gKiBhcmUgY29tcHV0ZWQgYW5kIHJldHVybmVkLlxuICogQHBhcmFtIHtQcm94eX0gYmFzZSAtIE9iamVjdCB0byB0cmFuc2Zvcm0gaW50byBQcm94eVxuICogQHBhcmFtIHtQcm94eSB8IG9iamVjdH0gb3ZlciAtIFVuaXF1ZSBpZGVudGlmaWVyIG9yIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgIG9yIGBkYXJrYFxuICovXG5leHBvcnQgdmFyIGdldENvbXB1dGVkID0gZnVuY3Rpb24gZ2V0Q29tcHV0ZWQoYmFzZSwgb3ZlciwgY29sb3JNb2RlKSB7XG4gIHZhciBvdXRwdXQgPSB7XG4gICAgdGhlbWVOYW1lOiBiYXNlLmtleVxuICB9O1xuICBmdW5jdGlvbiBsb29wKGJhc2UsIG92ZXIpIHtcbiAgICB2YXIgY2hlY2tFeGlzdGluZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgdmFyIHBhdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcbiAgICBPYmplY3Qua2V5cyhiYXNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBuZXdQYXRoID0gcGF0aCA/IFwiXCIuY29uY2F0KHBhdGgsIFwiLlwiKS5jb25jYXQoa2V5KSA6IFwiXCIuY29uY2F0KGtleSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBrZXlgIGlzIG5vdCBuZWNlc3NhcmlseSBhIGNvbG9yTW9kZSBrZXlcbiAgICAgIGlmIChbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdC52YWx1ZXMoQ09MT1JfTU9ERVNfU1RBTkRBUkQpKSwgW2NvbG9yTW9kZV0pLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgaWYgKGtleSAhPT0gY29sb3JNb2RlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBjb2xvck1vZGVTZWdtZW50ID0gbmV3IFJlZ0V4cChcIihcXFxcLlwiLmNvbmNhdChjb2xvck1vZGUsIFwiXFxcXGIpfChcXFxcYlwiKS5jb25jYXQoY29sb3JNb2RlLCBcIlxcXFwuKVwiKSk7XG4gICAgICAgICAgbmV3UGF0aCA9IG5ld1BhdGgucmVwbGFjZShjb2xvck1vZGVTZWdtZW50LCAnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBleGlzdGluZyA9IGNoZWNrRXhpc3RpbmcgJiYgZ2V0T24ob3V0cHV0LCBuZXdQYXRoKTtcbiAgICAgIGlmICghZXhpc3RpbmcgfHwgaXNPYmplY3QoZXhpc3RpbmcpKSB7XG4gICAgICAgIHZhciBiYXNlVmFsdWUgPSBiYXNlW2tleV0gaW5zdGFuY2VvZiBDb21wdXRlZCA/IGJhc2Vba2V5XS5nZXRWYWx1ZShiYXNlLnJvb3QsIG92ZXIucm9vdCwgb3V0cHV0LCBjb2xvck1vZGUpIDogYmFzZVtrZXldO1xuICAgICAgICB2YXIgb3ZlclZhbHVlID0gb3ZlcltrZXldIGluc3RhbmNlb2YgQ29tcHV0ZWQgPyBvdmVyW2tleV0uZ2V0VmFsdWUoYmFzZS5yb290LCBvdmVyLnJvb3QsIG91dHB1dCwgY29sb3JNb2RlKSA6IG92ZXJba2V5XTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGJhc2VWYWx1ZSkgJiYgIUFycmF5LmlzQXJyYXkoYmFzZVZhbHVlKSkge1xuICAgICAgICAgIGxvb3AoYmFzZVZhbHVlLCBvdmVyVmFsdWUgIT09IG51bGwgJiYgb3ZlclZhbHVlICE9PSB2b2lkIDAgPyBvdmVyVmFsdWUgOiB7fSwgY2hlY2tFeGlzdGluZywgbmV3UGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0T24ob3V0cHV0LCBuZXdQYXRoLCBvdmVyVmFsdWUgIT09IG51bGwgJiYgb3ZlclZhbHVlICE9PSB2b2lkIDAgPyBvdmVyVmFsdWUgOiBiYXNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLy8gQ29tcHV0ZSBzdGFuZGFyZCB0aGVtZSB2YWx1ZXMgYW5kIGFwcGx5IG92ZXJyaWRlc1xuICBsb29wKGJhc2UsIG92ZXIpO1xuICAvLyBDb21wdXRlIGFuZCBhcHBseSBleHRlbnNpb24gdmFsdWVzIG9ubHlcbiAgbG9vcChvdmVyLCB7fSwgdHJ1ZSk7XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG4vKipcbiAqIEJ1aWxkcyBhIFByb3h5IHdpdGggYSBjdXN0b20gYGhhbmRsZXJgIGRlc2lnbmVkIHRvIHNlbGYtcmVmZXJlbmNlIHZhbHVlc1xuICogYW5kIHByZXZlbnQgYXJiaXRyYXJ5IHZhbHVlIG92ZXJyaWRlcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdCB0byB0cmFuc2Zvcm0gaW50byBQcm94eVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyIG9yIG5hbWVcbiAqL1xuZXhwb3J0IHZhciBidWlsZFRoZW1lID0gZnVuY3Rpb24gYnVpbGRUaGVtZShtb2RlbCwga2V5KSB7XG4gIHZhciBoYW5kbGVyID0ge1xuICAgIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZih0YXJnZXQpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldC5tb2RlbCk7XG4gICAgfSxcbiAgICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldC5tb2RlbCwgcHJvdG90eXBlKTtcbiAgICB9LFxuICAgIGlzRXh0ZW5zaWJsZTogZnVuY3Rpb24gaXNFeHRlbnNpYmxlKHRhcmdldCkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuaXNFeHRlbnNpYmxlKHRhcmdldCk7XG4gICAgfSxcbiAgICBwcmV2ZW50RXh0ZW5zaW9uczogZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQubW9kZWwpO1xuICAgIH0sXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQubW9kZWwsIGtleSk7XG4gICAgfSxcbiAgICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgYXR0cmlidXRlcykge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Lm1vZGVsLCBwcm9wZXJ0eSwgYXR0cmlidXRlcyk7XG4gICAgfSxcbiAgICBoYXM6IGZ1bmN0aW9uIGhhcyh0YXJnZXQsIHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5oYXModGFyZ2V0Lm1vZGVsLCBwcm9wZXJ0eSk7XG4gICAgfSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldChfdGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgICAgaWYgKHByb3BlcnR5ID09PSAna2V5Jykge1xuICAgICAgICByZXR1cm4gX3RhcmdldFtwcm9wZXJ0eV07XG4gICAgICB9XG5cbiAgICAgIC8vIHByZXZlbnQgU2FmYXJpIGZyb20gbG9ja2luZyB1cCB3aGVuIHRoZSBwcm94eSBpcyB1c2VkIGluIGRldiB0b29sc1xuICAgICAgLy8gYXMgaXQgZG9lc24ndCBzdXBwb3J0IGdldFByb3RvdHlwZU9mXG4gICAgICBpZiAocHJvcGVydHkgPT09ICdfX3Byb3RvX18nKSByZXR1cm4ge307XG4gICAgICB2YXIgdGFyZ2V0ID0gcHJvcGVydHkgPT09ICdyb290JyA/IF90YXJnZXQgOiBfdGFyZ2V0Lm1vZGVsIHx8IF90YXJnZXQ7XG4gICAgICAvLyBAdHMtaWdub3JlIGBzdHJpbmdgIGluZGV4IHNpZ25hdHVyZVxuICAgICAgdmFyIHZhbHVlID0gdGFyZ2V0W3Byb3BlcnR5XTtcbiAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkoe1xuICAgICAgICAgIG1vZGVsOiB2YWx1ZSxcbiAgICAgICAgICByb290OiBfdGFyZ2V0LnJvb3QsXG4gICAgICAgICAga2V5OiBcIl9cIi5jb25jYXQoX3RhcmdldC5rZXkpXG4gICAgICAgIH0sIGhhbmRsZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9LFxuICAgIG93bktleXM6IGZ1bmN0aW9uIG93bktleXModGFyZ2V0KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRhcmdldC5tb2RlbCk7XG4gICAgfSxcbiAgICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgfTtcbiAgdmFyIHRoZW1lUHJveHkgPSBuZXcgUHJveHkoe1xuICAgIG1vZGVsOiBtb2RlbCxcbiAgICByb290OiBtb2RlbCxcbiAgICBrZXk6IGtleVxuICB9LCBoYW5kbGVyKTtcbiAgcmV0dXJuIHRoZW1lUHJveHk7XG59O1xuXG4vKipcbiAqIERlZXBseSBtZXJnZXMgdHdvIG9iamVjdHMsIHVzaW5nIGBzb3VyY2VgIHZhbHVlcyB3aGVuZXZlciBwb3NzaWJsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBfdGFyZ2V0IC0gT2JqZWN0IHdpdGggZmFsbGJhY2sgdmFsdWVzXG4gKiBAcGFyYW0ge29iamVjdH0gc291cmNlIC0gT2JqZWN0IHdpdGggZGVzaXJlZCB2YWx1ZXNcbiAqL1xuZXhwb3J0IHZhciBtZXJnZURlZXAgPSBmdW5jdGlvbiBtZXJnZURlZXAoX3RhcmdldCkge1xuICB2YXIgc291cmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIHRhcmdldCA9IF9vYmplY3RTcHJlYWQoe30sIF90YXJnZXQpO1xuICBpZiAoIWlzT2JqZWN0KHRhcmdldCkgfHwgIWlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG4gIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHRhcmdldFZhbHVlID0gdGFyZ2V0W2tleV07XG4gICAgdmFyIHNvdXJjZVZhbHVlID0gc291cmNlW2tleV07XG4gICAgaWYgKGlzT2JqZWN0KHRhcmdldFZhbHVlKSAmJiBpc09iamVjdChzb3VyY2VWYWx1ZSkpIHtcbiAgICAgIHRhcmdldFtrZXldID0gbWVyZ2VEZWVwKF9vYmplY3RTcHJlYWQoe30sIHRhcmdldFZhbHVlKSwgX29iamVjdFNwcmVhZCh7fSwgc291cmNlVmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2VWYWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdGFyZ2V0O1xufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBpZiB0aGUgc3BlY2lmaWVkIGNvbG9yIGlzIFwiZGFya1wiLCB3aGljaCB1c3VhbGx5IG1lYW5zXG4gKiB5b3UgbmVlZCBsaWdodCB0ZXh0IGlmIHlvdSB1c2UgaXQgYXMgYSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZ1bGZpbGwgV0NBRyBjb250cmFzdFxuICogcmVxdWlyZW1lbnQuXG4gKiBUaGUgY29sb3IgbXVzdCBiZSBzcGVjaWZpZWQgdmlhIGl0cyByZWQsIGdyZWVuIGFuZCBibHVlIHZhbHVlIGluIHRoZSByYW5nZSBvZlxuICogMCB0byAyNTUuXG4gKiBUaGUgZm9ybXVsYSBpcyBiYXNlZCBvbiB0aGlzIFN0YWNrb3ZlcmZsb3cgYW5zd2VyOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk0MzAyM1xuICogd2hpY2ggaXRzZWxmIGlzIGJhc2VkIHVwb24gdGhlIFdDQUcgcmVjb21tZW5kYXRpb24gZm9yIGNvbG9yIGNvbnRyYXN0LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByZWQgVGhlIHJlZCBjb21wb25lbnQgaW4gdGhlIHJhbmdlIDAgdG8gMjU1XG4gKiBAcGFyYW0ge251bWJlcn0gZ3JlZW4gVGhlIGdyZWVuIGNvbXBvbmVudCBpbiB0aGUgcmFuZ2UgMCB0byAyNTVcbiAqIEBwYXJhbSB7bnVtYmVyfSBibHVlIFRoZSBibHVlIGNvbXBvbmVudCBpbiB0aGUgcmFuZ2UgMCB0byAyNTVcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb2xvciBpcyBkYXJrLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbG9yRGFyayhyZWQsIGdyZWVuLCBibHVlKSB7XG4gIHZhciBfbWFwJG1hcCA9IFtyZWQsIGdyZWVuLCBibHVlXS5tYXAoZnVuY3Rpb24gKGMpIHtcbiAgICAgIHJldHVybiBjIC8gMjU1LjA7XG4gICAgfSkubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gYyA8PSAwLjAzOTI4ID8gYyAvIDEyLjkyIDogTWF0aC5wb3coKGMgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgICB9KSxcbiAgICBfbWFwJG1hcDIgPSBfc2xpY2VkVG9BcnJheShfbWFwJG1hcCwgMyksXG4gICAgciA9IF9tYXAkbWFwMlswXSxcbiAgICBnID0gX21hcCRtYXAyWzFdLFxuICAgIGIgPSBfbWFwJG1hcDJbMl07XG4gIHZhciBsdW1pbmFuY2UgPSAwLjIxMjYgKiByICsgMC43MTUyICogZyArIDAuMDcyMiAqIGI7XG4gIHJldHVybiBsdW1pbmFuY2UgPD0gMC4xNzk7XG59IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkSGV4KGhleCkge1xuICByZXR1cm4gLyheI1swLTlBLUZdezZ9JCl8KF4jWzAtOUEtRl17M30kKS9pLnRlc3QoaGV4KTtcbn0iLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBDb252ZXJ0IGhleGFkZWNpbWFsIGNvbG9yIGludG8gYW4gYXJyYXkgb2YgUkdCIGludGVnZXIgdmFsdWVzXG4vLyBNb2RpZmllZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MjM4MzgvcmdiLXRvLWhleC1hbmQtaGV4LXRvLXJnYlxuXG5leHBvcnQgZnVuY3Rpb24gaGV4VG9SZ2IoaGV4KSB7XG4gIC8vIEV4cGFuZCBzaG9ydGhhbmQgZm9ybSAoZS5nLiBcIjAzRlwiKSB0byBmdWxsIGZvcm0gKGUuZy4gXCIwMDMzRkZcIilcbiAgdmFyIHNob3J0aGFuZFJlZ2V4ID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcbiAgaGV4ID0gaGV4LnJlcGxhY2Uoc2hvcnRoYW5kUmVnZXgsIGZ1bmN0aW9uIChtLCByMSwgZzEsIGIxKSB7XG4gICAgcmV0dXJuIHIxICsgcjEgKyBnMSArIGcxICsgYjEgKyBiMTtcbiAgfSk7XG4gIHZhciByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KTtcbiAgaWYgKHJlc3VsdCkge1xuICAgIHZhciBfcmVzdWx0ID0gX3NsaWNlZFRvQXJyYXkocmVzdWx0LCA0KSxcbiAgICAgIHIgPSBfcmVzdWx0WzFdLFxuICAgICAgZyA9IF9yZXN1bHRbMl0sXG4gICAgICBiID0gX3Jlc3VsdFszXTtcbiAgICByZXR1cm4gW3BhcnNlSW50KHIsIDE2KSwgcGFyc2VJbnQoZywgMTYpLCBwYXJzZUludChiLCAxNildO1xuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gcHJldmVudCBlcnJvcnNcbiAgcmV0dXJuIFswLCAwLCAwXTtcbn0iLCAiaW1wb3J0IHsgbWluLCBtYXggfSBmcm9tICcuL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKHgsIGxvdyA9IDAsIGhpZ2ggPSAxKSA9PiB7XG4gICAgcmV0dXJuIG1pbihtYXgobG93LCB4KSwgaGlnaCk7XG59O1xuIiwgImltcG9ydCBsaW1pdCBmcm9tICcuL2xpbWl0LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKHJnYikgPT4ge1xuICAgIHJnYi5fY2xpcHBlZCA9IGZhbHNlO1xuICAgIHJnYi5fdW5jbGlwcGVkID0gcmdiLnNsaWNlKDApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDM7IGkrKykge1xuICAgICAgICBpZiAoaSA8IDMpIHtcbiAgICAgICAgICAgIGlmIChyZ2JbaV0gPCAwIHx8IHJnYltpXSA+IDI1NSkgcmdiLl9jbGlwcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJnYltpXSA9IGxpbWl0KHJnYltpXSwgMCwgMjU1KTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSAzKSB7XG4gICAgICAgICAgICByZ2JbaV0gPSBsaW1pdChyZ2JbaV0sIDAsIDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZ2I7XG59O1xuIiwgIi8vIHBvcnRlZCBmcm9tIGpRdWVyeSdzICQudHlwZVxuY29uc3QgY2xhc3NUb1R5cGUgPSB7fTtcbmZvciAobGV0IG5hbWUgb2YgW1xuICAgICdCb29sZWFuJyxcbiAgICAnTnVtYmVyJyxcbiAgICAnU3RyaW5nJyxcbiAgICAnRnVuY3Rpb24nLFxuICAgICdBcnJheScsXG4gICAgJ0RhdGUnLFxuICAgICdSZWdFeHAnLFxuICAgICdVbmRlZmluZWQnLFxuICAgICdOdWxsJ1xuXSkge1xuICAgIGNsYXNzVG9UeXBlW2Bbb2JqZWN0ICR7bmFtZX1dYF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIGNsYXNzVG9UeXBlW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopXSB8fCAnb2JqZWN0Jztcbn1cbiIsICJpbXBvcnQgdHlwZSBmcm9tICcuL3R5cGUuanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoYXJncywga2V5T3JkZXIgPSBudWxsKSA9PiB7XG4gICAgLy8gaWYgY2FsbGVkIHdpdGggbW9yZSB0aGFuIDMgYXJndW1lbnRzLCB3ZSByZXR1cm4gdGhlIGFyZ3VtZW50c1xuICAgIGlmIChhcmdzLmxlbmd0aCA+PSAzKSByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncyk7XG4gICAgLy8gd2l0aCBsZXNzIHRoYW4gMyBhcmdzIHdlIGNoZWNrIGlmIGZpcnN0IGFyZyBpcyBvYmplY3RcbiAgICAvLyBhbmQgdXNlIHRoZSBrZXlPcmRlciBzdHJpbmcgdG8gZXh0cmFjdCBhbmQgc29ydCBwcm9wZXJ0aWVzXG4gICAgaWYgKHR5cGUoYXJnc1swXSkgPT0gJ29iamVjdCcgJiYga2V5T3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIGtleU9yZGVyXG4gICAgICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgICAgICAuZmlsdGVyKChrKSA9PiBhcmdzWzBdW2tdICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAubWFwKChrKSA9PiBhcmdzWzBdW2tdKTtcbiAgICB9XG4gICAgLy8gb3RoZXJ3aXNlIHdlIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBhcmd1bWVudFxuICAgIC8vICh3aGljaCB3ZSBzdXBwb3NlIGlzIGFuIGFycmF5IG9mIGFyZ3MpXG4gICAgcmV0dXJuIGFyZ3NbMF07XG59O1xuIiwgImltcG9ydCB0eXBlIGZyb20gJy4vdHlwZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChhcmdzKSA9PiB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoIDwgMikgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgbCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICBpZiAodHlwZShhcmdzW2xdKSA9PSAnc3RyaW5nJykgcmV0dXJuIGFyZ3NbbF0udG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLCAiY29uc3QgeyBQSSwgbWluLCBtYXggfSA9IE1hdGg7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2xpcF9yZ2IgfSBmcm9tICcuL2NsaXBfcmdiLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGltaXQgfSBmcm9tICcuL2xpbWl0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHlwZSB9IGZyb20gJy4vdHlwZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVucGFjayB9IGZyb20gJy4vdW5wYWNrLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGFzdCB9IGZyb20gJy4vbGFzdC5qcyc7XG5cbmNvbnN0IFRXT1BJID0gUEkgKiAyO1xuY29uc3QgUElUSElSRCA9IFBJIC8gMztcbmNvbnN0IERFRzJSQUQgPSBQSSAvIDE4MDtcbmNvbnN0IFJBRDJERUcgPSAxODAgLyBQSTtcblxuZXhwb3J0IHsgUEksIFRXT1BJLCBQSVRISVJELCBERUcyUkFELCBSQUQyREVHLCBtaW4sIG1heCB9O1xuIiwgImV4cG9ydCBkZWZhdWx0IHtcbiAgICBmb3JtYXQ6IHt9LFxuICAgIGF1dG9kZXRlY3Q6IFtdXG59O1xuIiwgImltcG9ydCB7IGxhc3QsIGNsaXBfcmdiLCB0eXBlIH0gZnJvbSAnLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgX2lucHV0IGZyb20gJy4vaW8vaW5wdXQuanMnO1xuXG5jbGFzcyBDb2xvciB7XG4gICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGUoYXJnc1swXSkgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBhcmdzWzBdLmNvbnN0cnVjdG9yICYmXG4gICAgICAgICAgICBhcmdzWzBdLmNvbnN0cnVjdG9yID09PSB0aGlzLmNvbnN0cnVjdG9yXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50IGlzIGFscmVhZHkgYSBDb2xvciBpbnN0YW5jZVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3NbMF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gbGFzdCBhcmd1bWVudCBjb3VsZCBiZSB0aGUgbW9kZVxuICAgICAgICBsZXQgbW9kZSA9IGxhc3QoYXJncyk7XG4gICAgICAgIGxldCBhdXRvZGV0ZWN0ID0gZmFsc2U7XG4gICAgICAgIGlmICghbW9kZSkge1xuICAgICAgICAgICAgYXV0b2RldGVjdCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIV9pbnB1dC5zb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBfaW5wdXQuYXV0b2RldGVjdCA9IF9pbnB1dC5hdXRvZGV0ZWN0LnNvcnQoKGEsIGIpID0+IGIucCAtIGEucCk7XG4gICAgICAgICAgICAgICAgX2lucHV0LnNvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhdXRvLWRldGVjdCBmb3JtYXRcbiAgICAgICAgICAgIGZvciAobGV0IGNoayBvZiBfaW5wdXQuYXV0b2RldGVjdCkge1xuICAgICAgICAgICAgICAgIG1vZGUgPSBjaGsudGVzdCguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBpZiAobW9kZSkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9pbnB1dC5mb3JtYXRbbW9kZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHJnYiA9IF9pbnB1dC5mb3JtYXRbbW9kZV0uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBhdXRvZGV0ZWN0ID8gYXJncyA6IGFyZ3Muc2xpY2UoMCwgLTEpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWUuX3JnYiA9IGNsaXBfcmdiKHJnYik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gZm9ybWF0OiAnICsgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkIGFscGhhIGNoYW5uZWxcbiAgICAgICAgaWYgKG1lLl9yZ2IubGVuZ3RoID09PSAzKSBtZS5fcmdiLnB1c2goMSk7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBpZiAodHlwZSh0aGlzLmhleCkgPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHRoaXMuaGV4KCk7XG4gICAgICAgIHJldHVybiBgWyR7dGhpcy5fcmdiLmpvaW4oJywnKX1dYDtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBDb2xvcjtcbiIsICIvLyB0aGlzIGdldHMgdXBkYXRlZCBhdXRvbWF0aWNhbGx5XG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICcyLjYuMCc7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4vQ29sb3IuanMnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4vdmVyc2lvbi5qcyc7XG5cbmNvbnN0IGNocm9tYSA9ICguLi5hcmdzKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBjaHJvbWEuQ29sb3IoLi4uYXJncyk7XG59O1xuXG5jaHJvbWEuQ29sb3IgPSBDb2xvcjtcbmNocm9tYS52ZXJzaW9uID0gdmVyc2lvbjtcblxuZXhwb3J0IGRlZmF1bHQgY2hyb21hO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcblxuY29uc3QgY215azJyZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2NteWsnKTtcbiAgICBjb25zdCBbYywgbSwgeSwga10gPSBhcmdzO1xuICAgIGNvbnN0IGFscGhhID0gYXJncy5sZW5ndGggPiA0ID8gYXJnc1s0XSA6IDE7XG4gICAgaWYgKGsgPT09IDEpIHJldHVybiBbMCwgMCwgMCwgYWxwaGFdO1xuICAgIHJldHVybiBbXG4gICAgICAgIGMgPj0gMSA/IDAgOiAyNTUgKiAoMSAtIGMpICogKDEgLSBrKSwgLy8gclxuICAgICAgICBtID49IDEgPyAwIDogMjU1ICogKDEgLSBtKSAqICgxIC0gayksIC8vIGdcbiAgICAgICAgeSA+PSAxID8gMCA6IDI1NSAqICgxIC0geSkgKiAoMSAtIGspLCAvLyBiXG4gICAgICAgIGFscGhhXG4gICAgXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNteWsycmdiO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgbWF4IH0gPSBNYXRoO1xuXG5jb25zdCByZ2IyY215ayA9ICguLi5hcmdzKSA9PiB7XG4gICAgbGV0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgciA9IHIgLyAyNTU7XG4gICAgZyA9IGcgLyAyNTU7XG4gICAgYiA9IGIgLyAyNTU7XG4gICAgY29uc3QgayA9IDEgLSBtYXgociwgbWF4KGcsIGIpKTtcbiAgICBjb25zdCBmID0gayA8IDEgPyAxIC8gKDEgLSBrKSA6IDA7XG4gICAgY29uc3QgYyA9ICgxIC0gciAtIGspICogZjtcbiAgICBjb25zdCBtID0gKDEgLSBnIC0gaykgKiBmO1xuICAgIGNvbnN0IHkgPSAoMSAtIGIgLSBrKSAqIGY7XG4gICAgcmV0dXJuIFtjLCBtLCB5LCBrXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJjbXlrO1xuIiwgImltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNteWsycmdiIGZyb20gJy4vY215azJyZ2IuanMnO1xuaW1wb3J0IHJnYjJjbXlrIGZyb20gJy4vcmdiMmNteWsuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuY215ayA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmNteWsodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5jbXlrID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnY215aycpO1xuXG5pbnB1dC5mb3JtYXQuY215ayA9IGNteWsycmdiO1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDIsXG4gICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCAnY215aycpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgcmV0dXJuICdjbXlrJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjaywgbGFzdCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHJuZCA9IChhKSA9PiBNYXRoLnJvdW5kKGEgKiAxMDApIC8gMTAwO1xuXG4vKlxuICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAqIC0gaHNsMmNzcyhoLHMsbClcbiAqIC0gaHNsMmNzcyhoLHMsbCxhKVxuICogLSBoc2wyY3NzKFtoLHMsbF0sIG1vZGUpXG4gKiAtIGhzbDJjc3MoW2gscyxsLGFdLCBtb2RlKVxuICogLSBoc2wyY3NzKHtoLHMsbCxhfSwgbW9kZSlcbiAqL1xuY29uc3QgaHNsMmNzcyA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgaHNsYSA9IHVucGFjayhhcmdzLCAnaHNsYScpO1xuICAgIGxldCBtb2RlID0gbGFzdChhcmdzKSB8fCAnbHNhJztcbiAgICBoc2xhWzBdID0gcm5kKGhzbGFbMF0gfHwgMCk7XG4gICAgaHNsYVsxXSA9IHJuZChoc2xhWzFdICogMTAwKSArICclJztcbiAgICBoc2xhWzJdID0gcm5kKGhzbGFbMl0gKiAxMDApICsgJyUnO1xuICAgIGlmIChtb2RlID09PSAnaHNsYScgfHwgKGhzbGEubGVuZ3RoID4gMyAmJiBoc2xhWzNdIDwgMSkpIHtcbiAgICAgICAgaHNsYVszXSA9IGhzbGEubGVuZ3RoID4gMyA/IGhzbGFbM10gOiAxO1xuICAgICAgICBtb2RlID0gJ2hzbGEnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGhzbGEubGVuZ3RoID0gMztcbiAgICB9XG4gICAgcmV0dXJuIGAke21vZGV9KCR7aHNsYS5qb2luKCcsJyl9KWA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoc2wyY3NzO1xuIiwgImltcG9ydCB7IHVucGFjaywgbWluLCBtYXggfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbi8qXG4gKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICogLSByZ2IyaHNsKHIsZyxiKVxuICogLSByZ2IyaHNsKHIsZyxiLGEpXG4gKiAtIHJnYjJoc2woW3IsZyxiXSlcbiAqIC0gcmdiMmhzbChbcixnLGIsYV0pXG4gKiAtIHJnYjJoc2woe3IsZyxiLGF9KVxuICovXG5jb25zdCByZ2IyaHNsID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgbGV0IFtyLCBnLCBiXSA9IGFyZ3M7XG5cbiAgICByIC89IDI1NTtcbiAgICBnIC89IDI1NTtcbiAgICBiIC89IDI1NTtcblxuICAgIGNvbnN0IG1pblJnYiA9IG1pbihyLCBnLCBiKTtcbiAgICBjb25zdCBtYXhSZ2IgPSBtYXgociwgZywgYik7XG5cbiAgICBjb25zdCBsID0gKG1heFJnYiArIG1pblJnYikgLyAyO1xuICAgIGxldCBzLCBoO1xuXG4gICAgaWYgKG1heFJnYiA9PT0gbWluUmdiKSB7XG4gICAgICAgIHMgPSAwO1xuICAgICAgICBoID0gTnVtYmVyLk5hTjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzID1cbiAgICAgICAgICAgIGwgPCAwLjVcbiAgICAgICAgICAgICAgICA/IChtYXhSZ2IgLSBtaW5SZ2IpIC8gKG1heFJnYiArIG1pblJnYilcbiAgICAgICAgICAgICAgICA6IChtYXhSZ2IgLSBtaW5SZ2IpIC8gKDIgLSBtYXhSZ2IgLSBtaW5SZ2IpO1xuICAgIH1cblxuICAgIGlmIChyID09IG1heFJnYikgaCA9IChnIC0gYikgLyAobWF4UmdiIC0gbWluUmdiKTtcbiAgICBlbHNlIGlmIChnID09IG1heFJnYikgaCA9IDIgKyAoYiAtIHIpIC8gKG1heFJnYiAtIG1pblJnYik7XG4gICAgZWxzZSBpZiAoYiA9PSBtYXhSZ2IpIGggPSA0ICsgKHIgLSBnKSAvIChtYXhSZ2IgLSBtaW5SZ2IpO1xuXG4gICAgaCAqPSA2MDtcbiAgICBpZiAoaCA8IDApIGggKz0gMzYwO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDMgJiYgYXJnc1szXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gW2gsIHMsIGwsIGFyZ3NbM11dO1xuICAgIHJldHVybiBbaCwgcywgbF07XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IyaHNsO1xuIiwgImltcG9ydCB7IHVucGFjaywgbGFzdCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBoc2wyY3NzIGZyb20gJy4vaHNsMmNzcy5qcyc7XG5pbXBvcnQgcmdiMmhzbCBmcm9tICcuLi9oc2wvcmdiMmhzbC5qcyc7XG5jb25zdCB7IHJvdW5kIH0gPSBNYXRoO1xuXG4vKlxuICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAqIC0gcmdiMmNzcyhyLGcsYilcbiAqIC0gcmdiMmNzcyhyLGcsYixhKVxuICogLSByZ2IyY3NzKFtyLGcsYl0sIG1vZGUpXG4gKiAtIHJnYjJjc3MoW3IsZyxiLGFdLCBtb2RlKVxuICogLSByZ2IyY3NzKHtyLGcsYixhfSwgbW9kZSlcbiAqL1xuY29uc3QgcmdiMmNzcyA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgcmdiYSA9IHVucGFjayhhcmdzLCAncmdiYScpO1xuICAgIGxldCBtb2RlID0gbGFzdChhcmdzKSB8fCAncmdiJztcbiAgICBpZiAobW9kZS5zdWJzdHIoMCwgMykgPT0gJ2hzbCcpIHtcbiAgICAgICAgcmV0dXJuIGhzbDJjc3MocmdiMmhzbChyZ2JhKSwgbW9kZSk7XG4gICAgfVxuICAgIHJnYmFbMF0gPSByb3VuZChyZ2JhWzBdKTtcbiAgICByZ2JhWzFdID0gcm91bmQocmdiYVsxXSk7XG4gICAgcmdiYVsyXSA9IHJvdW5kKHJnYmFbMl0pO1xuICAgIGlmIChtb2RlID09PSAncmdiYScgfHwgKHJnYmEubGVuZ3RoID4gMyAmJiByZ2JhWzNdIDwgMSkpIHtcbiAgICAgICAgcmdiYVszXSA9IHJnYmEubGVuZ3RoID4gMyA/IHJnYmFbM10gOiAxO1xuICAgICAgICBtb2RlID0gJ3JnYmEnO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bW9kZX0oJHtyZ2JhLnNsaWNlKDAsIG1vZGUgPT09ICdyZ2InID8gMyA6IDQpLmpvaW4oJywnKX0pYDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJjc3M7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgaHNsMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnaHNsJyk7XG4gICAgY29uc3QgW2gsIHMsIGxdID0gYXJncztcbiAgICBsZXQgciwgZywgYjtcbiAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICByID0gZyA9IGIgPSBsICogMjU1O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHQzID0gWzAsIDAsIDBdO1xuICAgICAgICBjb25zdCBjID0gWzAsIDAsIDBdO1xuICAgICAgICBjb25zdCB0MiA9IGwgPCAwLjUgPyBsICogKDEgKyBzKSA6IGwgKyBzIC0gbCAqIHM7XG4gICAgICAgIGNvbnN0IHQxID0gMiAqIGwgLSB0MjtcbiAgICAgICAgY29uc3QgaF8gPSBoIC8gMzYwO1xuICAgICAgICB0M1swXSA9IGhfICsgMSAvIDM7XG4gICAgICAgIHQzWzFdID0gaF87XG4gICAgICAgIHQzWzJdID0gaF8gLSAxIC8gMztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0M1tpXSA8IDApIHQzW2ldICs9IDE7XG4gICAgICAgICAgICBpZiAodDNbaV0gPiAxKSB0M1tpXSAtPSAxO1xuICAgICAgICAgICAgaWYgKDYgKiB0M1tpXSA8IDEpIGNbaV0gPSB0MSArICh0MiAtIHQxKSAqIDYgKiB0M1tpXTtcbiAgICAgICAgICAgIGVsc2UgaWYgKDIgKiB0M1tpXSA8IDEpIGNbaV0gPSB0MjtcbiAgICAgICAgICAgIGVsc2UgaWYgKDMgKiB0M1tpXSA8IDIpIGNbaV0gPSB0MSArICh0MiAtIHQxKSAqICgyIC8gMyAtIHQzW2ldKSAqIDY7XG4gICAgICAgICAgICBlbHNlIGNbaV0gPSB0MTtcbiAgICAgICAgfVxuICAgICAgICBbciwgZywgYl0gPSBbcm91bmQoY1swXSAqIDI1NSksIHJvdW5kKGNbMV0gKiAyNTUpLCByb3VuZChjWzJdICogMjU1KV07XG4gICAgfVxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgLy8ga2VlcCBhbHBoYSBjaGFubmVsXG4gICAgICAgIHJldHVybiBbciwgZywgYiwgYXJnc1szXV07XG4gICAgfVxuICAgIHJldHVybiBbciwgZywgYiwgMV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoc2wycmdiO1xuIiwgImltcG9ydCBoc2wycmdiIGZyb20gJy4uL2hzbC9oc2wycmdiLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5cbmNvbnN0IFJFX1JHQiA9IC9ecmdiXFwoXFxzKigtP1xcZCspLFxccyooLT9cXGQrKVxccyosXFxzKigtP1xcZCspXFxzKlxcKSQvO1xuY29uc3QgUkVfUkdCQSA9XG4gICAgL15yZ2JhXFwoXFxzKigtP1xcZCspLFxccyooLT9cXGQrKVxccyosXFxzKigtP1xcZCspXFxzKixcXHMqKFswMV18WzAxXT9cXC5cXGQrKVxcKSQvO1xuY29uc3QgUkVfUkdCX1BDVCA9XG4gICAgL15yZ2JcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqXFwpJC87XG5jb25zdCBSRV9SR0JBX1BDVCA9XG4gICAgL15yZ2JhXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKFswMV18WzAxXT9cXC5cXGQrKVxcKSQvO1xuY29uc3QgUkVfSFNMID1cbiAgICAvXmhzbFxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKlxcKSQvO1xuY29uc3QgUkVfSFNMQSA9XG4gICAgL15oc2xhXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG5cbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbmNvbnN0IGNzczJyZ2IgPSAoY3NzKSA9PiB7XG4gICAgY3NzID0gY3NzLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGxldCBtO1xuXG4gICAgaWYgKGlucHV0LmZvcm1hdC5uYW1lZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LmZvcm1hdC5uYW1lZChjc3MpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuXG4gICAgLy8gcmdiKDI1MCwyMCwwKVxuICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9SR0IpKSkge1xuICAgICAgICBjb25zdCByZ2IgPSBtLnNsaWNlKDEsIDQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgcmdiW2ldID0gK3JnYltpXTtcbiAgICAgICAgfVxuICAgICAgICByZ2JbM10gPSAxOyAvLyBkZWZhdWx0IGFscGhhXG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxuXG4gICAgLy8gcmdiYSgyNTAsMjAsMCwwLjQpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQkEpKSkge1xuICAgICAgICBjb25zdCByZ2IgPSBtLnNsaWNlKDEsIDUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgcmdiW2ldID0gK3JnYltpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cblxuICAgIC8vIHJnYigxMDAlLDAlLDAlKVxuICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9SR0JfUENUKSkpIHtcbiAgICAgICAgY29uc3QgcmdiID0gbS5zbGljZSgxLCA0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgIHJnYltpXSA9IHJvdW5kKHJnYltpXSAqIDIuNTUpO1xuICAgICAgICB9XG4gICAgICAgIHJnYlszXSA9IDE7IC8vIGRlZmF1bHQgYWxwaGFcbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9XG5cbiAgICAvLyByZ2JhKDEwMCUsMCUsMCUsMC40KVxuICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9SR0JBX1BDVCkpKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IG0uc2xpY2UoMSwgNSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgICAgICByZ2JbaV0gPSByb3VuZChyZ2JbaV0gKiAyLjU1KTtcbiAgICAgICAgfVxuICAgICAgICByZ2JbM10gPSArcmdiWzNdO1xuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cblxuICAgIC8vIGhzbCgwLDEwMCUsNTAlKVxuICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9IU0wpKSkge1xuICAgICAgICBjb25zdCBoc2wgPSBtLnNsaWNlKDEsIDQpO1xuICAgICAgICBoc2xbMV0gKj0gMC4wMTtcbiAgICAgICAgaHNsWzJdICo9IDAuMDE7XG4gICAgICAgIGNvbnN0IHJnYiA9IGhzbDJyZ2IoaHNsKTtcbiAgICAgICAgcmdiWzNdID0gMTtcbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9XG5cbiAgICAvLyBoc2xhKDAsMTAwJSw1MCUsMC41KVxuICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9IU0xBKSkpIHtcbiAgICAgICAgY29uc3QgaHNsID0gbS5zbGljZSgxLCA0KTtcbiAgICAgICAgaHNsWzFdICo9IDAuMDE7XG4gICAgICAgIGhzbFsyXSAqPSAwLjAxO1xuICAgICAgICBjb25zdCByZ2IgPSBoc2wycmdiKGhzbCk7XG4gICAgICAgIHJnYlszXSA9ICttWzRdOyAvLyBkZWZhdWx0IGFscGhhID0gMVxuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cbn07XG5cbmNzczJyZ2IudGVzdCA9IChzKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgUkVfUkdCLnRlc3QocykgfHxcbiAgICAgICAgUkVfUkdCQS50ZXN0KHMpIHx8XG4gICAgICAgIFJFX1JHQl9QQ1QudGVzdChzKSB8fFxuICAgICAgICBSRV9SR0JBX1BDVC50ZXN0KHMpIHx8XG4gICAgICAgIFJFX0hTTC50ZXN0KHMpIHx8XG4gICAgICAgIFJFX0hTTEEudGVzdChzKVxuICAgICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjc3MycmdiO1xuIiwgImltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcblxuaW1wb3J0IHJnYjJjc3MgZnJvbSAnLi9yZ2IyY3NzLmpzJztcbmltcG9ydCBjc3MycmdiIGZyb20gJy4vY3NzMnJnYi5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5jc3MgPSBmdW5jdGlvbiAobW9kZSkge1xuICAgIHJldHVybiByZ2IyY3NzKHRoaXMuX3JnYiwgbW9kZSk7XG59O1xuXG5jaHJvbWEuY3NzID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnY3NzJyk7XG5cbmlucHV0LmZvcm1hdC5jc3MgPSBjc3MycmdiO1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDUsXG4gICAgdGVzdDogKGgsIC4uLnJlc3QpID0+IHtcbiAgICAgICAgaWYgKCFyZXN0Lmxlbmd0aCAmJiB0eXBlKGgpID09PSAnc3RyaW5nJyAmJiBjc3MycmdiLnRlc3QoaCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnY3NzJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5pbnB1dC5mb3JtYXQuZ2wgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IHJnYiA9IHVucGFjayhhcmdzLCAncmdiYScpO1xuICAgIHJnYlswXSAqPSAyNTU7XG4gICAgcmdiWzFdICo9IDI1NTtcbiAgICByZ2JbMl0gKj0gMjU1O1xuICAgIHJldHVybiByZ2I7XG59O1xuXG5jaHJvbWEuZ2wgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdnbCcpO1xuXG5Db2xvci5wcm90b3R5cGUuZ2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmdiID0gdGhpcy5fcmdiO1xuICAgIHJldHVybiBbcmdiWzBdIC8gMjU1LCByZ2JbMV0gLyAyNTUsIHJnYlsyXSAvIDI1NSwgcmdiWzNdXTtcbn07XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBmbG9vciB9ID0gTWF0aDtcblxuLypcbiAqIHRoaXMgaXMgYmFzaWNhbGx5IGp1c3QgSFNWIHdpdGggc29tZSBtaW5vciB0d2Vha3NcbiAqXG4gKiBodWUuLiBbMC4uMzYwXVxuICogY2hyb21hIC4uIFswLi4xXVxuICogZ3JheW5lc3MgLi4gWzAuLjFdXG4gKi9cblxuY29uc3QgaGNnMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnaGNnJyk7XG4gICAgbGV0IFtoLCBjLCBfZ10gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuICAgIF9nID0gX2cgKiAyNTU7XG4gICAgY29uc3QgX2MgPSBjICogMjU1O1xuICAgIGlmIChjID09PSAwKSB7XG4gICAgICAgIHIgPSBnID0gYiA9IF9nO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChoID09PSAzNjApIGggPSAwO1xuICAgICAgICBpZiAoaCA+IDM2MCkgaCAtPSAzNjA7XG4gICAgICAgIGlmIChoIDwgMCkgaCArPSAzNjA7XG4gICAgICAgIGggLz0gNjA7XG4gICAgICAgIGNvbnN0IGkgPSBmbG9vcihoKTtcbiAgICAgICAgY29uc3QgZiA9IGggLSBpO1xuICAgICAgICBjb25zdCBwID0gX2cgKiAoMSAtIGMpO1xuICAgICAgICBjb25zdCBxID0gcCArIF9jICogKDEgLSBmKTtcbiAgICAgICAgY29uc3QgdCA9IHAgKyBfYyAqIGY7XG4gICAgICAgIGNvbnN0IHYgPSBwICsgX2M7XG4gICAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFt2LCB0LCBwXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbcSwgdiwgcF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3AsIHYsIHRdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFtwLCBxLCB2XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbdCwgcCwgdl07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3YsIHAsIHFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaGNnMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIG1heCwgbWluIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCByZ2IyaGNnID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGNvbnN0IG1pblJnYiA9IG1pbihyLCBnLCBiKTtcbiAgICBjb25zdCBtYXhSZ2IgPSBtYXgociwgZywgYik7XG4gICAgY29uc3QgZGVsdGEgPSBtYXhSZ2IgLSBtaW5SZ2I7XG4gICAgY29uc3QgYyA9IChkZWx0YSAqIDEwMCkgLyAyNTU7XG4gICAgY29uc3QgX2cgPSAobWluUmdiIC8gKDI1NSAtIGRlbHRhKSkgKiAxMDA7XG4gICAgbGV0IGg7XG4gICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChyID09PSBtYXhSZ2IpIGggPSAoZyAtIGIpIC8gZGVsdGE7XG4gICAgICAgIGlmIChnID09PSBtYXhSZ2IpIGggPSAyICsgKGIgLSByKSAvIGRlbHRhO1xuICAgICAgICBpZiAoYiA9PT0gbWF4UmdiKSBoID0gNCArIChyIC0gZykgLyBkZWx0YTtcbiAgICAgICAgaCAqPSA2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICB9XG4gICAgcmV0dXJuIFtoLCBjLCBfZ107XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IyaGNnO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhjZzJyZ2IgZnJvbSAnLi9oY2cycmdiLmpzJztcbmltcG9ydCByZ2IyaGNnIGZyb20gJy4vcmdiMmhjZy5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oY2cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJoY2codGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5oY2cgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoY2cnKTtcblxuaW5wdXQuZm9ybWF0LmhjZyA9IGhjZzJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMSxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoY2cnKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnaGNnJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImNvbnN0IFJFX0hFWCA9IC9eIz8oW0EtRmEtZjAtOV17Nn18W0EtRmEtZjAtOV17M30pJC87XG5jb25zdCBSRV9IRVhBID0gL14jPyhbQS1GYS1mMC05XXs4fXxbQS1GYS1mMC05XXs0fSkkLztcblxuY29uc3QgaGV4MnJnYiA9IChoZXgpID0+IHtcbiAgICBpZiAoaGV4Lm1hdGNoKFJFX0hFWCkpIHtcbiAgICAgICAgLy8gcmVtb3ZlIG9wdGlvbmFsIGxlYWRpbmcgI1xuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCB8fCBoZXgubGVuZ3RoID09PSA3KSB7XG4gICAgICAgICAgICBoZXggPSBoZXguc3Vic3RyKDEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGV4cGFuZCBzaG9ydC1ub3RhdGlvbiB0byBmdWxsIHNpeC1kaWdpdFxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgaGV4ID0gaGV4LnNwbGl0KCcnKTtcbiAgICAgICAgICAgIGhleCA9IGhleFswXSArIGhleFswXSArIGhleFsxXSArIGhleFsxXSArIGhleFsyXSArIGhleFsyXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1ID0gcGFyc2VJbnQoaGV4LCAxNik7XG4gICAgICAgIGNvbnN0IHIgPSB1ID4+IDE2O1xuICAgICAgICBjb25zdCBnID0gKHUgPj4gOCkgJiAweGZmO1xuICAgICAgICBjb25zdCBiID0gdSAmIDB4ZmY7XG4gICAgICAgIHJldHVybiBbciwgZywgYiwgMV07XG4gICAgfVxuXG4gICAgLy8gbWF0Y2ggcmdiYSBoZXggZm9ybWF0LCBlZyAjRkYwMDAwNzdcbiAgICBpZiAoaGV4Lm1hdGNoKFJFX0hFWEEpKSB7XG4gICAgICAgIGlmIChoZXgubGVuZ3RoID09PSA1IHx8IGhleC5sZW5ndGggPT09IDkpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBvcHRpb25hbCBsZWFkaW5nICNcbiAgICAgICAgICAgIGhleCA9IGhleC5zdWJzdHIoMSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgZWlnaHQtZGlnaXRcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIGhleCA9IGhleC5zcGxpdCgnJyk7XG4gICAgICAgICAgICBoZXggPVxuICAgICAgICAgICAgICAgIGhleFswXSArXG4gICAgICAgICAgICAgICAgaGV4WzBdICtcbiAgICAgICAgICAgICAgICBoZXhbMV0gK1xuICAgICAgICAgICAgICAgIGhleFsxXSArXG4gICAgICAgICAgICAgICAgaGV4WzJdICtcbiAgICAgICAgICAgICAgICBoZXhbMl0gK1xuICAgICAgICAgICAgICAgIGhleFszXSArXG4gICAgICAgICAgICAgICAgaGV4WzNdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHUgPSBwYXJzZUludChoZXgsIDE2KTtcbiAgICAgICAgY29uc3QgciA9ICh1ID4+IDI0KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGcgPSAodSA+PiAxNikgJiAweGZmO1xuICAgICAgICBjb25zdCBiID0gKHUgPj4gOCkgJiAweGZmO1xuICAgICAgICBjb25zdCBhID0gTWF0aC5yb3VuZCgoKHUgJiAweGZmKSAvIDB4ZmYpICogMTAwKSAvIDEwMDtcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCBhXTtcbiAgICB9XG5cbiAgICAvLyB3ZSB1c2VkIHRvIGNoZWNrIGZvciBjc3MgY29sb3JzIGhlcmVcbiAgICAvLyBpZiBfaW5wdXQuY3NzPyBhbmQgcmdiID0gX2lucHV0LmNzcyBoZXhcbiAgICAvLyAgICAgcmV0dXJuIHJnYlxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGhleCBjb2xvcjogJHtoZXh9YCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoZXgycmdiO1xuIiwgImltcG9ydCB7IHVucGFjaywgbGFzdCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJoZXggPSAoLi4uYXJncykgPT4ge1xuICAgIGxldCBbciwgZywgYiwgYV0gPSB1bnBhY2soYXJncywgJ3JnYmEnKTtcbiAgICBsZXQgbW9kZSA9IGxhc3QoYXJncykgfHwgJ2F1dG8nO1xuICAgIGlmIChhID09PSB1bmRlZmluZWQpIGEgPSAxO1xuICAgIGlmIChtb2RlID09PSAnYXV0bycpIHtcbiAgICAgICAgbW9kZSA9IGEgPCAxID8gJ3JnYmEnIDogJ3JnYic7XG4gICAgfVxuICAgIHIgPSByb3VuZChyKTtcbiAgICBnID0gcm91bmQoZyk7XG4gICAgYiA9IHJvdW5kKGIpO1xuICAgIGNvbnN0IHUgPSAociA8PCAxNikgfCAoZyA8PCA4KSB8IGI7XG4gICAgbGV0IHN0ciA9ICcwMDAwMDAnICsgdS50b1N0cmluZygxNik7IC8vIy50b1VwcGVyQ2FzZSgpO1xuICAgIHN0ciA9IHN0ci5zdWJzdHIoc3RyLmxlbmd0aCAtIDYpO1xuICAgIGxldCBoeGEgPSAnMCcgKyByb3VuZChhICogMjU1KS50b1N0cmluZygxNik7XG4gICAgaHhhID0gaHhhLnN1YnN0cihoeGEubGVuZ3RoIC0gMik7XG4gICAgc3dpdGNoIChtb2RlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAncmdiYSc6XG4gICAgICAgICAgICByZXR1cm4gYCMke3N0cn0ke2h4YX1gO1xuICAgICAgICBjYXNlICdhcmdiJzpcbiAgICAgICAgICAgIHJldHVybiBgIyR7aHhhfSR7c3RyfWA7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYCMke3N0cn1gO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoZXg7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCB7IHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhleDJyZ2IgZnJvbSAnLi9oZXgycmdiLmpzJztcbmltcG9ydCByZ2IyaGV4IGZyb20gJy4vcmdiMmhleC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oZXggPSBmdW5jdGlvbiAobW9kZSkge1xuICAgIHJldHVybiByZ2IyaGV4KHRoaXMuX3JnYiwgbW9kZSk7XG59O1xuXG5jaHJvbWEuaGV4ID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnaGV4Jyk7XG5cbmlucHV0LmZvcm1hdC5oZXggPSBoZXgycmdiO1xuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiA0LFxuICAgIHRlc3Q6IChoLCAuLi5yZXN0KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFyZXN0Lmxlbmd0aCAmJlxuICAgICAgICAgICAgdHlwZShoKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIFszLCA0LCA1LCA2LCA3LCA4LCA5XS5pbmRleE9mKGgubGVuZ3RoKSA+PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuICdoZXgnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsaW1pdCwgVFdPUEksIFBJVEhJUkQgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IGNvcyB9ID0gTWF0aDtcblxuLypcbiAqIGh1ZSBbMC4uMzYwXVxuICogc2F0dXJhdGlvbiBbMC4uMV1cbiAqIGludGVuc2l0eSBbMC4uMV1cbiAqL1xuY29uc3QgaHNpMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgLypcbiAgICBib3Jyb3dlZCBmcm9tIGhlcmU6XG4gICAgaHR0cDovL2h1bW1lci5zdGFuZm9yZC5lZHUvbXVzZWluZm8vZG9jL2V4YW1wbGVzL2h1bWRydW0va2V5c2NhcGUyL2hzaTJyZ2IuY3BwXG4gICAgKi9cbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2knKTtcbiAgICBsZXQgW2gsIHMsIGldID0gYXJncztcbiAgICBsZXQgciwgZywgYjtcblxuICAgIGlmIChpc05hTihoKSkgaCA9IDA7XG4gICAgaWYgKGlzTmFOKHMpKSBzID0gMDtcbiAgICAvLyBub3JtYWxpemUgaHVlXG4gICAgaWYgKGggPiAzNjApIGggLT0gMzYwO1xuICAgIGlmIChoIDwgMCkgaCArPSAzNjA7XG4gICAgaCAvPSAzNjA7XG4gICAgaWYgKGggPCAxIC8gMykge1xuICAgICAgICBiID0gKDEgLSBzKSAvIDM7XG4gICAgICAgIHIgPSAoMSArIChzICogY29zKFRXT1BJICogaCkpIC8gY29zKFBJVEhJUkQgLSBUV09QSSAqIGgpKSAvIDM7XG4gICAgICAgIGcgPSAxIC0gKGIgKyByKTtcbiAgICB9IGVsc2UgaWYgKGggPCAyIC8gMykge1xuICAgICAgICBoIC09IDEgLyAzO1xuICAgICAgICByID0gKDEgLSBzKSAvIDM7XG4gICAgICAgIGcgPSAoMSArIChzICogY29zKFRXT1BJICogaCkpIC8gY29zKFBJVEhJUkQgLSBUV09QSSAqIGgpKSAvIDM7XG4gICAgICAgIGIgPSAxIC0gKHIgKyBnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBoIC09IDIgLyAzO1xuICAgICAgICBnID0gKDEgLSBzKSAvIDM7XG4gICAgICAgIGIgPSAoMSArIChzICogY29zKFRXT1BJICogaCkpIC8gY29zKFBJVEhJUkQgLSBUV09QSSAqIGgpKSAvIDM7XG4gICAgICAgIHIgPSAxIC0gKGcgKyBiKTtcbiAgICB9XG4gICAgciA9IGxpbWl0KGkgKiByICogMyk7XG4gICAgZyA9IGxpbWl0KGkgKiBnICogMyk7XG4gICAgYiA9IGxpbWl0KGkgKiBiICogMyk7XG4gICAgcmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1LCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoc2kycmdiO1xuIiwgImltcG9ydCB7IHVucGFjaywgVFdPUEkgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IG1pbiwgc3FydCwgYWNvcyB9ID0gTWF0aDtcblxuY29uc3QgcmdiMmhzaSA9ICguLi5hcmdzKSA9PiB7XG4gICAgLypcbiAgICBib3Jyb3dlZCBmcm9tIGhlcmU6XG4gICAgaHR0cDovL2h1bW1lci5zdGFuZm9yZC5lZHUvbXVzZWluZm8vZG9jL2V4YW1wbGVzL2h1bWRydW0va2V5c2NhcGUyL3JnYjJoc2kuY3BwXG4gICAgKi9cbiAgICBsZXQgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICByIC89IDI1NTtcbiAgICBnIC89IDI1NTtcbiAgICBiIC89IDI1NTtcbiAgICBsZXQgaDtcbiAgICBjb25zdCBtaW5fID0gbWluKHIsIGcsIGIpO1xuICAgIGNvbnN0IGkgPSAociArIGcgKyBiKSAvIDM7XG4gICAgY29uc3QgcyA9IGkgPiAwID8gMSAtIG1pbl8gLyBpIDogMDtcbiAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICBoID0gTmFOO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGggPSAociAtIGcgKyAociAtIGIpKSAvIDI7XG4gICAgICAgIGggLz0gc3FydCgociAtIGcpICogKHIgLSBnKSArIChyIC0gYikgKiAoZyAtIGIpKTtcbiAgICAgICAgaCA9IGFjb3MoaCk7XG4gICAgICAgIGlmIChiID4gZykge1xuICAgICAgICAgICAgaCA9IFRXT1BJIC0gaDtcbiAgICAgICAgfVxuICAgICAgICBoIC89IFRXT1BJO1xuICAgIH1cbiAgICByZXR1cm4gW2ggKiAzNjAsIHMsIGldO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmhzaTtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCBoc2kycmdiIGZyb20gJy4vaHNpMnJnYi5qcyc7XG5pbXBvcnQgcmdiMmhzaSBmcm9tICcuL3JnYjJoc2kuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuaHNpID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IyaHNpKHRoaXMuX3JnYik7XG59O1xuXG5jaHJvbWEuaHNpID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnaHNpJyk7XG5cbmlucHV0LmZvcm1hdC5oc2kgPSBoc2kycmdiO1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDIsXG4gICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCAnaHNpJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2hzaSc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCBoc2wycmdiIGZyb20gJy4vaHNsMnJnYi5qcyc7XG5pbXBvcnQgcmdiMmhzbCBmcm9tICcuL3JnYjJoc2wuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuaHNsID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IyaHNsKHRoaXMuX3JnYik7XG59O1xuXG5jaHJvbWEuaHNsID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnaHNsJyk7XG5cbmlucHV0LmZvcm1hdC5oc2wgPSBoc2wycmdiO1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDIsXG4gICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCAnaHNsJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2hzbCc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IGZsb29yIH0gPSBNYXRoO1xuXG5jb25zdCBoc3YycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc3YnKTtcbiAgICBsZXQgW2gsIHMsIHZdID0gYXJncztcbiAgICBsZXQgciwgZywgYjtcbiAgICB2ICo9IDI1NTtcbiAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICByID0gZyA9IGIgPSB2O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChoID09PSAzNjApIGggPSAwO1xuICAgICAgICBpZiAoaCA+IDM2MCkgaCAtPSAzNjA7XG4gICAgICAgIGlmIChoIDwgMCkgaCArPSAzNjA7XG4gICAgICAgIGggLz0gNjA7XG5cbiAgICAgICAgY29uc3QgaSA9IGZsb29yKGgpO1xuICAgICAgICBjb25zdCBmID0gaCAtIGk7XG4gICAgICAgIGNvbnN0IHAgPSB2ICogKDEgLSBzKTtcbiAgICAgICAgY29uc3QgcSA9IHYgKiAoMSAtIHMgKiBmKTtcbiAgICAgICAgY29uc3QgdCA9IHYgKiAoMSAtIHMgKiAoMSAtIGYpKTtcblxuICAgICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbdiwgdCwgcF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3EsIHYsIHBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFtwLCB2LCB0XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbcCwgcSwgdl07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3QsIHAsIHZdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFt2LCBwLCBxXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW3IsIGcsIGIsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzdjJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBtaW4sIG1heCB9ID0gTWF0aDtcblxuLypcbiAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gKiAtIHJnYjJoc3YocixnLGIpXG4gKiAtIHJnYjJoc3YoW3IsZyxiXSlcbiAqIC0gcmdiMmhzdih7cixnLGJ9KVxuICovXG5jb25zdCByZ2IyaHNsID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBsZXQgW3IsIGcsIGJdID0gYXJncztcbiAgICBjb25zdCBtaW5fID0gbWluKHIsIGcsIGIpO1xuICAgIGNvbnN0IG1heF8gPSBtYXgociwgZywgYik7XG4gICAgY29uc3QgZGVsdGEgPSBtYXhfIC0gbWluXztcbiAgICBsZXQgaCwgcywgdjtcbiAgICB2ID0gbWF4XyAvIDI1NS4wO1xuICAgIGlmIChtYXhfID09PSAwKSB7XG4gICAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgICAgICBzID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzID0gZGVsdGEgLyBtYXhfO1xuICAgICAgICBpZiAociA9PT0gbWF4XykgaCA9IChnIC0gYikgLyBkZWx0YTtcbiAgICAgICAgaWYgKGcgPT09IG1heF8pIGggPSAyICsgKGIgLSByKSAvIGRlbHRhO1xuICAgICAgICBpZiAoYiA9PT0gbWF4XykgaCA9IDQgKyAociAtIGcpIC8gZGVsdGE7XG4gICAgICAgIGggKj0gNjA7XG4gICAgICAgIGlmIChoIDwgMCkgaCArPSAzNjA7XG4gICAgfVxuICAgIHJldHVybiBbaCwgcywgdl07XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IyaHNsO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhzdjJyZ2IgZnJvbSAnLi9oc3YycmdiLmpzJztcbmltcG9ydCByZ2IyaHN2IGZyb20gJy4vcmdiMmhzdi5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oc3YgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJoc3YodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5oc3YgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoc3YnKTtcblxuaW5wdXQuZm9ybWF0LmhzdiA9IGhzdjJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc3YnKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnaHN2JztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImV4cG9ydCBkZWZhdWx0IHtcbiAgICAvLyBDb3JyZXNwb25kcyByb3VnaGx5IHRvIFJHQiBicmlnaHRlci9kYXJrZXJcbiAgICBLbjogMTgsXG5cbiAgICAvLyBENjUgc3RhbmRhcmQgcmVmZXJlbnRcbiAgICBYbjogMC45NTA0NyxcbiAgICBZbjogMSxcbiAgICBabjogMS4wODg4MyxcblxuICAgIHQwOiAwLjEzNzkzMTAzNCwgLy8gNCAvIDI5XG4gICAgdDE6IDAuMjA2ODk2NTUyLCAvLyA2IC8gMjlcbiAgICB0MjogMC4xMjg0MTg1NSwgLy8gMyAqIHQxICogdDFcbiAgICB0MzogMC4wMDg4NTY0NTIgLy8gdDEgKiB0MSAqIHQxXG59O1xuIiwgImltcG9ydCBMQUJfQ09OU1RBTlRTIGZyb20gJy4vbGFiLWNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHBvdyB9ID0gTWF0aDtcblxuLypcbiAqIEwqIFswLi4xMDBdXG4gKiBhIFstMTAwLi4xMDBdXG4gKiBiIFstMTAwLi4xMDBdXG4gKi9cbmNvbnN0IGxhYjJyZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2xhYicpO1xuICAgIGNvbnN0IFtsLCBhLCBiXSA9IGFyZ3M7XG4gICAgbGV0IHgsIHksIHosIHIsIGcsIGJfO1xuXG4gICAgeSA9IChsICsgMTYpIC8gMTE2O1xuICAgIHggPSBpc05hTihhKSA/IHkgOiB5ICsgYSAvIDUwMDtcbiAgICB6ID0gaXNOYU4oYikgPyB5IDogeSAtIGIgLyAyMDA7XG5cbiAgICB5ID0gTEFCX0NPTlNUQU5UUy5ZbiAqIGxhYl94eXooeSk7XG4gICAgeCA9IExBQl9DT05TVEFOVFMuWG4gKiBsYWJfeHl6KHgpO1xuICAgIHogPSBMQUJfQ09OU1RBTlRTLlpuICogbGFiX3h5eih6KTtcblxuICAgIHIgPSB4eXpfcmdiKDMuMjQwNDU0MiAqIHggLSAxLjUzNzEzODUgKiB5IC0gMC40OTg1MzE0ICogeik7IC8vIEQ2NSAtPiBzUkdCXG4gICAgZyA9IHh5el9yZ2IoLTAuOTY5MjY2ICogeCArIDEuODc2MDEwOCAqIHkgKyAwLjA0MTU1NiAqIHopO1xuICAgIGJfID0geHl6X3JnYigwLjA1NTY0MzQgKiB4IC0gMC4yMDQwMjU5ICogeSArIDEuMDU3MjI1MiAqIHopO1xuXG4gICAgcmV0dXJuIFtyLCBnLCBiXywgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuY29uc3QgeHl6X3JnYiA9IChyKSA9PiB7XG4gICAgcmV0dXJuIDI1NSAqIChyIDw9IDAuMDAzMDQgPyAxMi45MiAqIHIgOiAxLjA1NSAqIHBvdyhyLCAxIC8gMi40KSAtIDAuMDU1KTtcbn07XG5cbmNvbnN0IGxhYl94eXogPSAodCkgPT4ge1xuICAgIHJldHVybiB0ID4gTEFCX0NPTlNUQU5UUy50MVxuICAgICAgICA/IHQgKiB0ICogdFxuICAgICAgICA6IExBQl9DT05TVEFOVFMudDIgKiAodCAtIExBQl9DT05TVEFOVFMudDApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGFiMnJnYjtcbiIsICJpbXBvcnQgTEFCX0NPTlNUQU5UUyBmcm9tICcuL2xhYi1jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBwb3cgfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJsYWIgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgY29uc3QgW3gsIHksIHpdID0gcmdiMnh5eihyLCBnLCBiKTtcbiAgICBjb25zdCBsID0gMTE2ICogeSAtIDE2O1xuICAgIHJldHVybiBbbCA8IDAgPyAwIDogbCwgNTAwICogKHggLSB5KSwgMjAwICogKHkgLSB6KV07XG59O1xuXG5jb25zdCByZ2JfeHl6ID0gKHIpID0+IHtcbiAgICBpZiAoKHIgLz0gMjU1KSA8PSAwLjA0MDQ1KSByZXR1cm4gciAvIDEyLjkyO1xuICAgIHJldHVybiBwb3coKHIgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn07XG5cbmNvbnN0IHh5el9sYWIgPSAodCkgPT4ge1xuICAgIGlmICh0ID4gTEFCX0NPTlNUQU5UUy50MykgcmV0dXJuIHBvdyh0LCAxIC8gMyk7XG4gICAgcmV0dXJuIHQgLyBMQUJfQ09OU1RBTlRTLnQyICsgTEFCX0NPTlNUQU5UUy50MDtcbn07XG5cbmNvbnN0IHJnYjJ4eXogPSAociwgZywgYikgPT4ge1xuICAgIHIgPSByZ2JfeHl6KHIpO1xuICAgIGcgPSByZ2JfeHl6KGcpO1xuICAgIGIgPSByZ2JfeHl6KGIpO1xuICAgIGNvbnN0IHggPSB4eXpfbGFiKFxuICAgICAgICAoMC40MTI0NTY0ICogciArIDAuMzU3NTc2MSAqIGcgKyAwLjE4MDQzNzUgKiBiKSAvIExBQl9DT05TVEFOVFMuWG5cbiAgICApO1xuICAgIGNvbnN0IHkgPSB4eXpfbGFiKFxuICAgICAgICAoMC4yMTI2NzI5ICogciArIDAuNzE1MTUyMiAqIGcgKyAwLjA3MjE3NSAqIGIpIC8gTEFCX0NPTlNUQU5UUy5ZblxuICAgICk7XG4gICAgY29uc3QgeiA9IHh5el9sYWIoXG4gICAgICAgICgwLjAxOTMzMzkgKiByICsgMC4xMTkxOTIgKiBnICsgMC45NTAzMDQxICogYikgLyBMQUJfQ09OU1RBTlRTLlpuXG4gICAgKTtcbiAgICByZXR1cm4gW3gsIHksIHpdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmxhYjtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCBsYWIycmdiIGZyb20gJy4vbGFiMnJnYi5qcyc7XG5pbXBvcnQgcmdiMmxhYiBmcm9tICcuL3JnYjJsYWIuanMnO1xuXG5Db2xvci5wcm90b3R5cGUubGFiID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IybGFiKHRoaXMuX3JnYik7XG59O1xuXG5jaHJvbWEubGFiID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnbGFiJyk7XG5cbmlucHV0LmZvcm1hdC5sYWIgPSBsYWIycmdiO1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDIsXG4gICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGFiJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2xhYic7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIERFRzJSQUQgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHNpbiwgY29zIH0gPSBNYXRoO1xuXG5jb25zdCBsY2gybGFiID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvKlxuICAgIENvbnZlcnQgZnJvbSBhIHF1YWxpdGF0aXZlIHBhcmFtZXRlciBoIGFuZCBhIHF1YW50aXRhdGl2ZSBwYXJhbWV0ZXIgbCB0byBhIDI0LWJpdCBwaXhlbC5cbiAgICBUaGVzZSBmb3JtdWxhcyB3ZXJlIGludmVudGVkIGJ5IERhdmlkIERhbHJ5bXBsZSB0byBvYnRhaW4gbWF4aW11bSBjb250cmFzdCB3aXRob3V0IGdvaW5nXG4gICAgb3V0IG9mIGdhbXV0IGlmIHRoZSBwYXJhbWV0ZXJzIGFyZSBpbiB0aGUgcmFuZ2UgMC0xLlxuXG4gICAgQSBzYXR1cmF0aW9uIG11bHRpcGxpZXIgd2FzIGFkZGVkIGJ5IEdyZWdvciBBaXNjaFxuICAgICovXG4gICAgbGV0IFtsLCBjLCBoXSA9IHVucGFjayhhcmdzLCAnbGNoJyk7XG4gICAgaWYgKGlzTmFOKGgpKSBoID0gMDtcbiAgICBoID0gaCAqIERFRzJSQUQ7XG4gICAgcmV0dXJuIFtsLCBjb3MoaCkgKiBjLCBzaW4oaCkgKiBjXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxjaDJsYWI7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGxjaDJsYWIgZnJvbSAnLi9sY2gybGFiLmpzJztcbmltcG9ydCBsYWIycmdiIGZyb20gJy4uL2xhYi9sYWIycmdiLmpzJztcblxuY29uc3QgbGNoMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGNoJyk7XG4gICAgY29uc3QgW2wsIGMsIGhdID0gYXJncztcbiAgICBjb25zdCBbTCwgYSwgYl9dID0gbGNoMmxhYihsLCBjLCBoKTtcbiAgICBjb25zdCBbciwgZywgYl0gPSBsYWIycmdiKEwsIGEsIGJfKTtcbiAgICByZXR1cm4gW3IsIGcsIGIsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxjaDJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGxjaDJyZ2IgZnJvbSAnLi9sY2gycmdiLmpzJztcblxuY29uc3QgaGNsMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgaGNsID0gdW5wYWNrKGFyZ3MsICdoY2wnKS5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIGxjaDJyZ2IoLi4uaGNsKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhjbDJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBSQUQyREVHIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBzcXJ0LCBhdGFuMiwgcm91bmQgfSA9IE1hdGg7XG5cbmNvbnN0IGxhYjJsY2ggPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IFtsLCBhLCBiXSA9IHVucGFjayhhcmdzLCAnbGFiJyk7XG4gICAgY29uc3QgYyA9IHNxcnQoYSAqIGEgKyBiICogYik7XG4gICAgbGV0IGggPSAoYXRhbjIoYiwgYSkgKiBSQUQyREVHICsgMzYwKSAlIDM2MDtcbiAgICBpZiAocm91bmQoYyAqIDEwMDAwKSA9PT0gMCkgaCA9IE51bWJlci5OYU47XG4gICAgcmV0dXJuIFtsLCBjLCBoXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxhYjJsY2g7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IHJnYjJsYWIgZnJvbSAnLi4vbGFiL3JnYjJsYWIuanMnO1xuaW1wb3J0IGxhYjJsY2ggZnJvbSAnLi9sYWIybGNoLmpzJztcblxuY29uc3QgcmdiMmxjaCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBjb25zdCBbbCwgYSwgYl9dID0gcmdiMmxhYihyLCBnLCBiKTtcbiAgICByZXR1cm4gbGFiMmxjaChsLCBhLCBiXyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IybGNoO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGxjaDJyZ2IgZnJvbSAnLi9sY2gycmdiLmpzJztcbmltcG9ydCBoY2wycmdiIGZyb20gJy4vaGNsMnJnYi5qcyc7XG5pbXBvcnQgcmdiMmxjaCBmcm9tICcuL3JnYjJsY2guanMnO1xuXG5Db2xvci5wcm90b3R5cGUubGNoID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IybGNoKHRoaXMuX3JnYik7XG59O1xuQ29sb3IucHJvdG90eXBlLmhjbCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmxjaCh0aGlzLl9yZ2IpLnJldmVyc2UoKTtcbn07XG5cbmNocm9tYS5sY2ggPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdsY2gnKTtcbmNocm9tYS5oY2wgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoY2wnKTtcblxuaW5wdXQuZm9ybWF0LmxjaCA9IGxjaDJyZ2I7XG5pbnB1dC5mb3JtYXQuaGNsID0gaGNsMnJnYjtcblsnbGNoJywgJ2hjbCddLmZvckVhY2goKG0pID0+XG4gICAgaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMixcbiAgICAgICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgbSk7XG4gICAgICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiBtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcbik7XG4iLCAiLyoqXG5cdFgxMSBjb2xvciBuYW1lc1xuXG5cdGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvI3N2Zy1jb2xvclxuKi9cblxuY29uc3QgdzNjeDExID0ge1xuICAgIGFsaWNlYmx1ZTogJyNmMGY4ZmYnLFxuICAgIGFudGlxdWV3aGl0ZTogJyNmYWViZDcnLFxuICAgIGFxdWE6ICcjMDBmZmZmJyxcbiAgICBhcXVhbWFyaW5lOiAnIzdmZmZkNCcsXG4gICAgYXp1cmU6ICcjZjBmZmZmJyxcbiAgICBiZWlnZTogJyNmNWY1ZGMnLFxuICAgIGJpc3F1ZTogJyNmZmU0YzQnLFxuICAgIGJsYWNrOiAnIzAwMDAwMCcsXG4gICAgYmxhbmNoZWRhbG1vbmQ6ICcjZmZlYmNkJyxcbiAgICBibHVlOiAnIzAwMDBmZicsXG4gICAgYmx1ZXZpb2xldDogJyM4YTJiZTInLFxuICAgIGJyb3duOiAnI2E1MmEyYScsXG4gICAgYnVybHl3b29kOiAnI2RlYjg4NycsXG4gICAgY2FkZXRibHVlOiAnIzVmOWVhMCcsXG4gICAgY2hhcnRyZXVzZTogJyM3ZmZmMDAnLFxuICAgIGNob2NvbGF0ZTogJyNkMjY5MWUnLFxuICAgIGNvcmFsOiAnI2ZmN2Y1MCcsXG4gICAgY29ybmZsb3dlcmJsdWU6ICcjNjQ5NWVkJyxcbiAgICBjb3Juc2lsazogJyNmZmY4ZGMnLFxuICAgIGNyaW1zb246ICcjZGMxNDNjJyxcbiAgICBjeWFuOiAnIzAwZmZmZicsXG4gICAgZGFya2JsdWU6ICcjMDAwMDhiJyxcbiAgICBkYXJrY3lhbjogJyMwMDhiOGInLFxuICAgIGRhcmtnb2xkZW5yb2Q6ICcjYjg4NjBiJyxcbiAgICBkYXJrZ3JheTogJyNhOWE5YTknLFxuICAgIGRhcmtncmVlbjogJyMwMDY0MDAnLFxuICAgIGRhcmtncmV5OiAnI2E5YTlhOScsXG4gICAgZGFya2toYWtpOiAnI2JkYjc2YicsXG4gICAgZGFya21hZ2VudGE6ICcjOGIwMDhiJyxcbiAgICBkYXJrb2xpdmVncmVlbjogJyM1NTZiMmYnLFxuICAgIGRhcmtvcmFuZ2U6ICcjZmY4YzAwJyxcbiAgICBkYXJrb3JjaGlkOiAnIzk5MzJjYycsXG4gICAgZGFya3JlZDogJyM4YjAwMDAnLFxuICAgIGRhcmtzYWxtb246ICcjZTk5NjdhJyxcbiAgICBkYXJrc2VhZ3JlZW46ICcjOGZiYzhmJyxcbiAgICBkYXJrc2xhdGVibHVlOiAnIzQ4M2Q4YicsXG4gICAgZGFya3NsYXRlZ3JheTogJyMyZjRmNGYnLFxuICAgIGRhcmtzbGF0ZWdyZXk6ICcjMmY0ZjRmJyxcbiAgICBkYXJrdHVycXVvaXNlOiAnIzAwY2VkMScsXG4gICAgZGFya3Zpb2xldDogJyM5NDAwZDMnLFxuICAgIGRlZXBwaW5rOiAnI2ZmMTQ5MycsXG4gICAgZGVlcHNreWJsdWU6ICcjMDBiZmZmJyxcbiAgICBkaW1ncmF5OiAnIzY5Njk2OScsXG4gICAgZGltZ3JleTogJyM2OTY5NjknLFxuICAgIGRvZGdlcmJsdWU6ICcjMWU5MGZmJyxcbiAgICBmaXJlYnJpY2s6ICcjYjIyMjIyJyxcbiAgICBmbG9yYWx3aGl0ZTogJyNmZmZhZjAnLFxuICAgIGZvcmVzdGdyZWVuOiAnIzIyOGIyMicsXG4gICAgZnVjaHNpYTogJyNmZjAwZmYnLFxuICAgIGdhaW5zYm9ybzogJyNkY2RjZGMnLFxuICAgIGdob3N0d2hpdGU6ICcjZjhmOGZmJyxcbiAgICBnb2xkOiAnI2ZmZDcwMCcsXG4gICAgZ29sZGVucm9kOiAnI2RhYTUyMCcsXG4gICAgZ3JheTogJyM4MDgwODAnLFxuICAgIGdyZWVuOiAnIzAwODAwMCcsXG4gICAgZ3JlZW55ZWxsb3c6ICcjYWRmZjJmJyxcbiAgICBncmV5OiAnIzgwODA4MCcsXG4gICAgaG9uZXlkZXc6ICcjZjBmZmYwJyxcbiAgICBob3RwaW5rOiAnI2ZmNjliNCcsXG4gICAgaW5kaWFucmVkOiAnI2NkNWM1YycsXG4gICAgaW5kaWdvOiAnIzRiMDA4MicsXG4gICAgaXZvcnk6ICcjZmZmZmYwJyxcbiAgICBraGFraTogJyNmMGU2OGMnLFxuICAgIGxhc2VybGVtb246ICcjZmZmZjU0JyxcbiAgICBsYXZlbmRlcjogJyNlNmU2ZmEnLFxuICAgIGxhdmVuZGVyYmx1c2g6ICcjZmZmMGY1JyxcbiAgICBsYXduZ3JlZW46ICcjN2NmYzAwJyxcbiAgICBsZW1vbmNoaWZmb246ICcjZmZmYWNkJyxcbiAgICBsaWdodGJsdWU6ICcjYWRkOGU2JyxcbiAgICBsaWdodGNvcmFsOiAnI2YwODA4MCcsXG4gICAgbGlnaHRjeWFuOiAnI2UwZmZmZicsXG4gICAgbGlnaHRnb2xkZW5yb2Q6ICcjZmFmYWQyJyxcbiAgICBsaWdodGdvbGRlbnJvZHllbGxvdzogJyNmYWZhZDInLFxuICAgIGxpZ2h0Z3JheTogJyNkM2QzZDMnLFxuICAgIGxpZ2h0Z3JlZW46ICcjOTBlZTkwJyxcbiAgICBsaWdodGdyZXk6ICcjZDNkM2QzJyxcbiAgICBsaWdodHBpbms6ICcjZmZiNmMxJyxcbiAgICBsaWdodHNhbG1vbjogJyNmZmEwN2EnLFxuICAgIGxpZ2h0c2VhZ3JlZW46ICcjMjBiMmFhJyxcbiAgICBsaWdodHNreWJsdWU6ICcjODdjZWZhJyxcbiAgICBsaWdodHNsYXRlZ3JheTogJyM3Nzg4OTknLFxuICAgIGxpZ2h0c2xhdGVncmV5OiAnIzc3ODg5OScsXG4gICAgbGlnaHRzdGVlbGJsdWU6ICcjYjBjNGRlJyxcbiAgICBsaWdodHllbGxvdzogJyNmZmZmZTAnLFxuICAgIGxpbWU6ICcjMDBmZjAwJyxcbiAgICBsaW1lZ3JlZW46ICcjMzJjZDMyJyxcbiAgICBsaW5lbjogJyNmYWYwZTYnLFxuICAgIG1hZ2VudGE6ICcjZmYwMGZmJyxcbiAgICBtYXJvb246ICcjODAwMDAwJyxcbiAgICBtYXJvb24yOiAnIzdmMDAwMCcsXG4gICAgbWFyb29uMzogJyNiMDMwNjAnLFxuICAgIG1lZGl1bWFxdWFtYXJpbmU6ICcjNjZjZGFhJyxcbiAgICBtZWRpdW1ibHVlOiAnIzAwMDBjZCcsXG4gICAgbWVkaXVtb3JjaGlkOiAnI2JhNTVkMycsXG4gICAgbWVkaXVtcHVycGxlOiAnIzkzNzBkYicsXG4gICAgbWVkaXVtc2VhZ3JlZW46ICcjM2NiMzcxJyxcbiAgICBtZWRpdW1zbGF0ZWJsdWU6ICcjN2I2OGVlJyxcbiAgICBtZWRpdW1zcHJpbmdncmVlbjogJyMwMGZhOWEnLFxuICAgIG1lZGl1bXR1cnF1b2lzZTogJyM0OGQxY2MnLFxuICAgIG1lZGl1bXZpb2xldHJlZDogJyNjNzE1ODUnLFxuICAgIG1pZG5pZ2h0Ymx1ZTogJyMxOTE5NzAnLFxuICAgIG1pbnRjcmVhbTogJyNmNWZmZmEnLFxuICAgIG1pc3R5cm9zZTogJyNmZmU0ZTEnLFxuICAgIG1vY2Nhc2luOiAnI2ZmZTRiNScsXG4gICAgbmF2YWpvd2hpdGU6ICcjZmZkZWFkJyxcbiAgICBuYXZ5OiAnIzAwMDA4MCcsXG4gICAgb2xkbGFjZTogJyNmZGY1ZTYnLFxuICAgIG9saXZlOiAnIzgwODAwMCcsXG4gICAgb2xpdmVkcmFiOiAnIzZiOGUyMycsXG4gICAgb3JhbmdlOiAnI2ZmYTUwMCcsXG4gICAgb3JhbmdlcmVkOiAnI2ZmNDUwMCcsXG4gICAgb3JjaGlkOiAnI2RhNzBkNicsXG4gICAgcGFsZWdvbGRlbnJvZDogJyNlZWU4YWEnLFxuICAgIHBhbGVncmVlbjogJyM5OGZiOTgnLFxuICAgIHBhbGV0dXJxdW9pc2U6ICcjYWZlZWVlJyxcbiAgICBwYWxldmlvbGV0cmVkOiAnI2RiNzA5MycsXG4gICAgcGFwYXlhd2hpcDogJyNmZmVmZDUnLFxuICAgIHBlYWNocHVmZjogJyNmZmRhYjknLFxuICAgIHBlcnU6ICcjY2Q4NTNmJyxcbiAgICBwaW5rOiAnI2ZmYzBjYicsXG4gICAgcGx1bTogJyNkZGEwZGQnLFxuICAgIHBvd2RlcmJsdWU6ICcjYjBlMGU2JyxcbiAgICBwdXJwbGU6ICcjODAwMDgwJyxcbiAgICBwdXJwbGUyOiAnIzdmMDA3ZicsXG4gICAgcHVycGxlMzogJyNhMDIwZjAnLFxuICAgIHJlYmVjY2FwdXJwbGU6ICcjNjYzMzk5JyxcbiAgICByZWQ6ICcjZmYwMDAwJyxcbiAgICByb3N5YnJvd246ICcjYmM4ZjhmJyxcbiAgICByb3lhbGJsdWU6ICcjNDE2OWUxJyxcbiAgICBzYWRkbGVicm93bjogJyM4YjQ1MTMnLFxuICAgIHNhbG1vbjogJyNmYTgwNzInLFxuICAgIHNhbmR5YnJvd246ICcjZjRhNDYwJyxcbiAgICBzZWFncmVlbjogJyMyZThiNTcnLFxuICAgIHNlYXNoZWxsOiAnI2ZmZjVlZScsXG4gICAgc2llbm5hOiAnI2EwNTIyZCcsXG4gICAgc2lsdmVyOiAnI2MwYzBjMCcsXG4gICAgc2t5Ymx1ZTogJyM4N2NlZWInLFxuICAgIHNsYXRlYmx1ZTogJyM2YTVhY2QnLFxuICAgIHNsYXRlZ3JheTogJyM3MDgwOTAnLFxuICAgIHNsYXRlZ3JleTogJyM3MDgwOTAnLFxuICAgIHNub3c6ICcjZmZmYWZhJyxcbiAgICBzcHJpbmdncmVlbjogJyMwMGZmN2YnLFxuICAgIHN0ZWVsYmx1ZTogJyM0NjgyYjQnLFxuICAgIHRhbjogJyNkMmI0OGMnLFxuICAgIHRlYWw6ICcjMDA4MDgwJyxcbiAgICB0aGlzdGxlOiAnI2Q4YmZkOCcsXG4gICAgdG9tYXRvOiAnI2ZmNjM0NycsXG4gICAgdHVycXVvaXNlOiAnIzQwZTBkMCcsXG4gICAgdmlvbGV0OiAnI2VlODJlZScsXG4gICAgd2hlYXQ6ICcjZjVkZWIzJyxcbiAgICB3aGl0ZTogJyNmZmZmZmYnLFxuICAgIHdoaXRlc21va2U6ICcjZjVmNWY1JyxcbiAgICB5ZWxsb3c6ICcjZmZmZjAwJyxcbiAgICB5ZWxsb3dncmVlbjogJyM5YWNkMzInXG59O1xuXG5leHBvcnQgZGVmYXVsdCB3M2N4MTE7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5pbXBvcnQgdzNjeDExIGZyb20gJy4uLy4uL2NvbG9ycy93M2N4MTEuanMnO1xuaW1wb3J0IGhleDJyZ2IgZnJvbSAnLi4vaGV4L2hleDJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoZXggZnJvbSAnLi4vaGV4L3JnYjJoZXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUubmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBoZXggPSByZ2IyaGV4KHRoaXMuX3JnYiwgJ3JnYicpO1xuICAgIGZvciAobGV0IG4gb2YgT2JqZWN0LmtleXModzNjeDExKSkge1xuICAgICAgICBpZiAodzNjeDExW25dID09PSBoZXgpIHJldHVybiBuLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiBoZXg7XG59O1xuXG5pbnB1dC5mb3JtYXQubmFtZWQgPSAobmFtZSkgPT4ge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHczY3gxMVtuYW1lXSkgcmV0dXJuIGhleDJyZ2IodzNjeDExW25hbWVdKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY29sb3IgbmFtZTogJyArIG5hbWUpO1xufTtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiA1LFxuICAgIHRlc3Q6IChoLCAuLi5yZXN0KSA9PiB7XG4gICAgICAgIGlmICghcmVzdC5sZW5ndGggJiYgdHlwZShoKSA9PT0gJ3N0cmluZycgJiYgdzNjeDExW2gudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgIHJldHVybiAnbmFtZWQnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcblxuY29uc3QgbnVtMnJnYiA9IChudW0pID0+IHtcbiAgICBpZiAodHlwZShudW0pID09ICdudW1iZXInICYmIG51bSA+PSAwICYmIG51bSA8PSAweGZmZmZmZikge1xuICAgICAgICBjb25zdCByID0gbnVtID4+IDE2O1xuICAgICAgICBjb25zdCBnID0gKG51bSA+PiA4KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGIgPSBudW0gJiAweGZmO1xuICAgICAgICByZXR1cm4gW3IsIGcsIGIsIDFdO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gbnVtIGNvbG9yOiAnICsgbnVtKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG51bTJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCByZ2IybnVtID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIHJldHVybiAociA8PCAxNikgKyAoZyA8PCA4KSArIGI7XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IybnVtO1xuIiwgImltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBudW0ycmdiIGZyb20gJy4vbnVtMnJnYi5qcyc7XG5pbXBvcnQgcmdiMm51bSBmcm9tICcuL3JnYjJudW0uanMnO1xuXG5Db2xvci5wcm90b3R5cGUubnVtID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IybnVtKHRoaXMuX3JnYik7XG59O1xuXG5jaHJvbWEubnVtID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnbnVtJyk7XG5cbmlucHV0LmZvcm1hdC5udW0gPSBudW0ycmdiO1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDUsXG4gICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgYXJncy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgIHR5cGUoYXJnc1swXSkgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICBhcmdzWzBdID49IDAgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0gPD0gMHhmZmZmZmZcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gJ251bSc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbkNvbG9yLnByb3RvdHlwZS5yZ2IgPSBmdW5jdGlvbiAocm5kID0gdHJ1ZSkge1xuICAgIGlmIChybmQgPT09IGZhbHNlKSByZXR1cm4gdGhpcy5fcmdiLnNsaWNlKDAsIDMpO1xuICAgIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwgMykubWFwKHJvdW5kKTtcbn07XG5cbkNvbG9yLnByb3RvdHlwZS5yZ2JhID0gZnVuY3Rpb24gKHJuZCA9IHRydWUpIHtcbiAgICByZXR1cm4gdGhpcy5fcmdiLnNsaWNlKDAsIDQpLm1hcCgodiwgaSkgPT4ge1xuICAgICAgICByZXR1cm4gaSA8IDMgPyAocm5kID09PSBmYWxzZSA/IHYgOiByb3VuZCh2KSkgOiB2O1xuICAgIH0pO1xufTtcblxuY2hyb21hLnJnYiA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ3JnYicpO1xuXG5pbnB1dC5mb3JtYXQucmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCByZ2JhID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgaWYgKHJnYmFbM10gPT09IHVuZGVmaW5lZCkgcmdiYVszXSA9IDE7XG4gICAgcmV0dXJuIHJnYmE7XG59O1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDMsXG4gICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCAncmdiYScpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAoYXJncy5sZW5ndGggPT09IDMgfHxcbiAgICAgICAgICAgICAgICAoYXJncy5sZW5ndGggPT09IDQgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZShhcmdzWzNdKSA9PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgICAgICBhcmdzWzNdID49IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgYXJnc1szXSA8PSAxKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3JnYic7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICIvKlxuICogQmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgTmVpbCBCYXJ0bGV0dFxuICogaHR0cHM6Ly9naXRodWIuY29tL25laWxiYXJ0bGV0dC9jb2xvci10ZW1wZXJhdHVyZVxuICovXG5cbmNvbnN0IHsgbG9nIH0gPSBNYXRoO1xuXG5jb25zdCB0ZW1wZXJhdHVyZTJyZ2IgPSAoa2VsdmluKSA9PiB7XG4gICAgY29uc3QgdGVtcCA9IGtlbHZpbiAvIDEwMDtcbiAgICBsZXQgciwgZywgYjtcbiAgICBpZiAodGVtcCA8IDY2KSB7XG4gICAgICAgIHIgPSAyNTU7XG4gICAgICAgIGcgPVxuICAgICAgICAgICAgdGVtcCA8IDZcbiAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICA6IC0xNTUuMjU0ODU1NjI3MDkxNzkgLVxuICAgICAgICAgICAgICAgICAgMC40NDU5Njk1MDQ2OTU3OTEzMyAqIChnID0gdGVtcCAtIDIpICtcbiAgICAgICAgICAgICAgICAgIDEwNC40OTIxNjE5OTM5Mzg4OCAqIGxvZyhnKTtcbiAgICAgICAgYiA9XG4gICAgICAgICAgICB0ZW1wIDwgMjBcbiAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICA6IC0yNTQuNzY5MzUxODQxMjA5MDIgK1xuICAgICAgICAgICAgICAgICAgMC44Mjc0MDk2MDY0MDA3Mzk1ICogKGIgPSB0ZW1wIC0gMTApICtcbiAgICAgICAgICAgICAgICAgIDExNS42Nzk5NDQwMTA2NjE0NyAqIGxvZyhiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByID1cbiAgICAgICAgICAgIDM1MS45NzY5MDU2NjgwNTY5MyArXG4gICAgICAgICAgICAwLjExNDIwNjQ1Mzc4NDE2NSAqIChyID0gdGVtcCAtIDU1KSAtXG4gICAgICAgICAgICA0MC4yNTM2NjMwOTMzMjEyNyAqIGxvZyhyKTtcbiAgICAgICAgZyA9XG4gICAgICAgICAgICAzMjUuNDQ5NDEyNTcxMTk3NCArXG4gICAgICAgICAgICAwLjA3OTQzNDU2NTM2NjYyMzQyICogKGcgPSB0ZW1wIC0gNTApIC1cbiAgICAgICAgICAgIDI4LjA4NTI5NjM1MDc5NTcgKiBsb2coZyk7XG4gICAgICAgIGIgPSAyNTU7XG4gICAgfVxuICAgIHJldHVybiBbciwgZywgYiwgMV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0ZW1wZXJhdHVyZTJyZ2I7XG4iLCAiLypcbiAqIEJhc2VkIG9uIGltcGxlbWVudGF0aW9uIGJ5IE5laWwgQmFydGxldHRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWlsYmFydGxldHQvY29sb3ItdGVtcGVyYXR1cmVcbiAqKi9cblxuaW1wb3J0IHRlbXBlcmF0dXJlMnJnYiBmcm9tICcuL3RlbXBlcmF0dXJlMnJnYi5qcyc7XG5pbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHJvdW5kIH0gPSBNYXRoO1xuXG5jb25zdCByZ2IydGVtcGVyYXR1cmUgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IHJnYiA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgY29uc3QgciA9IHJnYlswXSxcbiAgICAgICAgYiA9IHJnYlsyXTtcbiAgICBsZXQgbWluVGVtcCA9IDEwMDA7XG4gICAgbGV0IG1heFRlbXAgPSA0MDAwMDtcbiAgICBjb25zdCBlcHMgPSAwLjQ7XG4gICAgbGV0IHRlbXA7XG4gICAgd2hpbGUgKG1heFRlbXAgLSBtaW5UZW1wID4gZXBzKSB7XG4gICAgICAgIHRlbXAgPSAobWF4VGVtcCArIG1pblRlbXApICogMC41O1xuICAgICAgICBjb25zdCByZ2IgPSB0ZW1wZXJhdHVyZTJyZ2IodGVtcCk7XG4gICAgICAgIGlmIChyZ2JbMl0gLyByZ2JbMF0gPj0gYiAvIHIpIHtcbiAgICAgICAgICAgIG1heFRlbXAgPSB0ZW1wO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWluVGVtcCA9IHRlbXA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvdW5kKHRlbXApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMnRlbXBlcmF0dXJlO1xuIiwgImltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IHRlbXBlcmF0dXJlMnJnYiBmcm9tICcuL3RlbXBlcmF0dXJlMnJnYi5qcyc7XG5pbXBvcnQgcmdiMnRlbXBlcmF0dXJlIGZyb20gJy4vcmdiMnRlbXBlcmF0dXJlLmpzJztcblxuQ29sb3IucHJvdG90eXBlLnRlbXAgPVxuICAgIENvbG9yLnByb3RvdHlwZS5rZWx2aW4gPVxuICAgIENvbG9yLnByb3RvdHlwZS50ZW1wZXJhdHVyZSA9XG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByZ2IydGVtcGVyYXR1cmUodGhpcy5fcmdiKTtcbiAgICAgICAgfTtcblxuY2hyb21hLnRlbXAgPVxuICAgIGNocm9tYS5rZWx2aW4gPVxuICAgIGNocm9tYS50ZW1wZXJhdHVyZSA9XG4gICAgICAgICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ3RlbXAnKTtcblxuaW5wdXQuZm9ybWF0LnRlbXAgPVxuICAgIGlucHV0LmZvcm1hdC5rZWx2aW4gPVxuICAgIGlucHV0LmZvcm1hdC50ZW1wZXJhdHVyZSA9XG4gICAgICAgIHRlbXBlcmF0dXJlMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHBvdywgc2lnbiB9ID0gTWF0aDtcblxuLypcbiAqIEwqIFswLi4xMDBdXG4gKiBhIFstMTAwLi4xMDBdXG4gKiBiIFstMTAwLi4xMDBdXG4gKi9cbmNvbnN0IG9rbGFiMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGFiJyk7XG4gICAgY29uc3QgW0wsIGEsIGJdID0gYXJncztcblxuICAgIGNvbnN0IGwgPSBwb3coTCArIDAuMzk2MzM3Nzc3NCAqIGEgKyAwLjIxNTgwMzc1NzMgKiBiLCAzKTtcbiAgICBjb25zdCBtID0gcG93KEwgLSAwLjEwNTU2MTM0NTggKiBhIC0gMC4wNjM4NTQxNzI4ICogYiwgMyk7XG4gICAgY29uc3QgcyA9IHBvdyhMIC0gMC4wODk0ODQxNzc1ICogYSAtIDEuMjkxNDg1NTQ4ICogYiwgMyk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgICAyNTUgKiBscmdiMnJnYigrNC4wNzY3NDE2NjIxICogbCAtIDMuMzA3NzExNTkxMyAqIG0gKyAwLjIzMDk2OTkyOTIgKiBzKSxcbiAgICAgICAgMjU1ICogbHJnYjJyZ2IoLTEuMjY4NDM4MDA0NiAqIGwgKyAyLjYwOTc1NzQwMTEgKiBtIC0gMC4zNDEzMTkzOTY1ICogcyksXG4gICAgICAgIDI1NSAqIGxyZ2IycmdiKC0wLjAwNDE5NjA4NjMgKiBsIC0gMC43MDM0MTg2MTQ3ICogbSArIDEuNzA3NjE0NzAxICogcyksXG4gICAgICAgIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXG4gICAgXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG9rbGFiMnJnYjtcblxuZnVuY3Rpb24gbHJnYjJyZ2IoYykge1xuICAgIGNvbnN0IGFicyA9IE1hdGguYWJzKGMpO1xuICAgIGlmIChhYnMgPiAwLjAwMzEzMDgpIHtcbiAgICAgICAgcmV0dXJuIChzaWduKGMpIHx8IDEpICogKDEuMDU1ICogcG93KGFicywgMSAvIDIuNCkgLSAwLjA1NSk7XG4gICAgfVxuICAgIHJldHVybiBjICogMTIuOTI7XG59XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBjYnJ0LCBwb3csIHNpZ24gfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJva2xhYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgLy8gT0tMYWIgY29sb3Igc3BhY2UgaW1wbGVtZW50YXRpb24gdGFrZW4gZnJvbVxuICAgIC8vIGh0dHBzOi8vYm90dG9zc29uLmdpdGh1Yi5pby9wb3N0cy9va2xhYi9cbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGNvbnN0IFtsciwgbGcsIGxiXSA9IFtcbiAgICAgICAgcmdiMmxyZ2IociAvIDI1NSksXG4gICAgICAgIHJnYjJscmdiKGcgLyAyNTUpLFxuICAgICAgICByZ2IybHJnYihiIC8gMjU1KVxuICAgIF07XG4gICAgY29uc3QgbCA9IGNicnQoMC40MTIyMjE0NzA4ICogbHIgKyAwLjUzNjMzMjUzNjMgKiBsZyArIDAuMDUxNDQ1OTkyOSAqIGxiKTtcbiAgICBjb25zdCBtID0gY2JydCgwLjIxMTkwMzQ5ODIgKiBsciArIDAuNjgwNjk5NTQ1MSAqIGxnICsgMC4xMDczOTY5NTY2ICogbGIpO1xuICAgIGNvbnN0IHMgPSBjYnJ0KDAuMDg4MzAyNDYxOSAqIGxyICsgMC4yODE3MTg4Mzc2ICogbGcgKyAwLjYyOTk3ODcwMDUgKiBsYik7XG5cbiAgICByZXR1cm4gW1xuICAgICAgICAwLjIxMDQ1NDI1NTMgKiBsICsgMC43OTM2MTc3ODUgKiBtIC0gMC4wMDQwNzIwNDY4ICogcyxcbiAgICAgICAgMS45Nzc5OTg0OTUxICogbCAtIDIuNDI4NTkyMjA1ICogbSArIDAuNDUwNTkzNzA5OSAqIHMsXG4gICAgICAgIDAuMDI1OTA0MDM3MSAqIGwgKyAwLjc4Mjc3MTc2NjIgKiBtIC0gMC44MDg2NzU3NjYgKiBzXG4gICAgXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJva2xhYjtcblxuZnVuY3Rpb24gcmdiMmxyZ2IoYykge1xuICAgIGNvbnN0IGFicyA9IE1hdGguYWJzKGMpO1xuICAgIGlmIChhYnMgPCAwLjA0MDQ1KSB7XG4gICAgICAgIHJldHVybiBjIC8gMTIuOTI7XG4gICAgfVxuICAgIHJldHVybiAoc2lnbihjKSB8fCAxKSAqIHBvdygoYWJzICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG59XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgb2tsYWIycmdiIGZyb20gJy4vb2tsYWIycmdiLmpzJztcbmltcG9ydCByZ2Iyb2tsYWIgZnJvbSAnLi9yZ2Iyb2tsYWIuanMnO1xuXG5Db2xvci5wcm90b3R5cGUub2tsYWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJva2xhYih0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLm9rbGFiID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnb2tsYWInKTtcblxuaW5wdXQuZm9ybWF0Lm9rbGFiID0gb2tsYWIycmdiO1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDMsXG4gICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCAnb2tsYWInKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnb2tsYWInO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGxjaDJsYWIgZnJvbSAnLi4vbGNoL2xjaDJsYWIuanMnO1xuaW1wb3J0IG9rbGFiMnJnYiBmcm9tICcuLi9va2xhYi9va2xhYjJyZ2IuanMnO1xuXG5jb25zdCBva2xjaDJyZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2xjaCcpO1xuICAgIGNvbnN0IFtsLCBjLCBoXSA9IGFyZ3M7XG4gICAgY29uc3QgW0wsIGEsIGJfXSA9IGxjaDJsYWIobCwgYywgaCk7XG4gICAgY29uc3QgW3IsIGcsIGJdID0gb2tsYWIycmdiKEwsIGEsIGJfKTtcbiAgICByZXR1cm4gW3IsIGcsIGIsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG9rbGNoMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgcmdiMm9rbGFiIGZyb20gJy4uL29rbGFiL3JnYjJva2xhYi5qcyc7XG5pbXBvcnQgbGFiMmxjaCBmcm9tICcuLi9sY2gvbGFiMmxjaC5qcyc7XG5cbmNvbnN0IHJnYjJva2xjaCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBjb25zdCBbbCwgYSwgYl9dID0gcmdiMm9rbGFiKHIsIGcsIGIpO1xuICAgIHJldHVybiBsYWIybGNoKGwsIGEsIGJfKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJva2xjaDtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCBva2xjaDJyZ2IgZnJvbSAnLi9va2xjaDJyZ2IuanMnO1xuaW1wb3J0IHJnYjJva2xjaCBmcm9tICcuL3JnYjJva2xjaC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5va2xjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMm9rbGNoKHRoaXMuX3JnYik7XG59O1xuXG5jaHJvbWEub2tsY2ggPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdva2xjaCcpO1xuXG5pbnB1dC5mb3JtYXQub2tsY2ggPSBva2xjaDJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMyxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdva2xjaCcpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdva2xjaCc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcblxuQ29sb3IucHJvdG90eXBlLmFscGhhID0gZnVuY3Rpb24gKGEsIG11dGF0ZSA9IGZhbHNlKSB7XG4gICAgaWYgKGEgIT09IHVuZGVmaW5lZCAmJiB0eXBlKGEpID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9yZ2JbM10gPSBhO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbdGhpcy5fcmdiWzBdLCB0aGlzLl9yZ2JbMV0sIHRoaXMuX3JnYlsyXSwgYV0sICdyZ2InKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JnYlszXTtcbn07XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmNsaXBwZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JnYi5fY2xpcHBlZCB8fCBmYWxzZTtcbn07XG4iLCAiaW1wb3J0ICcuLi9pby9sYWIvaW5kZXguanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCBMQUJfQ09OU1RBTlRTIGZyb20gJy4uL2lvL2xhYi9sYWItY29uc3RhbnRzLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmRhcmtlbiA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIGNvbnN0IGxhYiA9IG1lLmxhYigpO1xuICAgIGxhYlswXSAtPSBMQUJfQ09OU1RBTlRTLktuICogYW1vdW50O1xuICAgIHJldHVybiBuZXcgQ29sb3IobGFiLCAnbGFiJykuYWxwaGEobWUuYWxwaGEoKSwgdHJ1ZSk7XG59O1xuXG5Db2xvci5wcm90b3R5cGUuYnJpZ2h0ZW4gPSBmdW5jdGlvbiAoYW1vdW50ID0gMSkge1xuICAgIHJldHVybiB0aGlzLmRhcmtlbigtYW1vdW50KTtcbn07XG5cbkNvbG9yLnByb3RvdHlwZS5kYXJrZXIgPSBDb2xvci5wcm90b3R5cGUuZGFya2VuO1xuQ29sb3IucHJvdG90eXBlLmJyaWdodGVyID0gQ29sb3IucHJvdG90eXBlLmJyaWdodGVuO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobWMpIHtcbiAgICBjb25zdCBbbW9kZSwgY2hhbm5lbF0gPSBtYy5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHNyYyA9IHRoaXNbbW9kZV0oKTtcbiAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgICBjb25zdCBpID0gbW9kZS5pbmRleE9mKGNoYW5uZWwpIC0gKG1vZGUuc3Vic3RyKDAsIDIpID09PSAnb2snID8gMiA6IDApO1xuICAgICAgICBpZiAoaSA+IC0xKSByZXR1cm4gc3JjW2ldO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gY2hhbm5lbCAke2NoYW5uZWx9IGluIG1vZGUgJHttb2RlfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzcmM7XG4gICAgfVxufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcG93IH0gPSBNYXRoO1xuXG5jb25zdCBFUFMgPSAxZS03O1xuY29uc3QgTUFYX0lURVIgPSAyMDtcblxuQ29sb3IucHJvdG90eXBlLmx1bWluYW5jZSA9IGZ1bmN0aW9uIChsdW0sIG1vZGUgPSAncmdiJykge1xuICAgIGlmIChsdW0gIT09IHVuZGVmaW5lZCAmJiB0eXBlKGx1bSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChsdW0gPT09IDApIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBwdXJlIGJsYWNrXG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKFswLCAwLCAwLCB0aGlzLl9yZ2JbM11dLCAncmdiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGx1bSA9PT0gMSkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIHB1cmUgd2hpdGVcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoWzI1NSwgMjU1LCAyNTUsIHRoaXMuX3JnYlszXV0sICdyZ2InKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb21wdXRlIG5ldyBjb2xvciB1c2luZy4uLlxuICAgICAgICBsZXQgY3VyX2x1bSA9IHRoaXMubHVtaW5hbmNlKCk7XG4gICAgICAgIGxldCBtYXhfaXRlciA9IE1BWF9JVEVSO1xuXG4gICAgICAgIGNvbnN0IHRlc3QgPSAobG93LCBoaWdoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtaWQgPSBsb3cuaW50ZXJwb2xhdGUoaGlnaCwgMC41LCBtb2RlKTtcbiAgICAgICAgICAgIGNvbnN0IGxtID0gbWlkLmx1bWluYW5jZSgpO1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGx1bSAtIGxtKSA8IEVQUyB8fCAhbWF4X2l0ZXItLSkge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIGVub3VnaFxuICAgICAgICAgICAgICAgIHJldHVybiBtaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbG0gPiBsdW0gPyB0ZXN0KGxvdywgbWlkKSA6IHRlc3QobWlkLCBoaWdoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZ2IgPSAoXG4gICAgICAgICAgICBjdXJfbHVtID4gbHVtXG4gICAgICAgICAgICAgICAgPyB0ZXN0KG5ldyBDb2xvcihbMCwgMCwgMF0pLCB0aGlzKVxuICAgICAgICAgICAgICAgIDogdGVzdCh0aGlzLCBuZXcgQ29sb3IoWzI1NSwgMjU1LCAyNTVdKSlcbiAgICAgICAgKS5yZ2IoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbLi4ucmdiLCB0aGlzLl9yZ2JbM11dKTtcbiAgICB9XG4gICAgcmV0dXJuIHJnYjJsdW1pbmFuY2UoLi4udGhpcy5fcmdiLnNsaWNlKDAsIDMpKTtcbn07XG5cbmNvbnN0IHJnYjJsdW1pbmFuY2UgPSAociwgZywgYikgPT4ge1xuICAgIC8vIHJlbGF0aXZlIGx1bWluYW5jZVxuICAgIC8vIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4gICAgciA9IGx1bWluYW5jZV94KHIpO1xuICAgIGcgPSBsdW1pbmFuY2VfeChnKTtcbiAgICBiID0gbHVtaW5hbmNlX3goYik7XG4gICAgcmV0dXJuIDAuMjEyNiAqIHIgKyAwLjcxNTIgKiBnICsgMC4wNzIyICogYjtcbn07XG5cbmNvbnN0IGx1bWluYW5jZV94ID0gKHgpID0+IHtcbiAgICB4IC89IDI1NTtcbiAgICByZXR1cm4geCA8PSAwLjAzOTI4ID8geCAvIDEyLjkyIDogcG93KCh4ICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG59O1xuIiwgImV4cG9ydCBkZWZhdWx0IHt9O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGludGVycG9sYXRvciBmcm9tICcuLi9pbnRlcnBvbGF0b3IvaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoY29sMSwgY29sMiwgZiA9IDAuNSwgLi4ucmVzdCkgPT4ge1xuICAgIGxldCBtb2RlID0gcmVzdFswXSB8fCAnbHJnYic7XG4gICAgaWYgKCFpbnRlcnBvbGF0b3JbbW9kZV0gJiYgIXJlc3QubGVuZ3RoKSB7XG4gICAgICAgIC8vIGZhbGwgYmFjayB0byB0aGUgZmlyc3Qgc3VwcG9ydGVkIG1vZGVcbiAgICAgICAgbW9kZSA9IE9iamVjdC5rZXlzKGludGVycG9sYXRvcilbMF07XG4gICAgfVxuICAgIGlmICghaW50ZXJwb2xhdG9yW21vZGVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW50ZXJwb2xhdGlvbiBtb2RlICR7bW9kZX0gaXMgbm90IGRlZmluZWRgKTtcbiAgICB9XG4gICAgaWYgKHR5cGUoY29sMSkgIT09ICdvYmplY3QnKSBjb2wxID0gbmV3IENvbG9yKGNvbDEpO1xuICAgIGlmICh0eXBlKGNvbDIpICE9PSAnb2JqZWN0JykgY29sMiA9IG5ldyBDb2xvcihjb2wyKTtcbiAgICByZXR1cm4gaW50ZXJwb2xhdG9yW21vZGVdKGNvbDEsIGNvbDIsIGYpLmFscGhhKFxuICAgICAgICBjb2wxLmFscGhhKCkgKyBmICogKGNvbDIuYWxwaGEoKSAtIGNvbDEuYWxwaGEoKSlcbiAgICApO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IG1peCBmcm9tICcuLi9nZW5lcmF0b3IvbWl4LmpzJztcblxuQ29sb3IucHJvdG90eXBlLm1peCA9IENvbG9yLnByb3RvdHlwZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uIChcbiAgICBjb2wyLFxuICAgIGYgPSAwLjUsXG4gICAgLi4ucmVzdFxuKSB7XG4gICAgcmV0dXJuIG1peCh0aGlzLCBjb2wyLCBmLCAuLi5yZXN0KTtcbn07XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuQ29sb3IucHJvdG90eXBlLnByZW11bHRpcGx5ID0gZnVuY3Rpb24gKG11dGF0ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgcmdiID0gdGhpcy5fcmdiO1xuICAgIGNvbnN0IGEgPSByZ2JbM107XG4gICAgaWYgKG11dGF0ZSkge1xuICAgICAgICB0aGlzLl9yZ2IgPSBbcmdiWzBdICogYSwgcmdiWzFdICogYSwgcmdiWzJdICogYSwgYV07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IoW3JnYlswXSAqIGEsIHJnYlsxXSAqIGEsIHJnYlsyXSAqIGEsIGFdLCAncmdiJyk7XG4gICAgfVxufTtcbiIsICJpbXBvcnQgJy4uL2lvL2xjaC9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IExBQl9DT05TVEFOVFMgZnJvbSAnLi4vaW8vbGFiL2xhYi1jb25zdGFudHMuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50ID0gMSkge1xuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjb25zdCBsY2ggPSBtZS5sY2goKTtcbiAgICBsY2hbMV0gKz0gTEFCX0NPTlNUQU5UUy5LbiAqIGFtb3VudDtcbiAgICBpZiAobGNoWzFdIDwgMCkgbGNoWzFdID0gMDtcbiAgICByZXR1cm4gbmV3IENvbG9yKGxjaCwgJ2xjaCcpLmFscGhhKG1lLmFscGhhKCksIHRydWUpO1xufTtcblxuQ29sb3IucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50ID0gMSkge1xuICAgIHJldHVybiB0aGlzLnNhdHVyYXRlKC1hbW91bnQpO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcblxuQ29sb3IucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChtYywgdmFsdWUsIG11dGF0ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgW21vZGUsIGNoYW5uZWxdID0gbWMuc3BsaXQoJy4nKTtcbiAgICBjb25zdCBzcmMgPSB0aGlzW21vZGVdKCk7XG4gICAgaWYgKGNoYW5uZWwpIHtcbiAgICAgICAgY29uc3QgaSA9IG1vZGUuaW5kZXhPZihjaGFubmVsKSAtIChtb2RlLnN1YnN0cigwLCAyKSA9PT0gJ29rJyA/IDIgOiAwKTtcbiAgICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICAgICAgaWYgKHR5cGUodmFsdWUpID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5jaGFyQXQoMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gKz0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldICs9ICt2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcqJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSAqPSArdmFsdWUuc3Vic3RyKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJy8nOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldIC89ICt2YWx1ZS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSA9ICt2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUodmFsdWUpID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHNyY1tpXSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIHZhbHVlIGZvciBDb2xvci5zZXRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG91dCA9IG5ldyBDb2xvcihzcmMsIG1vZGUpO1xuICAgICAgICAgICAgaWYgKG11dGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JnYiA9IG91dC5fcmdiO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gY2hhbm5lbCAke2NoYW5uZWx9IGluIG1vZGUgJHttb2RlfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzcmM7XG4gICAgfVxufTtcbiIsICJpbXBvcnQgJy4uL2lvL2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IG1peCBmcm9tICcuLi9nZW5lcmF0b3IvbWl4LmpzJztcblxuQ29sb3IucHJvdG90eXBlLnRpbnQgPSBmdW5jdGlvbiAoZiA9IDAuNSwgLi4ucmVzdCkge1xuICAgIHJldHVybiBtaXgodGhpcywgJ3doaXRlJywgZiwgLi4ucmVzdCk7XG59O1xuXG5Db2xvci5wcm90b3R5cGUuc2hhZGUgPSBmdW5jdGlvbiAoZiA9IDAuNSwgLi4ucmVzdCkge1xuICAgIHJldHVybiBtaXgodGhpcywgJ2JsYWNrJywgZiwgLi4ucmVzdCk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IHJnYiA9IChjb2wxLCBjb2wyLCBmKSA9PiB7XG4gICAgY29uc3QgeHl6MCA9IGNvbDEuX3JnYjtcbiAgICBjb25zdCB4eXoxID0gY29sMi5fcmdiO1xuICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0gLSB4eXowWzBdKSxcbiAgICAgICAgeHl6MFsxXSArIGYgKiAoeHl6MVsxXSAtIHh5ejBbMV0pLFxuICAgICAgICB4eXowWzJdICsgZiAqICh4eXoxWzJdIC0geHl6MFsyXSksXG4gICAgICAgICdyZ2InXG4gICAgKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgucmdiID0gcmdiO1xuXG5leHBvcnQgZGVmYXVsdCByZ2I7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmNvbnN0IHsgc3FydCwgcG93IH0gPSBNYXRoO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5jb25zdCBscmdiID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCBbeDEsIHkxLCB6MV0gPSBjb2wxLl9yZ2I7XG4gICAgY29uc3QgW3gyLCB5MiwgejJdID0gY29sMi5fcmdiO1xuICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgIHNxcnQocG93KHgxLCAyKSAqICgxIC0gZikgKyBwb3coeDIsIDIpICogZiksXG4gICAgICAgIHNxcnQocG93KHkxLCAyKSAqICgxIC0gZikgKyBwb3coeTIsIDIpICogZiksXG4gICAgICAgIHNxcnQocG93KHoxLCAyKSAqICgxIC0gZikgKyBwb3coejIsIDIpICogZiksXG4gICAgICAgICdyZ2InXG4gICAgKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubHJnYiA9IGxyZ2I7XG5cbmV4cG9ydCBkZWZhdWx0IGxyZ2I7XG4iLCAiaW1wb3J0ICcuLi9pby9sYWIvaW5kZXguanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuY29uc3QgbGFiID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCB4eXowID0gY29sMS5sYWIoKTtcbiAgICBjb25zdCB4eXoxID0gY29sMi5sYWIoKTtcbiAgICByZXR1cm4gbmV3IENvbG9yKFxuICAgICAgICB4eXowWzBdICsgZiAqICh4eXoxWzBdIC0geHl6MFswXSksXG4gICAgICAgIHh5ejBbMV0gKyBmICogKHh5ejFbMV0gLSB4eXowWzFdKSxcbiAgICAgICAgeHl6MFsyXSArIGYgKiAoeHl6MVsyXSAtIHh5ejBbMl0pLFxuICAgICAgICAnbGFiJ1xuICAgICk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4LmxhYiA9IGxhYjtcblxuZXhwb3J0IGRlZmF1bHQgbGFiO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChjb2wxLCBjb2wyLCBmLCBtKSA9PiB7XG4gICAgbGV0IHh5ejAsIHh5ejE7XG4gICAgaWYgKG0gPT09ICdoc2wnKSB7XG4gICAgICAgIHh5ejAgPSBjb2wxLmhzbCgpO1xuICAgICAgICB4eXoxID0gY29sMi5oc2woKTtcbiAgICB9IGVsc2UgaWYgKG0gPT09ICdoc3YnKSB7XG4gICAgICAgIHh5ejAgPSBjb2wxLmhzdigpO1xuICAgICAgICB4eXoxID0gY29sMi5oc3YoKTtcbiAgICB9IGVsc2UgaWYgKG0gPT09ICdoY2cnKSB7XG4gICAgICAgIHh5ejAgPSBjb2wxLmhjZygpO1xuICAgICAgICB4eXoxID0gY29sMi5oY2coKTtcbiAgICB9IGVsc2UgaWYgKG0gPT09ICdoc2knKSB7XG4gICAgICAgIHh5ejAgPSBjb2wxLmhzaSgpO1xuICAgICAgICB4eXoxID0gY29sMi5oc2koKTtcbiAgICB9IGVsc2UgaWYgKG0gPT09ICdsY2gnIHx8IG0gPT09ICdoY2wnKSB7XG4gICAgICAgIG0gPSAnaGNsJztcbiAgICAgICAgeHl6MCA9IGNvbDEuaGNsKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhjbCgpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ29rbGNoJykge1xuICAgICAgICB4eXowID0gY29sMS5va2xjaCgpLnJldmVyc2UoKTtcbiAgICAgICAgeHl6MSA9IGNvbDIub2tsY2goKS5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgbGV0IGh1ZTAsIGh1ZTEsIHNhdDAsIHNhdDEsIGxidjAsIGxidjE7XG4gICAgaWYgKG0uc3Vic3RyKDAsIDEpID09PSAnaCcgfHwgbSA9PT0gJ29rbGNoJykge1xuICAgICAgICBbaHVlMCwgc2F0MCwgbGJ2MF0gPSB4eXowO1xuICAgICAgICBbaHVlMSwgc2F0MSwgbGJ2MV0gPSB4eXoxO1xuICAgIH1cblxuICAgIGxldCBzYXQsIGh1ZSwgbGJ2LCBkaDtcblxuICAgIGlmICghaXNOYU4oaHVlMCkgJiYgIWlzTmFOKGh1ZTEpKSB7XG4gICAgICAgIC8vIGJvdGggY29sb3JzIGhhdmUgaHVlXG4gICAgICAgIGlmIChodWUxID4gaHVlMCAmJiBodWUxIC0gaHVlMCA+IDE4MCkge1xuICAgICAgICAgICAgZGggPSBodWUxIC0gKGh1ZTAgKyAzNjApO1xuICAgICAgICB9IGVsc2UgaWYgKGh1ZTEgPCBodWUwICYmIGh1ZTAgLSBodWUxID4gMTgwKSB7XG4gICAgICAgICAgICBkaCA9IGh1ZTEgKyAzNjAgLSBodWUwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGggPSBodWUxIC0gaHVlMDtcbiAgICAgICAgfVxuICAgICAgICBodWUgPSBodWUwICsgZiAqIGRoO1xuICAgIH0gZWxzZSBpZiAoIWlzTmFOKGh1ZTApKSB7XG4gICAgICAgIGh1ZSA9IGh1ZTA7XG4gICAgICAgIGlmICgobGJ2MSA9PSAxIHx8IGxidjEgPT0gMCkgJiYgbSAhPSAnaHN2Jykgc2F0ID0gc2F0MDtcbiAgICB9IGVsc2UgaWYgKCFpc05hTihodWUxKSkge1xuICAgICAgICBodWUgPSBodWUxO1xuICAgICAgICBpZiAoKGxidjAgPT0gMSB8fCBsYnYwID09IDApICYmIG0gIT0gJ2hzdicpIHNhdCA9IHNhdDE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaHVlID0gTnVtYmVyLk5hTjtcbiAgICB9XG5cbiAgICBpZiAoc2F0ID09PSB1bmRlZmluZWQpIHNhdCA9IHNhdDAgKyBmICogKHNhdDEgLSBzYXQwKTtcbiAgICBsYnYgPSBsYnYwICsgZiAqIChsYnYxIC0gbGJ2MCk7XG4gICAgcmV0dXJuIG0gPT09ICdva2xjaCdcbiAgICAgICAgPyBuZXcgQ29sb3IoW2xidiwgc2F0LCBodWVdLCBtKVxuICAgICAgICA6IG5ldyBDb2xvcihbaHVlLCBzYXQsIGxidl0sIG0pO1xufTtcbiIsICJpbXBvcnQgJy4uL2lvL2xjaC9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdGVfaHN4IGZyb20gJy4vX2hzeC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IGxjaCA9IChjb2wxLCBjb2wyLCBmKSA9PiB7XG4gICAgcmV0dXJuIGludGVycG9sYXRlX2hzeChjb2wxLCBjb2wyLCBmLCAnbGNoJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4LmxjaCA9IGxjaDtcbmluZGV4LmhjbCA9IGxjaDtcblxuZXhwb3J0IGRlZmF1bHQgbGNoO1xuIiwgImltcG9ydCAnLi4vaW8vbnVtL2luZGV4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuY29uc3QgbnVtID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCBjMSA9IGNvbDEubnVtKCk7XG4gICAgY29uc3QgYzIgPSBjb2wyLm51bSgpO1xuICAgIHJldHVybiBuZXcgQ29sb3IoYzEgKyBmICogKGMyIC0gYzEpLCAnbnVtJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4Lm51bSA9IG51bTtcblxuZXhwb3J0IGRlZmF1bHQgbnVtO1xuIiwgImltcG9ydCAnLi4vaW8vaGNnL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgaGNnID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdoY2cnKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXguaGNnID0gaGNnO1xuXG5leHBvcnQgZGVmYXVsdCBoY2c7XG4iLCAiaW1wb3J0ICcuLi9pby9oc2kvaW5kZXguanMnO1xuaW1wb3J0IGludGVycG9sYXRlX2hzeCBmcm9tICcuL19oc3guanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5jb25zdCBoc2kgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ2hzaScpO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5oc2kgPSBoc2k7XG5cbmV4cG9ydCBkZWZhdWx0IGhzaTtcbiIsICJpbXBvcnQgJy4uL2lvL2hzbC9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdGVfaHN4IGZyb20gJy4vX2hzeC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IGhzbCA9IChjb2wxLCBjb2wyLCBmKSA9PiB7XG4gICAgcmV0dXJuIGludGVycG9sYXRlX2hzeChjb2wxLCBjb2wyLCBmLCAnaHNsJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4LmhzbCA9IGhzbDtcblxuZXhwb3J0IGRlZmF1bHQgaHNsO1xuIiwgImltcG9ydCAnLi4vaW8vaHN2L2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgaHN2ID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdoc3YnKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXguaHN2ID0gaHN2O1xuXG5leHBvcnQgZGVmYXVsdCBoc3Y7XG4iLCAiaW1wb3J0ICcuLi9pby9va2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5jb25zdCBva2xhYiA9IChjb2wxLCBjb2wyLCBmKSA9PiB7XG4gICAgY29uc3QgeHl6MCA9IGNvbDEub2tsYWIoKTtcbiAgICBjb25zdCB4eXoxID0gY29sMi5va2xhYigpO1xuICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0gLSB4eXowWzBdKSxcbiAgICAgICAgeHl6MFsxXSArIGYgKiAoeHl6MVsxXSAtIHh5ejBbMV0pLFxuICAgICAgICB4eXowWzJdICsgZiAqICh4eXoxWzJdIC0geHl6MFsyXSksXG4gICAgICAgICdva2xhYidcbiAgICApO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5va2xhYiA9IG9rbGFiO1xuXG5leHBvcnQgZGVmYXVsdCBva2xhYjtcbiIsICJpbXBvcnQgJy4uL2lvL2xjaC9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdGVfaHN4IGZyb20gJy4vX2hzeC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IG9rbGNoID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdva2xjaCcpO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5va2xjaCA9IG9rbGNoO1xuXG5leHBvcnQgZGVmYXVsdCBva2xjaDtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IHsgY2xpcF9yZ2IgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5cbmNvbnN0IHsgcG93LCBzcXJ0LCBQSSwgY29zLCBzaW4sIGF0YW4yIH0gPSBNYXRoO1xuXG5leHBvcnQgZGVmYXVsdCAoY29sb3JzLCBtb2RlID0gJ2xyZ2InLCB3ZWlnaHRzID0gbnVsbCkgPT4ge1xuICAgIGNvbnN0IGwgPSBjb2xvcnMubGVuZ3RoO1xuICAgIGlmICghd2VpZ2h0cykgd2VpZ2h0cyA9IEFycmF5LmZyb20obmV3IEFycmF5KGwpKS5tYXAoKCkgPT4gMSk7XG4gICAgLy8gbm9ybWFsaXplIHdlaWdodHNcbiAgICBjb25zdCBrID1cbiAgICAgICAgbCAvXG4gICAgICAgIHdlaWdodHMucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYSArIGI7XG4gICAgICAgIH0pO1xuICAgIHdlaWdodHMuZm9yRWFjaCgodywgaSkgPT4ge1xuICAgICAgICB3ZWlnaHRzW2ldICo9IGs7XG4gICAgfSk7XG4gICAgLy8gY29udmVydCBjb2xvcnMgdG8gQ29sb3Igb2JqZWN0c1xuICAgIGNvbG9ycyA9IGNvbG9ycy5tYXAoKGMpID0+IG5ldyBDb2xvcihjKSk7XG4gICAgaWYgKG1vZGUgPT09ICdscmdiJykge1xuICAgICAgICByZXR1cm4gX2F2ZXJhZ2VfbHJnYihjb2xvcnMsIHdlaWdodHMpO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdCA9IGNvbG9ycy5zaGlmdCgpO1xuICAgIGNvbnN0IHh5eiA9IGZpcnN0LmdldChtb2RlKTtcbiAgICBjb25zdCBjbnQgPSBbXTtcbiAgICBsZXQgZHggPSAwO1xuICAgIGxldCBkeSA9IDA7XG4gICAgLy8gaW5pdGlhbCBjb2xvclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeHl6Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHh5eltpXSA9ICh4eXpbaV0gfHwgMCkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICBjbnQucHVzaChpc05hTih4eXpbaV0pID8gMCA6IHdlaWdodHNbMF0pO1xuICAgICAgICBpZiAobW9kZS5jaGFyQXQoaSkgPT09ICdoJyAmJiAhaXNOYU4oeHl6W2ldKSkge1xuICAgICAgICAgICAgY29uc3QgQSA9ICh4eXpbaV0gLyAxODApICogUEk7XG4gICAgICAgICAgICBkeCArPSBjb3MoQSkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICAgICAgZHkgKz0gc2luKEEpICogd2VpZ2h0c1swXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCBhbHBoYSA9IGZpcnN0LmFscGhhKCkgKiB3ZWlnaHRzWzBdO1xuICAgIGNvbG9ycy5mb3JFYWNoKChjLCBjaSkgPT4ge1xuICAgICAgICBjb25zdCB4eXoyID0gYy5nZXQobW9kZSk7XG4gICAgICAgIGFscGhhICs9IGMuYWxwaGEoKSAqIHdlaWdodHNbY2kgKyAxXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4eXoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghaXNOYU4oeHl6MltpXSkpIHtcbiAgICAgICAgICAgICAgICBjbnRbaV0gKz0gd2VpZ2h0c1tjaSArIDFdO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IEEgPSAoeHl6MltpXSAvIDE4MCkgKiBQSTtcbiAgICAgICAgICAgICAgICAgICAgZHggKz0gY29zKEEpICogd2VpZ2h0c1tjaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICBkeSArPSBzaW4oQSkgKiB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgeHl6W2ldICs9IHh5ejJbaV0gKiB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHh5ei5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobW9kZS5jaGFyQXQoaSkgPT09ICdoJykge1xuICAgICAgICAgICAgbGV0IEEgPSAoYXRhbjIoZHkgLyBjbnRbaV0sIGR4IC8gY250W2ldKSAvIFBJKSAqIDE4MDtcbiAgICAgICAgICAgIHdoaWxlIChBIDwgMCkgQSArPSAzNjA7XG4gICAgICAgICAgICB3aGlsZSAoQSA+PSAzNjApIEEgLT0gMzYwO1xuICAgICAgICAgICAgeHl6W2ldID0gQTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHh5eltpXSA9IHh5eltpXSAvIGNudFtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhbHBoYSAvPSBsO1xuICAgIHJldHVybiBuZXcgQ29sb3IoeHl6LCBtb2RlKS5hbHBoYShhbHBoYSA+IDAuOTk5OTkgPyAxIDogYWxwaGEsIHRydWUpO1xufTtcblxuY29uc3QgX2F2ZXJhZ2VfbHJnYiA9IChjb2xvcnMsIHdlaWdodHMpID0+IHtcbiAgICBjb25zdCBsID0gY29sb3JzLmxlbmd0aDtcbiAgICBjb25zdCB4eXogPSBbMCwgMCwgMCwgMF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29sID0gY29sb3JzW2ldO1xuICAgICAgICBjb25zdCBmID0gd2VpZ2h0c1tpXSAvIGw7XG4gICAgICAgIGNvbnN0IHJnYiA9IGNvbC5fcmdiO1xuICAgICAgICB4eXpbMF0gKz0gcG93KHJnYlswXSwgMikgKiBmO1xuICAgICAgICB4eXpbMV0gKz0gcG93KHJnYlsxXSwgMikgKiBmO1xuICAgICAgICB4eXpbMl0gKz0gcG93KHJnYlsyXSwgMikgKiBmO1xuICAgICAgICB4eXpbM10gKz0gcmdiWzNdICogZjtcbiAgICB9XG4gICAgeHl6WzBdID0gc3FydCh4eXpbMF0pO1xuICAgIHh5elsxXSA9IHNxcnQoeHl6WzFdKTtcbiAgICB4eXpbMl0gPSBzcXJ0KHh5elsyXSk7XG4gICAgaWYgKHh5elszXSA+IDAuOTk5OTk5OSkgeHl6WzNdID0gMTtcbiAgICByZXR1cm4gbmV3IENvbG9yKGNsaXBfcmdiKHh5eikpO1xufTtcbiIsICIvLyBtaW5pbWFsIG11bHRpLXB1cnBvc2UgaW50ZXJmYWNlXG5cbi8vIEByZXF1aXJlcyB1dGlscyBjb2xvciBhbmFseXplXG5pbXBvcnQgY2hyb21hIGZyb20gJy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgeyBsaW1pdCwgdHlwZSB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcblxuY29uc3QgeyBwb3cgfSA9IE1hdGg7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChjb2xvcnMpIHtcbiAgICAvLyBjb25zdHJ1Y3RvclxuICAgIGxldCBfbW9kZSA9ICdyZ2InO1xuICAgIGxldCBfbmFjb2wgPSBjaHJvbWEoJyNjY2MnKTtcbiAgICBsZXQgX3NwcmVhZCA9IDA7XG4gICAgLy8gY29uc3QgX2ZpeGVkID0gZmFsc2U7XG4gICAgbGV0IF9kb21haW4gPSBbMCwgMV07XG4gICAgbGV0IF9wb3MgPSBbXTtcbiAgICBsZXQgX3BhZGRpbmcgPSBbMCwgMF07XG4gICAgbGV0IF9jbGFzc2VzID0gZmFsc2U7XG4gICAgbGV0IF9jb2xvcnMgPSBbXTtcbiAgICBsZXQgX291dCA9IGZhbHNlO1xuICAgIGxldCBfbWluID0gMDtcbiAgICBsZXQgX21heCA9IDE7XG4gICAgbGV0IF9jb3JyZWN0TGlnaHRuZXNzID0gZmFsc2U7XG4gICAgbGV0IF9jb2xvckNhY2hlID0ge307XG4gICAgbGV0IF91c2VDYWNoZSA9IHRydWU7XG4gICAgbGV0IF9nYW1tYSA9IDE7XG5cbiAgICAvLyBwcml2YXRlIG1ldGhvZHNcblxuICAgIGNvbnN0IHNldENvbG9ycyA9IGZ1bmN0aW9uIChjb2xvcnMpIHtcbiAgICAgICAgY29sb3JzID0gY29sb3JzIHx8IFsnI2ZmZicsICcjMDAwJ107XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbG9ycyAmJlxuICAgICAgICAgICAgdHlwZShjb2xvcnMpID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgY2hyb21hLmJyZXdlciAmJlxuICAgICAgICAgICAgY2hyb21hLmJyZXdlcltjb2xvcnMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb2xvcnMgPSBjaHJvbWEuYnJld2VyW2NvbG9ycy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZShjb2xvcnMpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgc2luZ2xlIGNvbG9yXG4gICAgICAgICAgICBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGNvbG9ycyA9IFtjb2xvcnNbMF0sIGNvbG9yc1swXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBtYWtlIGEgY29weSBvZiB0aGUgY29sb3JzXG4gICAgICAgICAgICBjb2xvcnMgPSBjb2xvcnMuc2xpY2UoMCk7XG4gICAgICAgICAgICAvLyBjb252ZXJ0IHRvIGNocm9tYSBjbGFzc2VzXG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNvbG9ycy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgICAgIGNvbG9yc1tjXSA9IGNocm9tYShjb2xvcnNbY10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXV0by1maWxsIGNvbG9yIHBvc2l0aW9uXG4gICAgICAgICAgICBfcG9zLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNvbG9ycy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgICAgIF9wb3MucHVzaChjIC8gKGNvbG9ycy5sZW5ndGggLSAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgICByZXR1cm4gKF9jb2xvcnMgPSBjb2xvcnMpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRDbGFzcyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAoX2NsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgbiA9IF9jbGFzc2VzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICB3aGlsZSAoaSA8IG4gJiYgdmFsdWUgPj0gX2NsYXNzZXNbaV0pIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaSAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfTtcblxuICAgIGxldCB0TWFwTGlnaHRuZXNzID0gKHQpID0+IHQ7XG4gICAgbGV0IHRNYXBEb21haW4gPSAodCkgPT4gdDtcblxuICAgIC8vIGNvbnN0IGNsYXNzaWZ5VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIC8vICAgICBsZXQgdmFsID0gdmFsdWU7XG4gICAgLy8gICAgIGlmIChfY2xhc3Nlcy5sZW5ndGggPiAyKSB7XG4gICAgLy8gICAgICAgICBjb25zdCBuID0gX2NsYXNzZXMubGVuZ3RoLTE7XG4gICAgLy8gICAgICAgICBjb25zdCBpID0gZ2V0Q2xhc3ModmFsdWUpO1xuICAgIC8vICAgICAgICAgY29uc3QgbWluYyA9IF9jbGFzc2VzWzBdICsgKChfY2xhc3Nlc1sxXS1fY2xhc3Nlc1swXSkgKiAoMCArIChfc3ByZWFkICogMC41KSkpOyAgLy8gY2VudGVyIG9mIDFzdCBjbGFzc1xuICAgIC8vICAgICAgICAgY29uc3QgbWF4YyA9IF9jbGFzc2VzW24tMV0gKyAoKF9jbGFzc2VzW25dLV9jbGFzc2VzW24tMV0pICogKDEgLSAoX3NwcmVhZCAqIDAuNSkpKTsgIC8vIGNlbnRlciBvZiBsYXN0IGNsYXNzXG4gICAgLy8gICAgICAgICB2YWwgPSBfbWluICsgKCgoKF9jbGFzc2VzW2ldICsgKChfY2xhc3Nlc1tpKzFdIC0gX2NsYXNzZXNbaV0pICogMC41KSkgLSBtaW5jKSAvIChtYXhjLW1pbmMpKSAqIChfbWF4IC0gX21pbikpO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHJldHVybiB2YWw7XG4gICAgLy8gfTtcblxuICAgIGNvbnN0IGdldENvbG9yID0gZnVuY3Rpb24gKHZhbCwgYnlwYXNzTWFwKSB7XG4gICAgICAgIGxldCBjb2wsIHQ7XG4gICAgICAgIGlmIChieXBhc3NNYXAgPT0gbnVsbCkge1xuICAgICAgICAgICAgYnlwYXNzTWFwID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKHZhbCkgfHwgdmFsID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gX25hY29sO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYnlwYXNzTWFwKSB7XG4gICAgICAgICAgICBpZiAoX2NsYXNzZXMgJiYgX2NsYXNzZXMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIC8vIGZpbmQgdGhlIGNsYXNzXG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IGdldENsYXNzKHZhbCk7XG4gICAgICAgICAgICAgICAgdCA9IGMgLyAoX2NsYXNzZXMubGVuZ3RoIC0gMik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9tYXggIT09IF9taW4pIHtcbiAgICAgICAgICAgICAgICAvLyBqdXN0IGludGVycG9sYXRlIGJldHdlZW4gbWluL21heFxuICAgICAgICAgICAgICAgIHQgPSAodmFsIC0gX21pbikgLyAoX21heCAtIF9taW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHQgPSB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb21haW4gbWFwXG4gICAgICAgIHQgPSB0TWFwRG9tYWluKHQpO1xuXG4gICAgICAgIGlmICghYnlwYXNzTWFwKSB7XG4gICAgICAgICAgICB0ID0gdE1hcExpZ2h0bmVzcyh0KTsgLy8gbGlnaHRuZXNzIGNvcnJlY3Rpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfZ2FtbWEgIT09IDEpIHtcbiAgICAgICAgICAgIHQgPSBwb3codCwgX2dhbW1hKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHQgPSBfcGFkZGluZ1swXSArIHQgKiAoMSAtIF9wYWRkaW5nWzBdIC0gX3BhZGRpbmdbMV0pO1xuXG4gICAgICAgIHQgPSBsaW1pdCh0LCAwLCAxKTtcblxuICAgICAgICBjb25zdCBrID0gTWF0aC5mbG9vcih0ICogMTAwMDApO1xuXG4gICAgICAgIGlmIChfdXNlQ2FjaGUgJiYgX2NvbG9yQ2FjaGVba10pIHtcbiAgICAgICAgICAgIGNvbCA9IF9jb2xvckNhY2hlW2tdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGUoX2NvbG9ycykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICAvL2ZvciBpIGluIFswLi5fcG9zLmxlbmd0aC0xXVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX3Bvcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gX3Bvc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPD0gcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gX2NvbG9yc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ID49IHAgJiYgaSA9PT0gX3Bvcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBfY29sb3JzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPiBwICYmIHQgPCBfcG9zW2kgKyAxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdCA9ICh0IC0gcCkgLyAoX3Bvc1tpICsgMV0gLSBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IGNocm9tYS5pbnRlcnBvbGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29sb3JzW2ldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xvcnNbaSArIDFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX21vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZShfY29sb3JzKSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnModCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX3VzZUNhY2hlKSB7XG4gICAgICAgICAgICAgICAgX2NvbG9yQ2FjaGVba10gPSBjb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbDtcbiAgICB9O1xuXG4gICAgdmFyIHJlc2V0Q2FjaGUgPSAoKSA9PiAoX2NvbG9yQ2FjaGUgPSB7fSk7XG5cbiAgICBzZXRDb2xvcnMoY29sb3JzKTtcblxuICAgIC8vIHB1YmxpYyBpbnRlcmZhY2VcblxuICAgIGNvbnN0IGYgPSBmdW5jdGlvbiAodikge1xuICAgICAgICBjb25zdCBjID0gY2hyb21hKGdldENvbG9yKHYpKTtcbiAgICAgICAgaWYgKF9vdXQgJiYgY1tfb3V0XSkge1xuICAgICAgICAgICAgcmV0dXJuIGNbX291dF0oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGYuY2xhc3NlcyA9IGZ1bmN0aW9uIChjbGFzc2VzKSB7XG4gICAgICAgIGlmIChjbGFzc2VzICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlKGNsYXNzZXMpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgX2NsYXNzZXMgPSBjbGFzc2VzO1xuICAgICAgICAgICAgICAgIF9kb21haW4gPSBbY2xhc3Nlc1swXSwgY2xhc3Nlc1tjbGFzc2VzLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IGNocm9tYS5hbmFseXplKF9kb21haW4pO1xuICAgICAgICAgICAgICAgIGlmIChjbGFzc2VzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jbGFzc2VzID0gW2QubWluLCBkLm1heF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX2NsYXNzZXMgPSBjaHJvbWEubGltaXRzKGQsICdlJywgY2xhc3Nlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9jbGFzc2VzO1xuICAgIH07XG5cbiAgICBmLmRvbWFpbiA9IGZ1bmN0aW9uIChkb21haW4pIHtcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gX2RvbWFpbjtcbiAgICAgICAgfVxuICAgICAgICBfbWluID0gZG9tYWluWzBdO1xuICAgICAgICBfbWF4ID0gZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXTtcbiAgICAgICAgX3BvcyA9IFtdO1xuICAgICAgICBjb25zdCBrID0gX2NvbG9ycy5sZW5ndGg7XG4gICAgICAgIGlmIChkb21haW4ubGVuZ3RoID09PSBrICYmIF9taW4gIT09IF9tYXgpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBwb3NpdGlvbnNcbiAgICAgICAgICAgIGZvciAobGV0IGQgb2YgQXJyYXkuZnJvbShkb21haW4pKSB7XG4gICAgICAgICAgICAgICAgX3Bvcy5wdXNoKChkIC0gX21pbikgLyAoX21heCAtIF9taW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgazsgYysrKSB7XG4gICAgICAgICAgICAgICAgX3Bvcy5wdXNoKGMgLyAoayAtIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkb21haW4ubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIC8vIHNldCBkb21haW4gbWFwXG4gICAgICAgICAgICAgICAgY29uc3QgdE91dCA9IGRvbWFpbi5tYXAoKGQsIGkpID0+IGkgLyAoZG9tYWluLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0QnJlYWtzID0gZG9tYWluLm1hcCgoZCkgPT4gKGQgLSBfbWluKSAvIChfbWF4IC0gX21pbikpO1xuICAgICAgICAgICAgICAgIGlmICghdEJyZWFrcy5ldmVyeSgodmFsLCBpKSA9PiB0T3V0W2ldID09PSB2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRNYXBEb21haW4gPSAodCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPD0gMCB8fCB0ID49IDEpIHJldHVybiB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHQgPj0gdEJyZWFrc1tpICsgMV0pIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGYgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0IC0gdEJyZWFrc1tpXSkgLyAodEJyZWFrc1tpICsgMV0gLSB0QnJlYWtzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dCA9IHRPdXRbaV0gKyBmICogKHRPdXRbaSArIDFdIC0gdE91dFtpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfZG9tYWluID0gW19taW4sIF9tYXhdO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5tb2RlID0gZnVuY3Rpb24gKF9tKSB7XG4gICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIF9tb2RlO1xuICAgICAgICB9XG4gICAgICAgIF9tb2RlID0gX207XG4gICAgICAgIHJlc2V0Q2FjaGUoKTtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIGYucmFuZ2UgPSBmdW5jdGlvbiAoY29sb3JzLCBfcG9zKSB7XG4gICAgICAgIHNldENvbG9ycyhjb2xvcnMsIF9wb3MpO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5vdXQgPSBmdW5jdGlvbiAoX28pIHtcbiAgICAgICAgX291dCA9IF9vO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5zcHJlYWQgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zcHJlYWQ7XG4gICAgICAgIH1cbiAgICAgICAgX3NwcmVhZCA9IHZhbDtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIGYuY29ycmVjdExpZ2h0bmVzcyA9IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIGlmICh2ID09IG51bGwpIHtcbiAgICAgICAgICAgIHYgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIF9jb3JyZWN0TGlnaHRuZXNzID0gdjtcbiAgICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgICBpZiAoX2NvcnJlY3RMaWdodG5lc3MpIHtcbiAgICAgICAgICAgIHRNYXBMaWdodG5lc3MgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IEwwID0gZ2V0Q29sb3IoMCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgTDEgPSBnZXRDb2xvcigxLCB0cnVlKS5sYWIoKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2wgPSBMMCA+IEwxO1xuICAgICAgICAgICAgICAgIGxldCBMX2FjdHVhbCA9IGdldENvbG9yKHQsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IExfaWRlYWwgPSBMMCArIChMMSAtIEwwKSAqIHQ7XG4gICAgICAgICAgICAgICAgbGV0IExfZGlmZiA9IExfYWN0dWFsIC0gTF9pZGVhbDtcbiAgICAgICAgICAgICAgICBsZXQgdDAgPSAwO1xuICAgICAgICAgICAgICAgIGxldCB0MSA9IDE7XG4gICAgICAgICAgICAgICAgbGV0IG1heF9pdGVyID0gMjA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKE1hdGguYWJzKExfZGlmZikgPiAxZS0yICYmIG1heF9pdGVyLS0gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTF9kaWZmICo9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExfZGlmZiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MCA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAodDEgLSB0KSAqIDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgKz0gKHQwIC0gdCkgKiAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBMX2FjdHVhbCA9IGdldENvbG9yKHQsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChMX2RpZmYgPSBMX2FjdHVhbCAtIExfaWRlYWwpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0TWFwTGlnaHRuZXNzID0gKHQpID0+IHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIGYucGFkZGluZyA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIGlmIChwICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlKHApID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHAgPSBbcCwgcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfcGFkZGluZyA9IHA7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfcGFkZGluZztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBmLmNvbG9ycyA9IGZ1bmN0aW9uIChudW1Db2xvcnMsIG91dCkge1xuICAgICAgICAvLyBJZiBubyBhcmd1bWVudHMgYXJlIGdpdmVuLCByZXR1cm4gdGhlIG9yaWdpbmFsIGNvbG9ycyB0aGF0IHdlcmUgcHJvdmlkZWRcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBvdXQgPSAnaGV4JztcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IF9jb2xvcnMuc2xpY2UoMCk7XG4gICAgICAgIH0gZWxzZSBpZiAobnVtQ29sb3JzID09PSAxKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBbZigwLjUpXTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1Db2xvcnMgPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBkbSA9IF9kb21haW5bMF07XG4gICAgICAgICAgICBjb25zdCBkZCA9IF9kb21haW5bMV0gLSBkbTtcbiAgICAgICAgICAgIHJlc3VsdCA9IF9fcmFuZ2VfXygwLCBudW1Db2xvcnMsIGZhbHNlKS5tYXAoKGkpID0+XG4gICAgICAgICAgICAgICAgZihkbSArIChpIC8gKG51bUNvbG9ycyAtIDEpKSAqIGRkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJldHVybnMgYWxsIGNvbG9ycyBiYXNlZCBvbiB0aGUgZGVmaW5lZCBjbGFzc2VzXG4gICAgICAgICAgICBjb2xvcnMgPSBbXTtcbiAgICAgICAgICAgIGxldCBzYW1wbGVzID0gW107XG4gICAgICAgICAgICBpZiAoX2NsYXNzZXMgJiYgX2NsYXNzZXMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gMSwgZW5kID0gX2NsYXNzZXMubGVuZ3RoLCBhc2MgPSAxIDw9IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgYXNjID8gaSA8IGVuZCA6IGkgPiBlbmQ7XG4gICAgICAgICAgICAgICAgICAgIGFzYyA/IGkrKyA6IGktLVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzYW1wbGVzLnB1c2goKF9jbGFzc2VzW2kgLSAxXSArIF9jbGFzc2VzW2ldKSAqIDAuNSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzYW1wbGVzID0gX2RvbWFpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCA9IHNhbXBsZXMubWFwKCh2KSA9PiBmKHYpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaHJvbWFbb3V0XSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm1hcCgoYykgPT4gY1tvdXRdKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIGYuY2FjaGUgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICBpZiAoYyAhPSBudWxsKSB7XG4gICAgICAgICAgICBfdXNlQ2FjaGUgPSBjO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX3VzZUNhY2hlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGYuZ2FtbWEgPSBmdW5jdGlvbiAoZykge1xuICAgICAgICBpZiAoZyAhPSBudWxsKSB7XG4gICAgICAgICAgICBfZ2FtbWEgPSBnO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX2dhbW1hO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGYubm9kYXRhID0gZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgaWYgKGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgX25hY29sID0gY2hyb21hKGQpO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX25hY29sO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBmO1xufVxuXG5mdW5jdGlvbiBfX3JhbmdlX18obGVmdCwgcmlnaHQsIGluY2x1c2l2ZSkge1xuICAgIGxldCByYW5nZSA9IFtdO1xuICAgIGxldCBhc2NlbmRpbmcgPSBsZWZ0IDwgcmlnaHQ7XG4gICAgbGV0IGVuZCA9ICFpbmNsdXNpdmUgPyByaWdodCA6IGFzY2VuZGluZyA/IHJpZ2h0ICsgMSA6IHJpZ2h0IC0gMTtcbiAgICBmb3IgKGxldCBpID0gbGVmdDsgYXNjZW5kaW5nID8gaSA8IGVuZCA6IGkgPiBlbmQ7IGFzY2VuZGluZyA/IGkrKyA6IGktLSkge1xuICAgICAgICByYW5nZS5wdXNoKGkpO1xuICAgIH1cbiAgICByZXR1cm4gcmFuZ2U7XG59XG4iLCAiLy9cbi8vIGludGVycG9sYXRlcyBiZXR3ZWVuIGEgc2V0IG9mIGNvbG9ycyB1emluZyBhIGJlemllciBzcGxpbmVcbi8vXG5cbi8vIEByZXF1aXJlcyB1dGlscyBsYWJcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgJy4uL2lvL2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgc2NhbGUgZnJvbSAnLi9zY2FsZS5qcyc7XG5cbi8vIG50aCByb3cgb2YgdGhlIHBhc2NhbCB0cmlhbmdsZVxuY29uc3QgYmlub21fcm93ID0gZnVuY3Rpb24gKG4pIHtcbiAgICBsZXQgcm93ID0gWzEsIDFdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIGxldCBuZXdyb3cgPSBbMV07XG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IHJvdy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgbmV3cm93W2pdID0gKHJvd1tqXSB8fCAwKSArIHJvd1tqIC0gMV07XG4gICAgICAgIH1cbiAgICAgICAgcm93ID0gbmV3cm93O1xuICAgIH1cbiAgICByZXR1cm4gcm93O1xufTtcblxuY29uc3QgYmV6aWVyID0gZnVuY3Rpb24gKGNvbG9ycykge1xuICAgIGxldCBJLCBsYWIwLCBsYWIxLCBsYWIyO1xuICAgIGNvbG9ycyA9IGNvbG9ycy5tYXAoKGMpID0+IG5ldyBDb2xvcihjKSk7XG4gICAgaWYgKGNvbG9ycy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgLy8gbGluZWFyIGludGVycG9sYXRpb25cbiAgICAgICAgW2xhYjAsIGxhYjFdID0gY29sb3JzLm1hcCgoYykgPT4gYy5sYWIoKSk7XG4gICAgICAgIEkgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgY29uc3QgbGFiID0gWzAsIDEsIDJdLm1hcCgoaSkgPT4gbGFiMFtpXSArIHQgKiAobGFiMVtpXSAtIGxhYjBbaV0pKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IobGFiLCAnbGFiJyk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmIChjb2xvcnMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIC8vIHF1YWRyYXRpYyBiZXppZXIgaW50ZXJwb2xhdGlvblxuICAgICAgICBbbGFiMCwgbGFiMSwgbGFiMl0gPSBjb2xvcnMubWFwKChjKSA9PiBjLmxhYigpKTtcbiAgICAgICAgSSA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICBjb25zdCBsYWIgPSBbMCwgMSwgMl0ubWFwKFxuICAgICAgICAgICAgICAgIChpKSA9PlxuICAgICAgICAgICAgICAgICAgICAoMSAtIHQpICogKDEgLSB0KSAqIGxhYjBbaV0gK1xuICAgICAgICAgICAgICAgICAgICAyICogKDEgLSB0KSAqIHQgKiBsYWIxW2ldICtcbiAgICAgICAgICAgICAgICAgICAgdCAqIHQgKiBsYWIyW2ldXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgLy8gY3ViaWMgYmV6aWVyIGludGVycG9sYXRpb25cbiAgICAgICAgbGV0IGxhYjM7XG4gICAgICAgIFtsYWIwLCBsYWIxLCBsYWIyLCBsYWIzXSA9IGNvbG9ycy5tYXAoKGMpID0+IGMubGFiKCkpO1xuICAgICAgICBJID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYiA9IFswLCAxLCAyXS5tYXAoXG4gICAgICAgICAgICAgICAgKGkpID0+XG4gICAgICAgICAgICAgICAgICAgICgxIC0gdCkgKiAoMSAtIHQpICogKDEgLSB0KSAqIGxhYjBbaV0gK1xuICAgICAgICAgICAgICAgICAgICAzICogKDEgLSB0KSAqICgxIC0gdCkgKiB0ICogbGFiMVtpXSArXG4gICAgICAgICAgICAgICAgICAgIDMgKiAoMSAtIHQpICogdCAqIHQgKiBsYWIyW2ldICtcbiAgICAgICAgICAgICAgICAgICAgdCAqIHQgKiB0ICogbGFiM1tpXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IobGFiLCAnbGFiJyk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmIChjb2xvcnMubGVuZ3RoID49IDUpIHtcbiAgICAgICAgLy8gZ2VuZXJhbCBjYXNlIChkZWdyZWUgbiBiZXppZXIpXG4gICAgICAgIGxldCBsYWJzLCByb3csIG47XG4gICAgICAgIGxhYnMgPSBjb2xvcnMubWFwKChjKSA9PiBjLmxhYigpKTtcbiAgICAgICAgbiA9IGNvbG9ycy5sZW5ndGggLSAxO1xuICAgICAgICByb3cgPSBiaW5vbV9yb3cobik7XG4gICAgICAgIEkgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgY29uc3QgdSA9IDEgLSB0O1xuICAgICAgICAgICAgY29uc3QgbGFiID0gWzAsIDEsIDJdLm1hcCgoaSkgPT5cbiAgICAgICAgICAgICAgICBsYWJzLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgKHN1bSwgZWwsIGopID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBzdW0gKyByb3dbal0gKiB1ICoqIChuIC0gaikgKiB0ICoqIGogKiBlbFtpXSxcbiAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGxhYiwgJ2xhYicpO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdObyBwb2ludCBpbiBydW5uaW5nIGJlemllciB3aXRoIG9ubHkgb25lIGNvbG9yLicpO1xuICAgIH1cbiAgICByZXR1cm4gSTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IChjb2xvcnMpID0+IHtcbiAgICBjb25zdCBmID0gYmV6aWVyKGNvbG9ycyk7XG4gICAgZi5zY2FsZSA9ICgpID0+IHNjYWxlKGYpO1xuICAgIHJldHVybiBmO1xufTtcbiIsICIvKlxuICogaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgY29sb3JzIHV6aW5nIGEgYmV6aWVyIHNwbGluZVxuICogYmxlbmQgbW9kZSBmb3JtdWxhcyB0YWtlbiBmcm9tIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE4MDExMDAxNDk0Ni9odHRwOi8vd3d3LnZlbnR1cmUtd2FyZS5jb20va2V2aW4vY29kaW5nL2xldHMtbGVhcm4tbWF0aC1waG90b3Nob3AtYmxlbmQtbW9kZXMvXG4gKi9cblxuaW1wb3J0ICcuLi9pby9yZ2IvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi9jaHJvbWEuanMnO1xuXG5jb25zdCBibGVuZCA9IChib3R0b20sIHRvcCwgbW9kZSkgPT4ge1xuICAgIGlmICghYmxlbmRbbW9kZV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGJsZW5kIG1vZGUgJyArIG1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gYmxlbmRbbW9kZV0oYm90dG9tLCB0b3ApO1xufTtcblxuY29uc3QgYmxlbmRfZiA9IChmKSA9PiAoYm90dG9tLCB0b3ApID0+IHtcbiAgICBjb25zdCBjMCA9IGNocm9tYSh0b3ApLnJnYigpO1xuICAgIGNvbnN0IGMxID0gY2hyb21hKGJvdHRvbSkucmdiKCk7XG4gICAgcmV0dXJuIGNocm9tYS5yZ2IoZihjMCwgYzEpKTtcbn07XG5cbmNvbnN0IGVhY2ggPSAoZikgPT4gKGMwLCBjMSkgPT4ge1xuICAgIGNvbnN0IG91dCA9IFtdO1xuICAgIG91dFswXSA9IGYoYzBbMF0sIGMxWzBdKTtcbiAgICBvdXRbMV0gPSBmKGMwWzFdLCBjMVsxXSk7XG4gICAgb3V0WzJdID0gZihjMFsyXSwgYzFbMl0pO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG5jb25zdCBub3JtYWwgPSAoYSkgPT4gYTtcbmNvbnN0IG11bHRpcGx5ID0gKGEsIGIpID0+IChhICogYikgLyAyNTU7XG5jb25zdCBkYXJrZW4gPSAoYSwgYikgPT4gKGEgPiBiID8gYiA6IGEpO1xuY29uc3QgbGlnaHRlbiA9IChhLCBiKSA9PiAoYSA+IGIgPyBhIDogYik7XG5jb25zdCBzY3JlZW4gPSAoYSwgYikgPT4gMjU1ICogKDEgLSAoMSAtIGEgLyAyNTUpICogKDEgLSBiIC8gMjU1KSk7XG5jb25zdCBvdmVybGF5ID0gKGEsIGIpID0+XG4gICAgYiA8IDEyOCA/ICgyICogYSAqIGIpIC8gMjU1IDogMjU1ICogKDEgLSAyICogKDEgLSBhIC8gMjU1KSAqICgxIC0gYiAvIDI1NSkpO1xuY29uc3QgYnVybiA9IChhLCBiKSA9PiAyNTUgKiAoMSAtICgxIC0gYiAvIDI1NSkgLyAoYSAvIDI1NSkpO1xuY29uc3QgZG9kZ2UgPSAoYSwgYikgPT4ge1xuICAgIGlmIChhID09PSAyNTUpIHJldHVybiAyNTU7XG4gICAgYSA9ICgyNTUgKiAoYiAvIDI1NSkpIC8gKDEgLSBhIC8gMjU1KTtcbiAgICByZXR1cm4gYSA+IDI1NSA/IDI1NSA6IGE7XG59O1xuXG4vLyAjIGFkZCA9IChhLGIpIC0+XG4vLyAjICAgICBpZiAoYSArIGIgPiAyNTUpIHRoZW4gMjU1IGVsc2UgYSArIGJcblxuYmxlbmQubm9ybWFsID0gYmxlbmRfZihlYWNoKG5vcm1hbCkpO1xuYmxlbmQubXVsdGlwbHkgPSBibGVuZF9mKGVhY2gobXVsdGlwbHkpKTtcbmJsZW5kLnNjcmVlbiA9IGJsZW5kX2YoZWFjaChzY3JlZW4pKTtcbmJsZW5kLm92ZXJsYXkgPSBibGVuZF9mKGVhY2gob3ZlcmxheSkpO1xuYmxlbmQuZGFya2VuID0gYmxlbmRfZihlYWNoKGRhcmtlbikpO1xuYmxlbmQubGlnaHRlbiA9IGJsZW5kX2YoZWFjaChsaWdodGVuKSk7XG5ibGVuZC5kb2RnZSA9IGJsZW5kX2YoZWFjaChkb2RnZSkpO1xuYmxlbmQuYnVybiA9IGJsZW5kX2YoZWFjaChidXJuKSk7XG4vLyBibGVuZC5hZGQgPSBibGVuZF9mKGVhY2goYWRkKSk7XG5cbmV4cG9ydCBkZWZhdWx0IGJsZW5kO1xuIiwgIi8vIGN1YmVoZWxpeCBpbnRlcnBvbGF0aW9uXG4vLyBiYXNlZCBvbiBELkEuIEdyZWVuIFwiQSBjb2xvdXIgc2NoZW1lIGZvciB0aGUgZGlzcGxheSBvZiBhc3Ryb25vbWljYWwgaW50ZW5zaXR5IGltYWdlc1wiXG4vLyBodHRwOi8vYXN0cm9uLXNvYy5pbi9idWxsZXRpbi8xMUp1bmUvMjg5MzkyMDExLnBkZlxuaW1wb3J0IHsgdHlwZSwgY2xpcF9yZ2IsIFRXT1BJIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi9jaHJvbWEuanMnO1xuY29uc3QgeyBwb3csIHNpbiwgY29zIH0gPSBNYXRoO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoXG4gICAgc3RhcnQgPSAzMDAsXG4gICAgcm90YXRpb25zID0gLTEuNSxcbiAgICBodWUgPSAxLFxuICAgIGdhbW1hID0gMSxcbiAgICBsaWdodG5lc3MgPSBbMCwgMV1cbikge1xuICAgIGxldCBkaCA9IDAsXG4gICAgICAgIGRsO1xuICAgIGlmICh0eXBlKGxpZ2h0bmVzcykgPT09ICdhcnJheScpIHtcbiAgICAgICAgZGwgPSBsaWdodG5lc3NbMV0gLSBsaWdodG5lc3NbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGwgPSAwO1xuICAgICAgICBsaWdodG5lc3MgPSBbbGlnaHRuZXNzLCBsaWdodG5lc3NdO1xuICAgIH1cbiAgICBjb25zdCBmID0gZnVuY3Rpb24gKGZyYWN0KSB7XG4gICAgICAgIGNvbnN0IGEgPSBUV09QSSAqICgoc3RhcnQgKyAxMjApIC8gMzYwICsgcm90YXRpb25zICogZnJhY3QpO1xuICAgICAgICBjb25zdCBsID0gcG93KGxpZ2h0bmVzc1swXSArIGRsICogZnJhY3QsIGdhbW1hKTtcbiAgICAgICAgY29uc3QgaCA9IGRoICE9PSAwID8gaHVlWzBdICsgZnJhY3QgKiBkaCA6IGh1ZTtcbiAgICAgICAgY29uc3QgYW1wID0gKGggKiBsICogKDEgLSBsKSkgLyAyO1xuICAgICAgICBjb25zdCBjb3NfYSA9IGNvcyhhKTtcbiAgICAgICAgY29uc3Qgc2luX2EgPSBzaW4oYSk7XG4gICAgICAgIGNvbnN0IHIgPSBsICsgYW1wICogKC0wLjE0ODYxICogY29zX2EgKyAxLjc4Mjc3ICogc2luX2EpO1xuICAgICAgICBjb25zdCBnID0gbCArIGFtcCAqICgtMC4yOTIyNyAqIGNvc19hIC0gMC45MDY0OSAqIHNpbl9hKTtcbiAgICAgICAgY29uc3QgYiA9IGwgKyBhbXAgKiAoKzEuOTcyOTQgKiBjb3NfYSk7XG4gICAgICAgIHJldHVybiBjaHJvbWEoY2xpcF9yZ2IoW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTUsIDFdKSk7XG4gICAgfTtcbiAgICBmLnN0YXJ0ID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgaWYgKHMgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0ID0gcztcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcbiAgICBmLnJvdGF0aW9ucyA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIGlmIChyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiByb3RhdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgcm90YXRpb25zID0gcjtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcbiAgICBmLmdhbW1hID0gZnVuY3Rpb24gKGcpIHtcbiAgICAgICAgaWYgKGcgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdhbW1hO1xuICAgICAgICB9XG4gICAgICAgIGdhbW1hID0gZztcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcbiAgICBmLmh1ZSA9IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgIGlmIChoID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBodWU7XG4gICAgICAgIH1cbiAgICAgICAgaHVlID0gaDtcbiAgICAgICAgaWYgKHR5cGUoaHVlKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgZGggPSBodWVbMV0gLSBodWVbMF07XG4gICAgICAgICAgICBpZiAoZGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBodWUgPSBodWVbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcbiAgICBmLmxpZ2h0bmVzcyA9IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgIGlmIChoID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBsaWdodG5lc3M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUoaCkgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIGxpZ2h0bmVzcyA9IGg7XG4gICAgICAgICAgICBkbCA9IGhbMV0gLSBoWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGlnaHRuZXNzID0gW2gsIGhdO1xuICAgICAgICAgICAgZGwgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG4gICAgZi5zY2FsZSA9ICgpID0+IGNocm9tYS5zY2FsZShmKTtcbiAgICBmLmh1ZShodWUpO1xuICAgIHJldHVybiBmO1xufVxuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5jb25zdCBkaWdpdHMgPSAnMDEyMzQ1Njc4OWFiY2RlZic7XG5cbmNvbnN0IHsgZmxvb3IsIHJhbmRvbSB9ID0gTWF0aDtcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAgIGxldCBjb2RlID0gJyMnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgIGNvZGUgKz0gZGlnaXRzLmNoYXJBdChmbG9vcihyYW5kb20oKSAqIDE2KSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQ29sb3IoY29kZSwgJ2hleCcpO1xufTtcbiIsICJpbXBvcnQgdHlwZSBmcm9tICcuL3R5cGUuanMnO1xuXG5jb25zdCB7IGxvZywgcG93LCBmbG9vciwgYWJzIH0gPSBNYXRoO1xuXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl6ZShkYXRhLCBrZXkgPSBudWxsKSB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgICAgbWluOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICBtYXg6IE51bWJlci5NQVhfVkFMVUUgKiAtMSxcbiAgICAgICAgc3VtOiAwLFxuICAgICAgICB2YWx1ZXM6IFtdLFxuICAgICAgICBjb3VudDogMFxuICAgIH07XG4gICAgaWYgKHR5cGUoZGF0YSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGRhdGEgPSBPYmplY3QudmFsdWVzKGRhdGEpO1xuICAgIH1cbiAgICBkYXRhLmZvckVhY2goKHZhbCkgPT4ge1xuICAgICAgICBpZiAoa2V5ICYmIHR5cGUodmFsKSA9PT0gJ29iamVjdCcpIHZhbCA9IHZhbFtrZXldO1xuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsICYmICFpc05hTih2YWwpKSB7XG4gICAgICAgICAgICByLnZhbHVlcy5wdXNoKHZhbCk7XG4gICAgICAgICAgICByLnN1bSArPSB2YWw7XG4gICAgICAgICAgICBpZiAodmFsIDwgci5taW4pIHIubWluID0gdmFsO1xuICAgICAgICAgICAgaWYgKHZhbCA+IHIubWF4KSByLm1heCA9IHZhbDtcbiAgICAgICAgICAgIHIuY291bnQgKz0gMTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgci5kb21haW4gPSBbci5taW4sIHIubWF4XTtcblxuICAgIHIubGltaXRzID0gKG1vZGUsIG51bSkgPT4gbGltaXRzKHIsIG1vZGUsIG51bSk7XG5cbiAgICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbWl0cyhkYXRhLCBtb2RlID0gJ2VxdWFsJywgbnVtID0gNykge1xuICAgIGlmICh0eXBlKGRhdGEpID09ICdhcnJheScpIHtcbiAgICAgICAgZGF0YSA9IGFuYWx5emUoZGF0YSk7XG4gICAgfVxuICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IGRhdGE7XG4gICAgY29uc3QgdmFsdWVzID0gZGF0YS52YWx1ZXMuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuXG4gICAgaWYgKG51bSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gW21pbiwgbWF4XTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW1pdHMgPSBbXTtcblxuICAgIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2MnKSB7XG4gICAgICAgIC8vIGNvbnRpbnVvdXNcbiAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICB9XG5cbiAgICBpZiAobW9kZS5zdWJzdHIoMCwgMSkgPT09ICdlJykge1xuICAgICAgICAvLyBlcXVhbCBpbnRlcnZhbFxuICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG51bTsgaSsrKSB7XG4gICAgICAgICAgICBsaW1pdHMucHVzaChtaW4gKyAoaSAvIG51bSkgKiAobWF4IC0gbWluKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICB9IGVsc2UgaWYgKG1vZGUuc3Vic3RyKDAsIDEpID09PSAnbCcpIHtcbiAgICAgICAgLy8gbG9nIHNjYWxlXG4gICAgICAgIGlmIChtaW4gPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdMb2dhcml0aG1pYyBzY2FsZXMgYXJlIG9ubHkgcG9zc2libGUgZm9yIHZhbHVlcyA+IDAnXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1pbl9sb2cgPSBNYXRoLkxPRzEwRSAqIGxvZyhtaW4pO1xuICAgICAgICBjb25zdCBtYXhfbG9nID0gTWF0aC5MT0cxMEUgKiBsb2cobWF4KTtcbiAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgbGltaXRzLnB1c2gocG93KDEwLCBtaW5fbG9nICsgKGkgLyBudW0pICogKG1heF9sb2cgLSBtaW5fbG9nKSkpO1xuICAgICAgICB9XG4gICAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG4gICAgfSBlbHNlIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ3EnKSB7XG4gICAgICAgIC8vIHF1YW50aWxlIHNjYWxlXG4gICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSAoKHZhbHVlcy5sZW5ndGggLSAxKSAqIGkpIC8gbnVtO1xuICAgICAgICAgICAgY29uc3QgcGIgPSBmbG9vcihwKTtcbiAgICAgICAgICAgIGlmIChwYiA9PT0gcCkge1xuICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKHZhbHVlc1twYl0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBwID4gcGJcbiAgICAgICAgICAgICAgICBjb25zdCBwciA9IHAgLSBwYjtcbiAgICAgICAgICAgICAgICBsaW1pdHMucHVzaCh2YWx1ZXNbcGJdICogKDEgLSBwcikgKyB2YWx1ZXNbcGIgKyAxXSAqIHByKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH0gZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwgMSkgPT09ICdrJykge1xuICAgICAgICAvLyBrLW1lYW5zIGNsdXN0ZXJpbmdcbiAgICAgICAgLypcbiAgICAgICAgaW1wbGVtZW50YXRpb24gYmFzZWQgb25cbiAgICAgICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2ZpZ3VlL3NvdXJjZS9icm93c2UvdHJ1bmsvZmlndWUuanMjMzM2XG4gICAgICAgIHNpbXBsaWZpZWQgZm9yIDEtZCBpbnB1dCB2YWx1ZXNcbiAgICAgICAgKi9cbiAgICAgICAgbGV0IGNsdXN0ZXI7XG4gICAgICAgIGNvbnN0IG4gPSB2YWx1ZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBhc3NpZ25tZW50cyA9IG5ldyBBcnJheShuKTtcbiAgICAgICAgY29uc3QgY2x1c3RlclNpemVzID0gbmV3IEFycmF5KG51bSk7XG4gICAgICAgIGxldCByZXBlYXQgPSB0cnVlO1xuICAgICAgICBsZXQgbmJfaXRlcnMgPSAwO1xuICAgICAgICBsZXQgY2VudHJvaWRzID0gbnVsbDtcblxuICAgICAgICAvLyBnZXQgc2VlZCB2YWx1ZXNcbiAgICAgICAgY2VudHJvaWRzID0gW107XG4gICAgICAgIGNlbnRyb2lkcy5wdXNoKG1pbik7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtOyBpKyspIHtcbiAgICAgICAgICAgIGNlbnRyb2lkcy5wdXNoKG1pbiArIChpIC8gbnVtKSAqIChtYXggLSBtaW4pKTtcbiAgICAgICAgfVxuICAgICAgICBjZW50cm9pZHMucHVzaChtYXgpO1xuXG4gICAgICAgIHdoaWxlIChyZXBlYXQpIHtcbiAgICAgICAgICAgIC8vIGFzc2lnbm1lbnQgc3RlcFxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW07IGorKykge1xuICAgICAgICAgICAgICAgIGNsdXN0ZXJTaXplc1tqXSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBtaW5kaXN0ID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgICAgICAgICBsZXQgYmVzdDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3QgPSBhYnMoY2VudHJvaWRzW2pdIC0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdCA8IG1pbmRpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmRpc3QgPSBkaXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGo7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlclNpemVzW2Jlc3RdKys7XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRzW2ldID0gYmVzdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSBjZW50cm9pZHMgc3RlcFxuICAgICAgICAgICAgY29uc3QgbmV3Q2VudHJvaWRzID0gbmV3IEFycmF5KG51bSk7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2pdID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2x1c3RlciA9IGFzc2lnbm1lbnRzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChuZXdDZW50cm9pZHNbY2x1c3Rlcl0gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2NsdXN0ZXJdID0gdmFsdWVzW2ldO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbnRyb2lkc1tjbHVzdGVyXSArPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW07IGorKykge1xuICAgICAgICAgICAgICAgIG5ld0NlbnRyb2lkc1tqXSAqPSAxIC8gY2x1c3RlclNpemVzW2pdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjaGVjayBjb252ZXJnZW5jZVxuICAgICAgICAgICAgcmVwZWF0ID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tqXSAhPT0gY2VudHJvaWRzW2pdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcGVhdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2VudHJvaWRzID0gbmV3Q2VudHJvaWRzO1xuICAgICAgICAgICAgbmJfaXRlcnMrKztcblxuICAgICAgICAgICAgaWYgKG5iX2l0ZXJzID4gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVwZWF0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmaW5pc2hlZCBrLW1lYW5zIGNsdXN0ZXJpbmdcbiAgICAgICAgLy8gdGhlIG5leHQgcGFydCBpcyBib3Jyb3dlZCBmcm9tIGdhYnJpZWxmbG9yLml0XG4gICAgICAgIGNvbnN0IGtDbHVzdGVycyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICBrQ2x1c3RlcnNbal0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgY2x1c3RlciA9IGFzc2lnbm1lbnRzW2ldO1xuICAgICAgICAgICAga0NsdXN0ZXJzW2NsdXN0ZXJdLnB1c2godmFsdWVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdG1wS01lYW5zQnJlYWtzID0gW107XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgIHRtcEtNZWFuc0JyZWFrcy5wdXNoKGtDbHVzdGVyc1tqXVswXSk7XG4gICAgICAgICAgICB0bXBLTWVhbnNCcmVha3MucHVzaChrQ2x1c3RlcnNbal1ba0NsdXN0ZXJzW2pdLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgfVxuICAgICAgICB0bXBLTWVhbnNCcmVha3MgPSB0bXBLTWVhbnNCcmVha3Muc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgICAgICBsaW1pdHMucHVzaCh0bXBLTWVhbnNCcmVha3NbMF0pO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRtcEtNZWFuc0JyZWFrcy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRtcEtNZWFuc0JyZWFrc1tpXTtcbiAgICAgICAgICAgIGlmICghaXNOYU4odikgJiYgbGltaXRzLmluZGV4T2YodikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbGltaXRzLnB1c2godik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpbWl0cztcbn1cbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0ICcuLi9vcHMvbHVtaW5hbmNlLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKGEsIGIpID0+IHtcbiAgICAvLyBXQ0FHIGNvbnRyYXN0IHJhdGlvXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jY29udHJhc3QtcmF0aW9kZWZcbiAgICBhID0gbmV3IENvbG9yKGEpO1xuICAgIGIgPSBuZXcgQ29sb3IoYik7XG4gICAgY29uc3QgbDEgPSBhLmx1bWluYW5jZSgpO1xuICAgIGNvbnN0IGwyID0gYi5sdW1pbmFuY2UoKTtcbiAgICByZXR1cm4gbDEgPiBsMiA/IChsMSArIDAuMDUpIC8gKGwyICsgMC4wNSkgOiAobDIgKyAwLjA1KSAvIChsMSArIDAuMDUpO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuY29uc3QgeyBzcXJ0LCBwb3csIG1pbiwgbWF4LCBhdGFuMiwgYWJzLCBjb3MsIHNpbiwgZXhwLCBQSSB9ID0gTWF0aDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGEsIGIsIEtsID0gMSwgS2MgPSAxLCBLaCA9IDEpIHtcbiAgICAvLyBEZWx0YSBFIChDSUUgMjAwMClcbiAgICAvLyBzZWUgaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fRGVsdGFFX0NJRTIwMDAuaHRtbFxuICAgIHZhciByYWQyZGVnID0gZnVuY3Rpb24gKHJhZCkge1xuICAgICAgICByZXR1cm4gKDM2MCAqIHJhZCkgLyAoMiAqIFBJKTtcbiAgICB9O1xuICAgIHZhciBkZWcycmFkID0gZnVuY3Rpb24gKGRlZykge1xuICAgICAgICByZXR1cm4gKDIgKiBQSSAqIGRlZykgLyAzNjA7XG4gICAgfTtcbiAgICBhID0gbmV3IENvbG9yKGEpO1xuICAgIGIgPSBuZXcgQ29sb3IoYik7XG4gICAgY29uc3QgW0wxLCBhMSwgYjFdID0gQXJyYXkuZnJvbShhLmxhYigpKTtcbiAgICBjb25zdCBbTDIsIGEyLCBiMl0gPSBBcnJheS5mcm9tKGIubGFiKCkpO1xuICAgIGNvbnN0IGF2Z0wgPSAoTDEgKyBMMikgLyAyO1xuICAgIGNvbnN0IEMxID0gc3FydChwb3coYTEsIDIpICsgcG93KGIxLCAyKSk7XG4gICAgY29uc3QgQzIgPSBzcXJ0KHBvdyhhMiwgMikgKyBwb3coYjIsIDIpKTtcbiAgICBjb25zdCBhdmdDID0gKEMxICsgQzIpIC8gMjtcbiAgICBjb25zdCBHID0gMC41ICogKDEgLSBzcXJ0KHBvdyhhdmdDLCA3KSAvIChwb3coYXZnQywgNykgKyBwb3coMjUsIDcpKSkpO1xuICAgIGNvbnN0IGExcCA9IGExICogKDEgKyBHKTtcbiAgICBjb25zdCBhMnAgPSBhMiAqICgxICsgRyk7XG4gICAgY29uc3QgQzFwID0gc3FydChwb3coYTFwLCAyKSArIHBvdyhiMSwgMikpO1xuICAgIGNvbnN0IEMycCA9IHNxcnQocG93KGEycCwgMikgKyBwb3coYjIsIDIpKTtcbiAgICBjb25zdCBhdmdDcCA9IChDMXAgKyBDMnApIC8gMjtcbiAgICBjb25zdCBhcmN0YW4xID0gcmFkMmRlZyhhdGFuMihiMSwgYTFwKSk7XG4gICAgY29uc3QgYXJjdGFuMiA9IHJhZDJkZWcoYXRhbjIoYjIsIGEycCkpO1xuICAgIGNvbnN0IGgxcCA9IGFyY3RhbjEgPj0gMCA/IGFyY3RhbjEgOiBhcmN0YW4xICsgMzYwO1xuICAgIGNvbnN0IGgycCA9IGFyY3RhbjIgPj0gMCA/IGFyY3RhbjIgOiBhcmN0YW4yICsgMzYwO1xuICAgIGNvbnN0IGF2Z0hwID1cbiAgICAgICAgYWJzKGgxcCAtIGgycCkgPiAxODAgPyAoaDFwICsgaDJwICsgMzYwKSAvIDIgOiAoaDFwICsgaDJwKSAvIDI7XG4gICAgY29uc3QgVCA9XG4gICAgICAgIDEgLVxuICAgICAgICAwLjE3ICogY29zKGRlZzJyYWQoYXZnSHAgLSAzMCkpICtcbiAgICAgICAgMC4yNCAqIGNvcyhkZWcycmFkKDIgKiBhdmdIcCkpICtcbiAgICAgICAgMC4zMiAqIGNvcyhkZWcycmFkKDMgKiBhdmdIcCArIDYpKSAtXG4gICAgICAgIDAuMiAqIGNvcyhkZWcycmFkKDQgKiBhdmdIcCAtIDYzKSk7XG4gICAgbGV0IGRlbHRhSHAgPSBoMnAgLSBoMXA7XG4gICAgZGVsdGFIcCA9XG4gICAgICAgIGFicyhkZWx0YUhwKSA8PSAxODBcbiAgICAgICAgICAgID8gZGVsdGFIcFxuICAgICAgICAgICAgOiBoMnAgPD0gaDFwXG4gICAgICAgICAgICAgID8gZGVsdGFIcCArIDM2MFxuICAgICAgICAgICAgICA6IGRlbHRhSHAgLSAzNjA7XG4gICAgZGVsdGFIcCA9IDIgKiBzcXJ0KEMxcCAqIEMycCkgKiBzaW4oZGVnMnJhZChkZWx0YUhwKSAvIDIpO1xuICAgIGNvbnN0IGRlbHRhTCA9IEwyIC0gTDE7XG4gICAgY29uc3QgZGVsdGFDcCA9IEMycCAtIEMxcDtcbiAgICBjb25zdCBzbCA9IDEgKyAoMC4wMTUgKiBwb3coYXZnTCAtIDUwLCAyKSkgLyBzcXJ0KDIwICsgcG93KGF2Z0wgLSA1MCwgMikpO1xuICAgIGNvbnN0IHNjID0gMSArIDAuMDQ1ICogYXZnQ3A7XG4gICAgY29uc3Qgc2ggPSAxICsgMC4wMTUgKiBhdmdDcCAqIFQ7XG4gICAgY29uc3QgZGVsdGFUaGV0YSA9IDMwICogZXhwKC1wb3coKGF2Z0hwIC0gMjc1KSAvIDI1LCAyKSk7XG4gICAgY29uc3QgUmMgPSAyICogc3FydChwb3coYXZnQ3AsIDcpIC8gKHBvdyhhdmdDcCwgNykgKyBwb3coMjUsIDcpKSk7XG4gICAgY29uc3QgUnQgPSAtUmMgKiBzaW4oMiAqIGRlZzJyYWQoZGVsdGFUaGV0YSkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHNxcnQoXG4gICAgICAgIHBvdyhkZWx0YUwgLyAoS2wgKiBzbCksIDIpICtcbiAgICAgICAgICAgIHBvdyhkZWx0YUNwIC8gKEtjICogc2MpLCAyKSArXG4gICAgICAgICAgICBwb3coZGVsdGFIcCAvIChLaCAqIHNoKSwgMikgK1xuICAgICAgICAgICAgUnQgKiAoZGVsdGFDcCAvIChLYyAqIHNjKSkgKiAoZGVsdGFIcCAvIChLaCAqIHNoKSlcbiAgICApO1xuICAgIHJldHVybiBtYXgoMCwgbWluKDEwMCwgcmVzdWx0KSk7XG59XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuLy8gc2ltcGxlIEV1Y2xpZGVhbiBkaXN0YW5jZVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGEsIGIsIG1vZGUgPSAnbGFiJykge1xuICAgIC8vIERlbHRhIEUgKENJRSAxOTc2KVxuICAgIC8vIHNlZSBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0VxdWF0aW9ucy5odG1sXG4gICAgYSA9IG5ldyBDb2xvcihhKTtcbiAgICBiID0gbmV3IENvbG9yKGIpO1xuICAgIGNvbnN0IGwxID0gYS5nZXQobW9kZSk7XG4gICAgY29uc3QgbDIgPSBiLmdldChtb2RlKTtcbiAgICBsZXQgc3VtX3NxID0gMDtcbiAgICBmb3IgKGxldCBpIGluIGwxKSB7XG4gICAgICAgIGNvbnN0IGQgPSAobDFbaV0gfHwgMCkgLSAobDJbaV0gfHwgMCk7XG4gICAgICAgIHN1bV9zcSArPSBkICogZDtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguc3FydChzdW1fc3EpO1xufVxuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0ICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgbmV3IENvbG9yKC4uLmFyZ3MpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufTtcbiIsICIvLyBzb21lIHByZS1kZWZpbmVkIGNvbG9yIHNjYWxlczpcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vY2hyb21hLmpzJztcbmltcG9ydCAnLi4vaW8vaHNsL2luZGV4LmpzJztcbmltcG9ydCBzY2FsZSBmcm9tICcuLi9nZW5lcmF0b3Ivc2NhbGUuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgY29vbCgpIHtcbiAgICAgICAgcmV0dXJuIHNjYWxlKFtjaHJvbWEuaHNsKDE4MCwgMSwgMC45KSwgY2hyb21hLmhzbCgyNTAsIDAuNywgMC40KV0pO1xuICAgIH0sXG4gICAgaG90KCkge1xuICAgICAgICByZXR1cm4gc2NhbGUoWycjMDAwJywgJyNmMDAnLCAnI2ZmMCcsICcjZmZmJ10sIFswLCAwLjI1LCAwLjc1LCAxXSkubW9kZShcbiAgICAgICAgICAgICdyZ2InXG4gICAgICAgICk7XG4gICAgfVxufTtcbiIsICIvKipcbiAgICBDb2xvckJyZXdlciBjb2xvcnMgZm9yIGNocm9tYS5qc1xuXG4gICAgQ29weXJpZ2h0IChjKSAyMDAyIEN5bnRoaWEgQnJld2VyLCBNYXJrIEhhcnJvd2VyLCBhbmQgVGhlXG4gICAgUGVubnN5bHZhbmlhIFN0YXRlIFVuaXZlcnNpdHkuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWRcbiAgICB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUlxuICAgIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmNvbnN0IGNvbG9yYnJld2VyID0ge1xuICAgIC8vIHNlcXVlbnRpYWxcbiAgICBPclJkOiBbJyNmZmY3ZWMnLCAnI2ZlZThjOCcsICcjZmRkNDllJywgJyNmZGJiODQnLCAnI2ZjOGQ1OScsICcjZWY2NTQ4JywgJyNkNzMwMWYnLCAnI2IzMDAwMCcsICcjN2YwMDAwJ10sXG4gICAgUHVCdTogWycjZmZmN2ZiJywgJyNlY2U3ZjInLCAnI2QwZDFlNicsICcjYTZiZGRiJywgJyM3NGE5Y2YnLCAnIzM2OTBjMCcsICcjMDU3MGIwJywgJyMwNDVhOGQnLCAnIzAyMzg1OCddLFxuICAgIEJ1UHU6IFsnI2Y3ZmNmZCcsICcjZTBlY2Y0JywgJyNiZmQzZTYnLCAnIzllYmNkYScsICcjOGM5NmM2JywgJyM4YzZiYjEnLCAnIzg4NDE5ZCcsICcjODEwZjdjJywgJyM0ZDAwNGInXSxcbiAgICBPcmFuZ2VzOiBbJyNmZmY1ZWInLCAnI2ZlZTZjZScsICcjZmRkMGEyJywgJyNmZGFlNmInLCAnI2ZkOGQzYycsICcjZjE2OTEzJywgJyNkOTQ4MDEnLCAnI2E2MzYwMycsICcjN2YyNzA0J10sXG4gICAgQnVHbjogWycjZjdmY2ZkJywgJyNlNWY1ZjknLCAnI2NjZWNlNicsICcjOTlkOGM5JywgJyM2NmMyYTQnLCAnIzQxYWU3NicsICcjMjM4YjQ1JywgJyMwMDZkMmMnLCAnIzAwNDQxYiddLFxuICAgIFlsT3JCcjogWycjZmZmZmU1JywgJyNmZmY3YmMnLCAnI2ZlZTM5MScsICcjZmVjNDRmJywgJyNmZTk5MjknLCAnI2VjNzAxNCcsICcjY2M0YzAyJywgJyM5OTM0MDQnLCAnIzY2MjUwNiddLFxuICAgIFlsR246IFsnI2ZmZmZlNScsICcjZjdmY2I5JywgJyNkOWYwYTMnLCAnI2FkZGQ4ZScsICcjNzhjNjc5JywgJyM0MWFiNWQnLCAnIzIzODQ0MycsICcjMDA2ODM3JywgJyMwMDQ1MjknXSxcbiAgICBSZWRzOiBbJyNmZmY1ZjAnLCAnI2ZlZTBkMicsICcjZmNiYmExJywgJyNmYzkyNzInLCAnI2ZiNmE0YScsICcjZWYzYjJjJywgJyNjYjE4MWQnLCAnI2E1MGYxNScsICcjNjcwMDBkJ10sXG4gICAgUmRQdTogWycjZmZmN2YzJywgJyNmZGUwZGQnLCAnI2ZjYzVjMCcsICcjZmE5ZmI1JywgJyNmNzY4YTEnLCAnI2RkMzQ5NycsICcjYWUwMTdlJywgJyM3YTAxNzcnLCAnIzQ5MDA2YSddLFxuICAgIEdyZWVuczogWycjZjdmY2Y1JywgJyNlNWY1ZTAnLCAnI2M3ZTljMCcsICcjYTFkOTliJywgJyM3NGM0NzYnLCAnIzQxYWI1ZCcsICcjMjM4YjQ1JywgJyMwMDZkMmMnLCAnIzAwNDQxYiddLFxuICAgIFlsR25CdTogWycjZmZmZmQ5JywgJyNlZGY4YjEnLCAnI2M3ZTliNCcsICcjN2ZjZGJiJywgJyM0MWI2YzQnLCAnIzFkOTFjMCcsICcjMjI1ZWE4JywgJyMyNTM0OTQnLCAnIzA4MWQ1OCddLFxuICAgIFB1cnBsZXM6IFsnI2ZjZmJmZCcsICcjZWZlZGY1JywgJyNkYWRhZWInLCAnI2JjYmRkYycsICcjOWU5YWM4JywgJyM4MDdkYmEnLCAnIzZhNTFhMycsICcjNTQyNzhmJywgJyMzZjAwN2QnXSxcbiAgICBHbkJ1OiBbJyNmN2ZjZjAnLCAnI2UwZjNkYicsICcjY2NlYmM1JywgJyNhOGRkYjUnLCAnIzdiY2NjNCcsICcjNGViM2QzJywgJyMyYjhjYmUnLCAnIzA4NjhhYycsICcjMDg0MDgxJ10sXG4gICAgR3JleXM6IFsnI2ZmZmZmZicsICcjZjBmMGYwJywgJyNkOWQ5ZDknLCAnI2JkYmRiZCcsICcjOTY5Njk2JywgJyM3MzczNzMnLCAnIzUyNTI1MicsICcjMjUyNTI1JywgJyMwMDAwMDAnXSxcbiAgICBZbE9yUmQ6IFsnI2ZmZmZjYycsICcjZmZlZGEwJywgJyNmZWQ5NzYnLCAnI2ZlYjI0YycsICcjZmQ4ZDNjJywgJyNmYzRlMmEnLCAnI2UzMWExYycsICcjYmQwMDI2JywgJyM4MDAwMjYnXSxcbiAgICBQdVJkOiBbJyNmN2Y0ZjknLCAnI2U3ZTFlZicsICcjZDRiOWRhJywgJyNjOTk0YzcnLCAnI2RmNjViMCcsICcjZTcyOThhJywgJyNjZTEyNTYnLCAnIzk4MDA0MycsICcjNjcwMDFmJ10sXG4gICAgQmx1ZXM6IFsnI2Y3ZmJmZicsICcjZGVlYmY3JywgJyNjNmRiZWYnLCAnIzllY2FlMScsICcjNmJhZWQ2JywgJyM0MjkyYzYnLCAnIzIxNzFiNScsICcjMDg1MTljJywgJyMwODMwNmInXSxcbiAgICBQdUJ1R246IFsnI2ZmZjdmYicsICcjZWNlMmYwJywgJyNkMGQxZTYnLCAnI2E2YmRkYicsICcjNjdhOWNmJywgJyMzNjkwYzAnLCAnIzAyODE4YScsICcjMDE2YzU5JywgJyMwMTQ2MzYnXSxcbiAgICBWaXJpZGlzOiBbJyM0NDAxNTQnLCAnIzQ4Mjc3NycsICcjM2Y0YThhJywgJyMzMTY3OGUnLCAnIzI2ODM4ZicsICcjMWY5ZDhhJywgJyM2Y2NlNWEnLCAnI2I2ZGUyYicsICcjZmVlODI1J10sXG5cbiAgICAvLyBkaXZlcmdpbmdcbiAgICBTcGVjdHJhbDogWycjOWUwMTQyJywgJyNkNTNlNGYnLCAnI2Y0NmQ0MycsICcjZmRhZTYxJywgJyNmZWUwOGInLCAnI2ZmZmZiZicsICcjZTZmNTk4JywgJyNhYmRkYTQnLCAnIzY2YzJhNScsICcjMzI4OGJkJywgJyM1ZTRmYTInXSxcbiAgICBSZFlsR246IFsnI2E1MDAyNicsICcjZDczMDI3JywgJyNmNDZkNDMnLCAnI2ZkYWU2MScsICcjZmVlMDhiJywgJyNmZmZmYmYnLCAnI2Q5ZWY4YicsICcjYTZkOTZhJywgJyM2NmJkNjMnLCAnIzFhOTg1MCcsICcjMDA2ODM3J10sXG4gICAgUmRCdTogWycjNjcwMDFmJywgJyNiMjE4MmInLCAnI2Q2NjA0ZCcsICcjZjRhNTgyJywgJyNmZGRiYzcnLCAnI2Y3ZjdmNycsICcjZDFlNWYwJywgJyM5MmM1ZGUnLCAnIzQzOTNjMycsICcjMjE2NmFjJywgJyMwNTMwNjEnXSxcbiAgICBQaVlHOiBbJyM4ZTAxNTInLCAnI2M1MWI3ZCcsICcjZGU3N2FlJywgJyNmMWI2ZGEnLCAnI2ZkZTBlZicsICcjZjdmN2Y3JywgJyNlNmY1ZDAnLCAnI2I4ZTE4NicsICcjN2ZiYzQxJywgJyM0ZDkyMjEnLCAnIzI3NjQxOSddLFxuICAgIFBSR246IFsnIzQwMDA0YicsICcjNzYyYTgzJywgJyM5OTcwYWInLCAnI2MyYTVjZicsICcjZTdkNGU4JywgJyNmN2Y3ZjcnLCAnI2Q5ZjBkMycsICcjYTZkYmEwJywgJyM1YWFlNjEnLCAnIzFiNzgzNycsICcjMDA0NDFiJ10sXG4gICAgUmRZbEJ1OiBbJyNhNTAwMjYnLCAnI2Q3MzAyNycsICcjZjQ2ZDQzJywgJyNmZGFlNjEnLCAnI2ZlZTA5MCcsICcjZmZmZmJmJywgJyNlMGYzZjgnLCAnI2FiZDllOScsICcjNzRhZGQxJywgJyM0NTc1YjQnLCAnIzMxMzY5NSddLFxuICAgIEJyQkc6IFsnIzU0MzAwNScsICcjOGM1MTBhJywgJyNiZjgxMmQnLCAnI2RmYzI3ZCcsICcjZjZlOGMzJywgJyNmNWY1ZjUnLCAnI2M3ZWFlNScsICcjODBjZGMxJywgJyMzNTk3OGYnLCAnIzAxNjY1ZScsICcjMDAzYzMwJ10sXG4gICAgUmRHeTogWycjNjcwMDFmJywgJyNiMjE4MmInLCAnI2Q2NjA0ZCcsICcjZjRhNTgyJywgJyNmZGRiYzcnLCAnI2ZmZmZmZicsICcjZTBlMGUwJywgJyNiYWJhYmEnLCAnIzg3ODc4NycsICcjNGQ0ZDRkJywgJyMxYTFhMWEnXSxcbiAgICBQdU9yOiBbJyM3ZjNiMDgnLCAnI2IzNTgwNicsICcjZTA4MjE0JywgJyNmZGI4NjMnLCAnI2ZlZTBiNicsICcjZjdmN2Y3JywgJyNkOGRhZWInLCAnI2IyYWJkMicsICcjODA3M2FjJywgJyM1NDI3ODgnLCAnIzJkMDA0YiddLFxuXG4gICAgLy8gcXVhbGl0YXRpdmVcbiAgICBTZXQyOiBbJyM2NmMyYTUnLCAnI2ZjOGQ2MicsICcjOGRhMGNiJywgJyNlNzhhYzMnLCAnI2E2ZDg1NCcsICcjZmZkOTJmJywgJyNlNWM0OTQnLCAnI2IzYjNiMyddLFxuICAgIEFjY2VudDogWycjN2ZjOTdmJywgJyNiZWFlZDQnLCAnI2ZkYzA4NicsICcjZmZmZjk5JywgJyMzODZjYjAnLCAnI2YwMDI3ZicsICcjYmY1YjE3JywgJyM2NjY2NjYnXSxcbiAgICBTZXQxOiBbJyNlNDFhMWMnLCAnIzM3N2ViOCcsICcjNGRhZjRhJywgJyM5ODRlYTMnLCAnI2ZmN2YwMCcsICcjZmZmZjMzJywgJyNhNjU2MjgnLCAnI2Y3ODFiZicsICcjOTk5OTk5J10sXG4gICAgU2V0MzogWycjOGRkM2M3JywgJyNmZmZmYjMnLCAnI2JlYmFkYScsICcjZmI4MDcyJywgJyM4MGIxZDMnLCAnI2ZkYjQ2MicsICcjYjNkZTY5JywgJyNmY2NkZTUnLCAnI2Q5ZDlkOScsICcjYmM4MGJkJywgJyNjY2ViYzUnLCAnI2ZmZWQ2ZiddLFxuICAgIERhcmsyOiBbJyMxYjllNzcnLCAnI2Q5NWYwMicsICcjNzU3MGIzJywgJyNlNzI5OGEnLCAnIzY2YTYxZScsICcjZTZhYjAyJywgJyNhNjc2MWQnLCAnIzY2NjY2NiddLFxuICAgIFBhaXJlZDogWycjYTZjZWUzJywgJyMxZjc4YjQnLCAnI2IyZGY4YScsICcjMzNhMDJjJywgJyNmYjlhOTknLCAnI2UzMWExYycsICcjZmRiZjZmJywgJyNmZjdmMDAnLCAnI2NhYjJkNicsICcjNmEzZDlhJywgJyNmZmZmOTknLCAnI2IxNTkyOCddLFxuICAgIFBhc3RlbDI6IFsnI2IzZTJjZCcsICcjZmRjZGFjJywgJyNjYmQ1ZTgnLCAnI2Y0Y2FlNCcsICcjZTZmNWM5JywgJyNmZmYyYWUnLCAnI2YxZTJjYycsICcjY2NjY2NjJ10sXG4gICAgUGFzdGVsMTogWycjZmJiNGFlJywgJyNiM2NkZTMnLCAnI2NjZWJjNScsICcjZGVjYmU0JywgJyNmZWQ5YTYnLCAnI2ZmZmZjYycsICcjZTVkOGJkJywgJyNmZGRhZWMnLCAnI2YyZjJmMiddXG59O1xuXG4vLyBhZGQgbG93ZXJjYXNlIGFsaWFzZXMgZm9yIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hlc1xuZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKGNvbG9yYnJld2VyKSkge1xuICAgIGNvbG9yYnJld2VyW2tleS50b0xvd2VyQ2FzZSgpXSA9IGNvbG9yYnJld2VyW2tleV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9yYnJld2VyO1xuIiwgImltcG9ydCBjaHJvbWEgZnJvbSAnLi9zcmMvY2hyb21hLmpzJztcblxuLy8gZmVlbCBmcmVlIHRvIGNvbW1lbnQgb3V0IGFueXRoaW5nIHRvIHJvbGx1cFxuLy8gYSBzbWFsbGVyIGNocm9tYS5qcyBidWlsdFxuXG4vLyBpbyAtLT4gY29udmVydCBjb2xvcnNcbmltcG9ydCAnLi9zcmMvaW8vY215ay9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL2Nzcy9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL2dsL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vaGNnL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vaGV4L2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vaHNpL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vaHNsL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vaHN2L2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vbGFiL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vbmFtZWQvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9udW0vaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9yZ2IvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby90ZW1wL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vb2tsYWIvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9va2xjaC9pbmRleC5qcyc7XG5cbi8vIG9wZXJhdG9ycyAtLT4gbW9kaWZ5IGV4aXN0aW5nIENvbG9yc1xuaW1wb3J0ICcuL3NyYy9vcHMvYWxwaGEuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvY2xpcHBlZC5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9kYXJrZW4uanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvZ2V0LmpzJztcbmltcG9ydCAnLi9zcmMvb3BzL2x1bWluYW5jZS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9taXguanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvcHJlbXVsdGlwbHkuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvc2F0dXJhdGUuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvc2V0LmpzJztcbmltcG9ydCAnLi9zcmMvb3BzL3NoYWRlLmpzJztcblxuLy8gaW50ZXJwb2xhdG9yc1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvcmdiLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL2xyZ2IuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvbGFiLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL2xjaC5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9udW0uanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvaGNnLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL2hzaS5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9oc2wuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvaHN2LmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL29rbGFiLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL29rbGNoLmpzJztcblxuLy8gZ2VuZXJhdG9ycyAtLSA+IGNyZWF0ZSBuZXcgY29sb3JzXG5pbXBvcnQgYXZlcmFnZSBmcm9tICcuL3NyYy9nZW5lcmF0b3IvYXZlcmFnZS5qcyc7XG5pbXBvcnQgYmV6aWVyIGZyb20gJy4vc3JjL2dlbmVyYXRvci9iZXppZXIuanMnO1xuaW1wb3J0IGJsZW5kIGZyb20gJy4vc3JjL2dlbmVyYXRvci9ibGVuZC5qcyc7XG5pbXBvcnQgY3ViZWhlbGl4IGZyb20gJy4vc3JjL2dlbmVyYXRvci9jdWJlaGVsaXguanMnO1xuaW1wb3J0IG1peCBmcm9tICcuL3NyYy9nZW5lcmF0b3IvbWl4LmpzJztcbmltcG9ydCByYW5kb20gZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL3JhbmRvbS5qcyc7XG5pbXBvcnQgc2NhbGUgZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL3NjYWxlLmpzJztcblxuLy8gb3RoZXIgdXRpbGl0eSBtZXRob2RzXG5pbXBvcnQgeyBhbmFseXplIH0gZnJvbSAnLi9zcmMvdXRpbHMvYW5hbHl6ZS5qcyc7XG5pbXBvcnQgY29udHJhc3QgZnJvbSAnLi9zcmMvdXRpbHMvY29udHJhc3QuanMnO1xuaW1wb3J0IGRlbHRhRSBmcm9tICcuL3NyYy91dGlscy9kZWx0YS1lLmpzJztcbmltcG9ydCBkaXN0YW5jZSBmcm9tICcuL3NyYy91dGlscy9kaXN0YW5jZS5qcyc7XG5pbXBvcnQgeyBsaW1pdHMgfSBmcm9tICcuL3NyYy91dGlscy9hbmFseXplLmpzJztcbmltcG9ydCB2YWxpZCBmcm9tICcuL3NyYy91dGlscy92YWxpZC5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi9zcmMvaW8vaW5wdXQuanMnO1xuXG4vLyBzY2FsZVxuaW1wb3J0IHNjYWxlcyBmcm9tICcuL3NyYy91dGlscy9zY2FsZXMuanMnO1xuXG4vLyBjb2xvcnNcbmltcG9ydCBjb2xvcnMgZnJvbSAnLi9zcmMvY29sb3JzL3czY3gxMS5qcyc7XG5pbXBvcnQgYnJld2VyIGZyb20gJy4vc3JjL2NvbG9ycy9jb2xvcmJyZXdlci5qcyc7XG5cbk9iamVjdC5hc3NpZ24oY2hyb21hLCB7XG4gICAgYXZlcmFnZSxcbiAgICBiZXppZXIsXG4gICAgYmxlbmQsXG4gICAgY3ViZWhlbGl4LFxuICAgIG1peCxcbiAgICBpbnRlcnBvbGF0ZTogbWl4LFxuICAgIHJhbmRvbSxcbiAgICBzY2FsZSxcbiAgICBhbmFseXplLFxuICAgIGNvbnRyYXN0LFxuICAgIGRlbHRhRSxcbiAgICBkaXN0YW5jZSxcbiAgICBsaW1pdHMsXG4gICAgdmFsaWQsXG4gICAgc2NhbGVzLFxuICAgIGlucHV0LFxuICAgIGNvbG9ycyxcbiAgICBicmV3ZXJcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjaHJvbWE7XG4iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuZXhwb3J0IHZhciBNSURfQ09MT1JfU1RPUCA9ICcjRUJFRkY1JztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGFuIGFycmF5IG9mIGNvbG9ycyBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBpbnRlcnBvbGF0ZWRcbiAqIGNvbG9ycyBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHN0ZXBzL2xlbiBuZWVkZWQgZm9yIHVzZSBpbiBVSSBlbGVtZW50cyBzdWNoIGFzIGNoYXJ0cy5cbiAqIERlcml2ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZ2thL3BhbGV0dGVzIChVbmxpY2Vuc2VkKVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xvclBhbGV0dGUoXG4vKipcbiAqIFRoZSBtYWluIGNvbG9yIGNvZGUgb3IgYXJyYXkgb2YgY29kZXNcbiAqL1xuY29sb3JzKSB7XG4gIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDEwO1xuICB2YXIgZGl2ZXJnaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgdmFyIGNhdGVnb3JpY2FsID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBmYWxzZTtcbiAgdmFyIGhleFN0YXJ0ID0gY29sb3JzLnNsaWNlKCk7XG4gIHZhciBoZXhFbmQgPSBbXTtcbiAgdmFyIGV2ZW4gPSBsZW4gJSAyID09PSAwO1xuICB2YXIgbnVtQ29sb3JzTGVmdCA9IGRpdmVyZ2luZyA/IE1hdGguY2VpbChsZW4gLyAyKSArIChldmVuID8gMSA6IDApIDogbGVuO1xuICB2YXIgbnVtQ29sb3JzUmlnaHQgPSBkaXZlcmdpbmcgPyBNYXRoLmNlaWwobGVuIC8gMikgKyAoZXZlbiA/IDEgOiAwKSA6IDA7XG5cbiAgLy8gSWYgb25seSBhIHNpbmdsZSBjb2xvciBpcyBwcm92aWRlZCBwcmVwZW5kIHRoZSBtaWQtcG9pbnQgY29sb3JcbiAgaWYgKGhleFN0YXJ0Lmxlbmd0aCA9PT0gMSkge1xuICAgIGhleFN0YXJ0LnVuc2hpZnQoTUlEX0NPTE9SX1NUT1ApO1xuICB9XG5cbiAgLy8gSWYgZGl2ZXJnaW5nLCBzcGxpdCB0aGUgc3RhcnQgYXJyYXkgYW5kIGR1cGxpY2F0ZSB0aGUgbWlkIGNvbG9yXG4gIGlmIChkaXZlcmdpbmcpIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIG1pZHBvaW50LCBjcmVhdGUgb25lXG4gICAgaWYgKGhleFN0YXJ0Lmxlbmd0aCA8IDMpIHtcbiAgICAgIGhleFN0YXJ0WzJdID0gaGV4U3RhcnRbMV07XG4gICAgICBoZXhTdGFydFsxXSA9IE1JRF9DT0xPUl9TVE9QO1xuICAgIH1cbiAgICB2YXIgbnVtQ29sb3JzSGFsZiA9IE1hdGguY2VpbChoZXhTdGFydC5sZW5ndGggLyAyKTtcbiAgICB2YXIgY29sb3JzTGVmdCA9IGhleFN0YXJ0LmZpbHRlcihmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgIGlmIChpbmRleCA8IG51bUNvbG9yc0hhbGYpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIGtlZXAgaXRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB2YXIgY29sb3JzUmlnaHQgPSBoZXhTdGFydC5yZXZlcnNlKCkuZmlsdGVyKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKGluZGV4IDwgbnVtQ29sb3JzSGFsZikge1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8ga2VlcCBpdFxuICAgICAgfVxuICAgIH0pLnJldmVyc2UoKTtcbiAgICBoZXhTdGFydCA9IGNvbG9yc0xlZnQ7XG4gICAgaGV4RW5kID0gY29sb3JzUmlnaHQ7XG4gIH1cbiAgZnVuY3Rpb24gY3JlYXRlU3RlcHMoY29sb3JzLCBzdGVwcykge1xuICAgIGlmICghY29sb3JzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGNvbG9ycztcbiAgICB9XG4gICAgaWYgKCFjYXRlZ29yaWNhbCkge1xuICAgICAgcmV0dXJuIGNocm9tYS5iZXppZXIoY29sb3JzKS5zY2FsZSgpLmNvcnJlY3RMaWdodG5lc3MoKS5jb2xvcnMoc3RlcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2hyb21hLnNjYWxlKGNvbG9ycykuY29sb3JzKHN0ZXBzKTtcbiAgICB9XG4gIH1cbiAgdmFyIHN0ZXBzTGVmdCA9IGNyZWF0ZVN0ZXBzKGhleFN0YXJ0LCBudW1Db2xvcnNMZWZ0KTtcbiAgdmFyIHN0ZXBzUmlnaHQgPSBjcmVhdGVTdGVwcyhoZXhFbmQsIG51bUNvbG9yc1JpZ2h0KTtcbiAgcmV0dXJuIChldmVuICYmIGRpdmVyZ2luZyA/IHN0ZXBzTGVmdC5zbGljZSgwLCBzdGVwc0xlZnQubGVuZ3RoIC0gMSkgOiBzdGVwc0xlZnQpLmNvbmNhdChzdGVwc1JpZ2h0LnNsaWNlKDEpKTtcbn0iLCAiZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCB7IGNvbG9yUGFsZXR0ZSB9IGZyb20gJy4vY29sb3JfcGFsZXR0ZSc7XG52YXIgZmxhdHRlbiA9IGZ1bmN0aW9uIGZsYXR0ZW4oYXJyKSB7XG4gIHZhciBfcmVmO1xuICByZXR1cm4gKF9yZWYgPSBbXSkuY29uY2F0LmFwcGx5KF9yZWYsIF90b0NvbnN1bWFibGVBcnJheShhcnIpKTtcbn07XG52YXIgZXVpUGFsZXR0ZSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGUoY29sb3JzLCBzdGVwcykge1xuICB2YXIgZGl2ZXJnZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gIHZhciBjYXRlZ29yaWNhbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogdHJ1ZTtcbiAgLy8gVGhpcyBmdW5jdGlvbiBhbHNvIHRyaW1zIHRoZSBmaXJzdCBjb2xvciBzbyB3aGl0ZS9ibGFjayBpcyBuZXZlciBhIGNvbG9yXG4gIGlmICghZGl2ZXJnZSAmJiBzdGVwcyA+IDEpIHtcbiAgICB2YXIgcGFsZXR0ZSA9IGNvbG9yUGFsZXR0ZShjb2xvcnMsIHN0ZXBzICsgMSk7XG4gICAgcGFsZXR0ZS5zaGlmdCgpO1xuICAgIHJldHVybiBwYWxldHRlO1xuICB9XG4gIHJldHVybiBjb2xvclBhbGV0dGUoY29sb3JzLCBzdGVwcywgZGl2ZXJnZSwgY2F0ZWdvcmljYWwpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvbG9yQmxpbmQgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29sb3JCbGluZCgpIHtcbiAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICBfcmVmMiRyb3RhdGlvbnMgPSBfcmVmMi5yb3RhdGlvbnMsXG4gICAgcm90YXRpb25zID0gX3JlZjIkcm90YXRpb25zID09PSB2b2lkIDAgPyAxIDogX3JlZjIkcm90YXRpb25zLFxuICAgIF9yZWYyJG9yZGVyID0gX3JlZjIub3JkZXIsXG4gICAgb3JkZXIgPSBfcmVmMiRvcmRlciA9PT0gdm9pZCAwID8gJ2FwcGVuZCcgOiBfcmVmMiRvcmRlcixcbiAgICBfcmVmMiRkaXJlY3Rpb24gPSBfcmVmMi5kaXJlY3Rpb24sXG4gICAgZGlyZWN0aW9uID0gX3JlZjIkZGlyZWN0aW9uID09PSB2b2lkIDAgPyAnbGlnaHRlcicgOiBfcmVmMiRkaXJlY3Rpb24sXG4gICAgX3JlZjIkc29ydEJ5ID0gX3JlZjIuc29ydEJ5LFxuICAgIHNvcnRCeSA9IF9yZWYyJHNvcnRCeSA9PT0gdm9pZCAwID8gJ2RlZmF1bHQnIDogX3JlZjIkc29ydEJ5LFxuICAgIF9yZWYyJHNvcnRTaGlmdCA9IF9yZWYyLnNvcnRTaGlmdCxcbiAgICBzb3J0U2hpZnQgPSBfcmVmMiRzb3J0U2hpZnQgPT09IHZvaWQgMCA/ICctMTAwJyA6IF9yZWYyJHNvcnRTaGlmdDtcbiAgdmFyIGNvbG9ycyA9IFtdO1xuICB2YXIgYmFzZSA9IFsnIzU0QjM5OScsXG4gIC8vIDAgZ3JlZW5cbiAgJyM2MDkyQzAnLFxuICAvLyAxIGJsdWVcbiAgJyNEMzYwODYnLFxuICAvLyAyIGRhcmsgcGlua1xuICAnIzkxNzBCOCcsXG4gIC8vIDMgcHVycGxlXG4gICcjQ0E4RUFFJyxcbiAgLy8gNCBsaWdodCBwaW5rXG4gICcjRDZCRjU3JyxcbiAgLy8gNSB5ZWxsb3dcbiAgJyNCOUE4ODgnLFxuICAvLyA2IHRhblxuICAnI0RBOEI0NScsXG4gIC8vIDcgb3JhbmdlXG4gICcjQUE2NTU2JyxcbiAgLy8gOCBicm93blxuICAnI0U3NjY0QycgLy8gOSByZWRcbiAgXTtcbiAgaWYgKHNvcnRCeSA9PT0gJ25hdHVyYWwnKSB7XG4gICAgLy8gU29ydCB0aGUgY29sb3JzIGJhc2VkIG9uIHRoZSBjb2xvciB3aGVlbCwgYnV0IHNoaWZ0aW5nIHRoZSB2YWx1ZXMgYmFzZWQgb24gc29ydFNoaWZ0XG4gICAgYmFzZSA9IF90b0NvbnN1bWFibGVBcnJheShiYXNlKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gY2hyb21hKGEpLnNldCgnaHNsLmgnLCBzb3J0U2hpZnQpLmhzbCgpWzBdIC0gY2hyb21hKGIpLnNldCgnaHNsLmgnLCBzb3J0U2hpZnQpLmhzbCgpWzBdO1xuICAgIH0pO1xuICB9XG4gIGlmIChyb3RhdGlvbnMgPiAxKSB7XG4gICAgdmFyIHBhbGV0dGVzID0gYmFzZS5tYXAoZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGRhcmtlc3QgYW5kIGxpZ2h0ZXN0IHZlcnNpb25zIG9mIGVhY2ggY29sb3IgdXNpbmcgYmxhY2sgYW5kIHdoaXRlXG4gICAgICB2YXIgcGFsZXR0ZSA9IGNvbG9yUGFsZXR0ZShbJ2JsYWNrJywgY29sb3IsICd3aGl0ZSddLCA1LCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAvLyBUaGVuIHJlbW92aW5nIHRoZSBleHRyZW1lc1xuICAgICAgcGFsZXR0ZS5wb3AoKTtcbiAgICAgIHBhbGV0dGUuc2hpZnQoKTtcbiAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2xpZ2h0ZXInOlxuICAgICAgICAgIHJldHVybiBjb2xvclBhbGV0dGUoW3BhbGV0dGVbMV0sIHBhbGV0dGVbMl1dLCByb3RhdGlvbnMsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgY2FzZSAnZGFya2VyJzpcbiAgICAgICAgICByZXR1cm4gY29sb3JQYWxldHRlKFtwYWxldHRlWzFdLCBwYWxldHRlWzBdXSwgcm90YXRpb25zLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICAgIHJldHVybiBjb2xvclBhbGV0dGUocGFsZXR0ZSwgcm90YXRpb25zLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKG9yZGVyID09PSAnZ3JvdXAnKSB7XG4gICAgICBjb2xvcnMgPSBmbGF0dGVuKHBhbGV0dGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICB2YXIgX2NvbG9ycztcbiAgICAgICAgdmFyIHJvdGF0aW9uID0gcGFsZXR0ZXMubWFwKGZ1bmN0aW9uIChwYWxldHRlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhbGV0dGVbaV07XG4gICAgICAgIH0pO1xuICAgICAgICAoX2NvbG9ycyA9IGNvbG9ycykucHVzaC5hcHBseShfY29sb3JzLCBfdG9Db25zdW1hYmxlQXJyYXkocm90YXRpb24pKTtcbiAgICAgIH07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvdGF0aW9uczsgaSsrKSB7XG4gICAgICAgIF9sb29wKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb2xvcnMgPSBiYXNlO1xuICB9XG4gIHJldHVybiBjb2xvcnM7XG59O1xuXG4vKipcbiAqIENvbG9yIGJsaW5kIHBhbGV0dGUgd2l0aCB0ZXh0IGlzIG1lYW50IGZvciB1c2Ugd2hlbiB0ZXh0IGlzIGFwcGxpZWQgb24gdG9wIG9mIHRoZSBjb2xvci5cbiAqIEl0IGluY3JlYXNlcyB0aGUgYnJpZ2h0bmVzcyBvZiB0aGUgY29sb3IgdG8gZ2l2ZSB0aGUgdGV4dCBtb3JlIGNvbnRyYXN0LlxuICovXG5leHBvcnQgdmFyIGV1aVBhbGV0dGVDb2xvckJsaW5kQmVoaW5kVGV4dCA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVDb2xvckJsaW5kQmVoaW5kVGV4dCgpIHtcbiAgdmFyIHBhbGV0dGVQcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciBvcmlnaW5hbFBhbGV0dGUgPSBldWlQYWxldHRlQ29sb3JCbGluZChwYWxldHRlUHJvcHMpO1xuICB2YXIgbmV3UGFsZXR0ZSA9IG9yaWdpbmFsUGFsZXR0ZS5tYXAoZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgcmV0dXJuIGNocm9tYShjb2xvcikuYnJpZ2h0ZW4oMC41KS5oZXgoKTtcbiAgfSk7XG4gIHJldHVybiBuZXdQYWxldHRlO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUZvckxpZ2h0QmFja2dyb3VuZCA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVGb3JMaWdodEJhY2tncm91bmQoKSB7XG4gIHJldHVybiBbJyMwMDZCQjQnLCAnIzAxN0Q3MycsICcjRjVBNzAwJywgJyNCRDI3MUUnLCAnI0REMEE3MyddO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUZvckRhcmtCYWNrZ3JvdW5kID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUZvckRhcmtCYWNrZ3JvdW5kKCkge1xuICByZXR1cm4gWycjMUJBOUY1JywgJyM3REUyRDEnLCAnI0Y5OTBDMCcsICcjRjY2JywgJyNGRkNFN0EnXTtcbn07XG52YXIgZ3JlZW5Db2xvciA9ICcjMjA5MjgwJztcbnZhciByZWRDb2xvciA9ICcjQ0M1NjQyJztcbnZhciBsaWdodFJlZENvbG9yID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs5XTtcbnZhciBjb29sQXJyYXkgPSBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVsxXSwgJyM2MDkyQzAnXTtcbnZhciB3YXJtQXJyYXkgPSBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs3XSwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs5XV07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVGb3JTdGF0dXMgPSBmdW5jdGlvbiBldWlQYWxldHRlRm9yU3RhdHVzKHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbZ3JlZW5Db2xvcl07XG4gIH1cbiAgaWYgKHN0ZXBzIDw9IDMpIHtcbiAgICByZXR1cm4gZXVpUGFsZXR0ZShbZ3JlZW5Db2xvciwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs1XSwgcmVkQ29sb3JdLCBzdGVwcywgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW2dyZWVuQ29sb3IsIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbMF0sIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbNV0sIGxpZ2h0UmVkQ29sb3IsIHJlZENvbG9yXSwgc3RlcHMsIHRydWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUZvclRlbXBlcmF0dXJlID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUZvclRlbXBlcmF0dXJlKHN0ZXBzKSB7XG4gIHZhciBjb29scyA9IGNvbG9yUGFsZXR0ZShbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNvb2xBcnJheS5zbGljZSgpLnJldmVyc2UoKSksIFsnI0VCRUZGNSddKSwgMyk7XG4gIHZhciB3YXJtcyA9IGNvbG9yUGFsZXR0ZShbJyNGNEYzREInXS5jb25jYXQod2FybUFycmF5KSwgMyk7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbY29vbHNbMF1dO1xuICB9IGVsc2UgaWYgKHN0ZXBzIDw9IDMpIHtcbiAgICByZXR1cm4gZXVpUGFsZXR0ZShbY29vbHNbMF0sIGxpZ2h0UmVkQ29sb3JdLCBzdGVwcywgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjb29scyksIF90b0NvbnN1bWFibGVBcnJheSh3YXJtcykpLCBzdGVwcywgdHJ1ZSk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlQ29tcGxlbWVudGFyeSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVDb21wbGVtZW50YXJ5KHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVsxXV07XG4gIH1cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW2V1aVBhbGV0dGVDb2xvckJsaW5kKClbMV0sIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbN11dLCBzdGVwcywgdHJ1ZSk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlUmVkID0gZnVuY3Rpb24gZXVpUGFsZXR0ZVJlZChzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2xpZ2h0UmVkQ29sb3JdO1xuICB9XG4gIHJldHVybiBldWlQYWxldHRlKFsnd2hpdGUnLCByZWRDb2xvcl0sIHN0ZXBzKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVHcmVlbiA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVHcmVlbihzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2V1aVBhbGV0dGVDb2xvckJsaW5kKClbMF1dO1xuICB9XG4gIHJldHVybiBldWlQYWxldHRlKFsnd2hpdGUnLCBncmVlbkNvbG9yXSwgc3RlcHMpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvb2wgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29vbChzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2Nvb2xBcnJheVsxXV07XG4gIH1cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWyd3aGl0ZSddLmNvbmNhdChjb29sQXJyYXkpLCBzdGVwcyk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlV2FybSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVXYXJtKHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbbGlnaHRSZWRDb2xvcl07XG4gIH1cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWycjRkJGQkRDJ10uY29uY2F0KHdhcm1BcnJheSksIHN0ZXBzKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVHcmF5ID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUdyYXkoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFsnIzk4YTJiMyddO1xuICB9XG4gIHJldHVybiBldWlQYWxldHRlKFsnd2hpdGUnLCAnI2QzZGFlNicsICcjOThhMmIzJywgJyM2OTcwN2QnLCAnIzM0Mzc0MSddLCBzdGVwcywgZmFsc2UpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsgaXNWYWxpZEhleCB9IGZyb20gJy4vaXNfdmFsaWRfaGV4JztcbnZhciBpbk9yaWdpbmFsRm9ybWF0ID0gZnVuY3Rpb24gaW5PcmlnaW5hbEZvcm1hdChvcmlnaW5hbENvbG9yLCBuZXdDb2xvcikge1xuICByZXR1cm4gaXNWYWxpZEhleChvcmlnaW5hbENvbG9yKSA/IG5ld0NvbG9yLmhleCgpIDogbmV3Q29sb3IuY3NzKCk7XG59O1xuXG4vKipcbiAqIE1ha2VzIGEgY29sb3IgbW9yZSB0cmFuc3BhcmVudC5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbHBoYSAtIGFscGhhIGNoYW5uZWwgdmFsdWUuIEZyb20gMC0xLlxuICovXG5leHBvcnQgdmFyIHRyYW5zcGFyZW50aXplID0gZnVuY3Rpb24gdHJhbnNwYXJlbnRpemUoY29sb3IsIGFscGhhKSB7XG4gIHJldHVybiBjaHJvbWEoY29sb3IpLmFscGhhKGFscGhhKS5jc3MoKTtcbn07XG5cbi8qKlxuICogTWl4ZXMgYSBwcm92aWRlZCBjb2xvciB3aXRoIHdoaXRlLlxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWl4IHdpdGggd2hpdGVcbiAqIEBwYXJhbSByYXRpbyAtIE1peCB3ZWlnaHQuIEZyb20gMC0xLiBMYXJnZXIgdmFsdWUgaW5kaWNhdGVzIG1vcmUgd2hpdGUuXG4gKi9cbmV4cG9ydCB2YXIgdGludCA9IGZ1bmN0aW9uIHRpbnQoY29sb3IsIHJhdGlvKSB7XG4gIHZhciB0aW50ID0gY2hyb21hLm1peChjb2xvciwgJyNmZmYnLCByYXRpbywgJ3JnYicpO1xuICByZXR1cm4gaW5PcmlnaW5hbEZvcm1hdChjb2xvciwgdGludCk7XG59O1xuXG4vKipcbiAqIE1peGVzIGEgcHJvdmlkZWQgY29sb3Igd2l0aCBibGFjay5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1peCB3aXRoIGJsYWNrXG4gKiBAcGFyYW0gcmF0aW8gLSBNaXggd2VpZ2h0LiBGcm9tIDAtMS4gTGFyZ2VyIHZhbHVlIGluZGljYXRlcyBtb3JlIGJsYWNrLlxuICovXG5leHBvcnQgdmFyIHNoYWRlID0gZnVuY3Rpb24gc2hhZGUoY29sb3IsIHJhdGlvKSB7XG4gIHZhciBzaGFkZSA9IGNocm9tYS5taXgoY29sb3IsICcjMDAwJywgcmF0aW8sICdyZ2InKTtcbiAgcmV0dXJuIGluT3JpZ2luYWxGb3JtYXQoY29sb3IsIHNoYWRlKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdGludGVkIGNvbG9yIGZvciBsaWdodCBtb2RlIGFuZCBzaGFkZWQgY29sb3IgZm9yIGRhcmsgbW9kZVxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWl4IHdpdGggd2hpdGVcbiAqIEBwYXJhbSByYXRpbyAtIE1peCB3ZWlnaHQuIEZyb20gMC0xLiBMYXJnZXIgdmFsdWUgaW5kaWNhdGVzIG1vcmUgd2hpdGUuXG4gKiBAcGFyYW0gY29sb3JNb2RlIC0gTGlnaHQgb3IgZGFyayBvbmx5XG4gKi9cbmV4cG9ydCB2YXIgdGludE9yU2hhZGUgPSBmdW5jdGlvbiB0aW50T3JTaGFkZShjb2xvciwgcmF0aW8sIGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShjb2xvciwgcmF0aW8pIDogdGludChjb2xvciwgcmF0aW8pO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzaGFkZWQgY29sb3IgZm9yIGxpZ2h0IG1vZGUgYW5kIHRpbnRlZCBjb2xvciBmb3IgZGFyayBtb2RlXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtaXggd2l0aCB3aGl0ZVxuICogQHBhcmFtIHJhdGlvIC0gTWl4IHdlaWdodC4gRnJvbSAwLTEuIExhcmdlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSB3aGl0ZS5cbiAqIEBwYXJhbSBjb2xvck1vZGUgLSBMaWdodCBvciBkYXJrIG9ubHlcbiAqL1xuZXhwb3J0IHZhciBzaGFkZU9yVGludCA9IGZ1bmN0aW9uIHNoYWRlT3JUaW50KGNvbG9yLCByYXRpbywgY29sb3JNb2RlKSB7XG4gIHJldHVybiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHRpbnQoY29sb3IsIHJhdGlvKSA6IHNoYWRlKGNvbG9yLCByYXRpbyk7XG59O1xuXG4vKipcbiAqIEluY3JlYXNlcyB0aGUgc2F0dXJhdGlvbiBvZiBhIGNvbG9yIGJ5IG1hbmlwdWxhdGluZyB0aGUgaHNsIHNhdHVyYXRpb24uXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gYW1vdW50IC0gQW1vdW50IHRvIGNoYW5nZSBpbiBhYnNvbHV0ZSB0ZXJtcy4gMC0xLlxuICovXG5leHBvcnQgdmFyIHNhdHVyYXRlID0gZnVuY3Rpb24gc2F0dXJhdGUoY29sb3IsIGFtb3VudCkge1xuICB2YXIgc2F0dXJhdGUgPSBjaHJvbWEoY29sb3IpLnNldCgnaHNsLnMnLCBcIitcIi5jb25jYXQoYW1vdW50KSk7XG4gIHJldHVybiBpbk9yaWdpbmFsRm9ybWF0KGNvbG9yLCBzYXR1cmF0ZSk7XG59O1xuXG4vKipcbiAqIERlY3JlYXNlcyB0aGUgc2F0dXJhdGlvbiBvZiBhIGNvbG9yIGJ5IG1hbmlwdWxhdGluZyB0aGUgaHNsIHNhdHVyYXRpb24uXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gYW1vdW50IC0gQW1vdW50IHRvIGNoYW5nZSBpbiBhYnNvbHV0ZSB0ZXJtcy4gMC0xLlxuICovXG5leHBvcnQgdmFyIGRlc2F0dXJhdGUgPSBmdW5jdGlvbiBkZXNhdHVyYXRlKGNvbG9yLCBhbW91bnQpIHtcbiAgdmFyIGRlc2F0dXJhdGUgPSBjaHJvbWEoY29sb3IpLnNldCgnaHNsLnMnLCBcIi1cIi5jb25jYXQoYW1vdW50KSk7XG4gIHJldHVybiBpbk9yaWdpbmFsRm9ybWF0KGNvbG9yLCBkZXNhdHVyYXRlKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGlnaHRuZXNzIHZhbHVlIG9mIGEgY29sb3IuIDAtMTAwXG4gKiBAcGFyYW0gY29sb3JcbiAqL1xuZXhwb3J0IHZhciBsaWdodG5lc3MgPSBmdW5jdGlvbiBsaWdodG5lc3MoY29sb3IpIHtcbiAgcmV0dXJuIGNocm9tYShjb2xvcikuZ2V0KCdoc2wubCcpICogMTAwO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkYXJrZW4gdmFsdWUgb2YgYSBjb2xvci4gMC0xMDBcbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEuXG4gKi9cbmV4cG9ydCB2YXIgZGFya2VuID0gZnVuY3Rpb24gZGFya2VuKGNvbG9yLCBhbW91bnQpIHtcbiAgcmV0dXJuIGNocm9tYShjb2xvcikuZGFya2VuKGFtb3VudCkuaGV4KCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJyaWdodGVuIHZhbHVlIG9mIGEgY29sb3IuIDAtMTAwXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gYW1vdW50IC0gQW1vdW50IHRvIGNoYW5nZSBpbiBhYnNvbHV0ZSB0ZXJtcy4gMC0xLlxuICovXG5leHBvcnQgdmFyIGJyaWdodGVuID0gZnVuY3Rpb24gYnJpZ2h0ZW4oY29sb3IsIGFtb3VudCkge1xuICByZXR1cm4gY2hyb21hKGNvbG9yKS5icmlnaHRlbihhbW91bnQpLmhleCgpO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQsIGxpZ2h0bmVzcyBhcyBnZXRMaWdodG5lc3MgfSBmcm9tICcuL21hbmlwdWxhdGlvbic7XG5pbXBvcnQgeyBnZXRPbiB9IGZyb20gJy4uL3RoZW1lL3V0aWxzJztcbmV4cG9ydCB2YXIgd2NhZ0NvbnRyYXN0TWluID0gNC41OyAvLyBXQ0FHIEFBIG1pbmltdW0gY29udHJhc3QgcmF0aW8gZm9yIG5vcm1hbCAobm9uLWxhcmdlKSB0ZXh0XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBjb2xvciB0aGF0IG1lZXRzIG9yIGV4Y2VlZHMgV0NBRyBsZXZlbCBBQVxuICogQHBhcmFtIGZvcmVncm91bmQgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEwLlxuICogKlxuICogQHBhcmFtIHRoZW1lT3JCYWNrZ3JvdW5kIC0gQ29sb3IgdG8gdXNlIGFzIHRoZSBjb250cmFzdCBiYXNpcyBvciBqdXN0IHBhc3MgRXVpVGhlbWVcbiAqL1xuZXhwb3J0IHZhciBtYWtlSGlnaENvbnRyYXN0Q29sb3IgPSBmdW5jdGlvbiBtYWtlSGlnaENvbnRyYXN0Q29sb3IoX2ZvcmVncm91bmQpIHtcbiAgdmFyIHJhdGlvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiA0Ljg1O1xuICByZXR1cm4gZnVuY3Rpb24gKHRoZW1lT3JCYWNrZ3JvdW5kKSB7XG4gICAgdmFyIF9nZXRPbjtcbiAgICB2YXIgZm9yZWdyb3VuZCA9IF90eXBlb2YodGhlbWVPckJhY2tncm91bmQpID09PSAnb2JqZWN0JyA/IChfZ2V0T24gPSBnZXRPbih0aGVtZU9yQmFja2dyb3VuZCwgX2ZvcmVncm91bmQpKSAhPT0gbnVsbCAmJiBfZ2V0T24gIT09IHZvaWQgMCA/IF9nZXRPbiA6IF9mb3JlZ3JvdW5kIDogX2ZvcmVncm91bmQ7XG4gICAgdmFyIGJhY2tncm91bmQgPSBfdHlwZW9mKHRoZW1lT3JCYWNrZ3JvdW5kKSA9PT0gJ29iamVjdCcgPyB0aGVtZU9yQmFja2dyb3VuZC5jb2xvcnMuYm9keSA6IHRoZW1lT3JCYWNrZ3JvdW5kO1xuICAgIGlmIChjaHJvbWEoZm9yZWdyb3VuZCkuYWxwaGEoKSA8IDEgfHwgY2hyb21hKGJhY2tncm91bmQpLmFscGhhKCkgPCAxKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJDb250cmFzdCBjYW5ub3QgYmUgYWNjdXJhdGVseSBjYWxjdWxhdGVkIHdoZW4gY29sb3JzIGhhdmUgYWxwaGEgY2hhbm5lbCBvcGFjaXR5LiBNYWtlIHN1cmUgdGhlIHByb3ZpZGVkIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzIGhhdmUgbm8gdHJhbnNwYXJlbmN5OlxcblxcbkZvcmVncm91bmQ6IFwiLmNvbmNhdChmb3JlZ3JvdW5kLCBcIlxcbkJhY2tncm91bmQ6IFwiKS5jb25jYXQoYmFja2dyb3VuZCkpO1xuICAgIH1cbiAgICB2YXIgY29udHJhc3QgPSBjaHJvbWEuY29udHJhc3QoZm9yZWdyb3VuZCwgYmFja2dyb3VuZCk7XG5cbiAgICAvLyBEZXRlcm1pbmUgdGhlIGxpZ2h0bmVzcyBmYWN0b3Igb2YgdGhlIGJhY2tncm91bmQgY29sb3IgZmlyc3QgdG9cbiAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0byBzaGFkZSBvciB0aW50IHRoZSBmb3JlZ3JvdW5kLlxuICAgIHZhciBicmlnaHRuZXNzID0gZ2V0TGlnaHRuZXNzKGJhY2tncm91bmQpO1xuICAgIHZhciBoaWdoQ29udHJhc3RUZXh0Q29sb3IgPSBmb3JlZ3JvdW5kO1xuICAgIHdoaWxlIChjb250cmFzdCA8IHJhdGlvKSB7XG4gICAgICBpZiAoYnJpZ2h0bmVzcyA+IDUwKSB7XG4gICAgICAgIGhpZ2hDb250cmFzdFRleHRDb2xvciA9IHNoYWRlKGhpZ2hDb250cmFzdFRleHRDb2xvciwgMC4wNSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdoQ29udHJhc3RUZXh0Q29sb3IgPSB0aW50KGhpZ2hDb250cmFzdFRleHRDb2xvciwgMC4wNSk7XG4gICAgICB9XG4gICAgICBjb250cmFzdCA9IGNocm9tYS5jb250cmFzdChoaWdoQ29udHJhc3RUZXh0Q29sb3IsIGJhY2tncm91bmQpO1xuICAgICAgdmFyIGxpZ2h0bmVzcyA9IGdldExpZ2h0bmVzcyhoaWdoQ29udHJhc3RUZXh0Q29sb3IpO1xuICAgICAgaWYgKGxpZ2h0bmVzcyA8IDUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdIaWdoIGVub3VnaCBjb250cmFzdCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4gTW9zdCBsaWtlbHkgeW91ciBiYWNrZ3JvdW5kIGNvbG9yIGRvZXMgbm90IGFkanVzdCBmb3IgbGlnaHQgbW9kZS4nKTtcbiAgICAgICAgcmV0dXJuIGhpZ2hDb250cmFzdFRleHRDb2xvcjtcbiAgICAgIH1cbiAgICAgIGlmIChsaWdodG5lc3MgPiA5NSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0hpZ2ggZW5vdWdoIGNvbnRyYXN0IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLiBNb3N0IGxpa2VseSB5b3VyIGJhY2tncm91bmQgY29sb3IgZG9lcyBub3QgYWRqdXN0IGZvciBkYXJrIG1vZGUuJyk7XG4gICAgICAgIHJldHVybiBoaWdoQ29udHJhc3RUZXh0Q29sb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjaHJvbWEoaGlnaENvbnRyYXN0VGV4dENvbG9yKS5oZXgoKTtcbiAgfTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBjb2xvciB3aXRoIGluY3JlYXNlZCBjb250cmFzdFxuICogRGlzYWJsZWQgY29udGVudCBvbmx5IG5lZWRzIGEgY29udHJhc3Qgb2YgYXQgbGVhc3QgMiBiZWNhdXNlIHRoZXJlIGlzIG5vIGludGVyYWN0aW9uIGF2YWlsYWJsZVxuICogQHBhcmFtIGZvcmVncm91bmQgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEwLlxuICogKlxuICogQHBhcmFtIHRoZW1lT3JCYWNrZ3JvdW5kIC0gQ29sb3IgdG8gdXNlIGFzIHRoZSBjb250cmFzdCBiYXNpc1xuICovXG5leHBvcnQgdmFyIG1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IgPSBmdW5jdGlvbiBtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yKGNvbG9yKSB7XG4gIHZhciByYXRpbyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMjtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGVtZU9yQmFja2dyb3VuZCkge1xuICAgIHJldHVybiBtYWtlSGlnaENvbnRyYXN0Q29sb3IoY29sb3IsIHJhdGlvKSh0aGVtZU9yQmFja2dyb3VuZCk7XG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgc2hhZGUsIHRpbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9jb2xvcic7XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IG1ha2VIaWdoQ29udHJhc3RDb2xvciwgbWFrZURpc2FibGVkQ29udHJhc3RDb2xvciB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2NvbG9yL2NvbnRyYXN0Jztcbi8qXG4gKiBMSUdIVCBUSEVNRVxuICogT25seSBzcGxpdCB1cCBpbiB0aGUgbGlnaHQgdGhlbWUgdG8gYWNjZXNzIHRoZSBrZXlzIGJ5IHNlY3Rpb24gaW4gdGhlIGRvY3NcbiAqL1xuXG5leHBvcnQgdmFyIGJyYW5kX2NvbG9ycyA9IHtcbiAgcHJpbWFyeTogJyMwN0MnLFxuICBhY2NlbnQ6ICcjRjA0RTk4JyxcbiAgc3VjY2VzczogJyMwMEJGQjMnLFxuICB3YXJuaW5nOiAnI0ZFQzUxNCcsXG4gIGRhbmdlcjogJyNCRDI3MUUnXG59O1xuZXhwb3J0IHZhciBicmFuZF90ZXh0X2NvbG9ycyA9IHtcbiAgcHJpbWFyeVRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLnByaW1hcnknKSksXG4gIGFjY2VudFRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLmFjY2VudCcpKSxcbiAgc3VjY2Vzc1RleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLnN1Y2Nlc3MnKSksXG4gIHdhcm5pbmdUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy53YXJuaW5nJykpLFxuICBkYW5nZXJUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kYW5nZXInKSlcbn07XG5leHBvcnQgdmFyIHNoYWRlX2NvbG9ycyA9IHtcbiAgZW1wdHlTaGFkZTogJyNGRkYnLFxuICBsaWdodGVzdFNoYWRlOiAnI0YxRjRGQScsXG4gIGxpZ2h0U2hhZGU6ICcjRDNEQUU2JyxcbiAgbWVkaXVtU2hhZGU6ICcjOThBMkIzJyxcbiAgZGFya1NoYWRlOiAnIzY5NzA3RCcsXG4gIGRhcmtlc3RTaGFkZTogJyMzNDM3NDEnLFxuICBmdWxsU2hhZGU6ICcjMDAwJ1xufTtcbmV4cG9ydCB2YXIgc3BlY2lhbF9jb2xvcnMgPSB7XG4gIGJvZHk6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMSksXG4gICAgICBsaWdodGVzdFNoYWRlID0gX3JlZjJbMF07XG4gICAgcmV0dXJuIHRpbnQobGlnaHRlc3RTaGFkZSwgMC40KTtcbiAgfSwgWydjb2xvcnMubGlnaHRlc3RTaGFkZSddKSxcbiAgaGlnaGxpZ2h0OiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMSksXG4gICAgICB3YXJuaW5nID0gX3JlZjRbMF07XG4gICAgcmV0dXJuIHRpbnQod2FybmluZywgMC45KTtcbiAgfSwgWydjb2xvcnMud2FybmluZyddKSxcbiAgZGlzYWJsZWQ6ICcjQUJCNEM0JyxcbiAgZGlzYWJsZWRUZXh0OiBjb21wdXRlZChtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yKCdjb2xvcnMuZGlzYWJsZWQnKSksXG4gIHNoYWRvdzogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgdmFyIGNvbG9ycyA9IF9yZWY1LmNvbG9ycztcbiAgICByZXR1cm4gY29sb3JzLmluaztcbiAgfSlcbn07XG5leHBvcnQgdmFyIHRleHRfY29sb3JzID0ge1xuICB0ZXh0OiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjYpIHtcbiAgICB2YXIgX3JlZjcgPSBfc2xpY2VkVG9BcnJheShfcmVmNiwgMSksXG4gICAgICBkYXJrZXN0U2hhZGUgPSBfcmVmN1swXTtcbiAgICByZXR1cm4gZGFya2VzdFNoYWRlO1xuICB9LCBbJ2NvbG9ycy5kYXJrZXN0U2hhZGUnXSksXG4gIHRpdGxlOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjgpIHtcbiAgICB2YXIgX3JlZjkgPSBfc2xpY2VkVG9BcnJheShfcmVmOCwgMSksXG4gICAgICB0ZXh0ID0gX3JlZjlbMF07XG4gICAgcmV0dXJuIHNoYWRlKHRleHQsIDAuNSk7XG4gIH0sIFsnY29sb3JzLnRleHQnXSksXG4gIHN1YmR1ZWRUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kYXJrU2hhZGUnKSksXG4gIGxpbms6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTApIHtcbiAgICB2YXIgX3JlZjExID0gX3NsaWNlZFRvQXJyYXkoX3JlZjEwLCAxKSxcbiAgICAgIHByaW1hcnlUZXh0ID0gX3JlZjExWzBdO1xuICAgIHJldHVybiBwcmltYXJ5VGV4dDtcbiAgfSwgWydjb2xvcnMucHJpbWFyeVRleHQnXSlcbn07XG5leHBvcnQgdmFyIGxpZ2h0X2NvbG9ycyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYnJhbmRfY29sb3JzKSwgc2hhZGVfY29sb3JzKSwgc3BlY2lhbF9jb2xvcnMpLCBicmFuZF90ZXh0X2NvbG9ycyksIHRleHRfY29sb3JzKTtcblxuLypcbiAqIERBUksgVEhFTUVcbiAqL1xuXG5leHBvcnQgdmFyIGRhcmtfc2hhZGVzID0ge1xuICBlbXB0eVNoYWRlOiAnIzFEMUUyNCcsXG4gIGxpZ2h0ZXN0U2hhZGU6ICcjMjUyNjJFJyxcbiAgbGlnaHRTaGFkZTogJyMzNDM3NDEnLFxuICBtZWRpdW1TaGFkZTogJyM1MzU5NjYnLFxuICBkYXJrU2hhZGU6ICcjOThBMkIzJyxcbiAgZGFya2VzdFNoYWRlOiAnI0Q0REFFNScsXG4gIGZ1bGxTaGFkZTogJyNGRkYnXG59O1xuZXhwb3J0IHZhciBkYXJrX2NvbG9yc19hbXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gIC8vIEJyYW5kXG4gIHByaW1hcnk6ICcjMzZBMkVGJyxcbiAgYWNjZW50OiAnI0Y2OEZCRScsXG4gIHN1Y2Nlc3M6ICcjN0RERUQ4JyxcbiAgd2FybmluZzogJyNGM0QzNzEnLFxuICBkYW5nZXI6ICcjRjg2QjYzJ1xufSwgZGFya19zaGFkZXMpLCB7fSwge1xuICAvLyBTcGVjaWFsXG4gIGJvZHk6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTIpIHtcbiAgICB2YXIgX3JlZjEzID0gX3NsaWNlZFRvQXJyYXkoX3JlZjEyLCAxKSxcbiAgICAgIGxpZ2h0ZXN0U2hhZGUgPSBfcmVmMTNbMF07XG4gICAgcmV0dXJuIHNoYWRlKGxpZ2h0ZXN0U2hhZGUsIDAuNDUpO1xuICB9LCBbJ2NvbG9ycy5saWdodGVzdFNoYWRlJ10pLFxuICBoaWdobGlnaHQ6ICcjMkUyRDI1JyxcbiAgZGlzYWJsZWQ6ICcjNTE1NzYxJyxcbiAgZGlzYWJsZWRUZXh0OiBjb21wdXRlZChtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yKCdjb2xvcnMuZGlzYWJsZWQnKSksXG4gIHNoYWRvdzogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYxNCkge1xuICAgIHZhciBjb2xvcnMgPSBfcmVmMTQuY29sb3JzO1xuICAgIHJldHVybiBjb2xvcnMuaW5rO1xuICB9KVxufSwgYnJhbmRfdGV4dF9jb2xvcnMpLCB7fSwge1xuICAvLyBUZXh0XG4gIHRleHQ6ICcjREZFNUVGJyxcbiAgdGl0bGU6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTUpIHtcbiAgICB2YXIgX3JlZjE2ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjE1LCAxKSxcbiAgICAgIHRleHQgPSBfcmVmMTZbMF07XG4gICAgcmV0dXJuIHRleHQ7XG4gIH0sIFsnY29sb3JzLnRleHQnXSksXG4gIHN1YmR1ZWRUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5tZWRpdW1TaGFkZScpKSxcbiAgbGluazogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYxNykge1xuICAgIHZhciBfcmVmMTggPSBfc2xpY2VkVG9BcnJheShfcmVmMTcsIDEpLFxuICAgICAgcHJpbWFyeVRleHQgPSBfcmVmMThbMF07XG4gICAgcmV0dXJuIHByaW1hcnlUZXh0O1xuICB9LCBbJ2NvbG9ycy5wcmltYXJ5VGV4dCddKVxufSk7XG5cbi8qXG4gKiBGVUxMXG4gKi9cblxuZXhwb3J0IHZhciBjb2xvcnMgPSB7XG4gIGdob3N0OiAnI0ZGRicsXG4gIGluazogJyMwMDAnLFxuICBMSUdIVDogbGlnaHRfY29sb3JzLFxuICBEQVJLOiBkYXJrX2NvbG9yc19hbXNcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciBhbmltYXRpb25fc3BlZWQgPSB7XG4gIGV4dHJhRmFzdDogJzkwbXMnLFxuICBmYXN0OiAnMTUwbXMnLFxuICBub3JtYWw6ICcyNTBtcycsXG4gIHNsb3c6ICczNTBtcycsXG4gIGV4dHJhU2xvdzogJzUwMG1zJ1xufTtcbmV4cG9ydCB2YXIgYW5pbWF0aW9uX2Vhc2UgPSB7XG4gIGJvdW5jZTogJ2N1YmljLWJlemllciguMzQsIDEuNjEsIC43LCAxKScsXG4gIHJlc2lzdGFuY2U6ICdjdWJpYy1iZXppZXIoLjY5NCwgLjA0ODIsIC4zMzUsIDEpJ1xufTtcbmV4cG9ydCB2YXIgYW5pbWF0aW9uID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhbmltYXRpb25fc3BlZWQpLCBhbmltYXRpb25fZWFzZSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgYnJlYWtwb2ludCA9IHtcbiAgeGw6IDEyMDAsXG4gIGw6IDk5MixcbiAgbTogNzY4LFxuICBzOiA1NzUsXG4gIHhzOiAwXG59OyIsICJ7XG4gIFwiaGVpZ2h0XCI6IFwiYmxvY2stc2l6ZVwiLFxuICBcIndpZHRoXCI6IFwiaW5saW5lLXNpemVcIixcbiAgXCJtYXgtaGVpZ2h0XCI6IFwibWF4LWJsb2NrLXNpemVcIixcbiAgXCJtYXgtd2lkdGhcIjogXCJtYXgtaW5saW5lLXNpemVcIixcbiAgXCJtaW4taGVpZ2h0XCI6IFwibWluLWJsb2NrLXNpemVcIixcbiAgXCJtaW4td2lkdGhcIjogXCJtaW4taW5saW5lLXNpemVcIixcbiAgXCJ0b3BcIjogXCJpbnNldC1ibG9jay1zdGFydFwiLFxuICBcInJpZ2h0XCI6IFwiaW5zZXQtaW5saW5lLWVuZFwiLFxuICBcImJvdHRvbVwiOiBcImluc2V0LWJsb2NrLWVuZFwiLFxuICBcImxlZnRcIjogXCJpbnNldC1pbmxpbmUtc3RhcnRcIixcbiAgXCJob3Jpem9udGFsXCI6IFwiaW5zZXQtaW5saW5lXCIsXG4gIFwidmVydGljYWxcIjogXCJpbnNldC1ibG9ja1wiLFxuICBcIm1hcmdpbi1sZWZ0XCI6IFwibWFyZ2luLWlubGluZS1zdGFydFwiLFxuICBcIm1hcmdpbi1yaWdodFwiOiBcIm1hcmdpbi1pbmxpbmUtZW5kXCIsXG4gIFwibWFyZ2luLXRvcFwiOiBcIm1hcmdpbi1ibG9jay1zdGFydFwiLFxuICBcIm1hcmdpbi1ib3R0b21cIjogXCJtYXJnaW4tYmxvY2stZW5kXCIsXG4gIFwibWFyZ2luLWhvcml6b250YWxcIjogXCJtYXJnaW4taW5saW5lXCIsXG4gIFwibWFyZ2luLXZlcnRpY2FsXCI6IFwibWFyZ2luLWJsb2NrXCIsXG4gIFwicGFkZGluZy1sZWZ0XCI6IFwicGFkZGluZy1pbmxpbmUtc3RhcnRcIixcbiAgXCJwYWRkaW5nLXJpZ2h0XCI6IFwicGFkZGluZy1pbmxpbmUtZW5kXCIsXG4gIFwicGFkZGluZy10b3BcIjogXCJwYWRkaW5nLWJsb2NrLXN0YXJ0XCIsXG4gIFwicGFkZGluZy1ib3R0b21cIjogXCJwYWRkaW5nLWJsb2NrLWVuZFwiLFxuICBcInBhZGRpbmctaG9yaXpvbnRhbFwiOiBcInBhZGRpbmctaW5saW5lXCIsXG4gIFwicGFkZGluZy12ZXJ0aWNhbFwiOiBcInBhZGRpbmctYmxvY2tcIixcbiAgXCJvdmVyZmxvdy14XCI6IFwib3ZlcmZsb3ctaW5saW5lXCIsXG4gIFwib3ZlcmZsb3cteVwiOiBcIm92ZXJmbG93LWJsb2NrXCIsXG4gIFwiYm9yZGVyLWhvcml6b250YWxcIjogXCJib3JkZXItaW5saW5lXCIsXG4gIFwiYm9yZGVyLWhvcml6b250YWwtY29sb3JcIjogXCJib3JkZXItaW5saW5lLWNvbG9yXCIsXG4gIFwiYm9yZGVyLWhvcml6b250YWwtd2lkdGhcIjogXCJib3JkZXItaW5saW5lLXdpZHRoXCIsXG4gIFwiYm9yZGVyLWhvcml6b250YWwtc3R5bGVcIjogXCJib3JkZXItaW5saW5lLXN0eWxlXCIsXG4gIFwiYm9yZGVyLXZlcnRpY2FsXCI6IFwiYm9yZGVyLWJsb2NrXCIsXG4gIFwiYm9yZGVyLXZlcnRpY2FsLWNvbG9yXCI6IFwiYm9yZGVyLWJsb2NrLWNvbG9yXCIsXG4gIFwiYm9yZGVyLXZlcnRpY2FsLXdpZHRoXCI6IFwiYm9yZGVyLWJsb2NrLXdpZHRoXCIsXG4gIFwiYm9yZGVyLXZlcnRpY2FsLXN0eWxlXCI6IFwiYm9yZGVyLWJsb2NrLXN0eWxlXCIsXG4gIFwiYm9yZGVyLWJvdHRvbVwiOiBcImJvcmRlci1ibG9jay1lbmRcIixcbiAgXCJib3JkZXItYm90dG9tLWNvbG9yXCI6IFwiYm9yZGVyLWJsb2NrLWVuZC1jb2xvclwiLFxuICBcImJvcmRlci1ib3R0b20tc3R5bGVcIjogXCJib3JkZXItYmxvY2stZW5kLXN0eWxlXCIsXG4gIFwiYm9yZGVyLWJvdHRvbS13aWR0aFwiOiBcImJvcmRlci1ibG9jay1lbmQtd2lkdGhcIixcbiAgXCJib3JkZXItdG9wXCI6IFwiYm9yZGVyLWJsb2NrLXN0YXJ0XCIsXG4gIFwiYm9yZGVyLXRvcC1jb2xvclwiOiBcImJvcmRlci1ibG9jay1zdGFydC1jb2xvclwiLFxuICBcImJvcmRlci10b3Atc3R5bGVcIjogXCJib3JkZXItYmxvY2stc3RhcnQtc3R5bGVcIixcbiAgXCJib3JkZXItdG9wLXdpZHRoXCI6IFwiYm9yZGVyLWJsb2NrLXN0YXJ0LXdpZHRoXCIsXG4gIFwiYm9yZGVyLXJpZ2h0XCI6IFwiYm9yZGVyLWlubGluZS1lbmRcIixcbiAgXCJib3JkZXItcmlnaHQtY29sb3JcIjogXCJib3JkZXItaW5saW5lLWVuZC1jb2xvclwiLFxuICBcImJvcmRlci1yaWdodC1zdHlsZVwiOiBcImJvcmRlci1pbmxpbmUtZW5kLXN0eWxlXCIsXG4gIFwiYm9yZGVyLXJpZ2h0LXdpZHRoXCI6IFwiYm9yZGVyLWlubGluZS1lbmQtd2lkdGhcIixcbiAgXCJib3JkZXItbGVmdFwiOiBcImJvcmRlci1pbmxpbmUtc3RhcnRcIixcbiAgXCJib3JkZXItbGVmdC1jb2xvclwiOiBcImJvcmRlci1pbmxpbmUtc3RhcnQtY29sb3JcIixcbiAgXCJib3JkZXItbGVmdC1zdHlsZVwiOiBcImJvcmRlci1pbmxpbmUtc3RhcnQtc3R5bGVcIixcbiAgXCJib3JkZXItbGVmdC13aWR0aFwiOiBcImJvcmRlci1pbmxpbmUtc3RhcnQtd2lkdGhcIixcbiAgXCJib3JkZXItdG9wLWxlZnQtcmFkaXVzXCI6IFwiYm9yZGVyLXN0YXJ0LXN0YXJ0LXJhZGl1c1wiLFxuICBcImJvcmRlci10b3AtcmlnaHQtcmFkaXVzXCI6IFwiYm9yZGVyLXN0YXJ0LWVuZC1yYWRpdXNcIixcbiAgXCJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzXCI6IFwiYm9yZGVyLWVuZC1zdGFydC1yYWRpdXNcIixcbiAgXCJib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1c1wiOiBcImJvcmRlci1lbmQtZW5kLXJhZGl1c1wiLFxuICBcIl9zaG9ydGhhbmRzXCI6IFtcbiAgICBcIm1hcmdpblwiLFxuICAgIFwic2Nyb2xsLW1hcmdpblwiLFxuICAgIFwicGFkZGluZ1wiLFxuICAgIFwic2Nyb2xsLXBhZGRpbmdcIixcbiAgICBcImluc2V0XCIsXG4gICAgXCJib3JkZXItY29sb3JcIixcbiAgICBcImJvcmRlci13aWR0aFwiLFxuICAgIFwiYm9yZGVyLXN0eWxlXCIsXG4gICAgXCJib3JkZXItcmFkaXVzXCJcbiAgXVxufVxuIiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgTE9HSUNBTFMgZnJvbSAnLi9sb2dpY2Fscy5qc29uJztcblxuLyoqXG4gKiBFVUkgdXRpbGl6ZXMgbG9naWNhbCBDU1MgcHJvcGVydGllcyB0byBlbmFibGUgZGlyZWN0aW9uYWwgd3JpdGluZy1tb2Rlcy5cbiAqIFRvIGVuY291cmFnZSB1c2Ugb2YgbG9naWNhbCBwcm9wZXJ0aWVzLCB3ZSBwcm92aWRlIGEgZmV3IGhlbHBlciB1dGlsaXRpZXMgdG9cbiAqIGNvbnZlcnQgY2VydGFpbiBkaXJlY3Rpb25hbCBwcm9wZXJ0aWVzIHRvIGxvZ2ljYWwgcHJvcGVydGllcy5cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9DU1NfTG9naWNhbF9Qcm9wZXJ0aWVzXG4gKi9cblxuZXhwb3J0IHZhciBsb2dpY2FsU2lkZSA9IHtcbiAgbGVmdDogJ2lubGluZS1zdGFydCcsXG4gIHJpZ2h0OiAnaW5saW5lLWVuZCcsXG4gIHRvcDogJ2Jsb2NrLXN0YXJ0JyxcbiAgYm90dG9tOiAnYmxvY2stZW5kJyxcbiAgaG9yaXpvbnRhbDogJ2lubGluZScsXG4gIHZlcnRpY2FsOiAnYmxvY2snXG59O1xuZXhwb3J0IHZhciBMT0dJQ0FMX1NJREVTID0ga2V5c09mKGxvZ2ljYWxTaWRlKTtcbmV4cG9ydCB2YXIgbG9naWNhbHMgPSBMT0dJQ0FMUztcbnZhciBfc2hvcnRoYW5kcyA9IExPR0lDQUxTLl9zaG9ydGhhbmRzLFxuICBfbG9naWNhbHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoTE9HSUNBTFMsIFtcIl9zaG9ydGhhbmRzXCJdKTtcbmV4cG9ydCB2YXIgTE9HSUNBTF9QUk9QRVJUSUVTID0ga2V5c09mKF9sb2dpY2Fscyk7XG4vKipcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIENTUyBsb2dpY2FsIHByb3BlcnR5XG4gKiBAcGFyYW0gdmFsdWUgU3RyaW5nIHRvIG91dHB1dCBhcyB0aGUgcHJvcGVydHkgdmFsdWVcbiAqIEByZXR1cm5zIGBzdHJpbmdgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnR5IHZlcnNpb24gZm9yIHRoZSBnaXZlbiBgcHJvcGVydHk6IHZhbHVlYCBwYWlyXG4gKi9cbmV4cG9ydCB2YXIgbG9naWNhbENTUyA9IGZ1bmN0aW9uIGxvZ2ljYWxDU1MocHJvcGVydHksIHZhbHVlKSB7XG4gIHJldHVybiBcIlwiLmNvbmNhdChsb2dpY2Fsc1twcm9wZXJ0eV0sIFwiOiBcIikuY29uY2F0KHZhbHVlLCBcIjtcIik7XG59O1xuXG4vKipcbiAqIFNvbWUgbG9naWNhbCBwcm9wZXJ0aWVzIGFyZSBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZCBieSBhbGwgYnJvd3NlcnMuXG4gKiBGb3IgdGhvc2UgY2FzZXMsIHdlIHNob3VsZCB1c2UgdGhlIG9sZCBwcm9wZXJ0eSBhcyBhIGZhbGxiYWNrIGZvclxuICogYnJvd3NlcnMgbWlzc2luZyBzdXBwb3J0LCB3aGlsZSBhbGxvd2luZyBzdXBwb3J0aW5nIGJyb3dzZXJzIHRvIHVzZVxuICogdGhlIGxvZ2ljYWwgcHJvcGVydGllcy5cbiAqXG4gKiBFeGFtcGxlczpcbiAqIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD1vdmVyZmxvdy1ibG9ja1xuICogaHR0cHM6Ly9jYW5pdXNlLmNvbS9tZG4tY3NzX3Byb3BlcnRpZXNfZmxvYXRfZmxvd19yZWxhdGl2ZV92YWx1ZXNcbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrID0gZnVuY3Rpb24gbG9naWNhbENTU1dpdGhGYWxsYmFjayhwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQocHJvcGVydHksIFwiOiBcIikuY29uY2F0KHZhbHVlLCBcIjtcXG4gIFwiKS5jb25jYXQobG9naWNhbENTUyhwcm9wZXJ0eSwgdmFsdWUpLCBcIlxcblwiKTtcbn07XG5cbi8qKlxuICogQ2FzaW5nIHV0aWxzIGZvciBzd2FwcGluZyBiZXR3ZWVuIGNhbWVsIGNhc2UgKHN0eWxlIG9ianMpIGFuZCBrZWJhYiBjYXNlIChDU1MpXG4gKi9cbnZhciBjYW1lbENhc2UgPSBmdW5jdGlvbiBjYW1lbENhc2Uoa2ViYWJDYXNlZFN0cmluZykge1xuICByZXR1cm4ga2ViYWJDYXNlZFN0cmluZy5yZXBsYWNlKC8tXFx3L2csIGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbn07XG52YXIga2ViYWJDYXNlID0gZnVuY3Rpb24ga2ViYWJDYXNlKGNhbWVsQ2FzZWRTdHJpbmcpIHtcbiAgcmV0dXJuIGNhbWVsQ2FzZWRTdHJpbmcucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxLSQyJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgQ1NTIGxvZ2ljYWwgcHJvcGVydHlcbiAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gb3V0cHV0IGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybnMgYG9iamVjdGAgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydHkgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGBwcm9wZXJ0eTogdmFsdWVgIHBhaXJcbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsU3R5bGUgPSBmdW5jdGlvbiBsb2dpY2FsU3R5bGUocHJvcGVydHksIHZhbHVlKSB7XG4gIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIGNhbWVsQ2FzZShsb2dpY2Fsc1twcm9wZXJ0eV0pLCB2YWx1ZSk7XG59O1xuXG4vKipcbiAqIEdpdmVuIGEgc3R5bGUgb2JqZWN0IHdpdGggYW55IGFtb3VudCBvZiB1bmtub3duIENTUyBwcm9wZXJ0aWVzLFxuICogZmluZCBvbmVzIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCB0byBsb2dpY2FsIHByb3BlcnRpZXMgYW5kIGNvbnZlcnQgdGhlbVxuICpcbiAqIEBwYXJhbSBzdHlsZU9iamVjdCAtIEEgUmVhY3Qgb2JqZWN0IG9mIGNhbWVsQ2FzZWQgc3R5bGVzXG4gKiBAcmV0dXJucyBgb2JqZWN0YFxuICovXG5leHBvcnQgdmFyIGxvZ2ljYWxTdHlsZXMgPSBmdW5jdGlvbiBsb2dpY2FsU3R5bGVzKHN0eWxlT2JqZWN0KSB7XG4gIHZhciBsb2dpY2FsU3R5bGVPYmplY3QgPSB7fTtcbiAgT2JqZWN0LmVudHJpZXMoc3R5bGVPYmplY3QpLmZvckVhY2goZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgdmFyIF9yZWYzID0gX3NsaWNlZFRvQXJyYXkoX3JlZjIsIDIpLFxuICAgICAga2V5ID0gX3JlZjNbMF0sXG4gICAgICB2YWx1ZSA9IF9yZWYzWzFdO1xuICAgIHZhciBjc3NQcm9wZXJ0eSA9IGtlYmFiQ2FzZShrZXkpO1xuICAgIGlmIChsb2dpY2Fscy5oYXNPd25Qcm9wZXJ0eShjc3NQcm9wZXJ0eSkpIHtcbiAgICAgIHZhciBsb2dpY2FsS2V5ID0gY2FtZWxDYXNlKGxvZ2ljYWxzW2Nzc1Byb3BlcnR5XSk7XG4gICAgICBsb2dpY2FsU3R5bGVPYmplY3RbbG9naWNhbEtleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9naWNhbFN0eWxlT2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbG9naWNhbFN0eWxlT2JqZWN0O1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHdpZHRoIEEgc3RyaW5nIHZhbHVlIGZvciB0aGUgTFRSIHdpZHRoXG4gKiBAcGFyYW0gaGVpZ2h0IEEgc3RyaW5nIHZhbHVlIGZvciB0aGUgTFRSIGhlaWdodFxuICogQHJldHVybnMgYHN0cmluZ2AgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydGllcyBmb3IgaGVpZ2h0IGFuZCB3aWR0aFxuICovXG5leHBvcnQgdmFyIGxvZ2ljYWxTaXplQ1NTID0gZnVuY3Rpb24gbG9naWNhbFNpemVDU1Mod2lkdGgpIHtcbiAgdmFyIGhlaWdodCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogd2lkdGg7XG4gIHJldHVybiBcIlxcbiAgICBcIi5jb25jYXQobG9naWNhbHMud2lkdGgsIFwiOiBcIikuY29uY2F0KHdpZHRoLCBcIjtcXG4gICAgXCIpLmNvbmNhdChsb2dpY2Fscy5oZWlnaHQsIFwiOiBcIikuY29uY2F0KGhlaWdodCwgXCI7XFxuICBcIik7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gd2lkdGggQSBzdHJpbmcgdmFsdWUgZm9yIHRoZSBMVFIgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQgQSBzdHJpbmcgdmFsdWUgZm9yIHRoZSBMVFIgaGVpZ2h0XG4gKiBAcmV0dXJucyBgb2JqZWN0YCBSZXR1cm5zIHRoZSBsb2dpY2FsIENTUyBwcm9wZXJ0aWVzIGZvciBoZWlnaHQgYW5kIHdpZHRoXG4gKi9cbmV4cG9ydCB2YXIgbG9naWNhbFNpemVTdHlsZSA9IGZ1bmN0aW9uIGxvZ2ljYWxTaXplU3R5bGUod2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBsb2dpY2FsU3R5bGUoJ3dpZHRoJywgd2lkdGgpKSwgbG9naWNhbFN0eWxlKCdoZWlnaHQnLCBoZWlnaHQpKTtcbn07XG5cbi8vIFRleHQgYWxpZ25tZW50IGlzIHNlcGFyYXRlIGJlY2F1c2UgaXRzIHRoZSB2YWx1ZSB0aGF0IGNoYW5nZXMgbm90IHRoZSBwcm9wZXJ0eVxuZXhwb3J0IHZhciBsb2dpY2FsVGV4dCA9IHtcbiAgJ3RleHQtYWxpZ24nOiB7XG4gICAgbGVmdDogJ3N0YXJ0JyxcbiAgICBjZW50ZXI6ICdjZW50ZXInLFxuICAgIHJpZ2h0OiAnZW5kJ1xuICB9XG59O1xuZXhwb3J0IHZhciBMT0dJQ0FMX1RFWFRfQUxJR05NRU5UID0ga2V5c09mKGxvZ2ljYWxUZXh0Wyd0ZXh0LWFsaWduJ10pO1xuLyoqXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IEEgc3RyaW5nIHRoYXQgaXMgYSB2YWxpZCBDU1MgbG9naWNhbCBwcm9wZXJ0eVxuICogQHBhcmFtIHZhbHVlIFN0cmluZyB0byBvdXRwdXQgYXMgdGhlIHByb3BlcnR5IHZhbHVlXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBSZXR1cm5zIHRoZSBsb2dpY2FsIENTUyBwcm9wZXJ0eSB2ZXJzaW9uIGZvciB0aGUgZ2l2ZW4gYHByb3BlcnR5OiB2YWx1ZWAgcGFpclxuICovXG5leHBvcnQgdmFyIGxvZ2ljYWxUZXh0QWxpZ25DU1MgPSBmdW5jdGlvbiBsb2dpY2FsVGV4dEFsaWduQ1NTKHZhbHVlKSB7XG4gIHJldHVybiBcInRleHQtYWxpZ246IFwiLmNvbmNhdChsb2dpY2FsVGV4dFsndGV4dC1hbGlnbiddW3ZhbHVlXSwgXCI7XCIpO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IEEgc3RyaW5nIHRoYXQgaXMgYSB2YWxpZCBDU1MgbG9naWNhbCBwcm9wZXJ0eVxuICogQHBhcmFtIHZhbHVlIFN0cmluZyB0byBvdXRwdXQgYXMgdGhlIHByb3BlcnR5IHZhbHVlXG4gKiBAcmV0dXJucyBgb2JqZWN0YCBSZXR1cm5zIHRoZSBsb2dpY2FsIENTUyBwcm9wZXJ0eSB2ZXJzaW9uIGZvciB0aGUgZ2l2ZW4gYHByb3BlcnR5OiB2YWx1ZWAgcGFpclxuICovXG5leHBvcnQgdmFyIGxvZ2ljYWxUZXh0QWxpZ25TdHlsZSA9IGZ1bmN0aW9uIGxvZ2ljYWxUZXh0QWxpZ25TdHlsZSh2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIHRleHRBbGlnbjogbG9naWNhbFRleHRbJ3RleHQtYWxpZ24nXVt2YWx1ZV1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IExPR0lDQUxTIGZyb20gJy4vbG9naWNhbHMuanNvbic7XG52YXIgTE9HSUNBTF9TSE9SVEhBTkRTID0gTE9HSUNBTFMuX3Nob3J0aGFuZHM7XG5leHBvcnQgeyBMT0dJQ0FMX1NIT1JUSEFORFMgfTtcbi8qKlxuICogVW5mb3J0dW5hdGVseSwgc2hvcnRoYW5kIHByb3BlcnRpZXMgdGhhdCBkZXNjcmliZSBib3hlc1xuICogKEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL1Nob3J0aGFuZF9wcm9wZXJ0aWVzI2VkZ2VzX29mX2FfYm94KVxuICogZG8gbm90IGN1cnJlbnRseSBhdXRvbWF0aWNhbGx5IHJlc3BvbmQgdG8gbG9naWNhbCBjaGFuZ2VzIGluIGRpc3BsYXkgZGlyZWN0aW9uXG4gKiAoQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1ZXMvMTI4MilcbiAqXG4gKiBUaGlzIHV0aWxpdHkgaXMgZXNzZW50aWFsbHkgYSBzdG9wLWdhcCBmb3IgdGhvc2Ugc2hvcnRoYW5kIHByb3BlcnRpZXMsXG4gKiBjb252ZXJ0aW5nIHRoZW0gdG8gY29ycmVzcG9uZGluZyBsb25nZXIgbG9naWNhbCBgLWlubGluZWAgYW5kIGAtYmxvY2tgIHByb3BlcnRpZXNcbiAqXG4gKiBcdUQ4M0RcdURERDEgTk9URTogVGhpcyBmaWxlIGlzIGluIGEgc2VwYXJhdGUgdXRpbCBmaWxlIGZyb20gbG9naWNhbHMudHMgZHVlIHRvIGl0cyByZWxhdGl2ZWx5XG4gKiBjb252b2x1dGVkIGxvZ2ljLCAmIHRvIG1ha2UgZGVsZXRpbmcgaXQgZWFzaWVyIHdoZW4gYW4gb2ZmaWNpYWwgQ1NTIHNwZWMgaXMgaW1wbGVtZW50ZWQuXG4gKi9cbmV4cG9ydCB2YXIgbG9naWNhbFNob3J0aGFuZENTUyA9IGZ1bmN0aW9uIGxvZ2ljYWxTaG9ydGhhbmRDU1MocHJvcGVydHksIHZhbHVlKSB7XG4gIGlmICghTE9HSUNBTF9TSE9SVEhBTkRTLmluY2x1ZGVzKHByb3BlcnR5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlwiLmNvbmNhdChwcm9wZXJ0eSwgXCIgaXMgbm90IGEgc2hvcnRoYW5kIHByb3BlcnR5IHRoYXQgbmVlZHMgbG9naWNhbCBDU1NcIikpO1xuICB9XG4gIGlmIChwcm9wZXJ0eSA9PT0gJ2JvcmRlci1yYWRpdXMnKSB7XG4gICAgcmV0dXJuIGxvZ2ljYWxCb3JkZXJSYWRpdXNDU1MoU3RyaW5nKHZhbHVlKSk7XG4gIH1cblxuICAvLyBTcGxpdCBhbGwgcG90ZW50aWFsIHZhbHVlcyBieSBzcGFjZXNcbiAgdmFyIHZhbHVlcyA9IFN0cmluZyh2YWx1ZSkuc3BsaXQoL1xccysvKTtcbiAgdmFyIHZlcnRpY2FsQmxvY2tWYWx1ZTtcbiAgdmFyIGhvcml6b250YWxJbmxpbmVWYWx1ZTtcbiAgc3dpdGNoICh2YWx1ZXMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgLy8gSWYgaXQncyB0aGUgc2FtZSB2YWx1ZSBhbGwgYXJvdW5kLCBubyBuZWVkIHRvIHVzZSBsb2dpY2FsIHByb3BlcnRpZXNcbiAgICAgIHJldHVybiBcIlwiLmNvbmNhdChwcm9wZXJ0eSwgXCI6IFwiKS5jb25jYXQodmFsdWUsIFwiO1wiKTtcbiAgICBjYXNlIDI6XG4gICAgICB2ZXJ0aWNhbEJsb2NrVmFsdWUgPSB2YWx1ZXNbMF07XG4gICAgICBob3Jpem9udGFsSW5saW5lVmFsdWUgPSB2YWx1ZXNbMV07XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2ZXJ0aWNhbEJsb2NrVmFsdWUgPSBcIlwiLmNvbmNhdCh2YWx1ZXNbMF0sIFwiIFwiKS5jb25jYXQodmFsdWVzWzJdKTtcbiAgICAgIGhvcml6b250YWxJbmxpbmVWYWx1ZSA9IHZhbHVlc1sxXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICBkZWZhdWx0OlxuICAgICAgdmVydGljYWxCbG9ja1ZhbHVlID0gXCJcIi5jb25jYXQodmFsdWVzWzBdLCBcIiBcIikuY29uY2F0KHZhbHVlc1syXSk7XG4gICAgICBob3Jpem9udGFsSW5saW5lVmFsdWUgPSBcIlwiLmNvbmNhdCh2YWx1ZXNbM10sIFwiIFwiKS5jb25jYXQodmFsdWVzWzFdKTsgLy8gTm90ZTogbGVmdCAoNHRoIHZhbHVlKSBjb21lcyBiZWZvcmUgcmlnaHQgKDJuZCB2YWx1ZSlcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmIChwcm9wZXJ0eS5pbmNsdWRlcygnYm9yZGVyLScpKSB7XG4gICAgLy8gQm9yZGVyIHByb3BlcnRpZXMgaGF2ZSBhIGRpZmZlcmVudCBuYW1pbmcgc3ludGF4IHRoYW4gbWFyZ2luL3BhZGRpbmcvZXRjXG4gICAgdmFyIGJvcmRlclByb3BlcnR5ID0gcHJvcGVydHkuc3BsaXQoJy0nKVsxXTtcbiAgICByZXR1cm4gXCJcXG4gICAgYm9yZGVyLWJsb2NrLVwiLmNvbmNhdChib3JkZXJQcm9wZXJ0eSwgXCI6IFwiKS5jb25jYXQodmVydGljYWxCbG9ja1ZhbHVlLCBcIjtcXG4gICAgYm9yZGVyLWlubGluZS1cIikuY29uY2F0KGJvcmRlclByb3BlcnR5LCBcIjogXCIpLmNvbmNhdChob3Jpem9udGFsSW5saW5lVmFsdWUsIFwiO1xcbiAgICBcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiXFxuICAgIFwiLmNvbmNhdChwcm9wZXJ0eSwgXCItYmxvY2s6IFwiKS5jb25jYXQodmVydGljYWxCbG9ja1ZhbHVlLCBcIjtcXG4gICAgXCIpLmNvbmNhdChwcm9wZXJ0eSwgXCItaW5saW5lOiBcIikuY29uY2F0KGhvcml6b250YWxJbmxpbmVWYWx1ZSwgXCI7XFxuICAgIFwiKTtcbiAgfVxufTtcblxuLyoqXG4gKiBMb2dpY2FsIGJvcmRlciByYWRpdXMgaXMgdW5mb3J0dW5hdGVseSBhIHZlcnkgc3BlY2lhbCBjYXNlIGFzIGl0IGhhbmRsZXMgY29ybmVyc1xuICogYW5kIG5vdCBzaWRlcyAoQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvU2hvcnRoYW5kX3Byb3BlcnRpZXMjY29ybmVyc19vZl9hX2JveClcbiAqIGFuZCBkb2VzIG5vdCBoYXZlIGAtaW5saW5lYCBvciBgLWJsb2NrYCBzaG9ydGhhbmRzLlxuICpcbiAqIEl0IGFsc28gbmVlZHMgdG8gYWNjb3VudCBmb3IgYC9gIHN5bnRheCAoaG9yaXpvbnRhbCB2cyB2ZXJ0aWNhbCByYWRpaSlcbiAqIEBzZWUgaHR0cHM6Ly93d3cuc2l0ZXBvaW50LmNvbS9zZXR0aW5nLWNzczMtYm9yZGVyLXJhZGl1cy13aXRoLXNsYXNoLXN5bnRheC9cbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsQm9yZGVyUmFkaXVzQ1NTID0gZnVuY3Rpb24gbG9naWNhbEJvcmRlclJhZGl1c0NTUyh2YWx1ZSkge1xuICB2YXIgaWdub3JlWmVyb2VzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgdmFyIGJvcmRlclJhZGl1c01hcCA9IHtcbiAgICAnYm9yZGVyLXN0YXJ0LXN0YXJ0LXJhZGl1cyc6ICcnLFxuICAgICdib3JkZXItc3RhcnQtZW5kLXJhZGl1cyc6ICcnLFxuICAgICdib3JkZXItZW5kLWVuZC1yYWRpdXMnOiAnJyxcbiAgICAnYm9yZGVyLWVuZC1zdGFydC1yYWRpdXMnOiAnJ1xuICB9O1xuICB2YXIgdmFsdWVzID0gW107XG4gIGlmICh2YWx1ZS5pbmNsdWRlcygnLycpKSB7XG4gICAgdmFsdWVzID0gWycnLCAnJywgJycsICcnXTtcblxuICAgIC8vIFNwbGl0IGludG8gaG9yaXpvbnRhbCAmIHZlcnRpY2FsIHJhZGlpIHN0cmluZ3NcbiAgICB2YWx1ZS5zcGxpdCgnLycpLmZvckVhY2goZnVuY3Rpb24gKHJhZGlpQXhlcykge1xuICAgICAgdmFyIHJhZGlpID0gcmFkaWlBeGVzLnRyaW0oKS5zcGxpdCgvXFxzKy8pO1xuICAgICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKF8sIGkpIHtcbiAgICAgICAgLy8gQWRkIGEgc3BhY2UgYmV0d2VlbiB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgcmFkaXVzXG4gICAgICAgIHZhciBjb21iaW5lZFZhbHVlID0gdmFsdWVzW2ldID8gXCJcIi5jb25jYXQodmFsdWVzW2ldLCBcIiBcIikgOiB2YWx1ZXNbaV07XG4gICAgICAgIHN3aXRjaCAocmFkaWkubGVuZ3RoKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgLy8gRXZlcnkgdmFsdWUgaXMgcmVwZWF0ZWRcbiAgICAgICAgICAgIGNvbWJpbmVkVmFsdWUgKz0gcmFkaWlbMF07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAvLyBJZiB0aGUgY29ybmVyIGlzIGFuIGV2ZW4gaW5kZXgsIGdpdmUgaXQgdGhlIGZpcnN0IHZhbHVlLCBpZiBvZGQsIHNlY29uZCB2YWx1ZVxuICAgICAgICAgICAgY29tYmluZWRWYWx1ZSArPSBpICUgMiA/IHJhZGlpWzFdIDogcmFkaWlbMF07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAvLyBUaGUgbGFzdCBjb3JuZXIgc2hvdWxkIHJlcGVhdCB0aGUgc2Vjb25kIHZhbHVlXG4gICAgICAgICAgICBjb21iaW5lZFZhbHVlICs9IGkgPT09IDMgPyByYWRpaVsxXSA6IHJhZGlpW2ldO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBFdmVyeSB2YWx1ZSBpcyBzcGVjaWZpZWRcbiAgICAgICAgICAgIGNvbWJpbmVkVmFsdWUgKz0gcmFkaWlbaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzW2ldID0gY29tYmluZWRWYWx1ZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlcyA9IHZhbHVlLnNwbGl0KC9cXHMrLyk7XG4gIH1cbiAgc3dpdGNoICh2YWx1ZXMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgLy8gSWYgaXQncyB0aGUgc2FtZSB2YWx1ZSBhbGwgYXJvdW5kLCBubyBuZWVkIHRvIHVzZSBsb2dpY2FsIHByb3BlcnRpZXNcbiAgICAgIHJldHVybiBcImJvcmRlci1yYWRpdXM6IFwiLmNvbmNhdCh2YWx1ZSwgXCI7XCIpO1xuICAgIGNhc2UgMjpcbiAgICAgIGJvcmRlclJhZGl1c01hcFsnYm9yZGVyLXN0YXJ0LXN0YXJ0LXJhZGl1cyddID0gdmFsdWVzWzBdO1xuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItc3RhcnQtZW5kLXJhZGl1cyddID0gdmFsdWVzWzFdO1xuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItZW5kLWVuZC1yYWRpdXMnXSA9IHZhbHVlc1swXTtcbiAgICAgIGJvcmRlclJhZGl1c01hcFsnYm9yZGVyLWVuZC1zdGFydC1yYWRpdXMnXSA9IHZhbHVlc1sxXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIGJvcmRlclJhZGl1c01hcFsnYm9yZGVyLXN0YXJ0LXN0YXJ0LXJhZGl1cyddID0gdmFsdWVzWzBdO1xuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItc3RhcnQtZW5kLXJhZGl1cyddID0gdmFsdWVzWzFdO1xuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItZW5kLWVuZC1yYWRpdXMnXSA9IHZhbHVlc1syXTtcbiAgICAgIGJvcmRlclJhZGl1c01hcFsnYm9yZGVyLWVuZC1zdGFydC1yYWRpdXMnXSA9IHZhbHVlc1sxXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICBkZWZhdWx0OlxuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItc3RhcnQtc3RhcnQtcmFkaXVzJ10gPSB2YWx1ZXNbMF07XG4gICAgICBib3JkZXJSYWRpdXNNYXBbJ2JvcmRlci1zdGFydC1lbmQtcmFkaXVzJ10gPSB2YWx1ZXNbMV07XG4gICAgICBib3JkZXJSYWRpdXNNYXBbJ2JvcmRlci1lbmQtZW5kLXJhZGl1cyddID0gdmFsdWVzWzJdO1xuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItZW5kLXN0YXJ0LXJhZGl1cyddID0gdmFsdWVzWzNdO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgdmFyIGJvcmRlclJhZGl1c0NTUyA9IFtdO1xuICBPYmplY3QuZW50cmllcyhib3JkZXJSYWRpdXNNYXApLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKSxcbiAgICAgIHByb3BlcnR5ID0gX3JlZjJbMF0sXG4gICAgICB2YWx1ZSA9IF9yZWYyWzFdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKGlnbm9yZVplcm9lcyAmJiB2YWx1ZSAhPT0gJzAnICYmIHZhbHVlICE9PSAnMHB4JyB8fCAhaWdub3JlWmVyb2VzKSB7XG4gICAgICAgIGJvcmRlclJhZGl1c0NTUy5wdXNoKFwiXCIuY29uY2F0KHByb3BlcnR5LCBcIjogXCIpLmNvbmNhdCh2YWx1ZSwgXCI7XCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYm9yZGVyUmFkaXVzQ1NTLmpvaW4oJ1xcbicpO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX3dyYXBSZWdFeHAoKSB7IF93cmFwUmVnRXhwID0gZnVuY3Rpb24gX3dyYXBSZWdFeHAoZSwgcikgeyByZXR1cm4gbmV3IEJhYmVsUmVnRXhwKGUsIHZvaWQgMCwgcik7IH07IHZhciBlID0gUmVnRXhwLnByb3RvdHlwZSwgciA9IG5ldyBXZWFrTWFwKCk7IGZ1bmN0aW9uIEJhYmVsUmVnRXhwKGUsIHQsIHApIHsgdmFyIG8gPSBSZWdFeHAoZSwgdCk7IHJldHVybiByLnNldChvLCBwIHx8IHIuZ2V0KGUpKSwgX3NldFByb3RvdHlwZU9mKG8sIEJhYmVsUmVnRXhwLnByb3RvdHlwZSk7IH0gZnVuY3Rpb24gYnVpbGRHcm91cHMoZSwgdCkgeyB2YXIgcCA9IHIuZ2V0KHQpOyByZXR1cm4gT2JqZWN0LmtleXMocCkucmVkdWNlKGZ1bmN0aW9uIChyLCB0KSB7IHZhciBvID0gcFt0XTsgaWYgKFwibnVtYmVyXCIgPT0gdHlwZW9mIG8pIHJbdF0gPSBlW29dO2Vsc2UgeyBmb3IgKHZhciBpID0gMDsgdm9pZCAwID09PSBlW29baV1dICYmIGkgKyAxIDwgby5sZW5ndGg7KSBpKys7IHJbdF0gPSBlW29baV1dOyB9IHJldHVybiByOyB9LCBPYmplY3QuY3JlYXRlKG51bGwpKTsgfSByZXR1cm4gX2luaGVyaXRzKEJhYmVsUmVnRXhwLCBSZWdFeHApLCBCYWJlbFJlZ0V4cC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uIChyKSB7IHZhciB0ID0gZS5leGVjLmNhbGwodGhpcywgcik7IGlmICh0KSB7IHQuZ3JvdXBzID0gYnVpbGRHcm91cHModCwgdGhpcyk7IHZhciBwID0gdC5pbmRpY2VzOyBwICYmIChwLmdyb3VwcyA9IGJ1aWxkR3JvdXBzKHAsIHRoaXMpKTsgfSByZXR1cm4gdDsgfSwgQmFiZWxSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5yZXBsYWNlXSA9IGZ1bmN0aW9uICh0LCBwKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiBwKSB7IHZhciBvID0gci5nZXQodGhpcyk7IHJldHVybiBlW1N5bWJvbC5yZXBsYWNlXS5jYWxsKHRoaXMsIHQsIHAucmVwbGFjZSgvXFwkPChbXj5dKyk+L2csIGZ1bmN0aW9uIChlLCByKSB7IHZhciB0ID0gb1tyXTsgcmV0dXJuIFwiJFwiICsgKEFycmF5LmlzQXJyYXkodCkgPyB0LmpvaW4oXCIkXCIpIDogdCk7IH0pKTsgfSBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBwKSB7IHZhciBpID0gdGhpczsgcmV0dXJuIGVbU3ltYm9sLnJlcGxhY2VdLmNhbGwodGhpcywgdCwgZnVuY3Rpb24gKCkgeyB2YXIgZSA9IGFyZ3VtZW50czsgcmV0dXJuIFwib2JqZWN0XCIgIT0gX3R5cGVvZihlW2UubGVuZ3RoIC0gMV0pICYmIChlID0gW10uc2xpY2UuY2FsbChlKSkucHVzaChidWlsZEdyb3VwcyhlLCBpKSksIHAuYXBwbHkodGhpcywgZSk7IH0pOyB9IHJldHVybiBlW1N5bWJvbC5yZXBsYWNlXS5jYWxsKHRoaXMsIHQsIHApOyB9LCBfd3JhcFJlZ0V4cC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBVdGlsaXR5IGZvciBwZXJmb3JtaW5nIG1hdGggY2FsbGJhY2tzIG9uIGEgc3RyaW5nIHdpdGggQ1NTIHVuaXRzXG4gKiBhbmQgcmV0dXJuaW5nIGEgc3RyaW5nIHdpdGggaXRzIHVuaXQgcHJlc2VydmVkLlxuICpcbiAqIEV4YW1wbGUgdXNhZ2U6XG4gKiBtYXRoV2l0aFVuaXRzKCc0cHgnLCAoeCkgPT4geCAvIDIpID0gJzJweCc7XG4gKiBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLnNpemUueHMsICh4KSA9PiB4ICsgMikgPSAnNnB4JztcbiAqIG1hdGhXaXRoVW5pdHMoW2V1aVRoZW1lLnNpemUubCwgZXVpVGhlbWUuc2l6ZS5zXSwgKHgsIHkpID0+IHggLSB5KSA9ICcxNnB4JztcbiAqL1xuLy8gVW5mb3J0dW5hdGVseSwgdGhpcyBpcyB0aGUgQ1NTUHJvcGVydGllc1tdIHR5cGUgdXNlZCBmb3Igc2V2ZXJhbCBldWlUaGVtZSB2YXJzXG5cbmV4cG9ydCB2YXIgbWF0aFdpdGhVbml0cyA9IGZ1bmN0aW9uIG1hdGhXaXRoVW5pdHModmFsdWVzLCBjYWxsYmFjaykge1xuICB2YXIgdW5pdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJyc7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB2YWx1ZXMgPSBbdmFsdWVzXTtcbiAgdmFyIGZvdW5kTnVtZXJpY1ZhbHVlcyA9IFtdO1xuICB2YXIgZm91bmRVbml0ID0gJyc7XG4gIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgX21hdGNoZXMkZ3JvdXBzLCBfbWF0Y2hlcyRncm91cHMyO1xuICAgICAgdmFyIHJlZ2V4ID0gLyojX19QVVJFX18qL193cmFwUmVnRXhwKC8oXFx4MkQ/W1xcZC5dKykoJXxbYS16QS1aXSopLywge1xuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgdW5pdDogMlxuICAgICAgfSk7XG4gICAgICB2YXIgbWF0Y2hlcyA9IHJlZ2V4LmV4ZWModmFsdWUpO1xuICAgICAgdmFyIG51bWVyaWNWYWx1ZSA9IE51bWJlcihtYXRjaGVzID09PSBudWxsIHx8IG1hdGNoZXMgPT09IHZvaWQgMCB8fCAoX21hdGNoZXMkZ3JvdXBzID0gbWF0Y2hlcy5ncm91cHMpID09PSBudWxsIHx8IF9tYXRjaGVzJGdyb3VwcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX21hdGNoZXMkZ3JvdXBzLnZhbHVlKTtcbiAgICAgIGlmICghaXNOYU4obnVtZXJpY1ZhbHVlKSkge1xuICAgICAgICBmb3VuZE51bWVyaWNWYWx1ZXMucHVzaChudW1lcmljVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2YWxpZCBudW1lcmljIHZhbHVlIGZvdW5kJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXVuaXQgJiYgbWF0Y2hlcyAhPT0gbnVsbCAmJiBtYXRjaGVzICE9PSB2b2lkIDAgJiYgKF9tYXRjaGVzJGdyb3VwczIgPSBtYXRjaGVzLmdyb3VwcykgIT09IG51bGwgJiYgX21hdGNoZXMkZ3JvdXBzMiAhPT0gdm9pZCAwICYmIF9tYXRjaGVzJGdyb3VwczIudW5pdCkge1xuICAgICAgICBpZiAoIWZvdW5kVW5pdCkge1xuICAgICAgICAgIGZvdW5kVW5pdCA9IG1hdGNoZXMuZ3JvdXBzLnVuaXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRVbml0ICE9PSBtYXRjaGVzLmdyb3Vwcy51bml0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBsZSB1bml0cyBmb3VuZC4gVXNlIGBjYWxjKClgIHRvIG1peCBhbmQgbWF0aCBtdWx0aXBsZSB1bml0IHR5cGVzIChlLmcuIGAlYCAmIGBweGApIGluc3RlYWQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgZm91bmROdW1lcmljVmFsdWVzLnB1c2godmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUgdHlwZSAtIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KGNhbGxiYWNrLmFwcGx5KHZvaWQgMCwgZm91bmROdW1lcmljVmFsdWVzKSkuY29uY2F0KHVuaXQgfHwgZm91bmRVbml0KTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYHB4YCB2YWx1ZSBiYXNlZCBvbiBhIHNjYWxlIG11bHRpcGxpZXJcbiAqIEBwYXJhbSBzY2FsZSAtIFRoZSBmb250IHNjYWxlIG11bHRpcGxpZXJcbiAqICpcbiAqIEBwYXJhbSB0aGVtZU9yQmFzZSAtIFRoZW1lIGJhc2UgdmFsdWVcbiAqICpcbiAqIEByZXR1cm5zIHN0cmluZyAtIFJlbSB1bml0IGFsaWduZWQgdG8gYmFzZWxpbmVcbiAqL1xuXG5leHBvcnQgdmFyIHNpemVUb1BpeGVsID0gZnVuY3Rpb24gc2l6ZVRvUGl4ZWwoKSB7XG4gIHZhciBzY2FsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogMTtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGVtZU9yQmFzZSkge1xuICAgIHZhciBiYXNlID0gX3R5cGVvZih0aGVtZU9yQmFzZSkgPT09ICdvYmplY3QnID8gdGhlbWVPckJhc2UuYmFzZSA6IHRoZW1lT3JCYXNlO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChiYXNlICogc2NhbGUsIFwicHhcIik7XG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi9sb2dpY2Fscyc7XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGZvbnQtc2l6ZSB2YWx1ZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgc2NhbGUga2V5XG4gKiBAcGFyYW0gc2NhbGUgLSBUaGUgZm9udCBzY2FsZSBrZXlcbiAqIEBwYXJhbSB0aGVtZSAtIFJlcXVpcmVzIHRoZSBgYmFzZWAgYW5kIGBmb250YCBrZXlzXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgLSBzZWUgX0ZvbnRTY2FsZU9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBzdHJpbmcgLSBDYWxjdWxhdGVkIGZvbnQtc2l6ZSB2YWx1ZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBldWlGb250U2l6ZUZyb21TY2FsZShzY2FsZSwgX3JlZikge1xuICB2YXIgYmFzZSA9IF9yZWYuYmFzZSxcbiAgICBmb250ID0gX3JlZi5mb250O1xuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgIF9yZWYyJHVuaXQgPSBfcmVmMi51bml0LFxuICAgIHVuaXQgPSBfcmVmMiR1bml0ID09PSB2b2lkIDAgPyBmb250LmRlZmF1bHRVbml0cyA6IF9yZWYyJHVuaXQsXG4gICAgY3VzdG9tU2NhbGUgPSBfcmVmMi5jdXN0b21TY2FsZTtcbiAgaWYgKHVuaXQgPT09ICdlbScpIHtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQoZm9udC5zY2FsZVtzY2FsZV0sIFwiZW1cIik7XG4gIH1cbiAgdmFyIG51bWVyYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW3NjYWxlXTtcbiAgaWYgKGN1c3RvbVNjYWxlKSBudW1lcmF0b3IgKj0gZm9udC5zY2FsZVtjdXN0b21TY2FsZV07XG4gIHZhciBkZW5vbWluYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW2ZvbnQuYm9keS5zY2FsZV07XG4gIHJldHVybiB1bml0ID09PSAncHgnID8gXCJcIi5jb25jYXQobnVtZXJhdG9yLCBcInB4XCIpIDogXCJcIi5jb25jYXQoKG51bWVyYXRvciAvIGRlbm9taW5hdG9yKS50b0ZpeGVkKDQpLCBcInJlbVwiKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsaW5lLWhlaWdodCB0byB0aGUgY2xvc2VzdCBtdWx0aXBsZSBvZiB0aGUgYmFzZWxpbmVcbiAqIEVYOiBBIHByb3BlciBsaW5lLWhlaWdodCBmb3IgdGV4dCBpcyAxLjUgdGltZXMgdGhlIGZvbnQtc2l6ZS5cbiAqICAgICBJZiBvdXIgYmFzZSBmb250IHNpemUgKGV1aUZvbnRTaXplKSBpcyAxNiwgYW5kIG91ciBiYXNlbGluZSBpcyA0LiBUbyBlbnN1cmUgdGhlXG4gKiAgICAgdGV4dCBzdGF5cyBvbiB0aGUgYmFzZWxpbmUsIHdlIHBhc3MgYSBtdWx0aXBsaWVyIHRvIGNhbGN1bGF0ZSBhIGxpbmUtaGVpZ2h0LlxuICogQHBhcmFtIHNjYWxlIC0gVGhlIGZvbnQgc2NhbGUga2V5XG4gKiBAcGFyYW0gdGhlbWUgLSBSZXF1aXJlcyB0aGUgYGJhc2VgIGFuZCBgZm9udGAga2V5c1xuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIC0gc2VlIF9Gb250U2NhbGVPcHRpb25zXG4gKlxuICogQHJldHVybnMgc3RyaW5nIC0gQ2FsY3VsYXRlZCBsaW5lLWhlaWdodCB2YWx1ZSBhbGlnbmVkIHRvIGJhc2VsaW5lXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV1aUxpbmVIZWlnaHRGcm9tQmFzZWxpbmUoc2NhbGUsIF9yZWYzKSB7XG4gIHZhciBiYXNlID0gX3JlZjMuYmFzZSxcbiAgICBmb250ID0gX3JlZjMuZm9udDtcbiAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fSxcbiAgICBfcmVmNCR1bml0ID0gX3JlZjQudW5pdCxcbiAgICB1bml0ID0gX3JlZjQkdW5pdCA9PT0gdm9pZCAwID8gZm9udC5kZWZhdWx0VW5pdHMgOiBfcmVmNCR1bml0LFxuICAgIGN1c3RvbVNjYWxlID0gX3JlZjQuY3VzdG9tU2NhbGU7XG4gIHZhciBiYXNlbGluZSA9IGZvbnQuYmFzZWxpbmUsXG4gICAgbGluZUhlaWdodE11bHRpcGxpZXIgPSBmb250LmxpbmVIZWlnaHRNdWx0aXBsaWVyO1xuICB2YXIgbnVtZXJhdG9yID0gYmFzZSAqIGZvbnQuc2NhbGVbc2NhbGVdO1xuICBpZiAoY3VzdG9tU2NhbGUpIG51bWVyYXRvciAqPSBmb250LnNjYWxlW2N1c3RvbVNjYWxlXTtcbiAgdmFyIGRlbm9taW5hdG9yID0gYmFzZSAqIGZvbnQuc2NhbGVbZm9udC5ib2R5LnNjYWxlXTtcbiAgdmFyIF9saW5lSGVpZ2h0TXVsdGlwbGllciA9IG51bWVyYXRvciA8PSBiYXNlID8gbGluZUhlaWdodE11bHRpcGxpZXIgOiBsaW5lSGVpZ2h0TXVsdGlwbGllciAqIDAuODMzO1xuICBpZiAodW5pdCA9PT0gJ2VtJykge1xuICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBsaW5lLWhlaWdodCB2aWEgYGVtYCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBhZ2FpbnN0IHRoZSBwaXhlbCBiYXNlbGluZSBncmlkO1xuICAgIC8vIHdlIHdpbGwgYXNzdW1lIHRoYXQgdHlwaWNhbGx5IGxhcmdlciBzY2FsZSBmb250LXNpemVzIHNob3VsZCBoYXZlIGEgc2hvcnRlciBsaW5lLWhlaWdodDtcbiAgICByZXR1cm4gX2xpbmVIZWlnaHRNdWx0aXBsaWVyLnRvRml4ZWQoNCkudG9TdHJpbmcoKTtcbiAgfVxuICB2YXIgcGl4ZWxWYWx1ZSA9IE1hdGguZmxvb3IoTWF0aC5yb3VuZChudW1lcmF0b3IgKiBfbGluZUhlaWdodE11bHRpcGxpZXIpIC8gYmFzZWxpbmUpICogYmFzZWxpbmU7XG4gIHJldHVybiB1bml0ID09PSAncHgnID8gXCJcIi5jb25jYXQocGl4ZWxWYWx1ZSwgXCJweFwiKSA6IFwiXCIuY29uY2F0KChwaXhlbFZhbHVlIC8gZGVub21pbmF0b3IpLnRvRml4ZWQoNCksIFwicmVtXCIpO1xufVxuXG4vKipcbiAqIFRleHQgd2VpZ2h0IHNoaWZ0aW5nXG4gKlxuICogV2hlbiBjaGFuZ2luZyB0aGUgZm9udC13ZWlnaHQgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBjb21wb25lbnQsXG4gKiB0aGlzIG1peGluIHdpbGwgZW5zdXJlIHRoYXQgdGhlIHNpemluZyBpcyBkZXBlbmRlbnQgb24gdGhlIGJvbGRlc3RcbiAqIHdlaWdodCBzbyBpdCBkb2Vzbid0IHNoaWZ0IHNpYmxpbmcgY29udGVudC5cbiAqL1xuZXhwb3J0IHZhciBldWlUZXh0U2hpZnQgPSBmdW5jdGlvbiBldWlUZXh0U2hpZnQoKSB7XG4gIHZhciBmb250V2VpZ2h0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnYm9sZCc7XG4gIHZhciBhdHRyaWJ1dGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdkYXRhLXRleHQnO1xuICB2YXIgZXVpVGhlbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIFwiXFxuICAmOjphZnRlciB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICBjb250ZW50OiBhdHRyKFwiLmNvbmNhdChhdHRyaWJ1dGUsIFwiKTtcXG4gICAgZm9udC13ZWlnaHQ6IFwiKS5jb25jYXQoZXVpVGhlbWUuZm9udC53ZWlnaHRbZm9udFdlaWdodF0sIFwiO1xcbiAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsIDApLCBcIlxcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICB9XCIpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgc2l6ZVRvUGl4ZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5leHBvcnQgdmFyIGJhc2UgPSAxNjtcbmV4cG9ydCB2YXIgc2l6ZSA9IHtcbiAgeHhzOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjEyNSkpLFxuICB4czogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4yNSkpLFxuICBzOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjUpKSxcbiAgbTogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC43NSkpLFxuICBiYXNlOiBjb21wdXRlZChzaXplVG9QaXhlbCgpKSxcbiAgbDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMS41KSksXG4gIHhsOiBjb21wdXRlZChzaXplVG9QaXhlbCgyKSksXG4gIHh4bDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMi41KSksXG4gIHh4eGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDMpKSxcbiAgeHh4eGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDQpKVxufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBzaXplVG9QaXhlbCB9IGZyb20gJy4uLy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmV4cG9ydCB2YXIgYm9yZGVyID0ge1xuICBjb2xvcjogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgIGxpZ2h0U2hhZGUgPSBfcmVmMlswXTtcbiAgICByZXR1cm4gbGlnaHRTaGFkZTtcbiAgfSwgWydjb2xvcnMubGlnaHRTaGFkZSddKSxcbiAgd2lkdGg6IHtcbiAgICB0aGluOiAnMXB4JyxcbiAgICB0aGljazogJzJweCdcbiAgfSxcbiAgcmFkaXVzOiB7XG4gICAgbWVkaXVtOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjM3NSkpLFxuICAgIHNtYWxsOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjI1KSlcbiAgfSxcbiAgdGhpbjogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgdmFyIF9yZWY0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjMsIDIpLFxuICAgICAgd2lkdGggPSBfcmVmNFswXSxcbiAgICAgIGNvbG9yID0gX3JlZjRbMV07XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHdpZHRoLnRoaW4sIFwiIHNvbGlkIFwiKS5jb25jYXQoY29sb3IpO1xuICB9LCBbJ2JvcmRlci53aWR0aCcsICdib3JkZXIuY29sb3InXSksXG4gIHRoaWNrOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICB2YXIgX3JlZjYgPSBfc2xpY2VkVG9BcnJheShfcmVmNSwgMiksXG4gICAgICB3aWR0aCA9IF9yZWY2WzBdLFxuICAgICAgY29sb3IgPSBfcmVmNlsxXTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQod2lkdGgudGhpY2ssIFwiIHNvbGlkIFwiKS5jb25jYXQoY29sb3IpO1xuICB9LCBbJ2JvcmRlci53aWR0aCcsICdib3JkZXIuY29sb3InXSksXG4gIGVkaXRhYmxlOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjcpIHtcbiAgICB2YXIgX3JlZjggPSBfc2xpY2VkVG9BcnJheShfcmVmNywgMiksXG4gICAgICB3aWR0aCA9IF9yZWY4WzBdLFxuICAgICAgY29sb3IgPSBfcmVmOFsxXTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQod2lkdGgudGhpY2ssIFwiIGRvdHRlZCBcIikuY29uY2F0KGNvbG9yKTtcbiAgfSwgWydib3JkZXIud2lkdGgnLCAnYm9yZGVyLmNvbG9yJ10pXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIGxldmVscyA9IHtcbiAgdG9hc3Q6IDkwMDAsXG4gIG1vZGFsOiA4MDAwLFxuICBtYXNrOiA2MDAwLFxuICBuYXZpZ2F0aW9uOiA2MDAwLFxuICBtZW51OiAyMDAwLFxuICBoZWFkZXI6IDEwMDAsXG4gIGZseW91dDogMTAwMCxcbiAgbWFza0JlbG93SGVhZGVyOiAxMDAwLFxuICBjb250ZW50OiAwXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG4vLyBUeXBvZ3JhcGhpYyBzY2FsZSAtLSBsb29zZWx5IGJhc2VkIG9uIE1ham9yIFRoaXJkICgxLjI1MClcbmV4cG9ydCB2YXIgZm9udFNjYWxlID0ge1xuICB4eHhzOiAwLjU2MjUsXG4gIHh4czogMC42ODc1LFxuICB4czogMC43NSxcbiAgczogMC44NzUsXG4gIG06IDEsXG4gIGw6IDEuMzc1LFxuICB4bDogMS42ODc1LFxuICB4eGw6IDIuMTI1XG59O1xuXG4vLyBGYW1pbGllcyAmIGJhc2UgZm9udCBzZXR0aW5nc1xuZXhwb3J0IHZhciBmb250QmFzZSA9IHtcbiAgZmFtaWx5OiBcIidJbnRlcicsIEJsaW5rTWFjU3lzdGVtRm9udCwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxuICBmYW1pbHlDb2RlOiBcIidSb2JvdG8gTW9ubycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcbiAgZmFtaWx5U2VyaWY6ICdHZW9yZ2lhLCBUaW1lcywgVGltZXMgTmV3IFJvbWFuLCBzZXJpZicsXG4gIC8vIENhcmVmdWwgdXNpbmcgbGlnYXR1cmVzLiBDb2RlIGVkaXRvcnMgbGlrZSBBQ0Ugd2lsbCBvZnRlbiBlcnJvciBiZWNhdXNlIG9mIHdpZHRoIGNhbGN1bGF0aW9uc1xuICBmZWF0dXJlU2V0dGluZ3M6IFwiJ2NhbHQnIDEsICdrZXJuJyAxLCAnbGlnYScgMVwiLFxuICBkZWZhdWx0VW5pdHM6ICdyZW0nLFxuICBiYXNlbGluZTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgIGJhc2UgPSBfcmVmMlswXTtcbiAgICByZXR1cm4gYmFzZSAvIDQ7XG4gIH0sIFsnYmFzZSddKSxcbiAgbGluZUhlaWdodE11bHRpcGxpZXI6IDEuNVxufTtcbmV4cG9ydCB2YXIgZm9udFdlaWdodCA9IHtcbiAgbGlnaHQ6IDMwMCxcbiAgcmVndWxhcjogNDAwLFxuICBtZWRpdW06IDUwMCxcbiAgc2VtaUJvbGQ6IDYwMCxcbiAgYm9sZDogNzAwXG59O1xuZXhwb3J0IHZhciBmb250ID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBmb250QmFzZSksIHt9LCB7XG4gIHNjYWxlOiBmb250U2NhbGUsXG4gIHdlaWdodDogZm9udFdlaWdodCxcbiAgYm9keToge1xuICAgIHNjYWxlOiAncycsXG4gICAgd2VpZ2h0OiAncmVndWxhcidcbiAgfSxcbiAgdGl0bGU6IHtcbiAgICB3ZWlnaHQ6ICdib2xkJ1xuICB9XG59KTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5pbXBvcnQgeyB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2NvbG9yL21hbmlwdWxhdGlvbic7XG5pbXBvcnQgeyBzaXplVG9QaXhlbCB9IGZyb20gJy4uLy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucy9zaXplJztcbmV4cG9ydCB2YXIgZm9jdXMgPSB7XG4gIC8vIEZvY3VzIHJpbmdcbiAgY29sb3I6ICdjdXJyZW50Q29sb3InLFxuICB3aWR0aDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4xMjUpKSxcbiAgLy8gRm9jdXMgYmFja2dyb3VuZFxuICB0cmFuc3BhcmVuY3k6IHtcbiAgICBMSUdIVDogMC4xLFxuICAgIERBUks6IDAuMlxuICB9LFxuICBiYWNrZ3JvdW5kQ29sb3I6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIGNvbG9ycyA9IF9yZWYuY29sb3JzLFxuICAgICAgZm9jdXMgPSBfcmVmLmZvY3VzO1xuICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZShjb2xvcnMucHJpbWFyeSwgZm9jdXMudHJhbnNwYXJlbmN5KTtcbiAgfSlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGJ1aWxkVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fY29sb3JzJztcbmltcG9ydCB7IGFuaW1hdGlvbiB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19hbmltYXRpb24nO1xuaW1wb3J0IHsgYnJlYWtwb2ludCB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19icmVha3BvaW50JztcbmltcG9ydCB7IGJhc2UsIHNpemUgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fc2l6ZSc7XG5pbXBvcnQgeyBib3JkZXIgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYm9yZGVycyc7XG5pbXBvcnQgeyBsZXZlbHMgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fbGV2ZWxzJztcbmltcG9ydCB7IGZvbnQgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fdHlwb2dyYXBoeSc7XG5pbXBvcnQgeyBmb2N1cyB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zdGF0ZXMnO1xuZXhwb3J0IHZhciBBTVNURVJEQU1fTkFNRV9LRVkgPSAnRVVJX1RIRU1FX0FNU1RFUkRBTSc7XG5leHBvcnQgdmFyIGV1aVRoZW1lQW1zdGVyZGFtID0ge1xuICBjb2xvcnM6IGNvbG9ycyxcbiAgYmFzZTogYmFzZSxcbiAgc2l6ZTogc2l6ZSxcbiAgYm9yZGVyOiBib3JkZXIsXG4gIGZvbnQ6IGZvbnQsXG4gIGFuaW1hdGlvbjogYW5pbWF0aW9uLFxuICBicmVha3BvaW50OiBicmVha3BvaW50LFxuICBsZXZlbHM6IGxldmVscyxcbiAgZm9jdXM6IGZvY3VzXG59O1xuZXhwb3J0IHZhciBFdWlUaGVtZUFtc3RlcmRhbSA9IGJ1aWxkVGhlbWUoZXVpVGhlbWVBbXN0ZXJkYW0sIEFNU1RFUkRBTV9OQU1FX0tFWSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbnZhciBwcm92aWRlcldhcm5pbmcgPSB1bmRlZmluZWQ7XG5leHBvcnQgdmFyIHNldEV1aURldlByb3ZpZGVyV2FybmluZyA9IGZ1bmN0aW9uIHNldEV1aURldlByb3ZpZGVyV2FybmluZyh3YXJuaW5nVHlwZSkge1xuICByZXR1cm4gcHJvdmlkZXJXYXJuaW5nID0gd2FybmluZ1R5cGU7XG59O1xuZXhwb3J0IHZhciBnZXRFdWlEZXZQcm92aWRlcldhcm5pbmcgPSBmdW5jdGlvbiBnZXRFdWlEZXZQcm92aWRlcldhcm5pbmcoKSB7XG4gIHJldHVybiBwcm92aWRlcldhcm5pbmc7XG59O1xuXG4vLyBOb3QgYSBwdWJsaWMgdG9wLWxldmVsIEVVSSBleHBvcnQsIGN1cnJlbnRseSBmb3IgaW50ZXJuYWwgdXNlXG5leHBvcnQgdmFyIGVtaXRFdWlQcm92aWRlcldhcm5pbmcgPSBmdW5jdGlvbiBlbWl0RXVpUHJvdmlkZXJXYXJuaW5nKHByb3ZpZGVyTWVzc2FnZSkge1xuICAvLyBIYW5kbGUgY2FsbGJhY2sgdHlwZXNcbiAgaWYgKHR5cGVvZiBwcm92aWRlcldhcm5pbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gcHJvdmlkZXJXYXJuaW5nKHByb3ZpZGVyTWVzc2FnZSk7XG4gIH1cbiAgLy8gSGFuZGxlIGxldmVsIHR5cGVzXG4gIHN3aXRjaCAocHJvdmlkZXJXYXJuaW5nKSB7XG4gICAgY2FzZSAnbG9nJzpcbiAgICAgIGNvbnNvbGUubG9nKHByb3ZpZGVyTWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd3YXJuJzpcbiAgICAgIGNvbnNvbGUud2Fybihwcm92aWRlck1lc3NhZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZXJyb3InOlxuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb3ZpZGVyTWVzc2FnZSk7XG4gICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG59OyIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZUNhY2hlIGZyb20gJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCB3ZWFrTWVtb2l6ZSBmcm9tICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCByZWdpc3RlclN0eWxlcywgaW5zZXJ0U3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5cbnZhciBpc0RldmVsb3BtZW50ID0gZmFsc2U7XG5cbnZhciBFbW90aW9uQ2FjaGVDb250ZXh0ID0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCggLy8gd2UncmUgZG9pbmcgdGhpcyB0byBhdm9pZCBwcmVjb25zdHJ1Y3QncyBkZWFkIGNvZGUgZWxpbWluYXRpb24gaW4gdGhpcyBvbmUgY2FzZVxuLy8gYmVjYXVzZSB0aGlzIG1vZHVsZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlXG4vLyBidXQgaXQncyBhbHNvIHJlcXVpcmVkIGluIHJlYWN0IG5hdGl2ZSBhbmQgc2ltaWxhciBlbnZpcm9ubWVudHMgc29tZXRpbWVzXG4vLyBhbmQgd2UgY291bGQgaGF2ZSBhIHNwZWNpYWwgYnVpbGQganVzdCBmb3IgdGhhdFxuLy8gYnV0IHRoaXMgaXMgbXVjaCBlYXNpZXIgYW5kIHRoZSBuYXRpdmUgcGFja2FnZXNcbi8vIG1pZ2h0IHVzZSBhIGRpZmZlcmVudCB0aGVtZSBjb250ZXh0IGluIHRoZSBmdXR1cmUgYW55d2F5XG50eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnID8gLyogI19fUFVSRV9fICovY3JlYXRlQ2FjaGUoe1xuICBrZXk6ICdjc3MnXG59KSA6IG51bGwpO1xuXG52YXIgQ2FjaGVQcm92aWRlciA9IEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXI7XG52YXIgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gdXNlRW1vdGlvbkNhY2hlKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcbn07XG5cbnZhciB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG52YXIgVGhlbWVDb250ZXh0ID0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdXRlclRoZW1lLCB0aGVtZSk7XG59O1xuXG52YXIgY3JlYXRlQ2FjaGVXaXRoVGhlbWUgPSAvKiAjX19QVVJFX18gKi93ZWFrTWVtb2l6ZShmdW5jdGlvbiAob3V0ZXJUaGVtZSkge1xuICByZXR1cm4gd2Vha01lbW9pemUoZnVuY3Rpb24gKHRoZW1lKSB7XG4gICAgcmV0dXJuIGdldFRoZW1lKG91dGVyVGhlbWUsIHRoZW1lKTtcbiAgfSk7XG59KTtcbnZhciBUaGVtZVByb3ZpZGVyID0gZnVuY3Rpb24gVGhlbWVQcm92aWRlcihwcm9wcykge1xuICB2YXIgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG5cbiAgaWYgKHByb3BzLnRoZW1lICE9PSB0aGVtZSkge1xuICAgIHRoZW1lID0gY3JlYXRlQ2FjaGVXaXRoVGhlbWUodGhlbWUpKHByb3BzLnRoZW1lKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWVcbiAgfSwgcHJvcHMuY2hpbGRyZW4pO1xufTtcbmZ1bmN0aW9uIHdpdGhUaGVtZShDb21wb25lbnQpIHtcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH0pO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgdHlwZVByb3BOYW1lID0gJ19fRU1PVElPTl9UWVBFX1BMRUFTRV9ET19OT1RfVVNFX18nO1xudmFyIGNyZWF0ZUVtb3Rpb25Qcm9wcyA9IGZ1bmN0aW9uIGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcykge1xuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIF9rZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIF9rZXkpKSB7XG4gICAgICBuZXdQcm9wc1tfa2V5XSA9IHByb3BzW19rZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzW3R5cGVQcm9wTmFtZV0gPSB0eXBlOyAvLyBSdW50aW1lIGxhYmVsaW5nIGlzIGFuIG9wdC1pbiBmZWF0dXJlIGJlY2F1c2U6XG5cbiAgcmV0dXJuIG5ld1Byb3BzO1xufTtcblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkID0gX3JlZi5zZXJpYWxpemVkLFxuICAgICAgaXNTdHJpbmdUYWcgPSBfcmVmLmlzU3RyaW5nVGFnO1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIEVtb3Rpb24gPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICB2YXIgY3NzUHJvcCA9IHByb3BzLmNzczsgLy8gc28gdGhhdCB1c2luZyBgY3NzYCBmcm9tIGBlbW90aW9uYCBhbmQgcGFzc2luZyB0aGUgcmVzdWx0IHRvIHRoZSBjc3MgcHJvcCB3b3Jrc1xuICAvLyBub3QgcGFzc2luZyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBzZXJpYWxpemVTdHlsZXMgYmVjYXVzZSBpdCB3b3VsZFxuICAvLyBtYWtlIGNlcnRhaW4gYmFiZWwgb3B0aW1pc2F0aW9ucyBub3QgcG9zc2libGVcblxuICBpZiAodHlwZW9mIGNzc1Byb3AgPT09ICdzdHJpbmcnICYmIGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNzc1Byb3AgPSBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdO1xuICB9XG5cbiAgdmFyIFdyYXBwZWRDb21wb25lbnQgPSBwcm9wc1t0eXBlUHJvcE5hbWVdO1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtjc3NQcm9wXTtcbiAgdmFyIGNsYXNzTmFtZSA9ICcnO1xuXG4gIGlmICh0eXBlb2YgcHJvcHMuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMoY2FjaGUucmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgcHJvcHMuY2xhc3NOYW1lKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSArIFwiIFwiO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMocmVnaXN0ZXJlZFN0eWxlcywgdW5kZWZpbmVkLCBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuXG4gIGNsYXNzTmFtZSArPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIgX2tleTIgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIF9rZXkyKSAmJiBfa2V5MiAhPT0gJ2NzcycgJiYgX2tleTIgIT09IHR5cGVQcm9wTmFtZSAmJiAoIWlzRGV2ZWxvcG1lbnQgKSkge1xuICAgICAgbmV3UHJvcHNbX2tleTJdID0gcHJvcHNbX2tleTJdO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICBpZiAocmVmKSB7XG4gICAgbmV3UHJvcHMucmVmID0gcmVmO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNEZXZlbG9wbWVudCBhcyBpLCB1c2VUaGVtZSBhcyB1LCB3aXRoRW1vdGlvbkNhY2hlIGFzIHcgfTtcbiIsICJ2YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG4vKlxuXG5CYXNlZCBvZmYgZ2xhbW9yJ3MgU3R5bGVTaGVldCwgdGhhbmtzIFN1bmlsIFx1Mjc2NFx1RkUwRlxuXG5oaWdoIHBlcmZvcm1hbmNlIFN0eWxlU2hlZXQgZm9yIGNzcy1pbi1qcyBzeXN0ZW1zXG5cbi0gdXNlcyBtdWx0aXBsZSBzdHlsZSB0YWdzIGJlaGluZCB0aGUgc2NlbmVzIGZvciBtaWxsaW9ucyBvZiBydWxlc1xuLSB1c2VzIGBpbnNlcnRSdWxlYCBmb3IgYXBwZW5kaW5nIGluIHByb2R1Y3Rpb24gZm9yICptdWNoKiBmYXN0ZXIgcGVyZm9ybWFuY2VcblxuLy8gdXNhZ2VcblxuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0J1xuXG5sZXQgc3R5bGVTaGVldCA9IG5ldyBTdHlsZVNoZWV0KHsga2V5OiAnJywgY29udGFpbmVyOiBkb2N1bWVudC5oZWFkIH0pXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuc3R5bGVTaGVldC5mbHVzaCgpXG4tIGVtcHRpZXMgdGhlIHN0eWxlc2hlZXQgb2YgYWxsIGl0cyBjb250ZW50c1xuXG4qL1xuXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIHJldHVybiB0YWcuc2hlZXQ7XG4gIH0gLy8gdGhpcyB3ZWlyZG5lc3MgYnJvdWdodCB0byB5b3UgYnkgZmlyZWZveFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSA9PT0gdGFnKSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgfVxuICB9IC8vIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyByZXR1cm4gd2l0aCBhIHZhbHVlXG4gIC8vIFRTIGNhbid0IHVuZGVyc3RhbmQgaXQgdGhvdWdoIHNvIHdlIG1ha2UgaXQgc3RvcCBjb21wbGFpbmluZyBoZXJlXG5cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyAhaXNEZXZlbG9wbWVudCA6IG9wdGlvbnMuc3BlZWR5O1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLm5vbmNlID0gb3B0aW9ucy5ub25jZTsgLy8ga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBzaGVldHNcblxuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICB0aGlzLnByZXBlbmQgPSBvcHRpb25zLnByZXBlbmQ7XG4gICAgdGhpcy5pbnNlcnRpb25Qb2ludCA9IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnQ7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oeWRyYXRlID0gZnVuY3Rpb24gaHlkcmF0ZShub2Rlcykge1xuICAgIG5vZGVzLmZvckVhY2godGhpcy5faW5zZXJ0VGFnKTtcbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAvLyB0aGUgbWF4IGxlbmd0aCBpcyBob3cgbWFueSBydWxlcyB3ZSBoYXZlIHBlciBzdHlsZSB0YWcsIGl0J3MgNjUwMDAgaW4gc3BlZWR5IG1vZGVcbiAgICAvLyBpdCdzIDEgaW4gZGV2IGJlY2F1c2Ugd2UgaW5zZXJ0IHNvdXJjZSBtYXBzIHRoYXQgbWFwIGEgc2luZ2xlIHJ1bGUgdG8gYSBsb2NhdGlvblxuICAgIC8vIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgc291cmNlIG1hcCBwZXIgc3R5bGUgdGFnXG4gICAgaWYgKHRoaXMuY3RyICUgKHRoaXMuaXNTcGVlZHkgPyA2NTAwMCA6IDEpID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnNlcnRUYWcoY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcblxuICAgIGlmICh0aGlzLmlzU3BlZWR5KSB7XG4gICAgICB2YXIgc2hlZXQgPSBzaGVldEZvclRhZyh0YWcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICAgIC8vIHRoZSBiaWcgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0cisrO1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBfdGFnJHBhcmVudE5vZGU7XG5cbiAgICAgIHJldHVybiAoX3RhZyRwYXJlbnROb2RlID0gdGFnLnBhcmVudE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGFnJHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlU2hlZXQ7XG59KCk7XG5cbmV4cG9ydCB7IFN0eWxlU2hlZXQgfTtcbiIsICJleHBvcnQgdmFyIE1TID0gJy1tcy0nXG5leHBvcnQgdmFyIE1PWiA9ICctbW96LSdcbmV4cG9ydCB2YXIgV0VCS0lUID0gJy13ZWJraXQtJ1xuXG5leHBvcnQgdmFyIENPTU1FTlQgPSAnY29tbSdcbmV4cG9ydCB2YXIgUlVMRVNFVCA9ICdydWxlJ1xuZXhwb3J0IHZhciBERUNMQVJBVElPTiA9ICdkZWNsJ1xuXG5leHBvcnQgdmFyIFBBR0UgPSAnQHBhZ2UnXG5leHBvcnQgdmFyIE1FRElBID0gJ0BtZWRpYSdcbmV4cG9ydCB2YXIgSU1QT1JUID0gJ0BpbXBvcnQnXG5leHBvcnQgdmFyIENIQVJTRVQgPSAnQGNoYXJzZXQnXG5leHBvcnQgdmFyIFZJRVdQT1JUID0gJ0B2aWV3cG9ydCdcbmV4cG9ydCB2YXIgU1VQUE9SVFMgPSAnQHN1cHBvcnRzJ1xuZXhwb3J0IHZhciBET0NVTUVOVCA9ICdAZG9jdW1lbnQnXG5leHBvcnQgdmFyIE5BTUVTUEFDRSA9ICdAbmFtZXNwYWNlJ1xuZXhwb3J0IHZhciBLRVlGUkFNRVMgPSAnQGtleWZyYW1lcydcbmV4cG9ydCB2YXIgRk9OVF9GQUNFID0gJ0Bmb250LWZhY2UnXG5leHBvcnQgdmFyIENPVU5URVJfU1RZTEUgPSAnQGNvdW50ZXItc3R5bGUnXG5leHBvcnQgdmFyIEZPTlRfRkVBVFVSRV9WQUxVRVMgPSAnQGZvbnQtZmVhdHVyZS12YWx1ZXMnXG5leHBvcnQgdmFyIExBWUVSID0gJ0BsYXllcidcbiIsICIvKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCB2YXIgZnJvbSA9IFN0cmluZy5mcm9tQ2hhckNvZGVcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IHZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoICh2YWx1ZSwgbGVuZ3RoKSB7XG5cdHJldHVybiBjaGFyYXQodmFsdWUsIDApIF4gNDUgPyAoKCgoKCgobGVuZ3RoIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAwKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDEpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMikpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAzKSA6IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW0gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS50cmltKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtzdHJpbmc/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2ggKHZhbHVlLCBwYXR0ZXJuKSB7XG5cdHJldHVybiAodmFsdWUgPSBwYXR0ZXJuLmV4ZWModmFsdWUpKSA/IHZhbHVlWzBdIDogdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBwYXR0ZXJuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UgKHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkge1xuXHRyZXR1cm4gdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4b2YgKHZhbHVlLCBzZWFyY2gpIHtcblx0cmV0dXJuIHZhbHVlLmluZGV4T2Yoc2VhcmNoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyYXQgKHZhbHVlLCBpbmRleCkge1xuXHRyZXR1cm4gdmFsdWUuY2hhckNvZGVBdChpbmRleCkgfCAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0ciAodmFsdWUsIGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHZhbHVlLnNsaWNlKGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZW9mICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kICh2YWx1ZSwgYXJyYXkpIHtcblx0cmV0dXJuIGFycmF5LnB1c2godmFsdWUpLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSAoYXJyYXksIGNhbGxiYWNrKSB7XG5cdHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2spLmpvaW4oJycpXG59XG4iLCAiaW1wb3J0IHtmcm9tLCB0cmltLCBjaGFyYXQsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG5leHBvcnQgdmFyIGxpbmUgPSAxXG5leHBvcnQgdmFyIGNvbHVtbiA9IDFcbmV4cG9ydCB2YXIgbGVuZ3RoID0gMFxuZXhwb3J0IHZhciBwb3NpdGlvbiA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVyID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXJzID0gJydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3RbXSB8IHN0cmluZ30gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vZGUgKHZhbHVlLCByb290LCBwYXJlbnQsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHJldHVybiB7dmFsdWU6IHZhbHVlLCByb290OiByb290LCBwYXJlbnQ6IHBhcmVudCwgdHlwZTogdHlwZSwgcHJvcHM6IHByb3BzLCBjaGlsZHJlbjogY2hpbGRyZW4sIGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uLCBsZW5ndGg6IGxlbmd0aCwgcmV0dXJuOiAnJ31cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChyb290LCBwcm9wcykge1xuXHRyZXR1cm4gYXNzaWduKG5vZGUoJycsIG51bGwsIG51bGwsICcnLCBudWxsLCBudWxsLCAwKSwgcm9vdCwge2xlbmd0aDogLXJvb3QubGVuZ3RofSwgcHJvcHMpXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhciAoKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPiAwID8gY2hhcmF0KGNoYXJhY3RlcnMsIC0tcG9zaXRpb24pIDogMFxuXG5cdGlmIChjb2x1bW4tLSwgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lLS1cblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dCAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uIDwgbGVuZ3RoID8gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKyspIDogMFxuXG5cdGlmIChjb2x1bW4rKywgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lKytcblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVlayAoKSB7XG5cdHJldHVybiBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FyZXQgKCkge1xuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlIChiZWdpbiwgZW5kKSB7XG5cdHJldHVybiBzdWJzdHIoY2hhcmFjdGVycywgYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW4gKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Ly8gXFwwIFxcdCBcXG4gXFxyIFxccyB3aGl0ZXNwYWNlIHRva2VuXG5cdFx0Y2FzZSAwOiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRyZXR1cm4gNVxuXHRcdC8vICEgKyAsIC8gPiBAIH4gaXNvbGF0ZSB0b2tlblxuXHRcdGNhc2UgMzM6IGNhc2UgNDM6IGNhc2UgNDQ6IGNhc2UgNDc6IGNhc2UgNjI6IGNhc2UgNjQ6IGNhc2UgMTI2OlxuXHRcdC8vIDsgeyB9IGJyZWFrcG9pbnQgdG9rZW5cblx0XHRjYXNlIDU5OiBjYXNlIDEyMzogY2FzZSAxMjU6XG5cdFx0XHRyZXR1cm4gNFxuXHRcdC8vIDogYWNjb21wYW5pZWQgdG9rZW5cblx0XHRjYXNlIDU4OlxuXHRcdFx0cmV0dXJuIDNcblx0XHQvLyBcIiAnICggWyBvcGVuaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDQwOiBjYXNlIDkxOlxuXHRcdFx0cmV0dXJuIDJcblx0XHQvLyApIF0gY2xvc2luZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSA0MTogY2FzZSA5Mzpcblx0XHRcdHJldHVybiAxXG5cdH1cblxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGxpbmUgPSBjb2x1bW4gPSAxLCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyA9IHZhbHVlKSwgcG9zaXRpb24gPSAwLCBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGNoYXJhY3RlcnMgPSAnJywgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdCAodHlwZSkge1xuXHRyZXR1cm4gdHJpbShzbGljZShwb3NpdGlvbiAtIDEsIGRlbGltaXRlcih0eXBlID09PSA5MSA/IHR5cGUgKyAyIDogdHlwZSA9PT0gNDAgPyB0eXBlICsgMSA6IHR5cGUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHRva2VuaXplcihhbGxvYyh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlICh0eXBlKSB7XG5cdHdoaWxlIChjaGFyYWN0ZXIgPSBwZWVrKCkpXG5cdFx0aWYgKGNoYXJhY3RlciA8IDMzKVxuXHRcdFx0bmV4dCgpXG5cdFx0ZWxzZVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gdG9rZW4odHlwZSkgPiAyIHx8IHRva2VuKGNoYXJhY3RlcikgPiAzID8gJycgOiAnICdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZXIgKGNoaWxkcmVuKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjYXNlIDA6IGFwcGVuZChpZGVudGlmaWVyKHBvc2l0aW9uIC0gMSksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOiBhcHBlbmQoZGVsaW1pdChjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6IGFwcGVuZChmcm9tKGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdH1cblxuXHRyZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBpbmcgKGluZGV4LCBjb3VudCkge1xuXHR3aGlsZSAoLS1jb3VudCAmJiBuZXh0KCkpXG5cdFx0Ly8gbm90IDAtOSBBLUYgYS1mXG5cdFx0aWYgKGNoYXJhY3RlciA8IDQ4IHx8IGNoYXJhY3RlciA+IDEwMiB8fCAoY2hhcmFjdGVyID4gNTcgJiYgY2hhcmFjdGVyIDwgNjUpIHx8IChjaGFyYWN0ZXIgPiA3MCAmJiBjaGFyYWN0ZXIgPCA5NykpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiBzbGljZShpbmRleCwgY2FyZXQoKSArIChjb3VudCA8IDYgJiYgcGVlaygpID09IDMyICYmIG5leHQoKSA9PSAzMikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlciAodHlwZSkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHQvLyBdICkgXCIgJ1xuXHRcdFx0Y2FzZSB0eXBlOlxuXHRcdFx0XHRyZXR1cm4gcG9zaXRpb25cblx0XHRcdC8vIFwiICdcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6XG5cdFx0XHRcdGlmICh0eXBlICE9PSAzNCAmJiB0eXBlICE9PSAzOSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHR5cGUgPT09IDQxKVxuXHRcdFx0XHRcdGRlbGltaXRlcih0eXBlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdG5leHQoKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ZXIgKHR5cGUsIGluZGV4KSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0Ly8gLy9cblx0XHRpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDcgKyAxMClcblx0XHRcdGJyZWFrXG5cdFx0Ly8gLypcblx0XHRlbHNlIGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0MiArIDQyICYmIHBlZWsoKSA9PT0gNDcpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiAnLyonICsgc2xpY2UoaW5kZXgsIHBvc2l0aW9uIC0gMSkgKyAnKicgKyBmcm9tKHR5cGUgPT09IDQ3ID8gdHlwZSA6IG5leHQoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXIgKGluZGV4KSB7XG5cdHdoaWxlICghdG9rZW4ocGVlaygpKSlcblx0XHRuZXh0KClcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIHBvc2l0aW9uKVxufVxuIiwgImltcG9ydCB7Q09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7YWJzLCBjaGFyYXQsIHRyaW0sIGZyb20sIHNpemVvZiwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgcmVwbGFjZSwgaW5kZXhvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtub2RlLCBjaGFyLCBwcmV2LCBuZXh0LCBwZWVrLCBjYXJldCwgYWxsb2MsIGRlYWxsb2MsIGRlbGltaXQsIHdoaXRlc3BhY2UsIGVzY2FwaW5nLCBpZGVudGlmaWVyLCBjb21tZW50ZXJ9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7b2JqZWN0W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyhwYXJzZSgnJywgbnVsbCwgbnVsbCwgbnVsbCwgWycnXSwgdmFsdWUgPSBhbGxvYyh2YWx1ZSksIDAsIFswXSwgdmFsdWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNldHNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBzZXVkb1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZWNsYXJhdGlvbnNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBydWxlLCBydWxlcywgcnVsZXNldHMsIHBzZXVkbywgcG9pbnRzLCBkZWNsYXJhdGlvbnMpIHtcblx0dmFyIGluZGV4ID0gMFxuXHR2YXIgb2Zmc2V0ID0gMFxuXHR2YXIgbGVuZ3RoID0gcHNldWRvXG5cdHZhciBhdHJ1bGUgPSAwXG5cdHZhciBwcm9wZXJ0eSA9IDBcblx0dmFyIHByZXZpb3VzID0gMFxuXHR2YXIgdmFyaWFibGUgPSAxXG5cdHZhciBzY2FubmluZyA9IDFcblx0dmFyIGFtcGVyc2FuZCA9IDFcblx0dmFyIGNoYXJhY3RlciA9IDBcblx0dmFyIHR5cGUgPSAnJ1xuXHR2YXIgcHJvcHMgPSBydWxlc1xuXHR2YXIgY2hpbGRyZW4gPSBydWxlc2V0c1xuXHR2YXIgcmVmZXJlbmNlID0gcnVsZVxuXHR2YXIgY2hhcmFjdGVycyA9IHR5cGVcblxuXHR3aGlsZSAoc2Nhbm5pbmcpXG5cdFx0c3dpdGNoIChwcmV2aW91cyA9IGNoYXJhY3RlciwgY2hhcmFjdGVyID0gbmV4dCgpKSB7XG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAocHJldmlvdXMgIT0gMTA4ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCBsZW5ndGggLSAxKSA9PSA1OCkge1xuXHRcdFx0XHRcdGlmIChpbmRleG9mKGNoYXJhY3RlcnMgKz0gcmVwbGFjZShkZWxpbWl0KGNoYXJhY3RlciksICcmJywgJyZcXGYnKSwgJyZcXGYnKSAhPSAtMSlcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IC0xXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0Ly8gXCIgJyBbXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDkxOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFx0IFxcbiBcXHIgXFxzXG5cdFx0XHRjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gd2hpdGVzcGFjZShwcmV2aW91cylcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGVzY2FwaW5nKGNhcmV0KCkgLSAxLCA3KVxuXHRcdFx0XHRjb250aW51ZVxuXHRcdFx0Ly8gL1xuXHRcdFx0Y2FzZSA0Nzpcblx0XHRcdFx0c3dpdGNoIChwZWVrKCkpIHtcblx0XHRcdFx0XHRjYXNlIDQyOiBjYXNlIDQ3OlxuXHRcdFx0XHRcdFx0YXBwZW5kKGNvbW1lbnQoY29tbWVudGVyKG5leHQoKSwgY2FyZXQoKSksIHJvb3QsIHBhcmVudCksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gJy8nXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIHtcblx0XHRcdGNhc2UgMTIzICogdmFyaWFibGU6XG5cdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IHN0cmxlbihjaGFyYWN0ZXJzKSAqIGFtcGVyc2FuZFxuXHRcdFx0Ly8gfSA7IFxcMFxuXHRcdFx0Y2FzZSAxMjUgKiB2YXJpYWJsZTogY2FzZSA1OTogY2FzZSAwOlxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0XHRcdC8vIFxcMCB9XG5cdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDEyNTogc2Nhbm5pbmcgPSAwXG5cdFx0XHRcdFx0Ly8gO1xuXHRcdFx0XHRcdGNhc2UgNTkgKyBvZmZzZXQ6IGlmIChhbXBlcnNhbmQgPT0gLTEpIGNoYXJhY3RlcnMgPSByZXBsYWNlKGNoYXJhY3RlcnMsIC9cXGYvZywgJycpXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPiAwICYmIChzdHJsZW4oY2hhcmFjdGVycykgLSBsZW5ndGgpKVxuXHRcdFx0XHRcdFx0XHRhcHBlbmQocHJvcGVydHkgPiAzMiA/IGRlY2xhcmF0aW9uKGNoYXJhY3RlcnMgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMSkgOiBkZWNsYXJhdGlvbihyZXBsYWNlKGNoYXJhY3RlcnMsICcgJywgJycpICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDIpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEAgO1xuXHRcdFx0XHRcdGNhc2UgNTk6IGNoYXJhY3RlcnMgKz0gJzsnXG5cdFx0XHRcdFx0Ly8geyBydWxlL2F0LXJ1bGVcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YXBwZW5kKHJlZmVyZW5jZSA9IHJ1bGVzZXQoY2hhcmFjdGVycywgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcyA9IFtdLCBjaGlsZHJlbiA9IFtdLCBsZW5ndGgpLCBydWxlc2V0cylcblxuXHRcdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gMTIzKVxuXHRcdFx0XHRcdFx0XHRpZiAob2Zmc2V0ID09PSAwKVxuXHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJvb3QsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBwcm9wcywgcnVsZXNldHMsIGxlbmd0aCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoYXRydWxlID09PSA5OSAmJiBjaGFyYXQoY2hhcmFjdGVycywgMykgPT09IDExMCA/IDEwMCA6IGF0cnVsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZCBsIG0gc1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAxMDA6IGNhc2UgMTA4OiBjYXNlIDEwOTogY2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcnVsZSAmJiBhcHBlbmQocnVsZXNldCh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIDAsIDAsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHJ1bGVzLCBwcm9wcyA9IFtdLCBsZW5ndGgpLCBjaGlsZHJlbiksIHJ1bGVzLCBjaGlsZHJlbiwgbGVuZ3RoLCBwb2ludHMsIHJ1bGUgPyBwcm9wcyA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgWycnXSwgY2hpbGRyZW4sIDAsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBvZmZzZXQgPSBwcm9wZXJ0eSA9IDAsIHZhcmlhYmxlID0gYW1wZXJzYW5kID0gMSwgdHlwZSA9IGNoYXJhY3RlcnMgPSAnJywgbGVuZ3RoID0gcHNldWRvXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyA6XG5cdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRsZW5ndGggPSAxICsgc3RybGVuKGNoYXJhY3RlcnMpLCBwcm9wZXJ0eSA9IHByZXZpb3VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodmFyaWFibGUgPCAxKVxuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT0gMTIzKVxuXHRcdFx0XHRcdFx0LS12YXJpYWJsZVxuXHRcdFx0XHRcdGVsc2UgaWYgKGNoYXJhY3RlciA9PSAxMjUgJiYgdmFyaWFibGUrKyA9PSAwICYmIHByZXYoKSA9PSAxMjUpXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVycyArPSBmcm9tKGNoYXJhY3RlciksIGNoYXJhY3RlciAqIHZhcmlhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gJlxuXHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSBvZmZzZXQgPiAwID8gMSA6IChjaGFyYWN0ZXJzICs9ICdcXGYnLCAtMSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLFxuXHRcdFx0XHRcdGNhc2UgNDQ6XG5cdFx0XHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSAoc3RybGVuKGNoYXJhY3RlcnMpIC0gMSkgKiBhbXBlcnNhbmQsIGFtcGVyc2FuZCA9IDFcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQFxuXHRcdFx0XHRcdGNhc2UgNjQ6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAocGVlaygpID09PSA0NSlcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KG5leHQoKSlcblxuXHRcdFx0XHRcdFx0YXRydWxlID0gcGVlaygpLCBvZmZzZXQgPSBsZW5ndGggPSBzdHJsZW4odHlwZSA9IGNoYXJhY3RlcnMgKz0gaWRlbnRpZmllcihjYXJldCgpKSksIGNoYXJhY3RlcisrXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzID09PSA0NSAmJiBzdHJsZW4oY2hhcmFjdGVycykgPT0gMilcblx0XHRcdFx0XHRcdFx0dmFyaWFibGUgPSAwXG5cdFx0XHRcdH1cblx0XHR9XG5cblx0cmV0dXJuIHJ1bGVzZXRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNldCAodmFsdWUsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0dmFyIHBvc3QgPSBvZmZzZXQgLSAxXG5cdHZhciBydWxlID0gb2Zmc2V0ID09PSAwID8gcnVsZXMgOiBbJyddXG5cdHZhciBzaXplID0gc2l6ZW9mKHJ1bGUpXG5cblx0Zm9yICh2YXIgaSA9IDAsIGogPSAwLCBrID0gMDsgaSA8IGluZGV4OyArK2kpXG5cdFx0Zm9yICh2YXIgeCA9IDAsIHkgPSBzdWJzdHIodmFsdWUsIHBvc3QgKyAxLCBwb3N0ID0gYWJzKGogPSBwb2ludHNbaV0pKSwgeiA9IHZhbHVlOyB4IDwgc2l6ZTsgKyt4KVxuXHRcdFx0aWYgKHogPSB0cmltKGogPiAwID8gcnVsZVt4XSArICcgJyArIHkgOiByZXBsYWNlKHksIC8mXFxmL2csIHJ1bGVbeF0pKSlcblx0XHRcdFx0cHJvcHNbaysrXSA9IHpcblxuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBvZmZzZXQgPT09IDAgPyBSVUxFU0VUIDogdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnQgKHZhbHVlLCByb290LCBwYXJlbnQpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgQ09NTUVOVCwgZnJvbShjaGFyKCkpLCBzdWJzdHIodmFsdWUsIDIsIC0yKSwgMClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24gKHZhbHVlLCByb290LCBwYXJlbnQsIGxlbmd0aCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBERUNMQVJBVElPTiwgc3Vic3RyKHZhbHVlLCAwLCBsZW5ndGgpLCBzdWJzdHIodmFsdWUsIGxlbmd0aCArIDEsIC0xKSwgbGVuZ3RoKVxufVxuIiwgImltcG9ydCB7SU1QT1JULCBMQVlFUiwgQ09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT04sIEtFWUZSQU1FU30gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHtzdHJsZW4sIHNpemVvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplIChjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0dmFyIG91dHB1dCA9ICcnXG5cdHZhciBsZW5ndGggPSBzaXplb2YoY2hpbGRyZW4pXG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRvdXRwdXQgKz0gY2FsbGJhY2soY2hpbGRyZW5baV0sIGksIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRyZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIExBWUVSOiBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIGJyZWFrXG5cdFx0Y2FzZSBJTVBPUlQ6IGNhc2UgREVDTEFSQVRJT046IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQucmV0dXJuIHx8IGVsZW1lbnQudmFsdWVcblx0XHRjYXNlIENPTU1FTlQ6IHJldHVybiAnJ1xuXHRcdGNhc2UgS0VZRlJBTUVTOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSArICd9J1xuXHRcdGNhc2UgUlVMRVNFVDogZWxlbWVudC52YWx1ZSA9IGVsZW1lbnQucHJvcHMuam9pbignLCcpXG5cdH1cblxuXHRyZXR1cm4gc3RybGVuKGNoaWxkcmVuID0gc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSkgPyBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBjaGlsZHJlbiArICd9JyA6ICcnXG59XG4iLCAiaW1wb3J0IHtNUywgTU9aLCBXRUJLSVQsIFJVTEVTRVQsIEtFWUZSQU1FUywgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7bWF0Y2gsIGNoYXJhdCwgc3Vic3RyLCBzdHJsZW4sIHNpemVvZiwgcmVwbGFjZSwgY29tYmluZX0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtjb3B5LCB0b2tlbml6ZX0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5pbXBvcnQge3NlcmlhbGl6ZX0gZnJvbSAnLi9TZXJpYWxpemVyLmpzJ1xuaW1wb3J0IHtwcmVmaXh9IGZyb20gJy4vUHJlZml4ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbltdfSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pZGRsZXdhcmUgKGNvbGxlY3Rpb24pIHtcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjb2xsZWN0aW9uKVxuXG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRcdHZhciBvdXRwdXQgPSAnJ1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdG91dHB1dCArPSBjb2xsZWN0aW9uW2ldKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0XHRyZXR1cm4gb3V0cHV0XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2hlZXQgKGNhbGxiYWNrKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdGlmICghZWxlbWVudC5yb290KVxuXHRcdFx0aWYgKGVsZW1lbnQgPSBlbGVtZW50LnJldHVybilcblx0XHRcdFx0Y2FsbGJhY2soZWxlbWVudClcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4ZXIgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0aWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpXG5cdFx0aWYgKCFlbGVtZW50LnJldHVybilcblx0XHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRcdGNhc2UgREVDTEFSQVRJT046IGVsZW1lbnQucmV0dXJuID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoLCBjaGlsZHJlbilcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0Y2FzZSBLRVlGUkFNRVM6XG5cdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7dmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpfSldLCBjYWxsYmFjaylcblx0XHRcdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0XHRcdGlmIChlbGVtZW50Lmxlbmd0aClcblx0XHRcdFx0XHRcdHJldHVybiBjb21iaW5lKGVsZW1lbnQucHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKG1hdGNoKHZhbHVlLCAvKDo6cGxhY1xcdyt8OnJlYWQtXFx3KykvKSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIDpyZWFkLShvbmx5fHdyaXRlKVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzpyZWFkLW9ubHknOiBjYXNlICc6cmVhZC13cml0ZSc6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHRcdC8vIDpwbGFjZWhvbGRlclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV19KVxuXHRcdFx0XHRcdFx0XHRcdFx0XSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJydcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hbWVzcGFjZSAoZWxlbWVudCkge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdGVsZW1lbnQucHJvcHMgPSBlbGVtZW50LnByb3BzLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIGNvbWJpbmUodG9rZW5pemUodmFsdWUpLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjaGlsZHJlbikge1xuXHRcdFx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCAwKSkge1xuXHRcdFx0XHRcdFx0Ly8gXFxmXG5cdFx0XHRcdFx0XHRjYXNlIDEyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc3Vic3RyKHZhbHVlLCAxLCBzdHJsZW4odmFsdWUpKVxuXHRcdFx0XHRcdFx0Ly8gXFwwICggKyA+IH5cblx0XHRcdFx0XHRcdGNhc2UgMDogY2FzZSA0MDogY2FzZSA0MzogY2FzZSA2MjogY2FzZSAxMjY6XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0Ly8gOlxuXHRcdFx0XHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0XHRcdFx0aWYgKGNoaWxkcmVuWysraW5kZXhdID09PSAnZ2xvYmFsJylcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbltpbmRleF0gPSAnJywgY2hpbGRyZW5bKytpbmRleF0gPSAnXFxmJyArIHN1YnN0cihjaGlsZHJlbltpbmRleF0sIGluZGV4ID0gMSwgLTEpXG5cdFx0XHRcdFx0XHQvLyBcXHNcblx0XHRcdFx0XHRcdGNhc2UgMzI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIDA6IGVsZW1lbnQgPSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNpemVvZihjaGlsZHJlbikgPiAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgaW5kZXggPSBzaXplb2YoY2hpbGRyZW4pIC0gMTogY2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAyID8gdmFsdWUgKyBlbGVtZW50ICsgZWxlbWVudCA6IHZhbHVlICsgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0pXG5cdH1cbn1cbiIsICJ2YXIgd2Vha01lbW9pemUgPSBmdW5jdGlvbiB3ZWFrTWVtb2l6ZShmdW5jKSB7XG4gIHZhciBjYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlLmhhcyhhcmcpKSB7XG4gICAgICAvLyBVc2Ugbm9uLW51bGwgYXNzZXJ0aW9uIGJlY2F1c2Ugd2UganVzdCBjaGVja2VkIHRoYXQgdGhlIGNhY2hlIGBoYXNgIGl0XG4gICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byByZW1vdmUgYHVuZGVmaW5lZGAgZnJvbSB0aGUgcmV0dXJuIHZhbHVlXG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGFyZyk7XG4gICAgfVxuXG4gICAgdmFyIHJldCA9IGZ1bmMoYXJnKTtcbiAgICBjYWNoZS5zZXQoYXJnLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG59O1xuXG5leHBvcnQgeyB3ZWFrTWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iLCAiZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xuICAgIGlmIChjYWNoZVthcmddID09PSB1bmRlZmluZWQpIGNhY2hlW2FyZ10gPSBmbihhcmcpO1xuICAgIHJldHVybiBjYWNoZVthcmddO1xuICB9O1xufVxuXG5leHBvcnQgeyBtZW1vaXplIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnO1xuaW1wb3J0IHsgZGVhbGxvYywgYWxsb2MsIG5leHQsIHRva2VuLCBmcm9tLCBwZWVrLCBkZWxpbWl0LCBzbGljZSwgcG9zaXRpb24sIFJVTEVTRVQsIGNvbWJpbmUsIG1hdGNoLCBzZXJpYWxpemUsIGNvcHksIHJlcGxhY2UsIFdFQktJVCwgTU9aLCBNUywgS0VZRlJBTUVTLCBERUNMQVJBVElPTiwgaGFzaCwgY2hhcmF0LCBzdHJsZW4sIGluZGV4b2YsIHN0cmluZ2lmeSwgcnVsZXNoZWV0LCBtaWRkbGV3YXJlLCBjb21waWxlIH0gZnJvbSAnc3R5bGlzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcgPSBmdW5jdGlvbiBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcoYmVnaW4sIHBvaW50cywgaW5kZXgpIHtcbiAgdmFyIHByZXZpb3VzID0gMDtcbiAgdmFyIGNoYXJhY3RlciA9IDA7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBwcmV2aW91cyA9IGNoYXJhY3RlcjtcbiAgICBjaGFyYWN0ZXIgPSBwZWVrKCk7IC8vICZcXGZcblxuICAgIGlmIChwcmV2aW91cyA9PT0gMzggJiYgY2hhcmFjdGVyID09PSAxMikge1xuICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG5leHQoKTtcbiAgfVxuXG4gIHJldHVybiBzbGljZShiZWdpbiwgcG9zaXRpb24pO1xufTtcblxudmFyIHRvUnVsZXMgPSBmdW5jdGlvbiB0b1J1bGVzKHBhcnNlZCwgcG9pbnRzKSB7XG4gIC8vIHByZXRlbmQgd2UndmUgc3RhcnRlZCB3aXRoIGEgY29tbWFcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBjaGFyYWN0ZXIgPSA0NDtcblxuICBkbyB7XG4gICAgc3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIC8vICZcXGZcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gMzggJiYgcGVlaygpID09PSAxMikge1xuICAgICAgICAgIC8vIHRoaXMgaXMgbm90IDEwMCUgY29ycmVjdCwgd2UgZG9uJ3QgYWNjb3VudCBmb3IgbGl0ZXJhbCBzZXF1ZW5jZXMgaGVyZSAtIGxpa2UgZm9yIGV4YW1wbGUgcXVvdGVkIHN0cmluZ3NcbiAgICAgICAgICAvLyBzdHlsaXMgaW5zZXJ0cyBcXGYgYWZ0ZXIgJiB0byBrbm93IHdoZW4gJiB3aGVyZSBpdCBzaG91bGQgcmVwbGFjZSB0aGlzIHNlcXVlbmNlIHdpdGggdGhlIGNvbnRleHQgc2VsZWN0b3JcbiAgICAgICAgICAvLyBhbmQgd2hlbiBpdCBzaG91bGQganVzdCBjb25jYXRlbmF0ZSB0aGUgb3V0ZXIgYW5kIGlubmVyIHNlbGVjdG9yc1xuICAgICAgICAgIC8vIGl0J3MgdmVyeSB1bmxpa2VseSBmb3IgdGhpcyBzZXF1ZW5jZSB0byBhY3R1YWxseSBhcHBlYXIgaW4gYSBkaWZmZXJlbnQgY29udGV4dCwgc28gd2UganVzdCBsZXZlcmFnZSB0aGlzIGZhY3QgaGVyZVxuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcocG9zaXRpb24gLSAxLCBwb2ludHMsIGluZGV4KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBkZWxpbWl0KGNoYXJhY3Rlcik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIC8vIGNvbW1hXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDQ0KSB7XG4gICAgICAgICAgLy8gY29sb25cbiAgICAgICAgICBwYXJzZWRbKytpbmRleF0gPSBwZWVrKCkgPT09IDU4ID8gJyZcXGYnIDogJyc7XG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IHBhcnNlZFtpbmRleF0ubGVuZ3RoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIC8vIGZhbGx0aHJvdWdoXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZnJvbShjaGFyYWN0ZXIpO1xuICAgIH1cbiAgfSB3aGlsZSAoY2hhcmFjdGVyID0gbmV4dCgpKTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcblxudmFyIGdldFJ1bGVzID0gZnVuY3Rpb24gZ2V0UnVsZXModmFsdWUsIHBvaW50cykge1xuICByZXR1cm4gZGVhbGxvYyh0b1J1bGVzKGFsbG9jKHZhbHVlKSwgcG9pbnRzKSk7XG59OyAvLyBXZWFrU2V0IHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUsIGJ1dCBvbmx5IFdlYWtNYXAgaXMgc3VwcG9ydGVkIGluIElFMTFcblxuXG52YXIgZml4ZWRFbGVtZW50cyA9IC8qICNfX1BVUkVfXyAqL25ldyBXZWFrTWFwKCk7XG52YXIgY29tcGF0ID0gZnVuY3Rpb24gY29tcGF0KGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8ICFlbGVtZW50LnBhcmVudCB8fCAvLyBwb3NpdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBjb250YWlucyBwc2V1ZG9cbiAgLy8gbmVnYXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgaGFzIGJlZW4gYWxyZWFkeSBwcmVmaXhlZFxuICBlbGVtZW50Lmxlbmd0aCA8IDEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnQ7XG4gIHZhciBpc0ltcGxpY2l0UnVsZSA9IGVsZW1lbnQuY29sdW1uID09PSBwYXJlbnQuY29sdW1uICYmIGVsZW1lbnQubGluZSA9PT0gcGFyZW50LmxpbmU7XG5cbiAgd2hpbGUgKHBhcmVudC50eXBlICE9PSAncnVsZScpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIGlmICghcGFyZW50KSByZXR1cm47XG4gIH0gLy8gc2hvcnQtY2lyY3VpdCBmb3IgdGhlIHNpbXBsZXN0IGNhc2VcblxuXG4gIGlmIChlbGVtZW50LnByb3BzLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZS5jaGFyQ29kZUF0KDApICE9PSA1OFxuICAvKiBjb2xvbiAqL1xuICAmJiAhZml4ZWRFbGVtZW50cy5nZXQocGFyZW50KSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBpZiB0aGlzIGlzIGFuIGltcGxpY2l0bHkgaW5zZXJ0ZWQgcnVsZSAodGhlIG9uZSBlYWdlcmx5IGluc2VydGVkIGF0IHRoZSBlYWNoIG5ldyBuZXN0ZWQgbGV2ZWwpXG4gIC8vIHRoZW4gdGhlIHByb3BzIGhhcyBhbHJlYWR5IGJlZW4gbWFuaXB1bGF0ZWQgYmVmb3JlaGFuZCBhcyB0aGV5IHRoYXQgYXJyYXkgaXMgc2hhcmVkIGJldHdlZW4gaXQgYW5kIGl0cyBcInJ1bGUgcGFyZW50XCJcblxuXG4gIGlmIChpc0ltcGxpY2l0UnVsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZpeGVkRWxlbWVudHMuc2V0KGVsZW1lbnQsIHRydWUpO1xuICB2YXIgcG9pbnRzID0gW107XG4gIHZhciBydWxlcyA9IGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpO1xuICB2YXIgcGFyZW50UnVsZXMgPSBwYXJlbnQucHJvcHM7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGsgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhcmVudFJ1bGVzLmxlbmd0aDsgaisrLCBrKyspIHtcbiAgICAgIGVsZW1lbnQucHJvcHNba10gPSBwb2ludHNbaV0gPyBydWxlc1tpXS5yZXBsYWNlKC8mXFxmL2csIHBhcmVudFJ1bGVzW2pdKSA6IHBhcmVudFJ1bGVzW2pdICsgXCIgXCIgKyBydWxlc1tpXTtcbiAgICB9XG4gIH1cbn07XG52YXIgcmVtb3ZlTGFiZWwgPSBmdW5jdGlvbiByZW1vdmVMYWJlbChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgPT09ICdkZWNsJykge1xuICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAoIC8vIGNoYXJjb2RlIGZvciBsXG4gICAgdmFsdWUuY2hhckNvZGVBdCgwKSA9PT0gMTA4ICYmIC8vIGNoYXJjb2RlIGZvciBiXG4gICAgdmFsdWUuY2hhckNvZGVBdCgyKSA9PT0gOTgpIHtcbiAgICAgIC8vIHRoaXMgaWdub3JlcyBsYWJlbFxuICAgICAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICAgICAgZWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tZmFsbHRocm91Z2ggKi9cblxuZnVuY3Rpb24gcHJlZml4KHZhbHVlLCBsZW5ndGgpIHtcbiAgc3dpdGNoIChoYXNoKHZhbHVlLCBsZW5ndGgpKSB7XG4gICAgLy8gY29sb3ItYWRqdXN0XG4gICAgY2FzZSA1MTAzOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdwcmludC0nICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhbmltYXRpb24sIGFuaW1hdGlvbi0oZGVsYXl8ZGlyZWN0aW9ufGR1cmF0aW9ufGZpbGwtbW9kZXxpdGVyYXRpb24tY291bnR8bmFtZXxwbGF5LXN0YXRlfHRpbWluZy1mdW5jdGlvbilcblxuICAgIGNhc2UgNTczNzpcbiAgICBjYXNlIDQyMDE6XG4gICAgY2FzZSAzMTc3OlxuICAgIGNhc2UgMzQzMzpcbiAgICBjYXNlIDE2NDE6XG4gICAgY2FzZSA0NDU3OlxuICAgIGNhc2UgMjkyMTogLy8gdGV4dC1kZWNvcmF0aW9uLCBmaWx0ZXIsIGNsaXAtcGF0aCwgYmFja2ZhY2UtdmlzaWJpbGl0eSwgY29sdW1uLCBib3gtZGVjb3JhdGlvbi1icmVha1xuXG4gICAgY2FzZSA1NTcyOlxuICAgIGNhc2UgNjM1NjpcbiAgICBjYXNlIDU4NDQ6XG4gICAgY2FzZSAzMTkxOlxuICAgIGNhc2UgNjY0NTpcbiAgICBjYXNlIDMwMDU6IC8vIG1hc2ssIG1hc2staW1hZ2UsIG1hc2stKG1vZGV8Y2xpcHxzaXplKSwgbWFzay0ocmVwZWF0fG9yaWdpbiksIG1hc2stcG9zaXRpb24sIG1hc2stY29tcG9zaXRlLFxuXG4gICAgY2FzZSA2MzkxOlxuICAgIGNhc2UgNTg3OTpcbiAgICBjYXNlIDU2MjM6XG4gICAgY2FzZSA2MTM1OlxuICAgIGNhc2UgNDU5OTpcbiAgICBjYXNlIDQ4NTU6IC8vIGJhY2tncm91bmQtY2xpcCwgY29sdW1ucywgY29sdW1uLShjb3VudHxmaWxsfGdhcHxydWxlfHJ1bGUtY29sb3J8cnVsZS1zdHlsZXxydWxlLXdpZHRofHNwYW58d2lkdGgpXG5cbiAgICBjYXNlIDQyMTU6XG4gICAgY2FzZSA2Mzg5OlxuICAgIGNhc2UgNTEwOTpcbiAgICBjYXNlIDUzNjU6XG4gICAgY2FzZSA1NjIxOlxuICAgIGNhc2UgMzgyOTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFwcGVhcmFuY2UsIHVzZXItc2VsZWN0LCB0cmFuc2Zvcm0sIGh5cGhlbnMsIHRleHQtc2l6ZS1hZGp1c3RcblxuICAgIGNhc2UgNTM0OTpcbiAgICBjYXNlIDQyNDY6XG4gICAgY2FzZSA0ODEwOlxuICAgIGNhc2UgNjk2ODpcbiAgICBjYXNlIDI3NTY6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNT1ogKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LCBmbGV4LWRpcmVjdGlvblxuXG4gICAgY2FzZSA2ODI4OlxuICAgIGNhc2UgNDI2ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBvcmRlclxuXG4gICAgY2FzZSA2MTY1OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC0nICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1pdGVtc1xuXG4gICAgY2FzZSA1MTg3OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgcmVwbGFjZSh2YWx1ZSwgLyhcXHcrKS4rKDpbXl0rKS8sIFdFQktJVCArICdib3gtJDEkMicgKyBNUyArICdmbGV4LSQxJDInKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLXNlbGZcblxuICAgIGNhc2UgNTQ0MzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtaXRlbS0nICsgcmVwbGFjZSh2YWx1ZSwgL2ZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tY29udGVudFxuXG4gICAgY2FzZSA0Njc1OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1saW5lLXBhY2snICsgcmVwbGFjZSh2YWx1ZSwgL2FsaWduLWNvbnRlbnR8ZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LXNocmlua1xuXG4gICAgY2FzZSA1NTQ4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnc2hyaW5rJywgJ25lZ2F0aXZlJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWJhc2lzXG5cbiAgICBjYXNlIDUyOTI6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdiYXNpcycsICdwcmVmZXJyZWQtc2l6ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1ncm93XG5cbiAgICBjYXNlIDYwNjA6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ2JveC0nICsgcmVwbGFjZSh2YWx1ZSwgJy1ncm93JywgJycpICsgV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdncm93JywgJ3Bvc2l0aXZlJykgKyB2YWx1ZTtcbiAgICAvLyB0cmFuc2l0aW9uXG5cbiAgICBjYXNlIDQ1NTQ6XG4gICAgICByZXR1cm4gV0VCS0lUICsgcmVwbGFjZSh2YWx1ZSwgLyhbXi1dKSh0cmFuc2Zvcm0pL2csICckMScgKyBXRUJLSVQgKyAnJDInKSArIHZhbHVlO1xuICAgIC8vIGN1cnNvclxuXG4gICAgY2FzZSA2MTg3OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKHpvb20tfGdyYWIpLywgV0VCS0lUICsgJyQxJyksIC8oaW1hZ2Utc2V0KS8sIFdFQktJVCArICckMScpLCB2YWx1ZSwgJycpICsgdmFsdWU7XG4gICAgLy8gYmFja2dyb3VuZCwgYmFja2dyb3VuZC1pbWFnZVxuXG4gICAgY2FzZSA1NDk1OlxuICAgIGNhc2UgMzk1OTpcbiAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKGltYWdlLXNldFxcKFteXSopLywgV0VCS0lUICsgJyQxJyArICckYCQxJyk7XG4gICAgLy8ganVzdGlmeS1jb250ZW50XG5cbiAgICBjYXNlIDQ5Njg6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKC4rOikoZmxleC0pPyguKikvLCBXRUJLSVQgKyAnYm94LXBhY2s6JDMnICsgTVMgKyAnZmxleC1wYWNrOiQzJyksIC9zListYlteO10rLywgJ2p1c3RpZnknKSArIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gKG1hcmdpbnxwYWRkaW5nKS1pbmxpbmUtKHN0YXJ0fGVuZClcblxuICAgIGNhc2UgNDA5NTpcbiAgICBjYXNlIDM1ODM6XG4gICAgY2FzZSA0MDY4OlxuICAgIGNhc2UgMjUzMjpcbiAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rKS1pbmxpbmUoLispLywgV0VCS0lUICsgJyQxJDInKSArIHZhbHVlO1xuICAgIC8vIChtaW58bWF4KT8od2lkdGh8aGVpZ2h0fGlubGluZS1zaXplfGJsb2NrLXNpemUpXG5cbiAgICBjYXNlIDgxMTY6XG4gICAgY2FzZSA3MDU5OlxuICAgIGNhc2UgNTc1MzpcbiAgICBjYXNlIDU1MzU6XG4gICAgY2FzZSA1NDQ1OlxuICAgIGNhc2UgNTcwMTpcbiAgICBjYXNlIDQ5MzM6XG4gICAgY2FzZSA0Njc3OlxuICAgIGNhc2UgNTUzMzpcbiAgICBjYXNlIDU3ODk6XG4gICAgY2FzZSA1MDIxOlxuICAgIGNhc2UgNDc2NTpcbiAgICAgIC8vIHN0cmV0Y2gsIG1heC1jb250ZW50LCBtaW4tY29udGVudCwgZmlsbC1hdmFpbGFibGVcbiAgICAgIGlmIChzdHJsZW4odmFsdWUpIC0gMSAtIGxlbmd0aCA+IDYpIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSkge1xuICAgICAgICAvLyAobSlheC1jb250ZW50LCAobSlpbi1jb250ZW50XG4gICAgICAgIGNhc2UgMTA5OlxuICAgICAgICAgIC8vIC1cbiAgICAgICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyA0KSAhPT0gNDUpIGJyZWFrO1xuICAgICAgICAvLyAoZilpbGwtYXZhaWxhYmxlLCAoZilpdC1jb250ZW50XG5cbiAgICAgICAgY2FzZSAxMDI6XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KSguKyktKFteXSspLywgJyQxJyArIFdFQktJVCArICckMi0kMycgKyAnJDEnICsgTU9aICsgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMykgPT0gMTA4ID8gJyQzJyA6ICckMi0kMycpKSArIHZhbHVlO1xuICAgICAgICAvLyAocyl0cmV0Y2hcblxuICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICByZXR1cm4gfmluZGV4b2YodmFsdWUsICdzdHJldGNoJykgPyBwcmVmaXgocmVwbGFjZSh2YWx1ZSwgJ3N0cmV0Y2gnLCAnZmlsbC1hdmFpbGFibGUnKSwgbGVuZ3RoKSArIHZhbHVlIDogdmFsdWU7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICAvLyBwb3NpdGlvbjogc3RpY2t5XG5cbiAgICBjYXNlIDQ5NDk6XG4gICAgICAvLyAocyl0aWNreT9cbiAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpICE9PSAxMTUpIGJyZWFrO1xuICAgIC8vIGRpc3BsYXk6IChmbGV4fGlubGluZS1mbGV4KVxuXG4gICAgY2FzZSA2NDQ0OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIHN0cmxlbih2YWx1ZSkgLSAzIC0gKH5pbmRleG9mKHZhbHVlLCAnIWltcG9ydGFudCcpICYmIDEwKSkpIHtcbiAgICAgICAgLy8gc3RpYyhrKXlcbiAgICAgICAgY2FzZSAxMDc6XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsICc6JywgJzonICsgV0VCS0lUKSArIHZhbHVlO1xuICAgICAgICAvLyAoaW5saW5lLSk/ZmwoZSl4XG5cbiAgICAgICAgY2FzZSAxMDE6XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KShbXjshXSspKDt8IS4rKT8vLCAnJDEnICsgV0VCS0lUICsgKGNoYXJhdCh2YWx1ZSwgMTQpID09PSA0NSA/ICdpbmxpbmUtJyA6ICcnKSArICdib3gkMycgKyAnJDEnICsgV0VCS0lUICsgJyQyJDMnICsgJyQxJyArIE1TICsgJyQyYm94JDMnKSArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICAvLyB3cml0aW5nLW1vZGVcblxuICAgIGNhc2UgNTkzNjpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxMSkpIHtcbiAgICAgICAgLy8gdmVydGljYWwtbChyKVxuICAgICAgICBjYXNlIDExNDpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gdmVydGljYWwtcihsKVxuXG4gICAgICAgIGNhc2UgMTA4OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGItcmwnKSArIHZhbHVlO1xuICAgICAgICAvLyBob3Jpem9udGFsKC0pdGJcblxuICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAnbHInKSArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBwcmVmaXhlciA9IGZ1bmN0aW9uIHByZWZpeGVyKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcbiAgaWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpIGlmICghZWxlbWVudFtcInJldHVyblwiXSkgc3dpdGNoIChlbGVtZW50LnR5cGUpIHtcbiAgICBjYXNlIERFQ0xBUkFUSU9OOlxuICAgICAgZWxlbWVudFtcInJldHVyblwiXSA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgS0VZRlJBTUVTOlxuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgIHZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKVxuICAgICAgfSldLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlIFJVTEVTRVQ6XG4gICAgICBpZiAoZWxlbWVudC5sZW5ndGgpIHJldHVybiBjb21iaW5lKGVsZW1lbnQucHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBzd2l0Y2ggKG1hdGNoKHZhbHVlLCAvKDo6cGxhY1xcdyt8OnJlYWQtXFx3KykvKSkge1xuICAgICAgICAgIC8vIDpyZWFkLShvbmx5fHdyaXRlKVxuICAgICAgICAgIGNhc2UgJzpyZWFkLW9ubHknOlxuICAgICAgICAgIGNhc2UgJzpyZWFkLXdyaXRlJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICAgIC8vIDpwbGFjZWhvbGRlclxuXG4gICAgICAgICAgY2FzZSAnOjpwbGFjZWhvbGRlcic6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBXRUJLSVQgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pLCBjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV1cbiAgICAgICAgICAgIH0pLCBjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCBNUyArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9KTtcbiAgfVxufTtcblxudmFyIGRlZmF1bHRTdHlsaXNQbHVnaW5zID0gW3ByZWZpeGVyXTtcblxudmFyIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb24gY3JlYXRlQ2FjaGUob3B0aW9ucykge1xuICB2YXIga2V5ID0gb3B0aW9ucy5rZXk7XG5cbiAgaWYgKGtleSA9PT0gJ2NzcycpIHtcbiAgICB2YXIgc3NyU3R5bGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl06bm90KFtkYXRhLXNdKVwiKTsgLy8gZ2V0IFNTUmVkIHN0eWxlcyBvdXQgb2YgdGhlIHdheSBvZiBSZWFjdCdzIGh5ZHJhdGlvblxuICAgIC8vIGRvY3VtZW50LmhlYWQgaXMgYSBzYWZlIHBsYWNlIHRvIG1vdmUgdGhlbSB0byh0aG91Z2ggbm90ZSBkb2N1bWVudC5oZWFkIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgbGFzdCBwbGFjZSB0aGV5IHdpbGwgYmUpXG4gICAgLy8gbm90ZSB0aGlzIHZlcnkgdmVyeSBpbnRlbnRpb25hbGx5IHRhcmdldHMgYWxsIHN0eWxlIGVsZW1lbnRzIHJlZ2FyZGxlc3Mgb2YgdGhlIGtleSB0byBlbnN1cmVcbiAgICAvLyB0aGF0IGNyZWF0aW5nIGEgY2FjaGUgd29ya3MgaW5zaWRlIG9mIHJlbmRlciBvZiBhIFJlYWN0IGNvbXBvbmVudFxuXG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChzc3JTdHlsZXMsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAvLyB3ZSB3YW50IHRvIG9ubHkgbW92ZSBlbGVtZW50cyB3aGljaCBoYXZlIGEgc3BhY2UgaW4gdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgIC8vIGJlY2F1c2UgdGhhdCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBhbiBFbW90aW9uIDExIHNlcnZlci1zaWRlIHJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgICAvLyB3aGlsZSB3ZSB3aWxsIGFscmVhZHkgaWdub3JlIEVtb3Rpb24gMTEgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGJlY2F1c2Ugb2YgdGhlIDpub3QoW2RhdGEtc10pIHBhcnQgaW4gdGhlIHNlbGVjdG9yXG4gICAgICAvLyBFbW90aW9uIDEwIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBkaWQgbm90IGhhdmUgZGF0YS1zIChidXQgaW1wb3J0YW50bHkgZGlkIG5vdCBoYXZlIGEgc3BhY2UgaW4gdGhlaXIgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZXMpXG4gICAgICAvLyBzbyBjaGVja2luZyBmb3IgdGhlIHNwYWNlIGVuc3VyZXMgdGhhdCBsb2FkaW5nIEVtb3Rpb24gMTEgYWZ0ZXIgRW1vdGlvbiAxMCBoYXMgaW5zZXJ0ZWQgc29tZSBzdHlsZXNcbiAgICAgIC8vIHdpbGwgbm90IHJlc3VsdCBpbiB0aGUgRW1vdGlvbiAxMCBzdHlsZXMgYmVpbmcgZGVzdHJveWVkXG4gICAgICB2YXIgZGF0YUVtb3Rpb25BdHRyaWJ1dGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJyk7XG5cbiAgICAgIGlmIChkYXRhRW1vdGlvbkF0dHJpYnV0ZS5pbmRleE9mKCcgJykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3R5bGlzUGx1Z2lucyA9IG9wdGlvbnMuc3R5bGlzUGx1Z2lucyB8fCBkZWZhdWx0U3R5bGlzUGx1Z2lucztcblxuICB2YXIgaW5zZXJ0ZWQgPSB7fTtcbiAgdmFyIGNvbnRhaW5lcjtcbiAgdmFyIG5vZGVzVG9IeWRyYXRlID0gW107XG5cbiAge1xuICAgIGNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyIHx8IGRvY3VtZW50LmhlYWQ7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCggLy8gdGhpcyBtZWFucyB3ZSB3aWxsIGlnbm9yZSBlbGVtZW50cyB3aGljaCBkb24ndCBoYXZlIGEgc3BhY2UgaW4gdGhlbSB3aGljaFxuICAgIC8vIG1lYW5zIHRoYXQgdGhlIHN0eWxlIGVsZW1lbnRzIHdlJ3JlIGxvb2tpbmcgYXQgYXJlIG9ubHkgRW1vdGlvbiAxMSBzZXJ2ZXItcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXj1cXFwiXCIgKyBrZXkgKyBcIiBcXFwiXVwiKSwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHZhciBhdHRyaWIgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZW1vdGlvblwiKS5zcGxpdCgnICcpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuXG4gIHZhciBvbW5pcHJlc2VudFBsdWdpbnMgPSBbY29tcGF0LCByZW1vdmVMYWJlbF07XG5cbiAge1xuICAgIHZhciBjdXJyZW50U2hlZXQ7XG4gICAgdmFyIGZpbmFsaXppbmdQbHVnaW5zID0gW3N0cmluZ2lmeSwgcnVsZXNoZWV0KGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KHJ1bGUpO1xuICAgIH0pXTtcbiAgICB2YXIgc2VyaWFsaXplciA9IG1pZGRsZXdhcmUob21uaXByZXNlbnRQbHVnaW5zLmNvbmNhdChzdHlsaXNQbHVnaW5zLCBmaW5hbGl6aW5nUGx1Z2lucykpO1xuXG4gICAgdmFyIHN0eWxpcyA9IGZ1bmN0aW9uIHN0eWxpcyhzdHlsZXMpIHtcbiAgICAgIHJldHVybiBzZXJpYWxpemUoY29tcGlsZShzdHlsZXMpLCBzZXJpYWxpemVyKTtcbiAgICB9O1xuXG4gICAgX2luc2VydCA9IGZ1bmN0aW9uIGluc2VydChzZWxlY3Rvciwgc2VyaWFsaXplZCwgc2hlZXQsIHNob3VsZENhY2hlKSB7XG4gICAgICBjdXJyZW50U2hlZXQgPSBzaGVldDtcblxuICAgICAgc3R5bGlzKHNlbGVjdG9yID8gc2VsZWN0b3IgKyBcIntcIiArIHNlcmlhbGl6ZWQuc3R5bGVzICsgXCJ9XCIgOiBzZXJpYWxpemVkLnN0eWxlcyk7XG5cbiAgICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgICBjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgdmFyIGNhY2hlID0ge1xuICAgIGtleToga2V5LFxuICAgIHNoZWV0OiBuZXcgU3R5bGVTaGVldCh7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgICBzcGVlZHk6IG9wdGlvbnMuc3BlZWR5LFxuICAgICAgcHJlcGVuZDogb3B0aW9ucy5wcmVwZW5kLFxuICAgICAgaW5zZXJ0aW9uUG9pbnQ6IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnRcbiAgICB9KSxcbiAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICBpbnNlcnRlZDogaW5zZXJ0ZWQsXG4gICAgcmVnaXN0ZXJlZDoge30sXG4gICAgaW5zZXJ0OiBfaW5zZXJ0XG4gIH07XG4gIGNhY2hlLnNoZWV0Lmh5ZHJhdGUobm9kZXNUb0h5ZHJhdGUpO1xuICByZXR1cm4gY2FjaGU7XG59O1xuXG5leHBvcnQgeyBjcmVhdGVDYWNoZSBhcyBkZWZhdWx0IH07XG4iLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7XG4gICAgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHtcbiAgICAgIHZhciB0ID0gYXJndW1lbnRzW2VdO1xuICAgICAgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5leHBvcnQgeyBfZXh0ZW5kcyBhcyBkZWZhdWx0IH07IiwgInZhciBpc0Jyb3dzZXIgPSB0cnVlO1xuXG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZXMpIHtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9ICcnO1xuICBjbGFzc05hbWVzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgaWYgKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWdpc3RlcmVkU3R5bGVzLnB1c2gocmVnaXN0ZXJlZFtjbGFzc05hbWVdICsgXCI7XCIpO1xuICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICByYXdDbGFzc05hbWUgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJhd0NsYXNzTmFtZTtcbn1cbnZhciByZWdpc3RlclN0eWxlcyA9IGZ1bmN0aW9uIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKCAvLyB3ZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgaWYgdGhlXG4gIC8vIGNsYXNzIG5hbWUgY291bGQgYmUgdXNlZCBmdXJ0aGVyIGRvd25cbiAgLy8gdGhlIHRyZWUgYnV0IGlmIGl0J3MgYSBzdHJpbmcgdGFnLCB3ZSBrbm93IGl0IHdvbid0XG4gIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gYWRkIGl0IHRvIHJlZ2lzdGVyZWQgY2FjaGUuXG4gIC8vIHRoaXMgaW1wcm92ZXMgbWVtb3J5IHVzYWdlIHNpbmNlIHdlIGNhbiBhdm9pZCBzdG9yaW5nIHRoZSB3aG9sZSBzdHlsZSBzdHJpbmdcbiAgKGlzU3RyaW5nVGFnID09PSBmYWxzZSB8fCAvLyB3ZSBuZWVkIHRvIGFsd2F5cyBzdG9yZSBpdCBpZiB3ZSdyZSBpbiBjb21wYXQgbW9kZSBhbmRcbiAgLy8gaW4gbm9kZSBzaW5jZSBlbW90aW9uLXNlcnZlciByZWxpZXMgb24gd2hldGhlciBhIHN0eWxlIGlzIGluXG4gIC8vIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIGtub3cgd2hldGhlciBhIHN0eWxlIGlzIGdsb2JhbCBvciBub3RcbiAgLy8gYWxzbywgbm90ZSB0aGF0IHRoaXMgY2hlY2sgd2lsbCBiZSBkZWFkIGNvZGUgZWxpbWluYXRlZCBpbiB0aGUgYnJvd3NlclxuICBpc0Jyb3dzZXIgPT09IGZhbHNlICkgJiYgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPSBzZXJpYWxpemVkLnN0eWxlcztcbiAgfVxufTtcbnZhciBpbnNlcnRTdHlsZXMgPSBmdW5jdGlvbiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBzZXJpYWxpemVkO1xuXG4gICAgZG8ge1xuICAgICAgY2FjaGUuaW5zZXJ0KHNlcmlhbGl6ZWQgPT09IGN1cnJlbnQgPyBcIi5cIiArIGNsYXNzTmFtZSA6ICcnLCBjdXJyZW50LCBjYWNoZS5zaGVldCwgdHJ1ZSk7XG5cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgfSB3aGlsZSAoY3VycmVudCAhPT0gdW5kZWZpbmVkKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaW5zZXJ0U3R5bGVzLCByZWdpc3RlclN0eWxlcyB9O1xuIiwgIi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L211cm11cmhhc2gtanNcbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hYXBwbGVieS9zbWhhc2hlci9ibG9iLzYxYTA1MzBmMjgyNzdmMmU4NTBiZmMzOTYwMGNlNjFkMDJiNTE4ZGUvc3JjL011cm11ckhhc2gyLmNwcCNMMzctTDg2XG5mdW5jdGlvbiBtdXJtdXIyKHN0cikge1xuICAvLyAnbScgYW5kICdyJyBhcmUgbWl4aW5nIGNvbnN0YW50cyBnZW5lcmF0ZWQgb2ZmbGluZS5cbiAgLy8gVGhleSdyZSBub3QgcmVhbGx5ICdtYWdpYycsIHRoZXkganVzdCBoYXBwZW4gdG8gd29yayB3ZWxsLlxuICAvLyBjb25zdCBtID0gMHg1YmQxZTk5NTtcbiAgLy8gY29uc3QgciA9IDI0O1xuICAvLyBJbml0aWFsaXplIHRoZSBoYXNoXG4gIHZhciBoID0gMDsgLy8gTWl4IDQgYnl0ZXMgYXQgYSB0aW1lIGludG8gdGhlIGhhc2hcblxuICB2YXIgayxcbiAgICAgIGkgPSAwLFxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcblxuICBmb3IgKDsgbGVuID49IDQ7ICsraSwgbGVuIC09IDQpIHtcbiAgICBrID0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmIHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQ7XG4gICAgayA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gICAgayBePVxuICAgIC8qIGsgPj4+IHI6ICovXG4gICAgayA+Pj4gMjQ7XG4gICAgaCA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNikgXlxuICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIEhhbmRsZSB0aGUgbGFzdCBmZXcgYnl0ZXMgb2YgdGhlIGlucHV0IGFycmF5XG5cblxuICBzd2l0Y2ggKGxlbikge1xuICAgIGNhc2UgMzpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuXG4gICAgY2FzZSAyOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcblxuICAgIGNhc2UgMTpcbiAgICAgIGggXj0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICAgICAgaCA9XG4gICAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIERvIGEgZmV3IGZpbmFsIG1peGVzIG9mIHRoZSBoYXNoIHRvIGVuc3VyZSB0aGUgbGFzdCBmZXdcbiAgLy8gYnl0ZXMgYXJlIHdlbGwtaW5jb3Jwb3JhdGVkLlxuXG5cbiAgaCBePSBoID4+PiAxMztcbiAgaCA9XG4gIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgcmV0dXJuICgoaCBeIGggPj4+IDE1KSA+Pj4gMCkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgeyBtdXJtdXIyIGFzIGRlZmF1bHQgfTtcbiIsICJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYXNwZWN0UmF0aW86IDEsXG4gIGJvcmRlckltYWdlT3V0c2V0OiAxLFxuICBib3JkZXJJbWFnZVNsaWNlOiAxLFxuICBib3JkZXJJbWFnZVdpZHRoOiAxLFxuICBib3hGbGV4OiAxLFxuICBib3hGbGV4R3JvdXA6IDEsXG4gIGJveE9yZGluYWxHcm91cDogMSxcbiAgY29sdW1uQ291bnQ6IDEsXG4gIGNvbHVtbnM6IDEsXG4gIGZsZXg6IDEsXG4gIGZsZXhHcm93OiAxLFxuICBmbGV4UG9zaXRpdmU6IDEsXG4gIGZsZXhTaHJpbms6IDEsXG4gIGZsZXhOZWdhdGl2ZTogMSxcbiAgZmxleE9yZGVyOiAxLFxuICBncmlkUm93OiAxLFxuICBncmlkUm93RW5kOiAxLFxuICBncmlkUm93U3BhbjogMSxcbiAgZ3JpZFJvd1N0YXJ0OiAxLFxuICBncmlkQ29sdW1uOiAxLFxuICBncmlkQ29sdW1uRW5kOiAxLFxuICBncmlkQ29sdW1uU3BhbjogMSxcbiAgZ3JpZENvbHVtblN0YXJ0OiAxLFxuICBtc0dyaWRSb3c6IDEsXG4gIG1zR3JpZFJvd1NwYW46IDEsXG4gIG1zR3JpZENvbHVtbjogMSxcbiAgbXNHcmlkQ29sdW1uU3BhbjogMSxcbiAgZm9udFdlaWdodDogMSxcbiAgbGluZUhlaWdodDogMSxcbiAgb3BhY2l0eTogMSxcbiAgb3JkZXI6IDEsXG4gIG9ycGhhbnM6IDEsXG4gIHNjYWxlOiAxLFxuICB0YWJTaXplOiAxLFxuICB3aWRvd3M6IDEsXG4gIHpJbmRleDogMSxcbiAgem9vbTogMSxcbiAgV2Via2l0TGluZUNsYW1wOiAxLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiAxLFxuICBmbG9vZE9wYWNpdHk6IDEsXG4gIHN0b3BPcGFjaXR5OiAxLFxuICBzdHJva2VEYXNoYXJyYXk6IDEsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDEsXG4gIHN0cm9rZU1pdGVybGltaXQ6IDEsXG4gIHN0cm9rZU9wYWNpdHk6IDEsXG4gIHN0cm9rZVdpZHRoOiAxXG59O1xuXG5leHBvcnQgeyB1bml0bGVzc0tleXMgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCBoYXNoU3RyaW5nIGZyb20gJ0BlbW90aW9uL2hhc2gnO1xuaW1wb3J0IHVuaXRsZXNzIGZyb20gJ0BlbW90aW9uL3VuaXRsZXNzJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG52YXIgaHlwaGVuYXRlUmVnZXggPSAvW0EtWl18Xm1zL2c7XG52YXIgYW5pbWF0aW9uUmVnZXggPSAvX0VNT18oW15fXSs/KV8oW15dKj8pX0VNT18vZztcblxudmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBmdW5jdGlvbiBpc0N1c3RvbVByb3BlcnR5KHByb3BlcnR5KSB7XG4gIHJldHVybiBwcm9wZXJ0eS5jaGFyQ29kZUF0KDEpID09PSA0NTtcbn07XG5cbnZhciBpc1Byb2Nlc3NhYmxlVmFsdWUgPSBmdW5jdGlvbiBpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbic7XG59O1xuXG52YXIgcHJvY2Vzc1N0eWxlTmFtZSA9IC8qICNfX1BVUkVfXyAqL21lbW9pemUoZnVuY3Rpb24gKHN0eWxlTmFtZSkge1xuICByZXR1cm4gaXNDdXN0b21Qcm9wZXJ0eShzdHlsZU5hbWUpID8gc3R5bGVOYW1lIDogc3R5bGVOYW1lLnJlcGxhY2UoaHlwaGVuYXRlUmVnZXgsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbnZhciBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdhbmltYXRpb24nOlxuICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKGFuaW1hdGlvblJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gsIHAxLCBwMikge1xuICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICBuYW1lOiBwMSxcbiAgICAgICAgICAgICAgc3R5bGVzOiBwMixcbiAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHAxO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBpZiAodW5pdGxlc3Nba2V5XSAhPT0gMSAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxudmFyIG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlID0gJ0NvbXBvbmVudCBzZWxlY3RvcnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoICcgKyAnQGVtb3Rpb24vYmFiZWwtcGx1Z2luLCB0aGUgc3djIEVtb3Rpb24gcGx1Z2luLCBvciBhbm90aGVyIEVtb3Rpb24tYXdhcmUgJyArICdjb21waWxlciB0cmFuc2Zvcm0uJztcblxuZnVuY3Rpb24gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbikge1xuICBpZiAoaW50ZXJwb2xhdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdmFyIGNvbXBvbmVudFNlbGVjdG9yID0gaW50ZXJwb2xhdGlvbjtcblxuICBpZiAoY29tcG9uZW50U2VsZWN0b3IuX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICByZXR1cm4gY29tcG9uZW50U2VsZWN0b3I7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGVvZiBpbnRlcnBvbGF0aW9uKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICB7XG4gICAgICAgIHZhciBrZXlmcmFtZXMgPSBpbnRlcnBvbGF0aW9uO1xuXG4gICAgICAgIGlmIChrZXlmcmFtZXMuYW5pbSA9PT0gMSkge1xuICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGtleWZyYW1lcy5uYW1lLFxuICAgICAgICAgICAgc3R5bGVzOiBrZXlmcmFtZXMuc3R5bGVzLFxuICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ga2V5ZnJhbWVzLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2VyaWFsaXplZFN0eWxlcyA9IGludGVycG9sYXRpb247XG5cbiAgICAgICAgaWYgKHNlcmlhbGl6ZWRTdHlsZXMuc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IHNlcmlhbGl6ZWRTdHlsZXMubmV4dDtcblxuICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgbW9zdCBlZmZpY2llbnQgdGhpbmcgZXZlciBidXQgdGhpcyBpcyBhIHByZXR0eSByYXJlIGNhc2VcbiAgICAgICAgICAgIC8vIGFuZCB0aGVyZSB3aWxsIGJlIHZlcnkgZmV3IGl0ZXJhdGlvbnMgb2YgdGhpcyBnZW5lcmFsbHlcbiAgICAgICAgICAgIHdoaWxlIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IG5leHQubmFtZSxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IG5leHQuc3R5bGVzLFxuICAgICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzdHlsZXMgPSBzZXJpYWxpemVkU3R5bGVzLnN0eWxlcyArIFwiO1wiO1xuICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbik7XG4gICAgICB9XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB7XG4gICAgICAgIGlmIChtZXJnZWRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzQ3Vyc29yID0gY3Vyc29yO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzKTtcbiAgICAgICAgICBjdXJzb3IgPSBwcmV2aW91c0N1cnNvcjtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgcmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIHZhciBhc1N0cmluZyA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKHJlZ2lzdGVyZWQgPT0gbnVsbCkge1xuICAgIHJldHVybiBhc1N0cmluZztcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2FzU3RyaW5nXTtcbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkID8gY2FjaGVkIDogYXNTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9iaikge1xuICB2YXIgc3RyaW5nID0gJyc7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdHJpbmcgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqW2ldKSArIFwiO1wiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIGFzU3RyaW5nID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW2FzU3RyaW5nXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGtleSArIFwie1wiICsgcmVnaXN0ZXJlZFthc1N0cmluZ10gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUoYXNTdHJpbmcpKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCBhc1N0cmluZykgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJyAmJiAocmVnaXN0ZXJlZCA9PSBudWxsIHx8IHJlZ2lzdGVyZWRbdmFsdWVbMF1dID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHZhbHVlLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZVtfaV0pKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBrZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO3tdKylcXHMqKDt8JCkvZzsgLy8gdGhpcyBpcyB0aGUgY3Vyc29yIGZvciBrZXlmcmFtZXNcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cbnZhciBjdXJzb3I7XG5mdW5jdGlvbiBzZXJpYWxpemVTdHlsZXMoYXJncywgcmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsICYmIGFyZ3NbMF0uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYXJnc1swXTtcbiAgfVxuXG4gIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgdmFyIHN0eWxlcyA9ICcnO1xuICBjdXJzb3IgPSB1bmRlZmluZWQ7XG4gIHZhciBzdHJpbmdzID0gYXJnc1swXTtcblxuICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHJpbmdNb2RlID0gZmFsc2U7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHN0cmluZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBhc1RlbXBsYXRlU3RyaW5nc0FyciA9IHN0cmluZ3M7XG5cbiAgICBzdHlsZXMgKz0gYXNUZW1wbGF0ZVN0cmluZ3NBcnJbMF07XG4gIH0gLy8gd2Ugc3RhcnQgYXQgMSBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGZpcnN0IGFyZ1xuXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGFyZ3NbaV0pO1xuXG4gICAgaWYgKHN0cmluZ01vZGUpIHtcbiAgICAgIHZhciB0ZW1wbGF0ZVN0cmluZ3NBcnIgPSBzdHJpbmdzO1xuXG4gICAgICBzdHlsZXMgKz0gdGVtcGxhdGVTdHJpbmdzQXJyW2ldO1xuICAgIH1cbiAgfSAvLyB1c2luZyBhIGdsb2JhbCByZWdleCB3aXRoIC5leGVjIGlzIHN0YXRlZnVsIHNvIGxhc3RJbmRleCBoYXMgdG8gYmUgcmVzZXQgZWFjaCB0aW1lXG5cblxuICBsYWJlbFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG4gIHZhciBtYXRjaDsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YjgwOWMyY2YyOTQ5ODAwYTBmNjFmYjVcblxuICB3aGlsZSAoKG1hdGNoID0gbGFiZWxQYXR0ZXJuLmV4ZWMoc3R5bGVzKSkgIT09IG51bGwpIHtcbiAgICBpZGVudGlmaWVyTmFtZSArPSAnLScgKyBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufVxuXG5leHBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnZhciBzeW5jRmFsbGJhY2sgPSBmdW5jdGlvbiBzeW5jRmFsbGJhY2soY3JlYXRlKSB7XG4gIHJldHVybiBjcmVhdGUoKTtcbn07XG5cbnZhciB1c2VJbnNlcnRpb25FZmZlY3QgPSBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA/IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddIDogZmFsc2U7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCBzeW5jRmFsbGJhY2s7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrID0gdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IFJlYWN0LnVzZUxheW91dEVmZmVjdDtcblxuZXhwb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjaywgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrIH07XG4iLCAiaW1wb3J0IHsgaCBhcyBoYXNPd24sIEUgYXMgRW1vdGlvbiwgYyBhcyBjcmVhdGVFbW90aW9uUHJvcHMsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgVCBhcyBUaGVtZUNvbnRleHQsIGkgYXMgaXNEZXZlbG9wbWVudCB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LWYwZGU5NjhlLmJyb3dzZXIuZXNtLmpzJztcbmV4cG9ydCB7IEMgYXMgQ2FjaGVQcm92aWRlciwgVCBhcyBUaGVtZUNvbnRleHQsIGEgYXMgVGhlbWVQcm92aWRlciwgXyBhcyBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUsIHUgYXMgdXNlVGhlbWUsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgYiBhcyB3aXRoVGhlbWUgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC1mMGRlOTY4ZS5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBnZXRSZWdpc3RlcmVkU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICcuLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5cbnZhciBqc3ggPSBmdW5jdGlvbiBqc3godHlwZSwgcHJvcHMpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblxuICBpZiAocHJvcHMgPT0gbnVsbCB8fCAhaGFzT3duLmNhbGwocHJvcHMsICdjc3MnKSkge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50LmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgY3JlYXRlRWxlbWVudEFyZ0FycmF5ID0gbmV3IEFycmF5KGFyZ3NMZW5ndGgpO1xuICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbMF0gPSBFbW90aW9uO1xuICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbMV0gPSBjcmVhdGVFbW90aW9uUHJvcHModHlwZSwgcHJvcHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSB7XG4gICAgY3JlYXRlRWxlbWVudEFyZ0FycmF5W2ldID0gYXJnc1tpXTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50LmFwcGx5KG51bGwsIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSk7XG59O1xuXG4oZnVuY3Rpb24gKF9qc3gpIHtcbiAgdmFyIEpTWDtcblxuICAoZnVuY3Rpb24gKF9KU1gpIHt9KShKU1ggfHwgKEpTWCA9IF9qc3guSlNYIHx8IChfanN4LkpTWCA9IHt9KSkpO1xufSkoanN4IHx8IChqc3ggPSB7fSkpO1xuXG4vLyBpbml0aWFsIHJlbmRlciBmcm9tIGJyb3dzZXIsIGluc2VydEJlZm9yZSBjb250ZXh0LnNoZWV0LnRhZ3NbMF0gb3IgaWYgYSBzdHlsZSBoYXNuJ3QgYmVlbiBpbnNlcnRlZCB0aGVyZSB5ZXQsIGFwcGVuZENoaWxkXG4vLyBpbml0aWFsIGNsaWVudC1zaWRlIHJlbmRlciBmcm9tIFNTUiwgdXNlIHBsYWNlIG9mIGh5ZHJhdGluZyB0YWdcblxudmFyIEdsb2JhbCA9IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSkge1xuXG4gIHZhciBzdHlsZXMgPSBwcm9wcy5zdHlsZXM7XG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzdHlsZXNdLCB1bmRlZmluZWQsIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG4gIC8vIGJ1dCBpdCBpcyBiYXNlZCBvbiBhIGNvbnN0YW50IHRoYXQgd2lsbCBuZXZlciBjaGFuZ2UgYXQgcnVudGltZVxuICAvLyBpdCdzIGVmZmVjdGl2ZWx5IGxpa2UgaGF2aW5nIHR3byBpbXBsZW1lbnRhdGlvbnMgYW5kIHN3aXRjaGluZyB0aGVtIG91dFxuICAvLyBzbyBpdCdzIG5vdCBhY3R1YWxseSBicmVha2luZyBhbnl0aGluZ1xuXG5cbiAgdmFyIHNoZWV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGtleSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbFwiOyAvLyB1c2UgY2FzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2lzc3Vlcy8yNjc1XG5cbiAgICB2YXIgc2hlZXQgPSBuZXcgY2FjaGUuc2hlZXQuY29uc3RydWN0b3Ioe1xuICAgICAga2V5OiBrZXksXG4gICAgICBub25jZTogY2FjaGUuc2hlZXQubm9uY2UsXG4gICAgICBjb250YWluZXI6IGNhY2hlLnNoZWV0LmNvbnRhaW5lcixcbiAgICAgIHNwZWVkeTogY2FjaGUuc2hlZXQuaXNTcGVlZHlcbiAgICB9KTtcbiAgICB2YXIgcmVoeWRyYXRpbmcgPSBmYWxzZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLWVtb3Rpb249XFxcIlwiICsga2V5ICsgXCIgXCIgKyBzZXJpYWxpemVkLm5hbWUgKyBcIlxcXCJdXCIpO1xuXG4gICAgaWYgKGNhY2hlLnNoZWV0LnRhZ3MubGVuZ3RoKSB7XG4gICAgICBzaGVldC5iZWZvcmUgPSBjYWNoZS5zaGVldC50YWdzWzBdO1xuICAgIH1cblxuICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICByZWh5ZHJhdGluZyA9IHRydWU7IC8vIGNsZWFyIHRoZSBoYXNoIHNvIHRoaXMgbm9kZSB3b24ndCBiZSByZWNvZ25pemFibGUgYXMgcmVoeWRyYXRhYmxlIGJ5IG90aGVyIDxHbG9iYWwvPnNcblxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIGtleSk7XG4gICAgICBzaGVldC5oeWRyYXRlKFtub2RlXSk7XG4gICAgfVxuXG4gICAgc2hlZXRSZWYuY3VycmVudCA9IFtzaGVldCwgcmVoeWRyYXRpbmddO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH07XG4gIH0sIFtjYWNoZV0pO1xuICB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBzaGVldFJlZkN1cnJlbnQgPSBzaGVldFJlZi5jdXJyZW50O1xuICAgIHZhciBzaGVldCA9IHNoZWV0UmVmQ3VycmVudFswXSxcbiAgICAgICAgcmVoeWRyYXRpbmcgPSBzaGVldFJlZkN1cnJlbnRbMV07XG5cbiAgICBpZiAocmVoeWRyYXRpbmcpIHtcbiAgICAgIHNoZWV0UmVmQ3VycmVudFsxXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXJpYWxpemVkLm5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaW5zZXJ0IGtleWZyYW1lc1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLm5leHQsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChzaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgLy8gaWYgdGhpcyBkb2Vzbid0IGV4aXN0IHRoZW4gaXQgd2lsbCBiZSBudWxsIHNvIHRoZSBzdHlsZSBlbGVtZW50IHdpbGwgYmUgYXBwZW5kZWRcbiAgICAgIHZhciBlbGVtZW50ID0gc2hlZXQudGFnc1tzaGVldC50YWdzLmxlbmd0aCAtIDFdLm5leHRFbGVtZW50U2libGluZztcbiAgICAgIHNoZWV0LmJlZm9yZSA9IGVsZW1lbnQ7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH1cblxuICAgIGNhY2hlLmluc2VydChcIlwiLCBzZXJpYWxpemVkLCBzaGVldCwgZmFsc2UpO1xuICB9LCBbY2FjaGUsIHNlcmlhbGl6ZWQubmFtZV0pO1xuICByZXR1cm4gbnVsbDtcbn0pO1xuXG5mdW5jdGlvbiBjc3MoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG5mdW5jdGlvbiBrZXlmcmFtZXMoKSB7XG4gIHZhciBpbnNlcnRhYmxlID0gY3NzLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgdmFyIG5hbWUgPSBcImFuaW1hdGlvbi1cIiArIGluc2VydGFibGUubmFtZTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogXCJAa2V5ZnJhbWVzIFwiICsgbmFtZSArIFwie1wiICsgaW5zZXJ0YWJsZS5zdHlsZXMgKyBcIn1cIixcbiAgICBhbmltOiAxLFxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBcIl9FTU9fXCIgKyB0aGlzLm5hbWUgKyBcIl9cIiArIHRoaXMuc3R5bGVzICsgXCJfRU1PX1wiO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIGNsYXNzbmFtZXMgPSBmdW5jdGlvbiBjbGFzc25hbWVzKGFyZ3MpIHtcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBjbHMgPSAnJztcblxuICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgaWYgKGFyZyA9PSBudWxsKSBjb250aW51ZTtcbiAgICB2YXIgdG9BZGQgPSB2b2lkIDA7XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiBhcmcpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgIHRvQWRkID0gY2xhc3NuYW1lcyhhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIHRvQWRkID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gYXJnKSB7XG4gICAgICAgICAgICAgIGlmIChhcmdba10gJiYgaykge1xuICAgICAgICAgICAgICAgIHRvQWRkICYmICh0b0FkZCArPSAnICcpO1xuICAgICAgICAgICAgICAgIHRvQWRkICs9IGs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgdG9BZGQgPSBhcmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG9BZGQpIHtcbiAgICAgIGNscyAmJiAoY2xzICs9ICcgJyk7XG4gICAgICBjbHMgKz0gdG9BZGQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNscztcbn07XG5cbmZ1bmN0aW9uIG1lcmdlKHJlZ2lzdGVyZWQsIGNzcywgY2xhc3NOYW1lKSB7XG4gIHZhciByZWdpc3RlcmVkU3R5bGVzID0gW107XG4gIHZhciByYXdDbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZSk7XG5cbiAgaWYgKHJlZ2lzdGVyZWRTdHlsZXMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICByZXR1cm4gcmF3Q2xhc3NOYW1lICsgY3NzKHJlZ2lzdGVyZWRTdHlsZXMpO1xufVxuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWRBcnIgPSBfcmVmLnNlcmlhbGl6ZWRBcnI7XG4gIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2soZnVuY3Rpb24gKCkge1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJpYWxpemVkQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWRBcnJbaV0sIGZhbHNlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIENsYXNzTmFtZXMgPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcbiAgdmFyIGhhc1JlbmRlcmVkID0gZmFsc2U7XG4gIHZhciBzZXJpYWxpemVkQXJyID0gW107XG5cbiAgdmFyIGNzcyA9IGZ1bmN0aW9uIGNzcygpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjc3MgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgcmVuZGVyJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIGNhY2hlLnJlZ2lzdGVyZWQpO1xuICAgIHNlcmlhbGl6ZWRBcnIucHVzaChzZXJpYWxpemVkKTsgLy8gcmVnaXN0cmF0aW9uIGhhcyB0byBoYXBwZW4gaGVyZSBhcyB0aGUgcmVzdWx0IG9mIHRoaXMgbWlnaHQgZ2V0IGNvbnN1bWVkIGJ5IGBjeGBcblxuICAgIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBmYWxzZSk7XG4gICAgcmV0dXJuIGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB9O1xuXG4gIHZhciBjeCA9IGZ1bmN0aW9uIGN4KCkge1xuICAgIGlmIChoYXNSZW5kZXJlZCAmJiBpc0RldmVsb3BtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2N4IGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZShjYWNoZS5yZWdpc3RlcmVkLCBjc3MsIGNsYXNzbmFtZXMoYXJncykpO1xuICB9O1xuXG4gIHZhciBjb250ZW50ID0ge1xuICAgIGNzczogY3NzLFxuICAgIGN4OiBjeCxcbiAgICB0aGVtZTogUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpXG4gIH07XG4gIHZhciBlbGUgPSBwcm9wcy5jaGlsZHJlbihjb250ZW50KTtcbiAgaGFzUmVuZGVyZWQgPSB0cnVlO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgIGNhY2hlOiBjYWNoZSxcbiAgICBzZXJpYWxpemVkQXJyOiBzZXJpYWxpemVkQXJyXG4gIH0pLCBlbGUpO1xufSk7XG5cbmV4cG9ydCB7IENsYXNzTmFtZXMsIEdsb2JhbCwganN4IGFzIGNyZWF0ZUVsZW1lbnQsIGNzcywganN4LCBrZXlmcmFtZXMgfTtcbiIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIHRocm90dGxlID0gZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcbiAgdmFyIHdhaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDUwO1xuICB2YXIgdGltZSA9IERhdGUubm93KCk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRpbWUgKyB3YWl0IC0gRGF0ZS5ub3coKSA8IDApIHtcbiAgICAgIGZuLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICAgIHRpbWUgPSBEYXRlLm5vdygpO1xuICAgIH1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciBzb3J0TWFwQnlMYXJnZVRvU21hbGxWYWx1ZXMgPSBmdW5jdGlvbiBzb3J0TWFwQnlMYXJnZVRvU21hbGxWYWx1ZXMoYnJlYWtwb2ludHNNYXApIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhicmVha3BvaW50c01hcCkuc29ydChmdW5jdGlvbiAoX3JlZiwgX3JlZjIpIHtcbiAgICB2YXIgX3JlZjMgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKSxcbiAgICAgIGEgPSBfcmVmM1sxXTtcbiAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMiwgMiksXG4gICAgICBiID0gX3JlZjRbMV07XG4gICAgcmV0dXJuIGIgLSBhO1xuICB9KSk7XG59O1xuZXhwb3J0IHZhciBzb3J0TWFwQnlTbWFsbFRvTGFyZ2VWYWx1ZXMgPSBmdW5jdGlvbiBzb3J0TWFwQnlTbWFsbFRvTGFyZ2VWYWx1ZXMoYnJlYWtwb2ludHNNYXApIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhicmVha3BvaW50c01hcCkuc29ydChmdW5jdGlvbiAoX3JlZjUsIF9yZWY2KSB7XG4gICAgdmFyIF9yZWY3ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjUsIDIpLFxuICAgICAgYSA9IF9yZWY3WzFdO1xuICAgIHZhciBfcmVmOCA9IF9zbGljZWRUb0FycmF5KF9yZWY2LCAyKSxcbiAgICAgIGIgPSBfcmVmOFsxXTtcbiAgICByZXR1cm4gYSAtIGI7XG4gIH0pKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDdXJyZW50RXVpQnJlYWtwb2ludENvbnRleHQgfSBmcm9tICcuL2N1cnJlbnRfYnJlYWtwb2ludCc7XG5cbi8qKlxuICogSG9vayB1dGlsIC8gc3ludGFjdGljYWwgc3VnYXIgZm9yIHVzZUNvbnRleHQoKVxuICpcbiAqIFRoaXMgaG9vayBpcyBpbiBpdHMgb3duIHNlcGFyYXRlIGZpbGUgdG8gbWFrZSBtb2NraW5nIGl0XG4gKiBhcyBhIHRlc3RlbnYgZWFzeSBmb3IgSmVzdCB1bml0IHRlc3RzXG4gKi9cbmV4cG9ydCB2YXIgdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQgPSBmdW5jdGlvbiB1c2VDdXJyZW50RXVpQnJlYWtwb2ludCgpIHtcbiAgdmFyIGN1cnJlbnRCcmVha3BvaW50ID0gdXNlQ29udGV4dChDdXJyZW50RXVpQnJlYWtwb2ludENvbnRleHQpO1xuICByZXR1cm4gY3VycmVudEJyZWFrcG9pbnQ7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5pbXBvcnQgeyBjc3MgYXMgX2NzcyB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIF9leGNsdWRlZCA9IFtcImNsb25lRWxlbWVudFwiLCBcImNsYXNzTmFtZVwiXTtcbnZhciBfdGVtcGxhdGVPYmplY3Q7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoZSwgdCkgeyByZXR1cm4gdCB8fCAodCA9IGUuc2xpY2UoMCkpLCBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHQpIH0gfSkpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IHsgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uL2Vtb3Rpb24nO1xuaW1wb3J0IHsgY3NzLCBjeCB9IGZyb20gJy4uL2Vtb3Rpb24vY3NzJztcbmltcG9ydCB7IEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIgfSBmcm9tICcuLi9icmVha3BvaW50L2N1cnJlbnRfYnJlYWtwb2ludCc7XG5pbXBvcnQgeyBFdWlTeXN0ZW1Db250ZXh0LCBFdWlUaGVtZUNvbnRleHQsIEV1aU5lc3RlZFRoZW1lQ29udGV4dCwgRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQsIEV1aUNvbG9yTW9kZUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgRXVpRW1vdGlvblRoZW1lUHJvdmlkZXIgfSBmcm9tICcuL2Vtb3Rpb24nO1xuaW1wb3J0IHsgRXVpVGhlbWVNZW1vaXplZFN0eWxlc1Byb3ZpZGVyIH0gZnJvbSAnLi9zdHlsZV9tZW1vaXphdGlvbic7XG5pbXBvcnQgeyBidWlsZFRoZW1lLCBnZXRDb2xvck1vZGUsIGdldENvbXB1dGVkLCBtZXJnZURlZXAgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRoZW1lUHJvdmlkZXIgPSBmdW5jdGlvbiBFdWlUaGVtZVByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIF9zeXN0ZW0gPSBfcmVmLnRoZW1lLFxuICAgIF9jb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZSxcbiAgICBfbW9kaWZpY2F0aW9ucyA9IF9yZWYubW9kaWZ5LFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICB3cmFwcGVyUHJvcHMgPSBfcmVmLndyYXBwZXJQcm9wcztcbiAgdmFyIF91c2VDb250ZXh0ID0gdXNlQ29udGV4dChFdWlOZXN0ZWRUaGVtZUNvbnRleHQpLFxuICAgIGlzR2xvYmFsVGhlbWUgPSBfdXNlQ29udGV4dC5pc0dsb2JhbFRoZW1lLFxuICAgIGJvZHlDb2xvciA9IF91c2VDb250ZXh0LmJvZHlDb2xvcixcbiAgICBnbG9iYWxDU1NWYXJpYWJsZXMgPSBfdXNlQ29udGV4dC5nbG9iYWxDU1NWYXJpYWJsZXMsXG4gICAgc2V0R2xvYmFsQ1NTVmFyaWFibGVzID0gX3VzZUNvbnRleHQuc2V0R2xvYmFsQ1NTVmFyaWFibGVzO1xuICB2YXIgcGFyZW50U3lzdGVtID0gdXNlQ29udGV4dChFdWlTeXN0ZW1Db250ZXh0KTtcbiAgdmFyIHBhcmVudE1vZGlmaWNhdGlvbnMgPSB1c2VDb250ZXh0KEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0KTtcbiAgdmFyIHBhcmVudENvbG9yTW9kZSA9IHVzZUNvbnRleHQoRXVpQ29sb3JNb2RlQ29udGV4dCk7XG4gIHZhciBwYXJlbnRUaGVtZSA9IHVzZUNvbnRleHQoRXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKF9zeXN0ZW0gfHwgcGFyZW50U3lzdGVtKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBzeXN0ZW0gPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldFN5c3RlbSA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBwcmV2U3lzdGVtS2V5ID0gdXNlUmVmKHN5c3RlbS5rZXkpO1xuXG4gIC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHdpbmRvdyByZXNpemUgbGlzdGVuZXJzLCBvbmx5IHJlbmRlciBhXG4gIC8vIEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIgZm9yIHRoZSB0b3AgbGV2ZWwgcGFyZW50IHRoZW1lLCBvciBmb3JcbiAgLy8gbmVzdGVkIHRoZW1lcyBvbmx5IGlmIG1vZGlmaWVkIGJyZWFrcG9pbnQgb3ZlcnJpZGVzIGFyZSBwYXNzZWRcbiAgdmFyIEV1aUNvbmRpdGlvbmFsQnJlYWtwb2ludFByb3ZpZGVyID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGlzR2xvYmFsVGhlbWUgfHwgX21vZGlmaWNhdGlvbnMgIT09IG51bGwgJiYgX21vZGlmaWNhdGlvbnMgIT09IHZvaWQgMCAmJiBfbW9kaWZpY2F0aW9ucy5icmVha3BvaW50ID8gQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciA6IEZyYWdtZW50O1xuICB9LCBbaXNHbG9iYWxUaGVtZSwgX21vZGlmaWNhdGlvbnNdKTtcbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShtZXJnZURlZXAocGFyZW50TW9kaWZpY2F0aW9ucywgX21vZGlmaWNhdGlvbnMpKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgbW9kaWZpY2F0aW9ucyA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0TW9kaWZpY2F0aW9ucyA9IF91c2VTdGF0ZTRbMV07XG4gIHZhciBwcmV2TW9kaWZpY2F0aW9ucyA9IHVzZVJlZihtb2RpZmljYXRpb25zKTtcbiAgdmFyIF91c2VTdGF0ZTUgPSB1c2VTdGF0ZShnZXRDb2xvck1vZGUoX2NvbG9yTW9kZSwgcGFyZW50Q29sb3JNb2RlKSksXG4gICAgX3VzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTUsIDIpLFxuICAgIGNvbG9yTW9kZSA9IF91c2VTdGF0ZTZbMF0sXG4gICAgc2V0Q29sb3JNb2RlID0gX3VzZVN0YXRlNlsxXTtcbiAgdmFyIHByZXZDb2xvck1vZGUgPSB1c2VSZWYoY29sb3JNb2RlKTtcbiAgdmFyIGlzUGFyZW50VGhlbWUgPSB1c2VSZWYocHJldlN5c3RlbUtleS5jdXJyZW50ID09PSBwYXJlbnRTeXN0ZW0ua2V5ICYmIGNvbG9yTW9kZSA9PT0gcGFyZW50Q29sb3JNb2RlICYmIGlzRXF1YWwocGFyZW50TW9kaWZpY2F0aW9ucywgbW9kaWZpY2F0aW9ucykpO1xuICB2YXIgX3VzZVN0YXRlNyA9IHVzZVN0YXRlKGlzUGFyZW50VGhlbWUuY3VycmVudCAmJiBPYmplY3Qua2V5cyhwYXJlbnRUaGVtZSkubGVuZ3RoID8gX29iamVjdFNwcmVhZCh7fSwgcGFyZW50VGhlbWUpIC8vIEludGVudGlvbmFsbHkgY3JlYXRlIGEgbmV3IG9iamVjdCB0byBicmVhayByZWZlcmVudGlhbCBlcXVhbGl0eVxuICAgIDogZ2V0Q29tcHV0ZWQoc3lzdGVtLCBidWlsZFRoZW1lKG1vZGlmaWNhdGlvbnMsIFwiX1wiLmNvbmNhdChzeXN0ZW0ua2V5KSksIGNvbG9yTW9kZSkpLFxuICAgIF91c2VTdGF0ZTggPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU3LCAyKSxcbiAgICB0aGVtZSA9IF91c2VTdGF0ZThbMF0sXG4gICAgc2V0VGhlbWUgPSBfdXNlU3RhdGU4WzFdO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZXdTeXN0ZW0gPSBfc3lzdGVtIHx8IHBhcmVudFN5c3RlbTtcbiAgICBpZiAocHJldlN5c3RlbUtleS5jdXJyZW50ICE9PSBuZXdTeXN0ZW0ua2V5KSB7XG4gICAgICBzZXRTeXN0ZW0obmV3U3lzdGVtKTtcbiAgICAgIHByZXZTeXN0ZW1LZXkuY3VycmVudCA9IG5ld1N5c3RlbS5rZXk7XG4gICAgICBpc1BhcmVudFRoZW1lLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtfc3lzdGVtLCBwYXJlbnRTeXN0ZW1dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3TW9kaWZpY2F0aW9ucyA9IG1lcmdlRGVlcChwYXJlbnRNb2RpZmljYXRpb25zLCBfbW9kaWZpY2F0aW9ucyk7XG4gICAgaWYgKCFpc0VxdWFsKHByZXZNb2RpZmljYXRpb25zLmN1cnJlbnQsIG5ld01vZGlmaWNhdGlvbnMpKSB7XG4gICAgICBzZXRNb2RpZmljYXRpb25zKG5ld01vZGlmaWNhdGlvbnMpO1xuICAgICAgcHJldk1vZGlmaWNhdGlvbnMuY3VycmVudCA9IG5ld01vZGlmaWNhdGlvbnM7XG4gICAgICBpc1BhcmVudFRoZW1lLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtfbW9kaWZpY2F0aW9ucywgcGFyZW50TW9kaWZpY2F0aW9uc10pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZXdDb2xvck1vZGUgPSBnZXRDb2xvck1vZGUoX2NvbG9yTW9kZSwgcGFyZW50Q29sb3JNb2RlKTtcbiAgICBpZiAoIWlzRXF1YWwobmV3Q29sb3JNb2RlLCBwcmV2Q29sb3JNb2RlLmN1cnJlbnQpKSB7XG4gICAgICBzZXRDb2xvck1vZGUobmV3Q29sb3JNb2RlKTtcbiAgICAgIHByZXZDb2xvck1vZGUuY3VycmVudCA9IG5ld0NvbG9yTW9kZTtcbiAgICAgIGlzUGFyZW50VGhlbWUuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW19jb2xvck1vZGUsIHBhcmVudENvbG9yTW9kZV0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghaXNQYXJlbnRUaGVtZS5jdXJyZW50KSB7XG4gICAgICBzZXRUaGVtZShnZXRDb21wdXRlZChzeXN0ZW0sIGJ1aWxkVGhlbWUobW9kaWZpY2F0aW9ucywgXCJfXCIuY29uY2F0KHN5c3RlbS5rZXkpKSwgY29sb3JNb2RlKSk7XG4gICAgfVxuICB9LCBbY29sb3JNb2RlLCBzeXN0ZW0sIG1vZGlmaWNhdGlvbnNdKTtcbiAgdmFyIF91c2VTdGF0ZTkgPSB1c2VTdGF0ZSgpLFxuICAgIF91c2VTdGF0ZTEwID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlOSwgMiksXG4gICAgdGhlbWVDU1NWYXJpYWJsZXMgPSBfdXNlU3RhdGUxMFswXSxcbiAgICBfc2V0VGhlbWVDU1NWYXJpYWJsZXMgPSBfdXNlU3RhdGUxMFsxXTtcbiAgdmFyIHNldFRoZW1lQ1NTVmFyaWFibGVzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHZhcmlhYmxlcykge1xuICAgIHJldHVybiBfc2V0VGhlbWVDU1NWYXJpYWJsZXMoZnVuY3Rpb24gKHByZXZpb3VzKSB7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcmV2aW91cyksIHZhcmlhYmxlcyk7XG4gICAgfSk7XG4gIH0sIFtdKTtcbiAgdmFyIG5lc3RlZFRoZW1lQ29udGV4dCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0dsb2JhbFRoZW1lOiBmYWxzZSxcbiAgICAgIC8vIFRoZSB0aGVtZSB0aGF0IGRldGVybWluZXMgdGhlIGdsb2JhbCBib2R5IHN0eWxlc1xuICAgICAgYm9keUNvbG9yOiBpc0dsb2JhbFRoZW1lID8gdGhlbWUuY29sb3JzLnRleHQgOiBib2R5Q29sb3IsXG4gICAgICBoYXNEaWZmZXJlbnRDb2xvckZyb21HbG9iYWxUaGVtZTogaXNHbG9iYWxUaGVtZSA/IGZhbHNlIDogYm9keUNvbG9yICE9PSB0aGVtZS5jb2xvcnMudGV4dCxcbiAgICAgIGNvbG9yQ2xhc3NOYW1lOiBjc3MoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICAgICAgbGFiZWw6IGV1aUNvbG9yTW9kZS1cIiwgXCI7XFxuICAgICAgICBjb2xvcjogXCIsIFwiO1xcbiAgICAgIFwiXSkpLCBfY29sb3JNb2RlIHx8IGNvbG9yTW9kZSwgdGhlbWUuY29sb3JzLnRleHQpLFxuICAgICAgc2V0R2xvYmFsQ1NTVmFyaWFibGVzOiBpc0dsb2JhbFRoZW1lID8gc2V0VGhlbWVDU1NWYXJpYWJsZXMgOiBzZXRHbG9iYWxDU1NWYXJpYWJsZXMsXG4gICAgICBnbG9iYWxDU1NWYXJpYWJsZXM6IGlzR2xvYmFsVGhlbWUgPyB0aGVtZUNTU1ZhcmlhYmxlcyA6IGdsb2JhbENTU1ZhcmlhYmxlcyxcbiAgICAgIHNldE5lYXJlc3RUaGVtZUNTU1ZhcmlhYmxlczogc2V0VGhlbWVDU1NWYXJpYWJsZXMsXG4gICAgICB0aGVtZUNTU1ZhcmlhYmxlczogdGhlbWVDU1NWYXJpYWJsZXNcbiAgICB9O1xuICB9LCBbdGhlbWUsIGlzR2xvYmFsVGhlbWUsIGJvZHlDb2xvciwgX2NvbG9yTW9kZSwgY29sb3JNb2RlLCBzZXRHbG9iYWxDU1NWYXJpYWJsZXMsIGdsb2JhbENTU1ZhcmlhYmxlcywgc2V0VGhlbWVDU1NWYXJpYWJsZXMsIHRoZW1lQ1NTVmFyaWFibGVzXSk7XG4gIHZhciByZW5kZXJlZENoaWxkcmVuID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzR2xvYmFsVGhlbWUpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbjsgLy8gTm8gd3JhcHBlclxuICAgIH1cbiAgICB2YXIgX3JlZjIgPSB3cmFwcGVyUHJvcHMgfHwge30sXG4gICAgICBjbG9uZUVsZW1lbnQgPSBfcmVmMi5jbG9uZUVsZW1lbnQsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmMi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQpO1xuICAgIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICBjbGFzc05hbWU6IGN4KGNsYXNzTmFtZSwgbmVzdGVkVGhlbWVDb250ZXh0LmNvbG9yQ2xhc3NOYW1lKVxuICAgIH0pO1xuICAgIC8vIENvbmRpdGlvbiBhdm9pZHMgcmVuZGVyaW5nIGFuIGVtcHR5IEVtb3Rpb24gc2VsZWN0b3IgaWYgbm9cbiAgICAvLyB0aGVtZS1zcGVjaWZpYyBDU1MgdmFyaWFibGVzIGhhdmUgYmVlbiBzZXQgYnkgY2hpbGQgY29tcG9uZW50c1xuICAgIGlmICh0aGVtZUNTU1ZhcmlhYmxlcykge1xuICAgICAgcHJvcHMuY3NzID0gX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGxhYmVsOiAnZXVpQ1NTVmFyaWFibGVzJ1xuICAgICAgfSwgdGhlbWVDU1NWYXJpYWJsZXMpO1xuICAgIH1cbiAgICBpZiAoY2xvbmVFbGVtZW50KSB7XG4gICAgICByZXR1cm4gY2xvbmVFbGVtZW50V2l0aENzcyhjaGlsZHJlbiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICAgIGNsYXNzTmFtZTogY3goY2hpbGRyZW4ucHJvcHMuY2xhc3NOYW1lLCBwcm9wcy5jbGFzc05hbWUpXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjeCgnZXVpVGhlbWVQcm92aWRlcicsIHByb3BzLmNsYXNzTmFtZSlcbiAgICAgIH0pLCBjaGlsZHJlbik7XG4gICAgfVxuICB9LCBbaXNHbG9iYWxUaGVtZSwgdGhlbWVDU1NWYXJpYWJsZXMsIG5lc3RlZFRoZW1lQ29udGV4dCwgd3JhcHBlclByb3BzLCBjaGlsZHJlbl0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgaXNHbG9iYWxUaGVtZSAmJiB0aGVtZUNTU1ZhcmlhYmxlcyAmJiBfX19FbW90aW9uSlNYKEdsb2JhbCwge1xuICAgIHN0eWxlczogLyojX19QVVJFX18qL19jc3Moe1xuICAgICAgJzpyb290JzogdGhlbWVDU1NWYXJpYWJsZXNcbiAgICB9LCBcIjtsYWJlbDpFdWlUaGVtZVByb3ZpZGVyO1wiKVxuICB9KSwgX19fRW1vdGlvbkpTWChFdWlDb2xvck1vZGVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbG9yTW9kZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aVN5c3RlbUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogc3lzdGVtXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogbW9kaWZpY2F0aW9uc1xuICB9LCBfX19FbW90aW9uSlNYKEV1aVRoZW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB0aGVtZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aU5lc3RlZFRoZW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBuZXN0ZWRUaGVtZUNvbnRleHRcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlUaGVtZU1lbW9pemVkU3R5bGVzUHJvdmlkZXIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpRW1vdGlvblRoZW1lUHJvdmlkZXIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpQ29uZGl0aW9uYWxCcmVha3BvaW50UHJvdmlkZXIsIG51bGwsIHJlbmRlcmVkQ2hpbGRyZW4pKSkpKSkpKSk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGpzeCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcblxuLyoqXG4gKiBSZWFjdC5jbG9uZUVsZW1lbnQgZG9lcyBub3Qgd29yayBpZiB0aGUgY2xvbmVkIGVsZW1lbnQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIHRoZVxuICogYGNzc2AgcHJvcCAtIGFzIGEgcmVzdWx0LCB3ZSBuZWVkIHRvIHVzZSBganN4KClgIHRvIG1hbnVhbGx5IGNsb25lIHRoZSBlbGVtZW50XG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9pc3N1ZXMvMTQwNFxuICovXG5leHBvcnQgdmFyIGNsb25lRWxlbWVudFdpdGhDc3MgPSBmdW5jdGlvbiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBjc3NPcmRlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJ2FmdGVyJztcbiAgdmFyIGNsb25lZEVsZW1lbnQgPSBlbGVtZW50LnByb3BzLl9fRU1PVElPTl9UWVBFX1BMRUFTRV9ET19OT1RfVVNFX18gfHwgZWxlbWVudC50eXBlOyAvLyBFTU9USU9OX1RZUEUgaGFuZGxlcyBub24tUmVhY3QgZWxlbWVudHMgKG5hdGl2ZSBKU1gvSFRNTCBub2RlcylcblxuICB2YXIgY2xvbmVkUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWxlbWVudC5rZXkgPyB7XG4gICAga2V5OiBlbGVtZW50LmtleVxuICB9IDoge30pLCB7fSwge1xuICAgIHJlZjogZWxlbWVudC5yZWZcbiAgfSwgZWxlbWVudC5wcm9wcyksIHByb3BzKTtcbiAgaWYgKHByb3BzLmNzcyB8fCBlbGVtZW50LnByb3BzLmNzcykge1xuICAgIGNsb25lZFByb3BzLmNzcyA9IGNzc09yZGVyID09PSAnYmVmb3JlJyA/IFtwcm9wcy5jc3MsIGVsZW1lbnQucHJvcHMuY3NzXSA6IFtlbGVtZW50LnByb3BzLmNzcywgcHJvcHMuY3NzXTtcbiAgfVxuICByZXR1cm4ganN4KGNsb25lZEVsZW1lbnQsIGNsb25lZFByb3BzKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNoYXJhdCwgREVDTEFSQVRJT04sIGhhc2gsIGluZGV4b2YsIE1PWiwgcmVwbGFjZSwgc3RybGVuLCBXRUJLSVQgfSBmcm9tICdzdHlsaXMnO1xuXG4vLyBUaGlzIGlzIGEgaGVhdmlseSBtb2RpZmllZCB2ZXJzaW9uIG9mIEVtb3Rpb24ncyBkZWZhdWx0IGBwcmVmaXhlcmAgcGx1Z2luXG4vLyAobW9zdGx5IHJlbW92aW5nIHVubmVjZXNzYXJ5IHByZWZpeGVzKSwgd2hpY2ggaXMgaW4gdHVybiBhIG1vZGlmaWVkIHZlcnNpb25cbi8vIG9mIHN0eWxpcydzIGRlZmF1bHQgcHJlZml4ZXIuXG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vYmxvYi9tYWluL3BhY2thZ2VzL2NhY2hlL3NyYy9wcmVmaXhlci5qc1xuLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLXRlbXBsYXRlICovXG5cbi8qKlxuICogVGhpcyBpcyBhIHN0eWxpcyBwbHVnaW4gd2hpY2ggaGFuZGxlcyBhdXRvLXByZWZpeGluZyBDU1Mgb3V0cHV0IGJ5IEVtb3Rpb24uXG4gKlxuICogKlBsZWFzZSBub3RlKjogRVVJL0VsYXN0aWMgdGFyZ2V0cyBsYXRlc3QgZXZlcmdyZWVuIGJyb3dzZXJzIGZvciBzdXBwb3J0IG9ubHkuXG4gKiBAc2VlIGh0dHBzOi8vd3d3LmVsYXN0aWMuY28vc3VwcG9ydC9tYXRyaXgjbWF0cml4X2Jyb3dzZXJzXG4gKi9cbmV4cG9ydCB2YXIgZXVpU3R5bGlzUHJlZml4ZXIgPSBmdW5jdGlvbiBldWlTdHlsaXNQcmVmaXhlcihlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKSBpZiAoIWVsZW1lbnQucmV0dXJuKSBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgREVDTEFSQVRJT046XG4gICAgICBlbGVtZW50LnJldHVybiA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCk7XG4gICAgICBicmVhaztcbiAgfVxufTtcbnZhciBwcmVmaXggPSBmdW5jdGlvbiBwcmVmaXgodmFsdWUsIGxlbmd0aCkge1xuICBzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcbiAgICAvKipcbiAgICAgKiBgLXdlYmtpdGAgcHJlZml4ZXNcbiAgICAgKi9cbiAgICAvLyB1c2VyLXNlbGVjdCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vbWRuLWNzc19wcm9wZXJ0aWVzX3VzZXItc2VsZWN0IC0gbmVlZGVkIGJ5IFNhZmFyaVxuICAgIGNhc2UgNDI0NjpcbiAgICAvLyB0ZXh0LWRlY29yYXRpb24gLSBodHRwczovL2Nhbml1c2UuY29tL3RleHQtZGVjb3JhdGlvbiAtIGlPUyBTYWZhcmkgaXMgdGhlIG1haW4gb25lIHRoYXQgbmVlZHMgdGhpc1xuICAgIGNhc2UgNTU3MjpcbiAgICAvLyB0ZXh0LXNpemUtYWRqdXN0IC0gaHR0cHM6Ly9jYW5pdXNlLmNvbS90ZXh0LXNpemUtYWRqdXN0IC0gaU9TIFNhZmFyaVxuICAgIGNhc2UgMjc1NjpcbiAgICAvLyBib3gtZGVjb3JhdGlvbi1icmVhayAtIGh0dHBzOi8vY2FuaXVzZS5jb20vY3NzLWJveGRlY29yYXRpb25icmVhayAtIENocm9tZSAmIFNhZmFyaVxuICAgIGNhc2UgMzAwNTpcbiAgICAvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSAtIENocm9tZVxuICAgIGNhc2UgNjM5MTpcbiAgICBjYXNlIDU4Nzk6XG4gICAgY2FzZSA1NjIzOlxuICAgIGNhc2UgNjEzNTpcbiAgICBjYXNlIDQ1OTk6XG4gICAgY2FzZSA0ODU1OlxuICAgIC8vIHByaW50LWNvbG9yLWFkanVzdCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vY3NzLWNvbG9yLWFkanVzdCAtIENocm9tZVxuICAgIGNhc2UgMjI4MjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuXG4gICAgLy8gYmFja2dyb3VuZC1jbGlwIC0gaHR0cHM6Ly9jYW5pdXNlLmNvbS9iYWNrZ3JvdW5kLWNsaXAtdGV4dCAtIENocm9tZSwgb25seSBmb3IgYHRleHRgIHZhbHVlXG4gICAgY2FzZSA0MjE1OlxuICAgICAgaWYgKH5pbmRleG9mKHZhbHVlLCAndGV4dCcpKSB7XG4gICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgLyoqXG4gICAgICogSW50cmluc2ljL2V4dHJpbnNpYyBzaXppbmcgdmFsdWUgcHJlZml4ZXNcbiAgICAgKiBgc3RyZXRjaGAgYWx0ZXJuYXRpdmVzIG5lZWRlZCBieSBDaHJvbWUgJiBGaXJlZm94IC0gaHR0cHM6Ly9jYW5pdXNlLmNvbS9pbnRyaW5zaWMtd2lkdGhcbiAgICAgKi9cbiAgICAvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuICAgIGNhc2UgODExNjpcbiAgICBjYXNlIDcwNTk6XG4gICAgY2FzZSA1NzUzOlxuICAgIGNhc2UgNTUzNTpcbiAgICBjYXNlIDU0NDU6XG4gICAgY2FzZSA1NzAxOlxuICAgIGNhc2UgNDkzMzpcbiAgICBjYXNlIDQ2Nzc6XG4gICAgY2FzZSA1NTMzOlxuICAgIGNhc2UgNTc4OTpcbiAgICBjYXNlIDUwMjE6XG4gICAgY2FzZSA0NzY1OlxuICAgICAgLy8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuICAgICAgaWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNikgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG4gICAgICAgIC8vIChmKWlsbC1hdmFpbGFibGVcbiAgICAgICAgY2FzZSAxMDI6XG4gICAgICAgICAgaWYgKH5pbmRleG9mKHZhbHVlLCAnZmlsbC1hdmFpbGFibGUnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KSguKyktKFteXSspLywgJyQxJyArIFdFQktJVCArICckMi0kMycgKyAnJDEnICsgTU9aICsgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMykgPT09IDEwOCA/ICckMycgOiAnJDItJDMnKSk7XG4gICAgICAgICAgfVxuICAgICAgICAvLyAocyl0cmV0Y2hcbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgaWYgKH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCkgKyB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59OyIsICJpbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcblxuZnVuY3Rpb24gaW5zZXJ0V2l0aG91dFNjb3BpbmcoY2FjaGUsIHNlcmlhbGl6ZWQpIHtcbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjYWNoZS5pbnNlcnQoJycsIHNlcmlhbGl6ZWQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyhyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIGNyZWF0ZUVtb3Rpb24gPSBmdW5jdGlvbiBjcmVhdGVFbW90aW9uKG9wdGlvbnMpIHtcbiAgdmFyIGNhY2hlID0gY3JlYXRlQ2FjaGUob3B0aW9ucyk7XG5cbiAgY2FjaGUuc2hlZXQuc3BlZWR5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cbiAgICB0aGlzLmlzU3BlZWR5ID0gdmFsdWU7XG4gIH07XG5cbiAgY2FjaGUuY29tcGF0ID0gdHJ1ZTtcblxuICB2YXIgY3NzID0gZnVuY3Rpb24gY3NzKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkLCB1bmRlZmluZWQpO1xuICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIGNhY2hlLnJlZ2lzdGVyZWQpO1xuICAgIHZhciBhbmltYXRpb24gPSBcImFuaW1hdGlvbi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgICBpbnNlcnRXaXRob3V0U2NvcGluZyhjYWNoZSwge1xuICAgICAgbmFtZTogc2VyaWFsaXplZC5uYW1lLFxuICAgICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBhbmltYXRpb24gKyBcIntcIiArIHNlcmlhbGl6ZWQuc3R5bGVzICsgXCJ9XCJcbiAgICB9KTtcbiAgICByZXR1cm4gYW5pbWF0aW9uO1xuICB9O1xuXG4gIHZhciBpbmplY3RHbG9iYWwgPSBmdW5jdGlvbiBpbmplY3RHbG9iYWwoKSB7XG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY2FjaGUucmVnaXN0ZXJlZCk7XG4gICAgaW5zZXJ0V2l0aG91dFNjb3BpbmcoY2FjaGUsIHNlcmlhbGl6ZWQpO1xuICB9O1xuXG4gIHZhciBjeCA9IGZ1bmN0aW9uIGN4KCkge1xuICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZShjYWNoZS5yZWdpc3RlcmVkLCBjc3MsIGNsYXNzbmFtZXMoYXJncykpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY3NzOiBjc3MsXG4gICAgY3g6IGN4LFxuICAgIGluamVjdEdsb2JhbDogaW5qZWN0R2xvYmFsLFxuICAgIGtleWZyYW1lczoga2V5ZnJhbWVzLFxuICAgIGh5ZHJhdGU6IGZ1bmN0aW9uIGh5ZHJhdGUoaWRzKSB7XG4gICAgICBpZHMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGNhY2hlLmluc2VydGVkW2tleV0gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBmbHVzaDogZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgICBjYWNoZS5yZWdpc3RlcmVkID0ge307XG4gICAgICBjYWNoZS5pbnNlcnRlZCA9IHt9O1xuICAgICAgY2FjaGUuc2hlZXQuZmx1c2goKTtcbiAgICB9LFxuICAgIHNoZWV0OiBjYWNoZS5zaGVldCxcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgZ2V0UmVnaXN0ZXJlZFN0eWxlczogZ2V0UmVnaXN0ZXJlZFN0eWxlcy5iaW5kKG51bGwsIGNhY2hlLnJlZ2lzdGVyZWQpLFxuICAgIG1lcmdlOiBtZXJnZS5iaW5kKG51bGwsIGNhY2hlLnJlZ2lzdGVyZWQsIGNzcylcbiAgfTtcbn07XG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb24gY2xhc3NuYW1lcyhhcmdzKSB7XG4gIHZhciBjbHMgPSAnJztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoYXJnID09IG51bGwpIGNvbnRpbnVlO1xuICAgIHZhciB0b0FkZCA9IHZvaWQgMDtcblxuICAgIHN3aXRjaCAodHlwZW9mIGFyZykge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgdG9BZGQgPSBjbGFzc25hbWVzKGFyZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gYXJnKSB7XG4gICAgICAgICAgICAgIGlmIChhcmdba10gJiYgaykge1xuICAgICAgICAgICAgICAgIHRvQWRkICYmICh0b0FkZCArPSAnICcpO1xuICAgICAgICAgICAgICAgIHRvQWRkICs9IGs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgdG9BZGQgPSBhcmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG9BZGQpIHtcbiAgICAgIGNscyAmJiAoY2xzICs9ICcgJyk7XG4gICAgICBjbHMgKz0gdG9BZGQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNscztcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZUVtb3Rpb24gYXMgZGVmYXVsdCB9O1xuIiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBjcmVhdGVFbW90aW9uIGZyb20gJ0BlbW90aW9uL2Nzcy9jcmVhdGUtaW5zdGFuY2UnO1xuaW1wb3J0IHsgZXVpU3R5bGlzUHJlZml4ZXIgfSBmcm9tICcuL3ByZWZpeGVyJztcblxuLyoqXG4gKiBUaGlzIGN1c3RvbSBpbnN0YW5jZSBpcyBuZWVkZWQgZm9yIGludGVybmFsIEVVSSBjb21wb25lbnRzIHRvIGNhbGxcbiAqIGBAZW1vdGlvbi9jc3NgIHdpdGggRVVJJ3MgY3VzdG9tIHByZWZpeGVyIHBsdWdpblxuICogQHNlZSBodHRwczovL2Vtb3Rpb24uc2gvZG9jcy9AZW1vdGlvbi9jc3MjY3VzdG9tLWluc3RhbmNlc1xuICpcbiAqIE5PVEU6IFVzYWdlIGlzIGN1cnJlbnRseSBiZWluZyBiZXRhIHRlc3RlZCBpbnRlcm5hbGx5LFxuICogYW5kIGlzIG5vdCB5ZXQgaW50ZW5kZWQgdG8gYmUgYSBwdWJsaWMgZXhwb3J0XG4gKi9cbnZhciBfY3JlYXRlRW1vdGlvbiA9IGNyZWF0ZUVtb3Rpb24oe1xuICAgIGtleTogJ2NzcycsXG4gICAgc3R5bGlzUGx1Z2luczogW2V1aVN0eWxpc1ByZWZpeGVyXSxcbiAgICBzcGVlZHk6IGZhbHNlXG4gIH0pLFxuICBjc3MgPSBfY3JlYXRlRW1vdGlvbi5jc3MsXG4gIGN4ID0gX2NyZWF0ZUVtb3Rpb24uY3gsXG4gIGNhY2hlID0gX2NyZWF0ZUVtb3Rpb24uY2FjaGU7XG5leHBvcnQgeyBjc3MsIGN4LCBjYWNoZSB9OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVGhlbWVQcm92aWRlciB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi9ob29rcyc7XG5cbi8qKlxuICogQHNlZSBodHRwczovL2Vtb3Rpb24uc2gvZG9jcy90aGVtaW5nXG4gKiBUaGlzIEVtb3Rpb24gdGhlbWUgcHJvdmlkZXIgaXMgYWRkZWQgZm9yICpjb25zdW1lciB1c2FnZSogJiBjb252ZW5pZW5jZSBvbmx5LlxuICpcbiAqIEVVSSBzaG91bGQgc3RpY2sgdG8gdXNpbmcgb3VyIG93biBjb250ZXh0L2B1c2VFdWlUaGVtZWAgaW50ZXJuYWxseVxuICogaW5zdGVhZCBvZiBFbW90aW9uJ3Mgc2hvcnRoYW5kIGBjc3M9e3RoZW1lID0+IHt9fWAgQVBJLiBJZiBjb25zdW1lcnNcbiAqIHNldCB0aGVpciBvd24gdGhlbWUgdmlhIDxUaGVtZVByb3ZpZGVyPjsgRVVJJ3Mgc3R5bGVzIHNob3VsZCBjb250aW51ZVxuICogd29ya2luZyBhcy1pcy5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRW1vdGlvblRoZW1lUHJvdmlkZXIgPSBmdW5jdGlvbiBFdWlFbW90aW9uVGhlbWVQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChUaGVtZVByb3ZpZGVyLCB7XG4gICAgdGhlbWU6IGV1aVRoZW1lQ29udGV4dFxuICB9LCBjaGlsZHJlbik7XG59OyIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVVwZGF0ZUVmZmVjdCB9IGZyb20gJy4uL2hvb2tzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi9ob29rcyc7XG5pbXBvcnQgeyBlbWl0RXVpUHJvdmlkZXJXYXJuaW5nIH0gZnJvbSAnLi93YXJuaW5nJztcblxuLy8gVHlwaWNhbGx5IGFuIG9iamVjdCBvZiBzZXJpYWxpemVkIGNzc2BgIHN0eWxlcywgYnV0IGNhbiBoYXZlIGFueSBhbW91bnQgb2YgbmVzdGluZywgc28gaXQncyBub3Qgd29ydGggaXQgdG8gdHJ5IGFuZCBzdHJpY3RseSB0eXBlIHRoaXNcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRoZW1lTWVtb2l6ZWRTdHlsZXNDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQobmV3IFdlYWtNYXAoKSk7XG5leHBvcnQgdmFyIEV1aVRoZW1lTWVtb2l6ZWRTdHlsZXNQcm92aWRlciA9IGZ1bmN0aW9uIEV1aVRoZW1lTWVtb2l6ZWRTdHlsZXNQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIC8vIE5vdGU6IHdlICpzaG91bGQgbm90KiB1c2UgYHVzZU1lbW9gIGluc3RlYWQgb2YgYHVzZVN0YXRlYCBoZXJlLCBhcyB1c2VNZW1vIGlzIG5vdCBndWFyYW50ZWVkXG4gIC8vIGFuZCBpdHMgY2FjaGUgY2FuIGdldCB0aHJvd24gYXdheSBieSBSZWFjdCAoaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZU1lbW8jY2F2ZWF0cylcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG5ldyBXZWFrTWFwKCkpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGNvbXBvbmVudFN0eWxlcyA9IF91c2VTdGF0ZTJbMF0sXG4gICAgcmVyZW5kZXJTdHlsZXMgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIC8vIE9uIHRoZW1lIHVwZGF0ZSwgd2lwZSB0aGUgbWFwLCB3aGljaCBjYXVzZXMgdGhlIGJlbG93IGhvb2sgdG8gcmVjb21wdXRlIGFsbCBzdHlsZXNcbiAgdmFyIF91c2VFdWlUaGVtZSA9IHVzZUV1aVRoZW1lKCksXG4gICAgZXVpVGhlbWUgPSBfdXNlRXVpVGhlbWUuZXVpVGhlbWU7XG4gIHVzZVVwZGF0ZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmVyZW5kZXJTdHlsZXMobmV3IFdlYWtNYXAoKSk7XG4gIH0sIFtldWlUaGVtZV0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUaGVtZU1lbW9pemVkU3R5bGVzQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb21wb25lbnRTdHlsZXNcbiAgfSwgY2hpbGRyZW4pO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCB1dGlsIHByaW1hcmlseSByZXNwb25zaWJsZSBmb3IgZ2V0dGluZyB0aGUgbWVtb2l6ZWQgc3R5bGVzIChpZiB0aGV5IGV4aXN0KVxuICogYW5kIGlmIG5vdCwgZ2VuZXJhdGluZyBhbmQgc2V0dGluZyB0aGUgc3R5bGVzLiBEUlllZCBvdXQgdG8gZmFjaWxpdGF0ZSB1c2FnZVxuICogYmV0d2VlbiBib3RoIGhvb2svZnVuY3Rpb24gY29tcG9uZW50cyBhbmQgSE9DL2NsYXNzIGNvbXBvbmVudHNcbiAqL1xudmFyIGdldE1lbW9pemVkU3R5bGVzID0gZnVuY3Rpb24gZ2V0TWVtb2l6ZWRTdHlsZXMoc3R5bGVzR2VuZXJhdG9yLCBzdHlsZXNNYXAsIGV1aVRoZW1lQ29udGV4dCkge1xuICBpZiAoIXN0eWxlc0dlbmVyYXRvci5uYW1lKSB7XG4gICAgZW1pdEV1aVByb3ZpZGVyV2FybmluZygnU3R5bGVzIGFyZSBtZW1vaXplZCBwZXIgZnVuY3Rpb24uIFlvdXIgc3R5bGUgZnVuY3Rpb25zIG11c3QgYmUgc3RhdGljYWxseSBkZWZpbmVkIGluIG9yZGVyIHRvIG5vdCBjcmVhdGUgYSBuZXcgbWFwIGVudHJ5IGV2ZXJ5IHJlcmVuZGVyLicpO1xuICB9XG4gIHZhciBleGlzdGluZ1N0eWxlcyA9IHN0eWxlc01hcC5nZXQoc3R5bGVzR2VuZXJhdG9yKTtcbiAgaWYgKGV4aXN0aW5nU3R5bGVzKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nU3R5bGVzO1xuICB9IGVsc2Uge1xuICAgIHZhciBnZW5lcmF0ZWRTdHlsZXMgPSBzdHlsZXNHZW5lcmF0b3IoZXVpVGhlbWVDb250ZXh0KTtcbiAgICBzdHlsZXNNYXAuc2V0KHN0eWxlc0dlbmVyYXRvciwgZ2VuZXJhdGVkU3R5bGVzKTtcbiAgICByZXR1cm4gZ2VuZXJhdGVkU3R5bGVzO1xuICB9XG59O1xuXG4vKipcbiAqIEhvb2sgdGhhdCBtZW1vaXplcyB0aGUgcmV0dXJuZWQgdmFsdWVzIG9mIGNvbXBvbmVudHMgc3R5bGUgZm5zL2dlbmVyYXRvcnNcbiAqIHBlci10aGVtZVxuICovXG5leHBvcnQgdmFyIHVzZUV1aU1lbW9pemVkU3R5bGVzID0gZnVuY3Rpb24gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoc3R5bGVzR2VuZXJhdG9yKSB7XG4gIHZhciBtZW1vaXplZFN0eWxlcyA9IHVzZUNvbnRleHQoRXVpVGhlbWVNZW1vaXplZFN0eWxlc0NvbnRleHQpO1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIG1lbW9pemVkQ29tcG9uZW50U3R5bGVzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldE1lbW9pemVkU3R5bGVzKHN0eWxlc0dlbmVyYXRvciwgbWVtb2l6ZWRTdHlsZXMsIGV1aVRoZW1lQ29udGV4dCk7XG4gIH0sIFtzdHlsZXNHZW5lcmF0b3IsIG1lbW9pemVkU3R5bGVzLCBldWlUaGVtZUNvbnRleHRdKTtcbiAgcmV0dXJuIG1lbW9pemVkQ29tcG9uZW50U3R5bGVzO1xufTtcblxuLyoqXG4gKiBIT0MgZm9yIGNsYXNzIGNvbXBvbmVudHNcbiAqIFN5bnRheCBpcyBtb3N0bHkgY29waWVkIGZyb20gd2l0aEV1aVRoZW1lIEhPQ1xuICovXG5cbmV4cG9ydCB2YXIgd2l0aEV1aVN0eWxlc01lbW9pemVyID0gZnVuY3Rpb24gd2l0aEV1aVN0eWxlc01lbW9pemVyKENvbXBvbmVudCkge1xuICB2YXIgY29tcG9uZW50TmFtZSA9IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50V2l0aFN0eWxlc01lbW9pemVyJztcbiAgdmFyIFJlbmRlciA9IGZ1bmN0aW9uIFJlbmRlcihwcm9wcywgcmVmKSB7XG4gICAgdmFyIG1lbW9pemVkU3R5bGVzID0gdXNlQ29udGV4dChFdWlUaGVtZU1lbW9pemVkU3R5bGVzQ29udGV4dCk7XG4gICAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gICAgdmFyIHN0eWxlc01lbW9pemVyID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHN0eWxlc0dlbmVyYXRvcikge1xuICAgICAgcmV0dXJuIGdldE1lbW9pemVkU3R5bGVzKHN0eWxlc0dlbmVyYXRvciwgbWVtb2l6ZWRTdHlsZXMsIGV1aVRoZW1lQ29udGV4dCk7XG4gICAgfSwgW21lbW9pemVkU3R5bGVzLCBldWlUaGVtZUNvbnRleHRdKTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIHN0eWxlc01lbW9pemVyOiBzdHlsZXNNZW1vaXplcixcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMpKTtcbiAgfTtcbiAgdmFyIFdpdGhFdWlTdHlsZXNNZW1vaXplciA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKFJlbmRlcik7XG4gIFdpdGhFdWlTdHlsZXNNZW1vaXplci5kaXNwbGF5TmFtZSA9IGNvbXBvbmVudE5hbWU7XG4gIHJldHVybiBXaXRoRXVpU3R5bGVzTWVtb2l6ZXI7XG59O1xuXG4vKipcbiAqIFJlbmRlciBwcm9wIGFsdGVybmF0aXZlIGZvciBjb21wbGV4IGNsYXNzIGNvbXBvbmVudHNcbiAqIE1vc3QgdXNlZnVsIGZvciBzY2VuYXJpb3Mgd2hlcmUgYSBIT0MgbWF5IGludGVyZmVyZSB3aXRoIHR5cGluZ1xuICovXG5leHBvcnQgdmFyIFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciA9IGZ1bmN0aW9uIFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplcihfcmVmMikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbjtcbiAgdmFyIG1lbW9pemVkU3R5bGVzID0gdXNlQ29udGV4dChFdWlUaGVtZU1lbW9pemVkU3R5bGVzQ29udGV4dCk7XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzTWVtb2l6ZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoc3R5bGVzR2VuZXJhdG9yKSB7XG4gICAgcmV0dXJuIGdldE1lbW9pemVkU3R5bGVzKHN0eWxlc0dlbmVyYXRvciwgbWVtb2l6ZWRTdHlsZXMsIGV1aVRoZW1lQ29udGV4dCk7XG4gIH0sIFttZW1vaXplZFN0eWxlcywgZXVpVGhlbWVDb250ZXh0XSk7XG4gIHJldHVybiBjaGlsZHJlbihzdHlsZXNNZW1vaXplcik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgdXNlVXBkYXRlRWZmZWN0ID0gZnVuY3Rpb24gdXNlVXBkYXRlRWZmZWN0KGVmZmVjdCwgZGVwcykge1xuICAvLyB1c2UgcmVmIGluc3RlYWQgb2YgYSBzdGF0ZSB0byBhdm9pZCBjYXVzaW5nIGFuIHVubmVjZXNzYXJ5IHJlLXJlbmRlclxuICB2YXIgaGFzTW91bnRlZCA9IHVzZVJlZihmYWxzZSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgLy8gZG9uJ3QgaW52b2tlIHRoZSBlZmZlY3Qgb24gaW5pdGlhbCBtb3VudFxuICAgIGlmIChoYXNNb3VudGVkLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBlZmZlY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzTW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIGRlcHMpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG4vKlxuICogRm9yIHVzZSB3aGVuIGEgY29tcG9uZW50IG5lZWRzIHRvIHNldCBgcmVmYCBvYmplY3RzIGZyb20gbXVsdGlwbGUgc291cmNlcy5cbiAqIEZvciBpbnN0YW5jZSwgaWYgYSBjb21wb25lbnQgYWNjZXB0cyBhIGByZWZgIHByb3AgYnV0IGFsc28gbmVlZHMgaXRzIG93blxuICogbG9jYWwgcmVmZXJlbmNlIGZvciBjYWxjdWxhdGlvbnMsIGV0Yy5cbiAqIFRoaXMgaG9vayBoYW5kbGVzIHNldHRpbmcgbXVsdGlwbGUgYHJlZmBzIG9mIGFueSBhdmFpbGFibGUgYHJlZmAgdHlwZVxuICogaW4gYSBzaW5nbGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB2YXIgdXNlQ29tYmluZWRSZWZzID0gZnVuY3Rpb24gdXNlQ29tYmluZWRSZWZzKHJlZnMpIHtcbiAgcmV0dXJuIHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIHNldE11bHRpcGxlUmVmcyhyZWZzLCBub2RlKTtcbiAgfSwgW3JlZnNdKTtcbn07XG5cbi8qKlxuICogTm9uLWhvb2sgdXRpbCBmb3Igc2V0dGluZyBtdWx0aXBsZSByZWZzL3JlZiB0eXBlcy5cbiAqIFVzZWZ1bCBmb3Igbm9uLWZ1bmN0aW9uYWwgY29tcG9uZW50c1xuICovXG5leHBvcnQgdmFyIHNldE11bHRpcGxlUmVmcyA9IGZ1bmN0aW9uIHNldE11bHRpcGxlUmVmcyhyZWZzLCBub2RlKSB7XG4gIHJlZnMuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgaWYgKCFyZWYpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVmKG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWYuY3VycmVudCA9IG5vZGU7XG4gICAgfVxuICB9KTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vdGhlbWUnO1xuaW1wb3J0IHsgdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQgfSBmcm9tICcuL2N1cnJlbnRfYnJlYWtwb2ludF9ob29rJztcblxuLyoqXG4gKiBHaXZlbiBhbiBhcnJheSBvZiBicmVha3BvaW50IGtleXMsIHRoaXMgaG9vayByZXR1cm5zIHRydWUgb3IgZmFsc2VcbiAqIGlmIHRoZSBicmVha3BvaW50IHNpemUgb2YgdGhlIGN1cnJlbnQgd2luZG93IHdpZHRoIGZhbGxzIHdpdGhpblxuICogYW55IG9mIHRoZSBuYW1lZCBicmVha3BvaW50cy5cbiAqXG4gKiBAcGFyYW0ge0V1aVRoZW1lQnJlYWtwb2ludFtdfSBzaXplcyBBbiBhcnJheSBvZiBuYW1lZCBFVUkgYnJlYWtwb2ludHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSZXNwb25zaXZlIFNvbWUgY29tcG9uZW50cyBoYXZlIHRoZSBvcHRpb24gdG8gdHVybiBvZmYgcmVzcG9uc2l2ZSBiZWhhdmlvci5cbiAqICAgU2luY2UgaG9va3MgY2FuJ3QgYmUgY2FsbGVkIGNvbmRpdGlvbmFsbHksIGl0J3MgZWFzaWVyIHRvIHBhc3MgdGhlIGNvbmRpdGlvbiBpbnRvIHRoZSBob29rXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgY3VycmVudCBicmVha3BvaW50IG5hbWUgaXMgaW5jbHVkZWQgaW4gYHNpemVzYFxuICovXG5leHBvcnQgdmFyIHVzZUlzV2l0aGluQnJlYWtwb2ludHMgPSBmdW5jdGlvbiB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzKHNpemVzKSB7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IHVzZUN1cnJlbnRFdWlCcmVha3BvaW50KCk7XG4gIHJldHVybiBjdXJyZW50QnJlYWtwb2ludCAmJiBpc1Jlc3BvbnNpdmUgPyBzaXplcy5pbmNsdWRlcyhjdXJyZW50QnJlYWtwb2ludCkgOiBmYWxzZTtcbn07XG5cbi8qKlxuICogR2l2ZW4gYSBtYXggYnJlYWtwb2ludCBrZXksIHRoaXMgaG9vayByZXR1cm5zIHRydWUgaWYgdGhlIGJyZWFrcG9pbnQgc2l6ZVxuICogb2YgdGhlIGN1cnJlbnQgd2luZG93IHdpZHRoIGZhbGxzIHdpdGhpbiB0aGUgbWF4IGJyZWFrcG9pbnQgb3IgYW55IGJlbG93LFxuICogYW5kIGZhbHNlIG90aGVyd2lzZVxuICpcbiAqIEBwYXJhbSB7RXVpVGhlbWVCcmVha3BvaW50fSBtYXggVGhlIG5hbWVkIG1heCBicmVha3BvaW50IHRvIGNoZWNrIGFnYWluc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBXaWxsIHJldHVybiBgZmFsc2VgIGlmIGl0IGNhbid0IGZpbmQgYSB2YWx1ZSBmb3IgdGhlIGBtYXhgIGJyZWFrcG9pbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlzV2l0aGluTWF4QnJlYWtwb2ludChtYXgpIHtcbiAgdmFyIF91c2VFdWlUaGVtZSA9IHVzZUV1aVRoZW1lKCksXG4gICAgYnJlYWtwb2ludHMgPSBfdXNlRXVpVGhlbWUuZXVpVGhlbWUuYnJlYWtwb2ludDtcbiAgdmFyIGN1cnJlbnRCcmVha3BvaW50ID0gdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQoKTtcbiAgaWYgKGN1cnJlbnRCcmVha3BvaW50ID09IG51bGwgfHwgYnJlYWtwb2ludHNbbWF4XSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBicmVha3BvaW50c1tjdXJyZW50QnJlYWtwb2ludF0gPD0gYnJlYWtwb2ludHNbbWF4XTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIG1pbiBicmVha3BvaW50IGtleSwgdGhpcyBob29rIHJldHVybnMgdHJ1ZSBpZiB0aGUgYnJlYWtwb2ludCBzaXplXG4gKiBvZiB0aGUgY3VycmVudCB3aW5kb3cgd2lkdGggZmFsbHMgd2l0aGluIHRoZSBtaW4gYnJlYWtwb2ludCBvciBhbnkgYWJvdmUsXG4gKiBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG4gKlxuICogQHBhcmFtIHtFdWlUaGVtZUJyZWFrcG9pbnR9IG1pbiBUaGUgbmFtZWQgbWluIGJyZWFrcG9pbnQgdG8gY2hlY2sgYWdhaW5zdFxuICogQHJldHVybnMge2Jvb2xlYW59IFdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgaXQgY2FuJ3QgZmluZCBhIHZhbHVlIGZvciB0aGUgYG1pbmAgYnJlYWtwb2ludFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSXNXaXRoaW5NaW5CcmVha3BvaW50KG1pbikge1xuICB2YXIgX3VzZUV1aVRoZW1lMiA9IHVzZUV1aVRoZW1lKCksXG4gICAgYnJlYWtwb2ludHMgPSBfdXNlRXVpVGhlbWUyLmV1aVRoZW1lLmJyZWFrcG9pbnQ7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IHVzZUN1cnJlbnRFdWlCcmVha3BvaW50KCk7XG4gIGlmIChjdXJyZW50QnJlYWtwb2ludCA9PSBudWxsIHx8IGJyZWFrcG9pbnRzW21pbl0gPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gYnJlYWtwb2ludHNbY3VycmVudEJyZWFrcG9pbnRdID49IGJyZWFrcG9pbnRzW21pbl07XG59IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgdGVtcG9yYXJ5IENhbnZhcyBlbGVtZW50IGZvciBtYW5pcHVsYXRpbmcgdGV4dCAmIGRldGVybWluaW5nIHRleHQgd2lkdGguXG4gKlxuICogVG8gYWNjdXJhdGVseSBtZWFzdXJlIHRleHQsIGNhbnZhcyByZW5kZXJpbmcgcmVxdWlyZXMgZWl0aGVyIGEgY29udGFpbmVyIHRvXG4gKiBjb21wdXRlL2Rlcml2ZSBmb250IHN0eWxlcyBmcm9tLCBvciBhIHN0YXRpYyBmb250IHN0cmluZyAodXNlZnVsIGZvciB1c2FnZVxuICogb3V0c2lkZSB0aGUgRE9NKS4gUGFydGljdWxhciBjYXJlIHNob3VsZCBiZSBhcHBsaWVkIHdoZW4gZmFsbGJhY2sgZm9udHMgYXJlXG4gKiB1c2VkLCBhcyBtb3JlIGZhbGxiYWNrIGZvbnRzIGNhbiBsZWFkIHRvIGxlc3MgcHJlY2lzaW9uLlxuICpcbiAqIFBsZWFzZSBub3RlIHRoYXQgd2hpbGUgY2FudmFzIGlzIG1vcmUgc2lnbmlmaWNhbnRseSBtb3JlIHBlcmZvcm1hbnQgdGhhbiBET01cbiAqIG1lYXN1cmVtZW50LCB0aGVyZSBhcmUgc3VicGl4ZWwgdG8gc2luZ2xlIGRpZ2l0IHBpeGVsIGRpZmZlcmVuY2VzIGJldHdlZW5cbiAqIERPTSBhbmQgY2FudmFzIG1lYXN1cmVtZW50IGR1ZSB0byB0aGUgZGlmZmVyZW50IHJlbmRlcmluZyBlbmdpbmVzIHVzZWQuXG4gKi9cbmV4cG9ydCB2YXIgQ2FudmFzVGV4dFV0aWxzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ2FudmFzVGV4dFV0aWxzKF9yZWYpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHZhciBmb250ID0gX3JlZi5mb250LFxuICAgICAgY29udGFpbmVyID0gX3JlZi5jb250YWluZXI7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENhbnZhc1RleHRVdGlscyk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29udGV4dFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImN1cnJlbnRUZXh0XCIsICcnKTtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb21wdXRlRm9udEZyb21FbGVtZW50XCIsIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICB2YXIgY29tcHV0ZWRTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICAgIC8vIFRPRE86IGZvbnQtc3RyZXRjaCBpcyBub3QgaW5jbHVkZWQgZXZlbiB0aG91Z2ggaXQgcG90ZW50aWFsbHkgc2hvdWxkIGJlXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mb250I2NvbnN0aXR1ZW50X3Byb3BlcnRpZXNcbiAgICAgIC8vIEl0IGFwcGVhcnMgdG8gYmUgdW5zdXBwb3J0ZWQgYW5kL29yIGJyZWFrcyBmb250IGNvbXB1dGF0aW9uIGluIGNhbnZhc1xuICAgICAgcmV0dXJuIFsnZm9udC1zdHlsZScsICdmb250LXZhcmlhbnQnLCAnZm9udC13ZWlnaHQnLCAnZm9udC1zaXplJywgJ2ZvbnQtZmFtaWx5J10ubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgIHJldHVybiBjb21wdXRlZFN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApO1xuICAgICAgfSkuam9pbignICcpLnRyaW0oKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzZXRUZXh0VG9DaGVja1wiLCBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgX3RoaXMuY3VycmVudFRleHQgPSB0ZXh0O1xuICAgIH0pO1xuICAgIHRoaXMuY29udGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvLyBTZXQgdGhlIGNhbnZhcyBmb250IHRvIGVuc3VyZSB0ZXh0IHdpZHRoIGNhbGN1bGF0aW9ucyBhcmUgY29ycmVjdFxuICAgIGlmIChmb250KSB7XG4gICAgICB0aGlzLmNvbnRleHQuZm9udCA9IGZvbnQ7XG4gICAgfSBlbHNlIGlmIChjb250YWluZXIpIHtcbiAgICAgIHRoaXMuY29udGV4dC5mb250ID0gdGhpcy5jb21wdXRlRm9udEZyb21FbGVtZW50KGNvbnRhaW5lcik7XG4gICAgfVxuICB9XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoQ2FudmFzVGV4dFV0aWxzLCBbe1xuICAgIGtleTogXCJ0ZXh0V2lkdGhcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQodGhpcy5jdXJyZW50VGV4dCkud2lkdGg7XG4gICAgfVxuICB9XSk7XG59KCk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQ2xpcGJvYXJkIHRleHQgY2xlYW5pbmcgbG9naWNcbiAqL1xuXG4vLyBTcGVjaWFsIHZpc3VhbGx5IGhpZGRlbiB1bmljb2RlIGNoYXJhY3RlcnMgdGhhdCB3ZSB1c2UgdG8gbWFudWFsbHkgY2xlYW4gY29udGVudFxuLy8gYW5kIGZvcmNlIG91ciBvd24gbmV3bGluZXMvaG9yaXpvbnRhbCB0YWJzXG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDSEFSUyA9IHtcbiAgTkVXTElORTogJ1x1MjFCNScsXG4gIFRBQjogJ1x1MjFBNicsXG4gIC8vIFVzZSBtdWx0aXBsZSBjaGFyYWN0ZXJzIHRvIHJlZHVjZSB0aGUgY2hhbmNlcyBvZiBjb25zdW1lcnMgYWxzbyB1c2luZyB0aGVzZSBjaGFyYWN0ZXJzXG4gIFRBQlVMQVJfQ09OVEVOVF9CT1VORDogJ1x1RDgwMVx1REUwMlx1RDgwMVx1REUwMicsXG4gIE5PX0NPUFlfQk9VTkQ6ICdcdTI3MDRcdUQ4MDFcdURFMTcnXG59O1xuLy8gVGhpcyByZWdleCBmaW5kcyBhbGwgY29udGVudCBiZXR3ZWVuIHR3byBib3VuZHNcbnZhciBub0NvcHlCb3VuZHNSZWdleCA9IG5ldyBSZWdFeHAoXCJcIi5jb25jYXQoQ0hBUlMuTk9fQ09QWV9CT1VORCwgXCJbXlwiKS5jb25jYXQoQ0hBUlMuTk9fQ09QWV9CT1VORCwgXCJdKlwiKS5jb25jYXQoQ0hBUlMuTk9fQ09QWV9CT1VORCksICdncycpO1xudmFyIGhhc0NoYXJzVG9SZXBsYWNlID0gZnVuY3Rpb24gaGFzQ2hhcnNUb1JlcGxhY2UodGV4dCkge1xuICBmb3IgKHZhciBfaSA9IDAsIF9PYmplY3QkdmFsdWVzID0gT2JqZWN0LnZhbHVlcyhDSEFSUyk7IF9pIDwgX09iamVjdCR2YWx1ZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIGNoYXIgPSBfT2JqZWN0JHZhbHVlc1tfaV07XG4gICAgaWYgKHRleHQuaW5kZXhPZihjaGFyKSA+PSAwKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBTdHJpcCBhbGwgZXhpc3RpbmcgbmV3bGluZXMgYW5kIHJlcGxhY2Ugb3VyIHNwZWNpYWwgaGlkZGVuIGNoYXJhY3RlcnNcbi8vIHdpdGggdGhlIGRlc2lyZWQgc3BhY2luZyBuZWVkZWQgdG8gcGFzdGUgY2xlYW5seSBpbnRvIGEgc3ByZWFkc2hlZXRcbmV4cG9ydCB2YXIgb25UYWJ1bGFyQ29weSA9IGZ1bmN0aW9uIG9uVGFidWxhckNvcHkoZXZlbnQpIHtcbiAgdmFyIF93aW5kb3ckZ2V0U2VsZWN0aW9uO1xuICBpZiAoIWV2ZW50LmNsaXBib2FyZERhdGEpIHJldHVybjtcbiAgdmFyIHNlbGVjdGVkVGV4dCA9IChfd2luZG93JGdldFNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKSkgPT09IG51bGwgfHwgX3dpbmRvdyRnZXRTZWxlY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF93aW5kb3ckZ2V0U2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGlmICghc2VsZWN0ZWRUZXh0IHx8ICFoYXNDaGFyc1RvUmVwbGFjZShzZWxlY3RlZFRleHQpKSByZXR1cm47XG4gIHZhciBhbWVuZGVkVGV4dCA9IHNlbGVjdGVkVGV4dC5zcGxpdChDSEFSUy5UQUJVTEFSX0NPTlRFTlRfQk9VTkQpLm1hcChmdW5jdGlvbiAodGV4dCkge1xuICAgIHJldHVybiBoYXNDaGFyc1RvUmVwbGFjZSh0ZXh0KSA/IHRleHQucmVwbGFjZSgvXFxyP1xcbi9nLCAnJykgLy8gcmVtb3ZlIGFsbCBvdGhlciBuZXdsaW5lcyBnZW5lcmF0ZWQgYnkgY29udGVudCBvciBibG9jayBkaXNwbGF5XG4gICAgLnJlcGxhY2VBbGwoQ0hBUlMuTkVXTElORSwgJ1xcbicpIC8vIGluc2VydCBuZXdsaW5lIGZvciBlYWNoIHRhYmxlL2dyaWQgcm93XG4gICAgLnJlcGxhY2UoL1xcdC9nLCAnJykgLy8gcmVtb3ZlIHRhYnMgZ2VuZXJhdGVkIGJ5IGNvbnRlbnQgb3IgYXV0b21hdGljYWxseSBieSA8dGQ+IGVsZW1lbnRzXG4gICAgLnJlcGxhY2VBbGwoQ0hBUlMuVEFCLCBcIlxcdFwiKSAvLyBpbnNlcnQgaG9yaXpvbnRhbCB0YWIgZm9yIGVhY2ggdGFibGUvZ3JpZCBjZWxsXG4gICAgLnJlcGxhY2Uobm9Db3B5Qm91bmRzUmVnZXgsICcnKSAvLyByZW1vdmUgdGV4dCB0aGF0IHNob3VsZCBub3QgYmUgY29waWVkIChlLmcuIHNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zKVxuICAgIDogdGV4dDtcbiAgfSkuam9pbignJyk7XG4gIGV2ZW50LmNsaXBib2FyZERhdGEuc2V0RGF0YSgndGV4dC9wbGFpbicsIGFtZW5kZWRUZXh0KTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbn07XG5cbi8qKlxuICogSlNYIHV0aWxzIGZvciByZW5kZXJpbmcgdGhlIGhpZGRlbiBtYXJrZXIgY2hhcmFjdGVyc1xuICovXG5cbnZhciBWaXN1YWxseUhpZGUgPSBmdW5jdGlvbiBWaXN1YWxseUhpZGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAndHJ1ZScgOiBfcmVmJHR5cGU7XG4gIHJldHVybiAoXG4gICAgLy8gSGlkZXMgdGhlIGNoYXJhY3RlcnMgdG8gYm90aCBzaWdodGVkIHVzZXIgYW5kIHNjcmVlbiByZWFkZXJzXG4gICAgLy8gU2FkbHksIHdlIGNhbid0IHVzZSBgaGlkZGVuYCBhcyB0aGF0IGhpZGVzIHRoZSBjaGFycyBmcm9tIHRoZSBjbGlwYm9hcmQgYXMgd2VsbFxuICAgIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlTY3JlZW5SZWFkZXJPbmx5XCIsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBcImRhdGEtdGFidWxhci1jb3B5LW1hcmtlclwiOiB0eXBlXG4gICAgfSwgY2hpbGRyZW4pXG4gICk7XG59O1xuZXhwb3J0IHZhciB0YWJ1bGFyQ29weU1hcmtlcnMgPSB7XG4gIGhpZGRlblRhYjogX19fRW1vdGlvbkpTWChWaXN1YWxseUhpZGUsIHtcbiAgICB0eXBlOiBcInRhYlwiXG4gIH0sIENIQVJTLlRBQiksXG4gIGhpZGRlbk5ld2xpbmU6IF9fX0Vtb3Rpb25KU1goVmlzdWFsbHlIaWRlLCB7XG4gICAgdHlwZTogXCJuZXdsaW5lXCJcbiAgfSwgQ0hBUlMuTkVXTElORSksXG4gIGhpZGRlbldyYXBwZXJCb3VuZGFyeTogX19fRW1vdGlvbkpTWChWaXN1YWxseUhpZGUsIHtcbiAgICB0eXBlOiBcImJvdW5kYXJ5XCJcbiAgfSwgQ0hBUlMuVEFCVUxBUl9DT05URU5UX0JPVU5EKSxcbiAgaGlkZGVuTm9Db3B5Qm91bmRhcnk6IF9fX0Vtb3Rpb25KU1goVmlzdWFsbHlIaWRlLCB7XG4gICAgdHlwZTogXCJuby1jb3B5XCJcbiAgfSwgQ0hBUlMuTk9fQ09QWV9CT1VORClcbn07XG5cbi8qKlxuICogV3JhcHBlciBzZXR1cCBhcm91bmQgdGFibGUvZ3JpZCB0YWJ1bGFyIGNvbnRlbnQgd2Ugd2FudCB0byBvdmVycmlkZS9jbGVhbiB1cCBvbiBjb3B5XG4gKi9cblxuZXhwb3J0IHZhciBPdmVycmlkZUNvcGllZFRhYnVsYXJDb250ZW50ID0gZnVuY3Rpb24gT3ZlcnJpZGVDb3BpZWRUYWJ1bGFyQ29udGVudChfcmVmMikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbjtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBDaHJvbWUgYW5kIHdlYmtpdCBicm93c2VycyB3b3JrIHBlcmZlY3RseSB3aGVuIHBhc3NpbmcgYG9uVGFidWxhckNvcHlgIHRvIGEgUmVhY3RcbiAgICAvLyBgb25Db3B5YCBwcm9wLCBidXQgc2FkbHkgRmlyZWZveCBkb2VzIG5vdCBpZiBjb3B5aW5nIG1vcmUgdGhhbiBqdXN0IHRoZSB0YWJsZS9ncmlkXG4gICAgLy8gKGUuZy4gQ3RybCtBKS4gU28gd2UgaGF2ZSB0byBzZXQgdXAgYSBnbG9iYWwgd2luZG93IGV2ZW50IGxpc3RlbmVyXG4gICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvcHknLCBvblRhYnVsYXJDb3B5KTtcbiAgICAvLyBOb3RlOiBTaW5jZSBvbkNvcHkgaXMgc3RhdGljLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGR1cGxpY2F0ZVxuICAgIC8vIGV2ZW50IGxpc3RlbmVycyAtIGl0J3MgYXV0b21hdGljYWxseSBoYW5kbGVkIGJ5IHRoZSBicm93c2VyLiBTZWU6XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXIjTXVsdGlwbGVfaWRlbnRpY2FsX2V2ZW50X2xpc3RlbmVyc1xuICB9LCBbXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCB0YWJ1bGFyQ29weU1hcmtlcnMuaGlkZGVuV3JhcHBlckJvdW5kYXJ5LCBjaGlsZHJlbiwgdGFidWxhckNvcHlNYXJrZXJzLmhpZGRlbldyYXBwZXJCb3VuZGFyeSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIEEgRE9NIG5vZGUsIGEgc2VsZWN0b3Igc3RyaW5nICh3aGljaCB3aWxsIGJlIHBhc3NlZCB0b1xuICogYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoKWAgdG8gZmluZCB0aGUgRE9NIG5vZGUpLCBvciBhIGZ1bmN0aW9uIHRoYXRcbiAqIHJldHVybnMgYSBET00gbm9kZS5cbiAqL1xuXG5leHBvcnQgdmFyIGZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmID0gZnVuY3Rpb24gZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYoZWxlbWVudFRhcmdldCkge1xuICB2YXIgbm9kZSA9IGVsZW1lbnRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IGVsZW1lbnRUYXJnZXQgOiBudWxsO1xuICBpZiAodHlwZW9mIGVsZW1lbnRUYXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudFRhcmdldCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnRUYXJnZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBub2RlID0gZWxlbWVudFRhcmdldCgpO1xuICB9XG4gIHJldHVybiBub2RlO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuZXhwb3J0IHZhciBhbHdheXMgPSBmdW5jdGlvbiBhbHdheXMoX3ZhbHVlKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbmV4cG9ydCB2YXIgbmV2ZXIgPSBmdW5jdGlvbiBuZXZlcihfdmFsdWUpIHtcbiAgcmV0dXJuIGZhbHNlO1xufTtcbmV4cG9ydCB2YXIgaXNVbmRlZmluZWQgPSBmdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDtcbn07XG5leHBvcnQgdmFyIGlzTnVsbCA9IGZ1bmN0aW9uIGlzTnVsbCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG59O1xuZXhwb3J0IHZhciBpc05pbCA9IGZ1bmN0aW9uIGlzTmlsKHZhbHVlKSB7XG4gIHJldHVybiBpc1VuZGVmaW5lZCh2YWx1ZSkgfHwgaXNOdWxsKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzTW9tZW50ID0gZnVuY3Rpb24gaXNNb21lbnQodmFsdWUpIHtcbiAgcmV0dXJuIG1vbWVudC5pc01vbWVudCh2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc0RhdGUgPSBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmV0dXJuIG1vbWVudC5pc0RhdGUodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNEYXRlTGlrZSA9IGZ1bmN0aW9uIGlzRGF0ZUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIGlzTW9tZW50KHZhbHVlKSB8fCBpc0RhdGUodmFsdWUpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IF9pc0Z1bmN0aW9uIGZyb20gJ2xvZGFzaC9pc0Z1bmN0aW9uJztcbmltcG9ydCBfaXNBcnJheSBmcm9tICdsb2Rhc2gvaXNBcnJheSc7XG5pbXBvcnQgX2lzU3RyaW5nIGZyb20gJ2xvZGFzaC9pc1N0cmluZyc7XG5pbXBvcnQgX2lzQm9vbGVhbiBmcm9tICdsb2Rhc2gvaXNCb29sZWFuJztcbmltcG9ydCBfaXNOdW1iZXIgZnJvbSAnbG9kYXNoL2lzTnVtYmVyJztcbmltcG9ydCBfaXNOYU4gZnJvbSAnbG9kYXNoL2lzTmFOJztcbmltcG9ydCBfaXNPYmplY3QgZnJvbSAnbG9kYXNoL2lzT2JqZWN0JztcblxuLy8gd3JhcCB0aGUgbG9kYXNoIGZ1bmN0aW9ucyB0byBhdm9pZCBoYXZpbmcgbG9kYXNoJ3MgVFMgdHlwZSBkZWZpbml0aW9uIGZyb20gYmVpbmdcbi8vIGV4cG9ydGVkLCB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCB0aGUgbG9kYXNoIG5hbWVzcGFjZSBpZiBvdGhlciB2ZXJzaW9ucyBhcmUgdXNlZFxuXG5leHBvcnQgdmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBfaXNGdW5jdGlvbih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gX2lzQXJyYXkodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNTdHJpbmcgPSBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gX2lzU3RyaW5nKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzQm9vbGVhbiA9IGZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICByZXR1cm4gX2lzQm9vbGVhbih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc051bWJlciA9IGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiBfaXNOdW1iZXIodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNOYU4gPSBmdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICByZXR1cm4gX2lzTmFOKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIF9pc09iamVjdCh2YWx1ZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG5leHBvcnQgdmFyIGZvcm1hdEJvb2xlYW4gPSBmdW5jdGlvbiBmb3JtYXRCb29sZWFuKHZhbHVlKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBfcmVmJHllcyA9IF9yZWYueWVzLFxuICAgIHllcyA9IF9yZWYkeWVzID09PSB2b2lkIDAgPyAnWWVzJyA6IF9yZWYkeWVzLFxuICAgIF9yZWYkbm8gPSBfcmVmLm5vLFxuICAgIG5vID0gX3JlZiRubyA9PT0gdm9pZCAwID8gJ05vJyA6IF9yZWYkbm8sXG4gICAgX3JlZiRuaWwgPSBfcmVmLm5pbCxcbiAgICBuaWwgPSBfcmVmJG5pbCA9PT0gdm9pZCAwID8gJycgOiBfcmVmJG5pbDtcbiAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgIHJldHVybiBuaWw7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID8geWVzIDogbm87XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGlzTmlsLCBpc0Z1bmN0aW9uLCBpc1N0cmluZyB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG52YXIgY2FsZW5kYXIgPSBmdW5jdGlvbiBjYWxlbmRhcih2YWx1ZSkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhciByZWZUaW1lID0gb3B0aW9ucy5yZWZUaW1lO1xuICByZXR1cm4gbW9tZW50KHZhbHVlKS5jYWxlbmRhcihyZWZUaW1lLCBvcHRpb25zKTtcbn07XG5leHBvcnQgdmFyIGRhdGVGb3JtYXRBbGlhc2VzID0ge1xuICBkYXRlOiAnRCBNTU0gWVlZWScsXG4gIGxvbmdEYXRlOiAnREQgTU1NTSBZWVlZJyxcbiAgc2hvcnREYXRlOiAnRCBNTU0gWVknLFxuICBkYXRlVGltZTogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICBsb25nRGF0ZVRpbWU6ICdERCBNTU1NIFlZWVkgSEg6bW06c3MnLFxuICBzaG9ydERhdGVUaW1lOiAnRCBNTU0gWVkgSEg6bW0nLFxuICBkb2JTaG9ydDogJ0RvIE1NTSBZWScsXG4gIGRvYkxvbmc6ICdEbyBNTU1NIFlZWVknLFxuICBpc284NjAxOiAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaJyxcbiAgY2FsZW5kYXI6IGNhbGVuZGFyLFxuICBjYWxlbmRhckRhdGVUaW1lOiBmdW5jdGlvbiBjYWxlbmRhckRhdGVUaW1lKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNhbGVuZGFyKHZhbHVlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIEg6bW1BJyxcbiAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIEg6bW1BJyxcbiAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIEg6bW1BJyxcbiAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBIOm1tQScsXG4gICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gSDptbUEnLFxuICAgICAgc2FtZUVsc2U6ICdEbyBNTU0gWVlZWSBbYXRdIEg6bW1BJ1xuICAgIH0sIG9wdGlvbnMpKTtcbiAgfSxcbiAgY2FsZW5kYXJEYXRlOiBmdW5jdGlvbiBjYWxlbmRhckRhdGUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY2FsZW5kYXIodmFsdWUsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgc2FtZURheTogJ1tUb2RheV0nLFxuICAgICAgbmV4dERheTogJ1tUb21vcnJvd10nLFxuICAgICAgbmV4dFdlZWs6ICdkZGRkJyxcbiAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5XScsXG4gICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkJyxcbiAgICAgIHNhbWVFbHNlOiAnRG8gTU1NIFlZWVknXG4gICAgfSwgb3B0aW9ucykpO1xuICB9XG59O1xuZnVuY3Rpb24gaXNTdHJpbmdBRGF0ZUZvcm1hdCh4KSB7XG4gIHJldHVybiBkYXRlRm9ybWF0QWxpYXNlcy5oYXNPd25Qcm9wZXJ0eSh4KTtcbn1cbmZ1bmN0aW9uIGluc3RhbmNlT2ZGb3JtYXREYXRlQ29uZmlnKHgpIHtcbiAgcmV0dXJuIF90eXBlb2YoeCkgPT09ICdvYmplY3QnICYmICh4Lmhhc093blByb3BlcnR5KCdmb3JtYXQnKSB8fCB4Lmhhc093blByb3BlcnR5KCduaWwnKSB8fCB4Lmhhc093blByb3BlcnR5KCdvcHRpb25zJykpO1xufVxuZXhwb3J0IHZhciBmb3JtYXREYXRlID0gZnVuY3Rpb24gZm9ybWF0RGF0ZSh2YWx1ZSkge1xuICB2YXIgZGF0ZUZvcm1hdEtleU9yQ29uZmlnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnZGF0ZVRpbWUnO1xuICBpZiAoaXNTdHJpbmcoZGF0ZUZvcm1hdEtleU9yQ29uZmlnKSkge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgdmFyIGRhdGVGb3JtYXRTdHJPckZ1bmMgPSBpc1N0cmluZ0FEYXRlRm9ybWF0KGRhdGVGb3JtYXRLZXlPckNvbmZpZykgPyBkYXRlRm9ybWF0QWxpYXNlc1tkYXRlRm9ybWF0S2V5T3JDb25maWddIDogZGF0ZUZvcm1hdEtleU9yQ29uZmlnO1xuICAgIGlmIChpc0Z1bmN0aW9uKGRhdGVGb3JtYXRTdHJPckZ1bmMpKSB7XG4gICAgICByZXR1cm4gZGF0ZUZvcm1hdFN0ck9yRnVuYyh2YWx1ZSwge30pO1xuICAgIH1cbiAgICBpZiAoaXNTdHJpbmcoZGF0ZUZvcm1hdFN0ck9yRnVuYykpIHtcbiAgICAgIHJldHVybiBtb21lbnQodmFsdWUpLmZvcm1hdChkYXRlRm9ybWF0U3RyT3JGdW5jKTtcbiAgICB9XG4gIH1cbiAgaWYgKGluc3RhbmNlT2ZGb3JtYXREYXRlQ29uZmlnKGRhdGVGb3JtYXRLZXlPckNvbmZpZykpIHtcbiAgICB2YXIgX2RhdGVGb3JtYXRLZXlPckNvbmZpID0gZGF0ZUZvcm1hdEtleU9yQ29uZmlnLmZvcm1hdCxcbiAgICAgIGZvcm1hdCA9IF9kYXRlRm9ybWF0S2V5T3JDb25maSA9PT0gdm9pZCAwID8gJ2RhdGVUaW1lJyA6IF9kYXRlRm9ybWF0S2V5T3JDb25maSxcbiAgICAgIF9kYXRlRm9ybWF0S2V5T3JDb25maTIgPSBkYXRlRm9ybWF0S2V5T3JDb25maWcubmlsLFxuICAgICAgbmlsID0gX2RhdGVGb3JtYXRLZXlPckNvbmZpMiA9PT0gdm9pZCAwID8gJycgOiBfZGF0ZUZvcm1hdEtleU9yQ29uZmkyLFxuICAgICAgb3B0aW9ucyA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5vcHRpb25zO1xuICAgIHZhciBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdEFsaWFzZXNbZm9ybWF0XSB8fCBmb3JtYXQ7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIG5pbDtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oZGF0ZUZvcm1hdCkpIHtcbiAgICAgIHJldHVybiBkYXRlRm9ybWF0KHZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGlzU3RyaW5nKGRhdGVGb3JtYXQpKSB7XG4gICAgICByZXR1cm4gbW9tZW50KHZhbHVlKS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBmb3JtYXQgdmFsdWUgdXNpbmcgZGF0ZUZvcm1hdEtleU9yQ29uZmlnOiBcIi5jb25jYXQoZGF0ZUZvcm1hdEtleU9yQ29uZmlnKSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgbnVtZXJhbCBmcm9tICdudW1lcmFsJztcbmltcG9ydCB7IGlzTmlsLCBpc1N0cmluZyB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG52YXIgbnVtYmVyRm9ybWF0QWxpYXNlcyA9IHtcbiAgZGVjaW1hbDE6ICcwLDAuMCcsXG4gIGRlY2ltYWwyOiAnMCwwLjAwJyxcbiAgZGVjaW1hbDM6ICcwLDAuMDAwJyxcbiAgb3JkaW5hbDogJzBvJyxcbiAgaW50ZWdlcjogJzAsMCdcbn07XG5leHBvcnQgdmFyIGZvcm1hdE51bWJlciA9IGZ1bmN0aW9uIGZvcm1hdE51bWJlcih2YWx1ZSkge1xuICB2YXIgbnVtYmVyRm9ybWF0T3JDb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgZm9ybWF0O1xuICB2YXIgbmlsID0gJyc7XG4gIHZhciByb3VuZDtcbiAgaWYgKGlzU3RyaW5nKG51bWJlckZvcm1hdE9yQ29uZmlnKSkge1xuICAgIGZvcm1hdCA9IG51bWJlckZvcm1hdE9yQ29uZmlnO1xuICB9IGVsc2Uge1xuICAgIGZvcm1hdCA9IG51bWJlckZvcm1hdE9yQ29uZmlnLmZvcm1hdDtcbiAgICBuaWwgPSBudW1iZXJGb3JtYXRPckNvbmZpZy5uaWwgfHwgJyc7XG4gICAgcm91bmQgPSBudW1iZXJGb3JtYXRPckNvbmZpZy5yb3VuZDtcbiAgfVxuICBpZiAoIWZvcm1hdCkge1xuICAgIHJldHVybiBpc05pbCh2YWx1ZSkgPyBuaWwgOiB2YWx1ZS50b1N0cmluZygpO1xuICB9XG4gIHZhciByb3VuZGluZ0Z1bmMgPSByb3VuZCA/IE1hdGgucm91bmQgOiBNYXRoLmZsb29yO1xuICB2YXIgbnVtYmVyRm9ybWF0ID0gbnVtYmVyRm9ybWF0QWxpYXNlc1tmb3JtYXRdIHx8IGZvcm1hdDtcbiAgcmV0dXJuIGlzTmlsKHZhbHVlKSA/IG5pbCA6IG51bWVyYWwodmFsdWUpLmZvcm1hdChudW1iZXJGb3JtYXQsIHJvdW5kaW5nRnVuYyk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG5leHBvcnQgdmFyIGZvcm1hdFRleHQgPSBmdW5jdGlvbiBmb3JtYXRUZXh0KHZhbHVlKSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7XG4gICAgbmlsOiAnJ1xuICB9O1xuICByZXR1cm4gaXNOaWwodmFsdWUpID8gb3B0aW9ucy5uaWwgOiB2YWx1ZS50b1N0cmluZygpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgaXNOaWwsIGlzQXJyYXksIGlzQm9vbGVhbiwgaXNEYXRlLCBpc05hTiwgaXNOdW1iZXIsIGlzU3RyaW5nIH0gZnJvbSAnLi4vcHJlZGljYXRlJztcbmltcG9ydCB7IGZvcm1hdEJvb2xlYW4gfSBmcm9tICcuL2Zvcm1hdF9ib29sZWFuJztcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICcuL2Zvcm1hdF9kYXRlJztcbmltcG9ydCB7IGZvcm1hdE51bWJlciB9IGZyb20gJy4vZm9ybWF0X251bWJlcic7XG5pbXBvcnQgeyBmb3JtYXRUZXh0IH0gZnJvbSAnLi9mb3JtYXRfdGV4dCc7XG5leHBvcnQgdmFyIGZvcm1hdEF1dG8gPSBmdW5jdGlvbiBmb3JtYXRBdXRvKHZhbHVlKSB7XG4gIGlmIChpc05pbCh2YWx1ZSkgfHwgaXNOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0VGV4dCh2YWx1ZSk7XG4gIH1cbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSk7XG4gIH1cbiAgaWYgKGlzQm9vbGVhbih2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0Qm9vbGVhbih2YWx1ZSk7XG4gIH1cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xuICAgIHJldHVybiBmb3JtYXROdW1iZXIodmFsdWUpO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEF1dG8oaXRlbSk7XG4gICAgfSkuam9pbignLCAnKSA6IGZvcm1hdEF1dG8odmFsdWUpO1xuICB9XG5cbiAgLy8gVE9ETyBub3Qgc3VyZSBpZiB3ZSB3YW50IHRoYXQuLiB0aGUgKCspIGlzIHRoYXQgd2Ugc2hvdyBzb21ldGhpbmcsIHRoZSAoLSkgaXMgdGhhdCBpdCdzIHZlcnkgdGVjaG5pY2FsXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgUE9TSVRJT05TID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbnZhciByZWxhdGVkRGltZW5zaW9uID0ge1xuICB0b3A6ICdoZWlnaHQnLFxuICByaWdodDogJ3dpZHRoJyxcbiAgYm90dG9tOiAnaGVpZ2h0JyxcbiAgbGVmdDogJ3dpZHRoJ1xufTtcbnZhciBkaW1lbnNpb25Qb3NpdGlvbkF0dHJpYnV0ZSA9IHtcbiAgaGVpZ2h0OiAndG9wJyxcbiAgd2lkdGg6ICdsZWZ0J1xufTtcbnZhciBwb3NpdGlvbkNvbXBsZW1lbnRzID0ge1xuICB0b3A6ICdib3R0b20nLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICBsZWZ0OiAncmlnaHQnXG59O1xuXG4vLyBhbHdheXMgcmVzb2x2aW5nIHRvIHRvcC9sZWZ0IGlzIHRha2VuIGFkdmFudGFnZSBvZiBieSBrbm93aW5nIHRoZXkgYXJlIHRoZVxuLy8gbWluaW11bSBlZGdlcyBvZiB0aGUgYm91bmRpbmcgYm94XG52YXIgcG9zaXRpb25TdWJzdGl0dXRlcyA9IHtcbiAgdG9wOiAnbGVmdCcsXG4gIHJpZ2h0OiAndG9wJyxcbiAgYm90dG9tOiAnbGVmdCcsXG4gIGxlZnQ6ICd0b3AnXG59O1xudmFyIGdldEJ1ZmZlclZhbHVlcyA9IGZ1bmN0aW9uIGdldEJ1ZmZlclZhbHVlcyhidWZmZXIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYnVmZmVyKSkge1xuICAgIHZhciBfYnVmZmVyID0gX3NsaWNlZFRvQXJyYXkoYnVmZmVyLCA0KSxcbiAgICAgIHRvcEJ1ZmZlciA9IF9idWZmZXJbMF0sXG4gICAgICByaWdodEJ1ZmZlciA9IF9idWZmZXJbMV0sXG4gICAgICBib3R0b21CdWZmZXIgPSBfYnVmZmVyWzJdLFxuICAgICAgbGVmdEJ1ZmZlciA9IF9idWZmZXJbM107XG4gICAgcmV0dXJuIFt0b3BCdWZmZXIsIHJpZ2h0QnVmZmVyLCBib3R0b21CdWZmZXIsIGxlZnRCdWZmZXJdO1xuICB9XG4gIHJldHVybiBbYnVmZmVyLCBidWZmZXIsIGJ1ZmZlciwgYnVmZmVyXTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYWJzb2x1dGUgcG9zaXRpb25pbmcgKHJlbGF0aXZlIHRvIGRvY3VtZW50LmJvZHkpIHRvIHBsYWNlIGEgcG9wb3ZlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGFuY2hvciB7SFRNTEVsZW1lbnR9IEVsZW1lbnQgdG8gYW5jaG9yIHRoZSBwb3BvdmVyIHRvXG4gKiBAcGFyYW0gcG9wb3ZlciB7SFRNTEVsZW1lbnR9IEVsZW1lbnQgY29udGFpbmluZyB0aGUgcG9wb3ZlciBjb250ZW50XG4gKiBAcGFyYW0gcG9zaXRpb24ge3N0cmluZ30gUG9zaXRpb24gdGhlIHVzZXIgd2FudHMuIE9uZSBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEBwYXJhbSBbZm9yY2VQb3NpdGlvbl0ge2Jvb2xlYW59IElmIHRydWUsIHVzZSBvbmx5IHRoZSBwcm92aWRlZCBgcG9zaXRpb25gIHZhbHVlIGFuZCBkb24ndCB0cnkgYW55IG90aGVyIHBvc2l0aW9uXG4gKiBAcGFyYW0gW2FsaWduXSB7c3RyaW5nfSBDcm9zcy1heGlzIGFsaWdubWVudC4gT25lIG9mIFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXVxuICogQHBhcmFtIFtidWZmZXI9MTZdIHtudW1iZXJ9IE1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlciBhbmQgdGhlIGJvdW5kaW5nIGNvbnRhaW5lclxuICogQHBhcmFtIFtvZmZzZXQ9MF0ge251bWJlcn0gRGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlciBhbmQgdGhlIGFuY2hvclxuICogQHBhcmFtIFthbGxvd0Nyb3NzQXhpcz10cnVlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBhbGxvdyB0aGUgcG9wb3ZlciB0byBiZSBwb3NpdGlvbmVkIG9uIHRoZSBjcm9zcy1heGlzXG4gKiBAcGFyYW0gW2NvbnRhaW5lcl0ge0hUTUxFbGVtZW50fSBFbGVtZW50IHRoZSBwb3BvdmVyIG11c3QgYmUgY29uc3RyYWluZWQgdG8gZml0IHdpdGhpblxuICogQHBhcmFtIFthcnJvd0NvbmZpZ10ge3thcnJvd1dpZHRoOiBudW1iZXIsIGFycm93QnVmZmVyOiBudW1iZXJ9fSBJZlxuICogIHByZXNlbnQsIGRlc2NyaWJlcyB0aGUgc2l6ZSAmIGNvbnN0cmFpbnRzIGZvciBhbiBhcnJvdyBlbGVtZW50LCBhbmQgdGhlXG4gKiAgZnVuY3Rpb24gcmV0dXJuIHZhbHVlIHdpbGwgaW5jbHVkZSBhbiBgYXJyb3dgIHBhcmFtIHdpdGggcG9zaXRpb24gZGV0YWlsc1xuICpcbiAqIEByZXR1cm5zIHtGaW5kUG9wb3ZlclBvc2l0aW9uUmVzdWx0fSBhYnNvbHV0ZSBwYWdlIGNvb3JkaW5hdGVzIGZvciB0aGVcbiAqIHBvcG92ZXIsIGFuZCB0aGUgcGxhY2VtZW50J3MgcmVsYXRpb24gdG8gdGhlIGFuY2hvciBvciB1bmRlZmluZWRcbiAqIHRoZXJlJ3Mgbm8gcm9vbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQb3BvdmVyUG9zaXRpb24oX3JlZikge1xuICB2YXIgYW5jaG9yID0gX3JlZi5hbmNob3IsXG4gICAgcG9wb3ZlciA9IF9yZWYucG9wb3ZlcixcbiAgICBhbGlnbiA9IF9yZWYuYWxpZ24sXG4gICAgcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgIGZvcmNlUG9zaXRpb24gPSBfcmVmLmZvcmNlUG9zaXRpb24sXG4gICAgX3JlZiRidWZmZXIgPSBfcmVmLmJ1ZmZlcixcbiAgICBidWZmZXIgPSBfcmVmJGJ1ZmZlciA9PT0gdm9pZCAwID8gMTYgOiBfcmVmJGJ1ZmZlcixcbiAgICBfcmVmJG9mZnNldCA9IF9yZWYub2Zmc2V0LFxuICAgIG9mZnNldCA9IF9yZWYkb2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX3JlZiRvZmZzZXQsXG4gICAgX3JlZiRhbGxvd0Nyb3NzQXhpcyA9IF9yZWYuYWxsb3dDcm9zc0F4aXMsXG4gICAgYWxsb3dDcm9zc0F4aXMgPSBfcmVmJGFsbG93Q3Jvc3NBeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRhbGxvd0Nyb3NzQXhpcyxcbiAgICBjb250YWluZXIgPSBfcmVmLmNvbnRhaW5lcixcbiAgICBhcnJvd0NvbmZpZyA9IF9yZWYuYXJyb3dDb25maWcsXG4gICAgcmV0dXJuQm91bmRpbmdCb3ggPSBfcmVmLnJldHVybkJvdW5kaW5nQm94O1xuICAvLyBmaW5kIHRoZSBzY3JlZW4tcmVsYXRpdmUgYm91bmRpbmcgYm94ZXMgb2YgdGhlIGFuY2hvciwgcG9wb3ZlciwgYW5kIGNvbnRhaW5lclxuICB2YXIgYW5jaG9yQm91bmRpbmdCb3ggPSBnZXRFbGVtZW50Qm91bmRpbmdCb3goYW5jaG9yKTtcbiAgdmFyIHBvcG92ZXJCb3VuZGluZ0JveCA9IGdldEVsZW1lbnRCb3VuZGluZ0JveChwb3BvdmVyKTtcblxuICAvLyBjYWxjdWxhdGUgdGhlIHdpbmRvdydzIGJvdW5kc1xuICAvLyB3aW5kb3cuKGlubmVyV2lkdGh8aW5uZXJIZWlnaHQpIGRvIG5vdCBhY2NvdW50IGZvciBzY3JvbGxiYXJzXG4gIC8vIHNvIHByZWZlciB0aGUgY2xpZW50V2lkdGgvY2xpZW50SGVpZ2h0IG9mIHRoZSBET00gaWYgYXZhaWxhYmxlXG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IHdpbmRvdy5pbm5lcldpZHRoO1xuICB2YXIgZG9jdW1lbnRIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgdmFyIHdpbmRvd0JvdW5kaW5nQm94ID0ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogZG9jdW1lbnRXaWR0aCxcbiAgICBib3R0b206IGRvY3VtZW50SGVpZ2h0LFxuICAgIGxlZnQ6IDAsXG4gICAgaGVpZ2h0OiBkb2N1bWVudEhlaWdodCxcbiAgICB3aWR0aDogZG9jdW1lbnRXaWR0aFxuICB9O1xuXG4gIC8vIGlmIG5vIGNvbnRhaW5lciBlbGVtZW50IGlzIGdpdmVuIGZhbGwgYmFjayB0byB1c2luZyB0aGUgd2luZG93IHZpZXdwb3J0XG4gIHZhciBjb250YWluZXJCb3VuZGluZ0JveCA9IGNvbnRhaW5lciA/IGdldEVsZW1lbnRCb3VuZGluZ0JveChjb250YWluZXIpIDogd2luZG93Qm91bmRpbmdCb3g7XG5cbiAgLyoqXG4gICAqIGBwb3NpdGlvbmAgd2FzIHNwZWNpZmllZCBieSB0aGUgZnVuY3Rpb24gY2FsbGVyIGFuZCBpcyBhIHN0cm9uZyBoaW50XG4gICAqIGFzIHRvIHRoZSBwcmVmZXJyZWQgbG9jYXRpb24gb2YgdGhlIHBvcG92ZXIgcmVsYXRpdmUgdG8gdGhlIGFuY2hvci5cbiAgICogSG93ZXZlciwgd2Ugc3Ryb25nbHkgcHJlZmVyIHNob3dpbmcgYWxsIG9mIHRoZSBwb3BvdmVyIGNvbnRlbnQgd2l0aGluXG4gICAqIHRoZSB3aW5kb3crY29udGFpbmVyIGJvdW5kYXJ5IGFuZCB3aWxsIGl0ZXJhdGUgb3ZlciB0aGUgZm91clxuICAgKiBwb3NzaWJsZSBzaWRlcyB1bnRpbCBhIHBlcmZlY3QgZml0IGlzIGxvY2F0ZWQuIElmIG5vbmUgb2YgdGhlIGxvY2F0aW9uc1xuICAgKiBmdWxseSBjb250YWluIHBvcG92ZXIsIHRoZSBsb2NhdGlvbiB3aXRoIHRoZSBiZXN0IGZpdCBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogVGhpcyBhcHByb2FjaCBmaXJzdCBjaGVja3MgdGhlIHByZWZlcnJlZCBgcG9zaXRpb25gLCB0aGVuIGl0cyBvcHBvc2l0ZVxuICAgKiBhbG9uZyB0aGUgc2FtZSBheGlzLCBuZXh0IGEgbG9jYXRpb24gb24gdGhlIGNyb3NzLWF4aXMsIGFuZCBmaW5hbGx5IGl0XG4gICAqIHRlc3RzIHRoZSByZW1haW5pbmcgcG9zaXRpb24uXG4gICAqXG4gICAqIGUuZy5cbiAgICogaWYgcG9zaXRpb24gPSBcInRvcFwiIHRoZSBvcmRlciBpcyB0b3AsIGJvdHRvbSwgbGVmdCByaWdodFxuICAgKiBpZiBwb3NpdGlvbiA9IFwicmlnaHRcIiB0aGUgb3JkZXIgaXMgcmlnaHQsIGxlZnQsIHRvcCwgYm90dG9tXG4gICAqL1xuXG4gIC8vIFRyeSB0aGUgdXNlci1kZXNpcmVkIHBvc2l0aW9uIGZpcnN0LlxuICB2YXIgaXRlcmF0aW9uUG9zaXRpb25zID0gW3Bvc2l0aW9uXTtcbiAgLy8ga2VlcCB1c2VyLWRlZmluZWQgYWxpZ25tZW50IGluIHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMuXG4gIHZhciBpdGVyYXRpb25BbGlnbm1lbnRzID0gW2FsaWduXTtcbiAgaWYgKGZvcmNlUG9zaXRpb24gIT09IHRydWUpIHtcbiAgICBpdGVyYXRpb25Qb3NpdGlvbnMucHVzaChwb3NpdGlvbkNvbXBsZW1lbnRzW3Bvc2l0aW9uXSk7IC8vIFRyeSB0aGUgY29tcGxlbWVudGFyeSBwb3NpdGlvbi5cbiAgICBpdGVyYXRpb25BbGlnbm1lbnRzLnB1c2goYWxpZ24pOyAvLyBrZWVwIHVzZXItZGVmaW5lZCBhbGlnbm1lbnQgaW4gdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24uXG5cbiAgICBpZiAoYWxsb3dDcm9zc0F4aXMpIHtcbiAgICAgIGl0ZXJhdGlvblBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uU3Vic3RpdHV0ZXNbcG9zaXRpb25dLFxuICAgICAgLy8gU3dpdGNoIHRvIHRoZSBjcm9zcyBheGlzLlxuICAgICAgcG9zaXRpb25Db21wbGVtZW50c1twb3NpdGlvblN1YnN0aXR1dGVzW3Bvc2l0aW9uXV0gLy8gVHJ5IHRoZSBjb21wbGVtZW50YXJ5IHBvc2l0aW9uIG9uIHRoZSBjcm9zcyBheGlzLlxuICAgICAgKTtcbiAgICAgIGl0ZXJhdGlvbkFsaWdubWVudHMucHVzaCh1bmRlZmluZWQsIHVuZGVmaW5lZCk7IC8vIGRpc2NhcmQgZGVzaXJlZCBhbGlnbm1lbnQgb24gY3Jvc3MtYXhpc1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBwb3NpdGlvbiBpcyBmb3JjZWQsIGlmIGl0IGNvbmZsaWN0cyB3aXRoIHRoZSBhbGlnbm1lbnQgdGhlbiByZXNldCBhbGlnbiB0byBgbnVsbGBcbiAgICAvLyBlLmcuIG9yaWdpbmFsIHBsYWNlbWVudCByZXF1ZXN0IGZvciBgZG93bkxlZnRgIGlzIG1vdmVkIHRvIHRoZSBgbGVmdGAgc2lkZSwgZnV0dXJlIGNhbGxzXG4gICAgLy8gd2lsbCBwb3NpdGlvbiBhbmQgYWxpZ24gYGxlZnRgLCBhbmQgYGxlZnRMZWZ0YCBpcyBub3QgYSB2YWxpZCBwbGFjZW1lbnRcbiAgICBpZiAocG9zaXRpb24gPT09IGFsaWduIHx8IGFsaWduICE9PSB1bmRlZmluZWQgJiYgcG9zaXRpb24gPT09IHBvc2l0aW9uQ29tcGxlbWVudHNbYWxpZ25dKSB7XG4gICAgICBpdGVyYXRpb25BbGlnbm1lbnRzWzBdID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICB2YXIgYmVzdEZpdCA9IHVuZGVmaW5lZDtcbiAgdmFyIGJlc3RQb3NpdGlvbiA9IG51bGw7XG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGl0ZXJhdGlvblBvc2l0aW9ucy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgdmFyIGl0ZXJhdGlvblBvc2l0aW9uID0gaXRlcmF0aW9uUG9zaXRpb25zW2lkeF07XG5cbiAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBwb3NpdGlvbiB3aXRoIGEgYmV0dGVyIGZpdCB0aGFuIHdlJ3ZlIGZvdW5kIHNvIGZhci5cbiAgICB2YXIgc2NyZWVuQ29vcmRpbmF0ZXMgPSBnZXRQb3BvdmVyU2NyZWVuQ29vcmRpbmF0ZXMoe1xuICAgICAgcG9zaXRpb246IGl0ZXJhdGlvblBvc2l0aW9uLFxuICAgICAgYWxpZ246IGl0ZXJhdGlvbkFsaWdubWVudHNbaWR4XSxcbiAgICAgIGFuY2hvckJvdW5kaW5nQm94OiBhbmNob3JCb3VuZGluZ0JveCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveDogcG9wb3ZlckJvdW5kaW5nQm94LFxuICAgICAgd2luZG93Qm91bmRpbmdCb3g6IHdpbmRvd0JvdW5kaW5nQm94LFxuICAgICAgY29udGFpbmVyQm91bmRpbmdCb3g6IGNvbnRhaW5lckJvdW5kaW5nQm94LFxuICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICBidWZmZXI6IGJ1ZmZlcixcbiAgICAgIGFycm93Q29uZmlnOiBhcnJvd0NvbmZpZ1xuICAgIH0pO1xuICAgIGlmIChiZXN0Rml0ID09PSB1bmRlZmluZWQgfHwgc2NyZWVuQ29vcmRpbmF0ZXMuZml0ID4gYmVzdEZpdCkge1xuICAgICAgYmVzdEZpdCA9IHNjcmVlbkNvb3JkaW5hdGVzLmZpdDtcbiAgICAgIGJlc3RQb3NpdGlvbiA9IHtcbiAgICAgICAgZml0OiBzY3JlZW5Db29yZGluYXRlcy5maXQsXG4gICAgICAgIHBvc2l0aW9uOiBpdGVyYXRpb25Qb3NpdGlvbixcbiAgICAgICAgdG9wOiBzY3JlZW5Db29yZGluYXRlcy50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQsXG4gICAgICAgIGxlZnQ6IHNjcmVlbkNvb3JkaW5hdGVzLmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgICAgIGFycm93OiBzY3JlZW5Db29yZGluYXRlcy5hcnJvd1xuICAgICAgfTtcblxuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBmb3VuZCB0aGUgaWRlYWwgZml0LCB1c2UgdGhhdCBwb3NpdGlvbi5cbiAgICAgIGlmIChiZXN0Rml0ID09PSAxKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHdlIGhhdmVuJ3QgaW1wcm92ZWQgdGhlIGZpdCwgdGhlbiBjb250aW51ZSBvbiBhbmQgdHJ5IGEgbmV3IHBvc2l0aW9uLlxuICB9XG4gIGlmIChiZXN0UG9zaXRpb24gPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNhbGN1bGF0ZSBiZXN0UG9zaXRpb24nKTtcbiAgfVxuICBpZiAocmV0dXJuQm91bmRpbmdCb3gpIHtcbiAgICBiZXN0UG9zaXRpb24uYW5jaG9yQm91bmRpbmdCb3ggPSBhbmNob3JCb3VuZGluZ0JveDtcbiAgfVxuICByZXR1cm4gYmVzdFBvc2l0aW9uO1xufVxuLyoqXG4gKiBHaXZlbiBhIHRhcmdldCBwb3NpdGlvbiBhbmQgdGhlIHBvcG92ZXIncyBzdXJyb3VuZGluZyBjb250ZXh0LCByZXR1cm5zIGVpdGhlciBhblxuICogb2JqZWN0IHdpdGgge3RvcCwgbGVmdH0gc2NyZWVuIGNvb3JkaW5hdGVzIG9yIGBudWxsYCBpZiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzaG93XG4gKiBjb250ZW50IGluIHRoZSB0YXJnZXQgcG9zaXRpb25cbiAqIEBwYXJhbSBwb3NpdGlvbiB7c3RyaW5nfSB0aGUgdGFyZ2V0IHBvc2l0aW9uLCBvbmUgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcGFyYW0gYWxpZ24ge3N0cmluZ30gdGFyZ2V0IGFsaWdubWVudCBvbiB0aGUgY3Jvc3MtYXhpcywgb25lIG9mIFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXVxuICogQHBhcmFtIGFuY2hvckJvdW5kaW5nQm94IHtPYmplY3R9IGJvdW5kaW5nIGJveCBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAqIEBwYXJhbSBwb3BvdmVyQm91bmRpbmdCb3gge09iamVjdH0gYm91bmRpbmcgYm94IG9mIHRoZSBwb3BvdmVyIGVsZW1lbnRcbiAqIEBwYXJhbSB3aW5kb3dCb3VuZGluZ0JveCB7T2JqZWN0fSBib3VuZGluZyBib3ggb2YgdGhlIHdpbmRvd1xuICogQHBhcmFtIGNvbnRhaW5lckJvdW5kaW5nQm94IHtPYmplY3R9IGJvdW5kaW5nIGJveCBvZiB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Fycm93Q29uZmlnXSB7e2Fycm93V2lkdGg6IG51bWJlciwgYXJyb3dCdWZmZXI6IG51bWJlcn19IElmIHByZXNlbnQsIGRlc2NyaWJlcyB0aGUgc2l6ZSAmXG4gKiAgY29uc3RyYWludHMgZm9yIGFuIGFycm93IGVsZW1lbnQsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJuIHZhbHVlIHdpbGwgaW5jbHVkZSBhbiBgYXJyb3dgIHBhcmFtXG4gKiAgd2l0aCBwb3NpdGlvbiBkZXRhaWxzXG4gKiBAcGFyYW0gW29mZnNldD0wXSB7bnVtYmVyfSBEaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYW5jaG9yXG4gKiBAcGFyYW0gW2J1ZmZlcj0wXSB7bnVtYmVyfSBNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXInc1xuICogIHBsYWNlbWVudCBhbmQgdGhlIGNvbnRhaW5lciBlZGdlXG4gKlxuICogQHJldHVybnMge0dldFBvcG92ZXJTY3JlZW5Db29yZGluYXRlc1Jlc3VsdH1cbiAqICBvYmplY3Qgd2l0aCB0b3AvbGVmdCBjb29yZGluYXRlcywgdGhlIHBvcG92ZXIncyByZWxhdGl2ZSBwb3NpdGlvbiB0byB0aGUgYW5jaG9yLCBhbmQgaG93IHdlbGwgdGhlXG4gKiAgcG9wb3ZlciBmaXRzIGluIHRoZSBsb2NhdGlvbiAoMC4wIC0+IDEuMCkgY29vcmRpbmF0ZXMgYW5kIHRoZSBwb3BvdmVyJ3MgcmVsYXRpdmUgcG9zaXRpb24sIGlmXG4gKiAgdGhlcmUgaXMgbm8gcm9vbSBpbiB0aGlzIHBsYWNlbWVudCB0aGVuIG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcG92ZXJTY3JlZW5Db29yZGluYXRlcyhfcmVmMikge1xuICB2YXIgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICBhbGlnbiA9IF9yZWYyLmFsaWduLFxuICAgIGFuY2hvckJvdW5kaW5nQm94ID0gX3JlZjIuYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgcG9wb3ZlckJvdW5kaW5nQm94ID0gX3JlZjIucG9wb3ZlckJvdW5kaW5nQm94LFxuICAgIHdpbmRvd0JvdW5kaW5nQm94ID0gX3JlZjIud2luZG93Qm91bmRpbmdCb3gsXG4gICAgY29udGFpbmVyQm91bmRpbmdCb3ggPSBfcmVmMi5jb250YWluZXJCb3VuZGluZ0JveCxcbiAgICBhcnJvd0NvbmZpZyA9IF9yZWYyLmFycm93Q29uZmlnLFxuICAgIF9yZWYyJG9mZnNldCA9IF9yZWYyLm9mZnNldCxcbiAgICBvZmZzZXQgPSBfcmVmMiRvZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBfcmVmMiRvZmZzZXQsXG4gICAgX3JlZjIkYnVmZmVyID0gX3JlZjIuYnVmZmVyLFxuICAgIGJ1ZmZlciA9IF9yZWYyJGJ1ZmZlciA9PT0gdm9pZCAwID8gMCA6IF9yZWYyJGJ1ZmZlcjtcbiAgLyoqXG4gICAqIFRoZSBnb2FsIGlzIHRvIGZpbmQgdGhlIGJlc3Qgd2F5IHRvIGFsaWduIHRoZSBwb3BvdmVyIGNvbnRlbnRcbiAgICogb24gdGhlIGdpdmVuIHNpZGUgb2YgdGhlIGFuY2hvciBlbGVtZW50LiBUaGUgcG9wb3ZlciBwcmVmZXJzXG4gICAqIGNlbnRlcmluZyBvbiB0aGUgYW5jaG9yIGJ1dCBjYW4gc2hpZnQgYWxvbmcgdGhlIGNyb3NzLWF4aXMgYXMgbmVlZGVkLlxuICAgKlxuICAgKiBXZSByZXR1cm4gdGhlIHRvcC9sZWZ0IGNvb3JkaW5hdGVzIHRoYXQgYmVzdCBmaXQgdGhlIHBvcG92ZXIgaW5zaWRlXG4gICAqIHRoZSBnaXZlbiBib3VuZGFyaWVzLCBhbmQgYWxzbyByZXR1cm4gdGhlIGBmaXRgIHZhbHVlIHdoaWNoIGluZGljYXRlc1xuICAgKiB3aGF0IHBlcmNlbnRhZ2Ugb2YgdGhlIHBvcG92ZXIgaXMgd2l0aGluIHRoZSBib3VuZHMuXG4gICAqXG4gICAqIGUuZy4gZmluZGluZyBhIGxvY2F0aW9uIHdoZW4gcG9zaXRpb249dG9wXG4gICAqIHRoZSBwcmVmZXJyZWQgbG9jYXRpb24gaXMgZGlyZWN0bHkgb3ZlciB0aGUgYW5jaG9yXG4gICAqXG4gICAqICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgIHwgICAgICAgcG9wb3ZlciAgICAgICAgfFxuICAgKiAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgICAgICAgIHZcbiAgICogICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgfCAgICBhbmNob3IgICAgfFxuICAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICpcbiAgICogYnV0IGlmIGFuY2hvciBkb2Vzbid0IGhhdmUgbXVjaCAob3IgYW55KSByb29tIG9uIGl0cyByaWRlIHNpZGVcbiAgICogdGhlIHBvcG92ZXIgd2lsbCBzaGlmdCB0byB0aGUgbGVmdFxuICAgKlxuICAgKiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgICogICAgfCAgICAgICBwb3BvdmVyICAgICAgICB8XG4gICAqICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgICAgICAgICAgICB2XG4gICAqICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgICAgIHwgICAgYW5jaG9yICAgIHxcbiAgICogICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rXG4gICAqXG4gICAqL1xuXG4gIHZhciBjcm9zc0F4aXNGaXJzdFNpZGUgPSBwb3NpdGlvblN1YnN0aXR1dGVzW3Bvc2l0aW9uXTsgLy8gXCJ0b3BcIiAtPiBcImxlZnRcIlxuICB2YXIgY3Jvc3NBeGlzU2Vjb25kU2lkZSA9IHBvc2l0aW9uQ29tcGxlbWVudHNbY3Jvc3NBeGlzRmlyc3RTaWRlXTsgLy8gXCJsZWZ0XCIgLT4gXCJyaWdodFwiXG4gIHZhciBjcm9zc0F4aXNEaW1lbnNpb24gPSByZWxhdGVkRGltZW5zaW9uW2Nyb3NzQXhpc0ZpcnN0U2lkZV07IC8vIFwibGVmdFwiIC0+IFwid2lkdGhcIlxuXG4gIHZhciBfZ2V0QnVmZmVyVmFsdWVzID0gZ2V0QnVmZmVyVmFsdWVzKGJ1ZmZlciksXG4gICAgX2dldEJ1ZmZlclZhbHVlczIgPSBfc2xpY2VkVG9BcnJheShfZ2V0QnVmZmVyVmFsdWVzLCA0KSxcbiAgICB0b3BCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzMlswXSxcbiAgICByaWdodEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzFdLFxuICAgIGJvdHRvbUJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzJdLFxuICAgIGxlZnRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzMlszXTtcbiAgdmFyIF9nZXRDcm9zc0F4aXNQb3NpdGlvbiA9IGdldENyb3NzQXhpc1Bvc2l0aW9uKHtcbiAgICAgIGNyb3NzQXhpc0ZpcnN0U2lkZTogY3Jvc3NBeGlzRmlyc3RTaWRlLFxuICAgICAgY3Jvc3NBeGlzU2Vjb25kU2lkZTogY3Jvc3NBeGlzU2Vjb25kU2lkZSxcbiAgICAgIGNyb3NzQXhpc0RpbWVuc2lvbjogY3Jvc3NBeGlzRGltZW5zaW9uLFxuICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgYWxpZ246IGFsaWduLFxuICAgICAgYnVmZmVyOiBidWZmZXIsXG4gICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgIHdpbmRvd0JvdW5kaW5nQm94OiB3aW5kb3dCb3VuZGluZ0JveCxcbiAgICAgIGNvbnRhaW5lckJvdW5kaW5nQm94OiBjb250YWluZXJCb3VuZGluZ0JveCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveDogcG9wb3ZlckJvdW5kaW5nQm94LFxuICAgICAgYW5jaG9yQm91bmRpbmdCb3g6IGFuY2hvckJvdW5kaW5nQm94LFxuICAgICAgYXJyb3dDb25maWc6IGFycm93Q29uZmlnXG4gICAgfSksXG4gICAgY3Jvc3NBeGlzUG9zaXRpb24gPSBfZ2V0Q3Jvc3NBeGlzUG9zaXRpb24uY3Jvc3NBeGlzUG9zaXRpb24sXG4gICAgY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiA9IF9nZXRDcm9zc0F4aXNQb3NpdGlvbi5jcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuICB2YXIgcHJpbWFyeUF4aXNEaW1lbnNpb24gPSByZWxhdGVkRGltZW5zaW9uW3Bvc2l0aW9uXTsgLy8gXCJ0b3BcIiAtPiBcImhlaWdodFwiXG4gIHZhciBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSA9IGRpbWVuc2lvblBvc2l0aW9uQXR0cmlidXRlW3ByaW1hcnlBeGlzRGltZW5zaW9uXTsgLy8gXCJoZWlnaHRcIiAtPiBcInRvcFwiXG5cbiAgdmFyIF9nZXRQcmltYXJ5QXhpc1Bvc2l0aSA9IGdldFByaW1hcnlBeGlzUG9zaXRpb24oe1xuICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICBwb3BvdmVyQm91bmRpbmdCb3g6IHBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIGFuY2hvckJvdW5kaW5nQm94OiBhbmNob3JCb3VuZGluZ0JveCxcbiAgICAgIGFycm93Q29uZmlnOiBhcnJvd0NvbmZpZ1xuICAgIH0pLFxuICAgIHByaW1hcnlBeGlzUG9zaXRpb24gPSBfZ2V0UHJpbWFyeUF4aXNQb3NpdGkucHJpbWFyeUF4aXNQb3NpdGlvbixcbiAgICBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb24gPSBfZ2V0UHJpbWFyeUF4aXNQb3NpdGkucHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uO1xuICB2YXIgcG9wb3ZlclBsYWNlbWVudCA9IF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIGNyb3NzQXhpc0ZpcnN0U2lkZSwgY3Jvc3NBeGlzUG9zaXRpb24pLCBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSwgcHJpbWFyeUF4aXNQb3NpdGlvbik7XG5cbiAgLy8gY2FsY3VsYXRlIHRoZSBmaXQgb2YgdGhlIHBvcG92ZXIgaW4gdGhpcyBsb2NhdGlvblxuICAvLyBmaXQgaXMgaW4gcmFuZ2UgMC4wIC0+IDEuMCBhbmQgaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHBvcG92ZXIgd2hpY2ggaXMgdmlzaWJsZSBpbiB0aGlzIGxvY2F0aW9uXG4gIHZhciBjb21iaW5lZEJvdW5kaW5nQm94ID0gaW50ZXJzZWN0Qm91bmRpbmdCb3hlcyh3aW5kb3dCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gpO1xuXG4gIC8vIHNocmluayB0aGUgdmlzaWJsZSBib3VuZGluZyBib3ggYnkgYGJ1ZmZlcmBcbiAgLy8gdG8gY29tcHV0ZSBhIGZpdCB2YWx1ZVxuICBjb21iaW5lZEJvdW5kaW5nQm94LnRvcCArPSB0b3BCdWZmZXI7XG4gIGNvbWJpbmVkQm91bmRpbmdCb3gucmlnaHQgLT0gcmlnaHRCdWZmZXI7XG4gIGNvbWJpbmVkQm91bmRpbmdCb3guYm90dG9tIC09IGJvdHRvbUJ1ZmZlcjtcbiAgY29tYmluZWRCb3VuZGluZ0JveC5sZWZ0ICs9IGxlZnRCdWZmZXI7XG4gIHZhciBmaXQgPSBnZXRWaXNpYmxlRml0KHtcbiAgICB0b3A6IHBvcG92ZXJQbGFjZW1lbnQudG9wLFxuICAgIHJpZ2h0OiBwb3BvdmVyUGxhY2VtZW50LmxlZnQgKyBwb3BvdmVyQm91bmRpbmdCb3gud2lkdGgsXG4gICAgYm90dG9tOiBwb3BvdmVyUGxhY2VtZW50LnRvcCArIHBvcG92ZXJCb3VuZGluZ0JveC5oZWlnaHQsXG4gICAgbGVmdDogcG9wb3ZlclBsYWNlbWVudC5sZWZ0LFxuICAgIHdpZHRoOiBwb3BvdmVyQm91bmRpbmdCb3gud2lkdGgsXG4gICAgaGVpZ2h0OiBwb3BvdmVyQm91bmRpbmdCb3guaGVpZ2h0XG4gIH0sIGNvbWJpbmVkQm91bmRpbmdCb3gpO1xuICB2YXIgYXJyb3cgPSBhcnJvd0NvbmZpZyA/IF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIGNyb3NzQXhpc0ZpcnN0U2lkZSwgY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiAtIHBvcG92ZXJQbGFjZW1lbnRbY3Jvc3NBeGlzRmlyc3RTaWRlXSksIHByaW1hcnlBeGlzUG9zaXRpb25OYW1lLCBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb24pIDogdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIGZpdDogZml0LFxuICAgIHRvcDogcG9wb3ZlclBsYWNlbWVudC50b3AsXG4gICAgbGVmdDogcG9wb3ZlclBsYWNlbWVudC5sZWZ0LFxuICAgIGFycm93OiBhcnJvdyA/IHtcbiAgICAgIGxlZnQ6IGFycm93LmxlZnQsXG4gICAgICB0b3A6IGFycm93LnRvcFxuICAgIH0gOiB1bmRlZmluZWRcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENyb3NzQXhpc1Bvc2l0aW9uKF9yZWY0KSB7XG4gIHZhciBjcm9zc0F4aXNGaXJzdFNpZGUgPSBfcmVmNC5jcm9zc0F4aXNGaXJzdFNpZGUsXG4gICAgY3Jvc3NBeGlzU2Vjb25kU2lkZSA9IF9yZWY0LmNyb3NzQXhpc1NlY29uZFNpZGUsXG4gICAgY3Jvc3NBeGlzRGltZW5zaW9uID0gX3JlZjQuY3Jvc3NBeGlzRGltZW5zaW9uLFxuICAgIHBvc2l0aW9uID0gX3JlZjQucG9zaXRpb24sXG4gICAgYWxpZ24gPSBfcmVmNC5hbGlnbixcbiAgICBidWZmZXIgPSBfcmVmNC5idWZmZXIsXG4gICAgb2Zmc2V0ID0gX3JlZjQub2Zmc2V0LFxuICAgIHdpbmRvd0JvdW5kaW5nQm94ID0gX3JlZjQud2luZG93Qm91bmRpbmdCb3gsXG4gICAgY29udGFpbmVyQm91bmRpbmdCb3ggPSBfcmVmNC5jb250YWluZXJCb3VuZGluZ0JveCxcbiAgICBwb3BvdmVyQm91bmRpbmdCb3ggPSBfcmVmNC5wb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgYW5jaG9yQm91bmRpbmdCb3ggPSBfcmVmNC5hbmNob3JCb3VuZGluZ0JveCxcbiAgICBhcnJvd0NvbmZpZyA9IF9yZWY0LmFycm93Q29uZmlnO1xuICAvLyBob3cgbXVjaCBvZiB0aGUgcG9wb3ZlciBvdmVyZmxvd3MgcGFzdCBlaXRoZXIgc2lkZSBvZiB0aGUgYW5jaG9yIGlmIGl0cyBjZW50ZXJlZFxuICB2YXIgcG9wb3ZlclNpemVPbkNyb3NzQXhpcyA9IHBvcG92ZXJCb3VuZGluZ0JveFtjcm9zc0F4aXNEaW1lbnNpb25dO1xuICB2YXIgYW5jaG9yU2l6ZU9uQ3Jvc3NBeGlzID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRGltZW5zaW9uXTtcbiAgdmFyIGFuY2hvckhhbGZTaXplID0gYW5jaG9yU2l6ZU9uQ3Jvc3NBeGlzIC8gMjtcblxuICAvLyB0aGUgcG9wb3ZlcidzIG9yaWdpbmFsIHBvc2l0aW9uIG9uIHRoZSBjcm9zcy1heGlzIGlzIGRldGVybWluZWQgYnk6XG4gIHZhciBjcm9zc0F4aXNQb3NpdGlvbk9yaWdpbmFsID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRmlyc3RTaWRlXSArXG4gIC8vIHdoZXJlIHRoZSBhbmNob3IgaXMgbG9jYXRlZFxuICBhbmNob3JIYWxmU2l6ZSAtXG4gIC8vIHBsdXMgaGFsZiBhbmNob3IgZGltZW5zaW9uXG4gIHBvcG92ZXJTaXplT25Dcm9zc0F4aXMgLyAyOyAvLyBsZXNzIGhhbGYgdGhlIHBvcG92ZXIgZGltZW5zaW9uXG5cbiAgLy8gVG8gZml0IHRoZSBjb250ZW50IHdpdGhpbiBib3RoIHRoZSB3aW5kb3cgYW5kIGNvbnRhaW5lcixcbiAgLy8gY29tcHV0ZSB0aGUgc21hbGxlciBvZiB0aGUgdHdvIHNwYWNlcyBhbG9uZyBlYWNoIGVkZ2VcbiAgdmFyIGNvbWJpbmVkQm91bmRpbmdCb3ggPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKHdpbmRvd0JvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCk7XG4gIHZhciBhdmFpbGFibGVTcGFjZSA9IGdldEF2YWlsYWJsZVNwYWNlKGFuY2hvckJvdW5kaW5nQm94LCBjb21iaW5lZEJvdW5kaW5nQm94LCBidWZmZXIsIG9mZnNldCwgcG9zaXRpb24pO1xuICB2YXIgbWluaW11bVNwYWNlID0gYXJyb3dDb25maWcgPyBhcnJvd0NvbmZpZy5hcnJvd0J1ZmZlciA6IDA7XG4gIHZhciBjb250ZW50T3ZlcmZsb3dTaXplID0gKHBvcG92ZXJTaXplT25Dcm9zc0F4aXMgLSBhbmNob3JTaXplT25Dcm9zc0F4aXMpIC8gMjtcbiAgdmFyIGFsaWduQW1vdW50ID0gMDtcbiAgdmFyIGFsaWduRGlyZWN0aW9uID0gMTtcbiAgdmFyIGFtb3VudE9mU2hpZnROZWVkZWQgPSAwO1xuICB2YXIgc2hpZnREaXJlY3Rpb24gPSAxO1xuICBpZiAoYWxpZ24gIT0gbnVsbCkge1xuICAgIC8vIG5vIGFsaWdubWVudCwgZmluZCBob3cgbXVjaCB0aGUgY29udGFpbmVyIGJvdW5kYXJ5IHJlcXVpcmVzIHRoZSBjb250ZW50IHRvIHNoaWZ0XG4gICAgYWxpZ25EaXJlY3Rpb24gPSBhbGlnbiA9PT0gJ3RvcCcgfHwgYWxpZ24gPT09ICdsZWZ0JyA/IDEgOiAtMTtcbiAgICBhbGlnbkFtb3VudCA9IGNvbnRlbnRPdmVyZmxvd1NpemU7XG4gICAgdmFyIGFsaWduZWRPdmVyZmxvd0Ftb3VudCA9IGNvbnRlbnRPdmVyZmxvd1NpemUgKyBhbGlnbkFtb3VudDtcbiAgICB2YXIgbmVlZHNTaGlmdCA9IGFsaWduZWRPdmVyZmxvd0Ftb3VudCA+IGF2YWlsYWJsZVNwYWNlW3Bvc2l0aW9uQ29tcGxlbWVudHNbYWxpZ25dXTtcbiAgICBhbW91bnRPZlNoaWZ0TmVlZGVkID0gbmVlZHNTaGlmdCA/IGFsaWduZWRPdmVyZmxvd0Ftb3VudCAtIGF2YWlsYWJsZVNwYWNlW3Bvc2l0aW9uQ29tcGxlbWVudHNbYWxpZ25dXSA6IDA7XG4gICAgc2hpZnREaXJlY3Rpb24gPSAtMSAqIGFsaWduRGlyZWN0aW9uO1xuICB9IGVsc2Uge1xuICAgIC8vIHNoaWZ0aW5nIHRoZSBwb3BvdmVyIHRvIG9uZSBzaWRlIG1heSB5aWVsZCBhIGJldHRlciBmaXRcbiAgICB2YXIgc3BhY2VBdmFpbGFibGVPbkZpcnN0U2lkZSA9IGF2YWlsYWJsZVNwYWNlW2Nyb3NzQXhpc0ZpcnN0U2lkZV07XG4gICAgdmFyIHNwYWNlQXZhaWxhYmxlT25TZWNvbmRTaWRlID0gYXZhaWxhYmxlU3BhY2VbY3Jvc3NBeGlzU2Vjb25kU2lkZV07XG4gICAgdmFyIGlzU2hpZnRUb3dhcmRGaXJzdFNpZGUgPSBzcGFjZUF2YWlsYWJsZU9uRmlyc3RTaWRlID4gc3BhY2VBdmFpbGFibGVPblNlY29uZFNpZGU7XG4gICAgc2hpZnREaXJlY3Rpb24gPSBpc1NoaWZ0VG93YXJkRmlyc3RTaWRlID8gLTEgOiAxO1xuXG4gICAgLy8gZGV0ZXJtaW5lIHdoaWNoIGRpcmVjdGlvbiBoYXMgbW9yZSByb29tIGFuZCB0aGUgcG9wb3ZlciBzaG91bGQgc2hpZnQgdG9cbiAgICB2YXIgbGVhc3RBdmFpbGFibGVTcGFjZSA9IE1hdGgubWluKHNwYWNlQXZhaWxhYmxlT25GaXJzdFNpZGUsIHNwYWNlQXZhaWxhYmxlT25TZWNvbmRTaWRlKTtcbiAgICB2YXIgX25lZWRzU2hpZnQgPSBjb250ZW50T3ZlcmZsb3dTaXplID4gbGVhc3RBdmFpbGFibGVTcGFjZTtcbiAgICBhbW91bnRPZlNoaWZ0TmVlZGVkID0gX25lZWRzU2hpZnQgPyBjb250ZW50T3ZlcmZsb3dTaXplIC0gbGVhc3RBdmFpbGFibGVTcGFjZSA6IDA7XG4gIH1cblxuICAvLyBzaGlmdCBvdmVyIHRoZSBwb3BvdmVyIGlmIG5lY2Vzc2FyeVxuICB2YXIgc2hpZnRBbW91bnQgPSBhbW91bnRPZlNoaWZ0TmVlZGVkICogc2hpZnREaXJlY3Rpb247XG4gIHZhciBjcm9zc0F4aXNQb3NpdGlvbiA9IGNyb3NzQXhpc1Bvc2l0aW9uT3JpZ2luYWwgKyBzaGlmdEFtb3VudCArIGFsaWduQW1vdW50ICogYWxpZ25EaXJlY3Rpb247XG5cbiAgLy8gaWYgYW4gYGFycm93Q29uZmlnYCBpcyBzcGVjaWZpZWQsIGZpbmQgd2hlcmUgdG8gcG9zaXRpb24gdGhlIGFycm93XG4gIHZhciBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuICBpZiAoYXJyb3dDb25maWcpIHtcbiAgICB2YXIgYXJyb3dXaWR0aCA9IGFycm93Q29uZmlnLmFycm93V2lkdGg7XG4gICAgY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiA9IGFuY2hvckJvdW5kaW5nQm94W2Nyb3NzQXhpc0ZpcnN0U2lkZV0gKyBhbmNob3JIYWxmU2l6ZSAtIGFycm93V2lkdGggLyAyO1xuXG4gICAgLy8gbWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGJ1ZmZlciBhcm91bmQgdGhlIGFycm93XG4gICAgLy8gYnkgY2FsY3VsYXRpbmcgaG93IGhvdyBtdWNoIHRoZSBhcnJvdyB3b3VsZCBuZWVkIHRvIG1vdmVcbiAgICAvLyBidXQgaW5zdGVhZCBvZiBtb3ZpbmcgdGhlIGFycm93LCBzaGlmdCB0aGUgcG9wb3ZlciBjb250ZW50XG4gICAgaWYgKGNyb3NzQXhpc0Fycm93UG9zaXRpb24gPCBjcm9zc0F4aXNQb3NpdGlvbiArIG1pbmltdW1TcGFjZSkge1xuICAgICAgLy8gYXJyb3cgaXMgdG9vIGNsb3NlIHRvIHRoZSBtaW5pbXVtIHNpZGVcbiAgICAgIHZhciBkaWZmZXJlbmNlID0gY3Jvc3NBeGlzUG9zaXRpb24gKyBtaW5pbXVtU3BhY2UgLSBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuICAgICAgY3Jvc3NBeGlzUG9zaXRpb24gLT0gZGlmZmVyZW5jZTtcbiAgICB9IGVsc2UgaWYgKGNyb3NzQXhpc0Fycm93UG9zaXRpb24gKyBtaW5pbXVtU3BhY2UgKyBhcnJvd1dpZHRoID4gY3Jvc3NBeGlzUG9zaXRpb24gKyBwb3BvdmVyU2l6ZU9uQ3Jvc3NBeGlzKSB7XG4gICAgICAvLyBhcnJvdyBpcyB0b28gY2xvc2UgdG8gdGhlIG1heGltdW0gc2lkZVxuICAgICAgdmFyIGVkZ2UgPSBjcm9zc0F4aXNQb3NpdGlvbiArIHBvcG92ZXJTaXplT25Dcm9zc0F4aXM7XG4gICAgICB2YXIgX2RpZmZlcmVuY2UgPSBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uIC0gKGVkZ2UgLSBtaW5pbXVtU3BhY2UgLSBhcnJvd1dpZHRoKTtcbiAgICAgIGNyb3NzQXhpc1Bvc2l0aW9uICs9IF9kaWZmZXJlbmNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGNyb3NzQXhpc1Bvc2l0aW9uOiBjcm9zc0F4aXNQb3NpdGlvbixcbiAgICBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uOiBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uXG4gIH07XG59XG5mdW5jdGlvbiBnZXRQcmltYXJ5QXhpc1Bvc2l0aW9uKF9yZWY1KSB7XG4gIHZhciBwb3NpdGlvbiA9IF9yZWY1LnBvc2l0aW9uLFxuICAgIG9mZnNldCA9IF9yZWY1Lm9mZnNldCxcbiAgICBwb3BvdmVyQm91bmRpbmdCb3ggPSBfcmVmNS5wb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgYW5jaG9yQm91bmRpbmdCb3ggPSBfcmVmNS5hbmNob3JCb3VuZGluZ0JveCxcbiAgICBhcnJvd0NvbmZpZyA9IF9yZWY1LmFycm93Q29uZmlnO1xuICAvLyBpZiBwb3NpdGlvbmluZyB0byB0aGUgdG9wIG9yIGxlZnQsIHRoZSB0YXJnZXQgcG9zaXRpb24gZGVjcmVhc2VzXG4gIC8vIGZyb20gdGhlIGFuY2hvcidzIHRvcCBvciBsZWZ0LCBvdGhlcndpc2UgdGhlIHBvc2l0aW9uIGFkZHMgdG8gdGhlIGFuY2hvcidzXG4gIHZhciBpc09mZnNldERlY3JlYXNpbmcgPSBwb3NpdGlvbiA9PT0gJ3RvcCcgfHwgcG9zaXRpb24gPT09ICdsZWZ0JztcbiAgdmFyIHByaW1hcnlBeGlzRGltZW5zaW9uID0gcmVsYXRlZERpbWVuc2lvbltwb3NpdGlvbl07IC8vIFwidG9wXCIgLT4gXCJoZWlnaHRcIlxuICB2YXIgcG9wb3ZlclNpemVPblByaW1hcnlBeGlzID0gcG9wb3ZlckJvdW5kaW5nQm94W3ByaW1hcnlBeGlzRGltZW5zaW9uXTtcblxuICAvLyBzdGFydCBhdCB0aGUgdG9wIG9yIGxlZnQgZWRnZSBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgdmFyIHByaW1hcnlBeGlzUG9zaXRpb25OYW1lID0gZGltZW5zaW9uUG9zaXRpb25BdHRyaWJ1dGVbcHJpbWFyeUF4aXNEaW1lbnNpb25dOyAvLyBcImhlaWdodFwiIC0+IFwidG9wXCJcbiAgdmFyIGFuY2hvckVkZ2VPcmlnaW4gPSBhbmNob3JCb3VuZGluZ0JveFtwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZV07XG5cbiAgLy8gZmluZCB0aGUgcG9wb3ZlciBwb3NpdGlvbiBvbiB0aGUgcHJpbWFyeSBheGlzXG4gIHZhciBhbmNob3JTaXplT25QcmltYXJ5QXhpcyA9IGFuY2hvckJvdW5kaW5nQm94W3ByaW1hcnlBeGlzRGltZW5zaW9uXTtcbiAgdmFyIHByaW1hcnlBeGlzT2Zmc2V0ID0gaXNPZmZzZXREZWNyZWFzaW5nID8gcG9wb3ZlclNpemVPblByaW1hcnlBeGlzIDogYW5jaG9yU2l6ZU9uUHJpbWFyeUF4aXM7XG4gIHZhciBjb250ZW50T2Zmc2V0ID0gKG9mZnNldCArIHByaW1hcnlBeGlzT2Zmc2V0KSAqIChpc09mZnNldERlY3JlYXNpbmcgPyAtMSA6IDEpO1xuICB2YXIgcHJpbWFyeUF4aXNQb3NpdGlvbiA9IGFuY2hvckVkZ2VPcmlnaW4gKyBjb250ZW50T2Zmc2V0O1xuICB2YXIgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uO1xuICBpZiAoYXJyb3dDb25maWcpIHtcbiAgICBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb24gPSBpc09mZnNldERlY3JlYXNpbmcgPyBwb3BvdmVyU2l6ZU9uUHJpbWFyeUF4aXMgOiAwO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJpbWFyeUF4aXNQb3NpdGlvbjogcHJpbWFyeUF4aXNQb3NpdGlvbixcbiAgICBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb246IHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvblxuICB9O1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBjbGllbnQgcGl4ZWwgY29vcmRpbmF0ZSBvZiBlYWNoIGVkZ2UgZm9yIHRoZSBlbGVtZW50J3MgYm91bmRpbmcgYm94LFxuICogYW5kIHRoZSBib3VuZGluZyBib3gncyB3aWR0aCAmIGhlaWdodFxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLCBsZWZ0OiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCB3aWR0aDogbnVtYmVyfX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRCb3VuZGluZ0JveChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IHJlY3QudG9wLFxuICAgIHJpZ2h0OiByZWN0LnJpZ2h0LFxuICAgIGJvdHRvbTogcmVjdC5ib3R0b20sXG4gICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgd2lkdGg6IHJlY3Qud2lkdGhcbiAgfTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhdmFpbGFibGUgY29udGVudCBzcGFjZSBiZXR3ZWVuIGFuY2hvciBhbmQgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFuY2hvckJvdW5kaW5nQm94IENsaWVudCBib3VuZGluZyBib3ggb2YgdGhlIGFuY2hvciBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGFpbmVyQm91bmRpbmdCb3ggQ2xpZW50IGJvdW5kaW5nIGJveCBvZiB0aGUgY29udGFpbmVyIGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBidWZmZXIgTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYm91bmRpbmcgY29udGFpbmVyXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IERpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBhbmNob3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBvZmZzZXRTaWRlIFNpZGUgdGhlIG9mZnNldCBuZWVkcyB0byBiZSBhcHBsaWVkIHRvLCBvbmVcbiAqICBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLCBsZWZ0OiBudW1iZXJ9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXZhaWxhYmxlU3BhY2UoYW5jaG9yQm91bmRpbmdCb3gsIGNvbnRhaW5lckJvdW5kaW5nQm94LCBidWZmZXIsIG9mZnNldCwgb2Zmc2V0U2lkZSkge1xuICB2YXIgX2dldEJ1ZmZlclZhbHVlczMgPSBnZXRCdWZmZXJWYWx1ZXMoYnVmZmVyKSxcbiAgICBfZ2V0QnVmZmVyVmFsdWVzNCA9IF9zbGljZWRUb0FycmF5KF9nZXRCdWZmZXJWYWx1ZXMzLCA0KSxcbiAgICB0b3BCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFswXSxcbiAgICByaWdodEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXM0WzFdLFxuICAgIGJvdHRvbUJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXM0WzJdLFxuICAgIGxlZnRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFszXTtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IGFuY2hvckJvdW5kaW5nQm94LnRvcCAtIGNvbnRhaW5lckJvdW5kaW5nQm94LnRvcCAtIHRvcEJ1ZmZlciAtIChvZmZzZXRTaWRlID09PSAndG9wJyA/IG9mZnNldCA6IDApLFxuICAgIHJpZ2h0OiBjb250YWluZXJCb3VuZGluZ0JveC5yaWdodCAtIGFuY2hvckJvdW5kaW5nQm94LnJpZ2h0IC0gcmlnaHRCdWZmZXIgLSAob2Zmc2V0U2lkZSA9PT0gJ3JpZ2h0JyA/IG9mZnNldCA6IDApLFxuICAgIGJvdHRvbTogY29udGFpbmVyQm91bmRpbmdCb3guYm90dG9tIC0gYW5jaG9yQm91bmRpbmdCb3guYm90dG9tIC0gYm90dG9tQnVmZmVyIC0gKG9mZnNldFNpZGUgPT09ICdib3R0b20nID8gb2Zmc2V0IDogMCksXG4gICAgbGVmdDogYW5jaG9yQm91bmRpbmdCb3gubGVmdCAtIGNvbnRhaW5lckJvdW5kaW5nQm94LmxlZnQgLSBsZWZ0QnVmZmVyIC0gKG9mZnNldFNpZGUgPT09ICdsZWZ0JyA/IG9mZnNldCA6IDApXG4gIH07XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGZpdCAob3ZlcmxhcCkgb2YgdGhlIGNvbnRlbnQgd2l0aGluIHRoZSBjb250YWluZXIsIGZpdCBpcyBpbiByYW5nZSAwLjAgPT4gMS4wXG4gKiBAcGFyYW0gY29udGVudEJvdW5kaW5nQm94IGJvdW5kaW5nIGJveCBvZiBjb250ZW50IHRvIGNhbGN1bGF0ZSBmaXQgZm9yXG4gKiBAcGFyYW0gY29udGFpbmVyQm91bmRpbmdCb3ggYm91bmRpbmcgYm94IG9mIGNvbnRhaW5lclxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc2libGVGaXQoY29udGVudEJvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCkge1xuICB2YXIgaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0Qm91bmRpbmdCb3hlcyhjb250ZW50Qm91bmRpbmdCb3gsIGNvbnRhaW5lckJvdW5kaW5nQm94KTtcbiAgaWYgKGludGVyc2VjdGlvbi5sZWZ0ID4gaW50ZXJzZWN0aW9uLnJpZ2h0IHx8IGludGVyc2VjdGlvbi50b3AgPiBpbnRlcnNlY3Rpb24udG9wKSB7XG4gICAgLy8gdGhlcmUgaXMgbm8gaW50ZXJzZWN0aW9uLCB0aGUgYm94ZXMgYXJlIGNvbXBsZXRlbHkgc2VwYXJhdGVkIG9uIGF0IGxlYXN0IG9uZSBheGlzXG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgdmFyIGludGVyc2VjdGlvbkFyZWEgPSAoaW50ZXJzZWN0aW9uLnJpZ2h0IC0gaW50ZXJzZWN0aW9uLmxlZnQpICogKGludGVyc2VjdGlvbi5ib3R0b20gLSBpbnRlcnNlY3Rpb24udG9wKTtcbiAgdmFyIGNvbnRlbnRBcmVhID0gKGNvbnRlbnRCb3VuZGluZ0JveC5yaWdodCAtIGNvbnRlbnRCb3VuZGluZ0JveC5sZWZ0KSAqIChjb250ZW50Qm91bmRpbmdCb3guYm90dG9tIC0gY29udGVudEJvdW5kaW5nQm94LnRvcCk7XG4gIHJldHVybiBpbnRlcnNlY3Rpb25BcmVhIC8gY29udGVudEFyZWE7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaW50ZXJzZWN0aW9uIHNwYWNlIGJldHdlZW4gdHdvIGJvdW5kaW5nIGJveGVzXG4gKlxuICogQHBhcmFtIGZpcnN0Qm94XG4gKiBAcGFyYW0gc2Vjb25kQm94XG4gKiBAcmV0dXJucyB7RXVpQ2xpZW50UmVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdEJvdW5kaW5nQm94ZXMoZmlyc3RCb3gsIHNlY29uZEJveCkge1xuICB2YXIgdG9wID0gTWF0aC5tYXgoZmlyc3RCb3gudG9wLCBzZWNvbmRCb3gudG9wKTtcbiAgdmFyIHJpZ2h0ID0gTWF0aC5taW4oZmlyc3RCb3gucmlnaHQsIHNlY29uZEJveC5yaWdodCk7XG4gIHZhciBib3R0b20gPSBNYXRoLm1pbihmaXJzdEJveC5ib3R0b20sIHNlY29uZEJveC5ib3R0b20pO1xuICB2YXIgbGVmdCA9IE1hdGgubWF4KGZpcnN0Qm94LmxlZnQsIHNlY29uZEJveC5sZWZ0KTtcbiAgdmFyIGhlaWdodCA9IE1hdGgubWF4KGJvdHRvbSAtIHRvcCwgMCk7XG4gIHZhciB3aWR0aCA9IE1hdGgubWF4KHJpZ2h0IC0gbGVmdCwgMCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiB0b3AsXG4gICAgcmlnaHQ6IHJpZ2h0LFxuICAgIGJvdHRvbTogYm90dG9tLFxuICAgIGxlZnQ6IGxlZnQsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgd2lkdGg6IHdpZHRoXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdG9wLW1vc3QgZGVmaW5lZCB6LWluZGV4IGluIHRoZSBlbGVtZW50J3MgYW5jZXN0b3IgaGllcmFyY2h5XG4gKiByZWxhdGl2ZSB0byB0aGUgYHRhcmdldGAgZWxlbWVudDsgaWYgbm8gei1pbmRleCBpcyBkZWZpbmVkLCByZXR1cm5zIDBcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH1cbiAqIEBwYXJhbSBjb3VzaW4ge0hUTUxFbGVtZW50fVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRaSW5kZXgoZWxlbWVudCwgY291c2luKSB7XG4gIC8qKlxuICAgKiBmaW5kaW5nIHRoZSB6LWluZGV4IG9mIGBlbGVtZW50YCBpcyBub3QgdGhlIGZ1bGwgc3RvcnlcbiAgICogaXRzIHRoZSBDU1Mgc3RhY2tpbmcgY29udGV4dCB0aGF0IGlzIGltcG9ydGFudFxuICAgKiB0YWtlIHRoaXMgRE9NIGZvciBleGFtcGxlOlxuICAgKiBib2R5XG4gICAqICAgc2VjdGlvblt6LWluZGV4OiAxMDAwXVxuICAgKiAgICAgcFt6LWluZGV4OiA1MDBdXG4gICAqICAgICAgIGJ1dHRvblxuICAgKiAgIGRpdlxuICAgKlxuICAgKiB3aGF0IHotaW5kZXggZG9lcyB0aGUgYGRpdmAgbmVlZCB0byBkaXNwbGF5IG5leHQgdG8gYGJ1dHRvbmA/XG4gICAqIHRoZSBgZGl2YCBhbmQgYHNlY3Rpb25gIGFyZSB3aGVyZSB0aGUgc3RhY2tpbmcgY29udGV4dCBzcGxpdHNcbiAgICogc28gYGRpdmAgbmVlZHMgdG8gY29weSBgc2VjdGlvbmAncyB6LWluZGV4IGluIG9yZGVyIHRvXG4gICAqIGFwcGVhciBuZXh0IHRvIC8gb3ZlciBgYnV0dG9uYFxuICAgKlxuICAgKiBjYWxjdWxhdGUgdGhpcyBieSBzdGFydGluZyBhdCBgYnV0dG9uYCBhbmQgZmluZGluZyBpdHMgb2Zmc2V0UGFyZW50c1xuICAgKiB0aGVuIHdhbGsgdGhlIHBhcmVudHMgZnJvbSB0b3AgLT4gZG93biB1bnRpbCB0aGUgc3RhY2tpbmcgY29udGV4dFxuICAgKiBzcGxpdCBpcyBmb3VuZCwgb3IgaWYgdGhlcmUgaXMgbm8gc3BsaXQgdGhlbiBhIHNwZWNpZmljIHotaW5kZXggaXMgdW5pbXBvcnRhbnRcbiAgICovXG5cbiAgLy8gYnVpbGQgdGhlIGFycmF5IG9mIHRoZSBlbGVtZW50ICsgaXRzIG9mZnNldCBwYXJlbnRzXG4gIHZhciBub2Rlc1RvSW5zcGVjdCA9IFtdO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIG5vZGVzVG9JbnNwZWN0LnB1c2goZWxlbWVudCk7XG5cbiAgICAvLyBBRkFJQ1QgdGhpcyBpcyBhIHZhbGlkIGNhc3QgLSB0aGUgbGliZGVmcyBhcHBlYXIgd3JvbmdcbiAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cbiAgICAvLyBzdG9wIGlmIHRoZXJlIGlzIG5vIHBhcmVudFxuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIHN0b3AgaWYgdGhlIHBhcmVudCBjb250YWlucyB0aGUgcmVsYXRlZCBlbGVtZW50XG4gICAgLy8gYXMgdGhpcyBpcyB0aGUgei1pbmRleCBhbmNlc3RvclxuICAgIGlmIChlbGVtZW50LmNvbnRhaW5zKGNvdXNpbikpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJldmVyc2UgdGhlIG5vZGVzIHRvIHdhbGsgZnJvbSB0b3AgLT4gZWxlbWVudFxuICBub2Rlc1RvSW5zcGVjdC5yZXZlcnNlKCk7XG4gIGZvciAodmFyIF9pID0gMCwgX25vZGVzVG9JbnNwZWN0ID0gbm9kZXNUb0luc3BlY3Q7IF9pIDwgX25vZGVzVG9JbnNwZWN0Lmxlbmd0aDsgX2krKykge1xuICAgIHZhciBub2RlID0gX25vZGVzVG9JbnNwZWN0W19pXTtcbiAgICAvLyBnZXQgdGhpcyBub2RlJ3Mgei1pbmRleCBjc3MgdmFsdWVcbiAgICB2YXIgekluZGV4ID0gd2luZG93LmRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgnei1pbmRleCcpO1xuXG4gICAgLy8gaWYgdGhlIHotaW5kZXggaXMgbm90IGEgbnVtYmVyIChlLmcuIFwiYXV0b1wiKSByZXR1cm4gbnVsbCwgZWxzZSB0aGUgdmFsdWVcbiAgICB2YXIgcGFyc2VkWkluZGV4ID0gcGFyc2VJbnQoekluZGV4LCAxMCk7XG4gICAgaWYgKCFpc05hTihwYXJzZWRaSW5kZXgpKSB7XG4gICAgICByZXR1cm4gcGFyc2VkWkluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBTZWN1cmVzIG91dGJvdW5kIGxpbmtzLiBGb3IgbW9yZSBpbmZvOlxuICogaHR0cHM6Ly93d3cuaml0Yml0LmNvbS9hbGV4YmxvZy8yNTYtdGFyZ2V0YmxhbmstLS10aGUtbW9zdC11bmRlcmVzdGltYXRlZC12dWxuZXJhYmlsaXR5LWV2ZXIvXG4gKi9cblxuZXhwb3J0IHZhciBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgPSBmdW5jdGlvbiBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoX3JlZikge1xuICB2YXIgX3JlZiR0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICB0YXJnZXQgPSBfcmVmJHRhcmdldCA9PT0gdm9pZCAwID8gJycgOiBfcmVmJHRhcmdldCxcbiAgICByZWwgPSBfcmVmLnJlbDtcbiAgdmFyIHJlbFBhcnRzID0gISFyZWwgPyByZWwuc3BsaXQoJyAnKS5maWx0ZXIoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gISFwYXJ0Lmxlbmd0aCAmJiBwYXJ0ICE9PSAnbm9yZWZlcnJlcic7XG4gIH0pIDogW107XG4gIHJlbFBhcnRzLnB1c2goJ25vcmVmZXJyZXInKTtcbiAgaWYgKHRhcmdldC5pbmNsdWRlcygnX2JsYW5rJykgJiYgcmVsUGFydHMuaW5kZXhPZignbm9vcGVuZXInKSA9PT0gLTEpIHtcbiAgICByZWxQYXJ0cy5wdXNoKCdub29wZW5lcicpO1xuICB9XG4gIHJldHVybiByZWxQYXJ0cy5zb3J0KCkuam9pbignICcpLnRyaW0oKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQVNDID0gJ2FzYyc7XG52YXIgREVTQyA9ICdkZXNjJztcbmV4cG9ydCB2YXIgU29ydERpcmVjdGlvbiA9IE9iamVjdC5mcmVlemUoe1xuICBBU0M6IEFTQyxcbiAgREVTQzogREVTQyxcbiAgaXNBc2M6IGZ1bmN0aW9uIGlzQXNjKGRpcmVjdGlvbikge1xuICAgIHJldHVybiBkaXJlY3Rpb24gPT09IEFTQztcbiAgfSxcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZShkaXJlY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5pc0FzYyhkaXJlY3Rpb24pID8gREVTQyA6IEFTQztcbiAgfVxufSk7XG5leHBvcnQgdmFyIFNvcnREaXJlY3Rpb25UeXBlID0gUHJvcFR5cGVzLm9uZU9mKFtBU0MsIERFU0NdKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IF9nZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgX29taXQgZnJvbSAnbG9kYXNoL29taXQnO1xuXG4vLyB3cmFwIHRoZSBsb2Rhc2ggZnVuY3Rpb25zIHRvIGF2b2lkIGhhdmluZyBsb2Rhc2gncyBUUyB0eXBlIGRlZmluaXRpb24gZnJvbSBiZWluZ1xuLy8gZXhwb3J0ZWQsIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIHRoZSBsb2Rhc2ggbmFtZXNwYWNlIGlmIG90aGVyIHZlcnNpb25zIGFyZSB1c2VkXG5cbmV4cG9ydCB2YXIgZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiBfZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKTtcbn07XG5leHBvcnQgdmFyIG9taXQgPSBmdW5jdGlvbiBvbWl0KG9iamVjdCwgcGF0aHMpIHtcbiAgcmV0dXJuIF9vbWl0KG9iamVjdCwgcGF0aHMpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgU29ydERpcmVjdGlvbiB9IGZyb20gJy4vc29ydF9kaXJlY3Rpb24nO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnLi4vb2JqZWN0cyc7XG5leHBvcnQgdmFyIENvbXBhcmF0b3JzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFNvcnREaXJlY3Rpb24uQVNDO1xuICAgIHJldHVybiBmdW5jdGlvbiAodjEsIHYyKSB7XG4gICAgICAvLyBKYXZhU2NyaXB0J3MgY29tcGFyaXNvbiBvZiBudWxsL3VuZGVmaW5lZCAoYW5kIHNvbWUgb3RoZXJzIG5vdCBoYW5kbGVkIGhlcmUpIHZhbHVlcyBhbHdheXMgcmV0dXJucyBgZmFsc2VgXG4gICAgICAvLyAoaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8jc2VjLWFic3RyYWN0LXJlbGF0aW9uYWwtY29tcGFyaXNvbilcbiAgICAgIC8vIHJlc3VsdGluZyBpbiBjYXNlcyB3aGVyZSB2MSA8IHYyIGFuZCB2MSA+IHYyIGFyZSBib3RoIGZhbHNlLlxuICAgICAgLy8gVGhpcyBsZWFkcyB0byB1bnByZWRpY3RhYmxlIHNvcnRpbmcgcmVzdWx0cyBpbiBtdWx0aXBsZSBKUyBlbmdpbmUgc29ydGluZyBhbGdvcml0aG1zXG4gICAgICAvLyB3aGljaCBjYXVzZXMgdW5wcmVkaWN0YWJsZSB1c2VyIGV4cGVyaWVuY2VzLlxuICAgICAgLy8gSW5zdGVhZDpcbiAgICAgIC8vICogMS4gcHVzaCB1bmRlZmluZWQvbnVsbCB2YWx1ZXMgdG8gdGhlIGVuZCBvZiB0aGUgc29ydGVkIGxpc3QsIF9yZWdhcmRsZXNzIG9mIHNvcnQgZGlyZWN0aW9uX1xuICAgICAgLy8gICAgKG5vbi1zb3J0YWJsZSB2YWx1ZXMgYWx3YXlzIGFwcGVhciBhdCB0aGUgZW5kLCBhbmQgc29ydGFibGUgdmFsdWVzIGFyZSBzb3J0ZWQgYXQgdGhlIHRvcClcbiAgICAgIC8vICogMi4gcmVwb3J0IHVuZGVmaW5lZC9udWxsIHZhbHVlcyBhcyBlcXVhbFxuICAgICAgLy8gKiAzLiB3aGVuIGJvdGggdmFsdWVzIGFyZSBjb21wYXJhYmxlIHRoZXkgYXJlIHNvcnRlZCBub3JtYWxseVxuXG4gICAgICB2YXIgdjFJc0NvbXBhcmFibGUgPSB2MSAhPSBudWxsO1xuICAgICAgdmFyIHYySXNDb21wYXJhYmxlID0gdjIgIT0gbnVsbDtcblxuICAgICAgLy8gKiAxLlxuICAgICAgaWYgKHYxSXNDb21wYXJhYmxlICYmICF2MklzQ29tcGFyYWJsZSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAoIXYxSXNDb21wYXJhYmxlICYmIHYySXNDb21wYXJhYmxlKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICAvLyAqIDIuXG4gICAgICBpZiAoIXYxSXNDb21wYXJhYmxlICYmICF2MklzQ29tcGFyYWJsZSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgLy8gKiAzLlxuICAgICAgaWYgKHYxID09PSB2Mikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSB2MSA+IHYyID8gMSA6IC0xO1xuICAgICAgcmV0dXJuIFNvcnREaXJlY3Rpb24uaXNBc2MoZGlyZWN0aW9uKSA/IHJlc3VsdCA6IC0xICogcmVzdWx0O1xuICAgIH07XG4gIH0sXG4gIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoY29tcGFyYXRvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAodjEsIHYyKSB7XG4gICAgICByZXR1cm4gY29tcGFyYXRvcih2MiwgdjEpO1xuICAgIH07XG4gIH0sXG4gIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh2YWx1ZUNhbGxiYWNrLCBjb21wYXJhdG9yKSB7XG4gICAgaWYgKCFjb21wYXJhdG9yKSB7XG4gICAgICBjb21wYXJhdG9yID0gdGhpcy5kZWZhdWx0KFNvcnREaXJlY3Rpb24uQVNDKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvMSwgbzIpIHtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yKHZhbHVlQ2FsbGJhY2sobzEpLCB2YWx1ZUNhbGxiYWNrKG8yKSk7XG4gICAgfTtcbiAgfSxcbiAgcHJvcGVydHk6IGZ1bmN0aW9uIHByb3BlcnR5KHByb3AsIGNvbXBhcmF0b3IpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZShmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBnZXQodmFsdWUsIHByb3ApO1xuICAgIH0sIGNvbXBhcmF0b3IpO1xuICB9XG59KTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxudmFyIEdST1VQX05VTUVSSUMgPSAvXihbXFxkLl0rKShzfG1zKS87XG5mdW5jdGlvbiBnZXRNaWxsaXNlY29uZHModmFsdWUsIHVuaXQpIHtcbiAgLy8gR2l2ZW4gdGhlIHJlZ2V4IG1hdGNoIGFuZCBjYXB0dXJlIGdyb3Vwcywgd2UgY2FuIGFzc3VtZSBgdW5pdGAgdG8gYmUgZWl0aGVyICdzJyBvciAnbXMnXG4gIHZhciBtdWx0aXBsaWVyID0gdW5pdCA9PT0gJ3MnID8gMTAwMCA6IDE7XG4gIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKSAqIG11bHRpcGxpZXI7XG59XG4vLyBGaW5kIENTUyBgdHJhbnNpdGlvbi1kdXJhdGlvbmAgYW5kIGB0cmFuc2l0aW9uLWRlbGF5YCBpbnRlcnZhbHNcbi8vIGFuZCByZXR1cm4gdGhlIHZhbHVlIG9mIGVhY2ggY29tcHV0ZWQgcHJvcGVydHkgaW4gJ21zJ1xuZXhwb3J0IHZhciBnZXRUcmFuc2l0aW9uVGltaW5ncyA9IGZ1bmN0aW9uIGdldFRyYW5zaXRpb25UaW1pbmdzKGVsZW1lbnQpIHtcbiAgdmFyIGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgdmFyIGNvbXB1dGVkRHVyYXRpb24gPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zaXRpb24tZHVyYXRpb24nKTtcbiAgdmFyIGR1cmF0aW9uTWF0Y2hBcnJheSA9IGNvbXB1dGVkRHVyYXRpb24ubWF0Y2goR1JPVVBfTlVNRVJJQyk7XG4gIHZhciBkdXJhdGlvbk1hdGNoID0gZHVyYXRpb25NYXRjaEFycmF5ID8gZ2V0TWlsbGlzZWNvbmRzKGR1cmF0aW9uTWF0Y2hBcnJheVsxXSwgZHVyYXRpb25NYXRjaEFycmF5WzJdKSA6IDA7XG4gIHZhciBjb21wdXRlZERlbGF5ID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCd0cmFuc2l0aW9uLWRlbGF5Jyk7XG4gIHZhciBkZWxheU1hdGNoQXJyYXkgPSBjb21wdXRlZERlbGF5Lm1hdGNoKEdST1VQX05VTUVSSUMpO1xuICB2YXIgZGVsYXlNYXRjaCA9IGRlbGF5TWF0Y2hBcnJheSA/IGdldE1pbGxpc2Vjb25kcyhkZWxheU1hdGNoQXJyYXlbMV0sIGRlbGF5TWF0Y2hBcnJheVsyXSkgOiAwO1xuICByZXR1cm4ge1xuICAgIGR1cmF0aW9uTWF0Y2g6IGR1cmF0aW9uTWF0Y2gsXG4gICAgZGVsYXlNYXRjaDogZGVsYXlNYXRjaFxuICB9O1xufTtcbmZ1bmN0aW9uIGlzRWxlbWVudE5vZGUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5ub2RlVHlwZSA9PT0gZG9jdW1lbnQuRUxFTUVOVF9OT0RFO1xufVxuLy8gVXNlcyBgZ2V0VHJhbnNpdGlvblRpbWluZ3NgIHRvIGZpbmQgdGhlIHRvdGFsIHRyYW5zaXRpb24gdGltZSBmb3Jcbi8vIGFsbCBlbGVtZW50cyB0YXJnZXRlZCBieSBhIE11dGF0aW9uT2JzZXJ2ZXIgY2FsbGJhY2tcbmV4cG9ydCB2YXIgZ2V0V2FpdER1cmF0aW9uID0gZnVuY3Rpb24gZ2V0V2FpdER1cmF0aW9uKHJlY29yZHMpIHtcbiAgcmV0dXJuIHJlY29yZHMucmVkdWNlKGZ1bmN0aW9uICh3YWl0RHVyYXRpb24sIHJlY29yZCkge1xuICAgIC8vIG9ubHkgY2hlY2sgZm9yIENTUyB0cmFuc2l0aW9uIHZhbHVlcyBmb3IgRUxFTUVOVCBub2Rlc1xuICAgIGlmIChpc0VsZW1lbnROb2RlKHJlY29yZC50YXJnZXQpKSB7XG4gICAgICB2YXIgX2dldFRyYW5zaXRpb25UaW1pbmdzID0gZ2V0VHJhbnNpdGlvblRpbWluZ3MocmVjb3JkLnRhcmdldCksXG4gICAgICAgIGR1cmF0aW9uTWF0Y2ggPSBfZ2V0VHJhbnNpdGlvblRpbWluZ3MuZHVyYXRpb25NYXRjaCxcbiAgICAgICAgZGVsYXlNYXRjaCA9IF9nZXRUcmFuc2l0aW9uVGltaW5ncy5kZWxheU1hdGNoO1xuICAgICAgd2FpdER1cmF0aW9uID0gTWF0aC5tYXgod2FpdER1cmF0aW9uLCBkdXJhdGlvbk1hdGNoICsgZGVsYXlNYXRjaCk7XG4gICAgfVxuICAgIHJldHVybiB3YWl0RHVyYXRpb247XG4gIH0sIDApO1xufTtcblxuLy8gVXNlcyBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCB0byBwZXJmb3JtIGEgZ2l2ZW4gY2FsbGJhY2sgYWZ0ZXIgYSBzcGVjaWZpZWQgd2FpdGluZyBwZXJpb2RcbmV4cG9ydCB2YXIgcGVyZm9ybU9uRnJhbWUgPSBmdW5jdGlvbiBwZXJmb3JtT25GcmFtZSh3YWl0RHVyYXRpb24sIHRvUGVyZm9ybSkge1xuICBpZiAod2FpdER1cmF0aW9uID4gMCkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHZhciBlbmRUaW1lID0gc3RhcnRUaW1lICsgd2FpdER1cmF0aW9uO1xuICAgIHZhciBvbkZyYW1lID0gZnVuY3Rpb24gb25GcmFtZSgpIHtcbiAgICAgIHRvUGVyZm9ybSgpO1xuICAgICAgaWYgKGVuZFRpbWUgPiBEYXRlLm5vdygpKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcbiAgfVxufTtcblxuLy8gQ29udmVuaWVuY2UgbWV0aG9kIGZvciBjb21iaW5pbmcgdGhlIHJlc3VsdCBvZiAnZ2V0V2FpdER1cmF0aW9uJyBkaXJlY3RseSB3aXRoICdwZXJmb3JtT25GcmFtZSdcbmV4cG9ydCB2YXIgZ2V0RHVyYXRpb25BbmRQZXJmb3JtT25GcmFtZSA9IGZ1bmN0aW9uIGdldER1cmF0aW9uQW5kUGVyZm9ybU9uRnJhbWUocmVjb3JkcywgdG9QZXJmb3JtKSB7XG4gIHBlcmZvcm1PbkZyYW1lKGdldFdhaXREdXJhdGlvbihyZWNvcmRzKSwgdG9QZXJmb3JtKTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdERlc3RydWN0dXJpbmdFbXB0eSh0KSB7IGlmIChudWxsID09IHQpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgZGVzdHJ1Y3R1cmUgXCIgKyB0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9jdXNSaW5nLCBldWlTY3JvbGxCYXJTdHlsZXMgfSBmcm9tICcuLi9taXhpbnMnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBzaGFkZSwgdGludCwgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2xvcic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IHJlc2V0U3R5bGVzIGFzIHJlc2V0IH0gZnJvbSAnLi9yZXNldCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlHbG9iYWxTdHlsZXMgPSBmdW5jdGlvbiBFdWlHbG9iYWxTdHlsZXMoX3JlZikge1xuICBfb2JqZWN0RGVzdHJ1Y3R1cmluZ0VtcHR5KF9yZWYpO1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGU7XG4gIHZhciBiYXNlID0gZXVpVGhlbWUuYmFzZSxcbiAgICBjb2xvcnMgPSBldWlUaGVtZS5jb2xvcnMsXG4gICAgZm9udCA9IGV1aVRoZW1lLmZvbnQ7XG5cbiAgLyoqXG4gICAqIERlY2xhcmluZyB0aGUgdG9wIGxldmVsIHNjcm9sbGJhciBjb2xvcnMgdG8gbWF0Y2ggdGhlIHRoZW1lIGFsc28gcmVxdWlyZXMgc2V0dGluZyB0aGUgc2l6ZXMgb24gQ2hyb21lXG4gICAqIHNvIHRoYXQgaXQga25vd3MgdG8gdXNlIGN1c3RvbSBzdHlsZXMuIFRoZXJlZm9yZSwgd2UganVzdCByZXVzZSB0aGUgc2FtZSBzY3JvbGxiYXIgbWl4aW4gd2l0aCB0aGljayBzaXplLlxuICAgKi9cbiAgdmFyIHNjcm9sbGJhclN0eWxlcyA9IGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZUNvbnRleHQsIHtcbiAgICB0cmFja0NvbG9yOiBjb2xvck1vZGUgPT09ICdMSUdIVCcgPyBzaGFkZShjb2xvcnMuYm9keSwgMC4wMykgOiB0aW50KGNvbG9ycy5ib2R5LCAwLjA3KSxcbiAgICB3aWR0aDogJ2F1dG8nXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGlzIGZvbnQgcmVzZXQgc2V0cyBhbGwgb3VyIGJhc2UgZm9udC90eXBvZ3JhcGh5IHJlbGF0ZWQgcHJvcGVydGllc1xuICAgKiB0aGF0IGFyZSBuZWVkZWQgdG8gb3ZlcnJpZGUgYnJvd3Nlci1zcGVjaWZpYyBlbGVtZW50IHNldHRpbmdzLlxuICAgKi9cbiAgdmFyIGZvbnRCb2R5U2NhbGUgPSBmb250LnNjYWxlW2ZvbnQuYm9keS5zY2FsZV07XG4gIHZhciBmb250UmVzZXQgPSB7XG4gICAgZm9udEZhbWlseTogZm9udC5mYW1pbHksXG4gICAgZm9udFNpemU6IFwiXCIuY29uY2F0KGZvbnQuZGVmYXVsdFVuaXRzID09PSAncHgnID8gZm9udEJvZHlTY2FsZSAqIGJhc2UgOiBmb250Qm9keVNjYWxlKS5jb25jYXQoZm9udC5kZWZhdWx0VW5pdHMpLFxuICAgIGxpbmVIZWlnaHQ6IGJhc2UgLyAoZm9udEJvZHlTY2FsZSAqIGJhc2UpLFxuICAgIGZvbnRXZWlnaHQ6IGZvbnQud2VpZ2h0W2ZvbnQuYm9keS53ZWlnaHRdXG4gIH07XG5cbiAgLyoqXG4gICAqIEZpbmFsIHN0eWxlc1xuICAgKi9cbiAgdmFyIHN0eWxlcyA9IC8qI19fUFVSRV9fKi9jc3MocmVzZXQsIFwiIGh0bWx7XCIsIHNjcm9sbGJhclN0eWxlcywgXCIgXCIsIGZvbnRSZXNldCwgXCIgdGV4dC1zaXplLWFkanVzdDoxMDAlO2ZvbnQta2VybmluZzpub3JtYWw7XCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiIGJhY2tncm91bmQtY29sb3I6XCIsIGNvbG9ycy5ib2R5LCBcIjtjb2xvcjpcIiwgY29sb3JzLnRleHQsIFwiO31jb2RlLHByZSxrYmQsc2FtcHtmb250LWZhbWlseTpcIiwgZm9udC5mYW1pbHlDb2RlLCBcIjt9aW5wdXQsdGV4dGFyZWEsc2VsZWN0e1wiLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGZvbnRSZXNldCksIHt9LCB7XG4gICAgZm9udFNpemU6ICcxcmVtJyAvLyBJbmhlcml0IGZyb20gaHRtbCByb290XG4gIH0pLCBcIjt9c2VsZWN0OmRpc2FibGVke29wYWNpdHk6MTt9YnV0dG9ue2ZvbnQtZmFtaWx5OlwiLCBmb250LmZhbWlseSwgXCI7fWVte2ZvbnQtc3R5bGU6aXRhbGljO31zdHJvbmd7Zm9udC13ZWlnaHQ6XCIsIGZvbnQud2VpZ2h0LmJvbGQsIFwiO30qOmZvY3Vze1wiLCBldWlGb2N1c1JpbmcoZXVpVGhlbWVDb250ZXh0KSwgXCI7fTo6c2VsZWN0aW9ue2JhY2tncm91bmQ6XCIsIHRyYW5zcGFyZW50aXplKGNvbG9ycy5wcmltYXJ5LCBjb2xvck1vZGUgPT09ICdMSUdIVCcgPyAwLjEgOiAwLjIpLCBcIjt9YXtjb2xvcjpcIiwgY29sb3JzLnByaW1hcnlUZXh0LCBcIjsmLCY6aG92ZXIsJjpmb2N1c3t0ZXh0LWRlY29yYXRpb246bm9uZTt9fS5ldWlCb2R5LWhhc1BvcnRhbENvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7fTtsYWJlbDpzdHlsZXM7XCIpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChHbG9iYWwsIHtcbiAgICBzdHlsZXM6IHN0eWxlc1xuICB9KTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQsIHRpbnRPclNoYWRlLCB0cmFuc3BhcmVudGl6ZSwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5leHBvcnQgdmFyIEJBQ0tHUk9VTkRfQ09MT1JTID0gWyd0cmFuc3BhcmVudCcsICdwbGFpbicsICdzdWJkdWVkJywgJ2FjY2VudCcsICdwcmltYXJ5JywgJ3N1Y2Nlc3MnLCAnd2FybmluZycsICdkYW5nZXInXTtcbi8qKlxuICogQHJldHVybnMgQSBzaW5nbGUgYmFja2dyb3VuZCBjb2xvciB3aXRoIG9wdGlvbmFsIGFscGhhIHRyYW5zcGFyZW5jeVxuICovXG5leHBvcnQgdmFyIGV1aUJhY2tncm91bmRDb2xvciA9IGZ1bmN0aW9uIGV1aUJhY2tncm91bmRDb2xvcihfcmVmLCBjb2xvcikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlO1xuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgIG1ldGhvZCA9IF9yZWYyLm1ldGhvZDtcbiAgaWYgKGNvbG9yID09PSAndHJhbnNwYXJlbnQnKSByZXR1cm4gJ3RyYW5zcGFyZW50JztcbiAgaWYgKG1ldGhvZCA9PT0gJ3RyYW5zcGFyZW50Jykge1xuICAgIGlmIChjb2xvciA9PT0gJ3BsYWluJykge1xuICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgMC4yKTtcbiAgICB9IGVsc2UgaWYgKGNvbG9yID09PSAnc3ViZHVlZCcpIHtcbiAgICAgIHJldHVybiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAwLjQpIDogdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUsIDAuMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnNbY29sb3JdLCAwLjEpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgX3RpbnRPclNoYWRlID0gZnVuY3Rpb24gX3RpbnRPclNoYWRlKGNvbG9yKSB7XG4gICAgICByZXR1cm4gY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShjb2xvciwgMC44KSA6IHRpbnQoY29sb3IsIDAuOSk7XG4gICAgfTtcbiAgICBzd2l0Y2ggKGNvbG9yKSB7XG4gICAgICBjYXNlICdwbGFpbic6XG4gICAgICAgIHJldHVybiBldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZTtcbiAgICAgIGNhc2UgJ3N1YmR1ZWQnOlxuICAgICAgICByZXR1cm4gZXVpVGhlbWUuY29sb3JzLmJvZHk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gX3RpbnRPclNoYWRlKGV1aVRoZW1lLmNvbG9yc1tjb2xvcl0pO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgbWFwIG9mIGNvbG9yIGtleXMgdG8gY29sb3IgdmFsdWVzLCBjYXRlZ29yaXplZCBieVxuICogb3BhcXVlIChkZWZhdWx0KSB2cyB0cmFuc3BhcmVuY3kgKGhvdmVyL2ZvY3VzIHN0YXRlcykgbWV0aG9kcy5cbiAqIGUuZy4ge1xuICogIG9wYXF1ZTogeyBkYW5nZXI6ICcjMDAwJywgc3VjY2VzczogJyNmZmYnLCAuLi4gfSxcbiAqICB0cmFuc3BhcmVudDogeyBkYW5nZXI6ICdyZ2JhKDAsMCwwLDAuMSknLCBzdWNjZXNzOiAncmdiYSgyNTUsMjU1LDI1NSwwLjEpJywgLi4uIH0sXG4gKiB9XG4gKi9cbnZhciBfZXVpQmFja2dyb3VuZENvbG9yTWFwID0gZnVuY3Rpb24gX2V1aUJhY2tncm91bmRDb2xvck1hcChldWlUaGVtZUNvbnRleHQpIHtcbiAgcmV0dXJuIHtcbiAgICBvcGFxdWU6IEJBQ0tHUk9VTkRfQ09MT1JTLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjb2xvcikge1xuICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWNjKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgY29sb3IsIGV1aUJhY2tncm91bmRDb2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKSkpO1xuICAgIH0sIHt9KSxcbiAgICB0cmFuc3BhcmVudDogQkFDS0dST1VORF9DT0xPUlMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGNvbG9yKSB7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhY2MpLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBjb2xvciwgZXVpQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IsIHtcbiAgICAgICAgbWV0aG9kOiAndHJhbnNwYXJlbnQnXG4gICAgICB9KSkpO1xuICAgIH0sIHt9KVxuICB9O1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpQmFja2dyb3VuZENvbG9yID0gZnVuY3Rpb24gdXNlRXVpQmFja2dyb3VuZENvbG9yKGNvbG9yKSB7XG4gIHZhciBfcmVmMyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgbWV0aG9kID0gX3JlZjMubWV0aG9kO1xuICB2YXIgYmFja2dyb3VuZENvbG9yTWFwID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoX2V1aUJhY2tncm91bmRDb2xvck1hcCk7XG4gIHJldHVybiBiYWNrZ3JvdW5kQ29sb3JNYXBbbWV0aG9kIHx8ICdvcGFxdWUnXVtjb2xvcl07XG59O1xuXG4vKipcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgY29sb3Iga2V5cyB0byBDU1MsXG4gKiBlLmcuIHsgZGFuZ2VyOiBjc3NgYCwgc3VjY2VzczogY3NzYGAsIC4uLiB9XG4gKi9cbnZhciBfZXVpQmFja2dyb3VuZENvbG9ycyA9IGZ1bmN0aW9uIF9ldWlCYWNrZ3JvdW5kQ29sb3JzKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4gQkFDS0dST1VORF9DT0xPUlMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGNvbG9yKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWNjKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgY29sb3IsIC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvciksIFwiO2xhYmVsOlwiLCBjb2xvciwgXCI7XCIpKSk7XG4gIH0sIHt9KTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aUJhY2tncm91bmRDb2xvckNTUyA9IGZ1bmN0aW9uIHVzZUV1aUJhY2tncm91bmRDb2xvckNTUygpIHtcbiAgcmV0dXJuIHVzZUV1aU1lbW9pemVkU3R5bGVzKF9ldWlCYWNrZ3JvdW5kQ29sb3JzKTtcbn07XG5cbi8qKlxuICogQm9yZGVyIGNvbG9yc1xuICovXG5cbmV4cG9ydCB2YXIgZXVpQm9yZGVyQ29sb3IgPSBmdW5jdGlvbiBldWlCb3JkZXJDb2xvcihfcmVmNCwgY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gX3JlZjQuY29sb3JNb2RlO1xuICBzd2l0Y2ggKGNvbG9yKSB7XG4gICAgY2FzZSAndHJhbnNwYXJlbnQnOlxuICAgIGNhc2UgJ3BsYWluJzpcbiAgICBjYXNlICdzdWJkdWVkJzpcbiAgICAgIHJldHVybiBldWlUaGVtZS5ib3JkZXIuY29sb3I7XG4gICAgY2FzZSAnd2FybmluZyc6XG4gICAgICByZXR1cm4gdGludE9yU2hhZGUoZXVpVGhlbWUuY29sb3JzLndhcm5pbmcsIDAuNCwgY29sb3JNb2RlKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRpbnRPclNoYWRlKGV1aVRoZW1lLmNvbG9yc1tjb2xvcl0sIDAuNiwgY29sb3JNb2RlKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgbWFwIG9mIGNvbG9yIGtleXMgdG8gQ1NTLFxuICogZS5nLiB7IGRhbmdlcjogY3NzYGAsIHN1Y2Nlc3M6IGNzc2BgLCAuLi4gfVxuICovXG52YXIgX2V1aUJvcmRlckNvbG9ycyA9IGZ1bmN0aW9uIF9ldWlCb3JkZXJDb2xvcnMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiBCQUNLR1JPVU5EX0NPTE9SUy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgY29sb3IpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhY2MpLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBjb2xvciwgLyojX19QVVJFX18qL2NzcyhcImJvcmRlci1jb2xvcjpcIiwgZXVpQm9yZGVyQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvciksIFwiO2xhYmVsOlwiLCBjb2xvciwgXCI7XCIpKSk7XG4gIH0sIHt9KTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aUJvcmRlckNvbG9yQ1NTID0gZnVuY3Rpb24gdXNlRXVpQm9yZGVyQ29sb3JDU1MoKSB7XG4gIHJldHVybiB1c2VFdWlNZW1vaXplZFN0eWxlcyhfZXVpQm9yZGVyQ29sb3JzKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUnO1xuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2xvcic7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuLyoqXG4gKiBTZXQgc2Nyb2xsIGJhciBhcHBlYXJhbmNlIG9uIENocm9tZSAoYW5kIGZpcmVmb3gpLlxuICogQWxsIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsIGFuZCBkZWZhdWx0IHRvIHNwZWNpZmljIGdsb2JhbCBzZXR0aW5ncy5cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNjcm9sbEJhclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVNjcm9sbEJhclN0eWxlcyhfcmVmKSB7XG4gIHZhciBfcmVmJGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICBjb2xvcnMgPSBfcmVmJGV1aVRoZW1lLmNvbG9ycyxcbiAgICBzaXplID0gX3JlZiRldWlUaGVtZS5zaXplO1xuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF90aHVtYkNvbG9yID0gX3JlZjIudGh1bWJDb2xvcixcbiAgICBfcmVmMiR0cmFja0NvbG9yID0gX3JlZjIudHJhY2tDb2xvcixcbiAgICB0cmFja0NvbG9yID0gX3JlZjIkdHJhY2tDb2xvciA9PT0gdm9pZCAwID8gJ3RyYW5zcGFyZW50JyA6IF9yZWYyJHRyYWNrQ29sb3IsXG4gICAgX3JlZjIkd2lkdGggPSBfcmVmMi53aWR0aCxcbiAgICB3aWR0aCA9IF9yZWYyJHdpZHRoID09PSB2b2lkIDAgPyAndGhpbicgOiBfcmVmMiR3aWR0aCxcbiAgICBfc2l6ZSA9IF9yZWYyLnNpemUsXG4gICAgX2Nvcm5lciA9IF9yZWYyLmNvcm5lcjtcbiAgLy8gU2V0IGRlZmF1bHRzIGZyb20gdGhlbWVcbiAgdmFyIHRodW1iQ29sb3IgPSBfdGh1bWJDb2xvciB8fCB0cmFuc3BhcmVudGl6ZShjb2xvcnMuZGFya1NoYWRlLCAwLjUpO1xuICB2YXIgc2Nyb2xsQmFyU2l6ZSA9IF9zaXplIHx8IHNpemUuYmFzZTtcbiAgdmFyIHNjcm9sbEJhckNvcm5lciA9IF9jb3JuZXIgfHwgd2lkdGggPT09ICd0aGluJyA/IFwiY2FsYyhcIi5jb25jYXQoc2l6ZS5zLCBcIiAqIDAuNzUpXCIpIDogc2l6ZS54cztcblxuICAvLyBGaXJlZm94J3Mgc2Nyb2xsYmFyIGNvbG9yaW5nIGNhc2NhZGVzLCBidXQgdGhlIHNpemluZyBkb2VzIG5vdCxcbiAgLy8gc28gaXQncyBiZWluZyBhZGRlZCB0byB0aGlzIG1peGluIGZvciBhbGxvd2luZyBzdXBwb3J0IHdoZXJldmVyIGN1c3RvbSBzY3JvbGxiYXJzIGFyZVxuICB2YXIgZmlyZWZveFN1cHBvcnQgPSBcInNjcm9sbGJhci1jb2xvcjogXCIuY29uY2F0KHRodW1iQ29sb3IsIFwiIFwiKS5jb25jYXQodHJhY2tDb2xvciwgXCI7XCIpO1xuICByZXR1cm4gXCJzY3JvbGxiYXItd2lkdGg6IFwiLmNvbmNhdCh3aWR0aCwgXCI7XFxuXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgc2Nyb2xsQmFyU2l6ZSksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCBzY3JvbGxCYXJTaXplKSwgXCJcXG4gICAgfVxcblxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdCh0aHVtYkNvbG9yLCBcIjtcXG4gICAgICBiYWNrZ3JvdW5kLWNsaXA6IGNvbnRlbnQtYm94O1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IFwiKS5jb25jYXQoc2Nyb2xsQmFyU2l6ZSwgXCI7XFxuICAgICAgYm9yZGVyOiBcIikuY29uY2F0KHNjcm9sbEJhckNvcm5lciwgXCIgc29saWQgXCIpLmNvbmNhdCh0cmFja0NvbG9yLCBcIjtcXG4gICAgfVxcblxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIsXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIikuY29uY2F0KHRyYWNrQ29sb3IsIFwiO1xcbiAgICB9XFxuXFxuICAgIFwiKS5jb25jYXQoZmlyZWZveFN1cHBvcnQsIFwiXFxuICBcIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlTY3JvbGxCYXIgPSBmdW5jdGlvbiB1c2VFdWlTY3JvbGxCYXIob3B0aW9ucykge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogKklOVEVSTkFMKlxuICogT3ZlcmZsb3cgc2hhZG93IG1hc2tzIGZvciB1c2UgaW4gWVNjcm9sbCBhbmQgWFNjcm9sbCBoZWxwZXJzXG4gKi9cblxudmFyIGV1aU92ZXJmbG93U2hhZG93U3R5bGVzID0gZnVuY3Rpb24gZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMoX3JlZjMpIHtcbiAgdmFyIHNpemUgPSBfcmVmMy5ldWlUaGVtZS5zaXplO1xuICB2YXIgX3JlZjQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF9kaXJlY3Rpb24gPSBfcmVmNC5kaXJlY3Rpb24sXG4gICAgX3NpZGUgPSBfcmVmNC5zaWRlO1xuICB2YXIgZGlyZWN0aW9uID0gX2RpcmVjdGlvbiB8fCAneSc7XG4gIHZhciBzaWRlID0gX3NpZGUgfHwgJ2JvdGgnO1xuICB2YXIgaGlkZUhlaWdodCA9IHNpemUucztcbiAgdmFyIGdyYWRpZW50U3RhcnQgPSBcIlxcbiAgXCIuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAwLjEpLCBcIiAwJSxcXG4gIFwiKS5jb25jYXQodHJhbnNwYXJlbnRpemUoJ3JlZCcsIDEpLCBcIiBcIikuY29uY2F0KGhpZGVIZWlnaHQsIFwiXFxuICBcIik7XG4gIHZhciBncmFkaWVudEVuZCA9IFwiXFxuICBcIi5jb25jYXQodHJhbnNwYXJlbnRpemUoJ3JlZCcsIDEpLCBcIiBjYWxjKDEwMCUgLSBcIikuY29uY2F0KGhpZGVIZWlnaHQsIFwiKSxcXG4gIFwiKS5jb25jYXQodHJhbnNwYXJlbnRpemUoJ3JlZCcsIDAuMSksIFwiIDEwMCVcXG4gIFwiKTtcbiAgdmFyIGdyYWRpZW50ID0gJyc7XG4gIGlmIChzaWRlKSB7XG4gICAgaWYgKHNpZGUgPT09ICdib3RoJykge1xuICAgICAgZ3JhZGllbnQgPSBcIlwiLmNvbmNhdChncmFkaWVudFN0YXJ0LCBcIiwgXCIpLmNvbmNhdChncmFkaWVudEVuZCk7XG4gICAgfSBlbHNlIGlmIChzaWRlID09PSAnc3RhcnQnKSB7XG4gICAgICBncmFkaWVudCA9IFwiXCIuY29uY2F0KGdyYWRpZW50U3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBncmFkaWVudCA9IFwiXCIuY29uY2F0KGdyYWRpZW50RW5kKTtcbiAgICB9XG4gIH1cblxuICAvLyBDaHJvbWUrRWRnZSBoYXMgYSB2ZXJ5IGJpemFycmUgZWRnZSBjYXNlIGJ1ZyB3aGVyZSBgbWFzay1pbWFnZWAgc3RvcHMgd29ya2luZ1xuICAvLyBUaGlzIHdvcmthcm91bmQgZm9yY2VzIGEgc3RhY2tpbmcgY29udGV4dCBvbiB0aGUgc2Nyb2xsaW5nIGNvbnRhaW5lciwgd2hpY2hcbiAgLy8gaG9wZWZ1bGx5IGFkZHJlc3NlcyB0aGUgYnVnLiBAc2VlOlxuICAvLyAtIGh0dHBzOi8vaXNzdWVzLmNocm9taXVtLm9yZy9pc3N1ZXMvNDA3Nzg1NDFcbiAgLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9raWJhbmEvaXNzdWVzLzE4MDgyOFxuICAvLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9wdWxsLzYzNDMjaXNzdWVjb21tZW50LTEzMDI3MzIwMjFcbiAgdmFyIGNocm9taXVtTWFza1dvcmthcm91bmQgPSAndHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOyc7XG4gIGlmIChkaXJlY3Rpb24gPT09ICd5Jykge1xuICAgIHJldHVybiBcIm1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIFwiLmNvbmNhdChncmFkaWVudCwgXCIpOyBcIikuY29uY2F0KGNocm9taXVtTWFza1dvcmthcm91bmQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIm1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgXCIuY29uY2F0KGdyYWRpZW50LCBcIik7IFwiKS5jb25jYXQoY2hyb21pdW1NYXNrV29ya2Fyb3VuZCk7XG4gIH1cbn07XG5cbi8qKlxuICogMS4gRm9jdXMgcmluZ3Mgc2hvdWxkbid0IGJlIHZpc2libGUgb24gc2Nyb2xsYWJsZSByZWdpb25zLCBidXQgYTExeSByZXF1aXJlcyB0aGVtIHRvIGJlIGZvY3VzYWJsZS5cbiAqICAgIEJyb3dzZXIncyBzdXBwb3J0aW5nIGA6Zm9jdXMtdmlzaWJsZWAgd2lsbCBzdGlsbCBzaG93IG91dGxpbmUgb24ga2V5Ym9hcmQgZm9jdXMgb25seS5cbiAqICAgIE90aGVycyBsaWtlIFNhZmFyaSwgd29uJ3Qgc2hvdyBhbnl0aGluZyBhdCBhbGwuXG4gKi9cblxuZXhwb3J0IHZhciBldWlZU2Nyb2xsID0gZnVuY3Rpb24gZXVpWVNjcm9sbChldWlUaGVtZSkge1xuICB2YXIgX3JlZjUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIGhlaWdodCA9IF9yZWY1LmhlaWdodDtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQoZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lKSwgXCJcXG4gIFwiKS5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0JywgaGVpZ2h0IHx8ICcxMDAlJyksIFwiXFxuICBcIikuY29uY2F0KGxvZ2ljYWxDU1NXaXRoRmFsbGJhY2soJ292ZXJmbG93LXknLCAnYXV0bycpLCBcIlxcbiAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrKCdvdmVyZmxvdy14JywgJ2hpZGRlbicpLCBcIlxcbiAgJjpmb2N1cyB7XFxuICAgIG91dGxpbmU6IG5vbmU7IC8qIDEgKi9cXG4gIH1cXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlZU2Nyb2xsID0gZnVuY3Rpb24gdXNlRXVpWVNjcm9sbCgpIHtcbiAgdmFyIF9yZWY2ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICBoZWlnaHQgPSBfcmVmNi5oZWlnaHQ7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlZU2Nyb2xsKGV1aVRoZW1lLCB7XG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfSk7XG59O1xuZXhwb3J0IHZhciBldWlZU2Nyb2xsV2l0aFNoYWRvd3MgPSBmdW5jdGlvbiBldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpIHtcbiAgdmFyIF9yZWY3ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBoZWlnaHQgPSBfcmVmNy5oZWlnaHQsXG4gICAgX3JlZjckc2lkZSA9IF9yZWY3LnNpZGUsXG4gICAgc2lkZSA9IF9yZWY3JHNpZGUgPT09IHZvaWQgMCA/ICdib3RoJyA6IF9yZWY3JHNpZGU7XG4gIHJldHVybiBcIlxcbiAgXCIuY29uY2F0KGV1aVlTY3JvbGwoZXVpVGhlbWUsIHtcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9KSwgXCJcXG4gIFwiKS5jb25jYXQoZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMoZXVpVGhlbWUsIHtcbiAgICBkaXJlY3Rpb246ICd5JyxcbiAgICBzaWRlOiBzaWRlXG4gIH0pLCBcIlxcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVlTY3JvbGxXaXRoU2hhZG93cyA9IGZ1bmN0aW9uIHVzZUV1aVlTY3JvbGxXaXRoU2hhZG93cygpIHtcbiAgdmFyIF9yZWY4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICBoZWlnaHQgPSBfcmVmOC5oZWlnaHQ7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUsIHtcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9KTtcbn07XG5leHBvcnQgdmFyIGV1aVhTY3JvbGwgPSBmdW5jdGlvbiBldWlYU2Nyb2xsKGV1aVRoZW1lKSB7XG4gIHJldHVybiBcIlxcbiAgXCIuY29uY2F0KGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZSksIFwiXFxuICBcIikuY29uY2F0KGxvZ2ljYWxDU1NXaXRoRmFsbGJhY2soJ292ZXJmbG93LXgnLCAnYXV0bycpLCBcIlxcbiAgJjpmb2N1cyB7XFxuICAgIG91dGxpbmU6IG5vbmU7IC8qIDEgKi9cXG4gIH1cXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlYU2Nyb2xsID0gZnVuY3Rpb24gdXNlRXVpWFNjcm9sbCgpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVhTY3JvbGwoZXVpVGhlbWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpWFNjcm9sbFdpdGhTaGFkb3dzID0gZnVuY3Rpb24gZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKSB7XG4gIHJldHVybiBcIlxcbiAgXCIuY29uY2F0KGV1aVhTY3JvbGwoZXVpVGhlbWUpLCBcIlxcbiAgXCIpLmNvbmNhdChldWlPdmVyZmxvd1NoYWRvd1N0eWxlcyhldWlUaGVtZSwge1xuICAgIGRpcmVjdGlvbjogJ3gnXG4gIH0pLCBcIlxcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVhTY3JvbGxXaXRoU2hhZG93cyA9IGZ1bmN0aW9uIHVzZUV1aVhTY3JvbGxXaXRoU2hhZG93cygpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVhTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSk7XG59O1xuZXhwb3J0IHZhciBldWlPdmVyZmxvd1Njcm9sbCA9IGZ1bmN0aW9uIGV1aU92ZXJmbG93U2Nyb2xsKGV1aVRoZW1lKSB7XG4gIHZhciBfcmVmOSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgZGlyZWN0aW9uID0gX3JlZjkuZGlyZWN0aW9uLFxuICAgIF9yZWY5JG1hc2sgPSBfcmVmOS5tYXNrLFxuICAgIG1hc2sgPSBfcmVmOSRtYXNrID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY5JG1hc2s7XG4gIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbWFzayA/IGV1aVlTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSkgOiBldWlZU2Nyb2xsKGV1aVRoZW1lKTtcbiAgICBjYXNlICd4JzpcbiAgICAgIHJldHVybiBtYXNrID8gZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKSA6IGV1aVhTY3JvbGwoZXVpVGhlbWUpO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb25zb2xlLndhcm4oJ1BsZWFzZSBwcm92aWRlIGEgdmFsaWQgZGlyZWN0aW9uIG9wdGlvbiB0byB1c2VFdWlPdmVyZmxvd1Njcm9sbCcpO1xuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuZXhwb3J0IHZhciB1c2VFdWlPdmVyZmxvd1Njcm9sbCA9IGZ1bmN0aW9uIHVzZUV1aU92ZXJmbG93U2Nyb2xsKGRpcmVjdGlvbikge1xuICB2YXIgbWFzayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlPdmVyZmxvd1Njcm9sbChldWlUaGVtZSwge1xuICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgIG1hc2s6IG1hc2tcbiAgfSk7XG59O1xuXG4vKipcbiAqIEZvciBxdWlja2x5IGFwcGx5aW5nIGEgZnVsbC1oZWlnaHQgZWxlbWVudCB3aGV0aGVyIHVzaW5nIGZsZXggb3Igbm90XG4gKi9cbmV4cG9ydCB2YXIgZXVpRnVsbEhlaWdodCA9IGZ1bmN0aW9uIGV1aUZ1bGxIZWlnaHQoKSB7XG4gIHJldHVybiBcIlxcbiAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiXFxuICBmbGV4OiAxIDEgYXV0bztcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuXCIpO1xufTtcblxuLyoqXG4gKiBBIGNvbnN0YW50IHN0b3JpbmcgdGhlIHN1cHBvcnQgZm9yIHRoZSBgOmhhcygpYCBzZWxlY3RvciB0aHJvdWdoIGFcbiAqIG1lZGlhIHF1ZXJ5IHRoYXQgd2lsbCBvbmx5IGFwcGx5IHRoZSBjb250ZW50IGl0IGlzIHN1cHBvcnRlZC5cbiAqL1xuZXhwb3J0IHZhciBldWlTdXBwb3J0c0hhcyA9ICdAc3VwcG9ydHMoc2VsZWN0b3IoOmhhcyhwKSkpJzsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUnO1xuZXhwb3J0IHZhciBQQURESU5HX1NJWkVTID0gWydub25lJywgJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJ107XG4vKipcbiAqIEdldCBhIHNpbmdsZSBwYWRkaW5nIHNpemVcbiAqL1xuXG5leHBvcnQgdmFyIGV1aVBhZGRpbmdTaXplID0gZnVuY3Rpb24gZXVpUGFkZGluZ1NpemUoX3JlZiwgc2l6ZSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICBzd2l0Y2ggKHNpemUpIHtcbiAgICBjYXNlICdub25lJzpcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIGV1aVRoZW1lLnNpemUuYmFzZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV1aVRoZW1lLnNpemVbc2l6ZV07XG4gIH1cbn07XG5cbi8qKlxuICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBwYWRkaW5nIHNpemUga2V5cyB0byBwYWRkaW5nIHZhbHVlcyxcbiAqIGUuZy4geyBzOiAnOHB4JywgbTogJzE2cHgnLCAuLi4gfVxuICovXG52YXIgX2dldEV1aVBhZGRpbmdTaXplID0gZnVuY3Rpb24gX2dldEV1aVBhZGRpbmdTaXplKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4gUEFERElOR19TSVpFUy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlc0FjYywgc2l6ZSkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlc0FjYyksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIHNpemUsIHNpemUgPT09ICdub25lJyA/IG51bGwgOiBldWlQYWRkaW5nU2l6ZShldWlUaGVtZUNvbnRleHQsIHNpemUpKSk7XG4gIH0sIHt9KTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVBhZGRpbmdTaXplID0gZnVuY3Rpb24gdXNlRXVpUGFkZGluZ1NpemUoc2l6ZSkge1xuICB2YXIgc2l6ZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhfZ2V0RXVpUGFkZGluZ1NpemUpO1xuICByZXR1cm4gc2l6ZXNbc2l6ZV07XG59O1xuXG4vKipcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgYWxsIHBhZGRpbmcgc2l6ZXMgZm9yIGFsbCBwYWRkaW5nIHNpZGVzIHByb3BlcnRpZXNcbiAqIGUuZy4sIHtcbiAqICAgcGFkZGluZzogeyBzOiBjc3NgcGFkZGluZy1zaXplOiA4cHhgLCAuLi4gfVxuICogICBsZWZ0OiB7IHM6IGNzc2BwYWRkaW5nLWlubGluZS1zdGFydDogOHB4YCwgLi4uIH1cbiAqIH1cbiAqL1xudmFyIF9ldWlQYWRkaW5nU2lkZXNBbmRTaXplcyA9IGZ1bmN0aW9uIF9ldWlQYWRkaW5nU2lkZXNBbmRTaXplcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIHNpemVzTWFwID0gX2dldEV1aVBhZGRpbmdTaXplKGV1aVRoZW1lQ29udGV4dCk7XG4gIC8vIFRoZSBgX2AgcHJlZml4IHN0b3BzIEVtb3Rpb24gZnJvbSBhcHBseWluZyB0aGUgZnVuY3Rpb24gbmFtZSBhcyBhIGxhYmVsXG4gIHZhciBfZ2VuZXJhdGVTaXplU3R5bGVzID0gZnVuY3Rpb24gX2dlbmVyYXRlU2l6ZVN0eWxlcyhjc3NQcm9wZXJ0eSkge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoc2l6ZXNNYXApLm1hcChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciBfcmVmMyA9IF9zbGljZWRUb0FycmF5KF9yZWYyLCAyKSxcbiAgICAgICAgc2l6ZUtleSA9IF9yZWYzWzBdLFxuICAgICAgICBzaXplVmFsdWUgPSBfcmVmM1sxXTtcbiAgICAgIHJldHVybiBbc2l6ZUtleSwgc2l6ZVZhbHVlID09PSBudWxsID8gbnVsbCA6IC8qI19fUFVSRV9fKi9jc3MoY3NzUHJvcGVydHksIFwiOlwiLCBzaXplVmFsdWUsIFwiO2xhYmVsOlwiLCBzaXplS2V5LCBcIjtcIildO1xuICAgIH0pKTtcbiAgfTtcbiAgdmFyIHNpZGVzTWFwID0ge1xuICAgIHBhZGRpbmc6IF9nZW5lcmF0ZVNpemVTdHlsZXMoJ3BhZGRpbmcnKSxcbiAgICB2ZXJ0aWNhbDogX2dlbmVyYXRlU2l6ZVN0eWxlcygncGFkZGluZy1ibG9jaycpLFxuICAgIHRvcDogX2dlbmVyYXRlU2l6ZVN0eWxlcygncGFkZGluZy1ibG9jay1zdGFydCcpLFxuICAgIGJvdHRvbTogX2dlbmVyYXRlU2l6ZVN0eWxlcygncGFkZGluZy1ibG9jay1lbmQnKSxcbiAgICBob3Jpem9udGFsOiBfZ2VuZXJhdGVTaXplU3R5bGVzKCdwYWRkaW5nLWlubGluZScpLFxuICAgIGxlZnQ6IF9nZW5lcmF0ZVNpemVTdHlsZXMoJ3BhZGRpbmctaW5saW5lLXN0YXJ0JyksXG4gICAgcmlnaHQ6IF9nZW5lcmF0ZVNpemVTdHlsZXMoJ3BhZGRpbmctaW5saW5lLWVuZCcpXG4gIH07XG4gIHJldHVybiBzaWRlc01hcDtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVBhZGRpbmdDU1MgPSBmdW5jdGlvbiB1c2VFdWlQYWRkaW5nQ1NTKHNpZGUpIHtcbiAgdmFyIG1lbW9pemVkU2lkZU1hcCA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKF9ldWlQYWRkaW5nU2lkZXNBbmRTaXplcyk7XG4gIHJldHVybiBtZW1vaXplZFNpZGVNYXBbc2lkZSB8fCAncGFkZGluZyddO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbi8qKlxuICogSXQgaXMgYmVzdCBwcmFjdGljZSB0byB1dGlsaXplIHRoZSBicm93c2VyJ3MgZGVmYXVsdCBgb3V0bGluZWAgcHJvcGVydHkgZm9yIGhhbmRsaW5nIGZvY3VzIHJpbmdzLlxuICogSG93ZXZlciwgc29tZSBjb21wb25lbnRzIG5lZWQgdG8gYmUgZm9yY2VkIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IsIG9yIGFkanVzdCB0aGUgZGlzcGxheS5cbiAqIFRoaXMgZnVuY3Rpb24gcmUtYXBwbGllcyB0aGUgc2FtZSBkZWZhdWx0IG91dGxpbmUgd2l0aCBhIGNvdXBsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gZXVpVGhlbWUgVXNlRXVpVGhlbWVcbiAqIEBwYXJhbSBvZmZzZXQgQWNjZXB0cyBhIHNwZWNpZmljIG1lYXN1cmVtZW50IG9yICdpbnNldCcsICdvdXRzZXQnIG9yICdjZW50ZXInIHRvIGFkanVzdCBvdXRsaW5lIHBvc2l0aW9uXG4gKiBAcGFyYW0gY29sb3IgQWNjZXB0cyBhbnkgQ1NTIGNvbG9yXG4gKi9cblxuZXhwb3J0IHZhciBldWlPdXRsaW5lID0gZnVuY3Rpb24gZXVpT3V0bGluZShfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHZhciBvZmZzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdjZW50ZXInO1xuICB2YXIgY29sb3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgLy8gV2lkdGggaXMgZW5mb3JjZWQgYXMgYSBjb25zdGFudCBhdCB0aGUgZ2xvYmFsIHRoZW1lIGxheWVyXG4gIHZhciBvdXRsaW5lV2lkdGggPSBldWlUaGVtZS5mb2N1cy53aWR0aDtcbiAgdmFyIG91dGxpbmVDb2xvciA9IGNvbG9yIHx8IGV1aVRoZW1lLmZvY3VzLmNvbG9yO1xuICB2YXIgb3V0bGluZU9mZnNldCA9IG9mZnNldDtcbiAgaWYgKG9mZnNldCA9PT0gJ2luc2V0Jykge1xuICAgIG91dGxpbmVPZmZzZXQgPSBcIi1cIi5jb25jYXQob3V0bGluZVdpZHRoKTtcbiAgfSBlbHNlIGlmIChvZmZzZXQgPT09ICdvdXRzZXQnKSB7XG4gICAgb3V0bGluZU9mZnNldCA9IFwiXCIuY29uY2F0KG91dGxpbmVXaWR0aCk7XG4gIH0gZWxzZSBpZiAob2Zmc2V0ID09PSAnY2VudGVyJykge1xuICAgIG91dGxpbmVPZmZzZXQgPSBtYXRoV2l0aFVuaXRzKG91dGxpbmVXaWR0aCwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4IC8gLTI7XG4gICAgfSk7XG4gIH1cblxuICAvLyBUaGlzIGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gZnJvbSBgZXVpRm9jdXNSaW5nYCBiZWNhdXNlIHNvbWUgRVVJIGNvbXBvbmVudHNcbiAgLy8gbmVlZCB0aGUgb3V0bGluZSBzdHlsZXMgb25seSwgbm90IHRoZSA6Zm9jdXMtdmlzaWJsZSBzZXR0aW5ncyAoZS5nLiAtIDpmb2N1cy13aXRoaW4gdXNhZ2UpXG4gIHJldHVybiBcIlxcbiAgICBvdXRsaW5lOiBcIi5jb25jYXQob3V0bGluZVdpZHRoLCBcIiBzb2xpZCBcIikuY29uY2F0KG91dGxpbmVDb2xvciwgXCI7XFxuICAgIG91dGxpbmUtb2Zmc2V0OiBcIikuY29uY2F0KG91dGxpbmVPZmZzZXQsIFwiO1xcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgZXVpRm9jdXNSaW5nID0gZnVuY3Rpb24gZXVpRm9jdXNSaW5nKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgb2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnY2VudGVyJztcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgLy8gVGhpcyBmdW5jdGlvbiB1dGlsaXplcyBgZm9jdXMtdmlzaWJsZWAgdG8gdHVybiBvbiBmb2N1cyBvdXRsaW5lcy5cbiAgLy8gQnV0IHRoaXMgaXMgYnJvd3Nlci1kZXBlbmRlbnQ6XG4gIC8vIFx1RDgzRFx1REM0OSBTYWZhcmkgYW5kIEZpcmVmb3ggaW5uYXRlbHkgcmVzcGVjdCBvbmx5IHNob3dpbmcgdGhlIG91dGxpbmUgd2l0aCBrZXlib2FyZCBvbmx5XG4gIC8vIFx1RDgzRFx1REM5NCBCdXQgdGhleSBkb24ndCBhbGxvdyBjb2xvcmluZyBvZiB0aGUgJ2F1dG8nL2RlZmF1bHQgb3V0bGluZSwgc28gY29udHJhc3QgaXMgbm8gZ29vZCBpbiBkYXJrIG1vZGUuXG4gIC8vIFx1RDgzRFx1REM0OSBGb3IgdGhlc2UgYnJvd3NlcnMgd2UgdXNlIHRoZSBzb2xpZCB0eXBlIGluIG9yZGVyIHRvIG1hdGNoIHdpdGggYGN1cnJlbnRDb2xvcmAuXG4gIC8vIFx1RDgzRFx1REUyNiBXaGljaCBkb2VzIG1lYW5zIHRoZSBvdXRsaW5lIHdpbGwgYmUgc3F1YXJlXG4gIHJldHVybiBcIlxcbiAgICBcIi5jb25jYXQoZXVpT3V0bGluZShldWlUaGVtZUNvbnRleHQsIG9mZnNldCwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNvbG9yKS50cmltKCksIFwiXFxuXFxuICAgIC8vIFxcdUQ4M0RcXHVEQzQwIENocm9tZSByZXNwZWN0cyA6Zm9jdXMtdmlzaWJsZSBhbmQgYWxsb3dzIGNvbG9yaW5nIHRoZSBgYXV0b2Agc3R5bGVcXG4gICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICBvdXRsaW5lLXN0eWxlOiBhdXRvO1xcbiAgICB9XFxuXFxuICAgIC8vIFxcdUQ4M0RcXHVERTQ1XFx1MjAwRFxcdTI2NDBcXHVGRTBGIEJ1dCBDaHJvbWUgYWxzbyBuZWVkcyB0byBoYXZlIHRoZSBvdXRsaW5lIGZvcmNlZnVsbHkgcmVtb3ZlZCBmcm9tIHJlZ3VsYXIgYDpmb2N1c2Agc3RhdGVcXG4gICAgJjpub3QoOmZvY3VzLXZpc2libGUpIHtcXG4gICAgICBvdXRsaW5lOiBub25lO1xcbiAgICB9XFxuICBcIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlGb2N1c1JpbmcgPSBmdW5jdGlvbiB1c2VFdWlGb2N1c1Jpbmcob2Zmc2V0LCBjb2xvcikge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpRm9jdXNSaW5nKGV1aVRoZW1lLCBvZmZzZXQsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGV1aUxpbmVIZWlnaHRGcm9tQmFzZWxpbmUsIGV1aUZvbnRTaXplRnJvbVNjYWxlIH0gZnJvbSAnLi4vZnVuY3Rpb25zL3R5cG9ncmFwaHknO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMsIHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUnO1xuaW1wb3J0IHsgRXVpVGhlbWVGb250U2NhbGVzIH0gZnJvbSAnLi4vdmFyaWFibGVzL3R5cG9ncmFwaHknO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG4vKipcbiAqIFJldHVybnMgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodFxuICovXG5leHBvcnQgdmFyIGV1aUZvbnRTaXplID0gZnVuY3Rpb24gZXVpRm9udFNpemUoX3JlZiwgc2NhbGUsIG9wdGlvbnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBmb250U2l6ZTogZXVpRm9udFNpemVGcm9tU2NhbGUoc2NhbGUsIGV1aVRoZW1lLCBvcHRpb25zKSxcbiAgICBsaW5lSGVpZ2h0OiBldWlMaW5lSGVpZ2h0RnJvbUJhc2VsaW5lKHNjYWxlLCBldWlUaGVtZSwgb3B0aW9ucylcbiAgfTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aUZvbnRTaXplID0gZnVuY3Rpb24gdXNlRXVpRm9udFNpemUoc2NhbGUsIG9wdGlvbnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIG1lbW9pemVkRm9udFNpemVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpRm9udFNpemVzKTtcbiAgcmV0dXJuICFvcHRpb25zID8gbWVtb2l6ZWRGb250U2l6ZXNbc2NhbGVdIDogZXVpRm9udFNpemUoZXVpVGhlbWUsIHNjYWxlLCBvcHRpb25zKTtcbn07XG4vLyBNZW1vbWl6ZSBhIGJhc2ljIHNldCBvZiBmb250IHNpemVzLiBXZSB1bmZvcnR1bmF0ZWx5IGNhbid0XG4vLyBtZW1vaXplIGFsbCBwb3NzaWJsZSBvcHRpb25zLCB0aGVyZSdzIHRvbyBtYW55IHBlcm11dGF0aW9uc1xudmFyIGV1aUZvbnRTaXplcyA9IGZ1bmN0aW9uIGV1aUZvbnRTaXplcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgcmV0dXJuIEV1aVRoZW1lRm9udFNjYWxlcy5yZWR1Y2UoZnVuY3Rpb24gKG1hcCwgc2NhbGUpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBtYXApLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBzY2FsZSwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCBzY2FsZSkpKTtcbiAgfSwge30pO1xufTtcblxuLyoqXG4gKiBGb3JjZSB0ZXh0IHRvIHdyYXAgb24gbmF0dXJhbCB3b3JkIGJyZWFrcyAoZS5nLiBzcGFjZXMgJiBoeXBoZW5zKVxuICogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvcHJldmVudC1sb25nLXVybHMtZnJvbS1icmVha2luZy1vdXQtb2YtY29udGFpbmVyL1xuICovXG5leHBvcnQgdmFyIGV1aVRleHRCcmVha1dvcmQgPSBmdW5jdGlvbiBldWlUZXh0QnJlYWtXb3JkKCkge1xuICByZXR1cm4gXCJcXG4gIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQgIWltcG9ydGFudDsgLy8gbWFrZXMgc3VyZSB0aGUgbG9uZyBzdHJpbmcgd2lsbCB3cmFwIGFuZCBub3QgYnVzdCBvdXQgb2YgdGhlIGNvbnRhaW5lclxcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcXG5cIjtcbn07XG5cbi8qKlxuICogUHJldmVudCB0ZXh0IGZyb20gd3JhcHBpbmcgb250byBtdWx0aXBsZSBsaW5lcywgYW5kIHRydW5jYXRlIHdpdGggYW4gZWxsaXBzaXMuXG4gKi9cbmV4cG9ydCB2YXIgZXVpVGV4dFRydW5jYXRlID0gZnVuY3Rpb24gZXVpVGV4dFRydW5jYXRlKCkge1xuICB2YXIgbWF4V2lkdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcxMDAlJztcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQobG9naWNhbENTUygnbWF4LXdpZHRoJywgbWF4V2lkdGgpIC8vIEVuc3VyZSB0aGF0IHRoZSBub2RlIGhhcyBhIG1heGltdW0gd2lkdGggYWZ0ZXIgd2hpY2ggdHJ1bmNhdGlvbiBjYW4gb2NjdXJcbiAgLCBcIlxcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXMgIWltcG9ydGFudDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcXG5cIik7XG59O1xuXG4vKipcbiAqIEZpeGVkLXdpZHRoIG51bWJlcnMgZm9yIHRhYnVsYXIgZGF0YVxuICovXG5leHBvcnQgdmFyIGV1aU51bWJlckZvcm1hdCA9IGZ1bmN0aW9uIGV1aU51bWJlckZvcm1hdChfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIFwiXFxuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IFwiLmNvbmNhdChldWlUaGVtZS5mb250LmZlYXR1cmVTZXR0aW5ncywgXCIsICd0bnVtJyAxO1xcblwiKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHNvcnRNYXBCeVNtYWxsVG9MYXJnZVZhbHVlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2JyZWFrcG9pbnQvX3NvcnRpbmcnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS9ob29rcyc7XG4vKipcbiAqIEdlbmVyYXRlcyBhIENTUyBtZWRpYSBxdWVyeSBydWxlIHN0cmluZyBiYXNlZCBvbiB0aGUgaW5wdXQgYnJlYWtwb2ludCAqcmFuZ2VzKi5cbiAqIEV4YW1wbGVzIHdpdGggZGVmYXVsdCB0aGVtZSBicmVha3BvaW50czpcbiAqXG4gKiBldWlCcmVha3BvaW50KFsncyddKSBiZWNvbWVzIGBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU3NXB4KSBhbmQgKG1heC13aWR0aDogNzY3cHgpYFxuICogZXVpQnJlYWtwb2ludChbJ3MnLCAnbCddKSBiZWNvbWVzIGBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU3NXB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KWBcbiAqXG4gKiBVc2UgdGhlIHNtYWxsZXN0IGFuZCBsYXJnZXN0IHNpemVzIHRvIGdlbmVyYXRlIG1lZGlhIHF1ZXJpZXMgd2l0aCBvbmx5IG1pbi9tYXgtd2lkdGguXG4gKiBFeGFtcGxlcyB3aXRoIGRlZmF1bHQgdGhlbWUgYnJlYWtwb2ludHM6XG4gKlxuICogZXVpQnJlYWtwb2ludChbJ3hzJywgJ20nXSkgYmVjb21lcyBgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5OTFweClgXG4gKiBldWlCcmVha3BvaW50KFsnbCcsICd4bCddKSBiZWNvbWVzIGBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDk5MnB4KWBcbiAqL1xuZXhwb3J0IHZhciBldWlCcmVha3BvaW50ID0gZnVuY3Rpb24gZXVpQnJlYWtwb2ludChfcmVmLCBzaXplcykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICAvLyBFbnN1cmUgd2UgaW5oZXJpdCBhbnkgdGhlbWUgYnJlYWtwb2ludCBvdmVycmlkZXMgJiBzb3J0IGJ5IHNtYWxsIHRvIGxhcmdlXG4gIHZhciBvcmRlcmVkQnJlYWtwb2ludHMgPSBPYmplY3Qua2V5cyhzb3J0TWFwQnlTbWFsbFRvTGFyZ2VWYWx1ZXMoZXVpVGhlbWUuYnJlYWtwb2ludCkpO1xuXG4gIC8vIEVuc3VyZSB0aGUgc2l6ZXMgYXJyYXkgaXMgaW4gdGhlIGNvcnJlY3QgYXNjZW5kaW5nIHNpemUgb3JkZXJcbiAgdmFyIG9yZGVyZWRTaXplcyA9IHNpemVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gb3JkZXJlZEJyZWFrcG9pbnRzLmluZGV4T2YoYSkgLSBvcmRlcmVkQnJlYWtwb2ludHMuaW5kZXhPZihiKTtcbiAgfSk7XG4gIHZhciBmaXJzdEJyZWFrcG9pbnQgPSBvcmRlcmVkU2l6ZXNbMF07XG4gIHZhciBtaW5CcmVha3BvaW50U2l6ZSA9IGV1aVRoZW1lLmJyZWFrcG9pbnRbZmlyc3RCcmVha3BvaW50XTtcbiAgdmFyIGxhc3RCcmVha3BvaW50ID0gb3JkZXJlZFNpemVzW3NpemVzLmxlbmd0aCAtIDFdO1xuICB2YXIgbWF4QnJlYWtwb2ludFNpemU7XG5cbiAgLy8gVG8gZ2V0IHRoZSBjb3JyZWN0IHNjcmVlbiByYW5nZSwgd2Ugc2V0IHRoZSBtYXgtd2lkdGggdG8gdGhlIG5leHQgYnJlYWtwb2ludFxuICAvLyBzaXplIGluIHRoZSBzaXplcyBhcnJheSAodW5sZXNzIHRoZSBzaXplIGlzIGFscmVhZHkgdGhlIGxhcmdlc3QgYnJlYWtwb2ludClcbiAgaWYgKGxhc3RCcmVha3BvaW50ICE9PSBvcmRlcmVkQnJlYWtwb2ludHNbb3JkZXJlZEJyZWFrcG9pbnRzLmxlbmd0aCAtIDFdKSB7XG4gICAgdmFyIG5leHRCcmVha3BvaW50ID0gb3JkZXJlZEJyZWFrcG9pbnRzLmluZGV4T2YobGFzdEJyZWFrcG9pbnQpICsgMTtcbiAgICBtYXhCcmVha3BvaW50U2l6ZSA9IGV1aVRoZW1lLmJyZWFrcG9pbnRbb3JkZXJlZEJyZWFrcG9pbnRzW25leHRCcmVha3BvaW50XV07XG4gIH1cbiAgcmV0dXJuIFsnQG1lZGlhIG9ubHkgc2NyZWVuJywgbWluQnJlYWtwb2ludFNpemUgPyBcIihtaW4td2lkdGg6IFwiLmNvbmNhdChtaW5CcmVha3BvaW50U2l6ZSwgXCJweClcIikgOiBmYWxzZSxcbiAgLy8gSWYgMCwgZG9uJ3QgcmVuZGVyIGEgbWluLXdpZHRoXG4gIG1heEJyZWFrcG9pbnRTaXplID8gXCIobWF4LXdpZHRoOiBcIi5jb25jYXQobWF4QnJlYWtwb2ludFNpemUgLSAxLCBcInB4KVwiKSA6IGZhbHNlIC8vIElmIHVuZGVmaW5lZCwgZG9uJ3QgcmVuZGVyIGEgbWF4LXdpZHRoXG4gIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyBhbmQgJyk7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlCcmVha3BvaW50ID0gZnVuY3Rpb24gdXNlRXVpQnJlYWtwb2ludChzaXplcykge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpQnJlYWtwb2ludChldWlUaGVtZSwgc2l6ZXMpO1xufTtcblxuLyoqXG4gKiBNaW4vTWF4IHdpZHRoIGJyZWFrcG9pbnQgdXRpbGl0aWVzIHRoYXQgZ2VuZXJhdGUgb25seSBhIHNpbmdsZSBtaW4vbWF4IHF1ZXJ5L2JvdW5kXG4gKlxuICogKlVubGlrZSB0aGUgYWJvdmUgZXVpQnJlYWtwb2ludCB1dGlsaXR5KiwgdGhlc2UgdXRpbGl0aWVzIHRyZWF0IGJyZWFrcG9pbnRcbiAqIHNpemVzIGFzIGEgb25lLWRpbWVuc2lvbmFsIHBvaW50LCByYXRoZXIgdGhhbiBhIHR3by1kaW1lbnNpb25hbCAqc2NyZWVuIHJhbmdlKi5cbiAqIEV4YW1wbGVzIHdpdGggZGVmYXVsdCB0aGVtZSBicmVha3BvaW50czpcbiAqXG4gKiBldWlNYXhCcmVha3BvaW50KCdtJykgYmVjb21lcyBgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweClgXG4gKiBldWlNaW5CcmVha3BvaW50KCdtJykgYmVjb21lcyBgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweClgXG4gKlxuICogVGhpcyBpcyBzYWZlciBhbmQgbW9yZSBpbnRlbnRpb25hbCB0byB1c2UgdGhhbiBldWlCcmVha3BvaW50KFsneHMnLCAncyddKSAvIGV1aUJyZWFrcG9pbnQoWydtJywgJ3hsJ10pXG4gKiBpbiB0aGUgZXZlbnQgdGhhdCBjb25zdW1lcnMgYWRkIGxhcmdlciBvciBzbWFsbGVyIGN1c3RvbSBicmVha3BvaW50cyAoZS5nICd4eHMnIG9yIGB4eGxgKVxuICogYW5kIGlmIHRoZSBpbnRlbnRpb24gb2YgdGhlIG1lZGlhIHF1ZXJ5IGlzIGFjdHVhbGx5IFwibSBhbmQgYmVsb3cvYWJvdmVcIiB2cy4gXCJvbmx5IHNjcmVlbnMgbS9sL3hsXCIuXG4gKi9cblxuZXhwb3J0IHZhciBldWlNaW5CcmVha3BvaW50ID0gZnVuY3Rpb24gZXVpTWluQnJlYWtwb2ludChfcmVmMiwgc2l6ZSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgdmFyIG1pbkJyZWFrcG9pbnRTaXplID0gZXVpVGhlbWUuYnJlYWtwb2ludFtzaXplXTtcbiAgaWYgKG1pbkJyZWFrcG9pbnRTaXplKSB7XG4gICAgcmV0dXJuIFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBcIi5jb25jYXQobWluQnJlYWtwb2ludFNpemUsIFwicHgpXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgbWluIGJyZWFrcG9pbnQgc2l6ZTogXCIuY29uY2F0KHNpemUpKTtcbiAgICByZXR1cm4gJ0BtZWRpYSBvbmx5IHNjcmVlbic7XG4gIH1cbn07XG5leHBvcnQgdmFyIHVzZUV1aU1pbkJyZWFrcG9pbnQgPSBmdW5jdGlvbiB1c2VFdWlNaW5CcmVha3BvaW50KHNpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aU1pbkJyZWFrcG9pbnQoZXVpVGhlbWUsIHNpemUpO1xufTtcbmV4cG9ydCB2YXIgZXVpTWF4QnJlYWtwb2ludCA9IGZ1bmN0aW9uIGV1aU1heEJyZWFrcG9pbnQoX3JlZjMsIHNpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjMuZXVpVGhlbWU7XG4gIHZhciBtYXhCcmVha3BvaW50U2l6ZSA9IGV1aVRoZW1lLmJyZWFrcG9pbnRbc2l6ZV07XG4gIGlmIChtYXhCcmVha3BvaW50U2l6ZSkge1xuICAgIHJldHVybiBcIkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogXCIuY29uY2F0KG1heEJyZWFrcG9pbnRTaXplIC0gMSwgXCJweClcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS53YXJuKFwiSW52YWxpZCBtYXggYnJlYWtwb2ludCBzaXplOiBcIi5jb25jYXQoc2l6ZSkpO1xuICAgIHJldHVybiAnQG1lZGlhIG9ubHkgc2NyZWVuJztcbiAgfVxufTtcbmV4cG9ydCB2YXIgdXNlRXVpTWF4QnJlYWtwb2ludCA9IGZ1bmN0aW9uIHVzZUV1aU1heEJyZWFrcG9pbnQoc2l6ZSkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpTWF4QnJlYWtwb2ludChldWlUaGVtZSwgc2l6ZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIHJlc2V0U3R5bGVzID0gXCJcXG4vKiAvLyBBZGFwdGVkIGZyb20gRXJpYyBNZXllcidzIHJlc2V0IChodHRwOi8vbWV5ZXJ3ZWIuY29tL2VyaWMvdG9vbHMvY3NzL3Jlc2V0LywgdjIuMCB8IDIwMTEwMTI2KS4gKi9cXG5cXG5cXG4qLCAqOmJlZm9yZSwgKjphZnRlciB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5cXG5odG1sLCBib2R5LCBkaXYsIHNwYW4sIGFwcGxldCwgb2JqZWN0LCBpZnJhbWUsXFxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgYmxvY2txdW90ZSwgcHJlLFxcbmEsIGFiYnIsIGFjcm9ueW0sIGFkZHJlc3MsIGJpZywgY2l0ZSwgY29kZSxcXG5kZWwsIGRmbiwgZW0sIGltZywgaW5zLCBrYmQsIHEsIHMsIHNhbXAsXFxuc21hbGwsIHN0cmlrZSwgc3Ryb25nLCBzdWIsIHN1cCwgdHQsIHZhcixcXG5iLCB1LCBpLCBjZW50ZXIsXFxuZGwsIGR0LCBkZCwgb2wsIHVsLCBsaSxcXG5maWVsZHNldCwgZm9ybSwgbGFiZWwsIGxlZ2VuZCxcXG50YWJsZSwgY2FwdGlvbiwgdGJvZHksIHRmb290LCB0aGVhZCwgdHIsIHRoLCB0ZCxcXG5hcnRpY2xlLCBhc2lkZSwgY2FudmFzLCBkZXRhaWxzLCBlbWJlZCxcXG5maWd1cmUsIGZpZ2NhcHRpb24sIGZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsXFxubWVudSwgbmF2LCBvdXRwdXQsIHJ1YnksIHNlY3Rpb24sIHN1bW1hcnksXFxudGltZSwgbWFyaywgYXVkaW8sIHZpZGVvIHtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBib3JkZXI6IG5vbmU7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XFxufVxcblxcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAge1xcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XFxuICBmb250LXdlaWdodDogaW5oZXJpdDtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG59XFxuXFxuLyogSFRNTDUgZGlzcGxheS1yb2xlIHJlc2V0IGZvciBvbGRlciBicm93c2VycyAqL1xcbmFydGljbGUsIGFzaWRlLCBkZXRhaWxzLCBmaWdjYXB0aW9uLCBmaWd1cmUsXFxuZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWVudSwgbmF2LCBzZWN0aW9uIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG5hW2hyZWZdLFxcbmJ1dHRvbixcXG5bcm9sZT0nYnV0dG9uJ10ge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG5idXR0b24ge1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW46IDA7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxufVxcblxcbmlucHV0IHtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbmlucHV0OmRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IDE7IC8qIHJlcXVpcmVkIG9uIGlPUyAqL1xcbn1cXG5cXG5vbCxcXG51bCB7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbn1cXG5cXG5ibG9ja3F1b3RlLFxcbnEge1xcbiAgcXVvdGVzOiBub25lO1xcbn1cXG5cXG5ibG9ja3F1b3RlOmJlZm9yZSxcXG5ibG9ja3F1b3RlOmFmdGVyLFxcbnE6YmVmb3JlLFxcbnE6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxufVxcblxcbnRhYmxlIHtcXG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XFxuICBib3JkZXItc3BhY2luZzogMDtcXG59XFxuXFxuaHIge1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5cXG5maWVsZHNldCB7XFxuICBtaW4taW5saW5lLXNpemU6IGF1dG87XFxufVxcblxcbi8qIENocm9tZSBoYXMgYW4gaXNzdWUgYXJvdW5kIFJUTCBsYW5ndWFnZXMgaW4gU1ZHcyB3aGVuIGxldHRlci1zcGFjaW5nIGlzIG5lZ2F0aXZlXFxuICogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9OTY2NDgwXFxuICovXFxuc3ZnIHRleHQge1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbCAhaW1wb3J0YW50O1xcbn1cIjsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBBIGNvbnN0YW50IHN0b3JpbmcgdGhlIGBwcmVmZXJzLXJlZHVjZWQtbW90aW9uYCBtZWRpYSBxdWVyeVxuICogc28gdGhhdCB3aGVuIGl0IGlzIHR1cm5lZCBvZmYsIGFuaW1hdGlvbnMgYXJlIG5vdCBydW4uXG4gKi9cbmV4cG9ydCB2YXIgZXVpQ2FuQW5pbWF0ZSA9ICdAbWVkaWEgc2NyZWVuIGFuZCAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSknO1xuXG4vKipcbiAqIEEgY29uc3RhbnQgc3RvcmluZyB0aGUgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gIG1lZGlhIHF1ZXJ5IHRoYXQgd2lsbFxuICogb25seSBhcHBseSB0aGUgY29udGVudCBpZiB0aGUgc2V0dGluZyBpcyBvZmYgKHJlZHVjZSkuXG4gKi9cbmV4cG9ydCB2YXIgZXVpQ2FudEFuaW1hdGUgPSAnQG1lZGlhIHNjcmVlbiBhbmQgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSknO1xuXG4vKipcbiAqIFNwZWVkcyAvIER1cmF0aW9ucyAvIERlbGF5c1xuICovXG5cbmV4cG9ydCB2YXIgRXVpVGhlbWVBbmltYXRpb25TcGVlZHMgPSBbJ2V4dHJhRmFzdCcsICdmYXN0JywgJ25vcm1hbCcsICdzbG93JywgJ2V4dHJhU2xvdyddO1xuLyoqXG4gKiBFYXNpbmdzIC8gVGltaW5nIGZ1bmN0aW9uc1xuICovXG5cbmV4cG9ydCB2YXIgRXVpVGhlbWVBbmltYXRpb25FYXNpbmdzID0gWydib3VuY2UnLCAncmVzaXN0YW5jZSddOyIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0LCBfdGVtcGxhdGVPYmplY3QyLCBfdGVtcGxhdGVPYmplY3QzLCBfdGVtcGxhdGVPYmplY3Q0O1xuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChlLCB0KSB7IHJldHVybiB0IHx8ICh0ID0gZS5zbGljZSgwKSksIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUodCkgfSB9KSk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmV4cG9ydCB2YXIgZXVpQW5pbUZhZGVJbiA9IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG5cIl0pKSk7XG5leHBvcnQgdmFyIGV1aUFuaW1TbGlkZUluVXAgPSBmdW5jdGlvbiBldWlBbmltU2xpZGVJblVwKHNpemUpIHtcbiAgcmV0dXJuIGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QyIHx8IChfdGVtcGxhdGVPYmplY3QyID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShcIiwgXCIpO1xcbiAgfVxcblxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG4gIH1cXG5cIl0pKSwgc2l6ZSk7XG59O1xuZXhwb3J0IHZhciBldWlBbmltU2xpZGVYID0gZnVuY3Rpb24gZXVpQW5pbVNsaWRlWChzaXplKSB7XG4gIHJldHVybiBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0MyB8fCAoX3RlbXBsYXRlT2JqZWN0MyA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAwJSB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChcIiwgXCIpO1xcbiAgfVxcblxcbiAgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcXG5cXG4gIH1cXG5cIl0pKSwgc2l6ZSk7XG59O1xuZXhwb3J0IHZhciBldWlBbmltU2NhbGUgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0NCB8fCAoX3RlbXBsYXRlT2JqZWN0NCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuXFxuICAxJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIH1cXG5cIl0pKSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxTaXplQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG4vKlxuICogTWl4aW4gdGhhdCBoaWRlcyBlbGVtZW50cyBvZmZzY3JlZW4gdG8gb25seSBiZSByZWFkIGJ5IHNjcmVlbiByZWFkZXJcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC81MTMwIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC81MTUyIGZvciBtb3JlIGluZm9cbiAqL1xuZXhwb3J0IHZhciBldWlTY3JlZW5SZWFkZXJPbmx5ID0gZnVuY3Rpb24gZXVpU2NyZWVuUmVhZGVyT25seSgpIHtcbiAgcmV0dXJuIFwiXFxuICAvKiBUYWtlIHRoZSBlbGVtZW50IG91dCBvZiB0aGUgbGF5b3V0ICovXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAvKiBLZWVwIGl0IHZlcnRpY2FsbHkgaW5saW5lICovXFxuICBcIi5jb25jYXQobG9naWNhbENTUygndG9wJywgJ2F1dG8nKSwgXCJcXG4gIC8qIENocm9tZSByZXF1aXJlcyBhIGxlZnQgdmFsdWUsIGFuZCBTZWxlbml1bSAodXNlZCBieSBLaWJhbmEncyBGVFIpIHJlcXVpcmVzIGFuIG9mZi1zY3JlZW4gcG9zaXRpb24gZm9yIGl0cyAuZ2V0VmlzaWJsZVRleHQoKSB0byBub3QgcmVnaXN0ZXIgU1Itb25seSB0ZXh0ICovXFxuICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2xlZnQnLCAnLTEwMDAwcHgnKSwgXCJcXG4gIC8qIFRoZSBlbGVtZW50IG11c3QgaGF2ZSBhIHNpemUgKGZvciBzb21lIHNjcmVlbiByZWFkZXJzKSAqL1xcbiAgXCIpLmNvbmNhdChsb2dpY2FsU2l6ZUNTUygnMXB4JywgJzFweCcpLCBcIlxcbiAgLyogQnV0IHJlZHVjZSB0aGUgdmlzaWJsZSBzaXplIHRvIG5vdGhpbmcgKi9cXG4gIGNsaXA6IHJlY3QoMCAwIDAgMCk7XFxuICBjbGlwLXBhdGg6IGluc2V0KDUwJSk7XFxuICAvKiBBbmQgZW5zdXJlIG5vIG92ZXJmbG93cyBvY2N1ciAqL1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIC8qIENocm9tZSByZXF1aXJlcyB0aGUgbmVnYXRpdmUgbWFyZ2luIHRvIG5vdCBjYXVzZSBvdmVyZmxvd3Mgb2YgcGFyZW50IGNvbnRhaW5lcnMgKi9cXG4gIG1hcmdpbjogLTFweDtcXG5cIik7XG59O1xuXG4vKlxuICogU3R5bGVzXG4gKi9cbmV4cG9ydCB2YXIgZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyA9IHtcbiAgZXVpU2NyZWVuUmVhZGVyT25seTogLyojX19QVVJFX18qL2NzcyhldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO2xhYmVsOmV1aVNjcmVlblJlYWRlck9ubHk7XCIpLFxuICAnZXVpU2NyZWVuUmVhZGVyT25seS1zaG93T25Gb2N1cyc6IC8qI19fUFVSRV9fKi9jc3MoXCImOm5vdCg6Zm9jdXMsIDphY3RpdmUsIDpmb2N1cy13aXRoaW4pe1wiLCBldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO307bGFiZWw6ZXVpU2NyZWVuUmVhZGVyT25seS1zaG93T25Gb2N1cztcIilcbn07IiwgImNvbnN0IGNhbmRpZGF0ZVNlbGVjdG9ycyA9IFtcbiAgJ2lucHV0JyxcbiAgJ3NlbGVjdCcsXG4gICd0ZXh0YXJlYScsXG4gICdhW2hyZWZdJyxcbiAgJ2J1dHRvbicsXG4gICdbdGFiaW5kZXhdOm5vdChzbG90KScsXG4gICdhdWRpb1tjb250cm9sc10nLFxuICAndmlkZW9bY29udHJvbHNdJyxcbiAgJ1tjb250ZW50ZWRpdGFibGVdOm5vdChbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0pJyxcbiAgJ2RldGFpbHM+c3VtbWFyeTpmaXJzdC1vZi10eXBlJyxcbiAgJ2RldGFpbHMnLFxuXTtcbmNvbnN0IGNhbmRpZGF0ZVNlbGVjdG9yID0gLyogI19fUFVSRV9fICovIGNhbmRpZGF0ZVNlbGVjdG9ycy5qb2luKCcsJyk7XG5cbmNvbnN0IE5vRWxlbWVudCA9IHR5cGVvZiBFbGVtZW50ID09PSAndW5kZWZpbmVkJztcblxuY29uc3QgbWF0Y2hlcyA9IE5vRWxlbWVudFxuICA/IGZ1bmN0aW9uICgpIHt9XG4gIDogRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyB8fFxuICAgIEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yIHx8XG4gICAgRWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1xuXG5jb25zdCBnZXRSb290Tm9kZSA9XG4gICFOb0VsZW1lbnQgJiYgRWxlbWVudC5wcm90b3R5cGUuZ2V0Um9vdE5vZGVcbiAgICA/IChlbGVtZW50KSA9PiBlbGVtZW50LmdldFJvb3ROb2RlKClcbiAgICA6IChlbGVtZW50KSA9PiBlbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbCBjb250YWluZXIgdG8gY2hlY2sgaW5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUNvbnRhaW5lciBhZGQgY29udGFpbmVyIHRvIGNoZWNrXG4gKiBAcGFyYW0geyhub2RlOiBFbGVtZW50KSA9PiBib29sZWFufSBmaWx0ZXIgZmlsdGVyIGNhbmRpZGF0ZXNcbiAqIEByZXR1cm5zIHtFbGVtZW50W119XG4gKi9cbmNvbnN0IGdldENhbmRpZGF0ZXMgPSBmdW5jdGlvbiAoZWwsIGluY2x1ZGVDb250YWluZXIsIGZpbHRlcikge1xuICBsZXQgY2FuZGlkYXRlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShcbiAgICBlbC5xdWVyeVNlbGVjdG9yQWxsKGNhbmRpZGF0ZVNlbGVjdG9yKVxuICApO1xuICBpZiAoaW5jbHVkZUNvbnRhaW5lciAmJiBtYXRjaGVzLmNhbGwoZWwsIGNhbmRpZGF0ZVNlbGVjdG9yKSkge1xuICAgIGNhbmRpZGF0ZXMudW5zaGlmdChlbCk7XG4gIH1cbiAgY2FuZGlkYXRlcyA9IGNhbmRpZGF0ZXMuZmlsdGVyKGZpbHRlcik7XG4gIHJldHVybiBjYW5kaWRhdGVzO1xufTtcblxuLyoqXG4gKiBAY2FsbGJhY2sgR2V0U2hhZG93Um9vdFxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IHRvIGNoZWNrIGZvciBzaGFkb3cgcm9vdFxuICogQHJldHVybnMge1NoYWRvd1Jvb3R8Ym9vbGVhbn0gU2hhZG93Um9vdCBpZiBhdmFpbGFibGUgb3IgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGEgc2hhZG93Um9vdCBpcyBhdHRhY2hlZCBidXQgbm90IGF2YWlsYWJsZS5cbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBTaGFkb3dSb290RmlsdGVyXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHNoYWRvd0hvc3ROb2RlIHRoZSBlbGVtZW50IHdoaWNoIGNvbnRhaW5zIHNoYWRvdyBjb250ZW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBhIHNoYWRvdyByb290IGNvdWxkIHBvdGVudGlhbGx5IGNvbnRhaW4gdmFsaWQgY2FuZGlkYXRlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENhbmRpZGF0ZXNTY29wZVxuICogQHByb3BlcnR5IHtFbGVtZW50fSBzY29wZSBjb250YWlucyBpbm5lciBjYW5kaWRhdGVzXG4gKiBAcHJvcGVydHkge0VsZW1lbnRbXX0gY2FuZGlkYXRlc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSXRlcmF0aXZlT3B0aW9uc1xuICogQHByb3BlcnR5IHtHZXRTaGFkb3dSb290fGJvb2xlYW59IGdldFNoYWRvd1Jvb3QgdHJ1ZSBpZiBzaGFkb3cgc3VwcG9ydCBpcyBlbmFibGVkOyBmYWxzeSBpZiBub3Q7XG4gKiAgaWYgYSBmdW5jdGlvbiwgaW1wbGllcyBzaGFkb3cgc3VwcG9ydCBpcyBlbmFibGVkIGFuZCBlaXRoZXIgcmV0dXJucyB0aGUgc2hhZG93IHJvb3Qgb2YgYW4gZWxlbWVudFxuICogIG9yIGEgYm9vbGVhbiBzdGF0aW5nIGlmIGl0IGhhcyBhbiB1bmRpc2Nsb3NlZCBzaGFkb3cgcm9vdFxuICogQHByb3BlcnR5IHsobm9kZTogRWxlbWVudCkgPT4gYm9vbGVhbn0gZmlsdGVyIGZpbHRlciBjYW5kaWRhdGVzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGZsYXR0ZW4gaWYgdHJ1ZSB0aGVuIHJlc3VsdCB3aWxsIGZsYXR0ZW4gYW55IENhbmRpZGF0ZXNTY29wZSBpbnRvIHRoZSByZXR1cm5lZCBsaXN0XG4gKiBAcHJvcGVydHkge1NoYWRvd1Jvb3RGaWx0ZXJ9IHNoYWRvd1Jvb3RGaWx0ZXIgZmlsdGVyIHNoYWRvdyByb290cztcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7RWxlbWVudFtdfSBlbGVtZW50cyBsaXN0IG9mIGVsZW1lbnQgY29udGFpbmVycyB0byBtYXRjaCBjYW5kaWRhdGVzIGZyb21cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUNvbnRhaW5lciBhZGQgY29udGFpbmVyIGxpc3QgdG8gY2hlY2tcbiAqIEBwYXJhbSB7SXRlcmF0aXZlT3B0aW9uc30gb3B0aW9uc1xuICogQHJldHVybnMge0FycmF5LjxFbGVtZW50fENhbmRpZGF0ZXNTY29wZT59XG4gKi9cbmNvbnN0IGdldENhbmRpZGF0ZXNJdGVyYXRpdmVseSA9IGZ1bmN0aW9uIChcbiAgZWxlbWVudHMsXG4gIGluY2x1ZGVDb250YWluZXIsXG4gIG9wdGlvbnNcbikge1xuICBjb25zdCBjYW5kaWRhdGVzID0gW107XG4gIGNvbnN0IGVsZW1lbnRzVG9DaGVjayA9IEFycmF5LmZyb20oZWxlbWVudHMpO1xuICB3aGlsZSAoZWxlbWVudHNUb0NoZWNrLmxlbmd0aCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1RvQ2hlY2suc2hpZnQoKTtcbiAgICBpZiAoZWxlbWVudC50YWdOYW1lID09PSAnU0xPVCcpIHtcbiAgICAgIC8vIGFkZCBzaGFkb3cgZG9tIHNsb3Qgc2NvcGUgKHNsb3QgaXRzZWxmIGNhbm5vdCBiZSBmb2N1c2FibGUpXG4gICAgICBjb25zdCBhc3NpZ25lZCA9IGVsZW1lbnQuYXNzaWduZWRFbGVtZW50cygpO1xuICAgICAgY29uc3QgY29udGVudCA9IGFzc2lnbmVkLmxlbmd0aCA/IGFzc2lnbmVkIDogZWxlbWVudC5jaGlsZHJlbjtcbiAgICAgIGNvbnN0IG5lc3RlZENhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoY29udGVudCwgdHJ1ZSwgb3B0aW9ucyk7XG4gICAgICBpZiAob3B0aW9ucy5mbGF0dGVuKSB7XG4gICAgICAgIGNhbmRpZGF0ZXMucHVzaCguLi5uZXN0ZWRDYW5kaWRhdGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgICAgc2NvcGU6IGVsZW1lbnQsXG4gICAgICAgICAgY2FuZGlkYXRlczogbmVzdGVkQ2FuZGlkYXRlcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNoZWNrIGNhbmRpZGF0ZSBlbGVtZW50XG4gICAgICBjb25zdCB2YWxpZENhbmRpZGF0ZSA9IG1hdGNoZXMuY2FsbChlbGVtZW50LCBjYW5kaWRhdGVTZWxlY3Rvcik7XG4gICAgICBpZiAoXG4gICAgICAgIHZhbGlkQ2FuZGlkYXRlICYmXG4gICAgICAgIG9wdGlvbnMuZmlsdGVyKGVsZW1lbnQpICYmXG4gICAgICAgIChpbmNsdWRlQ29udGFpbmVyIHx8ICFlbGVtZW50cy5pbmNsdWRlcyhlbGVtZW50KSlcbiAgICAgICkge1xuICAgICAgICBjYW5kaWRhdGVzLnB1c2goZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGl0ZXJhdGUgb3ZlciBzaGFkb3cgY29udGVudCBpZiBwb3NzaWJsZVxuICAgICAgY29uc3Qgc2hhZG93Um9vdCA9XG4gICAgICAgIGVsZW1lbnQuc2hhZG93Um9vdCB8fFxuICAgICAgICAvLyBjaGVjayBmb3IgYW4gdW5kaXNjbG9zZWQgc2hhZG93XG4gICAgICAgICh0eXBlb2Ygb3B0aW9ucy5nZXRTaGFkb3dSb290ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgb3B0aW9ucy5nZXRTaGFkb3dSb290KGVsZW1lbnQpKTtcblxuICAgICAgY29uc3QgdmFsaWRTaGFkb3dSb290ID1cbiAgICAgICAgIW9wdGlvbnMuc2hhZG93Um9vdEZpbHRlciB8fCBvcHRpb25zLnNoYWRvd1Jvb3RGaWx0ZXIoZWxlbWVudCk7XG5cbiAgICAgIGlmIChzaGFkb3dSb290ICYmIHZhbGlkU2hhZG93Um9vdCkge1xuICAgICAgICAvLyBhZGQgc2hhZG93IGRvbSBzY29wZSBJSUYgYSBzaGFkb3cgcm9vdCBub2RlIHdhcyBnaXZlbjsgb3RoZXJ3aXNlLCBhbiB1bmRpc2Nsb3NlZFxuICAgICAgICAvLyAgc2hhZG93IGV4aXN0cywgc28gbG9vayBhdCBsaWdodCBkb20gY2hpbGRyZW4gYXMgZmFsbGJhY2sgQlVUIGNyZWF0ZSBhIHNjb3BlIGZvciBhbnlcbiAgICAgICAgLy8gIGNoaWxkIGNhbmRpZGF0ZXMgZm91bmQgYmVjYXVzZSB0aGV5J3JlIGxpa2VseSBzbG90dGVkIGVsZW1lbnRzIChlbGVtZW50cyB0aGF0IGFyZVxuICAgICAgICAvLyAgY2hpbGRyZW4gb2YgdGhlIHdlYiBjb21wb25lbnQgZWxlbWVudCAod2hpY2ggaGFzIHRoZSBzaGFkb3cpLCBpbiB0aGUgbGlnaHQgZG9tLCBidXRcbiAgICAgICAgLy8gIHNsb3R0ZWQgc29tZXdoZXJlIF9pbnNpZGVfIHRoZSB1bmRpc2Nsb3NlZCBzaGFkb3cpIC0tIHRoZSBzY29wZSBpcyBjcmVhdGVkIGJlbG93LFxuICAgICAgICAvLyAgX2FmdGVyXyB3ZSByZXR1cm4gZnJvbSB0aGlzIHJlY3Vyc2l2ZSBjYWxsXG4gICAgICAgIGNvbnN0IG5lc3RlZENhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoXG4gICAgICAgICAgc2hhZG93Um9vdCA9PT0gdHJ1ZSA/IGVsZW1lbnQuY2hpbGRyZW4gOiBzaGFkb3dSb290LmNoaWxkcmVuLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmZsYXR0ZW4pIHtcbiAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goLi4ubmVzdGVkQ2FuZGlkYXRlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKHtcbiAgICAgICAgICAgIHNjb3BlOiBlbGVtZW50LFxuICAgICAgICAgICAgY2FuZGlkYXRlczogbmVzdGVkQ2FuZGlkYXRlcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlcmUncyBub3Qgc2hhZG93IHNvIGp1c3QgZGlnIGludG8gdGhlIGVsZW1lbnQncyAobGlnaHQgZG9tKSBjaGlsZHJlblxuICAgICAgICAvLyAgX193aXRob3V0X18gZ2l2aW5nIHRoZSBlbGVtZW50IHNwZWNpYWwgc2NvcGUgdHJlYXRtZW50XG4gICAgICAgIGVsZW1lbnRzVG9DaGVjay51bnNoaWZ0KC4uLmVsZW1lbnQuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FuZGlkYXRlcztcbn07XG5cbmNvbnN0IGdldFRhYmluZGV4ID0gZnVuY3Rpb24gKG5vZGUsIGlzU2NvcGUpIHtcbiAgaWYgKG5vZGUudGFiSW5kZXggPCAwKSB7XG4gICAgLy8gaW4gQ2hyb21lLCA8ZGV0YWlscy8+LCA8YXVkaW8gY29udHJvbHMvPiBhbmQgPHZpZGVvIGNvbnRyb2xzLz4gZWxlbWVudHMgZ2V0IGEgZGVmYXVsdFxuICAgIC8vIGB0YWJJbmRleGAgb2YgLTEgd2hlbiB0aGUgJ3RhYmluZGV4JyBhdHRyaWJ1dGUgaXNuJ3Qgc3BlY2lmaWVkIGluIHRoZSBET00sXG4gICAgLy8geWV0IHRoZXkgYXJlIHN0aWxsIHBhcnQgb2YgdGhlIHJlZ3VsYXIgdGFiIG9yZGVyOyBpbiBGRiwgdGhleSBnZXQgYSBkZWZhdWx0XG4gICAgLy8gYHRhYkluZGV4YCBvZiAwOyBzaW5jZSBDaHJvbWUgc3RpbGwgcHV0cyB0aG9zZSBlbGVtZW50cyBpbiB0aGUgcmVndWxhciB0YWJcbiAgICAvLyBvcmRlciwgY29uc2lkZXIgdGhlaXIgdGFiIGluZGV4IHRvIGJlIDAuXG4gICAgLy8gQWxzbyBicm93c2VycyBkbyBub3QgcmV0dXJuIGB0YWJJbmRleGAgY29ycmVjdGx5IGZvciBjb250ZW50RWRpdGFibGUgbm9kZXM7XG4gICAgLy8gc28gaWYgdGhleSBkb24ndCBoYXZlIGEgdGFiaW5kZXggYXR0cmlidXRlIHNwZWNpZmljYWxseSBzZXQsIGFzc3VtZSBpdCdzIDAuXG4gICAgLy9cbiAgICAvLyBpc1Njb3BlIGlzIHBvc2l0aXZlIGZvciBjdXN0b20gZWxlbWVudCB3aXRoIHNoYWRvdyByb290IG9yIHNsb3QgdGhhdCBieSBkZWZhdWx0XG4gICAgLy8gaGF2ZSB0YWJJbmRleCAtMSwgYnV0IG5lZWQgdG8gYmUgc29ydGVkIGJ5IGRvY3VtZW50IG9yZGVyIGluIG9yZGVyIGZvciB0aGVpclxuICAgIC8vIGNvbnRlbnQgdG8gYmUgaW5zZXJ0ZWQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb25cbiAgICBpZiAoXG4gICAgICAoaXNTY29wZSB8fFxuICAgICAgICAvXihBVURJT3xWSURFT3xERVRBSUxTKSQvLnRlc3Qobm9kZS50YWdOYW1lKSB8fFxuICAgICAgICBub2RlLmlzQ29udGVudEVkaXRhYmxlKSAmJlxuICAgICAgaXNOYU4ocGFyc2VJbnQobm9kZS5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JyksIDEwKSlcbiAgICApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlLnRhYkluZGV4O1xufTtcblxuY29uc3Qgc29ydE9yZGVyZWRUYWJiYWJsZXMgPSBmdW5jdGlvbiAoYSwgYikge1xuICByZXR1cm4gYS50YWJJbmRleCA9PT0gYi50YWJJbmRleFxuICAgID8gYS5kb2N1bWVudE9yZGVyIC0gYi5kb2N1bWVudE9yZGVyXG4gICAgOiBhLnRhYkluZGV4IC0gYi50YWJJbmRleDtcbn07XG5cbmNvbnN0IGlzSW5wdXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gbm9kZS50YWdOYW1lID09PSAnSU5QVVQnO1xufTtcblxuY29uc3QgaXNIaWRkZW5JbnB1dCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHJldHVybiBpc0lucHV0KG5vZGUpICYmIG5vZGUudHlwZSA9PT0gJ2hpZGRlbic7XG59O1xuXG5jb25zdCBpc0RldGFpbHNXaXRoU3VtbWFyeSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGNvbnN0IHIgPVxuICAgIG5vZGUudGFnTmFtZSA9PT0gJ0RFVEFJTFMnICYmXG4gICAgQXJyYXkucHJvdG90eXBlLnNsaWNlXG4gICAgICAuYXBwbHkobm9kZS5jaGlsZHJlbilcbiAgICAgIC5zb21lKChjaGlsZCkgPT4gY2hpbGQudGFnTmFtZSA9PT0gJ1NVTU1BUlknKTtcbiAgcmV0dXJuIHI7XG59O1xuXG5jb25zdCBnZXRDaGVja2VkUmFkaW8gPSBmdW5jdGlvbiAobm9kZXMsIGZvcm0pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChub2Rlc1tpXS5jaGVja2VkICYmIG5vZGVzW2ldLmZvcm0gPT09IGZvcm0pIHtcbiAgICAgIHJldHVybiBub2Rlc1tpXTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGlzVGFiYmFibGVSYWRpbyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmICghbm9kZS5uYW1lKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgcmFkaW9TY29wZSA9IG5vZGUuZm9ybSB8fCBnZXRSb290Tm9kZShub2RlKTtcbiAgY29uc3QgcXVlcnlSYWRpb3MgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiByYWRpb1Njb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAnaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInICsgbmFtZSArICdcIl0nXG4gICAgKTtcbiAgfTtcblxuICBsZXQgcmFkaW9TZXQ7XG4gIGlmIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiB3aW5kb3cuQ1NTICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiB3aW5kb3cuQ1NTLmVzY2FwZSA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByYWRpb1NldCA9IHF1ZXJ5UmFkaW9zKHdpbmRvdy5DU1MuZXNjYXBlKG5vZGUubmFtZSkpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICByYWRpb1NldCA9IHF1ZXJ5UmFkaW9zKG5vZGUubmFtZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0xvb2tzIGxpa2UgeW91IGhhdmUgYSByYWRpbyBidXR0b24gd2l0aCBhIG5hbWUgYXR0cmlidXRlIGNvbnRhaW5pbmcgaW52YWxpZCBDU1Mgc2VsZWN0b3IgY2hhcmFjdGVycyBhbmQgbmVlZCB0aGUgQ1NTLmVzY2FwZSBwb2x5ZmlsbDogJXMnLFxuICAgICAgICBlcnIubWVzc2FnZVxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjaGVja2VkID0gZ2V0Q2hlY2tlZFJhZGlvKHJhZGlvU2V0LCBub2RlLmZvcm0pO1xuICByZXR1cm4gIWNoZWNrZWQgfHwgY2hlY2tlZCA9PT0gbm9kZTtcbn07XG5cbmNvbnN0IGlzUmFkaW8gPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gaXNJbnB1dChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdyYWRpbyc7XG59O1xuXG5jb25zdCBpc05vblRhYmJhYmxlUmFkaW8gPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gaXNSYWRpbyhub2RlKSAmJiAhaXNUYWJiYWJsZVJhZGlvKG5vZGUpO1xufTtcblxuY29uc3QgaXNaZXJvQXJlYSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIHdpZHRoID09PSAwICYmIGhlaWdodCA9PT0gMDtcbn07XG5jb25zdCBpc0hpZGRlbiA9IGZ1bmN0aW9uIChub2RlLCB7IGRpc3BsYXlDaGVjaywgZ2V0U2hhZG93Um9vdCB9KSB7XG4gIC8vIE5PVEU6IHZpc2liaWxpdHkgd2lsbCBiZSBgdW5kZWZpbmVkYCBpZiBub2RlIGlzIGRldGFjaGVkIGZyb20gdGhlIGRvY3VtZW50XG4gIC8vICAoc2VlIG5vdGVzIGFib3V0IHRoaXMgZnVydGhlciBkb3duKSwgd2hpY2ggbWVhbnMgd2Ugd2lsbCBjb25zaWRlciBpdCB2aXNpYmxlXG4gIC8vICAodGhpcyBpcyBsZWdhY3kgYmVoYXZpb3IgZnJvbSBhIHZlcnkgbG9uZyB3YXkgYmFjaylcbiAgLy8gTk9URTogd2UgY2hlY2sgdGhpcyByZWdhcmRsZXNzIG9mIGBkaXNwbGF5Q2hlY2s9XCJub25lXCJgIGJlY2F1c2UgdGhpcyBpcyBhXG4gIC8vICBfdmlzaWJpbGl0eV8gY2hlY2ssIG5vdCBhIF9kaXNwbGF5XyBjaGVja1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS52aXNpYmlsaXR5ID09PSAnaGlkZGVuJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgaXNEaXJlY3RTdW1tYXJ5ID0gbWF0Y2hlcy5jYWxsKG5vZGUsICdkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZScpO1xuICBjb25zdCBub2RlVW5kZXJEZXRhaWxzID0gaXNEaXJlY3RTdW1tYXJ5ID8gbm9kZS5wYXJlbnRFbGVtZW50IDogbm9kZTtcbiAgaWYgKG1hdGNoZXMuY2FsbChub2RlVW5kZXJEZXRhaWxzLCAnZGV0YWlsczpub3QoW29wZW5dKSAqJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRoZSByb290IG5vZGUgaXMgdGhlIHNoYWRvdyByb290IGlmIHRoZSBub2RlIGlzIGluIGEgc2hhZG93IERPTTsgc29tZSBkb2N1bWVudCBvdGhlcndpc2VcbiAgLy8gIChidXQgTk9UIF90aGVfIGRvY3VtZW50OyBzZWUgc2Vjb25kICdJZicgY29tbWVudCBiZWxvdyBmb3IgbW9yZSkuXG4gIC8vIElmIHJvb3ROb2RlIGlzIHNoYWRvdyByb290LCBpdCdsbCBoYXZlIGEgaG9zdCwgd2hpY2ggaXMgdGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHNoYWRvd1xuICAvLyAgaXMgYXR0YWNoZWQsIGFuZCB0aGUgb25lIHdlIG5lZWQgdG8gY2hlY2sgaWYgaXQncyBpbiB0aGUgZG9jdW1lbnQgb3Igbm90IChiZWNhdXNlIHRoZVxuICAvLyAgc2hhZG93LCBhbmQgYWxsIG5vZGVzIGl0IGNvbnRhaW5zLCBpcyBuZXZlciBjb25zaWRlcmVkIGluIHRoZSBkb2N1bWVudCBzaW5jZSBzaGFkb3dzXG4gIC8vICBiZWhhdmUgbGlrZSBzZWxmLWNvbnRhaW5lZCBET01zOyBidXQgaWYgdGhlIHNoYWRvdydzIEhPU1QsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGRvY3VtZW50LFxuICAvLyAgaXMgaGlkZGVuLCBvciBpcyBub3QgaW4gdGhlIGRvY3VtZW50IGl0c2VsZiBidXQgaXMgZGV0YWNoZWQsIGl0IHdpbGwgYWZmZWN0IHRoZSBzaGFkb3cnc1xuICAvLyAgdmlzaWJpbGl0eSwgaW5jbHVkaW5nIGFsbCB0aGUgbm9kZXMgaXQgY29udGFpbnMpLiBUaGUgaG9zdCBjb3VsZCBiZSBhbnkgbm9ybWFsIG5vZGUsXG4gIC8vICBvciBhIGN1c3RvbSBlbGVtZW50IChpLmUuIHdlYiBjb21wb25lbnQpLiBFaXRoZXIgd2F5LCB0aGF0J3MgdGhlIG9uZSB0aGF0IGlzIGNvbnNpZGVyZWRcbiAgLy8gIHBhcnQgb2YgdGhlIGRvY3VtZW50LCBub3QgdGhlIHNoYWRvdyByb290LCBub3IgYW55IG9mIGl0cyBjaGlsZHJlbiAoaS5lLiB0aGUgbm9kZSBiZWluZ1xuICAvLyAgdGVzdGVkKS5cbiAgLy8gSWYgcm9vdE5vZGUgaXMgbm90IGEgc2hhZG93IHJvb3QsIGl0IHdvbid0IGhhdmUgYSBob3N0LCBhbmQgc28gcm9vdE5vZGUgc2hvdWxkIGJlIHRoZVxuICAvLyAgZG9jdW1lbnQgKHBlciB0aGUgZG9jcykgYW5kIHdoaWxlIGl0J3MgYSBEb2N1bWVudC10eXBlIG9iamVjdCwgdGhhdCBkb2N1bWVudCBkb2VzIG5vdFxuICAvLyAgYXBwZWFyIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBub2RlJ3MgYG93bmVyRG9jdW1lbnRgIGZvciBzb21lIHJlYXNvbiwgc28gaXQncyBzYWZlclxuICAvLyAgdG8gaWdub3JlIHRoZSByb290Tm9kZSBhdCB0aGlzIHBvaW50LCBhbmQgdXNlIGBub2RlLm93bmVyRG9jdW1lbnRgLiBPdGhlcndpc2UsXG4gIC8vICB1c2luZyBgcm9vdE5vZGUuY29udGFpbnMobm9kZSlgIHdpbGwgX2Fsd2F5c18gYmUgdHJ1ZSB3ZSdsbCBnZXQgZmFsc2UtcG9zaXRpdmVzIHdoZW5cbiAgLy8gIG5vZGUgaXMgYWN0dWFsbHkgZGV0YWNoZWQuXG4gIGNvbnN0IG5vZGVSb290SG9zdCA9IGdldFJvb3ROb2RlKG5vZGUpLmhvc3Q7XG4gIGNvbnN0IG5vZGVJc0F0dGFjaGVkID1cbiAgICBub2RlUm9vdEhvc3Q/Lm93bmVyRG9jdW1lbnQuY29udGFpbnMobm9kZVJvb3RIb3N0KSB8fFxuICAgIG5vZGUub3duZXJEb2N1bWVudC5jb250YWlucyhub2RlKTtcblxuICBpZiAoIWRpc3BsYXlDaGVjayB8fCBkaXNwbGF5Q2hlY2sgPT09ICdmdWxsJykge1xuICAgIGlmICh0eXBlb2YgZ2V0U2hhZG93Um9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gZmlndXJlIG91dCBpZiB3ZSBzaG91bGQgY29uc2lkZXIgdGhlIG5vZGUgdG8gYmUgaW4gYW4gdW5kaXNjbG9zZWQgc2hhZG93IGFuZCB1c2UgdGhlXG4gICAgICAvLyAgJ25vbi16ZXJvLWFyZWEnIGZhbGxiYWNrXG4gICAgICBjb25zdCBvcmlnaW5hbE5vZGUgPSBub2RlO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgY29uc3QgcGFyZW50RWxlbWVudCA9IG5vZGUucGFyZW50RWxlbWVudDtcbiAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBnZXRSb290Tm9kZShub2RlKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhcmVudEVsZW1lbnQgJiZcbiAgICAgICAgICAhcGFyZW50RWxlbWVudC5zaGFkb3dSb290ICYmXG4gICAgICAgICAgZ2V0U2hhZG93Um9vdChwYXJlbnRFbGVtZW50KSA9PT0gdHJ1ZSAvLyBjaGVjayBpZiB0aGVyZSdzIGFuIHVuZGlzY2xvc2VkIHNoYWRvd1xuICAgICAgICApIHtcbiAgICAgICAgICAvLyBub2RlIGhhcyBhbiB1bmRpc2Nsb3NlZCBzaGFkb3cgd2hpY2ggbWVhbnMgd2UgY2FuIG9ubHkgdHJlYXQgaXQgYXMgYSBibGFjayBib3gsIHNvIHdlXG4gICAgICAgICAgLy8gIGZhbGwgYmFjayB0byBhIG5vbi16ZXJvLWFyZWEgdGVzdFxuICAgICAgICAgIHJldHVybiBpc1plcm9BcmVhKG5vZGUpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUuYXNzaWduZWRTbG90KSB7XG4gICAgICAgICAgLy8gaXRlcmF0ZSB1cCBzbG90XG4gICAgICAgICAgbm9kZSA9IG5vZGUuYXNzaWduZWRTbG90O1xuICAgICAgICB9IGVsc2UgaWYgKCFwYXJlbnRFbGVtZW50ICYmIHJvb3ROb2RlICE9PSBub2RlLm93bmVyRG9jdW1lbnQpIHtcbiAgICAgICAgICAvLyBjcm9zcyBzaGFkb3cgYm91bmRhcnlcbiAgICAgICAgICBub2RlID0gcm9vdE5vZGUuaG9zdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpdGVyYXRlIHVwIG5vcm1hbCBkb21cbiAgICAgICAgICBub2RlID0gcGFyZW50RWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub2RlID0gb3JpZ2luYWxOb2RlO1xuICAgIH1cbiAgICAvLyBlbHNlLCBgZ2V0U2hhZG93Um9vdGAgbWlnaHQgYmUgdHJ1ZSwgYnV0IGFsbCB0aGF0IGRvZXMgaXMgZW5hYmxlIHNoYWRvdyBET00gc3VwcG9ydFxuICAgIC8vICAoaS5lLiBpdCBkb2VzIG5vdCBhbHNvIHByZXN1bWUgdGhhdCBhbGwgbm9kZXMgbWlnaHQgaGF2ZSB1bmRpc2Nsb3NlZCBzaGFkb3dzKTsgb3JcbiAgICAvLyAgaXQgbWlnaHQgYmUgYSBmYWxzeSB2YWx1ZSwgd2hpY2ggbWVhbnMgc2hhZG93IERPTSBzdXBwb3J0IGlzIGRpc2FibGVkXG5cbiAgICAvLyBTaW5jZSB3ZSBkaWRuJ3QgZmluZCBpdCBzaXR0aW5nIGluIGFuIHVuZGlzY2xvc2VkIHNoYWRvdyAob3Igc2hhZG93cyBhcmUgZGlzYWJsZWQpXG4gICAgLy8gIG5vdyB3ZSBjYW4ganVzdCB0ZXN0IHRvIHNlZSBpZiBpdCB3b3VsZCBub3JtYWxseSBiZSB2aXNpYmxlIG9yIG5vdCwgcHJvdmlkZWQgaXQnc1xuICAgIC8vICBhdHRhY2hlZCB0byB0aGUgbWFpbiBkb2N1bWVudC5cbiAgICAvLyBOT1RFOiBXZSBtdXN0IGNvbnNpZGVyIGNhc2Ugd2hlcmUgbm9kZSBpcyBpbnNpZGUgYSBzaGFkb3cgRE9NIGFuZCBnaXZlbiBkaXJlY3RseSB0b1xuICAgIC8vICBgaXNUYWJiYWJsZSgpYCBvciBgaXNGb2N1c2FibGUoKWAgLS0gcmVnYXJkbGVzcyBvZiBgZ2V0U2hhZG93Um9vdGAgb3B0aW9uIHNldHRpbmcuXG5cbiAgICBpZiAobm9kZUlzQXR0YWNoZWQpIHtcbiAgICAgIC8vIHRoaXMgd29ya3Mgd2hlcmV2ZXIgdGhlIG5vZGUgaXM6IGlmIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIGNsaWVudCByZWN0LCBpdCdzXG4gICAgICAvLyAgc29tZWhvdyBkaXNwbGF5ZWQ7IGl0IGFsc28gY292ZXJzIHRoZSBDU1MgJ2Rpc3BsYXk6IGNvbnRlbnRzJyBjYXNlIHdoZXJlIHRoZVxuICAgICAgLy8gIG5vZGUgaXRzZWxmIGlzIGhpZGRlbiBpbiBwbGFjZSBvZiBpdHMgY29udGVudHM7IGFuZCB0aGVyZSdzIG5vIG5lZWQgdG8gc2VhcmNoXG4gICAgICAvLyAgdXAgdGhlIGhpZXJhcmNoeSBlaXRoZXJcbiAgICAgIHJldHVybiAhbm9kZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBFbHNlLCB0aGUgbm9kZSBpc24ndCBhdHRhY2hlZCB0byB0aGUgZG9jdW1lbnQsIHdoaWNoIG1lYW5zIHRoZSBgZ2V0Q2xpZW50UmVjdHMoKWBcbiAgICAvLyAgQVBJIHdpbGwgX19hbHdheXNfXyByZXR1cm4gemVybyByZWN0cyAodGhpcyBjYW4gaGFwcGVuLCBmb3IgZXhhbXBsZSwgaWYgUmVhY3RcbiAgICAvLyAgaXMgdXNlZCB0byByZW5kZXIgbm9kZXMgb250byBhIGRldGFjaGVkIHRyZWUsIGFzIGNvbmZpcm1lZCBpbiB0aGlzIHRocmVhZDpcbiAgICAvLyAgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy85MTE3I2lzc3VlY29tbWVudC0yODQyMjg4NzApXG4gICAgLy9cbiAgICAvLyBJdCBhbHNvIG1lYW5zIHRoYXQgZXZlbiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS5kaXNwbGF5IHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgLy8gIGJlY2F1c2Ugc3R5bGVzIGFyZSBvbmx5IGNvbXB1dGVkIGZvciBub2RlcyB0aGF0IGFyZSBpbiB0aGUgZG9jdW1lbnQuXG4gICAgLy9cbiAgICAvLyBOT1RFOiBUSElTIEhBUyBCRUVOIFRIRSBDQVNFIEZPUiBZRUFSUy4gSXQgaXMgbm90IG5ldywgbm9yIGlzIGl0IGNhdXNlZCBieSB0YWJiYWJsZVxuICAgIC8vICBzb21laG93LiBUaG91Z2ggaXQgd2FzIG5ldmVyIHN0YXRlZCBvZmZpY2lhbGx5LCBhbnlvbmUgd2hvIGhhcyBldmVyIHVzZWQgdGFiYmFibGVcbiAgICAvLyAgQVBJcyBvbiBub2RlcyBpbiBkZXRhY2hlZCBjb250YWluZXJzIGhhcyBhY3R1YWxseSBpbXBsaWNpdGx5IHVzZWQgdGFiYmFibGUgaW4gd2hhdFxuICAgIC8vICB3YXMgbGF0ZXIgKGFzIG9mIHY1LjIuMCBvbiBBcHIgOSwgMjAyMSkgY2FsbGVkIGBkaXNwbGF5Q2hlY2s9XCJub25lXCJgIG1vZGUgLS0gZXNzZW50aWFsbHlcbiAgICAvLyAgY29uc2lkZXJpbmcgX19ldmVyeXRoaW5nX18gdG8gYmUgdmlzaWJsZSBiZWNhdXNlIG9mIHRoZSBpbm5hYmlsaXR5IHRvIGRldGVybWluZSBzdHlsZXMuXG4gIH0gZWxzZSBpZiAoZGlzcGxheUNoZWNrID09PSAnbm9uLXplcm8tYXJlYScpIHtcbiAgICAvLyBOT1RFOiBFdmVuIHRob3VnaCB0aGlzIHRlc3RzIHRoYXQgdGhlIG5vZGUncyBjbGllbnQgcmVjdCBpcyBub24temVybyB0byBkZXRlcm1pbmVcbiAgICAvLyAgd2hldGhlciBpdCdzIGRpc3BsYXllZCwgYW5kIHRoYXQgYSBkZXRhY2hlZCBub2RlIHdpbGwgX19hbHdheXNfXyBoYXZlIGEgemVyby1hcmVhXG4gICAgLy8gIGNsaWVudCByZWN0LCB3ZSBkb24ndCBzcGVjaWFsLWNhc2UgZm9yIHdoZXRoZXIgdGhlIG5vZGUgaXMgYXR0YWNoZWQgb3Igbm90LiBJblxuICAgIC8vICB0aGlzIG1vZGUsIHdlIGRvIHdhbnQgdG8gY29uc2lkZXIgbm9kZXMgdGhhdCBoYXZlIGEgemVybyBhcmVhIHRvIGJlIGhpZGRlbiBhdCBhbGxcbiAgICAvLyAgdGltZXMsIGFuZCB0aGF0IGluY2x1ZGVzIGF0dGFjaGVkIG9yIG5vdC5cbiAgICByZXR1cm4gaXNaZXJvQXJlYShub2RlKTtcbiAgfVxuXG4gIC8vIHZpc2libGUsIGFzIGZhciBhcyB3ZSBjYW4gdGVsbCwgb3IgcGVyIGN1cnJlbnQgYGRpc3BsYXlDaGVja2AgbW9kZVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBmb3JtIGZpZWxkcyAobmVzdGVkKSBpbnNpZGUgYSBkaXNhYmxlZCBmaWVsZHNldCBhcmUgbm90IGZvY3VzYWJsZS90YWJiYWJsZVxuLy8gIHVubGVzcyB0aGV5IGFyZSBpbiB0aGUgX2ZpcnN0XyA8bGVnZW5kPiBlbGVtZW50IG9mIHRoZSB0b3AtbW9zdCBkaXNhYmxlZFxuLy8gIGZpZWxkc2V0XG5jb25zdCBpc0Rpc2FibGVkRnJvbUZpZWxkc2V0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgaWYgKC9eKElOUFVUfEJVVFRPTnxTRUxFQ1R8VEVYVEFSRUEpJC8udGVzdChub2RlLnRhZ05hbWUpKSB7XG4gICAgbGV0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgLy8gY2hlY2sgaWYgYG5vZGVgIGlzIGNvbnRhaW5lZCBpbiBhIGRpc2FibGVkIDxmaWVsZHNldD5cbiAgICB3aGlsZSAocGFyZW50Tm9kZSkge1xuICAgICAgaWYgKHBhcmVudE5vZGUudGFnTmFtZSA9PT0gJ0ZJRUxEU0VUJyAmJiBwYXJlbnROb2RlLmRpc2FibGVkKSB7XG4gICAgICAgIC8vIGxvb2sgZm9yIHRoZSBmaXJzdCA8bGVnZW5kPiBhbW9uZyB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc2FibGVkIDxmaWVsZHNldD5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJlbnROb2RlLmNoaWxkcmVuLml0ZW0oaSk7XG4gICAgICAgICAgLy8gd2hlbiB0aGUgZmlyc3QgPGxlZ2VuZD4gKGluIGRvY3VtZW50IG9yZGVyKSBpcyBmb3VuZFxuICAgICAgICAgIGlmIChjaGlsZC50YWdOYW1lID09PSAnTEVHRU5EJykge1xuICAgICAgICAgICAgLy8gaWYgaXRzIHBhcmVudCA8ZmllbGRzZXQ+IGlzIG5vdCBuZXN0ZWQgaW4gYW5vdGhlciBkaXNhYmxlZCA8ZmllbGRzZXQ+LFxuICAgICAgICAgICAgLy8gcmV0dXJuIHdoZXRoZXIgYG5vZGVgIGlzIGEgZGVzY2VuZGFudCBvZiBpdHMgZmlyc3QgPGxlZ2VuZD5cbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVzLmNhbGwocGFyZW50Tm9kZSwgJ2ZpZWxkc2V0W2Rpc2FibGVkXSAqJylcbiAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgIDogIWNoaWxkLmNvbnRhaW5zKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgZGlzYWJsZWQgPGZpZWxkc2V0PiBjb250YWluaW5nIGBub2RlYCBoYXMgbm8gPGxlZ2VuZD5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnRFbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIC8vIGVsc2UsIG5vZGUncyB0YWJiYWJsZS9mb2N1c2FibGUgc3RhdGUgc2hvdWxkIG5vdCBiZSBhZmZlY3RlZCBieSBhIGZpZWxkc2V0J3NcbiAgLy8gIGVuYWJsZWQvZGlzYWJsZWQgc3RhdGVcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZSA9IGZ1bmN0aW9uIChvcHRpb25zLCBub2RlKSB7XG4gIGlmIChcbiAgICBub2RlLmRpc2FibGVkIHx8XG4gICAgaXNIaWRkZW5JbnB1dChub2RlKSB8fFxuICAgIGlzSGlkZGVuKG5vZGUsIG9wdGlvbnMpIHx8XG4gICAgLy8gRm9yIGEgZGV0YWlscyBlbGVtZW50IHdpdGggYSBzdW1tYXJ5LCB0aGUgc3VtbWFyeSBlbGVtZW50IGdldHMgdGhlIGZvY3VzXG4gICAgaXNEZXRhaWxzV2l0aFN1bW1hcnkobm9kZSkgfHxcbiAgICBpc0Rpc2FibGVkRnJvbUZpZWxkc2V0KG5vZGUpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZSA9IGZ1bmN0aW9uIChvcHRpb25zLCBub2RlKSB7XG4gIGlmIChcbiAgICBpc05vblRhYmJhYmxlUmFkaW8obm9kZSkgfHxcbiAgICBnZXRUYWJpbmRleChub2RlKSA8IDAgfHxcbiAgICAhaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZShvcHRpb25zLCBub2RlKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBpc1ZhbGlkU2hhZG93Um9vdFRhYmJhYmxlID0gZnVuY3Rpb24gKHNoYWRvd0hvc3ROb2RlKSB7XG4gIGNvbnN0IHRhYkluZGV4ID0gcGFyc2VJbnQoc2hhZG93SG9zdE5vZGUuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpLCAxMCk7XG4gIGlmIChpc05hTih0YWJJbmRleCkgfHwgdGFiSW5kZXggPj0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIElmIGEgY3VzdG9tIGVsZW1lbnQgaGFzIGFuIGV4cGxpY2l0IG5lZ2F0aXZlIHRhYmluZGV4LFxuICAvLyBicm93c2VycyB3aWxsIG5vdCBhbGxvdyB0YWIgdGFyZ2V0aW5nIHNhaWQgZWxlbWVudCdzIGNoaWxkcmVuLlxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnR8Q2FuZGlkYXRlc1Njb3BlPn0gY2FuZGlkYXRlc1xuICogQHJldHVybnMgRWxlbWVudFtdXG4gKi9cbmNvbnN0IHNvcnRCeU9yZGVyID0gZnVuY3Rpb24gKGNhbmRpZGF0ZXMpIHtcbiAgY29uc3QgcmVndWxhclRhYmJhYmxlcyA9IFtdO1xuICBjb25zdCBvcmRlcmVkVGFiYmFibGVzID0gW107XG4gIGNhbmRpZGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgIGNvbnN0IGlzU2NvcGUgPSAhIWl0ZW0uc2NvcGU7XG4gICAgY29uc3QgZWxlbWVudCA9IGlzU2NvcGUgPyBpdGVtLnNjb3BlIDogaXRlbTtcbiAgICBjb25zdCBjYW5kaWRhdGVUYWJpbmRleCA9IGdldFRhYmluZGV4KGVsZW1lbnQsIGlzU2NvcGUpO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gaXNTY29wZSA/IHNvcnRCeU9yZGVyKGl0ZW0uY2FuZGlkYXRlcykgOiBlbGVtZW50O1xuICAgIGlmIChjYW5kaWRhdGVUYWJpbmRleCA9PT0gMCkge1xuICAgICAgaXNTY29wZVxuICAgICAgICA/IHJlZ3VsYXJUYWJiYWJsZXMucHVzaCguLi5lbGVtZW50cylcbiAgICAgICAgOiByZWd1bGFyVGFiYmFibGVzLnB1c2goZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9yZGVyZWRUYWJiYWJsZXMucHVzaCh7XG4gICAgICAgIGRvY3VtZW50T3JkZXI6IGksXG4gICAgICAgIHRhYkluZGV4OiBjYW5kaWRhdGVUYWJpbmRleCxcbiAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgaXNTY29wZTogaXNTY29wZSxcbiAgICAgICAgY29udGVudDogZWxlbWVudHMsXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvcmRlcmVkVGFiYmFibGVzXG4gICAgLnNvcnQoc29ydE9yZGVyZWRUYWJiYWJsZXMpXG4gICAgLnJlZHVjZSgoYWNjLCBzb3J0YWJsZSkgPT4ge1xuICAgICAgc29ydGFibGUuaXNTY29wZVxuICAgICAgICA/IGFjYy5wdXNoKC4uLnNvcnRhYmxlLmNvbnRlbnQpXG4gICAgICAgIDogYWNjLnB1c2goc29ydGFibGUuY29udGVudCk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKVxuICAgIC5jb25jYXQocmVndWxhclRhYmJhYmxlcyk7XG59O1xuXG5jb25zdCB0YWJiYWJsZSA9IGZ1bmN0aW9uIChlbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBsZXQgY2FuZGlkYXRlcztcbiAgaWYgKG9wdGlvbnMuZ2V0U2hhZG93Um9vdCkge1xuICAgIGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoW2VsXSwgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLCB7XG4gICAgICBmaWx0ZXI6IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZS5iaW5kKG51bGwsIG9wdGlvbnMpLFxuICAgICAgZmxhdHRlbjogZmFsc2UsXG4gICAgICBnZXRTaGFkb3dSb290OiBvcHRpb25zLmdldFNoYWRvd1Jvb3QsXG4gICAgICBzaGFkb3dSb290RmlsdGVyOiBpc1ZhbGlkU2hhZG93Um9vdFRhYmJhYmxlLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzKFxuICAgICAgZWwsXG4gICAgICBvcHRpb25zLmluY2x1ZGVDb250YWluZXIsXG4gICAgICBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUuYmluZChudWxsLCBvcHRpb25zKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHNvcnRCeU9yZGVyKGNhbmRpZGF0ZXMpO1xufTtcblxuY29uc3QgZm9jdXNhYmxlID0gZnVuY3Rpb24gKGVsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGxldCBjYW5kaWRhdGVzO1xuICBpZiAob3B0aW9ucy5nZXRTaGFkb3dSb290KSB7XG4gICAgY2FuZGlkYXRlcyA9IGdldENhbmRpZGF0ZXNJdGVyYXRpdmVseShbZWxdLCBvcHRpb25zLmluY2x1ZGVDb250YWluZXIsIHtcbiAgICAgIGZpbHRlcjogaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZS5iaW5kKG51bGwsIG9wdGlvbnMpLFxuICAgICAgZmxhdHRlbjogdHJ1ZSxcbiAgICAgIGdldFNoYWRvd1Jvb3Q6IG9wdGlvbnMuZ2V0U2hhZG93Um9vdCxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlcyhcbiAgICAgIGVsLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLFxuICAgICAgaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZS5iaW5kKG51bGwsIG9wdGlvbnMpXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBjYW5kaWRhdGVzO1xufTtcblxuY29uc3QgaXNUYWJiYWJsZSA9IGZ1bmN0aW9uIChub2RlLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoIW5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG5vZGUgcHJvdmlkZWQnKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5jYWxsKG5vZGUsIGNhbmRpZGF0ZVNlbGVjdG9yKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZShvcHRpb25zLCBub2RlKTtcbn07XG5cbmNvbnN0IGZvY3VzYWJsZUNhbmRpZGF0ZVNlbGVjdG9yID0gLyogI19fUFVSRV9fICovIGNhbmRpZGF0ZVNlbGVjdG9yc1xuICAuY29uY2F0KCdpZnJhbWUnKVxuICAuam9pbignLCcpO1xuXG5jb25zdCBpc0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2RlLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoIW5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG5vZGUgcHJvdmlkZWQnKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5jYWxsKG5vZGUsIGZvY3VzYWJsZUNhbmRpZGF0ZVNlbGVjdG9yKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUob3B0aW9ucywgbm9kZSk7XG59O1xuXG5leHBvcnQgeyB0YWJiYWJsZSwgZm9jdXNhYmxlLCBpc1RhYmJhYmxlLCBpc0ZvY3VzYWJsZSB9O1xuIiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJidXR0b25SZWZcIiwgXCJzaXplXCIsIFwiY29sb3JcIiwgXCJmaWxsXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBCVVRUT05fQ09MT1JTLCB1c2VFdWlCdXR0b25Db2xvckNTUywgdXNlRXVpQnV0dG9uRm9jdXNDU1MgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucy9idXR0b24nO1xuaW1wb3J0IHsgRXVpQnV0dG9uRGlzcGxheSwgaXNCdXR0b25EaXNhYmxlZCB9IGZyb20gJy4vYnV0dG9uX2Rpc3BsYXkvX2J1dHRvbl9kaXNwbGF5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIENPTE9SUyA9IEJVVFRPTl9DT0xPUlM7XG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nXTtcblxuLy8gRm9yIHNvbWUgcmVhc29uLCBTdG9yeWJvb2sgZG9lc24ndCBwYXJzZSBgRXVpQnV0dG9uRGlzcGxheUNvbW1vblByb3BzYCB1bmxlc3Mgd2UgaW5jbHVkZSBpdCBoZXJlXG5cbi8qKlxuICogRXVpQnV0dG9uIGlzIGxhcmdlbHkgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyByZWxldmFudCBwcm9wc1xuICogYW5kIHRoZSBsb2dpYyBmb3IgZWxlbWVudC1zcGVjaWZpYyBhdHRyaWJ1dGVzXG4gKi9cbmV4cG9ydCB2YXIgRXVpQnV0dG9uID0gZnVuY3Rpb24gRXVpQnV0dG9uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGJ1dHRvblJlZiA9IF9yZWYuYnV0dG9uUmVmLFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmJGNvbG9yLFxuICAgIGZpbGwgPSBfcmVmLmZpbGwsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNEaXNhYmxlZCA9IGlzQnV0dG9uRGlzYWJsZWQoe1xuICAgIGhyZWY6IHJlc3QuaHJlZixcbiAgICBpc0Rpc2FibGVkOiByZXN0LmlzRGlzYWJsZWQgfHwgcmVzdC5kaXNhYmxlZCxcbiAgICBpc0xvYWRpbmc6IHJlc3QuaXNMb2FkaW5nXG4gIH0pO1xuICB2YXIgYnV0dG9uQ29sb3JTdHlsZXMgPSB1c2VFdWlCdXR0b25Db2xvckNTUyh7XG4gICAgZGlzcGxheTogZmlsbCA/ICdmaWxsJyA6ICdiYXNlJ1xuICB9KVtpc0Rpc2FibGVkID8gJ2Rpc2FibGVkJyA6IGNvbG9yXTtcbiAgdmFyIGJ1dHRvbkZvY3VzU3R5bGUgPSB1c2VFdWlCdXR0b25Gb2N1c0NTUygpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbicsIGNsYXNzTmFtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbYnV0dG9uQ29sb3JTdHlsZXMsIGJ1dHRvbkZvY3VzU3R5bGVdO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCdXR0b25EaXNwbGF5LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIHJlZjogYnV0dG9uUmVmLFxuICAgIHNpemU6IHNpemVcbiAgfSwgcmVzdCkpO1xufTtcbkV1aUJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgKi9cbiAgLyoqXG4gICAgICogTWFrZSBidXR0b24gYSBzb2xpZCBjb2xvciBmb3IgcHJvbWluZW5jZVxuICAgICAqL1xuICBmaWxsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQW55IG9mIHRoZSBuYW1lZCBjb2xvciBwYWxldHRlIG9wdGlvbnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBVc2Ugc2l6ZSBgc2AgaW4gY29uZmluZWQgc3BhY2VzXG4gICAgICovXG4gIC8qKlxuICAgICAqIFVzZSBzaXplIGBzYCBpbiBjb25maW5lZCBzcGFjZXNcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG4gIGVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJhXCIsIFwiYnV0dG9uXCIsIFwic3BhblwiXSksXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEV4dGVuZHMgdGhlIGJ1dHRvbiB0byAxMDAlIHdpZHRoXG4gICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG1pbmltdW0gd2lkdGhcbiAgICAgKi9cbiAgbWluV2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbdW5kZWZpbmVkXSldKSxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgYDxzcGFuPmAgd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0L2NoaWxkcmVuIG9ubHkgKG5vdCBpY29uKVxuICAgICAqXG4gICAgICogVGhpcyBzcGFuIHdyYXBwZXIgY2FuIGJlIHJlbW92ZWQgYnkgcGFzc2luZyBgdGV4dFByb3BzPXtmYWxzZX1gLlxuICAgICAqL1xuICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0O1xuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChlLCB0KSB7IHJldHVybiB0IHx8ICh0ID0gZS5zbGljZSgwKSksIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUodCkgfSB9KSk7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUJhY2tncm91bmRDb2xvciwgZXVpQ2FuQW5pbWF0ZSB9IGZyb20gJy4uLy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGhleFRvUmdiLCBpc0NvbG9yRGFyaywgbWFrZUhpZ2hDb250cmFzdENvbG9yLCBzaGFkZSwgdGludCwgdHJhbnNwYXJlbnRpemUsIHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMnO1xuZXhwb3J0IHZhciBCVVRUT05fQ09MT1JTID0gWyd0ZXh0JywgJ2FjY2VudCcsICdwcmltYXJ5JywgJ3N1Y2Nlc3MnLCAnd2FybmluZycsICdkYW5nZXInXTtcbmV4cG9ydCB2YXIgQlVUVE9OX0RJU1BMQVlTID0gWydiYXNlJywgJ2ZpbGwnLCAnZW1wdHknXTtcbi8qKlxuICogQ3JlYXRlcyB0aGUgYGJhc2VgIHZlcnNpb24gb2YgYnV0dG9uIHN0eWxlcyB3aXRoIHByb3BlciB0ZXh0IGNvbnRyYXN0LlxuICogQHBhcmFtIGV1aVRoZW1lQ29udGV4dFxuICogQHBhcmFtIGNvbG9yIE9uZSBvZiB0aGUgbmFtZWQgYnV0dG9uIGNvbG9ycyBvciAnZGlzYWJsZWQnXG4gKiBAcmV0dXJucyBTdHlsZSBvYmplY3QgYHsgYmFja2dyb3VuZENvbG9yLCBjb2xvciB9YFxuICovXG5leHBvcnQgdmFyIGV1aUJ1dHRvbkNvbG9yID0gZnVuY3Rpb24gZXVpQnV0dG9uQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcbiAgZnVuY3Rpb24gdGludE9yU2hhZGUoY29sb3IpIHtcbiAgICByZXR1cm4gY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShjb2xvciwgMC43KSA6IHRpbnQoY29sb3IsIDAuOCk7XG4gIH1cbiAgdmFyIGZvcmVncm91bmQ7XG4gIHZhciBiYWNrZ3JvdW5kO1xuICBzd2l0Y2ggKGNvbG9yKSB7XG4gICAgY2FzZSAnZGlzYWJsZWQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6IGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZFRleHQsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUsIDAuMTUpXG4gICAgICB9O1xuICAgIGNhc2UgJ3RleHQnOlxuICAgICAgZm9yZWdyb3VuZCA9IGV1aVRoZW1lLmNvbG9yc1tjb2xvcl07XG4gICAgICBiYWNrZ3JvdW5kID0gY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSwgMC4yKSA6IHRpbnQoZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUsIDAuNSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZm9yZWdyb3VuZCA9IGV1aVRoZW1lLmNvbG9yc1tcIlwiLmNvbmNhdChjb2xvciwgXCJUZXh0XCIpXTtcbiAgICAgIGJhY2tncm91bmQgPSB0aW50T3JTaGFkZShldWlUaGVtZS5jb2xvcnNbY29sb3JdKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiB7XG4gICAgY29sb3I6IG1ha2VIaWdoQ29udHJhc3RDb2xvcihmb3JlZ3JvdW5kKShiYWNrZ3JvdW5kKSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRcbiAgfTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgYGZpbGxgIHZlcnNpb24gb2YgYnV0dG9ucyBzdHlsZXMgd2l0aCBwcm9wZXIgdGV4dCBjb250cmFzdC5cbiAqIEBwYXJhbSBldWlUaGVtZUNvbnRleHRcbiAqIEBwYXJhbSBjb2xvciBPbmUgb2YgdGhlIG5hbWVkIGJ1dHRvbiBjb2xvcnMgb3IgJ2Rpc2FibGVkJ1xuICogQHJldHVybnMgU3R5bGUgb2JqZWN0IGB7IGJhY2tncm91bmRDb2xvciwgY29sb3IgfWBcbiAqL1xuZXhwb3J0IHZhciBldWlCdXR0b25GaWxsQ29sb3IgPSBmdW5jdGlvbiBldWlCdXR0b25GaWxsQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcbiAgdmFyIGdldEZvcmVncm91bmRDb2xvciA9IGZ1bmN0aW9uIGdldEZvcmVncm91bmRDb2xvcihiYWNrZ3JvdW5kKSB7XG4gICAgcmV0dXJuIGlzQ29sb3JEYXJrLmFwcGx5KHZvaWQgMCwgX3RvQ29uc3VtYWJsZUFycmF5KGhleFRvUmdiKGJhY2tncm91bmQpKSkgPyBldWlUaGVtZS5jb2xvcnMuZ2hvc3QgOiBldWlUaGVtZS5jb2xvcnMuaW5rO1xuICB9O1xuICB2YXIgYmFja2dyb3VuZDtcbiAgdmFyIGZvcmVncm91bmQ7XG4gIHN3aXRjaCAoY29sb3IpIHtcbiAgICBjYXNlICdkaXNhYmxlZCc6XG4gICAgICBiYWNrZ3JvdW5kID0gZXVpQnV0dG9uQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikuYmFja2dyb3VuZENvbG9yO1xuICAgICAgZm9yZWdyb3VuZCA9IGV1aUJ1dHRvbkNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLmNvbG9yO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGV4dCc6XG4gICAgICBiYWNrZ3JvdW5kID0gY29sb3JNb2RlID09PSAnREFSSycgPyBldWlUaGVtZS5jb2xvcnMudGV4dCA6IGV1aVRoZW1lLmNvbG9ycy5kYXJrU2hhZGU7XG4gICAgICBmb3JlZ3JvdW5kID0gZ2V0Rm9yZWdyb3VuZENvbG9yKGJhY2tncm91bmQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgY2FzZSAnYWNjZW50JzpcbiAgICAgIC8vIFN1Y2Nlc3MgLyBhY2NlbnQgZmlsbHMgYXJlIGhhcmQgdG8gcmVhZCBvbiBsaWdodCBtb2RlIGV2ZW4gdGhvdWdoIHRoZXkgcGFzcyBjb2xvciBjb250cmFzdCByYXRpb3NcbiAgICAgIC8vIFRPRE86IElmIFdDQUcgMyBnZXRzIGFkb3B0ZWQgKHdoaWNoIHdvdWxkIGNhbGN1bGF0ZXMgbHVtaW5vc2l0eSAmIHdvdWxkIGFsbG93IHVzIHRvIHVzZSB3aGl0ZSB0ZXh0IGluc3RlYWQpLFxuICAgICAgLy8gd2UgY2FuIGdldCByaWQgb2YgdGhpcyBjYXNlIChodHRwczovL2Jsb2cuZGF0YXdyYXBwZXIuZGUvY29sb3ItY29udHJhc3QtY2hlY2stZGF0YS12aXMtd2NhZy1hcGNhLylcbiAgICAgIGJhY2tncm91bmQgPSBjb2xvck1vZGUgPT09ICdMSUdIVCcgPyB0aW50KGV1aVRoZW1lLmNvbG9yc1tjb2xvcl0sIDAuMykgOiBldWlUaGVtZS5jb2xvcnNbY29sb3JdO1xuICAgICAgZm9yZWdyb3VuZCA9IGdldEZvcmVncm91bmRDb2xvcihiYWNrZ3JvdW5kKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBiYWNrZ3JvdW5kID0gZXVpVGhlbWUuY29sb3JzW2NvbG9yXTtcbiAgICAgIGZvcmVncm91bmQgPSBnZXRGb3JlZ3JvdW5kQ29sb3IoYmFja2dyb3VuZCk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4ge1xuICAgIGNvbG9yOiBmb3JlZ3JvdW5kLFxuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZFxuICB9O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBgZW1wdHlgIHZlcnNpb24gb2YgYnV0dG9uIHN0eWxlcyB1c2luZyB0aGUgdGV4dC12YXJpYW50IGFuZCBhZGRpbmcgaW50ZXJhY3RpdmUgc3R5bGVzLlxuICogQHBhcmFtIGV1aVRoZW1lQ29udGV4dFxuICogQHBhcmFtIGNvbG9yIE9uZSBvZiB0aGUgbmFtZWQgYnV0dG9uIGNvbG9ycyBvciAnZGlzYWJsZWQnXG4gKiBAcmV0dXJucyBTdHlsZSBvYmplY3QgYHsgYmFja2dyb3VuZENvbG9yLCBjb2xvciB9YCB3aGVyZSBgYmFja2dyb3VuZGAgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGludGVyYWN0aXZlIHN0YXRlc1xuICovXG5leHBvcnQgdmFyIGV1aUJ1dHRvbkVtcHR5Q29sb3IgPSBmdW5jdGlvbiBldWlCdXR0b25FbXB0eUNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpIHtcbiAgdmFyIGZvcmVncm91bmQ7XG4gIHZhciBiYWNrZ3JvdW5kO1xuICBzd2l0Y2ggKGNvbG9yKSB7XG4gICAgY2FzZSAnZGlzYWJsZWQnOlxuICAgICAgZm9yZWdyb3VuZCA9IGV1aUJ1dHRvbkNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLmNvbG9yO1xuICAgICAgYmFja2dyb3VuZCA9ICd0cmFuc3BhcmVudCc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0ZXh0JzpcbiAgICAgIGZvcmVncm91bmQgPSBldWlCdXR0b25Db2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKS5jb2xvcjtcbiAgICAgIGJhY2tncm91bmQgPSBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAnc3ViZHVlZCcsIHtcbiAgICAgICAgbWV0aG9kOiAndHJhbnNwYXJlbnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBmb3JlZ3JvdW5kID0gZXVpQnV0dG9uQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikuY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kID0gZXVpQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IsIHtcbiAgICAgICAgbWV0aG9kOiAndHJhbnNwYXJlbnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiB7XG4gICAgY29sb3I6IGZvcmVncm91bmQsXG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kXG4gIH07XG59O1xuXG4vKipcbiAqIEdpdmVuIHRoZSBidXR0b24gZGlzcGxheSB0eXBlLCByZXR1cm5zIHRoZSBFbW90aW9uIGJhc2VkIGNvbG9yIGtleXMuXG4gKiBAcGFyYW0gb3B0aW9ucyBCdXR0b24gZGlzcGxheSB0eXBlXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgb2YgYF9FdWlCdXR0b25Db2xvcmAga2V5cyBpbmNsdWRpbmcgYGRpc2FibGVkYFxuICovXG5leHBvcnQgdmFyIHVzZUV1aUJ1dHRvbkNvbG9yQ1NTID0gZnVuY3Rpb24gdXNlRXVpQnV0dG9uQ29sb3JDU1MoKSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIF9vcHRpb25zJGRpc3BsYXkgPSBvcHRpb25zLmRpc3BsYXksXG4gICAgZGlzcGxheSA9IF9vcHRpb25zJGRpc3BsYXkgPT09IHZvaWQgMCA/ICdiYXNlJyA6IF9vcHRpb25zJGRpc3BsYXk7XG4gIHZhciBjb2xvcnNEaXNwbGF5c01hcCA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUJ1dHRvbkRpc3BsYXlzQ29sb3JzKTtcbiAgcmV0dXJuIGNvbG9yc0Rpc3BsYXlzTWFwW2Rpc3BsYXldO1xufTtcbnZhciBldWlCdXR0b25EaXNwbGF5c0NvbG9ycyA9IGZ1bmN0aW9uIGV1aUJ1dHRvbkRpc3BsYXlzQ29sb3JzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgQ09MT1JTID0gW10uY29uY2F0KEJVVFRPTl9DT0xPUlMsIFsnZGlzYWJsZWQnXSk7XG4gIHZhciBkaXNwbGF5c0NvbG9yc01hcCA9IHt9O1xuICBCVVRUT05fRElTUExBWVMuZm9yRWFjaChmdW5jdGlvbiAoZGlzcGxheSkge1xuICAgIGRpc3BsYXlzQ29sb3JzTWFwW2Rpc3BsYXldID0ge307XG4gICAgQ09MT1JTLmZvckVhY2goZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICBzd2l0Y2ggKGRpc3BsYXkpIHtcbiAgICAgICAgY2FzZSAnYmFzZSc6XG4gICAgICAgICAgZGlzcGxheXNDb2xvcnNNYXBbZGlzcGxheV1bY29sb3JdID0gLyojX19QVVJFX18qL2NzcyhldWlCdXR0b25Db2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKSwgXCI7O2xhYmVsOmRpc3BsYXlzQ29sb3JzTWFwLWRpc3BsYXktY29sb3I7XCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmaWxsJzpcbiAgICAgICAgICBkaXNwbGF5c0NvbG9yc01hcFtkaXNwbGF5XVtjb2xvcl0gPSAvKiNfX1BVUkVfXyovY3NzKGV1aUJ1dHRvbkZpbGxDb2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKSwgXCJvdXRsaW5lLWNvbG9yOlwiLCBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlID09PSAnREFSSycgJiYgY29sb3IgPT09ICd0ZXh0JyA/ICdjdXJyZW50Q29sb3InIDogZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLmNvbG9ycy5mdWxsU2hhZGUsIFwiOztsYWJlbDpkaXNwbGF5c0NvbG9yc01hcC1kaXNwbGF5LWNvbG9yO1wiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZW1wdHknOlxuICAgICAgICAgIGRpc3BsYXlzQ29sb3JzTWFwW2Rpc3BsYXldW2NvbG9yXSA9IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpQnV0dG9uRW1wdHlDb2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKS5jb2xvciwgXCI7Jjpmb2N1cywmOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlCdXR0b25FbXB0eUNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLmJhY2tncm91bmRDb2xvciwgXCI7fTtsYWJlbDpkaXNwbGF5c0NvbG9yc01hcC1kaXNwbGF5LWNvbG9yO1wiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gVHdlYWsgYXV0by1nZW5lcmF0ZWQgRW1vdGlvbiBsYWJlbC9jbGFzc05hbWUgb3V0cHV0XG4gICAgICB2YXIgZW1vdGlvbk91dHB1dCA9IGRpc3BsYXlzQ29sb3JzTWFwW2Rpc3BsYXldW2NvbG9yXTtcbiAgICAgIGVtb3Rpb25PdXRwdXQuc3R5bGVzID0gZW1vdGlvbk91dHB1dC5zdHlsZXMucmVwbGFjZSgnbGFiZWw6ZGlzcGxheXNDb2xvcnNNYXAtZGlzcGxheS1jb2xvcjsnLCBcImxhYmVsOlwiLmNvbmNhdChkaXNwbGF5LCBcIi1cIikuY29uY2F0KGNvbG9yLCBcIjtcIikpO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGRpc3BsYXlzQ29sb3JzTWFwO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSB0cmFuc2xhdGUgYW5pbWF0aW9uIHdoZW4gYnV0dG9uIGlzIGluIGZvY3VzLlxuICogQHJldHVybnMgc3RyaW5nXG4gKi9cbmV4cG9ydCB2YXIgdXNlRXVpQnV0dG9uRm9jdXNDU1MgPSBmdW5jdGlvbiB1c2VFdWlCdXR0b25Gb2N1c0NTUygpIHtcbiAgcmV0dXJuIHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUJ1dHRvbkZvY3VzQ1NTKTtcbn07XG52YXIgZXVpQnV0dG9uRm9jdXNBbmltYXRpb24gPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgNTAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7XFxuICB9XFxuXCJdKSkpO1xudmFyIGV1aUJ1dHRvbkZvY3VzQ1NTID0gZnVuY3Rpb24gZXVpQnV0dG9uRm9jdXNDU1MoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICB2YXIgZm9jdXNDU1MgPSAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246dHJhbnNmb3JtIFwiLCBldWlUaGVtZS5hbmltYXRpb24ubm9ybWFsLCBcIiBlYXNlLWluLW91dCxiYWNrZ3JvdW5kLWNvbG9yIFwiLCBldWlUaGVtZS5hbmltYXRpb24ubm9ybWFsLCBcIiBlYXNlLWluLW91dDsmOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xcHgpO30mOmZvY3Vze2FuaW1hdGlvbjpcIiwgZXVpQnV0dG9uRm9jdXNBbmltYXRpb24sIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ubm9ybWFsLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmJvdW5jZSwgXCI7fSY6YWN0aXZlOm5vdCg6ZGlzYWJsZWQpe3RyYW5zZm9ybTp0cmFuc2xhdGVZKDFweCk7fX07bGFiZWw6Zm9jdXNDU1M7XCIpO1xuICAvLyBSZW1vdmUgdGhlIGF1dG8tZ2VuZXJhdGVkIGxhYmVsLlxuICAvLyBXZSBjb3VsZCB0eXBpY2FsbHkgYXZvaWQgYSBsYWJlbCBieSB1c2luZyBhIHBsYWluIHN0cmluZyBgYCBpbnN0ZWFkIG9mIGNzc2BgLFxuICAvLyBidXQgd2UgbmVlZCBjc3NgYCBmb3Iga2V5ZnJhbWVzYGAgdG8gd29yayBmb3IgdGhlIGZvY3VzIGFuaW1hdGlvblxuICBmb2N1c0NTUy5zdHlsZXMgPSBmb2N1c0NTUy5zdHlsZXMucmVwbGFjZSgnbGFiZWw6Zm9jdXNDU1M7JywgJycpO1xuICByZXR1cm4gZm9jdXNDU1M7XG59O1xuXG4vKipcbiAqIE1hcCBvZiBgc2l6ZWAgcHJvcHMgdG8gdmFyaW91cyBzaXppbmdzL3NjYWxlc1xuICogdGhhdCBzaG91bGQgcmVtYWluIGNvbnNpc3RlbnQgYWNyb3NzIGFsbCBidXR0b25zXG4gKi9cbmV4cG9ydCB2YXIgZXVpQnV0dG9uU2l6ZU1hcCA9IGZ1bmN0aW9uIGV1aUJ1dHRvblNpemVNYXAoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgeHM6IHtcbiAgICAgIGhlaWdodDogZXVpVGhlbWUuc2l6ZS5sLFxuICAgICAgcmFkaXVzOiBldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLFxuICAgICAgZm9udFNjYWxlOiAneHMnXG4gICAgfSxcbiAgICBzOiB7XG4gICAgICBoZWlnaHQ6IGV1aVRoZW1lLnNpemUueGwsXG4gICAgICByYWRpdXM6IGV1aVRoZW1lLmJvcmRlci5yYWRpdXMuc21hbGwsXG4gICAgICBmb250U2NhbGU6ICdzJ1xuICAgIH0sXG4gICAgbToge1xuICAgICAgaGVpZ2h0OiBldWlUaGVtZS5zaXplLnh4bCxcbiAgICAgIHJhZGl1czogZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sXG4gICAgICBmb250U2NhbGU6ICdzJ1xuICAgIH1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJlbGVtZW50XCIsIFwidHlwZVwiLCBcImNoaWxkcmVuXCIsIFwiaWNvblR5cGVcIiwgXCJpY29uU2lkZVwiLCBcImljb25TaXplXCIsIFwic2l6ZVwiLCBcImlzRGlzYWJsZWRcIiwgXCJkaXNhYmxlZFwiLCBcImlzTG9hZGluZ1wiLCBcImlzU2VsZWN0ZWRcIiwgXCJmdWxsV2lkdGhcIiwgXCJtaW5XaWR0aFwiLCBcImNvbnRlbnRQcm9wc1wiLCBcInRleHRQcm9wc1wiLCBcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJzdHlsZVwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcblxuLy8gQHRzLWlnbm9yZSBtb2R1bGUgZG9lc24ndCBleHBvcnQgYGNyZWF0ZUVsZW1lbnRgXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUJ1dHRvbkRpc3BsYXlTdHlsZXMgfSBmcm9tICcuL19idXR0b25fZGlzcGxheS5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uRGlzcGxheUNvbnRlbnQgfSBmcm9tICcuL19idXR0b25fZGlzcGxheV9jb250ZW50JztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgU0laRVMgPSBbJ3hzJywgJ3MnLCAnbSddO1xuXG4vKipcbiAqIEV4dGVuZHMgRXVpQnV0dG9uRGlzcGxheUNvbnRlbnRQcm9wcyB3aGljaCBwcm92aWRlc1xuICogYGljb25UeXBlYCwgYGljb25TaWRlYCwgYW5kIGB0ZXh0UHJvcHNgXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQnV0dG9uRGlzYWJsZWQoX3JlZikge1xuICB2YXIgaHJlZiA9IF9yZWYuaHJlZixcbiAgICBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIGlzTG9hZGluZyA9IF9yZWYuaXNMb2FkaW5nO1xuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHJldHVybiBpc0xvYWRpbmcgfHwgaXNEaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG59XG5cbi8qKlxuICogRXVpQnV0dG9uRGlzcGxheSBpcyBhbiBpbnRlcm5hbC1vbmx5IGNvbXBvbmVudCB1c2VkIGZvciBkaXNwbGF5aW5nXG4gKiBhbnkgZWxlbWVudCBhcyBhIGJ1dHRvbi5cbiAqL1xuZXhwb3J0IHZhciBFdWlCdXR0b25EaXNwbGF5ID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYyLCByZWYpIHtcbiAgdmFyIF9yZWYyJGVsZW1lbnQgPSBfcmVmMi5lbGVtZW50LFxuICAgIF9lbGVtZW50ID0gX3JlZjIkZWxlbWVudCA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmMiRlbGVtZW50LFxuICAgIF9yZWYyJHR5cGUgPSBfcmVmMi50eXBlLFxuICAgIHR5cGUgPSBfcmVmMiR0eXBlID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYyJHR5cGUsXG4gICAgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICBpY29uVHlwZSA9IF9yZWYyLmljb25UeXBlLFxuICAgIF9yZWYyJGljb25TaWRlID0gX3JlZjIuaWNvblNpZGUsXG4gICAgaWNvblNpZGUgPSBfcmVmMiRpY29uU2lkZSA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZjIkaWNvblNpZGUsXG4gICAgaWNvblNpemUgPSBfcmVmMi5pY29uU2l6ZSxcbiAgICBfcmVmMiRzaXplID0gX3JlZjIuc2l6ZSxcbiAgICBzaXplID0gX3JlZjIkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZjIkc2l6ZSxcbiAgICBpc0Rpc2FibGVkID0gX3JlZjIuaXNEaXNhYmxlZCxcbiAgICBkaXNhYmxlZCA9IF9yZWYyLmRpc2FibGVkLFxuICAgIGlzTG9hZGluZyA9IF9yZWYyLmlzTG9hZGluZyxcbiAgICBpc1NlbGVjdGVkID0gX3JlZjIuaXNTZWxlY3RlZCxcbiAgICBmdWxsV2lkdGggPSBfcmVmMi5mdWxsV2lkdGgsXG4gICAgbWluV2lkdGggPSBfcmVmMi5taW5XaWR0aCxcbiAgICBjb250ZW50UHJvcHMgPSBfcmVmMi5jb250ZW50UHJvcHMsXG4gICAgdGV4dFByb3BzID0gX3JlZjIudGV4dFByb3BzLFxuICAgIGhyZWYgPSBfcmVmMi5ocmVmLFxuICAgIHRhcmdldCA9IF9yZWYyLnRhcmdldCxcbiAgICByZWwgPSBfcmVmMi5yZWwsXG4gICAgc3R5bGUgPSBfcmVmMi5zdHlsZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQpO1xuICB2YXIgYnV0dG9uSXNEaXNhYmxlZCA9IGlzQnV0dG9uRGlzYWJsZWQoe1xuICAgIGhyZWY6IGhyZWYsXG4gICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCB8fCBkaXNhYmxlZCxcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ1xuICB9KTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUJ1dHRvbkRpc3BsYXlTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlCdXR0b25EaXNwbGF5LCBzdHlsZXNbc2l6ZV0sIGZ1bGxXaWR0aCAmJiBzdHlsZXMuZnVsbFdpZHRoLCBtaW5XaWR0aCA9PSBudWxsICYmIHN0eWxlcy5kZWZhdWx0TWluV2lkdGgsIGJ1dHRvbklzRGlzYWJsZWQgJiYgc3R5bGVzLmlzRGlzYWJsZWRdO1xuICB2YXIgaW5uZXJOb2RlID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25EaXNwbGF5Q29udGVudCwgX2V4dGVuZHMoe1xuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgIGlzRGlzYWJsZWQ6IGJ1dHRvbklzRGlzYWJsZWQsXG4gICAgaWNvblR5cGU6IGljb25UeXBlLFxuICAgIGljb25TaWRlOiBpY29uU2lkZSxcbiAgICBpY29uU2l6ZTogaWNvblNpemUsXG4gICAgdGV4dFByb3BzOiB0ZXh0UHJvcHNcbiAgfSwgY29udGVudFByb3BzKSwgY2hpbGRyZW4pO1xuICB2YXIgZWxlbWVudCA9IGJ1dHRvbklzRGlzYWJsZWQgPyAnYnV0dG9uJyA6IGhyZWYgPyAnYScgOiBfZWxlbWVudDtcbiAgdmFyIGVsZW1lbnRQcm9wcyA9IHt9O1xuICAvLyBFbGVtZW50LXNwZWNpZmljIGF0dHJpYnV0ZXNcbiAgaWYgKGVsZW1lbnQgPT09ICdidXR0b24nKSB7XG4gICAgZWxlbWVudFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlbGVtZW50UHJvcHMpLCB7fSwge1xuICAgICAgZGlzYWJsZWQ6IGJ1dHRvbklzRGlzYWJsZWQsXG4gICAgICAnYXJpYS1wcmVzc2VkJzogaXNTZWxlY3RlZFxuICAgIH0pO1xuICB9XG4gIHZhciByZWxPYmogPSB7fTtcbiAgaWYgKGhyZWYgJiYgIWJ1dHRvbklzRGlzYWJsZWQpIHtcbiAgICByZWxPYmouaHJlZiA9IGhyZWY7XG4gICAgcmVsT2JqLnJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICAgIHJlbE9iai50YXJnZXQgPSB0YXJnZXQ7XG4gIH0gZWxzZSB7XG4gICAgcmVsT2JqLnR5cGUgPSB0eXBlO1xuICB9XG4gIHJldHVybiBjcmVhdGVFbGVtZW50KGVsZW1lbnQsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBzdHlsZTogbWluV2lkdGggPyBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKSwge30sIHtcbiAgICAgIG1pbklubGluZVNpemU6IG1pbldpZHRoXG4gICAgfSkgOiBzdHlsZSxcbiAgICByZWY6IHJlZlxuICB9LCBlbGVtZW50UHJvcHMpLCByZWxPYmopLCByZXN0KSwgaW5uZXJOb2RlKTtcbn0pO1xuRXVpQnV0dG9uRGlzcGxheS5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBlbGVtZW50OiBQcm9wVHlwZXMub25lT2YoW1wiYVwiLCBcImJ1dHRvblwiLCBcInNwYW5cIl0pLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogRXh0ZW5kcyB0aGUgYnV0dG9uIHRvIDEwMCUgd2lkdGhcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRXh0ZW5kcyB0aGUgYnV0dG9uIHRvIDEwMCUgd2lkdGhcbiAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWluaW11bSB3aWR0aFxuICAgICAqL1xuICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBtaW5pbXVtIHdpZHRoXG4gICAgICovXG4gIG1pbldpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICovXG4gIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgc3R5bGU6IFByb3BUeXBlcy5hbnksXG4gIHR5cGU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFt1bmRlZmluZWRdKV0pLFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQvY2hpbGRyZW4gb25seSAobm90IGljb24pXG4gICAgICpcbiAgICAgKiBUaGlzIHNwYW4gd3JhcHBlciBjYW4gYmUgcmVtb3ZlZCBieSBwYXNzaW5nIGB0ZXh0UHJvcHM9e2ZhbHNlfWAuXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5hbnksXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55XG59O1xuRXVpQnV0dG9uRGlzcGxheS5kaXNwbGF5TmFtZSA9ICdFdWlCdXR0b25EaXNwbGF5JzsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsgQ09MT1JfTU9ERVNfU1RBTkRBUkQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS90eXBlcyc7XG5cbi8vIENyZWF0ZSBhIENTUyBjb2xvciB2YWx1ZSB1c2luZyB3aG9zZSBvcGFjaXR5IGlzIGRldGVybWluZWQgYmFzZWRcbi8vIG9uIGVpdGhlciBhIGxpZ2h0IG9yIGRhcmsgdGhlbWUuIFdlIHVzZSBhIG11bHRpcGxpZXJcbi8vIG9mIDEgZm9yIGxpZ2h0IHRoZW1lcyBhbmQgMi41IGZvciBkYXJrIHRoZW1lc1xuZXhwb3J0IHZhciBnZXRTaGFkb3dDb2xvciA9IGZ1bmN0aW9uIGdldFNoYWRvd0NvbG9yKGNvbG9yLCBvcGFjaXR5LCBjb2xvck1vZGUpIHtcbiAgdmFyIHRoZW1lT3BhY2l0eSA9IGNvbG9yTW9kZSA9PT0gQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyayA/IG9wYWNpdHkgKiAzLjUgOiBvcGFjaXR5ICogMTtcbiAgcmV0dXJuIGNocm9tYShjb2xvcikuYWxwaGEodGhlbWVPcGFjaXR5KS5jc3MoKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUnO1xuaW1wb3J0IHsgZ2V0U2hhZG93Q29sb3IgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuLyoqXG4gKiBldWlTbGlnaHRTaGFkb3dcbiAqL1xuZXhwb3J0IHZhciBldWlTaGFkb3dYU21hbGwgPSBmdW5jdGlvbiBldWlTaGFkb3dYU21hbGwoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlO1xuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF9jb2xvciA9IF9yZWYyLmNvbG9yO1xuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgLjhweCAuOHB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNCwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDIuM3B4IDJweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjAzLCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuXG4vKipcbiAqIGJvdHRvbVNoYWRvd1NtYWxsXG4gKi9cbmV4cG9ydCB2YXIgZXVpU2hhZG93U21hbGwgPSBmdW5jdGlvbiBldWlTaGFkb3dTbWFsbChfcmVmMykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMy5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmMy5jb2xvck1vZGU7XG4gIHZhciBfcmVmNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgX2NvbG9yID0gX3JlZjQuY29sb3I7XG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAuN3B4IDEuNHB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNywgY29sb3JNb2RlKSwgXCIsXFxuICAwIDEuOXB4IDRweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA1LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgNC41cHggMTBweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA1LCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuXG4vKipcbiAqIGJvdHRvbVNoYWRvd01lZGl1bVxuICovXG5leHBvcnQgdmFyIGV1aVNoYWRvd01lZGl1bSA9IGZ1bmN0aW9uIGV1aVNoYWRvd01lZGl1bShfcmVmNSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmNS5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmNS5jb2xvck1vZGU7XG4gIHZhciBfcmVmNiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgX2NvbG9yID0gX3JlZjYuY29sb3IsXG4gICAgcHJvcGVydHkgPSBfcmVmNi5wcm9wZXJ0eTtcbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIGlmIChwcm9wZXJ0eSA9PT0gJ2ZpbHRlcicpIHtcbiAgICAvLyBVc2luZyBvbmx5IG9uZSBkcm9wLXNoYWRvdyBmaWx0ZXIgaW5zdGVhZCBvZiBtdWx0aXBsZSBpcyBtb3JlIHBlcmZvcm1hbnQgJiBwcmV2ZW50cyBTYWZhcmkgYnVnc1xuICAgIHJldHVybiBcImZpbHRlcjogZHJvcC1zaGFkb3coMCA1LjdweCA5cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjIsIGNvbG9yTW9kZSksIFwiKTtcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiYm94LXNoYWRvdzpcXG4gICAgICAwIC45cHggNHB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wOCwgY29sb3JNb2RlKSwgXCIsXFxuICAgICAgMCAyLjZweCA4cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNiwgY29sb3JNb2RlKSwgXCIsXFxuICAgICAgMCA1LjdweCAxMnB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDUsIGNvbG9yTW9kZSksIFwiLFxcbiAgICAgIDAgMTVweCAxNXB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDQsIGNvbG9yTW9kZSksIFwiO1wiKTtcbiAgfVxufTtcblxuLyoqXG4gKiBib3R0b21TaGFkb3dcbiAqL1xuZXhwb3J0IHZhciBldWlTaGFkb3dMYXJnZSA9IGZ1bmN0aW9uIGV1aVNoYWRvd0xhcmdlKF9yZWY3KSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWY3LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWY3LmNvbG9yTW9kZTtcbiAgdmFyIF9yZWY4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBfY29sb3IgPSBfcmVmOC5jb2xvcjtcbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIDFweCA1cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjEsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAzLjZweCAxM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDcsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCA4LjRweCAyM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAyM3B4IDM1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcblxuLyoqXG4gKiBib3R0b21TaGFkb3dMYXJnZVxuICovXG5cbmV4cG9ydCB2YXIgZXVpU2hhZG93WExhcmdlID0gZnVuY3Rpb24gZXVpU2hhZG93WExhcmdlKF9yZWY5KSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWY5LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWY5LmNvbG9yTW9kZTtcbiAgdmFyIF9yZWYxMCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgX2NvbG9yID0gX3JlZjEwLmNvbG9yLFxuICAgIHJldmVyc2UgPSBfcmVmMTAucmV2ZXJzZTtcbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIFwiLmNvbmNhdChyZXZlcnNlID8gJy0nIDogJycsIFwiMi43cHggOXB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMTMsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCBcIikuY29uY2F0KHJldmVyc2UgPyAnLScgOiAnJywgXCI5LjRweCAyNHB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDksIGNvbG9yTW9kZSksIFwiLFxcbiAgMCBcIikuY29uY2F0KHJldmVyc2UgPyAnLScgOiAnJywgXCIyMS44cHggNDNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA4LCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuXG4vKipcbiAqIHNsaWdodFNoYWRvd0hvdmVyXG4gKi9cbmV4cG9ydCB2YXIgZXVpU2xpZ2h0U2hhZG93SG92ZXIgPSBmdW5jdGlvbiBldWlTbGlnaHRTaGFkb3dIb3ZlcihfcmVmMTEpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjExLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYxMS5jb2xvck1vZGU7XG4gIHZhciBfcmVmMTIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF9jb2xvciA9IF9yZWYxMi5jb2xvcjtcbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIDFweCA1cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjEsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAzLjZweCAxM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDcsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCA4LjRweCAyM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAyM3B4IDM1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpU2xpZ2h0U2hhZG93SG92ZXIgPSBmdW5jdGlvbiB1c2VFdWlTbGlnaHRTaGFkb3dIb3Zlcihjb2xvcikge1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNsaWdodFNoYWRvd0hvdmVyKGV1aVRoZW1lQ29udGV4dCwge1xuICAgIGNvbG9yOiBjb2xvclxuICB9KTtcbn07XG5cbi8qKlxuICogYm90dG9tU2hhZG93RmxhdFxuICpcbiAqIFNpbWlsYXIgdG8gc2hhZG93IG1lZGl1bSBidXQgd2l0aG91dCB0aGUgYm90dG9tIGRlcHRoLlxuICogVXNlZnVsIGZvciBwb3BvdmVycyB0aGF0IGRyb3AgVVAgcmF0aGVyIHRoYW4gRE9XTi5cbiAqL1xuZXhwb3J0IHZhciBldWlTaGFkb3dGbGF0ID0gZnVuY3Rpb24gZXVpU2hhZG93RmxhdChfcmVmMTMpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjEzLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYxMy5jb2xvck1vZGU7XG4gIHZhciBfcmVmMTQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF9jb2xvciA9IF9yZWYxNC5jb2xvcjtcbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIDAgLjhweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAwIDJweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMCA1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNCwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDAgMTdweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjAzLCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlTaGFkb3dGbGF0ID0gZnVuY3Rpb24gdXNlRXVpU2hhZG93RmxhdChjb2xvcikge1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNoYWRvd0ZsYXQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0pO1xufTtcbmV4cG9ydCB2YXIgZXVpU2hhZG93ID0gZnVuY3Rpb24gZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgc2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2wnO1xuICB2YXIgX3JlZjE1ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fSxcbiAgICBjb2xvciA9IF9yZWYxNS5jb2xvcjtcbiAgc3dpdGNoIChzaXplKSB7XG4gICAgY2FzZSAneHMnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd1hTbWFsbChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBldWlTaGFkb3dTbWFsbChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBldWlTaGFkb3dNZWRpdW0oZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSk7XG4gICAgY2FzZSAnbCc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93TGFyZ2UoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSk7XG4gICAgY2FzZSAneGwnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd1hMYXJnZShldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcbiAgICBkZWZhdWx0OlxuICAgICAgY29uc29sZS53YXJuKCdQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHNpemUgb3B0aW9uIHRvIHVzZUV1aVNoYWRvdycpO1xuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuZXhwb3J0IHZhciB1c2VFdWlTaGFkb3cgPSBmdW5jdGlvbiB1c2VFdWlTaGFkb3coKSB7XG4gIHZhciBzaXplID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnbCc7XG4gIHZhciBjb2xvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsIHNpemUsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUsIGxvZ2ljYWxDU1MsIGxvZ2ljYWxTaG9ydGhhbmRDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlCdXR0b25TaXplTWFwIH0gZnJvbSAnLi4vLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuLy8gUHJvdmlkZXMgYSBzb2xpZCByZXNldCBhbmQgYmFzZSBmb3IgaGFuZGxpbmcgc2l6aW5nIGxheW91dFxuLy8gRG9lcyBub3QgaW5jbHVkZSBhbnkgdmlzdWFsIHN0eWxlc1xuZXhwb3J0IHZhciBldWlCdXR0b25CYXNlQ1NTID0gZnVuY3Rpb24gZXVpQnV0dG9uQmFzZUNTUygpIHtcbiAgcmV0dXJuIFwiXFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICBcIi5jb25jYXQobG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiO1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiO1xcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgXCIpO1xufTtcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjg1OTVwOS1pc0Rpc2FibGVkXCIsXG4gIHN0eWxlczogXCJjdXJzb3I6bm90LWFsbG93ZWQ7bGFiZWw6aXNEaXNhYmxlZDtcIlxufSA6IHtcbiAgbmFtZTogXCI4NTk1cDktaXNEaXNhYmxlZFwiLFxuICBzdHlsZXM6IFwiY3Vyc29yOm5vdC1hbGxvd2VkO2xhYmVsOmlzRGlzYWJsZWQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpQnV0dG9uRGlzcGxheVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUJ1dHRvbkRpc3BsYXlTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIHNpemVzID0gZXVpQnV0dG9uU2l6ZU1hcChldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgX2J1dHRvblNpemUgPSBmdW5jdGlvbiBfYnV0dG9uU2l6ZShzaXplS2V5KSB7XG4gICAgdmFyIHNpemUgPSBzaXplc1tzaXplS2V5XTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdoZWlnaHQnLCBzaXplLmhlaWdodCksIFwiIGxpbmUtaGVpZ2h0OlwiLCBzaXplLmhlaWdodCwgXCI7XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgc2l6ZS5mb250U2NhbGUpLCBcIiBib3JkZXItcmFkaXVzOlwiLCBzaXplLnJhZGl1cywgXCI7XCIpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlCdXR0b25EaXNwbGF5OiAvKiNfX1BVUkVfXyovY3NzKGV1aUJ1dHRvbkJhc2VDU1MoKSwgXCIgZm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0Lm1lZGl1bSwgXCI7XCIsIGxvZ2ljYWxTaG9ydGhhbmRDU1MoJ3BhZGRpbmcnLCBcIjAgXCIuY29uY2F0KGV1aVRoZW1lLnNpemUubSkpLCBcIiAmOmhvdmVyOm5vdCg6ZGlzYWJsZWQpLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9O2xhYmVsOmV1aUJ1dHRvbkRpc3BsYXk7XCIpLFxuICAgIC8vIFN0YXRlc1xuICAgIGlzRGlzYWJsZWQ6IF9yZWYsXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTpibG9jaztcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKSxcbiAgICBkZWZhdWx0TWluV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWluLXdpZHRoJywgXCJcIi5jb25jYXQoZXVpVGhlbWUuYmFzZSAqIDcsIFwicHhcIikpLCBcIjs7bGFiZWw6ZGVmYXVsdE1pbldpZHRoO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKF9idXR0b25TaXplKCd4cycpLCBcIjtsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhfYnV0dG9uU2l6ZSgncycpLCBcIjtsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKF9idXR0b25TaXplKCdtJyksIFwiO2xhYmVsOm07XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJ0ZXh0UHJvcHNcIiwgXCJpc0xvYWRpbmdcIiwgXCJpc0Rpc2FibGVkXCIsIFwiaWNvblR5cGVcIiwgXCJpY29uU2l6ZVwiLCBcImljb25TaWRlXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciB9IGZyb20gJy4uLy4uL2xvYWRpbmcnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgZXVpQnV0dG9uRGlzcGxheUNvbnRlbnRTdHlsZXMgfSBmcm9tICcuL19idXR0b25fZGlzcGxheV9jb250ZW50LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBJQ09OX1NJWkVTID0gWydzJywgJ20nXTtcbmV4cG9ydCB2YXIgSUNPTl9TSURFUyA9IFsnbGVmdCcsICdyaWdodCddO1xuXG4vKipcbiAqICpJTlRFUk5BTCBPTkxZKlxuICogVGhpcyBjb21wb25lbnQgaXMgc2ltcGx5IGEgaGVscGVyIGNvbXBvbmVudCBmb3IgcmV1c2Ugd2l0aGluIG90aGVyIGJ1dHRvbiBjb21wb25lbnRzLlxuICovXG5cbmV4cG9ydCB2YXIgRXVpQnV0dG9uRGlzcGxheUNvbnRlbnQgPSBmdW5jdGlvbiBFdWlCdXR0b25EaXNwbGF5Q29udGVudChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgdGV4dFByb3BzID0gX3JlZi50ZXh0UHJvcHMsXG4gICAgX3JlZiRpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZyxcbiAgICBpc0xvYWRpbmcgPSBfcmVmJGlzTG9hZGluZyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzTG9hZGluZyxcbiAgICBfcmVmJGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgaXNEaXNhYmxlZCA9IF9yZWYkaXNEaXNhYmxlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzRGlzYWJsZWQsXG4gICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgIF9yZWYkaWNvblNpemUgPSBfcmVmLmljb25TaXplLFxuICAgIGljb25TaXplID0gX3JlZiRpY29uU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRpY29uU2l6ZSxcbiAgICBfcmVmJGljb25TaWRlID0gX3JlZi5pY29uU2lkZSxcbiAgICBpY29uU2lkZSA9IF9yZWYkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkaWNvblNpZGUsXG4gICAgY29udGVudFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlCdXR0b25EaXNwbGF5Q29udGVudFN0eWxlcyk7XG5cbiAgLy8gQWRkIGFuIGljb24gdG8gdGhlIGJ1dHRvbiBpZiBvbmUgZXhpc3RzLlxuICB2YXIgaWNvbiA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgIC8vIFdoZW4gdGhlIGJ1dHRvbiBpcyBkaXNhYmxlZCB0aGUgdGV4dCBnZXRzIGdyYXlcbiAgICAgIC8vIGFuZCBpbiBzb21lIGJ1dHRvbnMgdGhlIGJhY2tncm91bmQgZ2V0cyBhIGxpZ2h0IGdyYXlcbiAgICAgIC8vIGZvciBiZXR0ZXIgY29udHJhc3Qgd2Ugd2FudCB0byBjaGFuZ2UgdGhlIGJvcmRlciBvZiB0aGUgc3Bpbm5lclxuICAgICAgLy8gdG8gaGF2ZSB0aGUgc2FtZSBjb2xvciBvZiB0aGUgdGV4dC4gVGhpcyB3YXkgd2UgZW5zdXJlIHRoZSBib3JkZXJzXG4gICAgICAvLyBhcmUgYWx3YXlzIHZpc2libGUuIFRoZSBkZWZhdWx0IHNwaW5uZXIgY29sb3IgY291bGQgYmUgdmVyeSBsaWdodC5cbiAgICAgIHZhciBsb2FkaW5nU3Bpbm5lckNvbG9yID0gaXNEaXNhYmxlZCA/IHtcbiAgICAgICAgYm9yZGVyOiAnY3VycmVudGNvbG9yJ1xuICAgICAgfSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgIHNpemU6IGljb25TaXplLFxuICAgICAgICBjb2xvcjogbG9hZGluZ1NwaW5uZXJDb2xvclxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpY29uVHlwZSkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgICAgc2l6ZTogaWNvblNpemUsXG4gICAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtpY29uVHlwZSwgaWNvblNpemUsIGlzTG9hZGluZywgaXNEaXNhYmxlZF0pO1xuICB2YXIgaXNUZXh0ID0gdHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJztcbiAgdmFyIGRvTm90UmVuZGVyVGV4dFdyYXBwZXIgPSB0ZXh0UHJvcHMgPT09IGZhbHNlO1xuICB2YXIgcmVuZGVyVGV4dFdyYXBwZXIgPSAoaXNUZXh0IHx8IHRleHRQcm9wcykgJiYgIWRvTm90UmVuZGVyVGV4dFdyYXBwZXI7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBzdHlsZXMuZXVpQnV0dG9uRGlzcGxheUNvbnRlbnRcbiAgfSwgY29udGVudFByb3BzKSwgaWNvblNpZGUgPT09ICdsZWZ0JyAmJiBpY29uLCByZW5kZXJUZXh0V3JhcHBlciA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHt9LCB0ZXh0UHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aS10ZXh0VHJ1bmNhdGUnLCB0ZXh0UHJvcHMgPT09IG51bGwgfHwgdGV4dFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0UHJvcHMuY2xhc3NOYW1lKVxuICB9KSwgY2hpbGRyZW4pIDogY2hpbGRyZW4sIGljb25TaWRlID09PSAncmlnaHQnICYmIGljb24pO1xufTtcbkV1aUJ1dHRvbkRpc3BsYXlDb250ZW50LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW3VuZGVmaW5lZF0pXSksXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dC9jaGlsZHJlbiBvbmx5IChub3QgaWNvbilcbiAgICAgKlxuICAgICAqIFRoaXMgc3BhbiB3cmFwcGVyIGNhbiBiZSByZW1vdmVkIGJ5IHBhc3NpbmcgYHRleHRQcm9wcz17ZmFsc2V9YC5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFjY2Vzc2liaWxpdHkgPSBmdW5jdGlvbiBFdWlJY29uQWNjZXNzaWJpbGl0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMGE4IDggMCAxIDEgMCAxNkE4IDggMCAwIDEgOCAwWm0wIDFhNyA3IDAgMSAwIDAgMTRBNyA3IDAgMCAwIDggMVptMy45NzQgNC4zNDJhLjUuNSAwIDAgMS0uMjMzLjU5NmwtLjA4My4wMzZMOSA2Ljg2djIuNTU5bC45NzQgMi45MjNhLjUuNSAwIDAgMS0uMjMzLjU5NmwtLjA4My4wMzZhLjUuNSAwIDAgMS0uNTk2LS4yMzNsLS4wMzYtLjA4My0xLTNMOCA5LjVsLS4wMjYuMTU4LTEgM2EuNS41IDAgMCAxLS45Ny0uMjI4bC4wMjItLjA4OEw3IDkuNDE2VjYuODZsLTIuNjU4LS44ODZhLjUuNSAwIDAgMSAuMjI4LS45N2wuMDg4LjAyMkw3LjU4MyA2aC44MzNsMi45MjYtLjk3NGEuNS41IDAgMCAxIC42MzIuMzE2Wk04IDNhMSAxIDAgMSAxIDAgMiAxIDEgMCAwIDEgMC0yWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQWNjZXNzaWJpbGl0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BZ2dyZWdhdGUgPSBmdW5jdGlvbiBFdWlJY29uQWdncmVnYXRlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuNSAyYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xem0wLTFhMS41IDEuNSAwIDAgMSAxLjQxNSAxaDEuOTA4YTEuNSAxLjUgMCAwIDEgMS4zOTMuOTQzTDguODM5IDdIMTIuNWEuNS41IDAgMCAxIDAgMUg4LjgzOWwtMS42MjMgNC4wNTdBMS41IDEuNSAwIDAgMSA1LjgyMyAxM0gzLjkxNWExLjUgMS41IDAgMSAxIDAtMWgxLjkwOGEuNS41IDAgMCAwIC40NjQtLjMxNEw3Ljc2MSA4SDMuOTE1YTEuNSAxLjUgMCAxIDEgMC0xSDcuNzZMNi4yODcgMy4zMTRBLjUuNSAwIDAgMCA1LjgyMyAzSDMuOTE1QTEuNSAxLjUgMCAxIDEgMi41IDF6bTAgMTFhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTF6TTMgNy41YS41LjUgMCAxIDAtMSAwIC41LjUgMCAwIDAgMSAwem05LjM1NC0zLjM1NGEuNS41IDAgMCAwLS43MDguNzA4TDEzLjc5MyA3YS43MDcuNzA3IDAgMCAxIDAgMWwtMi4xNDcgMi4xNDZhLjUuNSAwIDAgMCAuNzA4LjcwOEwxNC41IDguNzA3YTEuNzA3IDEuNzA3IDAgMCAwIDAtMi40MTRsLTIuMTQ2LTIuMTQ3elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQWdncmVnYXRlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFsZXJ0ID0gZnVuY3Rpb24gRXVpSWNvbkFsZXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41NSA5LjUwMmwuMzUtMy41MDdhLjkwNS45MDUgMCAxMC0xLjggMGwuMzUgMy41MDdhLjU1Mi41NTIgMCAwMDEuMSAwek05IDEyYTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguODY0IDEuNDk2YTEgMSAwIDAwLTEuNzI4IDBsLTcgMTJBMSAxIDAgMDAxIDE1aDE0YTEgMSAwIDAwLjg2NC0xLjUwNGwtNy0xMnpNMSAxNEw4IDJsNyAxMkgxelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQWxlcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQW5hbHl6ZUV2ZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFuYWx5emVFdmVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDkuMTY5IDIgNS4yNXY2LjE3bDYgMy40MjggNi0zLjQyOFY1LjI1TDggOS4xN1pNMTUgNHY4bC03IDQtNy00VjRsNy00IDcgNFptLTEuNDI4LjMzNkw4IDEuMTUyIDIuNDI4IDQuMzM2IDggNy45NzRsNS41NzItMy42MzhaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQW5hbHl6ZUV2ZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFuYWx5emVFdmVudCA9IGZ1bmN0aW9uIEV1aUljb25BbmFseXplRXZlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE0LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuOTI0IDQuMDEzYS42MDUuNjA1IDAgMDAtLjIyOC0uMjM2TDcuMzA0LjA4MmEuNjA3LjYwNyAwIDAwLS42MDggMEwuMzA0IDMuNzc3QS42Mi42MiAwIDAwMCA0LjMwNHY3LjM5MmMwIC4yMTcuMTE2LjQxOC4zMDQuNTI3bDYuMzkyIDMuNjk1Yy4xODguMTEuNDIuMTEuNjA4IDBsNi4zOTItMy42OTVhLjYwOS42MDkgMCAwMC4zMDQtLjUyN1Y0LjMwNGEuNjA3LjYwNyAwIDAwLS4wNzYtLjI5MXpNMSA1LjA3OXY2LjM5MWw2IDMuNDcgNi0zLjQ3VjUuMDhMNy4yNTIgOC40MzIgNyA4LjU3OWwtLjI1Mi0uMTQ3TDEgNS4wNzl6bTExLjQ3Ni0uODUyTDcgMS4wNiAxLjUyNCA0LjIyNyA3IDcuNDJsNS40NzYtMy4xOTR6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BbmFseXplRXZlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQW5ub3RhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Bbm5vdGF0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA2LjVhNC41IDQuNSAwIDEgMSA1IDQuNDczVjE2SDd2LTUuMDI3QTQuNSA0LjUgMCAwIDEgMyA2LjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Bbm5vdGF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFub21hbHlDaGFydCA9IGZ1bmN0aW9uIEV1aUljb25Bbm9tYWx5Q2hhcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC41IDE0SDJWMS41YS41LjUgMCAwIDAtMSAwdjEzYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNDIgNWEuNS41IDAgMCAxIC41MDUuNDNMOS44NjQgMTJoLjg3M2wuOTU3LS44N2EuNS41IDAgMCAxIC42NzIgMGwxLjEgMWEuNS41IDAgMCAxLS42NzIuNzRsLS43NjQtLjY5NC0uNzY0LjY5NGEuNS41IDAgMCAxLS4zMzYuMTNoLTEuNWEuNS41IDAgMCAxLS40OTUtLjQzbC0uNDI5LTMtLjMxMiAyLjk4MmEuNS41IDAgMCAxLS44MzQuMzE4bC0uNjg5LS42MjYtLjQwNC41NTJhLjUuNSAwIDAgMS0uNDA0LjIwNGgtLjUzYS41LjUgMCAwIDEtLjQwMy0uMjA0bC0uNDA1LS41NTItLjY4OS42MjZhLjUuNSAwIDEgMS0uNjcyLS43NGwxLjEtMWEuNS41IDAgMCAxIC43NC4wNzRsLjU4My43OTZoLjAyM2wuNTgzLS43OTZhLjUuNSAwIDAgMSAuNzQtLjA3NGwuMzcuMzM2LjYzLTYuMDE4QS41LjUgMCAwIDEgOC40MiA1Wm0uMDgtMy4wMWEuNS41IDAgMSAwIDAgMS4wMDIuNS41IDAgMCAwIDAtMS4wMDJaTTguNSA0QTEuNTAzIDEuNTAzIDAgMCAxIDcgMi40OTNhMS41IDEuNSAwIDAgMSAuNDQtMS4wNjZjLjU2Ni0uNTcgMS41NTQtLjU3IDIuMTIxIDAgLjI4My4yODUuNDM5LjY2My40MzkgMS4wNjZBMS41MDIgMS41MDIgMCAwIDEgOC41IDRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Bbm9tYWx5Q2hhcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQW5vbWFseVN3aW1MYW5lID0gZnVuY3Rpb24gRXVpSWNvbkFub21hbHlTd2ltTGFuZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEgNVYxaDR2NEgxWm0zLTFWMkgydjJoMlptNyAxVjFoNHY0aC00Wm0xLTFoMlYyaC0ydjJaTTEgMTBWNmg0djRIMVptMy0xVjdIMnYyaDJabTIgNnYtNGg0djRINlptMS0xaDJ2LTJIN3YyWm00IDF2LTRoNHY0aC00Wm0xLTFoMnYtMmgtMnYyWm0tMS04aDR2NGgtNFY2Wk02IDZoNHY0SDZWNlptLTUgNWg0djRIMXYtNFpNNiAxaDR2NEg2VjFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Bbm9tYWx5U3dpbUxhbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBtVHJhY2UgPSBmdW5jdGlvbiBFdWlJY29uQXBtVHJhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDBoMTJhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlYyYTIgMiAwIDAgMSAyLTJabTAgMWExIDEgMCAwIDAtMSAxdjEyYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMVYyYTEgMSAwIDAgMC0xLTFIMlptLjUgMmgxMGEuNS41IDAgMSAxIDAgMWgtMTBhLjUuNSAwIDAgMSAwLTFabTEgM2g2YS41LjUgMCAwIDEgMCAxaC02YS41LjUgMCAwIDEgMC0xWm0yIDNoNGEuNS41IDAgMCAxIDAgMWgtNGEuNS41IDAgMCAxIDAtMVptMyAzaDVhLjUuNSAwIDEgMSAwIDFoLTVhLjUuNSAwIDEgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcG1UcmFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBBZGREYXRhID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFkZERhdGEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMiAzMEgwVjNoMTIuNTdsMyA1SDMydjIyWk0yIDI4aDI4VjEwSDE0LjQzbC0zLTVIMnYyM1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDE4aC00di00aC0ydjRoLTR2Mmg0djRoMnYtNGg0elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBZGREYXRhOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEFkdmFuY2VkU2V0dGluZ3MgPSBmdW5jdGlvbiBFdWlJY29uQXBwQWR2YW5jZWRTZXR0aW5ncyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuOTA5IDI2LjE4MmgxLjkzOXY0Ljg0OEgyLjkwOXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC44NDggMTYuNjJWMEgyLjkxdjE2LjYyYTMuODc5IDMuODc5IDAgMSAwIDEuOTQgMFptLS45NyA1LjY4M2ExLjk0IDEuOTQgMCAxIDEgMC0zLjg3OSAxLjk0IDEuOTQgMCAwIDEgMCAzLjg3OVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjU0NSAxNi40ODVoMS45MzlWMzEuMDNoLTEuOTM5elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi40ODUgNi45MjRWMGgtMS45NHY2LjkyNGEzLjg3OSAzLjg3OSAwIDEgMCAxLjk0IDBabS0uOTcgNS42ODJhMS45NCAxLjk0IDAgMSAxIDAtMy44NzkgMS45NCAxLjk0IDAgMCAxIDAgMy44OFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI2LjE4MiAyNi4xODJoMS45Mzl2NC44NDhoLTEuOTM5elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOC4xMjEgMTYuNjJWMGgtMS45NHYxNi42MmEzLjg3OSAzLjg3OSAwIDEgMCAxLjk0IDBabS0uOTcgNS42ODNhMS45NCAxLjk0IDAgMSAxIDAtMy44NzkgMS45NCAxLjk0IDAgMCAxIDAgMy44NzlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBZHZhbmNlZFNldHRpbmdzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEFnZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFnZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi45OTYgMTguNjM2IDAgMjAuNDM0djYuMTMybDYgMy42IDUtMyA1IDMgNS0zIDUgMyA2LTMuNnYtNi4xMzJsLTUtM3YtNWwtNS0zdi01bC02LTMuNi02IDMuNnYyLjgzMmwyIC4wMzNWNS41NjZsNC0yLjQgNCAyLjR2My44NjhsLTEuOTk2IDEuMTk3IDEgMS43MzNMMjEgMTEuMTY2bDQgMi40djMuODY4bC00IDIuNC0yLjI1Ny0xLjM1NC0uOTcxIDEuNzVMMjAgMjEuNTY1djMuODY4bC00IDIuNC00LTIuNHYtMS43bC0yLS4wMzN2MS43MzNsLTQgMi40LTQtMi40di0zLjg2OGwxLjk5Ni0xLjE5Ny0xLTEuNzMzWk0yMiAyNS40MzR2LTMuODY4bDQtMi40IDQgMi40djMuODY4bC00IDIuNC00LTIuNFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTExIDIyLjE2Ni02LTMuNnYtNi4xMzJsNi0zLjYgNiAzLjZ2Ni4xMzJsLTYgMy42Wm00LTQuNzMydi0zLjg2OGwtNC0yLjQtNCAyLjR2My44NjhsNCAyLjQgNC0yLjRaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFnZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEFwbSA9IGZ1bmN0aW9uIEV1aUljb25BcHBBcG0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDEwaDR2MkgxVjFoMzB2NmgtMlYzSDN2N3ptMjYgMTl2LTZoMnY4SDE4di04aDJ2Nmg5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzEgMTBIOXYxMWgxMmM1LjUyMyAwIDEwLTQuNDc3IDEwLTEwdi0xem0tMTAgOUgxMXYtN2gxNy45MzhBOC4wMDEgOC4wMDEgMCAwIDEgMjEgMTl6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFwbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBBcHBTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uQXBwQXBwU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE1LjUgMTEuOTE1IDI3IDUuMjc5IDE5LjUuOTM4YTcuMDAyIDcuMDAyIDAgMCAwLTcgMGwtOCA0LjYyQTcgNyAwIDAgMCAxIDExLjYydjkuMjM3YTcgNyAwIDAgMCAzLjUgNi4wNjFsNy41IDQuMzNWMTcuOThhNyA3IDAgMCAxIDMuNS02LjA2M1pNMTAgMjcuNzg1di05LjgwOGE5IDkgMCAwIDEgNC41LTcuNzkzbDguNTAzLTQuOTFMMTguNSAyLjY3MmE1LjAwMyA1LjAwMyAwIDAgMC01IDBsLTggNC42MTlBNSA1IDAgMCAwIDMgMTEuNjJ2OS4yMzhhNSA1IDAgMCAwIDIuNSA0LjMzbDQuNSAyLjU5OFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xOC40MDkgMTMuNTVhNy4wODkgNy4wODkgMCAwIDEgMS4wMzUgMS43MTFBNi45MyA2LjkzIDAgMCAxIDIwIDE3Ljk4djEzLjI3bDcuNS00LjMzYTcgNyAwIDAgMCAzLjUtNi4wNjF2LTkuMjM5YTYuOTkyIDYuOTkyIDAgMCAwLTEuNTg3LTQuNDIxTDE4LjQwOSAxMy41NVptMi43NzcuNzA1QTguOTMzIDguOTMzIDAgMCAxIDIyIDE3Ljk3OXY5LjgwN2w0LjUtMi41OThhNSA1IDAgMCAwIDIuNS00LjMzVjExLjYyYzAtLjU4OC0uMTA2LTEuMTYxLS4zMDMtMS43bC03LjUxMSA0LjMzNVpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQXBwU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEF1ZGl0YmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBBdWRpdGJlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNSAwaDJ2MzJoLTJ6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgMzJoMTN2LTJIMlYyaDExVjBIMHpNMTkgMHYyaDExdjI4SDE5djJoMTNWMHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEF1ZGl0YmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBDYW52YXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwQ2FudmFzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxN2gydjdIN3pNMTIgMTRoMnYxMGgtMnpNMTcgMTZoMnY4aC0yek0yMiAxNGgzdjJoLTN6TTIyIDE4aDN2MmgtM3pNMjIgMjJoM3YyaC0zelwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC43MyAyNGE2LjQ3IDYuNDcgMCAwIDEgLjQ1LTIuMTljLjMzNy0uOS41Mi0xLjg1LjU0LTIuODFhOC41NSA4LjU1IDAgMCAwLS41NC0yLjgxIDYuNDcgNi40NyAwIDAgMS0uNDUtMi4xOSA5LjIgOS4yIDAgMCAxIC42Mi0yLjQ5Yy41My0xLjU3IDEuMDgtMy4xOS4wOC00LjItMS0xLjAxLTIuNDEtLjQ0LTMuNTIuMDVhNS41OSA1LjU5IDAgMCAxLTIuMDkuNjQgNS4zIDUuMyAwIDAgMS0uNTkgMEwxNiAuMjggNi43NyA4YTUuMyA1LjMgMCAwIDEtLjU5IDAgNS41OSA1LjU5IDAgMCAxLTIuMDktLjY1QzMgNi44NyAxLjYgNi4yNS41NyA3LjMxYy0xLjAzIDEuMDYtLjQ1IDIuNjMuMDggNC4yQTkuMiA5LjIgMCAwIDEgMS4yNyAxNGE2LjQ3IDYuNDcgMCAwIDEtLjQ1IDIuMTlBOC41NSA4LjU1IDAgMCAwIC4yOCAxOWMuMDIuOTYuMjAzIDEuOTEuNTQgMi44MUE2LjQ3IDYuNDcgMCAwIDEgMS4yNyAyNGE5LjIgOS4yIDAgMCAxLS42MiAyLjQ5Yy0uNTMgMS41Ny0xLjA4IDMuMTktLjA4IDQuMi4zNTMuMzguODUyLjU5IDEuMzcuNThhNS42NyA1LjY3IDAgMCAwIDIuMTUtLjYzQTUuNTkgNS41OSAwIDAgMSA2LjE4IDMwYTcuMTMgNy4xMyAwIDAgMSAyLjI5LjQ3IDggOCAwIDAgMCAyLjYyLjUzIDcuMzcgNy4zNyAwIDAgMCAyLjQ3LS41MUE3LjE0IDcuMTQgMCAwIDEgMTYgMzBhNi4yNCA2LjI0IDAgMCAxIDIuMTQuNDUgOCA4IDAgMCAwIDIuNzcuNTUgOC4wOCA4LjA4IDAgMCAwIDIuNzctLjU1IDYuMjQgNi4yNCAwIDAgMSAyLjE0LS40NSA1LjU5IDUuNTkgMCAwIDEgMi4wOS42NWMxLjExLjQ5IDIuNDkgMS4xMSAzLjUyLjA1IDEuMDMtMS4wNi40NS0yLjYzLS4wOC00LjJhOS4yIDkuMiAwIDAgMS0uNjItMi41Wk0yMS4xNyA3aC0uMjZhOCA4IDAgMCAwLTIuNzcuNTVBNi4yNCA2LjI0IDAgMCAxIDE2IDhhNi4yNCA2LjI0IDAgMCAxLTIuMTQtLjQ1QTggOCAwIDAgMCAxMS4wOSA3aC0uMjZMMTYgMi43MiAyMS4xNyA3Wm04Ljg5IDIyLjI3YTQuNDIgNC40MiAwIDAgMS0xLjM0LS40NiA3LjA4IDcuMDggMCAwIDAtMi45LS44MiA4LjE0IDguMTQgMCAwIDAtMi43OC41NSA2LjEzIDYuMTMgMCAwIDEtMi4xMy40NSA2LjI0IDYuMjQgMCAwIDEtMi4xNC0uNDVBOCA4IDAgMCAwIDE2IDI4YTkgOSAwIDAgMC0zLjA4LjYgNS43NCA1Ljc0IDAgMCAxLTEuODMuNCA2LjM2IDYuMzYgMCAwIDEtMi0uNDNBOC43MiA4LjcyIDAgMCAwIDYuMTggMjhhNy4wOCA3LjA4IDAgMCAwLTIuOS44MiA5LjY1IDkuNjUgMCAwIDEtMS4yOC41MiA2LjA4IDYuMDggMCAwIDEgLjUyLTIuMjFjLjQwMy0xIC42NS0yLjA1NS43My0zLjEzYTguNTUgOC41NSAwIDAgMC0uNTQtMi44MUE2LjQ3IDYuNDcgMCAwIDEgMi4yNyAxOWE2LjQ3IDYuNDcgMCAwIDEgLjQ0LTIuMTljLjMzNy0uOS41Mi0xLjg1LjU0LTIuODFhMTAuNDggMTAuNDggMCAwIDAtLjcyLTMuMTMgOSA5IDAgMCAxLS41OS0yLjE2SDJjLjQ0Ny4xLjg4LjI1NSAxLjI5LjQ2YTcuMDggNy4wOCAwIDAgMCAyLjkuODJBOC4xNCA4LjE0IDAgMCAwIDkgOS40NCA2LjEzIDYuMTMgMCAwIDEgMTEuMDkgOWE2LjEzIDYuMTMgMCAwIDEgMi4xMy40NUE4LjE0IDguMTQgMCAwIDAgMTYgMTBhOC4xNCA4LjE0IDAgMCAwIDIuNzgtLjU1QTYuMTMgNi4xMyAwIDAgMSAyMC45MSA5YTYuMTMgNi4xMyAwIDAgMSAyLjA5LjQ0IDguMTQgOC4xNCAwIDAgMCAyLjc4LjU1IDcuMDggNy4wOCAwIDAgMCAyLjktLjgyQTkuNjUgOS42NSAwIDAgMSAzMCA4LjY2YTYuMDggNi4wOCAwIDAgMS0uNTIgMi4yMWMtLjQwMyAxLS42NSAyLjA1NS0uNzMgMy4xMy4wMi45Ni4yMDMgMS45MS41NCAyLjgxYTYuNDcgNi40NyAwIDAgMSAuNDQgMi4xOSA2LjQ3IDYuNDcgMCAwIDEtLjQ0IDIuMTkgOC41NSA4LjU1IDAgMCAwLS41NCAyLjgxYy4wNzggMS4wNzQuMzIgMi4xMy43MiAzLjEzYTkgOSAwIDAgMSAuNTkgMi4xNnYtLjAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQ2FudmFzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcENhc2VzID0gZnVuY3Rpb24gRXVpSWNvbkFwcENhc2VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA2aDIydjdoLTJWOEg2djE5SDRWNlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMTJIN3YtMmgzdjJabTEgMGgxMnYtMkgxMXYyWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNCAxSDB2MjZoMWwtMSAuMDAxdi4wMjZhMi4yNTYgMi4yNTYgMCAwIDAgLjAxLjE4NSA0LjMxOCA0LjMxOCAwIDAgMCAuNTYzIDEuNzkyQzEuMTk0IDMwLjA2NCAyLjM5OSAzMSA0LjUgMzFIMTd2LTJIOC40MjlhNC4zMiA0LjMyIDAgMCAwIC41Ny0xLjkyN3YtLjA2Mkw5IDI3LjAwNXYtLjAwM1M5IDI3IDggMjdoMVYxNmgyMXYzaDJ2LTVIN3YxMi45OTVsLS4wMDMuMDVhMi4zMiAyLjMyIDAgMCAxLS4yOTguOTVDNi40NDIgMjguNDM2IDUuODk4IDI5IDQuNSAyOWMtMS4zOTggMC0xLjk0Mi0uNTY0LTIuMTk5LTEuMDA0YTIuMzIgMi4zMiAwIDAgMS0uMy0xLjAwMUwyIDI2Ljk5MlYzaDIwdjNoMlYxWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMgMjF2M2gtM3YyaDN2M2gydi0zaDN2LTJoLTN2LTNoLTJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjQgMzJhNyA3IDAgMSAwIDAtMTQgNyA3IDAgMCAwIDAgMTRabTAtMmE1IDUgMCAxIDAgMC0xMCA1IDUgMCAwIDAgMCAxMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENhc2VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcENvZGUgPSBmdW5jdGlvbiBFdWlJY29uQXBwQ29kZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTExLjI3NiAyOSAuNTk0IDJIMGw3LjYyMS0xNC4yOS44MTEgMi43M0wzLjMzMyAyOWg3Ljk0M1pNMjguOTIgMzFsLTQuOTg3LTE2LjU5OEExNiAxNiAwIDAgMCA4LjY4OCAzbDEuOCA2SDguNEw2IDFoMi42MDdhMTggMTggMCAwIDEgMTcuMjQxIDEyLjgyOEwzMSAzMWgtMi4wOFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjAzNyAxNC4wMiAxNi40OTIgMjloNi44MjdsLTIuMzMzLTcuODQ5YTEwIDEwIDAgMCAwLTguOTQ5LTcuMTNaTTkuMzUgMTJoMi4wNWExMiAxMiAwIDAgMSAxMS41MDMgOC41ODFMMjYgMzFIMTVMOS4zNSAxMlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQ29kZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBDb25zb2xlID0gZnVuY3Rpb24gRXVpSWNvbkFwcENvbnNvbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSA5SDNhMyAzIDAgMCAxLTMtM1YzYTMgMyAwIDAgMSAzLTNoMjZhMyAzIDAgMCAxIDMgM3YzYTMgMyAwIDAgMS0zIDNaTTMgMmExIDEgMCAwIDAtMSAxdjNhMSAxIDAgMCAwIDEgMWgyNmExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMUgzWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgMzJIM2EzIDMgMCAwIDEtMy0zVjE0YTMgMyAwIDAgMSAzLTNoMjZhMyAzIDAgMCAxIDMgM3YxNWEzIDMgMCAwIDEtMyAzWk0zIDEzYTEgMSAwIDAgMC0xIDF2MTVhMSAxIDAgMCAwIDEgMWgyNmExIDEgMCAwIDAgMS0xVjE0YTEgMSAwIDAgMC0xLTFIM1pcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtNy4yOSAxNy43MSAzLjMgMy4yOS0zLjMgMy4yOSAxLjQyIDEuNDIgNC43LTQuNzEtNC43LTQuNzF6TTE1IDI0aDl2MmgtOXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENvbnNvbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb24gPSBmdW5jdGlvbiBFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDB2MTZoOC43bDUuMy02VjBIMHptMiAyaDEwdjdIN3Y1SDJWMnptOC40NSA5TDkgMTIuNjRWMTFoMS40NXpNMTggMTZ2MTZoOC43bDUuMy02VjE2SDE4em0yIDJoMTB2N2gtNXY1aC01VjE4em04LjQ1IDlMMjcgMjguNjRWMjdoMS40NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMThIM2MwIDYuMDc1IDQuOTI1IDExIDExIDExaDJ2LTJoLTJhOSA5IDAgMCAxLTktOXpNMTggM2gtMnYyaDJhOSA5IDAgMCAxIDkgOWgyYzAtNi4wNzUtNC45MjUtMTEtMTEtMTF6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcERhc2hib2FyZCA9IGZ1bmN0aW9uIEV1aUljb25BcHBEYXNoYm9hcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSA5SDNhMyAzIDAgMCAxLTMtM1YzYTMgMyAwIDAgMSAzLTNoMjZhMyAzIDAgMCAxIDMgM3YzYTMgMyAwIDAgMS0zIDNaTTMgMmExIDEgMCAwIDAtMSAxdjNhMSAxIDAgMCAwIDEgMWgyNmExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMUgzWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMjBIM2EzIDMgMCAwIDEtMy0zdi0zYTMgMyAwIDAgMSAzLTNoOWEzIDMgMCAwIDEgMyAzdjNhMyAzIDAgMCAxLTMgM1ptLTktN2ExIDEgMCAwIDAtMSAxdjNhMSAxIDAgMCAwIDEgMWg5YTEgMSAwIDAgMCAxLTF2LTNhMSAxIDAgMCAwLTEtMUgzWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAzMUgzYTMgMyAwIDAgMS0zLTN2LTNhMyAzIDAgMCAxIDMtM2g5YTMgMyAwIDAgMSAzIDN2M2EzIDMgMCAwIDEtMyAzWm0tOS03YTEgMSAwIDAgMC0xIDF2M2ExIDEgMCAwIDAgMSAxaDlhMSAxIDAgMCAwIDEtMXYtM2ExIDEgMCAwIDAtMS0xSDNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSAzMWgtOWEzIDMgMCAwIDEtMy0zVjE0YTMgMyAwIDAgMSAzLTNoOWEzIDMgMCAwIDEgMyAzdjE0YTMgMyAwIDAgMS0zIDNabS05LTE4YTEgMSAwIDAgMC0xIDF2MTRhMSAxIDAgMCAwIDEgMWg5YTEgMSAwIDAgMCAxLTFWMTRhMSAxIDAgMCAwLTEtMWgtOVpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRGFzaGJvYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcERldnRvb2xzID0gZnVuY3Rpb24gRXVpSWNvbkFwcERldnRvb2xzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMjhoLTJ2LTguNDlsLjYtLjI2QTkgOSAwIDAgMCAyMSAzLjUyVjExSDExVjMuNTJhOSA5IDAgMCAwIDEuNCAxNS43M2wuNi4yNlYyOGgtMnYtNy4yMUExMSAxMSAwIDAgMSAxMS42LjkyTDEzIC4zMVY5aDZWLjMxbDEuNC42MWExMSAxMSAwIDAgMSAuNiAxOS44N1YyOFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDMwaDEwdjJIMTF6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcERldnRvb2xzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcERpc2NvdmVyID0gZnVuY3Rpb24gRXVpSWNvbkFwcERpc2NvdmVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOC4zMyAyMy42NyA0Ljc5LTEwLjU1IDEwLjU1LTQuNzktNC43OSAxMC41NS0xMC41NSA0Ljc5Wm02LjMtOS0yLjI4IDUgNS0yLjI4IDIuMjgtNS01IDIuMjhaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBDNy4xNjMgMCAwIDcuMTYzIDAgMTZzNy4xNjMgMTYgMTYgMTYgMTYtNy4xNjMgMTYtMTZBMTYgMTYgMCAwIDAgMTYgMFptMSAyOS45NVYyOGgtMnYxLjk1QTE0IDE0IDAgMCAxIDIuMDUgMTdINHYtMkgyLjA1QTE0IDE0IDAgMCAxIDE1IDIuMDVWNGgyVjIuMDVBMTQgMTQgMCAwIDEgMjkuOTUgMTVIMjh2MmgxLjk1QTE0IDE0IDAgMCAxIDE3IDI5Ljk1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRGlzY292ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwRW1zID0gZnVuY3Rpb24gRXVpSWNvbkFwcEVtcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMjJoM3YySDFWMWgyM3Y1aC0yVjNIM3pcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuMjI4IDI5YzEuNDkyLTEuNjc4IDEuMzUzLTIuODU5LjAwOS01LjY1NC0uMDQ5LS4xLS4wNDktLjEtLjA5Ny0uMjAzLTEuMzY5LTIuODU1LTEuNjI2LTQuNDkxLS4zMjUtNi41ODIgMi43OTYtNC40OTggOS41MTQtMi42NDIgMTQuMTg1IDIuMzE3VjEwSDEwdjE5aDUuMjI4Wm0yLjQ3IDBIMjl2LTYuOTgzYy0zLjg4LTUuNDA2LTEwLjM3Ni03Ljc5NS0xMi40ODctNC40LS44MyAxLjMzNi0uNjY5IDIuMzcuNDMgNC42NjJsLjA5Ny4yYzEuMzUyIDIuODE0IDEuNzMxIDQuNjMuNjU5IDYuNTIxWk0zMSA4djIzSDhWOGgyM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEVtczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBGaWxlYmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBGaWxlYmVhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMThoMTZ2Mkg4ek04IDEzaDl2Mkg4ek04IDIzaDE2djJIOHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuNDEgMEg1YTMgMyAwIDAgMC0zIDN2MjZhMyAzIDAgMCAwIDMgM2gyMmEzIDMgMCAwIDAgMy0zVjguNTlMMjEuNDEgMFpNMjIgMy40MSAyNi41OSA4SDIyVjMuNDFaTTI3IDMwSDVhMSAxIDAgMCAxLTEtMVYzYTEgMSAwIDAgMSAxLTFoMTV2OGg4djE5YTEgMSAwIDAgMS0xIDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBGaWxlYmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBGbGVldCA9IGZ1bmN0aW9uIEV1aUljb25BcHBGbGVldChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDIuODIgMTYgLjAzOCAxMSAyLjgydjIuMjg5bDUtMi43ODIgNSAyLjc4MnYtMi4yOVpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgNy4yODIgMTYgNC41bC01IDIuNzgyVjkuNTdsNS0yLjc4MSA1IDIuNzgxVjcuMjgyWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDUuMDQ1IDIgNy44Mjd2MTUuNTc3bDE0IDcuNzg4IDE0LTcuNzg4VjcuODI3bC01LTIuNzgydjIuMjg5bDMgMS42Njl2MTMuMjI1bC0xMiA2LjY3Ni0xMi02LjY3NlY5LjAwM2wzLTEuNjY5VjUuMDQ1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIyIDEyLjUgMTYgOWwtNiAzLjV2N2w2IDMuNSA2LTMuNXYtN1ptLTkuOTc0IDEuMjA1TDE2IDExLjM4N2wzLjk3NCAyLjMxOHY0LjU5TDE2IDIwLjYxM2wtMy45NzQtMi4zMTh2LTQuNTlaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBGbGVldDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBHaXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwR2lzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMjkuMDE0IDIzLjg5IDIuMjk2IDEuMTQ1TDE2IDMyLjEwMS41MyAyNC45NjFsMi40OS0xLjA1NiAyLjQ1MyAxLjEzMi0uMDAzLjAwMkwxNiAyOS44OTlsMTAuNjktNC45MzQtLjAwMy0uMDAxIDIuMzI3LTEuMDc0Wm0tNC45NzItNy40ODIgNy4yNjggMy42MjdMMTYgMjcuMTAxLjUzIDE5Ljk2MWw3LjY2OC0zLjI1MmMuMzkyLjQ4Ni44MzggMS4wMiAxLjM0IDEuNjA0TDUuNDcgMjAuMDM5IDE2IDI0Ljg5OWwxMC42OS00LjkzNC0zLjk1NC0xLjk3M2MuNDkzLS41OC45MjgtMS4xMDcgMS4zMDYtMS41ODRaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDlhMiAyIDAgMSAwLTQgMCAyIDIgMCAwIDAgNCAwWm0yIDBhNCA0IDAgMSAxLTggMCA0IDQgMCAwIDEgOCAwWm0tMy4yNjggMTIuNjgxLS43MzIuNzg3LS43MzItLjc4N2MtMy41NTctMy44MjQtNS44MTctNi40NjItNi44MS03Ljk2QTguNzQ2IDguNzQ2IDAgMCAxIDcgOC44NzVDNyAzLjk3IDExLjAzMyAwIDE2IDBzOSAzLjk3IDkgOC44NzVhOC43NDYgOC43NDYgMCAwIDEtMS40NTkgNC44NDZjLS45OTIgMS40OTgtMy4yNTIgNC4xMzYtNi44MDkgNy45NlptNS4xNDItOS4wNjRBNi43NDcgNi43NDcgMCAwIDAgMjMgOC44NzVDMjMgNS4wODEgMTkuODcgMiAxNiAyUzkgNS4wODEgOSA4Ljg3NWMwIDEuMzQ5LjM5NCAyLjYzNiAxLjEyNiAzLjc0Mi44NDYgMS4yNzcgMi44MTIgMy41OTMgNS44NzQgNi45MTIgMy4wNjItMy4zMiA1LjAyOC01LjYzNSA1Ljg3NC02LjkxMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEdpczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBHcmFwaCA9IGZ1bmN0aW9uIEV1aUljb25BcHBHcmFwaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI0IDIwYTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOHptMC02YTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNHptLTguMi01LjYyQTQgNCAwIDEgMSAxOCAxLjA2YTQgNCAwIDAgMS0yLjIgNy4zMnptMC02YTIgMiAwIDEgMCAuMDEgMGgtLjAxem0uMDEgMjkuMjRhNCA0IDAgMSAxLS4wODMtOCA0IDQgMCAwIDEgLjA4MyA4em0wLTZhMiAyIDAgMSAwIC4zOSAwIDIgMiAwIDAgMC0uNCAwaC4wMXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggMTd2LTJoLTYuMTRhNCA0IDAgMCAwLS44Ni0xLjY0bDIuMzEtMy40NC0xLjY4LTEuMTItMi4zMSAzLjQ0QTQgNCAwIDAgMCA4IDEyYTQgNCAwIDEgMCAwIDggNCA0IDAgMCAwIDEuMzItLjI0bDIuMzEgMy40NCAxLjY2LTEuMTJMMTEgMTguNjRhNCA0IDAgMCAwIC44Ni0xLjY0SDE4Wk02IDE2YTIgMiAwIDEgMSA0IDAgMiAyIDAgMCAxLTQgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEdyYXBoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEdyb2sgPSBmdW5jdGlvbiBFdWlJY29uQXBwR3JvayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNzI3IDIuOTFWLjk3Yy0xLjM1NyAwLTQuMTggMC01LjgxOCAxLjk0LS45NyAxLjE4Mi0xLjMyOCAyLjkwOC0uOTcgNC45ODMuNTYzIDMuMzA3Ljk3IDYuMzMyLjMwMSA3LjE1Ny0uMy4zMS0uOTcuNDY1LTIuMjQuNDY1djEuOTRjMS4yNyAwIDEuOTQuMTU1IDIuMjUuNDk0LjY5OC44MjQuMjYyIDMuODc5LS4zIDcuMTU2LS4zNSAyLjEyNC0uMDEgMy44MDIuOTYgNC45NTZDNS41MjcgMzIgOC4zNSAzMiA5LjcyNiAzMnYtMS45NGMtMS4xNDQgMC0zLjI4NyAwLTQuMzE1LTEuMjIxYTQuMTEyIDQuMTEyIDAgMCAxLS41MzMtMy40MTRjLjg0My01LjA0Mi45Ny03LjM3LS4xMzYtOC43MjctLjA2OC0uMDc3LS4xNDUtLjEzNi0uMjEzLS4yMDMtLjA2OC0uMDY4LjE0NS0uMTI3LjIxMy0uMjA0IDEuMTQ0LTEuMzY3Ljk3LTMuNjk1LjEzNi04LjcyN2E0LjExMiA0LjExMiAwIDAgMSAuNTQzLTMuNDE0QzYuNDQgMi45MSA4LjU4MyAyLjkxIDkuNzI3IDIuOTF6TTMyLjAzIDE3LjQ1NHYtMS45NGMtMS4yNyAwLTEuOTQtLjE1NS0yLjI1LS40OTQtLjY5OC0uODI1LS4yNjEtMy44OC4zMDEtNy4xNTcuMzUtMi4xMjMgMC0zLjgwMS0uOTctNC45ODRDMjcuNDkzLjk0IDI0LjY3Mi45NCAyMy4yOTQuOTR2MS45N2MxLjE0NSAwIDMuMjg4IDAgNC4zMTUgMS4yMmE0LjExMiA0LjExMiAwIDAgMSAuNTQ0IDMuNDE0Yy0uODQ0IDUuMDQzLS45NyA3LjM3LjEzNSA4LjcyOC4wNjguMDc3LjE0Ni4xMzUuMjE0LjIwMy4wNjcuMDY4LS4xNDYuMTI2LS4yMTQuMjA0LTEuMTQ0IDEuMzY3LS45NyAzLjY5NC0uMTM1IDguNzI3LjMyOSAxLjE2Mi4xMyAyLjQxLS41NDQgMy40MTMtMS4wMTggMS4yNDItMy4xNiAxLjI0Mi00LjMwNSAxLjI0MlYzMmMxLjM1OCAwIDQuMTggMCA1LjgxOC0xLjk0Ljk3LTEuMTgyIDEuMzI5LTIuOTA4Ljk3LTQuOTg0LS41NjMtMy4zMDYtLjk3LTYuMzMyLS4zLTcuMTU2LjMtLjMxLjk2OS0uNDY1IDIuMjQtLjQ2NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI2LjIxMiAxNS41MTVoLTIuMDA3YTcuNzU4IDcuNzU4IDAgMCAwLTYuNzItNi43MlY2Ljc4OGgtMS45NHYyLjAwN2E3Ljc1OCA3Ljc1OCAwIDAgMC02LjcyIDYuNzJINi44MTh2MS45NGgyLjAwN2E3Ljc1OCA3Ljc1OCAwIDAgMCA2LjcyIDYuNzJ2Mi4wMDdoMS45NHYtMi4wMDdhNy43NTggNy43NTggMCAwIDAgNi43Mi02LjcyaDIuMDA3di0xLjk0Wm0tOC43MjcgNi43di0xLjg1MWgtMS45NHYxLjg1MmE1LjgxOCA1LjgxOCAwIDAgMS00Ljc2LTQuNzYxaDEuODUxdi0xLjk0aC0xLjg1MmE1LjgxOCA1LjgxOCAwIDAgMSA0Ljc2MS00Ljc2MXYxLjg1MmgxLjk0di0xLjg1MmE1LjgxOCA1LjgxOCAwIDAgMSA0Ljc2MSA0Ljc2MWgtMS44NTJ2MS45NGgxLjg1MmE1LjgxOCA1LjgxOCAwIDAgMS00Ljc2MSA0Ljc2WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBHcm9rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEhlYXJ0YmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBIZWFydGJlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjE0IDE1LjM5YTguMDU4IDguMDU4IDAgMCAxLTIuMi00LjA0M0E2Ljc4OCA2Ljc4OCAwIDAgMSA0LjE5OCA1LjQ3YTYuNzMgNi43MyAwIDAgMSA4LjcyNy0uMjEzbDEuMjYtMS40NjRhOC42NSA4LjY1IDAgMCAwLTExLjI3Ny4yMzJBOC43MjcgOC43MjcgMCAwIDAgLjA2OCAxMS42YTEwLjE3MiAxMC4xNzIgMCAwIDAgMi43OTMgNS4yNzVsMS4yOC0xLjQ4NFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuNTE1IDMxLjI3NCA0LjU0OCAxOC40NTQgMTUuODU1IDQuNzYzYTguNjcgOC42NyAwIDAgMSAxMi4yNjYtLjc0NiA4LjcyNyA4LjcyNyAwIDAgMSAyLjkxIDcuMjA1Yy0uMjQzIDIuNjk1LTIuMDM3IDQuNzMyLTMuNDgyIDYuMzdMMTUuNTE1IDMxLjI3NVptLTguNDI3LTEyLjgyIDguNDI3IDkuODYyIDEwLjU1LTExLjk5NWMxLjMyLTEuNTAzIDIuODIyLTMuMjEgMy4wMDctNS4yNjVhNi43ODggNi43ODggMCAwIDAtMi4yNC01LjU4NiA2LjczIDYuNzMgMCAwIDAtOS41MDQuNTYzTDcuMDg4IDE4LjQ1NVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEhlYXJ0YmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBJbmRleE1hbmFnZW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgMTh2LTJoLTJ2MkgzdjZoMnYtNGgxMHY0aDJ2LTRoMTB2NGgydi02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAzMmEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZ6bTAtNGExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJ6bTEyIDRhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2em0wLTRhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yem0xMiA0YTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNnptMC00YTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMnpNMjMgOFY2aC0yLjFhNSA1IDAgMCAwLS43My0xLjc1bDEuNDktMS40OS0xLjQyLTEuNDItMS40OSAxLjQ5QTUgNSAwIDAgMCAxNyAyLjFWMGgtMnYyLjFhNSA1IDAgMCAwLTEuNzUuNzNsLTEuNDktMS40OS0xLjQyIDEuNDIgMS40OSAxLjQ5QTUgNSAwIDAgMCAxMS4xIDZIOXYyaDIuMWE1IDUgMCAwIDAgLjczIDEuNzVsLTEuNDkgMS40OSAxLjQxIDEuNDEgMS40OS0xLjQ5YTUgNSAwIDAgMCAxLjc2Ljc0VjE0aDJ2LTIuMWE1IDUgMCAwIDAgMS43NS0uNzNsMS40OSAxLjQ5IDEuNDEtMS40MS0xLjQ4LTEuNUE1IDUgMCAwIDAgMjAuOSA4SDIzem0tNyAyYTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgOGExIDEgMCAwIDEtMS0xIDEuMzkgMS4zOSAwIDAgMSAwLS4yLjY1LjY1IDAgMCAxIC4wNi0uMTguNzQuNzQgMCAwIDEgLjA5LS4xOCAxLjYxIDEuNjEgMCAwIDEgLjEyLS4xNS45My45MyAwIDAgMSAuMzMtLjIxIDEgMSAwIDAgMSAxLjA5LjIxbC4xMi4xNWEuNzguNzggMCAwIDEgLjA5LjE4LjYyLjYyIDAgMCAxIC4xLjE4IDEuMjcgMS4yNyAwIDAgMSAwIC4yIDEgMSAwIDAgMS0xIDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBJbmRleE1hbmFnZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwSW5kZXhQYXR0ZXJuID0gZnVuY3Rpb24gRXVpSWNvbkFwcEluZGV4UGF0dGVybihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwIDE0aC04YTMgMyAwIDAgMS0zLTNWM2EzIDMgMCAwIDEgMy0zaDhhMyAzIDAgMCAxIDMgM3Y4YTMgMyAwIDAgMS0zIDNaTTEyIDJhMSAxIDAgMCAwLTEgMXY4YTEgMSAwIDAgMCAxIDFoOGExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMWgtOFpNMTcgMTh2LTJoLTJ2MkgzdjZoMnYtNGgxMHY0aDJ2LTRoMTB2NGgydi02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAzMmEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZ6bTAtNGExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJ6bTEyIDRhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2em0wLTRhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yem0xMiA0YTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNnptMC00YTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMnpNMTMgNGg2djJoLTZ6TTEzIDhoNnYyaC02elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBJbmRleFBhdHRlcm47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwSW5kZXhSb2xsdXAgPSBmdW5jdGlvbiBFdWlJY29uQXBwSW5kZXhSb2xsdXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMiAyNnYtMmgtMi4xYTUgNSAwIDAgMC0uNzMtMS43NWwxLjQ5LTEuNDktMS40MS0xLjQxLTEuNDkgMS40OUE1IDUgMCAwIDAgMjYgMjAuMVYxOGgtMnYyLjFhNSA1IDAgMCAwLTEuNzUuNzNsLTEuNDktMS40OS0xLjQxIDEuNDEgMS40OSAxLjQ5QTUgNSAwIDAgMCAyMC4xIDI0SDE4djJoMi4xYTUgNSAwIDAgMCAuNzMgMS43NWwtMS40OSAxLjQ5IDEuNDEgMS40MSAxLjQ5LTEuNDlhNSA1IDAgMCAwIDEuNzYuNzRWMzJoMnYtMi4xYTUgNSAwIDAgMCAxLjc1LS43M2wxLjQ5IDEuNDkgMS40MS0xLjQxLTEuNDktMS40OUE1IDUgMCAwIDAgMjkuOSAyNkgzMlptLTcgMmEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNS43MSAyNC4yOWExIDEgMCAwIDAtMS4wOS0uMjEgMS4xNSAxLjE1IDAgMCAwLS4zMy4yMS45My45MyAwIDAgMC0uMjEuMzMgMSAxIDAgMCAwIDEuMyAxLjMgMS4xNSAxLjE1IDAgMCAwIC4zMy0uMjEgMSAxIDAgMCAwIC4yMS0xLjA5Ljk0Ljk0IDAgMCAwLS4yMS0uMzNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDZoMTZ2Mkg1ek01IDEyaDE2djJINXpNNSAxOGgxMHYySDV6TTUgMjRoOHYySDV6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMySDNhMyAzIDAgMCAxLTMtM1YzYTMgMyAwIDAgMSAzLTNoMjBhMyAzIDAgMCAxIDMgM3YxM2gtMlYzYTEgMSAwIDAgMC0xLTFIM2ExIDEgMCAwIDAtMSAxdjI2YTEgMSAwIDAgMCAxIDFoMTN2MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEluZGV4Um9sbHVwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcExlbnMgPSBmdW5jdGlvbiBFdWlJY29uQXBwTGVucyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTIzLjc5MyAxNC4yOTMgMS40MTQgMS40MTQtNi40MDggNi40MDktMy43NS0zLjI1LTQuMzQyIDQuMzQxLTEuNDE0LTEuNDE0IDUuNjU4LTUuNjU5IDMuNzUgMy4yNSA1LjA5Mi01LjA5MVpNMTIgMTF2NWwtMiAydi03aDJabTEwLTZ2OGwtMiAyVjVoMlptLTUgM3Y3bC0yLTJWOGgyWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNyAwYzguMjg0IDAgMTUgNi43MTYgMTUgMTUgMCA4LjI4NC02LjcxNiAxNS0xNSAxNS0zLjc4MiAwLTcuMjM4LTEuNC05Ljg3Ni0zLjcxbC01LjQxNyA1LjQxNy0xLjQxNC0xLjQxNCA1LjQxNy01LjQxN0ExNC45NDMgMTQuOTQzIDAgMCAxIDIgMTVjMC0xLjA1LjEwOC0yLjA3NC4zMTMtMy4wNjJsMS45MDYuNjcyQzQuMDc1IDEzLjM4NSA0IDE0LjE4NCA0IDE1YzAgNy4xOCA1LjgyIDEzIDEzIDEzczEzLTUuODIgMTMtMTNTMjQuMTggMiAxNyAyYy0xLjAwMiAwLTEuOTc4LjExMy0yLjkxNS4zMjhsLS43NS0xLjg3N0ExNS4wMzEgMTUuMDMxIDAgMCAxIDE3IDBaTTkuNjIxIDEuOTM3bC43NSAxLjg3N2ExMy4wNjIgMTMuMDYyIDAgMCAwLTQuODIgNS4wMjRsLTEuOTA3LS42NzNhMTUuMDY4IDE1LjA2OCAwIDAgMSA1Ljk3Ny02LjIyOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcExlbnM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwTG9ncyA9IGZ1bmN0aW9uIEV1aUljb25BcHBMb2dzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSA4YzMuOTgzIDAgNy43MzIgMS4wMTMgMTEuMDAxIDIuNzk3djIuMzEyQTIwLjg4NyAyMC44ODcgMCAwIDAgMiAxMC4wMjN2MTEuMDI1YzQuODUuNDYyIDkuMjcgNC4xODMgOS45NTUgOC42OTFsLjAzNS4yNjFIMTJ2MmgtMS45MzhsLS4wMTgtMS4yMzZjLS4xMTYtNC4wMTUtNC4zMzYtNy42MzEtOC43OTMtNy43NkwwIDIyLjk4NlY4aDF6bTEzLThoMWM5LjI4IDAgMTYuODI1IDcuNDM3IDE2Ljk5NyAxNi42NzdMMzIgMTd2MTVoLTJWMTdjMC03Ljg0LTYuMDE0LTE0LjI3NC0xMy42OC0xNC45NDNMMTYgMi4wMzN2Ny42ODFsLTItMS4xNDNWMGgxLTF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNi45OTcgMzAuNjM2IDI3LjAwOSAzMkgxNFYxMS4zMDVsMS40ODMuODJjNi45OTQgMy44NjEgMTEuMzgyIDEwLjczNSAxMS41MTQgMTguNTF6bS0yLjA0OC0xLjA0QzI0LjUwNSAyMy41NTYgMjEuMjA1IDE4LjIgMTYgMTQuNzcxVjMwaDguOTc0bC0uMDI1LS40MDR6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcExvZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwTWFuYWdlbWVudCA9IGZ1bmN0aW9uIEV1aUljb25BcHBNYW5hZ2VtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjFhNSA1IDAgMSAxIDAtMTAgNSA1IDAgMCAxIDAgMTBabTAtOGEzIDMgMCAxIDAgMCA2IDMgMyAwIDAgMCAwLTZaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwIDMyaC04di00LjA2YTEgMSAwIDAgMC0xLjYxLS42N2wtMi44OCAyLjg3LTUuNjUtNS42NSAyLjg3LTIuODdhLjkyLjkyIDAgMCAwIC4yLTEgLjkzLjkzIDAgMCAwLS44Ni0uNkgwVjEyaDQuMDZhLjkyLjkyIDAgMCAwIC44NS0uNTguOTQuOTQgMCAwIDAtLjE5LTFMMS44NiA3LjUxbDUuNjUtNS42NSAyLjg3IDIuODdBMSAxIDAgMCAwIDEyIDQuMDZWMGg4djQuMDZhMSAxIDAgMCAwIDEuNjEuNjdsMi44Ny0yLjg3IDUuNjYgNS42Ni0yLjg3IDIuODdhLjkyLjkyIDAgMCAwLS4yIDEgLjkzLjkzIDAgMCAwIC44Ni42SDMydjhoLTQuMDZhLjkyLjkyIDAgMCAwLS44NS41OC45NC45NCAwIDAgMCAuMTkgMWwyLjg3IDIuODctNS42NiA1LjY2LTIuODctMi44N2ExIDEgMCAwIDAtMS42MS42N0wyMCAzMlptLTYtMmg0di0yLjA2YTMgMyAwIDAgMSA1LTIuMDhsMS40NiAxLjQ2IDIuODMtMi44M0wyNS44NiAyM2EzIDMgMCAwIDEgMi4wOC01SDMwdi00aC0yLjA2YTMgMyAwIDAgMS0yLjA4LTVsMS40Ni0xLjQ2LTIuODMtMi44NUwyMyA2LjE0YTMgMyAwIDAgMS01LTIuMDhWMmgtNHYyLjA2YTMgMyAwIDAgMS01IDIuMDhMNy41MSA0LjY5IDQuNjkgNy41MSA2LjE0IDlhMyAzIDAgMCAxLTIuMDggNUgydjRoMi4wNmEzIDMgMCAwIDEgMi4wOCA1bC0xLjQ1IDEuNDkgMi44MyAyLjgzTDkgMjUuODZhMyAzIDAgMCAxIDUgMi4wOFYzMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1hbmFnZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwTWV0cmljYmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBNZXRyaWNiZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMzJDNy4xNjMgMzIgMCAyNC44MzcgMCAxNlM3LjE2MyAwIDE2IDBzMTYgNy4xNjMgMTYgMTZhMTYgMTYgMCAwIDEtMTYgMTZabTAtMzBDOC4yNjggMiAyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTQgMTQtNi4yNjggMTQtMTRBMTQgMTQgMCAwIDAgMTYgMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4IDE2aC0yYzAtNS41MjMtNC40NzctMTAtMTAtMTBTNiAxMC40NzcgNiAxNkg0QzQgOS4zNzMgOS4zNzMgNCAxNiA0czEyIDUuMzczIDEyIDEyWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS43MSAxMS43MSAyMC4zIDEwLjMgMTggMTIuNTdhNCA0IDAgMCAwLTItLjU3IDQgNCAwIDEgMCA0IDQgNCA0IDAgMCAwLS41Ny0ybDIuMjgtMi4yOVpNMTYgMThhMiAyIDAgMSAxIDAtNCAyIDIgMCAwIDEgMCA0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTWV0cmljYmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBNZXRyaWNzID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1ldHJpY3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMCAxOS4wOTJ2MTIuODhIMnYtNS4zODZsNi43NDctNi43NDcuNzA4LjcwOGMuMjM2LjIzNi40OC40NjMuNzMzLjY4TDQgMjcuNDE0djIuNTU4aDI0di04LjkxYy4xODYtLjE2Ni4zNjktLjMzOS41NDYtLjUxNkwzMCAxOS4wOTJ6bS0yMC44NS0zLjE5QTEwLjk1NSAxMC45NTUgMCAwIDEgOCAxMUM4IDQuOTI1IDEyLjkyNSAwIDE5IDBzMTEgNC45MjUgMTEgMTFjMCAxLjc2LS40MTQgMy40MjUtMS4xNSA0LjlsLTEuNTEtMS41MUE4Ljk3MyA4Ljk3MyAwIDAgMCAyOCAxMWE5IDkgMCAxIDAtMTcuMzQgMy4zOTFsLTEuNTEgMS41MXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5IDIwYTguOTYgOC45NiAwIDAgMCA1LjYxOC0xLjk2OGwtNC4yMDItNC4yMDRhMiAyIDAgMCAwLTIuODI4IDBsLTQuMjA1IDQuMjA1QTguOTYgOC45NiAwIDAgMCAxOSAyMHptLTIuODI2LTcuNTg2YTQgNCAwIDAgMSA1LjY1NiAwbDUuNjU2IDUuNjU3LS43MDcuNzA3QTEwLjk2NyAxMC45NjcgMCAwIDEgMTkgMjJhMTAuOTY3IDEwLjk2NyAwIDAgMS03Ljc3OC0zLjIyMWwtLjcwNy0uNzA3IDUuNjU5LTUuNjU4elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNZXRyaWNzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcE1sID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1sKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMTh2LjU2YTEgMSAwIDAgMS0uNjguOTVMMyAyMS42MVYxMGExIDEgMCAwIDEgLjQtLjhsMy4yLTIuNC0xLjItMS42LTMuMiAyLjRBMyAzIDAgMCAwIDEgMTB2MTJhMyAzIDAgMCAwIDEuMiAyLjRsMy4yIDIuNCAxLjItMS42LTIuNDctMS44NSA1LjgyLTEuOTVBMyAzIDAgMCAwIDEyIDE4LjU2VjE4aC0yek0yOS44IDcuNmwtMy4yLTIuNC0xLjIgMS42IDMuMiAyLjRhMSAxIDAgMCAxIC40Ljh2MTEuNjFsLTYuMzItMi4xMWExIDEgMCAwIDEtLjY4LS45NVYxOGgtMnYuNTZhMyAzIDAgMCAwIDIuMDUgMi44NWw1LjgyIDEuOTQtMi40NyAxLjg1IDEuMiAxLjYgMy4yLTIuNEEzIDMgMCAwIDAgMzEgMjJWMTBhMyAzIDAgMCAwLTEuMi0yLjR6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDZBMyAzIDAgMCAxIDguODguODhhMy4wNyAzLjA3IDAgMCAxIDQuMjQgMEEzIDMgMCAwIDEgMTEgNnptMC00YTEgMSAwIDEgMC0uMDEyIDJBMSAxIDAgMCAwIDExIDJ6bTAgMzBhMyAzIDAgMCAxLTIuMTItNS4xMiAzLjA3IDMuMDcgMCAwIDEgNC4yNCAwQTMgMyAwIDAgMSAxMSAzMnptMC00YTEgMSAwIDEgMC0uMDEyIDJBMSAxIDAgMCAwIDExIDI4em0wLTEyYTMgMyAwIDAgMS0yLjEyLTUuMTIgMy4wNyAzLjA3IDAgMCAxIDQuMjQgMEEzIDMgMCAwIDEgMTEgMTZ6bTAtNGExIDEgMCAxIDAtLjAxMiAyQTEgMSAwIDAgMCAxMSAxMnptMTAtNkEzIDMgMCAwIDEgMTguODguODhhMy4wNyAzLjA3IDAgMCAxIDQuMjQgMEEzIDMgMCAwIDEgMjEgNnptMC00YTEgMSAwIDEgMC0uMDEyIDJBMSAxIDAgMCAwIDIxIDJ6bTAgMzBhMyAzIDAgMCAxLTIuMTItNS4xMiAzLjA3IDMuMDcgMCAwIDEgNC4yNCAwQTMgMyAwIDAgMSAyMSAzMnptMC00YTEgMSAwIDEgMC0uMDEyIDJBMSAxIDAgMCAwIDIxIDI4em0wLTEyYTMgMyAwIDAgMS0yLjEyLTUuMTIgMy4wNyAzLjA3IDAgMCAxIDQuMjQgMEEzIDMgMCAwIDEgMjEgMTZ6bTAtNGExIDEgMCAxIDAtLjAxMiAyQTEgMSAwIDAgMCAyMSAxMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1sOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcE1vbml0b3JpbmcgPSBmdW5jdGlvbiBFdWlJY29uQXBwTW9uaXRvcmluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuODEgMTUuMTlBOC45NCA4Ljk0IDAgMCAxIDE1LjYyIDMuODZsLjM4LjQyLjM4LS40MmE4Ljk0IDguOTQgMCAwIDEgMTQuMjYgMTAuNjhsLTEuNy0xLjA3YTYuOTQgNi45NCAwIDAgMC0xMS4wNy04LjI4TDE2IDcuMjlsLTEuODctMi4xQTYuOTQgNi45NCAwIDAgMCAzLjQxIDE0bC0xLjYgMS4xOVpNMTYgMzEuMThsLTcuNzQtOC41MSAxLjQ4LTEuMzRMMTYgMjguMjFsNi4yNi02Ljg4IDEuNDggMS4zNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTE2LjE2IDIzLjI5LTQuMS03LjE3TDEwLjYyIDE5SDB2LTJoOS4zOGwyLjU2LTUuMTIgMy45IDYuODMgNC4xMy0xMC4zMkwyMy42NiAxN0gzMnYyaC05LjY2bC0yLjMxLTUuMzl6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1vbml0b3Jpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwTm90ZWJvb2sgPSBmdW5jdGlvbiBFdWlJY29uQXBwTm90ZWJvb2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNSAyaC01VjBoLTJ2MmgtM1YwaC0ydjJoLTNWMEg4djJIM3YyNmgyMlYyWm0tMiAyNEg1VjRoM3YyaDJWNGgzdjJoMlY0aDN2MmgyVjRoM3YyMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI3IDd2MjNIOHYyaDIxVjd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDEyaDEydjJIOHpNOCAxN2gxMnYySDh6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE5vdGVib29rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFBhY2tldGJlYXQgPSBmdW5jdGlvbiBFdWlJY29uQXBwUGFja2V0YmVhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDIwYTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOFptMC02YTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0YTQgNCAwIDEgMC00IDQgNCA0IDAgMCAwIDItLjU3bDUuMjcgNS4yNyAxLjQxLTEuNDFMNy40MyA2QTQgNCAwIDAgMCA4IDR6TTQgNmEyIDIgMCAxIDEgMC00IDIgMiAwIDAgMSAwIDR6bTE2LjcxIDYuNzFMMjYgNy40M0E0IDQgMCAwIDAgMjggOGE0IDQgMCAxIDAtNC00IDQgNCAwIDAgMCAuNTcgMmwtNS4yNyA1LjI3IDEuNDEgMS40NHpNMjggMmEyIDIgMCAxIDEgMCA0IDIgMiAwIDAgMSAwLTR6TTExLjI5IDE5LjI5IDYgMjQuNTdBNCA0IDAgMCAwIDQgMjRhNCA0IDAgMSAwIDQgNCA0IDQgMCAwIDAtLjU3LTJsNS4yNy01LjI3LTEuNDEtMS40NHpNNCAzMGEyIDIgMCAxIDEgMC00IDIgMiAwIDAgMSAwIDR6bTI0LTZhNCA0IDAgMCAwLTIgLjU3bC01LjI3LTUuMjctMS40MSAxLjQxTDI0LjU3IDI2YTQgNCAwIDAgMC0uNTcgMiA0IDQgMCAxIDAgNC00em0wIDZhMiAyIDAgMSAxIDAtNCAyIDIgMCAwIDEgMCA0elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUGFja2V0YmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBQaXBlbGluZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBQaXBlbGluZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5IDEyYTMgMyAwIDAgMC0zIDNoLTRhMyAzIDAgMCAwLTMtM2gtNmEzIDMgMCAwIDAtMyAzSDZhMyAzIDAgMCAwLTMtM0gwdjE0aDNhMyAzIDAgMCAwIDMtM2g0YTMgMyAwIDAgMCAzIDNoNmEzIDMgMCAwIDAgMy0zaDRhMyAzIDAgMCAwIDMgM2gzVjEyaC0zWk0zIDI0SDJWMTRoMWExIDEgMCAwIDEgMSAxdjhhMSAxIDAgMCAxLTEgMVptMTctM3YyYTEgMSAwIDAgMS0xIDFoLTZhMSAxIDAgMCAxLTEtMXYtMkg2di00aDZ2LTJhMSAxIDAgMCAxIDEtMWg2YTEgMSAwIDAgMSAxIDF2Mmg2djRoLTZabTEwIDNoLTFhMSAxIDAgMCAxLTEtMXYtOGExIDEgMCAwIDEgMS0xaDF2MTBaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiA2SDEwdjJoNXYyaDJWOGg1elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBQaXBlbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBSZWNlbnRseVZpZXdlZCA9IGZ1bmN0aW9uIEV1aUljb25BcHBSZWNlbnRseVZpZXdlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMyQzcuMTYzIDMyIDAgMjQuODM3IDAgMTZTNy4xNjMgMCAxNiAwczE2IDcuMTYzIDE2IDE2YTE2IDE2IDAgMCAxLTE2IDE2Wm0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMCAwIDE2IDJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNSA0aDJ2OS4xN0EzLjAwOSAzLjAwOSAwIDAgMSAxOC44MyAxNUgyNnYyaC03LjE3QTMuMDAxIDMuMDAxIDAgMSAxIDE1IDEzLjE3VjRabTEgMTNhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBSZWNlbnRseVZpZXdlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBSZXBvcnRpbmcgPSBmdW5jdGlvbiBFdWlJY29uQXBwUmVwb3J0aW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjUgNWgtLjE3djJIMjVhMSAxIDAgMCAxIDEgMXYyMGExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMVY4YTEgMSAwIDAgMSAxLTFoLjE3VjVIN2EzIDMgMCAwIDAtMyAzdjIwYTMgMyAwIDAgMCAzIDNoMThhMyAzIDAgMCAwIDMtM1Y4YTMgMyAwIDAgMC0zLTNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMyAzaC0zVjBoLTh2M0g5djZoMTRWM1ptLTIgNEgxMVY1aDNWMmg0djNoM3YyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMTNoMTJ2MkgxMHpNMTAgMThoMTJ2MkgxMHpNMTAgMjNoMTJ2MkgxMHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUmVwb3J0aW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFNhdmVkT2JqZWN0cyA9IGZ1bmN0aW9uIEV1aUljb25BcHBTYXZlZE9iamVjdHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC4zOCA3LjAwMSAxNyA5LjYxOVYwaC0ydjkuNjE5bC0zLjM3LTIuNjE4LTEuMjUgMS41MTNMMTYgMTIuODc4bDUuNjMtNC4zNjR6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTIxLjA2LjE2NS0xLjExIDEuNjEgOS4yNSA1Ljk4M0wxNiAxNi4yOSAyLjggNy43NThsOS4yNS01Ljk4My0xLjEtMS42MUwwIDcuMjM0djEzLjY1M2wxNiAxMC4zMzcgMTYtMTAuMzM3VjcuMjM0TDIxLjA2LjE2NFpNMiA5LjU3bDEzIDguNDA3djEwLjI3OUwyIDE5Ljg0VjkuNTdabTE1IDE4LjY3NlYxNy45NzhsMTMtOC40MDdWMTkuODVsLTEzIDguMzk3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU2F2ZWRPYmplY3RzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuNjMgOGg3LjM4djJoLTcuMzh6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgOGgzLjE5djJIN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTZoNy4zOHYySDd6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjgxIDE2SDE5djJoLTMuMTl6TTcgMTJoOXYySDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAwQzUuODIgMCAwIDUuODIgMCAxM3M1LjgyIDEzIDEzIDEzIDEzLTUuODIgMTMtMTNBMTMgMTMgMCAwIDAgMTMgMFptMCAyNEM2LjkyNSAyNCAyIDE5LjA3NSAyIDEzUzYuOTI1IDIgMTMgMnMxMSA0LjkyNSAxMSAxMS00LjkyNSAxMS0xMSAxMVpNMjIuNTgxIDIzLjk5M2wxLjQxNC0xLjQxNCA3LjcwOCA3LjcwOC0xLjQxNCAxLjQxNHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFNlY3VyaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNlY3VyaXR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTQgMzItLjM2LS4xNEEyMS4wNyAyMS4wNyAwIDAgMSAwIDEyLjA3VjUuNDRMMTQgLjA2bDE0IDUuMzh2Ni42M2EyMS4wNyAyMS4wNyAwIDAgMS0xMy42NCAxOS43OEwxNCAzMlpNMiA2LjgydjUuMjVhMTkuMDggMTkuMDggMCAwIDAgMTIgMTcuNzcgMTkuMDggMTkuMDggMCAwIDAgMTItMTcuNzdWNi44MkwxNCAyLjIgMiA2LjgyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxNy44M2gyVjIzSDl6TTExIDEwLjE4VjdIOXYzLjE4YTMgMyAwIDEgMCAyIDBaTTEwIDE0YTEgMSAwIDEgMSAwLTIgMSAxIDAgMCAxIDAgMlpNMTcgN2gydjUuMTdoLTJ6TTIxIDE3YTMgMyAwIDEgMC00IDIuODJWMjNoMnYtMy4xOEEzIDMgMCAwIDAgMjEgMTdabS0zIDFhMSAxIDAgMSAxIDAtMiAxIDEgMCAwIDEgMCAyWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBTZWN1cml0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTBoNHYySDV2Ny45MjhjMCAxLjI5OS44MDggMi43OTUgMi44OCA0LjQ4IDEuODMgMS40ODkgNC41MjQgMy4wMiA4LjEyIDQuNTg0VjI2aDJ2NS45OTJsLTEuMzgtLjU2N2MtNC4zNzItMS43OTctNy43MjQtMy42MTMtMTAtNS40NjVDNC4zNTggMjQuMTIyIDMgMjIuMTE0IDMgMTkuOTI4VjEwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMGg5djE0bC0xLjI3Mi0uNDU4Yy0xLjM2Ny0uNDk0LTMuMjMtMS4zMTQtNC43NjgtMi4zOUMxMC40ODQgMjAuMTE4IDkgMTguNjM2IDkgMTYuNzYxVjEwem0xLjg5NSAxLjg3NnY0Ljg4N2MwIC44NzcuNzQ0IDEuODY3IDIuMTU4IDIuODU2LjkzNy42NTYgMi4wMzggMS4yMTkgMy4wNTIgMS42NTd2LTkuNGgtNS4yMXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgMUg5djdoMlYyLjk2NmgxNlYxNi43M2MwIC41NTgtLjI0NSAxLjEyOC0uNzU2IDEuNzItLjUxNS41OTYtMS4yNTYgMS4xNTgtMi4xMiAxLjY2OC0xLjM4MS44MTgtMi45NjEgMS40MzQtNC4xMjQgMS44MTdWMjRjMS4yNi0uMzc4IDMuMzM0LTEuMTIgNS4xNTUtMi4xOTcuOTY1LS41NyAxLjkwNS0xLjI2MSAyLjYxMi0yLjA4LjcxMi0uODIyIDEuMjMzLTEuODI3IDEuMjMzLTIuOTkyVjF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBTcGFjZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwU3BhY2VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA0aDZ2Mkg0ek0yMiA0aDZ2MmgtNnpNNCAyMmg2djJINHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAxNGgxNFYwSDB2MTR6TTIgMmgxMHYxMEgyVjJ6bTE2LTJ2MTRoMTRWMEgxOHptMTIgMTJIMjBWMmgxMHYxMHpNMCAzMmgxNFYxOEgwdjE0em0yLTEyaDEwdjEwSDJWMjB6bTE2IDEyaDE0VjE4SDE4djE0em0yLTEyaDEwdjEwSDIwVjIwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgMjJoNnYyaC02elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBTcGFjZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwU3FsID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNxbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDZoOXYyaC05ek01IDZoOXYySDV6TTUgMTJoOXYySDV6TTE4IDEyaDl2MmgtOXpNNSAxOGg5djJINXpNMTggMThoOXYyaC05ek0xOCAyNGg5djJoLTl6TTUgMjRoOXYySDV6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5IDMySDNhMyAzIDAgMCAxLTMtM1YzYTMgMyAwIDAgMSAzLTNoMjZhMyAzIDAgMCAxIDMgM3YyNmEzIDMgMCAwIDEtMyAzWk0zIDJhMSAxIDAgMCAwLTEgMXYyNmExIDEgMCAwIDAgMSAxaDI2YTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xSDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBTcWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwVGltZWxpb24gPSBmdW5jdGlvbiBFdWlJY29uQXBwVGltZWxpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDR2MjAuMzRMMTYgMzJsMTItNy42NFY0SDRabTIyIDJ2NGgtNGEzIDMgMCAwIDAtMyAzdjVoLTZ2LTVhMyAzIDAgMCAwLTMtM0g2VjZoMjBabS03Ljg3IDE0TDE2IDIyLjUyIDEzLjg3IDIwaDQuMjZaTTYgMTJoNGExIDEgMCAwIDEgMSAxdjYuN2wzLjY5IDQuMzctMi41OCAzLjA2TDYgMjMuMjRWMTJabTcuODEgMTYuMjIgMi4xOS0yLjYgMi4xOSAyLjZMMTYgMjkuNjFsLTIuMTktMS4zOVptNi4wOC0xLjA5LTIuNTgtMy4wNkwyMSAxOS43VjEzYTEgMSAwIDAgMSAxLTFoNHYxMS4yNGwtNi4xMSAzLjg5WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAwaDI0djJINHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVGltZWxpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwVXBncmFkZUFzc2lzdGFudCA9IGZ1bmN0aW9uIEV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjFhNSA1IDAgMSAxIDAtMTAgNSA1IDAgMCAxIDAgMTBabTAtOGEzIDMgMCAxIDAgMCA2IDMgMyAwIDAgMCAwLTZaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI3LjQyIDE5LjY5YTEyIDEyIDAgMCAxLTIzLjExLTFsMi4yNy0uNDUtNC4zMi00LjQ3TDAgMTkuNTVsMi4zOS0uNDdhMTQgMTQgMCAwIDAgMjcgMS4yM2wtMS45Ny0uNjJ6bTIuMjMtNi43N2ExNCAxNCAwIDAgMC0yNy0xLjIzbDEuOS42MmExMiAxMiAwIDAgMSAyMy4xMSAxbC0yLjI3LjQ1IDQuMzIgNC40NkwzMiAxMi40NWwtMi4zNS40N3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFVwZ3JhZGVBc3Npc3RhbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwVXB0aW1lID0gZnVuY3Rpb24gRXVpSWNvbkFwcFVwdGltZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuMjE2IDEyLjM3N0ExMC45NDggMTAuOTQ4IDAgMCAwIDIuMTgxIDE3SC4xNTNhMTIuOTQxIDEyLjk0MSAwIDAgMSAyLjY5My02LjExOGwxLjM3IDEuNDk1Wm0yLjk0OC0yLjcwMy0xLjM3LTEuNDk1QTEyLjk0IDEyLjk0IDAgMCAxIDEzIDZ2MmMtMi4xNDQgMC00LjE0NC42MTMtNS44MzYgMS42NzRaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI2IDQuNDE0VjE5YzAgNy4xOC01LjgyIDEzLTEzIDEzQzYuNSAzMiAxLjExNSAyNy4yMy4xNTMgMjFIMi4xOGMuOTQgNS4xMiA1LjQyNyA5IDEwLjgxOSA5IDYuMDc1IDAgMTEtNC45MjUgMTEtMTFWNC40MTRsLTQuMjkzIDQuMjkzLTEuNDE0LTEuNDE0TDI1IC41ODZsNi43MDcgNi43MDctMS40MTQgMS40MTRMMjYgNC40MTRabS03LjgzNiA5LjkwOSAxLjQ3MiAxLjM1NC03LjU3NyA4LjIzNS00LjgzNS00LjQ0MiAxLjM1My0xLjQ3MyAzLjM2NCAzLjA5IDYuMjIzLTYuNzY0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVXB0aW1lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFVzZXJzUm9sZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXNlcnNSb2xlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5LjMwNyAzLjIxYTIuOTEgMi45MSAwIDEgMC0uMjIzIDEuOTQgMTEuNjM2IDExLjYzNiAwIDAgMSA4LjIzMiA3LjA0OWwxLjc3NS0uNjk4YTEzLjU3NiAxMy41NzYgMCAwIDAtOS43ODQtOC4yOTF6bS0yLjgyMiAxLjYzOGEuOTcuOTcgMCAxIDEgMC0xLjkzOS45Ny45NyAwIDAgMSAwIDEuOTR6bS00LjI2Ny44MDUtLjcxNy0xLjc3NGExMy41NzYgMTMuNTc2IDAgMCAwLTguMjkxIDkuNzg0IDIuOTEgMi45MSAwIDEgMCAxLjk0LjIyMyAxMS42MzYgMTEuNjM2IDAgMCAxIDcuMDY4LTguMjMzem0tOC4zNCAxMS44MDJhLjk3Ljk3IDAgMSAxIDAtMS45NC45Ny45NyAwIDAgMSAwIDEuOTR6bTEyLjYwNyA4LjcyN2EyLjkxIDIuOTEgMCAwIDAtMi41OTkgMS42MiAxMS42MzYgMTEuNjM2IDAgMCAxLTguMjMzLTcuMDVsLTEuNzc0LjcxN2ExMy41NzYgMTMuNTc2IDAgMCAwIDkuODEzIDguMjkxIDIuOTEgMi45MSAwIDEgMCAyLjc5My0zLjU3OHptMCAzLjg3OWEuOTcuOTcgMCAxIDEgMC0xLjk0Ljk3Ljk3IDAgMCAxIDAgMS45NHpNMzIgMTYuNDg1YTIuOTEgMi45MSAwIDEgMC00LjE5OSAyLjU5OSAxMS42MzYgMTEuNjM2IDAgMCAxLTcuMDUgOC4yMzJsLjcxOCAxLjc3NWExMy41NzYgMTMuNTc2IDAgMCAwIDguMjkxLTkuODEzQTIuOTEgMi45MSAwIDAgMCAzMiAxNi40ODV6bS0yLjkxLjk3YS45Ny45NyAwIDEgMSAwLTEuOTQuOTcuOTcgMCAwIDEgMCAxLjk0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTkuMTkgMTYuMzVhMy44NzkgMy44NzkgMCAxIDAtNS40MiAwIDQuODQ4IDQuODQ4IDAgMCAwLTIuMTM0IDQuMDE0djEuOTM5aDkuNjk3di0xLjk0YTQuODQ4IDQuODQ4IDAgMCAwLTIuMTQzLTQuMDE0Wm0tNC42NDUtMi43NzRhMS45NCAxLjk0IDAgMSAxIDMuODggMCAxLjk0IDEuOTQgMCAwIDEtMy44OCAwWm0tLjk3IDYuNzg4YTIuOTEgMi45MSAwIDEgMSA1LjgxOSAwaC01LjgxOFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVXNlcnNSb2xlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBWaXN1YWxpemUgPSBmdW5jdGlvbiBFdWlJY29uQXBwVmlzdWFsaXplKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzIgMzJINGE0IDQgMCAwIDEtNC00VjBoMnYyOGEyIDIgMCAwIDAgMiAyaDI4djJaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgMjBoMnY3SDZ6TTE2IDEyaDJ2MTVoLTJ6TTI2IDE3aDJ2MTBoLTJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNyA2YTMgMyAwIDAgMC0yLjA4Ljg0TDIwIDQuMzZBMi4yIDIuMiAwIDAgMCAyMCA0YTMgMyAwIDAgMC02IDBjLjAwMS4zNDEuMDYyLjY4LjE4IDFsLTUuNiA0LjQ2QTMgMyAwIDAgMCA3IDlhMyAzIDAgMSAwIDMgMyAyLjkzIDIuOTMgMCAwIDAtLjE4LTFsNS42LTQuNDhBMyAzIDAgMCAwIDE3IDdhMyAzIDAgMCAwIDIuMDgtLjg0bDUgMi40OEEyLjIgMi4yIDAgMCAwIDI0IDlhMyAzIDAgMSAwIDMtM1pNNyAxM2ExIDEgMCAxIDEgMC0yIDEgMSAwIDAgMSAwIDJabTEwLThhMSAxIDAgMSAxIDAtMiAxIDEgMCAwIDEgMCAyWm0xMCA1YTEgMSAwIDEgMSAwLTIgMSAxIDAgMCAxIDAgMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFZpc3VhbGl6ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBWdWxuZXJhYmlsaXR5TWFuYWdlbWVudCA9IGZ1bmN0aW9uIEV1aUljb25BcHBWdWxuZXJhYmlsaXR5TWFuYWdlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMzk0IDYuMTkyIDExLjA1LjUzNiAxNiA1LjQ4Nmw0Ljk1LTQuOTUgNS42NTcgNS42NTZMMTYgMTYuOCA1LjM5NCA2LjE5MlptMi44MjggMEwxNiAxMy45NzFsNy43NzgtNy43NzktMi44MjgtMi44MjhMMTYgOC4zMTRsLTQuOTUtNC45NS0yLjgyOCAyLjgyOFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMzAuOTQxIDQuNjg2IDE5LjYyN0E4LjAwNCA4LjAwNCAwIDAgMSAzLjQ1IDkuOTA1YTguMDExIDguMDExIDAgMCAxIDEuMjM2LTEuNTkxTDE2IDE5LjUzOSAyNy4zMTMgOC4zMTRsLjA0NS4wNDVhOC4wMDMgOC4wMDMgMCAwIDEtLjA0NSAxMS4yNjhMMTYgMzAuOTQyWm0wLTIuODI4IDkuODk5LTkuOWE2LjAwMiA2LjAwMiAwIDAgMCAxLjE2OS02LjgzOEwxNiAyMi4zNTcgNC45MzIgMTEuMzc1QTYuMDAzIDYuMDAzIDAgMCAwIDYuMSAxOC4yMTNsOS45IDkuOVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFdhdGNoZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwV2F0Y2hlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTkuNzQgNy43My0xLjUtMS4zMmExMyAxMyAwIDAgMCAwIDE3LjE5bDEuNS0xLjMyYTExIDExIDAgMCAxIDAtMTQuNTR2LS4wMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNTEgMy42NiA1IDIuMzRjLTYuMzc3IDcuMjQtNi4zNzcgMTguMDkgMCAyNS4zM2wxLjUtMS4zMkMuNzkyIDE5Ljg2Ny43OTIgMTAuMTUzIDYuNSAzLjY3bC4wMS0uMDF6bTE3LjI1IDIuNzUtMS41IDEuMzJhMTEgMTEgMCAwIDEgMCAxNC41NGwxLjUgMS4zMmExMyAxMyAwIDAgMCAwLTE3LjE5di4wMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTI3IDIuMzQtMS41IDEuMzJjNS43MDggNi40ODMgNS43MDggMTYuMTk3IDAgMjIuNjhsMS41IDEuMzNjNi4zNzctNy4yNCA2LjM3Ny0xOC4wOSAwLTI1LjMzWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTVhNSA1IDAgMSAwLTYgNC45VjMxaDJWMTkuOWE1IDUgMCAwIDAgNC00LjlabS01IDNhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBXYXRjaGVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25BcHBXb3JrcGxhY2VTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy44MSAxSDJ2MzBoNS44MTVjMS43MDUgMCAzLjM0My0uNzgzIDQuMzgtMi4wOTRsMy4xODItNC4wMjMuMDA2LjAwNiAyLjYwNy0zLjEzNy4wMS0uMDE0YTkuNDIgOS40MiAwIDAgMCAxLjk1My00LjgyNiA5LjExMiA5LjExMiAwIDAgMC0xLjg5MS02LjUyMmwtLjAxLS4wMTItMi42MDMtMy4xNTZMMTIuMTk3IDMuMUMxMS4xNiAxLjc4NiA5LjUyIDEgNy44MSAxWm02LjExOCA3LjUyMy0zLjMxLTQuMTk1QzkuOTY4IDMuNTEyIDguOTE3IDMgNy44MSAzSDR2MjZoMy44MTVjMS4xIDAgMi4xNS0uNTA4IDIuOC0xLjMybDMuMzMtNC4yMS0xLjc5Ni0xLjc3LS4wMjctLjAzM2MtMi44NC0zLjMxNy0yLjgzLTguMTk1LjAyOC0xMS4yODdsLjAwNC0uMDA0YTk4Ljg5MyA5OC44OTMgMCAwIDEgMS43NzQtMS44NTNabTQuMDQzIDguMDk5Yy0uMTIgMS4yNzktLjYxNiAyLjUzNy0xLjQ5IDMuNjRsLTEuMjg4IDEuNjMtMS41NzgtMS41NTZjLTIuMTktMi41OS0yLjExOC02LjMuMDAxLTguNTk2LjYtLjY0IDEuMTE5LTEuMTgzIDEuNTYxLTEuNjM1bDEuMjkzIDEuNjM4di4wMDJsLjAxNC4wMTZjLjk0MiAxLjE5MiAxLjQ0NiAyLjU2NCAxLjUxIDMuOTQ5YTcuMDkgNy4wOSAwIDAgMS0uMDIzLjkxMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yMy44MDEgM2MtLjM4MiAwLTEuMDUyLjIzMS0xLjkyNS44MTItLjYzNi40MjItMS4yMjguOTI4LTEuNjc3IDEuMzU3bDEuNzcxIDIuMjQ1LjAwNS4wMDcuMDI0LjAzLjAwOC4wMWM0LjAwMyA1LjA5OSAzLjk5IDEyLjA1Ny0uMDM1IDE3LjE0NWwtMS43OTMgMi4yNjdhOC4yMDYgOC4yMDYgMCAwIDAgMS43NjkgMS40OThjLjY5OC40MjcgMS4zMzcuNjI5IDEuODUyLjYyOUgyOFYzaC00LjE5OVptLTYuMTQ4IDIzLjg0Mi43NjUgMS4wNTMuMDIzLjAyN2MuNzE3Ljg1MSAxLjU2NiAxLjYwNyAyLjQ2NCAyLjE1Ni44OS41NDQgMS44OS45MjIgMi44OTUuOTIySDMwVjFoLTYuMTk5Yy0uOTg3IDAtMi4wNjYuNTA1LTMuMDMyIDEuMTQ2YTE0LjkzNCAxNC45MzQgMCAwIDAtMi4zNTIgMS45NzRsLS4yNzYuMjg4LS41OTUuNjI4IDIuODU1IDMuNjE5LjAwNi4wMDZjMy40NTkgNC4zNzUgMy40NTcgMTAuMzI5LS4wMDQgMTQuNzA0bC0yLjc1IDMuNDc3WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBXb3JrcGxhY2VTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiA0VjJoMnYySDJabTUgMFYyaDJ2Mkg3Wm01IDBWMmgydjJoLTJaTTIgOVY3aDJ2MkgyWm01IDBWN2gydjJIN1ptNSAwVjdoMnYyaC0yWk0yIDE0di0yaDJ2MkgyWm01IDB2LTJoMnYySDdabTUgMHYtMmgydjJoLTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFycm93RW5kID0gZnVuY3Rpb24gRXVpSWNvbkFycm93RW5kKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuODU3IDE0LjA0M2EuNzUuNzUgMCAwIDEtLjAyNS0xLjA2bDQuNTkxLTQuODFhLjI1LjI1IDAgMCAwIDAtLjM0NmwtNC41OS00LjgxYS43NS43NSAwIDAgMSAxLjA4NS0xLjAzNWw0LjU5IDQuODFhMS43NSAxLjc1IDAgMCAxIDAgMi40MTZsLTQuNTkgNC44MWEuNzUuNzUgMCAwIDEtMS4wNi4wMjRaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNSAyLjc1YS43NS43NSAwIDAgMSAxLjUgMHYxMC41YS43NS43NSAwIDAgMS0xLjUgMFYyLjc1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dFbmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXJyb3dTdGFydCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1N0YXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAyLjc1YS43NS43NSAwIDAgMSAxLjUgMHYxMC41YS43NS43NSAwIDAgMS0xLjUgMFYyLjc1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjEzNSAxNC4wNDNhLjc1Ljc1IDAgMCAwIC4wMjUtMS4wNmwtNC41OS00LjgxYS4yNS4yNSAwIDAgMSAwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDAgMC0xLjA4NS0xLjAzNWwtNC41OSA0LjgxYTEuNzUgMS43NSAwIDAgMCAwIDIuNDE2bDQuNTkgNC44MWMuMjg2LjMuNzYuMzEgMS4wNi4wMjRaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dTdGFydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcnJvd0Rvd24gPSBmdW5jdGlvbiBFdWlJY29uQXJyb3dEb3duKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEuOTU3IDQuOTgyYS43NS43NSAwIDAgMSAxLjA2LS4wMjVsNC44MSA0LjU5MWEuMjUuMjUgMCAwIDAgLjM0NiAwbDQuODEtNC41OWEuNzUuNzUgMCAwIDEgMS4wMzUgMS4wODVsLTQuODEgNC41OWExLjc1IDEuNzUgMCAwIDEtMi40MTYgMGwtNC44MS00LjU5YS43NS43NSAwIDAgMS0uMDI1LTEuMDZaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dEb3duOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFycm93TGVmdCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd0xlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuMDE4IDE0LjA0M2EuNzUuNzUgMCAwIDAgLjAyNC0xLjA2bC00LjU5LTQuODFhLjI1LjI1IDAgMCAxIDAtLjM0Nmw0LjU5LTQuODFhLjc1Ljc1IDAgMSAwLTEuMDg1LTEuMDM1bC00LjU5IDQuODFhMS43NSAxLjc1IDAgMCAwIDAgMi40MTZsNC41OSA0LjgxYy4yODYuMy43NjEuMzEgMS4wNi4wMjRaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dMZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFycm93UmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uQXJyb3dSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljk4MiAxNC4wNDNhLjc1Ljc1IDAgMCAxLS4wMjUtMS4wNmw0LjU5MS00LjgxYS4yNS4yNSAwIDAgMCAwLS4zNDZsLTQuNTktNC44MWEuNzUuNzUgMCAwIDEgMS4wODUtMS4wMzVsNC41OSA0LjgxYTEuNzUgMS43NSAwIDAgMSAwIDIuNDE2bC00LjU5IDQuODFhLjc1Ljc1IDAgMCAxLTEuMDYuMDI0WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93UmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXJyb3dVcCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1VwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEuOTU3IDExLjAxOGMuMjg2LjMuNzYxLjMxIDEuMDYuMDI0bDQuODEtNC41OWEuMjUuMjUgMCAwIDEgLjM0NiAwbDQuODEgNC41OWEuNzUuNzUgMCAwIDAgMS4wMzUtMS4wODVsLTQuODEtNC41OWExLjc1IDEuNzUgMCAwIDAtMi40MTYgMGwtNC44MSA0LjU5YS43NS43NSAwIDAgMC0uMDI1IDEuMDZaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dVcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcnRpY2xlID0gZnVuY3Rpb24gRXVpSWNvbkFydGljbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgMTBhLjUuNSAwIDAgMCAwIDFoNGEuNS41IDAgMCAwIDAtMWgtNFpNOCA2LjVhLjUuNSAwIDAgMSAuNS0uNWg0YS41LjUgMCAwIDEgMCAxaC00YS41LjUgMCAwIDEtLjUtLjVaTTMuNSAyYS41LjUgMCAwIDAgMCAxaDVhLjUuNSAwIDAgMCAwLTFoLTVaTTggOC41YS41LjUgMCAwIDEgLjUtLjVoNGEuNS41IDAgMCAxIDAgMWgtNGEuNS41IDAgMCAxLS41LS41Wk0zLjUgNGEuNS41IDAgMCAwIDAgMWg1YS41LjUgMCAwIDAgMC0xaC01Wk0zIDEyLjVhLjUuNSAwIDAgMSAuNS0uNWg5YS41LjUgMCAwIDEgMCAxaC05YS41LjUgMCAwIDEtLjUtLjVaTTcgNkgzdjVoNFY2WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjUyNi4zMTJBMS4wMDIgMS4wMDIgMCAwIDAgMTAuOCAwSDJhMSAxIDAgMCAwLTEgMXYxNGExIDEgMCAwIDAgMSAxaDEyYTEgMSAwIDAgMCAxLTFWNC40MjljMC0uMjU2LS4wOTgtLjUwMy0uMjc0LS42ODlsLTMuMi0zLjQyOFpNMTAuNSA1SDE0djEwSDJWMWg4djMuNWEuNS41IDAgMCAwIC41LjVaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJ0aWNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Bc3RlcmlzayA9IGZ1bmN0aW9uIEV1aUljb25Bc3RlcmlzayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuOTI4IDguNDY4IDQgNy42MThsLjQ0Ni0xLjQyN0w3LjM3NSA3LjI1IDcuMjg3IDRoMS40ODRsLS4wOTcgMy4yOTYgMi44OC0xLjAzOUwxMiA3LjY5M2wtMi45NzcuODYgMS45MiAyLjU2TDkuNzQxIDEyIDcuOTM3IDkuMjhsLTEuNzQ1IDIuNjU0LTEuMjEzLS44NnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFzdGVyaXNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkF0ID0gZnVuY3Rpb24gRXVpSWNvbkF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMgOGE1IDUgMCAxIDEgOS44MTIgMS4zNjQuNzguNzggMCAwIDEtLjM0MS40NzZjLS4xNi4xLS4zODIuMTYtLjY1OS4xNi0uNTA3IDAtLjY2OC0uMTgtLjczLS4yNzRhLjUzLjUzIDAgMCAxLS4wODItLjIzVjVoLTF2Ljc2NGEzIDMgMCAxIDAgLjE0NiA0LjMzM2MuMDI4LjA1Ny4wNi4xMTcuMS4xNzcuMjY3LjQwNy43NjEuNzI2IDEuNTY2LjcyNi40MTIgMCAuODMtLjA4OCAxLjE4OS0uMzExLjM2Ny0uMjMuNjQtLjU4My43NzMtMS4wNTNhNiA2IDAgMSAwLTIuNTAxIDMuMzkzbC0uNTQ2LS44MzdBNSA1IDAgMCAxIDMgOFptNyAwYTIgMiAwIDEgMC00IDAgMiAyIDAgMCAwIDQgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJlYWtlciA9IGZ1bmN0aW9uIEV1aUljb25CZWFrZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjI3NyAxMC4wODhjLjAyLjAxNC4wNC4wMy4wNTcuMDQ3LjU4Mi41NSAxLjEzNC44MTIgMS42NjYuODEyLjU4NiAwIDEuODQtLjI5MyAzLjcxMy0uODhMOSA2LjIxMlYySDd2NC4yMTJsLTEuNzIzIDMuODc2Wm0tLjQzOC45ODdMMy41MzkgMTRoOC45MjJsLTEuMzItMi45NjlDOS4wOTYgMTEuNjc3IDcuNzMzIDEyIDcgMTJjLS43NCAwLTEuNDYzLS4zMTUtMi4xNjEtLjkyNVpNNiAySDVWMWg2djFoLTF2NGwzLjM3NSA3LjU5NEExIDEgMCAwIDEgMTIuNDYxIDE1SDMuNTRhMSAxIDAgMCAxLS45MTQtMS40MDZMNiA2VjJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CZWFrZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQmVsbCA9IGZ1bmN0aW9uIEV1aUljb25CZWxsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuMzE2IDEyaDEwLjM2OGMtLjE4OC0uNzA0LS4yOC0xLjY5MS0uMzQ4LTMuMDM3LS4wNy0xLjM4Mi0uMTAzLTEuODg4LS4xOS0yLjYxMi0uMDI4LS4yMzYtLjA2LS40NjItLjA5Ni0uNjgtLjMxLTEuODkyLTEuNTA2LTIuOTIzLTMuNzA4LTMuMTMxYTEgMSAwIDEgMC0xLjY4NCAwYy0yLjIwMi4yMDgtMy4zOTcgMS4yNC0zLjcwOCAzLjEzYTE2LjAxIDE2LjAxIDAgMCAwLS4wOTYuNjhjLS4wODcuNzI1LS4xMiAxLjIzLS4xOSAyLjYxMy0uMDY4IDEuMzQ2LS4xNiAyLjMzMy0uMzQ4IDMuMDM3Wm0xMC44NDMgMUgxLjg0Yy0uMzA4LjM1My0uNzM3LjUtMS4zNDEuNWEuNS41IDAgMSAxIDAtMWMuNzg2IDAgMS4wMjQtLjc4MyAxLjE2Ni0zLjU4Ny4wNy0xLjQwNy4xMDUtMS45MjYuMTk2LTIuNjgxLjAzLS4yNS4wNjMtLjQ5LjEwMi0uNzI0LjMzNC0yLjA0MSAxLjU0Ni0zLjMxMyAzLjU1Ni0zLjc5MmEyIDIgMCAwIDEgMy45NiAwYzIuMDEuNDc5IDMuMjIyIDEuNzUgMy41NTcgMy43OTJhMTcgMTcgMCAwIDEgLjEwMi43MjRjLjA5Ljc1NS4xMjUgMS4yNzQuMTk2IDIuNjgxLjE0IDIuODA0LjM3OSAzLjU4NyAxLjE2NSAzLjU4N2EuNS41IDAgMSAxIDAgMWMtLjYwNCAwLTEuMDMzLS4xNDctMS4zNDEtLjVaTTUuNSAxNGg0YTIgMiAwIDEgMS00IDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CZWxsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJlbGxTbGFzaCA9IGZ1bmN0aW9uIEV1aUljb25CZWxsU2xhc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm05LjUgMTQtLjAwNS4xNWEyIDIgMCAwIDEtMy45NzIuMTUzbC0uMDE4LS4xNTRMNS41IDE0aDRabTUuMzgtMTIuODI1YS41LjUgMCAwIDEgLjAwOC42NGwtLjA2My4wNjUtMTQgMTJhLjUuNSAwIDAgMS0uNzEzLS42OTVsLjA2My0uMDY1IDE0LTEyYS41LjUgMCAwIDEgLjcwNS4wNTVaTTEzLjAzNiA1LjUxbC4wNTUuMzUzLjA0OC4zNjhjLjA2Ni41NTQuMTAzLjk4LjE0NSAxLjcyNGwuMDggMS40OTFjLjE0NiAyLjM3MS40MDIgMy4wNTMgMS4xMzYgMy4wNTNhLjUuNSAwIDEgMSAwIDFjLS42MDMgMC0xLjAzMS0uMTQ2LTEuMzQtLjQ5OUg0LjE4NWwxLjE4Mi0xaDcuMzE3Yy0uMTcyLS42NDQtLjI2NC0xLjUyOC0uMzMtMi43MDhsLS4wOS0xLjYzOGMtLjAzMy0uNTE0LS4wNjYtLjg3LS4xMTgtMS4zMDRsLS4wMTEtLjA3Ny45MDEtLjc2M1pNNy41IDBhMiAyIDAgMCAxIDEuOTggMS43MTdjLjQ3Ni4xMTMuOTA3LjI3IDEuMjkyLjQ3MmwtLjgzOC43MWE1LjcyOCA1LjcyOCAwIDAgMC0xLjU5MS0uMzYgMSAxIDAgMSAwLTEuNjg0IDBDNC40NTUgMi43NSAzLjI2IDMuNzggMi45NSA1LjY3MWwtLjA1LjMzNC0uMDQ2LjM0N2MtLjA4LjY3Ni0uMTE1IDEuMTYxLS4xNzYgMi4zNDdsLS4wMTQuMjY1LS4wMDUuMDktMS4wNTguODk3Yy4wMTgtLjIzNC4wMzUtLjQ4OC4wNS0uNzYzbC4wNzctMS40MjdjLjAzOC0uNjI2LjA3My0xLjAyNS4xMzQtMS41MjguMDMtLjI1LjA2My0uNDkuMTAyLS43MjQuMzM0LTIuMDQgMS41NDYtMy4zMTMgMy41NTUtMy43OTJsLjAwNC0uMDE5QTIgMiAwIDAgMSA3LjUgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJlbGxTbGFzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25CZXRhID0gZnVuY3Rpb24gRXVpSWNvbkJldGEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDYuMzk0aDEuMDNjLjcyIDAgMS4yODMuMTUzIDEuNjg4LjQ1OWEyLjIgMi4yIDAgMCAxIC44MTMgMS4xNjNjLjEzOC40Ny4xNjUuOTUyLjA4MyAxLjQ0Ny0uMS41OTctLjMzIDEuMTM1LS42OSAxLjYxNmEzLjk1IDMuOTUgMCAwIDEtMS4zMzMgMS4xMzcgMy42ODkgMy42ODkgMCAwIDEtMS43MzUuNDE4Yy0uMzgxIDAtLjc0Ny0uMDctMS4wOTctLjIxMi0uMzUtLjE0NC0uNjM2LS40MTctLjg2LS44MThsLS4wODIuMDQxLjMzLTIuMDE4Yy0uMDU1LjMzNy0uMDI0LjY0Ny4wOTIuOTMyLjEyLjI4NS4zMi41MTMuNTk4LjY4NS4yODEuMTcxLjYzNC4yNTcgMS4wNi4yNTdhMi41NCAyLjU0IDAgMCAwIDIuMDc1LTEuMDNjLjIyNi0uMzA4LjM2OS0uNjQ1LjQyNy0xLjAwOGExLjkyOSAxLjkyOSAwIDAgMC0uMDcyLS45NzMgMS41MjQgMS41MjQgMCAwIDAtLjUzNi0uNzUyYy0uMjUtLjE5Ni0uNTctLjI5My0uOTU3LS4yOTNINy44MjVMOCA2LjM5NVptMS4zNTktNC41OTFjLjQ5IDAgLjkxMy4wNzkgMS4yNjYuMjM3YTIuMjU4IDIuMjU4IDAgMCAxIDEuMzAzIDEuNTI4Yy4wODIuMzMuMDk0LjY2OC4wMzYgMS4wMTQtLjA2OS40MzMtLjI1Ljg2NC0uNTQgMS4yOTMtLjI5LjQyNS0uNjg0Ljc4LTEuMTg1IDEuMDY1LS40OTcuMjgyLTEuMDk2LjQyMi0xLjc5Ni40MjJoLS41OTdsLjE3NS0xLjA1aC41NzZhMi4xODIgMi4xODIgMCAwIDAgMS44MTItLjg5Yy4xOTItLjI2NS4zMTItLjU0NC4zNi0uODQuMDgtLjQ3My0uMDM2LS44NjYtLjM0NC0xLjE3OC0uMzEtLjMxMy0uNzI2LS40NjktMS4yNTEtLjQ2OS0uMzUgMC0uNjgzLjA3Mi0uOTk5LjIxNmEyLjI1NiAyLjI1NiAwIDAgMC0uNzkzLjYwMyAxLjg1MiAxLjg1MiAwIDAgMC0uNDEyLjg5bC0xLjc4IDEwLjgxSDMuOTczbDEuNzgyLTEwLjgxYTMuMTcgMy4xNyAwIDAgMSAuNjQ4LTEuNDU3Yy4zNC0uNDI5Ljc2NS0uNzY3IDEuMjc3LTEuMDE0YTMuODI3IDMuODI3IDAgMCAxIDEuNjc4LS4zN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJldGE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQm9sdCA9IGZ1bmN0aW9uIEV1aUljb25Cb2x0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4wNCAxMy4yNzRhLjUuNSAwIDEgMCAuODkyLjQ1M2wzLjAxNC01LjkzMWEuNS41IDAgMCAwLS40NDUtLjcyN0g1LjMxNkw4LjAzIDEuNzI3YS41LjUgMCAxIDAtLjg5Mi0uNDUzTDQuMDU1IDcuMzQzYS41LjUgMCAwIDAgLjQ0Ni43MjZoNS4xODVMNy4wNCAxMy4yNzRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Cb2x0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJveGVzSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIEV1aUljb25Cb3hlc0hvcml6b250YWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDZoNHY0SDBWNlptMSAxdjJoMlY3SDFabTUtMWg0djRINlY2Wm0xIDF2MmgyVjdIN1ptNS0xaDR2NGgtNFY2Wm0xIDNoMlY3aC0ydjJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Cb3hlc0hvcml6b250YWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQm94ZXNWZXJ0aWNhbCA9IGZ1bmN0aW9uIEV1aUljb25Cb3hlc1ZlcnRpY2FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxdjJoMlYxSDdaTTYgMGg0djRINlYwWm0wIDZoNHY0SDZWNlptMSAxdjJoMlY3SDdabS0xIDVoNHY0SDZ2LTRabTEgMXYyaDJ2LTJIN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJveGVzVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQnJhbmNoID0gZnVuY3Rpb24gRXVpSWNvbkJyYW5jaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMTAuMDM4YTMuNDkgMy40OSAwIDAgMSAyLjUtMS4wNWgyYTIuNSAyLjUgMCAwIDAgMi40NjItMi4wNjEgMiAyIDAgMSAxIDEuMDA4LjAxN0EzLjUgMy41IDAgMCAxIDkuNSA5Ljk4N2gtMmEyLjUgMi41IDAgMCAwLTIuNDY2IDIuMDg1QTIgMiAwIDEgMSA0IDEyLjA2M1YzLjkzN2EyIDIgMCAxIDEgMSAwdjYuMVpNNC41IDNhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm0wIDEyYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptOC05YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJyYW5jaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25CcmFuY2hVc2VyID0gZnVuY3Rpb24gRXVpSWNvbkJyYW5jaFVzZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiA3Ljk4N2EzLjQ5IDMuNDkgMCAwIDAtMi41IDEuMDV2LTQuMWEyIDIgMCAxIDAtMSAwdjYuMTI2YTIgMiAwIDEgMCAxLjAzNC4wMUEyLjUgMi41IDAgMCAxIDYgOC45ODZoMWEzLjUgMy41IDAgMCAwIDMuNDctMy4wNDMgMiAyIDAgMSAwLTEuMDA5LS4wMTdBMi41IDIuNSAwIDAgMSA3IDcuOTg3SDZ6TTQgM2ExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDB6bTAgMTBhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwem03LTlhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwelwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjUgMTAuNWExLjUgMS41IDAgMSAxLTMgMCAxLjUgMS41IDAgMCAxIDMgMHpNOSAxNWMuMjg0LTEuMjIzIDEuNTE5LTIuMTQzIDMtMi4xNDNzMi43MTYuOTIgMyAyLjE0M0g5elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJhbmNoVXNlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ccm9vbSA9IGZ1bmN0aW9uIEV1aUljb25Ccm9vbShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTMuNzMyIDEzLjA5Ni0uMTk3LS4xOTcgMi44My0yLjgyOC43MDYuNzA3LTIuODI5IDIuODI4LjcwOC43MDggMi44MjgtMi44MjhhMSAxIDAgMCAwIDAtMS40MTRMNS42NTggNy45NWEuOTkzLjk5MyAwIDAgMC0uNzA4LS4yOTMuOTk0Ljk5NCAwIDAgMC0uNzA4LjI5M2wtMi44MjggMi44MjkuNzA3LjcwNyAyLjgyOS0yLjgzLjcwNy43MDgtMi44MjkgMi44MjkuOTA0LjkwM1ptMS4yMTgtNi40NGMuNTEyIDAgMS4wMjMuMTk2IDEuNDE0LjU4N2wyLjEyMSAyLjEyYTIgMiAwIDAgMSAwIDIuODNMNC45NSAxNS43MjggMCAxMC43NzhsMy41MzUtMy41MzVhMS45OTMgMS45OTMgMCAwIDEgMS40MTUtLjU4NlpNMTQuMDIgMWwuNzA4LjcwNy02Ljk1IDYuOTUtLjcwNy0uNzA3TDE0LjAyMSAxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJvb207IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQnJ1c2ggPSBmdW5jdGlvbiBFdWlJY29uQnJ1c2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS45OTMgOC4xN2MwIC44My0uNjczIDEuNTA3LTEuNDk5IDEuNTA3SDUuNDk4QTEuNTA1IDEuNTA1IDAgMCAxIDMuOTk5IDguMTdWNi42NjJoNy45OTRWOC4xN1ptLTIuOTk4IDUuOTk4YzAgLjQ1NS0uNDQ4LjgyNy0uOTk5LjgyNy0uNTUgMC0xLS4zNzItMS0uODI3di0zLjQ4NmgydjMuNDg2Wk00IDUuNjU4VjEuMDA1aDEuMjYydjQuNjUzSDRabTIuMjYxIDBWMS4wMDVoMS4yNDR2NC42NTNINi4yNlptMi4yNDQgMFYxLjAwNWgxLjIzNXY0LjY1M0g4LjUwNFptMi4yMzQgMFYxLjAwNWgxLjI1NHY0LjY1M2gtMS4yNTRaTTMuMDA4IDAgMyA4LjE3YTIuNTA5IDIuNTA5IDAgMCAwIDIuNDk4IDIuNTEyaC41djMuNDg2YzAgMS4wMS44OTYgMS44MzIgMS45OTggMS44MzIgMS4xMDIgMCAxLjk5OC0uODIyIDEuOTk4LTEuODMydi0zLjQ4NmguNWEyLjUwOSAyLjUwOSAwIDAgMCAyLjQ5OC0yLjUxMkwxMyAwSDMuMDA4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJ1c2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQnVnID0gZnVuY3Rpb24gRXVpSWNvbkJ1ZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTEwLjY1MSA1LjEyNi45MjItLjQ1NS44ODQtMi4zNDNhLjUuNSAwIDAgMSAuOTM5LjM0NEwxMi4zNzQgNS4zOWwtMS40NS43MTdBNS4zIDUuMyAwIDAgMSAxMSA3aDEuMDQzbDIuMyAyLjE5OGEuNS41IDAgMCAxLS42OTIuNzIzTDExLjY0MiA4aC0uNzM3Yy0uMDkuNDY2LS4yNC44OTktLjQ0MSAxLjI4M2wuODkyLjQ5IDEuMjc4IDMuNTU0YS41LjUgMCAwIDEtLjk0LjM0MmwtMS4xNS0zLjItLjY1NS0uMzZDOS4zNzMgMTAuNjY1IDguNzE2IDExIDggMTFzLTEuMzc0LS4zMzUtMS44OS0uODkzbC0uNjU4LjM2MS0xLjE1IDMuMjAxYS41LjUgMCAxIDEtLjk0LS4zNDJsMS4yNzktMy41NTQuODk1LS40OTFBNC43IDQuNyAwIDAgMSA1LjA5NSA4aC0uNzRsLTIuMDEgMS45MmEuNS41IDAgMCAxLS42OS0uNzIyTDMuOTUyIDdINWE1LjMgNS4zIDAgMCAxIC4wNzUtLjg5MkwzLjYyMyA1LjM5IDIuNiAyLjY3MmEuNS41IDAgMSAxIC45MzktLjM0NGwuODg0IDIuMzQzLjkyNC40NTdjLjE3LS40MjguMzk3LS44MS42NjgtMS4xMjhoLjU3YTEuNSAxLjUgMCAxIDEgMi44MyAwaC41NjhjLjI3LjMxOC40OTcuNjk5LjY2NyAxLjEyNlpNOCA0YS41LjUgMCAxIDAgMC0xIC41LjUgMCAwIDAgMCAxWm0xLjc1MSAxLjU3MUEzLjMyNiAzLjMyNiAwIDAgMCA5LjQ3NiA1SDYuNTI0Yy0uMTA3LjE3NS0uMi4zNjctLjI3Ni41NzMtLjExLjI5NS0uMTg2LjYxOC0uMjIzLjk1N2E0LjM1NCA0LjM1NCAwIDAgMCAuMDkgMS40NjVjLjA3MS4yOTQuMTcyLjU2NS4yOTUuODA2LjE2OC4zMjguMzguNjAxLjYxNi44MDMuMjk1LjI1My42MzEuMzk2Ljk3NC4zOTYuMzQyIDAgLjY3OC0uMTQyLjk3My0uMzk0LjIzNy0uMjAzLjQ0OC0uNDc2LjYxNi0uODAzYTMuNjIgMy42MiAwIDAgMCAuMjk2LS44MDcgNC4yNjMgNC4yNjMgMCAwIDAgLjA5LTEuNDY2IDMuOTg4IDMuOTg4IDAgMCAwLS4yMjQtLjk1OVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJ1ZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25CdWxsc2V5ZSA9IGZ1bmN0aW9uIEV1aUljb25CdWxsc2V5ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTRBNiA2IDAgMSAwIDggMmE2IDYgMCAwIDAgMCAxMlptMCAxQTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRabTAtM2E0IDQgMCAxIDAgMC04IDQgNCAwIDAgMCAwIDhabTAtMWEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZabTAtMmExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CdWxsc2V5ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DYWxlbmRhciA9IGZ1bmN0aW9uIEV1aUljb25DYWxlbmRhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNCA0di0uOTk0QzE0IDIuNDUgMTMuNTUgMiAxMi45OTQgMkgxMXYxaC0xVjJINnYxSDVWMkgzLjAwNkMyLjQ1IDIgMiAyLjQ1IDIgMy4wMDZ2OS45ODhDMiAxMy41NSAyLjQ1IDE0IDMuMDA2IDE0aDkuOTg4QzEzLjU1IDE0IDE0IDEzLjU1IDE0IDEyLjk5NFY1SDJWNGgxMnptLTMtM2gxLjk5NEMxNC4xMDIgMSAxNSAxLjg5NyAxNSAzLjAwNnY5Ljk4OEEyLjAwNSAyLjAwNSAwIDAgMSAxMi45OTQgMTVIMy4wMDZBMi4wMDUgMi4wMDUgMCAwIDEgMSAxMi45OTRWMy4wMDZDMSAxLjg5OCAxLjg5NyAxIDMuMDA2IDFINVYwaDF2MWg0VjBoMXYxek00IDdoMnYxSDRWN3ptMyAwaDJ2MUg3Vjd6bTMgMGgydjFoLTJWN3pNNCA5aDJ2MUg0Vjl6bTMgMGgydjFIN1Y5em0zIDBoMnYxaC0yVjl6bS02IDJoMnYxSDR2LTF6bTMgMGgydjFIN3YtMXptMyAwaDJ2MWgtMnYtMXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNhbGVuZGFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNoYW5nZVBvaW50RGV0ZWN0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkNoYW5nZVBvaW50RGV0ZWN0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAxNGgxMi41YS41LjUgMCAwIDEgMCAxaC0xM2EuNS41IDAgMCAxLS41LS41di0xM2EuNS41IDAgMCAxIDEgMFYxNFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1IDYuNWEuNS41IDAgMCAwLS41LS41aC02YS41LjUgMCAwIDAtLjUuNVYxMkgzLjVhLjUuNSAwIDAgMCAwIDFoNWEuNS41IDAgMCAwIC41LS41VjdoNS41YS41LjUgMCAwIDAgLjUtLjVaTTcuMDIzIDMuMjA2QS4zMDEuMzAxIDAgMCAxIDcuMyAzaDIuNGMuMTIxIDAgLjIzLjA4MS4yNzcuMjA2YS4zNi4zNiAwIDAgMS0uMDY1LjM2M2wtMS4yIDEuMzMzYS4yOC4yOCAwIDAgMS0uNDI0IDBsLTEuMi0xLjMzM2EuMzYuMzYgMCAwIDEtLjA2NS0uMzYzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2hhbmdlUG9pbnREZXRlY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2hlY2sgPSBmdW5jdGlvbiBFdWlJY29uQ2hlY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNi41IDEyYS41MDIuNTAyIDAgMCAxLS4zNTQtLjE0NmwtNC00YS41MDIuNTAyIDAgMCAxIC43MDgtLjcwOEw2LjUgMTAuNzkzbDYuNjQ2LTYuNjQ3YS41MDIuNTAyIDAgMCAxIC43MDguNzA4bC03IDdBLjUwMi41MDIgMCAwIDEgNi41IDEyXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DaGVjazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DaGVja0luQ2lyY2xlRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxNkE4IDggMCAxIDEgOCAwYTggOCAwIDAgMSAwIDE2Wm0zLjY1LTEwLjg1N0w2LjkxIDkuOCA0LjM1IDcuMjg2YS41LjUgMCAwIDAtLjcuNzE0bDIuOTA5IDIuODU3YS41LjUgMCAwIDAgLjcgMGw1LjA5MS01YS41LjUgMCAxIDAtLjctLjcxNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2hlZXIgPSBmdW5jdGlvbiBFdWlJY29uQ2hlZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjkzNCAzLjA2M2ExLjUgMS41IDAgMCAxIC41NDcuMzIxbC4xMTIuMTE1IDYuMDcgNi45MTVhMS41IDEuNSAwIDAgMS0uNjQ2IDIuNDFsLS4xNDIuMDQtOS4wMzEgMi4wOTdBMS41IDEuNSAwIDAgMSAuMDM3IDEzLjE5bC4wNDMtLjE1OUwzLjA0IDQuMDJhMS41IDEuNSAwIDAgMSAxLjg5My0uOTU3Wk00LjAyNyA0LjI1bC0uMDM2LjA4My0yLjk2MSA5LjAxMWEuNS41IDAgMCAwIC40OTguNjU2bC4wOS0uMDEzIDIuOTM3LS42ODEtMS4zOTktMS41MDhhLjUuNSAwIDAgMSAuNjY2LS43NGwuMDY3LjA2IDEuNzg4IDEuOTI3IDIuNjM0LS42MTEtMy4xOTgtMy42MDFhLjUuNSAwIDAgMSAuNjgyLS43MjZsLjA2Ni4wNjIgMy41NTkgNC4wMDcgMS4yMjktLjI4NGEuNS41IDAgMCAwIC4xNS0uMDYzbC4wNjctLjA0OWEuNS41IDAgMCAwIC4wOTktLjYzMmwtLjA1My0uMDczLTYuMDctNi45MTZhLjUuNSAwIDAgMC0uMTM4LS4xMWwtLjA4Mi0uMDM1LS4wODgtLjAyYS41LjUgMCAwIDAtLjUwNy4yNTZabTExLjY2IDUuMDM5YTIuNSAyLjUgMCAwIDEtLjk3NSAzLjM5OS41LjUgMCAwIDEtLjQ4NS0uODc1IDEuNSAxLjUgMCAwIDAtMS40NTQtMi42MjQuNS41IDAgMCAxLS40ODUtLjg3NSAyLjUgMi41IDAgMCAxIDMuMzk5Ljk3NVptLTUuMDMtNi4yMDZhLjUuNSAwIDAgMSAuMzM4LjU0NGwtLjAyLjA4OC0uNjc3IDIuMDM1IDIuMDY4LS43MjFhLjUuNSAwIDAgMSAuNi4yMjVsLjAzNi4wODJhLjUuNSAwIDAgMS0uMjI1LjZsLS4wODIuMDM3TDkuNjcgNy4wMjhhLjUuNSAwIDAgMS0uNjU5LS41NWwuMDItLjA4Ljk5NS0zYS41LjUgMCAwIDEgLjYzMi0uMzE2Wk0xNC41IDRhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFaTTcuODYyLjQwM2EyLjUgMi41IDAgMCAxIC43MzUgMy40NTkuNS41IDAgMCAxLS44MzktLjU0NSAxLjUgMS41IDAgMSAwLTIuNTE2LTEuNjM0LjUuNSAwIDAgMS0uODM5LS41NDVBMi41IDIuNSAwIDAgMSA3Ljg2Mi40MDNaTTEzLjUgMmEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptLTMtMWEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptNC0xYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2hlZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2xpY2tMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkNsaWNrTGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgLjVhLjUuNSAwIDAgMC0xIDB2MWEuNS41IDAgMCAwIDEgMHYtMVptLTMuMTQ2LjY0NmEuNS41IDAgMSAwLS43MDguNzA4bDEgMWEuNS41IDAgMSAwIC43MDgtLjcwOGwtMS0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzIDdBNSA1IDAgMCAwIDMgN3Y0YTUgNSAwIDAgMCAxMCAwVjdabS0xIDBhNCA0IDAgMCAwLTQtNHY1YTEgMSAwIDAgMS0xIDFINHYyYTQgNCAwIDAgMCA4IDBWN1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgNC41QS41LjUgMCAwIDEgLjUgNGgxYS41LjUgMCAwIDEgMCAxaC0xYS41LjUgMCAwIDEtLjUtLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbGlja0xlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2xpY2tSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25DbGlja1JpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEgLjVhLjUuNSAwIDAgMSAxIDB2MWEuNS41IDAgMCAxLTEgMHYtMVptMy4xNDYuNjQ2YS41LjUgMCAwIDEgLjcwOC43MDhsLTEgMWEuNS41IDAgMCAxLS43MDgtLjcwOGwxLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyA3YTUgNSAwIDAgMSAxMCAwdjRhNSA1IDAgMCAxLTEwIDBWN1ptMSAwYTQgNCAwIDAgMSA0LTR2NWExIDEgMCAwIDAgMSAxaDN2MmE0IDQgMCAwIDEtOCAwVjdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiA0LjVhLjUuNSAwIDAgMC0uNS0uNWgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgLjUtLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbGlja1JpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNsb2NrID0gZnVuY3Rpb24gRXVpSWNvbkNsb2NrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSAxM0E1LjUwNiA1LjUwNiAwIDAgMSAyIDcuNUMyIDQuNDY3IDQuNDY3IDIgNy41IDJTMTMgNC40NjcgMTMgNy41IDEwLjUzMyAxMyA3LjUgMTNtMC0xMmE2LjUgNi41IDAgMSAwIDAgMTMgNi41IDYuNSAwIDAgMCAwLTEzbTMgNkg4VjMuNWEuNS41IDAgMCAwLTEgMHY0YS41LjUgMCAwIDAgLjUuNWgzYS41LjUgMCAwIDAgMC0xXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG9jazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DbG9ja0NvdW50ZXIgPSBmdW5jdGlvbiBFdWlJY29uQ2xvY2tDb3VudGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMzkgMy42MWE1LjUgNS41IDAgMCAwLTcuNzggNy43OGwuNTYyLjU2di0xLjYyMmEuNS41IDAgMCAxIDEgMHYyLjgyOWEuNS41IDAgMCAxLS41LjVIMS44NDNhLjUuNSAwIDAgMSAwLTFoMS42MjFsLS41Ni0uNTZBNi41IDYuNSAwIDEgMSA3LjUgMTRhLjUuNSAwIDAgMSAwLTEgNS41IDUuNSAwIDAgMCAzLjg5LTkuMzlaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjUgM2EuNS41IDAgMCAxIC41LjVWN2gyLjVhLjUuNSAwIDAgMSAwIDFoLTNhLjUuNSAwIDAgMS0uNS0uNXYtNGEuNS41IDAgMCAxIC41LS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvY2tDb3VudGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNsb3VkRHJpenpsZSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZERyaXp6bGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjM0OCAzLjc2MUEzLjk5NSAzLjk5NSAwIDAgMSA4IDdhLjUuNSAwIDAgMS0xIDAgMyAzIDAgMSAwLTQuODc4IDIuMzQuNS41IDAgMCAxLS42MjcuNzc5IDQgNCAwIDAgMSAzLjk3My02Ljg0IDUuNTAyIDUuNTAyIDAgMCAxIDEwLjA5NiA0LjM3LjUuNSAwIDEgMS0uOTItLjM5IDQuNSA0LjUgMCAxIDAtOC4yOTYtMy40OTdabS0xLjYxIDQuOTM1YS41LjUgMCAxIDEgLjc3NS42MzNsLTEuNDY2IDEuNzkyYS41LjUgMCAxIDEtLjc3NC0uNjMzbDEuNDY2LTEuNzkyWm0tMy4xMiAzLjY0N2EuNS41IDAgMCAxIC43NzQuNjM0bC0xLjUwNSAxLjg0YS41LjUgMCAwIDEtLjc3NC0uNjM0bDEuNTA1LTEuODRabTcuNjItMy42NDdhLjUuNSAwIDAgMSAuNzc1LjYzM2wtMS40NjYgMS43OTJhLjUuNSAwIDEgMS0uNzc0LS42MzNsMS40NjYtMS43OTJabS0zLjEyIDMuNjQ3YS41LjUgMCAwIDEgLjc3NC42MzRsLTEuNTA1IDEuODRhLjUuNSAwIDAgMS0uNzc0LS42MzRsMS41MDUtMS44NFptNy42Mi0zLjY0N2EuNS41IDAgMSAxIC43NzUuNjMzbC0xLjQ2NiAxLjc5MmEuNS41IDAgMSAxLS43NzQtLjYzM2wxLjQ2Ni0xLjc5MlptLTMuMTIgMy42NDdhLjUuNSAwIDAgMSAuNzc0LjYzNGwtMS41MDUgMS44NGEuNS41IDAgMCAxLS43NzQtLjYzNGwxLjUwNS0xLjg0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvdWREcml6emxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNsb3VkU3Rvcm15ID0gZnVuY3Rpb24gRXVpSWNvbkNsb3VkU3Rvcm15KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy40MjEgNC45M2EuNS41IDAgMSAxLS44Ny40OSAzIDMgMCAxIDAtNC40MyAzLjkxOC41LjUgMCAwIDEtLjYyNi43OCA0IDQgMCAwIDEgMy45NzMtNi44NGwuMDMyLjAxOFYzLjI4YTUuNSA1LjUgMCAxIDEgNy4wMDMgNy4zNTcuNS41IDAgMSAxLS4zNi0uOTM0IDQuNSA0LjUgMCAxIDAtNS43Ny01LjkyM2MuNDIuMzEuNzc4LjcwMSAxLjA1IDEuMTVoLS4wMDJaTTkuNiAxMWMuNjY5LjAwMi43OTQuNjcuMzYgMS4wMDNsLTQuNjggMy44ODJjLS40NTcuMzc4LTEuMDUzLS4yNi0uNjQzLS42ODlsMy4wOC0zLjE5M0E1NDExLjcgNTQxMS43IDAgMCAxIDUuMTEzIDEyYy0uNjY4LS4wMDEtLjc5My0uNjY5LS4zNi0xLjAwM2w0LjY4LTMuODgxYy40NTgtLjM3OSAxLjA1My4yNi42NDMuNjg4bC0zLjA4IDMuMTkzTDkuNiAxMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNsb3VkU3Rvcm15OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNsb3VkU3VubnkgPSBmdW5jdGlvbiBFdWlJY29uQ2xvdWRTdW5ueShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjc0NiA1LjAwNUE1LjUgNS41IDAgMCAxIDEwLjUgMTZINGE0IDQgMCAwIDEtMS42MS03LjY2M0E0LjQ3MyA0LjQ3MyAwIDAgMSAyLjAyOSA3SC41YS41LjUgMCAwIDEgMC0xaDEuNTI3YTQuNDc5IDQuNDc5IDAgMCAxIC45NTctMi4zMDlMMS42NDYgMi4zNTRhLjUuNSAwIDEgMSAuNzA4LS43MDhMMy42OSAyLjk4NEE0LjQ3OSA0LjQ3OSAwIDAgMSA2IDIuMDI3Vi41YS41LjUgMCAwIDEgMSAwdjEuNTI4YTQuNDkzIDQuNDkzIDAgMCAxIDIuMzA5Ljk1NmwxLjMzNy0xLjMzOGEuNS41IDAgMCAxIC43MDguNzA4TDEwLjAxNiAzLjY5Yy4zMTEuMzg4LjU2LjgzMS43MyAxLjMxNFpNNCAxNWg2LjVhNC41IDQuNSAwIDEgMC00LjE1Mi02LjIzOUEzLjk5NSAzLjk5NSAwIDAgMSA4IDEyYS41LjUgMCAxIDEtMSAwIDMgMyAwIDEgMC0zIDNabTUuNjkxLTkuOTRhMy41IDMuNSAwIDEgMC02LjMzIDIuOTkxIDQuMDI5IDQuMDI5IDAgMCAxIDIuMTA2LjIyNyA1LjUwNSA1LjUwNSAwIDAgMSA0LjIyNC0zLjIxOVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNsb3VkU3Vubnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2x1c3RlciA9IGZ1bmN0aW9uIEV1aUljb25DbHVzdGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuNSA3YTIuNSAyLjUgMCAxIDAgMC01IDIuNSAyLjUgMCAwIDAgMCA1em0wLTZhMy41IDMuNSAwIDAgMSAzLjQ2NSAzaDMuMTJhMS41IDEuNSAwIDEgMSAwIDFoLTMuMTJhMy40ODIgMy40ODIgMCAwIDEtLjY2MiAxLjU5NmwyLjEgMi4xQTMuNSAzLjUgMCAxIDEgOC4wMzYgMTJoLTMuMTJhMS41IDEuNSAwIDEgMSAwLS45OTloMy4xMmEzLjQ4MiAzLjQ4MiAwIDAgMSAuNjYyLTEuNTk2bC0yLjEtMi4xQTMuNSAzLjUgMCAxIDEgNC41IDF6TTEyIDQuNWEuNS41IDAgMSAwIDEgMCAuNS41IDAgMCAwLTEgMHptLS41IDkuNWEyLjUgMi41IDAgMSAxIDAtNSAyLjUgMi41IDAgMCAxIDAgNXpNNCAxMS41YS41LjUgMCAxIDEtMSAwIC41LjUgMCAwIDEgMSAwelwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNsdXN0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29sb3IgPSBmdW5jdGlvbiBFdWlJY29uQ29sb3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAxMWMxLjMzNCAxLjM5MyAyIDIuNDM1IDIgMy4xMjVDMTUgMTUuMTYxIDE0LjEwNSAxNiAxMyAxNmMtMS4xMDQgMC0yLS44NC0yLTEuODc1IDAtLjY5LjY2Ny0xLjczMiAyLTMuMTI1ek01Ljg1Ny4xNWw2LjM0IDYuNDUuMDE2LjAyLjMyNC4zMjFhMS41IDEuNSAwIDAgMSAuMTEgMi4wMDZsLS4xMDMuMTE0LTQuNDc0IDQuNTEzYTEuNSAxLjUgMCAwIDEtMi4xMjMuMDA4TDEuNDY0IDkuMDZhMS41IDEuNSAwIDAgMSAuMDA3LTIuMTJsNC40NzItNC40NWMuMTQ1LS4xNDYuMzEzLS4yNTQuNDkyLS4zMjdMNS4xNDQuODVhLjUuNSAwIDAgMSAuNzEzLS43em0xLjQ5NiAzLjA0OWEuNS41IDAgMCAwLS43MDUgMEwyLjE3NyA3LjY1YS40OTguNDk4IDAgMCAwLS4xNDguMzVoOS45NWEuNDk4LjQ5OCAwIDAgMC0uMTQ4LS4zNUw3LjM1MyAzLjJ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db2xvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db21wdXRlID0gZnVuY3Rpb24gRXVpSWNvbkNvbXB1dGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDNhMSAxIDAgMCAwLTEgMXY4YTEgMSAwIDAgMCAxIDFoOGExIDEgMCAwIDAgMS0xVjRhMSAxIDAgMCAwLTEtMUg0Wm0xMCA4djFhMiAyIDAgMCAxLTIgMmgtMXYyaC0xdi0ySDguNXYyaC0xdi0ySDZ2Mkg1di0ySDRhMiAyIDAgMCAxLTItMnYtMUgwdi0xaDJWOC41SDB2LTFoMlY2SDBWNWgyVjRhMiAyIDAgMCAxIDItMmgxVjBoMXYyaDEuNVYwaDF2MkgxMFYwaDF2MmgxYTIgMiAwIDAgMSAyIDJ2MWgydjFoLTJ2MS41aDJ2MWgtMlYxMGgydjFoLTJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJyZWN0XCIsIHtcbiAgICB3aWR0aDogNixcbiAgICBoZWlnaHQ6IDYsXG4gICAgeDogNSxcbiAgICB5OiA1LFxuICAgIHJ4OiAxXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29tcHV0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db25zb2xlID0gZnVuY3Rpb24gRXVpSWNvbkNvbnNvbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjE1NyAxMi4yMjQgNS43NjggOC4zMmEuNDA0LjQwNCAwIDAgMCAwLS42NGwtNC42MS0zLjkwNGEuNDA3LjQwNyAwIDAgMSAwLS42NDMuNjA4LjYwOCAwIDAgMSAuNzU5IDBsNC42MSAzLjkwNGMuNjMxLjUzNC42MyAxLjM5MyAwIDEuOTI2bC00LjYxIDMuOTA0YS42MDguNjA4IDAgMCAxLS43NiAwIC40MDcuNDA3IDAgMCAxIDAtLjY0M1pNOSAxMmg2djFIOXYtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnNvbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29udGFpbmVyID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRhaW5lcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0wIDIuNUEuNS41IDAgMCAxIC41IDJoMTVhLjUuNSAwIDAgMSAwIDFIMTV2MTBoLjVhLjUuNSAwIDAgMSAwIDFILjVhLjUuNSAwIDAgMSAwLTFIMVYzSC41YS41LjUgMCAwIDEtLjUtLjV6TTIgM2gxMnYxMEgyVjN6bTMgMmEuNS41IDAgMCAwLS41LjV2NWEuNS41IDAgMCAwIDEgMHYtNUEuNS41IDAgMCAwIDUgNXptNS41LjVhLjUuNSAwIDAgMSAxIDB2NWEuNS41IDAgMCAxLTEgMHYtNXpNOCA1YS41LjUgMCAwIDAtLjUuNXY1YS41LjUgMCAwIDAgMSAwdi01QS41LjUgMCAwIDAgOCA1elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRhaW5lcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db250aW51aXR5QWJvdmUgPSBmdW5jdGlvbiBFdWlJY29uQ29udGludWl0eUFib3ZlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS41IDNhLjUuNSAwIDAgMC0uNS41djlhLjUuNSAwIDAgMCAxIDB2LTlhLjUuNSAwIDAgMC0uNS0uNXptMyAwYS41LjUgMCAwIDAtLjUuNXY5YS41LjUgMCAwIDAgMSAwVjloNnYxLjVhLjUuNSAwIDAgMCAuODIuMzg0bDMtMi41YS41LjUgMCAwIDAgMC0uNzY4bC0zLTIuNUEuNS41IDAgMCAwIDExIDUuNVY3SDVWMy41YS41LjUgMCAwIDAtLjUtLjV6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250aW51aXR5QWJvdmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29udGludWl0eUFib3ZlQmVsb3cgPSBmdW5jdGlvbiBFdWlJY29uQ29udGludWl0eUFib3ZlQmVsb3coX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUgM2EuNS41IDAgMCAxIC41LjV2OWEuNS41IDAgMCAxLTEgMFY5SDR2MS41YS41LjUgMCAwIDEtLjgyLjM4NGwtMy0yLjVhLjUuNSAwIDAgMSAwLS43NjhsMy0yLjVBLjUuNSAwIDAgMSA0IDUuNVY3aDJWMy41YS41LjUgMCAwIDEgLjUtLjV6bTMgMGEuNS41IDAgMCAwLS41LjV2OWEuNS41IDAgMCAwIDEgMFY5aDJ2MS41YS41LjUgMCAwIDAgLjgyLjM4NGwzLTIuNWEuNS41IDAgMCAwIDAtLjc2OGwtMy0yLjVBLjUuNSAwIDAgMCAxMiA1LjVWN2gtMlYzLjVhLjUuNSAwIDAgMC0uNS0uNXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRpbnVpdHlBYm92ZUJlbG93OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNvbnRpbnVpdHlCZWxvdyA9IGZ1bmN0aW9uIEV1aUljb25Db250aW51aXR5QmVsb3coX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS41IDNhLjUuNSAwIDAgMSAuNS41djlhLjUuNSAwIDAgMS0xIDBWOUg1djEuNWEuNS41IDAgMCAxLS44Mi4zODRsLTMtMi41YS41LjUgMCAwIDEgMC0uNzY4bDMtMi41QS41LjUgMCAwIDEgNSA1LjVWN2g2VjMuNWEuNS41IDAgMCAxIC41LS41em0zIDBhLjUuNSAwIDAgMSAuNS41djlhLjUuNSAwIDAgMS0xIDB2LTlhLjUuNSAwIDAgMSAuNS0uNXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRpbnVpdHlCZWxvdzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db250aW51aXR5V2l0aGluID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlXaXRoaW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAzYS41LjUgMCAwIDAtLjUuNXY5YS41LjUgMCAwIDAgMSAwdi05QS41LjUgMCAwIDAgLjUgM3ptMTQuNS41YS41LjUgMCAwIDEgMSAwdjlhLjUuNSAwIDAgMS0xIDB2LTl6bS00LjcxMiAxLjU0N2EuNS41IDAgMCAxIC41MzIuMDY5bDMgMi41YS41LjUgMCAwIDEgMCAuNzY4bC0zIDIuNUEuNS41IDAgMCAxIDEwIDEwLjVWOUg2djEuNWEuNS41IDAgMCAxLS44Mi4zODRsLTMtMi41YS41LjUgMCAwIDEgMC0uNzY4bDMtMi41QS41LjUgMCAwIDEgNiA1LjVWN2g0VjUuNWEuNS41IDAgMCAxIC4yODgtLjQ1M3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRpbnVpdHlXaXRoaW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRyb2xzSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjA1IDEwYTIuNSAyLjUgMCAwIDEgNC45IDBoMS41NWEuNS41IDAgMSAxIDAgMWgtMS41NWEyLjUgMi41IDAgMCAxLTQuOSAwSDEuNWEuNS41IDAgMSAxIDAtMWg2LjU1Wm0tLjEtNGEyLjUgMi41IDAgMCAxLTQuOSAwSDEuNWEuNS41IDAgMCAxIDAtMWgxLjU1YTIuNSAyLjUgMCAwIDEgNC45IDBoNi41NWEuNS41IDAgMSAxIDAgMUg3Ljk1Wk00IDUuNWExLjUgMS41IDAgMSAwIDMgMCAxLjUgMS41IDAgMCAwLTMgMFptOCA1YTEuNSAxLjUgMCAxIDAtMyAwIDEuNSAxLjUgMCAwIDAgMyAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNvbnRyb2xzVmVydGljYWwgPSBmdW5jdGlvbiBFdWlJY29uQ29udHJvbHNWZXJ0aWNhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMCA3Ljk1YTIuNSAyLjUgMCAwIDEgMC00LjlWMS41YS41LjUgMCAxIDEgMSAwdjEuNTVhMi41IDIuNSAwIDAgMSAwIDQuOXY2LjU1YS41LjUgMCAxIDEtMSAwVjcuOTVabS00IC4xYTIuNSAyLjUgMCAwIDEgMCA0Ljl2MS41NWEuNS41IDAgMSAxLTEgMHYtMS41NWEyLjUgMi41IDAgMCAxIDAtNC45VjEuNWEuNS41IDAgMCAxIDEgMHY2LjU1Wk01LjUgMTJhMS41IDEuNSAwIDEgMCAwLTMgMS41IDEuNSAwIDAgMCAwIDNabTUtOGExLjUgMS41IDAgMSAwIDAgMyAxLjUgMS41IDAgMCAwIDAtM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRyb2xzVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29weSA9IGZ1bmN0aW9uIEV1aUljb25Db3B5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuNCAwYy4yMzUgMCAuNDYuMDk5LjYyMi4yNzNsMi43NDMgM2MuMTUxLjE2Mi4yMzUuMzc4LjIzNS42MDJ2OS4yNWEuODY3Ljg2NyAwIDAgMS0uODU3Ljg3NUgzLjg1N0EuODY3Ljg2NyAwIDAgMSAzIDEzLjEyNVYuODc1QzMgLjM5MiAzLjM4NCAwIDMuODU3IDBIMTEuNFpNMTQgNGgtMi42YS40LjQgMCAwIDEtLjQtLjRWMUg0djEyaDEwVjRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDFIMmExIDEgMCAwIDAtMSAxdjEzYTEgMSAwIDAgMCAxIDFoMTBhMSAxIDAgMCAwIDEtMXYtMWgtMXYxSDJWMmgxVjFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db3B5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNvcHlDbGlwYm9hcmQgPSBmdW5jdGlvbiBFdWlJY29uQ29weUNsaXBib2FyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMi43MjlWMmExIDEgMCAwIDEgMS0xaDJ2MUgzdjEyaDR2MUgzYTEgMSAwIDAgMS0xLTFWMi43Mjl6TTE0IDVWMmExIDEgMCAwIDAtMS0xaC0ydjFoMnYzaDF6bS0xIDFoMnY5SDhWNmg1VjVIOGExIDEgMCAwIDAtMSAxdjlhMSAxIDAgMCAwIDEgMWg3YTEgMSAwIDAgMCAxLTFWNmExIDEgMCAwIDAtMS0xaC0ydjF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDEwaDVWOUg5djF6bTAtMmg1VjdIOXYxem0wIDRoNXYtMUg5djF6bTAgMmg1di0xSDl2MXptMi0xMlYxYTEgMSAwIDAgMC0xLTFINmExIDEgMCAwIDAtMSAxdjFoMVYxaDR2MWgxek01IDNoNlYySDV2MXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvcHlDbGlwYm9hcmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ3Jvc3MgPSBmdW5jdGlvbiBFdWlJY29uQ3Jvc3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjI5MyA4IDMuMTQ2IDMuODU0YS41LjUgMCAxIDEgLjcwOC0uNzA4TDggNy4yOTNsNC4xNDYtNC4xNDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDQuMTQ3IDQuMTQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtNC4xNDYgNC4xNDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNyb3NzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNyb3NzSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uQ3Jvc3NJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignY3Jvc3NJbkNpcmNsZScpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGNsaXBQYXRoOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSwgXCIpXCIpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm04Ljc1NSA4IDIuNjQgMi42NDFhLjUzNC41MzQgMCAxIDEtLjc1NC43NTVMOCA4Ljc1NWwtMi42NDEgMi42NGEuNTM0LjUzNCAwIDEgMS0uNzU1LS43NTRMNy4yNDUgOGwtMi42NC0yLjY0MWEuNTM0LjUzNCAwIDEgMSAuNzU0LS43NTVMOCA3LjI0NWwyLjY0MS0yLjY0YS41MzQuNTM0IDAgMSAxIC43NTUuNzU0TDguNzU1IDhabTQuOTA0LTUuNjZjMy4xMjEgMy4xMjEgMy4xMjEgOC4xOTkgMCAxMS4zMi0zLjEyIDMuMTItOC4xOTggMy4xMi0xMS4zMTggMEMtLjc4IDEwLjUzOC0uNzggNS40NiAyLjM0IDIuMzRjMy4xMi0zLjEyIDguMTk4LTMuMTIgMTEuMzE5IDBabS0uNjY1LjY2NmE3LjA2MiA3LjA2MiAwIDEgMC05Ljk4OCA5Ljk4OCA3LjA2MiA3LjA2MiAwIDAgMCA5Ljk4OC05Ljk4OFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwiY2xpcFBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJylcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI2ZmZlwiLFxuICAgIGQ6IFwiTTAgMGgxNnYxNkgwelwiXG4gIH0pKSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Dcm9zc0luQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNyb3NzSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uQ3Jvc3NJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNiA4QTggOCAwIDEgMSAwIDhhOCA4IDAgMCAxIDE2IDBabS0xIDBBNyA3IDAgMSAxIDEgOGE3IDcgMCAwIDEgMTQgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNyb3NzSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ3Jvc3NoYWlycyA9IGZ1bmN0aW9uIEV1aUljb25Dcm9zc2hhaXJzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS44MjIgMS44NzRhLjUuNSAwIDEgMSAuMzM1Ljk0MiA1LjUxNyA1LjUxNyAwIDAgMC0zLjM0IDMuMzQxLjUuNSAwIDEgMS0uOTQzLS4zMzUgNi41MTcgNi41MTcgMCAwIDEgMy45NDgtMy45NDhaTTEuODY0IDEwLjE1YS41LjUgMCAxIDEgLjk0NC0uMzMgNS41MTcgNS41MTcgMCAwIDAgMy4zNjUgMy4zNy41LjUgMCAwIDEtLjMzMy45NDMgNi41MTcgNi41MTcgMCAwIDEtMy45NzYtMy45ODNabTguMzAyIDMuOTgxYS41LjUgMCAxIDEtLjMzMy0uOTQzIDUuNTE3IDUuNTE3IDAgMCAwIDMuMzQ3LTMuMzMyLjUuNSAwIDEgMSAuOTQxLjMzNyA2LjUxNyA2LjUxNyAwIDAgMS0zLjk1NSAzLjkzOFptMy45NjgtOC4yODVhLjUuNSAwIDEgMS0uOTQzLjMzMUE1LjUxNyA1LjUxNyAwIDAgMCA5Ljg1IDIuODJhLjUuNSAwIDAgMSAuMzM3LS45NDIgNi41MTcgNi41MTcgMCAwIDEgMy45NDYgMy45NjhaTTguNSAzLjVhLjUuNSAwIDAgMS0xIDBWLjk5N2EuNS41IDAgMCAxIDEgMFYzLjVabS00Ljk5NyA0YS41LjUgMCAwIDEgMCAxSDFhLjUuNSAwIDAgMSAwLTFoMi41MDNaTTcuNSAxMi40OTdhLjUuNSAwIDAgMSAxIDBWMTVhLjUuNSAwIDEgMS0xIDB2LTIuNTAzWk0xMi40OTcgOC41YS41LjUgMCAwIDEgMC0xSDE1YS41LjUgMCAxIDEgMCAxaC0yLjUwM1pNOCA5YTEgMSAwIDEgMSAwLTIgMSAxIDAgMCAxIDAgMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNyb3NzaGFpcnM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ3VycmVuY3kgPSBmdW5jdGlvbiBFdWlJY29uQ3VycmVuY3koX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xMi45NSAxLjYzNiAxLjQxNCAxLjQxNC0yLjE5MiAyLjE5M0MxMi42OTUgNi4wMzMgMTMgNi45OCAxMyA4YzAgMS4wMi0uMzA1IDEuOTY3LS44MjggMi43NTdsMi4xOTIgMi4xOTMtMS40MTQgMS40MTQtMi4xOTMtMi4xOTJBNC45NzcgNC45NzcgMCAwIDEgOCAxM2E0Ljk3NyA0Ljk3NyAwIDAgMS0yLjc1Ny0uODI4TDMuMDUgMTQuMzY0IDEuNjM2IDEyLjk1bDIuMTkyLTIuMTkzQTQuOTc3IDQuOTc3IDAgMCAxIDMgOGMwLTEuMDIuMzA1LTEuOTY3LjgyOC0yLjc1N0wxLjYzNiAzLjA1IDMuMDUgMS42MzZsMi4xOTMgMi4xOTJBNC45NzcgNC45NzcgMCAwIDEgOCAzYzEuMDIgMCAxLjk2Ny4zMDUgMi43NTcuODI4bDIuMTkzLTIuMTkyWk04IDVhMi45OSAyLjk5IDAgMCAwLTEuMTY4LjIzNmwtLjEyNi4wNTctLjIxOC4xMTYtLjEzMi4wODEtLjA3My4wNWEzLjAxMyAzLjAxMyAwIDAgMC0uMjQxLjE4N2wtLjExMy4xMDMtLjE0Ny4xNWMtLjA1LjA1NC0uMDk3LjExLS4xNDIuMTY4bC0uMS4xMzUtLjA1LjA3My0uMDYuMDk3Yy0uMDUuMDgyLS4wOTYuMTY2LS4xMzcuMjUzbC0uMDU3LjEyNkEyLjk5IDIuOTkgMCAwIDAgNSA4YzAgLjQxNC4wODQuODA5LjIzNiAxLjE2OGwuMDU3LjEyNi4xMTYuMjE4LjA4MS4xMzJjLjA1OS4wODkuMTIxLjE3NS4xODkuMjU3bC4xNS4xNy4xNTEuMTQ3Yy4wNTYuMDUxLjExNC4xLjE3NC4xNDdsLjE0Mi4xMDVjLjA1NC4wMzcuMTA5LjA3Mi4xNjUuMTA2bC0uMTI0LS4wNzkuMDkyLjA2LjA5NC4wNTVjLjQzNi4yNDcuOTQuMzg4IDEuNDc3LjM4OGEyLjk5IDIuOTkgMCAwIDAgMS4xNjgtLjIzNmwuMTI1LS4wNTYuMjEzLS4xMTMuMTUxLS4wOTQuMDUtLjAzNGEzLjAxMSAzLjAxMSAwIDAgMCAuMzIzLS4yNThsLS4xNS4xMjkuMDktLjA3NS4xNjgtLjE1OS4wOC0uMDg0Yy4wNTEtLjA1Ni4xLS4xMTQuMTQ3LS4xNzRsLjEwNS0uMTQyLjEwNi0uMTY1Yy4wNDctLjA4LjA5MS0uMTYxLjEzMS0uMjQ1bC4wNTctLjEyNkEyLjk5IDIuOTkgMCAwIDAgMTEgOGEyLjk5IDIuOTkgMCAwIDAtLjIzNi0xLjE2OGwtLjA1Ni0uMTI1LS4xMTItLjIxMS0uMDk2LS4xNTUtLjAzMy0uMDQ5YTMuMDExIDMuMDExIDAgMCAwLS4yNTgtLjMyMmwuMTI5LjE1LS4wNzUtLjA5LS4xNTktLjE2OC0uMDg0LS4wOGEzLjAxNSAzLjAxNSAwIDAgMC0uMTc0LS4xNDdsLS4xODMtLjEzMi0uMTI0LS4wNzlhMi45OTMgMi45OTMgMCAwIDAtLjI0NS0uMTMxbC0uMTI2LS4wNTdBMi45OSAyLjk5IDAgMCAwIDggNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkN1cnJlbmN5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkN1dCA9IGZ1bmN0aW9uIEV1aUljb25DdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJtNS4xNDIgMTEuMDc0LTEuOTEyLjU0OGEyLjUzMiAyLjUzMiAwIDEgMS0xLjM5NS00Ljg2N2wxLjk0Ny0uNTU5YTIuNTMyIDIuNTMyIDAgMCAxIDIuNTU1LjcxM2wxLjUzLTUuMzM1Yy4xMzktLjQ4NS42LS44OTcgMS4xNTktMS4yMzguMjctLjE2NC41Mi0uMjc4Ljc3OS0uMzIuODE0LS4xMzIgMS41MDMuNTU4IDEuMjYxIDEuNDIyTDkuNTc0IDYuNjQzbDQuOTg4LTEuNDNjLjg2NC0uMjQyIDEuNTU0LjQ0NyAxLjQyMiAxLjI2LS4wNDIuMjYtLjE1Ni41MS0uMzIuNzgtLjM0MS41Ni0uNzUzIDEuMDItMS4yMzggMS4xNkw5LjUyMyA5LjgxN2EyLjUzIDIuNTMgMCAwIDEgLjU2IDIuNGwtLjU2IDEuOTQ3YTIuNTMyIDIuNTMyIDAgMSAxLTQuODY3LTEuMzk1bC40ODYtMS42OTZabS4zMy0xLjE0OC40OC0xLjY3M2ExLjUyIDEuNTIgMCAwIDAtMS44OS0xLjA4M2wtMS45NDguNTU4YTEuNTIgMS41MiAwIDAgMCAuODM3IDIuOTJsMi41Mi0uNzIyWm0zLjc3My0yLjEzNS0uMzMgMS4xNDggNS4yMzItMS41Yy4zMjQtLjA5MyAxLjE4Mi0xLjM5LjY5NC0xLjI1M0w5LjI0NSA3Ljc5MVpNNS42MyAxMy4wNDlhMS41MiAxLjUyIDAgMCAwIDIuOTIuODM3bC41NTktMS45NDdhMS41MiAxLjUyIDAgMCAwLTEuNTUzLTEuOTM1bDIuNTM3LTguODQ1Yy4xMzYtLjQ4OC0xLjE2LjM3LTEuMjUzLjY5NEw1LjYzIDEzLjA1Wm0uOTczLjI3OS41NTktMS45NDdhLjUwNi41MDYgMCAxIDEgLjk3My4yNzlsLS41NTggMS45NDdhLjUwNi41MDYgMCAxIDEtLjk3NC0uMjhabS0zLjkzLTMuNjUzYS41MDYuNTA2IDAgMSAxLS4yOC0uOTczbDEuOTQ3LS41NThhLjUwNi41MDYgMCAwIDEgLjI4Ljk3M2wtMS45NDguNTU4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3V0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRhdGFiYXNlID0gZnVuY3Rpb24gRXVpSWNvbkRhdGFiYXNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAxMmgxMnYtMS45N2MtMS4yMjUuNTgyLTMuNDU0Ljk3LTYgLjk3cy00Ljc3NS0uMzg4LTYtLjk3VjEyWm0tMSAwVjNjMC0xLjEwNSAzLjEzNC0yIDctMnM3IC44OTUgNyAydjljMCAxLjEwNS0zLjEzNCAyLTcgMnMtNy0uODk1LTctMlptMS0zaDEyVjcuMDNjLTEuMjI1LjU4Mi0zLjQ1NC45Ny02IC45N3MtNC43NzUtLjM4OC02LS45N1Y5Wm0wLTQuOTdWNmgxMlY0LjAzYy0xLjIyNS41ODItMy40NTQuOTctNiAuOTdzLTQuNzc1LS4zODgtNi0uOTdabTEwLjY3NS0xLjQ4M0MxMS40NjcgMi4yMDIgOS43OTUgMiA4IDJjLTEuNzk0IDAtMy40NjcuMjAyLTQuNjc1LjU0Ny0uNDkyLjE0LS44OC4yOTgtMS4xMzYuNDUzLjI1Ni4xNTUuNjQ0LjMxMiAxLjEzNi40NTNDNC41MzMgMy43OTggNi4yMDUgNCA4IDRjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNC44OC0uMjk4IDEuMTM2LS40NTMtLjI1Ni0uMTU1LS42NDQtLjMxMi0xLjEzNi0uNDUzWk0yIDZjLjI1Ny4xNTUuODMzLjMxMiAxLjMyNS40NTNDNC41MzMgNi43OTggNi4yMDUgNyA4IDdjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNCAxLjA3LS4yOTggMS4zMjctLjQ1M0gyWm0wIDNjLjI1Ny4xNTUuODMzLjMxMiAxLjMyNS40NTNDNC41MzMgOS43OTggNi4yMDUgMTAgOCAxMGMxLjc5NCAwIDMuNDY3LS4yMDIgNC42NzUtLjU0Ny40OTItLjE0IDEuMDctLjI5OCAxLjMyNy0uNDUzSDJabTAgM2MuMjU3LjE1NS44MzMuMzEyIDEuMzI1LjQ1M0M0LjUzMyAxMi43OTggNi4yMDUgMTMgOCAxM2MxLjc5NCAwIDMuNDY3LS4yMDIgNC42NzUtLjU0Ny40OTItLjE0IDEuMDctLjI5OCAxLjMyNy0uNDUzSDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25EYXRhYmFzZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25EZXNrdG9wID0gZnVuY3Rpb24gRXVpSWNvbkRlc2t0b3AoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMiAyYTEgMSAwIDAgMC0xIDF2N2ExIDEgMCAwIDAgMSAxaDRsLTEgM0gzLjVhLjUuNSAwIDAgMCAwIDFoOWEuNS41IDAgMCAwIDAtMUgxMWwtMS0zaDRhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFIMnptMCA4VjNoMTJ2N0gyem01IDFoMmwxIDNINmwxLTN6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41IDZhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMWgtMXptMyAwYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFoLTF6bTIuNS41YS41LjUgMCAwIDEgLjUtLjVoMWEuNS41IDAgMCAxIDAgMWgtMWEuNS41IDAgMCAxLS41LS41elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRGVza3RvcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25EaWZmID0gZnVuY3Rpb24gRXVpSWNvbkRpZmYoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDEuNWEuNS41IDAgMCAwLTEgMFY0SDEuNWEuNS41IDAgMCAwIDAgMUg0djIuNWEuNS41IDAgMCAwIDEgMFY1aDIuNWEuNS41IDAgMCAwIDAtMUg1VjEuNVptMyAxMGEuNS41IDAgMCAxIC41LS41aDZhLjUuNSAwIDAgMSAwIDFoLTZhLjUuNSAwIDAgMS0uNS0uNVptNC44NTQtNy42NDZhLjUuNSAwIDAgMC0uNzA4LS43MDhsLTkgOWEuNS41IDAgMCAwIC43MDguNzA4bDktOVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRpZmY7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRGlzY3VzcyA9IGZ1bmN0aW9uIEV1aUljb25EaXNjdXNzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC45NjcgMTAuODY0Yy4zMzIuNzg3IDEuMDg1IDEuMzM3IDEuOTYyIDEuMzM3aDMuNjczbDIuNzU1IDIuOHYtMi44YzEuMTg0IDAgMi4xNDMtMS4wMDMgMi4xNDMtMi4yNFY2LjYwNGMwLTEuMjM3LS45Ni0yLjI0LTIuMTQzLTIuMjRoLTEuMDcxdjQuMzM0YzAgMS4xOTctLjg5NiAyLjE2Ny0yIDIuMTY3aC01LjMyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC45MDUgOC43MThoNC4xNjZjLjU5MiAwIDEuMDcyLS41MDIgMS4wNzItMS4xMlY0LjI0YzAtLjYxOC0uNDgtMS4xMi0xLjA3Mi0xLjEySDIuNjQzYy0uNTkyIDAtMS4wNzIuNTAyLTEuMDcyIDEuMTJWNy42YzAgLjYxNy40OCAxLjExOSAxLjA3MiAxLjExOWgxLjA3MXYxLjQ1MmwxLjE5MS0xLjQ1MlptLjQ5MyAxLjEyLTIuNzU1IDIuNzk4VjkuODM3QzEuNDU5IDkuODM3LjUgOC44MzUuNSA3LjU5OFY0LjI0Qy41IDMuMDAzIDEuNDYgMiAyLjY0MyAySDkuMDdjMS4xODQgMCAyLjE0MyAxLjAwMyAyLjE0MyAyLjI0djMuMzU4YzAgMS4yMzctLjk2IDIuMjQtMi4xNDMgMi4yNEg1LjM5OFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRpc2N1c3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRG9jdW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uRG9jdW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC44IDBjLjI3NCAwIC41MzcuMTEzLjcyNi4zMTJsMy4yIDMuNDI4Yy4xNzYuMTg2LjI3NC40MzMuMjc0LjY4OVYxNWExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTFoOC44Wk0xNCA1aC0zLjVhLjUuNSAwIDAgMS0uNS0uNVYxSDJ2MTRoMTJWNVptLTguNSA3YS41LjUgMCAxIDEgMC0xaDVhLjUuNSAwIDEgMSAwIDFoLTVabTAtM2EuNS41IDAgMCAxIDAtMWg1YS41LjUgMCAxIDEgMCAxaC01WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG9jdW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRG9jdW1lbnRFZGl0ID0gZnVuY3Rpb24gRXVpSWNvbkRvY3VtZW50RWRpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTguNTA1IDguOTk1IDYuNDUzLTYuNDQtMS41LTEuNS02LjQ1MyA2LjQ0IDEuNSAxLjVaTTEyLjk2OC4xOWMuMjU4LS4yMzguNjU3LS4yNi45MSAwbDEuOTI4IDEuOTI5YS42NDIuNjQyIDAgMCAxIDAgLjkwOWwtNi43OCA2Ljc4NEEuNjQxLjY0MSAwIDAgMSA4LjU3IDEwSDYuNjQzQS42NDMuNjQzIDAgMCAxIDYgOS4zNTdWNy40M2MwLS4xNy4wNjctLjMzNS4xODgtLjQ1NUwxMi45NjguMTlaTTQuNSAxM2EuNS41IDAgMSAxIDAtMWg3YS41LjUgMCAxIDEgMCAxaC03Wm00LTEyYS41LjUgMCAwIDEgMCAxSDJ2MTNoMTJWNy41YS41LjUgMCAxIDEgMSAwVjE1YTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjJhMSAxIDAgMCAxIDEtMWg2LjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb2N1bWVudEVkaXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRG9jdW1lbnRhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Eb2N1bWVudGF0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAzLjVhLjUuNSAwIDEgMS0xIDAgLjUuNSAwIDAgMSAxIDB6TTkgNXYzaDF2MUg4VjZIN1Y1aDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy44NTUgMTQuMTQ3YTEuMzQgMS4zNCAwIDAgMS0uMTU4LS4yNDZBMS45OTggMS45OTggMCAwIDEgMTMuNSAxM2MwLS40MTQuMTAzLS43MTMuMTk3LS45MDFhMS4zNCAxLjM0IDAgMCAxIC4xNTgtLjI0NmwuMDAzLS4wMDVBLjUuNSAwIDAgMCAxNCAxMS41Vi41YS41LjUgMCAwIDAtLjUtLjVIMy40NjFsLS4wODMuMDA1YTIuOTU3IDIuOTU3IDAgMCAwLTEuMTAyLjI5OCAyLjI1NyAyLjI1NyAwIDAgMC0uODguNzYzQzEuMTQ4IDEuNDQgMSAxLjkxMyAxIDIuNVYxM2MwIC40NjMuMTE3Ljg0My4zMTggMS4xNDUuMi4yOTguNDYyLjQ5MS43MDguNjE1YTIuMzQ0IDIuMzQ0IDAgMCAwIC45NC4yNEgzdi0xYy0uMDA1IDAtLjAxNSAwLS4wMjktLjAwMmExLjM0NCAxLjM0NCAwIDAgMS0uNDk4LS4xMzMuODE3LjgxNyAwIDAgMS0uMzIzLS4yNzVDMi4wNyAxMy40NyAyIDEzLjI4NyAyIDEzcy4wNy0uNDcuMTUtLjU5YS44MTcuODE3IDAgMCAxIC4zMjQtLjI3NUExLjM0NCAxLjM0NCAwIDAgMSAzIDEyaDkuNjU4Yy0uMDkxLjI3LS4xNTguNjA1LS4xNTggMXMuMDY3LjczLjE1OCAxSDh2MWg1LjVhLjUuNSAwIDAgMCAuMzU5LS44NDhsLS4wMDQtLjAwNXptLS4wMDEgMCAuMDAyLjAwMi0uMDAyLS4wMDJ6TTIuNzI0IDEuMTk3Yy4wOTItLjA0Ni4xODYtLjA4Mi4yNzYtLjExQzMgMi45MTggMy4wMDEgMTEgMi45OTkgMTFoLS4wMzNhMS45NzcgMS45NzcgMCAwIDAtLjI4My4wMyAyLjM0NCAyLjM0NCAwIDAgMC0uNjU3LjIxTDIgMTEuMjU0VjIuNWMwLS40MTMuMTAyLS42ODkuMjI5LS44NzkuMTI4LS4xOTMuMzA0LS4zMjguNDk1LS40MjR6TTQgMTFWMWg5djEwSDR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDEzSDR2Mi41YS41LjUgMCAwIDAgLjg1NC4zNTRsLjY0Ni0uNjQ3LjY0Ni42NDdBLjUuNSAwIDAgMCA3IDE1LjVWMTN6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb2N1bWVudGF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRvY3VtZW50cyA9IGZ1bmN0aW9uIEV1aUljb25Eb2N1bWVudHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjggMGMuMjc0IDAgLjUzNy4xMTMuNzI2LjMxMmwzLjIgMy40MjhjLjE3Ni4xODYuMjc0LjQzMy4yNzQuNjg5VjEzYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjFhMSAxIDAgMCAxIDEtMWg2LjhaTTEyIDVIOC41YS41LjUgMCAwIDEtLjUtLjVWMUgydjEyaDEwVjVabS03LjUgNmEuNS41IDAgMSAxIDAtMWg1YS41LjUgMCAxIDEgMCAxaC01Wm0wLTNhLjUuNSAwIDAgMSAwLTFoNWEuNS41IDAgMSAxIDAgMWgtNVptMSA4YS41LjUgMCAxIDEgMC0xSDE0VjYuNWEuNS41IDAgMSAxIDEgMFYxNWExIDEgMCAwIDEtMSAxSDUuNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Eb3QgPSBmdW5jdGlvbiBFdWlJY29uRG90KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiY2lyY2xlXCIsIHtcbiAgICBjeDogOCxcbiAgICBjeTogOCxcbiAgICByOiA0XG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG90OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRvdEluQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvbkRvdEluQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggLjVjNC4xMzYgMCA3LjUgMy4zNjQgNy41IDcuNXMtMy4zNjQgNy41LTcuNSA3LjVTLjUgMTIuMTM2LjUgOCAzLjg2NC41IDggLjVabTAgLjg4MmE2LjYxOCA2LjYxOCAwIDEgMCAwIDEzLjIzNkE2LjYxOCA2LjYxOCAwIDAgMCA4IDEuMzgyWlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgOGExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb3RJbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Eb3VibGVBcnJvd0xlZnQgPSBmdW5jdGlvbiBFdWlJY29uRG91YmxlQXJyb3dMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguMTM1IDE0LjA0M2EuNzUuNzUgMCAwIDAgLjAyNS0xLjA2bC00LjU5MS00LjgxYS4yNS4yNSAwIDAgMSAwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDEgMC0xLjA4NC0xLjAzNWwtNC41OTEgNC44MWExLjc1IDEuNzUgMCAwIDAgMCAyLjQxNmw0LjU5IDQuODFjLjI4Ny4zLjc2MS4zMSAxLjA2MS4wMjRaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0LjEzNSAxNC4wNDNhLjc1Ljc1IDAgMCAwIC4wMjUtMS4wNmwtNC41OTEtNC44MWEuMjUuMjUgMCAwIDEgMC0uMzQ2bDQuNTktNC44MWEuNzUuNzUgMCAxIDAtMS4wODQtMS4wMzVsLTQuNTkxIDQuODFhMS43NSAxLjc1IDAgMCAwIDAgMi40MTZsNC41OSA0LjgxYy4yODcuMy43NjEuMzEgMS4wNjEuMDI0WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvdWJsZUFycm93TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Eb3VibGVBcnJvd1JpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkRvdWJsZUFycm93UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi4yMzIgMTQuMDQzYS43NS43NSAwIDAgMS0uMDI1LTEuMDZsNC41OTEtNC44MWEuMjUuMjUgMCAwIDAgMC0uMzQ2bC00LjU5LTQuODFhLjc1Ljc1IDAgMCAxIDEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwIDEgMCAyLjQxNmwtNC41OSA0LjgxYS43NS43NSAwIDAgMS0xLjA2LjAyNFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC4yMzIgMTQuMDQzYS43NS43NSAwIDAgMS0uMDI1LTEuMDZsNC41OTEtNC44MWEuMjUuMjUgMCAwIDAgMC0uMzQ2bC00LjU5LTQuODFhLjc1Ljc1IDAgMCAxIDEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwIDEgMCAyLjQxNmwtNC41OSA0LjgxYS43NS43NSAwIDAgMS0xLjA2LjAyNFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb3VibGVBcnJvd1JpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRvd25sb2FkID0gZnVuY3Rpb24gRXVpSWNvbkRvd25sb2FkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOSA5LjExNCAxLjg1LTEuOTQzYS41Mi41MiAwIDAgMSAuNzcgMGMuMjE0LjIyOC4yMTQuNiAwIC44MjlsLTEuOTUgMi4wNWExLjU1MiAxLjU1MiAwIDAgMS0yLjMxIDBMNS40MSA4YS42MTcuNjE3IDAgMCAxIDAtLjgyOS41Mi41MiAwIDAgMSAuNzcgMEw4IDkuMDgyVi41NTZDOCAuMjQ5IDguMjI0IDAgOC41IDBzLjUuMjQ5LjUuNTU2djguNTU4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMTMuMDA2VjEwaC0xdjMuMDA2YS45OTUuOTk1IDAgMCAxLS45OTQuOTk0SDMuMDFhLjk5NS45OTUgMCAwIDEtLjk5NC0uOTk0VjEwaC0xdjMuMDA2YzAgMS4xLjg5MiAxLjk5NCAxLjk5NCAxLjk5NGgxMC45OTZjMS4xIDAgMS45OTQtLjg5MyAxLjk5NC0xLjk5NHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvd25sb2FkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAyaDJhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMlpNMS41IDFhLjUuNSAwIDAgMSAuNS41djEzYS41LjUgMCAxIDEtMSAwdi0xM2EuNS41IDAgMCAxIC41LS41Wm0xMyAwYS41LjUgMCAwIDEgLjUuNXYxM2EuNS41IDAgMSAxLTEgMHYtMTNhLjUuNSAwIDAgMSAuNS0uNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JEaXN0cmlidXRlVmVydGljYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDVoOGEyIDIgMCAwIDEgMiAydjJhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDEgMi0yWk0xLjUgMWgxM2EuNS41IDAgMSAxIDAgMWgtMTNhLjUuNSAwIDAgMSAwLTFabTAgMTNoMTNhLjUuNSAwIDEgMSAwIDFoLTEzYS41LjUgMCAxIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25Cb3R0b20oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDFoMmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWM2EyIDIgMCAwIDEgMi0yWk0xLjUgMTRoMTNhLjUuNSAwIDEgMSAwIDFoLTEzYS41LjUgMCAxIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduQm90dG9tOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkNlbnRlciA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25DZW50ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDRIN1YxLjVhLjUuNSAwIDAgMSAxIDBWNFptMCA4djIuNWEuNS41IDAgMSAxLTEgMFYxMmgxWk0zIDVoOWEyIDIgMCAwIDEgMiAydjJhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDEgMi0yWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkxlZnQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRlbUFsaWduTGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgNWg4YTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY3YTIgMiAwIDAgMSAyLTJaTTEuNSAxYS41LjUgMCAwIDEgLjUuNXYxM2EuNS41IDAgMSAxLTEgMHYtMTNhLjUuNSAwIDAgMSAuNS0uNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbk1pZGRsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgN3YxSDEuNWEuNS41IDAgMCAxIDAtMUg0Wm04IDBoMi41YS41LjUgMCAxIDEgMCAxSDEyVjdaTTcgMWgyYTIgMiAwIDAgMSAyIDJ2OWEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlYzYTIgMiAwIDAgMSAyLTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25NaWRkbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRlbUFsaWduUmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDVoOGEyIDIgMCAwIDEgMiAydjJhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDEgMi0yWm0xMS41LTRhLjUuNSAwIDAgMSAuNS41djEzYS41LjUgMCAxIDEtMSAwdi0xM2EuNS41IDAgMCAxIC41LS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduUmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduVG9wID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgM2gyYTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJaTTEuNSAxaDEzYS41LjUgMCAxIDEgMCAxaC0xM2EuNS41IDAgMCAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiA4aDVhMSAxIDAgMCAxIDEgMXY1SDNhMSAxIDAgMCAxLTEtMVY4Wm0xLTdoMTBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlYzYTIgMiAwIDAgMSAyLTJabTAgMWExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDAgMCAxIDFoMTBhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFIM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDhoNXY1YTEgMSAwIDAgMS0xIDFIOFY5YTEgMSAwIDAgMSAxLTFaTTMgMWgxMGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJIM2EyIDIgMCAwIDEtMi0yVjNhMiAyIDAgMCAxIDItMlptMCAxYTEgMSAwIDAgMC0xIDF2MTBhMSAxIDAgMCAwIDEgMWgxMGExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMUgzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAyaDV2NWExIDEgMCAwIDEtMSAxSDJWM2ExIDEgMCAwIDEgMS0xWm0wLTFoMTBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlYzYTIgMiAwIDAgMSAyLTJabTAgMWExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDAgMCAxIDFoMTBhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFIM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JQb3NpdGlvblRvcFJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wUmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDJoNWExIDEgMCAwIDEgMSAxdjVIOWExIDEgMCAwIDEtMS0xVjJaTTMgMWgxMGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJIM2EyIDIgMCAwIDEtMi0yVjNhMiAyIDAgMCAxIDItMlptMCAxYTEgMSAwIDAgMC0xIDF2MTBhMSAxIDAgMCAwIDEgMWgxMGExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMUgzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JBbGlnbkNlbnRlciA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JBbGlnbkNlbnRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgNFYzaDZ2MUg1Wk0zIDdWNmgxMHYxSDNabTIgM1Y5aDZ2MUg1Wm0tMiAzdi0xaDEwdjFIM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckFsaWduTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JBbGlnbkxlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDRWM2g2djFIMlptMCAzVjZoMTB2MUgyWm0wIDNWOWg2djFIMlptMCAzdi0xaDEwdjFIMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckFsaWduTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JBbGlnblJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckFsaWduUmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDRWM2g2djFIOFpNNCA3VjZoMTB2MUg0Wm00IDNWOWg2djFIOFptLTQgM3YtMWgxMHYxSDRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JBbGlnblJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckJvbGQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQm9sZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMTkzIDEzSDRWM2g0LjE1MWMxLjgxNiAwIDIuOTg3Ljk3NyAyLjk4NyAyLjQ5NSAwIDEuMDc0LS43OTcgMi4wMS0xLjgyMyAyLjE3NnYuMDU1YzEuMzU5LjEzMiAyLjMwOCAxLjExIDIuMzA4IDIuNDMzIDAgMS43Ni0xLjI5NiAyLjg0MS0zLjQzIDIuODQxWk01Ljc4OCA0LjM5M3YyLjgyaDEuNjM1YzEuMjQ4IDAgMS45NDgtLjUyNiAxLjk0OC0xLjQ1NSAwLS44NzMtLjYwMy0xLjM2NS0xLjY3LTEuMzY1SDUuNzg4Wm0wIDcuMjE0aDEuOTk2YzEuMzE2IDAgMi4wMTYtLjU0NyAyLjAxNi0xLjU3MyAwLTEuMDE5LS43Mi0xLjU1Mi0yLjA5Mi0xLjU1MmgtMS45MnYzLjEyNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckJvbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yQ2hlY2tsaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckNoZWNrbGlzdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNTk3IDNhLjQxMS40MTEgMCAwIDAtLjI5OS4xMzJsLTEuODUgMS45OTMtLjc1Ni0uN2EuNDEyLjQxMiAwIDAgMC0uMjgtLjEyNC40Mi40MiAwIDAgMC0uMjkyLjA5OC4zMzMuMzMzIDAgMCAwLS4xMi4yNTcuMzM1LjMzNSAwIDAgMCAuMTI3LjI1NGwxLjA2NC45ODJBLjQxOC40MTggMCAwIDAgMi40ODggNmEuNDExLjQxMSAwIDAgMCAuMjg4LS4xMjZMNC45MDQgMy41OGEuMzI4LjMyOCAwIDAgMCAuMDk1LS4yNS4zMzcuMzM3IDAgMCAwLS4xMjYtLjIzOEEuNDIxLjQyMSAwIDAgMCA0LjU5NyAzem0tLjI5OSA0LjEzMkEuNDExLjQxMSAwIDAgMSA0LjU5NyA3YS40MjEuNDIxIDAgMCAxIC4yNzYuMDkzYy4wNzYuMDYyLjEyLjE0Ny4xMjYuMjM4YS4zMjguMzI4IDAgMCAxLS4wOTUuMjVMMi43NzYgOS44NzRhLjQxMS40MTEgMCAwIDEtLjI4OC4xMjYuNDE4LjQxOCAwIDAgMS0uMjk3LS4xMDhMMS4xMjcgOC45MUEuMzM1LjMzNSAwIDAgMSAxIDguNjU2YS4zMzMuMzMzIDAgMCAxIC4xMi0uMjU3LjQyLjQyIDAgMCAxIC4yOTItLjA5OGMuMTA4LjAwNS4yMS4wNS4yOC4xMjNsLjc1Ny43MDEgMS44NDktMS45OTN6TTQuNTk3IDExYS40MTEuNDExIDAgMCAwLS4yOTkuMTMybC0xLjg1IDEuOTkzLS43NTYtLjdhLjQxMi40MTIgMCAwIDAtLjI4LS4xMjQuNDIxLjQyMSAwIDAgMC0uMjkyLjA5OC4zMzMuMzMzIDAgMCAwLS4xMi4yNTcuMzM1LjMzNSAwIDAgMCAuMTI3LjI1NGwxLjA2NC45ODJhLjQxOC40MTggMCAwIDAgLjI5Ny4xMDguNDExLjQxMSAwIDAgMCAuMjg4LS4xMjZsMi4xMjgtMi4yOTNhLjMyOC4zMjggMCAwIDAgLjA5NS0uMjUuMzM3LjMzNyAwIDAgMC0uMTI2LS4yMzguNDIxLjQyMSAwIDAgMC0uMjc2LS4wOTN6TTYuNSA0YS41LjUgMCAwIDAgMCAxaDdhLjUuNSAwIDAgMCAwLTFoLTd6TTYgOC41YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN2EuNS41IDAgMCAxLS41LS41em0uNSAzLjVhLjUuNSAwIDAgMCAwIDFoN2EuNS41IDAgMCAwIDAtMWgtN3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckNoZWNrbGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JDb2RlQmxvY2sgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQ29kZUJsb2NrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi40MTQgOC4wMzYgNC44OSAxMC41MWEuNS41IDAgMCAxLS43MDcuNzA4TDEuMzU0IDguMzg5YS41LjUgMCAwIDEgMC0uNzA3bDIuODI4LTIuODI4YS41LjUgMCAxIDEgLjcwNy43MDdMMi40MTQgOC4wMzZabTguNzY4IDIuNDc0IDIuNDc1LTIuNDc0LTIuNDc1LTIuNDc1YS41LjUgMCAwIDEgLjcwNy0uNzA3bDIuODI5IDIuODI4YS41LjUgMCAwIDEgMCAuNzA3bC0yLjgyOSAyLjgyOWEuNS41IDAgMSAxLS43MDctLjcwOFpNOC41NTkgMi41MDZhLjUuNSAwIDAgMSAuOTgxLjE5TDcuNDQxIDEzLjQ5NGEuNS41IDAgMCAxLS45ODEtLjE5TDguNTU5IDIuNTA2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yQ29kZUJsb2NrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckNvbW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQ29tbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMTExIDEwSDEyYTEgMSAwIDAgMCAxLTFWNWExIDEgMCAwIDAtMS0xSDRhMSAxIDAgMCAwLTEgMXY0YTEgMSAwIDAgMCAxIDFoMXYxLjI5N0w2LjExMSAxMFptLjQ2IDFMNCAxNHYtM2EyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg4YTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAySDYuNTcxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yQ29tbWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JIZWFkaW5nID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckhlYWRpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDExYTEgMSAwIDAgMSAwIDJINGExIDEgMCAwIDEgMC0yVjVhMSAxIDAgMSAxIDAtMmgyYTEgMSAwIDEgMSAwIDJ2Mmg0VjVhMSAxIDAgMSAxIDAtMmgyYTEgMSAwIDAgMSAwIDJ2NmExIDEgMCAwIDEgMCAyaC0yYTEgMSAwIDAgMSAwLTJWOUg2djJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JIZWFkaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckl0YWxpYyA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGFsaWMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjE2IDEySDkuNWEuNS41IDAgMSAxIDAgMWgtNGEuNS41IDAgMSAxIDAtMWgxLjYzOWwxLjctOEg3LjVhLjUuNSAwIDAgMSAwLTFoNGEuNS41IDAgMSAxIDAgMUg5Ljg2MWwtMS43IDhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGFsaWM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yTGluayA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JMaW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41NTYgNS4wNTFhLjQ1LjQ1IDAgMCAwIC42MzcuNjM3bDEuNTAzLTEuNTA0Yy40MzItLjQzMSAxLjI3OC0uMzgyIDEuODkuMjMuNjEyLjYxMi42NjIgMS40NTguMjMgMS44OUw5LjUxOSA4LjZjLS40MzIuNDMyLTEuMjc4LjM4My0xLjg5LS4yM2EuNDUuNDUgMCAxIDAtLjYzNi42MzdjLjkxNC45MTQgMi4zMyAxLjA2MyAzLjE2Mi4yM2wyLjI5Ny0yLjI5N2MuODMzLS44MzMuNjg0LTIuMjQ4LS4yMy0zLjE2Mi0uOTE0LS45MTUtMi4zMy0xLjA2My0zLjE2Mi0uMjNMNy41NTYgNS4wNTF6bS44ODggNS4yNjFhLjQ1LjQ1IDAgMCAwLS42MzcgMGwtMS41MDMgMS41MDRjLS40MzIuNDMxLTEuMjc4LjM4Mi0xLjg5LS4yMy0uNjEyLS42MTItLjY2MS0xLjQ1OC0uMjMtMS44OUw2LjQ4MSA3LjRjLjQzMi0uNDMyIDEuMjc4LS4zODMgMS44OS4yM2EuNDUuNDUgMCAwIDAgLjYzNi0uNjM3Yy0uOTE0LS45MTQtMi4zMy0xLjA2My0zLjE2Mi0uMjNMMy41NDggOS4wNmMtLjgzMy44MzMtLjY4NSAyLjI0OC4yMyAzLjE2Mi45MTQuOTE1IDIuMzMgMS4wNjMgMy4xNjIuMjNsMS41MDQtMS41MDNhLjQ1LjQ1IDAgMCAwIDAtLjYzN3pNNy44NzcgNS43NmEuMzkuMzkgMCAwIDAgLjI3NC0uMTE0bDEuNTAzLTEuNTA0LTEuNTAzIDEuNTA0YS4zOS4zOSAwIDAgMS0uMjc0LjExNHptLjkxMiAzLjE4M2MtLjQuMDAzLS44NDMtLjE3Mi0xLjIwMi0uNTMuMzU5LjM1OC44MDIuNTMzIDEuMjAyLjUzek0xMi4xOCAzLjgyYy0uNTAyLS41MDMtMS4xNTUtLjc2Ni0xLjc3My0uNzYuNjE4LS4wMDYgMS4yNy4yNTcgMS43NzMuNzYuODk4Ljg5OCAxLjAzNCAyLjI3NS4yMyAzLjA3OGwtMi4yOTcgMi4yOTcgMi4yOTctMi4yOTdjLjgwNC0uODAzLjY2OC0yLjE4LS4yMy0zLjA3OHptLTQuMDYyIDYuNDJhLjM5LjM5IDAgMCAxIC4yODQuNjY3TDYuODk4IDEyLjQxbDEuNTA0LTEuNTAzYS4zOS4zOSAwIDAgMC0uMjg0LS42Njd6bS0uOTI2LTMuOTY1Yy42MTgtLjAwNiAxLjI3LjI1NyAxLjc3My43Ni0uNTAyLS41MDMtMS4xNTUtLjc2Ni0xLjc3My0uNzZ6TTUuNDE0IDEyLjE1YTEuNzYyIDEuNzYyIDAgMCAxLTEuMDQyLS41MjJjLS42MjYtLjYyNy0uNjkyLTEuNTExLS4yMy0xLjk3NEw2LjQ0IDcuMzU4IDQuMTQyIDkuNjU0Yy0uNDYyLjQ2My0uMzk2IDEuMzQ4LjIzIDEuOTc0LjMxMS4zMTEuNjg3LjQ4NCAxLjA0Mi41MjJ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JMaW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA4djFoMXYxSDFWOWgxVjhIMVY3aDN2MUgzWm0xIDR2Mkgxdi0xaDF2LTFIMXYtMWgzdjFaTTMgNWgxdjFIMVY1aDFWNEgxVjNoMnYyWm0yLjUtMWg4YS41LjUgMCAxIDEgMCAxaC04YS41LjUgMCAwIDEgMC0xWm0wIDRoOGEuNS41IDAgMSAxIDAgMWgtOGEuNS41IDAgMCAxIDAtMVptMCA0aDhhLjUuNSAwIDEgMSAwIDFoLThhLjUuNSAwIDEgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JPcmRlcmVkTGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JSZWRvID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclJlZG8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCA2SDVDMy4wNTcgNiAyIDcuMDU3IDIgOXMxLjA1NyAzIDMgM2gxLjV2LTFINWMtMS4zOSAwLTItLjYxLTItMiAwLTEuMzkuNjEtMiAyLTJoNXYzbDMuNS0zLjVMMTAgM3YzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yUmVkbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JTdHJpa2UgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yU3RyaWtlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMDIzIDEwaDEuMjc0Yy4wMDYuMDguMDEuMTY0LjAxLjI1YTIuNTU3IDIuNTU3IDAgMCAxLS44ODMgMS45NDljLS4yODQuMjUtLjYyNy40NDYtMS4wMy41ODhBNC4wODcgNC4wODcgMCAwIDEgOC4wMjggMTNhNC42MTYgNC42MTYgMCAwIDEtMy4zODItMS40MjZjLS4xOTMtLjI1OS0uMTkzLS41IDAtLjcyNC4xOTMtLjIyMy40MzgtLjI2Ni43MzUtLjEzLjM0My4zNjMuNzQ4LjY1NSAxLjIxMy44NzYuNDY2LjIyLjk0OS4zMyAxLjQ0OS4zMy42MzcgMCAxLjEzMi0uMTQ0IDEuNDg1LS40MzMuMzUzLS4yOS41My0uNjcuNTMtMS4xNGExLjcyIDEuNzIgMCAwIDAtLjAzNC0uMzUzWk01LjU4NiA3YTIuNDkgMi40OSAwIDAgMS0uMjk0LS41MDcgMi4zMTYgMi4zMTYgMCAwIDEtLjE3Ny0uOTM0YzAtLjM2My4wNzYtLjcwMS4yMjgtMS4wMTUuMTUyLS4zMTQuMzYzLS41ODYuNjMzLS44MTYuMjctLjIzLjU4OC0uNDEuOTU1LS41MzdBMy42ODMgMy42ODMgMCAwIDEgOC4xNDUgM2MuNTc4IDAgMS4xMTIuMTEgMS42MDMuMzMuNDkuMjIxLjkwNy41MDggMS4yNS44NjEuMTYuMjgyLjE2LjUxMiAwIC42OTItLjE2LjE4LS4zOC4yMTQtLjY2Mi4xMDJhMy40MzggMy40MzggMCAwIDAtLjk3OC0uNjY5IDIuOTE0IDIuOTE0IDAgMCAwLTEuMjEzLS4yNDJjLS41NCAwLS45NzMuMTI1LTEuMzAyLjM3NS0uMzI4LjI1LS40OTIuNTk1LS40OTIgMS4wMzYgMCAuMjM2LjA0Ni40MzQuMTQuNTk2LjA5Mi4xNjIuMjE3LjMwNC4zNzQuNDI2LjE1Ny4xMjMuMzI5LjIzLjUxNS4zMjQuMTE5LjA2LjI0LjExNi4zNjIuMTY5SDUuNTg2Wk0yLjUgOGgxMWEuNS41IDAgMSAxIDAgMWgtMTFhLjUuNSAwIDAgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JTdHJpa2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yVGFibGUgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yVGFibGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAzdjJIMlYzdjEwaDEyVjNaTTIgMmgxMmMuNTUyIDAgMSAuNDEzIDEgLjkyM3YxMC4xNTRjMCAuNTEtLjQ0OC45MjMtMSAuOTIzSDJjLS41NTIgMC0xLS40MTMtMS0uOTIzVjIuOTIzQzEgMi40MTMgMS40NDggMiAyIDJabTAgNWgxMnYxSDJWN1ptMCAzaDEydjFIMnYtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclRhYmxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvclVuZGVybGluZSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JVbmRlcmxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDMuNTM2VjcuOGMwIDEuNjI4IDEuMjI0IDIuNiAzIDIuNiAxLjc4MyAwIDMtLjk3MiAzLTIuNlYzLjUzNmMwLS4zNTcuMTY3LS41MzYuNS0uNTM2LjMzMyAwIC41LjE3OS41LjUzNnY0LjMxOGMwIDIuMDkzLTEuNjY1IDMuNTQ2LTQgMy41NDZTNCA5Ljg5MyA0IDcuOFYzLjUzNkM0IDMuMTc5IDQuMTY3IDMgNC41IDNjLjMzMyAwIC41LjE3OS41LjUzNlpNMi41IDEzaDExYS41LjUgMCAxIDEgMCAxaC0xMWEuNS41IDAgMSAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclVuZGVybGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JVbmRvID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclVuZG8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjUgNmg1YzEuOTQzIDAgMyAxLjA1NyAzIDNzLTEuMDU3IDMtMyAzSDl2LTFoMS41YzEuMzkgMCAyLS42MSAyLTIgMC0xLjM5LS42MS0yLTItMmgtNXYzTDIgNi41IDUuNSAzdjNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JVbmRvOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvclVub3JkZXJlZExpc3QgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yVW5vcmRlcmVkTGlzdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuNSA0aDhhLjUuNSAwIDEgMSAwIDFoLThhLjUuNSAwIDAgMSAwLTFabTAgNGg4YS41LjUgMCAxIDEgMCAxaC04YS41LjUgMCAwIDEgMC0xWm0wIDRoOGEuNS41IDAgMSAxIDAgMWgtOGEuNS41IDAgMSAxIDAtMVptLTMtN2EuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptMCA0YS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWm0wIDRhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JVbm9yZGVyZWRMaXN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVtYWlsID0gZnVuY3Rpb24gRXVpSWNvbkVtYWlsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0Ljk1IDMuNjg0IDguNjM3IDguOTEyYTEgMSAwIDAgMS0xLjI3NiAwTDEuMDUxIDMuNjg0QS45OTkuOTk5IDAgMCAwIDEgNHY4YTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMVY0YS45OTkuOTk5IDAgMCAwLS4wNS0uMzE2Wk0yIDJoMTJhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMlptLS4yMSAxIDUuNTc2IDQuNjAzYTEgMSAwIDAgMCAxLjI3LjAwM0wxNC4yNjggM0gxLjc5WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRW1haWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRW1wdHkgPSBmdW5jdGlvbiBFdWlJY29uRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVuZHBvaW50ID0gZnVuY3Rpb24gRXVpSWNvbkVuZHBvaW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS40MDYgMTMuNDU0YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02Ljg2IDYuMDlhMi41NDUgMi41NDUgMCAxIDEgMi40OTctMy4wNDVoLjM2OGEyLjcyNyAyLjcyNyAwIDEgMSAwIDUuNDU1SDYuNTQzYTEuNzI3IDEuNzI3IDAgMSAwIDAgMy40NTRoLjM2N2EyLjU0NiAyLjU0NiAwIDEgMSAwIDFoLS4zNjdhMi43MjcgMi43MjcgMCAxIDEgMC01LjQ1NGgzLjE4MmExLjcyNyAxLjcyNyAwIDEgMCAwLTMuNDU1aC0uMzY4YTIuNTQ2IDIuNTQ2IDAgMCAxLTIuNDk2IDIuMDQ2TDYuODYgNi4wOVptMC0xYTEuNTQ1IDEuNTQ1IDAgMSAxIDAtMy4wOSAxLjU0NSAxLjU0NSAwIDAgMSAwIDMuMDlaTTkuNDA3IDE0YTEuNTQ1IDEuNTQ1IDAgMSAxIDAtMy4wOSAxLjU0NSAxLjU0NSAwIDAgMSAwIDMuMDlaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRW5kcG9pbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRXFsID0gZnVuY3Rpb24gRXVpSWNvbkVxbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1Ljg2MiAxNC4xOHYuMDAxYS40ODIuNDgyIDAgMCAxIC4xLjUyMS41LjUgMCAwIDEtLjQ0Ny4yOTloLTMuMTQ5Yy0uMDcgMC0uMTM2IDAtLjItLjAwM2EuNjY0LjY2NCAwIDAgMS0uNDE0LS4xNGMtLjM1LS4zMS0uNjg0LS42MzctMS4wMDEtLjk4MWwtMS43NzItMS43MzhhNS45NDEgNS45NDEgMCAwIDEtMy44MDIuMTRsLS4wNDUtLjAxMmE1Ljg5IDUuODkgMCAwIDEtMi42ODItMS43MTJBNS43MTUgNS43MTUgMCAwIDEgMS4wOCA3LjcyYTUuNjYgNS42NiAwIDAgMSAuMzQ4LTMuMTE4QTUuNzggNS43OCAwIDAgMSAzLjM5IDIuMTI0YTUuOTc5IDUuOTc5IDAgMCAxIDYuMTM2LS41MDUgNS44MzYgNS44MzYgMCAwIDEgMi4zNTYgMi4xMjMgNS42NyA1LjY3IDAgMCAxIC44NzMgMy4wMTdsLjAwMS4wMDNjMCAuMTI4LS4wNTEuMjUtLjE0My4zNGEuNDk1LjQ5NSAwIDAgMS0uNjk0IDAgLjQ3Ni40NzYgMCAwIDEtLjE0My0uMzRjMC0uOTUtLjI4OC0xLjg3OC0uODI2LTIuNjY4YTQuODggNC44OCAwIDAgMC0yLjE5OC0xLjc2OSA0Ljk5IDQuOTkgMCAwIDAtMi44My0uMjczIDQuOTMgNC45MyAwIDAgMC0yLjUwOSAxLjMxNCA0Ljc3NCA0Ljc3NCAwIDAgMC0xLjM0IDIuNDZBNC43MTUgNC43MTUgMCAwIDAgMi4zNTIgOC42YTQuODIgNC44MiAwIDAgMCAxLjgwNCAyLjE1NWMuODA1LjUyOCAxLjc1Mi44MSAyLjcyMS44MWE0Ljg5OSA0Ljg5OSAwIDAgMCAxLjI5Ni0uMTk0bC4wMzItLjAwOS43MTctLjIxMWEuNTA2LjUwNiAwIDAgMSAuNDgzLjExMWwxLjExIDEuMDI2IDEuNzg4IDEuNzUyaDIuMDNsLTMuNjU3LTMuNTgzYS40NzUuNDc1IDAgMCAxIC4wMTQtLjY2Ni40OTUuNDk1IDAgMCAxIC42NzktLjAxM2w0LjQ5MyA0LjQwMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMDk3IDMuNDY4IDkuNjc5IDQuOTNhLjQzMy40MzMgMCAwIDEgLjIxOC4zN3YyLjkyNGEuNDIyLjQyMiAwIDAgMS0uMjE4LjM3bC0yLjU4MiAxLjQ2MWEuNDM4LjQzOCAwIDAgMS0uNDM3IDBMNC4wNzcgOC41OTRhLjQzMy40MzMgMCAwIDEtLjIxOC0uMzdWNS4zYS40MjIuNDIyIDAgMCAxIC4yMTgtLjM3TDYuNjYgMy40NjdhLjQ0Ni40NDYgMCAwIDEgLjQzNyAwem0xLjg0NSA0LjI3VjUuNzg0YS4zMjguMzI4IDAgMCAwLS4xNy0uMjg3TDcuMDQ3IDQuNTJhLjM0Mi4zNDIgMCAwIDAtLjMzOCAwbC0xLjcyNi45NzdhLjMzNi4zMzYgMCAwIDAtLjE2OC4yODd2MS45NTNhLjMyNi4zMjYgMCAwIDAgLjE3LjI4N2wxLjcyNC45NzdhLjM0Mi4zNDIgMCAwIDAgLjMzOCAwbDEuNzI2LS45NzhhLjMzNC4zMzQgMCAwIDAgLjE2OS0uMjg3elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVyYXNlciA9IGZ1bmN0aW9uIEV1aUljb25FcmFzZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0yLjY0OCA5LjkzNyA3LjI5LTcuMjg4YTIuMjEgMi4yMSAwIDAgMSAzLjEyNCAwbDIuMjkgMi4yODhhMi4yMSAyLjIxIDAgMCAxIDAgMy4xMjZMMTAuNDEzIDEzSDEyLjVhLjUuNSAwIDAgMSAwIDFINC41MDFhMi4yMSAyLjIxIDAgMCAxLTEuNTYzLS42NDdsLjcwNy0uNzA3Yy4yMjcuMjI2LjUzNS4zNTQuODU2LjM1NGg0LjAwNWExLjIxIDEuMjEgMCAwIDAgLjg0OC0uMzU0bDEuMjkyLTEuMjkzLTQtNC0zLjI5IDMuMjkxYTEuMjEgMS4yMSAwIDAgMCAwIDEuNzEybC4yOS4yOS0uNzA4LjcwNy0uMjktLjI5YTIuMjEgMi4yMSAwIDAgMSAwLTMuMTI2ek04IDZoNi44OWExLjIwOCAxLjIwOCAwIDAgMC0uMjQ2LS4zNTZMMTQgNUg5TDggNnptMi0yaDNsLS42NDUtLjY0NGExLjIxIDEuMjEgMCAwIDAtMS43MSAwTDEwIDR6bTQuODkgM0g3LjcwOGwxIDFIMTRsLjY0NC0uNjQ0QTEuMjIgMS4yMiAwIDAgMCAxNC44OTEgN3pNOS43MDggOWwxLjY0NiAxLjY0NkwxMyA5SDkuNzA3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMTEuNWEuNS41IDAgMSAxLTEgMCAuNS41IDAgMCAxIDEgMHptMS41LS41YS41LjUgMCAxIDAgMC0xIC41LjUgMCAwIDAgMCAxem0tMSAyYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFoLTF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FcmFzZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRXJyb3IgPSBmdW5jdGlvbiBFdWlJY29uRXJyb3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00Ljg1NCA1LjE0NmEuNS41IDAgMSAwLS43MDguNzA4TDYuNzkzIDguNWwtMi42NDcgMi42NDZhLjUuNSAwIDAgMCAuNzA4LjcwOEw3LjUgOS4yMDdsMi42NDYgMi42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMOC4yMDcgOC41bDIuNjQ3LTIuNjQ2YS41LjUgMCAwIDAtLjcwOC0uNzA4TDcuNSA3Ljc5MyA0Ljg1NCA1LjE0NlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01IDFhMSAxIDAgMCAwLS43MDcuMjkzbC00IDRBMSAxIDAgMCAwIDAgNnY1YTEgMSAwIDAgMCAuMjkzLjcwN2w0IDRBMSAxIDAgMCAwIDUgMTZoNWExIDEgMCAwIDAgLjcwNy0uMjkzbDQtNEExIDEgMCAwIDAgMTUgMTFWNmExIDEgMCAwIDAtLjI5My0uNzA3bC00LTRBMSAxIDAgMCAwIDEwIDFINVptNSAxSDVMMSA2djVsNCA0aDVsNC00VjZsLTQtNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVycm9yOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVycm9yRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvbkVycm9yRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEwIDFhMSAxIDAgMCAxIC43MDcuMjkzbDQgNEExIDEgMCAwIDEgMTUgNnY1YTEgMSAwIDAgMS0uMjkzLjcwN2wtNCA0QTEgMSAwIDAgMSAxMCAxNkg1YTEgMSAwIDAgMS0uNzA3LS4yOTNsLTQtNEExIDEgMCAwIDEgMCAxMVY2YTEgMSAwIDAgMSAuMjkzLS43MDdsNC00QTEgMSAwIDAgMSA1IDFoNVpNNC4xNDYgNS4xNDZhLjUuNSAwIDAgMSAuNzA4IDBMNy41IDcuNzkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC4yMDcgOC41bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMNy41IDkuMjA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw2Ljc5MyA4LjUgNC4xNDYgNS44NTRhLjUuNSAwIDAgMSAwLS43MDhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FcnJvckZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Fc3FsVmlzID0gZnVuY3Rpb24gRXVpSWNvbkVzcWxWaXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDIuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNVpNMi41IDRhLjUuNSAwIDAgMCAwIDFoMmEuNS41IDAgMCAwIDAtMWgtMlpNMiA2LjVhLjUuNSAwIDAgMSAuNS0uNWgyYS41LjUgMCAwIDEgMCAxaC0yYS41LjUgMCAwIDEtLjUtLjVaTTIuNSA4YS41LjUgMCAwIDAgMCAxaDJhLjUuNSAwIDAgMCAwLTFoLTJaTTIgMTAuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAuNS41djJhLjUuNSAwIDAgMS0uNS41aC0yYS41LjUgMCAwIDEtLjUtLjV2LTJaTTYuNSAyYS41LjUgMCAwIDAgMCAxaDJhLjUuNSAwIDAgMCAwLTFoLTJaTTYgNC41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41Wk02LjUgNmEuNS41IDAgMCAwLS41LjV2NmEuNS41IDAgMCAwIC41LjVoMmEuNS41IDAgMCAwIC41LS41di02YS41LjUgMCAwIDAtLjUtLjVoLTJaTTEwIDIuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNVptLjUgMS41YS41LjUgMCAwIDAgMCAxaDJhLjUuNSAwIDAgMCAwLTFoLTJaTTEwIDYuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNVptLjUgMS41YS41LjUgMCAwIDAtLjUuNXY0YS41LjUgMCAwIDAgLjUuNWgyYS41LjUgMCAwIDAgLjUtLjV2LTRhLjUuNSAwIDAgMC0uNS0uNWgtMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMGgxMWEyIDIgMCAwIDEgMiAydjExYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMlptMCAxYTEgMSAwIDAgMC0xIDF2MTFhMSAxIDAgMCAwIDEgMWgxMWExIDEgMCAwIDAgMS0xVjJhMSAxIDAgMCAwLTEtMUgyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXNxbFZpczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FeGl0ID0gZnVuY3Rpb24gRXVpSWNvbkV4aXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIuNTM1IDEyLjQ5M2EuNDcuNDcgMCAwIDEgLjQ2OC40Njh2Mi41NjRhLjQ3My40NzMgMCAwIDEtLjQ2Ni40NzVIM1YwSDEyLjU5NWEuNDUuNDUgMCAwIDEgLjM5OC40NjN2Mi41NjVhLjQ2OS40NjkgMCAwIDEtLjQ2OC40NjdoLS4wNjVhLjQ2OC40NjggMCAwIDEtLjQ2Ny0uNDY3VjFINHYxNGg4LjAxbC0uMDA3LTIuMDRjMC0uMjU3LjIxLS40NjcuNDY3LS40NjdoLjA2NVptLTEuMDk2LTcuNTkgMi4xMjEgMi4xMjJhMS41IDEuNSAwIDAgMSAwIDIuMTIxbC0yLjEyIDIuMTIyYS41LjUgMCAxIDEtLjcwOC0uNzA4bDIuMTIxLTIuMTJhLjUuNSAwIDAgMCAwLS43MDhsLTIuMTIxLTIuMTIxYS41LjUgMCAwIDEgLjcwNy0uNzA3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXhpdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FeHBhbmQgPSBmdW5jdGlvbiBFdWlJY29uRXhwYW5kKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwibTQuMzU0IDEyLjM1NCA4LThhLjUuNSAwIDAgMC0uNzA4LS43MDhsLTggOGEuNS41IDAgMCAwIC43MDguNzA4Wk0xIDEwLjVhLjUuNSAwIDEgMSAxIDB2M2EuNS41IDAgMCAwIC41LjVoM2EuNS41IDAgMSAxIDAgMWgtM0ExLjUgMS41IDAgMCAxIDEgMTMuNXYtM1ptMTQtNWEuNS41IDAgMSAxLTEgMHYtM2EuNS41IDAgMCAwLS41LS41aC0zYS41LjUgMCAxIDEgMC0xaDNBMS41IDEuNSAwIDAgMSAxNSAyLjV2M1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV4cGFuZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FeHBhbmRNaW5pID0gZnVuY3Rpb24gRXVpSWNvbkV4cGFuZE1pbmkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNi43MDcgMTAgMTAgNi43MDdBLjUuNSAwIDAgMCA5LjI5MyA2TDYgOS4yOTNhLjUuNSAwIDEgMCAuNzA3LjcwN1pNNCA5LjVhLjUuNSAwIDAgMSAxIDB2MWEuNS41IDAgMCAwIC41LjVoMWEuNS41IDAgMSAxIDAgMWgtMUExLjUgMS41IDAgMCAxIDQgMTAuNXYtMVptOC0zYS41LjUgMCAxIDEtMSAwdi0xYS41LjUgMCAwIDAtLjUtLjVoLTFhLjUuNSAwIDAgMSAwLTFoMUExLjUgMS41IDAgMCAxIDEyIDUuNXYxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXhwYW5kTWluaTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FeHBvcnQgPSBmdW5jdGlvbiBFdWlJY29uRXhwb3J0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41MDUgMWMuNDIyLS4wMDMuODQ0LjE3IDEuMTY2LjUxNmwxLjk1IDIuMDVjLjIxMy4yMjguMjEzLjYgMCAuODI4YS41Mi41MiAwIDAgMS0uNzcxIDBMOSAyLjQ1MXY3Ljk5M2MwIC4zMDctLjIyNC41NTYtLjUuNTU2cy0uNS0uMjQ5LS41LS41NTZ2LTcuOTZsLTEuODIgMS45MWEuNTIuNTIgMCAwIDEtLjc3IDAgLjYxNy42MTcgMCAwIDEgMC0uODI5bDEuOTUtMi4wNUExLjU3NSAxLjU3NSAwIDAgMSA4LjUgMWguMDA1Wk00LjE4IDdjLS40NzMgMC0uODguMjk0LS45NzIuNzAzbC0xLjE4OSA1LjI1YS43NzYuNzc2IDAgMCAwLS4wMTkuMTcyYzAgLjQ4My40NDQuODc1Ljk5Ljg3NUgxNC4wMWMuMDY1IDAgLjEzLS4wMDYuMTk0LS4wMTcuNTM3LS4wOTUuODg1LS41NTYuNzc4LTEuMDNsLTEuMTktNS4yNUMxMy43IDcuMjk0IDEzLjI5MyA3IDEyLjgyMiA3SDQuMThaTTYgNnYxaDVWNmgxLjgyNWMuOTQ2IDAgMS43Ni42MDYgMS45NDYgMS40NDdsMS4xOSA1LjRjLjIxNS45NzUtLjQ4MiAxLjkyMy0xLjU1NiAyLjExOGEyLjE4IDIuMTggMCAwIDEtLjM5LjAzNUgyLjk4NUMxLjg4OCAxNSAxIDE0LjE5NCAxIDEzLjJjMC0uMTE5LjAxMy0uMjM3LjAzOS0uMzUzbDEuMTktNS40QzIuNDE0IDYuNjA2IDMuMjI5IDYgNC4xNzQgNkg2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXhwb3J0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkV5ZSA9IGZ1bmN0aW9uIEV1aUljb25FeWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS45OCA3Ljg3M2MuMDEzLjAzLjAyLjA2NC4wMi4wOTh2LjA2YS4yNC4yNCAwIDAgMS0uMDIuMDk3QzE1Ljk1MiA4LjE4OCAxMy4yOTEgMTQgOCAxNFMuMDQ3IDguMTg4LjAyIDguMTI4QS4yNC4yNCAwIDAgMSAwIDguMDN2LS4wNTljMC0uMDM0LjAwNy0uMDY4LjAyLS4wOThDLjA0OCA3LjgxMyAyLjcwOSAyIDggMnM3Ljk1MyA1LjgxMyA3Ljk4IDUuODczWm0tMS4zNy0uNDI0YTEyLjA5NyAxMi4wOTcgMCAwIDAtMS4zODUtMS44NjJDMTEuNzM5IDMuOTU2IDkuOTk5IDMgOCAzYy0yIDAtMy43NC45NTYtNS4yMjUgMi41ODdhMTIuMDk4IDEyLjA5OCAwIDAgMC0xLjcwMSAyLjQxNCAxMi4wOTUgMTIuMDk1IDAgMCAwIDEuNyAyLjQxM0M0LjI2IDEyLjA0MyA2LjAwMiAxMyA4IDEzczMuNzQtLjk1NiA1LjIyNS0yLjU4N0ExMi4wOTcgMTIuMDk3IDAgMCAwIDE0LjkyNiA4Yy0uMDgtLjE1LS4xODktLjM0My0uMzE1LS41NTFaTTggNC43NUEzLjI1MyAzLjI1MyAwIDAgMSAxMS4yNSA4IDMuMjU0IDMuMjU0IDAgMCAxIDggMTEuMjUgMy4yNTMgMy4yNTMgMCAwIDEgNC43NSA4IDMuMjUyIDMuMjUyIDAgMCAxIDggNC43NVptMCAxQzYuNzYgNS43NSA1Ljc1IDYuNzYgNS43NSA4UzYuNzYgMTAuMjUgOCAxMC4yNSAxMC4yNSA5LjI0IDEwLjI1IDggOS4yNCA1Ljc1IDggNS43NVptMCAxLjVhLjc1Ljc1IDAgMSAwIDAgMS41Ljc1Ljc1IDAgMCAwIDAtMS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXllOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkV5ZUNsb3NlZCA9IGZ1bmN0aW9uIEV1aUljb25FeWVDbG9zZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm01LjMxOCAxMy40Ny43NzYtLjc3NkE2LjA0IDYuMDQgMCAwIDAgOCAxM2MxLjk5OSAwIDMuNzQtLjk1NiA1LjIyNS0yLjU4N0ExMi4wOTcgMTIuMDk3IDAgMCAwIDE0LjkyNiA4YTEyLjA5NyAxMi4wOTcgMCAwIDAtMS43MDEtMi40MTNsLS4wMTEtLjAxMi43MDctLjcwOGMxLjM1OSAxLjQ3NiAyLjA0NSAyLjk3NiAyLjA1OCAzLjAwNi4wMTQuMDMuMDIxLjA2NC4wMjEuMDk4di4wNmEuMjQuMjQgMCAwIDEtLjAyLjA5N0MxNS45NTIgOC4xODggMTMuMjkxIDE0IDggMTRhNy4wMyA3LjAzIDAgMCAxLTIuNjgyLS41M1pNMi4wNCAxMS4wOTJDLjcwNyA5LjYyOS4wMzQgOC4xNTguMDIgOC4xMjhBLjI0LjI0IDAgMCAxIDAgOC4wM3YtLjA1OWMwLS4wMzQuMDA3LS4wNjguMDItLjA5OEMuMDQ4IDcuODEzIDIuNzA5IDIgOCAyYy45NjIgMCAxLjgzNy4xOTIgMi42MjUuNTA3bC0uNzguNzhBNi4wMzkgNi4wMzkgMCAwIDAgOCAzYy0yIDAtMy43NC45NTYtNS4yMjUgMi41ODdhMTIuMDk4IDEyLjA5OCAwIDAgMC0xLjcwMSAyLjQxNCAxMi4xMSAxMi4xMSAwIDAgMCAxLjY3NCAyLjM4M2wtLjcwOC43MDhaTTguMzYyIDQuNzcgNy4yNTUgNS44NzdhMi4yNjIgMi4yNjIgMCAwIDAtMS4zNzggMS4zNzhMNC43NyA4LjM2MkEzLjI1MiAzLjI1MiAwIDAgMSA4LjM2MiA0Ljc3Wm0yLjg2IDIuNzk3YTMuMjU0IDMuMjU0IDAgMCAxLTMuNjU0IDMuNjU0bDEuMDYtMS4wNmEyLjI2MiAyLjI2MiAwIDAgMCAxLjUzMy0xLjUzM2wxLjA2LTEuMDZabS05LjM2OCA3LjI4N2EuNS41IDAgMCAxLS43MDgtLjcwOGwxMy0xM2EuNS41IDAgMCAxIC43MDguNzA4bC0xMyAxM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV5ZUNsb3NlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GYWNlSGFwcHkgPSBmdW5jdGlvbiBFdWlJY29uRmFjZUhhcHB5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNkE4IDggMCAxIDEgOCAwYTggOCAwIDAgMSAwIDE2Wm0wLTEuMDY3QTYuOTMzIDYuOTMzIDAgMSAwIDggMS4wNjdhNi45MzMgNi45MzMgMCAwIDAgMCAxMy44NjZaTTUuMzMzIDYuNGExLjA2NyAxLjA2NyAwIDEgMSAwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMCAxIDAgMi4xMzNabTUuMzM0IDBhMS4wNjcgMS4wNjcgMCAxIDEgMC0yLjEzMyAxLjA2NyAxLjA2NyAwIDAgMSAwIDIuMTMzWk0yLjczOSA4LjgwMmEuNTMzLjUzMyAwIDAgMSAuOTIyLS41MzdDNC44MTUgMTAuMjQ1IDYuMjQ5IDExLjIgOCAxMS4yYzEuNzUgMCAzLjE4NS0uOTU2IDQuMzQtMi45MzVhLjUzMy41MzMgMCAwIDEgLjkyLjUzN2MtMS4zMzMgMi4yODctMy4xIDMuNDY1LTUuMjYgMy40NjUtMi4xNiAwLTMuOTI3LTEuMTc4LTUuMjYtMy40NjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GYWNlSGFwcHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRmFjZU5ldXRyYWwgPSBmdW5jdGlvbiBFdWlJY29uRmFjZU5ldXRyYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxNkE4IDggMCAxIDEgOCAwYTggOCAwIDAgMSAwIDE2em0wLTEuMDY3QTYuOTMzIDYuOTMzIDAgMSAwIDggMS4wNjdhNi45MzMgNi45MzMgMCAwIDAgMCAxMy44NjZ6TTUuMzMzIDYuNGExLjA2NyAxLjA2NyAwIDEgMSAwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMCAxIDAgMi4xMzN6bTUuMzM0IDBhMS4wNjcgMS4wNjcgMCAxIDEgMC0yLjEzMyAxLjA2NyAxLjA2NyAwIDAgMSAwIDIuMTMzek0zLjIgMTAuNjY3YS41MzMuNTMzIDAgMCAxIDAtMS4wNjdoOS42YS41MzMuNTMzIDAgMSAxIDAgMS4wNjdIMy4yelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmFjZU5ldXRyYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRmFjZVNhZCA9IGZ1bmN0aW9uIEV1aUljb25GYWNlU2FkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNkE4IDggMCAxIDEgOCAwYTggOCAwIDAgMSAwIDE2Wm0wLTEuMDY3QTYuOTMzIDYuOTMzIDAgMSAwIDggMS4wNjdhNi45MzMgNi45MzMgMCAwIDAgMCAxMy44NjZaTTUuMzMzIDYuNGExLjA2NyAxLjA2NyAwIDEgMSAwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMCAxIDAgMi4xMzNabTUuMzM0IDBhMS4wNjcgMS4wNjcgMCAxIDEgMC0yLjEzMyAxLjA2NyAxLjA2NyAwIDAgMSAwIDIuMTMzWm0yLjQ4NyAzLjg2OGEuNTMzLjUzMyAwIDEgMS0uNzA4Ljc5N0MxMC45MzYgOS43MjUgOS40NTggOS4wNjcgOCA5LjA2N2MtMS40NTggMC0yLjkzNy42NTctNC40NDYgMS45OThhLjUzMy41MzMgMCAxIDEtLjcwOC0uNzk3QzQuNTM2IDguNzY1IDYuMjU4IDggOCA4czMuNDYzLjc2NSA1LjE1NCAyLjI2OFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZhY2VTYWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRmllbGRTdGF0aXN0aWNzID0gZnVuY3Rpb24gRXVpSWNvbkZpZWxkU3RhdGlzdGljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMWgxMGEyIDIgMCAwIDEgMiAydjQuMzM3YTUuNTMzIDUuNTMzIDAgMCAwLTEtMS4wOFYzYTEgMSAwIDAgMC0xLTFIM2ExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDAgMCAxIDFoMy4yNTdjLjMxNC4zOC42NzcuNzE2IDEuMDggMUgzYTIgMiAwIDAgMS0yLTJWM2EyIDIgMCAwIDEgMi0yWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy41IDZoMy44MzdhNS41NCA1LjU0IDAgMCAwLTEuMDggMUgzLjVhLjUuNSAwIDAgMSAwLTFabTAgNmgxLjcwN2MuMDk4LjM0NS4yMjguNjc3LjM4OC45OTFBLjUwNS41MDUgMCAwIDEgNS41IDEzaC0yYS41LjUgMCAwIDEgMC0xWm0wLThhLjUuNSAwIDAgMSAwLTFoOWEuNS41IDAgMCAxIDAgMWgtOVpNMyA5LjVhLjUuNSAwIDAgMCAuNS41aDFhLjUuNSAwIDAgMCAwLTFoLTFhLjUuNSAwIDAgMC0uNS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE1IDEwLjVhNC41IDQuNSAwIDEgMS05IDAgNC41IDQuNSAwIDAgMSA5IDBabS0yLjE0Ni0yLjM1NGEuNS41IDAgMCAxIDAgLjcwOGwtNCA0YS41LjUgMCAwIDEtLjcwOC0uNzA4bDQtNGEuNS41IDAgMCAxIC43MDggMFpNOSAxMGExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTQgMmExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GaWVsZFN0YXRpc3RpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRmlsdGVyID0gZnVuY3Rpb24gRXVpSWNvbkZpbHRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNS41YS41LjUgMCAwIDEgLjUtLjVoOWEuNS41IDAgMCAxIDAgMWgtOWEuNS41IDAgMCAxLS41LS41Wm0yIDNhLjUuNSAwIDAgMSAuNS0uNWg1YS41LjUgMCAwIDEgMCAxaC01YS41LjUgMCAwIDEtLjUtLjVaTTcuNSAxMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xaC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmlsdGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZpbHRlckV4Y2x1ZGUgPSBmdW5jdGlvbiBFdWlJY29uRmlsdGVyRXhjbHVkZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDFhLjUuNSAwIDAgMCAwIDFoOWEuNS41IDAgMCAwIDAtMWgtOVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNiAxMS41YTQuNSA0LjUgMCAxIDEtOSAwIDQuNSA0LjUgMCAwIDEgOSAwWm0tOCAwYS41LjUgMCAwIDEgLjUtLjVoNmEuNS41IDAgMCAxIDAgMWgtNmEuNS41IDAgMCAxLS41LS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiA0LjVhLjUuNSAwIDAgMSAuNS0uNWg1YS41LjUgMCAwIDEgMCAxaC01YS41LjUgMCAwIDEtLjUtLjVaTTQuNSA3YS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFoLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GaWx0ZXJFeGNsdWRlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZpbHRlcklnbm9yZSA9IGZ1bmN0aW9uIEV1aUljb25GaWx0ZXJJZ25vcmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAxYS41LjUgMCAwIDAgMCAxaDlhLjUuNSAwIDAgMCAwLTFoLTlaTTIgNC41YS41LjUgMCAwIDEgLjUtLjVoNWEuNS41IDAgMCAxIDAgMWgtNWEuNS41IDAgMCAxLS41LS41Wm0yIDNhLjUuNSAwIDAgMSAuNS0uNWgxYS41LjUgMCAwIDEgMCAxaC0xYS41LjUgMCAwIDEtLjUtLjVaTTE2IDExLjVhNC41IDQuNSAwIDEgMS05IDAgNC41IDQuNSAwIDAgMSA5IDBabS00LjUtLjcwN0w5Ljg1NCA5LjE0NmEuNS41IDAgMSAwLS43MDguNzA4bDEuNjQ3IDEuNjQ2LTEuNjQ3IDEuNjQ2YS41LjUgMCAwIDAgLjcwOC43MDhsMS42NDYtMS42NDcgMS42NDYgMS42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMMTIuMjA3IDExLjVsMS42NDctMS42NDZhLjUuNSAwIDAgMC0uNzA4LS43MDhMMTEuNSAxMC43OTNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GaWx0ZXJJZ25vcmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRmlsdGVySW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uRmlsdGVySW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy45OTkgMTUuOTk5YTggOCAwIDEgMSAwLTE2IDggOCAwIDAgMSAwIDE2Wk04IDE1QTcgNyAwIDEgMCA4IDFhNyA3IDAgMCAwIDAgMTRaTTMuNSA1aDlhLjUuNSAwIDEgMSAwIDFoLTlhLjUuNSAwIDAgMSAwLTFabTIgM2g1YS41LjUgMCAxIDEgMCAxaC01YS41LjUgMCAwIDEgMC0xWm0yIDNoMWEuNS41IDAgMSAxIDAgMWgtMWEuNS41IDAgMSAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZpbHRlckluQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZpbHRlckluY2x1ZGUgPSBmdW5jdGlvbiBFdWlJY29uRmlsdGVySW5jbHVkZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDFhLjUuNSAwIDAgMCAwIDFoOWEuNS41IDAgMCAwIDAtMWgtOVpNMTYgMTEuNWE0LjUgNC41IDAgMSAxLTkgMCA0LjUgNC41IDAgMCAxIDkgMFptLTQtM2EuNS41IDAgMCAwLTEgMFYxMUg4LjVhLjUuNSAwIDAgMCAwIDFIMTF2Mi41YS41LjUgMCAwIDAgMSAwVjEyaDIuNWEuNS41IDAgMCAwIDAtMUgxMlY4LjVaTTIgNC41YS41LjUgMCAwIDEgLjUtLjVoNWEuNS41IDAgMCAxIDAgMWgtNWEuNS41IDAgMCAxLS41LS41Wk00LjUgN2EuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xaC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmlsdGVySW5jbHVkZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GbGFnID0gZnVuY3Rpb24gRXVpSWNvbkZsYWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjY4NiA4LjQ2NGMxLjU0Ny0uNjE5IDMuMDgtLjYxOSA0LjYyOCAwQS41LjUgMCAwIDAgMTMgOFYyYS41LjUgMCAwIDAtLjI3Ni0uNDQ3QzExLjI1OS44MiA5LjQ1OC44MiA3LjM0MiAxLjUyNmMtMS44ODQuNjI4LTMuNDE3LjYyOC00LjYxOC4wMjdBLjUuNSAwIDAgMCAyIDJ2MTIuNWEuNS41IDAgMSAwIDEgMFY4LjU1M2MxLjQxMS42MjcgMi45ODMuNTkyIDQuNjg2LS4wODlaTTMgMi43NDFjMS4zMjIuNDIgMi44NzguMzI3IDQuNjU4LS4yNjdDOS40IDEuODk0IDEwLjg0MyAxLjg1IDEyIDIuMzIydjQuOTc1Yy0xLjU2LS40NjQtMy4xMjgtLjM4NC00LjY4Ni4yMzktMS41NC42MTYtMi44OTIuNjE2LTQuMDkuMDE3QS40OTguNDk4IDAgMCAwIDMgNy41VjIuNzRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GbGFnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZvbGQgPSBmdW5jdGlvbiBFdWlJY29uRm9sZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMTQuMTkyIDcuNTMgMi40OWEuNjcuNjcgMCAwIDAgLjk0MiAwTDEwLjg2LjE5MmEuNjc3LjY3NyAwIDAgMSAuOTQ0IDAgLjY1LjY1IDAgMCAxIDAgLjkzbC0yLjM4OCAyLjNhMi4wMiAyLjAyIDAgMCAxLTIuODMyIDBsLTIuMzg4LTIuM2EuNjUuNjUgMCAwIDEgMC0uOTMuNjc3LjY3NyAwIDAgMSAuOTQ0IDB6bTAgMTUuNjE2IDIuMzktMi4yOThhLjY3LjY3IDAgMCAxIC45NDIgMGwyLjM4OSAyLjI5OGMuMjYuMjU2LjY4NS4yNTYuOTQ0IDBhLjY1LjY1IDAgMCAwIDAtLjkzbC0yLjM4OC0yLjNhMi4wMiAyLjAyIDAgMCAwLTIuODMyIDBsLTIuMzg4IDIuM2EuNjUuNjUgMCAwIDAgMCAuOTNjLjI2LjI1Ni42ODMuMjU2Ljk0NCAwek0xNiA2SDB2NGgxNlY2ek0xIDlWN2gxNHYySDF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Gb2xkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZvbGRlckNoZWNrID0gZnVuY3Rpb24gRXVpSWNvbkZvbGRlckNoZWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMkgxdjExaDYuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFIMWExIDEgMCAwIDEtMS0xVjJhMSAxIDAgMCAxIDEtMWg1LjI1YS43NS43NSAwIDAgMSAuNzUuNzV2MS4xMjVjMCAuMDY5LjA1Ni4xMjUuMTI1LjEyNUgxM2ExIDEgMCAwIDEgMSAxdjMuNDE2YTQuOTYyIDQuOTYyIDAgMCAwLTEtLjMxNlY0SDcuMTI1QTEuMTI1IDEuMTI1IDAgMCAxIDYgMi44NzVWMnptMTAgMTBhNCA0IDAgMSAxLTggMCA0IDQgMCAwIDEgOCAwem0tMS42NDYtMS4zNTRhLjUuNSAwIDAgMSAwIC43MDhsLTIuNSAyLjVhLjUuNSAwIDAgMS0uNzA4IDBsLTEtMWEuNS41IDAgMCAxIC43MDgtLjcwOGwuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMCAxIC43MDggMHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGRlckNoZWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZvbGRlckNsb3NlZCA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkZXJDbG9zZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDJIMnYxMWgxMlY0SDguMTI1QTEuMTI1IDEuMTI1IDAgMCAxIDcgMi44NzVWMnptLjI1LTFhLjc1Ljc1IDAgMCAxIC43NS43NXYxLjEyNWMwIC4wNjkuMDU2LjEyNS4xMjUuMTI1SDE0YTEgMSAwIDAgMSAxIDF2OWExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMVYyYTEgMSAwIDAgMSAxLTFoNS4yNXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGRlckNsb3NlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm0xIDkuNS44MjYtMy43MTdBMSAxIDAgMCAxIDIuODAyIDVIMTNWNEg3LjEyNUExLjEyNSAxLjEyNSAwIDAgMSA2IDIuODc1VjJIMXY3LjV6bS4yNDcgMy41SDcuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFIMWExIDEgMCAwIDEtMS0xVjJhMSAxIDAgMCAxIDEtMWg1LjI1YS43NS43NSAwIDAgMSAuNzUuNzV2MS4xMjVjMCAuMDY5LjA1Ni4xMjUuMTI1LjEyNUgxM2ExIDEgMCAwIDEgMSAxdjFoLjc1M2ExIDEgMCAwIDEgLjk3NyAxLjIxN2wtLjQ0NyAyLjAxMWE1LjAxNSA1LjAxNSAwIDAgMC0uODg3LS42MThMMTQuNzUzIDZIMi44MDNsLTEuNTU2IDd6TTE2IDEyYTQgNCAwIDEgMS04IDAgNCA0IDAgMCAxIDggMHptLTQgLjVhLjU3Ny41NzcgMCAwIDEtLjU3LS40OTVsLS4yOS0yLjAxNWEuODY3Ljg2NyAwIDEgMSAxLjcxOCAwbC0uMjg4IDIuMDE1YS41NzcuNTc3IDAgMCAxLS41Ny40OTV6bTAgMi41YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGRlckV4Y2xhbWF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZvbGRlck9wZW4gPSBmdW5jdGlvbiBFdWlJY29uRm9sZGVyT3BlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTEgOS41LjgyNi0zLjcxN0ExIDEgMCAwIDEgMi44MDIgNUgxM1Y0SDcuMTI1QTEuMTI1IDEuMTI1IDAgMCAxIDYgMi44NzVWMkgxdjcuNXptLjI0NyAzLjVoMTEuOTVsMS41NTYtN0gyLjgwM2wtMS41NTYgN3pNMTMgMTRIMWExIDEgMCAwIDEtMS0xVjJhMSAxIDAgMCAxIDEtMWg1LjI1YS43NS43NSAwIDAgMSAuNzUuNzV2MS4xMjVjMCAuMDY5LjA1Ni4xMjUuMTI1LjEyNUgxM2ExIDEgMCAwIDEgMSAxdjFoLjc1M2ExIDEgMCAwIDEgLjk3NyAxLjIxN2wtMS41NTYgN2ExIDEgMCAwIDEtLjk3Ni43ODNIMTN6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Gb2xkZXJPcGVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZyYW1lTmV4dCA9IGZ1bmN0aW9uIEV1aUljb25GcmFtZU5leHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDJhMSAxIDAgMCAwLTEgMXYxMGExIDEgMCAxIDAgMiAwVjNhMSAxIDAgMCAwLTEtMXptNS4xNDYuMjIgNy4yIDQuNTgxYTEuNDI1IDEuNDI1IDAgMCAxIDAgMi4zOThsLTcuMiA0LjU4MUM3LjIxIDE0LjM3NSA2IDEzLjY5MiA2IDEyLjU4MVYzLjQyYzAtMS4xMTIgMS4yMS0xLjc5NSAyLjE0Ni0xLjJ6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnJhbWVOZXh0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZyYW1lUHJldmlvdXMgPSBmdW5jdGlvbiBFdWlJY29uRnJhbWVQcmV2aW91cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDJhMSAxIDAgMCAxIDEgMXYxMGExIDEgMCAxIDEtMiAwVjNhMSAxIDAgMCAxIDEtMXptLTUuMTQ2LjIyLTcuMiA0LjU4MWExLjQyNSAxLjQyNSAwIDAgMCAwIDIuMzk4bDcuMiA0LjU4MWMuOTM2LjU5NSAyLjE0Ni0uMDg4IDIuMTQ2LTEuMTk5VjMuNDJjMC0xLjExMS0xLjIxLTEuNzk0LTIuMTQ2LTEuMTk5elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZyYW1lUHJldmlvdXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRnVsbFNjcmVlbkV4aXQgPSBmdW5jdGlvbiBFdWlJY29uRnVsbFNjcmVlbkV4aXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDdWM2gxdjNoM3YxSDl6TTcgN0gzVjZoM1YzaDF2NHptMiAyaDR2MWgtM3YzSDlWOXpNNyA5djRINnYtM0gzVjloNHpNMCAxLjk5NEMwIC44OTMuODk1IDAgMS45OTQgMGgxMi4wMTJDMTUuMTA3IDAgMTYgLjg5NSAxNiAxLjk5NHYxMi4wMTJBMS45OTUgMS45OTUgMCAwIDEgMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMCAxIDAgMTQuMDA2VjEuOTk0em0xIDB2MTIuMDEyYzAgLjU0OC40NDYuOTk0Ljk5NC45OTRoMTIuMDEyYS45OTUuOTk1IDAgMCAwIC45OTQtLjk5NFYxLjk5NEEuOTk1Ljk5NSAwIDAgMCAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAgMCAxIDEuOTk0elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnVsbFNjcmVlbkV4aXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRnVsbFNjcmVlbiA9IGZ1bmN0aW9uIEV1aUljb25GdWxsU2NyZWVuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzIDN2NGgtMVY0SDlWM2g0Wk0zIDNoNHYxSDR2M0gzVjNabTEwIDEwSDl2LTFoM1Y5aDF2NFpNMyAxM1Y5aDF2M2gzdjFIM1pNMCAxLjk5NEMwIC44OTMuODk1IDAgMS45OTQgMGgxMi4wMTJDMTUuMTA3IDAgMTYgLjg5NSAxNiAxLjk5NHYxMi4wMTJBMS45OTUgMS45OTUgMCAwIDEgMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMCAxIDAgMTQuMDA2VjEuOTk0Wm0xIDB2MTIuMDEyYzAgLjU0OC40NDYuOTk0Ljk5NC45OTRoMTIuMDEyYS45OTUuOTk1IDAgMCAwIC45OTQtLjk5NFYxLjk5NEEuOTk1Ljk5NSAwIDAgMCAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAgMCAxIDEuOTk0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnVsbFNjcmVlbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GdW5jdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25GdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDIuMjI2djIuMjE4Yy0uMzU5LS4xNDMtLjg0NS0uMjE4LTEuMzE1LS4yMTgtMS4wNTkgMC0xLjYzMS41MTktMS44MDIgMS41NjVsLS4xNjguOTM3aDIuNzk4djIuMTU5SDkuNDFsLS4zMTMgMS42NzRDOC42OTYgMTIuOTg3IDcuMjYxIDE0IDQuNzg1IDE0Yy0uNzE4IDAtMS4zNS0uMDkyLTEuNzg1LS4yNTF2LTIuMjQzYy40MTguMTc2LjkwNS4yNjggMS4zODMuMjY4IDEuMDA4IDAgMS41NDYtLjQzNSAxLjcyNS0xLjUyM2wuMjQtMS4zNjRIMy43ODdWNi43MjhoMi44MTJsLjI4OC0xLjI2NEM3LjI4NiAzLjA3MSA4LjY2MiAyIDExLjM1MiAyYy41OTggMCAxLjMwNi4xIDEuNjQ4LjIyNnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZ1bmN0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkdlYXIgPSBmdW5jdGlvbiBFdWlJY29uR2VhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS4xNjQgMTAuMzI5IDEuODcgOCAuMTYzIDUuNjdjLjE4LS42MDEuNDMtMS4xOS43NTgtMS43NTdhOC4xOTcgOC4xOTcgMCAwIDEgMS4xNDItMS41MzVsMi44NzIuMzEzTDYuMDk5LjA1YTguMTY2IDguMTY2IDAgMCAxIDMuOC0uMDAzbDEuMTY2IDIuNjQ0IDIuODcyLS4zMTNhOC4xNjYgOC4xNjYgMCAwIDEgMS44OTkgMy4yOTNMMTQuMTMgOGwxLjcwNiAyLjMzYy0uMTguNjAxLS40MyAxLjE5LS43NTggMS43NTdhOC4xOTcgOC4xOTcgMCAwIDEtMS4xNDIgMS41MzVsLTIuODcyLS4zMTMtMS4xNjQgMi42NDFhOC4xNjYgOC4xNjYgMCAwIDEtMy44LjAwM2wtMS4xNjYtMi42NDQtMi44NzIuMzEzYTguMTY2IDguMTY2IDAgMCAxLTEuODk5LTMuMjkzWm00LjY2MyAxLjk4NmExIDEgMCAwIDEgMS4wMjMuNTkxbC45NTcgMi4xN2MuNzkuMTM0IDEuNTk3LjEzMiAyLjM4Ny0uMDAxbC45NTYtMi4xNjlhMSAxIDAgMCAxIDEuMDIzLS41OWwyLjM1OC4yNTZhNy4yMyA3LjIzIDAgMCAwIDEuMTk0LTIuMDY4bC0xLjQwMS0xLjkxM2ExIDEgMCAwIDEgMC0xLjE4MmwxLjQtMS45MTJhNy4xNjUgNy4xNjUgMCAwIDAtMS4xOTItMi4wNjlsLTIuMzU5LjI1N2ExIDEgMCAwIDEtMS4wMjMtLjU5MUw5LjE5My45MjRhNy4xNjUgNy4xNjUgMCAwIDAtMi4zODcuMDAxTDUuODUgMy4wOTRhMSAxIDAgMCAxLTEuMDIzLjU5bC0yLjM1OC0uMjU2YTcuMjMgNy4yMyAwIDAgMC0xLjE5NCAyLjA2OGwxLjQwMSAxLjkxM2ExIDEgMCAwIDEgMCAxLjE4MmwtMS40IDEuOTEyYy4yOC43NTEuNjgxIDEuNDUgMS4xOTIgMi4wNjlsMi4zNTktLjI1N1pNOCAxMWEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZabTAtMWEyIDIgMCAxIDAgMC00IDIgMiAwIDAgMCAwIDRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HZWFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkdsYXNzZXMgPSBmdW5jdGlvbiBFdWlJY29uR2xhc3NlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuMDM1IDlBMy41IDMuNSAwIDAgMSAxNSA3LjA1VjQuNWMwLTEuMDcyLS42NDgtMS43Mi0yLjA5OC0yLjAxYS41LjUgMCAwIDEgLjE5Ni0uOThDMTQuOTgxIDEuODg2IDE2IDIuOTA1IDE2IDQuNXY0LjI1YzAgLjA3Mi0uMDE1LjE0LS4wNDMuMjAyQTMuNSAzLjUgMCAxIDEgOS4wMzUgMTBoLTIuMDdBMy41IDMuNSAwIDEgMSAuMDQzIDguOTUyLjQ5OC40OTggMCAwIDEgMCA4Ljc1VjQuNWMwLTEuNTk1IDEuMDE5LTIuNjE0IDIuOTAyLTIuOTlhLjUuNSAwIDAgMSAuMTk2Ljk4QzEuNjQ4IDIuNzggMSAzLjQyOCAxIDQuNXYyLjU1QTMuNSAzLjUgMCAwIDEgNi45NjUgOWgyLjA3Wk0zLjUgMTJhMi41IDIuNSAwIDEgMCAwLTUgMi41IDIuNSAwIDAgMCAwIDVabTkgMGEyLjUgMi41IDAgMSAwIDAtNSAyLjUgMi41IDAgMCAwIDAgNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdsYXNzZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uR2xvYmUgPSBmdW5jdGlvbiBFdWlJY29uR2xvYmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjAxOSA4YTYuNDYyIDYuNDYyIDAgMCAwIDEuMDAzIDNoMi4zODJhMTQuNDY5IDE0LjQ2OSAwIDAgMS0uMzk2LTNoLTIuOTlabTAtMWgyLjk4OWMuMDMzLTEuMDc4LjE3Mi0yLjA5NC4zOTYtM0gyLjAyMmE2LjQ2MiA2LjQ2MiAwIDAgMC0xLjAwMyAzWk0xMy45OCA4aC0yLjk4OWExNC40NjkgMTQuNDY5IDAgMCAxLS4zOTYgM2gyLjM4MmE2LjQ2MiA2LjQ2MiAwIDAgMCAxLjAwMy0zWm0wLTFhNi40NjIgNi40NjIgMCAwIDAtMS4wMDMtM2gtMi4zODJjLjIyNC45MDYuMzYzIDEuOTIyLjM5NiAzaDIuOTlaTTUuMDA4IDhjLjAzNyAxLjEwNy4xOTUgMi4xMjcuNDI5IDNoNC4xMjZjLjIzNC0uODczLjM5Mi0xLjg5My40MjktM0g1LjAwOFptMC0xaDQuOTg0YTEzLjQyMiAxMy40MjIgMCAwIDAtLjQyOS0zSDUuNDM3YTEzLjQyMiAxMy40MjIgMCAwIDAtLjQyOSAzWk0uMDE2IDhIMFY3aC4wMTZhNy41IDcuNSAwIDAgMSAxNC45NjggMEgxNXYxaC0uMDE2QTcuNSA3LjUgMCAwIDEgLjAxNiA4Wm0yLjc5NCA0YTYuNTAxIDYuNTAxIDAgMCAwIDIuNzE3IDEuNjk1QTcuMzE1IDcuMzE1IDAgMCAxIDQuNyAxMkgyLjgxWm05LjM4IDBIMTAuM2MtLjIzLjY1Ny0uNTEgMS4yMy0uODI3IDEuNjk1QTYuNTAxIDYuNTAxIDAgMCAwIDEyLjE5IDEyWm0tNi40MjggMGMuNDg0IDEuMjQgMS4xMzIgMiAxLjczOCAyIC42MDYgMCAxLjI1NC0uNzYgMS43MzgtMkg1Ljc2MlpNMi44MSAzSDQuN2MuMjMtLjY1Ny41MS0xLjIzLjgyNy0xLjY5NUE2LjUwMSA2LjUwMSAwIDAgMCAyLjgxIDNabTkuMzggMGE2LjUwMSA2LjUwMSAwIDAgMC0yLjcxNy0xLjY5NWMuMzE3LjQ2NS41OTcgMS4wMzguODI3IDEuNjk1aDEuODlaTTUuNzYyIDNoMy40NzZDOC43NTQgMS43NiA4LjEwNiAxIDcuNSAxYy0uNjA2IDAtMS4yNTQuNzYtMS43MzggMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdsb2JlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkdyYWIgPSBmdW5jdGlvbiBFdWlJY29uR3JhYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy41IDZjLjI3NiAwIC41LjIzMi41LjUgMCAuMjc2LS4yMjkuNS0uNS41aC0xMWEuNTA1LjUwNSAwIDAgMS0uNS0uNWMwLS4yNzYuMjI5LS41LjUtLjVoMTFabTAgM2MuMjc2IDAgLjUuMjMyLjUuNSAwIC4yNzYtLjIyOS41LS41LjVoLTExYS41MDUuNTA1IDAgMCAxLS41LS41YzAtLjI3Ni4yMjktLjUuNS0uNWgxMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyYWI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uR3JhYk9tbmlkaXJlY3Rpb25hbCA9IGZ1bmN0aW9uIEV1aUljb25HcmFiT21uaWRpcmVjdGlvbmFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA1YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptNCAwYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpNNyA4YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFptMyAxYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptLTMgM2ExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBabTMgMWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HcmFiT21uaWRpcmVjdGlvbmFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkdyYWJIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkdyYWJIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMi41YzAtLjI3Ni4yMzItLjUuNS0uNS4yNzYgMCAuNS4yMjkuNS41djExYzAgLjI3Ni0uMjMyLjUtLjUuNWEuNTAzLjUwMyAwIDAgMS0uNS0uNXYtMTFabTMgMGMwLS4yNzYuMjMyLS41LjUtLjUuMjc2IDAgLjUuMjI5LjUuNXYxMWMwIC4yNzYtLjIzMi41LS41LjVhLjUwMy41MDMgMCAwIDEtLjUtLjV2LTExWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR3JhYkhvcml6b250YWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uR3JhZGllbnQgPSBmdW5jdGlvbiBFdWlJY29uR3JhZGllbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMSAyYTEgMSAwIDAgMSAxLTFoMTJhMSAxIDAgMCAxIDEgMXYxMmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMVYyWm00IDBoMXYxMkg1VjJabTMgMTJWMmgydjEySDhabTMgMGgzVjJoLTN2MTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HcmFkaWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25HcmlkID0gZnVuY3Rpb24gRXVpSWNvbkdyaWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDVWMWg0djRIMVptMy0xVjJIMnYyaDJabTIgMVYxaDR2NEg2Wm0zLTFWMkg3djJoMlptMiAxVjFoNHY0aC00Wm0xLTFoMlYyaC0ydjJaTTEgMTBWNmg0djRIMVptMy0xVjdIMnYyaDJabTIgMVY2aDR2NEg2Wm0zLTFWN0g3djJoMlptMiAxVjZoNHY0aC00Wm0zLTFWN2gtMnYyaDJaTTEgMTV2LTRoNHY0SDFabTEtMWgydi0ySDJ2MlptNCAxdi00aDR2NEg2Wm0xLTFoMnYtMkg3djJabTQgMXYtNGg0djRoLTRabTEtMWgydi0yaC0ydjJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HcmlkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkhlYXJ0ID0gZnVuY3Rpb24gRXVpSWNvbkhlYXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy40MDIgMy4wOThhMy43NSAzLjc1IDAgMCAwLTUuMzA0IDUuMzA0bDUuNTU4IDUuMjdMOCAxNGw1Ljg5Mi01LjU4OGEzLjc1IDMuNzUgMCAxIDAtNS4yOTQtNS4zMTNMOCAzLjY5N2wtLjU5OC0uNTk5Wk0yLjc5NiA3LjY4NWEyLjc0NyAyLjc0NyAwIDAgMSAuMDEtMy44OCAyLjc1IDIuNzUgMCAwIDEgMy44ODkgMEw4IDUuMTExbDEuMzA1LTEuMzA2YTIuNzUgMi43NSAwIDEgMSAzLjg5IDMuODlMOCAxMi42MiAyLjc5NiA3LjY4NVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkhlYXJ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkhlYXRtYXAgPSBmdW5jdGlvbiBFdWlJY29uSGVhdG1hcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDlhMyAzIDAgMSAxIDAgNiAzIDMgMCAwIDEgMC02Wm0wIDFhMiAyIDAgMSAwIDAgNCAyIDIgMCAwIDAgMC00Wk00IDJhMiAyIDAgMSAxIDAgNCAyIDIgMCAwIDEgMC00Wm0wIDFhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yWm0wIDVhNCA0IDAgMSAxIDAgOCA0IDQgMCAwIDEgMC04Wm0wIDFhMyAzIDAgMSAwIDAgNiAzIDMgMCAwIDAgMC02Wm04LTlhNCA0IDAgMSAxIDAgOCA0IDQgMCAwIDEgMC04Wm0wIDFhMyAzIDAgMSAwIDAgNiAzIDMgMCAwIDAgMC02WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSGVhdG1hcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25IZWxwID0gZnVuY3Rpb24gRXVpSWNvbkhlbHAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJtMTMuNiAxMi4xODYtMS4zNTctMS4zNThjLS4wMjUtLjAyNS0uMDU4LS4wMzQtLjA4NC0uMDU2LjUzLS43OTQuODQtMS43NDYuODQtMi43NzNhNC45NzcgNC45NzcgMCAwIDAtLjg0LTIuNzcyYy4wMjYtLjAyLjA1OS0uMDMuMDg0LS4wNTZMMTMuNiAzLjgxM2E2Ljk2IDYuOTYgMCAwIDEgMCA4LjM3M1pNOCAxNUE2Ljk1NiA2Ljk1NiAwIDAgMSAzLjgxNCAxMy42bDEuMzU4LTEuMzU4Yy4wMjUtLjAyNS4wMzQtLjA1Ny4wNTUtLjA4NEM2LjAyIDEyLjY4OCA2Ljk3NCAxMyA4IDEzYTQuOTc4IDQuOTc4IDAgMCAwIDIuNzczLS44NGMuMDIuMDI2LjAzLjA1OC4wNTYuMDgzbDEuMzU3IDEuMzU4QTYuOTU2IDYuOTU2IDAgMCAxIDggMTVabS01LjYwMS0yLjgxM2E2Ljk2MyA2Ljk2MyAwIDAgMSAwLTguMzczbDEuMzU5IDEuMzU4Yy4wMjQuMDI1LjA1Ny4wMzUuMDg0LjA1NkE0Ljk3IDQuOTcgMCAwIDAgMyA4YzAgMS4wMjcuMzEgMS45OC44NDIgMi43NzMtLjAyNy4wMjItLjA2LjAzMS0uMDg0LjA1NmwtMS4zNiAxLjM1OFptNS42LS4xODdBNCA0IDAgMSAxIDggNGE0IDQgMCAwIDEgMCA4Wk04IDFjMS41NzMgMCAzLjAxOS41MjUgNC4xODcgMS40bC0xLjM1NyAxLjM1OGMtLjAyNS4wMjUtLjAzNS4wNTctLjA1Ni4wODRBNC45NzkgNC45NzkgMCAwIDAgOCAzYTQuOTc5IDQuOTc5IDAgMCAwLTIuNzczLjg0MmMtLjAyMS0uMDI3LS4wMy0uMDU5LS4wNTUtLjA4NEwzLjgxNCAyLjRBNi45NTcgNi45NTcgMCAwIDEgOCAxWm0wLTFhOC4wMDEgOC4wMDEgMCAxIDAgLjAwMyAxNi4wMDJBOC4wMDEgOC4wMDEgMCAwIDAgOCAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSGVscDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ib21lID0gZnVuY3Rpb24gRXVpSWNvbkhvbWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm04LjEzIDEuMjI5IDUuNSA0LjQ3YTEgMSAwIDAgMSAuMzcuNzc3VjE0YTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjYuNDc2YTEgMSAwIDAgMSAuMzctLjc3Nmw1LjUtNC40NzFhMSAxIDAgMCAxIDEuMjYgMFpNMTMgNi40NzYgNy41IDIuMDA1IDIgNi40NzVWMTRoMTFWNi40NzZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ib21lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbklJbkNpcmNsZSA9IGZ1bmN0aW9uIEV1aUljb25JSW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy41IDExLjUwOCA3LjQ2OCA4SDYuMjVWN2gyLjQwMWwuMDMgMy41MDhIOS44djFINy41Wm0tLjI1LTYuMjAyYS44My44MyAwIDAgMSAuMjA3LS41NzdjLjEzNy0uMTUzLjMzNC0uMjI5LjU5LS4yMjkuMjU2IDAgLjQ1NC4wNzYuNTk0LjIzLjE0LjE1Mi4yMDkuMzQ1LjIwOS41NzYgMCAuMjI4LS4wNy40MTctLjIxLjU2OC0uMTQuMTUtLjMzNy4yMjYtLjU5My4yMjYtLjI1NiAwLS40NTMtLjA3NS0uNTktLjIyNmEuODEuODEgMCAwIDEtLjIwNy0uNTY4Wk04IDEzQTUgNSAwIDEgMCA4IDNhNSA1IDAgMCAwIDAgMTBabTAgMUE2IDYgMCAxIDEgOCAyYTYgNiAwIDAgMSAwIDEyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSUluQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkltYWdlID0gZnVuY3Rpb24gRXVpSWNvbkltYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA1YTIgMiAwIDEgMS00IDAgMiAyIDAgMCAxIDQgMHptOS00YTEgMSAwIDAgMSAxIDF2MTJhMSAxIDAgMCAxLTEgMUgxYTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xem0tMy40NDggNi4xMzQtMy43NiAyLjc2OWEuNS41IDAgMCAxLS40MzYuMDc3bC0uMDg3LS4wMzQtMS43MTMtLjg3TDEgMTEuOFYxNGgxNFY5Ljc1MWwtMy40NDgtMi42MTd6TTE1IDJIMXY4LjYzNWw0LjI4LTIuNTU4YS41LjUgMCAwIDEgLjM4OS0uMDU0bC4wOTQuMDM3IDEuNjg0Ljg1NSAzLjgxMy0yLjgwN2EuNS41IDAgMCAxIC41Mi0uMDQ1bC4wNzkuMDVMMTUgOC40OTVWMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkltYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkltcG9ydCA9IGZ1bmN0aW9uIEV1aUljb25JbXBvcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm05IDEwLjExNCAxLjg1LTEuOTQzYS41Mi41MiAwIDAgMSAuNzcgMGMuMjE0LjIyOC4yMTQuNiAwIC44MjlsLTEuOTUgMi4wNWExLjU1MiAxLjU1MiAwIDAgMS0yLjMxIDBMNS40MSA5YS42MTcuNjE3IDAgMCAxIDAtLjgyOS41Mi41MiAwIDAgMSAuNzcgMEw4IDEwLjA4MlYxLjU1NkM4IDEuMjQ5IDguMjI0IDEgOC41IDFzLjUuMjQ5LjUuNTU2djguNTU4Wk00LjE4IDZhLjk5My45OTMgMCAwIDAtLjk3Mi44MDRsLTEuMTg5IDZBLjk5NS45OTUgMCAwIDAgMi45OTEgMTRoMTEuMDE4YTEgMSAwIDAgMCAuOTcyLTEuMTk2bC0xLjE5LTZhLjk5My45OTMgMCAwIDAtLjk3LS44MDRINC4xOFpNNiA1djFoNVY1aDEuODI1Yy45NDYgMCAxLjc2LjY3MyAxLjk0NiAxLjYwOGwxLjE5IDZBMiAyIDAgMCAxIDE0LjAxNiAxNUgyLjk4NGExLjk5MiAxLjk5MiAwIDAgMS0xLjk0NS0yLjM5MmwxLjE5LTZDMi40MTQgNS42NzMgMy4yMjkgNSA0LjE3NCA1SDZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbXBvcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW5kZXggPSBmdW5jdGlvbiBFdWlJY29uSW5kZXgoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAySDN2MTFoMTF2MUgyVjFoMTJ2MTJoLTFWMlpNNiA1aDUuOTk5VjRINnYxWk00IDVWNGgxdjFINFptMiAzVjdoNnYxSDZaTTQgOFY3aDF2MUg0Wm0yIDN2LTFoNnYxSDZabS0yIDB2LTFoMXYxSDRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbmRleFRlbXBvcmFyeSA9IGZ1bmN0aW9uIEV1aUljb25JbmRleFRlbXBvcmFyeShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTNWMmgxMVYxSDJ2MTNoMnYtMUgzWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTk5IDVINlY0aDUuOTk5djFaTTQgNHYxaDFWNEg0Wm0yIDN2MWg0VjdINlpNNCA3djFoMVY3SDRabTIgM3YxaDJ2LTFINlptLTIgMHYxaDF2LTFINFptMTAtN2gtMXYxaDFWM1ptLTEgMmgxdjFoLTFWNVptMSAyaC0xdjFoMVY3Wm0tMSAyaDF2MWgtMVY5Wm0xIDJoLTF2MWgxdi0xWm0tMSAyaDF2MWgtMXYtMVptLTcgMEg1djFoMXYtMVptMSAwaDF2MUg3di0xWm0zIDBIOXYxaDF2LTFabTEgMGgxdjFoLTF2LTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleFRlbXBvcmFyeTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbmRleENsb3NlID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4Q2xvc2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAySDJ2MTFoNnYxSDFWMWgxMnY2aC0xVjJaTTUgNWg1Ljk5OVY0SDV2MVpNMyA1VjRoMXYxSDNabTIgM1Y3aDN2MUg1Wk0zIDhWN2gxdjFIM1ptMiAzdi0xaDJ2MUg1Wm01LjUtMS4yMDdMOS4wODYgOC4zNzlsLS43MDcuNzA3TDkuNzkzIDEwLjVsLTEuNDE0IDEuNDE0LjcwNy43MDcgMS40MTQtMS40MTQgMS40MTQgMS40MTQuNzA3LS43MDctMS40MTQtMS40MTQgMS40MTQtMS40MTQtLjcwNy0uNzA3TDEwLjUgOS43OTNaTTMgMTF2LTFoMXYxSDNabTcuNS01YTQuNSA0LjUgMCAxIDEgMCA5IDQuNSA0LjUgMCAwIDEgMC05WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhDbG9zZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbmRleEVkaXQgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhFZGl0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMkgydjExaDR2MUgxVjFoMTJ2NWgtMVYyWk01IDVoNS45OTlWNEg1djFaTTMgNVY0aDF2MUgzWm0yIDNWN2g2djFINVpNMyA4VjdoMXYxSDNabTIgM3YtMWgzdjFINVptLTIgMHYtMWgxdjFIM1ptNC41MDIgMS40MUwxMi45MTMgNyAxNSA5LjA4N2wtNS40MSA1LjQxTDcgMTVsLjUwMi0yLjU5WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhFZGl0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkluZGV4Rmx1c2ggPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhGbHVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNC41MTYgOUgxMC41YS41LjUgMCAwIDEgMC0xaDQuMDE2TDEzLjExIDUuOTQ4Yy0uMTcxLS4yNTItLjEzNy0uNjIuMDc5LS44MjEuMjE3LS4yLjUzMS0uMTU5LjcwMy4wOTJsMiAyLjkxNmEuNjQ4LjY0OCAwIDAgMSAuMTA4LjM5Ny42NDMuNjQzIDAgMCAxLS4xMDguMzMybC0yIDIuOTE4QS40NzguNDc4IDAgMCAxIDEzLjUgMTJhLjQ1Ny40NTcgMCAwIDEtLjMxMi0uMTI3Yy0uMjE2LS4yMDItLjI1LS41Ny0uMDc5LS44MkwxNC41MTYgOVpNMyAxNUgxYTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xaDcuOGMuMjc0IDAgLjUzNy4xMTMuNzI2LjMxMmwyLjIgMi40MjhjLjE3Ni4xODYuMjc0LjQzMy4yNzQuNjg5VjdoLTFWNUg4LjVhLjUuNSAwIDAgMS0uNS0uNVYySDN2MTJoOHYtNGgxdjRhMSAxIDAgMCAxLTEgMUgzWm0tMS0xVjJIMXYxMmgxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhGbHVzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbmRleE1hcHBpbmcgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhNYXBwaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA4SDQuOTE1YTEuNSAxLjUgMCAxIDEgMC0xSDhWMi41QTEuNSAxLjUgMCAwIDEgOS41IDFoMi41ODVhMS41IDEuNSAwIDEgMSAwIDFIOS41YS41LjUgMCAwIDAtLjUuNXYxMGEuNS41IDAgMCAwIC41LjVoMi41ODVhMS41IDEuNSAwIDEgMSAwIDFIOS41QTEuNSAxLjUgMCAwIDEgOCAxMi41VjhaTTMuNSAzYTEuNSAxLjUgMCAxIDEgMC0zIDEuNSAxLjUgMCAwIDEgMCAzWm0wIDEyYTEuNSAxLjUgMCAxIDEgMC0zIDEuNSAxLjUgMCAwIDEgMCAzWm0xMC02YTEuNSAxLjUgMCAxIDEgMC0zIDEuNSAxLjUgMCAwIDEgMCAzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhNYXBwaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkluZGV4T3BlbiA9IGZ1bmN0aW9uIEV1aUljb25JbmRleE9wZW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAySDJ2MTFoNnYxSDFWMWgxMnY2aC0xVjJaTTUgNWg1Ljk5OVY0SDV2MVpNMyA1VjRoMXYxSDNabTIgM1Y3aDN2MUg1Wk0zIDhWN2gxdjFIM1ptMiAzdi0xaDJ2MUg1Wm01LTFIOHYxaDJ2Mmgxdi0yaDJ2LTFoLTJWOGgtMXYyWm0tNyAxdi0xaDF2MUgzWm03LjUtNWE0LjUgNC41IDAgMSAxIDAgOSA0LjUgNC41IDAgMCAxIDAtOVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4T3BlbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbmRleFJ1bnRpbWUgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhSdW50aW1lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMkgydjExaDZ2MUgxVjFoMTJ2Ni44MzlsLTEtLjcwN1YyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxMXYtMUg1djFoM3ptMC0zLjA1NWMwLS4zNDIuMDgyLS42NjQuMjMtLjk0NUg1djFoM3YtLjA1NXpNNSA1aDUuOTk5VjRINXYxek0zIDR2MWgxVjRIM3ptMCAzdjFoMVY3SDN6bTAgM3YxaDF2LTFIM3ptMTEuNjA3LjItNC4zMi0zLjA1NUM5LjcyNyA2Ljc1IDkgNy4yMDQgOSA3Ljk0NXY2LjEwOGMwIC43NC43MjYgMS4xOTYgMS4yODcuOGw0LjMyLTMuMDU1Yy41MjQtLjM3LjUyNC0xLjIyOCAwLTEuNTk4elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhSdW50aW1lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkluZGV4U2V0dGluZ3MgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhTZXR0aW5ncyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgNWg1Ljk5OVY0SDV2MVpNMyA1aDFWNEgzdjFabTAgM2gxVjdIM3YxWm02LjAyMi0xLS4xNS4zMzMtLjczNy0uMDc4LS40NjctLjA1LS4zMy4zNDJBNS4xMyA1LjEzIDAgMCAwIDYuOTQ4IDhINVY3aDQuMDIyWm0tMy4wMDUgM0w2IDEwLjA1NmwuMzA2LjQxMS4zOTkuNTMzSDV2LTFoMS4wMTdaTTMgMTFoMXYtMUgzdjFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xMyA3LjA1LS4xNjItLjM1OS0uMi0uNDQ3LS40Ny0uMTFBNS4wMTkgNS4wMTkgMCAwIDAgMTIgNi4wOThWMkgydjExaDQuMzZjLjE1Ny4zNTQuMzU1LjY5LjU5IDFIMVYxaDEydjYuMDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4wMDQgN2MuMzIyIDAgLjY0Ni4wMzYuOTY2LjEwOWwuNTk1IDEuMjkzIDEuNDY1LS4xNTJjLjQ1Ny40NjIuNzg2IDEuMDE2Ljk2OSAxLjYxbC0uODcgMS4xNC44NzEgMS4xNDFhMy45NCAzLjk0IDAgMCAxLS4zODcuODU5IDQuMDU4IDQuMDU4IDAgMCAxLS41ODMuNzVsLTEuNDY1LS4xNTItLjU5NCAxLjI5MmE0LjM3IDQuMzcgMCAwIDEtMS45NDEuMDAxbC0uNTk0LTEuMjkzLTEuNDY2LjE1MmEzLjk1NCAzLjk1NCAwIDAgMS0uOTY5LTEuNjFsLjg3LTEuMTRMNyA5Ljg2YTMuOTQ3IDMuOTQ3IDAgMCAxIC45Ny0xLjYxbDEuNDY2LjE1Mi41OTMtMS4yOTJhNC4zNyA0LjM3IDAgMCAxIC45NzUtLjExWk0xMSAxMmExIDEgMCAxIDAgLjAwMi0xLjk5OEExIDEgMCAwIDAgMTEgMTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleFNldHRpbmdzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkluZmluaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkluZmluaXR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4zNyA5LjQ1N0ExLjk5NCAxLjk5NCAwIDAgMSAzLjk5MyAxMGEyIDIgMCAxIDEgMS40MDMtMy40MzNsLjYwMS42NzkgMS4zMzYtMS41MDgtLjQ2Mi0uNTIyYTQgNCAwIDEgMC0uMDQxIDUuNjEzbC4wMjEtLjAyMiAzLjc3Ny00LjI2NS4wMDIuMDAxYTIgMiAwIDEgMS0uMDI0IDIuODlsLS42MDEtLjY3OS0xLjMzNiAxLjUwOC40NjIuNTIyYTQgNCAwIDEgMCAwLTUuNTY5bC0zLjc0IDQuMjIzYTEuOTkxIDEuOTkxIDAgMCAxLS4wMi4wMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZmluaXR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbklucHV0T3V0cHV0ID0gZnVuY3Rpb24gRXVpSWNvbklucHV0T3V0cHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMTMuOTk5di0yLjk5aDFWMTVIMFYxaDExdjMuOTk5aC0xVjIuMDAxSDF2MTEuOTk4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41IDEwVjlIMTF2MXpNMTMgOS41bDMtMy0zLTN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjUgNi41djZsLTMtM3pNNyA3VjZoNi41djF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbnB1dE91dHB1dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbnNwZWN0ID0gZnVuY3Rpb24gRXVpSWNvbkluc3BlY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4zNjMgMTQuNjU4YS41LjUgMCAxIDEtLjcxMy43bC0yLjk3LTMuMDIzYS41LjUgMCAwIDEgLjAwMS0uN0EzLjkgMy45IDAgMSAwIDguOSAxMi44YS41LjUgMCAxIDEgMCAuOTk5IDQuOSA0LjkgMCAxIDEgMy44MjEtMS44MzNsMi42NDIgMi42OTFaTTMuMDk0IDEzYS41LjUgMCAxIDEgMCAxSDIuNUEyLjUgMi41IDAgMCAxIDAgMTEuNXYtOUEyLjUgMi41IDAgMCAxIDIuNSAwaDlBMi41IDIuNSAwIDAgMSAxNCAyLjV2LjU5OWEuNS41IDAgMSAxLTEgMFYyLjVBMS41IDEuNSAwIDAgMCAxMS41IDFoLTlBMS41IDEuNSAwIDAgMCAxIDIuNXY5QTEuNSAxLjUgMCAwIDAgMi41IDEzaC41OTRaTTIuNSAzYS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWm0yIDBhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFabTIgMGEuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptLTQgMmEuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptMiAwYS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWm0tMiAxYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0wIDNhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFabTYtNmEuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptMiAwYS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWm0tOCA4YS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5zcGVjdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbnZlcnQgPSBmdW5jdGlvbiBFdWlJY29uSW52ZXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxMy4yNWE1LjI1IDUuMjUgMCAxIDAgMC0xMC41IDUuMjUgNS4yNSAwIDAgMCAwIDEwLjVaTTggMTRBNiA2IDAgMSAxIDggMmE2IDYgMCAwIDEgMCAxMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMmE2IDYgMCAxIDAgMCAxMlYyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW52ZXJ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbklwID0gZnVuY3Rpb24gRXVpSWNvbklwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhabS0yIDNIOHY2aDFWOS4wMTRoMWMuMjk4LS4wMTMgMiAwIDItMi4wMTggMC0xLjc0LTEuMzE0LTEuOTUyLTEuODI1LTEuOTg3TDEwIDVaTTYgNUg1djZoMVY1Wm00IC45ODRjLjY2NyAwIDEgLjMzNiAxIDEuMDA4QzExIDcuNjY0IDEwLjY2NyA4IDEwIDhIOVY1Ljk4NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbklwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbklzc3VlID0gZnVuY3Rpb24gRXVpSWNvbklzc3VlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdpc3N1ZScpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGNsaXBQYXRoOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSwgXCIpXCIpLFxuICAgIGZpbGw6IFwiIzM0Mzc0MVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggLjVjNC4xMzYgMCA3LjUgMy4zNjQgNy41IDcuNXMtMy4zNjQgNy41LTcuNSA3LjVTLjUgMTIuMTM2LjUgOCAzLjg2NC41IDggLjV6bTAgLjg4MmE2LjYxOCA2LjYxOCAwIDEwMCAxMy4yMzZBNi42MTggNi42MTggMCAwMDggMS4zODJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDhhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwelwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImNsaXBQYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDBoMTZ2MTZIMHpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Jc3N1ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25LZXkgPSBmdW5jdGlvbiBFdWlJY29uS2V5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDVhMiAyIDAgMSAxLTQgMCAyIDIgMCAwIDEgNCAwWm0tMSAwYTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgNmE1IDUgMCAxIDEgMy4wODYgNC42MmwtMS4yMzIgMS4yMzRBLjUuNSAwIDAgMSA3LjUgMTJINnYxLjVhLjUuNSAwIDAgMS0uNS41SDR2MS41YS41LjUgMCAwIDEtLjUuNWgtM2EuNS41IDAgMCAxLS41LS41di0zYS41LjUgMCAwIDEgLjE3NS0uMzhsNS45MzItNS4wODVBNS4wMTkgNS4wMTkgMCAwIDEgNiA2Wm01LTRhNCA0IDAgMCAwLTMuODUzIDUuMDguNS41IDAgMCAxLS4xNTYuNTE1TDEgMTIuNzNWMTVoMnYtMS41YS41LjUgMCAwIDEgLjUtLjVINXYtMS41YS41LjUgMCAwIDEgLjUtLjVoMS43OTNsLjg3Ny0uODc3YTUuMDMzIDUuMDMzIDAgMCAxLS41MDMtLjM5Ni41LjUgMCAxIDEgLjY2Ni0uNzQ1QTMuOTgzIDMuOTgzIDAgMCAwIDExIDEwaC4wMDVBNCA0IDAgMCAwIDExIDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LZXk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uS2V5Ym9hcmQgPSBmdW5jdGlvbiBFdWlJY29uS2V5Ym9hcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMCAzaDE2djExSDBWM1ptMTUgMTBWNEgxdjloMTRaTTIgNWgydjFIMlY1Wm0yIDd2LTFIMnYxaDJabTEwLTF2MWgtMnYtMWgyWm0tMyAxdi0xSDV2MWg2Wk01IDVoMXYxSDVWNVpNMyA3SDJ2MWgxVjdabTMgMGgxdjFINlY3Wk0zIDlIMnYxaDFWOVptMyAwaDF2MUg2VjlabTItNEg3djFoMVY1Wk00IDdoMXYxSDRWN1ptNSAwSDh2MWgxVjdabTEgMGgxdjFoLTFWN1pNNSA5SDR2MWgxVjlabTMgMGgxdjFIOFY5Wm0zIDBoLTF2MWgxVjlaTTkgNWgxdjFIOVY1Wm0zIDBoLTF2MWgxVjVabTEgMGgxdjFoLTFWNVptMSAyaC0ydjNoMlY3WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktleWJvYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbktxbEZpZWxkID0gZnVuY3Rpb24gRXVpSWNvbktxbEZpZWxkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDEwLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDEwXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA5YTUgNSAwIDEgMSAwLTggNSA1IDAgMSAxIDAgOFptLjc1LS42OTJhNCA0IDAgMSAwIDAtNi42MTVBNC45ODEgNC45ODEgMCAwIDEgMTAgNWE0Ljk4MSA0Ljk4MSAwIDAgMS0xLjI1IDMuMzA4Wk00LjEzMyA4VjUuNTU5aDIuNDk2di0uNjI1SDQuMTMzVjIuOTk2aDIuNzE5di0uNjMzSDMuNDNWOGguNzAzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsRmllbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uS3FsRnVuY3Rpb24gPSBmdW5jdGlvbiBFdWlJY29uS3FsRnVuY3Rpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDdIM3YyaDR2MmwzLTMtMy0zdjJaTTYgNlY1YTEgMSAwIDAgMSAxLjcwNy0uNzA3bDMgM2ExIDEgMCAwIDEgMCAxLjQxNGwtMyAzQTEgMSAwIDAgMSA2IDExdi0xSDNhMSAxIDAgMCAxLTEtMVY3YTEgMSAwIDAgMSAxLTFoM1ptNy41LTNhLjUuNSAwIDAgMSAuNS41djlhLjUuNSAwIDEgMS0xIDB2LTlhLjUuNSAwIDAgMSAuNS0uNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbEZ1bmN0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbktxbE9wZXJhbmQgPSBmdW5jdGlvbiBFdWlJY29uS3FsT3BlcmFuZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTExLjE5MiAxMC4xNDUgMi4yOTgtMS43OTJjLjI1OS0uMTk2LjI1OS0uNTA5IDAtLjcwNmwtMi4yOTgtMS43OTJjLS4yNTYtLjE5Ni0uMjU2LS41MTMgMC0uNzA4YS44MS44MSAwIDAgMSAuOTMgMGwyLjMgMS43OTFjLjc3Mi41OS43NyAxLjUzNyAwIDIuMTI0bC0yLjMgMS43OTFhLjgxLjgxIDAgMCAxLS45MyAwYy0uMjU2LS4xOTUtLjI1Ni0uNTEyIDAtLjcwOFptLTYuMzg0LTQuMjlMMi41MSA3LjY0N2MtLjI1OS4xOTYtLjI1OS41MDkgMCAuNzA2bDIuMjk4IDEuNzkyYy4yNTYuMTk2LjI1Ni41MTMgMCAuNzA4YS44MS44MSAwIDAgMS0uOTMgMGwtMi4zLTEuNzkxYy0uNzcyLS41OS0uNzctMS41MzcgMC0yLjEyNGwyLjMtMS43OTFhLjgxLjgxIDAgMCAxIC45MyAwYy4yNTYuMTk1LjI1Ni41MTIgMCAuNzA4Wk02LjUgNmgzYS41LjUgMCAwIDEgMCAxaC0zYS41LjUgMCAwIDEgMC0xWm0wIDNoM2EuNS41IDAgMCAxIDAgMWgtM2EuNS41IDAgMCAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbE9wZXJhbmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uS3FsU2VsZWN0b3IgPSBmdW5jdGlvbiBFdWlJY29uS3FsU2VsZWN0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDEyYTQgNCAwIDEgMCAwLTggNCA0IDAgMCAwIDAgOFptMCAxQTUgNSAwIDEgMSA1IDNhNSA1IDAgMCAxIDAgMTBabTYtMWE0IDQgMCAxIDAgMC04IDQgNCAwIDAgMCAwIDhabTAgMWE1IDUgMCAxIDEgMC0xMCA1IDUgMCAwIDEgMCAxMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbFNlbGVjdG9yOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbktxbFZhbHVlID0gZnVuY3Rpb24gRXVpSWNvbktxbFZhbHVlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0YTUgNSAwIDEgMSAwIDggNSA1IDAgMSAxIDAtOFptLS43NS42OTJhNCA0IDAgMSAwIDAgNi42MTVBNC45ODEgNC45ODEgMCAwIDEgNiA4YzAtMS4yNjguNDcyLTIuNDI2IDEuMjUtMy4zMDhaTTExLjM0OCAxMWwyLjA3OC01LjYzN2gtLjczOWwtMS42NTYgNC43MjdoLS4wNjJMOS4zMTMgNS4zNjNoLS43MzlMMTAuNjUyIDExaC42OTZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LcWxWYWx1ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25LdWJlcm5ldGVzTm9kZSA9IGZ1bmN0aW9uIEV1aUljb25LdWJlcm5ldGVzTm9kZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNCAxMS40MlY0LjU4TDggMS4xNTIgMiA0LjU4djYuODRsNiAzLjQyOCA2LTMuNDI4ek04IDE2bDctNFY0TDggMCAxIDR2OGw3IDR6TTggNC42MDdsMyAxLjcxNFY5LjY4bC0zIDEuNzE0LTMtMS43MTRWNi4zMmwzLTEuNzE0em00IDEuMTM0djQuNTE4bC00IDIuMjg2LTQtMi4yODZWNS43NDFsNC0yLjI4NiA0IDIuMjg2elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkt1YmVybmV0ZXNOb2RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkt1YmVybmV0ZXNQb2QgPSBmdW5jdGlvbiBFdWlJY29uS3ViZXJuZXRlc1BvZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNCA1LjE1MXY2LjI2OWwtNS41IDMuMTQyVjguMjlMMTQgNS4xNTF6bS0uNTA4LS44NjFMOCAxLjE1MiAyLjUwOCA0LjI5IDggNy40MjRsNS40OTItMy4xMzR6TTIgNS4xNTFsNS41IDMuMTR2Ni4yNzJMMiAxMS40MlY1LjE1ek0xNSAxMmwtNyA0LTctNFY0bDctNCA3IDR2OHpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LdWJlcm5ldGVzUG9kOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxhdW5jaCA9IGZ1bmN0aW9uIEV1aUljb25MYXVuY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTAgNGEyIDIgMCAxIDAgMCA0IDIgMiAwIDAgMCAwLTRaTTkgNmExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNjc5IDEyLjk2N2MuMzUzLS4xMzYuNjk3LS4zIDEuMDMzLS40NzVsMS4zNiAyLjI2NWEuNS41IDAgMCAwIC44MjguMDQzbDMtNGEuNS41IDAgMCAwLS4wNDYtLjY1NGwtLjg4Ni0uODg2QzEzLjYwNCA3LjQ1NiAxNSA0LjkxMyAxNSAxLjVhLjUuNSAwIDAgMC0uNS0uNWMtMy40MTMgMC01Ljk1NiAxLjM5NS03Ljc2IDMuMDMzbC0uODg2LS44ODdBLjUuNSAwIDAgMCA1LjIgMy4xbC00IDNhLjUuNSAwIDAgMCAuMDQzLjgyOWwyLjI2NCAxLjM1OGE5LjU5IDkuNTkgMCAwIDAtLjQ3NSAxLjAzNnYuMDAxYS41LjUgMCAwIDAgLjExNC41M2wzIDNjLjEzOS4xMzguMzUuMTgyLjUzMy4xMTNaTTQuMDkgOS4zODRsMi41MjUgMi41MjVhMTQuNjE2IDE0LjYxNiAwIDAgMCAzLjU1NS0yLjI4NWMxLjg0MS0xLjYxMiAzLjY1Ny00LjA3NiAzLjgxOC03LjYxMi0zLjUzNy4xNi02LjAwMSAxLjk3Ni03LjYxMyAzLjgxN0ExNC42MTcgMTQuNjE3IDAgMCAwIDQuMDkgOS4zODRabS0uMDk2LTEuOTdhMTUuNjE2IDE1LjYxNiAwIDAgMSAyLjAzLTIuNjgybC0uNTcyLS41NzItMy4wNTggMi4yOTQgMS42Ljk2Wm01LjU1MSA2LjE5MS0uOTYtMS42YTE1LjYxNyAxNS42MTcgMCAwIDAgMi42ODItMi4wM2wuNTcyLjU3Mi0yLjI5NCAzLjA1OFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjg1NCAxMi4xNDZhLjUuNSAwIDAgMSAwIC43MDhsLTIgMmEuNS41IDAgMCAxLS43MDgtLjcwOGwyLTJhLjUuNSAwIDAgMSAuNzA4IDBabTIgMS43MDhhLjUuNSAwIDAgMC0uNzA4LS43MDhsLTEgMWEuNS41IDAgMCAwIC43MDguNzA4bDEtMVptLTMtMy43MDhhLjUuNSAwIDAgMSAwIC43MDhsLTEgMWEuNS41IDAgMCAxLS43MDgtLjcwOGwxLTFhLjUuNSAwIDAgMSAuNzA4IDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MYXVuY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTGF5ZXJzID0gZnVuY3Rpb24gRXVpSWNvbkxheWVycyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMjc2IDEuMDUzYS41LjUgMCAwIDEgLjQ0OCAwbDYgM2EuNS41IDAgMCAxIDAgLjg5NGwtNiAzYS41LjUgMCAwIDEtLjQ0OCAwbC02LTNhLjUuNSAwIDAgMSAwLS44OTRsNi0zek0yLjYxOCA0LjUgNy41IDYuOTQxIDEyLjM4MiA0LjUgNy41IDIuMDU5IDIuNjE4IDQuNXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMDUzIDcuMjc2YS41LjUgMCAwIDEgLjY3LS4yMjNMNy41IDkuOTRsNS43NzYtMi44ODhhLjUuNSAwIDEgMSAuNDQ4Ljg5NGwtNiAzYS41LjUgMCAwIDEtLjQ0OCAwbC02LTNhLjUuNSAwIDAgMS0uMjIzLS42N3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNzI0IDEwLjA1M2EuNS41IDAgMSAwLS40NDguODk0bDYgM2EuNS41IDAgMCAwIC40NDggMGw2LTNhLjUuNSAwIDEgMC0uNDQ4LS44OTRMNy41IDEyLjk0bC01Ljc3Ni0yLjg4OHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxheWVyczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25MZXR0ZXJpbmcgPSBmdW5jdGlvbiBFdWlJY29uTGV0dGVyaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwibTUgMyAzIDlIN0w2IDlIM2wtMSAzSDFsMy05aDF6bS0uNSAxLjVMNS42NjcgOEgzLjMzM0w0LjUgNC41em03Ljk5IDEuNjQ3QzEyLjE2IDYuMDA1IDExLjc2IDYgMTEuNSA2Yy0uMzU5IDAtMS4wMjIuMTc1LTEuNjMyLjgzOGwtLjczNi0uNjc2QzkuOTI5IDUuMjk0IDEwLjg1OSA1IDExLjUgNWguMDE2Yy4yNSAwIC44MzYgMCAxLjM2OS4yMjguMjgxLjEyLjU2OC4zMTMuNzgyLjYxNy4yMTYuMzA3LjMzMy42OTMuMzMzIDEuMTU1djVoLTF2LS4zNTRhMi4xMDEgMi4xMDEgMCAwIDEtLjA2NC4wMzhjLS41NTQuMzE3LTEuMTY2LjMxNi0xLjQyLjMxNmgtLjAzMmMtLjI1IDAtLjgzNiAwLTEuMzY4LS4yMjhhMS44MSAxLjgxIDAgMCAxLS43ODMtLjYxN0M5LjExNyAxMC44NDggOSAxMC40NjIgOSAxMGMwLS40NjIuMTE3LS44NDguMzMzLTEuMTU1LjIxNC0uMzA0LjUtLjQ5Ni43ODMtLjYxN0MxMC42NDggOCAxMS4yMzMgOCAxMS40ODQgOGguMDE2Yy4yNTggMCAuNjktLjAwMyAxLjA1LS4xMDZhLjg4OS44ODkgMCAwIDAgLjM2NC0uMTc5Yy4wNTMtLjA1LjA4Ni0uMTA4LjA4Ni0uMjE1VjdjMC0uMjg4LS4wNy0uNDY1LS4xNTEtLjU4YS44MTQuODE0IDAgMCAwLS4zNTgtLjI3M3pNMTMgOC44Yy0uMDYuMDIyLS4xMTguMDQtLjE3NS4wNTdDMTIuMzIgOSAxMS43NjIgOSAxMS41MTMgOUgxMS41Yy0uMjU5IDAtLjY2LjAwNS0uOTkuMTQ3YS44MTQuODE0IDAgMCAwLS4zNTkuMjc0Yy0uMDguMTE0LS4xNTEuMjkxLS4xNTEuNTc5cy4wNy40NjUuMTUxLjU4YS44MTMuODEzIDAgMCAwIC4zNTguMjczYy4zMzEuMTQyLjczMi4xNDcuOTkxLjE0Ny4yNTcgMCAuNjMtLjAwOC45NC0uMTg0LjI1NS0uMTQ2LjU2LS40NjMuNTYtMS4zMTZ2LS43MDF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MZXR0ZXJpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTGluZURhc2hlZCA9IGZ1bmN0aW9uIEV1aUljb25MaW5lRGFzaGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuNzA3IDQuNzA3YTEgMSAwIDEgMS0xLjQxNC0xLjQxNGwyLTJhMSAxIDAgMSAxIDEuNDE0IDEuNDE0bC0yIDJ6bS02LjQxNCA1YTEgMSAwIDAgMCAxLjQxNCAwbDItMmExIDEgMCAxIDAtMS40MTQtMS40MTRsLTIgMmExIDEgMCAwIDAgMCAxLjQxNHptLTUgNWExIDEgMCAwIDAgMS40MTQgMGwyLTJhMSAxIDAgMSAwLTEuNDE0LTEuNDE0bC0yIDJhMSAxIDAgMCAwIDAgMS40MTR6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MaW5lRGFzaGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxpbmVEb3R0ZWQgPSBmdW5jdGlvbiBFdWlJY29uTGluZURvdHRlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjUgM2ExLjUgMS41IDAgMSAwIDAtMyAxLjUgMS41IDAgMCAwIDAgM3pNMTEgNS41YTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwek01LjUgMTFhMS41IDEuNSAwIDEgMCAwLTMgMS41IDEuNSAwIDAgMCAwIDN6bS00IDRhMS41IDEuNSAwIDEgMCAwLTMgMS41IDEuNSAwIDAgMCAwIDN6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MaW5lRG90dGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxpbmVTb2xpZCA9IGZ1bmN0aW9uIEV1aUljb25MaW5lU29saWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjI5MyAxNC43MDdhMSAxIDAgMCAwIDEuNDE0IDBsMTItMTJhMSAxIDAgMSAwLTEuNDE0LTEuNDE0bC0xMiAxMmExIDEgMCAwIDAgMCAxLjQxNHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVTb2xpZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25MaW5rID0gZnVuY3Rpb24gRXVpSWNvbkxpbmsoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjY2IDMuODAzYS41LjUgMCAxIDEtLjcwNi0uNzA3TDkuMjY4Ljc4YzEuMTg3LTEuMTg3IDMuMjQyLTEgNC41OTYuMzU0czEuNTQgMy40MDkuMzU0IDQuNTk2bC0zLjUzNiAzLjUzNmMtMS4xODcgMS4xODctMy4yNDIgMS00LjU5Ni0uMzU0YS41LjUgMCAxIDEgLjcwNy0uNzA3Yy45OS45OSAyLjQxNyAxLjExOSAzLjE4Mi4zNTRsMy41MzYtMy41MzZjLjc2NS0uNzY1LjYzNS0yLjE5My0uMzU0LTMuMTgyLS45OS0uOTktMi40MTctMS4xMTktMy4xODItLjM1NEw3LjY2MSAzLjgwM1ptLS4zMiA3LjM5MmEuNS41IDAgMSAxIC43MDcuNzA3bC0yLjMxNSAyLjMxNGMtMS4xODcgMS4xODgtMy4yNDIgMS00LjU5Ni0uMzUzLTEuMzU0LTEuMzU0LTEuNTQtMy40MS0uMzUzLTQuNTk2TDQuMzE4IDUuNzNjMS4xODctMS4xODcgMy4yNDItMSA0LjU5Ni4zNTRhLjUuNSAwIDAgMS0uNzA3LjcwN2MtLjk4OS0uOTktMi40MTYtMS4xMi0zLjE4Mi0uMzU0TDEuNDkgOS45NzRjLS43NjYuNzY1LS42MzYgMi4xOTMuMzUzIDMuMTgyLjk5Ljk4OSAyLjQxNyAxLjExOSAzLjE4Mi4zNTNsMi4zMTUtMi4zMTRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MaW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxpc3QgPSBmdW5jdGlvbiBFdWlJY29uTGlzdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgNFYzaDJ2MUgyWm00IDBWM2g4djFINlptMCAzVjZoOHYxSDZabTAgM1Y5aDh2MUg2Wk0yIDdWNmgydjFIMlptMCAzVjloMnYxSDJabTQgM3YtMWg4djFINlptLTQgMHYtMWgydjFIMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpc3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTGlzdEFkZCA9IGZ1bmN0aW9uIEV1aUljb25MaXN0QWRkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEgMTFIOXYxaDJ2Mmgxdi0yaDJ2LTFoLTJWOWgtMXYyWk03Ljc1OCA5YTQuNSA0LjUgMCAxIDEtLjUwMiA0SDZ2LTFoMS4wMjdhNC41NDggNC41NDggMCAwIDEgLjIzLTJINlY5aDEuNzU4Wk0yIDRWM2gydjFIMlptNCAwVjNoOHYxSDZabTAgM1Y2aDh2MUg2Wk0yIDdWNmgydjFIMlptMCAzVjloMnYxSDJabTAgM3YtMWgydjFIMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpc3RBZGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9jayA9IGZ1bmN0aW9uIEV1aUljb25Mb2NrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA1di0uOEM0IDEuODggNS43OSAwIDggMHM0IDEuODggNCA0LjJWNWgxLjE0M2MuNDczIDAgLjg1Ny40NDguODU3IDF2OWMwIC41NTItLjM4NCAxLS44NTcgMUgyLjg1N0MyLjM4NCAxNiAyIDE1LjU1MiAyIDE1VjZjMC0uNTUyLjM4NC0xIC44NTctMUg0Wk0zIDE1aDEwVjZIM3Y5Wm01Ljk5OC0zLjcwNkw5LjUgMTIuNWgtM2wuNTAyLTEuMjA2QTEuNjQ0IDEuNjQ0IDAgMCAxIDYuNSAxMC4xYzAtLjg4My42NzItMS42IDEuNS0xLjZzMS41LjcxNyAxLjUgMS42YzAgLjQ3NS0uMTk0LjkwMS0uNTAyIDEuMTk0Wk0xMSA0LjM2QzExIDIuNTA0IDkuNjU3IDEgOCAxUzUgMi41MDQgNSA0LjM2VjVoNnYtLjY0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9jazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2NrT3BlbiA9IGZ1bmN0aW9uIEV1aUljb25Mb2NrT3BlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjE0MyA1Yy40NzMgMCAuODU3LjQ0OC44NTcgMXY5YzAgLjU1Mi0uMzg0IDEtLjg1NyAxSC44NTdDLjM4NCAxNiAwIDE1LjU1MiAwIDE1VjZjMC0uNTUyLjM4NC0xIC44NTctMUg4di0uOEM4IDEuODggOS43OSAwIDEyIDBzNCAxLjg4IDQgNC4yVjVoLTF2LS42NEMxNSAyLjUwNCAxMy42NTcgMSAxMiAxUzkgMi41MDQgOSA0LjM2VjVoMi4xNDNaTTEgMTVoMTBWNkgxdjlabTUuOTk4LTMuNzA2TDcuNSAxMi41aC0zbC41MDItMS4yMDZBMS42NDQgMS42NDQgMCAwIDEgNC41IDEwLjFjMC0uODgzLjY3Mi0xLjYgMS41LTEuNnMxLjUuNzE3IDEuNSAxLjZjMCAuNDc1LS4xOTQuOTAxLS41MDIgMS4xOTRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2NrT3BlbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dQYXR0ZXJuQW5hbHlzaXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nUGF0dGVybkFuYWx5c2lzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxaDEwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWM2EyIDIgMCAwIDEgMi0yWm0wIDFhMSAxIDAgMCAwLTEgMXYxMGExIDEgMCAwIDAgMSAxaDEwYTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xSDNabS41IDFoNGEuNS41IDAgMCAxIDAgMWgtNGEuNS41IDAgMCAxIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSAzYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSAzYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVptMCAzaC00YS41LjUgMCAwIDAgMCAxaDRhLjUuNSAwIDAgMCAwLTFabS04IDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVptMiAwYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41IDZoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVptMiAwYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm02IDZoLTRhLjUuNSAwIDAgMCAwIDFoNGEuNS41IDAgMCAwIDAtMVptLTggMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWm0yIDBhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjUgMTJoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVptMiAwYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zLTlhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDNhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDNhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDNhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDNhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDNhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWm0tMyA2YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA5YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA5YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA5YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA5YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA5YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA5YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA5YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVptLTUgMGgtNGEuNS41IDAgMCAwIDAgMWg0YS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nUGF0dGVybkFuYWx5c2lzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ1JhdGVBbmFseXNpcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dSYXRlQW5hbHlzaXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgMTNhLjUuNSAwIDAgMS0uNS0uNVYxMUg3djEuNWEuNS41IDAgMCAxLTEgMFY5SDR2My41YS41LjUgMCAwIDEtMSAwdi00YS41LjUgMCAwIDEgLjUtLjVoM2EuNS41IDAgMCAxIC41LjVWMTBoMlYxLjVhLjUuNSAwIDAgMSAuNS0uNWgzYS41LjUgMCAwIDEgLjUuNXYxMWEuNS41IDAgMCAxLS41LjVoLTNabS04IDJhLjUuNSAwIDAgMSAwLTFoMTNhLjUuNSAwIDAgMSAwIDFoLTEzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nUmF0ZUFuYWx5c2lzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29BZXJvc3Bpa2UgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Flcm9zcGlrZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNDNDM3M0FcIixcbiAgICBkOiBcIk0wIDMxLjgwNmgzMlYuNzc2SDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIm0xOS40NDggMTIuNTA4LTguOTg2IDMuODYgOC45ODYgMy44ODN2LTcuNzQzWm0tMTEuMzA0IDQuNzMtMi4wOTQtLjg2MyAyLjA5NC0uOTMxIDE3Ljc0OS03Ljc0MXYyLjA2MmwtNC42NTQgMS45OXY5LjI1bDQuNjU0IDIuMDF2MS45NjhMOC4xNDMgMTcuMjRaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0Flcm9zcGlrZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQXBhY2hlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BcGFjaGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fYXBhY2hlJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgeDE6IFwiMjEuOTAyJVwiLFxuICAgIHgyOiBcIjE0MS44NzklXCIsXG4gICAgeTE6IFwiNjMuOTA1JVwiLFxuICAgIHkyOiBcIjIwLjIxMyVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNGNjk5MjNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMS4yMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0Y3OUEyM1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjgzLjgzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgeDE6IFwiLTIxNy42NTElXCIsXG4gICAgeDI6IFwiNzQuNzQzJVwiLFxuICAgIHkxOiBcIjE3Ny4xMjclXCIsXG4gICAgeTI6IFwiMzYuNjY1JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgeDE6IFwiLTgwLjA0NCVcIixcbiAgICB4MjogXCIxNDYuMjQlXCIsXG4gICAgeTE6IFwiNzMuNTc0JVwiLFxuICAgIHkyOiBcIjMxLjUzOSVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMyLjMzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUUyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNjMuMDIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDOTIwMzdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3NS4xNCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjMzNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0U5NzgyNlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIHgxOiBcIi0xOC4zMTYlXCIsXG4gICAgeDI6IFwiMTY1LjAwMiVcIixcbiAgICB5MTogXCI1Mi40OTclXCIsXG4gICAgeTI6IFwiNDEuNjU2JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzI4MjY2MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjkuNTQ4JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNjYyRThEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzguODIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RjIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5NC44NyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjAzMlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIHgxOiBcIi0xMDkuNzAxJVwiLFxuICAgIHgyOiBcIjY0LjYxNyVcIixcbiAgICB5MTogXCI0NjMuNzE1JVwiLFxuICAgIHkyOiBcIjE3LjE5JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdmJyksXG4gICAgeDE6IFwiLTM0Ljg4JVwiLFxuICAgIHgyOiBcIjExMC41OTklXCIsXG4gICAgeTE6IFwiMTMwLjUyMiVcIixcbiAgICB5MjogXCItOS4xMTglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMi4zMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlFMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjYzLjAyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzkyMDM3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUuMTQlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIzMzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2cnKSxcbiAgICB4MTogXCItMTMuNjczJVwiLFxuICAgIHgyOiBcIjExNy44NTglXCIsXG4gICAgeTE6IFwiMTkyLjU2NCVcIixcbiAgICB5MjogXCItMTM2LjkwNiVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyODI2NjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5LjU0OCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzY2MkU4RFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc4LjgyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUYyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiOTQuODclXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIwMzJcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJNMTMuNjI4LjE4Yy0uNDk4LjI5My0xLjMzMiAxLjEzNC0yLjMyOCAyLjM0OHYuMDc0bC44NzEgMS42MTMuMDQ0LjAzYy42NDEtLjkxNCAxLjI4OS0xLjc0MiAxLjk0OC0yLjQ0Ni4wNS0uMDU2LjA3NS0uMDguMDc1LS4wOC0uMDI1LjAyNC0uMDUuMDU1LS4wNzUuMDgtLjIxMS4yMzctLjg1OS45ODQtMS44MyAyLjQ3OGwuMTEyLjAyNXMyLjI3My0uMjI0IDMuMzY4LS40MWwuMDYyLS4wNTdjLjM1LTEuOTU1LS4zNDItMi44NTEtLjM0Mi0yLjg1MVMxNC42NjEtLjQyMyAxMy42MjguMThaXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBkOiBcIk05LjUyNSA4LjY5N2MuMjgtLjUxNi41Ni0xLjAyNy44NC0xLjUxOS4yOTMtLjUxLjU5Mi0xLjAwOC44OTctMS40ODhhLjM5Ny4zOTcgMCAwIDAgLjA1LS4wODdjLjI5OS0uNDczLjU5OC0uOTIxLjkwMy0xLjM1N0wxMS4zIDIuNTJjLS4wNjkuMDgxLS4xMzcuMTY4LS4yMDYuMjU2LS4yNjEuMzMtLjUzNS42NzgtLjgxNSAxLjA1MmE1MS43ODMgNTEuNzgzIDAgMCAwLTEuODkzIDIuNzA4Yy0uMjYxLjQwNS0uNTMuODE2LS43OSAxLjI0NWwtLjAzMi4wNVY3LjlsMS4xNCAyLjI2LjA1LjAxOWMuMjU1LS40OTguNTEtLjk5Ni43NzEtMS40ODJaXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdjJyksIFwiKVwiKSxcbiAgICBkOiBcIk00LjU2MyAxOS43NmMuMjA2LS41MzUuNDI0LTEuMDc3LjY0Mi0xLjYyNS4yMTEtLjUyMy40MjMtMS4wNTIuNjQ3LTEuNTguMjE4LS41My40NDgtMS4wNi42NzktMS41OTUuMjM2LS41NDEuNDczLTEuMDgzLjcxNi0xLjYxOC4yNDItLjUzLjQ4NS0xLjA1OS43MzQtMS41ODIuMDg3LS4xODYuMTgtLjM4LjI3NC0uNTY2LjE1Ni0uMzI0LjMxOC0uNjQ4LjQ3My0uOTY1LjAwNy0uMDE5LjAyLS4wMzEuMDI1LS4wNUw3LjU2NCA3LjgzMmwtLjA1Ni4wOTNjLS4yNzQuNDU1LS41NTQuOTE1LS44MjIgMS4zODlhNTQuNTM1IDU0LjUzNSAwIDAgMC0xLjQ1IDIuNzE0Yy0uMDQ0LjA4Ny0uMDgxLjE2OC0uMTI1LjI1NWEzMi4xNSAzMi4xNSAwIDAgMC0uNzAzIDEuNTQ0Yy0uMjM3LjU2LS40NDggMS4wOTYtLjYzNSAxLjYwNi0uMTI1LjMzNy0uMjMuNjU0LS4zMzYuOTY1LS4wODEuMjYyLS4xNjIuNTMtLjIzNy43OTEtLjE4LjYyMy0uMzMgMS4yMzktLjQ1NCAxLjg2MmwuMDE4LjA3NCAxLjE0IDIuMjY2LjAzNy4wMmMuMTU1LS40MjQuMzE3LS44NDguNDg1LTEuMjgzLjA0NC0uMTI1LjA5NC0uMjQzLjEzNy0uMzY4WlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNMi43MzMgMTkuMTMyYTE4Ljg0IDE4Ljg0IDAgMCAwLS4zMTEgMi4yNTNjMCAuMDI1LS4wMDYuMDUtLjAwNi4wODEtLjM3NC0uNTk4LTEuMzctMS4xNzctMS4zNy0xLjE3Ny43MTYgMS4wMzQgMS4yNTggMi4wNjEgMS4zMzggMy4wNy0uMzguMDgtLjkwMi0uMDM4LTEuNTEyLS4yNTUuNjI4LjU3OCAxLjEwMi43NCAxLjI4OC43ODQtLjU3OS4wMzctMS4xODMuNDM2LTEuNzkzLjg5Ljg5LS4zNiAxLjYwNy0uNTA0IDIuMTIzLS4zOTItLjgxNSAyLjMxLTEuNjMgNC44NjItMi40NTMgNy41NjQuMjUtLjA3NS4zOTktLjI0My40ODYtLjQ3My4xNDMtLjQ5MiAxLjExNC0zLjcwNCAyLjYyNy03LjkzMS4wNDQtLjExOS4wODctLjI0My4xMy0uMzYyLjAxMy0uMDMuMDI2LS4wNjguMDM4LS4xLjE2Mi0uNDQxLjMyNC0uODk2LjQ5OC0xLjM1Ni4wMzgtLjEwNi4wODEtLjIxMi4xMTktLjMxOHYtLjAwNmwtMS4xOS0yLjM1M2MwIC4wMy0uMDA2LjA1Ni0uMDEyLjA4WlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIiksXG4gICAgZDogXCJNMTIuMzMzIDQuMjgzYy0uMjY4LjQxMS0uNTYuODc4LS44NzggMS40MDctLjAxOC4wMjUtLjAzLjA1Ni0uMDUuMDgxYTYyLjUzOCA2Mi41MzggMCAwIDAtMS42ODcgMy4wNWMtLjI0OS40OC0uNTA0Ljk4NC0uNzY1IDEuNTI2bC4wNTYuMDI1IDIuODk1LS4zMTEuMDY4LS4wNWMuODc4LS40MDUgMS4yNy0uNzcyIDEuNjUtMS4zMDEuMS0uMTQzLjIwNS0uMy4zMDUtLjQ1NS4zMTEtLjQ4NS42MTYtMS4wMTUuODg0LTEuNTQ0LjI2MS0uNTEuNDkyLTEuMDIuNjcyLTEuNDc1YTYuNTYgNi41NiAwIDAgMCAuMzk4LTEuMzk1Yy0xLjE3LjIwNi0yLjYwOC4zOTktMy41NDguNDQyWlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZicpLCBcIilcIiksXG4gICAgZDogXCJNOC44NCAxMC41OWMtLjEuMjEyLS4yMDUuNDMtLjMxLjY0Ny0uMTEzLjIzNy0uMjMxLjQ4Ni0uMzQzLjczNS0uMDU2LjEyNC0uMTE5LjI1NS0uMTc1LjM4LS4xOC4zODYtLjM1NC43ODQtLjU0MSAxLjE5NWExMDcuMDM1IDEwNy4wMzUgMCAwIDAtMS4zNTcgMy4xOTRjLS4yMTguNTI5LS40MzYgMS4wNzctLjY1NCAxLjYzNy0uMi41MDQtLjM5OSAxLjAxNS0uNTk4IDEuNTUtLjAxMi4wMjUtLjAxOC4wNS0uMDMuMDc1LS4yLjUzLS4zOTQgMS4wNjgtLjYgMS42MjItLjAwNi4wMTItLjAxNy4wNDUtLjAyMy4wNTdsLjA0My4wMS44NjYtLjA5NC4wNDgtLjAyYy0uMDE4LS4wMDYtLjAzLS4wMy0uMDQ4LS4wMzcgMS4xNDUtLjE0MyAyLjY3LTEuMDAyIDMuNjYtMi4wNi40NTUtLjQ4Ni44NjYtMS4wNjUgMS4yNTItMS43MzguMjg2LS41MDQuNTQ3LTEuMDU4LjgwMy0xLjY3NS4yMjQtLjUzNS40MzUtMS4xMi42NC0xLjc0OWEzLjQ1NyAzLjQ1NyAwIDAgMS0uODk2LjMxMSA4Ljk3NyA4Ljk3NyAwIDAgMS0uMTguMDM4Yy0uMDYyLjAxMi0uMTI1LjAxOC0uMTguMDMgMS4wNy0uNDEgMS43NDMtMS4yMDcgMi4yMzQtMi4xNzgtLjI4LjE5My0uNzQuNDQyLTEuMjg4LjU2NmEyLjUyIDIuNTIgMCAwIDEtLjIzLjA0NGMtLjAyIDAtLjAzOC4wMDYtLjA1Ny4wMDYuMzc0LS4xNTUuNjg1LS4zMy45NTktLjUzNS4wNTYtLjA0NC4xMTItLjA4Ny4xNjgtLjEzNy4wODEtLjA3NS4xNjItLjE1LjIzNy0uMjI0LjA1LS4wNS4wOTMtLjEuMTQzLS4xNTYuMTA2LS4xMjQuMjA1LS4yNjEuMjk5LS40MS4wMy0uMDQ0LjA1Ni0uMDk0LjA4Ny0uMTM4LjAzNy0uMDY4LjA2OC0uMTM3LjEtLjIwNS4xNDktLjMuMjY3LS41NjcuMzYtLjgwMy4wNS0uMTE5LjA4OC0uMjI0LjEyNS0uMzMuMDEzLS4wMzguMDI1LS4wODEuMDQ0LS4xMTkuMDM3LS4xMTIuMDY4LS4yMTEuMDkzLS4zMDUuMDM3LS4xMy4wNTYtLjIzNi4wNjktLjMxMWExLjA3NyAxLjA3NyAwIDAgMS0uMTI1LjA4N2MtLjMyNC4xOTMtLjg3OC4zNjgtMS4zMjYuNDQ4bC44ODQtLjEtLjg4NC4xYy0uMDYyLjAxMy0uMTA2LjAyLS4xNTYuMDMyLjAwNC0uMDA1LS45OTQuMTAxLTIuOTk1LjMxNmEyLjMxMyAyLjMxMyAwIDAgMC0uMTE4LjI0NFpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2cnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTQuMTE1IDIxLjkxNGMtLjE1NS40My0uMzE3Ljg3Mi0uNDczIDEuMzIgMCAuMDA2LS4wMDYuMDEzLS4wMDYuMDE5LS4wMjUuMDYyLS4wNDQuMTI0LS4wNjkuMTkzLS4xMDYuMzA1LS4xOTkuNTczLS40MSAxLjE5NS4zNDguMTYyLjYyOC41OC44OTYgMS4wNTlhMS44NzYgMS44NzYgMCAwIDAtLjYyMy0xLjMxNGMxLjcyNS4wNzUgMy4yMTMtLjM2MSAzLjk3OS0xLjYxOS4wNjgtLjExMi4xMy0uMjMuMTg2LS4zNTUtLjM0OC40NDItLjc4NC42My0xLjU5My41ODZoLS4wMDcuMDA3YzEuMjAxLS41MzYgMS43OTktMS4wNTIgMi4zMzQtMS45MDUuMTI1LS4yMDYuMjUtLjQyNC4zNzQtLjY2Ny0xLjA1MiAxLjA3OC0yLjI2NiAxLjM4My0zLjU0MyAxLjE1MmwtLjk1OC4xMDZjLS4wMzIuMDY5LS4wNjMuMTUtLjA5NC4yM1pcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0FwYWNoZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQXBwU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BcHBTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xOS41LjkzOGE3LjAwMiA3LjAwMiAwIDAgMC03IDBsLTggNC42MTlBNyA3IDAgMCAwIDEgMTEuNjJ2OS4yMzdhNyA3IDAgMCAwIDMuNSA2LjA2Mmw3LjUgNC4zM1YxNy45NzlhNyA3IDAgMCAxIDMuNS02LjA2MkwyNyA1LjI3NiAxOS41LjkzOVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5LjUuOTM4YTcuMDAyIDcuMDAyIDAgMCAwLTcgMEw1IDUuMjc3bDExIDYuMzUgMTEtNi4zNS03LjUtNC4zNFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQTc0NEVcIixcbiAgICBkOiBcIm0yOC40MzUgNy43Ni0xMC4wMjYgNS43OWE2Ljk5NCA2Ljk5NCAwIDAgMSAxLjU5IDQuNDI4djEzLjI3bDcuNS00LjMzYTcgNyAwIDAgMCAzLjUtNi4wNjF2LTkuMjM4YTYuOTkyIDYuOTkyIDAgMCAwLTEuNTg2LTQuNDIybC0uOTc4LjU2NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BcHBTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0F3cyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXdzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjAxOSAxMy44NzhjMCAuMzkuMDQyLjcwNS4xMTcuOTM2LjA4NS4yMzIuMTkxLjQ4NC4zNC43NThhLjQ1NC40NTQgMCAwIDEgLjA3NS4yNDJjMCAuMTA1LS4wNjQuMjEtLjIwMi4zMTVsLS42Ny40NDJhLjUxNC41MTQgMCAwIDEtLjI3Ny4wOTVjLS4xMDcgMC0uMjEzLS4wNTMtLjMyLS4xNDhhMy4yNTggMy4yNTggMCAwIDEtLjM4My0uNDk0IDguMTA5IDguMTA5IDAgMCAxLS4zMy0uNjJjLS44My45NjctMS44NzMgMS40NS0zLjEyOCAxLjQ1LS44OTQgMC0xLjYwNy0uMjUyLTIuMTI5LS43NTYtLjUyMS0uNTA1LS43ODctMS4xNzgtLjc4Ny0yLjAyIDAtLjg5NC4zMTktMS42Mi45NjgtMi4xNjYuNjUtLjU0NyAxLjUxMS0uODIgMi42MDctLjgyLjM2MiAwIC43MzUuMDMgMS4xMjguMDgzLjM5NC4wNTMuNzk5LjEzNyAxLjIyNC4yMzJ2LS43NjhjMC0uOC0uMTctMS4zNTctLjUtMS42ODMtLjM0LS4zMjYtLjkxNS0uNDg0LTEuNzM1LS40ODQtLjM3MiAwLS43NTUuMDQzLTEuMTQ5LjEzNy0uMzk0LjA5NS0uNzc3LjIxLTEuMTUuMzU4LS4xNy4wNzMtLjI5Ny4xMTUtLjM3Mi4xMzZhLjY2LjY2IDAgMCAxLS4xNy4wMzJjLS4xNDkgMC0uMjIzLS4xMDUtLjIyMy0uMzI2di0uNTE1YzAtLjE2OS4wMi0uMjk1LjA3NC0uMzY4YS43OTYuNzk2IDAgMCAxIC4yOTgtLjIyMWMuMzczLS4xOS44Mi0uMzQ3IDEuMzQtLjQ3NGE2LjUyNCA2LjUyNCAwIDAgMSAxLjY2MS0uMmMxLjI2NiAwIDIuMTkyLjI4NSAyLjc4OC44NTIuNTg2LjU2OC44ODQgMS40My44ODQgMi41ODh2My40MDdoLjAyWm0tNC4zMiAxLjZjLjM1IDAgLjcxMi0uMDY0IDEuMDk1LS4xOWEyLjM3MyAyLjM3MyAwIDAgMCAxLjAxMS0uNjczYy4xNy0uMi4yOTgtLjQyMS4zNjItLjY3My4wNjQtLjI1My4xMDctLjU1OC4xMDctLjkxNnYtLjQ0MWE4Ljk4MiA4Ljk4MiAwIDAgMC0uOTgtLjE3OSA4LjExMyA4LjExMyAwIDAgMC0xLS4wNjNjLS43MTMgMC0xLjIzNC4xMzctMS41ODYuNDItLjM1LjI4NS0uNTIxLjY4NC0uNTIxIDEuMjEgMCAuNDk0LjEyOC44NjIuMzk0IDEuMTE1LjI1NS4yNjMuNjI4LjM5IDEuMTE3LjM5Wm04LjU0NSAxLjEzNWMtLjE5MiAwLS4zMi0uMDMyLS40MDUtLjEwNS0uMDg1LS4wNjMtLjE2LS4yMS0uMjIzLS40MWwtMi41MDEtOC4xM2MtLjA2NC0uMjEtLjA5Ni0uMzQ3LS4wOTYtLjQyMSAwLS4xNjguMDg1LS4yNjMuMjU2LS4yNjNoMS4wNDNjLjIwMiAwIC4zNC4wMzIuNDE1LjEwNS4wODUuMDYzLjE0OS4yMS4yMTIuNDFsMS43ODggNi45NjMgMS42Ni02Ljk2M2MuMDU0LS4yMS4xMTctLjM0Ny4yMDMtLjQxLjA4NS0uMDYzLjIzNC0uMTA1LjQyNS0uMTA1aC44NTJjLjIwMiAwIC4zNC4wMzIuNDI1LjEwNS4wODUuMDYzLjE2LjIxLjIwMy40MWwxLjY4MSA3LjA0NyAxLjg0MS03LjA0N2MuMDY0LS4yMS4xMzgtLjM0Ny4yMTMtLjQxLjA4NS0uMDYzLjIyMy0uMTA1LjQxNS0uMTA1aC45OWMuMTcgMCAuMjY2LjA4NC4yNjYuMjYzIDAgLjA1Mi0uMDExLjEwNS0uMDIyLjE2OC0uMDEuMDYzLS4wMzIuMTQ3LS4wNzQuMjYzbC0yLjU2NSA4LjEzYy0uMDY0LjIxLS4xMzguMzQ3LS4yMjMuNDEtLjA4NS4wNjMtLjIyNC4xMDUtLjQwNS4xMDVoLS45MTVjLS4yMDIgMC0uMzQtLjAzMS0uNDI2LS4xMDUtLjA4NS0uMDczLS4xNi0uMjEtLjIwMi0uNDJsLTEuNjUtNi43ODQtMS42MzggNi43NzNjLS4wNTMuMjEtLjExNy4zNDctLjIwMi40Mi0uMDg2LjA3NC0uMjM1LjEwNi0uNDI2LjEwNmgtLjkxNVptMTMuNjc1LjI4NGE3LjEyMiA3LjEyMiAwIDAgMS0xLjY0LS4xOWMtLjUzMS0uMTI2LS45NDYtLjI2Mi0xLjIyMy0uNDItLjE3LS4wOTUtLjI4Ny0uMi0uMzMtLjI5NWEuNzM1LjczNSAwIDAgMS0uMDY0LS4yOTR2LS41MzZjMC0uMjIxLjA4NS0uMzI3LjI0NS0uMzI3YS42MS42MSAwIDAgMSAuMTkyLjAzMmMuMDYzLjAyMS4xNi4wNjMuMjY2LjEwNS4zNjEuMTU4Ljc1NS4yODQgMS4xNy4zNjguNDI2LjA4NC44NC4xMjcgMS4yNjcuMTI3LjY3IDAgMS4xOTItLjExNiAxLjU1My0uMzQ4YTEuMTMgMS4xMyAwIDAgMCAuNTU0LS45OTljMC0uMjk0LS4wOTYtLjUzNi0uMjg4LS43MzYtLjE5MS0uMi0uNTUzLS4zNzktMS4wNzQtLjU0N2wtMS41NDQtLjQ3M2MtLjc3Ni0uMjQyLTEuMzUxLS42LTEuNzAyLTEuMDczYTIuNDg3IDIuNDg3IDAgMCAxLS41MzItMS41MjVjMC0uNDQyLjA5NS0uODMuMjg3LTEuMTY3LjE5Mi0uMzM3LjQ0Ny0uNjMxLjc2Ni0uODYzLjMyLS4yNDIuNjgxLS40MiAxLjEwNy0uNTQ3YTQuNjkgNC42OSAwIDAgMSAxLjM0LS4xNzhjLjIzNSAwIC40OC4wMS43MTQuMDQyLjI0NS4wMzEuNDY4LjA3My42OTIuMTE1LjIxMi4wNTMuNDE1LjEwNS42MDYuMTY5LjE5Mi4wNjMuMzQuMTI2LjQ0Ny4xODlhLjkxOC45MTggMCAwIDEgLjMyLjI2M2MuMDYzLjA4NC4wOTUuMi4wOTUuMzQ3di40OTRjMCAuMjIxLS4wODUuMzM3LS4yNDUuMzM3LS4wODUgMC0uMjIzLS4wNDItLjQwNC0uMTI2LS42MDctLjI3NC0xLjI4OC0uNDEtMi4wNDMtLjQxLS42MDcgMC0xLjA4Ni4wOTQtMS40MTYuMjk0LS4zMy4yLS41LjUwNS0uNS45MzYgMCAuMjk0LjEwNy41NDcuMzIuNzQ3LjIxMi4yLjYwNi40IDEuMTcuNTc4bDEuNTExLjQ3M2MuNzY2LjI0MiAxLjMyLjU3OSAxLjY1IDEuMDEuMzMuNDMxLjQ5LjkyNi40OSAxLjQ3MyAwIC40NTItLjA5Ni44NjItLjI3NyAxLjIyYTIuODM2IDIuODM2IDAgMCAxLS43NzcuOTI1Yy0uMzMuMjYzLS43MjQuNDUyLTEuMTgyLjU5LS40NzguMTQ2LS45NzkuMjItMS41MjEuMjJaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCIjRjkwXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4LjkzIDIyLjAwOWMtMy41MDEgMi41NTYtOC41ODggMy45MTItMTIuOTYyIDMuOTEyLTYuMTMgMC0xMS42NTMtMi4yNC0xNS44MjUtNS45NjMtLjMzLS4yOTUtLjAzMi0uNjk0LjM2Mi0uNDYzIDQuNTEyIDIuNTg3IDEwLjA3OCA0LjE1NSAxNS44MzYgNC4xNTUgMy44ODQgMCA4LjE1MS0uOCAxMi4wNzgtMi40NC41ODYtLjI2MyAxLjA4Ni4zNzguNTExLjc5OVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjM4OCAyMC4zNjhjLS40NDctLjU2OC0yLjk1OC0uMjczLTQuMDk3LS4xMzctLjM0LjA0Mi0uMzk0LS4yNTItLjA4NS0uNDczIDItMS4zODggNS4yODktLjk4OSA1LjY3Mi0uNTI2LjM4My40NzQtLjEwNyAzLjcyMy0xLjk4IDUuMjgtLjI4Ny4yNDItLjU2NC4xMTYtLjQzNi0uMi40MjYtMS4wNDEgMS4zNzMtMy4zODYuOTI2LTMuOTQ0WlwiXG4gIH0pKSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXdzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Bd3NNb25vID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Bd3NNb25vKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNOS4wMTkgMTMuODc4YzAgLjM5LjA0Mi43MDUuMTE3LjkzNi4wODUuMjMyLjE5MS40ODQuMzQuNzU4YS40NTQuNDU0IDAgMCAxIC4wNzUuMjQyYzAgLjEwNS0uMDY0LjIxLS4yMDIuMzE1bC0uNjcuNDQyYS41MTQuNTE0IDAgMCAxLS4yNzcuMDk1Yy0uMTA3IDAtLjIxMy0uMDUzLS4zMi0uMTQ4YTMuMjU4IDMuMjU4IDAgMCAxLS4zODMtLjQ5NCA4LjEwOSA4LjEwOSAwIDAgMS0uMzMtLjYyYy0uODMuOTY3LTEuODczIDEuNDUtMy4xMjggMS40NS0uODk0IDAtMS42MDctLjI1Mi0yLjEyOS0uNzU2LS41MjEtLjUwNS0uNzg3LTEuMTc4LS43ODctMi4wMiAwLS44OTQuMzE5LTEuNjIuOTY4LTIuMTY2LjY1LS41NDcgMS41MTEtLjgyIDIuNjA3LS44Mi4zNjIgMCAuNzM1LjAzIDEuMTI4LjA4My4zOTQuMDUzLjc5OS4xMzcgMS4yMjQuMjMydi0uNzY4YzAtLjgtLjE3LTEuMzU3LS41LTEuNjgzLS4zNC0uMzI2LS45MTUtLjQ4NC0xLjczNS0uNDg0LS4zNzIgMC0uNzU1LjA0My0xLjE0OS4xMzctLjM5NC4wOTUtLjc3Ny4yMS0xLjE1LjM1OC0uMTcuMDczLS4yOTcuMTE1LS4zNzIuMTM2YS42Ni42NiAwIDAgMS0uMTcuMDMyYy0uMTQ5IDAtLjIyMy0uMTA1LS4yMjMtLjMyNnYtLjUxNWMwLS4xNjkuMDItLjI5NS4wNzQtLjM2OGEuNzk2Ljc5NiAwIDAgMSAuMjk4LS4yMjFjLjM3My0uMTkuODItLjM0NyAxLjM0LS40NzRhNi41MjQgNi41MjQgMCAwIDEgMS42NjEtLjJjMS4yNjYgMCAyLjE5Mi4yODUgMi43ODguODUyLjU4Ni41NjguODg0IDEuNDMuODg0IDIuNTg4djMuNDA3aC4wMlptLTQuMzIgMS42Yy4zNSAwIC43MTItLjA2NCAxLjA5NS0uMTlhMi4zNzMgMi4zNzMgMCAwIDAgMS4wMTEtLjY3M2MuMTctLjIuMjk4LS40MjEuMzYyLS42NzMuMDY0LS4yNTMuMTA3LS41NTguMTA3LS45MTZ2LS40NDFhOC45ODIgOC45ODIgMCAwIDAtLjk4LS4xNzkgOC4xMTMgOC4xMTMgMCAwIDAtMS0uMDYzYy0uNzEzIDAtMS4yMzQuMTM3LTEuNTg2LjQyLS4zNS4yODUtLjUyMS42ODQtLjUyMSAxLjIxIDAgLjQ5NC4xMjguODYyLjM5NCAxLjExNS4yNTUuMjYzLjYyOC4zOSAxLjExNy4zOVptOC41NDUgMS4xMzVjLS4xOTIgMC0uMzItLjAzMi0uNDA1LS4xMDUtLjA4NS0uMDYzLS4xNi0uMjEtLjIyMy0uNDFsLTIuNTAxLTguMTNjLS4wNjQtLjIxLS4wOTYtLjM0Ny0uMDk2LS40MjEgMC0uMTY4LjA4NS0uMjYzLjI1Ni0uMjYzaDEuMDQzYy4yMDIgMCAuMzQuMDMyLjQxNS4xMDUuMDg1LjA2My4xNDkuMjEuMjEyLjQxbDEuNzg4IDYuOTYzIDEuNjYtNi45NjNjLjA1NC0uMjEuMTE3LS4zNDcuMjAzLS40MS4wODUtLjA2My4yMzQtLjEwNS40MjUtLjEwNWguODUyYy4yMDIgMCAuMzQuMDMyLjQyNS4xMDUuMDg1LjA2My4xNi4yMS4yMDMuNDFsMS42ODEgNy4wNDcgMS44NDEtNy4wNDdjLjA2NC0uMjEuMTM4LS4zNDcuMjEzLS40MS4wODUtLjA2My4yMjMtLjEwNS40MTUtLjEwNWguOTljLjE3IDAgLjI2Ni4wODQuMjY2LjI2MyAwIC4wNTItLjAxMS4xMDUtLjAyMi4xNjgtLjAxLjA2My0uMDMyLjE0Ny0uMDc0LjI2M2wtMi41NjUgOC4xM2MtLjA2NC4yMS0uMTM4LjM0Ny0uMjIzLjQxLS4wODUuMDYzLS4yMjQuMTA1LS40MDUuMTA1aC0uOTE1Yy0uMjAyIDAtLjM0LS4wMzEtLjQyNi0uMTA1LS4wODUtLjA3My0uMTYtLjIxLS4yMDItLjQybC0xLjY1LTYuNzg0LTEuNjM4IDYuNzczYy0uMDUzLjIxLS4xMTcuMzQ3LS4yMDIuNDItLjA4Ni4wNzQtLjIzNS4xMDYtLjQyNi4xMDZoLS45MTVabTEzLjY3NS4yODRhNy4xMjIgNy4xMjIgMCAwIDEtMS42NC0uMTljLS41MzEtLjEyNi0uOTQ2LS4yNjItMS4yMjMtLjQyLS4xNy0uMDk1LS4yODctLjItLjMzLS4yOTVhLjczNS43MzUgMCAwIDEtLjA2NC0uMjk0di0uNTM2YzAtLjIyMS4wODUtLjMyNy4yNDUtLjMyN2EuNjEuNjEgMCAwIDEgLjE5Mi4wMzJjLjA2My4wMjEuMTYuMDYzLjI2Ni4xMDUuMzYxLjE1OC43NTUuMjg0IDEuMTcuMzY4LjQyNi4wODQuODQuMTI3IDEuMjY3LjEyNy42NyAwIDEuMTkyLS4xMTYgMS41NTMtLjM0OGExLjEzIDEuMTMgMCAwIDAgLjU1NC0uOTk5YzAtLjI5NC0uMDk2LS41MzYtLjI4OC0uNzM2LS4xOTEtLjItLjU1My0uMzc5LTEuMDc0LS41NDdsLTEuNTQ0LS40NzNjLS43NzYtLjI0Mi0xLjM1MS0uNi0xLjcwMi0xLjA3M2EyLjQ4NyAyLjQ4NyAwIDAgMS0uNTMyLTEuNTI1YzAtLjQ0Mi4wOTUtLjgzLjI4Ny0xLjE2Ny4xOTItLjMzNy40NDctLjYzMS43NjYtLjg2My4zMi0uMjQyLjY4MS0uNDIgMS4xMDctLjU0N2E0LjY5IDQuNjkgMCAwIDEgMS4zNC0uMTc4Yy4yMzUgMCAuNDguMDEuNzE0LjA0Mi4yNDUuMDMxLjQ2OC4wNzMuNjkyLjExNS4yMTIuMDUzLjQxNS4xMDUuNjA2LjE2OS4xOTIuMDYzLjM0LjEyNi40NDcuMTg5YS45MTguOTE4IDAgMCAxIC4zMi4yNjNjLjA2My4wODQuMDk1LjIuMDk1LjM0N3YuNDk0YzAgLjIyMS0uMDg1LjMzNy0uMjQ1LjMzNy0uMDg1IDAtLjIyMy0uMDQyLS40MDQtLjEyNi0uNjA3LS4yNzQtMS4yODgtLjQxLTIuMDQzLS40MS0uNjA3IDAtMS4wODYuMDk0LTEuNDE2LjI5NC0uMzMuMi0uNS41MDUtLjUuOTM2IDAgLjI5NC4xMDcuNTQ3LjMyLjc0Ny4yMTIuMi42MDYuNCAxLjE3LjU3OGwxLjUxMS40NzNjLjc2Ni4yNDIgMS4zMi41NzkgMS42NSAxLjAxLjMzLjQzMS40OS45MjYuNDkgMS40NzMgMCAuNDUyLS4wOTYuODYyLS4yNzcgMS4yMmEyLjgzNiAyLjgzNiAwIDAgMS0uNzc3LjkyNWMtLjMzLjI2My0uNzI0LjQ1Mi0xLjE4Mi41OS0uNDc4LjE0Ni0uOTc5LjIyLTEuNTIxLjIyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjguOTMgMjIuMDA5Yy0zLjUwMSAyLjU1Ni04LjU4OCAzLjkxMi0xMi45NjIgMy45MTItNi4xMyAwLTExLjY1My0yLjI0LTE1LjgyNS01Ljk2My0uMzMtLjI5NS0uMDMyLS42OTQuMzYyLS40NjMgNC41MTIgMi41ODcgMTAuMDc4IDQuMTU1IDE1LjgzNiA0LjE1NSAzLjg4NCAwIDguMTUxLS44IDEyLjA3OC0yLjQ0LjU4Ni0uMjYzIDEuMDg2LjM3OC41MTEuNzk5WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuMzg4IDIwLjM2OGMtLjQ0Ny0uNTY4LTIuOTU4LS4yNzMtNC4wOTctLjEzNy0uMzQuMDQyLS4zOTQtLjI1Mi0uMDg1LS40NzMgMi0xLjM4OCA1LjI4OS0uOTg5IDUuNjcyLS41MjYuMzgzLjQ3NC0uMTA3IDMuNzIzLTEuOTggNS4yOC0uMjg3LjI0Mi0uNTY0LjExNi0uNDM2LS4yLjQyNi0xLjA0MSAxLjM3My0zLjM4Ni45MjYtMy45NDRaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0F3c01vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0F6dXJlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BenVyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwNzJDNlwiLFxuICAgIGQ6IFwibTE3LjQ0OCA0LTkuNDE0IDguMDFMMCAyNi4xNTdoNy4yNDNMMTcuNDQ4IDRaTTE4LjcgNS44NzRsLTQuMDE4IDExLjExIDcuNzA0IDkuNDk3TDcuNDQxIDI5aDI0LjQ5NEwxOC43IDUuODc0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0F6dXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29BenVyZU1vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0F6dXJlTW9ubyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTE3LjQ0OCA0LTkuNDE0IDguMDFMMCAyNi4xNTdoNy4yNDNMMTcuNDQ4IDRaTTE4LjcgNS44NzRsLTQuMDE4IDExLjExIDcuNzA0IDkuNDk3TDcuNDQxIDI5aDI0LjQ5NEwxOC43IDUuODc0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0F6dXJlTW9ubzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQmVhdHMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0JlYXRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTUgMjBINFYwaDExYzUuNTIyIDAgMTAgNC40NzggMTAgMTBzLTQuNDc4IDEwLTEwIDEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEMyQjNcIixcbiAgICBkOiBcIk0yNi43MDIgMTUuNjI0QzI0LjYgMTkuOTc5IDIwLjE1MiAyMyAxNSAyM0g0djloMTVjNS41MjIgMCAxMC00LjQ3OCAxMC0xMGE5Ljk1MiA5Ljk1MiAwIDAgMC0yLjI5OC02LjM3NlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjQuMzM4IDEzLjU1NEE5Ljk0MiA5Ljk0MiAwIDAgMCAxOSAxMkg0djhoMTFjNC4yNyAwIDcuOTAzLTIuNjggOS4zMzgtNi40NDZcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQmVhdHM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0J1c2luZXNzQW5hbHl0aWNzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29CdXNpbmVzc0FuYWx5dGljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMCAyMmMwIDUuNTIyIDQuNDc4IDEwIDEwIDEwVjEyQzQuNDc4IDEyIDAgMTYuNDc4IDAgMjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDEydjEwaDEwYzAtNS41MjItNC40NzgtMTAtMTAtMTBcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIk0xMCAwdjljNy4xNjggMCAxMyA1LjgzMiAxMyAxM2g5QzMyIDkuODUgMjIuMTUgMCAxMCAwXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0J1c2luZXNzQW5hbHl0aWNzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29DZXBoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29DZXBoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA1QzU2XCIsXG4gICAgZDogXCJNMjUuNDcxIDI3LjU2Yy0xLjA2LS41NjctMS42NzYtMS4yMDYtMS44MTEtMS45MDItLjEzLS42NzMuMTctMS40MjEuOTE4LTIuMjg4YTExLjI5IDExLjI5IDAgMCAwIDIuNzczLTcuNDJBMTEuMzI0IDExLjMyNCAwIDAgMCAxNi4wNDIgNC42NGwtLjA1LjAwMWgtLjA1QTExLjMyNCAxMS4zMjQgMCAwIDAgNC42MzIgMTUuOTQ5YTExLjI5MSAxMS4yOTEgMCAwIDAgMi43NzQgNy40MjJjLjc1My44NzIgMS4wNDcgMS41OTEuOTI4IDIuMjU3LS4xMy42OTQtLjc0IDEuMzQyLTEuODE3IDEuOTMtMS42NTctMS4zNzUtMy4xMTYtMy4yMTItNC4wMS01LjA1NmExNC45NDMgMTQuOTQzIDAgMCAxLTEuMTE3LTMuMTM5QTE0Ljk5NyAxNC45OTcgMCAwIDEgMSAxNS45NWExNC45MDEgMTQuOTAxIDAgMCAxIDQuMzc4LTEwLjU3IDE0LjkyNCAxNC45MjQgMCAwIDEgNC43NTItMy4yMDRDMTEuOTcgMS4zOTUgMTMuOTUuOTk2IDE1Ljk0OCAxaC4xMDFhMTQuODg4IDE0Ljg4OCAwIDAgMSAxMC41NyA0LjM3OCAxNC45MTIgMTQuOTEyIDAgMCAxIDMuOTgyIDEzLjk4NSAxNC44NzEgMTQuODcxIDAgMCAxLTEuMTE4IDMuMTRjLS45IDEuODQzLTIuMzU4IDMuNjgxLTQuMDEgNS4wNTdoLS4wMDNabS01LjUyMyAyLjc5OGMtLjE3My0uMTEtLjc2Ny0uNTUtMS4zNDUtMS4zNTNhNi4xMjIgNi4xMjIgMCAwIDEtMS4xNzQtMy43MzggOC4yNiA4LjI2IDAgMCAxIC42MTEtMi45NjQgOC40MiA4LjQyIDAgMCAxIDEuNjI3LTIuNTRsLjAwNC0uMDA4LjE1NC0uMTc4Yy4yNjMtLjMwNS41MzYtLjYyMi43NTMtLjk5LjI2OC0uNDU0LjQ2Mi0uOTMxLjU3OC0xLjQyLjE3OC0uNzU4LjE4OC0xLjU0Ny4wMjktMi4zMWE1LjMgNS4zIDAgMCAwLS44NTgtMS45NTYgNS4yNjQgNS4yNjQgMCAwIDAtNC4yOS0yLjIxN2gtLjEwOGE1LjI1IDUuMjUgMCAwIDAtNC4yOSAyLjIxNiA1LjMxIDUuMzEgMCAwIDAtLjg1NiAxLjk1NmMtLjE2Ljc2My0uMTUgMS41NTIuMDMgMi4zMTEuMTE1LjQ4OC4zMS45NjUuNTc2IDEuNDE5LjIxOS4zNy40OS42ODQuNzUzLjk5bC4xNTUuMTc5LjAwMy4wMDdhOC4zODQgOC4zODQgMCAwIDEgMS42MjggMi41NCA4LjI0IDguMjQgMCAwIDEgLjYxIDIuOTY0IDYuMTIzIDYuMTIzIDAgMCAxLTEuMTczIDMuNzM4Yy0uNTguNzk1LTEuMTc0IDEuMjQzLTEuMzQ2IDEuMzUybC0uODY3LS4yNmExNS40MzQgMTUuNDM0IDAgMCAxLTIuNDktMS4wOTggNC4yNDUgNC4yNDUgMCAwIDAgMi4yMzQtMy43MzZjMC0xLjAzNC0uNDAzLTIuMDI4LTEuMTk1LTIuOTVsLS4wMzQtLjAzNC0uMjM3LS4yNi0uNjM2LS43NDZhOC45MjQgOC45MjQgMCAwIDEtMS41MjUtMy4yNiA4Ljk4MyA4Ljk4MyAwIDAgMS0uMDUtMy45MDUgOC45MDYgOC45MDYgMCAwIDEgMS40Ni0zLjMxM0E4Ljk5MyA4Ljk5MyAwIDAgMSAxMS4yMyA4LjM5YTguOTM3IDguOTM3IDAgMCAxIDQuNzAyLTEuMzQ0aC4xMTJjLjQyIDAgLjg0LjAyOSAxLjI1NS4wODhhOC45MzggOC45MzggMCAwIDEgMy40NDggMS4yNTYgOS4wMDMgOS4wMDMgMCAwIDEgMi41NTQgMi40MDQgOS4wOTMgOS4wOTMgMCAwIDEgMS40NTkgMy4zMTMgOS4wNDMgOS4wNDMgMCAwIDEtLjA1IDMuOTEyIDguOTI1IDguOTI1IDAgMCAxLTEuNTI2IDMuMjZjLS4yLjI2NS0uNDA5LjQ5NS0uNjM3Ljc0NWwtLjIzLjI1NGMtLjAxNy4wMTYtLjAzLjAyNy0uMDQuMDQzLS44MDQuOTYxLTEuMTk1IDEuOTI3LTEuMTk1IDIuOTQ4YTQuMjUgNC4yNSAwIDAgMCAyLjIzNyAzLjczNWMtLjc5NS40NDEtMS42My44MDktMi40OTEgMS4wOThsLS44NjIuMjYtLjAxOC0uMDA0Wm0tMy45NTYtMTEuMzE0YTIuOTU3IDIuOTU3IDAgMCAxLTIuOTUyLTIuOTUyIDIuOTU3IDIuOTU3IDAgMCAxIDIuOTUyLTIuOTUyIDIuOTU2IDIuOTU2IDAgMCAxIDIuOTUgMi45NTIgMi45NTcgMi45NTcgMCAwIDEtMi45NSAyLjk1MlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0NlcGg7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0Nsb3VkID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29DbG91ZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuMzcgMTguMzUyYy4wMzItLjAxLjA2Ni0uMDE0LjEtLjAyM0E2IDYgMCAwIDEgMTggMTBWMEM5LjE2MyAwIDIgNy4xNjQgMiAxNmMwIDIuNzkzLjcyIDUuNDE3IDEuOTc2IDcuNzAyYTE4Ljk0NyAxOC45NDcgMCAwIDEgOC4zOTMtNS4zNDlcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xOCAwQTE1Ljk1OSAxNS45NTkgMCAwIDAgNS43MTcgNS43NWExNi4wMDYgMTYuMDA2IDAgMCAwIDcuNTQxIDUuMDMyYy43MS4yMiAxLjQ3Ny4xMzUgMi4xNDYtLjE4OEE1Ljk0IDUuOTQgMCAwIDEgMTggMTBhNS45NCA1Ljk0IDAgMCAxIDIuNTk2LjU5NGMuNjY5LjMyMyAxLjQzNi40MDggMi4xNDYuMTg4YTE2LjAxIDE2LjAxIDAgMCAwIDcuNTQxLTUuMDMyQTE1Ljk1OSAxNS45NTkgMCAwIDAgMTggMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMjIuNzQyIDIxLjIxOGMtLjcxLS4yMi0xLjQ3OC0uMTM1LTIuMTQ2LjE4OEE1Ljk0NyA1Ljk0NyAwIDAgMSAxOCAyMmE1Ljk0IDUuOTQgMCAwIDEtMi41OTYtLjU5NGMtLjY2OS0uMzIzLTEuNDM2LS40MDgtMi4xNDYtLjE4OGExNi4wMDYgMTYuMDA2IDAgMCAwLTcuNTQgNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAgMCAxOCAzMmM0LjkzNiAwIDkuMzQ4LTIuMjM2IDEyLjI4My01Ljc1YTE2LjAxNiAxNi4wMTYgMCAwIDAtNy41NC01LjAzMlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29DbG91ZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQ2xvdWRFY2UgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Nsb3VkRWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggMHYxMGE2IDYgMCAwIDAtNS41MyA4LjMzYy0uMDM0LjAwOS0uMDY4LjAxMi0uMS4wMjNBMTguOTQ3IDE4Ljk0NyAwIDAgMCAzLjk3NSAyMy43IDE1LjkzNCAxNS45MzQgMCAwIDEgMiAxNkMyIDcuMTY0IDkuMTYzIDAgMTggMFptMCAxM2EzIDMgMCAxIDEgMCA2IDMgMyAwIDAgMSAwLTZaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBBRUZBXCIsXG4gICAgZDogXCJNMjIuNzQyIDIxLjIxOGMtLjcxLS4yMi0xLjQ3OC0uMTM1LTIuMTQ2LjE4OEE1Ljk0NyA1Ljk0NyAwIDAgMSAxOCAyMmE1Ljk0IDUuOTQgMCAwIDEtMi41OTYtLjU5NGMtLjY2OS0uMzIzLTEuNDM2LS40MDgtMi4xNDYtLjE4OGExNi4wMDYgMTYuMDA2IDAgMCAwLTcuNTQgNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAgMCAxOCAzMmM0LjkzNiAwIDkuMzQ4LTIuMjM2IDEyLjI4My01Ljc1YTE2LjAxNiAxNi4wMTYgMCAwIDAtNy41NC01LjAzMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTggMEExNS45NTkgMTUuOTU5IDAgMCAwIDUuNzE3IDUuNzVhMTYuMDA2IDE2LjAwNiAwIDAgMCA3LjU0MSA1LjAzMmMuNzEuMjIgMS40NzcuMTM1IDIuMTQ2LS4xODhBNS45NCA1Ljk0IDAgMCAxIDE4IDEwYTUuOTQgNS45NCAwIDAgMSAyLjU5Ni41OTRjLjY2OS4zMjMgMS40MzYuNDA4IDIuMTQ2LjE4OGExNi4wMSAxNi4wMSAwIDAgMCA3LjU0MS01LjAzMkExNS45NTkgMTUuOTU5IDAgMCAwIDE4IDBcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29DbG91ZEVjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQ29kZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ29kZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNzUgMTIgMTYgMzJoMTBsLTMuNC0xMC44OEExMyAxMyAwIDAgMCAxMC4xOSAxMmgtLjQ0WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzIyQTdGM1wiLFxuICAgIGQ6IFwiTTI1LjcyNSAxMS45M0ExNyAxNyAwIDAgMCA5LjUgMEg2bDMuNzUgMTJoLjQ0YTEzIDEzIDAgMCAxIDEyLjQxIDkuMTJMMjYgMzJoNmwtNi4yNzUtMjAuMDdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMzc3Q0FcIixcbiAgICBkOiBcIk03LjkxIDE2LjE3NSAwIDMyaDEyLjg1NXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Db2RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Db2Rlc2FuZGJveCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ29kZXNhbmRib3goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC43MzggMjguMDQ0VjE2LjY4MUwzLjE3MiAxMC45MTl2Ni40Nmw1LjMyIDIuNjd2NC44ODlsNi4yNDYgMy4xMDZabTIuMzQ0LjA2NiA2LjM1Ny0zLjE3di01LjAwMmw1LjM1My0yLjY4NlYxMC44N2wtMTEuNzEgNS44NTRWMjguMTFaTTI3LjMwNiA4Ljk5M2wtNi4wMDMtMy4wMTItNS4yODYgMi42NTYtNS4zMjUtMi42NTlMNC42MzcgOS4wM2wxMS4zMTcgNS42MzggMTEuMzUyLTUuNjc1Wk0uODI4IDIzLjc0NFY4LjMyNEwxNS45ODEuNjg5bDE1LjE1NSA3LjYwNFYyMy43MkwxNS45OCAzMS4yOC44MjggMjMuNzQzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0NvZGVzYW5kYm94OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Db3VjaGJhc2UgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0NvdWNoYmFzZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0VEMjIyNlwiLFxuICAgIGQ6IFwiTTE2LjA3Mi4wMjRDNy4yOS4wMjQuMTQ0IDcuMTQ2LjE0NCAxNS45NTJjMCA4Ljc4MiA3LjEyMiAxNS45MjggMTUuOTI4IDE1LjkyOEMyNC44NTQgMzEuODggMzIgMjQuNzU4IDMyIDE1Ljk1MiAzMiA3LjE0NiAyNC44NTQuMDI0IDE2LjA3Mi4wMjRabTEwLjc1NSAxOC43MTljMCAuOTYyLS41NTMgMS44MDQtMS42MzYgMS45OTctMS44NzcuMzM2LTUuODIzLjUzLTkuMTE5LjUzLTMuMjk2IDAtNy4yNDItLjE5NC05LjExOS0uNTMtMS4wODItLjE5My0xLjYzNi0xLjAzNS0xLjYzNi0xLjk5N3YtNi4yMDhjMC0uOTYyLjc0Ni0xLjg1MiAxLjYzNi0xLjk5Ny41NTQtLjA5NiAxLjg1My0uMTkyIDIuODY0LS4xOTIuMzg1IDAgLjY5Ny4yODkuNjk3Ljc0NnY0LjM1NWw1LjU4Mi0uMTIgNS41ODIuMTJ2LTQuMzU1YzAtLjQ1Ny4zMTMtLjc0Ni42OTgtLjc0NiAxLjAxIDAgMi4zMS4wOTYgMi44NjMuMTkyLjkxNC4xNDUgMS42MzYgMS4wMzUgMS42MzYgMS45OTctLjA0OCAyLjA0NS0uMDQ4IDQuMTM5LS4wNDggNi4yMDhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ291Y2hiYXNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Eb2NrZXIgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0RvY2tlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzEzNkVBM1wiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xOC4wOTkgMTUuMTA4aDMuMzA0di0yLjk3M0gxOC4xdjIuOTczem0tMy45MDUgMGgzLjMwNHYtMi45NzNoLTMuMzA0djIuOTczem0tMy45MDUgMGgzLjMwNHYtMi45NzNIMTAuMjl2Mi45NzN6bS0zLjkwNSAwSDkuNjl2LTIuOTczSDYuMzg0djIuOTczem0tMy45MDQgMGgzLjMwNHYtMi45NzNIMi40OHYyLjk3M3ptMy45MDQtMy41NjhIOS42OVY4LjU2OEg2LjM4NHYyLjk3MnptMy45MDUgMGgzLjMwNFY4LjU2OEgxMC4yOXYyLjk3MnptMy45MDUgMGgzLjMwNFY4LjU2OGgtMy4zMDR2Mi45NzJ6bTAtMy41NjdoMy4zMDRWNWgtMy4zMDR2Mi45NzN6bTE3LjEzOSA1LjQwMmMtLjcyMi0uNDc4LTIuMzgtLjY1My0zLjY1Ni0uNDE1LS4xNjQtMS4xOS0uODM0LTIuMjIxLTIuMDUyLTMuMTUzbC0uNy0uNDYzLS40NjguNjk0Yy0uNTk4Ljg5My0uODk3IDIuMTMtLjggMy4zMTcuMDQ1LjQxOC4xODMgMS4xNjQuNjE3IDEuODItLjQzMy4yMzEtMS4yOS41NDktMi40Mi41MjhILjEyNGwtLjA0My4yNDdjLS4yMDQgMS4xOTMtLjIgNC45MTQgMi4yNCA3Ljc3NEM0LjE3OCAyNS44OTggNi45NiAyNyAxMC41OSAyN2M3Ljg3IDAgMTMuNjkzLTMuNTg2IDE2LjQyLTEwLjEwNCAxLjA3My4wMiAzLjM4MS4wMDYgNC41NjctMi4yMzcuMDMxLS4wNTEuMTAyLS4xODYuMzEtLjYxbC4xMTMtLjIzNC0uNjY3LS40NHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Eb2NrZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0Ryb3B3aXphcmQgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Ryb3B3aXphcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fZHJvcHdpemFyZCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJNOCAyOS42MXM5LjU1IDQuNzQgMTYuODU2LS44OTNjLTEuOTA1LTUuMTE0LTUuMjUtMTkuODY3LTcuMjI2LTI2LjM4My0uNDIyLTEuMzg5LS40OS0xLjUyNy0uNjYzLTEuOTA5LS45NjQtMi4xMzQtMS45NzggNC4xNDItMy42MjggMTAuNDU5QzEyLjc0OSAxMy4xNDggOCAyOS42MSA4IDI5LjYxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTkuOTI2IDI4LjU2M3M4LjE3IDQuNzk0IDE0LjkzLjE1NGMtLjE4LS44MDctLjY0Mi0yLjEwMy0uOTU1LTMuMzExLTEuNjY0LTYuNDE2LTQuNjc2LTE3LjI0OC02LjE0NC0yMi42MjYtMS41OS01LjgyMi0yLjEwNS45ODYtMy45NjEgOC4yMy0uNTY0IDIuMjA0LTMuODcgMTcuNTUzLTMuODcgMTcuNTUzXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGOUE3MkJcIixcbiAgICBkOiBcIm0xMi4xNCAyNC40MS44NS0xLjQ2Ni43OTMgMS41NDQtLjkwOCAxLjk5LS43MzUtMi4wNjlabTYuOTM0LTUuNTQ1Ljg1LTEuNDY1Ljc5MyAxLjU0My0uOTA4IDEuOTktLjczNS0yLjA2OFptLTQuNzQ3LTUuODUxLjg1LTEuNDY1Ljc5MiAxLjU0My0uOTA4IDEuOTktLjczNC0yLjA2OFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGMjAwXCIsXG4gICAgZDogXCJtMTIuMTQgMjQuNDEuODUtMS43MTYuNzkzIDEuNzk0LS45MDcgMS40NjgtLjczNi0xLjU0NlptNi45MzQtNS41NDUuODUxLTEuNzE2Ljc5MiAxLjc5NC0uOTA2IDEuNDY4LS43MzctMS41NDZabS00Ljc0Ny01Ljg1MS44NS0xLjcxNi43OTIgMS43OTQtLjkwNiAxLjQ2OC0uNzM2LTEuNTQ2XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMyNDI2NURcIixcbiAgICBkOiBcIk0xMi45ODcgMjguNDIyczYuMDgyIDEuMDE1IDEwLjA4Ni0xLjU0OWMtLjUwMiAxLjU1LTQuOTkxIDMuMzE0LTEwLjA4NiAxLjU1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICB4MTogMzMuNDczLFxuICAgIHgyOiA3Ljc1MSxcbiAgICB5MTogNy42NzQsXG4gICAgeTI6IDIxLjMzMSxcbiAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIHN0b3BDb2xvcjogXCIjMzg3MUMxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDAuNTE1LFxuICAgIHN0b3BDb2xvcjogXCIjMkMzNzkyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDAuODY1LFxuICAgIHN0b3BDb2xvcjogXCIjMjQyNjVEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDEsXG4gICAgc3RvcENvbG9yOiBcIiMyNTI3NjFcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICB4MTogMjEuMDI4LFxuICAgIHgyOiA2LjAxNyxcbiAgICB5MTogMTQuOTI4LFxuICAgIHkyOiAxOC44NDQsXG4gICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBzdG9wQ29sb3I6IFwiIzM4NzFDMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiAwLjUxNSxcbiAgICBzdG9wQ29sb3I6IFwiIzJDMzc5MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiAwLjg2NSxcbiAgICBzdG9wQ29sb3I6IFwiIzI0MjY1RFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiAxLFxuICAgIHN0b3BDb2xvcjogXCIjMjUyNzYxXCJcbiAgfSkpKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Ecm9wd2l6YXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29FbGFzdGljID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FbGFzdGljKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIFwiZGF0YS10eXBlXCI6IFwibG9nb0VsYXN0aWNcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI2ZmZlwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zMC44NiAxMy4xMjlBNi4zMzMgNi4zMzMgMCAwIDEgMzIgMTYuNzdhNi40MTkgNi40MTkgMCAwIDEtMS4xNjIgMy42NTIgNi4zODIgNi4zODIgMCAwIDEtMy4wMzIgMi4zMzEgNC44MzMgNC44MzMgMCAwIDEtMS42NzIgNS41NDIgNC43ODkgNC43ODkgMCAwIDEtNS43Ny0uMDc0IDkuMDE2IDkuMDE2IDAgMCAxLTQuNSAzLjMyMiA4Ljk4MiA4Ljk4MiAwIDAgMS01LjU4Ny4wMjMgOS4wMTQgOS4wMTQgMCAwIDEtNC41MjYtMy4yODcgOS4wNjcgOS4wNjcgMCAwIDEtMS43MjctNS4zMzNjMC0uNTc5LjA1My0xLjE1Ni4xNi0xLjcyNUE2LjMwNSA2LjMwNSAwIDAgMSAxLjE0NSAxOC45IDYuMzQxIDYuMzQxIDAgMCAxIDAgMTUuMjQyYTYuNDIgNi40MiAwIDAgMSAxLjE2My0zLjY1MiA2LjM4NCA2LjM4NCAwIDAgMSAzLjAzNS0yLjMzIDQuODMzIDQuODMzIDAgMCAxIDEuNjU4LTUuNTU3IDQuNzg5IDQuNzg5IDAgMCAxIDUuNzguMDcgOS4wMzcgOS4wMzcgMCAwIDEgNC45My0zLjQ0NiA5LjAwNyA5LjAwNyAwIDAgMSA1Ljk5NC40MTkgOS4wNSA5LjA1IDAgMCAxIDQuNDA3IDQuMDk4IDkuMDk3IDkuMDk3IDAgMCAxIC44NzMgNS45NjUgNi4yOTggNi4yOTggMCAwIDEgMy4wMiAyLjMyWm0tMTguMjguNjU4IDcuMDAyIDMuMjExIDcuMDY2LTYuMjEzYTcuODUgNy44NSAwIDAgMCAuMTUyLTEuNTU3YzAtMS42OTItLjUzOS0zLjM0LTEuNTQtNC43MDRhNy44OTcgNy44OTcgMCAwIDAtNC4wMi0yLjg2OSA3Ljg3IDcuODcgMCAwIDAtNC45MzIuMDg2IDcuOSA3LjkgMCAwIDAtMy45MiAzLjAwN2wtMS4xNzQgNi4xMTggMS4zNjcgMi45Mi0uMDAxLjAwMVptLTcuMjQ3IDcuNDQxQTcuOTY0IDcuOTY0IDAgMCAwIDYuNzIgMjcuNTNhNy45MTggNy45MTggMCAwIDAgNC4wNCAyLjg3NCA3Ljg5IDcuODkgMCAwIDAgNC45NS0uMDk3IDcuOTIgNy45MiAwIDAgMCAzLjkyNi0zLjAzbDEuMTY2LTYuMTAyLTEuNTU1LTIuOTg1LTcuMDMtMy4yMTEtNi44ODUgNi4yNDguMDAxLjAwMVptNC43NTUtMTEuMDI0LTQuOC0xLjEzNy4wMDItLjAwMmEzLjgyIDMuODIgMCAwIDEgMS4zMTItNC4zNTggMy43ODUgMy43ODUgMCAwIDEgNC41MzguMDIzbC0xLjA1MiA1LjQ3NFptLTUuMjE2LjAxYTUuMjk0IDUuMjk0IDAgMCAwLTIuNTk1IDEuODgyIDUuMzI0IDUuMzI0IDAgMCAwLS4xNDIgNi4xMjQgNS4yODcgNS4yODcgMCAwIDAgMi41MDUgMmw2LjczMy02LjEwMS0xLjIzNS0yLjY1LTUuMjY2LTEuMjU1Wm0xOC4yODYgMTcuODQ4YTMuNzM3IDMuNzM3IDAgMCAxLTIuMjg1LS43ODVsMS4wMzctNS40NTQgNC44IDEuMTI1YTMuODEyIDMuODEyIDAgMCAxLTEuODAxIDQuNjhjLS41NC4yODMtMS4xNC40MzItMS43NTEuNDM0Wm0tMS4zMS03LjQ5OSA1LjI4IDEuMjM4YTUuMzQgNS4zNCAwIDAgMCAyLjYyMi0xLjkzOCA1LjM3IDUuMzcgMCAwIDAgMS4wMTMtMy4xMDYgNS4zMTEgNS4zMTEgMCAwIDAtLjkzNi0zLjAxIDUuMjgyIDUuMjgyIDAgMCAwLTIuNDc1LTEuOTQ0bC02LjkwNCA2LjA3IDEuNCAyLjY5WlwiLFxuICAgIGNsYXNzTmFtZTogXCJvdXRsaW5lXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZDogXCJtMTIuNTggMTMuNzg3IDcuMDAyIDMuMjExIDcuMDY2LTYuMjEzYTcuODQ5IDcuODQ5IDAgMCAwIC4xNTItMS41NTdjMC0xLjY5Mi0uNTM5LTMuMzQtMS41NC00LjcwNGE3Ljg5NyA3Ljg5NyAwIDAgMC00LjAyLTIuODY5IDcuODcgNy44NyAwIDAgMC00LjkzMi4wODYgNy45IDcuOSAwIDAgMC0zLjkyIDMuMDA3bC0xLjE3NCA2LjExOCAxLjM2NyAyLjkyLS4wMDEuMDAxWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNNS4zMzMgMjEuMjI4QTcuOTY0IDcuOTY0IDAgMCAwIDYuNzIgMjcuNTNhNy45MTggNy45MTggMCAwIDAgNC4wNCAyLjg3NCA3Ljg5IDcuODkgMCAwIDAgNC45NS0uMDk3IDcuOTIgNy45MiAwIDAgMCAzLjkyNi0zLjAzbDEuMTY2LTYuMTAyLTEuNTU1LTIuOTg1LTcuMDMtMy4yMTEtNi44ODUgNi4yNDguMDAxLjAwMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwibTUuMjg4IDkuMDY3IDQuOCAxLjEzN0wxMS4xNCA0LjczYTMuNzg1IDMuNzg1IDAgMCAwLTUuOTE0IDEuOTQgMy44MiAzLjgyIDAgMCAwIC4wNjQgMi4zOTVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzFCQTlGNVwiLFxuICAgIGQ6IFwiTTQuODcyIDEwLjIxNGE1LjI5NCA1LjI5NCAwIDAgMC0yLjU5NSAxLjg4MiA1LjMyNCA1LjMyNCAwIDAgMC0uMTQyIDYuMTI0IDUuMjg3IDUuMjg3IDAgMCAwIDIuNTA1IDJsNi43MzMtNi4xMDEtMS4yMzUtMi42NS01LjI2Ni0xLjI1NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzkzQzkwRVwiLFxuICAgIGQ6IFwiTTIwLjg3MyAyNy4yNzdhMy43MzYgMy43MzYgMCAwIDAgMi4yODUuNzg1IDMuNzgzIDMuNzgzIDAgMCAwIDMuMTAxLTEuNjMgMy44MTIgMy44MTIgMCAwIDAgLjQ1MS0zLjQ4NGwtNC44LTEuMTI1LTEuMDM3IDUuNDU0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDdDXCIsXG4gICAgZDogXCJtMjEuODQ4IDIwLjU2MyA1LjI4IDEuMjM4YTUuMzQgNS4zNCAwIDAgMCAyLjYyMi0xLjkzOCA1LjM3IDUuMzcgMCAwIDAgMS4wMTMtMy4xMDYgNS4zMTIgNS4zMTIgMCAwIDAtLjkzNi0zLjAxIDUuMjgzIDUuMjgzIDAgMCAwLTIuNDc1LTEuOTQ0bC02LjkwNCA2LjA3IDEuNCAyLjY5WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0VsYXN0aWM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0VsYXN0aWNTdGFjayA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRWxhc3RpY1N0YWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA0RTk4XCIsXG4gICAgZDogXCJNMCAyLjM3QTIuMzcgMi4zNyAwIDAgMSAyLjM3IDBoMjcuMjZBMi4zNyAyLjM3IDAgMCAxIDMyIDIuMzd2Ni41MkgwVjIuMzdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0wIDIwLjE0OGgzMnYtOC4yOTZIMHY4LjI5NlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzA3Q1wiLFxuICAgIGQ6IFwiTTAgMjMuMTExaDMydjYuNTE5QTIuMzcgMi4zNyAwIDAgMSAyOS42MyAzMkgyLjM3QTIuMzcgMi4zNyAwIDAgMSAwIDI5LjYzdi02LjUyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0VsYXN0aWNTdGFjazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAxNmMwIDEuMzg0LjE5NCAyLjcyLjUyNCA0SDIyYTQgNCAwIDAgMCAwLThIMi41MjRBMTUuOTg0IDE1Ljk4NCAwIDAgMCAyIDE2XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZDogXCJNMjguOTI0IDcuNjYyQTE1LjM4MSAxNS4zODEgMCAwIDAgMzAuNDggNkMyNy41NDcgMi4zNDYgMjMuMDUgMCAxOCAwIDExLjY3OSAwIDYuMjM5IDMuNjc4IDMuNjQ0IDlIMjUuNTFhNS4wMzkgNS4wMzkgMCAwIDAgMy40MTMtMS4zMzhcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTI1LjUxIDIzSDMuNjQ1QzYuMjQgMjguMzIzIDExLjY3OSAzMiAxOCAzMmM1LjA1IDAgOS41NDctMi4zNDYgMTIuNDgtNmExNS4zODEgMTUuMzgxIDAgMCAwLTEuNTU2LTEuNjYyQTUuMDM0IDUuMDM0IDAgMCAwIDI1LjUxIDIzXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0VsYXN0aWNzZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTYgMGMtMi45MTggMC01LjY0NS43OTQtOCAyLjE1OCA0Ljc3NyAyLjc2OCA4IDcuOTIzIDggMTMuODQyIDAgNS45MTktMy4yMjMgMTEuMDc0LTggMTMuODQyQTE1LjkwNyAxNS45MDcgMCAwIDAgMTYgMzJjOC44MzcgMCAxNi03LjE2MyAxNi0xNlMyNC44MzcgMCAxNiAwelwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDI0aDIuMjIyQTEyLjk5NiAxMi45OTYgMCAwIDAgMTMgMTZjMC0yLjkzNS0xLjAxMi01Ljc0NC0yLjc3OC04SDhhOCA4IDAgMCAwIDAgMTZ6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE2IDhoLTIuMTUyQTE1Ljg3NyAxNS44NzcgMCAwIDEgMTYgMTZjMCAyLjkxOC0uNzg2IDUuNjQ3LTIuMTUyIDhIMTZhOCA4IDAgMCAwIDAtMTZ6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29FbnRlcnByaXNlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29FdGNkID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FdGNkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCIjNDE5RURBXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjY1IDE0LjE2NGMwIDEuMTg5LS45MzMgMi4xNS0yLjA4MyAyLjE1LTEuMTUyIDAtMi4wODItLjk2MS0yLjA4Mi0yLjE1IDAtMS4xODUuOTMtMi4xNSAyLjA4Mi0yLjE1IDEuMTUgMCAyLjA4My45NjUgMi4wODMgMi4xNXptMi42OTMgMGMwIDEuMTg5LjkzNCAyLjE1IDIuMDg0IDIuMTVzMi4wODMtLjk2MSAyLjA4My0yLjE1YzAtMS4xODUtLjkzMy0yLjE1LTIuMDgzLTIuMTUtMS4xNSAwLTIuMDg0Ljk2NS0yLjA4NCAyLjE1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzEuNTIyIDE2LjQ5NWE1Ljg0NSA1Ljg0NSAwIDAgMS0zLjEwNS0uNjE4Yy4yNzItMS42MDMuMzg3LTMuMjE4LjM1Ny00LjgyN2EyNC44OTYgMjQuODk2IDAgMCAwLTMuMDI3LTMuNzAzIDYuMTM3IDYuMTM3IDAgMCAxIDIuMTMzLTIuMzZsLjM5MS0uMjUtLjMwNC0uMzU0Yy0xLjU3LTEuODI1LTMuNDQ0LTMuMjM1LTUuNTY4LTQuMTkzTDIxLjk3NSAwbC0uMTA3LjQ2MmE2LjI0OCA2LjI0OCAwIDAgMS0xLjUxIDIuODI5IDIzLjc3IDIzLjc3IDAgMCAwLTQuMzYyLTEuODU1IDIzLjc5IDIzLjc5IDAgMCAwLTQuMzU1IDEuODUxQTYuMjQ2IDYuMjQ2IDAgMCAxIDEwLjEzNy40NjVsLS4xMDgtLjQ2Mi0uNDIzLjE4OWMtMi4wOTcuOTQzLTQuMDIyIDIuMzkyLTUuNTY2IDQuMTlsLS4zMDYuMzU1LjM5LjI1YTYuMTI1IDYuMTI1IDAgMCAxIDIuMTI5IDIuMzQ3IDI1LjAwMSAyNS4wMDEgMCAwIDAtMy4wMjIgMy42ODkgMjYuMDY4IDI2LjA2OCAwIDAgMCAuMzQ3IDQuODYgNS44MzIgNS44MzIgMCAwIDEtMy4wOS42MTJMLjAzIDE2LjQ2bC4wNDMuNDczYTE2LjcyMyAxNi43MjMgMCAwIDAgMi4xNCA2Ljc2NWwuMjM0LjQxLjM1LS4zMDhhNS45MTQgNS45MTQgMCAwIDEgMi44MzctMS4zNzIgMjUuMjU1IDI1LjI1NSAwIDAgMCAyLjQyOSA0LjA4M2MxLjQ3NS41MzMgMy4wMTMuOTMgNC42MDEgMS4xNjdhNi4zNTkgNi4zNTkgMCAwIDEtLjM4MyAzLjI0M2wtLjE3NS40MzkuNDUuMTAyYzEuMTUuMjYxIDIuMzEuMzk0IDMuNDQ3LjM5NGwzLjQ0Ny0uMzk0LjQ1LS4xMDItLjE3NS0uNDRhNi4zNzYgNi4zNzYgMCAwIDEtLjM4My0zLjI0NCAyMy45MDUgMjMuOTA1IDAgMCAwIDQuNTg1LTEuMTY1IDI1LjI4NiAyNS4yODYgMCAwIDAgMi40My00LjA4NiA1Ljk0IDUuOTQgMCAwIDEgMi44NTEgMS4zNzNsLjM1LjMwNi4yMzMtLjQwOGExNi42NjEgMTYuNjYxIDAgMCAwIDIuMTQtNi43NjRsLjA0Mi0uNDcyLS40NS4wMzZaTTIwLjkzIDIyLjI3OGMtMS42My40NTgtMy4yODcuNjg5LTQuOTMzLjY4OS0xLjY1IDAtMy4zMDQtLjIzMS00LjkzNi0uNjlhMjAuMDI4IDIwLjAyOCAwIDAgMS0yLjExMy00LjU5NCAyMC4wNzIgMjAuMDcyIDAgMCAxLS44OS01LjA0IDE5LjA3NiAxOS4wNzYgMCAwIDEgMy41NzYtMy41MTYgMTguODY3IDE4Ljg2NyAwIDAgMSA0LjM2My0yLjQ0OCAxOC45NDQgMTguOTQ0IDAgMCAxIDQuMzU1IDIuNDQzIDE5LjE5IDE5LjE5IDAgMCAxIDMuNTkyIDMuNTM4Yy0uMDkgMS43My0uMzkgMy40MS0uODk5IDUuMDE5YTE5Ljk2NSAxOS45NjUgMCAwIDEtMi4xMTUgNC41OTlaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0V0Y2Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0djcCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR2NwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2djcCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgZDogXCJNLjA4NS4xaDQuNTQ5djYuMjkxSC4wODV6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNEQjQ0MzdcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNMjIuNTcgMjkuOTgyaC01Ljc0OWMuNTI3IDAgLjk4Ny0uMjgyIDEuMjMzLS43TDI1Ljg1NyAxNiAyMC45MyA3LjYxbDUuNzQ4LjAwMWMuNDkyIDAgLjk3LjI1MSAxLjIzMi43bDMuNjk4IDYuMjkxYy40OS44MzcuNTI2IDEuOSAwIDIuNzk3bC02LjU3MiAxMS4xODVhMi44NTMgMi44NTMgMCAwIDEtMi40NjQgMS4zOThabS0uNzEtMi43OTZjMCAuMzg2LjMxOC43LjcxLjdhLjcwNS43MDUgMCAwIDAgLjcxMi0uN2MwLS4zODYtLjMxOC0uNy0uNzExLS43YS43MDUuNzA1IDAgMCAwLS43MTIuN1ptNi45MjctMTAuNThjLjM0LjE5My43NzUuMDc4Ljk3MS0uMjU2YS42OTIuNjkyIDAgMCAwLS4yNi0uOTU1LjcxOC43MTggMCAwIDAtLjk3Mi4yNTYuNjkyLjY5MiAwIDAgMCAuMjYuOTU1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNDI4NUY0XCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwibTI1LjAzNiAzLjQxNiAyLjg3MyA0Ljg5NGExLjQyNyAxLjQyNyAwIDAgMC0xLjIzMi0uNjk5SDExLjA3MWwtNC45MjggOC4zODgtMi44NzQtNC44OTJhMS4zNzcgMS4zNzcgMCAwIDEgMC0xLjM5OWwzLjY5Ni02LjI5MmEyLjg1MyAyLjg1MyAwIDAgMSAyLjQ2NC0xLjM5OGgxMy4xNDNjLjk4MiAwIDEuOTM3LjUwMiAyLjQ2NCAxLjM5OFpNMTAuMTQgNC44MTRjMC0uMzg2LS4zMTgtLjctLjcxLS43YS43MDUuNzA1IDAgMCAwLS43MTIuN2MwIC4zODYuMzE4LjcuNzExLjdhLjcwNS43MDUgMCAwIDAgLjcxMS0uN1ptMTIuNzg3LjYwNmEuNjkyLjY5MiAwIDAgMCAuMjYtLjk1NS43MTguNzE4IDAgMCAwLS45NzEtLjI1Ni42OTIuNjkyIDAgMCAwLS4yNi45NTUuNzE4LjcxOCAwIDAgMCAuOTcxLjI1NlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y0QjQwMFwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIm0uMzk0IDE0LjYwMSAyLjg3NS00Ljg5M2MtLjI2My40NDktLjI0NS45OCAwIDEuMzk5TDExLjA3IDI0LjM5aDkuODU3bC0yLjg3NCA0Ljg5MmMtLjI0Ni40MTgtLjcwNi43LTEuMjMzLjdIOS40MjhhMi44NTQgMi44NTQgMCAwIDEtMi40NjQtMS4zOThMLjM5NCAxNy4zOThhMi43NTQgMi43NTQgMCAwIDEgMC0yLjc5N1ptMi44Mi43OTNhLjcxOC43MTggMCAwIDAtLjk3Mi4yNTYuNjkzLjY5MyAwIDAgMCAuMjYuOTU1Yy4zNC4xOTMuNzc1LjA3OC45NzEtLjI1NmEuNjkyLjY5MiAwIDAgMC0uMjYtLjk1NVpNOS4wNzIgMjYuNThhLjY5Mi42OTIgMCAwIDAtLjI2Ljk1NS43MTguNzE4IDAgMCAwIC45NzEuMjU2LjY5Mi42OTIgMCAwIDAgLjI2LS45NTUuNzE4LjcxOCAwIDAgMC0uOTcxLS4yNTZaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIm0xOC4wNTQgMjkuMjgyIDIuODc1LTQuODkySDE3Ljk2bC0xLjEzOCA1LjU5MWMuNTI2IDAgLjk4Ni0uMjggMS4yMzItLjY5OU0yNi42NzggNy42MTFoLTUuNzQ5bDEuNDg0IDIuNTI3TDI3LjkxIDguMzFhMS40MjcgMS40MjcgMCAwIDAtMS4yMzItLjdcIixcbiAgICBvcGFjaXR5OiAwLjFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBvcGFjaXR5OiAwLjEsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgyLjk5NCA5LjYwOSlcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTS4yNzUgMS40OTggMy4xNSA2LjM5MWwxLjQ4NS0yLjUyN0wuMjc1LjFjLS4yNjMuNDQ4LS4yNDUuOTggMCAxLjM5OFwiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIilcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQ0NDXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTExLjA3MSAyNC4zOSA2LjE0MyAxNmw0LjkyOC04LjM5aDkuODU4TDI1Ljg1NyAxNmwtNC45MjggOC4zOUgxMS4wN1pNMjAuMjY4IDE2YzAtMi4zMTctMS45MS00LjE5NC00LjI2OC00LjE5NC0yLjM1NyAwLTQuMjY4IDEuODc3LTQuMjY4IDQuMTk0IDAgMi4zMTYgMS45MSA0LjE5NCA0LjI2OCA0LjE5NCAyLjM1NyAwIDQuMjY4LTEuODc4IDQuMjY4LTQuMTk0WlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29HY3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0djcE1vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0djcE1vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC4yNTYgMTUuOTgyYzAtMi4zMTYtMS45MS00LjE5NC00LjI2OC00LjE5NC0yLjM1NyAwLTQuMjY4IDEuODc4LTQuMjY4IDQuMTk0IDAgMi4zMTcgMS45MTEgNC4xOTUgNC4yNjggNC4xOTUgMi4zNTcgMCA0LjI2OC0xLjg3OCA0LjI2OC00LjE5NVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkuODcgMTYuNTQzYS44NjIuODYyIDAgMCAxLTEuMTY3LjMwOC44MzIuODMyIDAgMCAxLS4zMTItMS4xNDcuODYyLjg2MiAwIDAgMSAxLjE2Ny0uMzA4LjgzMi44MzIgMCAwIDEgLjMxMiAxLjE0N00yMi41NiAyOC4xNWEuODQ3Ljg0NyAwIDAgMS0uODU1LS44NGMwLS40NjQuMzgzLS44NC44NTUtLjg0cy44NTQuMzc2Ljg1NC44NGMwIC40NjQtLjM4Mi44NC0uODU0Ljg0bS0xMi43MTUtLjExM2EuODYzLjg2MyAwIDAgMS0xLjE2Ny0uMzA4LjgzMi44MzIgMCAwIDEgLjMxMi0xLjE0Ny44NjIuODYyIDAgMCAxIDEuMTY3LjMwOC44MzIuODMyIDAgMCAxLS4zMTIgMS4xNDdNMy41ODYgMTYuNTQyYS44NjMuODYzIDAgMCAxLTEuMTY3LjMwOC44MzIuODMyIDAgMCAxLS4zMTMtMS4xNDcuODYyLjg2MiAwIDAgMSAxLjE2Ny0uMzA4LjgzMi44MzIgMCAwIDEgLjMxMyAxLjE0N00yMi45ODcgNS42NjVhLjg2Mi44NjIgMCAwIDEtMS4xNjctLjMwOC44MzIuODMyIDAgMCAxIC4zMTItMS4xNDcuODYzLjg2MyAwIDAgMSAxLjE2OC4zMDguODMyLjgzMiAwIDAgMS0uMzEzIDEuMTQ3bS0xMy41Ny4xMTJhLjg0Ny44NDcgMCAwIDEtLjg1NC0uODRjMC0uNDY0LjM4Mi0uODQuODU0LS44NHMuODU1LjM3Ni44NTUuODRjMCAuNDY0LS4zODMuODQtLjg1NS44NG0yMi4xNzggOC43OTctMy42OTctNi4yOTJjLS4wMTQtLjAyMy0uMDMtLjA0My0uMDQ1LS4wNjVsLTIuODMtNC44MThBMi44NTQgMi44NTQgMCAwIDAgMjIuNTYgMkg5LjQxN2EyLjg1MyAyLjg1MyAwIDAgMC0yLjQ2NCAxLjM5OEwzLjI1NyA5LjY5bDMuMjg0IDUuNTkgNC41MTktNy42OWgxNS42MDVjLjQ5MSAwIC45NjkuMjUxIDEuMjMyLjY5OWgtNi41NjVsNC41MTMgNy42ODItNC45MzUgOC40LTIuODcgNC44ODNhMS40MjYgMS40MjYgMCAwIDEtMS4yMy42OTlsMy4yNzktNS41ODJoLTkuMDNsLTQuNTQ0LTcuNzM4LS4zODQtLjY1My0yLjg3NC00Ljg5M2ExLjM3NyAxLjM3NyAwIDAgMS0uMDAzLTEuMzkxTC4zODIgMTQuNTg0YTIuNzU0IDIuNzU0IDAgMCAwIDAgMi43OTZsNi41NyAxMS4xODZhMi44NTQgMi44NTQgMCAwIDAgMi40NjUgMS4zOThoNy4zOTJjLjA1NCAwIC4xMDctLjAwNS4xNi0uMDExaDUuNTlhMi44NTMgMi44NTMgMCAwIDAgMi40NjQtMS4zOTdsNi41NzItMTEuMTg2Yy41MjYtLjg5Ni40OS0xLjk2IDAtMi43OTZcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29HY3BNb25vOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29HaXRodWIgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0dpdGh1YihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBDNy4xNjQgMCAwIDcuMzQzIDAgMTYuNGMwIDcuMjQ4IDQuNTg0IDEzLjM5NCAxMC45NDIgMTUuNTYyLjguMTUgMS4wOTItLjM1NiAxLjA5Mi0uNzg5IDAtLjM5LS4wMTQtMS42ODQtLjAyMi0zLjA1My00LjQ1Ljk5MS01LjM5LTEuOTM0LTUuMzktMS45MzQtLjcyOC0xLjg5NC0xLjc3Ni0yLjM5OC0xLjc3Ni0yLjM5OC0xLjQ1NC0xLjAxNy4xMS0uOTk3LjExLS45OTcgMS42MDYuMTE0IDIuNDUyIDEuNjkgMi40NTIgMS42OSAxLjQyOCAyLjUwNiAzLjc0NiAxLjc4MSA0LjY1NiAxLjM2LjE0Ni0xLjA1Ni41Ni0xLjc4IDEuMDE2LTIuMTktMy41NTItLjQxNC03LjI4OC0xLjgyMS03LjI4OC04LjEwNSAwLTEuNzkyLjYyNC0zLjI1NCAxLjY0Ni00LjQwMi0uMTY0LS40MTYtLjcxNC0yLjA4NS4xNTgtNC4zNDIgMCAwIDEuMzQxLS40NCA0LjQgMS42ODFBMTQuODgyIDE0Ljg4MiAwIDAgMSAxNiA3LjkzMmMxLjM2LjAwNiAyLjcyOC4xODggNC4wMDYuNTUzIDMuMDUzLTIuMTI0IDQuMzk2LTEuNjgxIDQuMzk2LTEuNjgxLjg3NSAyLjI1OS4zMjUgMy45MjYuMTYgNC4zNCAxLjAyNiAxLjE0OCAxLjY0NSAyLjYxIDEuNjQ1IDQuNDAyIDAgNi4zLTMuNzQyIDcuNjg3LTcuMzA3IDguMDk0LjU3Ny41MDggMS4wODYgMS41MDUgMS4wODYgMy4wMzUgMCAyLjE5Mi0uMDIxIDMuOTYtLjAyMSA0LjUgMCAuNDM3LjI5Ljk0NyAxLjEwMS43ODdDMjcuNDIgMjkuNzkgMzIgMjMuNjQ0IDMyIDE2LjQgMzIgNy4zNDMgMjQuODM2IDAgMTYgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29HaXRodWI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0dtYWlsID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29HbWFpbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNjVBNERcIixcbiAgICBkOiBcIk0yOS4xNjIgNC4xNDljLjI5LS4xNzUuNTg4LS4wNzguODczIDBhMi42MTYgMi42MTYgMCAwIDEgMS45MDcgMi40NzZjLjAwNi4yOS0uMDA3LjU4MS0uMDA3Ljg2Ni0uMDg0IDAtLjEzNS4wNTItLjIuMDk3LS44MTUuNTgyLTEuNjQyIDEuMTY0LTIuNDUgMS43NTItLjMzLjIzOS0uNjkyLjQyNi0uOTcuNzMtLjExNiAwLS4yLjA3OC0uMjg0LjEzNi0yLjY5IDEuODU1LTUuMzc5IDMuNzA0LTguMDYyIDUuNTYtMS4zMzEuOTE4LTIuNjYzIDEuODQ5LTMuOTk1IDIuNzczaC0uMTFjLS4wNTgtLjA0NS0uMTEtLjEwMy0uMTY4LS4xNDJMNS44NjMgMTEuNTVjLS42NzItLjQ2Ni0xLjM0NC0uOTM4LTIuMDE3LTEuNDAzLS4wNzctLjA1Mi0uMTQ4LS4xNjItLjI0NS0uMTA0LS4wOS4wNTItLjAzMy4xNzUtLjA0NS4yNzItLjAwNy4wMzIgMCAuMDY1IDAgLjA5N3YxNi4xOTRjMCAuMTE2LjAwNi4yNC4wMTIuMzU1IDAgLjA2NS0uMDA2LjEyMy0uMDA2LjE4OC0xLjIyOC4xNDktMi4zNDctLjAyLTMuMTE2LTEuMTMxYTIuMzgxIDIuMzgxIDAgMCAxLS40NC0xLjM2NGMwLTYuMDMyLS4wMDYtMTIuMDU3LjAwNy0xOC4wODkgMC0xLjIyOC45OTUtMi4zMTQgMi4yMTctMi40ODguMTk0LS4wMjYuMzg4LS4wNTIuNTU2LjA3Ny4wNC4wMzkuMDcxLjA3OC4xMTcuMTEgNC4yNzMgMy4xNjggOC41NDYgNi4zMzUgMTIuODE5IDkuNTEuMTY4LjEyMi4yNzguMTE2LjQ0Ni0uMDA3IDMuNDEzLTIuNTIxIDYuODMzLTUuMDM2IDEwLjI0Ny03LjU1LjkwNS0uNjkyIDEuODIzLTEuMzg0IDIuNzQ3LTIuMDdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGNkY0RUNcIixcbiAgICBkOiBcIk0yOS4xNjIgNC4xNDljLS45MjQuNjg1LTEuODQyIDEuMzc3LTIuNzY3IDIuMDYyLTMuNDEzIDIuNTIxLTYuODMzIDUuMDMtMTAuMjQ2IDcuNTUtLjE2OC4xMjMtLjI3Mi4xMy0uNDQ2LjAwNy00LjI2Ny0zLjE3NC04LjU0LTYuMzM1LTEyLjgxMy05LjUxLS4wNDYtLjAzMi0uMDc4LS4wNy0uMTE3LS4xMS4wNzgtLjEyOS4yMTQtLjA4My4zMjQtLjA4M2gyNS43NDJjLjExIDAgLjIzOS0uMDQ2LjMyMy4wODRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNkUzRDZcIixcbiAgICBkOiBcIk0zLjU1NiAyNi45NWE2LjUzMyA2LjUzMyAwIDAgMS0uMDEzLS4zNTZWMTAuNGMwLS4wMzItLjAwNy0uMDY1IDAtLjA5Ny4wMTMtLjA5LS4wNDYtLjIxMy4wNDUtLjI3MS4wOTctLjA1OS4xNzQuMDUxLjI0Ni4xMDMuNjcyLjQ2NSAxLjM0NC45MzcgMi4wMTcgMS40MDNsOS44MzIgNi44NDZjLjA1OC4wNDUuMTE3LjA5Ny4xNjguMTQyLS4wMjYuMDI2LS4wNTguMDQ1LS4wODQuMDcxbC0uMDY0LjA2NWMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjRsLS4wNjQuMDY1Yy0uMDA3LjAxMy0uMDIuMDItLjAyNi4wMzIuMDEzLS4wMDYuMDItLjAxOS4wMzItLjAyNWwuMDY1LS4wNjVjLjA1MiAwIC4xMDMtLjAxMy4xMy0uMDY1LjAxOC0uMDIuMDQ0LS4wNDUuMDY0LS4wNjQuMDY0IDAgLjEyOS0uMDA3LjE5NC0uMDA3Ljg5OC42MjcgMS44MDMgMS4yNDggMi43MDIgMS44NzUgMi42NzYgMS44NTUgNS4zNTMgMy43MDQgOC4wMjMgNS41NzIuNDc4LjMzNyAxLjAwMi42MjggMS40MjggMS4wMzUtLjExNi4xMS0uMjU4LjAzOS0uMzg4LjA1OC4wMDctLjE0OS0uMTIyLS4xODgtLjIyLS4yNTItLjQ5LS4zNDMtLjk5NS0uNjcyLTEuNDczLTEuMDI4LS44MDItLjU4OC0xLjYxNy0xLjE1LTIuNDMxLTEuNzItLjY3OS0uNDcyLTEuMzUxLS45NjMtMi4wNS0xLjQwOS0uNjA3LS4zODgtMS4xNy0uODUzLTEuNzc3LTEuMjQ4LS42ODUtLjQ0LTEuMzMyLS45My0yLjAxLTEuMzc3LS41NjMtLjM2OC0xLjExMy0uNzYyLTEuNjYyLTEuMTUtLjExLS4wNzgtLjIwNy0uMTEtLjMyMy0uMDMzLS4yMzMuMTY4LS41My4yNzgtLjcyNC40Ni0uNTU2LjUxLTEuMjM1Ljg0LTEuODE3IDEuMzA1LS43NDMuNTg5LTEuNTQ1IDEuMTEyLTIuMzQgMS42MzYtMS4zMTkuODczLTIuNTk5IDEuODE2LTMuOTExIDIuNjk2YTQzLjY5NyA0My42OTcgMCAwIDAtMi4zMDggMS42MjljLS4yMDcuMTU1LS40ODUuMjI2LS42MTQuNDg1LS4xMy0uMDEzLS4yNzIuMDM4LS4zOTUtLjA0NiAyLjMxNS0xLjYxNiA0LjYzLTMuMjI2IDYuOTM3LTQuODQyLjMwNC0uMjEzLjY0Ni0uMzgxLjg5OS0uNjY2LjA0NS0uMDEzLjEwMy0uMDE5LjA5Ny0uMDg0IDAtLjAwNi0uMDEzLS4wMi0uMDItLjAyLS4wNjUtLjAwNi0uMDc3LjA0Ni0uMDkuMDkxLS4yMzMuMDEzLS4zNzUuMTk0LS41NS4zMS0yLjQ2MyAxLjctNC45MzIgMy4zODgtNy4zOTUgNS4wNzVabTExLjExOS03LjU2NC4wNjQtLjA2NWMuMDUyIDAgLjEwNC0uMDEzLjEzLS4wNjRsLjA2NC0uMDY1Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NS4wMDYtLjAxMy4wMTktLjAyLjAyNS0uMDMyLS4wMTIuMDA2LS4wMTkuMDItLjAzMi4wMjYtLjA1MiAwLS4xMDMuMDEzLS4xMy4wNjRsLS4wNjQuMDY1Yy0uMDUxIDAtLjEwMy4wMTMtLjEzLjA2NS0uMDE4LjAyNi0uMDM4LjA0NS0uMDU3LjA3LS4wMTMuMDA3LS4wMjYuMDE0LS4wMzMuMDI3LjAxMy0uMDA3LjAyNi0uMDEzLjAzMy0uMDI2Wm0tLjg0LjU3NWMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjUtLjAzOS4wMDYtLjA5LjAwNi0uMDk3LjA2NSAwIC4wMTIuMDI2LjAzOC4wMzkuMDM4LjA1Mi0uMDA2LjA1OC0uMDUxLjA2NS0uMDkuMDUxLS4wMDcuMDk2LS4wMTMuMTIyLS4wNzhhLjMxMS4zMTEgMCAwIDAgLjA3MS0uMDU4Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NWwuMDY0LS4wNjRjLjA1MiAwIC4xMDQtLjAxMy4xMy0uMDY1LjAwNi0uMDEzLjAyLS4wMi4wMjYtLjAzMi0uMDEzLjAwNi0uMDIuMDItLjAzMy4wMjYtLjA1MSAwLS4xMDMuMDEzLS4xMy4wNjQtLjAxOC4wMi0uMDQ0LjA0Ni0uMDY0LjA2NS0uMDUxIDAtLjEwMy4wMTMtLjEyOS4wNjVsLS4wNjUuMDY0Wm0tLjg0MS41ODhjLS4wNTIgMC0uMTAzLjAxMy0uMTMuMDY1LS4wNTEuMDA3LS4xMDMuMDEzLS4wOTYuMDg0IDAgLjAwNy4wMTMuMDIuMDIuMDIuMDcuMDA2LjA3Ny0uMDQ2LjA4My0uMDk3LjA1Mi0uMDA3LjA5Ny0uMDIuMTIzLS4wNzIuMDI2LS4wMTIuMDQ1LS4wMzguMDcxLS4wNTguMDUyIDAgLjEwMy0uMDEzLjEzLS4wNjRsLjA2NC0uMDY1Yy4wNTIgMCAuMTAzLS4wMTMuMTMtLjA2NS4wMDYtLjAxMy4wMTktLjAxOS4wMjUtLjAzMi0uMDEzLjAwNy0uMDIuMDItLjAzMi4wMjYtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjVsLS4wNjQuMDY0Yy0uMDUyIDAtLjEwNC4wMTMtLjEzLjA2NWEuMzA2LjMwNiAwIDAgMC0uMDY0LjA2NFptLS42NDcuNDZjLjA1Mi0uMDA3LjEwNC0uMDEzLjA5Ny0uMDg1IDAtLjAwNi0uMDEyLS4wMTktLjAxOS0uMDE5LS4wNzEtLjAwNi0uMDc4LjA0NS0uMDg0LjA5Ny0uMDUyIDAtLjA5Ny4wMTMtLjEzLjA2NWEuMjIzLjIyMyAwIDAgMC0uMTkzLjEyOWMtLjA0NS4wMTMtLjEwNC4wMTMtLjA5Ny4wODQgMCAuMDA2LjAxMy4wMi4wMi4wMi4wNjQuMDA2LjA3Ny0uMDQ2LjA4My0uMDk4LjA5IDAgLjE4MS0uMDA2LjE5NC0uMTI5LjA1OC0uMDA2LjEwNC0uMDIuMTMtLjA2NVptMi4xMjgtMS41MzNjLS4wMDguMDI3LS4wMjUuMDU0LS4wMzMuMDcyLjAyNS4wMDkuMDUuMDM1LjA2Ny4wMjcuMDE2LS4wMS4wMjUtLjA0NS4wMzMtLjA3MmEuNTUuNTUgMCAwIDEtLjA2Ny0uMDI3Wm0tMS44MSAxLjM1Yy0uMDA4LS4wMjQtLjAxNS0uMDU2LS4wMy0uMDU2LS4wMTUtLjAwOC0uMDUyLjAwOC0uMDYuMDI0LS4wMjIuMDMzLS4wMDcuMDc0LjAzLjA3NC4wMjIgMCAuMDM3LS4wMjUuMDYtLjA0MVpNMTUuMzU1IDE5YS4xODUuMTg1IDAgMCAxIC4wMzQtLjA3MmMtLjAyNS0uMDA5LS4wNS0uMDM1LS4wNjctLjAyNi0uMDE2LjAwOC0uMDI1LjA0NC0uMDMzLjA3LjAxNy4wMS4wNDIuMDE5LjA2Ny4wMjhabS0zLjUyNiAyLjQwMmMtLjAxNi0uMDI0LS4wMzEtLjA1LS4wNC0uMDU3LS4wMTUgMC0uMDU1LjAxNi0uMDU1LjAzMy0uMDE2LjA0LjAwOC4wNzQuMDQ4LjA2NS4wMTYgMCAuMDMxLS4wMjQuMDQ3LS4wNFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0I2QjVBQ1wiLFxuICAgIGQ6IFwiTTI4LjEyMSAyNy4wODVjLS40MjYtLjQxMy0uOTQ0LS42OTgtMS40MjgtMS4wMzQtMi42Ny0xLjg2Mi01LjM0Ny0zLjcxNy04LjAyMy01LjU3My0uODk5LS42MjctMS44MDQtMS4yNDctMi43MDItMS44NzQgMC0uMDItLjAwNy0uMDQ2LS4wMDctLjA2NWwzLjk5NS0yLjc3M2MyLjY5LTEuODU2IDUuMzc5LTMuNzA1IDguMDYyLTUuNTYuMDg0LS4wNTguMTY4LS4xMzYuMjg0LS4xMzZ2MTcuMDczYy0uMDUxLS4wMTktLjExNi0uMDM4LS4xOC0uMDU4WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTZFM0Q2XCIsXG4gICAgZDogXCJNNC4wNzMgMjcuMTQzYy4xMjMtLjI1OC40MDctLjMzLjYxNC0uNDg0YTQ3Ljg0NSA0Ny44NDUgMCAwIDEgMi4zMDgtMS42M2MxLjMxMi0uODg1IDIuNTkyLTEuODIzIDMuOTEtMi42OTUuNzk2LS41MjQgMS41OTgtMS4wNDggMi4zNDEtMS42MzYuNTg4LS40NjUgMS4yNi0uNzk1IDEuODE3LTEuMzA2LjItLjE4LjQ5LS4yOS43MjQtLjQ1OS4xMS0uMDg0LjIwNy0uMDUxLjMyMy4wMzMuNTUuMzg4IDEuMDk5Ljc4MiAxLjY2MSAxLjE1LjY4LjQ0NiAxLjMyNi45NDQgMi4wMSAxLjM3Ny42MDguMzg4IDEuMTcuODU0IDEuNzc5IDEuMjQ4LjY5OC40NDYgMS4zNy45MzcgMi4wNDkgMS40MS44MTQuNTY4IDEuNjM1IDEuMTMgMi40MyAxLjcxOS40ODUuMzU1Ljk4My42ODUgMS40NzUgMS4wMjguMDkuMDY0LjIyNi4xMDMuMjIuMjUyLTcuODg4LS4wMDctMTUuNzc0LS4wMDctMjMuNjYxLS4wMDdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNCMTM5MkZcIixcbiAgICBkOiBcIk0yOC4zMTUgMjcuMTQzVjEwLjA3Yy4yNzgtLjMwNC42NC0uNDkxLjk3LS43My44MTQtLjU5NSAxLjYzNS0xLjE3IDIuNDUtMS43NTIuMDU4LS4wNDUuMTE2LS4wOTcuMi0uMDk3LjAwNy4xMS4wMTMuMjEzLjAxMy4zMjMgMCA1LjUwMiAwIDExLjAxLjAwNyAxNi41MSAwIC4zNzYtLjAxMy43NS0uMTA0IDEuMTI2LS4xNjEuNjkxLS41NzUgMS4xNy0xLjI0NyAxLjQwOS0uNzQ0LjI1OS0xLjUxMy4zMy0yLjI4OS4yODRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNCRUJEQjNcIixcbiAgICBkOiBcIk0xMS41MTQgMjEuNTljLS4yNTMuMjg1LS41OTUuNDUzLS45LjY2NmEyNjUwLjA3OCAyNjUwLjA3OCAwIDAgMS02LjkzNiA0Ljg0MmwtLjEyOS4wMzljMC0uMDY1LjAwNy0uMTIzLjAwNy0uMTg4IDIuNDctMS42ODcgNC45MzItMy4zNzQgNy40MDItNS4wNjEuMTc0LS4xMTcuMzEtLjMwNC41NS0uMzFsLjAwNi4wMTJaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0dtYWlsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Hb2xhbmcgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0dvbGFuZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y2RDJBMlwiLFxuICAgIGQ6IFwiTTQuMzE1IDE3LjMwMWMuMDQ1Ljk0NiAxIC41IDEuNDE2LjIxLjQxNS0uMjkuNS0uMDQ1LjU2LS42YTkuMDcgOS4wNyAwIDAgMCAuMDQ1LTEuMDkgMi42NzYgMi42NzYgMCAwIDAtMS43ODYuNDU1Yy0uMjYuMTktLjc0NS43OS0uMjQgMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNNC44MDUgMTcuOTg3YS42LjYgMCAwIDEtLjI3LS4wNi42Mi42MiAwIDAgMS0uMzEtLjU1QS40MS40MSAwIDAgMSA0IDE3LjA1YTEuMTUgMS4xNSAwIDAgMSAuNS0uODMgMi43NTIgMi43NTIgMCAwIDEgMS44NDYtLjQ3aC4wNzV2LjA3NGMuMDEuMjg2LjAwMy41NzItLjAyNS44NTZ2LjI1Yy0uMDI1LjM5LS4xLjQ1LS4zLjVhMS4xMTggMS4xMTggMCAwIDAtLjMuMTQ1Yy0uMjg4LjIyMy0uNjMuMzY0LS45OS40MVptMS4yNzEtMi4wNjdhMi41MDIgMi41MDIgMCAwIDAtMS40Ny40NSAxIDEgMCAwIDAtLjQyLjY3MS4yNS4yNSAwIDAgMCAuMTcuMjA1aC4wNXYuMDU1YS41LjUgMCAwIDAgLjIxLjQ1IDEuMzEgMS4zMSAwIDAgMCAxLjA2NS0uMzEgMS4yOSAxLjI5IDAgMCAxIC4zNC0uMTdjLjEzLS4wNDUuMTYtLjA1NS4xOC0uMzY1di0uMjVjLjAyNC0uMjUuMDM0LS41LjAzLS43NWgtLjE1NXYuMDE0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQzdCMTk5XCIsXG4gICAgZDogXCJNNC4zMTUgMTcuM2EuNzQ1Ljc0NSAwIDAgMCAuMzc2LS4yMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTQuMzE1IDE3LjM5MWEuMDkyLjA5MiAwIDEgMS0uMDU1LS4xNzVoLjA2YS41NC41NCAwIDAgMCAuMjc1LS4xNi4wOTIuMDkyIDAgMCAxIC4wNi0uMDM1LjA5LjA5IDAgMCAxIC4wNjguMDE3LjA5LjA5IDAgMCAxIC4wMzUuMDYuMDkxLjA5MSAwIDAgMS0uMDE4LjA2OC43LjcgMCAwIDEtLjM2LjIyaC0uMDY1di4wMDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM3NENERERcIixcbiAgICBkOiBcIk02LjQ5NiA2LjA1QzIuODggNS4wNDkgNS41NzEuNDMgOC40OTggMi4zMjJMNi40OTYgNi4wNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTYuNTQxIDYuMTU0aC0uMDdjLTEuMDMtLjI5LTEuNjY2LS45LTEuNzg2LTEuNzE2YTIuMzk2IDIuMzk2IDAgMCAxIDEuMTE2LTIuMjYgMi40MjEgMi40MjEgMCAwIDEgMi43MjIuMDlsLjA3LjA0NEw2LjU0IDYuMTU0Wm0uNS00LjE5MmMtLjQxIDAtLjgxMS4xMi0xLjE1NS4zNDVBMi4yMTEgMi4yMTEgMCAwIDAgNC44NSA0LjM5M2MuMTEuNzI2LjY3IDEuMjc2IDEuNTg2IDEuNTUxbDEuOTAxLTMuNTg3YTIuNTAxIDIuNTAxIDAgMCAwLTEuMjgtLjM4bC0uMDE1LS4wMTVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM3NENERERcIixcbiAgICBkOiBcIk0yMi41NjYgMS45NzdjMi44NjItMi4wMDEgNS40NDggMi41MDIgMi4xMjEgMy42NjdsLTIuMTIxLTMuNjY3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJtMjQuNjQ3IDUuNzU0LTIuMjAxLTMuODAyLjA2NS0uMDQ1YTIuMzYyIDIuMzYyIDAgMCAxIDIuNjI2LS4yMiAyLjQyNyAyLjQyNyAwIDAgMSAxLjE5NiAyLjI0MWMtLjA1LjUtLjMyIDEuMzU2LTEuNjE2IDEuODAxbC0uMDcuMDI1Wm0tMS45NjEtMy43NTIgMi4wNDEgMy41MzJhMS45NTYgMS45NTYgMCAwIDAgMS40MjYtMS42MiAyLjI0IDIuMjQgMCAwIDAtMS4xMDYtMi4wNzcgMi4xMjYgMi4xMjYgMCAwIDAtMi4zNjEuMTY1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjZEMkEyXCIsXG4gICAgZDogXCJNMjMuMTgxIDI4LjkyOGMuNzI2LjQ1IDIuMDU2IDEuODExLjk2NiAyLjQ3MS0xLjA0Ni45NjEtMS42MzYtMS4wNTUtMi41NTctMS4zM2EyLjU0OSAyLjU0OSAwIDAgMSAxLjU5MS0xLjE0MVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTIzLjU5MiAzMS43NDVoLS4wNGMtLjQxNi0uMDI1LS43NTYtLjQzLTEuMDg2LS44MTZhMi4zMyAyLjMzIDAgMCAwLS45LS43NzVsLS4xMi0uMDM1LjA3NC0uMTI1YTIuNjU2IDIuNjU2IDAgMCAxIDEuNjQ2LTEuMTc2aC4wNjVjLjQ2Ni4yOSAxLjQyNiAxLjEzIDEuNDIxIDEuODkxYS44MzUuODM1IDAgMCAxLS40NS43MjUuOTA1LjkwNSAwIDAgMS0uNjEuMzFabS0xLjg2MS0xLjcyMWMuMzM5LjIuNjMzLjQ2Ny44NjUuNzg1LjIxOS4zNi41Ni42MjguOTYuNzU1YS43MTYuNzE2IDAgMCAwIC41LS4yMzUuNjYxLjY2MSAwIDAgMCAuMzcxLS41OGMwLS42MS0uNzctMS4zNzYtMS4zMDYtMS43MjFhMi4zNTEgMi4zNTEgMCAwIDAtMS4zODYuOTk2aC0uMDA1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNMjQuMTQ3IDMxLjQ5NGEuMDkuMDkgMCAwIDEtLjA4LS4wNWMtLjA1My0uMTEtLjEtLjIyNC0uMTQtLjM0YTEuNSAxLjUgMCAwIDAtLjMzLS42MS4wOTEuMDkxIDAgMCAxLS4wMjItLjA5OC4wOS4wOSAwIDAgMSAuMTQ3LS4wMzJjLjE3Mi4xODguMy40MTQuMzcuNjYuMDM5LjExLjA4NC4yMTYuMTM1LjMyYS4wOS4wOSAwIDAgMS0uMDQuMTJsLS4wNC4wM1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y2RDJBMlwiLFxuICAgIGQ6IFwiTTEwLjE4OSAzMC40NjRjLS44NTYuMTMtMS4zMzYuOS0yLjA0NiAxLjI5YS42Mi42MiAwIDAgMS0xLjAwMS0uMjM1LjMyNS4zMjUgMCAwIDEtLjI2LS4xMmMtLjYyLTEgLjY0NS0xLjY5NiAxLjMxLTIuMTg2LjkzNi0uMTggMS41MTEuNjE1IDEuOTk3IDEuMjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk03LjY5MiAzMS45OTVhLjYxMy42MTMgMCAwIDEtLjE2IDAgLjc0Ljc0IDAgMCAxLS40MzUtLjM3NS4zMDEuMzAxIDAgMCAxLS4yNDUtLjEzYy0uNi0uOTQ2LjQyLTEuNjYyIDEuMDk2LTIuMTM3bC4yMzUtLjE3Yy45NDUtLjE5IDEuNTQ2LjU5IDIuMDI2IDEuMjJsLjEzNS4xODFoLS4xNWEyLjU4NiAyLjU4NiAwIDAgMC0xLjI2Ni43MjVjLS4yMy4yMTItLjQ4Mi40LS43NS41NmExLjAwMSAxLjAwMSAwIDAgMS0uNDg2LjEyNlptLS42LS41OGEuMjQ1LjI0NSAwIDAgMSAuMTA1IDBoLjAyNWwuMDQuMDhhLjU4LjU4IDAgMCAwIC4zMzUuMzA1LjY4Ni42ODYgMCAwIDAgLjUtLjEyYy4yNi0uMTU1LjUwMy0uMzM3LjcyNi0uNTRhMyAzIDAgMCAxIDEuMjA2LS43MzZjLS40Ni0uNi0xLTEuMjUtMS43ODYtMS4xbC0uMjI1LjE2Yy0uNjkuNS0xLjU0NiAxLjA5LTEuMDUxIDEuODg1YS4xNDYuMTQ2IDAgMCAwIC4xMDUuMDdsLjAyLS4wMDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk03LjE1NyAzMS42MTRhLjA5LjA5IDAgMCAxLS4wOS0uMTJjLjAzNy0uMjQuMTM3LS40NjYuMjktLjY1NS4wNzItLjEuMTM2LS4yMDUuMTktLjMxNWEuMDkuMDkgMCAxIDEgLjE2NS4wNzVjLS4wNTguMTItLjEyNy4yMzYtLjIwNS4zNDUtLjEzMi4xNy0uMjE3LjM3Mi0uMjQ1LjU4NWEuMDkuMDkgMCAwIDEtLjA2Ny4wODQuMDkuMDkgMCAwIDEtLjAzOC4wMDJaTTYuNjQ3IDQuNzhjLS41LS4yNS0uODI2LS41OTYtLjUzNi0xLjE0Ni4yOS0uNTUuNzctLjQ1NSAxLjI1MS0uMjA1bC0uNzE1IDEuMzVabTE3LjI4NS0uNDhjLjUtLjI1LjgyNS0uNTk2LjUzNS0xLjE0Ni0uMjktLjU1LS43Ny0uNDU2LTEuMjUtLjIwNWwuNzE1IDEuMzVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGNkQyQTJcIixcbiAgICBkOiBcIk0yNy4yMTkgMTcuMTgxYy0uMDQ1Ljk0Ni0xLjAwMS41LTEuNDE2LjIxLS40MTYtLjI5LS41LS4wNDUtLjU2LS42YTkuMDY4IDkuMDY4IDAgMCAxLS4wNDYtMS4wOSAyLjY3NyAyLjY3NyAwIDAgMSAxLjc4Ny40NTRjLjI2LjE5Ljc0NS43OS4yNCAxLjAwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNMjYuNzI4IDE3Ljg0NmEyLjA0NiAyLjA0NiAwIDAgMS0uOTU1LS4zNiAxLjExNyAxLjExNyAwIDAgMC0uMy0uMTQ1Yy0uMi0uMDctLjI3NS0uMTMtLjMtLjV2LS4yNWE2LjUxNiA2LjUxNiAwIDAgMS0uMDI2LS44NTZ2LS4xMmguMDc2YTIuNzUxIDIuNzUxIDAgMCAxIDEuODQ2LjQ3IDEuMTUgMS4xNSAwIDAgMSAuNS44My40MTIuNDEyIDAgMCAxLS4yMjUuMzI2LjYyLjYyIDAgMCAxLS4zMS41NS42MDUuNjA1IDAgMCAxLS4zMDYuMDU1Wm0tMS40NTYtMi4wNmMtLjAwMy4yNS4wMDcuNS4wMy43NXYuMjVjMCAuMzA1LjA0Ni4zMTUuMTguMzY1LjEyMi4wNC4yMzYuMDk3LjM0LjE3YTEuMzA3IDEuMzA3IDAgMCAwIDEuMDY3LjMxLjUwMi41MDIgMCAwIDAgLjIxLS40NXYtLjA2aC4wNWEuMjUuMjUgMCAwIDAgLjE3LS4yMDUgMS4wMDIgMS4wMDIgMCAwIDAtLjQyLS42NyAyLjU1MiAyLjU1MiAwIDAgMC0xLjYyNy0uNDZaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNDN0IxOTlcIixcbiAgICBkOiBcIk0yNy4yMTggMTcuMTgxYS43NDYuNzQ2IDAgMCAxLS4zNzUtLjE5NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTI3LjIxOSAxNy4yNzFoLS4wOTVhLjcuNyAwIDAgMS0uMzUtLjI1LjA5LjA5IDAgMCAxLS4wMDctLjEwMS4wOTEuMDkxIDAgMCAxIC4xNTItLjAxLjU0LjU0IDAgMCAwIC4yNzUuMTZoLjA2YS4xMDEuMTAxIDAgMSAxLS4wMzUuMjAxWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNzRDREREXCIsXG4gICAgZDogXCJNMTUuNDA3LjA2NmMzLjYyMiAwIDcuMDA0LjUgOC43ODUgNC4wMDIgMS41ODYgMy44OTggMSA4LjEwNSAxLjI2NiAxMi4yMjMuMjEgMy41MzcuNjcgNy42MjQtLjk3IDEwLjkwNi0xLjcxNyAzLjQ0Mi02LjA1IDQuMjk3LTkuNjAxIDQuMTgyLTIuNzkyLS4xLTYuMTY0LTEtNy43NC0zLjU2Mi0xLjg1MS0zLjAwMi0uOTc2LTcuNDQ0LS44NC0xMC43NzEuMTYtMy45NDItMS4wNzEtNy45LjIyNS0xMS43NjJDNy44NzcgMS4yODIgMTEuNS4zNzYgMTUuNDAyLjA2NlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNMTUuNTAyIDMxLjQ5NGgtLjYyYTEzLjIwMiAxMy4yMDIgMCAwIDEtNC4zNTgtLjg3IDYuOTY5IDYuOTY5IDAgMCAxLTMuNDU3LTIuNzM3Yy0xLjUwMS0yLjQyMS0xLjIzLTUuNzYzLTEtOC43MTUuMDYtLjc0LjExNC0xLjQ0Ni4xNC0yLjEwNi4wMjYtMS40LS4wMzQtMi44LS4xOC00LjE5Mi0uMjExLTIuNTAyLS40MzEtNS4wODkuNDEtNy41OTVhNi42NDQgNi42NDQgMCAwIDEgMy41MDEtNC4wNDdDMTEuMjkuNTcyIDEyLjk0LjE5IDE1LjM2NyAwYzMuNTcyLS4wMjUgNy4wOTQuNDc1IDguOTA1IDQuMDIyIDEuMTYgMi44NTIgMS4xNzYgNS45MTQgMS4xOTYgOC44NzYgMCAxLjExIDAgMi4yNTYuMDggMy4zNzcgMCAuMzQuMDQuNjg1LjA2NSAxLjAzLjIxIDMuMjQ3LjQ1IDYuOTM0LTEuMDQ2IDkuOTE2LTEuODcxIDMuNzMyLTYuNTc0IDQuMjcyLTkuMDY1IDQuMjcyWk0xNS40MDcuMTU2Yy0zLjc2OC4zMi03LjQ0IDEuMTMtOC43OSA1LjE1OC0uODMxIDIuNDcxLS42MSA1LjAzOC0uNDA2IDcuNTA0LjE0NyAxLjQuMjA3IDIuODA2LjE4IDQuMjEzLS4wMjUuNjY1LS4wODUgMS4zNy0uMTQgMi4xMTYtLjIzIDIuOTIyLS41IDYuMjM5Ljk2NiA4LjYwNS42MTUgMSAyLjU5NiAzLjMzNyA3LjY3IDMuNTAyIDIuMTk2LjA4IDcuNTA0LS4xNyA5LjUwNS00LjE0MiAxLjQ3LTIuOTQyIDEuMjM2LTYuNTk5IDEuMDI2LTkuODI2IDAtLjM1LS4wNDUtLjY5NS0uMDY1LTEuMDNhNjcuNDUxIDY3LjQ1MSAwIDAgMS0uMDgtMy4zNTNjMC0yLjk0MS0uMDMtNi4wMDMtMS4xODEtOC44MDVBNi40MzggNi40MzggMCAwIDAgMjAuNDQ1Ljg0MWExNC45NiAxNC45NiAwIDAgMC01LjAzOC0uNjg1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjZmZmXCIsXG4gICAgZDogXCJNMTYuMDQyIDQuOTI0Yy42NSAzLjc3NyA2LjgyNCAyLjc4MSA1LjkzOC0xLjAzLS43OTUtMy40MTgtNi4xNTMtMi40NzItNS45MzggMS4wM1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTE4Ljk3OSA3LjM5YTMuNDU3IDMuNDU3IDAgMCAxLTEuMTMtLjE4NSAyLjc5NyAyLjc5NyAwIDAgMS0xLjg5Mi0yLjI2NiAyLjg4MiAyLjg4MiAwIDAgMSAuNzgtMi4yMjIgMy40MDcgMy40MDcgMCAwIDEgMi4wMDItMSAzLjIwMiAzLjIwMiAwIDAgMSAyLjAzMS4zNSAyLjcyNyAyLjcyNyAwIDAgMSAxLjI5NiAxLjgwNiAyLjY0MyAyLjY0MyAwIDAgMS0uNzcgMi42ODIgMy41MDIgMy41MDIgMCAwIDEtMi4zMTcuODM1Wm0tMi44NDctMi40NzZhMi42MjYgMi42MjYgMCAwIDAgMS43NzYgMi4xMjYgMy40MTcgMy40MTcgMCAwIDAgMy4yNzctLjYyIDIuNTAyIDIuNTAyIDAgMCAwIC43MTYtMi41MDIgMi42NzIgMi42NzIgMCAwIDAtMy4xMzItMi4wMzEgMi44ODcgMi44ODcgMCAwIDAtMi42MzcgMy4wMjdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNmZmZcIixcbiAgICBkOiBcIk04LjY2MyA1LjUzOWMuODQgMy4yODcgNi4xMDMgMi40NDEgNS45MDgtLjg1NS0uMjM1LTMuOTUzLTYuNzE0LTMuMjA3LTUuOTA4Ljg1NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTExLjQ3NCA3LjcwNWEzLjIzMiAzLjIzMiAwIDAgMS0xLjUzNi0uMzc1IDIuNzI3IDIuNzI3IDAgMCAxLTEuMzU1LTEuNzc2IDIuNzU3IDIuNzU3IDAgMCAxIC45NC0yLjgyNyAzLjU1MiAzLjU1MiAwIDAgMSAzLjUzMi0uNDUgMi42NzIgMi42NzIgMCAwIDEgMS42MDEgMi40MDJjLjEwNSAxLjc1LTEuMjg2IDIuNzcxLTIuNjE3IDMuMDAxYTMuNjU3IDMuNjU3IDAgMCAxLS41NjUuMDI1Wk04Ljc2MyA1LjUyQTIuNzMyIDIuNzMyIDAgMCAwIDEyLjAzIDcuNTJjMS4yNi0uMiAyLjU3Ni0xLjE2IDIuNDc2LTIuODA2YTIuNTAxIDIuNTAxIDAgMCAwLTEuNS0yLjI2MiAzLjM3NyAzLjM3NyAwIDAgMC0zLjM1OC40MyAyLjU5NyAyLjU5NyAwIDAgMC0uODg1IDIuNjM3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjZmZmXCIsXG4gICAgZDogXCJNMTYuNzY3IDkuNDgxYy4wNDkuNTIxLjA0OSAxLjA0NiAwIDEuNTY2YTEgMSAwIDAgMS0uNTg1LjM2Ljg2MS44NjEgMCAwIDEtLjY1NS0uNWMtLjAzMi0uNTktLjAxNy0xLjE4My4wNDUtMS43N2wxLjE5NS4zNDRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk0xNi4yMzcgMTEuNDgzaC0uMDI1YS45NDQuOTQ0IDAgMCAxLS43MjUtLjU2NiA1Ljk1IDUuOTUgMCAwIDEgMC0xLjIxNWMwLS4xODUuMDMtLjM4LjAzNS0uNTd2LS4xNWwxLjM1LjQxNHYuMDg1YzAgLjE2IDAgLjMzLjAyNi41LjA0NS4zNTguMDQ1LjcyIDAgMS4wNzZ2LjAyNWEuNzUuNzUgMCAwIDEtLjQ3Ni4zNGwtLjE1NS4wNmgtLjAzWm0tLjU4LS42M2EuNzY2Ljc2NiAwIDAgMCAuNTYuNDQ1bC4xNC0uMDU2YS42LjYgMCAwIDAgLjM2Ni0uMjZjLjA0LS4zMzIuMDQtLjY2OCAwLTEgMC0uMTU1IDAtLjMwNS0uMDI2LS40NTVsLTEtLjMwNmMwIC4xNTUgMCAuMzEtLjAzLjQ2LS4wNDQuMzg4LS4wNS43NzgtLjAxNSAxLjE2NmwuMDA1LjAwNVpNMTAuMTE0IDUuOTY0Yy40OTEgMCAuODktLjQzMi44OS0uOTY1IDAtLjUzNC0uMzk5LS45NjYtLjg5LS45NjYtLjQ5MiAwLS44OS40MzItLjg5Ljk2NiAwIC41MzMuMzk4Ljk2NS44OS45NjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNmZmZcIixcbiAgICBkOiBcIk0xMC41MTkgNS40NjRjLjExNiAwIC4yMS0uMTEuMjEtLjI0NXMtLjA5NC0uMjQ1LS4yMS0uMjQ1Yy0uMTE2IDAtLjIxLjExLS4yMS4yNDVzLjA5NC4yNDUuMjEuMjQ1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNMTcuNTY4IDUuNzI0Yy40ODMgMCAuODc1LS40MzIuODc1LS45NjUgMC0uNTMzLS4zOTItLjk2Ni0uODc1LS45NjYtLjQ4NCAwLS44NzYuNDMzLS44NzYuOTY2IDAgLjUzMy4zOTIuOTY1Ljg3Ni45NjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNmZmZcIixcbiAgICBkOiBcIk0xNy45NjMgNS4yMjRjLjExNCAwIC4yMDYtLjExLjIwNi0uMjQ1IDAtLjEzNi0uMDkyLS4yNDUtLjIwNi0uMjQ1LS4xMTMgMC0uMjA1LjExLS4yMDUuMjQ1cy4wOTIuMjQ1LjIwNS4yNDVaTTE0LjI2NiA5LjQwNmMtLjM5Ljk0MS4yMTUgMi44MjIgMS4yNyAxLjQzNmExMS4xMiAxMS4xMiAwIDAgMSAuMDQ2LTEuNzdsLTEuMzE2LjMzNFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTE0LjgxMiAxMS40MjhhLjUuNSAwIDAgMS0uMjYtLjA3Yy0uNDI2LS4yNDYtLjY5MS0xLjI1MS0uMzktMi4wMDJ2LS4wNGwxLjUtLjM4di4xMmMwIC4xOTUgMCAuMzktLjAzNS41NzVhNS43MSA1LjcxIDAgMCAwIDAgMS4xODF2LjA2NWExLjA1NiAxLjA1NiAwIDAgMS0uODE1LjU1Wm0tLjQ5Ni0xLjk0N2MtLjIxNS41ODYtLjA0NSAxLjUwMS4zMyAxLjcxNi4yNy4xNTUuNTctLjExNS43OC0uMzg1YTYuMTI4IDYuMTI4IDAgMCAxIDAtMS4xOGMwLS4xNDYgMC0uMy4wMzEtLjQ1bC0xLjE0LjNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGNkQyQTJcIixcbiAgICBkOiBcIk0xNC4zOCA3LjU5NWExLjE0NiAxLjE0NiAwIDAgMC0uOTQgMS42MDFjLjUuOSAxLjYxMS0uMDggMi4zMDIgMCAuNzk1IDAgMS40NS44NCAyLjA5LjE1LjcxMS0uNzctLjMwNC0xLjUtMS4xLTEuODU2bC0yLjM1MS4xMDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMyMzFGMjBcIixcbiAgICBkOiBcIk0xNy4yNjggOS43MjdhMiAyIDAgMCAxLS43My0uMjA2IDIuMjA3IDIuMjA3IDAgMCAwLS43OTEtLjIyYy0uMjg3IDAtLjU3LjA2Mi0uODMuMTgtLjU2MS4xOTUtMS4xOTYuNDE2LTEuNTU3LS4yM2ExLjA4IDEuMDggMCAwIDEgMC0xLjA1IDEuMjgxIDEuMjgxIDAgMCAxIDEuMDAxLS42ODZsMi40MDYtLjEwNWMuNTkuMjUgMS4yNjYuNzA2IDEuMzgxIDEuMjM2YS45NTUuOTU1IDAgMCAxLS44OCAxLjA4Wm0tMS41MDEtLjYwNmMuMjk2LjAyNC41ODQuMTA0Ljg1LjIzNS40NS4xOS44MDYuMzM1IDEuMTY2LS4wNTVhLjY2NC42NjQgMCAwIDAgLjIwNS0uNjA1Yy0uMS0uNDYtLjczNS0uODgtMS4yNTYtMS4xbC0yLjMyNi4wOTRhMS4xMSAxLjExIDAgMCAwLS44NS41OS45MDYuOTA2IDAgMCAwIDAgLjg3NmMuMjg1LjUuNzk1LjMzNSAxLjM0LjE1LjI3NC0uMTIyLjU3LS4xODUuODctLjE4NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTE0LjI2NiA3LjU2Yy0uMDU1LTEuMjUgMi4zMzYtMS40MSAyLjYxNy0uMzYuMjggMS4wNS0yLjUwMiAxLjI5LTIuNjE3LjM2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0dvbGFuZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvR29vZ2xlRyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR29vZ2xlRyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19nb29nbGVfZycpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgZDogXCJNMTUuMzE5IDMuMjc4YzAtMS4xMzEtLjEwMi0yLjIyLS4yOS0zLjI2NEgwdjYuMTcyaDguNTg3Yy0uMzcgMS45OTUtMS40OTQgMy42ODUtMy4xODQgNC44MTZ2NC4wMDRoNS4xNTdjMy4wMTctMi43NzggNC43NTgtNi44NjkgNC43NTgtMTEuNzI4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICBkOiBcIk0xNC4zNDMgMTIuOTU2YzQuMzA4IDAgNy45Mi0xLjQzIDEwLjU2LTMuODY2bC01LjE1Ny00LjAwNGMtMS40MjkuOTU4LTMuMjU2IDEuNTIzLTUuNDAzIDEuNTIzLTQuMTU2IDAtNy42NzQtMi44MDYtOC45MjgtNi41NzhILjA4NHY0LjEzNGMyLjYyNSA1LjIxNSA4LjAyMSA4Ljc5IDE0LjI1OSA4Ljc5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICBkOiBcIk03LjAyOCAxMC4yNWE5LjU5IDkuNTkgMCAwIDEtLjUtMy4wMzIgOS41OSA5LjU5IDAgMCAxIC41LTMuMDMyVi4wNTJoLTUuMzNBMTUuOTUgMTUuOTUgMCAwIDAgMCA3LjIxOGMwIDIuNTc1LjYxNyA1LjAxMiAxLjY5NyA3LjE2Nmw1LjMzMS00LjEzNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdnJyksXG4gICAgZDogXCJNMTQuMzQzIDYuMzkyYzIuMzQyIDAgNC40NDYuODA1IDYuMSAyLjM4Nmw0LjU3Ni00LjU3NkMyMi4yNTYgMS42MjcgMTguNjQ0LjA0NiAxNC4zNDMuMDQ2IDguMTA1LjA0NiAyLjcwOSAzLjYyMi4wODMgOC44MzZsNS4zMzIgNC4xMzRjMS4yNTQtMy43NyA0Ljc3Mi02LjU3OCA4LjkyOC02LjU3OHpcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMTUuOTU1IDEzLjA4NylcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzQyODVGNFwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0uMDAxIDE1LjAwNmgxNS4zMThWLjAxNEguMDAxelwiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIilcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxLjYxMyAxOS4wMDMpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzNEE4NTNcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNLjA4NCAxMi45NTZoMjQuODE5Vi4wMzFILjA4NHpcIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSwgXCIpXCIpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCA4Ljc4NClcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2YnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdlJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZCQkMwNFwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0wIDE0LjM4NGg3LjAyOFYuMDUySDB6XCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdmJyksIFwiKVwiKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDEuNjEzKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnaCcpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2cnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRUE0MzM1XCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTS4wODQgMTIuOTdoMjQuOTM1Vi4wNDZILjA4NHpcIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2gnKSwgXCIpXCIpXG4gIH0pKSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR29vZ2xlRzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvSGFwcm94eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvSGFwcm94eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19oYXByb3h5Jyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgY2xpcFBhdGg6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIHN0cm9rZTogXCIjMDU0ODZEXCIsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTAsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMTIsXG4gICAgZDogXCJtMTYuMDUgMTMuMjM3LTMuMTEtMy42MTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIHN0cm9rZTogXCIjMDU0ODZEXCIsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTAsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMDYsXG4gICAgZDogXCJtNi4xMTcgMTAuNTI4IDIuNTA5IDMuNTEyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBzdHJva2U6IFwiIzA1NDg2RFwiLFxuICAgIHN0cm9rZU1pdGVybGltaXQ6IDEwLFxuICAgIHN0cm9rZVdpZHRoOiAwLjEyLFxuICAgIGQ6IFwibTE2LjA1IDEzLjIzNyAzLjExLTMuNjEyTTE5Ljg2MyAxNy4xNWwzLjcxMi0zLjExTTE5Ljg2MyAxNy4xNWwzLjcxMiAzLjMxMU0xOS4xNiAyNC41NzVsLTMuMTEtMy41MTFNMTIuOTQgMjQuNTc1bDMuMTEtMy41MTFNOC42MjUgMjAuMjZsMy41MTItMy4xMU04LjYyNSAxNC4wNGwzLjUxMiAzLjExTTE2LjA1IDEzLjIzOGwtNy40MjUuODAyTTE2LjA1IDEzLjIzOGw3LjUyNS44MDJNMTkuODYzIDE3LjE1bC0uNzAyLTcuNTI1TTE5Ljg2MyAxNy4xNWwtLjcwMiA3LjQyNU0yMy41NzUgMjAuNDYxbC03LjUyNS42MDJNOC42MjUgMjAuMjYxbDcuNDI1LjgwM00xMi45NCAyNC41NzVsLS44MDMtNy40MjVNMTIuOTQgOS42MjVsLS44MDMgNy41MjVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIHN0cm9rZTogXCIjMDU0ODZEXCIsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTAsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMDYsXG4gICAgZDogXCJtNS4xMTQgMTUuMDQzIDMuNTExLTEuMDAzTTkuMzI4IDcuMTE3bDMuNjEyIDIuNTA5TTEzLjc0MyA1LjUxMmwtLjgwMyA0LjExM00xMy43NDMgNS41MTJsNS40MTggNC4xMTNNMTguMzU4IDUuNTEybC44MDMgNC4xMTNNMjIuNzczIDcuMTE3IDE5LjE2IDkuNjI2TTI1Ljk4MyAxMC41MjhsLTYuODIyLS45MDNNMjMuNTc1IDE0LjA0bDIuNDA4LTMuNTEyTTIzLjU3NSAxNC4wNGwzLjQxMiAxLjAwM00yMy41NzUgMTQuMDRsMy40MTIgNS4yMTdNMTguMzU4IDUuNTEyIDEyLjk0IDkuNjI1TTIzLjU3NiAxNC4wNGwtLjgwMy02LjkyM00yMy41NzUgMjAuNDYybDMuNDEyLTEuMjA0TTIzLjU3NSAyMC40NjJsMy40MTItNS40MThNMjMuNTc1IDIwLjQ2MWwyLjQwOCAzLjMxMk0yMy41NzYgMjAuNDYxbC0uODAzIDYuNzIzTTE5LjE2IDI0LjU3NWwzLjYxMyAyLjYwOU0xOS4xNiAyNC41NzVsNi44MjMtLjgwMk0xOS4xNiAyNC41NzVsLS44MDIgNC4yMTRNMTkuMTYgMjQuNTc1bC01LjQxNyA0LjIxNE0xMi45NCAyNC41NzVsLjgwMyA0LjIxNE0xMi45NCAyNC41NzVsNS40MTggNC4yMTRNMTIuOTQgMjQuNTc1bC0zLjYxMiAyLjYwOU0xMi45NCAyNC41NzVsLTYuODIzLS44MDJNOC42MjYgMjAuMjYxbC0yLjUwOSAzLjUxMk04LjYyNSAyMC4yNjFsLjcwMyA2LjkyM004LjYyNSAyMC4yNmwtMy41MTEtMS4wMDJNOC42MjUgMTQuMDRsLTMuNTExIDUuMjE3TTguNjI1IDIwLjI2bC0zLjUxMS01LjIxN005LjMyOCA3LjExN2wtLjcwMyA2LjkyM002LjExNyAxMC41MjhsNi44MjMtLjkwM1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgc3Ryb2tlOiBcIiMwODNENUZcIixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMCxcbiAgICBzdHJva2VXaWR0aDogMC4wNSxcbiAgICBkOiBcIk05LjMyNyA3LjExNyA2LjcyIDUuODEzTTkuMzI4IDcuMTE3bC0uMjAxLTIuOTFNMTMuNzQyIDUuNTEyIDkuMTI3IDQuMjA3TTEzLjc0MiA1LjUxMmwtMi4wMDYtMi41MDlNMTMuNzQzIDUuNTEybC44MDItMi45MU05LjMyOCA3LjExN2wyLjQwOC00LjExNE0xOC4zNTggNS41MTJsLTMuODEzLTIuOTFNMTguMzU4IDUuNTEybC0uODAzLTMuMDFNMTMuNzQzIDUuNTEybDMuODEyLTMuMDFNMTguMzU4IDUuNTEybDIuMDA3LTIuNTA5TTIyLjc3MyA3LjExN2wtMi40MDgtNC4xMTRNMjIuNzczIDcuMTE3bC4zMDEtMi45MU0xOC4zNTggNS41MTJsNC43MTYtMS4zMDVNMjIuNzczIDcuMTE3bDIuNzA5LTEuNDA1TTIyLjc3MyA3LjExN2w0LjcxNi43MDNNMjUuOTgzIDEwLjUyOGwxLjUwNS0yLjcwOU0yNS45ODQgMTAuNTI4bC0uNTAyLTQuODE2TTI1Ljk4MyAxMC41MjhsMy4xMS0uM00yNS45ODMgMTAuNTI4bDQuMjE0IDIuMzA4TTI2Ljk4NyAxNS4wNDRsMi4xMDctNC44MTdNMjYuOTg3IDE1LjA0M2wzLjIxLTIuMjA3TTI2Ljk4NyAxNS4wNDNsMy42MTIuNzAzTTI2Ljk4NyAxOS4yNThsMy42MTItMy41MTJNMjYuOTg3IDE5LjI1OGwzLjcxMi0uNzAzTTI2Ljk4NyAxNS4wNDNsMy43MTIgMy41MTJNMjYuOTg3IDE5LjI1OGwzLjExIDIuMTA3TTI1Ljk4MyAyMy43NzNsNC4xMTQtMi40MDlNMjUuOTgzIDIzLjc3M2wzLjExLjNNMjYuOTg3IDE5LjI1OGwyLjEwNyA0LjgxNk0yNS45ODMgMjMuNzczbDEuNTA1IDIuNzA5TTI1Ljk4NCAyMy43NzNsLS41MDIgNC43MTVNMjUuNDgyIDI4LjQ4OGwtMi43MS0xLjMwNE0yMi43NzMgMjcuMTg0bC4yIDIuOTFNMjIuNzczIDI3LjE4NGw0LjcxNi0uNzAzTTIyLjc3MyAyNy4xODRsLTIuNDA4IDQuMTE0TTE4LjM1OCAyOC43OWwyLjAwNyAyLjUwOE0xOC4zNTggMjguNzlsNC42MTUgMS4zMDRNMTguMzU4IDI4Ljc5bC0uODAzIDMuMDFNMTguMzU4IDI4Ljc5bC0zLjgxMyAzLjAxTTEzLjc0MyAyOC43OWwuODAyIDMuMDFNMTMuNzQzIDI4Ljc5bDMuODEyIDMuMDFNMTMuNzQyIDI4Ljc5bC0yLjAwNiAyLjUwOE05LjMyOCAyNy4xODRsMi40MDggNC4xMTRNMTMuNzQyIDI4Ljc5bC00LjYxNSAxLjQwNE05LjMyOCAyNy4xODRsLS4yMDEgMy4wMU05LjMyOCAyNy4xODRsLTIuNzEgMS40MDRNNi4xMTcgMjMuNzczbC41MDIgNC44MTZNOS4zMjggMjcuMTg0bC00LjcxNi0uNzAzTTYuMTE3IDIzLjc3M2wtMS41MDUgMi43MDlNNi4xMTcgMjMuNzczbC0zLjExLjNNNi4xMTcgMjMuNzczbC00LjIxNC0yLjQwOU01LjExNCAxOS4yNThsLTMuMjEgMi4xMDdNNS4xMTQgMTkuMjU4IDEuNCAxOC41NTVNNS4xMTQgMTkuMjU4bC0yLjEwNyA0LjgxNk01LjExNCAxNS4wNDMgMS40IDE4LjU1NU01LjExNCAxOS4yNTggMS40IDE1Ljc0Nk01LjExNCAxNS4wNDNsLTMuMTEtMi4xMDZNNS4xMTQgMTUuMDQzbC0zLjcxMy43MDNNNS4xMTQgMTUuMDQ0bC0yLjAwNy00LjgxN002LjExNyAxMC41MjhsLTMuMDEtLjNNNi4xMTcgMTAuNTI4bC00LjExNCAyLjQwOE02LjExNyAxMC41MjggNC43MTIgNy45Mk02LjExNyAxMC41MjhsLjYwMi00LjcxNU05LjMyOCA3LjExN2wtNC42MTYuODAzXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDZEQThcIixcbiAgICBkOiBcIk0xMy45NDMgMTUuMjQ0aC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJaTTE3Ljc1NiAxMS4zMzFoLTMuNjEydjMuNTkyaDMuNjEydi0zLjU5MlpNMTcuNzU2IDE5LjE1N2gtMy42MTJ2My41OTJoMy42MTJ2LTMuNTkyWk0yMS42NjkgMTUuMjQ0aC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMyRjc3QkNcIixcbiAgICBkOiBcIk0yMC4zNjUgOC40MjFoLTIuNTA5VjEwLjloMi41MDlWOC40MlpNMTQuMTQ0IDguMzIxaC0yLjUwOXYyLjQ3OGgyLjUwOVY4LjMyMVpNOS44MyAxMi44MzZINy4zMnYyLjQ3OEg5Ljgzdi0yLjQ3OFpNOS44MyAxOC45NTZINy4zMnYyLjQ3OUg5Ljgzdi0yLjQ3OVpNMjQuNjc5IDE4Ljk1NkgyMi4xN3YyLjQ3OWgyLjUwOXYtMi40NzlaTTI0LjY3OSAxMi43MzZIMjIuMTd2Mi40NzhoMi41MDl2LTIuNDc4WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMTM5QkQ3XCIsXG4gICAgZDogXCJNNi45MiA5LjYyNUg1LjMxNHYxLjY3Nkg2LjkyVjkuNjI1Wk0xMC4xMyA2LjIxNEg4LjUyNnYxLjY3NWgxLjYwNlY2LjIxNFpNMTQuNDQ1IDQuNjA5aC0xLjYwNnYxLjY3NWgxLjYwNlY0LjYxWk01LjkxNiAxNC4xNEg0LjMxMXYxLjY3NmgxLjYwNVYxNC4xNFpNMjYuNzg2IDkuODI2SDI1LjA4djEuNjQ2aDEuNzA2VjkuODI2Wk0yMy41NzUgNi40MTVIMjEuODdWOC4wNmgxLjcwNVY2LjQxNVpNMTkuMjYgNC44MWgtMS43MDV2MS42NDVoMS43MDZWNC44MDlaTTI3LjY4OSAxNC40NDFoLTEuNjA1djEuNjQ2aDEuNjA1VjE0LjQ0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMkY3N0JDXCIsXG4gICAgZDogXCJNMTQuMTQ0IDIzLjI3aC0yLjUwOXYyLjQ3OWgyLjUwOXYtMi40NzhaTTIwLjI2NCAyMy4yN2gtMi41MDh2Mi40NzloMi41MDh2LTIuNDc4WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMTM5QkQ3XCIsXG4gICAgZDogXCJNMjYuNjg1IDIyLjc3SDI1LjA4djEuNjc1aDEuNjA1di0xLjY3NlpNMjMuMzc1IDI2LjA4SDIxLjc3djEuNjc2aDEuNjA1VjI2LjA4Wk0xOS4wNiAyNy42ODZoLTEuNjA1djEuNjc1aDEuNjA1di0xLjY3NVpNMjcuNTg5IDE4LjI1NGgtMS42MDZ2MS42NzZoMS42MDZ2LTEuNjc2Wk02LjkyIDIyLjk3SDUuMjE0djEuNjQ2SDYuOTJWMjIuOTdaTTEwLjAzIDI2LjM4MUg4LjMyNXYxLjY0NmgxLjcwNVYyNi4zOFpNMTQuNDQ1IDI3Ljk4N2gtMS43MDZ2MS42NDVoMS43MDZ2LTEuNjQ1Wk01LjgxNiAxOC4zNTVINC4yMVYyMGgxLjYwNnYtMS42NDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwM0E5REFcIixcbiAgICBkOiBcIk03LjEyIDUuMzExaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMS45MDMgMTUuMjQ0SDF2LjkzM2guOTAzdi0uOTMzWk0yNS43ODIgNS4yMWgtLjkwM3YuOTM0aC45MDNWNS4yMVpNMi41MDUgMTIuMzM1aC0uOTAzdi45MzNoLjkwM3YtLjkzNFpNMTIuMTM3IDIuNTAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMy41MDggOS43MjZoLS45MDN2LjkzM2guOTAzdi0uOTMzWk01LjExMyA3LjMxOEg0LjIxdi45MzNoLjkwM3YtLjkzM1pNOS42MjkgMy44MDZoLS45MDN2LjkwM2guOTAzdi0uOTAzWk0xNS4wNDcgMi4xaC0uOTAzdi45MDNoLjkwM1YyLjFaTTIzLjM3NCAzLjYwNWgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTI5LjI5NSA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTMwLjQ5OCAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0Wk0yNy42OSA3LjMxOGgtLjkwNHYuOTMzaC45MDN2LS45MzNaTTMwLjkgMTUuMTQ0aC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMTcuODU2IDJoLS45MDN2LjkzM2guOTAzVjJaTTIwLjY2NSAyLjYwMmgtLjkwM3YuOTMzaC45MDN2LS45MzNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwM0E5REFcIixcbiAgICBkOiBcIk03LjEyIDUuMzExaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMS45MDMgMTUuMjQ0SDF2LjkzM2guOTAzdi0uOTMzWk0yNS43ODIgNS4yMWgtLjkwM3YuOTM0aC45MDNWNS4yMVpNMi41MDUgMTIuMzM1aC0uOTAzdi45MzNoLjkwM3YtLjkzNFpNMTIuMTM3IDIuNTAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMy41MDggOS43MjZoLS45MDN2LjkzM2guOTAzdi0uOTMzWk01LjExMyA3LjMxOEg0LjIxdi45MzNoLjkwM3YtLjkzM1pNOS42MjkgMy44MDZoLS45MDN2LjkwM2guOTAzdi0uOTAzWk0xNS4wNDcgMi4xaC0uOTAzdi45MDNoLjkwM1YyLjFaTTIzLjM3NCAzLjYwNWgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTI5LjI5NSA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTMwLjQ5OCAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0Wk0yNy42OSA3LjMxOGgtLjkwNHYuOTMzaC45MDN2LS45MzNaTTMwLjkgMTUuMTQ0aC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMTcuODU2IDJoLS45MDN2LjkzM2guOTAzVjJaTTIwLjY2NSAyLjYwMmgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTI1LjY4MiAyNy44ODZoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0zMSAxNy45NTNoLS45MDN2LjkzM0gzMXYtLjkzM1pNNy4xMiAyNy45ODdoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0zMC4zOTggMjAuNzYzaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMjAuNjY1IDMwLjU5NmgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTI5LjI5NSAyMy4zNzFoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0yNy42OSAyNS43OGgtLjkwNHYuOTMyaC45MDN2LS45MzNaTTIzLjI3NCAyOS43OTNoLS45MDN2LjkwMmguOTAzdi0uOTAyWk0xNy43NTYgMzEuNDk4aC0uOTAzdi45MDNoLjkwM3YtLjkwM1pNOS40MjggMjkuNDkyaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMy41MDggMjMuNDcyaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMi4zMDQgMjAuODYzaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNNS4wMTMgMjUuODhINC4xMXYuOTMzaC45MDN2LS45MzNaTTEuOTAzIDE3Ljk1M0gxdi45MzNoLjkwM3YtLjkzM1pNMTQuOTQ3IDMxLjQ5OGgtLjkwM3YuOTMzaC45MDJ2LS45MzNaTTEyLjEzNyAzMC41OTZoLS45MDN2LjkzM2guOTAzdi0uOTMzWlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImNsaXBQYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNmZmZcIixcbiAgICBkOiBcIk0wIDBoMzJ2MzJIMFYwWlwiXG4gIH0pKSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvSGFwcm94eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvSWJtID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29JYm0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29faWJtJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgeDE6IFwiOC4wMDUlXCIsXG4gICAgeDI6IFwiNTMuMzMlXCIsXG4gICAgeTE6IFwiNzkuMzIzJVwiLFxuICAgIHkyOiBcIjc5LjMyNCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMzQkRBREVcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMC40NzYlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMzNkNFRTFcIixcbiAgICBzdG9wT3BhY2l0eTogMC4zODNcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMjFBMkVGXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgeDE6IFwiMTkuNDk2JVwiLFxuICAgIHgyOiBcIjcxLjMwOSVcIixcbiAgICB5MTogXCI4My4zNDQlXCIsXG4gICAgeTI6IFwiMTcuNjM4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzIwN0ZGQVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzZFQUZGMVwiLFxuICAgIHN0b3BPcGFjaXR5OiAwXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYycpLFxuICAgIHgxOiBcIjIxLjkwOSVcIixcbiAgICB4MjogXCIyMS45MDklXCIsXG4gICAgeTE6IFwiOTYuMzE0JVwiLFxuICAgIHkyOiBcIjI5LjQ1NCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0MkMxRTZcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI1Ny4wNzYlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2RkI5RUZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI4Ni43MTYlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2MENCRTdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM1Q0NGRTVcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2QnKSxcbiAgICB4MTogXCI5Ni4yMDUlXCIsXG4gICAgeDI6IFwiLTEuMTcyJVwiLFxuICAgIHkxOiBcIjEyLjY2NyVcIixcbiAgICB5MjogXCItMjIuMjUyJVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzZGQjlFRlwiLFxuICAgIHN0b3BPcGFjaXR5OiAwXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjIyLjQyNyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzM4RDJFMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjkxLjIwMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzZBQkZFQ1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzVDQ0ZFNVwiLFxuICAgIHN0b3BPcGFjaXR5OiAwXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIHgxOiBcIjkuNDA4JVwiLFxuICAgIHgyOiBcIjgwLjU4OSVcIixcbiAgICB5MTogXCI4Ny43NjQlXCIsXG4gICAgeTI6IFwiODMuMTM4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzEyNkNGRFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzIxQTFFRlwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzM4RDJFMFwiLFxuICAgIGQ6IFwiTTQuMjYyIDEzLjEyMmEuNjA0LjYwNCAwIDAgMS0uMy0uMDhsLTIuODQ0LTEuNjI1YS42MTcuNjE3IDAgMCAxLS4yOTUtLjczNC42MDguNjA4IDAgMCAxIC44NjgtLjMxNWwyLjg0MyAxLjYyNWMuMjkuMTU5LjQwNS41MTQuMjYxLjgxYS42MDMuNjAzIDAgMCAxLS41MzMuMzJabTQuOTE0LTQuODY0YS42MDMuNjAzIDAgMCAxLS41MjItLjI5OEw3LjAxMiA1LjE0NGEuNjE1LjYxNSAwIDAgMSAuMTE1LS43ODIuNjA2LjYwNiAwIDAgMSAuOTEuMTU3bDEuNjQgMi44MTNhLjYxNy42MTcgMCAwIDEtLjE1OC44MTljLS4xLjA3LS4yMi4xMDctLjM0My4xMDdabTYuMTA3LTIuNDE2VjIuNjM1YS42MjQuNjI0IDAgMCAxIC41NzUtLjYzNC42MDUuNjA1IDAgMCAxIC40NDMuMTY0LjU5My41OTMgMCAwIDEgLjE4Ni40MzF2My4yODVhLjU5My41OTMgMCAwIDEtLjE4Ni40My42MDUuNjA1IDAgMCAxLS40NDMuMTY1LjYyNC42MjQgMCAwIDEtLjU3NS0uNjM0Wm03LjMxMiAyLjQxNmEuNjA0LjYwNCAwIDAgMS0uMzQzLS4xMDcuNjE3LjYxNyAwIDAgMS0uMTU5LS44MmwxLjY0LTIuODEyYS42MDIuNjAyIDAgMCAxIC45MTEtLjE1N2MuMjIzLjIuMjcxLjUyOC4xMTUuNzgyTDIzLjExNyA3Ljk2YS42MDMuNjAzIDAgMCAxLS41MjIuMjk4Wm00LjkxNCA0Ljg2NGEuNjAyLjYwMiAwIDAgMS0uNTM0LS4zMTkuNjE2LjYxNiAwIDAgMSAuMjYyLS44MWwyLjgxOC0xLjYxMWEuNjI2LjYyNiAwIDAgMSAuNzgzLjExMi41OTIuNTkyIDAgMCAxLS4xNTYuOTA2bC0yLjg3MyAxLjY0M2EuNjA0LjYwNCAwIDAgMS0uMy4wOFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJtMTYuNTM2IDE5LjY0NS0xLjIwNC0uMDA5Yy4wMjYtMy4zNzcgMi4xNDYtNi4zOTEgNS4zMzctNy41ODVhOC4zMDggOC4zMDggMCAwIDEgOS4wNjggMi4xOTdsLS44OTcuNzk1YTcuMDk3IDcuMDk3IDAgMCAwLTcuNzQ1LTEuODc2Yy0yLjcyNiAxLjAxOS00LjUzNyAzLjU5My00LjU1OSA2LjQ3OFpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIiksXG4gICAgZDogXCJNLjAyOSAyMC45MDljLjAyMi0zLjM1NCAyLjQ3NS02LjIwOCA1LjgxNS02Ljc2NGwuMjAxIDEuMTc2Yy0yLjc2NC40Ni00Ljc5NCAyLjgyLTQuODEyIDUuNTk2TC4wMjkgMjAuOTFaXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTguMjQ2IDI0LjczN2ExMC42MjUgMTAuNjI1IDAgMCAxIDAtMTUuMTMxYzQuMjE5LTQuMTc4IDExLjA2LTQuMTc4IDE1LjI3OSAwYTEwLjg5IDEwLjg5IDAgMCAxIDEuMzg0IDEuNjc4bC0xLjAwNC42NTdhOS41MTcgOS41MTcgMCAwIDAtMS4yMzEtMS40OTJjLTMuNzUtMy43MTMtOS44MjgtMy43MTMtMTMuNTc3IDBhOS40NDIgOS40NDIgMCAwIDAgMCAxMy40NDVsLS44NTEuODQzWlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCAyKVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdkJyksIFwiKVwiKSxcbiAgICBkOiBcIk01LjgzNiAxMy4yMzRjLjQwNC0xLjMzMiAxLjMzLTIuNTYgMi40MS0zLjYyOCA0LjIxOS00LjE3OCAxMS4wNi00LjE3OCAxNS4yNzkgMGExMC44OSAxMC44OSAwIDAgMSAxLjM4NCAxLjY3OGwtMS4wMDQuNjU3YTkuNTE3IDkuNTE3IDAgMCAwLTEuMjMxLTEuNDkyYy0zLjc1LTMuNzEzLTkuODI4LTMuNzEzLTEzLjU3NyAwYTkuNDc0IDkuNDc0IDAgMCAwLTIuMDc0IDMuMDZjLTEuNDUyIDMuNDUtMi4zNTggMy41OTMtMS4xODctLjI3NVpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIiksXG4gICAgZDogXCJNMjMuNTI0IDI3Ljg3SDYuOTZhNy4wMTIgNy4wMTIgMCAwIDEtNC45MjItMi4wNTlBNi44NzYgNi44NzYgMCAwIDEgLjAyOSAyMC45MWwxLjIwNC4wMDlhNS42OSA1LjY5IDAgMCAwIDEuNjYgNC4wNTUgNS44MDIgNS44MDIgMCAwIDAgNC4wNzEgMS43MDVoMTYuNjE4YzIuNzguMDAyIDUuMzAyLTEuNjE2IDYuNDM4LTQuMTNhNi45MjkgNi45MjkgMCAwIDAtMS4xOC03LjUwNWwuODk3LS43OTVhOC4xMTIgOC4xMTIgMCAwIDEgMS4zODQgOC43ODVjLTEuMzI5IDIuOTQzLTQuMjc5IDQuODM3LTcuNTM0IDQuODM4aC0uMDYzWlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCAyKVwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29JYm07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0libU1vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0libU1vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJtLjA0NyAyMi45MDkgMS4xODYuMDA5YTUuNjkgNS42OSAwIDAgMCAxLjY2IDQuMDU1IDUuODAyIDUuODAyIDAgMCAwIDQuMDcxIDEuNzA1aDE2LjYxOGMyLjc4LjAwMiA1LjMwMi0xLjYxNiA2LjQzOC00LjEzYTYuOTI5IDYuOTI5IDAgMCAwLTEuMTgtNy41MDVsLjg5Ny0uNzk1YTguMTEyIDguMTEyIDAgMCAxIDEuMzg0IDguNzg1Yy0xLjMyOSAyLjk0My00LjI3OSA0LjgzNy03LjUzNCA0LjgzOEg2Ljk2YTcuMDEyIDcuMDEyIDAgMCAxLTQuOTIyLTIuMDZBNi44NzYgNi44NzYgMCAwIDEgLjAyOSAyMi45MWguMDE4LS4wMThjLjAxNy0yLjcxIDEuNjItNS4wOTEgMy45OTctNi4yLjExNC0uMDU0LjMyLjI5LjYxOSAxLjAzYTUuNzEgNS43MSAwIDAgMC0zLjQxMiA1LjE4bC0xLjE4Ni0uMDFabTQuMjE1LTkuNzg3YS42MDQuNjA0IDAgMCAxLS4zLS4wOGwtMi44NDQtMS42MjVhLjYxNy42MTcgMCAwIDEtLjI5NS0uNzM0LjYwOC42MDggMCAwIDEgLjg2OC0uMzE1bDIuODQzIDEuNjI1Yy4yOS4xNTkuNDA1LjUxNC4yNjEuODFhLjYwMy42MDMgMCAwIDEtLjUzMy4zMlptNC45MTQtNC44NjRhLjYwMy42MDMgMCAwIDEtLjUyMi0uMjk4TDcuMDEyIDUuMTQ0YS42MTUuNjE1IDAgMCAxIC4xMTUtLjc4Mi42MDYuNjA2IDAgMCAxIC45MS4xNTdsMS42NCAyLjgxM2EuNjE3LjYxNyAwIDAgMS0uMTU4LjgxOWMtLjEuMDctLjIyLjEwNy0uMzQzLjEwN1ptNi4xMDctMi40MTZWMi42MzVhLjYyNC42MjQgMCAwIDEgLjU3NS0uNjM0LjYwNS42MDUgMCAwIDEgLjQ0My4xNjQuNTkzLjU5MyAwIDAgMSAuMTg2LjQzMXYzLjI4NWEuNTkzLjU5MyAwIDAgMS0uMTg2LjQzLjYwNS42MDUgMCAwIDEtLjQ0My4xNjUuNjI0LjYyNCAwIDAgMS0uNTc1LS42MzRabTcuMzEyIDIuNDE2YS42MDQuNjA0IDAgMCAxLS4zNDMtLjEwNy42MTcuNjE3IDAgMCAxLS4xNTktLjgybDEuNjQtMi44MTJhLjYwMi42MDIgMCAwIDEgLjkxMS0uMTU3Yy4yMjMuMi4yNzEuNTI4LjExNS43ODJMMjMuMTE3IDcuOTZhLjYwMy42MDMgMCAwIDEtLjUyMi4yOThabTQuOTE0IDQuODY0YS42MDIuNjAyIDAgMCAxLS41MzQtLjMxOS42MTYuNjE2IDAgMCAxIC4yNjItLjgxbDIuODE4LTEuNjExYS42MjYuNjI2IDAgMCAxIC43ODMuMTEyLjU5Mi41OTIgMCAwIDEtLjE1Ni45MDZsLTIuODczIDEuNjQzYS42MDQuNjA0IDAgMCAxLS4zLjA4Wk0xNi4zNjYgMTkuNzhIMTZhMi4zMjIgMi4zMjIgMCAwIDEtLjMwMiAwYy0uMDktLjAxMS0uMTUyLjA1LS4wODYtLjE5NmE4LjIwNCA4LjIwNCAwIDAgMSA1LjA1Ny01LjUzMyA4LjMwOCA4LjMwOCAwIDAgMSA5LjA2OCAyLjE5N2wtLjg5Ny43OTVhNy4wOTcgNy4wOTcgMCAwIDAtNy43NDUtMS44NzYgNy4wMDkgNy4wMDkgMCAwIDAtNC4yODggNC42MTNjLS4xMTUuMzk5LS4xMTUuMzk5IDAgMGgtLjQ0Wk02LjE1NCAyMy44MjZhMTAuNjI2IDEwLjYyNiAwIDAgMSAyLjA5Mi0xMi4yMmM0LjIxOS00LjE3OCAxMS4wNi00LjE3OCAxNS4yNzkgMGwtLjg1MS44NDNjLTMuNzUtMy43MTMtOS44MjgtMy43MTMtMTMuNTc3IDBBOS40NDIgOS40NDIgMCAwIDAgNy4yNjQgMjMuMzZhNi45OSA2Ljk5IDAgMCAwLS40MTguMTcybC0uMjEyLjA5NC0uMTYyLjA3Ny0uMDk0LjAzLS4wOS4wMzljLjY0OC0uMjgyLjk2NS0uNDIuOTUtLjQxMi0uMDI2LjAxNS0xLjA3My40ODktMS4wODQuNDY2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0libU1vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0thZmthID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29LYWZrYShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjU2NSAxNy42MjNjLTEuMTczIDAtMi4yMjUuNTItMi45NDUgMS4zMzdsLTEuODQ1LTEuMzA2Yy4xOTYtLjU0LjMwOS0xLjExOC4zMDktMS43MjQgMC0uNTk2LS4xMDktMS4xNjUtLjI5OC0xLjY5NmwxLjg0LTEuMjkzYTMuOTE0IDMuOTE0IDAgMCAwIDIuOTM5IDEuMzMxIDMuOTMgMy45MyAwIDAgMCAzLjkyNi0zLjkyNiAzLjkzIDMuOTMgMCAwIDAtMy45MjYtMy45MjYgMy45MyAzLjkzIDAgMCAwLTMuOTI2IDMuOTI2YzAgLjM4Ny4wNTguNzYxLjE2MyAxLjExNWwtMS44NDIgMS4yOTNhNS4wNjggNS4wNjggMCAwIDAtMy4xNC0xLjgyNVY4LjcxYTMuOTMyIDMuOTMyIDAgMCAwIDMuMTE5LTMuODQyQTMuOTMgMy45MyAwIDAgMCAxMi4wMTIuOTQxYTMuOTMgMy45MyAwIDAgMC0zLjkyNiAzLjkyNiAzLjkzIDMuOTMgMCAwIDAgMy4wNDggMy44MjR2Mi4yNDlhNS4wNzUgNS4wNzUgMCAwIDAtNC4xOTMgNC45OSA1LjA3NSA1LjA3NSAwIDAgMCA0LjIyOSA0Ljk5NVYyMy4zYTMuOTMxIDMuOTMxIDAgMCAwLTMuMDg0IDMuODMzIDMuOTMgMy45MyAwIDAgMCAzLjkyNiAzLjkyNiAzLjkzIDMuOTMgMCAwIDAgMy45MjctMy45MjYgMy45MzEgMy45MzEgMCAwIDAtMy4wODQtMy44MzN2LTIuMzc1YTUuMDcgNS4wNyAwIDAgMCAzLjA4Ny0xLjc5NWwxLjg1NyAxLjMxNGMtLjEwMy4zNTEtLjE2LjcyMS0uMTYgMS4xMDVhMy45MyAzLjkzIDAgMCAwIDMuOTI2IDMuOTI2IDMuOTMgMy45MyAwIDAgMCAzLjkyNi0zLjkyNiAzLjkzIDMuOTMgMCAwIDAtMy45MjYtMy45MjZabTAtOS4xOGMxLjA1IDAgMS45MDMuODUzIDEuOTAzIDEuOTAzcy0uODU0IDEuOTAzLTEuOTAzIDEuOTAzYTEuOTA2IDEuOTA2IDAgMCAxLTEuOTA0LTEuOTAzYzAtMS4wNS44NTQtMS45MDQgMS45MDQtMS45MDRaTTEwLjEwOSA0Ljg2NmMwLTEuMDUuODU0LTEuOTAzIDEuOTAzLTEuOTAzIDEuMDUgMCAxLjkwNC44NTQgMS45MDQgMS45MDMgMCAxLjA1LS44NTQgMS45MDQtMS45MDQgMS45MDRhMS45MDYgMS45MDYgMCAwIDEtMS45MDMtMS45MDRabTMuODA3IDIyLjI2NmMwIDEuMDUtLjg1NCAxLjkwMy0xLjkwNCAxLjkwM2ExLjkwNiAxLjkwNiAwIDAgMS0xLjkwMy0xLjkwM2MwLTEuMDUuODU0LTEuOTA0IDEuOTAzLTEuOTA0IDEuMDUgMCAxLjkwNC44NTQgMS45MDQgMS45MDRabS0xLjkwNC04LjU0OGEyLjY1OCAyLjY1OCAwIDAgMS0yLjY1NS0yLjY1NSAyLjY1OCAyLjY1OCAwIDAgMSAyLjY1NS0yLjY1NSAyLjY1OCAyLjY1OCAwIDAgMSAyLjY1NSAyLjY1NSAyLjY1OCAyLjY1OCAwIDAgMS0yLjY1NSAyLjY1NVptOS41NTMgNC44NjdhMS45MDYgMS45MDYgMCAwIDEtMS45MDQtMS45MDNjMC0xLjA1Ljg1NC0xLjkwNCAxLjkwNC0xLjkwNCAxLjA1IDAgMS45MDMuODU0IDEuOTAzIDEuOTA0IDAgMS4wNS0uODU0IDEuOTAzLTEuOTAzIDEuOTAzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0thZmthOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29LaWJhbmEgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0tpYmFuYShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA0RTk4XCIsXG4gICAgZDogXCJNNCAwdjI4Ljc4OUwyOC45MzUuMDE3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAxMnYxNi43ODlsMTEuOTA2LTEzLjczOEEyNC43MjEgMjQuNzIxIDAgMCAwIDQgMTJcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0xOC40NzkgMTYuNjY0IDYuMjY4IDMwLjc1NGwtMS4wNzQgMS4yMzdoMjMuMTkyYy0xLjI1Mi02LjI5Mi00Ljg4My0xMS43MTktOS45MDctMTUuMzI3XCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0tpYmFuYTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvS3ViZXJuZXRlcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvS3ViZXJuZXRlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMyNkNFNVwiLFxuICAgIGQ6IFwiTTE1Ljg5LjAwM2EyLjE0IDIuMTQgMCAwIDEgMS4wMy4yMDZsMTEuMTI3IDUuMzA0YTIuMTEgMi4xMSAwIDAgMSAxLjE1IDEuNDI5bDIuNzUgMTEuOTIxYTIuMDkgMi4wOSAwIDAgMS0uNDEyIDEuNzgzbC03LjY5NyA5LjU2Yy0uNDA0LjUtMS4wMTYuNzkyLTEuNjYzLjc5MUw5LjgyNyAzMWMtLjY0OCAwLTEuMjYtLjI5Mi0xLjY2NC0uNzkzbC03LjctOS41NThhMi4xMDcgMi4xMDcgMCAwIDEtLjQxLTEuNzgzTDIuNzk4IDYuOTQ1YTIuMTEgMi4xMSAwIDAgMSAxLjE1MS0xLjQzTDE1LjA3NC4yMWMuMjU1LS4xMjIuNTMyLS4xOTIuODE1LS4yMDZ6TTE2IDQuMDZjLS4zNjggMC0uNjY3LjMzLS42NjcuNzM4bC4wMDIuMDE5YzAgLjA1NS0uMDAzLjEyMi0uMDAyLjE3LjAxLjIzNi4wNi40MTYuMDkxLjYzMi4wNTcuNDY0LjEwMy44NDkuMDc0IDEuMjA2LS4wMjguMTM1LS4xMjcuMjU4LS4yMTYuMzQ0bC0uMDE1LjI4MWE4LjU2OSA4LjU2OSAwIDAgMC01LjU1NSAyLjY2NiA5Ljk4IDkuOTggMCAwIDEtLjI0LS4xN2MtLjEyLjAxNi0uMjQuMDUzLS4zOTYtLjAzOC0uMjk4LS4yLS41Ny0uNDc3LS44OTgtLjgxLS4xNS0uMTYtLjI2LS4zMS0uNDM4LS40NjQtLjA0LS4wMzUtLjEwMy0uMDgyLS4xNDgtLjExOGEuNzkzLjc5MyAwIDAgMC0uNDY0LS4xNzUuNjQyLjY0MiAwIDAgMC0uNTMuMjM0Yy0uMjMuMjg4LS4xNTYuNzI2LjE2My45OGwuMDEuMDA4Yy4wNDQuMDM1LjA5OC4wOC4xMzguMTEuMTkuMTQuMzYzLjIxMi41NTIuMzIzLjM5OC4yNDYuNzI5LjQ1Ljk5LjY5NS4xMDMuMTA4LjEyLjMuMTM0LjM4M2wuMjE0LjE5YTguNTkyIDguNTkyIDAgMCAwLTEuMzYgNS45OThsLS4yNzguMDhjLS4wNzQuMDk2LS4xNzcuMjQ1LS4yODYuMjktLjM0My4xMDctLjcyOC4xNDctMS4xOTQuMTk1LS4yMTguMDE4LS40MDcuMDA4LS42MzkuMDUxLS4wNS4wMS0uMTIyLjAyOS0uMTc3LjA0MmwtLjAwNi4wMDEtLjAxLjAwM2MtLjM5My4wOTUtLjY0NS40NTUtLjU2NC44MS4wODIuMzU1LjQ2NS41Ny44Ni40ODVsLjAxLS4wMDEuMDEzLS4wMDRjLjA1NS0uMDEyLjEyNC0uMDI2LjE3Mi0uMDM5LjIyOC0uMDYuMzkzLS4xNS41OTctLjIyOC40NC0uMTU4LjgwNi0uMjkgMS4xNjEtLjM0MS4xNDktLjAxMi4zMDUuMDkxLjM4My4xMzVsLjI5LS4wNWE4LjY1NCA4LjY1NCAwIDAgMCAzLjg0IDQuNzg3bC0uMTIuMjljLjA0My4xMTMuMDkxLjI2NS4wNTkuMzc2LS4xMy4zMzQtLjM1LjY4OC0uNjAzIDEuMDgxLS4xMjIuMTgyLS4yNDcuMzI0LS4zNTcuNTMyLS4wMjYuMDUtLjA2LjEyNi0uMDg2LjE3OS0uMTcuMzY1LS4wNDUuNzg2LjI4NC45NDQuMzMuMTYuNzQxLS4wMDguOTE5LS4zNzVsLjAwMS0uMDAxdi0uMDAyYy4wMjUtLjA1MS4wNjEtLjEyLjA4My0uMTY5LjA5NC0uMjE1LjEyNS0uNC4xOTItLjYwOS4xNzYtLjQ0Mi4yNzMtLjkwNS41MTUtMS4xOTQuMDY3LS4wOC4xNzUtLjExLjI4Ny0uMTRsLjE1MS0uMjczYTguNjE2IDguNjE2IDAgMCAwIDYuMTQ1LjAxNmwuMTQyLjI1NmMuMTE0LjAzNy4yMzkuMDU2LjM0LjIwNi4xODIuMzEuMzA2LjY3NS40NTcgMS4xMTguMDY2LjIwOC4xLjM5My4xOTQuNjEuMDIxLjA0OC4wNTcuMTE3LjA4Mi4xNy4xNzcuMzY3LjU5LjUzNS45Mi4zNzYuMzMtLjE1OC40NTUtLjU4LjI4NC0uOTQ1LS4wMjYtLjA1Mi0uMDYtLjEyOS0uMDg3LS4xNzktLjExLS4yMDgtLjIzNS0uMzQ4LS4zNTctLjUzLS4yNTItLjM5My0uNDYxLS43Mi0uNTktMS4wNTUtLjA1NS0uMTczLjAwOS0uMjguMDUtLjM5Mi0uMDI1LS4wMjktLjA3OS0uMTkyLS4xMS0uMjY4YTguNjU0IDguNjU0IDAgMCAwIDMuODM4LTQuODIyYy4wODYuMDE0LjIzNi4wNC4yODUuMDUuMS0uMDY2LjE5Mi0uMTUyLjM3My0uMTM4LjM1NS4wNTIuNzIuMTgzIDEuMTYuMzQxLjIwNS4wNzguMzcuMTcuNTk4LjIzLjA0OC4wMTMuMTE3LjAyNS4xNzIuMDM3bC4wMTMuMDA0LjAxLjAwMmMuMzk1LjA4NS43NzgtLjEzMS44Ni0uNDg2LjA4LS4zNTUtLjE3MS0uNzE1LS41NjQtLjgxLS4wNTctLjAxMy0uMTM4LS4wMzUtLjE5My0uMDQ1LS4yMzItLjA0NC0uNDItLjAzMy0uNjQtLjA1MS0uNDY1LS4wNDktLjg1LS4wODktMS4xOTMtLjE5Ni0uMTQtLjA1NC0uMjM5LS4yMi0uMjg3LS4yODlsLS4yNy0uMDc4YTguNTcyIDguNTcyIDAgMCAwLS4xMzktMy4xMDQgOC41OTkgOC41OTkgMCAwIDAtMS4yNDctMi44OGMuMDY4LS4wNjIuMTk5LS4xNzcuMjM2LS4yMS4wMS0uMTIuMDAxLS4yNDUuMTI1LS4zNzcuMjYyLS4yNDYuNTkyLS40NS45OS0uNjk1LjE5LS4xMS4zNjQtLjE4Mi41NTQtLjMyMi4wNDMtLjAzMi4xMDEtLjA4Mi4xNDYtLjExOC4zMi0uMjU1LjM5My0uNjkzLjE2NC0uOTgtLjIzLS4yODctLjY3NC0uMzE0LS45OTMtLjA2LS4wNDYuMDM2LS4xMDcuMDgzLS4xNDguMTE4LS4xNzkuMTUzLS4yOS4zMDUtLjQ0LjQ2NC0uMzI4LjMzMy0uNi42MTEtLjg5OC44MTItLjEyOS4wNzUtLjMxOC4wNDktLjQwNC4wNDRsLS4yNTMuMThhOC43MzIgOC43MzIgMCAwIDAtNS41MjgtMi42NjYgMTYuMDM2IDE2LjAzNiAwIDAgMS0uMDE1LS4yOTdjLS4wODctLjA4My0uMTkyLS4xNTQtLjIxOC0uMzMzLS4wMjktLjM1Ny4wMi0uNzQyLjA3Ni0xLjIwNi4wMy0uMjE2LjA4Mi0uMzk2LjA5LS42MzIuMDAzLS4wNTMgMC0uMTMgMC0uMTg5IDAtLjQwOC0uMjk5LS43MzgtLjY2Ny0uNzM4em0tLjgzNCA1LjE1Ni0uMTk4IDMuNDg4LS4wMTQuMDA3YS41ODcuNTg3IDAgMCAxLS45MzIuNDQ5bC0uMDA2LjAwMi0yLjg2NC0yLjAyN2E2Ljg2MiA2Ljg2MiAwIDAgMSA0LjAxNC0xLjkxOXptMS42NjggMGE2LjkyMiA2LjkyMiAwIDAgMSAzLjk5IDEuOTJsLTIuODQ2IDIuMDE1LS4wMS0uMDA0YS41ODguNTg4IDAgMCAxLS45MzMtLjQ0OGwtLjAwMy0uMDAxLS4xOTgtMy40ODJ6bS02LjcyIDMuMjIyIDIuNjE0IDIuMzM1LS4wMDMuMDE0YS41ODUuNTg1IDAgMCAxLS4yMyAxLjAwOGwtLjAwMy4wMS0zLjM1Mi45NjdhNi44MzggNi44MzggMCAwIDEgLjk3My00LjMzNHptMTEuNzUzLjAwMWMuMzg4LjYzLjY4MyAxLjMzMS44NTggMi4wOTNhNi45MSA2LjkxIDAgMCAxIC4xNDUgMi4yMjlsLTMuMzctLjk3LS4wMDItLjAxM2EuNTg2LjU4NiAwIDAgMS0uMjMtMS4wMDhsLS4wMDItLjAwNyAyLjYtMi4zMjR6bS02LjQwNCAyLjUxNWgxLjA3MWwuNjY2LjgzLS4yMzkgMS4wMzgtLjk2Mi40NjEtLjk2NC0uNDYzLS4yNC0xLjAzNy42NjgtLjgzem0zLjQzNSAyLjg0NGEuNTg1LjU4NSAwIDAgMSAuMTM1LjAxbC4wMDUtLjAwOCAzLjQ2OC41ODZhNi44NTggNi44NTggMCAwIDEtMi43NzYgMy40ODFsLTEuMzQ2LTMuMjQ2LjAwNC0uMDA1YS41ODYuNTg2IDAgMCAxIC41MS0uODE4em0tNS44MjQuMDE0YS41ODcuNTg3IDAgMCAxIC41My44MTdsLjAxLjAxMi0xLjMzMSAzLjIxNGE2Ljg4NiA2Ljg4NiAwIDAgMS0yLjc2Ny0zLjQ1OGwzLjQzNy0uNTgyLjAwNi4wMDdhLjU5NS41OTUgMCAwIDEgLjExNS0uMDF6bTIuOTA0IDEuNDA3YS41ODIuNTgyIDAgMCAxIC4yNzUuMDU5LjU4My41ODMgMCAwIDEgLjI2My4yNWguMDEzbDEuNjk0IDMuMDU3Yy0uMjIuMDczLS40NDYuMTM2LS42NzcuMTg5YTYuODk2IDYuODk2IDAgMCAxLTMuNzU4LS4xOTRsMS42OS0zLjA1aC4wMDNhLjU4OC41ODggMCAwIDEgLjQ5Ny0uMzF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvS3ViZXJuZXRlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvTG9nZ2luZyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTG9nZ2luZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwODBENVwiLFxuICAgIGQ6IFwiTTIgMTB2MTNhOSA5IDAgMCAxIDkgOWgxM2MwLTEyLjE1LTkuODUtMjItMjItMjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDEzLjU2NVYzMmgxMGMwLTcuNzIyLTMuOTgxLTE0LjUxLTEwLTE4LjQzNlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTE0IDB2MTAuMjI2QzIxLjY2NiAxNC40NjggMjYuODY5IDIyLjYzNiAyNi44NjkgMzJIMzBWMTZjMC04LjgzNy03LjE2My0xNi0xNi0xNlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0xvZ2dpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0xvZ3N0YXNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Mb2dzdGFzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzNFQkVCMFwiLFxuICAgIGQ6IFwiTTE5IDMyaDExVjIwSDE5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZDogXCJNNCAwSDN2MjBoMTN2LThDMTYgNS4zNzMgMTAuNjI3IDAgNCAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDIwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMVYyMEgzWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Mb2dzdGFzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvTWFwcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTWFwcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzIyQTdGM1wiLFxuICAgIGQ6IFwiTTI1LjUgOS41YzAgNi42NS05LjUgMTEuNDI1LTkuNSAxMS40MjVTNi41IDE2LjE1IDYuNSA5LjVBOS41IDkuNSAwIDAgMSAxNiAwYTkuNSA5LjUgMCAwIDEgOS41IDkuNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjAuOTI1czQuMzI2LTIuMTgzIDcuMTQxLTUuNjQ1bC0yLjUwNS0xLjg3OGE3LjcyNSA3LjcyNSAwIDAgMC05LjI3MiAwTDguODU5IDE1LjI4QzExLjY3NCAxOC43NDIgMTYgMjAuOTI1IDE2IDIwLjkyNVwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiLFxuICAgIGQ6IFwiTTI1LjUzIDE3LjA3M2EyMS4xMjQgMjEuMTI0IDAgMCAxLTIuODM0IDIuOTE2Yy0yLjYyIDIuMjM1LTUuMjM5IDMuNTYxLTUuMzQ5IDMuNjE2TDE2IDI0LjI4MmwtMS4zNDgtLjY3N2MtLjEwOS0uMDU1LTIuNzI4LTEuMzgxLTUuMzQ5LTMuNjE2YTIxLjE4MiAyMS4xODIgMCAwIDEtMi44MzQtMi45MTZMMCAyMS45MjVsMTEuMzY0IDguNTIzYTcuNzI0IDcuNzI0IDAgMCAwIDkuMjcxIDBMMzIgMjEuOTI1bC02LjQ3LTQuODUyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01hcHM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb01lbWNhY2hlZCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTWVtY2FjaGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX21lbWNhY2hlZCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInJhZGlhbEdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYycpLFxuICAgIGN4OiBcIjQxLjQwNiVcIixcbiAgICBjeTogXCI0Mi43MDglXCIsXG4gICAgcjogXCIwJVwiLFxuICAgIGZ4OiBcIjQxLjQwNiVcIixcbiAgICBmeTogXCI0Mi43MDglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjREI3QzdDXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzgzNzM3XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicmFkaWFsR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgY3g6IFwiNDQuMjcxJVwiLFxuICAgIGN5OiBcIjQyLjcwOCVcIixcbiAgICByOiBcIjAlXCIsXG4gICAgZng6IFwiNDQuMjcxJVwiLFxuICAgIGZ5OiBcIjQyLjcwOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNEQjdDN0NcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDODM3MzdcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICB4MTogXCI1MCVcIixcbiAgICB4MjogXCI1MCVcIixcbiAgICB5MTogXCIxMDAlXCIsXG4gICAgeTI6IFwiMCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM1NzRDNEFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM4MDcxNkRcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICB4MTogXCI4OC43NzglXCIsXG4gICAgeDI6IFwiMzAuMTQ5JVwiLFxuICAgIHkxOiBcIjk4LjM0MiVcIixcbiAgICB5MjogXCItOC42OCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyNjhEODNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyRUExOUVcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJNMCAyMS41NjdWMTAuMzUyQzAgMS4yOTQgMS4yOTMgMCAxMC4zNDIgMGgxMS4yMzZjOS4wNDkgMCAxMC4zNDEgMS4yOTQgMTAuMzQxIDEwLjM1MnYxMS4yMTVjMCA5LjA1OS0xLjI5MiAxMC4zNTItMTAuMzQxIDEwLjM1MkgxMC4zNDJDMS4yOTIgMzEuOTIgMCAzMC42MjYgMCAyMS41NjdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTYuODg5IDYuMDE2QzUuMzIgMTUuOTYgNi4xNCAyNS4yNyA2LjE0IDI1LjI3aDQuOTA0Yy0uNDY2LTIuNDgzLTIuMTQtMTMuODI0LS43NDgtMTMuODYxLjc0Ni4xMTggNC4xNTYgOS42MjEgNC4xNTYgOS42MjFzLjc1MS0uMDkzIDEuNTA3LS4wOTNjLjc1NSAwIDEuNTA2LjA5MyAxLjUwNi4wOTNzMy40MS05LjUwMyA0LjE1Ny05LjYyMWMxLjM5Mi4wMzctLjI4MiAxMS4zNzgtLjc0OCAxMy44Nmg0LjkwNHMuODItOS4zMS0uNzQ4LTE5LjI1M2gtNC41NGMtLjg2NS4wMS00LjE1MyA1Ljc3Ny00LjUzMSA1Ljc3Ny0uMzc4IDAtMy42NjYtNS43NjctNC41My01Ljc3N0g2Ljg4OVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpLCBcIilcIiksXG4gICAgZDogXCJNMTQuOTkzIDI0LjEwOWExLjE2IDEuMTYgMCAxIDEtMi4zMjIgMCAxLjE2IDEuMTYgMCAwIDEgMi4zMjIgMFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNMTkuMjQ5IDI0LjEwOWExLjE2IDEuMTYgMCAxIDEtMi4zMjIgMCAxLjE2IDEuMTYgMCAwIDEgMi4zMjIgMFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTI0LjggNi4zNDVjLjcwNyA0Ljc5Ljg3MyA5LjM4OC44NiAxMi44MTMtLjAxMyAzLjUwMy0uMjE0IDUuNzgtLjIxNCA1Ljc4aC00LjEyOGwtLjQ0My4zMzJoNC45MDRzLjgyLTkuMzEtLjc0OC0xOS4yNTRsLS4yMzIuMzI5Wm0tMTIuOTk2LS4xMjFjMS4yODggMS40MzMgMy41MTYgNS4yMzcgMy44MjMgNS4yMzctLjgxNy0xLjA0NS0yLjgyMy00LjM3OC0zLjgyMy01LjIzN1ptLTEuODQgNC44NTJjLTEuMzkyLjAzOC4yODIgMTEuMzc5Ljc0OSAxMy44NjFINi40M2wtLjI5LjMzM2g0LjkwNGMtLjQ2NC0yLjQ3LTIuMTIzLTEzLjcxLS43NjktMTMuODYxLS4xMjYtLjE5LS4yMzUtLjMyLS4zMTEtLjMzM1ptMTEuMzI2IDBjLS43NDYuMTE5LTQuMTU2IDkuNjIyLTQuMTU2IDkuNjIycy0uNzUxLS4wOTQtMS41MDctLjA5NGMtLjQ0NyAwLS44MzIuMDI4LTEuMDkyLjA1MmwtLjA4Mi4zNzRzLjc1MS0uMDkzIDEuNTA3LS4wOTNjLjc1NSAwIDEuNTA2LjA5MyAxLjUwNi4wOTNzMy4zODUtOS40NCA0LjE0Ni05LjYyMWMtLjA4Mi0uMjA4LS4xODMtLjMzLS4zMjItLjMzM1pcIixcbiAgICBvcGFjaXR5OiAwLjFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk02Ljg4OSA2LjAxNkM1LjMyIDE1Ljk2IDYuMTQgMjUuMjcgNi4xNCAyNS4yN2wuMjg5LS4zMjVjLS4xNDgtMi4xOTctLjU0My0xMC4xNC43OTEtMTguNTk3aDQuNTQxYy4wOTYuMDAyLjIyNS4wOC4zNzQuMjA4LS4yOTctLjMzLS41NDQtLjUzOC0uNzA2LS41NEg2Ljg4OVptMTMuNjAxIDBjLS44NjQuMDEtNC4xNTIgNS43NzctNC41MyA1Ljc3Ny4xNTQuMTk3LjI3OS4zMzMuMzMyLjMzMy4zNzggMCAzLjY2Ni01Ljc2NyA0LjUzLTUuNzc3aDQuMDA4bC4yLS4zMzNoLTQuNTRabS05Ljg4MSA1LjcyNWMxLjEwMyAxLjY1NyAzLjg0NCA5LjI5IDMuODQ0IDkuMjlsLjA4LS4zNzNjLS42NzYtMS44NTYtMy4yNTYtOC44MTQtMy45MDMtOC45MTdoLS4wMjFabTExLjM0NiAwYy43NCAxLjg4Ny0uNjYgMTEuMjk1LTEuMDggMTMuNTI5bC40NDQtLjM0OGMuNTY4LTMuMzMxIDEuOTM2LTEzLjE0Ni42MzYtMTMuMThaXCIsXG4gICAgb3BhY2l0eTogMC4zXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29NZW1jYWNoZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb01ldHJpY3MgPSBmdW5jdGlvbiBFdWlJY29uTG9nb01ldHJpY3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTIgMzJoMjhWMjBsLTYuNDY1LTYuNDY1YTUgNSAwIDAgMC03LjA3IDBMMiAyOHY0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTYuNDY1IDEzLjUzNS0zLjUzNiAzLjUzNmE5Ljk2NSA5Ljk2NSAwIDAgMCA3LjA3IDIuOTMgOS45NjUgOS45NjUgMCAwIDAgNy4wNzItMi45M2wtMy41MzYtMy41MzZhNSA1IDAgMCAwLTcuMDcgMFwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGQ6IFwiTTE0LjM0MyAxMS40MTRBNy45NTEgNy45NTEgMCAwIDEgMjAgOS4wNzFjMi4xMzcgMCA0LjE0Ni44MzIgNS42NTcgMi4zNDNsMy4yMDcgMy4yMDdBOS45NTUgOS45NTUgMCAwIDAgMzAgMTAuMDAxYzAtNS41MjQtNC40NzctMTAtMTAtMTAtNS41MjIgMC0xMCA0LjQ3Ni0xMCAxMCAwIDEuNjY3LjQxNCAzLjIzNyAxLjEzNyA0LjYybDMuMjA2LTMuMjA3WlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29NZXRyaWNzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Nb25nb2RiID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Nb25nb2RiKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwibTE2Ljg0NCAzMS44NDctLjg0Ny0uMjlzLjEwNC00LjMxNS0xLjQ0NS00LjYyNWMtMS4wMzItMS4xOTguMTY1LTUwLjggMy44ODItLjE2NSAwIDAtMS4yOC42NC0xLjUwNyAxLjczNS0uMjQ4IDEuMDc0LS4wODMgMy4zNDUtLjA4MyAzLjM0NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E2QTM4NVwiLFxuICAgIGQ6IFwibTE2Ljg0NCAzMS44NDctLjg0Ny0uMjlzLjEwNC00LjMxNS0xLjQ0NS00LjYyNWMtMS4wMzItMS4xOTguMTY1LTUwLjggMy44ODItLjE2NSAwIDAtMS4yOC42NC0xLjUwNyAxLjczNS0uMjQ4IDEuMDc0LS4wODMgMy4zNDUtLjA4MyAzLjM0NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTE3LjI5OSAyNy42NzZzNy40MTMtNC44NzQgNS42NzgtMTUuMDEzYy0xLjY3Mi03LjM3Mi01LjYxNi05Ljc4OC02LjA1LTEwLjcxOC0uNDc1LS42Ni0uOTMtMS44MTctLjkzLTEuODE3bC4zMSAyMC41MDZjMCAuMDItLjY0IDYuMjc4Ljk5MiA3LjA0MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNDk5RDRBXCIsXG4gICAgZDogXCJNMTcuMjk5IDI3LjY3NnM3LjQxMy00Ljg3NCA1LjY3OC0xNS4wMTNjLTEuNjcyLTcuMzcyLTUuNjE2LTkuNzg4LTYuMDUtMTAuNzE4LS40NzUtLjY2LS45My0xLjgxNy0uOTMtMS44MTdsLjMxIDIwLjUwNmMwIC4wMi0uNjQgNi4yNzguOTkyIDcuMDQyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xNS41NjQgMjcuOTQ0cy02Ljk2LTQuNzUtNi41NDYtMTMuMTEzYy4zOTItOC4zNjMgNS4zMDctMTIuNDczIDYuMjU3LTEzLjIxNi42Mi0uNjYuNjQtLjkwOS42ODEtMS41Ny40MzQuOTMuMzUxIDEzLjg5OC40MTMgMTUuNDI2LjE4NiA1Ljg4Ni0uMzMgMTEuMzU4LS44MDUgMTIuNDczWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNThBQTUwXCIsXG4gICAgZDogXCJNMTUuNTY0IDI3Ljk0NHMtNi45Ni00Ljc1LTYuNTQ2LTEzLjExM2MuMzkyLTguMzYzIDUuMzA3LTEyLjQ3MyA2LjI1Ny0xMy4yMTYuNjItLjY2LjY0LS45MDkuNjgxLTEuNTcuNDM0LjkzLjM1MSAxMy44OTguNDEzIDE1LjQyNi4xODYgNS44ODYtLjMzIDExLjM1OC0uODA1IDEyLjQ3M1pcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTW9uZ29kYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvTXlzcWwgPSBmdW5jdGlvbiBFdWlJY29uTG9nb015c3FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCIjMDA1NDZCXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5LjQ1NiAyNC4yNzZjLTEuNzQtLjA0My0zLjA4OC4xMzEtNC4yMTkuNjEtLjMyNi4xMy0uODQ4LjEzLS44OTIuNTQzLjE3NC4xNzQuMTk2LjQ1Ny4zNDguNjk2LjI2MS40MzUuNzE4IDEuMDIyIDEuMTMxIDEuMzI3LjQ1Ny4zNDguOTE0LjY5NiAxLjM5MiAxIC44NDguNTIyIDEuODA1LjgyNyAyLjYzMSAxLjM0OS40OC4zMDQuOTU3LjY5NSAxLjQzNiAxLjAyMi4yNC4xNzMuMzkxLjQ1Ni42OTYuNTY1di0uMDY1Yy0uMTUzLS4xOTYtLjE5Ni0uNDc5LS4zNDgtLjY5Ni0uMjE4LS4yMTgtLjQzNS0uNDEzLS42NTMtLjYzYTEwLjMxNiAxMC4zMTYgMCAwIDAtMi4yNjEtMi4xOTdjLS42OTYtLjQ3OS0yLjIxOS0xLjEzMS0yLjUwMS0xLjkzNmwtLjA0NC0uMDQzYy40NzktLjA0NCAxLjA0NC0uMjE4IDEuNS0uMzQ4Ljc0LS4xOTYgMS40MTQtLjE1MyAyLjE3NS0uMzQ4LjM0OC0uMDg3LjY5Ni0uMTk2IDEuMDQ0LS4zMDV2LS4xOTVjLS4zOTEtLjM5Mi0uNjc0LS45MTQtMS4wODctMS4yODQtMS4xMS0uOTU3LTIuMzI3LTEuODkyLTMuNTg4LTIuNjc0LS42NzUtLjQzNS0xLjU0NS0uNzE4LTIuMjYyLTEuMDg4LS4yNjEtLjEzLS42OTYtLjE5Ni0uODQ4LS40MTMtLjM5Mi0uNDc5LS42MS0xLjExLS44OTItMS42NzVhNTQuOTIyIDU0LjkyMiAwIDAgMS0xLjc4My0zLjc4NGMtLjM5Mi0uODQ4LS42My0xLjY5Ni0xLjExLTIuNDc5LTIuMjQtMy42OTctNC42NzUtNS45MzctOC40MTYtOC4xMzQtLjgwNC0uNDU2LTEuNzYxLS42NTItMi43ODMtLjg5MS0uNTQ0LS4wMjItMS4wODgtLjA2NS0xLjYzMS0uMDg3LS4zNDgtLjE1Mi0uNjk2LS41NjYtMS0uNzYxLTEuMjQtLjc4My00LjQzNy0yLjQ4LTUuMzUtLjI0LS41ODggMS40MTQuODcgMi44MDYgMS4zNyAzLjUyNC4zNy41Ljg0OCAxLjA2NSAxLjEwOSAxLjYzLjE1Mi4zNy4xOTUuNzYyLjM0NyAxLjE1My4zNDguOTU3LjY3NSAyLjAyMyAxLjEzMSAyLjkxNC4yNC40NTcuNS45MzYuODA1IDEuMzQ5LjE3NC4yMzkuNDc4LjM0OC41NDQuNzQtLjMwNS40MzQtLjMyNyAxLjA4Ny0uNSAxLjYzLS43ODMgMi40NTgtLjQ3OSA1LjUwMi42MyA3LjMwNy4zNDguNTQ0IDEuMTc1IDEuNzQgMi4yODQgMS4yODQuOTc4LS4zOTIuNzYtMS42MzIgMS4wNDMtMi43MTkuMDY2LS4yNjEuMDIyLS40MzUuMTUzLS42MDl2LjA0NGMuMzA0LjYwOS42MDkgMS4xOTYuODkxIDEuODA1LjY3NSAxLjA2NSAxLjg0OSAyLjE3NCAyLjgyOCAyLjkxNC41MjIuMzkxLjkzNSAxLjA2NSAxLjU4NyAxLjMwNXYtLjA2NmgtLjA0M2MtLjEzLS4xOTUtLjMyNy0uMjgyLS41LS40MzUtLjM5Mi0uMzktLjgyNy0uODctMS4xMzEtMS4zMDQtLjkxNC0xLjIxOC0xLjcxOS0yLjU2Ny0yLjQzNi0zLjk1OC0uMzQ4LS42NzUtLjY1My0xLjQxNC0uOTM1LTIuMDg4LS4xMy0uMjYxLS4xMy0uNjUzLS4zNDgtLjc4My0uMzI3LjQ3OC0uODA1Ljg5Mi0xLjA0NCAxLjQ3OS0uNDEzLjkzNS0uNDU3IDIuMDg4LS42MSAzLjI4NC0uMDg2LjAyMS0uMDQzIDAtLjA4Ni4wNDMtLjY5Ni0uMTc0LS45MzUtLjg5MS0xLjE5Ni0xLjUtLjY1My0xLjU0NS0uNzYxLTQuMDI0LS4xOTYtNS44MDcuMTUyLS40NTcuODA1LTEuODkyLjU0NC0yLjMyNy0uMTMtLjQxMy0uNTY2LS42NTItLjgwNS0uOTc5YTguNzY0IDguNzY0IDAgMCAxLS43ODMtMS4zOTJjLS41MjItMS4yMTctLjc4My0yLjU2Ni0xLjM0OC0zLjc4NC0uMjYxLS41NjUtLjcxOC0xLjE1Mi0xLjA4Ny0xLjY3NC0uNDE0LS41ODctLjg3LTEtMS4xOTctMS42OTctLjEwOC0uMjM5LS4yNi0uNjMtLjA4Ny0uODkxLjA0NC0uMTc0LjEzLS4yNC4zMDUtLjI4My4yODMtLjI0IDEuMDg3LjA2NSAxLjM3LjE5Ni44MDUuMzI2IDEuNDc5LjYzIDIuMTUzIDEuMDg3LjMwNC4yMTguNjMuNjMxIDEuMDIyLjc0aC40NTdjLjY5Ni4xNTIgMS40NzkuMDQzIDIuMTMxLjIzOSAxLjE1My4zNyAyLjE5Ni45MTMgMy4xMzIgMS41YTE5LjI5NCAxOS4yOTQgMCAwIDEgNi43ODUgNy40MzhjLjI2MS41LjM3Ljk1Ny42MDkgMS40NzkuNDU3IDEuMDY2IDEuMDIyIDIuMTUzIDEuNDc5IDMuMTk3LjQ1NiAxLjAyMi44OTEgMi4wNjYgMS41NDQgMi45MTQuMzI2LjQ1NyAxLjYzLjY5NiAyLjIxOC45MzUuNDM1LjE5NiAxLjExLjM3IDEuNS42MS43NC40NTYgMS40OC45NzggMi4xNzUgMS40NzguMzQ4LjI2IDEuNDM2LjgwNSAxLjUwMSAxLjI0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yNzMgNS4zNzhjLS4zNyAwLS42My4wNDMtLjg5MS4xMDl2LjA0M2guMDQzYy4xNzQuMzQ4LjQ3OS41ODcuNjk2Ljg5Mi4xNzQuMzQ4LjMyNi42OTYuNSAxLjA0NGwuMDQ0LS4wNDRjLjMwNC0uMjE3LjQ1Ny0uNTY1LjQ1Ny0xLjA4Ny0uMTMxLS4xNTItLjE1My0uMzA1LS4yNjEtLjQ1Ny0uMTMtLjIxOC0uNDE0LS4zMjYtLjU4OC0uNVpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTXlzcWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb05naW54ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29OZ2lueChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMTE5NjM5XCIsXG4gICAgZDogXCJtMTYgMCAxMy44NTYgOHYxNkwxNiAzMiAyLjE0NCAyNFY4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTExLjE3IDEzLjUxMnY4LjM3NmExLjYwNyAxLjYwNyAwIDEgMS0zLjIxNSAwVjkuNjMyYzAtMS40MzIgMS43MzEtMi4xNDkgMi43NDQtMS4xMzZsOS41MSA5LjUxMlY5LjYzMmExLjYwNyAxLjYwNyAwIDAgMSAzLjIxNSAwdjEyLjI1NmMwIDEuNDMyLTEuNzMxIDIuMTQ5LTIuNzQ0IDEuMTM2bC05LjUxLTkuNTEyWlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29OZ2lueDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTEwIDMySDcuMjM4QzMuNzkzIDMyIDEgMjguODY1IDEgMjQuOTk4VjE1aDl2MTdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCAzMmg5VjhoLTl6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDdDXCIsXG4gICAgZDogXCJNMzEgMzJoLTlWMGwxLjk3My4wMjRDMjcuODY2LjA3MiAzMSAzLjczMSAzMSA4LjIyOFYzMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29PYnNlcnZhYmlsaXR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Pc3F1ZXJ5ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Pc3F1ZXJ5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTTMxLjkwNy4wMzJ2Ny45NjlsLTcuOTUyIDcuOTUxVjcuOTY3TDMxLjkwNy4wMzJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzM1wiLFxuICAgIGQ6IFwiTTE2LjAwMy4wMzJ2Ny45NjlsNy45NTIgNy45NTFWNy45NjdMMTYuMDAzLjAzMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTU5NkZGXCIsXG4gICAgZDogXCJNMzEuOTIzIDMxLjg1NWgtNy45NjhsLTcuOTUyLTcuOTUxaDcuOTg1bDcuOTM1IDcuOTUxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0zMS45MjMgMTUuOTUyaC03Ljk2OGwtNy45NTIgNy45NTJoNy45ODVsNy45MzUtNy45NTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTS4xIDMxLjg3MnYtNy45NjhsNy45NTItNy45NTJ2Ny45ODVMLjEgMzEuODcyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0xNi4wMDQgMzEuODcydi03Ljk2OGwtNy45NTItNy45NTJ2Ny45ODVsNy45NTIgNy45MzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTS4wODQuMDQ4aDcuOTY4TDE2LjAwNCA4SDguMDE5TC4wODQuMDQ4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0uMDg0IDE1Ljk1Mmg3Ljk2OEwxNi4wMDQgOEg4LjAxOUwuMDg0IDE1Ljk1MlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Pc3F1ZXJ5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29QaHAgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1BocChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19waHAnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIGQ6IFwiTS4wMjggNy44NTRDLjAyOCAzLjUzNCA2LjY4OC4wMyAxNC45MDIuMDNzMTQuODc0IDMuNTAzIDE0Ljg3NCA3LjgyNGMwIDQuMzIyLTYuNjYgNy44MjUtMTQuODc0IDcuODI1LTguMjE1IDAtMTQuODc0LTMuNTAzLTE0Ljg3NC03LjgyNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2QnKSxcbiAgICBkOiBcIk0wIDE3LjQzaDMwLjk4N1YwSDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZicpLFxuICAgIGQ6IFwiTTAgMTcuNDNoMzAuOTg3VjBIMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInJhZGlhbEdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIGN4OiBcIjMwLjAyJVwiLFxuICAgIGN5OiBcIjgyLjQyMiVcIixcbiAgICByOiBcIjEyNC44MTQlXCIsXG4gICAgZng6IFwiMzAuMDIlXCIsXG4gICAgZnk6IFwiODIuNDIyJVwiLFxuICAgIGdyYWRpZW50VHJhbnNmb3JtOiBcIm1hdHJpeCguNTI2MDQgMCAwIDEgLjE0MiAwKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0FFQjJENVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQUVCMkQ1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0ODRDODlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0ODRDODlcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIHRyYW5zZm9ybTogXCJtYXRyaXgoMSAwIDAgLTEgLjAyNiAyNS40MTMpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoLjU5MiAuODYpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uMDI4IDcuODU0Qy4wMjggMy41MzQgNi42ODguMDMgMTQuOTAyLjAzczE0Ljg3NCAzLjUwMyAxNC44NzQgNy44MjRjMCA0LjMyMi02LjY2IDcuODI1LTE0Ljg3NCA3LjgyNS04LjIxNSAwLTE0Ljg3NC0zLjUwMy0xNC44NzQtNy44MjVcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdkJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzc3N0JCM1wiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0xNS40OTQgMS40NzJjNy44OTQgMCAxNC4yOTMgMy4yNDMgMTQuMjkzIDcuMjQzcy02LjQgNy4yNDQtMTQuMjkzIDcuMjQ0Yy03Ljg5NCAwLTE0LjI5My0zLjI0My0xNC4yOTMtNy4yNDQgMC00IDYuNC03LjI0MyAxNC4yOTMtNy4yNDNcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZycpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2YnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZycpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTguNzAxIDcuODE3Yy42NSAwIDEuMTM0LjEyIDEuNDQuMzU2LjMwNC4yMzMuNTEzLjYzOC42MjMgMS4yMDIuMTAzLjUyOC4wNjQuODk2LS4xMTYgMS4wOTUtLjE4My4yMDMtLjU4LjMwNi0xLjE3Ny4zMDZIOC40MzNsLS41NzUtMi45NTloLjg0M1pNNS4zMSA0LjE3MmEuMTYxLjE2MSAwIDAgMC0uMTU5LjE5M2wxLjUyNCA3Ljg0Yy4wMTUuMDc2LjA4Mi4xMzEuMTU5LjEzMWgzLjI4NGMxLjAzMyAwIDEuODAxLS4yOCAyLjI4NC0uODMzLjQ4NS0uNTU2LjYzNS0xLjMzMy40NDYtMi4zMDlhMy42ODYgMy42ODYgMCAwIDAtLjM5NS0xLjA5OCAzLjY3NiAzLjY3NiAwIDAgMC0uNzI3LS45MSAzLjE4OSAzLjE4OSAwIDAgMC0xLjE5Ny0uNzE4Yy0uNDMtLjE0LS45ODMtLjIxLTEuNjQzLS4yMWgtMS4zM2wtLjM4LTEuOTU1YS4xNjEuMTYxIDAgMCAwLS4xNTgtLjEzSDUuMzA5WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNOC41NjYgMTAuNjE1aC45MDVjLjcyMiAwIC45NzItLjE1OCAxLjA1OC0uMjUzLjE0MS0uMTU3LjE2OC0uNDg3LjA3Ny0uOTU2LS4xMDItLjUyNC0uMjkxLS44OTYtLjU2My0xLjEwNS0uMjc3LS4yMTQtLjcyOS0uMzIyLTEuMzQxLS4zMjJoLS42NDhsLjUxMiAyLjYzNlptMS41NTEgMS44ODNINi44MzNhLjMyMy4zMjMgMCAwIDEtLjMxNy0uMjYxTDQuOTkyIDQuMzk2YS4zMjMuMzIzIDAgMCAxIC4zMTctLjM4NWgxLjcwOGMuMTU1IDAgLjI4Ny4xMS4zMTcuMjYybC4zNTQgMS44MjNoMS4xOTdjLjY3NyAwIDEuMjQ3LjA3NCAxLjY5NC4yMi40Ni4xNDkuODgyLjQwMiAxLjI1Ni43NTIuMzEuMjg0LjU2NC42MDQuNzU4Ljk1LjE5My4zNDUuMzMxLjczMS40MTIgMS4xNDYuMiAxLjAyNy4wMzggMS44NS0uNDgyIDIuNDQ2LS41MTUuNTktMS4zMjUuODg4LTIuNDA2Ljg4OFpNNy42NjMgNy42NTZoMS4wMzljLjY4OCAwIDEuMjAxLjEzIDEuNTM4LjM5LjMzNy4yNTkuNTY1LjY5Mi42ODMgMS4yOTkuMTEzLjU4My4wNjEuOTk0LS4xNTUgMS4yMzMtLjIxNi4yNC0uNjQ4LjM2LTEuMjk3LjM2SDguM2wtLjYzOC0zLjI4MlptMi40NTQgNC41MmMuOTg5IDAgMS43MS0uMjYgMi4xNjItLjc3OS40NTMtLjUxOC41OS0xLjI0Mi40MS0yLjE3MmEzLjUxIDMuNTEgMCAwIDAtLjM3OC0xLjA1IDMuNTAyIDMuNTAyIDAgMCAwLS42OTUtLjg3IDMuMDE3IDMuMDE3IDAgMCAwLTEuMTM3LS42ODNjLS40MTctLjEzNS0uOTQ4LS4yMDMtMS41OTQtLjIwM0g3LjQyMmwtLjQwNS0yLjA4NUg1LjMwOWwxLjUyNCA3Ljg0MWgzLjI4NFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTE2Ljc2MyA2LjI1N2EuMTYxLjE2MSAwIDAgMC0uMTU5LjE5MmwuNjc0IDMuNDdjLjA2NC4zMy4wNDkuNTY2LS4wNDQuNjY2LS4wNTcuMDYxLS4yMjguMTY0LS43MzIuMTY0SDE1LjI4bC0uODQ3LTQuMzYxYS4xNjEuMTYxIDAgMCAwLS4xNTktLjEzMUgxMi41OGEuMTYxLjE2MSAwIDAgMC0uMTU5LjE5MmwxLjUyNCA3Ljg0MWMuMDE1LjA3Ni4wODIuMTMuMTU5LjEzaDEuNjk0YS4xNjEuMTYxIDAgMCAwIC4xNTktLjE5MWwtLjM2OC0xLjg5M2gxLjMxNGMxIDAgMS42OC0uMTc2IDIuMDc1LS41NC40MDMtLjM3LjUyOS0uOTYyLjM3NC0xLjc2bC0uNzEtMy42NDhhLjE2MS4xNjEgMCAwIDAtLjE1OC0uMTMxaC0xLjcyMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTE1Ljc5OSAxNC41ODJoLTEuNjk1YS4zMjMuMzIzIDAgMCAxLS4zMTctLjI2MUwxMi4yNjMgNi40OGEuMzIzLjMyMyAwIDAgMSAuMzE3LS4zODVoMS42OTVjLjE1NCAwIC4yODcuMTEuMzE3LjI2MmwuODIyIDQuMjNoMS4wODhjLjUwNCAwIC42MS0uMTA3LjYxNC0uMTEyLjAzLS4wMzMuMDctLjE4NS4wMDQtLjUyNmwtLjY3NC0zLjQ3YS4zMjMuMzIzIDAgMCAxIC4zMTctLjM4NGgxLjcyMWMuMTU1IDAgLjI4OC4xMS4zMTcuMjYybC43MSAzLjY0OGMuMTY2Ljg1Ny4wMjMgMS41LS40MjQgMS45MS0uNDI2LjM5Mi0xLjE0LjU4Mi0yLjE4NC41ODJoLTEuMTE4bC4zMyAxLjdhLjMyMy4zMjMgMCAwIDEtLjMxNi4zODVtMC0uMzIzLS40MDYtMi4wODRoMS41MWMuOTUgMCAxLjYwNS0uMTY2IDEuOTY2LS40OTcuMzYtLjMzMi40NjgtLjg2OS4zMjQtMS42MTFsLS43MDktMy42NDloLTEuNzIxbC42NzQgMy40N2MuMDc3LjM5NC4wNDguNjYzLS4wODUuODA3LS4xMzMuMTQzLS40MTYuMjE1LS44NS4yMTVoLTEuMzU0bC0uODczLTQuNDkySDEyLjU4bDEuNTI0IDcuODQxaDEuNjk1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0yMi4wMzMgNy44MTdjLjY1IDAgMS4xMzQuMTIgMS40NC4zNTYuMzA0LjIzMy41MTMuNjM4LjYyMyAxLjIwMi4xMDMuNTI4LjA2NC44OTYtLjExNiAxLjA5NS0uMTgzLjIwMy0uNTguMzA2LTEuMTc3LjMwNmgtMS4wMzhsLS41NzUtMi45NTloLjg0M1ptLTMuMzkyLTMuNjQ1YS4xNjEuMTYxIDAgMCAwLS4xNTkuMTkzbDEuNTI0IDcuODRjLjAxNS4wNzYuMDgyLjEzMS4xNTkuMTMxaDMuMjg0YzEuMDMzIDAgMS44MDEtLjI4IDIuMjg0LS44MzMuNDg1LS41NTYuNjM1LTEuMzMzLjQ0Ni0yLjMwOWEzLjY4OSAzLjY4OSAwIDAgMC0uMzk1LTEuMDk4IDMuNjc2IDMuNjc2IDAgMCAwLS43MjctLjkxIDMuMTg5IDMuMTg5IDAgMCAwLTEuMTk3LS43MThjLS40My0uMTQtLjk4My0uMjEtMS42NDMtLjIxaC0xLjMzbC0uMzgtMS45NTVhLjE2MS4xNjEgMCAwIDAtLjE1OC0uMTNIMTguNjRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0yMS44OTggMTAuNjE1aC45MDVjLjcyMiAwIC45NzItLjE1OCAxLjA1OC0uMjUzLjE0MS0uMTU3LjE2OC0uNDg3LjA3Ny0uOTU2LS4xMDItLjUyNC0uMjkyLS44OTYtLjU2My0xLjEwNS0uMjc3LS4yMTQtLjcyOS0uMzIyLTEuMzQxLS4zMjJoLS42NDhsLjUxMiAyLjYzNlptMS41NTEgMS44ODNoLTMuMjg0YS4zMjMuMzIzIDAgMCAxLS4zMTctLjI2MWwtMS41MjQtNy44NDFhLjMyMy4zMjMgMCAwIDEgLjMxNy0uMzg1aDEuNzA4Yy4xNTUgMCAuMjg3LjExLjMxNy4yNjJsLjM1NCAxLjgyM2gxLjE5N2MuNjc3IDAgMS4yNDcuMDc0IDEuNjk0LjIyLjQ2LjE0OS44ODIuNDAyIDEuMjU2Ljc1Mi4zMS4yODQuNTY0LjYwNC43NTguOTUuMTkzLjM0NS4zMzEuNzMxLjQxMiAxLjE0Ni4yIDEuMDI3LjAzOCAxLjg1LS40ODIgMi40NDYtLjUxNS41OS0xLjMyNS44ODgtMi40MDYuODg4Wm0tMi40NTQtNC44NDJoMS4wMzljLjY4OCAwIDEuMjAxLjEzIDEuNTM4LjM5LjMzNy4yNTkuNTY1LjY5Mi42ODMgMS4yOTkuMTEzLjU4My4wNjEuOTk0LS4xNTUgMS4yMzMtLjIxNi4yNC0uNjQ4LjM2LTEuMjk3LjM2aC0xLjE3bC0uNjM4LTMuMjgyWm0yLjQ1NCA0LjUyYy45ODkgMCAxLjcxLS4yNiAyLjE2Mi0uNzc5LjQ1NC0uNTE4LjU5LTEuMjQyLjQxLTIuMTcyYTMuNTEgMy41MSAwIDAgMC0uMzc4LTEuMDUgMy41MDIgMy41MDIgMCAwIDAtLjY5NS0uODcgMy4wMTcgMy4wMTcgMCAwIDAtMS4xMzctLjY4M2MtLjQxNy0uMTM1LS45NDgtLjIwMy0xLjU5NC0uMjAzaC0xLjQ2M2wtLjQwNS0yLjA4NWgtMS43MDhsMS41MjQgNy44NDFoMy4yODRaXCJcbiAgfSkpKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29QaHA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1Bvc3RncmVzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Qb3N0Z3JlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0zMS44NzYgMTkuMTYyYy0uMTkyLS41NjQtLjY5NS0uOTU2LTEuMzQ1LTEuMDUtLjMwNi0uMDQ1LS42NTctLjAyNi0xLjA3Mi4wNTctLjcyNC4xNDUtMS4yNjEuMi0xLjY1NC4yMTEgMS40OC0yLjQyMiAyLjY4My01LjE4NSAzLjM3Ni03Ljc4NSAxLjEyLTQuMjA1LjUyMS02LjEyLS4xNzgtNi45ODctMS44NS0yLjI5My00LjU1MS0zLjUyNS03LjgwOS0zLjU2M2ExNC4yMzkgMTQuMjM5IDAgMCAwLTQuMDYuNTUxIDE1LjU3MyAxNS41NzMgMCAwIDAtMi4zNzMtLjIxYy0xLjU2Ny0uMDI0LTIuOTUyLjMwNy00LjEzNS45ODhhMTkuMzM0IDE5LjMzNCAwIDAgMC0yLjkyLS43MTFDNi44NS4yMDggNC41NDkuNTYzIDIuODY2IDEuNzE2LjgyOCAzLjExMi0uMTE3IDUuNTM3LjA1OCA4LjkyNi4xMTMgMTAgLjczNCAxMy4yNzMgMS43MSAxNi4zNzZjLjU2MSAxLjc4NCAxLjE2IDMuMjY2IDEuNzggNC40MDQuODc4IDEuNjE0IDEuODE4IDIuNTY0IDIuODczIDIuOTA2LjU5MS4xOSAxLjY2Ni4zMjUgMi43OTYtLjU4OC4xNDMuMTY4LjMzNC4zMzUuNTg4LjQ5LjMyMi4xOTguNzE2LjM1OSAxLjEwOS40NTQgMS40MTguMzQ0IDIuNzQ1LjI1OCAzLjg3OC0uMjI0LjAwNy4xOTUuMDEzLjM4Mi4wMTcuNTQzLjAwOC4yNjIuMDE1LjUxOC4wMjUuNzU4LjA2NyAxLjYyLjE4MSAyLjg4MS41MTggMy43NjNsLjA3LjIwMWMuMTY4LjUuNDQ5IDEuMzM1IDEuMTY0IDEuOTkuNzQuNjc3IDEuNjM3Ljg4NSAyLjQ1Ny44ODUuNDEyIDAgLjgwNC0uMDUyIDEuMTQ5LS4xMjQgMS4yMjctLjI1NSAyLjYyMS0uNjQzIDMuNjMtMi4wMzYuOTUzLTEuMzE2IDEuNDE3LTMuMjk5IDEuNS02LjQyM2wuMDMxLS4yNTMuMDItLjE2NS4yMjUuMDE5LjA1OC4wMDRjMS4yNS4wNTUgMi43NzktLjIwMiAzLjcxOC0uNjI1Ljc0MS0uMzM0IDMuMTE5LTEuNTUgMi41NTktMy4xOTRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzNjc5MVwiLFxuICAgIGQ6IFwiTTI5LjczOCAxOS40ODFjLTMuNzE3Ljc0NC0zLjk3My0uNDc2LTMuOTczLS40NzYgMy45MjUtNS42NDggNS41NjYtMTIuODE3IDQuMTUtMTQuNTcxQzI2LjA1Mi0uMzUyIDE5LjM2NSAxLjkxIDE5LjI1NCAxLjk3bC0uMDM2LjAwNmExMy42NTcgMTMuNjU3IDAgMCAwLTIuNDgtLjI1Yy0xLjY4Mi0uMDI3LTIuOTU4LjQyNy0zLjkyNyAxLjE0IDAgMC0xMS45MjgtNC43NjYtMTEuMzc0IDUuOTkyLjExOCAyLjI4OSAzLjM4MyAxNy4zMTggNy4yNzggMTIuNzc5YTcwLjQ0MyA3MC40NDMgMCAwIDEgMi43OTgtMy4wNjRjLjY4My40NCAxLjUwMS42NjUgMi4zNTguNTg0bC4wNjctLjA1NWMtLjAyLjIwNi0uMDExLjQwOC4wMjcuNjQ3LTEuMDA0IDEuMDg3LS43MDkgMS4yNzctMi43MTQgMS42NzgtMi4wMy40MDUtLjgzNyAxLjEyNy0uMDYgMS4zMTYuOTQ0LjIyOSAzLjEyNy41NTMgNC42MDItMS40NWwtLjA1OC4yM2MuMzkzLjMwNC42NjkgMS45ODUuNjIzIDMuNTA4LS4wNDcgMS41MjQtLjA3OCAyLjU3LjIzMiAzLjM4Ny4zMS44MTcuNjE5IDIuNjU1IDMuMjU1IDIuMTA3IDIuMjAzLS40NTggMy4zNDUtMS42NDQgMy41MDMtMy42MjMuMTEzLTEuNDA3LjM2OC0xLjE5OS4zODQtMi40NTdsLjIwNS0uNTk1Yy4yMzYtMS45MDcuMDM3LTIuNTIyIDEuMzk0LTIuMjM2bC4zMy4wMjhjMSAuMDQ0IDIuMzA3LS4xNTYgMy4wNzQtLjUwMiAxLjY1Mi0uNzQzIDIuNjMyLTEuOTg1IDEuMDAzLTEuNjU5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xMy41MSA5Ljg4MmMtLjMzNS0uMDQ1LS42MzktLjAwNC0uNzkyLjExYS4yOC4yOCAwIDAgMC0uMTIuMTg3Yy0uMDIuMTMzLjA3Ny4yODIuMTM2LjM1OC4xNjkuMjE2LjQxNC4zNjUuNjU4LjM5OC4wMzUuMDA0LjA3LjAwNy4xMDUuMDA3LjQwNSAwIC43NzQtLjMwNy44MDctLjUzMy4wNC0uMjgzLS4zODMtLjQ3Mi0uNzk1LS41MjdtMTEuMDk5LjAwOWMtLjAzMi0uMjIyLS40NC0uMjg1LS44MjYtLjIzMy0uMzg2LjA1Mi0uNzYuMjItLjczLjQ0My4wMjYuMTczLjM0OC40NjguNzMuNDY4YS43MTguNzE4IDAgMCAwIC4wOTctLjAwNi45NDcuOTQ3IDAgMCAwIC41My0uMjgxYy4xMzUtLjEzOC4yMTMtLjI5MS4xOTktLjM5MVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMzAuOTc1IDE5LjM5N2MtLjE0Mi0uNDE2LS41OTgtLjU1LTEuMzU2LS4zOTgtMi4yNS40NS0zLjA1Ni4xMzktMy4zMjEtLjA1IDEuNzUtMi41ODQgMy4xODktNS43MDggMy45NjUtOC42MjMuMzY4LTEuMzguNTctMi42NjMuNTg3LTMuNzA4LjAxOS0xLjE0Ny0uMTgzLTEuOTktLjU5OC0yLjUwNS0xLjY3NS0yLjA3NS00LjEzNC0zLjE4OS03LjExLTMuMjItMi4wNDctLjAyMi0zLjc3NS40ODYtNC4xMS42MjlhMTAuNTQ5IDEwLjU0OSAwIDAgMC0yLjMxMy0uMjg4Yy0xLjUzNi0uMDI0LTIuODY0LjMzMi0zLjk2MyAxLjA2YTE4LjEzMSAxOC4xMzEgMCAwIDAtMy4yMi0uODJjLTIuNjEtLjQwNy00LjY4My0uMDk4LTYuMTYzLjkxOEMxLjYwOCAzLjYwNS43OTMgNS43NzMuOTUxIDguODM2Yy4wNTMgMS4wMy42NTggNC4yIDEuNjE0IDcuMjM2IDEuMjU4IDMuOTk2IDIuNjI1IDYuMjU3IDQuMDYzIDYuNzIzLjE2OS4wNTQuMzYzLjA5Mi41NzcuMDkyLjUyNSAwIDEuMTY4LS4yMyAxLjgzOC0xLjAxYTY0Ljg5NCA2NC44OTQgMCAwIDEgMi41MzItMi43NzggNC4xOCA0LjE4IDAgMCAwIDEuODIyLjQ3NWwuMDA1LjA0OGMtLjExLjEyNy0uMjE3LjI1NS0uMzIxLjM4NS0uNDQuNTQyLS41MzIuNjU1LTEuOTUuOTM4LS40MDMuMDgtMS40NzMuMjk0LTEuNDg5IDEuMDIyLS4wMTcuNzk1IDEuMjY2IDEuMTMgMS40MTIgMS4xNjUuNTA5LjEyMyAxIC4xODQgMS40NjcuMTg0IDEuMTM4IDAgMi4xNC0uMzYzIDIuOTQtMS4wNjQtLjAyNSAyLjgzNC4wOTcgNS42MjguNDQ4IDYuNDc5LjI4OC42OTYuOTkgMi40IDMuMjA4IDIuMzk5YTUuMyA1LjMgMCAwIDAgMS4wNzgtLjExOWMyLjMxNS0uNDggMy4zMi0xLjQ3MyAzLjcxLTMuNjYuMjA4LTEuMTcuNTY1LTMuOTYxLjczMy01LjQ1OS4zNTQuMTA3LjgxLjE1NiAxLjMwNC4xNTYgMS4wMjkgMCAyLjIxNi0uMjEyIDIuOTYxLS41NDcuODM3LS4zNzcgMi4zNDYtMS4zIDIuMDcyLTIuMTA0Wk0yNS40NjIgOS4yNzhjLS4wMDguNDQyLS4wNy44NDQtLjEzNyAxLjI2Mi0uMDcyLjQ1MS0uMTQ1LjkxNy0uMTY0IDEuNDgyLS4wMTkuNTUuMDUyIDEuMTIzLjEyIDEuNjc2LjE0IDEuMTE4LjI4MiAyLjI2OC0uMjY5IDMuNDAzYTQuMzcgNC4zNyAwIDAgMS0uMjQzLS40ODVjLS4wNjktLjE2MS0uMjE3LS40Mi0uNDIzLS43NzctLjgtMS4zOS0yLjY3My00LjY0OC0xLjcxNC01Ljk3Ny4yODYtLjM5NiAxLjAxLS44MDMgMi44My0uNTg0Wm0tMi4yMDYtNy40OWMyLjY2Ny4wNTggNC43NzcgMS4wMjUgNi4yNyAyLjg3NiAxLjE0NiAxLjQyLS4xMTYgNy44NzktMy43NjcgMTMuNDVsLS4xMTEtLjEzNS0uMDQ2LS4wNTZjLjk0My0xLjUxLjc1OS0zLjAwNi41OTUtNC4zMzEtLjA2OC0uNTQ0LS4xMzItMS4wNTgtLjExNS0xLjU0MS4wMTYtLjUxMS4wODYtLjk1LjE1NC0xLjM3NS4wODItLjUyMi4xNjctMS4wNjMuMTQ0LTEuNzAxYS42ODQuNjg0IDAgMCAwIC4wMTUtLjI0Yy0uMDYtLjYxMS0uNzgtMi40NDEtMi4yNDctNC4wOThhMTAuMDk0IDEwLjA5NCAwIDAgMC0zLjU3Mi0yLjYwNCAxMi40MDcgMTIuNDA3IDAgMCAxIDIuNjgtLjI0NFpNOC4zMzQgMjEuMzA3Yy0uNzM3Ljg2LTEuMjQ2LjY5NS0xLjQxNC42NDEtMS4wOTEtLjM1My0yLjM1Ny0yLjU5LTMuNDc0LTYuMTM2LS45NjYtMy4wNjktMS41My02LjE1NS0xLjU3NS03LjAyLS4xNDEtMi43MzcuNTQzLTQuNjQ0IDIuMDMzLTUuNjY5IDIuNDI2LTEuNjY4IDYuNDE0LS42NyA4LjAxNi0uMTYzLS4wMjMuMDIyLS4wNDcuMDQyLS4wNy4wNjUtMi42MyAyLjU3NS0yLjU2NyA2Ljk3NC0yLjU2IDcuMjQzIDAgLjEwNC4wMDguMjUxLjAyLjQ1My4wNDYuNzQuMTMgMi4xMTctLjA5NSAzLjY3Ny0uMjA5IDEuNDUuMjUyIDIuODY4IDEuMjY0IDMuODkyLjEwNC4xMDUuMjEzLjIwNS4zMjcuMy0uNDUuNDY3LTEuNDMgMS41MDItMi40NzIgMi43MTdabTIuODEtMy42MzVjLS44MTYtLjgyNi0xLjE4Ni0xLjk3NC0xLjAxNy0zLjE1LjIzOC0xLjY0OC4xNS0zLjA4My4xMDMtMy44NTRsLS4wMTYtLjI3N2MuMzg0LS4zMyAyLjE2NS0xLjI1NSAzLjQzNC0uOTczLjU4LjEyOS45MzIuNTExIDEuMDggMS4xNy43NTkgMy40MDYuMSA0LjgyNS0uNDMgNS45NjYtLjEwOS4yMzUtLjIxMi40NTgtLjMuNjg3bC0uMDY4LjE3OGMtLjE3My40NS0uMzM0Ljg2Ny0uNDM0IDEuMjY0YTMuMzI1IDMuMzI1IDAgMCAxLTIuMzUyLTEuMDExWm0uMTMzIDQuNTk0YTIuMDcgMi4wNyAwIDAgMS0uNjE0LS4yNTZjLjExMS0uMDUxLjMxLS4xMi42NTQtLjE5IDEuNjY4LS4zMzIgMS45MjUtLjU2NyAyLjQ4Ny0xLjI2LjEzLS4xNTguMjc1LS4zMzguNDc4LS41NTcuMzAxLS4zMjguNDQtLjI3Mi42OS0uMTcyLjIwMi4wODIuNC4zMjguNDguNTk5LjAzNy4xMjguMDguMzctLjA2LjU2LTEuMTc0IDEuNTk1LTIuODg2IDEuNTc0LTQuMTE1IDEuMjc2Wm04LjcyNSA3Ljg3M2MtMi4wNC40MjQtMi43NjEtLjU4Ni0zLjIzNy0xLjc0LS4zMDgtLjc0NC0uNDU5LTQuMTAyLS4zNTEtNy44MWEuNDM0LjQzNCAwIDAgMC0uMDItLjE0MyAxLjgyMyAxLjgyMyAwIDAgMC0uMDU3LS4yNjJjLS4xNi0uNTQtLjU0OC0uOTktMS4wMTMtMS4xNzgtLjE4NS0uMDc0LS41MjUtLjIxLS45MzMtLjExLjA4Ny0uMzQ3LjIzOC0uNzQuNDAyLTEuMTY1bC4wNjgtLjE3OGMuMDc4LS4yMDIuMTc1LS40MS4yNzctLjYzMi41NTQtMS4xOTQgMS4zMTMtMi44MjkuNDktNi41MjItLjMwOS0xLjM4NC0xLjM0LTIuMDYtMi45MDEtMS45MDMtLjkzNi4wOTQtMS43OTMuNDYtMi4yMi42N2E3LjI1NSA3LjI1NSAwIDAgMC0uMjU1LjEzMmMuMTItMS4zOTQuNTctNCAyLjI1NS01LjY0NyAxLjA2Mi0xLjAzOCAyLjQ3NS0xLjU1IDQuMTk2LTEuNTIzIDMuMzkzLjA1NCA1LjU2OSAxLjc0MiA2Ljc5NiAzLjE1IDEuMDU4IDEuMjExIDEuNjMxIDIuNDMzIDEuODYgMy4wOTEtMS43Mi0uMTctMi44ODkuMTYtMy40ODIuOTgyLTEuMjkgMS43ODcuNzA2IDUuMjU3IDEuNjY1IDYuOTI0LjE3NS4zMDYuMzI3LjU3LjM3NS42ODIuMzEyLjczNC43MTYgMS4yMjQgMS4wMTIgMS41ODIuMDkuMTEuMTc4LjIxNS4yNDUuMzA4LS41MjEuMTQ2LTEuNDU2LjQ4Mi0xLjM3MSAyLjE2NC0uMDY5Ljg0My0uNTU4IDQuNzkzLS44MDYgNi4xODktLjMyOCAxLjg0My0xLjAyOCAyLjUzLTIuOTk1IDIuOTM5Wm04LjUxMy05LjQ0N2MtLjUzMi4yNC0xLjQyNC40Mi0yLjI3LjQ1OC0uOTM1LjA0My0xLjQxMS0uMTAxLTEuNTIzLS4xOS0uMDUzLTEuMDQ4LjM1LTEuMTU3Ljc3NS0xLjI3M2EzLjM1IDMuMzUgMCAwIDAgLjE5NS0uMDU4Yy4wNC4wMzEuMDgyLjA2Mi4xMy4wOTIuNzUuNDgxIDIuMDkxLjUzMyAzLjk4NC4xNTRsLjAyLS4wMDRjLS4yNTUuMjMyLS42OTIuNTQyLTEuMzEuODIxWlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Qb3N0Z3JlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvUHJvbWV0aGV1cyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvUHJvbWV0aGV1cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0U2NTIyQ1wiLFxuICAgIGQ6IFwiTTE1LjkwNy4xODdDNy4xMjIuMTg3IDAgNy4zMDggMCAxNi4wOTNTNy4xMjIgMzIgMTUuOTA3IDMyYzguNzg0IDAgMTUuOTA2LTcuMTIxIDE1LjkwNi0xNS45MDZTMjQuNjkuMTg3IDE1LjkwNy4xODdabTAgMjkuNzdjLTIuNSAwLTQuNTI2LTEuNjctNC41MjYtMy43MjloOS4wNTFjMCAyLjA2LTIuMDI2IDMuNzMtNC41MjUgMy43M1ptNy40NzUtNC45NjNIOC40M3YtMi43MTFoMTQuOTV2Mi43MVptLS4wNTQtNC4xMDdIOC40NzNjLS4wNS0uMDU3LS4xLS4xMTMtLjE0Ny0uMTctMS41My0xLjg1OS0xLjg5MS0yLjgyOS0yLjI0MS0zLjgxOC0uMDA2LS4wMzIgMS44NTUuMzggMy4xNzYuNjc4IDAgMCAuNjc5LjE1NyAxLjY3Mi4zMzgtLjk1My0xLjExOC0xLjUyLTIuNTM5LTEuNTItMy45OTEgMC0zLjE4OSAyLjQ0Ni01Ljk3NSAxLjU2NC04LjIyNy44NTguMDcgMS43NzcgMS44MTIgMS44MzkgNC41MzcuOTEzLTEuMjYyIDEuMjk1LTMuNTY2IDEuMjk1LTQuOTc4IDAtMS40NjMuOTYzLTMuMTYxIDEuOTI3LTMuMjItLjg2IDEuNDE3LjIyMyAyLjYzIDEuMTg0IDUuNjQyLjM2MSAxLjEzMi4zMTUgMy4wMzUuNTk0IDQuMjQzLjA5Mi0yLjUwOC41MjMtNi4xNjcgMi4xMTQtNy40My0uNzAyIDEuNTkxLjEwNCAzLjU4MS42NTUgNC41MzguODg5IDEuNTQ0IDEuNDI4IDIuNzE0IDEuNDI4IDQuOTI2IDAgMS40ODMtLjU0OCAyLjg4LTEuNDcyIDMuOTcxIDEuMDUtLjE5NyAxLjc3Ni0uMzc0IDEuNzc2LS4zNzRsMy40MTEtLjY2NnMtLjQ5NSAyLjAzOC0yLjQgNC4wMDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUHJvbWV0aGV1czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvUmFiYml0bXEgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1JhYmJpdG1xKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjYwXCIsXG4gICAgZDogXCJNMzAuMDgzIDEzLjE5N2gtOS44NzhjLS43OS0uMDg4LTEuMzkxLS43NC0xLjM5MS0xLjUwOFYxLjk3YzAtLjgzLS43MTgtMS40OTUtMS41OTUtMS40OTVoLTMuNDU2Yy0uODg1IDAtMS41OTUuNjcyLTEuNTk1IDEuNDk1djkuODJjLS4wNDMuNzQtLjY5NiAxLjMzOC0xLjQ3OCAxLjQwNkg4LjEwMmMtLjc2LS4wODgtMS4zNDgtLjY4Ni0xLjM5OC0xLjQwNlYxLjk3YzAtLjgzLS43MTgtMS40OTUtMS41OTUtMS40OTVIMS42NTJDLjc2OC40NzYuMDU4IDEuMTQ4LjA1OCAxLjk3djI4LjM1OGMwIC44My43MTcgMS40OTUgMS41OTQgMS40OTVoMjguNDM5Yy44ODQgMCAxLjU5NC0uNjczIDEuNTk0LTEuNDk1VjE0LjY5MmMtLjAwNy0uODI5LS43MTgtMS40OTUtMS42MDItMS40OTVabS00LjU1IDEwLjcyNGMwIC44MjktLjcxOCAxLjQ5NS0xLjU5NSAxLjQ5NUgyMC40OGMtLjg4NCAwLTEuNTk1LS42NzMtMS41OTUtMS40OTV2LTMuMDU4YzAtLjgzLjcxOC0xLjQ5NSAxLjU5NS0xLjQ5NWgzLjQ1N2MuODg0IDAgMS41OTQuNjcyIDEuNTk0IDEuNDk1djMuMDU4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1JhYmJpdG1xOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29SZWRpcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvUmVkaXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMylcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTQxRTExXCIsXG4gICAgZDogXCJNMzAuNTk0IDIwLjc5MWMtMS42ODkuODc1LTEwLjQzOCA0LjQ1MS0xMi4zIDUuNDE2LTEuODYzLjk2Ni0yLjg5OC45NTYtNC4zNy4yNTctMS40NzEtLjY5OS0xMC43ODItNC40MzctMTIuNDYtNS4yMzQtLjgzOC0uMzk5LTEuMjc4LS43MzUtMS4yNzgtMS4wNTJ2LTMuMThzMTIuMTIxLTIuNjIzIDE0LjA3OC0zLjMyYzEuOTU3LS42OTkgMi42MzYtLjcyNCA0LjMwMS0uMTE4IDEuNjY2LjYwNyAxMS42MjMgMi4zOTMgMTMuMjcgMi45OTJsLS4wMDEgMy4xMzVjMCAuMzE0LS4zOC42NTktMS4yNCAxLjEwNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Q4MkMyMFwiLFxuICAgIGQ6IFwiTTMwLjU5NCAxNy42MWMtMS42ODkuODc1LTEwLjQzOCA0LjQ1MS0xMi4zIDUuNDE3LTEuODYzLjk2NS0yLjg5OC45NTYtNC4zNy4yNTYtMS40NzEtLjY5OC0xMC43ODItNC40MzgtMTIuNDYtNS4yMzQtMS42NzYtLjc5Ny0xLjcxMi0xLjM0NS0uMDY0LTEuOTg3IDEuNjQ3LS42NDEgMTAuOTA3LTQuMjUyIDEyLjg2NC00Ljk1IDEuOTU3LS42OTggMi42MzYtLjcyMyA0LjMwMS0uMTE3IDEuNjY2LjYwNyAxMC4zNjMgNC4wNDggMTIuMDA5IDQuNjQ3IDEuNjQ2LjYgMS43MSAxLjA5My4wMiAxLjk2OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E0MUUxMVwiLFxuICAgIGQ6IFwiTTMwLjU5NCAxNS42MDZjLTEuNjg5Ljg3NS0xMC40MzggNC40NS0xMi4zIDUuNDE2LTEuODYzLjk2NS0yLjg5OC45NTYtNC4zNy4yNTctMS40NzEtLjctMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM1LS44MzgtLjM5OC0xLjI3OC0uNzM0LTEuMjc4LTEuMDUxdi0zLjE4UzEyLjMwNyA5LjE5IDE0LjI2NCA4LjQ5MmMxLjk1Ny0uNjk4IDIuNjM2LS43MjMgNC4zMDEtLjExNyAxLjY2Ni42MDYgMTEuNjIzIDIuMzkyIDEzLjI3IDIuOTkxbC0uMDAxIDMuMTM1YzAgLjMxNS0uMzguNjYtMS4yNCAxLjEwNXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Q4MkMyMFwiLFxuICAgIGQ6IFwiTTMwLjU5NCAxMi40MjVjLTEuNjg5Ljg3NS0xMC40MzggNC40NS0xMi4zIDUuNDE2LTEuODYzLjk2Ni0yLjg5OC45NTYtNC4zNy4yNTctMS40NzEtLjY5OS0xMC43ODItNC40MzgtMTIuNDYtNS4yMzUtMS42NzYtLjc5Ni0xLjcxMi0xLjM0NS0uMDY0LTEuOTg2IDEuNjQ3LS42NDEgMTAuOTA3LTQuMjUzIDEyLjg2NC00Ljk1IDEuOTU3LS42OTggMi42MzYtLjcyNCA0LjMwMS0uMTE3IDEuNjY2LjYwNiAxMC4zNjMgNC4wNDcgMTIuMDA5IDQuNjQ2IDEuNjQ2LjYgMS43MSAxLjA5NC4wMiAxLjk2OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E0MUUxMVwiLFxuICAgIGQ6IFwiTTMwLjU5NCAxMC4yMjhjLTEuNjg5Ljg3NS0xMC40MzggNC40NTEtMTIuMyA1LjQxNy0xLjg2My45NjUtMi44OTguOTU1LTQuMzcuMjU2LTEuNDcxLS42OTktMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM0Qy42MjcgMTAuMjY4LjE4NyA5LjkzMi4xODcgOS42MTV2LTMuMThzMTIuMTIxLTIuNjIzIDE0LjA3OC0zLjMyYzEuOTU3LS42OTkgMi42MzYtLjcyNCA0LjMwMS0uMTE3IDEuNjY2LjYwNiAxMS42MjMgMi4zOTEgMTMuMjcgMi45OWwtLjAwMSAzLjEzNmMwIC4zMTQtLjM4LjY1OS0xLjI0IDEuMTA0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRDgyQzIwXCIsXG4gICAgZDogXCJNMzAuNTk0IDcuMDQ3Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUxLTEyLjMgNS40MTctMS44NjMuOTY1LTIuODk4Ljk1NS00LjM3LjI1Ni0xLjQ3MS0uNjk5LTEwLjc4Mi00LjQzNy0xMi40Ni01LjIzNEMtLjIxMSA2LjY4OS0uMjQ3IDYuMTQgMS40IDUuNDk5UzEyLjMwNyAxLjI0NyAxNC4yNjQuNTVjMS45NTctLjcgMi42MzYtLjcyNCA0LjMwMS0uMTE4IDEuNjY2LjYwNyAxMC4zNjMgNC4wNDggMTIuMDA5IDQuNjQ3IDEuNjQ2LjYgMS43MSAxLjA5My4wMiAxLjk2OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwibTIwLjE1NyAzLjk4NS0yLjc0Mi4yODMtLjYxNCAxLjQ2OC0uOTkyLTEuNjM4LTMuMTY2LS4yODMgMi4zNjItLjg0Ny0uNzA4LTEuMyAyLjIxMi44NiAyLjA4NS0uNjgtLjU2MyAxLjM0NXptLTMuNTIgNy4xMjMtNS4xMTgtMi4xMSA3LjMzNC0xLjExOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcImVsbGlwc2VcIiwge1xuICAgIGN4OiA5LjU0MSxcbiAgICBjeTogNi4zMTEsXG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgcng6IDMuOTIsXG4gICAgcnk6IDEuNTFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM3QTBDMDBcIixcbiAgICBkOiBcIm0yMy4zOTggNC4zODYgNC4zNCAxLjcwNS00LjMzNiAxLjcwM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0FEMjExNVwiLFxuICAgIGQ6IFwibTE4LjU5NiA2LjI3NCA0LjgwMi0xLjg4OC4wMDQgMy40MDgtLjQ3MS4xODN6XCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1JlZGlzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29TZWN1cml0eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvU2VjdXJpdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQTc0NEVcIixcbiAgICBkOiBcIk05IDcuMDA4VjBoMjB2MTYuNzQ0YzAgMy45MTMtNi4zNzggNi40NzctOS4wMTUgNy4yNTZWNy4wMDhIOVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzFEQkFCMFwiLFxuICAgIGQ6IFwiTTMgMjAuMDczVjEwaDE0djIyQzcuNjY3IDI3Ljk4IDMgMjQuMDA0IDMgMjAuMDczWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMGg4djE0Yy0yLjk4My0xLjE0LTgtMy43NTYtOC03LjA0M1YxMFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2VjdXJpdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1NpdGVTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb1NpdGVTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiLFxuICAgIGQ6IFwiTTI3LjA1IDEwaC03LjM0bC0xMSAyMnMxNS42OTYtNC45NiAyMS44NTUtMTYuMDc2QzMyLjAzNyAxMy4yNjYgMzAuMDg4IDEwIDI3LjA1IDEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0yMS4zNTUgMEg3LjUzM0wuNDI3IDE0LjIxMUMtLjkwMyAxNi44NzEgMS4wMzIgMjAgNC4wMDQgMjBoNy4zNTFsMTAtMjBaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjUzMyAxMCAuNDI4IDE0LjIxMUMtLjkwMyAxNi44NzEgMS4wMzIgMjAgNC4wMDUgMjBoNy4zNWw1LTEwSDIuNTMzWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2l0ZVNlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvU2tldGNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Ta2V0Y2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZBRTAwXCIsXG4gICAgZDogXCJNMTYgMzIgMCAxMS40NTRsNi45MzEtMTAuMzhMMTYgMGw5LjA2OSAxLjA3NEwzMiAxMS40NTR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFQzZDMDBcIixcbiAgICBkOiBcIk0xNiAzMiAwIDExLjQ1NGgzMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGQUUwMFwiLFxuICAgIGQ6IFwiTTE2IDMyIDYuNDc3IDExLjQ1NGgxOS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkVGQjRcIixcbiAgICBkOiBcIk0xNiAwIDYuNDc3IDExLjQ1NGgxOS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkFFMDBcIixcbiAgICBkOiBcIk02LjkzMiAxLjA3NCAzLjM2OSA2LjMuMDAxIDExLjQ1NGg2LjU0MnpNMjUuMDY5IDEuMDc0IDI4LjYzMiA2LjMgMzIgMTEuNDU0aC02LjU0MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFRDMwNVwiLFxuICAgIGQ6IFwibTYuOTMxIDEuMDc0LS40NTMgMTAuMzhMMTYgMHpNMjUuMDY5IDEuMDc0bC40NTMgMTAuMzhMMTYgMHpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2tldGNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29TbGFjayA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvU2xhY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTAxRTVBXCIsXG4gICAgZDogXCJNNi44MTMgMjAuMThhMy4zMzcgMy4zMzcgMCAwIDEtMy4zMyAzLjMzIDMuMzM3IDMuMzM3IDAgMCAxLTMuMzI4LTMuMzMgMy4zMzcgMy4zMzcgMCAwIDEgMy4zMjktMy4zMjloMy4zMjl2My4zM3ptMS42NzcgMGEzLjMzNyAzLjMzNyAwIDAgMSAzLjMzLTMuMzI5IDMuMzM3IDMuMzM3IDAgMCAxIDMuMzI4IDMuMzN2OC4zMzVhMy4zMzcgMy4zMzcgMCAwIDEtMy4zMjkgMy4zMjkgMy4zMzcgMy4zMzcgMCAwIDEtMy4zMjktMy4zM1YyMC4xOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzM2QzVGMFwiLFxuICAgIGQ6IFwiTTExLjgyIDYuODEzYTMuMzM3IDMuMzM3IDAgMCAxLTMuMzMtMy4zM0EzLjMzNyAzLjMzNyAwIDAgMSAxMS44Mi4xNTZhMy4zMzcgMy4zMzcgMCAwIDEgMy4zMjggMy4zMjl2My4zMjlIMTEuODJ6bTAgMS42NzdhMy4zMzcgMy4zMzcgMCAwIDEgMy4zMjggMy4zMyAzLjMzNyAzLjMzNyAwIDAgMS0zLjMyOSAzLjMyOEgzLjQ4NGEzLjMzNyAzLjMzNyAwIDAgMS0zLjMzLTMuMzI5IDMuMzM3IDMuMzM3IDAgMCAxIDMuMzMtMy4zMjloOC4zMzV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMyRUI2N0RcIixcbiAgICBkOiBcIk0yNS4xODcgMTEuODJhMy4zMzcgMy4zMzcgMCAwIDEgMy4zMjktMy4zMyAzLjMzNyAzLjMzNyAwIDAgMSAzLjMyOSAzLjMzIDMuMzM3IDMuMzM3IDAgMCAxLTMuMzMgMy4zMjhoLTMuMzI4VjExLjgyem0tMS42NzggMGEzLjMzNyAzLjMzNyAwIDAgMS0zLjMyOSAzLjMyOCAzLjMzNyAzLjMzNyAwIDAgMS0zLjMyOS0zLjMyOVYzLjQ4NGEzLjMzNyAzLjMzNyAwIDAgMSAzLjMzLTMuMzMgMy4zMzcgMy4zMzcgMCAwIDEgMy4zMjggMy4zM3Y4LjMzNXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0VDQjIyRVwiLFxuICAgIGQ6IFwiTTIwLjE4IDI1LjE4N2EzLjMzNyAzLjMzNyAwIDAgMSAzLjMzIDMuMzI5IDMuMzM3IDMuMzM3IDAgMCAxLTMuMzMgMy4zMjkgMy4zMzcgMy4zMzcgMCAwIDEtMy4zMjktMy4zM3YtMy4zMjhoMy4zM3ptMC0xLjY3OGEzLjMzNyAzLjMzNyAwIDAgMS0zLjMyOS0zLjMyOSAzLjMzNyAzLjMzNyAwIDAgMSAzLjMzLTMuMzI5aDguMzM1YTMuMzM3IDMuMzM3IDAgMCAxIDMuMzI5IDMuMzMgMy4zMzcgMy4zMzcgMCAwIDEtMy4zMyAzLjMyOEgyMC4xOHpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2xhY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1VwdGltZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvVXB0aW1lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjM0VCRUIwXCIsXG4gICAgZDogXCJNMTkgMTVjMCA3LjA2Mi00Ljg4OCAxMi45NjktMTEuNDYgMTQuNTYzQTE1LjkxNCAxNS45MTQgMCAwIDAgMTYgMzJjOC44MzYgMCAxNi03LjE2MyAxNi0xNnYtM2wtNi41LTYtNi41IDZ2MlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzA3Q1wiLFxuICAgIGQ6IFwiTTYuODMzIDI2LjY0NmExMS45NTQgMTEuOTU0IDAgMCAwIDguNTQ0LTcuODM0QTEyLjQzIDEyLjQzIDAgMCAxIDEzIDExLjVWLjI5MkM1LjYgMS42OTYgMCA4LjE5IDAgMTYuMDAyYzAgNC4zNTggMS43NSA4LjMwNiA0LjU3NyAxMS4xOTJsMi4yNTYtLjU0N1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjM2MiAyMy4wMmMtMS40OTQuNjMtMy4xMzcuOTgtNC44NjEuOThhMTIuNDQzIDEyLjQ0MyAwIDAgMS03Ljg1Mi0yLjc4IDE1LjA0MiAxNS4wNDIgMCAwIDEtMTAuMTEgOC4zNDNBMTUuOTEgMTUuOTEgMCAwIDAgMTYuMDAyIDMyYzYuMzE0IDAgMTEuNzU4LTMuNjY5IDE0LjM2LTguOThcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvVXB0aW1lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0xMS4wNSAxLjk1IDYuODA4IDYuMTkyIDE2IDE1LjM4NWw5LjE5Mi05LjE5M0wyMC45NSAxLjk1IDE2IDYuOWwtNC45NS00Ljk1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkE3NDRFXCIsXG4gICAgZDogXCJNNC42ODYgMTkuNjI3YTggOCAwIDAgMSAwLTExLjMxM0wxNiAxOS42Mjd2MTEuMzE0TDQuNjg2IDE5LjYyN1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzM0Mzc0MVwiLFxuICAgIGQ6IFwiTTI3LjMxNCA4LjMxNGE4IDggMCAwIDEgMCAxMS4zMTNMMTYgMzAuOTQxVjE5LjYyN0wyNy4zMTQgOC4zMTRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1dlYmhvb2sgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1dlYmhvb2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQzczQTYzXCIsXG4gICAgZDogXCJNMTQuOTQzIDEzLjU2M2MtMS4zMjcgMi4yMy0yLjU5NyA0LjM4OC0zLjg5NCA2LjUzMS0uMzM0LjU1LS40OTguOTk4LS4yMzIgMS42OTguNzM0IDEuOTMxLS4zMDIgMy44MTEtMi4yNSA0LjMyMS0xLjgzNy40ODItMy42MjctLjcyNi0zLjk5Mi0yLjY5Mi0uMzIzLTEuNzQxIDEuMDI4LTMuNDQ4IDIuOTQ4LTMuNzIuMTYtLjAyMy4zMjUtLjAyNi41OTUtLjA0NmwyLjkyLTQuODk2QzkuMiAxMi45MzMgOC4xMDggMTAuOCA4LjM1IDguMTU0Yy4xNzEtMS44Ny45MDctMy40ODYgMi4yNS00LjgxYTcuNjM5IDcuNjM5IDAgMCAxIDkuNTMxLTFjMi45MSAxLjg3IDQuMjQ0IDUuNTEyIDMuMTA3IDguNjI5bC0yLjY2OC0uNzI0Yy4zNTctMS43MzMuMDkzLTMuMjktMS4wNzYtNC42MjMtLjc3Mi0uODgtMS43NjMtMS4zNDEtMi44OS0xLjUxMS0yLjI1OC0uMzQxLTQuNDc2IDEuMTEtNS4xMzQgMy4zMjctLjc0OCAyLjUxNi4zODMgNC41NzIgMy40NzMgNi4xMjFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0QjRCNEJcIixcbiAgICBkOiBcIm0xOC43MyAxMC45MjYgMi44MjMgNC45OGM0Ljc1My0xLjQ3IDguMzM2IDEuMTYgOS42MjIgMy45NzcgMS41NTIgMy40MDIuNDkxIDcuNDMyLTIuNTU4IDkuNTMxLTMuMTMgMi4xNTUtNy4wODkgMS43ODctOS44NjItLjk4MWwyLjE3Ni0xLjgyMWMyLjczOSAxLjc3NCA1LjEzNSAxLjY5IDYuOTEzLS40MWE0Ljc2NiA0Ljc2NiAwIDAgMC0uMDc3LTYuMjE5Yy0xLjgtMi4wMjUtNC4yMTMtMi4wODYtNy4xMy0uMTQzLTEuMjA5LTIuMTQ2LTIuNDQtNC4yNzUtMy42MS02LjQzNi0uMzk2LS43MjktLjgzMi0xLjE1Mi0xLjcyMi0xLjMwNi0xLjQ4Ny0uMjU3LTIuNDQ2LTEuNTM0LTIuNTA0LTIuOTY0YTMuMjU4IDMuMjU4IDAgMCAxIDIuMDgtMy4xOTIgMy4yNDMgMy4yNDMgMCAwIDEgMy42NzEgMS4wMDJjLjcxLjg5Ni45MzUgMS45MDUuNTYyIDMuMDEtLjEwNC4zMDktLjIzOC42MDctLjM4NC45NzJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0QTRBNEFcIixcbiAgICBkOiBcIk0yMC45NjMgMjQuNDAxaC01LjcyYy0uNTUgMi4yNTYtMS43MzQgNC4wNzctMy43NzUgNS4yMzUtMS41ODYuOS0zLjI5NiAxLjIwNS01LjExNi45MTFDMyAzMC4wMDcuMjYgMjYuOTkuMDE5IDIzLjU5M2MtLjI3My0zLjg0OCAyLjM3Mi03LjI2OCA1Ljg5OC04LjAzNmwuNzMyIDIuNjU4Yy0zLjIzNCAxLjY1LTQuMzUzIDMuNzMtMy40NDggNi4zMy43OTcgMi4yODcgMy4wNiAzLjU0MSA1LjUxOCAzLjA1NiAyLjUxLS40OTUgMy43NzYtMi41ODEgMy42MjEtNS45MjkgMi4zOCAwIDQuNzYxLS4wMjQgNy4xNC4wMTIuOTMuMDE1IDEuNjQ4LS4wODEgMi4zNDgtLjkgMS4xNTItMS4zNDkgMy4yNzMtMS4yMjcgNC41MTUuMDQ2IDEuMjY4IDEuMzAxIDEuMjA3IDMuMzk1LS4xMzUgNC42NDFhMy4yMzYgMy4yMzYgMCAwIDEtNC41NTMtLjE1N2MtLjI0OS0uMjY3LS40NDUtLjU4NS0uNjkyLS45MTNaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1dlYmhvb2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1dpbmRvd3MgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1dpbmRvd3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEFERUZcIixcbiAgICBkOiBcIm0wIDQuNTEgMTIuOTc3LTEuNzY4LjAwNiAxMi41MTgtMTIuOTcxLjA3NEwwIDQuNTFabTEyLjk3IDEyLjE5Mi4wMTEgMTIuNTI5LTEyLjk3LTEuNzg0LS4wMDItMTAuODI5IDEyLjk2Mi4wODRabTEuNTc0LTE0LjE5TDMxLjc1MSAwdjE1LjFsLTE3LjIwNy4xMzdWMi41MTFabTE3LjIxIDE0LjMwOC0uMDAzIDE1LjAzMy0xNy4yMDctMi40MjktLjAyNC0xMi42MzIgMTcuMjM1LjAyOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29XaW5kb3dzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb1dvcmtwbGFjZVNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGQ6IFwiTTE3LjU1NyA1LjA1Yy4xNy0uMjAyLjQ1Ny0uNTEyLjg2LS45M0MxOS40ODMgMy4wMTcgMjEuODI4IDEgMjMuODAxIDFIMzB2MzBoLTYuMmMtMS45NzIgMC0zLjk5NS0xLjQ0OS01LjM4My0zLjEwNmwtLjc2NC0xLjA1MiAyLjc1LTMuNDc3YzMuNDYyLTQuMzc2IDMuNDYzLTEwLjMzMi4wMDEtMTQuNzA3TDE3LjU1NyA1LjA1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA0RTk4XCIsXG4gICAgZDogXCJNMiAzMVYxaDUuODFjMS43MSAwIDMuMzUuNzg2IDQuMzg3IDIuMWw1Ljg1NSA3LjQyYzIuNTk4IDMuMjgzIDIuNTk4IDcuNjk4LS4wMDIgMTAuOTgzbC01Ljg1NSA3LjQwM0MxMS4xNTggMzAuMjE3IDkuNTIgMzEgNy44MTUgMzFIMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjM4NCAyNC44OSAxMi4xNSAyMS43Yy0yLjg2OC0zLjMxOC0yLjg2OC04LjIyLjAwMi0xMS4zMjIgMS41MzUtMS42MzkgMi42MTEtMi43MTggMy4yMy0zLjIzOGwyLjY3IDMuMjM4YzIuNjM3IDMuMzg1IDIuNTc1IDcuOTg3LS4wNjIgMTEuMzc0bC0yLjYwNyAzLjEzN1pcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ3N0YXNoRmlsdGVyID0gZnVuY3Rpb24gRXVpSWNvbkxvZ3N0YXNoRmlsdGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy45MTQgMWMtMy42IDAtNS44OTcgMS4xMTEtNS44OTcgMS44NzYgMCAuNzY2IDIuMjk3IDEuODc3IDUuODk3IDEuODc3czUuODk3LTEuMTExIDUuODk3LTEuODc3QzEzLjgxMSAyLjExMSAxMS41MTQgMSA3LjkxNCAxbTMuOTggNy45ODhjLTEuMTg3LjMzMS0yLjYwMS41MDItMy45OC41MDItMS4zODMgMC0yLjgwMS0uMTcyLTMuOTkxLS41MDVsMi44NjMgMy4yNDJ2Mi41MTVjLjEzNi4wOC41MTUuMjE0IDEuMTI4LjIxNC42MSAwIC45ODktLjEzMyAxLjEyNi0uMjEzdi0yLjUxNWwyLjg1NC0zLjI0Wm0yLjM5NC0xLjIwNi00LjI0OCA0LjgyM3YyLjI0NmguMDA0YzAgLjc2My0xLjA2OSAxLjEwNS0yLjEzIDEuMTA1LTEuMDYgMC0yLjEzLS4zNDItMi4xMy0xLjEwNWguMDAydi0yLjI0NUwxLjMyMSA3LjU1bC4wMS0uMDA4QTEuNTMgMS41MyAwIDAgMSAxIDYuNjA3VjIuNzhoLjAyQzEuMTQuOTczIDQuNjI3IDAgNy45MTMgMGMzLjI4NiAwIDYuNzc0Ljk3MyA2Ljg5NCAyLjc4aC4wMnYzLjgyN2MwIC4zNDMtLjEyLjY1Ny0uMzM1Ljk0MWwtLjAwMy4wMDRjLS4wNi4wNzktLjEyOC4xNTUtLjIwMi4yM1ptLS41NzgtLjg1NmEuNTYuNTYgMCAwIDAgLjExOC0uMzE5VjQuNDExYy0xLjI4OC44NzktMy42NDkgMS4zNDItNS45MTQgMS4zNDJDNS42NSA1Ljc1MyAzLjI4OCA1LjI5IDIgNC40MTF2Mi4xOTZDMiA3LjM3NSA0LjMwNCA4LjQ5IDcuOTE0IDguNDljMi44NzkgMCA0LjkyNy0uNzA5IDUuNjM5LTEuMzg1bC4xNTctLjE4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hGaWx0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nc3Rhc2hJZiA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaElmKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtNi45MTggOS43OTktNC44MiA0LjgxOSAyLjg4LS40My4xNDguOTg3TDAgMTUuOTQzbC43NjgtNS4xMjYuOTg4LjE0OC0uNDUzIDMuMDMzIDQuOTM2LTQuOTM1YTIuMDAzIDIuMDAzIDAgMCAxIDEuMjY1LTIuODg1VjBoMXY2LjE3OGEyLjAwMyAyLjAwMyAwIDAgMSAxLjI2MyAyLjg4NGw0Ljg2NSA0Ljg2Ni0uNDQzLTIuOTYzLjk4OC0uMTQ3Ljc2OCA1LjEyNi01LjEyNy0uNzY5LjE1LS45ODggMi45NS40NDEtNC44My00LjgzYy0uMzEyLjIwMy0uNjg1LjMyLTEuMDg1LjMyLS40IDAtLjc3My0uMTE3LTEuMDg1LS4zMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ3N0YXNoSWY7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nc3Rhc2hJbnB1dCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaElucHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS43NDcgMTAuOTkyaDEzLjFhLjEyMy4xMjMgMCAwIDAgLjEyMi0uMTIzVjguNTFhLjEyMi4xMjIgMCAwIDAtLjEyMi0uMTIySDEuMTIyQS4xMjIuMTIyIDAgMCAwIDEgOC41MXYyLjM2YzAgLjA2Ni4wNTUuMTIyLjEyMi4xMjJoLjYyNVptMTIuMDExIDFIMi4yMVYxNmgtMXYtNC4wMDhoLS4wODhBMS4xMjQgMS4xMjQgMCAwIDEgMCAxMC44N1Y4LjUxYzAtLjYyLjUwMy0xLjEyMiAxLjEyMi0xLjEyMmgxMy43MjVjLjYyIDAgMS4xMjIuNTAyIDEuMTIyIDEuMTIydjIuMzZjMCAuNjE4LS41MDMgMS4xMjItMS4xMjIgMS4xMjJoLS4wODlWMTZoLTF2LTQuMDA4Wm0tNi4yNy03LjQ4N1YwaDF2NC41MjlsMi40MDctMi4yNjIuNjg1LjczTDggNi4zNTYgNC40MiAyLjk5NWwuNjg1LS43MjkgMi4zODMgMi4yNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ3N0YXNoSW5wdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nc3Rhc2hPdXRwdXQgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hPdXRwdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjIxIDQuMDA4SDEzLjc2VjBoMXY0LjAwOGguMDg4Yy42MTkgMCAxLjEyMi41MDQgMS4xMjIgMS4xMjNWNy40OWMwIC42Mi0uNTAzIDEuMTIyLTEuMTIyIDEuMTIySDEuMTIyQTEuMTIyIDEuMTIyIDAgMCAxIDAgNy40OVY1LjEzYzAtLjYxOC41MDMtMS4xMjIgMS4xMjItMS4xMjJoLjA4OVYwaDF2NC4wMDhabTExLjU0OSAxSDEuMTJBLjEyMy4xMjMgMCAwIDAgMSA1LjEzVjcuNDljMCAuMDY4LjA1NS4xMjIuMTIyLjEyMmgxMy43MjVhLjEyMi4xMjIgMCAwIDAgLjEyMi0uMTIyVjUuMTNhLjEyMy4xMjMgMCAwIDAtLjEyMi0uMTIyaC0xLjA4OFptLTUuMzAxIDkuMDk3IDIuNDA1LTIuMjYuNjg2LjcyOC0zLjU4IDMuMzYzLTMuNTgtMy4zNjMuNjg2LS43MjggMi4zODMgMi4yNFY5LjU3N2gxdjQuNTI4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hPdXRwdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nc3Rhc2hRdWV1ZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaFF1ZXVlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMzM5IDE1LjQ2NEg0Ljc3YTMuMjQ4IDMuMjQ4IDAgMCAxLTMuMjQ1LTMuMjQ0VjQuNTQ5SDB2LTFoMi41MjZ2OC42N2EyLjI0NyAyLjI0NyAwIDAgMCAyLjI0NSAyLjI0NWg2LjU2OGEyLjI0NyAyLjI0NyAwIDAgMCAyLjI0NC0yLjI0NFYzLjU0OWgyLjQ1NXYxaC0xLjQ1NXY3LjY3YTMuMjQ3IDMuMjQ3IDAgMCAxLTMuMjQ0IDMuMjQ1Wm0uNTEzLTUuOTYydjEuMDk1bC0zLjg0OCAxLjcyLTMuODUtMS43MlY5LjUwMmwzLjg1IDEuNzIgMy44NDgtMS43MlptMC00LjI1MXYxLjA5NWwtMy44NDggMS43Mi0zLjg1LTEuNzJWNS4yNWwzLjg1IDEuNzIgMy44NDgtMS43MlptMC00LjI1MXYxLjA5NWwtMy44NDggMS43Mi0zLjg1LTEuNzJWMWwzLjg1IDEuNzJMMTEuODUyIDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dzdGFzaFF1ZXVlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1hZ25ldCA9IGZ1bmN0aW9uIEV1aUljb25NYWduZXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjU1MiAxMC43MWEzLjAwOCAzLjAwOCAwIDAgMCA0LjE5LjczOGwxLjY0Mi0xLjE1IDEuMTUgMS42NDItMS42NDMgMS4xNWE1LjAxMyA1LjAxMyAwIDEgMS01Ljc1LTguMjEybDEuNjQyLTEuMTUgMS4xNSAxLjY0My0xLjY0MiAxLjE1YTMuMDA3IDMuMDA3IDAgMCAwLS43MzkgNC4xODlabTguMjk2LTIuMTM3IDEuMTUgMS42NDMtMS42NDMgMS4xNDktMS4xNS0xLjY0MiAxLjY0My0xLjE1Wm0tNC42LTYuNTcxIDEuMTUgMS42NDMtMS42NDMgMS4xNS0xLjE1LTEuNjQyIDEuNjQyLTEuMTUxWm0xLjk3IDEuMDY4TDkuMDcgMS40MjhhMS4wMDMgMS4wMDMgMCAwIDAtMS4zOTctLjI0NkwzLjU2NiA0LjA1N0E1Ljk5NSA1Ljk5NSAwIDAgMCAxLjA5MiA3Ljk0YTUuOTkzIDUuOTkzIDAgMCAwIC45OTYgNC40OTUgNS45OSA1Ljk5IDAgMCAwIDMuODgzIDIuNDczIDUuOTkxIDUuOTkxIDAgMCAwIDQuNDk1LS45OTZsNC4xMDctMi44NzVjLjQ1NC0uMzE4LjU2My0uOTQzLjI0Ni0xLjM5NmwtMS4xNS0xLjY0M2ExLjAwMiAxLjAwMiAwIDAgMC0xLjM5Ni0uMjQ2bC00LjEwNyAyLjg3NWEyLjAwMiAyLjAwMiAwIDAgMS0xLjQ5OC4zMzIgMiAyIDAgMCAxLTEuNjI3LTIuMzIzYy4wOS0uNTA1LjM3MS0uOTc2LjgyNC0xLjI5NGw0LjEwNy0yLjg3NmMuNDU0LS4zMTcuNTY0LS45NDIuMjQ2LTEuMzk2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWFnbmV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb24gPSBmdW5jdGlvbiBFdWlJY29uTWFnbmlmeVdpdGhFeGNsYW1hdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTE1LjE0MyAxNS44NS0zLjg3Mi0zLjg3MmEuNS41IDAgMCAxLS4wMzQtLjczOCA2LjAxIDYuMDEgMCAwIDAgMC04LjQ4NiA2LjAwNCA2LjAwNCAwIDAgMC04LjQ4NCAwIDYuMDEgNi4wMSAwIDAgMCAwIDguNDg2IDUuOTYgNS45NiAwIDAgMCA0LjI0MiAxLjc1Ny41LjUgMCAwIDEgMCAxIDYuOTU1IDYuOTU1IDAgMCAxLTQuOTQ5LTIuMDVjLTIuNzI4LTIuNzMtMi43MjgtNy4xNzEgMC05LjkgMi43MjgtMi43MyA3LjE2OC0yLjczIDkuODk4IDAgMi42MDkgMi42MSAyLjcyMyA2Ljc4NS4zNDIgOS41MzJsMy41NjUgMy41NjRhLjUwMi41MDIgMCAwIDEtLjcwOC43MDhaTTYuMjU0IDNsLjI3NyA1LjA2M2guOTM1TDcuNzU0IDNoLTEuNVptLjIyMiA3LjU0OGEuNzI3LjcyNyAwIDAgMCAuNTMzLjIyMi43MTcuNzE3IDAgMCAwIC41Mi0uMjIuNzE1LjcxNSAwIDAgMCAuMjI1LS41My43MTYuNzE2IDAgMCAwLS4yMjItLjUzNC43MjQuNzI0IDAgMCAwLS41MjMtLjIxNi43MzEuNzMxIDAgMCAwLS41MzMuMjE5LjcxOS43MTkgMCAwIDAtLjIyMi41M2MwIC4yMDUuMDc0LjM4LjIyMi41MjlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1hZ25pZnlXaXRoTWludXMgPSBmdW5jdGlvbiBFdWlJY29uTWFnbmlmeVdpdGhNaW51cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA2YS41LjUgMCAwIDEgMCAxaC02YS41LjUgMCAwIDEgMC0xaDZabS43NCA0Ljc0YzAtLjExNy4wNC0uMjI1LjEwNy0uMzFBNS40NzggNS40NzggMCAwIDAgMTIgNi41IDUuNSA1LjUgMCAxIDAgNi41IDEyYS41LjUgMCAxIDEgMCAxIDYuNSA2LjUgMCAxIDEgNC45MzYtMi4yN2w0LjQxOSA0LjQxOGEuNS41IDAgMCAxLS43MDcuNzA3bC00Ljc2OC00Ljc2OGEuNDk5LjQ5OSAwIDAgMS0uMTQtLjM0N1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1hZ25pZnlXaXRoTWludXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWFnbmlmeVdpdGhQbHVzID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25pZnlXaXRoUGx1cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgNmgyLjVhLjUuNSAwIDAgMSAwIDFIN3YyLjVhLjUuNSAwIDAgMS0xIDBWN0gzLjVhLjUuNSAwIDAgMSAwLTFINlYzLjVhLjUuNSAwIDAgMSAxIDBWNlptMy4yNCA0Ljc0YzAtLjExNy4wNC0uMjI1LjEwNy0uMzFBNS40NzggNS40NzggMCAwIDAgMTIgNi41IDUuNSA1LjUgMCAxIDAgNi41IDEyYS41LjUgMCAxIDEgMCAxIDYuNSA2LjUgMCAxIDEgNC45MzYtMi4yN2w0LjQxOSA0LjQxOGEuNS41IDAgMCAxLS43MDcuNzA3bC00Ljc2OC00Ljc2OGEuNDk5LjQ5OSAwIDAgMS0uMTQtLjM0N1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1hZ25pZnlXaXRoUGx1czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NYXBNYXJrZXIgPSBmdW5jdGlvbiBFdWlJY29uTWFwTWFya2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41NSAxNC4yMjRhLjUwMi41MDIgMCAwIDAgLjg5NyAwbDQtOGEuNS41IDAgMCAwIC4wNTMtLjIzNSA0LjY3MiA0LjY3MiAwIDAgMC0uMDg0LS43MDUgNS41MzggNS41MzggMCAwIDAtLjUwNS0xLjUxMkMxMS4xODkgMi4zNjIgOS45MDYgMS41IDggMS41Yy0xLjkwNiAwLTMuMTkuODYyLTMuOTEgMi4yNzItLjI0OC40ODUtLjQxLjk5OC0uNTA2IDEuNTEyLS4wNTguMzEtLjA4LjU1NC0uMDg0LjcwNWEuNS41IDAgMCAwIC4wNTMuMjM1bDMuOTk3IDhaTTggNWExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJabS0zLjQ5My44OTVjLjAwOS0uMTA2LjAyNy0uMjUzLjA2LS40MjkuMDc5LS40MjQuMjEzLS44NDguNDEzLTEuMjM4QzUuNTM3IDMuMTM4IDYuNDg3IDIuNSA4IDIuNWMxLjUxMyAwIDIuNDYzLjYzOCAzLjAyIDEuNzI4LjIuMzkuMzM0LjgxNC40MTMgMS4yMzguMDMzLjE3Ni4wNTEuMzIzLjA2LjQzTDggMTIuODgxIDQuNTA3IDUuODk1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWFwTWFya2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1lbW9yeSA9IGZ1bmN0aW9uIEV1aUljb25NZW1vcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDEwaDJWNkg3ek0zIDEwaDJWNkgzek0xMS4wMjUgMTBoMlY2aC0yek0zLjUgMTMuNzVoMXYtMi40aC0xek02LjE3NSAxMy43NWgxLjAwMXYtMi40SDYuMTc1ek04Ljg1IDEzLjc1aDF2LTIuNGgtMXpNMTEuNTI1IDEzLjc1aDF2LTIuNGgtMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgM3Y3LjA1aDF2My42OThoMXYtMy42OTloMTJ2My42OTloMXYtMy42OTloMVYzSDBabTEgNmgxNFY0SDF2NVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbW9yeTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NZW51ID0gZnVuY3Rpb24gRXVpSWNvbk1lbnUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDJoMTZ2MkgwVjJabTAgNWgxNnYySDBWN1ptMTYgNUgwdjJoMTZ2LTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZW51OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1lbnVEb3duID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVEb3duKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA3LjVjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwIDEtLjQ4Ny0uNDEyTDMgNy41YzAtLjI3Ni4yMTYtLjUuNDk1LS41aDIuMDFjLjI0MyAwIC40NDUuMTgzLjQ4Ny40MTJMNiA3LjVaTTMuNTEgNGEuNTEzLjUxMyAwIDAgMS0uNTAyLS40MTJMMyAzLjVjMC0uMjc2LjIyOC0uNS41MS0uNWg4Ljk4Yy4yNSAwIC40NTkuMTgzLjUwMi40MTJMMTMgMy41YzAgLjI3Ni0uMjI4LjUtLjUxLjVIOC40OTN2Ny43OTJsMi4wNi0yLjA2YS41LjUgMCAxIDEgLjcwNy43MDdMOS4xNCAxMi41NkExLjQ5NiAxLjQ5NiAwIDAgMSA4LjAyNiAxM0w3Ljk5MyAxM2EuNTAxLjUwMSAwIDAgMS0uMTE4LS4wMTQgMS40OTMgMS40OTMgMCAwIDEtLjg1Ny0uNDI2bC0yLjEyMi0yLjEyYS41LjUgMCAwIDEgLjcwOC0uNzA4bDEuODg5IDEuODlWNEgzLjUxWk0xMyA3LjVjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwIDEtLjQ4Ny0uNDEyTDEwIDcuNWMwLS4yNzYuMjE2LS41LjQ5NS0uNWgyLjAxYy4yNDMgMCAuNDQ1LjE4My40ODcuNDEyTDEzIDcuNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVEb3duOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1lbnVMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS4wMTQgNy4zODJhLjUwMS41MDEgMCAwIDAtLjAxMy4xNTJjLS4wMTQuNC4xMzMuODA2LjQzOSAxLjExMmwyLjEyIDIuMTIyYS41LjUgMCAxIDAgLjcwOC0uNzA4TDIuMjA4IDhIMTQuNWEuNS41IDAgMCAwIDAtMUgyLjM3OWwxLjg4OS0xLjg5YS41LjUgMCAwIDAtLjcwNy0uNzA2TDEuNDQgNi41MjRjLS4yNDEuMjQyLS4zODMuNTQ0LS40MjYuODU4Wk0xNC41IDNoLTdhLjUuNSAwIDAgMCAwIDFoN2EuNS41IDAgMCAwIDAtMVptMCA4aC03YS41LjUgMCAxIDAgMCAxaDdhLjUuNSAwIDEgMCAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZW51TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NZW51UmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uTWVudVJpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuOTg2IDcuMzgyYS41MDEuNTAxIDAgMCAxIC4wMTMuMTUyYy4wMTQuNC0uMTMzLjgwNi0uNDM5IDEuMTEybC0yLjEyIDIuMTIyYS41LjUgMCAxIDEtLjcwOC0uNzA4TDEzLjc5MiA4SDEuNWEuNS41IDAgMCAxIDAtMWgxMi4xMjFsLTEuODg5LTEuODlhLjUuNSAwIDAgMSAuNzA3LS43MDZsMi4xMjEgMi4xMmMuMjQxLjI0Mi4zODMuNTQ0LjQyNi44NThaTTEuNSAzaDdhLjUuNSAwIDAgMSAwIDFoLTdhLjUuNSAwIDAgMSAwLTFabTAgOGg3YS41LjUgMCAxIDEgMCAxaC03YS41LjUgMCAxIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudVJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1lbnVVcCA9IGZ1bmN0aW9uIEV1aUljb25NZW51VXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4wMSA4LjVjMC0uMjc2LjIxNi0uNS40OTUtLjVoMi4wMWMuMjQzIDAgLjQ0NS4xODMuNDg3LjQxMmwuMDA4LjA4OGMwIC4yNzYtLjIxNi41LS40OTUuNWgtMi4wMWEuNTAzLjUwMyAwIDAgMS0uNDg3LS40MTJMMTAuMDEgOC41Wk0xMi41IDEyYy4yNSAwIC40NTkuMTgzLjUwMi40MTJsLjAwOC4wODhjMCAuMjc2LS4yMjguNS0uNTEuNUgzLjUyYS41MTMuNTEzIDAgMCAxLS41MDItLjQxMkwzLjAxIDEyLjVjMC0uMjc2LjIyOC0uNS41MS0uNWgzLjk4N1Y0LjIwOGwtMi4wNiAyLjA2YS41LjUgMCAxIDEtLjcwNy0uNzA3TDYuODYgMy40NEExLjQ5NiAxLjQ5NiAwIDAgMSA3Ljk3NCAzTDguMDA3IDNjLjA0IDAgLjA4LjAwNS4xMTguMDE0LjMxNC4wNDMuNjE2LjE4NS44NTcuNDI2bDIuMTIyIDIuMTJhLjUuNSAwIDAgMS0uNzA4LjcwOGwtMS44ODktMS44OVYxMkgxMi41Wk0zIDguNWMwLS4yNzYuMjE2LS41LjQ5NS0uNWgyLjAxYy4yNDMgMCAuNDQ1LjE4My40ODcuNDEyTDYgOC41YzAgLjI3Ni0uMjE2LjUtLjQ5NS41aC0yLjAxYS41MDMuNTAzIDAgMCAxLS40ODctLjQxMkwzIDguNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVVcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NZXJnZSA9IGZ1bmN0aW9uIEV1aUljb25NZXJnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMzUyIDZIMi41YS41LjUgMCAwIDEgMC0xaDQuODUyTDUuMTIgMi43MjFjLS4xOC0uMTgzLS4xNTUtLjQ2LjA1NS0uNjE2YS41NTEuNTUxIDAgMCAxIC43MDUuMDQ4bDMgMy4wNjJjLjE2LjE2NC4xNi40MDUgMCAuNTdsLTMgMy4wNjJBLjUzMi41MzIgMCAwIDEgNS41IDlhLjU0LjU0IDAgMCAxLS4zMjUtLjEwNmMtLjIxLS4xNTctLjIzNS0uNDMzLS4wNTUtLjYxNkw3LjM1MiA2Wm0xLjI5NiA0SDEzLjVhLjUuNSAwIDAgMSAwIDFIOC42NDhsMi4yMzIgMi4yNzhjLjE4LjE4My4xNTUuNDYtLjA1NS42MTdBLjU0LjU0IDAgMCAxIDEwLjUgMTRhLjUzMi41MzIgMCAwIDEtLjM4LS4xNTNsLTMtMy4wNjNhLjM5Ny4zOTcgMCAwIDEgMC0uNTY4bDMtMy4wNjNhLjU1MS41NTEgMCAwIDEgLjcwNS0uMDQ3Yy4yMS4xNTYuMjM1LjQzMy4wNTUuNjE2TDguNjQ4IDEwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVyZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWluaW1pemUgPSBmdW5jdGlvbiBFdWlJY29uTWluaW1pemUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xLjE0NiAxNC4xNDYgNC00YS41LjUgMCAwIDEgLjc2NS42MzhsLS4wNTcuMDctNCA0YS41LjUgMCAwIDEtLjc2NS0uNjM4bC4wNTctLjA3IDQtNC00IDRaTTYuNSA4QTEuNSAxLjUgMCAwIDEgOCA5LjV2M2EuNS41IDAgMSAxLTEgMHYtM2EuNS41IDAgMCAwLS41LS41aC0zYS41LjUgMCAwIDEgMC0xaDNabTItNWEuNS41IDAgMCAxIC41LjV2M2EuNS41IDAgMCAwIC41LjVoM2EuNS41IDAgMSAxIDAgMWgtM0ExLjUgMS41IDAgMCAxIDggNi41di0zYS41LjUgMCAwIDEgLjUtLjVabTEuNjUxIDIuMTQ2IDQtNGEuNS41IDAgMCAxIC43NjUuNjM4bC0uMDU3LjA3LTQgNGEuNS41IDAgMCAxLS43NjUtLjYzOGwuMDU3LS4wNyA0LTQtNCA0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWluaW1pemU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWludXMgPSBmdW5jdGlvbiBFdWlJY29uTWludXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJyZWN0XCIsIHtcbiAgICB3aWR0aDogMTAsXG4gICAgaGVpZ2h0OiAxLjUsXG4gICAgeDogMyxcbiAgICB5OiA3LjI1LFxuICAgIHJ4OiAwLjVcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NaW51czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NaW51c0luQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvbk1pbnVzSW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy41IDBDMTEuNjM2IDAgMTUgMy4zNjQgMTUgNy41UzExLjYzNiAxNSA3LjUgMTUgMCAxMS42MzYgMCA3LjUgMy4zNjQgMCA3LjUgMFptMCAuODgyYTYuNjE4IDYuNjE4IDAgMSAwIDAgMTMuMjM2QTYuNjE4IDYuNjE4IDAgMCAwIDcuNS44ODJaTTMuNSA3aDhhLjUuNSAwIDEgMSAwIDFoLThhLjUuNSAwIDAgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NaW51c0luQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1pbnVzSW5DaXJjbGVGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMEMxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwWm0tNCA3YS41LjUgMCAwIDAgMCAxaDhhLjUuNSAwIDEgMCAwLTFoLThaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NaW51c0luQ2lyY2xlRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1pbnVzSW5TcXVhcmUgPSBmdW5jdGlvbiBFdWlJY29uTWludXNJblNxdWFyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjYxMSA3SDQuMzljLS4yMTYgMC0uMzkuMjI0LS4zOS41cy4xNzQuNS4zODkuNWg2LjIyMmMuMjE1IDAgLjM4OS0uMjI0LjM4OS0uNXMtLjE3NC0uNS0uMzg5LS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEgM2EyIDIgMCAwIDEgMi0yaDlhMiAyIDAgMCAxIDIgMnY5YTIgMiAwIDAgMS0yIDJIM2EyIDIgMCAwIDEtMi0yVjNabTItMWg5YTEgMSAwIDAgMSAxIDF2OWExIDEgMCAwIDEtMSAxSDNhMSAxIDAgMCAxLTEtMVYzYTEgMSAwIDAgMSAxLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NaW51c0luU3F1YXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1sQ2xhc3NpZmljYXRpb25Kb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTZ2NWgyLjAzOGExMy4xNzkgMTMuMTc5IDAgMCAwIDAgMkg3djVINXYtNUgwdi0yaDV2LTVoMnpNNyAwdjVoNXYySDd2NUg1VjdIMFY1aDVWMGgyem0xNiAwdjVoNXYyaC01djIuMDM4YTEzLjE3OSAxMy4xNzkgMCAwIDAtMiAwVjdoLTVWNWg1VjBoMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDEwYzMuMDczIDAgNS44NzcgMS4xNTUgOCAzLjA1NnYzLjI1MkE5LjgyIDkuODIgMCAxIDAgMTYuMzA3IDMwaC0zLjI1MUExMS45NTUgMTEuOTU1IDAgMCAxIDEwIDIyYzAtNi42MjcgNS4zNzMtMTIgMTItMTJ6bTEgOHYzaDN2MmgtM3YzaC0ydi0zaC0zdi0yaDN2LTNoMnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NbENyZWF0ZUFkdmFuY2VkSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ3JlYXRlQWR2YW5jZWRKb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmgtMmMwLTcuNzMyLTYuMjY4LTE0LTE0LTE0UzIgOC4yNjggMiAxNnM2LjI2OCAxNCAxNCAxNHYyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcgMjB2MTJoLTJWMjBoMnptLTUgNHY4aC0ydi04aDJ6bTEwLTJ2MTBoLTJWMjJoMnpNMTcgOXY2aDZ2MmgtNnY2aC0ydi02SDl2LTJoNlY5aDJ6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlQWR2YW5jZWRKb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENyZWF0ZU11bHRpTWV0cmljSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAyNGE0IDQgMCAxIDEgMCA4IDQgNCAwIDAgMSAwLTh6bTI0IDBhNCA0IDAgMSAxIDAgOCA0IDQgMCAwIDEgMC04ek00IDI2YTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNHptMjQgMGEyIDIgMCAxIDAgMCA0IDIgMiAwIDAgMCAwLTR6TTE3IDl2Nmg2djJoLTZ2NmgtMnYtNkg5di0yaDZWOWgyek00IDBhNCA0IDAgMSAxIDAgOCA0IDQgMCAwIDEgMC04em0yNCAwYTQgNCAwIDEgMSAwIDggNCA0IDAgMCAxIDAtOHptMCAyYTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNHpNNCAyYTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuMDc4IDI5LjA1Yy4xMDIuNjc3LjMgMS4zMjIuNTgyIDEuOTJBMTUuOTYzIDE1Ljk2MyAwIDAgMSAxNiAzMmMtMS45OTMgMC0zLjktLjM2NC01LjY2LTEuMDMuMjgxLS41OTguNDgtMS4yNDMuNTgyLTEuOTIgMS41NzQuNjE0IDMuMjg3Ljk1IDUuMDc4Ljk1IDEuNzkxIDAgMy41MDQtLjMzNiA1LjA3OC0uOTV6bTkuODkyLTE4LjcxQTE1Ljk2MyAxNS45NjMgMCAwIDEgMzIgMTZjMCAxLjk5My0uMzY0IDMuOS0xLjAzIDUuNjZhNi45NDggNi45NDggMCAwIDAtMS45Mi0uNTgyYy42MTQtMS41NzQuOTUtMy4yODcuOTUtNS4wNzggMC0xLjc5MS0uMzM2LTMuNTA0LS45NS01LjA3OGE2Ljk0OCA2Ljk0OCAwIDAgMCAxLjkyLS41ODJ6bS0yOS45NCAwYy41OTguMjgxIDEuMjQzLjQ4IDEuOTIuNTgyQTEzLjk2NSAxMy45NjUgMCAwIDAgMiAxNmMwIDEuNzkxLjMzNiAzLjUwNC45NSA1LjA3OC0uNjc3LjEwMi0xLjMyMi4zLTEuOTIuNTgyQTE1Ljk2NCAxNS45NjQgMCAwIDEgMCAxNmMwLTEuOTkzLjM2NC0zLjkgMS4wMy01LjY2ek0xNiAwYzEuOTkzIDAgMy45LjM2NCA1LjY2IDEuMDNhNi45NDggNi45NDggMCAwIDAtLjU4MiAxLjkyQTEzLjk2NSAxMy45NjUgMCAwIDAgMTYgMmMtMS43OTEgMC0zLjUwNC4zMzYtNS4wNzguOTVhNi45NDggNi45NDggMCAwIDAtLjU4Mi0xLjkyQTE1Ljk2NCAxNS45NjQgMCAwIDEgMTYgMHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlTXVsdGlNZXRyaWNKb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ3JlYXRlUG9wdWxhdGlvbkpvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBjNS41MjMgMCAxMCA0LjQ3NyAxMCAxMHMtNC40NzcgMTAtMTAgMTBTNiAxNS41MjMgNiAxMCAxMC40NzcgMCAxNiAwem0wIDJhOCA4IDAgMSAwIDAgMTYgOCA4IDAgMCAwIDAtMTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjQgMTkuMjg4Yy40OTIuNDAyIDEuMDE1Ljc2NiAxLjU2NiAxLjA4N0w3LjI2IDIzLjY4MmE0IDQgMCAxIDEtMS40MzctMS4yNDNsMi41NzgtMy4xNTF6bTE1LjIgMCAyLjU3NyAzLjE1YTQgNCAwIDEgMS0xLjQzNyAxLjI0M2wtMi43MDYtMy4zMDZhMTIuMDMyIDEyLjAzMiAwIDAgMCAxLjU2NS0xLjA4N3pNNCAyNGEyIDIgMCAxIDAgMCA0IDIgMiAwIDAgMCAwLTR6bTI0IDBhMiAyIDAgMSAwIDAgNCAyIDIgMCAwIDAgMC00ek0xNyA2djNoM3YyaC0zdjNoLTJ2LTNoLTNWOWgzVjZoMnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1sQ3JlYXRlU2luZ2xlTWV0cmljSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ3JlYXRlU2luZ2xlTWV0cmljSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMzJDNy4xNjMgMzIgMCAyNC44MzcgMCAxNlM3LjE2MyAwIDE2IDBzMTYgNy4xNjMgMTYgMTZhMTYgMTYgMCAwIDEtMTYgMTZabTAtMzBDOC4yNjggMiAyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTQgMTQtNi4yNjggMTQtMTRBMTQgMTQgMCAwIDAgMTYgMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzIDE1aC02VjloLTJ2Nkg5djJoNnY2aDJ2LTZoNnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWxEYXRhVmlzdWFsaXplciA9IGZ1bmN0aW9uIEV1aUljb25NbERhdGFWaXN1YWxpemVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAyMHYxMGgxMHYySDBWMjBoMnptMzAgMHYxMkgyMHYtMmgxMFYyMGgyek0xMiA0YTggOCAwIDEgMSAwIDE2IDggOCAwIDAgMSAwLTE2em0wIDJhNiA2IDAgMSAwIDAgMTIgNiA2IDAgMCAwIDAtMTJ6bTAtNnYySDJ2MTBIMFYwaDEyem0yMCAwdjEyaC0yVjJIMjBWMGgxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjk5NyAxMi4yNTFjLS4wMTcuNjg5LS4xMDQgMS4zNi0uMjUzIDIuMDA2YTYgNiAwIDEgMS03LjQ4NyA3LjQ4N2MtLjY0Ni4xNS0xLjMxNy4yMzYtMi4wMDYuMjUzYTggOCAwIDEgMCA5Ljc0Ni05Ljc0NnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxEYXRhVmlzdWFsaXplcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NbE91dGxpZXJEZXRlY3Rpb25Kb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxPdXRsaWVyRGV0ZWN0aW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAxMnY2aDZ2Mkgwdi04aDJ6bTE4IDB2OGgtOHYtMmg2di02aDJ6TTggMHYySDJ2NkgwVjBoOHptMTIgMHY4aC0yVjJoLTZWMGg4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjRhNCA0IDAgMSAxIDAgOCA0IDQgMCAwIDEgMC04em0xMiAwYTQgNCAwIDEgMSAwIDggNCA0IDAgMCAxIDAtOHptLTEyIDEuNzVhMi4yNSAyLjI1IDAgMSAwIDAgNC41IDIuMjUgMi4yNSAwIDAgMCAwLTQuNXptMTIgMGEyLjI1IDIuMjUgMCAxIDAgMCA0LjUgMi4yNSAyLjI1IDAgMCAwIDAtNC41ek0yOCAxMmE0IDQgMCAxIDEgMCA4IDQgNCAwIDAgMSAwLTh6bTAgMS43NWEyLjI1IDIuMjUgMCAxIDAgMCA0LjUgMi4yNSAyLjI1IDAgMCAwIDAtNC41ek0xMCA2YTQgNCAwIDEgMSAwIDggNCA0IDAgMCAxIDAtOHptMCAxLjc1YTIuMjUgMi4yNSAwIDEgMCAwIDQuNSAyLjI1IDIuMjUgMCAwIDAgMC00LjV6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sT3V0bGllckRldGVjdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NbFJlZ3Jlc3Npb25Kb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxSZWdyZXNzaW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjQgMGE4IDggMCAxIDEtNC45MDYgMTQuMzJsLTQuNzc0IDQuNzc0YTggOCAwIDEgMS0xLjQxNC0xLjQxNGw0Ljc3NC00Ljc3NEE4IDggMCAwIDEgMjQgMHpNOCAxOGE2IDYgMCAxIDAgMCAxMiA2IDYgMCAwIDAgMC0xMnpNMjQgMmE2IDYgMCAxIDAgMCAxMiA2IDYgMCAwIDAgMC0xMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMyIDIwdjEySDIwVjIwaDEyem0tMiAyaC04djhoOHYtOHpNMTIgMHYxMkgwVjBoMTJ6bS0yIDJIMnY4aDhWMnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxSZWdyZXNzaW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1vYmlsZSA9IGZ1bmN0aW9uIEV1aUljb25Nb2JpbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDIuNWEuNS41IDAgMCAxIC41LS41aDNhLjUuNSAwIDAgMSAwIDFoLTNhLjUuNSAwIDAgMS0uNS0uNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjUgMEExLjUgMS41IDAgMCAwIDMgMS41djEzQTEuNSAxLjUgMCAwIDAgNC41IDE2aDdhMS41IDEuNSAwIDAgMCAxLjUtMS41di0xM0ExLjUgMS41IDAgMCAwIDExLjUgMGgtN1pNNCAxLjVhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgLjUuNVY0SDRWMS41Wk00IDEzdjEuNWEuNS41IDAgMCAwIC41LjVoN2EuNS41IDAgMCAwIC41LS41VjEzSDRabTAtMWg4VjVINHY3WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1vYmlsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Nb29uID0gZnVuY3Rpb24gRXVpSWNvbk1vb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04Ljc5NiA5LjA0OGMtMS41NTItMi4yMzgtMS4xOTktNS4zMjMuNjEtOC4xLTMuNDctLjEyLTYuNiAyLjIzMi03LjI2OSA1LjY3Mi0uNzQyIDMuODIgMS44MyA3LjUzMyA1Ljc0OSA4LjI5NGE3LjIyNiA3LjIyNiAwIDAgMCA3LjUyNi0zLjIxOGMtMi43OTQuMTc3LTUuMjctLjcxMS02LjYxNi0yLjY0OFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1vb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTW92ZSA9IGZ1bmN0aW9uIEV1aUljb25Nb3ZlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuODgzIDcuNjQ0YS41LjUgMCAwIDEgLjAwNi43MDdsLTEuOTg0IDIuMDE2YS41LjUgMCAwIDEtLjg1Ni0uMzQ3bC0uMDA5LTEuMDA0LTMuMDI0LjAyNFYxMmgxYS41LjUgMCAwIDEgLjM1NC44NTRsLTIgMmEuNS41IDAgMCAxLS43MDcgMGwtMi0yQS41LjUgMCAwIDEgNi4wMTYgMTJoMVY5LjA1N2wtMy4wMDguMDI0LjAwOC45OTVhLjUuNSAwIDAgMS0uODUuMzZMMS4xNDggOC40NTRhLjUuNSAwIDAgMS0uMDA1LS43MDdMMy4xMjcgNS43M2EuNS41IDAgMCAxIC44NTcuMzQ3bC4wMDggMS4wMDQgMy4wMjQtLjAyNVY0aC0xYS41LjUgMCAwIDEtLjM1My0uODU0bDItMmEuNS41IDAgMCAxIC43MDcgMGwyIDJhLjUuNSAwIDAgMS0uMzU0Ljg1NGgtMXYzLjA0bDMuMDA4LS4wMjQtLjAwOC0uOTk2YS41LjUgMCAwIDEgLjg1LS4zNmwyLjAxNyAxLjk4NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1vdmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTmFtZXNwYWNlID0gZnVuY3Rpb24gRXVpSWNvbk5hbWVzcGFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDFoMTR2MTRIMVYxem0xMyAxMnYxSDJWMmgxMnYxMXpNNiA2aDR2NEg2VjZ6bS0xIDVWNWg2djZINXpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25OYW1lc3BhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTmVzdGVkID0gZnVuY3Rpb24gRXVpSWNvbk5lc3RlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuNSAxYS41LjUgMCAwIDEgMCAxSDMuMDA2QzIuNDUgMiAyIDIuNDUgMiAzLjAwNnY5Ljk4OEMyIDEzLjU1IDIuNDUgMTQgMy4wMDYgMTRINS41YS41LjUgMCAxIDEgMCAxSDMuMDA2QTIuMDA1IDIuMDA1IDAgMCAxIDEgMTIuOTk0VjMuMDA2QzEgMS44OTggMS44OTcgMSAzLjAwNiAxSDUuNVptNy40OTQgMGMxLjA1OSAwIDEuOTI0LjgxOCAyIDEuODU2bC4wMDYuMTV2OS45ODhhMi4wMDUgMi4wMDUgMCAwIDEtMS44NTYgMmwtLjE1LjAwNkgxMC41YS41LjUgMCAwIDEtLjA5LS45OTJMMTAuNSAxNGgyLjQ5NGMuNTE2IDAgLjk0MS0uMzg4IDEtLjg4OGwuMDA2LS4xMThWMy4wMDZjMC0uNTE2LS4zODgtLjk0MS0uODg4LTFMMTIuOTk0IDJIMTAuNWEuNS41IDAgMCAxLS4wOS0uOTkyTDEwLjUgMWgyLjQ5NFpNNSA3YTEgMSAwIDEgMSAwIDIgMSAxIDAgMCAxIDAtMlptMyAwYTEgMSAwIDEgMSAwIDIgMSAxIDAgMCAxIDAtMlptMyAwYTEgMSAwIDEgMSAwIDIgMSAxIDAgMCAxIDAtMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk5lc3RlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25OZXdDaGF0ID0gZnVuY3Rpb24gRXVpSWNvbk5ld0NoYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDRhLjUuNSAwIDAgMSAuNS41VjZIMTBhLjUuNSAwIDAgMSAwIDFIOC41djEuNWEuNS41IDAgMCAxLTEgMFY3SDZhLjUuNSAwIDAgMSAwLTFoMS41VjQuNUEuNS41IDAgMCAxIDggNFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDRhMi41IDIuNSAwIDAgMSAyLjUtMi41aDlBMi41IDIuNSAwIDAgMSAxNSA0djVhMi41IDIuNSAwIDAgMS0yLjUgMi41SDcuNzA3TDQuNSAxNC43MDdWMTEuNWgtMUEyLjUgMi41IDAgMCAxIDEgOVY0Wm0yLjUtMS41QTEuNSAxLjUgMCAwIDAgMiA0djVhMS41IDEuNSAwIDAgMCAxLjUgMS41aDJ2MS43OTNMNy4yOTMgMTAuNUgxMi41QTEuNSAxLjUgMCAwIDAgMTQgOVY0YTEuNSAxLjUgMCAwIDAtMS41LTEuNWgtOVpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25OZXdDaGF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk5vZGUgPSBmdW5jdGlvbiBFdWlJY29uTm9kZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxLjQ0M2ExIDEgMCAwIDAtMSAwTDIuNTcyIDQuMjlhMSAxIDAgMCAwLS41Ljg2NnY1LjY5YTEgMSAwIDAgMCAuNS44NjZMNy41IDE0LjU1N2ExIDEgMCAwIDAgMSAwbDQuOTI4LTIuODQ2YTEgMSAwIDAgMCAuNS0uODY2di01LjY5YTEgMSAwIDAgMC0uNS0uODY2TDguNSAxLjQ0M1pNOSAuNTc3bDQuOTI4IDIuODQ2YTIgMiAwIDAgMSAxIDEuNzMydjUuNjlhMiAyIDAgMCAxLTEgMS43MzJMOSAxNS40MjNhMiAyIDAgMCAxLTIgMGwtNC45MjgtMi44NDZhMiAyIDAgMCAxLTEtMS43MzJ2LTUuNjlhMiAyIDAgMCAxIDEtMS43MzJMNyAuNTc3YTIgMiAwIDAgMSAyIDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ob2RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk51bWJlciA9IGZ1bmN0aW9uIEV1aUljb25OdW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy44MDggMTAuMTk3SDYuNzk2TDUuODU5IDEzSDQuNDg1bC45MzctMi44MDNIMy45NjZsLjIxOS0xLjI1aDEuNjQ3bC42MDgtMS44MDVINC45OTFsLjIyNi0xLjI1MWgxLjY0bC45NS0yLjg0NGgxLjM2OGwtLjk1IDIuODQ0aDEuMDE4bC45NS0yLjg0NGgxLjM3NGwtLjk1IDIuODQ0aDEuNTFsLS4yMTggMS4yNWgtMS43MDJsLS42MDggMS44MDVoMS40OTdsLS4yMTkgMS4yNTFIOS4xODJMOC4yNTIgMTNINi44NzhsLjkzLTIuODAzem0tLjYwMi0xLjI1aDEuMDEybC42MTUtMS44MDVINy44MTRsLS42MDggMS44MDR6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25OdW1iZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uT2ZmbGluZSA9IGZ1bmN0aW9uIEV1aUljb25PZmZsaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtNi41MTcgMTIuMjcxIDEuMjU0LTEuMjU0YTEuNSAxLjUgMCAxIDEtMS4yNTQgMS4yNTRabTIuOTQ1LTIuOTQ0Ljc0LS43NGMuMzYxLjIwOC42OTQuNDY3Ljk4Ny43NzJhLjUuNSAwIDAgMS0uNzIxLjY5MyAzLjQyNCAzLjQyNCAwIDAgMC0xLjAwNi0uNzI1Wm0yLjE2Mi0yLjE2My43MTYtLjcxNWMuMzA4LjIzMi41OTkuNDkuODcuNzcyYS41LjUgMCAxIDEtLjcyMi42OTIgNi4yNiA2LjI2IDAgMCAwLS44NjQtLjc0OVpNNy4wNjEgNi4wN0E2LjE5OCA2LjE5OCAwIDAgMCAzLjU0IDcuODg1YS41LjUgMCAwIDEtLjcxNy0uNjk3IDcuMTk5IDcuMTk5IDAgMCAxIDUuMzA5LTIuMTg3bC0xLjA3IDEuMDdabTYuNjcyLTEuMDE0LjcxLS43MWMuMjc0LjIzLjUzNi40NzYuNzg2LjczNmEuNS41IDAgMCAxLS43MjEuNjkyIDkuMSA5LjEgMCAwIDAtLjc3NS0uNzE4Wm0tMy44MDctMS44NUE5LjA2IDkuMDYgMCAwIDAgOCAzYTguOTkgOC45OSAwIDAgMC02LjQ2OSAyLjczNC41LjUgMCAxIDEtLjcxNy0uNjk3QTkuOTkgOS45OSAwIDAgMSA4IDJjLjk0NCAwIDEuODY4LjEzMSAyLjc1LjM4MmwtLjgyNC44MjRaTTggMTNhLjUuNSAwIDEgMCAwLTEgLjUuNSAwIDAgMCAwIDFabS01LjQyNCAxYS41LjUgMCAwIDEtLjcwNy0uNzA3TDE0LjE0NiAxLjE0NmEuNS41IDAgMCAxIC43MDguNzA4TDIuNTc2IDE0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uT2ZmbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25PbmxpbmUgPSBmdW5jdGlvbiBFdWlJY29uT25saW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNGExLjUgMS41IDAgMSAxIDAtMyAxLjUgMS41IDAgMCAxIDAgM1ptMC0xYS41LjUgMCAxIDAgMC0xIC41LjUgMCAwIDAgMCAxWm0zLjE4OS0zLjY0YS41LjUgMCAwIDEtLjcyMS42OTJBMy40MDggMy40MDggMCAwIDAgOCA5Yy0uOTM3IDAtMS44MTMuMzc4LTIuNDUzIDEuMDM3YS41LjUgMCAwIDEtLjcxNy0uNjk3QTQuNDA4IDQuNDA4IDAgMCAxIDggOGMxLjIyIDAgMi4zNjEuNDk3IDMuMTg5IDEuMzZabTIuMDItMi4xNGEuNS41IDAgMSAxLS43MjEuNjkzQTYuMiA2LjIgMCAwIDAgOCA2YTYuMTk5IDYuMTk5IDAgMCAwLTQuNDYgMS44ODUuNS41IDAgMCAxLS43MTgtLjY5N0E3LjE5OSA3LjE5OSAwIDAgMSA4IDVhNy4yIDcuMiAwIDAgMSA1LjIxIDIuMjJabTIuMDItMi4xMzhhLjUuNSAwIDAgMS0uNzIxLjY5MkE4Ljk5IDguOTkgMCAwIDAgOCAzYTguOTkgOC45OSAwIDAgMC02LjQ2OSAyLjczNC41LjUgMCAxIDEtLjcxNy0uNjk3QTkuOTkgOS45OSAwIDAgMSA4IDJhOS45OSA5Ljk5IDAgMCAxIDcuMjMgMy4wODJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25PbmxpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGFja2FnZSA9IGZ1bmN0aW9uIEV1aUljb25QYWNrYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTQuNDQ3IDMuNzI0LTYtM2ExIDEgMCAwIDAtLjg5NCAwbC02IDNBMSAxIDAgMCAwIDEgNC42MTh2Ni43NjRhMSAxIDAgMCAwIC41NTMuODk0bDYgM2ExIDEgMCAwIDAgLjg5NCAwbDYtM2ExIDEgMCAwIDAgLjU1My0uODk0VjQuNjE4YTEgMSAwIDAgMC0uNTUzLS44OTRaTTUuODcxIDUuODk3bDUuMzQzLTIuNjcyIDIuMTU4IDEuMDc5TDggNi45NDNaTTggMS42MThsMi4wOTYgMS4wNDgtNS4zNTMgMi42NzctMi4xMTUtMS4wMzlaTTIgNS4xMWwyLjI1IDEuMTA1VjlhLjUuNSAwIDAgMCAxIDBWNi43MDZMNy41IDcuODExdjYuMzIxTDIgMTEuMzgyWm02LjUgOS4wMjJ2LTYuMzJMMTQgNS4xMXY2LjI3MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhY2thZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGFnZVNlbGVjdCA9IGZ1bmN0aW9uIEV1aUljb25QYWdlU2VsZWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMgMWExIDEgMCAwIDAtMSAxdjEyYTEgMSAwIDAgMCAxIDFoNWE0Ljk5NSA0Ljk5NSAwIDAgMS0uNTg0LTFIM1YyaDd2MmExIDEgMCAwIDAgMSAxaDJ2Mi4xYy4zNDguMDcuNjgyLjE3NyAxIC4zMTZWNGExIDEgMCAwIDAtLjI5My0uNzA3bC0yLTJBMSAxIDAgMCAwIDExIDFIM3ptMTMgMTFhNCA0IDAgMSAxLTggMCA0IDQgMCAwIDEgOCAwem0tMS42NDYtMS4zNTRhLjUuNSAwIDAgMSAwIC43MDhsLTIuNSAyLjVhLjUuNSAwIDAgMS0uNzA4IDBsLTEtMWEuNS41IDAgMCAxIC43MDgtLjcwOGwuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMCAxIC43MDggMHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhZ2VTZWxlY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGFnZXNTZWxlY3QgPSBmdW5jdGlvbiBFdWlJY29uUGFnZXNTZWxlY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyAxYTEgMSAwIDAgMSAxLTFoOGExIDEgMCAwIDEgLjcwNy4yOTNsMiAyQTEgMSAwIDAgMSAxNSAzdjVhNC45OTUgNC45OTUgMCAwIDAtMS0uNTg0VjRoLTJhMSAxIDAgMCAxLTEtMVYxSDR2MTJoMy4xYy4wNy4zNDguMTc3LjY4Mi4zMTYgMUg0YTEgMSAwIDAgMS0xLTFWMXptNSAxNEgyVjJhMSAxIDAgMCAwLTEgMXYxMmExIDEgMCAwIDAgMSAxaDdhNS4wMjkgNS4wMjkgMCAwIDEtMS0xem04LTNhNCA0IDAgMSAxLTggMCA0IDQgMCAwIDEgOCAwem0tMS42NDYtMS4zNTRhLjUuNSAwIDAgMSAwIC43MDhsLTIuNSAyLjVhLjUuNSAwIDAgMS0uNzA4IDBsLTEtMWEuNS41IDAgMCAxIC43MDgtLjcwOGwuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMCAxIC43MDggMHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhZ2VzU2VsZWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBhaW50ID0gZnVuY3Rpb24gRXVpSWNvblBhaW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTkzIDguMTdjMCAuODMtLjY3MyAxLjUwNy0xLjQ5OSAxLjUwN0g1LjQ5OEExLjUwNSAxLjUwNSAwIDAgMSAzLjk5OSA4LjE3VjYuNjYyaDcuOTk0VjguMTdabS0yLjk5OCA1Ljk5OGMwIC40NTUtLjQ0OC44MjctLjk5OS44MjctLjU1IDAtMS0uMzcyLTEtLjgyN3YtMy40ODZoMnYzLjQ4NlpNNCA1LjY1OGgxLjI2MlYxLjAwNUg0djQuNjUzWm0yLjI2MSAwaDEuMjQ0VjEuMDA1SDYuMjZ2NC42NTNabTIuMjQ0IDBoMS4yMzVWMS4wMDVIOC41MDR2NC42NTNabTIuMjM0IDBoMS4yNTRWMS4wMDVoLTEuMjU0djQuNjUzWk0zLjAwOCAwIDMgOC4xN2EyLjUwOSAyLjUwOSAwIDAgMCAyLjQ5OCAyLjUxMmguNXYzLjQ4NmMwIDEuMDEuODk2IDEuODMyIDEuOTk4IDEuODMyIDEuMTAyIDAgMS45OTgtLjgyMiAxLjk5OC0xLjgzMnYtMy40ODZoLjVhMi41MDkgMi41MDkgMCAwIDAgMi40OTgtMi41MTJMMTMgMEgzLjAwOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhaW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBhbGV0dGUgPSBmdW5jdGlvbiBFdWlJY29uUGFsZXR0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgOWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTIgMmExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBaTTUgNmExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTQtMmExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBabTIgMmExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDFhNyA3IDAgMCAwIDAgMTRoMmEyIDIgMCAxIDAgMC00IDEgMSAwIDEgMSAwLTJoMy45OEMxNC41MTUgOSAxNSA4LjU4MyAxNSA4YTcgNyAwIDAgMC03LTdaTTIgOGE2IDYgMCAwIDEgMTItLjAwNS4wMzUuMDM1IDAgMCAxLS4wMi4wMDVIMTBhMiAyIDAgMSAwIDAgNCAxIDEgMCAxIDEgMCAySDhhNiA2IDAgMCAxLTYtNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhbGV0dGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGFwZXJDbGlwID0gZnVuY3Rpb24gRXVpSWNvblBhcGVyQ2xpcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuODQgMi4wMTkgMy4wNDYgOC41N2MtLjk4Ny45NTItMS4xMzMgMi41MTctLjE5OSAzLjUxNi45NTEgMS4wMjEgMi41OCAxLjEwNiAzLjY0LjE5LjAzNC0uMDMuMDY4LS4wNjEuMS0uMDkybDUuNjU1LTUuNDUyYS40ODQuNDg0IDAgMCAwIDAtLjcwMy41My41MyAwIDAgMC0uNzI5IDBMNS45MiAxMS40MjFjLS41NzIuNTUxLTEuNTA1LjY1Ny0yLjEzMS4xNjNhMS40NTUgMS40NTUgMCAwIDEtLjExOC0yLjIxMWw2Ljg5OS02LjY1MWEyLjY0NiAyLjY0NiAwIDAgMSAzLjY0NCAwIDIuNDIyIDIuNDIyIDAgMCAxIDAgMy41MTNMNy4zIDEyLjkwMWMtMS4zMzMgMS4yODUtMy40OTcgMS40OTMtNC45NS4zMzYtMS41NC0xLjIyLTEuNzY0LTMuNDExLS41LTQuODk3YTMuMzMgMy4zMyAwIDAgMSAuMjM4LS4yNTJsNS43OC01LjU3MmEuNDg0LjQ4NCAwIDAgMCAwLS43MDMuNTMuNTMgMCAwIDAtLjczIDBsLTUuNzggNS41NzJhNC4zNiA0LjM2IDAgMCAwIDAgNi4zMjRjMi4xODggMi4xMDkgNS4yMDIgMS4zMSA2LjY2LS4wOTVsNi45MjUtNi42NzZhMy4zOSAzLjM5IDAgMCAwIDAtNC45MkMxMy41MzQuNjYgMTEuMjUuNjYgOS44NDEgMi4wMTl6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYXBlckNsaXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGFydGlhbCA9IGZ1bmN0aW9uIEV1aUljb25QYXJ0aWFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi42NjQgMTQuODcxYTcgNyAwIDAgMS0yLjQyLTEyLjc3OC41LjUgMCAwIDEgLjYxMi4wNmMuNDU2LjQzMSA4LjIxNiA4LjIxMiA4Ljk4IDkuMDAyYS41LjUgMCAwIDEgLjA2My42MTggNy4wMDIgNy4wMDIgMCAwIDEtNy4yMzUgMy4wOThabTYuMTY4LTMuMzEyYTE5NjEuNzMzIDE5NjEuNzMzIDAgMCAwLTguMzc3LTguNCA2IDYgMCAxIDAgOC4zNzggOC40Wm0yLjA5NS0yLjU0OGEuNS41IDAgMSAxLS45OS0uMTQ0Yy4wMS0uMDY2LjAxLS4wNjYuMDE4LS4xMzNhNi4wMDcgNi4wMDcgMCAwIDAtLjAzNC0xLjcxNC41LjUgMCAxIDEgLjk4Ny0uMTYzYy4xMDguNjU1LjEyMiAxLjMyNi4wNCAxLjk5OWwtLjAyMS4xNTVabS0xLjI3My01LjEzOGEuNS41IDAgMSAxLS44MDguNTkgNi4wMjYgNi4wMjYgMCAwIDAtMS4zMDQtMS4zMDguNS41IDAgMCAxIC41OS0uODA2IDcuMDI2IDcuMDI2IDAgMCAxIDEuNTIyIDEuNTI0Wk05LjE2OSAxLjA5OGEuNS41IDAgMSAxLS4xNjYuOTg2IDYuMTA1IDYuMTA1IDAgMCAwLTEuODQ5LS4wMjYuNS41IDAgMCAxLS4xNC0uOTkgNy4wMiA3LjAyIDAgMCAxIDIuMTU1LjAzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFydGlhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QYXVzZSA9IGZ1bmN0aW9uIEV1aUljb25QYXVzZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMmExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDEgMCAyIDBWM2ExIDEgMCAwIDAtMS0xem02IDBhMSAxIDAgMCAwLTEgMXYxMGExIDEgMCAxIDAgMiAwVjNhMSAxIDAgMCAwLTEtMXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhdXNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBheW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uUGF5bWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41ODYgMi41ODZBMiAyIDAgMCAwIDAgNGgxYTEgMSAwIDAgMSAxLTFWMmEyIDIgMCAwIDAtMS40MTQuNTg2Wk0yIDJoMTAuNWEuNS41IDAgMCAxIDAgMUgyVjJaTTAgNGgxdjYuNWEuNS41IDAgMCAxLTEgMFY0Wm0yLjU4Ni41ODZBMiAyIDAgMCAwIDIgNmgxYTEgMSAwIDAgMSAxLTFWNGEyIDIgMCAwIDAtMS40MTQuNTg2Wm0wIDguODI4QTIgMiAwIDAgMSAyIDEyaDFhMSAxIDAgMCAwIDEgMXYxYTIgMiAwIDAgMS0xLjQxNC0uNTg2Wm0xMi44MjgtOC44MjhBMiAyIDAgMCAxIDE2IDZoLTFhMSAxIDAgMCAwLTEtMVY0YTIgMiAwIDAgMSAxLjQxNC41ODZabTAgOC44MjhBMiAyIDAgMCAwIDE2IDEyaC0xYTEgMSAwIDAgMS0xIDF2MWEyIDIgMCAwIDAgMS40MTQtLjU4NlpNNCA0aDEwdjFINHpNMyA3aDEydjFIM3ptMSA2aDEwdjFINHpNMiA2aDF2Nkgyem0xMyAwaDF2NmgtMXptLTUuNSA0YS41LjUgMCAwIDEgMCAxSDcuNDk2YS41LjUgMCAwIDEgMC0xSDkuNVptNCAwYS41LjUgMCAwIDEgMCAxaC0yLjAwNGEuNS41IDAgMCAxIDAtMUgxMy41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGF5bWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QZW5jaWwgPSBmdW5jdGlvbiBFdWlJY29uUGVuY2lsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuMTQ4IDMuMTQ4IDExIDJsLTkgOXYzaDNsOS05LTEuMTQ0LTEuMTQ0LTguMDAyIDcuOTk4YS41MDIuNTAyIDAgMCAxLS43MDggMCAuNTAyLjUwMiAwIDAgMSAwLS43MDhsOC4wMDItNy45OThaTTExIDFjLjI1NiAwIC41MTIuMDk4LjcwNy4yOTNsMyAzYS45OTkuOTk5IDAgMCAxIDAgMS40MTRsLTkgOUEuOTk3Ljk5NyAwIDAgMSA1IDE1SDJhMSAxIDAgMCAxLTEtMXYtM2MwLS4yNjUuMTA1LS41Mi4yOTMtLjcwN2w5LTlBLjk5Ny45OTcgMCAwIDEgMTEgMVpNNSAxNEgydi0zbDMgM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBlbmNpbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QZXJjZW50ID0gZnVuY3Rpb24gRXVpSWNvblBlcmNlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNSA4YzEuMTA1IDAgMi0xLjEyIDItMi41UzYuMTA1IDMgNSAzIDMgNC4xMiAzIDUuNSAzLjg5NSA4IDUgOHptMC0xYy4zNTYgMCAxLS40NTIgMS0xLjVTNS4zNTYgNCA1IDRzLTEgLjQ1Mi0xIDEuNVM0LjY0NCA3IDUgN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjUgM0gxMkw1LjUgMTNINGw2LjUtMTB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMgMTAuNWMwIDEuMzgtLjg5NSAyLjUtMiAyLjVzLTItMS4xMi0yLTIuNVM5Ljg5NSA4IDExIDhzMiAxLjEyIDIgMi41em0tMSAwYzAgMS4wNDgtLjY0NCAxLjUtMSAxLjVzLTEtLjQ1Mi0xLTEuNS42NDQtMS41IDEtMS41IDEgLjQ1MiAxIDEuNXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBlcmNlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGluID0gZnVuY3Rpb24gRXVpSWNvblBpbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDExaDQuNWEuNS41IDAgMSAwIDAtMWgtMTBhLjUuNSAwIDAgMCAwIDFIN3Y0LjI1YzAgLjQxNC4yMjQuNzUuNS43NXMuNS0uMzM2LjUtLjc1VjExWk00IDRoMXY2SDRWNFptNiAwaDF2NmgtMVY0Wk00LjI4NiAyQzQuMDggMiA0IDIuMDYzIDQgMnYxYzAtLjA2My4wOCAwIC4yODYgMGg2LjQyOEMxMC45MiAzIDExIDIuOTM3IDExIDNWMmMwIC4wNjMtLjA4IDAtLjI4NiAwSDQuMjg2Wm0wLTFoNi40MjhDMTEuNDI0IDEgMTIgMS40NDggMTIgMnYxYzAgLjU1Mi0uNTc2IDEtMS4yODYgMUg0LjI4NkMzLjU3NiA0IDMgMy41NTIgMyAzVjJjMC0uNTUyLjU3Ni0xIDEuMjg2LTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QaW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGluRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblBpbkZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTFoNC41YS41LjUgMCAxIDAgMC0xaC0xMGEuNS41IDAgMSAwIDAgMUg4djQuMjVjMCAuNDE0LjIyNC43NS41Ljc1cy41LS4zMzYuNS0uNzVWMTFaTTUgNGg3djZINVY0Wm0uMjg2LTNoNi40MjhDMTIuNDI0IDEgMTMgMS40NDggMTMgMnYxYzAgLjU1Mi0uNTc2IDEtMS4yODYgMUg1LjI4NkM0LjU3NiA0IDQgMy41NTIgNCAzVjJjMC0uNTUyLjU3Ni0xIDEuMjg2LTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QaW5GaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGlwZUJyZWFrcyA9IGZ1bmN0aW9uIEV1aUljb25QaXBlQnJlYWtzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAzaDkuNWEyLjUgMi41IDAgMCAxIDAgNUg2djFMNCA3LjUgNiA2djFoNS41YTEuNSAxLjUgMCAwIDAgMC0zSDJWM1ptMSAzSDJ2M2gxVjZabTAgNEgydjNoMXYtM1ptMyAwLTIgMS41TDYgMTN2LTFoNS41YTIuNSAyLjUgMCAwIDAgMi4xNjUtMy43NSAzLjQ5NyAzLjQ5NyAwIDAgMS0uODY1LjVBMS41IDEuNSAwIDAgMSAxMS41IDExSDZ2LTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QaXBlQnJlYWtzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBpcGVOb0JyZWFrcyA9IGZ1bmN0aW9uIEV1aUljb25QaXBlTm9CcmVha3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDJIN3YzaDFWNGgzVjNIOFYyWm0tNSA4SDJ2M2gxdi0xaDN2LTFIM3YtMVptNCAwaDF2MWgzdjFIOHYxSDd2LTNabTYgMGgtMXYzaDF2LTFoMXYtMWgtMXYtMVpNNSA2aDF2MWgzdjFINnYxSDVWNlptNiAwaC0xdjNoMVY4aDNWN2gtM1Y2Wm0xLTRoMXYxaDF2MWgtMXYxaC0xVjJaTTYgM0gydjFoNFYzWk0yIDdoMnYxSDJWN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBpcGVOb0JyZWFrczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QaXZvdCA9IGZ1bmN0aW9uIEV1aUljb25QaXZvdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yLjg5IDEzLjg0NyAxMS4yMzkgNS41YS41MjIuNTIyIDAgMCAwLS43MzctLjczN0wyLjE1NCAxMy4xMWEuNTIyLjUyMiAwIDAgMCAuNzM4LjczOFpNMTQgNi42OTZhLjUyMi41MjIgMCAxIDEtMS4wNDMgMHYtMy4xM2EuNTIyLjUyMiAwIDAgMC0uNTIyLS41MjNoLTMuMTNhLjUyMi41MjIgMCAxIDEgMC0xLjA0M2gzLjEzQzEzLjI5OSAyIDE0IDIuNyAxNCAzLjU2NXYzLjEzWlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBpdm90OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBsYXkgPSBmdW5jdGlvbiBFdWlJY29uUGxheShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNjA4IDMuMDYzQzQuMzQ1IDIuODk1IDQgMy4wODkgNCAzLjQxOHY5LjE2N2MwIC4zMjkuMzQ1LjUyMy42MDguMzU2bDcuMi00LjU4NGEuNDI2LjQyNiAwIDAgMCAwLS43MTFsLTcuMi00LjU4M1ptLjUzOC0uODQ0IDcuMiA0LjU4M2ExLjQyNiAxLjQyNiAwIDAgMSAwIDIuMzk5bC03LjIgNC41ODNDNC4yMSAxNC4zOCAzIDEzLjY5NiAzIDEyLjU4NVYzLjQxOEMzIDIuMzA3IDQuMjEgMS42MjQgNS4xNDYgMi4yMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsYXk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGxheUZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25QbGF5RmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTIuMzQ1IDYuODAxLTcuMi00LjU4MUM0LjIxIDEuNjI1IDMgMi4zMDggMyAzLjQxOXY5LjE2MmMwIDEuMTExIDEuMjEgMS43OTQgMi4xNDYgMS4xOTlsNy4yLTQuNTgxYTEuNDI1IDEuNDI1IDAgMCAwIDAtMi4zOTh6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbGF5RmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBsdXMgPSBmdW5jdGlvbiBFdWlJY29uUGx1cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMjUgM2EuNS41IDAgMCAxIC41LjV2My43NWgzLjc1YS41LjUgMCAwIDEgLjUuNXYuNWEuNS41IDAgMCAxLS41LjVIOC43NXYzLjc1YS41LjUgMCAwIDEtLjUuNWgtLjVhLjUuNSAwIDAgMS0uNS0uNVY4Ljc1SDMuNWEuNS41IDAgMCAxLS41LS41di0uNWEuNS41IDAgMCAxIC41LS41aDMuNzVWMy41YS41LjUgMCAwIDEgLjUtLjVoLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBsdXNJbkNpcmNsZSA9IGZ1bmN0aW9uIEV1aUljb25QbHVzSW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCA3aDMuNWEuNS41IDAgMSAxIDAgMUg4djMuNWEuNS41IDAgMSAxLTEgMFY4SDMuNWEuNS41IDAgMCAxIDAtMUg3VjMuNWEuNS41IDAgMCAxIDEgMFY3Wm0tLjUtN0MxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwWm0wIC44ODJhNi42MTggNi42MTggMCAxIDAgMCAxMy4yMzZBNi42MTggNi42MTggMCAwIDAgNy41Ljg4MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsdXNJbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QbHVzSW5DaXJjbGVGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uUGx1c0luQ2lyY2xlRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA3VjMuNWEuNS41IDAgMCAwLTEgMFY3SDMuNWEuNS41IDAgMCAwIDAgMUg3djMuNWEuNS41IDAgMSAwIDEgMFY4aDMuNWEuNS41IDAgMSAwIDAtMUg4Wm0tLjUgOGE3LjUgNy41IDAgMSAxIDAtMTUgNy41IDcuNSAwIDAgMSAwIDE1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGx1c0luQ2lyY2xlRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBsdXNJblNxdWFyZSA9IGZ1bmN0aW9uIEV1aUljb25QbHVzSW5TcXVhcmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDQuMzg5VjdoMi42MTFjLjIxNSAwIC4zODkuMjI0LjM4OS41cy0uMTc0LjUtLjM4OS41SDh2Mi42MTFjMCAuMjE1LS4yMjQuMzg5LS41LjM4OXMtLjUtLjE3NC0uNS0uMzg5VjhINC4zODlDNC4xNzQgOCA0IDcuNzc2IDQgNy41cy4xNzQtLjUuMzg5LS41SDdWNC4zODlDNyA0LjE3NCA3LjIyNCA0IDcuNSA0cy41LjE3NC41LjM4OVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDNhMiAyIDAgMCAxIDItMmg5YTIgMiAwIDAgMSAyIDJ2OWEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlYzWm0yLTFoOWExIDEgMCAwIDEgMSAxdjlhMSAxIDAgMCAxLTEgMUgzYTEgMSAwIDAgMS0xLTFWM2ExIDEgMCAwIDEgMS0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGx1c0luU3F1YXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBvcG91dCA9IGZ1bmN0aW9uIEV1aUljb25Qb3BvdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA4LjVhLjUuNSAwIDEgMSAxIDBWMTJhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDMuNWEuNS41IDAgMCAxIDAgMUg0YTEgMSAwIDAgMC0xIDF2OGExIDEgMCAwIDAgMSAxaDhhMSAxIDAgMCAwIDEtMVY4LjVabS01LjEyLjMzOWEuNS41IDAgMSAxLS43MDYtLjcwN0wxMy4zMDUgMkgxMC41YS41LjUgMCAxIDEgMC0xSDE0YTEgMSAwIDAgMSAxIDF2My41YS41LjUgMCAxIDEtMSAwVjIuNzJMNy44OCA4LjgzOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBvcG91dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QdXNoID0gZnVuY3Rpb24gRXVpSWNvblB1c2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjE3MSA1LjE1IDEwLjExNCA3SDEuNTU2QzEuMjQ5IDcgMSA3LjIyNCAxIDcuNXMuMjQ5LjUuNTU2LjVoOC41MjZsLTEuOTEgMS44MmEuNTIuNTIgMCAwIDAgMCAuNzdjLjIyNy4yMTMuNi4yMTMuODI4IDBsMi4wNS0xLjk1YTEuNTUyIDEuNTUyIDAgMCAwIDAtMi4zMUw5IDQuMzhhLjYxNy42MTcgMCAwIDAtLjgyOSAwIC41Mi41MiAwIDAgMCAwIC43N3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuODA0IDEyLjc5MkEuOTkzLjk5MyAwIDAgMSA2IDExLjgyVjEwSDV2MS44MjZjMCAuOTQ1LjY3MyAxLjc2IDEuNjA4IDEuOTQ1bDYgMS4xOUExLjk5MiAxLjk5MiAwIDAgMCAxNSAxMy4wMTZWMS45ODRBMiAyIDAgMCAwIDEyLjYwOC4wNGwtNiAxLjE5QzUuNjczIDEuNDE1IDUgMi4yMyA1IDMuMTc1VjVoMVYzLjE4YzAtLjQ3Mi4zMzYtLjg3OS44MDQtLjk3Mmw2LTEuMTg5QTEgMSAwIDAgMSAxNCAxLjk5MXYxMS4wMThhLjk5NS45OTUgMCAwIDEtMS4xOTYuOTcybC02LTEuMTl6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QdXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uUXVlc3Rpb25JbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTRBNiA2IDAgMSAxIDggMmE2IDYgMCAwIDEgMCAxMlptMC0xQTUgNSAwIDEgMCA4IDNhNSA1IDAgMCAwIDAgMTBabS0uMTg2LTEuMDY1QS43ODUuNzg1IDAgMCAxIDcgMTEuMTJjMC0uNDguMzQtLjgyLjgxNC0uODIuNDc1IDAgLjgwOS4zNC44MDkuODIgMCAuNDc1LS4zMzQuODE1LS44MDkuODE1Wk01LjkgNi4zMTdDNS45NiA1LjE2OCA2Ljc1NSA0LjQgOC4wNDggNC40YzEuMjE4IDAgMi4wOTEuNzU5IDIuMDkxIDEuOCAwIC43MzYtLjM2IDEuMzA0LTEuMDMgMS43MDctLjU2LjMzLS43MTcuNTYtLjcxNyAxLjAyMnYuMzA1bC0uMS4xSDcuNDdsLS4xLS4xdi0uNDMxYy0uMDA1LS42NDYuMzAyLTEuMTA0Ljk4Ny0xLjUxNC41MjctLjMyMi43MDgtLjU5LjcwOC0xLjA0NyAwLS41MzYtLjQxNi0uOTEtMS4wNS0uOTEtLjY1MiAwLTEuMDY0LjM3NC0xLjExMi45OThsLS4xLjA5Mkg2bC0uMS0uMTA1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUXVlc3Rpb25JbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25RdW90ZSA9IGZ1bmN0aW9uIEV1aUljb25RdW90ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuODQ4IDIuNDdhMSAxIDAgMCAxLS4zMTggMS4zNzhBNy4yODQgNy4yODQgMCAwIDAgMy43NSA3LjAxIDMgMyAwIDEgMSAxIDEwdi0uMDI3YTMuNTIxIDMuNTIxIDAgMCAxIC4wMS0uMjMyYy4wMDktLjE1LjAyNy0uMzYuMDYyLS42MTguMDctLjUxMy4yMDctMS4yMi40ODQtMi4wMTQuNTUyLTEuNTkgMS42Ny0zLjU1NSAzLjkxNC00Ljk1N2ExIDEgMCAwIDEgMS4zNzguMzE4em03IDBhMSAxIDAgMCAxLS4zMTggMS4zNzggNy4yODMgNy4yODMgMCAwIDAtMi43OCAzLjE2MkEzIDMgMCAxIDEgOCAxMHYtLjAyN2EzLjUyMSAzLjUyMSAwIDAgMSAuMDEtLjIzMmMuMDA5LS4xNS4wMjctLjM2LjA2Mi0uNjE4LjA3LS41MTMuMjA3LTEuMjIuNDg0LTIuMDE0LjU1Mi0xLjU5IDEuNjctMy41NTUgMy45MTQtNC45NTdhMSAxIDAgMCAxIDEuMzc4LjMxOHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblF1b3RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblJlZnJlc2ggPSBmdW5jdGlvbiBFdWlJY29uUmVmcmVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjIyOCAyLjk0MmEuNS41IDAgMSAxLS41MzguODQyQTUgNSAwIDEgMCAxMyA4YS41LjUgMCAxIDEgMSAwIDYgNiAwIDEgMS0yLjc3Mi01LjA1OFpNMTQgMS41djNBMS41IDEuNSAwIDAgMSAxMi41IDZoLTNhLjUuNSAwIDAgMSAwLTFoM2EuNS41IDAgMCAwIC41LS41di0zYS41LjUgMCAxIDEgMSAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUmVmcmVzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25SZXBvcnRlciA9IGZ1bmN0aW9uIEV1aUljb25SZXBvcnRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjY4NC44OTUgNi4wNzQuMzU4YTEgMSAwIDAgMC0xLjI5Ni43NTNMNC4yIDRIMi41YS41LjUgMCAwIDAgMCAxaDEuNjI2YTQuMDA3IDQuMDA3IDAgMCAwIC4xMSAyLjM1OWwtMi4wNzItLjM0NUExIDEgMCAwIDAgMSA4djFjLjM2NCAwIC43MDYuMDk3IDEgLjI2OFY4bDEgLjE2NyAxLjg1OS4zMSAyLjE2My4zNi40NzguMDh2NkwyIDE0di0xLjI2OEExLjk5IDEuOTkgMCAwIDEgMSAxM3YxYTEgMSAwIDAgMCAuODM2Ljk4Nmw2IDFjLjEwOC4wMTguMjIuMDE4LjMyOCAwbDYtMUExIDEgMCAwIDAgMTUgMTR2LTFhMS45OSAxLjk5IDAgMCAxLTEtLjI2OFYxNGwtNS41LjkxN3YtNmwuNDc4LS4wOCAyLjE2My0uMzZMMTMgOC4xNjYgMTQgOHYxLjI2OEExLjk5IDEuOTkgMCAwIDEgMTUgOVY4YTEgMSAwIDAgMC0xLjE2NC0uOTg2bC0yLjA3My4zNDVBMy45OTEgMy45OTEgMCAwIDAgMTEuODc0IDVIMTMuNWEuNS41IDAgMCAwIDAtMWgtMS43bC0uNTc4LTIuODlBMSAxIDAgMCAwIDkuOTI1LjM1OUw4LjMxNi44OTVhMSAxIDAgMCAxLS42MzIgMHptMi44OCA2LjY2NEEzLjAxMyAzLjAxMyAwIDAgMCAxMC44MyA1SDUuMTdhMy4wMTMgMy4wMTMgMCAwIDAgLjI2NiAyLjU1OUw4IDcuOTg2bDIuNTY0LS40Mjd6TTEwLjggNEg5LjJMOSAzbDEuNS0uNS4zIDEuNXpNMSAxMmExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJ6bTE0IDBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUmVwb3J0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUmV0dXJuS2V5ID0gZnVuY3Rpb24gRXVpSWNvblJldHVybktleShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjk5NCA0YzEuMDU5IDAgMS45MjQuODE4IDIgMS44NTZsLjAwNi4xNXYxLjk4OGEyLjAwNSAyLjAwNSAwIDAgMS0xLjg1NiAyTDEyIDEwSDMuNDg0bDEuOTEgMS44MmEuNTIuNTIgMCAwIDEgMCAuNzcuNjE2LjYxNiAwIDAgMS0uODI5IDBsLTIuMDUtMS45NWExLjU1MSAxLjU1MSAwIDAgMSAwLTIuMzFsMi4wNS0xLjk1YS42MTcuNjE3IDAgMCAxIC44MyAwIC41Mi41MiAwIDAgMSAwIC43N0wzLjQ1IDlIMTJjLjUxNC0uMDAzLjkzNS0uMzkuOTkzLS44ODhMMTMgNy45OTRWNi4wMDZjMC0uNTE2LS4zODgtLjk0MS0uODg4LTFMMTEuOTk0IDVIOS41YS41LjUgMCAwIDEtLjA5LS45OTJMOS41IDRoMi40OTR6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25SZXR1cm5LZXk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU2F2ZSA9IGZ1bmN0aW9uIEV1aUljb25TYXZlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4wMDggMkgyLjI4MmMtLjE4MSAwLS4yNDUuMDAyLS4yNzUuMDA3LS4wMDUuMDMtLjAwNy4wOTQtLjAwNy4yNzV2MTEuNDM2YzAgLjE4MS4wMDIuMjQ1LjAwNy4yNzUuMDMuMDA1LjA5NC4wMDcuMjc1LjAwN2gxMS40MzZjLjE4MSAwIC4yNDUtLjAwMi4yNzUtLjAwNy4wMDUtLjAzLjAwNy0uMDk0LjAwNy0uMjc1VjQuNjJjMC0uMTMtLjAwMS0uMTgtLjAwNC0uMjA0YTIuNjU0IDIuNjU0IDAgMCAwLS4xNDEtLjE0N0wxMS43MyAyLjE0NWEyLjY1NCAyLjY1NCAwIDAgMC0uMTQ3LS4xNDFBMi42NTQgMi42NTQgMCAwIDAgMTEuMzggMmgtLjM4OGMuMDA1LjA4LjAwOC4xNzIuMDA4LjI4MnYyLjQzNmMwIC40NDYtLjA0Ni42MDctLjEzNC43N2EuOTA5LjkwOSAwIDAgMS0uMzc4LjM3OGMtLjE2My4wODgtLjMyNC4xMzQtLjc3LjEzNEg2LjI4MmMtLjQ0NiAwLS42MDctLjA0Ni0uNzctLjEzNGEuOTA5LjkwOSAwIDAgMS0uMzc4LS4zNzhDNS4wNDYgNS4zMjUgNSA1LjE2NCA1IDQuNzE4VjIuMjgyYzAtLjExLjAwMy0uMjAyLjAwOC0uMjgyWk0yLjI4MiAxaDkuMDk4Yy4yNTkgMCAuMzQ4LjAxLjQ0Ny4wMzJhLjg3Ljg3IDAgMCAxIC4yNzMuMTEzYy4wODYuMDU0LjE1Ni4xMS4zMzguMjkzbDIuMTI0IDIuMTI0Yy4xODIuMTgyLjIzOS4yNTIuMjkzLjMzOGEuODcuODcgMCAwIDEgLjExMy4yNzNjLjAyMy4xLjAzMi4xODguMDMyLjQ0N3Y5LjA5OGMwIC40NDYtLjA0Ni42MDctLjEzNC43N2EuOTA5LjkwOSAwIDAgMS0uMzc4LjM3OGMtLjE2My4wODgtLjMyNC4xMzQtLjc3LjEzNEgyLjI4MmMtLjQ0NiAwLS42MDctLjA0Ni0uNzctLjEzNGEuOTA5LjkwOSAwIDAgMS0uMzc4LS4zNzhjLS4wODgtLjE2My0uMTM0LS4zMjQtLjEzNC0uNzdWMi4yODJjMC0uNDQ2LjA0Ni0uNjA3LjEzNC0uNzdhLjkwOS45MDkgMCAwIDEgLjM3OC0uMzc4Yy4xNjMtLjA4OC4zMjQtLjEzNC43Ny0uMTM0Wk02IDIuMjgydjIuNDM2YzAgLjE4MS4wMDIuMjQ1LjAwNy4yNzUuMDMuMDA1LjA5NC4wMDcuMjc1LjAwN2gzLjQzNmMuMTgxIDAgLjI0NS0uMDAyLjI3NS0uMDA3LjAwNS0uMDMuMDA3LS4wOTQuMDA3LS4yNzVWMi4yODJjMC0uMTgxLS4wMDItLjI0NS0uMDA3LS4yNzVBMi4yNDggMi4yNDggMCAwIDAgOS43MTggMkg2LjI4MmMtLjE4MSAwLS4yNDUuMDAyLS4yNzUuMDA3LS4wMDUuMDMtLjAwNy4wOTQtLjAwNy4yNzVaTTggMTJhMiAyIDAgMSAxIDAtNCAyIDIgMCAwIDEgMCA0Wm0wLTFhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2F2ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TY2FsZSA9IGZ1bmN0aW9uIEV1aUljb25TY2FsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi41IDEyYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0tMiAwYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0tMiAwYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm00LTJhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabS0yIDBhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabTItMWEuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptMC0zYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0tMiAyYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0tMiAwYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0wIDJhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabS0yIDJhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabS0yIDBhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabTItMmEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptNi02YS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0tMiAyYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2NhbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvblNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTExLjI3MSAxMS45NzggMy44NzIgMy44NzNhLjUwMi41MDIgMCAwIDAgLjcwOCAwIC41MDIuNTAyIDAgMCAwIDAtLjcwOGwtMy41NjUtMy41NjRjMi4zOC0yLjc0NyAyLjI2Ny02LjkyMy0uMzQyLTkuNTMyLTIuNzMtMi43My03LjE3LTIuNzMtOS44OTggMC0yLjcyOCAyLjcyOS0yLjcyOCA3LjE3IDAgOS45YTYuOTU1IDYuOTU1IDAgMCAwIDQuOTQ5IDIuMDUuNS41IDAgMCAwIDAtMSA1Ljk2IDUuOTYgMCAwIDEtNC4yNDItMS43NTcgNi4wMSA2LjAxIDAgMCAxIDAtOC40ODZjMi4zMzctMi4zNCA2LjE0My0yLjM0IDguNDg0IDBhNi4wMSA2LjAxIDAgMCAxIDAgOC40ODYuNS41IDAgMCAwIC4wMzQuNzM4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNlY3VyaXR5U2lnbmFsID0gZnVuY3Rpb24gRXVpSWNvblNlY3VyaXR5U2lnbmFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjg3NSAzLjQxOGE2IDYgMCAxIDAgLjcwNy43MDdsLTIuNDYgMi40Ni0xLjE1NiAxLjE1NmExIDEgMCAxIDEtLjcwNy0uNzA3bC43NTctLjc1N2EyIDIgMCAwIDAtMi40MyAzLjEzNy41LjUgMCAxIDEtLjcwNy43MDcgMyAzIDAgMCAxIDMuODYtNC41NjdsLjcxNC0uNzE0QTQgNCAwIDEgMCA4IDEyYS41LjUgMCAxIDEgMCAxIDUgNSAwIDEgMSAzLjE2NC04Ljg3MWwuNzEtLjcxem0uNzA5LS43MDlhNyA3IDAgMSAwIC43MDcuNzA3bC4zNjYtLjM2NmEuNS41IDAgMSAwLS43MDctLjcwN2wtLjM2Ni4zNjZ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWN1cml0eVNpZ25hbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TZWN1cml0eVNpZ25hbERldGVjdGVkID0gZnVuY3Rpb24gRXVpSWNvblNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuNjU3IDMuMDVhLjUuNSAwIDAgMC0uNzA3LS43MDdsLS4zNjYuMzY2QTcgNyAwIDEgMCA4IDE1YTQuOTk0IDQuOTk0IDAgMCAxLS41OTctMS4wMyA2IDYgMCAxIDEgNC40NzEtMTAuNTUybC0uNzEuNzFhNSA1IDAgMSAwLTQuMDggOC43ODggNS4wMjcgNS4wMjcgMCAwIDEtLjA4Mi0xLjA0MkE0LjAwMiA0LjAwMiAwIDAgMSA4IDRhMy45OCAzLjk4IDAgMCAxIDIuNDUzLjg0bC0uNzE1LjcxNGEzIDMgMCAwIDAtMy44NiA0LjU2Ny41LjUgMCAxIDAgLjcwOC0uNzA3IDIgMiAwIDAgMSAyLjQzLTMuMTM3bC0uNzU3Ljc1N2ExIDEgMCAxIDAgLjcwNy43MDdsMS4xNTUtMS4xNTUgMi40Ni0yLjQ2YTUuOTcyIDUuOTcyIDAgMCAxIDEuMzkgMy4yNzdjLjM2Ny4xNTguNzEzLjM2IDEuMDI5LjU5NyAwLTEuNjM2LS41Ny0zLjI3MS0xLjcxLTQuNTg0bC4zNjctLjM2NnpNMTYgMTJhNCA0IDAgMSAxLTggMCA0IDQgMCAwIDEgOCAwem0tNCAuNWEuNTc3LjU3NyAwIDAgMS0uNTctLjQ5NWwtLjI5LTIuMDE1YS44NjcuODY3IDAgMSAxIDEuNzE4IDBsLS4yODggMi4wMTVhLjU3Ny41NzcgMCAwIDEtLjU3LjQ5NXptMCAyLjVhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2VjdXJpdHlTaWduYWxEZXRlY3RlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkID0gZnVuY3Rpb24gRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuNjU3IDMuMDVhLjUuNSAwIDEgMC0uNzA3LS43MDdsLS4zNjYuMzY2QTcgNyAwIDEgMCA4IDE1YTQuOTk0IDQuOTk0IDAgMCAxLS41OTctMS4wMyA2IDYgMCAxIDEgNC40NzEtMTAuNTUybC0uNzEuNzFhNSA1IDAgMSAwLTQuMDggOC43ODggNS4wMjggNS4wMjggMCAwIDEtLjA4Mi0xLjA0MkE0LjAwMiA0LjAwMiAwIDAgMSA4IDRhMy45OCAzLjk4IDAgMCAxIDIuNDUzLjg0bC0uNzE1LjcxNGEzIDMgMCAwIDAtMy44NiA0LjU2Ny41LjUgMCAxIDAgLjcwOC0uNzA3IDIgMiAwIDAgMSAyLjQzLTMuMTM3bC0uNzU3Ljc1N2ExIDEgMCAxIDAgLjcwNy43MDdsMS4xNTUtMS4xNTUgMi40Ni0yLjQ2YTUuOTcyIDUuOTcyIDAgMCAxIDEuMzkgMy4yNzdjLjM2Ny4xNTguNzEzLjM2IDEuMDI5LjU5NyAwLTEuNjM2LS41Ny0zLjI3MS0xLjcxLTQuNTg0bC4zNjctLjM2NnpNMTYgMTJhNCA0IDAgMSAxLTggMCA0IDQgMCAwIDEgOCAwem0tMS42NDYtMS4zNTRhLjUuNSAwIDAgMSAwIC43MDdsLTIuNSAyLjVhLjUuNSAwIDAgMS0uNzA4IDBsLTEtMWEuNS41IDAgMCAxIC43MDgtLjcwN2wuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMCAxIC43MDggMHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU2Vzc2lvblZpZXdlciA9IGZ1bmN0aW9uIEV1aUljb25TZXNzaW9uVmlld2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA2aDF2MUg0VjZ6bTIgMkg1VjdoMXYxem0wIDFWOGgxdjFINnptLTEgMVY5aDF2MUg1em0wIDB2MUg0di0xaDF6bTIgMGg0djFIN3YtMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDNhMSAxIDAgMCAxIDEtMWgxMmExIDEgMCAwIDEgMSAxdjEwYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjN6bTEgMWgxMnY5SDJWNHpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZXNzaW9uVmlld2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNoYXJkID0gZnVuY3Rpb24gRXVpSWNvblNoYXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4xMzQgNy4wMzEgOCAxMi43NjRsMi44NjYtNS43MzNMOCAyLjAxNiA1LjEzNCA3LjAzWk04IDBsNCA3LTQgOC00LTggNC03WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2hhcmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU2hhcmUgPSBmdW5jdGlvbiBFdWlJY29uU2hhcmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDYuODF2Ni4zOGMwIC40OTMuNDQ4LjkuOTkyLjloNy4wMTZjLjU0MyAwIC45OTItLjQwNi45OTItLjlWNi44MWMwLS40OTMtLjQ0OC0uOS0uOTkyLS45SDMuOTkyYy0uNTQzIDAtLjk5Mi40MDYtLjk5Mi45Wk02IDV2LjkxaDNWNWgyLjAwOEMxMi4xMDggNSAxMyA1LjgxOCAxMyA2LjgxdjYuMzhjMCAxLS45IDEuODEtMS45OTIgMS44MUgzLjk5MkMyLjg5MiAxNSAyIDE0LjE4MiAyIDEzLjE5VjYuODFDMiA1LjgxIDIuOSA1IDMuOTkyIDVINlptMS45OTctMy41NTJBLjUwNi41MDYgMCAwIDEgOCAxLjV2OGEuNS41IDAgMCAxLTEgMHYtOGEuNTEuNTEgMCAwIDEgMC0uMDE3TDUuMTggMy4zOTRhLjUyLjUyIDAgMCAxLS43NyAwIC42MTcuNjE3IDAgMCAxIDAtLjgyOUw2LjM2LjUxNWExLjU1MiAxLjU1MiAwIDAgMSAyLjMxIDBsMS45NSAyLjA1Yy4yMTQuMjI5LjIxNC42MDEgMCAuODNhLjUyLjUyIDAgMCAxLS43NyAwTDcuOTk3IDEuNDQ3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2hhcmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU2luZ2xlTWV0cmljVmlld2VyID0gZnVuY3Rpb24gRXVpSWNvblNpbmdsZU1ldHJpY1ZpZXdlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNSAxYS41LjUgMCAwIDEgLjUuNVYxNGgxMi41YS41LjUgMCAwIDEgMCAxaC0xM2EuNS41IDAgMCAxLS41LS41di0xM2EuNS41IDAgMCAxIC41LS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuOTM1IDYuNjUyYS42LjYgMCAwIDAtLjk1MS0uMDYyTDkgMTBsLTIuNzQ3LS45MTZhLjYuNiAwIDAgMC0uNDg1LjA0N0wzIDEwLjY5djEuODFhLjUuNSAwIDAgMCAuNS41aDExYS41LjUgMCAwIDAgLjUtLjVWOS43NWwtMi4wNjUtMy4wOThaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy4wMjMgMi43NThhLjYuNiAwIDAgMC0uOTg3LS4wNzdMOC4zODggNy4yMDNsLTIuMDkzLS44M2EuNi42IDAgMCAwLS41NTIuMDU4TDMuMjIxIDguMDk4YS40OS40OSAwIDAgMC0uMTM4LjY4My41LjUgMCAwIDAgLjY4OS4xMzZsMi4zNDktMS41NTIgMi41ODIgMS4wMjQgMy43NDYtNC42NDMgMS42MjMgMi44MTdjLjEzNi4yMzcuNDQuMzE5LjY3OC4xODRhLjQ5LjQ5IDAgMCAwIC4xODQtLjY3MmwtMS45MS0zLjMxN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNpbmdsZU1ldHJpY1ZpZXdlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Tbm93Zmxha2UgPSBmdW5jdGlvbiBFdWlJY29uU25vd2ZsYWtlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuMDA3LjVhLjUuNSAwIDAgMSAxIDB2Mi4wMjRhLjk5OS45OTkgMCAwIDAgLjI2OC0uMjI3bDEuMDI3LTEuMjMzYS41LjUgMCAwIDEgLjc2OS42NEw4LjI3NSAzLjg2YS45OTkuOTk5IDAgMCAxLS4yNjguMjI3djIuNTQ4bDIuMjA3LTEuMjc0YzAtLjExNC4wMi0uMjMxLjA2Mi0uMzQ2bC45NjgtMi42MzJhLjUuNSAwIDEgMSAuOTM4LjM0NWwtLjU1NCAxLjUwNmEuOTk4Ljk5OCAwIDAgMC0uMDYyLjM0NmwxLjc1My0xLjAxMmEuNS41IDAgMSAxIC41Ljg2NmwtMS43NTMgMS4wMTJjLjEuMDU3LjIxLjA5OC4zMy4xMTlsMS41ODIuMjczYS41LjUgMCAxIDEtLjE3Ljk4NmwtMi43NjQtLjQ3OGExIDEgMCAwIDEtLjMzLS4xMkw4LjUwNiA3LjVsMi4yMDcgMS4yNzRhMSAxIDAgMCAxIC4zMy0uMTE5bDIuNzY0LS40NzhhLjUuNSAwIDEgMSAuMTcuOTg2bC0xLjU4Mi4yNzNhLjk5OS45OTkgMCAwIDAtLjMzLjEybDEuNzUzIDEuMDExYS41LjUgMCAxIDEtLjUuODY2bC0xLjc1My0xLjAxMmMwIC4xMTUuMDIuMjMxLjA2Mi4zNDZsLjU1NCAxLjUwNmEuNS41IDAgMCAxLS45MzguMzQ1bC0uOTY4LTIuNjMyYS45OTkuOTk5IDAgMCAxLS4wNjItLjM0Nkw4LjAwNyA4LjM2NnYyLjU0OGMuMDk4LjA1OC4xOS4xMzMuMjY4LjIyN2wxLjc5NiAyLjE1NWEuNS41IDAgMCAxLS43NjkuNjRsLTEuMDI3LTEuMjMzYS45OTkuOTk5IDAgMCAwLS4yNjgtLjIyNlYxNC41YS41LjUgMCAwIDEtMSAwdi0yLjAyNGEuOTk5Ljk5OSAwIDAgMC0uMjY5LjIyN2wtMS4wMjcgMS4yMzNhLjUuNSAwIDAgMS0uNzY4LS42NGwxLjc5NS0yLjE1NWEuOTk5Ljk5OSAwIDAgMSAuMjY5LS4yMjdWOC4zNjZMNC44IDkuNjRjMCAuMTE0LS4wMi4yMzEtLjA2Mi4zNDZsLS45NjkgMi42MzJhLjUuNSAwIDEgMS0uOTM4LS4zNDVsLjU1NC0xLjUwNmExIDEgMCAwIDAgLjA2Mi0uMzQ2bC0xLjc1MyAxLjAxMmEuNS41IDAgMCAxLS41LS44NjZsMS43NTMtMS4wMTJhLjk5OS45OTkgMCAwIDAtLjMzLS4xMTlsLTEuNTgyLS4yNzNhLjUuNSAwIDAgMSAuMTctLjk4NmwyLjc2NC40NzhjLjEyLjAyLjIzMi4wNjIuMzMuMTJMNi41MDggNy41IDQuMyA2LjIyNmEuOTk5Ljk5OSAwIDAgMS0uMzMuMTE5bC0yLjc2NS40NzhhLjUuNSAwIDEgMS0uMTctLjk4NmwxLjU4Mi0uMjczYS45OTkuOTk5IDAgMCAwIC4zMy0uMTJMMS4xOTQgNC40MzRhLjUuNSAwIDEgMSAuNS0uODY2bDEuNzUzIDEuMDEyYzAtLjExNC0uMDItLjIzMS0uMDYyLS4zNDZMMi44MyAyLjcyN2EuNS41IDAgMSAxIC45MzgtLjM0NWwuOTY5IDIuNjMyYS45OTkuOTk5IDAgMCAxIC4wNjIuMzQ2bDIuMjA3IDEuMjc0VjQuMDg2YTEgMSAwIDAgMS0uMjY5LS4yMjdMNC45NDMgMS43MDRhLjUuNSAwIDAgMSAuNzY4LS42NGwxLjAyNyAxLjIzM2MuMDc5LjA5NC4xNy4xNy4yNjkuMjI3Vi41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU25vd2ZsYWtlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNvcnRBc2NlbmRpbmcgPSBmdW5jdGlvbiBFdWlJY29uU29ydEFzY2VuZGluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMuODU0IDMuMTQ2YS41LjUgMCAwIDAtLjcwOCAwbC0yIDJhLjUuNSAwIDEgMCAuNzA4LjcwOEwzIDQuNzA3VjExLjVhLjUuNSAwIDAgMCAxIDBWNC43MDdsMS4xNDYgMS4xNDdhLjUuNSAwIDEgMCAuNzA4LS43MDhsLTItMlpNOCA0LjVhLjUuNSAwIDAgMSAuNS0uNWg2YS41LjUgMCAwIDEgMCAxaC02YS41LjUgMCAwIDEtLjUtLjVaTTguNSA3YS41LjUgMCAwIDAgMCAxaDRhLjUuNSAwIDAgMCAwLTFoLTRaTTggMTAuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnRBc2NlbmRpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU29ydERlc2NlbmRpbmcgPSBmdW5jdGlvbiBFdWlJY29uU29ydERlc2NlbmRpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDEwLjI5M1YzLjVhLjUuNSAwIDAgMC0xIDB2Ni43OTNMMS44NTQgOS4xNDZhLjUuNSAwIDEgMC0uNzA4LjcwOGwyIDJhLjUuNSAwIDAgMCAuNzA4IDBsMi0yYS41LjUgMCAxIDAtLjcwOC0uNzA4TDQgMTAuMjkzWk04IDQuNWEuNS41IDAgMCAxIC41LS41aDZhLjUuNSAwIDAgMSAwIDFoLTZhLjUuNSAwIDAgMS0uNS0uNVpNOC41IDdhLjUuNSAwIDAgMCAwIDFoNGEuNS41IDAgMCAwIDAtMWgtNFpNOCAxMC41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydERlc2NlbmRpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU29ydExlZnQgPSBmdW5jdGlvbiBFdWlJY29uU29ydExlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNC4zMDggN2g4LjEzNmMuMzA3IDAgLjU1Ni4yMjQuNTU2LjVzLS4yNDkuNS0uNTU2LjVINC4zMDhsNC4wOTYgNC4wOTZhLjUuNSAwIDAgMS0uNzA3LjcwN0wzLjQ1NCA4LjU2MWExLjQ5NCAxLjQ5NCAwIDAgMS0uNDMzLS45MjUuNDU0LjQ1NCAwIDAgMSAwLS4yNzJjLjAzLS4zMzguMTc1LS42NjYuNDMzLS45MjVsNC4yNDMtNC4yNDJhLjUuNSAwIDEgMSAuNzA3LjcwN0w0LjMwOCA3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydExlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU29ydFJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvblNvcnRSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjY5MiA3SDMuNTU2QzMuMjQ5IDcgMyA3LjIyNCAzIDcuNXMuMjQ5LjUuNTU2LjVoOC4xMzZsLTQuMDk2IDQuMDk2YS41LjUgMCAwIDAgLjcwNy43MDdsNC4yNDMtNC4yNDJjLjI1OC0uMjU5LjQwMy0uNTg3LjQzMy0uOTI1YS40NTQuNDU0IDAgMCAwIDAtLjI3MiAxLjQ5NCAxLjQ5NCAwIDAgMC0uNDMzLS45MjVMOC4zMDMgMi4xOTdhLjUuNSAwIDEgMC0uNzA3LjcwN0wxMS42OTIgN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnRSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Tb3J0RG93biA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0RG93bihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTEuNjkyVjMuNTU2QzcgMy4yNDkgNy4yMjQgMyA3LjUgM3MuNS4yNDkuNS41NTZ2OC4xMzZsNC4wOTYtNC4wOTZhLjUuNSAwIDAgMSAuNzA3LjcwN2wtNC4yNDIgNC4yNDNhMS40OTQgMS40OTQgMCAwIDEtLjkyNS40MzMuNDU0LjQ1NCAwIDAgMS0uMjcyIDAgMS40OTQgMS40OTQgMCAwIDEtLjkyNS0uNDMzTDIuMTk3IDguMzAzYS41LjUgMCAxIDEgLjcwNy0uNzA3TDcgMTEuNjkyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydERvd247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU29ydFVwID0gZnVuY3Rpb24gRXVpSWNvblNvcnRVcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNC4yMDd2OC4yMzdjMCAuMzA3LS4yMjQuNTU2LS41LjU1NnMtLjUtLjI0OS0uNS0uNTU2VjQuMjA3TDIuOTA0IDguMzAzYS41LjUgMCAwIDEtLjcwNy0uNzA3bDQuMjQyLTQuMjQyYTEuNSAxLjUgMCAwIDEgMi4xMjIgMGw0LjI0MiA0LjI0MmEuNS41IDAgMSAxLS43MDcuNzA3TDggNC4yMDdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0VXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU29ydGFibGUgPSBmdW5jdGlvbiBFdWlJY29uU29ydGFibGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDEyLjc4NlYzLjJMMy42MDQgNi41OTZhLjUuNSAwIDAgMS0uNzA4LS43MDdsMy41MzYtMy41MzVhMS41IDEuNSAwIDAgMSAyLjEyMSAwbDMuNTM2IDMuNTM1YS41LjUgMCAwIDEtLjcwNy43MDdMOCAzLjIxNHY5LjU1N2wzLjM4Mi0zLjM4MmEuNS41IDAgMCAxIC43MDcuNzA3bC0zLjUzNiAzLjUzNmExLjUgMS41IDAgMCAxLTIuMTIxIDBsLTMuNTM2LTMuNTM2YS41LjUgMCAwIDEgLjcwOC0uNzA3TDcgMTIuNzg2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydGFibGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3BhY2VzID0gZnVuY3Rpb24gRXVpSWNvblNwYWNlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDNIM3YzaDNWM1pNMyAyYTEgMSAwIDAgMC0xIDF2M2ExIDEgMCAwIDAgMSAxaDNhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFIM1ptMyA4SDN2M2gzdi0zWk0zIDlhMSAxIDAgMCAwLTEgMXYzYTEgMSAwIDAgMCAxIDFoM2ExIDEgMCAwIDAgMS0xdi0zYTEgMSAwIDAgMC0xLTFIM1ptMTAtNmgtM3YzaDNWM1ptLTMtMWExIDEgMCAwIDAtMSAxdjNhMSAxIDAgMCAwIDEgMWgzYTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xaC0zWm0zIDhoLTN2M2gzdi0zWm0tMy0xYTEgMSAwIDAgMC0xIDF2M2ExIDEgMCAwIDAgMSAxaDNhMSAxIDAgMCAwIDEtMXYtM2ExIDEgMCAwIDAtMS0xaC0zWlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNwYWNlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TcGFya2xlcyA9IGZ1bmN0aW9uIEV1aUljb25TcGFya2xlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm01LjAxNiA0LjM4My4wMzUtLjA5M2EuNDkyLjQ5MiAwIDAgMSAuODk4IDBsLjAzNS4wOTNjLjA0OC4xMjguMDcyLjE5Mi4wOTcuMjUzYTUuOSA1LjkgMCAwIDAgMy41MzYgMy4zOGwuMDkzLjAzNWEuNDkyLjQ5MiAwIDAgMSAwIC44OThsLS4wOTMuMDM1YTUuOSA1LjkgMCAwIDAtMy41MzYgMy4zOGMtLjAyNS4wNi0uMDQ5LjEyNS0uMDk3LjI1M2wtLjAzNS4wOTNhLjQ5Mi40OTIgMCAwIDEtLjg5OCAwbC0uMDM1LS4wOTNjLS4wNDgtLjEyOC0uMDcyLS4xOTItLjA5Ny0uMjUzYTUuOSA1LjkgMCAwIDAtMy41MzYtMy4zOCAyLjE3NSAyLjE3NSAwIDAgMS0uMDkzLS4wMzUuNDkyLjQ5MiAwIDAgMSAwLS44OThsLjA5My0uMDM1Yy4xMjgtLjA0OC4xOTItLjA3Mi4yNTMtLjA5N2E1LjkgNS45IDAgMCAwIDMuMzgtMy41MzZabTYuNzY5LTIuMjEzYS45NjguOTY4IDAgMCAxIC4wMTYtLjA0MS4yMTkuMjE5IDAgMCAxIC4zOTggMCAyLjYyMiAyLjYyMiAwIDAgMCAxLjUxOCAxLjYxM2wuMTEzLjA0M2EuMjcyLjI3MiAwIDAgMSAuMDQuMDE2LjIxOS4yMTkgMCAwIDEgMCAuMzk4LjI3Mi4yNzIgMCAwIDEtLjA0LjAxNmwtLjExMy4wNDNhMi42MjIgMi42MjIgMCAwIDAtMS41MDIgMS41NzIuOTY4Ljk2OCAwIDAgMS0uMDE2LjA0LjIxOS4yMTkgMCAwIDEtLjM5OCAwIDIuNjIyIDIuNjIyIDAgMCAwLTEuNTE4LTEuNjEzbC0uMTEzLS4wNDJhLjI3Mi4yNzIgMCAwIDEtLjA0LS4wMTYuMjE5LjIxOSAwIDAgMSAwLS4zOTguMjcyLjI3MiAwIDAgMSAuMDQtLjAxNmwuMTEzLS4wNDNhMi42MjIgMi42MjIgMCAwIDAgMS41MDItMS41NzJabS0uNTU1IDguMDQzLjAyLS4wNTJhLjI3My4yNzMgMCAwIDEgLjUgMGwuMDIuMDUyLjA1My4xNGEzLjI3NSAzLjI3NSAwIDAgMCAxLjgyNCAxLjgyNGwuMTQuMDU0Yy4wMy4wMS4wNDQuMDE2LjA1Mi4wMmEuMjczLjI3MyAwIDAgMSAwIC40OTggMS4yNDggMS4yNDggMCAwIDEtLjA1Mi4wMmMtLjA3LjAyNy0uMTA3LjA0LS4xNC4wNTRhMy4yNzkgMy4yNzkgMCAwIDAtMS44MjQgMS44MjRsLS4wNTQuMTRhLjQwOS40MDkgMCAwIDEtLjAyLjA1Mi4yNzMuMjczIDAgMCAxLS40OTggMCAxLjI0OCAxLjI0OCAwIDAgMS0uMDItLjA1MmMtLjAyNy0uMDctLjA0LS4xMDctLjA1NC0uMTRhMy4yNzkgMy4yNzkgMCAwIDAtMS44MjQtMS44MjRsLS4xNC0uMDU0YTEuMjQgMS4yNCAwIDAgMS0uMDUyLS4wMi4yNzMuMjczIDAgMCAxIDAtLjQ5OCAxLjI0IDEuMjQgMCAwIDEgLjA1Mi0uMDJsLjE0LS4wNTRhMy4yNzkgMy4yNzkgMCAwIDAgMS44MjQtMS44MjRsLjA1NC0uMTRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TcGFya2xlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdGFyUGx1c0VtcHR5ID0gZnVuY3Rpb24gRXVpSWNvblN0YXJQbHVzRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAgMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAgMCAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAgMCAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAgMCA2IDJtOCA4aDJ2MWgtMnYyaC0xdi0yaC0ydi0xaDJWOGgxdjJaTTYgM2MuMDczIDAgLjA5NS4wNDkuMTA0LjA3bDEuMjY3IDIuNzgzLjE2Mi4zNTYuMzg3LjA1NSAyLjk3OC40MjVjLjAxNy4wMDIuMDcxLjAxLjA5NS4wOGEuMTE2LjExNiAwIDAgMS0uMDI5LjEyNkw4Ljc2MiA5LjEyMWwtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAgMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMCAxLS4wNTUtLjAxNmwtMi41NzgtMS40NjlMNiAxMS4zMTRsLS4zNTQuMjAxLTIuNTc5IDEuNDY5YS4xMDMuMTAzIDAgMCAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwIDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMCAxLS4wMjktLjEyNi4xMDguMTA4IDAgMCAxIC4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM1LjkwNSAzLjA1IDUuOTI3IDMgNiAzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhclBsdXNFbXB0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdGFyUGx1c0ZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdGFyUGx1c0ZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNCAxMGgydjFoLTJ2MmgtMXYtMmgtMnYtMWgyVjhoMXYyWk02IDJhLjg2Ljg2IDAgMCAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMCAwIDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMCAwIC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMCAwIDYgMlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhclBsdXNGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3RhckVtcHR5ID0gZnVuY3Rpb24gRXVpSWNvblN0YXJFbXB0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDJhLjg2Ljg2IDAgMCAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMCAwIDQuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMOCAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMCAwIC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMCAwIDggMm0wIDFjLjA3MyAwIC4wOTUuMDQ5LjEwNC4wN2wxLjI2NyAyLjc4My4xNjIuMzU2LjM4Ny4wNTUgMi45NzguNDI1Yy4wMTcuMDAyLjA3MS4wMS4wOTUuMDhhLjExNi4xMTYgMCAwIDEtLjAyOS4xMjZsLTIuMjAyIDIuMjI2LS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwIDEtLjA5MS4wNDYuMTA2LjEwNiAwIDAgMS0uMDU1LS4wMTZsLTIuNTc4LTEuNDY5TDggMTEuMzE0bC0uMzU0LjIwMS0yLjU3OSAxLjQ2OWEuMTAzLjEwMyAwIDAgMS0uMDU0LjAxNi4xMjcuMTI3IDAgMCAxLS4wOTEtLjA0NmMtLjAyMy0uMDI4LS4wMy0uMDU4LS4wMjQtLjA5OGwuNTM2LTMuMTEyLjA2My0uMzYyLS4yNTktLjI2MS0yLjIwMi0yLjIyNmEuMTE2LjExNiAwIDAgMS0uMDI5LS4xMjYuMTA4LjEwOCAwIDAgMSAuMDk0LS4wOGwyLjk4LS40MjUuMzg2LS4wNTUuMTYyLS4zNTYgMS4yNjctMi43ODZDNy45MDUgMy4wNSA3LjkyNyAzIDggM1wiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhckVtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0YXJFbXB0eVNwYWNlID0gZnVuY3Rpb24gRXVpSWNvblN0YXJFbXB0eVNwYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMmEuODYuODYgMCAwIDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwIDAgMi44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw2IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwIDAgLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwIDAgNiAybTAgMWMuMDczIDAgLjA5NS4wNDkuMTA0LjA3bDEuMjY3IDIuNzgzLjE2Mi4zNTYuMzg3LjA1NSAyLjk3OC40MjVjLjAxNy4wMDIuMDcxLjAxLjA5NS4wOGEuMTE2LjExNiAwIDAgMS0uMDI5LjEyNkw4Ljc2MiA5LjEyMWwtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAgMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMCAxLS4wNTUtLjAxNmwtMi41NzgtMS40NjlMNiAxMS4zMTRsLS4zNTQuMjAxLTIuNTc5IDEuNDY5YS4xMDMuMTAzIDAgMCAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwIDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMCAxLS4wMjktLjEyNi4xMDguMTA4IDAgMCAxIC4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM1LjkwNSAzLjA1IDUuOTI3IDMgNiAzXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyRW1wdHlTcGFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdGFyRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblN0YXJGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAyYS44Ni44NiAwIDAgMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAgMCA0Ljg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDggMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAgMCAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAgMCA4IDJcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3RhckZpbGxlZFNwYWNlID0gZnVuY3Rpb24gRXVpSWNvblN0YXJGaWxsZWRTcGFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJhLjg2Ljg2IDAgMCAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMCAwIDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMCAwIC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMCAwIDYgMlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhckZpbGxlZFNwYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0YXJNaW51c0VtcHR5ID0gZnVuY3Rpb24gRXVpSWNvblN0YXJNaW51c0VtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMmEuODYuODYgMCAwIDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwIDAgMi44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw2IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwIDAgLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwIDAgNiAybTAgMWMuMDczIDAgLjA5NS4wNDkuMTA0LjA3bDEuMjY3IDIuNzgzLjE2Mi4zNTYuMzg3LjA1NSAyLjk3OC40MjVjLjAxNy4wMDIuMDcxLjAxLjA5NS4wOGEuMTE2LjExNiAwIDAgMS0uMDI5LjEyNkw4Ljc2MiA5LjEyMWwtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAgMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMCAxLS4wNTUtLjAxNmwtMi41NzgtMS40NjlMNiAxMS4zMTRsLS4zNTQuMjAxLTIuNTc5IDEuNDY5YS4xMDMuMTAzIDAgMCAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwIDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMCAxLS4wMjktLjEyNi4xMDguMTA4IDAgMCAxIC4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM1LjkwNSAzLjA1IDUuOTI3IDMgNiAzWm0xMCA3djFoLTV2LTFoNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJNaW51c0VtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0YXJNaW51c0ZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdGFyTWludXNGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAgMSAuNzkyLjUxMWwxLjMzIDIuOTI0IDMuMTI4LjQ0NmMuNzEuMTAyIDEuMDAxLjk3Ni40OTYgMS40ODdMOS40MzMgOS43MDRsLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAgMSA5LjEzNiAxNGEuODYyLjg2MiAwIDAgMS0uNDI5LS4xMTZMNiAxMi4zNDJsLTIuNzA3IDEuNTQyYS44NjIuODYyIDAgMCAxLS40My4xMTYuODc3Ljg3NyAwIDAgMS0uODU5LTEuMDI3bC41NjMtMy4yNjlMLjI1NCA3LjM2OEMtLjI1IDYuODU3LjA0IDUuOTgzLjc1IDUuODhsMy4xMjgtLjQ0NiAxLjMzLTIuOTIzQS44Ni44NiAwIDAgMSA2IDJabTEwIDh2MWgtNXYtMWg1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3Rhck1pbnVzRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0YXRzID0gZnVuY3Rpb24gRXVpSWNvblN0YXRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMTR2LTRoMXY0aDVWNWgxdjlhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF2LTJoMXYyaDZabTQuODUzLTEwLjE0Ni0yLjk5OSAzYTEuNSAxLjUgMCAwIDEtMi41MzggMS41NjhsLTIuNzE0LjkwNEw0IDkuNTI3YTEuNSAxLjUgMCAxIDEtLjMxNi0uOTQ4TDcgNy40NzNhMS41IDEuNSAwIDAgMSAyLjE0Ni0xLjMyN2wzLTNhMS41IDEuNSAwIDEgMSAuNzA3LjcwN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXRzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0b3AgPSBmdW5jdGlvbiBFdWlJY29uU3RvcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00IDJoOGEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yWm0wIDFhMSAxIDAgMCAwLTEgMXY4YTEgMSAwIDAgMCAxIDFoOGExIDEgMCAwIDAgMS0xVjRhMSAxIDAgMCAwLTEtMUg0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RvcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdG9wRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblN0b3BGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJyZWN0XCIsIHtcbiAgICB3aWR0aDogMTIsXG4gICAgaGVpZ2h0OiAxMixcbiAgICB4OiAyLFxuICAgIHk6IDIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIHJ4OiAyXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RvcEZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdG9wU2xhc2ggPSBmdW5jdGlvbiBFdWlJY29uU3RvcFNsYXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuMjU5IDMuMDM0QTEuMDAxIDEuMDAxIDAgMCAwIDEyIDNINGExIDEgMCAwIDAtMSAxdjhjMCAuMDkuMDEyLjE3Ni4wMzQuMjU5bDkuMjI1LTkuMjI1Wm0uNzA3LjcwNy05LjIyNSA5LjIyNWMuMDgzLjAyMi4xNy4wMzQuMjU5LjAzNGg4YTEgMSAwIDAgMCAxLTFWNGMwLS4wOS0uMDEyLS4xNzYtLjAzNC0uMjU5Wk00IDJoOGEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RvcFNsYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0b3JhZ2UgPSBmdW5jdGlvbiBFdWlJY29uU3RvcmFnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTIgNmExIDEgMCAwIDEtMS0xVjJhMSAxIDAgMCAxIDEtMWgxMmExIDEgMCAwIDEgMSAxdjNhMSAxIDAgMCAxLTEgMUgyWm0xMyAydjNhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTFWOGExIDEgMCAwIDEgMS0xaDEyYTEgMSAwIDAgMSAxIDFabTEtM1YyYTIgMiAwIDAgMC0yLTJIMmEyIDIgMCAwIDAtMiAydjNjMCAuNjAxLjI3MSAxLjEzMy42OSAxLjVDLjI3MSA2Ljg2NyAwIDcuMzk5IDAgOHYzYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4YzAtLjYwMS0uMjcxLTEuMTMzLS42ODktMS41LjQxOC0uMzY3LjY4OS0uODk5LjY4OS0xLjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJjaXJjbGVcIiwge1xuICAgIGN4OiA0LjUsXG4gICAgY3k6IDkuNSxcbiAgICByOiAxLjVcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJjaXJjbGVcIiwge1xuICAgIGN4OiA0LjUsXG4gICAgY3k6IDMuNSxcbiAgICByOiAxLjVcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA4aDF2M2gtMXpNMTAgOGgxdjNoLTF6TTEyIDJoMXYzaC0xek0xMCAyaDF2M2gtMXpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdG9yYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0cmluZyA9IGZ1bmN0aW9uIEV1aUljb25TdHJpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOS4yOTcgMyA4LjkzIDUuMTAyaDEuMzUxbC0uMzIgMS44MjhIOC42MDlsLS42NTYgMy44ODNjLS4wMzYuMjY1LS4wMi40NjYuMDUuNjAxLjA3MS4xMzUuMjQ3LjIwOC41MjguMjE5LjExLjAwNS4zMzQtLjAwOC42NzItLjA0TDkuMDE2IDEzLjVhNC4xNiA0LjE2IDAgMCAxLTEuMzgzLjE5NWMtLjc5Ny0uMDEtMS4zOTMtLjI0NC0xLjc5LS43MDMtLjM5NS0uNDU4LS41NTctMS4wOC0uNDg0LTEuODY3bC42ODgtNC4xOTVINWwuMzEzLTEuODI4aDEuMDQ2TDYuNzI3IDNoMi41N3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0cmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdWJtb2R1bGUgPSBmdW5jdGlvbiBFdWlJY29uU3VibW9kdWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMkgxdjEyaDNWN2ExIDEgMCAwIDEgMS0xaDVhMSAxIDAgMCAxIDEgMXYxaDRWNEg3Yy0uNjIxIDAtMS0uMzc5LTEtMVYyWm0xMCA2djZhMSAxIDAgMCAxLTEgMUgxYTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xaDUuMjVhLjc1Ljc1IDAgMCAxIC43NS43NWwtLjAwNC4yMDZDNi45OSAyLjMxNyA2Ljk3NCAzIDcgM2g4YTEgMSAwIDAgMSAxIDF2NFptLTEgMWgtNGExIDEgMCAwIDEtMS0xVjdINXY3aDEwVjlaTTIgNC41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41Wk02LjUgOWEuNS41IDAgMCAwIDAgMWgyYS41LjUgMCAwIDAgMC0xaC0yWlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN1Ym1vZHVsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdW4gPSBmdW5jdGlvbiBFdWlJY29uU3VuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgOGE0IDQgMCAxIDEtOCAwIDQgNCAwIDAgMSA4IDBaTTcuMjUuNzVhLjc1Ljc1IDAgMCAxIDEuNSAwdjEuNWEuNzUuNzUgMCAxIDEtMS41IDBWLjc1Wm0wIDEzYS43NS43NSAwIDAgMSAxLjUgMHYxLjVhLjc1Ljc1IDAgMCAxLTEuNSAwdi0xLjVabTUuMzQ2LTExLjQwN2EuNzUuNzUgMCAwIDEgMS4wNiAxLjA2bC0xLjA2IDEuMDYxYS43NS43NSAwIDAgMS0xLjA2LTEuMDZsMS4wNi0xLjA2Wm0tOS4xOTIgOS4xOTNhLjc1Ljc1IDAgMSAxIDEuMDYgMS4wNmwtMS4wNiAxLjA2YS43NS43NSAwIDAgMS0xLjA2LTEuMDZsMS4wNi0xLjA2Wk0uNzUgOC43NWEuNzUuNzUgMCAwIDEgMC0xLjVoMS41YS43NS43NSAwIDEgMSAwIDEuNUguNzVabTEzIDBhLjc1Ljc1IDAgMCAxIDAtMS41aDEuNWEuNzUuNzUgMCAwIDEgMCAxLjVoLTEuNVpNMi4zNDMgMy40MDRhLjc1Ljc1IDAgMSAxIDEuMDYtMS4wNmwxLjA2MSAxLjA2YS43NS43NSAwIDAgMS0xLjA2IDEuMDZsLTEuMDYtMS4wNlptOS4xOTMgOS4xOTJhLjc1Ljc1IDAgMCAxIDEuMDYtMS4wNmwxLjA2IDEuMDZhLjc1Ljc1IDAgMCAxLTEuMDYgMS4wNmwtMS4wNi0xLjA2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3VuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN3YXRjaElucHV0ID0gZnVuY3Rpb24gRXVpSWNvblN3YXRjaElucHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgd2lkdGg6IDEyLFxuICAgIGhlaWdodDogMTIsXG4gICAgeDogMixcbiAgICB5OiAyLFxuICAgIHJ4OiAzXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgd2lkdGg6IDExLFxuICAgIGhlaWdodDogMTEsXG4gICAgeDogMi41LFxuICAgIHk6IDIuNSxcbiAgICBjbGFzc05hbWU6IFwiZXVpU3dhdGNoSW5wdXRfX3N0cm9rZVwiLFxuICAgIHJ4OiAyXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3dhdGNoSW5wdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3ltbGluayA9IGZ1bmN0aW9uIEV1aUljb25TeW1saW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEwLjggMEgyYTEgMSAwIDAgMC0xIDF2OGwxLTFWMWg4djMuNWEuNS41IDAgMCAwIC41LjVIMTR2MTBIMnYtMWEzLjUgMy41IDAgMCAxIDMuNS0zLjVIOFYxM2wzLTMtMy0zdjIuNUg1LjVBNC41IDQuNSAwIDAgMCAxIDE0djFhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xVjQuNDI5YzAtLjI1Ni0uMDk4LS41MDMtLjI3NC0uNjg5bC0zLjItMy40MjhBMS4wMDIgMS4wMDIgMCAwIDAgMTAuOCAwWlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN5bWxpbms7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVGFibGVPZkNvbnRlbnRzID0gZnVuY3Rpb24gRXVpSWNvblRhYmxlT2ZDb250ZW50cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEgMXYxNGgxNFYxSDF6TTAgMGgxNnYxNkgwVjB6bTkgMXYxNGgxVjFIOXpNMyAzLjVoNHYtMUgzdjF6bTAgM2g0di0xSDN2MXptMCAzaDR2LTFIM3YxelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFibGVPZkNvbnRlbnRzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRhYmxlRGVuc2l0eUNvbXBhY3QgPSBmdW5jdGlvbiBFdWlJY29uVGFibGVEZW5zaXR5Q29tcGFjdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDN2MTFhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MVptLTEgMFYyYTEgMSAwIDAgMC0xLTFIMmExIDEgMCAwIDAtMSAxdjFoMTRabTAgMUgxdjEwYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMVY0Wk00LjQ5NiA3YS41LjUgMCAwIDEgMCAxSDIuNDk1YS41LjUgMCAwIDEgMC0xaDIuMDAxWm01LjIxOCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCA4IDYgNy43NzYgNiA3LjVzLjEyOC0uNS4yODYtLjVoMy40MjhaTTQuNDk2IDVhLjUuNSAwIDAgMSAwIDFIMi40OTVhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTUuMjE4IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDYgNiA1Ljc3NiA2IDUuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOFpNNC40OTYgOWEuNS41IDAgMCAxIDAgMUgyLjQ5NWEuNS41IDAgMCAxIDAtMWgyLjAwMVptNS4yMTggMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggMTAgNiA5Ljc3NiA2IDkuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOFptLTUuMjE4IDJhLjUuNSAwIDAgMSAwIDFIMi40OTVhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTUuMjE4IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEyIDYgMTEuNzc2IDYgMTEuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOFptLTUuMjE4IDJhLjUuNSAwIDAgMSAwIDFIMi40OTVhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTktNmEuNS41IDAgMCAxIDAgMWgtMi4wMDFhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTAtMmEuNS41IDAgMCAxIDAgMWgtMi4wMDFhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTAgNGEuNS41IDAgMCAxIDAgMWgtMi4wMDFhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTAgMmEuNS41IDAgMCAxIDAgMWgtMi4wMDFhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTAgMmEuNS41IDAgMCAxIDAgMWgtMi4wMDFhLjUuNSAwIDAgMSAwLTFoMi4wMDFabS0zLjc4MiAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxNCA2IDEzLjc3NiA2IDEzLjVzLjEyOC0uNS4yODYtLjVoMy40MjhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkID0gZnVuY3Rpb24gRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgM3YxMWEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlYyYTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnYxWm0tMSAwVjJhMSAxIDAgMCAwLTEtMUgyYTEgMSAwIDAgMC0xIDF2MWgxNFptMCAxSDF2MTBhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xVjRaTTQuNSA3YS41LjUgMCAwIDEgMCAxSDIuNDk2YS41LjUgMCAxIDEgMC0xSDQuNVptOSAwYS41LjUgMCAxIDEgMCAxaC02YS41LjUgMCAwIDEgMC0xaDZabS05IDRhLjUuNSAwIDEgMSAwIDFIMi40OTZhLjUuNSAwIDEgMSAwLTFINC41Wm05IDBhLjUuNSAwIDEgMSAwIDFoLTZhLjUuNSAwIDEgMSAwLTFoNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlOb3JtYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzdjExYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjFabS0xIDBWMmExIDEgMCAwIDAtMS0xSDJhMSAxIDAgMCAwLTEgMXYxaDE0Wm0wIDFIMXYxMGExIDEgMCAwIDAgMSAxaDEyYTEgMSAwIDAgMCAxLTFWNFpNNC41IDZhLjUuNSAwIDAgMSAwIDFIMi40OTZhLjUuNSAwIDEgMSAwLTFINC41Wm01LjIxNCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCA3IDYgNi43NzYgNiA2LjVzLjEyOC0uNS4yODYtLjVoMy40MjhaTTQuNSA5YS41LjUgMCAwIDEgMCAxSDIuNDk2YS41LjUgMCAxIDEgMC0xSDQuNVptNS4yMTQgMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggMTAgNiA5Ljc3NiA2IDkuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOFpNNC41IDEyYS41LjUgMCAxIDEgMCAxSDIuNDk2YS41LjUgMCAxIDEgMC0xSDQuNVptOS02YS41LjUgMCAxIDEgMCAxaC0yLjAwNGEuNS41IDAgMCAxIDAtMUgxMy41Wm0wIDNhLjUuNSAwIDEgMSAwIDFoLTIuMDA0YS41LjUgMCAwIDEgMC0xSDEzLjVabTAgM2EuNS41IDAgMSAxIDAgMWgtMi4wMDRhLjUuNSAwIDAgMSAwLTFIMTMuNVptLTMuNzg2IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEzIDYgMTIuNzc2IDYgMTIuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UYWcgPSBmdW5jdGlvbiBFdWlJY29uVGFnKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4yNTQgMTQuOTcuOTk2IDkuNzEyYy0uMzE1LS4zMTYtLjM5Ny0uNDYzLS40NS0uNjRhLjkwOS45MDkgMCAwIDEgMC0uNTM0Yy4wNTMtLjE3Ny4xMzUtLjMyNC40NS0uNjRMNy40MyAxLjQ2NmMuMTgyLS4xODMuMjUyLS4yNC4zMzgtLjI5M2EuODcuODcgMCAwIDEgLjI3My0uMTEzYy4wOTktLjAyMy4xODgtLjAzMi40NDYtLjAzMmg1LjE3M2MuNDQ1IDAgLjYwNy4wNDYuNzcuMTMzLjE2Mi4wODcuMjkuMjE0LjM3Ny4zNzcuMDg4LjE2Mi4xMzQuMzI0LjEzNi43NjlsLjAxNSA1LjE1YzAgLjI1OS0uMDA5LjM0OC0uMDMyLjQ0OGEuODcuODcgMCAwIDEtLjExMi4yNzNjLS4wNTQuMDg3LS4xMTEuMTU3LS4yOTQuMzRMOC4wNjcgMTQuOTdjLS4zMTUuMzE1LS40NjIuMzk2LS42MzkuNDVhLjkwOS45MDkgMCAwIDEtLjUzNSAwYy0uMTc2LS4wNTQtLjMyNC0uMTM1LS42MzktLjQ1Wm0xLjEwNi0uNzA3IDYuNDUzLTYuNDUzYy4wOTItLjA5Mi4xMjYtLjEyOC4xNDEtLjE0Ny4wMDMtLjAyNS4wMDQtLjA3NC4wMDQtLjIwNGwtLjAxNS01LjE1YzAtLjE4MS0uMDAzLS4yNDUtLjAwOS0uMjc1YTIuMjQ3IDIuMjQ3IDAgMCAwLS4yNzQtLjAwN0g4LjQ4N2MtLjEzIDAtLjE3OS4wMDEtLjIwMy4wMDQtLjAyLjAxNS0uMDU1LjA1LS4xNDcuMTQxTDEuNzAzIDguNjA2YTIuMjQ4IDIuMjQ4IDAgMCAwLS4xODkuMmMuMDE3LjAyNC4wNjEuMDcuMTkuMTk4bDUuMjU3IDUuMjU5Yy4xMjguMTI4LjE3NS4xNzEuMi4xODguMDI0LS4wMTcuMDcxLS4wNi4yLS4xODhabTQuOTcyLTEwLjYwN2EyIDIgMCAxIDEtMi44MjggMi44MjggMiAyIDAgMCAxIDIuODI4LTIuODI4Wm0tLjcwNy43MDdhMSAxIDAgMSAwLTEuNDE0IDEuNDE0IDEgMSAwIDAgMCAxLjQxNC0xLjQxNFpNNi44MDcgMTEuMjggNC42ODYgOS4xNTlhLjUuNSAwIDEgMSAuNzA3LS43MDdsMi4xMjEgMi4xMmEuNS41IDAgMSAxLS43MDcuNzA4Wm0xLjQxNC0xLjQxNC0yLjEyLTIuMTIyYS41LjUgMCAxIDEgLjcwNi0uNzA3TDguOTI4IDkuMTZhLjUuNSAwIDEgMS0uNzA3LjcwN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRhZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UZWFyID0gZnVuY3Rpb24gRXVpSWNvblRlYXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1MyAxLjc3NmEuNS41IDAgMCAxIC44OTQgMGw0IDhhLjUuNSAwIDAgMSAuMDUzLjIzNWMtLjAwNC4xNS0uMDI2LjM5Ni0uMDg0LjcwNWE1LjUzOCA1LjUzOCAwIDAgMS0uNTA1IDEuNTEyQzExLjE4OSAxMy42MzggOS45MDYgMTQuNSA4IDE0LjVjLTEuOTA2IDAtMy4xOS0uODYyLTMuOTEtMi4yNzJhNS41MzggNS41MzggMCAwIDEtLjUwNi0xLjUxMiA0LjY3MiA0LjY3MiAwIDAgMS0uMDg0LS43MDUuNS41IDAgMCAxIC4wNTMtLjIzNWw0LThabS0zLjA0NiA4LjMyOWMuMDA5LjEwNi4wMjcuMjUzLjA2LjQyOS4wNzkuNDI0LjIxMy44NDguNDEzIDEuMjM4QzUuNTM3IDEyLjg2MiA2LjQ4NyAxMy41IDggMTMuNWMxLjUxMyAwIDIuNDYzLS42MzggMy4wMi0xLjcyOC4yLS4zOS4zMzQtLjgxNC40MTMtMS4yMzguMDMzLS4xNzYuMDUxLS4zMjMuMDYtLjQzTDggMy4xMTlsLTMuNDkzIDYuOTg3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGVhcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UZW1wZXJhdHVyZSA9IGZ1bmN0aW9uIEV1aUljb25UZW1wZXJhdHVyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxNWEzLjUgMy41IDAgMCAxLTEuNzUtNi41MzJMNyA4LjMyNFYyLjVBMS40OTYgMS40OTYgMCAwIDEgOS45MDggMkg4LjV2MUgxMHYxSDguNXYxSDEwdjFIOC41djFIMTB2MS4zMjRsLjI1LjE0NEEzLjUgMy41IDAgMCAxIDguNSAxNU0xMSA3Ljc1OFYyLjVhMi41IDIuNSAwIDEgMC01IDB2NS4yNThhNC41IDQuNSAwIDEgMCA1IDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSA5YTIuNSAyLjUgMCAxIDEgMCA1IDIuNSAyLjUgMCAwIDEgMC01XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UZW1wZXJhdHVyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UaW1lUmVmcmVzaCA9IGZ1bmN0aW9uIEV1aUljb25UaW1lUmVmcmVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi44MDkgOC44MDdhNC41IDQuNSAwIDAgMS01LjU3Mi01Ljc1QTUgNSAwIDAgMCAzLjA0IDkuMzFhLjUuNSAwIDAgMS0uOTY2LjI1OSA2IDYgMCAwIDEgNS42NzItNy41NTMgNC41IDQuNSAwIDEgMSA2LjExNyA2LjMxMyA2LjAwMiA2LjAwMiAwIDAgMS03LjgwMyA1LjQwOS41LjUgMCAxIDEgLjMwMy0uOTU0IDUuMDAxIDUuMDAxIDAgMCAwIDYuNDQ1LTMuOTc5Wk0xMS44NTkgNUgxMy41YS41LjUgMCAwIDAgMC0xSDEyVjEuNWEuNS41IDAgMCAwLTEgMHYzYS41LjUgMCAwIDAgLjUuNWguMzZaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMy43NTcgMTUuODQ4LS43NzYtMi44OTdhMS41IDEuNSAwIDAgMSAxLjA2LTEuODM4bDIuODk4LS43NzZhLjUuNSAwIDEgMSAuMjU5Ljk2NmwtMi44OTguNzc2YS41LjUgMCAwIDAtLjM1My42MTNsLjc3NiAyLjg5OGEuNS41IDAgMCAxLS45NjYuMjU4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGltZVJlZnJlc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVGltZWxpbmUgPSBmdW5jdGlvbiBFdWlJY29uVGltZWxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNyA0LjVhLjUuNSAwIDAgMCAxIDBWNGgxYTEgMSAwIDAgMCAxLTFWMWExIDEgMCAwIDAtMS0xSDZhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDFoMXYuNXpNOSAxSDZ2MmgzVjF6TTIgNy41YS41LjUgMCAxIDEgMSAwIC41LjUgMCAwIDEtMSAwek0yLjUgOWExLjUgMS41IDAgMCAxLTEuNDE1LTFILjVhLjUuNSAwIDAgMSAwLTFoLjU4NWExLjUgMS41IDAgMCAxIDIuODMgMGgyLjE3YTEuNSAxLjUgMCAwIDEgMi44MyAwaDIuMTdhMS41IDEuNSAwIDAgMSAyLjgzIDBoLjU4NWEuNS41IDAgMCAxIDAgMWgtLjU4NWExLjUgMS41IDAgMCAxLTIuODMgMGgtMi4xN2ExLjUgMS41IDAgMCAxLTIuODMgMGgtMi4xN0ExLjUgMS41IDAgMCAxIDIuNSA5ek0xMyA3LjVhLjUuNSAwIDEgMC0xIDAgLjUuNSAwIDAgMCAxIDB6bS01IDBhLjUuNSAwIDEgMC0xIDAgLjUuNSAwIDAgMCAxIDB6TTIuNSAxMGEuNS41IDAgMCAwLS41LjV2LjVIMWExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMWgzYTEgMSAwIDAgMCAxLTF2LTJhMSAxIDAgMCAwLTEtMUgzdi0uNWEuNS41IDAgMCAwLS41LS41ek00IDE0di0ySDF2Mmgzem04LTMuNWEuNS41IDAgMCAxIDEgMHYuNWgxYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0zYTEgMSAwIDAgMS0xLTF2LTJhMSAxIDAgMCAxIDEtMWgxdi0uNXptMiAyLjV2MWgtM3YtMmgzdjF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UaW1lbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UaW1lbGluZVdpdGhBcnJvdyA9IGZ1bmN0aW9uIEV1aUljb25UaW1lbGluZVdpdGhBcnJvdyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03Ljg1NCA0Ljg1NEEuNS41IDAgMCAxIDcgNC41VjRINmExIDEgMCAwIDEtMS0xVjFhMSAxIDAgMCAxIDEtMWgzYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDh2LjVhLjUuNSAwIDAgMS0uMTQ2LjM1NFpNNiAzVjFoM3YySDZaTTIuMTQ2IDkuMTQ2QS41LjUgMCAwIDAgMiA5LjV2LjVIMWExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMWgzYTEgMSAwIDAgMCAxLTF2LTJhMSAxIDAgMCAwLTEtMUgzdi0uNWEuNS41IDAgMCAwLS44NTQtLjM1NFpNNCAxM3YtMkgxdjJoM1pNMTEuNSAxNWE0LjUgNC41IDAgMSAwIDAtOSA0LjUgNC41IDAgMCAwIDAgOVptLjM1NC02Ljg1NCAyIDJhLjUuNSAwIDAgMSAwIC43MDhsLTIgMmEuNS41IDAgMCAxLS43MDctLjcwOEwxMi4yOTMgMTFIOS41YS41LjUgMCAwIDEgMC0xaDIuNzkzbC0xLjE0Ni0xLjE0NmEuNS41IDAgMSAxIC43MDctLjcwOFpNOC4zMzcgNkgzLjkxNWExLjUgMS41IDAgMCAwLTIuODMgMEguNWEuNS41IDAgMCAwIDAgMWguNTg1YTEuNSAxLjUgMCAwIDAgMi44MyAwaDMuMzQyYy4zMTQtLjM4LjY3Ny0uNzE2IDEuMDgtMVpNMiA2LjVhLjUuNSAwIDEgMSAxIDAgLjUuNSAwIDAgMS0xIDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UaW1lbGluZVdpdGhBcnJvdzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UaW1lc2xpZGVyID0gZnVuY3Rpb24gRXVpSWNvblRpbWVzbGlkZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy45MjMgOEE1LjkzIDUuOTMgMCAwIDAgOCAyLjA3NyA1LjkzIDUuOTMgMCAwIDAgMi4wNzcgOGE1LjkzIDUuOTMgMCAwIDAgNi4yOTYgNS45MTJjLjMyOC0uMDIxLjYyNS4yMjcuNjI1LjU1NmEuNTA0LjUwNCAwIDAgMS0uNDU4LjUxMSA3IDcgMCAxIDEgNi40My02LjMzM2MtLjAzNi4zOTgtLjQ4Ny41OC0uODE3LjM1NGEuNTk1LjU5NSAwIDAgMS0uMjQ4LS41NGMuMDEyLS4xNTIuMDE4LS4zMDUuMDE4LS40NnptMS42ODQgMy4yLTQuMzItMy4wNTVjLS41Ni0uMzk2LTEuMjg3LjA1OS0xLjI4Ny44djYuMTA4YzAgLjc0LjcyNiAxLjE5NiAxLjI4Ny44bDQuMzItMy4wNTVjLjUyNC0uMzcuNTI0LTEuMjI4IDAtMS41OTh6TTcuNDYyIDcuNDYySDQuNzY5YS41MzkuNTM5IDAgMCAwIDAgMS4wNzZIOEEuNTM5LjUzOSAwIDAgMCA4LjUzOCA4VjMuNjkyYS41MzkuNTM5IDAgMCAwLTEuMDc2IDB2My43N3pcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UaW1lc2xpZGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuQWxpYXMgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5BbGlhcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk05LjA3NSA2Ljk1M2EuNS41IDAgMSAxLS43MDcuNzA3IDEuNSAxLjUgMCAwIDAtMi4xMjIgMEw0LjEyNSA5Ljc4MmExLjUgMS41IDAgMSAwIDIuMTIxIDIuMTIxbDEuMTQ1LTEuMTQ0YS41LjUgMCAwIDEgLjcwNy43MDdMNi45NTMgMTIuNjFhMi41IDIuNSAwIDEgMS0zLjUzNS0zLjUzNWwyLjEyMS0yLjEyMmEyLjUgMi41IDAgMCAxIDMuNTM2IDBabTMuNTM1LTMuNTM1YTIuNSAyLjUgMCAwIDEgMCAzLjUzNUwxMC40OSA5LjA3NWEyLjUgMi41IDAgMCAxLTMuNTM2IDAgLjUuNSAwIDEgMSAuNzA3LS43MDggMS41IDEuNSAwIDAgMCAyLjEyMiAwbDIuMTIxLTIuMTJhMS41IDEuNSAwIDEgMC0yLjEyMS0yLjEyMkw4LjYzNyA1LjI2OWEuNS41IDAgMSAxLS43MDctLjcwN2wxLjE0NS0xLjE0NGEyLjUgMi41IDAgMCAxIDMuNTM1IDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkFsaWFzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuQW5ub3RhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkFubm90YXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC4xNSAzLjM5MmMyLjc5NyAwIDQuNTI0IDEuNjQ0IDQuNTE3IDQuMjg5LjAwNyAxLjgxNi0uNzA4IDIuODkzLTIuMjEgMy4wMDQtLjkwOC4wNzYtMS4wODEtLjI4Ny0xLjE1Ny0uNzI1aC0uMDQxYy0uMTYzLjQyLS45NjQuNzMyLTEuNzQ0LjY4My0xLjA1My0uMDY1LTIuMDgyLS44NDItMi4wOS0yLjU3Mi4wMDgtMS43MiAxLjA3MS0yLjQ0MSAxLjk1OS0yLjU4Ni44MDQtLjEzNSAxLjU5OC4xNTggMS43MjMuNDYyaC4wNTF2LS4zODZoMS4xOTV2My40NTJjLjAwNy4zLjEyOC40MjUuMzA0LjQyNS40IDAgLjY3Ny0uNTgzLjY3My0xLjg2MS4wMDQtMi4zNzYtMS43MDUtMi45MTQtMy4xODctMi45MTQtMi4zNCAwLTMuNDE1IDEuNTIyLTMuNDIyIDMuMzg3LjAwNyAyLjEyNyAxLjIyIDMuMjc3IDMuNDMzIDMuMjc3LjgwOCAwIDEuNTk4LS4xNzYgMi4wMDYtLjM0OWwuMzkzIDEuMTIyYy0uNDM1LjI3LTEuNDE5LjUwOC0yLjQ5My41MDgtMi45OCAwLTQuNzIzLTEuNjYtNC43MjctNC40OTYuMDA0LTIuODA0IDEuNzQ4LTQuNzIgNC44MTctNC43MlpNNy45NjQgNi43OWMtLjc2IDAtMS4xODUuNDU5LTEuMTg4IDEuMjQuMDAzLjY4My4zIDEuMzMyIDEuMjAyIDEuMzMyLjgyMSAwIDEuMDk0LS40NzMgMS4wNzctMS4zNDMtLjAwNC0uNzE4LS4yMDQtMS4yMy0xLjA5MS0xLjIzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Bbm5vdGF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuQXJyYXkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5BcnJheShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjM5MiAxMlY0aDIuNzEzdjEuMTRoLTEuMjF2NS43MmgxLjIxVjEySDQuMzkyWm03LjY5Mi04djhIOS4zN3YtMS4xNGgxLjIwOVY1LjE0SDkuMzdWNGgyLjcxNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQXJyYXk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5CaW5hcnkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5CaW5hcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIgNEg0djhoOFY0Wk04LjUgNS41aC0zdjVoM3YtNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQmluYXJ5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuQm9vbGVhbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkJvb2xlYW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxM0E1IDUgMCAxIDEgOCAzYTUgNSAwIDAgMSAwIDEwWm0tMi44MjgtMi4xNzJhNCA0IDAgMCAxIDUuNjU2LTUuNjU2Yy4wMDQuMDEzLTUuNjQ1IDUuNjc0LTUuNjU2IDUuNjU2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Cb29sZWFuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuQ2xhc3MgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5DbGFzcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS4zMzMgNy4wMjdIOS4zNzVjLS4wNTYtLjcwOC0uNDgtMS4xODctMS4yMjItMS4xODctLjk3MiAwLTEuNS44MDYtMS41IDIuMTYgMCAxLjQzLjU0NSAyLjE2IDEuNDg2IDIuMTYuNzA4IDAgMS4xMzktLjQxNSAxLjIzNi0xLjA4bDEuOTU4LjAxNUMxMS4yMzYgMTAuNDE4IDEwLjE4MSAxMiA4LjA5NyAxMmMtMS45NTggMC0zLjQzLTEuNDEtMy40My00IDAtMi42IDEuNTE0LTQgMy40My00IDEuNzkyIDAgMy4wODQgMS4wOTUgMy4yMzYgMy4wMjdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkNsYXNzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyA0YTEgMSAwIDAgMSAxLTFoOGExIDEgMCAwIDEgMSAxdjUuOTk2YTEgMSAwIDAgMS0xIDFoLTEuNjYxTDcuNCAxMy4yQS4yNS4yNSAwIDAgMSA3IDEzdi0yLjAwNEg0YTEgMSAwIDAgMS0xLTFWNHptMS41IDFhLjUuNSAwIDAgMSAuNS0uNWg2YS41LjUgMCAwIDEgLjUuNXY0YS41LjUgMCAwIDEtLjUuNWgtLjlMOCAxMVY5LjVINWEuNS41IDAgMCAxLS41LS41VjV6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi43NSA2YTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMnptMi41IDBhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuQ29uc3RhbnQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Db25zdGFudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm05LjQxNCAzLjc1NyAyLjgyOSAyLjgyOWEyIDIgMCAwIDEgMCAyLjgyOGwtMi44MjkgMi44MjlhMiAyIDAgMCAxLTIuODI4IDBMMy43NTcgOS40MTRhMiAyIDAgMCAxIDAtMi44MjhsMi44MjktMi44MjlhMiAyIDAgMCAxIDIuODI4IDBabS0xLjc0NyAyLjkxYTEgMSAwIDAgMC0xIDF2LjY2NmExIDEgMCAwIDAgMSAxaC42NjZhMSAxIDAgMCAwIDEtMXYtLjY2NmExIDEgMCAwIDAtMS0xaC0uNjY2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Db25zdGFudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkRhdGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5EYXRlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzIDExLjU2N0MxMyAxMi4zNiAxMi4zNiAxMyAxMS41NjcgMTNINC40MzNDMy42NCAxMyAzIDEyLjM2IDMgMTEuNTY3VjQuNDMzQzMgMy42NCAzLjY0IDMgNC40MzMgM0g2di0uNDk1YS41MS41MSAwIDAgMSAuNDEyLS40OTdMNi41IDJjLjI3NiAwIC41LjIxNC41LjUwNVYzaDJ2LS40OTVhLjUxLjUxIDAgMCAxIC40MTItLjQ5N0w5LjUgMmMuMjc2IDAgLjUuMjE0LjUuNTA1VjNoMS41NjdDMTIuMzYgMyAxMyAzLjY0IDEzIDQuNDMzdjcuMTM0Wk00IDZ2NS4zM2MwIC4zNy4zLjY3LjY3LjY3aDYuNjZjLjM3IDAgLjY3LS4zLjY3LS42N1Y2SDRabTEuNSA0Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMNiAxMC41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDUuNSAxMWEuNTA1LjUwNSAwIDAgMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw1LjUgMTBaTTggMTBjLjI0NSAwIC40NS4xODMuNDkyLjQxMmwuMDA4LjA4OGMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw4IDExYS41MDUuNTA1IDAgMCAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDggMTBabTIuNSAwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMMTEgMTAuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5MkwxMC41IDExYS41MDUuNTA1IDAgMCAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDEwLjUgMTBabS01LTEuNWMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDYgOWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw1LjUgOS41QS41MDUuNTA1IDAgMCAxIDUgOWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw1LjUgOC41Wm0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDguNSA5YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDggOS41YS41MDUuNTA1IDAgMCAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDggOC41Wm0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDExIDljMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMMTAuNSA5LjVBLjUwNS41MDUgMCAwIDEgMTAgOWMwLS4yNDUuMTgzLS40NS40MTItLjQ5MkwxMC41IDguNVpNNS41IDdjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw2IDcuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw1LjUgOGEuNTA1LjUwNSAwIDAgMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw1LjUgN1pNOCA3Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMOC41IDcuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw4IDhhLjUwNS41MDUgMCAwIDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMOCA3Wm0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDExIDcuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5MkwxMC41IDhhLjUwNS41MDUgMCAwIDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMMTAuNSA3Wk00IDVoOHYtLjMzYzAtLjM3LS4zLS42Ny0uNjctLjY3SDQuNjdDNC4zIDQgNCA0LjMgNCA0LjY3VjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkRhdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5EaW1lbnNpb24gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5EaW1lbnNpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAxMC41YS41LjUgMCAwIDAtMSAwdjFhLjUuNSAwIDAgMCAuNS41aDFhLjUuNSAwIDAgMCAwLTFIMTJ2LS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMgMTJoMy4wNzhjLjcyOCAwIDEuMzctLjEyNyAxLjkyNC0uMzgzYTMuNSAzLjUgMCAxIDAgMi4wNTMtMy4zMDZjLjAwNS0uMTAxLjAwOC0uMjA1LjAwOC0uMzExIDAtLjgzMy0uMTY1LTEuNTQ4LS40OTMtMi4xNDVBMy4zMDkgMy4zMDkgMCAwIDAgOC4xOCA0LjQ4QzcuNTggNC4xNiA2Ljg3IDQgNi4wNDcgNEgzdjhabTYuNzg3LTIuMzIxQTIuNSAyLjUgMCAwIDAgMTEuNSAxNGEyLjUgMi41IDAgMSAwLTEuNzEzLTQuMzIxWk02IDEwLjE1NmgtLjgyOFY1Ljg0NGguNzY2Yy40MTYgMCAuNzY4LjA2NCAxLjA1NC4xOTEuMjkuMTI4LjUwOC4zNDguNjU2LjY2LjE1MS4zMTMuMjI3Ljc0OC4yMjcgMS4zMDUgMCAuNTU3LS4wNzQuOTkyLS4yMjMgMS4zMDVhMS4yOSAxLjI5IDAgMCAxLS42NC42NmMtLjI3OS4xMjctLjYxNi4xOTEtMS4wMTIuMTkxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5EaW1lbnNpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5FbGVtZW50ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRWxlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm03LjM5IDkuNzM2LTEuMDQxLjk0TDMuMjU4IDhsMy4wOS0yLjY3NyAxLjA0MS45NC0yLjAzMiAxLjcyMnYuMDNsMi4wMzIgMS43MjFabTIuNzc3Ljk0LTEuMDQtLjk0IDIuMDMyLTEuNzIxdi0uMDNMOS4xMjYgNi4yNjRsMS4wNC0uOTRMMTMuMjU5IDhsLTMuMDkxIDIuNjc3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5FbGVtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuRW51bSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVudW0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS4yMTEgMTJWNGg1LjU3OHYxLjU3SDcuMTQ1djEuNjQxaDMuMzU5djEuNTc0SDcuMTQ1djEuNjQ1aDMuNjQ0VjEyelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5FbnVtOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuRW51bU1lbWJlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVudW1NZW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy42ODIgMTJWOS4yNDdsMS4wMjMtLjg2MWEuNS41IDAgMCAwLS4wMDMtLjc2OGwtMS4wMi0uODQ0VjRoNS41Nzh2MS41N0g5LjYxNXYxLjY0aDMuMzZ2MS41NzVoLTMuMzZ2MS42NDVoMy42NDVWMTJINy42ODJabS43NDMtNC4xMDNhLjEzOC4xMzggMCAwIDEgMCAuMjA2TDYuMTU4IDkuOTdhLjEzMy4xMzMgMCAwIDEtLjIxOC0uMTAzdi0uOTM0SDIuODczQS4xMzMuMTMzIDAgMCAxIDIuNzQgOC44VjcuMmMwLS4wNzQuMDYtLjEzMy4xMzMtLjEzM0g1Ljk0di0uOTM0YS4xMzMuMTMzIDAgMCAxIC4yMTgtLjEwM2wyLjI2NyAxLjg2N1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRW51bU1lbWJlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkV2ZW50ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRXZlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuMjI1IDUuNjU2YzAgLjQyMy0uMTA2Ljc5LS4zMTggMS4xMDItLjIxMS4zMTEtLjUxLjU3LS44OTguNzc1YTUuNDM1IDUuNDM1IDAgMCAxLTEuMzkyLjQ4NWMtLjU0LjExNy0xLjE0LjE5My0xLjc5OC4yMjlhNi4wNDcgNi4wNDcgMCAwIDAtLjAzNS42N2MwIC4yNTguMDIuNTEuMDYyLjc1Ny4wNC4yNDcuMTE0LjQ2NC4yMi42NTJzLjI1LjM0LjQzMi40NTguNDE0LjE3Ni42OTYuMTc2Yy4yMTEgMCAuNDY3LS4wNDQuNzY2LS4xMzIuMy0uMDg4LjYyLS4yNDQuOTYtLjQ2Ny4xMDYtLjA3LjE5Mi0uMTI5LjI1Ni0uMTc2YS4zNjUuMzY1IDAgMCAxIC4yMi0uMDdjLjExOCAwIC4xOTcuMDYxLjIzOC4xODVhLjk5Ljk5IDAgMCAxIC4wNjIuMjU1IDcuMSA3LjEgMCAwIDEtLjU3My40NjcgNC45MyA0LjkzIDAgMCAxLS43NzUuNDY3Yy0uMjg4LjE0MS0uNi4yNjEtLjkzNC4zNjEtLjMzNS4xLS42NzguMTUtMS4wMy4xNS0uNTQxIDAtLjk4Mi0uMDg4LTEuMzIyLS4yNjRhMi4wNzIgMi4wNzIgMCAwIDEtLjc5My0uNjg4IDIuNjI2IDIuNjI2IDAgMCAxLS4zODgtLjkzMyA0Ljk0OSA0Ljk0OSAwIDAgMS0uMTA2LTEuMDA1YzAtLjYzNC4xMDMtMS4yNTcuMzA5LTEuODY4LjIwNS0uNjEuNDk5LTEuMTU3Ljg4LTEuNjM4LjM4My0uNDgyLjgzOC0uODcgMS4zNjYtMS4xNjNBMy41NjcgMy41NjcgMCAwIDEgOS4wOTMgNGMuNTk5IDAgMS4xMDQuMTI2IDEuNTE1LjM3OS40MTEuMjUyLjYxNy42NzguNjE3IDEuMjc3Wm0tMi40NjctLjk1MWMtLjIyMyAwLS40MzUuMDgtLjYzNS4yMzgtLjIuMTU4LS4zODEuMzczLS41NDYuNjQzLS4xNjQuMjctLjMwNS41NzgtLjQyMy45MjVhNi40MiA2LjQyIDAgMCAwLS4yNjQgMS4xMDFjLjQ3LS4wNDcuODYzLS4xMzUgMS4xOC0uMjY0LjMxOC0uMTMuNTctLjI4NS43NTgtLjQ2Ny4xODgtLjE4Mi4zMjMtLjM4OC40MDUtLjYxNy4wODMtLjIyOS4xMjQtLjQ2Ny4xMjQtLjcxMyAwLS4yNy0uMDU2LS40NzktLjE2OC0uNjI2YS41MTkuNTE5IDAgMCAwLS40MzEtLjIyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5FdmVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkV4Y2VwdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkV4Y2VwdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNDYxIDcuMzFoMy4wNTVhLjc0Ljc0IDAgMCAxIC42NiAxLjA3NGwtMi4xNDEgNC4yMTFhLjc0Ljc0IDAgMSAxLTEuMzE5LS42N0w5LjMxIDguNzlINi4yNTZhLjc0Ljc0IDAgMCAxLS42Ni0xLjA3NWwyLjE5LTQuMzFhLjc0Ljc0IDAgMCAxIDEuMzE5LjY3TDcuNDYxIDcuMzFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkV4Y2VwdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkZpZWxkID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRmllbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS4yNyAxMlY0aDUuNDZ2MS41N0g3LjIwM3YxLjY0MWgzLjE4djEuNTc0aC0zLjE4VjEyelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GaWVsZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkZpbGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5GaWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44NjcgMi42NjdINGEuNjY3LjY2NyAwIDAgMC0uNjY3LjY2NnY5LjMzNGMwIC4zNjguMjk5LjY2Ni42NjcuNjY2aDhhLjY2Ny42NjcgMCAwIDAgLjY2Ny0uNjY2VjUuNjE5YS42NjkuNjY5IDAgMCAwLS4xODMtLjQ1OWwtMi4xMzMtMi4yODVhLjY2OC42NjggMCAwIDAtLjQ4NC0uMjA4bTEuNDY2IDRWMTJINC42NjdWNGg0djIuMzMzYzAgLjE4NC4xNDkuMzM0LjMzMy4zMzRoMi4zMzNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkZpbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5GbGF0dGVuZWQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5GbGF0dGVuZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjI1IDNhLjI1LjI1IDAgMCAwLS4yNS4yNXYyYzAgLjEzOC4xMTIuMjUuMjUuMjVoOS41YS4yNS4yNSAwIDAgMCAuMjUtLjI1di0yYS4yNS4yNSAwIDAgMC0uMjUtLjI1aC05LjV6bTAgMy43NUEuMjUuMjUgMCAwIDAgMyA3djJjMCAuMTM4LjExMi4yNS4yNS4yNUg1LjVBLjI1LjI1IDAgMCAwIDUuNzUgOVY3YS4yNS4yNSAwIDAgMC0uMjUtLjI1SDMuMjV6bS0uMjUgNGEuMjUuMjUgMCAwIDEgLjI1LS4yNUg1LjVhLjI1LjI1IDAgMCAxIC4yNS4yNXYyYS4yNS4yNSAwIDAgMS0uMjUuMjVIMy4yNWEuMjUuMjUgMCAwIDEtLjI1LS4yNXYtMnptMy4zMS0uNzI3Yy0uMDgyLS4wNzMtLjA4Mi0uMjI0IDAtLjI5NmwzLjA1NC0yLjY4M2EuMTcuMTcgMCAwIDEgLjE5LS4wMjZjLjA2NC4wMzIuMTA0LjEuMTA0LjE3NHYxLjM0MWwzLjE2MS0uMDE2Yy4xIDAgLjE4LjA4Ni4xOC4xOTJ2Mi4zYzAgLjEwNS0uMDguMTkxLS4xOC4xOTFsLTMuMTYxLjAxN3YxLjM0MWMwIC4wNzQtLjA0LjE0Mi0uMTAzLjE3NGEuMTcuMTcgMCAwIDEtLjE5LS4wMjVMNi4zMSAxMC4wMjN6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkZsYXR0ZW5lZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkZ1bmN0aW9uID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRnVuY3Rpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuMjY2IDQuMTVWNS42M2EyLjQxIDIuNDEgMCAwIDAtLjg1OS0uMTQ1Yy0uNjkyIDAtMS4wNjUuMzQ2LTEuMTc3IDEuMDQzbC0uMTEuNjI1aDEuODI4djEuNDRIOC45MjFsLS4yMDQgMS4xMTVDOC40NTUgMTEuMzI1IDcuNTE3IDEyIDUuOSAxMmMtLjQ2OSAwLS44ODItLjA2MS0xLjE2Ni0uMTY3di0xLjQ5NWMuMjczLjExNy41OTEuMTc4LjkwMy4xNzguNjU5IDAgMS4wMS0uMjkgMS4xMjctMS4wMTVsLjE1Ny0uOTFINS4yNDdWNy4xNTJoMS44MzdsLjE4OC0uODQyQzcuNTM0IDQuNzE0IDguNDMyIDQgMTAuMTkgNGMuMzkgMCAuODUzLjA2NyAxLjA3Ni4xNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5HZW8gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5HZW8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAzYzEuNjM2IDAgMy4wODguNzg1IDQgMiAuNjI4LjgzNiAxIDEuODc1IDEgM2E0Ljk3OCA0Ljk3OCAwIDAgMS0uOTk5IDNIMTJhNC45OTIgNC45OTIgMCAwIDEtNCAyIDQuOTkyIDQuOTkyIDAgMCAxLTQtMS45OTlWMTFhNSA1IDAgMCAxIDQtOFptLjk0OCA4SDcuMDUyYy4yNzcuNjI2LjYyMyAxIC45NDggMSAuMzI1IDAgLjY3LS4zNzQuOTQ4LTFaTTYgMTFsLS42NDUuMDAxYy4yNzQuMjQyLjU4MS40NDYuOTE0LjYwNkE1LjQ0NSA1LjQ0NSAwIDAgMSA2IDExLjAwMVptNC42NDUuMDAxSDEwYTUuNTEgNS41MSAwIDAgMS0uMjY5LjYwNmMuMzMzLS4xNi42NC0uMzY0LjkxNC0uNjA2Wm0tNS4xMzMtMi41SDQuMDMxYy4wNjguNTQuMjQzIDEuMDQ4LjUwNSAxLjVoMS4xNzJhOS4xODYgOS4xODYgMCAwIDEtLjE5Ni0xLjVabTMuOTc1IDBINi41MTNjLjAzLjU0NC4xMDQgMS4wNS4yMSAxLjVoMi41NTNjLjEwNy0uNDUuMTgyLS45NTYuMjEtMS41Wm0yLjQ4MiAwaC0xLjQ4MWE5LjE4NiA5LjE4NiAwIDAgMS0uMTk2IDEuNWgxLjE3MmMuMjYyLS40NTIuNDM3LS45Ni41MDUtMS41Wk01LjcwOCA2IDQuNTM1IDZjLS4yNjEuNDUyLS40MzcuOTYtLjUwNCAxLjVoMS40ODFBOS4xODcgOS4xODcgMCAwIDEgNS43MDggNlptMy41NjggMEg2LjcyNGMtLjEwNy40NDktLjE4Mi45NTUtLjIxIDEuNDk5aDIuOTczYTguNDc5IDguNDc5IDAgMCAwLS4yMS0xLjVaTTExLjQ2NSA2aC0xLjE3M2MuMTAyLjQ2Ny4xNy45NzIuMTk2IDEuNWgxLjQ4MWEzLjk3NCAzLjk3NCAwIDAgMC0uNTA0LTEuNVpNNi4yNjkgNC4zOTNsLS4xMjQuMDYyYy0uMjg2LjE1LS41NTEuMzMzLS43OS41NDVINmE1LjUxIDUuNTEgMCAwIDEgLjI2OS0uNjA3Wk04IDRjLS4zMjYgMC0uNjcxLjM3NS0uOTQ4IDFoMS44OTZDOC42NzEgNC4zNzYgOC4zMjYgNCA4IDRabTEuNzMuMzkzLjAzOC4wNzFjLjA4My4xNjguMTYxLjM0Ny4yMzIuNTM2aC42NDZhNC4wMDYgNC4wMDYgMCAwIDAtLjkxNS0uNjA3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5HZW87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5IaXN0b2dyYW0gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5IaXN0b2dyYW0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDNoNHY1aDJWNS41aDRWMTNIMy4wMDF2LTFIM1Yzem0xIDloMlY0SDR2OHptMyAwaDJWOUg3djN6bTMgMGgyVjYuNWgtMlYxMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuSGlzdG9ncmFtOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuSVAgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5JUChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMSAzYTIgMiAwIDAgMSAyIDJ2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNlptLTEgMkg4djZoMVY5LjAxNGgxYy4yOTgtLjAxMyAyIDAgMi0yLjAxOCAwLTEuNzQtMS4zMTQtMS45NTItMS44MjUtMS45ODdMMTAgNVpNNiA1SDV2NmgxVjVabTQgLjk4NGMuNjY3IDAgMSAuMzM2IDEgMS4wMDhDMTEgNy42NjQgMTAuNjY3IDggMTAgOEg5VjUuOTg0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5JUDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkludGVyZmFjZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkludGVyZmFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04Ljk2NyAxMC42NTNoMS43MjdWMTJINS4zMDZ2LTEuMzQ3aDEuNzI3VjUuMzQ3SDUuMzA2VjRoNS4zODh2MS4zNDdIOC45Njd2NS4zMDZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkludGVyZmFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkpvaW4gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Kb2luKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSA0LjV2MS4wMjVjMCAxLjI2OS0xLjE4NSAxLjkwOC0yLjExMiAxLjczN2EuNzUuNzUgMCAxIDAgMCAxLjQ3NWMuOTI3LS4xNyAyLjExMi40NyAyLjExMiAxLjczOXYxLjAyM2g0di0xLjAwNWEyLjUgMi41IDAgMCAxIDAtNC45ODhWNC41aC00Wk0xMyA0YTEgMSAwIDAgMC0xLTFIN2ExIDEgMCAwIDAtMSAxdjEuNTI1YzAgLjE3Mi0uMTcyLjI5My0uMzQxLjI2MmEyLjI1IDIuMjUgMCAxIDAgMCA0LjQyNmMuMTctLjAzMS4zNDEuMDkuMzQxLjI2MlYxMmExIDEgMCAwIDAgMSAxaDVhMSAxIDAgMCAwIDEtMVY5LjAwNGEuMTYuMTYgMCAwIDAtLjA0LS4xMDVjLS4xMDktLjEyNS0uNTk0LS4xNi0uNzMyLS4wNjhhMSAxIDAgMSAxIDAtMS42NjJjLjEzOC4wOTIuNjIzLjA1Ny43MzItLjA2OGEuMTYuMTYgMCAwIDAgLjA0LS4xMDVWNFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkpvaW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5LZXkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5LZXkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIuNjY3IDYuNTQyQTMuMjA4IDMuMjA4IDAgMCAxIDguODYgOS42OTRsLS40MzguNDkyYS40MzcuNDM3IDAgMCAxLS4zMjcuMTQ3aC0uNjc4di43M2EuNDM3LjQzNyAwIDAgMS0uNDM4LjQzN0g2LjI1di43M2EuNDM3LjQzNyAwIDAgMS0uNDM4LjQzN0gzLjc3MmEuNDM3LjQzNyAwIDAgMS0uNDM4LS40Mzh2LTEuNDIzYzAtLjExNi4wNDYtLjIyNy4xMjgtLjMxbDIuOTUtMi45NDlhMy4yMDggMy4yMDggMCAwIDEgMy4wNDctNC4yMTQgMy4yMDIgMy4yMDIgMCAwIDEgMy4yMDkgMy4yMDlabS0zLjIwOS0uODc1YS44NzUuODc1IDAgMSAwIDEuNzUgMCAuODc1Ljg3NSAwIDAgMC0xLjc1IDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbktleTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbktleXdvcmQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5LZXl3b3JkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMzMgMTAuMjhjLS4xMi4wNC0uMjkuMDctLjQyLjA3LS4yMyAwLS40My0uMDgtLjUzLS4zbC0uNjMtMS4zNCAyLjMyLTIuODFIOS4zTDcuNzYgNy45M2gtLjA5TDguMjIgNEg2LjU5bC0xLjA1IDcuNWgxLjYzbC4yNy0xLjk0aC4xbC40MyAxLjEyYy4yNy43MS43NC45MiAxLjMzLjkyLjIzIDAgLjYtLjA0Ljg2LS4xMWwuMTctMS4yMXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuS2V5d29yZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbk1ldGhvZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1ldGhvZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zLjMzMyAxMS4wMjdWNS4wNWgyLjA1OXYxLjEzNmguMDYzYy4yNS0uNzQ3Ljg5MS0xLjIxNCAxLjcyOC0xLjIxNC44NDggMCAxLjUyNC40ODMgMS42NSAxLjIxNGguMDYzYy4yMDQtLjczMS45MjctMS4yMTQgMS44MjItMS4yMTQgMS4xNTUgMCAxLjk0OS43OTggMS45NDkgMi4wMjN2NC4wM2gtMi4xNjlWNy41NDJjMC0uNTIxLS4yOS0uODQtLjczOC0uODRzLS43MjMuMzE5LS43MjMuODR2My40ODZINi45NjNWNy41NGMwLS41MjEtLjI5LS44NC0uNzM5LS44NC0uNDQ3IDAtLjcyMi4zMTktLjcyMi44NHYzLjQ4NkgzLjMzM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTWV0aG9kOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuTWV0cmljQ291bnRlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1ldHJpY0NvdW50ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAxMC41YS41LjUgMCAwIDAtMSAwdjFhLjUuNSAwIDAgMCAuNS41aDFhLjUuNSAwIDAgMCAwLTFIMTJ2LS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggM2g0djUuMDM1QTMuNSAzLjUgMCAxIDEgOC4zMzcgMTNIMlY5aDNWNmgzVjNabTEuMDUgOWEyLjUgMi41IDAgMSAxIDQuOTAyLTEgMi41IDIuNSAwIDAgMS00LjkwMiAxWk0xMSA4LjAzNWEzLjQ5IDMuNDkgMCAwIDAtMiAxLjAxNlY0aDJ2NC4wMzVaTTggMTJINlY3aDJ2NVptLTMgMHYtMkgzdjJoMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTWV0cmljQ291bnRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbk1ldHJpY0dhdWdlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTWV0cmljR2F1Z2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAxMC41YS41LjUgMCAwIDAtMSAwdjFhLjUuNSAwIDAgMCAuNS41aDFhLjUuNSAwIDAgMCAwLTFIMTJ2LS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgM0gydjEwaDYuMzM3QTMuNSAzLjUgMCAxIDAgMTIgOC4wMzVWNUg4djJINlYzWm01IDUuMDM1VjZIOXYzLjA1YTMuNDkgMy40OSAwIDAgMSAyLTEuMDE1Wk05IDExLjVhMi41IDIuNSAwIDEgMSA1LjAwMiAwQTIuNSAyLjUgMCAwIDEgOSAxMS41Wk04IDhINnY0aDJWOFpNNSA0SDN2OGgyVjRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1ldHJpY0dhdWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuTW9kdWxlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTW9kdWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOCAyIDUuMTk2IDN2LjE3OGwtLjg2Ni40NjhWNS41TDggMyAzLjY3IDUuNXY1TDggMTNsNC4zMy0yLjVWNS43N2wuODY2LS40NzRWMTFMOCAxNGwtNS4xOTYtM1Y1TDggMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMjQzIDQuNDI5IDkuNTk3IDcuMDQgOCA3LjkyOCAzLjc0MyA1LjU2M2EuNS41IDAgMSAwLS40ODYuODc0TDcuNSA4Ljc5NFYxMy41aDFWOC43OTRsNC4yNDMtMi4zNTdhLjUwOC41MDggMCAwIDAgLjA2LS4wNGwuMzkyLS4yMDJWNS4wNDdsLS45MTcuNTA1YS41NzMuNTczIDAgMCAwLS4wMi4wMWwtLjEwNi4wNi0uMTkxLjEwNS0xLjM1NS43NTMtNC44NDktMi45MDktLjUxNC44NThaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1vZHVsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbk5hbWVzcGFjZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk5hbWVzcGFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTcuNTU2IDguNDE2LS44MDQtMS42OGgtLjAzNnY1LjY0SDVWNGgxLjk5MmwyLjI5MiAzLjk2LjgwNCAxLjY4aC4wMzZWNGgxLjcxNnY4LjM3Nkg5Ljg0OGwtMi4yOTItMy45NlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTmFtZXNwYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuTmVzdGVkID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTmVzdGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSAzYzEuMDQ0IDAgMS45MTMuNzU3IDEuOTk0IDEuNzM2bC4wMDYuMTQ5djYuMjNjMCAxLS44MiAxLjgwNS0xLjg0NSAxLjg4TDExIDEzSDkuNTAxYS41LjUgMCAwIDEtLjA5LS45OTJsLjA5LS4wMDhIMTFjLjUyIDAgLjkzNy0uMzUuOTkzLS43ODNsLjAwNy0uMTAydi02LjIzYzAtLjQ0NS0uMzc5LS44MjctLjg4Mi0uODc5TDExIDRIOS41YS41LjUgMCAwIDEtLjA5LS45OTJMOS41IDNIMTFaTTYuNSAzYS41LjUgMCAwIDEgLjA5Ljk5Mkw2LjUgNEg1Yy0uNTIgMC0uOTM3LjM1LS45OTMuNzgzTDQgNC44ODV2Ni4yM2MwIC40NDUuMzc5LjgyNy44ODIuODc5TDUgMTJoMS41YS41LjUgMCAwIDEgLjA5Ljk5Mkw2LjUgMTNINWMtMS4wNDQgMC0xLjkxMy0uNzU3LTEuOTk0LTEuNzM2TDMgMTEuMTE1di02LjIzYzAtMSAuODItMS44MDUgMS44NDUtMS44OEw1IDNoMS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS44NjQgNy4yNWEuNzE0LjcxNCAwIDEgMSAwIDEuNDI5LjcxNC43MTQgMCAwIDEgMC0xLjQyOVptMi4xNDMgMGEuNzE0LjcxNCAwIDEgMSAwIDEuNDI5LjcxNC43MTQgMCAwIDEgMC0xLjQyOVptMi4xNDMgMGEuNzE0LjcxNCAwIDEgMSAwIDEuNDI5LjcxNC43MTQgMCAwIDEgMC0xLjQyOVpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk5lc3RlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbk51bGwgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OdWxsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtNS4wMDIgMTIuNDEyLS45NjIuOTYyYTEgMSAwIDAgMS0xLjQxNC0xLjQxNGwuOTYyLS45NjJhNS4zMzMgNS4zMzMgMCAwIDEgNy40MS03LjQxbC45NjItLjk2MmExIDEgMCAxIDEgMS40MTQgMS40MTRsLS45NjIuOTYyYTUuMzMzIDUuMzMzIDAgMCAxLTcuNDEgNy40MVptLjk2Ni0uOTY2YTQgNCAwIDAgMCA1LjQ3OC01LjQ3OGwtNS40NzggNS40NzhabS0xLjQxNC0xLjQxNCA1LjQ3OC01LjQ3OGE0IDQgMCAwIDAtNS40NzggNS40NzhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk51bGw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5OdW1iZXIgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OdW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjggOS44MTJoLS44NDJsLS43OCAyLjMzNUg1LjAzMWwuNzgtMi4zMzVINC42bC4xODItMS4wNDNoMS4zNzNsLjUwNy0xLjUwNEg1LjQ1NGwuMTg4LTEuMDQyaDEuMzY3bC43OTItMi4zN0g4Ljk0bC0uNzkyIDIuMzdoLjg0OWwuNzkyLTIuMzdoMS4xNDVsLS43OTIgMi4zN0gxMS40bC0uMTgyIDEuMDQySDkuOEw5LjI5MyA4Ljc3aDEuMjQ4bC0uMTgzIDEuMDQzSDguOTQ2bC0uNzc1IDIuMzM1SDcuMDI2TDcuOCA5LjgxMlptLS41LTEuMDQzaC44NDJsLjUxMy0xLjUwNGgtLjg0OUw3LjMgOC43N1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTnVtYmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuT2JqZWN0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuT2JqZWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNjMgMTJjLTEuMjk0IDAtMi4zODMtLjEwNS0yLjM4My0xLjgwMlY5LjZjMC0uNjM4LS4yNDctLjkxNC0uOTgtLjkxNHYtMS4zN2MuNzMzIDAgLjk4LS4yOC45OC0uOTE1di0uNkM0LjI0NyA0LjEwNSA1LjMzNiA0IDYuNjMxIDR2MS4xNGMtLjc1OSAwLS44ODYuMjcyLS44ODYuODQzdi44MTNjMCAuNDc5LS4yMjUuOTM2LTEuMjEyIDEuMTMzdi4xNDJjLjk4Ny4xOTcgMS4yMTIuNjU0IDEuMjEyIDEuMTMzdi44MTNjMCAuNTcuMTI3Ljg0NC44ODYuODQ0VjEyWm0yLjI2Ni04YzEuMjk1IDAgMi4zODQuMTA1IDIuMzg0IDEuODAyVjYuNGMwIC42MzguMjQ3LjkxNC45OC45MTR2MS4zN2MtLjczMyAwLS45OC4yOC0uOTguOTE1di42QzExLjI4IDExLjg5NSAxMC4xOSAxMiA4Ljg5NiAxMnYtMS4xNGMuNzU5IDAgLjg4Ni0uMjcyLjg4Ni0uODQzdi0uODEzYzAtLjQ3OS4yMjUtLjkzNiAxLjIxMi0xLjEzM1Y3LjkzYy0uOTg3LS4xOTctMS4yMTItLjY1NC0xLjIxMi0xLjEzM3YtLjgxM2MwLS41Ny0uMTI3LS44NDQtLjg4Ni0uODQ0VjRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk9iamVjdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbk9wZXJhdG9yID0gZnVuY3Rpb24gRXVpSWNvblRva2VuT3BlcmF0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi42NjcgOC4wMDJjMC0xLjUuMzk0LTIuNzQzIDEuMjQ4LTMuODIyaDEuNDM3Yy0uNjUyLjgtMS4xNCAyLjM4OC0xLjE0IDMuODIyIDAgMS40My40ODggMy4wMTggMS4xNCAzLjgxOEgzLjkxNWMtLjg1NC0xLjA4LTEuMjQ4LTIuMzIyLTEuMjQ4LTMuODE4Wk02Ljc3IDkuOTk4bC0uODE4LS44MDMgMS4yMy0xLjE5Ny0xLjIzLTEuMjAzLjgzLS43OTMgMS4yMjEgMS4xOTNMOS4yMyA2LjAwMmwuODE4Ljc5My0xLjIyNyAxLjIgMS4yMjcgMS4yLS44MTguODAzTDggOC43OTUgNi43NyA5Ljk5OFptNi41NjMtMmMwIDEuNS0uMzk0IDIuNzQzLTEuMjQ4IDMuODIyaC0xLjQzN2MuNjUyLS44IDEuMTQtMi4zODggMS4xNC0zLjgyMiAwLTEuNDMtLjQ4OC0zLjAxOC0xLjE0LTMuODE4aDEuNDM3Yy44NTQgMS4wOCAxLjI0OCAyLjMyMiAxLjI0OCAzLjgxOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuT3BlcmF0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5QYWNrYWdlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUGFja2FnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm04LjA0OSAzLjc4NSAzLjg1MiAxLjAwNi00LjA0OSAxLjEwM0w0IDQuNzkxbDMuOTUxLTEuMDA2YS4xOS4xOSAwIDAgMSAuMDk4IDBabS4wNzMgMi42NTQgNC41NDUtMS4zMDZ2NS40NWwtLjEzMS4xODQtNC40MTQgMS40NTVWNi40MzlabS00Ljc4OSA0LjE0NVY1LjE4OEw3LjQ5OCA2LjQxdjUuODFsLTQuMDM0LTEuNDUzLS4xMy0uMTgzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5QYWNrYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuUGFyYW1ldGVyID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUGFyYW1ldGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuODg5IDEyVjRoMy4zMDRjMS43OTcgMCAyLjkyMiAxLjExNyAyLjkxOCAyLjc3LjAwNCAxLjY1Mi0xLjE0NCAyLjc0Ni0yLjk3NiAyLjc0Nkg2LjgyMlYxMkg0Ljg5Wm0xLjkzMy00LjAwOGguOTUzYy44NjggMCAxLjMzNi0uNDcyIDEuMzMyLTEuMjIyLjAwNC0uNzMtLjQ2NC0xLjIxMS0xLjMzMi0xLjIxMWgtLjk1M3YyLjQzM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUGFyYW1ldGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuUGVyY29sYXRvciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblBlcmNvbGF0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS41IDdhMS41IDEuNSAwIDEgMCAwLTMgMS41IDEuNSAwIDAgMCAwIDNabTAgMWEyLjUgMi41IDAgMSAwIDAtNSAyLjUgMi41IDAgMCAwIDAgNVpNMTEgOWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTAgMWEyIDIgMCAxIDAgMC00IDIgMiAwIDAgMCAwIDRabS0yLjUgMS41YS41LjUgMCAxIDEtMSAwIC41LjUgMCAwIDEgMSAwWm0xIDBhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDBaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5QZXJjb2xhdG9yOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuUHJvcGVydHkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Qcm9wZXJ0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljg4OSAxMlY0aDMuMzA0YzEuNzk3IDAgMi45MjIgMS4xMTcgMi45MTggMi43Ny4wMDQgMS42NTItMS4xNDQgMi43NDYtMi45NzYgMi43NDZINi44MjJWMTJINC44OVptMS45MzMtNC4wMDhoLjk1M2MuODY4IDAgMS4zMzYtLjQ3MiAxLjMzMi0xLjIyMi4wMDQtLjczLS40NjQtMS4yMTEtMS4zMzItMS4yMTFoLS45NTN2Mi40MzNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblByb3BlcnR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuUmFuZ2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SYW5nZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44MiA1LjExNmEuNS41IDAgMCAwLS43MDQuNzA0bC4wNjQuMDY0TDExLjcxOSA4bC0yLjU0IDIuMTE2YS41LjUgMCAwIDAtLjExNC42M2wuMDUuMDc0YS41LjUgMCAwIDAgLjYzLjExNWwuMDc1LS4wNSAzLTIuNWEuNS41IDAgMCAwIC4wNzEtLjY5N2wtLjA3LS4wNzItMy0yLjVaTTYuMTggNS4xMTZhLjUuNSAwIDAgMSAuNzA0LjcwNGwtLjA2NC4wNjRMNC4yODEgOGwyLjU0IDIuMTE2YS41LjUgMCAwIDEgLjExNC42M2wtLjA1LjA3NGEuNS41IDAgMCAxLS42My4xMTVsLS4wNzUtLjA1LTMtMi41YS41LjUgMCAwIDEtLjA3MS0uNjk3bC4wNy0uMDcyIDMtMi41WlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmFuZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblJhbmtGZWF0dXJlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNHY4aC0yVjZIOXY0SDV2MkgzVjhoNFY0aDZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblJhbmtGZWF0dXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNHY4aC0yVjZIOXY0SDV2MkgzVjhoNFY0aDZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblJhbmtGZWF0dXJlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblJlcG8gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SZXBvKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguNTMzIDkuMDY3Yy0xLjc5MiAwLTIuMzc4LjcyLTIuNTcgMS4xOTRhMS42MDEgMS42MDEgMCAxIDEtMS4xNjMtLjAzN1Y1Ljc3NmExLjU5NSAxLjU5NSAwIDAgMS0xLjA2Ny0xLjUxYzAtLjg4NS43MTUtMS42IDEuNi0xLjYuODg2IDAgMS42LjcxNSAxLjYgMS42IDAgLjctLjQ0MiAxLjI5MS0xLjA2NiAxLjUxdjIuODIxQzYuMzM2IDguMjUxIDcuMDE5IDggOCA4YzEuNDI0IDAgMS44OTktLjcxNSAyLjA1My0xLjE5YTEuNjAzIDEuNjAzIDAgMCAxLS45ODYtMS40NzdjMC0uODg1LjcxNC0xLjYgMS42LTEuNi44ODUgMCAxLjYuNzE1IDEuNiAxLjZhMS41OSAxLjU5IDAgMCAxLTEuMTE1IDEuNTI2Yy0uMTM5Ljc2Mi0uNjU2IDIuMjA4LTIuNjE5IDIuMjA4Wm0tMy4yIDIuMTMzYS41MzUuNTM1IDAgMCAwLS41MzMuNTMzYzAgLjI5NC4yNC41MzQuNTMzLjUzNGEuNTM1LjUzNSAwIDAgMCAwLTEuMDY3Wm0wLTcuNDY3YS41MzUuNTM1IDAgMCAwLS41MzMuNTM0YzAgLjI5My4yNC41MzMuNTMzLjUzMy4yOTQgMCAuNTM0LS4yNC41MzQtLjUzM2EuNTM1LjUzNSAwIDAgMC0uNTM0LS41MzRaTTEwLjY2NyA0LjhhLjUzNS41MzUgMCAwIDAtLjUzNC41MzMuNTM1LjUzNSAwIDAgMCAxLjA2NyAwIC41MzUuNTM1IDAgMCAwLS41MzMtLjUzM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmVwbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblNlYXJjaFR5cGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5TZWFyY2hUeXBlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4yNyA3LjVhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwWk04Ljc3IDcuNWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuNzAyIDEwLjY4MmE0LjUwMSA0LjUwMSAwIDAgMS01Ljc5Ni40ODJMNC4yOCAxMi43ODlhLjc1Ljc1IDAgMCAxLTEuMDYtMS4wNkw0Ljg0NyAxMC4xYTQuNTAxIDQuNTAxIDAgMSAxIDYuODU1LjU4MVptLTUuMzA0LTEuMDZhMyAzIDAgMSAwIDQuMjQzLTQuMjQzQTMgMyAwIDAgMCA2LjM5OCA5LjYyWlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuU2VhcmNoVHlwZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblNlbWFudGljVGV4dCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblNlbWFudGljVGV4dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMi41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMUgzdjEwaDEuNWEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41di0xMVpNMTMuNSAyYS41LjUgMCAwIDEgLjUuNXYxMWEuNS41IDAgMCAxLS41LjVoLTJhLjUuNSAwIDAgMSAwLTFIMTNWM2gtMS41YS41LjUgMCAwIDEgMC0xaDJaTTkuMDk4IDQuNWwtLjI0NCAxLjM5M2guODk2bC0uMjEyIDEuMjExaC0uODk2bC0uNDM1IDIuNTc0Yy0uMDI0LjE3Ni0uMDEzLjMwOC4wMzQuMzk4LjA0Ni4wOS4xNjMuMTM4LjM1LjE0NS4wNzIuMDA0LjIyLS4wMDUuNDQ1LS4wMjZMOC45MSAxMS40NmEyLjc1IDIuNzUgMCAwIDEtLjkxNi4xMjljLS41MjgtLjAwNy0uOTIzLS4xNjItMS4xODYtLjQ2Ni0uMjYyLS4zMDQtLjM3LS43MTYtLjMyLTEuMjM3bC40NTUtMi43OEg2LjI1bC4yMDctMS4yMTJoLjY5NEw3LjM5NCA0LjVoMS43MDRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblNlbWFudGljVGV4dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblNoYXBlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU2hhcGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMgMTB2M2gtM3YtMUg2djFIM3YtM2gxVjZIM1YzaDN2MWg0VjNoM3YzaC0xdjRoMVptLTggMUg0djFoMXYtMVptNyAwaC0xdjFoMXYtMVpNNSA0SDR2MWgxVjRabTcgMGgtMXYxaDFWNFptLTEgMmgtMVY1SDZ2MUg1djRoMXYxaDR2LTFoMVY2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TaGFwZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblN0cmluZyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblN0cmluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTkuMTQ3IDQuMjk3LS4yNTUgMS40NTVoLjkzNmwtLjIyMiAxLjI2NmgtLjkzNWwtLjQ1NSAyLjY4OGMtLjAyNS4xODQtLjAxMy4zMjMuMDM2LjQxNy4wNDguMDkzLjE3LjE0NC4zNjUuMTUxLjA3NS4wMDQuMjMtLjAwNS40NjUtLjAyN2wtLjEzIDEuMzJjLS4zLjA5Ny0uNjE4LjE0Mi0uOTU3LjEzNS0uNTUyLS4wMDctLjk2NS0uMTctMS4yMzktLjQ4Ny0uMjc0LS4zMTctLjM4Ni0uNzQ4LS4zMzUtMS4yOTNsLjQ3Ni0yLjkwNGgtLjcyNWwuMjE2LTEuMjY2aC43MjVsLjI1NC0xLjQ1NWgxLjc4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TdHJpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5TdHJ1Y3QgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5TdHJ1Y3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNC42NjcgNC42NjdoMi42NjZ2Mi42NjZINC42NjdWNC42NjdabTAgNGgyLjY2NnYyLjY2Nkg0LjY2N1Y4LjY2N1ptNC00aDIuNjY2djIuNjY2SDguNjY3VjQuNjY3Wm0wIDRoMi42NjZ2Mi42NjZIOC42NjdWOC42NjdaTTMuMzMzIDMuMzMzdjkuMzM0aDkuMzM0VjMuMzMzSDMuMzMzWm0wLTEuMzMzaDkuMzM0QzEzLjQwMyAyIDE0IDIuNTk3IDE0IDMuMzMzdjkuMzM0YzAgLjczNi0uNTk3IDEuMzMzLTEuMzMzIDEuMzMzSDMuMzMzQTEuMzMzIDEuMzMzIDAgMCAxIDIgMTIuNjY3VjMuMzMzQzIgMi41OTcgMi41OTcgMiAzLjMzMyAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TdHJ1Y3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5TeW1ib2wgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5TeW1ib2woX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjMxNiAxNGE2IDYgMCAxIDEgMC0xMiA2IDYgMCAwIDEgMCAxMlptMC0xLjMzM2E0LjY2NyA0LjY2NyAwIDEgMCAwLTkuMzM0IDQuNjY3IDQuNjY3IDAgMCAwIDAgOS4zMzRabTIuMTktNS43MmgxLjE0M2MuMDE5IDEuNDQ4LS43OTMgMi4zMzgtMS45MjIgMi4zMzgtLjYzMiAwLTEuMTk0LS4yNjctMS43MDYtLjgxMS0uMzYtLjM5Ny0uNjM2LS41NzYtMS0uNTc2LS41MTcgMC0uODQ5LjM1NS0uODg1IDEuMDgzSDQuOTgzYy4wMTQtMS40Ny44NTgtMi4zMTQgMS45NS0yLjMxNC41OTUgMCAxLjEyNS4yNDkgMS42NzguODAyLjM5Mi4zODIuNjQxLjU5NSAxLjAzOC41OTUuNDg0IDAgLjg1Ny0uMzIzLjg1Ny0xLjExNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuU3ltYm9sOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuVGFnID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVGFnKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgOGExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNCA0YTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDYuOTg5YTEgMSAwIDAgMCAuODI1LS40MzZsMi4wNS0zYTEgMSAwIDAgMCAwLTEuMTI4bC0yLjA1LTNBMSAxIDAgMCAwIDEwLjk5IDRINFptLjc1IDEuMjVhLjUuNSAwIDAgMC0uNS41djQuNWEuNS41IDAgMCAwIC41LjVoNS43NDVhLjUuNSAwIDAgMCAuNDA1LS4yMDZsMS42MzYtMi4yNWEuNS41IDAgMCAwIDAtLjU4OEwxMC45IDUuNDU2YS41LjUgMCAwIDAtLjQwNS0uMjA2SDQuNzVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblRhZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblRleHQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5UZXh0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOS4xNDcgNC4yOTctLjI1NSAxLjQ1NWguOTM2bC0uMjIyIDEuMjY2aC0uOTM1bC0uNDU1IDIuNjg4Yy0uMDI1LjE4NC0uMDEzLjMyMy4wMzYuNDE3LjA0OC4wOTMuMTcuMTQ0LjM2NS4xNTEuMDc1LjAwNC4yMy0uMDA1LjQ2NS0uMDI3bC0uMTMgMS4zMmMtLjMuMDk3LS42MTguMTQyLS45NTcuMTM1LS41NTItLjAwNy0uOTY1LS4xNy0xLjIzOS0uNDg3LS4yNzQtLjMxNy0uMzg2LS43NDgtLjMzNS0xLjI5M2wuNDc2LTIuOTA0aC0uNzI1bC4yMTYtMS4yNjZoLjcyNWwuMjU0LTEuNDU1aDEuNzhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblRleHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5Ub2tlbkNvdW50ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVG9rZW5Db3VudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNEgzdjNoNVY0Wk0xMyA5SDh2M2g1VjlaTTEwIDRoM3YzaC0zVjRaTTYgOUgzdjNoM1Y5WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Ub2tlbkNvdW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuVmFyaWFibGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5WYXJpYWJsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm02LjY0OSA0LjY2NyAxLjMyNiA0LjdoLjA1bDEuMzI2LTQuN2gxLjk4MmwtMi4xMzQgNi42NjZINi44MDFMNC42NjcgNC42Njd6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblZhcmlhYmxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuVmVjdG9yRGVuc2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5WZWN0b3JEZW5zZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMi41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMUgzdjEwaDEuNWEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41di0xMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgNWExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBabTAgM2ExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBabS0xIDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm00LTdhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWk04IDlhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm0xIDJhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWm0yLTVhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm0xIDJhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWm0tMSA0YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjUgMmEuNS41IDAgMCAxIC41LjV2MTFhLjUuNSAwIDAgMS0uNS41aC0yYS41LjUgMCAwIDEgMC0xSDEzVjNoLTEuNWEuNS41IDAgMCAxIDAtMWgyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5WZWN0b3JEZW5zZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblZlY3RvclNwYXJzZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblZlY3RvclNwYXJzZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMi41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMUgzdjEwaDEuNWEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41di0xMVpNOCA2YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptMCA2YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgOGExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBabTUgMWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy41IDJhLjUuNSAwIDAgMSAuNS41djExYS41LjUgMCAwIDEtLjUuNWgtMmEuNS41IDAgMCAxIDAtMUgxM1YzaC0xLjVhLjUuNSAwIDAgMSAwLTFoMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuVmVjdG9yU3BhcnNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRyYWluaW5nID0gZnVuY3Rpb24gRXVpSWNvblRyYWluaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMzg2IDkuODM2YTIuNSAyLjUgMCAxIDEgMy42MTEuNjY3QzE1LjIxMiAxMS4xNzMgMTYgMTIuNDYgMTYgMTR2MS41YS41LjUgMCAxIDEtMSAwVjE0YzAtMS43MjQtMS4yNzYtMy0zLTMtLjkxIDAtMS4yOTgtLjAyLTEuODA1LS4xMjItMS4yNS0uMjU0LTIuMzMzLTEtMy41ODUtMi41NjZhLjUuNSAwIDEgMSAuNzgtLjYyNGMuOSAxLjEyNCAxLjY1MyAxLjc0IDIuNDM0IDIuMDQzLjE1NS4wNTIuMzQ1LjA4My41NjIuMTA1Wm0xLjc4NS4xMjhjLjA4My4wMS4xNjcuMDIxLjI1MS4wMzRMMTIuNSAxMGExLjUgMS41IDAgMSAwLS4zMy0uMDM2Wk05Ljc4IDExLjk3YS41LjUgMCAwIDEgLjUuNWMwIC4wNzYtLjA0Ny4yMjYtLjA1LjIzMS0uMTc5LjM4LS4yMy43NzQtLjIzIDEuMzAydjEuNWEuNS41IDAgMSAxLTEgMHYtMS41YzAtLjY1Ny4wNzItMS4xODYuMzA3LTEuNjk2YS41LjUgMCAwIDEgLjQ3My0uMzM3Wk01Ljk1OCA1Ljc3MmEuNS41IDAgMCAxLS43OC42MjVMMy4xMSAzLjgxMmEuNS41IDAgMSAxIC43OC0uNjI0bDIuMDY4IDIuNTg0Wk0xIDExaDUuNWEuNS41IDAgMSAxIDAgMWgtNmEuNS41IDAgMCAxLS41LS41Vi41QS41LjUgMCAwIDEgLjUgMGgxMmEuNS41IDAgMCAxIC41LjV2M2EuNS41IDAgMSAxLTEgMFYxSDF2MTBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UcmFpbmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UcmFuc2l0aW9uTGVmdEluID0gZnVuY3Rpb24gRXVpSWNvblRyYW5zaXRpb25MZWZ0SW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4xNDYgNS44NTRhLjUuNSAwIDAgMSAuNzA4LS43MDhsMiAyYS41LjUgMCAwIDEgMCAuNzA4bC0yIDJhLjUuNSAwIDAgMS0uNzA4LS43MDhMMTEuMjkzIDhINy41YS41LjUgMCAwIDEgMC0xaDMuNzkzbC0xLjE0Ny0xLjE0NlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yIDBoMTFhMiAyIDAgMCAxIDIgMnYxMWEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlYyYTIgMiAwIDAgMSAyLTJabTIuNzA3IDFINXYxLjI5M2wtNCA0VjQuNzA3TDQuNzA3IDFaTTYgMTRWMWg3YTEgMSAwIDAgMSAxIDF2MTFhMSAxIDAgMCAxLTEgMUg2Wm0tMS0xLjI5M1YxNEgzLjcwN0w1IDEyLjcwN1ptMC0zdjEuNTg2TDIuMjkzIDE0SDJhMSAxIDAgMCAxLS44MzgtLjQ1NEw1IDkuNzA3Wm0wLTN2MS41ODZsLTQgNHYtMS41ODZsNC00Wm0wLTN2MS41ODZsLTQgNFY3LjcwN2w0LTRaTTMuMjkzIDFIMmExIDEgMCAwIDAtMSAxdjEuMjkzTDMuMjkzIDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UcmFuc2l0aW9uTGVmdEluOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRyYW5zaXRpb25MZWZ0T3V0ID0gZnVuY3Rpb24gRXVpSWNvblRyYW5zaXRpb25MZWZ0T3V0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44NTQgNS44NTRhLjUuNSAwIDAgMC0uNzA4LS43MDhsLTIgMmEuNS41IDAgMCAwIDAgLjcwOGwyIDJhLjUuNSAwIDAgMCAuNzA4LS43MDhMOC43MDcgOEgxMi41YS41LjUgMCAwIDAgMC0xSDguNzA3bDEuMTQ3LTEuMTQ2WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIgMGgxMWEyIDIgMCAwIDEgMiAydjExYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMlptMi43MDcgMUg1djEuMjkzbC00IDRWNC43MDdMNC43MDcgMVpNNiAxNFYxaDdhMSAxIDAgMCAxIDEgMXYxMWExIDEgMCAwIDEtMSAxSDZabS0xLTEuMjkzVjE0SDMuNzA3TDUgMTIuNzA3Wm0wLTN2MS41ODZMMi4yOTMgMTRIMmExIDEgMCAwIDEtLjgzOC0uNDU0TDUgOS43MDdabTAtM3YxLjU4NmwtNCA0di0xLjU4Nmw0LTRabTAtM3YxLjU4NmwtNCA0VjcuNzA3bDQtNFpNMy4yOTMgMUgyYTEgMSAwIDAgMC0xIDF2MS4yOTNMMy4yOTMgMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRyYW5zaXRpb25MZWZ0T3V0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRyYW5zaXRpb25Ub3BJbiA9IGZ1bmN0aW9uIEV1aUljb25UcmFuc2l0aW9uVG9wSW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjE0NiAxMC4xNDZhLjUuNSAwIDAgMSAuNzA4LjcwOGwtMiAyYS41LjUgMCAwIDEtLjcwOCAwbC0yLTJhLjUuNSAwIDAgMSAuNzA4LS43MDhMNyAxMS4yOTNWNy41YS41LjUgMCAwIDEgMSAwdjMuNzkzbDEuMTQ2LTEuMTQ3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE1IDJ2MTFhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yaDExYTIgMiAwIDAgMSAyIDJabS0xIDIuNzA3VjVoLTEuMjkzbC00LTRoMS41ODZMMTQgNC43MDdaTTEgNmgxM3Y3YTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjZabTEuMjkzLTFIMVYzLjcwN0wyLjI5MyA1Wm0zIDBIMy43MDdMMSAyLjI5M1YyYTEgMSAwIDAgMSAuNDU1LS44MzhMNS4yOTMgNVptMyAwSDYuNzA3bC00LTRoMS41ODZsNCA0Wm0zIDBIOS43MDdsLTQtNGgxLjU4Nmw0IDRaTTE0IDMuMjkzVjJhMSAxIDAgMCAwLTEtMWgtMS4yOTNMMTQgMy4yOTNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UcmFuc2l0aW9uVG9wSW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVHJhbnNpdGlvblRvcE91dCA9IGZ1bmN0aW9uIEV1aUljb25UcmFuc2l0aW9uVG9wT3V0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS4xNDYgOS44NTRhLjUuNSAwIDAgMCAuNzA4LS43MDhsLTItMmEuNS41IDAgMCAwLS43MDggMGwtMiAyYS41LjUgMCAxIDAgLjcwOC43MDhMNyA4LjcwN1YxMi41YS41LjUgMCAwIDAgMSAwVjguNzA3bDEuMTQ2IDEuMTQ3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE1IDJ2MTFhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yaDExYTIgMiAwIDAgMSAyIDJabS0xIDIuNzA3VjVoLTEuMjkzbC00LTRoMS41ODZMMTQgNC43MDdaTTEgNmgxM3Y3YTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjZabTEuMjkzLTFIMVYzLjcwN0wyLjI5MyA1Wm0zIDBIMy43MDdMMSAyLjI5M1YyYTEgMSAwIDAgMSAuNDU1LS44MzhMNS4yOTMgNVptMyAwSDYuNzA3bC00LTRoMS41ODZsNCA0Wm0zIDBIOS43MDdsLTQtNGgxLjU4Nmw0IDRaTTE0IDMuMjkzVjJhMSAxIDAgMCAwLTEtMWgtMS4yOTNMMTQgMy4yOTNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UcmFuc2l0aW9uVG9wT3V0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRyYXNoID0gZnVuY3Rpb24gRXVpSWNvblRyYXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEgM2g1djFIMFYzaDVWMWExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXYyWm0tNy4wNTYgOEg3djFINC4xbC4zOTIgMi41MTljLjA0Mi4yNjkuMjU0LjQ1OC40OTMuNDU4aDYuMDNjLjIzOSAwIC40NTEtLjE4OS40OTMtLjQ1OGwxLjQ5OC05LjU3NkgxNGwtMS41MDQgOS43M2MtLjExNi43NDctLjc0IDEuMzA0LTEuNDgxIDEuMzA0aC02LjAzYy0uNzQxIDAtMS4zNjUtLjU1Ny0xLjQ4MS0xLjMwNGwtMS41MTEtOS43M0g5VjUuOTVIMy4xNTdMMy40NzYgOEg4djFIMy42MzJsLjMxMiAyWk02IDNoNFYxSDZ2MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRyYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblVuZm9sZCA9IGZ1bmN0aW9uIEV1aUljb25VbmZvbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjE0IDMuODA4IDcuNTMgMS41MWEuNjcuNjcgMCAwIDEgLjk0MiAwbDIuMzg5IDIuMjk4Yy4yNi4yNTYuNjg1LjI1Ni45NDQgMGEuNjUuNjUgMCAwIDAgMC0uOTNMOS40MTYuNTc4YTIuMDIgMi4wMiAwIDAgMC0yLjgzMiAwbC0yLjM4OCAyLjNhLjY1LjY1IDAgMCAwIDAgLjkzYy4yNi4yNTYuNjgzLjI1Ni45NDQgMHptMCA4LjM4NCAyLjM5IDIuMjk4YS42Ny42NyAwIDAgMCAuOTQyIDBsMi4zODktMi4yOThhLjY3Ny42NzcgMCAwIDEgLjk0NCAwIC42NS42NSAwIDAgMSAwIC45M2wtMi4zODggMi4zYTIuMDIgMi4wMiAwIDAgMS0yLjgzMiAwbC0yLjM4OC0yLjNhLjY1LjY1IDAgMCAxIDAtLjkzLjY3Ny42NzcgMCAwIDEgLjk0NCAwek0xNiA2SDB2NGgxNlY2ek0xIDlWN2gxNHYySDF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25VbmZvbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVW5saW5rID0gZnVuY3Rpb24gRXVpSWNvblVubGluayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNTY1IDEwLjgzYS41LjUgMCAxIDEgLjgxOS41NzNsLTEuODc3IDIuNjhjLS45NjMgMS4zNzYtMy4wMiAxLjU1LTQuNTg4LjQ1Qy4zNSAxMy40MzYtLjE5MSAxMS40NDUuNzczIDEwLjA3TDMuNjQgNS45NzNjLjk2My0xLjM3NSAzLjAxOS0xLjU0OCA0LjU4Ny0uNDVhLjUuNSAwIDEgMS0uNTczLjgyQzYuNTA5IDUuNTQgNS4wOCA1LjY2IDQuNDYgNi41NDZsLTIuODY4IDQuMDk1Yy0uNjIxLjg4Ny0uMjQ1IDIuMjcuOSAzLjA3MyAxLjE0Ni44MDIgMi41NzUuNjgyIDMuMTk2LS4yMDVsMS44NzctMi42OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuODkyIDMuNDNhLjUuNSAwIDEgMS0uNTc0LS44MTlMMTAgLjczNGMxLjM3Ni0uOTYzIDMuMzY3LS40MjIgNC40NjUgMS4xNDYgMS4wOTggMS41NjkuOTI2IDMuNjI1LS40NSA0LjU4OEw5LjkxOCA5LjMzNmMtMS4zNzUuOTYzLTMuMzY2LjQyMi00LjQ2NC0xLjE0NmEuNS41IDAgMSAxIC44MTktLjU3NGMuODAyIDEuMTQ2IDIuMTg1IDEuNTIyIDMuMDcyLjlMMTMuNDQgNS42NWMuODg2LS42MjEgMS4wMDYtMi4wNS4yMDQtMy4xOTUtLjgwMi0xLjE0Ni0yLjE4Ni0xLjUyMi0zLjA3Mi0uOUw3Ljg5MiAzLjQzek02IC41djNhLjUuNSAwIDAgMS0xIDB2LTNhLjUuNSAwIDAgMSAxIDB6TTEuMDU4IDIuMjNsMi40NTggMS43MmEuNS41IDAgMCAxLS41NzQuODJMLjQ4NCAzLjA1YS41LjUgMCAxIDEgLjU3NC0uODJ6bTEyIDcuMDkzIDIuNDU3IDEuNzJhLjUuNSAwIDEgMS0uNTczLjgybC0yLjQ1Ny0xLjcyYS41LjUgMCAxIDEgLjU3My0uODJ6bS0yLjA5OSAxLjE4MXYzYS41LjUgMCAxIDEtMSAwdi0zYS41LjUgMCAxIDEgMSAwelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVW5saW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblVzZXIgPSBmdW5jdGlvbiBFdWlJY29uVXNlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDlhNCA0IDAgMSAwIDAtOCA0IDQgMCAwIDAgMCA4Wm0wLTFhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1IDE0LjI5MUE5LjA1MyA5LjA1MyAwIDAgMCA4IDExYTkuMDUzIDkuMDUzIDAgMCAwLTcgMy4yOTFsLjcxNS43MUE4LjA0NyA4LjA0NyAwIDAgMSA4IDExLjk5NiA4LjA0NyA4LjA0NyAwIDAgMSAxNC4yODYgMTVsLjcxNC0uNzFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Vc2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblVzZXJBdmF0YXIgPSBmdW5jdGlvbiBFdWlJY29uVXNlckF2YXRhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTgsXG4gICAgaGVpZ2h0OiAxOCxcbiAgICB2aWV3Qm94OiBcIjAgMCAxOCAxOFwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNjg5IDExLjEzMmMxLjE1NSAxLjIyMiAxLjk1MyAyLjg3OSAyLjE4MyA0Ljc0OGExLjAwNyAxLjAwNyAwIDAgMS0xIDEuMTJIMy4wMDdhMS4wMDUgMS4wMDUgMCAwIDEtMS0xLjEyYy4yMy0xLjg3IDEuMDI4LTMuNTI2IDIuMTgzLTQuNzQ4LjI0Ny4yMjguNTA1LjQ0Mi43ODIuNjMzLTEuMDM4IDEuMDY5LTEuNzY1IDIuNTUtMS45NzIgNC4yMzdMMTQuODcyIDE2Yy0uMjA0LTEuNjg2LS45My0zLjE2Ni0xLjk2Ni00LjIzNWE3LjAxIDcuMDEgMCAwIDAgLjc4My0uNjMzWk04LjkzOSAxYzEuOSAwIDMgMiA0LjM4IDIuNjMzYTIuNDgzIDIuNDgzIDAgMCAxLTEuODguODY3Yy0uMjk4IDAtLjU3OS0uMDYtLjg0NC0uMTU3QTMuNzI2IDMuNzI2IDAgMCAxIDcuNjkgNS43NWMtMS4zOTUgMC0zLjc1LjI1LTMuMjQ1LTEuOTAzQzUuOTQgMyA2Ljk1MiAxIDguOTQgMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguOTQgMmMyLjIwNSAwIDQgMS43OTQgNCA0cy0xLjc5NSA0LTQgNGMtMi4yMDcgMC00LTEuNzk0LTQtNHMxLjc5My00IDQtNG0wIDlBNSA1IDAgMSAwIDguOTM3Ljk5OSA1IDUgMCAwIDAgOC45NCAxMVwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVzZXJBdmF0YXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVXNlcnMgPSBmdW5jdGlvbiBFdWlJY29uVXNlcnMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS40ODIgNC4zNDRhMiAyIDAgMSAwLTIuOTYzIDBjLS4wOC4wNDItLjE1Ni4wODctLjIzLjEzNi0uNDU3LjMwNS0uNzUuNzA0LS45MzMgMS4wNzNBMy40NTcgMy40NTcgMCAwIDAgMSA2Ljk3OFY5YTEgMSAwIDAgMCAxIDFoMi41YTMuNjkgMy42OSAwIDAgMSAuNjg0LS45NjJMNS4xNzEgOUgyVjdzMC0yIDItMmMxLjAwNyAwIDEuNTA3LjUwNyAxLjc1NSAxLjAxLjIyNS0uMjU0LjQ5My0uNDcuNzkzLS42MzZhMi43MTcgMi43MTcgMCAwIDAtMS4wNjYtMS4wM3pNNCA0YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMnptMTAgNmgtMi41YTMuNjg0IDMuNjg0IDAgMCAwLS42ODQtLjk2MkwxMC44MjkgOUgxNFY3czAtMi0yLTJjLTEuMDA3IDAtMS41MDcuNTA3LTEuNzU1IDEuMDFhMy4wMTIgMy4wMTIgMCAwIDAtLjc5My0uNjM2IDIuNzE2IDIuNzE2IDAgMCAxIDEuMDY2LTEuMDMgMiAyIDAgMSAxIDIuOTYzIDBjLjA4LjA0Mi4xNTYuMDg3LjIzLjEzNi40NTcuMzA1Ljc1LjcwNC45MzMgMS4wNzNBMy40NTMgMy40NTMgMCAwIDEgMTUgNi45NDRWOWExIDEgMCAwIDEtMSAxem0tMi02YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMCA4YzAgLjUxNy0uMTk2Ljk4OS0uNTE4IDEuMzQ0YTIuNzU1IDIuNzU1IDAgMCAxIDEuMTYzIDEuMjFBMy40NTMgMy40NTMgMCAwIDEgMTEgMTEuOTc3VjE0YTEgMSAwIDAgMS0xIDFINmExIDEgMCAwIDEtMS0xdi0yLjAyMmEyLjAwNSAyLjAwNSAwIDAgMSAuMDA2LS4xMzUgMy40NTYgMy40NTYgMCAwIDEgLjM1LTEuMjkgMi43NTUgMi43NTUgMCAwIDEgMS4xNjItMS4yMUEyIDIgMCAxIDEgMTAgOHptLTQgNHYyaDR2LTJzMC0yLTItMi0yIDItMiAyem0zLTRhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVXNlcnM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmVjdG9yID0gZnVuY3Rpb24gRXVpSWNvblZlY3RvcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjUgMTFWNUgxMVYzLjVINVY1SDMuNXY2SDV2MS41aDZWMTFoMS41Wm0xIDBIMTV2NGgtNHYtMS41SDVWMTVIMXYtNGgxLjVWNUgxVjFoNHYxLjVoNlYxaDR2NGgtMS41djZaTTQgNFYySDJ2MmgyWm04IDBoMlYyaC0ydjJaTTIgMTRoMnYtMkgydjJabTEwIDBoMnYtMmgtMnYyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmVjdG9yOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpZGVvUGxheWVyID0gZnVuY3Rpb24gRXVpSWNvblZpZGVvUGxheWVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAxLjk5NEMwIC44OTMuODk1IDAgMS45OTQgMGgxMi4wMTJDMTUuMTA3IDAgMTYgLjg5NSAxNiAxLjk5NHYxMi4wMTJBMS45OTUgMS45OTUgMCAwIDEgMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMCAxIDAgMTQuMDA2VjEuOTk0Wm0xIDB2MTIuMDEyYzAgLjU0OC40NDYuOTk0Ljk5NC45OTRoMTIuMDEyYS45OTUuOTk1IDAgMCAwIC45OTQtLjk5NFYxLjk5NEEuOTk1Ljk5NSAwIDAgMCAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAgMCAxIDEuOTk0Wk0xIDRoMTR2MUgxVjRabTEuNS0xYS41LjUgMCAwIDEgMC0xaDFhLjUuNSAwIDAgMSAwIDFoLTFabTMgMGEuNS41IDAgMCAxIDAtMWgxYS41LjUgMCAwIDEgMCAxaC0xWm00Ljk0NyA2LjEwNmExIDEgMCAwIDEgMCAxLjc4OGwtMyAyQTEgMSAwIDAgMSA2IDEyVjhhMSAxIDAgMCAxIDEuNDQ3LS44OTRsMyAyWk0xMCAxMCA3IDh2NGwzLTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaWRlb1BsYXllcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNBcmVhID0gZnVuY3Rpb24gRXVpSWNvblZpc0FyZWEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDEzaDEwVjkuOTEzbC0yLjU3MS0yLjgyNkw4LjU2IDguNzUzYS41LjUgMCAwIDEtLjcyOC0uMDY3TDQuNDQ4IDQuMzE3IDMgNi4xOTFWMTNabTUuMjk1LTUuMzUgMS44MzctMS42NGEuNS41IDAgMCAxIC43MDMuMDM3bDMuMDM1IDMuMzM2YS41LjUgMCAwIDEgLjEzLjMzN3YzLjc4YS41LjUgMCAwIDEtLjUuNWgtMTFhLjUuNSAwIDAgMS0uNS0uNVY2LjAyYS41LjUgMCAwIDEgLjEwNC0uMzA1bDEuOTQ3LTIuNTJhLjUuNSAwIDAgMSAuNzkxLS4wMDFMOC4yOTUgNy42NVpNMSAxNWgxMy41YS41LjUgMCAxIDEgMCAxSC41YS41LjUgMCAwIDEtLjUtLjV2LTE0YS41LjUgMCAwIDEgMSAwVjE1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQXJlYTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNBcmVhU3RhY2tlZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNBcmVhU3RhY2tlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDFhLjUuNSAwIDAgMSAuNS41VjE1aDEzLjVhLjUuNSAwIDEgMSAwIDFILjVhLjUuNSAwIDAgMS0uNS0uNXYtMTRBLjUuNSAwIDAgMSAuNSAxWm00LjM0MiAyLjE5NEw4LjI5NSA3LjY1bDEuODM3LTEuNjRhLjUuNSAwIDAgMSAuNzAzLjAzN2wzLjAzNSAzLjMzNmEuNS41IDAgMCAxIC4xMy4zMzd2My43OGEuNS41IDAgMCAxLS41LjVoLTExYS41LjUgMCAwIDEtLjUtLjVWNi4wMmEuNS41IDAgMCAxIC4xMDQtLjMwNWwxLjk0Ny0yLjUyYS41LjUgMCAwIDEgLjc5MS0uMDAxWm0tLjM5NCAxLjEyM0wzIDYuMTkxdjQuMTAxbDEuMTQ2LTEuMTQ2YS41LjUgMCAwIDEgLjQ5My0uMTI2bC4wODUuMDMzTDguNSAxMC45NGwxLjc3Ni0uODg4YS41LjUgMCAwIDEgLjM2LS4wMzRsLjA4OC4wMzRMMTMgMTEuMTlWOS45MTNsLTIuNTcxLTIuODI2TDguNTYgOC43NTNhLjUuNSAwIDAgMS0uNzI4LS4wNjdMNC40NDggNC4zMTdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNBcmVhU3RhY2tlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNCYXJIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvblZpc0Jhckhvcml6b250YWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgMTBoLTZhLjUuNSAwIDAgMSAwLTFIOFY2SDIuNWEuNS41IDAgMCAxIDAtMUgxM1YySDIuNWEuNS41IDAgMCAxIDAtMWgxMWEuNS41IDAgMCAxIC41LjV2NGEuNS41IDAgMCAxLS41LjVIOXYzaDIuNWEuNS41IDAgMCAxIC41LjV2NGEuNS41IDAgMCAxLS41LjVoLTlhLjUuNSAwIDEgMSAwLTFIMTF2LTNIOC41Wk0wIC41YS41LjUgMCAxIDEgMSAwdjE0YS41LjUgMCAxIDEtMSAwVi41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFySG9yaXpvbnRhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNCYXJIb3Jpem9udGFsU3RhY2tlZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNCYXJIb3Jpem9udGFsU3RhY2tlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDBhLjUuNSAwIDAgMSAuNS41djE0YS41LjUgMCAxIDEtMSAwVi41QS41LjUgMCAwIDEgLjUgMFptMTMgMWEuNS41IDAgMCAxIC41LjV2NGEuNS41IDAgMCAxLS41LjVIOXYzaDIuNWEuNS41IDAgMCAxIC41LjV2NGEuNS41IDAgMCAxLS41LjVoLTlhLjUuNSAwIDEgMSAwLTFIOXYtM0gyLjVhLjUuNSAwIDAgMSAwLTFINlY2SDIuNWEuNS41IDAgMCAxIDAtMUgxMFYySDIuNWEuNS41IDAgMCAxIDAtMWgxMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0Jhckhvcml6b250YWxTdGFja2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc0JhclZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvblZpc0JhclZlcnRpY2FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgNy41djZhLjUuNSAwIDEgMS0xIDBWOEg2djUuNWEuNS41IDAgMSAxLTEgMFYzSDJ2MTAuNWEuNS41IDAgMSAxLTEgMHYtMTFhLjUuNSAwIDAgMSAuNS0uNWg0YS41LjUgMCAwIDEgLjUuNVY3aDNWNC41YS41LjUgMCAwIDEgLjUtLjVoNGEuNS41IDAgMCAxIC41LjV2OWEuNS41IDAgMSAxLTEgMFY1aC0zdjIuNVpNLjUgMTZhLjUuNSAwIDEgMSAwLTFoMTRhLjUuNSAwIDEgMSAwIDFILjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNCYXJWZXJ0aWNhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNCYXJWZXJ0aWNhbFN0YWNrZWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzQmFyVmVydGljYWxTdGFja2VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuNSAxNWEuNS41IDAgMSAxIDAgMUguNWEuNS41IDAgMSAxIDAtMWgxNFptLTktMTNhLjUuNSAwIDAgMSAuNS41TDUuOTk5IDdIOVY0LjVhLjUuNSAwIDAgMSAuNS0uNWg0YS41LjUgMCAwIDEgLjUuNXY5YS41LjUgMCAxIDEtMSAwVjdoLTN2Ni41YS41LjUgMCAwIDEtLjQxLjQ5Mkw5LjUgMTRhLjUuNSAwIDAgMS0uNS0uNVYxMEg2djMuNWEuNS41IDAgMCAxLS45OTIuMDlMNSAxMy41VjZIMnY3LjVhLjUuNSAwIDEgMS0xIDB2LTExYS41LjUgMCAwIDEgLjUtLjVoNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0JhclZlcnRpY2FsU3RhY2tlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNHYXVnZSA9IGZ1bmN0aW9uIEV1aUljb25WaXNHYXVnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTEyLjg3NyA1Ljg0Ny0xLjAyIDEuMDJhLjUuNSAwIDAgMS0uNzA4LS43MDdsMS4xLTEuMDk5Yy0uMDUtLjA1My0uMS0uMTA2LS4xNTItLjE1N0E2LjQ3MSA2LjQ3MSAwIDAgMCA4IDMuMDE5VjQuNWEuNS41IDAgMCAxLTEgMFYzLjAxOWE2LjQ3IDYuNDcgMCAwIDAtNC4yNjEgMi4wNTVsMS4wNyAxLjA3MWEuNS41IDAgMCAxLS43MDYuNzA3bC0uOTktLjk5QTYuNDYgNi40NiAwIDAgMCAxLjAxOCAxMEgyLjVhLjUuNSAwIDEgMSAwIDFIMS4xNzRjLjA4My4zNTMuMTk2LjY5Ny4zMzcgMS4wM2EuNS41IDAgMSAxLS45MjIuMzlBNy40ODcgNy40ODcgMCAwIDEgMCA5LjVhNy40ODMgNy40ODMgMCAwIDEgMi4xOTctNS4zMDRBNy40ODcgNy40ODcgMCAwIDEgNy41IDJhNy40ODcgNy40ODcgMCAwIDEgNS4zMDQgMi4xOTdBNy40ODMgNy40ODMgMCAwIDEgMTUgOS41YTcuNDg3IDcuNDg3IDAgMCAxLS41OSAyLjkyLjUuNSAwIDAgMS0uOTItLjM5Yy4xNC0uMzMzLjI1My0uNjc3LjMzNi0xLjAzSDEyLjVhLjUuNSAwIDEgMSAwLTFoMS40ODFhNi40ODMgNi40ODMgMCAwIDAtMS4xMDQtNC4xNTNabS02LjA0MSA1LjMxN2EuOTkzLjk5MyAwIDAgMS0uMDEtMS40MDRjLjM4NC0uMzg1IDIuODgyLTIuMDAyIDMuMTQ5LTEuNzM1LjI2Ny4yNjctMS4zNSAyLjc2NS0xLjczNSAzLjE1YS45OTMuOTkzIDAgMCAxLTEuNDA0LS4wMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0dhdWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc0dvYWwgPSBmdW5jdGlvbiBFdWlJY29uVmlzR29hbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjcyNSAzLjY1M2E2IDYgMCAwIDEgMi44NDcgNy41NzYuNS41IDAgMCAxLS45MjgtLjM3MiA1IDUgMCAxIDAtOS4yOTMtLjAxNC41LjUgMCAwIDEtLjIxOC42MTlMMS4zOSAxMi40N2EuNS41IDAgMCAxLS43MDgtLjIzQTcuOTkgNy45OSAwIDAgMSAwIDlhOCA4IDAgMCAxIDExLjIxMi03LjMyOS41LjUgMCAwIDEgLjIzNC43MDRsLS43MjEgMS4yNzhabS0uOTMzLS4zOC41LS44ODlhNyA3IDAgMCAwLTguOTAyIDguOTNsLjg4Ni0uNTExYTYgNiAwIDAgMSA3LjUxNi03LjUzWk02LjczIDkuNDY3YTEuNzUgMS43NSAwIDEgMSAyLjUzOSAwIDIgMiAwIDEgMS0yLjUzOSAwWk04IDEyLjAxM2ExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTAtM2EuNzUuNzUgMCAxIDAgMC0xLjUuNzUuNzUgMCAwIDAgMCAxLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNHb2FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc0xpbmUgPSBmdW5jdGlvbiBFdWlJY29uVmlzTGluZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjY1NCAzLjQ4Yy4yNDguMjI1LjU1Mi4zODkuODg4LjQ2N0wxMS4yNCA5LjQzYTEuOTkgMS45OSAwIDAgMC0uOTE1LS40MDRsMi4zMy01LjU0N1pNOS4xNDYgOS4xOWEyLjAwOCAyLjAwOCAwIDAgMC0uNzY5LjY0bC0xLjU3Mi0yYy4zMTEtLjEzNi41ODEtLjM1Ljc4NS0uNjE4bDEuNTU2IDEuOTc4Wk01LjU4MSA3Ljk1NmwtMi4xMzQgNC4yNjhhLjUuNSAwIDAgMS0uODk0LS40NDhsMi4xMzQtNC4yNjhjLjI1LjIyLjU1Ny4zNzYuODk0LjQ0OFpNMSAxNWgxMy41YS41LjUgMCAxIDEgMCAxSC41YS41LjUgMCAwIDEtLjUtLjV2LTE0YS41LjUgMCAwIDEgMSAwVjE1Wm01LThhMSAxIDAgMSAxIDAtMiAxIDEgMCAwIDEgMCAyWm00IDVhMSAxIDAgMSAxIDAtMiAxIDEgMCAwIDEgMCAyWm00LTlhMSAxIDAgMSAxIDAtMiAxIDEgMCAwIDEgMCAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzTGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNNYXBDb29yZGluYXRlID0gZnVuY3Rpb24gRXVpSWNvblZpc01hcENvb3JkaW5hdGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjUgMTVDNS43NyAxNSAyIDkuOTcgMiA2LjU5NSAyIDMuNTA3IDQuNDYgMSA3LjUgMVMxMyAzLjUwNyAxMyA2LjU5NUMxMyA5Ljk3IDkuMjMgMTUgNy41IDE1Wm0wLTFjLjI4NiAwIDEuNDgtMS4wNDQgMi40NTktMi4zNUMxMS4yMTkgOS45NjkgMTIgOC4xNTMgMTIgNi41OTYgMTIgNC4wNTUgOS45ODMgMiA3LjUgMlMzIDQuMDU1IDMgNi41OTVjMCAxLjU1Ny43OCAzLjM3MyAyLjA0MSA1LjA1NkM2LjAyIDEyLjk1NiA3LjIxNCAxNCA3LjUgMTRabTAtNC45OTZhMi41IDIuNSAwIDEgMSAwLTUgMi41IDIuNSAwIDAgMSAwIDVabTAtMWExLjUgMS41IDAgMSAwIDAtMyAxLjUgMS41IDAgMCAwIDAgM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc01hcENvb3JkaW5hdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzTWFwUmVnaW9uID0gZnVuY3Rpb24gRXVpSWNvblZpc01hcFJlZ2lvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNSAyLjMwOXY4LjY5YS40OTkuNDk5IDAgMCAxLS4wMzIuMTc2TDkuNSAxMi42OTFWMy44MDlsLTMtMS41Wm0tMS0uMDRMMiAzLjgyNXY4LjkwNmwzLjUyNy0xLjU2OGEuNS41IDAgMCAxLS4wMjctLjE2NFYyLjI3Wm0uMjc0LTEuMjE2YS40OTguNDk4IDAgMCAxIC40NzEuMDFsMy43NjggMS44ODQgNC4yODQtMS45MDRBLjUuNSAwIDAgMSAxNSAxLjV2MTBhLjUuNSAwIDAgMS0uMjk3LjQ1N2wtNC41IDJhLjUuNSAwIDAgMS0uNDI3LS4wMWwtMy43ODktMS44OTQtNC4yODMgMS45MDRhLjUuNSAwIDAgMS0uNzAzLS40NTd2LTEwYS41LjUgMCAwIDEgLjI5Ny0uNDU3bDQuNDc2LTEuOTlaTTEwLjUgMy44MjV2OC45MDZsMy41LTEuNTU2VjIuMjdsLTMuNSAxLjU1NlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc01hcFJlZ2lvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNNZXRyaWMgPSBmdW5jdGlvbiBFdWlJY29uVmlzTWV0cmljKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41MzIgNy4zNGEyLjE2MSAyLjE2MSAwIDEgMSAyLjkzNiAwIDIuNzQ2IDIuNzQ2IDAgMSAxLTIuOTM2IDBaTTIgMGgxMmEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMlptMCAxYTEgMSAwIDAgMC0xIDF2MTJhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xVjJhMSAxIDAgMCAwLTEtMUgyWm02IDUuOTE1YTEuMTYxIDEuMTYxIDAgMSAwIDAtMi4zMjIgMS4xNjEgMS4xNjEgMCAwIDAgMCAyLjMyMlptMCA0LjQ5MmExLjc0NiAxLjc0NiAwIDEgMCAwLTMuNDkyIDEuNzQ2IDEuNzQ2IDAgMCAwIDAgMy40OTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNNZXRyaWM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzUGllID0gZnVuY3Rpb24gRXVpSWNvblZpc1BpZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNSA5YS41LjUgMCAwIDEtLjUtLjVWMy4wMjNBNS41IDUuNSAwIDEgMCAxMS45NzggOUg2LjVaTTcgOGg1LjVhLjUuNSAwIDAgMSAuNS41QTYuNSA2LjUgMCAxIDEgNi41IDJhLjUuNSAwIDAgMSAuNS41VjhabTItNi45NzJWNmg0Ljk3MkMxMy42OTYgMy41NTIgMTEuNDQ4IDEuMzA0IDkgMS4wMjhaTTE0LjUgN2gtNmEuNS41IDAgMCAxLS41LS41di02YS41LjUgMCAwIDEgLjUtLjVDMTEuODUzIDAgMTUgMy4xNDcgMTUgNi41YS41LjUgMCAwIDEtLjUuNVpNNi4xNDYgOC44NTRhLjUuNSAwIDEgMSAuNzA4LS43MDhsNCA0YS41LjUgMCAwIDEtLjcwOC43MDhsLTQtNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1BpZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNUYWJsZSA9IGZ1bmN0aW9uIEV1aUljb25WaXNUYWJsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDN2MTFhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MVptLTEgMFYyYTEgMSAwIDAgMC0xLTFIMmExIDEgMCAwIDAtMSAxdjFoMTRabTAgMUgxdjEwYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMVY0Wk00LjUgNmEuNS41IDAgMCAxIDAgMUgyLjQ5NmEuNS41IDAgMSAxIDAtMUg0LjVabTkgMGEuNS41IDAgMSAxIDAgMWgtNmEuNS41IDAgMCAxIDAtMWg2Wm0tOSAzYS41LjUgMCAwIDEgMCAxSDIuNDk2YS41LjUgMCAxIDEgMC0xSDQuNVptOSAwYS41LjUgMCAxIDEgMCAxaC02YS41LjUgMCAwIDEgMC0xaDZabS05IDNhLjUuNSAwIDEgMSAwIDFIMi40OTZhLjUuNSAwIDEgMSAwLTFINC41Wm05IDBhLjUuNSAwIDEgMSAwIDFoLTZhLjUuNSAwIDEgMSAwLTFoNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1RhYmxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc1RhZ0Nsb3VkID0gZnVuY3Rpb24gRXVpSWNvblZpc1RhZ0Nsb3VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS41IDkuMDQ3YS41LjUgMCAxIDAgMCAxaDEzYS41LjUgMCAwIDAgMC0xaC0xM1ptMC0xaDEzYTEuNSAxLjUgMCAwIDEgMCAzaC0xM2ExLjUgMS41IDAgMCAxIDAtM1pNMTAgMTNhLjUuNSAwIDEgMSAwIDFINGEuNS41IDAgMSAxIDAtMWg2Wk04LjAwMSAyLjAxNWEuNS41IDAgMSAxLS4wMDIgMWwtNS0uMDE1YS41LjUgMCAxIDEgLjAwMy0xbDUgLjAxNVpNMTQgNWEuNS41IDAgMSAxIDAgMUg2YS41LjUgMCAwIDEgMC0xaDhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUYWdDbG91ZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNUZXh0ID0gZnVuY3Rpb24gRXVpSWNvblZpc1RleHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgNXY2aDJhLjUuNSAwIDEgMSAwIDFoLTVhLjUuNSAwIDEgMSAwLTFoMlY1SDV2LjVhLjUuNSAwIDAgMS0xIDB2LTFhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgLjUuNTFsLS4wMjEgMWEuNS41IDAgMSAxLTEtLjAybC4wMS0uNDlIOC41Wk0xIDE1aDEuNWEuNS41IDAgMSAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41di0xLjk5NmEuNS41IDAgMCAxIDEgMFYxNVpNMSAxdjEuNDk3YS41LjUgMCAxIDEtMSAwVi41QS41LjUgMCAwIDEgLjUgMGgyYS41LjUgMCAwIDEgMCAxSDFabTE0IDBoLTEuNDk1YS41LjUgMCAwIDEgMC0xSDE1LjVhLjUuNSAwIDAgMSAuNS41djJhLjUuNSAwIDEgMS0xIDBWMVptMCAxNHYtMS41YS41LjUgMCAxIDEgMSAwdjJhLjUuNSAwIDAgMS0uNS41aC0yYS41LjUgMCAxIDEgMC0xSDE1Wk0wIDYuNWEuNS41IDAgMCAxIDEgMHYzYS41LjUgMCAwIDEtMSAwdi0zWk05LjUgMGEuNS41IDAgMCAxIDAgMWgtM2EuNS41IDAgMCAxIDAtMWgzWk0xNSA2LjVhLjUuNSAwIDEgMSAxIDB2M2EuNS41IDAgMSAxLTEgMHYtM1pNOS41IDE1YS41LjUgMCAxIDEgMCAxaC0zYS41LjUgMCAxIDEgMC0xaDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUZXh0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc1RpbWVsaW9uID0gZnVuY3Rpb24gRXVpSWNvblZpc1RpbWVsaW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuODg0IDEuODAyYzEuMTcxLS4zMDkgMi4yMi0uMjQgMy4xMDMuMDcuMjk1LjEwNC41MDcuMjEyLjYzMS4yOTJsLjE2NC4xMDYuMDQ4LjE4OGMuMjc4IDEuMDY2LjIgMi4xNzUtLjA5MSAzLjIzYTYuNzI4IDYuNzI4IDAgMCAxLS4xOTQuNTk4Yy4wMzUuMTIuMDc0LjI3My4xMTIuNDU0LjIyNyAxLjA2NS4yNDcgMi4xOTMtLjA4IDMuMjY3YTQuODU1IDQuODU1IDAgMCAxLS41MzQgMS4xNzVjLS4zMjQuNTE0LS43Ljk1NC0xLjExNyAxLjMyMy0uODA2LjcxMi0xLjYxNiAxLjA3MS0yLjIzNSAxLjIwNi0uMTQuMTc5LS4zNDYuMzgxLS42MjkuNTc4LS42NDMuNDQ3LTEuNDkzLjcxMS0yLjU2MS43MTEtMS4wNyAwLTEuOTItLjI2NC0yLjU2My0uNzExYTIuODc0IDIuODc0IDAgMCAxLS42MjktLjU3OGMtLjYxOC0uMTM0LTEuNDI4LS40OTMtMi4yMzItMS4yMDMtLjQxOS0uMzctLjc5Ni0uODEtMS4xMi0xLjMyNmE0Ljg1NSA0Ljg1NSAwIDAgMS0uNTM0LTEuMTc1Qy4wOTYgOC45MzMuMTE2IDcuODA1LjM0MyA2Ljc0YTYuNzQgNi43NCAwIDAgMSAuMTEyLS40NTQgNi43MjggNi43MjggMCAwIDEtLjE5NC0uNTk4Qy0uMDMgNC42MzMtLjEwOCAzLjUyNC4xNyAyLjQ1OGwuMDQ4LS4xODguMTY0LS4xMDZjLjEyNC0uMDguMzM2LS4xODguNjMtLjI5MS44ODUtLjMxIDEuOTMzLS4zOCAzLjEwNC0uMDcuMTg0LS4xMDguNDM0LS4yMy43NDgtLjM0OEM1LjYxNiAxLjE3IDYuNDk3IDEgNy41MDEgMWMxLjAwMiAwIDEuODgzLjE3IDIuNjM0LjQ1NS4zMTUuMTE5LjU2NS4yNC43NS4zNDdabTMuMDI3IDEuMTE2YTMuMTMgMy4xMyAwIDAgMC0uMjU1LS4xMDJjLS43NDktLjI2My0xLjY2LS4zMDktMi43MDguMDA3bC0uMjM4LjA3Mi0uMjAxLS4xNDdjLS4xMS0uMDgtLjM1NC0uMjE3LS43MjgtLjM1OEM5LjE0IDIuMTQ3IDguMzggMiA3LjUwMSAyYy0uODggMC0xLjY0MS4xNDctMi4yODMuMzktLjM3My4xNDEtLjYxNy4yNzgtLjcyNy4zNThsLS4yLjE0Ny0uMjQtLjA3MmMtMS4wNDgtLjMxNi0xLjk1OC0uMjctMi43MDctLjAwN2EzLjEzIDMuMTMgMCAwIDAtLjI1NS4xMDJjLS4xNjcuODEyLS4wOTQgMS42NzQuMTM2IDIuNTAzLjA4NC4zMDMuMTY2LjUyNC4yMTcuNjM3bC4wODIuMTgyLS4wNjYuMTljLS4wMzIuMDktLjA4NC4yNy0uMTM3LjUxOC0uMTk1LjkxNC0uMjEyIDEuODguMDU5IDIuNzY3LjEuMzMzLjI0MS42NDUuNDIzLjkzNS4yNzMuNDM0LjU4OC44MDEuOTM2IDEuMTA4LjQzNC4zODMuODk4LjY1NSAxLjM2LjgzNC4yNy4xMDUuNDc0LjE1NS41NzUuMTdsLjI0OC4wMzQuMTIuMjJjLjA1MS4wOTEuMTk5LjI2Ni40NjYuNDUyLjQ3Ni4zMyAxLjEyNy41MzIgMS45OTMuNTMyLjg2NSAwIDEuNTE2LS4yMDIgMS45OS0uNTMyLjI2OC0uMTg2LjQxNi0uMzYuNDY2LS40NTJsLjEyMS0uMjIuMjQ4LS4wMzRjLjEwMS0uMDE1LjMwNS0uMDY1LjU3Ni0uMTcuNDYyLS4xOC45MjctLjQ1MiAxLjM2Mi0uODM2LjM0Ny0uMzA3LjY2LS42NzQuOTMzLTEuMTA3LjE4Mi0uMjkuMzIyLS42MDEuNDIzLS45MzQuMjcxLS44ODcuMjU0LTEuODUzLjA2LTIuNzY3YTQuNTk3IDQuNTk3IDAgMCAwLS4xMzgtLjUxOWwtLjA2Ni0uMTg5LjA4Mi0uMTgyYy4wNS0uMTEzLjEzMy0uMzM0LjIxNy0uNjM3LjIzLS44MjkuMzAzLTEuNjkxLjEzNi0yLjUwM1pNNSA1LjAwOGMuMDA0LjE4MS0uMDQ4LjM2NC0uMjY0LjYxNi0uNDI4LjQ5OC0uOTg1LjQ4OC0xLjQzMS4wNDktLjMyNi0uMzIxLS4zMjUtLjczMi0uMjktMS4wNDcuMDg1LS43Ni43NDgtLjcyMiAxLjI2Mi0uNDQuNDg2LjI3LjcxNy42MTYuNzIzLjgyM1ptNSAwYy4wMDYtLjIwNi4yMzctLjU1My43MjQtLjgyMS41MTQtLjI4MyAxLjE3Ni0uMzIxIDEuMjYuNDQuMDM2LjMxNC4wMzguNzI1LS4yODggMS4wNDYtLjQ0Ni40NC0xLjAwNS40NDktMS40MzMtLjA1LS4yMTctLjI1LS4yNjctLjQzNC0uMjYzLS42MTRaTTcuNSA4Yy0uNTAzIDAtLjk3Ni0uMjQtMS4zNzUtLjY3Mi0uMzk4LS40MzItLjU5Mi0xLjEyNiAwLTEuNTI4LjM4NC0uMjU5IDEuMDgyLS4zIDEuMzc1LS4zLjI5NCAwIC45OTEuMDQxIDEuMzc1LjMuNTkzLjQwMi4zOTcgMS4wOTYgMCAxLjUyOEM4LjQ3NyA3Ljc2IDguMDAyIDggNy41IDhabTAgMWMuODA4IDAgMi42NTYuOTk0IDIuNDkgMi4wNzQtLjE1My45OTMtMi4xMTQuOTI1LTIuNDkuOTI1LS4zNzQgMC0yLjMzNi4wNjgtMi40OS0uOTI1QzQuODQ1IDkuOTk0IDYuNjkzIDkgNy41IDlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUaW1lbGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNWZWdhID0gZnVuY3Rpb24gRXVpSWNvblZpc1ZlZ2EoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjQxNCA4LjAzNiA0Ljg5IDEwLjUxYS41LjUgMCAwIDEtLjcwNy43MDhMMS4zNTQgOC4zODlhLjUuNSAwIDAgMSAwLS43MDdsMi44MjgtMi44MjhhLjUuNSAwIDEgMSAuNzA3LjcwN0wyLjQxNCA4LjAzNlptOC43NjggMi40NzQgMi40NzUtMi40NzQtMi40NzUtMi40NzVhLjUuNSAwIDAgMSAuNzA3LS43MDdsMi44MjkgMi44MjhhLjUuNSAwIDAgMSAwIC43MDdsLTIuODI5IDIuODI5YS41LjUgMCAxIDEtLjcwNy0uNzA4Wk04LjU1OSAyLjUwNmEuNS41IDAgMCAxIC45ODEuMTlMNy40NDEgMTMuNDk0YS41LjUgMCAwIDEtLjk4MS0uMTlMOC41NTkgMi41MDZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNWZWdhOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc1Zpc3VhbEJ1aWxkZXIgPSBmdW5jdGlvbiBFdWlJY29uVmlzVmlzdWFsQnVpbGRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuODM3IDdjLjExLjkzLjE2NSAxLjg4Ni4xNjUgMi44NjlWMTMuNWEuNS41IDAgMSAxLTEgMFY5Ljg2OUEyMy4zIDIzLjMgMCAwIDAgOC44MyA3SDcuMjljLS4xOTUgMS4wNC0uMjkyIDEuOTg1LS4yOTIgMi44MzVWMTMuNWEuNS41IDAgMSAxLTEgMFY5LjgzNWMwLS44NjQuMDkyLTEuODA5LjI3Ni0yLjgzNUgyLjVhLjUuNSAwIDAgMS0uNDk1LS41N2MuMjg1LTIuMDIzIDEuNjI2LTMuMzU4IDMuOTMxLTMuOTYgMS45NjctLjUxNCA0LjIyLS42MDYgNi43NTYtLjI3OEExLjUgMS41IDAgMCAxIDE0IDMuNjc5VjUuNUExLjUgMS41IDAgMCAxIDEyLjUgN0g5LjgzN1ptLS41NjktMUgxMi41YS41LjUgMCAwIDAgLjUtLjVWMy42OGEuNS41IDAgMCAwLS40MzYtLjQ5N2MtMi40MTYtLjMxMS00LjU0LS4yMjUtNi4zNzUuMjU0QzQuNDk0IDMuODggMy40OTEgNC43MjQgMy4xMTcgNkg5LjI2OFpNMiAxMHYzLjVhLjUuNSAwIDEgMS0xIDB2LTRhLjUuNSAwIDAgMSAuNS0uNWgzYS41LjUgMCAwIDEgLjUuNXY0YS41LjUgMCAxIDEtMSAwVjEwSDJabTEwIDMuNWEuNS41IDAgMSAxLTEgMHYtMmEuNS41IDAgMCAxIC41LS41aDNhLjUuNSAwIDAgMSAuNS41djJhLjUuNSAwIDEgMS0xIDBWMTJoLTJ2MS41Wk0xLjAxNiAxNi4wMjZhLjUuNSAwIDAgMSAwLTFIMTVhLjUuNSAwIDEgMSAwIDFIMS4wMTZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNWaXN1YWxCdWlsZGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbldhcm5pbmcgPSBmdW5jdGlvbiBFdWlJY29uV2FybmluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTguNTUgOS41MDIuMzUtMy41MDdhLjkwNS45MDUgMCAxIDAtMS44IDBsLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAwIDEuMSAwWk05IDEyYTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguODY0IDEuNDk2YTEgMSAwIDAgMC0xLjcyOCAwbC03IDEyQTEgMSAwIDAgMCAxIDE1aDE0YTEgMSAwIDAgMCAuODY0LTEuNTA0bC03LTEyWk0xIDE0IDggMmw3IDEySDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25XYXJuaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbldhcm5pbmdGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uV2FybmluZ0ZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDFhMSAxIDAgMCAxIC44NjQuNDk2bDcgMTJBMSAxIDAgMCAxIDE1IDE1SDFhMSAxIDAgMCAxLS44NjQtMS41MDRsNy0xMkExIDEgMCAwIDEgOCAxWm0uOSA0Ljk5NS0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDBMNy4xIDUuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwWk04IDEzYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbldhcm5pbmdGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uV29yZFdyYXAgPSBmdW5jdGlvbiBFdWlJY29uV29yZFdyYXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDNoMTJ2MUgyVjN6bTAgOGg2djFIMnYtMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgN2g5LjV2LjVWN2guMDM5bC4wODMuMDA1YTIuOTU4IDIuOTU4IDAgMCAxIDEuMTAyLjI5OGMuMzA5LjE1NC42MzMuMzk0Ljg4Ljc2My4yNDguMzczLjM5Ni44NDcuMzk2IDEuNDM0IDAgLjU4OC0uMTQ4IDEuMDYxLS4zOTYgMS40MzRhMi4yNTcgMi4yNTcgMCAwIDEtLjg4Ljc2MyAyLjk1NyAyLjk1NyAwIDAgMS0xLjE4NS4zMDJoLS4wMjVsLS4wMDkuMDAxaC0uMDAzcy0uMDAyIDAtLjAwMi0uNXYuNUgxMXYxbC0yLTEuNSAyLTEuNXYxaC41MDZsLjA0NC0uMDAzYTEuOTU5IDEuOTU5IDAgMCAwIC43MjYtLjE5NWMuMTkxLS4wOTUuMzY3LS4yMy40OTUtLjQyMy4xMjctLjE5LjIyOS0uNDY2LjIyOS0uODc5cy0uMTAyLS42ODktLjIyOS0uODc5YTEuMjU2IDEuMjU2IDAgMCAwLS40OTUtLjQyNCAxLjk1OCAxLjk1OCAwIDAgMC0uNzctLjE5N0gyVjd6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Xb3JkV3JhcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Xb3JkV3JhcERpc2FibGVkID0gZnVuY3Rpb24gRXVpSWNvbldvcmRXcmFwRGlzYWJsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAzLjUgMTIgMnYxSDJ2MWgxMHYxbDItMS41ek0xMiA5VjhIMlY3aDEwVjZsMiAxLjVMMTIgOXptMCAzdjFsMi0xLjUtMi0xLjV2MUgydjFoMTB6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Xb3JkV3JhcERpc2FibGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbldyZW5jaCA9IGZ1bmN0aW9uIEV1aUljb25XcmVuY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm02LjkxOCA5Ljc0NiA0LjUzNyA0LjUzN2EyIDIgMCAxIDAgMi44MjgtMi44MjlsLTMuMTU3LTMuMTU2YS41LjUgMCAwIDEgLjcwOC0uNzA4bDMuMTU2IDMuMTU3YTMgMyAwIDEgMS00LjI0MyA0LjI0M2wtNC45NDktNC45NWE1LjAwMSA1LjAwMSAwIDAgMS01LjIyLTcuMTA2LjUuNSAwIDAgMSAuODA1LS4xMzhMMy42NzYgNS4wOWExIDEgMCAxIDAgMS40MTUtMS40MTRMMi43OTcgMS4zODJhLjUuNSAwIDAgMSAuMTM4LS44MDUgNS4wMDEgNS4wMDEgMCAxIDEgMy45ODMgOS4xNjlaTTEuMjI2IDQuMDU0YTQuMDAyIDQuMDAyIDAgMCAwIDYuNjkzIDMuODY1IDQgNCAwIDAgMC0zLjg2NS02LjY5M2wxLjc0NCAxLjc0M2EyIDIgMCAxIDEtMi44MjkgMi44MjhMMS4yMjYgNC4wNTRabTEwLjIyOSA4LjgxNGExIDEgMCAxIDEgMS40MTQtMS40MTQgMSAxIDAgMCAxLTEuNDE0IDEuNDE0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uV3JlbmNoOyIsICJpbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTAgZnJvbSAnLi9hc3NldHMvYWNjZXNzaWJpbGl0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEgZnJvbSAnLi9hc3NldHMvYWdncmVnYXRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMiBmcm9tICcuL2Fzc2V0cy9hbGVydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZUV2ZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNCBmcm9tICcuL2Fzc2V0cy9hbmFseXplX2V2ZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNSBmcm9tICcuL2Fzc2V0cy9hbm5vdGF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNiBmcm9tICcuL2Fzc2V0cy9hbm9tYWx5X2NoYXJ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNyBmcm9tICcuL2Fzc2V0cy9hbm9tYWx5X3N3aW1fbGFuZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTggZnJvbSAnLi9hc3NldHMvYXBtX3RyYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOSBmcm9tICcuL2Fzc2V0cy9hcHBfYWRkX2RhdGEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMCBmcm9tICcuL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMSBmcm9tICcuL2Fzc2V0cy9hcHBfYWdlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMiBmcm9tICcuL2Fzc2V0cy9hcHBfYXBtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMgZnJvbSAnLi9hc3NldHMvYXBwX2FwcF9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNCBmcm9tICcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUgZnJvbSAnLi9hc3NldHMvYXBwX2NhbnZhcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2IGZyb20gJy4vYXNzZXRzL2FwcF9jYXNlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3IGZyb20gJy4vYXNzZXRzL2FwcF9jb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTggZnJvbSAnLi9hc3NldHMvYXBwX2NvbnNvbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOSBmcm9tICcuL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwIGZyb20gJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMSBmcm9tICcuL2Fzc2V0cy9hcHBfZGV2dG9vbHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMiBmcm9tICcuL2Fzc2V0cy9hcHBfZGlzY292ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMyBmcm9tICcuL2Fzc2V0cy9hcHBfZW1zLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQgZnJvbSAnLi9hc3NldHMvYXBwX2ZpbGViZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUgZnJvbSAnLi9hc3NldHMvYXBwX2ZsZWV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjYgZnJvbSAnLi9hc3NldHMvYXBwX2dpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3IGZyb20gJy4vYXNzZXRzL2FwcF9ncmFwaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4IGZyb20gJy4vYXNzZXRzL2FwcF9ncm9rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkgZnJvbSAnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9tYW5hZ2VtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzEgZnJvbSAnLi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMiBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzMgZnJvbSAnLi9hc3NldHMvYXBwX2xlbnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNCBmcm9tICcuL2Fzc2V0cy9hcHBfbG9ncy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1IGZyb20gJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYgZnJvbSAnLi9hc3NldHMvYXBwX21ldHJpY2JlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNyBmcm9tICcuL2Fzc2V0cy9hcHBfbWV0cmljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4IGZyb20gJy4vYXNzZXRzL2FwcF9tbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5IGZyb20gJy4vYXNzZXRzL2FwcF9tb25pdG9yaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDAgZnJvbSAnLi9hc3NldHMvYXBwX25vdGVib29rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDEgZnJvbSAnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MiBmcm9tICcuL2Fzc2V0cy9hcHBfcGlwZWxpbmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MyBmcm9tICcuL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQgZnJvbSAnLi9hc3NldHMvYXBwX3JlcG9ydGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1IGZyb20gJy4vYXNzZXRzL2FwcF9zYXZlZF9vYmplY3RzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYgZnJvbSAnLi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eV9hbmFseXRpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OSBmcm9tICcuL2Fzc2V0cy9hcHBfc3BhY2VzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAgZnJvbSAnLi9hc3NldHMvYXBwX3NxbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxIGZyb20gJy4vYXNzZXRzL2FwcF90aW1lbGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyIGZyb20gJy4vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzIGZyb20gJy4vYXNzZXRzL2FwcF91cHRpbWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NCBmcm9tICcuL2Fzc2V0cy9hcHBfdXNlcnNfcm9sZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NSBmcm9tICcuL2Fzc2V0cy9hcHBfdmlzdWFsaXplLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTYgZnJvbSAnLi9hc3NldHMvYXBwX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3IGZyb20gJy4vYXNzZXRzL2FwcF93YXRjaGVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTggZnJvbSAnLi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OSBmcm9tICcuL2Fzc2V0cy9hcHBzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAgZnJvbSAnLi9hc3NldHMvYXJyb3dFbmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MSBmcm9tICcuL2Fzc2V0cy9hcnJvd1N0YXJ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIgZnJvbSAnLi9hc3NldHMvYXJyb3dfZG93bi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzIGZyb20gJy4vYXNzZXRzL2Fycm93X2xlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NCBmcm9tICcuL2Fzc2V0cy9hcnJvd19yaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1IGZyb20gJy4vYXNzZXRzL2Fycm93X3VwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYgZnJvbSAnLi9hc3NldHMvYXJ0aWNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3IGZyb20gJy4vYXNzZXRzL2FzdGVyaXNrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjggZnJvbSAnLi9hc3NldHMvYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OSBmcm9tICcuL2Fzc2V0cy9iZWFrZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MCBmcm9tICcuL2Fzc2V0cy9iZWxsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzEgZnJvbSAnLi9hc3NldHMvYmVsbFNsYXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIgZnJvbSAnLi9hc3NldHMvYmV0YS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczIGZyb20gJy4vYXNzZXRzL2JvbHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NCBmcm9tICcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUgZnJvbSAnLi9hc3NldHMvYm94ZXNfdmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NiBmcm9tICcuL2Fzc2V0cy9icmFuY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NyBmcm9tICcuL2Fzc2V0cy9icmFuY2hVc2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzggZnJvbSAnLi9hc3NldHMvYnJvb20uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OSBmcm9tICcuL2Fzc2V0cy9icnVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwIGZyb20gJy4vYXNzZXRzL2J1Zy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxIGZyb20gJy4vYXNzZXRzL2J1bGxzZXllLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIgZnJvbSAnLi9hc3NldHMvY2FsZW5kYXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MyBmcm9tICcuL2Fzc2V0cy9jaGFuZ2VfcG9pbnRfZGV0ZWN0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQgZnJvbSAnLi9hc3NldHMvY2hlY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NSBmcm9tICcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODYgZnJvbSAnLi9hc3NldHMvY2hlZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NyBmcm9tICcuL2Fzc2V0cy9jbGlja0xlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OCBmcm9tICcuL2Fzc2V0cy9jbGlja1JpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkgZnJvbSAnLi9hc3NldHMvY2xvY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MCBmcm9tICcuL2Fzc2V0cy9jbG9ja0NvdW50ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MSBmcm9tICcuL2Fzc2V0cy9jbG91ZERyaXp6bGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MiBmcm9tICcuL2Fzc2V0cy9jbG91ZFN0b3JteS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkzIGZyb20gJy4vYXNzZXRzL2Nsb3VkU3VubnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NCBmcm9tICcuL2Fzc2V0cy9jbHVzdGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTUgZnJvbSAnLi9hc3NldHMvY29sb3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NiBmcm9tICcuL2Fzc2V0cy9jb21wdXRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTcgZnJvbSAnLi9hc3NldHMvY29uc29sZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4IGZyb20gJy4vYXNzZXRzL2NvbnRhaW5lci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5IGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMCBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMSBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QmVsb3cuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDIgZnJvbSAnLi9hc3NldHMvY29udGludWl0eVdpdGhpbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMyBmcm9tICcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA0IGZyb20gJy4vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA1IGZyb20gJy4vYXNzZXRzL2NvcHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDYgZnJvbSAnLi9hc3NldHMvY29weV9jbGlwYm9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDcgZnJvbSAnLi9hc3NldHMvY3Jvc3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDggZnJvbSAnLi9hc3NldHMvY3Jvc3NJbkNpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwOSBmcm9tICcuL2Fzc2V0cy9jcm9zc19pbl9jaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTAgZnJvbSAnLi9hc3NldHMvY3Jvc3NoYWlycy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMSBmcm9tICcuL2Fzc2V0cy9jdXJyZW5jeS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMiBmcm9tICcuL2Fzc2V0cy9jdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTMgZnJvbSAnLi9hc3NldHMvZGF0YWJhc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTQgZnJvbSAnLi9hc3NldHMvZGVza3RvcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExNSBmcm9tICcuL2Fzc2V0cy9kaWZmLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE2IGZyb20gJy4vYXNzZXRzL2Rpc2N1c3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTcgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTggZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRFZGl0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE5IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50YXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjAgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTIxIGZyb20gJy4vYXNzZXRzL2RvdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyMiBmcm9tICcuL2Fzc2V0cy9kb3RJbkNpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyMyBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjQgZnJvbSAnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNSBmcm9tICcuL2Fzc2V0cy9kb3dubG9hZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjggZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTI5IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMxIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzQgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM1IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzYgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM3IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzggZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDEgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2JvbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDIgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0NCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0NSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0NiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaXRhbGljLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ3IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ4IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDkgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3JlZG8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTAgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3N0cmlrZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdGFibGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTIgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3VuZGVybGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1NCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTUgZnJvbSAnLi9hc3NldHMvZW1haWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTYgZnJvbSAnLi9hc3NldHMvZW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTcgZnJvbSAnLi9hc3NldHMvZW5kcG9pbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTggZnJvbSAnLi9hc3NldHMvZXFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU5IGZyb20gJy4vYXNzZXRzL2VyYXNlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MCBmcm9tICcuL2Fzc2V0cy9lcnJvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MSBmcm9tICcuL2Fzc2V0cy9lcnJvckZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MiBmcm9tICcuL2Fzc2V0cy9lc3FsVmlzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYzIGZyb20gJy4vYXNzZXRzL2V4aXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjQgZnJvbSAnLi9hc3NldHMvZXhwYW5kLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY1IGZyb20gJy4vYXNzZXRzL2V4cGFuZE1pbmkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjYgZnJvbSAnLi9hc3NldHMvZXhwb3J0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY3IGZyb20gJy4vYXNzZXRzL2V5ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2OCBmcm9tICcuL2Fzc2V0cy9leWVfY2xvc2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY5IGZyb20gJy4vYXNzZXRzL2ZhY2VfaGFwcHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzAgZnJvbSAnLi9hc3NldHMvZmFjZV9uZXV0cmFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTcxIGZyb20gJy4vYXNzZXRzL2ZhY2Vfc2FkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTcyIGZyb20gJy4vYXNzZXRzL2ZpZWxkX3N0YXRpc3RpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzMgZnJvbSAnLi9hc3NldHMvZmlsdGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc0IGZyb20gJy4vYXNzZXRzL2ZpbHRlckV4Y2x1ZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzUgZnJvbSAnLi9hc3NldHMvZmlsdGVySWdub3JlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc2IGZyb20gJy4vYXNzZXRzL2ZpbHRlckluQ2lyY2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc3IGZyb20gJy4vYXNzZXRzL2ZpbHRlckluY2x1ZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzggZnJvbSAnLi9hc3NldHMvZmxhZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3OSBmcm9tICcuL2Fzc2V0cy9mb2xkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTgwIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jaGVjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4MSBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTgyIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4MyBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfb3Blbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4NCBmcm9tICcuL2Fzc2V0cy9mcmFtZU5leHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODUgZnJvbSAnLi9hc3NldHMvZnJhbWVQcmV2aW91cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4NiBmcm9tICcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4NyBmcm9tICcuL2Fzc2V0cy9mdWxsX3NjcmVlbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4OCBmcm9tICcuL2Fzc2V0cy9mdW5jdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4OSBmcm9tICcuL2Fzc2V0cy9nZWFyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTkwIGZyb20gJy4vYXNzZXRzL2dsYXNzZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTEgZnJvbSAnLi9hc3NldHMvZ2xvYmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTIgZnJvbSAnLi9hc3NldHMvZ3JhYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5MyBmcm9tICcuL2Fzc2V0cy9ncmFiT21uaWRpcmVjdGlvbmFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk0IGZyb20gJy4vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5NSBmcm9tICcuL2Fzc2V0cy9ncmFkaWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5NiBmcm9tICcuL2Fzc2V0cy9ncmlkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk3IGZyb20gJy4vYXNzZXRzL2hlYXJ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk4IGZyb20gJy4vYXNzZXRzL2hlYXRtYXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTkgZnJvbSAnLi9hc3NldHMvaGVscC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwMCBmcm9tICcuL2Fzc2V0cy9ob21lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAxIGZyb20gJy4vYXNzZXRzL2lJbkNpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwMiBmcm9tICcuL2Fzc2V0cy9pbWFnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwMyBmcm9tICcuL2Fzc2V0cy9pbXBvcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDQgZnJvbSAnLi9hc3NldHMvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDUgZnJvbSAnLi9hc3NldHMvaW5kZXhUZW1wb3JhcnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDYgZnJvbSAnLi9hc3NldHMvaW5kZXhfY2xvc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDcgZnJvbSAnLi9hc3NldHMvaW5kZXhfZWRpdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwOCBmcm9tICcuL2Fzc2V0cy9pbmRleF9mbHVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwOSBmcm9tICcuL2Fzc2V0cy9pbmRleF9tYXBwaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjEwIGZyb20gJy4vYXNzZXRzL2luZGV4X29wZW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTEgZnJvbSAnLi9hc3NldHMvaW5kZXhfcnVudGltZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxMiBmcm9tICcuL2Fzc2V0cy9pbmRleF9zZXR0aW5ncy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxMyBmcm9tICcuL2Fzc2V0cy9pbmZpbml0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxNCBmcm9tICcuL2Fzc2V0cy9pbnB1dE91dHB1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxNSBmcm9tICcuL2Fzc2V0cy9pbnNwZWN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjE2IGZyb20gJy4vYXNzZXRzL2ludmVydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxNyBmcm9tICcuL2Fzc2V0cy9pcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxOCBmcm9tICcuL2Fzc2V0cy9pc3N1ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxOSBmcm9tICcuL2Fzc2V0cy9rZXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjAgZnJvbSAnLi9hc3NldHMva2V5Ym9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjEgZnJvbSAnLi9hc3NldHMva3FsX2ZpZWxkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjIyIGZyb20gJy4vYXNzZXRzL2txbF9mdW5jdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyMyBmcm9tICcuL2Fzc2V0cy9rcWxfb3BlcmFuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyNCBmcm9tICcuL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjUgZnJvbSAnLi9hc3NldHMva3FsX3ZhbHVlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI2IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI3IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjggZnJvbSAnLi9hc3NldHMvbGF1bmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI5IGZyb20gJy4vYXNzZXRzL2xheWVycy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzMCBmcm9tICcuL2Fzc2V0cy9sZXR0ZXJpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzEgZnJvbSAnLi9hc3NldHMvbGluZURhc2hlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzMiBmcm9tICcuL2Fzc2V0cy9saW5lRG90dGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMzIGZyb20gJy4vYXNzZXRzL2xpbmVTb2xpZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNCBmcm9tICcuL2Fzc2V0cy9saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM1IGZyb20gJy4vYXNzZXRzL2xpc3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzYgZnJvbSAnLi9hc3NldHMvbGlzdF9hZGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzcgZnJvbSAnLi9hc3NldHMvbG9jay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzOCBmcm9tICcuL2Fzc2V0cy9sb2NrT3Blbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzOSBmcm9tICcuL2Fzc2V0cy9sb2dfcGF0dGVybl9hbmFseXNpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MCBmcm9tICcuL2Fzc2V0cy9sb2dfcmF0ZV9hbmFseXNpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2FwYWNoZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2FwcF9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDQgZnJvbSAnLi9hc3NldHMvbG9nb19hd3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDUgZnJvbSAnLi9hc3NldHMvbG9nb19hd3NfbW9uby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2F6dXJlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ3IGZyb20gJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9uby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0OCBmcm9tICcuL2Fzc2V0cy9sb2dvX2JlYXRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ5IGZyb20gJy4vYXNzZXRzL2xvZ29fYnVzaW5lc3NfYW5hbHl0aWNzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUwIGZyb20gJy4vYXNzZXRzL2xvZ29fY2VwaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2Nsb3VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUyIGZyb20gJy4vYXNzZXRzL2xvZ29fY2xvdWRfZWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUzIGZyb20gJy4vYXNzZXRzL2xvZ29fY29kZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvZGVzYW5kYm94LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU1IGZyb20gJy4vYXNzZXRzL2xvZ29fY291Y2hiYXNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU2IGZyb20gJy4vYXNzZXRzL2xvZ29fZG9ja2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU3IGZyb20gJy4vYXNzZXRzL2xvZ29fZHJvcHdpemFyZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1OCBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTkgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjYwIGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpY3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2VudGVycHJpc2Vfc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjYyIGZyb20gJy4vYXNzZXRzL2xvZ29fZXRjZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2djcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2djcF9tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY1IGZyb20gJy4vYXNzZXRzL2xvZ29fZ2l0aHViLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY2IGZyb20gJy4vYXNzZXRzL2xvZ29fZ21haWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjcgZnJvbSAnLi9hc3NldHMvbG9nb19nb2xhbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjggZnJvbSAnLi9hc3NldHMvbG9nb19nb29nbGVfZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2OSBmcm9tICcuL2Fzc2V0cy9sb2dvX2hhcHJveHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzAgZnJvbSAnLi9hc3NldHMvbG9nb19pYm0uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzEgZnJvbSAnLi9hc3NldHMvbG9nb19pYm1fbW9uby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2thZmthLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjczIGZyb20gJy4vYXNzZXRzL2xvZ29fa2liYW5hLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjc0IGZyb20gJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2xvZ2dpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzYgZnJvbSAnLi9hc3NldHMvbG9nb19sb2dzdGFzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3NyBmcm9tICcuL2Fzc2V0cy9sb2dvX21hcHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzggZnJvbSAnLi9hc3NldHMvbG9nb19tZW1jYWNoZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzkgZnJvbSAnLi9hc3NldHMvbG9nb19tZXRyaWNzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgwIGZyb20gJy4vYXNzZXRzL2xvZ29fbW9uZ29kYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MSBmcm9tICcuL2Fzc2V0cy9sb2dvX215c3FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgyIGZyb20gJy4vYXNzZXRzL2xvZ29fbmdpbnguanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODMgZnJvbSAnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg0IGZyb20gJy4vYXNzZXRzL2xvZ29fb3NxdWVyeS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NSBmcm9tICcuL2Fzc2V0cy9sb2dvX3BocC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NiBmcm9tICcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg3IGZyb20gJy4vYXNzZXRzL2xvZ29fcHJvbWV0aGV1cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4OCBmcm9tICcuL2Fzc2V0cy9sb2dvX3JhYmJpdG1xLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg5IGZyb20gJy4vYXNzZXRzL2xvZ29fcmVkaXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTAgZnJvbSAnLi9hc3NldHMvbG9nb19zZWN1cml0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5MSBmcm9tICcuL2Fzc2V0cy9sb2dvX3NpdGVfc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkyIGZyb20gJy4vYXNzZXRzL2xvZ29fc2tldGNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkzIGZyb20gJy4vYXNzZXRzL2xvZ29fc2xhY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTQgZnJvbSAnLi9hc3NldHMvbG9nb191cHRpbWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTUgZnJvbSAnLi9hc3NldHMvbG9nb192dWxuZXJhYmlsaXR5X21hbmFnZW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTYgZnJvbSAnLi9hc3NldHMvbG9nb193ZWJob29rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk3IGZyb20gJy4vYXNzZXRzL2xvZ29fd2luZG93cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5OCBmcm9tICcuL2Fzc2V0cy9sb2dvX3dvcmtwbGFjZV9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTkgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAwIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX2lmLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAxIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX2lucHV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAyIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX291dHB1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwMyBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9xdWV1ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNCBmcm9tICcuL2Fzc2V0cy9tYWduZXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDUgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNiBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aE1pbnVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA3IGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoUGx1cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwOCBmcm9tICcuL2Fzc2V0cy9tYXBfbWFya2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA5IGZyb20gJy4vYXNzZXRzL21lbW9yeS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxMCBmcm9tICcuL2Fzc2V0cy9tZW51LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzExIGZyb20gJy4vYXNzZXRzL21lbnVEb3duLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzEyIGZyb20gJy4vYXNzZXRzL21lbnVMZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzEzIGZyb20gJy4vYXNzZXRzL21lbnVSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxNCBmcm9tICcuL2Fzc2V0cy9tZW51VXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTUgZnJvbSAnLi9hc3NldHMvbWVyZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTYgZnJvbSAnLi9hc3NldHMvbWluaW1pemUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTcgZnJvbSAnLi9hc3NldHMvbWludXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTggZnJvbSAnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE5IGZyb20gJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZV9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjAgZnJvbSAnLi9hc3NldHMvbWludXNfaW5fc3F1YXJlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIxIGZyb20gJy4vYXNzZXRzL21sX2NsYXNzaWZpY2F0aW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMiBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIzIGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI0IGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9wb3B1bGF0aW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyNSBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjYgZnJvbSAnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI3IGZyb20gJy4vYXNzZXRzL21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyOCBmcm9tICcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyOSBmcm9tICcuL2Fzc2V0cy9tb2JpbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzAgZnJvbSAnLi9hc3NldHMvbW9vbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzMSBmcm9tICcuL2Fzc2V0cy9tb3ZlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzMyIGZyb20gJy4vYXNzZXRzL25hbWVzcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzMyBmcm9tICcuL2Fzc2V0cy9uZXN0ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzQgZnJvbSAnLi9hc3NldHMvbmV3X2NoYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzUgZnJvbSAnLi9hc3NldHMvbm9kZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzNiBmcm9tICcuL2Fzc2V0cy9udW1iZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzcgZnJvbSAnLi9hc3NldHMvb2ZmbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzOCBmcm9tICcuL2Fzc2V0cy9vbmxpbmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzkgZnJvbSAnLi9hc3NldHMvcGFja2FnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0MCBmcm9tICcuL2Fzc2V0cy9wYWdlU2VsZWN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQxIGZyb20gJy4vYXNzZXRzL3BhZ2VzU2VsZWN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQyIGZyb20gJy4vYXNzZXRzL3BhaW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQzIGZyb20gJy4vYXNzZXRzL3BhbGV0dGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDQgZnJvbSAnLi9hc3NldHMvcGFwZXJfY2xpcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NSBmcm9tICcuL2Fzc2V0cy9wYXJ0aWFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ2IGZyb20gJy4vYXNzZXRzL3BhdXNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ3IGZyb20gJy4vYXNzZXRzL3BheW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDggZnJvbSAnLi9hc3NldHMvcGVuY2lsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ5IGZyb20gJy4vYXNzZXRzL3BlcmNlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTAgZnJvbSAnLi9hc3NldHMvcGluLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzUxIGZyb20gJy4vYXNzZXRzL3Bpbl9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTIgZnJvbSAnLi9hc3NldHMvcGlwZUJyZWFrcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1MyBmcm9tICcuL2Fzc2V0cy9waXBlTm9CcmVha3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTQgZnJvbSAnLi9hc3NldHMvcGl2b3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTUgZnJvbSAnLi9hc3NldHMvcGxheS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1NiBmcm9tICcuL2Fzc2V0cy9wbGF5RmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU3IGZyb20gJy4vYXNzZXRzL3BsdXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTggZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTkgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYwIGZyb20gJy4vYXNzZXRzL3BsdXNfaW5fc3F1YXJlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYxIGZyb20gJy4vYXNzZXRzL3BvcG91dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MiBmcm9tICcuL2Fzc2V0cy9wdXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYzIGZyb20gJy4vYXNzZXRzL3F1ZXN0aW9uX2luX2NpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NCBmcm9tICcuL2Fzc2V0cy9xdW90ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NSBmcm9tICcuL2Fzc2V0cy9yZWZyZXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY2IGZyb20gJy4vYXNzZXRzL3JlcG9ydGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY3IGZyb20gJy4vYXNzZXRzL3JldHVybl9rZXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjggZnJvbSAnLi9hc3NldHMvc2F2ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2OSBmcm9tICcuL2Fzc2V0cy9zY2FsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3MCBmcm9tICcuL2Fzc2V0cy9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzEgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzIgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxEZXRlY3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3MyBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc0IGZyb20gJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzUgZnJvbSAnLi9hc3NldHMvc2hhcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzYgZnJvbSAnLi9hc3NldHMvc2hhcmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzcgZnJvbSAnLi9hc3NldHMvc2luZ2xlX21ldHJpY192aWV3ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzggZnJvbSAnLi9hc3NldHMvc25vd2ZsYWtlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc5IGZyb20gJy4vYXNzZXRzL3NvcnRBc2NlbmRpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODAgZnJvbSAnLi9hc3NldHMvc29ydERlc2NlbmRpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODEgZnJvbSAnLi9hc3NldHMvc29ydExlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODIgZnJvbSAnLi9hc3NldHMvc29ydFJpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzgzIGZyb20gJy4vYXNzZXRzL3NvcnRfZG93bi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NCBmcm9tICcuL2Fzc2V0cy9zb3J0X3VwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg1IGZyb20gJy4vYXNzZXRzL3NvcnRhYmxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg2IGZyb20gJy4vYXNzZXRzL3NwYWNlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NyBmcm9tICcuL2Fzc2V0cy9zcGFya2xlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4OCBmcm9tICcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg5IGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkwIGZyb20gJy4vYXNzZXRzL3N0YXJfZW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTEgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5MiBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5MyBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5NCBmcm9tICcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk1IGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk2IGZyb20gJy4vYXNzZXRzL3N0YXRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk3IGZyb20gJy4vYXNzZXRzL3N0b3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTggZnJvbSAnLi9hc3NldHMvc3RvcF9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTkgZnJvbSAnLi9hc3NldHMvc3RvcF9zbGFzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMCBmcm9tICcuL2Fzc2V0cy9zdG9yYWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDAxIGZyb20gJy4vYXNzZXRzL3N0cmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMiBmcm9tICcuL2Fzc2V0cy9zdWJtb2R1bGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDMgZnJvbSAnLi9hc3NldHMvc3VuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDA0IGZyb20gJy4vYXNzZXRzL3N3YXRjaF9pbnB1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNSBmcm9tICcuL2Fzc2V0cy9zeW1saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDA2IGZyb20gJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNyBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDggZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwOSBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxMCBmcm9tICcuL2Fzc2V0cy90YWcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTEgZnJvbSAnLi9hc3NldHMvdGVhci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxMiBmcm9tICcuL2Fzc2V0cy90ZW1wZXJhdHVyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxMyBmcm9tICcuL2Fzc2V0cy90aW1lUmVmcmVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNCBmcm9tICcuL2Fzc2V0cy90aW1lbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNSBmcm9tICcuL2Fzc2V0cy90aW1lbGluZVdpdGhBcnJvdy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNiBmcm9tICcuL2Fzc2V0cy90aW1lc2xpZGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE3IGZyb20gJy4vYXNzZXRzL3Rva2VuQWxpYXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTggZnJvbSAnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE5IGZyb20gJy4vYXNzZXRzL3Rva2VuQXJyYXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjAgZnJvbSAnLi9hc3NldHMvdG9rZW5CaW5hcnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjEgZnJvbSAnLi9hc3NldHMvdG9rZW5Cb29sZWFuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDIyIGZyb20gJy4vYXNzZXRzL3Rva2VuQ2xhc3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjMgZnJvbSAnLi9hc3NldHMvdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI0IGZyb20gJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjUgZnJvbSAnLi9hc3NldHMvdG9rZW5EYXRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI2IGZyb20gJy4vYXNzZXRzL3Rva2VuRGltZW5zaW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI3IGZyb20gJy4vYXNzZXRzL3Rva2VuRWxlbWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyOCBmcm9tICcuL2Fzc2V0cy90b2tlbkVudW0uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjkgZnJvbSAnLi9hc3NldHMvdG9rZW5FbnVtTWVtYmVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMwIGZyb20gJy4vYXNzZXRzL3Rva2VuRXZlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzEgZnJvbSAnLi9hc3NldHMvdG9rZW5FeGNlcHRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzIgZnJvbSAnLi9hc3NldHMvdG9rZW5GaWVsZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzMyBmcm9tICcuL2Fzc2V0cy90b2tlbkZpbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzQgZnJvbSAnLi9hc3NldHMvdG9rZW5GbGF0dGVuZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzUgZnJvbSAnLi9hc3NldHMvdG9rZW5GdW5jdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzNiBmcm9tICcuL2Fzc2V0cy90b2tlbkdlby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzNyBmcm9tICcuL2Fzc2V0cy90b2tlbkhpc3RvZ3JhbS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzOCBmcm9tICcuL2Fzc2V0cy90b2tlbklQLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM5IGZyb20gJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQwIGZyb20gJy4vYXNzZXRzL3Rva2VuSm9pbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MSBmcm9tICcuL2Fzc2V0cy90b2tlbktleS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MiBmcm9tICcuL2Fzc2V0cy90b2tlbktleXdvcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDMgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRob2QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDQgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRyaWNDb3VudGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ1IGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDYgZnJvbSAnLi9hc3NldHMvdG9rZW5Nb2R1bGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDcgZnJvbSAnLi9hc3NldHMvdG9rZW5OYW1lc3BhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDggZnJvbSAnLi9hc3NldHMvdG9rZW5OZXN0ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDkgZnJvbSAnLi9hc3NldHMvdG9rZW5OdWxsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDUwIGZyb20gJy4vYXNzZXRzL3Rva2VuTnVtYmVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDUxIGZyb20gJy4vYXNzZXRzL3Rva2VuT2JqZWN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDUyIGZyb20gJy4vYXNzZXRzL3Rva2VuT3BlcmF0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTMgZnJvbSAnLi9hc3NldHMvdG9rZW5QYWNrYWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU0IGZyb20gJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU1IGZyb20gJy4vYXNzZXRzL3Rva2VuUGVyY29sYXRvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NiBmcm9tICcuL2Fzc2V0cy90b2tlblByb3BlcnR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU3IGZyb20gJy4vYXNzZXRzL3Rva2VuUmFuZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTggZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OSBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MCBmcm9tICcuL2Fzc2V0cy90b2tlblJlcG8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjEgZnJvbSAnLi9hc3NldHMvdG9rZW5TZWFyY2hUeXBlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYyIGZyb20gJy4vYXNzZXRzL3Rva2VuU2VtYW50aWNUZXh0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYzIGZyb20gJy4vYXNzZXRzL3Rva2VuU2hhcGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjQgZnJvbSAnLi9hc3NldHMvdG9rZW5TdHJpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjUgZnJvbSAnLi9hc3NldHMvdG9rZW5TdHJ1Y3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjYgZnJvbSAnLi9hc3NldHMvdG9rZW5TeW1ib2wuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjcgZnJvbSAnLi9hc3NldHMvdG9rZW5UYWcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjggZnJvbSAnLi9hc3NldHMvdG9rZW5UZXh0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY5IGZyb20gJy4vYXNzZXRzL3Rva2VuVG9rZW5Db3VudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MCBmcm9tICcuL2Fzc2V0cy90b2tlblZhcmlhYmxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDcxIGZyb20gJy4vYXNzZXRzL3Rva2VuVmVjdG9yRGVuc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzIgZnJvbSAnLi9hc3NldHMvdG9rZW5WZWN0b3JTcGFyc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzMgZnJvbSAnLi9hc3NldHMvdHJhaW5pbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzQgZnJvbSAnLi9hc3NldHMvdHJhbnNpdGlvbkxlZnRJbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NSBmcm9tICcuL2Fzc2V0cy90cmFuc2l0aW9uTGVmdE91dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NiBmcm9tICcuL2Fzc2V0cy90cmFuc2l0aW9uVG9wSW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzcgZnJvbSAnLi9hc3NldHMvdHJhbnNpdGlvblRvcE91dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OCBmcm9tICcuL2Fzc2V0cy90cmFzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OSBmcm9tICcuL2Fzc2V0cy91bmZvbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODAgZnJvbSAnLi9hc3NldHMvdW5saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDgxIGZyb20gJy4vYXNzZXRzL3VzZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODIgZnJvbSAnLi9hc3NldHMvdXNlckF2YXRhci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MyBmcm9tICcuL2Fzc2V0cy91c2Vycy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NCBmcm9tICcuL2Fzc2V0cy92ZWN0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODUgZnJvbSAnLi9hc3NldHMvdmlkZW9QbGF5ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODYgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODcgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4OCBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODkgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTAgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MSBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTIgZnJvbSAnLi9hc3NldHMvdmlzX2dhdWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDkzIGZyb20gJy4vYXNzZXRzL3Zpc19nb2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk0IGZyb20gJy4vYXNzZXRzL3Zpc19saW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk1IGZyb20gJy4vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NiBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NyBmcm9tICcuL2Fzc2V0cy92aXNfbWV0cmljLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk4IGZyb20gJy4vYXNzZXRzL3Zpc19waWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTkgZnJvbSAnLi9hc3NldHMvdmlzX3RhYmxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAwIGZyb20gJy4vYXNzZXRzL3Zpc190YWdfY2xvdWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDEgZnJvbSAnLi9hc3NldHMvdmlzX3RleHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDIgZnJvbSAnLi9hc3NldHMvdmlzX3RpbWVsaW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAzIGZyb20gJy4vYXNzZXRzL3Zpc192ZWdhLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA0IGZyb20gJy4vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwNSBmcm9tICcuL2Fzc2V0cy93YXJuaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA2IGZyb20gJy4vYXNzZXRzL3dhcm5pbmdGaWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDcgZnJvbSAnLi9hc3NldHMvd29yZFdyYXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDggZnJvbSAnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwOSBmcm9tICcuL2Fzc2V0cy93cmVuY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTAgZnJvbSAnLi9hc3NldHMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxMSBmcm9tICcuL2Fzc2V0cy9hZ2dyZWdhdGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTIgZnJvbSAnLi9hc3NldHMvYWxlcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTMgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZUV2ZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE0IGZyb20gJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTUgZnJvbSAnLi9hc3NldHMvYW5ub3RhdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNiBmcm9tICcuL2Fzc2V0cy9hbm9tYWx5X2NoYXJ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE3IGZyb20gJy4vYXNzZXRzL2Fub21hbHlfc3dpbV9sYW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE4IGZyb20gJy4vYXNzZXRzL2FwbV90cmFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxOSBmcm9tICcuL2Fzc2V0cy9hcHBfYWRkX2RhdGEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjAgZnJvbSAnLi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIxIGZyb20gJy4vYXNzZXRzL2FwcF9hZ2VudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyMiBmcm9tICcuL2Fzc2V0cy9hcHBfYXBtJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIzIGZyb20gJy4vYXNzZXRzL2FwcF9hcHBfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI0IGZyb20gJy4vYXNzZXRzL2FwcF9hdWRpdGJlYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjUgZnJvbSAnLi9hc3NldHMvYXBwX2NhbnZhcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyNiBmcm9tICcuL2Fzc2V0cy9hcHBfY2FzZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjcgZnJvbSAnLi9hc3NldHMvYXBwX2NvZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjggZnJvbSAnLi9hc3NldHMvYXBwX2NvbnNvbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjkgZnJvbSAnLi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzAgZnJvbSAnLi9hc3NldHMvYXBwX2Rhc2hib2FyZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzMSBmcm9tICcuL2Fzc2V0cy9hcHBfZGV2dG9vbHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzIgZnJvbSAnLi9hc3NldHMvYXBwX2Rpc2NvdmVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMzIGZyb20gJy4vYXNzZXRzL2FwcF9lbXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzQgZnJvbSAnLi9hc3NldHMvYXBwX2ZpbGViZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM1IGZyb20gJy4vYXNzZXRzL2FwcF9mbGVldCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzNiBmcm9tICcuL2Fzc2V0cy9hcHBfZ2lzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM3IGZyb20gJy4vYXNzZXRzL2FwcF9ncmFwaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzOCBmcm9tICcuL2Fzc2V0cy9hcHBfZ3Jvayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzOSBmcm9tICcuL2Fzc2V0cy9hcHBfaGVhcnRiZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQwIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9tYW5hZ2VtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQxIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQyIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDMgZnJvbSAnLi9hc3NldHMvYXBwX2xlbnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDQgZnJvbSAnLi9hc3NldHMvYXBwX2xvZ3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDUgZnJvbSAnLi9hc3NldHMvYXBwX21hbmFnZW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDYgZnJvbSAnLi9hc3NldHMvYXBwX21ldHJpY2JlYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDcgZnJvbSAnLi9hc3NldHMvYXBwX21ldHJpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDggZnJvbSAnLi9hc3NldHMvYXBwX21sJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ5IGZyb20gJy4vYXNzZXRzL2FwcF9tb25pdG9yaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUwIGZyb20gJy4vYXNzZXRzL2FwcF9ub3RlYm9vayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1MSBmcm9tICcuL2Fzc2V0cy9hcHBfcGFja2V0YmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1MiBmcm9tICcuL2Fzc2V0cy9hcHBfcGlwZWxpbmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTMgZnJvbSAnLi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1NCBmcm9tICcuL2Fzc2V0cy9hcHBfcmVwb3J0aW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU1IGZyb20gJy4vYXNzZXRzL2FwcF9zYXZlZF9vYmplY3RzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU2IGZyb20gJy4vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTcgZnJvbSAnLi9hc3NldHMvYXBwX3NlY3VyaXR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU4IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eV9hbmFseXRpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTkgZnJvbSAnLi9hc3NldHMvYXBwX3NwYWNlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2MCBmcm9tICcuL2Fzc2V0cy9hcHBfc3FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTYxIGZyb20gJy4vYXNzZXRzL2FwcF90aW1lbGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2MiBmcm9tICcuL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjMgZnJvbSAnLi9hc3NldHMvYXBwX3VwdGltZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NCBmcm9tICcuL2Fzc2V0cy9hcHBfdXNlcnNfcm9sZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjUgZnJvbSAnLi9hc3NldHMvYXBwX3Zpc3VhbGl6ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NiBmcm9tICcuL2Fzc2V0cy9hcHBfdnVsbmVyYWJpbGl0eV9tYW5hZ2VtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY3IGZyb20gJy4vYXNzZXRzL2FwcF93YXRjaGVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY4IGZyb20gJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY5IGZyb20gJy4vYXNzZXRzL2FwcHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzAgZnJvbSAnLi9hc3NldHMvYXJyb3dFbmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzEgZnJvbSAnLi9hc3NldHMvYXJyb3dTdGFydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3MiBmcm9tICcuL2Fzc2V0cy9hcnJvd19kb3duJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTczIGZyb20gJy4vYXNzZXRzL2Fycm93X2xlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzQgZnJvbSAnLi9hc3NldHMvYXJyb3dfcmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzUgZnJvbSAnLi9hc3NldHMvYXJyb3dfdXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzYgZnJvbSAnLi9hc3NldHMvYXJ0aWNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3NyBmcm9tICcuL2Fzc2V0cy9hc3Rlcmlzayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3OCBmcm9tICcuL2Fzc2V0cy9hdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3OSBmcm9tICcuL2Fzc2V0cy9iZWFrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODAgZnJvbSAnLi9hc3NldHMvYmVsbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MSBmcm9tICcuL2Fzc2V0cy9iZWxsU2xhc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODIgZnJvbSAnLi9hc3NldHMvYmV0YSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MyBmcm9tICcuL2Fzc2V0cy9ib2x0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg0IGZyb20gJy4vYXNzZXRzL2JveGVzX2hvcml6b250YWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODUgZnJvbSAnLi9hc3NldHMvYm94ZXNfdmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODYgZnJvbSAnLi9hc3NldHMvYnJhbmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg3IGZyb20gJy4vYXNzZXRzL2JyYW5jaFVzZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODggZnJvbSAnLi9hc3NldHMvYnJvb20nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODkgZnJvbSAnLi9hc3NldHMvYnJ1c2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTAgZnJvbSAnLi9hc3NldHMvYnVnJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTkxIGZyb20gJy4vYXNzZXRzL2J1bGxzZXllJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTkyIGZyb20gJy4vYXNzZXRzL2NhbGVuZGFyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTkzIGZyb20gJy4vYXNzZXRzL2NoYW5nZV9wb2ludF9kZXRlY3Rpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTQgZnJvbSAnLi9hc3NldHMvY2hlY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTUgZnJvbSAnLi9hc3NldHMvY2hlY2tJbkNpcmNsZUZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5NiBmcm9tICcuL2Fzc2V0cy9jaGVlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5NyBmcm9tICcuL2Fzc2V0cy9jbGlja0xlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTggZnJvbSAnLi9hc3NldHMvY2xpY2tSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5OSBmcm9tICcuL2Fzc2V0cy9jbG9jayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwMCBmcm9tICcuL2Fzc2V0cy9jbG9ja0NvdW50ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDEgZnJvbSAnLi9hc3NldHMvY2xvdWREcml6emxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAyIGZyb20gJy4vYXNzZXRzL2Nsb3VkU3Rvcm15JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAzIGZyb20gJy4vYXNzZXRzL2Nsb3VkU3VubnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDQgZnJvbSAnLi9hc3NldHMvY2x1c3Rlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNSBmcm9tICcuL2Fzc2V0cy9jb2xvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNiBmcm9tICcuL2Fzc2V0cy9jb21wdXRlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA3IGZyb20gJy4vYXNzZXRzL2NvbnNvbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDggZnJvbSAnLi9hc3NldHMvY29udGFpbmVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA5IGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxMCBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxMSBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QmVsb3cnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTIgZnJvbSAnLi9hc3NldHMvY29udGludWl0eVdpdGhpbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxMyBmcm9tICcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE0IGZyb20gJy4vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE1IGZyb20gJy4vYXNzZXRzL2NvcHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTYgZnJvbSAnLi9hc3NldHMvY29weV9jbGlwYm9hcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTcgZnJvbSAnLi9hc3NldHMvY3Jvc3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTggZnJvbSAnLi9hc3NldHMvY3Jvc3NJbkNpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxOSBmcm9tICcuL2Fzc2V0cy9jcm9zc19pbl9jaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjAgZnJvbSAnLi9hc3NldHMvY3Jvc3NoYWlycyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyMSBmcm9tICcuL2Fzc2V0cy9jdXJyZW5jeSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyMiBmcm9tICcuL2Fzc2V0cy9jdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjMgZnJvbSAnLi9hc3NldHMvZGF0YWJhc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjQgZnJvbSAnLi9hc3NldHMvZGVza3RvcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyNSBmcm9tICcuL2Fzc2V0cy9kaWZmJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI2IGZyb20gJy4vYXNzZXRzL2Rpc2N1c3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjcgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjggZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRFZGl0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI5IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50YXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzAgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjMxIGZyb20gJy4vYXNzZXRzL2RvdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzMiBmcm9tICcuL2Fzc2V0cy9kb3RJbkNpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzMyBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzQgZnJvbSAnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzNSBmcm9tICcuL2Fzc2V0cy9kb3dubG9hZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzNiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzNyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzggZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjM5IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQxIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDQgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ1IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDYgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ3IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDggZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0OSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTEgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2JvbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTIgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1NCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1NSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1NiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaXRhbGljJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU3IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU4IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTkgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3JlZG8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjAgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3N0cmlrZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2MSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdGFibGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjIgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3VuZGVybGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2NCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjUgZnJvbSAnLi9hc3NldHMvZW1haWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjYgZnJvbSAnLi9hc3NldHMvZW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjcgZnJvbSAnLi9hc3NldHMvZW5kcG9pbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjggZnJvbSAnLi9hc3NldHMvZXFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY5IGZyb20gJy4vYXNzZXRzL2VyYXNlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3MCBmcm9tICcuL2Fzc2V0cy9lcnJvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3MSBmcm9tICcuL2Fzc2V0cy9lcnJvckZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3MiBmcm9tICcuL2Fzc2V0cy9lc3FsVmlzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjczIGZyb20gJy4vYXNzZXRzL2V4aXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzQgZnJvbSAnLi9hc3NldHMvZXhwYW5kJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc1IGZyb20gJy4vYXNzZXRzL2V4cGFuZE1pbmknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzYgZnJvbSAnLi9hc3NldHMvZXhwb3J0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc3IGZyb20gJy4vYXNzZXRzL2V5ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3OCBmcm9tICcuL2Fzc2V0cy9leWVfY2xvc2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc5IGZyb20gJy4vYXNzZXRzL2ZhY2VfaGFwcHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODAgZnJvbSAnLi9hc3NldHMvZmFjZV9uZXV0cmFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjgxIGZyb20gJy4vYXNzZXRzL2ZhY2Vfc2FkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjgyIGZyb20gJy4vYXNzZXRzL2ZpZWxkX3N0YXRpc3RpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODMgZnJvbSAnLi9hc3NldHMvZmlsdGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg0IGZyb20gJy4vYXNzZXRzL2ZpbHRlckV4Y2x1ZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODUgZnJvbSAnLi9hc3NldHMvZmlsdGVySWdub3JlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg2IGZyb20gJy4vYXNzZXRzL2ZpbHRlckluQ2lyY2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg3IGZyb20gJy4vYXNzZXRzL2ZpbHRlckluY2x1ZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODggZnJvbSAnLi9hc3NldHMvZmxhZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4OSBmcm9tICcuL2Fzc2V0cy9mb2xkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkwIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jaGVjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MSBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkyIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MyBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfb3Blbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5NCBmcm9tICcuL2Fzc2V0cy9mcmFtZU5leHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTUgZnJvbSAnLi9hc3NldHMvZnJhbWVQcmV2aW91cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5NiBmcm9tICcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5NyBmcm9tICcuL2Fzc2V0cy9mdWxsX3NjcmVlbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5OCBmcm9tICcuL2Fzc2V0cy9mdW5jdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5OSBmcm9tICcuL2Fzc2V0cy9nZWFyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAwIGZyb20gJy4vYXNzZXRzL2dsYXNzZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDEgZnJvbSAnLi9hc3NldHMvZ2xvYmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDIgZnJvbSAnLi9hc3NldHMvZ3JhYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwMyBmcm9tICcuL2Fzc2V0cy9ncmFiT21uaWRpcmVjdGlvbmFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA0IGZyb20gJy4vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwNSBmcm9tICcuL2Fzc2V0cy9ncmFkaWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwNiBmcm9tICcuL2Fzc2V0cy9ncmlkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA3IGZyb20gJy4vYXNzZXRzL2hlYXJ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA4IGZyb20gJy4vYXNzZXRzL2hlYXRtYXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDkgZnJvbSAnLi9hc3NldHMvaGVscCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxMCBmcm9tICcuL2Fzc2V0cy9ob21lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzExIGZyb20gJy4vYXNzZXRzL2lJbkNpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxMiBmcm9tICcuL2Fzc2V0cy9pbWFnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxMyBmcm9tICcuL2Fzc2V0cy9pbXBvcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTQgZnJvbSAnLi9hc3NldHMvaW5kZXgnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTUgZnJvbSAnLi9hc3NldHMvaW5kZXhUZW1wb3JhcnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTYgZnJvbSAnLi9hc3NldHMvaW5kZXhfY2xvc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTcgZnJvbSAnLi9hc3NldHMvaW5kZXhfZWRpdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxOCBmcm9tICcuL2Fzc2V0cy9pbmRleF9mbHVzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxOSBmcm9tICcuL2Fzc2V0cy9pbmRleF9tYXBwaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIwIGZyb20gJy4vYXNzZXRzL2luZGV4X29wZW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjEgZnJvbSAnLi9hc3NldHMvaW5kZXhfcnVudGltZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyMiBmcm9tICcuL2Fzc2V0cy9pbmRleF9zZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyMyBmcm9tICcuL2Fzc2V0cy9pbmZpbml0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyNCBmcm9tICcuL2Fzc2V0cy9pbnB1dE91dHB1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyNSBmcm9tICcuL2Fzc2V0cy9pbnNwZWN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI2IGZyb20gJy4vYXNzZXRzL2ludmVydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyNyBmcm9tICcuL2Fzc2V0cy9pcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyOCBmcm9tICcuL2Fzc2V0cy9pc3N1ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyOSBmcm9tICcuL2Fzc2V0cy9rZXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzAgZnJvbSAnLi9hc3NldHMva2V5Ym9hcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzEgZnJvbSAnLi9hc3NldHMva3FsX2ZpZWxkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzMyIGZyb20gJy4vYXNzZXRzL2txbF9mdW5jdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczMyBmcm9tICcuL2Fzc2V0cy9rcWxfb3BlcmFuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNCBmcm9tICcuL2Fzc2V0cy9rcWxfc2VsZWN0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzUgZnJvbSAnLi9hc3NldHMva3FsX3ZhbHVlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM2IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM3IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzggZnJvbSAnLi9hc3NldHMvbGF1bmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM5IGZyb20gJy4vYXNzZXRzL2xheWVycyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MCBmcm9tICcuL2Fzc2V0cy9sZXR0ZXJpbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDEgZnJvbSAnLi9hc3NldHMvbGluZURhc2hlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MiBmcm9tICcuL2Fzc2V0cy9saW5lRG90dGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQzIGZyb20gJy4vYXNzZXRzL2xpbmVTb2xpZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0NCBmcm9tICcuL2Fzc2V0cy9saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ1IGZyb20gJy4vYXNzZXRzL2xpc3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDYgZnJvbSAnLi9hc3NldHMvbGlzdF9hZGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDcgZnJvbSAnLi9hc3NldHMvbG9jayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0OCBmcm9tICcuL2Fzc2V0cy9sb2NrT3Blbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0OSBmcm9tICcuL2Fzc2V0cy9sb2dfcGF0dGVybl9hbmFseXNpcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MCBmcm9tICcuL2Fzc2V0cy9sb2dfcmF0ZV9hbmFseXNpcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2FwYWNoZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2FwcF9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTQgZnJvbSAnLi9hc3NldHMvbG9nb19hd3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTUgZnJvbSAnLi9hc3NldHMvbG9nb19hd3NfbW9ubyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2F6dXJlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU3IGZyb20gJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9ubyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1OCBmcm9tICcuL2Fzc2V0cy9sb2dvX2JlYXRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU5IGZyb20gJy4vYXNzZXRzL2xvZ29fYnVzaW5lc3NfYW5hbHl0aWNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYwIGZyb20gJy4vYXNzZXRzL2xvZ29fY2VwaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2Nsb3VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYyIGZyb20gJy4vYXNzZXRzL2xvZ29fY2xvdWRfZWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYzIGZyb20gJy4vYXNzZXRzL2xvZ29fY29kZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvZGVzYW5kYm94JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY1IGZyb20gJy4vYXNzZXRzL2xvZ29fY291Y2hiYXNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY2IGZyb20gJy4vYXNzZXRzL2xvZ29fZG9ja2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY3IGZyb20gJy4vYXNzZXRzL2xvZ29fZHJvcHdpemFyZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2OCBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjkgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzcwIGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpY3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2VudGVycHJpc2Vfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzcyIGZyb20gJy4vYXNzZXRzL2xvZ29fZXRjZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2djcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2djcF9tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc1IGZyb20gJy4vYXNzZXRzL2xvZ29fZ2l0aHViJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc2IGZyb20gJy4vYXNzZXRzL2xvZ29fZ21haWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzcgZnJvbSAnLi9hc3NldHMvbG9nb19nb2xhbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzggZnJvbSAnLi9hc3NldHMvbG9nb19nb29nbGVfZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3OSBmcm9tICcuL2Fzc2V0cy9sb2dvX2hhcHJveHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODAgZnJvbSAnLi9hc3NldHMvbG9nb19pYm0nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODEgZnJvbSAnLi9hc3NldHMvbG9nb19pYm1fbW9ubyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2thZmthJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzgzIGZyb20gJy4vYXNzZXRzL2xvZ29fa2liYW5hJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg0IGZyb20gJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2xvZ2dpbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODYgZnJvbSAnLi9hc3NldHMvbG9nb19sb2dzdGFzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4NyBmcm9tICcuL2Fzc2V0cy9sb2dvX21hcHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODggZnJvbSAnLi9hc3NldHMvbG9nb19tZW1jYWNoZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODkgZnJvbSAnLi9hc3NldHMvbG9nb19tZXRyaWNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkwIGZyb20gJy4vYXNzZXRzL2xvZ29fbW9uZ29kYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5MSBmcm9tICcuL2Fzc2V0cy9sb2dvX215c3FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkyIGZyb20gJy4vYXNzZXRzL2xvZ29fbmdpbngnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTMgZnJvbSAnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk0IGZyb20gJy4vYXNzZXRzL2xvZ29fb3NxdWVyeSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5NSBmcm9tICcuL2Fzc2V0cy9sb2dvX3BocCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5NiBmcm9tICcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk3IGZyb20gJy4vYXNzZXRzL2xvZ29fcHJvbWV0aGV1cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5OCBmcm9tICcuL2Fzc2V0cy9sb2dvX3JhYmJpdG1xJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk5IGZyb20gJy4vYXNzZXRzL2xvZ29fcmVkaXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDAgZnJvbSAnLi9hc3NldHMvbG9nb19zZWN1cml0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwMSBmcm9tICcuL2Fzc2V0cy9sb2dvX3NpdGVfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAyIGZyb20gJy4vYXNzZXRzL2xvZ29fc2tldGNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAzIGZyb20gJy4vYXNzZXRzL2xvZ29fc2xhY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDQgZnJvbSAnLi9hc3NldHMvbG9nb191cHRpbWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDUgZnJvbSAnLi9hc3NldHMvbG9nb192dWxuZXJhYmlsaXR5X21hbmFnZW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDYgZnJvbSAnLi9hc3NldHMvbG9nb193ZWJob29rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODA3IGZyb20gJy4vYXNzZXRzL2xvZ29fd2luZG93cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwOCBmcm9tICcuL2Fzc2V0cy9sb2dvX3dvcmtwbGFjZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDkgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEwIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX2lmJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODExIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX2lucHV0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEyIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX291dHB1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxMyBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9xdWV1ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNCBmcm9tICcuL2Fzc2V0cy9tYWduZXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTUgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNiBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aE1pbnVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE3IGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoUGx1cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxOCBmcm9tICcuL2Fzc2V0cy9tYXBfbWFya2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE5IGZyb20gJy4vYXNzZXRzL21lbW9yeSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyMCBmcm9tICcuL2Fzc2V0cy9tZW51JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIxIGZyb20gJy4vYXNzZXRzL21lbnVEb3duJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIyIGZyb20gJy4vYXNzZXRzL21lbnVMZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIzIGZyb20gJy4vYXNzZXRzL21lbnVSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyNCBmcm9tICcuL2Fzc2V0cy9tZW51VXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjUgZnJvbSAnLi9hc3NldHMvbWVyZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjYgZnJvbSAnLi9hc3NldHMvbWluaW1pemUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjcgZnJvbSAnLi9hc3NldHMvbWludXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjggZnJvbSAnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI5IGZyb20gJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZV9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzAgZnJvbSAnLi9hc3NldHMvbWludXNfaW5fc3F1YXJlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMxIGZyb20gJy4vYXNzZXRzL21sX2NsYXNzaWZpY2F0aW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzMiBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMzIGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM0IGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9wb3B1bGF0aW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNSBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzYgZnJvbSAnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM3IGZyb20gJy4vYXNzZXRzL21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzOCBmcm9tICcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzOSBmcm9tICcuL2Fzc2V0cy9tb2JpbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDAgZnJvbSAnLi9hc3NldHMvbW9vbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0MSBmcm9tICcuL2Fzc2V0cy9tb3ZlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQyIGZyb20gJy4vYXNzZXRzL25hbWVzcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0MyBmcm9tICcuL2Fzc2V0cy9uZXN0ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDQgZnJvbSAnLi9hc3NldHMvbmV3X2NoYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDUgZnJvbSAnLi9hc3NldHMvbm9kZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0NiBmcm9tICcuL2Fzc2V0cy9udW1iZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDcgZnJvbSAnLi9hc3NldHMvb2ZmbGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0OCBmcm9tICcuL2Fzc2V0cy9vbmxpbmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDkgZnJvbSAnLi9hc3NldHMvcGFja2FnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MCBmcm9tICcuL2Fzc2V0cy9wYWdlU2VsZWN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODUxIGZyb20gJy4vYXNzZXRzL3BhZ2VzU2VsZWN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODUyIGZyb20gJy4vYXNzZXRzL3BhaW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODUzIGZyb20gJy4vYXNzZXRzL3BhbGV0dGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTQgZnJvbSAnLi9hc3NldHMvcGFwZXJfY2xpcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1NSBmcm9tICcuL2Fzc2V0cy9wYXJ0aWFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODU2IGZyb20gJy4vYXNzZXRzL3BhdXNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODU3IGZyb20gJy4vYXNzZXRzL3BheW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTggZnJvbSAnLi9hc3NldHMvcGVuY2lsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODU5IGZyb20gJy4vYXNzZXRzL3BlcmNlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjAgZnJvbSAnLi9hc3NldHMvcGluJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODYxIGZyb20gJy4vYXNzZXRzL3Bpbl9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjIgZnJvbSAnLi9hc3NldHMvcGlwZUJyZWFrcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2MyBmcm9tICcuL2Fzc2V0cy9waXBlTm9CcmVha3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjQgZnJvbSAnLi9hc3NldHMvcGl2b3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjUgZnJvbSAnLi9hc3NldHMvcGxheSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2NiBmcm9tICcuL2Fzc2V0cy9wbGF5RmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY3IGZyb20gJy4vYXNzZXRzL3BsdXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjggZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjkgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODcwIGZyb20gJy4vYXNzZXRzL3BsdXNfaW5fc3F1YXJlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODcxIGZyb20gJy4vYXNzZXRzL3BvcG91dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MiBmcm9tICcuL2Fzc2V0cy9wdXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODczIGZyb20gJy4vYXNzZXRzL3F1ZXN0aW9uX2luX2NpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3NCBmcm9tICcuL2Fzc2V0cy9xdW90ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3NSBmcm9tICcuL2Fzc2V0cy9yZWZyZXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc2IGZyb20gJy4vYXNzZXRzL3JlcG9ydGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc3IGZyb20gJy4vYXNzZXRzL3JldHVybl9rZXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzggZnJvbSAnLi9hc3NldHMvc2F2ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3OSBmcm9tICcuL2Fzc2V0cy9zY2FsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4MCBmcm9tICcuL2Fzc2V0cy9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODEgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODIgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxEZXRlY3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4MyBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg0IGZyb20gJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODUgZnJvbSAnLi9hc3NldHMvc2hhcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODYgZnJvbSAnLi9hc3NldHMvc2hhcmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODcgZnJvbSAnLi9hc3NldHMvc2luZ2xlX21ldHJpY192aWV3ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODggZnJvbSAnLi9hc3NldHMvc25vd2ZsYWtlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg5IGZyb20gJy4vYXNzZXRzL3NvcnRBc2NlbmRpbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTAgZnJvbSAnLi9hc3NldHMvc29ydERlc2NlbmRpbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTEgZnJvbSAnLi9hc3NldHMvc29ydExlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTIgZnJvbSAnLi9hc3NldHMvc29ydFJpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkzIGZyb20gJy4vYXNzZXRzL3NvcnRfZG93bic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5NCBmcm9tICcuL2Fzc2V0cy9zb3J0X3VwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk1IGZyb20gJy4vYXNzZXRzL3NvcnRhYmxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk2IGZyb20gJy4vYXNzZXRzL3NwYWNlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5NyBmcm9tICcuL2Fzc2V0cy9zcGFya2xlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5OCBmcm9tICcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk5IGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAwIGZyb20gJy4vYXNzZXRzL3N0YXJfZW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDEgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMiBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMyBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwNCBmcm9tICcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTA1IGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTA2IGZyb20gJy4vYXNzZXRzL3N0YXRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTA3IGZyb20gJy4vYXNzZXRzL3N0b3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDggZnJvbSAnLi9hc3NldHMvc3RvcF9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDkgZnJvbSAnLi9hc3NldHMvc3RvcF9zbGFzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxMCBmcm9tICcuL2Fzc2V0cy9zdG9yYWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTExIGZyb20gJy4vYXNzZXRzL3N0cmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxMiBmcm9tICcuL2Fzc2V0cy9zdWJtb2R1bGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MTMgZnJvbSAnLi9hc3NldHMvc3VuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTE0IGZyb20gJy4vYXNzZXRzL3N3YXRjaF9pbnB1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxNSBmcm9tICcuL2Fzc2V0cy9zeW1saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTE2IGZyb20gJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxNyBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MTggZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxOSBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyMCBmcm9tICcuL2Fzc2V0cy90YWcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MjEgZnJvbSAnLi9hc3NldHMvdGVhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyMiBmcm9tICcuL2Fzc2V0cy90ZW1wZXJhdHVyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyMyBmcm9tICcuL2Fzc2V0cy90aW1lUmVmcmVzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyNCBmcm9tICcuL2Fzc2V0cy90aW1lbGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyNSBmcm9tICcuL2Fzc2V0cy90aW1lbGluZVdpdGhBcnJvdyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyNiBmcm9tICcuL2Fzc2V0cy90aW1lc2xpZGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTI3IGZyb20gJy4vYXNzZXRzL3Rva2VuQWxpYXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MjggZnJvbSAnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTI5IGZyb20gJy4vYXNzZXRzL3Rva2VuQXJyYXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MzAgZnJvbSAnLi9hc3NldHMvdG9rZW5CaW5hcnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MzEgZnJvbSAnLi9hc3NldHMvdG9rZW5Cb29sZWFuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTMyIGZyb20gJy4vYXNzZXRzL3Rva2VuQ2xhc3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MzMgZnJvbSAnLi9hc3NldHMvdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTM0IGZyb20gJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MzUgZnJvbSAnLi9hc3NldHMvdG9rZW5EYXRlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTM2IGZyb20gJy4vYXNzZXRzL3Rva2VuRGltZW5zaW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTM3IGZyb20gJy4vYXNzZXRzL3Rva2VuRWxlbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkzOCBmcm9tICcuL2Fzc2V0cy90b2tlbkVudW0nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MzkgZnJvbSAnLi9hc3NldHMvdG9rZW5FbnVtTWVtYmVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTQwIGZyb20gJy4vYXNzZXRzL3Rva2VuRXZlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NDEgZnJvbSAnLi9hc3NldHMvdG9rZW5FeGNlcHRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NDIgZnJvbSAnLi9hc3NldHMvdG9rZW5GaWVsZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0MyBmcm9tICcuL2Fzc2V0cy90b2tlbkZpbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NDQgZnJvbSAnLi9hc3NldHMvdG9rZW5GbGF0dGVuZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NDUgZnJvbSAnLi9hc3NldHMvdG9rZW5GdW5jdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0NiBmcm9tICcuL2Fzc2V0cy90b2tlbkdlbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0NyBmcm9tICcuL2Fzc2V0cy90b2tlbkhpc3RvZ3JhbSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0OCBmcm9tICcuL2Fzc2V0cy90b2tlbklQJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTQ5IGZyb20gJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTUwIGZyb20gJy4vYXNzZXRzL3Rva2VuSm9pbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk1MSBmcm9tICcuL2Fzc2V0cy90b2tlbktleSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk1MiBmcm9tICcuL2Fzc2V0cy90b2tlbktleXdvcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTMgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRob2QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTQgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRyaWNDb3VudGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTU1IGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTYgZnJvbSAnLi9hc3NldHMvdG9rZW5Nb2R1bGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTcgZnJvbSAnLi9hc3NldHMvdG9rZW5OYW1lc3BhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTggZnJvbSAnLi9hc3NldHMvdG9rZW5OZXN0ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTkgZnJvbSAnLi9hc3NldHMvdG9rZW5OdWxsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTYwIGZyb20gJy4vYXNzZXRzL3Rva2VuTnVtYmVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTYxIGZyb20gJy4vYXNzZXRzL3Rva2VuT2JqZWN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTYyIGZyb20gJy4vYXNzZXRzL3Rva2VuT3BlcmF0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NjMgZnJvbSAnLi9hc3NldHMvdG9rZW5QYWNrYWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTY0IGZyb20gJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTY1IGZyb20gJy4vYXNzZXRzL3Rva2VuUGVyY29sYXRvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2NiBmcm9tICcuL2Fzc2V0cy90b2tlblByb3BlcnR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTY3IGZyb20gJy4vYXNzZXRzL3Rva2VuUmFuZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NjggZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2OSBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk3MCBmcm9tICcuL2Fzc2V0cy90b2tlblJlcG8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzEgZnJvbSAnLi9hc3NldHMvdG9rZW5TZWFyY2hUeXBlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTcyIGZyb20gJy4vYXNzZXRzL3Rva2VuU2VtYW50aWNUZXh0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTczIGZyb20gJy4vYXNzZXRzL3Rva2VuU2hhcGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzQgZnJvbSAnLi9hc3NldHMvdG9rZW5TdHJpbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzUgZnJvbSAnLi9hc3NldHMvdG9rZW5TdHJ1Y3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzYgZnJvbSAnLi9hc3NldHMvdG9rZW5TeW1ib2wnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzcgZnJvbSAnLi9hc3NldHMvdG9rZW5UYWcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzggZnJvbSAnLi9hc3NldHMvdG9rZW5UZXh0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTc5IGZyb20gJy4vYXNzZXRzL3Rva2VuVG9rZW5Db3VudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4MCBmcm9tICcuL2Fzc2V0cy90b2tlblZhcmlhYmxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTgxIGZyb20gJy4vYXNzZXRzL3Rva2VuVmVjdG9yRGVuc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5ODIgZnJvbSAnLi9hc3NldHMvdG9rZW5WZWN0b3JTcGFyc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5ODMgZnJvbSAnLi9hc3NldHMvdHJhaW5pbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5ODQgZnJvbSAnLi9hc3NldHMvdHJhbnNpdGlvbkxlZnRJbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4NSBmcm9tICcuL2Fzc2V0cy90cmFuc2l0aW9uTGVmdE91dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4NiBmcm9tICcuL2Fzc2V0cy90cmFuc2l0aW9uVG9wSW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5ODcgZnJvbSAnLi9hc3NldHMvdHJhbnNpdGlvblRvcE91dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4OCBmcm9tICcuL2Fzc2V0cy90cmFzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4OSBmcm9tICcuL2Fzc2V0cy91bmZvbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTAgZnJvbSAnLi9hc3NldHMvdW5saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTkxIGZyb20gJy4vYXNzZXRzL3VzZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTIgZnJvbSAnLi9hc3NldHMvdXNlckF2YXRhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5MyBmcm9tICcuL2Fzc2V0cy91c2Vycyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5NCBmcm9tICcuL2Fzc2V0cy92ZWN0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTUgZnJvbSAnLi9hc3NldHMvdmlkZW9QbGF5ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTYgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTcgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5OCBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTkgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAwIGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAxIGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDIgZnJvbSAnLi9hc3NldHMvdmlzX2dhdWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAwMyBmcm9tICcuL2Fzc2V0cy92aXNfZ29hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDQgZnJvbSAnLi9hc3NldHMvdmlzX2xpbmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA1IGZyb20gJy4vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDYgZnJvbSAnLi9hc3NldHMvdmlzX21hcF9yZWdpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA3IGZyb20gJy4vYXNzZXRzL3Zpc19tZXRyaWMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA4IGZyb20gJy4vYXNzZXRzL3Zpc19waWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA5IGZyb20gJy4vYXNzZXRzL3Zpc190YWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTAgZnJvbSAnLi9hc3NldHMvdmlzX3RhZ19jbG91ZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTEgZnJvbSAnLi9hc3NldHMvdmlzX3RleHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDEyIGZyb20gJy4vYXNzZXRzL3Zpc190aW1lbGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTMgZnJvbSAnLi9hc3NldHMvdmlzX3ZlZ2EnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE0IGZyb20gJy4vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTUgZnJvbSAnLi9hc3NldHMvd2FybmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTYgZnJvbSAnLi9hc3NldHMvd2FybmluZ0ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTcgZnJvbSAnLi9hc3NldHMvd29yZFdyYXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE4IGZyb20gJy4vYXNzZXRzL3dvcmRXcmFwRGlzYWJsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE5IGZyb20gJy4vYXNzZXRzL3dyZW5jaCc7XG5jb25zdCBfRHluYW1pY0ltcG9ydE1vZHVsZU1hcCA9IHsnLi9hc3NldHMvYWNjZXNzaWJpbGl0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUwLCcuL2Fzc2V0cy9hZ2dyZWdhdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMSwnLi9hc3NldHMvYWxlcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMiwnLi9hc3NldHMvYW5hbHl6ZUV2ZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMsJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNCwnLi9hc3NldHMvYW5ub3RhdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1LCcuL2Fzc2V0cy9hbm9tYWx5X2NoYXJ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYsJy4vYXNzZXRzL2Fub21hbHlfc3dpbV9sYW5lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcsJy4vYXNzZXRzL2FwbV90cmFjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4LCcuL2Fzc2V0cy9hcHBfYWRkX2RhdGEuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOSwnLi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwLCcuL2Fzc2V0cy9hcHBfYWdlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEsJy4vYXNzZXRzL2FwcF9hcG0uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIsJy4vYXNzZXRzL2FwcF9hcHBfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzLCcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0LCcuL2Fzc2V0cy9hcHBfY2FudmFzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1LCcuL2Fzc2V0cy9hcHBfY2FzZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYsJy4vYXNzZXRzL2FwcF9jb2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3LCcuL2Fzc2V0cy9hcHBfY29uc29sZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOCwnLi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTksJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAsJy4vYXNzZXRzL2FwcF9kZXZ0b29scy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMSwnLi9hc3NldHMvYXBwX2Rpc2NvdmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyLCcuL2Fzc2V0cy9hcHBfZW1zLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzLCcuL2Fzc2V0cy9hcHBfZmlsZWJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQsJy4vYXNzZXRzL2FwcF9mbGVldC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNSwnLi9hc3NldHMvYXBwX2dpcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNiwnLi9hc3NldHMvYXBwX2dyYXBoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3LCcuL2Fzc2V0cy9hcHBfZ3Jvay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOCwnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOSwnLi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAsJy4vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxLCcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyLCcuL2Fzc2V0cy9hcHBfbGVucy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMywnLi9hc3NldHMvYXBwX2xvZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQsJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1LCcuL2Fzc2V0cy9hcHBfbWV0cmljYmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNiwnLi9hc3NldHMvYXBwX21ldHJpY3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzcsJy4vYXNzZXRzL2FwcF9tbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOCwnLi9hc3NldHMvYXBwX21vbml0b3JpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzksJy4vYXNzZXRzL2FwcF9ub3RlYm9vay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MCwnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDEsJy4vYXNzZXRzL2FwcF9waXBlbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MiwnLi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MywnLi9hc3NldHMvYXBwX3JlcG9ydGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NCwnLi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUsJy4vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDYsJy4vYXNzZXRzL2FwcF9zZWN1cml0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NywnLi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OCwnLi9hc3NldHMvYXBwX3NwYWNlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OSwnLi9hc3NldHMvYXBwX3NxbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MCwnLi9hc3NldHMvYXBwX3RpbWVsaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxLCcuL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIsJy4vYXNzZXRzL2FwcF91cHRpbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTMsJy4vYXNzZXRzL2FwcF91c2Vyc19yb2xlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NCwnLi9hc3NldHMvYXBwX3Zpc3VhbGl6ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NSwnLi9hc3NldHMvYXBwX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NiwnLi9hc3NldHMvYXBwX3dhdGNoZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcsJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4LCcuL2Fzc2V0cy9hcHBzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5LCcuL2Fzc2V0cy9hcnJvd0VuZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MCwnLi9hc3NldHMvYXJyb3dTdGFydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MSwnLi9hc3NldHMvYXJyb3dfZG93bi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MiwnLi9hc3NldHMvYXJyb3dfbGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MywnLi9hc3NldHMvYXJyb3dfcmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQsJy4vYXNzZXRzL2Fycm93X3VwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1LCcuL2Fzc2V0cy9hcnRpY2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2LCcuL2Fzc2V0cy9hc3Rlcmlzay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NywnLi9hc3NldHMvYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgsJy4vYXNzZXRzL2JlYWtlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OSwnLi9hc3NldHMvYmVsbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MCwnLi9hc3NldHMvYmVsbFNsYXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxLCcuL2Fzc2V0cy9iZXRhLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyLCcuL2Fzc2V0cy9ib2x0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczLCcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0LCcuL2Fzc2V0cy9ib3hlc192ZXJ0aWNhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NSwnLi9hc3NldHMvYnJhbmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2LCcuL2Fzc2V0cy9icmFuY2hVc2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3LCcuL2Fzc2V0cy9icm9vbS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OCwnLi9hc3NldHMvYnJ1c2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzksJy4vYXNzZXRzL2J1Zy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MCwnLi9hc3NldHMvYnVsbHNleWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODEsJy4vYXNzZXRzL2NhbGVuZGFyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyLCcuL2Fzc2V0cy9jaGFuZ2VfcG9pbnRfZGV0ZWN0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzLCcuL2Fzc2V0cy9jaGVjay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NCwnLi9hc3NldHMvY2hlY2tJbkNpcmNsZUZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NSwnLi9hc3NldHMvY2hlZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODYsJy4vYXNzZXRzL2NsaWNrTGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NywnLi9hc3NldHMvY2xpY2tSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OCwnLi9hc3NldHMvY2xvY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODksJy4vYXNzZXRzL2Nsb2NrQ291bnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MCwnLi9hc3NldHMvY2xvdWREcml6emxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxLCcuL2Fzc2V0cy9jbG91ZFN0b3JteS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MiwnLi9hc3NldHMvY2xvdWRTdW5ueS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MywnLi9hc3NldHMvY2x1c3Rlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NCwnLi9hc3NldHMvY29sb3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTUsJy4vYXNzZXRzL2NvbXB1dGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTYsJy4vYXNzZXRzL2NvbnNvbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTcsJy4vYXNzZXRzL2NvbnRhaW5lci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OCwnLi9hc3NldHMvY29udGludWl0eUFib3ZlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk5LCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAsJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDEsJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAyLCcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMywnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA0LCcuL2Fzc2V0cy9jb3B5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwNSwnLi9hc3NldHMvY29weV9jbGlwYm9hcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA2LCcuL2Fzc2V0cy9jcm9zcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDcsJy4vYXNzZXRzL2Nyb3NzSW5DaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA4LCcuL2Fzc2V0cy9jcm9zc19pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA5LCcuL2Fzc2V0cy9jcm9zc2hhaXJzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExMCwnLi9hc3NldHMvY3VycmVuY3kuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTExLCcuL2Fzc2V0cy9jdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEyLCcuL2Fzc2V0cy9kYXRhYmFzZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTMsJy4vYXNzZXRzL2Rlc2t0b3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE0LCcuL2Fzc2V0cy9kaWZmLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExNSwnLi9hc3NldHMvZGlzY3Vzcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTYsJy4vYXNzZXRzL2RvY3VtZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExNywnLi9hc3NldHMvZG9jdW1lbnRFZGl0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExOCwnLi9hc3NldHMvZG9jdW1lbnRhdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTksJy4vYXNzZXRzL2RvY3VtZW50cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjAsJy4vYXNzZXRzL2RvdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjEsJy4vYXNzZXRzL2RvdEluQ2lyY2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMiwnLi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMywnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjQsJy4vYXNzZXRzL2Rvd25sb2FkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyNSwnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI2LCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI3LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI4LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI5LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzMCwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzMSwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMyLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMzLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM0LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzNSwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzNiwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzcsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM4LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzksJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDAsJy4vYXNzZXRzL2VkaXRvcl9ib2xkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MSwnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDIsJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MywnLi9hc3NldHMvZWRpdG9yX2NvbW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ0LCcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDUsJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ2LCcuL2Fzc2V0cy9lZGl0b3JfbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDcsJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ4LCcuL2Fzc2V0cy9lZGl0b3JfcmVkby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDksJy4vYXNzZXRzL2VkaXRvcl9zdHJpa2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTUwLCcuL2Fzc2V0cy9lZGl0b3JfdGFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTUxLCcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MiwnLi9hc3NldHMvZWRpdG9yX3VuZG8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTUzLCcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU0LCcuL2Fzc2V0cy9lbWFpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTUsJy4vYXNzZXRzL2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1NiwnLi9hc3NldHMvZW5kcG9pbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU3LCcuL2Fzc2V0cy9lcWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU4LCcuL2Fzc2V0cy9lcmFzZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU5LCcuL2Fzc2V0cy9lcnJvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjAsJy4vYXNzZXRzL2Vycm9yRmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2MSwnLi9hc3NldHMvZXNxbFZpcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjIsJy4vYXNzZXRzL2V4aXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYzLCcuL2Fzc2V0cy9leHBhbmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY0LCcuL2Fzc2V0cy9leHBhbmRNaW5pLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2NSwnLi9hc3NldHMvZXhwb3J0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2NiwnLi9hc3NldHMvZXllLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2NywnLi9hc3NldHMvZXllX2Nsb3NlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjgsJy4vYXNzZXRzL2ZhY2VfaGFwcHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY5LCcuL2Fzc2V0cy9mYWNlX25ldXRyYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcwLCcuL2Fzc2V0cy9mYWNlX3NhZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzEsJy4vYXNzZXRzL2ZpZWxkX3N0YXRpc3RpY3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcyLCcuL2Fzc2V0cy9maWx0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTczLCcuL2Fzc2V0cy9maWx0ZXJFeGNsdWRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3NCwnLi9hc3NldHMvZmlsdGVySWdub3JlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3NSwnLi9hc3NldHMvZmlsdGVySW5DaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc2LCcuL2Fzc2V0cy9maWx0ZXJJbmNsdWRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3NywnLi9hc3NldHMvZmxhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzgsJy4vYXNzZXRzL2ZvbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc5LCcuL2Fzc2V0cy9mb2xkZXJfY2hlY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgwLCcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4MSwnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4MiwnLi9hc3NldHMvZm9sZGVyX29wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgzLCcuL2Fzc2V0cy9mcmFtZU5leHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg0LCcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4NSwnLi9hc3NldHMvZnVsbFNjcmVlbkV4aXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg2LCcuL2Fzc2V0cy9mdWxsX3NjcmVlbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODcsJy4vYXNzZXRzL2Z1bmN0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4OCwnLi9hc3NldHMvZ2Vhci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODksJy4vYXNzZXRzL2dsYXNzZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkwLCcuL2Fzc2V0cy9nbG9iZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTEsJy4vYXNzZXRzL2dyYWIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkyLCcuL2Fzc2V0cy9ncmFiT21uaWRpcmVjdGlvbmFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MywnLi9hc3NldHMvZ3JhYl9ob3Jpem9udGFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5NCwnLi9hc3NldHMvZ3JhZGllbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk1LCcuL2Fzc2V0cy9ncmlkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5NiwnLi9hc3NldHMvaGVhcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk3LCcuL2Fzc2V0cy9oZWF0bWFwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5OCwnLi9hc3NldHMvaGVscC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTksJy4vYXNzZXRzL2hvbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAwLCcuL2Fzc2V0cy9pSW5DaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAxLCcuL2Fzc2V0cy9pbWFnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDIsJy4vYXNzZXRzL2ltcG9ydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDMsJy4vYXNzZXRzL2luZGV4LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwNCwnLi9hc3NldHMvaW5kZXhUZW1wb3JhcnkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA1LCcuL2Fzc2V0cy9pbmRleF9jbG9zZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDYsJy4vYXNzZXRzL2luZGV4X2VkaXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA3LCcuL2Fzc2V0cy9pbmRleF9mbHVzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDgsJy4vYXNzZXRzL2luZGV4X21hcHBpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA5LCcuL2Fzc2V0cy9pbmRleF9vcGVuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMCwnLi9hc3NldHMvaW5kZXhfcnVudGltZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTEsJy4vYXNzZXRzL2luZGV4X3NldHRpbmdzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMiwnLi9hc3NldHMvaW5maW5pdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjEzLCcuL2Fzc2V0cy9pbnB1dE91dHB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTQsJy4vYXNzZXRzL2luc3BlY3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE1LCcuL2Fzc2V0cy9pbnZlcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE2LCcuL2Fzc2V0cy9pcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTcsJy4vYXNzZXRzL2lzc3VlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxOCwnLi9hc3NldHMva2V5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxOSwnLi9hc3NldHMva2V5Ym9hcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIwLCcuL2Fzc2V0cy9rcWxfZmllbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIxLCcuL2Fzc2V0cy9rcWxfZnVuY3Rpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIyLCcuL2Fzc2V0cy9rcWxfb3BlcmFuZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjMsJy4vYXNzZXRzL2txbF9zZWxlY3Rvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjQsJy4vYXNzZXRzL2txbF92YWx1ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjUsJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNiwnLi9hc3NldHMva3ViZXJuZXRlc1BvZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjcsJy4vYXNzZXRzL2xhdW5jaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjgsJy4vYXNzZXRzL2xheWVycy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjksJy4vYXNzZXRzL2xldHRlcmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzAsJy4vYXNzZXRzL2xpbmVEYXNoZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjMxLCcuL2Fzc2V0cy9saW5lRG90dGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMiwnLi9hc3NldHMvbGluZVNvbGlkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMywnLi9hc3NldHMvbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzQsJy4vYXNzZXRzL2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM1LCcuL2Fzc2V0cy9saXN0X2FkZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzYsJy4vYXNzZXRzL2xvY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM3LCcuL2Fzc2V0cy9sb2NrT3Blbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzgsJy4vYXNzZXRzL2xvZ19wYXR0ZXJuX2FuYWx5c2lzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzOSwnLi9hc3NldHMvbG9nX3JhdGVfYW5hbHlzaXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQwLCcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDEsJy4vYXNzZXRzL2xvZ29fYXBhY2hlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0MiwnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0MywnLi9hc3NldHMvbG9nb19hd3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ0LCcuL2Fzc2V0cy9sb2dvX2F3c19tb25vLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0NSwnLi9hc3NldHMvbG9nb19henVyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDYsJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDcsJy4vYXNzZXRzL2xvZ29fYmVhdHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ4LCcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDksJy4vYXNzZXRzL2xvZ29fY2VwaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTAsJy4vYXNzZXRzL2xvZ29fY2xvdWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUxLCcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTIsJy4vYXNzZXRzL2xvZ29fY29kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTMsJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU0LCcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTUsJy4vYXNzZXRzL2xvZ29fZG9ja2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NiwnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NywnLi9hc3NldHMvbG9nb19lbGFzdGljLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1OCwnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1OSwnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MCwnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjEsJy4vYXNzZXRzL2xvZ29fZXRjZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjIsJy4vYXNzZXRzL2xvZ29fZ2NwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MywnLi9hc3NldHMvbG9nb19nY3BfbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjQsJy4vYXNzZXRzL2xvZ29fZ2l0aHViLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NSwnLi9hc3NldHMvbG9nb19nbWFpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjYsJy4vYXNzZXRzL2xvZ29fZ29sYW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NywnLi9hc3NldHMvbG9nb19nb29nbGVfZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjgsJy4vYXNzZXRzL2xvZ29faGFwcm94eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjksJy4vYXNzZXRzL2xvZ29faWJtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3MCwnLi9hc3NldHMvbG9nb19pYm1fbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzEsJy4vYXNzZXRzL2xvZ29fa2Fma2EuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjcyLCcuL2Fzc2V0cy9sb2dvX2tpYmFuYS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzMsJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzQsJy4vYXNzZXRzL2xvZ29fbG9nZ2luZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzUsJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc2LCcuL2Fzc2V0cy9sb2dvX21hcHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc3LCcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzgsJy4vYXNzZXRzL2xvZ29fbWV0cmljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzksJy4vYXNzZXRzL2xvZ29fbW9uZ29kYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODAsJy4vYXNzZXRzL2xvZ29fbXlzcWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgxLCcuL2Fzc2V0cy9sb2dvX25naW54LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4MiwnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4MywnLi9hc3NldHMvbG9nb19vc3F1ZXJ5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NCwnLi9hc3NldHMvbG9nb19waHAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg1LCcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NiwnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NywnLi9hc3NldHMvbG9nb19yYWJiaXRtcS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODgsJy4vYXNzZXRzL2xvZ29fcmVkaXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg5LCcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MCwnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTEsJy4vYXNzZXRzL2xvZ29fc2tldGNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MiwnLi9hc3NldHMvbG9nb19zbGFjay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTMsJy4vYXNzZXRzL2xvZ29fdXB0aW1lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NCwnLi9hc3NldHMvbG9nb192dWxuZXJhYmlsaXR5X21hbmFnZW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk1LCcuL2Fzc2V0cy9sb2dvX3dlYmhvb2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk2LCcuL2Fzc2V0cy9sb2dvX3dpbmRvd3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk3LCcuL2Fzc2V0cy9sb2dvX3dvcmtwbGFjZV9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk4LCcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk5LCcuL2Fzc2V0cy9sb2dzdGFzaF9pZi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDAsJy4vYXNzZXRzL2xvZ3N0YXNoX2lucHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwMSwnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwMiwnLi9hc3NldHMvbG9nc3Rhc2hfcXVldWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAzLCcuL2Fzc2V0cy9tYWduZXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA0LCcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwNSwnLi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDYsJy4vYXNzZXRzL21hZ25pZnlXaXRoUGx1cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDcsJy4vYXNzZXRzL21hcF9tYXJrZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA4LCcuL2Fzc2V0cy9tZW1vcnkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA5LCcuL2Fzc2V0cy9tZW51LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxMCwnLi9hc3NldHMvbWVudURvd24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzExLCcuL2Fzc2V0cy9tZW51TGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTIsJy4vYXNzZXRzL21lbnVSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTMsJy4vYXNzZXRzL21lbnVVcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTQsJy4vYXNzZXRzL21lcmdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxNSwnLi9hc3NldHMvbWluaW1pemUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE2LCcuL2Fzc2V0cy9taW51cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTcsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTgsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZV9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE5LCcuL2Fzc2V0cy9taW51c19pbl9zcXVhcmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIwLCcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIxLCcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMiwnLi9hc3NldHMvbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIzLCcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI0LCcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI1LCcuL2Fzc2V0cy9tbF9kYXRhX3Zpc3VhbGl6ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI2LCcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI3LCcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjgsJy4vYXNzZXRzL21vYmlsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjksJy4vYXNzZXRzL21vb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzMwLCcuL2Fzc2V0cy9tb3ZlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzMSwnLi9hc3NldHMvbmFtZXNwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzMiwnLi9hc3NldHMvbmVzdGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzMywnLi9hc3NldHMvbmV3X2NoYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM0LCcuL2Fzc2V0cy9ub2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzNSwnLi9hc3NldHMvbnVtYmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzNiwnLi9hc3NldHMvb2ZmbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzcsJy4vYXNzZXRzL29ubGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzgsJy4vYXNzZXRzL3BhY2thZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM5LCcuL2Fzc2V0cy9wYWdlU2VsZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0MCwnLi9hc3NldHMvcGFnZXNTZWxlY3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQxLCcuL2Fzc2V0cy9wYWludC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDIsJy4vYXNzZXRzL3BhbGV0dGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQzLCcuL2Fzc2V0cy9wYXBlcl9jbGlwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NCwnLi9hc3NldHMvcGFydGlhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDUsJy4vYXNzZXRzL3BhdXNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NiwnLi9hc3NldHMvcGF5bWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDcsJy4vYXNzZXRzL3BlbmNpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDgsJy4vYXNzZXRzL3BlcmNlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ5LCcuL2Fzc2V0cy9waW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUwLCcuL2Fzc2V0cy9waW5fZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1MSwnLi9hc3NldHMvcGlwZUJyZWFrcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTIsJy4vYXNzZXRzL3BpcGVOb0JyZWFrcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTMsJy4vYXNzZXRzL3Bpdm90LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NCwnLi9hc3NldHMvcGxheS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTUsJy4vYXNzZXRzL3BsYXlGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU2LCcuL2Fzc2V0cy9wbHVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NywnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU4LCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU5LCcuL2Fzc2V0cy9wbHVzX2luX3NxdWFyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjAsJy4vYXNzZXRzL3BvcG91dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjEsJy4vYXNzZXRzL3B1c2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzYyLCcuL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzYzLCcuL2Fzc2V0cy9xdW90ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjQsJy4vYXNzZXRzL3JlZnJlc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY1LCcuL2Fzc2V0cy9yZXBvcnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjYsJy4vYXNzZXRzL3JldHVybl9rZXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY3LCcuL2Fzc2V0cy9zYXZlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2OCwnLi9hc3NldHMvc2NhbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY5LCcuL2Fzc2V0cy9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzcwLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzEsJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzcyLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3MywnLi9hc3NldHMvc2Vzc2lvblZpZXdlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzQsJy4vYXNzZXRzL3NoYXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3NSwnLi9hc3NldHMvc2hhcmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc2LCcuL2Fzc2V0cy9zaW5nbGVfbWV0cmljX3ZpZXdlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzcsJy4vYXNzZXRzL3Nub3dmbGFrZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzgsJy4vYXNzZXRzL3NvcnRBc2NlbmRpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc5LCcuL2Fzc2V0cy9zb3J0RGVzY2VuZGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODAsJy4vYXNzZXRzL3NvcnRMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4MSwnLi9hc3NldHMvc29ydFJpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4MiwnLi9hc3NldHMvc29ydF9kb3duLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4MywnLi9hc3NldHMvc29ydF91cC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODQsJy4vYXNzZXRzL3NvcnRhYmxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4NSwnLi9hc3NldHMvc3BhY2VzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4NiwnLi9hc3NldHMvc3BhcmtsZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg3LCcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4OCwnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg5LCcuL2Fzc2V0cy9zdGFyX2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MCwnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTEsJy4vYXNzZXRzL3N0YXJfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MiwnLi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzkzLCcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5NCwnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk1LCcuL2Fzc2V0cy9zdGF0cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTYsJy4vYXNzZXRzL3N0b3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk3LCcuL2Fzc2V0cy9zdG9wX2ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTgsJy4vYXNzZXRzL3N0b3Bfc2xhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk5LCcuL2Fzc2V0cy9zdG9yYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwMCwnLi9hc3NldHMvc3RyaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwMSwnLi9hc3NldHMvc3VibW9kdWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwMiwnLi9hc3NldHMvc3VuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwMywnLi9hc3NldHMvc3dhdGNoX2lucHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNCwnLi9hc3NldHMvc3ltbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDUsJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDYsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDcsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDA4LCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDksJy4vYXNzZXRzL3RhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTAsJy4vYXNzZXRzL3RlYXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDExLCcuL2Fzc2V0cy90ZW1wZXJhdHVyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTIsJy4vYXNzZXRzL3RpbWVSZWZyZXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxMywnLi9hc3NldHMvdGltZWxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE0LCcuL2Fzc2V0cy90aW1lbGluZVdpdGhBcnJvdy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTUsJy4vYXNzZXRzL3RpbWVzbGlkZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE2LCcuL2Fzc2V0cy90b2tlbkFsaWFzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxNywnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxOCwnLi9hc3NldHMvdG9rZW5BcnJheS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTksJy4vYXNzZXRzL3Rva2VuQmluYXJ5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyMCwnLi9hc3NldHMvdG9rZW5Cb29sZWFuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyMSwnLi9hc3NldHMvdG9rZW5DbGFzcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjIsJy4vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjMsJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI0LCcuL2Fzc2V0cy90b2tlbkRhdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI1LCcuL2Fzc2V0cy90b2tlbkRpbWVuc2lvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjYsJy4vYXNzZXRzL3Rva2VuRWxlbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjcsJy4vYXNzZXRzL3Rva2VuRW51bS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjgsJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjksJy4vYXNzZXRzL3Rva2VuRXZlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDMwLCcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzEsJy4vYXNzZXRzL3Rva2VuRmllbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDMyLCcuL2Fzc2V0cy90b2tlbkZpbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDMzLCcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzQsJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDM1LCcuL2Fzc2V0cy90b2tlbkdlby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzYsJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzNywnLi9hc3NldHMvdG9rZW5JUC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzgsJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzOSwnLi9hc3NldHMvdG9rZW5Kb2luLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MCwnLi9hc3NldHMvdG9rZW5LZXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQxLCcuL2Fzc2V0cy90b2tlbktleXdvcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQyLCcuL2Fzc2V0cy90b2tlbk1ldGhvZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDMsJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDQsJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ1LCcuL2Fzc2V0cy90b2tlbk1vZHVsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDYsJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NywnLi9hc3NldHMvdG9rZW5OZXN0ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ4LCcuL2Fzc2V0cy90b2tlbk51bGwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ5LCcuL2Fzc2V0cy90b2tlbk51bWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTAsJy4vYXNzZXRzL3Rva2VuT2JqZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MSwnLi9hc3NldHMvdG9rZW5PcGVyYXRvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTIsJy4vYXNzZXRzL3Rva2VuUGFja2FnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTMsJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NCwnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NSwnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTYsJy4vYXNzZXRzL3Rva2VuUmFuZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU3LCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OCwnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU5LCcuL2Fzc2V0cy90b2tlblJlcG8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDYwLCcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDYxLCcuL2Fzc2V0cy90b2tlblNlbWFudGljVGV4dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjIsJy4vYXNzZXRzL3Rva2VuU2hhcGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDYzLCcuL2Fzc2V0cy90b2tlblN0cmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjQsJy4vYXNzZXRzL3Rva2VuU3RydWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NSwnLi9hc3NldHMvdG9rZW5TeW1ib2wuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY2LCcuL2Fzc2V0cy90b2tlblRhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjcsJy4vYXNzZXRzL3Rva2VuVGV4dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjgsJy4vYXNzZXRzL3Rva2VuVG9rZW5Db3VudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjksJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDcwLCcuL2Fzc2V0cy90b2tlblZlY3RvckRlbnNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MSwnLi9hc3NldHMvdG9rZW5WZWN0b3JTcGFyc2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDcyLCcuL2Fzc2V0cy90cmFpbmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzMsJy4vYXNzZXRzL3RyYW5zaXRpb25MZWZ0SW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc0LCcuL2Fzc2V0cy90cmFuc2l0aW9uTGVmdE91dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzUsJy4vYXNzZXRzL3RyYW5zaXRpb25Ub3BJbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzYsJy4vYXNzZXRzL3RyYW5zaXRpb25Ub3BPdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc3LCcuL2Fzc2V0cy90cmFzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzgsJy4vYXNzZXRzL3VuZm9sZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzksJy4vYXNzZXRzL3VubGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODAsJy4vYXNzZXRzL3VzZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgxLCcuL2Fzc2V0cy91c2VyQXZhdGFyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MiwnLi9hc3NldHMvdXNlcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgzLCcuL2Fzc2V0cy92ZWN0b3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg0LCcuL2Fzc2V0cy92aWRlb1BsYXllci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODUsJy4vYXNzZXRzL3Zpc19hcmVhLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NiwnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODcsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODgsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4OSwnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTAsJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTEsJy4vYXNzZXRzL3Zpc19nYXVnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTIsJy4vYXNzZXRzL3Zpc19nb2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MywnLi9hc3NldHMvdmlzX2xpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk0LCcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk1LCcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTYsJy4vYXNzZXRzL3Zpc19tZXRyaWMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk3LCcuL2Fzc2V0cy92aXNfcGllLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OCwnLi9hc3NldHMvdmlzX3RhYmxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OSwnLi9hc3NldHMvdmlzX3RhZ19jbG91ZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDAsJy4vYXNzZXRzL3Zpc190ZXh0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMSwnLi9hc3NldHMvdmlzX3RpbWVsaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMiwnLi9hc3NldHMvdmlzX3ZlZ2EuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAzLCcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTA0LCcuL2Fzc2V0cy93YXJuaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwNSwnLi9hc3NldHMvd2FybmluZ0ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDYsJy4vYXNzZXRzL3dvcmRXcmFwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwNywnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDgsJy4vYXNzZXRzL3dyZW5jaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDksJy4vYXNzZXRzL2FjY2Vzc2liaWxpdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEwLCcuL2Fzc2V0cy9hZ2dyZWdhdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTExLCcuL2Fzc2V0cy9hbGVydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTIsJy4vYXNzZXRzL2FuYWx5emVFdmVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTMsJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTE0LCcuL2Fzc2V0cy9hbm5vdGF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNSwnLi9hc3NldHMvYW5vbWFseV9jaGFydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTYsJy4vYXNzZXRzL2Fub21hbHlfc3dpbV9sYW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNywnLi9hc3NldHMvYXBtX3RyYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxOCwnLi9hc3NldHMvYXBwX2FkZF9kYXRhJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxOSwnLi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyMCwnLi9hc3NldHMvYXBwX2FnZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyMSwnLi9hc3NldHMvYXBwX2FwbSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjIsJy4vYXNzZXRzL2FwcF9hcHBfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyMywnLi9hc3NldHMvYXBwX2F1ZGl0YmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjQsJy4vYXNzZXRzL2FwcF9jYW52YXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI1LCcuL2Fzc2V0cy9hcHBfY2FzZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI2LCcuL2Fzc2V0cy9hcHBfY29kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjcsJy4vYXNzZXRzL2FwcF9jb25zb2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyOCwnLi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI5LCcuL2Fzc2V0cy9hcHBfZGFzaGJvYXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzMCwnLi9hc3NldHMvYXBwX2RldnRvb2xzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzMSwnLi9hc3NldHMvYXBwX2Rpc2NvdmVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzMiwnLi9hc3NldHMvYXBwX2Vtcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzMsJy4vYXNzZXRzL2FwcF9maWxlYmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzQsJy4vYXNzZXRzL2FwcF9mbGVldCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzUsJy4vYXNzZXRzL2FwcF9naXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM2LCcuL2Fzc2V0cy9hcHBfZ3JhcGgnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM3LCcuL2Fzc2V0cy9hcHBfZ3Jvayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzgsJy4vYXNzZXRzL2FwcF9oZWFydGJlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM5LCcuL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDAsJy4vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0MSwnLi9hc3NldHMvYXBwX2luZGV4X3JvbGx1cCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDIsJy4vYXNzZXRzL2FwcF9sZW5zJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0MywnLi9hc3NldHMvYXBwX2xvZ3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ0LCcuL2Fzc2V0cy9hcHBfbWFuYWdlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDUsJy4vYXNzZXRzL2FwcF9tZXRyaWNiZWF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0NiwnLi9hc3NldHMvYXBwX21ldHJpY3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ3LCcuL2Fzc2V0cy9hcHBfbWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ4LCcuL2Fzc2V0cy9hcHBfbW9uaXRvcmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDksJy4vYXNzZXRzL2FwcF9ub3RlYm9vayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTAsJy4vYXNzZXRzL2FwcF9wYWNrZXRiZWF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MSwnLi9hc3NldHMvYXBwX3BpcGVsaW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MiwnLi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTMsJy4vYXNzZXRzL2FwcF9yZXBvcnRpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU0LCcuL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTUsJy4vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU2LCcuL2Fzc2V0cy9hcHBfc2VjdXJpdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU3LCcuL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1OCwnLi9hc3NldHMvYXBwX3NwYWNlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTksJy4vYXNzZXRzL2FwcF9zcWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYwLCcuL2Fzc2V0cy9hcHBfdGltZWxpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYxLCcuL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYyLCcuL2Fzc2V0cy9hcHBfdXB0aW1lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MywnLi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2NCwnLi9hc3NldHMvYXBwX3Zpc3VhbGl6ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjUsJy4vYXNzZXRzL2FwcF92dWxuZXJhYmlsaXR5X21hbmFnZW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY2LCcuL2Fzc2V0cy9hcHBfd2F0Y2hlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjcsJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2OCwnLi9hc3NldHMvYXBwcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjksJy4vYXNzZXRzL2Fycm93RW5kJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3MCwnLi9hc3NldHMvYXJyb3dTdGFydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzEsJy4vYXNzZXRzL2Fycm93X2Rvd24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcyLCcuL2Fzc2V0cy9hcnJvd19sZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3MywnLi9hc3NldHMvYXJyb3dfcmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc0LCcuL2Fzc2V0cy9hcnJvd191cCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzUsJy4vYXNzZXRzL2FydGljbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc2LCcuL2Fzc2V0cy9hc3Rlcmlzayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzcsJy4vYXNzZXRzL2F0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3OCwnLi9hc3NldHMvYmVha2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3OSwnLi9hc3NldHMvYmVsbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODAsJy4vYXNzZXRzL2JlbGxTbGFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODEsJy4vYXNzZXRzL2JldGEnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTgyLCcuL2Fzc2V0cy9ib2x0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4MywnLi9hc3NldHMvYm94ZXNfaG9yaXpvbnRhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODQsJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4NSwnLi9hc3NldHMvYnJhbmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4NiwnLi9hc3NldHMvYnJhbmNoVXNlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODcsJy4vYXNzZXRzL2Jyb29tJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4OCwnLi9hc3NldHMvYnJ1c2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg5LCcuL2Fzc2V0cy9idWcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkwLCcuL2Fzc2V0cy9idWxsc2V5ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTEsJy4vYXNzZXRzL2NhbGVuZGFyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5MiwnLi9hc3NldHMvY2hhbmdlX3BvaW50X2RldGVjdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTMsJy4vYXNzZXRzL2NoZWNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NCwnLi9hc3NldHMvY2hlY2tJbkNpcmNsZUZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTUsJy4vYXNzZXRzL2NoZWVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NiwnLi9hc3NldHMvY2xpY2tMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NywnLi9hc3NldHMvY2xpY2tSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTgsJy4vYXNzZXRzL2Nsb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5OSwnLi9hc3NldHMvY2xvY2tDb3VudGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwMCwnLi9hc3NldHMvY2xvdWREcml6emxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwMSwnLi9hc3NldHMvY2xvdWRTdG9ybXknOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAyLCcuL2Fzc2V0cy9jbG91ZFN1bm55JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwMywnLi9hc3NldHMvY2x1c3Rlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDQsJy4vYXNzZXRzL2NvbG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNSwnLi9hc3NldHMvY29tcHV0ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDYsJy4vYXNzZXRzL2NvbnNvbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA3LCcuL2Fzc2V0cy9jb250YWluZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA4LCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA5LCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTAsJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTEsJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEyLCcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxMywnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE0LCcuL2Fzc2V0cy9jb3B5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxNSwnLi9hc3NldHMvY29weV9jbGlwYm9hcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE2LCcuL2Fzc2V0cy9jcm9zcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTcsJy4vYXNzZXRzL2Nyb3NzSW5DaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE4LCcuL2Fzc2V0cy9jcm9zc19pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE5LCcuL2Fzc2V0cy9jcm9zc2hhaXJzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyMCwnLi9hc3NldHMvY3VycmVuY3knOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIxLCcuL2Fzc2V0cy9jdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIyLCcuL2Fzc2V0cy9kYXRhYmFzZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjMsJy4vYXNzZXRzL2Rlc2t0b3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI0LCcuL2Fzc2V0cy9kaWZmJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNSwnLi9hc3NldHMvZGlzY3Vzcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjYsJy4vYXNzZXRzL2RvY3VtZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNywnLi9hc3NldHMvZG9jdW1lbnRFZGl0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyOCwnLi9hc3NldHMvZG9jdW1lbnRhdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjksJy4vYXNzZXRzL2RvY3VtZW50cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzAsJy4vYXNzZXRzL2RvdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzEsJy4vYXNzZXRzL2RvdEluQ2lyY2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMiwnLi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMywnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzQsJy4vYXNzZXRzL2Rvd25sb2FkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzNSwnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM2LCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM3LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM4LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM5LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0MCwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0MSwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQyLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQzLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ0LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0NSwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0NiwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDcsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ4LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDksJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTAsJy4vYXNzZXRzL2VkaXRvcl9ib2xkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1MSwnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTIsJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1MywnLi9hc3NldHMvZWRpdG9yX2NvbW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU0LCcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTUsJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU2LCcuL2Fzc2V0cy9lZGl0b3JfbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTcsJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU4LCcuL2Fzc2V0cy9lZGl0b3JfcmVkbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTksJy4vYXNzZXRzL2VkaXRvcl9zdHJpa2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYwLCcuL2Fzc2V0cy9lZGl0b3JfdGFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYxLCcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2MiwnLi9hc3NldHMvZWRpdG9yX3VuZG8nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYzLCcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY0LCcuL2Fzc2V0cy9lbWFpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjUsJy4vYXNzZXRzL2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2NiwnLi9hc3NldHMvZW5kcG9pbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY3LCcuL2Fzc2V0cy9lcWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY4LCcuL2Fzc2V0cy9lcmFzZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY5LCcuL2Fzc2V0cy9lcnJvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzAsJy4vYXNzZXRzL2Vycm9yRmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3MSwnLi9hc3NldHMvZXNxbFZpcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzIsJy4vYXNzZXRzL2V4aXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjczLCcuL2Fzc2V0cy9leHBhbmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc0LCcuL2Fzc2V0cy9leHBhbmRNaW5pJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NSwnLi9hc3NldHMvZXhwb3J0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NiwnLi9hc3NldHMvZXllJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NywnLi9hc3NldHMvZXllX2Nsb3NlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzgsJy4vYXNzZXRzL2ZhY2VfaGFwcHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc5LCcuL2Fzc2V0cy9mYWNlX25ldXRyYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgwLCcuL2Fzc2V0cy9mYWNlX3NhZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODEsJy4vYXNzZXRzL2ZpZWxkX3N0YXRpc3RpY3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgyLCcuL2Fzc2V0cy9maWx0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgzLCcuL2Fzc2V0cy9maWx0ZXJFeGNsdWRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NCwnLi9hc3NldHMvZmlsdGVySWdub3JlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NSwnLi9hc3NldHMvZmlsdGVySW5DaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjg2LCcuL2Fzc2V0cy9maWx0ZXJJbmNsdWRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NywnLi9hc3NldHMvZmxhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODgsJy4vYXNzZXRzL2ZvbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjg5LCcuL2Fzc2V0cy9mb2xkZXJfY2hlY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNjkwLCcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5MSwnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5MiwnLi9hc3NldHMvZm9sZGVyX29wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjkzLCcuL2Fzc2V0cy9mcmFtZU5leHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk0LCcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5NSwnLi9hc3NldHMvZnVsbFNjcmVlbkV4aXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk2LCcuL2Fzc2V0cy9mdWxsX3NjcmVlbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTcsJy4vYXNzZXRzL2Z1bmN0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5OCwnLi9hc3NldHMvZ2Vhcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTksJy4vYXNzZXRzL2dsYXNzZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAwLCcuL2Fzc2V0cy9nbG9iZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDEsJy4vYXNzZXRzL2dyYWInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAyLCcuL2Fzc2V0cy9ncmFiT21uaWRpcmVjdGlvbmFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwMywnLi9hc3NldHMvZ3JhYl9ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNCwnLi9hc3NldHMvZ3JhZGllbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA1LCcuL2Fzc2V0cy9ncmlkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNiwnLi9hc3NldHMvaGVhcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA3LCcuL2Fzc2V0cy9oZWF0bWFwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwOCwnLi9hc3NldHMvaGVscCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDksJy4vYXNzZXRzL2hvbWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzEwLCcuL2Fzc2V0cy9pSW5DaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzExLCcuL2Fzc2V0cy9pbWFnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTIsJy4vYXNzZXRzL2ltcG9ydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTMsJy4vYXNzZXRzL2luZGV4JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNCwnLi9hc3NldHMvaW5kZXhUZW1wb3JhcnknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE1LCcuL2Fzc2V0cy9pbmRleF9jbG9zZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTYsJy4vYXNzZXRzL2luZGV4X2VkaXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE3LCcuL2Fzc2V0cy9pbmRleF9mbHVzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTgsJy4vYXNzZXRzL2luZGV4X21hcHBpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE5LCcuL2Fzc2V0cy9pbmRleF9vcGVuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMCwnLi9hc3NldHMvaW5kZXhfcnVudGltZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjEsJy4vYXNzZXRzL2luZGV4X3NldHRpbmdzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMiwnLi9hc3NldHMvaW5maW5pdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzIzLCcuL2Fzc2V0cy9pbnB1dE91dHB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjQsJy4vYXNzZXRzL2luc3BlY3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI1LCcuL2Fzc2V0cy9pbnZlcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI2LCcuL2Fzc2V0cy9pcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjcsJy4vYXNzZXRzL2lzc3VlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyOCwnLi9hc3NldHMva2V5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyOSwnLi9hc3NldHMva2V5Ym9hcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMwLCcuL2Fzc2V0cy9rcWxfZmllbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMxLCcuL2Fzc2V0cy9rcWxfZnVuY3Rpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMyLCcuL2Fzc2V0cy9rcWxfb3BlcmFuZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzMsJy4vYXNzZXRzL2txbF9zZWxlY3Rvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzQsJy4vYXNzZXRzL2txbF92YWx1ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzUsJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczNiwnLi9hc3NldHMva3ViZXJuZXRlc1BvZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzcsJy4vYXNzZXRzL2xhdW5jaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzgsJy4vYXNzZXRzL2xheWVycyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzksJy4vYXNzZXRzL2xldHRlcmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDAsJy4vYXNzZXRzL2xpbmVEYXNoZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQxLCcuL2Fzc2V0cy9saW5lRG90dGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MiwnLi9hc3NldHMvbGluZVNvbGlkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MywnLi9hc3NldHMvbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDQsJy4vYXNzZXRzL2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ1LCcuL2Fzc2V0cy9saXN0X2FkZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDYsJy4vYXNzZXRzL2xvY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ3LCcuL2Fzc2V0cy9sb2NrT3Blbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDgsJy4vYXNzZXRzL2xvZ19wYXR0ZXJuX2FuYWx5c2lzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0OSwnLi9hc3NldHMvbG9nX3JhdGVfYW5hbHlzaXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzUwLCcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTEsJy4vYXNzZXRzL2xvZ29fYXBhY2hlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1MiwnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1MywnLi9hc3NldHMvbG9nb19hd3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU0LCcuL2Fzc2V0cy9sb2dvX2F3c19tb25vJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1NSwnLi9hc3NldHMvbG9nb19henVyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTYsJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTcsJy4vYXNzZXRzL2xvZ29fYmVhdHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU4LCcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTksJy4vYXNzZXRzL2xvZ29fY2VwaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjAsJy4vYXNzZXRzL2xvZ29fY2xvdWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzYxLCcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjIsJy4vYXNzZXRzL2xvZ29fY29kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjMsJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY0LCcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjUsJy4vYXNzZXRzL2xvZ29fZG9ja2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2NiwnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2NywnLi9hc3NldHMvbG9nb19lbGFzdGljJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2OCwnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2OSwnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3MCwnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzEsJy4vYXNzZXRzL2xvZ29fZXRjZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzIsJy4vYXNzZXRzL2xvZ29fZ2NwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3MywnLi9hc3NldHMvbG9nb19nY3BfbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzQsJy4vYXNzZXRzL2xvZ29fZ2l0aHViJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3NSwnLi9hc3NldHMvbG9nb19nbWFpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzYsJy4vYXNzZXRzL2xvZ29fZ29sYW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3NywnLi9hc3NldHMvbG9nb19nb29nbGVfZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzgsJy4vYXNzZXRzL2xvZ29faGFwcm94eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzksJy4vYXNzZXRzL2xvZ29faWJtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MCwnLi9hc3NldHMvbG9nb19pYm1fbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODEsJy4vYXNzZXRzL2xvZ29fa2Fma2EnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgyLCcuL2Fzc2V0cy9sb2dvX2tpYmFuYSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODMsJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODQsJy4vYXNzZXRzL2xvZ29fbG9nZ2luZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODUsJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg2LCcuL2Fzc2V0cy9sb2dvX21hcHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg3LCcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODgsJy4vYXNzZXRzL2xvZ29fbWV0cmljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODksJy4vYXNzZXRzL2xvZ29fbW9uZ29kYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTAsJy4vYXNzZXRzL2xvZ29fbXlzcWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkxLCcuL2Fzc2V0cy9sb2dvX25naW54JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5MiwnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5MywnLi9hc3NldHMvbG9nb19vc3F1ZXJ5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NCwnLi9hc3NldHMvbG9nb19waHAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk1LCcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NiwnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NywnLi9hc3NldHMvbG9nb19yYWJiaXRtcSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTgsJy4vYXNzZXRzL2xvZ29fcmVkaXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk5LCcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwMCwnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDEsJy4vYXNzZXRzL2xvZ29fc2tldGNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwMiwnLi9hc3NldHMvbG9nb19zbGFjayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDMsJy4vYXNzZXRzL2xvZ29fdXB0aW1lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwNCwnLi9hc3NldHMvbG9nb192dWxuZXJhYmlsaXR5X21hbmFnZW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA1LCcuL2Fzc2V0cy9sb2dvX3dlYmhvb2snOl9EeW5hbWljSW1wb3J0TW9kdWxlODA2LCcuL2Fzc2V0cy9sb2dvX3dpbmRvd3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA3LCcuL2Fzc2V0cy9sb2dvX3dvcmtwbGFjZV9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA4LCcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODA5LCcuL2Fzc2V0cy9sb2dzdGFzaF9pZic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTAsJy4vYXNzZXRzL2xvZ3N0YXNoX2lucHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMSwnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMiwnLi9hc3NldHMvbG9nc3Rhc2hfcXVldWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODEzLCcuL2Fzc2V0cy9tYWduZXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODE0LCcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxNSwnLi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTYsJy4vYXNzZXRzL21hZ25pZnlXaXRoUGx1cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTcsJy4vYXNzZXRzL21hcF9tYXJrZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODE4LCcuL2Fzc2V0cy9tZW1vcnknOl9EeW5hbWljSW1wb3J0TW9kdWxlODE5LCcuL2Fzc2V0cy9tZW51JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyMCwnLi9hc3NldHMvbWVudURvd24nOl9EeW5hbWljSW1wb3J0TW9kdWxlODIxLCcuL2Fzc2V0cy9tZW51TGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjIsJy4vYXNzZXRzL21lbnVSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjMsJy4vYXNzZXRzL21lbnVVcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjQsJy4vYXNzZXRzL21lcmdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyNSwnLi9hc3NldHMvbWluaW1pemUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODI2LCcuL2Fzc2V0cy9taW51cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjcsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjgsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZV9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODI5LCcuL2Fzc2V0cy9taW51c19pbl9zcXVhcmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODMwLCcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlODMxLCcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzMiwnLi9hc3NldHMvbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlODMzLCcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlODM0LCcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlODM1LCcuL2Fzc2V0cy9tbF9kYXRhX3Zpc3VhbGl6ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODM2LCcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlODM3LCcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzgsJy4vYXNzZXRzL21vYmlsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzksJy4vYXNzZXRzL21vb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlODQwLCcuL2Fzc2V0cy9tb3ZlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0MSwnLi9hc3NldHMvbmFtZXNwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0MiwnLi9hc3NldHMvbmVzdGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0MywnLi9hc3NldHMvbmV3X2NoYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ0LCcuL2Fzc2V0cy9ub2RlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0NSwnLi9hc3NldHMvbnVtYmVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0NiwnLi9hc3NldHMvb2ZmbGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDcsJy4vYXNzZXRzL29ubGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDgsJy4vYXNzZXRzL3BhY2thZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ5LCcuL2Fzc2V0cy9wYWdlU2VsZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1MCwnLi9hc3NldHMvcGFnZXNTZWxlY3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUxLCcuL2Fzc2V0cy9wYWludCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTIsJy4vYXNzZXRzL3BhbGV0dGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUzLCcuL2Fzc2V0cy9wYXBlcl9jbGlwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1NCwnLi9hc3NldHMvcGFydGlhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTUsJy4vYXNzZXRzL3BhdXNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1NiwnLi9hc3NldHMvcGF5bWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTcsJy4vYXNzZXRzL3BlbmNpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTgsJy4vYXNzZXRzL3BlcmNlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODU5LCcuL2Fzc2V0cy9waW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlODYwLCcuL2Fzc2V0cy9waW5fZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2MSwnLi9hc3NldHMvcGlwZUJyZWFrcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjIsJy4vYXNzZXRzL3BpcGVOb0JyZWFrcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjMsJy4vYXNzZXRzL3Bpdm90JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2NCwnLi9hc3NldHMvcGxheSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjUsJy4vYXNzZXRzL3BsYXlGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY2LCcuL2Fzc2V0cy9wbHVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2NywnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY4LCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY5LCcuL2Fzc2V0cy9wbHVzX2luX3NxdWFyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzAsJy4vYXNzZXRzL3BvcG91dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzEsJy4vYXNzZXRzL3B1c2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcyLCcuL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODczLCcuL2Fzc2V0cy9xdW90ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzQsJy4vYXNzZXRzL3JlZnJlc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODc1LCcuL2Fzc2V0cy9yZXBvcnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzYsJy4vYXNzZXRzL3JldHVybl9rZXknOl9EeW5hbWljSW1wb3J0TW9kdWxlODc3LCcuL2Fzc2V0cy9zYXZlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3OCwnLi9hc3NldHMvc2NhbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODc5LCcuL2Fzc2V0cy9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODgwLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODEsJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODgyLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4MywnLi9hc3NldHMvc2Vzc2lvblZpZXdlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODQsJy4vYXNzZXRzL3NoYXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NSwnLi9hc3NldHMvc2hhcmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODg2LCcuL2Fzc2V0cy9zaW5nbGVfbWV0cmljX3ZpZXdlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODcsJy4vYXNzZXRzL3Nub3dmbGFrZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODgsJy4vYXNzZXRzL3NvcnRBc2NlbmRpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODg5LCcuL2Fzc2V0cy9zb3J0RGVzY2VuZGluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTAsJy4vYXNzZXRzL3NvcnRMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5MSwnLi9hc3NldHMvc29ydFJpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5MiwnLi9hc3NldHMvc29ydF9kb3duJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5MywnLi9hc3NldHMvc29ydF91cCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTQsJy4vYXNzZXRzL3NvcnRhYmxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NSwnLi9hc3NldHMvc3BhY2VzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NiwnLi9hc3NldHMvc3BhcmtsZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk3LCcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5OCwnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk5LCcuL2Fzc2V0cy9zdGFyX2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwMCwnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDEsJy4vYXNzZXRzL3N0YXJfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwMiwnLi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAzLCcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwNCwnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA1LCcuL2Fzc2V0cy9zdGF0cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDYsJy4vYXNzZXRzL3N0b3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA3LCcuL2Fzc2V0cy9zdG9wX2ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDgsJy4vYXNzZXRzL3N0b3Bfc2xhc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA5LCcuL2Fzc2V0cy9zdG9yYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxMCwnLi9hc3NldHMvc3RyaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxMSwnLi9hc3NldHMvc3VibW9kdWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxMiwnLi9hc3NldHMvc3VuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxMywnLi9hc3NldHMvc3dhdGNoX2lucHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxNCwnLi9hc3NldHMvc3ltbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MTUsJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MTYsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MTcsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTE4LCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MTksJy4vYXNzZXRzL3RhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MjAsJy4vYXNzZXRzL3RlYXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTIxLCcuL2Fzc2V0cy90ZW1wZXJhdHVyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MjIsJy4vYXNzZXRzL3RpbWVSZWZyZXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyMywnLi9hc3NldHMvdGltZWxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTI0LCcuL2Fzc2V0cy90aW1lbGluZVdpdGhBcnJvdyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MjUsJy4vYXNzZXRzL3RpbWVzbGlkZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTI2LCcuL2Fzc2V0cy90b2tlbkFsaWFzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyNywnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyOCwnLi9hc3NldHMvdG9rZW5BcnJheSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MjksJy4vYXNzZXRzL3Rva2VuQmluYXJ5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTkzMCwnLi9hc3NldHMvdG9rZW5Cb29sZWFuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkzMSwnLi9hc3NldHMvdG9rZW5DbGFzcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzIsJy4vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzMsJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTM0LCcuL2Fzc2V0cy90b2tlbkRhdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTM1LCcuL2Fzc2V0cy90b2tlbkRpbWVuc2lvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzYsJy4vYXNzZXRzL3Rva2VuRWxlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzcsJy4vYXNzZXRzL3Rva2VuRW51bSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzgsJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzksJy4vYXNzZXRzL3Rva2VuRXZlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQwLCcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NDEsJy4vYXNzZXRzL3Rva2VuRmllbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQyLCcuL2Fzc2V0cy90b2tlbkZpbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQzLCcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NDQsJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQ1LCcuL2Fzc2V0cy90b2tlbkdlbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NDYsJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk0NywnLi9hc3NldHMvdG9rZW5JUCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NDgsJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk0OSwnLi9hc3NldHMvdG9rZW5Kb2luJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk1MCwnLi9hc3NldHMvdG9rZW5LZXknOl9EeW5hbWljSW1wb3J0TW9kdWxlOTUxLCcuL2Fzc2V0cy90b2tlbktleXdvcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTUyLCcuL2Fzc2V0cy90b2tlbk1ldGhvZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NTMsJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NTQsJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTU1LCcuL2Fzc2V0cy90b2tlbk1vZHVsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NTYsJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk1NywnLi9hc3NldHMvdG9rZW5OZXN0ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTU4LCcuL2Fzc2V0cy90b2tlbk51bGwnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTU5LCcuL2Fzc2V0cy90b2tlbk51bWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NjAsJy4vYXNzZXRzL3Rva2VuT2JqZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2MSwnLi9hc3NldHMvdG9rZW5PcGVyYXRvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NjIsJy4vYXNzZXRzL3Rva2VuUGFja2FnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NjMsJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2NCwnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2NSwnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NjYsJy4vYXNzZXRzL3Rva2VuUmFuZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTY3LCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2OCwnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTY5LCcuL2Fzc2V0cy90b2tlblJlcG8nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTcwLCcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTcxLCcuL2Fzc2V0cy90b2tlblNlbWFudGljVGV4dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NzIsJy4vYXNzZXRzL3Rva2VuU2hhcGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTczLCcuL2Fzc2V0cy90b2tlblN0cmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NzQsJy4vYXNzZXRzL3Rva2VuU3RydWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTk3NSwnLi9hc3NldHMvdG9rZW5TeW1ib2wnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTc2LCcuL2Fzc2V0cy90b2tlblRhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NzcsJy4vYXNzZXRzL3Rva2VuVGV4dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NzgsJy4vYXNzZXRzL3Rva2VuVG9rZW5Db3VudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NzksJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTgwLCcuL2Fzc2V0cy90b2tlblZlY3RvckRlbnNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk4MSwnLi9hc3NldHMvdG9rZW5WZWN0b3JTcGFyc2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTgyLCcuL2Fzc2V0cy90cmFpbmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5ODMsJy4vYXNzZXRzL3RyYW5zaXRpb25MZWZ0SW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTg0LCcuL2Fzc2V0cy90cmFuc2l0aW9uTGVmdE91dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5ODUsJy4vYXNzZXRzL3RyYW5zaXRpb25Ub3BJbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5ODYsJy4vYXNzZXRzL3RyYW5zaXRpb25Ub3BPdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTg3LCcuL2Fzc2V0cy90cmFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5ODgsJy4vYXNzZXRzL3VuZm9sZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5ODksJy4vYXNzZXRzL3VubGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OTAsJy4vYXNzZXRzL3VzZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTkxLCcuL2Fzc2V0cy91c2VyQXZhdGFyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk5MiwnLi9hc3NldHMvdXNlcnMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTkzLCcuL2Fzc2V0cy92ZWN0b3InOl9EeW5hbWljSW1wb3J0TW9kdWxlOTk0LCcuL2Fzc2V0cy92aWRlb1BsYXllcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OTUsJy4vYXNzZXRzL3Zpc19hcmVhJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk5NiwnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OTcsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OTgsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk5OSwnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAwLCcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAwMSwnLi9hc3NldHMvdmlzX2dhdWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDIsJy4vYXNzZXRzL3Zpc19nb2FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDMsJy4vYXNzZXRzL3Zpc19saW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDQsJy4vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA1LCcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA2LCcuL2Fzc2V0cy92aXNfbWV0cmljJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDcsJy4vYXNzZXRzL3Zpc19waWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAwOCwnLi9hc3NldHMvdmlzX3RhYmxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDksJy4vYXNzZXRzL3Zpc190YWdfY2xvdWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxMCwnLi9hc3NldHMvdmlzX3RleHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxMSwnLi9hc3NldHMvdmlzX3RpbWVsaW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTIsJy4vYXNzZXRzL3Zpc192ZWdhJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTMsJy4vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE0LCcuL2Fzc2V0cy93YXJuaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTUsJy4vYXNzZXRzL3dhcm5pbmdGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxNiwnLi9hc3NldHMvd29yZFdyYXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxNywnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE4LCcuL2Fzc2V0cy93cmVuY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxOX07XG5mdW5jdGlvbiBfRHluYW1pY0ltcG9ydChwYXRoKSB7Y29uc3QgbW9kPV9EeW5hbWljSW1wb3J0TW9kdWxlTWFwW3BhdGhdO2lmKG1vZCkge21vZFtTeW1ib2wudG9TdHJpbmdUYWddPSdNb2R1bGUnO31yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vZCk7fVxudmFyIF9leGNsdWRlZCA9IFtcInR5cGVcIiwgXCJzaXplXCIsIFwiY29sb3JcIiwgXCJjbGFzc05hbWVcIiwgXCJ0YWJJbmRleFwiLCBcInRpdGxlXCIsIFwib25JY29uTG9hZFwiLCBcInN0eWxlXCIsIFwic3R5bGVzTWVtb2l6ZXJcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgdHlwZVRvUGF0aE1hcCB9IGZyb20gJy4vaWNvbl9tYXAnO1xuaW1wb3J0IHsgaWNvbiBhcyBlbXB0eSB9IGZyb20gJy4vYXNzZXRzL2VtcHR5JztcbmltcG9ydCB7IGVucXVldWVTdGF0ZUNoYW5nZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciwgd2l0aEV1aVN0eWxlc01lbW9pemVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuZXhwb3J0IHsgQ09MT1JTIH0gZnJvbSAnLi9uYW1lZF9jb2xvcnMnO1xuaW1wb3J0IHsgaXNOYW1lZENvbG9yIH0gZnJvbSAnLi9uYW1lZF9jb2xvcnMnO1xuaW1wb3J0IHsgZXVpSWNvblN0eWxlcyB9IGZyb20gJy4vaWNvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBnZXRJc0FwcEljb24gPSBmdW5jdGlvbiBnZXRJc0FwcEljb24oaWNvblR5cGUpIHtcbiAgaWYgKHR5cGVvZiBpY29uVHlwZSAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgaWYgKGljb25UeXBlID09PSAnZGF0YVZpc3VhbGl6ZXInKSByZXR1cm4gdHJ1ZTsgLy8gU3BlY2lhbCBjYXNlXG4gIGlmIChpY29uVHlwZS5pbmRleE9mKCdkYXRhOicpID09PSAwKSByZXR1cm4gZmFsc2U7IC8vIElubGluZSBkYXRhIFVSSXMgc2hvdWxkIGJlIHNob3J0LWNpcmN1aXRlZCBmb3IgcGVyZm9ybWFuY2VcbiAgcmV0dXJuIGljb25UeXBlLmVuZHNXaXRoKCdBcHAnKSB8fCBpY29uVHlwZS5lbmRzV2l0aCgnSm9iJyk7XG59O1xuZXhwb3J0IHZhciBUWVBFUyA9IGtleXNPZih0eXBlVG9QYXRoTWFwKTtcblxuLy8gV2UgYWNjZXB0IGFyYml0cmFyeSBjb2xvciBzdHJpbmdzLCB3aGljaCBhcmUgaW1wb3NzaWJsZSB0byB0eXBlLlxuXG5leHBvcnQgdmFyIFNJWkVTID0gWydvcmlnaW5hbCcsICdzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcbmZ1bmN0aW9uIGlzRXVpSWNvblR5cGUoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdzdHJpbmcnICYmIHR5cGVUb1BhdGhNYXAuaGFzT3duUHJvcGVydHkoeCk7XG59XG5mdW5jdGlvbiBnZXRJbml0aWFsSWNvbihpY29uKSB7XG4gIGlmIChpY29uID09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChpc0V1aUljb25UeXBlKGljb24pKSB7XG4gICAgaWYgKGljb25Db21wb25lbnRDYWNoZS5oYXNPd25Qcm9wZXJ0eShpY29uKSkge1xuICAgICAgcmV0dXJuIGljb25Db21wb25lbnRDYWNoZVtpY29uXTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gaWNvbjtcbn1cbnZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCk7XG52YXIgaWNvbkNvbXBvbmVudENhY2hlID0ge307XG5leHBvcnQgdmFyIGNsZWFySWNvbkNvbXBvbmVudENhY2hlID0gZnVuY3Rpb24gY2xlYXJJY29uQ29tcG9uZW50Q2FjaGUoaWNvblR5cGUpIHtcbiAgaWYgKGljb25UeXBlICE9IG51bGwpIHtcbiAgICBkZWxldGUgaWNvbkNvbXBvbmVudENhY2hlW2ljb25UeXBlXTtcbiAgfSBlbHNlIHtcbiAgICBpY29uQ29tcG9uZW50Q2FjaGUgPSB7fTtcbiAgfVxufTtcbmV4cG9ydCB2YXIgYXBwZW5kSWNvbkNvbXBvbmVudENhY2hlID0gZnVuY3Rpb24gYXBwZW5kSWNvbkNvbXBvbmVudENhY2hlKGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwKSB7XG4gIGZvciAodmFyIGljb25UeXBlIGluIGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwKSB7XG4gICAgaWYgKGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwLmhhc093blByb3BlcnR5KGljb25UeXBlKSkge1xuICAgICAgaWNvbkNvbXBvbmVudENhY2hlW2ljb25UeXBlXSA9IGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwW2ljb25UeXBlXTtcbiAgICB9XG4gIH1cbn07XG5leHBvcnQgdmFyIEV1aUljb25DbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpSWNvbkNsYXNzKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlJY29uQ2xhc3MpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlJY29uQ2xhc3MsIFtwcm9wc10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpc01vdW50ZWRcIiwgZmFsc2UpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJsb2FkSWNvbkNvbXBvbmVudFwiLCBmdW5jdGlvbiAoaWNvblR5cGUpIHtcbiAgICAgIGlmIChpY29uQ29tcG9uZW50Q2FjaGUuaGFzT3duUHJvcGVydHkoaWNvblR5cGUpKSB7XG4gICAgICAgIC8vIGV4aXN0cyBpbiBjYWNoZVxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBuZWVkZWRMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpY29uOiBpY29uQ29tcG9uZW50Q2FjaGVbaWNvblR5cGVdXG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5vbkljb25Mb2FkKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIF9EeW5hbWljSW1wb3J0KGAuL2Fzc2V0cy8ke3R5cGVUb1BhdGhNYXBbaWNvblR5cGVdfWApLnRoZW4oZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGljb24gPSBfcmVmLmljb247XG4gICAgICAgIGljb25Db21wb25lbnRDYWNoZVtpY29uVHlwZV0gPSBpY29uO1xuICAgICAgICBlbnF1ZXVlU3RhdGVDaGFuZ2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChfdGhpcy5pc01vdW50ZWQgJiYgX3RoaXMucHJvcHMudHlwZSA9PT0gaWNvblR5cGUpIHtcbiAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgaWNvbjogaWNvbixcbiAgICAgICAgICAgICAgaWNvblRpdGxlOiBpY29uVHlwZSxcbiAgICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICAgICAgfSwgX3RoaXMub25JY29uTG9hZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkljb25Mb2FkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBvbkljb25Mb2FkID0gX3RoaXMucHJvcHMub25JY29uTG9hZDtcbiAgICAgIGlmIChvbkljb25Mb2FkKSB7XG4gICAgICAgIG9uSWNvbkxvYWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG4gICAgdmFyIGluaXRpYWxJY29uID0gZ2V0SW5pdGlhbEljb24odHlwZSk7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBpY29uOiBpbml0aWFsSWNvbixcbiAgICAgIGljb25UaXRsZTogdW5kZWZpbmVkLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIG5lZWRlZExvYWRpbmc6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aUljb25DbGFzcywgX1B1cmVDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUljb25DbGFzcywgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLmlzTW91bnRlZCA9IHRydWU7XG4gICAgICB2YXIgdHlwZSA9IHRoaXMucHJvcHMudHlwZTtcbiAgICAgIGlmIChpc0V1aUljb25UeXBlKHR5cGUpICYmIHRoaXMuc3RhdGUuaWNvbiA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIG5lZWRlZExvYWRpbmc6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxvYWRJY29uQ29tcG9uZW50KHR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkljb25Mb2FkKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICB2YXIgdHlwZSA9IHRoaXMucHJvcHMudHlwZTtcbiAgICAgIGlmICh0eXBlICE9PSBwcmV2UHJvcHMudHlwZSkge1xuICAgICAgICBpZiAoaXNFdWlJY29uVHlwZSh0eXBlKSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgbmVlZGVkTG9hZGluZzogaWNvbkNvbXBvbmVudENhY2hlLmhhc093blByb3BlcnR5KHR5cGUpLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sb2FkSWNvbkNvbXBvbmVudCh0eXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGljb246IHR5cGUsXG4gICAgICAgICAgICBuZWVkZWRMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIHR5cGUgPSBfdGhpcyRwcm9wcy50eXBlLFxuICAgICAgICBfdGhpcyRwcm9wcyRzaXplID0gX3RoaXMkcHJvcHMuc2l6ZSxcbiAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF90aGlzJHByb3BzJHNpemUsXG4gICAgICAgIGNvbG9yID0gX3RoaXMkcHJvcHMuY29sb3IsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgdGFiSW5kZXggPSBfdGhpcyRwcm9wcy50YWJJbmRleCxcbiAgICAgICAgdGl0bGUgPSBfdGhpcyRwcm9wcy50aXRsZSxcbiAgICAgICAgb25JY29uTG9hZCA9IF90aGlzJHByb3BzLm9uSWNvbkxvYWQsXG4gICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHMuc3R5bGUsXG4gICAgICAgIHN0eWxlc01lbW9pemVyID0gX3RoaXMkcHJvcHMuc3R5bGVzTWVtb2l6ZXIsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRzdGF0ZS5pc0xvYWRpbmcsXG4gICAgICAgIG5lZWRlZExvYWRpbmcgPSBfdGhpcyRzdGF0ZS5uZWVkZWRMb2FkaW5nLFxuICAgICAgICBpY29uVGl0bGUgPSBfdGhpcyRzdGF0ZS5pY29uVGl0bGU7XG4gICAgICB2YXIgaXNMb2FkZWQgPSAhaXNMb2FkaW5nICYmIG5lZWRlZExvYWRpbmc7XG4gICAgICB2YXIgaXNDdXN0b21Db2xvciA9IGNvbG9yICYmICFpc05hbWVkQ29sb3IoY29sb3IpO1xuICAgICAgdmFyIG9wdGlvbmFsQ3VzdG9tU3R5bGVzID0gaXNDdXN0b21Db2xvciA/IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0sIHN0eWxlKSA6IHN0eWxlO1xuXG4gICAgICAvLyBUaGVzZSBpY29ucyBhcmUgYSBsaXR0bGUgc3BlY2lhbCBhbmQgZ2V0IHNvbWUgZXh0cmEgQ1NTIGZsZXhpYmlsaXR5XG4gICAgICB2YXIgaXNBcHBJY29uID0gZ2V0SXNBcHBJY29uKHR5cGUpO1xuICAgICAgLy8gQXBwIGNvbG9yIHN0eWxlcyBhcmUgb25seSBhcHBsaWVkIGlmIG5vIGNvbG9yIGlzIHBhc3NlZCBvciBpZiBjb2xvcj1cImRlZmF1bHRcIiBpcyBwYXNzZWRcbiAgICAgIHZhciBhcHBJY29uSGFzQ29sb3IgPSBjb2xvciAmJiBjb2xvciAhPT0gJ2RlZmF1bHQnO1xuXG4gICAgICAvLyBUaGUgRWxhc3RpYyBsb2dvIHNob3VsZCBiZSBhbiBvdXRsaW5lIGluIHRleHQgYW5kIGdob3N0IG1vZGVcbiAgICAgIHZhciBpc0VsYXN0aWNMb2dvT3V0bGluZSA9IHR5cGUgPT09ICdsb2dvRWxhc3RpYycgJiYgKGNvbG9yID09PSAnZ2hvc3QnIHx8IGNvbG9yID09PSAndGV4dCcpO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlJY29uJywgY2xhc3NOYW1lKTtcblxuICAgICAgLy8gRW1vdGlvbiBzdHlsZXNcbiAgICAgIHZhciBzdHlsZXMgPSBzdHlsZXNNZW1vaXplcihldWlJY29uU3R5bGVzKTtcbiAgICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUljb24sIHN0eWxlc1tzaXplXSwgY29sb3IgJiYgaXNOYW1lZENvbG9yKGNvbG9yKSAmJiBzdHlsZXNbY29sb3JdLCBpc0N1c3RvbUNvbG9yICYmIHN0eWxlcy5jdXN0b21Db2xvciwgaXNFbGFzdGljTG9nb091dGxpbmUgJiYgc3R5bGVzLmxvZ29FbGFzdGljT3V0bGluZSwgaXNBcHBJY29uICYmICFhcHBJY29uSGFzQ29sb3IgJiYgc3R5bGVzLmFwcCwgaXNMb2FkaW5nICYmIHN0eWxlcy5pc0xvYWRpbmcsICFpc0xvYWRpbmcgJiYgbmVlZGVkTG9hZGluZyAmJiBzdHlsZXMuaXNMb2FkZWRdO1xuICAgICAgdmFyIGljb24gPSB0aGlzLnN0YXRlLmljb24gfHwgZW1wdHk7XG4gICAgICBpZiAodHlwZW9mIGljb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiaW1nXCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBhbHQ6IHRpdGxlID8gdGl0bGUgOiAnJyxcbiAgICAgICAgICBzcmM6IGljb24sXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXhcbiAgICAgICAgfSwgcmVzdCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIFN2ZyA9IGljb247XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gYXJpYS1sYWJlbCwgYXJpYS1sYWJlbGxlZGJ5LCBvciB0aXRsZSBpdCBnZXRzIGFyaWEtaGlkZGVuIHRydWVcbiAgICAgICAgdmFyIGlzQXJpYUhpZGRlbiA9ICEodGhpcy5wcm9wc1snYXJpYS1sYWJlbCddIHx8IHRoaXMucHJvcHNbJ2FyaWEtbGFiZWxsZWRieSddIHx8IHRoaXMucHJvcHMudGl0bGUpO1xuXG4gICAgICAgIC8vIElmIG5vIGFyaWEtbGFiZWwgb3IgYXJpYS1sYWJlbGxlZGJ5IGlzIHByb3ZpZGVkIGJ1dCB0aGVyZSdzIGEgdGl0bGUsIGEgdGl0bGVJZCBpcyBnZW5lcmF0ZWRcbiAgICAgICAgLy8gIFRoZSBzdmcgYXJpYS1sYWJlbGxlZGJ5IGF0dHJpYnV0ZSBnZXRzIHRoaXMgdGl0bGVJZFxuICAgICAgICAvLyAgVGhlIHN2ZyB0aXRsZSBlbGVtZW50IGdldHMgdGhpcyB0aXRsZUlkIGFzIGFuIGlkXG4gICAgICAgIHZhciB0aXRsZUlkID0gIXRoaXMucHJvcHNbJ2FyaWEtbGFiZWwnXSAmJiAhdGhpcy5wcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10gJiYgdGl0bGUgPyB7XG4gICAgICAgICAgdGl0bGVJZDogZ2VuZXJhdGVJZCgpXG4gICAgICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFN2ZywgX2V4dGVuZHMoe1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICBzdHlsZTogb3B0aW9uYWxDdXN0b21TdHlsZXMsXG4gICAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgICAgdGl0bGU6IHRpdGxlXG4gICAgICAgIH0sIHRpdGxlSWQsIHtcbiAgICAgICAgICBcImRhdGEtaWNvbi10eXBlXCI6IGljb25UaXRsZSxcbiAgICAgICAgICBcImRhdGEtaXMtbG9hZGVkXCI6IGlzTG9hZGVkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICBcImRhdGEtaXMtbG9hZGluZ1wiOiBpc0xvYWRpbmcgfHwgdW5kZWZpbmVkXG4gICAgICAgIH0sIHJlc3QsIHtcbiAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IGlzQXJpYUhpZGRlbiB8fCByZXN0WydhcmlhLWhpZGRlbiddXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbn0oUHVyZUNvbXBvbmVudCk7XG5FdWlJY29uQ2xhc3MucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBgRW51bWAgaXMgYW55IG9mIHRoZSBuYW1lZCBpY29ucyBsaXN0ZWQgaW4gdGhlIGRvY3MsIGBzdHJpbmdgIGlzIHVzdWFsbHkgYSBVUkwgdG8gYW4gU1ZHIGZpbGUsIGFuZCBgZWxlbWVudFR5cGVgIGlzIGFueSBSZWFjdCBTVkcgY29tcG9uZW50XG4gICAgICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgICAqIE9uZSBvZiBFVUkncyBjb2xvciBwYWxldHRlIG9yIGEgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jb2xvcl92YWx1ZS5cbiAgICAgICAqIE5vdGUgdGhhdCBjb2xvcmluZyBvbmx5IHdvcmtzIGlmIHlvdXIgU1ZHIGlzIHJlbW92ZWQgb2YgZmlsbCBhdHRyaWJ1dGVzLlxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIE5vdGUgdGhhdCBldmVyeSBzaXplIG90aGVyIHRoYW4gYG9yaWdpbmFsYCBhc3N1bWVzIHRoZSBwcm92aWRlZCBTVkcgc2l0cyBvbiBhIHNxdWFyZSB2aWV3Ym94LlxuICAgICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogRGVzY3JpcHRpdmUgdGl0bGUgZm9yIG5hbWluZyB0aGUgaWNvbiBiYXNlZCBvbiBpdHMgdXNlXG4gICAgICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAgICogQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHRpdGxlIGVsZW1lbnRcbiAgICAgICAqL1xuICB0aXRsZUlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgICAqIEl0cyB2YWx1ZSBzaG91bGQgYmUgb25lIG9yIG1vcmUgZWxlbWVudCBJRHNcbiAgICAgICAqL1xuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgICAqIENhbGxiYWNrIHdoZW4gdGhlIGljb24gaGFzIGJlZW4gbG9hZGVkICYgcmVuZGVyZWRcbiAgICAgICAqL1xuICBvbkljb25Mb2FkOiBQcm9wVHlwZXMuZnVuY1xufTtcbmV4cG9ydCB2YXIgRXVpSWNvbiA9IHdpdGhFdWlTdHlsZXNNZW1vaXplcihFdWlJY29uQ2xhc3MpOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIHR5cGVUb1BhdGhNYXAgPSB7XG4gIGFjY2Vzc2liaWxpdHk6ICdhY2Nlc3NpYmlsaXR5JyxcbiAgYWRkRGF0YUFwcDogJ2FwcF9hZGRfZGF0YScsXG4gIGFkdmFuY2VkU2V0dGluZ3NBcHA6ICdhcHBfYWR2YW5jZWRfc2V0dGluZ3MnLFxuICBhZ2VudEFwcDogJ2FwcF9mbGVldCcsXG4gIGFnZ3JlZ2F0ZTogJ2FnZ3JlZ2F0ZScsXG4gIGFuYWx5emVFdmVudDogJ2FuYWx5emVFdmVudCcsXG4gIGFubm90YXRpb246ICdhbm5vdGF0aW9uJyxcbiAgYW5vbWFseUNoYXJ0OiAnYW5vbWFseV9jaGFydCcsXG4gIGFub21hbHlTd2ltTGFuZTogJ2Fub21hbHlfc3dpbV9sYW5lJyxcbiAgYXBtQXBwOiAnYXBwX2FwbScsXG4gIGFwbVRyYWNlOiAnYXBtX3RyYWNlJyxcbiAgYXBwU2VhcmNoQXBwOiAnYXBwX2FwcF9zZWFyY2gnLFxuICBhcHBzOiAnYXBwcycsXG4gIGFycm93RG93bjogJ2Fycm93X2Rvd24nLFxuICBhcnJvd0xlZnQ6ICdhcnJvd19sZWZ0JyxcbiAgYXJyb3dSaWdodDogJ2Fycm93X3JpZ2h0JyxcbiAgYXJyb3dVcDogJ2Fycm93X3VwJyxcbiAgYXJyb3dTdGFydDogJ2Fycm93U3RhcnQnLFxuICBhcnJvd0VuZDogJ2Fycm93RW5kJyxcbiAgYXJ0aWNsZTogJ2FydGljbGUnLFxuICBhc3RlcmlzazogJ2FzdGVyaXNrJyxcbiAgYXQ6ICdhdCcsXG4gIGF1ZGl0YmVhdEFwcDogJ2FwcF9hdWRpdGJlYXQnLFxuICBiZWFrZXI6ICdiZWFrZXInLFxuICBiZWxsOiAnYmVsbCcsXG4gIGJlbGxTbGFzaDogJ2JlbGxTbGFzaCcsXG4gIGJldGE6ICdiZXRhJyxcbiAgYm9sdDogJ2JvbHQnLFxuICBib3hlc0hvcml6b250YWw6ICdib3hlc19ob3Jpem9udGFsJyxcbiAgYm94ZXNWZXJ0aWNhbDogJ2JveGVzX3ZlcnRpY2FsJyxcbiAgYnJhbmNoOiAnYnJhbmNoJyxcbiAgYnJhbmNoVXNlcjogJ2JyYW5jaFVzZXInLFxuICBicm9vbTogJ2Jyb29tJyxcbiAgYnJ1c2g6ICdicnVzaCcsXG4gIGJ1ZzogJ2J1ZycsXG4gIGJ1bGxzZXllOiAnYnVsbHNleWUnLFxuICBjYWxlbmRhcjogJ2NhbGVuZGFyJyxcbiAgY2FudmFzQXBwOiAnYXBwX2NhbnZhcycsXG4gIGNhc2VzQXBwOiAnYXBwX2Nhc2VzJyxcbiAgY2hhbmdlUG9pbnREZXRlY3Rpb246ICdjaGFuZ2VfcG9pbnRfZGV0ZWN0aW9uJyxcbiAgY2hlY2s6ICdjaGVjaycsXG4gIGNoZWNrSW5DaXJjbGVGaWxsZWQ6ICdjaGVja0luQ2lyY2xlRmlsbGVkJyxcbiAgY2hlZXI6ICdjaGVlcicsXG4gIGNsYXNzaWZpY2F0aW9uSm9iOiAnbWxfY2xhc3NpZmljYXRpb25fam9iJyxcbiAgY2xpY2tMZWZ0OiAnY2xpY2tMZWZ0JyxcbiAgY2xpY2tSaWdodDogJ2NsaWNrUmlnaHQnLFxuICBjbG9jazogJ2Nsb2NrJyxcbiAgY2xvY2tDb3VudGVyOiAnY2xvY2tDb3VudGVyJyxcbiAgY2xvdWREcml6emxlOiAnY2xvdWREcml6emxlJyxcbiAgY2xvdWRTdG9ybXk6ICdjbG91ZFN0b3JteScsXG4gIGNsb3VkU3Vubnk6ICdjbG91ZFN1bm55JyxcbiAgY2x1c3RlcjogJ2NsdXN0ZXInLFxuICBjb2RlQXBwOiAnYXBwX2NvZGUnLFxuICBjb2xvcjogJ2NvbG9yJyxcbiAgY29tcHV0ZTogJ2NvbXB1dGUnLFxuICBjb25zb2xlOiAnY29uc29sZScsXG4gIGNvbnNvbGVBcHA6ICdhcHBfY29uc29sZScsXG4gIGNvbnRhaW5lcjogJ2NvbnRhaW5lcicsXG4gIGNvbnRpbnVpdHlBYm92ZTogJ2NvbnRpbnVpdHlBYm92ZScsXG4gIGNvbnRpbnVpdHlBYm92ZUJlbG93OiAnY29udGludWl0eUFib3ZlQmVsb3cnLFxuICBjb250aW51aXR5QmVsb3c6ICdjb250aW51aXR5QmVsb3cnLFxuICBjb250aW51aXR5V2l0aGluOiAnY29udGludWl0eVdpdGhpbicsXG4gIGNvbnRyb2xzSG9yaXpvbnRhbDogJ2NvbnRyb2xzX2hvcml6b250YWwnLFxuICBjb250cm9sc1ZlcnRpY2FsOiAnY29udHJvbHNfdmVydGljYWwnLFxuICBjb3B5OiAnY29weScsXG4gIGNvcHlDbGlwYm9hcmQ6ICdjb3B5X2NsaXBib2FyZCcsXG4gIGNyZWF0ZUFkdmFuY2VkSm9iOiAnbWxfY3JlYXRlX2FkdmFuY2VkX2pvYicsXG4gIGNyZWF0ZU11bHRpTWV0cmljSm9iOiAnbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2InLFxuICBjcmVhdGVQb3B1bGF0aW9uSm9iOiAnbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iJyxcbiAgY3JlYXRlU2luZ2xlTWV0cmljSm9iOiAnbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iJyxcbiAgY3Jvc3M6ICdjcm9zcycsXG4gIGNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwOiAnYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24nLFxuICBjcm9zc0luQ2lyY2xlOiAnY3Jvc3NfaW5fY2lyY2xlJyxcbiAgY3Jvc3NoYWlyczogJ2Nyb3NzaGFpcnMnLFxuICBjdXJyZW5jeTogJ2N1cnJlbmN5JyxcbiAgY3V0OiAnY3V0JyxcbiAgZGFzaGJvYXJkQXBwOiAnYXBwX2Rhc2hib2FyZCcsXG4gIGRhdGFWaXN1YWxpemVyOiAnbWxfZGF0YV92aXN1YWxpemVyJyxcbiAgZGF0YWJhc2U6ICdkYXRhYmFzZScsXG4gIGRlc2t0b3A6ICdkZXNrdG9wJyxcbiAgZGV2VG9vbHNBcHA6ICdhcHBfZGV2dG9vbHMnLFxuICBkaWZmOiAnZGlmZicsXG4gIGRpc2NvdmVyQXBwOiAnYXBwX2Rpc2NvdmVyJyxcbiAgZGlzY3VzczogJ2Rpc2N1c3MnLFxuICBkb2N1bWVudDogJ2RvY3VtZW50JyxcbiAgZG9jdW1lbnRFZGl0OiAnZG9jdW1lbnRFZGl0JyxcbiAgZG9jdW1lbnRhdGlvbjogJ2RvY3VtZW50YXRpb24nLFxuICBkb2N1bWVudHM6ICdkb2N1bWVudHMnLFxuICBkb3Q6ICdkb3QnLFxuICBkb3RJbkNpcmNsZTogJ2RvdEluQ2lyY2xlJyxcbiAgZG91YmxlQXJyb3dMZWZ0OiAnZG91YmxlQXJyb3dMZWZ0JyxcbiAgZG91YmxlQXJyb3dSaWdodDogJ2RvdWJsZUFycm93UmlnaHQnLFxuICBkb3dubG9hZDogJ2Rvd25sb2FkJyxcbiAgZWRpdG9yQWxpZ25DZW50ZXI6ICdlZGl0b3JfYWxpZ25fY2VudGVyJyxcbiAgZWRpdG9yQWxpZ25MZWZ0OiAnZWRpdG9yX2FsaWduX2xlZnQnLFxuICBlZGl0b3JBbGlnblJpZ2h0OiAnZWRpdG9yX2FsaWduX3JpZ2h0JyxcbiAgZWRpdG9yQm9sZDogJ2VkaXRvcl9ib2xkJyxcbiAgZWRpdG9yQ2hlY2tsaXN0OiAnZWRpdG9yX2NoZWNrbGlzdCcsXG4gIGVkaXRvckNvZGVCbG9jazogJ2VkaXRvcl9jb2RlX2Jsb2NrJyxcbiAgZWRpdG9yQ29tbWVudDogJ2VkaXRvcl9jb21tZW50JyxcbiAgZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWw6ICdlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCcsXG4gIGVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbDogJ2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCcsXG4gIGVkaXRvckhlYWRpbmc6ICdlZGl0b3JfaGVhZGluZycsXG4gIGVkaXRvckl0YWxpYzogJ2VkaXRvcl9pdGFsaWMnLFxuICBlZGl0b3JJdGVtQWxpZ25Cb3R0b206ICdlZGl0b3JJdGVtQWxpZ25Cb3R0b20nLFxuICBlZGl0b3JJdGVtQWxpZ25DZW50ZXI6ICdlZGl0b3JJdGVtQWxpZ25DZW50ZXInLFxuICBlZGl0b3JJdGVtQWxpZ25MZWZ0OiAnZWRpdG9ySXRlbUFsaWduTGVmdCcsXG4gIGVkaXRvckl0ZW1BbGlnbk1pZGRsZTogJ2VkaXRvckl0ZW1BbGlnbk1pZGRsZScsXG4gIGVkaXRvckl0ZW1BbGlnblJpZ2h0OiAnZWRpdG9ySXRlbUFsaWduUmlnaHQnLFxuICBlZGl0b3JJdGVtQWxpZ25Ub3A6ICdlZGl0b3JJdGVtQWxpZ25Ub3AnLFxuICBlZGl0b3JMaW5rOiAnZWRpdG9yX2xpbmsnLFxuICBlZGl0b3JPcmRlcmVkTGlzdDogJ2VkaXRvcl9vcmRlcmVkX2xpc3QnLFxuICBlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQ6ICdlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQnLFxuICBlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0OiAnZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCcsXG4gIGVkaXRvclBvc2l0aW9uVG9wTGVmdDogJ2VkaXRvclBvc2l0aW9uVG9wTGVmdCcsXG4gIGVkaXRvclBvc2l0aW9uVG9wUmlnaHQ6ICdlZGl0b3JQb3NpdGlvblRvcFJpZ2h0JyxcbiAgZWRpdG9yUmVkbzogJ2VkaXRvcl9yZWRvJyxcbiAgZWRpdG9yU3RyaWtlOiAnZWRpdG9yX3N0cmlrZScsXG4gIGVkaXRvclRhYmxlOiAnZWRpdG9yX3RhYmxlJyxcbiAgZWRpdG9yVW5kZXJsaW5lOiAnZWRpdG9yX3VuZGVybGluZScsXG4gIGVkaXRvclVuZG86ICdlZGl0b3JfdW5kbycsXG4gIGVkaXRvclVub3JkZXJlZExpc3Q6ICdlZGl0b3JfdW5vcmRlcmVkX2xpc3QnLFxuICBlbWFpbDogJ2VtYWlsJyxcbiAgZW1wdHk6ICdlbXB0eScsXG4gIGVtc0FwcDogJ2FwcF9lbXMnLFxuICBlbmRwb2ludDogJ2VuZHBvaW50JyxcbiAgZXFsOiAnZXFsJyxcbiAgZXJhc2VyOiAnZXJhc2VyJyxcbiAgZXJyb3I6ICdlcnJvcicsXG4gIGVycm9yRmlsbGVkOiAnZXJyb3JGaWxsZWQnLFxuICBlc3FsVmlzOiAnZXNxbFZpcycsXG4gIGV4aXQ6ICdleGl0JyxcbiAgZXhwYW5kOiAnZXhwYW5kJyxcbiAgZXhwYW5kTWluaTogJ2V4cGFuZE1pbmknLFxuICBleHBvcnRBY3Rpb246ICdleHBvcnQnLFxuICBleWU6ICdleWUnLFxuICBleWVDbG9zZWQ6ICdleWVfY2xvc2VkJyxcbiAgZmFjZUhhcHB5OiAnZmFjZV9oYXBweScsXG4gIGZhY2VOZXV0cmFsOiAnZmFjZV9uZXV0cmFsJyxcbiAgZmFjZVNhZDogJ2ZhY2Vfc2FkJyxcbiAgZmllbGRTdGF0aXN0aWNzOiAnZmllbGRfc3RhdGlzdGljcycsXG4gIGZpbGViZWF0QXBwOiAnYXBwX2ZpbGViZWF0JyxcbiAgZmlsdGVyOiAnZmlsdGVyJyxcbiAgZmlsdGVyRXhjbHVkZTogJ2ZpbHRlckV4Y2x1ZGUnLFxuICBmaWx0ZXJJZ25vcmU6ICdmaWx0ZXJJZ25vcmUnLFxuICBmaWx0ZXJJbmNsdWRlOiAnZmlsdGVySW5jbHVkZScsXG4gIGZpbHRlckluQ2lyY2xlOiAnZmlsdGVySW5DaXJjbGUnLFxuICBmbGFnOiAnZmxhZycsXG4gIGZsZWV0QXBwOiAnYXBwX2FnZW50JyxcbiAgZm9sZDogJ2ZvbGQnLFxuICBmb2xkZXJDaGVjazogJ2ZvbGRlcl9jaGVjaycsXG4gIGZvbGRlckNsb3NlZDogJ2ZvbGRlcl9jbG9zZWQnLFxuICBmb2xkZXJFeGNsYW1hdGlvbjogJ2ZvbGRlcl9leGNsYW1hdGlvbicsXG4gIGZvbGRlck9wZW46ICdmb2xkZXJfb3BlbicsXG4gIGZyYW1lTmV4dDogJ2ZyYW1lTmV4dCcsXG4gIGZyYW1lUHJldmlvdXM6ICdmcmFtZVByZXZpb3VzJyxcbiAgZnVsbFNjcmVlbjogJ2Z1bGxfc2NyZWVuJyxcbiAgZnVsbFNjcmVlbkV4aXQ6ICdmdWxsU2NyZWVuRXhpdCcsXG4gIGZ1bmN0aW9uOiAnZnVuY3Rpb24nLFxuICBnZWFyOiAnZ2VhcicsXG4gIGdpc0FwcDogJ2FwcF9naXMnLFxuICBnbGFzc2VzOiAnZ2xhc3NlcycsXG4gIGdsb2JlOiAnZ2xvYmUnLFxuICBncmFiOiAnZ3JhYicsXG4gIGdyYWJIb3Jpem9udGFsOiAnZ3JhYl9ob3Jpem9udGFsJyxcbiAgZ3JhYk9tbmlkaXJlY3Rpb25hbDogJ2dyYWJPbW5pZGlyZWN0aW9uYWwnLFxuICBncmFkaWVudDogJ2dyYWRpZW50JyxcbiAgZ3JhcGhBcHA6ICdhcHBfZ3JhcGgnLFxuICBncmlkOiAnZ3JpZCcsXG4gIGdyb2tBcHA6ICdhcHBfZ3JvaycsXG4gIGhlYXJ0OiAnaGVhcnQnLFxuICBoZWFydGJlYXRBcHA6ICdhcHBfaGVhcnRiZWF0JyxcbiAgaGVhdG1hcDogJ2hlYXRtYXAnLFxuICBoZWxwOiAnaGVscCcsXG4gIGhvbWU6ICdob21lJyxcbiAgaUluQ2lyY2xlOiAnaUluQ2lyY2xlJyxcbiAgaW1hZ2U6ICdpbWFnZScsXG4gIGltcG9ydEFjdGlvbjogJ2ltcG9ydCcsXG4gIGluZGV4OiAnaW5kZXgnLFxuICBpbmRleENsb3NlOiAnaW5kZXhfY2xvc2UnLFxuICBpbmRleEVkaXQ6ICdpbmRleF9lZGl0JyxcbiAgaW5kZXhGbHVzaDogJ2luZGV4X2ZsdXNoJyxcbiAgaW5kZXhNYW5hZ2VtZW50QXBwOiAnYXBwX2luZGV4X21hbmFnZW1lbnQnLFxuICBpbmRleE1hcHBpbmc6ICdpbmRleF9tYXBwaW5nJyxcbiAgaW5kZXhPcGVuOiAnaW5kZXhfb3BlbicsXG4gIGluZGV4UGF0dGVybkFwcDogJ2FwcF9pbmRleF9wYXR0ZXJuJyxcbiAgaW5kZXhSb2xsdXBBcHA6ICdhcHBfaW5kZXhfcm9sbHVwJyxcbiAgaW5kZXhSdW50aW1lOiAnaW5kZXhfcnVudGltZScsXG4gIGluZGV4U2V0dGluZ3M6ICdpbmRleF9zZXR0aW5ncycsXG4gIGluZGV4VGVtcG9yYXJ5OiAnaW5kZXhUZW1wb3JhcnknLFxuICBpbmZpbml0eTogJ2luZmluaXR5JyxcbiAgaW5wdXRPdXRwdXQ6ICdpbnB1dE91dHB1dCcsXG4gIGluc3BlY3Q6ICdpbnNwZWN0JyxcbiAgaW52ZXJ0OiAnaW52ZXJ0JyxcbiAgaXA6ICdpcCcsXG4gIGtleTogJ2tleScsXG4gIGtleWJvYXJkOiAna2V5Ym9hcmQnLFxuICBrcWxGaWVsZDogJ2txbF9maWVsZCcsXG4gIGtxbEZ1bmN0aW9uOiAna3FsX2Z1bmN0aW9uJyxcbiAga3FsT3BlcmFuZDogJ2txbF9vcGVyYW5kJyxcbiAga3FsU2VsZWN0b3I6ICdrcWxfc2VsZWN0b3InLFxuICBrcWxWYWx1ZTogJ2txbF92YWx1ZScsXG4gIGt1YmVybmV0ZXNOb2RlOiAna3ViZXJuZXRlc05vZGUnLFxuICBrdWJlcm5ldGVzUG9kOiAna3ViZXJuZXRlc1BvZCcsXG4gIGxhdW5jaDogJ2xhdW5jaCcsXG4gIGxheWVyczogJ2xheWVycycsXG4gIGxlbnNBcHA6ICdhcHBfbGVucycsXG4gIGxldHRlcmluZzogJ2xldHRlcmluZycsXG4gIGxpbmVEYXNoZWQ6ICdsaW5lRGFzaGVkJyxcbiAgbGluZURvdHRlZDogJ2xpbmVEb3R0ZWQnLFxuICBsaW5lU29saWQ6ICdsaW5lU29saWQnLFxuICBsaW5rOiAnbGluaycsXG4gIGxpc3Q6ICdsaXN0JyxcbiAgbGlzdEFkZDogJ2xpc3RfYWRkJyxcbiAgbG9jazogJ2xvY2snLFxuICBsb2NrT3BlbjogJ2xvY2tPcGVuJyxcbiAgbG9nUGF0dGVybkFuYWx5c2lzOiAnbG9nX3BhdHRlcm5fYW5hbHlzaXMnLFxuICBsb2dSYXRlQW5hbHlzaXM6ICdsb2dfcmF0ZV9hbmFseXNpcycsXG4gIGxvZ29BV1M6ICdsb2dvX2F3cycsXG4gIGxvZ29BV1NNb25vOiAnbG9nb19hd3NfbW9ubycsXG4gIGxvZ29BZXJvc3Bpa2U6ICdsb2dvX2Flcm9zcGlrZScsXG4gIGxvZ29BcGFjaGU6ICdsb2dvX2FwYWNoZScsXG4gIGxvZ29BcHBTZWFyY2g6ICdsb2dvX2FwcF9zZWFyY2gnLFxuICBsb2dvQXp1cmU6ICdsb2dvX2F6dXJlJyxcbiAgbG9nb0F6dXJlTW9ubzogJ2xvZ29fYXp1cmVfbW9ubycsXG4gIGxvZ29CZWF0czogJ2xvZ29fYmVhdHMnLFxuICBsb2dvQnVzaW5lc3NBbmFseXRpY3M6ICdsb2dvX2J1c2luZXNzX2FuYWx5dGljcycsXG4gIGxvZ29DZXBoOiAnbG9nb19jZXBoJyxcbiAgbG9nb0Nsb3VkOiAnbG9nb19jbG91ZCcsXG4gIGxvZ29DbG91ZEVudGVycHJpc2U6ICdsb2dvX2Nsb3VkX2VjZScsXG4gIGxvZ29Db2RlOiAnbG9nb19jb2RlJyxcbiAgbG9nb0NvZGVzYW5kYm94OiAnbG9nb19jb2Rlc2FuZGJveCcsXG4gIGxvZ29Db3VjaGJhc2U6ICdsb2dvX2NvdWNoYmFzZScsXG4gIGxvZ29Eb2NrZXI6ICdsb2dvX2RvY2tlcicsXG4gIGxvZ29Ecm9wd2l6YXJkOiAnbG9nb19kcm9wd2l6YXJkJyxcbiAgbG9nb0VsYXN0aWM6ICdsb2dvX2VsYXN0aWMnLFxuICBsb2dvRWxhc3RpY1N0YWNrOiAnbG9nb19lbGFzdGljX3N0YWNrJyxcbiAgbG9nb0VsYXN0aWNzZWFyY2g6ICdsb2dvX2VsYXN0aWNzZWFyY2gnLFxuICBsb2dvRW50ZXJwcmlzZVNlYXJjaDogJ2xvZ29fZW50ZXJwcmlzZV9zZWFyY2gnLFxuICBsb2dvRXRjZDogJ2xvZ29fZXRjZCcsXG4gIGxvZ29HQ1A6ICdsb2dvX2djcCcsXG4gIGxvZ29HQ1BNb25vOiAnbG9nb19nY3BfbW9ubycsXG4gIGxvZ29HaXRodWI6ICdsb2dvX2dpdGh1YicsXG4gIGxvZ29HbWFpbDogJ2xvZ29fZ21haWwnLFxuICBsb2dvR29sYW5nOiAnbG9nb19nb2xhbmcnLFxuICBsb2dvR29vZ2xlRzogJ2xvZ29fZ29vZ2xlX2cnLFxuICBsb2dvSEFwcm94eTogJ2xvZ29faGFwcm94eScsXG4gIGxvZ29JQk06ICdsb2dvX2libScsXG4gIGxvZ29JQk1Nb25vOiAnbG9nb19pYm1fbW9ubycsXG4gIGxvZ29LYWZrYTogJ2xvZ29fa2Fma2EnLFxuICBsb2dvS2liYW5hOiAnbG9nb19raWJhbmEnLFxuICBsb2dvS3ViZXJuZXRlczogJ2xvZ29fa3ViZXJuZXRlcycsXG4gIGxvZ29Mb2dnaW5nOiAnbG9nb19sb2dnaW5nJyxcbiAgbG9nb0xvZ3N0YXNoOiAnbG9nb19sb2dzdGFzaCcsXG4gIGxvZ29NYXBzOiAnbG9nb19tYXBzJyxcbiAgbG9nb01lbWNhY2hlZDogJ2xvZ29fbWVtY2FjaGVkJyxcbiAgbG9nb01ldHJpY3M6ICdsb2dvX21ldHJpY3MnLFxuICBsb2dvTW9uZ29kYjogJ2xvZ29fbW9uZ29kYicsXG4gIGxvZ29NeVNRTDogJ2xvZ29fbXlzcWwnLFxuICBsb2dvTmdpbng6ICdsb2dvX25naW54JyxcbiAgbG9nb09ic2VydmFiaWxpdHk6ICdsb2dvX29ic2VydmFiaWxpdHknLFxuICBsb2dvT3NxdWVyeTogJ2xvZ29fb3NxdWVyeScsXG4gIGxvZ29QaHA6ICdsb2dvX3BocCcsXG4gIGxvZ29Qb3N0Z3JlczogJ2xvZ29fcG9zdGdyZXMnLFxuICBsb2dvUHJvbWV0aGV1czogJ2xvZ29fcHJvbWV0aGV1cycsXG4gIGxvZ29SYWJiaXRtcTogJ2xvZ29fcmFiYml0bXEnLFxuICBsb2dvUmVkaXM6ICdsb2dvX3JlZGlzJyxcbiAgbG9nb1NlY3VyaXR5OiAnbG9nb19zZWN1cml0eScsXG4gIGxvZ29TaXRlU2VhcmNoOiAnbG9nb19zaXRlX3NlYXJjaCcsXG4gIGxvZ29Ta2V0Y2g6ICdsb2dvX3NrZXRjaCcsXG4gIGxvZ29TbGFjazogJ2xvZ29fc2xhY2snLFxuICBsb2dvVXB0aW1lOiAnbG9nb191cHRpbWUnLFxuICBsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnQ6ICdsb2dvX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudCcsXG4gIGxvZ29XZWJob29rOiAnbG9nb193ZWJob29rJyxcbiAgbG9nb1dpbmRvd3M6ICdsb2dvX3dpbmRvd3MnLFxuICBsb2dvV29ya3BsYWNlU2VhcmNoOiAnbG9nb193b3JrcGxhY2Vfc2VhcmNoJyxcbiAgbG9nc0FwcDogJ2FwcF9sb2dzJyxcbiAgbG9nc3Rhc2hGaWx0ZXI6ICdsb2dzdGFzaF9maWx0ZXInLFxuICBsb2dzdGFzaElmOiAnbG9nc3Rhc2hfaWYnLFxuICBsb2dzdGFzaElucHV0OiAnbG9nc3Rhc2hfaW5wdXQnLFxuICBsb2dzdGFzaE91dHB1dDogJ2xvZ3N0YXNoX291dHB1dCcsXG4gIGxvZ3N0YXNoUXVldWU6ICdsb2dzdGFzaF9xdWV1ZScsXG4gIG1hY2hpbmVMZWFybmluZ0FwcDogJ2FwcF9tbCcsXG4gIG1hZ25ldDogJ21hZ25ldCcsXG4gIG1hZ25pZnlXaXRoRXhjbGFtYXRpb246ICdtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uJyxcbiAgbWFnbmlmeVdpdGhNaW51czogJ21hZ25pZnlXaXRoTWludXMnLFxuICBtYWduaWZ5V2l0aFBsdXM6ICdtYWduaWZ5V2l0aFBsdXMnLFxuICBtYW5hZ2VtZW50QXBwOiAnYXBwX21hbmFnZW1lbnQnLFxuICBtYXBNYXJrZXI6ICdtYXBfbWFya2VyJyxcbiAgbWVtb3J5OiAnbWVtb3J5JyxcbiAgbWVudTogJ21lbnUnLFxuICBtZW51RG93bjogJ21lbnVEb3duJyxcbiAgbWVudUxlZnQ6ICdtZW51TGVmdCcsXG4gIG1lbnVSaWdodDogJ21lbnVSaWdodCcsXG4gIG1lbnVVcDogJ21lbnVVcCcsXG4gIG1lcmdlOiAnbWVyZ2UnLFxuICBtZXRyaWNiZWF0QXBwOiAnYXBwX21ldHJpY2JlYXQnLFxuICBtZXRyaWNzQXBwOiAnYXBwX21ldHJpY3MnLFxuICBtaW5pbWl6ZTogJ21pbmltaXplJyxcbiAgbWludXM6ICdtaW51cycsXG4gIG1pbnVzSW5DaXJjbGU6ICdtaW51c19pbl9jaXJjbGUnLFxuICBtaW51c0luQ2lyY2xlRmlsbGVkOiAnbWludXNfaW5fY2lyY2xlX2ZpbGxlZCcsXG4gIG1pbnVzSW5TcXVhcmU6ICdtaW51c19pbl9zcXVhcmUnLFxuICBtb2JpbGU6ICdtb2JpbGUnLFxuICBtb25pdG9yaW5nQXBwOiAnYXBwX21vbml0b3JpbmcnLFxuICBtb29uOiAnbW9vbicsXG4gIG1vdmU6ICdtb3ZlJyxcbiAgbmFtZXNwYWNlOiAnbmFtZXNwYWNlJyxcbiAgbmVzdGVkOiAnbmVzdGVkJyxcbiAgbmV3Q2hhdDogJ25ld19jaGF0JyxcbiAgbm9kZTogJ25vZGUnLFxuICBub3RlYm9va0FwcDogJ2FwcF9ub3RlYm9vaycsXG4gIG51bWJlcjogJ251bWJlcicsXG4gIG9mZmxpbmU6ICdvZmZsaW5lJyxcbiAgb25saW5lOiAnb25saW5lJyxcbiAgb3V0bGllckRldGVjdGlvbkpvYjogJ21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYicsXG4gIHBhY2thZ2U6ICdwYWNrYWdlJyxcbiAgcGFja2V0YmVhdEFwcDogJ2FwcF9wYWNrZXRiZWF0JyxcbiAgcGFnZVNlbGVjdDogJ3BhZ2VTZWxlY3QnLFxuICBwYWdlc1NlbGVjdDogJ3BhZ2VzU2VsZWN0JyxcbiAgcGFsZXR0ZTogJ3BhbGV0dGUnLFxuICBwYXBlckNsaXA6ICdwYXBlcl9jbGlwJyxcbiAgcGFydGlhbDogJ3BhcnRpYWwnLFxuICBwYXVzZTogJ3BhdXNlJyxcbiAgcGF5bWVudDogJ3BheW1lbnQnLFxuICBwZW5jaWw6ICdwZW5jaWwnLFxuICBwZXJjZW50OiAncGVyY2VudCcsXG4gIHBpbjogJ3BpbicsXG4gIHBpbkZpbGxlZDogJ3Bpbl9maWxsZWQnLFxuICBwaXBlQnJlYWtzOiAncGlwZUJyZWFrcycsXG4gIHBpcGVsaW5lQXBwOiAnYXBwX3BpcGVsaW5lJyxcbiAgcGlwZU5vQnJlYWtzOiAncGlwZU5vQnJlYWtzJyxcbiAgcGl2b3Q6ICdwaXZvdCcsXG4gIHBsYXk6ICdwbGF5JyxcbiAgcGxheUZpbGxlZDogJ3BsYXlGaWxsZWQnLFxuICBwbHVzOiAncGx1cycsXG4gIHBsdXNJbkNpcmNsZTogJ3BsdXNfaW5fY2lyY2xlJyxcbiAgcGx1c0luQ2lyY2xlRmlsbGVkOiAncGx1c19pbl9jaXJjbGVfZmlsbGVkJyxcbiAgcGx1c0luU3F1YXJlOiAncGx1c19pbl9zcXVhcmUnLFxuICBwb3BvdXQ6ICdwb3BvdXQnLFxuICBwdXNoOiAncHVzaCcsXG4gIHF1ZXN0aW9uSW5DaXJjbGU6ICdxdWVzdGlvbl9pbl9jaXJjbGUnLFxuICBxdW90ZTogJ3F1b3RlJyxcbiAgcmVjZW50bHlWaWV3ZWRBcHA6ICdhcHBfcmVjZW50bHlfdmlld2VkJyxcbiAgcmVmcmVzaDogJ3JlZnJlc2gnLFxuICByZWdyZXNzaW9uSm9iOiAnbWxfcmVncmVzc2lvbl9qb2InLFxuICByZXBvcnRlcjogJ3JlcG9ydGVyJyxcbiAgcmVwb3J0aW5nQXBwOiAnYXBwX3JlcG9ydGluZycsXG4gIHJldHVybktleTogJ3JldHVybl9rZXknLFxuICBzYXZlOiAnc2F2ZScsXG4gIHNhdmVkT2JqZWN0c0FwcDogJ2FwcF9zYXZlZF9vYmplY3RzJyxcbiAgc2NhbGU6ICdzY2FsZScsXG4gIHNlYXJjaDogJ3NlYXJjaCcsXG4gIHNlYXJjaFByb2ZpbGVyQXBwOiAnYXBwX3NlYXJjaF9wcm9maWxlcicsXG4gIHNlY3VyaXR5QW5hbHl0aWNzQXBwOiAnYXBwX3NlY3VyaXR5X2FuYWx5dGljcycsXG4gIHNlY3VyaXR5QXBwOiAnYXBwX3NlY3VyaXR5JyxcbiAgc2VjdXJpdHlTaWduYWw6ICdzZWN1cml0eVNpZ25hbCcsXG4gIHNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQ6ICdzZWN1cml0eVNpZ25hbERldGVjdGVkJyxcbiAgc2VjdXJpdHlTaWduYWxSZXNvbHZlZDogJ3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQnLFxuICBzZXNzaW9uVmlld2VyOiAnc2Vzc2lvblZpZXdlcicsXG4gIHNoYXJkOiAnc2hhcmQnLFxuICBzaGFyZTogJ3NoYXJlJyxcbiAgc2luZ2xlTWV0cmljVmlld2VyOiAnc2luZ2xlX21ldHJpY192aWV3ZXInLFxuICBzbm93Zmxha2U6ICdzbm93Zmxha2UnLFxuICBzb3J0QXNjZW5kaW5nOiAnc29ydEFzY2VuZGluZycsXG4gIHNvcnREZXNjZW5kaW5nOiAnc29ydERlc2NlbmRpbmcnLFxuICBzb3J0RG93bjogJ3NvcnRfZG93bicsXG4gIHNvcnRMZWZ0OiAnc29ydExlZnQnLFxuICBzb3J0UmlnaHQ6ICdzb3J0UmlnaHQnLFxuICBzb3J0VXA6ICdzb3J0X3VwJyxcbiAgc29ydGFibGU6ICdzb3J0YWJsZScsXG4gIHNwYWNlczogJ3NwYWNlcycsXG4gIHNwYWNlc0FwcDogJ2FwcF9zcGFjZXMnLFxuICBzcGFya2xlczogJ3NwYXJrbGVzJyxcbiAgc3FsQXBwOiAnYXBwX3NxbCcsXG4gIHN0YXJFbXB0eTogJ3N0YXJfZW1wdHknLFxuICBzdGFyRW1wdHlTcGFjZTogJ3N0YXJfZW1wdHlfc3BhY2UnLFxuICBzdGFyRmlsbGVkOiAnc3Rhcl9maWxsZWQnLFxuICBzdGFyRmlsbGVkU3BhY2U6ICdzdGFyX2ZpbGxlZF9zcGFjZScsXG4gIHN0YXJNaW51c0VtcHR5OiAnc3Rhcl9taW51c19lbXB0eScsXG4gIHN0YXJNaW51c0ZpbGxlZDogJ3N0YXJfbWludXNfZmlsbGVkJyxcbiAgc3RhclBsdXNFbXB0eTogJ3N0YXJQbHVzRW1wdHknLFxuICBzdGFyUGx1c0ZpbGxlZDogJ3N0YXJQbHVzRmlsbGVkJyxcbiAgc3RhdHM6ICdzdGF0cycsXG4gIHN0b3A6ICdzdG9wJyxcbiAgc3RvcEZpbGxlZDogJ3N0b3BfZmlsbGVkJyxcbiAgc3RvcFNsYXNoOiAnc3RvcF9zbGFzaCcsXG4gIHN0b3JhZ2U6ICdzdG9yYWdlJyxcbiAgc3RyaW5nOiAnc3RyaW5nJyxcbiAgc3VibW9kdWxlOiAnc3VibW9kdWxlJyxcbiAgc3VuOiAnc3VuJyxcbiAgc3dhdGNoSW5wdXQ6ICdzd2F0Y2hfaW5wdXQnLFxuICAvLyBVbmRvY3VtZW50ZWQgb24gcHVycG9zZS4gSGFzIGFuIGV4dHJhIHN0cm9rZSBmb3IgRXVpQ29sb3JQaWNrZXJcbiAgc3ltbGluazogJ3N5bWxpbmsnLFxuICB0YWJsZURlbnNpdHlDb21wYWN0OiAndGFibGVfZGVuc2l0eV9jb21wYWN0JyxcbiAgdGFibGVEZW5zaXR5RXhwYW5kZWQ6ICd0YWJsZV9kZW5zaXR5X2V4cGFuZGVkJyxcbiAgdGFibGVEZW5zaXR5Tm9ybWFsOiAndGFibGVfZGVuc2l0eV9ub3JtYWwnLFxuICB0YWJsZU9mQ29udGVudHM6ICd0YWJsZU9mQ29udGVudHMnLFxuICB0YWc6ICd0YWcnLFxuICB0ZWFyOiAndGVhcicsXG4gIHRlbXBlcmF0dXJlOiAndGVtcGVyYXR1cmUnLFxuICB0aW1lbGluZTogJ3RpbWVsaW5lJyxcbiAgdGltZWxpbmVXaXRoQXJyb3c6ICd0aW1lbGluZVdpdGhBcnJvdycsXG4gIHRpbWVsaW9uQXBwOiAnYXBwX3RpbWVsaW9uJyxcbiAgdGltZVJlZnJlc2g6ICd0aW1lUmVmcmVzaCcsXG4gIHRpbWVzbGlkZXI6ICd0aW1lc2xpZGVyJyxcbiAgdHJhaW5pbmc6ICd0cmFpbmluZycsXG4gIHRyYW5zaXRpb25MZWZ0SW46ICd0cmFuc2l0aW9uTGVmdEluJyxcbiAgdHJhbnNpdGlvbkxlZnRPdXQ6ICd0cmFuc2l0aW9uTGVmdE91dCcsXG4gIHRyYW5zaXRpb25Ub3BJbjogJ3RyYW5zaXRpb25Ub3BJbicsXG4gIHRyYW5zaXRpb25Ub3BPdXQ6ICd0cmFuc2l0aW9uVG9wT3V0JyxcbiAgdHJhc2g6ICd0cmFzaCcsXG4gIHVuZm9sZDogJ3VuZm9sZCcsXG4gIHVubGluazogJ3VubGluaycsXG4gIHVwZ3JhZGVBc3Npc3RhbnRBcHA6ICdhcHBfdXBncmFkZV9hc3Npc3RhbnQnLFxuICB1cHRpbWVBcHA6ICdhcHBfdXB0aW1lJyxcbiAgdXNlcjogJ3VzZXInLFxuICB1c2VyQXZhdGFyOiAndXNlckF2YXRhcicsXG4gIHVzZXJzOiAndXNlcnMnLFxuICB1c2Vyc1JvbGVzQXBwOiAnYXBwX3VzZXJzX3JvbGVzJyxcbiAgdmVjdG9yOiAndmVjdG9yJyxcbiAgdmlkZW9QbGF5ZXI6ICd2aWRlb1BsYXllcicsXG4gIHZpc0FyZWE6ICd2aXNfYXJlYScsXG4gIHZpc0FyZWFTdGFja2VkOiAndmlzX2FyZWFfc3RhY2tlZCcsXG4gIHZpc0Jhckhvcml6b250YWw6ICd2aXNfYmFyX2hvcml6b250YWwnLFxuICB2aXNCYXJIb3Jpem9udGFsU3RhY2tlZDogJ3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJyxcbiAgdmlzQmFyVmVydGljYWw6ICd2aXNfYmFyX3ZlcnRpY2FsJyxcbiAgdmlzQmFyVmVydGljYWxTdGFja2VkOiAndmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkJyxcbiAgdmlzR2F1Z2U6ICd2aXNfZ2F1Z2UnLFxuICB2aXNHb2FsOiAndmlzX2dvYWwnLFxuICB2aXNMaW5lOiAndmlzX2xpbmUnLFxuICB2aXNNYXBDb29yZGluYXRlOiAndmlzX21hcF9jb29yZGluYXRlJyxcbiAgdmlzTWFwUmVnaW9uOiAndmlzX21hcF9yZWdpb24nLFxuICB2aXNNZXRyaWM6ICd2aXNfbWV0cmljJyxcbiAgdmlzUGllOiAndmlzX3BpZScsXG4gIHZpc1RhYmxlOiAndmlzX3RhYmxlJyxcbiAgdmlzVGFnQ2xvdWQ6ICd2aXNfdGFnX2Nsb3VkJyxcbiAgdmlzVGV4dDogJ3Zpc190ZXh0JyxcbiAgdmlzVGltZWxpb246ICd2aXNfdGltZWxpb24nLFxuICB2aXNWZWdhOiAndmlzX3ZlZ2EnLFxuICB2aXNWaXN1YWxCdWlsZGVyOiAndmlzX3Zpc3VhbF9idWlsZGVyJyxcbiAgdmlzdWFsaXplQXBwOiAnYXBwX3Zpc3VhbGl6ZScsXG4gIHZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwOiAnYXBwX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudCcsXG4gIHdhcm5pbmc6ICd3YXJuaW5nJyxcbiAgd2FybmluZ0ZpbGxlZDogJ3dhcm5pbmdGaWxsZWQnLFxuICBhbGVydDogJ3dhcm5pbmcnLFxuICAvLyBOT1RFOiBUaGlzIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcyBmb3IgYHdhcm5pbmdgLCBhZGRlZCBmb3IgbGVnYWN5IGNvbXBhdGFiaWxpdHkgd2l0aCBFbGFzdGljIENoYXJ0c1xuICB3YXRjaGVzQXBwOiAnYXBwX3dhdGNoZXMnLFxuICB3b3JkV3JhcDogJ3dvcmRXcmFwJyxcbiAgd29yZFdyYXBEaXNhYmxlZDogJ3dvcmRXcmFwRGlzYWJsZWQnLFxuICB3b3JrcGxhY2VTZWFyY2hBcHA6ICdhcHBfd29ya3BsYWNlX3NlYXJjaCcsXG4gIHdyZW5jaDogJ3dyZW5jaCcsXG4gIC8vIFRva2VuIEljb24gSW1wb3J0c1xuICB0b2tlbkFsaWFzOiAndG9rZW5BbGlhcycsXG4gIHRva2VuQW5ub3RhdGlvbjogJ3Rva2VuQW5ub3RhdGlvbicsXG4gIHRva2VuQXJyYXk6ICd0b2tlbkFycmF5JyxcbiAgdG9rZW5CaW5hcnk6ICd0b2tlbkJpbmFyeScsXG4gIHRva2VuQm9vbGVhbjogJ3Rva2VuQm9vbGVhbicsXG4gIHRva2VuQ2xhc3M6ICd0b2tlbkNsYXNzJyxcbiAgdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyOiAndG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyJyxcbiAgdG9rZW5Db25zdGFudDogJ3Rva2VuQ29uc3RhbnQnLFxuICB0b2tlbkRhdGU6ICd0b2tlbkRhdGUnLFxuICB0b2tlbkRpbWVuc2lvbjogJ3Rva2VuRGltZW5zaW9uJyxcbiAgdG9rZW5FbGVtZW50OiAndG9rZW5FbGVtZW50JyxcbiAgdG9rZW5FbnVtOiAndG9rZW5FbnVtJyxcbiAgdG9rZW5FbnVtTWVtYmVyOiAndG9rZW5FbnVtTWVtYmVyJyxcbiAgdG9rZW5FdmVudDogJ3Rva2VuRXZlbnQnLFxuICB0b2tlbkV4Y2VwdGlvbjogJ3Rva2VuRXhjZXB0aW9uJyxcbiAgdG9rZW5GaWVsZDogJ3Rva2VuRmllbGQnLFxuICB0b2tlbkZpbGU6ICd0b2tlbkZpbGUnLFxuICB0b2tlbkZsYXR0ZW5lZDogJ3Rva2VuRmxhdHRlbmVkJyxcbiAgdG9rZW5GdW5jdGlvbjogJ3Rva2VuRnVuY3Rpb24nLFxuICB0b2tlbkdlbzogJ3Rva2VuR2VvJyxcbiAgdG9rZW5IaXN0b2dyYW06ICd0b2tlbkhpc3RvZ3JhbScsXG4gIHRva2VuSW50ZXJmYWNlOiAndG9rZW5JbnRlcmZhY2UnLFxuICB0b2tlbklQOiAndG9rZW5JUCcsXG4gIHRva2VuSm9pbjogJ3Rva2VuSm9pbicsXG4gIHRva2VuS2V5OiAndG9rZW5LZXknLFxuICB0b2tlbktleXdvcmQ6ICd0b2tlbktleXdvcmQnLFxuICB0b2tlbk1ldGhvZDogJ3Rva2VuTWV0aG9kJyxcbiAgdG9rZW5NZXRyaWNDb3VudGVyOiAndG9rZW5NZXRyaWNDb3VudGVyJyxcbiAgdG9rZW5NZXRyaWNHYXVnZTogJ3Rva2VuTWV0cmljR2F1Z2UnLFxuICB0b2tlbk1vZHVsZTogJ3Rva2VuTW9kdWxlJyxcbiAgdG9rZW5OYW1lc3BhY2U6ICd0b2tlbk5hbWVzcGFjZScsXG4gIHRva2VuTmVzdGVkOiAndG9rZW5OZXN0ZWQnLFxuICB0b2tlbk51bGw6ICd0b2tlbk51bGwnLFxuICB0b2tlbk51bWJlcjogJ3Rva2VuTnVtYmVyJyxcbiAgdG9rZW5PYmplY3Q6ICd0b2tlbk9iamVjdCcsXG4gIHRva2VuT3BlcmF0b3I6ICd0b2tlbk9wZXJhdG9yJyxcbiAgdG9rZW5QYWNrYWdlOiAndG9rZW5QYWNrYWdlJyxcbiAgdG9rZW5QYXJhbWV0ZXI6ICd0b2tlblBhcmFtZXRlcicsXG4gIHRva2VuUGVyY29sYXRvcjogJ3Rva2VuUGVyY29sYXRvcicsXG4gIHRva2VuUHJvcGVydHk6ICd0b2tlblByb3BlcnR5JyxcbiAgdG9rZW5SYW5nZTogJ3Rva2VuUmFuZ2UnLFxuICB0b2tlblJhbmtGZWF0dXJlOiAndG9rZW5SYW5rRmVhdHVyZScsXG4gIHRva2VuUmFua0ZlYXR1cmVzOiAndG9rZW5SYW5rRmVhdHVyZXMnLFxuICB0b2tlblJlcG86ICd0b2tlblJlcG8nLFxuICB0b2tlblNlYXJjaFR5cGU6ICd0b2tlblNlYXJjaFR5cGUnLFxuICB0b2tlblNlbWFudGljVGV4dDogJ3Rva2VuU2VtYW50aWNUZXh0JyxcbiAgdG9rZW5TaGFwZTogJ3Rva2VuU2hhcGUnLFxuICB0b2tlblN0cmluZzogJ3Rva2VuU3RyaW5nJyxcbiAgdG9rZW5TdHJ1Y3Q6ICd0b2tlblN0cnVjdCcsXG4gIHRva2VuU3ltYm9sOiAndG9rZW5TeW1ib2wnLFxuICB0b2tlblRhZzogJ3Rva2VuVGFnJyxcbiAgdG9rZW5UZXh0OiAndG9rZW5UZXh0JyxcbiAgdG9rZW5Ub2tlbkNvdW50OiAndG9rZW5Ub2tlbkNvdW50JyxcbiAgdG9rZW5WYXJpYWJsZTogJ3Rva2VuVmFyaWFibGUnLFxuICB0b2tlblZlY3RvckRlbnNlOiAndG9rZW5WZWN0b3JEZW5zZScsXG4gIHRva2VuRGVuc2VWZWN0b3I6ICd0b2tlblZlY3RvckRlbnNlJyxcbiAgLy8gTk9URTogVGhpcyBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMgZm9yIGB0b2tlblZlY3RvckRlbnNlYCwgYWRkZWQgZm9yIGxlZ2FjeSBjb21wYXRhYmlsaXR5XG4gIHRva2VuVmVjdG9yU3BhcnNlOiAndG9rZW5WZWN0b3JTcGFyc2UnXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJ3JlYWN0LWRvbSc7XG52YXIgX3F1ZXVlID0gW107XG5mdW5jdGlvbiBwcm9jZXNzUXVldWUoKSB7XG4gIC8vIHRoZSBxdWV1ZWQgZnVuY3Rpb25zIHRyaWdnZXIgcmVhY3Qgc2V0U3RhdGVzIHdoaWNoLCBpZiB1bmJhdGNoZWQsXG4gIC8vIGVhY2ggY2F1c2UgYSBmdWxsIHVwZGF0ZS0+cmVuZGVyLT5kb20gcGFzcyBfcGVyIGZ1bmN0aW9uX1xuICAvLyBpbnN0ZWFkLCB0ZWxsIFJlYWN0IHRvIHdhaXQgdW50aWwgYWxsIHVwZGF0ZXMgYXJlIGZpbmlzaGVkIGJlZm9yZSByZS1yZW5kZXJpbmdcbiAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3F1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBfcXVldWVbaV0oKTtcbiAgICB9XG4gICAgX3F1ZXVlLmxlbmd0aCA9IDA7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVucXVldWVTdGF0ZUNoYW5nZShmbikge1xuICBpZiAoX3F1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHNldFRpbWVvdXQocHJvY2Vzc1F1ZXVlKTtcbiAgfVxuICBfcXVldWUucHVzaChmbik7XG59IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgQ09MT1JTID0gWydkZWZhdWx0JywgJ3ByaW1hcnknLCAnc3VjY2VzcycsICdhY2NlbnQnLCAnd2FybmluZycsICdkYW5nZXInLCAndGV4dCcsICdzdWJkdWVkJywgJ2dob3N0JywgJ2luaGVyaXQnXTtcbmV4cG9ydCBmdW5jdGlvbiBpc05hbWVkQ29sb3IobmFtZSkge1xuICByZXR1cm4gQ09MT1JTLmluY2x1ZGVzKG5hbWUpO1xufSIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0O1xuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChlLCB0KSB7IHJldHVybiB0IHx8ICh0ID0gZS5zbGljZSgwKSksIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUodCkgfSB9KSk7IH1cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcywga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbFNpemVDU1MsIGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGljb25Mb2FkaW5nT3BhY2l0eSA9IDAuMDU7XG52YXIgaWNvbkxvYWRpbmcgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgMCUge1xcbiAgICBvcGFjaXR5OiBcIiwgXCI7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG5cIl0pKSwgaWNvbkxvYWRpbmdPcGFjaXR5KTtcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIm5qZDc0OS1sb2dvRWxhc3RpY091dGxpbmVcIixcbiAgc3R5bGVzOiBcIipbZmlsbF17ZmlsbDpub25lIWltcG9ydGFudDt9Lm91dGxpbmV7ZmlsbDpjdXJyZW50Q29sb3IhaW1wb3J0YW50O307bGFiZWw6bG9nb0VsYXN0aWNPdXRsaW5lO1wiXG59IDoge1xuICBuYW1lOiBcIm5qZDc0OS1sb2dvRWxhc3RpY091dGxpbmVcIixcbiAgc3R5bGVzOiBcIipbZmlsbF17ZmlsbDpub25lIWltcG9ydGFudDt9Lm91dGxpbmV7ZmlsbDpjdXJyZW50Q29sb3IhaW1wb3J0YW50O307bGFiZWw6bG9nb0VsYXN0aWNPdXRsaW5lO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIlxufSA6IHtcbiAgbmFtZTogXCJ1YWNqYzUtaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiY29sb3I6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUljb25TdHlsZXMgPSBmdW5jdGlvbiBldWlJY29uU3R5bGVzKF9yZWYzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJY29uOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDpjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLCAwKTsuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYXJrZXN0U2hhZGUsIFwiO307bGFiZWw6ZXVpSWNvbjtcIiksXG4gICAgLy8gQ29sb3JzXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0LCBcIjs7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhbmdlclRleHQsIFwiOztsYWJlbDpkYW5nZXI7XCIpLFxuICAgIGdob3N0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7KltmaWxsXSwuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOmdob3N0O1wiKSxcbiAgICBwcmltYXJ5OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7O2xhYmVsOnByaW1hcnk7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1Y2Nlc3NUZXh0LCBcIjs7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQsIFwiOztsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICB0ZXh0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50aXRsZSwgXCI7KltmaWxsXSwuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOnRleHQ7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLndhcm5pbmdUZXh0LCBcIjs7bGFiZWw6d2FybmluZztcIiksXG4gICAgaW5oZXJpdDogX3JlZjIsXG4gICAgZGVmYXVsdDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpkZWZhdWx0O1wiKSxcbiAgICBjdXN0b21Db2xvcjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpjdXN0b21Db2xvcjtcIiksXG4gICAgbG9nb0VsYXN0aWNPdXRsaW5lOiBfcmVmLFxuICAgIC8vIFNpemVzXG4gICAgb3JpZ2luYWw6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6b3JpZ2luYWw7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1MoZXVpVGhlbWUuc2l6ZS5tKSwgXCI7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhldWlUaGVtZS5zaXplLmJhc2UpLCBcIjtsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGV1aVRoZW1lLnNpemUubCksIFwiO2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGV1aVRoZW1lLnNpemUueGwpLCBcIjtsYWJlbDp4bDtcIiksXG4gICAgeHhsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGV1aVRoZW1lLnNpemUueHhsKSwgXCI7bGFiZWw6eHhsO1wiKSxcbiAgICAvLyBWYXJpYW50c1xuICAgIC8vIEFwcCBpY29ucyBhcmUgdHdvLXRvbmVkLiBUaGlzIHByb3ZpZGVzIHRoZSBiYXNlIGNvbG9yLlxuICAgIGFwcDogLyojX19QVVJFX18qL2NzcyhcImZpbGw6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjsuZXVpSWNvbl9fZmlsbFNlY29uZGFyeXtmaWxsOlwiLCBldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQsIFwiO307bGFiZWw6YXBwO1wiKSxcbiAgICBsb2dvOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmxvZ287XCIpLFxuICAgIC8vIExvYWRpbmcgc3RhdGVzXG4gICAgaXNMb2FkaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwib3BhY2l0eTpcIiwgaWNvbkxvYWRpbmdPcGFjaXR5LCBcIjtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcjtib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLCBcIjs7bGFiZWw6aXNMb2FkaW5nO1wiKSxcbiAgICBpc0xvYWRlZDogLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInthbmltYXRpb246XCIsIGljb25Mb2FkaW5nLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLm5vcm1hbCwgXCIgZWFzZS1pbiAwcyAxIGZvcndhcmRzO307bGFiZWw6aXNMb2FkZWQ7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aUkxOG5Db25zdW1lciB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgSTE4bkNvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L2NvbnRleHQnO1xuaW1wb3J0IHsgcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW4gfSBmcm9tICcuL2kxOG5fdXRpbCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZnVuY3Rpb24gZXJyb3JPbk1pc3NpbmdWYWx1ZXModG9rZW4pIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiSTE4biBtYXBwaW5nIGZvciB0b2tlbiBcXFwiXCIuY29uY2F0KHRva2VuLCBcIlxcXCIgaXMgYSBmb3JtYXR0aW5nIGZ1bmN0aW9uIGJ1dCBubyB2YWx1ZXMgd2VyZSBwcm92aWRlZC5cIikpO1xufVxuZnVuY3Rpb24gbG9va3VwVG9rZW4ob3B0aW9ucykge1xuICB2YXIgdG9rZW4gPSBvcHRpb25zLnRva2VuLFxuICAgIGkxOG5NYXBwaW5nID0gb3B0aW9ucy5pMThuTWFwcGluZyxcbiAgICB2YWx1ZURlZmF1bHQgPSBvcHRpb25zLnZhbHVlRGVmYXVsdCxcbiAgICBpMThuTWFwcGluZ0Z1bmMgPSBvcHRpb25zLmkxOG5NYXBwaW5nRnVuYyxcbiAgICB2YWx1ZXMgPSBvcHRpb25zLnZhbHVlcyxcbiAgICByZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgdmFyIHJlbmRlcmFibGUgPSBpMThuTWFwcGluZyAmJiBpMThuTWFwcGluZ1t0b2tlbl0gfHwgdmFsdWVEZWZhdWx0O1xuICBpZiAodHlwZW9mIHJlbmRlcmFibGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAodmFsdWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBlcnJvck9uTWlzc2luZ1ZhbHVlcyh0b2tlbik7XG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmUgVHlwZVNjcmlwdCBjb21wbGFpbnMgdGhhdCBgREVGQVVMVGAgZG9lc24ndCBoYXZlIGEgY2FsbCBzaWduYXR1cmUgYnV0IHdlIHZlcmlmaWVkIGByZW5kZXJhYmxlYCBpcyBhIGZ1bmN0aW9uXG4gICAgdmFyIHJlbmRlcmVkID0gcmVuZGVyYWJsZSh2YWx1ZXMpO1xuICAgIHJldHVybiBpMThuTWFwcGluZ0Z1bmMgJiYgdHlwZW9mIHJlbmRlcmVkID09PSAnc3RyaW5nJyA/IGkxOG5NYXBwaW5nRnVuYyhyZW5kZXJlZCkgOiByZW5kZXJlZDtcbiAgfSBlbHNlIGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVuZGVyYWJsZSAhPT0gJ3N0cmluZycpIHtcbiAgICBpZiAoaTE4bk1hcHBpbmdGdW5jICYmIHR5cGVvZiB2YWx1ZURlZmF1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZW5kZXJhYmxlID0gaTE4bk1hcHBpbmdGdW5jKHZhbHVlRGVmYXVsdCk7XG4gICAgfVxuICAgIC8vIHRoZXJlJ3MgYSBob2xlIGluIHRoZSB0eXBpbmdzIGhlcmUgYXMgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgaTE4bk1hcHBpbmdGdW5jXG4gICAgLy8gcmV0dXJuZWQgdGhlIHNhbWUgdHlwZSBvZiB0aGUgZGVmYXVsdCB2YWx1ZSwgYnV0IHdlIG5lZWQgdG8ga2VlcCB0aGF0IGFzc3VtcHRpb25cbiAgICByZXR1cm4gcmVuZGVyYWJsZTtcbiAgfVxuICB2YXIgY2hpbGRyZW4gPSBwcm9jZXNzU3RyaW5nVG9DaGlsZHJlbihyZW5kZXJhYmxlLCB2YWx1ZXMsIGkxOG5NYXBwaW5nRnVuYyk7XG4gIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gbGlrZXdpc2UsIGBwcm9jZXNzU3RyaW5nVG9DaGlsZHJlbmAgcmV0dXJucyBhIHN0cmluZyBvciBSZWFjdENoaWxkW10gZGVwZW5kaW5nIG9uXG4gICAgLy8gdGhlIHR5cGUgb2YgYHZhbHVlc2AsIHNvIHdlIHdpbGwgbWFrZSB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBkZWZhdWx0IHZhbHVlIGlzIGNvcnJlY3QuXG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG4gIHZhciBDb21wb25lbnQgPSByZW5kZXIgPyByZW5kZXIoY2hpbGRyZW4pIDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBjaGlsZHJlbik7XG4gIH07XG5cbiAgLy8gc2FtZSByZWFzb25zIGFzIGFib3ZlLCB3ZSBjYW4ndCBwcm9taXNlIHRoZSB0cmFuc2Zvcm1zIG1hdGNoIHRoZSBkZWZhdWx0J3MgdHlwZVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCB2YWx1ZXMpO1xufVxuZnVuY3Rpb24gaXNJMThuVG9rZW5zU2hhcGUoeCkge1xuICByZXR1cm4geC50b2tlbnMgIT0gbnVsbDtcbn1cblxuLy8gTXVzdCB1c2UgdGhlIGdlbmVyaWNzIDxUIGV4dGVuZHMge30+XG4vLyBJZiBpbnN0ZWFkIHR5cGVkIHdpdGggUmVhY3QuRnVuY3Rpb25Db21wb25lbnQgdGhlcmUgaXNuJ3QgZmVlZGJhY2sgZ2l2ZW4gYmFjayB0byB0aGUgZGV2XG4vLyB3aGVuIHVzaW5nIGEgYHZhbHVlc2Agb2JqZWN0IHdpdGggYSByZW5kZXJlciBjYWxsYmFjay5cbnZhciBFdWlJMThuID0gZnVuY3Rpb24gRXVpSTE4bihwcm9wcykge1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChpMThuQ29uZmlnKSB7XG4gICAgdmFyIG1hcHBpbmcgPSBpMThuQ29uZmlnLm1hcHBpbmcsXG4gICAgICBtYXBwaW5nRnVuYyA9IGkxOG5Db25maWcubWFwcGluZ0Z1bmMsXG4gICAgICByZW5kZXIgPSBpMThuQ29uZmlnLnJlbmRlcjtcbiAgICBpZiAoaXNJMThuVG9rZW5zU2hhcGUocHJvcHMpKSB7XG4gICAgICByZXR1cm4gcHJvcHMuY2hpbGRyZW4ocHJvcHMudG9rZW5zLm1hcChmdW5jdGlvbiAodG9rZW4sIGlkeCkge1xuICAgICAgICByZXR1cm4gbG9va3VwVG9rZW4oe1xuICAgICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgICBpMThuTWFwcGluZzogbWFwcGluZyxcbiAgICAgICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgICAgIHZhbHVlRGVmYXVsdDogcHJvcHMuZGVmYXVsdHNbaWR4XSxcbiAgICAgICAgICB2YWx1ZXM6IHByb3BzLnZhbHVlcyxcbiAgICAgICAgICByZW5kZXI6IHJlbmRlclxuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgdmFyIHRva2VuVmFsdWUgPSBsb29rdXBUb2tlbih7XG4gICAgICB0b2tlbjogcHJvcHMudG9rZW4sXG4gICAgICBpMThuTWFwcGluZzogbWFwcGluZyxcbiAgICAgIHZhbHVlRGVmYXVsdDogcHJvcHMuZGVmYXVsdCxcbiAgICAgIGkxOG5NYXBwaW5nRnVuYzogbWFwcGluZ0Z1bmMsXG4gICAgICB2YWx1ZXM6IHByb3BzLnZhbHVlcyxcbiAgICAgIHJlbmRlcjogcmVuZGVyXG4gICAgfSk7XG4gICAgaWYgKHByb3BzLmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gcHJvcHMuY2hpbGRyZW4odG9rZW5WYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0b2tlblZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vLyBBIHNpbmdsZSBkZWZhdWx0IGNvdWxkIGJlIGEgc3RyaW5nLCByZWFjdCBjaGlsZCwgb3IgcmVuZGVyIGZ1bmN0aW9uXG5cbi8vIEFuIGFycmF5IHdpdGggbXVsdGlwbGUgZGVmYXVsdHMgY2FuIG9ubHkgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyBvciBlbGVtZW50c1xuXG5mdW5jdGlvbiB1c2VFdWlJMThuKCkge1xuICB2YXIgaTE4bkNvbmZpZyA9IHVzZUNvbnRleHQoSTE4bkNvbnRleHQpO1xuICB2YXIgbWFwcGluZyA9IGkxOG5Db25maWcubWFwcGluZyxcbiAgICBtYXBwaW5nRnVuYyA9IGkxOG5Db25maWcubWFwcGluZ0Z1bmMsXG4gICAgcmVuZGVyID0gaTE4bkNvbmZpZy5yZW5kZXI7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBwcm9wcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBwcm9wc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuICBpZiAodHlwZW9mIHByb3BzWzBdID09PSAnc3RyaW5nJykge1xuICAgIHZhciBfdG9rZW4gPSBwcm9wc1swXSxcbiAgICAgIF9kZWZhdWx0VmFsdWUgPSBwcm9wc1sxXSxcbiAgICAgIF92YWx1ZXMgPSBwcm9wc1syXTtcbiAgICByZXR1cm4gbG9va3VwVG9rZW4oe1xuICAgICAgdG9rZW46IF90b2tlbixcbiAgICAgIGkxOG5NYXBwaW5nOiBtYXBwaW5nLFxuICAgICAgdmFsdWVEZWZhdWx0OiBfZGVmYXVsdFZhbHVlLFxuICAgICAgaTE4bk1hcHBpbmdGdW5jOiBtYXBwaW5nRnVuYyxcbiAgICAgIHZhbHVlczogX3ZhbHVlcyxcbiAgICAgIHJlbmRlcjogcmVuZGVyXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9yZWYgPSBwcm9wcyxcbiAgICAgIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICBfdG9rZW5zID0gX3JlZjJbMF0sXG4gICAgICBfZGVmYXVsdFZhbHVlcyA9IF9yZWYyWzFdO1xuICAgIHJldHVybiBfdG9rZW5zLm1hcChmdW5jdGlvbiAodG9rZW4sIGlkeCkge1xuICAgICAgcmV0dXJuIGxvb2t1cFRva2VuKHtcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBpMThuTWFwcGluZzogbWFwcGluZyxcbiAgICAgICAgdmFsdWVEZWZhdWx0OiBfZGVmYXVsdFZhbHVlc1tpZHhdLFxuICAgICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgICByZW5kZXI6IHJlbmRlclxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbmV4cG9ydCB7IEV1aUkxOG4sIHVzZUV1aUkxOG4gfTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEkxOG5Db250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe30pO1xudmFyIEV1aUkxOG5Qcm92aWRlciA9IEkxOG5Db250ZXh0LlByb3ZpZGVyLFxuICBFdWlJMThuQ29uc3VtZXIgPSBJMThuQ29udGV4dC5Db25zdW1lcjtcbnZhciBFdWlDb250ZXh0ID0gZnVuY3Rpb24gRXVpQ29udGV4dChfcmVmKSB7XG4gIHZhciBfcmVmJGkxOG4gPSBfcmVmLmkxOG4sXG4gICAgaTE4biA9IF9yZWYkaTE4biA9PT0gdm9pZCAwID8ge30gOiBfcmVmJGkxOG4sXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogaTE4blxuICB9LCBjaGlsZHJlbik7XG59O1xuRXVpQ29udGV4dC5wcm9wVHlwZXMgPSB7XG4gIGkxOG46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbWFwcGluZzogUHJvcFR5cGVzLnNoYXBlKHt9KSxcbiAgICBtYXBwaW5nRnVuYzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICAgKiBTb21lIGJyb3dzZXJzJyB0cmFuc2xhdGlvbiBmZWF0dXJlcyBkb24ndCB3b3JrIHdpdGggYSByZW5kZXJlZCBgPEZyYWdtZW50PmAgY29tcG9uZW50LlxuICAgICAgICogVGhlIGByZW5kZXJgIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gcGFzcyBpbiBhbm90aGVyIGNvbXBvbmVudCBpbnN0ZWFkLCBlLmcuIGA8ZGl2PmBcbiAgICAgICAqL1xuICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9ybWF0TnVtYmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmb3JtYXREYXRlVGltZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbG9jYWxlOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXG59O1xuZXhwb3J0IHsgRXVpQ29udGV4dCwgRXVpSTE4bkNvbnN1bWVyLCBJMThuQ29udGV4dCB9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjbG9uZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0Jvb2xlYW4sIGlzU3RyaW5nLCBpc051bWJlciwgaXNVbmRlZmluZWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQm9vbGVhbih2YWx1ZSkgfHwgaXNTdHJpbmcodmFsdWUpIHx8IGlzTnVtYmVyKHZhbHVlKSB8fCBpc1VuZGVmaW5lZCh2YWx1ZSk7XG59XG5mdW5jdGlvbiBoYXNQcm9wTmFtZShjaGlsZCkge1xuICByZXR1cm4gY2hpbGQgPyBfdHlwZW9mKGNoaWxkKSA9PT0gJ29iamVjdCcgJiYgY2hpbGQuaGFzT3duUHJvcGVydHkoJ3Byb3BOYW1lJykgOiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlcyBwbGFjZWhvbGRlciB2YWx1ZXMgaW4gYGlucHV0YCB3aXRoIHRoZWlyIG1hdGNoaW5nIHZhbHVlIGluIGB2YWx1ZXNgXG4gKiBlLmcuIGlucHV0OidIZWxsbywge25hbWV9JyB3aWxsIHJlcGxhY2UgYHtuYW1lfWAgd2l0aCBgdmFsdWVzW25hbWVdYFxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge1JlbmRlcmFibGVWYWx1ZXN9IHZhbHVlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaTE4bk1hcHBpbmdGdW5jXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgUmVhY3QuUmVhY3RDaGlsZFtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW4oaW5wdXQsIHZhbHVlcywgaTE4bk1hcHBpbmdGdW5jKSB7XG4gIHZhciBjaGlsZHJlbiA9IFtdO1xuICB2YXIgY2hpbGQ7XG4gIGZ1bmN0aW9uIGFwcGVuZENoYXJUb0NoaWxkKGNoYXIpIHtcbiAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc3RhcnRpbmcgYSBuZXcgc3RyaW5nIGxpdGVyYWxcbiAgICAgIGNoaWxkID0gY2hhcjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGV4aXN0aW5nIHN0cmluZyBsaXRlcmFsXG4gICAgICBjaGlsZCA9IGNoaWxkICsgY2hhcjtcbiAgICB9IGVsc2UgaWYgKGhhc1Byb3BOYW1lKGNoaWxkKSkge1xuICAgICAgLy8gYWRkaW5nIHRvIHRoZSBwcm9wTmFtZSBvZiBhIHZhbHVlcyBsb29rdXBcbiAgICAgIGNoaWxkLnByb3BOYW1lID0gY2hpbGQucHJvcE5hbWUgKyBjaGFyO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBhcHBlbmRWYWx1ZVRvQ2hpbGRyZW4odmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoaXNFbGVtZW50KHZhbHVlKSkge1xuICAgICAgLy8gYW4gYXJyYXkgd2l0aCBhbnkgUmVhY3RFbGVtZW50cyB3aWxsIGJlIGtlcHQgYXMgYW4gYXJyYXlcbiAgICAgIC8vIHNvIHRoZXkgbmVlZCB0byBiZSBhc3NpZ25lZCBhIGtleVxuICAgICAgY2hpbGRyZW4ucHVzaCggLyojX19QVVJFX18qL2Nsb25lRWxlbWVudCh2YWx1ZSwge1xuICAgICAgICBrZXk6IGNoaWxkcmVuLmxlbmd0aFxuICAgICAgfSkpO1xuICAgIH0gZWxzZSBpZiAoaGFzUHJvcE5hbWUodmFsdWUpKSB7XG4gICAgICAvLyB0aGlzIHdvbid0IGJlIGNhbGxlZCwgcHJvcE5hbWUgY2hpbGRyZW4gYXJlIGNvbnZlcnRlZCB0byBhIFJlYWN0Q2hpbGQgYmVmb3JlIGNhbGxpbmcgdGhpc1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBldmVyeXRoaW5nIGVsc2UgY2FuIGdvIHN0cmFpZ2h0IGluXG4gICAgICBpZiAoaTE4bk1hcHBpbmdGdW5jICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IGkxOG5NYXBwaW5nRnVuYyh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBjaGlsZHJlbi5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB3ZSBkb24ndCBlbmNvdW50ZXIgYSBub24tcHJpbWl0aXZlXG4gIC8vIHRoZW4gYGNoaWxkcmVuYCBjYW4gYmUgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIGF0IHRoZSBlbmRcbiAgdmFyIGVuY291bnRlcmVkTm9uUHJpbWl0aXZlID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hhciA9IGlucHV0W2ldO1xuICAgIGlmIChjaGFyID09PSAnXFxcXCcpIHtcbiAgICAgIC8vIHBlZWsgYXQgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGtub3cgaWYgdGhpcyBpcyBhbiBlc2NhcGVcbiAgICAgIHZhciBuZXh0Q2hhciA9IGlucHV0W2kgKyAxXTtcbiAgICAgIHZhciBjaGFyVG9BZGQgPSBjaGFyOyAvLyBpZiB0aGlzIGlzbid0IGFuIGVzY2FwZSBzZXF1ZW5jZSB0aGVuIHdlIHdpbGwgYWRkIHRoZSBiYWNrc2xhc2hcblxuICAgICAgaWYgKG5leHRDaGFyID09PSAneycgfHwgbmV4dENoYXIgPT09ICd9Jykge1xuICAgICAgICAvLyBlc2NhcGluZyBhIGJyYWNlXG4gICAgICAgIGkgKz0gMTsgLy8gYWR2YW5jZSBwYXNzZWQgdGhlIGJyYWNlXG4gICAgICAgIGNoYXJUb0FkZCA9IGlucHV0W2ldO1xuICAgICAgfVxuICAgICAgYXBwZW5kQ2hhclRvQ2hpbGQoY2hhclRvQWRkKTtcbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICd7Jykge1xuICAgICAgYXBwZW5kVmFsdWVUb0NoaWxkcmVuKGNoaWxkKTtcbiAgICAgIGNoaWxkID0ge1xuICAgICAgICBwcm9wTmFtZTogJydcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSAnfScpIHtcbiAgICAgIHZhciBwcm9wTmFtZSA9IGNoaWxkLnByb3BOYW1lO1xuICAgICAgaWYgKCF2YWx1ZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIktleSBcXFwiXCIuY29uY2F0KHByb3BOYW1lLCBcIlxcXCIgbm90IGZvdW5kIGluIFwiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkodmFsdWVzLCBudWxsLCAyKSkpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHZhbHVlc1twcm9wTmFtZV07XG4gICAgICBlbmNvdW50ZXJlZE5vblByaW1pdGl2ZSA9IGVuY291bnRlcmVkTm9uUHJpbWl0aXZlIHx8ICFpc1ByaW1pdGl2ZShwcm9wVmFsdWUpO1xuICAgICAgYXBwZW5kVmFsdWVUb0NoaWxkcmVuKHByb3BWYWx1ZSk7XG4gICAgICBjaGlsZCA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kQ2hhclRvQ2hpbGQoY2hhcik7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5jbHVkZSBhbnkgcmVtYWluaW5nIGNoaWxkIHZhbHVlXG4gIGFwcGVuZFZhbHVlVG9DaGlsZHJlbihjaGlsZCk7XG4gIHJldHVybiBlbmNvdW50ZXJlZE5vblByaW1pdGl2ZSA/IGNoaWxkcmVuIDogY2hpbGRyZW4uam9pbignJyk7XG59IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmV4cG9ydCB2YXIgdXNlTG9hZGluZ0FyaWFMYWJlbCA9IGZ1bmN0aW9uIHVzZUxvYWRpbmdBcmlhTGFiZWwoKSB7XG4gIHJldHVybiB1c2VFdWlJMThuKCdldWlMb2FkaW5nU3RyaW5ncy5hcmlhTGFiZWwnLCAnTG9hZGluZycpO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcInNpemVcIiwgXCJjbGFzc05hbWVcIiwgXCJhcmlhLWxhYmVsXCIsIFwiY29sb3JcIiwgXCJzdHlsZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VMb2FkaW5nQXJpYUxhYmVsIH0gZnJvbSAnLi9fbG9hZGluZ19zdHJpbmdzJztcbmltcG9ydCB7IGV1aUxvYWRpbmdTcGlubmVyU3R5bGVzLCBldWlTcGlubmVyQm9yZGVyQ29sb3JzQ1NTIH0gZnJvbSAnLi9sb2FkaW5nX3NwaW5uZXIuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcbmV4cG9ydCB2YXIgRXVpTG9hZGluZ1NwaW5uZXIgPSBmdW5jdGlvbiBFdWlMb2FkaW5nU3Bpbm5lcihfcmVmKSB7XG4gIHZhciBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXSxcbiAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlMb2FkaW5nU3Bpbm5lcicsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlMb2FkaW5nU3Bpbm5lclN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUxvYWRpbmdTcGlubmVyLCBzdHlsZXNbc2l6ZV1dO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgY3VzdG9tQ29sb3JTdHlsZSA9IGNvbG9yID8gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZSksIHt9LCB7XG4gICAgYm9yZGVyQ29sb3I6IGV1aVNwaW5uZXJCb3JkZXJDb2xvcnNDU1MoZXVpVGhlbWUsIGNvbG9yKVxuICB9KSA6IHN0eWxlO1xuICB2YXIgZGVmYXVsdExhYmVsID0gdXNlTG9hZGluZ0FyaWFMYWJlbCgpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBzdHlsZTogY3VzdG9tQ29sb3JTdHlsZSxcbiAgICByb2xlOiBcInByb2dyZXNzYmFyXCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCB8fCBkZWZhdWx0TGFiZWxcbiAgfSwgcmVzdCkpO1xufTtcbkV1aUxvYWRpbmdTcGlubmVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIGJvcmRlciBhbmQgaGlnaGxpZ2h0LlxuICAgICAgICogRWFjaCBrZXkgYWNjZXB0cyBhbnkgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlIGFzIGEgYHN0cmluZ2BcbiAgICAgICAqIFNlZSAjRXVpTG9hZGluZ1NwaW5uZXJDb2xvclxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJvcmRlcjogUHJvcFR5cGVzLmFueSxcbiAgICBoaWdobGlnaHQ6IFByb3BUeXBlcy5hbnlcbiAgfSlcbn07IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKGUsIHQpIHsgcmV0dXJuIHQgfHwgKHQgPSBlLnNsaWNlKDApKSwgT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZSh0KSB9IH0pKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcywga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSwgbG9naWNhbFNpemVDU1MsIGxvZ2ljYWxTaG9ydGhhbmRDU1MsIG1hdGhXaXRoVW5pdHMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgX2xvYWRpbmdTcGlubmVyID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIGZyb20ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG5cXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcXG4gIH1cXG5cIl0pKSk7XG52YXIgc3Bpbm5lclNpemVzID0ge1xuICBzOiAnbScsXG4gIG06ICdiYXNlJyxcbiAgbDogJ2wnLFxuICB4bDogJ3hsJyxcbiAgeHhsOiAneHhsJ1xufTtcbmV4cG9ydCB2YXIgZXVpU3Bpbm5lckJvcmRlckNvbG9yc0NTUyA9IGZ1bmN0aW9uIGV1aVNwaW5uZXJCb3JkZXJDb2xvcnNDU1MoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICB2YXIgY29sb3JzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIF9jb2xvcnMkYm9yZGVyID0gY29sb3JzLmJvcmRlcixcbiAgICBib3JkZXIgPSBfY29sb3JzJGJvcmRlciA9PT0gdm9pZCAwID8gZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUgOiBfY29sb3JzJGJvcmRlcixcbiAgICBfY29sb3JzJGhpZ2hsaWdodCA9IGNvbG9ycy5oaWdobGlnaHQsXG4gICAgaGlnaGxpZ2h0ID0gX2NvbG9ycyRoaWdobGlnaHQgPT09IHZvaWQgMCA/IGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5IDogX2NvbG9ycyRoaWdobGlnaHQ7XG4gIHJldHVybiBcIlwiLmNvbmNhdChoaWdobGlnaHQsIFwiIFwiKS5jb25jYXQoYm9yZGVyLCBcIiBcIikuY29uY2F0KGJvcmRlciwgXCIgXCIpLmNvbmNhdChib3JkZXIpO1xufTtcbmV4cG9ydCB2YXIgZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMgPSBmdW5jdGlvbiBldWlMb2FkaW5nU3Bpbm5lclN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUxvYWRpbmdTcGlubmVyOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci50aGljaywgXCI7XCIsIGxvZ2ljYWxTaG9ydGhhbmRDU1MoJ2JvcmRlci1jb2xvcicsIGV1aVNwaW5uZXJCb3JkZXJDb2xvcnNDU1MoZXVpVGhlbWVDb250ZXh0KSksIFwiIFwiLCBldWlDYW5BbmltYXRlLCBcInthbmltYXRpb246XCIsIF9sb2FkaW5nU3Bpbm5lciwgXCIgMC42cyBpbmZpbml0ZSBsaW5lYXI7fTtsYWJlbDpldWlMb2FkaW5nU3Bpbm5lcjtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnNdLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5zXSksIFwiIGJvcmRlci13aWR0aDpcIiwgbWF0aFdpdGhVbml0cyhldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICogMS41O1xuICAgIH0pLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5tXSwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMubV0pLCBcIiBib3JkZXItd2lkdGg6XCIsIG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAqIDEuNTtcbiAgICB9KSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1MoZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMubF0sIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLmxdKSwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnhsXSwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMueGxdKSwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICB4eGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1MoZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMueHhsXSwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMueHhsXSksIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpQnV0dG9uRGlzcGxheUNvbnRlbnRTdHlsZXMgPSBmdW5jdGlvbiBldWlCdXR0b25EaXNwbGF5Q29udGVudFN0eWxlcyhfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUJ1dHRvbkRpc3BsYXlDb250ZW50OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIGRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Z2FwOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpldWlCdXR0b25EaXNwbGF5Q29udGVudDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBVUkwgZnJvbSAndXJsLXBhcnNlJztcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUhyZWYoaHJlZikge1xuICAvLyBjaGVjayBocmVmIGFuZCB0cmVhdCBpdCBhcyBpbnZhbGlkIGlmIGl0IHVzZXMgdGhlIGphdmFzY3JpcHQ6IHByb3RvY29sXG4gIHZhciBwYXJ0cyA9IG5ldyBVUkwoaHJlZik7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zY3JpcHQtdXJsXG4gIHJldHVybiBwYXJ0cy5wcm90b2NvbCAhPT0gJ2phdmFzY3JpcHQ6Jztcbn0iLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaWNvblR5cGVcIiwgXCJpY29uU2lkZVwiLCBcImljb25TaXplXCIsIFwiY29sb3JcIiwgXCJzaXplXCIsIFwiZmx1c2hcIiwgXCJpc0Rpc2FibGVkXCIsIFwiZGlzYWJsZWRcIiwgXCJpc0xvYWRpbmdcIiwgXCJocmVmXCIsIFwidGFyZ2V0XCIsIFwicmVsXCIsIFwidHlwZVwiLCBcImJ1dHRvblJlZlwiLCBcImNvbnRlbnRQcm9wc1wiLCBcInRleHRQcm9wc1wiLCBcImlzU2VsZWN0ZWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMsIGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkRpc3BsYXlDb250ZW50IH0gZnJvbSAnLi4vYnV0dG9uX2Rpc3BsYXkvX2J1dHRvbl9kaXNwbGF5X2NvbnRlbnQnO1xuaW1wb3J0IHsgdXNlRXVpQnV0dG9uQ29sb3JDU1MgfSBmcm9tICcuLi8uLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucy9idXR0b24nO1xuaW1wb3J0IHsgaXNCdXR0b25EaXNhYmxlZCB9IGZyb20gJy4uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheSc7XG5pbXBvcnQgeyBldWlCdXR0b25FbXB0eVN0eWxlcyB9IGZyb20gJy4vYnV0dG9uX2VtcHR5LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsneHMnLCAncycsICdtJ107XG5leHBvcnQgdmFyIEZMVVNIX1RZUEVTID0gWydsZWZ0JywgJ3JpZ2h0JywgJ2JvdGgnXTtcblxuLyoqXG4gKiBFeHRlbmRzIEV1aUJ1dHRvbkNvbnRlbnRQcm9wcyB3aGljaCBwcm92aWRlc1xuICogYGljb25UeXBlYCwgYGljb25TaWRlYCwgYW5kIGB0ZXh0UHJvcHNgXG4gKi9cblxuZXhwb3J0IHZhciBFdWlCdXR0b25FbXB0eSA9IGZ1bmN0aW9uIEV1aUJ1dHRvbkVtcHR5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBpY29uVHlwZSA9IF9yZWYuaWNvblR5cGUsXG4gICAgX3JlZiRpY29uU2lkZSA9IF9yZWYuaWNvblNpZGUsXG4gICAgaWNvblNpZGUgPSBfcmVmJGljb25TaWRlID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmJGljb25TaWRlLFxuICAgIF9yZWYkaWNvblNpemUgPSBfcmVmLmljb25TaXplLFxuICAgIGljb25TaXplID0gX3JlZiRpY29uU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRpY29uU2l6ZSxcbiAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdwcmltYXJ5JyA6IF9yZWYkY29sb3IsXG4gICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICBmbHVzaCA9IF9yZWYuZmx1c2gsXG4gICAgX2lzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIGlzTG9hZGluZyA9IF9yZWYuaXNMb2FkaW5nLFxuICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgcmVsID0gX3JlZi5yZWwsXG4gICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgIGJ1dHRvblJlZiA9IF9yZWYuYnV0dG9uUmVmLFxuICAgIGNvbnRlbnRQcm9wcyA9IF9yZWYuY29udGVudFByb3BzLFxuICAgIHRleHRQcm9wcyA9IF9yZWYudGV4dFByb3BzLFxuICAgIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNEaXNhYmxlZCA9IGlzQnV0dG9uRGlzYWJsZWQoe1xuICAgIGlzRGlzYWJsZWQ6IF9pc0Rpc2FibGVkIHx8IGRpc2FibGVkLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdcbiAgfSk7XG4gIHZhciBidXR0b25Db2xvclN0eWxlcyA9IHVzZUV1aUJ1dHRvbkNvbG9yQ1NTKHtcbiAgICBkaXNwbGF5OiAnZW1wdHknXG4gIH0pO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpQnV0dG9uRW1wdHlTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlCdXR0b25FbXB0eSwgc3R5bGVzW3NpemVdLCBidXR0b25Db2xvclN0eWxlc1tpc0Rpc2FibGVkID8gJ2Rpc2FibGVkJyA6IGNvbG9yXSwgZmx1c2ggJiYgc3R5bGVzLmZsdXNoLCBmbHVzaCAmJiBzdHlsZXNbZmx1c2hdLCBpc0Rpc2FibGVkICYmIHN0eWxlcy5pc0Rpc2FibGVkXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25FbXB0eScsIGNsYXNzTmFtZSk7XG4gIHZhciBjb250ZW50Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkVtcHR5X19jb250ZW50JywgY29udGVudFByb3BzID09PSBudWxsIHx8IGNvbnRlbnRQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29udGVudFByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciB0ZXh0Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkVtcHR5X190ZXh0JywgdGV4dFByb3BzICYmIHRleHRQcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgaW5uZXJOb2RlID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25EaXNwbGF5Q29udGVudCwgX2V4dGVuZHMoe1xuICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaWNvblR5cGU6IGljb25UeXBlLFxuICAgIGljb25TaWRlOiBpY29uU2lkZSxcbiAgICBpY29uU2l6ZTogc2l6ZSA9PT0gJ3hzJyA/ICdzJyA6IGljb25TaXplLFxuICAgIHRleHRQcm9wczogdGV4dFByb3BzID09PSBmYWxzZSA/IGZhbHNlIDogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0ZXh0UHJvcHMpLCB7fSwge1xuICAgICAgY2xhc3NOYW1lOiB0ZXh0Q2xhc3NOYW1lc1xuICAgIH0pXG4gIH0sIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY29udGVudFByb3BzKSwge30sIHtcbiAgICBjbGFzc05hbWU6IGNvbnRlbnRDbGFzc05hbWVzXG4gIH0pKSwgY2hpbGRyZW4pO1xuXG4gIC8vIDxhPiBlbGVtZW50cyBkb24ndCByZXNwZWN0IHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZS4gU28gaWYgd2UncmUgZGlzYWJsZWQsIHdlJ2xsIGp1c3QgcHJldGVuZFxuICAvLyB0aGlzIGlzIGEgYnV0dG9uIGFuZCBwaWdneWJhY2sgb2ZmIGl0cyBkaXNhYmxlZCBzdHlsZXMuXG4gIGlmIChocmVmICYmICFpc0Rpc2FibGVkKSB7XG4gICAgdmFyIHNlY3VyZVJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgaW5uZXJOb2RlKTtcbiAgfVxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgcmVmOiBidXR0b25SZWYsXG4gICAgXCJhcmlhLXByZXNzZWRcIjogaXNTZWxlY3RlZFxuICB9LCByZXN0KSwgaW5uZXJOb2RlKTtcbn07XG5FdWlCdXR0b25FbXB0eS5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBBbnkgb2YgdGhlIG5hbWVkIGNvbG9yIHBhbGV0dGUgb3B0aW9ucy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICBmbHVzaDogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICovXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICovXG4gIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW3VuZGVmaW5lZF0pXSksXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dC9jaGlsZHJlbiBvbmx5IChub3QgaWNvbilcbiAgICAgKlxuICAgICAqIFRoaXMgc3BhbiB3cmFwcGVyIGNhbiBiZSByZW1vdmVkIGJ5IHBhc3NpbmcgYHRleHRQcm9wcz17ZmFsc2V9YC5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxTaG9ydGhhbmRDU1MsIGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlCdXR0b25EaXNwbGF5U3R5bGVzIH0gZnJvbSAnLi4vYnV0dG9uX2Rpc3BsYXkvX2J1dHRvbl9kaXNwbGF5LnN0eWxlcyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxbHl3YmlkLWZsdXNoXCIsXG4gIHN0eWxlczogXCJwYWRkaW5nLWlubGluZTowO2xhYmVsOmZsdXNoO1wiXG59IDoge1xuICBuYW1lOiBcIjFseXdiaWQtZmx1c2hcIixcbiAgc3R5bGVzOiBcInBhZGRpbmctaW5saW5lOjA7bGFiZWw6Zmx1c2g7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpQnV0dG9uRW1wdHlTdHlsZXMgPSBmdW5jdGlvbiBldWlCdXR0b25FbXB0eVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuXG4gIC8vIEV1aUJ1dHRvbkVtcHR5IHVzZXMgdGhlIHNhbWUgc2l6ZS9mb250IHN0eWxpbmcgYXMgRXVpQnV0dG9uRGlzcGxheSxcbiAgLy8gYnV0IGRvZXMgbm90IHNoYXJlIGVub3VnaCBvZiB0aGUgc2FtZSBjb2xvcnMvcHJvcHMgdG8gdGhlIHBvaW50XG4gIC8vIG9mIHVzaW5nIHRoZSBhY3R1YWwgY29tcG9uZW50IC0gc28gd2UnbGwgcmV1c2UgaXRzIHN0eWxlcyBpbnN0ZWFkXG4gIHZhciBkaXNwbGF5U3R5bGVzID0gZXVpQnV0dG9uRGlzcGxheVN0eWxlcyhldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIGV1aUJ1dHRvbkVtcHR5OiAvKiNfX1BVUkVfXyovY3NzKGRpc3BsYXlTdHlsZXMuZXVpQnV0dG9uRGlzcGxheSwgXCIgXCIsIGxvZ2ljYWxTaG9ydGhhbmRDU1MoJ3BhZGRpbmcnLCBcIjAgXCIuY29uY2F0KGV1aVRoZW1lLnNpemUucykpLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24tZHVyYXRpb246XCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIjt9O2xhYmVsOmV1aUJ1dHRvbkVtcHR5O1wiKSxcbiAgICBpc0Rpc2FibGVkOiBkaXNwbGF5U3R5bGVzLmlzRGlzYWJsZWQsXG4gICAgLy8gU2l6ZXNcbiAgICB4czogZGlzcGxheVN0eWxlcy54cyxcbiAgICBzOiBkaXNwbGF5U3R5bGVzLnMsXG4gICAgbTogZGlzcGxheVN0eWxlcy5tLFxuICAgIC8vIEZsdXNoIHNpZGVzXG4gICAgZmx1c2g6IF9yZWYsXG4gICAgbGVmdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXJnaW4tcmlnaHQnLCBldWlUaGVtZS5zaXplLnMpLCBcIjs7bGFiZWw6bGVmdDtcIiksXG4gICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCBldWlUaGVtZS5zaXplLnMpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpLFxuICAgIGJvdGg6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6Ym90aDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaXplXCIsIFwiY29sb3JcIiwgXCJpc0Rpc2FibGVkXCIsIFwiZGlzYWJsZWRcIiwgXCJocmVmXCIsIFwidHlwZVwiLCBcImRpc3BsYXlcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJzaXplXCIsIFwiYnV0dG9uUmVmXCIsIFwiaXNTZWxlY3RlZFwiLCBcImlzTG9hZGluZ1wiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vLi4vbG9hZGluZyc7XG5pbXBvcnQgeyB1c2VFdWlCdXR0b25Db2xvckNTUywgdXNlRXVpQnV0dG9uRm9jdXNDU1MgfSBmcm9tICcuLi8uLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucy9idXR0b24nO1xuaW1wb3J0IHsgaXNCdXR0b25EaXNhYmxlZCB9IGZyb20gJy4uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheSc7XG5pbXBvcnQgeyBldWlCdXR0b25JY29uU3R5bGVzLCBfZW1wdHlIb3ZlclN0eWxlcyB9IGZyb20gJy4vYnV0dG9uX2ljb24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWyd4cycsICdzJywgJ20nXTtcbmV4cG9ydCB2YXIgRElTUExBWVMgPSBbJ2Jhc2UnLCAnZW1wdHknLCAnZmlsbCddO1xuZXhwb3J0IHZhciBFdWlCdXR0b25JY29uID0gZnVuY3Rpb24gRXVpQnV0dG9uSWNvbihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBpY29uVHlwZSA9IF9yZWYuaWNvblR5cGUsXG4gICAgX3JlZiRpY29uU2l6ZSA9IF9yZWYuaWNvblNpemUsXG4gICAgaWNvblNpemUgPSBfcmVmJGljb25TaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJGljb25TaXplLFxuICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ3ByaW1hcnknIDogX3JlZiRjb2xvcixcbiAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgX3JlZiRkaXNwbGF5ID0gX3JlZi5kaXNwbGF5LFxuICAgIGRpc3BsYXkgPSBfcmVmJGRpc3BsYXkgPT09IHZvaWQgMCA/ICdlbXB0eScgOiBfcmVmJGRpc3BsYXksXG4gICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgcmVsID0gX3JlZi5yZWwsXG4gICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICd4cycgOiBfcmVmJHNpemUsXG4gICAgYnV0dG9uUmVmID0gX3JlZi5idXR0b25SZWYsXG4gICAgaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICBpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc0Rpc2FibGVkID0gaXNCdXR0b25EaXNhYmxlZCh7XG4gICAgaXNEaXNhYmxlZDogX2lzRGlzYWJsZWQgfHwgZGlzYWJsZWQsXG4gICAgaHJlZjogaHJlZixcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ1xuICB9KTtcbiAgdmFyIGFyaWFIaWRkZW4gPSByZXN0WydhcmlhLWhpZGRlbiddO1xuICB2YXIgaXNBcmlhSGlkZGVuID0gYXJpYUhpZGRlbiA9PT0gJ3RydWUnIHx8IGFyaWFIaWRkZW4gPT09IHRydWU7XG4gIGlmICghcmVzdFsnYXJpYS1sYWJlbCddICYmICFyZXN0WydhcmlhLWxhYmVsbGVkYnknXSAmJiAhaXNBcmlhSGlkZGVuKSB7XG4gICAgY29uc29sZS53YXJuKFwiRXVpQnV0dG9uSWNvbiByZXF1aXJlcyBhcmlhLWxhYmVsIG9yIGFyaWEtbGFiZWxsZWRieSB0byBiZSBzcGVjaWZpZWQgYmVjYXVzZSBpY29uLW9ubHlcXG4gICAgICBidXR0b25zIGFyZSBzY3JlZW4tcmVhZGVyLWluYWNjZXNzaWJsZSB3aXRob3V0IHRoZW0uXCIpO1xuICB9XG4gIHZhciBidXR0b25Db2xvclN0eWxlcyA9IHVzZUV1aUJ1dHRvbkNvbG9yQ1NTKHtcbiAgICBkaXNwbGF5OiBkaXNwbGF5XG4gIH0pO1xuICB2YXIgYnV0dG9uRm9jdXNTdHlsZSA9IHVzZUV1aUJ1dHRvbkZvY3VzQ1NTKCk7XG4gIHZhciBlbXB0eUhvdmVyU3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoX2VtcHR5SG92ZXJTdHlsZXMpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpQnV0dG9uSWNvblN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUJ1dHRvbkljb24sIHN0eWxlc1tzaXplXSwgYnV0dG9uQ29sb3JTdHlsZXNbaXNEaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBjb2xvcl0sIGJ1dHRvbkZvY3VzU3R5bGUsIGRpc3BsYXkgPT09ICdlbXB0eScgJiYgIWlzRGlzYWJsZWQgJiYgZW1wdHlIb3ZlclN0eWxlc1tjb2xvcl0sIGlzRGlzYWJsZWQgJiYgc3R5bGVzLmlzRGlzYWJsZWRdO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkljb24nLCBjbGFzc05hbWUpO1xuXG4gIC8vIEFkZCBhbiBpY29uIHRvIHRoZSBidXR0b24gaWYgb25lIGV4aXN0cy5cbiAgdmFyIGJ1dHRvbkljb247XG4gIGlmIChpY29uVHlwZSAmJiAhaXNMb2FkaW5nKSB7XG4gICAgYnV0dG9uSWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUJ1dHRvbkljb25fX2ljb25cIixcbiAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgc2l6ZTogaWNvblNpemUsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcbiAgICB9KTtcbiAgfVxuICBpZiAoaWNvblR5cGUgJiYgaXNMb2FkaW5nKSB7XG4gICAgLy8gYG9yaWdpbmFsYCBzaXplIGRvZXNuJ3QgZXhpc3QgaW4gYEV1aUxvYWRpbmdTcGlubmVyYFxuICAgIC8vIHdoZW4gdGhlIGBpY29uU2l6ZWAgaXMgYG9yaWdpbmFsYCB3ZSBkb24ndCBwYXNzIGFueSBzaXplIHRvIHRoZSBgRXVpTG9hZGluZ1NwaW5uZXJgXG4gICAgLy8gc28gaXQgZ2V0cyB0aGUgZGVmYXVsdCBzaXplXG4gICAgdmFyIGxvYWRpbmdTaXplID0gaWNvblNpemUgPT09ICdvcmlnaW5hbCcgPyB1bmRlZmluZWQgOiBpY29uU2l6ZTtcblxuICAgIC8vIFdoZW4gdGhlIGJ1dHRvbiBpcyBkaXNhYmxlZCB0aGUgdGV4dCBnZXRzIGdyYXlcbiAgICAvLyBhbmQgaW4gc29tZSBidXR0b25zIHRoZSBiYWNrZ3JvdW5kIGdldHMgYSBsaWdodCBncmF5XG4gICAgLy8gZm9yIGJldHRlciBjb250cmFzdCB3ZSB3YW50IHRvIGNoYW5nZSB0aGUgYm9yZGVyIG9mIHRoZSBzcGlubmVyXG4gICAgLy8gdG8gaGF2ZSB0aGUgc2FtZSBjb2xvciBvZiB0aGUgdGV4dC4gVGhpcyB3YXkgd2UgZW5zdXJlIHRoZSBib3JkZXJzXG4gICAgLy8gYXJlIGFsd2F5cyB2aXNpYmxlLiBUaGUgZGVmYXVsdCBzcGlubmVyIGNvbG9yIGNvdWxkIGJlIHZlcnkgbGlnaHQuXG4gICAgdmFyIGxvYWRpbmdTcGlubmVyQ29sb3IgPSBpc0Rpc2FibGVkID8ge1xuICAgICAgYm9yZGVyOiAnY3VycmVudGNvbG9yJ1xuICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgYnV0dG9uSWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpTG9hZGluZ1NwaW5uZXIsIHtcbiAgICAgIHNpemU6IGxvYWRpbmdTaXplLFxuICAgICAgY29sb3I6IGxvYWRpbmdTcGlubmVyQ29sb3JcbiAgICB9KTtcbiAgfVxuXG4gIC8vIDxhPiBlbGVtZW50cyBkb24ndCByZXNwZWN0IHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZS4gU28gaWYgd2UncmUgZGlzYWJsZWQsIHdlJ2xsIGp1c3QgcHJldGVuZFxuICAvLyB0aGlzIGlzIGEgYnV0dG9uIGFuZCBwaWdneWJhY2sgb2ZmIGl0cyBkaXNhYmxlZCBzdHlsZXMuXG4gIGlmIChocmVmICYmICFpc0Rpc2FibGVkKSB7XG4gICAgdmFyIHNlY3VyZVJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIHRhYkluZGV4OiBpc0FyaWFIaWRkZW4gPyAtMSA6IHVuZGVmaW5lZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgYnV0dG9uSWNvbik7XG4gIH1cbiAgdmFyIGJ1dHRvblR5cGU7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICB0YWJJbmRleDogaXNBcmlhSGlkZGVuID8gLTEgOiB1bmRlZmluZWQsXG4gICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIFwiYXJpYS1wcmVzc2VkXCI6IGlzU2VsZWN0ZWQsXG4gICAgdHlwZTogdHlwZSxcbiAgICByZWY6IGJ1dHRvblJlZlxuICB9LCByZXN0KSwgYnV0dG9uSWNvbik7XG59O1xuRXVpQnV0dG9uSWNvbi5wcm9wVHlwZXMgPSB7XG4gIHR5cGU6IFByb3BUeXBlcy5hbnksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBBbnkgb2YgdGhlIG5hbWVkIGNvbG9yIHBhbGV0dGUgb3B0aW9ucy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT3ZlcmFsbCBzaXplIG9mIGJ1dHRvbi5cbiAgICAgKiBNYXRjaGVzIHRoZSBzaXplcyBvZiBvdGhlciBFdWlCdXR0b25zXG4gICAgICovXG4gIC8qKlxuICAgICAqIE92ZXJhbGwgc2l6ZSBvZiBidXR0b24uXG4gICAgICogTWF0Y2hlcyB0aGUgc2l6ZXMgb2Ygb3RoZXIgRXVpQnV0dG9uc1xuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBTaXplIG9mIHRoZSBpY29uIG9ubHkuXG4gICAgICogVGhpcyB3aWxsIG5vdCBhZmZlY3QgdGhlIG92ZXJhbGwgc2l6ZSBvZiB0aGUgYnV0dG9uXG4gICAgICovXG4gIGljb25TaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc3BsYXkgc3R5bGUgZm9yIG1hdGNoaW5nIG90aGVyIEV1aUJ1dHRvbiB0eXBlcy5cbiAgICAgKiBgYmFzZWAgaXMgZXF1aXZhbGVudCB0byBhIHR5cGljYWwgRXVpQnV0dG9uXG4gICAgICogYGZpbGxgIGlzIGVxdWl2YWxlbnQgdG8gYSBmaWxsZWQgRXVpQnV0dG9uXG4gICAgICogYGVtcHR5YCAoZGVmYXVsdCkgaXMgZXF1aXZhbGVudCB0byBhbiBFdWlCdXR0b25FbXB0eVxuICAgICAqL1xuICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXNwbGF5IHN0eWxlIGZvciBtYXRjaGluZyBvdGhlciBFdWlCdXR0b24gdHlwZXMuXG4gICAgICogYGJhc2VgIGlzIGVxdWl2YWxlbnQgdG8gYSB0eXBpY2FsIEV1aUJ1dHRvblxuICAgICAqIGBmaWxsYCBpcyBlcXVpdmFsZW50IHRvIGEgZmlsbGVkIEV1aUJ1dHRvblxuICAgICAqIGBlbXB0eWAgKGRlZmF1bHQpIGlzIGVxdWl2YWxlbnQgdG8gYW4gRXVpQnV0dG9uRW1wdHlcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsU2l6ZUNTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IEJVVFRPTl9DT0xPUlMsIGV1aUJ1dHRvbkVtcHR5Q29sb3IsIGV1aUJ1dHRvblNpemVNYXAgfSBmcm9tICcuLi8uLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucy9idXR0b24nO1xuaW1wb3J0IHsgZXVpQnV0dG9uQmFzZUNTUyB9IGZyb20gJy4uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheS5zdHlsZXMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiODU5NXA5LWlzRGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImN1cnNvcjpub3QtYWxsb3dlZDtsYWJlbDppc0Rpc2FibGVkO1wiXG59IDoge1xuICBuYW1lOiBcIjg1OTVwOS1pc0Rpc2FibGVkXCIsXG4gIHN0eWxlczogXCJjdXJzb3I6bm90LWFsbG93ZWQ7bGFiZWw6aXNEaXNhYmxlZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlCdXR0b25JY29uU3R5bGVzID0gZnVuY3Rpb24gZXVpQnV0dG9uSWNvblN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIHNpemVzID0gZXVpQnV0dG9uU2l6ZU1hcChldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIGV1aUJ1dHRvbkljb246IC8qI19fUFVSRV9fKi9jc3MoZXVpQnV0dG9uQmFzZUNTUygpLCBcImRpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7Jj5zdmd7cG9pbnRlci1ldmVudHM6bm9uZTt9O2xhYmVsOmV1aUJ1dHRvbkljb247XCIpLFxuICAgIGlzRGlzYWJsZWQ6IF9yZWYsXG4gICAgLy8gU2l6ZXNcbiAgICB4czogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhzaXplcy54cy5oZWlnaHQpLCBcIiBib3JkZXItcmFkaXVzOlwiLCBzaXplcy54cy5yYWRpdXMsIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhzaXplcy5zLmhlaWdodCksIFwiIGJvcmRlci1yYWRpdXM6XCIsIHNpemVzLnMucmFkaXVzLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhzaXplcy5tLmhlaWdodCksIFwiIGJvcmRlci1yYWRpdXM6XCIsIHNpemVzLm0ucmFkaXVzLCBcIjs7bGFiZWw6bTtcIilcbiAgfTtcbn07XG5leHBvcnQgdmFyIF9lbXB0eUhvdmVyU3R5bGVzID0gZnVuY3Rpb24gX2VtcHR5SG92ZXJTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiBCVVRUT05fQ09MT1JTLnJlZHVjZShmdW5jdGlvbiAoc3R5bGVzLCBjb2xvcikge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlcyksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIGNvbG9yLCAvKiNfX1BVUkVfXyovY3NzKFwiJjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlCdXR0b25FbXB0eUNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLmJhY2tncm91bmRDb2xvciwgXCI7fVwiKSkpO1xuICB9LCB7fSk7XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlubmVyVGV4dChpbm5lclRleHRGYWxsYmFjaykge1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgcmVmID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRSZWYgPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKGlubmVyVGV4dEZhbGxiYWNrKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgaW5uZXJUZXh0ID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRJbm5lclRleHQgPSBfdXNlU3RhdGU0WzFdO1xuICB2YXIgdXBkYXRlSW5uZXJUZXh0ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUpIHJldHVybjtcbiAgICBzZXRJbm5lclRleHQoXG4gICAgLy8gQ2hlY2sgZm9yIGBpbm5lclRleHRgIGltcGxlbWVudGF0aW9uIHJhdGhlciB0aGFuIGEgc2ltcGxlIE9SIGNoZWNrXG4gICAgLy8gYmVjYXVzZSBpbiByZWFsIGNhc2VzIHRoZSByZXN1bHQgb2YgYGlubmVyVGV4dGAgY291bGQgY29ycmVjdGx5IGJlIGBudWxsYFxuICAgIC8vIHdoaWxlIHRoZSByZXN1bHQgb2YgYHRleHRDb250ZW50YCBjb3VsZCBjb3JyZWN0bHkgYmUgbm9uLWBudWxsYCBkdWUgdG9cbiAgICAvLyBkaWZmZXJpbmcgcmVsaWFuY2Ugb24gYnJvd3NlciBsYXlvdXQgY2FsY3VsYXRpb25zLlxuICAgIC8vIFdlIHByZWZlciB0aGUgcmVzdWx0IG9mIGBpbm5lclRleHRgLCBpZiBhdmFpbGFibGUuXG4gICAgJ2lubmVyVGV4dCcgaW4gbm9kZSA/IG5vZGUuaW5uZXJUZXh0IDogbm9kZS50ZXh0Q29udGVudCB8fCBpbm5lclRleHRGYWxsYmFjayk7XG4gIH0sIFtpbm5lclRleHRGYWxsYmFja10pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnNMaXN0KSB7XG4gICAgICBpZiAobXV0YXRpb25zTGlzdC5sZW5ndGgpIHVwZGF0ZUlubmVyVGV4dChyZWYpO1xuICAgIH0pO1xuICAgIGlmIChyZWYpIHtcbiAgICAgIHVwZGF0ZUlubmVyVGV4dChyZWYpO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShyZWYsIHtcbiAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9LCBbcmVmLCB1cGRhdGVJbm5lclRleHRdKTtcbiAgcmV0dXJuIFtzZXRSZWYsIGlubmVyVGV4dF07XG59XG5leHBvcnQgdmFyIEV1aUlubmVyVGV4dCA9IGZ1bmN0aW9uIEV1aUlubmVyVGV4dChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgZmFsbGJhY2sgPSBfcmVmLmZhbGxiYWNrO1xuICB2YXIgX3VzZUlubmVyVGV4dCA9IHVzZUlubmVyVGV4dChmYWxsYmFjayksXG4gICAgX3VzZUlubmVyVGV4dDIgPSBfc2xpY2VkVG9BcnJheShfdXNlSW5uZXJUZXh0LCAyKSxcbiAgICByZWYgPSBfdXNlSW5uZXJUZXh0MlswXSxcbiAgICBpbm5lclRleHQgPSBfdXNlSW5uZXJUZXh0MlsxXTtcbiAgcmV0dXJuIGNoaWxkcmVuKHJlZiwgaW5uZXJUZXh0KTtcbn07XG5FdWlJbm5lclRleHQucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZmFsbGJhY2s6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgc2hhZGUsIHRpbnQsIGRhcmtlbiwgdHJhbnNwYXJlbnRpemUsIG1ha2VIaWdoQ29udHJhc3RDb2xvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIG1hdGhXaXRoVW5pdHMsIGV1aUNhbkFuaW1hdGUsIGV1aUZvbnRTaXplIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpQnV0dG9uQ29sb3IgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5cbi8vIFRoZXJlIGFyZSBtdWx0aXBsZSBjb21wb25lbnRzIHRoYXQgb25seSBuZWVkIHRoZSBmb3JtIG1heC13aWR0aCBzaXplICZcbi8vIGRvbid0IG5lZWQgdGhlIGV4dHJhIG92ZXJoZWFkL2NvbG9yIGNvbXB1dGluZyBleHBlbnNlIG9mIGV2ZXJ5IGZvcm0gdmFyLlxuLy8gRm9yIG1pY3JvcGVyZiwgd2UncmUgbWFraW5nIHRoaXMgaXRzIG93biB1dGlsXG5leHBvcnQgdmFyIGV1aUZvcm1NYXhXaWR0aCA9IGZ1bmN0aW9uIGV1aUZvcm1NYXhXaWR0aChfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLnNpemUuYmFzZSwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4geCAqIDI1O1xuICB9KTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1WYXJpYWJsZXMgPSBmdW5jdGlvbiBldWlGb3JtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcbiAgdmFyIGlzQ29sb3JEYXJrID0gY29sb3JNb2RlID09PSAnREFSSyc7XG4gIHZhciBiYWNrZ3JvdW5kQ29sb3IgPSBpc0NvbG9yRGFyayA/IHNoYWRlKGV1aVRoZW1lLmNvbG9ycy5saWdodGVzdFNoYWRlLCAwLjQpIDogdGludChldWlUaGVtZS5jb2xvcnMubGlnaHRlc3RTaGFkZSwgMC42KTtcbiAgdmFyIGNvbnRyb2xIZWlnaHQgPSBldWlUaGVtZS5zaXplLnh4bDtcbiAgdmFyIGNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0ID0gZXVpVGhlbWUuc2l6ZS54bDtcbiAgdmFyIHNpemVzID0ge1xuICAgIG1heFdpZHRoOiBldWlGb3JtTWF4V2lkdGgoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBjb250cm9sSGVpZ2h0OiBjb250cm9sSGVpZ2h0LFxuICAgIGNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0OiBjb250cm9sQ29tcHJlc3NlZEhlaWdodCxcbiAgICBjb250cm9sUGFkZGluZzogZXVpVGhlbWUuc2l6ZS5tLFxuICAgIGNvbnRyb2xDb21wcmVzc2VkUGFkZGluZzogZXVpVGhlbWUuc2l6ZS5zLFxuICAgIGNvbnRyb2xCb3JkZXJSYWRpdXM6IGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLFxuICAgIGNvbnRyb2xDb21wcmVzc2VkQm9yZGVyUmFkaXVzOiBldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLFxuICAgIGljb25BZmZvcmRhbmNlOiBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLnNpemUuYmFzZSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICogMS41O1xuICAgIH0pLFxuICAgIGljb25Db21wcmVzc2VkQWZmb3JkYW5jZTogbWF0aFdpdGhVbml0cyhldWlUaGVtZS5zaXplLm0sIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAqIDEuNTtcbiAgICB9KVxuICB9O1xuICB2YXIgY29sb3JzID0ge1xuICAgIHRleHRDb2xvcjogZXVpVGhlbWUuY29sb3JzLnRleHQsXG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYmFja2dyb3VuZERpc2FibGVkQ29sb3I6IGRhcmtlbihldWlUaGVtZS5jb2xvcnMubGlnaHRlc3RTaGFkZSwgMC4wNSksXG4gICAgYmFja2dyb3VuZFJlYWRPbmx5Q29sb3I6IGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLFxuICAgIGJvcmRlckNvbG9yOiB0cmFuc3BhcmVudGl6ZShjb2xvck1vZGUgPT09ICdEQVJLJyA/IGV1aVRoZW1lLmNvbG9ycy5naG9zdCA6IGRhcmtlbihldWlUaGVtZS5ib3JkZXIuY29sb3IsIDQpLCAwLjEpLFxuICAgIGNvbnRyb2xEaXNhYmxlZENvbG9yOiBldWlUaGVtZS5jb2xvcnMubWVkaXVtU2hhZGUsXG4gICAgY29udHJvbEJveFNoYWRvdzogJzAgMCB0cmFuc3BhcmVudCcsXG4gICAgY29udHJvbFBsYWNlaG9sZGVyVGV4dDogbWFrZUhpZ2hDb250cmFzdENvbG9yKGV1aVRoZW1lLmNvbG9ycy5zdWJkdWVkVGV4dCkoYmFja2dyb3VuZENvbG9yKSxcbiAgICBhcHBlbmRQcmVwZW5kQmFja2dyb3VuZDogaXNDb2xvckRhcmsgPyBzaGFkZShldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSwgMC4xNSkgOiB0aW50KGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAwLjUpXG4gIH07XG4gIHZhciBjb250cm9sTGF5b3V0ID0ge1xuICAgIGNvbnRyb2xMYXlvdXRHcm91cElucHV0SGVpZ2h0OiBtYXRoV2l0aFVuaXRzKGNvbnRyb2xIZWlnaHQsIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAtIDI7XG4gICAgfSksXG4gICAgY29udHJvbExheW91dEdyb3VwSW5wdXRDb21wcmVzc2VkSGVpZ2h0OiBtYXRoV2l0aFVuaXRzKGNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0LCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggLSAyO1xuICAgIH0pLFxuICAgIGNvbnRyb2xMYXlvdXRHcm91cElucHV0Q29tcHJlc3NlZEJvcmRlclJhZGl1czogZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbFxuICB9O1xuICB2YXIgaWNvblNpemVzID0ge1xuICAgIGNvbnRyb2xJY29uU2l6ZToge1xuICAgICAgczogZXVpVGhlbWUuc2l6ZS5tLFxuICAgICAgbTogZXVpVGhlbWUuc2l6ZS5iYXNlLFxuICAgICAgbDogZXVpVGhlbWUuc2l6ZS5sLFxuICAgICAgeGw6IGV1aVRoZW1lLnNpemUueGwsXG4gICAgICB4eGw6IGV1aVRoZW1lLnNpemUueHhsXG4gICAgfVxuICB9O1xuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzaXplcyksIGNvbG9ycyksIGljb25TaXplcyksIGNvbnRyb2xMYXlvdXQpLCB7fSwge1xuICAgIGFuaW1hdGlvblRpbWluZzogXCJcIi5jb25jYXQoZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIGVhc2UtaW5cIilcbiAgfSk7XG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ29udHJvbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1Db250cm9sU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZm9ybSA9IGV1aUZvcm1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIHtcbiAgICBzaGFyZWQ6IFwiXFxuICAgICAgXCIuY29uY2F0KGV1aUZvcm1Db250cm9sVGV4dChldWlUaGVtZUNvbnRleHQpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQoZXVpRm9ybUNvbnRyb2xEZWZhdWx0U2hhZG93KGV1aVRoZW1lQ29udGV4dCksIFwiXFxuICAgIFwiKSxcbiAgICAvLyBTaXplc1xuICAgIHVuY29tcHJlc3NlZDogXCJcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0JywgZm9ybS5jb250cm9sSGVpZ2h0KSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCBmb3JtLmNvbnRyb2xQYWRkaW5nKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctbGVmdCcsIFwiY2FsYyhcIi5jb25jYXQoZm9ybS5jb250cm9sUGFkZGluZywgXCIgKyAoXCIpLmNvbmNhdChmb3JtLmljb25BZmZvcmRhbmNlLCBcIiAqIHZhcigtLWV1aUZvcm1Db250cm9sTGVmdEljb25zQ291bnQsIDApKSlcIikpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1yaWdodCcsIFwiY2FsYyhcIi5jb25jYXQoZm9ybS5jb250cm9sUGFkZGluZywgXCIgKyAoXCIpLmNvbmNhdChmb3JtLmljb25BZmZvcmRhbmNlLCBcIiAqIHZhcigtLWV1aUZvcm1Db250cm9sUmlnaHRJY29uc0NvdW50LCAwKSkpXCIpKSwgXCJcXG4gICAgICBib3JkZXItcmFkaXVzOiBcIikuY29uY2F0KGZvcm0uY29udHJvbEJvcmRlclJhZGl1cywgXCI7XFxuICAgIFwiKSxcbiAgICBjb21wcmVzc2VkOiBcIlxcbiAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCBmb3JtLmNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0KSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCBmb3JtLmNvbnRyb2xDb21wcmVzc2VkUGFkZGluZyksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBcImNhbGMoXCIuY29uY2F0KGZvcm0uY29udHJvbENvbXByZXNzZWRQYWRkaW5nLCBcIiArIChcIikuY29uY2F0KGZvcm0uaWNvbkNvbXByZXNzZWRBZmZvcmRhbmNlLCBcIiAqIHZhcigtLWV1aUZvcm1Db250cm9sTGVmdEljb25zQ291bnQsIDApKSlcIikpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1yaWdodCcsIFwiY2FsYyhcIi5jb25jYXQoZm9ybS5jb250cm9sQ29tcHJlc3NlZFBhZGRpbmcsIFwiICsgKFwiKS5jb25jYXQoZm9ybS5pY29uQ29tcHJlc3NlZEFmZm9yZGFuY2UsIFwiICogdmFyKC0tZXVpRm9ybUNvbnRyb2xSaWdodEljb25zQ291bnQsIDApKSlcIikpLCBcIlxcbiAgICAgIGJvcmRlci1yYWRpdXM6IFwiKS5jb25jYXQoZm9ybS5jb250cm9sQ29tcHJlc3NlZEJvcmRlclJhZGl1cywgXCI7XFxuICAgIFwiKSxcbiAgICAvLyBJbiBncm91cFxuICAgIGluR3JvdXA6IFwiXFxuICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiXFxuICAgICAgYm94LXNoYWRvdzogbm9uZTtcXG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xcbiAgICBcIiksXG4gICAgLy8gV2lkdGhzXG4gICAgZm9ybVdpZHRoOiBcIlxcbiAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCBmb3JtLm1heFdpZHRoKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCJcXG4gICAgXCIpLFxuICAgIGZ1bGxXaWR0aDogXCJcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCJcXG4gICAgXCIpLFxuICAgIC8vIFN0YXRlc1xuICAgIGludmFsaWQ6IGV1aUZvcm1Db250cm9sSW52YWxpZFN0eWxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIGZvY3VzOiBldWlGb3JtQ29udHJvbEZvY3VzU3R5bGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgZGlzYWJsZWQ6IGV1aUZvcm1Db250cm9sRGlzYWJsZWRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICByZWFkT25seTogZXVpRm9ybUNvbnRyb2xSZWFkT25seVN0eWxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIGF1dG9GaWxsOiBldWlGb3JtQ29udHJvbEF1dG9GaWxsU3R5bGVzKGV1aVRoZW1lQ29udGV4dClcbiAgfTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sVGV4dCA9IGZ1bmN0aW9uIGV1aUZvcm1Db250cm9sVGV4dChldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgX2V1aUZvbnRTaXplID0gZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLFxuICAgIGZvbnRTaXplID0gX2V1aUZvbnRTaXplLmZvbnRTaXplO1xuICB2YXIgZm9ybSA9IGV1aUZvcm1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIFwiXFxuICAgIGZvbnQtZmFtaWx5OiBcIi5jb25jYXQoZXVpVGhlbWUuZm9udC5mYW1pbHksIFwiO1xcbiAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZm9udFNpemUsIFwiO1xcbiAgICBjb2xvcjogXCIpLmNvbmNhdChmb3JtLnRleHRDb2xvciwgXCI7XFxuXFxuICAgIFwiKS5jb25jYXQoZXVpUGxhY2Vob2xkZXJQZXJCcm93c2VyKFwiXFxuICAgICAgY29sb3I6IFwiLmNvbmNhdChmb3JtLmNvbnRyb2xQbGFjZWhvbGRlclRleHQsIFwiO1xcbiAgICAgIG9wYWNpdHk6IDE7XFxuICAgIFwiKSksIFwiXFxuICBcIik7XG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ29udHJvbERlZmF1bHRTaGFkb3cgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbERlZmF1bHRTaGFkb3coZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgX3JlZjIkd2l0aEJvcmRlciA9IF9yZWYyLndpdGhCb3JkZXIsXG4gICAgd2l0aEJvcmRlciA9IF9yZWYyJHdpdGhCb3JkZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiR3aXRoQm9yZGVyLFxuICAgIF9yZWYyJHdpdGhCYWNrZ3JvdW5kID0gX3JlZjIud2l0aEJhY2tncm91bmQsXG4gICAgd2l0aEJhY2tncm91bmQgPSBfcmVmMiR3aXRoQmFja2dyb3VuZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJHdpdGhCYWNrZ3JvdW5kLFxuICAgIF9yZWYyJHdpdGhCYWNrZ3JvdW5kQyA9IF9yZWYyLndpdGhCYWNrZ3JvdW5kQ29sb3IsXG4gICAgd2l0aEJhY2tncm91bmRDb2xvciA9IF9yZWYyJHdpdGhCYWNrZ3JvdW5kQyA9PT0gdm9pZCAwID8gd2l0aEJhY2tncm91bmQgOiBfcmVmMiR3aXRoQmFja2dyb3VuZEMsXG4gICAgX3JlZjIkd2l0aEJhY2tncm91bmRBID0gX3JlZjIud2l0aEJhY2tncm91bmRBbmltYXRpb24sXG4gICAgd2l0aEJhY2tncm91bmRBbmltYXRpb24gPSBfcmVmMiR3aXRoQmFja2dyb3VuZEEgPT09IHZvaWQgMCA/IHdpdGhCYWNrZ3JvdW5kIDogX3JlZjIkd2l0aEJhY2tncm91bmRBO1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBmb3JtID0gZXVpRm9ybVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpO1xuXG4gIC8vIFdlIHVzZSBpbnNldCBib3gtc2hhZG93IGluc3RlYWQgb2YgYm9yZGVyIHRvIHNraXAgZXh0cmEgaGVpZ2h0IGNhbGN1bGF0aW9uc1xuICB2YXIgYm9yZGVyID0gXCJcXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCBcIi5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIFwiKS5jb25jYXQoZm9ybS5ib3JkZXJDb2xvciwgXCI7XFxuICBcIikudHJpbSgpO1xuICB2YXIgYmFja2dyb3VuZENvbG9yID0gXCJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogXCIuY29uY2F0KGZvcm0uYmFja2dyb3VuZENvbG9yLCBcIjtcXG4gIFwiKS50cmltKCk7XG4gIHZhciBiYWNrZ3JvdW5kR3JhZGllbnQgPSBcIlxcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDAlIDEwMCU7XFxuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsXFxuICAgICAgdmFyKC0tZXVpRm9ybUNvbnRyb2xTdGF0ZUNvbG9yKSxcXG4gICAgICB2YXIoLS1ldWlGb3JtQ29udHJvbFN0YXRlQ29sb3IpIFwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpY2ssIFwiLFxcbiAgICAgIHRyYW5zcGFyZW50IFwiKS5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaWNrLCBcIixcXG4gICAgICB0cmFuc3BhcmVudCAxMDAlXFxuICAgICk7XFxuICBcIikudHJpbSgpO1xuICB2YXIgYmFja2dyb3VuZEFuaW1hdGlvbiA9IFwiXFxuICAgIFwiLmNvbmNhdChldWlDYW5BbmltYXRlLCBcIiB7XFxuICAgICAgdHJhbnNpdGlvbjpcXG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2UgXCIpLmNvbmNhdChmb3JtLmFuaW1hdGlvblRpbWluZywgXCIsXFxuICAgICAgICBiYWNrZ3JvdW5kLXNpemUgXCIpLmNvbmNhdChmb3JtLmFuaW1hdGlvblRpbWluZywgXCIsXFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIFwiKS5jb25jYXQoZm9ybS5hbmltYXRpb25UaW1pbmcsIFwiO1xcbiAgICB9XFxuICBcIikudHJpbSgpO1xuICByZXR1cm4gXCJcXG4gICAgXCIuY29uY2F0KHdpdGhCb3JkZXIgPyBib3JkZXIgOiAnJywgXCJcXG4gICAgXCIpLmNvbmNhdCh3aXRoQmFja2dyb3VuZENvbG9yID8gYmFja2dyb3VuZENvbG9yIDogJycsIFwiXFxuICAgIFwiKS5jb25jYXQod2l0aEJhY2tncm91bmQgPyBiYWNrZ3JvdW5kR3JhZGllbnQgOiAnJywgXCJcXG4gICAgXCIpLmNvbmNhdCh3aXRoQmFja2dyb3VuZEFuaW1hdGlvbiA/IGJhY2tncm91bmRBbmltYXRpb24gOiAnJywgXCJcXG4gIFwiKTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sRm9jdXNTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbEZvY3VzU3R5bGVzKF9yZWYzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYzLmNvbG9yTW9kZTtcbiAgcmV0dXJuIFwiXFxuICAtLWV1aUZvcm1Db250cm9sU3RhdGVDb2xvcjogXCIuY29uY2F0KGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCBcIjtcXG4gIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQoY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSwgMC40KSA6IGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLCBcIjtcXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlO1xcbiAgb3V0bGluZTogbm9uZTsgLyogUmVtb3ZlIGFsbCBvdXRsaW5lcyBhbmQgcmVseSBvbiBvdXIgb3duIGJvdHRvbSBib3JkZXIgZ3JhZGllbnQgKi9cXG5cIik7XG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ29udHJvbEludmFsaWRTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbEludmFsaWRTdHlsZXMoX3JlZjQpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjQuZXVpVGhlbWU7XG4gIHJldHVybiBcIlxcbiAgLS1ldWlGb3JtQ29udHJvbFN0YXRlQ29sb3I6IFwiLmNvbmNhdChldWlUaGVtZS5jb2xvcnMuZGFuZ2VyLCBcIjtcXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlO1xcblwiKTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sRGlzYWJsZWRTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbERpc2FibGVkU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZm9ybSA9IGV1aUZvcm1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIFwiXFxuICAgIGNvbG9yOiBcIi5jb25jYXQoZm9ybS5jb250cm9sRGlzYWJsZWRDb2xvciwgXCI7XFxuICAgIC8qIFJlcXVpcmVkIGZvciBTYWZhcmkgKi9cXG4gICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IFwiKS5jb25jYXQoZm9ybS5jb250cm9sRGlzYWJsZWRDb2xvciwgXCI7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQoZm9ybS5iYWNrZ3JvdW5kRGlzYWJsZWRDb2xvciwgXCI7XFxuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICAgIC0tZXVpRm9ybUNvbnRyb2xTdGF0ZUNvbG9yOiB0cmFuc3BhcmVudDtcXG5cXG4gICAgXCIpLmNvbmNhdChldWlQbGFjZWhvbGRlclBlckJyb3dzZXIoXCJcXG4gICAgICBjb2xvcjogXCIuY29uY2F0KGZvcm0uY29udHJvbERpc2FibGVkQ29sb3IsIFwiO1xcbiAgICAgIG9wYWNpdHk6IDE7XFxuICAgIFwiKSksIFwiXFxuICBcIik7XG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ29udHJvbFJlYWRPbmx5U3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUNvbnRyb2xSZWFkT25seVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGZvcm0gPSBldWlGb3JtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHJldHVybiBcIlxcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XFxuICAgIGNvbG9yOiBcIi5jb25jYXQoZm9ybS50ZXh0Q29sb3IsIFwiO1xcbiAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogXCIpLmNvbmNhdChmb3JtLnRleHRDb2xvciwgXCI7IC8qIFJlcXVpcmVkIGZvciBTYWZhcmkgKi9cXG5cXG4gICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdChmb3JtLmJhY2tncm91bmRSZWFkT25seUNvbG9yLCBcIjtcXG4gICAgLS1ldWlGb3JtQ29udHJvbFN0YXRlQ29sb3I6IHRyYW5zcGFyZW50O1xcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUNvbnRyb2xBdXRvRmlsbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1Db250cm9sQXV0b0ZpbGxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuXG4gIC8vIE1ha2UgdGhlIHRleHQgY29sb3Igc2xpZ2h0bHkgbGVzcyBwcm9taW5lbnQgdGhhbiB0aGUgZGVmYXVsdCBjb2xvcnMudGV4dFxuICB2YXIgdGV4dENvbG9yID0gZXVpVGhlbWUuY29sb3JzLmRhcmtlc3RTaGFkZTtcbiAgdmFyIF9ldWlCdXR0b25Db2xvciA9IGV1aUJ1dHRvbkNvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ3ByaW1hcnknKSxcbiAgICBiYWNrZ3JvdW5kQ29sb3IgPSBfZXVpQnV0dG9uQ29sb3IuYmFja2dyb3VuZENvbG9yO1xuICB2YXIgdGludGVkQmFja2dyb3VuZENvbG9yID0gY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShiYWNrZ3JvdW5kQ29sb3IsIDAuNSkgOiB0aW50KGJhY2tncm91bmRDb2xvciwgMC43KTtcbiAgLy8gSGFja3kgd29ya2Fyb3VuZCB0byBiYWNrZ3JvdW5kLWNvbG9yLCBzaW5jZSBDaHJvbWUgZG9lc24ndCBub3JtYWxseSBhbGxvdyBvdmVycmlkaW5nIGl0cyBzdHlsZXNcbiAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvOmF1dG9maWxsI3NlY3QxXG4gIHZhciBiYWNrZ3JvdW5kU2hhZG93ID0gXCJpbnNldCAwIDAgMCAxMDB2dyBcIi5jb25jYXQodGludGVkQmFja2dyb3VuZENvbG9yKTtcblxuICAvLyBSZS1jcmVhdGUgdGhlIGJvcmRlciwgc2luY2UgdGhlIGFib3ZlIHdlYmtpdCBib3ggc2hhZG93IG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBib3JkZXIgYm94LXNoYWRvd1xuICAvLyArIGNoYW5nZSB0aGUgYm9yZGVyIGNvbG9yIHRvIG1hdGNoIHN0YXRlcywgc2luY2UgdGhlIHVuZGVybGluZSBiYWNrZ3JvdW5kIGdyYWRpZW50IG5vIGxvbmdlciB3b3Jrc1xuICB2YXIgYm9yZGVyQ29sb3IgPSB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMucHJpbWFyeVRleHQsIDAuMik7XG4gIHZhciBpbnZhbGlkQm9yZGVyID0gZXVpVGhlbWUuY29sb3JzLmRhbmdlcjtcbiAgdmFyIGJvcmRlclNoYWRvdyA9IGZ1bmN0aW9uIGJvcmRlclNoYWRvdyhjb2xvcikge1xuICAgIHJldHVybiBcImluc2V0IDAgMCAwIFwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgXCIpLmNvbmNhdChjb2xvcik7XG4gIH07XG5cbiAgLy8gVGhlc2Ugc3R5bGVzIG9ubHkgYXBwbHkvb3ZlcnJpZGUgQ2hyb21lL3dlYmtpdCBicm93c2VycyAtIEZpcmVmb3ggZG9lcyBub3Qgc2V0IGF1dG9maWxsIHN0eWxlc1xuICByZXR1cm4gXCJcXG4gICAgJjotd2Via2l0LWF1dG9maWxsIHtcXG4gICAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogXCIuY29uY2F0KHRleHRDb2xvciwgXCI7XFxuICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiBcIikuY29uY2F0KGJvcmRlclNoYWRvdyhib3JkZXJDb2xvciksIFwiLCBcIikuY29uY2F0KGJhY2tncm91bmRTaGFkb3csIFwiO1xcblxcbiAgICAgICY6aW52YWxpZCB7XFxuICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IFwiKS5jb25jYXQoYm9yZGVyU2hhZG93KGludmFsaWRCb3JkZXIpLCBcIiwgXCIpLmNvbmNhdChiYWNrZ3JvdW5kU2hhZG93LCBcIjtcXG4gICAgICB9XFxuICAgIH1cXG4gIFwiKTtcbn07XG52YXIgZXVpUGxhY2Vob2xkZXJQZXJCcm93c2VyID0gZnVuY3Rpb24gZXVpUGxhY2Vob2xkZXJQZXJCcm93c2VyKGNvbnRlbnQpIHtcbiAgcmV0dXJuIFwiXFxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsgXCIuY29uY2F0KGNvbnRlbnQsIFwiIH1cXG4gICY6Oi1tb3otcGxhY2Vob2xkZXIgeyBcIikuY29uY2F0KGNvbnRlbnQsIFwiIH1cXG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHsgXCIpLmNvbmNhdChjb250ZW50LCBcIiB9XFxuICAmOi1tb3otcGxhY2Vob2xkZXIgeyBcIikuY29uY2F0KGNvbnRlbnQsIFwiIH1cXG4gICY6OnBsYWNlaG9sZGVyIHsgXCIpLmNvbmNhdChjb250ZW50LCBcIiB9XFxuXCIpO1xufTtcblxuLyoqXG4gKiBTZWxlY3Rpb24gY3VzdG9tIGNvbnRyb2xzIC0gY2hlY2tib3hlcywgcmFkaW9zLCBhbmQgc3dpdGNoZXNcbiAqL1xuXG5leHBvcnQgdmFyIGV1aUZvcm1DdXN0b21Db250cm9sVmFyaWFibGVzID0gZnVuY3Rpb24gZXVpRm9ybUN1c3RvbUNvbnRyb2xWYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICB2YXIgc2l6ZXMgPSB7XG4gICAgY29udHJvbDogZXVpVGhlbWUuc2l6ZS5iYXNlLFxuICAgIGxpbmVIZWlnaHQ6IGV1aVRoZW1lLnNpemUubCxcbiAgICBsYWJlbEdhcDogZXVpVGhlbWUuc2l6ZS5zXG4gIH07XG4gIHZhciBjb2xvcnMgPSB7XG4gICAgdW5zZWxlY3RlZDogZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsXG4gICAgdW5zZWxlY3RlZEJvcmRlcjogY29sb3JNb2RlID09PSAnREFSSycgPyB0aW50KGV1aVRoZW1lLmNvbG9ycy5saWdodGVzdFNoYWRlLCAwLjMxKSAvLyBXQ0FHIEFBIHJlcXVpcmVtZW50c1xuICAgIDogc2hhZGUoZXVpVGhlbWUuY29sb3JzLmxpZ2h0ZXN0U2hhZGUsIDAuNCksXG4gICAgc2VsZWN0ZWQ6IGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LFxuICAgIHNlbGVjdGVkSWNvbjogZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsXG4gICAgZGlzYWJsZWQ6IGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLFxuICAgIGRpc2FibGVkSWNvbjogZXVpVGhlbWUuY29sb3JzLmRhcmtTaGFkZSxcbiAgICBkaXNhYmxlZExhYmVsOiBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0IC8vIExpZ2h0ZXIgdGhhbiBmb3JtVmFycy5kaXNhYmxlZENvbG9yIGJlY2F1c2UgaXQgdHlwaWNhbGx5IGRvZXNuJ3QgaGF2ZSBhcyBkYXJrIGEgYmFja2dyb3VuZFxuICB9O1xuICB2YXIgYW5pbWF0aW9uID0ge1xuICAgIHNwZWVkOiBldWlUaGVtZS5hbmltYXRpb24uZmFzdCxcbiAgICBlYXNpbmc6ICdlYXNlLWluJ1xuICB9O1xuICByZXR1cm4ge1xuICAgIHNpemVzOiBzaXplcyxcbiAgICBjb2xvcnM6IGNvbG9ycyxcbiAgICBhbmltYXRpb246IGFuaW1hdGlvblxuICB9O1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUN1c3RvbUNvbnRyb2xTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ3VzdG9tQ29udHJvbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgY29udHJvbFZhcnMgPSBldWlGb3JtQ3VzdG9tQ29udHJvbFZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgY2VudGVyV2l0aExhYmVsID0gbWF0aFdpdGhVbml0cyhbY29udHJvbFZhcnMuc2l6ZXMubGluZUhlaWdodCwgY29udHJvbFZhcnMuc2l6ZXMuY29udHJvbF0sIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgcmV0dXJuICh4IC0geSkgLyAyO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB3cmFwcGVyOiBcIlxcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAgIFwiLFxuICAgIGlucHV0OiB7XG4gICAgICBmYXV4SW5wdXQ6IFwiXFxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICBcIi5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0JywgY29udHJvbFZhcnMuc2l6ZXMuY29udHJvbCksIFwiXFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgY29udHJvbFZhcnMuc2l6ZXMuY29udHJvbCksIFwiXFxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcblxcbiAgICAgICAgJjpoYXMoaW5wdXQ6Zm9jdXMtdmlzaWJsZSkge1xcbiAgICAgICAgICBvdXRsaW5lOiBcIikuY29uY2F0KGV1aVRoZW1lLmZvY3VzLndpZHRoLCBcIiBzb2xpZCBcIikuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy5zZWxlY3RlZCwgXCI7XFxuICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiBcIikuY29uY2F0KGV1aVRoZW1lLmZvY3VzLndpZHRoLCBcIjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIFwiKS5jb25jYXQoZXVpQ2FuQW5pbWF0ZSwgXCIge1xcbiAgICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yLCBjb2xvcjtcXG4gICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogXCIpLmNvbmNhdChjb250cm9sVmFycy5hbmltYXRpb24uc3BlZWQsIFwiO1xcbiAgICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogXCIpLmNvbmNhdChjb250cm9sVmFycy5hbmltYXRpb24uZWFzaW5nLCBcIjtcXG4gICAgICAgIH1cXG4gICAgICBcIiksXG4gICAgICAvLyBUT0RPOiBSZXZlcnQgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvNzk4MVxuICAgICAgLy8gb25jZSBodHRwczovL2dpdGh1Yi5jb20vZHBlcmluaS9ud3NhcGkvaXNzdWVzLzEyM1xuICAgICAgLy8gaGFzIGJlZW4gZml4ZWQsIGFuZCByZXN0b3JlIGAmOmhhcygrIGxhYmVsKWAgc2VsZWN0b3JcbiAgICAgIGhhc0xhYmVsOiBcIlxcbiAgICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBjZW50ZXJXaXRoTGFiZWwpLCBcIlxcbiAgICAgIFwiKSxcbiAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgc2VsZWN0ZWQ6IFwiXFxuICAgICAgICAgIGNvbG9yOiBcIi5jb25jYXQoY29udHJvbFZhcnMuY29sb3JzLnNlbGVjdGVkSWNvbiwgXCI7XFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQoY29udHJvbFZhcnMuY29sb3JzLnNlbGVjdGVkLCBcIjtcXG4gICAgICAgIFwiKSxcbiAgICAgICAgdW5zZWxlY3RlZDogXCJcXG4gICAgICAgICAgY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIi5jb25jYXQoY29udHJvbFZhcnMuY29sb3JzLnVuc2VsZWN0ZWQsIFwiO1xcbiAgICAgICAgICBib3JkZXI6IFwiKS5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIFwiKS5jb25jYXQoY29udHJvbFZhcnMuY29sb3JzLnVuc2VsZWN0ZWRCb3JkZXIsIFwiO1xcblxcbiAgICAgICAgICAmOmhhcyhpbnB1dDpmb2N1cykge1xcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogXCIpLmNvbmNhdChjb250cm9sVmFycy5jb2xvcnMuc2VsZWN0ZWQsIFwiO1xcbiAgICAgICAgICB9XFxuICAgICAgICBcIilcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlZDoge1xuICAgICAgICBzZWxlY3RlZDogXCJcXG4gICAgICAgICAgbGFiZWw6IGRpc2FibGVkO1xcbiAgICAgICAgICBjb2xvcjogXCIuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy5kaXNhYmxlZEljb24sIFwiO1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIikuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy5kaXNhYmxlZCwgXCI7XFxuICAgICAgICBcIiksXG4gICAgICAgIHVuc2VsZWN0ZWQ6IFwiXFxuICAgICAgICAgIGxhYmVsOiBkaXNhYmxlZDtcXG4gICAgICAgICAgY29sb3I6IFwiLmNvbmNhdChjb250cm9sVmFycy5jb2xvcnMuZGlzYWJsZWQsIFwiO1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIikuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy5kaXNhYmxlZCwgXCI7XFxuICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICAgICAgICBcIilcbiAgICAgIH0sXG4gICAgICAvLyBMb29rcyBiZXR0ZXIgY2VudGVyZWQgYXQgZGlmZmVyZW50IHpvb20gbGV2ZWxzIHRoYW4ganVzdCA8RXVpSWNvbiBzaXplPVwic1wiIC8+XG4gICAgICBpY29uOiBcIlxcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KTtcXG4gICAgICBcIixcbiAgICAgIC8vIEhpZGRlbiBpbnB1dCBzaXRzIG9uIHRvcCBvZiB0aGUgdmlzaWJsZSBlbGVtZW50XG4gICAgICBoaWRkZW5JbnB1dDogXCJcXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIGluc2V0OiAwO1xcbiAgICAgICAgb3BhY2l0eTogMCAhaW1wb3J0YW50O1xcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcblxcbiAgICAgICAgJjpkaXNhYmxlZCB7XFxuICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICAgICAgICB9XFxuICAgICAgXCJcbiAgICB9LFxuICAgIGxhYmVsOiB7XG4gICAgICBsYWJlbDogXCJcXG4gICAgICAgIC8qIE5lZWRzIHRvIHVzZSBwYWRkaW5nIGFuZCBub3QgZmxleCBnYXAgZm9yIGV4dHJhIG1vdXNlIGNsaWNrIGFyZWEgKi9cXG4gICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBjb250cm9sVmFycy5zaXplcy5sYWJlbEdhcCksIFwiXFxuICAgICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChjb250cm9sVmFycy5zaXplcy5saW5lSGVpZ2h0LCBcIjtcXG4gICAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJykuZm9udFNpemUsIFwiO1xcbiAgICAgIFwiKSxcbiAgICAgIGVuYWJsZWQ6IFwiXFxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgXCIsXG4gICAgICBkaXNhYmxlZDogXCJcXG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICAgICAgICBjb2xvcjogXCIuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy5kaXNhYmxlZExhYmVsLCBcIjtcXG4gICAgICBcIilcbiAgICB9XG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJhbmNob3JDbGFzc05hbWVcIiwgXCJhbmNob3JQcm9wc1wiLCBcImNvbnRlbnRcIiwgXCJ0aXRsZVwiLCBcImRlbGF5XCIsIFwiZGlzcGxheVwiLCBcInJlcG9zaXRpb25PblNjcm9sbFwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGZpbmRQb3BvdmVyUG9zaXRpb24sIGh0bWxJZEdlbmVyYXRvciwga2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGVucXVldWVTdGF0ZUNoYW5nZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlYWN0JztcbmltcG9ydCB7IEV1aVJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyJztcbmltcG9ydCB7IEV1aVBvcnRhbCB9IGZyb20gJy4uL3BvcnRhbCc7XG5pbXBvcnQgeyBFdWlUb29sVGlwUG9wb3ZlciB9IGZyb20gJy4vdG9vbF90aXBfcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlUb29sVGlwQW5jaG9yIH0gZnJvbSAnLi90b29sX3RpcF9hbmNob3InO1xuaW1wb3J0IHsgRXVpVG9vbFRpcEFycm93IH0gZnJvbSAnLi90b29sX3RpcF9hcnJvdyc7XG5pbXBvcnQgeyB0b29sVGlwTWFuYWdlciB9IGZyb20gJy4vdG9vbF90aXBfbWFuYWdlcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBQT1NJVElPTlMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xudmFyIERJU1BMQVlTID0gWydpbmxpbmVCbG9jaycsICdibG9jayddO1xudmFyIGRlbGF5VG9Nc01hcCA9IHtcbiAgcmVndWxhcjogMjUwLFxuICBsb25nOiAyNTAgKiA1XG59O1xudmFyIERFRkFVTFRfVE9PTFRJUF9TVFlMRVMgPSB7XG4gIC8vIHBvc2l0aW9uIHRoZSB0b29sdGlwIGNvbnRlbnQgbmVhciB0aGUgdG9wLWxlZnRcbiAgLy8gY29ybmVyIG9mIHRoZSB3aW5kb3cgc28gaXQgY2FuJ3QgY3JlYXRlIHNjcm9sbGJhcnNcbiAgLy8gNTAsNTAgYmVjYXVzZSB3aG8ga25vd3Mgd2hhdCBuZWdhdGl2ZSBtYXJnaW5zLCBwYWRkaW5nLCBldGNcbiAgdG9wOiA1MCxcbiAgbGVmdDogNTAsXG4gIC8vIGp1c3QgaW4gY2FzZSwgYXZvaWQgYW55IHBvdGVudGlhbCBmbGlja2VyIGJ5IGhpZGluZ1xuICAvLyB0aGUgdG9vbHRpcCBiZWZvcmUgaXQgaXMgcG9zaXRpb25lZFxuICBvcGFjaXR5OiAwLFxuICAvLyBwcmV2ZW50IGFjY2lkZW50YWwgbW91c2UgaW50ZXJhY3Rpb24gd2hpbGUgcG9zaXRpb25pbmdcbiAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbn07XG5leHBvcnQgdmFyIEV1aVRvb2xUaXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpVG9vbFRpcCgpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVRvb2xUaXApO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aVRvb2xUaXAsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIl9pc01vdW50ZWRcIiwgZmFsc2UpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJhbmNob3JcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInBvcG92ZXJcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRpbWVvdXRJZFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzdGF0ZVwiLCB7XG4gICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZSxcbiAgICAgIGNhbGN1bGF0ZWRQb3NpdGlvbjogX3RoaXMucHJvcHMucG9zaXRpb24sXG4gICAgICB0b29sVGlwU3R5bGVzOiBERUZBVUxUX1RPT0xUSVBfU1RZTEVTLFxuICAgICAgYXJyb3dTdHlsZXM6IHVuZGVmaW5lZCxcbiAgICAgIGlkOiBfdGhpcy5wcm9wcy5pZCB8fCBodG1sSWRHZW5lcmF0b3IoKSgpXG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNsZWFyQW5pbWF0aW9uVGltZW91dFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMudGltZW91dElkKSB7XG4gICAgICAgIF90aGlzLnRpbWVvdXRJZCA9IGNsZWFyVGltZW91dChfdGhpcy50aW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0ZXN0QW5jaG9yXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHdoZW4gdGhlIHRvb2x0aXAgaXMgdmlzaWJsZSwgdGhpcyBjaGVja3MgaWYgdGhlIGFuY2hvciBpcyBzdGlsbCBwYXJ0IG9mIGRvY3VtZW50XG4gICAgICAvLyB0aGlzIGZpeGVzIHdoZW4gdGhlIHJlYWN0IHJvb3QgaXMgcmVtb3ZlZCBmcm9tIHRoZSBkb20gd2l0aG91dCB1bm1vdW50aW5nXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzExMDVcbiAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNvbnRhaW5zKF90aGlzLmFuY2hvcikgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIHRoZSBhbmNob3IgaXMgbm8gbG9uZ2VyIHBhcnQgb2YgYGRvY3VtZW50YFxuICAgICAgICBfdGhpcy5oaWRlVG9vbFRpcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKF90aGlzLnN0YXRlLnZpc2libGUpIHtcbiAgICAgICAgICAvLyBpZiBzdGlsbCB2aXNpYmxlLCBrZWVwIGNoZWNraW5nXG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLnRlc3RBbmNob3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNldEFuY2hvclJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICByZXR1cm4gX3RoaXMuYW5jaG9yID0gcmVmO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZXRQb3BvdmVyUmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIHJldHVybiBfdGhpcy5wb3BvdmVyID0gcmVmO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzaG93VG9vbFRpcFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIV90aGlzLnRpbWVvdXRJZCkge1xuICAgICAgICBfdGhpcy50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbnF1ZXVlU3RhdGVDaGFuZ2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRvb2xUaXBNYW5hZ2VyLnJlZ2lzdGVyVG9vbHRpcChfdGhpcy5oaWRlVG9vbFRpcCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGRlbGF5VG9Nc01hcFtfdGhpcy5wcm9wcy5kZWxheV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwb3NpdGlvblRvb2xUaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlcXVlc3RlZFBvc2l0aW9uID0gX3RoaXMucHJvcHMucG9zaXRpb247XG4gICAgICBpZiAoIV90aGlzLmFuY2hvciB8fCAhX3RoaXMucG9wb3Zlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgX2ZpbmRQb3BvdmVyUG9zaXRpb24gPSBmaW5kUG9wb3ZlclBvc2l0aW9uKHtcbiAgICAgICAgICBhbmNob3I6IF90aGlzLmFuY2hvcixcbiAgICAgICAgICBwb3BvdmVyOiBfdGhpcy5wb3BvdmVyLFxuICAgICAgICAgIHBvc2l0aW9uOiByZXF1ZXN0ZWRQb3NpdGlvbixcbiAgICAgICAgICBvZmZzZXQ6IDE2LFxuICAgICAgICAgIC8vIG9mZnNldCBwb3BvdmVyIDE2cHggZnJvbSB0aGUgYW5jaG9yXG4gICAgICAgICAgYXJyb3dDb25maWc6IHtcbiAgICAgICAgICAgIGFycm93V2lkdGg6IDEyLFxuICAgICAgICAgICAgYXJyb3dCdWZmZXI6IDRcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBwb3NpdGlvbiA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLnBvc2l0aW9uLFxuICAgICAgICBsZWZ0ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24ubGVmdCxcbiAgICAgICAgdG9wID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24udG9wLFxuICAgICAgICBhcnJvdyA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLmFycm93O1xuXG4gICAgICAvLyBJZiBlbmNyb2FjaGluZyB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgd2luZG93OlxuICAgICAgLy8gV2hlbiBgcHJvcHMuY29udGVudGAgY2hhbmdlcyBhbmQgaXMgbG9uZ2VyIHRoYW4gYHByZXZQcm9wcy5jb250ZW50YCwgdGhlIHRvb2x0aXAgd2lkdGggcmVtYWlucyBhbmRcbiAgICAgIC8vIHRoZSByZXNpemVPYnNlcnZlciBjYWxsYmFjayB3aWxsIGZpcmUgdHdpY2UgKG9uY2UgZm9yIHZlcnRpY2FsIHJlc2l6ZSBjYXVzZWQgYnkgdGV4dCBsaW5lIHdyYXBwaW5nLFxuICAgICAgLy8gb25jZSBmb3IgYSBzdWJzZXF1ZW50IHBvc2l0aW9uIGNvcnJlY3Rpb24pIGFuZCBjYXVzZSBhIGZsYXNoIHJlcmVuZGVyIGFuZCByZXBvc2l0aW9uLlxuICAgICAgLy8gVG8gcHJldmVudCB0aGlzLCB3ZSBjYW4gb3JpZW50IGZyb20gdGhlIHJpZ2h0IHNvIHRoYXQgdGV4dCBsaW5lIHdyYXBwaW5nIGRvZXMgbm90IG9jY3VyLCBuZWdhdGluZ1xuICAgICAgLy8gdGhlIHNlY29uZCByZXNpemVPYnNlcnZlciBjYWxsYmFjayBjYWxsLlxuICAgICAgdmFyIHdpbmRvd1dpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgdmFyIHVzZVJpZ2h0VmFsdWUgPSB3aW5kb3dXaWR0aCAvIDIgPCBsZWZ0O1xuICAgICAgdmFyIHRvb2xUaXBTdHlsZXMgPSB7XG4gICAgICAgIHRvcDogdG9wLFxuICAgICAgICBsZWZ0OiB1c2VSaWdodFZhbHVlID8gJ2F1dG8nIDogbGVmdCxcbiAgICAgICAgcmlnaHQ6IHVzZVJpZ2h0VmFsdWUgPyB3aW5kb3dXaWR0aCAtIGxlZnQgLSBfdGhpcy5wb3BvdmVyLm9mZnNldFdpZHRoIDogJ2F1dG8nXG4gICAgICB9O1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBjYWxjdWxhdGVkUG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICB0b29sVGlwU3R5bGVzOiB0b29sVGlwU3R5bGVzLFxuICAgICAgICBhcnJvd1N0eWxlczogYXJyb3dcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJoaWRlVG9vbFRpcFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5jbGVhckFuaW1hdGlvblRpbWVvdXQoKTtcbiAgICAgIGVucXVldWVTdGF0ZUNoYW5nZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5faXNNb3VudGVkKSB7XG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICB0b29sVGlwU3R5bGVzOiBERUZBVUxUX1RPT0xUSVBfU1RZTEVTLFxuICAgICAgICAgICAgYXJyb3dTdHlsZXM6IHVuZGVmaW5lZFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRvb2xUaXBNYW5hZ2VyLmRlcmVnaXN0ZXJUb29sVGlwKF90aGlzLmhpZGVUb29sVGlwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBfdGhpcy5zaG93VG9vbFRpcCgpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkJsdXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuaGlkZVRvb2xUaXAoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Fc2NhcGVLZXlcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkVTQ0FQRSkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pOyAvLyBBbGxvd3MgbW91c2luZyBvdmVyIGJhY2sgaW50byB0aGUgdG9vbHRpcCB0byB3b3JrIGNvcnJlY3RseVxuICAgICAgICBfdGhpcy5oaWRlVG9vbFRpcCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbk1vdXNlT3V0XCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gUHJldmVudCBtb3VzaW5nIG92ZXIgY2hpbGRyZW4gZnJvbSBoaWRpbmcgdGhlIHRvb2x0aXAgYnkgdGVzdGluZyBmb3Igd2hldGhlciB0aGUgbW91c2UgaGFzXG4gICAgICAvLyBsZWZ0IHRoZSBhbmNob3IgZm9yIGEgbm9uLWNoaWxkLlxuICAgICAgaWYgKF90aGlzLmFuY2hvciA9PT0gZXZlbnQucmVsYXRlZFRhcmdldCB8fCBfdGhpcy5hbmNob3IgIT0gbnVsbCAmJiAhX3RoaXMuYW5jaG9yLmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgIGlmICghX3RoaXMuc3RhdGUuaGFzRm9jdXMpIHtcbiAgICAgICAgICBfdGhpcy5oaWRlVG9vbFRpcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoX3RoaXMucHJvcHMub25Nb3VzZU91dCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbk1vdXNlT3V0KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aVRvb2xUaXAsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aVRvb2xUaXAsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLnByb3BzLnJlcG9zaXRpb25PblNjcm9sbCkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblRvb2xUaXAsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuY2xlYXJBbmltYXRpb25UaW1lb3V0KCk7XG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uVG9vbFRpcCwgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIGlmIChwcmV2U3RhdGUudmlzaWJsZSA9PT0gZmFsc2UgJiYgdGhpcy5zdGF0ZS52aXNpYmxlID09PSB0cnVlKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnRlc3RBbmNob3IpO1xuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGUgc2Nyb2xsIGxpc3RlbmVyXG4gICAgICBpZiAocHJldlByb3BzLnJlcG9zaXRpb25PblNjcm9sbCAhPT0gdGhpcy5wcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Ub29sVGlwLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblRvb2xUaXAsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIGFuY2hvckNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmFuY2hvckNsYXNzTmFtZSxcbiAgICAgICAgYW5jaG9yUHJvcHMgPSBfdGhpcyRwcm9wcy5hbmNob3JQcm9wcyxcbiAgICAgICAgY29udGVudCA9IF90aGlzJHByb3BzLmNvbnRlbnQsXG4gICAgICAgIHRpdGxlID0gX3RoaXMkcHJvcHMudGl0bGUsXG4gICAgICAgIGRlbGF5ID0gX3RoaXMkcHJvcHMuZGVsYXksXG4gICAgICAgIGRpc3BsYXkgPSBfdGhpcyRwcm9wcy5kaXNwbGF5LFxuICAgICAgICByZXBvc2l0aW9uT25TY3JvbGwgPSBfdGhpcyRwcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBhcnJvd1N0eWxlcyA9IF90aGlzJHN0YXRlLmFycm93U3R5bGVzLFxuICAgICAgICBpZCA9IF90aGlzJHN0YXRlLmlkLFxuICAgICAgICB0b29sVGlwU3R5bGVzID0gX3RoaXMkc3RhdGUudG9vbFRpcFN0eWxlcyxcbiAgICAgICAgdmlzaWJsZSA9IF90aGlzJHN0YXRlLnZpc2libGUsXG4gICAgICAgIGNhbGN1bGF0ZWRQb3NpdGlvbiA9IF90aGlzJHN0YXRlLmNhbGN1bGF0ZWRQb3NpdGlvbjtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVG9vbFRpcCcsIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgYW5jaG9yQ2xhc3NlcyA9IGNsYXNzTmFtZXMoYW5jaG9yQ2xhc3NOYW1lLCBhbmNob3JQcm9wcyA9PT0gbnVsbCB8fCBhbmNob3JQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYW5jaG9yUHJvcHMuY2xhc3NOYW1lKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXBBbmNob3IsIF9leHRlbmRzKHt9LCBhbmNob3JQcm9wcywge1xuICAgICAgICByZWY6IHRoaXMuc2V0QW5jaG9yUmVmLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBvbkZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5vbkVzY2FwZUtleSxcbiAgICAgICAgb25Nb3VzZU92ZXI6IHRoaXMuc2hvd1Rvb2xUaXAsXG4gICAgICAgIG9uTW91c2VPdXQ6IHRoaXMub25Nb3VzZU91dCxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBjbGFzc05hbWU6IGFuY2hvckNsYXNzZXMsXG4gICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXG4gICAgICAgIGlzVmlzaWJsZTogdmlzaWJsZVxuICAgICAgfSksIGNoaWxkcmVuKSwgdmlzaWJsZSAmJiAoY29udGVudCB8fCB0aXRsZSkgJiYgX19fRW1vdGlvbkpTWChFdWlQb3J0YWwsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcFBvcG92ZXIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBzdHlsZTogdG9vbFRpcFN0eWxlcyxcbiAgICAgICAgcG9zaXRpb25Ub29sVGlwOiB0aGlzLnBvc2l0aW9uVG9vbFRpcCxcbiAgICAgICAgcG9wb3ZlclJlZjogdGhpcy5zZXRQb3BvdmVyUmVmLFxuICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgcm9sZTogXCJ0b29sdGlwXCIsXG4gICAgICAgIGNhbGN1bGF0ZWRQb3NpdGlvbjogY2FsY3VsYXRlZFBvc2l0aW9uXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlUb29sVGlwQXJyb3csIHtcbiAgICAgICAgc3R5bGU6IGFycm93U3R5bGVzLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpVG9vbFRpcF9fYXJyb3dcIixcbiAgICAgICAgcG9zaXRpb246IGNhbGN1bGF0ZWRQb3NpdGlvblxuICAgICAgfSksIF9fX0Vtb3Rpb25KU1goRXVpUmVzaXplT2JzZXJ2ZXIsIHtcbiAgICAgICAgb25SZXNpemU6IHRoaXMucG9zaXRpb25Ub29sVGlwXG4gICAgICB9LCBmdW5jdGlvbiAocmVzaXplUmVmKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICByZWY6IHJlc2l6ZVJlZlxuICAgICAgICB9LCBjb250ZW50KTtcbiAgICAgIH0pKSkpO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aVRvb2xUaXAsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgcG9zaXRpb246ICd0b3AnLFxuICBkZWxheTogJ3JlZ3VsYXInLFxuICBkaXNwbGF5OiAnaW5saW5lQmxvY2snXG59KTtcbkV1aVRvb2xUaXAucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgc3BhbiB3cmFwcGluZyB0aGUgdHJpZ2dlci5cbiAgICAgKi9cbiAgYW5jaG9yQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgc3BhbiB3cmFwcGluZyB0aGUgdHJpZ2dlci5cbiAgICAgKi9cbiAgYW5jaG9yUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIC8qKlxuICAgICAqIFRoZSBpbi12aWV3IHRyaWdnZXIgZm9yIHlvdXIgdG9vbHRpcC5cbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSB0b29sdGlwIGl0c2VsZiwgbm90IHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFRoZSBtYWluIGNvbnRlbnQgb2YgeW91ciB0b29sdGlwLlxuICAgICAqL1xuICBjb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogQ29tbW9uIGRpc3BsYXkgYWx0ZXJuYXRpdmVzIGZvciB0aGUgYW5jaG9yIHdyYXBwZXJcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogRGVsYXkgYmVmb3JlIHNob3dpbmcgdG9vbHRpcC4gR29vZCBmb3IgcmVwZWF0YWJsZSBpdGVtcy5cbiAgICAgKi9cbiAgZGVsYXk6IFByb3BUeXBlcy5vbmVPZihbXCJyZWd1bGFyXCIsIFwibG9uZ1wiXSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgdGl0bGUgZm9yIHlvdXIgdG9vbHRpcC5cbiAgICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBVbmxlc3MgeW91IHByb3ZpZGUgb25lLCB0aGlzIHdpbGwgYmUgcmFuZG9tbHkgZ2VuZXJhdGVkLlxuICAgICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogU3VnZ2VzdGVkIHBvc2l0aW9uLiBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20gZm9yIGl0IHRoaXMgd2lsbCBiZSBjaGFuZ2VkLlxuICAgICAqL1xuICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAsIHRoZSB0b29sdGlwJ3MgcG9zaXRpb24gaXMgcmUtY2FsY3VsYXRlZCB3aGVuIHRoZSB1c2VyXG4gICAgICogc2Nyb2xscy4gVGhpcyBzdXBwb3J0cyBoYXZpbmcgZml4ZWQtcG9zaXRpb24gdG9vbHRpcCBhbmNob3JzLlxuICAgICAqXG4gICAgICogV2hlbiBuZXN0aW5nIGFuIGBFdWlUb29sdGlwYCBpbiBhIHNjcm9sbGFibGUgY29udGFpbmVyLCBgcmVwb3NpdGlvbk9uU2Nyb2xsYCBzaG91bGQgYmUgYHRydWVgXG4gICAgICovXG4gIHJlcG9zaXRpb25PblNjcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIElmIHN1cHBsaWVkLCBjYWxsZWQgd2hlbiBtb3VzZSBtb3ZlbWVudCBjYXVzZXMgdGhlIHRvb2wgdGlwIHRvIGJlXG4gICAgICogaGlkZGVuLlxuICAgICAqL1xuICBvbk1vdXNlT3V0OiBQcm9wVHlwZXMuZnVuYyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlcic7XG5leHBvcnQgdmFyIGhhc1Jlc2l6ZU9ic2VydmVyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5SZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgdmFyIEV1aVJlc2l6ZU9ic2VydmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRXVpT2JzZXJ2ZXIpIHtcbiAgZnVuY3Rpb24gRXVpUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlSZXNpemVPYnNlcnZlcik7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpUmVzaXplT2JzZXJ2ZXIsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm5hbWVcIiwgJ0V1aVJlc2l6ZU9ic2VydmVyJyk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0YXRlXCIsIHtcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIHdpZHRoOiAwXG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uUmVzaXplXCIsIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgICAgZW50cnkgPSBfcmVmMlswXTtcbiAgICAgIHZhciBfZW50cnkkYm9yZGVyQm94U2l6ZSQgPSBlbnRyeS5ib3JkZXJCb3hTaXplWzBdLFxuICAgICAgICB3aWR0aCA9IF9lbnRyeSRib3JkZXJCb3hTaXplJC5pbmxpbmVTaXplLFxuICAgICAgICBoZWlnaHQgPSBfZW50cnkkYm9yZGVyQm94U2l6ZSQuYmxvY2tTaXplO1xuXG4gICAgICAvLyBDaGVjayBmb3IgYWN0dWFsIHJlc2l6ZSBldmVudFxuICAgICAgaWYgKF90aGlzLnN0YXRlLmhlaWdodCA9PT0gaGVpZ2h0ICYmIF90aGlzLnN0YXRlLndpZHRoID09PSB3aWR0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBfdGhpcy5wcm9wcy5vblJlc2l6ZSh7XG4gICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICB3aWR0aDogd2lkdGhcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYmVnaW5PYnNlcnZlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRoZSBzdXBlcmNsYXNzIGNoZWNrcyB0aGF0IGNoaWxkTm9kZSBpcyBub3QgbnVsbCBiZWZvcmUgaW52b2tpbmdcbiAgICAgIC8vIGJlZ2luT2JzZXJ2ZSgpXG4gICAgICB2YXIgY2hpbGROb2RlID0gX3RoaXMuY2hpbGROb2RlO1xuICAgICAgX3RoaXMub2JzZXJ2ZXIgPSBtYWtlUmVzaXplT2JzZXJ2ZXIoY2hpbGROb2RlLCBfdGhpcy5vblJlc2l6ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlSZXNpemVPYnNlcnZlciwgX0V1aU9ic2VydmVyKTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlSZXNpemVPYnNlcnZlcik7XG59KEV1aU9ic2VydmVyKTtcbnZhciBtYWtlUmVzaXplT2JzZXJ2ZXIgPSBmdW5jdGlvbiBtYWtlUmVzaXplT2JzZXJ2ZXIobm9kZSwgY2FsbGJhY2spIHtcbiAgdmFyIG9ic2VydmVyO1xuICBpZiAoaGFzUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICBvYnNlcnZlciA9IG5ldyB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICAgIG9ic2VydmVyLm9ic2VydmUobm9kZSk7XG4gIH1cbiAgcmV0dXJuIG9ic2VydmVyO1xufTtcbmV4cG9ydCB2YXIgdXNlUmVzaXplT2JzZXJ2ZXIgPSBmdW5jdGlvbiB1c2VSZXNpemVPYnNlcnZlcihjb250YWluZXIsIGRpbWVuc2lvbikge1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoe1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9KSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBzaXplID0gX3VzZVN0YXRlMlswXSxcbiAgICBfc2V0U2l6ZSA9IF91c2VTdGF0ZTJbMV07XG5cbiAgLy8gX2N1cnJlbnREaW1lbnNpb25zIGFuZCBfc2V0U2l6ZSBhcmUgdXNlZCB0byBvbmx5IHN0b3JlIHRoZVxuICAvLyBuZXcgc3RhdGUgKGFuZCB0cmlnZ2VyIGEgcmUtcmVuZGVyKSB3aGVuIHRoZSBuZXcgZGltZW5zaW9ucyBhY3R1YWxseSBkaWZmZXJcbiAgdmFyIF9jdXJyZW50RGltZW5zaW9ucyA9IHVzZVJlZihzaXplKTtcbiAgdmFyIHNldFNpemUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZGltZW5zaW9ucykge1xuICAgIHZhciBkb2VzV2lkdGhNYXR0ZXIgPSBkaW1lbnNpb24gIT09ICdoZWlnaHQnO1xuICAgIHZhciBkb2VzSGVpZ2h0TWF0dGVyID0gZGltZW5zaW9uICE9PSAnd2lkdGgnO1xuICAgIGlmIChkb2VzV2lkdGhNYXR0ZXIgJiYgX2N1cnJlbnREaW1lbnNpb25zLmN1cnJlbnQud2lkdGggIT09IGRpbWVuc2lvbnMud2lkdGggfHwgZG9lc0hlaWdodE1hdHRlciAmJiBfY3VycmVudERpbWVuc2lvbnMuY3VycmVudC5oZWlnaHQgIT09IGRpbWVuc2lvbnMuaGVpZ2h0KSB7XG4gICAgICBfY3VycmVudERpbWVuc2lvbnMuY3VycmVudCA9IGRpbWVuc2lvbnM7XG4gICAgICBfc2V0U2l6ZShkaW1lbnNpb25zKTtcbiAgICB9XG4gIH0sIFtkaW1lbnNpb25dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29udGFpbmVyICE9IG51bGwpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IG1ha2VSZXNpemVPYnNlcnZlcihjb250YWluZXIsIGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMSksXG4gICAgICAgICAgZW50cnkgPSBfcmVmNFswXTtcbiAgICAgICAgdmFyIF9lbnRyeSRib3JkZXJCb3hTaXplJDIgPSBlbnRyeS5ib3JkZXJCb3hTaXplWzBdLFxuICAgICAgICAgIGlubGluZVNpemUgPSBfZW50cnkkYm9yZGVyQm94U2l6ZSQyLmlubGluZVNpemUsXG4gICAgICAgICAgYmxvY2tTaXplID0gX2VudHJ5JGJvcmRlckJveFNpemUkMi5ibG9ja1NpemU7XG4gICAgICAgIHNldFNpemUoe1xuICAgICAgICAgIHdpZHRoOiBpbmxpbmVTaXplLFxuICAgICAgICAgIGhlaWdodDogYmxvY2tTaXplXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb2JzZXJ2ZXIgJiYgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U2l6ZSh7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDBcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2NvbnRhaW5lciwgc2V0U2l6ZV0pO1xuICByZXR1cm4gc2l6ZTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIEV1aU9ic2VydmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aU9ic2VydmVyKCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpT2JzZXJ2ZXIpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aU9ic2VydmVyLCBbXS5jb25jYXQoYXJncykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJuYW1lXCIsICdFdWlPYnNlcnZlcicpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjaGlsZE5vZGVcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9ic2VydmVyXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ1cGRhdGVDaGlsZE5vZGVcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgaWYgKF90aGlzLmNoaWxkTm9kZSA9PT0gcmVmKSByZXR1cm47IC8vIG5vZGUgaGFzbid0IGNoYW5nZWRcblxuICAgICAgLy8gaWYgdGhlcmUncyBhbiBleGlzdGluZyBvYnNlcnZlciBkaXNjb25uZWN0IGl0XG4gICAgICBpZiAoX3RoaXMub2JzZXJ2ZXIgIT0gbnVsbCkge1xuICAgICAgICBfdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgIF90aGlzLm9ic2VydmVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIF90aGlzLmNoaWxkTm9kZSA9IHJlZjtcbiAgICAgIGlmIChfdGhpcy5jaGlsZE5vZGUgIT0gbnVsbCkge1xuICAgICAgICBfdGhpcy5iZWdpbk9ic2VydmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYmVnaW5PYnNlcnZlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXVpT2JzZXJ2ZXIgaGFzIG5vIGRlZmF1bHQgb2JzZXJ2YXRpb24gbWV0aG9kJyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlPYnNlcnZlciwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpT2JzZXJ2ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuY2hpbGROb2RlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiXCIuY29uY2F0KHRoaXMubmFtZSwgXCIgZGlkIG5vdCByZWNlaXZlIGEgcmVmXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5vYnNlcnZlciAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiBwcm9wcy5jaGlsZHJlbih0aGlzLnVwZGF0ZUNoaWxkTm9kZSk7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIE5PVEU6IFdlIGNhbid0IHRlc3QgdGhpcyBjb21wb25lbnQgYmVjYXVzZSBFbnp5bWUgZG9lc24ndCBzdXBwb3J0IHJlbmRlcmluZ1xuICogaW50byBwb3J0YWxzLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgRXVpTmVzdGVkVGhlbWVDb250ZXh0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlUHJvcHNXaXRoQ29tcG9uZW50RGVmYXVsdHMgfSBmcm9tICcuLi9wcm92aWRlci9jb21wb25lbnRfZGVmYXVsdHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBJTlNFUlRfUE9TSVRJT05TID0gWydhZnRlcicsICdiZWZvcmUnXTtcbnZhciBpbnNlcnRQb3NpdGlvbnMgPSB7XG4gIGFmdGVyOiAnYWZ0ZXJlbmQnLFxuICBiZWZvcmU6ICdiZWZvcmViZWdpbidcbn07XG5leHBvcnQgdmFyIEV1aVBvcnRhbCA9IGZ1bmN0aW9uIEV1aVBvcnRhbChwcm9wcykge1xuICB2YXIgcHJvcHNXaXRoRGVmYXVsdHMgPSB1c2VQcm9wc1dpdGhDb21wb25lbnREZWZhdWx0cygnRXVpUG9ydGFsJywgcHJvcHMpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3J0YWxDbGFzcywgcHJvcHNXaXRoRGVmYXVsdHMpO1xufTtcbkV1aVBvcnRhbC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBgRXVpUG9ydGFsYCB3aWxsIGluc2VydCBpdHNlbGZcbiAgICAgKiBpbnRvIHRoZSBlbmQgb2YgdGhlIGBkb2N1bWVudC5ib2R5YCBieSBkZWZhdWx0XG4gICAgICovXG4gIGluc2VydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzaWJsaW5nOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgcG9zaXRpb246IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAgICogT3B0aW9uYWwgcmVmIGNhbGxiYWNrXG4gICAgICovXG4gIHBvcnRhbFJlZjogUHJvcFR5cGVzLmZ1bmNcbn07XG5leHBvcnQgdmFyIEV1aVBvcnRhbENsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aVBvcnRhbENsYXNzKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlQb3J0YWxDbGFzcyk7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aVBvcnRhbENsYXNzLCBbcHJvcHNdKTtcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHBvcnRhbE5vZGU6IG51bGxcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpUG9ydGFsQ2xhc3MsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aVBvcnRhbENsYXNzLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBpbnNlcnQgPSB0aGlzLnByb3BzLmluc2VydDtcbiAgICAgIHZhciBwb3J0YWxOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBwb3J0YWxOb2RlLmRhdGFzZXQuZXVpcG9ydGFsID0gJ3RydWUnO1xuICAgICAgaWYgKGluc2VydCA9PSBudWxsKSB7XG4gICAgICAgIC8vIG5vIGluc2VydGlvbiBkZWZpbmVkLCBhcHBlbmQgdG8gYm9keVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBvcnRhbE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaW5zZXJ0aW5nIGJlZm9yZSBvciBhZnRlciBhbiBlbGVtZW50XG4gICAgICAgIHZhciBzaWJsaW5nID0gaW5zZXJ0LnNpYmxpbmcsXG4gICAgICAgICAgcG9zaXRpb24gPSBpbnNlcnQucG9zaXRpb247XG4gICAgICAgIHNpYmxpbmcuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KGluc2VydFBvc2l0aW9uc1twb3NpdGlvbl0sIHBvcnRhbE5vZGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRUaGVtZUNvbG9yKHBvcnRhbE5vZGUpO1xuICAgICAgdGhpcy51cGRhdGVQb3J0YWxSZWYocG9ydGFsTm9kZSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aXRoIHBvcnRhbE5vZGUgdG8gaW50ZW50aW9uYWxseSB0cmlnZ2VyIGNvbXBvbmVudCByZXJlbmRlclxuICAgICAgLy8gYW5kIGNhbGwgY3JlYXRlUG9ydGFsIHdpdGggY29ycmVjdCByb290IGVsZW1lbnQgaW4gcmVuZGVyKClcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwb3J0YWxOb2RlOiBwb3J0YWxOb2RlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB2YXIgcG9ydGFsTm9kZSA9IHRoaXMuc3RhdGUucG9ydGFsTm9kZTtcbiAgICAgIGlmIChwb3J0YWxOb2RlICE9PSBudWxsICYmIHBvcnRhbE5vZGUgIT09IHZvaWQgMCAmJiBwb3J0YWxOb2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgcG9ydGFsTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHBvcnRhbE5vZGUpO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVQb3J0YWxSZWYobnVsbCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSBpbmhlcml0ZWQgY29sb3Igb2YgdGhlIHBvcnRhbCBiYXNlZCBvbiB0aGUgd3JhcHBpbmcgRXVpVGhlbWVQcm92aWRlclxuICB9LCB7XG4gICAga2V5OiBcInNldFRoZW1lQ29sb3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0VGhlbWVDb2xvcihwb3J0YWxOb2RlKSB7XG4gICAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICAgIHZhciBfdGhpcyRjb250ZXh0ID0gdGhpcy5jb250ZXh0LFxuICAgICAgICAgIGhhc0RpZmZlcmVudENvbG9yRnJvbUdsb2JhbFRoZW1lID0gX3RoaXMkY29udGV4dC5oYXNEaWZmZXJlbnRDb2xvckZyb21HbG9iYWxUaGVtZSxcbiAgICAgICAgICBjb2xvckNsYXNzTmFtZSA9IF90aGlzJGNvbnRleHQuY29sb3JDbGFzc05hbWU7XG4gICAgICAgIGlmIChoYXNEaWZmZXJlbnRDb2xvckZyb21HbG9iYWxUaGVtZSAmJiB0aGlzLnByb3BzLmluc2VydCA9PSBudWxsKSB7XG4gICAgICAgICAgcG9ydGFsTm9kZS5jbGFzc0xpc3QuYWRkKGNvbG9yQ2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1cGRhdGVQb3J0YWxSZWZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlUG9ydGFsUmVmKHJlZikge1xuICAgICAgaWYgKHRoaXMucHJvcHMucG9ydGFsUmVmKSB7XG4gICAgICAgIHRoaXMucHJvcHMucG9ydGFsUmVmKHJlZik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgcG9ydGFsTm9kZSA9IHRoaXMuc3RhdGUucG9ydGFsTm9kZTtcbiAgICAgIGlmICghcG9ydGFsTm9kZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3JlYXRlUG9ydGFsKHRoaXMucHJvcHMuY2hpbGRyZW4sIHBvcnRhbE5vZGUpO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aVBvcnRhbENsYXNzLCBcImNvbnRleHRUeXBlXCIsIEV1aU5lc3RlZFRoZW1lQ29udGV4dCk7XG5FdWlQb3J0YWxDbGFzcy5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBgRXVpUG9ydGFsYCB3aWxsIGluc2VydCBpdHNlbGZcbiAgICAgKiBpbnRvIHRoZSBlbmQgb2YgdGhlIGBkb2N1bWVudC5ib2R5YCBieSBkZWZhdWx0XG4gICAgICovXG4gIGluc2VydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzaWJsaW5nOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgcG9zaXRpb246IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAgICogT3B0aW9uYWwgcmVmIGNhbGxiYWNrXG4gICAgICovXG4gIHBvcnRhbFJlZjogUHJvcFR5cGVzLmZ1bmNcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuLy8gRGVjbGFyaW5nIGFzIGEgc3RhdGljIGNvbnN0IGZvciByZWZlcmVuY2UgaW50ZWdyaXR5L3JlZHVjaW5nIHJlcmVuZGVyc1xudmFyIGVtcHR5RGVmYXVsdHMgPSB7fTtcblxuLypcbiAqIENvbnRleHRcbiAqL1xuZXhwb3J0IHZhciBFdWlDb21wb25lbnREZWZhdWx0c0NvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChlbXB0eURlZmF1bHRzKTtcblxuLypcbiAqIENvbXBvbmVudFxuICovXG5cbmV4cG9ydCB2YXIgRXVpQ29tcG9uZW50RGVmYXVsdHNQcm92aWRlciA9IGZ1bmN0aW9uIEV1aUNvbXBvbmVudERlZmF1bHRzUHJvdmlkZXIoX3JlZikge1xuICB2YXIgX3JlZiRjb21wb25lbnREZWZhdWx0ID0gX3JlZi5jb21wb25lbnREZWZhdWx0cyxcbiAgICBjb21wb25lbnREZWZhdWx0cyA9IF9yZWYkY29tcG9uZW50RGVmYXVsdCA9PT0gdm9pZCAwID8gZW1wdHlEZWZhdWx0cyA6IF9yZWYkY29tcG9uZW50RGVmYXVsdCxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbXBvbmVudERlZmF1bHRzQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb21wb25lbnREZWZhdWx0c1xuICB9LCBjaGlsZHJlbik7XG59O1xuXG4vKlxuICogSG9va3NcbiAqL1xuRXVpQ29tcG9uZW50RGVmYXVsdHNQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbXBvbmVudERlZmF1bHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogUHJvdmlkZSBhIGdsb2JhbCBjb25maWd1cmF0aW9uIGZvciBFdWlQb3J0YWwncyBkZWZhdWx0IGluc2VydGlvbiBwb3NpdGlvbi5cbiAgICAgICAqL1xuICAgIEV1aVBvcnRhbDogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFByb3ZpZGUgYSBnbG9iYWwgY29uZmlndXJhdGlvbiBmb3IgRXVpRm9jdXNUcmFwJ3MgYGdhcE1vZGVgIGFuZCBgY3Jvc3NGcmFtZWAgcHJvcHNcbiAgICAgICAqL1xuICAgIEV1aUZvY3VzVHJhcDogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFByb3ZpZGUgZ2xvYmFsIHNldHRpbmdzIGZvciBFdWlUYWJsZVBhZ2luYXRpb24ncyBwcm9wcyB0aGF0IGFmZmVjdCBwYWdlIHNpemVcbiAgICAgICAqIC8gdGhlIHJvd3MgcGVyIHBhZ2Ugc2VsZWN0aW9uLlxuICAgICAgICpcbiAgICAgICAqIFRoZXNlIGRlZmF1bHRzIHdpbGwgYmUgaW5oZXJpdGVkIGFsbCB0YWJsZSBhbmQgZ3JpZCBjb21wb25lbnRzIHRoYXQgdXRpbGl6ZSBFdWlUYWJsZVBhZ2luYXRpb24uXG4gICAgICAgKi9cbiAgICBFdWlUYWJsZVBhZ2luYXRpb246IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBQcm92aWRlIGEgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZm9yIEV1aVRhYmxlJ3MgYHJlc3BvbnNpdmVCcmVha3BvaW50YCBwcm9wLiBEZWZhdWx0cyB0byBgJ3MnYC5cbiAgICAgICAqXG4gICAgICAgKiBEZWZhdWx0cyB3aWxsIGJlIGluaGVyaXRlZCBieSBhbGwgYEV1aUJhc2ljVGFibGVgcyBhbmQgYEV1aUluTWVtb3J5VGFibGVgcy5cbiAgICAgICAqL1xuICAgIEV1aVRhYmxlOiBQcm9wVHlwZXMuYW55XG4gIH0pXG59O1xuZXhwb3J0IHZhciB1c2VDb21wb25lbnREZWZhdWx0cyA9IGZ1bmN0aW9uIHVzZUNvbXBvbmVudERlZmF1bHRzKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChFdWlDb21wb25lbnREZWZhdWx0c0NvbnRleHQpO1xufTtcblxuLy8gTWVyZ2UgaW5kaXZpZHVhbCBjb21wb25lbnQgcHJvcHMgd2l0aCBjb21wb25lbnQgZGVmYXVsdHNcbmV4cG9ydCB2YXIgdXNlUHJvcHNXaXRoQ29tcG9uZW50RGVmYXVsdHMgPSBmdW5jdGlvbiB1c2VQcm9wc1dpdGhDb21wb25lbnREZWZhdWx0cyhjb21wb25lbnROYW1lLCBwcm9wcykge1xuICB2YXIgX2NvbnRleHQkY29tcG9uZW50TmFtO1xuICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoRXVpQ29tcG9uZW50RGVmYXVsdHNDb250ZXh0KTtcbiAgdmFyIGNvbXBvbmVudERlZmF1bHRzID0gKF9jb250ZXh0JGNvbXBvbmVudE5hbSA9IGNvbnRleHRbY29tcG9uZW50TmFtZV0pICE9PSBudWxsICYmIF9jb250ZXh0JGNvbXBvbmVudE5hbSAhPT0gdm9pZCAwID8gX2NvbnRleHQkY29tcG9uZW50TmFtIDogZW1wdHlEZWZhdWx0cztcbiAgcmV0dXJuIHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNvbXBvbmVudERlZmF1bHRzKSwgcHJvcHMpO1xuICB9LCBbY29tcG9uZW50RGVmYXVsdHMsIHByb3BzXSk7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJ0aXRsZVwiLCBcImNsYXNzTmFtZVwiLCBcInBvc2l0aW9uVG9vbFRpcFwiLCBcInBvcG92ZXJSZWZcIiwgXCJjYWxjdWxhdGVkUG9zaXRpb25cIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpVG9vbFRpcFN0eWxlcyB9IGZyb20gJy4vdG9vbF90aXAuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRvb2xUaXBQb3BvdmVyID0gZnVuY3Rpb24gRXVpVG9vbFRpcFBvcG92ZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBwb3NpdGlvblRvb2xUaXAgPSBfcmVmLnBvc2l0aW9uVG9vbFRpcCxcbiAgICBwb3BvdmVyUmVmID0gX3JlZi5wb3BvdmVyUmVmLFxuICAgIGNhbGN1bGF0ZWRQb3NpdGlvbiA9IF9yZWYuY2FsY3VsYXRlZFBvc2l0aW9uLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHBvcG92ZXIgPSB1c2VSZWYoKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVRvb2xUaXBTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUb29sVGlwLCBjYWxjdWxhdGVkUG9zaXRpb24gJiYgc3R5bGVzW2NhbGN1bGF0ZWRQb3NpdGlvbl1dO1xuICB2YXIgdXBkYXRlRGltZW5zaW9ucyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQmVjYXVzZSBvZiB0aGlzIGRlbGF5LCBzb21ldGltZXMgYHBvc2l0aW9uVG9vbFRpcGAgYmVjb21lcyB1bmF2YWlsYWJsZS5cbiAgICAgIGlmIChwb3BvdmVyLmN1cnJlbnQpIHtcbiAgICAgICAgcG9zaXRpb25Ub29sVGlwKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtwb3NpdGlvblRvb2xUaXBdKTtcbiAgdmFyIHNldFBvcG92ZXJSZWYgPSBmdW5jdGlvbiBzZXRQb3BvdmVyUmVmKHJlZikge1xuICAgIGlmIChwb3BvdmVyUmVmKSB7XG4gICAgICBwb3BvdmVyUmVmKHJlZik7XG4gICAgfVxuICB9O1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnZXVpQm9keS1oYXNQb3J0YWxDb250ZW50Jyk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZURpbWVuc2lvbnMpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2V1aUJvZHktaGFzUG9ydGFsQ29udGVudCcpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZURpbWVuc2lvbnMpO1xuICAgIH07XG4gIH0sIFt1cGRhdGVEaW1lbnNpb25zXSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVG9vbFRpcFBvcG92ZXInLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHJlZjogc2V0UG9wb3ZlclJlZixcbiAgICBcImRhdGEtcG9zaXRpb25cIjogY2FsY3VsYXRlZFBvc2l0aW9uXG4gIH0sIHJlc3QpLCB0aXRsZSAmJiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjc3M6IHN0eWxlcy5ldWlUb29sVGlwX190aXRsZSxcbiAgICBjbGFzc05hbWU6IFwiZXVpVG9vbFRpcF9fdGl0bGVcIlxuICB9LCB0aXRsZSksIGNoaWxkcmVuKTtcbn07XG5FdWlUb29sVGlwUG9wb3Zlci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBwb3NpdGlvblRvb2xUaXA6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICBwb3BvdmVyUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2FsY3VsYXRlZFBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKVxufTsiLCAidmFyIF90ZW1wbGF0ZU9iamVjdCwgX3RlbXBsYXRlT2JqZWN0MjtcbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoZSwgdCkgeyByZXR1cm4gdCB8fCAodCA9IGUuc2xpY2UoMCkpLCBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHQpIH0gfSkpOyB9XG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxTaXplQ1NTLCBldWlGb250U2l6ZSwgZXVpQ2FuQW5pbWF0ZSwgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IENPTE9SX01PREVTX1NUQU5EQVJELCB0aW50LCBzaGFkZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVNoYWRvdyB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0nO1xuZXhwb3J0IHZhciBldWlUb29sVGlwQmFja2dyb3VuZENvbG9yID0gZnVuY3Rpb24gZXVpVG9vbFRpcEJhY2tncm91bmRDb2xvcihldWlUaGVtZSwgY29sb3JNb2RlKSB7XG4gIHJldHVybiBjb2xvck1vZGUgPT09IENPTE9SX01PREVTX1NUQU5EQVJELmRhcmsgPyBzaGFkZShldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSwgMSkgOiB0aW50KGV1aVRoZW1lLmNvbG9ycy5mdWxsU2hhZGUsIDAuMjUpO1xufTtcbmV4cG9ydCB2YXIgZXVpVG9vbFRpcEJvcmRlckNvbG9yID0gZnVuY3Rpb24gZXVpVG9vbFRpcEJvcmRlckNvbG9yKGV1aVRoZW1lLCBjb2xvck1vZGUpIHtcbiAgcmV0dXJuIGNvbG9yTW9kZSA9PT0gQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyayA/IHNoYWRlKGV1aVRoZW1lLmNvbG9ycy5mdWxsU2hhZGUsIDAuOCkgOiB0aW50KGV1aVRoZW1lLmNvbG9ycy5mdWxsU2hhZGUsIDAuMzUpO1xufTtcbnZhciBldWlUb29sVGlwQW5pbWF0aW9uVmVydGljYWwgPSBmdW5jdGlvbiBldWlUb29sVGlwQW5pbWF0aW9uVmVydGljYWwoc2l6ZSkge1xuICByZXR1cm4ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgMCUge1xcbiAgICAgICAgb3BhY2l0eTogMDtcXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShcIiwgXCIpO1xcbiAgICB9XFxuXFxuICAgIDEwMCUge1xcbiAgICAgICAgb3BhY2l0eTogMTtcXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG4gICAgfVxcblwiXSkpLCBzaXplKTtcbn07XG52YXIgZXVpVG9vbFRpcEFuaW1hdGlvbkhvcml6b250YWwgPSBmdW5jdGlvbiBldWlUb29sVGlwQW5pbWF0aW9uSG9yaXpvbnRhbChzaXplKSB7XG4gIHJldHVybiBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0MiB8fCAoX3RlbXBsYXRlT2JqZWN0MiA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgIDAlIHtcXG4gICAgICAgIG9wYWNpdHk6IDA7XFxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoXCIsIFwiKTtcXG4gICAgfVxcblxcbiAgICAxMDAlIHtcXG4gICAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XFxuICAgIH1cXG5cIl0pKSwgc2l6ZSk7XG59O1xuZXhwb3J0IHZhciBldWlUb29sVGlwU3R5bGVzID0gZnVuY3Rpb24gZXVpVG9vbFRpcFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGU7XG4gIHZhciBhbmltYXRpb25UaW1pbmcgPSBcIlwiLmNvbmNhdChldWlUaGVtZS5hbmltYXRpb24uc2xvdywgXCIgZWFzZS1vdXQgMHMgZm9yd2FyZHNcIik7XG4gIC8vIFNoaWZ0IGFycm93IDFweCBtb3JlIHRoYW4gaGFsZiBpdHMgc2l6ZSB0byBhY2NvdW50IGZvciBib3JkZXIgcmFkaXVzXG4gIHZhciBhcnJvd1NpemUgPSBldWlUaGVtZS5zaXplLm07XG4gIHZhciBhcnJvd1BsdXNTaXplID0gbWF0aFdpdGhVbml0cyhhcnJvd1NpemUsIGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuICh4IC8gMiArIDEpICogLTE7XG4gIH0pO1xuICB2YXIgYXJyb3dNaW51c1NpemUgPSBtYXRoV2l0aFVuaXRzKGFycm93U2l6ZSwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gKHggLyAyIC0gMSkgKiAtMTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVRvb2xUaXA6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCksIFwiIGJvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUb29sVGlwQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lLCBjb2xvck1vZGUpLCBcIjtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmdob3N0LCBcIjt6LWluZGV4OlwiLCBldWlUaGVtZS5sZXZlbHMudG9hc3QsIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMjU2cHgnKSwgXCIgb3ZlcmZsb3ctd3JhcDpicmVhay13b3JkO3BhZGRpbmc6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCIgcG9zaXRpb246YWJzb2x1dGU7W2NsYXNzKj0nZXVpSG9yaXpvbnRhbFJ1bGUnXXtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUb29sVGlwQm9yZGVyQ29sb3IoZXVpVGhlbWUsIGNvbG9yTW9kZSksIFwiO307bGFiZWw6ZXVpVG9vbFRpcDtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiOztsYWJlbDpzO1wiKSxcbiAgICAvLyBQb3NpdGlvbnNcbiAgICB0b3A6IC8qI19fUFVSRV9fKi9jc3MoZXVpQ2FuQW5pbWF0ZSwgXCJ7YW5pbWF0aW9uOlwiLCBldWlUb29sVGlwQW5pbWF0aW9uVmVydGljYWwoXCItXCIuY29uY2F0KGV1aVRoZW1lLnNpemUuYmFzZSkpLCBcIiBcIiwgYW5pbWF0aW9uVGltaW5nLCBcIjt9O2xhYmVsOnRvcDtcIiksXG4gICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgZXVpVG9vbFRpcEFuaW1hdGlvblZlcnRpY2FsKGV1aVRoZW1lLnNpemUuYmFzZSksIFwiIFwiLCBhbmltYXRpb25UaW1pbmcsIFwiO307bGFiZWw6Ym90dG9tO1wiKSxcbiAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgZXVpVG9vbFRpcEFuaW1hdGlvbkhvcml6b250YWwoXCItXCIuY29uY2F0KGV1aVRoZW1lLnNpemUuYmFzZSkpLCBcIiBcIiwgYW5pbWF0aW9uVGltaW5nLCBcIjt9O2xhYmVsOmxlZnQ7XCIpLFxuICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgZXVpVG9vbFRpcEFuaW1hdGlvbkhvcml6b250YWwoZXVpVGhlbWUuc2l6ZS5iYXNlKSwgXCIgXCIsIGFuaW1hdGlvblRpbWluZywgXCI7fTtsYWJlbDpyaWdodDtcIiksXG4gICAgLy8gQXJyb3dcbiAgICBldWlUb29sVGlwX19hcnJvdzogLyojX19QVVJFX18qL2NzcyhcImNvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7Ym9yZGVyLXJhZGl1czpcIiwgbWF0aFdpdGhVbml0cyhldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggLyAyO1xuICAgIH0pLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUb29sVGlwQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lLCBjb2xvck1vZGUpLCBcIjtcIiwgbG9naWNhbFNpemVDU1MoYXJyb3dTaXplLCBhcnJvd1NpemUpLCBcIjs7bGFiZWw6ZXVpVG9vbFRpcF9fYXJyb3c7XCIpLFxuICAgIGFycm93UG9zaXRpb25zOiB7XG4gICAgICB0b3A6IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWShcIiwgYXJyb3dQbHVzU2l6ZSwgXCIpIHJvdGF0ZVooNDVkZWcpOztsYWJlbDp0b3A7XCIpLFxuICAgICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVkoXCIsIGFycm93TWludXNTaXplLCBcIikgcm90YXRlWig0NWRlZyk7O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVgoXCIsIGFycm93UGx1c1NpemUsIFwiKSByb3RhdGVaKDQ1ZGVnKTs7bGFiZWw6bGVmdDtcIiksXG4gICAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVYKFwiLCBhcnJvd01pbnVzU2l6ZSwgXCIpIHJvdGF0ZVooNDVkZWcpOztsYWJlbDpyaWdodDtcIilcbiAgICB9LFxuICAgIC8vIFRpdGxlXG4gICAgZXVpVG9vbFRpcF9fdGl0bGU6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQuYm9sZCwgXCI7XCIsIGxvZ2ljYWxDU1MoJ2JvcmRlci1ib3R0b20nLCBcInNvbGlkIFwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgXCIpLmNvbmNhdChldWlUb29sVGlwQm9yZGVyQ29sb3IoZXVpVGhlbWUsIGNvbG9yTW9kZSkpKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctYm90dG9tJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiOztsYWJlbDpldWlUb29sVGlwX190aXRsZTtcIilcbiAgfTtcbn07XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJmemlsbmstaW5saW5lQmxvY2tcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6aW5saW5lLWJsb2NrO2xhYmVsOmlubGluZUJsb2NrO1wiXG59IDoge1xuICBuYW1lOiBcImZ6aWxuay1pbmxpbmVCbG9ja1wiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7bGFiZWw6aW5saW5lQmxvY2s7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxNGFjZXV5LWJsb2NrXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmJsb2NrO2xhYmVsOmJsb2NrO1wiXG59IDoge1xuICBuYW1lOiBcIjE0YWNldXktYmxvY2tcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6YmxvY2s7bGFiZWw6YmxvY2s7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxczNpM3A1LWV1aVRvb2xUaXBBbmNob3JcIixcbiAgc3R5bGVzOiBcIipbZGlzYWJsZWRde3BvaW50ZXItZXZlbnRzOm5vbmU7fTtsYWJlbDpldWlUb29sVGlwQW5jaG9yO1wiXG59IDoge1xuICBuYW1lOiBcIjFzM2kzcDUtZXVpVG9vbFRpcEFuY2hvclwiLFxuICBzdHlsZXM6IFwiKltkaXNhYmxlZF17cG9pbnRlci1ldmVudHM6bm9uZTt9O2xhYmVsOmV1aVRvb2xUaXBBbmNob3I7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpVG9vbFRpcEFuY2hvclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRvb2xUaXBBbmNob3JTdHlsZXMoKSB7XG4gIHJldHVybiB7XG4gICAgLy8gRWxlbWVudHNcbiAgICBldWlUb29sVGlwQW5jaG9yOiBfcmVmMyxcbiAgICAvLyBWYXJpYW50c1xuICAgIGJsb2NrOiBfcmVmMixcbiAgICBpbmxpbmVCbG9jazogX3JlZlxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcIm9uQmx1clwiLCBcIm9uRm9jdXNcIiwgXCJvbk1vdXNlT3ZlclwiLCBcIm9uTW91c2VPdXRcIiwgXCJpZFwiLCBcImNsYXNzTmFtZVwiLCBcImNoaWxkcmVuXCIsIFwiZGlzcGxheVwiLCBcImlzVmlzaWJsZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZXVpVG9vbFRpcEFuY2hvclN0eWxlcyB9IGZyb20gJy4vdG9vbF90aXAuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRvb2xUaXBBbmNob3IgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfb25CbHVyID0gX3JlZi5vbkJsdXIsXG4gICAgX29uRm9jdXMgPSBfcmVmLm9uRm9jdXMsXG4gICAgb25Nb3VzZU92ZXIgPSBfcmVmLm9uTW91c2VPdmVyLFxuICAgIG9uTW91c2VPdXQgPSBfcmVmLm9uTW91c2VPdXQsXG4gICAgaWQgPSBfcmVmLmlkLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBkaXNwbGF5ID0gX3JlZi5kaXNwbGF5LFxuICAgIGlzVmlzaWJsZSA9IF9yZWYuaXNWaXNpYmxlLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGFuY2hvckNzcyA9IGV1aVRvb2xUaXBBbmNob3JTdHlsZXMoKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFthbmNob3JDc3MuZXVpVG9vbFRpcEFuY2hvciwgYW5jaG9yQ3NzW2Rpc3BsYXldXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUb29sVGlwQW5jaG9yJywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvbW91c2UtZXZlbnRzLWhhdmUta2V5LWV2ZW50c1xuICAgIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgY3NzOiBjc3NTdHlsZXNcbiAgICB9LCByZXN0LCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBvbk1vdXNlT3Zlcjogb25Nb3VzZU92ZXIsXG4gICAgICBvbk1vdXNlT3V0OiBvbk1vdXNlT3V0XG4gICAgfSksIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgIG9uRm9jdXM6IGZ1bmN0aW9uIG9uRm9jdXMoZSkge1xuICAgICAgICBfb25Gb2N1cygpO1xuICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkZvY3VzICYmIGNoaWxkcmVuLnByb3BzLm9uRm9jdXMoZSk7XG4gICAgICB9LFxuICAgICAgb25CbHVyOiBmdW5jdGlvbiBvbkJsdXIoZSkge1xuICAgICAgICBfb25CbHVyKCk7XG4gICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1ciAmJiBjaGlsZHJlbi5wcm9wcy5vbkJsdXIoZSk7XG4gICAgICB9LFxuICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBpc1Zpc2libGUgPyBjbGFzc05hbWVzKGlkLCBjaGlsZHJlbi5wcm9wc1snYXJpYS1kZXNjcmliZWRieSddKSA6IGNoaWxkcmVuLnByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J11cbiAgICB9KSlcbiAgKTtcbn0pO1xuRXVpVG9vbFRpcEFuY2hvci5wcm9wVHlwZXMgPSB7XG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgaXNWaXNpYmxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXG59O1xuRXVpVG9vbFRpcEFuY2hvci5kaXNwbGF5TmFtZSA9ICdFdWlUb29sVGlwQW5jaG9yJzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInBvc2l0aW9uXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlUb29sVGlwU3R5bGVzIH0gZnJvbSAnLi90b29sX3RpcC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVG9vbFRpcEFycm93ID0gZnVuY3Rpb24gRXVpVG9vbFRpcEFycm93KF9yZWYpIHtcbiAgdmFyIHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpVG9vbFRpcFN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRvb2xUaXBfX2Fycm93LCBzdHlsZXMuYXJyb3dQb3NpdGlvbnNbcG9zaXRpb25dXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHByb3BzKSk7XG59O1xuRXVpVG9vbFRpcEFycm93LnByb3BUeXBlcyA9IHtcbiAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl0pLmlzUmVxdWlyZWRcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8qKlxuICogTWFuYWdlciB1dGlsaXR5IHRoYXQgZW5zdXJlcyBvbmx5IG9uZSB0b29sdGlwIGlzIHZpc2libGUgYXQgYSB0aW1lXG4gKlxuICogVVggcmF0aW9uYWxlIChwcmltYXJpbHkgZm9yIG1vdXNlLW9ubHkgdXNlcnMpOlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9raWJhbmEvaXNzdWVzLzE0NDQ4MlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzU4ODNcbiAqL1xudmFyIFRvb2xUaXBNYW5hZ2VyID0gLyojX19QVVJFX18qL19jcmVhdGVDbGFzcyhmdW5jdGlvbiBUb29sVGlwTWFuYWdlcigpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRvb2xUaXBNYW5hZ2VyKTtcbiAgLy8gV2UgdXNlIGEgc2V0IGluc3RlYWQgb2YgYSBzaW5nbGUgdmFyIGp1c3QgaW4gY2FzZVxuICAvLyBtdWx0aXBsZSB0b29sdGlwcyBhcmUgcmVnaXN0ZXJlZCB2aWEgYXN5bmMgc2hlbmFuaWdhbnNcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidG9vbFRpcHNUb0hpZGVcIiwgbmV3IFNldCgpKTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicmVnaXN0ZXJUb29sdGlwXCIsIGZ1bmN0aW9uIChoaWRlQ2FsbGJhY2spIHtcbiAgICBfdGhpcy50b29sVGlwc1RvSGlkZS5mb3JFYWNoKGZ1bmN0aW9uIChoaWRlKSB7XG4gICAgICByZXR1cm4gaGlkZSgpO1xuICAgIH0pO1xuICAgIF90aGlzLnRvb2xUaXBzVG9IaWRlLmNsZWFyKCk7XG4gICAgX3RoaXMudG9vbFRpcHNUb0hpZGUuYWRkKGhpZGVDYWxsYmFjayk7XG4gIH0pO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkZXJlZ2lzdGVyVG9vbFRpcFwiLCBmdW5jdGlvbiAoaGlkZUNhbGxiYWNrKSB7XG4gICAgX3RoaXMudG9vbFRpcHNUb0hpZGUuZGVsZXRlKGhpZGVDYWxsYmFjayk7XG4gIH0pO1xufSk7XG5leHBvcnQgdmFyIHRvb2xUaXBNYW5hZ2VyID0gbmV3IFRvb2xUaXBNYW5hZ2VyKCk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0eXBlXCIsIFwiYXJpYS1sYWJlbFwiLCBcImNvbG9yXCIsIFwic2l6ZVwiLCBcImljb25Qcm9wc1wiLCBcInBvc2l0aW9uXCIsIFwiZGVsYXlcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi90b29sX3RpcCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlJY29uVGlwID0gZnVuY3Rpb24gRXVpSWNvblRpcChfcmVmKSB7XG4gIHZhciBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ3F1ZXN0aW9uSW5DaXJjbGUnIDogX3JlZiR0eXBlLFxuICAgIGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXSxcbiAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBpY29uUHJvcHMgPSBfcmVmLmljb25Qcm9wcyxcbiAgICBfcmVmJHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICBwb3NpdGlvbiA9IF9yZWYkcG9zaXRpb24gPT09IHZvaWQgMCA/ICd0b3AnIDogX3JlZiRwb3NpdGlvbixcbiAgICBfcmVmJGRlbGF5ID0gX3JlZi5kZWxheSxcbiAgICBkZWxheSA9IF9yZWYkZGVsYXkgPT09IHZvaWQgMCA/ICdyZWd1bGFyJyA6IF9yZWYkZGVsYXksXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZGVmYXVsdEFyaWFMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aUljb25UaXAuZGVmYXVsdEFyaWFMYWJlbCcsICdJbmZvJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIF9leHRlbmRzKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgZGVsYXk6IGRlbGF5XG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIF9leHRlbmRzKHtcbiAgICB0YWJJbmRleDogMCxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbG9yOiBjb2xvcixcbiAgICBzaXplOiBzaXplLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwgfHwgZGVmYXVsdEFyaWFMYWJlbFxuICB9LCBpY29uUHJvcHMpKSk7XG59O1xuRXVpSWNvblRpcC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSBzcGFuIHdyYXBwaW5nIHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBhbmNob3JDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSBzcGFuIHdyYXBwaW5nIHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBhbmNob3JQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHRvb2x0aXAgaXRzZWxmLCBub3QgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogVGhlIG1haW4gY29udGVudCBvZiB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBDb21tb24gZGlzcGxheSBhbHRlcm5hdGl2ZXMgZm9yIHRoZSBhbmNob3Igd3JhcHBlclxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCB0aXRsZSBmb3IgeW91ciB0b29sdGlwLlxuICAgICAqL1xuICB0aXRsZTogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIFVubGVzcyB5b3UgcHJvdmlkZSBvbmUsIHRoaXMgd2lsbCBiZSByYW5kb21seSBnZW5lcmF0ZWQuXG4gICAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCwgdGhlIHRvb2x0aXAncyBwb3NpdGlvbiBpcyByZS1jYWxjdWxhdGVkIHdoZW4gdGhlIHVzZXJcbiAgICAgKiBzY3JvbGxzLiBUaGlzIHN1cHBvcnRzIGhhdmluZyBmaXhlZC1wb3NpdGlvbiB0b29sdGlwIGFuY2hvcnMuXG4gICAgICpcbiAgICAgKiBXaGVuIG5lc3RpbmcgYW4gYEV1aVRvb2x0aXBgIGluIGEgc2Nyb2xsYWJsZSBjb250YWluZXIsIGByZXBvc2l0aW9uT25TY3JvbGxgIHNob3VsZCBiZSBgdHJ1ZWBcbiAgICAgKi9cbiAgcmVwb3NpdGlvbk9uU2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSWYgc3VwcGxpZWQsIGNhbGxlZCB3aGVuIG1vdXNlIG1vdmVtZW50IGNhdXNlcyB0aGUgdG9vbCB0aXAgdG8gYmVcbiAgICAgKiBoaWRkZW4uXG4gICAgICovXG4gIG9uTW91c2VPdXQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBFeHBsYWluIHdoYXQgdGhpcyBpY29uIG1lYW5zIGZvciBzY3JlZW4gcmVhZGVycy5cbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBUaGUgaWNvbiBjb2xvci5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFRoZSBpY29uIHR5cGUuXG4gICAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIFRoZSBpY29uIHNpemUuXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFBhc3MgY2VydGFpbiBwcm9wcyBkb3duIHRvIGBFdWlJY29uYFxuICAgICAqL1xuICAvLyBFdWlJY29uVGlwJ3MgYHR5cGVgIGlzIHBhc3NlZCB0byBFdWlJY29uLCBzbyB3ZSB3YW50IHRvIGV4Y2x1ZGUgYHR5cGVgIGZyb21cbiAgLy8gaWNvblByb3BzOyBob3dldmVyLCBkdWUgdG8gVFMncyBiaXZhcmlhbnQgZnVuY3Rpb24gYXJndW1lbnRzIGB0eXBlYCBjb3VsZCBiZVxuICAvLyBwYXNzZWQgd2l0aG91dCBhbnkgZXJyb3IvZmVlZGJhY2sgc28gd2UgZXhwbGljaXRseSBzZXQgaXQgdG8gYG5ldmVyYCB0eXBlXG4gIGljb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLy8gVGhpcyBhcmUgY29waWVkIGZyb20gRXVpVG9vbFRpcFByb3BzLCBidXQgbWFkZSBvcHRpb25hbC4gRGVmYXVsdHNcbiAgLy8gYXJlIGFwcGxpZWQgYmVsb3cuXG4gIGRlbGF5OiBQcm9wVHlwZXMuYW55LFxuICBwb3NpdGlvbjogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNvbXBvbmVudFwiLCBcInNpemVcIiwgXCJjb2xvclwiLCBcImdyb3dcIiwgXCJ0ZXh0QWxpZ25cIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlUZXh0Q29sb3IgfSBmcm9tICcuL3RleHRfY29sb3InO1xuaW1wb3J0IHsgRXVpVGV4dEFsaWduIH0gZnJvbSAnLi90ZXh0X2FsaWduJztcbmltcG9ydCB7IGV1aVRleHRTdHlsZXMgfSBmcm9tICcuL3RleHQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFRFWFRfU0laRVMgPSBbJ3hzJywgJ3MnLCAnbScsICdyZWxhdGl2ZSddO1xuZXhwb3J0IHZhciBFdWlUZXh0ID0gZnVuY3Rpb24gRXVpVGV4dChfcmVmKSB7XG4gIHZhciBfcmVmJGNvbXBvbmVudCA9IF9yZWYuY29tcG9uZW50LFxuICAgIGNvbXBvbmVudCA9IF9yZWYkY29tcG9uZW50ID09PSB2b2lkIDAgPyAnZGl2JyA6IF9yZWYkY29tcG9uZW50LFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIF9yZWYkZ3JvdyA9IF9yZWYuZ3JvdyxcbiAgICBncm93ID0gX3JlZiRncm93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRncm93LFxuICAgIHRleHRBbGlnbiA9IF9yZWYudGV4dEFsaWduLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUZXh0U3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dCwgIWdyb3cgPyBzdHlsZXMuY29uc3RyYWluZWRXaWR0aCA6IHVuZGVmaW5lZCwgc3R5bGVzW3NpemVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUZXh0JywgY2xhc3NOYW1lKTtcbiAgdmFyIENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgdmFyIHRleHQgPSBfX19FbW90aW9uSlNYKENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICBpZiAoY29sb3IpIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlUZXh0Q29sb3IsIHtcbiAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY2xvbmVFbGVtZW50OiB0cnVlXG4gICAgfSwgdGV4dCk7XG4gIH1cbiAgaWYgKHRleHRBbGlnbikge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aVRleHRBbGlnbiwge1xuICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsXG4gICAgICB0ZXh0QWxpZ246IHRleHRBbGlnbixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNsb25lRWxlbWVudDogdHJ1ZVxuICAgIH0sIHRleHQpO1xuICB9XG4gIHJldHVybiB0ZXh0O1xufTtcbkV1aVRleHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBUaGUgSFRNTCBlbGVtZW50L3RhZyB0byByZW5kZXIuXG4gICAgICAgKiBVc2Ugd2l0aCBjYXJlIHdoZW4gbmVzdGluZyBtdWx0aXBsZSBjb21wb25lbnRzIHRvIGVuc3VyZSB2YWxpZCBYSFRNTDpcbiAgICAgICAqIC0gYDxkaXY+YCBhbmQgb3RoZXIgYmxvY2sgdGFncyBhcmUgbm90IHZhbGlkIHRvIHVzZSBpbnNpZGUgYDxwPmAuIElmIHVzaW5nIHRoZSBgPHA+YCB0YWcsIHdlIHJlY29tbWVuZCBwYXNzaW5nIHN0cmluZ3MvdGV4dCBvbmx5LlxuICAgICAgICogLSBgPHNwYW4+YCBpcyB2YWxpZCB0byBiZSBuZXN0ZWQgaW4gYW55IHRhZywgYW5kIGNhbiBoYXZlIGFueSB0YWcgbmVzdGVkIHdpdGhpbiBpdC5cbiAgICAgICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIiwgXCJzcGFuXCIsIFwicFwiXSksXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzIG9yIGEgYGhleGAsIGByZ2JgIG9yIGByZ2JhYCB2YWx1ZS5cbiAgICAgKiBAZGVmYXVsdCBpbmhlcml0XG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBBcHBsaWVzIGhvcml6b250YWwgdGV4dCBhbGlnbm1lbnRcbiAgICAgKiBAZGVmYXVsdCBsZWZ0XG4gICAgICovXG4gIHRleHRBbGlnbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBEZXRlcm1pbmVzIHRoZSB0ZXh0IHNpemUuIENob29zZSBgcmVsYXRpdmVgIHRvIGNvbnRyb2wgdGhlIGBmb250LXNpemVgIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBhIHBhcmVudCBjb250YWluZXIuXG4gICAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgZ3JvdzogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiY2xvbmVFbGVtZW50XCIsIFwic3R5bGVcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzLCBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpVGV4dENvbG9yU3R5bGVzIH0gZnJvbSAnLi90ZXh0X2NvbG9yLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDT0xPUlMgPSBbJ2RlZmF1bHQnLCAnc3ViZHVlZCcsICdzdWNjZXNzJywgJ2FjY2VudCcsICdkYW5nZXInLCAnd2FybmluZycsICdnaG9zdCcsICdpbmhlcml0J107XG5leHBvcnQgdmFyIF9pc05hbWVkQ29sb3IgPSBmdW5jdGlvbiBfaXNOYW1lZENvbG9yKGNvbG9yKSB7XG4gIHJldHVybiBDT0xPUlMuaW5jbHVkZXMoY29sb3IpO1xufTtcbmV4cG9ydCB2YXIgRXVpVGV4dENvbG9yID0gZnVuY3Rpb24gRXVpVGV4dENvbG9yKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdkZWZhdWx0JyA6IF9yZWYkY29sb3IsXG4gICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICBDb21wb25lbnQgPSBfcmVmJGNvbXBvbmVudCA9PT0gdm9pZCAwID8gJ3NwYW4nIDogX3JlZiRjb21wb25lbnQsXG4gICAgX3JlZiRjbG9uZUVsZW1lbnQgPSBfcmVmLmNsb25lRWxlbWVudCxcbiAgICBjbG9uZUVsZW1lbnQgPSBfcmVmJGNsb25lRWxlbWVudCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNsb25lRWxlbWVudCxcbiAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNOYW1lZENvbG9yID0gX2lzTmFtZWRDb2xvcihjb2xvcik7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUZXh0Q29sb3JTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUZXh0Q29sb3IsIGlzTmFtZWRDb2xvciA/IHN0eWxlc1tjb2xvcl0gOiBzdHlsZXMuY3VzdG9tQ29sb3JdO1xuXG4gIC8vIFdlJ3JlIGNoZWNraW5nIGlmIGlzIGEgY3VzdG9tIGNvbG9yLlxuICAvLyBJZiBpdCBpcyBhIGN1c3RvbSBjb2xvciB3ZSBzZXQgdGhlIGBjb2xvcmAgb2YgdGhlIGAuZXVpVGV4dENvbG9yYCBkaXYgdG8gdGhhdCBjdXN0b20gY29sb3IuXG4gIC8vIFRoaXMgd2F5IHRoZSBjaGlsZHJlbiB0ZXh0IGVsZW1lbnRzIGNhbiBgaW5oZXJpdGAgdGhhdCBjb2xvciBhbmQgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kcyBjYW4gZ2V0IHRoYXQgYGN1cnJlbnRDb2xvcmAuXG4gIHZhciBldWlUZXh0U3R5bGUgPSAhaXNOYW1lZENvbG9yID8gX29iamVjdFNwcmVhZCh7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0sIHN0eWxlKSA6IF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKTtcbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgc3R5bGU6IGV1aVRleHRTdHlsZVxuICB9LCByZXN0KTtcbiAgaWYgKCAvKiNfX1BVUkVfXyovaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNsb25lRWxlbWVudCkge1xuICAgIHZhciBjaGlsZHJlblN0eWxlID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjaGlsZHJlbi5wcm9wcy5zdHlsZSksIGV1aVRleHRTdHlsZSk7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudFdpdGhDc3MoY2hpbGRyZW4sIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgc3R5bGU6IGNoaWxkcmVuU3R5bGVcbiAgICB9KSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBwcm9wcywgY2hpbGRyZW4pO1xuICB9XG59O1xuRXVpVGV4dENvbG9yLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogVGhlIEhUTUwgZWxlbWVudC90YWcgdG8gcmVuZGVyLlxuICAgICAgICogVXNlIHdpdGggY2FyZSB3aGVuIG5lc3RpbmcgbXVsdGlwbGUgY29tcG9uZW50cyB0byBlbnN1cmUgdmFsaWQgWEhUTUw6XG4gICAgICAgKiAtIGA8ZGl2PmAgYW5kIG90aGVyIGJsb2NrIHRhZ3MgYXJlIG5vdCB2YWxpZCB0byB1c2UgaW5zaWRlIGA8cD5gLiBJZiB1c2luZyB0aGUgYDxwPmAgdGFnLCB3ZSByZWNvbW1lbmQgcGFzc2luZyBzdHJpbmdzL3RleHQgb25seS5cbiAgICAgICAqIC0gYDxzcGFuPmAgaXMgdmFsaWQgdG8gYmUgbmVzdGVkIGluIGFueSB0YWcsIGFuZCBjYW4gaGF2ZSBhbnkgdGFnIG5lc3RlZCB3aXRoaW4gaXQuXG4gICAgICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCIsIFwic3BhblwiLCBcInBcIl0pLFxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRleHQgc3R5bGluZyB0byB0aGUgY2hpbGQgZWxlbWVudCBpbnN0ZWFkIG9mIHJlbmRlcmluZyBhIHBhcmVudCB3cmFwcGVyLlxuICAgICAqIENhbiBvbmx5IGJlIHVzZWQgd2hlbiB3cmFwcGluZyBhICpzaW5nbGUqIGNoaWxkIGVsZW1lbnQvdGFnLCBhbmQgbm90IHJhdyB0ZXh0LlxuICAgICAqL1xuICBjbG9uZUVsZW1lbnQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9ycyBvciBhIGBoZXhgLCBgcmdiYCBvciBgcmdiYWAgdmFsdWUuXG4gICAgICogQGRlZmF1bHQgaW5oZXJpdFxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIlxufSA6IHtcbiAgbmFtZTogXCJ1YWNqYzUtaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiY29sb3I6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVRleHRDb2xvclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRleHRDb2xvclN0eWxlcyhfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUZXh0Q29sb3I6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZXVpVGV4dENvbG9yO1wiKSxcbiAgICBkZWZhdWx0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjs7bGFiZWw6ZGVmYXVsdDtcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQsIFwiOztsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICBzdWNjZXNzOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5zdWNjZXNzVGV4dCwgXCI7O2xhYmVsOnN1Y2Nlc3M7XCIpLFxuICAgIGFjY2VudDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuYWNjZW50VGV4dCwgXCI7O2xhYmVsOmFjY2VudDtcIiksXG4gICAgZGFuZ2VyOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYW5nZXJUZXh0LCBcIjs7bGFiZWw6ZGFuZ2VyO1wiKSxcbiAgICB3YXJuaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy53YXJuaW5nVGV4dCwgXCI7O2xhYmVsOndhcm5pbmc7XCIpLFxuICAgIGdob3N0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCIhaW1wb3J0YW50OztsYWJlbDpnaG9zdDtcIiksXG4gICAgaW5oZXJpdDogX3JlZixcbiAgICBjdXN0b21Db2xvcjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpjdXN0b21Db2xvcjtcIikgLy8gSGFuZGxlZCBieSBgc3R5bGVgIHRhZyAtIHRoaXMgaXMganVzdCBoZXJlIGZvciBhIGNsYXNzTmFtZSBob29rXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb21wb25lbnRcIiwgXCJ0ZXh0QWxpZ25cIiwgXCJjbG9uZUVsZW1lbnRcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGNsb25lRWxlbWVudFdpdGhDc3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlUZXh0QWxpZ25TdHlsZXMgYXMgc3R5bGVzIH0gZnJvbSAnLi90ZXh0X2FsaWduLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBBTElHTk1FTlRTID0gWydsZWZ0JywgJ3JpZ2h0JywgJ2NlbnRlciddO1xuZXhwb3J0IHZhciBFdWlUZXh0QWxpZ24gPSBmdW5jdGlvbiBFdWlUZXh0QWxpZ24oX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIF9yZWYkY29tcG9uZW50ID0gX3JlZi5jb21wb25lbnQsXG4gICAgQ29tcG9uZW50ID0gX3JlZiRjb21wb25lbnQgPT09IHZvaWQgMCA/ICdkaXYnIDogX3JlZiRjb21wb25lbnQsXG4gICAgX3JlZiR0ZXh0QWxpZ24gPSBfcmVmLnRleHRBbGlnbixcbiAgICB0ZXh0QWxpZ24gPSBfcmVmJHRleHRBbGlnbiA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZiR0ZXh0QWxpZ24sXG4gICAgX3JlZiRjbG9uZUVsZW1lbnQgPSBfcmVmLmNsb25lRWxlbWVudCxcbiAgICBjbG9uZUVsZW1lbnQgPSBfcmVmJGNsb25lRWxlbWVudCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNsb25lRWxlbWVudCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRleHRBbGlnbiwgc3R5bGVzW3RleHRBbGlnbl1dO1xuICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KTtcbiAgaWYgKCAvKiNfX1BVUkVfXyovaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNsb25lRWxlbWVudCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBwcm9wcyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBwcm9wcywgY2hpbGRyZW4pO1xuICB9XG59O1xuRXVpVGV4dEFsaWduLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogVGhlIEhUTUwgZWxlbWVudC90YWcgdG8gcmVuZGVyLlxuICAgICAgICogVXNlIHdpdGggY2FyZSB3aGVuIG5lc3RpbmcgbXVsdGlwbGUgY29tcG9uZW50cyB0byBlbnN1cmUgdmFsaWQgWEhUTUw6XG4gICAgICAgKiAtIGA8ZGl2PmAgYW5kIG90aGVyIGJsb2NrIHRhZ3MgYXJlIG5vdCB2YWxpZCB0byB1c2UgaW5zaWRlIGA8cD5gLiBJZiB1c2luZyB0aGUgYDxwPmAgdGFnLCB3ZSByZWNvbW1lbmQgcGFzc2luZyBzdHJpbmdzL3RleHQgb25seS5cbiAgICAgICAqIC0gYDxzcGFuPmAgaXMgdmFsaWQgdG8gYmUgbmVzdGVkIGluIGFueSB0YWcsIGFuZCBjYW4gaGF2ZSBhbnkgdGFnIG5lc3RlZCB3aXRoaW4gaXQuXG4gICAgICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCIsIFwic3BhblwiLCBcInBcIl0pLFxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRleHQgc3R5bGluZyB0byB0aGUgY2hpbGQgZWxlbWVudCBpbnN0ZWFkIG9mIHJlbmRlcmluZyBhIHBhcmVudCB3cmFwcGVyLlxuICAgICAqIENhbiBvbmx5IGJlIHVzZWQgd2hlbiB3cmFwcGluZyBhICpzaW5nbGUqIGNoaWxkIGVsZW1lbnQvdGFnLCBhbmQgbm90IHJhdyB0ZXh0LlxuICAgICAqL1xuICBjbG9uZUVsZW1lbnQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBBcHBsaWVzIGhvcml6b250YWwgdGV4dCBhbGlnbm1lbnRcbiAgICAgKiBAZGVmYXVsdCBsZWZ0XG4gICAgICovXG4gIHRleHRBbGlnbjogUHJvcFR5cGVzLmFueVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbFRleHRBbGlnbkNTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpVGV4dEFsaWduU3R5bGVzID0ge1xuICBldWlUZXh0QWxpZ246IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZXVpVGV4dEFsaWduO1wiKSxcbiAgbGVmdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiOztsYWJlbDpsZWZ0O1wiKSxcbiAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygncmlnaHQnKSwgXCI7O2xhYmVsOnJpZ2h0O1wiKSxcbiAgY2VudGVyOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIjs7bGFiZWw6Y2VudGVyO1wiKVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9jdXNSaW5nLCBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlMaW5rQ1NTID0gZnVuY3Rpb24gZXVpTGlua0NTUyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4gXCJcXG4gICAgZm9udC13ZWlnaHQ6IFwiLmNvbmNhdChldWlUaGVtZS5mb250LndlaWdodC5tZWRpdW0sIFwiO1xcbiAgICBcIikuY29uY2F0KGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2xlZnQnKSwgXCJcXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgIH1cXG5cXG4gICAgJjpmb2N1cyB7XFxuICAgICAgXCIpLmNvbmNhdChldWlGb2N1c1JpbmcoZXVpVGhlbWVDb250ZXh0LCAnb3V0c2V0JyksIFwiXFxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgICAgdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzczogXCIpLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpY2ssIFwiO1xcbiAgICB9XFxuICBcIik7XG59O1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiOW5qYmk1LWRpc2FibGVkXCIsXG4gIHN0eWxlczogXCJmb250LXdlaWdodDppbmhlcml0OyY6aG92ZXJ7Y3Vyc29yOmF1dG87fSY6aG92ZXIsJjpmb2N1cywmOnRhcmdldHt0ZXh0LWRlY29yYXRpb246bm9uZTt9O2xhYmVsOmRpc2FibGVkO1wiXG59IDoge1xuICBuYW1lOiBcIjluamJpNS1kaXNhYmxlZFwiLFxuICBzdHlsZXM6IFwiZm9udC13ZWlnaHQ6aW5oZXJpdDsmOmhvdmVye2N1cnNvcjphdXRvO30mOmhvdmVyLCY6Zm9jdXMsJjp0YXJnZXR7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fTtsYWJlbDpkaXNhYmxlZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlMaW5rU3R5bGVzID0gZnVuY3Rpb24gZXVpTGlua1N0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUxpbms6IC8qI19fUFVSRV9fKi9jc3MoZXVpTGlua0NTUyhldWlUaGVtZUNvbnRleHQpLCBcIiB1c2VyLXNlbGVjdDp0ZXh0OyZbdGFyZ2V0PSdfYmxhbmsnXXtwb3NpdGlvbjpyZWxhdGl2ZTt9O2xhYmVsOmV1aUxpbms7XCIpLFxuICAgIGRpc2FibGVkOiBfcmVmLFxuICAgIC8vIENvbG9yIHN0eWxlc1xuICAgIHByaW1hcnk6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCksIFwiO2xhYmVsOnByaW1hcnk7XCIpLFxuICAgIHN1YmR1ZWQ6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5zdWJkdWVkVGV4dCksIFwiO2xhYmVsOnN1YmR1ZWQ7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5zdWNjZXNzVGV4dCksIFwiO2xhYmVsOnN1Y2Nlc3M7XCIpLFxuICAgIGFjY2VudDogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLmFjY2VudFRleHQpLCBcIjtsYWJlbDphY2NlbnQ7XCIpLFxuICAgIGRhbmdlcjogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLmRhbmdlclRleHQpLCBcIjtsYWJlbDpkYW5nZXI7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy53YXJuaW5nVGV4dCksIFwiO2xhYmVsOndhcm5pbmc7XCIpLFxuICAgIGdob3N0OiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuZ2hvc3QpLCBcIjtsYWJlbDpnaG9zdDtcIiksXG4gICAgdGV4dDogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLnRleHQpLCBcIjtsYWJlbDp0ZXh0O1wiKVxuICB9O1xufTtcbnZhciBfY29sb3JDU1MgPSBmdW5jdGlvbiBfY29sb3JDU1MoY29sb3IpIHtcbiAgcmV0dXJuIFwiXFxuICAgIGNvbG9yOiBcIi5jb25jYXQoY29sb3IsIFwiO1xcblxcbiAgICAmOnRhcmdldCB7XFxuICAgICAgY29sb3I6IGRhcmtlbihcIikuY29uY2F0KGNvbG9yLCBcIiwgMTAlKTtcXG4gICAgfVxcbiAgXCIpO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlUZXh0QnJlYWtXb3JkLCBldWlGb250U2l6ZSwgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxuLyoqXG4gKiBNaXhpblxuICovXG5cbmV4cG9ydCB2YXIgZXVpVGl0bGUgPSBmdW5jdGlvbiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIHNjYWxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnbSc7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIHRpdGxlU2NhbGVUb0ZvbnRTaXplU2NhbGVNYXAgPSB7XG4gICAgeHh4czogJ3hzJyxcbiAgICB4eHM6ICdzJyxcbiAgICB4czogJ20nLFxuICAgIHM6ICdsJyxcbiAgICBtOiAneGwnLFxuICAgIGw6ICd4eGwnXG4gIH07XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgdGl0bGVTY2FsZVRvRm9udFNpemVTY2FsZU1hcFtzY2FsZV0sIG9wdGlvbnMpKSwge30sIHtcbiAgICBmb250V2VpZ2h0OiBldWlUaGVtZS5mb250LndlaWdodFtldWlUaGVtZS5mb250LnRpdGxlLndlaWdodF0sXG4gICAgY29sb3I6IGV1aVRoZW1lLmNvbG9ycy50aXRsZVxuICB9KTtcbn07XG5cbi8qKlxuICogU3R5bGVzXG4gKi9cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjF4MnFzYjEtdXBwZXJjYXNlXCIsXG4gIHN0eWxlczogXCJ0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGFiZWw6dXBwZXJjYXNlO1wiXG59IDoge1xuICBuYW1lOiBcIjF4MnFzYjEtdXBwZXJjYXNlXCIsXG4gIHN0eWxlczogXCJ0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGFiZWw6dXBwZXJjYXNlO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVRpdGxlU3R5bGVzID0gZnVuY3Rpb24gZXVpVGl0bGVTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiB7XG4gICAgZXVpVGl0bGU6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dEJyZWFrV29yZCgpLCBcIiAmKyZ7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUuc2l6ZS5sKSwgXCI7fTtsYWJlbDpldWlUaXRsZTtcIiksXG4gICAgdXBwZXJjYXNlOiBfcmVmLFxuICAgIC8vIFNpemVzXG4gICAgeHh4czogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJyksIFwiOztsYWJlbDp4eHhzO1wiKSxcbiAgICB4eHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJyksIFwiOztsYWJlbDp4eHM7XCIpLFxuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIjs7bGFiZWw6bDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxTaG9ydGhhbmRDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MsIGV1aUZvbnRTaXplLCBldWlCYWNrZ3JvdW5kQ29sb3IsIG1hdGhXaXRoVW5pdHMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlMaW5rQ1NTIH0gZnJvbSAnLi4vbGluay9saW5rLnN0eWxlcyc7XG5pbXBvcnQgeyBldWlUaXRsZSB9IGZyb20gJy4uL3RpdGxlL3RpdGxlLnN0eWxlcyc7XG5cbi8qKlxuICogVE9ETzogTWFrZSB0aGlzIGEgZ2xvYmFsIHZhbHVlIHNvIGl0IGNhbiBiZSBzZXQgYnkgdGhlbWU/XG4gKi9cbmV4cG9ydCB2YXIgZXVpVGV4dENvbnN0cmFpbmVkTWF4V2lkdGggPSAnbWF4KDY0Y2gsIDc1JSknO1xuXG4vKipcbiAqIE1peGluc1xuICovXG5leHBvcnQgdmFyIGV1aVRleHQgPSBmdW5jdGlvbiBldWlUZXh0KGV1aVRoZW1lKSB7XG4gIHZhciBpbmhlcml0Q29sb3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIGNvbG9yOiBpbmhlcml0Q29sb3IgPyAnaW5oZXJpdCcgOiBldWlUaGVtZS5jb2xvcnMudGV4dCxcbiAgICBmb250V2VpZ2h0OiBldWlUaGVtZS5mb250LndlaWdodC5yZWd1bGFyXG4gIH07XG59O1xuXG4vLyBJbnRlcm5hbCB1dGlsaXR5IGZvciBFdWlUZXh0IHNjYWxlcy9zaXplc1xudmFyIGV1aVNjYWxlVGV4dCA9IGZ1bmN0aW9uIGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIG9wdGlvbnMpIHtcbiAgdmFyIF9ldWlGb250U2l6ZSA9IGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ20nLCBvcHRpb25zKSxcbiAgICBmb250U2l6ZSA9IF9ldWlGb250U2l6ZS5mb250U2l6ZSxcbiAgICBsaW5lSGVpZ2h0ID0gX2V1aUZvbnRTaXplLmxpbmVIZWlnaHQ7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIHVuaXQgPSBvcHRpb25zLnVuaXQsXG4gICAgX2N1c3RvbVNjYWxlID0gb3B0aW9ucy5jdXN0b21TY2FsZTtcbiAgdmFyIGxpbmVIZWlnaHRTaXplID0gdW5pdCA9PT0gJ2VtJyA/IFwiXCIuY29uY2F0KGxpbmVIZWlnaHQsIFwiZW1cIikgOiBsaW5lSGVpZ2h0O1xuICB2YXIgaGVhZGluZ3MgPSB7XG4gICAgaDE6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ2wnLCBvcHRpb25zKSxcbiAgICBoMjogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbScsIG9wdGlvbnMpLFxuICAgIGgzOiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdzJywgb3B0aW9ucyksXG4gICAgaDQ6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJywgb3B0aW9ucyksXG4gICAgaDU6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4cycsIG9wdGlvbnMpLFxuICAgIGg2OiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJywgb3B0aW9ucylcbiAgfTtcbiAgLy8gR2VuZXJhdGUgbWFyZ2lucyBmb3IgaGVhZGluZ3MgYmFzZWQgb24gY3VzdG9tU2NhbGUgKG5vdCBvbiBoZWFkaW5nIGxldmVsKVxuICB2YXIgY3VzdG9tU2NhbGUgPSBfY3VzdG9tU2NhbGUgPT09ICd4eHhzJyA/ICd4eHMnIDogX2N1c3RvbVNjYWxlIHx8ICdtJztcbiAgdmFyIG1hcmdpblNpemUgPSBldWlUaGVtZS5zaXplW2N1c3RvbVNjYWxlXTtcbiAgdmFyIGhlYWRpbmdNYXJnaW5Ub3AgPSBtYXRoV2l0aFVuaXRzKG1hcmdpblNpemUsIGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHggKiAyO1xuICB9KTtcbiAgdmFyIGhlYWRpbmdNYXJnaW5Cb3R0b20gPSBtYXJnaW5TaXplO1xuICB2YXIgYmxvY2tRdW90ZUJvcmRlcldpZHRoID0gbWF0aFdpdGhVbml0cyhmb250U2l6ZSwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4geCAvIDQ7XG4gIH0pO1xuICByZXR1cm4gXCJcXG4gICAgZm9udC1zaXplOiBcIi5jb25jYXQoZm9udFNpemUsIFwiO1xcbiAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChsaW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgaDEge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oMS5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDEubGluZUhlaWdodCwgXCI7XFxuICAgIH1cXG4gICAgaDE6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgIH1cXG5cXG4gICAgaDIge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oMi5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDIubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoMyB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmgzLmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oMy5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGg0IHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDQuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmg0LmxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGVhZGluZ01hcmdpblRvcCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgaDUge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oNS5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDUubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoNiB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmg2LmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oNi5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHAsXFxuICAgIGRsLFxcbiAgICBibG9ja3F1b3RlLFxcbiAgICBwcmUsXFxuICAgID4gdWwsXFxuICAgID4gb2wge1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGxpbmVIZWlnaHRTaXplKSwgXCJcXG4gICAgfVxcblxcbiAgICB1bCxcXG4gICAgb2wge1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCBsaW5lSGVpZ2h0U2l6ZSksIFwiXFxuICAgIH1cXG5cXG4gICAgLyogVGhlIHN0eWxlcyBvZiB0aGUgbmVzdGVkIG9yZGVyZWQgbGlzdHMgZm9sbG93IHRoZSBzdHlsZSBvZiBHaXRIdWJcXG4gICAgICAgd2hpY2ggaXMgY29tbW9ubHkgdXNlZCBpbiBNYXJrZG93biBvciBNRFggZm9ybWF0dGluZy4gKi9cXG4gICAgb2wgb2wsXFxuICAgIHVsIG9sIHtcXG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IGxvd2VyLXJvbWFuO1xcbiAgICB9XFxuXFxuICAgIHVsIHVsIG9sLFxcbiAgICB1bCBvbCBvbCxcXG4gICAgb2wgdWwgb2wsXFxuICAgIG9sIG9sIG9sIHtcXG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IGxvd2VyLWFscGhhO1xcbiAgICB9XFxuICBcXG4gICAgYmxvY2txdW90ZSB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGZvbnRTaXplLCBcIjtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxTaG9ydGhhbmRDU1MoJ3BhZGRpbmcnLCBcIjAgXCIuY29uY2F0KGZvbnRTaXplKSksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdib3JkZXItbGVmdC13aWR0aCcsIGJsb2NrUXVvdGVCb3JkZXJXaWR0aCksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgZm9udFNpemUpLCBcIlxcbiAgICB9XFxuXFxuICAgIGRkICsgZHQge1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGZvbnRTaXplKSwgXCJcXG4gICAgfVxcblxcbiAgICBkdCxcXG4gICAgLmV1aS1kZWZpbml0aW9uTGlzdFJldmVyc2UgZGQge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChmb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQobGluZUhlaWdodCwgXCI7XFxuICAgIH1cXG5cXG4gICAgLmV1aS1kZWZpbml0aW9uTGlzdFJldmVyc2UgZHQge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICd4cycsIG9wdGlvbnMpLmZvbnRTaXplLCBcIjtcXG4gICAgICBjb2xvcjogXCIpLmNvbmNhdChldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7XFxuICAgIH1cXG5cXG4gICAgc21hbGwge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJywgb3B0aW9ucykuZm9udFNpemUsIFwiO1xcbiAgICB9XFxuXFxuICAgIHByZTpub3QoLmV1aUNvZGVCbG9ja19fcHJlKSB7XFxuICAgICAgcGFkZGluZzogXCIpLmNvbmNhdChsaW5lSGVpZ2h0U2l6ZSwgXCI7XFxuICAgIH1cXG5cXG4gICAgY29kZTpub3QoLmV1aUNvZGUpOm5vdCguZXVpQ29kZUJsb2NrX19jb2RlKSAge1xcbiAgICAgIGZvbnQtc2l6ZTogLjllbTsgLyogOTAlIG9mIHBhcmVudCBmb250IHNpemUgKi9cXG4gICAgfVxcbiAgICBcIikuY29uY2F0KFxuICAvLyB3aGVuIHRleHRTaXplIGlzICdtJywgdGhlICdrYmQnIGVsZW1lbnQgZ2V0cyBhIGxpbmUgYmV0d2VlbiB0aGUgdGV4dCBhbmQgdGhlIGJvcmRlci1ib3R0b21cbiAgX2N1c3RvbVNjYWxlID09PSAnbScgPyBcIlxcbiAgICBrYmQge1xcbiAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWJvdHRvbScsIGV1aVRoZW1lLnNpemUueHMpLCBcIlxcbiAgICAgIC8qIEVuc3VyZXMgdGhlIHNoYXBlIHN0aWxsIGxvb2tzIGxpa2UgYSBzcXVhcmUgd2hlbiBvbmx5IG9uZSBjaGFyYWN0ZXIgKi9cXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21pbi13aWR0aCcsIGV1aVRoZW1lLnNpemUubCksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCJcXG4gICAgfVxcbiAgICBcXG4gICAga2JkOjphZnRlciB7XFxuICAgICAgY29udGVudDogJyc7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdib3JkZXItYm90dG9tJywgXCJcIi5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIFwiKS5jb25jYXQoZXVpVGhlbWUuY29sb3JzLnRleHQpKSwgXCJcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdib3R0b20nLCBldWlUaGVtZS5zaXplLnh4cyksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdsZWZ0JywgMCksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiXFxuICAgIH1cIikgOiAnJywgXCJcXG4gIFwiKTtcbn07XG5cbi8qKlxuICogU3R5bGVzXG4gKi9cbmV4cG9ydCB2YXIgZXVpVGV4dFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRleHRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUZXh0OiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHQoZXVpVGhlbWUsIHRydWUpLCBcImNsZWFyOmJvdGg7YTpub3QoW2NsYXNzXSl7XCIsIGV1aUxpbmtDU1MoZXVpVGhlbWVDb250ZXh0KSwgXCI7fXVse2xpc3Qtc3R5bGU6ZGlzYzt9b2x7bGlzdC1zdHlsZTpkZWNpbWFsO31ibG9ja3F1b3Rle2JvcmRlci1pbmxpbmUtc3RhcnQtY29sb3I6XCIsIGV1aVRoZW1lLmJvcmRlci5jb2xvciwgXCI7Ym9yZGVyLWlubGluZS1zdGFydC1zdHlsZTpzb2xpZDt9YmxvY2txdW90ZTpub3QoLmV1aU1hcmtkb3duRm9ybWF0X19ibG9ja3F1b3RlKXtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1YmR1ZWRUZXh0LCBcIjt9aDF7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ2wnKSwgXCI7fWgye1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdtJyksIFwiO31oM3tcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIjt9aDQsZHR7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiO31oNXtcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJyksIFwiO31oNntcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHh4cycpLCBcIiB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7fWgxLGgyLGgzLGg0LGg1LGg2LGR0e2NvbG9yOmluaGVyaXQ7fXByZTpub3QoLmV1aUNvZGVCbG9ja19fcHJlKXt3aGl0ZS1zcGFjZTpwcmUtd3JhcDtiYWNrZ3JvdW5kOlwiLCBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAnc3ViZHVlZCcpLCBcIjtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO31wcmU6bm90KC5ldWlDb2RlQmxvY2tfX3ByZSkscHJlOm5vdCguZXVpQ29kZUJsb2NrX19wcmUpIGNvZGV7ZGlzcGxheTpibG9jazt9PjpsYXN0LWNoaWxke1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgJzAgIWltcG9ydGFudCcpLCBcIjt9a2Jke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLXZlcnRpY2FsJywgZXVpVGhlbWUuc2l6ZS54eHMpLCBcIiBcIiwgbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiIGxpbmUtaGVpZ2h0OjE7Ym9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgc29saWQgXCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjtib3JkZXItcmFkaXVzOlwiLCBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLmJvcmRlci5yYWRpdXMuc21hbGwsIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAvIDI7XG4gICAgfSksIFwiO307bGFiZWw6ZXVpVGV4dDtcIiksXG4gICAgY29uc3RyYWluZWRXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCBldWlUZXh0Q29uc3RyYWluZWRNYXhXaWR0aCksIFwiOztsYWJlbDpjb25zdHJhaW5lZFdpZHRoO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgY3VzdG9tU2NhbGU6ICdtJ1xuICAgIH0pLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhldWlTY2FsZVRleHQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICBjdXN0b21TY2FsZTogJ3MnXG4gICAgfSksIFwiOztsYWJlbDpzO1wiKSxcbiAgICB4czogLyojX19QVVJFX18qL2NzcyhldWlTY2FsZVRleHQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICBjdXN0b21TY2FsZTogJ3hzJ1xuICAgIH0pLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHJlbGF0aXZlOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgIHVuaXQ6ICdlbSdcbiAgICB9KSwgXCI7O2xhYmVsOnJlbGF0aXZlO1wiKVxuICB9O1xufTsiLCAiaW1wb3J0IHsgQ29tcG9uZW50LCBjcmVhdGVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIERldGVjdCBFbGVtZW50IFJlc2l6ZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zZGVjaW1hL2phdmFzY3JpcHQtZGV0ZWN0LWVsZW1lbnQtcmVzaXplXG4gKiBTZWJhc3RpYW4gRGVjaW1hXG4gKlxuICogRm9ya2VkIGZyb20gdmVyc2lvbiAwLjUuMzsgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zOlxuICogMSkgR3VhcmQgYWdhaW5zdCB1bnNhZmUgJ3dpbmRvdycgYW5kICdkb2N1bWVudCcgcmVmZXJlbmNlcyAodG8gc3VwcG9ydCBTU1IpLlxuICogMikgRGVmZXIgaW5pdGlhbGl6YXRpb24gY29kZSB2aWEgYSB0b3AtbGV2ZWwgZnVuY3Rpb24gd3JhcHBlciAodG8gc3VwcG9ydCBTU1IpLlxuICogMykgQXZvaWQgdW5uZWNlc3NhcnkgcmVmbG93cyBieSBub3QgbWVhc3VyaW5nIHNpemUgZm9yIHNjcm9sbCBldmVudHMgYnViYmxpbmcgZnJvbSBjaGlsZHJlbi5cbiAqIDQpIEFkZCBub25jZSBmb3Igc3R5bGUgZWxlbWVudC5cbiAqIDUpIFVzZSAnZXhwb3J0JyBzdGF0ZW1lbnQgb3ZlciAnbW9kdWxlLmV4cG9ydHMnIGFzc2lnbm1lbnRcbiAqKi9cblxuLy8gQ2hlY2sgYGRvY3VtZW50YCBhbmQgYHdpbmRvd2AgaW4gY2FzZSBvZiBzZXJ2ZXItc2lkZSByZW5kZXJpbmdcbmxldCB3aW5kb3dPYmplY3Q7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICB3aW5kb3dPYmplY3QgPSB3aW5kb3c7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gIHdpbmRvd09iamVjdCA9IHNlbGY7XG59IGVsc2Uge1xuICB3aW5kb3dPYmplY3QgPSBnbG9iYWw7XG59XG5sZXQgY2FuY2VsRnJhbWUgPSBudWxsO1xubGV0IHJlcXVlc3RGcmFtZSA9IG51bGw7XG5jb25zdCBUSU1FT1VUX0RVUkFUSU9OID0gMjA7XG5jb25zdCBjbGVhclRpbWVvdXRGbiA9IHdpbmRvd09iamVjdC5jbGVhclRpbWVvdXQ7XG5jb25zdCBzZXRUaW1lb3V0Rm4gPSB3aW5kb3dPYmplY3Quc2V0VGltZW91dDtcbmNvbnN0IGNhbmNlbEFuaW1hdGlvbkZyYW1lRm4gPSB3aW5kb3dPYmplY3QuY2FuY2VsQW5pbWF0aW9uRnJhbWUgfHwgd2luZG93T2JqZWN0Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZTtcbmNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuID0gd2luZG93T2JqZWN0LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3dPYmplY3QubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5pZiAoY2FuY2VsQW5pbWF0aW9uRnJhbWVGbiA9PSBudWxsIHx8IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuID09IG51bGwpIHtcbiAgLy8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvbid0IHN1cHBvcnQgYW5pbWF0aW9uIGZyYW1lLFxuICAvLyBmYWxsYmFjayB0byBhIHNldFRpbWVvdXQgYmFzZWQgYXBwcm9hY2guXG4gIGNhbmNlbEZyYW1lID0gY2xlYXJUaW1lb3V0Rm47XG4gIHJlcXVlc3RGcmFtZSA9IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZVZpYVNldFRpbWVvdXQoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gc2V0VGltZW91dEZuKGNhbGxiYWNrLCBUSU1FT1VUX0RVUkFUSU9OKTtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIENvdW50ZXIgaW50dWl0aXZlbHksIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgYW5pbWF0aW9uIGZyYW1lcyBjYW4gYmUgdHJpY2tpZXIuXG4gIC8vIENocm9tZSdzIFwiVGhyb3R0bGUgbm9uLXZpc2libGUgY3Jvc3Mtb3JpZ2luIGlmcmFtZXNcIiBmbGFnIGNhbiBwcmV2ZW50IHJBRnMgZnJvbSBiZWluZyBjYWxsZWQuXG4gIC8vIEluIHRoaXMgY2FzZSwgd2Ugc2hvdWxkIGZhbGxiYWNrIHRvIGEgc2V0VGltZW91dCgpIGltcGxlbWVudGF0aW9uLlxuICBjYW5jZWxGcmFtZSA9IGZ1bmN0aW9uIGNhbmNlbEZyYW1lKFthbmltYXRpb25GcmFtZUlELCB0aW1lb3V0SURdKSB7XG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWVGbihhbmltYXRpb25GcmFtZUlEKTtcbiAgICBjbGVhclRpbWVvdXRGbih0aW1lb3V0SUQpO1xuICB9O1xuICByZXF1ZXN0RnJhbWUgPSBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVXaXRoU2V0VGltZW91dEZhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgYW5pbWF0aW9uRnJhbWVJRCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuKGZ1bmN0aW9uIGFuaW1hdGlvbkZyYW1lQ2FsbGJhY2soKSB7XG4gICAgICBjbGVhclRpbWVvdXRGbih0aW1lb3V0SUQpO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0Rm4oZnVuY3Rpb24gdGltZW91dENhbGxiYWNrKCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWVGbihhbmltYXRpb25GcmFtZUlEKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSwgVElNRU9VVF9EVVJBVElPTik7XG4gICAgcmV0dXJuIFthbmltYXRpb25GcmFtZUlELCB0aW1lb3V0SURdO1xuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlRGV0ZWN0RWxlbWVudFJlc2l6ZShub25jZSkge1xuICBsZXQgYW5pbWF0aW9uS2V5ZnJhbWVzO1xuICBsZXQgYW5pbWF0aW9uTmFtZTtcbiAgbGV0IGFuaW1hdGlvblN0YXJ0RXZlbnQ7XG4gIGxldCBhbmltYXRpb25TdHlsZTtcbiAgbGV0IGNoZWNrVHJpZ2dlcnM7XG4gIGxldCByZXNldFRyaWdnZXJzO1xuICBsZXQgc2Nyb2xsTGlzdGVuZXI7XG4gIGNvbnN0IGF0dGFjaEV2ZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmF0dGFjaEV2ZW50O1xuICBpZiAoIWF0dGFjaEV2ZW50KSB7XG4gICAgcmVzZXRUcmlnZ2VycyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICBjb25zdCB0cmlnZ2VycyA9IGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLFxuICAgICAgICBleHBhbmQgPSB0cmlnZ2Vycy5maXJzdEVsZW1lbnRDaGlsZCxcbiAgICAgICAgY29udHJhY3QgPSB0cmlnZ2Vycy5sYXN0RWxlbWVudENoaWxkLFxuICAgICAgICBleHBhbmRDaGlsZCA9IGV4cGFuZC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgIGNvbnRyYWN0LnNjcm9sbExlZnQgPSBjb250cmFjdC5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnRyYWN0LnNjcm9sbFRvcCA9IGNvbnRyYWN0LnNjcm9sbEhlaWdodDtcbiAgICAgIGV4cGFuZENoaWxkLnN0eWxlLndpZHRoID0gZXhwYW5kLm9mZnNldFdpZHRoICsgMSArIFwicHhcIjtcbiAgICAgIGV4cGFuZENoaWxkLnN0eWxlLmhlaWdodCA9IGV4cGFuZC5vZmZzZXRIZWlnaHQgKyAxICsgXCJweFwiO1xuICAgICAgZXhwYW5kLnNjcm9sbExlZnQgPSBleHBhbmQuc2Nyb2xsV2lkdGg7XG4gICAgICBleHBhbmQuc2Nyb2xsVG9wID0gZXhwYW5kLnNjcm9sbEhlaWdodDtcbiAgICB9O1xuICAgIGNoZWNrVHJpZ2dlcnMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0V2lkdGggIT09IGVsZW1lbnQuX19yZXNpemVMYXN0X18ud2lkdGggfHwgZWxlbWVudC5vZmZzZXRIZWlnaHQgIT09IGVsZW1lbnQuX19yZXNpemVMYXN0X18uaGVpZ2h0O1xuICAgIH07XG4gICAgc2Nyb2xsTGlzdGVuZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgLy8gRG9uJ3QgbWVhc3VyZSAod2hpY2ggZm9yY2VzKSByZWZsb3cgZm9yIHNjcm9sbHMgdGhhdCBoYXBwZW4gaW5zaWRlIG9mIGNoaWxkcmVuIVxuICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSAmJiB0eXBlb2YgZS50YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YgPT09IFwiZnVuY3Rpb25cIiAmJiBlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihcImNvbnRyYWN0LXRyaWdnZXJcIikgPCAwICYmIGUudGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKFwiZXhwYW5kLXRyaWdnZXJcIikgPCAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzO1xuICAgICAgcmVzZXRUcmlnZ2Vycyh0aGlzKTtcbiAgICAgIGlmICh0aGlzLl9fcmVzaXplUkFGX18pIHtcbiAgICAgICAgY2FuY2VsRnJhbWUodGhpcy5fX3Jlc2l6ZVJBRl9fKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX19yZXNpemVSQUZfXyA9IHJlcXVlc3RGcmFtZShmdW5jdGlvbiBhbmltYXRpb25GcmFtZSgpIHtcbiAgICAgICAgaWYgKGNoZWNrVHJpZ2dlcnMoZWxlbWVudCkpIHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLndpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLmhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hSZXNpemVMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgZm4uY2FsbChlbGVtZW50LCBlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qIERldGVjdCBDU1MgQW5pbWF0aW9ucyBzdXBwb3J0IHRvIGRldGVjdCBlbGVtZW50IGRpc3BsYXkvcmUtYXR0YWNoICovXG4gICAgbGV0IGFuaW1hdGlvbiA9IGZhbHNlO1xuICAgIGxldCBrZXlmcmFtZXByZWZpeCA9IFwiXCI7XG4gICAgYW5pbWF0aW9uU3RhcnRFdmVudCA9IFwiYW5pbWF0aW9uc3RhcnRcIjtcbiAgICBjb25zdCBkb21QcmVmaXhlcyA9IFwiV2Via2l0IE1veiBPIG1zXCIuc3BsaXQoXCIgXCIpO1xuICAgIGxldCBzdGFydEV2ZW50cyA9IFwid2Via2l0QW5pbWF0aW9uU3RhcnQgYW5pbWF0aW9uc3RhcnQgb0FuaW1hdGlvblN0YXJ0IE1TQW5pbWF0aW9uU3RhcnRcIi5zcGxpdChcIiBcIik7XG4gICAgbGV0IHBmeCA9IFwiXCI7XG4gICAge1xuICAgICAgY29uc3QgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZha2VlbGVtZW50XCIpO1xuICAgICAgaWYgKGVsbS5zdHlsZS5hbmltYXRpb25OYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhbmltYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tUHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZWxtLnN0eWxlW2RvbVByZWZpeGVzW2ldICsgXCJBbmltYXRpb25OYW1lXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBmeCA9IGRvbVByZWZpeGVzW2ldO1xuICAgICAgICAgICAga2V5ZnJhbWVwcmVmaXggPSBcIi1cIiArIHBmeC50b0xvd2VyQ2FzZSgpICsgXCItXCI7XG4gICAgICAgICAgICBhbmltYXRpb25TdGFydEV2ZW50ID0gc3RhcnRFdmVudHNbaV07XG4gICAgICAgICAgICBhbmltYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGFuaW1hdGlvbk5hbWUgPSBcInJlc2l6ZWFuaW1cIjtcbiAgICBhbmltYXRpb25LZXlmcmFtZXMgPSBcIkBcIiArIGtleWZyYW1lcHJlZml4ICsgXCJrZXlmcmFtZXMgXCIgKyBhbmltYXRpb25OYW1lICsgXCIgeyBmcm9tIHsgb3BhY2l0eTogMDsgfSB0byB7IG9wYWNpdHk6IDA7IH0gfSBcIjtcbiAgICBhbmltYXRpb25TdHlsZSA9IGtleWZyYW1lcHJlZml4ICsgXCJhbmltYXRpb246IDFtcyBcIiArIGFuaW1hdGlvbk5hbWUgKyBcIjsgXCI7XG4gIH1cbiAgY29uc3QgY3JlYXRlU3R5bGVzID0gZnVuY3Rpb24gKGRvYykge1xuICAgIGlmICghZG9jLmdldEVsZW1lbnRCeUlkKFwiZGV0ZWN0RWxlbWVudFJlc2l6ZVwiKSkge1xuICAgICAgLy9vcGFjaXR5OjAgd29ya3MgYXJvdW5kIGEgY2hyb21lIGJ1ZyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mjg2MzYwXG4gICAgICBjb25zdCBjc3MgPSAoYW5pbWF0aW9uS2V5ZnJhbWVzID8gYW5pbWF0aW9uS2V5ZnJhbWVzIDogXCJcIikgKyBcIi5yZXNpemUtdHJpZ2dlcnMgeyBcIiArIChhbmltYXRpb25TdHlsZSA/IGFuaW1hdGlvblN0eWxlIDogXCJcIikgKyBcInZpc2liaWxpdHk6IGhpZGRlbjsgb3BhY2l0eTogMDsgfSBcIiArICcucmVzaXplLXRyaWdnZXJzLCAucmVzaXplLXRyaWdnZXJzID4gZGl2LCAuY29udHJhY3QtdHJpZ2dlcjpiZWZvcmUgeyBjb250ZW50OiBcIiBcIjsgZGlzcGxheTogYmxvY2s7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBvdmVyZmxvdzogaGlkZGVuOyB6LWluZGV4OiAtMTsgfSAucmVzaXplLXRyaWdnZXJzID4gZGl2IHsgYmFja2dyb3VuZDogI2VlZTsgb3ZlcmZsb3c6IGF1dG87IH0gLmNvbnRyYWN0LXRyaWdnZXI6YmVmb3JlIHsgd2lkdGg6IDIwMCU7IGhlaWdodDogMjAwJTsgfScsXG4gICAgICAgIGhlYWQgPSBkb2MuaGVhZCB8fCBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLFxuICAgICAgICBzdHlsZSA9IGRvYy5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgICBzdHlsZS5pZCA9IFwiZGV0ZWN0RWxlbWVudFJlc2l6ZVwiO1xuICAgICAgc3R5bGUudHlwZSA9IFwidGV4dC9jc3NcIjtcbiAgICAgIGlmIChub25jZSAhPSBudWxsKSB7XG4gICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICAgIH1cbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgYWRkUmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiAoZWxlbWVudCwgZm4pIHtcbiAgICBpZiAoYXR0YWNoRXZlbnQpIHtcbiAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoXCJvbnJlc2l6ZVwiLCBmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18pIHtcbiAgICAgICAgY29uc3QgZG9jID0gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICBjb25zdCBlbGVtZW50U3R5bGUgPSB3aW5kb3dPYmplY3QuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSAmJiBlbGVtZW50U3R5bGUucG9zaXRpb24gPT09IFwic3RhdGljXCIpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZVN0eWxlcyhkb2MpO1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fID0ge307XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXyA9IFtdO1xuICAgICAgICAoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18gPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuY2xhc3NOYW1lID0gXCJyZXNpemUtdHJpZ2dlcnNcIjtcbiAgICAgICAgY29uc3QgZXhwYW5kVHJpZ2dlciA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBleHBhbmRUcmlnZ2VyLmNsYXNzTmFtZSA9IFwiZXhwYW5kLXRyaWdnZXJcIjtcbiAgICAgICAgZXhwYW5kVHJpZ2dlci5hcHBlbmRDaGlsZChkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0VHJpZ2dlciA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBjb250cmFjdFRyaWdnZXIuY2xhc3NOYW1lID0gXCJjb250cmFjdC10cmlnZ2VyXCI7XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLmFwcGVuZENoaWxkKGV4cGFuZFRyaWdnZXIpO1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5hcHBlbmRDaGlsZChjb250cmFjdFRyaWdnZXIpO1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fKTtcbiAgICAgICAgcmVzZXRUcmlnZ2VycyhlbGVtZW50KTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHNjcm9sbExpc3RlbmVyLCB0cnVlKTtcblxuICAgICAgICAvKiBMaXN0ZW4gZm9yIGEgY3NzIGFuaW1hdGlvbiB0byBkZXRlY3QgZWxlbWVudCBkaXNwbGF5L3JlLWF0dGFjaCAqL1xuICAgICAgICBpZiAoYW5pbWF0aW9uU3RhcnRFdmVudCkge1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyA9IGZ1bmN0aW9uIGFuaW1hdGlvbkxpc3RlbmVyKGUpIHtcbiAgICAgICAgICAgIGlmIChlLmFuaW1hdGlvbk5hbWUgPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgcmVzZXRUcmlnZ2VycyhlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLmFkZEV2ZW50TGlzdGVuZXIoYW5pbWF0aW9uU3RhcnRFdmVudCwgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLnB1c2goZm4pO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcmVtb3ZlUmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiAoZWxlbWVudCwgZm4pIHtcbiAgICBpZiAoYXR0YWNoRXZlbnQpIHtcbiAgICAgIGVsZW1lbnQuZGV0YWNoRXZlbnQoXCJvbnJlc2l6ZVwiLCBmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5zcGxpY2UoZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmluZGV4T2YoZm4pLCAxKTtcbiAgICAgIGlmICghZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmxlbmd0aCkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgc2Nyb2xsTGlzdGVuZXIsIHRydWUpO1xuICAgICAgICBpZiAoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fKSB7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhbmltYXRpb25TdGFydEV2ZW50LCBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18pO1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyA9ICFlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIFByZWFjdCBjb21wYXQ7IHNlZSBkZXZlbG9waXQvcHJlYWN0LWNvbXBhdC9pc3N1ZXMvMjI4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiB7XG4gICAgYWRkUmVzaXplTGlzdGVuZXIsXG4gICAgcmVtb3ZlUmVzaXplTGlzdGVuZXJcbiAgfTtcbn1cblxuY2xhc3MgQXV0b1NpemVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBoZWlnaHQ6IHRoaXMucHJvcHMuZGVmYXVsdEhlaWdodCB8fCAwLFxuICAgICAgc2NhbGVkSGVpZ2h0OiB0aGlzLnByb3BzLmRlZmF1bHRIZWlnaHQgfHwgMCxcbiAgICAgIHNjYWxlZFdpZHRoOiB0aGlzLnByb3BzLmRlZmF1bHRXaWR0aCB8fCAwLFxuICAgICAgd2lkdGg6IHRoaXMucHJvcHMuZGVmYXVsdFdpZHRoIHx8IDBcbiAgICB9O1xuICAgIHRoaXMuX2F1dG9TaXplciA9IG51bGw7XG4gICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSA9IG51bGw7XG4gICAgdGhpcy5fcGFyZW50Tm9kZSA9IG51bGw7XG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIHRoaXMuX3RpbWVvdXRJZCA9IG51bGw7XG4gICAgdGhpcy5fb25SZXNpemUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl90aW1lb3V0SWQgPSBudWxsO1xuICAgICAgY29uc3Qge1xuICAgICAgICBkaXNhYmxlSGVpZ2h0LFxuICAgICAgICBkaXNhYmxlV2lkdGgsXG4gICAgICAgIG9uUmVzaXplXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICh0aGlzLl9wYXJlbnROb2RlKSB7XG4gICAgICAgIC8vIEd1YXJkIGFnYWluc3QgQXV0b1NpemVyIGNvbXBvbmVudCBiZWluZyByZW1vdmVkIGZyb20gdGhlIERPTSBpbW1lZGlhdGVseSBhZnRlciBiZWluZyBhZGRlZC5cbiAgICAgICAgLy8gVGhpcyBjYW4gcmVzdWx0IGluIGludmFsaWQgc3R5bGUgdmFsdWVzIHdoaWNoIGNhbiByZXN1bHQgaW4gTmFOIHZhbHVlcyBpZiB3ZSBkb24ndCBoYW5kbGUgdGhlbS5cbiAgICAgICAgLy8gU2VlIGlzc3VlICMxNTAgZm9yIG1vcmUgY29udGV4dC5cblxuICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX3BhcmVudE5vZGUpIHx8IHt9O1xuICAgICAgICBjb25zdCBwYWRkaW5nTGVmdCA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0xlZnQgfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdSaWdodCB8fCBcIjBcIik7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdUb3AgfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nQm90dG9tIHx8IFwiMFwiKTtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuX3BhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHNjYWxlZEhlaWdodCA9IHJlY3QuaGVpZ2h0IC0gcGFkZGluZ1RvcCAtIHBhZGRpbmdCb3R0b207XG4gICAgICAgIGNvbnN0IHNjYWxlZFdpZHRoID0gcmVjdC53aWR0aCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0O1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLl9wYXJlbnROb2RlLm9mZnNldEhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuX3BhcmVudE5vZGUub2Zmc2V0V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDtcbiAgICAgICAgaWYgKCFkaXNhYmxlSGVpZ2h0ICYmICh0aGlzLnN0YXRlLmhlaWdodCAhPT0gaGVpZ2h0IHx8IHRoaXMuc3RhdGUuc2NhbGVkSGVpZ2h0ICE9PSBzY2FsZWRIZWlnaHQpIHx8ICFkaXNhYmxlV2lkdGggJiYgKHRoaXMuc3RhdGUud2lkdGggIT09IHdpZHRoIHx8IHRoaXMuc3RhdGUuc2NhbGVkV2lkdGggIT09IHNjYWxlZFdpZHRoKSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBzY2FsZWRIZWlnaHQsXG4gICAgICAgICAgICBzY2FsZWRXaWR0aFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZXNpemUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgb25SZXNpemUoe1xuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHNjYWxlZEhlaWdodCxcbiAgICAgICAgICAgICAgc2NhbGVkV2lkdGgsXG4gICAgICAgICAgICAgIHdpZHRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX3NldFJlZiA9IGF1dG9TaXplciA9PiB7XG4gICAgICB0aGlzLl9hdXRvU2l6ZXIgPSBhdXRvU2l6ZXI7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBub25jZVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9hdXRvU2l6ZXIgPyB0aGlzLl9hdXRvU2l6ZXIucGFyZW50Tm9kZSA6IG51bGw7XG4gICAgaWYgKHBhcmVudE5vZGUgIT0gbnVsbCAmJiBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQgJiYgcGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3ICYmIHBhcmVudE5vZGUgaW5zdGFuY2VvZiBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuSFRNTEVsZW1lbnQpIHtcbiAgICAgIC8vIERlbGF5IGFjY2VzcyBvZiBwYXJlbnROb2RlIHVudGlsIG1vdW50LlxuICAgICAgLy8gVGhpcyBoYW5kbGVzIGVkZ2UtY2FzZXMgd2hlcmUgdGhlIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIHVubW91bnRlZCBiZWZvcmUgaXRzIHJlZiBoYXMgYmVlbiBzZXQsXG4gICAgICAvLyBBcyB3ZWxsIGFzIGxpYnJhcmllcyBsaWtlIHJlYWN0LWxpdGUgd2hpY2ggaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBsaWZlY3ljbGUuXG4gICAgICB0aGlzLl9wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcblxuICAgICAgLy8gVXNlIFJlc2l6ZU9ic2VydmVyIGZyb20gdGhlIHNhbWUgY29udGV4dCB3aGVyZSBwYXJlbnROb2RlICh3aGljaCB3ZSB3aWxsIG9ic2VydmUpIHdhcyBkZWZpbmVkXG4gICAgICAvLyBVc2luZyBqdXN0IGdsb2JhbCBjYW4gcmVzdWx0IGludG8gb25SZXNpemUgZXZlbnRzIG5vdCBiZWluZyBlbWl0dGVkIGluIGNhc2VzIHdpdGggbXVsdGlwbGUgcmVhbG1zXG4gICAgICBjb25zdCBSZXNpemVPYnNlcnZlckluc3RhbmNlID0gcGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LlJlc2l6ZU9ic2VydmVyO1xuICAgICAgaWYgKFJlc2l6ZU9ic2VydmVySW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlckluc3RhbmNlKCgpID0+IHtcbiAgICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IFwiUmVzaXplT2JzZXJ2ZXIgbG9vcCBsaW1pdCBleGNlZWRlZFwiIGVycm9yO1xuICAgICAgICAgIC8vIGNvdWxkIGJlIHRyaWdnZXJlZCBpZiB0aGUgc3RhdGUgdXBkYXRlIGNhdXNlcyB0aGUgUmVzaXplT2JzZXJ2ZXIgaGFuZGxlciB0byBydW4gbG9uZy5cbiAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplci9pc3N1ZXMvNTVcbiAgICAgICAgICB0aGlzLl90aW1lb3V0SWQgPSBzZXRUaW1lb3V0KHRoaXMuX29uUmVzaXplLCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUocGFyZW50Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEZWZlciByZXF1aXJpbmcgcmVzaXplIGhhbmRsZXIgaW4gb3JkZXIgdG8gc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgICAgIC8vIFNlZSBpc3N1ZSAjNDFcbiAgICAgICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSA9IGNyZWF0ZURldGVjdEVsZW1lbnRSZXNpemUobm9uY2UpO1xuICAgICAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplLmFkZFJlc2l6ZUxpc3RlbmVyKHBhcmVudE5vZGUsIHRoaXMuX29uUmVzaXplKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29uUmVzaXplKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLl9wYXJlbnROb2RlKSB7XG4gICAgICBpZiAodGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSkge1xuICAgICAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplLnJlbW92ZVJlc2l6ZUxpc3RlbmVyKHRoaXMuX3BhcmVudE5vZGUsIHRoaXMuX29uUmVzaXplKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl90aW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fcmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBkZWZhdWx0SGVpZ2h0LFxuICAgICAgZGVmYXVsdFdpZHRoLFxuICAgICAgZGlzYWJsZUhlaWdodCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVdpZHRoID0gZmFsc2UsXG4gICAgICBkb05vdEJhaWxPdXRPbkVtcHR5Q2hpbGRyZW4gPSBmYWxzZSxcbiAgICAgIG5vbmNlLFxuICAgICAgb25SZXNpemUsXG4gICAgICBzdHlsZSA9IHt9LFxuICAgICAgdGFnTmFtZSA9IFwiZGl2XCIsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgaGVpZ2h0LFxuICAgICAgc2NhbGVkSGVpZ2h0LFxuICAgICAgc2NhbGVkV2lkdGgsXG4gICAgICB3aWR0aFxuICAgIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gT3V0ZXIgZGl2IHNob3VsZCBub3QgZm9yY2Ugd2lkdGgvaGVpZ2h0IHNpbmNlIHRoYXQgbWF5IHByZXZlbnQgY29udGFpbmVycyBmcm9tIHNocmlua2luZy5cbiAgICAvLyBJbm5lciBjb21wb25lbnQgc2hvdWxkIG92ZXJmbG93IGFuZCB1c2UgY2FsY3VsYXRlZCB3aWR0aC9oZWlnaHQuXG4gICAgLy8gU2VlIGlzc3VlICM2OCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICBjb25zdCBvdXRlclN0eWxlID0ge1xuICAgICAgb3ZlcmZsb3c6IFwidmlzaWJsZVwiXG4gICAgfTtcbiAgICBjb25zdCBjaGlsZFBhcmFtcyA9IHt9O1xuXG4gICAgLy8gQXZvaWQgcmVuZGVyaW5nIGNoaWxkcmVuIGJlZm9yZSB0aGUgaW5pdGlhbCBtZWFzdXJlbWVudHMgaGF2ZSBiZWVuIGNvbGxlY3RlZC5cbiAgICAvLyBBdCBiZXN0IHRoaXMgd291bGQganVzdCBiZSB3YXN0aW5nIGN5Y2xlcy5cbiAgICBsZXQgYmFpbG91dE9uQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICBpZiAoIWRpc2FibGVIZWlnaHQpIHtcbiAgICAgIGlmIChoZWlnaHQgPT09IDApIHtcbiAgICAgICAgYmFpbG91dE9uQ2hpbGRyZW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgb3V0ZXJTdHlsZS5oZWlnaHQgPSAwO1xuICAgICAgY2hpbGRQYXJhbXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgY2hpbGRQYXJhbXMuc2NhbGVkSGVpZ2h0ID0gc2NhbGVkSGVpZ2h0O1xuICAgIH1cbiAgICBpZiAoIWRpc2FibGVXaWR0aCkge1xuICAgICAgaWYgKHdpZHRoID09PSAwKSB7XG4gICAgICAgIGJhaWxvdXRPbkNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG91dGVyU3R5bGUud2lkdGggPSAwO1xuICAgICAgY2hpbGRQYXJhbXMud2lkdGggPSB3aWR0aDtcbiAgICAgIGNoaWxkUGFyYW1zLnNjYWxlZFdpZHRoID0gc2NhbGVkV2lkdGg7XG4gICAgfVxuICAgIGlmIChkb05vdEJhaWxPdXRPbkVtcHR5Q2hpbGRyZW4pIHtcbiAgICAgIGJhaWxvdXRPbkNoaWxkcmVuID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIHtcbiAgICAgIHJlZjogdGhpcy5fc2V0UmVmLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgLi4ub3V0ZXJTdHlsZSxcbiAgICAgICAgLi4uc3R5bGVcbiAgICAgIH0sXG4gICAgICAuLi5yZXN0XG4gICAgfSwgIWJhaWxvdXRPbkNoaWxkcmVuICYmIGNoaWxkcmVuKGNoaWxkUGFyYW1zKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIZWlnaHRBbmRXaWR0aFByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcyAmJiBwcm9wcy5kaXNhYmxlSGVpZ2h0ICE9PSB0cnVlICYmIHByb3BzLmRpc2FibGVXaWR0aCAhPT0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGlzSGVpZ2h0T25seVByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcyAmJiBwcm9wcy5kaXNhYmxlSGVpZ2h0ICE9PSB0cnVlICYmIHByb3BzLmRpc2FibGVXaWR0aCA9PT0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGlzV2lkdGhPbmx5UHJvcHMocHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzICYmIHByb3BzLmRpc2FibGVIZWlnaHQgPT09IHRydWUgJiYgcHJvcHMuZGlzYWJsZVdpZHRoICE9PSB0cnVlO1xufVxuXG5leHBvcnQgeyBBdXRvU2l6ZXIgYXMgZGVmYXVsdCwgaXNIZWlnaHRBbmRXaWR0aFByb3BzLCBpc0hlaWdodE9ubHlQcm9wcywgaXNXaWR0aE9ubHlQcm9wcyB9O1xuIiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IEF1dG9TaXplciBmcm9tICdyZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyJztcbmV4cG9ydCB2YXIgRXVpQXV0b1NpemVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQXV0b1NpemVyKSB7XG4gIGZ1bmN0aW9uIEV1aUF1dG9TaXplcigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQXV0b1NpemVyKTtcbiAgICByZXR1cm4gX2NhbGxTdXBlcih0aGlzLCBFdWlBdXRvU2l6ZXIsIGFyZ3VtZW50cyk7XG4gIH1cbiAgX2luaGVyaXRzKEV1aUF1dG9TaXplciwgX0F1dG9TaXplcik7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpQXV0b1NpemVyKTtcbn0oQXV0b1NpemVyKTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY29sb3JcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaWRlXCIsIFwiY2xhc3NOYW1lXCIsIFwiaXNEaXNhYmxlZFwiLCBcIm9uQ2xpY2tcIiwgXCJpY29uT25DbGlja1wiLCBcIm9uQ2xpY2tBcmlhTGFiZWxcIiwgXCJpY29uT25DbGlja0FyaWFMYWJlbFwiLCBcImNsb3NlQnV0dG9uUHJvcHNcIiwgXCJocmVmXCIsIFwicmVsXCIsIFwidGFyZ2V0XCIsIFwic3R5bGVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMsIGdldFNlY3VyZVJlbEZvclRhcmdldCwgd2NhZ0NvbnRyYXN0TWluIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsgRXVpSW5uZXJUZXh0IH0gZnJvbSAnLi4vaW5uZXJfdGV4dCc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBnZXRUZXh0Q29sb3IsIGdldENvbG9yQ29udHJhc3QsIGdldElzVmFsaWRDb2xvciB9IGZyb20gJy4vY29sb3JfdXRpbHMnO1xuaW1wb3J0IHsgZXVpQmFkZ2VTdHlsZXMgfSBmcm9tICcuL2JhZGdlLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBJQ09OX1NJREVTID0gWydsZWZ0JywgJ3JpZ2h0J107XG5leHBvcnQgdmFyIENPTE9SUyA9IFsnZGVmYXVsdCcsICdob2xsb3cnLCAncHJpbWFyeScsICdzdWNjZXNzJywgJ2FjY2VudCcsICd3YXJuaW5nJywgJ2RhbmdlciddO1xuZXhwb3J0IHZhciBFdWlCYWRnZSA9IGZ1bmN0aW9uIEV1aUJhZGdlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdkZWZhdWx0JyA6IF9yZWYkY29sb3IsXG4gICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgIF9yZWYkaWNvblNpZGUgPSBfcmVmLmljb25TaWRlLFxuICAgIGljb25TaWRlID0gX3JlZiRpY29uU2lkZSA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZiRpY29uU2lkZSxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgIGljb25PbkNsaWNrID0gX3JlZi5pY29uT25DbGljayxcbiAgICBvbkNsaWNrQXJpYUxhYmVsID0gX3JlZi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgIGljb25PbkNsaWNrQXJpYUxhYmVsID0gX3JlZi5pY29uT25DbGlja0FyaWFMYWJlbCxcbiAgICBjbG9zZUJ1dHRvblByb3BzID0gX3JlZi5jbG9zZUJ1dHRvblByb3BzLFxuICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgcmVsID0gX3JlZi5yZWwsXG4gICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgaXNEaXNhYmxlZCA9IF9pc0Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcbiAgdmFyIGlzTmFtZWRDb2xvciA9IENPTE9SUy5pbmNsdWRlcyhjb2xvcik7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBjdXN0b21Db2xvclN0eWxlcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIC8vIERpc2FibGVkIGJhZGdlcyBzaG91bGQgbm90IGhhdmUgY3VzdG9tIGNvbG9yc1xuICAgIGlmIChpc0Rpc2FibGVkKSByZXR1cm4gc3R5bGU7XG4gICAgLy8gTmFtZWQgY29sb3JzIHNldCB0aGVpciBzdHlsZXMgdmlhIEVtb3Rpb24gQ1NTIGFuZCBub3QgaW5saW5lIHN0eWxlc1xuICAgIGlmIChpc05hbWVkQ29sb3IpIHJldHVybiBzdHlsZTtcblxuICAgIC8vIERvIG91ciBiZXN0IHRvIGVuc3VyZSBjdXN0b20gY29sb3JzIHByb3ZpZGUgc3VmZmljaWVudCBjb250cmFzdFxuICAgIHRyeSB7XG4gICAgICAvLyBTZXQgZGFyayBvciBsaWdodCB0ZXh0IGNvbG9yIGJhc2VkIHVwb24gYmVzdCBjb250cmFzdFxuICAgICAgdmFyIHRleHRDb2xvciA9IGdldFRleHRDb2xvcihldWlUaGVtZSwgY29sb3IpO1xuXG4gICAgICAvLyBDaGVjayB0aGUgY29udHJhc3QgcmF0aW8uIElmIGl0J3MgbG93IGNvbnRyYXN0LCBlbWl0IGEgY29uc29sZSBhd3JuaW5nXG4gICAgICB2YXIgY29udHJhc3RSYXRpbyA9IGdldENvbG9yQ29udHJhc3QodGV4dENvbG9yLCBjb2xvcik7XG4gICAgICBpZiAoY29udHJhc3RSYXRpbyA8IHdjYWdDb250cmFzdE1pbikge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJXYXJuaW5nOiBcIi5jb25jYXQoY29sb3IsIFwiIGJhZGdlIGhhcyBhIGxvdyBjb250cmFzdCBvZiBcIikuY29uY2F0KGNvbnRyYXN0UmF0aW8udG9GaXhlZCgyKSwgXCIuIFNob3VsZCBiZSBhYm92ZSBcIikuY29uY2F0KHdjYWdDb250cmFzdE1pbiwgXCIuXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgJy0tZXVpQmFkZ2VCYWNrZ3JvdW5kQ29sb3InOiBjb2xvcixcbiAgICAgICAgJy0tZXVpQmFkZ2VUZXh0Q29sb3InOiB0ZXh0Q29sb3JcbiAgICAgIH0sIHN0eWxlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICghZ2V0SXNWYWxpZENvbG9yKGNvbG9yKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0V1aUJhZGdlIGV4cGVjdHMgYSB2YWxpZCBjb2xvci4gVGhpcyBjYW4gZWl0aGVyIGJlIGEgdGhyZWUgb3Igc2l4ICcgKyBcImNoYXJhY3RlciBoZXggdmFsdWUsIHJnYihhKSB2YWx1ZSwgaHN2IHZhbHVlLCBob2xsb3csIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBcIi5jb25jYXQoQ09MT1JTLCBcIi4gXCIpICsgXCJJbnN0ZWFkIGdvdCBcIi5jb25jYXQoY29sb3IsIFwiLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbY29sb3IsIGlzTmFtZWRDb2xvciwgaXNEaXNhYmxlZCwgc3R5bGUsIGV1aVRoZW1lXSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlCYWRnZVN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUJhZGdlXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGlzRGlzYWJsZWQgPyBbc3R5bGVzLmRpc2FibGVkXSA6IFtpc05hbWVkQ29sb3IgJiYgc3R5bGVzW2NvbG9yXSwgIWljb25PbkNsaWNrICYmIChvbkNsaWNrIHx8IGhyZWYpICYmIHN0eWxlcy5jbGlja2FibGVdKSk7XG4gIHZhciB0ZXh0Q3NzU3R5bGVzID0gW3N0eWxlcy50ZXh0LmV1aUJhZGdlX190ZXh0LCAob25DbGljayB8fCBocmVmKSAmJiAhaXNEaXNhYmxlZCAmJiBzdHlsZXMudGV4dC5jbGlja2FibGVdO1xuICB2YXIgaWNvbkNzc1N0eWxlcyA9IFtzdHlsZXMuaWNvbi5ldWlCYWRnZV9faWNvbiwgc3R5bGVzLmljb25baWNvblNpZGVdXTtcbiAgdmFyIGljb25CdXR0b25Dc3NTdHlsZXMgPSBbc3R5bGVzLmljb25CdXR0b24uZXVpQmFkZ2VfX2ljb25CdXR0b24sIHN0eWxlcy5pY29uQnV0dG9uW2ljb25TaWRlXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQmFkZ2UnLCBjbGFzc05hbWUpO1xuICB2YXIgY2xvc2VDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQmFkZ2VfX2ljb24nLCBjbG9zZUJ1dHRvblByb3BzID09PSBudWxsIHx8IGNsb3NlQnV0dG9uUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsb3NlQnV0dG9uUHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIEVsZW1lbnQgPSBocmVmICYmICFpc0Rpc2FibGVkID8gJ2EnIDogJ2J1dHRvbic7XG4gIHZhciByZWxPYmogPSB7fTtcbiAgaWYgKGhyZWYgJiYgIWlzRGlzYWJsZWQpIHtcbiAgICByZWxPYmouaHJlZiA9IGhyZWY7XG4gICAgcmVsT2JqLnRhcmdldCA9IHRhcmdldDtcbiAgICByZWxPYmoucmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gIH1cbiAgaWYgKG9uQ2xpY2spIHtcbiAgICByZWxPYmoub25DbGljayA9IG9uQ2xpY2s7XG4gIH1cbiAgdmFyIG9wdGlvbmFsSWNvbiA9IG51bGw7XG4gIGlmIChpY29uVHlwZSkge1xuICAgIGlmIChpY29uT25DbGljaykge1xuICAgICAgaWYgKCFpY29uT25DbGlja0FyaWFMYWJlbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1doZW4gcGFzc2luZyB0aGUgaWNvbk9uQ2xpY2sgcHJvcHMgdG8gRXVpQmFkZ2UsIHlvdSBtdXN0IGFsc28gcHJvdmlkZSBpY29uT25DbGlja0FyaWFMYWJlbCcpO1xuICAgICAgfVxuICAgICAgb3B0aW9uYWxJY29uID0gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCB7XG4gICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9faWNvbkJ1dHRvblwiLFxuICAgICAgICBjc3M6IGljb25CdXR0b25Dc3NTdHlsZXMsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBpY29uT25DbGlja0FyaWFMYWJlbCxcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIHRpdGxlOiBpY29uT25DbGlja0FyaWFMYWJlbCxcbiAgICAgICAgb25DbGljazogaWNvbk9uQ2xpY2tcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwgX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgICAgc2l6ZTogXCJzXCIsXG4gICAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG4gICAgICB9LCBjbG9zZUJ1dHRvblByb3BzLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xvc2VDbGFzc05hbWVzLFxuICAgICAgICBjc3M6IFtdLmNvbmNhdChpY29uQ3NzU3R5bGVzLCBbY2xvc2VCdXR0b25Qcm9wcyA9PT0gbnVsbCB8fCBjbG9zZUJ1dHRvblByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbG9zZUJ1dHRvblByb3BzLmNzc10pXG4gICAgICB9KSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25hbEljb24gPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgdHlwZTogaWNvblR5cGUsXG4gICAgICAgIHNpemU6IGNoaWxkcmVuID8gJ3MnIDogJ20nLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2ljb25cIixcbiAgICAgICAgY3NzOiBpY29uQ3NzU3R5bGVzLFxuICAgICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGlmIChvbkNsaWNrICYmICFvbkNsaWNrQXJpYUxhYmVsKSB7XG4gICAgY29uc29sZS53YXJuKCdXaGVuIHBhc3Npbmcgb25DbGljayB0byBFdWlCYWRnZSwgeW91IG11c3QgYWxzbyBwcm92aWRlIG9uQ2xpY2tBcmlhTGFiZWwnKTtcbiAgfVxuICB2YXIgY29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2NvbnRlbnRcIixcbiAgICBjc3M6IHN0eWxlcy5ldWlCYWRnZV9fY29udGVudFxuICB9LCBpY29uU2lkZSA9PT0gJ2xlZnQnICYmIG9wdGlvbmFsSWNvbiwgY2hpbGRyZW4gJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fdGV4dFwiLFxuICAgIGNzczogdGV4dENzc1N0eWxlc1xuICB9LCBjaGlsZHJlbiksIGljb25TaWRlID09PSAncmlnaHQnICYmIG9wdGlvbmFsSWNvbik7XG4gIGlmIChpY29uT25DbGljaykge1xuICAgIHJldHVybiBvbkNsaWNrIHx8IGhyZWYgPyBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIHN0eWxlOiBjdXN0b21Db2xvclN0eWxlc1xuICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fY29udGVudFwiLFxuICAgICAgY3NzOiBzdHlsZXMuZXVpQmFkZ2VfX2NvbnRlbnRcbiAgICB9LCBpY29uU2lkZSA9PT0gJ2xlZnQnICYmIG9wdGlvbmFsSWNvbiwgX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2NoaWxkQnV0dG9uXCIsXG4gICAgICAgIGNzczogc3R5bGVzLmV1aUJhZGdlX19jaGlsZEJ1dHRvbixcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBvbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgdGl0bGU6IGlubmVyVGV4dFxuICAgICAgfSwgcmVsT2JqLCByZXN0KSwgY2hpbGRyZW4pO1xuICAgIH0pLCBpY29uU2lkZSA9PT0gJ3JpZ2h0JyAmJiBvcHRpb25hbEljb24pKSA6IF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCBudWxsLCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgIHN0eWxlOiBjdXN0b21Db2xvclN0eWxlcyxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlc3QpLCBjb250ZW50KTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChvbkNsaWNrIHx8IGhyZWYpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IG9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgIHN0eWxlOiBjdXN0b21Db2xvclN0eWxlcyxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlbE9iaiwgcmVzdCksIGNvbnRlbnQpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICBzdHlsZTogY3VzdG9tQ29sb3JTdHlsZXMsXG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICB0aXRsZTogaW5uZXJUZXh0XG4gICAgICB9LCByZXN0KSwgY29udGVudCk7XG4gICAgfSk7XG4gIH1cbn07XG5FdWlCYWRnZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIEFjY2VwdHMgYW55IHN0cmluZyBmcm9tIG91ciBpY29uIGxpYnJhcnlcbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIFRoZSBzaWRlIG9mIHRoZSBiYWRnZSB0aGUgaWNvbiBzaG91bGQgc2l0XG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBY2NlcHRzIGVpdGhlciBvdXIgcGFsZXR0ZSBjb2xvcnMgKHByaW1hcnksIHN1Y2Nlc3MgLi5ldGMpIG9yIGEgaGV4IHZhbHVlIGAjRkZGRkZGYCwgYCMwMDBgLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogV2lsbCBvdmVycmlkZSBhbnkgY29sb3IgcGFzc2VkIHRocm91Z2ggdGhlIGBjb2xvcmAgcHJvcC5cbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFByb3BzIHBhc3NlZCB0byB0aGUgY2xvc2UgYnV0dG9uLlxuICAgICAqL1xuICBjbG9zZUJ1dHRvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIGljb24gd2l0aGluIHRoZSBiYWRnZVxuICAgICAqL1xuICBpY29uT25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgaWNvbk9uQ2xpY2sgYnV0dG9uXG4gICAgICovXG4gIGljb25PbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gdGhlIGJhZGdlIGl0c2VsZlxuICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBvbkNsaWNrIGJ1dHRvblxuICAgICAqL1xuICBvbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuZXhwb3J0IHZhciBnZXRFdmVudFBvc2l0aW9uID0gZnVuY3Rpb24gZ2V0RXZlbnRQb3NpdGlvbihsb2NhdGlvbiwgY29udGFpbmVyKSB7XG4gIHZhciB4ID0gbG9jYXRpb24ueCxcbiAgICB5ID0gbG9jYXRpb24ueTtcbiAgdmFyIF9jb250YWluZXIkZ2V0Qm91bmRpbiA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICB3aWR0aCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi53aWR0aCxcbiAgICBoZWlnaHQgPSBfY29udGFpbmVyJGdldEJvdW5kaW4uaGVpZ2h0LFxuICAgIGxlZnQgPSBfY29udGFpbmVyJGdldEJvdW5kaW4ubGVmdCxcbiAgICB0b3AgPSBfY29udGFpbmVyJGdldEJvdW5kaW4udG9wO1xuICB2YXIgbGVmdFBvcyA9IHggLSAobGVmdCArIHdpbmRvdy5wYWdlWE9mZnNldCk7XG4gIHZhciB0b3BQb3MgPSB5IC0gKHRvcCArIHdpbmRvdy5wYWdlWU9mZnNldCk7XG4gIGlmIChsZWZ0UG9zIDwgMCkge1xuICAgIGxlZnRQb3MgPSAwO1xuICB9IGVsc2UgaWYgKGxlZnRQb3MgPiB3aWR0aCkge1xuICAgIGxlZnRQb3MgPSB3aWR0aDtcbiAgfVxuICBpZiAodG9wUG9zIDwgMCkge1xuICAgIHRvcFBvcyA9IDA7XG4gIH0gZWxzZSBpZiAodG9wUG9zID4gaGVpZ2h0KSB7XG4gICAgdG9wUG9zID0gaGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgbGVmdDogbGVmdFBvcyxcbiAgICB0b3A6IHRvcFBvcyxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn07XG5leHBvcnQgdmFyIEhFWF9GQUxMQkFDSyA9ICcnO1xuZXhwb3J0IHZhciBIU1ZfRkFMTEJBQ0sgPSBbMCwgMCwgMF07XG5leHBvcnQgdmFyIFJHQl9GQUxMQkFDSyA9IFtOYU4sIE5hTiwgTmFOLCAxXTtcbmV4cG9ydCB2YXIgUkdCX0pPSU4gPSAnLCAnO1xuXG4vLyBHaXZlbiBhIHN0cmluZywgdGhpcyBhdHRlbXB0cyB0byByZXR1cm4gYSBmb3JtYXQgdGhhdCBjYW4gYmUgY29uc3VtZWQgYnkgY2hyb21hLWpzXG5leHBvcnQgdmFyIHBhcnNlQ29sb3IgPSBmdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0KSB7XG4gIHZhciBwYXJzZWQ7XG4gIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuICBpZiAoaW5wdXQuaW5kZXhPZignLCcpID4gMCkge1xuICAgIGlmICghL15bXFxzLC4wLTldKiQvLnRlc3QoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHJnYiA9IGlucHV0LnRyaW0oKS5zcGxpdCgnLCcpLmZpbHRlcihmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuIG4gIT09ICcnO1xuICAgIH0pLm1hcChOdW1iZXIpO1xuICAgIHBhcnNlZCA9IHJnYi5sZW5ndGggPiAyICYmIHJnYi5sZW5ndGggPCA1ID8gcmdiIDogSEVYX0ZBTExCQUNLO1xuICB9IGVsc2Uge1xuICAgIHBhcnNlZCA9IGlucHV0O1xuICB9XG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG4vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGlucHV0IHdpbGwgcmV0dXJuIGEgdmFsaWQgY2hyb21hLWpzIG9iamVjdCB3aGVuIGRlc2lnbmF0ZWQgYXMgb25lIG9mXG4vLyB0aGUgYWNjZXB0YWJsZSBmb3JtYXRzOiBoZXgsIHJnYiwgcmdiYVxuZXhwb3J0IHZhciBjaHJvbWFWYWxpZCA9IGZ1bmN0aW9uIGNocm9tYVZhbGlkKGNvbG9yKSB7XG4gIHZhciBwYXJzZWQgPSBjb2xvcjtcbiAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXJzZWQgPSBwYXJzZUNvbG9yKGNvbG9yKTtcbiAgfVxuICBpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoX3R5cGVvZihwYXJzZWQpID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBjaHJvbWEudmFsaWQocGFyc2VkLCAncmdiJykgfHwgY2hyb21hLnZhbGlkKHBhcnNlZCwgJ3JnYmEnKTtcbiAgfVxuICByZXR1cm4gY2hyb21hLnZhbGlkKGNvbG9yLCAnaGV4Jyk7XG59O1xuXG4vLyBHaXZlbiBhbiBpbnB1dCBhbmQgb3BhY2l0eSBjb25maWd1cmF0aW9uLCB0aGlzIHJldHVybnMgYSB2YWxpZCBjaHJvbWEtanMgb2JqZWN0XG5leHBvcnQgdmFyIGdldENocm9tYUNvbG9yID0gZnVuY3Rpb24gZ2V0Q2hyb21hQ29sb3IoaW5wdXQpIHtcbiAgdmFyIGFsbG93T3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gIHZhciBwYXJzZWQgPSBwYXJzZUNvbG9yKGlucHV0KTtcbiAgaWYgKHBhcnNlZCAmJiBjaHJvbWFWYWxpZChwYXJzZWQpKSB7XG4gICAgLy8gdHlwZSBndWFyZCBmb3IgdGhlIGZ1bmN0aW9uIG92ZXJsb2FkXG4gICAgdmFyIGNocm9tYUNvbG9yID0gX3R5cGVvZihwYXJzZWQpID09PSAnb2JqZWN0JyA/IGNocm9tYShwYXJzZWQpIDogY2hyb21hKHBhcnNlZCk7XG4gICAgaWYgKCFhbGxvd09wYWNpdHkgJiYgY2hyb21hQ29sb3IuYWxwaGEoKSA8IDEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY2hyb21hQ29sb3I7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vLyBHaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGgga2V5IHZhbHVlIHBhaXJzIHN0b3AvY29sb3IgcmV0dXJucyBhIGNzcyBsaW5lYXItZ3JhZGllbnRcbi8vIE9yIGdpdmVuIGFuIGFycmF5IG9mIGhleCBjb2xvcnMgcmV0dXJucyBhIGNzcyBsaW5lYXItZ3JhZGllbnRcbmV4cG9ydCB2YXIgZ2V0TGluZWFyR3JhZGllbnQgPSBmdW5jdGlvbiBnZXRMaW5lYXJHcmFkaWVudChwYWxldHRlKSB7XG4gIHZhciBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbiA9IHBhbGV0dGUubGVuZ3RoIC0gMTtcbiAgdmFyIGxpbmVhckdyYWRpZW50O1xuICB2YXIgcGFsZXR0ZUhhc1N0b3BzID0gcGFsZXR0ZS5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIF90eXBlb2YoaXRlbSkgPT09ICdvYmplY3QnO1xuICB9KTtcbiAgaWYgKHBhbGV0dGVIYXNTdG9wcykge1xuICAgIHZhciBwYWxldHRlQ29sb3JTdG9wID0gcGFsZXR0ZTtcbiAgICBsaW5lYXJHcmFkaWVudCA9IFwibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQocGFsZXR0ZUNvbG9yU3RvcFswXS5jb2xvciwgXCIgMCUsXCIpO1xuICAgIHZhciBsYXN0Q29sb3JTdG9wRGVjaW1hbCA9IDEwMCAvIHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLnN0b3A7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbjsgaSsrKSB7XG4gICAgICBsaW5lYXJHcmFkaWVudCA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVDb2xvclN0b3BbaV0uY29sb3IsIFwiIFwiKS5jb25jYXQoTWF0aC5mbG9vcihwYWxldHRlQ29sb3JTdG9wW2ldLnN0b3AgKiBsYXN0Q29sb3JTdG9wRGVjaW1hbCksIFwiJSxcIik7XG4gICAgfVxuICAgIHZhciBsaW5lYXJHcmFkaWVudFN0eWxlID0gXCJcIi5jb25jYXQobGluZWFyR3JhZGllbnQsIFwiIFwiKS5jb25jYXQocGFsZXR0ZUNvbG9yU3RvcFtsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbl0uY29sb3IsIFwiIDEwMCUpXCIpO1xuICAgIHJldHVybiBsaW5lYXJHcmFkaWVudFN0eWxlO1xuICB9IGVsc2Uge1xuICAgIGxpbmVhckdyYWRpZW50ID0gXCJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIFwiLmNvbmNhdChwYWxldHRlWzBdLCBcIiAwJSxcIik7XG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uOyBfaSsrKSB7XG4gICAgICBsaW5lYXJHcmFkaWVudCA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVbX2ldLCBcIiBcIikuY29uY2F0KE1hdGguZmxvb3IoMTAwICogX2kgLyBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbiksIFwiJSxcIik7XG4gICAgfVxuICAgIHZhciBfbGluZWFyR3JhZGllbnRTdHlsZSA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLCBcIiAxMDAlKVwiKTtcbiAgICByZXR1cm4gX2xpbmVhckdyYWRpZW50U3R5bGU7XG4gIH1cbn07XG5cbi8vIEdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBrZXkgdmFsdWUgcGFpcnMgc3RvcC9jb2xvciBvciBhbiBhcnJheSBvZiBoZXggY29sb3JzXG4vLyByZXR1cm5zIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBrZXkgdmFsdWUgcGFpcnMgY29sb3Ivd2lkdGhcbmV4cG9ydCB2YXIgZ2V0Rml4ZWRMaW5lYXJHcmFkaWVudCA9IGZ1bmN0aW9uIGdldEZpeGVkTGluZWFyR3JhZGllbnQocGFsZXR0ZSkge1xuICB2YXIgcGFsZXR0ZUhhc1N0b3BzID0gcGFsZXR0ZS5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIF90eXBlb2YoaXRlbSkgPT09ICdvYmplY3QnO1xuICB9KTtcbiAgaWYgKHBhbGV0dGVIYXNTdG9wcykge1xuICAgIHZhciBwYWxldHRlQ29sb3JTdG9wID0gcGFsZXR0ZTtcbiAgICB2YXIgZml4ZWRMaW5lYXJHcmFkaWVudFdpdGhTdG9wcyA9IHBhbGV0dGVDb2xvclN0b3AubWFwKGZ1bmN0aW9uIChjb2xvclN0b3AsIGluZGV4KSB7XG4gICAgICB2YXIgbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb24gPSBwYWxldHRlLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgbGFzdENvbG9yU3RvcERlY2ltYWwgPSAxMDAgLyBwYWxldHRlQ29sb3JTdG9wW2xhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uXS5zdG9wO1xuICAgICAgdmFyIGlzRmlyc3RDb2xvclN0b3AgPSBpbmRleCA9PT0gMDtcbiAgICAgIHZhciBwcmV2aW91c0NvbG9yU3RvcFdpZHRoO1xuICAgICAgaWYgKGlzRmlyc3RDb2xvclN0b3ApIHtcbiAgICAgICAgcHJldmlvdXNDb2xvclN0b3BXaWR0aCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmV2aW91c0NvbG9yU3RvcFdpZHRoID0gTWF0aC5mbG9vcihwYWxldHRlQ29sb3JTdG9wW2luZGV4IC0gMV0uc3RvcCAqIGxhc3RDb2xvclN0b3BEZWNpbWFsKTtcbiAgICAgIH1cbiAgICAgIHZhciBjdXJyZW50Q29sb3JTdG9wV2lkdGggPSBNYXRoLmZsb29yKGNvbG9yU3RvcC5zdG9wICogbGFzdENvbG9yU3RvcERlY2ltYWwpO1xuICAgICAgdmFyIGNvbG9yU3RvcFdpZHRoID0gY3VycmVudENvbG9yU3RvcFdpZHRoIC0gcHJldmlvdXNDb2xvclN0b3BXaWR0aDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiBjb2xvclN0b3AuY29sb3IsXG4gICAgICAgIHdpZHRoOiBcIlwiLmNvbmNhdChjb2xvclN0b3BXaWR0aCwgXCIlXCIpXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBmaXhlZExpbmVhckdyYWRpZW50V2l0aFN0b3BzO1xuICB9IGVsc2Uge1xuICAgIHZhciBfcGFsZXR0ZUNvbG9yU3RvcCA9IHBhbGV0dGU7XG4gICAgdmFyIHBhbGV0dGVXaWR0aCA9IDEwMCAvIHBhbGV0dGUubGVuZ3RoO1xuICAgIHZhciBmaXhlZExpbmVhckdyYWRpZW50V2lkdGhBdXRvID0gX3BhbGV0dGVDb2xvclN0b3AubWFwKGZ1bmN0aW9uIChoZXhDb2RlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogaGV4Q29kZSxcbiAgICAgICAgd2lkdGg6IFwiXCIuY29uY2F0KHBhbGV0dGVXaWR0aCwgXCIlXCIpXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBmaXhlZExpbmVhckdyYWRpZW50V2lkdGhBdXRvO1xuICB9XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBpc0NvbG9yRGFyaywgdGludCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUJ1dHRvbkNvbG9yLCBldWlCdXR0b25GaWxsQ29sb3IgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5pbXBvcnQgeyBjaHJvbWFWYWxpZCwgcGFyc2VDb2xvciB9IGZyb20gJy4uL2NvbG9yX3BpY2tlci91dGlscyc7XG5leHBvcnQgdmFyIGV1aUJhZGdlQ29sb3JzID0gZnVuY3Rpb24gZXVpQmFkZ2VDb2xvcnMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICByZXR1cm4ge1xuICAgIC8vIENvbG9ycyBzaGFyZWQgYmV0d2VlbiBidXR0b25zIGFuZCBiYWRnZXNcbiAgICBwcmltYXJ5OiBldWlCdXR0b25GaWxsQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAncHJpbWFyeScpLFxuICAgIHN1Y2Nlc3M6IGV1aUJ1dHRvbkZpbGxDb2xvcihldWlUaGVtZUNvbnRleHQsICdzdWNjZXNzJyksXG4gICAgd2FybmluZzogZXVpQnV0dG9uRmlsbENvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ3dhcm5pbmcnKSxcbiAgICBkYW5nZXI6IGV1aUJ1dHRvbkZpbGxDb2xvcihldWlUaGVtZUNvbnRleHQsICdkYW5nZXInKSxcbiAgICBhY2NlbnQ6IGV1aUJ1dHRvbkZpbGxDb2xvcihldWlUaGVtZUNvbnRleHQsICdhY2NlbnQnKSxcbiAgICBkaXNhYmxlZDogZXVpQnV0dG9uQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAnZGlzYWJsZWQnKSxcbiAgICAvLyBDb2xvcnMgdW5pcXVlIHRvIGJhZGdlc1xuICAgIGRlZmF1bHQ6IGdldEJhZGdlQ29sb3JzKGV1aVRoZW1lQ29udGV4dCwgZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUpLFxuICAgIC8vIEhvbGxvdyBoYXMgYSBib3JkZXIgYW5kIGlzIHVzZWQgZm9yIGF1dG9jb21wbGV0ZXJzIGFuZCBiZXRhIGJhZGdlc1xuICAgIGhvbGxvdzogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBnZXRCYWRnZUNvbG9ycyhldWlUaGVtZUNvbnRleHQsIGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlKSksIHt9LCB7XG4gICAgICBib3JkZXJDb2xvcjogY29sb3JNb2RlID09PSAnREFSSycgPyB0aW50KGV1aVRoZW1lLmJvcmRlci5jb2xvciwgMC4xNSkgOiBldWlUaGVtZS5ib3JkZXIuY29sb3JcbiAgICB9KSxcbiAgICAvLyBDb2xvcnMgdXNlZCBieSBiZXRhIGFuZCBub3RpZmljYXRpb24gYmFkZ2VzXG4gICAgc3ViZHVlZDogZ2V0QmFkZ2VDb2xvcnMoZXVpVGhlbWVDb250ZXh0LCB0aW50KGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAwLjMpKSxcbiAgICBhY2NlbnRUZXh0OiBnZXRCYWRnZUNvbG9ycyhldWlUaGVtZUNvbnRleHQsIGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0KVxuICB9O1xufTtcbmV4cG9ydCB2YXIgZ2V0QmFkZ2VDb2xvcnMgPSBmdW5jdGlvbiBnZXRCYWRnZUNvbG9ycyhldWlUaGVtZUNvbnRleHQsIGJhY2tncm91bmRDb2xvcikge1xuICB2YXIgY29sb3IgPSBnZXRUZXh0Q29sb3IoZXVpVGhlbWVDb250ZXh0LCBiYWNrZ3JvdW5kQ29sb3IpO1xuICByZXR1cm4ge1xuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgIGNvbG9yOiBjb2xvclxuICB9O1xufTtcbmV4cG9ydCB2YXIgZ2V0VGV4dENvbG9yID0gZnVuY3Rpb24gZ2V0VGV4dENvbG9yKF9yZWYsIGJnQ29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgdmFyIHRleHRDb2xvciA9IGlzQ29sb3JEYXJrLmFwcGx5KHZvaWQgMCwgX3RvQ29uc3VtYWJsZUFycmF5KGNocm9tYShiZ0NvbG9yKS5yZ2IoKSkpID8gZXVpVGhlbWUuY29sb3JzLmdob3N0IDogZXVpVGhlbWUuY29sb3JzLmluaztcbiAgcmV0dXJuIHRleHRDb2xvcjtcbn07XG5leHBvcnQgdmFyIGdldENvbG9yQ29udHJhc3QgPSBmdW5jdGlvbiBnZXRDb2xvckNvbnRyYXN0KHRleHRDb2xvciwgY29sb3IpIHtcbiAgcmV0dXJuIGNocm9tYS5jb250cmFzdCh0ZXh0Q29sb3IsIGNvbG9yKTtcbn07XG5leHBvcnQgdmFyIGdldElzVmFsaWRDb2xvciA9IGZ1bmN0aW9uIGdldElzVmFsaWRDb2xvcihjb2xvcikge1xuICByZXR1cm4gY2hyb21hVmFsaWQocGFyc2VDb2xvcihjb2xvciB8fCAnJykgfHwgJycpO1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUsIGV1aUZvY3VzUmluZywgZXVpVGV4dFRydW5jYXRlLCBsb2dpY2FsQ1NTLCBsb2dpY2FsU2hvcnRoYW5kQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlCYWRnZUNvbG9ycyB9IGZyb20gJy4vY29sb3JfdXRpbHMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWh3NXZjNC1jbGlja2FibGVcIixcbiAgc3R5bGVzOiBcImN1cnNvcjpwb2ludGVyO2xhYmVsOmNsaWNrYWJsZTtcIlxufSA6IHtcbiAgbmFtZTogXCIxaHc1dmM0LWNsaWNrYWJsZVwiLFxuICBzdHlsZXM6IFwiY3Vyc29yOnBvaW50ZXI7bGFiZWw6Y2xpY2thYmxlO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUJhZGdlU3R5bGVzID0gZnVuY3Rpb24gZXVpQmFkZ2VTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIGJhZGdlQ29sb3JzID0gZXVpQmFkZ2VDb2xvcnMoZXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIHNldEJhZGdlQ29sb3JWYXJzID0gZnVuY3Rpb24gc2V0QmFkZ2VDb2xvclZhcnMoY29sb3JzKSB7XG4gICAgcmV0dXJuIFwiXFxuICAgIC0tZXVpQmFkZ2VUZXh0Q29sb3I6IFwiLmNvbmNhdChjb2xvcnMuY29sb3IsIFwiO1xcbiAgICAtLWV1aUJhZGdlQmFja2dyb3VuZENvbG9yOiBcIikuY29uY2F0KGNvbG9ycy5iYWNrZ3JvdW5kQ29sb3IsIFwiO1xcbiAgXCIpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGV1aUJhZGdlOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO1wiLCBsb2dpY2FsU2hvcnRoYW5kQ1NTKCdwYWRkaW5nJywgXCIwIFwiLmNvbmNhdChldWlUaGVtZS5zaXplLnMpKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiIGZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnKS5mb250U2l6ZSwgXCI7bGluZS1oZWlnaHQ6XCIsIG1hdGhXaXRoVW5pdHMoXG4gICAgLy8gQWNjb3VudCBmb3IgdGhlIGJvcmRlclxuICAgIFtldWlUaGVtZS5zaXplLmJhc2UsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluXSwgZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ICsgeSAqIDI7XG4gICAgfSksIFwiO2ZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodC5tZWRpdW0sIFwiO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6ZGVmYXVsdDtib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOlwiLCBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggLyAyO1xuICAgIH0pLCBcIjtcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcImNvbG9yOnZhcigtLWV1aUJhZGdlVGV4dENvbG9yLCBcIiwgYmFkZ2VDb2xvcnMuZGVmYXVsdC5jb2xvciwgXCIpO2JhY2tncm91bmQtY29sb3I6dmFyKFxcbiAgICAgICAgLS1ldWlCYWRnZUJhY2tncm91bmRDb2xvcixcXG4gICAgICAgIFwiLCBiYWRnZUNvbG9ycy5kZWZhdWx0LmJhY2tncm91bmRDb2xvciwgXCJcXG4gICAgICApOyo6OnNlbGVjdGlvbntjb2xvcjp2YXIoXFxuICAgICAgICAgIC0tZXVpQmFkZ2VCYWNrZ3JvdW5kQ29sb3IsXFxuICAgICAgICAgIFwiLCBiYWRnZUNvbG9ycy5kZWZhdWx0LmJhY2tncm91bmRDb2xvciwgXCJcXG4gICAgICAgICk7YmFja2dyb3VuZC1jb2xvcjp2YXIoXFxuICAgICAgICAgIC0tZXVpQmFkZ2VUZXh0Q29sb3IsXFxuICAgICAgICAgIFwiLCBiYWRnZUNvbG9ycy5kZWZhdWx0LmNvbG9yLCBcIlxcbiAgICAgICAgKTt9Jjpmb2N1cy13aXRoaW57XCIsIGV1aUZvY3VzUmluZyhldWlUaGVtZUNvbnRleHQpLCBcIjt9JisuZXVpQmFkZ2V7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgZXVpVGhlbWUuc2l6ZS54cyksIFwiO307bGFiZWw6ZXVpQmFkZ2U7XCIpLFxuICAgIGNsaWNrYWJsZTogLyojX19QVVJFX18qL2NzcyhcIiY6bm90KDpkaXNhYmxlZCl7Jjpob3ZlciwmOmZvY3Vze3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fX0mOmZvY3Vze1wiLCBldWlGb2N1c1JpbmcoZXVpVGhlbWVDb250ZXh0KSwgXCI7fSY6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO307bGFiZWw6Y2xpY2thYmxlO1wiKSxcbiAgICAvLyBDb2xvcnNcbiAgICBkZWZhdWx0OiAvKiNfX1BVUkVfXyovY3NzKHNldEJhZGdlQ29sb3JWYXJzKGJhZGdlQ29sb3JzLmRlZmF1bHQpLCBcIjtsYWJlbDpkZWZhdWx0O1wiKSxcbiAgICBob2xsb3c6IC8qI19fUFVSRV9fKi9jc3Moc2V0QmFkZ2VDb2xvclZhcnMoYmFkZ2VDb2xvcnMuaG9sbG93KSwgXCIgYm9yZGVyLWNvbG9yOlwiLCBiYWRnZUNvbG9ycy5ob2xsb3cuYm9yZGVyQ29sb3IsIFwiOztsYWJlbDpob2xsb3c7XCIpLFxuICAgIHByaW1hcnk6IC8qI19fUFVSRV9fKi9jc3Moc2V0QmFkZ2VDb2xvclZhcnMoYmFkZ2VDb2xvcnMucHJpbWFyeSksIFwiO2xhYmVsOnByaW1hcnk7XCIpLFxuICAgIGFjY2VudDogLyojX19QVVJFX18qL2NzcyhzZXRCYWRnZUNvbG9yVmFycyhiYWRnZUNvbG9ycy5hY2NlbnQpLCBcIjtsYWJlbDphY2NlbnQ7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3Moc2V0QmFkZ2VDb2xvclZhcnMoYmFkZ2VDb2xvcnMud2FybmluZyksIFwiO2xhYmVsOndhcm5pbmc7XCIpLFxuICAgIGRhbmdlcjogLyojX19QVVJFX18qL2NzcyhzZXRCYWRnZUNvbG9yVmFycyhiYWRnZUNvbG9ycy5kYW5nZXIpLCBcIjtsYWJlbDpkYW5nZXI7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3Moc2V0QmFkZ2VDb2xvclZhcnMoYmFkZ2VDb2xvcnMuc3VjY2VzcyksIFwiO2xhYmVsOnN1Y2Nlc3M7XCIpLFxuICAgIGRpc2FibGVkOiAvKiNfX1BVUkVfXyovY3NzKHNldEJhZGdlQ29sb3JWYXJzKGJhZGdlQ29sb3JzLmRpc2FibGVkKSwgXCIqOjpzZWxlY3Rpb257Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLCBcIjt9O2xhYmVsOmRpc2FibGVkO1wiKSxcbiAgICAvLyBDb250ZW50IHdyYXBwZXJcbiAgICBldWlCYWRnZV9fY29udGVudDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKFxuICAgIC8vIEVuc3VyZSBwcm9wZXIgaGVpZ2h0IGluIGNhc2Ugb2YganVzdCBkaXNwbGF5aW5nIGFuIGljb25cbiAgICAnbWluLWhlaWdodCcsIFwiXCIuY29uY2F0KG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gZXVpVGhlbWUuYmFzZSArIHggKiAyO1xuICAgIH0pKSksIFwiIGRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuOztsYWJlbDpldWlCYWRnZV9fY29udGVudDtcIiksXG4gICAgLy8gVGV4dFxuICAgIHRleHQ6IHtcbiAgICAgIGV1aUJhZGdlX190ZXh0OiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHRUcnVuY2F0ZSgpLCBcIiBjdXJzb3I6aW5oZXJpdDs7bGFiZWw6ZXVpQmFkZ2VfX3RleHQ7XCIpLFxuICAgICAgY2xpY2thYmxlOiBfcmVmXG4gICAgfSxcbiAgICAvLyBJY29uXG4gICAgaWNvbjoge1xuICAgICAgZXVpQmFkZ2VfX2ljb246IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZXVpQmFkZ2VfX2ljb247XCIpLFxuICAgICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCImOm5vdCg6b25seS1jaGlsZCl7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgZXVpVGhlbWUuc2l6ZS54cyksIFwiO307bGFiZWw6cmlnaHQ7XCIpLFxuICAgICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcIiY6bm90KDpvbmx5LWNoaWxkKXtcIiwgbG9naWNhbENTUygnbWFyZ2luLXJpZ2h0JywgZXVpVGhlbWUuc2l6ZS54cyksIFwiO307bGFiZWw6bGVmdDtcIilcbiAgICB9LFxuICAgIC8vIENsaWNrYWJsZSBpY29ucyAoaWNvbk9uQ2xpY2spXG4gICAgaWNvbkJ1dHRvbjoge1xuICAgICAgZXVpQmFkZ2VfX2ljb25CdXR0b246IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXNpemU6MDsmOmZvY3Vze2JhY2tncm91bmQtY29sb3I6XCIsIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgMC44KSwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5pbmssIFwiO2JvcmRlci1yYWRpdXM6XCIsIG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggLyAyO1xuICAgICAgfSksIFwiO30mOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDt9LmV1aUJhZGdlX19pY29ue21hcmdpbjowIWltcG9ydGFudDt9O2xhYmVsOmV1aUJhZGdlX19pY29uQnV0dG9uO1wiKSxcbiAgICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgZXVpVGhlbWUuc2l6ZS54cyksIFwiOztsYWJlbDpyaWdodDtcIiksXG4gICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21hcmdpbi1yaWdodCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIjs7bGFiZWw6bGVmdDtcIilcbiAgICB9LFxuICAgIC8vIFVzZWQgaW4gYmFkZ2VzIHdpdGggYm90aCBvbkNsaWNrICYgaWNvbk9uQ2xpY2tcbiAgICBldWlCYWRnZV9fY2hpbGRCdXR0b246IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dFRydW5jYXRlKCksIFwiIHRleHQtYWxpZ246aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDsmOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDt9Jjpub3QoOmRpc2FibGVkKXsmOmhvdmVyLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9fTtsYWJlbDpldWlCYWRnZV9fY2hpbGRCdXR0b247XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwibGFiZWxcIiwgXCJjb2xvclwiLCBcInRvb2x0aXBDb250ZW50XCIsIFwidG9vbHRpcFBvc2l0aW9uXCIsIFwiYW5jaG9yUHJvcHNcIiwgXCJ0aXRsZVwiLCBcImljb25UeXBlXCIsIFwib25DbGlja1wiLCBcIm9uQ2xpY2tBcmlhTGFiZWxcIiwgXCJocmVmXCIsIFwicmVsXCIsIFwidGFyZ2V0XCIsIFwic2l6ZVwiLCBcImFsaWdubWVudFwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi8uLi90b29sX3RpcCc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBldWlCZXRhQmFkZ2VTdHlsZXMgfSBmcm9tICcuL2JldGFfYmFkZ2Uuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIENPTE9SUyA9IFsnYWNjZW50JywgJ3N1YmR1ZWQnLCAnaG9sbG93J107XG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nXTtcbmV4cG9ydCB2YXIgQUxJR05NRU5UUyA9IFsnYmFzZWxpbmUnLCAnbWlkZGxlJ107XG5cbi8vIGBsYWJlbGAgcHJvcCBjYW4gYmUgYSBgUmVhY3ROb2RlYCBvbmx5IGlmIGB0aXRsZWAgb3IgYHRvb2x0aXBDb250ZW50YCBpcyBwcm92aWRlZFxuXG4vLyBNdXN0IGJlIGB0eXBlYCBpbnN0ZWFkIG9mIGBpbnRlcmZhY2VgXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzYwODVcblxuZXhwb3J0IHZhciBFdWlCZXRhQmFkZ2UgPSBmdW5jdGlvbiBFdWlCZXRhQmFkZ2UoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2hvbGxvdycgOiBfcmVmJGNvbG9yLFxuICAgIHRvb2x0aXBDb250ZW50ID0gX3JlZi50b29sdGlwQ29udGVudCxcbiAgICBfcmVmJHRvb2x0aXBQb3NpdGlvbiA9IF9yZWYudG9vbHRpcFBvc2l0aW9uLFxuICAgIHRvb2x0aXBQb3NpdGlvbiA9IF9yZWYkdG9vbHRpcFBvc2l0aW9uID09PSB2b2lkIDAgPyAndG9wJyA6IF9yZWYkdG9vbHRpcFBvc2l0aW9uLFxuICAgIGFuY2hvclByb3BzID0gX3JlZi5hbmNob3JQcm9wcyxcbiAgICB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgb25DbGlja0FyaWFMYWJlbCA9IF9yZWYub25DbGlja0FyaWFMYWJlbCxcbiAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgIHJlbCA9IF9yZWYucmVsLFxuICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgX3JlZiRhbGlnbm1lbnQgPSBfcmVmLmFsaWdubWVudCxcbiAgICBhbGlnbm1lbnQgPSBfcmVmJGFsaWdubWVudCA9PT0gdm9pZCAwID8gJ2Jhc2VsaW5lJyA6IF9yZWYkYWxpZ25tZW50LFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHNpbmdsZUxldHRlciA9ICEhKHR5cGVvZiBsYWJlbCA9PT0gJ3N0cmluZycgJiYgbGFiZWwubGVuZ3RoID09PSAxKTtcbiAgdmFyIGlzQ2lyY3VsYXIgPSBpY29uVHlwZSB8fCBzaW5nbGVMZXR0ZXI7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQmV0YUJhZGdlJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUJldGFCYWRnZVN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUJldGFCYWRnZSwgc3R5bGVzW2NvbG9yXSwgc3R5bGVzW3NpemVdLCBzdHlsZXNbYWxpZ25tZW50XSwgaXNDaXJjdWxhciA/IHN0eWxlcy5iYWRnZVNpemVzLmNpcmNsZVtzaXplXSA6IHN0eWxlcy5iYWRnZVNpemVzLmRlZmF1bHRbc2l6ZV1dO1xuICB2YXIgaWNvbjtcbiAgaWYgKGljb25UeXBlKSB7XG4gICAgaWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgY3NzOiBzdHlsZXMuZXVpQmV0YUJhZGdlX19pY29uLFxuICAgICAgY2xhc3NOYW1lOiBcImV1aUJldGFCYWRnZV9faWNvblwiLFxuICAgICAgdHlwZTogaWNvblR5cGUsXG4gICAgICBzaXplOiBzaXplID09PSAnbScgPyAnbScgOiAncycsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcbiAgICB9KTtcbiAgfVxuICB2YXIgRWxlbWVudCA9IGhyZWYgPyAnYScgOiAnYnV0dG9uJztcbiAgdmFyIHJlbE9iaiA9IHt9O1xuICBpZiAoaHJlZikge1xuICAgIHJlbE9iai5ocmVmID0gaHJlZjtcbiAgICByZWxPYmoudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHJlbE9iai5yZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgfVxuICBpZiAob25DbGljaykge1xuICAgIHJlbE9iai5vbkNsaWNrID0gb25DbGljaztcbiAgfVxuICB2YXIgY29udGVudDtcbiAgaWYgKG9uQ2xpY2sgfHwgaHJlZikge1xuICAgIGNvbnRlbnQgPSBfX19FbW90aW9uSlNYKEVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBvbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICB0aXRsZTogdHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyA/IGxhYmVsIDogdGl0bGVcbiAgICB9LCByZWxPYmosIHJlc3QpLCBpY29uIHx8IGxhYmVsKTtcbiAgICBpZiAodG9vbHRpcENvbnRlbnQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIHtcbiAgICAgICAgcG9zaXRpb246IHRvb2x0aXBQb3NpdGlvbixcbiAgICAgICAgY29udGVudDogdG9vbHRpcENvbnRlbnQsXG4gICAgICAgIHRpdGxlOiB0aXRsZSB8fCBsYWJlbCxcbiAgICAgICAgYW5jaG9yUHJvcHM6IGFuY2hvclByb3BzXG4gICAgICB9LCBjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIGFuY2hvclByb3BzLCBjb250ZW50KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRvb2x0aXBDb250ZW50KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgICAgIHBvc2l0aW9uOiB0b29sdGlwUG9zaXRpb24sXG4gICAgICAgIGNvbnRlbnQ6IHRvb2x0aXBDb250ZW50LFxuICAgICAgICB0aXRsZTogdGl0bGUgfHwgbGFiZWwsXG4gICAgICAgIGFuY2hvclByb3BzOiBhbmNob3JQcm9wc1xuICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICB0YWJJbmRleDogMCxcbiAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgfSwgcmVzdCksIGljb24gfHwgbGFiZWwpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNwYW5UaXRsZSA9IHRpdGxlIHx8IGxhYmVsO1xuICAgICAgaWYgKHNwYW5UaXRsZSAmJiB0eXBlb2Ygc3BhblRpdGxlICE9PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJPbmx5IHN0cmluZyB0aXRsZXMgYXJlIHBlcm1pdHRlZCBvbiBiYWRnZXMgdGhhdCBkbyBub3QgdXNlIHRvb2x0aXBzLiBGb3VuZDogXCIuY29uY2F0KF90eXBlb2Yoc3BhblRpdGxlKSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIGFuY2hvclByb3BzLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgdGl0bGU6IHNwYW5UaXRsZSxcbiAgICAgICAgY3NzOiBjc3NTdHlsZXNcbiAgICAgIH0sIHJlc3QpLCBpY29uIHx8IGxhYmVsKSk7XG4gICAgfVxuICB9XG59O1xuRXVpQmV0YUJhZGdlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICovXG4gIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBTdXBwbHkgYW4gaWNvbiB0eXBlIGlmIHRoZSBiYWRnZSBzaG91bGQganVzdCBiZSBhbiBpY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBPbmUgd29yZCBsYWJlbCBsaWtlIFwiQmV0YVwiIG9yIFwiTGFiXCJcbiAgICAgKi9cbiAgLyoqXG4gICAgICogT25lIHdvcmQgbGFiZWwgbGlrZSBcIkJldGFcIiBvciBcIkxhYlwiXG4gICAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogQ29udGVudCBmb3IgdGhlIHRvb2x0aXBcbiAgICAgKi9cbiAgdG9vbHRpcENvbnRlbnQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZF0pXSksXG4gIC8qKlxuICAgICAqIEN1c3RvbSBwb3NpdGlvbiBvZiB0aGUgdG9vbHRpcFxuICAgICAqL1xuICB0b29sdGlwUG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl0pLFxuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgc3BhbiB3cmFwcGluZyB0aGUgYmFkZ2VcbiAgICAgKi9cbiAgYW5jaG9yUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIC8qKlxuICAgICAqIE9wdGlvbmFsIHRpdGxlIHdpbGwgYmUgc3VwcGxpZWQgYXMgdG9vbHRpcCB0aXRsZSBvciB0aXRsZSBhdHRyaWJ1dGVcbiAgICAgKiBvdGhlcndpc2UgdGhlIGxhYmVsIHdpbGwgYmUgdXNlZFxuICAgICAqL1xuICB0aXRsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nXSldKSxcbiAgLyoqXG4gICAgICogQWNjZXB0cyBhY2NlbnQsIHN1YmR1ZWQgYW5kIGhvbGxvdy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIGB2ZXJ0aWNhbC1hbGlnbmAgQ1NTIHByb3BlcnR5XG4gICAgICovXG4gIGFsaWdubWVudDogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgZXVpRm9jdXNSaW5nLCBldWlGb250U2l6ZUZyb21TY2FsZSwgZXVpVGV4dFRydW5jYXRlLCBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpQmFkZ2VDb2xvcnMgfSBmcm9tICcuLi9jb2xvcl91dGlscyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJsMW5tZTctbWlkZGxlXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGFiZWw6bWlkZGxlO1wiXG59IDoge1xuICBuYW1lOiBcImwxbm1lNy1taWRkbGVcIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOm1pZGRsZTtsYWJlbDptaWRkbGU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxOWhleGh5LWJhc2VsaW5lXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtsYWJlbDpiYXNlbGluZTtcIlxufSA6IHtcbiAgbmFtZTogXCIxOWhleGh5LWJhc2VsaW5lXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtsYWJlbDpiYXNlbGluZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInB6cHFxZy1ldWlCZXRhQmFkZ2VfX2ljb25cIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwgLTFweCk7bGFiZWw6ZXVpQmV0YUJhZGdlX19pY29uO1wiXG59IDoge1xuICBuYW1lOiBcInB6cHFxZy1ldWlCZXRhQmFkZ2VfX2ljb25cIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwgLTFweCk7bGFiZWw6ZXVpQmV0YUJhZGdlX19pY29uO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUJldGFCYWRnZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUJldGFCYWRnZVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGU7XG4gIHZhciBiYWRnZUNvbG9ycyA9IGV1aUJhZGdlQ29sb3JzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHJldHVybiB7XG4gICAgZXVpQmV0YUJhZGdlOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjtjdXJzb3I6ZGVmYXVsdDtmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQuYm9sZCwgXCI7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOjAuMDVlbTt0ZXh0LWFsaWduOmNlbnRlcjtcIiwgZXVpVGV4dFRydW5jYXRlKCksIFwiICY6Zm9jdXN7XCIsIGV1aUZvY3VzUmluZyhldWlUaGVtZUNvbnRleHQsICdvdXRzZXQnLCB7XG4gICAgICBjb2xvcjogY29sb3JNb2RlID09PSAnREFSSycgPyBldWlUaGVtZS5jb2xvcnMuZ2hvc3QgOiBldWlUaGVtZS5jb2xvcnMuaW5rXG4gICAgfSksIFwiO307bGFiZWw6ZXVpQmV0YUJhZGdlO1wiKSxcbiAgICAvLyBDb2xvcnNcbiAgICBhY2NlbnQ6IC8qI19fUFVSRV9fKi9jc3MoYmFkZ2VDb2xvcnMuYWNjZW50VGV4dCwgXCI7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBzdWJkdWVkOiAvKiNfX1BVUkVfXyovY3NzKGJhZGdlQ29sb3JzLnN1YmR1ZWQsIFwiO2xhYmVsOnN1YmR1ZWQ7XCIpLFxuICAgIGhvbGxvdzogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBiYWRnZUNvbG9ycy5ob2xsb3cuY29sb3IsIFwiO2JhY2tncm91bmQtY29sb3I6XCIsIGJhZGdlQ29sb3JzLmhvbGxvdy5iYWNrZ3JvdW5kQ29sb3IsIFwiO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgXCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBcIiwgYmFkZ2VDb2xvcnMuaG9sbG93LmJvcmRlckNvbG9yLCBcIjs7bGFiZWw6aG9sbG93O1wiKSxcbiAgICAvLyBGb250IHNpemVzXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhcImZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemVGcm9tU2NhbGUoJ3hzJywgZXVpVGhlbWUpLCBcIjtsaW5lLWhlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhcImZvbnQtc2l6ZTowLjYyNXJlbTtsaW5lLWhlaWdodDpcIiwgbWF0aFdpdGhVbml0cyhldWlUaGVtZS5zaXplLnhzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggKyBldWlUaGVtZS5iYXNlO1xuICAgIH0pLCBcIjs7bGFiZWw6cztcIiksXG4gICAgLy8gUGFkZGluZy93aWR0aCBzaXplc1xuICAgIGJhZGdlU2l6ZXM6IHtcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgbTogXCJcXG4gICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLmJhc2UpKSxcbiAgICAgICAgczogXCJcXG4gICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLm0pKVxuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gaXQncyBqdXN0IGFuIGljb24gb3IgYSBzaW5nbGUgbGV0dGVyLCBtYWtlIHRoZSBiYWRnZSBhIGNpcmNsZVxuICAgICAgY2lyY2xlOiB7XG4gICAgICAgIG06IFwiXFxuICAgICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsIGV1aVRoZW1lLnNpemUubCksIFwiXFxuICAgICAgICBcIiksXG4gICAgICAgIHM6IFwiXFxuICAgICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsIG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuc2l6ZS54cywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4geCArIGV1aVRoZW1lLmJhc2U7XG4gICAgICAgIH0pKSwgXCJcXG4gICAgICAgIFwiKVxuICAgICAgfVxuICAgIH0sXG4gICAgZXVpQmV0YUJhZGdlX19pY29uOiBfcmVmMyxcbiAgICAvLyBBbGlnbm1lbnRzXG4gICAgYmFzZWxpbmU6IF9yZWYyLFxuICAgIG1pZGRsZTogX3JlZlxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY29sb3JcIiwgXCJjbGFzc05hbWVcIiwgXCJocmVmXCIsIFwiZXh0ZXJuYWxcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJ0eXBlXCIsIFwib25DbGlja1wiLCBcImRpc2FibGVkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsgRXVpRXh0ZXJuYWxMaW5rSWNvbiB9IGZyb20gJy4vZXh0ZXJuYWxfbGlua19pY29uJztcbmltcG9ydCB7IGV1aUxpbmtTdHlsZXMgfSBmcm9tICcuL2xpbmsuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIENPTE9SUyA9IFsncHJpbWFyeScsICdzdWJkdWVkJywgJ3N1Y2Nlc3MnLCAnYWNjZW50JywgJ2RhbmdlcicsICd3YXJuaW5nJywgJ3RleHQnLCAnZ2hvc3QnXTtcbnZhciBFdWlMaW5rID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ3ByaW1hcnknIDogX3JlZiRjb2xvcixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgIGV4dGVybmFsID0gX3JlZi5leHRlcm5hbCxcbiAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICByZWwgPSBfcmVmLnJlbCxcbiAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICBfZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUxpbmtTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlMaW5rXTtcbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgZGlzYWJsZWQgPSBfZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICBpZiAoaHJlZiA9PT0gdW5kZWZpbmVkIHx8ICFpc0hyZWZWYWxpZCkge1xuICAgIHZhciBidXR0b25Qcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlMaW5rJywgY2xhc3NOYW1lKSxcbiAgICAgIGNzczogW2Nzc1N0eWxlcywgZGlzYWJsZWQgPyBbc3R5bGVzLmRpc2FibGVkXSA6IHN0eWxlc1tjb2xvcl1dLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgICB9LCByZXN0KTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IHJlZlxuICAgIH0sIGJ1dHRvblByb3BzKSwgY2hpbGRyZW4pO1xuICB9XG4gIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgIGhyZWY6IGhyZWYsXG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgcmVsOiByZWxcbiAgfSk7XG4gIHZhciBhbmNob3JQcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpTGluaycsIGNsYXNzTmFtZSksXG4gICAgY3NzOiBbY3NzU3R5bGVzLCBzdHlsZXNbY29sb3JdXSxcbiAgICBocmVmOiBocmVmLFxuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIHJlbDogc2VjdXJlUmVsLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2tcbiAgfSwgcmVzdCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWZcbiAgfSwgYW5jaG9yUHJvcHMpLCBjaGlsZHJlbiwgX19fRW1vdGlvbkpTWChFdWlFeHRlcm5hbExpbmtJY29uLCB7XG4gICAgZXh0ZXJuYWw6IGV4dGVybmFsLFxuICAgIHRhcmdldDogdGFyZ2V0XG4gIH0pKTtcbn0pO1xuRXVpTGluay5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwicmVzZXRcIiwgXCJzdWJtaXRcIl0pLFxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9ycy5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gc2hvdyBhbiBpY29uIGluZGljYXRpbmcgdGhhdCBpdCBpcyBhbiBleHRlcm5hbCBsaW5rO1xuICAgICAqIERlZmF1bHRzIHRvIHRydWUgaWYgYHRhcmdldD1cIl9ibGFua1wiYFxuICAgICAqL1xuICBleHRlcm5hbDogUHJvcFR5cGVzLmJvb2xcbn07XG5FdWlMaW5rLmRpc3BsYXlOYW1lID0gJ0V1aUxpbmsnO1xuZXhwb3J0IHsgRXVpTGluayB9OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGFyZ2V0XCIsIFwiZXh0ZXJuYWxcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGxvZ2ljYWxTdHlsZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcblxuLyoqXG4gKiBEUlkgdXRpbCBmb3IgaW5kaWNhdGluZyBleHRlcm5hbCBsaW5rcyBib3RoIHZpYSBpY29uIGFuZCB0b1xuICogc2NyZWVuIHJlYWRlcnMuIFVzZWQgaW50ZXJuYWxseSBieSBhdCBFdWlMaW5rIGFuZCBFdWlMaXN0R3JvdXBJdGVtXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaWNvblN0eWxlID0gZnVuY3Rpb24gaWNvblN0eWxlKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIGxvZ2ljYWxTdHlsZSgnbWFyZ2luLWxlZnQnLCBldWlUaGVtZS5zaXplLnhzKTtcbn07XG5leHBvcnQgdmFyIEV1aUV4dGVybmFsTGlua0ljb24gPSBmdW5jdGlvbiBFdWlFeHRlcm5hbExpbmtJY29uKF9yZWYyKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmMi50YXJnZXQsXG4gICAgZXh0ZXJuYWwgPSBfcmVmMi5leHRlcm5hbCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQpO1xuICB2YXIgaWNvbkNzc1N0eWxlID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoaWNvblN0eWxlKTtcbiAgdmFyIHNob3dFeHRlcm5hbExpbmtJY29uID0gdGFyZ2V0ID09PSAnX2JsYW5rJyAmJiBleHRlcm5hbCAhPT0gZmFsc2UgfHwgZXh0ZXJuYWwgPT09IHRydWU7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBzaG93RXh0ZXJuYWxMaW5rSWNvbiAmJiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUljb24sIF9leHRlbmRzKHtcbiAgICBjc3M6IGljb25Dc3NTdHlsZSxcbiAgICBzaXplOiBcInNcIixcbiAgICB0eXBlOiBcInBvcG91dFwiLFxuICAgIHJvbGU6IFwicHJlc2VudGF0aW9uXCJcbiAgfSwgcmVzdCkpLCB0YXJnZXQgPT09ICdfYmxhbmsnID8gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICB0b2tlbjogXCJldWlFeHRlcm5hbExpbmtJY29uLm5ld1RhcmdldC5zY3JlZW5SZWFkZXJPbmx5VGV4dFwiLFxuICAgIGRlZmF1bHQ6IFwiKGV4dGVybmFsLCBvcGVucyBpbiBhIG5ldyB0YWIgb3Igd2luZG93KVwiXG4gIH0pKSkgOiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aUV4dGVybmFsTGlua0ljb24uZXh0ZXJuYWxUYXJnZXQuc2NyZWVuUmVhZGVyT25seVRleHRcIixcbiAgICBkZWZhdWx0OiBcIihleHRlcm5hbClcIlxuICB9KSkpKSkpO1xufTtcbkV1aUV4dGVybmFsTGlua0ljb24ucHJvcFR5cGVzID0ge1xuICB0YXJnZXQ6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIHNob3cgYW4gaWNvbiBpbmRpY2F0aW5nIHRoYXQgaXQgaXMgYW4gZXh0ZXJuYWwgbGluaztcbiAgICAgKiBEZWZhdWx0cyB0byB0cnVlIGlmIGB0YXJnZXQ9XCJfYmxhbmtcImBcbiAgICAgKi9cbiAgZXh0ZXJuYWw6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjbG9zZVBvcG92ZXJcIiwgXCJhbmNob3JQb3NpdGlvblwiLCBcImF0dGFjaFRvQW5jaG9yXCIsIFwicmVwb3NpdGlvblRvQ3Jvc3NBeGlzXCIsIFwiZGlzcGxheVwiLCBcInBhbmVsUGFkZGluZ1NpemVcIiwgXCJjbG9zZU9uU2Nyb2xsXCIsIFwib3duRm9jdXNcIiwgXCJkaXNhYmxlRm9jdXNUcmFwXCIsIFwiZm9jdXNUcmFwUHJvcHNcIiwgXCJpbnB1dFwiLCBcImZ1bGxXaWR0aFwiLCBcInBhbmVsTWluV2lkdGhcIiwgXCJvblBhbmVsUmVzaXplXCIsIFwiaW5wdXRSZWZcIiwgXCJwYW5lbFJlZlwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlUmVmLCBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB0YWJiYWJsZSB9IGZyb20gJ3RhYmJhYmxlJztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBrZXlzLCB1c2VDb21iaW5lZFJlZnMsIHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlUmVzaXplT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXInO1xuaW1wb3J0IHsgRXVpRm9jdXNUcmFwIH0gZnJvbSAnLi4vZm9jdXNfdHJhcCc7XG5pbXBvcnQgeyBldWlGb3JtTWF4V2lkdGggfSBmcm9tICcuLi9mb3JtL2Zvcm0uc3R5bGVzJztcbmltcG9ydCB7IEV1aVBvcG92ZXIgfSBmcm9tICcuL3BvcG92ZXInO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbi8vIFVzZWQgYnkgY2hpbGQgY29tcG9uZW50cyB0aGF0IHdhbnQgdG8ga25vdyB0aGUgcGFyZW50IHBvcG92ZXIgd2lkdGhcbmV4cG9ydCB2YXIgRXVpSW5wdXRQb3BvdmVyV2lkdGhDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoMCk7XG5leHBvcnQgdmFyIEV1aUlucHV0UG9wb3ZlciA9IGZ1bmN0aW9uIEV1aUlucHV0UG9wb3ZlcihfcmVmKSB7XG4gIHZhciBfcHJvcHMkcGFuZWxQcm9wcztcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBjbG9zZVBvcG92ZXIgPSBfcmVmLmNsb3NlUG9wb3ZlcixcbiAgICBfcmVmJGFuY2hvclBvc2l0aW9uID0gX3JlZi5hbmNob3JQb3NpdGlvbixcbiAgICBhbmNob3JQb3NpdGlvbiA9IF9yZWYkYW5jaG9yUG9zaXRpb24gPT09IHZvaWQgMCA/ICdkb3duTGVmdCcgOiBfcmVmJGFuY2hvclBvc2l0aW9uLFxuICAgIF9yZWYkYXR0YWNoVG9BbmNob3IgPSBfcmVmLmF0dGFjaFRvQW5jaG9yLFxuICAgIGF0dGFjaFRvQW5jaG9yID0gX3JlZiRhdHRhY2hUb0FuY2hvciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkYXR0YWNoVG9BbmNob3IsXG4gICAgX3JlZiRyZXBvc2l0aW9uVG9Dcm9zID0gX3JlZi5yZXBvc2l0aW9uVG9Dcm9zc0F4aXMsXG4gICAgcmVwb3NpdGlvblRvQ3Jvc3NBeGlzID0gX3JlZiRyZXBvc2l0aW9uVG9Dcm9zID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkcmVwb3NpdGlvblRvQ3JvcyxcbiAgICBfcmVmJGRpc3BsYXkgPSBfcmVmLmRpc3BsYXksXG4gICAgZGlzcGxheSA9IF9yZWYkZGlzcGxheSA9PT0gdm9pZCAwID8gJ2Jsb2NrJyA6IF9yZWYkZGlzcGxheSxcbiAgICBfcmVmJHBhbmVsUGFkZGluZ1NpemUgPSBfcmVmLnBhbmVsUGFkZGluZ1NpemUsXG4gICAgcGFuZWxQYWRkaW5nU2l6ZSA9IF9yZWYkcGFuZWxQYWRkaW5nU2l6ZSA9PT0gdm9pZCAwID8gJ3MnIDogX3JlZiRwYW5lbFBhZGRpbmdTaXplLFxuICAgIF9yZWYkY2xvc2VPblNjcm9sbCA9IF9yZWYuY2xvc2VPblNjcm9sbCxcbiAgICBjbG9zZU9uU2Nyb2xsID0gX3JlZiRjbG9zZU9uU2Nyb2xsID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY2xvc2VPblNjcm9sbCxcbiAgICBfcmVmJG93bkZvY3VzID0gX3JlZi5vd25Gb2N1cyxcbiAgICBvd25Gb2N1cyA9IF9yZWYkb3duRm9jdXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRvd25Gb2N1cyxcbiAgICBfcmVmJGRpc2FibGVGb2N1c1RyYXAgPSBfcmVmLmRpc2FibGVGb2N1c1RyYXAsXG4gICAgZGlzYWJsZUZvY3VzVHJhcCA9IF9yZWYkZGlzYWJsZUZvY3VzVHJhcCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGRpc2FibGVGb2N1c1RyYXAsXG4gICAgZm9jdXNUcmFwUHJvcHMgPSBfcmVmLmZvY3VzVHJhcFByb3BzLFxuICAgIGlucHV0ID0gX3JlZi5pbnB1dCxcbiAgICBfcmVmJGZ1bGxXaWR0aCA9IF9yZWYuZnVsbFdpZHRoLFxuICAgIGZ1bGxXaWR0aCA9IF9yZWYkZnVsbFdpZHRoID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkZnVsbFdpZHRoLFxuICAgIF9yZWYkcGFuZWxNaW5XaWR0aCA9IF9yZWYucGFuZWxNaW5XaWR0aCxcbiAgICBwYW5lbE1pbldpZHRoID0gX3JlZiRwYW5lbE1pbldpZHRoID09PSB2b2lkIDAgPyAwIDogX3JlZiRwYW5lbE1pbldpZHRoLFxuICAgIG9uUGFuZWxSZXNpemUgPSBfcmVmLm9uUGFuZWxSZXNpemUsXG4gICAgX2lucHV0UmVmID0gX3JlZi5pbnB1dFJlZixcbiAgICBfcGFuZWxSZWYgPSBfcmVmLnBhbmVsUmVmLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NuYW1lcygnZXVpSW5wdXRQb3BvdmVyJywgY2xhc3NOYW1lKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIGZvcm1NYXhXaWR0aCA9IGV1aUZvcm1NYXhXaWR0aChldWlUaGVtZSk7XG5cbiAgLyoqXG4gICAqIFJlZiBzZXR1cFxuICAgKi9cblxuICB2YXIgcG9wb3ZlckNsYXNzUmVmID0gdXNlUmVmKG51bGwpO1xuICAvLyBUaGUgaW5wdXRFbCBzdGF0ZSBlbnN1cmVzIHRoYXQgd2lkdGggaXMgY29ycmVjdGx5IHRyYWNrZWQgb24gaW5pdGlhbCBsb2FkXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBpbnB1dEVsID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRJbnB1dEVsID0gX3VzZVN0YXRlMlsxXTtcbiAgLy8gVGhlIHBhbmVsRWwgc3RhdGUgZW5zdXJlcyB0aGF0IHdpZHRoIGlzIGNvcnJlY3RseSBzZXQgZXZlcnkgdGltZSB0aGUgcG9wb3ZlciBvcGVuc1xuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKG51bGwpLFxuICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICBwYW5lbEVsID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRQYW5lbEVsID0gX3VzZVN0YXRlNFsxXTtcbiAgdmFyIGlucHV0UmVmID0gdXNlQ29tYmluZWRSZWZzKFtzZXRJbnB1dEVsLCBfaW5wdXRSZWZdKTtcbiAgdmFyIHBhbmVsUmVmID0gdXNlQ29tYmluZWRSZWZzKFtzZXRQYW5lbEVsLCBfcGFuZWxSZWZdKTtcblxuICAvKipcbiAgICogU2l6aW5nL3dpZHRoIGxvZ2ljXG4gICAqL1xuXG4gIHZhciBpbnB1dFdpZHRoID0gdXNlUmVzaXplT2JzZXJ2ZXIoaW5wdXRFbCwgJ3dpZHRoJykud2lkdGg7XG4gIHZhciBwYW5lbFdpZHRoID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGlucHV0V2lkdGggPCBwYW5lbE1pbldpZHRoID8gcGFuZWxNaW5XaWR0aCA6IGlucHV0V2lkdGg7XG4gIH0sIFtwYW5lbE1pbldpZHRoLCBpbnB1dFdpZHRoXSk7XG5cbiAgLy8gUmVzaXplIGNhbGxiYWNrXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgb25QYW5lbFJlc2l6ZSA9PT0gbnVsbCB8fCBvblBhbmVsUmVzaXplID09PSB2b2lkIDAgfHwgb25QYW5lbFJlc2l6ZShwYW5lbFdpZHRoKTtcbiAgfSwgW3BhbmVsV2lkdGgsIG9uUGFuZWxSZXNpemVdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocGFuZWxFbCkge1xuICAgICAgLy8gV2UgaGF2ZSB0byBtb2RpZnkgdGhlIHBvcG92ZXIgcGFuZWwgRE9NIG5vZGUgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZ1xuICAgICAgLy8gYHBhbmVsU3R5bGVgLCBhcyB0aGVyZSdzIHNvbWUgd2VpcmQgcG9zaXRpb25pbmcgYnVncyBvbiByZXNpemUgb3RoZXJ3aXNlXG4gICAgICBwYW5lbEVsLnN0eWxlLmlubGluZVNpemUgPSBcIlwiLmNvbmNhdChwYW5lbFdpZHRoLCBcInB4XCIpO1xuICAgIH1cbiAgfSwgW3BhbmVsRWwsIHBhbmVsV2lkdGhdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGlzIGZpcmVzIG9uIGFsbCBpbnB1dCB3aWR0aCBjaGFuZ2VzIHJlZ2FyZGxlc3Mgb2YgbWluaW11bSBzaXplLCBiZWNhdXNlIG9uXG4gICAgLy8gcmlnaHQvY2VudGVyIGFuY2hvcmVkIHBvcG92ZXJzLCB0aGUgaW5wdXQgd2lkdGggYWZmZWN0cyB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcG92ZXJcbiAgICBpZiAocGFuZWxFbCkge1xuICAgICAgdmFyIF9wb3BvdmVyQ2xhc3NSZWYkY3VycjtcbiAgICAgIChfcG9wb3ZlckNsYXNzUmVmJGN1cnIgPSBwb3BvdmVyQ2xhc3NSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3BvcG92ZXJDbGFzc1JlZiRjdXJyID09PSB2b2lkIDAgfHwgX3BvcG92ZXJDbGFzc1JlZiRjdXJyLnBvc2l0aW9uUG9wb3ZlckZsdWlkKCk7XG4gICAgfVxuICB9LCBbaW5wdXRXaWR0aCwgcGFuZWxFbF0pO1xuXG4gIC8qKlxuICAgKiBQb3BvdmVyIHRhYiB0byBjbG9zZSBsb2dpY1xuICAgKi9cblxuICB2YXIgcGFuZWxQcm9wc09uS2V5RG93biA9IChfcHJvcHMkcGFuZWxQcm9wcyA9IHByb3BzLnBhbmVsUHJvcHMpID09PSBudWxsIHx8IF9wcm9wcyRwYW5lbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcHJvcHMkcGFuZWxQcm9wcy5vbktleURvd247XG4gIHZhciBvbktleURvd24gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBwYW5lbFByb3BzT25LZXlEb3duID09PSBudWxsIHx8IHBhbmVsUHJvcHNPbktleURvd24gPT09IHZvaWQgMCB8fCBwYW5lbFByb3BzT25LZXlEb3duKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLlRBQikge1xuICAgICAgaWYgKGRpc2FibGVGb2N1c1RyYXApIHtcbiAgICAgICAgaWYgKCFvd25Gb2N1cykge1xuICAgICAgICAgIGNsb3NlUG9wb3ZlcigpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdGFiYmFibGVJdGVtcyA9IHRhYmJhYmxlKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmZpbHRlcihmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICByZXR1cm4gIWVsLmhhc0F0dHJpYnV0ZSgnZGF0YS1mb2N1cy1ndWFyZCcpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0YWJiYWJsZUl0ZW1zLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICB2YXIgdGFiYmluZ0Zyb21MYXN0SXRlbUluUG9wb3ZlciA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRhYmJhYmxlSXRlbXNbdGFiYmFibGVJdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRhYmJpbmdGcm9tTGFzdEl0ZW1JblBvcG92ZXIpIHtcbiAgICAgICAgICBjbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2Rpc2FibGVGb2N1c1RyYXAsIG93bkZvY3VzLCBjbG9zZVBvcG92ZXIsIHBhbmVsUHJvcHNPbktleURvd25dKTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgY2xvc2Ugb24gc2Nyb2xsIGJlaGF2aW9yXG4gICAqL1xuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2hlbiB0aGUgcG9wb3ZlciBvcGVucywgYWRkIGEgc2Nyb2xsIGxpc3RlbmVyIHRvIHRoZSBwYWdlICgmIHJlbW92ZSBpdCBhZnRlcilcbiAgICBpZiAoY2xvc2VPblNjcm9sbCAmJiBwYW5lbEVsKSB7XG4gICAgICB2YXIgY2xvc2VQb3BvdmVyT25TY3JvbGwgPSBmdW5jdGlvbiBjbG9zZVBvcG92ZXJPblNjcm9sbChldmVudCkge1xuICAgICAgICB2YXIgc2Nyb2xsVGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgIC8vIEJhc2ljIGV4aXN0ZW5jZSBjaGVja1xuICAgICAgICBpZiAoIXBhbmVsRWwgfHwgIWlucHV0RWwgfHwgIXNjcm9sbFRhcmdldCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBEbyBub3QgY2xvc2UgdGhlIHBvcG92ZXIgaWYgdGhlIGlucHV0IG9yIHBvcG92ZXIgaXRzZWxmIHdhcyBzY3JvbGxlZFxuICAgICAgICBpZiAocGFuZWxFbC5jb250YWlucyhzY3JvbGxUYXJnZXQpIHx8IGlucHV0RWwuY29udGFpbnMoc2Nyb2xsVGFyZ2V0KSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaXJlZm94IHdpbGwgdHJpZ2dlciBhIHNjcm9sbCBldmVudCBpbiBtYW55IGNvbW1vbiBzaXR1YXRpb25zIChlLmcuIGRvY3Mgc2lkZSBuYXYpXG4gICAgICAgIC8vIHdoZW4gdGhlIG9wdGlvbnMgbGlzdCBkaXYgaXMgYXBwZW5kZWQgdG8gdGhlIERPTS4gVG8gd29yayBhcm91bmQgdGhpcywgd2Ugc2hvdWxkXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBlbGVtZW50IHRoYXQgc2Nyb2xsZWQgYWN0dWFsbHkgY29udGFpbnMvd2lsbCBhZmZlY3QgdGhlIGlucHV0XG4gICAgICAgIGlmICghc2Nyb2xsVGFyZ2V0LmNvbnRhaW5zKGlucHV0RWwpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNsb3NlUG9wb3ZlcigpO1xuICAgICAgfTtcblxuICAgICAgLy8gS2liYW5hIEN5cHJlc3MgdGVzdHMgdHJpZ2dlciBhIHNjcm9sbCBldmVudCBpbiBtYW55IGNvbW1vbiBzaXR1YXRpb25zIHdoZW4gdGhlIG9wdGlvbnMgbGlzdCBkaXYgaXMgYXBwZW5kZWRcbiAgICAgIC8vIHRvIHRoZSBET007IGluIHRlc3RpbmcgaXQgd2FzIGFsd2F5cyB3aXRoaW4gMTAwbXMsIGJ1dCBzZXR0aW5nIGEgdGltZW91dCBoZXJlIGZvciA1MDBtcyB0byBiZSBzYWZlXG4gICAgICB2YXIgdGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjbG9zZVBvcG92ZXJPblNjcm9sbCwge1xuICAgICAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICAgICAgLy8gZm9yIGJldHRlciBwZXJmb3JtYW5jZSBhcyB3ZSB3b24ndCBjYWxsIHByZXZlbnREZWZhdWx0XG4gICAgICAgICAgY2FwdHVyZTogdHJ1ZSAvLyBzY3JvbGwgZXZlbnRzIGRvbid0IGJ1YmJsZSwgdGhleSBtdXN0IGJlIGNhcHR1cmVkIGluc3RlYWRcbiAgICAgICAgfSk7XG4gICAgICB9LCA1MDApO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNsb3NlUG9wb3Zlck9uU2Nyb2xsLCB7XG4gICAgICAgICAgY2FwdHVyZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2Nsb3NlT25TY3JvbGwsIGNsb3NlUG9wb3ZlciwgcGFuZWxFbCwgaW5wdXRFbF0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogLyojX19QVVJFX18qL2NzcyhmdWxsV2lkdGggPyB1bmRlZmluZWQgOiBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCBmb3JtTWF4V2lkdGgpLCBcIjtsYWJlbDpFdWlJbnB1dFBvcG92ZXI7XCIpLFxuICAgIGRpc3BsYXk6IGRpc3BsYXksXG4gICAgYnV0dG9uOiBpbnB1dCxcbiAgICBwb3BvdmVyUmVmOiBpbnB1dFJlZixcbiAgICBwYW5lbFJlZjogcGFuZWxSZWYsXG4gICAgcmVmOiBwb3BvdmVyQ2xhc3NSZWYsXG4gICAgY2xvc2VQb3BvdmVyOiBjbG9zZVBvcG92ZXIsXG4gICAgYW5jaG9yUG9zaXRpb246IGFuY2hvclBvc2l0aW9uLFxuICAgIGF0dGFjaFRvQW5jaG9yOiBhdHRhY2hUb0FuY2hvcixcbiAgICByZXBvc2l0aW9uVG9Dcm9zc0F4aXM6IHJlcG9zaXRpb25Ub0Nyb3NzQXhpcyxcbiAgICBwYW5lbFBhZGRpbmdTaXplOiBwYW5lbFBhZGRpbmdTaXplLFxuICAgIG93bkZvY3VzOiBvd25Gb2N1c1xuICB9LCBwcm9wcywge1xuICAgIHBhbmVsUHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMucGFuZWxQcm9wcyksIHt9LCB7XG4gICAgICBvbktleURvd246IG9uS2V5RG93blxuICAgIH0pXG4gIH0pLCBfX19FbW90aW9uSlNYKEV1aUZvY3VzVHJhcCwgX2V4dGVuZHMoe1xuICAgIGNsaWNrT3V0c2lkZURpc2FibGVzOiB0cnVlLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlRm9jdXNUcmFwXG4gIH0sIGZvY3VzVHJhcFByb3BzKSwgX19fRW1vdGlvbkpTWChFdWlJbnB1dFBvcG92ZXJXaWR0aENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogcGFuZWxXaWR0aFxuICB9LCBjaGlsZHJlbikpKTtcbn07XG5FdWlJbnB1dFBvcG92ZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQWxpZ25tZW50IG9mIHRoZSBwb3BvdmVyIHJlbGF0aXZlIHRvIHRoZSBpbnB1dFxuICAgICAqL1xuICBhbmNob3JQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcImRvd25MZWZ0XCIsIFwiZG93blJpZ2h0XCIsIFwiZG93bkNlbnRlclwiXSksXG4gIGRpc2FibGVGb2N1c1RyYXA6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBBbGxvd3MgYXV0b21hdGljYWxseSBjbG9zaW5nIHRoZSBpbnB1dCBwb3BvdmVyIG9uIHBhZ2Ugc2Nyb2xsXG4gICAgICovXG4gIGNsb3NlT25TY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBpbnB1dDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmFueSxcbiAgb25QYW5lbFJlc2l6ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsICoqRXVpSW5wdXRQb3BvdmVycyoqIGluaGVyaXQgdGhlIHNhbWUgd2lkdGggYXMgdGhlIHBhc3NlZCBpbnB1dCBlbGVtZW50LlxuICAgICAqIEhvd2V2ZXIsIGlmIHRoZSBpbnB1dCB3aWR0aCBpcyB0b28gc21hbGwsIHlvdSBjYW4gcGFzcyBhIG1pbmltdW0gcGFuZWwgd2lkdGhcbiAgICAgKiAodGhhdCBzaG91bGQgYmUgYmFzZWQgb24gdGhlIHBvcG92ZXIgY29udGVudCkuXG4gICAgICovXG4gIHBhbmVsTWluV2lkdGg6IFByb3BUeXBlcy5udW1iZXJcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsaWNrT3V0c2lkZURpc2FibGVzXCIsIFwiZGlzYWJsZWRcIiwgXCJyZXR1cm5Gb2N1c1wiLCBcIm5vSXNvbGF0aW9uXCIsIFwic2Nyb2xsTG9ja1wiLCBcImdhcE1vZGVcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRm9jdXNPbiB9IGZyb20gJ3JlYWN0LWZvY3VzLW9uJztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbEJhciB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyJztcbmltcG9ydCB7IGZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlUHJvcHNXaXRoQ29tcG9uZW50RGVmYXVsdHMgfSBmcm9tICcuLi9wcm92aWRlci9jb21wb25lbnRfZGVmYXVsdHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9jdXNUcmFwID0gZnVuY3Rpb24gRXVpRm9jdXNUcmFwKHByb3BzKSB7XG4gIHZhciBwcm9wc1dpdGhEZWZhdWx0cyA9IHVzZVByb3BzV2l0aENvbXBvbmVudERlZmF1bHRzKCdFdWlGb2N1c1RyYXAnLCBwcm9wcyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvY3VzVHJhcENsYXNzLCBwcm9wc1dpdGhEZWZhdWx0cyk7XG59O1xuRXVpRm9jdXNUcmFwLnByb3BUeXBlcyA9IHtcbiAgLy8gRm9yIHNvbWUgcmVhc29uLCBTdG9yeWJvb2sgZG9lc24ndCByZWdpc3RlciB0aGVzZSBwcm9wcyBpZiB0aGV5J3JlIFBpY2s8PidkXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBzdHlsZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBXaGV0aGVyIGBvbkNsaWNrT3V0c2lkZWAgc2hvdWxkIGJlIGNhbGxlZCBvbiBtb3VzZXVwIGluc3RlYWQgb2YgbW91c2Vkb3duLlxuICAgICAqIFRoaXMgZmxhZyBjYW4gYmUgdXNlZCB0byBwcmV2ZW50IGNvbmZsaWN0cyB3aXRoIG91dHNpZGUgdG9nZ2xlIGJ1dHRvbnMgYnkgZGVsYXlpbmcgdGhlIGNsb3NpbmcgY2xpY2sgY2FsbGJhY2suXG4gICAgICovXG4gIGNsb3NlT25Nb3VzZXVwOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQ2xpY2tpbmcgb3V0c2lkZSB0aGUgdHJhcCBhcmVhIHdpbGwgZGlzYWJsZSB0aGUgdHJhcFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIGNsaWNrT3V0c2lkZURpc2FibGVzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIGVsZW1lbnQgdGhhdCB3aWxsIGdldCBmb2N1cyB3aGVuIHRoZSB0cmFwIGlzIGluaXRpYXRlZFxuICAgICAqL1xuICBpbml0aWFsRm9jdXM6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIGlmIGBzY3JvbGxMb2NrYCBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGJvZHkncyBzY3JvbGxiYXIgd2lkdGggd2lsbCBiZSBwcmVzZXJ2ZWQgb24gbG9ja1xuICAgICAqIHZpYSB0aGUgYGdhcE1vZGVgIENTUyBwcm9wZXJ0eS4gRGVwZW5kaW5nIG9uIHlvdXIgY3VzdG9tIENTUywgeW91IG1heSBwcmVmZXIgdG8gdXNlXG4gICAgICogYG1hcmdpbmAgaW5zdGVhZCBvZiBgcGFkZGluZ2AuXG4gICAgICogQGRlZmF1bHQgcGFkZGluZ1xuICAgICAqL1xuICBnYXBNb2RlOiBQcm9wVHlwZXMub25lT2YoW1wicGFkZGluZ1wiLCBcIm1hcmdpblwiXSksXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgZm9jdXMgdHJhcHBpbmcgYmV0d2VlbiBpZnJhbWVzLlxuICAgICAqIEJ5IGRlZmF1bHQsIEV1aUZvY3VzVHJhcCBhbGxvd3MgZm9jdXMgdG8gbGVhdmUgaWZyYW1lcyBhbmQgbW92ZSB0byBlbGVtZW50cyBvdXRzaWRlIG9mIGl0LlxuICAgICAqIFNldCB0byBgdHJ1ZWAgaWYgeW91IHdhbnQgZm9jdXMgdG8gcmVtYWluIHRyYXBwZWQgd2l0aGluIHRoZSBpZnJhbWUuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgY3Jvc3NGcmFtZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgc2Nyb2xsTG9jazogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICBub0lzb2xhdGlvbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICByZXR1cm5Gb2N1czogUHJvcFR5cGVzLmFueVxufTtcbnZhciBFdWlGb2N1c1RyYXBDbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlGb2N1c1RyYXBDbGFzcygpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUZvY3VzVHJhcENsYXNzKTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlGb2N1c1RyYXBDbGFzcywgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic3RhdGVcIiwge1xuICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogZmFsc2VcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibGFzdEludGVyY2VwdGVkRXZlbnRcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInByZXZlbnRGb2N1c0V4aXRcIiwgZmFsc2UpO1xuICAgIC8vIFByb2dyYW1tYXRpY2FsbHkgc2V0cyBmb2N1cyBvbiBhIG5lc3RlZCBET00gbm9kZTsgb3B0aW9uYWxcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2V0SW5pdGlhbEZvY3VzXCIsIGZ1bmN0aW9uIChpbml0aWFsRm9jdXMpIHtcbiAgICAgIGlmICghaW5pdGlhbEZvY3VzKSByZXR1cm47XG4gICAgICB2YXIgbm9kZSA9IGZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmKGluaXRpYWxGb2N1cyk7XG4gICAgICBpZiAoIW5vZGUpIHJldHVybjtcbiAgICAgIC8vIGBkYXRhLWF1dG9mb2N1c2AgaXMgcGFydCBvZiB0aGUgJ3JlYWN0LWZvY3VzLW9uJyBBUElcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWF1dG9mb2N1cycsICd0cnVlJyk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uTW91c2V1cE91dHNpZGVcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIF90aGlzLnJlbW92ZU1vdXNldXBMaXN0ZW5lcigpO1xuICAgICAgLy8gVGltZW91dCBnaXZlcyBwcmVjZWRlbmNlIHRvIHRoZSBjb25zdW1lciB0byBpbml0aWF0ZSBjbG9zZSBpZiBpdCBoYXMgdG9nZ2xlIGJlaGF2aW9yLlxuICAgICAgLy8gT3RoZXJ3aXNlIHRoaXMgZXZlbnQgbWF5IG9jY3VyIGZpcnN0IGFuZCB0aGUgY29uc3VtZXIgdG9nZ2xlIHdpbGwgcmVvcGVuIHRoZSBmbHlvdXQuXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uQ2xpY2tPdSwgX3RoaXMkcHJvcHM7XG4gICAgICAgIHJldHVybiAoX3RoaXMkcHJvcHMkb25DbGlja091ID0gKF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMpLm9uQ2xpY2tPdXRzaWRlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkNsaWNrT3UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uQ2xpY2tPdS5jYWxsKF90aGlzJHByb3BzLCBlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJhZGRNb3VzZXVwTGlzdGVuZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF90aGlzLm9uTW91c2V1cE91dHNpZGUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVtb3ZlTW91c2V1cExpc3RlbmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgX3RoaXMub25Nb3VzZXVwT3V0c2lkZSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImhhbmRsZU91dHNpZGVDbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgb25DbGlja091dHNpZGUgPSBfdGhpcyRwcm9wczIub25DbGlja091dHNpZGUsXG4gICAgICAgIGNsaWNrT3V0c2lkZURpc2FibGVzID0gX3RoaXMkcHJvcHMyLmNsaWNrT3V0c2lkZURpc2FibGVzLFxuICAgICAgICBjbG9zZU9uTW91c2V1cCA9IF90aGlzJHByb3BzMi5jbG9zZU9uTW91c2V1cDtcbiAgICAgIGlmIChjbGlja091dHNpZGVEaXNhYmxlcykge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkNsaWNrT3V0c2lkZSkge1xuICAgICAgICBjbG9zZU9uTW91c2V1cCA/IF90aGlzLmFkZE1vdXNldXBMaXN0ZW5lcigpIDogb25DbGlja091dHNpZGUoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpRm9jdXNUcmFwQ2xhc3MsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUZvY3VzVHJhcENsYXNzLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbEZvY3VzKHRoaXMucHJvcHMuaW5pdGlhbEZvY3VzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMuZGlzYWJsZWQgPT09IHRydWUgJiYgdGhpcy5wcm9wcy5kaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5yZW1vdmVNb3VzZXVwTGlzdGVuZXIoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMy5jaGlsZHJlbixcbiAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXMgPSBfdGhpcyRwcm9wczMuY2xpY2tPdXRzaWRlRGlzYWJsZXMsXG4gICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMzLmRpc2FibGVkLFxuICAgICAgICByZXR1cm5Gb2N1cyA9IF90aGlzJHByb3BzMy5yZXR1cm5Gb2N1cyxcbiAgICAgICAgbm9Jc29sYXRpb24gPSBfdGhpcyRwcm9wczMubm9Jc29sYXRpb24sXG4gICAgICAgIHNjcm9sbExvY2sgPSBfdGhpcyRwcm9wczMuc2Nyb2xsTG9jayxcbiAgICAgICAgZ2FwTW9kZSA9IF90aGlzJHByb3BzMy5nYXBNb2RlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMywgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBpc0Rpc2FibGVkID0gZGlzYWJsZWQgfHwgdGhpcy5zdGF0ZS5oYXNCZWVuRGlzYWJsZWRCeUNsaWNrO1xuICAgICAgdmFyIGZvY3VzT25Qcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyxcbiAgICAgICAgbm9Jc29sYXRpb246IG5vSXNvbGF0aW9uLFxuICAgICAgICBlbmFibGVkOiAhaXNEaXNhYmxlZFxuICAgICAgfSwgcmVzdCksIHt9LCB7XG4gICAgICAgIG9uQ2xpY2tPdXRzaWRlOiB0aGlzLmhhbmRsZU91dHNpZGVDbGljayxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGBzY3JvbGxMb2NrYCBzaG91bGQgYWx3YXlzIGJlIHVuc2V0IG9uIEZvY3VzT24sIGFzIGl0IGNhbiBwcmV2ZW50IHNjcm9sbGluZyBvblxuICAgICAgICAgKiBwb3J0YWxzIChpLmUuIHBvcG92ZXJzLCBjb21ib2JveGVzLCBkcm9wZG93biBtZW51cywgZXRjLikgd2l0aGluIG1vZGFscyAmIGZseW91dHNcbiAgICAgICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L3JlYWN0LWZvY3VzLW9uL2lzc3Vlcy80OVxuICAgICAgICAgKi9cbiAgICAgICAgc2Nyb2xsTG9jazogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRm9jdXNPbiwgZm9jdXNPblByb3BzLCBjaGlsZHJlbiwgIWlzRGlzYWJsZWQgJiYgc2Nyb2xsTG9jayAmJiBfX19FbW90aW9uSlNYKFJlbW92ZVNjcm9sbEJhciwge1xuICAgICAgICBnYXBNb2RlOiBnYXBNb2RlXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpRm9jdXNUcmFwQ2xhc3MsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY2xpY2tPdXRzaWRlRGlzYWJsZXM6IGZhbHNlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIHJldHVybkZvY3VzOiB0cnVlLFxuICBub0lzb2xhdGlvbjogdHJ1ZSxcbiAgc2Nyb2xsTG9jazogZmFsc2UsXG4gIGNyb3NzRnJhbWU6IGZhbHNlLFxuICBnYXBNb2RlOiAncGFkZGluZycgLy8gRVVJIGRlZmF1bHRzIHRvIHBhZGRpbmcgYmVjYXVzZSBLaWJhbmEncyBib2R5L2xheW91dCBDU1MgaWdub3JlcyBgbWFyZ2luYFxufSk7XG5FdWlGb2N1c1RyYXBDbGFzcy5wcm9wVHlwZXMgPSB7XG4gIC8vIEZvciBzb21lIHJlYXNvbiwgU3Rvcnlib29rIGRvZXNuJ3QgcmVnaXN0ZXIgdGhlc2UgcHJvcHMgaWYgdGhleSdyZSBQaWNrPD4nZFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgc3R5bGU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogV2hldGhlciBgb25DbGlja091dHNpZGVgIHNob3VsZCBiZSBjYWxsZWQgb24gbW91c2V1cCBpbnN0ZWFkIG9mIG1vdXNlZG93bi5cbiAgICAgKiBUaGlzIGZsYWcgY2FuIGJlIHVzZWQgdG8gcHJldmVudCBjb25mbGljdHMgd2l0aCBvdXRzaWRlIHRvZ2dsZSBidXR0b25zIGJ5IGRlbGF5aW5nIHRoZSBjbG9zaW5nIGNsaWNrIGNhbGxiYWNrLlxuICAgICAqL1xuICBjbG9zZU9uTW91c2V1cDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIENsaWNraW5nIG91dHNpZGUgdGhlIHRyYXAgYXJlYSB3aWxsIGRpc2FibGUgdGhlIHRyYXBcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICBjbGlja091dHNpZGVEaXNhYmxlczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byBlbGVtZW50IHRoYXQgd2lsbCBnZXQgZm9jdXMgd2hlbiB0aGUgdHJhcCBpcyBpbml0aWF0ZWRcbiAgICAgKi9cbiAgaW5pdGlhbEZvY3VzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBpZiBgc2Nyb2xsTG9ja2AgaXMgc2V0IHRvIHRydWUsIHRoZSBib2R5J3Mgc2Nyb2xsYmFyIHdpZHRoIHdpbGwgYmUgcHJlc2VydmVkIG9uIGxvY2tcbiAgICAgKiB2aWEgdGhlIGBnYXBNb2RlYCBDU1MgcHJvcGVydHkuIERlcGVuZGluZyBvbiB5b3VyIGN1c3RvbSBDU1MsIHlvdSBtYXkgcHJlZmVyIHRvIHVzZVxuICAgICAqIGBtYXJnaW5gIGluc3RlYWQgb2YgYHBhZGRpbmdgLlxuICAgICAqIEBkZWZhdWx0IHBhZGRpbmdcbiAgICAgKi9cbiAgZ2FwTW9kZTogUHJvcFR5cGVzLm9uZU9mKFtcInBhZGRpbmdcIiwgXCJtYXJnaW5cIl0pLFxuICAvKipcbiAgICAgKiBDb25maWd1cmVzIGZvY3VzIHRyYXBwaW5nIGJldHdlZW4gaWZyYW1lcy5cbiAgICAgKiBCeSBkZWZhdWx0LCBFdWlGb2N1c1RyYXAgYWxsb3dzIGZvY3VzIHRvIGxlYXZlIGlmcmFtZXMgYW5kIG1vdmUgdG8gZWxlbWVudHMgb3V0c2lkZSBvZiBpdC5cbiAgICAgKiBTZXQgdG8gYHRydWVgIGlmIHlvdSB3YW50IGZvY3VzIHRvIHJlbWFpbiB0cmFwcGVkIHdpdGhpbiB0aGUgaWZyYW1lLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIGNyb3NzRnJhbWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIHNjcm9sbExvY2s6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgbm9Jc29sYXRpb246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgcmV0dXJuRm9jdXM6IFByb3BUeXBlcy5hbnlcbn07IiwgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcbiAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICB9XG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICB0W3BdID0gc1twXTtcbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICB9XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcbiAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XG4gIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XG4gIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xuICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcbiAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xuICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcbiAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xuICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XG4gICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xuICAgICAgfVxuICB9XG4gIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcbiAgZG9uZSA9IHRydWU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xuICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcbiAgfVxuICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XG4gIHJldHVybiBjb29rZWQ7XG59O1xuXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59O1xuXG52YXIgb3duS2V5cyA9IGZ1bmN0aW9uKG8pIHtcbiAgb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgdmFyIGFyID0gW107XG4gICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICByZXR1cm4gYXI7XG4gIH07XG4gIHJldHVybiBvd25LZXlzKG8pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcbiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBvd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZSwgaW5uZXI7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XG4gICAgICBpZiAoYXN5bmMpIGlubmVyID0gZGlzcG9zZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xuICAgIGlmIChpbm5lcikgZGlzcG9zZSA9IGZ1bmN0aW9uKCkgeyB0cnkgeyBpbm5lci5jYWxsKHRoaXMpOyB9IGNhdGNoIChlKSB7IHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgfSB9O1xuICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XG4gIH1cbiAgZWxzZSBpZiAoYXN5bmMpIHtcbiAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xuICBmdW5jdGlvbiBmYWlsKGUpIHtcbiAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XG4gICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcbiAgfVxuICB2YXIgciwgcyA9IDA7XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKHIgPSBlbnYuc3RhY2sucG9wKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghci5hc3luYyAmJiBzID09PSAxKSByZXR1cm4gcyA9IDAsIGVudi5zdGFjay5wdXNoKHIpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQpO1xuICAgICAgICBpZiAoci5kaXNwb3NlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IHIuZGlzcG9zZS5jYWxsKHIudmFsdWUpO1xuICAgICAgICAgIGlmIChyLmFzeW5jKSByZXR1cm4gcyB8PSAyLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBzIHw9IDE7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocyA9PT0gMSkgcmV0dXJuIGVudi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudi5lcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uKHBhdGgsIHByZXNlcnZlSnN4KSB7XG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcLlxcLj9cXC8vLnRlc3QocGF0aCkpIHtcbiAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLih0c3gpJHwoKD86XFwuZCk/KSgoPzpcXC5bXi4vXSs/KT8pXFwuKFtjbV0/KXRzJC9pLCBmdW5jdGlvbiAobSwgdHN4LCBkLCBleHQsIGNtKSB7XG4gICAgICAgICAgcmV0dXJuIHRzeCA/IHByZXNlcnZlSnN4ID8gXCIuanN4XCIgOiBcIi5qc1wiIDogZCAmJiAoIWV4dCB8fCAhY20pID8gbSA6IChkICsgZXh0ICsgXCIuXCIgKyBjbS50b0xvd2VyQ2FzZSgpICsgXCJqc1wiKTtcbiAgICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZXh0ZW5kcyxcbiAgX19hc3NpZ24sXG4gIF9fcmVzdCxcbiAgX19kZWNvcmF0ZSxcbiAgX19wYXJhbSxcbiAgX19lc0RlY29yYXRlLFxuICBfX3J1bkluaXRpYWxpemVycyxcbiAgX19wcm9wS2V5LFxuICBfX3NldEZ1bmN0aW9uTmFtZSxcbiAgX19tZXRhZGF0YSxcbiAgX19hd2FpdGVyLFxuICBfX2dlbmVyYXRvcixcbiAgX19jcmVhdGVCaW5kaW5nLFxuICBfX2V4cG9ydFN0YXIsXG4gIF9fdmFsdWVzLFxuICBfX3JlYWQsXG4gIF9fc3ByZWFkLFxuICBfX3NwcmVhZEFycmF5cyxcbiAgX19zcHJlYWRBcnJheSxcbiAgX19hd2FpdCxcbiAgX19hc3luY0dlbmVyYXRvcixcbiAgX19hc3luY0RlbGVnYXRvcixcbiAgX19hc3luY1ZhbHVlcyxcbiAgX19tYWtlVGVtcGxhdGVPYmplY3QsXG4gIF9faW1wb3J0U3RhcixcbiAgX19pbXBvcnREZWZhdWx0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4sXG4gIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxuICBfX2Rpc3Bvc2VSZXNvdXJjZXMsXG4gIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uLFxufTtcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRm9jdXNPbiBhcyBSZWFjdEZvY3VzT24gfSBmcm9tICcuL1VJJztcbmltcG9ydCBTaWRlQ2FyIGZyb20gJy4vc2lkZWNhcic7XG52YXIgUmVxdWlyZVNpZGVDYXIgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCBfX2Fzc2lnbih7fSwgcHJvcHMpKTtcbn07XG5leHBvcnQgdmFyIEZvY3VzT24gPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7IHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0Rm9jdXNPbiwgX19hc3NpZ24oe30sIHByb3BzLCB7IHJlZjogcmVmLCBzaWRlQ2FyOiBSZXF1aXJlU2lkZUNhciB9KSk7IH0pO1xuIiwgImltcG9ydCB7IF9fYXNzaWduLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbCB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwvVUknO1xuaW1wb3J0IFJlYWN0Rm9jdXNMb2NrIGZyb20gJ3JlYWN0LWZvY3VzLWxvY2svVUknO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xudmFyIFBSRVZFTlRfU0NST0xMID0geyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH07XG5leHBvcnQgdmFyIEZvY3VzT24gPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcGFyZW50UmVmKSB7XG4gICAgdmFyIF9hID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpLCBsb2NrUHJvcHMgPSBfYVswXSwgc2V0TG9ja1Byb3BzID0gX2FbMV07XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGF1dG9Gb2N1cyA9IHByb3BzLmF1dG9Gb2N1cywgc2hhcmRzID0gcHJvcHMuc2hhcmRzLCBjcm9zc0ZyYW1lID0gcHJvcHMuY3Jvc3NGcmFtZSwgX2IgPSBwcm9wcy5lbmFibGVkLCBlbmFibGVkID0gX2IgPT09IHZvaWQgMCA/IHRydWUgOiBfYiwgX2MgPSBwcm9wcy5zY3JvbGxMb2NrLCBzY3JvbGxMb2NrID0gX2MgPT09IHZvaWQgMCA/IHRydWUgOiBfYywgX2QgPSBwcm9wcy5mb2N1c0xvY2ssIGZvY3VzTG9jayA9IF9kID09PSB2b2lkIDAgPyB0cnVlIDogX2QsIF9lID0gcHJvcHMucmV0dXJuRm9jdXMsIHJldHVybkZvY3VzID0gX2UgPT09IHZvaWQgMCA/IHRydWUgOiBfZSwgaW5lcnQgPSBwcm9wcy5pbmVydCwgYWxsb3dQaW5jaFpvb20gPSBwcm9wcy5hbGxvd1BpbmNoWm9vbSwgc2lkZUNhciA9IHByb3BzLnNpZGVDYXIsIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgc2hvdWxkSWdub3JlID0gcHJvcHMuc2hvdWxkSWdub3JlLCBwcmV2ZW50U2Nyb2xsT25Gb2N1cyA9IHByb3BzLnByZXZlbnRTY3JvbGxPbkZvY3VzLCBzdHlsZSA9IHByb3BzLnN0eWxlLCBhcyA9IHByb3BzLmFzLCBnYXBNb2RlID0gcHJvcHMuZ2FwTW9kZSwgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJhdXRvRm9jdXNcIiwgXCJzaGFyZHNcIiwgXCJjcm9zc0ZyYW1lXCIsIFwiZW5hYmxlZFwiLCBcInNjcm9sbExvY2tcIiwgXCJmb2N1c0xvY2tcIiwgXCJyZXR1cm5Gb2N1c1wiLCBcImluZXJ0XCIsIFwiYWxsb3dQaW5jaFpvb21cIiwgXCJzaWRlQ2FyXCIsIFwiY2xhc3NOYW1lXCIsIFwic2hvdWxkSWdub3JlXCIsIFwicHJldmVudFNjcm9sbE9uRm9jdXNcIiwgXCJzdHlsZVwiLCBcImFzXCIsIFwiZ2FwTW9kZVwiXSk7XG4gICAgdmFyIFNpZGVDYXIgPSBzaWRlQ2FyO1xuICAgIHZhciBvbkFjdGl2YXRpb24gPSBsb2NrUHJvcHMub25BY3RpdmF0aW9uLCBvbkRlYWN0aXZhdGlvbiA9IGxvY2tQcm9wcy5vbkRlYWN0aXZhdGlvbiwgcmVzdFByb3BzID0gX19yZXN0KGxvY2tQcm9wcywgW1wib25BY3RpdmF0aW9uXCIsIFwib25EZWFjdGl2YXRpb25cIl0pO1xuICAgIHZhciBhcHBsaWVkTG9ja1Byb3BzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3RQcm9wcyksIHsgYXM6IGFzLFxuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIHNpZGVDYXI6IHNpZGVDYXIsXG4gICAgICAgIHNoYXJkczogc2hhcmRzLFxuICAgICAgICBhbGxvd1BpbmNoWm9vbTogYWxsb3dQaW5jaFpvb20sXG4gICAgICAgIGdhcE1vZGU6IGdhcE1vZGUsXG4gICAgICAgIGluZXJ0OiBpbmVydCwgZW5hYmxlZDogZW5hYmxlZCAmJiBzY3JvbGxMb2NrIH0pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdEZvY3VzTG9jaywgeyByZWY6IHBhcmVudFJlZiwgc2lkZUNhcjogc2lkZUNhciwgZGlzYWJsZWQ6ICEobG9ja1Byb3BzICYmIGVuYWJsZWQgJiYgZm9jdXNMb2NrKSwgcmV0dXJuRm9jdXM6IHJldHVybkZvY3VzLCBhdXRvRm9jdXM6IGF1dG9Gb2N1cywgc2hhcmRzOiBzaGFyZHMsIGNyb3NzRnJhbWU6IGNyb3NzRnJhbWUsIG9uQWN0aXZhdGlvbjogb25BY3RpdmF0aW9uLCBvbkRlYWN0aXZhdGlvbjogb25EZWFjdGl2YXRpb24sIGNsYXNzTmFtZTogY2xhc3NOYW1lLCB3aGl0ZUxpc3Q6IHNob3VsZElnbm9yZSwgbG9ja1Byb3BzOiBhcHBsaWVkTG9ja1Byb3BzLCBmb2N1c09wdGlvbnM6IHByZXZlbnRTY3JvbGxPbkZvY3VzID8gUFJFVkVOVF9TQ1JPTEwgOiB1bmRlZmluZWQsIGFzOiBSZW1vdmVTY3JvbGwgfSwgY2hpbGRyZW4pLFxuICAgICAgICBlbmFibGVkICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGVDYXIsIF9fYXNzaWduKHt9LCByZXN0LCB7IHNpZGVDYXI6IGVmZmVjdENhciwgc2V0TG9ja1Byb3BzOiBzZXRMb2NrUHJvcHMsIHNoYXJkczogc2hhcmRzIH0pKSkpKTtcbn0pO1xuZXhwb3J0ICogZnJvbSAnLi9yZUV4cG9ydHMnO1xuIiwgImltcG9ydCB7IF9fYXNzaWduLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZ1bGxXaWR0aENsYXNzTmFtZSwgemVyb1JpZ2h0Q2xhc3NOYW1lIH0gZnJvbSAncmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvY29uc3RhbnRzJztcbmltcG9ydCB7IHVzZU1lcmdlUmVmcyB9IGZyb20gJ3VzZS1jYWxsYmFjay1yZWYnO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xudmFyIG5vdGhpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuO1xufTtcbi8qKlxuICogUmVtb3ZlcyBzY3JvbGxiYXIgZnJvbSB0aGUgcGFnZSBhbmQgY29udGFpbiB0aGUgc2Nyb2xsIHdpdGhpbiB0aGUgTG9ja1xuICovXG52YXIgUmVtb3ZlU2Nyb2xsID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHBhcmVudFJlZikge1xuICAgIHZhciByZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgdmFyIF9hID0gUmVhY3QudXNlU3RhdGUoe1xuICAgICAgICBvblNjcm9sbENhcHR1cmU6IG5vdGhpbmcsXG4gICAgICAgIG9uV2hlZWxDYXB0dXJlOiBub3RoaW5nLFxuICAgICAgICBvblRvdWNoTW92ZUNhcHR1cmU6IG5vdGhpbmcsXG4gICAgfSksIGNhbGxiYWNrcyA9IF9hWzBdLCBzZXRDYWxsYmFja3MgPSBfYVsxXTtcbiAgICB2YXIgZm9yd2FyZFByb3BzID0gcHJvcHMuZm9yd2FyZFByb3BzLCBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHJlbW92ZVNjcm9sbEJhciA9IHByb3BzLnJlbW92ZVNjcm9sbEJhciwgZW5hYmxlZCA9IHByb3BzLmVuYWJsZWQsIHNoYXJkcyA9IHByb3BzLnNoYXJkcywgc2lkZUNhciA9IHByb3BzLnNpZGVDYXIsIG5vSXNvbGF0aW9uID0gcHJvcHMubm9Jc29sYXRpb24sIGluZXJ0ID0gcHJvcHMuaW5lcnQsIGFsbG93UGluY2hab29tID0gcHJvcHMuYWxsb3dQaW5jaFpvb20sIF9iID0gcHJvcHMuYXMsIENvbnRhaW5lciA9IF9iID09PSB2b2lkIDAgPyAnZGl2JyA6IF9iLCBnYXBNb2RlID0gcHJvcHMuZ2FwTW9kZSwgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiZm9yd2FyZFByb3BzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJyZW1vdmVTY3JvbGxCYXJcIiwgXCJlbmFibGVkXCIsIFwic2hhcmRzXCIsIFwic2lkZUNhclwiLCBcIm5vSXNvbGF0aW9uXCIsIFwiaW5lcnRcIiwgXCJhbGxvd1BpbmNoWm9vbVwiLCBcImFzXCIsIFwiZ2FwTW9kZVwiXSk7XG4gICAgdmFyIFNpZGVDYXIgPSBzaWRlQ2FyO1xuICAgIHZhciBjb250YWluZXJSZWYgPSB1c2VNZXJnZVJlZnMoW3JlZiwgcGFyZW50UmVmXSk7XG4gICAgdmFyIGNvbnRhaW5lclByb3BzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3QpLCBjYWxsYmFja3MpO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgZW5hYmxlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCB7IHNpZGVDYXI6IGVmZmVjdENhciwgcmVtb3ZlU2Nyb2xsQmFyOiByZW1vdmVTY3JvbGxCYXIsIHNoYXJkczogc2hhcmRzLCBub0lzb2xhdGlvbjogbm9Jc29sYXRpb24sIGluZXJ0OiBpbmVydCwgc2V0Q2FsbGJhY2tzOiBzZXRDYWxsYmFja3MsIGFsbG93UGluY2hab29tOiAhIWFsbG93UGluY2hab29tLCBsb2NrUmVmOiByZWYsIGdhcE1vZGU6IGdhcE1vZGUgfSkpLFxuICAgICAgICBmb3J3YXJkUHJvcHMgPyAoUmVhY3QuY2xvbmVFbGVtZW50KFJlYWN0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY29udGFpbmVyUHJvcHMpLCB7IHJlZjogY29udGFpbmVyUmVmIH0pKSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChDb250YWluZXIsIF9fYXNzaWduKHt9LCBjb250YWluZXJQcm9wcywgeyBjbGFzc05hbWU6IGNsYXNzTmFtZSwgcmVmOiBjb250YWluZXJSZWYgfSksIGNoaWxkcmVuKSkpKTtcbn0pO1xuUmVtb3ZlU2Nyb2xsLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIHJlbW92ZVNjcm9sbEJhcjogdHJ1ZSxcbiAgICBpbmVydDogZmFsc2UsXG59O1xuUmVtb3ZlU2Nyb2xsLmNsYXNzTmFtZXMgPSB7XG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGhDbGFzc05hbWUsXG4gICAgemVyb1JpZ2h0OiB6ZXJvUmlnaHRDbGFzc05hbWUsXG59O1xuZXhwb3J0IHsgUmVtb3ZlU2Nyb2xsIH07XG4iLCAiZXhwb3J0IHZhciB6ZXJvUmlnaHRDbGFzc05hbWUgPSAncmlnaHQtc2Nyb2xsLWJhci1wb3NpdGlvbic7XG5leHBvcnQgdmFyIGZ1bGxXaWR0aENsYXNzTmFtZSA9ICd3aWR0aC1iZWZvcmUtc2Nyb2xsLWJhcic7XG5leHBvcnQgdmFyIG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSA9ICd3aXRoLXNjcm9sbC1iYXJzLWhpZGRlbic7XG4vKipcbiAqIE5hbWUgb2YgYSBDU1MgdmFyaWFibGUgY29udGFpbmluZyB0aGUgYW1vdW50IG9mIFwiaGlkZGVuXCIgc2Nyb2xsYmFyXG4gKiAhIG1pZ2h0IGJlIHVuZGVmaW5lZCAhIHVzZSB3aWxsIGZhbGxiYWNrIVxuICovXG5leHBvcnQgdmFyIHJlbW92ZWRCYXJTaXplVmFyaWFibGUgPSAnLS1yZW1vdmVkLWJvZHktc2Nyb2xsLWJhci1zaXplJztcbiIsICIvKipcbiAqIEFzc2lnbnMgYSB2YWx1ZSBmb3IgYSBnaXZlbiByZWYsIG5vIG1hdHRlciBvZiB0aGUgcmVmIGZvcm1hdFxuICogQHBhcmFtIHtSZWZPYmplY3R9IHJlZiAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gb3IgcmVmIG9iamVjdFxuICogQHBhcmFtIHZhbHVlIC0gYSBuZXcgdmFsdWVcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvdXNlLWNhbGxiYWNrLXJlZiNhc3NpZ25yZWZcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZWZPYmplY3QgPSB1c2VSZWYoKTtcbiAqIGNvbnN0IHJlZkZuID0gKHJlZikgPT4gey4uLi59XG4gKlxuICogYXNzaWduUmVmKHJlZk9iamVjdCwgXCJyZWZWYWx1ZVwiKTtcbiAqIGFzc2lnblJlZihyZWZGbiwgXCJyZWZWYWx1ZVwiKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnblJlZihyZWYsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVmKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVmKSB7XG4gICAgICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZWY7XG59XG4iLCAiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIGNyZWF0ZXMgYSBNdXRhYmxlUmVmIHdpdGggcmVmIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIGluaXRpYWwgcmVmIHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIGEgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdmFsdWUgY2hhbmdlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZWYgPSB1c2VDYWxsYmFja1JlZigwLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiBjb25zb2xlLmxvZyhvbGRWYWx1ZSwgJy0+JywgbmV3VmFsdWUpO1xuICogcmVmLmN1cnJlbnQgPSAxO1xuICogLy8gcHJpbnRzIDAgLT4gMVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2hvb2tzLXJlZmVyZW5jZS5odG1sI3VzZXJlZlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L3VzZS1jYWxsYmFjay1yZWYjdXNlY2FsbGJhY2tyZWYtLS10by1yZXBsYWNlLXJlYWN0dXNlcmVmXG4gKiBAcmV0dXJucyB7TXV0YWJsZVJlZk9iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNhbGxiYWNrUmVmKGluaXRpYWxWYWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgcmVmID0gdXNlU3RhdGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgdmFsdWU6IGluaXRpYWxWYWx1ZSxcbiAgICAgICAgLy8gbGFzdCBjYWxsYmFja1xuICAgICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgICAgIC8vIFwibWVtb2l6ZWRcIiBwdWJsaWMgaW50ZXJmYWNlXG4gICAgICAgIGZhY2FkZToge1xuICAgICAgICAgICAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZi52YWx1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgY3VycmVudCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0ID0gcmVmLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0ICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZWYudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVmLmNhbGxiYWNrKHZhbHVlLCBsYXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0pOyB9KVswXTtcbiAgICAvLyB1cGRhdGUgY2FsbGJhY2tcbiAgICByZWYuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICByZXR1cm4gcmVmLmZhY2FkZTtcbn1cbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBhc3NpZ25SZWYgfSBmcm9tICcuL2Fzc2lnblJlZic7XG5pbXBvcnQgeyB1c2VDYWxsYmFja1JlZiB9IGZyb20gJy4vdXNlUmVmJztcbnZhciB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBSZWFjdC51c2VMYXlvdXRFZmZlY3QgOiBSZWFjdC51c2VFZmZlY3Q7XG52YXIgY3VycmVudFZhbHVlcyA9IG5ldyBXZWFrTWFwKCk7XG4vKipcbiAqIE1lcmdlcyB0d28gb3IgbW9yZSByZWZzIHRvZ2V0aGVyIHByb3ZpZGluZyBhIHNpbmdsZSBpbnRlcmZhY2UgdG8gc2V0IHRoZWlyIHZhbHVlXG4gKiBAcGFyYW0ge1JlZk9iamVjdHxSZWZ9IHJlZnNcbiAqIEByZXR1cm5zIHtNdXRhYmxlUmVmT2JqZWN0fSAtIGEgbmV3IHJlZiwgd2hpY2ggdHJhbnNsYXRlcyBhbGwgY2hhbmdlcyB0byB7cmVmc31cbiAqXG4gKiBAc2VlIHtAbGluayBtZXJnZVJlZnN9IGEgdmVyc2lvbiB3aXRob3V0IGJ1aXQtaW4gbWVtb2l6YXRpb25cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI3VzZW1lcmdlcmVmc1xuICogQGV4YW1wbGVcbiAqIGNvbnN0IENvbXBvbmVudCA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcbiAqICAgY29uc3Qgb3duUmVmID0gdXNlUmVmKCk7XG4gKiAgIGNvbnN0IGRvbVJlZiA9IHVzZU1lcmdlUmVmcyhbcmVmLCBvd25SZWZdKTsgLy8gXHVEODNEXHVEQzQ4IG1lcmdlIHRvZ2V0aGVyXG4gKiAgIHJldHVybiA8ZGl2IHJlZj17ZG9tUmVmfT4uLi48L2Rpdj5cbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lcmdlUmVmcyhyZWZzLCBkZWZhdWx0VmFsdWUpIHtcbiAgICB2YXIgY2FsbGJhY2tSZWYgPSB1c2VDYWxsYmFja1JlZihkZWZhdWx0VmFsdWUgfHwgbnVsbCwgZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIHJldHVybiByZWZzLmZvckVhY2goZnVuY3Rpb24gKHJlZikgeyByZXR1cm4gYXNzaWduUmVmKHJlZiwgbmV3VmFsdWUpOyB9KTtcbiAgICB9KTtcbiAgICAvLyBoYW5kbGUgcmVmcyBjaGFuZ2VzIC0gYWRkZWQgb3IgcmVtb3ZlZFxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2xkVmFsdWUgPSBjdXJyZW50VmFsdWVzLmdldChjYWxsYmFja1JlZik7XG4gICAgICAgIGlmIChvbGRWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIHByZXZSZWZzXzEgPSBuZXcgU2V0KG9sZFZhbHVlKTtcbiAgICAgICAgICAgIHZhciBuZXh0UmVmc18xID0gbmV3IFNldChyZWZzKTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50XzEgPSBjYWxsYmFja1JlZi5jdXJyZW50O1xuICAgICAgICAgICAgcHJldlJlZnNfMS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW5leHRSZWZzXzEuaGFzKHJlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduUmVmKHJlZiwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBuZXh0UmVmc18xLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICAgIGlmICghcHJldlJlZnNfMS5oYXMocmVmKSkge1xuICAgICAgICAgICAgICAgICAgICBhc3NpZ25SZWYocmVmLCBjdXJyZW50XzEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRWYWx1ZXMuc2V0KGNhbGxiYWNrUmVmLCByZWZzKTtcbiAgICB9LCBbcmVmc10pO1xuICAgIHJldHVybiBjYWxsYmFja1JlZjtcbn1cbiIsICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgfVxuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxuICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xuICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XG4gIHZhciBfLCBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XG4gICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcbiAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XG4gIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xuICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgICAgIHJba10gPSBhW2pdO1xuICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XG4gIHZhciBpLCBwO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xuICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxuICByZXR1cm4gY29va2VkO1xufTtcblxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufTtcblxudmFyIG93bktleXMgPSBmdW5jdGlvbihvKSB7XG4gIG93bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgIHZhciBhciA9IFtdO1xuICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgcmV0dXJuIGFyO1xuICB9O1xuICByZXR1cm4gb3duS2V5cyhvKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xuICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcbiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudiwgdmFsdWUsIGFzeW5jKSB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XG4gICAgdmFyIGRpc3Bvc2UsIGlubmVyO1xuICAgIGlmIChhc3luYykge1xuICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG4gICAgfVxuICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcbiAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgICAgaWYgKGFzeW5jKSBpbm5lciA9IGRpc3Bvc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcbiAgICBpZiAoaW5uZXIpIGRpc3Bvc2UgPSBmdW5jdGlvbigpIHsgdHJ5IHsgaW5uZXIuY2FsbCh0aGlzKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7IH0gfTtcbiAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xuICB9XG4gIGVsc2UgaWYgKGFzeW5jKSB7XG4gICAgZW52LnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGlzcG9zZVJlc291cmNlcyhlbnYpIHtcbiAgZnVuY3Rpb24gZmFpbChlKSB7XG4gICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xuICAgIGVudi5oYXNFcnJvciA9IHRydWU7XG4gIH1cbiAgdmFyIHIsIHMgPSAwO1xuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHdoaWxlIChyID0gZW52LnN0YWNrLnBvcCgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXIuYXN5bmMgJiYgcyA9PT0gMSkgcmV0dXJuIHMgPSAwLCBlbnYuc3RhY2sucHVzaChyKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0KTtcbiAgICAgICAgaWYgKHIuZGlzcG9zZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSByLmRpc3Bvc2UuY2FsbChyLnZhbHVlKTtcbiAgICAgICAgICBpZiAoci5hc3luYykgcmV0dXJuIHMgfD0gMiwgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgcyB8PSAxO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMgPT09IDEpIHJldHVybiBlbnYuaGFzRXJyb3IgPyBQcm9taXNlLnJlamVjdChlbnYuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xuICB9XG4gIHJldHVybiBuZXh0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbihwYXRoLCBwcmVzZXJ2ZUpzeCkge1xuICBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIgJiYgL15cXC5cXC4/XFwvLy50ZXN0KHBhdGgpKSB7XG4gICAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC4odHN4KSR8KCg/OlxcLmQpPykoKD86XFwuW14uL10rPyk/KVxcLihbY21dPyl0cyQvaSwgZnVuY3Rpb24gKG0sIHRzeCwgZCwgZXh0LCBjbSkge1xuICAgICAgICAgIHJldHVybiB0c3ggPyBwcmVzZXJ2ZUpzeCA/IFwiLmpzeFwiIDogXCIuanNcIiA6IGQgJiYgKCFleHQgfHwgIWNtKSA/IG0gOiAoZCArIGV4dCArIFwiLlwiICsgY20udG9Mb3dlckNhc2UoKSArIFwianNcIik7XG4gICAgICB9KTtcbiAgfVxuICByZXR1cm4gcGF0aDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fZXNEZWNvcmF0ZSxcbiAgX19ydW5Jbml0aWFsaXplcnMsXG4gIF9fcHJvcEtleSxcbiAgX19zZXRGdW5jdGlvbk5hbWUsXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxuICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbixcbn07XG4iLCAiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tIFwidHNsaWJcIjtcbmZ1bmN0aW9uIEl0b0koYSkge1xuICAgIHJldHVybiBhO1xufVxuZnVuY3Rpb24gaW5uZXJDcmVhdGVNZWRpdW0oZGVmYXVsdHMsIG1pZGRsZXdhcmUpIHtcbiAgICBpZiAobWlkZGxld2FyZSA9PT0gdm9pZCAwKSB7IG1pZGRsZXdhcmUgPSBJdG9JOyB9XG4gICAgdmFyIGJ1ZmZlciA9IFtdO1xuICAgIHZhciBhc3NpZ25lZCA9IGZhbHNlO1xuICAgIHZhciBtZWRpdW0gPSB7XG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChhc3NpZ25lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWNhcjogY291bGQgbm90IGByZWFkYCBmcm9tIGFuIGBhc3NpZ25lZGAgbWVkaXVtLiBgcmVhZGAgY291bGQgYmUgdXNlZCBvbmx5IHdpdGggYHVzZU1lZGl1bWAuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJbYnVmZmVyLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgICAgICB9LFxuICAgICAgICB1c2VNZWRpdW06IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IG1pZGRsZXdhcmUoZGF0YSwgYXNzaWduZWQpO1xuICAgICAgICAgICAgYnVmZmVyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggIT09IGl0ZW07IH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgYXNzaWduU3luY01lZGl1bTogZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBhc3NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBjYnMgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gW107XG4gICAgICAgICAgICAgICAgY2JzLmZvckVhY2goY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyID0ge1xuICAgICAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uICh4KSB7IHJldHVybiBjYih4KTsgfSxcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlcjsgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGFzc2lnbk1lZGl1bTogZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBhc3NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgcGVuZGluZ1F1ZXVlID0gW107XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBjYnMgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gW107XG4gICAgICAgICAgICAgICAgY2JzLmZvckVhY2goY2IpO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IGJ1ZmZlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBleGVjdXRlUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIGN5Y2xlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihleGVjdXRlUXVldWUpOyB9O1xuICAgICAgICAgICAgY3ljbGUoKTtcbiAgICAgICAgICAgIGJ1ZmZlciA9IHtcbiAgICAgICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUucHVzaCh4KTtcbiAgICAgICAgICAgICAgICAgICAgY3ljbGUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24gKGZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUgPSBwZW5kaW5nUXVldWUuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gbWVkaXVtO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSkge1xuICAgIGlmIChtaWRkbGV3YXJlID09PSB2b2lkIDApIHsgbWlkZGxld2FyZSA9IEl0b0k7IH1cbiAgICByZXR1cm4gaW5uZXJDcmVhdGVNZWRpdW0oZGVmYXVsdHMsIG1pZGRsZXdhcmUpO1xufVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaWRlY2FyTWVkaXVtKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBtZWRpdW0gPSBpbm5lckNyZWF0ZU1lZGl1bShudWxsKTtcbiAgICBtZWRpdW0ub3B0aW9ucyA9IF9fYXNzaWduKHsgYXN5bmM6IHRydWUsIHNzcjogZmFsc2UgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG1lZGl1bTtcbn1cbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgU2lkZUNhciA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzaWRlQ2FyID0gX2Euc2lkZUNhciwgcmVzdCA9IF9fcmVzdChfYSwgW1wic2lkZUNhclwiXSk7XG4gICAgaWYgKCFzaWRlQ2FyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWNhcjogcGxlYXNlIHByb3ZpZGUgYHNpZGVDYXJgIHByb3BlcnR5IHRvIGltcG9ydCB0aGUgcmlnaHQgY2FyJyk7XG4gICAgfVxuICAgIHZhciBUYXJnZXQgPSBzaWRlQ2FyLnJlYWQoKTtcbiAgICBpZiAoIVRhcmdldCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZGVjYXIgbWVkaXVtIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYXJnZXQsIF9fYXNzaWduKHt9LCByZXN0KSk7XG59O1xuU2lkZUNhci5pc1NpZGVDYXJFeHBvcnQgPSB0cnVlO1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydFNpZGVjYXIobWVkaXVtLCBleHBvcnRlZCkge1xuICAgIG1lZGl1bS51c2VNZWRpdW0oZXhwb3J0ZWQpO1xuICAgIHJldHVybiBTaWRlQ2FyO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZGVjYXJNZWRpdW0gfSBmcm9tICd1c2Utc2lkZWNhcic7XG5leHBvcnQgdmFyIGVmZmVjdENhciA9IGNyZWF0ZVNpZGVjYXJNZWRpdW0oKTtcbiIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IG5vZGUsIGJvb2wsIHN0cmluZywgYW55LCBhcnJheU9mLCBvbmVPZlR5cGUsIG9iamVjdCwgZnVuYyB9IGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgRk9DVVNfRElTQUJMRUQsIEZPQ1VTX0dST1VQIH0gZnJvbSAnZm9jdXMtbG9jay9jb25zdGFudHMnO1xuaW1wb3J0IHsgdXNlTWVyZ2VSZWZzIH0gZnJvbSAndXNlLWNhbGxiYWNrLXJlZic7XG5pbXBvcnQgeyBoaWRkZW5HdWFyZCB9IGZyb20gJy4vRm9jdXNHdWFyZCc7XG5pbXBvcnQgeyBtZWRpdW1Gb2N1cywgbWVkaXVtQmx1ciwgbWVkaXVtU2lkZWNhciB9IGZyb20gJy4vbWVkaXVtJztcbmltcG9ydCB7IGZvY3VzU2NvcGUgfSBmcm9tICcuL3Njb3BlJztcbnZhciBlbXB0eUFycmF5ID0gW107XG52YXIgRm9jdXNMb2NrID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gRm9jdXNMb2NrVUkocHJvcHMsIHBhcmVudFJlZikge1xuICB2YXIgX2V4dGVuZHMyO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoKSxcbiAgICByZWFsT2JzZXJ2ZWQgPSBfdXNlU3RhdGVbMF0sXG4gICAgc2V0T2JzZXJ2ZWQgPSBfdXNlU3RhdGVbMV07XG4gIHZhciBvYnNlcnZlZCA9IHVzZVJlZigpO1xuICB2YXIgaXNBY3RpdmUgPSB1c2VSZWYoZmFsc2UpO1xuICB2YXIgb3JpZ2luYWxGb2N1c2VkRWxlbWVudCA9IHVzZVJlZihudWxsKTtcbiAgdmFyIF91c2VTdGF0ZTIgPSB1c2VTdGF0ZSh7fSksXG4gICAgdXBkYXRlID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgX3Byb3BzJGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQsXG4gICAgZGlzYWJsZWQgPSBfcHJvcHMkZGlzYWJsZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJGRpc2FibGVkLFxuICAgIF9wcm9wcyRub0ZvY3VzR3VhcmRzID0gcHJvcHMubm9Gb2N1c0d1YXJkcyxcbiAgICBub0ZvY3VzR3VhcmRzID0gX3Byb3BzJG5vRm9jdXNHdWFyZHMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJG5vRm9jdXNHdWFyZHMsXG4gICAgX3Byb3BzJHBlcnNpc3RlbnRGb2N1ID0gcHJvcHMucGVyc2lzdGVudEZvY3VzLFxuICAgIHBlcnNpc3RlbnRGb2N1cyA9IF9wcm9wcyRwZXJzaXN0ZW50Rm9jdSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcHJvcHMkcGVyc2lzdGVudEZvY3UsXG4gICAgX3Byb3BzJGNyb3NzRnJhbWUgPSBwcm9wcy5jcm9zc0ZyYW1lLFxuICAgIGNyb3NzRnJhbWUgPSBfcHJvcHMkY3Jvc3NGcmFtZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyRjcm9zc0ZyYW1lLFxuICAgIF9wcm9wcyRhdXRvRm9jdXMgPSBwcm9wcy5hdXRvRm9jdXMsXG4gICAgYXV0b0ZvY3VzID0gX3Byb3BzJGF1dG9Gb2N1cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyRhdXRvRm9jdXMsXG4gICAgYWxsb3dUZXh0U2VsZWN0aW9uID0gcHJvcHMuYWxsb3dUZXh0U2VsZWN0aW9uLFxuICAgIGdyb3VwID0gcHJvcHMuZ3JvdXAsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIHdoaXRlTGlzdCA9IHByb3BzLndoaXRlTGlzdCxcbiAgICBoYXNQb3NpdGl2ZUluZGljZXMgPSBwcm9wcy5oYXNQb3NpdGl2ZUluZGljZXMsXG4gICAgX3Byb3BzJHNoYXJkcyA9IHByb3BzLnNoYXJkcyxcbiAgICBzaGFyZHMgPSBfcHJvcHMkc2hhcmRzID09PSB2b2lkIDAgPyBlbXB0eUFycmF5IDogX3Byb3BzJHNoYXJkcyxcbiAgICBfcHJvcHMkYXMgPSBwcm9wcy5hcyxcbiAgICBDb250YWluZXIgPSBfcHJvcHMkYXMgPT09IHZvaWQgMCA/ICdkaXYnIDogX3Byb3BzJGFzLFxuICAgIF9wcm9wcyRsb2NrUHJvcHMgPSBwcm9wcy5sb2NrUHJvcHMsXG4gICAgY29udGFpbmVyUHJvcHMgPSBfcHJvcHMkbG9ja1Byb3BzID09PSB2b2lkIDAgPyB7fSA6IF9wcm9wcyRsb2NrUHJvcHMsXG4gICAgU2lkZUNhciA9IHByb3BzLnNpZGVDYXIsXG4gICAgX3Byb3BzJHJldHVybkZvY3VzID0gcHJvcHMucmV0dXJuRm9jdXMsXG4gICAgc2hvdWxkUmV0dXJuRm9jdXMgPSBfcHJvcHMkcmV0dXJuRm9jdXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJHJldHVybkZvY3VzLFxuICAgIGZvY3VzT3B0aW9ucyA9IHByb3BzLmZvY3VzT3B0aW9ucyxcbiAgICBvbkFjdGl2YXRpb25DYWxsYmFjayA9IHByb3BzLm9uQWN0aXZhdGlvbixcbiAgICBvbkRlYWN0aXZhdGlvbkNhbGxiYWNrID0gcHJvcHMub25EZWFjdGl2YXRpb247XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUoe30pLFxuICAgIGlkID0gX3VzZVN0YXRlM1swXTtcbiAgdmFyIG9uQWN0aXZhdGlvbiA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIGNhcHR1cmVGb2N1c1Jlc3RvcmUgPSBfcmVmLmNhcHR1cmVGb2N1c1Jlc3RvcmU7XG4gICAgaWYgKCFvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQpIHtcbiAgICAgIHZhciBfZG9jdW1lbnQ7XG4gICAgICB2YXIgYWN0aXZlRWxlbWVudCA9IChfZG9jdW1lbnQgPSBkb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50ID0gYWN0aXZlRWxlbWVudDtcbiAgICAgIGlmIChhY3RpdmVFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgIG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudCA9IGNhcHR1cmVGb2N1c1Jlc3RvcmUoYWN0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvYnNlcnZlZC5jdXJyZW50ICYmIG9uQWN0aXZhdGlvbkNhbGxiYWNrKSB7XG4gICAgICBvbkFjdGl2YXRpb25DYWxsYmFjayhvYnNlcnZlZC5jdXJyZW50KTtcbiAgICB9XG4gICAgaXNBY3RpdmUuY3VycmVudCA9IHRydWU7XG4gICAgdXBkYXRlKCk7XG4gIH0sIFtvbkFjdGl2YXRpb25DYWxsYmFja10pO1xuICB2YXIgb25EZWFjdGl2YXRpb24gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgaXNBY3RpdmUuY3VycmVudCA9IGZhbHNlO1xuICAgIGlmIChvbkRlYWN0aXZhdGlvbkNhbGxiYWNrKSB7XG4gICAgICBvbkRlYWN0aXZhdGlvbkNhbGxiYWNrKG9ic2VydmVkLmN1cnJlbnQpO1xuICAgIH1cbiAgICB1cGRhdGUoKTtcbiAgfSwgW29uRGVhY3RpdmF0aW9uQ2FsbGJhY2tdKTtcbiAgdmFyIHJldHVybkZvY3VzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGFsbG93RGVmZXIpIHtcbiAgICB2YXIgZm9jdXNSZXN0b3JlID0gb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50O1xuICAgIGlmIChmb2N1c1Jlc3RvcmUpIHtcbiAgICAgIHZhciByZXR1cm5Gb2N1c1RvID0gKHR5cGVvZiBmb2N1c1Jlc3RvcmUgPT09ICdmdW5jdGlvbicgPyBmb2N1c1Jlc3RvcmUoKSA6IGZvY3VzUmVzdG9yZSkgfHwgZG9jdW1lbnQuYm9keTtcbiAgICAgIHZhciBob3dUb1JldHVybkZvY3VzID0gdHlwZW9mIHNob3VsZFJldHVybkZvY3VzID09PSAnZnVuY3Rpb24nID8gc2hvdWxkUmV0dXJuRm9jdXMocmV0dXJuRm9jdXNUbykgOiBzaG91bGRSZXR1cm5Gb2N1cztcbiAgICAgIGlmIChob3dUb1JldHVybkZvY3VzKSB7XG4gICAgICAgIHZhciByZXR1cm5Gb2N1c09wdGlvbnMgPSB0eXBlb2YgaG93VG9SZXR1cm5Gb2N1cyA9PT0gJ29iamVjdCcgPyBob3dUb1JldHVybkZvY3VzIDogdW5kZWZpbmVkO1xuICAgICAgICBvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBpZiAoYWxsb3dEZWZlcikge1xuICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybkZvY3VzVG8uZm9jdXMocmV0dXJuRm9jdXNPcHRpb25zKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm5Gb2N1c1RvLmZvY3VzKHJldHVybkZvY3VzT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzaG91bGRSZXR1cm5Gb2N1c10pO1xuICB2YXIgb25Gb2N1cyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChpc0FjdGl2ZS5jdXJyZW50KSB7XG4gICAgICBtZWRpdW1Gb2N1cy51c2VNZWRpdW0oZXZlbnQpO1xuICAgIH1cbiAgfSwgW10pO1xuICB2YXIgb25CbHVyID0gbWVkaXVtQmx1ci51c2VNZWRpdW07XG4gIHZhciBzZXRPYnNlcnZlTm9kZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdPYnNlcnZlZCkge1xuICAgIGlmIChvYnNlcnZlZC5jdXJyZW50ICE9PSBuZXdPYnNlcnZlZCkge1xuICAgICAgb2JzZXJ2ZWQuY3VycmVudCA9IG5ld09ic2VydmVkO1xuICAgICAgc2V0T2JzZXJ2ZWQobmV3T2JzZXJ2ZWQpO1xuICAgIH1cbiAgfSwgW10pO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2YgYWxsb3dUZXh0U2VsZWN0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS53YXJuKCdSZWFjdC1Gb2N1cy1Mb2NrOiBhbGxvd1RleHRTZWxlY3Rpb24gaXMgZGVwcmVjYXRlZCBhbmQgZW5hYmxlZCBieSBkZWZhdWx0Jyk7XG4gICAgfVxuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIW9ic2VydmVkLmN1cnJlbnQgJiYgdHlwZW9mIENvbnRhaW5lciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRm9jdXNMb2NrOiBjb3VsZCBub3Qgb2J0YWluIHJlZiB0byBpbnRlcm5hbCBub2RlJyk7XG4gICAgICB9XG4gICAgfSwgW10pO1xuICB9XG4gIHZhciBsb2NrUHJvcHMgPSBfZXh0ZW5kcygoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltGT0NVU19ESVNBQkxFRF0gPSBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBfZXh0ZW5kczJbRk9DVVNfR1JPVVBdID0gZ3JvdXAsIF9leHRlbmRzMiksIGNvbnRhaW5lclByb3BzKTtcbiAgdmFyIGhhc0xlYWRpbmdHdWFyZHMgPSBub0ZvY3VzR3VhcmRzICE9PSB0cnVlO1xuICB2YXIgaGFzVGFpbGluZ0d1YXJkcyA9IGhhc0xlYWRpbmdHdWFyZHMgJiYgbm9Gb2N1c0d1YXJkcyAhPT0gJ3RhaWwnO1xuICB2YXIgbWVyZ2VkUmVmID0gdXNlTWVyZ2VSZWZzKFtwYXJlbnRSZWYsIHNldE9ic2VydmVOb2RlXSk7XG4gIHZhciBmb2N1c1Njb3BlVmFsdWUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2JzZXJ2ZWQ6IG9ic2VydmVkLFxuICAgICAgc2hhcmRzOiBzaGFyZHMsXG4gICAgICBlbmFibGVkOiAhZGlzYWJsZWQsXG4gICAgICBhY3RpdmU6IGlzQWN0aXZlLmN1cnJlbnRcbiAgICB9O1xuICB9LCBbZGlzYWJsZWQsIGlzQWN0aXZlLmN1cnJlbnQsIHNoYXJkcywgcmVhbE9ic2VydmVkXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgaGFzTGVhZGluZ0d1YXJkcyAmJiBbXG4gIC8qI19fUFVSRV9fKi9cbiAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLWZpcnN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiAwLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSwgaGFzUG9zaXRpdmVJbmRpY2VzID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJndWFyZC1uZWFyZXN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiAxLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSA6IG51bGxdLCAhZGlzYWJsZWQgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwge1xuICAgIGlkOiBpZCxcbiAgICBzaWRlQ2FyOiBtZWRpdW1TaWRlY2FyLFxuICAgIG9ic2VydmVkOiByZWFsT2JzZXJ2ZWQsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIHBlcnNpc3RlbnRGb2N1czogcGVyc2lzdGVudEZvY3VzLFxuICAgIGNyb3NzRnJhbWU6IGNyb3NzRnJhbWUsXG4gICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgd2hpdGVMaXN0OiB3aGl0ZUxpc3QsXG4gICAgc2hhcmRzOiBzaGFyZHMsXG4gICAgb25BY3RpdmF0aW9uOiBvbkFjdGl2YXRpb24sXG4gICAgb25EZWFjdGl2YXRpb246IG9uRGVhY3RpdmF0aW9uLFxuICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyxcbiAgICBmb2N1c09wdGlvbnM6IGZvY3VzT3B0aW9ucyxcbiAgICBub0ZvY3VzR3VhcmRzOiBub0ZvY3VzR3VhcmRzXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250YWluZXIsIF9leHRlbmRzKHtcbiAgICByZWY6IG1lcmdlZFJlZlxuICB9LCBsb2NrUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBvbkJsdXI6IG9uQmx1cixcbiAgICBvbkZvY3VzOiBvbkZvY3VzXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChmb2N1c1Njb3BlLlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGZvY3VzU2NvcGVWYWx1ZVxuICB9LCBjaGlsZHJlbikpLCBoYXNUYWlsaW5nR3VhcmRzICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IDAsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pKTtcbn0pO1xuRm9jdXNMb2NrLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgY2hpbGRyZW46IG5vZGUsXG4gIGRpc2FibGVkOiBib29sLFxuICByZXR1cm5Gb2N1czogb25lT2ZUeXBlKFtib29sLCBvYmplY3QsIGZ1bmNdKSxcbiAgZm9jdXNPcHRpb25zOiBvYmplY3QsXG4gIG5vRm9jdXNHdWFyZHM6IGJvb2wsXG4gIGhhc1Bvc2l0aXZlSW5kaWNlczogYm9vbCxcbiAgYWxsb3dUZXh0U2VsZWN0aW9uOiBib29sLFxuICBhdXRvRm9jdXM6IGJvb2wsXG4gIHBlcnNpc3RlbnRGb2N1czogYm9vbCxcbiAgY3Jvc3NGcmFtZTogYm9vbCxcbiAgZ3JvdXA6IHN0cmluZyxcbiAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gIHdoaXRlTGlzdDogZnVuYyxcbiAgc2hhcmRzOiBhcnJheU9mKGFueSksXG4gIGFzOiBvbmVPZlR5cGUoW3N0cmluZywgZnVuYywgb2JqZWN0XSksXG4gIGxvY2tQcm9wczogb2JqZWN0LFxuICBvbkFjdGl2YXRpb246IGZ1bmMsXG4gIG9uRGVhY3RpdmF0aW9uOiBmdW5jLFxuICBzaWRlQ2FyOiBhbnkuaXNSZXF1aXJlZFxufSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgRm9jdXNMb2NrOyIsICIvKipcbiAqIGRlZmluZXMgYSBmb2N1cyBncm91cFxuICovXG5leHBvcnQgdmFyIEZPQ1VTX0dST1VQID0gJ2RhdGEtZm9jdXMtbG9jayc7XG4vKipcbiAqIGRpc2FibGVzIGVsZW1lbnQgZGlzY292ZXJ5IGluc2lkZSBhIGdyb3VwIG1hcmtlZCBieSBrZXlcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19ESVNBQkxFRCA9ICdkYXRhLWZvY3VzLWxvY2stZGlzYWJsZWQnO1xuLyoqXG4gKiBhbGxvd3MgdW5jb250cm9sbGVkIGZvY3VzIHdpdGhpbiB0aGUgbWFya2VkIGFyZWEsIGVmZmVjdGl2ZWx5IGRpc2FibGluZyBmb2N1cyBsb2NrIGZvciBpdCdzIGNvbnRlbnRcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19BTExPVyA9ICdkYXRhLW5vLWZvY3VzLWxvY2snO1xuLyoqXG4gKiBpbnN0cnVjdHMgYXV0b2ZvY3VzIGVuZ2luZSB0byBwaWNrIGRlZmF1bHQgYXV0b2ZvY3VzIGluc2lkZSBhIGdpdmVuIG5vZGVcbiAqIGNhbiBiZSBzZXQgb24gdGhlIGVsZW1lbnQgb3IgY29udGFpbmVyXG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfQVVUTyA9ICdkYXRhLWF1dG9mb2N1cy1pbnNpZGUnO1xuLyoqXG4gKiBpbnN0cnVjdHMgYXV0b2ZvY3VzIHRvIGlnbm9yZSBlbGVtZW50cyB3aXRoaW4gYSBnaXZlbiBub2RlXG4gKiBjYW4gYmUgc2V0IG9uIHRoZSBlbGVtZW50IG9yIGNvbnRhaW5lclxuICovXG5leHBvcnQgdmFyIEZPQ1VTX05PX0FVVE9GT0NVUyA9ICdkYXRhLW5vLWF1dG9mb2N1cyc7XG4iLCAiaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmV4cG9ydCB2YXIgaGlkZGVuR3VhcmQgPSB7XG4gIHdpZHRoOiAnMXB4JyxcbiAgaGVpZ2h0OiAnMHB4JyxcbiAgcGFkZGluZzogMCxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgdG9wOiAnMXB4JyxcbiAgbGVmdDogJzFweCdcbn07XG52YXIgSW5Gb2N1c0d1YXJkID0gZnVuY3Rpb24gSW5Gb2N1c0d1YXJkKF9yZWYpIHtcbiAgdmFyIF9yZWYkY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNoaWxkcmVuID0gX3JlZiRjaGlsZHJlbiA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYkY2hpbGRyZW47XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJndWFyZC1maXJzdFwiLFxuICAgIFwiZGF0YS1mb2N1cy1ndWFyZFwiOiB0cnVlLFxuICAgIFwiZGF0YS1mb2N1cy1hdXRvLWd1YXJkXCI6IHRydWUsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pLCBjaGlsZHJlbiwgY2hpbGRyZW4gJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJndWFyZC1sYXN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgXCJkYXRhLWZvY3VzLWF1dG8tZ3VhcmRcIjogdHJ1ZSxcbiAgICBzdHlsZTogaGlkZGVuR3VhcmRcbiAgfSkpO1xufTtcbkluRm9jdXNHdWFyZC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZVxufSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgSW5Gb2N1c0d1YXJkOyIsICJpbXBvcnQgeyBjcmVhdGVNZWRpdW0sIGNyZWF0ZVNpZGVjYXJNZWRpdW0gfSBmcm9tICd1c2Utc2lkZWNhcic7XG5leHBvcnQgdmFyIG1lZGl1bUZvY3VzID0gY3JlYXRlTWVkaXVtKHt9LCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgY3VycmVudFRhcmdldCA9IF9yZWYuY3VycmVudFRhcmdldDtcbiAgcmV0dXJuIHtcbiAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICBjdXJyZW50VGFyZ2V0OiBjdXJyZW50VGFyZ2V0XG4gIH07XG59KTtcbmV4cG9ydCB2YXIgbWVkaXVtQmx1ciA9IGNyZWF0ZU1lZGl1bSgpO1xuZXhwb3J0IHZhciBtZWRpdW1FZmZlY3QgPSBjcmVhdGVNZWRpdW0oKTtcbmV4cG9ydCB2YXIgbWVkaXVtU2lkZWNhciA9IGNyZWF0ZVNpZGVjYXJNZWRpdW0oe1xuICBhc3luYzogdHJ1ZSxcbiAgc3NyOiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG59KTsiLCAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgZm9jdXNTY29wZSA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7IiwgImV4cG9ydCBmdW5jdGlvbiBkZWZlckFjdGlvbihhY3Rpb24pIHtcbiAgc2V0VGltZW91dChhY3Rpb24sIDEpO1xufVxuZXhwb3J0IHZhciBpbmxpbmVQcm9wID0gZnVuY3Rpb24gaW5saW5lUHJvcChuYW1lLCB2YWx1ZSkge1xuICB2YXIgb2JqID0ge307XG4gIG9ialtuYW1lXSA9IHZhbHVlO1xuICByZXR1cm4gb2JqO1xufTtcbmV4cG9ydCB2YXIgZXh0cmFjdFJlZiA9IGZ1bmN0aW9uIGV4dHJhY3RSZWYocmVmKSB7XG4gIHJldHVybiByZWYgJiYgJ2N1cnJlbnQnIGluIHJlZiA/IHJlZi5jdXJyZW50IDogcmVmO1xufTsiLCAiaW1wb3J0IEZvY3VzTG9ja1VJIGZyb20gJy4vTG9jayc7XG5pbXBvcnQgQXV0b0ZvY3VzSW5zaWRlIGZyb20gJy4vQXV0b0ZvY3VzSW5zaWRlJztcbmltcG9ydCBNb3ZlRm9jdXNJbnNpZGUsIHsgdXNlRm9jdXNJbnNpZGUgfSBmcm9tICcuL01vdmVGb2N1c0luc2lkZSc7XG5pbXBvcnQgRnJlZUZvY3VzSW5zaWRlIGZyb20gJy4vRnJlZUZvY3VzSW5zaWRlJztcbmltcG9ydCBJbkZvY3VzR3VhcmQgZnJvbSAnLi9Gb2N1c0d1YXJkJztcbmltcG9ydCB7IHVzZUZvY3VzQ29udHJvbGxlciwgdXNlRm9jdXNTY29wZSB9IGZyb20gJy4vdXNlLWZvY3VzLXNjb3BlJztcbmltcG9ydCB7IHVzZUZvY3VzU3RhdGUgfSBmcm9tICcuL3VzZS1mb2N1cy1zdGF0ZSc7XG5leHBvcnQgeyBBdXRvRm9jdXNJbnNpZGUsIE1vdmVGb2N1c0luc2lkZSwgRnJlZUZvY3VzSW5zaWRlLCBJbkZvY3VzR3VhcmQsIEZvY3VzTG9ja1VJLCB1c2VGb2N1c0luc2lkZSwgdXNlRm9jdXNDb250cm9sbGVyLCB1c2VGb2N1c1Njb3BlLCB1c2VGb2N1c1N0YXRlIH07XG5leHBvcnQgZGVmYXVsdCBGb2N1c0xvY2tVSTsiLCAiaW1wb3J0IHsgY3JlYXRlU2lkZWNhck1lZGl1bSB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmV4cG9ydCB2YXIgZWZmZWN0Q2FyID0gY3JlYXRlU2lkZWNhck1lZGl1bSgpO1xuZXhwb3J0IHZhciBmb2N1c0hpZGRlbk1hcmtlciA9ICdkYXRhLWZvY3VzLW9uLWhpZGRlbic7XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgd2l0aFNpZGVFZmZlY3QgZnJvbSAncmVhY3QtY2xpZW50c2lkZS1lZmZlY3QnO1xuaW1wb3J0IHsgbW92ZUZvY3VzSW5zaWRlLCBmb2N1c0luc2lkZSwgZm9jdXNJc0hpZGRlbiwgZXhwYW5kRm9jdXNhYmxlTm9kZXMsIGdldEZvY3VzYWJsZU5vZGVzLCBmb2N1c05leHRFbGVtZW50LCBmb2N1c1ByZXZFbGVtZW50LCBmb2N1c0ZpcnN0RWxlbWVudCwgZm9jdXNMYXN0RWxlbWVudCwgY2FwdHVyZUZvY3VzUmVzdG9yZSB9IGZyb20gJ2ZvY3VzLWxvY2snO1xuaW1wb3J0IHsgZGVmZXJBY3Rpb24sIGV4dHJhY3RSZWYgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgbWVkaXVtRm9jdXMsIG1lZGl1bUJsdXIsIG1lZGl1bUVmZmVjdCB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBmb2N1c09uQm9keSA9IGZ1bmN0aW9uIGZvY3VzT25Cb2R5KCkge1xuICByZXR1cm4gZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keTtcbn07XG52YXIgaXNGcmVlRm9jdXMgPSBmdW5jdGlvbiBpc0ZyZWVGb2N1cygpIHtcbiAgcmV0dXJuIGZvY3VzT25Cb2R5KCkgfHwgZm9jdXNJc0hpZGRlbigpO1xufTtcbnZhciBsYXN0QWN0aXZlVHJhcCA9IG51bGw7XG52YXIgbGFzdEFjdGl2ZUZvY3VzID0gbnVsbDtcbnZhciB0cnlSZXN0b3JlRm9jdXMgPSBmdW5jdGlvbiB0cnlSZXN0b3JlRm9jdXMoKSB7XG4gIHJldHVybiBudWxsO1xufTtcbnZhciBsYXN0UG9ydGFsZWRFbGVtZW50ID0gbnVsbDtcbnZhciBmb2N1c1dhc091dHNpZGVXaW5kb3cgPSBmYWxzZTtcbnZhciB3aW5kb3dGb2N1c2VkID0gZmFsc2U7XG52YXIgZGVmYXVsdFdoaXRlbGlzdCA9IGZ1bmN0aW9uIGRlZmF1bHRXaGl0ZWxpc3QoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBmb2N1c1doaXRlbGlzdGVkID0gZnVuY3Rpb24gZm9jdXNXaGl0ZWxpc3RlZChhY3RpdmVFbGVtZW50KSB7XG4gIHJldHVybiAobGFzdEFjdGl2ZVRyYXAud2hpdGVMaXN0IHx8IGRlZmF1bHRXaGl0ZWxpc3QpKGFjdGl2ZUVsZW1lbnQpO1xufTtcbnZhciByZWNvcmRQb3J0YWwgPSBmdW5jdGlvbiByZWNvcmRQb3J0YWwob2JzZXJ2ZXJOb2RlLCBwb3J0YWxlZEVsZW1lbnQpIHtcbiAgbGFzdFBvcnRhbGVkRWxlbWVudCA9IHtcbiAgICBvYnNlcnZlck5vZGU6IG9ic2VydmVyTm9kZSxcbiAgICBwb3J0YWxlZEVsZW1lbnQ6IHBvcnRhbGVkRWxlbWVudFxuICB9O1xufTtcbnZhciBmb2N1c0lzUG9ydGFsZWRQYWlyID0gZnVuY3Rpb24gZm9jdXNJc1BvcnRhbGVkUGFpcihlbGVtZW50KSB7XG4gIHJldHVybiBsYXN0UG9ydGFsZWRFbGVtZW50ICYmIGxhc3RQb3J0YWxlZEVsZW1lbnQucG9ydGFsZWRFbGVtZW50ID09PSBlbGVtZW50O1xufTtcbmZ1bmN0aW9uIGF1dG9HdWFyZChzdGFydEluZGV4LCBlbmQsIHN0ZXAsIGFsbE5vZGVzKSB7XG4gIHZhciBsYXN0R3VhcmQgPSBudWxsO1xuICB2YXIgaSA9IHN0YXJ0SW5kZXg7XG4gIGRvIHtcbiAgICB2YXIgaXRlbSA9IGFsbE5vZGVzW2ldO1xuICAgIGlmIChpdGVtLmd1YXJkKSB7XG4gICAgICBpZiAoaXRlbS5ub2RlLmRhdGFzZXQuZm9jdXNBdXRvR3VhcmQpIHtcbiAgICAgICAgbGFzdEd1YXJkID0gaXRlbTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGl0ZW0ubG9ja0l0ZW0pIHtcbiAgICAgIGlmIChpICE9PSBzdGFydEluZGV4KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RHdWFyZCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSB3aGlsZSAoKGkgKz0gc3RlcCkgIT09IGVuZCk7XG4gIGlmIChsYXN0R3VhcmQpIHtcbiAgICBsYXN0R3VhcmQubm9kZS50YWJJbmRleCA9IDA7XG4gIH1cbn1cbnZhciBmb2N1c1dhc091dHNpZGUgPSBmdW5jdGlvbiBmb2N1c1dhc091dHNpZGUoY3Jvc3NGcmFtZU9wdGlvbikge1xuICBpZiAoY3Jvc3NGcmFtZU9wdGlvbikge1xuICAgIHJldHVybiBCb29sZWFuKGZvY3VzV2FzT3V0c2lkZVdpbmRvdyk7XG4gIH1cbiAgcmV0dXJuIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9PT0gJ21lYW53aGlsZSc7XG59O1xudmFyIGNoZWNrSW5Ib3N0ID0gZnVuY3Rpb24gY2hlY2tJbkhvc3QoY2hlY2ssIGVsLCBib3VuZGFyeSkge1xuICByZXR1cm4gZWwgJiYgKGVsLmhvc3QgPT09IGNoZWNrICYmICghZWwuYWN0aXZlRWxlbWVudCB8fCBib3VuZGFyeS5jb250YWlucyhlbC5hY3RpdmVFbGVtZW50KSkgfHwgZWwucGFyZW50Tm9kZSAmJiBjaGVja0luSG9zdChjaGVjaywgZWwucGFyZW50Tm9kZSwgYm91bmRhcnkpKTtcbn07XG52YXIgd2l0aGluSG9zdCA9IGZ1bmN0aW9uIHdpdGhpbkhvc3QoYWN0aXZlRWxlbWVudCwgd29ya2luZ0FyZWEpIHtcbiAgcmV0dXJuIHdvcmtpbmdBcmVhLnNvbWUoZnVuY3Rpb24gKGFyZWEpIHtcbiAgICByZXR1cm4gY2hlY2tJbkhvc3QoYWN0aXZlRWxlbWVudCwgYXJlYSwgYXJlYSk7XG4gIH0pO1xufTtcbnZhciBnZXROb2RlRm9jdXNhYmxlcyA9IGZ1bmN0aW9uIGdldE5vZGVGb2N1c2FibGVzKG5vZGVzKSB7XG4gIHJldHVybiBnZXRGb2N1c2FibGVOb2Rlcyhub2RlcywgbmV3IE1hcCgpKTtcbn07XG52YXIgaXNOb3RGb2N1c2FibGUgPSBmdW5jdGlvbiBpc05vdEZvY3VzYWJsZShub2RlKSB7XG4gIHJldHVybiAhZ2V0Tm9kZUZvY3VzYWJsZXMoW25vZGUucGFyZW50Tm9kZV0pLnNvbWUoZnVuY3Rpb24gKGVsKSB7XG4gICAgcmV0dXJuIGVsLm5vZGUgPT09IG5vZGU7XG4gIH0pO1xufTtcbnZhciBhY3RpdmF0ZVRyYXAgPSBmdW5jdGlvbiBhY3RpdmF0ZVRyYXAoKSB7XG4gIHZhciByZXN1bHQgPSBmYWxzZTtcbiAgaWYgKGxhc3RBY3RpdmVUcmFwKSB7XG4gICAgdmFyIF9sYXN0QWN0aXZlVHJhcCA9IGxhc3RBY3RpdmVUcmFwLFxuICAgICAgb2JzZXJ2ZWQgPSBfbGFzdEFjdGl2ZVRyYXAub2JzZXJ2ZWQsXG4gICAgICBwZXJzaXN0ZW50Rm9jdXMgPSBfbGFzdEFjdGl2ZVRyYXAucGVyc2lzdGVudEZvY3VzLFxuICAgICAgYXV0b0ZvY3VzID0gX2xhc3RBY3RpdmVUcmFwLmF1dG9Gb2N1cyxcbiAgICAgIHNoYXJkcyA9IF9sYXN0QWN0aXZlVHJhcC5zaGFyZHMsXG4gICAgICBjcm9zc0ZyYW1lID0gX2xhc3RBY3RpdmVUcmFwLmNyb3NzRnJhbWUsXG4gICAgICBmb2N1c09wdGlvbnMgPSBfbGFzdEFjdGl2ZVRyYXAuZm9jdXNPcHRpb25zLFxuICAgICAgbm9Gb2N1c0d1YXJkcyA9IF9sYXN0QWN0aXZlVHJhcC5ub0ZvY3VzR3VhcmRzO1xuICAgIHZhciB3b3JraW5nTm9kZSA9IG9ic2VydmVkIHx8IGxhc3RQb3J0YWxlZEVsZW1lbnQgJiYgbGFzdFBvcnRhbGVkRWxlbWVudC5wb3J0YWxlZEVsZW1lbnQ7XG4gICAgaWYgKGZvY3VzT25Cb2R5KCkgJiYgbGFzdEFjdGl2ZUZvY3VzICYmIGxhc3RBY3RpdmVGb2N1cyAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGxhc3RBY3RpdmVGb2N1cykgfHwgaXNOb3RGb2N1c2FibGUobGFzdEFjdGl2ZUZvY3VzKSkge1xuICAgICAgICB2YXIgbmV3VGFyZ2V0ID0gdHJ5UmVzdG9yZUZvY3VzKCk7XG4gICAgICAgIGlmIChuZXdUYXJnZXQpIHtcbiAgICAgICAgICBuZXdUYXJnZXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKHdvcmtpbmdOb2RlKSB7XG4gICAgICB2YXIgd29ya2luZ0FyZWEgPSBbd29ya2luZ05vZGVdLmNvbmNhdChzaGFyZHMubWFwKGV4dHJhY3RSZWYpLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICB2YXIgc2hvdWxkRm9yY2VSZXN0b3JlRm9jdXMgPSBmdW5jdGlvbiBzaG91bGRGb3JjZVJlc3RvcmVGb2N1cygpIHtcbiAgICAgICAgaWYgKCFmb2N1c1dhc091dHNpZGUoY3Jvc3NGcmFtZSkgfHwgIW5vRm9jdXNHdWFyZHMgfHwgIWxhc3RBY3RpdmVGb2N1cyB8fCB3aW5kb3dGb2N1c2VkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBub2RlcyA9IGdldE5vZGVGb2N1c2FibGVzKHdvcmtpbmdBcmVhKTtcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IG5vZGVzLmZpbmRJbmRleChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgIHZhciBub2RlID0gX3JlZi5ub2RlO1xuICAgICAgICAgIHJldHVybiBub2RlID09PSBsYXN0QWN0aXZlRm9jdXM7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbGFzdEluZGV4ID09PSAwIHx8IGxhc3RJbmRleCA9PT0gbm9kZXMubGVuZ3RoIC0gMTtcbiAgICAgIH07XG4gICAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgZm9jdXNXaGl0ZWxpc3RlZChhY3RpdmVFbGVtZW50KSkge1xuICAgICAgICBpZiAocGVyc2lzdGVudEZvY3VzIHx8IHNob3VsZEZvcmNlUmVzdG9yZUZvY3VzKCkgfHwgIWlzRnJlZUZvY3VzKCkgfHwgIWxhc3RBY3RpdmVGb2N1cyAmJiBhdXRvRm9jdXMpIHtcbiAgICAgICAgICBpZiAod29ya2luZ05vZGUgJiYgIShmb2N1c0luc2lkZSh3b3JraW5nQXJlYSkgfHwgYWN0aXZlRWxlbWVudCAmJiB3aXRoaW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdBcmVhKSB8fCBmb2N1c0lzUG9ydGFsZWRQYWlyKGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdOb2RlKSkpIHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudCAmJiAhbGFzdEFjdGl2ZUZvY3VzICYmIGFjdGl2ZUVsZW1lbnQgJiYgIWF1dG9Gb2N1cykge1xuICAgICAgICAgICAgICBpZiAoYWN0aXZlRWxlbWVudC5ibHVyKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzdWx0ID0gbW92ZUZvY3VzSW5zaWRlKHdvcmtpbmdBcmVhLCBsYXN0QWN0aXZlRm9jdXMsIHtcbiAgICAgICAgICAgICAgICBmb2N1c09wdGlvbnM6IGZvY3VzT3B0aW9uc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgbGFzdFBvcnRhbGVkRWxlbWVudCA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBsYXN0QWN0aXZlRm9jdXMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgIGlmIChsYXN0QWN0aXZlRm9jdXMgIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgICAgIHRyeVJlc3RvcmVGb2N1cyA9IGNhcHR1cmVGb2N1c1Jlc3RvcmUobGFzdEFjdGl2ZUZvY3VzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9jdXNXYXNPdXRzaWRlV2luZG93ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkb2N1bWVudCAmJiBhY3RpdmVFbGVtZW50ICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZvY3VzLWF1dG8tZ3VhcmRdJykpIHtcbiAgICAgICAgdmFyIG5ld0FjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICB2YXIgYWxsTm9kZXMgPSBleHBhbmRGb2N1c2FibGVOb2Rlcyh3b3JraW5nQXJlYSk7XG4gICAgICAgIHZhciBmb2N1c2VkSW5kZXggPSBhbGxOb2Rlcy5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSBfcmVmMi5ub2RlO1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9KS5pbmRleE9mKG5ld0FjdGl2ZUVsZW1lbnQpO1xuICAgICAgICBpZiAoZm9jdXNlZEluZGV4ID4gLTEpIHtcbiAgICAgICAgICBhbGxOb2Rlcy5maWx0ZXIoZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgICAgICB2YXIgZ3VhcmQgPSBfcmVmMy5ndWFyZCxcbiAgICAgICAgICAgICAgbm9kZSA9IF9yZWYzLm5vZGU7XG4gICAgICAgICAgICByZXR1cm4gZ3VhcmQgJiYgbm9kZS5kYXRhc2V0LmZvY3VzQXV0b0d1YXJkO1xuICAgICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IF9yZWY0Lm5vZGU7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3RhYkluZGV4Jyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXV0b0d1YXJkKGZvY3VzZWRJbmRleCwgYWxsTm9kZXMubGVuZ3RoLCArMSwgYWxsTm9kZXMpO1xuICAgICAgICAgIGF1dG9HdWFyZChmb2N1c2VkSW5kZXgsIC0xLCAtMSwgYWxsTm9kZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xudmFyIG9uVHJhcCA9IGZ1bmN0aW9uIG9uVHJhcChldmVudCkge1xuICBpZiAoYWN0aXZhdGVUcmFwKCkgJiYgZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IGZ1bmN0aW9uIG9uQmx1cigpIHtcbiAgcmV0dXJuIGRlZmVyQWN0aW9uKGFjdGl2YXRlVHJhcCk7XG59O1xudmFyIG9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKGV2ZW50KSB7XG4gIHZhciBzb3VyY2UgPSBldmVudC50YXJnZXQ7XG4gIHZhciBjdXJyZW50Tm9kZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gIGlmICghY3VycmVudE5vZGUuY29udGFpbnMoc291cmNlKSkge1xuICAgIHJlY29yZFBvcnRhbChjdXJyZW50Tm9kZSwgc291cmNlKTtcbiAgfVxufTtcbnZhciBGb2N1c1dhdGNoZXIgPSBmdW5jdGlvbiBGb2N1c1dhdGNoZXIoKSB7XG4gIHJldHVybiBudWxsO1xufTtcbnZhciBGb2N1c1RyYXAgPSBmdW5jdGlvbiBGb2N1c1RyYXAoX3JlZjUpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjUuY2hpbGRyZW47XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25Gb2N1czogb25Gb2N1c1xuICB9LCBjaGlsZHJlbik7XG59O1xuRm9jdXNUcmFwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRcbn0gOiB7fTtcbnZhciBvbldpbmRvd0ZvY3VzID0gZnVuY3Rpb24gb25XaW5kb3dGb2N1cygpIHtcbiAgd2luZG93Rm9jdXNlZCA9IHRydWU7XG59O1xudmFyIG9uV2luZG93Qmx1ciA9IGZ1bmN0aW9uIG9uV2luZG93Qmx1cigpIHtcbiAgd2luZG93Rm9jdXNlZCA9IGZhbHNlO1xuICBmb2N1c1dhc091dHNpZGVXaW5kb3cgPSAnanVzdCc7XG4gIGRlZmVyQWN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICBmb2N1c1dhc091dHNpZGVXaW5kb3cgPSAnbWVhbndoaWxlJztcbiAgfSk7XG59O1xudmFyIGF0dGFjaEhhbmRsZXIgPSBmdW5jdGlvbiBhdHRhY2hIYW5kbGVyKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgb25UcmFwKTtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBvbkJsdXIpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbldpbmRvd0ZvY3VzKTtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbldpbmRvd0JsdXIpO1xufTtcbnZhciBkZXRhY2hIYW5kbGVyID0gZnVuY3Rpb24gZGV0YWNoSGFuZGxlcigpIHtcbiAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIG9uVHJhcCk7XG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0Jywgb25CbHVyKTtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgb25XaW5kb3dGb2N1cyk7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgb25XaW5kb3dCbHVyKTtcbn07XG5mdW5jdGlvbiByZWR1Y2VQcm9wc1RvU3RhdGUocHJvcHNMaXN0KSB7XG4gIHJldHVybiBwcm9wc0xpc3QuZmlsdGVyKGZ1bmN0aW9uIChfcmVmNikge1xuICAgIHZhciBkaXNhYmxlZCA9IF9yZWY2LmRpc2FibGVkO1xuICAgIHJldHVybiAhZGlzYWJsZWQ7XG4gIH0pO1xufVxudmFyIGZvY3VzTG9ja0FQSSA9IHtcbiAgbW92ZUZvY3VzSW5zaWRlOiBtb3ZlRm9jdXNJbnNpZGUsXG4gIGZvY3VzSW5zaWRlOiBmb2N1c0luc2lkZSxcbiAgZm9jdXNOZXh0RWxlbWVudDogZm9jdXNOZXh0RWxlbWVudCxcbiAgZm9jdXNQcmV2RWxlbWVudDogZm9jdXNQcmV2RWxlbWVudCxcbiAgZm9jdXNGaXJzdEVsZW1lbnQ6IGZvY3VzRmlyc3RFbGVtZW50LFxuICBmb2N1c0xhc3RFbGVtZW50OiBmb2N1c0xhc3RFbGVtZW50LFxuICBjYXB0dXJlRm9jdXNSZXN0b3JlOiBjYXB0dXJlRm9jdXNSZXN0b3JlXG59O1xuZnVuY3Rpb24gaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCh0cmFwcykge1xuICB2YXIgdHJhcCA9IHRyYXBzLnNsaWNlKC0xKVswXTtcbiAgaWYgKHRyYXAgJiYgIWxhc3RBY3RpdmVUcmFwKSB7XG4gICAgYXR0YWNoSGFuZGxlcigpO1xuICB9XG4gIHZhciBsYXN0VHJhcCA9IGxhc3RBY3RpdmVUcmFwO1xuICB2YXIgc2FtZVRyYXAgPSBsYXN0VHJhcCAmJiB0cmFwICYmIHRyYXAuaWQgPT09IGxhc3RUcmFwLmlkO1xuICBsYXN0QWN0aXZlVHJhcCA9IHRyYXA7XG4gIGlmIChsYXN0VHJhcCAmJiAhc2FtZVRyYXApIHtcbiAgICBsYXN0VHJhcC5vbkRlYWN0aXZhdGlvbigpO1xuICAgIGlmICghdHJhcHMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmNykge1xuICAgICAgdmFyIGlkID0gX3JlZjcuaWQ7XG4gICAgICByZXR1cm4gaWQgPT09IGxhc3RUcmFwLmlkO1xuICAgIH0pLmxlbmd0aCkge1xuICAgICAgbGFzdFRyYXAucmV0dXJuRm9jdXMoIXRyYXApO1xuICAgIH1cbiAgfVxuICBpZiAodHJhcCkge1xuICAgIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG4gICAgaWYgKCFzYW1lVHJhcCB8fCBsYXN0VHJhcC5vYnNlcnZlZCAhPT0gdHJhcC5vYnNlcnZlZCkge1xuICAgICAgdHJhcC5vbkFjdGl2YXRpb24oZm9jdXNMb2NrQVBJKTtcbiAgICB9XG4gICAgYWN0aXZhdGVUcmFwKHRydWUpO1xuICAgIGRlZmVyQWN0aW9uKGFjdGl2YXRlVHJhcCk7XG4gIH0gZWxzZSB7XG4gICAgZGV0YWNoSGFuZGxlcigpO1xuICAgIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG4gIH1cbn1cbm1lZGl1bUZvY3VzLmFzc2lnblN5bmNNZWRpdW0ob25Gb2N1cyk7XG5tZWRpdW1CbHVyLmFzc2lnbk1lZGl1bShvbkJsdXIpO1xubWVkaXVtRWZmZWN0LmFzc2lnbk1lZGl1bShmdW5jdGlvbiAoY2IpIHtcbiAgcmV0dXJuIGNiKGZvY3VzTG9ja0FQSSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IHdpdGhTaWRlRWZmZWN0KHJlZHVjZVByb3BzVG9TdGF0ZSwgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCkoRm9jdXNXYXRjaGVyKTsiLCAiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7XG4gIH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbmV4cG9ydCB7IF9zZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2UodCwgbykge1xuICB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoby5wcm90b3R5cGUpLCB0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHQsIHNldFByb3RvdHlwZU9mKHQsIG8pO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzTG9vc2UgYXMgZGVmYXVsdCB9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufVxuZXhwb3J0IHsgX3R5cGVvZiBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiO1xufVxuZXhwb3J0IHsgdG9Qcm9wZXJ0eUtleSBhcyBkZWZhdWx0IH07IiwgImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7XG4gIHJldHVybiAociA9IHRvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xuICAgIHZhbHVlOiB0LFxuICAgIGVudW1lcmFibGU6ICEwLFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgd3JpdGFibGU6ICEwXG4gIH0pIDogZVtyXSA9IHQsIGU7XG59XG5leHBvcnQgeyBfZGVmaW5lUHJvcGVydHkgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSc7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5JztcbmltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiB3aXRoU2lkZUVmZmVjdChyZWR1Y2VQcm9wc1RvU3RhdGUsIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGlmICh0eXBlb2YgcmVkdWNlUHJvcHNUb1N0YXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHJlZHVjZVByb3BzVG9TdGF0ZSB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50IHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoV3JhcHBlZENvbXBvbmVudCkge1xuICAgIHJldHVybiBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKFdyYXBwZWRDb21wb25lbnQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBpZiAodHlwZW9mIFdyYXBwZWRDb21wb25lbnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBXcmFwcGVkQ29tcG9uZW50IHRvIGJlIGEgUmVhY3QgY29tcG9uZW50LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBtb3VudGVkSW5zdGFuY2VzID0gW107XG4gICAgdmFyIHN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZW1pdENoYW5nZSgpIHtcbiAgICAgIHN0YXRlID0gcmVkdWNlUHJvcHNUb1N0YXRlKG1vdW50ZWRJbnN0YW5jZXMubWFwKGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UucHJvcHM7XG4gICAgICB9KSk7XG4gICAgICBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50KHN0YXRlKTtcbiAgICB9XG5cbiAgICB2YXIgU2lkZUVmZmVjdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgICAgIF9pbmhlcml0c0xvb3NlKFNpZGVFZmZlY3QsIF9QdXJlQ29tcG9uZW50KTtcblxuICAgICAgZnVuY3Rpb24gU2lkZUVmZmVjdCgpIHtcbiAgICAgICAgcmV0dXJuIF9QdXJlQ29tcG9uZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gVHJ5IHRvIHVzZSBkaXNwbGF5TmFtZSBvZiB3cmFwcGVkIGNvbXBvbmVudFxuICAgICAgU2lkZUVmZmVjdC5wZWVrID0gZnVuY3Rpb24gcGVlaygpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfTtcblxuICAgICAgdmFyIF9wcm90byA9IFNpZGVFZmZlY3QucHJvdG90eXBlO1xuXG4gICAgICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgbW91bnRlZEluc3RhbmNlcy5wdXNoKHRoaXMpO1xuICAgICAgICBlbWl0Q2hhbmdlKCk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgICBlbWl0Q2hhbmdlKCk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gbW91bnRlZEluc3RhbmNlcy5pbmRleE9mKHRoaXMpO1xuICAgICAgICBtb3VudGVkSW5zdGFuY2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCB0aGlzLnByb3BzKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBTaWRlRWZmZWN0O1xuICAgIH0oUHVyZUNvbXBvbmVudCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoU2lkZUVmZmVjdCwgXCJkaXNwbGF5TmFtZVwiLCBcIlNpZGVFZmZlY3QoXCIgKyBnZXREaXNwbGF5TmFtZShXcmFwcGVkQ29tcG9uZW50KSArIFwiKVwiKTtcblxuICAgIHJldHVybiBTaWRlRWZmZWN0O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU2lkZUVmZmVjdDtcbiIsICIvKlxuSUUxMSBzdXBwb3J0XG4gKi9cbmV4cG9ydCB2YXIgdG9BcnJheSA9IGZ1bmN0aW9uIChhKSB7XG4gICAgdmFyIHJldCA9IEFycmF5KGEubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcmV0W2ldID0gYVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG5leHBvcnQgdmFyIGFzQXJyYXkgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gKEFycmF5LmlzQXJyYXkoYSkgPyBhIDogW2FdKTsgfTtcbmV4cG9ydCB2YXIgZ2V0Rmlyc3QgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gKEFycmF5LmlzQXJyYXkoYSkgPyBhWzBdIDogYSk7IH07XG4iLCAiaW1wb3J0IHsgRk9DVVNfTk9fQVVUT0ZPQ1VTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbnZhciBpc0VsZW1lbnRIaWRkZW4gPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIHdlIGNhbiBtZWFzdXJlIG9ubHkgXCJlbGVtZW50c1wiXG4gICAgLy8gY29uc2lkZXIgb3RoZXJzIGFzIFwidmlzaWJsZVwiXG4gICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKTtcbiAgICBpZiAoIWNvbXB1dGVkU3R5bGUgfHwgIWNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdkaXNwbGF5JykgPT09ICdub25lJyB8fCBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3Zpc2liaWxpdHknKSA9PT0gJ2hpZGRlbicpO1xufTtcbnZhciBnZXRQYXJlbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAvLyBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIGNhbiBhbHNvIHBvaW50IG9uIFNoYWRvd1Jvb3QuIEluIHRoaXMgY2FzZSAuaG9zdCB3aWxsIHBvaW50IG9uIHRoZSBuZXh0IG5vZGVcbiAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlICYmIG5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFXG4gICAgICAgID8gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5ob3N0XG4gICAgICAgIDogbm9kZS5wYXJlbnROb2RlO1xufTtcbnZhciBpc1RvcE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbm9kZSA9PT0gZG9jdW1lbnQgfHwgKG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFKTtcbn07XG52YXIgaXNJbmVydCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLmhhc0F0dHJpYnV0ZSgnaW5lcnQnKTsgfTtcbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGVzdGluZy1saWJyYXJ5L2plc3QtZG9tL2Jsb2IvbWFpbi9zcmMvdG8tYmUtdmlzaWJsZS5qc1xuICovXG52YXIgaXNWaXNpYmxlVW5jYWNoZWQgPSBmdW5jdGlvbiAobm9kZSwgY2hlY2tQYXJlbnQpIHtcbiAgICByZXR1cm4gIW5vZGUgfHwgaXNUb3BOb2RlKG5vZGUpIHx8ICghaXNFbGVtZW50SGlkZGVuKG5vZGUpICYmICFpc0luZXJ0KG5vZGUpICYmIGNoZWNrUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpKTtcbn07XG5leHBvcnQgdmFyIGlzVmlzaWJsZUNhY2hlZCA9IGZ1bmN0aW9uICh2aXNpYmlsaXR5Q2FjaGUsIG5vZGUpIHtcbiAgICB2YXIgY2FjaGVkID0gdmlzaWJpbGl0eUNhY2hlLmdldChub2RlKTtcbiAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGlzVmlzaWJsZVVuY2FjaGVkKG5vZGUsIGlzVmlzaWJsZUNhY2hlZC5iaW5kKHVuZGVmaW5lZCwgdmlzaWJpbGl0eUNhY2hlKSk7XG4gICAgdmlzaWJpbGl0eUNhY2hlLnNldChub2RlLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIGlzQXV0b0ZvY3VzQWxsb3dlZFVuY2FjaGVkID0gZnVuY3Rpb24gKG5vZGUsIGNoZWNrUGFyZW50KSB7XG4gICAgcmV0dXJuIG5vZGUgJiYgIWlzVG9wTm9kZShub2RlKSA/IChpc0F1dG9Gb2N1c0FsbG93ZWQobm9kZSkgPyBjaGVja1BhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKSA6IGZhbHNlKSA6IHRydWU7XG59O1xuZXhwb3J0IHZhciBpc0F1dG9Gb2N1c0FsbG93ZWRDYWNoZWQgPSBmdW5jdGlvbiAoY2FjaGUsIG5vZGUpIHtcbiAgICB2YXIgY2FjaGVkID0gY2FjaGUuZ2V0KG5vZGUpO1xuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gaXNBdXRvRm9jdXNBbGxvd2VkVW5jYWNoZWQobm9kZSwgaXNBdXRvRm9jdXNBbGxvd2VkQ2FjaGVkLmJpbmQodW5kZWZpbmVkLCBjYWNoZSkpO1xuICAgIGNhY2hlLnNldChub2RlLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuZXhwb3J0IHZhciBnZXREYXRhc2V0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5vZGUuZGF0YXNldDtcbn07XG5leHBvcnQgdmFyIGlzSFRNTEJ1dHRvbkVsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZS50YWdOYW1lID09PSAnQlVUVE9OJzsgfTtcbmV4cG9ydCB2YXIgaXNIVE1MSW5wdXRFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ0lOUFVUJzsgfTtcbmV4cG9ydCB2YXIgaXNSYWRpb0VsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkgJiYgbm9kZS50eXBlID09PSAncmFkaW8nO1xufTtcbmV4cG9ydCB2YXIgbm90SGlkZGVuSW5wdXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiAhKChpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkgfHwgaXNIVE1MQnV0dG9uRWxlbWVudChub2RlKSkgJiYgKG5vZGUudHlwZSA9PT0gJ2hpZGRlbicgfHwgbm9kZS5kaXNhYmxlZCkpO1xufTtcbmV4cG9ydCB2YXIgaXNBdXRvRm9jdXNBbGxvd2VkID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgYXR0cmlidXRlID0gbm9kZS5nZXRBdHRyaWJ1dGUoRk9DVVNfTk9fQVVUT0ZPQ1VTKTtcbiAgICByZXR1cm4gIVt0cnVlLCAndHJ1ZScsICcnXS5pbmNsdWRlcyhhdHRyaWJ1dGUpO1xufTtcbmV4cG9ydCB2YXIgaXNHdWFyZCA9IGZ1bmN0aW9uIChub2RlKSB7IHZhciBfYTsgcmV0dXJuIEJvb2xlYW4obm9kZSAmJiAoKF9hID0gZ2V0RGF0YXNldChub2RlKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzR3VhcmQpKTsgfTtcbmV4cG9ydCB2YXIgaXNOb3RBR3VhcmQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gIWlzR3VhcmQobm9kZSk7IH07XG5leHBvcnQgdmFyIGlzRGVmaW5lZCA9IGZ1bmN0aW9uICh4KSB7IHJldHVybiBCb29sZWFuKHgpOyB9O1xuIiwgImltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbmV4cG9ydCB2YXIgdGFiU29ydCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgdmFyIGFUYWIgPSBNYXRoLm1heCgwLCBhLnRhYkluZGV4KTtcbiAgICB2YXIgYlRhYiA9IE1hdGgubWF4KDAsIGIudGFiSW5kZXgpO1xuICAgIHZhciB0YWJEaWZmID0gYVRhYiAtIGJUYWI7XG4gICAgdmFyIGluZGV4RGlmZiA9IGEuaW5kZXggLSBiLmluZGV4O1xuICAgIGlmICh0YWJEaWZmKSB7XG4gICAgICAgIGlmICghYVRhYikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFiVGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhYkRpZmYgfHwgaW5kZXhEaWZmO1xufTtcbnZhciBnZXRUYWJJbmRleCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKG5vZGUudGFiSW5kZXggPCAwKSB7XG4gICAgICAgIC8vIGFsbCBcImZvY3VzYWJsZVwiIGVsZW1lbnRzIGFyZSBhbHJlYWR5IHByZXNlbGVjdGVkXG4gICAgICAgIC8vIGJ1dCBzb21lIG1pZ2h0IGhhdmUgaW1wbGljaXQgbmVnYXRpdmUgdGFiSW5kZXhcbiAgICAgICAgLy8gcmV0dXJuIDAgZm9yIDxhdWRpbyB3aXRob3V0IHRhYkluZGV4IGF0dHJpYnV0ZSAtIGl0IGlzIFwidGFiYmFibGVcIlxuICAgICAgICBpZiAoIW5vZGUuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZS50YWJJbmRleDtcbn07XG5leHBvcnQgdmFyIG9yZGVyQnlUYWJJbmRleCA9IGZ1bmN0aW9uIChub2RlcywgZmlsdGVyTmVnYXRpdmUsIGtlZXBHdWFyZHMpIHtcbiAgICByZXR1cm4gdG9BcnJheShub2RlcylcbiAgICAgICAgLm1hcChmdW5jdGlvbiAobm9kZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIHRhYkluZGV4ID0gZ2V0VGFiSW5kZXgobm9kZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgdGFiSW5kZXg6IGtlZXBHdWFyZHMgJiYgdGFiSW5kZXggPT09IC0xID8gKChub2RlLmRhdGFzZXQgfHwge30pLmZvY3VzR3VhcmQgPyAwIDogLTEpIDogdGFiSW5kZXgsXG4gICAgICAgIH07XG4gICAgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gIWZpbHRlck5lZ2F0aXZlIHx8IGRhdGEudGFiSW5kZXggPj0gMDsgfSlcbiAgICAgICAgLnNvcnQodGFiU29ydCk7XG59O1xuIiwgIi8qKlxuICogbGlzdCBvZiB0aGUgb2JqZWN0IHRvIGJlIGNvbnNpZGVyZWQgYXMgZm9jdXNhYmxlXG4gKi9cbmV4cG9ydCB2YXIgdGFiYmFibGVzID0gW1xuICAgICdidXR0b246ZW5hYmxlZCcsXG4gICAgJ3NlbGVjdDplbmFibGVkJyxcbiAgICAndGV4dGFyZWE6ZW5hYmxlZCcsXG4gICAgJ2lucHV0OmVuYWJsZWQnLFxuICAgIC8vIGVsZW1lbnRzIHdpdGggZXhwbGljaXQgcm9sZXMgd2lsbCBhbHNvIHVzZSBleHBsaWNpdCB0YWJpbmRleFxuICAgIC8vICdbcm9sZT1cImJ1dHRvblwiXScsXG4gICAgJ2FbaHJlZl0nLFxuICAgICdhcmVhW2hyZWZdJyxcbiAgICAnc3VtbWFyeScsXG4gICAgJ2lmcmFtZScsXG4gICAgJ29iamVjdCcsXG4gICAgJ2VtYmVkJyxcbiAgICAnYXVkaW9bY29udHJvbHNdJyxcbiAgICAndmlkZW9bY29udHJvbHNdJyxcbiAgICAnW3RhYmluZGV4XScsXG4gICAgJ1tjb250ZW50ZWRpdGFibGVdJyxcbiAgICAnW2F1dG9mb2N1c10nLFxuXTtcbiIsICJpbXBvcnQgeyBGT0NVU19BVVRPIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbmltcG9ydCB7IHRhYmJhYmxlcyB9IGZyb20gJy4vdGFiYmFibGVzJztcbnZhciBxdWVyeVRhYmJhYmxlcyA9IHRhYmJhYmxlcy5qb2luKCcsJyk7XG52YXIgcXVlcnlHdWFyZFRhYmJhYmxlcyA9IFwiXCIuY29uY2F0KHF1ZXJ5VGFiYmFibGVzLCBcIiwgW2RhdGEtZm9jdXMtZ3VhcmRdXCIpO1xudmFyIGdldEZvY3VzYWJsZXNXaXRoU2hhZG93RG9tID0gZnVuY3Rpb24gKHBhcmVudCwgd2l0aEd1YXJkcykge1xuICAgIHJldHVybiB0b0FycmF5KChwYXJlbnQuc2hhZG93Um9vdCB8fCBwYXJlbnQpLmNoaWxkcmVuKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoY2hpbGQubWF0Y2hlcyh3aXRoR3VhcmRzID8gcXVlcnlHdWFyZFRhYmJhYmxlcyA6IHF1ZXJ5VGFiYmFibGVzKSA/IFtjaGlsZF0gOiBbXSwgZ2V0Rm9jdXNhYmxlc1dpdGhTaGFkb3dEb20oY2hpbGQpKTtcbiAgICB9LCBbXSk7XG59O1xudmFyIGdldEZvY3VzYWJsZXNXaXRoSUZyYW1lID0gZnVuY3Rpb24gKHBhcmVudCwgd2l0aEd1YXJkcykge1xuICAgIHZhciBfYTtcbiAgICAvLyBjb250ZW50RG9jdW1lbnQgb2YgaWZyYW1lIHdpbGwgYmUgbnVsbCBpZiBjdXJyZW50IG9yaWdpbiBjYW5ub3QgYWNjZXNzIGl0XG4gICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50ICYmICgoX2EgPSBwYXJlbnQuY29udGVudERvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYm9keSkpIHtcbiAgICAgICAgcmV0dXJuIGdldEZvY3VzYWJsZXMoW3BhcmVudC5jb250ZW50RG9jdW1lbnQuYm9keV0sIHdpdGhHdWFyZHMpO1xuICAgIH1cbiAgICByZXR1cm4gW3BhcmVudF07XG59O1xuZXhwb3J0IHZhciBnZXRGb2N1c2FibGVzID0gZnVuY3Rpb24gKHBhcmVudHMsIHdpdGhHdWFyZHMpIHtcbiAgICByZXR1cm4gcGFyZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGFyZW50KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIGZvY3VzYWJsZVdpdGhTaGFkb3dEb20gPSBnZXRGb2N1c2FibGVzV2l0aFNoYWRvd0RvbShwYXJlbnQsIHdpdGhHdWFyZHMpO1xuICAgICAgICB2YXIgZm9jdXNhYmxlV2l0aElmcmFtZXMgPSAoX2EgPSBbXSkuY29uY2F0LmFwcGx5KF9hLCBmb2N1c2FibGVXaXRoU2hhZG93RG9tLm1hcChmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZ2V0Rm9jdXNhYmxlc1dpdGhJRnJhbWUobm9kZSwgd2l0aEd1YXJkcyk7IH0pKTtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoXG4gICAgICAgIC8vIGFkZCBhbGwgdGFiYmFibGVzIGluc2lkZSBhbmQgd2l0aGluIHNoYWRvdyBET01zIGluIERPTSBvcmRlclxuICAgICAgICBmb2N1c2FibGVXaXRoSWZyYW1lcywgXG4gICAgICAgIC8vIGFkZCBpZiBub2RlIGlzIHRhYmJhYmxlIGl0c2VsZlxuICAgICAgICBwYXJlbnQucGFyZW50Tm9kZVxuICAgICAgICAgICAgPyB0b0FycmF5KHBhcmVudC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnlUYWJiYWJsZXMpKS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUgPT09IHBhcmVudDsgfSlcbiAgICAgICAgICAgIDogW10pO1xuICAgIH0sIFtdKTtcbn07XG4vKipcbiAqIHJldHVybiBhIGxpc3Qgb2YgZm9jdXNhYmxlIG5vZGVzIHdpdGhpbiBhbiBhcmVhIG1hcmtlZCBhcyBcImF1dG8tZm9jdXNhYmxlXCJcbiAqIEBwYXJhbSBwYXJlbnRcbiAqL1xuZXhwb3J0IHZhciBnZXRQYXJlbnRBdXRvZm9jdXNhYmxlcyA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICB2YXIgcGFyZW50Rm9jdXMgPSBwYXJlbnQucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfQVVUTywgXCJdXCIpKTtcbiAgICByZXR1cm4gdG9BcnJheShwYXJlbnRGb2N1cylcbiAgICAgICAgLm1hcChmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZ2V0Rm9jdXNhYmxlcyhbbm9kZV0pOyB9KVxuICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5vZGVzKSB7IHJldHVybiBhY2MuY29uY2F0KG5vZGVzKTsgfSwgW10pO1xufTtcbiIsICJpbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG5pbXBvcnQgeyBpc0F1dG9Gb2N1c0FsbG93ZWRDYWNoZWQsIGlzVmlzaWJsZUNhY2hlZCwgbm90SGlkZGVuSW5wdXQgfSBmcm9tICcuL2lzJztcbmltcG9ydCB7IG9yZGVyQnlUYWJJbmRleCB9IGZyb20gJy4vdGFiT3JkZXInO1xuaW1wb3J0IHsgZ2V0Rm9jdXNhYmxlcywgZ2V0UGFyZW50QXV0b2ZvY3VzYWJsZXMgfSBmcm9tICcuL3RhYlV0aWxzJztcbi8qKlxuICogZ2l2ZW4gbGlzdCBvZiBmb2N1c2FibGUgZWxlbWVudHMga2VlcHMgdGhlIG9uZXMgdXNlciBjYW4gaW50ZXJhY3Qgd2l0aFxuICogQHBhcmFtIG5vZGVzXG4gKiBAcGFyYW0gdmlzaWJpbGl0eUNhY2hlXG4gKi9cbmV4cG9ydCB2YXIgZmlsdGVyRm9jdXNhYmxlID0gZnVuY3Rpb24gKG5vZGVzLCB2aXNpYmlsaXR5Q2FjaGUpIHtcbiAgICByZXR1cm4gdG9BcnJheShub2RlcylcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gaXNWaXNpYmxlQ2FjaGVkKHZpc2liaWxpdHlDYWNoZSwgbm9kZSk7IH0pXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vdEhpZGRlbklucHV0KG5vZGUpOyB9KTtcbn07XG5leHBvcnQgdmFyIGZpbHRlckF1dG9Gb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZXMsIGNhY2hlKSB7XG4gICAgaWYgKGNhY2hlID09PSB2b2lkIDApIHsgY2FjaGUgPSBuZXcgTWFwKCk7IH1cbiAgICByZXR1cm4gdG9BcnJheShub2RlcykuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBpc0F1dG9Gb2N1c0FsbG93ZWRDYWNoZWQoY2FjaGUsIG5vZGUpOyB9KTtcbn07XG4vKipcbiAqICFfX1dBUk5JTkdfXyEgTG93IGxldmVsIEFQSS5cbiAqIEByZXR1cm5zIGFsbCB0YWJiYWJsZSBub2Rlc1xuICpcbiAqIEBzZWUge0BsaW5rIGdldEZvY3VzYWJsZU5vZGVzfSB0byBnZXQgYW55IGZvY3VzYWJsZSBlbGVtZW50XG4gKlxuICogQHBhcmFtIHRvcE5vZGVzIC0gYXJyYXkgb2YgdG9wIGxldmVsIEhUTUxFbGVtZW50cyB0byBzZWFyY2ggaW5zaWRlXG4gKiBAcGFyYW0gdmlzaWJpbGl0eUNhY2hlIC0gYW4gY2FjaGUgdG8gc3RvcmUgaW50ZXJtZWRpYXRlIG1lYXN1cmVtZW50cy4gRXhwZWN0ZWQgdG8gYmUgYSBmcmVzaCBgbmV3IE1hcGAgb24gZXZlcnkgY2FsbFxuICovXG5leHBvcnQgdmFyIGdldFRhYmJhYmxlTm9kZXMgPSBmdW5jdGlvbiAodG9wTm9kZXMsIHZpc2liaWxpdHlDYWNoZSwgd2l0aEd1YXJkcykge1xuICAgIHJldHVybiBvcmRlckJ5VGFiSW5kZXgoZmlsdGVyRm9jdXNhYmxlKGdldEZvY3VzYWJsZXModG9wTm9kZXMsIHdpdGhHdWFyZHMpLCB2aXNpYmlsaXR5Q2FjaGUpLCB0cnVlLCB3aXRoR3VhcmRzKTtcbn07XG4vKipcbiAqICFfX1dBUk5JTkdfXyEgTG93IGxldmVsIEFQSS5cbiAqXG4gKiBAcmV0dXJucyBhbnl0aGluZyBcImZvY3VzYWJsZVwiLCBub3Qgb25seSB0YWJiYWJsZS4gVGhlIGRpZmZlcmVuY2UgaXMgaW4gYHRhYkluZGV4PS0xYFxuICogKHdpdGhvdXQgZ3VhcmRzLCBhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCBleHBlY3RlZCB0byBiZSBldmVyIGZvY3VzZWQpXG4gKlxuICogQHNlZSB7QGxpbmsgZ2V0VGFiYmFibGVOb2Rlc30gdG8gZ2V0IG9ubHkgdGFiYmxlIG5vZGVzIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gdG9wTm9kZXMgLSBhcnJheSBvZiB0b3AgbGV2ZWwgSFRNTEVsZW1lbnRzIHRvIHNlYXJjaCBpbnNpZGVcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGUgLSBhbiBjYWNoZSB0byBzdG9yZSBpbnRlcm1lZGlhdGUgbWVhc3VyZW1lbnRzLiBFeHBlY3RlZCB0byBiZSBhIGZyZXNoIGBuZXcgTWFwYCBvbiBldmVyeSBjYWxsXG4gKi9cbmV4cG9ydCB2YXIgZ2V0Rm9jdXNhYmxlTm9kZXMgPSBmdW5jdGlvbiAodG9wTm9kZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiBvcmRlckJ5VGFiSW5kZXgoZmlsdGVyRm9jdXNhYmxlKGdldEZvY3VzYWJsZXModG9wTm9kZXMpLCB2aXNpYmlsaXR5Q2FjaGUpLCBmYWxzZSk7XG59O1xuLyoqXG4gKiByZXR1cm4gbGlzdCBvZiBub2RlcyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gYmUgYXV0by1mb2N1c2VkXG4gKiBAcGFyYW0gdG9wTm9kZVxuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZVxuICovXG5leHBvcnQgdmFyIHBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKHRvcE5vZGUsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiBmaWx0ZXJGb2N1c2FibGUoZ2V0UGFyZW50QXV0b2ZvY3VzYWJsZXModG9wTm9kZSksIHZpc2liaWxpdHlDYWNoZSk7XG59O1xuLypcbiAqIERldGVybWluZXMgaWYgZWxlbWVudCBpcyBjb250YWluZWQgaW4gc2NvcGUsIGluY2x1ZGluZyBuZXN0ZWQgc2hhZG93IERPTXNcbiAqL1xuZXhwb3J0IHZhciBjb250YWlucyA9IGZ1bmN0aW9uIChzY29wZSwgZWxlbWVudCkge1xuICAgIGlmIChzY29wZS5zaGFkb3dSb290KSB7XG4gICAgICAgIHJldHVybiBjb250YWlucyhzY29wZS5zaGFkb3dSb290LCBlbGVtZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc2NvcGUpLmNvbnRhaW5zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihzY29wZSkuY29udGFpbnMuY2FsbChzY29wZSwgZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b0FycmF5KHNjb3BlLmNoaWxkcmVuKS5zb21lKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWZyYW1lQm9keSA9IChfYSA9IGNoaWxkLmNvbnRlbnREb2N1bWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmJvZHk7XG4gICAgICAgICAgICAgICAgaWYgKGlmcmFtZUJvZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKGlmcmFtZUJvZHksIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29udGFpbnMoY2hpbGQsIGVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuIiwgImltcG9ydCB7IEZPQ1VTX0RJU0FCTEVELCBGT0NVU19HUk9VUCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhc0FycmF5LCB0b0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG4vKipcbiAqIGluIGNhc2Ugb2YgbXVsdGlwbGUgbm9kZXMgbmVzdGVkIGluc2lkZSBlYWNoIG90aGVyXG4gKiBrZWVwcyBvbmx5IHRvcCBvbmVzXG4gKiB0aGlzIGlzIE8obmxvZ24pXG4gKiBAcGFyYW0gbm9kZXNcbiAqIEByZXR1cm5zIHsqfVxuICovXG52YXIgZmlsdGVyTmVzdGVkID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gICAgdmFyIGNvbnRhaW5lZCA9IG5ldyBTZXQoKTtcbiAgICB2YXIgbCA9IG5vZGVzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkgKz0gMSkge1xuICAgICAgICBmb3IgKHZhciBqID0gaSArIDE7IGogPCBsOyBqICs9IDEpIHtcbiAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IG5vZGVzW2ldLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5vZGVzW2pdKTtcbiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UgKi9cbiAgICAgICAgICAgIGlmICgocG9zaXRpb24gJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVkLmFkZChqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgocG9zaXRpb24gJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TKSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb250YWluZWQuYWRkKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoZnVuY3Rpb24gKF8sIGluZGV4KSB7IHJldHVybiAhY29udGFpbmVkLmhhcyhpbmRleCk7IH0pO1xufTtcbi8qKlxuICogZmluZHMgdG9wIG1vc3QgcGFyZW50IGZvciBhIG5vZGVcbiAqIEBwYXJhbSBub2RlXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xudmFyIGdldFRvcFBhcmVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZSA/IGdldFRvcFBhcmVudChub2RlLnBhcmVudE5vZGUpIDogbm9kZTtcbn07XG4vKipcbiAqIHJldHVybnMgYWxsIFwiZm9jdXMgY29udGFpbmVyc1wiIGluc2lkZSBhIGdpdmVuIG5vZGVcbiAqIEBwYXJhbSBub2RlIC0gbm9kZSBvciBub2RlcyB0byBsb29rIGluc2lkZVxuICogQHJldHVybnMgRWxlbWVudFtdXG4gKi9cbmV4cG9ydCB2YXIgZ2V0QWxsQWZmZWN0ZWROb2RlcyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIG5vZGVzID0gYXNBcnJheShub2RlKTtcbiAgICByZXR1cm4gbm9kZXMuZmlsdGVyKEJvb2xlYW4pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjdXJyZW50Tm9kZSkge1xuICAgICAgICB2YXIgZ3JvdXAgPSBjdXJyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoRk9DVVNfR1JPVVApO1xuICAgICAgICBhY2MucHVzaC5hcHBseShhY2MsIChncm91cFxuICAgICAgICAgICAgPyBmaWx0ZXJOZXN0ZWQodG9BcnJheShnZXRUb3BQYXJlbnQoY3VycmVudE5vZGUpLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbXCIuY29uY2F0KEZPQ1VTX0dST1VQLCBcIj1cXFwiXCIpLmNvbmNhdChncm91cCwgXCJcXFwiXTpub3QoW1wiKS5jb25jYXQoRk9DVVNfRElTQUJMRUQsIFwiPVxcXCJkaXNhYmxlZFxcXCJdKVwiKSkpKVxuICAgICAgICAgICAgOiBbY3VycmVudE5vZGVdKSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pO1xufTtcbiIsICJleHBvcnQgdmFyIHNhZmVQcm9iZSA9IGZ1bmN0aW9uIChjYikge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjYigpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn07XG4iLCAiLyoqXG4gKiByZXR1cm5zIGFjdGl2ZSBlbGVtZW50IGZyb20gZG9jdW1lbnQgb3IgZnJvbSBuZXN0ZWQgc2hhZG93ZG9tc1xuICovXG5pbXBvcnQgeyBzYWZlUHJvYmUgfSBmcm9tICcuL3NhZmUnO1xuLyoqXG4gKiByZXR1cm5zIGN1cnJlbnQgYWN0aXZlIGVsZW1lbnQuIElmIHRoZSBhY3RpdmUgZWxlbWVudCBpcyBhIFwiY29udGFpbmVyXCIgaXRzZWxmKHNoYWRvd1Jvb3Qgb3IgaWZyYW1lKSByZXR1cm5zIGFjdGl2ZSBlbGVtZW50IGluc2lkZSBpdFxuICogQHBhcmFtIFtpbkRvY3VtZW50XVxuICovXG5leHBvcnQgdmFyIGdldEFjdGl2ZUVsZW1lbnQgPSBmdW5jdGlvbiAoaW5Eb2N1bWVudCkge1xuICAgIGlmIChpbkRvY3VtZW50ID09PSB2b2lkIDApIHsgaW5Eb2N1bWVudCA9IGRvY3VtZW50OyB9XG4gICAgaWYgKCFpbkRvY3VtZW50IHx8ICFpbkRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBpbkRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIChhY3RpdmVFbGVtZW50LnNoYWRvd1Jvb3RcbiAgICAgICAgPyBnZXRBY3RpdmVFbGVtZW50KGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdClcbiAgICAgICAgOiBhY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgJiYgc2FmZVByb2JlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFjdGl2ZUVsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudDsgfSlcbiAgICAgICAgICAgID8gZ2V0QWN0aXZlRWxlbWVudChhY3RpdmVFbGVtZW50LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpXG4gICAgICAgICAgICA6IGFjdGl2ZUVsZW1lbnQpO1xufTtcbiIsICJpbXBvcnQgeyBjb250YWlucyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QWxsQWZmZWN0ZWROb2RlcyB9IGZyb20gJy4vdXRpbHMvYWxsLWFmZmVjdGVkJztcbmltcG9ydCB7IGdldEZpcnN0LCB0b0FycmF5IH0gZnJvbSAnLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBnZXRBY3RpdmVFbGVtZW50IH0gZnJvbSAnLi91dGlscy9nZXRBY3RpdmVFbGVtZW50JztcbnZhciBmb2N1c0luRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWUsIGFjdGl2ZUVsZW1lbnQpIHsgcmV0dXJuIGZyYW1lID09PSBhY3RpdmVFbGVtZW50OyB9O1xudmFyIGZvY3VzSW5zaWRlSWZyYW1lID0gZnVuY3Rpb24gKHRvcE5vZGUsIGFjdGl2ZUVsZW1lbnQpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0b0FycmF5KHRvcE5vZGUucXVlcnlTZWxlY3RvckFsbCgnaWZyYW1lJykpLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGZvY3VzSW5GcmFtZShub2RlLCBhY3RpdmVFbGVtZW50KTsgfSkpO1xufTtcbi8qKlxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUsIGlmIHRoZSBjdXJyZW50IGZvY3VzIGlzIGluc2lkZSBnaXZlbiBub2RlIG9yIG5vZGVzLlxuICogU3VwcG9ydHMgbm9kZXMgaGlkZGVuIGluc2lkZSBzaGFkb3dEb21cbiAqL1xuZXhwb3J0IHZhciBmb2N1c0luc2lkZSA9IGZ1bmN0aW9uICh0b3BOb2RlLCBhY3RpdmVFbGVtZW50KSB7XG4gICAgLy8gY29uc3QgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGdldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICBpZiAoYWN0aXZlRWxlbWVudCA9PT0gdm9pZCAwKSB7IGFjdGl2ZUVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KGdldEZpcnN0KHRvcE5vZGUpLm93bmVyRG9jdW1lbnQpOyB9XG4gICAgaWYgKCFhY3RpdmVFbGVtZW50IHx8IChhY3RpdmVFbGVtZW50LmRhdGFzZXQgJiYgYWN0aXZlRWxlbWVudC5kYXRhc2V0LmZvY3VzR3VhcmQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGdldEFsbEFmZmVjdGVkTm9kZXModG9wTm9kZSkuc29tZShmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gY29udGFpbnMobm9kZSwgYWN0aXZlRWxlbWVudCkgfHwgZm9jdXNJbnNpZGVJZnJhbWUobm9kZSwgYWN0aXZlRWxlbWVudCk7XG4gICAgfSk7XG59O1xuIiwgImltcG9ydCB7IEZPQ1VTX0FMTE9XIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgY29udGFpbnMgfSBmcm9tICcuL3V0aWxzL0RPTXV0aWxzJztcbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL3V0aWxzL2FycmF5JztcbmltcG9ydCB7IGdldEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQnO1xuLyoqXG4gKiBjaGVja3MgaWYgZm9jdXMgaXMgaGlkZGVuIEZST00gdGhlIGZvY3VzLWxvY2tcbiAqIGllIGNvbnRhaW5lZCBpbnNpZGUgYSBub2RlIGZvY3VzLWxvY2sgc2hhbGwgaWdub3JlXG4gKlxuICogVGhpcyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gY291cGxlZCB3aXRoIHtAbGluayBGT0NVU19BTExPV30gY29uc3RhbnRcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gZm9jdXMgaXMgY3VycmVudGx5IGlzIGluIFwiYWxsb3dcIiBhcmVhXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNJc0hpZGRlbiA9IGZ1bmN0aW9uIChpbkRvY3VtZW50KSB7XG4gICAgaWYgKGluRG9jdW1lbnQgPT09IHZvaWQgMCkgeyBpbkRvY3VtZW50ID0gZG9jdW1lbnQ7IH1cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoaW5Eb2N1bWVudCk7XG4gICAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gdGhpcyBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgRk9DVVNfQUxMT1cgd2l0aGluIHNoYWRvdyBkb21cbiAgICByZXR1cm4gdG9BcnJheShpbkRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbXCIuY29uY2F0KEZPQ1VTX0FMTE9XLCBcIl1cIikpKS5zb21lKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBjb250YWlucyhub2RlLCBhY3RpdmVFbGVtZW50KTsgfSk7XG59O1xuIiwgImltcG9ydCB7IGlzUmFkaW9FbGVtZW50IH0gZnJvbSAnLi9pcyc7XG52YXIgZmluZFNlbGVjdGVkUmFkaW8gPSBmdW5jdGlvbiAobm9kZSwgbm9kZXMpIHtcbiAgICByZXR1cm4gbm9kZXNcbiAgICAgICAgLmZpbHRlcihpc1JhZGlvRWxlbWVudClcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLm5hbWUgPT09IG5vZGUubmFtZTsgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLmNoZWNrZWQ7IH0pWzBdIHx8IG5vZGU7XG59O1xuZXhwb3J0IHZhciBjb3JyZWN0Tm9kZSA9IGZ1bmN0aW9uIChub2RlLCBub2Rlcykge1xuICAgIGlmIChpc1JhZGlvRWxlbWVudChub2RlKSAmJiBub2RlLm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRTZWxlY3RlZFJhZGlvKG5vZGUsIG5vZGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBnaXZpbmcgYSBzZXQgb2YgcmFkaW8gaW5wdXRzIGtlZXBzIG9ubHkgc2VsZWN0ZWQgKHRhYmJhYmxlKSBvbmVzXG4gKiBAcGFyYW0gbm9kZXNcbiAqL1xuZXhwb3J0IHZhciBjb3JyZWN0Tm9kZXMgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICAvLyBJRTExIGhhcyBubyBTZXQoYXJyYXkpIGNvbnN0cnVjdG9yXG4gICAgdmFyIHJlc3VsdFNldCA9IG5ldyBTZXQoKTtcbiAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiByZXN1bHRTZXQuYWRkKGNvcnJlY3ROb2RlKG5vZGUsIG5vZGVzKSk7IH0pO1xuICAgIC8vIHVzaW5nIGZpbHRlciB0byBzdXBwb3J0IElFMTFcbiAgICByZXR1cm4gbm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiByZXN1bHRTZXQuaGFzKG5vZGUpOyB9KTtcbn07XG4iLCAiaW1wb3J0IHsgY29ycmVjdE5vZGUgfSBmcm9tICcuL2NvcnJlY3RGb2N1cyc7XG5leHBvcnQgdmFyIHBpY2tGaXJzdEZvY3VzID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gICAgaWYgKG5vZGVzWzBdICYmIG5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcmV0dXJuIGNvcnJlY3ROb2RlKG5vZGVzWzBdLCBub2Rlcyk7XG4gICAgfVxuICAgIHJldHVybiBub2Rlc1swXTtcbn07XG5leHBvcnQgdmFyIHBpY2tGb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZXMsIG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZXMuaW5kZXhPZihjb3JyZWN0Tm9kZShub2RlLCBub2RlcykpO1xufTtcbiIsICJpbXBvcnQgeyBjb3JyZWN0Tm9kZXMgfSBmcm9tICcuL3V0aWxzL2NvcnJlY3RGb2N1cyc7XG5pbXBvcnQgeyBwaWNrRm9jdXNhYmxlIH0gZnJvbSAnLi91dGlscy9maXJzdEZvY3VzJztcbmltcG9ydCB7IGlzR3VhcmQgfSBmcm9tICcuL3V0aWxzL2lzJztcbmV4cG9ydCB2YXIgTkVXX0ZPQ1VTID0gJ05FV19GT0NVUyc7XG4vKipcbiAqIE1haW4gc29sdmVyIGZvciB0aGUgXCJmaW5kIG5leHQgZm9jdXNcIiBxdWVzdGlvblxuICogQHBhcmFtIGlubmVyTm9kZXMgLSB1c2VkIHRvIGNvbnRyb2wgXCJyZXR1cm4gZm9jdXNcIlxuICogQHBhcmFtIGlubmVyVGFiYmFibGVzIC0gdXNlZCB0byBjb250cm9sIFwiYXV0b2ZvY3VzXCJcbiAqIEBwYXJhbSBvdXRlck5vZGVzXG4gKiBAcGFyYW0gYWN0aXZlRWxlbWVudFxuICogQHBhcmFtIGxhc3ROb2RlXG4gKiBAcmV0dXJucyB7bnVtYmVyfHN0cmluZ3x1bmRlZmluZWR8Kn1cbiAqL1xuZXhwb3J0IHZhciBuZXdGb2N1cyA9IGZ1bmN0aW9uIChpbm5lck5vZGVzLCBpbm5lclRhYmJhYmxlcywgb3V0ZXJOb2RlcywgYWN0aXZlRWxlbWVudCwgbGFzdE5vZGUpIHtcbiAgICB2YXIgY250ID0gaW5uZXJOb2Rlcy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0Rm9jdXMgPSBpbm5lck5vZGVzWzBdO1xuICAgIHZhciBsYXN0Rm9jdXMgPSBpbm5lck5vZGVzW2NudCAtIDFdO1xuICAgIHZhciBpc09uR3VhcmQgPSBpc0d1YXJkKGFjdGl2ZUVsZW1lbnQpO1xuICAgIC8vIGZvY3VzIGlzIGluc2lkZVxuICAgIGlmIChhY3RpdmVFbGVtZW50ICYmIGlubmVyTm9kZXMuaW5kZXhPZihhY3RpdmVFbGVtZW50KSA+PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBhY3RpdmVJbmRleCA9IGFjdGl2ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCA/IG91dGVyTm9kZXMuaW5kZXhPZihhY3RpdmVFbGVtZW50KSA6IC0xO1xuICAgIHZhciBsYXN0SW5kZXggPSBsYXN0Tm9kZSA/IG91dGVyTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiBhY3RpdmVJbmRleDtcbiAgICB2YXIgbGFzdE5vZGVJbnNpZGUgPSBsYXN0Tm9kZSA/IGlubmVyTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiAtMTtcbiAgICAvLyBubyBhY3RpdmUgZm9jdXMgKG9yIGZvY3VzIGlzIG9uIHRoZSBib2R5KVxuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgLy8ga25vd24gZmFsbGJhY2tcbiAgICAgICAgaWYgKGxhc3ROb2RlSW5zaWRlICE9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBORVdfRk9DVVM7XG4gICAgfVxuICAgIC8vIG5ldyBmb2N1cywgbm90aGluZyB0byBjYWxjdWxhdGVcbiAgICBpZiAobGFzdE5vZGVJbnNpZGUgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBORVdfRk9DVVM7XG4gICAgfVxuICAgIHZhciBpbmRleERpZmYgPSBhY3RpdmVJbmRleCAtIGxhc3RJbmRleDtcbiAgICB2YXIgZmlyc3ROb2RlSW5kZXggPSBvdXRlck5vZGVzLmluZGV4T2YoZmlyc3RGb2N1cyk7XG4gICAgdmFyIGxhc3ROb2RlSW5kZXggPSBvdXRlck5vZGVzLmluZGV4T2YobGFzdEZvY3VzKTtcbiAgICB2YXIgY29ycmVjdGVkTm9kZXMgPSBjb3JyZWN0Tm9kZXMob3V0ZXJOb2Rlcyk7XG4gICAgdmFyIGN1cnJlbnRGb2N1c2FibGVJbmRleCA9IGFjdGl2ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCA/IGNvcnJlY3RlZE5vZGVzLmluZGV4T2YoYWN0aXZlRWxlbWVudCkgOiAtMTtcbiAgICB2YXIgcHJldmlvdXNGb2N1c2FibGVJbmRleCA9IGxhc3ROb2RlID8gY29ycmVjdGVkTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiBjdXJyZW50Rm9jdXNhYmxlSW5kZXg7XG4gICAgdmFyIHRhYmJhYmxlTm9kZXMgPSBjb3JyZWN0ZWROb2Rlcy5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUudGFiSW5kZXggPj0gMDsgfSk7XG4gICAgdmFyIGN1cnJlbnRUYWJiYWJsZUluZGV4ID0gYWN0aXZlRWxlbWVudCAhPT0gdW5kZWZpbmVkID8gdGFiYmFibGVOb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpIDogLTE7XG4gICAgdmFyIHByZXZpb3VzVGFiYmFibGVJbmRleCA9IGxhc3ROb2RlID8gdGFiYmFibGVOb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IGN1cnJlbnRUYWJiYWJsZUluZGV4O1xuICAgIHZhciBmb2N1c0luZGV4RGlmZiA9IGN1cnJlbnRUYWJiYWJsZUluZGV4ID49IDAgJiYgcHJldmlvdXNUYWJiYWJsZUluZGV4ID49IDBcbiAgICAgICAgPyAvLyBvbGQvbmV3IGFyZSB0YWJiYWJsZXMsIG1lYXN1cmUgZGlzdGFuY2UgaW4gdGFiYmFibGUgc3BhY2VcbiAgICAgICAgICAgIHByZXZpb3VzVGFiYmFibGVJbmRleCAtIGN1cnJlbnRUYWJiYWJsZUluZGV4XG4gICAgICAgIDogLy8gb3IgZWxzZSBtZWFzdXJlIGluIGZvY3VzYWJsZSBzcGFjZVxuICAgICAgICAgICAgcHJldmlvdXNGb2N1c2FibGVJbmRleCAtIGN1cnJlbnRGb2N1c2FibGVJbmRleDtcbiAgICAvLyBvbGQgZm9jdXNcbiAgICBpZiAoIWluZGV4RGlmZiAmJiBsYXN0Tm9kZUluc2lkZSA+PSAwKSB7XG4gICAgICAgIHJldHVybiBsYXN0Tm9kZUluc2lkZTtcbiAgICB9XG4gICAgLy8gbm8gdGFiYmFibGUgZWxlbWVudHMsIGF1dG9mb2N1cyBpcyBub3QgcG9zc2libGVcbiAgICBpZiAoaW5uZXJUYWJiYWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGFuIGVkZ2UgY2FzZSB3aXRoIG5vIHRhYmJhYmxlIGVsZW1lbnRzXG4gICAgICAgIC8vIHJldHVybiB0aGUgbGFzdCBmb2N1c2FibGUgb25lXG4gICAgICAgIC8vIHdpdGggc29tZSBwcm9iYWJpbGl0eSB0aGlzIHdpbGwgcHJldmVudCBmb2N1cyBmcm9tIGN5Y2xpbmcgYWNyb3NzIHRoZSBsb2NrLCBidXQgdGhlcmUgaXMgbm8gdGFiYmFsZSBlbGVtZW50cyB0byBjeWNsZSB0b1xuICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgfVxuICAgIHZhciByZXR1cm5GaXJzdE5vZGUgPSBwaWNrRm9jdXNhYmxlKGlubmVyTm9kZXMsIGlubmVyVGFiYmFibGVzWzBdKTtcbiAgICB2YXIgcmV0dXJuTGFzdE5vZGUgPSBwaWNrRm9jdXNhYmxlKGlubmVyTm9kZXMsIGlubmVyVGFiYmFibGVzW2lubmVyVGFiYmFibGVzLmxlbmd0aCAtIDFdKTtcbiAgICAvLyBmaXJzdCBlbGVtZW50XG4gICAgaWYgKGFjdGl2ZUluZGV4IDw9IGZpcnN0Tm9kZUluZGV4ICYmIGlzT25HdWFyZCAmJiBNYXRoLmFicyhpbmRleERpZmYpID4gMSkge1xuICAgICAgICByZXR1cm4gcmV0dXJuTGFzdE5vZGU7XG4gICAgfVxuICAgIC8vIGxhc3QgZWxlbWVudFxuICAgIGlmIChhY3RpdmVJbmRleCA+PSBsYXN0Tm9kZUluZGV4ICYmIGlzT25HdWFyZCAmJiBNYXRoLmFicyhpbmRleERpZmYpID4gMSkge1xuICAgICAgICByZXR1cm4gcmV0dXJuRmlyc3ROb2RlO1xuICAgIH1cbiAgICAvLyBqdW1wIG91dCwgYnV0IG5vdCBvbiB0aGUgZ3VhcmRcbiAgICBpZiAoaW5kZXhEaWZmICYmIE1hdGguYWJzKGZvY3VzSW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgIH1cbiAgICAvLyBmb2N1cyBhYm92ZSBsb2NrXG4gICAgaWYgKGFjdGl2ZUluZGV4IDw9IGZpcnN0Tm9kZUluZGV4KSB7XG4gICAgICAgIHJldHVybiByZXR1cm5MYXN0Tm9kZTtcbiAgICB9XG4gICAgLy8gZm9jdXMgYmVsb3cgbG9ja1xuICAgIGlmIChhY3RpdmVJbmRleCA+IGxhc3ROb2RlSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkZpcnN0Tm9kZTtcbiAgICB9XG4gICAgLy8gaW5kZXggaXMgaW5zaWRlIHRhYiBvcmRlciwgYnV0IG91dHNpZGUgTG9ja1xuICAgIGlmIChpbmRleERpZmYpIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKGluZGV4RGlmZikgPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChjbnQgKyBsYXN0Tm9kZUluc2lkZSArIGluZGV4RGlmZikgJSBjbnQ7XG4gICAgfVxuICAgIC8vIGRvIG5vdGhpbmdcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsICJpbXBvcnQgeyBmaWx0ZXJBdXRvRm9jdXNhYmxlIH0gZnJvbSAnLi9ET011dGlscyc7XG5pbXBvcnQgeyBwaWNrRmlyc3RGb2N1cyB9IGZyb20gJy4vZmlyc3RGb2N1cyc7XG5pbXBvcnQgeyBnZXREYXRhc2V0IH0gZnJvbSAnLi9pcyc7XG52YXIgZmluZEF1dG9Gb2N1c2VkID0gZnVuY3Rpb24gKGF1dG9Gb2N1c2FibGVzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIGF1dG9mb2N1cyA9IChfYSA9IGdldERhdGFzZXQobm9kZSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hdXRvZm9jdXM7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgbm9kZS5hdXRvZm9jdXMgfHxcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAoYXV0b2ZvY3VzICE9PSB1bmRlZmluZWQgJiYgYXV0b2ZvY3VzICE9PSAnZmFsc2UnKSB8fFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIGF1dG9Gb2N1c2FibGVzLmluZGV4T2Yobm9kZSkgPj0gMCk7XG4gICAgfTtcbn07XG5leHBvcnQgdmFyIHBpY2tBdXRvZm9jdXMgPSBmdW5jdGlvbiAobm9kZXNJbmRleGVzLCBvcmRlcmVkTm9kZXMsIGdyb3Vwcykge1xuICAgIHZhciBub2RlcyA9IG5vZGVzSW5kZXhlcy5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSk7XG4gICAgdmFyIGF1dG9Gb2N1c2FibGUgPSBmaWx0ZXJBdXRvRm9jdXNhYmxlKG5vZGVzLmZpbHRlcihmaW5kQXV0b0ZvY3VzZWQoZ3JvdXBzKSkpO1xuICAgIGlmIChhdXRvRm9jdXNhYmxlICYmIGF1dG9Gb2N1c2FibGUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBwaWNrRmlyc3RGb2N1cyhhdXRvRm9jdXNhYmxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHBpY2tGaXJzdEZvY3VzKGZpbHRlckF1dG9Gb2N1c2FibGUob3JkZXJlZE5vZGVzKSk7XG59O1xuIiwgImltcG9ydCB7IHBhcmVudEF1dG9mb2N1c2FibGVzIH0gZnJvbSAnLi9ET011dGlscyc7XG5pbXBvcnQgeyBjb250YWlucyB9IGZyb20gJy4vRE9NdXRpbHMnO1xuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJy4vYXJyYXknO1xudmFyIGdldFBhcmVudHMgPSBmdW5jdGlvbiAobm9kZSwgcGFyZW50cykge1xuICAgIGlmIChwYXJlbnRzID09PSB2b2lkIDApIHsgcGFyZW50cyA9IFtdOyB9XG4gICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgZ2V0UGFyZW50cyhub2RlLnBhcmVudE5vZGUuaG9zdCB8fCBub2RlLnBhcmVudE5vZGUsIHBhcmVudHMpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyZW50cztcbn07XG4vKipcbiAqIGZpbmRzIGEgcGFyZW50IGZvciBib3RoIG5vZGVBIGFuZCBub2RlQlxuICogQHBhcmFtIG5vZGVBXG4gKiBAcGFyYW0gbm9kZUJcbiAqIEByZXR1cm5zIHtib29sZWFufCp9XG4gKi9cbmV4cG9ydCB2YXIgZ2V0Q29tbW9uUGFyZW50ID0gZnVuY3Rpb24gKG5vZGVBLCBub2RlQikge1xuICAgIHZhciBwYXJlbnRzQSA9IGdldFBhcmVudHMobm9kZUEpO1xuICAgIHZhciBwYXJlbnRzQiA9IGdldFBhcmVudHMobm9kZUIpO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJlbnRzQS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIgY3VycmVudFBhcmVudCA9IHBhcmVudHNBW2ldO1xuICAgICAgICBpZiAocGFyZW50c0IuaW5kZXhPZihjdXJyZW50UGFyZW50KSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IHZhciBnZXRUb3BDb21tb25QYXJlbnQgPSBmdW5jdGlvbiAoYmFzZUFjdGl2ZUVsZW1lbnQsIGxlZnRFbnRyeSwgcmlnaHRFbnRyaWVzKSB7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnRzID0gYXNBcnJheShiYXNlQWN0aXZlRWxlbWVudCk7XG4gICAgdmFyIGxlZnRFbnRyaWVzID0gYXNBcnJheShsZWZ0RW50cnkpO1xuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gYWN0aXZlRWxlbWVudHNbMF07XG4gICAgdmFyIHRvcENvbW1vbiA9IGZhbHNlO1xuICAgIGxlZnRFbnRyaWVzLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICB0b3BDb21tb24gPSBnZXRDb21tb25QYXJlbnQodG9wQ29tbW9uIHx8IGVudHJ5LCBlbnRyeSkgfHwgdG9wQ29tbW9uO1xuICAgICAgICByaWdodEVudHJpZXMuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKHN1YkVudHJ5KSB7XG4gICAgICAgICAgICB2YXIgY29tbW9uID0gZ2V0Q29tbW9uUGFyZW50KGFjdGl2ZUVsZW1lbnQsIHN1YkVudHJ5KTtcbiAgICAgICAgICAgIGlmIChjb21tb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRvcENvbW1vbiB8fCBjb250YWlucyhjb21tb24sIHRvcENvbW1vbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wQ29tbW9uID0gY29tbW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wQ29tbW9uID0gZ2V0Q29tbW9uUGFyZW50KGNvbW1vbiwgdG9wQ29tbW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIFRPRE86IGFkZCBhc3NlcnQgaGVyZT9cbiAgICByZXR1cm4gdG9wQ29tbW9uO1xufTtcbi8qKlxuICogcmV0dXJuIGxpc3Qgb2Ygbm9kZXMgd2hpY2ggYXJlIGV4cGVjdGVkIHRvIGJlIGF1dG9mb2N1c2VkIGluc2lkZSBhIGdpdmVuIHRvcCBub2Rlc1xuICogQHBhcmFtIGVudHJpZXNcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGVcbiAqL1xuZXhwb3J0IHZhciBhbGxQYXJlbnRBdXRvZm9jdXNhYmxlcyA9IGZ1bmN0aW9uIChlbnRyaWVzLCB2aXNpYmlsaXR5Q2FjaGUpIHtcbiAgICByZXR1cm4gZW50cmllcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbm9kZSkgeyByZXR1cm4gYWNjLmNvbmNhdChwYXJlbnRBdXRvZm9jdXNhYmxlcyhub2RlLCB2aXNpYmlsaXR5Q2FjaGUpKTsgfSwgW10pO1xufTtcbiIsICJpbXBvcnQgeyBORVdfRk9DVVMsIG5ld0ZvY3VzIH0gZnJvbSAnLi9zb2x2ZXInO1xuaW1wb3J0IHsgZ2V0Rm9jdXNhYmxlTm9kZXMgfSBmcm9tICcuL3V0aWxzL0RPTXV0aWxzJztcbmltcG9ydCB7IGdldEFsbEFmZmVjdGVkTm9kZXMgfSBmcm9tICcuL3V0aWxzL2FsbC1hZmZlY3RlZCc7XG5pbXBvcnQgeyBhc0FycmF5LCBnZXRGaXJzdCB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgcGlja0F1dG9mb2N1cyB9IGZyb20gJy4vdXRpbHMvYXV0by1mb2N1cyc7XG5pbXBvcnQgeyBnZXRBY3RpdmVFbGVtZW50IH0gZnJvbSAnLi91dGlscy9nZXRBY3RpdmVFbGVtZW50JztcbmltcG9ydCB7IGlzRGVmaW5lZCwgaXNOb3RBR3VhcmQgfSBmcm9tICcuL3V0aWxzL2lzJztcbmltcG9ydCB7IGFsbFBhcmVudEF1dG9mb2N1c2FibGVzLCBnZXRUb3BDb21tb25QYXJlbnQgfSBmcm9tICcuL3V0aWxzL3BhcmVudGluZyc7XG52YXIgcmVvcmRlck5vZGVzID0gZnVuY3Rpb24gKHNyY05vZGVzLCBkc3ROb2Rlcykge1xuICAgIHZhciByZW1hcCA9IG5ldyBNYXAoKTtcbiAgICAvLyBubyBTZXQoZHN0Tm9kZXMpIGZvciBJRTExIDooXG4gICAgZHN0Tm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoZW50aXR5KSB7IHJldHVybiByZW1hcC5zZXQoZW50aXR5Lm5vZGUsIGVudGl0eSk7IH0pO1xuICAgIC8vIHJlbWFwIHRvIGRzdE5vZGVzXG4gICAgcmV0dXJuIHNyY05vZGVzLm1hcChmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gcmVtYXAuZ2V0KG5vZGUpOyB9KS5maWx0ZXIoaXNEZWZpbmVkKTtcbn07XG4vKipcbiAqIGNvbnRhaW5zIHRoZSBtYWluIGxvZ2ljIG9mIHRoZSBgZm9jdXMtbG9ja2AgcGFja2FnZS5cbiAqXG4gKiAhIHlvdSBwcm9iYWJseSBkb250IG5lZWQgdGhpcyBmdW5jdGlvbiAhXG4gKlxuICogZ2l2ZW4gdG9wIG5vZGUocykgYW5kIHRoZSBsYXN0IGFjdGl2ZSBlbGVtZW50IHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYmUgZm9jdXNlZCBuZXh0XG4gKiBAcmV0dXJucyBlbGVtZW50IHdoaWNoIHNob3VsZCBiZSBmb2N1c2VkIHRvIG1vdmUgZm9jdXMgaW5zaWRlXG4gKiBAcGFyYW0gdG9wTm9kZVxuICogQHBhcmFtIGxhc3ROb2RlXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNTb2x2ZXIgPSBmdW5jdGlvbiAodG9wTm9kZSwgbGFzdE5vZGUpIHtcbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoYXNBcnJheSh0b3BOb2RlKS5sZW5ndGggPiAwID8gZG9jdW1lbnQgOiBnZXRGaXJzdCh0b3BOb2RlKS5vd25lckRvY3VtZW50KTtcbiAgICB2YXIgZW50cmllcyA9IGdldEFsbEFmZmVjdGVkTm9kZXModG9wTm9kZSkuZmlsdGVyKGlzTm90QUd1YXJkKTtcbiAgICB2YXIgY29tbW9uUGFyZW50ID0gZ2V0VG9wQ29tbW9uUGFyZW50KGFjdGl2ZUVsZW1lbnQgfHwgdG9wTm9kZSwgdG9wTm9kZSwgZW50cmllcyk7XG4gICAgdmFyIHZpc2liaWxpdHlDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICB2YXIgYW55Rm9jdXNhYmxlID0gZ2V0Rm9jdXNhYmxlTm9kZXMoZW50cmllcywgdmlzaWJpbGl0eUNhY2hlKTtcbiAgICB2YXIgaW5uZXJFbGVtZW50cyA9IGFueUZvY3VzYWJsZS5maWx0ZXIoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZTtcbiAgICAgICAgcmV0dXJuIGlzTm90QUd1YXJkKG5vZGUpO1xuICAgIH0pO1xuICAgIGlmICghaW5uZXJFbGVtZW50c1swXSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgb3V0ZXJOb2RlcyA9IGdldEZvY3VzYWJsZU5vZGVzKFtjb21tb25QYXJlbnRdLCB2aXNpYmlsaXR5Q2FjaGUpLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgb3JkZXJlZElubmVyRWxlbWVudHMgPSByZW9yZGVyTm9kZXMob3V0ZXJOb2RlcywgaW5uZXJFbGVtZW50cyk7XG4gICAgLy8gY29sbGVjdCBpbm5lciBmb2N1c2FibGUgYW5kIHNlcGFyYXRlbHkgdGFiYmFibGVzXG4gICAgdmFyIGlubmVyRm9jdXNhYmxlcyA9IG9yZGVyZWRJbm5lckVsZW1lbnRzLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgaW5uZXJUYWJiYWJsZSA9IG9yZGVyZWRJbm5lckVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIHRhYkluZGV4ID0gX2EudGFiSW5kZXg7XG4gICAgICAgIHJldHVybiB0YWJJbmRleCA+PSAwO1xuICAgIH0pLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgbmV3SWQgPSBuZXdGb2N1cyhpbm5lckZvY3VzYWJsZXMsIGlubmVyVGFiYmFibGUsIG91dGVyTm9kZXMsIGFjdGl2ZUVsZW1lbnQsIGxhc3ROb2RlKTtcbiAgICBpZiAobmV3SWQgPT09IE5FV19GT0NVUykge1xuICAgICAgICB2YXIgZm9jdXNOb2RlID0gXG4gICAgICAgIC8vIGZpcnN0IHRyeSBvbmx5IHRhYmJhYmxlLCBhbmQgdGhlIGZhbGxiYWNrIHRvIGFsbCBmb2N1c2FibGUsIGFzIGxvbmcgYXMgYXQgbGVhc3Qgb25lIGVsZW1lbnQgc2hvdWxkIGJlIHBpY2tlZCBmb3IgZm9jdXNcbiAgICAgICAgcGlja0F1dG9mb2N1cyhhbnlGb2N1c2FibGUsIGlubmVyVGFiYmFibGUsIGFsbFBhcmVudEF1dG9mb2N1c2FibGVzKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSkpIHx8XG4gICAgICAgICAgICBwaWNrQXV0b2ZvY3VzKGFueUZvY3VzYWJsZSwgaW5uZXJGb2N1c2FibGVzLCBhbGxQYXJlbnRBdXRvZm9jdXNhYmxlcyhlbnRyaWVzLCB2aXNpYmlsaXR5Q2FjaGUpKTtcbiAgICAgICAgaWYgKGZvY3VzTm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbm9kZTogZm9jdXNOb2RlIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZvY3VzLWxvY2s6IGNhbm5vdCBmaW5kIGFueSBub2RlIHRvIG1vdmUgZm9jdXMgaW50bycpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAobmV3SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmV3SWQ7XG4gICAgfVxuICAgIHJldHVybiBvcmRlcmVkSW5uZXJFbGVtZW50c1tuZXdJZF07XG59O1xuIiwgImltcG9ydCB7IGdldEFsbEFmZmVjdGVkTm9kZXMgfSBmcm9tICcuL3V0aWxzL2FsbC1hZmZlY3RlZCc7XG5pbXBvcnQgeyBpc0d1YXJkLCBpc05vdEFHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgZ2V0VG9wQ29tbW9uUGFyZW50IH0gZnJvbSAnLi91dGlscy9wYXJlbnRpbmcnO1xuaW1wb3J0IHsgb3JkZXJCeVRhYkluZGV4IH0gZnJvbSAnLi91dGlscy90YWJPcmRlcic7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVzIH0gZnJvbSAnLi91dGlscy90YWJVdGlscyc7XG4vKipcbiAqIHRyYXZlcnNlcyBhbGwgcmVsYXRlZCBub2RlcyAoaW5jbHVkaW5nIGdyb3VwcykgcmV0dXJuaW5nIGEgbGlzdCBvZiBhbGwgbm9kZXMob3V0ZXIgYW5kIGludGVybmFsKSB3aXRoIG1ldGEgaW5mb3JtYXRpb25cbiAqIFRoaXMgaXMgbG93LWxldmVsIEFQSSFcbiAqIEByZXR1cm5zIGxpc3Qgb2YgZm9jdXNhYmxlIGVsZW1lbnRzIGluc2lkZSBhIGdpdmVuIHRvcCghKSBub2RlLlxuICogQHNlZSB7QGxpbmsgZ2V0Rm9jdXNhYmxlTm9kZXN9IHByb3ZpZGluZyBhIHNpbXBsZXIgQVBJXG4gKi9cbmV4cG9ydCB2YXIgZXhwYW5kRm9jdXNhYmxlTm9kZXMgPSBmdW5jdGlvbiAodG9wTm9kZSkge1xuICAgIHZhciBlbnRyaWVzID0gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5maWx0ZXIoaXNOb3RBR3VhcmQpO1xuICAgIHZhciBjb21tb25QYXJlbnQgPSBnZXRUb3BDb21tb25QYXJlbnQodG9wTm9kZSwgdG9wTm9kZSwgZW50cmllcyk7XG4gICAgdmFyIG91dGVyTm9kZXMgPSBvcmRlckJ5VGFiSW5kZXgoZ2V0Rm9jdXNhYmxlcyhbY29tbW9uUGFyZW50XSwgdHJ1ZSksIHRydWUsIHRydWUpO1xuICAgIHZhciBpbm5lckVsZW1lbnRzID0gZ2V0Rm9jdXNhYmxlcyhlbnRyaWVzLCBmYWxzZSk7XG4gICAgcmV0dXJuIG91dGVyTm9kZXMubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGUsIGluZGV4ID0gX2EuaW5kZXg7XG4gICAgICAgIHJldHVybiAoe1xuICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIGxvY2tJdGVtOiBpbm5lckVsZW1lbnRzLmluZGV4T2Yobm9kZSkgPj0gMCxcbiAgICAgICAgICAgIGd1YXJkOiBpc0d1YXJkKG5vZGUpLFxuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG4iLCAiZXhwb3J0IHZhciBmb2N1c09uID0gZnVuY3Rpb24gKHRhcmdldCwgZm9jdXNPcHRpb25zKSB7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgLy8gbm90IGNsZWFyIGhvdywgYnV0IGlzIHBvc3NpYmxlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvZm9jdXMtbG9jay9pc3N1ZXMvNTNcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoJ2ZvY3VzJyBpbiB0YXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0LmZvY3VzKGZvY3VzT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmICgnY29udGVudFdpbmRvdycgaW4gdGFyZ2V0ICYmIHRhcmdldC5jb250ZW50V2luZG93KSB7XG4gICAgICAgIHRhcmdldC5jb250ZW50V2luZG93LmZvY3VzKCk7XG4gICAgfVxufTtcbiIsICJpbXBvcnQgeyBmb2N1c09uIH0gZnJvbSAnLi9jb21tYW5kcyc7XG5pbXBvcnQgeyBmb2N1c1NvbHZlciB9IGZyb20gJy4vZm9jdXNTb2x2ZXInO1xudmFyIGd1YXJkQ291bnQgPSAwO1xudmFyIGxvY2tEaXNhYmxlZCA9IGZhbHNlO1xuLyoqXG4gKiBUaGUgbWFpbiBmdW5jdGlvbmFsaXR5IG9mIHRoZSBmb2N1cy1sb2NrIHBhY2thZ2VcbiAqXG4gKiBDb250YWlucyBmb2N1cyBhdCBhIGdpdmVuIG5vZGUuXG4gKiBUaGUgbGFzdCBmb2N1c2VkIGVsZW1lbnQgd2lsbCBoZWxwIHRvIGRldGVybWluZSB3aGljaCBlbGVtZW50KGZpcnN0IG9yIGxhc3QpIHNob3VsZCBiZSBmb2N1c2VkLlxuICogVGhlIGZvdW5kIGVsZW1lbnQgd2lsbCBiZSBmb2N1c2VkLlxuICpcbiAqIFRoaXMgaXMgb25lIHRpbWUgYWN0aW9uIChtb3ZlKSwgbm90IGEgcGVyc2lzdGVudCBmb2N1cy1sb2NrXG4gKlxuICogSFRNTCBtYXJrZXJzIChzZWUge0BsaW5rIGltcG9ydCgnLi9jb25zdGFudHMnKS5GT0NVU19BVVRPfSBjb25zdGFudHMpIGNhbiBjb250cm9sIGF1dG9mb2N1c1xuICogQHNlZSB7QGxpbmsgZm9jdXNTb2x2ZXJ9IGZvciB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IHdpdGhvdXQgYXV0b2ZvY3VzXG4gKi9cbmV4cG9ydCB2YXIgbW92ZUZvY3VzSW5zaWRlID0gZnVuY3Rpb24gKHRvcE5vZGUsIGxhc3ROb2RlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgZm9jdXNhYmxlID0gZm9jdXNTb2x2ZXIodG9wTm9kZSwgbGFzdE5vZGUpO1xuICAgIC8vIGdsb2JhbCBsb2NhbCBzaWRlIGVmZmVjdCB0byBjb3VudGFpbiByZWN1cnNpdmUgbG9jayBhY3RpdmF0aW9uIGFuZCByZXNvbHZlIGZvY3VzLWZpZ2h0aW5nXG4gICAgaWYgKGxvY2tEaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChmb2N1c2FibGUpIHtcbiAgICAgICAgLyoqICtGT0NVUy1GSUdIVElORyBwcmV2ZW50aW9uICoqL1xuICAgICAgICBpZiAoZ3VhcmRDb3VudCA+IDIpIHtcbiAgICAgICAgICAgIC8vIHdlIGhhdmUgcmVjdXJzaXZlIGVudGVyZWQgYmFjayB0aGUgbG9jayBhY3RpdmF0aW9uXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGb2N1c0xvY2s6IGZvY3VzLWZpZ2h0aW5nIGRldGVjdGVkLiBPbmx5IG9uZSBmb2N1cyBtYW5hZ2VtZW50IHN5c3RlbSBjb3VsZCBiZSBhY3RpdmUuICcgK1xuICAgICAgICAgICAgICAgICdTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS9mb2N1cy1sb2NrLyNmb2N1cy1maWdodGluZycpO1xuICAgICAgICAgICAgbG9ja0Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxvY2tEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZ3VhcmRDb3VudCsrO1xuICAgICAgICBmb2N1c09uKGZvY3VzYWJsZS5ub2RlLCBvcHRpb25zLmZvY3VzT3B0aW9ucyk7XG4gICAgICAgIGd1YXJkQ291bnQtLTtcbiAgICB9XG59O1xuIiwgImltcG9ydCB7IGdldFRhYmJhYmxlTm9kZXMgfSBmcm9tICcuL3V0aWxzL0RPTXV0aWxzJztcbmZ1bmN0aW9uIHdlYWtSZWYodmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyAjNjggU2FmYXJpIDE0LjEgZG9udCBoYXZlIGl0IHlldFxuICAgIC8vIEZJWE1FOiByZW1vdmUgaW4gMjAyNVxuICAgIGlmICh0eXBlb2YgV2Vha1JlZiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlIHx8IG51bGw7IH07XG4gICAgfVxuICAgIHZhciB3ID0gdmFsdWUgPyBuZXcgV2Vha1JlZih2YWx1ZSkgOiBudWxsO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiAodyA9PT0gbnVsbCB8fCB3ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3LmRlcmVmKCkpIHx8IG51bGw7IH07XG59XG5leHBvcnQgdmFyIHJlY29yZEVsZW1lbnRMb2NhdGlvbiA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCAmJiBjdXJyZW50RWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIGN1cnJlbnQ6IHdlYWtSZWYoY3VycmVudEVsZW1lbnQpLFxuICAgICAgICAgICAgcGFyZW50OiB3ZWFrUmVmKGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQpLFxuICAgICAgICAgICAgbGVmdDogd2Vha1JlZihjdXJyZW50RWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSxcbiAgICAgICAgICAgIHJpZ2h0OiB3ZWFrUmVmKGN1cnJlbnRFbGVtZW50Lm5leHRFbGVtZW50U2libGluZyksXG4gICAgICAgIH0pO1xuICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGVsZW1lbnQ6IHdlYWtSZWYoZWxlbWVudCksXG4gICAgICAgIHN0YWNrOiBzdGFjayxcbiAgICAgICAgb3duZXJEb2N1bWVudDogZWxlbWVudC5vd25lckRvY3VtZW50LFxuICAgIH07XG59O1xudmFyIHJlc3RvcmVGb2N1c1RvID0gZnVuY3Rpb24gKGxvY2F0aW9uKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBzdGFjayA9IGxvY2F0aW9uLnN0YWNrLCBvd25lckRvY3VtZW50ID0gbG9jYXRpb24ub3duZXJEb2N1bWVudDtcbiAgICB2YXIgdmlzaWJpbGl0eUNhY2hlID0gbmV3IE1hcCgpO1xuICAgIGZvciAodmFyIF9pID0gMCwgc3RhY2tfMSA9IHN0YWNrOyBfaSA8IHN0YWNrXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBsaW5lID0gc3RhY2tfMVtfaV07XG4gICAgICAgIHZhciBwYXJlbnRfMSA9IChfYSA9IGxpbmUucGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChsaW5lKTtcbiAgICAgICAgLy8gaXMgaXQgc3RpbGwgaGVyZT9cbiAgICAgICAgaWYgKHBhcmVudF8xICYmIG93bmVyRG9jdW1lbnQuY29udGFpbnMocGFyZW50XzEpKSB7XG4gICAgICAgICAgICB2YXIgbGVmdCA9IChfYiA9IGxpbmUubGVmdCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwobGluZSk7XG4gICAgICAgICAgICB2YXIgc2F2ZWRDdXJyZW50ID0gbGluZS5jdXJyZW50KCk7XG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IHBhcmVudF8xLmNvbnRhaW5zKHNhdmVkQ3VycmVudCkgPyBzYXZlZEN1cnJlbnQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB2YXIgcmlnaHQgPSAoX2MgPSBsaW5lLnJpZ2h0KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuY2FsbChsaW5lKTtcbiAgICAgICAgICAgIHZhciBmb2N1c2FibGVzID0gZ2V0VGFiYmFibGVOb2RlcyhbcGFyZW50XzFdLCB2aXNpYmlsaXR5Q2FjaGUpO1xuICAgICAgICAgICAgdmFyIGFpbSA9IFxuICAgICAgICAgICAgLy8gdGhhdCBpcyBlbGVtZW50IGl0c2VsZlxuICAgICAgICAgICAgKF9lID0gKF9kID0gY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50ICE9PSB2b2lkIDAgPyBjdXJyZW50IDogXG4gICAgICAgICAgICAvLyBvciBzb21ldGhpbmcgaW4gaXQncyBwbGFjZVxuICAgICAgICAgICAgbGVmdCA9PT0gbnVsbCB8fCBsZWZ0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsZWZ0Lm5leHRFbGVtZW50U2libGluZykgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogXG4gICAgICAgICAgICAvLyBvciBzb21lYm9keSB0byB0aGUgcmlnaHQsIHN0aWxsIGNsb3NlIGVub3VnaFxuICAgICAgICAgICAgcmlnaHQpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IFxuICAgICAgICAgICAgLy8gb3Igc29tZWJvZHkgdG8gdGhlIGxlZnQsIHNvbWV0aGluZz9cbiAgICAgICAgICAgIGxlZnQ7XG4gICAgICAgICAgICB3aGlsZSAoYWltKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2YgPSAwLCBmb2N1c2FibGVzXzEgPSBmb2N1c2FibGVzOyBfZiA8IGZvY3VzYWJsZXNfMS5sZW5ndGg7IF9mKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvY3VzYWJsZSA9IGZvY3VzYWJsZXNfMVtfZl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChhaW0gPT09IG51bGwgfHwgYWltID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhaW0uY29udGFpbnMoZm9jdXNhYmxlLm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlLm5vZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWltID0gYWltLm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb2N1c2FibGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHBhcmVudCBjb250YWlucyBhIGZvY3VzYWJsZSAtIG1vdmUgdGhlcmVcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlc1swXS5ub2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vdGhpbmcgbWF0Y2hlZFxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBDYXB0dXJlcyB0aGUgY3VycmVudCBmb2N1c2VkIGVsZW1lbnQgdG8gcmVzdG9yZSBmb2N1cyBhcyBjbG9zZSBhcyBwb3NzaWJsZSBpbiB0aGUgZnV0dXJlXG4gKiBIYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGZvY3VzZWQgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIERPTSBvciBubyBsb25nZXIgZm9jdXNhYmxlXG4gKiBtb3ZpbmcgZm9jdXMgdG8gdGhlIGNsb3Nlc3QgZm9jdXNhYmxlIGVsZW1lbnRcbiAqIEBwYXJhbSB0YXJnZXRFbGVtZW50IC0gZWxlbWVudCB3aGVyZSBmb2N1cyBzaG91bGQgYmUgcmVzdG9yZWRcbiAqIEByZXR1cm5zIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgbmV3IGVsZW1lbnQgdG8gZm9jdXNcbiAqL1xuZXhwb3J0IHZhciBjYXB0dXJlRm9jdXNSZXN0b3JlID0gZnVuY3Rpb24gKHRhcmdldEVsZW1lbnQpIHtcbiAgICB2YXIgbG9jYXRpb24gPSByZWNvcmRFbGVtZW50TG9jYXRpb24odGFyZ2V0RWxlbWVudCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJlc3RvcmVGb2N1c1RvKGxvY2F0aW9uKTtcbiAgICB9O1xufTtcbiIsICJpbXBvcnQgeyBmb2N1c09uIH0gZnJvbSAnLi9jb21tYW5kcyc7XG5pbXBvcnQgeyBnZXRUYWJiYWJsZU5vZGVzLCBjb250YWlucywgZ2V0Rm9jdXNhYmxlTm9kZXMgfSBmcm9tICcuL3V0aWxzL0RPTXV0aWxzJztcbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICcuL3V0aWxzL2FycmF5Jztcbi8qKlxuICogZm9yIGEgZ2l2ZW4gYGVsZW1lbnRgIGluIGEgZ2l2ZW4gYHNjb3BlYCByZXR1cm5zIGZvY3VzYWJsZSBzaWJsaW5nc1xuICogQHBhcmFtIGVsZW1lbnQgLSBiYXNlIGVsZW1lbnRcbiAqIEBwYXJhbSBzY29wZSAtIGNvbW1vbiBwYXJlbnQuIENhbiBiZSBkb2N1bWVudCwgYnV0IGJldHRlciB0byBuYXJyb3cgaXQgZG93biBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICogQHJldHVybnMge3ByZXYsbmV4dH0gLSByZWZlcmVuY2VzIHRvIGEgZm9jdXNhYmxlIGVsZW1lbnQgYmVmb3JlIGFuZCBhZnRlclxuICogQHJldHVybnMgdW5kZWZpbmVkIC0gaWYgb3BlcmF0aW9uIGlzIG5vdCBhcHBsaWNhYmxlXG4gKi9cbmV4cG9ydCB2YXIgZ2V0UmVsYXRpdmVGb2N1c2FibGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgc2NvcGUsIHVzZVRhYmJhYmxlcykge1xuICAgIGlmICghZWxlbWVudCB8fCAhc2NvcGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignbm8gZWxlbWVudCBvciBzY29wZSBnaXZlbicpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHZhciBzaGFyZHMgPSBhc0FycmF5KHNjb3BlKTtcbiAgICBpZiAoc2hhcmRzLmV2ZXJ5KGZ1bmN0aW9uIChzaGFyZCkgeyByZXR1cm4gIWNvbnRhaW5zKHNoYXJkLCBlbGVtZW50KTsgfSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQWN0aXZlIGVsZW1lbnQgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgc2NvcGUnKTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICB2YXIgZm9jdXNhYmxlcyA9IHVzZVRhYmJhYmxlc1xuICAgICAgICA/IGdldFRhYmJhYmxlTm9kZXMoc2hhcmRzLCBuZXcgTWFwKCkpXG4gICAgICAgIDogZ2V0Rm9jdXNhYmxlTm9kZXMoc2hhcmRzLCBuZXcgTWFwKCkpO1xuICAgIHZhciBjdXJyZW50ID0gZm9jdXNhYmxlcy5maW5kSW5kZXgoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZTtcbiAgICAgICAgcmV0dXJuIG5vZGUgPT09IGVsZW1lbnQ7XG4gICAgfSk7XG4gICAgaWYgKGN1cnJlbnQgPT09IC0xKSB7XG4gICAgICAgIC8vIGFuIGVkZ2UgY2FzZSwgd2hlbiBhbmNob3IgZWxlbWVudCBpcyBub3QgZm91bmRcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJldjogZm9jdXNhYmxlc1tjdXJyZW50IC0gMV0sXG4gICAgICAgIG5leHQ6IGZvY3VzYWJsZXNbY3VycmVudCArIDFdLFxuICAgICAgICBmaXJzdDogZm9jdXNhYmxlc1swXSxcbiAgICAgICAgbGFzdDogZm9jdXNhYmxlc1tmb2N1c2FibGVzLmxlbmd0aCAtIDFdLFxuICAgIH07XG59O1xudmFyIGdldEJvdW5kYXJ5ID0gZnVuY3Rpb24gKHNoYXJkcywgdXNlVGFiYmFibGVzKSB7XG4gICAgdmFyIHNldCA9IHVzZVRhYmJhYmxlc1xuICAgICAgICA/IGdldFRhYmJhYmxlTm9kZXMoYXNBcnJheShzaGFyZHMpLCBuZXcgTWFwKCkpXG4gICAgICAgIDogZ2V0Rm9jdXNhYmxlTm9kZXMoYXNBcnJheShzaGFyZHMpLCBuZXcgTWFwKCkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGZpcnN0OiBzZXRbMF0sXG4gICAgICAgIGxhc3Q6IHNldFtzZXQubGVuZ3RoIC0gMV0sXG4gICAgfTtcbn07XG52YXIgZGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgc2NvcGU6IGRvY3VtZW50LmJvZHksXG4gICAgICAgIGN5Y2xlOiB0cnVlLFxuICAgICAgICBvbmx5VGFiYmFibGU6IHRydWUsXG4gICAgfSwgb3B0aW9ucyk7XG59O1xudmFyIG1vdmVGb2N1cyA9IGZ1bmN0aW9uIChmcm9tRWxlbWVudCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBuZXdPcHRpb25zID0gZGVmYXVsdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgdmFyIHNvbHV0aW9uID0gZ2V0UmVsYXRpdmVGb2N1c2FibGUoZnJvbUVsZW1lbnQsIG5ld09wdGlvbnMuc2NvcGUsIG5ld09wdGlvbnMub25seVRhYmJhYmxlKTtcbiAgICBpZiAoIXNvbHV0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRhcmdldCA9IGNiKHNvbHV0aW9uLCBuZXdPcHRpb25zLmN5Y2xlKTtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGZvY3VzT24odGFyZ2V0Lm5vZGUsIG5ld09wdGlvbnMuZm9jdXNPcHRpb25zKTtcbiAgICB9XG59O1xuLyoqXG4gKiBmb2N1c2VzIG5leHQgZWxlbWVudCBpbiB0aGUgdGFiLW9yZGVyXG4gKiBAcGFyYW0gZnJvbUVsZW1lbnQgLSBjb21tb24gcGFyZW50IHRvIHNjb3BlIGFjdGl2ZSBlbGVtZW50IHNlYXJjaCBvciB0YWIgY3ljbGUgb3JkZXJcbiAqIEBwYXJhbSB7Rm9jdXNOZXh0T3B0aW9uc30gW29wdGlvbnNdIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzTmV4dEVsZW1lbnQgPSBmdW5jdGlvbiAoZnJvbUVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIG1vdmVGb2N1cyhmcm9tRWxlbWVudCwgb3B0aW9ucywgZnVuY3Rpb24gKF9hLCBjeWNsZSkge1xuICAgICAgICB2YXIgbmV4dCA9IF9hLm5leHQsIGZpcnN0ID0gX2EuZmlyc3Q7XG4gICAgICAgIHJldHVybiBuZXh0IHx8IChjeWNsZSAmJiBmaXJzdCk7XG4gICAgfSk7XG59O1xuLyoqXG4gKiBmb2N1c2VzIHByZXYgZWxlbWVudCBpbiB0aGUgdGFiIG9yZGVyXG4gKiBAcGFyYW0gZnJvbUVsZW1lbnQgLSBjb21tb24gcGFyZW50IHRvIHNjb3BlIGFjdGl2ZSBlbGVtZW50IHNlYXJjaCBvciB0YWIgY3ljbGUgb3JkZXJcbiAqIEBwYXJhbSB7Rm9jdXNOZXh0T3B0aW9uc30gW29wdGlvbnNdIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzUHJldkVsZW1lbnQgPSBmdW5jdGlvbiAoZnJvbUVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIG1vdmVGb2N1cyhmcm9tRWxlbWVudCwgb3B0aW9ucywgZnVuY3Rpb24gKF9hLCBjeWNsZSkge1xuICAgICAgICB2YXIgcHJldiA9IF9hLnByZXYsIGxhc3QgPSBfYS5sYXN0O1xuICAgICAgICByZXR1cm4gcHJldiB8fCAoY3ljbGUgJiYgbGFzdCk7XG4gICAgfSk7XG59O1xudmFyIHBpY2tCb3VuZGFyeSA9IGZ1bmN0aW9uIChzY29wZSwgb3B0aW9ucywgd2hhdCkge1xuICAgIHZhciBfYTtcbiAgICB2YXIgYm91bmRhcnkgPSBnZXRCb3VuZGFyeShzY29wZSwgKF9hID0gb3B0aW9ucy5vbmx5VGFiYmFibGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWUpO1xuICAgIHZhciBub2RlID0gYm91bmRhcnlbd2hhdF07XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgICAgZm9jdXNPbihub2RlLm5vZGUsIG9wdGlvbnMuZm9jdXNPcHRpb25zKTtcbiAgICB9XG59O1xuLyoqXG4gKiBmb2N1c2VzIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHRhYi1vcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBvcHRpb25zIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzRmlyc3RFbGVtZW50ID0gZnVuY3Rpb24gKHNjb3BlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICBwaWNrQm91bmRhcnkoc2NvcGUsIG9wdGlvbnMsICdmaXJzdCcpO1xufTtcbi8qKlxuICogZm9jdXNlcyBsYXN0IGVsZW1lbnQgaW4gdGhlIHRhYiBvcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBvcHRpb25zIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzTGFzdEVsZW1lbnQgPSBmdW5jdGlvbiAoc2NvcGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHBpY2tCb3VuZGFyeShzY29wZSwgb3B0aW9ucywgJ2xhc3QnKTtcbn07XG4iLCAiaW1wb3J0IHsgZXhwb3J0U2lkZWNhciB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmltcG9ydCBGb2N1c1RyYXAgZnJvbSAnLi9UcmFwJztcbmltcG9ydCB7IG1lZGl1bVNpZGVjYXIgfSBmcm9tICcuL21lZGl1bSc7XG5leHBvcnQgZGVmYXVsdCBleHBvcnRTaWRlY2FyKG1lZGl1bVNpZGVjYXIsIEZvY3VzVHJhcCk7IiwgImltcG9ydCB7IF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbEJhciB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyJztcbmltcG9ydCB7IHN0eWxlU2luZ2xldG9uIH0gZnJvbSAncmVhY3Qtc3R5bGUtc2luZ2xldG9uJztcbmltcG9ydCB7IG5vblBhc3NpdmUgfSBmcm9tICcuL2FnZ3Jlc2l2ZUNhcHR1cmUnO1xuaW1wb3J0IHsgaGFuZGxlU2Nyb2xsLCBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZCB9IGZyb20gJy4vaGFuZGxlU2Nyb2xsJztcbmV4cG9ydCB2YXIgZ2V0VG91Y2hYWSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnY2hhbmdlZFRvdWNoZXMnIGluIGV2ZW50ID8gW2V2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFgsIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFldIDogWzAsIDBdO1xufTtcbmV4cG9ydCB2YXIgZ2V0RGVsdGFYWSA9IGZ1bmN0aW9uIChldmVudCkgeyByZXR1cm4gW2V2ZW50LmRlbHRhWCwgZXZlbnQuZGVsdGFZXTsgfTtcbnZhciBleHRyYWN0UmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgIHJldHVybiByZWYgJiYgJ2N1cnJlbnQnIGluIHJlZiA/IHJlZi5jdXJyZW50IDogcmVmO1xufTtcbnZhciBkZWx0YUNvbXBhcmUgPSBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4geFswXSA9PT0geVswXSAmJiB4WzFdID09PSB5WzFdOyB9O1xudmFyIGdlbmVyYXRlU3R5bGUgPSBmdW5jdGlvbiAoaWQpIHsgcmV0dXJuIFwiXFxuICAuYmxvY2staW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQsIFwiIHtwb2ludGVyLWV2ZW50czogbm9uZTt9XFxuICAuYWxsb3ctaW50ZXJhY3Rpdml0eS1cIikuY29uY2F0KGlkLCBcIiB7cG9pbnRlci1ldmVudHM6IGFsbDt9XFxuXCIpOyB9O1xudmFyIGlkQ291bnRlciA9IDA7XG52YXIgbG9ja1N0YWNrID0gW107XG5leHBvcnQgZnVuY3Rpb24gUmVtb3ZlU2Nyb2xsU2lkZUNhcihwcm9wcykge1xuICAgIHZhciBzaG91bGRQcmV2ZW50UXVldWUgPSBSZWFjdC51c2VSZWYoW10pO1xuICAgIHZhciB0b3VjaFN0YXJ0UmVmID0gUmVhY3QudXNlUmVmKFswLCAwXSk7XG4gICAgdmFyIGFjdGl2ZUF4aXMgPSBSZWFjdC51c2VSZWYoKTtcbiAgICB2YXIgaWQgPSBSZWFjdC51c2VTdGF0ZShpZENvdW50ZXIrKylbMF07XG4gICAgdmFyIFN0eWxlID0gUmVhY3QudXNlU3RhdGUoc3R5bGVTaW5nbGV0b24pWzBdO1xuICAgIHZhciBsYXN0UHJvcHMgPSBSZWFjdC51c2VSZWYocHJvcHMpO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxhc3RQcm9wcy5jdXJyZW50ID0gcHJvcHM7XG4gICAgfSwgW3Byb3BzXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHByb3BzLmluZXJ0KSB7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJibG9jay1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpO1xuICAgICAgICAgICAgdmFyIGFsbG93XzEgPSBfX3NwcmVhZEFycmF5KFtwcm9wcy5sb2NrUmVmLmN1cnJlbnRdLCAocHJvcHMuc2hhcmRzIHx8IFtdKS5tYXAoZXh0cmFjdFJlZiksIHRydWUpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgIGFsbG93XzEuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5hZGQoXCJhbGxvdy1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpOyB9KTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwiYmxvY2staW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQpKTtcbiAgICAgICAgICAgICAgICBhbGxvd18xLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5jbGFzc0xpc3QucmVtb3ZlKFwiYWxsb3ctaW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQpKTsgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9LCBbcHJvcHMuaW5lcnQsIHByb3BzLmxvY2tSZWYuY3VycmVudCwgcHJvcHMuc2hhcmRzXSk7XG4gICAgdmFyIHNob3VsZENhbmNlbEV2ZW50ID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50LCBwYXJlbnQpIHtcbiAgICAgICAgaWYgKCgndG91Y2hlcycgaW4gZXZlbnQgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPT09IDIpIHx8IChldmVudC50eXBlID09PSAnd2hlZWwnICYmIGV2ZW50LmN0cmxLZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gIWxhc3RQcm9wcy5jdXJyZW50LmFsbG93UGluY2hab29tO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b3VjaCA9IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICB2YXIgdG91Y2hTdGFydCA9IHRvdWNoU3RhcnRSZWYuY3VycmVudDtcbiAgICAgICAgdmFyIGRlbHRhWCA9ICdkZWx0YVgnIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFYIDogdG91Y2hTdGFydFswXSAtIHRvdWNoWzBdO1xuICAgICAgICB2YXIgZGVsdGFZID0gJ2RlbHRhWScgaW4gZXZlbnQgPyBldmVudC5kZWx0YVkgOiB0b3VjaFN0YXJ0WzFdIC0gdG91Y2hbMV07XG4gICAgICAgIHZhciBjdXJyZW50QXhpcztcbiAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgdmFyIG1vdmVEaXJlY3Rpb24gPSBNYXRoLmFicyhkZWx0YVgpID4gTWF0aC5hYnMoZGVsdGFZKSA/ICdoJyA6ICd2JztcbiAgICAgICAgLy8gYWxsb3cgaG9yaXpvbnRhbCB0b3VjaCBtb3ZlIG9uIFJhbmdlIGlucHV0cy4gVGhleSB3aWxsIG5vdCBjYXVzZSBhbnkgc2Nyb2xsXG4gICAgICAgIGlmICgndG91Y2hlcycgaW4gZXZlbnQgJiYgbW92ZURpcmVjdGlvbiA9PT0gJ2gnICYmIHRhcmdldC50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24gPSBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZChtb3ZlRGlyZWN0aW9uLCB0YXJnZXQpO1xuICAgICAgICBpZiAoIWNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBjdXJyZW50QXhpcyA9IG1vdmVEaXJlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50QXhpcyA9IG1vdmVEaXJlY3Rpb24gPT09ICd2JyA/ICdoJyA6ICd2JztcbiAgICAgICAgICAgIGNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24gPSBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZChtb3ZlRGlyZWN0aW9uLCB0YXJnZXQpO1xuICAgICAgICAgICAgLy8gb3RoZXIgYXhpcyBtaWdodCBiZSBub3Qgc2Nyb2xsYWJsZVxuICAgICAgICB9XG4gICAgICAgIGlmICghY2FuQmVTY3JvbGxlZEluTWFpbkRpcmVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYWN0aXZlQXhpcy5jdXJyZW50ICYmICdjaGFuZ2VkVG91Y2hlcycgaW4gZXZlbnQgJiYgKGRlbHRhWCB8fCBkZWx0YVkpKSB7XG4gICAgICAgICAgICBhY3RpdmVBeGlzLmN1cnJlbnQgPSBjdXJyZW50QXhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN1cnJlbnRBeGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FuY2VsaW5nQXhpcyA9IGFjdGl2ZUF4aXMuY3VycmVudCB8fCBjdXJyZW50QXhpcztcbiAgICAgICAgcmV0dXJuIGhhbmRsZVNjcm9sbChjYW5jZWxpbmdBeGlzLCBwYXJlbnQsIGV2ZW50LCBjYW5jZWxpbmdBeGlzID09PSAnaCcgPyBkZWx0YVggOiBkZWx0YVksIHRydWUpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2hvdWxkUHJldmVudCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfZXZlbnQpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0gX2V2ZW50O1xuICAgICAgICBpZiAoIWxvY2tTdGFjay5sZW5ndGggfHwgbG9ja1N0YWNrW2xvY2tTdGFjay5sZW5ndGggLSAxXSAhPT0gU3R5bGUpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgbGFzdCBhY3RpdmVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsdGEgPSAnZGVsdGFZJyBpbiBldmVudCA/IGdldERlbHRhWFkoZXZlbnQpIDogZ2V0VG91Y2hYWShldmVudCk7XG4gICAgICAgIHZhciBzb3VyY2VFdmVudCA9IHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50LmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5uYW1lID09PSBldmVudC50eXBlICYmIChlLnRhcmdldCA9PT0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnRhcmdldCA9PT0gZS5zaGFkb3dQYXJlbnQpICYmIGRlbHRhQ29tcGFyZShlLmRlbHRhLCBkZWx0YSk7IH0pWzBdO1xuICAgICAgICAvLyBzZWxmIGV2ZW50LCBhbmQgc2hvdWxkIGJlIGNhbmNlbGVkXG4gICAgICAgIGlmIChzb3VyY2VFdmVudCAmJiBzb3VyY2VFdmVudC5zaG91bGQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdXRzaWRlIG9yIHNoYXJkIGV2ZW50XG4gICAgICAgIGlmICghc291cmNlRXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBzaGFyZE5vZGVzID0gKGxhc3RQcm9wcy5jdXJyZW50LnNoYXJkcyB8fCBbXSlcbiAgICAgICAgICAgICAgICAubWFwKGV4dHJhY3RSZWYpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUuY29udGFpbnMoZXZlbnQudGFyZ2V0KTsgfSk7XG4gICAgICAgICAgICB2YXIgc2hvdWxkU3RvcCA9IHNoYXJkTm9kZXMubGVuZ3RoID4gMCA/IHNob3VsZENhbmNlbEV2ZW50KGV2ZW50LCBzaGFyZE5vZGVzWzBdKSA6ICFsYXN0UHJvcHMuY3VycmVudC5ub0lzb2xhdGlvbjtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdG9wKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmNhbmNlbGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgdmFyIHNob3VsZENhbmNlbCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuYW1lLCBkZWx0YSwgdGFyZ2V0LCBzaG91bGQpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0geyBuYW1lOiBuYW1lLCBkZWx0YTogZGVsdGEsIHRhcmdldDogdGFyZ2V0LCBzaG91bGQ6IHNob3VsZCwgc2hhZG93UGFyZW50OiBnZXRPdXRlcm1vc3RTaGFkb3dQYXJlbnQodGFyZ2V0KSB9O1xuICAgICAgICBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5wdXNoKGV2ZW50KTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudCA9IHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50LmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSAhPT0gZXZlbnQ7IH0pO1xuICAgICAgICB9LCAxKTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNjcm9sbFRvdWNoU3RhcnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdG91Y2hTdGFydFJlZi5jdXJyZW50ID0gZ2V0VG91Y2hYWShldmVudCk7XG4gICAgICAgIGFjdGl2ZUF4aXMuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNjcm9sbFdoZWVsID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHNob3VsZENhbmNlbChldmVudC50eXBlLCBnZXREZWx0YVhZKGV2ZW50KSwgZXZlbnQudGFyZ2V0LCBzaG91bGRDYW5jZWxFdmVudChldmVudCwgcHJvcHMubG9ja1JlZi5jdXJyZW50KSk7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxUb3VjaE1vdmUgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsKGV2ZW50LnR5cGUsIGdldFRvdWNoWFkoZXZlbnQpLCBldmVudC50YXJnZXQsIHNob3VsZENhbmNlbEV2ZW50KGV2ZW50LCBwcm9wcy5sb2NrUmVmLmN1cnJlbnQpKTtcbiAgICB9LCBbXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG9ja1N0YWNrLnB1c2goU3R5bGUpO1xuICAgICAgICBwcm9wcy5zZXRDYWxsYmFja3Moe1xuICAgICAgICAgICAgb25TY3JvbGxDYXB0dXJlOiBzY3JvbGxXaGVlbCxcbiAgICAgICAgICAgIG9uV2hlZWxDYXB0dXJlOiBzY3JvbGxXaGVlbCxcbiAgICAgICAgICAgIG9uVG91Y2hNb3ZlQ2FwdHVyZTogc2Nyb2xsVG91Y2hNb3ZlLFxuICAgICAgICB9KTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBzaG91bGRQcmV2ZW50LCBub25QYXNzaXZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBzY3JvbGxUb3VjaFN0YXJ0LCBub25QYXNzaXZlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvY2tTdGFjayA9IGxvY2tTdGFjay5maWx0ZXIoZnVuY3Rpb24gKGluc3QpIHsgcmV0dXJuIGluc3QgIT09IFN0eWxlOyB9KTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBzaG91bGRQcmV2ZW50LCBub25QYXNzaXZlKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBzY3JvbGxUb3VjaFN0YXJ0LCBub25QYXNzaXZlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHJlbW92ZVNjcm9sbEJhciA9IHByb3BzLnJlbW92ZVNjcm9sbEJhciwgaW5lcnQgPSBwcm9wcy5pbmVydDtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIGluZXJ0ID8gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IGdlbmVyYXRlU3R5bGUoaWQpIH0pIDogbnVsbCxcbiAgICAgICAgcmVtb3ZlU2Nyb2xsQmFyID8gUmVhY3QuY3JlYXRlRWxlbWVudChSZW1vdmVTY3JvbGxCYXIsIHsgZ2FwTW9kZTogcHJvcHMuZ2FwTW9kZSB9KSA6IG51bGwpKTtcbn1cbmZ1bmN0aW9uIGdldE91dGVybW9zdFNoYWRvd1BhcmVudChub2RlKSB7XG4gICAgdmFyIHNoYWRvd1BhcmVudCA9IG51bGw7XG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICBzaGFkb3dQYXJlbnQgPSBub2RlLmhvc3Q7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBzaGFkb3dQYXJlbnQ7XG59XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVTaW5nbGV0b24gfSBmcm9tICdyZWFjdC1zdHlsZS1zaW5nbGV0b24nO1xuaW1wb3J0IHsgZnVsbFdpZHRoQ2xhc3NOYW1lLCB6ZXJvUmlnaHRDbGFzc05hbWUsIG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSwgcmVtb3ZlZEJhclNpemVWYXJpYWJsZSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldEdhcFdpZHRoIH0gZnJvbSAnLi91dGlscyc7XG52YXIgU3R5bGUgPSBzdHlsZVNpbmdsZXRvbigpO1xuZXhwb3J0IHZhciBsb2NrQXR0cmlidXRlID0gJ2RhdGEtc2Nyb2xsLWxvY2tlZCc7XG4vLyBpbXBvcnRhbnQgdGlwIC0gb25jZSB3ZSBtZWFzdXJlIHNjcm9sbEJhciB3aWR0aCBhbmQgcmVtb3ZlIHRoZW1cbi8vIHdlIGNvdWxkIG5vdCByZXBlYXQgdGhpcyBvcGVyYXRpb25cbi8vIHRodXMgd2UgYXJlIHVzaW5nIHN0eWxlLXNpbmdsZXRvbiAtIG9ubHkgdGhlIGZpcnN0IFwieWV0IGNvcnJlY3RcIiBzdHlsZSB3aWxsIGJlIGFwcGxpZWQuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24gKF9hLCBhbGxvd1JlbGF0aXZlLCBnYXBNb2RlLCBpbXBvcnRhbnQpIHtcbiAgICB2YXIgbGVmdCA9IF9hLmxlZnQsIHRvcCA9IF9hLnRvcCwgcmlnaHQgPSBfYS5yaWdodCwgZ2FwID0gX2EuZ2FwO1xuICAgIGlmIChnYXBNb2RlID09PSB2b2lkIDApIHsgZ2FwTW9kZSA9ICdtYXJnaW4nOyB9XG4gICAgcmV0dXJuIFwiXFxuICAuXCIuY29uY2F0KG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSwgXCIge1xcbiAgIG92ZXJmbG93OiBoaWRkZW4gXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgIHBhZGRpbmctcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIGJvZHlbXCIpLmNvbmNhdChsb2NrQXR0cmlidXRlLCBcIl0ge1xcbiAgICBvdmVyZmxvdzogaGlkZGVuIFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcXG4gICAgXCIpLmNvbmNhdChbXG4gICAgICAgIGFsbG93UmVsYXRpdmUgJiYgXCJwb3NpdGlvbjogcmVsYXRpdmUgXCIuY29uY2F0KGltcG9ydGFudCwgXCI7XCIpLFxuICAgICAgICBnYXBNb2RlID09PSAnbWFyZ2luJyAmJlxuICAgICAgICAgICAgXCJcXG4gICAgcGFkZGluZy1sZWZ0OiBcIi5jb25jYXQobGVmdCwgXCJweDtcXG4gICAgcGFkZGluZy10b3A6IFwiKS5jb25jYXQodG9wLCBcInB4O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiBcIikuY29uY2F0KHJpZ2h0LCBcInB4O1xcbiAgICBtYXJnaW4tbGVmdDowO1xcbiAgICBtYXJnaW4tdG9wOjA7XFxuICAgIG1hcmdpbi1yaWdodDogXCIpLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgICBcIiksXG4gICAgICAgIGdhcE1vZGUgPT09ICdwYWRkaW5nJyAmJiBcInBhZGRpbmctcmlnaHQ6IFwiLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1wiKSxcbiAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJycpLCBcIlxcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIHtcXG4gICAgcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoZnVsbFdpZHRoQ2xhc3NOYW1lLCBcIiB7XFxuICAgIG1hcmdpbi1yaWdodDogXCIpLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIC5cIikuY29uY2F0KHplcm9SaWdodENsYXNzTmFtZSwgXCIge1xcbiAgICByaWdodDogMCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIgLlwiKS5jb25jYXQoZnVsbFdpZHRoQ2xhc3NOYW1lLCBcIiB7XFxuICAgIG1hcmdpbi1yaWdodDogMCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIGJvZHlbXCIpLmNvbmNhdChsb2NrQXR0cmlidXRlLCBcIl0ge1xcbiAgICBcIikuY29uY2F0KHJlbW92ZWRCYXJTaXplVmFyaWFibGUsIFwiOiBcIikuY29uY2F0KGdhcCwgXCJweDtcXG4gIH1cXG5cIik7XG59O1xudmFyIGdldEN1cnJlbnRVc2VDb3VudGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjb3VudGVyID0gcGFyc2VJbnQoZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUobG9ja0F0dHJpYnV0ZSkgfHwgJzAnLCAxMCk7XG4gICAgcmV0dXJuIGlzRmluaXRlKGNvdW50ZXIpID8gY291bnRlciA6IDA7XG59O1xuZXhwb3J0IHZhciB1c2VMb2NrQXR0cmlidXRlID0gZnVuY3Rpb24gKCkge1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUsIChnZXRDdXJyZW50VXNlQ291bnRlcigpICsgMSkudG9TdHJpbmcoKSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbmV3Q291bnRlciA9IGdldEN1cnJlbnRVc2VDb3VudGVyKCkgLSAxO1xuICAgICAgICAgICAgaWYgKG5ld0NvdW50ZXIgPD0gMCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUobG9ja0F0dHJpYnV0ZSwgbmV3Q291bnRlci50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG59O1xuLyoqXG4gKiBSZW1vdmVzIHBhZ2Ugc2Nyb2xsYmFyIGFuZCBibG9ja3MgcGFnZSBzY3JvbGwgd2hlbiBtb3VudGVkXG4gKi9cbmV4cG9ydCB2YXIgUmVtb3ZlU2Nyb2xsQmFyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIG5vUmVsYXRpdmUgPSBfYS5ub1JlbGF0aXZlLCBub0ltcG9ydGFudCA9IF9hLm5vSW1wb3J0YW50LCBfYiA9IF9hLmdhcE1vZGUsIGdhcE1vZGUgPSBfYiA9PT0gdm9pZCAwID8gJ21hcmdpbicgOiBfYjtcbiAgICB1c2VMb2NrQXR0cmlidXRlKCk7XG4gICAgLypcbiAgICAgZ2FwIHdpbGwgYmUgbWVhc3VyZWQgb24gZXZlcnkgY29tcG9uZW50IG1vdW50XG4gICAgIGhvd2V2ZXIgaXQgd2lsbCBiZSB1c2VkIG9ubHkgYnkgdGhlIFwiZmlyc3RcIiBpbnZvY2F0aW9uXG4gICAgIGR1ZSB0byBzaW5nbGV0b24gbmF0dXJlIG9mIDxTdHlsZVxuICAgICAqL1xuICAgIHZhciBnYXAgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldEdhcFdpZHRoKGdhcE1vZGUpOyB9LCBbZ2FwTW9kZV0pO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlLCB7IHN0eWxlczogZ2V0U3R5bGVzKGdhcCwgIW5vUmVsYXRpdmUsIGdhcE1vZGUsICFub0ltcG9ydGFudCA/ICchaW1wb3J0YW50JyA6ICcnKSB9KTtcbn07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVzaGVldFNpbmdsZXRvbiB9IGZyb20gJy4vc2luZ2xldG9uJztcbi8qKlxuICogY3JlYXRlcyBhIGhvb2sgdG8gY29udHJvbCBzdHlsZSBzaW5nbGV0b25cbiAqIEBzZWUge0BsaW5rIHN0eWxlU2luZ2xldG9ufSBmb3IgYSBzYWZlciBjb21wb25lbnQgdmVyc2lvblxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgdXNlU3R5bGUgPSBzdHlsZUhvb2tTaW5nbGV0b24oKTtcbiAqIC8vL1xuICogdXNlU3R5bGUoJ2JvZHkgeyBvdmVyZmxvdzogaGlkZGVufScpO1xuICovXG5leHBvcnQgdmFyIHN0eWxlSG9va1NpbmdsZXRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXQgPSBzdHlsZXNoZWV0U2luZ2xldG9uKCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdHlsZXMsIGlzRHluYW1pYykge1xuICAgICAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2hlZXQuYWRkKHN0eWxlcyk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNoZWV0LnJlbW92ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgW3N0eWxlcyAmJiBpc0R5bmFtaWNdKTtcbiAgICB9O1xufTtcbiIsICJ2YXIgY3VycmVudE5vbmNlO1xuZXhwb3J0IHZhciBzZXROb25jZSA9IGZ1bmN0aW9uIChub25jZSkge1xuICAgIGN1cnJlbnROb25jZSA9IG5vbmNlO1xufTtcbmV4cG9ydCB2YXIgZ2V0Tm9uY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGN1cnJlbnROb25jZSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE5vbmNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gX193ZWJwYWNrX25vbmNlX187XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwgImltcG9ydCB7IGdldE5vbmNlIH0gZnJvbSAnZ2V0LW5vbmNlJztcbmZ1bmN0aW9uIG1ha2VTdHlsZVRhZygpIHtcbiAgICBpZiAoIWRvY3VtZW50KVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICB0YWcudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgdmFyIG5vbmNlID0gZ2V0Tm9uY2UoKTtcbiAgICBpZiAobm9uY2UpIHtcbiAgICAgICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBub25jZSk7XG4gICAgfVxuICAgIHJldHVybiB0YWc7XG59XG5mdW5jdGlvbiBpbmplY3RTdHlsZXModGFnLCBjc3MpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHRhZy5zdHlsZVNoZWV0KSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGFnLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbnNlcnRTdHlsZVRhZyh0YWcpIHtcbiAgICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHRhZyk7XG59XG5leHBvcnQgdmFyIHN0eWxlc2hlZXRTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBzdHlsZXNoZWV0ID0gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBhZGQ6IGZ1bmN0aW9uIChzdHlsZSkge1xuICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICgoc3R5bGVzaGVldCA9IG1ha2VTdHlsZVRhZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBpbmplY3RTdHlsZXMoc3R5bGVzaGVldCwgc3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnRTdHlsZVRhZyhzdHlsZXNoZWV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY291bnRlci0tO1xuICAgICAgICAgICAgaWYgKCFjb3VudGVyICYmIHN0eWxlc2hlZXQpIHtcbiAgICAgICAgICAgICAgICBzdHlsZXNoZWV0LnBhcmVudE5vZGUgJiYgc3R5bGVzaGVldC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlc2hlZXQpO1xuICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59O1xuIiwgImltcG9ydCB7IHN0eWxlSG9va1NpbmdsZXRvbiB9IGZyb20gJy4vaG9vayc7XG4vKipcbiAqIGNyZWF0ZSBhIENvbXBvbmVudCB0byBhZGQgc3R5bGVzIG9uIGRlbWFuZFxuICogLSBzdHlsZXMgYXJlIGFkZGVkIHdoZW4gZmlyc3QgaW5zdGFuY2UgaXMgbW91bnRlZFxuICogLSBzdHlsZXMgYXJlIHJlbW92ZWQgd2hlbiB0aGUgbGFzdCBpbnN0YW5jZSBpcyB1bm1vdW50ZWRcbiAqIC0gY2hhbmdpbmcgc3R5bGVzIGluIHJ1bnRpbWUgZG9lcyBub3RoaW5nIHVubGVzcyBkeW5hbWljIGlzIHNldC4gQnV0IHdpdGggbXVsdGlwbGUgY29tcG9uZW50cyB0aGF0IGNhbiBsZWFkIHRvIHRoZSB1bmRlZmluZWQgYmVoYXZpb3JcbiAqL1xuZXhwb3J0IHZhciBzdHlsZVNpbmdsZXRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXNlU3R5bGUgPSBzdHlsZUhvb2tTaW5nbGV0b24oKTtcbiAgICB2YXIgU2hlZXQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIHN0eWxlcyA9IF9hLnN0eWxlcywgZHluYW1pYyA9IF9hLmR5bmFtaWM7XG4gICAgICAgIHVzZVN0eWxlKHN0eWxlcywgZHluYW1pYyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIFNoZWV0O1xufTtcbiIsICJleHBvcnQgdmFyIHplcm9HYXAgPSB7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgZ2FwOiAwLFxufTtcbnZhciBwYXJzZSA9IGZ1bmN0aW9uICh4KSB7IHJldHVybiBwYXJzZUludCh4IHx8ICcnLCAxMCkgfHwgMDsgfTtcbnZhciBnZXRPZmZzZXQgPSBmdW5jdGlvbiAoZ2FwTW9kZSkge1xuICAgIHZhciBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpO1xuICAgIHZhciBsZWZ0ID0gY3NbZ2FwTW9kZSA9PT0gJ3BhZGRpbmcnID8gJ3BhZGRpbmdMZWZ0JyA6ICdtYXJnaW5MZWZ0J107XG4gICAgdmFyIHRvcCA9IGNzW2dhcE1vZGUgPT09ICdwYWRkaW5nJyA/ICdwYWRkaW5nVG9wJyA6ICdtYXJnaW5Ub3AnXTtcbiAgICB2YXIgcmlnaHQgPSBjc1tnYXBNb2RlID09PSAncGFkZGluZycgPyAncGFkZGluZ1JpZ2h0JyA6ICdtYXJnaW5SaWdodCddO1xuICAgIHJldHVybiBbcGFyc2UobGVmdCksIHBhcnNlKHRvcCksIHBhcnNlKHJpZ2h0KV07XG59O1xuZXhwb3J0IHZhciBnZXRHYXBXaWR0aCA9IGZ1bmN0aW9uIChnYXBNb2RlKSB7XG4gICAgaWYgKGdhcE1vZGUgPT09IHZvaWQgMCkgeyBnYXBNb2RlID0gJ21hcmdpbic7IH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHplcm9HYXA7XG4gICAgfVxuICAgIHZhciBvZmZzZXRzID0gZ2V0T2Zmc2V0KGdhcE1vZGUpO1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgIHZhciB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IG9mZnNldHNbMF0sXG4gICAgICAgIHRvcDogb2Zmc2V0c1sxXSxcbiAgICAgICAgcmlnaHQ6IG9mZnNldHNbMl0sXG4gICAgICAgIGdhcDogTWF0aC5tYXgoMCwgd2luZG93V2lkdGggLSBkb2N1bWVudFdpZHRoICsgb2Zmc2V0c1syXSAtIG9mZnNldHNbMF0pLFxuICAgIH07XG59O1xuIiwgInZhciBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IHZhciBub25QYXNzaXZlID0gcGFzc2l2ZVN1cHBvcnRlZCA/IHsgcGFzc2l2ZTogZmFsc2UgfSA6IGZhbHNlO1xuIiwgInZhciBhbHdheXNDb250YWluc1Njcm9sbCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gdGV4dGFyZWEgd2lsbCBhbHdheXMgX2NvbnRhaW5fIHNjcm9sbCBpbnNpZGUgc2VsZi4gSXQgb25seSBjYW4gYmUgaGlkZGVuXG4gICAgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJztcbn07XG52YXIgZWxlbWVudENhbkJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAobm9kZSwgb3ZlcmZsb3cpIHtcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG4gICAgcmV0dXJuIChcbiAgICAvLyBub3Qtbm90LXNjcm9sbGFibGVcbiAgICBzdHlsZXNbb3ZlcmZsb3ddICE9PSAnaGlkZGVuJyAmJlxuICAgICAgICAvLyBjb250YWlucyBzY3JvbGwgaW5zaWRlIHNlbGZcbiAgICAgICAgIShzdHlsZXMub3ZlcmZsb3dZID09PSBzdHlsZXMub3ZlcmZsb3dYICYmICFhbHdheXNDb250YWluc1Njcm9sbChub2RlKSAmJiBzdHlsZXNbb3ZlcmZsb3ddID09PSAndmlzaWJsZScpKTtcbn07XG52YXIgZWxlbWVudENvdWxkQmVWU2Nyb2xsZWQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZWxlbWVudENhbkJlU2Nyb2xsZWQobm9kZSwgJ292ZXJmbG93WScpOyB9O1xudmFyIGVsZW1lbnRDb3VsZEJlSFNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGVsZW1lbnRDYW5CZVNjcm9sbGVkKG5vZGUsICdvdmVyZmxvd1gnKTsgfTtcbmV4cG9ydCB2YXIgbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHZhciBjdXJyZW50ID0gbm9kZTtcbiAgICBkbyB7XG4gICAgICAgIC8vIFNraXAgb3ZlciBzaGFkb3cgcm9vdFxuICAgICAgICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgIT09ICd1bmRlZmluZWQnICYmIGN1cnJlbnQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBpc1Njcm9sbGFibGUgPSBlbGVtZW50Q291bGRCZVNjcm9sbGVkKGF4aXMsIGN1cnJlbnQpO1xuICAgICAgICBpZiAoaXNTY3JvbGxhYmxlKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBnZXRTY3JvbGxWYXJpYWJsZXMoYXhpcywgY3VycmVudCksIHNjcm9sbEhlaWdodCA9IF9hWzFdLCBjbGllbnRIZWlnaHQgPSBfYVsyXTtcbiAgICAgICAgICAgIGlmIChzY3JvbGxIZWlnaHQgPiBjbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnROb2RlO1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudCAhPT0gb3duZXJEb2N1bWVudC5ib2R5KTtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xudmFyIGdldFZTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2Nyb2xsVG9wID0gX2Euc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgPSBfYS5zY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCA9IF9hLmNsaWVudEhlaWdodDtcbiAgICByZXR1cm4gW1xuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgICAgY2xpZW50SGVpZ2h0LFxuICAgIF07XG59O1xudmFyIGdldEhTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2Nyb2xsTGVmdCA9IF9hLnNjcm9sbExlZnQsIHNjcm9sbFdpZHRoID0gX2Euc2Nyb2xsV2lkdGgsIGNsaWVudFdpZHRoID0gX2EuY2xpZW50V2lkdGg7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsV2lkdGgsXG4gICAgICAgIGNsaWVudFdpZHRoLFxuICAgIF07XG59O1xudmFyIGVsZW1lbnRDb3VsZEJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHJldHVybiBheGlzID09PSAndicgPyBlbGVtZW50Q291bGRCZVZTY3JvbGxlZChub2RlKSA6IGVsZW1lbnRDb3VsZEJlSFNjcm9sbGVkKG5vZGUpO1xufTtcbnZhciBnZXRTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHJldHVybiBheGlzID09PSAndicgPyBnZXRWU2Nyb2xsVmFyaWFibGVzKG5vZGUpIDogZ2V0SFNjcm9sbFZhcmlhYmxlcyhub2RlKTtcbn07XG52YXIgZ2V0RGlyZWN0aW9uRmFjdG9yID0gZnVuY3Rpb24gKGF4aXMsIGRpcmVjdGlvbikge1xuICAgIC8qKlxuICAgICAqIElmIHRoZSBlbGVtZW50J3MgZGlyZWN0aW9uIGlzIHJ0bCAocmlnaHQtdG8tbGVmdCksIHRoZW4gc2Nyb2xsTGVmdCBpcyAwIHdoZW4gdGhlIHNjcm9sbGJhciBpcyBhdCBpdHMgcmlnaHRtb3N0IHBvc2l0aW9uLFxuICAgICAqIGFuZCB0aGVuIGluY3JlYXNpbmdseSBuZWdhdGl2ZSBhcyB5b3Ugc2Nyb2xsIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgY29udGVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L3Njcm9sbExlZnRcbiAgICAgKi9cbiAgICByZXR1cm4gYXhpcyA9PT0gJ2gnICYmIGRpcmVjdGlvbiA9PT0gJ3J0bCcgPyAtMSA6IDE7XG59O1xuZXhwb3J0IHZhciBoYW5kbGVTY3JvbGwgPSBmdW5jdGlvbiAoYXhpcywgZW5kVGFyZ2V0LCBldmVudCwgc291cmNlRGVsdGEsIG5vT3ZlcnNjcm9sbCkge1xuICAgIHZhciBkaXJlY3Rpb25GYWN0b3IgPSBnZXREaXJlY3Rpb25GYWN0b3IoYXhpcywgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZW5kVGFyZ2V0KS5kaXJlY3Rpb24pO1xuICAgIHZhciBkZWx0YSA9IGRpcmVjdGlvbkZhY3RvciAqIHNvdXJjZURlbHRhO1xuICAgIC8vIGZpbmQgc2Nyb2xsYWJsZSB0YXJnZXRcbiAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHZhciB0YXJnZXRJbkxvY2sgPSBlbmRUYXJnZXQuY29udGFpbnModGFyZ2V0KTtcbiAgICB2YXIgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gZmFsc2U7XG4gICAgdmFyIGlzRGVsdGFQb3NpdGl2ZSA9IGRlbHRhID4gMDtcbiAgICB2YXIgYXZhaWxhYmxlU2Nyb2xsID0gMDtcbiAgICB2YXIgYXZhaWxhYmxlU2Nyb2xsVG9wID0gMDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBfYSA9IGdldFNjcm9sbFZhcmlhYmxlcyhheGlzLCB0YXJnZXQpLCBwb3NpdGlvbiA9IF9hWzBdLCBzY3JvbGxfMSA9IF9hWzFdLCBjYXBhY2l0eSA9IF9hWzJdO1xuICAgICAgICB2YXIgZWxlbWVudFNjcm9sbCA9IHNjcm9sbF8xIC0gY2FwYWNpdHkgLSBkaXJlY3Rpb25GYWN0b3IgKiBwb3NpdGlvbjtcbiAgICAgICAgaWYgKHBvc2l0aW9uIHx8IGVsZW1lbnRTY3JvbGwpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Q291bGRCZVNjcm9sbGVkKGF4aXMsIHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVTY3JvbGwgKz0gZWxlbWVudFNjcm9sbDtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVTY3JvbGxUb3AgKz0gcG9zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICB9IHdoaWxlIChcbiAgICAvLyBwb3J0YWxlZCBjb250ZW50XG4gICAgKCF0YXJnZXRJbkxvY2sgJiYgdGFyZ2V0ICE9PSBkb2N1bWVudC5ib2R5KSB8fFxuICAgICAgICAvLyBzZWxmIGNvbnRlbnRcbiAgICAgICAgKHRhcmdldEluTG9jayAmJiAoZW5kVGFyZ2V0LmNvbnRhaW5zKHRhcmdldCkgfHwgZW5kVGFyZ2V0ID09PSB0YXJnZXQpKSk7XG4gICAgLy8gaGFuZGxlIGVwc2lsb24gYXJvdW5kIDAgKG5vbiBzdGFuZGFyZCB6b29tIGxldmVscylcbiAgICBpZiAoaXNEZWx0YVBvc2l0aXZlICYmXG4gICAgICAgICgobm9PdmVyc2Nyb2xsICYmIE1hdGguYWJzKGF2YWlsYWJsZVNjcm9sbCkgPCAxKSB8fCAoIW5vT3ZlcnNjcm9sbCAmJiBkZWx0YSA+IGF2YWlsYWJsZVNjcm9sbCkpKSB7XG4gICAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpc0RlbHRhUG9zaXRpdmUgJiZcbiAgICAgICAgKChub092ZXJzY3JvbGwgJiYgTWF0aC5hYnMoYXZhaWxhYmxlU2Nyb2xsVG9wKSA8IDEpIHx8ICghbm9PdmVyc2Nyb2xsICYmIC1kZWx0YSA+IGF2YWlsYWJsZVNjcm9sbFRvcCkpKSB7XG4gICAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBzaG91bGRDYW5jZWxTY3JvbGw7XG59O1xuIiwgImltcG9ydCB7IGV4cG9ydFNpZGVjYXIgfSBmcm9tICd1c2Utc2lkZWNhcic7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGxTaWRlQ2FyIH0gZnJvbSAnLi9TaWRlRWZmZWN0JztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbmV4cG9ydCBkZWZhdWx0IGV4cG9ydFNpZGVjYXIoZWZmZWN0Q2FyLCBSZW1vdmVTY3JvbGxTaWRlQ2FyKTtcbiIsICJpbXBvcnQgeyBfX3NwcmVhZEFycmF5cyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaGlkZU90aGVycyB9IGZyb20gJ2FyaWEtaGlkZGVuJztcbmltcG9ydCB7IEludGVyYWN0aXZpdHlEaXNhYmxlciB9IGZyb20gJy4vSW50ZXJhY3Rpdml0eURpc2FibGVyJztcbmltcG9ydCB7IGZvY3VzSGlkZGVuTWFya2VyIH0gZnJvbSAnLi9tZWRpdW0nO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xudmFyIGV4dHJhY3RSZWYgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgcmV0dXJuICdjdXJyZW50JyBpbiByZWYgPyByZWYuY3VycmVudCA6IHJlZjtcbn07XG5leHBvcnQgZnVuY3Rpb24gRWZmZWN0KF9hKSB7XG4gICAgdmFyIHNldExvY2tQcm9wcyA9IF9hLnNldExvY2tQcm9wcywgb25Fc2NhcGVLZXkgPSBfYS5vbkVzY2FwZUtleSwgb25DbGlja091dHNpZGUgPSBfYS5vbkNsaWNrT3V0c2lkZSwgc2hhcmRzID0gX2Euc2hhcmRzLCBvbkFjdGl2YXRpb24gPSBfYS5vbkFjdGl2YXRpb24sIG9uRGVhY3RpdmF0aW9uID0gX2Eub25EZWFjdGl2YXRpb24sIG5vSXNvbGF0aW9uID0gX2Eubm9Jc29sYXRpb247XG4gICAgdmFyIF9iID0gdXNlU3RhdGUodW5kZWZpbmVkKSwgYWN0aXZlTm9kZSA9IF9iWzBdLCBzZXRBY3RpdmVOb2RlID0gX2JbMV07XG4gICAgdmFyIGxhc3RFdmVudFRhcmdldCA9IHVzZVJlZihudWxsKTtcbiAgICB2YXIgbW91c2VUb3VjaGVzID0gdXNlUmVmKDApO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvbktleURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgIGlmICgoZXZlbnQuY29kZSA9PT0gJ0VzY2FwZScgfHxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudC5rZXlDb2RlID09PSAyNykgJiZcbiAgICAgICAgICAgICAgICAgICAgb25Fc2NhcGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgb25Fc2NhcGVLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fFxuICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgfHxcbiAgICAgICAgICAgICAgICAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50ICYmIGV2ZW50LmJ1dHRvbiAhPT0gMCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hhcmRzICYmXG4gICAgICAgICAgICAgICAgc2hhcmRzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoZXh0cmFjdFJlZilcbiAgICAgICAgICAgICAgICAgICAgLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChub2RlICYmIG5vZGUuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPT09IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvbkNsaWNrT3V0c2lkZSkge1xuICAgICAgICAgICAgICAgIG9uQ2xpY2tPdXRzaWRlKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgb25Nb3VzZURvd24oZXZlbnQpO1xuICAgICAgICAgICAgbW91c2VUb3VjaGVzLmN1cnJlbnQgPSBldmVudC50b3VjaGVzLmxlbmd0aDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIG1vdXNlVG91Y2hlcy5jdXJyZW50ID0gZXZlbnQudG91Y2hlcy5sZW5ndGg7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uTW91c2VEb3duKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Nb3VzZURvd24pO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSwgW2FjdGl2ZU5vZGUsIG9uQ2xpY2tPdXRzaWRlLCBvbkVzY2FwZUtleV0pO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChhY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICBpZiAob25BY3RpdmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgb25BY3RpdmF0aW9uKGFjdGl2ZU5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAob25EZWFjdGl2YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgb25EZWFjdGl2YXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSwgWyEhYWN0aXZlTm9kZV0pO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdW5kbyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH07XG4gICAgICAgIHZhciB1bm1vdW50ZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIG9uTm9kZUFjdGl2YXRpb24gPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKCFub0lzb2xhdGlvbikge1xuICAgICAgICAgICAgICAgIF91bmRvID0gaGlkZU90aGVycyhfX3NwcmVhZEFycmF5cyhbbm9kZV0sIChzaGFyZHMgfHwgW10pLm1hcChleHRyYWN0UmVmKSksIGRvY3VtZW50LmJvZHksIGZvY3VzSGlkZGVuTWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEFjdGl2ZU5vZGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZTsgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvbk5vZGVEZWFjdGl2YXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdW5kbygpO1xuICAgICAgICAgICAgaWYgKCF1bm1vdW50ZWQpIHtcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVOb2RlKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXRMb2NrUHJvcHMoe1xuICAgICAgICAgICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblRvdWNoU3RhcnQ6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkFjdGl2YXRpb246IG9uTm9kZUFjdGl2YXRpb24sXG4gICAgICAgICAgICBvbkRlYWN0aXZhdGlvbjogb25Ob2RlRGVhY3RpdmF0aW9uXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdW5tb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldExvY2tQcm9wcyhmYWxzZSk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEludGVyYWN0aXZpdHlEaXNhYmxlciwgbnVsbCk7XG59XG4iLCAidmFyIGdldERlZmF1bHRQYXJlbnQgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHNhbXBsZVRhcmdldCA9IEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXRbMF0gOiBvcmlnaW5hbFRhcmdldDtcbiAgICByZXR1cm4gc2FtcGxlVGFyZ2V0Lm93bmVyRG9jdW1lbnQuYm9keTtcbn07XG52YXIgY291bnRlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG52YXIgdW5jb250cm9sbGVkTm9kZXMgPSBuZXcgV2Vha01hcCgpO1xudmFyIG1hcmtlck1hcCA9IHt9O1xudmFyIGxvY2tDb3VudCA9IDA7XG52YXIgdW53cmFwSG9zdCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUgJiYgKG5vZGUuaG9zdCB8fCB1bndyYXBIb3N0KG5vZGUucGFyZW50Tm9kZSkpO1xufTtcbnZhciBjb3JyZWN0VGFyZ2V0cyA9IGZ1bmN0aW9uIChwYXJlbnQsIHRhcmdldHMpIHtcbiAgICByZXR1cm4gdGFyZ2V0c1xuICAgICAgICAubWFwKGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKHBhcmVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb3JyZWN0ZWRUYXJnZXQgPSB1bndyYXBIb3N0KHRhcmdldCk7XG4gICAgICAgIGlmIChjb3JyZWN0ZWRUYXJnZXQgJiYgcGFyZW50LmNvbnRhaW5zKGNvcnJlY3RlZFRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JyZWN0ZWRUYXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcignYXJpYS1oaWRkZW4nLCB0YXJnZXQsICdpbiBub3QgY29udGFpbmVkIGluc2lkZScsIHBhcmVudCwgJy4gRG9pbmcgbm90aGluZycpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiBCb29sZWFuKHgpOyB9KTtcbn07XG4vKipcbiAqIE1hcmtzIGV2ZXJ5dGhpbmcgZXhjZXB0IGdpdmVuIG5vZGUob3Igbm9kZXMpIGFzIGFyaWEtaGlkZGVuXG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBFbGVtZW50W119IG9yaWdpbmFsVGFyZ2V0IC0gZWxlbWVudHMgdG8ga2VlcCBvbiB0aGUgcGFnZVxuICogQHBhcmFtIFtwYXJlbnROb2RlXSAtIHRvcCBlbGVtZW50LCBkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW21hcmtlck5hbWVdIC0gYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIGV2ZXJ5IG5vZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbY29udHJvbEF0dHJpYnV0ZV0gLSBodG1sIEF0dHJpYnV0ZSB0byBjb250cm9sXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xudmFyIGFwcGx5QXR0cmlidXRlVG9PdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUsIGNvbnRyb2xBdHRyaWJ1dGUpIHtcbiAgICB2YXIgdGFyZ2V0cyA9IGNvcnJlY3RUYXJnZXRzKHBhcmVudE5vZGUsIEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXQgOiBbb3JpZ2luYWxUYXJnZXRdKTtcbiAgICBpZiAoIW1hcmtlck1hcFttYXJrZXJOYW1lXSkge1xuICAgICAgICBtYXJrZXJNYXBbbWFya2VyTmFtZV0gPSBuZXcgV2Vha01hcCgpO1xuICAgIH1cbiAgICB2YXIgbWFya2VyQ291bnRlciA9IG1hcmtlck1hcFttYXJrZXJOYW1lXTtcbiAgICB2YXIgaGlkZGVuTm9kZXMgPSBbXTtcbiAgICB2YXIgZWxlbWVudHNUb0tlZXAgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGVsZW1lbnRzVG9TdG9wID0gbmV3IFNldCh0YXJnZXRzKTtcbiAgICB2YXIga2VlcCA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICBpZiAoIWVsIHx8IGVsZW1lbnRzVG9LZWVwLmhhcyhlbCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50c1RvS2VlcC5hZGQoZWwpO1xuICAgICAgICBrZWVwKGVsLnBhcmVudE5vZGUpO1xuICAgIH07XG4gICAgdGFyZ2V0cy5mb3JFYWNoKGtlZXApO1xuICAgIHZhciBkZWVwID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICBpZiAoIXBhcmVudCB8fCBlbGVtZW50c1RvU3RvcC5oYXMocGFyZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwocGFyZW50LmNoaWxkcmVuLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRzVG9LZWVwLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgIGRlZXAobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IG5vZGUuZ2V0QXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWxyZWFkeUhpZGRlbiA9IGF0dHIgIT09IG51bGwgJiYgYXR0ciAhPT0gJ2ZhbHNlJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ZXJWYWx1ZSA9IChjb3VudGVyTWFwLmdldChub2RlKSB8fCAwKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXJWYWx1ZSA9IChtYXJrZXJDb3VudGVyLmdldChub2RlKSB8fCAwKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXJNYXAuc2V0KG5vZGUsIGNvdW50ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlckNvdW50ZXIuc2V0KG5vZGUsIG1hcmtlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuTm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXJWYWx1ZSA9PT0gMSAmJiBhbHJlYWR5SGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmNvbnRyb2xsZWROb2Rlcy5zZXQobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hcmtlclZhbHVlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShtYXJrZXJOYW1lLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxyZWFkeUhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoY29udHJvbEF0dHJpYnV0ZSwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdhcmlhLWhpZGRlbjogY2Fubm90IG9wZXJhdGUgb24gJywgbm9kZSwgZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGRlZXAocGFyZW50Tm9kZSk7XG4gICAgZWxlbWVudHNUb0tlZXAuY2xlYXIoKTtcbiAgICBsb2NrQ291bnQrKztcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBoaWRkZW5Ob2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICB2YXIgY291bnRlclZhbHVlID0gY291bnRlck1hcC5nZXQobm9kZSkgLSAxO1xuICAgICAgICAgICAgdmFyIG1hcmtlclZhbHVlID0gbWFya2VyQ291bnRlci5nZXQobm9kZSkgLSAxO1xuICAgICAgICAgICAgY291bnRlck1hcC5zZXQobm9kZSwgY291bnRlclZhbHVlKTtcbiAgICAgICAgICAgIG1hcmtlckNvdW50ZXIuc2V0KG5vZGUsIG1hcmtlclZhbHVlKTtcbiAgICAgICAgICAgIGlmICghY291bnRlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1bmNvbnRyb2xsZWROb2Rlcy5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoY29udHJvbEF0dHJpYnV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVuY29udHJvbGxlZE5vZGVzLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbWFya2VyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShtYXJrZXJOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvY2tDb3VudC0tO1xuICAgICAgICBpZiAoIWxvY2tDb3VudCkge1xuICAgICAgICAgICAgLy8gY2xlYXJcbiAgICAgICAgICAgIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgY291bnRlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICB1bmNvbnRyb2xsZWROb2RlcyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICBtYXJrZXJNYXAgPSB7fTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuLyoqXG4gKiBNYXJrcyBldmVyeXRoaW5nIGV4Y2VwdCBnaXZlbiBub2RlKG9yIG5vZGVzKSBhcyBhcmlhLWhpZGRlblxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xuZXhwb3J0IHZhciBoaWRlT3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKSB7XG4gICAgaWYgKG1hcmtlck5hbWUgPT09IHZvaWQgMCkgeyBtYXJrZXJOYW1lID0gJ2RhdGEtYXJpYS1oaWRkZW4nOyB9XG4gICAgdmFyIHRhcmdldHMgPSBBcnJheS5mcm9tKEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXQgOiBbb3JpZ2luYWxUYXJnZXRdKTtcbiAgICB2YXIgYWN0aXZlUGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgZ2V0RGVmYXVsdFBhcmVudChvcmlnaW5hbFRhcmdldCk7XG4gICAgaWYgKCFhY3RpdmVQYXJlbnROb2RlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9O1xuICAgIH1cbiAgICAvLyB3ZSBzaG91bGQgbm90IGhpZGUgYXJpYUxpdmUgZWxlbWVudHMgLSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L2FyaWEtaGlkZGVuL2lzc3Vlcy8xMFxuICAgIHRhcmdldHMucHVzaC5hcHBseSh0YXJnZXRzLCBBcnJheS5mcm9tKGFjdGl2ZVBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2FyaWEtbGl2ZV0nKSkpO1xuICAgIHJldHVybiBhcHBseUF0dHJpYnV0ZVRvT3RoZXJzKHRhcmdldHMsIGFjdGl2ZVBhcmVudE5vZGUsIG1hcmtlck5hbWUsICdhcmlhLWhpZGRlbicpO1xufTtcbi8qKlxuICogTWFya3MgZXZlcnl0aGluZyBleGNlcHQgZ2l2ZW4gbm9kZShvciBub2RlcykgYXMgaW5lcnRcbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbmV4cG9ydCB2YXIgaW5lcnRPdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpIHtcbiAgICBpZiAobWFya2VyTmFtZSA9PT0gdm9pZCAwKSB7IG1hcmtlck5hbWUgPSAnZGF0YS1pbmVydC1lZCc7IH1cbiAgICB2YXIgYWN0aXZlUGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgZ2V0RGVmYXVsdFBhcmVudChvcmlnaW5hbFRhcmdldCk7XG4gICAgaWYgKCFhY3RpdmVQYXJlbnROb2RlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9O1xuICAgIH1cbiAgICByZXR1cm4gYXBwbHlBdHRyaWJ1dGVUb090aGVycyhvcmlnaW5hbFRhcmdldCwgYWN0aXZlUGFyZW50Tm9kZSwgbWFya2VyTmFtZSwgJ2luZXJ0Jyk7XG59O1xuLyoqXG4gKiBAcmV0dXJucyBpZiBjdXJyZW50IGJyb3dzZXIgc3VwcG9ydHMgaW5lcnRcbiAqL1xuZXhwb3J0IHZhciBzdXBwb3J0c0luZXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIEhUTUxFbGVtZW50LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgnaW5lcnQnKTtcbn07XG4vKipcbiAqIEF1dG9tYXRpYyBmdW5jdGlvbiB0byBcInN1cHByZXNzXCIgRE9NIGVsZW1lbnRzIC0gX2hpZGVfIG9yIF9pbmVydF8gaW4gdGhlIGJlc3QgcG9zc2libGUgd2F5XG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBFbGVtZW50W119IG9yaWdpbmFsVGFyZ2V0IC0gZWxlbWVudHMgdG8ga2VlcCBvbiB0aGUgcGFnZVxuICogQHBhcmFtIFtwYXJlbnROb2RlXSAtIHRvcCBlbGVtZW50LCBkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW21hcmtlck5hbWVdIC0gYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIGV2ZXJ5IG5vZGVcbiAqIEByZXR1cm4ge1VuZG99IHVuZG8gY29tbWFuZFxuICovXG5leHBvcnQgdmFyIHN1cHByZXNzT3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKSB7XG4gICAgaWYgKG1hcmtlck5hbWUgPT09IHZvaWQgMCkgeyBtYXJrZXJOYW1lID0gJ2RhdGEtc3VwcHJlc3NlZCc7IH1cbiAgICByZXR1cm4gKHN1cHBvcnRzSW5lcnQoKSA/IGluZXJ0T3RoZXJzIDogaGlkZU90aGVycykob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpO1xufTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBzdHlsZVNpbmdsZXRvbiB9IGZyb20gJ3JlYWN0LXN0eWxlLXNpbmdsZXRvbic7XG5pbXBvcnQgeyBmb2N1c0hpZGRlbk1hcmtlciB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBTdHlsZSA9IHN0eWxlU2luZ2xldG9uKCk7XG52YXIgc3R5bGVzID0gXCJcXG4gW1wiICsgZm9jdXNIaWRkZW5NYXJrZXIgKyBcIl0ge1xcbiAgIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XFxuIH1cXG5cIjtcbmV4cG9ydCB2YXIgSW50ZXJhY3Rpdml0eURpc2FibGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IHN0eWxlcyB9KTsgfTtcbiIsICJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0ICdyZWFjdC1mb2N1cy1sb2NrL3NpZGVjYXInO1xuaW1wb3J0ICdyZWFjdC1yZW1vdmUtc2Nyb2xsL3NpZGVjYXInO1xuaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSAnLi9FZmZlY3QnO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xuZXhwb3J0IGRlZmF1bHQgZXhwb3J0U2lkZWNhcihlZmZlY3RDYXIsIEVmZmVjdCk7XG4iLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImFuY2hvclBvc2l0aW9uXCIsIFwiYnV0dG9uXCIsIFwiaW5zZXJ0XCIsIFwiaXNPcGVuXCIsIFwib3duRm9jdXNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNsb3NlUG9wb3ZlclwiLCBcInBhbmVsQ2xhc3NOYW1lXCIsIFwicGFuZWxQYWRkaW5nU2l6ZVwiLCBcInBhbmVsUHJvcHNcIiwgXCJwYW5lbFJlZlwiLCBcInBhbmVsU3R5bGVcIiwgXCJwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dFwiLCBcInBvcG92ZXJSZWZcIiwgXCJoYXNBcnJvd1wiLCBcImFycm93Q2hpbGRyZW5cIiwgXCJyZXBvc2l0aW9uT25TY3JvbGxcIiwgXCJyZXBvc2l0aW9uVG9Dcm9zc0F4aXNcIiwgXCJoYXNEcmFnRHJvcFwiLCBcInpJbmRleFwiLCBcImF0dGFjaFRvQW5jaG9yXCIsIFwiZGlzcGxheVwiLCBcIm9mZnNldFwiLCBcIm9uUG9zaXRpb25DaGFuZ2VcIiwgXCJidWZmZXJcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwiY29udGFpbmVyXCIsIFwiZm9jdXNUcmFwUHJvcHNcIiwgXCJpbml0aWFsRm9jdXNcIiwgXCJ0YWJJbmRleFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZm9jdXNhYmxlIH0gZnJvbSAndGFiYmFibGUnO1xuaW1wb3J0IHsgRXVpRm9jdXNUcmFwIH0gZnJvbSAnLi4vZm9jdXNfdHJhcCc7XG5pbXBvcnQgeyBrZXlzLCBnZXRUcmFuc2l0aW9uVGltaW5ncywgZ2V0V2FpdER1cmF0aW9uLCBwZXJmb3JtT25GcmFtZSwgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgc2V0TXVsdGlwbGVSZWZzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaG9va3MvdXNlQ29tYmluZWRSZWZzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aVBvcnRhbCB9IGZyb20gJy4uL3BvcnRhbCc7XG5pbXBvcnQgeyBFdWlNdXRhdGlvbk9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvbXV0YXRpb25fb2JzZXJ2ZXInO1xuaW1wb3J0IHsgZmluZFBvcG92ZXJQb3NpdGlvbiwgZ2V0RWxlbWVudFpJbmRleCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IgfSBmcm9tICcuLi9vdXRzaWRlX2NsaWNrX2RldGVjdG9yJztcbmltcG9ydCB7IEV1aVBvcG92ZXJBcnJvdyB9IGZyb20gJy4vcG9wb3Zlcl9hcnJvdyc7XG5pbXBvcnQgeyBldWlQb3BvdmVyU3R5bGVzIH0gZnJvbSAnLi9wb3BvdmVyLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlQb3BvdmVyUGFuZWwgfSBmcm9tICcuL3BvcG92ZXJfcGFuZWwnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgcG9wb3ZlckFuY2hvclBvc2l0aW9uID0gWyd1cENlbnRlcicsICd1cExlZnQnLCAndXBSaWdodCcsICdkb3duQ2VudGVyJywgJ2Rvd25MZWZ0JywgJ2Rvd25SaWdodCcsICdsZWZ0Q2VudGVyJywgJ2xlZnRVcCcsICdsZWZ0RG93bicsICdyaWdodENlbnRlcicsICdyaWdodFVwJywgJ3JpZ2h0RG93biddO1xudmFyIGFuY2hvclBvc2l0aW9uVG9Qb3BvdmVyUG9zaXRpb25NYXAgPSB7XG4gIHVwOiAndG9wJyxcbiAgcmlnaHQ6ICdyaWdodCcsXG4gIGRvd246ICdib3R0b20nLFxuICBsZWZ0OiAnbGVmdCdcbn07XG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wb3ZlclBvc2l0aW9uRnJvbUFuY2hvclBvc2l0aW9uKGFuY2hvclBvc2l0aW9uKSB7XG4gIC8vIG1hcHMgdGhlIGFuY2hvciBwb3NpdGlvbiB0byB0aGUgbWF0Y2hpbmcgcG9wb3ZlciBwb3NpdGlvblxuICAvLyBlLmcuIFwidXBMZWZ0XCIgLT4gXCJ0b3BcIiwgXCJkb3duUmlnaHRcIiAtPiBcImJvdHRvbVwiXG5cbiAgLy8gZXh0cmFjdCB0aGUgZmlyc3QgcG9zaXRpb25hbCB3b3JkIGZyb20gYW5jaG9yUG9zaXRpb246XG4gIC8vIHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIChcIiBeIFwiKSBvZiBhbmNob3JQb3NpdGlvbiBhbmRcbiAgLy8gY2FwdHVyZXMgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIChcIiAoLio/KSBcIikgdW50aWwgdGhlXG4gIC8vIGZpcnN0IGNhcGl0YWwgbGV0dGVyIChcIiBbQS1aXSBcIikgaXMgZW5jb3VudGVyZWRcbiAgdmFyIF9yZWYgPSBhbmNob3JQb3NpdGlvbi5tYXRjaCgvXiguKj8pW0EtWl0vKSxcbiAgICBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgIHByaW1hcnlQb3NpdGlvbiA9IF9yZWYyWzFdO1xuICByZXR1cm4gYW5jaG9yUG9zaXRpb25Ub1BvcG92ZXJQb3NpdGlvbk1hcFtwcmltYXJ5UG9zaXRpb25dO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcG92ZXJBbGlnbkZyb21BbmNob3JQb3NpdGlvbihhbmNob3JQb3NpdGlvbikge1xuICAvLyBtYXBzIHRoZSBncmF2aXR5IHRvIHRoZSBtYXRjaGluZyBwb3BvdmVyIHBvc2l0aW9uXG4gIC8vIGUuZy4gXCJ1cExlZnRcIiAtPiBcImxlZnRcIiwgXCJyaWdodERvd25cIiAtPiBcImJvdHRvbVwiXG5cbiAgLy8gZXh0cmFjdCB0aGUgc2Vjb25kIHBvc2l0aW9uYWwgd29yZCBmcm9tIGFuY2hvclBvc2l0aW9uOlxuICAvLyBzdGFydHMgYSBjYXB0dXJlIGdyb3VwIGF0IHRoZSBmaXJzdCBjYXBpdGFsIGxldHRlclxuICAvLyBhbmQgaW5jbHVkZXMgZXZlcnl0aGluZyBhZnRlciBpdFxuICB2YXIgX3JlZjMgPSBhbmNob3JQb3NpdGlvbi5tYXRjaCgvKFtBLVpdLiopLyksXG4gICAgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksXG4gICAgYWxpZ24gPSBfcmVmNFsxXTtcblxuICAvLyB0aGlzIHBlcmZvcm1zIHR3byB0YXNrczpcbiAgLy8gMS4gbm9ybWFsaXplcyB0aGUgYWxpZ24gcG9zaXRpb24gYnkgbG93ZXJjYXNpbmcgaXRcbiAgLy8gMi4gYGNlbnRlcmAgZG9lc24ndCBleGlzdCBpbiB0aGUgbG9va3VwIG1hcCB3aGljaCBjb252ZXJ0cyBpdCB0byBgdW5kZWZpbmVkYCBtZWFuaW5nIG5vIGFsaWduXG4gIHJldHVybiBhbmNob3JQb3NpdGlvblRvUG9wb3ZlclBvc2l0aW9uTWFwW2FsaWduLnRvTG93ZXJDYXNlKCldO1xufVxudmFyIERFRkFVTFRfUE9QT1ZFUl9TVFlMRVMgPSB7XG4gIHRvcDogNTAsXG4gIGxlZnQ6IDUwXG59O1xudmFyIHJldHVybkZvY3VzQ29uZmlnID0ge1xuICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG59O1xudmFyIGNsb3NpbmdUcmFuc2l0aW9uVGltZSA9IDI1MDsgLy8gVE9ETzogRFJZIG91dCB2YXIgd2hlbiBjb252ZXJ0aW5nIHRvIENTUy1pbi1KU1xuXG5leHBvcnQgdmFyIEV1aVBvcG92ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpUG9wb3Zlcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpUG9wb3Zlcik7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aVBvcG92ZXIsIFtwcm9wc10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZXNwb3NpdGlvblRpbWVvdXRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic3RyYW5kZWRGb2N1c1RpbWVvdXRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2xvc2luZ1RyYW5zaXRpb25UaW1lb3V0XCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWVcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYnV0dG9uXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwYW5lbFwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZGVzY3JpcHRpb25JZFwiLCBodG1sSWRHZW5lcmF0b3IoKSgpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2xvc2VQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pc09wZW4pIHtcbiAgICAgICAgX3RoaXMucHJvcHMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uRXNjYXBlS2V5XCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLmlzT3Blbikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgX3RoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgIF90aGlzLmhhbmRsZVN0cmFuZGVkRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaGFuZGxlU3RyYW5kZWRGb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zdHJhbmRlZEZvY3VzVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gSWYgYHJldHVybkZvY3VzYCBmYWlsZWQgYW5kIGZvY3VzIHdhcyBzdHJhbmRlZCxcbiAgICAgICAgLy8gYXR0ZW1wdCB0byBtYW51YWxseSByZXN0b3JlIGZvY3VzIHRvIHRoZSB0b2dnbGUgYnV0dG9uLlxuICAgICAgICAvLyBUaGUgc3RyYW5kZWQgZm9jdXMgaXMgZWl0aGVyIGluIG1vc3QgY2FzZXMgb24gYm9keSBidXRcbiAgICAgICAgLy8gaXQgd2lsbCBiZSBvbiB0aGUgcGFuZWwgaW5zdGVhZCBvbiBtb3VudCB3aGVuIGlzT3Blbj10cnVlXG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IF90aGlzLnBhbmVsKSB7XG4gICAgICAgICAgaWYgKCFfdGhpcy5idXR0b24pIHJldHVybjtcbiAgICAgICAgICB2YXIgZm9jdXNhYmxlSXRlbXMgPSBmb2N1c2FibGUoX3RoaXMuYnV0dG9uKTtcbiAgICAgICAgICBpZiAoIWZvY3VzYWJsZUl0ZW1zLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgIHZhciB0b2dnbGVCdXR0b24gPSBmb2N1c2FibGVJdGVtc1swXTtcbiAgICAgICAgICB0b2dnbGVCdXR0b24uZm9jdXMocmV0dXJuRm9jdXNDb25maWcpO1xuICAgICAgICB9XG4gICAgICB9LCBjbG9zaW5nVHJhbnNpdGlvblRpbWUpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkVTQ0FQRSkge1xuICAgICAgICBfdGhpcy5vbkVzY2FwZUtleShldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQ2xpY2tPdXRzaWRlXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gb25seSBjbG9zZSB0aGUgcG9wb3ZlciBpZiB0aGUgZXZlbnQgc291cmNlIGlzbid0IHRoZSBhbmNob3IgYnV0dG9uXG4gICAgICAvLyBvdGhlcndpc2UsIGl0IGlzIHVwIHRvIHRoZSBhbmNob3IgdG8gdG9nZ2xlIHRoZSBwb3BvdmVyJ3Mgb3BlbiBzdGF0dXNcbiAgICAgIGlmIChfdGhpcy5idXR0b24gJiYgX3RoaXMuYnV0dG9uLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgPT09IGZhbHNlKSB7XG4gICAgICAgIF90aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbk9wZW5Qb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNsZWFyVGltZW91dChfdGhpcy5zdHJhbmRlZEZvY3VzVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQoX3RoaXMuY2xvc2luZ1RyYW5zaXRpb25UaW1lb3V0KTtcbiAgICAgIGlmIChfdGhpcy5jbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKF90aGlzLmNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWUpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhpcyBzdGF0ZSBhIGJlYXQgYWZ0ZXIgdGhlIHJlbmRlciB0YWtlcyBwbGFjZSwgc28gdGhhdCB0aGUgQ1NTXG4gICAgICAvLyB0cmFuc2l0aW9uIGNhbiB0YWtlIGVmZmVjdC5cbiAgICAgIF90aGlzLmNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzT3BlbmluZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBmb3IgZWFjaCBjaGlsZCBlbGVtZW50IG9mIGB0aGlzLnBhbmVsYCwgZmluZCBhbnkgdHJhbnNpdGlvbiBkdXJhdGlvbiB3ZSBzaG91bGQgd2FpdCBmb3IgYmVmb3JlIHN0YWJpbGl6aW5nXG4gICAgICB2YXIgX0FycmF5JHByb3RvdHlwZSRzbGljID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoX3RoaXMucGFuZWwgPyBbX3RoaXMucGFuZWxdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoQXJyYXkuZnJvbShfdGhpcy5wYW5lbC5jaGlsZHJlbikpKSA6IFtdKS5yZWR1Y2UoZnVuY3Rpb24gKF9yZWY1LCBlbGVtZW50KSB7XG4gICAgICAgICAgdmFyIGR1cmF0aW9uTWF0Y2ggPSBfcmVmNS5kdXJhdGlvbk1hdGNoLFxuICAgICAgICAgICAgZGVsYXlNYXRjaCA9IF9yZWY1LmRlbGF5TWF0Y2g7XG4gICAgICAgICAgdmFyIHRyYW5zaXRpb25UaW1pbmdzID0gZ2V0VHJhbnNpdGlvblRpbWluZ3MoZWxlbWVudCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGR1cmF0aW9uTWF0Y2g6IE1hdGgubWF4KGR1cmF0aW9uTWF0Y2gsIHRyYW5zaXRpb25UaW1pbmdzLmR1cmF0aW9uTWF0Y2gpLFxuICAgICAgICAgICAgZGVsYXlNYXRjaDogTWF0aC5tYXgoZGVsYXlNYXRjaCwgdHJhbnNpdGlvblRpbWluZ3MuZGVsYXlNYXRjaClcbiAgICAgICAgICB9O1xuICAgICAgICB9LCB7XG4gICAgICAgICAgZHVyYXRpb25NYXRjaDogMCxcbiAgICAgICAgICBkZWxheU1hdGNoOiAwXG4gICAgICAgIH0pLFxuICAgICAgICBkdXJhdGlvbk1hdGNoID0gX0FycmF5JHByb3RvdHlwZSRzbGljLmR1cmF0aW9uTWF0Y2gsXG4gICAgICAgIGRlbGF5TWF0Y2ggPSBfQXJyYXkkcHJvdG90eXBlJHNsaWMuZGVsYXlNYXRjaDtcbiAgICAgIGNsZWFyVGltZW91dChfdGhpcy5yZXNwb3NpdGlvblRpbWVvdXQpO1xuICAgICAgX3RoaXMucmVzcG9zaXRpb25UaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNPcGVuU3RhYmxlOiB0cnVlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGR1cmF0aW9uTWF0Y2ggKyBkZWxheU1hdGNoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25NdXRhdGlvblwiLCBmdW5jdGlvbiAocmVjb3Jkcykge1xuICAgICAgdmFyIHdhaXREdXJhdGlvbiA9IGdldFdhaXREdXJhdGlvbihyZWNvcmRzKTtcbiAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkKCk7XG4gICAgICBwZXJmb3JtT25GcmFtZSh3YWl0RHVyYXRpb24sIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicG9zaXRpb25Qb3BvdmVyXCIsIGZ1bmN0aW9uIChhbGxvd0VuZm9yY2VQb3NpdGlvbikge1xuICAgICAgaWYgKF90aGlzLmJ1dHRvbiA9PSBudWxsIHx8IF90aGlzLnBhbmVsID09IG51bGwpIHJldHVybjtcbiAgICAgIHZhciBfcmVmNiA9IF90aGlzLnByb3BzLFxuICAgICAgICBhbmNob3JQb3NpdGlvbiA9IF9yZWY2LmFuY2hvclBvc2l0aW9uLFxuICAgICAgICBfcmVmNiRvZmZzZXQgPSBfcmVmNi5vZmZzZXQsXG4gICAgICAgIG9mZnNldCA9IF9yZWY2JG9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9yZWY2JG9mZnNldDtcbiAgICAgIHZhciBwb3NpdGlvbiA9IGdldFBvcG92ZXJQb3NpdGlvbkZyb21BbmNob3JQb3NpdGlvbihhbmNob3JQb3NpdGlvbik7XG4gICAgICB2YXIgZm9yY2VQb3NpdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIGlmIChhbGxvd0VuZm9yY2VQb3NpdGlvbiAmJiBfdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgJiYgX3RoaXMuc3RhdGUub3BlblBvc2l0aW9uICE9IG51bGwpIHtcbiAgICAgICAgcG9zaXRpb24gPSBfdGhpcy5zdGF0ZS5vcGVuUG9zaXRpb247XG4gICAgICAgIGZvcmNlUG9zaXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIF9maW5kUG9wb3ZlclBvc2l0aW9uID0gZmluZFBvcG92ZXJQb3NpdGlvbih7XG4gICAgICAgICAgY29udGFpbmVyOiBfdGhpcy5wcm9wcy5jb250YWluZXIsXG4gICAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICAgIGZvcmNlUG9zaXRpb246IGZvcmNlUG9zaXRpb24sXG4gICAgICAgICAgYWxpZ246IGdldFBvcG92ZXJBbGlnbkZyb21BbmNob3JQb3NpdGlvbihhbmNob3JQb3NpdGlvbiksXG4gICAgICAgICAgYW5jaG9yOiBfdGhpcy5idXR0b24sXG4gICAgICAgICAgcG9wb3ZlcjogX3RoaXMucGFuZWwsXG4gICAgICAgICAgb2Zmc2V0OiBfdGhpcy5wcm9wcy5hdHRhY2hUb0FuY2hvciA/IG9mZnNldCA6IF90aGlzLnByb3BzLmhhc0Fycm93ID8gMTYgKyBvZmZzZXQgOiA4ICsgb2Zmc2V0LFxuICAgICAgICAgIGFycm93Q29uZmlnOiBfdGhpcy5wcm9wcy5oYXNBcnJvdyA/IHtcbiAgICAgICAgICAgIGFycm93V2lkdGg6IDI0LFxuICAgICAgICAgICAgYXJyb3dCdWZmZXI6IDEwXG4gICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIGFycm93V2lkdGg6IDAsXG4gICAgICAgICAgICBhcnJvd0J1ZmZlcjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmV0dXJuQm91bmRpbmdCb3g6IF90aGlzLnByb3BzLmF0dGFjaFRvQW5jaG9yLFxuICAgICAgICAgIGFsbG93Q3Jvc3NBeGlzOiBfdGhpcy5wcm9wcy5yZXBvc2l0aW9uVG9Dcm9zc0F4aXMsXG4gICAgICAgICAgYnVmZmVyOiBfdGhpcy5wcm9wcy5idWZmZXJcbiAgICAgICAgfSksXG4gICAgICAgIHRvcCA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLnRvcCxcbiAgICAgICAgbGVmdCA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLmxlZnQsXG4gICAgICAgIGZvdW5kUG9zaXRpb24gPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5wb3NpdGlvbixcbiAgICAgICAgYXJyb3cgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5hcnJvdztcblxuICAgICAgLy8gdGhlIHBvcG92ZXIncyB6LWluZGV4IG11c3QgaW5oZXJpdCBmcm9tIHRoZSBidXR0b25cbiAgICAgIC8vIHRoaXMga2VlcHMgYSBidXR0b24ncyBwb3BvdmVyIHVuZGVyIGEgZmx5b3V0IHRoYXQgd291bGQgY292ZXIgdGhlIGJ1dHRvblxuICAgICAgLy8gYnV0IGEgcG9wb3ZlciB0cmlnZ2VyZWQgaW5zaWRlIGEgZmx5b3V0IHdpbGwgYXBwZWFyIG92ZXIgdGhhdCBmbHlvdXRcbiAgICAgIHZhciB6SW5kZXhQcm9wID0gX3RoaXMucHJvcHMuekluZGV4O1xuICAgICAgdmFyIHpJbmRleCA9IHpJbmRleFByb3AgPT0gbnVsbCA/IGdldEVsZW1lbnRaSW5kZXgoX3RoaXMuYnV0dG9uLCBfdGhpcy5wYW5lbCkgKyAyMDAwIDogekluZGV4UHJvcDtcbiAgICAgIHZhciBwb3BvdmVyU3R5bGVzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBfdGhpcy5wcm9wcy5wYW5lbFN0eWxlKSwge30sIHtcbiAgICAgICAgdG9wOiB0b3AsXG4gICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgIHpJbmRleDogekluZGV4XG4gICAgICB9KTtcbiAgICAgIHZhciB3aWxsUmVuZGVyQXJyb3cgPSAhX3RoaXMucHJvcHMuYXR0YWNoVG9BbmNob3IgJiYgX3RoaXMucHJvcHMuaGFzQXJyb3c7XG4gICAgICB2YXIgYXJyb3dTdHlsZXMgPSB3aWxsUmVuZGVyQXJyb3cgPyBhcnJvdyA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBhcnJvd1Bvc2l0aW9uID0gZm91bmRQb3NpdGlvbjtcbiAgICAgIF90aGlzLnByb3BzLm9uUG9zaXRpb25DaGFuZ2UgJiYgX3RoaXMucHJvcHMub25Qb3NpdGlvbkNoYW5nZShhcnJvd1Bvc2l0aW9uKTtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcG9wb3ZlclN0eWxlczogcG9wb3ZlclN0eWxlcyxcbiAgICAgICAgYXJyb3dTdHlsZXM6IGFycm93U3R5bGVzLFxuICAgICAgICBhcnJvd1Bvc2l0aW9uOiBhcnJvd1Bvc2l0aW9uLFxuICAgICAgICBvcGVuUG9zaXRpb246IGZvdW5kUG9zaXRpb25cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwb3NpdGlvblBvcG92ZXJGaXhlZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5wb3NpdGlvblBvcG92ZXIodHJ1ZSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInBvc2l0aW9uUG9wb3ZlckZsdWlkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3ZlcihmYWxzZSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInBhbmVsUmVmXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5wYW5lbCA9IG5vZGU7XG4gICAgICBfdGhpcy5wcm9wcy5wYW5lbFJlZiAmJiBfdGhpcy5wcm9wcy5wYW5lbFJlZihub2RlKTtcbiAgICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgICAgLy8gcGFuZWwgaGFzIHVubW91bnRlZCwgcmVzdG9yZSB0aGUgc3RhdGUgZGVmYXVsdHNcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHBvcG92ZXJTdHlsZXM6IERFRkFVTFRfUE9QT1ZFUl9TVFlMRVMsXG4gICAgICAgICAgYXJyb3dTdHlsZXM6IHt9LFxuICAgICAgICAgIGFycm93UG9zaXRpb246IG51bGwsXG4gICAgICAgICAgb3BlblBvc2l0aW9uOiBudWxsLFxuICAgICAgICAgIGlzT3BlblN0YWJsZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBfdGhpcy5wb3NpdGlvblBvcG92ZXJGbHVpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwYW5lbCBpcyBjb21pbmcgaW50byBleGlzdGVuY2VcbiAgICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyRmx1aWQoKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZsdWlkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicG9wb3ZlclJlZlwiLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgX3RoaXMuYnV0dG9uID0gbm9kZTtcbiAgICAgIHNldE11bHRpcGxlUmVmcyhbX3RoaXMucHJvcHMucG9wb3ZlclJlZl0sIG5vZGUpO1xuICAgIH0pO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgcHJldlByb3BzOiB7XG4gICAgICAgIGlzT3BlbjogcHJvcHMuaXNPcGVuXG4gICAgICB9LFxuICAgICAgc3VwcHJlc3NpbmdQb3BvdmVyOiBwcm9wcy5pc09wZW4sXG4gICAgICAvLyBvbmx5IHN1cHByZXNzIGlmIGNyZWF0ZWQgd2l0aCBpc09wZW49dHJ1ZVxuICAgICAgaXNDbG9zaW5nOiBmYWxzZSxcbiAgICAgIGlzT3BlbmluZzogZmFsc2UsXG4gICAgICBwb3BvdmVyU3R5bGVzOiBERUZBVUxUX1BPUE9WRVJfU1RZTEVTLFxuICAgICAgYXJyb3dTdHlsZXM6IHt9LFxuICAgICAgYXJyb3dQb3NpdGlvbjogbnVsbCxcbiAgICAgIG9wZW5Qb3NpdGlvbjogbnVsbCxcbiAgICAgIC8vIG9uY2UgYSBzdGFibGUgcG9zaXRpb24gaGFzIGJlZW4gZm91bmQsIGtlZXAgdGhlIGNvbnRlbnRzIG9uIHRoYXQgc2lkZVxuICAgICAgaXNPcGVuU3RhYmxlOiBmYWxzZSAvLyB3YWl0IGZvciBhbnkgaW5pdGlhbCBvcGVuaW5nIHRyYW5zaXRpb25zIHRvIGZpbmlzaCBiZWZvcmUgbWFya2luZyBhcyBzdGFibGVcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpUG9wb3ZlciwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpUG9wb3ZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIGlmICh0aGlzLnN0YXRlLnN1cHByZXNzaW5nUG9wb3Zlcikge1xuICAgICAgICAvLyBjb21wb25lbnQgd2FzIGNyZWF0ZWQgd2l0aCBpc09wZW49dHJ1ZTsgbm93IHRoYXQgaXQncyBtb3VudGVkXG4gICAgICAgIC8vIHN0b3Agc3VwcHJlc3NpbmcgYW5kIHN0YXJ0IG9wZW5pbmdcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc3VwcHJlc3NpbmdQb3BvdmVyOiBmYWxzZSxcbiAgICAgICAgICBpc09wZW5pbmc6IHRydWVcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5vbk9wZW5Qb3BvdmVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgLy8gVGhlIHBvcG92ZXIgaXMgYmVpbmcgb3BlbmVkLlxuICAgICAgaWYgKCFwcmV2UHJvcHMuaXNPcGVuICYmIHRoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub25PcGVuUG9wb3ZlcigpO1xuICAgICAgfVxuXG4gICAgICAvLyBlbnN1cmUgcmVjYWxjdWxhdGlvbiBvZiBwYW5lbCBwb3NpdGlvbiBvbiBwcm9wIHVwZGF0ZXNcbiAgICAgIGlmICh0aGlzLnByb3BzLmlzT3BlbiAmJiAocHJldlByb3BzLmFuY2hvclBvc2l0aW9uICE9PSB0aGlzLnByb3BzLmFuY2hvclBvc2l0aW9uIHx8IHByZXZQcm9wcy5idWZmZXIgIT09IHRoaXMucHJvcHMuYnVmZmVyIHx8IHByZXZQcm9wcy5vZmZzZXQgIT09IHRoaXMucHJvcHMub2Zmc2V0IHx8IHByZXZQcm9wcy5wYW5lbFBhZGRpbmdTaXplICE9PSB0aGlzLnByb3BzLnBhbmVsUGFkZGluZ1NpemUpKSB7XG4gICAgICAgIHRoaXMucG9zaXRpb25Qb3BvdmVyRmx1aWQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIHNjcm9sbCBsaXN0ZW5lclxuICAgICAgaWYgKHByZXZQcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwgIT09IHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnJlcG9zaXRpb25PblNjcm9sbCkge1xuICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHBvcG92ZXIgaXMgYmVpbmcgY2xvc2VkLlxuICAgICAgaWYgKHByZXZQcm9wcy5pc09wZW4gJiYgIXRoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBqdXN0IGNsb3NlZCB0aGUgcG9wb3ZlciwgcXVldWUgdXAgdGhlIHJlbW92YWwgb2YgdGhlIGNvbnRlbnQgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIHRyYW5zaXRpb24gaXMgY29tcGxldGUuXG4gICAgICAgIHRoaXMuY2xvc2luZ1RyYW5zaXRpb25UaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpc0Nsb3Npbmc6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNsb3NpbmdUcmFuc2l0aW9uVGltZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQsIHRydWUpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVzcG9zaXRpb25UaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN0cmFuZGVkRm9jdXNUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NpbmdUcmFuc2l0aW9uVGltZW91dCk7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF9wYW5lbFByb3BzJHRhYkluZGV4LFxuICAgICAgICBfdGhpczQgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgYW5jaG9yUG9zaXRpb24gPSBfdGhpcyRwcm9wcy5hbmNob3JQb3NpdGlvbixcbiAgICAgICAgYnV0dG9uID0gX3RoaXMkcHJvcHMuYnV0dG9uLFxuICAgICAgICBpbnNlcnQgPSBfdGhpcyRwcm9wcy5pbnNlcnQsXG4gICAgICAgIGlzT3BlbiA9IF90aGlzJHByb3BzLmlzT3BlbixcbiAgICAgICAgb3duRm9jdXMgPSBfdGhpcyRwcm9wcy5vd25Gb2N1cyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICBjbG9zZVBvcG92ZXIgPSBfdGhpcyRwcm9wcy5jbG9zZVBvcG92ZXIsXG4gICAgICAgIHBhbmVsQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMucGFuZWxDbGFzc05hbWUsXG4gICAgICAgIHBhbmVsUGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wcy5wYW5lbFBhZGRpbmdTaXplLFxuICAgICAgICBwYW5lbFByb3BzID0gX3RoaXMkcHJvcHMucGFuZWxQcm9wcyxcbiAgICAgICAgcGFuZWxSZWYgPSBfdGhpcyRwcm9wcy5wYW5lbFJlZixcbiAgICAgICAgcGFuZWxTdHlsZSA9IF90aGlzJHByb3BzLnBhbmVsU3R5bGUsXG4gICAgICAgIHBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0ID0gX3RoaXMkcHJvcHMucG9wb3ZlclNjcmVlblJlYWRlclRleHQsXG4gICAgICAgIHBvcG92ZXJSZWYgPSBfdGhpcyRwcm9wcy5wb3BvdmVyUmVmLFxuICAgICAgICBoYXNBcnJvdyA9IF90aGlzJHByb3BzLmhhc0Fycm93LFxuICAgICAgICBhcnJvd0NoaWxkcmVuID0gX3RoaXMkcHJvcHMuYXJyb3dDaGlsZHJlbixcbiAgICAgICAgcmVwb3NpdGlvbk9uU2Nyb2xsID0gX3RoaXMkcHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsLFxuICAgICAgICByZXBvc2l0aW9uVG9Dcm9zc0F4aXMgPSBfdGhpcyRwcm9wcy5yZXBvc2l0aW9uVG9Dcm9zc0F4aXMsXG4gICAgICAgIGhhc0RyYWdEcm9wID0gX3RoaXMkcHJvcHMuaGFzRHJhZ0Ryb3AsXG4gICAgICAgIHpJbmRleCA9IF90aGlzJHByb3BzLnpJbmRleCxcbiAgICAgICAgYXR0YWNoVG9BbmNob3IgPSBfdGhpcyRwcm9wcy5hdHRhY2hUb0FuY2hvcixcbiAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgIG9mZnNldCA9IF90aGlzJHByb3BzLm9mZnNldCxcbiAgICAgICAgb25Qb3NpdGlvbkNoYW5nZSA9IF90aGlzJHByb3BzLm9uUG9zaXRpb25DaGFuZ2UsXG4gICAgICAgIGJ1ZmZlciA9IF90aGlzJHByb3BzLmJ1ZmZlcixcbiAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHNbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgYXJpYUxhYmVsbGVkQnkgPSBfdGhpcyRwcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10sXG4gICAgICAgIGNvbnRhaW5lciA9IF90aGlzJHByb3BzLmNvbnRhaW5lcixcbiAgICAgICAgZm9jdXNUcmFwUHJvcHMgPSBfdGhpcyRwcm9wcy5mb2N1c1RyYXBQcm9wcyxcbiAgICAgICAgaW5pdGlhbEZvY3VzUHJvcCA9IF90aGlzJHByb3BzLmluaXRpYWxGb2N1cyxcbiAgICAgICAgX3RhYkluZGV4UHJvcCA9IF90aGlzJHByb3BzLnRhYkluZGV4LFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIHRhYkluZGV4UHJvcCA9IChfcGFuZWxQcm9wcyR0YWJJbmRleCA9IHBhbmVsUHJvcHMgPT09IG51bGwgfHwgcGFuZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFuZWxQcm9wcy50YWJJbmRleCkgIT09IG51bGwgJiYgX3BhbmVsUHJvcHMkdGFiSW5kZXggIT09IHZvaWQgMCA/IF9wYW5lbFByb3BzJHRhYkluZGV4IDogX3RhYkluZGV4UHJvcDtcbiAgICAgIHZhciBzdHlsZXMgPSBldWlQb3BvdmVyU3R5bGVzKCk7XG4gICAgICB2YXIgcG9wb3ZlclN0eWxlcyA9IFtzdHlsZXMuZXVpUG9wb3Zlciwge1xuICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LFxuICAgICAgICBsYWJlbDogZGlzcGxheVxuICAgICAgfV07XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBvcG92ZXInLCB7XG4gICAgICAgICdldWlQb3BvdmVyLWlzT3Blbic6IHRoaXMuc3RhdGUuaXNPcGVuaW5nXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIHNob3dBcnJvdyA9IGhhc0Fycm93ICYmICFhdHRhY2hUb0FuY2hvcjtcbiAgICAgIHZhciBwYW5lbDtcbiAgICAgIGlmICghdGhpcy5zdGF0ZS5zdXBwcmVzc2luZ1BvcG92ZXIgJiYgKGlzT3BlbiB8fCB0aGlzLnN0YXRlLmlzQ2xvc2luZykpIHtcbiAgICAgICAgdmFyIHRhYkluZGV4ID0gdGFiSW5kZXhQcm9wO1xuICAgICAgICB2YXIgaW5pdGlhbEZvY3VzID0gaW5pdGlhbEZvY3VzUHJvcDtcbiAgICAgICAgdmFyIGFyaWFEZXNjcmliZWRieTtcbiAgICAgICAgdmFyIGFyaWFMaXZlO1xuICAgICAgICB2YXIgcGFuZWxBcmlhTW9kYWwgPSBwYW5lbFByb3BzICE9PSBudWxsICYmIHBhbmVsUHJvcHMgIT09IHZvaWQgMCAmJiBwYW5lbFByb3BzLmhhc093blByb3BlcnR5KCdhcmlhLW1vZGFsJykgPyBwYW5lbFByb3BzWydhcmlhLW1vZGFsJ10gOiAndHJ1ZSc7XG4gICAgICAgIHZhciBwYW5lbFJvbGUgPSBwYW5lbFByb3BzICE9PSBudWxsICYmIHBhbmVsUHJvcHMgIT09IHZvaWQgMCAmJiBwYW5lbFByb3BzLmhhc093blByb3BlcnR5KCdyb2xlJykgPyBwYW5lbFByb3BzLnJvbGUgOiAnZGlhbG9nJztcbiAgICAgICAgaWYgKG93bkZvY3VzIHx8IHBhbmVsQXJpYU1vZGFsICE9PSAndHJ1ZScpIHtcbiAgICAgICAgICB0YWJJbmRleCA9IHRhYkluZGV4UHJvcCAhPT0gbnVsbCAmJiB0YWJJbmRleFByb3AgIT09IHZvaWQgMCA/IHRhYkluZGV4UHJvcCA6IDA7XG4gICAgICAgICAgYXJpYUxpdmUgPSAnb2ZmJztcbiAgICAgICAgICBpZiAoIWluaXRpYWxGb2N1cykge1xuICAgICAgICAgICAgaW5pdGlhbEZvY3VzID0gZnVuY3Rpb24gaW5pdGlhbEZvY3VzKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXM0LnBhbmVsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJpYUxpdmUgPSAnYXNzZXJ0aXZlJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZm9jdXNUcmFwU2NyZWVuUmVhZGVyVGV4dDtcbiAgICAgICAgaWYgKG93bkZvY3VzIHx8IHBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0KSB7XG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5ID0gdGhpcy5kZXNjcmlwdGlvbklkO1xuICAgICAgICAgIGZvY3VzVHJhcFNjcmVlblJlYWRlclRleHQgPSBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmRlc2NyaXB0aW9uSWRcbiAgICAgICAgICB9LCBvd25Gb2N1cyAmJiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVBvcG92ZXIuc2NyZWVuUmVhZGVyQW5ub3VuY2VtZW50XCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIllvdSBhcmUgaW4gYSBkaWFsb2cuIFByZXNzIEVzY2FwZSwgb3IgdGFwL2NsaWNrIG91dHNpZGUgdGhlIGRpYWxvZyB0byBjbG9zZS5cIlxuICAgICAgICAgIH0pLCBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXR1cm5Gb2N1cyA9IHRoaXMuc3RhdGUuaXNPcGVuU3RhYmxlID8gcmV0dXJuRm9jdXNDb25maWcgOiBmYWxzZTtcbiAgICAgICAgcGFuZWwgPSBfX19FbW90aW9uSlNYKEV1aVBvcnRhbCwgaW5zZXJ0ICYmIHtcbiAgICAgICAgICBpbnNlcnQ6IGluc2VydFxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUZvY3VzVHJhcCwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNsaWNrT3V0c2lkZURpc2FibGVzOiB0cnVlLFxuICAgICAgICAgIG9uQ2xpY2tPdXRzaWRlOiB0aGlzLm9uQ2xpY2tPdXRzaWRlLFxuICAgICAgICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyAvLyBJZ25vcmUgdGVtcG9yYXJ5IHN0YXRlIG9mIGluZGVjaXNpdmUgZm9jdXNcbiAgICAgICAgICAsXG4gICAgICAgICAgaW5pdGlhbEZvY3VzOiBpbml0aWFsRm9jdXMsXG4gICAgICAgICAgb25Fc2NhcGVLZXk6IHRoaXMub25Fc2NhcGVLZXksXG4gICAgICAgICAgZGlzYWJsZWQ6ICFvd25Gb2N1cyB8fCAhdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgfHwgdGhpcy5zdGF0ZS5pc0Nsb3NpbmdcbiAgICAgICAgfSwgZm9jdXNUcmFwUHJvcHMpLCBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXJQYW5lbCwgX2V4dGVuZHMoe30sIHBhbmVsUHJvcHMsIHtcbiAgICAgICAgICBwYW5lbFJlZjogdGhpcy5wYW5lbFJlZixcbiAgICAgICAgICBpc09wZW46IHRoaXMuc3RhdGUuaXNPcGVuaW5nLFxuICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLnN0YXRlLmFycm93UG9zaXRpb24sXG4gICAgICAgICAgaXNBdHRhY2hlZDogYXR0YWNoVG9BbmNob3IsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHBhbmVsQ2xhc3NOYW1lLCBwYW5lbFByb3BzID09PSBudWxsIHx8IHBhbmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhbmVsUHJvcHMuY2xhc3NOYW1lKSxcbiAgICAgICAgICBoYXNEcmFnRHJvcDogaGFzRHJhZ0Ryb3AsXG4gICAgICAgICAgaGFzU2hhZG93OiBmYWxzZSxcbiAgICAgICAgICBwYWRkaW5nU2l6ZTogcGFuZWxQYWRkaW5nU2l6ZSxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICAgICAgXCJhcmlhLWxpdmVcIjogYXJpYUxpdmUsXG4gICAgICAgICAgcm9sZTogcGFuZWxSb2xlLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsbGVkQnksXG4gICAgICAgICAgXCJhcmlhLW1vZGFsXCI6IHBhbmVsQXJpYU1vZGFsLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAgICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGhpcy5zdGF0ZS5wb3BvdmVyU3R5bGVzKSwge30sIHtcbiAgICAgICAgICAgIC8vIEFkZGluZyBgd2lsbC1jaGFuZ2VgIHRvIHJlZHVjZSByaXNrIG9mIGEgYmx1cnJ5IGFuaW1hdGlvbiBpbiBDaHJvbWUgODYrXG4gICAgICAgICAgICB3aWxsQ2hhbmdlOiAhdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgPyAndHJhbnNmb3JtLCBvcGFjaXR5JyA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pLCBzaG93QXJyb3cgJiYgdGhpcy5zdGF0ZS5hcnJvd1Bvc2l0aW9uICYmIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlckFycm93LCB7XG4gICAgICAgICAgcG9zaXRpb246IHRoaXMuc3RhdGUuYXJyb3dQb3NpdGlvbixcbiAgICAgICAgICBzdHlsZTogdGhpcy5zdGF0ZS5hcnJvd1N0eWxlc1xuICAgICAgICB9LCBhcnJvd0NoaWxkcmVuKSwgZm9jdXNUcmFwU2NyZWVuUmVhZGVyVGV4dCwgX19fRW1vdGlvbkpTWChFdWlNdXRhdGlvbk9ic2VydmVyLCB7XG4gICAgICAgICAgb2JzZXJ2ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICAgICAgLy8gZWxlbWVudCBhdHRyaWJ1dGUgY2hhbmdlc1xuICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICAgICAgLy8gYWRkZWQvcmVtb3ZlZCBlbGVtZW50c1xuICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIC8vIHRleHQgY2hhbmdlc1xuICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSAvLyB3YXRjaCBhbGwgY2hpbGQgZWxlbWVudHNcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uTXV0YXRpb246IHRoaXMub25NdXRhdGlvblxuICAgICAgICB9LCBmdW5jdGlvbiAobXV0YXRpb25SZWYpIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgICByZWY6IG11dGF0aW9uUmVmXG4gICAgICAgICAgfSwgY2hpbGRyZW4pO1xuICAgICAgICB9KSkpKTtcbiAgICAgIH1cblxuICAgICAgLy8gcmVhY3QtZm9jdXMtb24gYW5kIHJlbGF0ZWQgZG8gbm90IHJlZ2lzdGVyIG91dHNpZGUgY2xpY2sgZGV0ZWN0aW9uXG4gICAgICAvLyB3aGVuIGRpc2FibGVkLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGNvbmRpdGlvbmFsbHkgY2hlY2sgZm9yIHRoYXQgb3Vyc2VsdmVzXG4gICAgICBpZiAob3duRm9jdXMpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNzczogcG9wb3ZlclN0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgcmVmOiB0aGlzLnBvcG92ZXJSZWZcbiAgICAgICAgfSwgcmVzdCksIGJ1dHRvbiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gbnVsbCA6IGJ1dHRvbiwgcGFuZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IsIHtcbiAgICAgICAgICBvbk91dHNpZGVDbGljazogdGhpcy5jbG9zZVBvcG92ZXJcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY3NzOiBwb3BvdmVyU3R5bGVzLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICByZWY6IHRoaXMucG9wb3ZlclJlZixcbiAgICAgICAgICBvbktleURvd246IHRoaXMub25LZXlEb3duXG4gICAgICAgIH0sIHJlc3QpLCBidXR0b24gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IG51bGwgOiBidXR0b24sIHBhbmVsKSk7XG4gICAgICB9XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByZXZTdGF0ZS5wcmV2UHJvcHMuaXNPcGVuICYmICFuZXh0UHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJldlByb3BzOiB7XG4gICAgICAgICAgICBpc09wZW46IG5leHRQcm9wcy5pc09wZW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGlzQ2xvc2luZzogdHJ1ZSxcbiAgICAgICAgICBpc09wZW5pbmc6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAocHJldlN0YXRlLnByZXZQcm9wcy5pc09wZW4gIT09IG5leHRQcm9wcy5pc09wZW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcmV2UHJvcHM6IHtcbiAgICAgICAgICAgIGlzT3BlbjogbmV4dFByb3BzLmlzT3BlblxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aVBvcG92ZXIsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgaXNPcGVuOiBmYWxzZSxcbiAgb3duRm9jdXM6IHRydWUsXG4gIHJlcG9zaXRpb25Ub0Nyb3NzQXhpczogdHJ1ZSxcbiAgYW5jaG9yUG9zaXRpb246ICdkb3duQ2VudGVyJyxcbiAgcGFuZWxQYWRkaW5nU2l6ZTogJ20nLFxuICBoYXNBcnJvdzogdHJ1ZSxcbiAgZGlzcGxheTogJ2lubGluZS1ibG9jaydcbn0pO1xuRXVpUG9wb3Zlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIEFsaWdubWVudCBvZiB0aGUgcG9wb3ZlciBhbmQgYXJyb3cgcmVsYXRpdmUgdG8gdGhlIGJ1dHRvblxuICAgICAqL1xuICBhbmNob3JQb3NpdGlvbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogU3R5bGUgYW5kIHBvc2l0aW9uIGFsdGVyYXRpb24gZm9yIGFycm93LWxlc3MgYXR0YWNobWVudC5cbiAgICAgKiBJbnRlbmRlZCBmb3IgdXNlIHdpdGggaW5wdXRzIGFzIGFuY2hvcnMsIGUuZy4gRXVpSW5wdXRQb3BvdmVyXG4gICAgICovXG4gIGF0dGFjaFRvQW5jaG9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogVHJpZ2dlcmluZyBlbGVtZW50IGZvciB3aGljaCB0byBhbGlnbiB0aGUgcG9wb3ZlciB0b1xuICAgICAqL1xuICBidXR0b246IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaGFuZGxlIGhpZGluZyBvZiB0aGUgcG9wb3ZlclxuICAgICAqL1xuICBjbG9zZVBvcG92ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIFJlc3RyaWN0IHRoZSBwb3BvdmVyJ3MgcG9zaXRpb24gd2l0aGluIHRoaXMgZWxlbWVudFxuICAgICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIENTUyBkaXNwbGF5IHR5cGUgZm9yIGJvdGggdGhlIHBvcG92ZXIgYW5kIGFuY2hvclxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIEV1aUZvY3VzVHJhcFxuICAgICAqL1xuICBmb2N1c1RyYXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogU2hvdyBhcnJvdyBpbmRpY2F0aW5nIHRvIG9yaWdpbmF0aW5nIGJ1dHRvblxuICAgICAqL1xuICBoYXNBcnJvdzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFNwZWNpZmllcyB3aGF0IGVsZW1lbnQgc2hvdWxkIGluaXRpYWxseSBoYXZlIGZvY3VzOyBDYW4gYmUgYSBET01cbiAgICAgKiBub2RlLCBvciBhIHNlbGVjdG9yIHN0cmluZyAod2hpY2ggd2lsbCBiZSBwYXNzZWQgdG9cbiAgICAgKiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCkgdG8gZmluZCB0aGUgRE9NIG5vZGUpLCBvciBhIGZ1bmN0aW9uIHRoYXRcbiAgICAgKiByZXR1cm5zIGEgRE9NIG5vZGUuXG4gICAgICpcbiAgICAgKiBJZiBub3QgcGFzc2VkLCBpbml0aWFsIGZvY3VzIGRlZmF1bHRzIHRvIHRoZSBwb3BvdmVyIHBhbmVsLlxuICAgICAqL1xuICBpbml0aWFsRm9jdXM6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFBhc3NlZCBkaXJlY3RseSB0byBFdWlQb3J0YWwgZm9yIERPTSBwb3NpdGlvbmluZy4gQm90aCBwcm9wZXJ0aWVzIGFyZVxuICAgICAqIHJlcXVpcmVkIGlmIHByb3AgaXMgc3BlY2lmaWVkXG4gICAgICovXG4gIGluc2VydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzaWJsaW5nOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJiZWZvcmVcIiwgXCJhZnRlclwiXSkuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAgICogVmlzaWJpbGl0eSBzdGF0ZSBvZiB0aGUgcG9wb3ZlclxuICAgICAqL1xuICBpc09wZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBUcmFwcyB0YWIgZm9jdXMgd2l0aGluIHRoZSBwb3BvdmVyIGNvbnRlbnRzXG4gICAgICovXG4gIG93bkZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQ3VzdG9tIGNsYXNzIGFkZGVkIHRvIHRoZSBFdWlQYW5lbCBjb250YWluaW5nIHRoZSBwb3BvdmVyIGNvbnRlbnRzXG4gICAgICovXG4gIHBhbmVsQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBFdWlQYW5lbCBwYWRkaW5nIG9uIGFsbCBzaWRlc1xuICAgICAqL1xuICBwYW5lbFBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBTdGFuZGFyZCBET00gYHN0eWxlYCBhdHRyaWJ1dGUuIFBhc3NlZCB0byB0aGUgRXVpUGFuZWxcbiAgICAgKi9cbiAgcGFuZWxTdHlsZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byBFdWlQYW5lbC4gU2VlICNFdWlQb3BvdmVyUGFuZWxQcm9wc1xuICAgICAqL1xuICBwYW5lbFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIl0pLFxuICAgIC8qKlxuICAgICAgICogUGFkZGluZyBmb3IgYWxsIGZvdXIgc2lkZXNcbiAgICAgICAqL1xuICAgIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogQ29ybmVyIGJvcmRlciByYWRpdXNcbiAgICAgICAqL1xuICAgIGJvcmRlclJhZGl1czogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFdoZW4gdHJ1ZSB0aGUgcGFuZWwgd2lsbCBncm93IGluIGhlaWdodCB0byBtYXRjaCBgRXVpRmxleEl0ZW1gXG4gICAgICAgKi9cbiAgICBncm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwYW5lbFJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgcGFuZWxSZWY6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIE9wdGlvbmFsIHNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zIHRvIGFubm91bmNlIHVwb24gcG9wb3ZlciBvcGVuLFxuICAgICAqIGluIGFkZGl0aW9uIHRvIEVVSSdzIGRlZmF1bHQgcG9wb3ZlciBpbnN0cnVjdGlvbnMgZm9yIEVzY2FwZSBvbiBjbG9zZS5cbiAgICAgKiBVc2VmdWwgZm9yIHBvcG92ZXJzIHRoYXQgbWF5IGhhdmUgYWRkaXRpb25hbCBrZXlib2FyZCBjYXBhYmlsaXRpZXMgc3VjaCBhc1xuICAgICAqIGFycm93IG5hdmlnYXRpb24uXG4gICAgICovXG4gIHBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRdKSxcbiAgcG9wb3ZlclJlZjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAsIHRoZSBwb3BvdmVyJ3MgcG9zaXRpb24gaXMgcmUtY2FsY3VsYXRlZCB3aGVuIHRoZSB1c2VyXG4gICAgICogc2Nyb2xscywgdGhpcyBzdXBwb3J0cyBoYXZpbmcgZml4ZWQtcG9zaXRpb24gcG9wb3ZlciBhbmNob3JzLiBXaGVuIG5lc3RpbmdcbiAgICAgKiBhbiBgRXVpUG9wb3ZlcmAgaW4gYSBzY3JvbGxhYmxlIGNvbnRhaW5lciwgYHJlcG9zaXRpb25PblNjcm9sbGAgc2hvdWxkIGJlIGB0cnVlYFxuICAgICAqL1xuICByZXBvc2l0aW9uT25TY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBwb3BvdmVycyB3aWxsIGF0dGVtcHQgdG8gcG9zaXRpb24gdGhlbXNlbHZlcyBhbG9uZyB0aGUgaW5pdGlhbFxuICAgICAqIGF4aXMgc3BlY2lmaWVkLiBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20gZWl0aGVyIHZlcnRpY2FsbHkgb3IgaG9yaXpvbnRhbGx5XG4gICAgICogaG93ZXZlciwgdGhlIHBvcG92ZXIgd2lsbCBhdHRlbXB0IHRvIHJlcG9zaXRpb24gaXRzZWxmIGFsb25nIHRoZSBzZWNvbmRhcnlcbiAgICAgKiBjcm9zcyBheGlzIGlmIHRoZXJlIGlzIHJvb20gdGhlcmUgaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIElmIHlvdSBkbyBub3Qgbm90IHdhbnQgdGhpcyByZXBvc2l0aW9uaW5nIHRvIG9jY3VyIChhbmQgaXQgaXMgYWNjZXB0YWJsZSBmb3JcbiAgICAgKiB0aGUgcG9wb3ZlciB0byBhcHBlYXIgb2Zmc2NyZWVuKSwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICByZXBvc2l0aW9uVG9Dcm9zc0F4aXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBNdXN0IGJlIHNldCB0byB0cnVlIGlmIHVzaW5nIGBFdWlEcmFnRHJvcENvbnRleHRgIHdpdGhpbiBhIHBvcG92ZXIsXG4gICAgICogb3RoZXJ3aXNlIHlvdXIgbmVzdGVkIGRyYWcgJiBkcm9wIHdpbGwgaGF2ZSBpbmNvcnJlY3QgcG9zaXRpb25pbmdcbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIC0gdXNlIGB1c2VQb3J0YWxgIHByb3Agb24gY2hpbGRyZW4gYEV1aURyYWdnYWJsZWAgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgICAqL1xuICBoYXNEcmFnRHJvcDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHBvcG92ZXIgY29udGVudCBpbmhlcml0cyB0aGUgei1pbmRleCBvZiB0aGUgYW5jaG9yXG4gICAgICogY29tcG9uZW50OyBwYXNzIGB6SW5kZXhgIHRvIG92ZXJyaWRlXG4gICAgICovXG4gIHpJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAgICogRGlzdGFuY2UgYXdheSBmcm9tIHRoZSBhbmNob3IgdGhhdCB0aGUgcG9wb3ZlciB3aWxsIHJlbmRlclxuICAgICAqL1xuICBvZmZzZXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgICAqIE1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlciBhbmQgdGhlIGJvdW5kaW5nIGNvbnRhaW5lcjtcbiAgICAgKiBQYXNzIGFuIGFycmF5IG9mIDQgdmFsdWVzIHRvIGFkanVzdCBlYWNoIHNpZGUgZGlmZmVyZW50bHk6IGBbdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XWBcbiAgICAgKiBAZGVmYXVsdCAxNlxuICAgICAqL1xuICBidWZmZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIEVsZW1lbnQgdG8gcGFzcyBhcyB0aGUgY2hpbGQgZWxlbWVudCBvZiB0aGUgYXJyb3c7XG4gICAgICogVXNlIGNhc2UgaXMgdHlwaWNhbGx5IGxpbWl0ZWQgdG8gYW4gYWNjb21wYW55aW5nIGBFdWlCZWFjb25gXG4gICAgICovXG4gIGFycm93Q2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBQcm92aWRlIGEgbmFtZSB0byB0aGUgcG9wb3ZlciBwYW5lbFxuICAgICAqL1xuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogQWx0ZXJuYXRpdmUgb3B0aW9uIHRvIGBhcmlhLWxhYmVsYCB0aGF0IHRha2VzIGFuIGBpZGAuXG4gICAgICogVXN1YWxseSB0YWtlcyB0aGUgYGlkYCBvZiB0aGUgcG9wb3ZlciB0aXRsZVxuICAgICAqL1xuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBGdW5jdGlvbiBjYWxsYmFjayBmb3Igd2hlbiB0aGUgcG9wb3ZlciBwb3NpdG9uIGNoYW5nZXNcbiAgICAgKi9cbiAgb25Qb3NpdGlvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXInO1xuZXhwb3J0IHZhciBFdWlNdXRhdGlvbk9ic2VydmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRXVpT2JzZXJ2ZXIpIHtcbiAgZnVuY3Rpb24gRXVpTXV0YXRpb25PYnNlcnZlcigpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aU11dGF0aW9uT2JzZXJ2ZXIpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aU11dGF0aW9uT2JzZXJ2ZXIsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm5hbWVcIiwgJ0V1aU11dGF0aW9uT2JzZXJ2ZXInKTtcbiAgICAvLyB0aGUgYG9uTXV0YXRpb25gIHByb3AgbWF5IGNoYW5nZSB3aGlsZSB0aGUgb2JzZXJ2ZXIgaXMgYm91bmQsIGFic3RyYWN0aW5nXG4gICAgLy8gaXQgb3V0IGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBtZWFucyB0aGUgY3VycmVudCBgb25NdXRhdGlvbmAgdmFsdWUgaXMgdXNlZFxuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbk11dGF0aW9uXCIsIGZ1bmN0aW9uIChyZWNvcmRzLCBvYnNlcnZlcikge1xuICAgICAgX3RoaXMucHJvcHMub25NdXRhdGlvbihyZWNvcmRzLCBvYnNlcnZlcik7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImJlZ2luT2JzZXJ2ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY2hpbGROb2RlID0gX3RoaXMuY2hpbGROb2RlO1xuICAgICAgX3RoaXMub2JzZXJ2ZXIgPSBtYWtlTXV0YXRpb25PYnNlcnZlcihjaGlsZE5vZGUsIF90aGlzLnByb3BzLm9ic2VydmVyT3B0aW9ucywgX3RoaXMub25NdXRhdGlvbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlNdXRhdGlvbk9ic2VydmVyLCBfRXVpT2JzZXJ2ZXIpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aU11dGF0aW9uT2JzZXJ2ZXIpO1xufShFdWlPYnNlcnZlcik7XG52YXIgbWFrZU11dGF0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiBtYWtlTXV0YXRpb25PYnNlcnZlcihub2RlLCBfb2JzZXJ2ZXJPcHRpb25zLCBjYWxsYmFjaykge1xuICAvLyBUaGUgTXV0YXRpb25PYnNlcnZlciBwb2x5ZmlsbCB1c2VkIGluIEtpYmFuYSAoZm9yIEplc3QpIGltcGxlbWVudHNcbiAgLy8gYW4gb2xkZXIgc3BlYyBpbiB3aGljaCBzcGVjaWZ5aW5nIGBhdHRyaWJ1dGVPbGRWYWx1ZWAgb3IgYGF0dHJpYnV0ZUZpbHRlcmBcbiAgLy8gd2l0aG91dCBzcGVjaWZ5aW5nIGBhdHRyaWJ1dGVzYCByZXN1bHRzIGluIGEgYFN5bnRheEVycm9yYC5cbiAgLy8gVGhlIGZvbGxvd2luZyBsb2dpYyBwYXRjaGVzIHRoZSBuZXdlciBzcGVjIGluIHdoaWNoIGBhdHRyaWJ1dGVzOiB0cnVlYCBjYW4gYmVcbiAgLy8gaW1wbGllZCB3aGVuIGFwcHJvcHJpYXRlIChgYXR0cmlidXRlT2xkVmFsdWVgIG9yIGBhdHRyaWJ1dGVGaWx0ZXJgIGlzIHNwZWNpZmllZCkuXG4gIHZhciBvYnNlcnZlck9wdGlvbnMgPSBfb2JqZWN0U3ByZWFkKHt9LCBfb2JzZXJ2ZXJPcHRpb25zKTtcbiAgdmFyIG5lZWRzQXR0cmlidXRlcyA9IG9ic2VydmVyT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYXR0cmlidXRlT2xkVmFsdWUnKSB8fCBvYnNlcnZlck9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2F0dHJpYnV0ZUZpbHRlcicpO1xuICBpZiAobmVlZHNBdHRyaWJ1dGVzICYmICFvYnNlcnZlck9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2F0dHJpYnV0ZXMnKSkge1xuICAgIG9ic2VydmVyT3B0aW9ucy5hdHRyaWJ1dGVzID0gdHJ1ZTtcbiAgfVxuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG4gIG9ic2VydmVyLm9ic2VydmUobm9kZSwgb2JzZXJ2ZXJPcHRpb25zKTtcbiAgcmV0dXJuIG9ic2VydmVyO1xufTtcbmV4cG9ydCB2YXIgdXNlTXV0YXRpb25PYnNlcnZlciA9IGZ1bmN0aW9uIHVzZU11dGF0aW9uT2JzZXJ2ZXIoY29udGFpbmVyLCBjYWxsYmFjaywgb2JzZXJ2ZXJPcHRpb25zKSB7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvbnRhaW5lciAhPSBudWxsKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBtYWtlTXV0YXRpb25PYnNlcnZlcihjb250YWluZXIsIG9ic2VydmVyT3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH07XG4gICAgfVxuICB9LFxuICAvLyBpZ25vcmUgY2hhbmdpbmcgb2JzZXJ2ZXJPcHRpb25zXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBbY29udGFpbmVyLCBjYWxsYmFja10pO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgQ2hpbGRyZW4sIGNsb25lRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5leHBvcnQgdmFyIEV1aU91dHNpZGVDbGlja0RldGVjdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aU91dHNpZGVDbGlja0RldGVjdG9yKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvcik7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aU91dHNpZGVDbGlja0RldGVjdG9yLCBbcHJvcHNdKTtcblxuICAgIC8vIHRoZSBpZCBpcyB1c2VkIHRvIGlkZW50aWZ5IHdoaWNoIEV1aU91dHNpZGVDbGlja0RldGVjdG9yXG4gICAgLy8gaXMgdGhlIHNvdXJjZSBvZiBhIGNsaWNrIGV2ZW50OyBhcyB0aGUgY2xpY2sgZXZlbnQgYnViYmxlc1xuICAgIC8vIHVwIGFuZCByZWFjaGVzIHRoZSBjbGljayBkZXRlY3RvcidzIGNoaWxkIGNvbXBvbmVudCB0aGVcbiAgICAvLyBpZCB2YWx1ZSBpcyBzdGFtcGVkIG9uIHRoZSBldmVudC4gVGhpcyBpZCBpcyBpbnNwZWN0ZWRcbiAgICAvLyBpbiB0aGUgZG9jdW1lbnQncyBjbGljayBoYW5kbGVyLCBhbmQgaWYgdGhlIGlkIGRvZXNuJ3RcbiAgICAvLyBleGlzdCBvciBkb2Vzbid0IG1hdGNoIHRoaXMgZGV0ZWN0b3IncyBpZCwgdGhlbiB0cmlnZ2VyXG4gICAgLy8gdGhlIG91dHNpZGVDbGljayBjYWxsYmFjay5cbiAgICAvL1xuICAgIC8vIFRha2luZyB0aGlzIGFwcHJvYWNoIGluc3RlYWQgb2YgY2hlY2tpbmcgaWYgdGhlIGV2ZW50J3NcbiAgICAvLyB0YXJnZXQgZWxlbWVudCBleGlzdHMgaW4gdGhpcyBjb21wb25lbnQncyBET00gc3ViLXRyZWUgaXNcbiAgICAvLyBuZWNlc3NhcnkgZm9yIGhhbmRsaW5nIGNsaWNrcyBvcmlnaW5hdGluZyBmcm9tIGNoaWxkcmVuXG4gICAgLy8gcmVuZGVyZWQgdGhyb3VnaCBSZWFjdCdzIHBvcnRhbHMgKEV1aVBvcnRhbCkuIFRoZSBpZCB0cmFja2luZ1xuICAgIC8vIHdvcmtzIGJlY2F1c2UgUmVhY3QgZ3VhcmFudGVlcyB0aGUgZXZlbnQgYnViYmxlcyB0aHJvdWdoIHRoZVxuICAgIC8vIHZpcnR1YWwgRE9NIGFuZCBleGVjdXRlcyBFdWlDbGlja0RldGVjdG9yJ3Mgb25DbGljayBoYW5kbGVyLFxuICAgIC8vIHN0YW1waW5nIHRoZSBpZCBldmVuIHRob3VnaCB0aGUgZXZlbnQgb3JpZ2luYXRlcyBvdXRzaWRlXG4gICAgLy8gdGhpcyBjb21wb25lbnQncyByZWlmaWVkIERPTSB0cmVlLlxuICAgIC8vIFdlIGFyZSB3b3JraW5nIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBhIGNsaWNrIGV2ZW50IGlzXG4gICAgLy8gZXF1aXZhbGVudCB0byBhIHNlcXVlbnRpYWwsIGNvbXBvdW5kIHByZXNzIGFuZCByZWxlYXNlIG9mXG4gICAgLy8gdGhlIHBvaW50aW5nIGRldmljZSAobW91c2UsIGZpbmdlciwgc3R5bHVzLCBldGMuKS5cbiAgICAvLyBBIGNsaWNrIGV2ZW50J3MgdGFyZ2V0IGNhbiBiZSBpbXByZWNpc2UsIGFzIHRoZSB2YWx1ZSB3aWxsIGJlXG4gICAgLy8gdGhlIGNsb3Nlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBwcmVzcyAobW91c2Vkb3duLCB0b3VjaHN0YXJ0KVxuICAgIC8vIGFuZCByZWxlYXNlIChtb3VzZXVwLCB0b3VjaGVuZCkgZXZlbnRzIChvZnRlbiA8Ym9keSAvPikgaWZcbiAgICAvLyB0aGUgdGhlIHRhcmdldCBvZiBlYWNoIGV2ZW50IGRpZmZlcnMuXG4gICAgLy8gV2UgbmVlZCB0aGUgYWN0dWFsIGV2ZW50IHRhcmdldHMgdG8gbWFrZSB0aGUgY29ycmVjdCBkZWNpc2lvbnNcbiAgICAvLyBhYm91dCB1c2VyIGludGVudGlvbi4gU28sIGNvbnNpZGVyIHRoZSBkb3duL3N0YXJ0IGFuZCB1cC9lbmRcbiAgICAvLyBpdGVtcyBiZWxvdyBhcyB0aGUgZGVjb25zdHJ1Y3Rpb24gb2YgYSBjbGljayBldmVudC5cbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaWRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2FwdHVyZWREb3duSWRzXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQ2xpY2tPdXRzaWRlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzLmlzRGlzYWJsZWQsXG4gICAgICAgIG9uT3V0c2lkZUNsaWNrID0gX3RoaXMkcHJvcHMub25PdXRzaWRlQ2xpY2s7XG4gICAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBbXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGV2ZW50ID0gZTtcbiAgICAgIGlmIChldmVudC5ldWlHZW5lcmF0ZWRCeSAmJiBldmVudC5ldWlHZW5lcmF0ZWRCeS5pbmNsdWRlcyhfdGhpcy5pZCkgfHwgX3RoaXMuY2FwdHVyZWREb3duSWRzLmluY2x1ZGVzKF90aGlzLmlkKSkge1xuICAgICAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBbXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gW107XG4gICAgICByZXR1cm4gb25PdXRzaWRlQ2xpY2soZXZlbnQpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkNoaWxkQ2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50LCBjYikge1xuICAgICAgLy8gdG8gc3VwcG9ydCBuZXN0ZWQgY2xpY2sgZGV0ZWN0b3JzLCBidWlsZCBhbiBhcnJheVxuICAgICAgLy8gb2YgZGV0ZWN0b3IgaWRzIHRoYXQgaGF2ZSBiZWVuIGVuY291bnRlcmVkO1xuICAgICAgaWYgKGV2ZW50Lm5hdGl2ZUV2ZW50Lmhhc093blByb3BlcnR5KCdldWlHZW5lcmF0ZWRCeScpKSB7XG4gICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmV1aUdlbmVyYXRlZEJ5LnB1c2goX3RoaXMuaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuZXVpR2VuZXJhdGVkQnkgPSBbX3RoaXMuaWRdO1xuICAgICAgfVxuICAgICAgaWYgKGNiKSBjYihldmVudCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQ2hpbGRNb3VzZURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5vbkNoaWxkQ2xpY2soZXZlbnQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBuYXRpdmVFdmVudCA9IGUubmF0aXZlRXZlbnQ7XG4gICAgICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IG5hdGl2ZUV2ZW50LmV1aUdlbmVyYXRlZEJ5O1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Nb3VzZURvd24pIF90aGlzLnByb3BzLm9uTW91c2VEb3duKGUpO1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Ub3VjaFN0YXJ0KSBfdGhpcy5wcm9wcy5vblRvdWNoU3RhcnQoZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25DaGlsZE1vdXNlVXBcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5vbkNoaWxkQ2xpY2soZXZlbnQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5vbk1vdXNlVXApIF90aGlzLnByb3BzLm9uTW91c2VVcChlKTtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVG91Y2hFbmQpIF90aGlzLnByb3BzLm9uVG91Y2hFbmQoZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfdGhpcy5pZCA9IGh0bWxJZEdlbmVyYXRvcigpKCk7XG4gICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gW107XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25DbGlja091dHNpZGUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uQ2xpY2tPdXRzaWRlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbkNsaWNrT3V0c2lkZSk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25DbGlja091dHNpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0aGlzLnByb3BzLmNoaWxkcmVuLnByb3BzKSwge1xuICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbkNoaWxkTW91c2VEb3duLFxuICAgICAgICBvblRvdWNoU3RhcnQ6IHRoaXMub25DaGlsZE1vdXNlRG93bixcbiAgICAgICAgb25Nb3VzZVVwOiB0aGlzLm9uQ2hpbGRNb3VzZVVwLFxuICAgICAgICBvblRvdWNoRW5kOiB0aGlzLm9uQ2hpbGRNb3VzZVVwXG4gICAgICB9KTtcbiAgICAgIHZhciBjaGlsZCA9IENoaWxkcmVuLm9ubHkodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChjaGlsZCwgcHJvcHMpO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcbiAgb25PdXRzaWRlQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvbk1vdXNlRG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uTW91c2VVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVG91Y2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVG91Y2hFbmQ6IFByb3BUeXBlcy5mdW5jXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJwb3NpdGlvblwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGV1aVBvcG92ZXJBcnJvd1N0eWxlcyB9IGZyb20gJy4vX3BvcG92ZXJfYXJyb3cuc3R5bGVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgUE9TSVRJT05TID0gWyd0b3AnLCAnbGVmdCcsICdyaWdodCcsICdib3R0b20nXTtcbmV4cG9ydCB2YXIgRXVpUG9wb3ZlckFycm93ID0gZnVuY3Rpb24gRXVpUG9wb3ZlckFycm93KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpUG9wb3ZlckFycm93U3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpUG9wb3ZlckFycm93LCBzdHlsZXNbcG9zaXRpb25dXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogXCJldWlQb3BvdmVyX19hcnJvd1wiLFxuICAgIFwiZGF0YS1wb3BvdmVyLWFycm93XCI6IHBvc2l0aW9uLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpUG9wb3ZlckFycm93LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxzLCBsb2dpY2FsU2l6ZUNTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgcG9wb3ZlckFycm93U2l6ZSA9ICdtJztcbmV4cG9ydCB2YXIgZXVpUG9wb3ZlckFycm93U3R5bGVzID0gZnVuY3Rpb24gZXVpUG9wb3ZlckFycm93U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBib3JkZXJDb2xvciA9ICd2YXIoLS1ldWlQb3BvdmVyQmFja2dyb3VuZENvbG9yKSc7XG4gIHZhciBhcnJvd1NpemUgPSBldWlUaGVtZS5zaXplW3BvcG92ZXJBcnJvd1NpemVdO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlQb3BvdmVyQXJyb3c6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbFNpemVDU1MoMCwgMCksIFwiJjo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxTaXplQ1NTKDAsIDApLCBcIjt9O2xhYmVsOmV1aVBvcG92ZXJBcnJvdztcIiksXG4gICAgLy8gUE9TSVRJT05TXG4gICAgdG9wOiAvKiNfX1BVUkVfXyovY3NzKFwiJjo6YmVmb3Jle1wiLCBsb2dpY2Fscy5ib3R0b20sIFwiOi1cIiwgYXJyb3dTaXplLCBcIjtcIiwgbG9naWNhbHNbJ2JvcmRlci1sZWZ0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLXJpZ2h0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLXRvcCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCBcIiwgYm9yZGVyQ29sb3IsIFwiO307bGFiZWw6dG9wO1wiKSxcbiAgICBib3R0b206IC8qI19fUFVSRV9fKi9jc3MoXCImOjpiZWZvcmV7XCIsIGxvZ2ljYWxzLnRvcCwgXCI6LVwiLCBhcnJvd1NpemUsIFwiO1wiLCBsb2dpY2Fsc1snYm9yZGVyLWxlZnQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItcmlnaHQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItYm90dG9tJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIFwiLCBib3JkZXJDb2xvciwgXCI7fTtsYWJlbDpib3R0b207XCIpLFxuICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoXCImOjpiZWZvcmV7XCIsIGxvZ2ljYWxzLnRvcCwgXCI6NTAlO1wiLCBsb2dpY2Fscy5yaWdodCwgXCI6LVwiLCBhcnJvd1NpemUsIFwiO1wiLCBsb2dpY2Fsc1snYm9yZGVyLXRvcCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1ib3R0b20nXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItbGVmdCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCBcIiwgYm9yZGVyQ29sb3IsIFwiO307bGFiZWw6bGVmdDtcIiksXG4gICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCImOjpiZWZvcmV7XCIsIGxvZ2ljYWxzLnRvcCwgXCI6NTAlO1wiLCBsb2dpY2Fscy5sZWZ0LCBcIjotXCIsIGFycm93U2l6ZSwgXCI7XCIsIGxvZ2ljYWxzWydib3JkZXItdG9wJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLWJvdHRvbSddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1yaWdodCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCBcIiwgYm9yZGVyQ29sb3IsIFwiO307bGFiZWw6cmlnaHQ7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlQb3BvdmVyU3R5bGVzID0gZnVuY3Rpb24gZXVpUG9wb3ZlclN0eWxlcygpIHtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlIGFuY2hvciB3cmFwcGVyXG4gICAgZXVpUG9wb3ZlcjogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmV1aVBvcG92ZXI7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJpc09wZW5cIiwgXCJpc0F0dGFjaGVkXCIsIFwiaGFzRHJhZ0Ryb3BcIiwgXCJwb3NpdGlvblwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpUGFuZWwgfSBmcm9tICcuLi8uLi9wYW5lbC9wYW5lbCc7XG5pbXBvcnQgeyBldWlQb3BvdmVyUGFuZWxTdHlsZXMgfSBmcm9tICcuL19wb3BvdmVyX3BhbmVsLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIERFRkFVTFRfUEFORUxfUEFERElOR19TSVpFID0gJ2wnO1xuZXhwb3J0IHZhciBFdWlQb3BvdmVyUGFuZWxDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe1xuICBwYWRkaW5nU2l6ZTogREVGQVVMVF9QQU5FTF9QQURESU5HX1NJWkVcbn0pO1xuLyoqXG4gKiAqSU5URVJOQUwgT05MWSpcbiAqIFB1cmVseSBmb3IgcmUtdXNlIG9mIHN0eWxpbmdcbiAqL1xuZXhwb3J0IHZhciBFdWlQb3BvdmVyUGFuZWwgPSBmdW5jdGlvbiBFdWlQb3BvdmVyUGFuZWwoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGlzT3BlbiA9IF9yZWYuaXNPcGVuLFxuICAgIGlzQXR0YWNoZWQgPSBfcmVmLmlzQXR0YWNoZWQsXG4gICAgaGFzRHJhZ0Ryb3AgPSBfcmVmLmhhc0RyYWdEcm9wLFxuICAgIHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUG9wb3Zlcl9fcGFuZWwnLCBjbGFzc05hbWUpO1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIGNzc1N0eWxlcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdHlsZXMgPSBldWlQb3BvdmVyUGFuZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgICB2YXIgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBzaGFyZWRTdHlsZXMgPSBbc3R5bGVzLmV1aVBvcG92ZXJfX3BhbmVsLCBzdHlsZXNbY29sb3JNb2RlXSwgaXNPcGVuICYmIHN0eWxlcy5pc09wZW5dO1xuICAgIGlmIChoYXNEcmFnRHJvcCkge1xuICAgICAgcmV0dXJuIFtdLmNvbmNhdChzaGFyZWRTdHlsZXMsIFtzdHlsZXMuaGFzRHJhZ0Ryb3AuaGFzRHJhZ0Ryb3AsIHBvc2l0aW9uICYmIHN0eWxlcy5oYXNEcmFnRHJvcFtwb3NpdGlvbl1dKTtcbiAgICB9XG4gICAgaWYgKGlzQXR0YWNoZWQpIHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQoc2hhcmVkU3R5bGVzLCBbc3R5bGVzLmlzQXR0YWNoZWQuaXNBdHRhY2hlZCwgcG9zaXRpb24gJiYgc3R5bGVzLmlzQXR0YWNoZWRbcG9zaXRpb25dXSk7XG4gICAgfVxuICAgIHJldHVybiBbXS5jb25jYXQoc2hhcmVkU3R5bGVzLCBbc3R5bGVzLmhhc1RyYW5zZm9ybS5oYXNUcmFuc2Zvcm0sIGlzT3BlbiAmJiBwb3NpdGlvbiAmJiBzdHlsZXMuaGFzVHJhbnNmb3JtW3Bvc2l0aW9uXV0pO1xuICB9LCBbZXVpVGhlbWVDb250ZXh0LCBpc09wZW4sIHBvc2l0aW9uLCBpc0F0dGFjaGVkLCBoYXNEcmFnRHJvcF0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyUGFuZWxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHtcbiAgICAgIHBhZGRpbmdTaXplOiByZXN0LnBhZGRpbmdTaXplIHx8IERFRkFVTFRfUEFORUxfUEFERElOR19TSVpFXG4gICAgfVxuICB9LCBfX19FbW90aW9uSlNYKEV1aVBhbmVsLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIFwiZGF0YS1wb3BvdmVyLXBhbmVsXCI6IHRydWUsXG4gICAgXCJkYXRhLXBvcG92ZXItb3BlblwiOiBpc09wZW4gfHwgdW5kZWZpbmVkXG4gIH0sIHJlc3QpLCBjaGlsZHJlbikpO1xufTtcbkV1aVBvcG92ZXJQYW5lbC5wcm9wVHlwZXMgPSB7XG4gIGVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIl0pLFxuICAvKipcbiAgICAgKiBQYWRkaW5nIGZvciBhbGwgZm91ciBzaWRlc1xuICAgICAqL1xuICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQ29ybmVyIGJvcmRlciByYWRpdXNcbiAgICAgKi9cbiAgYm9yZGVyUmFkaXVzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBXaGVuIHRydWUgdGhlIHBhbmVsIHdpbGwgZ3JvdyBpbiBoZWlnaHQgdG8gbWF0Y2ggYEV1aUZsZXhJdGVtYFxuICAgICAqL1xuICBncm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgcGFuZWxSZWY6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBpc09wZW46IFByb3BUeXBlcy5ib29sLFxuICBpc0F0dGFjaGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtudWxsXSldKSxcbiAgaGFzRHJhZ0Ryb3A6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJwYWRkaW5nU2l6ZVwiLCBcImJvcmRlclJhZGl1c1wiLCBcImNvbG9yXCIsIFwiaGFzU2hhZG93XCIsIFwiaGFzQm9yZGVyXCIsIFwiZ3Jvd1wiLCBcInBhbmVsUmVmXCIsIFwiZWxlbWVudFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MsIHVzZUV1aVBhZGRpbmdDU1MsIEJBQ0tHUk9VTkRfQ09MT1JTLCBQQURESU5HX1NJWkVTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IGV1aVBhbmVsU3R5bGVzIH0gZnJvbSAnLi9wYW5lbC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBQQURESU5HX1NJWkVTO1xuXG4vLyBFeHBvcnRlZCBwYWRkaW5nIHNpemVzIGFuZCBjbGFzcyBuYW1lcyBuZWNlc3NhcnkgZm9yIEV1aVBvcG92ZXIgYW5kIEV1aUNhcmQuXG4vLyBXaGljaCBjdXJyZW50bHkgd2lsbCBvbmx5IG1haW50YWluIHN1cHBvcnQgZm9yIHRoZSBvcmlnaW5hbCB2YWx1ZXMgdW50aWwgY29udmVyc2lvbi5cbnZhciBwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBub25lOiBudWxsLFxuICBzOiAncGFkZGluZ1NtYWxsJyxcbiAgbTogJ3BhZGRpbmdNZWRpdW0nLFxuICBsOiAncGFkZGluZ0xhcmdlJ1xufTtcbnZhciBfU0laRVMgPSBrZXlzT2YocGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCk7XG5leHBvcnQgdmFyIEJPUkRFUl9SQURJSSA9IFsnbm9uZScsICdtJ107XG5leHBvcnQgdmFyIENPTE9SUyA9IEJBQ0tHUk9VTkRfQ09MT1JTO1xuZXhwb3J0IHZhciBFdWlQYW5lbCA9IGZ1bmN0aW9uIEV1aVBhbmVsKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJHBhZGRpbmdTaXplID0gX3JlZi5wYWRkaW5nU2l6ZSxcbiAgICBwYWRkaW5nU2l6ZSA9IF9yZWYkcGFkZGluZ1NpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkcGFkZGluZ1NpemUsXG4gICAgX3JlZiRib3JkZXJSYWRpdXMgPSBfcmVmLmJvcmRlclJhZGl1cyxcbiAgICBib3JkZXJSYWRpdXMgPSBfcmVmJGJvcmRlclJhZGl1cyA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRib3JkZXJSYWRpdXMsXG4gICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncGxhaW4nIDogX3JlZiRjb2xvcixcbiAgICBfcmVmJGhhc1NoYWRvdyA9IF9yZWYuaGFzU2hhZG93LFxuICAgIGhhc1NoYWRvdyA9IF9yZWYkaGFzU2hhZG93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRoYXNTaGFkb3csXG4gICAgX3JlZiRoYXNCb3JkZXIgPSBfcmVmLmhhc0JvcmRlcixcbiAgICBoYXNCb3JkZXIgPSBfcmVmJGhhc0JvcmRlciA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGhhc0JvcmRlcixcbiAgICBfcmVmJGdyb3cgPSBfcmVmLmdyb3csXG4gICAgZ3JvdyA9IF9yZWYkZ3JvdyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkZ3JvdyxcbiAgICBwYW5lbFJlZiA9IF9yZWYucGFuZWxSZWYsXG4gICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIC8vIFNoYWRvd3MgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHRoZXJlJ3MgYSB3aGl0ZSBiYWNrZ3JvdW5kIChwbGFpbilcbiAgdmFyIGNhbkhhdmVTaGFkb3cgPSAhaGFzQm9yZGVyICYmIGNvbG9yID09PSAncGxhaW4nO1xuICB2YXIgY2FuSGF2ZUJvcmRlciA9IGNvbG9yID09PSAncGxhaW4nIHx8IGNvbG9yID09PSAndHJhbnNwYXJlbnQnO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpUGFuZWxTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlQYW5lbCwgZ3JvdyAmJiBzdHlsZXMuZ3Jvdywgc3R5bGVzLnJhZGl1c1tib3JkZXJSYWRpdXNdLCB1c2VFdWlQYWRkaW5nQ1NTKClbcGFkZGluZ1NpemVdLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MoKVtjb2xvcl0sIGNhbkhhdmVTaGFkb3cgJiYgaGFzU2hhZG93ID09PSB0cnVlICYmIHN0eWxlcy5oYXNTaGFkb3csIGNhbkhhdmVCb3JkZXIgJiYgaGFzQm9yZGVyID09PSB0cnVlICYmIHN0eWxlcy5oYXNCb3JkZXIsIHJlc3Qub25DbGljayAmJiBzdHlsZXMuaXNDbGlja2FibGVdO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBhbmVsJywgXCJldWlQYW5lbC0tXCIuY29uY2F0KGNvbG9yKSwgX2RlZmluZVByb3BlcnR5KHt9LCBcImV1aVBhbmVsLS1cIi5jb25jYXQocGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcFtwYWRkaW5nU2l6ZV0pLCBwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwW3BhZGRpbmdTaXplXSksIGNsYXNzTmFtZSk7XG4gIGlmIChyZXN0Lm9uQ2xpY2sgJiYgZWxlbWVudCAhPT0gJ2RpdicpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IHBhbmVsUmVmLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY3NzOiBjc3NTdHlsZXNcbiAgICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICB9XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHBhbmVsUmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVBhbmVsLnByb3BUeXBlcyA9IHtcbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImJ1dHRvblwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIl0pXSksXG4gIC8qKlxuICAgICAqIEFkZHMgYSBtZWRpdW0gc2hhZG93IHRvIHRoZSBwYW5lbDtcbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW5cImBcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQWRkcyBhIG1lZGl1bSBzaGFkb3cgdG8gdGhlIHBhbmVsO1xuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpblwiYFxuICAgICAqL1xuICBoYXNTaGFkb3c6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBBZGRzIGEgc2xpZ2h0IDFweCBib3JkZXIgb24gYWxsIGVkZ2VzLlxuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpbiB8IHRyYW5zcGFyZW50XCJgXG4gICAgICovXG4gIC8qKlxuICAgICAqIEFkZHMgYSBzbGlnaHQgMXB4IGJvcmRlciBvbiBhbGwgZWRnZXMuXG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluIHwgdHJhbnNwYXJlbnRcImBcbiAgICAgKi9cbiAgaGFzQm9yZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogUGFkZGluZyBmb3IgYWxsIGZvdXIgc2lkZXNcbiAgICAgKi9cbiAgLyoqXG4gICAgICogUGFkZGluZyBmb3IgYWxsIGZvdXIgc2lkZXNcbiAgICAgKi9cbiAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIENvcm5lciBib3JkZXIgcmFkaXVzXG4gICAgICovXG4gIC8qKlxuICAgICAqIENvcm5lciBib3JkZXIgcmFkaXVzXG4gICAgICovXG4gIGJvcmRlclJhZGl1czogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogV2hlbiB0cnVlIHRoZSBwYW5lbCB3aWxsIGdyb3cgaW4gaGVpZ2h0IHRvIG1hdGNoIGBFdWlGbGV4SXRlbWBcbiAgICAgKi9cbiAgLyoqXG4gICAgICogV2hlbiB0cnVlIHRoZSBwYW5lbCB3aWxsIGdyb3cgaW4gaGVpZ2h0IHRvIG1hdGNoIGBFdWlGbGV4SXRlbWBcbiAgICAgKi9cbiAgZ3JvdzogUHJvcFR5cGVzLmJvb2wsXG4gIHBhbmVsUmVmOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBwYW5lbDtcbiAgICAgKiBVc3VhbGx5IGEgbGlnaHRlbmVkIGZvcm0gb2YgdGhlIGJyYW5kIGNvbG9yc1xuICAgICAqL1xuICAvKipcbiAgICAgKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBwYW5lbDtcbiAgICAgKiBVc3VhbGx5IGEgbGlnaHRlbmVkIGZvcm0gb2YgdGhlIGJyYW5kIGNvbG9yc1xuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aVNoYWRvdyB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbmltcG9ydCB7IGV1aUNhbkFuaW1hdGUsIGxvZ2ljYWxDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxMjJsdzBlLWdyb3dcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOmdyb3c7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTIybHcwZS1ncm93XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDpncm93O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWtrN29kaS1ldWlQYW5lbFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjA7bGFiZWw6ZXVpUGFuZWw7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWtrN29kaS1ldWlQYW5lbFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjA7bGFiZWw6ZXVpUGFuZWw7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpUGFuZWxTdHlsZXMgPSBmdW5jdGlvbiBldWlQYW5lbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlQYW5lbDogX3JlZjIsXG4gICAgZ3JvdzogX3JlZixcbiAgICBoYXNTaGFkb3c6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7O2xhYmVsOmhhc1NoYWRvdztcIiksXG4gICAgaGFzQm9yZGVyOiAvKiNfX1BVUkVfXyovY3NzKFwiYm9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIudGhpbiwgXCI7O2xhYmVsOmhhc0JvcmRlcjtcIiksXG4gICAgcmFkaXVzOiB7XG4gICAgICBub25lOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOm5vbmU7XCIpLFxuICAgICAgbTogLyojX19QVVJFX18qL2NzcyhcImJvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBcIjs7bGFiZWw6bTtcIilcbiAgICB9LFxuICAgIC8vIFNldHVwIGludGVyYWN0aXZlIGJlaGF2aW9yXG4gICAgaXNDbGlja2FibGU6IC8qI19fUFVSRV9fKi9jc3MoZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpib3gtc2hhZG93IFwiLCBldWlUaGVtZS5hbmltYXRpb24uZmFzdCwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIix0cmFuc2Zvcm0gXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO30mOmVuYWJsZWR7ZGlzcGxheTpibG9jaztcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiBcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIjt9Jjpob3ZlciwmOmZvY3Vze1wiLCBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIiB0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTtjdXJzb3I6cG9pbnRlcjt9O2xhYmVsOmlzQ2xpY2thYmxlO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpU2hhZG93LCBldWlTaGFkb3dGbGF0LCBldWlTaGFkb3dNZWRpdW0gfSBmcm9tICcuLi8uLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5pbXBvcnQgeyBnZXRTaGFkb3dDb2xvciB9IGZyb20gJy4uLy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zJztcbmltcG9ydCB7IHRpbnQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlLCBsb2dpY2FsQ1NTLCBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBvcGVuQW5pbWF0aW9uVGltaW5nID0gJ3Nsb3cnO1xuXG4vKipcbiAqIDEuIENhbiBleHBhbmQgZnVydGhlciwgYnV0IGl0IGxvb2tzIHdlaXJkIGlmIGl0J3Mgc21hbGxlciB0aGFuIHRoZSBvcmlnaW5hdGluZyBidXR0b24uXG4gKiAyLiBBbmltYXRpb24gaGFwcGVucyBvbiB0aGUgcGFuZWwuIEJ1dCBkb24ndCBhbmltYXRlIHBvc2l0aW9uIHdoZW4gdXNpbmcgdGhlIGF0dGFjaGVkIG1vZGUgbGlrZSBmb3IgaW5wdXRzXG4gKiAzLiBNYWtlIHN1cmUgdGhlIHBhbmVsIHN0YXlzIHdpdGhpbiB0aGUgd2luZG93LlxuICogNC4gTWFrZSB0aGUgcG9wb3ZlciBsaWdodGVyIG9uIGRhcmsgbW9kZSAodG9vIGhhcmQgdG8gZGlzdGluZ3Vpc2ggZnJvbSBwbGFpbiBiZ3Mgb3RoZXJ3aXNlKSwgYW5kIHNldCBhIENTUyB2YXIgZm9yIHRoZSBhcnJvdyB0byB1c2VcbiAqL1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiajV5Nnl4LWlzT3BlblwiLFxuICBzdHlsZXM6IFwib3BhY2l0eToxO3BvaW50ZXItZXZlbnRzOmF1dG87bGFiZWw6aXNPcGVuO1wiXG59IDoge1xuICBuYW1lOiBcImo1eTZ5eC1pc09wZW5cIixcbiAgc3R5bGVzOiBcIm9wYWNpdHk6MTtwb2ludGVyLWV2ZW50czphdXRvO2xhYmVsOmlzT3BlbjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlQb3BvdmVyUGFuZWxTdHlsZXMgPSBmdW5jdGlvbiBldWlQb3BvdmVyUGFuZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICB2YXIgdHJhbnNsYXRlRGlzdGFuY2UgPSBldWlUaGVtZS5zaXplLnM7XG4gIHZhciBhbmltYXRpb25TcGVlZCA9IGV1aVRoZW1lLmFuaW1hdGlvbltvcGVuQW5pbWF0aW9uVGltaW5nXTtcbiAgdmFyIG9wYWNpdHlUcmFuc2l0aW9uID0gXCJvcGFjaXR5IFwiLmNvbmNhdChldWlUaGVtZS5hbmltYXRpb24uYm91bmNlLCBcIiBcIikuY29uY2F0KGFuaW1hdGlvblNwZWVkKTtcbiAgdmFyIHRyYW5zZm9ybVRyYW5zaXRpb24gPSBcInRyYW5zZm9ybSBcIi5jb25jYXQoZXVpVGhlbWUuYW5pbWF0aW9uLmJvdW5jZSwgXCIgXCIpLmNvbmNhdChtYXRoV2l0aFVuaXRzKGFuaW1hdGlvblNwZWVkLCBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB4ICsgMTAwO1xuICB9KSk7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVBvcG92ZXJfX3BhbmVsOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxDU1MoJ21pbi13aWR0aCcsIFwiXCIuY29uY2F0KGV1aVRoZW1lLmJhc2UgKiA3LCBcInB4XCIpKSwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgXCJjYWxjKDEwMHZ3IC0gXCIuY29uY2F0KGV1aVRoZW1lLnNpemUueGwsIFwiKVwiKSksIFwiYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47cG9pbnRlci1ldmVudHM6bm9uZTtvcGFjaXR5OjA7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1ldWlQb3BvdmVyQmFja2dyb3VuZENvbG9yKTtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpcIiwgb3BhY2l0eVRyYW5zaXRpb24sIFwiLFwiLCB0cmFuc2Zvcm1UcmFuc2l0aW9uLCBcIjt9Jjpmb2N1c3tvdXRsaW5lLW9mZnNldDowO307bGFiZWw6ZXVpUG9wb3Zlcl9fcGFuZWw7XCIpLFxuICAgIGlzT3BlbjogX3JlZixcbiAgICAvKiA0ICovXG4gICAgbGlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCItLWV1aVBvcG92ZXJCYWNrZ3JvdW5kQ29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLCBcIjs7bGFiZWw6bGlnaHQ7XCIpLFxuICAgIGRhcms6IC8qI19fUFVSRV9fKi9jc3MoXCItLWV1aVBvcG92ZXJCYWNrZ3JvdW5kQ29sb3I6XCIsIHRpbnQoZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsIDAuMDI1KSwgXCI7O2xhYmVsOmRhcms7XCIpLFxuICAgIC8vIFJlZ3VsYXIgcG9wb3ZlciB3aXRoIGFuIGFycm93LCBhIHRyYW5zZm9ybSBhbmltYXRpb24vdHJhbnNpdGlvbiwgYW5kIGFcbiAgICAvLyBkcm9wIHNoYWRvdyB2aWEgYGZpbHRlcmAgKHdoaWNoIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB0aGUgYXJyb3cpXG4gICAgaGFzVHJhbnNmb3JtOiB7XG4gICAgICBoYXNUcmFuc2Zvcm06IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKSB0cmFuc2xhdGVYKDApIHRyYW5zbGF0ZVooMCk7XCIsIGV1aVNoYWRvd01lZGl1bShldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgcHJvcGVydHk6ICdmaWx0ZXInXG4gICAgICB9KSwgXCIgXCIsIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246XCIsIG9wYWNpdHlUcmFuc2l0aW9uLCBcIixcIiwgdHJhbnNmb3JtVHJhbnNpdGlvbiwgXCI7fTtsYWJlbDpoYXNUcmFuc2Zvcm07XCIpLFxuICAgICAgLy8gUG9zaXRpb25zXG4gICAgICB0b3A6IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWShcIiwgdHJhbnNsYXRlRGlzdGFuY2UsIFwiKSB0cmFuc2xhdGVaKDApOztsYWJlbDp0b3A7XCIpLFxuICAgICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVkoLVwiLCB0cmFuc2xhdGVEaXN0YW5jZSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVgoXCIsIHRyYW5zbGF0ZURpc3RhbmNlLCBcIikgdHJhbnNsYXRlWigwKTs7bGFiZWw6bGVmdDtcIiksXG4gICAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVYKC1cIiwgdHJhbnNsYXRlRGlzdGFuY2UsIFwiKSB0cmFuc2xhdGVaKDApOztsYWJlbDpyaWdodDtcIilcbiAgICB9LFxuICAgIC8vIE5vIGFycm93LCB0cmFuc2Zvcm0sIG9yIGZpbHRlcnNcbiAgICBpc0F0dGFjaGVkOiB7XG4gICAgICBpc0F0dGFjaGVkOiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246XCIsIG9wYWNpdHlUcmFuc2l0aW9uLCBcIjt9O2xhYmVsOmlzQXR0YWNoZWQ7XCIpLFxuICAgICAgdG9wOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvd0ZsYXQoZXVpVGhlbWVDb250ZXh0KSwgXCI7O2xhYmVsOnRvcDtcIiksXG4gICAgICBib3R0b206IC8qI19fUFVSRV9fKi9jc3MoZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgICBnZXQgbGVmdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm90dG9tO1xuICAgICAgfSxcbiAgICAgIGdldCByaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm90dG9tO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy8gSGFzIGFuIGFycm93LCBidXQgY2Fubm90IGhhdmUgdHJhbnNmb3JtIG9yIGZpbHRlciBDU1MgLSB0aGV5IGNyZWF0ZSBhXG4gICAgLy8gc3RhY2tpbmcgY29udGV4dCB0aGF0IG1lc3NlcyB1cCB0aGUgZHJhZy9kcm9wIGZpeGVkIHBvc2l0aW9uaW5nXG4gICAgaGFzRHJhZ0Ryb3A6IHtcbiAgICAgIGhhc0RyYWdEcm9wOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvd01lZGl1bShldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgcHJvcGVydHk6ICdib3gtc2hhZG93J1xuICAgICAgfSksIFwiIFwiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOlwiLCBvcGFjaXR5VHJhbnNpdGlvbiwgXCI7fTtsYWJlbDpoYXNEcmFnRHJvcDtcIiksXG4gICAgICAvLyBUaGUgb2Zmc2V0IHRyYW5zZm9ybXMgbXVzdCBiZSByZWNyZWF0ZWQgaW4gbWFyZ2luc1xuICAgICAgdG9wOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrLXN0YXJ0OlwiLCB0cmFuc2xhdGVEaXN0YW5jZSwgXCI7O2xhYmVsOnRvcDtcIiksXG4gICAgICBib3R0b206IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2stc3RhcnQ6LVwiLCB0cmFuc2xhdGVEaXN0YW5jZSwgXCI7LmV1aVBvcG92ZXJfX2Fycm93e2ZpbHRlcjpkcm9wLXNoYWRvdyhcXG4gICAgICAgICAgICAwIC02cHggNnB4IFwiLCBnZXRTaGFkb3dDb2xvcihldWlUaGVtZS5jb2xvcnMuc2hhZG93LCAwLjEyLCBjb2xvck1vZGUpLCBcIlxcbiAgICAgICAgICApO307bGFiZWw6Ym90dG9tO1wiKSxcbiAgICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4taW5saW5lLXN0YXJ0OlwiLCB0cmFuc2xhdGVEaXN0YW5jZSwgXCI7LmV1aVBvcG92ZXJfX2Fycm93e2ZpbHRlcjpkcm9wLXNoYWRvdyhcXG4gICAgICAgICAgICA2cHggMCA2cHggXCIsIGdldFNoYWRvd0NvbG9yKGV1aVRoZW1lLmNvbG9ycy5zaGFkb3csIDAuMTIsIGNvbG9yTW9kZSksIFwiXFxuICAgICAgICAgICk7fTtsYWJlbDpsZWZ0O1wiKSxcbiAgICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWlubGluZS1zdGFydDotXCIsIHRyYW5zbGF0ZURpc3RhbmNlLCBcIjsuZXVpUG9wb3Zlcl9fYXJyb3d7ZmlsdGVyOmRyb3Atc2hhZG93KFxcbiAgICAgICAgICAgIC02cHggMCA2cHggXCIsIGdldFNoYWRvd0NvbG9yKGV1aVRoZW1lLmNvbG9ycy5zaGFkb3csIDAuMTIsIGNvbG9yTW9kZSksIFwiXFxuICAgICAgICAgICk7fTtsYWJlbDpyaWdodDtcIilcbiAgICB9XG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJjb2xvclwiLCBcInNpemVcIiwgXCJpY29uVHlwZVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaGVhZGluZ1wiLCBcIm9uRGlzbWlzc1wiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpQnV0dG9uSWNvbiB9IGZyb20gJy4uL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQgeyBFdWlQYW5lbCB9IGZyb20gJy4uL3BhbmVsJztcbmltcG9ydCB7IEV1aVNwYWNlciB9IGZyb20gJy4uL3NwYWNlcic7XG5pbXBvcnQgeyBFdWlUaXRsZSB9IGZyb20gJy4uL3RpdGxlJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGV1aUNhbGxPdXRTdHlsZXMsIGV1aUNhbGxPdXRIZWFkZXJTdHlsZXMgfSBmcm9tICcuL2NhbGxfb3V0LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDT0xPUlMgPSBbJ3ByaW1hcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJywgJ2RhbmdlciddO1xuZXhwb3J0IHZhciBIRUFESU5HUyA9IFsnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAncCddO1xuZXhwb3J0IHZhciBFdWlDYWxsT3V0ID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ3ByaW1hcnknIDogX3JlZiRjb2xvcixcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRoZWFkaW5nID0gX3JlZi5oZWFkaW5nLFxuICAgIGhlYWRpbmcgPSBfcmVmJGhlYWRpbmcgPT09IHZvaWQgMCA/ICdwJyA6IF9yZWYkaGVhZGluZyxcbiAgICBvbkRpc21pc3MgPSBfcmVmLm9uRGlzbWlzcyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlDYWxsT3V0U3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpQ2FsbE91dCwgb25EaXNtaXNzICYmIHN0eWxlcy5oYXNEaXNtaXNzQnV0dG9uLmhhc0RpbWlzc0J1dHRvbiwgb25EaXNtaXNzICYmIHN0eWxlcy5oYXNEaXNtaXNzQnV0dG9uW3NpemVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDYWxsT3V0JywgX2RlZmluZVByb3BlcnR5KHt9LCBcImV1aUNhbGxPdXQtLVwiLmNvbmNhdChjb2xvciksIGNvbG9yKSwgY2xhc3NOYW1lKTtcbiAgdmFyIGRpc21pc3NCdXR0b24gPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIW9uRGlzbWlzcykgcmV0dXJuO1xuICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmRpc21pc3NCdXR0b24uZXVpQ2FsbE91dF9fZGlzbWlzc0J1dHRvbiwgc3R5bGVzLmRpc21pc3NCdXR0b25bc2l6ZV1dO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aUNhbGxPdXQuZGlzbWlzc0FyaWFMYWJlbFwiLFxuICAgICAgZGVmYXVsdDogXCJEaXNtaXNzIHRoaXMgY2FsbG91dFwiXG4gICAgfSwgZnVuY3Rpb24gKGRpc21pc3NBcmlhTGFiZWwpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkljb24sIHtcbiAgICAgICAgaWNvblR5cGU6IFwiY3Jvc3NcIixcbiAgICAgICAgb25DbGljazogb25EaXNtaXNzLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogZGlzbWlzc0FyaWFMYWJlbCxcbiAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aURpc21pc3NDYWxsb3V0QnV0dG9uXCJcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCBbb25EaXNtaXNzLCBzdHlsZXMsIGNvbG9yLCBzaXplXSk7XG4gIHZhciBoZWFkZXJTdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlDYWxsT3V0SGVhZGVyU3R5bGVzKTtcbiAgdmFyIGhlYWRlciA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGl0bGUpIHJldHVybjtcbiAgICB2YXIgSCA9IGhlYWRpbmc7XG4gICAgdmFyIGNzc1N0eWxlcyA9IFtoZWFkZXJTdHlsZXMuZXVpQ2FsbE91dEhlYWRlciwgaGVhZGVyU3R5bGVzW2NvbG9yXV07XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGl0bGUsIHtcbiAgICAgIHNpemU6IHNpemUgPT09ICdzJyA/ICd4eHMnIDogJ3hzJyxcbiAgICAgIGNzczogY3NzU3R5bGVzXG4gICAgfSwgX19fRW1vdGlvbkpTWChILCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQ2FsbE91dEhlYWRlcl9fdGl0bGVcIlxuICAgIH0sIGljb25UeXBlICYmIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgY3NzOiBoZWFkZXJTdHlsZXMuZXVpQ2FsbE91dF9faWNvbixcbiAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgc2l6ZTogXCJtXCIsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgY29sb3I6IFwiaW5oZXJpdFwiXG4gICAgfSksIHRpdGxlKSk7XG4gIH0sIFt0aXRsZSwgaGVhZGluZywgaWNvblR5cGUsIHNpemUsIGNvbG9yLCBoZWFkZXJTdHlsZXNdKTtcbiAgdmFyIG9wdGlvbmFsQ2hpbGRyZW4gPSBjaGlsZHJlbiAmJiBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICBzaXplOiBzaXplID09PSAncycgPyAneHMnIDogJ3MnLFxuICAgIGNvbG9yOiBcImRlZmF1bHRcIlxuICB9LCBjaGlsZHJlbik7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBhbmVsLCBfZXh0ZW5kcyh7XG4gICAgYm9yZGVyUmFkaXVzOiBcIm5vbmVcIixcbiAgICBjb2xvcjogY29sb3IsXG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgcGFkZGluZ1NpemU6IHNpemUgPT09ICdzJyA/ICdzJyA6ICdtJyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgcGFuZWxSZWY6IHJlZixcbiAgICBncm93OiBmYWxzZVxuICB9LCByZXN0KSxcbiAgLy8gTm90ZTogdGhlIERPTSBwb3NpdGlvbiBvZiB0aGUgZGlzbWlzcyBidXR0b24gbWF0dGVycyB0byBzY3JlZW4gcmVhZGVyIHVzZXJzLlxuICAvLyBXZSBnZW5lcmFsbHkgd2FudCB0aGVtIHRvIGhhdmUgc29tZSBjb250ZXh0IG9mIF93aGF0XyB0aGV5J3JlIGRpc21pc3NpbmcsXG4gIC8vIGluc3RlYWQgb2YgbmF2aWdhdGluZyB0byB0aGUgZGlzbWlzcyBidXR0b24gZmlyc3QgYmVmb3JlIHRoZSBjYWxsb3V0IGNvbnRlbnRcbiAgaGVhZGVyICYmIG9wdGlvbmFsQ2hpbGRyZW4gPyBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBoZWFkZXIsIGRpc21pc3NCdXR0b24sIF9fX0Vtb3Rpb25KU1goRXVpU3BhY2VyLCB7XG4gICAgc2l6ZTogXCJzXCJcbiAgfSksIG9wdGlvbmFsQ2hpbGRyZW4pIDogX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgaGVhZGVyIHx8IG9wdGlvbmFsQ2hpbGRyZW4sIGRpc21pc3NCdXR0b24pKTtcbn0pO1xuRXVpQ2FsbE91dC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICB0aXRsZTogUHJvcFR5cGVzLm5vZGUsXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgaGVhZGluZzogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBQYXNzaW5nIGFuIGBvbkRpc21pc3NgIGNhbGxiYWNrIHdpbGwgcmVuZGVyIGEgY3Jvc3MgaW4gdGhlIHRvcCByaWdodCBoYW5kIGNvcm5lclxuICAgICAgICogb2YgdGhlIGNhbGxvdXQuXG4gICAgICAgKlxuICAgICAgICogVGhpcyBjYWxsYmFjayBmaXJlcyB3aGVuIHVzZXJzIGNsaWNrIHRoaXMgYnV0dG9uLCB3aGljaCBhbGxvd3MgY29uZGl0aW9uYWxseVxuICAgICAgICogcmVtb3ZpbmcgdGhlIGNhbGxvdXQgb3Igb3RoZXIgYWN0aW9ucy5cbiAgICAgICAqL1xuICBvbkRpc21pc3M6IFByb3BUeXBlcy5mdW5jXG59O1xuRXVpQ2FsbE91dC5kaXNwbGF5TmFtZSA9ICdFdWlDYWxsT3V0JzsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcInNpemVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpU3BhY2VyU3R5bGVzIH0gZnJvbSAnLi9zcGFjZXIuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWyd4cycsICdzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcbmV4cG9ydCB2YXIgRXVpU3BhY2VyID0gZnVuY3Rpb24gRXVpU3BhY2VyKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbCcgOiBfcmVmJHNpemUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpU3BhY2VyU3R5bGVzKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTcGFjZXInLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiZXVpU3BhY2VyLS1cIi5jb25jYXQoc2l6ZSksIHNpemUpLCBjbGFzc05hbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlTcGFjZXIsIHN0eWxlc1tzaXplXV07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcmVzdCkpO1xufTtcbkV1aVNwYWNlci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBzaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FscyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE5MXhpMW4tZXVpU3BhY2VyXCIsXG4gIHN0eWxlczogXCJmbGV4LXNocmluazowO2xhYmVsOmV1aVNwYWNlcjtcIlxufSA6IHtcbiAgbmFtZTogXCIxOTF4aTFuLWV1aVNwYWNlclwiLFxuICBzdHlsZXM6IFwiZmxleC1zaHJpbms6MDtsYWJlbDpldWlTcGFjZXI7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpU3BhY2VyU3R5bGVzID0gZnVuY3Rpb24gZXVpU3BhY2VyU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVNwYWNlcjogX3JlZixcbiAgICAvLyBTaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUueHMsIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2Fscy5oZWlnaHQsIFwiOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICB4eGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wic2l6ZVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwidGV4dFRyYW5zZm9ybVwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcywgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRpdGxlU3R5bGVzIH0gZnJvbSAnLi90aXRsZS5zdHlsZXMnO1xuZXhwb3J0IHZhciBUSVRMRV9TSVpFUyA9IFsneHh4cycsICd4eHMnLCAneHMnLCAncycsICdtJywgJ2wnXTtcbmV4cG9ydCB2YXIgVEVYVF9UUkFOU0ZPUk0gPSBbJ3VwcGVyY2FzZSddO1xuZXhwb3J0IHZhciBFdWlUaXRsZSA9IGZ1bmN0aW9uIEV1aVRpdGxlKF9yZWYpIHtcbiAgdmFyIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHRleHRUcmFuc2Zvcm0gPSBfcmVmLnRleHRUcmFuc2Zvcm0sXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGl0bGVTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUaXRsZSwgdGV4dFRyYW5zZm9ybSA/IHN0eWxlc1t0ZXh0VHJhbnNmb3JtXSA6IHVuZGVmaW5lZCwgc3R5bGVzW3NpemVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUaXRsZScsIGNsYXNzTmFtZSwgY2hpbGRyZW4ucHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpO1xuICByZXR1cm4gY2xvbmVFbGVtZW50V2l0aENzcyhjaGlsZHJlbiwgcHJvcHMpO1xufTtcbkV1aVRpdGxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICB0ZXh0VHJhbnNmb3JtOiBQcm9wVHlwZXMuYW55LFxuICBpZDogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE3M3Y4YTQtZXVpQ2FsbE91dF9fZGlzbWlzc0J1dHRvblwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246YWJzb2x1dGU7bGFiZWw6ZXVpQ2FsbE91dF9fZGlzbWlzc0J1dHRvbjtcIlxufSA6IHtcbiAgbmFtZTogXCIxNzN2OGE0LWV1aUNhbGxPdXRfX2Rpc21pc3NCdXR0b25cIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOmFic29sdXRlO2xhYmVsOmV1aUNhbGxPdXRfX2Rpc21pc3NCdXR0b247XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxOTJraW4wLWV1aUNhbGxPdXRcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO2xhYmVsOmV1aUNhbGxPdXQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTkya2luMC1ldWlDYWxsT3V0XCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpyZWxhdGl2ZTtsYWJlbDpldWlDYWxsT3V0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUNhbGxPdXRTdHlsZXMgPSBmdW5jdGlvbiBldWlDYWxsT3V0U3R5bGVzKF9yZWYzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUNhbGxPdXQ6IF9yZWYyLFxuICAgIGhhc0Rpc21pc3NCdXR0b246IHtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IG9ubHkgdGhlIHRvcC1tb3N0IChmaXJzdC1jaGlsZCkgdGl0bGUgb3IgY2hpbGQgdGV4dFxuICAgICAgLy8gaGFzIGEgcGFkZGluZy1yaWdodCBvbiBpdCAodG8gYWNjb3VudCBmb3IgdGhlIGRpc21pc3MgYnV0dG9uKVxuICAgICAgaGFzRGltaXNzQnV0dG9uOiAvKiNfX1BVUkVfXyovY3NzKFwiJj46Zmlyc3QtY2hpbGQ6aXMoLmV1aVRpdGxlKSwmPjpmaXJzdC1jaGlsZDppcyguZXVpVGV4dCk+OmZpcnN0LWNoaWxke1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLXJpZ2h0JywgZXVpVGhlbWUuc2l6ZS5iYXNlKSwgXCI7fTtsYWJlbDpoYXNEaW1pc3NCdXR0b247XCIpLFxuICAgICAgLy8gRW5zdXJlIHRoZSBjYWxsb3V0IGFsd2F5cyBoYXMgZW5vdWdoIGhlaWdodCBmb3IgdGhlIGJ1dHRvblxuICAgICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtaW4taGVpZ2h0JywgZXVpVGhlbWUuc2l6ZS54bCksIFwiOztsYWJlbDpzO1wiKSxcbiAgICAgIG06IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWluLWhlaWdodCcsIGV1aVRoZW1lLnNpemUueHhsKSwgXCI7O2xhYmVsOm07XCIpXG4gICAgfSxcbiAgICBkaXNtaXNzQnV0dG9uOiB7XG4gICAgICBldWlDYWxsT3V0X19kaXNtaXNzQnV0dG9uOiBfcmVmLFxuICAgICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd0b3AnLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3JpZ2h0JywgZXVpVGhlbWUuc2l6ZS54cyksIFwiOztsYWJlbDpzO1wiKSxcbiAgICAgIG06IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygndG9wJywgZXVpVGhlbWUuc2l6ZS5zKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3JpZ2h0JywgZXVpVGhlbWUuc2l6ZS5zKSwgXCI7O2xhYmVsOm07XCIpXG4gICAgfVxuICB9O1xufTtcbmV4cG9ydCB2YXIgZXVpQ2FsbE91dEhlYWRlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNhbGxPdXRIZWFkZXJTdHlsZXMoX3JlZjQpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpQ2FsbE91dEhlYWRlcjogLyojX19QVVJFX18qL2NzcyhcImZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodC5tZWRpdW0sIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgJzAgIWltcG9ydGFudCdcbiAgICAvLyBJbiBjYXNlIGl0J3MgbmVzdGVkIGluc2lkZSBFdWlUZXh0XG4gICAgKSwgXCI7O2xhYmVsOmV1aUNhbGxPdXRIZWFkZXI7XCIpLFxuICAgIHByaW1hcnk6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnlUZXh0LCBcIjs7bGFiZWw6cHJpbWFyeTtcIiksXG4gICAgc3VjY2VzczogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQsIFwiOztsYWJlbDpzdWNjZXNzO1wiKSxcbiAgICB3YXJuaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy53YXJuaW5nVGV4dCwgXCI7O2xhYmVsOndhcm5pbmc7XCIpLFxuICAgIGRhbmdlcjogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGFuZ2VyVGV4dCwgXCI7O2xhYmVsOmRhbmdlcjtcIiksXG4gICAgZXVpQ2FsbE91dF9faWNvbjogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOnJlbGF0aXZlO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCAnLTFweCcpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLXJpZ2h0JywgZXVpVGhlbWUuc2l6ZS5zKSwgXCI7O2xhYmVsOmV1aUNhbGxPdXRfX2ljb247XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJpc0Rpc2FibGVkXCIsIFwidGl0bGVcIiwgXCJ0aXRsZUVsZW1lbnRcIiwgXCJ0aXRsZVNpemVcIiwgXCJpY29uXCIsIFwiaW1hZ2VcIiwgXCJjaGlsZHJlblwiLCBcImZvb3RlclwiLCBcIm9uQ2xpY2tcIiwgXCJocmVmXCIsIFwicmVsXCIsIFwidGFyZ2V0XCIsIFwidGV4dEFsaWduXCIsIFwiYmV0YUJhZGdlUHJvcHNcIiwgXCJsYXlvdXRcIiwgXCJzZWxlY3RhYmxlXCIsIFwiZGlzcGxheVwiLCBcInBhZGRpbmdTaXplXCJdLFxuICBfZXhjbHVkZWQyID0gW1wiYW5jaG9yUHJvcHNcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIHVzZUV1aVRoZW1lLCBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlR2VuZXJhdGVkSHRtbElkIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQgeyBFdWlUaXRsZSB9IGZyb20gJy4uL3RpdGxlJztcbmltcG9ydCB7IEV1aUJldGFCYWRnZSB9IGZyb20gJy4uL2JhZGdlL2JldGFfYmFkZ2UnO1xuaW1wb3J0IHsgRXVpUGFuZWwgfSBmcm9tICcuLi9wYW5lbCc7XG5pbXBvcnQgeyBFdWlTcGFjZXIgfSBmcm9tICcuLi9zcGFjZXInO1xuaW1wb3J0IHsgRXVpQ2FyZFNlbGVjdCB9IGZyb20gJy4vY2FyZF9zZWxlY3QnO1xuaW1wb3J0IHsgZXVpQ2FyZEJldGFCYWRnZVN0eWxlcywgZXVpQ2FyZFN0eWxlcywgZXVpQ2FyZFRleHRTdHlsZXMgfSBmcm9tICcuL2NhcmQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEFMSUdOTUVOVFMgPSBbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0J107XG5cbi8qKlxuICogQ2VydGFpbiBwcm9wcyBhcmUgb25seSBhbGxvd2VkIHdoZW4gdGhlIGxheW91dCBpcyB2ZXJ0aWNhbFxuICovXG5cbmV4cG9ydCB2YXIgRXVpQ2FyZCA9IGZ1bmN0aW9uIEV1aUNhcmQoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgZGVzY3JpcHRpb24gPSBfcmVmLmRlc2NyaXB0aW9uLFxuICAgIF9pc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICBfcmVmJHRpdGxlRWxlbWVudCA9IF9yZWYudGl0bGVFbGVtZW50LFxuICAgIHRpdGxlRWxlbWVudCA9IF9yZWYkdGl0bGVFbGVtZW50ID09PSB2b2lkIDAgPyAncCcgOiBfcmVmJHRpdGxlRWxlbWVudCxcbiAgICBfcmVmJHRpdGxlU2l6ZSA9IF9yZWYudGl0bGVTaXplLFxuICAgIHRpdGxlU2l6ZSA9IF9yZWYkdGl0bGVTaXplID09PSB2b2lkIDAgPyAncycgOiBfcmVmJHRpdGxlU2l6ZSxcbiAgICBpY29uID0gX3JlZi5pY29uLFxuICAgIGltYWdlID0gX3JlZi5pbWFnZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgZm9vdGVyID0gX3JlZi5mb290ZXIsXG4gICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgIHJlbCA9IF9yZWYucmVsLFxuICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgIF9yZWYkdGV4dEFsaWduID0gX3JlZi50ZXh0QWxpZ24sXG4gICAgdGV4dEFsaWduID0gX3JlZiR0ZXh0QWxpZ24gPT09IHZvaWQgMCA/ICdjZW50ZXInIDogX3JlZiR0ZXh0QWxpZ24sXG4gICAgYmV0YUJhZGdlUHJvcHMgPSBfcmVmLmJldGFCYWRnZVByb3BzLFxuICAgIF9yZWYkbGF5b3V0ID0gX3JlZi5sYXlvdXQsXG4gICAgbGF5b3V0ID0gX3JlZiRsYXlvdXQgPT09IHZvaWQgMCA/ICd2ZXJ0aWNhbCcgOiBfcmVmJGxheW91dCxcbiAgICBzZWxlY3RhYmxlID0gX3JlZi5zZWxlY3RhYmxlLFxuICAgIGRpc3BsYXkgPSBfcmVmLmRpc3BsYXksXG4gICAgX3JlZiRwYWRkaW5nU2l6ZSA9IF9yZWYucGFkZGluZ1NpemUsXG4gICAgcGFkZGluZ1NpemUgPSBfcmVmJHBhZGRpbmdTaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHBhZGRpbmdTaXplLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgaXNEaXNhYmxlZCA9IF9pc0Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcbiAgdmFyIGlzQ2xpY2thYmxlID0gIWlzRGlzYWJsZWQgJiYgKG9uQ2xpY2sgfHwgaHJlZiB8fCBzZWxlY3RhYmxlICYmICFzZWxlY3RhYmxlLmlzRGlzYWJsZWQpO1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUNhcmRTdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBwYWRkaW5nU2l6ZSk7XG4gIHZhciBjYXJkU3R5bGVzID0gW3N0eWxlcy5jYXJkLmV1aUNhcmQsXG4gIC8vIFRleHQgYWxpZ25tZW50IHNob3VsZCBhbHdheXMgYmUgbGVmdCB3aGVuIGhvcml6b250YWxcbiAgc3R5bGVzLmNhcmQuYWxpZ25lZFtsYXlvdXQgPT09ICdob3Jpem9udGFsJyA/ICdsZWZ0JyA6IHRleHRBbGlnbl0sIGlzRGlzYWJsZWQgJiYgc3R5bGVzLmNhcmQuZGlzYWJsZWRdO1xuICB2YXIgY29udGVudFN0eWxlcyA9IFtzdHlsZXMuY29udGVudC5ldWlDYXJkX19jb250ZW50LCBzdHlsZXMuY29udGVudC5sYXlvdXRbbGF5b3V0XV07XG4gIHZhciBtYWluU3R5bGVzID0gW3N0eWxlcy5tYWluLmV1aUNhcmRfX21haW4sIHN0eWxlcy5tYWluLmxheW91dFtsYXlvdXRdXTtcbiAgdmFyIHRleHRTdHlsZXMgPSBldWlDYXJkVGV4dFN0eWxlcyhldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgdGV4dENTUyA9IFt0ZXh0U3R5bGVzLmV1aUNhcmRfX3RleHQsXG4gIC8vIFRleHQgYWxpZ25tZW50IHNob3VsZCBhbHdheXMgYmUgbGVmdCB3aGVuIGhvcml6b250YWxcbiAgdGV4dFN0eWxlcy5hbGlnbmVkW2xheW91dCA9PT0gJ2hvcml6b250YWwnID8gJ2xlZnQnIDogdGV4dEFsaWduXSwgaXNDbGlja2FibGUgJiYgdGV4dFN0eWxlcy5pbnRlcmFjdGl2ZSwgaXNEaXNhYmxlZCAmJiB0ZXh0U3R5bGVzLmRpc2FibGVkXTtcblxuICAvKipcbiAgICogRm9yIGExMXksIHdlIHNpbXVsYXRlIHRoZSBzYW1lIGNsaWNrIHRoYXQncyBwcm92aWRlZCBvbiB0aGUgdGl0bGUgd2hlbiBjbGlja2luZyB0aGUgd2hvbGUgY2FyZFxuICAgKiB3aXRob3V0IGhhdmluZyB0byBtYWtlIHRoZSB3aG9sZSBjYXJkIGEgYnV0dG9uIG9yIGFuY2hvciB0YWcuXG4gICAqICpDYXJkIEFjY2Vzc2liaWxpdHk6IFRoZSByZWR1bmRhbnQgY2xpY2sgZXZlbnQgaHR0cHM6Ly9pbmNsdXNpdmUtY29tcG9uZW50cy5kZXNpZ24vY2FyZHMvKlxuICAgKi9cbiAgdmFyIGxpbmsgPSBudWxsO1xuICB2YXIgb3V0ZXJPbkNsaWNrID0gZnVuY3Rpb24gb3V0ZXJPbkNsaWNrKGUpIHtcbiAgICBpZiAobGluayAmJiBsaW5rICE9PSBlLnRhcmdldCAmJiAhbGluay5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICB9XG4gIH07XG4gIGlmIChsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgIGlmIChpbWFnZSB8fCBmb290ZXIgfHwgdGV4dEFsaWduICE9PSAnY2VudGVyJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFdWlDYXJkOiBgbGF5b3V0PVwiaG9yaXpvbnRhbFwiYCBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBpbWFnZWAsIGBmb290ZXJgLCBvciBgdGV4dEFsaWduYC4nKTtcbiAgICB9XG4gIH1cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDYXJkJywgY2xhc3NOYW1lKTtcbiAgdmFyIGFyaWFJZCA9IHVzZUdlbmVyYXRlZEh0bWxJZCgpO1xuICB2YXIgYXJpYURlc2MgPSBkZXNjcmlwdGlvbiA/IFwiXCIuY29uY2F0KGFyaWFJZCwgXCJEZXNjcmlwdGlvblwiKSA6ICcnO1xuXG4gIC8qKlxuICAgKiBUb3AgYXJlYSBjb250YWluaW5nIGltYWdlLCBpY29uIG9yIGJvdGhcbiAgICovXG5cbiAgdmFyIGltYWdlTm9kZTtcbiAgaWYgKGltYWdlICYmIGxheW91dCA9PT0gJ3ZlcnRpY2FsJykge1xuICAgIGlmICggLyojX19QVVJFX18qL2lzVmFsaWRFbGVtZW50KGltYWdlKSB8fCB0eXBlb2YgaW1hZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgaW1hZ2VTdHlsZXMgPSBbc3R5bGVzLmltYWdlLmV1aUNhcmRfX2ltYWdlLCBkaXNwbGF5ID09PSAndHJhbnNwYXJlbnQnICYmIHN0eWxlcy5pbWFnZS50cmFuc3BhcmVudF07XG4gICAgICBpbWFnZU5vZGUgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2ltYWdlXCIsXG4gICAgICAgIGNzczogaW1hZ2VTdHlsZXNcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChpbWFnZSkgPyBpbWFnZSA6IF9fX0Vtb3Rpb25KU1goXCJpbWdcIiwge1xuICAgICAgICBzcmM6IGltYWdlLFxuICAgICAgICBhbHQ6IFwiXCJcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW1hZ2VOb2RlID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgdmFyIGljb25Ob2RlO1xuICBpZiAoaWNvbikge1xuICAgIHZhciBpY29uU3R5bGVzID0gW3N0eWxlcy5pY29uLmV1aUNhcmRfX2ljb24sIHN0eWxlcy5pY29uLmxheW91dFtsYXlvdXRdLCBpbWFnZU5vZGUgJiYgc3R5bGVzLmljb24ud2l0aEltYWdlXTtcbiAgICBpY29uTm9kZSA9IGNsb25lRWxlbWVudFdpdGhDc3MoaWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGljb24ucHJvcHMuY2xhc3NOYW1lLCAnZXVpQ2FyZF9faWNvbicpLFxuICAgICAgY3NzOiBpY29uU3R5bGVzXG4gICAgfSk7XG4gIH1cbiAgdmFyIG9wdGlvbmFsQ2FyZFRvcDtcbiAgaWYgKGltYWdlTm9kZSB8fCBpY29uTm9kZSkge1xuICAgIHZhciB0b3BTdHlsZXMgPSBbc3R5bGVzLnRvcC5ldWlDYXJkX190b3AsIHN0eWxlcy50b3AubGF5b3V0W2xheW91dF0sIGlzRGlzYWJsZWQgJiYgc3R5bGVzLnRvcC5kaXNhYmxlZF07XG4gICAgb3B0aW9uYWxDYXJkVG9wID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fdG9wXCIsXG4gICAgICBjc3M6IHRvcFN0eWxlc1xuICAgIH0sIGltYWdlTm9kZSwgaWNvbk5vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIEV1aUJldGFCYWRnZVxuICAgKi9cblxuICB2YXIgb3B0aW9uYWxCZXRhQmFkZ2U7XG4gIHZhciBvcHRpb25hbEJldGFCYWRnZUlEID0gJyc7XG4gIHZhciBvcHRpb25hbEJldGFDU1M7XG4gIGlmIChiZXRhQmFkZ2VQcm9wcyAhPT0gbnVsbCAmJiBiZXRhQmFkZ2VQcm9wcyAhPT0gdm9pZCAwICYmIGJldGFCYWRnZVByb3BzLmxhYmVsKSB7XG4gICAgdmFyIGJldGFTdHlsZXMgPSBldWlDYXJkQmV0YUJhZGdlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwgcGFkZGluZ1NpemUpO1xuICAgIG9wdGlvbmFsQmV0YUNTUyA9IGJldGFTdHlsZXMuaGFzQmV0YUJhZGdlO1xuICAgIHZhciBhbmNob3JQcm9wcyA9IGJldGFCYWRnZVByb3BzLmFuY2hvclByb3BzLFxuICAgICAgY2xlYW5lZEJldGFCYWRnZVByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGJldGFCYWRnZVByb3BzLCBfZXhjbHVkZWQyKTtcbiAgICB2YXIgYW5jaG9yQ1NTID0gW2JldGFTdHlsZXMuZXVpQ2FyZF9fYmV0YUJhZGdlQW5jaG9yLCBhbmNob3JQcm9wcyA9PT0gbnVsbCB8fCBhbmNob3JQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYW5jaG9yUHJvcHMuY3NzXTtcbiAgICB2YXIgYmFkZ2VDU1MgPSBbYmV0YVN0eWxlcy5ldWlDYXJkX19iZXRhQmFkZ2UsIGJldGFCYWRnZVByb3BzID09PSBudWxsIHx8IGJldGFCYWRnZVByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBiZXRhQmFkZ2VQcm9wcy5jc3NdO1xuICAgIG9wdGlvbmFsQmV0YUJhZGdlSUQgPSBcIlwiLmNvbmNhdChhcmlhSWQsIFwiQmV0YUJhZGdlXCIpO1xuICAgIG9wdGlvbmFsQmV0YUJhZGdlID0gX19fRW1vdGlvbkpTWChFdWlCZXRhQmFkZ2UsIF9leHRlbmRzKHtcbiAgICAgIGNvbG9yOiBpc0Rpc2FibGVkICYmICFiZXRhQmFkZ2VQcm9wcy5vbkNsaWNrICYmICFiZXRhQmFkZ2VQcm9wcy5ocmVmID8gJ3N1YmR1ZWQnIDogJ2hvbGxvdydcbiAgICB9LCBjbGVhbmVkQmV0YUJhZGdlUHJvcHMsIHtcbiAgICAgIGNzczogYmFkZ2VDU1MsXG4gICAgICBhbmNob3JQcm9wczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhbmNob3JQcm9wcyksIHt9LCB7XG4gICAgICAgIGNzczogYW5jaG9yQ1NTXG4gICAgICB9KSxcbiAgICAgIGlkOiBvcHRpb25hbEJldGFCYWRnZUlEXG4gICAgfSkpO1xuXG4gICAgLy8gSW5jcmVhc2UgcGFkZGluZyBzaXplIHdoZW4gdGhlcmUgaXMgYSBiZXRhIGJhZGdlIHVubGVzcyBpdCdzIGFscmVhZHkgZGV0ZXJtaW5lZFxuICAgIC8vIHBhZGRpbmdTaXplID0gcGFkZGluZ1NpemUgfHwgJ2wnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHNlbGVjdGFibGUgYnV0dG9uXG4gICAqL1xuXG4gIGlmIChzZWxlY3RhYmxlICYmIGlzRGlzYWJsZWQgJiYgc2VsZWN0YWJsZS5pc0Rpc2FibGVkID09PSB1bmRlZmluZWQpIHtcbiAgICBzZWxlY3RhYmxlLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG4gIHZhciBvcHRpb25hbFNlbGVjdEJ1dHRvbjtcbiAgaWYgKHNlbGVjdGFibGUpIHtcbiAgICBvcHRpb25hbFNlbGVjdEJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHBhZGRpbmdTaXplICE9PSAnbm9uZScgJiYgX19fRW1vdGlvbkpTWChFdWlTcGFjZXIsIHtcbiAgICAgIHNpemU6IHBhZGRpbmdTaXplIHx8ICdtJ1xuICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aUNhcmRTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBcIlwiLmNvbmNhdChhcmlhSWQsIFwiVGl0bGUgXCIpLmNvbmNhdChhcmlhRGVzYylcbiAgICB9LCBzZWxlY3RhYmxlLCB7XG4gICAgICBidXR0b25SZWY6IGZ1bmN0aW9uIGJ1dHRvblJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0pKSk7XG4gIH1cbiAgdmFyIFRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbWVudDtcblxuICAvKipcbiAgICogV3JhcHMgdGhlIHRpdGxlIHdpdGggdGhlIGxpbmsgKDxhPikgb3IgYnV0dG9uLlxuICAgKiBUaGlzIG1ha2VzIHRoZSB0aXRsZSBlbGVtZW50IGExMXkgZnJpZW5kbHkgYW5kIGdldHMgZGVzY3JpYmVkIGJ5IGl0cyBjb250ZW50IGlmIGl0cyBpbnRlcmFjdGFibGUuXG4gICAqL1xuXG4gIHZhciB0aGVUaXRsZTtcbiAgaWYgKCFpc0Rpc2FibGVkICYmIGhyZWYpIHtcbiAgICB0aGVUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJhXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX190aXRsZUFuY2hvclwiLFxuICAgICAgY3NzOiB0ZXh0Q1NTLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzYyxcbiAgICAgIHJlbDogZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgICAgaHJlZjogaHJlZixcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgIHJlbDogcmVsXG4gICAgICB9KSxcbiAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgbGluayA9IG5vZGU7XG4gICAgICB9XG4gICAgfSwgdGl0bGUpO1xuICB9IGVsc2UgaWYgKGlzRGlzYWJsZWQgfHwgb25DbGljaykge1xuICAgIHRoZVRpdGxlID0gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fdGl0bGVCdXR0b25cIixcbiAgICAgIGNzczogdGV4dENTUyxcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBcIlwiLmNvbmNhdChvcHRpb25hbEJldGFCYWRnZUlELCBcIiBcIikuY29uY2F0KGFyaWFEZXNjKSxcbiAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgbGluayA9IG5vZGU7XG4gICAgICB9XG4gICAgfSwgdGl0bGUpO1xuICB9IGVsc2Uge1xuICAgIHRoZVRpdGxlID0gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgY3NzOiB0ZXh0Q1NTXG4gICAgfSwgdGl0bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoaWxkcmVuIGFuZC9vciBEZXNjcmlwdGlvbiBjb250ZW50XG4gICAqL1xuICB2YXIgb3B0aW9uYWxDaGlsZHJlbjtcbiAgaWYgKGNoaWxkcmVuKSB7XG4gICAgdmFyIGNoaWxkcmVuU3R5bGVzID0gW3N0eWxlcy5ldWlDYXJkX19jaGlsZHJlbl07XG4gICAgb3B0aW9uYWxDaGlsZHJlbiA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY3NzOiBjaGlsZHJlblN0eWxlc1xuICAgIH0sIGNoaWxkcmVuKTtcbiAgfVxuICB2YXIgb3B0aW9uYWxEZXNjcmlwdGlvbjtcbiAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgdmFyIGRlc2NyaXB0aW9uU3R5bGVzID0gW3N0eWxlcy5ldWlDYXJkX19kZXNjcmlwdGlvbl07XG4gICAgb3B0aW9uYWxEZXNjcmlwdGlvbiA9IF9fX0Vtb3Rpb25KU1goRXVpVGV4dCwge1xuICAgICAgaWQ6IGFyaWFEZXNjLFxuICAgICAgc2l6ZTogXCJzXCIsXG4gICAgICBjc3M6IGRlc2NyaXB0aW9uU3R5bGVzXG4gICAgfSwgX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgZGVzY3JpcHRpb24pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb290ZXIgY29udGVudFxuICAgKi9cbiAgdmFyIG9wdGlvbmFsRm9vdGVyO1xuICBpZiAobGF5b3V0ID09PSAndmVydGljYWwnICYmIGZvb3Rlcikge1xuICAgIHZhciBmb290ZXJTdHlsZXMgPSBbc3R5bGVzLmV1aUNhcmRfX2Zvb3Rlcl07XG4gICAgb3B0aW9uYWxGb290ZXIgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIGNzczogZm9vdGVyU3R5bGVzXG4gICAgfSwgZm9vdGVyKTtcbiAgfVxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQYW5lbCwgX2V4dGVuZHMoe1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogW10uY29uY2F0KGNhcmRTdHlsZXMsIFtvcHRpb25hbEJldGFDU1NdKSxcbiAgICBvbkNsaWNrOiBpc0NsaWNrYWJsZSA/IG91dGVyT25DbGljayA6IHVuZGVmaW5lZCxcbiAgICBjb2xvcjogaXNEaXNhYmxlZCA/ICdzdWJkdWVkJyA6IGRpc3BsYXksXG4gICAgaGFzU2hhZG93OiBpc0Rpc2FibGVkIHx8IGRpc3BsYXkgPyBmYWxzZSA6IHRydWUsXG4gICAgaGFzQm9yZGVyOiBkaXNwbGF5ID8gZmFsc2UgOiB1bmRlZmluZWQsXG4gICAgcGFkZGluZ1NpemU6IHBhZGRpbmdTaXplXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fbWFpblwiLFxuICAgIGNzczogbWFpblN0eWxlc1xuICB9LCBvcHRpb25hbENhcmRUb3AsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19jb250ZW50XCIsXG4gICAgY3NzOiBjb250ZW50U3R5bGVzXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpVGl0bGUsIHtcbiAgICBpZDogXCJcIi5jb25jYXQoYXJpYUlkLCBcIlRpdGxlXCIpLFxuICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX190aXRsZVwiLFxuICAgIHNpemU6IHRpdGxlU2l6ZVxuICB9LCBfX19FbW90aW9uSlNYKFRpdGxlRWxlbWVudCwgbnVsbCwgdGhlVGl0bGUpKSwgb3B0aW9uYWxEZXNjcmlwdGlvbiwgb3B0aW9uYWxDaGlsZHJlbiksIG9wdGlvbmFsQmV0YUJhZGdlLCBvcHRpb25hbEZvb3RlciksIG9wdGlvbmFsU2VsZWN0QnV0dG9uKTtcbn07XG5FdWlDYXJkLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICAgKiBDaGFuZ2UgdG8gXCJob3Jpem9udGFsXCIgaWYgeW91IG5lZWQgdGhlIGljb24gdG8gYmUgbGVmdCBvZiB0aGUgY29udGVudC5cbiAgICAgICAqIEhvcml6b250YWwgbGF5b3V0cyBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBpbWFnZWAsIGBmb290ZXJgLCBvciBgdGV4dEFsaWduYC5cbiAgICAgICAqL1xuICBsYXlvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJ2ZXJ0aWNhbFwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJob3Jpem9udGFsXCJdKS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogQ2hhbmdlcyBhbGlnbm1lbnQgb2YgdGhlIHRpdGxlIGFuZCBkZXNjcmlwdGlvblxuICAgICAgICovXG4gIHRleHRBbGlnbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGFueSBjb21iaW5hdGlvbiBvZiBlbGVtZW50c1xuICAgICAgICovXG4gIGZvb3RlcjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAgICogQWNjZXB0cyBhIHVybCBpbiBzdHJpbmcgZm9ybSBvciBSZWFjdEVsZW1lbnQgZm9yIGEgY3VzdG9tIGltYWdlIGNvbXBvbmVudFxuICAgICAgICovXG4gIGltYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBDYXJkcyBhcmUgcmVxdWlyZWQgdG8gaGF2ZSBhdCBsZWFzdCBhIHRpdGxlIGFuZCBhIGRlc2NyaXB0aW9uIGFuZC9vciBjaGlsZHJlblxuICAgICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB0aGUgdGl0bGUncyBoZWFkaW5nIGVsZW1lbnRcbiAgICAgICAqL1xuICB0aXRsZUVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJoMlwiLCBcImgzXCIsIFwiaDRcIiwgXCJoNVwiLCBcImg2XCIsIFwic3BhblwiLCBcInBcIl0pLFxuICAvKipcbiAgICAgICAqIERldGVybWluZXMgdGhlIHRpdGxlJ3Mgc2l6ZSwgbWF0Y2hpbmcgdGhhdCBvZiBFdWlUaXRsZS5cbiAgICAgICAqIFRob3VnaCwgY2FyZCB0aXRsZXMgY2FuJ3QgYmUgdG9vIGxhcmdlIG9yIHNtYWxsIHJlbGF0aXZlIHRvIHRoZSBkZXNjcmlwdGlvbiB0ZXh0LlxuICAgICAgICovXG4gIHRpdGxlU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJ4c1wiXSksXG4gIC8qKlxuICAgICAgICogUGxhY2VkIHdpdGhpbiBhIHNtYWxsIEV1aVRleHQgYDxwPmAgdGFnXG4gICAgICAgKi9cbiAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogQWNjZXB0cyBhbiBgPEV1aUljb24+YCBub2RlIG9yIGBudWxsYFxuICAgICAgICovXG4gIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSksXG4gIC8qKlxuICAgICAgICogQ3VzdG9tIGNoaWxkcmVuXG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgICAqIFVzZSBvbmx5IGlmIHlvdSB3YW50IHRvIGZvcmVnbyBhIGJ1dHRvbiBpbiB0aGUgZm9vdGVyIGFuZCBtYWtlIHRoZSB3aG9sZSBjYXJkIGNsaWNrYWJsZVxuICAgICAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgICAqIEFkZHMgYSBiYWRnZSB0byB0b3Agb2YgdGhlIGNhcmQgdG8gbGFiZWwgaXQgYXMgXCJCZXRhXCIgb3Igb3RoZXIgbm9uLUdBIHN0YXRlLlxuICAgICAgICogQWNjZXB0cyBhbGwgdGhlIHByb3BzIG9mIFtFdWlCZXRhQmFkZ2VdKCMvZGlzcGxheS9iYWRnZSNiZXRhLWJhZGdlLXR5cGUpLCB3aGVyZSBgbGFiZWxgIGlzIHJlcXVpcmVkLlxuICAgICAgICovXG4gIGJldGFCYWRnZVByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIHRoZSBiYWRnZSBpdHNlbGZcbiAgICAgICAqL1xuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBvbkNsaWNrIGJ1dHRvblxuICAgICAgICovXG4gICAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLyoqXG4gICAgICAgKiBTdXBwbHkgYW4gaWNvbiB0eXBlIGlmIHRoZSBiYWRnZSBzaG91bGQganVzdCBiZSBhbiBpY29uXG4gICAgICAgKi9cbiAgICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgICAvKipcbiAgICAgICAqIE9uZSB3b3JkIGxhYmVsIGxpa2UgXCJCZXRhXCIgb3IgXCJMYWJcIlxuICAgICAgICovXG4gICAgLyoqXG4gICAgICAgKiBPbmUgd29yZCBsYWJlbCBsaWtlIFwiQmV0YVwiIG9yIFwiTGFiXCJcbiAgICAgICAqL1xuICAgIGxhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgICAvKipcbiAgICAgICAqIENvbnRlbnQgZm9yIHRoZSB0b29sdGlwXG4gICAgICAgKi9cbiAgICB0b29sdGlwQ29udGVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXSldKSxcbiAgICAvKipcbiAgICAgICAqIEN1c3RvbSBwb3NpdGlvbiBvZiB0aGUgdG9vbHRpcFxuICAgICAgICovXG4gICAgdG9vbHRpcFBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKSxcbiAgICAvKipcbiAgICAgICAqIFBhc3NlcyBvbnRvIHRoZSBzcGFuIHdyYXBwaW5nIHRoZSBiYWRnZVxuICAgICAgICovXG4gICAgYW5jaG9yUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGNzczogUHJvcFR5cGVzLmFueVxuICAgIH0pLFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgdGl0bGUgd2lsbCBiZSBzdXBwbGllZCBhcyB0b29sdGlwIHRpdGxlIG9yIHRpdGxlIGF0dHJpYnV0ZVxuICAgICAgICogb3RoZXJ3aXNlIHRoZSBsYWJlbCB3aWxsIGJlIHVzZWRcbiAgICAgICAqL1xuICAgIHRpdGxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmddKV0pLFxuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBhY2NlbnQsIHN1YmR1ZWQgYW5kIGhvbGxvdy5cbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICAgIHNpemU6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBTZXRzIHRoZSBgdmVydGljYWwtYWxpZ25gIENTUyBwcm9wZXJ0eVxuICAgICAgICovXG4gICAgYWxpZ25tZW50OiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICAvKipcbiAgICAgICAqIE1hdGNoZXMgdG8gdGhlIGNvbG9yIHByb3BlcnR5IG9mIEV1aVBhbmVsLiBJZiBkZWZpbmVkLCByZW1vdmVzIGFueSBib3JkZXIgJiBzaGFkb3cuXG4gICAgICAgKiBMZWF2ZSBhcyBgdW5kZWZpbmVkYCB0byBkaXNwbGF5IGFzIGEgZGVmYXVsdCBwYW5lbC5cbiAgICAgICAqIFNlbGVjdGFibGUgY2FyZHMgd2lsbCBhbHdheXMgZGlzcGxheSBhcyBhIGRlZmF1bHQgcGFuZWwuXG4gICAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBQYWRkaW5nIGFwcGxpZWQgYXJvdW5kIHRoZSBjb250ZW50IG9mIHRoZSBjYXJkXG4gICAgICAgKi9cbiAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogQWRkcyBhIGJ1dHRvbiB0byB0aGUgYm90dG9tIG9mIHRoZSBjYXJkIHRvIGFsbG93IGZvciBpbi1wbGFjZSBzZWxlY3Rpb25cbiAgICAgICAqL1xuICBzZWxlY3RhYmxlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAgIC8qKlxuICAgICAgICogTWFrZSBidXR0b24gYSBzb2xpZCBjb2xvciBmb3IgcHJvbWluZW5jZVxuICAgICAgICovXG4gICAgLyoqXG4gICAgICAgKiBNYWtlIGJ1dHRvbiBhIHNvbGlkIGNvbG9yIGZvciBwcm9taW5lbmNlXG4gICAgICAgKi9cbiAgICBmaWxsOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIEFueSBvZiB0aGUgbmFtZWQgY29sb3IgcGFsZXR0ZSBvcHRpb25zLlxuICAgICAgICovXG4gICAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBVc2Ugc2l6ZSBgc2AgaW4gY29uZmluZWQgc3BhY2VzXG4gICAgICAgKi9cbiAgICAvKipcbiAgICAgICAqIFVzZSBzaXplIGBzYCBpbiBjb25maW5lZCBzcGFjZXNcbiAgICAgICAqL1xuICAgIHNpemU6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAgICovXG4gICAgLyoqXG4gICAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAgICovXG4gICAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIGVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJhXCIsIFwiYnV0dG9uXCIsIFwic3BhblwiXSksXG4gICAgLyoqXG4gICAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgICAqL1xuICAgIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogRXh0ZW5kcyB0aGUgYnV0dG9uIHRvIDEwMCUgd2lkdGhcbiAgICAgICAqL1xuICAgIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBtaW5pbXVtIHdpZHRoXG4gICAgICAgKi9cbiAgICBtaW5XaWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgICAvKipcbiAgICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAqL1xuICAgIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICAgKi9cbiAgICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGNzczogUHJvcFR5cGVzLmFueVxuICAgIH0pLFxuICAgIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICAgIHR5cGU6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgICAqL1xuICAgIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgICAqL1xuICAgIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbdW5kZWZpbmVkXSldKSxcbiAgICAvKipcbiAgICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dC9jaGlsZHJlbiBvbmx5IChub3QgaWNvbilcbiAgICAgICAqXG4gICAgICAgKiBUaGlzIHNwYW4gd3JhcHBlciBjYW4gYmUgcmVtb3ZlZCBieSBwYXNzaW5nIGB0ZXh0UHJvcHM9e2ZhbHNlfWAuXG4gICAgICAgKi9cbiAgICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgICBpY29uU2l6ZTogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgLyoqXG4gICAgICAgKiBVc2UgYSBib3JkZXIgc3R5bGUgb2YgY2FyZCBpbnN0ZWFkIG9mIHNoYWRvd1xuICAgICAgICovXG4gIGhhc0JvcmRlcjogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJpc1NlbGVjdGVkXCIsIFwiaXNEaXNhYmxlZFwiLCBcImRpc2FibGVkXCIsIFwiY29sb3JcIiwgXCJjaGlsZHJlblwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IEV1aUJ1dHRvbiB9IGZyb20gJy4uLy4uL2J1dHRvbi9idXR0b24nO1xuaW1wb3J0IHsgZXVpQ2FyZFNlbGVjdFN0eWxlcyB9IGZyb20gJy4vY2FyZF9zZWxlY3Quc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNhcmRTZWxlY3QgPSBmdW5jdGlvbiBFdWlDYXJkU2VsZWN0KF9yZWYpIHtcbiAgdmFyIF9yZWYkaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICBpc1NlbGVjdGVkID0gX3JlZiRpc1NlbGVjdGVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaXNTZWxlY3RlZCxcbiAgICBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUNhcmRTZWxlY3RTdHlsZXMoKTtcbiAgdmFyIGJhc2VDU1MgPSBbc3R5bGVzLmV1aUNhcmRTZWxlY3RdO1xuICB2YXIgY2hpbGQgPSBldWlDYXJkU2VsZWN0YWJsZVRleHQoaXNTZWxlY3RlZCwgaXNEaXNhYmxlZCB8fCBkaXNhYmxlZCwgY2hpbGRyZW4pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCdXR0b24sIF9leHRlbmRzKHtcbiAgICBjc3M6IGJhc2VDU1MsXG4gICAgY29sb3I6IGV1aUNhcmRTZWxlY3RhYmxlQ29sb3IoY29sb3IsIGlzU2VsZWN0ZWQpLFxuICAgIHNpemU6IFwibVwiLFxuICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQgfHwgZGlzYWJsZWQsXG4gICAgaWNvblR5cGU6IGlzU2VsZWN0ZWQgPyAnY2hlY2snIDogdW5kZWZpbmVkLFxuICAgIHJvbGU6IFwic3dpdGNoXCIsXG4gICAgXCJhcmlhLWNoZWNrZWRcIjogaXNTZWxlY3RlZCxcbiAgICBmdWxsV2lkdGg6IHRydWVcbiAgfSwgcmVzdCksIGNoaWxkKTtcbn07XG5FdWlDYXJkU2VsZWN0LnByb3BUeXBlcyA9IHtcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogTWFrZSBidXR0b24gYSBzb2xpZCBjb2xvciBmb3IgcHJvbWluZW5jZVxuICAgICAqL1xuICAvKipcbiAgICAgKiBNYWtlIGJ1dHRvbiBhIHNvbGlkIGNvbG9yIGZvciBwcm9taW5lbmNlXG4gICAgICovXG4gIGZpbGw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBBbnkgb2YgdGhlIG5hbWVkIGNvbG9yIHBhbGV0dGUgb3B0aW9ucy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFVzZSBzaXplIGBzYCBpbiBjb25maW5lZCBzcGFjZXNcbiAgICAgKi9cbiAgLyoqXG4gICAgICogVXNlIHNpemUgYHNgIGluIGNvbmZpbmVkIHNwYWNlc1xuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImFcIiwgXCJidXR0b25cIiwgXCJzcGFuXCJdKSxcbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogRXh0ZW5kcyB0aGUgYnV0dG9uIHRvIDEwMCUgd2lkdGhcbiAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWluaW11bSB3aWR0aFxuICAgICAqL1xuICBtaW5XaWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICovXG4gIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgc3R5bGU6IFByb3BUeXBlcy5hbnksXG4gIHR5cGU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFt1bmRlZmluZWRdKV0pLFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQvY2hpbGRyZW4gb25seSAobm90IGljb24pXG4gICAgICpcbiAgICAgKiBUaGlzIHNwYW4gd3JhcHBlciBjYW4gYmUgcmVtb3ZlZCBieSBwYXNzaW5nIGB0ZXh0UHJvcHM9e2ZhbHNlfWAuXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5hbnlcbn07XG5mdW5jdGlvbiBldWlDYXJkU2VsZWN0YWJsZVRleHQoaXNTZWxlY3RlZCwgaXNEaXNhYmxlZCwgY2hpbGRyZW4pIHtcbiAgaWYgKGNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG4gIHZhciB0ZXh0O1xuICBpZiAoaXNTZWxlY3RlZCkge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aUNhcmRTZWxlY3Quc2VsZWN0ZWRcIixcbiAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0ZWRcIlxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlDYXJkU2VsZWN0LnVuYXZhaWxhYmxlXCIsXG4gICAgICBkZWZhdWx0OiBcIlVuYXZhaWxhYmxlXCJcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlDYXJkU2VsZWN0LnNlbGVjdFwiLFxuICAgICAgZGVmYXVsdDogXCJTZWxlY3RcIlxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0ZXh0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV1aUNhcmRTZWxlY3RhYmxlQ29sb3IoY29sb3IsIGlzU2VsZWN0ZWQpIHtcbiAgdmFyIGNhbGN1bGF0ZWRDb2xvcjtcbiAgaWYgKGNvbG9yKSB7XG4gICAgY2FsY3VsYXRlZENvbG9yID0gY29sb3I7XG4gIH0gZWxzZSBpZiAoaXNTZWxlY3RlZCkge1xuICAgIGNhbGN1bGF0ZWRDb2xvciA9ICdzdWNjZXNzJztcbiAgfSBlbHNlIHtcbiAgICBjYWxjdWxhdGVkQ29sb3IgPSAndGV4dCc7XG4gIH1cbiAgcmV0dXJuIGNhbGN1bGF0ZWRDb2xvcjtcbn0iLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiYW9nbDQtZXVpQ2FyZFNlbGVjdFwiLFxuICBzdHlsZXM6IFwidHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50O2FsaWduLXNlbGY6ZmxleC1lbmQ7bGFiZWw6ZXVpQ2FyZFNlbGVjdDtcIlxufSA6IHtcbiAgbmFtZTogXCJhb2dsNC1ldWlDYXJkU2VsZWN0XCIsXG4gIHN0eWxlczogXCJ0cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7YWxpZ24tc2VsZjpmbGV4LWVuZDtsYWJlbDpldWlDYXJkU2VsZWN0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUNhcmRTZWxlY3RTdHlsZXMgPSBmdW5jdGlvbiBldWlDYXJkU2VsZWN0U3R5bGVzKCkge1xuICByZXR1cm4ge1xuICAgIGV1aUNhcmRTZWxlY3Q6IF9yZWZcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aVBhZGRpbmdTaXplLCBldWlTdXBwb3J0c0hhcywgbG9naWNhbENTUywgbG9naWNhbHMsIGxvZ2ljYWxUZXh0QWxpZ25DU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlCdXR0b25Db2xvciB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbnZhciBwYWRkaW5nS2V5ID0gJ20nO1xudmFyIGhhbGZQYWRkaW5nS2V5ID0gJ3MnO1xuXG4vKipcbiAqIDEuIEZvb3RlciBpcyBhbHdheXMgYXQgdGhlIGJvdHRvbS5cbiAqIDMuIEhvcml6b250YWwgbGF5b3V0cyBzaG91bGQgYWx3YXlzIHRvcCBsZWZ0IGFsaWduIG5vIG1hdHRlciB0aGUgdGV4dEFsaWduIHByb3BcbiAqIDQuIEVuc3VyZXMgdGhlIGNvbnRlbnRzIGFsd2F5cyBzdHJldGNoIG5vIG1hdHRlciB0aGUgZmxleCBsYXlvdXRcbiAqL1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInJleW11bi1kaXNhYmxlZFwiLFxuICBzdHlsZXM6IFwiZmlsdGVyOmdyYXlzY2FsZSgxMDAlKTtsYWJlbDpkaXNhYmxlZDtcIlxufSA6IHtcbiAgbmFtZTogXCJyZXltdW4tZGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImZpbHRlcjpncmF5c2NhbGUoMTAwJSk7bGFiZWw6ZGlzYWJsZWQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJjcjN3ejctZXVpQ2FyZF9fY29udGVudFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6ZXVpQ2FyZF9fY29udGVudDtcIlxufSA6IHtcbiAgbmFtZTogXCJjcjN3ejctZXVpQ2FyZF9fY29udGVudFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6ZXVpQ2FyZF9fY29udGVudDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY0ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFrdzB5eG4taG9yaXpvbnRhbFwiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bGFiZWw6aG9yaXpvbnRhbDtcIlxufSA6IHtcbiAgbmFtZTogXCIxa3cweXhuLWhvcml6b250YWxcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2xhYmVsOmhvcml6b250YWw7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJvbW5rMmwtdmVydGljYWxcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsYWJlbDp2ZXJ0aWNhbDtcIlxufSA6IHtcbiAgbmFtZTogXCJvbW5rMmwtdmVydGljYWxcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsYWJlbDp2ZXJ0aWNhbDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY2ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFseXZkcGYtZXVpQ2FyZF9fbWFpblwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2lubGluZS1zaXplOjEwMCU7ZmxleC1ncm93OjE7bGFiZWw6ZXVpQ2FyZF9fbWFpbjtcIlxufSA6IHtcbiAgbmFtZTogXCIxbHl2ZHBmLWV1aUNhcmRfX21haW5cIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6ZmxleDtpbmxpbmUtc2l6ZToxMDAlO2ZsZXgtZ3JvdzoxO2xhYmVsOmV1aUNhcmRfX21haW47XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpQ2FyZFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNhcmRTdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBwYWRkaW5nU2l6ZSkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBwYWRkaW5nQW1vdW50ID0gZXVpUGFkZGluZ1NpemUoZXVpVGhlbWVDb250ZXh0LCBwYWRkaW5nU2l6ZSk7XG4gIHZhciBzcGFjaW5nID0gZXVpUGFkZGluZ1NpemUoZXVpVGhlbWVDb250ZXh0LCBwYWRkaW5nS2V5KTtcbiAgdmFyIGhhbGZTcGFjaW5nID0gZXVpUGFkZGluZ1NpemUoZXVpVGhlbWVDb250ZXh0LCBoYWxmUGFkZGluZ0tleSk7XG4gIHJldHVybiB7XG4gICAgY2FyZDoge1xuICAgICAgZXVpQ2FyZDogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsmOmhhcyhcXG4gICAgICAgICAgICBbY2xhc3MqPSdldWlDYXJkX190ZXh0J11bY2xhc3MqPSctaW50ZXJhY3RpdmUnXTpmb2N1czpmb2N1cy12aXNpYmxlXFxuICAgICAgICAgICl7b3V0bGluZTpcIiwgZXVpVGhlbWUuZm9jdXMud2lkdGgsIFwiIHNvbGlkIGN1cnJlbnRDb2xvcjt9O2xhYmVsOmV1aUNhcmQ7XCIpLFxuICAgICAgYWxpZ25lZDoge1xuICAgICAgICBjZW50ZXI6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiIGFsaWduLWl0ZW1zOmNlbnRlcjs7bGFiZWw6Y2VudGVyO1wiKSxcbiAgICAgICAgbGVmdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiIGFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7O2xhYmVsOmxlZnQ7XCIpLFxuICAgICAgICByaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdyaWdodCcpLCBcIiBhbGlnbi1pdGVtczpmbGV4LWVuZDs7bGFiZWw6cmlnaHQ7XCIpXG4gICAgICB9LFxuICAgICAgZGlzYWJsZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpQnV0dG9uQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAnZGlzYWJsZWQnKSwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZFRleHQsIFwiOztsYWJlbDpkaXNhYmxlZDtcIilcbiAgICB9LFxuICAgIG1haW46IHtcbiAgICAgIGV1aUNhcmRfX21haW46IF9yZWY2LFxuICAgICAgbGF5b3V0OiB7XG4gICAgICAgIHZlcnRpY2FsOiBfcmVmNSxcbiAgICAgICAgaG9yaXpvbnRhbDogX3JlZjRcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgIGV1aUNhcmRfX2NvbnRlbnQ6IF9yZWYzLFxuICAgICAgbGF5b3V0OiB7XG4gICAgICAgIHZlcnRpY2FsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOnZlcnRpY2FsO1wiKSxcbiAgICAgICAgaG9yaXpvbnRhbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICdhdXRvJyksIFwiOztsYWJlbDpob3Jpem9udGFsO1wiKVxuICAgICAgfVxuICAgIH0sXG4gICAgZXVpQ2FyZF9fY2hpbGRyZW46IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhhbGZTcGFjaW5nKSwgXCI7O2xhYmVsOmV1aUNhcmRfX2NoaWxkcmVuO1wiKSxcbiAgICBldWlDYXJkX19kZXNjcmlwdGlvbjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGFsZlNwYWNpbmcpLCBcIjs7bGFiZWw6ZXVpQ2FyZF9fZGVzY3JpcHRpb247XCIpLFxuICAgIGV1aUNhcmRfX2Zvb3RlcjogLyojX19QVVJFX18qL2NzcyhcImZsZXgtZ3JvdzowO1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBzcGFjaW5nKSwgXCI7O2xhYmVsOmV1aUNhcmRfX2Zvb3RlcjtcIiksXG4gICAgdG9wOiB7XG4gICAgICBldWlDYXJkX190b3A6IC8qI19fUFVSRV9fKi9jc3MoXCJmbGV4LWdyb3c6MDtmb250LXNpemU6MDtwb3NpdGlvbjpyZWxhdGl2ZTtcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIHNwYWNpbmcpLCBcIjs7bGFiZWw6ZXVpQ2FyZF9fdG9wO1wiKSxcbiAgICAgIGxheW91dDoge1xuICAgICAgICB2ZXJ0aWNhbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDp2ZXJ0aWNhbDtcIiksXG4gICAgICAgIGhvcml6b250YWw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnYXV0bycpLCBcIjs7bGFiZWw6aG9yaXpvbnRhbDtcIilcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlZDogX3JlZjJcbiAgICB9LFxuICAgIGltYWdlOiB7XG4gICAgICBldWlDYXJkX19pbWFnZTogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtcIiwgbG9naWNhbENTUygnd2lkdGgnLCBcImNhbGMoMTAwJSArIChcIi5jb25jYXQocGFkZGluZ0Ftb3VudCwgXCIgKiAyKSlcIikpLCBcIiBcIiwgbG9naWNhbENTUygnbGVmdCcsIFwiLVwiLmNvbmNhdChwYWRkaW5nQW1vdW50KSksIFwiIFwiLCBsb2dpY2FsQ1NTKCd0b3AnLCBcIi1cIi5jb25jYXQocGFkZGluZ0Ftb3VudCkpLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgXCItXCIuY29uY2F0KHBhZGRpbmdBbW91bnQpKSwgbG9naWNhbENTUygnYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cycsIFwiY2FsYyhcIi5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIFwiIC0gXCIpLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIpXCIpKSwgXCIgXCIsIGxvZ2ljYWxzWydib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyddLCBcIjpjYWxjKFwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSwgXCIgLSBcIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiKTtpbWd7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7fTtsYWJlbDpldWlDYXJkX19pbWFnZTtcIiksXG4gICAgICB0cmFuc3BhcmVudDogLyojX19QVVJFX18qL2NzcyhcImJvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBcIjs7bGFiZWw6dHJhbnNwYXJlbnQ7XCIpXG4gICAgfSxcbiAgICBpY29uOiB7XG4gICAgICBldWlDYXJkX19pY29uOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmV1aUNhcmRfX2ljb247XCIpLFxuICAgICAgd2l0aEltYWdlOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxDU1MoJ3RvcCcsICc1MCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCAnNTAlJyksIFwidHJhbnNmb3JtOnRyYW5zbGF0ZShcXG4gICAgICAgICAgLTUwJSxcXG4gICAgICAgICAgY2FsYygtNTAlICsgLVwiLCBwYWRkaW5nQW1vdW50LCBcIilcXG4gICAgICAgICkhaW1wb3J0YW50OztsYWJlbDp3aXRoSW1hZ2U7XCIpLFxuICAgICAgbGF5b3V0OiB7XG4gICAgICAgIHZlcnRpY2FsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoYWxmU3BhY2luZyksIFwiOztsYWJlbDp2ZXJ0aWNhbDtcIiksXG4gICAgICAgIGhvcml6b250YWw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLXJpZ2h0Jywgc3BhY2luZyksIFwiOztsYWJlbDpob3Jpem9udGFsO1wiKVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJyOGFnemctZXVpQ2FyZF9fdGV4dFwiLFxuICBzdHlsZXM6IFwiZm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOmluaGVyaXQ7bGFiZWw6ZXVpQ2FyZF9fdGV4dDtcIlxufSA6IHtcbiAgbmFtZTogXCJyOGFnemctZXVpQ2FyZF9fdGV4dFwiLFxuICBzdHlsZXM6IFwiZm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOmluaGVyaXQ7bGFiZWw6ZXVpQ2FyZF9fdGV4dDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlDYXJkVGV4dFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNhcmRUZXh0U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpQ2FyZF9fdGV4dDogX3JlZixcbiAgICBpbnRlcmFjdGl2ZTogLyojX19QVVJFX18qL2NzcyhcIm91dGxpbmUtb2Zmc2V0OlwiLCBldWlUaGVtZS5zaXplLnh4cywgXCI7LmV1aUNhcmQ6aG92ZXIgJiwuZXVpQ2FyZDpmb2N1cyAmLCY6aG92ZXIsJjpmb2N1c3t0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO31cIiwgZXVpU3VwcG9ydHNIYXMsIFwie291dGxpbmU6bm9uZSFpbXBvcnRhbnQ7fTtsYWJlbDppbnRlcmFjdGl2ZTtcIiksXG4gICAgYWxpZ25lZDoge1xuICAgICAgY2VudGVyOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIjs7bGFiZWw6Y2VudGVyO1wiKSxcbiAgICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIjs7bGFiZWw6bGVmdDtcIiksXG4gICAgICByaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdyaWdodCcpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpXG4gICAgfSxcbiAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0LCBcIjs7bGFiZWw6ZGlzYWJsZWQ7XCIpXG4gIH07XG59O1xuZXhwb3J0IHZhciBldWlDYXJkQmV0YUJhZGdlU3R5bGVzID0gZnVuY3Rpb24gZXVpQ2FyZEJldGFCYWRnZVN0eWxlcyhldWlUaGVtZUNvbnRleHQsIHBhZGRpbmdTaXplKSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIHBhZGRpbmcgPSBldWlQYWRkaW5nU2l6ZShldWlUaGVtZUNvbnRleHQsIHBhZGRpbmdTaXplKTtcbiAgcmV0dXJuIHtcbiAgICBoYXNCZXRhQmFkZ2U6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzp2aXNpYmxlO1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLXRvcCcsIFwiY2FsYyhcIi5jb25jYXQocGFkZGluZywgXCIgKyBcIikuY29uY2F0KGV1aVRoZW1lLnNpemUucywgXCIpXCIpKSwgXCI7O2xhYmVsOmhhc0JldGFCYWRnZTtcIiksXG4gICAgZXVpQ2FyZF9fYmV0YUJhZGdlQW5jaG9yOiAvKiNfX1BVUkVfXyovY3NzKFwibGluZS1oZWlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygndG9wJywgJzAnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCAnNTAlJyksIFwiIHRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSk7ei1pbmRleDozO1wiLCBsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCAnbWluKDMwJSwgMTEycHgpJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCBcImNhbGMoMTAwJSAtIChcIi5jb25jYXQocGFkZGluZywgXCIgKiAyKSlcIikpLCBcIjs7bGFiZWw6ZXVpQ2FyZF9fYmV0YUJhZGdlQW5jaG9yO1wiKSxcbiAgICBldWlDYXJkX19iZXRhQmFkZ2U6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZXVpQ2FyZF9fYmV0YUJhZGdlO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImlkXCIsIFwiY2hlY2tlZFwiLCBcImxhYmVsXCIsIFwib25DaGFuZ2VcIiwgXCJ0eXBlXCIsIFwiZGlzYWJsZWRcIiwgXCJyZWFkT25seVwiLCBcImluZGV0ZXJtaW5hdGVcIiwgXCJpbnB1dFJlZlwiLCBcImxhYmVsUHJvcHNcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlQ29tYmluZWRSZWZzLCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IGV1aUNoZWNrYm94U3R5bGVzIH0gZnJvbSAnLi9jaGVja2JveC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ2hlY2tib3ggPSBmdW5jdGlvbiBFdWlDaGVja2JveChfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBpZCA9IF9yZWYuaWQsXG4gICAgX3JlZiRjaGVja2VkID0gX3JlZi5jaGVja2VkLFxuICAgIGNoZWNrZWQgPSBfcmVmJGNoZWNrZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRjaGVja2VkLFxuICAgIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICBvbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXG4gICAgdHlwZSA9IF9yZWYudHlwZSxcbiAgICBfcmVmJGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBkaXNhYmxlZCA9IF9yZWYkZGlzYWJsZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRkaXNhYmxlZCxcbiAgICBfcmVmJHJlYWRPbmx5ID0gX3JlZi5yZWFkT25seSxcbiAgICByZWFkT25seSA9IF9yZWYkcmVhZE9ubHkgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRyZWFkT25seSxcbiAgICBfcmVmJGluZGV0ZXJtaW5hdGUgPSBfcmVmLmluZGV0ZXJtaW5hdGUsXG4gICAgaW5kZXRlcm1pbmF0ZSA9IF9yZWYkaW5kZXRlcm1pbmF0ZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGluZGV0ZXJtaW5hdGUsXG4gICAgaW5wdXRSZWYgPSBfcmVmLmlucHV0UmVmLFxuICAgIGxhYmVsUHJvcHMgPSBfcmVmLmxhYmVsUHJvcHMsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNoZWNrYm94JywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUNoZWNrYm94U3R5bGVzKTtcbiAgdmFyIGlucHV0U3R5bGVzID0gW3N0eWxlcy5pbnB1dC5ldWlDaGVja2JveF9fc3F1YXJlLCAhIWxhYmVsICYmIHN0eWxlcy5pbnB1dC5oYXNMYWJlbCwgZGlzYWJsZWQgPyBjaGVja2VkIHx8IGluZGV0ZXJtaW5hdGUgPyBzdHlsZXMuaW5wdXQuZGlzYWJsZWQuc2VsZWN0ZWQgOiBzdHlsZXMuaW5wdXQuZGlzYWJsZWQudW5zZWxlY3RlZCA6IGNoZWNrZWQgfHwgaW5kZXRlcm1pbmF0ZSA/IHN0eWxlcy5pbnB1dC5lbmFibGVkLnNlbGVjdGVkIDogc3R5bGVzLmlucHV0LmVuYWJsZWQudW5zZWxlY3RlZCwgcmVhZE9ubHkgJiYgc3R5bGVzLmlucHV0LnJlYWRPbmx5XTtcbiAgdmFyIGxhYmVsQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNoZWNrYm94X19sYWJlbCcsIGxhYmVsUHJvcHMgPT09IG51bGwgfHwgbGFiZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFiZWxQcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgbGFiZWxTdHlsZXMgPSBbc3R5bGVzLmxhYmVsLmV1aUNoZWNrYm94X19sYWJlbCwgZGlzYWJsZWQgPyBzdHlsZXMubGFiZWwuZGlzYWJsZWQgOiBzdHlsZXMubGFiZWwuZW5hYmxlZCwgcmVhZE9ubHkgJiYgc3R5bGVzLmxhYmVsLnJlYWRPbmx5LCBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuY3NzXTtcbiAgdmFyIGljb25TdHlsZXMgPSBbc3R5bGVzLmlucHV0Lmljb24uZXVpQ2hlY2tib3hfX2ljb24sIGluZGV0ZXJtaW5hdGUgPyBzdHlsZXMuaW5wdXQuaWNvbi5pbmRldGVybWluYXRlIDogc3R5bGVzLmlucHV0Lmljb24uY2hlY2tdO1xuXG4gIC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0L2NoZWNrYm94I2luZGV0ZXJtaW5hdGVfc3RhdGVfY2hlY2tib3hlc1xuICB2YXIgc2V0SW5kZXRlcm1pbmF0ZVN0YXRlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgaWYgKGlucHV0KSBpbnB1dC5pbmRldGVybWluYXRlID0gaW5kZXRlcm1pbmF0ZTtcbiAgfSwgW2luZGV0ZXJtaW5hdGVdKTtcbiAgdmFyIHJlZnMgPSB1c2VDb21iaW5lZFJlZnMoW2lucHV0UmVmLCBzZXRJbmRldGVybWluYXRlU3RhdGVdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNzczogc3R5bGVzLmV1aUNoZWNrYm94LFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjc3M6IGlucHV0U3R5bGVzLFxuICAgIGNsYXNzTmFtZTogXCJldWlDaGVja2JveF9fc3F1YXJlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgY3NzOiBpY29uU3R5bGVzLFxuICAgIHR5cGU6IGluZGV0ZXJtaW5hdGUgPyAnc3RvcEZpbGxlZCcgOiBjaGVja2VkID8gJ2NoZWNrJyA6ICdlbXB0eSdcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJpbnB1dFwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBzdHlsZXMuaW5wdXQuZXVpQ2hlY2tib3hfX2lucHV0LFxuICAgIGNsYXNzTmFtZTogXCJldWlDaGVja2JveF9faW5wdXRcIixcbiAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgaWQ6IGlkLFxuICAgIGNoZWNrZWQ6IGNoZWNrZWQsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICByZWFkT25seTogcmVhZE9ubHksXG4gICAgcmVmOiByZWZzXG4gIH0sIHJlc3QpKSksIGxhYmVsICYmIF9fX0Vtb3Rpb25KU1goXCJsYWJlbFwiLCBfZXh0ZW5kcyh7fSwgbGFiZWxQcm9wcywge1xuICAgIGNzczogbGFiZWxTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBsYWJlbENsYXNzZXMsXG4gICAgaHRtbEZvcjogaWRcbiAgfSksIGxhYmVsKSk7XG59O1xuRXVpQ2hlY2tib3gucHJvcFR5cGVzID0ge1xuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjaGVja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgLy8gb3ZlcnJpZGluZyB0byBtYWtlIGl0IHJlcXVpcmVkXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGluZGV0ZXJtaW5hdGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8bGFiZWwvPlxuICAgICAqL1xuICBsYWJlbFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9ybUN1c3RvbUNvbnRyb2xTdHlsZXMsIGV1aUZvcm1DdXN0b21Db250cm9sVmFyaWFibGVzIH0gZnJvbSAnLi4vZm9ybS5zdHlsZXMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMW04b2I5Yi1yZWFkT25seVwiLFxuICBzdHlsZXM6IFwiY3Vyc29yOmRlZmF1bHQ7bGFiZWw6cmVhZE9ubHk7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMW04b2I5Yi1yZWFkT25seVwiLFxuICBzdHlsZXM6IFwiY3Vyc29yOmRlZmF1bHQ7bGFiZWw6cmVhZE9ubHk7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJ1NTRnbHYtaW5kZXRlcm1pbmF0ZVwiLFxuICBzdHlsZXM6IFwidHJhbnNmb3JtOnNjYWxlKDAuNSk7bGFiZWw6aW5kZXRlcm1pbmF0ZTtcIlxufSA6IHtcbiAgbmFtZTogXCJ1NTRnbHYtaW5kZXRlcm1pbmF0ZVwiLFxuICBzdHlsZXM6IFwidHJhbnNmb3JtOnNjYWxlKDAuNSk7bGFiZWw6aW5kZXRlcm1pbmF0ZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlDaGVja2JveFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNoZWNrYm94U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBjb250cm9sU3R5bGVzID0gZXVpRm9ybUN1c3RvbUNvbnRyb2xTdHlsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIF9ldWlGb3JtQ3VzdG9tQ29udHJvbCA9IGV1aUZvcm1DdXN0b21Db250cm9sVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgdW5zZWxlY3RlZEJvcmRlciA9IF9ldWlGb3JtQ3VzdG9tQ29udHJvbC5jb2xvcnMudW5zZWxlY3RlZEJvcmRlcjtcbiAgcmV0dXJuIHtcbiAgICBldWlDaGVja2JveDogLyojX19QVVJFX18qL2Nzcyhjb250cm9sU3R5bGVzLndyYXBwZXIsIFwiO2xhYmVsOmV1aUNoZWNrYm94O1wiKSxcbiAgICBpbnB1dDoge1xuICAgICAgZXVpQ2hlY2tib3hfX3NxdWFyZTogLyojX19QVVJFX18qL2Nzcyhjb250cm9sU3R5bGVzLmlucHV0LmZhdXhJbnB1dCwgXCIgYm9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCwgXCI7O2xhYmVsOmV1aUNoZWNrYm94X19zcXVhcmU7XCIpLFxuICAgICAgaGFzTGFiZWw6IGNvbnRyb2xTdHlsZXMuaW5wdXQuaGFzTGFiZWwsXG4gICAgICAvLyBTa2lwIGNzc2BgIGNsYXNzTmFtZSBnZW5lcmF0aW9uXG4gICAgICBlbmFibGVkOiB7XG4gICAgICAgIHNlbGVjdGVkOiAvKiNfX1BVUkVfXyovY3NzKGNvbnRyb2xTdHlsZXMuaW5wdXQuZW5hYmxlZC5zZWxlY3RlZCwgXCI7bGFiZWw6c2VsZWN0ZWQ7XCIpLFxuICAgICAgICB1bnNlbGVjdGVkOiAvKiNfX1BVUkVfXyovY3NzKGNvbnRyb2xTdHlsZXMuaW5wdXQuZW5hYmxlZC51bnNlbGVjdGVkLCBcIjtsYWJlbDp1bnNlbGVjdGVkO1wiKVxuICAgICAgfSxcbiAgICAgIGRpc2FibGVkOiB7XG4gICAgICAgIHNlbGVjdGVkOiAvKiNfX1BVUkVfXyovY3NzKGNvbnRyb2xTdHlsZXMuaW5wdXQuZGlzYWJsZWQuc2VsZWN0ZWQsIFwiO2xhYmVsOnNlbGVjdGVkO1wiKSxcbiAgICAgICAgdW5zZWxlY3RlZDogLyojX19QVVJFX18qL2Nzcyhjb250cm9sU3R5bGVzLmlucHV0LmRpc2FibGVkLnVuc2VsZWN0ZWQsIFwiO2xhYmVsOnVuc2VsZWN0ZWQ7XCIpXG4gICAgICB9LFxuICAgICAgLy8gUmVhZG9ubHkgY2hlY2tib3hlcyBhcmUgdXNlZCBieSBFdWlNYXJrZG93bkVkaXRvclxuICAgICAgLy8gTWFpbnRhaW4gdGhlIGluaXRpYWwgY29sb3IgdG8gZW5mb3JjZSB0aGF0IGNsaWNrcyBhcmUgbm90IGRvaW5nIGFueXRoaW5nXG4gICAgICByZWFkT25seTogLyojX19QVVJFX18qL2NzcyhcIiY6aGFzKGlucHV0OmZvY3VzLXZpc2libGUpe291dGxpbmU6XCIsIGV1aVRoZW1lLmZvY3VzLndpZHRoLCBcIiBzb2xpZCBcIiwgdW5zZWxlY3RlZEJvcmRlciwgXCI7fSY6aGFzKGlucHV0OmZvY3VzKXtib3JkZXItY29sb3I6XCIsIHVuc2VsZWN0ZWRCb3JkZXIsIFwiO307bGFiZWw6cmVhZE9ubHk7XCIpLFxuICAgICAgaWNvbjoge1xuICAgICAgICBldWlDaGVja2JveF9faWNvbjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlDaGVja2JveF9faWNvbjtcIiksXG4gICAgICAgIGNoZWNrOiAvKiNfX1BVUkVfXyovY3NzKGNvbnRyb2xTdHlsZXMuaW5wdXQuaWNvbiwgXCIgc3Ryb2tlOmN1cnJlbnRDb2xvcjs7bGFiZWw6Y2hlY2s7XCIpLFxuICAgICAgICBpbmRldGVybWluYXRlOiBfcmVmMlxuICAgICAgfSxcbiAgICAgIGV1aUNoZWNrYm94X19pbnB1dDogLyojX19QVVJFX18qL2Nzcyhjb250cm9sU3R5bGVzLmlucHV0LmhpZGRlbklucHV0LCBcIiAmW3JlYWRvbmx5XXtjdXJzb3I6ZGVmYXVsdDt9O2xhYmVsOmV1aUNoZWNrYm94X19pbnB1dDtcIilcbiAgICB9LFxuICAgIGxhYmVsOiB7XG4gICAgICBldWlDaGVja2JveF9fbGFiZWw6IC8qI19fUFVSRV9fKi9jc3MoY29udHJvbFN0eWxlcy5sYWJlbC5sYWJlbCwgXCI7bGFiZWw6ZXVpQ2hlY2tib3hfX2xhYmVsO1wiKSxcbiAgICAgIGVuYWJsZWQ6IGNvbnRyb2xTdHlsZXMubGFiZWwuZW5hYmxlZCxcbiAgICAgIGRpc2FibGVkOiAvKiNfX1BVUkVfXyovY3NzKGNvbnRyb2xTdHlsZXMubGFiZWwuZGlzYWJsZWQsIFwiO2xhYmVsOmRpc2FibGVkO1wiKSxcbiAgICAgIHJlYWRPbmx5OiBfcmVmXG4gICAgfVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImZvbnRXZWlnaHRcIl07XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSwgZXVpVGV4dEJyZWFrV29yZCB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVRpdGxlIH0gZnJvbSAnLi4vLi4vdGl0bGUvdGl0bGUuc3R5bGVzJztcbmV4cG9ydCB2YXIgZXVpRm9ybUxhYmVsID0gZnVuY3Rpb24gZXVpRm9ybUxhYmVsKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIC8vIEV4Y2x1ZGUgdGhlIGZvbnRXZWlnaHQgZnJvbSB0aGUgdGl0bGUsIHNpbmNlIHdlJ3JlIHNldHRpbmcgb3VyIG93biBsYXRlclxuICB2YXIgX2V1aVRpdGxlID0gZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHh4cycpLFxuICAgIF8gPSBfZXVpVGl0bGUuZm9udFdlaWdodCxcbiAgICBfdGl0bGVTdHlsZXMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX2V1aVRpdGxlLCBfZXhjbHVkZWQpO1xuICAvLyBTaW5jZSB3ZSdyZSBub3QgcmV0dXJuaW5nIGEgY3NzYGAgc3RyaW5nICh0byBhdm9pZCBnZW5lcmF0aW5nIGFuIGV4dHJhIEVtb3Rpb25cbiAgLy8gY2xhc3NOYW1lKSwgd2UgbmVlZCB0byBtYW51YWxseSBzZXJpYWxpemUgdGhlIHN0eWxlIG9iamVjdCBpbnRvIGEgc3RyaW5nXG4gIHZhciB0aXRsZVN0eWxlcyA9IHNlcmlhbGl6ZVN0eWxlcyhbX3RpdGxlU3R5bGVzXSkuc3R5bGVzO1xuICByZXR1cm4gXCJcXG4gICAgXCIuY29uY2F0KHRpdGxlU3R5bGVzLCBcIlxcbiAgICBmb250LXdlaWdodDogXCIpLmNvbmNhdChldWlUaGVtZS5mb250LndlaWdodC5zZW1pQm9sZCwgXCI7XFxuICAgIFwiKS5jb25jYXQoZXVpVGV4dEJyZWFrV29yZCgpLCBcIlxcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUxhYmVsU3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUxhYmVsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpRm9ybUxhYmVsOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvcm1MYWJlbChldWlUaGVtZUNvbnRleHQpLCBcIiBkaXNwbGF5OmlubGluZS1ibG9jaztcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpjb2xvciBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCI7fTtsYWJlbDpldWlGb3JtTGFiZWw7XCIpLFxuICAgIC8vIFNraXAgY3NzYGAgdG8gYXZvaWQgZ2VuZXJhdGluZyBhbiBleHRyYSBFbW90aW9uIGNsYXNzTmFtZVxuICAgIC8vIFVzZSA6d2hlcmUgdG8gcmVkdWNlIHNwZWNpZmljaXR5ICYgbWFrZSB0aGUgQ1NTIGVhc2llciB0byBvdmVycmlkZSBieSBwcmVwZW5kL2FwcGVuZCBub2Rlc1xuICAgIG5vdERpc2FibGVkOiBcIlxcbiAgICAgICY6d2hlcmUoW2Zvcl0pIHtcXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICB9XFxuICAgIFwiLFxuICAgIGludmFsaWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhbmdlciwgXCI7O2xhYmVsOmludmFsaWQ7XCIpLFxuICAgIC8vIEZvY3VzZWQgc3RhdGUgc2hvdWxkIG92ZXJyaWRlIGludmFsaWQgc3RhdGVcbiAgICBmb2N1c2VkOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCBcIjs7bGFiZWw6Zm9jdXNlZDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJndXR0ZXJTaXplXCIsIFwiYWxpZ25JdGVtc1wiLCBcInJlc3BvbnNpdmVcIiwgXCJqdXN0aWZ5Q29udGVudFwiLCBcImRpcmVjdGlvblwiLCBcIndyYXBcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUZsZXhHcm91cFN0eWxlcyB9IGZyb20gJy4vZmxleF9ncm91cC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgR1VUVEVSX1NJWkVTID0gWydub25lJywgJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJ107XG5leHBvcnQgdmFyIEFMSUdOX0lURU1TID0gWydzdHJldGNoJywgJ2ZsZXhTdGFydCcsICdmbGV4RW5kJywgJ2NlbnRlcicsICdiYXNlbGluZSddO1xuZXhwb3J0IHZhciBKVVNUSUZZX0NPTlRFTlRTID0gWydmbGV4U3RhcnQnLCAnZmxleEVuZCcsICdjZW50ZXInLCAnc3BhY2VCZXR3ZWVuJywgJ3NwYWNlQXJvdW5kJywgJ3NwYWNlRXZlbmx5J107XG5leHBvcnQgdmFyIERJUkVDVElPTlMgPSBbJ3JvdycsICdyb3dSZXZlcnNlJywgJ2NvbHVtbicsICdjb2x1bW5SZXZlcnNlJ107XG52YXIgRXVpRmxleEdyb3VwSW50ZXJuYWwgPSBmdW5jdGlvbiBFdWlGbGV4R3JvdXBJbnRlcm5hbChfcmVmLCByZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkY29tcG9uZW50ID0gX3JlZi5jb21wb25lbnQsXG4gICAgY29tcG9uZW50ID0gX3JlZiRjb21wb25lbnQgPT09IHZvaWQgMCA/ICdkaXYnIDogX3JlZiRjb21wb25lbnQsXG4gICAgX3JlZiRndXR0ZXJTaXplID0gX3JlZi5ndXR0ZXJTaXplLFxuICAgIGd1dHRlclNpemUgPSBfcmVmJGd1dHRlclNpemUgPT09IHZvaWQgMCA/ICdsJyA6IF9yZWYkZ3V0dGVyU2l6ZSxcbiAgICBfcmVmJGFsaWduSXRlbXMgPSBfcmVmLmFsaWduSXRlbXMsXG4gICAgYWxpZ25JdGVtcyA9IF9yZWYkYWxpZ25JdGVtcyA9PT0gdm9pZCAwID8gJ3N0cmV0Y2gnIDogX3JlZiRhbGlnbkl0ZW1zLFxuICAgIF9yZWYkcmVzcG9uc2l2ZSA9IF9yZWYucmVzcG9uc2l2ZSxcbiAgICByZXNwb25zaXZlID0gX3JlZiRyZXNwb25zaXZlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRyZXNwb25zaXZlLFxuICAgIF9yZWYkanVzdGlmeUNvbnRlbnQgPSBfcmVmLmp1c3RpZnlDb250ZW50LFxuICAgIGp1c3RpZnlDb250ZW50ID0gX3JlZiRqdXN0aWZ5Q29udGVudCA9PT0gdm9pZCAwID8gJ2ZsZXhTdGFydCcgOiBfcmVmJGp1c3RpZnlDb250ZW50LFxuICAgIF9yZWYkZGlyZWN0aW9uID0gX3JlZi5kaXJlY3Rpb24sXG4gICAgZGlyZWN0aW9uID0gX3JlZiRkaXJlY3Rpb24gPT09IHZvaWQgMCA/ICdyb3cnIDogX3JlZiRkaXJlY3Rpb24sXG4gICAgX3JlZiR3cmFwID0gX3JlZi53cmFwLFxuICAgIHdyYXAgPSBfcmVmJHdyYXAgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiR3cmFwLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUZsZXhHcm91cFN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUZsZXhHcm91cCwgcmVzcG9uc2l2ZSAmJiAhZGlyZWN0aW9uLmluY2x1ZGVzKCdjb2x1bW4nKSAmJiBzdHlsZXMucmVzcG9uc2l2ZSwgd3JhcCAmJiBzdHlsZXMud3JhcCwgc3R5bGVzLmd1dHRlclNpemVzW2d1dHRlclNpemVdLCBzdHlsZXMuanVzdGlmeUNvbnRlbnRbanVzdGlmeUNvbnRlbnRdLCBzdHlsZXMuYWxpZ25JdGVtc1thbGlnbkl0ZW1zXSwgc3R5bGVzLmRpcmVjdGlvbltkaXJlY3Rpb25dXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGbGV4R3JvdXAnLCBjbGFzc05hbWUpO1xuXG4gIC8vIENhc3QgYGNvbXBvbmVudGAgdG8gRnVuY3Rpb25Db21wb25lbnQgdG8gc2ltcGxpZnkgaXRzIHR5cGUuXG4gIC8vIE5vdGUgdGhhdCBGdW5jdGlvbkNvbXBvbmVudCB0eXBlIGlzIHVzZWQgaGVyZSBmb3IgcHVyZWx5IHR5cGluZ1xuICAvLyBjb252ZW5pZW5jZSBzaW5jZSB3ZSBzcGVjaWZ5IHRoZSByZXR1cm4gdHlwZSBhYm92ZSwgYW5kIGZ1bmN0aW9uXG4gIC8vIGNvbXBvbmVudHMgZG9uJ3Qgc3VwcG9ydCBgcmVmYHMsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyIGluIHRoaXMgY2FzZS5cbiAgdmFyIENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIHJlZjogcmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9KSk7XG59O1xuXG4vLyBDYXN0IGZvcndhcmRSZWYgcmV0dXJuIHR5cGUgdG8gd29yayB3aXRoIHRoZSBnZW5lcmljIFRDb21wb25lbnQgdHlwZVxuLy8gYW5kIG5vdCBmYWxsYmFjayB0byBpbXBsaWNpdCBhbnkgdHlwaW5nXG5leHBvcnQgdmFyIEV1aUZsZXhHcm91cCA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKEV1aUZsZXhHcm91cEludGVybmFsKTtcbkV1aUZsZXhHcm91cC5kaXNwbGF5TmFtZSA9ICdFdWlGbGV4R3JvdXAnOyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlNYXhCcmVha3BvaW50LCBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwibjRoZGtnLWNvbHVtblJldmVyc2VcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlO2xhYmVsOmNvbHVtblJldmVyc2U7XCJcbn0gOiB7XG4gIG5hbWU6IFwibjRoZGtnLWNvbHVtblJldmVyc2VcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlO2xhYmVsOmNvbHVtblJldmVyc2U7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJsbDhrbXEtY29sdW1uXCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpjb2x1bW47bGFiZWw6Y29sdW1uO1wiXG59IDoge1xuICBuYW1lOiBcImxsOGttcS1jb2x1bW5cIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsYWJlbDpjb2x1bW47XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxdm5pem8xLXJvd1JldmVyc2VcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2xhYmVsOnJvd1JldmVyc2U7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXZuaXpvMS1yb3dSZXZlcnNlXCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtsYWJlbDpyb3dSZXZlcnNlO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTVtdmptby1yb3dcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOnJvdztsYWJlbDpyb3c7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTVtdmptby1yb3dcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOnJvdztsYWJlbDpyb3c7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJucTVqOXUtYmFzZWxpbmVcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmJhc2VsaW5lO2xhYmVsOmJhc2VsaW5lO1wiXG59IDoge1xuICBuYW1lOiBcIm5xNWo5dS1iYXNlbGluZVwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6YmFzZWxpbmU7bGFiZWw6YmFzZWxpbmU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI4MzkxZGItY2VudGVyXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpjZW50ZXI7bGFiZWw6Y2VudGVyO1wiXG59IDoge1xuICBuYW1lOiBcIjgzOTFkYi1jZW50ZXJcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmNlbnRlcjtsYWJlbDpjZW50ZXI7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxNGo2ZXI0LWZsZXhFbmRcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmZsZXgtZW5kO2xhYmVsOmZsZXhFbmQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTRqNmVyNC1mbGV4RW5kXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpmbGV4LWVuZDtsYWJlbDpmbGV4RW5kO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjggPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMW1tdGp2Yi1mbGV4U3RhcnRcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bGFiZWw6ZmxleFN0YXJ0O1wiXG59IDoge1xuICBuYW1lOiBcIjFtbXRqdmItZmxleFN0YXJ0XCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2xhYmVsOmZsZXhTdGFydDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY5ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjF1d2M0b2otc3RyZXRjaFwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6c3RyZXRjaDtsYWJlbDpzdHJldGNoO1wiXG59IDoge1xuICBuYW1lOiBcIjF1d2M0b2otc3RyZXRjaFwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6c3RyZXRjaDtsYWJlbDpzdHJldGNoO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjEwID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFtMWJ5cS1jZW50ZXJcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpjZW50ZXI7bGFiZWw6Y2VudGVyO1wiXG59IDoge1xuICBuYW1lOiBcIjFtMWJ5cS1jZW50ZXJcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpjZW50ZXI7bGFiZWw6Y2VudGVyO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjExID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE2bGt1NTQtc3BhY2VBcm91bmRcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7bGFiZWw6c3BhY2VBcm91bmQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTZsa3U1NC1zcGFjZUFyb3VuZFwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZDtsYWJlbDpzcGFjZUFyb3VuZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYxMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxaDE2YmdyLXNwYWNlQmV0d2VlblwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGFiZWw6c3BhY2VCZXR3ZWVuO1wiXG59IDoge1xuICBuYW1lOiBcIjFoMTZiZ3Itc3BhY2VCZXR3ZWVuXCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsYWJlbDpzcGFjZUJldHdlZW47XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMTMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwianlrd3NpLXNwYWNlRXZlbmx5XCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtZXZlbmx5O2xhYmVsOnNwYWNlRXZlbmx5O1wiXG59IDoge1xuICBuYW1lOiBcImp5a3dzaS1zcGFjZUV2ZW5seVwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OnNwYWNlLWV2ZW5seTtsYWJlbDpzcGFjZUV2ZW5seTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYxNCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxbmZ1cXd3LWZsZXhFbmRcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpmbGV4LWVuZDtsYWJlbDpmbGV4RW5kO1wiXG59IDoge1xuICBuYW1lOiBcIjFuZnVxd3ctZmxleEVuZFwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2xhYmVsOmZsZXhFbmQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMTUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiZTltaWl2LWZsZXhTdGFydFwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bGFiZWw6ZmxleFN0YXJ0O1wiXG59IDoge1xuICBuYW1lOiBcImU5bWlpdi1mbGV4U3RhcnRcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2xhYmVsOmZsZXhTdGFydDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYxNiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJxZzV5Yzktd3JhcFwiLFxuICBzdHlsZXM6IFwiZmxleC13cmFwOndyYXA7bGFiZWw6d3JhcDtcIlxufSA6IHtcbiAgbmFtZTogXCJxZzV5Yzktd3JhcFwiLFxuICBzdHlsZXM6IFwiZmxleC13cmFwOndyYXA7bGFiZWw6d3JhcDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYxNyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI0cXV4bTQtZXVpRmxleEdyb3VwXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6c3RyZXRjaDtmbGV4LWdyb3c6MTtsYWJlbDpldWlGbGV4R3JvdXA7XCJcbn0gOiB7XG4gIG5hbWU6IFwiNHF1eG00LWV1aUZsZXhHcm91cFwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZmxleC1ncm93OjE7bGFiZWw6ZXVpRmxleEdyb3VwO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUZsZXhHcm91cFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZsZXhHcm91cFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUZsZXhHcm91cDogX3JlZjE3LFxuICAgIHJlc3BvbnNpdmU6IC8qI19fUFVSRV9fKi9jc3MoZXVpTWF4QnJlYWtwb2ludChldWlUaGVtZUNvbnRleHQsICdtJyksIFwie2ZsZXgtd3JhcDp3cmFwOyY+LmV1aUZsZXhJdGVte1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIGZsZXgtYmFzaXM6MTAwJTt9fTtsYWJlbDpyZXNwb25zaXZlO1wiKSxcbiAgICB3cmFwOiBfcmVmMTYsXG4gICAgZ3V0dGVyU2l6ZXM6IHtcbiAgICAgIG5vbmU6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6bm9uZTtcIiksXG4gICAgICB4czogLyojX19QVVJFX18qL2NzcyhcImdhcDpcIiwgZXVpVGhlbWUuc2l6ZS54cywgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7O2xhYmVsOnM7XCIpLFxuICAgICAgbTogLyojX19QVVJFX18qL2NzcyhcImdhcDpcIiwgZXVpVGhlbWUuc2l6ZS5iYXNlLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgICBsOiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLmwsIFwiOztsYWJlbDpsO1wiKSxcbiAgICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLnh4bCwgXCI7O2xhYmVsOnhsO1wiKVxuICAgIH0sXG4gICAganVzdGlmeUNvbnRlbnQ6IHtcbiAgICAgIGZsZXhTdGFydDogX3JlZjE1LFxuICAgICAgZmxleEVuZDogX3JlZjE0LFxuICAgICAgc3BhY2VFdmVubHk6IF9yZWYxMyxcbiAgICAgIHNwYWNlQmV0d2VlbjogX3JlZjEyLFxuICAgICAgc3BhY2VBcm91bmQ6IF9yZWYxMSxcbiAgICAgIGNlbnRlcjogX3JlZjEwXG4gICAgfSxcbiAgICBhbGlnbkl0ZW1zOiB7XG4gICAgICBzdHJldGNoOiBfcmVmOSxcbiAgICAgIGZsZXhTdGFydDogX3JlZjgsXG4gICAgICBmbGV4RW5kOiBfcmVmNyxcbiAgICAgIGNlbnRlcjogX3JlZjYsXG4gICAgICBiYXNlbGluZTogX3JlZjVcbiAgICB9LFxuICAgIGRpcmVjdGlvbjoge1xuICAgICAgcm93OiBfcmVmNCxcbiAgICAgIHJvd1JldmVyc2U6IF9yZWYzLFxuICAgICAgY29sdW1uOiBfcmVmMixcbiAgICAgIGNvbHVtblJldmVyc2U6IF9yZWZcbiAgICB9XG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJncm93XCIsIFwiY29tcG9uZW50XCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBldWlGbGV4SXRlbVN0eWxlcyBhcyBzdHlsZXMgfSBmcm9tICcuL2ZsZXhfaXRlbS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBWQUxJRF9HUk9XX1ZBTFVFUyA9IFtudWxsLCB1bmRlZmluZWQsIHRydWUsIGZhbHNlLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF07XG52YXIgRXVpRmxleEl0ZW1JbnRlcm5hbCA9IGZ1bmN0aW9uIEV1aUZsZXhJdGVtSW50ZXJuYWwoX3JlZiwgcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRncm93ID0gX3JlZi5ncm93LFxuICAgIGdyb3cgPSBfcmVmJGdyb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGdyb3csXG4gICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICBjb21wb25lbnQgPSBfcmVmJGNvbXBvbmVudCA9PT0gdm9pZCAwID8gJ2RpdicgOiBfcmVmJGNvbXBvbmVudCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKFZBTElEX0dST1dfVkFMVUVTLmluZGV4T2YoZ3JvdykgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9wIGBncm93YCBwYXNzZWQgdG8gYEV1aUZsZXhJdGVtYCBtdXN0IGJlIGEgYm9vbGVhbiBvciBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMTAsIHJlY2VpdmVkIGBcIi5jb25jYXQoZ3JvdywgXCJgXCIpKTtcbiAgICB9XG4gIH0sIFtncm93XSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUZsZXhJdGVtLCAhZ3JvdyA/IHN0eWxlcy5ncm93WmVybyA6IHN0eWxlcy5ncm93LCBncm93ICYmICh0eXBlb2YgZ3JvdyA9PT0gJ251bWJlcicgPyBzdHlsZXMuZ3Jvd1NpemVzW2dyb3ddIDogc3R5bGVzLmdyb3dTaXplc1snMSddKV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRmxleEl0ZW0nLCBjbGFzc05hbWUpO1xuXG4gIC8vIENhc3QgYGNvbXBvbmVudGAgdG8gRnVuY3Rpb25Db21wb25lbnQgdG8gc2ltcGxpZnkgaXRzIHR5cGUuXG4gIC8vIE5vdGUgdGhhdCBGdW5jdGlvbkNvbXBvbmVudCB0eXBlIGlzIHVzZWQgaGVyZSBmb3IgcHVyZWx5IHR5cGluZ1xuICAvLyBjb252ZW5pZW5jZSBzaW5jZSB3ZSBzcGVjaWZ5IHRoZSByZXR1cm4gdHlwZSBhYm92ZSwgYW5kIGZ1bmN0aW9uXG4gIC8vIGNvbXBvbmVudHMgZG9uJ3Qgc3VwcG9ydCBgcmVmYHMsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyIGluIHRoaXMgY2FzZS5cbiAgdmFyIENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIHJlZjogcmVmLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9KSwgY2hpbGRyZW4pO1xufTtcblxuLy8gQ2FzdCBmb3J3YXJkUmVmIHJldHVybiB0eXBlIHRvIHdvcmsgd2l0aCB0aGUgZ2VuZXJpYyBUQ29tcG9uZW50IHR5cGVcbi8vIGFuZCBub3QgZmFsbGJhY2sgdG8gaW1wbGljaXQgYW55IHR5cGluZ1xuZXhwb3J0IHZhciBFdWlGbGV4SXRlbSA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKEV1aUZsZXhJdGVtSW50ZXJuYWwpO1xuRXVpRmxleEl0ZW0uZGlzcGxheU5hbWUgPSAnRXVpRmxleEl0ZW0nOyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgdmFyIGV1aUZsZXhJdGVtU3R5bGVzID0ge1xuICAvLyAxLiBBbGxvdyBFdWlQYW5lbHMgdG8gZXhwYW5kIHRvIGZpbGwgdGhlIGl0ZW0uXG4gIGV1aUZsZXhJdGVtOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgbmFtZTogXCIxOWhmNDRuLWV1aUZsZXhJdGVtXCIsXG4gICAgc3R5bGVzOiBcImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bGFiZWw6ZXVpRmxleEl0ZW07XCJcbiAgfSA6IHtcbiAgICBuYW1lOiBcIjE5aGY0NG4tZXVpRmxleEl0ZW1cIixcbiAgICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsYWJlbDpldWlGbGV4SXRlbTtcIixcbiAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgfSxcbiAgZ3Jvd1plcm86IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICBuYW1lOiBcIjFwYXQ3bjAtZ3Jvd1plcm9cIixcbiAgICBzdHlsZXM6IFwiZmxleC1ncm93OjA7ZmxleC1iYXNpczphdXRvO2xhYmVsOmdyb3daZXJvO1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCIxcGF0N24wLWdyb3daZXJvXCIsXG4gICAgc3R5bGVzOiBcImZsZXgtZ3JvdzowO2ZsZXgtYmFzaXM6YXV0bztsYWJlbDpncm93WmVybztcIixcbiAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgfSxcbiAgZ3JvdzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgIG5hbWU6IFwidHI0d2VyLWdyb3dcIixcbiAgICBzdHlsZXM6IFwiZmxleC1iYXNpczowJTtsYWJlbDpncm93O1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCJ0cjR3ZXItZ3Jvd1wiLFxuICAgIHN0eWxlczogXCJmbGV4LWJhc2lzOjAlO2xhYmVsOmdyb3c7XCIsXG4gICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gIH0sXG4gIGdyb3dTaXplczoge1xuICAgICcxJzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgICAgbmFtZTogXCIxdjZ1eW9qLTFcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDoxO1wiXG4gICAgfSA6IHtcbiAgICAgIG5hbWU6IFwiMXY2dXlvai0xXCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6MTtcIixcbiAgICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICAgIH0sXG4gICAgJzInOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgICBuYW1lOiBcIjFsODZ4eGgtMlwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3JvdzoyO2xhYmVsOjI7XCJcbiAgICB9IDoge1xuICAgICAgbmFtZTogXCIxbDg2eHhoLTJcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6MjtsYWJlbDoyO1wiLFxuICAgICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gICAgfSxcbiAgICAnMyc6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICAgIG5hbWU6IFwiMXNsNzlheS0zXCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjM7bGFiZWw6MztcIlxuICAgIH0gOiB7XG4gICAgICBuYW1lOiBcIjFzbDc5YXktM1wiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3JvdzozO2xhYmVsOjM7XCIsXG4gICAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgICB9LFxuICAgICc0JzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgICAgbmFtZTogXCJrNHBuc2ctNFwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo0O2xhYmVsOjQ7XCJcbiAgICB9IDoge1xuICAgICAgbmFtZTogXCJrNHBuc2ctNFwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo0O2xhYmVsOjQ7XCIsXG4gICAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgICB9LFxuICAgICc1JzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgICAgbmFtZTogXCIxY3g1ZnhzLTVcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6NTtsYWJlbDo1O1wiXG4gICAgfSA6IHtcbiAgICAgIG5hbWU6IFwiMWN4NWZ4cy01XCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjU7bGFiZWw6NTtcIixcbiAgICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICAgIH0sXG4gICAgJzYnOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgICBuYW1lOiBcIjFpbjlpaXktNlwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo2O2xhYmVsOjY7XCJcbiAgICB9IDoge1xuICAgICAgbmFtZTogXCIxaW45aWl5LTZcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6NjtsYWJlbDo2O1wiLFxuICAgICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gICAgfSxcbiAgICAnNyc6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICAgIG5hbWU6IFwiZnZoM256LTdcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6NztsYWJlbDo3O1wiXG4gICAgfSA6IHtcbiAgICAgIG5hbWU6IFwiZnZoM256LTdcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6NztsYWJlbDo3O1wiLFxuICAgICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gICAgfSxcbiAgICAnOCc6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICAgIG5hbWU6IFwiZmpkZ3pjLThcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6ODtsYWJlbDo4O1wiXG4gICAgfSA6IHtcbiAgICAgIG5hbWU6IFwiZmpkZ3pjLThcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6ODtsYWJlbDo4O1wiLFxuICAgICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gICAgfSxcbiAgICAnOSc6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICAgIG5hbWU6IFwiMXR5cjhwNi05XCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93Ojk7bGFiZWw6OTtcIlxuICAgIH0gOiB7XG4gICAgICBuYW1lOiBcIjF0eXI4cDYtOVwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo5O2xhYmVsOjk7XCIsXG4gICAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgICB9LFxuICAgICcxMCc6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICAgIG5hbWU6IFwibjdwb2xmLTEwXCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjEwO2xhYmVsOjEwO1wiXG4gICAgfSA6IHtcbiAgICAgIG5hbWU6IFwibjdwb2xmLTEwXCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjEwO2xhYmVsOjEwO1wiLFxuICAgICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gICAgfVxuICB9XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBGb3JtQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHtcbiAgZGVmYXVsdEZ1bGxXaWR0aDogZmFsc2Vcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUZvcm1Db250ZXh0KCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChGb3JtQ29udGV4dCk7XG59IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgQ2hpbGRyZW4sIGNsb25lRWxlbWVudCwgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5mdW5jdGlvbiBpc011dGFibGVSZWYocmVmKSB7XG4gIHJldHVybiByZWYgIT0gbnVsbCAmJiByZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKTtcbn1cblxuLyoqXG4gKiBUaGUgYEV1aVZhbGlkYXRhYmxlQ29udHJvbGAgY29tcG9uZW50IHNob3VsZCBiZSB1c2VkIGluIHNjZW5hcmlvcyB3aGVyZVxuICogd2UgY2FuIHJlbmRlciB0aGUgdmFsaWRhdGVkIGA8aW5wdXQ+YCBhcyBpdHMgZGlyZWN0IGNoaWxkLlxuICovXG5cbmV4cG9ydCB2YXIgRXVpVmFsaWRhdGFibGVDb250cm9sID0gZnVuY3Rpb24gRXVpVmFsaWRhdGFibGVDb250cm9sKF9yZWYpIHtcbiAgdmFyIGlzSW52YWxpZCA9IF9yZWYuaXNJbnZhbGlkLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgLy8gTm90ZSB0aGF0IHRoaXMgbXVzdCBiZSBzdGF0ZSBhbmQgbm90IGEgcmVmIHRvIGNhdXNlIGEgcmVyZW5kZXIvc2V0IGludmFsaWQgc3RhdGUgb24gaW5pdGlhbCBtb3VudFxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgY29udHJvbCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0Q29udHJvbCA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBjaGlsZCA9IENoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRSZWYgPSBjaGlsZC5yZWY7XG4gIHZhciByZXBsYWNlZFJlZiA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgc2V0Q29udHJvbChlbGVtZW50KTtcblxuICAgIC8vIENhbGwgdGhlIG9yaWdpbmFsIHJlZiwgaWYgYW55XG4gICAgaWYgKHR5cGVvZiBjaGlsZFJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2hpbGRSZWYoZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChpc011dGFibGVSZWYoY2hpbGRSZWYpKSB7XG4gICAgICBjaGlsZFJlZi5jdXJyZW50ID0gZWxlbWVudDtcbiAgICB9XG4gIH0sIFtjaGlsZFJlZl0pO1xuICB1c2VTZXRDb250cm9sVmFsaWRpdHkoe1xuICAgIGNvbnRyb2xFbDogY29udHJvbCxcbiAgICBpc0ludmFsaWQ6IGlzSW52YWxpZFxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICByZWY6IHJlcGxhY2VkUmVmLFxuICAgICdhcmlhLWludmFsaWQnOiBpc0ludmFsaWQgfHwgY2hpbGQucHJvcHNbJ2FyaWEtaW52YWxpZCddXG4gIH0pO1xufTtcblxuLyoqXG4gKiBUaGUgYFVzZUV1aVZhbGlkYXRhYmxlQ29udHJvbGAgaG9vayBzaG91bGQgYmUgdXNlZCBpbiBzY2VuYXJpb3Mgd2hlcmVcbiAqIHdlICpjYW5ub3QqIGNvbnRyb2wgd2hlcmUgdGhlIHZhbGlkYXRlZCBgPGlucHV0PmAgaXMgcmVuZGVyZWQgKGUuZy4sIFJlYWN0RGF0ZVBpY2tlcilcbiAqIGFuZCBpbnN0ZWFkIG5lZWQgdG8gYWNjZXNzIHRoZSBpbnB1dCB2aWEgYSByZWYgYW5kIHBhc3MgdGhlIGVsZW1lbnQgaW4gZGlyZWN0bHlcbiAqL1xuRXVpVmFsaWRhdGFibGVDb250cm9sLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHJlZjogUHJvcFR5cGVzLmFueVxuICB9KS5pc1JlcXVpcmVkXG59O1xuZXhwb3J0IHZhciB1c2VFdWlWYWxpZGF0YWJsZUNvbnRyb2wgPSBmdW5jdGlvbiB1c2VFdWlWYWxpZGF0YWJsZUNvbnRyb2woX3JlZjIpIHtcbiAgdmFyIGlzSW52YWxpZCA9IF9yZWYyLmlzSW52YWxpZCxcbiAgICBjb250cm9sRWwgPSBfcmVmMi5jb250cm9sRWw7XG4gIHVzZVNldENvbnRyb2xWYWxpZGl0eSh7XG4gICAgY29udHJvbEVsOiBjb250cm9sRWwsXG4gICAgaXNJbnZhbGlkOiBpc0ludmFsaWRcbiAgfSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFjb250cm9sRWwpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIGlzSW52YWxpZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBjb250cm9sRWwuc2V0QXR0cmlidXRlKCdhcmlhLWludmFsaWQnLCBTdHJpbmcoaXNJbnZhbGlkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2xFbC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcpO1xuICAgIH1cbiAgfSwgW2lzSW52YWxpZCwgY29udHJvbEVsXSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIGBzZXRDdXN0b21WYWxpZGl0eWAgaGVscGVyXG4gKi9cbnZhciB1c2VTZXRDb250cm9sVmFsaWRpdHkgPSBmdW5jdGlvbiB1c2VTZXRDb250cm9sVmFsaWRpdHkoX3JlZjMpIHtcbiAgdmFyIGNvbnRyb2xFbCA9IF9yZWYzLmNvbnRyb2xFbCxcbiAgICBpc0ludmFsaWQgPSBfcmVmMy5pc0ludmFsaWQ7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvbnRyb2xFbCA9PSBudWxsIHx8IHR5cGVvZiBjb250cm9sRWwuc2V0Q3VzdG9tVmFsaWRpdHkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzSW52YWxpZCkge1xuICAgICAgY29udHJvbEVsLnNldEN1c3RvbVZhbGlkaXR5KCdJbnZhbGlkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2xFbC5zZXRDdXN0b21WYWxpZGl0eSgnJyk7XG4gICAgfVxuICB9LCBbaXNJbnZhbGlkLCBjb250cm9sRWxdKTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJpbnB1dElkXCIsIFwiY2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIiwgXCJpY29uXCIsIFwiaWNvbnNQb3NpdGlvblwiLCBcImNsZWFyXCIsIFwiaXNEcm9wZG93blwiLCBcImlzTG9hZGluZ1wiLCBcImlzSW52YWxpZFwiLCBcImlzRGlzYWJsZWRcIiwgXCJyZWFkT25seVwiLCBcImNvbXByZXNzZWRcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCIsIFwiaXNEZWxpbWl0ZWRcIiwgXCJ3cmFwcGVyUHJvcHNcIiwgXCJmdWxsV2lkdGhcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUZvcm1MYWJlbCB9IGZyb20gJy4uL2Zvcm1fbGFiZWwnO1xuaW1wb3J0IHsgdXNlRm9ybUNvbnRleHQgfSBmcm9tICcuLi9ldWlfZm9ybV9jb250ZXh0JztcbmltcG9ydCB7IGdldEljb25BZmZvcmRhbmNlU3R5bGVzLCBpc1JpZ2h0U2lkZUljb24gfSBmcm9tICcuL19udW1faWNvbnMnO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9pY29ucyc7XG5pbXBvcnQgeyBldWlGb3JtQ29udHJvbExheW91dFN0eWxlcywgZXVpRm9ybUNvbnRyb2xMYXlvdXRTaWRlTm9kZVN0eWxlcyB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXQgPSBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dChwcm9wcykge1xuICB2YXIgX3VzZUZvcm1Db250ZXh0ID0gdXNlRm9ybUNvbnRleHQoKSxcbiAgICBkZWZhdWx0RnVsbFdpZHRoID0gX3VzZUZvcm1Db250ZXh0LmRlZmF1bHRGdWxsV2lkdGg7XG4gIHZhciBpbnB1dElkID0gcHJvcHMuaW5wdXRJZCxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpY29uID0gcHJvcHMuaWNvbixcbiAgICBfcHJvcHMkaWNvbnNQb3NpdGlvbiA9IHByb3BzLmljb25zUG9zaXRpb24sXG4gICAgaWNvbnNQb3NpdGlvbiA9IF9wcm9wcyRpY29uc1Bvc2l0aW9uID09PSB2b2lkIDAgPyAnYWJzb2x1dGUnIDogX3Byb3BzJGljb25zUG9zaXRpb24sXG4gICAgY2xlYXIgPSBwcm9wcy5jbGVhcixcbiAgICBpc0Ryb3Bkb3duID0gcHJvcHMuaXNEcm9wZG93bixcbiAgICBpc0xvYWRpbmcgPSBwcm9wcy5pc0xvYWRpbmcsXG4gICAgaXNJbnZhbGlkID0gcHJvcHMuaXNJbnZhbGlkLFxuICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkLFxuICAgIHJlYWRPbmx5ID0gcHJvcHMucmVhZE9ubHksXG4gICAgY29tcHJlc3NlZCA9IHByb3BzLmNvbXByZXNzZWQsXG4gICAgcHJlcGVuZCA9IHByb3BzLnByZXBlbmQsXG4gICAgYXBwZW5kID0gcHJvcHMuYXBwZW5kLFxuICAgIGlzRGVsaW1pdGVkID0gcHJvcHMuaXNEZWxpbWl0ZWQsXG4gICAgd3JhcHBlclByb3BzID0gcHJvcHMud3JhcHBlclByb3BzLFxuICAgIF9wcm9wcyRmdWxsV2lkdGggPSBwcm9wcy5mdWxsV2lkdGgsXG4gICAgZnVsbFdpZHRoID0gX3Byb3BzJGZ1bGxXaWR0aCA9PT0gdm9pZCAwID8gZGVmYXVsdEZ1bGxXaWR0aCA6IF9wcm9wcyRmdWxsV2lkdGgsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzR3JvdXAgPSAhIShwcmVwZW5kIHx8IGFwcGVuZCB8fCBpc0RlbGltaXRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUNvbnRyb2xMYXlvdXQnLCB7XG4gICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0LS1ncm91cCc6IGlzR3JvdXAgJiYgIWlzRGVsaW1pdGVkLFxuICAgICdldWlGb3JtQ29udHJvbExheW91dC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXQtcmVhZE9ubHknOiByZWFkT25seVxuICB9LCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpRm9ybUNvbnRyb2xMYXlvdXRTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlGb3JtQ29udHJvbExheW91dCwgY29tcHJlc3NlZCA/IHN0eWxlcy5jb21wcmVzc2VkIDogc3R5bGVzLnVuY29tcHJlc3NlZCwgZnVsbFdpZHRoID8gc3R5bGVzLmZ1bGxXaWR0aCA6IHN0eWxlcy5mb3JtV2lkdGhdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoaXNHcm91cCA/IFtzdHlsZXMuZ3JvdXAuZ3JvdXAsIGNvbXByZXNzZWQgPyBzdHlsZXMuZ3JvdXAuY29tcHJlc3NlZCA6IHN0eWxlcy5ncm91cC51bmNvbXByZXNzZWRdIDogW10pKTtcbiAgdmFyIGNoaWxkcmVuV3JhcHBlclN0eWxlcyA9IFtzdHlsZXMuY2hpbGRyZW4uZXVpRm9ybUNvbnRyb2xMYXlvdXRfX2NoaWxkcmVuV3JhcHBlciwgaXNHcm91cCAmJiBzdHlsZXMuY2hpbGRyZW4uaW5Hcm91cCwgaXNHcm91cCAmJiAhYXBwZW5kICYmIHN0eWxlcy5jaGlsZHJlbi5wcmVwZW5kT25seSwgaXNHcm91cCAmJiAhcHJlcGVuZCAmJiBzdHlsZXMuY2hpbGRyZW4uYXBwZW5kT25seSwgd3JhcHBlclByb3BzID09PSBudWxsIHx8IHdyYXBwZXJQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd3JhcHBlclByb3BzLmNzc107XG4gIHZhciBoYXNEcm9wZG93bkljb24gPSAhcmVhZE9ubHkgJiYgIWlzRGlzYWJsZWQgJiYgaXNEcm9wZG93bjtcbiAgdmFyIGhhc1JpZ2h0SWNvbiA9IGlzUmlnaHRTaWRlSWNvbihpY29uKTtcbiAgdmFyIGhhc0xlZnRJY29uID0gaWNvbiAmJiAhaGFzUmlnaHRJY29uO1xuICB2YXIgaGFzUmlnaHRJY29ucyA9IGhhc1JpZ2h0SWNvbiB8fCBjbGVhciB8fCBpc0xvYWRpbmcgfHwgaXNJbnZhbGlkIHx8IGhhc0Ryb3Bkb3duSWNvbjtcbiAgdmFyIGljb25BZmZvcmRhbmNlU3R5bGVzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGljb25zUG9zaXRpb24gPT09ICdzdGF0aWMnKSByZXR1cm47IC8vIFN0YXRpYyBpY29ucyBkb24ndCBuZWVkIHBhZGRpbmcgYWZmb3JkYW5jZVxuXG4gICAgcmV0dXJuIGdldEljb25BZmZvcmRhbmNlU3R5bGVzKHtcbiAgICAgIGljb246IGljb24sXG4gICAgICBjbGVhcjogY2xlYXIsXG4gICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZCxcbiAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgaXNEcm9wZG93bjogaGFzRHJvcGRvd25JY29uXG4gICAgfSk7XG4gIH0sIFtpY29uc1Bvc2l0aW9uLCBpY29uLCBjbGVhciwgaXNJbnZhbGlkLCBpc0xvYWRpbmcsIGhhc0Ryb3Bkb3duSWNvbl0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0U2lkZU5vZGVzLCB7XG4gICAgc2lkZTogXCJwcmVwZW5kXCIsXG4gICAgbm9kZXM6IHByZXBlbmQsXG4gICAgaW5wdXRJZDogaW5wdXRJZCxcbiAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHt9LCB3cmFwcGVyUHJvcHMsIHtcbiAgICBjc3M6IGNoaWxkcmVuV3JhcHBlclN0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aUZvcm1Db250cm9sTGF5b3V0X19jaGlsZHJlbldyYXBwZXInLCB3cmFwcGVyUHJvcHMgPT09IG51bGwgfHwgd3JhcHBlclByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3cmFwcGVyUHJvcHMuY2xhc3NOYW1lKSxcbiAgICBzdHlsZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBpY29uQWZmb3JkYW5jZVN0eWxlcyksIHdyYXBwZXJQcm9wcyA9PT0gbnVsbCB8fCB3cmFwcGVyUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdyYXBwZXJQcm9wcy5zdHlsZSlcbiAgfSksIGhhc0xlZnRJY29uICYmIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucywge1xuICAgIHNpZGU6IFwibGVmdFwiLFxuICAgIGljb246IGljb24sXG4gICAgaWNvbnNQb3NpdGlvbjogaWNvbnNQb3NpdGlvbixcbiAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkLFxuICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgfSksIGNoaWxkcmVuLCBoYXNSaWdodEljb25zICYmIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucywge1xuICAgIHNpZGU6IFwicmlnaHRcIixcbiAgICBpY29uOiBoYXNSaWdodEljb24gPyBpY29uIDogdW5kZWZpbmVkLFxuICAgIGljb25zUG9zaXRpb246IGljb25zUG9zaXRpb24sXG4gICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICBjbGVhcjogY2xlYXIsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaXNJbnZhbGlkOiBpc0ludmFsaWQsXG4gICAgaXNEcm9wZG93bjogaGFzRHJvcGRvd25JY29uLFxuICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgfSkpLCBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0U2lkZU5vZGVzLCB7XG4gICAgc2lkZTogXCJhcHBlbmRcIixcbiAgICBub2RlczogYXBwZW5kLFxuICAgIGlucHV0SWQ6IGlucHV0SWQsXG4gICAgY29tcHJlc3NlZDogY29tcHJlc3NlZFxuICB9KSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIHN1YmNvbXBvbmVudCB1dGlsaXR5IGZvciBwcmVwZW5kL2FwcGVuZCBub2Rlc1xuICovXG5FdWlGb3JtQ29udHJvbExheW91dC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBiZWZvcmUgY2hpbGRyZW4uXG4gICAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICAgKi9cbiAgcHJlcGVuZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBhZnRlciBjaGlsZHJlbi5cbiAgICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAgIHNpZGU6IFByb3BUeXBlcy5hbnksXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gICAgcmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxuICB9KS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGljb25zIGFyZSBhYnNvbHV0ZWx5IG9yIHN0YXRpY2FsbHkgcmVuZGVyZWQuIEZvciBzaW5nbGUgaW5wdXRzLFxuICAgICAgICogYWJzb2x1dGUgcmVuZGVyaW5nIGlzIHR5cGljYWxseSBwcmVmZXJyZWQuXG4gICAgICAgKiBAZGVmYXVsdCBhYnNvbHV0ZVxuICAgICAgICovXG4gIGljb25zUG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJhYnNvbHV0ZVwiLCBcInN0YXRpY1wiXSksXG4gIGNsZWFyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSlcbiAgfSksXG4gIC8qKlxuICAgICAgICogRXhwYW5kIHRvIGZpbGwgMTAwJSBvZiB0aGUgcGFyZW50LlxuICAgICAgICogRGVmYXVsdHMgdG8gYGZ1bGxXaWR0aGAgcHJvcCBvZiBgPEV1aUZvcm0+YC5cbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogQ29udHJvbHMgdGhlIGFkZGluZyBvZiBhbmQgdmlzaWJpbGl0eSBvZiBhIGRvd24gYXJyb3cgaWNvblxuICAgICAgICovXG4gIGlzRHJvcGRvd246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIENvbm5lY3RzIHRoZSBwcmVwZW5kIGFuZCBhcHBlbmQgbGFiZWxzIHRvIHRoZSBpbnB1dFxuICAgICAgICovXG4gIGlucHV0SWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAgICogQWxsb3dzIHBhc3Npbmcgb3B0aW9uYWwgYWRkaXRpb25hbCBwcm9wcyB0byBgLmV1aUZvcm1Db250cm9sTGF5b3V0X19jaGlsZHJlbldyYXBwZXJgXG4gICAgICAgKi9cbiAgd3JhcHBlclByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICAvLyBJbnRlcm5hbCBwcm9wIHVzZWQgYnkgRXVpRm9ybUNvbnRyb2xMYXlvdXREZWxpbWl0ZWRcbiAgaXNEZWxpbWl0ZWQ6IFByb3BUeXBlcy5ib29sXG59O1xudmFyIEV1aUZvcm1Db250cm9sTGF5b3V0U2lkZU5vZGVzID0gZnVuY3Rpb24gRXVpRm9ybUNvbnRyb2xMYXlvdXRTaWRlTm9kZXMoX3JlZikge1xuICB2YXIgc2lkZSA9IF9yZWYuc2lkZSxcbiAgICBub2RlcyA9IF9yZWYubm9kZXMsXG4gICAgaW5wdXRJZCA9IF9yZWYuaW5wdXRJZCxcbiAgICBjb21wcmVzc2VkID0gX3JlZi5jb21wcmVzc2VkO1xuICB2YXIgY2xhc3NOYW1lID0gXCJldWlGb3JtQ29udHJvbExheW91dF9fXCIuY29uY2F0KHNpZGUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpRm9ybUNvbnRyb2xMYXlvdXRTaWRlTm9kZVN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUZvcm1Db250cm9sTGF5b3V0X19zaWRlLCBzdHlsZXNbc2lkZV0sIGNvbXByZXNzZWQgPyBzdHlsZXMuY29tcHJlc3NlZCA6IHN0eWxlcy51bmNvbXByZXNzZWRdO1xuICBpZiAoIW5vZGVzKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0sIFJlYWN0LkNoaWxkcmVuLm1hcChub2RlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gdHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnID8gX19fRW1vdGlvbkpTWChFdWlGb3JtTGFiZWwsIHtcbiAgICAgIGh0bWxGb3I6IGlucHV0SWRcbiAgICB9LCBub2RlKSA6IG5vZGU7XG4gIH0pKTtcbn07XG5FdWlGb3JtQ29udHJvbExheW91dFNpZGVOb2Rlcy5wcm9wVHlwZXMgPSB7XG4gIHNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJhcHBlbmRcIiwgXCJwcmVwZW5kXCJdKS5pc1JlcXVpcmVkLFxuICBub2RlczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuICAvLyBGb3Igc29tZSBiaXphcnJlIHJlYXNvbiBpZiB5b3UgbWFrZSB0aGlzIHRoZSBgY2hpbGRyZW5gIHByb3AgaW5zdGVhZCwgUmVhY3QgZG9lc24ndCBwcm9wZXJseSBvdmVycmlkZSBjbG9uZWQga2V5cyA6fFxuICBpbnB1dElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInR5cGVcIiwgXCJpc0ZvY3VzZWRcIiwgXCJpc0ludmFsaWRcIiwgXCJpc0Rpc2FibGVkXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpRm9ybUxhYmVsU3R5bGVzIH0gZnJvbSAnLi9mb3JtX2xhYmVsLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtTGFiZWwgPSBmdW5jdGlvbiBFdWlGb3JtTGFiZWwoX3JlZikge1xuICB2YXIgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdsYWJlbCcgOiBfcmVmJHR5cGUsXG4gICAgaXNGb2N1c2VkID0gX3JlZi5pc0ZvY3VzZWQsXG4gICAgaXNJbnZhbGlkID0gX3JlZi5pc0ludmFsaWQsXG4gICAgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpRm9ybUxhYmVsU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRm9ybUxhYmVsLCAhaXNEaXNhYmxlZCAmJiBzdHlsZXMubm90RGlzYWJsZWQsIGlzSW52YWxpZCAmJiBzdHlsZXMuaW52YWxpZCwgaXNGb2N1c2VkICYmIHN0eWxlcy5mb2N1c2VkXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtTGFiZWwnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpRm9ybUxhYmVsLWlzRm9jdXNlZCc6IGlzRm9jdXNlZCxcbiAgICAnZXVpRm9ybUxhYmVsLWlzSW52YWxpZCc6IGlzSW52YWxpZCxcbiAgICAnZXVpRm9ybUxhYmVsLWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkXG4gIH0pO1xuICBpZiAodHlwZSA9PT0gJ2xlZ2VuZCcpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxlZ2VuZFwiLCBfZXh0ZW5kcyh7XG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsYWJlbFwiLCBfZXh0ZW5kcyh7XG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH1cbn07XG5FdWlGb3JtTGFiZWwucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBEZWZhdWx0IHR5cGUgaXMgYSBgbGFiZWxgIGJ1dCBjYW4gYmUgY2hhbmdlZCB0byBhIGBsZWdlbmRgXG4gICAgICogaWYgdXNpbmcgaW5zaWRlIGEgYGZpZWxkc2V0YC5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogRGVmYXVsdCB0eXBlIGlzIGEgYGxhYmVsYCBidXQgY2FuIGJlIGNoYW5nZWQgdG8gYSBgbGVnZW5kYFxuICAgICAqIGlmIHVzaW5nIGluc2lkZSBhIGBmaWVsZHNldGAuXG4gICAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiLCBcImxlZ2VuZFwiXSldKSwgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImxlZ2VuZFwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImxhYmVsXCIsIFwibGVnZW5kXCJdKV0pXSksXG4gIGlzRm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIENoYW5nZXMgYGN1cnNvcmAgdG8gYGRlZmF1bHRgLlxuICAgICAqL1xuICAvKipcbiAgICAgKiBDaGFuZ2VzIGBjdXJzb3JgIHRvIGBkZWZhdWx0YC5cbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wicmVmXCIsIFwic2lkZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0X2NsZWFyX2J1dHRvbic7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24gfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXRfY3VzdG9tX2ljb24nO1xuaW1wb3J0IHsgZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29uc1N0eWxlcyB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9pY29ucy5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgSUNPTl9TSURFUyA9IFsnbGVmdCcsICdyaWdodCddO1xuZXhwb3J0IHZhciBpc0ljb25TaGFwZSA9IGZ1bmN0aW9uIGlzSWNvblNoYXBlKGljb24pIHtcbiAgcmV0dXJuICEhaWNvbiAmJiBpY29uLmhhc093blByb3BlcnR5KCd0eXBlJyk7XG59O1xuZXhwb3J0IHZhciBFdWlGb3JtQ29udHJvbExheW91dEljb25zID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMpO1xuICAgIHJldHVybiBfY2FsbFN1cGVyKHRoaXMsIEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgX2luaGVyaXRzKEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wcyRzaWRlID0gX3RoaXMkcHJvcHMuc2lkZSxcbiAgICAgICAgc2lkZSA9IF90aGlzJHByb3BzJHNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF90aGlzJHByb3BzJHNpZGUsXG4gICAgICAgIF90aGlzJHByb3BzJGljb25zUG9zaSA9IF90aGlzJHByb3BzLmljb25zUG9zaXRpb24sXG4gICAgICAgIGljb25zUG9zaXRpb24gPSBfdGhpcyRwcm9wcyRpY29uc1Bvc2kgPT09IHZvaWQgMCA/ICdhYnNvbHV0ZScgOiBfdGhpcyRwcm9wcyRpY29uc1Bvc2ksXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wcy5jb21wcmVzc2VkLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMuaXNEaXNhYmxlZDtcbiAgICAgIHZhciBjdXN0b21JY29uID0gdGhpcy5yZW5kZXJDdXN0b21JY29uKCk7XG4gICAgICB2YXIgbG9hZGluZ1NwaW5uZXIgPSB0aGlzLnJlbmRlckxvYWRpbmdTcGlubmVyKCk7XG4gICAgICB2YXIgY2xlYXJCdXR0b24gPSB0aGlzLnJlbmRlckNsZWFyQnV0dG9uKCk7XG4gICAgICB2YXIgaW52YWxpZEljb24gPSB0aGlzLnJlbmRlckludmFsaWRJY29uKCk7XG4gICAgICB2YXIgZHJvcGRvd25JY29uID0gdGhpcy5yZW5kZXJEcm9wZG93bkljb24oKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciwgbnVsbCwgZnVuY3Rpb24gKHN0eWxlc01lbW9pemVyKSB7XG4gICAgICAgIHZhciBzdHlsZXMgPSBzdHlsZXNNZW1vaXplcihldWlGb3JtQ29udHJvbExheW91dEljb25zU3R5bGVzKTtcbiAgICAgICAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucywgY29tcHJlc3NlZCA/IHN0eWxlcy5jb21wcmVzc2VkIDogc3R5bGVzLnVuY29tcHJlc3NlZF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShpY29uc1Bvc2l0aW9uID09PSAnYWJzb2x1dGUnID8gW3N0eWxlcy5wb3NpdGlvbi5hYnNvbHV0ZS5hYnNvbHV0ZSwgY29tcHJlc3NlZCA/IHN0eWxlcy5wb3NpdGlvbi5hYnNvbHV0ZS5jb21wcmVzc2VkW3NpZGVdIDogc3R5bGVzLnBvc2l0aW9uLmFic29sdXRlLnVuY29tcHJlc3NlZFtzaWRlXV0gOiBbc3R5bGVzLnBvc2l0aW9uLnN0YXRpYy5zdGF0aWMsIGNvbXByZXNzZWQgPyBzdHlsZXMucG9zaXRpb24uc3RhdGljLmNvbXByZXNzZWQgOiBzdHlsZXMucG9zaXRpb24uc3RhdGljLnVuY29tcHJlc3NlZF0pLCBbaXNEaXNhYmxlZCAmJiBzdHlsZXMuZGlzYWJsZWRdKTtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dEljb25zXCJcbiAgICAgICAgfSwgY2xlYXJCdXR0b24sIGxvYWRpbmdTcGlubmVyLCBpbnZhbGlkSWNvbiwgY3VzdG9tSWNvbiwgZHJvcGRvd25JY29uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJDdXN0b21JY29uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckN1c3RvbUljb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgaWNvbiA9IF90aGlzJHByb3BzMi5pY29uLFxuICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMyLmNvbXByZXNzZWQsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczIuaXNEaXNhYmxlZDtcbiAgICAgIGlmICghaWNvbikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gTm9ybWFsaXplIHRoZSBpY29uIHRvIGFuIG9iamVjdCBpZiBpdCdzIGEgc3RyaW5nLlxuICAgICAgdmFyIGljb25Qcm9wcyA9IGlzSWNvblNoYXBlKGljb24pID8gaWNvbiA6IHtcbiAgICAgICAgdHlwZTogaWNvblxuICAgICAgfTtcbiAgICAgIHZhciBpY29uUmVmID0gaWNvblByb3BzLnJlZixcbiAgICAgICAgc2lkZSA9IGljb25Qcm9wcy5zaWRlLFxuICAgICAgICBpY29uUmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhpY29uUHJvcHMsIF9leGNsdWRlZCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24sIF9leHRlbmRzKHtcbiAgICAgICAgc2l6ZTogY29tcHJlc3NlZCA/ICdzJyA6ICdtJyxcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIGljb25SZWY6IGljb25SZWZcbiAgICAgIH0sIGljb25SZXN0KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckRyb3Bkb3duSWNvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJEcm9wZG93bkljb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgaXNEcm9wZG93biA9IF90aGlzJHByb3BzMy5pc0Ryb3Bkb3duLFxuICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMzLmNvbXByZXNzZWQsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczMuaXNEaXNhYmxlZDtcbiAgICAgIGlmICghaXNEcm9wZG93bikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiwge1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nLFxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgdHlwZTogXCJhcnJvd0Rvd25cIlxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckxvYWRpbmdTcGlubmVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckxvYWRpbmdTcGlubmVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzNC5pc0xvYWRpbmcsXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczQuY29tcHJlc3NlZDtcbiAgICAgIGlmICghaXNMb2FkaW5nKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpTG9hZGluZ1NwaW5uZXIsIHtcbiAgICAgICAgc2l6ZTogY29tcHJlc3NlZCA/ICdzJyA6ICdtJ1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckNsZWFyQnV0dG9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckNsZWFyQnV0dG9uKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNsZWFyID0gX3RoaXMkcHJvcHM1LmNsZWFyLFxuICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHM1LmNvbXByZXNzZWQsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczUuaXNEaXNhYmxlZDtcbiAgICAgIGlmICghY2xlYXIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uLCBfZXh0ZW5kcyh7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbScsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkXG4gICAgICB9LCBjbGVhcikpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJbnZhbGlkSWNvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJbnZhbGlkSWNvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wczYuaXNJbnZhbGlkLFxuICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHM2LmNvbXByZXNzZWQ7XG4gICAgICBpZiAoIWlzSW52YWxpZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgc2l6ZTogY29tcHJlc3NlZCA/ICdzJyA6ICdtJyxcbiAgICAgICAgY29sb3I6IFwiZGFuZ2VyXCIsXG4gICAgICAgIHR5cGU6IFwid2FybmluZ1wiXG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbkV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMucHJvcFR5cGVzID0ge1xuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAgIHNpZGU6IFByb3BUeXBlcy5hbnksXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gICAgcmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxuICB9KS5pc1JlcXVpcmVkXSksXG4gIHNpZGU6IFByb3BUeXBlcy5hbnksXG4gIGljb25zUG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJhYnNvbHV0ZVwiLCBcInN0YXRpY1wiXSksXG4gIGNsZWFyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSlcbiAgfSksXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzRHJvcGRvd246IFByb3BUeXBlcy5ib29sLFxuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJvbkNsaWNrXCIsIFwic2l6ZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uU3R5bGVzIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0X2NsZWFyX2J1dHRvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b25TdHlsZXMpO1xuICB2YXIgaWNvblN0eWxlcyA9IFtzdHlsZXMuZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbl9faWNvbiwgc3R5bGVzLnNpemVbc2l6ZV1dO1xuICB2YXIgYXJpYUxhYmVsID0gdXNlRXVpSTE4bignZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbi5sYWJlbCcsICdDbGVhciBpbnB1dCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBjc3M6IHN0eWxlcy5ldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWxcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIGNzczogaWNvblN0eWxlcyxcbiAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbl9faWNvblwiLFxuICAgIHR5cGU6IFwiY3Jvc3NcIixcbiAgICBzaXplOiBzaXplXG4gIH0pKTtcbn07XG5FdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvblN0eWxlcyA9IGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b25TdHlsZXMoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlO1xuICB2YXIgYmFja2dyb3VuZENvbG9yID0gY29sb3JNb2RlID09PSAnREFSSycgPyBldWlUaGVtZS5jb2xvcnMuZGFya1NoYWRlIDogZXVpVGhlbWUuY29sb3JzLm1lZGl1bVNoYWRlO1xuICByZXR1cm4ge1xuICAgIGV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b246IC8qI19fUFVSRV9fKi9jc3MoXCJwb2ludGVyLWV2ZW50czphbGw7YmFja2dyb3VuZC1jb2xvcjpcIiwgYmFja2dyb3VuZENvbG9yLCBcIjtib3JkZXItcmFkaXVzOjUwJTtsaW5lLWhlaWdodDowOyY6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZCwgXCI7fTtsYWJlbDpldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uO1wiKSxcbiAgICBldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uX19pY29uOiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnNjYWxlKDAuNSk7ZmlsbDpcIiwgZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsIFwiO3N0cm9rZTpcIiwgZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsIFwiOztsYWJlbDpldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uX19pY29uO1wiKSxcbiAgICBzaXplOiB7XG4gICAgICBzOiAvKiNfX1BVUkVfXyovY3NzKFwic3Ryb2tlLXdpZHRoOlwiLCBldWlUaGVtZS5zaXplLnhzLCBcIjs7bGFiZWw6cztcIiksXG4gICAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwic3Ryb2tlLXdpZHRoOlwiLCBldWlUaGVtZS5zaXplLnh4cywgXCI7O2xhYmVsOm07XCIpXG4gICAgfVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcIm9uQ2xpY2tcIiwgXCJ0eXBlXCIsIFwiaWNvblJlZlwiLCBcInNpemVcIiwgXCJjb2xvclwiLCBcImRpc2FibGVkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24gPSBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICB0eXBlID0gX3JlZi50eXBlLFxuICAgIGljb25SZWYgPSBfcmVmLmljb25SZWYsXG4gICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24nLCBjbGFzc05hbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24sIG9uQ2xpY2sgPyBzdHlsZXMuY2xpY2thYmxlIDogc3R5bGVzLnVuY2xpY2thYmxlXTtcbiAgaWYgKG9uQ2xpY2spIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgcmVmOiBpY29uUmVmXG4gICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbl9faWNvblwiLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgIHNpemU6IHNpemUsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgY29sb3I6IGNvbG9yXG4gICAgfSkpO1xuICB9XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHJlZjogaWNvblJlZlxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbl9faWNvblwiLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbG9yOiBjb2xvclxuICB9KSk7XG59O1xuRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgaWNvblJlZjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSlcbn07XG52YXIgc3R5bGVzID0ge1xuICBldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb246IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICBuYW1lOiBcIjdkMW1hOC1ldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb25cIixcbiAgICBzdHlsZXM6IFwiZm9udC1zaXplOjA7bGFiZWw6ZXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uO1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCI3ZDFtYTgtZXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uXCIsXG4gICAgc3R5bGVzOiBcImZvbnQtc2l6ZTowO2xhYmVsOmV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbjtcIixcbiAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgfSxcbiAgLy8gU2tpcCBjc3NgYCBoZXJlIHRvIGF2b2lkIGdlbmVyYXRpbmcgYW4gRW1vdGlvbiBjbGFzc05hbWVcbiAgdW5jbGlja2FibGU6IFwiXFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgXCIsXG4gIGNsaWNrYWJsZTogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgIG5hbWU6IFwiMWo4d2d4ai1jbGlja2FibGVcIixcbiAgICBzdHlsZXM6IFwicG9pbnRlci1ldmVudHM6YWxsOyY6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOmN1cnJlbnRDb2xvcjt9O2xhYmVsOmNsaWNrYWJsZTtcIlxuICB9IDoge1xuICAgIG5hbWU6IFwiMWo4d2d4ai1jbGlja2FibGVcIixcbiAgICBzdHlsZXM6IFwicG9pbnRlci1ldmVudHM6YWxsOyY6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOmN1cnJlbnRDb2xvcjt9O2xhYmVsOmNsaWNrYWJsZTtcIixcbiAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgfVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aUZvcm1WYXJpYWJsZXMgfSBmcm9tICcuLi9mb3JtLnN0eWxlcyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIzbGY5YzQtZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29uc1wiLFxuICBzdHlsZXM6IFwicG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2xhYmVsOmV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnM7XCJcbn0gOiB7XG4gIG5hbWU6IFwiM2xmOWM0LWV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnNcIixcbiAgc3R5bGVzOiBcInBvaW50ZXItZXZlbnRzOm5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtsYWJlbDpldWlGb3JtQ29udHJvbExheW91dEljb25zO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnNTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbExheW91dEljb25zU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgX2V1aUZvcm1WYXJpYWJsZXMgPSBldWlGb3JtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgY29udHJvbFBhZGRpbmcgPSBfZXVpRm9ybVZhcmlhYmxlcy5jb250cm9sUGFkZGluZyxcbiAgICBjb250cm9sQ29tcHJlc3NlZFBhZGRpbmcgPSBfZXVpRm9ybVZhcmlhYmxlcy5jb250cm9sQ29tcHJlc3NlZFBhZGRpbmcsXG4gICAgY29udHJvbERpc2FibGVkQ29sb3IgPSBfZXVpRm9ybVZhcmlhYmxlcy5jb250cm9sRGlzYWJsZWRDb2xvcjtcbiAgcmV0dXJuIHtcbiAgICBldWlGb3JtQ29udHJvbExheW91dEljb25zOiBfcmVmLFxuICAgIHVuY29tcHJlc3NlZDogXCJcXG4gICAgICBnYXA6IFwiLmNvbmNhdChtYXRoV2l0aFVuaXRzKGNvbnRyb2xQYWRkaW5nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggLyAyO1xuICAgIH0pLCBcIjtcXG4gICAgXCIpLFxuICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIG1hdGhXaXRoVW5pdHMoY29udHJvbENvbXByZXNzZWRQYWRkaW5nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggLyAyO1xuICAgIH0pLCBcIjs7bGFiZWw6Y29tcHJlc3NlZDtcIiksXG4gICAgZGlzYWJsZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6XCIsIGNvbnRyb2xEaXNhYmxlZENvbG9yLCBcIjs7bGFiZWw6ZGlzYWJsZWQ7XCIpLFxuICAgIHBvc2l0aW9uOiB7XG4gICAgICBhYnNvbHV0ZToge1xuICAgICAgICBhYnNvbHV0ZTogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd2ZXJ0aWNhbCcsIDApLCBcIjs7bGFiZWw6YWJzb2x1dGU7XCIpLFxuICAgICAgICB1bmNvbXByZXNzZWQ6IHtcbiAgICAgICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwiei1pbmRleDoxO1wiLCBsb2dpY2FsQ1NTKCdsZWZ0JywgY29udHJvbFBhZGRpbmcpLCBcIjs7bGFiZWw6bGVmdDtcIiksXG4gICAgICAgICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygncmlnaHQnLCBjb250cm9sUGFkZGluZyksIFwiOztsYWJlbDpyaWdodDtcIilcbiAgICAgICAgfSxcbiAgICAgICAgY29tcHJlc3NlZDoge1xuICAgICAgICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJ6LWluZGV4OjE7XCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCBjb250cm9sQ29tcHJlc3NlZFBhZGRpbmcpLCBcIjs7bGFiZWw6bGVmdDtcIiksXG4gICAgICAgICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygncmlnaHQnLCBjb250cm9sQ29tcHJlc3NlZFBhZGRpbmcpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzdGF0aWM6IHtcbiAgICAgICAgc3RhdGljOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246c3RhdGljO1wiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCAnMTAwJScpLCBcIiBhbGlnbi1zZWxmOnN0cmV0Y2g7ZmxleC1ncm93OjA7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsICcxMDAlJyksIFwiOztsYWJlbDpzdGF0aWM7XCIpLFxuICAgICAgICB1bmNvbXByZXNzZWQ6IGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGNvbnRyb2xQYWRkaW5nKSxcbiAgICAgICAgY29tcHJlc3NlZDogbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgY29udHJvbENvbXByZXNzZWRQYWRkaW5nKVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgaXNJY29uU2hhcGUgfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXRfaWNvbnMnO1xuZXhwb3J0IHZhciBpc1JpZ2h0U2lkZUljb24gPSBmdW5jdGlvbiBpc1JpZ2h0U2lkZUljb24oaWNvbikge1xuICByZXR1cm4gISFpY29uICYmIGlzSWNvblNoYXBlKGljb24pICYmIGljb24uc2lkZSA9PT0gJ3JpZ2h0Jztcbn07XG5leHBvcnQgdmFyIGdldEljb25BZmZvcmRhbmNlU3R5bGVzID0gZnVuY3Rpb24gZ2V0SWNvbkFmZm9yZGFuY2VTdHlsZXMoX3JlZikge1xuICB2YXIgaWNvbiA9IF9yZWYuaWNvbixcbiAgICBjbGVhciA9IF9yZWYuY2xlYXIsXG4gICAgaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgaXNJbnZhbGlkID0gX3JlZi5pc0ludmFsaWQsXG4gICAgaXNEcm9wZG93biA9IF9yZWYuaXNEcm9wZG93bjtcbiAgdmFyIGNzc1ZhcmlhYmxlcyA9IHtcbiAgICAnLS1ldWlGb3JtQ29udHJvbExlZnRJY29uc0NvdW50JzogMCxcbiAgICAnLS1ldWlGb3JtQ29udHJvbFJpZ2h0SWNvbnNDb3VudCc6IDBcbiAgfTtcbiAgaWYgKGljb24pIHtcbiAgICBpZiAoaXNSaWdodFNpZGVJY29uKGljb24pKSB7XG4gICAgICBjc3NWYXJpYWJsZXNbJy0tZXVpRm9ybUNvbnRyb2xSaWdodEljb25zQ291bnQnXSsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBjc3NWYXJpYWJsZXNbJy0tZXVpRm9ybUNvbnRyb2xMZWZ0SWNvbnNDb3VudCddKys7XG4gICAgfVxuICB9XG4gIGlmIChjbGVhcikgY3NzVmFyaWFibGVzWyctLWV1aUZvcm1Db250cm9sUmlnaHRJY29uc0NvdW50J10rKztcbiAgaWYgKGlzTG9hZGluZykgY3NzVmFyaWFibGVzWyctLWV1aUZvcm1Db250cm9sUmlnaHRJY29uc0NvdW50J10rKztcbiAgaWYgKGlzSW52YWxpZCkgY3NzVmFyaWFibGVzWyctLWV1aUZvcm1Db250cm9sUmlnaHRJY29uc0NvdW50J10rKztcbiAgaWYgKGlzRHJvcGRvd24pIGNzc1ZhcmlhYmxlc1snLS1ldWlGb3JtQ29udHJvbFJpZ2h0SWNvbnNDb3VudCddKys7XG4gIHZhciBmaWx0ZXJlZCA9IE9iamVjdC5lbnRyaWVzKGNzc1ZhcmlhYmxlcykuZmlsdGVyKGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciBfcmVmMyA9IF9zbGljZWRUb0FycmF5KF9yZWYyLCAyKSxcbiAgICAgIGNvdW50ID0gX3JlZjNbMV07XG4gICAgcmV0dXJuIGNvdW50ID4gMDtcbiAgfSk7XG4gIHJldHVybiBmaWx0ZXJlZC5sZW5ndGggPyBPYmplY3QuZnJvbUVudHJpZXMoZmlsdGVyZWQpIDogdW5kZWZpbmVkO1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpVGV4dFRydW5jYXRlLCBsb2dpY2FsQ1NTLCBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpRm9ybVZhcmlhYmxlcyB9IGZyb20gJy4uL2Zvcm0uc3R5bGVzJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjF3MTBuMW0taW5Hcm91cFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO2xhYmVsOmluR3JvdXA7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXcxMG4xbS1pbkdyb3VwXCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47bGFiZWw6aW5Hcm91cDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFsYmZhNm0tZXVpRm9ybUNvbnRyb2xMYXlvdXRfX2NoaWxkcmVuV3JhcHBlclwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmU7bGFiZWw6ZXVpRm9ybUNvbnRyb2xMYXlvdXRfX2NoaWxkcmVuV3JhcHBlcjtcIlxufSA6IHtcbiAgbmFtZTogXCIxbGJmYTZtLWV1aUZvcm1Db250cm9sTGF5b3V0X19jaGlsZHJlbldyYXBwZXJcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO2xhYmVsOmV1aUZvcm1Db250cm9sTGF5b3V0X19jaGlsZHJlbldyYXBwZXI7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUNvbnRyb2xMYXlvdXRTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbExheW91dFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgZm9ybSA9IGV1aUZvcm1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIHtcbiAgICBldWlGb3JtQ29udHJvbExheW91dDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlGb3JtQ29udHJvbExheW91dDtcIiksXG4gICAgLy8gU2tpcCB0aGUgY3NzYGAgb24gdGhlIGRlZmF1bHQgaGVpZ2h0IHRvIGF2b2lkIGdlbmVyYXRpbmcgYSBjbGFzc05hbWVcbiAgICB1bmNvbXByZXNzZWQ6IFwiXFxuICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGZvcm0uY29udHJvbEhlaWdodCksIFwiXFxuICAgIFwiKSxcbiAgICBjb21wcmVzc2VkOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGZvcm0uY29udHJvbENvbXByZXNzZWRIZWlnaHQpLCBcIjs7bGFiZWw6Y29tcHJlc3NlZDtcIiksXG4gICAgLy8gU2tpcCB0aGUgY3NzYGAgb24gdGhlIGRlZmF1bHQgd2lkdGggdG8gYXZvaWQgZ2VuZXJhdGluZyBhIGNsYXNzTmFtZVxuICAgIGZvcm1XaWR0aDogXCJcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygnbWF4LXdpZHRoJywgZm9ybS5tYXhXaWR0aCksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiXFxuICAgIFwiKSxcbiAgICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIiksXG4gICAgZ3JvdXA6IHtcbiAgICAgIGdyb3VwOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOnN0cmV0Y2g7Ym9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgc29saWQgXCIsIGZvcm0uYm9yZGVyQ29sb3IsIFwiO2JhY2tncm91bmQtY29sb3I6XCIsIGZvcm0uYmFja2dyb3VuZENvbG9yLCBcIjtvdmVyZmxvdzpoaWRkZW47Pip7XCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiO307bGFiZWw6Z3JvdXA7XCIpLFxuICAgICAgLy8gU2tpcHBpbmcgY3NzYGAgdG8gYXZvaWQgcmVwZWF0ZWQgY29tcHJlc3NlZC91bmNvbXByZXNzZWQgY2xhc3NOYW1lc1xuICAgICAgdW5jb21wcmVzc2VkOiBcIlxcbiAgICAgICAgYm9yZGVyLXJhZGl1czogXCIuY29uY2F0KGZvcm0uY29udHJvbEJvcmRlclJhZGl1cywgXCI7XFxuICAgICAgXCIpLFxuICAgICAgY29tcHJlc3NlZDogXCJcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IFwiLmNvbmNhdChmb3JtLmNvbnRyb2xDb21wcmVzc2VkQm9yZGVyUmFkaXVzLCBcIjtcXG4gICAgICBcIilcbiAgICB9LFxuICAgIGNoaWxkcmVuOiB7XG4gICAgICBldWlGb3JtQ29udHJvbExheW91dF9fY2hpbGRyZW5XcmFwcGVyOiBfcmVmMixcbiAgICAgIGluR3JvdXA6IF9yZWYsXG4gICAgICBwcmVwZW5kT25seTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdib3JkZXItdG9wLXJpZ2h0LXJhZGl1cycsICdpbmhlcml0JyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cycsICdpbmhlcml0JyksIFwiOztsYWJlbDpwcmVwZW5kT25seTtcIiksXG4gICAgICBhcHBlbmRPbmx5OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnLCAnaW5oZXJpdCcpLCBcIiBcIiwgbG9naWNhbENTUygnYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cycsICdpbmhlcml0JyksIFwiOztsYWJlbDphcHBlbmRPbmx5O1wiKVxuICAgIH1cbiAgfTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sTGF5b3V0U2lkZU5vZGVTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbExheW91dFNpZGVOb2RlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBmb3JtID0gZXVpRm9ybVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgdW5jb21wcmVzc2VkSGVpZ2h0ID0gbWF0aFdpdGhVbml0cyhbZm9ybS5jb250cm9sSGVpZ2h0LCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbl0sIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgcmV0dXJuIHggLSB5ICogMjtcbiAgfSk7XG4gIHZhciBjb21wcmVzc2VkSGVpZ2h0ID0gbWF0aFdpdGhVbml0cyhbZm9ybS5jb250cm9sQ29tcHJlc3NlZEhlaWdodCwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW5dLCBmdW5jdGlvbiAoeCwgeSkge1xuICAgIHJldHVybiB4IC0geSAqIDI7XG4gIH0pO1xuICB2YXIgYnV0dG9ucyA9ICcqOmlzKC5ldWlCdXR0b24sIC5ldWlCdXR0b25FbXB0eSwgLmV1aUJ1dHRvbkljb24pJztcbiAgdmFyIHRleHQgPSAnKjppcyguZXVpRm9ybUxhYmVsLCAuZXVpVGV4dCknO1xuICByZXR1cm4ge1xuICAgIGV1aUZvcm1Db250cm9sTGF5b3V0X19zaWRlOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiIFwiLCBldWlUZXh0VHJ1bmNhdGUoJzUwJScpLCBcIiBmbGV4LXNocmluazowO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOlwiLCBldWlUaGVtZS5zaXplLnhzLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBmb3JtLmFwcGVuZFByZXBlbmRCYWNrZ3JvdW5kLCBcIjtcIiwgYnV0dG9ucywgXCJ7dHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50OyY6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDotXCIsIGV1aVRoZW1lLmZvY3VzLndpZHRoLCBcIjt9fVwiLCB0ZXh0LCBcIntjdXJzb3I6ZGVmYXVsdDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt9Jjpub3QoOmhhcyg+IFwiLCBidXR0b25zLCBcIjpmaXJzdC1jaGlsZCwgPiAqOmZpcnN0LWNoaWxkID4gXCIsIGJ1dHRvbnMsIFwiKSl7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctbGVmdCcsIGV1aVRoZW1lLnNpemUucyksIFwiO30mOm5vdCg6aGFzKD4gXCIsIGJ1dHRvbnMsIFwiOmxhc3QtY2hpbGQsID4gKjpsYXN0LWNoaWxkID4gXCIsIGJ1dHRvbnMsIFwiKSl7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctcmlnaHQnLCBldWlUaGVtZS5zaXplLnMpLCBcIjt9O2xhYmVsOmV1aUZvcm1Db250cm9sTGF5b3V0X19zaWRlO1wiKSxcbiAgICBhcHBlbmQ6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6YXBwZW5kO1wiKSxcbiAgICBwcmVwZW5kOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOnByZXBlbmQ7XCIpLFxuICAgIHVuY29tcHJlc3NlZDogXCJcXG4gICAgICBcIi5jb25jYXQodGV4dCwgXCIge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnhzKSwgXCJcXG4gICAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KHVuY29tcHJlc3NlZEhlaWdodCwgXCI7XFxuICAgICAgfVxcblxcbiAgICAgIFwiKS5jb25jYXQoYnV0dG9ucywgXCIge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCB1bmNvbXByZXNzZWRIZWlnaHQpLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAuZXVpQnV0dG9uSWNvbiB7XFxuICAgICAgICBmbGV4LXNocmluazogMDtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCBldWlUaGVtZS5zaXplLnhsKSwgXCJcXG4gICAgICB9XFxuICAgIFwiKSxcbiAgICBjb21wcmVzc2VkOiAvKiNfX1BVUkVfXyovY3NzKHRleHQsIFwie1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnh4cyksIFwiIGxpbmUtaGVpZ2h0OlwiLCBjb21wcmVzc2VkSGVpZ2h0LCBcIjt9XCIsIGJ1dHRvbnMsIFwie1wiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBjb21wcmVzc2VkSGVpZ2h0KSwgXCI7fS5ldWlCdXR0b25JY29ue2ZsZXgtc2hyaW5rOjA7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgZXVpVGhlbWUuc2l6ZS54bCksIFwiO307bGFiZWw6Y29tcHJlc3NlZDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJzdHlsZXNNZW1vaXplclwiLCBcImNsYXNzTmFtZVwiLCBcImlkXCIsIFwibmFtZVwiLCBcInBsYWNlaG9sZGVyXCIsIFwiaXNJbnZhbGlkXCIsIFwiZGlzYWJsZWRcIiwgXCJmdWxsV2lkdGhcIiwgXCJpc0xvYWRpbmdcIiwgXCJpbnB1dFJlZlwiLCBcImluY3JlbWVudGFsXCIsIFwiY29tcHJlc3NlZFwiLCBcIm9uU2VhcmNoXCIsIFwiaXNDbGVhcmFibGVcIiwgXCJhcHBlbmRcIiwgXCJwcmVwZW5kXCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5cywgd2l0aEV1aVN0eWxlc01lbW9pemVyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQnJvd3NlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Jyb3dzZXInO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXQgfSBmcm9tICcuLi9mb3JtX2NvbnRyb2xfbGF5b3V0JztcbmltcG9ydCB7IEV1aVZhbGlkYXRhYmxlQ29udHJvbCB9IGZyb20gJy4uL3ZhbGlkYXRhYmxlX2NvbnRyb2wnO1xuaW1wb3J0IHsgRm9ybUNvbnRleHQgfSBmcm9tICcuLi9ldWlfZm9ybV9jb250ZXh0JztcbmltcG9ydCB7IGV1aUZpZWxkU2VhcmNoU3R5bGVzIH0gZnJvbSAnLi9maWVsZF9zZWFyY2guc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaXNTZWFyY2hTdXBwb3J0ZWQgPSBmYWxzZTtcbmV4cG9ydCB2YXIgRXVpRmllbGRTZWFyY2hDbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlGaWVsZFNlYXJjaENsYXNzKCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRmllbGRTZWFyY2hDbGFzcyk7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpRmllbGRTZWFyY2hDbGFzcywgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic3RhdGVcIiwge1xuICAgICAgdmFsdWU6IF90aGlzLnByb3BzLnZhbHVlIHx8IFN0cmluZyhfdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgfHwgJycpXG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImlucHV0RWxlbWVudFwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2xlYW51cHNcIiwgW10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkNsZWFyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGNsZWFyIHRoZSBmaWVsZCdzIHZhbHVlXG5cbiAgICAgIC8vIDEuIFJlYWN0IGRvZXNuJ3QgbGlzdGVuIGZvciBgY2hhbmdlYCBldmVudHMsIGluc3RlYWQgaXQgbWFwcyBgaW5wdXRgIGV2ZW50cyB0byBgY2hhbmdlYFxuICAgICAgLy8gMi4gUmVhY3Qgb25seSBmaXJlcyB0aGUgbWFwcGVkIGBjaGFuZ2VgIGV2ZW50IGlmIHRoZSBlbGVtZW50J3MgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAgIC8vIDMuIEFuIGlucHV0J3MgdmFsdWUgaXMsIGluIGFkZGl0aW9uIHRvIG90aGVyIG1ldGhvZHMsIHRyYWNrZWQgYnkgaW50ZXJjZXB0aW5nIGVsZW1lbnQudmFsdWUgPSAnLi4uJ1xuICAgICAgLy9cbiAgICAgIC8vIFNvIHdlIGhhdmUgdG8gZ28gYmVsb3cgdGhlIGVsZW1lbnQncyB2YWx1ZSBzZXR0ZXIgdG8gYXZvaWQgUmVhY3QgaW50ZXJjZXB0aW5nIGl0LFxuICAgICAgLy8gb25seSB0aGVuIHdpbGwgUmVhY3QgdHJlYXQgdGhlIHZhbHVlIGFzIGRpZmZlcmVudCBhbmQgZmlyZSBpdHMgYGNoYW5nZWAgZXZlbnRcbiAgICAgIC8vXG4gICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMzg5MjU0Ny93aGF0LWlzLXRoZS1iZXN0LXdheS10by10cmlnZ2VyLW9uY2hhbmdlLWV2ZW50LWluLXJlYWN0LWpzXG4gICAgICB2YXIgbmF0aXZlSW5wdXRWYWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsICd2YWx1ZScpO1xuICAgICAgdmFyIG5hdGl2ZUlucHV0VmFsdWVTZXR0ZXIgPSBuYXRpdmVJbnB1dFZhbHVlID8gbmF0aXZlSW5wdXRWYWx1ZS5zZXQgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAobmF0aXZlSW5wdXRWYWx1ZVNldHRlcikge1xuICAgICAgICBuYXRpdmVJbnB1dFZhbHVlU2V0dGVyLmNhbGwoX3RoaXMuaW5wdXRFbGVtZW50LCAnJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGRpc3BhdGNoIGlucHV0IGV2ZW50XG4gICAgICB2YXIgZXZlbnQgPSBuZXcgRXZlbnQoJ2lucHV0Jywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBpZiAoX3RoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICAgIF90aGlzLmlucHV0RWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgLy8gc2V0IGZvY3VzIG9uIHRoZSBzZWFyY2ggZmllbGRcbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIF90aGlzLmlucHV0RWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJykpO1xuICAgICAgfVxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0pO1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGluY3JlbWVudGFsID0gX3RoaXMkcHJvcHMuaW5jcmVtZW50YWwsXG4gICAgICAgIG9uU2VhcmNoID0gX3RoaXMkcHJvcHMub25TZWFyY2g7XG4gICAgICBpZiAob25TZWFyY2ggJiYgaW5jcmVtZW50YWwpIHtcbiAgICAgICAgb25TZWFyY2goJycpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZXRSZWZcIiwgZnVuY3Rpb24gKGlucHV0RWxlbWVudCkge1xuICAgICAgX3RoaXMuaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtZW50O1xuICAgICAgaWYgKF90aGlzLnByb3BzLmlucHV0UmVmKSB7XG4gICAgICAgIF90aGlzLnByb3BzLmlucHV0UmVmKGlucHV0RWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uS2V5VXBcIiwgZnVuY3Rpb24gKGV2ZW50LCBpbmNyZW1lbnRhbCwgb25TZWFyY2gpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgfSk7XG4gICAgICBpZiAoX3RoaXMucHJvcHMub25LZXlVcCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbktleVVwKGV2ZW50KTtcbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvblNlYXJjaCAmJiAoZXZlbnQua2V5ICE9PSBrZXlzLkVOVEVSICYmIGluY3JlbWVudGFsIHx8IGV2ZW50LmtleSA9PT0ga2V5cy5FTlRFUiAmJiAhaXNTZWFyY2hTdXBwb3J0ZWQpKSB7XG4gICAgICAgIG9uU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlGaWVsZFNlYXJjaENsYXNzLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlGaWVsZFNlYXJjaENsYXNzLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgaWYgKCF0aGlzLmlucHV0RWxlbWVudCkgcmV0dXJuO1xuICAgICAgaXNTZWFyY2hTdXBwb3J0ZWQgPSBCcm93c2VyLmlzRXZlbnRTdXBwb3J0ZWQoJ3NlYXJjaCcsIHRoaXMuaW5wdXRFbGVtZW50KTtcbiAgICAgIGlmIChpc1NlYXJjaFN1cHBvcnRlZCkge1xuICAgICAgICB2YXIgb25TZWFyY2ggPSBmdW5jdGlvbiBvblNlYXJjaChldmVudCkge1xuICAgICAgICAgIGlmIChfdGhpczIucHJvcHMub25TZWFyY2gpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgICAgICAgICBfdGhpczIucHJvcHMub25TZWFyY2goZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlYXJjaCcsIG9uU2VhcmNoKTtcbiAgICAgICAgdGhpcy5jbGVhbnVwcy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIV90aGlzMi5pbnB1dEVsZW1lbnQpIHJldHVybjtcbiAgICAgICAgICBfdGhpczIuaW5wdXRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NlYXJjaCcsIG9uU2VhcmNoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiBvbkNoYW5nZShldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC52YWx1ZSAhPT0gX3RoaXMyLnN0YXRlLnZhbHVlKSB7XG4gICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHZhbHVlOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoX3RoaXMyLnByb3BzLm9uU2VhcmNoKSB7XG4gICAgICAgICAgICBfdGhpczIucHJvcHMub25TZWFyY2goZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNoYW5nZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhbnVwcy5mb3JFYWNoKGZ1bmN0aW9uIChjbGVhbnVwKSB7XG4gICAgICAgIHJldHVybiBjbGVhbnVwKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgdmFyIF9yZWYgPSB0aGlzLmNvbnRleHQsXG4gICAgICAgIGRlZmF1bHRGdWxsV2lkdGggPSBfcmVmLmRlZmF1bHRGdWxsV2lkdGg7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgc3R5bGVzTWVtb2l6ZXIgPSBfdGhpcyRwcm9wczIuc3R5bGVzTWVtb2l6ZXIsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgIGlkID0gX3RoaXMkcHJvcHMyLmlkLFxuICAgICAgICBuYW1lID0gX3RoaXMkcHJvcHMyLm5hbWUsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHMyLnBsYWNlaG9sZGVyLFxuICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wczIuaXNJbnZhbGlkLFxuICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzMi5kaXNhYmxlZCxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGZ1bGxXaWR0ID0gX3RoaXMkcHJvcHMyLmZ1bGxXaWR0aCxcbiAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHMyJGZ1bGxXaWR0ID09PSB2b2lkIDAgPyBkZWZhdWx0RnVsbFdpZHRoIDogX3RoaXMkcHJvcHMyJGZ1bGxXaWR0LFxuICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczIuaXNMb2FkaW5nLFxuICAgICAgICBpbnB1dFJlZiA9IF90aGlzJHByb3BzMi5pbnB1dFJlZixcbiAgICAgICAgaW5jcmVtZW50YWwgPSBfdGhpcyRwcm9wczIuaW5jcmVtZW50YWwsXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczIuY29tcHJlc3NlZCxcbiAgICAgICAgb25TZWFyY2ggPSBfdGhpcyRwcm9wczIub25TZWFyY2gsXG4gICAgICAgIF9pc0NsZWFyYWJsZSA9IF90aGlzJHByb3BzMi5pc0NsZWFyYWJsZSxcbiAgICAgICAgYXBwZW5kID0gX3RoaXMkcHJvcHMyLmFwcGVuZCxcbiAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzMi5wcmVwZW5kLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMucHJvcHMudmFsdWU7XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMudmFsdWUgIT09ICdzdHJpbmcnKSB2YWx1ZSA9IHRoaXMuc3RhdGUudmFsdWU7XG5cbiAgICAgIC8vIFNldCBhY3R1YWwgdmFsdWUgb2YgaXNDbGVhcmFibGUgaWYgdmFsdWUgZXhpc3RzIGFzIHdlbGxcbiAgICAgIHZhciBpc0NsZWFyYWJsZSA9IEJvb2xlYW4oX2lzQ2xlYXJhYmxlICYmIHZhbHVlICYmICFyZXN0LnJlYWRPbmx5ICYmICFkaXNhYmxlZCk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZpZWxkU2VhcmNoJywge1xuICAgICAgICAnZXVpRmllbGRTZWFyY2gtaXNMb2FkaW5nJzogaXNMb2FkaW5nLFxuICAgICAgICAnZXVpRmllbGRTZWFyY2gtaXNDbGVhcmFibGUnOiBpc0NsZWFyYWJsZSxcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLWlzSW52YWxpZCc6IGlzSW52YWxpZFxuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBzdHlsZXMgPSBzdHlsZXNNZW1vaXplcihldWlGaWVsZFNlYXJjaFN0eWxlcyk7XG4gICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlGaWVsZFNlYXJjaCwgY29tcHJlc3NlZCA/IHN0eWxlcy5jb21wcmVzc2VkIDogc3R5bGVzLnVuY29tcHJlc3NlZCwgZnVsbFdpZHRoID8gc3R5bGVzLmZ1bGxXaWR0aCA6IHN0eWxlcy5mb3JtV2lkdGgsIChwcmVwZW5kIHx8IGFwcGVuZCkgJiYgc3R5bGVzLmluR3JvdXBdO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlGaWVsZFNlYXJjaC5jbGVhclNlYXJjaEJ1dHRvbkxhYmVsXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiQ2xlYXIgc2VhcmNoIGlucHV0XCJcbiAgICAgIH0sIGZ1bmN0aW9uIChjbGVhclNlYXJjaEJ1dHRvbkxhYmVsKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0LCB7XG4gICAgICAgICAgaWNvbjogXCJzZWFyY2hcIixcbiAgICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZCxcbiAgICAgICAgICBpc0Rpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICBjbGVhcjogaXNDbGVhcmFibGUgPyB7XG4gICAgICAgICAgICBvbkNsaWNrOiBfdGhpczMub25DbGVhcixcbiAgICAgICAgICAgICdhcmlhLWxhYmVsJzogY2xlYXJTZWFyY2hCdXR0b25MYWJlbCxcbiAgICAgICAgICAgICdkYXRhLXRlc3Qtc3Viaic6ICdjbGVhclNlYXJjaEJ1dHRvbidcbiAgICAgICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICAgICAgYXBwZW5kOiBhcHBlbmQsXG4gICAgICAgICAgcHJlcGVuZDogcHJlcGVuZFxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aVZhbGlkYXRhYmxlQ29udHJvbCwge1xuICAgICAgICAgIGlzSW52YWxpZDogaXNJbnZhbGlkXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJpbnB1dFwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgdHlwZTogXCJzZWFyY2hcIixcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICAgIG9uS2V5VXA6IGZ1bmN0aW9uIG9uS2V5VXAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5vbktleVVwKGUsIGluY3JlbWVudGFsLCBvblNlYXJjaCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgcmVmOiBfdGhpczMuc2V0UmVmXG4gICAgICAgIH0sIHJlc3QpKSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpRmllbGRTZWFyY2hDbGFzcywgXCJjb250ZXh0VHlwZVwiLCBGb3JtQ29udGV4dCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpRmllbGRTZWFyY2hDbGFzcywgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBpbmNyZW1lbnRhbDogZmFsc2UsXG4gIGNvbXByZXNzZWQ6IGZhbHNlLFxuICBpc0NsZWFyYWJsZTogdHJ1ZVxufSk7XG5FdWlGaWVsZFNlYXJjaENsYXNzLnByb3BUeXBlcyA9IHtcbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogRXhwYW5kIHRvIGZpbGwgMTAwJSBvZiB0aGUgcGFyZW50LlxuICAgICAqIERlZmF1bHRzIHRvIGBmdWxsV2lkdGhgIHByb3Agb2YgYDxFdWlGb3JtPmAuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBbRW50ZXJdIE9SIG9uIGNoYW5nZSBpZiB0aGUgaW5jcmVtZW50YWwgcHJvcCBpcyBgdHJ1ZWAuXG4gICAgICogSWYgeW91IGRvbid0IG5lZWQgdGhlIG9uW0VudGVyXSBmdW5jdGlvbmFsaXR5LCBwcmVmZXIgdXNpbmcgb25DaGFuZ2VcbiAgICAgKi9cbiAgb25TZWFyY2g6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCB0aGUgc2VhcmNoIHdpbGwgYmUgZXhlY3V0ZWQgKHRoYXQgaXMsIHRoZSBgb25TZWFyY2hgIHdpbGwgYmUgY2FsbGVkKSBhcyB0aGVcbiAgICAgKiB1c2VyIHR5cGVzLlxuICAgICAqL1xuICBpbmNyZW1lbnRhbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIHdoZW4gYHRydWVgIGNyZWF0ZXMgYSBzaG9ydGVyIGhlaWdodCBpbnB1dFxuICAgICAqL1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBTaG93cyBhIGJ1dHRvbiB0aGF0IHF1aWNrbHkgY2xlYXJzIGFueSBpbnB1dFxuICAgICAqL1xuICBpc0NsZWFyYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBiZWZvcmUgaW5wdXRcbiAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICovXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGFmdGVyIGlucHV0LlxuICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59O1xuZXhwb3J0IHZhciBFdWlGaWVsZFNlYXJjaCA9IHdpdGhFdWlTdHlsZXNNZW1vaXplcihFdWlGaWVsZFNlYXJjaENsYXNzKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gV2UgZG9uJ3Qgbm9ybWFsbHkgdXNlICdJJyBwcmVmaXhlcywgdGhpcyBmaWxlIGlzIGFuIGV4Y2VwdGlvblxuXG52YXIgQnJvd3NlckltcGwgPSB7XG4gIGlzRXZlbnRTdXBwb3J0ZWQ6IGZ1bmN0aW9uIGlzRXZlbnRTdXBwb3J0ZWQobmFtZSwgZWxlbWVudCkge1xuICAgIHJldHVybiBcIm9uXCIuY29uY2F0KG5hbWUpIGluIGVsZW1lbnQ7XG4gIH1cbn07XG5leHBvcnQgdmFyIEJyb3dzZXIgPSBPYmplY3QuZnJlZXplKEJyb3dzZXJJbXBsKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9ybUNvbnRyb2xTdHlsZXMgfSBmcm9tICcuLi9mb3JtLnN0eWxlcyc7XG5leHBvcnQgdmFyIGV1aUZpZWxkU2VhcmNoU3R5bGVzID0gZnVuY3Rpb24gZXVpRmllbGRTZWFyY2hTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBmb3JtU3R5bGVzID0gZXVpRm9ybUNvbnRyb2xTdHlsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIHtcbiAgICBldWlGaWVsZFNlYXJjaDogLyojX19QVVJFX18qL2NzcyhcIi13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7Jjo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiwmOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO31cIiwgZm9ybVN0eWxlcy5zaGFyZWQsIFwiICY6aW52YWxpZHtcIiwgZm9ybVN0eWxlcy5pbnZhbGlkLCBcIjt9Jjpmb2N1c3tcIiwgZm9ybVN0eWxlcy5mb2N1cywgXCI7fSY6ZGlzYWJsZWR7XCIsIGZvcm1TdHlsZXMuZGlzYWJsZWQsIFwiO30mW3JlYWRPbmx5XXtcIiwgZm9ybVN0eWxlcy5yZWFkT25seSwgXCI7fSY6YXV0b2ZpbGx7XCIsIGZvcm1TdHlsZXMuYXV0b0ZpbGwsIFwiO307bGFiZWw6ZXVpRmllbGRTZWFyY2g7XCIpLFxuICAgIC8vIFNraXAgdGhlIGNzcygpIG9uIHRoZSBkZWZhdWx0IGhlaWdodCB0byBhdm9pZCBnZW5lcmF0aW5nIGEgY2xhc3NOYW1lXG4gICAgdW5jb21wcmVzc2VkOiBmb3JtU3R5bGVzLnVuY29tcHJlc3NlZCxcbiAgICBjb21wcmVzc2VkOiAvKiNfX1BVUkVfXyovY3NzKGZvcm1TdHlsZXMuY29tcHJlc3NlZCwgXCI7bGFiZWw6Y29tcHJlc3NlZDtcIiksXG4gICAgLy8gU2tpcCB0aGUgY3NzKCkgb24gdGhlIGRlZmF1bHQgd2lkdGggdG8gYXZvaWQgZ2VuZXJhdGluZyBhIGNsYXNzTmFtZVxuICAgIGZvcm1XaWR0aDogZm9ybVN0eWxlcy5mb3JtV2lkdGgsXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGZvcm1TdHlsZXMuZnVsbFdpZHRoLCBcIjtsYWJlbDpmdWxsV2lkdGg7XCIpLFxuICAgIC8vIExheW91dCBtb2RpZmllcnNcbiAgICBpbkdyb3VwOiAvKiNfX1BVUkVfXyovY3NzKGZvcm1TdHlsZXMuaW5Hcm91cCwgXCI7bGFiZWw6aW5Hcm91cDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlGb3JtRXJyb3JUZXh0U3R5bGVzIH0gZnJvbSAnLi9mb3JtX2Vycm9yX3RleHQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1FcnJvclRleHQgPSBmdW5jdGlvbiBFdWlGb3JtRXJyb3JUZXh0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUVycm9yVGV4dCcsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlGb3JtRXJyb3JUZXh0U3R5bGVzKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogc3R5bGVzLmV1aUZvcm1FcnJvclRleHQsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIFwiYXJpYS1saXZlXCI6IFwicG9saXRlXCJcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlGb3JtRXJyb3JUZXh0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvbnRTaXplLCBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlGb3JtRXJyb3JUZXh0U3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUVycm9yVGV4dFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUZvcm1FcnJvclRleHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygncGFkZGluZy10b3AnLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgXCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiIGNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGFuZ2VyLCBcIjs7bGFiZWw6ZXVpRm9ybUVycm9yVGV4dDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlGb3JtSGVscFRleHRTdHlsZXMgfSBmcm9tICcuL2Zvcm1faGVscF90ZXh0LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtSGVscFRleHQgPSBmdW5jdGlvbiBFdWlGb3JtSGVscFRleHQoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtSGVscFRleHQnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpRm9ybUhlbHBUZXh0U3R5bGVzKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogc3R5bGVzLmV1aUZvcm1IZWxwVGV4dCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlGb3JtSGVscFRleHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aUZvcm1IZWxwVGV4dFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1IZWxwVGV4dFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUZvcm1IZWxwVGV4dDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdwYWRkaW5nLXRvcCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIiBcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnKSwgXCIgY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYXJrU2hhZGUsIFwiOztsYWJlbDpldWlGb3JtSGVscFRleHQ7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIiwgXCJoZWxwVGV4dFwiLCBcImlzSW52YWxpZFwiLCBcImVycm9yXCIsIFwibGFiZWxcIiwgXCJsYWJlbFR5cGVcIiwgXCJsYWJlbEFwcGVuZFwiLCBcImhhc0VtcHR5TGFiZWxTcGFjZVwiLCBcImZ1bGxXaWR0aFwiLCBcImRlc2NyaWJlZEJ5SWRzXCIsIFwiZGlzcGxheVwiLCBcImhhc0NoaWxkTGFiZWxcIiwgXCJpZFwiLCBcImlzRGlzYWJsZWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIENoaWxkcmVuLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUdlbmVyYXRlZEh0bWxJZCwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlTcGFjZXIgfSBmcm9tICcuLi8uLi9zcGFjZXInO1xuaW1wb3J0IHsgRXVpRm9ybUhlbHBUZXh0IH0gZnJvbSAnLi4vZm9ybV9oZWxwX3RleHQnO1xuaW1wb3J0IHsgRXVpRm9ybUVycm9yVGV4dCB9IGZyb20gJy4uL2Zvcm1fZXJyb3JfdGV4dCc7XG5pbXBvcnQgeyBFdWlGb3JtTGFiZWwgfSBmcm9tICcuLi9mb3JtX2xhYmVsJztcbmltcG9ydCB7IHVzZUZvcm1Db250ZXh0IH0gZnJvbSAnLi4vZXVpX2Zvcm1fY29udGV4dCc7XG5pbXBvcnQgeyBldWlGb3JtUm93U3R5bGVzIH0gZnJvbSAnLi9mb3JtX3Jvdy5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRElTUExBWVMgPSBbJ3JvdycsICdjb2x1bW5Db21wcmVzc2VkJywgJ2NlbnRlcicsICdjZW50ZXJDb21wcmVzc2VkJyxcbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqL1xuJ2NvbHVtbkNvbXByZXNzZWRTd2l0Y2gnLFxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICovXG4ncm93Q29tcHJlc3NlZCddO1xuZXhwb3J0IHZhciBFdWlGb3JtUm93ID0gZnVuY3Rpb24gRXVpRm9ybVJvdyhfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgaGVscFRleHQgPSBfcmVmLmhlbHBUZXh0LFxuICAgIGlzSW52YWxpZCA9IF9yZWYuaXNJbnZhbGlkLFxuICAgIGVycm9yID0gX3JlZi5lcnJvcixcbiAgICBsYWJlbCA9IF9yZWYubGFiZWwsXG4gICAgX3JlZiRsYWJlbFR5cGUgPSBfcmVmLmxhYmVsVHlwZSxcbiAgICBsYWJlbFR5cGUgPSBfcmVmJGxhYmVsVHlwZSA9PT0gdm9pZCAwID8gJ2xhYmVsJyA6IF9yZWYkbGFiZWxUeXBlLFxuICAgIGxhYmVsQXBwZW5kID0gX3JlZi5sYWJlbEFwcGVuZCxcbiAgICBfcmVmJGhhc0VtcHR5TGFiZWxTcGEgPSBfcmVmLmhhc0VtcHR5TGFiZWxTcGFjZSxcbiAgICBoYXNFbXB0eUxhYmVsU3BhY2UgPSBfcmVmJGhhc0VtcHR5TGFiZWxTcGEgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRoYXNFbXB0eUxhYmVsU3BhLFxuICAgIF9mdWxsV2lkdGggPSBfcmVmLmZ1bGxXaWR0aCxcbiAgICBkZXNjcmliZWRCeUlkcyA9IF9yZWYuZGVzY3JpYmVkQnlJZHMsXG4gICAgX3JlZiRkaXNwbGF5ID0gX3JlZi5kaXNwbGF5LFxuICAgIGRpc3BsYXkgPSBfcmVmJGRpc3BsYXkgPT09IHZvaWQgMCA/ICdyb3cnIDogX3JlZiRkaXNwbGF5LFxuICAgIF9yZWYkaGFzQ2hpbGRMYWJlbCA9IF9yZWYuaGFzQ2hpbGRMYWJlbCxcbiAgICBoYXNDaGlsZExhYmVsID0gX3JlZiRoYXNDaGlsZExhYmVsID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRoYXNDaGlsZExhYmVsLFxuICAgIHByb3BzSWQgPSBfcmVmLmlkLFxuICAgIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgX3VzZUZvcm1Db250ZXh0ID0gdXNlRm9ybUNvbnRleHQoKSxcbiAgICBkZWZhdWx0RnVsbFdpZHRoID0gX3VzZUZvcm1Db250ZXh0LmRlZmF1bHRGdWxsV2lkdGg7XG4gIHZhciBmdWxsV2lkdGggPSBfZnVsbFdpZHRoICE9PSBudWxsICYmIF9mdWxsV2lkdGggIT09IHZvaWQgMCA/IF9mdWxsV2lkdGggOiBkZWZhdWx0RnVsbFdpZHRoO1xuICB2YXIgaWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoe1xuICAgIGNvbmRpdGlvbmFsSWQ6IHByb3BzSWRcbiAgfSk7XG4gIHZhciBoYXNMYWJlbCA9IGxhYmVsIHx8IGxhYmVsQXBwZW5kO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGlzRm9jdXNlZCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0SXNGb2N1c2VkID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIG9uRm9jdXNXaXRoaW4gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNldElzRm9jdXNlZCh0cnVlKTtcbiAgfSwgW10pO1xuICB2YXIgb25CbHVyV2l0aGluID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzZXRJc0ZvY3VzZWQoZmFsc2UpO1xuICB9LCBbXSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybVJvdycsIHtcbiAgICAnZXVpRm9ybVJvdy0taGFzRW1wdHlMYWJlbFNwYWNlJzogaGFzRW1wdHlMYWJlbFNwYWNlLFxuICAgICdldWlGb3JtUm93LS1oYXNMYWJlbCc6IGhhc0xhYmVsXG4gIH0sIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlGb3JtUm93U3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRm9ybVJvdywgZnVsbFdpZHRoID8gc3R5bGVzLmZ1bGxXaWR0aCA6IHN0eWxlcy5mb3JtV2lkdGgsIHN0eWxlc1tkaXNwbGF5XV07XG4gIHZhciBvcHRpb25hbEhlbHBUZXh0cyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmICghaGVscFRleHQpIHJldHVybjtcbiAgICB2YXIgaGVscFRleHRzID0gQXJyYXkuaXNBcnJheShoZWxwVGV4dCkgPyBoZWxwVGV4dCA6IFtoZWxwVGV4dF07XG4gICAgcmV0dXJuIGhlbHBUZXh0cy5tYXAoZnVuY3Rpb24gKGhlbHBUZXh0LCBpKSB7XG4gICAgICB2YXIga2V5ID0gdHlwZW9mIGhlbHBUZXh0ID09PSAnc3RyaW5nJyA/IGhlbHBUZXh0IDogaTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1IZWxwVGV4dCwge1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgaWQ6IFwiXCIuY29uY2F0KGlkLCBcIi1oZWxwLVwiKS5jb25jYXQoaSksXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtUm93X190ZXh0XCJcbiAgICAgIH0sIGhlbHBUZXh0KTtcbiAgICB9KTtcbiAgfSwgW2hlbHBUZXh0LCBpZF0pO1xuICB2YXIgb3B0aW9uYWxFcnJvcnMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIShlcnJvciAmJiBpc0ludmFsaWQpKSByZXR1cm47XG4gICAgdmFyIGVycm9yVGV4dHMgPSBBcnJheS5pc0FycmF5KGVycm9yKSA/IGVycm9yIDogW2Vycm9yXTtcbiAgICByZXR1cm4gZXJyb3JUZXh0cy5tYXAoZnVuY3Rpb24gKGVycm9yLCBpKSB7XG4gICAgICB2YXIga2V5ID0gdHlwZW9mIGVycm9yID09PSAnc3RyaW5nJyA/IGVycm9yIDogaTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1FcnJvclRleHQsIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGlkOiBcIlwiLmNvbmNhdChpZCwgXCItZXJyb3ItXCIpLmNvbmNhdChpKSxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX3RleHRcIlxuICAgICAgfSwgZXJyb3IpO1xuICAgIH0pO1xuICB9LCBbZXJyb3IsIGlzSW52YWxpZCwgaWRdKTtcbiAgdmFyIGFyaWFEZXNjcmliZWRCeSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBkZXNjcmliaW5nSWRzID0gX3RvQ29uc3VtYWJsZUFycmF5KGRlc2NyaWJlZEJ5SWRzIHx8IFtdKTtcbiAgICBpZiAob3B0aW9uYWxIZWxwVGV4dHMgIT09IG51bGwgJiYgb3B0aW9uYWxIZWxwVGV4dHMgIT09IHZvaWQgMCAmJiBvcHRpb25hbEhlbHBUZXh0cy5sZW5ndGgpIHtcbiAgICAgIG9wdGlvbmFsSGVscFRleHRzLmZvckVhY2goZnVuY3Rpb24gKG9wdGlvbmFsSGVscFRleHQpIHtcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJpbmdJZHMucHVzaChvcHRpb25hbEhlbHBUZXh0LnByb3BzLmlkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAob3B0aW9uYWxFcnJvcnMgIT09IG51bGwgJiYgb3B0aW9uYWxFcnJvcnMgIT09IHZvaWQgMCAmJiBvcHRpb25hbEVycm9ycy5sZW5ndGgpIHtcbiAgICAgIG9wdGlvbmFsRXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIHJldHVybiBkZXNjcmliaW5nSWRzLnB1c2goZXJyb3IucHJvcHMuaWQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChkZXNjcmliaW5nSWRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRlc2NyaWJpbmdJZHMuam9pbignICcpO1xuICAgIH1cbiAgfSwgW2Rlc2NyaWJlZEJ5SWRzLCBvcHRpb25hbEhlbHBUZXh0cywgb3B0aW9uYWxFcnJvcnNdKTtcbiAgdmFyIGZpZWxkID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9yZWYyLCBfY2hpbGQkcHJvcHMkZGlzYWJsZWQ7XG4gICAgdmFyIGNoaWxkID0gQ2hpbGRyZW4ub25seShjaGlsZHJlbik7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIC8vIEFsbG93IHRoZSBjaGlsZCdzIGRpc2FibGVkIG9yIGlzRGlzYWJsZWQgcHJvcCB0byBzdXBlcmNlZGUgdGhlIGBpc0Rpc2FibGVkYFxuICAgICAgZGlzYWJsZWQ6IChfcmVmMiA9IChfY2hpbGQkcHJvcHMkZGlzYWJsZWQgPSBjaGlsZC5wcm9wcy5kaXNhYmxlZCkgIT09IG51bGwgJiYgX2NoaWxkJHByb3BzJGRpc2FibGVkICE9PSB2b2lkIDAgPyBfY2hpbGQkcHJvcHMkZGlzYWJsZWQgOiBjaGlsZC5wcm9wcy5pc0Rpc2FibGVkKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiBpc0Rpc2FibGVkLFxuICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBhcmlhRGVzY3JpYmVkQnlcbiAgICB9KTtcbiAgfSwgW2NoaWxkcmVuLCBpZCwgaXNEaXNhYmxlZCwgYXJpYURlc2NyaWJlZEJ5XSk7XG4gIHZhciBFbGVtZW50ID0gbGFiZWxUeXBlID09PSAnbGVnZW5kJyA/ICdmaWVsZHNldCcgOiAnZGl2JztcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBpZDogXCJcIi5jb25jYXQoaWQsIFwiLXJvd1wiKVxuICB9LCByZXN0KSwgaGFzTGFiZWwgPyBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fbGFiZWxXcmFwcGVyXCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlGb3JtTGFiZWwsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fbGFiZWxcIixcbiAgICBcImFyaWEtaW52YWxpZFwiOiBpc0ludmFsaWQsXG4gICAgaXNJbnZhbGlkOiBpc0ludmFsaWQsXG4gICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZCAmJiAhaXNEaXNhYmxlZCxcbiAgICBpZDogXCJcIi5jb25jYXQoaWQsIFwiLWxhYmVsXCIpXG4gICAgLy8gRXhjbHVzaXZlVW5pb24gc2hlbmFuaWdhbnNcbiAgfSwgbGFiZWxUeXBlID09PSAnbGVnZW5kJyA/IHtcbiAgICB0eXBlOiBsYWJlbFR5cGVcbiAgfSA6IHtcbiAgICB0eXBlOiBsYWJlbFR5cGUsXG4gICAgaHRtbEZvcjogaGFzQ2hpbGRMYWJlbCA/IGlkIDogdW5kZWZpbmVkXG4gIH0pLCBsYWJlbCksIGxhYmVsQXBwZW5kICYmICcgJywgbGFiZWxBcHBlbmQpIDogaGFzRW1wdHlMYWJlbFNwYWNlICYmIF9fX0Vtb3Rpb25KU1goRXVpU3BhY2VyLCB7XG4gICAgc2l6ZTogXCJtXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX2xhYmVsV3JhcHBlclwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fZmllbGRXcmFwcGVyXCIsXG4gICAgb25Gb2N1czogb25Gb2N1c1dpdGhpbixcbiAgICBvbkJsdXI6IG9uQmx1cldpdGhpblxuICB9LCBmaWVsZCwgb3B0aW9uYWxFcnJvcnMsIG9wdGlvbmFsSGVscFRleHRzKSk7XG59O1xuRXVpRm9ybVJvdy5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIERlZmF1bHRzIHRvIHJlbmRlcmluZyBhIGA8bGFiZWw+YCBidXQgaWYgcGFzc2VkIGAnbGVnZW5kJ2AgZm9yIGxhYmVsVHlwZSxcbiAgICAgKiB3aWxsIHJlbmRlciBib3RoIGEgYDxsZWdlbmQ+YCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRhaW5lciBhcyBhIGA8ZmllbGRzZXQ+YFxuICAgICAqL1xuICBsYWJlbFR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJsZWdlbmRcIl0pXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiAtIGBjb2x1bW5Db21wcmVzc2VkYCBjcmVhdGVzIGEgY29tcHJlc3NlZCBhbmQgaG9yaXpvbnRhbCBsYXlvdXRcbiAgICAgKiAtIGBjb2x1bW5Db21wcmVzc2VkU3dpdGNoYCAtICoqZGVwcmVjYXRlZCoqLCB1c2UgYGNvbHVtbkNvbXByZXNzZWRgIGluc3RlYWRcbiAgICAgKiAtIGBjZW50ZXJgL2BjZW50ZXJDb21wcmVzc2VkYCBoZWxwcyBhbGlnbiBub24taW5wdXQgY29udGVudCBiZXR0ZXIgd2l0aCBpbmxpbmUgZm9ybSBsYXlvdXRzXG4gICAgICogLSBgcm93Q29tcHJlc3NlZGAgLSAqKmRlcHJlY2F0ZWQqKiwgZG9lcyBub3QgY3VycmVudGx5IGFmZmVjdCBzdHlsaW5nXG4gICAgICovXG4gIC8qKlxuICAgICAqIC0gYGNvbHVtbkNvbXByZXNzZWRgIGNyZWF0ZXMgYSBjb21wcmVzc2VkIGFuZCBob3Jpem9udGFsIGxheW91dFxuICAgICAqIC0gYGNvbHVtbkNvbXByZXNzZWRTd2l0Y2hgIC0gKipkZXByZWNhdGVkKiosIHVzZSBgY29sdW1uQ29tcHJlc3NlZGAgaW5zdGVhZFxuICAgICAqIC0gYGNlbnRlcmAvYGNlbnRlckNvbXByZXNzZWRgIGhlbHBzIGFsaWduIG5vbi1pbnB1dCBjb250ZW50IGJldHRlciB3aXRoIGlubGluZSBmb3JtIGxheW91dHNcbiAgICAgKiAtIGByb3dDb21wcmVzc2VkYCAtICoqZGVwcmVjYXRlZCoqLCBkb2VzIG5vdCBjdXJyZW50bHkgYWZmZWN0IHN0eWxpbmdcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogVXNlZnVsIGZvciBpbmxpbmUgZm9ybSBsYXlvdXRzLCBwcmltYXJpbHkgZm9yIGNvbnRlbnQgdGhhdFxuICAgICAqIG5lZWRzIHRvIGJlIGFsaWduZWQgd2l0aCBpbnB1dHMgYnV0IGRvZXMgbm90IG5lZWQgYSBsYWJlbFxuICAgICAqL1xuICAvKipcbiAgICAgKiBVc2VmdWwgZm9yIGlubGluZSBmb3JtIGxheW91dHMsIHByaW1hcmlseSBmb3IgY29udGVudCB0aGF0XG4gICAgICogbmVlZHMgdG8gYmUgYWxpZ25lZCB3aXRoIGlucHV0cyBidXQgZG9lcyBub3QgbmVlZCBhIGxhYmVsXG4gICAgICovXG4gIGhhc0VtcHR5TGFiZWxTcGFjZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEV4cGFuZCB0byBmaWxsIDEwMCUgb2YgdGhlIHBhcmVudC5cbiAgICAgKiBEZWZhdWx0cyB0byBgZnVsbFdpZHRoYCBwcm9wIG9mIGA8RXVpRm9ybT5gLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIC8qKlxuICAgICAqIEV4cGFuZCB0byBmaWxsIDEwMCUgb2YgdGhlIHBhcmVudC5cbiAgICAgKiBEZWZhdWx0cyB0byBgZnVsbFdpZHRoYCBwcm9wIG9mIGA8RXVpRm9ybT5gLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIElEcyBvZiBhZGRpdGlvbmFsIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHBhcnQgb2YgY2hpbGRyZW4ncyBgYXJpYS1kZXNjcmliZWRieWBcbiAgICAgKi9cbiAgLyoqXG4gICAgICogSURzIG9mIGFkZGl0aW9uYWwgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUgcGFydCBvZiBjaGlsZHJlbidzIGBhcmlhLWRlc2NyaWJlZGJ5YFxuICAgICAqL1xuICBkZXNjcmliZWRCeUlkczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkKSxcbiAgLyoqXG4gICAgICogRXNjYXBlIGhhdGNoIHRvIG5vdCByZW5kZXIgZHVwbGljYXRlIGxhYmVscyBpZiB0aGUgY2hpbGQgYWxzbyByZW5kZXJzIGEgbGFiZWxcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRXNjYXBlIGhhdGNoIHRvIG5vdCByZW5kZXIgZHVwbGljYXRlIGxhYmVscyBpZiB0aGUgY2hpbGQgYWxzbyByZW5kZXJzIGEgbGFiZWxcbiAgICAgKi9cbiAgaGFzQ2hpbGRMYWJlbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIEFkZHMgYW4gZXh0cmEgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIGZvcm0gbGFiZWwgd2l0aG91dFxuICAgICAqIGJlaW5nIGNvbnRhaW5lZCBpbnNpZGUgdGhlIGZvcm0gbGFiZWwuIEdvb2QgZm9yIHRoaW5nc1xuICAgICAqIGxpa2UgZG9jdW1lbnRhdGlvbiBsaW5rcy5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogQWRkcyBhbiBleHRyYSBub2RlIHRvIHRoZSByaWdodCBvZiB0aGUgZm9ybSBsYWJlbCB3aXRob3V0XG4gICAgICogYmVpbmcgY29udGFpbmVkIGluc2lkZSB0aGUgZm9ybSBsYWJlbC4gR29vZCBmb3IgdGhpbmdzXG4gICAgICogbGlrZSBkb2N1bWVudGF0aW9uIGxpbmtzLlxuICAgICAqL1xuICBsYWJlbEFwcGVuZDogUHJvcFR5cGVzLmFueSxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIGVycm9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqICBBZGRzIGEgc2luZ2xlIG5vZGUvc3RyaW5nIG9yIGFuIGFycmF5IG9mIG5vZGVzL3N0cmluZ3MgYmVsb3cgdGhlIGlucHV0XG4gICAgICovXG4gIC8qKlxuICAgICAqICBBZGRzIGEgc2luZ2xlIG5vZGUvc3RyaW5nIG9yIGFuIGFycmF5IG9mIG5vZGVzL3N0cmluZ3MgYmVsb3cgdGhlIGlucHV0XG4gICAgICovXG4gIGhlbHBUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqICBQYXNzZWQgYWxvbmcgdG8gdGhlIGxhYmVsIGVsZW1lbnQ7IGFuZCB0byB0aGUgY2hpbGQgZmllbGQgZWxlbWVudCB3aGVuIGBkaXNhYmxlZGAgZG9lc24ndCBhbHJlYWR5IGV4aXN0IG9uIHRoZSBjaGlsZCBmaWVsZCBlbGVtZW50LlxuICAgICAqL1xuICAvKipcbiAgICAgKiAgUGFzc2VkIGFsb25nIHRvIHRoZSBsYWJlbCBlbGVtZW50OyBhbmQgdG8gdGhlIGNoaWxkIGZpZWxkIGVsZW1lbnQgd2hlbiBgZGlzYWJsZWRgIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBvbiB0aGUgY2hpbGQgZmllbGQgZWxlbWVudC5cbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlGb3JtVmFyaWFibGVzIH0gZnJvbSAnLi4vZm9ybS5zdHlsZXMnO1xuZXhwb3J0IHZhciBldWlGb3JtUm93U3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybVJvd1N0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgX2V1aUZvcm1WYXJpYWJsZXMgPSBldWlGb3JtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgbWF4V2lkdGggPSBfZXVpRm9ybVZhcmlhYmxlcy5tYXhXaWR0aCxcbiAgICBjb250cm9sSGVpZ2h0ID0gX2V1aUZvcm1WYXJpYWJsZXMuY29udHJvbEhlaWdodCxcbiAgICBjb250cm9sQ29tcHJlc3NlZEhlaWdodCA9IF9ldWlGb3JtVmFyaWFibGVzLmNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0O1xuICByZXR1cm4ge1xuICAgIGV1aUZvcm1Sb3c6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmZsZXg7Ky5ldWlCdXR0b257XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBldWlUaGVtZS5zaXplLmJhc2UpLCBcIjt9O2xhYmVsOmV1aUZvcm1Sb3c7XCIpLFxuICAgIC8vIFNraXAgY3NzYGAgdG8gYXZvaWQgZ2VuZXJhdGluZyBhbiBFbW90aW9uIGNsYXNzTmFtZVxuICAgIGZvcm1XaWR0aDogXCJcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygnbWF4LXdpZHRoJywgbWF4V2lkdGgpLCBcIlxcbiAgICBcIiksXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsV2lkdGg7XCIpLFxuICAgIC8vIFNraXAgY3NzYGAgdG8gYXZvaWQgZ2VuZXJhdGluZyBhbiBleHRyYSBjbGFzc05hbWVcbiAgICByb3c6IFwiXFxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgICByb3ctZ2FwOiBcIi5jb25jYXQoZXVpVGhlbWUuc2l6ZS54cywgXCI7XFxuXFxuICAgICAgLmV1aUZvcm1Sb3dfX2xhYmVsV3JhcHBlciB7XFxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICAgIH1cXG5cXG4gICAgICArIC5ldWlGb3JtUm93IHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGV1aVRoZW1lLnNpemUuYmFzZSksIFwiXFxuICAgICAgfVxcbiAgICBcIiksXG4gICAgLy8gTm8gZGlmZmVyZW5jZSBmcm9tIHRoZSB1bmNvbXByZXNzZWQgcm93IGZvciB0aGlzIGN1cnJlbnQgdGhlbWUgQUZBSUNUXG4gICAgLy8gVE9ETzogRGVwcmVjYXRlIHByb3BcbiAgICBnZXQgcm93Q29tcHJlc3NlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdztcbiAgICB9LFxuICAgIGNvbHVtbkNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6c3RyZXRjaDtjb2x1bW4tZ2FwOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOy5ldWlGb3JtUm93X19sYWJlbHtoeXBoZW5zOmF1dG87fS5ldWlGb3JtUm93X19sYWJlbFdyYXBwZXJ7ZmxleC1iYXNpczpjYWxjKDMzJSAtIFwiLCBldWlUaGVtZS5zaXplLnMsIFwiKTtcIiwgbG9naWNhbENTUygnbWluLXdpZHRoJywgMCksIFwiIGxpbmUtaGVpZ2h0OlwiLCBjb250cm9sQ29tcHJlc3NlZEhlaWdodCwgXCI7fS5ldWlGb3JtUm93X19maWVsZFdyYXBwZXJ7ZmxleC1iYXNpczo2NyU7XCIsIGxvZ2ljYWxDU1MoJ21pbi13aWR0aCcsIDApLCBcIjt9Ky5ldWlGb3JtUm93e1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgZXVpVGhlbWUuc2l6ZS5zKSwgXCI7fSY6aGFzKC5ldWlTd2l0Y2gpeyY6bm90KDpmaXJzdC1jaGlsZCl7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBldWlUaGVtZS5zaXplLm0pLCBcIjt9Jjpub3QoOmxhc3QtY2hpbGQpe1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgZXVpVGhlbWUuc2l6ZS5tKSwgXCI7fS5ldWlGb3JtUm93X19sYWJlbFdyYXBwZXJ7bGluZS1oZWlnaHQ6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7fX07bGFiZWw6Y29sdW1uQ29tcHJlc3NlZDtcIiksXG4gICAgLy8gSGFuZGxlZCBieSA6aGFzIENTUyBub3cgcmF0aGVyIHRoYW4gYSBzZXBhcmF0ZSBtb2RpZmllci9wcm9wXG4gICAgLy8gVE9ETzogRGVwcmVjYXRlIHByb3BcbiAgICBnZXQgY29sdW1uQ29tcHJlc3NlZFN3aXRjaCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbkNvbXByZXNzZWQ7XG4gICAgfSxcbiAgICAvLyBDZW50ZXIgZGlzcGxheSBpcyBwcmltYXJpbHkgZm9yIGlubGluZSBmb3JtIHJvd3MsIHdoaWNoIG1heSBoYXZlIGhhdmVcbiAgICAvLyBmaWVsZCBjb250ZW50IHRoYXQgaXMgc2hvcnRlciB0aGFuIGZvcm0gY29udHJvbHMgKGUuZy4gc3dpdGNoZXMsIHRleHQpLFxuICAgIC8vIGFuZCBzaG91bGQgdmVydGljYWxseSBjZW50ZXIgc2FpZCBjb250ZW50XG4gICAgY2VudGVyRGlzcGxheUNzczogZnVuY3Rpb24gY2VudGVyRGlzcGxheUNzcyhjb21wcmVzc2VkKSB7XG4gICAgICByZXR1cm4gXCJcXG4gICAgICAuZXVpRm9ybVJvd19fZmllbGRXcmFwcGVyIHtcXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ21pbi1oZWlnaHQnLCBjb21wcmVzc2VkID8gY29udHJvbENvbXByZXNzZWRIZWlnaHQgOiBjb250cm9sSGVpZ2h0KSwgXCJcXG4gICAgICB9XFxuICAgIFwiKTtcbiAgICB9LFxuICAgIGdldCBjZW50ZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2Nzcyh0aGlzLnJvdywgXCIgXCIsIHRoaXMuY2VudGVyRGlzcGxheUNzcyhmYWxzZSksIFwiOztsYWJlbDpjZW50ZXI7XCIpO1xuICAgIH0sXG4gICAgZ2V0IGNlbnRlckNvbXByZXNzZWQoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2Nzcyh0aGlzLnJvdywgXCIgXCIsIHRoaXMuY2VudGVyRGlzcGxheUNzcyh0cnVlKSwgXCI7O2xhYmVsOmNlbnRlckNvbXByZXNzZWQ7XCIpO1xuICAgIH1cbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJzaXplXCIsIFwibWFyZ2luXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUhvcml6b250YWxSdWxlU3R5bGVzIH0gZnJvbSAnLi9ob3Jpem9udGFsX3J1bGUuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydmdWxsJywgJ2hhbGYnLCAncXVhcnRlciddO1xuZXhwb3J0IHZhciBNQVJHSU5TID0gWydub25lJywgJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJywgJ3h4bCddO1xuZXhwb3J0IHZhciBFdWlIb3Jpem9udGFsUnVsZSA9IGZ1bmN0aW9uIEV1aUhvcml6b250YWxSdWxlKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnZnVsbCcgOiBfcmVmJHNpemUsXG4gICAgX3JlZiRtYXJnaW4gPSBfcmVmLm1hcmdpbixcbiAgICBtYXJnaW4gPSBfcmVmJG1hcmdpbiA9PT0gdm9pZCAwID8gJ2wnIDogX3JlZiRtYXJnaW4sXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUhvcml6b250YWxSdWxlJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUhvcml6b250YWxSdWxlU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpSG9yaXpvbnRhbFJ1bGUsIHN0eWxlc1tzaXplXSwgc3R5bGVzW21hcmdpbl1dO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImhyXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCkpO1xufTtcbkV1aUhvcml6b250YWxSdWxlLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgd2lkdGggb2YgdGhlIEhSLlxuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICBtYXJnaW46IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlIb3Jpem9udGFsUnVsZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUhvcml6b250YWxSdWxlU3R5bGVzKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlIb3Jpem9udGFsUnVsZTogLyojX19QVVJFX18qL2NzcyhcImJvcmRlcjpub25lO1wiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiksIFwiIGJhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmJvcmRlci5jb2xvciwgXCI7ZmxleC1zaHJpbms6MDtmbGV4LWdyb3c6MDs7bGFiZWw6ZXVpSG9yaXpvbnRhbFJ1bGU7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgZnVsbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsO1wiKSxcbiAgICBoYWxmOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzUwJScpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLWhvcml6b250YWwnLCAnYXV0bycpLCBcIjs7bGFiZWw6aGFsZjtcIiksXG4gICAgcXVhcnRlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcyNSUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ob3Jpem9udGFsJywgJ2F1dG8nKSwgXCI7O2xhYmVsOnF1YXJ0ZXI7XCIpLFxuICAgIC8vIE1hcmdpbnNcbiAgICBub25lOiAnJyxcbiAgICB4czogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUubSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUubCwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLnhsLCBcIjs7bGFiZWw6eGw7XCIpLFxuICAgIHh4bDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wic3R5bGVzTWVtb2l6ZXJcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcIm9uQ2xvc2VcIiwgXCJ0aXRsZVwiLCBcIm9uSGVpZ2h0Q2hhbmdlXCIsIFwidHJhbnNpdGlvblR5cGVcIiwgXCJ0cmFuc2l0aW9uRGlyZWN0aW9uXCIsIFwib25UcmFuc2l0aW9uQ29tcGxldGVcIiwgXCJvblVzZUtleWJvYXJkVG9OYXZpZ2F0ZVwiLCBcIml0ZW1zXCIsIFwiaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXhcIiwgXCJzaG93TmV4dFBhbmVsXCIsIFwic2hvd1ByZXZpb3VzUGFuZWxcIiwgXCJzaXplXCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB0YWJiYWJsZSB9IGZyb20gJ3RhYmJhYmxlJztcbmltcG9ydCB7IHdpdGhFdWlTdHlsZXNNZW1vaXplciwga2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSB9IGZyb20gJy4vY29udGV4dF9tZW51X2l0ZW0nO1xuaW1wb3J0IHsgZXVpQ29udGV4dE1lbnVQYW5lbFN0eWxlcyB9IGZyb20gJy4vY29udGV4dF9tZW51X3BhbmVsLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsncycsICdtJ107XG5leHBvcnQgdmFyIEV1aUNvbnRleHRNZW51UGFuZWxDbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlDb250ZXh0TWVudVBhbmVsQ2xhc3MocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbnRleHRNZW51UGFuZWxDbGFzcyk7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aUNvbnRleHRNZW51UGFuZWxDbGFzcywgW3Byb3BzXSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIl9pc01vdW50ZWRcIiwgZmFsc2UpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJiYWNrQnV0dG9uXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwYW5lbFwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaW5pdGlhbFBvcG92ZXJQYXJlbnRcIiwgbnVsbCk7XG4gICAgLy8gRmluZCBhbGwgdGFiYmFibGUgbWVudSBpdGVtcyBvbiBib3RoIHBhbmVsIGluaXQgYW5kXG4gICAgLy8gd2hlbmV2ZXIgYG1lbnVJdGVtc2AgcmVzZXRzIHdoZW4gYHByb3BzLml0ZW1zYCBjaGFuZ2VzXG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImZpbmRNZW51SXRlbXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJGl0ZW1zO1xuICAgICAgaWYgKCFfdGhpcy5wYW5lbCkgcmV0dXJuO1xuICAgICAgaWYgKCEoKF90aGlzJHByb3BzJGl0ZW1zID0gX3RoaXMucHJvcHMuaXRlbXMpICE9PSBudWxsICYmIF90aGlzJHByb3BzJGl0ZW1zICE9PSB2b2lkIDAgJiYgX3RoaXMkcHJvcHMkaXRlbXMubGVuZ3RoKSkgcmV0dXJuOyAvLyBXZSBvbmx5IG5lZWQgbWVudSBpdGVtcy9hcnJvdyBrZXkgbmF2aWdhdGlvbiBmb3IgdGhlIGBpdGVtc2AgQVBJXG4gICAgICBpZiAoX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCkgcmV0dXJuOyAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgbWVudSBpdGVtcywgbm8gbmVlZCB0byBjb250aW51ZVxuXG4gICAgICB2YXIgdGFiYmFibGVJdGVtcyA9IHRhYmJhYmxlKF90aGlzLnBhbmVsKTtcbiAgICAgIGlmICh0YWJiYWJsZUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbWVudUl0ZW1zOiB0YWJiYWJsZUl0ZW1zXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJmb2N1c01lbnVJdGVtXCIsIGZ1bmN0aW9uIChkaXJlY3Rpb24pIHtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSRtZW51SXRlbXM7XG4gICAgICB2YXIgaW5kZXhPZmZzZXQgPSBkaXJlY3Rpb24gPT09ICd1cCcgPyAtMSA6IDE7XG4gICAgICB2YXIgbmV4dEZvY3VzZWRJdGVtSW5kZXg7XG4gICAgICBpZiAoX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgdXNlcidzIGtleWJvYXJkIG5hdmlnYXRpb24gb2YgdGhlIG1lbnUsIHRoZW4gd2UnbGwgZm9jdXNcbiAgICAgICAgLy8gZWl0aGVyIHRoZSBmaXJzdCBvciBsYXN0IGl0ZW0uXG4gICAgICAgIG5leHRGb2N1c2VkSXRlbUluZGV4ID0gZGlyZWN0aW9uID09PSAndXAnID8gX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCAtIDEgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dEZvY3VzZWRJdGVtSW5kZXggPSBfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ICsgaW5kZXhPZmZzZXQ7XG4gICAgICAgIGlmIChuZXh0Rm9jdXNlZEl0ZW1JbmRleCA8IDApIHtcbiAgICAgICAgICBuZXh0Rm9jdXNlZEl0ZW1JbmRleCA9IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKG5leHRGb2N1c2VkSXRlbUluZGV4ID09PSBfdGhpcy5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgbmV4dEZvY3VzZWRJdGVtSW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZvY3VzZWRJdGVtSW5kZXg6IG5leHRGb2N1c2VkSXRlbUluZGV4XG4gICAgICB9KTtcbiAgICAgIChfdGhpcyRzdGF0ZSRtZW51SXRlbXMgPSBfdGhpcy5zdGF0ZS5tZW51SXRlbXNbbmV4dEZvY3VzZWRJdGVtSW5kZXhdKSA9PT0gbnVsbCB8fCBfdGhpcyRzdGF0ZSRtZW51SXRlbXMgPT09IHZvaWQgMCB8fCBfdGhpcyRzdGF0ZSRtZW51SXRlbXMuZm9jdXMoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gSWYgdGhpcyBwYW5lbCBjb250YWlucyBpdGVtcyB5b3UgY2FuIHVzZSB0aGUgbGVmdCBhcnJvdyBrZXkgdG8gZ28gYmFjayBhdCBhbnkgdGltZS5cbiAgICAgIC8vIEJ1dCBpZiBpdCBkb2Vzbid0IGNvbnRhaW4gaXRlbXMsIHRoZW4geW91IGhhdmUgdG8gZm9jdXMgb24gdGhlIGJhY2sgYnV0dG9uIHNwZWNpZmljYWxseSxcbiAgICAgIC8vIHNpbmNlIHRoZXJlIGNvdWxkIGJlIGNvbnRlbnQgaW5zaWRlIHRoZSBwYW5lbCB3aGljaCByZXF1aXJlcyB1c2Ugb2YgdGhlIGxlZnQgYXJyb3cga2V5LFxuICAgICAgLy8gZS5nLiB0ZXh0IGlucHV0cy5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzLml0ZW1zLFxuICAgICAgICBvbkNsb3NlID0gX3RoaXMkcHJvcHMub25DbG9zZSxcbiAgICAgICAgc2hvd1ByZXZpb3VzUGFuZWwgPSBfdGhpcyRwcm9wcy5zaG93UHJldmlvdXNQYW5lbDtcbiAgICAgIGlmIChvbkNsb3NlICYmIChpdGVtcyAhPT0gbnVsbCAmJiBpdGVtcyAhPT0gdm9pZCAwICYmIGl0ZW1zLmxlbmd0aCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBfdGhpcy5iYWNrQnV0dG9uIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IF90aGlzLnBhbmVsKSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkFSUk9XX0xFRlQpIHtcbiAgICAgICAgICBpZiAoc2hvd1ByZXZpb3VzUGFuZWwpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHNob3dQcmV2aW91c1BhbmVsKCk7XG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpdGVtcyAhPT0gbnVsbCAmJiBpdGVtcyAhPT0gdm9pZCAwICYmIGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgIGNhc2Uga2V5cy5UQUI6XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyBOT1RFOiBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlzIHN0YWxlIGlmIG5vdCB3cmFwcGVkIGluIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgICAgICAgICB2YXIgZm9jdXNlZEl0ZW1JbmRleCA9IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3luYyBvdXIgaW50ZXJuYWwgc3RhdGUgd2l0aCB0aGUgdXNlciB0YWJiaW5nIHRocm91Z2ggaXRlbXNcbiAgICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGZvY3VzZWRJdGVtSW5kZXg6IGZvY3VzZWRJdGVtSW5kZXggPj0gMCAmJiBmb2N1c2VkSXRlbUluZGV4IDwgX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCA/IGZvY3VzZWRJdGVtSW5kZXggOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2Uga2V5cy5BUlJPV19VUDpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBfdGhpcy5mb2N1c01lbnVJdGVtKCd1cCcpO1xuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIGtleXMuQVJST1dfRE9XTjpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBfdGhpcy5mb2N1c01lbnVJdGVtKCdkb3duJyk7XG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2Uga2V5cy5BUlJPV19SSUdIVDpcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5zaG93TmV4dFBhbmVsKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLnNob3dOZXh0UGFuZWwob25DbG9zZSAmJiBfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ID8gX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCAtIDEgLy8gQWNjb3VudCBmb3IgcGFuZWwgdGl0bGUgYmFjayBidXR0b25cbiAgICAgICAgICAgICAgOiBfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4KTtcbiAgICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlY2xhaW1Qb3BvdmVyRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB3YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXI6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIF90aGlzLnRha2VJbml0aWFsRm9jdXMoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25UcmFuc2l0aW9uQ29tcGxldGVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uVHJhbnNpdGlvbkNvbXBsZXRlKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uVHJhbnNpdGlvbkNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInBhbmVsUmVmXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5wYW5lbCA9IG5vZGU7XG4gICAgICBfdGhpcy51cGRhdGVIZWlnaHQoKTtcbiAgICAgIF90aGlzLmdldEluaXRpYWxQb3BvdmVyUGFyZW50KCk7XG4gICAgICBfdGhpcy5maW5kTWVudUl0ZW1zKCk7XG4gICAgfSk7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBwcmV2UHJvcHM6IHtcbiAgICAgICAgaXRlbXM6IF90aGlzLnByb3BzLml0ZW1zXG4gICAgICB9LFxuICAgICAgbWVudUl0ZW1zOiBbXSxcbiAgICAgIGZvY3VzZWRJdGVtSW5kZXg6IHByb3BzLm9uQ2xvc2UgJiYgcHJvcHMuaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXggIT0gbnVsbCAmJiBwcm9wcy5pbml0aWFsRm9jdXNlZEl0ZW1JbmRleCAhPT0gLTEgPyBwcm9wcy5pbml0aWFsRm9jdXNlZEl0ZW1JbmRleCArIDEgLy8gQWNjb3VudCBmb3IgcGFuZWwgdGl0bGUgYmFjayBidXR0b25cbiAgICAgIDogcHJvcHMuaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXgsXG4gICAgICBjdXJyZW50SGVpZ2h0OiB1bmRlZmluZWQsXG4gICAgICB3YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXI6IGZhbHNlLFxuICAgICAgdG9va0luaXRpYWxGb2N1czogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpQ29udGV4dE1lbnVQYW5lbENsYXNzLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlDb250ZXh0TWVudVBhbmVsQ2xhc3MsIFt7XG4gICAga2V5OiBcInRha2VJbml0aWFsRm9jdXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdGFrZUluaXRpYWxGb2N1cygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgLy8gR2l2ZSBwb3NpdGlvbmluZyB0aW1lIHRvIHJlbmRlciBiZWZvcmUgZm9jdXMgaXMgYXBwbGllZC4gT3RoZXJ3aXNlIHBhZ2UganVtcHMuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIV90aGlzMi5faXNNb3VudGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRG9uJ3QgdGFrZSBmb2N1cyB5ZXQgaWYgRXVpQ29udGV4dE1lbnUgaXMgaW4gYSBwb3BvdmVyXG4gICAgICAgIC8vIGFuZCB0aGUgcG9wb3ZlciBpcyBpbml0aWFsbHkgb3BlbmluZy90cmFuc2l0aW9uaW5nIGluXG4gICAgICAgIGlmIChfdGhpczIuaW5pdGlhbFBvcG92ZXJQYXJlbnQgJiYgX3RoaXMyLnN0YXRlLndhaXRpbmdGb3JJbml0aWFsUG9wb3Zlcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldHRpbmcgZm9jdXMgd2hpbGUgdHJhbnNpdGlvbmluZyBjYXVzZXMgdGhlIGFuaW1hdGlvbiB0byBnbGl0Y2gsIHNvIHdlIGhhdmUgdG8gd2FpdFxuICAgICAgICAvLyB1bnRpbCBpdCdzIGZpbmlzaGVkIGJlZm9yZSB3ZSBmb2N1cyBhbnl0aGluZy5cbiAgICAgICAgaWYgKF90aGlzMi5wcm9wcy50cmFuc2l0aW9uVHlwZSkge1xuICAgICAgICAgIHZhciBfdGhpczIkcGFuZWw7XG4gICAgICAgICAgLy8gSWYgdGhlIHBhbmVsIGlzIHRyYW5zaXRpb25pbmcsIHNldCBmb2N1cyB0byB0aGUgcGFuZWwgc28gdGhhdCB1c2VycyB1c2luZ1xuICAgICAgICAgIC8vIGFycm93IGtleXMgdGhhdCBhcmUgZmFzdCBjbGlja2VycyBkb24ndCBhY2NpZGVudGFsbHkgZ2V0IHN0cmFuZGVkIGZvY3VzXG4gICAgICAgICAgLy8gb3IgdHJpZ2dlciBrZXlzdHJva2VzIHdoZW4gaXQgc2hvdWxkbid0XG4gICAgICAgICAgKF90aGlzMiRwYW5lbCA9IF90aGlzMi5wYW5lbCkgPT09IG51bGwgfHwgX3RoaXMyJHBhbmVsID09PSB2b2lkIDAgfHwgX3RoaXMyJHBhbmVsLmZvY3VzKHtcbiAgICAgICAgICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbml0aWFsIGZvY3VzIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZCwgbm8gbmVlZCB0byBjb250aW51ZSBhbmQgcG90ZW50aWFsbHkgaGlqYWNrL2ZvY3VzIGZpZ2h0XG4gICAgICAgIGlmIChfdGhpczIuc3RhdGUudG9va0luaXRpYWxGb2N1cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGBpbml0aWFsRm9jdXNlZEl0ZW1JbmRleD17LTF9YCBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gcHJldmVudGluZyBpbml0aWFsIGl0ZW0gZm9jdXMgaXMgZGVzaXJlZFxuICAgICAgICBpZiAoX3RoaXMyLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgLy8gUmVzZXR0aW5nIHRoZSBmb2N1c2VkSXRlbUluZGV4IHRvIDAgYWxsb3dzIGtleWJvYXJkIHVwL2Rvd24gYmVoYXZpb3IgdG9cbiAgICAgICAgICAvLyBzdGlsbCB3b3JrIGNvcnJlY3RseSBsYXRlciBpZiB0aGUgcGFuZWwgaXMgbWFudWFsbHkgdGFiYmVkIGludG9cbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHRvb2tJbml0aWFsRm9jdXM6IHRydWUsXG4gICAgICAgICAgICBmb2N1c2VkSXRlbUluZGV4OiAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhbiBpdGVtIHNob3VsZCBiZSBmb2N1c2VkLCBmb2N1cyBpdCAoaWYgaXQgZXhpc3RzKVxuICAgICAgICBpZiAoX3RoaXMyLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggIT0gbnVsbCAmJiBfdGhpczIuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBmb2N1c2VkSXRlbSA9IF90aGlzMi5zdGF0ZS5tZW51SXRlbXNbX3RoaXMyLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXhdO1xuICAgICAgICAgIGlmIChmb2N1c2VkSXRlbSkge1xuICAgICAgICAgICAgZm9jdXNlZEl0ZW0uZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHRoZSBiYWNrIGJ1dHRvbiBwYW5lbCB0aXRsZSBpcyBwcmVzZW50LCBmb2N1cyBpdFxuICAgICAgICBpZiAoX3RoaXMyLmJhY2tCdXR0b24pIHtcbiAgICAgICAgICAvLyBGb2N1cyB0aGUgYmFjayBidXR0b24gZm9yIGJvdGggYGl0ZW1zYCBhbmQgYGNoaWxkcmVuYCBBUElzXG4gICAgICAgICAgX3RoaXMyLmJhY2tCdXR0b24uZm9jdXMoKTtcbiAgICAgICAgICAvLyBJZiBgaXRlbXNgLCBlbnN1cmUgb3VyIGZvY3VzZWQgaXRlbSBpbmRleCBpcyBjb3JyZWN0XG4gICAgICAgICAgaWYgKF90aGlzMi5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBmb2N1c2VkSXRlbUluZGV4OiAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb2N1cyBvbiB0aGUgcGFuZWwgYXMgYSBsYXN0IHJlc29ydC5cbiAgICAgICAgaWYgKF90aGlzMi5wYW5lbCAmJiAhX3RoaXMyLnBhbmVsLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgX3RoaXMyLnBhbmVsLmZvY3VzKCk7XG4gICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHRvb2tJbml0aWFsRm9jdXM6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoXywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJldlN0YXRlLm1lbnVJdGVtcyAhPT0gdGhpcy5zdGF0ZS5tZW51SXRlbXMpIHtcbiAgICAgICAgdGhpcy5maW5kTWVudUl0ZW1zKCk7XG4gICAgICB9XG4gICAgICAvLyBGb2N1cyBpc24ndCBhbHdheXMgcmVhZHkgdG8gYmUgdGFrZW4gb24gbW91bnQsIHNvIHdlIG5lZWQgdG8gY2FsbCBpdFxuICAgICAgLy8gb24gdXBkYXRlIGFzIHdlbGwganVzdCBpbiBjYXNlXG4gICAgICB0aGlzLnRha2VJbml0aWFsRm9jdXMoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAvLyBJZiBFdWlDb250ZXh0TWVudSBpcyB1c2VkIHdpdGhpbiBhbiBFdWlQb3BvdmVyLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIEV1aVBvcG92ZXIgdG86XG4gICAgICAvLyAxLiBDb3JyZWN0bHkgc2V0IGl0cyBgcmV0dXJuRm9jdXNgIHRvIHRoZSB0b2dnbGluZyBidXR0b24sXG4gICAgICAvLyAgICBzbyBmb2N1cyBpcyBjb3JyZWN0bHkgcmVzdG9yZWQgdG8gdGhlIHBvcG92ZXIgdG9nZ2xlIG9uIGNsb3NlXG4gICAgICAvLyAyLiBGaW5pc2ggaXRzIHJlYWN0LWZvY3VzLW9uIGBhdXRvRm9jdXNgIGJlaGF2aW9yIGFmdGVyIHRyYW5zaXRpb25pbmcgaW4sXG4gICAgICAvLyAgICBzbyB0aGUgcGFuZWwgY2FuIGhhbmRsZSBpdHMgb3duIGZvY3VzIHdpdGhvdXQgZm9jdXMgZmlnaHRpbmdcbiAgICAgIGlmICh0aGlzLmluaXRpYWxQb3BvdmVyUGFyZW50KSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFBvcG92ZXJQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLnJlY2xhaW1Qb3BvdmVyRm9jdXMsIHtcbiAgICAgICAgICBvbmNlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50YWtlSW5pdGlhbEZvY3VzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRpbml0aWFsUG9wb3ZlclA7XG4gICAgICAoX3RoaXMkaW5pdGlhbFBvcG92ZXJQID0gdGhpcy5pbml0aWFsUG9wb3ZlclBhcmVudCkgPT09IG51bGwgfHwgX3RoaXMkaW5pdGlhbFBvcG92ZXJQID09PSB2b2lkIDAgfHwgX3RoaXMkaW5pdGlhbFBvcG92ZXJQLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5yZWNsYWltUG9wb3ZlckZvY3VzKTtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1cGRhdGVIZWlnaHRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlSGVpZ2h0KCkge1xuICAgICAgdmFyIGN1cnJlbnRIZWlnaHQgPSB0aGlzLnBhbmVsID8gdGhpcy5wYW5lbC5jbGllbnRIZWlnaHQgOiAwO1xuICAgICAgaWYgKHRoaXMuc3RhdGUuaGVpZ2h0ICE9PSBjdXJyZW50SGVpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uSGVpZ2h0Q2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vbkhlaWdodENoYW5nZShjdXJyZW50SGVpZ2h0KTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGhlaWdodDogY3VycmVudEhlaWdodFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEluaXRpYWxQb3BvdmVyUGFyZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEluaXRpYWxQb3BvdmVyUGFyZW50KCkge1xuICAgICAgdmFyIF9wYXJlbnQkcGFyZW50Tm9kZTtcbiAgICAgIC8vIElmIGB0cmFuc2l0aW9uVHlwZWAgZXhpc3RzLCB0aGF0IG1lYW5zIHdlJ3JlIG5hdmlnYXRpbmcgYmV0d2VlbiBwYW5lbHNcbiAgICAgIC8vIGFuZCB0aGUgaW5pdGlhbCBwb3BvdmVyIGhhcyBhbHJlYWR5IGxvYWRlZCwgc28gd2Ugc2hvdWxkbid0IG5lZWQgdGhpcyBsb2dpY1xuICAgICAgaWYgKHRoaXMucHJvcHMudHJhbnNpdGlvblR5cGUpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5wYW5lbCkgcmV0dXJuO1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFuZWwucGFyZW50Tm9kZTtcbiAgICAgIGlmICghcGFyZW50KSByZXR1cm47XG4gICAgICB2YXIgaGFzRXVpQ29udGV4dE1lbnVQYXJlbnQgPSBwYXJlbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdldWlDb250ZXh0TWVudScpO1xuXG4gICAgICAvLyBJdCdzIHBvc3NpYmxlIHRvIHVzZSBhbiBFdWlDb250ZXh0TWVudVBhbmVsIGRpcmVjdGx5IGluIGEgcG9wb3ZlciB3aXRob3V0XG4gICAgICAvLyBhbiBFdWlDb250ZXh0TWVudSwgc28gd2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0IHdoZW4gc2VhcmNoaW5nIHBhcmVudCBub2Rlc1xuICAgICAgdmFyIHBvcG92ZXJQYXJlbnQgPSBoYXNFdWlDb250ZXh0TWVudVBhcmVudCA/IHBhcmVudCA9PT0gbnVsbCB8fCBwYXJlbnQgPT09IHZvaWQgMCB8fCAoX3BhcmVudCRwYXJlbnROb2RlID0gcGFyZW50LnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9wYXJlbnQkcGFyZW50Tm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BhcmVudCRwYXJlbnROb2RlLnBhcmVudE5vZGUgOiBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgIGlmICghcG9wb3ZlclBhcmVudCkgcmV0dXJuO1xuICAgICAgdmFyIGhhc1BvcG92ZXJQYXJlbnQgPSAhIXBvcG92ZXJQYXJlbnQuZGF0YXNldC5wb3BvdmVyUGFuZWw7XG4gICAgICBpZiAoIWhhc1BvcG92ZXJQYXJlbnQpIHJldHVybjtcbiAgICAgIHRoaXMuaW5pdGlhbFBvcG92ZXJQYXJlbnQgPSBwb3BvdmVyUGFyZW50O1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHdhaXRpbmdGb3JJbml0aWFsUG9wb3ZlcjogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBzdHlsZXNNZW1vaXplciA9IF90aGlzJHByb3BzMi5zdHlsZXNNZW1vaXplcixcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczIuY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgIG9uQ2xvc2UgPSBfdGhpcyRwcm9wczIub25DbG9zZSxcbiAgICAgICAgdGl0bGUgPSBfdGhpcyRwcm9wczIudGl0bGUsXG4gICAgICAgIG9uSGVpZ2h0Q2hhbmdlID0gX3RoaXMkcHJvcHMyLm9uSGVpZ2h0Q2hhbmdlLFxuICAgICAgICB0cmFuc2l0aW9uVHlwZSA9IF90aGlzJHByb3BzMi50cmFuc2l0aW9uVHlwZSxcbiAgICAgICAgdHJhbnNpdGlvbkRpcmVjdGlvbiA9IF90aGlzJHByb3BzMi50cmFuc2l0aW9uRGlyZWN0aW9uLFxuICAgICAgICBvblRyYW5zaXRpb25Db21wbGV0ZSA9IF90aGlzJHByb3BzMi5vblRyYW5zaXRpb25Db21wbGV0ZSxcbiAgICAgICAgb25Vc2VLZXlib2FyZFRvTmF2aWdhdGUgPSBfdGhpcyRwcm9wczIub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUsXG4gICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMyLml0ZW1zLFxuICAgICAgICBpbml0aWFsRm9jdXNlZEl0ZW1JbmRleCA9IF90aGlzJHByb3BzMi5pbml0aWFsRm9jdXNlZEl0ZW1JbmRleCxcbiAgICAgICAgc2hvd05leHRQYW5lbCA9IF90aGlzJHByb3BzMi5zaG93TmV4dFBhbmVsLFxuICAgICAgICBzaG93UHJldmlvdXNQYW5lbCA9IF90aGlzJHByb3BzMi5zaG93UHJldmlvdXNQYW5lbCxcbiAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzMi5zaXplLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29udGV4dE1lbnVQYW5lbCcsIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgc3R5bGVzID0gc3R5bGVzTWVtb2l6ZXIoZXVpQ29udGV4dE1lbnVQYW5lbFN0eWxlcyk7XG4gICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlDb250ZXh0TWVudVBhbmVsLCB0cmFuc2l0aW9uRGlyZWN0aW9uICYmIHRyYW5zaXRpb25UeXBlICYmIHN0eWxlc1t0cmFuc2l0aW9uRGlyZWN0aW9uXVt0cmFuc2l0aW9uVHlwZV1dO1xuICAgICAgdmFyIHBhbmVsVGl0bGUgPSB0aXRsZSAmJiBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51SXRlbSwge1xuICAgICAgICBjc3M6IHN0eWxlcy5ldWlDb250ZXh0TWVudVBhbmVsX190aXRsZSxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51UGFuZWxfX3RpdGxlXCIsXG4gICAgICAgIG9uQ2xpY2s6IG9uQ2xvc2UsXG4gICAgICAgIGJ1dHRvblJlZjogZnVuY3Rpb24gYnV0dG9uUmVmKG5vZGUpIHtcbiAgICAgICAgICBpZiAob25DbG9zZSkgX3RoaXMzLmJhY2tCdXR0b24gPSBub2RlO1xuICAgICAgICB9LFxuICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IG9uQ2xvc2UgPyAnY29udGV4dE1lbnVQYW5lbFRpdGxlQnV0dG9uJyA6ICdjb250ZXh0TWVudVBhbmVsVGl0bGUnLFxuICAgICAgICBpY29uOiBvbkNsb3NlICYmICdhcnJvd0xlZnQnXG4gICAgICB9LCB0aXRsZSk7XG4gICAgICB2YXIgY29udGVudCA9IGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA/IGl0ZW1zLm1hcChmdW5jdGlvbiAoTWVudUl0ZW0pIHtcbiAgICAgICAgdmFyIGNsb25lUHJvcHMgPSB7fTtcbiAgICAgICAgaWYgKHNpemUpIHtcbiAgICAgICAgICBjbG9uZVByb3BzLnNpemUgPSBzaXplO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNZW51SXRlbS50eXBlID09PSBFdWlDb250ZXh0TWVudUl0ZW0gPyAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KE1lbnVJdGVtLCBjbG9uZVByb3BzKSA6IE1lbnVJdGVtO1xuICAgICAgfSkgOiBjaGlsZHJlbjtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgcmVmOiB0aGlzLnBhbmVsUmVmLFxuICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBvbktleURvd246IHRoaXMub25LZXlEb3duLFxuICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgIG9uQW5pbWF0aW9uRW5kOiB0aGlzLm9uVHJhbnNpdGlvbkNvbXBsZXRlXG4gICAgICB9LCByZXN0KSwgcGFuZWxUaXRsZSwgX19fRW1vdGlvbkpTWChFdWlSZXNpemVPYnNlcnZlciwge1xuICAgICAgICBvblJlc2l6ZTogZnVuY3Rpb24gb25SZXNpemUoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMy51cGRhdGVIZWlnaHQoKTtcbiAgICAgICAgfVxuICAgICAgfSwgZnVuY3Rpb24gKHJlc2l6ZVJlZikge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgcmVmOiByZXNpemVSZWZcbiAgICAgICAgfSwgY29udGVudCk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFyIG5lZWRzVXBkYXRlID0gZmFsc2U7XG4gICAgICB2YXIgbmV4dFN0YXRlID0ge307XG5cbiAgICAgIC8vIENsZWFyIHJlZnMgdG8gbWVudUl0ZW1zIGlmIHdlJ3JlIGdldHRpbmcgbmV3IG9uZXMuXG4gICAgICBpZiAobmV4dFByb3BzLml0ZW1zICE9PSBwcmV2U3RhdGUucHJldlByb3BzLml0ZW1zKSB7XG4gICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgbmV4dFN0YXRlLm1lbnVJdGVtcyA9IFtdO1xuICAgICAgICBuZXh0U3RhdGUucHJldlByb3BzID0ge1xuICAgICAgICAgIGl0ZW1zOiBuZXh0UHJvcHMuaXRlbXNcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkc1VwZGF0ZSkge1xuICAgICAgICByZXR1cm4gbmV4dFN0YXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpQ29udGV4dE1lbnVQYW5lbENsYXNzLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGl0ZW1zOiBbXVxufSk7XG5FdWlDb250ZXh0TWVudVBhbmVsQ2xhc3MucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBEZXRlcm1pbmVzIHRoZSBpbml0aWFsbHkgZm9jdXNlZCBtZW51IGl0ZW0gZm9yIGtleWJvYXJkIGFuZCBzY3JlZW4gcmVhZGVyIHVzZXJzLlxuICAgICAgICpcbiAgICAgICAqIENhbiBiZSBzZXQgdG8gYC0xYCB0byBwcmV2ZW50IGF1dG9mb2N1cyAoYW4gdW5jb21tb24gY2FzZSB0aGF0IG11c3QgaGF2ZVxuICAgICAgICoga2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSBhY2NvdW50ZWQgZm9yIG1hbnVhbGx5IGlmIHVzZWQpXG4gICAgICAgKi9cbiAgaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGl0ZW1zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkKSxcbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uSGVpZ2h0Q2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25UcmFuc2l0aW9uQ29tcGxldGU6IFByb3BUeXBlcy5mdW5jLFxuICBvblVzZUtleWJvYXJkVG9OYXZpZ2F0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIHNob3dOZXh0UGFuZWw6IFByb3BUeXBlcy5mdW5jLFxuICBzaG93UHJldmlvdXNQYW5lbDogUHJvcFR5cGVzLmZ1bmMsXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcbiAgdHJhbnNpdGlvbkRpcmVjdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcIm5leHRcIiwgXCJwcmV2aW91c1wiXSksXG4gIHRyYW5zaXRpb25UeXBlOiBQcm9wVHlwZXMub25lT2YoW1wiaW5cIiwgXCJvdXRcIl0pLFxuICAvKipcbiAgICAgICAqIEFsdGVycyB0aGUgc2l6ZSBvZiB0aGUgaXRlbXMgYW5kIHRoZSB0aXRsZVxuICAgICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnlcbn07XG5leHBvcnQgdmFyIEV1aUNvbnRleHRNZW51UGFuZWwgPSB3aXRoRXVpU3R5bGVzTWVtb2l6ZXIoRXVpQ29udGV4dE1lbnVQYW5lbENsYXNzKTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaGFzUGFuZWxcIiwgXCJpY29uXCIsIFwiYnV0dG9uUmVmXCIsIFwiZGlzYWJsZWRcIiwgXCJsYXlvdXRBbGlnblwiLCBcInRvb2xUaXBDb250ZW50XCIsIFwidG9vbFRpcFByb3BzXCIsIFwiaHJlZlwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInNpemVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzLCBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIGNsb25lRWxlbWVudFdpdGhDc3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IGV1aUNvbnRleHRNZW51SXRlbVN0eWxlcyB9IGZyb20gJy4vY29udGV4dF9tZW51X2l0ZW0uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nXTtcbnZhciBsYXlvdXRBbGlnblRvQ2xhc3NOYW1lcyA9IHtcbiAgY2VudGVyOiBudWxsLFxuICB0b3A6ICdldWlDb250ZXh0TWVudV9faXRlbUxheW91dC0tdG9wJyxcbiAgYm90dG9tOiAnZXVpQ29udGV4dE1lbnVfX2l0ZW1MYXlvdXQtLWJvdHRvbSdcbn07XG5leHBvcnQgdmFyIExBWU9VVF9BTElHTiA9IGtleXNPZihsYXlvdXRBbGlnblRvQ2xhc3NOYW1lcyk7XG5leHBvcnQgdmFyIEV1aUNvbnRleHRNZW51SXRlbSA9IGZ1bmN0aW9uIEV1aUNvbnRleHRNZW51SXRlbShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgaGFzUGFuZWwgPSBfcmVmLmhhc1BhbmVsLFxuICAgIGljb24gPSBfcmVmLmljb24sXG4gICAgYnV0dG9uUmVmID0gX3JlZi5idXR0b25SZWYsXG4gICAgX2Rpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBfcmVmJGxheW91dEFsaWduID0gX3JlZi5sYXlvdXRBbGlnbixcbiAgICBsYXlvdXRBbGlnbiA9IF9yZWYkbGF5b3V0QWxpZ24gPT09IHZvaWQgMCA/ICdjZW50ZXInIDogX3JlZiRsYXlvdXRBbGlnbixcbiAgICB0b29sVGlwQ29udGVudCA9IF9yZWYudG9vbFRpcENvbnRlbnQsXG4gICAgdG9vbFRpcFByb3BzID0gX3JlZi50b29sVGlwUHJvcHMsXG4gICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICByZWwgPSBfcmVmLnJlbCxcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgZGlzYWJsZWQgPSBfZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbnRleHRNZW51SXRlbScsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlDb250ZXh0TWVudUl0ZW1TdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlDb250ZXh0TWVudUl0ZW0sIHN0eWxlcy5zaXplc1tzaXplXSwgc3R5bGVzLmxheW91dEFsaWduW2xheW91dEFsaWduXSwgZGlzYWJsZWQgJiYgc3R5bGVzLmRpc2FibGVkXTtcbiAgdmFyIGljb25JbnN0YW5jZSA9IGljb24gJiYgKHR5cGVvZiBpY29uID09PSAnc3RyaW5nJyA/IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IGljb24sXG4gICAgc2l6ZTogXCJtXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X19pY29uXCIsXG4gICAgY3NzOiBzdHlsZXMuZXVpQ29udGV4dE1lbnVfX2ljb24sXG4gICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcbiAgfSkgOlxuICAvLyBBc3N1bWUgaXQncyBhbHJlYWR5IGFuIGluc3RhbmNlIG9mIGFuIGljb24uXG4gIGNsb25lRWxlbWVudFdpdGhDc3MoaWNvbiwge1xuICAgIGNzczogc3R5bGVzLmV1aUNvbnRleHRNZW51X19pY29uXG4gIH0pKTtcbiAgdmFyIGFycm93ID0gaGFzUGFuZWwgJiYgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJhcnJvd1JpZ2h0XCIsXG4gICAgc2l6ZTogXCJtXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X19hcnJvd1wiLFxuICAgIGNzczogc3R5bGVzLmV1aUNvbnRleHRNZW51SXRlbV9fYXJyb3dcbiAgfSk7XG4gIHZhciB0ZXh0U3R5bGVzID0gW3N0eWxlcy50ZXh0LmV1aUNvbnRleHRNZW51SXRlbV9fdGV4dCwgc2l6ZSA9PT0gJ3MnICYmIHN0eWxlcy50ZXh0LnNdO1xuICB2YXIgYnV0dG9uQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIGljb25JbnN0YW5jZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudUl0ZW1fX3RleHRcIixcbiAgICBjc3M6IHRleHRTdHlsZXNcbiAgfSwgY2hpbGRyZW4pLCBhcnJvdyk7XG4gIHZhciBidXR0b247XG4gIC8vIDxhPiBlbGVtZW50cyBkb24ndCByZXNwZWN0IHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZS4gU28gaWYgd2UncmUgZGlzYWJsZWQsIHdlJ2xsIGp1c3QgcHJldGVuZFxuICAvLyB0aGlzIGlzIGEgYnV0dG9uIGFuZCBwaWdneWJhY2sgb2ZmIGl0cyBkaXNhYmxlZCBzdHlsZXMuXG4gIGlmIChocmVmICYmICFkaXNhYmxlZCkge1xuICAgIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgICBidXR0b24gPSBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgYnV0dG9uQ29udGVudCk7XG4gIH0gZWxzZSBpZiAoaHJlZiB8fCByZXN0Lm9uQ2xpY2sgfHwgdG9vbFRpcENvbnRlbnQpIHtcbiAgICBidXR0b24gPSBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgIHJlZjogYnV0dG9uUmVmXG4gICAgfSwgcmVzdCksIGJ1dHRvbkNvbnRlbnQpO1xuICB9IGVsc2Uge1xuICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICByZWY6IGJ1dHRvblJlZlxuICAgIH0sIHJlc3QpLCBidXR0b25Db250ZW50KTtcbiAgfVxuICBpZiAodG9vbFRpcENvbnRlbnQpIHtcbiAgICB2YXIgYW5jaG9yQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aS1kaXNwbGF5QmxvY2snLCB0b29sVGlwUHJvcHMgPT09IG51bGwgfHwgdG9vbFRpcFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0b29sVGlwUHJvcHMuYW5jaG9yQ2xhc3NOYW1lKTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCBfZXh0ZW5kcyh7XG4gICAgICBwb3NpdGlvbjogXCJyaWdodFwiXG4gICAgfSwgdG9vbFRpcFByb3BzLCB7XG4gICAgICBhbmNob3JDbGFzc05hbWU6IGFuY2hvckNsYXNzZXMsXG4gICAgICBjb250ZW50OiB0b29sVGlwQ29udGVudFxuICAgIH0pLCBidXR0b24pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidXR0b247XG4gIH1cbn07XG5FdWlDb250ZXh0TWVudUl0ZW0ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcbiAgaGFzUGFuZWw6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFJlcXVpcmVkIGlmIHVzaW5nIGEgdG9vbHRpcC4gQWRkIGFuIG9wdGlvbmFsIHRvb2x0aXAgb24gaG92ZXJcbiAgICAgKi9cbiAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBPcHRpb25hbCBjb25maWd1cmF0aW9uIHRvIHBhc3MgdG8gdGhlIHVuZGVybHlpbmcgW0V1aVRvb2xUaXBdKC8jL2Rpc3BsYXkvdG9vbHRpcCkuXG4gICAgICogQWNjZXB0cyBhbnkgcHJvcCB0aGF0IEV1aVRvb2xUaXAgZG9lcywgZXhjZXB0IGZvciBgY29udGVudGAgYW5kIGBjaGlsZHJlbmAuXG4gICAgICovXG4gIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIEhvdyB0byBhbGlnbiBpY29uIHdpdGggY29udGVudCBvZiBidXR0b25cbiAgICAgKi9cbiAgbGF5b3V0QWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJjZW50ZXJcIiwgXCJ0b3BcIiwgXCJib3R0b21cIl0pLFxuICAvKipcbiAgICAgKiBSZWR1Y2UgdGhlIHNpemUgdG8gYHNgIHdoZW4gaW4gbmVlZCBvZiBhIG1vcmUgY29tcHJlc3NlZCBtZW51XG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MsIGV1aUZvbnRTaXplIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiNGFrNHM4LWV1aUNvbnRleHRNZW51SXRlbV9fYXJyb3dcIixcbiAgc3R5bGVzOiBcImFsaWduLXNlbGY6ZmxleC1lbmQ7bGFiZWw6ZXVpQ29udGV4dE1lbnVJdGVtX19hcnJvdztcIlxufSA6IHtcbiAgbmFtZTogXCI0YWs0czgtZXVpQ29udGV4dE1lbnVJdGVtX19hcnJvd1wiLFxuICBzdHlsZXM6IFwiYWxpZ24tc2VsZjpmbGV4LWVuZDtsYWJlbDpldWlDb250ZXh0TWVudUl0ZW1fX2Fycm93O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwibzFnZzIyLWV1aUNvbnRleHRNZW51SXRlbV9fdGV4dFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO2xhYmVsOmV1aUNvbnRleHRNZW51SXRlbV9fdGV4dDtcIlxufSA6IHtcbiAgbmFtZTogXCJvMWdnMjItZXVpQ29udGV4dE1lbnVJdGVtX190ZXh0XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47bGFiZWw6ZXVpQ29udGV4dE1lbnVJdGVtX190ZXh0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWx6b2hjcy1ldWlDb250ZXh0TWVudV9faWNvblwiLFxuICBzdHlsZXM6IFwiZmxleC1zaHJpbms6MDtsYWJlbDpldWlDb250ZXh0TWVudV9faWNvbjtcIlxufSA6IHtcbiAgbmFtZTogXCIxbHpvaGNzLWV1aUNvbnRleHRNZW51X19pY29uXCIsXG4gIHN0eWxlczogXCJmbGV4LXNocmluazowO2xhYmVsOmV1aUNvbnRleHRNZW51X19pY29uO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMW1zYWV0Mi1ib3R0b21cIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmZsZXgtZW5kO2xhYmVsOmJvdHRvbTtcIlxufSA6IHtcbiAgbmFtZTogXCIxbXNhZXQyLWJvdHRvbVwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6ZmxleC1lbmQ7bGFiZWw6Ym90dG9tO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWdud2J2ZC10b3BcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bGFiZWw6dG9wO1wiXG59IDoge1xuICBuYW1lOiBcIjFnbndidmQtdG9wXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2xhYmVsOnRvcDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY2ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjgzOTFkYi1jZW50ZXJcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmNlbnRlcjtsYWJlbDpjZW50ZXI7XCJcbn0gOiB7XG4gIG5hbWU6IFwiODM5MWRiLWNlbnRlclwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6Y2VudGVyO2xhYmVsOmNlbnRlcjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlDb250ZXh0TWVudUl0ZW1TdHlsZXMgPSBmdW5jdGlvbiBldWlDb250ZXh0TWVudUl0ZW1TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlDb250ZXh0TWVudUl0ZW06IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmZsZXg7Z2FwOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiO1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIFwiLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiIGNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7b3V0bGluZS1vZmZzZXQ6LVwiLCBldWlUaGVtZS5mb2N1cy53aWR0aCwgXCI7Jjp3aGVyZShhLCBidXR0b24pOm5vdCg6ZGlzYWJsZWQpeyY6aG92ZXIsJjpmb2N1c3t0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30mOmZvY3Vze2JhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmZvY3VzLmJhY2tncm91bmRDb2xvciwgXCI7fX07bGFiZWw6ZXVpQ29udGV4dE1lbnVJdGVtO1wiKSxcbiAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0LCBcIjtjdXJzb3I6ZGVmYXVsdDs7bGFiZWw6ZGlzYWJsZWQ7XCIpLFxuICAgIGxheW91dEFsaWduOiB7XG4gICAgICBjZW50ZXI6IF9yZWY2LFxuICAgICAgdG9wOiBfcmVmNSxcbiAgICAgIGJvdHRvbTogX3JlZjRcbiAgICB9LFxuICAgIHNpemVzOiB7XG4gICAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwicGFkZGluZzpcIiwgZXVpVGhlbWUuc2l6ZS5tLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgICBzOiAvKiNfX1BVUkVfXyovY3NzKFwicGFkZGluZzpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6cztcIilcbiAgICB9LFxuICAgIC8vIENoaWxkcmVuXG4gICAgZXVpQ29udGV4dE1lbnVfX2ljb246IF9yZWYzLFxuICAgIHRleHQ6IHtcbiAgICAgIGV1aUNvbnRleHRNZW51SXRlbV9fdGV4dDogX3JlZjIsXG4gICAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7O2xhYmVsOnM7XCIpXG4gICAgfSxcbiAgICBldWlDb250ZXh0TWVudUl0ZW1fX2Fycm93OiBfcmVmXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBtYXRoV2l0aFVuaXRzLCBldWlDYW5BbmltYXRlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlDb250ZXh0TWVudVZhcmlhYmxlcyA9IGZ1bmN0aW9uIGV1aUNvbnRleHRNZW51VmFyaWFibGVzKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBwYW5lbFdpZHRoOiBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLnNpemUuYmFzZSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICogMTY7XG4gICAgfSlcbiAgfTtcbn07XG5leHBvcnQgdmFyIGV1aUNvbnRleHRNZW51U3R5bGVzID0gZnVuY3Rpb24gZXVpQ29udGV4dE1lbnVTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIF9ldWlDb250ZXh0TWVudVZhcmlhYiA9IGV1aUNvbnRleHRNZW51VmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgcGFuZWxXaWR0aCA9IF9ldWlDb250ZXh0TWVudVZhcmlhYi5wYW5lbFdpZHRoO1xuICByZXR1cm4ge1xuICAgIGV1aUNvbnRleHRNZW51OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgcGFuZWxXaWR0aCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIiBwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIFwiO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOmhlaWdodCBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCI7fTtsYWJlbDpldWlDb250ZXh0TWVudTtcIilcbiAgfTtcbn07IiwgInZhciBfdGVtcGxhdGVPYmplY3QsIF90ZW1wbGF0ZU9iamVjdDIsIF90ZW1wbGF0ZU9iamVjdDMsIF90ZW1wbGF0ZU9iamVjdDQ7XG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKGUsIHQpIHsgcmV0dXJuIHQgfHwgKHQgPSBlLnNsaWNlKDApKSwgT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZSh0KSB9IH0pKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBldWlDYW50QW5pbWF0ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVRpdGxlIH0gZnJvbSAnLi4vdGl0bGUvdGl0bGUuc3R5bGVzJztcbmltcG9ydCB7IGV1aUNvbnRleHRNZW51VmFyaWFibGVzIH0gZnJvbSAnLi9jb250ZXh0X21lbnUuc3R5bGVzJztcbmV4cG9ydCB2YXIgZXVpQ29udGV4dE1lbnVQYW5lbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNvbnRleHRNZW51UGFuZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIF9ldWlDb250ZXh0TWVudVZhcmlhYiA9IGV1aUNvbnRleHRNZW51VmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgcGFuZWxXaWR0aCA9IF9ldWlDb250ZXh0TWVudVZhcmlhYi5wYW5lbFdpZHRoO1xuICB2YXIgYW5pbWF0aW9ucyA9IHtcbiAgICB0cmFuc2l0aW9uaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwicG9pbnRlci1ldmVudHM6bm9uZTthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzO2FuaW1hdGlvbi1kdXJhdGlvbjpcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLm5vcm1hbCwgXCI7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO1wiLCBldWlDYW50QW5pbWF0ZSwgXCJ7YW5pbWF0aW9uLWR1cmF0aW9uOjBzO307bGFiZWw6dHJhbnNpdGlvbmluZztcIiksXG4gICAgaW5MZWZ0OiBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICAgIDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKFwiLCBcIik7IH1cXG4gICAgICAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9XFxuICAgIFwiXSkpLCBwYW5lbFdpZHRoKSxcbiAgICBvdXRMZWZ0OiBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0MiB8fCAoX3RlbXBsYXRlT2JqZWN0MiA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgICAgMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH1cXG4gICAgICAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC1cIiwgXCIpOyB9XFxuICAgIFwiXSkpLCBwYW5lbFdpZHRoKSxcbiAgICBpblJpZ2h0OiBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0MyB8fCAoX3RlbXBsYXRlT2JqZWN0MyA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgICAgMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLVwiLCBcIik7IH1cXG4gICAgICAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9XFxuICAgIFwiXSkpLCBwYW5lbFdpZHRoKSxcbiAgICBvdXRSaWdodDoga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdDQgfHwgKF90ZW1wbGF0ZU9iamVjdDQgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICAgIDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9XFxuICAgICAgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWChcIiwgXCIpOyB9XFxuICAgIFwiXSkpLCBwYW5lbFdpZHRoKVxuICB9O1xuICByZXR1cm4ge1xuICAgIGV1aUNvbnRleHRNZW51UGFuZWw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiB2aXNpYmlsaXR5OnZpc2libGU7b3V0bGluZS1vZmZzZXQ6LVwiLCBldWlUaGVtZS5mb2N1cy53aWR0aCwgXCI7Jjpmb2N1c3tvdXRsaW5lOm5vbmU7fTtsYWJlbDpldWlDb250ZXh0TWVudVBhbmVsO1wiKSxcbiAgICAvLyBQYW5lbCBhbmltYXRpb25zXG4gICAgbmV4dDoge1xuICAgICAgaW46IC8qI19fUFVSRV9fKi9jc3MoYW5pbWF0aW9ucy50cmFuc2l0aW9uaW5nLCBcIiBhbmltYXRpb24tbmFtZTpcIiwgYW5pbWF0aW9ucy5pbkxlZnQsIFwiOztsYWJlbDppbjtcIiksXG4gICAgICBvdXQ6IC8qI19fUFVSRV9fKi9jc3MoYW5pbWF0aW9ucy50cmFuc2l0aW9uaW5nLCBcIiBhbmltYXRpb24tbmFtZTpcIiwgYW5pbWF0aW9ucy5vdXRMZWZ0LCBcIjs7bGFiZWw6b3V0O1wiKVxuICAgIH0sXG4gICAgcHJldmlvdXM6IHtcbiAgICAgIGluOiAvKiNfX1BVUkVfXyovY3NzKGFuaW1hdGlvbnMudHJhbnNpdGlvbmluZywgXCIgYW5pbWF0aW9uLW5hbWU6XCIsIGFuaW1hdGlvbnMuaW5SaWdodCwgXCI7O2xhYmVsOmluO1wiKSxcbiAgICAgIG91dDogLyojX19QVVJFX18qL2NzcyhhbmltYXRpb25zLnRyYW5zaXRpb25pbmcsIFwiIGFuaW1hdGlvbi1uYW1lOlwiLCBhbmltYXRpb25zLm91dFJpZ2h0LCBcIjs7bGFiZWw6b3V0O1wiKVxuICAgIH0sXG4gICAgLy8gQ2hpbGRyZW5cbiAgICBldWlDb250ZXh0TWVudVBhbmVsX190aXRsZTogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHMnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2JvcmRlci1ib3R0b20nLCBldWlUaGVtZS5ib3JkZXIudGhpbiksIFwiICY6ZW5hYmxlZDpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnVuc2V0O307bGFiZWw6ZXVpQ29udGV4dE1lbnVQYW5lbF9fdGl0bGU7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wibGFiZWxcIiwgXCJpZFwiLCBcImNoZWNrZWRcIiwgXCJkaXNhYmxlZFwiLCBcImNvbXByZXNzZWRcIiwgXCJtaW5pXCIsIFwib25DaGFuZ2VcIiwgXCJjbGFzc05hbWVcIiwgXCJzaG93TGFiZWxcIiwgXCJ0eXBlXCIsIFwibGFiZWxQcm9wc1wiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlR2VuZXJhdGVkSHRtbElkLCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IGV1aVN3aXRjaFN0eWxlcyB9IGZyb20gJy4vc3dpdGNoLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTd2l0Y2ggPSBmdW5jdGlvbiBFdWlTd2l0Y2goX3JlZikge1xuICB2YXIgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgIGlkID0gX3JlZi5pZCxcbiAgICBjaGVja2VkID0gX3JlZi5jaGVja2VkLFxuICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBjb21wcmVzc2VkID0gX3JlZi5jb21wcmVzc2VkLFxuICAgIG1pbmkgPSBfcmVmLm1pbmksXG4gICAgb25DaGFuZ2UgPSBfcmVmLm9uQ2hhbmdlLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkc2hvd0xhYmVsID0gX3JlZi5zaG93TGFiZWwsXG4gICAgc2hvd0xhYmVsID0gX3JlZiRzaG93TGFiZWwgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHNob3dMYWJlbCxcbiAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgbGFiZWxQcm9wcyA9IF9yZWYubGFiZWxQcm9wcyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzd2l0Y2hJZCA9IHVzZUdlbmVyYXRlZEh0bWxJZCh7XG4gICAgY29uZGl0aW9uYWxJZDogaWRcbiAgfSk7XG4gIHZhciBsYWJlbElkID0gdXNlR2VuZXJhdGVkSHRtbElkKHtcbiAgICBjb25kaXRpb25hbElkOiBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuaWRcbiAgfSk7XG4gIHZhciBvbkNsaWNrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGV2ZW50ID0gZTtcbiAgICBldmVudC50YXJnZXQuY2hlY2tlZCA9ICFjaGVja2VkO1xuICAgIG9uQ2hhbmdlKGV2ZW50KTtcbiAgfSwgW2NoZWNrZWQsIGRpc2FibGVkLCBvbkNoYW5nZV0pO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVN3aXRjaCcsIGNsYXNzTmFtZSk7XG4gIHZhciBsYWJlbENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTd2l0Y2hfX2xhYmVsJywgbGFiZWxQcm9wcyA9PT0gbnVsbCB8fCBsYWJlbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYWJlbFByb3BzLmNsYXNzTmFtZSk7XG4gIGlmIChzaG93TGFiZWwgPT09IGZhbHNlICYmIHR5cGVvZiBsYWJlbCAhPT0gJ3N0cmluZycpIHtcbiAgICBjb25zb2xlLndhcm4oJ0V1aVN3aXRjaCBgbGFiZWxgIG11c3QgYmUgYSBzdHJpbmcgd2hlbiBgc2hvd0xhYmVsYCBpcyBmYWxzZS4nKTtcbiAgfVxuICB2YXIgc2l6ZSA9IG1pbmkgPyAnbWluaScgOiBjb21wcmVzc2VkID8gJ2NvbXByZXNzZWQnIDogJ3VuY29tcHJlc3NlZCc7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlTd2l0Y2hTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlTd2l0Y2gsIGRpc2FibGVkID8gc3R5bGVzLmRpc2FibGVkIDogc3R5bGVzLmVuYWJsZWRdO1xuICB2YXIgYnV0dG9uU3R5bGVzID0gW3N0eWxlcy5idXR0b24uZXVpU3dpdGNoX19idXR0b24sIHN0eWxlcy5idXR0b25bc2l6ZV1dO1xuICB2YXIgYm9keVN0eWxlcyA9IFtzdHlsZXMuYm9keS5ldWlTd2l0Y2hfX2JvZHksIGRpc2FibGVkID8gc3R5bGVzLmJvZHkuZGlzYWJsZWRbc2l6ZV0gOiBjaGVja2VkID8gc3R5bGVzLmJvZHkub24gOiBzdHlsZXMuYm9keS5vZmZdO1xuICB2YXIgaWNvbnNTdHlsZXMgPSBbc3R5bGVzLmljb25zLmV1aVN3aXRjaF9faWNvbnMsIGNoZWNrZWQgPyBzdHlsZXMuaWNvbnMub24gOiBzdHlsZXMuaWNvbnMub2ZmLCBkaXNhYmxlZCA/IHN0eWxlcy5pY29ucy5kaXNhYmxlZCA6IHN0eWxlcy5pY29ucy5lbmFibGVkXTtcbiAgdmFyIHRodW1iU3R5bGVzID0gW3N0eWxlcy50aHVtYi5ldWlTd2l0Y2hfX3RodW1iLCBjaGVja2VkID8gc3R5bGVzLnRodW1iLm9uW3NpemVdIDogc3R5bGVzLnRodW1iLm9mZl0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShkaXNhYmxlZCA/IFtzdHlsZXMudGh1bWIuZGlzYWJsZWQuZGlzYWJsZWQsIHN0eWxlcy50aHVtYi5kaXNhYmxlZFtzaXplXV0gOiBbc3R5bGVzLnRodW1iLmVuYWJsZWQuZW5hYmxlZCwgc3R5bGVzLnRodW1iLmVuYWJsZWRbc2l6ZV1dKSk7XG4gIHZhciBsYWJlbFN0eWxlcyA9IFtzdHlsZXMubGFiZWwuZXVpU3dpdGNoX19sYWJlbCwgc3R5bGVzLmxhYmVsW3NpemVdLCBkaXNhYmxlZCAmJiBzdHlsZXMubGFiZWwuZGlzYWJsZWQsIGxhYmVsUHJvcHMgPT09IG51bGwgfHwgbGFiZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFiZWxQcm9wcy5jc3NdO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIGlkOiBzd2l0Y2hJZCxcbiAgICBcImFyaWEtY2hlY2tlZFwiOiBjaGVja2VkIHx8IGZhbHNlLFxuICAgIGNzczogYnV0dG9uU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2J1dHRvblwiLFxuICAgIHJvbGU6IFwic3dpdGNoXCIsXG4gICAgdHlwZTogdHlwZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBcImFyaWEtbGFiZWxcIjogc2hvd0xhYmVsID8gdW5kZWZpbmVkIDogbGFiZWwsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogc2hvd0xhYmVsID8gbGFiZWxJZCA6IHVuZGVmaW5lZFxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNzczogYm9keVN0eWxlcyxcbiAgICBjbGFzc05hbWU6IFwiZXVpU3dpdGNoX19ib2R5XCJcbiAgfSwgIShjb21wcmVzc2VkIHx8IG1pbmkpICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjc3M6IGljb25zU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2ljb25zXCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJjaGVja1wiLFxuICAgIHNpemU6IFwibVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICB0eXBlOiBcImNyb3NzXCIsXG4gICAgc2l6ZTogXCJtXCJcbiAgfSkpKSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNzczogdGh1bWJTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBcImV1aVN3aXRjaF9fdGh1bWJcIlxuICB9KSksIHNob3dMYWJlbCAmJlxuICAvLyA8YnV0dG9uPiArIDxsYWJlbD4gaGFzIHBvb3Igc2NyZWVuIHJlYWRlciBzdXBwb3J0LlxuICAvLyBDbGljayBoYW5kbGVyIGFkZGVkIHRvIHNpbXVsYXRlIG5hdHVyYWwsIHNlY29uZGFyeSA8bGFiZWw+IGludGVyYWN0aXZpdHkuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS1lbGVtZW50LWludGVyYWN0aW9uc1xuICBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7fSwgbGFiZWxQcm9wcywge1xuICAgIGNzczogbGFiZWxTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBsYWJlbENsYXNzZXMsXG4gICAgaWQ6IGxhYmVsSWQsXG4gICAgb25DbGljazogb25DbGlja1xuICB9KSwgbGFiZWwpKTtcbn07XG5FdWlTd2l0Y2gucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBXaGV0aGVyIHRvIHJlbmRlciB0aGUgdGV4dCBsYWJlbFxuICAgICAgICovXG4gIHNob3dMYWJlbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogTXVzdCBiZSBhIHN0cmluZyBpZiBgc2hvd0xhYmVsYCBwcm9wIGlzIGZhbHNlXG4gICAgICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogQ29tcHJlc3NlZCBzd2l0Y2hlcyBhcmUgc21hbGxlciBhbmQgY29udGFpbiBubyBpY29uIHNpZ25pZmllcnNcbiAgICAgICAqL1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBsYWJlbCdzIGA8c3BhbiAvPmBcbiAgICAgICAqL1xuICBsYWJlbFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICAvKipcbiAgICAgICAqIE1pbmkgc3R5bGluZyBpcyBzaW1pbGFyIHRvIGNvbXByZXNzZWQsIGJ1dCBldmVuIHNtYWxsZXIuXG4gICAgICAgKiBJdCdzIHVuZG9jdW1lbnRlZCBiZWNhdXNlIGl0IGhhcyB2ZXJ5IHNwZWNpZmljIHVzZXMuXG4gICAgICAgKi9cbiAgbWluaTogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHRpbnQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlLCBldWlGb2N1c1JpbmcsIGV1aUZvbnRTaXplLCBsb2dpY2FsQ1NTLCBsb2dpY2FsU2l6ZUNTUywgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aUZvcm1DdXN0b21Db250cm9sVmFyaWFibGVzIH0gZnJvbSAnLi4vZm9ybS5zdHlsZXMnO1xudmFyIGV1aVN3aXRjaFZhcnMgPSBmdW5jdGlvbiBldWlTd2l0Y2hWYXJzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBmb3JtVmFycyA9IGV1aUZvcm1DdXN0b21Db250cm9sVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBjb2xvcnMgPSB7XG4gICAgb246IGZvcm1WYXJzLmNvbG9ycy5zZWxlY3RlZCxcbiAgICBvZmY6IGZvcm1WYXJzLmNvbG9ycy51bnNlbGVjdGVkQm9yZGVyLFxuICAgIGRpc2FibGVkOiBmb3JtVmFycy5jb2xvcnMuZGlzYWJsZWQsXG4gICAgdGh1bWI6IGZvcm1WYXJzLmNvbG9ycy5zZWxlY3RlZEljb24sXG4gICAgdGh1bWJCb3JkZXI6IGZvcm1WYXJzLmNvbG9ycy51bnNlbGVjdGVkQm9yZGVyLFxuICAgIHRodW1iQm9yZGVyRGlzYWJsZWQ6IGZvcm1WYXJzLmNvbG9ycy51bnNlbGVjdGVkQm9yZGVyXG4gIH07XG4gIHZhciBzaXplcyA9IHtcbiAgICB1bmNvbXByZXNzZWQ6IHtcbiAgICAgIGhlaWdodDogbWF0aFdpdGhVbml0cyhldWlUaGVtZS5zaXplLmJhc2UsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICogMS4yNTtcbiAgICAgIH0pLFxuICAgICAgd2lkdGg6IG1hdGhXaXRoVW5pdHMoW2V1aVRoZW1lLnNpemUueHhsLCBldWlUaGVtZS5zaXplLnhzXSwgZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgcmV0dXJuIHggKyB5O1xuICAgICAgfSksXG4gICAgICB0aHVtYlNjYWxlczoge1xuICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgICBob3ZlcjogMS4wNSxcbiAgICAgICAgYWN0aXZlOiAwLjlcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbXByZXNzZWQ6IHtcbiAgICAgIGhlaWdodDogZXVpVGhlbWUuc2l6ZS5iYXNlLFxuICAgICAgd2lkdGg6IG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuc2l6ZS5iYXNlLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAqIDEuNzU7XG4gICAgICB9KSxcbiAgICAgIHRodW1iU2NhbGVzOiB7XG4gICAgICAgIGRlZmF1bHQ6IDAuOSxcbiAgICAgICAgaG92ZXI6IDAuOTUsXG4gICAgICAgIGFjdGl2ZTogMC44XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXQgbWluaSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogbWF0aFdpdGhVbml0cyh0aGlzLnVuY29tcHJlc3NlZC5oZWlnaHQsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIHggLyAyO1xuICAgICAgICB9KSxcbiAgICAgICAgd2lkdGg6IG1hdGhXaXRoVW5pdHModGhpcy51bmNvbXByZXNzZWQud2lkdGgsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIHggLyAyO1xuICAgICAgICB9KSxcbiAgICAgICAgdGh1bWJTY2FsZXM6IHtcbiAgICAgICAgICBkZWZhdWx0OiAwLjgsXG4gICAgICAgICAgaG92ZXI6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhY3RpdmU6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgdmFyIGFuaW1hdGlvbiA9IHtcbiAgICBzcGVlZDogZXVpVGhlbWUuYW5pbWF0aW9uLm5vcm1hbCxcbiAgICBlYXNpbmc6IGV1aVRoZW1lLmFuaW1hdGlvbi5ib3VuY2VcbiAgfTtcbiAgdmFyIGxhYmVsID0ge1xuICAgIGRpc2FibGVkOiBmb3JtVmFycy5jb2xvcnMuZGlzYWJsZWRMYWJlbCxcbiAgICBnYXA6IGZvcm1WYXJzLnNpemVzLmxhYmVsR2FwXG4gIH07XG4gIHJldHVybiB7XG4gICAgc2l6ZXM6IHNpemVzLFxuICAgIGNvbG9yczogY29sb3JzLFxuICAgIGFuaW1hdGlvbjogYW5pbWF0aW9uLFxuICAgIGxhYmVsOiBsYWJlbFxuICB9O1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJiODZwbnctZGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImN1cnNvcjpub3QtYWxsb3dlZDtsYWJlbDpkaXNhYmxlZDtcIlxufSA6IHtcbiAgbmFtZTogXCJiODZwbnctZGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImN1cnNvcjpub3QtYWxsb3dlZDtsYWJlbDpkaXNhYmxlZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImVnNjhwcC1ldWlTd2l0Y2hcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDsvKiBSZXF1aXJlZCBmb3IgaW5saW5lLWZsZXggQ1NTIHRvIG5vdCByZW5kZXIgYW4gZXh0cmEgMi0zcHggb2Ygc3RydXQgaGVpZ2h0XFxuICAgICAgICogQHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjc1MzY0NjEvNDI5NDQ2MiAqL3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtsYWJlbDpldWlTd2l0Y2g7XCJcbn0gOiB7XG4gIG5hbWU6IFwiZWc2OHBwLWV1aVN3aXRjaFwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0Oy8qIFJlcXVpcmVkIGZvciBpbmxpbmUtZmxleCBDU1MgdG8gbm90IHJlbmRlciBhbiBleHRyYSAyLTNweCBvZiBzdHJ1dCBoZWlnaHRcXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNzUzNjQ2MS80Mjk0NDYyICovdmVydGljYWwtYWxpZ246bWlkZGxlO2xhYmVsOmV1aVN3aXRjaDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlTd2l0Y2hTdHlsZXMgPSBmdW5jdGlvbiBldWlTd2l0Y2hTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBzd2l0Y2hWYXJzID0gZXVpU3dpdGNoVmFycyhldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIGV1aVN3aXRjaDogX3JlZjMsXG4gICAgLy8gU2tpcCBjc3NgYCB0byBhdm9pZCBnZW5lcmF0aW5nIGFuIGV4dHJhIEVtb3Rpb24gY2xhc3NOYW1lXG4gICAgZW5hYmxlZDogXCJcXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIFwiLFxuICAgIGRpc2FibGVkOiBfcmVmMixcbiAgICBidXR0b246IGJ1dHRvblN0eWxlcyhldWlUaGVtZUNvbnRleHQsIHN3aXRjaFZhcnMpLFxuICAgIC8vIFRoZSB0cmFjayBib2R5IG11c3QgYmUgc2VwYXJhdGUgZnJvbSB0aGUgYnV0dG9uIHdyYXBwZXIsIGJlY2F1c2UgdGhlXG4gICAgLy8gaWNvbnMgaGF2ZSB0aGVpciBvdmVyZmxvdyBoaWRkZW4gb3V0c2lkZSB0aGUgYnV0dG9uLCBidXQgdGhlIHRodW1iIGRvZXNuJ3RcbiAgICBib2R5OiBib2R5U3R5bGVzKGV1aVRoZW1lQ29udGV4dCwgc3dpdGNoVmFycyksXG4gICAgaWNvbnM6IGljb25TdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBzd2l0Y2hWYXJzKSxcbiAgICB0aHVtYjogdGh1bWJTdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBzd2l0Y2hWYXJzKSxcbiAgICBsYWJlbDogbGFiZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBzd2l0Y2hWYXJzKVxuICB9O1xufTtcbnZhciBidXR0b25TdHlsZXMgPSBmdW5jdGlvbiBidXR0b25TdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBzd2l0Y2hWYXJzKSB7XG4gIHZhciBfc3dpdGNoVmFycyRzaXplcyA9IHN3aXRjaFZhcnMuc2l6ZXMsXG4gICAgdW5jb21wcmVzc2VkID0gX3N3aXRjaFZhcnMkc2l6ZXMudW5jb21wcmVzc2VkLFxuICAgIGNvbXByZXNzZWQgPSBfc3dpdGNoVmFycyRzaXplcy5jb21wcmVzc2VkLFxuICAgIG1pbmkgPSBfc3dpdGNoVmFycyRzaXplcy5taW5pO1xuICByZXR1cm4ge1xuICAgIGV1aVN3aXRjaF9fYnV0dG9uOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1zaHJpbms6MDtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjppbmhlcml0O1wiLCBldWlGb2N1c1JpbmcoZXVpVGhlbWVDb250ZXh0LCAnb3V0c2V0JyksIFwiOztsYWJlbDpldWlTd2l0Y2hfX2J1dHRvbjtcIiksXG4gICAgLy8gU2tpcCBjc3NgYCB0byBhdm9pZCBnZW5lcmF0aW5nIGFuIEVtb3Rpb24gY2xhc3NOYW1lXG4gICAgdW5jb21wcmVzc2VkOiBcIlxcbiAgICAgIFwiLmNvbmNhdChsb2dpY2FsU2l6ZUNTUyh1bmNvbXByZXNzZWQud2lkdGgsIHVuY29tcHJlc3NlZC5oZWlnaHQpLCBcIlxcbiAgICAgIGJvcmRlci1yYWRpdXM6IFwiKS5jb25jYXQodW5jb21wcmVzc2VkLmhlaWdodCwgXCI7XFxuICAgIFwiKSxcbiAgICBjb21wcmVzc2VkOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGNvbXByZXNzZWQud2lkdGgsIGNvbXByZXNzZWQuaGVpZ2h0KSwgXCIgYm9yZGVyLXJhZGl1czpcIiwgY29tcHJlc3NlZC5oZWlnaHQsIFwiOztsYWJlbDpjb21wcmVzc2VkO1wiKSxcbiAgICBtaW5pOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKG1pbmkud2lkdGgsIG1pbmkuaGVpZ2h0KSwgXCIgYm9yZGVyLXJhZGl1czpcIiwgbWluaS5oZWlnaHQsIFwiOztsYWJlbDptaW5pO1wiKVxuICB9O1xufTtcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE5Y3d1NnYtZXVpU3dpdGNoX19ib2R5XCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO292ZXJmbG93OmhpZGRlbjtib3JkZXItcmFkaXVzOmluaGVyaXQ7cG9pbnRlci1ldmVudHM6bm9uZTtsYWJlbDpldWlTd2l0Y2hfX2JvZHk7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTljd3U2di1ldWlTd2l0Y2hfX2JvZHlcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO2xhYmVsOmV1aVN3aXRjaF9fYm9keTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIGJvZHlTdHlsZXMgPSBmdW5jdGlvbiBib2R5U3R5bGVzKF9yZWY0LCBfcmVmNSkge1xuICB2YXIgY29sb3JNb2RlID0gX3JlZjQuY29sb3JNb2RlO1xuICB2YXIgY29sb3JzID0gX3JlZjUuY29sb3JzO1xuICAvLyBUaGlzIGlzIHByb2JhYmx5IHZlcnkgZXh0cmEsIGJ1dCB0aGUgdmlzdWFsIHdlaWdodCBvZiB0aGUgZGVmYXVsdFxuICAvLyBkaXNhYmxlZCBjdXN0b20gY29udHJvbCBmZWVscyBkaWZmZXJlbnQgaW4gbGlnaHQgbW9kZSBkZXBlbmRpbmdcbiAgLy8gb24gdGhlIHNpemUgb2YgdGhlIHN3aXRjaCwgc28gSSdtIHRpbnRpbmcgaXQgYmFzZWQgb24gdGhhdC5cbiAgLy8gR290dGEganVzdGlmeSBteSBzdHVwaWRseSBleHBlbnNpdmUgYXJ0IGRlZ3JlZSFcbiAgdmFyIF9jYWxjdWxhdGVEaXNhYmxlZENvbG9yID0gZnVuY3Rpb24gX2NhbGN1bGF0ZURpc2FibGVkQ29sb3IodGludEFtb3VudCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3NzKFwibGFiZWw6ZGlzYWJsZWQ7YmFja2dyb3VuZC1jb2xvcjpcIiwgY29sb3JNb2RlID09PSAnREFSSycgPyBjb2xvcnMuZGlzYWJsZWQgOiB0aW50KGNvbG9ycy5kaXNhYmxlZCwgdGludEFtb3VudCksIFwiO1wiKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBldWlTd2l0Y2hfX2JvZHk6IF9yZWYsXG4gICAgb246IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCBjb2xvcnMub24sIFwiOztsYWJlbDpvbjtcIiksXG4gICAgb2ZmOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgY29sb3JzLm9mZiwgXCI7O2xhYmVsOm9mZjtcIiksXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIHVuY29tcHJlc3NlZDogX2NhbGN1bGF0ZURpc2FibGVkQ29sb3IoMC41KSxcbiAgICAgIGNvbXByZXNzZWQ6IF9jYWxjdWxhdGVEaXNhYmxlZENvbG9yKDAuMjUpLFxuICAgICAgbWluaTogX2NhbGN1bGF0ZURpc2FibGVkQ29sb3IoMClcbiAgICB9XG4gIH07XG59O1xudmFyIGljb25TdHlsZXMgPSBmdW5jdGlvbiBpY29uU3R5bGVzKF9yZWY2LCBfcmVmNykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmNi5ldWlUaGVtZTtcbiAgdmFyIGNvbG9ycyA9IF9yZWY3LmNvbG9ycyxcbiAgICBhbmltYXRpb24gPSBfcmVmNy5hbmltYXRpb247XG4gIHJldHVybiB7XG4gICAgZXVpU3dpdGNoX19pY29uczogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd2ZXJ0aWNhbCcsIDApLCBcIiBcIiwgbG9naWNhbENTUygnbGVmdCcsICctNTAlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcyMDAlJyksIFwiIGRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kO2FsaWduLWl0ZW1zOmNlbnRlcjtcIiwgbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiIFwiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uLXByb3BlcnR5Omluc2V0LWlubGluZS1zdGFydDt0cmFuc2l0aW9uLWR1cmF0aW9uOlwiLCBhbmltYXRpb24uc3BlZWQsIFwiO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOlwiLCBhbmltYXRpb24uZWFzaW5nLCBcIjt9O2xhYmVsOmV1aVN3aXRjaF9faWNvbnM7XCIpLFxuICAgIG9uOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2xlZnQnLCAnLTI1JScpLCBcIjs7bGFiZWw6b247XCIpLFxuICAgIG9mZjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdsZWZ0JywgJy03NSUnKSwgXCI7O2xhYmVsOm9mZjtcIiksXG4gICAgZW5hYmxlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBjb2xvcnMudGh1bWIsIFwiOztsYWJlbDplbmFibGVkO1wiKSxcbiAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBjb2xvcnMudGh1bWJCb3JkZXJEaXNhYmxlZCwgXCI7O2xhYmVsOmRpc2FibGVkO1wiKVxuICB9O1xufTtcbnZhciB0aHVtYlN0eWxlcyA9IGZ1bmN0aW9uIHRodW1iU3R5bGVzKF9yZWY4LCBzd2l0Y2hWYXJzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWY4LmV1aVRoZW1lO1xuICB2YXIgc2l6ZXMgPSBzd2l0Y2hWYXJzLnNpemVzLFxuICAgIGNvbG9ycyA9IHN3aXRjaFZhcnMuY29sb3JzLFxuICAgIGFuaW1hdGlvbiA9IHN3aXRjaFZhcnMuYW5pbWF0aW9uO1xuICB2YXIgdW5jb21wcmVzc2VkID0gc2l6ZXMudW5jb21wcmVzc2VkLFxuICAgIGNvbXByZXNzZWQgPSBzaXplcy5jb21wcmVzc2VkLFxuICAgIG1pbmkgPSBzaXplcy5taW5pO1xuICB2YXIgX2NhbGN1bGF0ZVNjYWxlID0gZnVuY3Rpb24gX2NhbGN1bGF0ZVNjYWxlKHNpemUsIGhvdmVyQWN0aXZlU3RhdGVzKSB7XG4gICAgdmFyIGJhc2VTY2FsZSA9IFwidHJhbnNmb3JtOiBzY2FsZShcIi5jb25jYXQoc2l6ZXNbc2l6ZV0udGh1bWJTY2FsZXMuZGVmYXVsdCwgXCIpO1wiKTtcbiAgICB2YXIgc3RhdGVzID0gaG92ZXJBY3RpdmVTdGF0ZXMgPyBcIlxcbiAgICAgIC5ldWlTd2l0Y2g6aG92ZXIgJiB7XFxuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKFwiLmNvbmNhdChzaXplc1tzaXplXS50aHVtYlNjYWxlcy5ob3ZlciwgXCIpO1xcbiAgICAgIH1cXG4gICAgICAuZXVpU3dpdGNoOmFjdGl2ZSAmIHtcXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoXCIpLmNvbmNhdChzaXplc1tzaXplXS50aHVtYlNjYWxlcy5hY3RpdmUsIFwiKTtcXG4gICAgICB9XCIpIDogJyc7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KGJhc2VTY2FsZSkuY29uY2F0KHN0YXRlcyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgZXVpU3dpdGNoX190aHVtYjogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd2ZXJ0aWNhbCcsIDApLCBcIiBhc3BlY3QtcmF0aW86MTtcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnZml0LWNvbnRlbnQnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiIGJvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7XCIsIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb24tcHJvcGVydHk6aW5zZXQtaW5saW5lLXN0YXJ0LHRyYW5zZm9ybSxiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcjt0cmFuc2l0aW9uLWR1cmF0aW9uOlwiLCBhbmltYXRpb24uc3BlZWQsIFwiO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOlwiLCBhbmltYXRpb24uZWFzaW5nLCBcIjt9O2xhYmVsOmV1aVN3aXRjaF9fdGh1bWI7XCIpLFxuICAgIG9mZjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdsZWZ0JywgMCksIFwiOztsYWJlbDpvZmY7XCIpLFxuICAgIGdldCBvbigpIHtcbiAgICAgIC8vIHJpZ2h0OiAwIHdvcmtzIGJ1dCBkb2Vzbid0IHRyYW5zaXRpb24vYW5pbWF0ZSwgc28gd2UgbmVlZCB0b1xuICAgICAgLy8gbWFudWFsbHkgY2FsY3VsYXRlIHRoZSBsZWZ0IHBvc2l0aW9uIHBlciBzd2l0Y2ggc2l6ZVxuICAgICAgdmFyIF9jYWxjdWxhdGVMZWZ0ID0gZnVuY3Rpb24gX2NhbGN1bGF0ZUxlZnQoYm9keVdpZHRoLCB0aHVtYldpZHRoKSB7XG4gICAgICAgIHZhciBsZWZ0UG9zaXRpb24gPSBtYXRoV2l0aFVuaXRzKFtib2R5V2lkdGgsIHRodW1iV2lkdGhdLCBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgICAgIHJldHVybiB4IC0geTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3NzKFwibGFiZWw6b247XCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCBsZWZ0UG9zaXRpb24pLCBcIjtcIik7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdW5jb21wcmVzc2VkOiBfY2FsY3VsYXRlTGVmdCh1bmNvbXByZXNzZWQud2lkdGgsIHVuY29tcHJlc3NlZC5oZWlnaHQpLFxuICAgICAgICBjb21wcmVzc2VkOiBfY2FsY3VsYXRlTGVmdChjb21wcmVzc2VkLndpZHRoLCBjb21wcmVzc2VkLmhlaWdodCksXG4gICAgICAgIG1pbmk6IF9jYWxjdWxhdGVMZWZ0KG1pbmkud2lkdGgsIG1pbmkuaGVpZ2h0KVxuICAgICAgfTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IHtcbiAgICAgIGVuYWJsZWQ6IFwiXFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIi5jb25jYXQoY29sb3JzLnRodW1iLCBcIjtcXG4gICAgICAgIGJvcmRlcjogXCIpLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgc29saWQgXCIpLmNvbmNhdChjb2xvcnMudGh1bWJCb3JkZXIsIFwiO1xcbiAgICAgIFwiKSxcbiAgICAgIHVuY29tcHJlc3NlZDogX2NhbGN1bGF0ZVNjYWxlKCd1bmNvbXByZXNzZWQnLCB0cnVlKSxcbiAgICAgIGNvbXByZXNzZWQ6IF9jYWxjdWxhdGVTY2FsZSgnY29tcHJlc3NlZCcsIHRydWUpLFxuICAgICAgbWluaTogX2NhbGN1bGF0ZVNjYWxlKCdtaW5pJywgZmFsc2UpXG4gICAgfSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgZGlzYWJsZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjpcIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIFwiLCBjb2xvcnMudGh1bWJCb3JkZXJEaXNhYmxlZCwgXCI7O2xhYmVsOmRpc2FibGVkO1wiKSxcbiAgICAgIHVuY29tcHJlc3NlZDogX2NhbGN1bGF0ZVNjYWxlKCd1bmNvbXByZXNzZWQnLCBmYWxzZSksXG4gICAgICBjb21wcmVzc2VkOiBfY2FsY3VsYXRlU2NhbGUoJ2NvbXByZXNzZWQnLCBmYWxzZSksXG4gICAgICBtaW5pOiBfY2FsY3VsYXRlU2NhbGUoJ21pbmknLCBmYWxzZSlcbiAgICB9XG4gIH07XG59O1xudmFyIGxhYmVsU3R5bGVzID0gZnVuY3Rpb24gbGFiZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBfcmVmOSkge1xuICB2YXIgc2l6ZXMgPSBfcmVmOS5zaXplcyxcbiAgICBsYWJlbCA9IF9yZWY5LmxhYmVsO1xuICB2YXIgdW5jb21wcmVzc2VkID0gc2l6ZXMudW5jb21wcmVzc2VkLFxuICAgIGNvbXByZXNzZWQgPSBzaXplcy5jb21wcmVzc2VkLFxuICAgIG1pbmkgPSBzaXplcy5taW5pO1xuICByZXR1cm4ge1xuICAgIGV1aVN3aXRjaF9fbGFiZWw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgbGFiZWwuZ2FwKSwgXCI7O2xhYmVsOmV1aVN3aXRjaF9fbGFiZWw7XCIpLFxuICAgIC8vIFNraXAgY3NzYGAgdG8gYXZvaWQgZ2VuZXJhdGluZyBhbiBFbW90aW9uIGNsYXNzTmFtZVxuICAgIHVuY29tcHJlc3NlZDogXCJcXG4gICAgICBmb250LXNpemU6IFwiLmNvbmNhdChldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJykuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KHVuY29tcHJlc3NlZC5oZWlnaHQsIFwiO1xcbiAgICBcIiksXG4gICAgY29tcHJlc3NlZDogLyojX19QVVJFX18qL2NzcyhcImZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLmZvbnRTaXplLCBcIjtsaW5lLWhlaWdodDpcIiwgY29tcHJlc3NlZC5oZWlnaHQsIFwiOztsYWJlbDpjb21wcmVzc2VkO1wiKSxcbiAgICBtaW5pOiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC1zaXplOlwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICd4cycpLmZvbnRTaXplLCBcIjtsaW5lLWhlaWdodDpcIiwgbWluaS5oZWlnaHQsIFwiOztsYWJlbDptaW5pO1wiKSxcbiAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBsYWJlbC5kaXNhYmxlZCwgXCI7O2xhYmVsOmRpc2FibGVkO1wiKVxuICB9O1xufTsiLCAiaW1wb3J0IGNyZWF0ZUVtb3Rpb24gZnJvbSAnLi4vY3JlYXRlLWluc3RhbmNlL2Rpc3QvZW1vdGlvbi1jc3MtY3JlYXRlLWluc3RhbmNlLmVzbS5qcyc7XG5pbXBvcnQgJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vdXRpbHMnO1xuXG52YXIgX2NyZWF0ZUVtb3Rpb24gPSBjcmVhdGVFbW90aW9uKHtcbiAga2V5OiAnY3NzJ1xufSksXG4gICAgZmx1c2ggPSBfY3JlYXRlRW1vdGlvbi5mbHVzaCxcbiAgICBoeWRyYXRlID0gX2NyZWF0ZUVtb3Rpb24uaHlkcmF0ZSxcbiAgICBjeCA9IF9jcmVhdGVFbW90aW9uLmN4LFxuICAgIG1lcmdlID0gX2NyZWF0ZUVtb3Rpb24ubWVyZ2UsXG4gICAgZ2V0UmVnaXN0ZXJlZFN0eWxlcyA9IF9jcmVhdGVFbW90aW9uLmdldFJlZ2lzdGVyZWRTdHlsZXMsXG4gICAgaW5qZWN0R2xvYmFsID0gX2NyZWF0ZUVtb3Rpb24uaW5qZWN0R2xvYmFsLFxuICAgIGtleWZyYW1lcyA9IF9jcmVhdGVFbW90aW9uLmtleWZyYW1lcyxcbiAgICBjc3MgPSBfY3JlYXRlRW1vdGlvbi5jc3MsXG4gICAgc2hlZXQgPSBfY3JlYXRlRW1vdGlvbi5zaGVldCxcbiAgICBjYWNoZSA9IF9jcmVhdGVFbW90aW9uLmNhY2hlO1xuXG5leHBvcnQgeyBjYWNoZSwgY3NzLCBjeCwgZmx1c2gsIGdldFJlZ2lzdGVyZWRTdHlsZXMsIGh5ZHJhdGUsIGluamVjdEdsb2JhbCwga2V5ZnJhbWVzLCBtZXJnZSwgc2hlZXQgfTtcbiIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIiwgXCJoZWFkZXJaaW5kZXhMb2NhdGlvblwiLCBcIm1hc2tSZWZcIl07XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGN4IH0gZnJvbSAnQGVtb3Rpb24vY3NzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyB1c2VDb21iaW5lZFJlZnMsIHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpUG9ydGFsIH0gZnJvbSAnLi4vcG9ydGFsJztcbmltcG9ydCB7IGV1aU92ZXJsYXlNYXNrU3R5bGVzIH0gZnJvbSAnLi9vdmVybGF5X21hc2suc3R5bGVzJztcbmltcG9ydCB7IGV1aU92ZXJsYXlNYXNrQm9keVN0eWxlcyB9IGZyb20gJy4vb3ZlcmxheV9tYXNrX2JvZHkuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aU92ZXJsYXlNYXNrID0gZnVuY3Rpb24gRXVpT3ZlcmxheU1hc2soX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIF9yZWYkaGVhZGVyWmluZGV4TG9jYSA9IF9yZWYuaGVhZGVyWmluZGV4TG9jYXRpb24sXG4gICAgaGVhZGVyWmluZGV4TG9jYXRpb24gPSBfcmVmJGhlYWRlclppbmRleExvY2EgPT09IHZvaWQgMCA/ICdhYm92ZScgOiBfcmVmJGhlYWRlclppbmRleExvY2EsXG4gICAgbWFza1JlZiA9IF9yZWYubWFza1JlZixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBvdmVybGF5TWFza05vZGUgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldE92ZXJsYXlNYXNrTm9kZSA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBjb21iaW5lZE1hc2tSZWYgPSB1c2VDb21iaW5lZFJlZnMoW3NldE92ZXJsYXlNYXNrTm9kZSwgbWFza1JlZl0pO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpT3ZlcmxheU1hc2tTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gY3goW3N0eWxlcy5ldWlPdmVybGF5TWFzaywgc3R5bGVzW1wiXCIuY29uY2F0KGhlYWRlclppbmRleExvY2F0aW9uLCBcIkhlYWRlclwiKV1dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIW92ZXJsYXlNYXNrTm9kZSkgcmV0dXJuO1xuICAgIGtleXNPZihyZXN0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVzdFtrZXldICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmhhbmRsZWQgcHJvcGVydHkgdHlwZS4gRXVpT3ZlcmxheU1hc2sgcHJvcGVydHkgXCIuY29uY2F0KGtleSwgXCIgaXMgbm90IGEgc3RyaW5nLlwiKSk7XG4gICAgICB9XG4gICAgICBpZiAob3ZlcmxheU1hc2tOb2RlKSB7XG4gICAgICAgIG92ZXJsYXlNYXNrTm9kZS5zZXRBdHRyaWJ1dGUoa2V5LCByZXN0W2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbb3ZlcmxheU1hc2tOb2RlXSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG5cbiAgLy8gTm90ZTogVXNlIGBjbGFzc0xpc3QuYWRkL3JlbW92ZWAgaW5zdGVhZCBvZiBzZXR0aW5nIHRoZSBlbnRpcmUgYGNsYXNzTmFtZWBcbiAgLy8gc28gYXMgbm90IHRvIG92ZXJyaWRlIGFueSBleGlzdGluZyBjbGFzc2VzIHNldCBieSBgRXVpUG9ydGFsYFxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChvdmVybGF5TWFza05vZGUpIHtcbiAgICAgIG92ZXJsYXlNYXNrTm9kZS5jbGFzc0xpc3QuYWRkKCdldWlPdmVybGF5TWFzaycsIGNzc1N0eWxlcyk7XG4gICAgICBvdmVybGF5TWFza05vZGUuZGF0YXNldC5yZWxhdGl2ZVRvSGVhZGVyID0gaGVhZGVyWmluZGV4TG9jYXRpb247XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3ZlcmxheU1hc2tOb2RlLmNsYXNzTGlzdC5yZW1vdmUoY3NzU3R5bGVzKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbb3ZlcmxheU1hc2tOb2RlLCBjc3NTdHlsZXMsIGhlYWRlclppbmRleExvY2F0aW9uXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNsYXNzTmFtZSAmJiBvdmVybGF5TWFza05vZGUpIHtcbiAgICAgIHZhciBfb3ZlcmxheU1hc2tOb2RlJGNsYXM7XG4gICAgICB2YXIgY2xhc3NOYW1lQXJncyA9IGNsYXNzTmFtZS5zcGxpdCgnICcpOyAvLyBUaGUgYGNsYXNzTGlzdGAgQVBJIGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZSBjbGFzc2VzIGluIHRoZSBzYW1lIHN0cmluZ1xuICAgICAgKF9vdmVybGF5TWFza05vZGUkY2xhcyA9IG92ZXJsYXlNYXNrTm9kZS5jbGFzc0xpc3QpLmFkZC5hcHBseShfb3ZlcmxheU1hc2tOb2RlJGNsYXMsIF90b0NvbnN1bWFibGVBcnJheShjbGFzc05hbWVBcmdzKSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX292ZXJsYXlNYXNrTm9kZSRjbGFzMjtcbiAgICAgICAgcmV0dXJuIChfb3ZlcmxheU1hc2tOb2RlJGNsYXMyID0gb3ZlcmxheU1hc2tOb2RlLmNsYXNzTGlzdCkucmVtb3ZlLmFwcGx5KF9vdmVybGF5TWFza05vZGUkY2xhczIsIF90b0NvbnN1bWFibGVBcnJheShjbGFzc05hbWVBcmdzKSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW292ZXJsYXlNYXNrTm9kZSwgY2xhc3NOYW1lXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBvcnRhbCwge1xuICAgIHBvcnRhbFJlZjogY29tYmluZWRNYXNrUmVmXG4gIH0sIF9fX0Vtb3Rpb25KU1goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBldWlPdmVybGF5TWFza0JvZHlTdHlsZXNcbiAgfSksIGNoaWxkcmVuKTtcbn07XG5FdWlPdmVybGF5TWFzay5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBtYXNrIHZpc3VhbGx5IHNpdCBhYm92ZSBvciBiZWxvdyB0aGUgRXVpSGVhZGVyIChjb250cm9sbGVkIGJ5IHotaW5kZXgpXG4gICAgICovXG4gIGhlYWRlclppbmRleExvY2F0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiYWJvdmVcIiwgXCJiZWxvd1wiXSksXG4gIC8qKlxuICAgICAqIFJlYWN0IHJlZiB0byBiZSBwYXNzZWQgdG8gdGhlIHdyYXBwaW5nIGNvbnRhaW5lclxuICAgICAqL1xuICBtYXNrUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9jc3MnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgZXVpQW5pbUZhZGVJbiB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuZXhwb3J0IHZhciBldWlPdmVybGF5TWFza1N0eWxlcyA9IGZ1bmN0aW9uIGV1aU92ZXJsYXlNYXNrU3R5bGVzKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlPdmVybGF5TWFzazogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmZpeGVkO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCAwKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCAwKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3JpZ2h0JywgMCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdib3R0b20nLCAwKSwgXCIgZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWJvdHRvbScsICcxMHZoJyksIFwiIGFuaW1hdGlvbjpcIiwgZXVpQW5pbUZhZGVJbiwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBlYXNlLWluO2JhY2tncm91bmQ6XCIsIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5pbmssIDAuNSksIFwiOztsYWJlbDpldWlPdmVybGF5TWFzaztcIiksXG4gICAgYWJvdmVIZWFkZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJ6LWluZGV4OlwiLCBldWlUaGVtZS5sZXZlbHMubWFzaywgXCI7O2xhYmVsOmFib3ZlSGVhZGVyO1wiKSxcbiAgICBiZWxvd0hlYWRlcjogLyojX19QVVJFX18qL2NzcyhcInotaW5kZXg6XCIsIGV1aVRoZW1lLmxldmVscy5tYXNrQmVsb3dIZWFkZXIsIFwiO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCAndmFyKC0tZXVpRml4ZWRIZWFkZXJzT2Zmc2V0LCAwKScpLCBcIjs7bGFiZWw6YmVsb3dIZWFkZXI7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgdmFyIGV1aU92ZXJsYXlNYXNrQm9keVN0eWxlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxMzExNjAtZXVpT3ZlcmxheU1hc2tCb2R5U3R5bGVzXCIsXG4gIHN0eWxlczogXCJib2R5e292ZXJmbG93OmhpZGRlbjt9O2xhYmVsOmV1aU92ZXJsYXlNYXNrQm9keVN0eWxlcztcIlxufSA6IHtcbiAgbmFtZTogXCIxMzExNjAtZXVpT3ZlcmxheU1hc2tCb2R5U3R5bGVzXCIsXG4gIHN0eWxlczogXCJib2R5e292ZXJmbG93OmhpZGRlbjt9O2xhYmVsOmV1aU92ZXJsYXlNYXNrQm9keVN0eWxlcztcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59OyIsICJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHtcbiAgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICByZXR1cm4gZTtcbn1cbmV4cG9ydCB7IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgYXMgZGVmYXVsdCB9OyIsICJ2YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBsYXN0VGhpcztcbiAgICB2YXIgbGFzdEFyZ3MgPSBbXTtcbiAgICB2YXIgbGFzdFJlc3VsdDtcbiAgICB2YXIgY2FsbGVkT25jZSA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIG1lbW9pemVkKCkge1xuICAgICAgICB2YXIgbmV3QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbmV3QXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsZWRPbmNlICYmIGxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgbGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsYXN0UmVzdWx0ID0gcmVzdWx0Rm4uYXBwbHkodGhpcywgbmV3QXJncyk7XG4gICAgICAgIGNhbGxlZE9uY2UgPSB0cnVlO1xuICAgICAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgICAgIGxhc3RBcmdzID0gbmV3QXJncztcbiAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBtZW1vaXplZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZU9uZTtcbiIsICJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCAiLy8gQGZsb3dcblxuLy8gQW5pbWF0aW9uIGZyYW1lIGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHNldFRpbWVvdXQuXG4vLyBJbnNwaXJlZCBieSBKb2UgTGFtYmVydCwgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vam9lbGFtYmVydC8xMDAyMTE2I2ZpbGUtcmVxdWVzdHRpbWVvdXQtanNcblxuY29uc3QgaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3cgPVxuICB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG5cbmNvbnN0IG5vdyA9IGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93XG4gID8gKCkgPT4gcGVyZm9ybWFuY2Uubm93KClcbiAgOiAoKSA9PiBEYXRlLm5vdygpO1xuXG5leHBvcnQgdHlwZSBUaW1lb3V0SUQgPSB7fFxuICBpZDogQW5pbWF0aW9uRnJhbWVJRCxcbnx9O1xuXG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsVGltZW91dCh0aW1lb3V0SUQ6IFRpbWVvdXRJRCkge1xuICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lb3V0SUQuaWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdFRpbWVvdXQoY2FsbGJhY2s6IEZ1bmN0aW9uLCBkZWxheTogbnVtYmVyKTogVGltZW91dElEIHtcbiAgY29uc3Qgc3RhcnQgPSBub3coKTtcblxuICBmdW5jdGlvbiB0aWNrKCkge1xuICAgIGlmIChub3coKSAtIHN0YXJ0ID49IGRlbGF5KSB7XG4gICAgICBjYWxsYmFjay5jYWxsKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aW1lb3V0SUQuaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGltZW91dElEOiBUaW1lb3V0SUQgPSB7XG4gICAgaWQ6IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKSxcbiAgfTtcblxuICByZXR1cm4gdGltZW91dElEO1xufVxuIiwgIi8vIEBmbG93XG5cbmxldCBzaXplOiBudW1iZXIgPSAtMTtcblxuLy8gVGhpcyB1dGlsaXR5IGNvcGllZCBmcm9tIFwiZG9tLWhlbHBlcnNcIiBwYWNrYWdlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjcm9sbGJhclNpemUocmVjYWxjdWxhdGU/OiBib29sZWFuID0gZmFsc2UpOiBudW1iZXIge1xuICBpZiAoc2l6ZSA9PT0gLTEgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBzdHlsZSA9IGRpdi5zdHlsZTtcbiAgICBzdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBzdHlsZS5oZWlnaHQgPSAnNTBweCc7XG4gICAgc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5hcHBlbmRDaGlsZChkaXYpO1xuXG4gICAgc2l6ZSA9IGRpdi5vZmZzZXRXaWR0aCAtIGRpdi5jbGllbnRXaWR0aDtcblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5yZW1vdmVDaGlsZChkaXYpO1xuICB9XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCB0eXBlIFJUTE9mZnNldFR5cGUgPVxuICB8ICduZWdhdGl2ZSdcbiAgfCAncG9zaXRpdmUtZGVzY2VuZGluZydcbiAgfCAncG9zaXRpdmUtYXNjZW5kaW5nJztcblxubGV0IGNhY2hlZFJUTFJlc3VsdDogUlRMT2Zmc2V0VHlwZSB8IG51bGwgPSBudWxsO1xuXG4vLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4vLyBDaHJvbWUgZG9lcyBub3Qgc2VlbSB0byBhZGhlcmU7IGl0cyBzY3JvbGxMZWZ0IHZhbHVlcyBhcmUgcG9zaXRpdmUgKG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbi8vIFNhZmFyaSdzIGVsYXN0aWMgYm91bmNlIG1ha2VzIGRldGVjdGluZyB0aGlzIGV2ZW4gbW9yZSBjb21wbGljYXRlZCB3cnQgcG90ZW50aWFsIGZhbHNlIHBvc2l0aXZlcy5cbi8vIFRoZSBzYWZlc3Qgd2F5IHRvIGNoZWNrIHRoaXMgaXMgdG8gaW50ZW50aW9uYWxseSBzZXQgYSBuZWdhdGl2ZSBvZmZzZXQsXG4vLyBhbmQgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgc3Vic2VxdWVudCBcInNjcm9sbFwiIGV2ZW50IG1hdGNoZXMgdGhlIG5lZ2F0aXZlIG9mZnNldC5cbi8vIElmIGl0IGRvZXMgbm90IG1hdGNoLCB0aGVuIHdlIGNhbiBhc3N1bWUgYSBub24tc3RhbmRhcmQgUlRMIHNjcm9sbCBpbXBsZW1lbnRhdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSVExPZmZzZXRUeXBlKHJlY2FsY3VsYXRlPzogYm9vbGVhbiA9IGZhbHNlKTogUlRMT2Zmc2V0VHlwZSB7XG4gIGlmIChjYWNoZWRSVExSZXN1bHQgPT09IG51bGwgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICBjb25zdCBvdXRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IG91dGVyU3R5bGUgPSBvdXRlckRpdi5zdHlsZTtcbiAgICBvdXRlclN0eWxlLndpZHRoID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgICBvdXRlclN0eWxlLmRpcmVjdGlvbiA9ICdydGwnO1xuXG4gICAgY29uc3QgaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBpbm5lclN0eWxlID0gaW5uZXJEaXYuc3R5bGU7XG4gICAgaW5uZXJTdHlsZS53aWR0aCA9ICcxMDBweCc7XG4gICAgaW5uZXJTdHlsZS5oZWlnaHQgPSAnMTAwcHgnO1xuXG4gICAgb3V0ZXJEaXYuYXBwZW5kQ2hpbGQoaW5uZXJEaXYpO1xuXG4gICAgKChkb2N1bWVudC5ib2R5OiBhbnkpOiBIVE1MQm9keUVsZW1lbnQpLmFwcGVuZENoaWxkKG91dGVyRGl2KTtcblxuICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID4gMCkge1xuICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRlckRpdi5zY3JvbGxMZWZ0ID0gMTtcbiAgICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID09PSAwKSB7XG4gICAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICduZWdhdGl2ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtYXNjZW5kaW5nJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAoKGRvY3VtZW50LmJvZHk6IGFueSk6IEhUTUxCb2R5RWxlbWVudCkucmVtb3ZlQ2hpbGQob3V0ZXJEaXYpO1xuXG4gICAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG59XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNhbmNlbFRpbWVvdXQsIHJlcXVlc3RUaW1lb3V0IH0gZnJvbSAnLi90aW1lcic7XG5pbXBvcnQgeyBnZXRTY3JvbGxiYXJTaXplLCBnZXRSVExPZmZzZXRUeXBlIH0gZnJvbSAnLi9kb21IZWxwZXJzJztcblxuaW1wb3J0IHR5cGUgeyBUaW1lb3V0SUQgfSBmcm9tICcuL3RpbWVyJztcblxudHlwZSBEaXJlY3Rpb24gPSAnbHRyJyB8ICdydGwnO1xuZXhwb3J0IHR5cGUgU2Nyb2xsVG9BbGlnbiA9ICdhdXRvJyB8ICdzbWFydCcgfCAnY2VudGVyJyB8ICdzdGFydCcgfCAnZW5kJztcblxudHlwZSBpdGVtU2l6ZSA9IG51bWJlciB8ICgoaW5kZXg6IG51bWJlcikgPT4gbnVtYmVyKTtcblxudHlwZSBSZW5kZXJDb21wb25lbnRQcm9wczxUPiA9IHt8XG4gIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gIGRhdGE6IFQsXG4gIGlzU2Nyb2xsaW5nPzogYm9vbGVhbixcbiAgcm93SW5kZXg6IG51bWJlcixcbiAgc3R5bGU6IE9iamVjdCxcbnx9O1xuZXhwb3J0IHR5cGUgUmVuZGVyQ29tcG9uZW50PFQ+ID0gUmVhY3QkQ29tcG9uZW50VHlwZTxcbiAgJFNoYXBlPFJlbmRlckNvbXBvbmVudFByb3BzPFQ+PlxuPjtcblxudHlwZSBTY3JvbGxEaXJlY3Rpb24gPSAnZm9yd2FyZCcgfCAnYmFja3dhcmQnO1xuXG50eXBlIE9uSXRlbXNSZW5kZXJlZENhbGxiYWNrID0gKHtcbiAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICBvdmVyc2NhblJvd1N0b3BJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVSb3dTdGFydEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVSb3dTdG9wSW5kZXg6IG51bWJlcixcbn0pID0+IHZvaWQ7XG50eXBlIE9uU2Nyb2xsQ2FsbGJhY2sgPSAoe1xuICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhbixcbiAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbn0pID0+IHZvaWQ7XG5cbnR5cGUgU2Nyb2xsRXZlbnQgPSBTeW50aGV0aWNFdmVudDxIVE1MRGl2RWxlbWVudD47XG50eXBlIEl0ZW1TdHlsZUNhY2hlID0geyBba2V5OiBzdHJpbmddOiBPYmplY3QgfTtcblxudHlwZSBPdXRlclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIGNsYXNzTmFtZTogc3RyaW5nIHwgdm9pZCxcbiAgb25TY3JvbGw6IFNjcm9sbEV2ZW50ID0+IHZvaWQsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbnR5cGUgSW5uZXJQcm9wcyA9IHt8XG4gIGNoaWxkcmVuOiBSZWFjdCROb2RlLFxuICBzdHlsZToge1xuICAgIFtzdHJpbmddOiBtaXhlZCxcbiAgfSxcbnx9O1xuXG5leHBvcnQgdHlwZSBQcm9wczxUPiA9IHt8XG4gIGNoaWxkcmVuOiBSZW5kZXJDb21wb25lbnQ8VD4sXG4gIGNsYXNzTmFtZT86IHN0cmluZyxcbiAgY29sdW1uQ291bnQ6IG51bWJlcixcbiAgY29sdW1uV2lkdGg6IGl0ZW1TaXplLFxuICBkaXJlY3Rpb246IERpcmVjdGlvbixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGluaXRpYWxTY3JvbGxMZWZ0PzogbnVtYmVyLFxuICBpbml0aWFsU2Nyb2xsVG9wPzogbnVtYmVyLFxuICBpbm5lclJlZj86IGFueSxcbiAgaW5uZXJFbGVtZW50VHlwZT86IHN0cmluZyB8IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PElubmVyUHJvcHMsIGFueT4sXG4gIGlubmVyVGFnTmFtZT86IHN0cmluZywgLy8gZGVwcmVjYXRlZFxuICBpdGVtRGF0YTogVCxcbiAgaXRlbUtleT86IChwYXJhbXM6IHt8XG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBkYXRhOiBULFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gIHx9KSA9PiBhbnksXG4gIG9uSXRlbXNSZW5kZXJlZD86IE9uSXRlbXNSZW5kZXJlZENhbGxiYWNrLFxuICBvblNjcm9sbD86IE9uU2Nyb2xsQ2FsbGJhY2ssXG4gIG91dGVyUmVmPzogYW55LFxuICBvdXRlckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8T3V0ZXJQcm9wcywgYW55PixcbiAgb3V0ZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ29sdW1uQ291bnQ/OiBudW1iZXIsXG4gIG92ZXJzY2FuQ29sdW1uc0NvdW50PzogbnVtYmVyLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ291bnQ/OiBudW1iZXIsIC8vIGRlcHJlY2F0ZWRcbiAgb3ZlcnNjYW5Sb3dDb3VudD86IG51bWJlcixcbiAgb3ZlcnNjYW5Sb3dzQ291bnQ/OiBudW1iZXIsIC8vIGRlcHJlY2F0ZWRcbiAgcm93Q291bnQ6IG51bWJlcixcbiAgcm93SGVpZ2h0OiBpdGVtU2l6ZSxcbiAgc3R5bGU/OiBPYmplY3QsXG4gIHVzZUlzU2Nyb2xsaW5nOiBib29sZWFuLFxuICB3aWR0aDogbnVtYmVyLFxufH07XG5cbnR5cGUgU3RhdGUgPSB7fFxuICBpbnN0YW5jZTogYW55LFxuICBpc1Njcm9sbGluZzogYm9vbGVhbixcbiAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG4gIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG58fTtcblxudHlwZSBnZXRJdGVtT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgZ2V0SXRlbVNpemUgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlUHJvcHM6IGFueSkgPT4gbnVtYmVyO1xudHlwZSBHZXRPZmZzZXRGb3JJdGVtQW5kQWxpZ25tZW50ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnksXG4gIHNjcm9sbGJhclNpemU6IG51bWJlclxuKSA9PiBudW1iZXI7XG50eXBlIEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBvZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEluaXRJbnN0YW5jZVByb3BzID0gKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KSA9PiBhbnk7XG50eXBlIFZhbGlkYXRlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4pID0+IHZvaWQ7XG5cbmNvbnN0IElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCA9IDE1MDtcblxuY29uc3QgZGVmYXVsdEl0ZW1LZXkgPSAoeyBjb2x1bW5JbmRleCwgZGF0YSwgcm93SW5kZXggfSkgPT5cbiAgYCR7cm93SW5kZXh9OiR7Y29sdW1uSW5kZXh9YDtcblxuLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5sZXQgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbnVsbDtcbmxldCBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG51bGw7XG5sZXQgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG5ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lID0gbmV3IFdlYWtTZXQoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBnZXRDb2x1bW5XaWR0aCxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCxcbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50LFxuICBnZXRSb3dIZWlnaHQsXG4gIGdldFJvd09mZnNldCxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gIHZhbGlkYXRlUHJvcHMsXG59OiB7fFxuICBnZXRDb2x1bW5PZmZzZXQ6IGdldEl0ZW1PZmZzZXQsXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IEdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gIGdldENvbHVtbldpZHRoOiBnZXRJdGVtU2l6ZSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6IGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aDogZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IEdldE9mZnNldEZvckl0ZW1BbmRBbGlnbm1lbnQsXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogR2V0T2Zmc2V0Rm9ySXRlbUFuZEFsaWdubWVudCxcbiAgZ2V0Um93T2Zmc2V0OiBnZXRJdGVtT2Zmc2V0LFxuICBnZXRSb3dIZWlnaHQ6IGdldEl0ZW1TaXplLFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiBHZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBpbml0SW5zdGFuY2VQcm9wczogSW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGJvb2xlYW4sXG4gIHZhbGlkYXRlUHJvcHM6IFZhbGlkYXRlUHJvcHMsXG58fSkge1xuICByZXR1cm4gY2xhc3MgR3JpZDxUPiBleHRlbmRzIFB1cmVDb21wb25lbnQ8UHJvcHM8VD4sIFN0YXRlPiB7XG4gICAgX2luc3RhbmNlUHJvcHM6IGFueSA9IGluaXRJbnN0YW5jZVByb3BzKHRoaXMucHJvcHMsIHRoaXMpO1xuICAgIF9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkOiBUaW1lb3V0SUQgfCBudWxsID0gbnVsbDtcbiAgICBfb3V0ZXJSZWY6ID9IVE1MRGl2RWxlbWVudDtcblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgc3RhdGU6IFN0YXRlID0ge1xuICAgICAgaW5zdGFuY2U6IHRoaXMsXG4gICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICBzY3JvbGxMZWZ0OlxuICAgICAgICB0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbExlZnRcbiAgICAgICAgICA6IDAsXG4gICAgICBzY3JvbGxUb3A6XG4gICAgICAgIHR5cGVvZiB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3AgPT09ICdudW1iZXInXG4gICAgICAgICAgPyB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3BcbiAgICAgICAgICA6IDAsXG4gICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICB9O1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wczxUPikge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICBuZXh0UHJvcHM6IFByb3BzPFQ+LFxuICAgICAgcHJldlN0YXRlOiBTdGF0ZVxuICAgICk6ICRTaGFwZTxTdGF0ZT4gfCBudWxsIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG8oe1xuICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcCxcbiAgICB9OiB7XG4gICAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICB9KTogdm9pZCB7XG4gICAgICBpZiAoc2Nyb2xsTGVmdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzY3JvbGxUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxUb3ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChzY3JvbGxMZWZ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gcHJldlN0YXRlLnNjcm9sbExlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjcm9sbFRvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsVG9wID0gcHJldlN0YXRlLnNjcm9sbFRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJlxuICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHRydWUsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsVG9wIDwgc2Nyb2xsVG9wID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH1cblxuICAgIHNjcm9sbFRvSXRlbSh7XG4gICAgICBhbGlnbiA9ICdhdXRvJyxcbiAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgcm93SW5kZXgsXG4gICAgfToge1xuICAgICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgICBjb2x1bW5JbmRleD86IG51bWJlcixcbiAgICAgIHJvd0luZGV4PzogbnVtYmVyLFxuICAgIH0pOiB2b2lkIHtcbiAgICAgIGNvbnN0IHsgY29sdW1uQ291bnQsIGhlaWdodCwgcm93Q291bnQsIHdpZHRoIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AgfSA9IHRoaXMuc3RhdGU7XG4gICAgICBjb25zdCBzY3JvbGxiYXJTaXplID0gZ2V0U2Nyb2xsYmFyU2l6ZSgpO1xuXG4gICAgICBpZiAoY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb2x1bW5JbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkluZGV4LCBjb2x1bW5Db3VudCAtIDEpKTtcbiAgICAgIH1cbiAgICAgIGlmIChyb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJvd0luZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93SW5kZXgsIHJvd0NvdW50IC0gMSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldyxcbiAgICAgIC8vIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IHZpc2libGUuXG4gICAgICAvLyBCdXQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBzaXplIHdoZW4gaXQncyBhY3R1YWxseSB2aXNpYmxlLlxuICAgICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbGJhclNpemUgPVxuICAgICAgICBlc3RpbWF0ZWRUb3RhbFdpZHRoID4gd2lkdGggPyBzY3JvbGxiYXJTaXplIDogMDtcbiAgICAgIGNvbnN0IHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgIGVzdGltYXRlZFRvdGFsSGVpZ2h0ID4gaGVpZ2h0ID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG8oe1xuICAgICAgICBzY3JvbGxMZWZ0OlxuICAgICAgICAgIGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KFxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgYWxpZ24sXG4gICAgICAgICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFRvcDpcbiAgICAgICAgICByb3dJbmRleCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudChcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgICAgIGFsaWduLFxuICAgICAgICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzLFxuICAgICAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJTaXplXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogc2Nyb2xsVG9wLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IGluaXRpYWxTY3JvbGxMZWZ0LCBpbml0aWFsU2Nyb2xsVG9wIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBvdXRlclJlZiA9ICgodGhpcy5fb3V0ZXJSZWY6IGFueSk6IEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbExlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsVG9wID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IGluaXRpYWxTY3JvbGxUb3A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgY29uc3QgeyBkaXJlY3Rpb24gfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNjcm9sbExlZnQsIHNjcm9sbFRvcCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgLy8gU28gd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBtaW1pYyBpdC5cbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNvbnN0IHsgY2xpZW50V2lkdGgsIHNjcm9sbFdpZHRoIH0gPSBvdXRlclJlZjtcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHNjcm9sbExlZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgY29sdW1uQ291bnQsXG4gICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBpbm5lclJlZixcbiAgICAgICAgaW5uZXJFbGVtZW50VHlwZSxcbiAgICAgICAgaW5uZXJUYWdOYW1lLFxuICAgICAgICBpdGVtRGF0YSxcbiAgICAgICAgaXRlbUtleSA9IGRlZmF1bHRJdGVtS2V5LFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICBvdXRlclRhZ05hbWUsXG4gICAgICAgIHJvd0NvdW50LFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgdXNlSXNTY3JvbGxpbmcsXG4gICAgICAgIHdpZHRoLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGlzU2Nyb2xsaW5nIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBjb25zdCBbXG4gICAgICAgIGNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgIGNvbHVtblN0b3BJbmRleCxcbiAgICAgIF0gPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpO1xuICAgICAgY29uc3QgW3Jvd1N0YXJ0SW5kZXgsIHJvd1N0b3BJbmRleF0gPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKTtcblxuICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgIGlmIChjb2x1bW5Db3VudCA+IDAgJiYgcm93Q291bnQpIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBsZXQgcm93SW5kZXggPSByb3dTdGFydEluZGV4O1xuICAgICAgICAgIHJvd0luZGV4IDw9IHJvd1N0b3BJbmRleDtcbiAgICAgICAgICByb3dJbmRleCsrXG4gICAgICAgICkge1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBsZXQgY29sdW1uSW5kZXggPSBjb2x1bW5TdGFydEluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXggPD0gY29sdW1uU3RvcEluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXgrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGtleTogaXRlbUtleSh7IGNvbHVtbkluZGV4LCBkYXRhOiBpdGVtRGF0YSwgcm93SW5kZXggfSksXG4gICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHRoaXMuX2dldEl0ZW1TdHlsZShyb3dJbmRleCwgY29sdW1uSW5kZXgpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVhZCB0aGlzIHZhbHVlIEFGVEVSIGl0ZW1zIGhhdmUgYmVlbiBjcmVhdGVkLFxuICAgICAgLy8gU28gdGhlaXIgYWN0dWFsIHNpemVzIChpZiB2YXJpYWJsZSkgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi5cbiAgICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIG91dGVyRWxlbWVudFR5cGUgfHwgb3V0ZXJUYWdOYW1lIHx8ICdkaXYnLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIG9uU2Nyb2xsOiB0aGlzLl9vblNjcm9sbCxcbiAgICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGhlaWdodDogZXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBpc1Njcm9sbGluZyA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHdpZHRoOiBlc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkOiAoXG4gICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVSb3dTdG9wSW5kZXg6IG51bWJlclxuICAgICkgPT4gdm9pZDtcbiAgICBfY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoXG4gICAgICAoXG4gICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4OiBudW1iZXJcbiAgICAgICkgPT5cbiAgICAgICAgKCh0aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZDogYW55KTogT25JdGVtc1JlbmRlcmVkQ2FsbGJhY2spKHtcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxPblNjcm9sbDogKFxuICAgICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25TY3JvbGw6IGFueSk6IE9uU2Nyb2xsQ2FsbGJhY2spKHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGNvbnN0IHsgY29sdW1uQ291bnQsIG9uSXRlbXNSZW5kZXJlZCwgb25TY3JvbGwsIHJvd0NvdW50IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIG9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50ID4gMCkge1xuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIF0gPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpO1xuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4LFxuICAgICAgICAgIF0gPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKFxuICAgICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoXG4gICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIF9nZXRJdGVtU3R5bGU6IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiBPYmplY3Q7XG4gICAgX2dldEl0ZW1TdHlsZSA9IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogT2JqZWN0ID0+IHtcbiAgICAgIGNvbnN0IHsgY29sdW1uV2lkdGgsIGRpcmVjdGlvbiwgcm93SGVpZ2h0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBpdGVtU3R5bGVDYWNoZSA9IHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGNvbHVtbldpZHRoLFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvbixcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiByb3dIZWlnaHRcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fToke2NvbHVtbkluZGV4fWA7XG5cbiAgICAgIGxldCBzdHlsZTtcbiAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGdldENvbHVtbk9mZnNldChcbiAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICBpdGVtU3R5bGVDYWNoZVtrZXldID0gc3R5bGUgPSB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgbGVmdDogaXNSdGwgPyB1bmRlZmluZWQgOiBvZmZzZXQsXG4gICAgICAgICAgcmlnaHQ6IGlzUnRsID8gb2Zmc2V0IDogdW5kZWZpbmVkLFxuICAgICAgICAgIHRvcDogZ2V0Um93T2Zmc2V0KHRoaXMucHJvcHMsIHJvd0luZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICBoZWlnaHQ6IGdldFJvd0hlaWdodCh0aGlzLnByb3BzLCByb3dJbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgd2lkdGg6IGdldENvbHVtbldpZHRoKHRoaXMucHJvcHMsIGNvbHVtbkluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH07XG5cbiAgICBfZ2V0SXRlbVN0eWxlQ2FjaGU6IChfOiBhbnksIF9fOiBhbnksIF9fXzogYW55KSA9PiBJdGVtU3R5bGVDYWNoZTtcbiAgICBfZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKChfOiBhbnksIF9fOiBhbnksIF9fXzogYW55KSA9PiAoe30pKTtcblxuICAgIF9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbHVtbkNvdW50LFxuICAgICAgICBvdmVyc2NhbkNvbHVtbkNvdW50LFxuICAgICAgICBvdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICAgICAgb3ZlcnNjYW5Db3VudCxcbiAgICAgICAgcm93Q291bnQsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiwgaXNTY3JvbGxpbmcsIHNjcm9sbExlZnQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQ291bnRSZXNvbHZlZDogbnVtYmVyID1cbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5Db3VudCB8fCBvdmVyc2NhbkNvbHVtbnNDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0b3BJbmRleCA9IGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKVxuICAgICAgICAgIDogMTtcbiAgICAgIGNvbnN0IG92ZXJzY2FuRm9yd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSxcbiAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc3RvcEluZGV4LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBfZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29sdW1uQ291bnQsXG4gICAgICAgIG92ZXJzY2FuQ291bnQsXG4gICAgICAgIG92ZXJzY2FuUm93Q291bnQsXG4gICAgICAgIG92ZXJzY2FuUm93c0NvdW50LFxuICAgICAgICByb3dDb3VudCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZywgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sIHNjcm9sbFRvcCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgY29uc3Qgb3ZlcnNjYW5Db3VudFJlc29sdmVkOiBudW1iZXIgPVxuICAgICAgICBvdmVyc2NhblJvd0NvdW50IHx8IG92ZXJzY2FuUm93c0NvdW50IHx8IG92ZXJzY2FuQ291bnQgfHwgMTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID09PSAwIHx8IHJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBzdG9wSW5kZXggPSBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG4gICAgICBjb25zdCBvdmVyc2NhbkZvcndhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKVxuICAgICAgICAgIDogMTtcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLFxuICAgICAgICBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzdG9wSW5kZXgsXG4gICAgICBdO1xuICAgIH1cblxuICAgIF9vblNjcm9sbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xpZW50SGVpZ2h0LFxuICAgICAgICBjbGllbnRXaWR0aCxcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgfSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJlxuICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBkaXJlY3Rpb24gfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuICAgICAgICBsZXQgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oY2FsY3VsYXRlZFNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRTY3JvbGxUb3AgPSBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIE1hdGgubWluKHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogY2FsY3VsYXRlZFNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBjYWxjdWxhdGVkU2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfb3V0ZXJSZWZTZXR0ZXIgPSAocmVmOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgb3V0ZXJSZWYgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIHRoaXMuX291dGVyUmVmID0gKChyZWY6IGFueSk6IEhUTUxEaXZFbGVtZW50KTtcblxuICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgb3V0ZXJSZWYgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmXG4gICAgICAgIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JylcbiAgICAgICkge1xuICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChcbiAgICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZyxcbiAgICAgICAgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXNTY3JvbGxpbmc6IGZhbHNlIH0sICgpID0+IHtcbiAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICB0aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufVxuXG5jb25zdCB2YWxpZGF0ZVNoYXJlZFByb3BzID0gKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgZGlyZWN0aW9uLFxuICAgIGhlaWdodCxcbiAgICBpbm5lclRhZ05hbWUsXG4gICAgb3V0ZXJUYWdOYW1lLFxuICAgIG92ZXJzY2FuQ29sdW1uc0NvdW50LFxuICAgIG92ZXJzY2FuQ291bnQsXG4gICAgb3ZlcnNjYW5Sb3dzQ291bnQsXG4gICAgd2lkdGgsXG4gIH06IFByb3BzPGFueT4sXG4gIHsgaW5zdGFuY2UgfTogU3RhdGVcbik6IHZvaWQgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2Ygb3ZlcnNjYW5Db3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgJiYgIWRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBvdmVyc2NhbkNvdW50IHByb3AgaGFzIGJlZW4gZGVwcmVjYXRlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgb3ZlcnNjYW5Db2x1bW5Db3VudCBhbmQgb3ZlcnNjYW5Sb3dDb3VudCBwcm9wcyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3ZlcnNjYW5Db2x1bW5zQ291bnQgPT09ICdudW1iZXInIHx8XG4gICAgICB0eXBlb2Ygb3ZlcnNjYW5Sb3dzQ291bnQgPT09ICdudW1iZXInXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ICYmXG4gICAgICAgICFkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudC5oYXMoaW5zdGFuY2UpXG4gICAgICApIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgb3ZlcnNjYW5Db2x1bW5zQ291bnQgYW5kIG92ZXJzY2FuUm93c0NvdW50IHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBvdmVyc2NhbkNvbHVtbkNvdW50IGFuZCBvdmVyc2NhblJvd0NvdW50IHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICtcbiAgICAgICAgICBgXCIke2NoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiZGlyZWN0aW9uXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiBvciBcInJ0bFwiLiAnICtcbiAgICAgICAgICAgIGBcIiR7ZGlyZWN0aW9ufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnR3JpZHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciB3aWR0aC4gJyArXG4gICAgICAgICAgYFwiJHt3aWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB3aWR0aH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICtcbiAgICAgICAgICBgXCIke2hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHR9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH1cbiAgfVxufTtcbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgY3JlYXRlR3JpZENvbXBvbmVudCBmcm9tICcuL2NyZWF0ZUdyaWRDb21wb25lbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFByb3BzLCBTY3JvbGxUb0FsaWduIH0gZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuY29uc3QgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFID0gNTA7XG5cbnR5cGUgVmFyaWFibGVTaXplUHJvcHMgPSB7fFxuICBlc3RpbWF0ZWRDb2x1bW5XaWR0aDogbnVtYmVyLFxuICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IG51bWJlcixcbiAgLi4uUHJvcHM8YW55Pixcbnx9O1xuXG50eXBlIGl0ZW1TaXplR2V0dGVyID0gKGluZGV4OiBudW1iZXIpID0+IG51bWJlcjtcbnR5cGUgSXRlbVR5cGUgPSAnY29sdW1uJyB8ICdyb3cnO1xuXG50eXBlIEl0ZW1NZXRhZGF0YSA9IHt8XG4gIG9mZnNldDogbnVtYmVyLFxuICBzaXplOiBudW1iZXIsXG58fTtcbnR5cGUgSXRlbU1ldGFkYXRhTWFwID0geyBbaW5kZXg6IG51bWJlcl06IEl0ZW1NZXRhZGF0YSB9O1xudHlwZSBJbnN0YW5jZVByb3BzID0ge3xcbiAgY29sdW1uTWV0YWRhdGFNYXA6IEl0ZW1NZXRhZGF0YU1hcCxcbiAgZXN0aW1hdGVkQ29sdW1uV2lkdGg6IG51bWJlcixcbiAgZXN0aW1hdGVkUm93SGVpZ2h0OiBudW1iZXIsXG4gIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4OiBudW1iZXIsXG4gIGxhc3RNZWFzdXJlZFJvd0luZGV4OiBudW1iZXIsXG4gIHJvd01ldGFkYXRhTWFwOiBJdGVtTWV0YWRhdGFNYXAsXG58fTtcblxuY29uc3QgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQgPSAoXG4gIHsgcm93Q291bnQgfTogUHJvcHM8YW55PixcbiAgeyByb3dNZXRhZGF0YU1hcCwgZXN0aW1hdGVkUm93SGVpZ2h0LCBsYXN0TWVhc3VyZWRSb3dJbmRleCB9OiBJbnN0YW5jZVByb3BzXG4pID0+IHtcbiAgbGV0IHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDtcblxuICAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gcm93Q291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRSb3dJbmRleCA9IHJvd0NvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSAwKSB7XG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gcm93TWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkUm93SW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgY29uc3QgbnVtVW5tZWFzdXJlZEl0ZW1zID0gcm93Q291bnQgLSBsYXN0TWVhc3VyZWRSb3dJbmRleCAtIDE7XG4gIGNvbnN0IHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkUm93SGVpZ2h0O1xuXG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxuY29uc3QgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCA9IChcbiAgeyBjb2x1bW5Db3VudCB9OiBQcm9wczxhbnk+LFxuICB7XG4gICAgY29sdW1uTWV0YWRhdGFNYXAsXG4gICAgZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXgsXG4gIH06IEluc3RhbmNlUHJvcHNcbikgPT4ge1xuICBsZXQgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSAwO1xuXG4gIC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSBjb2x1bW5Db3VudCkge1xuICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gY29sdW1uQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID49IDApIHtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBjb2x1bW5NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRDb2x1bW5JbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICBjb25zdCBudW1Vbm1lYXN1cmVkSXRlbXMgPSBjb2x1bW5Db3VudCAtIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4IC0gMTtcbiAgY29uc3QgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRDb2x1bW5XaWR0aDtcblxuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbmNvbnN0IGdldEl0ZW1NZXRhZGF0YSA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuKTogSXRlbU1ldGFkYXRhID0+IHtcbiAgbGV0IGl0ZW1NZXRhZGF0YU1hcCwgaXRlbVNpemUsIGxhc3RNZWFzdXJlZEluZGV4O1xuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9ICgocHJvcHMuY29sdW1uV2lkdGg6IGFueSk6IGl0ZW1TaXplR2V0dGVyKTtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9ICgocHJvcHMucm93SGVpZ2h0OiBhbnkpOiBpdGVtU2l6ZUdldHRlcik7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB9XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIGxldCBzaXplID0gaXRlbVNpemUoaSk7XG5cbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBzaXplLFxuICAgICAgfTtcblxuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW0gPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIG9mZnNldDogbnVtYmVyXG4pID0+IHtcbiAgbGV0IGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXg7XG4gIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIGNvbnN0IGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPVxuICAgIGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKFxuICAgICAgaXRlbVR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCxcbiAgICAgIDAsXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKFxuICAgICAgaXRlbVR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIGhpZ2g6IG51bWJlcixcbiAgbG93OiBudW1iZXIsXG4gIG9mZnNldDogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICBjb25zdCBtaWRkbGUgPSBsb3cgKyBNYXRoLmZsb29yKChoaWdoIC0gbG93KSAvIDIpO1xuICAgIGNvbnN0IGN1cnJlbnRPZmZzZXQgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICBpdGVtVHlwZSxcbiAgICAgIHByb3BzLFxuICAgICAgbWlkZGxlLFxuICAgICAgaW5zdGFuY2VQcm9wc1xuICAgICkub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgaW5kZXg6IG51bWJlcixcbiAgb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IGl0ZW1Db3VudCA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLmNvbHVtbkNvdW50IDogcHJvcHMucm93Q291bnQ7XG4gIGxldCBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKFxuICAgIGluZGV4IDwgaXRlbUNvdW50ICYmXG4gICAgZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldFxuICApIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICBpdGVtVHlwZSxcbiAgICBwcm9wcyxcbiAgICBpbnN0YW5jZVByb3BzLFxuICAgIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSxcbiAgICBNYXRoLmZsb29yKGluZGV4IC8gMiksXG4gICAgb2Zmc2V0XG4gICk7XG59O1xuXG5jb25zdCBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IHNpemUgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy53aWR0aCA6IHByb3BzLmhlaWdodDtcbiAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuXG4gIC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gIC8vIFRvIGVuc3VyZSBpdCByZWZsZWN0cyBhY3R1YWwgbWVhc3VyZW1lbnRzIGluc3RlYWQgb2YganVzdCBlc3RpbWF0ZXMuXG4gIGNvbnN0IGVzdGltYXRlZFRvdGFsU2l6ZSA9XG4gICAgaXRlbVR5cGUgPT09ICdjb2x1bW4nXG4gICAgICA/IGdldEVzdGltYXRlZFRvdGFsV2lkdGgocHJvcHMsIGluc3RhbmNlUHJvcHMpXG4gICAgICA6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHByb3BzLCBpbnN0YW5jZVByb3BzKTtcblxuICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1heChcbiAgICAwLFxuICAgIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpXG4gICk7XG4gIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgIDAsXG4gICAgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBzY3JvbGxiYXJTaXplICsgaXRlbU1ldGFkYXRhLnNpemVcbiAgKTtcblxuICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAoYWxpZ24pIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuICAgIGNhc2UgJ2F1dG8nOlxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgfVxuICB9XG59O1xuXG5jb25zdCBWYXJpYWJsZVNpemVHcmlkID0gY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCxcblxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGZpbmROZWFyZXN0SXRlbSgnY29sdW1uJywgcHJvcHMsIGluc3RhbmNlUHJvcHMsIHNjcm9sbExlZnQpLFxuXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IGNvbHVtbkNvdW50LCB3aWR0aCB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICAnY29sdW1uJyxcbiAgICAgIHByb3BzLFxuICAgICAgc3RhcnRJbmRleCxcbiAgICAgIGluc3RhbmNlUHJvcHNcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbExlZnQgKyB3aWR0aDtcblxuICAgIGxldCBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgbGV0IHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgY29sdW1uQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG5cbiAgZ2V0Q29sdW1uV2lkdGg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXBbaW5kZXhdLnNpemUsXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG5cbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT5cbiAgICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChcbiAgICAgICdjb2x1bW4nLFxuICAgICAgcHJvcHMsXG4gICAgICBpbmRleCxcbiAgICAgIGFsaWduLFxuICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIHNjcm9sbGJhclNpemVcbiAgICApLFxuXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoXG4gICAgICAncm93JyxcbiAgICAgIHByb3BzLFxuICAgICAgaW5kZXgsXG4gICAgICBhbGlnbixcbiAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBzY3JvbGxiYXJTaXplXG4gICAgKSxcblxuICBnZXRSb3dPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQsXG5cbiAgZ2V0Um93SGVpZ2h0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwW2luZGV4XS5zaXplLFxuXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBmaW5kTmVhcmVzdEl0ZW0oJ3JvdycsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxUb3ApLFxuXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHsgcm93Q291bnQsIGhlaWdodCB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICAncm93JyxcbiAgICAgIHByb3BzLFxuICAgICAgc3RhcnRJbmRleCxcbiAgICAgIGluc3RhbmNlUHJvcHNcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbFRvcCArIGhlaWdodDtcblxuICAgIGxldCBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgbGV0IHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgcm93Q291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG5cbiAgaW5pdEluc3RhbmNlUHJvcHMocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlOiBhbnkpOiBJbnN0YW5jZVByb3BzIHtcbiAgICBjb25zdCB7XG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCxcbiAgICAgIGVzdGltYXRlZFJvd0hlaWdodCxcbiAgICB9ID0gKChwcm9wczogYW55KTogVmFyaWFibGVTaXplUHJvcHMpO1xuXG4gICAgY29uc3QgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGNvbHVtbk1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoOiBlc3RpbWF0ZWRDb2x1bW5XaWR0aCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IGVzdGltYXRlZFJvd0hlaWdodCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleDogLTEsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleDogLTEsXG4gICAgICByb3dNZXRhZGF0YU1hcDoge30sXG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJDb2x1bW5JbmRleCA9IChcbiAgICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZT86IGJvb2xlYW4gPSB0cnVlXG4gICAgKSA9PiB7XG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7IGNvbHVtbkluZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlclJvd0luZGV4ID0gKFxuICAgICAgcm93SW5kZXg6IG51bWJlcixcbiAgICAgIHNob3VsZEZvcmNlVXBkYXRlPzogYm9vbGVhbiA9IHRydWVcbiAgICApID0+IHtcbiAgICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzKHsgcm93SW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlIH0pO1xuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyA9ICh7XG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlLFxuICAgIH06IHtcbiAgICAgIGNvbHVtbkluZGV4PzogbnVtYmVyLFxuICAgICAgcm93SW5kZXg/OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZTogYm9vbGVhbixcbiAgICB9KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbkluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gTWF0aC5taW4oXG4gICAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleCAtIDFcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygcm93SW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4LFxuICAgICAgICAgIHJvd0luZGV4IC0gMVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcblxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBjb2x1bW5XaWR0aCwgcm93SGVpZ2h0IH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAgIGBcIiR7XG4gICAgICAgICAgICAgIGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoXG4gICAgICAgICAgICB9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJyb3dIZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgK1xuICAgICAgICAgICAgYFwiJHtyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBWYXJpYWJsZVNpemVHcmlkO1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjYW5jZWxUaW1lb3V0LCByZXF1ZXN0VGltZW91dCB9IGZyb20gJy4vdGltZXInO1xuaW1wb3J0IHsgZ2V0U2Nyb2xsYmFyU2l6ZSwgZ2V0UlRMT2Zmc2V0VHlwZSB9IGZyb20gJy4vZG9tSGVscGVycyc7XG5cbmltcG9ydCB0eXBlIHsgVGltZW91dElEIH0gZnJvbSAnLi90aW1lcic7XG5cbmV4cG9ydCB0eXBlIFNjcm9sbFRvQWxpZ24gPSAnYXV0bycgfCAnc21hcnQnIHwgJ2NlbnRlcicgfCAnc3RhcnQnIHwgJ2VuZCc7XG5cbnR5cGUgaXRlbVNpemUgPSBudW1iZXIgfCAoKGluZGV4OiBudW1iZXIpID0+IG51bWJlcik7XG4vLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb25zIFwiaG9yaXpvbnRhbFwiIGFuZCBcInZlcnRpY2FsXCJcbnR5cGUgRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJyB8ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG50eXBlIExheW91dCA9ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG5cbnR5cGUgUmVuZGVyQ29tcG9uZW50UHJvcHM8VD4gPSB7fFxuICBkYXRhOiBULFxuICBpbmRleDogbnVtYmVyLFxuICBpc1Njcm9sbGluZz86IGJvb2xlYW4sXG4gIHN0eWxlOiBPYmplY3QsXG58fTtcbnR5cGUgUmVuZGVyQ29tcG9uZW50PFQ+ID0gUmVhY3QkQ29tcG9uZW50VHlwZTwkU2hhcGU8UmVuZGVyQ29tcG9uZW50UHJvcHM8VD4+PjtcblxudHlwZSBTY3JvbGxEaXJlY3Rpb24gPSAnZm9yd2FyZCcgfCAnYmFja3dhcmQnO1xuXG50eXBlIG9uSXRlbXNSZW5kZXJlZENhbGxiYWNrID0gKHtcbiAgb3ZlcnNjYW5TdGFydEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVTdGFydEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVTdG9wSW5kZXg6IG51bWJlcixcbn0pID0+IHZvaWQ7XG50eXBlIG9uU2Nyb2xsQ2FsbGJhY2sgPSAoe1xuICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhbixcbn0pID0+IHZvaWQ7XG5cbnR5cGUgU2Nyb2xsRXZlbnQgPSBTeW50aGV0aWNFdmVudDxIVE1MRGl2RWxlbWVudD47XG50eXBlIEl0ZW1TdHlsZUNhY2hlID0geyBbaW5kZXg6IG51bWJlcl06IE9iamVjdCB9O1xuXG50eXBlIE91dGVyUHJvcHMgPSB7fFxuICBjaGlsZHJlbjogUmVhY3QkTm9kZSxcbiAgY2xhc3NOYW1lOiBzdHJpbmcgfCB2b2lkLFxuICBvblNjcm9sbDogU2Nyb2xsRXZlbnQgPT4gdm9pZCxcbiAgc3R5bGU6IHtcbiAgICBbc3RyaW5nXTogbWl4ZWQsXG4gIH0sXG58fTtcblxudHlwZSBJbm5lclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbmV4cG9ydCB0eXBlIFByb3BzPFQ+ID0ge3xcbiAgY2hpbGRyZW46IFJlbmRlckNvbXBvbmVudDxUPixcbiAgY2xhc3NOYW1lPzogc3RyaW5nLFxuICBkaXJlY3Rpb246IERpcmVjdGlvbixcbiAgaGVpZ2h0OiBudW1iZXIgfCBzdHJpbmcsXG4gIGluaXRpYWxTY3JvbGxPZmZzZXQ/OiBudW1iZXIsXG4gIGlubmVyUmVmPzogYW55LFxuICBpbm5lckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8SW5uZXJQcm9wcywgYW55PixcbiAgaW5uZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIGl0ZW1Db3VudDogbnVtYmVyLFxuICBpdGVtRGF0YTogVCxcbiAgaXRlbUtleT86IChpbmRleDogbnVtYmVyLCBkYXRhOiBUKSA9PiBhbnksXG4gIGl0ZW1TaXplOiBpdGVtU2l6ZSxcbiAgbGF5b3V0OiBMYXlvdXQsXG4gIG9uSXRlbXNSZW5kZXJlZD86IG9uSXRlbXNSZW5kZXJlZENhbGxiYWNrLFxuICBvblNjcm9sbD86IG9uU2Nyb2xsQ2FsbGJhY2ssXG4gIG91dGVyUmVmPzogYW55LFxuICBvdXRlckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8T3V0ZXJQcm9wcywgYW55PixcbiAgb3V0ZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ291bnQ6IG51bWJlcixcbiAgc3R5bGU/OiBPYmplY3QsXG4gIHVzZUlzU2Nyb2xsaW5nOiBib29sZWFuLFxuICB3aWR0aDogbnVtYmVyIHwgc3RyaW5nLFxufH07XG5cbnR5cGUgU3RhdGUgPSB7fFxuICBpbnN0YW5jZTogYW55LFxuICBpc1Njcm9sbGluZzogYm9vbGVhbixcbiAgc2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG58fTtcblxudHlwZSBHZXRJdGVtT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0SXRlbVNpemUgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlUHJvcHM6IGFueSkgPT4gbnVtYmVyO1xudHlwZSBHZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RhcnRJbmRleEZvck9mZnNldCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIG9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgc3RhcnRJbmRleDogbnVtYmVyLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgSW5pdEluc3RhbmNlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlOiBhbnkpID0+IGFueTtcbnR5cGUgVmFsaWRhdGVQcm9wcyA9IChwcm9wczogUHJvcHM8YW55PikgPT4gdm9pZDtcblxuY29uc3QgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMID0gMTUwO1xuXG5jb25zdCBkZWZhdWx0SXRlbUtleSA9IChpbmRleDogbnVtYmVyLCBkYXRhOiBhbnkpID0+IGluZGV4O1xuXG4vLyBJbiBERVYgbW9kZSwgdGhpcyBTZXQgaGVscHMgdXMgb25seSBsb2cgYSB3YXJuaW5nIG9uY2UgcGVyIGNvbXBvbmVudCBpbnN0YW5jZS5cbi8vIFRoaXMgYXZvaWRzIHNwYW1taW5nIHRoZSBjb25zb2xlIGV2ZXJ5IHRpbWUgYSByZW5kZXIgaGFwcGVucy5cbmxldCBkZXZXYXJuaW5nc0RpcmVjdGlvbiA9IG51bGw7XG5sZXQgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSBuZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSA9IG5ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQsXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0SXRlbVNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50LFxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBpbml0SW5zdGFuY2VQcm9wcyxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSxcbiAgdmFsaWRhdGVQcm9wcyxcbn06IHt8XG4gIGdldEl0ZW1PZmZzZXQ6IEdldEl0ZW1PZmZzZXQsXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZTogR2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRJdGVtU2l6ZTogR2V0SXRlbVNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiBHZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogR2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IEluaXRJbnN0YW5jZVByb3BzLFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBib29sZWFuLFxuICB2YWxpZGF0ZVByb3BzOiBWYWxpZGF0ZVByb3BzLFxufH0pIHtcbiAgcmV0dXJuIGNsYXNzIExpc3Q8VD4gZXh0ZW5kcyBQdXJlQ29tcG9uZW50PFByb3BzPFQ+LCBTdGF0ZT4ge1xuICAgIF9pbnN0YW5jZVByb3BzOiBhbnkgPSBpbml0SW5zdGFuY2VQcm9wcyh0aGlzLnByb3BzLCB0aGlzKTtcbiAgICBfb3V0ZXJSZWY6ID9IVE1MRGl2RWxlbWVudDtcbiAgICBfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZDogVGltZW91dElEIHwgbnVsbCA9IG51bGw7XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgICBsYXlvdXQ6ICd2ZXJ0aWNhbCcsXG4gICAgICBvdmVyc2NhbkNvdW50OiAyLFxuICAgICAgdXNlSXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgIH07XG5cbiAgICBzdGF0ZTogU3RhdGUgPSB7XG4gICAgICBpbnN0YW5jZTogdGhpcyxcbiAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgIHNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgc2Nyb2xsT2Zmc2V0OlxuICAgICAgICB0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0XG4gICAgICAgICAgOiAwLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wczxUPikge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICBuZXh0UHJvcHM6IFByb3BzPFQ+LFxuICAgICAgcHJldlN0YXRlOiBTdGF0ZVxuICAgICk6ICRTaGFwZTxTdGF0ZT4gfCBudWxsIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG8oc2Nyb2xsT2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIHNjcm9sbE9mZnNldCk7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9JdGVtKGluZGV4OiBudW1iZXIsIGFsaWduOiBTY3JvbGxUb0FsaWduID0gJ2F1dG8nKTogdm9pZCB7XG4gICAgICBjb25zdCB7IGl0ZW1Db3VudCwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxPZmZzZXQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpKTtcblxuICAgICAgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LCB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cbiAgICAgIC8vIFRoaXMgaXMgYW4gZWRnZSBjYXNlIGZvciBsaXN0czsgbm9ybWFsbHkgdGhleSBvbmx5IHNjcm9sbCBpbiB0aGUgZG9taW5hbnQgZGlyZWN0aW9uLlxuICAgICAgbGV0IHNjcm9sbGJhclNpemUgPSAwO1xuICAgICAgaWYgKHRoaXMuX291dGVyUmVmKSB7XG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuICAgICAgICBpZiAobGF5b3V0ID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxXaWR0aCA+IG91dGVyUmVmLmNsaWVudFdpZHRoXG4gICAgICAgICAgICAgID8gZ2V0U2Nyb2xsYmFyU2l6ZSgpXG4gICAgICAgICAgICAgIDogMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY3JvbGxiYXJTaXplID1cbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbEhlaWdodCA+IG91dGVyUmVmLmNsaWVudEhlaWdodFxuICAgICAgICAgICAgICA/IGdldFNjcm9sbGJhclNpemUoKVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxUbyhcbiAgICAgICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoXG4gICAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBhbGlnbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICBzY3JvbGxiYXJTaXplXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiwgaW5pdGlhbFNjcm9sbE9mZnNldCwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBsYXlvdXQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNjcm9sbE9mZnNldCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBzY3JvbGxXaWR0aCB9ID0gb3V0ZXJSZWY7XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgaW5uZXJSZWYsXG4gICAgICAgIGlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgIGlubmVyVGFnTmFtZSxcbiAgICAgICAgaXRlbUNvdW50LFxuICAgICAgICBpdGVtRGF0YSxcbiAgICAgICAgaXRlbUtleSA9IGRlZmF1bHRJdGVtS2V5LFxuICAgICAgICBsYXlvdXQsXG4gICAgICAgIG91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgIG91dGVyVGFnTmFtZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICB3aWR0aCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICBjb25zdCBpc0hvcml6b250YWwgPVxuICAgICAgICBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgICAgY29uc3Qgb25TY3JvbGwgPSBpc0hvcml6b250YWxcbiAgICAgICAgPyB0aGlzLl9vblNjcm9sbEhvcml6b250YWxcbiAgICAgICAgOiB0aGlzLl9vblNjcm9sbFZlcnRpY2FsO1xuXG4gICAgICBjb25zdCBbc3RhcnRJbmRleCwgc3RvcEluZGV4XSA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKTtcblxuICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnRJbmRleDsgaW5kZXggPD0gc3RvcEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgIGtleTogaXRlbUtleShpbmRleCwgaXRlbURhdGEpLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUoaW5kZXgpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2JyxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBvblNjcm9sbCxcbiAgICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGhlaWdodDogaXNIb3Jpem9udGFsID8gJzEwMCUnIDogZXN0aW1hdGVkVG90YWxTaXplLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gZXN0aW1hdGVkVG90YWxTaXplIDogJzEwMCUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkOiAoXG4gICAgICBvdmVyc2NhblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVN0b3BJbmRleDogbnVtYmVyXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShcbiAgICAgIChcbiAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVTdG9wSW5kZXg6IG51bWJlclxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkOiBhbnkpOiBvbkl0ZW1zUmVuZGVyZWRDYWxsYmFjaykoe1xuICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4LFxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBfY2FsbE9uU2Nyb2xsOiAoXG4gICAgICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25TY3JvbGw6IGFueSk6IG9uU2Nyb2xsQ2FsbGJhY2spKHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgeyBpdGVtQ291bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgICAgY29uc3QgW1xuICAgICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVTdG9wSW5kZXgsXG4gICAgICAgICAgXSA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKFxuICAgICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVTdG9wSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoXG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIF9nZXRJdGVtU3R5bGU6IChpbmRleDogbnVtYmVyKSA9PiBPYmplY3Q7XG4gICAgX2dldEl0ZW1TdHlsZSA9IChpbmRleDogbnVtYmVyKTogT2JqZWN0ID0+IHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBpdGVtU2l6ZSwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBpdGVtU3R5bGVDYWNoZSA9IHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGl0ZW1TaXplLFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGxheW91dCxcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb25cbiAgICAgICk7XG5cbiAgICAgIGxldCBzdHlsZTtcbiAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcbiAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtpbmRleF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBnZXRJdGVtT2Zmc2V0KHRoaXMucHJvcHMsIGluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGdldEl0ZW1TaXplKHRoaXMucHJvcHMsIGluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcblxuICAgICAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID1cbiAgICAgICAgICBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgICAgICBjb25zdCBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICAgIGNvbnN0IG9mZnNldEhvcml6b250YWwgPSBpc0hvcml6b250YWwgPyBvZmZzZXQgOiAwO1xuICAgICAgICBpdGVtU3R5bGVDYWNoZVtpbmRleF0gPSBzdHlsZSA9IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICBsZWZ0OiBpc1J0bCA/IHVuZGVmaW5lZCA6IG9mZnNldEhvcml6b250YWwsXG4gICAgICAgICAgcmlnaHQ6IGlzUnRsID8gb2Zmc2V0SG9yaXpvbnRhbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0b3A6ICFpc0hvcml6b250YWwgPyBvZmZzZXQgOiAwLFxuICAgICAgICAgIGhlaWdodDogIWlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuXG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlOiAoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gSXRlbVN0eWxlQ2FjaGU7XG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZSgoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gKHt9KSk7XG5cbiAgICBfZ2V0UmFuZ2VUb1JlbmRlcigpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICBjb25zdCB7IGl0ZW1Db3VudCwgb3ZlcnNjYW5Db3VudCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaXNTY3JvbGxpbmcsIHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsT2Zmc2V0IH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoaXRlbUNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBzdG9wSW5kZXggPSBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50KVxuICAgICAgICAgIDogMTtcbiAgICAgIGNvbnN0IG92ZXJzY2FuRm9yd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudClcbiAgICAgICAgICA6IDE7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSxcbiAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHN0b3BJbmRleCxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgX29uU2Nyb2xsSG9yaXpvbnRhbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgY2xpZW50V2lkdGgsIHNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIH0gPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4ge1xuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGRpcmVjdGlvbiB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBsZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cbiAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihzY3JvbGxPZmZzZXQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfb25TY3JvbGxWZXJ0aWNhbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgY2xpZW50SGVpZ2h0LCBzY3JvbGxIZWlnaHQsIHNjcm9sbFRvcCB9ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cbiAgICAgICAgY29uc3Qgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfTtcblxuICAgIF9vdXRlclJlZlNldHRlciA9IChyZWY6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgeyBvdXRlclJlZiB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgdGhpcy5fb3V0ZXJSZWYgPSAoKHJlZjogYW55KTogSFRNTERpdkVsZW1lbnQpO1xuXG4gICAgICBpZiAodHlwZW9mIG91dGVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG91dGVyUmVmKHJlZik7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBvdXRlclJlZiAhPSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBvdXRlclJlZiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgb3V0ZXJSZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKVxuICAgICAgKSB7XG4gICAgICAgIG91dGVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IHJlcXVlc3RUaW1lb3V0KFxuICAgICAgICB0aGlzLl9yZXNldElzU2Nyb2xsaW5nLFxuICAgICAgICBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIF9yZXNldElzU2Nyb2xsaW5nID0gKCkgPT4ge1xuICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpc1Njcm9sbGluZzogZmFsc2UgfSwgKCkgPT4ge1xuICAgICAgICAvLyBDbGVhciBzdHlsZSBjYWNoZSBhZnRlciBzdGF0ZSB1cGRhdGUgaGFzIGJlZW4gY29tbWl0dGVkLlxuICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgIHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xLCBudWxsKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG59XG5cbi8vIE5PVEU6IEkgY29uc2lkZXJlZCBmdXJ0aGVyIHdyYXBwaW5nIGluZGl2aWR1YWwgaXRlbXMgd2l0aCBhIHB1cmUgTGlzdEl0ZW0gY29tcG9uZW50LlxuLy8gVGhpcyB3b3VsZCBhdm9pZCBldmVyIGNhbGxpbmcgdGhlIHJlbmRlciBmdW5jdGlvbiBmb3IgdGhlIHNhbWUgaW5kZXggbW9yZSB0aGFuIG9uY2UsXG4vLyBCdXQgaXQgd291bGQgYWxzbyBhZGQgdGhlIG92ZXJoZWFkIG9mIGEgbG90IG9mIGNvbXBvbmVudHMvZmliZXJzLlxuLy8gSSBhc3N1bWUgcGVvcGxlIGFscmVhZHkgZG8gdGhpcyAocmVuZGVyIGZ1bmN0aW9uIHJldHVybmluZyBhIGNsYXNzIGNvbXBvbmVudCksXG4vLyBTbyBteSBkb2luZyBpdCB3b3VsZCBqdXN0IHVubmVjZXNzYXJpbHkgZG91YmxlIHRoZSB3cmFwcGVycy5cblxuY29uc3QgdmFsaWRhdGVTaGFyZWRQcm9wcyA9IChcbiAge1xuICAgIGNoaWxkcmVuLFxuICAgIGRpcmVjdGlvbixcbiAgICBoZWlnaHQsXG4gICAgbGF5b3V0LFxuICAgIGlubmVyVGFnTmFtZSxcbiAgICBvdXRlclRhZ05hbWUsXG4gICAgd2lkdGgsXG4gIH06IFByb3BzPGFueT4sXG4gIHsgaW5zdGFuY2UgfTogU3RhdGVcbik6IHZvaWQgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICBpZiAoZGV2V2FybmluZ3NEaXJlY3Rpb24gJiYgIWRldldhcm5pbmdzRGlyZWN0aW9uLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgICBkZXZXYXJuaW5nc0RpcmVjdGlvbi5hZGQoaW5zdGFuY2UpO1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICdUaGUgZGlyZWN0aW9uIHByb3Agc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIChkZWZhdWx0KSBvciBcInJ0bFwiLiAnICtcbiAgICAgICAgICAgICAgJ1BsZWFzZSB1c2UgdGhlIGxheW91dCBwcm9wIHRvIHNwZWNpZnkgXCJ2ZXJ0aWNhbFwiIChkZWZhdWx0KSBvciBcImhvcml6b250YWxcIiBvcmllbnRhdGlvbi4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArXG4gICAgICAgICAgICBgXCIke2RpcmVjdGlvbn1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGxheW91dCkge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwibGF5b3V0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJob3Jpem9udGFsXCIgb3IgXCJ2ZXJ0aWNhbFwiLiAnICtcbiAgICAgICAgICAgIGBcIiR7bGF5b3V0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICtcbiAgICAgICAgICBgXCIke2NoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaXNIb3Jpem9udGFsICYmIHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQW4gaW52YWxpZCBcIndpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdIb3Jpem9udGFsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgK1xuICAgICAgICAgIGBcIiR7d2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGh9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWlzSG9yaXpvbnRhbCAmJiB0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdWZXJ0aWNhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArXG4gICAgICAgICAgYFwiJHtoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUxpc3RDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVMaXN0Q29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbmNvbnN0IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSA9IDUwO1xuXG50eXBlIFZhcmlhYmxlU2l6ZVByb3BzID0ge3xcbiAgZXN0aW1hdGVkSXRlbVNpemU6IG51bWJlcixcbiAgLi4uUHJvcHM8YW55Pixcbnx9O1xuXG50eXBlIGl0ZW1TaXplR2V0dGVyID0gKGluZGV4OiBudW1iZXIpID0+IG51bWJlcjtcblxudHlwZSBJdGVtTWV0YWRhdGEgPSB7fFxuICBvZmZzZXQ6IG51bWJlcixcbiAgc2l6ZTogbnVtYmVyLFxufH07XG50eXBlIEluc3RhbmNlUHJvcHMgPSB7fFxuICBpdGVtTWV0YWRhdGFNYXA6IHsgW2luZGV4OiBudW1iZXJdOiBJdGVtTWV0YWRhdGEgfSxcbiAgZXN0aW1hdGVkSXRlbVNpemU6IG51bWJlcixcbiAgbGFzdE1lYXN1cmVkSW5kZXg6IG51bWJlcixcbnx9O1xuXG5jb25zdCBnZXRJdGVtTWV0YWRhdGEgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4pOiBJdGVtTWV0YWRhdGEgPT4ge1xuICBjb25zdCB7IGl0ZW1TaXplIH0gPSAoKHByb3BzOiBhbnkpOiBWYXJpYWJsZVNpemVQcm9wcyk7XG4gIGNvbnN0IHsgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleCB9ID0gaW5zdGFuY2VQcm9wcztcblxuICBpZiAoaW5kZXggPiBsYXN0TWVhc3VyZWRJbmRleCkge1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgICAgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBsYXN0TWVhc3VyZWRJbmRleCArIDE7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgbGV0IHNpemUgPSAoKGl0ZW1TaXplOiBhbnkpOiBpdGVtU2l6ZUdldHRlcikoaSk7XG5cbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBzaXplLFxuICAgICAgfTtcblxuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IGluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW0gPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBvZmZzZXQ6IG51bWJlclxuKSA9PiB7XG4gIGNvbnN0IHsgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleCB9ID0gaW5zdGFuY2VQcm9wcztcblxuICBjb25zdCBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID1cbiAgICBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICAgIHByb3BzLFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4LFxuICAgICAgMCxcbiAgICAgIG9mZnNldFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBoaWdoOiBudW1iZXIsXG4gIGxvdzogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICBjb25zdCBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBtaWRkbGUsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2ggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBpbmRleDogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgY29uc3QgeyBpdGVtQ291bnQgfSA9IHByb3BzO1xuICBsZXQgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChcbiAgICBpbmRleCA8IGl0ZW1Db3VudCAmJlxuICAgIGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldFxuICApIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICBwcm9wcyxcbiAgICBpbnN0YW5jZVByb3BzLFxuICAgIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSxcbiAgICBNYXRoLmZsb29yKGluZGV4IC8gMiksXG4gICAgb2Zmc2V0XG4gICk7XG59O1xuXG5jb25zdCBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAoXG4gIHsgaXRlbUNvdW50IH06IFByb3BzPGFueT4sXG4gIHsgaXRlbU1ldGFkYXRhTWFwLCBlc3RpbWF0ZWRJdGVtU2l6ZSwgbGFzdE1lYXN1cmVkSW5kZXggfTogSW5zdGFuY2VQcm9wc1xuKSA9PiB7XG4gIGxldCB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgPSAwO1xuXG4gIC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG4gIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSBpdGVtQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGl0ZW1Db3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgY29uc3QgbnVtVW5tZWFzdXJlZEl0ZW1zID0gaXRlbUNvdW50IC0gbGFzdE1lYXN1cmVkSW5kZXggLSAxO1xuICBjb25zdCB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZEl0ZW1TaXplO1xuXG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbmNvbnN0IFZhcmlhYmxlU2l6ZUxpc3QgPSBjcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0LFxuXG4gIGdldEl0ZW1TaXplOiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZSxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG5cbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgeyBkaXJlY3Rpb24sIGhlaWdodCwgbGF5b3V0LCB3aWR0aCB9ID0gcHJvcHM7XG5cbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICBjb25zdCBzaXplID0gKCgoaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQpOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuXG4gICAgLy8gR2V0IGVzdGltYXRlZCB0b3RhbCBzaXplIGFmdGVyIEl0ZW1NZXRhZGF0YSBpcyBjb21wdXRlZCxcbiAgICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsU2l6ZSA9IGdldEVzdGltYXRlZFRvdGFsU2l6ZShwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG5cbiAgICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBpdGVtTWV0YWRhdGEuc2l6ZSArIHNjcm9sbGJhclNpemVcbiAgICApO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmXG4gICAgICAgIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplXG4gICAgICApIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGZpbmROZWFyZXN0SXRlbShwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KSxcblxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IGRpcmVjdGlvbiwgaGVpZ2h0LCBpdGVtQ291bnQsIGxheW91dCwgd2lkdGggfSA9IHByb3BzO1xuXG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbE9mZnNldCArIHNpemU7XG5cbiAgICBsZXQgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIGxldCBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGl0ZW1Db3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KTogSW5zdGFuY2VQcm9wcyB7XG4gICAgY29uc3QgeyBlc3RpbWF0ZWRJdGVtU2l6ZSB9ID0gKChwcm9wczogYW55KTogVmFyaWFibGVTaXplUHJvcHMpO1xuXG4gICAgY29uc3QgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRJdGVtU2l6ZTogZXN0aW1hdGVkSXRlbVNpemUgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXg6IC0xLFxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kZXggPSAoXG4gICAgICBpbmRleDogbnVtYmVyLFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGU/OiBib29sZWFuID0gdHJ1ZVxuICAgICkgPT4ge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IE1hdGgubWluKFxuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4LFxuICAgICAgICBpbmRleCAtIDFcbiAgICAgICk7XG5cbiAgICAgIC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IG9wdGltaXplIGZ1cnRoZXIgYnkgb25seSBldmljdGluZyBzdHlsZXMgYWZ0ZXIgdGhpcyBpbmRleCxcbiAgICAgIC8vIEJ1dCBzaW5jZSBzdHlsZXMgYXJlIG9ubHkgY2FjaGVkIHdoaWxlIHNjcm9sbGluZyBpcyBpbiBwcm9ncmVzcy1cbiAgICAgIC8vIEl0IHNlZW1zIGFuIHVubmVjZXNzYXJ5IG9wdGltaXphdGlvbi5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhhdCByZXNldEFmdGVySW5kZXgoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2Nyb2xsaW5nLlxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGZhbHNlLFxuXG4gIHZhbGlkYXRlUHJvcHM6ICh7IGl0ZW1TaXplIH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtU2l6ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAgIGBcIiR7aXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemV9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFZhcmlhYmxlU2l6ZUxpc3Q7XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUdyaWRDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlR3JpZENvbXBvbmVudCc7XG5cbmNvbnN0IEZpeGVkU2l6ZUdyaWQgPSBjcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0OiAoeyBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldENvbHVtbldpZHRoOiAoeyBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKSxcblxuICBnZXRSb3dPZmZzZXQ6ICh7IHJvd0hlaWdodCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSxcblxuICBnZXRSb3dIZWlnaHQ6ICh7IHJvd0hlaWdodCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6ICh7IHJvd0NvdW50LCByb3dIZWlnaHQgfTogUHJvcHM8YW55PikgPT5cbiAgICAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAqIHJvd0NvdW50LFxuXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6ICh7IGNvbHVtbkNvdW50LCBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+KSA9PlxuICAgICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgKiBjb2x1bW5Db3VudCxcblxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IChcbiAgICB7IGNvbHVtbkNvdW50LCBjb2x1bW5XaWR0aCwgd2lkdGggfTogUHJvcHM8YW55PixcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiB0eXBlb2YgdW5kZWZpbmVkLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGxhc3RDb2x1bW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBjb2x1bW5Db3VudCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgLSB3aWR0aFxuICAgICk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5taW4oXG4gICAgICBsYXN0Q29sdW1uT2Zmc2V0LFxuICAgICAgY29sdW1uSW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICBjb25zdCBtaW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBjb2x1bW5JbmRleCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgLVxuICAgICAgICB3aWR0aCArXG4gICAgICAgIHNjcm9sbGJhclNpemUgK1xuICAgICAgICAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0IC0gd2lkdGggJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQgKyB3aWR0aCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgY29uc3QgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbCh3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RDb2x1bW5PZmZzZXQgKyBNYXRoLmZsb29yKHdpZHRoIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdENvbHVtbk9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsTGVmdDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IChcbiAgICB7IHJvd0hlaWdodCwgaGVpZ2h0LCByb3dDb3VudCB9OiBQcm9wczxhbnk+LFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogdHlwZW9mIHVuZGVmaW5lZCxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsYXN0Um93T2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgcm93Q291bnQgKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAtIGhlaWdodFxuICAgICk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5taW4oXG4gICAgICBsYXN0Um93T2Zmc2V0LFxuICAgICAgcm93SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgcm93SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAtXG4gICAgICAgIGhlaWdodCArXG4gICAgICAgIHNjcm9sbGJhclNpemUgK1xuICAgICAgICAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWluT2Zmc2V0IC0gaGVpZ2h0ICYmIHNjcm9sbFRvcCA8PSBtYXhPZmZzZXQgKyBoZWlnaHQpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIGNvbnN0IG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgbWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdFJvd09mZnNldCArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdFJvd09mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbFRvcDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsVG9wIDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICB7IGNvbHVtbldpZHRoLCBjb2x1bW5Db3VudCB9OiBQcm9wczxhbnk+LFxuICAgIHNjcm9sbExlZnQ6IG51bWJlclxuICApOiBudW1iZXIgPT5cbiAgICBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgY29sdW1uQ291bnQgLSAxLFxuICAgICAgICBNYXRoLmZsb29yKHNjcm9sbExlZnQgLyAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpKVxuICAgICAgKVxuICAgICksXG5cbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogKFxuICAgIHsgY29sdW1uV2lkdGgsIGNvbHVtbkNvdW50LCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxMZWZ0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsZWZ0ID0gc3RhcnRJbmRleCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgbnVtVmlzaWJsZUNvbHVtbnMgPSBNYXRoLmNlaWwoXG4gICAgICAod2lkdGggKyBzY3JvbGxMZWZ0IC0gbGVmdCkgLyAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGNvbHVtbkNvdW50IC0gMSxcbiAgICAgICAgc3RhcnRJbmRleCArIG51bVZpc2libGVDb2x1bW5zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgICApXG4gICAgKTtcbiAgfSxcblxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgeyByb3dIZWlnaHQsIHJvd0NvdW50IH06IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsVG9wOiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4ocm93Q291bnQgLSAxLCBNYXRoLmZsb29yKHNjcm9sbFRvcCAvICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpKSlcbiAgICApLFxuXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICB7IHJvd0hlaWdodCwgcm93Q291bnQsIGhlaWdodCB9OiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxUb3A6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHRvcCA9IHN0YXJ0SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBudW1WaXNpYmxlUm93cyA9IE1hdGguY2VpbChcbiAgICAgIChoZWlnaHQgKyBzY3JvbGxUb3AgLSB0b3ApIC8gKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgcm93Q291bnQgLSAxLFxuICAgICAgICBzdGFydEluZGV4ICsgbnVtVmlzaWJsZVJvd3MgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICAgIClcbiAgICApO1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+KTogYW55IHtcbiAgICAvLyBOb29wXG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBjb2x1bW5XaWR0aCwgcm93SGVpZ2h0IH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgK1xuICAgICAgICAgICAgYFwiJHtcbiAgICAgICAgICAgICAgY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGhcbiAgICAgICAgICAgIH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArXG4gICAgICAgICAgICBgXCIke3Jvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHR9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZpeGVkU2l6ZUdyaWQ7XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUxpc3RDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVMaXN0Q29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbnR5cGUgSW5zdGFuY2VQcm9wcyA9IGFueTtcblxuY29uc3QgRml4ZWRTaXplTGlzdCA9IGNyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0OiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldEl0ZW1TaXplOiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6ICh7IGl0ZW1Db3VudCwgaXRlbVNpemUgfTogUHJvcHM8YW55PikgPT5cbiAgICAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpICogaXRlbUNvdW50LFxuXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiAoXG4gICAgeyBkaXJlY3Rpb24sIGhlaWdodCwgaXRlbUNvdW50LCBpdGVtU2l6ZSwgbGF5b3V0LCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICBjb25zdCBzaXplID0gKCgoaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQpOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IGxhc3RJdGVtT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgaXRlbUNvdW50ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSAtIHNpemVcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgbGFzdEl0ZW1PZmZzZXQsXG4gICAgICBpbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGluZGV4ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSAtXG4gICAgICAgIHNpemUgK1xuICAgICAgICAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpICtcbiAgICAgICAgc2Nyb2xsYmFyU2l6ZVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiZcbiAgICAgICAgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemVcbiAgICAgICkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIGNhc2UgJ2NlbnRlcic6IHtcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICBjb25zdCBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMlxuICAgICAgICApO1xuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKHNpemUgLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0SXRlbU9mZnNldCArIE1hdGguZmxvb3Ioc2l6ZSAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RJdGVtT2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgeyBpdGVtQ291bnQsIGl0ZW1TaXplIH06IFByb3BzPGFueT4sXG4gICAgb2Zmc2V0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgTWF0aC5mbG9vcihvZmZzZXQgLyAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpKSlcbiAgICApLFxuXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICB7IGRpcmVjdGlvbiwgaGVpZ2h0LCBpdGVtQ291bnQsIGl0ZW1TaXplLCBsYXlvdXQsIHdpZHRoIH06IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRJbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBudW1WaXNpYmxlSXRlbXMgPSBNYXRoLmNlaWwoXG4gICAgICAoc2l6ZSArIHNjcm9sbE9mZnNldCAtIG9mZnNldCkgLyAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGl0ZW1Db3VudCAtIDEsXG4gICAgICAgIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlSXRlbXMgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICAgIClcbiAgICApO1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+KTogYW55IHtcbiAgICAvLyBOb29wXG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+KTogdm9pZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICtcbiAgICAgICAgICAgIGBcIiR7aXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemV9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZpeGVkU2l6ZUxpc3Q7XG4iLCAiLy8gQGZsb3dcblxuLy8gUHVsbGVkIGZyb20gcmVhY3QtY29tcGF0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3ByZWFjdC1jb21wYXQvYmxvYi83YzVkZTAwZTdjODVlMmZmZDAxMWJmM2FmMDI4OTliNjNmNjk5ZDNhL3NyYy9pbmRleC5qcyNMMzQ5XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaGFsbG93RGlmZmVycyhwcmV2OiBPYmplY3QsIG5leHQ6IE9iamVjdCk6IGJvb2xlYW4ge1xuICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gcHJldikge1xuICAgIGlmICghKGF0dHJpYnV0ZSBpbiBuZXh0KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBuZXh0KSB7XG4gICAgaWYgKHByZXZbYXR0cmlidXRlXSAhPT0gbmV4dFthdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBzaGFsbG93RGlmZmVycyBmcm9tICcuL3NoYWxsb3dEaWZmZXJzJztcblxuLy8gQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW8oKS5cbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RtZW1vXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcmVFcXVhbChcbiAgcHJldlByb3BzOiBPYmplY3QsXG4gIG5leHRQcm9wczogT2JqZWN0XG4pOiBib29sZWFuIHtcbiAgY29uc3QgeyBzdHlsZTogcHJldlN0eWxlLCAuLi5wcmV2UmVzdCB9ID0gcHJldlByb3BzO1xuICBjb25zdCB7IHN0eWxlOiBuZXh0U3R5bGUsIC4uLm5leHRSZXN0IH0gPSBuZXh0UHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICAhc2hhbGxvd0RpZmZlcnMocHJldlN0eWxlLCBuZXh0U3R5bGUpICYmICFzaGFsbG93RGlmZmVycyhwcmV2UmVzdCwgbmV4dFJlc3QpXG4gICk7XG59XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGFyZUVxdWFsIGZyb20gJy4vYXJlRXF1YWwnO1xuaW1wb3J0IHNoYWxsb3dEaWZmZXJzIGZyb20gJy4vc2hhbGxvd0RpZmZlcnMnO1xuXG4vLyBDdXN0b20gc2hvdWxkQ29tcG9uZW50VXBkYXRlIGZvciBjbGFzcyBjb21wb25lbnRzLlxuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1jb21wb25lbnQuaHRtbCNzaG91bGRjb21wb25lbnR1cGRhdGVcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShcbiAgbmV4dFByb3BzOiBPYmplY3QsXG4gIG5leHRTdGF0ZTogT2JqZWN0XG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAhYXJlRXF1YWwodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBuZXh0U3RhdGUpXG4gICk7XG59XG4iLCAidmFyIF9leGNsdWRlZCA9IFtcImRhdGEtdGVzdC1zdWJqXCIsIFwiYXN5bmNcIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wcmVzc2VkXCIsIFwiY3VzdG9tT3B0aW9uVGV4dFwiLCBcImZ1bGxXaWR0aFwiLCBcImlkXCIsIFwiaW5wdXRSZWZcIiwgXCJpc0Nhc2VTZW5zaXRpdmVcIiwgXCJpc0NsZWFyYWJsZVwiLCBcImlzRGlzYWJsZWRcIiwgXCJpc0ludmFsaWRcIiwgXCJpc0xvYWRpbmdcIiwgXCJub1N1Z2dlc3Rpb25zXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkNyZWF0ZU9wdGlvblwiLCBcIm9uU2VhcmNoQ2hhbmdlXCIsIFwib3B0aW9uc1wiLCBcInBsYWNlaG9sZGVyXCIsIFwicmVuZGVyT3B0aW9uXCIsIFwicm93SGVpZ2h0XCIsIFwic2VsZWN0ZWRPcHRpb25zXCIsIFwic2luZ2xlU2VsZWN0aW9uXCIsIFwicHJlcGVuZFwiLCBcInNvcnRNYXRjaGVzQnlcIiwgXCJkZWxpbWl0ZXJcIiwgXCJhcHBlbmRcIiwgXCJhdXRvRm9jdXNcIiwgXCJ0cnVuY2F0aW9uUHJvcHNcIiwgXCJpbnB1dFBvcG92ZXJQcm9wc1wiLCBcIm9wdGlvbk1hdGNoZXJcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIEVsZW1lbnRzIHdpdGhpbiBFdWlDb21ib0JveCB3aGljaCB3b3VsZCBub3JtYWxseSBiZSB0YWJiYWJsZSAoaW5wdXRzLCBidXR0b25zKSBoYXZlIGJlZW4gcmVtb3ZlZFxuICogZnJvbSB0aGUgdGFiIG9yZGVyIHdpdGggdGFiaW5kZXg9ey0xfSBzbyB0aGF0IHdlIGNhbiBjb250cm9sIHRoZSBrZXlib2FyZCBuYXZpZ2F0aW9uIGludGVyZmFjZS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgUmVuZGVyV2l0aEV1aVRoZW1lLCBodG1sSWRHZW5lcmF0b3IsIGtleXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBsb2dpY2FsU3R5bGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBFdWlJbnB1dFBvcG92ZXIgfSBmcm9tICcuLi9wb3BvdmVyJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGV1aUZvcm1NYXhXaWR0aCB9IGZyb20gJy4uL2Zvcm0vZm9ybS5zdHlsZXMnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hpbmdPcHRpb25zLCBmbGF0dGVuT3B0aW9uR3JvdXBzLCBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlLCB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHksIGNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIgfSBmcm9tICcuL21hdGNoaW5nX29wdGlvbnMnO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hJbnB1dCB9IGZyb20gJy4vY29tYm9fYm94X2lucHV0L2NvbWJvX2JveF9pbnB1dCc7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbnNMaXN0IH0gZnJvbSAnLi9jb21ib19ib3hfb3B0aW9uc19saXN0JztcbmltcG9ydCB7IGV1aUNvbWJvQm94U3R5bGVzIGFzIHN0eWxlcyB9IGZyb20gJy4vY29tYm9fYm94LnN0eWxlcyc7XG5cbi8qKlxuICogQmVjYXVzZSBvZiBob3cgVHlwZVNjcmlwdCdzIExpYnJhcnlNYW5hZ2VkQXR0cmlidXRlcyBpcyBkZXNpZ25lZCB0byBoYW5kbGUgZGVmYXVsdFByb3BzIChodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9yZWxlYXNlLW5vdGVzL3R5cGVzY3JpcHQtMy0wLmh0bWwjc3VwcG9ydC1mb3ItZGVmYXVsdHByb3BzLWluLWpzeClcbiAqIHdlIGNhbid0IGRpcmVjdGx5IGV4cG9ydCB0aGUgYWJvdmUgUHJvcHMgZGVmaW5pdGlvbnMsIGFzIHRoZSBkZWZhdWx0ZWQgdmFsdWVzIGFyZSBub3QgbWFkZSBvcHRpb25hbFxuICogYXMgaXQgaXNuJ3QgcHJvY2Vzc2VkIGJ5IExpYnJhcnlNYW5hZ2VkQXR0cmlidXRlcy4gVG8gZ2V0IGFyb3VuZCB0aGlzLCB3ZTpcbiAqIC0gcmVtb3ZlIHRoZSBwcm9wcyB3aGljaCBoYXZlIGRlZmF1bHQgdmFsdWVzIGFwcGxpZWRcbiAqICAgLSBhZGRpdGlvbmFsbHkgcmUtZGVmaW5lIGBvcHRpb25zYCBhbmQgYHNlbGVjdGVkT3B0aW9uc2AgZGVmYXVsdHMsIG5lY2Vzc2FyeSBhcyBzdGF0aWMgbWVtYmVycyBjYW4ndCBhY2Nlc3MgZ2VuZXJpY3MgYW5kIGJlY29tZSBuZXZlcltdXG4gKiAtIGV4cG9ydCAoUHJvcHMgLSBEZWZhdWx0cykgJiBQYXJ0aWFsPERlZmF1bHRzPlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGluaXRpYWxTZWFyY2hWYWx1ZSA9ICcnO1xuZXhwb3J0IHZhciBFdWlDb21ib0JveCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlDb21ib0JveCgpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbWJvQm94KTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlDb21ib0JveCwgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic3RhdGVcIiwge1xuICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IC0xLFxuICAgICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgICAgaXNMaXN0T3BlbjogZmFsc2UsXG4gICAgICBtYXRjaGluZ09wdGlvbnM6IGdldE1hdGNoaW5nT3B0aW9ucyh7XG4gICAgICAgIG9wdGlvbnM6IF90aGlzLnByb3BzLm9wdGlvbnMsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uczogX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzZWFyY2hWYWx1ZTogaW5pdGlhbFNlYXJjaFZhbHVlLFxuICAgICAgICBvcHRpb25NYXRjaGVyOiBfdGhpcy5wcm9wcy5vcHRpb25NYXRjaGVyLFxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmU6IF90aGlzLnByb3BzLmlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgaXNQcmVGaWx0ZXJlZDogX3RoaXMucHJvcHMuYXN5bmMsXG4gICAgICAgIHNob3dQcmV2U2VsZWN0ZWQ6IEJvb2xlYW4oX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uKSxcbiAgICAgICAgc29ydE1hdGNoZXNCeTogX3RoaXMucHJvcHMuc29ydE1hdGNoZXNCeVxuICAgICAgfSksXG4gICAgICBzZWFyY2hWYWx1ZTogaW5pdGlhbFNlYXJjaFZhbHVlXG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJvb3RJZFwiLCBodG1sSWRHZW5lcmF0b3IoKSk7XG4gICAgLy8gUmVmc1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjb21ib0JveFJlZkluc3RhbmNlXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjb21ib0JveFJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNlYXJjaElucHV0UmVmSW5zdGFuY2VcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNlYXJjaElucHV0UmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgdmFyIF90aGlzJHByb3BzJGlucHV0UmVmLCBfdGhpcyRwcm9wcztcbiAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgICAoX3RoaXMkcHJvcHMkaW5wdXRSZWYgPSAoX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcykuaW5wdXRSZWYpID09PSBudWxsIHx8IF90aGlzJHByb3BzJGlucHV0UmVmID09PSB2b2lkIDAgfHwgX3RoaXMkcHJvcHMkaW5wdXRSZWYuY2FsbChfdGhpcyRwcm9wcywgcmVmKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibGlzdFJlZkluc3RhbmNlXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJsaXN0UmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMubGlzdFJlZkluc3RhbmNlID0gcmVmO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvcGVuTGlzdFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzTGlzdE9wZW46IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjbG9zZUxpc3RcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuY2xlYXJBY3RpdmVPcHRpb24oKTtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNMaXN0T3BlbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleFwiLCBmdW5jdGlvbiAoYW1vdW50KSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gb3B0aW9ucyBhdmFpbGFibGUsIGRvIG5vdGhpbmcuXG4gICAgICBpZiAoIV90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3JlZi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfcmVmLm1hdGNoaW5nT3B0aW9ucztcbiAgICAgICAgdmFyIG5leHRBY3RpdmVPcHRpb25JbmRleDtcbiAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgdXNlcidzIGtleWJvYXJkIG5hdmlnYXRpb24gb2YgdGhlIG1lbnUsIHRoZW4gd2UnbGwgZm9jdXNcbiAgICAgICAgICAvLyBlaXRoZXIgdGhlIGZpcnN0IG9yIGxhc3QgaXRlbS5cbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhbW91bnQgPCAwID8gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAtIDEgOiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IGFjdGl2ZU9wdGlvbkluZGV4ICsgYW1vdW50O1xuICAgICAgICAgIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA9PT0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHcm91cCB0aXRsZXMgYXJlIGluY2x1ZGVkIGluIG9wdGlvbiBsaXN0IGJ1dCBhcmUgbm90IHNlbGVjdGFibGVcbiAgICAgICAgLy8gU2tpcCBncm91cCB0aXRsZSBvcHRpb25zXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBhbW91bnQgPiAwID8gMSA6IC0xO1xuICAgICAgICB3aGlsZSAobWF0Y2hpbmdPcHRpb25zW25leHRBY3RpdmVPcHRpb25JbmRleF0uaXNHcm91cExhYmVsT3B0aW9uKSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbmV4dEFjdGl2ZU9wdGlvbkluZGV4ICsgZGlyZWN0aW9uO1xuICAgICAgICAgIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA9PT0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogbmV4dEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaGFzQWN0aXZlT3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCA+IC0xICYmIF90aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4IDwgX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmxlbmd0aDtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2xlYXJBY3RpdmVPcHRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogLTFcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjbGVhclNlYXJjaFZhbHVlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLm9uU2VhcmNoQ2hhbmdlKCcnKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYWRkQ3VzdG9tT3B0aW9uXCIsIGZ1bmN0aW9uIChpc0NvbnRhaW5lckJsdXIsIHNlYXJjaFZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IF90aGlzJHByb3BzMi5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgIG9uQ3JlYXRlT3B0aW9uID0gX3RoaXMkcHJvcHMyLm9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMyLm9wdGlvbnMsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMi5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzMi5zaW5nbGVTZWxlY3Rpb247XG4gICAgICB2YXIgbWF0Y2hlZE9wdGlvbiA9IF90aGlzLmRvZXNTZWFyY2hNYXRjaE9ubHlPcHRpb24oKTtcbiAgICAgIGlmIChtYXRjaGVkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vbkFkZE9wdGlvbihtYXRjaGVkT3B0aW9uLCBpc0NvbnRhaW5lckJsdXIpO1xuICAgICAgfVxuICAgICAgaWYgKCFvbkNyZWF0ZU9wdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIERvbid0IGJvdGhlciB0cnlpbmcgdG8gY3JlYXRlIGFuIG9wdGlvbiBpZiB0aGUgdXNlciBoYXNuJ3QgdHlwZWQgYW55dGhpbmcuXG4gICAgICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRG9uJ3QgY3JlYXRlIHRoZSB2YWx1ZSBpZiBpdCdzIGFscmVhZHkgYmVlbiBzZWxlY3RlZC5cbiAgICAgIGlmIChnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKHtcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlOiBpc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnNcbiAgICAgIH0pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIG5ldyBjdXN0b20gcGlsbCBpZiB0aGlzIGlzIGN1c3RvbSBpbnB1dCwgZXZlbiBpZiBpdCBwYXJ0aWFsbHkgbWF0Y2hlcyBhbiBvcHRpb24uXG4gICAgICB2YXIgaXNPcHRpb25DcmVhdGVkID0gb25DcmVhdGVPcHRpb24oc2VhcmNoVmFsdWUsIGZsYXR0ZW5PcHRpb25Hcm91cHMob3B0aW9ucykpO1xuXG4gICAgICAvLyBFeHBlY3QgdGhlIGNvbnN1bWVyIHRvIGJlIGV4cGxpY2l0IGluIHJlamVjdGluZyBhIGN1c3RvbSBvcHRpb24uXG4gICAgICBpZiAoaXNPcHRpb25DcmVhdGVkID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBfdGhpcy5jbGVhclNlYXJjaFZhbHVlKCk7XG4gICAgICBpZiAoQm9vbGVhbihzaW5nbGVTZWxlY3Rpb24pKSB7XG4gICAgICAgIC8vIEFkZGluZyBhIGN1c3RvbSBvcHRpb24gdG8gYSBzaW5nbGUgc2VsZWN0IHRoYXQgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBsaXN0IG9mIG9wdGlvbnNcbiAgICAgICAgX3RoaXMuY2xvc2VMaXN0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImRvZXNTZWFyY2hNYXRjaE9ubHlPcHRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGlzQ2FzZVNlbnNpdGl2ZSA9IF90aGlzLnByb3BzLmlzQ2FzZVNlbnNpdGl2ZTtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IF90aGlzLnN0YXRlLFxuICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRzdGF0ZS5tYXRjaGluZ09wdGlvbnMsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkc3RhdGUuc2VhcmNoVmFsdWU7XG4gICAgICBpZiAoIW1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHJldHVybjtcbiAgICAgIHZhciBpc01hdGNoV2l0aEdyb3VwID0gbWF0Y2hpbmdPcHRpb25zWzBdLmlzR3JvdXBMYWJlbE9wdGlvbjtcbiAgICAgIHZhciBpc09ubHlPcHRpb24gPSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoID09PSAoaXNNYXRjaFdpdGhHcm91cCA/IDIgOiAxKTtcbiAgICAgIGlmICghaXNPbmx5T3B0aW9uKSByZXR1cm47XG4gICAgICB2YXIgbWF0Y2hlZE9wdGlvbiA9IG1hdGNoaW5nT3B0aW9uc1tpc01hdGNoV2l0aEdyb3VwID8gMSA6IDBdO1xuICAgICAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hTdWJqZWN0ID0gdHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5KG1hdGNoZWRPcHRpb24ubGFiZWwsIGlzQ2FzZVNlbnNpdGl2ZSk7XG4gICAgICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gdHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5KHNlYXJjaFZhbHVlLCBpc0Nhc2VTZW5zaXRpdmUpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRTZWFyY2hTdWJqZWN0ID09PSBub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRPcHRpb247XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImFyZUFsbE9wdGlvbnNTZWxlY3RlZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczMub3B0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMzLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgYXN5bmMgPSBfdGhpcyRwcm9wczMuYXN5bmMsXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IF90aGlzJHByb3BzMy5pc0Nhc2VTZW5zaXRpdmU7XG4gICAgICAvLyBBc3N1bWUgaWYgdGhpcyBpcyBhc3luYyB0aGVuIHRoZXJlIGNvdWxkIGJlIGluZmluaXRlIG9wdGlvbnMuXG4gICAgICBpZiAoYXN5bmMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGZsYXR0ZW5PcHRpb25zID0gZmxhdHRlbk9wdGlvbkdyb3VwcyhvcHRpb25zKS5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pLCB7fSwge1xuICAgICAgICAgIGxhYmVsOiB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkob3B0aW9uLmxhYmVsLnRyaW0oKSwgaXNDYXNlU2Vuc2l0aXZlKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdmFyIG51bWJlck9mU2VsZWN0ZWRPcHRpb25zID0gMDtcbiAgICAgIHNlbGVjdGVkT3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgbGFiZWwgPSBfcmVmMi5sYWJlbDtcbiAgICAgICAgdmFyIHRyaW1tZWRMYWJlbCA9IHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eShsYWJlbC50cmltKCksIGlzQ2FzZVNlbnNpdGl2ZSk7XG4gICAgICAgIGlmIChmbGF0dGVuT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgIHJldHVybiBvcHRpb24ubGFiZWwgPT09IHRyaW1tZWRMYWJlbDtcbiAgICAgICAgfSkgIT09IC0xKSBudW1iZXJPZlNlbGVjdGVkT3B0aW9ucyArPSAxO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmxhdHRlbk9wdGlvbnMubGVuZ3RoID09PSBudW1iZXJPZlNlbGVjdGVkT3B0aW9ucztcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Db21ib0JveEZvY3VzXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJG9uRm9jdXMsIF90aGlzJHByb3BzNDtcbiAgICAgIChfdGhpcyRwcm9wcyRvbkZvY3VzID0gKF90aGlzJHByb3BzNCA9IF90aGlzLnByb3BzKS5vbkZvY3VzKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkZvY3VzID09PSB2b2lkIDAgfHwgX3RoaXMkcHJvcHMkb25Gb2N1cy5jYWxsKF90aGlzJHByb3BzNCwgZXZlbnQpO1xuICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZXRDdXN0b21PcHRpb25zXCIsIGZ1bmN0aW9uIChpc0NvbnRhaW5lckJsdXIpIHtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IF90aGlzLnN0YXRlLnNlYXJjaFZhbHVlO1xuICAgICAgdmFyIGRlbGltaXRlciA9IF90aGlzLnByb3BzLmRlbGltaXRlcjtcbiAgICAgIGlmIChkZWxpbWl0ZXIpIHtcbiAgICAgICAgc2VhcmNoVmFsdWUuc3BsaXQoZGVsaW1pdGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICBpZiAob3B0aW9uLmxlbmd0aCA+IDApIF90aGlzLmFkZEN1c3RvbU9wdGlvbihpc0NvbnRhaW5lckJsdXIsIG9wdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuYWRkQ3VzdG9tT3B0aW9uKGlzQ29udGFpbmVyQmx1ciwgc2VhcmNoVmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkNvbnRhaW5lckJsdXJcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBjbG9zZSB0aGUgb3B0aW9ucyBsaXN0LCB1bmxlc3MgdGhlIHVzZXIgY2xpY2tlZCBvbiBhbiBvcHRpb25cbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICAgIHZhciBmb2N1c2VkSW5PcHRpb25zTGlzdCA9IHJlbGF0ZWRUYXJnZXQgJiYgX3RoaXMubGlzdFJlZkluc3RhbmNlICYmIF90aGlzLmxpc3RSZWZJbnN0YW5jZS5jb250YWlucyhyZWxhdGVkVGFyZ2V0KTtcbiAgICAgIHZhciBmb2N1c2VkSW5JbnB1dCA9IHJlbGF0ZWRUYXJnZXQgJiYgX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSAmJiBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpO1xuICAgICAgaWYgKCFmb2N1c2VkSW5PcHRpb25zTGlzdCAmJiAhZm9jdXNlZEluSW5wdXQpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uQmx1ciwgX3RoaXMkcHJvcHM1O1xuICAgICAgICAoX3RoaXMkcHJvcHMkb25CbHVyID0gKF90aGlzJHByb3BzNSA9IF90aGlzLnByb3BzKS5vbkJsdXIpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uQmx1ciA9PT0gdm9pZCAwIHx8IF90aGlzJHByb3BzJG9uQmx1ci5jYWxsKF90aGlzJHByb3BzNSwgZXZlbnQpO1xuICAgICAgICBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJZiB0aGUgdXNlciB0YWJzIGF3YXkgb3IgY2hhbmdlcyBmb2N1cyB0byBhbm90aGVyIGVsZW1lbnQsIHRha2Ugd2hhdGV2ZXIgaW5wdXQgdGhleSd2ZVxuICAgICAgICAvLyB0eXBlZCBhbmQgY29udmVydCBpdCBpbnRvIGEgcGlsbCwgdG8gcHJldmVudCB0aGUgY29tYm8gYm94IGZyb20gbG9va2luZyBsaWtlIGEgdGV4dCBpbnB1dC5cbiAgICAgICAgaWYgKCFfdGhpcy5oYXNBY3RpdmVPcHRpb24oKSkge1xuICAgICAgICAgIF90aGlzLnNldEN1c3RvbU9wdGlvbnModHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZm9jdXNlZEluT3B0aW9uc0xpc3QpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL2lzc3Vlcy81MTc5XG4gICAgICAgIC8vIG5lZWQgdG8gcmVzdG9yZSBmb2N1cyB0byB0aGUgaW5wdXQgYm94IHdoZW4gY2xpY2tpbmcgbm9uLWludGVyYWN0aXZlIGVsZW1lbnRzXG5cbiAgICAgICAgLy8gZmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgY2FsbGluZyAuZm9jdXMoKSBkdXJpbmcgYSBibHVyIGV2ZW50XG4gICAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzNTc5XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF90aGlzJHNlYXJjaElucHV0UmVmSTtcbiAgICAgICAgICAoX3RoaXMkc2VhcmNoSW5wdXRSZWZJID0gX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkgPT09IG51bGwgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJID09PSB2b2lkIDAgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkb25LZXlEb3duLCBfdGhpcyRwcm9wczY7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaXNEaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgZXZlbnQucGVyc2lzdCgpOyAvLyBUT0RPOiBSZW1vdmUgb25jZSBSZWFjdCAxNiBzdXBwb3J0IGlzIGRyb3BwZWRcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19VUDpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgtMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGtleXMuQVJST1dfRE9XTjpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Uga2V5cy5FU0NBUEU6XG4gICAgICAgICAgaWYgKF90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIF90aGlzLmNsb3NlTGlzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBrZXlzLkVOVEVSOlxuICAgICAgICAgIC8vIERvIG5vdCBibG9jayBlbnRlciBrZXlwcmVzc2VzIGZvciB0aGUgY2xlYXIgYnV0dG9uIG9yIGRlbGV0ZSBzZWxlY3Rpb24gYnV0dG9uc1xuICAgICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGlmIChfdGhpcy5oYXNBY3RpdmVPcHRpb24oKSkge1xuICAgICAgICAgICAgICBfdGhpcy5vbkFkZE9wdGlvbihfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnNbX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXhdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIF90aGlzLnNldEN1c3RvbU9wdGlvbnMoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBrZXlzLlRBQjpcbiAgICAgICAgICAvLyBEaXNhbGxvdyB0YWJiaW5nIHdoZW4gdGhlIHVzZXIgaXMgbmF2aWdhdGluZyB0aGUgb3B0aW9ucy5cbiAgICAgICAgICBpZiAoX3RoaXMuaGFzQWN0aXZlT3B0aW9uKCkgJiYgX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAoX3RoaXMkcHJvcHMkb25LZXlEb3duID0gKF90aGlzJHByb3BzNiA9IF90aGlzLnByb3BzKS5vbktleURvd24pID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uS2V5RG93biA9PT0gdm9pZCAwIHx8IF90aGlzJHByb3BzJG9uS2V5RG93bi5jYWxsKF90aGlzJHByb3BzNiwgZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbk9wdGlvbkVudGVyS2V5XCIsIGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgIF90aGlzLm9uQWRkT3B0aW9uKG9wdGlvbik7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uT3B0aW9uQ2xpY2tcIiwgZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgX3RoaXMub25BZGRPcHRpb24ob3B0aW9uKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25BZGRPcHRpb25cIiwgZnVuY3Rpb24gKGFkZGVkT3B0aW9uLCBpc0NvbnRhaW5lckJsdXIpIHtcbiAgICAgIGlmIChhZGRlZE9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHM3Lm9uQ2hhbmdlLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczcuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb25Qcm9wID0gX3RoaXMkcHJvcHM3LnNpbmdsZVNlbGVjdGlvbjtcbiAgICAgIHZhciBzaW5nbGVTZWxlY3Rpb24gPSBCb29sZWFuKHNpbmdsZVNlbGVjdGlvblByb3ApO1xuICAgICAgdmFyIGNoYW5nZU9wdGlvbnMgPSBzaW5nbGVTZWxlY3Rpb24gPyBbYWRkZWRPcHRpb25dIDogc2VsZWN0ZWRPcHRpb25zLmNvbmNhdChhZGRlZE9wdGlvbik7XG4gICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwIHx8IG9uQ2hhbmdlKGNoYW5nZU9wdGlvbnMpO1xuICAgICAgX3RoaXMuY2xlYXJTZWFyY2hWYWx1ZSgpO1xuICAgICAgX3RoaXMuY2xlYXJBY3RpdmVPcHRpb24oKTtcbiAgICAgIGlmICghaXNDb250YWluZXJCbHVyKSB7XG4gICAgICAgIHZhciBfdGhpcyRzZWFyY2hJbnB1dFJlZkkyO1xuICAgICAgICAoX3RoaXMkc2VhcmNoSW5wdXRSZWZJMiA9IF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpID09PSBudWxsIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSTIgPT09IHZvaWQgMCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkkyLmZvY3VzKCk7XG4gICAgICB9XG4gICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLmNsb3NlTGlzdCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmluZGV4T2YoYWRkZWRPcHRpb24pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvblJlbW92ZU9wdGlvblwiLCBmdW5jdGlvbiAocmVtb3ZlZE9wdGlvbikge1xuICAgICAgdmFyIF90aGlzJHByb3BzOCA9IF90aGlzLnByb3BzLFxuICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzOC5vbkNoYW5nZSxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM4LnNlbGVjdGVkT3B0aW9ucztcbiAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgfHwgb25DaGFuZ2Uoc2VsZWN0ZWRPcHRpb25zLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24gIT09IHJlbW92ZWRPcHRpb247XG4gICAgICB9KSk7XG4gICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjbGVhclNlbGVjdGVkT3B0aW9uc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkb25DaGFuZ2UsIF90aGlzJHByb3BzOSwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJMztcbiAgICAgIChfdGhpcyRwcm9wcyRvbkNoYW5nZSA9IChfdGhpcyRwcm9wczkgPSBfdGhpcy5wcm9wcykub25DaGFuZ2UpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uQ2hhbmdlID09PSB2b2lkIDAgfHwgX3RoaXMkcHJvcHMkb25DaGFuZ2UuY2FsbChfdGhpcyRwcm9wczksIFtdKTtcblxuICAgICAgLy8gQ2xpY2tpbmcgdGhlIGNsZWFyIGJ1dHRvbiB3aWxsIGFsc28gY2F1c2UgaXQgdG8gZGlzYXBwZWFyLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBmb2N1c1xuICAgICAgLy8gc2hpZnRpbmcgdW5leHBlY3RlZGx5IHRvIHRoZSBib2R5IGVsZW1lbnQgc28gd2Ugc2V0IGl0IHRvIHRoZSBpbnB1dCB3aGljaCBpcyBtb3JlIHJlYXNvbmFibGUsXG4gICAgICAoX3RoaXMkc2VhcmNoSW5wdXRSZWZJMyA9IF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpID09PSBudWxsIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSTMgPT09IHZvaWQgMCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkkzLmZvY3VzKCk7XG4gICAgICBpZiAoIV90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Db21ib0JveENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRzZWFyY2hJbnB1dFJlZkk0O1xuICAgICAgLy8gV2hlbiB0aGUgdXNlciBjbGlja3MgYW55d2hlcmUgb24gdGhlIGJveCwgZW50ZXIgdGhlIGludGVyYWN0aW9uIHN0YXRlLlxuICAgICAgKF90aGlzJHNlYXJjaElucHV0UmVmSTQgPSBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSA9PT0gbnVsbCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkk0ID09PSB2b2lkIDAgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJNC5mb2N1cygpO1xuXG4gICAgICAvLyBJZiB0aGUgdXNlciBkb2VzIHRoaXMgZnJvbSBhIHN0YXRlIGluIHdoaWNoIGFuIG9wdGlvbiBoYXMgZm9jdXMsIHRoZW4gd2UgbmVlZCB0byByZXNldCBpdCBvciBjbGVhciBpdC5cbiAgICAgIGlmIChCb29sZWFuKF90aGlzLnByb3BzLnNpbmdsZVNlbGVjdGlvbikgJiYgX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb25JbmRleCA9IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgIHJldHVybiBvcHRpb24ubGFiZWwgPT09IF90aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9uc1swXS5sYWJlbCAmJiBvcHRpb24ua2V5ID09PSBfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnNbMF0ua2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBzZWxlY3RlZE9wdGlvbkluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuY2xlYXJBY3RpdmVPcHRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25PcGVuTGlzdENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRzZWFyY2hJbnB1dFJlZkk1O1xuICAgICAgKF90aGlzJHNlYXJjaElucHV0UmVmSTUgPSBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSA9PT0gbnVsbCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkk1ID09PSB2b2lkIDAgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJNS5mb2N1cygpO1xuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uT3B0aW9uTGlzdFNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkc2VhcmNoSW5wdXRSZWZJNjtcbiAgICAgIChfdGhpcyRzZWFyY2hJbnB1dFJlZkk2ID0gX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkgPT09IG51bGwgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJNiA9PT0gdm9pZCAwIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSTYuZm9jdXMoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25TZWFyY2hDaGFuZ2VcIiwgZnVuY3Rpb24gKHNlYXJjaFZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMCA9IF90aGlzLnByb3BzLFxuICAgICAgICBvblNlYXJjaENoYW5nZSA9IF90aGlzJHByb3BzMTAub25TZWFyY2hDaGFuZ2UsXG4gICAgICAgIGRlbGltaXRlciA9IF90aGlzJHByb3BzMTAuZGVsaW1pdGVyO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWVcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNlYXJjaFZhbHVlICYmIF90aGlzLnN0YXRlLmlzTGlzdE9wZW4gPT09IGZhbHNlKSB7XG4gICAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob25TZWFyY2hDaGFuZ2UpIHtcbiAgICAgICAgICB2YXIgaGFzTWF0Y2hpbmdPcHRpb25zID0gX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmxlbmd0aCA+IDA7XG4gICAgICAgICAgb25TZWFyY2hDaGFuZ2Uoc2VhcmNoVmFsdWUsIGhhc01hdGNoaW5nT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGRlbGltaXRlciAmJiBzZWFyY2hWYWx1ZS5lbmRzV2l0aChkZWxpbWl0ZXIpKSB7XG4gICAgICAgIF90aGlzLnNldEN1c3RvbU9wdGlvbnMoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpQ29tYm9Cb3gsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUNvbWJvQm94LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGRhdGFUZXN0U3ViaiA9IF90aGlzJHByb3BzMTFbJ2RhdGEtdGVzdC1zdWJqJ10sXG4gICAgICAgIGFzeW5jID0gX3RoaXMkcHJvcHMxMS5hc3luYyxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMxMS5jbGFzc05hbWUsXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczExLmNvbXByZXNzZWQsXG4gICAgICAgIGN1c3RvbU9wdGlvblRleHQgPSBfdGhpcyRwcm9wczExLmN1c3RvbU9wdGlvblRleHQsXG4gICAgICAgIGZ1bGxXaWR0aCA9IF90aGlzJHByb3BzMTEuZnVsbFdpZHRoLFxuICAgICAgICBpZCA9IF90aGlzJHByb3BzMTEuaWQsXG4gICAgICAgIGlucHV0UmVmID0gX3RoaXMkcHJvcHMxMS5pbnB1dFJlZixcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlID0gX3RoaXMkcHJvcHMxMS5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgIGlzQ2xlYXJhYmxlID0gX3RoaXMkcHJvcHMxMS5pc0NsZWFyYWJsZSxcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMTEuaXNEaXNhYmxlZCxcbiAgICAgICAgaXNJbnZhbGlkID0gX3RoaXMkcHJvcHMxMS5pc0ludmFsaWQsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMTEuaXNMb2FkaW5nLFxuICAgICAgICBub1N1Z2dlc3Rpb25zID0gX3RoaXMkcHJvcHMxMS5ub1N1Z2dlc3Rpb25zLFxuICAgICAgICBvbkJsdXIgPSBfdGhpcyRwcm9wczExLm9uQmx1cixcbiAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wczExLm9uQ2hhbmdlLFxuICAgICAgICBvbkNyZWF0ZU9wdGlvbiA9IF90aGlzJHByb3BzMTEub25DcmVhdGVPcHRpb24sXG4gICAgICAgIG9uU2VhcmNoQ2hhbmdlID0gX3RoaXMkcHJvcHMxMS5vblNlYXJjaENoYW5nZSxcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMTEub3B0aW9ucyxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczExLnBsYWNlaG9sZGVyLFxuICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczExLnJlbmRlck9wdGlvbixcbiAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHMxMS5yb3dIZWlnaHQsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMTEuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczExLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzMTEucHJlcGVuZCxcbiAgICAgICAgc29ydE1hdGNoZXNCeSA9IF90aGlzJHByb3BzMTEuc29ydE1hdGNoZXNCeSxcbiAgICAgICAgZGVsaW1pdGVyID0gX3RoaXMkcHJvcHMxMS5kZWxpbWl0ZXIsXG4gICAgICAgIGFwcGVuZCA9IF90aGlzJHByb3BzMTEuYXBwZW5kLFxuICAgICAgICBhdXRvRm9jdXMgPSBfdGhpcyRwcm9wczExLmF1dG9Gb2N1cyxcbiAgICAgICAgdHJ1bmNhdGlvblByb3BzID0gX3RoaXMkcHJvcHMxMS50cnVuY2F0aW9uUHJvcHMsXG4gICAgICAgIGlucHV0UG9wb3ZlclByb3BzID0gX3RoaXMkcHJvcHMxMS5pbnB1dFBvcG92ZXJQcm9wcyxcbiAgICAgICAgb3B0aW9uTWF0Y2hlciA9IF90aGlzJHByb3BzMTEub3B0aW9uTWF0Y2hlcixcbiAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHMxMVsnYXJpYS1sYWJlbCddLFxuICAgICAgICBhcmlhTGFiZWxsZWRieSA9IF90aGlzJHByb3BzMTFbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMTEsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRzdGF0ZTIuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgIGhhc0ZvY3VzID0gX3RoaXMkc3RhdGUyLmhhc0ZvY3VzLFxuICAgICAgICBpc0xpc3RPcGVuID0gX3RoaXMkc3RhdGUyLmlzTGlzdE9wZW4sXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkc3RhdGUyLnNlYXJjaFZhbHVlLFxuICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRzdGF0ZTIubWF0Y2hpbmdPcHRpb25zO1xuXG4gICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIElEIGlmIHVzZXJzIGRvbid0IHBhc3Mgb25lIGFzIGEgcHJvcFxuICAgICAgdmFyIGlucHV0SWQgPSBpZCAhPT0gbnVsbCAmJiBpZCAhPT0gdm9pZCAwID8gaWQgOiB0aGlzLnJvb3RJZCgnX2V1aS1jb21ib2JveC1pZCcpO1xuXG4gICAgICAvLyBWaXN1YWxseSBpbmRpY2F0ZSB0aGUgY29tYm9ib3ggaXMgaW4gYW4gaW52YWxpZCBzdGF0ZSBpZiBpdCBoYXMgbG9zdCBmb2N1cyBidXQgdGhlcmUgaXMgdGV4dCBlbnRlcmVkIGluIHRoZSBpbnB1dC5cbiAgICAgIC8vIFdoZW4gY3VzdG9tIG9wdGlvbnMgYXJlIGRpc2FibGVkIGFuZCB0aGUgdXNlciBsZWF2ZXMgdGhlIGNvbWJvIGJveCBhZnRlciBlbnRlcmluZyB0ZXh0IHRoYXQgZG9lcyBub3QgbWF0Y2ggYW55XG4gICAgICAvLyBvcHRpb25zLCB0aGlzIHRlbGxzIHRoZSB1c2VyIHRoYXQgdGhleSd2ZSBlbnRlcmVkIGludmFsaWQgaW5wdXQuXG4gICAgICB2YXIgbWFya0FzSW52YWxpZCA9ICEhKGlzSW52YWxpZCB8fCAoaGFzRm9jdXMgPT09IGZhbHNlIHx8IGlzTGlzdE9wZW4gPT09IGZhbHNlKSAmJiBzZWFyY2hWYWx1ZSk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbWJvQm94JywgY2xhc3NOYW1lLCB7XG4gICAgICAgICdldWlDb21ib0JveC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAgICAgJ2V1aUNvbWJvQm94LWlzSW52YWxpZCc6IG1hcmtBc0ludmFsaWQsXG4gICAgICAgICdldWlDb21ib0JveC1pc09wZW4nOiBpc0xpc3RPcGVuXG4gICAgICB9KTtcbiAgICAgIHZhciB2YWx1ZSA9IHNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24gKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbi5sYWJlbDtcbiAgICAgIH0pLmpvaW4oJywgJyk7XG4gICAgICB2YXIgb3B0aW9uc0xpc3Q7XG4gICAgICBpZiAoIW5vU3VnZ2VzdGlvbnMgJiYgaXNMaXN0T3Blbikge1xuICAgICAgICB2YXIgb3B0aW9uc0xpc3REYXRhVGVzdFN1YmogPSBkYXRhVGVzdFN1YmogPyBcIlwiLmNvbmNhdChkYXRhVGVzdFN1YmosIFwiLW9wdGlvbnNMaXN0XCIpIDogdW5kZWZpbmVkO1xuICAgICAgICBvcHRpb25zTGlzdCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94Lmxpc3Rib3hBcmlhTGFiZWxcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkNob29zZSBmcm9tIHRoZSBmb2xsb3dpbmcgb3B0aW9uc1wiXG4gICAgICAgIH0sIGZ1bmN0aW9uIChsaXN0Ym94QXJpYUxhYmVsKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwge1xuICAgICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IF90aGlzMi5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICAgIGFyZUFsbE9wdGlvbnNTZWxlY3RlZDogX3RoaXMyLmFyZUFsbE9wdGlvbnNTZWxlY3RlZCgpLFxuICAgICAgICAgICAgY3VzdG9tT3B0aW9uVGV4dDogY3VzdG9tT3B0aW9uVGV4dCxcbiAgICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogb3B0aW9uc0xpc3REYXRhVGVzdFN1YmosXG4gICAgICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgICAgIGlzQ2FzZVNlbnNpdGl2ZTogaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgICAgICBsaXN0UmVmOiBfdGhpczIubGlzdFJlZkNhbGxiYWNrLFxuICAgICAgICAgICAgbWF0Y2hpbmdPcHRpb25zOiBtYXRjaGluZ09wdGlvbnMsXG4gICAgICAgICAgICBvbkNsb3NlTGlzdDogX3RoaXMyLmNsb3NlTGlzdCxcbiAgICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uOiBvbkNyZWF0ZU9wdGlvbixcbiAgICAgICAgICAgIG9uT3B0aW9uQ2xpY2s6IF90aGlzMi5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgICAgb25PcHRpb25FbnRlcktleTogX3RoaXMyLm9uT3B0aW9uRW50ZXJLZXksXG4gICAgICAgICAgICBvblNjcm9sbDogX3RoaXMyLm9uT3B0aW9uTGlzdFNjcm9sbCxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3Rpb246IHNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICAgIHJlbmRlck9wdGlvbjogcmVuZGVyT3B0aW9uLFxuICAgICAgICAgICAgcm9vdElkOiBfdGhpczIucm9vdElkLFxuICAgICAgICAgICAgcm93SGVpZ2h0OiByb3dIZWlnaHQsXG4gICAgICAgICAgICBzY3JvbGxUb0luZGV4OiBhY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgICAgZGVsaW1pdGVyOiBkZWxpbWl0ZXIsXG4gICAgICAgICAgICBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlOiBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgbGlzdGJveEFyaWFMYWJlbDogbGlzdGJveEFyaWFMYWJlbCxcbiAgICAgICAgICAgIHRydW5jYXRpb25Qcm9wczogdHJ1bmNhdGlvblByb3BzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEV1aUNvbWJvQm94IGZvbGxvd3MgdGhlIFdBSS1BUklBIDEuMiBzcGVjIGZvciBlZGl0YWJsZSBjb21ib2JveGVzXG4gICAgICAgICAqIHdpdGggbGlzdCBhdXRvY29tcGxldGUuIFRoaXMgcGF0dGVybiBpcyBhbiBpbXByb3ZlbWVudCBvbiB0aGUgdXNlclxuICAgICAgICAgKiBleHBlcmllbmNlIGZvciBzY3JlZW4gcmVhZGVycyBvdmVyIHRoZSBXQUktQVJJQSAxLjEgcGF0dGVybi5cbiAgICAgICAgICpcbiAgICAgICAgICogaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjIvZXhhbXBsZXMvY29tYm9ib3gvY29tYm9ib3gtYXV0b2NvbXBsZXRlLWxpc3QuaHRtbFxuICAgICAgICAgKi9cbiAgICAgICAgX19fRW1vdGlvbkpTWChSZW5kZXJXaXRoRXVpVGhlbWUsIG51bGwsIGZ1bmN0aW9uIChldWlUaGVtZSkge1xuICAgICAgICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUNvbWJvQm94LCBmdWxsV2lkdGggPyBzdHlsZXMuZnVsbFdpZHRoIDogbG9naWNhbFN0eWxlKCdtYXgtd2lkdGgnLCBldWlGb3JtTWF4V2lkdGgoZXVpVGhlbWUpKV07XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgY3NzOiBjc3NTdHlsZXNcbiAgICAgICAgICB9LCByZXN0LCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGRhdGFUZXN0U3ViaixcbiAgICAgICAgICAgIG9uS2V5RG93bjogX3RoaXMyLm9uS2V5RG93bixcbiAgICAgICAgICAgIG9uQmx1cjogX3RoaXMyLm9uQ29udGFpbmVyQmx1cixcbiAgICAgICAgICAgIHJlZjogX3RoaXMyLmNvbWJvQm94UmVmQ2FsbGJhY2tcbiAgICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlJbnB1dFBvcG92ZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgICAgICAgICAgcGFuZWxQYWRkaW5nU2l6ZTogXCJub25lXCIsXG4gICAgICAgICAgICBkaXNhYmxlRm9jdXNUcmFwOiB0cnVlLFxuICAgICAgICAgICAgY2xvc2VPblNjcm9sbDogdHJ1ZVxuICAgICAgICAgIH0sIGlucHV0UG9wb3ZlclByb3BzLCB7XG4gICAgICAgICAgICBpc09wZW46IGlzTGlzdE9wZW4sXG4gICAgICAgICAgICBjbG9zZVBvcG92ZXI6IF90aGlzMi5jbG9zZUxpc3QsXG4gICAgICAgICAgICBpbnB1dDogX19fRW1vdGlvbkpTWChFdWlDb21ib0JveElucHV0LCB7XG4gICAgICAgICAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICAgICAgICAgIGZvY3VzZWRPcHRpb25JZDogX3RoaXMyLmhhc0FjdGl2ZU9wdGlvbigpID8gX3RoaXMyLnJvb3RJZChcIl9vcHRpb24tXCIuY29uY2F0KF90aGlzMi5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCkpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgICAgICAgaGFzU2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCxcbiAgICAgICAgICAgICAgaWQ6IGlucHV0SWQsXG4gICAgICAgICAgICAgIGlucHV0UmVmOiBfdGhpczIuc2VhcmNoSW5wdXRSZWZDYWxsYmFjayxcbiAgICAgICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgaXNMaXN0T3BlbjogaXNMaXN0T3BlbixcbiAgICAgICAgICAgICAgbm9JY29uOiAhIW5vU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczIub25TZWFyY2hDaGFuZ2UsXG4gICAgICAgICAgICAgIG9uQ2xlYXI6IGlzQ2xlYXJhYmxlICYmICFpc0Rpc2FibGVkID8gX3RoaXMyLmNsZWFyU2VsZWN0ZWRPcHRpb25zIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBvbkNsaWNrOiBfdGhpczIub25Db21ib0JveENsaWNrLFxuICAgICAgICAgICAgICBvbkNsb3NlTGlzdENsaWNrOiBfdGhpczIuY2xvc2VMaXN0LFxuICAgICAgICAgICAgICBvbkZvY3VzOiBfdGhpczIub25Db21ib0JveEZvY3VzLFxuICAgICAgICAgICAgICBvbk9wZW5MaXN0Q2xpY2s6IF90aGlzMi5vbk9wZW5MaXN0Q2xpY2ssXG4gICAgICAgICAgICAgIG9uUmVtb3ZlT3B0aW9uOiBfdGhpczIub25SZW1vdmVPcHRpb24sXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgcm9vdElkOiBfdGhpczIucm9vdElkLFxuICAgICAgICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgICAgICBzaW5nbGVTZWxlY3Rpb246IHNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICBhcHBlbmQ6IHNpbmdsZVNlbGVjdGlvbiA/IGFwcGVuZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcHJlcGVuZDogc2luZ2xlU2VsZWN0aW9uID8gcHJlcGVuZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgICAgICAgIGlzSW52YWxpZDogbWFya0FzSW52YWxpZCxcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbGxlZGJ5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pLCBvcHRpb25zTGlzdCkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YXIgYXN5bmMgPSBuZXh0UHJvcHMuYXN5bmMsXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IG5leHRQcm9wcy5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgIG9wdGlvbnMgPSBuZXh0UHJvcHMub3B0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gbmV4dFByb3BzLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gbmV4dFByb3BzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgc29ydE1hdGNoZXNCeSA9IG5leHRQcm9wcy5zb3J0TWF0Y2hlc0J5LFxuICAgICAgICBvcHRpb25NYXRjaGVyID0gbmV4dFByb3BzLm9wdGlvbk1hdGNoZXI7XG4gICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSBwcmV2U3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gcHJldlN0YXRlLnNlYXJjaFZhbHVlO1xuXG4gICAgICAvLyBDYWxjdWxhdGUgYW5kIGNhY2hlIHRoZSBvcHRpb25zIHdoaWNoIG1hdGNoIHRoZSBzZWFyY2hWYWx1ZSwgYmVjYXVzZSB3ZSB1c2UgdGhpcyBpbmZvcm1hdGlvblxuICAgICAgLy8gaW4gbXVsdGlwbGUgcGxhY2VzIGFuZCBpdCB3b3VsZCBiZSBleHBlbnNpdmUgdG8gY2FsY3VsYXRlIHJlcGVhdGVkbHkuXG4gICAgICB2YXIgbWF0Y2hpbmdPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKHtcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlOiBpc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQ6IGFzeW5jLFxuICAgICAgICBzaG93UHJldlNlbGVjdGVkOiBCb29sZWFuKHNpbmdsZVNlbGVjdGlvbiksXG4gICAgICAgIHNvcnRNYXRjaGVzQnk6IHNvcnRNYXRjaGVzQnksXG4gICAgICAgIG9wdGlvbk1hdGNoZXI6IG9wdGlvbk1hdGNoZXJcbiAgICAgIH0pO1xuICAgICAgdmFyIHN0YXRlVXBkYXRlID0ge1xuICAgICAgICBtYXRjaGluZ09wdGlvbnM6IG1hdGNoaW5nT3B0aW9uc1xuICAgICAgfTtcbiAgICAgIGlmIChhY3RpdmVPcHRpb25JbmRleCA+PSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHN0YXRlVXBkYXRlLmFjdGl2ZU9wdGlvbkluZGV4ID0gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGVVcGRhdGU7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpQ29tYm9Cb3gsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgYXN5bmM6IGZhbHNlLFxuICBjb21wcmVzc2VkOiBmYWxzZSxcbiAgZnVsbFdpZHRoOiBmYWxzZSxcbiAgaXNDbGVhcmFibGU6IHRydWUsXG4gIG9wdGlvbnM6IFtdLFxuICBzZWxlY3RlZE9wdGlvbnM6IFtdLFxuICBzaW5nbGVTZWxlY3Rpb246IGZhbHNlLFxuICBwcmVwZW5kOiB1bmRlZmluZWQsXG4gIGFwcGVuZDogdW5kZWZpbmVkLFxuICBzb3J0TWF0Y2hlc0J5OiAnbm9uZScsXG4gIG9wdGlvbk1hdGNoZXI6IGNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIoKVxufSk7XG5FdWlDb21ib0JveC5wcm9wVHlwZXMgPSB7XG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgbGlzdCBvZiBvcHRpb25zIGFzeW5jaHJvbm91c2x5XG4gICAgICovXG4gIGFzeW5jOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFdoZW4gYHRydWVgIGNyZWF0ZXMgYSBzaG9ydGVyIGhlaWdodCBpbnB1dFxuICAgICAqL1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCBleHBhbmRzIHRvIHRoZSBlbnRpcmUgd2lkdGggYXZhaWxhYmxlXG4gICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBTaG93cyBhIGJ1dHRvbiB0aGF0IHF1aWNrbHkgY2xlYXJzIGFueSBpbnB1dFxuICAgICAqL1xuICBpc0NsZWFyYWJsZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIGlucHV0XG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBTd2FwcyB0aGUgZHJvcGRvd24gb3B0aW9ucyBmb3IgYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogRG9lc24ndCBzaG93IHRoZSBzdWdnZXN0aW9ucyBsaXN0L2Ryb3Bkb3duXG4gICAgICovXG4gIG5vU3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5ib29sLFxuICBvbkJsdXI6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIENhbGxlZCBldmVyeSB0aW1lIHRoZSBxdWVyeSBpbiB0aGUgY29tYm8gYm94IGlzIHBhcnNlZFxuICAgICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5hbnksXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQ2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIHRleHQgcXVlcnkgaW4gdGhlIHNlYXJjaCBib3ggaXMgcGFyc2VkXG4gICAgICovXG4gIG9uU2VhcmNoQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogU2V0cyB0aGUgcGxhY2Vob2xkZXIgb2YgdGhlIGlucHV0XG4gICAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBFdmVyeSBvcHRpb24gbXVzdCBiZSB0aGUgc2FtZSBoZWlnaHQgYW5kIG11c3QgYmUgZXhwbGljaXRseSBzZXQgaWYgdXNpbmcgYSBjdXN0b20gcmVuZGVyXG4gICAgICovXG4gIHJvd0hlaWdodDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgb25seSBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGEgc2luZ2xlIG9wdGlvbi4gU2V0IHRvIGB7IGFzUGxhaW5UZXh0OiB0cnVlIH1gIHRvIG5vdCByZW5kZXIgaW5wdXQgc2VsZWN0aW9uIGFzIHBpbGxzXG4gICAgICovXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhc1BsYWluVGV4dDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIERpc3BsYXkgbWF0Y2hpbmcgb3B0aW9ucyBieTpcbiAgICAgKiBgc3RhcnRzV2l0aGA6IG1vdmVzIGl0ZW1zIHRoYXQgc3RhcnQgd2l0aCBzZWFyY2ggdmFsdWUgdG8gdG9wIG9mIHRoZSBsaXN0O1xuICAgICAqIGBub25lYDogZG9uJ3QgY2hhbmdlIHRoZSBzb3J0IG9yZGVyIG9mIGluaXRpYWwgb2JqZWN0XG4gICAgICovXG4gIHNvcnRNYXRjaGVzQnk6IFByb3BUeXBlcy5vbmVPZihbXCJub25lXCIsIFwic3RhcnRzV2l0aFwiXSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogV2hldGhlciB0byBtYXRjaCBvcHRpb25zIHdpdGggY2FzZSBzZW5zaXRpdml0eS5cbiAgICAgKi9cbiAgaXNDYXNlU2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT3B0aW9uYWwgY3VzdG9tIG9wdGlvbiBtYXRjaGVyIGZ1bmN0aW9uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IGV4YWN0RXF1YWxpdHlNYXRjaGVyOiBFdWlDb21ib0JveE9wdGlvbk1hdGNoZXIgPSAoeyBvcHRpb24sIHNlYXJjaFZhbHVlIH0pID0+IHtcbiAgICAgKiAgIHJldHVybiBvcHRpb24ubGFiZWwgPT09IHNlYXJjaFZhbHVlO1xuICAgICAqIH1cbiAgICAgKi9cbiAgb3B0aW9uTWF0Y2hlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBiZWZvcmUgaW5wdXQuIEl0IHdvbid0IHNob3cgaWYgYHNpbmdsZVNlbGVjdGlvbmAgaXMgc2V0IHRvIGBmYWxzZWAuXG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYWZ0ZXIgaW5wdXQuIEl0IHdvbid0IHNob3cgaWYgYHNpbmdsZVNlbGVjdGlvbmAgaXMgc2V0IHRvIGBmYWxzZWAuXG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEEgc3BlY2lhbCBjaGFyYWN0ZXIgdG8gdXNlIGFzIGEgdmFsdWUgc2VwYXJhdG9yLiBUeXBpY2FsbHkgYSBjb21tYSBgLGBcbiAgICAgKi9cbiAgZGVsaW1pdGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgaW5wdXQgc2hvdWxkIGhhdmUgZm9jdXMgd2hlbiB0aGUgY29tcG9uZW50IGxvYWRzXG4gICAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFJlcXVpcmVkIHdoZW4gcmVuZGVyaW5nIHdpdGhvdXQgYSB2aXNpYmxlIGxhYmVsIGZyb20gW0V1aUZvcm1Sb3ddKC8jL2Zvcm1zL2Zvcm0tbGF5b3V0cykuXG4gICAgICovXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBSZWZlcmVuY2UgSUQgb2YgYSB0ZXh0IGVsZW1lbnQgY29udGFpbmluZyB0aGUgdmlzaWJsZSBsYWJlbCBmb3IgdGhlIGNvbWJvIGJveCB3aGVuIG5vdFxuICAgICAqIHN1cHBsaWVkIGJ5IGBhcmlhLWxhYmVsYCBvciBmcm9tIFtFdWlGb3JtUm93XSgvIy9mb3Jtcy9mb3JtLWxheW91dHMpLlxuICAgICAqL1xuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBFdWlDb21ib0JveCB3aWxsIHRydW5jYXRlIG9wdGlvbiBsYWJlbHMgYXQgdGhlIGVuZCBvZlxuICAgICAqIHRoZSBzdHJpbmcuIFlvdSBjYW4gdXNlIHBhc3MgaW4gYSBjdXN0b20gdHJ1bmNhdGlvbiBjb25maWd1cmF0aW9uIHRoYXRcbiAgICAgKiBhY2NlcHRzIGFueSBbRXVpVGV4dFRydW5jYXRlXSgvIy91dGlsaXRpZXMvdGV4dC10cnVuY2F0aW9uKSBwcm9wLFxuICAgICAqIGV4Y2VwdCBmb3IgYHRleHRgIGFuZCBgY2hpbGRyZW5gLlxuICAgICAqXG4gICAgICogTm90ZTogd2hlbiBzZWFyY2hpbmcsIGN1c3RvbSB0cnVuY2F0aW9uIHByb3BzIGFyZSBpZ25vcmVkLiBUaGUgaGlnaGxpZ2h0ZWQgc2VhcmNoXG4gICAgICogdGV4dCB3aWxsIGFsd2F5cyB0YWtlIHByZWNlZGVuY2UuXG4gICAgICovXG4gIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQWxsb3dzIGN1c3RvbWl6aW5nIHRoZSB1bmRlcmx5aW5nIEV1aUlucHV0UG9wb3ZlciBjb21wb25lbnRcbiAgICAgKiAoZXhjZXB0IGZvciBwcm9wcyB0aGF0IGNvbnRyb2wgc3RhdGUpLlxuICAgICAqL1xuICBpbnB1dFBvcG92ZXJQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkgPSBmdW5jdGlvbiB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkoc3RyaW5nLCBpc0Nhc2VTZW5zaXRpdmUpIHtcbiAgcmV0dXJuIGlzQ2FzZVNlbnNpdGl2ZSA/IHN0cmluZyA6IHN0cmluZy50b0xvd2VyQ2FzZSgpO1xufTtcbmV4cG9ydCB2YXIgZmxhdHRlbk9wdGlvbkdyb3VwcyA9IGZ1bmN0aW9uIGZsYXR0ZW5PcHRpb25Hcm91cHMob3B0aW9uc09yR3JvdXBzKSB7XG4gIHJldHVybiBvcHRpb25zT3JHcm91cHMucmVkdWNlKGZ1bmN0aW9uIChvcHRpb25zLCBvcHRpb25Pckdyb3VwKSB7XG4gICAgaWYgKG9wdGlvbk9yR3JvdXAub3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuY29uY2F0KG9wdGlvbk9yR3JvdXAub3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMucHVzaChvcHRpb25Pckdyb3VwKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0sIFtdKTtcbn07XG5leHBvcnQgdmFyIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUgPSBmdW5jdGlvbiBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKF9yZWYpIHtcbiAgdmFyIGlzQ2FzZVNlbnNpdGl2ZSA9IF9yZWYuaXNDYXNlU2Vuc2l0aXZlLFxuICAgIHNlYXJjaFZhbHVlID0gX3JlZi5zZWFyY2hWYWx1ZSxcbiAgICBzZWxlY3RlZE9wdGlvbnMgPSBfcmVmLnNlbGVjdGVkT3B0aW9ucyxcbiAgICBvcHRpb25LZXkgPSBfcmVmLm9wdGlvbktleTtcbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eShzZWFyY2hWYWx1ZSwgaXNDYXNlU2Vuc2l0aXZlKTtcbiAgcmV0dXJuIHNlbGVjdGVkT3B0aW9ucy5maW5kKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICB2YXIgbm9ybWFsaXplZE9wdGlvbiA9IHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eShvcHRpb24ubGFiZWwsIGlzQ2FzZVNlbnNpdGl2ZSk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRPcHRpb24gPT09IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSAmJiAoIW9wdGlvbktleSB8fCBvcHRpb24ua2V5ID09PSBvcHRpb25LZXkpO1xuICB9KTtcbn07XG52YXIgY29sbGVjdE1hdGNoaW5nT3B0aW9uID0gZnVuY3Rpb24gY29sbGVjdE1hdGNoaW5nT3B0aW9uKF9yZWYyKSB7XG4gIHZhciBhY2N1bXVsYXRvciA9IF9yZWYyLmFjY3VtdWxhdG9yLFxuICAgIG9wdGlvbiA9IF9yZWYyLm9wdGlvbixcbiAgICBzZWxlY3RlZE9wdGlvbnMgPSBfcmVmMi5zZWxlY3RlZE9wdGlvbnMsXG4gICAgc2VhcmNoVmFsdWUgPSBfcmVmMi5zZWFyY2hWYWx1ZSxcbiAgICBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBfcmVmMi5ub3JtYWxpemVkU2VhcmNoVmFsdWUsXG4gICAgaXNDYXNlU2Vuc2l0aXZlID0gX3JlZjIuaXNDYXNlU2Vuc2l0aXZlLFxuICAgIGlzUHJlRmlsdGVyZWQgPSBfcmVmMi5pc1ByZUZpbHRlcmVkLFxuICAgIHNob3dQcmV2U2VsZWN0ZWQgPSBfcmVmMi5zaG93UHJldlNlbGVjdGVkLFxuICAgIG9wdGlvbk1hdGNoZXIgPSBfcmVmMi5vcHRpb25NYXRjaGVyO1xuICAvLyBPbmx5IHNob3cgb3B0aW9ucyB3aGljaCBoYXZlbid0IHlldCBiZWVuIHNlbGVjdGVkIHVubGVzcyByZXF1ZXN0ZWQuXG4gIHZhciBzZWxlY3RlZE9wdGlvbiA9IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoe1xuICAgIGlzQ2FzZVNlbnNpdGl2ZTogaXNDYXNlU2Vuc2l0aXZlLFxuICAgIHNlYXJjaFZhbHVlOiBvcHRpb24ubGFiZWwsXG4gICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgb3B0aW9uS2V5OiBvcHRpb24ua2V5XG4gIH0pO1xuICBpZiAoc2VsZWN0ZWRPcHRpb24gJiYgIXNob3dQcmV2U2VsZWN0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJZiB0aGUgb3B0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBwcmUtZmlsdGVyZWQgdGhlbiB3ZSBjYW4gc2tpcCBmaWx0ZXJpbmcgYWdhaW5zdCB0aGUgc2VhcmNoIHZhbHVlLlxuICBpZiAoaXNQcmVGaWx0ZXJlZCkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBpc01hdGNoaW5nID0gb3B0aW9uTWF0Y2hlcih7XG4gICAgb3B0aW9uOiBvcHRpb24sXG4gICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZTogbm9ybWFsaXplZFNlYXJjaFZhbHVlLFxuICAgIGlzQ2FzZVNlbnNpdGl2ZTogaXNDYXNlU2Vuc2l0aXZlICE9PSBudWxsICYmIGlzQ2FzZVNlbnNpdGl2ZSAhPT0gdm9pZCAwID8gaXNDYXNlU2Vuc2l0aXZlIDogdHJ1ZVxuICB9KTtcbiAgaWYgKGlzTWF0Y2hpbmcpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gIH1cbn07XG5leHBvcnQgdmFyIGdldE1hdGNoaW5nT3B0aW9ucyA9IGZ1bmN0aW9uIGdldE1hdGNoaW5nT3B0aW9ucyhfcmVmMykge1xuICB2YXIgb3B0aW9ucyA9IF9yZWYzLm9wdGlvbnMsXG4gICAgc2VsZWN0ZWRPcHRpb25zID0gX3JlZjMuc2VsZWN0ZWRPcHRpb25zLFxuICAgIHNlYXJjaFZhbHVlID0gX3JlZjMuc2VhcmNoVmFsdWUsXG4gICAgb3B0aW9uTWF0Y2hlciA9IF9yZWYzLm9wdGlvbk1hdGNoZXIsXG4gICAgX3JlZjMkaXNDYXNlU2Vuc2l0aXZlID0gX3JlZjMuaXNDYXNlU2Vuc2l0aXZlLFxuICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IF9yZWYzJGlzQ2FzZVNlbnNpdGl2ZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMyRpc0Nhc2VTZW5zaXRpdmUsXG4gICAgX3JlZjMkaXNQcmVGaWx0ZXJlZCA9IF9yZWYzLmlzUHJlRmlsdGVyZWQsXG4gICAgaXNQcmVGaWx0ZXJlZCA9IF9yZWYzJGlzUHJlRmlsdGVyZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjMkaXNQcmVGaWx0ZXJlZCxcbiAgICBfcmVmMyRzaG93UHJldlNlbGVjdGUgPSBfcmVmMy5zaG93UHJldlNlbGVjdGVkLFxuICAgIHNob3dQcmV2U2VsZWN0ZWQgPSBfcmVmMyRzaG93UHJldlNlbGVjdGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjMkc2hvd1ByZXZTZWxlY3RlLFxuICAgIF9yZWYzJHNvcnRNYXRjaGVzQnkgPSBfcmVmMy5zb3J0TWF0Y2hlc0J5LFxuICAgIHNvcnRNYXRjaGVzQnkgPSBfcmVmMyRzb3J0TWF0Y2hlc0J5ID09PSB2b2lkIDAgPyAnbm9uZScgOiBfcmVmMyRzb3J0TWF0Y2hlc0J5O1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gdHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5KHNlYXJjaFZhbHVlLnRyaW0oKSwgaXNDYXNlU2Vuc2l0aXZlKTtcbiAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IFtdO1xuICBvcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIGlmIChvcHRpb24ub3B0aW9ucykge1xuICAgICAgdmFyIG1hdGNoaW5nT3B0aW9uc0Zvckdyb3VwID0gW107XG4gICAgICBvcHRpb24ub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cE9wdGlvbikge1xuICAgICAgICBjb2xsZWN0TWF0Y2hpbmdPcHRpb24oe1xuICAgICAgICAgIGFjY3VtdWxhdG9yOiBtYXRjaGluZ09wdGlvbnNGb3JHcm91cCxcbiAgICAgICAgICBvcHRpb246IGdyb3VwT3B0aW9uLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICBub3JtYWxpemVkU2VhcmNoVmFsdWU6IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSxcbiAgICAgICAgICBpc0Nhc2VTZW5zaXRpdmU6IGlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgICBpc1ByZUZpbHRlcmVkOiBpc1ByZUZpbHRlcmVkLFxuICAgICAgICAgIHNob3dQcmV2U2VsZWN0ZWQ6IHNob3dQcmV2U2VsZWN0ZWQsXG4gICAgICAgICAgb3B0aW9uTWF0Y2hlcjogb3B0aW9uTWF0Y2hlclxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG1hdGNoaW5nT3B0aW9uc0Zvckdyb3VwLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gQWRkIG9wdGlvbiBmb3IgZ3JvdXAgbGFiZWxcbiAgICAgICAgbWF0Y2hpbmdPcHRpb25zLnB1c2goe1xuICAgICAgICAgIGtleTogb3B0aW9uLmtleSxcbiAgICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsLFxuICAgICAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBhcHBlbmQ6IG9wdGlvbi5hcHBlbmQsXG4gICAgICAgICAgcHJlcGVuZDogb3B0aW9uLnByZXBlbmRcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFkZCBtYXRjaGluZyBvcHRpb25zIGZvciBncm91cFxuICAgICAgICAvLyB1c2UgY29uY2F0IG92ZXIgc3ByZWFkaW5nIHRvIHN1cHBvcnQgbGFyZ2UgYXJyYXlzIC0gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL2RlbW8vamF2YXNjcmlwdC1hcmd1bWVudC1jb3VudFxuICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBtYXRjaGluZ09wdGlvbnMuY29uY2F0KG1hdGNoaW5nT3B0aW9uc0Zvckdyb3VwKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29sbGVjdE1hdGNoaW5nT3B0aW9uKHtcbiAgICAgICAgYWNjdW11bGF0b3I6IG1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgb3B0aW9uOiBvcHRpb24sXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZTogbm9ybWFsaXplZFNlYXJjaFZhbHVlLFxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmU6IGlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgaXNQcmVGaWx0ZXJlZDogaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgc2hvd1ByZXZTZWxlY3RlZDogc2hvd1ByZXZTZWxlY3RlZCxcbiAgICAgICAgb3B0aW9uTWF0Y2hlcjogb3B0aW9uTWF0Y2hlclxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgaWYgKHNvcnRNYXRjaGVzQnkgPT09ICdzdGFydHNXaXRoJykge1xuICAgIHZhciByZWZPYmogPSB7XG4gICAgICBzdGFydFdpdGg6IFtdLFxuICAgICAgb3RoZXJzOiBbXVxuICAgIH07XG4gICAgbWF0Y2hpbmdPcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgdmFyIG5vcm1hbGl6ZWRMYWJlbCA9IHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eShvYmplY3QubGFiZWwsIGlzQ2FzZVNlbnNpdGl2ZSk7XG4gICAgICBpZiAobm9ybWFsaXplZExhYmVsLnN0YXJ0c1dpdGgobm9ybWFsaXplZFNlYXJjaFZhbHVlKSkge1xuICAgICAgICByZWZPYmouc3RhcnRXaXRoLnB1c2gob2JqZWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZk9iai5vdGhlcnMucHVzaChvYmplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlZk9iai5zdGFydFdpdGgpLCBfdG9Db25zdW1hYmxlQXJyYXkocmVmT2JqLm90aGVycykpO1xuICB9XG4gIHJldHVybiBtYXRjaGluZ09wdGlvbnM7XG59O1xuXG4vKipcbiAqIFBhcnRpYWwgc3RyaW5nIGVxdWFsaXR5IG9wdGlvbiBtYXRjaGVyIGZvciBFdWlDb21ib0JveC5cbiAqIEl0IG1hdGNoZXMgYWxsIG9wdGlvbnMgd2l0aCBsYWJlbHMgaW5jbHVkaW5nIHRoZSBzZWFyY2hlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCB2YXIgY3JlYXRlUGFydGlhbFN0cmluZ0VxdWFsaXR5T3B0aW9uTWF0Y2hlciA9IGZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIoKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICB2YXIgb3B0aW9uID0gX3JlZjQub3B0aW9uLFxuICAgICAgaXNDYXNlU2Vuc2l0aXZlID0gX3JlZjQuaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gX3JlZjQubm9ybWFsaXplZFNlYXJjaFZhbHVlO1xuICAgIGlmICghbm9ybWFsaXplZFNlYXJjaFZhbHVlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIG5vcm1hbGl6ZWRPcHRpb24gPSB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkob3B0aW9uLmxhYmVsLnRyaW0oKSwgaXNDYXNlU2Vuc2l0aXZlKTtcbiAgICByZXR1cm4gbm9ybWFsaXplZE9wdGlvbi5pbmNsdWRlcyhub3JtYWxpemVkU2VhcmNoVmFsdWUpO1xuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImtleVwiLCBcImxhYmVsXCIsIFwiY29sb3JcIiwgXCJvbkNsaWNrXCIsIFwiYXBwZW5kXCIsIFwicHJlcGVuZFwiLCBcInRydW5jYXRpb25Qcm9wc1wiLCBcInRvb2xUaXBDb250ZW50XCIsIFwidG9vbFRpcFByb3BzXCJdO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXMsIENhbnZhc1RleHRVdGlscywgUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uLy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXQgfSBmcm9tICcuLi8uLi9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQnO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hPcHRpb25BcHBlbmRQcmVwZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hQaWxsIH0gZnJvbSAnLi9jb21ib19ib3hfcGlsbCc7XG5pbXBvcnQgeyBldWlDb21ib0JveElucHV0U3R5bGVzIH0gZnJvbSAnLi9jb21ib19ib3hfaW5wdXQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94SW5wdXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3hJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbWJvQm94SW5wdXQpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aUNvbWJvQm94SW5wdXQsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0YXRlXCIsIHtcbiAgICAgIGlucHV0V2lkdGg6IDIsXG4gICAgICBoYXNGb2N1czogZmFsc2VcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwid2lkdGhVdGlsc1wiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpbnB1dFJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChlbCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJGlucHV0UmVmLCBfdGhpcyRwcm9wcztcbiAgICAgIF90aGlzLndpZHRoVXRpbHMgPSBuZXcgQ2FudmFzVGV4dFV0aWxzKHtcbiAgICAgICAgY29udGFpbmVyOiBlbFxuICAgICAgfSk7XG4gICAgICAoX3RoaXMkcHJvcHMkaW5wdXRSZWYgPSAoX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcykuaW5wdXRSZWYpID09PSBudWxsIHx8IF90aGlzJHByb3BzJGlucHV0UmVmID09PSB2b2lkIDAgfHwgX3RoaXMkcHJvcHMkaW5wdXRSZWYuY2FsbChfdGhpcyRwcm9wcywgZWwpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ1cGRhdGVJbnB1dFNpemVcIiwgZnVuY3Rpb24gKGlucHV0VmFsdWUpIHtcbiAgICAgIGlmICghX3RoaXMud2lkdGhVdGlscykgcmV0dXJuO1xuICAgICAgaWYgKF90aGlzLmFzUGxhaW5UZXh0KSByZXR1cm47XG4gICAgICBfdGhpcy53aWR0aFV0aWxzLnNldFRleHRUb0NoZWNrKGlucHV0VmFsdWUpO1xuICAgICAgLy8gQ2FudmFzIGhhcyBtaW51dGUgc3VicGl4ZWwgZGlmZmVyZW5jZXMgaW4gcmVuZGVyaW5nIGNvbXBhcmVkIHRvIERPTVxuICAgICAgLy8gV2UnbGwgYnVmZmVyIHRoZSBpbnB1dCBieSB+MnB4IGp1c3QgdG8gZW5zdXJlIHN1ZmZpY2llbnQgd2lkdGhcbiAgICAgIHZhciBpbnB1dFdpZHRoID0gTWF0aC5jZWlsKF90aGlzLndpZHRoVXRpbHMudGV4dFdpZHRoKSArIDI7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlucHV0V2lkdGg6IGlucHV0V2lkdGhcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMucHJvcHMub25Gb2N1cyhldmVudCk7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25CbHVyXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uQmx1cikge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgICAgfVxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMyLnNlYXJjaFZhbHVlLFxuICAgICAgICBoYXNTZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuaGFzU2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBvblJlbW92ZU9wdGlvbiA9IF90aGlzJHByb3BzMi5vblJlbW92ZU9wdGlvbixcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMyLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgaXNMaXN0T3BlbiA9IF90aGlzJHByb3BzMi5pc0xpc3RPcGVuLFxuICAgICAgICBvbk9wZW5MaXN0Q2xpY2sgPSBfdGhpcyRwcm9wczIub25PcGVuTGlzdENsaWNrLFxuICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMi5vbkNoYW5nZTtcbiAgICAgIHZhciBzZWFyY2hJc0VtcHR5ID0gIXNlYXJjaFZhbHVlLmxlbmd0aDtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuQkFDS1NQQUNFKSB7XG4gICAgICAgIC8vIFdoZW4gYmFja3NwYWNpbmcgaW4gYSBwbGFpbiB0ZXh0IGNvbWJvYm94LCBjaGFuZ2Ugbm9ybWFsbHkgYW5kIHJlbW92ZSB0aGUgc2VsZWN0aW9uXG4gICAgICAgIGlmIChfdGhpcy5hc1BsYWluVGV4dCkge1xuICAgICAgICAgIG9uQ2hhbmdlKGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWUpO1xuICAgICAgICAgIGlmIChoYXNTZWxlY3RlZE9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9uUmVtb3ZlT3B0aW9uKHNlbGVjdGVkT3B0aW9uc1tzZWxlY3RlZE9wdGlvbnMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBXaGVuIGJhY2tzcGFjaW5nIGZyb20gYW4gZW1wdHkgaW5wdXQsIGRlbGV0ZSB0aGUgbGFzdCBwaWxsIG9wdGlvbiBpbiB0aGUgbGlzdFxuICAgICAgICBlbHNlIGlmIChzZWFyY2hJc0VtcHR5ICYmIGhhc1NlbGVjdGVkT3B0aW9ucykge1xuICAgICAgICAgIG9uUmVtb3ZlT3B0aW9uKHNlbGVjdGVkT3B0aW9uc1tzZWxlY3RlZE9wdGlvbnMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgIGlmICghIXNpbmdsZVNlbGVjdGlvbiAmJiAhaXNMaXN0T3Blbikge1xuICAgICAgICAgICAgb25PcGVuTGlzdENsaWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlbmRlclBpbGxzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERvbid0IHJlbmRlciBhIHBpbGwgZm9yIHBsYWluIHRleHQgY29tYm9ib3hlcyAtIHVzZSB0aGUgaW5wdXQgaW5zdGVhZFxuICAgICAgaWYgKF90aGlzLmFzUGxhaW5UZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgIC8vIERvbid0IHJlbmRlciB0aGUgc2luZ2xlIHBpbGwgc2VsZWN0aW9uIHdoaWxlIHNlYXJjaGluZ1xuICAgICAgaWYgKF90aGlzLnByb3BzLnNpbmdsZVNlbGVjdGlvbiAmJiBfdGhpcy5wcm9wcy5zZWFyY2hWYWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczMuaXNEaXNhYmxlZCxcbiAgICAgICAgb25SZW1vdmVPcHRpb24gPSBfdGhpcyRwcm9wczMub25SZW1vdmVPcHRpb247XG4gICAgICBpZiAoIXNlbGVjdGVkT3B0aW9ucyB8fCAhc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHZhciBrZXkgPSBvcHRpb24ua2V5LFxuICAgICAgICAgIGxhYmVsID0gb3B0aW9uLmxhYmVsLFxuICAgICAgICAgIGNvbG9yID0gb3B0aW9uLmNvbG9yLFxuICAgICAgICAgIG9uQ2xpY2sgPSBvcHRpb24ub25DbGljayxcbiAgICAgICAgICBhcHBlbmQgPSBvcHRpb24uYXBwZW5kLFxuICAgICAgICAgIHByZXBlbmQgPSBvcHRpb24ucHJlcGVuZCxcbiAgICAgICAgICB0cnVuY2F0aW9uUHJvcHMgPSBvcHRpb24udHJ1bmNhdGlvblByb3BzLFxuICAgICAgICAgIHRvb2xUaXBDb250ZW50ID0gb3B0aW9uLnRvb2xUaXBDb250ZW50LFxuICAgICAgICAgIHRvb2xUaXBQcm9wcyA9IG9wdGlvbi50b29sVGlwUHJvcHMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvcHRpb24sIF9leGNsdWRlZCk7XG4gICAgICAgIHZhciBwaWxsT25DbG9zZSA9IGlzRGlzYWJsZWQgfHwgX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uIHx8IG9uQ2xpY2sgPyB1bmRlZmluZWQgOiBvblJlbW92ZU9wdGlvbjtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hQaWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3B0aW9uOiBvcHRpb24sXG4gICAgICAgICAgb25DbG9zZTogcGlsbE9uQ2xvc2UsXG4gICAgICAgICAga2V5OiBrZXkgIT09IG51bGwgJiYga2V5ICE9PSB2b2lkIDAgPyBrZXkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgICAgIG9uQ2xpY2tBcmlhTGFiZWw6IG9uQ2xpY2sgPyAnQ2hhbmdlJyA6IHVuZGVmaW5lZFxuICAgICAgICB9LCByZXN0KSwgbGFiZWwpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlDb21ib0JveElucHV0LCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveElucHV0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgaWYgKHByZXZQcm9wcy5zZWFyY2hWYWx1ZSAhPT0gdGhpcy5wcm9wcy5zZWFyY2hWYWx1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0U2l6ZSh0aGlzLnByb3BzLnNlYXJjaFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYXNQbGFpblRleHRcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciBzaW5nbGVTZWxlY3Rpb24gPSB0aGlzLnByb3BzLnNpbmdsZVNlbGVjdGlvbjtcbiAgICAgIHZhciBpc1NpbmdsZVNlbGVjdGlvbkNvbmZpZyA9IHNpbmdsZVNlbGVjdGlvbiAmJiBfdHlwZW9mKHNpbmdsZVNlbGVjdGlvbikgPT09ICdvYmplY3QnO1xuICAgICAgcmV0dXJuICEhKGlzU2luZ2xlU2VsZWN0aW9uQ29uZmlnICYmIHNpbmdsZVNlbGVjdGlvbi5hc1BsYWluVGV4dCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNlYXJjaFZhbHVlXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczQuc2VhcmNoVmFsdWUsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzNC5zZWxlY3RlZE9wdGlvbnM7XG4gICAgICBpZiAodGhpcy5hc1BsYWluVGV4dCkge1xuICAgICAgICB2YXIgX3NlbGVjdGVkT3B0aW9ucyQ7XG4gICAgICAgIHJldHVybiBzZWFyY2hWYWx1ZSB8fCAoc2VsZWN0ZWRPcHRpb25zID09PSBudWxsIHx8IHNlbGVjdGVkT3B0aW9ucyA9PT0gdm9pZCAwIHx8IChfc2VsZWN0ZWRPcHRpb25zJCA9IHNlbGVjdGVkT3B0aW9uc1swXSkgPT09IG51bGwgfHwgX3NlbGVjdGVkT3B0aW9ucyQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zZWxlY3RlZE9wdGlvbnMkLmxhYmVsKSB8fCAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZWFyY2hWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczUuY29tcHJlc3NlZCxcbiAgICAgICAgZm9jdXNlZE9wdGlvbklkID0gX3RoaXMkcHJvcHM1LmZvY3VzZWRPcHRpb25JZCxcbiAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHM1LmZ1bGxXaWR0aCxcbiAgICAgICAgaGFzU2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM1Lmhhc1NlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczUuaWQsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczUuaXNEaXNhYmxlZCxcbiAgICAgICAgaXNMaXN0T3BlbiA9IF90aGlzJHByb3BzNS5pc0xpc3RPcGVuLFxuICAgICAgICBub0ljb24gPSBfdGhpcyRwcm9wczUubm9JY29uLFxuICAgICAgICBfb25DaGFuZ2UgPSBfdGhpcyRwcm9wczUub25DaGFuZ2UsXG4gICAgICAgIG9uQ2xlYXIgPSBfdGhpcyRwcm9wczUub25DbGVhcixcbiAgICAgICAgb25DbGljayA9IF90aGlzJHByb3BzNS5vbkNsaWNrLFxuICAgICAgICBvbkZvY3VzID0gX3RoaXMkcHJvcHM1Lm9uRm9jdXMsXG4gICAgICAgIG9uQ2xvc2VMaXN0Q2xpY2sgPSBfdGhpcyRwcm9wczUub25DbG9zZUxpc3RDbGljayxcbiAgICAgICAgb25PcGVuTGlzdENsaWNrID0gX3RoaXMkcHJvcHM1Lm9uT3Blbkxpc3RDbGljayxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczUucGxhY2Vob2xkZXIsXG4gICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzNS5yb290SWQsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHM1LnNlYXJjaFZhbHVlLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczUuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczUuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICB2YWx1ZSA9IF90aGlzJHByb3BzNS52YWx1ZSxcbiAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzNS5wcmVwZW5kLFxuICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wczUuYXBwZW5kLFxuICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczUuaXNMb2FkaW5nLFxuICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wczUuaXNJbnZhbGlkLFxuICAgICAgICBhdXRvRm9jdXMgPSBfdGhpcyRwcm9wczUuYXV0b0ZvY3VzLFxuICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wczVbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgYXJpYUxhYmVsbGVkYnkgPSBfdGhpcyRwcm9wczVbJ2FyaWEtbGFiZWxsZWRieSddO1xuICAgICAgdmFyIHJlbW92ZU9wdGlvbk1lc3NhZ2U7XG4gICAgICB2YXIgcmVtb3ZlT3B0aW9uTWVzc2FnZUlkO1xuICAgICAgaWYgKHRoaXMuc3RhdGUuaGFzRm9jdXMpIHtcbiAgICAgICAgdmFyIHJlYWRQbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyID8gXCJcIi5jb25jYXQocGxhY2Vob2xkZXIsIFwiLlwiKSA6ICcnO1xuICAgICAgICB2YXIgcmVtb3ZlT3B0aW9uTWVzc2FnZUNvbnRlbnQgPSBcIkNvbWJvIGJveC4gU2VsZWN0ZWQuIFwiLmNvbmNhdChzZWFyY2hWYWx1ZSA/IFwiXCIuY29uY2F0KHNlYXJjaFZhbHVlLCBcIi4gU2VsZWN0ZWQuIFwiKSA6ICcnKS5jb25jYXQoc2VsZWN0ZWRPcHRpb25zICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAwID8gXCJcIi5jb25jYXQodmFsdWUsIFwiLiBQcmVzcyBCYWNrc3BhY2UgdG8gZGVsZXRlIFwiKS5jb25jYXQoc2VsZWN0ZWRPcHRpb25zW3NlbGVjdGVkT3B0aW9ucy5sZW5ndGggLSAxXS5sYWJlbCwgXCIuIFwiKSA6ICcnLCBcIkNvbWJvIGJveCBpbnB1dC4gXCIpLmNvbmNhdChyZWFkUGxhY2Vob2xkZXIsIFwiIFR5cGUgc29tZSB0ZXh0IG9yLCB0byBkaXNwbGF5IGEgbGlzdCBvZiBjaG9pY2VzLCBwcmVzcyBEb3duIEFycm93LiBcIikgKyAnVG8gZXhpdCB0aGUgbGlzdCBvZiBjaG9pY2VzLCBwcmVzcyBFc2NhcGUuJztcbiAgICAgICAgcmVtb3ZlT3B0aW9uTWVzc2FnZUlkID0gcm9vdElkKCdyZW1vdmVPcHRpb25NZXNzYWdlJyk7XG5cbiAgICAgICAgLy8gYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCIgd2lsbCByZWFkIHRoaXMgbWVzc2FnZSBhbG91ZCBpbW1lZGlhdGVseSBvbmNlIGl0IGVudGVycyB0aGUgRE9NLlxuICAgICAgICAvLyBXZSdsbCByZW5kZXIgdG8gdGhlIERPTSB3aGVuIHRoZSBpbnB1dCBnYWlucyBmb2N1cyBhbmQgcmVtb3ZlIGl0IHdoZW4gdGhlIGlucHV0IGxvc2VzIGZvY3VzLlxuICAgICAgICAvLyBXZSdsbCB1c2UgYXJpYS1oaWRkZW4gdG8gcHJldmVudCBkZWZhdWx0IGFyaWEgaW5mb3JtYXRpb24gZnJvbSBiZWluZyByZWFkIGJ5IHRoZSBzY3JlZW5cbiAgICAgICAgLy8gcmVhZGVyLlxuICAgICAgICByZW1vdmVPcHRpb25NZXNzYWdlID0gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIixcbiAgICAgICAgICBpZDogcmVtb3ZlT3B0aW9uTWVzc2FnZUlkXG4gICAgICAgIH0sIHJlbW92ZU9wdGlvbk1lc3NhZ2VDb250ZW50KSk7XG4gICAgICB9XG4gICAgICB2YXIgaXNJbkdyb3VwID0gc2luZ2xlU2VsZWN0aW9uICYmIChwcmVwZW5kIHx8IGFwcGVuZCk7XG4gICAgICB2YXIgc2hvd1BsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIgJiYgIShzZWxlY3RlZE9wdGlvbnMgIT09IG51bGwgJiYgc2VsZWN0ZWRPcHRpb25zICE9PSB2b2lkIDAgJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkgJiYgIXNlYXJjaFZhbHVlO1xuICAgICAgdmFyIGNsaWNrUHJvcHMgPSB7fTtcbiAgICAgIGlmICghaXNEaXNhYmxlZCAmJiBvbkNsZWFyICYmIGhhc1NlbGVjdGVkT3B0aW9ucykge1xuICAgICAgICBjbGlja1Byb3BzLmNsZWFyID0ge1xuICAgICAgICAgICdkYXRhLXRlc3Qtc3Viaic6ICdjb21ib0JveENsZWFyQnV0dG9uJyxcbiAgICAgICAgICBvbkNsaWNrOiBvbkNsZWFyXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgaWNvbjtcbiAgICAgIGlmICghbm9JY29uICYmICFpc0Rpc2FibGVkKSB7XG4gICAgICAgIGljb24gPSB7XG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBpc0xpc3RPcGVuID8gJ0Nsb3NlIGxpc3Qgb2Ygb3B0aW9ucycgOiAnT3BlbiBsaXN0IG9mIG9wdGlvbnMnLFxuICAgICAgICAgICdkYXRhLXRlc3Qtc3Viaic6ICdjb21ib0JveFRvZ2dsZUxpc3RCdXR0b24nLFxuICAgICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIG9uQ2xpY2s6IGlzTGlzdE9wZW4gJiYgIWlzRGlzYWJsZWQgPyBvbkNsb3NlTGlzdENsaWNrIDogb25PcGVuTGlzdENsaWNrLFxuICAgICAgICAgIHNpZGU6ICdyaWdodCcsXG4gICAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICAgIHR5cGU6ICdhcnJvd0Rvd24nXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgd3JhcENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb21ib0JveF9faW5wdXRXcmFwJywge1xuICAgICAgICAnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcC0tcGxhaW5UZXh0JzogdGhpcy5hc1BsYWluVGV4dFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZW5kZXJXaXRoRXVpU3R5bGVzTWVtb2l6ZXIsIG51bGwsIGZ1bmN0aW9uIChzdHlsZXNNZW1vaXplcikge1xuICAgICAgICB2YXIgc3R5bGVzID0gc3R5bGVzTWVtb2l6ZXIoZXVpQ29tYm9Cb3hJbnB1dFN0eWxlcyk7XG4gICAgICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUNvbWJvQm94SW5wdXRXcmFwcGVyLCAhc2luZ2xlU2VsZWN0aW9uICYmIHN0eWxlcy5tdWx0aVNlbGVjdCwgY29tcHJlc3NlZCA/IHN0eWxlcy5jb21wcmVzc2VkIDogc3R5bGVzLnVuY29tcHJlc3NlZF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShfdGhpczIuYXNQbGFpblRleHQgfHwgc2hvd1BsYWNlaG9sZGVyID8gW3N0eWxlcy5wbGFpblRleHQucGxhaW5UZXh0LCBjb21wcmVzc2VkID8gc3R5bGVzLnBsYWluVGV4dC5jb21wcmVzc2VkIDogc3R5bGVzLnBsYWluVGV4dC51bmNvbXByZXNzZWRdIDogW10pLCBbaXNEaXNhYmxlZCA/IHN0eWxlcy5kaXNhYmxlZCA6IGlzSW52YWxpZCA/IHN0eWxlcy5pbnZhbGlkIDogaXNMaXN0T3BlbiA/IHN0eWxlcy5vcGVuIDogdW5kZWZpbmVkLCBpc0luR3JvdXAgJiYgc3R5bGVzLmluR3JvdXBdKTtcbiAgICAgICAgdmFyIGZvcm1MYXlvdXRTdHlsZXMgPSBbc3R5bGVzLmZvcm1MYXlvdXQuZXVpQ29tYm9Cb3hfX2Zvcm1Db250cm9sTGF5b3V0LCAhc2luZ2xlU2VsZWN0aW9uICYmIHN0eWxlcy5mb3JtTGF5b3V0Lm11bHRpU2VsZWN0XTtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXQsIF9leHRlbmRzKHtcbiAgICAgICAgICBpY29uOiBpY29uXG4gICAgICAgIH0sIGNsaWNrUHJvcHMsIHtcbiAgICAgICAgICBpbnB1dElkOiBpZCxcbiAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZCxcbiAgICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgICAgcHJlcGVuZDogcHJlcGVuZCxcbiAgICAgICAgICBhcHBlbmQ6IGFwcGVuZCxcbiAgICAgICAgICBjc3M6IGZvcm1MYXlvdXRTdHlsZXNcbiAgICAgICAgfSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICAgIGNsYXNzTmFtZTogd3JhcENsYXNzZXMsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNvbWJvQm94SW5wdXRcIixcbiAgICAgICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgICAgIHRhYkluZGV4OiAtMSAvLyBiZWNvbWVzIG9uQmx1ciBldmVudCdzIHJlbGF0ZWRUYXJnZXQsIG90aGVyd2lzZSByZWxhdGVkVGFyZ2V0IGlzIG51bGwgd2hlbiBjbGlja2luZyBvbiB0aGlzIGRpdlxuICAgICAgICB9LCBfdGhpczIucmVuZGVyUGlsbHMoKSwgX19fRW1vdGlvbkpTWChFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQsIHtcbiAgICAgICAgICBvcHRpb246IF90aGlzMi5hc1BsYWluVGV4dCA/IHNlbGVjdGVkT3B0aW9ucyA9PT0gbnVsbCB8fCBzZWxlY3RlZE9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkT3B0aW9uc1swXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjbGFzc05hbWVQcmVmaXg6IFwiZXVpQ29tYm9Cb3hQbGFpblRleHRTZWxlY3Rpb25cIixcbiAgICAgICAgICBtYXJnaW5TaXplOiBcInh4c1wiXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJpbnB1dFwiLCB7XG4gICAgICAgICAgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjogZm9jdXNlZE9wdGlvbklkLFxuICAgICAgICAgIFwiYXJpYS1hdXRvY29tcGxldGVcIjogXCJsaXN0XCIsXG4gICAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IGlzTGlzdE9wZW4gPyByb290SWQoJ2xpc3Rib3gnKSA6ICcnLFxuICAgICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBpc0xpc3RPcGVuLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsbGVkYnksXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogaXNJbnZhbGlkLFxuICAgICAgICAgIGNzczogc3R5bGVzLmV1aUNvbWJvQm94SW5wdXQsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94X19pbnB1dFwiLFxuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjb21ib0JveFNlYXJjaElucHV0XCIsXG4gICAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIG9uQmx1cjogX3RoaXMyLm9uQmx1cixcbiAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfb25DaGFuZ2UoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRm9jdXM6IF90aGlzMi5vbkZvY3VzLFxuICAgICAgICAgIG9uS2V5RG93bjogX3RoaXMyLm9uS2V5RG93bixcbiAgICAgICAgICByZWY6IF90aGlzMi5pbnB1dFJlZkNhbGxiYWNrLFxuICAgICAgICAgIHJvbGU6IFwiY29tYm9ib3hcIixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgaW5saW5lU2l6ZTogX3RoaXMyLmFzUGxhaW5UZXh0IHx8IHNob3dQbGFjZWhvbGRlciA/ICcxMDAlJyA6IF90aGlzMi5zdGF0ZS5pbnB1dFdpZHRoXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogc2hvd1BsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdmFsdWU6IF90aGlzMi5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICAgICAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCJcbiAgICAgICAgICAvLyBGb3JjZSB0aGUgbWVudSB0byByZS1vcGVuIG9uIGV2ZXJ5IGlucHV0IGNsaWNrIC0gb25seSBuZWNlc3Nhcnkgd2hlbiBwbGFpbiB0ZXh0XG4gICAgICAgICAgLFxuICAgICAgICAgIG9uQ2xpY2s6IF90aGlzMi5hc1BsYWluVGV4dCA/IG9uRm9jdXMgOiB1bmRlZmluZWQgLy8gVHlwZSBzaGVuYW5pZ2FucyAtIGV2ZW50IHNob3VsZCBiZSBtb3N0bHkgdGhlIHNhbWVcbiAgICAgICAgfSkpLCByZW1vdmVPcHRpb25NZXNzYWdlKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbkV1aUNvbWJvQm94SW5wdXQucHJvcFR5cGVzID0ge1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBmb2N1c2VkT3B0aW9uSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIGhhc1NlbGVjdGVkT3B0aW9uczogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuYW55LFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNMaXN0T3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgbm9JY29uOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBvbkJsdXI6IFByb3BUeXBlcy5hbnksXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkNsZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25DbG9zZUxpc3RDbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBvbk9wZW5MaXN0Q2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uUmVtb3ZlT3B0aW9uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgcm9vdElkOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIHNlYXJjaFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHNlbGVjdGVkT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAgIC8qKlxuICAgICAgICAgKiBPcHRpb25hbCBjdXN0b20gdG9vbHRpcCBjb250ZW50IGZvciB0aGUgYnV0dG9uXG4gICAgICAgICAqL1xuICAgICAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgLyoqXG4gICAgICAgICAqIE9wdGlvbmFsIHByb3BzIHRvIHBhc3MgdG8gdGhlIHVuZGVybHlpbmcgKipbRXVpVG9vbFRpcF0oLyMvZGlzcGxheS90b29sdGlwKSoqXG4gICAgICAgICAqL1xuICAgICAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIGN1c3RvbSB0b29sdGlwIGNvbnRlbnQgZm9yIHRoZSBidXR0b25cbiAgICAgICAqL1xuICAgIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIHByb3BzIHRvIHBhc3MgdG8gdGhlIHVuZGVybHlpbmcgKipbRXVpVG9vbFRpcF0oLyMvZGlzcGxheS90b29sdGlwKSoqXG4gICAgICAgKi9cbiAgICB0b29sVGlwUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgc2luZ2xlU2VsZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFzUGxhaW5UZXh0OiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkXSksXG4gIHRvZ2dsZUJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgYXBwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5pbXBvcnQgeyBjc3MgYXMgX2NzcyB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBsb2dpY2FsU3R5bGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuLyoqXG4gKiBEUlkgdXRpbCBmb3IgcmVuZGVyaW5nIGFuIG9wdGlvbiB3aXRoIGl0cyBwcmVwZW5kIGFuZCBhcHBlbmQgcHJvcGVydGllc1xuICovXG5leHBvcnQgdmFyIEV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZCA9IGZ1bmN0aW9uIEV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgb3B0aW9uID0gX3JlZi5vcHRpb24sXG4gICAgY2xhc3NOYW1lUHJlZml4ID0gX3JlZi5jbGFzc05hbWVQcmVmaXgsXG4gICAgX3JlZiRtYXJnaW5TaXplID0gX3JlZi5tYXJnaW5TaXplLFxuICAgIG1hcmdpblNpemUgPSBfcmVmJG1hcmdpblNpemUgPT09IHZvaWQgMCA/ICd4cycgOiBfcmVmJG1hcmdpblNpemU7XG4gIHZhciBfdXNlRXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpLFxuICAgIGV1aVRoZW1lID0gX3VzZUV1aVRoZW1lLmV1aVRoZW1lO1xuICB2YXIgbWFyZ2luID0gZXVpVGhlbWUuc2l6ZVttYXJnaW5TaXplXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIChvcHRpb24gPT09IG51bGwgfHwgb3B0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb24ucHJlcGVuZCkgJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoY2xhc3NOYW1lUHJlZml4LCBcIl9fcHJlcGVuZFwiKSxcbiAgICBjc3M6IC8qI19fUFVSRV9fKi9fY3NzKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbG9naWNhbFN0eWxlKCdtYXJnaW4tcmlnaHQnLCBtYXJnaW4pKSwgY2VudGVySWNvbnMpLCBcIjtsYWJlbDpFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQ7XCIpXG4gIH0sIG9wdGlvbi5wcmVwZW5kKSwgY2hpbGRyZW4sIChvcHRpb24gPT09IG51bGwgfHwgb3B0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb24uYXBwZW5kKSAmJiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChjbGFzc05hbWVQcmVmaXgsIFwiX19hcHBlbmRcIiksXG4gICAgY3NzOiAvKiNfX1BVUkVfXyovX2Nzcyhfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGxvZ2ljYWxTdHlsZSgnbWFyZ2luLWxlZnQnLCBtYXJnaW4pKSwgY2VudGVySWNvbnMpLCBcIjtsYWJlbDpFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQ7XCIpXG4gIH0sIG9wdGlvbi5hcHBlbmQpKTtcbn07XG5cbi8vIEZpeCB2ZXJ0aWNhbCBhbGlnbm1lbnQgb2YgRXVpSWNvbnMgaW4gcHJlcGVuZC9hcHBlbmQgbm9kZXNcbnZhciBjZW50ZXJJY29ucyA9IHtcbiAgJy5ldWlJY29uJzoge1xuICAgIGRpc3BsYXk6ICdibG9jaydcbiAgfVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJvbkNsaWNrXCIsIFwib25DbGlja0FyaWFMYWJlbFwiLCBcIm9uQ2xvc2VcIiwgXCJvcHRpb25cIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpQmFkZ2UgfSBmcm9tICcuLi8uLi9iYWRnZSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBldWlDb21ib0JveFBpbGxTdHlsZXMgfSBmcm9tICcuL2NvbWJvX2JveF9waWxsLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDb21ib0JveFBpbGwgPSBmdW5jdGlvbiBFdWlDb21ib0JveFBpbGwoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2hvbGxvdycgOiBfcmVmJGNvbG9yLFxuICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgb25DbGlja0FyaWFMYWJlbCA9IF9yZWYub25DbGlja0FyaWFMYWJlbCxcbiAgICBvbkNsb3NlID0gX3JlZi5vbkNsb3NlLFxuICAgIG9wdGlvbiA9IF9yZWYub3B0aW9uLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb21ib0JveFBpbGwnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpQ29tYm9Cb3hQaWxsU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IHN0eWxlcy5ldWlDb21ib0JveFBpbGw7XG4gIHZhciBvbkNsaWNrUHJvcHMgPSBvbkNsaWNrICYmIG9uQ2xpY2tBcmlhTGFiZWwgPyB7XG4gICAgb25DbGljazogb25DbGljayxcbiAgICBvbkNsaWNrQXJpYUxhYmVsOiBvbkNsaWNrQXJpYUxhYmVsXG4gIH0gOiB7fTtcbiAgdmFyIGNvbnRlbnQgPSBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZCwge1xuICAgIG9wdGlvbjogb3B0aW9uLFxuICAgIGNsYXNzTmFtZVByZWZpeDogXCJldWlDb21ib0JveFBpbGxcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aS10ZXh0VHJ1bmNhdGVcIlxuICB9LCBjaGlsZHJlbikpO1xuICBpZiAob25DbG9zZSkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94UGlsbC5yZW1vdmVTZWxlY3Rpb25cIixcbiAgICAgIGRlZmF1bHQ6IFwiUmVtb3ZlIHtjaGlsZHJlbn0gZnJvbSBzZWxlY3Rpb24gaW4gdGhpcyBncm91cFwiLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChyZW1vdmVTZWxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aUNvbWJvQm94UGlsbFwiLFxuICAgICAgICBpY29uT25DbGljazogZnVuY3Rpb24gaWNvbk9uQ2xpY2soKSB7XG4gICAgICAgICAgcmV0dXJuIG9uQ2xvc2Uob3B0aW9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgaWNvbk9uQ2xpY2tBcmlhTGFiZWw6IHJlbW92ZVNlbGVjdGlvbixcbiAgICAgICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICAgICAgaWNvblR5cGU6IFwiY3Jvc3NcIixcbiAgICAgICAgdGl0bGU6IGNoaWxkcmVuXG4gICAgICB9LCBvbkNsaWNrUHJvcHMsIHJlc3QpLCBjb250ZW50KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjb2xvcjogY29sb3IsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aUNvbWJvQm94UGlsbFwiLFxuICAgIHRpdGxlOiBjaGlsZHJlblxuICB9LCByZXN0LCBvbkNsaWNrUHJvcHMpLCBjb250ZW50KTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIG1hdGhXaXRoVW5pdHMgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aUNvbWJvQm94UGlsbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNvbWJvQm94UGlsbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuXG4gIC8vIEVuc3VyZSB0aGUgaW5wdXQgZG9lc24ndCBkcm9wIHRvIHRoZSBuZXh0IGxpbmUgd2hlbiB0aGUgRXVpQmFkZ2UgaGFzIGEgdmVyeSBsb25nIHRleHRcbiAgdmFyIHBpbGxNYXhXaWR0aCA9IFwiY2FsYygxMDAlIC0gXCIuY29uY2F0KGV1aVRoZW1lLnNpemUueHhzLCBcIiAtIFwiKS5jb25jYXQoZXVpVGhlbWUuc2l6ZS5iYXNlLCBcIilcIik7XG4gIHZhciBwaWxsSGVpZ2h0ID0gbWF0aFdpdGhVbml0cyhldWlUaGVtZS5zaXplLmwsIGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHggLSAyO1xuICB9KTtcbiAgdmFyIHBpbGxMaW5lSGVpZ2h0ID0gbWF0aFdpdGhVbml0cyhwaWxsSGVpZ2h0LCBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB4IC0gMjtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgZXVpQ29tYm9Cb3hQaWxsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsIHBpbGxNYXhXaWR0aCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBwaWxsSGVpZ2h0KSwgXCIgbGluZS1oZWlnaHQ6XCIsIHBpbGxMaW5lSGVpZ2h0LCBcIjt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtcIiwgbG9naWNhbENTUygnbWFyZ2luLXZlcnRpY2FsJywgJzFweCcpLCBcIiYrLmV1aUJhZGdle1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tbGVmdCcsIDApLCBcIjt9LmV1aUJhZGdlX190ZXh0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7LmV1aUljb257ZGlzcGxheTpibG9jazt9fTtsYWJlbDpldWlDb21ib0JveFBpbGw7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpRm9ybUNvbnRyb2xTdHlsZXMsIGV1aUZvcm1Db250cm9sRGVmYXVsdFNoYWRvdywgZXVpRm9ybUNvbnRyb2xUZXh0IH0gZnJvbSAnLi4vLi4vZm9ybS9mb3JtLnN0eWxlcyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJrZWR1MWgtcGxhaW5UZXh0XCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpjZW50ZXI7Y3Vyc29yOnRleHQ7bGFiZWw6cGxhaW5UZXh0O1wiXG59IDoge1xuICBuYW1lOiBcImtlZHUxaC1wbGFpblRleHRcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6dGV4dDtsYWJlbDpwbGFpblRleHQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJka3pyMWctbXVsdGlTZWxlY3RcIixcbiAgc3R5bGVzOiBcImZsZXgtd3JhcDp3cmFwO2xhYmVsOm11bHRpU2VsZWN0O1wiXG59IDoge1xuICBuYW1lOiBcImRrenIxZy1tdWx0aVNlbGVjdFwiLFxuICBzdHlsZXM6IFwiZmxleC13cmFwOndyYXA7bGFiZWw6bXVsdGlTZWxlY3Q7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpQ29tYm9Cb3hJbnB1dFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNvbWJvQm94SW5wdXRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIGZvcm1TdHlsZXMgPSBldWlGb3JtQ29udHJvbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIC8vIFdyYXBwZXIgd2hpY2ggdmlzdWFsbHkgbWltaWNzIGEgZm9ybSBjb250cm9sXG4gICAgZXVpQ29tYm9Cb3hJbnB1dFdyYXBwZXI6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9ybUNvbnRyb2xEZWZhdWx0U2hhZG93KGV1aVRoZW1lQ29udGV4dCksIFwiIGRpc3BsYXk6ZmxleDs7bGFiZWw6ZXVpQ29tYm9Cb3hJbnB1dFdyYXBwZXI7XCIpLFxuICAgIG11bHRpU2VsZWN0OiBfcmVmMixcbiAgICB1bmNvbXByZXNzZWQ6IFwiXFxuICAgICAgXCIuY29uY2F0KGZvcm1TdHlsZXMudW5jb21wcmVzc2VkLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0JywgJ2F1dG8nKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCBldWlUaGVtZS5zaXplLnMpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgZXVpVGhlbWUuc2l6ZS5zKSwgXCJcXG4gICAgICBjb2x1bW4tZ2FwOiBcIikuY29uY2F0KGV1aVRoZW1lLnNpemUucywgXCI7XFxuICAgICAgcm93LWdhcDogXCIpLmNvbmNhdChldWlUaGVtZS5zaXplLnhzLCBcIjtcXG4gICAgXCIpLFxuICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoZm9ybVN0eWxlcy5jb21wcmVzc2VkLCBcIiBcIiwgbG9naWNhbENTUygnaGVpZ2h0JywgJ2F1dG8nKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctbGVmdCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIiBjb2x1bW4tZ2FwOlwiLCBldWlUaGVtZS5zaXplLnhzLCBcIjtyb3ctZ2FwOlwiLCBldWlUaGVtZS5zaXplLnh4cywgXCI7O2xhYmVsOmNvbXByZXNzZWQ7XCIpLFxuICAgIHBsYWluVGV4dDoge1xuICAgICAgcGxhaW5UZXh0OiBfcmVmLFxuICAgICAgY29tcHJlc3NlZDogXCJcXG4gICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBldWlUaGVtZS5zaXplLnMpLCBcIlxcbiAgICAgIFwiKSxcbiAgICAgIHVuY29tcHJlc3NlZDogXCJcXG4gICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBldWlUaGVtZS5zaXplLm0pLCBcIlxcbiAgICAgIFwiKVxuICAgIH0sXG4gICAgaW52YWxpZDogLyojX19QVVJFX18qL2Nzcyhmb3JtU3R5bGVzLmludmFsaWQsIFwiO2xhYmVsOmludmFsaWQ7XCIpLFxuICAgIGRpc2FibGVkOiAvKiNfX1BVUkVfXyovY3NzKGZvcm1TdHlsZXMuZGlzYWJsZWQsIFwiO2xhYmVsOmRpc2FibGVkO1wiKSxcbiAgICBvcGVuOiAvKiNfX1BVUkVfXyovY3NzKGZvcm1TdHlsZXMuZm9jdXMsIFwiO2xhYmVsOm9wZW47XCIpLFxuICAgIGluR3JvdXA6IC8qI19fUFVSRV9fKi9jc3MoZm9ybVN0eWxlcy5pbkdyb3VwLCBcIjtsYWJlbDppbkdyb3VwO1wiKSxcbiAgICAvLyBBY3R1YWwgaW5wdXQgZWxlbWVudCwgd2hpY2ggaGFzIHZhcmlhYmxlIHdpZHRoIGRlcGVuZGluZyBvbiBpdHMgdmFsdWVcbiAgICBldWlDb21ib0JveElucHV0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGV1aVRoZW1lLnNpemUubCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCAnMnB4JyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBldWlGb3JtQ29udHJvbFRleHQoZXVpVGhlbWVDb250ZXh0KSwgXCIgYmFja2dyb3VuZDp0cmFuc3BhcmVudDsmOmRpc2FibGVke2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0LCBcIjt9YXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXI6bm9uZSFpbXBvcnRhbnQ7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudDtvdXRsaW5lOm5vbmUhaW1wb3J0YW50OztsYWJlbDpldWlDb21ib0JveElucHV0O1wiKSxcbiAgICAvLyBFdWlGb3JtQ29udHJvbExheW91dCBvdmVycmlkZXNcbiAgICBmb3JtTGF5b3V0OiB7XG4gICAgICBldWlDb21ib0JveF9fZm9ybUNvbnRyb2xMYXlvdXQ6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZXVpQ29tYm9Cb3hfX2Zvcm1Db250cm9sTGF5b3V0O1wiKSxcbiAgICAgIC8vIEFsbG93IHRoZSBmb3JtIGNvbnRyb2wgdG8gZXhwYW5kIHRvIGFueSBoZWlnaHQgdG8gYWNjb21tb2RhdGUgbXVsdGlwbGUgcm93cyBvZiBwaWxsc1xuICAgICAgbXVsdGlTZWxlY3Q6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnaGVpZ2h0JywgJ2F1dG8nKSwgXCI7O2xhYmVsOm11bHRpU2VsZWN0O1wiKVxuICAgIH1cbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImtleVwiLCBcImlzR3JvdXBMYWJlbE9wdGlvblwiLCBcImxhYmVsXCIsIFwidmFsdWVcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCIsIFwidHJ1bmNhdGlvblByb3BzXCJdLFxuICBfZXhjbHVkZWQzID0gW1wiZGF0YS10ZXN0LXN1YmpcIiwgXCJhY3RpdmVPcHRpb25JbmRleFwiLCBcImFyZUFsbE9wdGlvbnNTZWxlY3RlZFwiLCBcImN1c3RvbU9wdGlvblRleHRcIiwgXCJmdWxsV2lkdGhcIiwgXCJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlXCIsIFwiaXNDYXNlU2Vuc2l0aXZlXCIsIFwiaXNMb2FkaW5nXCIsIFwibGlzdFJlZlwiLCBcIm1hdGNoaW5nT3B0aW9uc1wiLCBcIm9uQ2xvc2VMaXN0XCIsIFwib25DcmVhdGVPcHRpb25cIiwgXCJvbk9wdGlvbkNsaWNrXCIsIFwib25PcHRpb25FbnRlcktleVwiLCBcIm9uU2Nyb2xsXCIsIFwib3B0aW9uc1wiLCBcInJlbmRlck9wdGlvblwiLCBcInJvb3RJZFwiLCBcInJvd0hlaWdodFwiLCBcInNjcm9sbFRvSW5kZXhcIiwgXCJzZWFyY2hWYWx1ZVwiLCBcInNlbGVjdGVkT3B0aW9uc1wiLCBcInNpbmdsZVNlbGVjdGlvblwiLCBcImRlbGltaXRlclwiLCBcInRydW5jYXRpb25Qcm9wc1wiLCBcImxpc3Rib3hBcmlhTGFiZWxcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEZpeGVkU2l6ZUxpc3QgfSBmcm9tICdyZWFjdC13aW5kb3cnO1xuaW1wb3J0IHsgUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uLy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpSGlnaGxpZ2h0IH0gZnJvbSAnLi4vLi4vaGlnaGxpZ2h0JztcbmltcG9ydCB7IEV1aU1hcmsgfSBmcm9tICcuLi8uLi9tYXJrJztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi8uLi90ZXh0JztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlGaWx0ZXJTZWxlY3RJdGVtIH0gZnJvbSAnLi4vLi4vZmlsdGVyX2dyb3VwL2ZpbHRlcl9zZWxlY3RfaXRlbSc7XG5pbXBvcnQgeyBFdWlCYWRnZSB9IGZyb20gJy4uLy4uL2JhZGdlJztcbmltcG9ydCB7IEV1aVRleHRUcnVuY2F0ZSB9IGZyb20gJy4uLy4uL3RleHRfdHJ1bmNhdGUnO1xuaW1wb3J0IHsgRXVpSW5wdXRQb3BvdmVyV2lkdGhDb250ZXh0IH0gZnJvbSAnLi4vLi4vcG9wb3Zlci9pbnB1dF9wb3BvdmVyJztcbmltcG9ydCB7IEV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEV1aUNvbWJvQm94VGl0bGUgfSBmcm9tICcuL2NvbWJvX2JveF90aXRsZSc7XG5pbXBvcnQgeyBldWlDb21ib0JveE9wdGlvbkxpc3RTdHlsZXMsIExJU1RfTUFYX0hFSUdIVCB9IGZyb20gJy4vY29tYm9fYm94X29wdGlvbnNfbGlzdC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBoaXRFbnRlckJhZGdlID0gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwge1xuICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2VudGVyQmFkZ2VcIixcbiAgY29sb3I6IFwiaG9sbG93XCIsXG4gIGljb25UeXBlOiBcInJldHVybktleVwiLFxuICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiXG59KTtcbmV4cG9ydCB2YXIgRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlDb21ib0JveE9wdGlvbnNMaXN0KCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCk7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibGlzdFJlZlwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2V0TGlzdFJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5saXN0UmVmID0gcmVmO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJMaXN0SW5uZXJFbGVtZW50XCIsIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgICAgICBcImFyaWEtbGFiZWxcIjogX3RoaXMucHJvcHMubGlzdGJveEFyaWFMYWJlbCxcbiAgICAgICAgaWQ6IF90aGlzLnByb3BzLnJvb3RJZCgnbGlzdGJveCcpLFxuICAgICAgICByb2xlOiBcImxpc3Rib3hcIixcbiAgICAgICAgdGFiSW5kZXg6IFwiMFwiXG4gICAgICB9KSwgY2hpbGRyZW4pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJMaXN0Um93XCIsIGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgdmFyIF9vcHRpb24ka2V5O1xuICAgICAgdmFyIGRhdGEgPSBfcmVmMi5kYXRhLFxuICAgICAgICBpbmRleCA9IF9yZWYyLmluZGV4LFxuICAgICAgICBzdHlsZSA9IF9yZWYyLnN0eWxlO1xuICAgICAgdmFyIG9wdGlvbiA9IGRhdGFbaW5kZXhdO1xuICAgICAgdmFyIGtleSA9IG9wdGlvbi5rZXksXG4gICAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbiA9IG9wdGlvbi5pc0dyb3VwTGFiZWxPcHRpb24sXG4gICAgICAgIGxhYmVsID0gb3B0aW9uLmxhYmVsLFxuICAgICAgICB2YWx1ZSA9IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgcHJlcGVuZCA9IG9wdGlvbi5wcmVwZW5kLFxuICAgICAgICBhcHBlbmQgPSBvcHRpb24uYXBwZW5kLFxuICAgICAgICBfdHJ1bmNhdGlvblByb3BzID0gb3B0aW9uLnRydW5jYXRpb25Qcm9wcyxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvcHRpb24sIF9leGNsdWRlZDIpO1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHMub25PcHRpb25DbGljayxcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wcy5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHMucmVuZGVyT3B0aW9uLFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzLnNlYXJjaFZhbHVlLFxuICAgICAgICByb290SWQgPSBfdGhpcyRwcm9wcy5yb290SWQ7XG4gICAgICB2YXIgaGFzVHJ1bmNhdGlvblByb3BzID0gX3RoaXMucHJvcHMudHJ1bmNhdGlvblByb3BzIHx8IF90cnVuY2F0aW9uUHJvcHM7XG4gICAgICB2YXIgdHJ1bmNhdGlvblByb3BzID0gaGFzVHJ1bmNhdGlvblByb3BzID8gLy8gSW5kaXZpZHVhbCB0cnVuY2F0aW9uIHNldHRpbmdzIHNob3VsZCBvdmVycmlkZSBjb21wb25lbnQgcHJvcFxuICAgICAgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBfdGhpcy5wcm9wcy50cnVuY2F0aW9uUHJvcHMpLCBfdHJ1bmNhdGlvblByb3BzKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChpc0dyb3VwTGFiZWxPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGtleToga2V5ICE9PSBudWxsICYmIGtleSAhPT0gdm9pZCAwID8ga2V5IDogbGFiZWwsXG4gICAgICAgICAgc3R5bGU6IHN0eWxlXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hUaXRsZSwgbnVsbCwgcHJlcGVuZCwgbGFiZWwsIGFwcGVuZCkpO1xuICAgICAgfVxuICAgICAgdmFyIGNoZWNrZWQgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggJiYgc2VsZWN0ZWRPcHRpb25zWzBdLmxhYmVsID09PSBsYWJlbCAmJiBzZWxlY3RlZE9wdGlvbnNbMF0ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgY2hlY2tlZCA9ICdvbic7XG4gICAgICB9XG4gICAgICB2YXIgb3B0aW9uSXNGb2N1c2VkID0gYWN0aXZlT3B0aW9uSW5kZXggPT09IGluZGV4O1xuICAgICAgdmFyIG9wdGlvbklzRGlzYWJsZWQgPSBvcHRpb24uaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykgJiYgb3B0aW9uLmRpc2FibGVkID09PSB0cnVlO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRmlsdGVyU2VsZWN0SXRlbSwgX2V4dGVuZHMoe1xuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIGtleTogKF9vcHRpb24ka2V5ID0gb3B0aW9uLmtleSkgIT09IG51bGwgJiYgX29wdGlvbiRrZXkgIT09IHZvaWQgMCA/IF9vcHRpb24ka2V5IDogb3B0aW9uLmxhYmVsLFxuICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgIGlmIChvbk9wdGlvbkNsaWNrKSB7XG4gICAgICAgICAgICBvbk9wdGlvbkNsaWNrKG9wdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBpc0ZvY3VzZWQ6IG9wdGlvbklzRm9jdXNlZCxcbiAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgc2hvd0ljb25zOiBzaW5nbGVTZWxlY3Rpb24gPyB0cnVlIDogZmFsc2UsXG4gICAgICAgIGlkOiByb290SWQoXCJfb3B0aW9uLVwiLmNvbmNhdChpbmRleCkpLFxuICAgICAgICB0aXRsZTogbGFiZWxcbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQsIHtcbiAgICAgICAgb3B0aW9uOiBvcHRpb24sXG4gICAgICAgIGNsYXNzTmFtZVByZWZpeDogXCJldWlDb21ib0JveE9wdGlvblwiLFxuICAgICAgICBtYXJnaW5TaXplOiBcInNcIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2NvbnRlbnRcIlxuICAgICAgfSwgcmVuZGVyT3B0aW9uID8gcmVuZGVyT3B0aW9uKG9wdGlvbiwgc2VhcmNoVmFsdWUsICdldWlDb21ib0JveE9wdGlvbl9fcmVuZGVyT3B0aW9uJykgOiBfdGhpcy5yZW5kZXJUcnVuY2F0ZWRPcHRpb24obGFiZWwsIHRydW5jYXRpb25Qcm9wcykpKSwgb3B0aW9uSXNGb2N1c2VkICYmICFvcHRpb25Jc0Rpc2FibGVkID8gaGl0RW50ZXJCYWRnZSA6IG51bGwpKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib3B0aW9uV2lkdGhcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2V0T3B0aW9uV2lkdGhcIiwgZnVuY3Rpb24gKHdpZHRoKSB7XG4gICAgICBfdGhpcy5vcHRpb25XaWR0aCA9IHdpZHRoO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZW5kZXJUcnVuY2F0ZWRPcHRpb25cIiwgZnVuY3Rpb24gKHRleHQsIHRydW5jYXRpb25Qcm9wcykge1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gX3RoaXMucHJvcHMuc2VhcmNoVmFsdWUudHJpbSgpO1xuICAgICAgaWYgKCF0cnVuY2F0aW9uUHJvcHMgJiYgIXNlYXJjaFZhbHVlKSB7XG4gICAgICAgIC8vIERlZmF1bHQgdG8gQ1NTIHRleHQtb3ZlcmZsb3dcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICB9XG4gICAgICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRleHRUcnVuY2F0ZSwgX2V4dGVuZHMoe1xuICAgICAgICAgIHdpZHRoOiBfdGhpcy5vcHRpb25XaWR0aCxcbiAgICAgICAgICBvblJlc2l6ZTogX3RoaXMuc2V0T3B0aW9uV2lkdGhcbiAgICAgICAgfSwgdHJ1bmNhdGlvblByb3BzLCB7XG4gICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICB9KSwgZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB2YXIgc2VhcmNoUG9zaXRpb25TdGFydCA9IF90aGlzLnByb3BzLmlzQ2FzZVNlbnNpdGl2ZSA/IHRleHQuaW5kZXhPZihzZWFyY2hWYWx1ZSkgOiB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIHZhciBzZWFyY2hQb3NpdGlvbkNlbnRlciA9IHNlYXJjaFBvc2l0aW9uU3RhcnQgKyBNYXRoLmZsb29yKHNlYXJjaFZhbHVlLmxlbmd0aCAvIDIpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGV4dFRydW5jYXRlLCBfZXh0ZW5kcyh7XG4gICAgICAgIHdpZHRoOiBfdGhpcy5vcHRpb25XaWR0aCxcbiAgICAgICAgb25SZXNpemU6IF90aGlzLnNldE9wdGlvbldpZHRoXG4gICAgICB9LCB0cnVuY2F0aW9uUHJvcHMsIHtcbiAgICAgICAgLy8gV2hlbiBzZWFyY2hpbmcsIGRvbid0IGFsbG93IG92ZXJyaWRpbmcgdGhlIHRydW5jYXRpb24gc2V0dGluZ3NcbiAgICAgICAgdHJ1bmNhdGlvbjogXCJzdGFydEVuZFwiLFxuICAgICAgICB0cnVuY2F0aW9uUG9zaXRpb246IHNlYXJjaFBvc2l0aW9uQ2VudGVyLFxuICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICB9KSwgZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHRleHQubGVuZ3RoID49IHNlYXJjaFZhbHVlLmxlbmd0aCA/IF9fX0Vtb3Rpb25KU1goRXVpSGlnaGxpZ2h0LCB7XG4gICAgICAgICAgc2VhcmNoOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICBzdHJpY3Q6IF90aGlzLnByb3BzLmlzQ2FzZVNlbnNpdGl2ZVxuICAgICAgICB9LCB0ZXh0KSA6XG4gICAgICAgIC8vIElmIHRoZSBhdmFpbGFibGUgdHJ1bmNhdGVkIHRleHQgaXMgc2hvcnRlciB0aGFuIHRoZSBmdWxsIHNlYXJjaCBzdHJpbmcsXG4gICAgICAgIC8vIGp1c3QgaGlnaGxpZ2h0IHRoZSBlbnRpcmUgdHJ1bmNhdGVkIHRleHRcbiAgICAgICAgX19fRW1vdGlvbkpTWChFdWlNYXJrLCBudWxsLCB0ZXh0KSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICBpZiAodGhpcy5saXN0UmVmICYmIHR5cGVvZiB0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSBwcmV2UHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgICAgdGhpcy5saXN0UmVmLnNjcm9sbFRvSXRlbSh0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4LCAnYXV0bycpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgZGF0YVRlc3RTdWJqID0gX3RoaXMkcHJvcHMyWydkYXRhLXRlc3Qtc3ViaiddLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgYXJlQWxsT3B0aW9uc1NlbGVjdGVkID0gX3RoaXMkcHJvcHMyLmFyZUFsbE9wdGlvbnNTZWxlY3RlZCxcbiAgICAgICAgY3VzdG9tT3B0aW9uVGV4dCA9IF90aGlzJHByb3BzMi5jdXN0b21PcHRpb25UZXh0LFxuICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wczIuZnVsbFdpZHRoLFxuICAgICAgICBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMyLmdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUsXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IF90aGlzJHByb3BzMi5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMi5pc0xvYWRpbmcsXG4gICAgICAgIGxpc3RSZWYgPSBfdGhpcyRwcm9wczIubGlzdFJlZixcbiAgICAgICAgbWF0Y2hpbmdPcHRpb25zID0gX3RoaXMkcHJvcHMyLm1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgb25DbG9zZUxpc3QgPSBfdGhpcyRwcm9wczIub25DbG9zZUxpc3QsXG4gICAgICAgIG9uQ3JlYXRlT3B0aW9uID0gX3RoaXMkcHJvcHMyLm9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHMyLm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgIG9uT3B0aW9uRW50ZXJLZXkgPSBfdGhpcyRwcm9wczIub25PcHRpb25FbnRlcktleSxcbiAgICAgICAgb25TY3JvbGwgPSBfdGhpcyRwcm9wczIub25TY3JvbGwsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczIub3B0aW9ucyxcbiAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHMyLnJlbmRlck9wdGlvbixcbiAgICAgICAgcm9vdElkID0gX3RoaXMkcHJvcHMyLnJvb3RJZCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHMyLnJvd0hlaWdodCxcbiAgICAgICAgc2Nyb2xsVG9JbmRleCA9IF90aGlzJHByb3BzMi5zY3JvbGxUb0luZGV4LFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzMi5zZWFyY2hWYWx1ZSxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMyLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMyLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgZGVsaW1pdGVyID0gX3RoaXMkcHJvcHMyLmRlbGltaXRlcixcbiAgICAgICAgdHJ1bmNhdGlvblByb3BzID0gX3RoaXMkcHJvcHMyLnRydW5jYXRpb25Qcm9wcyxcbiAgICAgICAgbGlzdGJveEFyaWFMYWJlbCA9IF90aGlzJHByb3BzMi5saXN0Ym94QXJpYUxhYmVsLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkMyk7XG4gICAgICB2YXIgZW1wdHlTdGF0ZUNvbnRlbnQ7XG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChFdWlGbGV4R3JvdXAsIHtcbiAgICAgICAgICBndXR0ZXJTaXplOiBcInNcIixcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICByZXNwb25zaXZlOiBmYWxzZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgICAgZ3JvdzogZmFsc2VcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgICAgIHNpemU6IFwibVwiXG4gICAgICAgIH0pKSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgICAgICAgIGdyb3c6IGZhbHNlXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3QubG9hZGluZ09wdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkxvYWRpbmcgb3B0aW9uc1wiXG4gICAgICAgIH0pKSk7XG4gICAgICB9IGVsc2UgaWYgKHNlYXJjaFZhbHVlICYmIG1hdGNoaW5nT3B0aW9ucyAmJiBtYXRjaGluZ09wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChvbkNyZWF0ZU9wdGlvbiAmJiBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKSB7XG4gICAgICAgICAgaWYgKGRlbGltaXRlciAmJiBzZWFyY2hWYWx1ZS5pbmNsdWRlcyhkZWxpbWl0ZXIpKSB7XG4gICAgICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2NvbnRlbnRXcmFwcGVyXCJcbiAgICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19lbXB0eVN0YXRlVGV4dFwiXG4gICAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5kZWxpbWl0ZXJNZXNzYWdlXCIsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IFwiQWRkIGVhY2ggaXRlbSBzZXBhcmF0ZWQgYnkge2RlbGltaXRlcn1cIixcbiAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIGRlbGltaXRlcilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLCBoaXRFbnRlckJhZGdlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkT3B0aW9uRm9yVmFsdWUgPSBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKHtcbiAgICAgICAgICAgICAgaXNDYXNlU2Vuc2l0aXZlOiBpc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uRm9yVmFsdWUpIHtcbiAgICAgICAgICAgICAgLy8gRGlzYWxsb3cgZHVwbGljYXRlIGN1c3RvbSBvcHRpb25zLlxuICAgICAgICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3QuYWxyZWFkeUFkZGVkXCIsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXCJ7bGFiZWx9IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWRcIixcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIHNlbGVjdGVkT3B0aW9uRm9yVmFsdWUubGFiZWwpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgaGlnaGxpZ2h0U2VhcmNoVmFsdWUgPSBmdW5jdGlvbiBoaWdobGlnaHRTZWFyY2hWYWx1ZSh0ZXh0LCBzZWFyY2hWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKC8oXFx7c2VhcmNoVmFsdWV9KS8sICdnaScpO1xuICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IHRleHQuc3BsaXQocmVnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19lbXB0eVN0YXRlVGV4dFwiXG4gICAgICAgICAgICAgICAgfSwgcGFydHMubWFwKGZ1bmN0aW9uIChwYXJ0LCBpZHgpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0Lm1hdGNoKHJlZykgPyBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBpZHhcbiAgICAgICAgICAgICAgICAgIH0sIHNlYXJjaFZhbHVlKSA6IHBhcnQ7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgICAgICAgICB9LCBjdXN0b21PcHRpb25UZXh0ID8gaGlnaGxpZ2h0U2VhcmNoVmFsdWUoY3VzdG9tT3B0aW9uVGV4dCwgc2VhcmNoVmFsdWUpIDogX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmNyZWF0ZUN1c3RvbU9wdGlvblwiLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiQWRkIHtzZWFyY2hWYWx1ZX0gYXMgYSBjdXN0b20gb3B0aW9uXCIsXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICBzZWFyY2hWYWx1ZTogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWFyY2hWYWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pKSwgaGl0RW50ZXJCYWRnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0Lm5vTWF0Y2hpbmdPcHRpb25zXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIntzZWFyY2hWYWx1ZX0gZG9lc24ndCBtYXRjaCBhbnkgb3B0aW9uc1wiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIHNlYXJjaFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0Lm5vQXZhaWxhYmxlT3B0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVGhlcmUgYXJlbid0IGFueSBvcHRpb25zIGF2YWlsYWJsZVwiXG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJlQWxsT3B0aW9uc1NlbGVjdGVkKSB7XG4gICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5hbGxPcHRpb25zU2VsZWN0ZWRcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIllvdSd2ZSBzZWxlY3RlZCBhbGwgYXZhaWxhYmxlIG9wdGlvbnNcIlxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICB2YXIgbnVtVmlzaWJsZU9wdGlvbnMgPSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIDwgNyA/IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggOiA3O1xuICAgICAgdmFyIGhlaWdodCA9IG51bVZpc2libGVPcHRpb25zICogKHJvd0hlaWdodCArIDEpOyAvLyBBZGQgb25lIGZvciB0aGUgYm9yZGVyXG5cbiAgICAgIC8vIGJvdW5kZWQgYnkgbWF4LWhlaWdodCBvZiAuZXVpQ29tYm9Cb3hPcHRpb25zTGlzdFxuICAgICAgdmFyIGJvdW5kZWRIZWlnaHQgPSBoZWlnaHQgPiBMSVNUX01BWF9IRUlHSFQgPyBMSVNUX01BWF9IRUlHSFQgOiBoZWlnaHQ7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZW5kZXJXaXRoRXVpU3R5bGVzTWVtb2l6ZXIsIG51bGwsIGZ1bmN0aW9uIChzdHlsZXNNZW1vaXplcikge1xuICAgICAgICB2YXIgc3R5bGVzID0gc3R5bGVzTWVtb2l6ZXIoZXVpQ29tYm9Cb3hPcHRpb25MaXN0U3R5bGVzKTtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNzczogc3R5bGVzLmV1aUNvbWJvQm94T3B0aW9uTGlzdCxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdFwiLFxuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogY2xhc3NOYW1lcygnY29tYm9Cb3hPcHRpb25zTGlzdCcsIGRhdGFUZXN0U3ViaiksXG4gICAgICAgICAgcmVmOiBsaXN0UmVmXG4gICAgICAgIH0sIHJlc3QpLCBlbXB0eVN0YXRlQ29udGVudCA/IF9fX0Vtb3Rpb25KU1goRXVpVGV4dCwge1xuICAgICAgICAgIHNpemU6IFwieHNcIixcbiAgICAgICAgICBjc3M6IHN0eWxlcy5ldWlDb21ib0JveE9wdGlvbnNMaXN0X19lbXB0eSxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdF9fZW1wdHlcIlxuICAgICAgICB9LCBlbXB0eVN0YXRlQ29udGVudCkgOiBfX19FbW90aW9uSlNYKEZpeGVkU2l6ZUxpc3QsIHtcbiAgICAgICAgICBjc3M6IHN0eWxlcy5ldWlDb21ib0JveE9wdGlvbkxpc3RfX3ZpcnR1YWxpemF0aW9uLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0X192aXJ0dWFsaXphdGlvblwiLFxuICAgICAgICAgIGhlaWdodDogYm91bmRlZEhlaWdodCxcbiAgICAgICAgICBvblNjcm9sbDogb25TY3JvbGwsXG4gICAgICAgICAgaXRlbUNvdW50OiBtYXRjaGluZ09wdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIGl0ZW1TaXplOiByb3dIZWlnaHQsXG4gICAgICAgICAgaXRlbURhdGE6IG1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgICByZWY6IF90aGlzMi5zZXRMaXN0UmVmLFxuICAgICAgICAgIGlubmVyRWxlbWVudFR5cGU6IF90aGlzMi5MaXN0SW5uZXJFbGVtZW50LFxuICAgICAgICAgIHdpZHRoOiBfdGhpczIuY29udGV4dFxuICAgICAgICB9LCBfdGhpczIuTGlzdFJvdykpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwgXCJjb250ZXh0VHlwZVwiLCBFdWlJbnB1dFBvcG92ZXJXaWR0aENvbnRleHQpO1xuX2RlZmluZVByb3BlcnR5KEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgJ2RhdGEtdGVzdC1zdWJqJzogJycsXG4gIHJvd0hlaWdodDogMjksXG4gIC8vIHJvdyBoZWlnaHQgb2YgZGVmYXVsdCBvcHRpb24gcmVuZGVyZXJcbiAgaXNDYXNlU2Vuc2l0aXZlOiBmYWxzZVxufSk7XG5FdWlDb21ib0JveE9wdGlvbnNMaXN0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGFjdGl2ZU9wdGlvbkluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBhcmVBbGxPcHRpb25zU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBsaXN0Ym94QXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjdXN0b20gdGV4dCBvcHRpb24uIFlvdSBjYW4gdXNlIGB7c2VhcmNoVmFsdWV9YCBpbnNpZGUgeW91ciBzdHJpbmcgdG8gYmV0dGVyIGN1c3RvbWl6ZSB5b3VyIHRleHQuXG4gICAgICogSXQgd29uJ3Qgc2hvdyBpZiB0aGVyZSdzIG5vIG9uQ3JlYXRlT3B0aW9uLlxuICAgICAqL1xuICBjdXN0b21PcHRpb25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcbiAgaXNDYXNlU2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgbGlzdFJlZjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBtYXRjaGluZ09wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgICAvKipcbiAgICAgICAgICogT3B0aW9uYWwgY3VzdG9tIHRvb2x0aXAgY29udGVudCBmb3IgdGhlIGJ1dHRvblxuICAgICAgICAgKi9cbiAgICAgIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIC8qKlxuICAgICAgICAgKiBPcHRpb25hbCBwcm9wcyB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nICoqW0V1aVRvb2xUaXBdKC8jL2Rpc3BsYXkvdG9vbHRpcCkqKlxuICAgICAgICAgKi9cbiAgICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gICAgfSkuaXNSZXF1aXJlZCksXG4gICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBjdXN0b20gdG9vbHRpcCBjb250ZW50IGZvciB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBwcm9wcyB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nICoqW0V1aVRvb2xUaXBdKC8jL2Rpc3BsYXkvdG9vbHRpcCkqKlxuICAgICAgICovXG4gICAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIG9uQ2xvc2VMaXN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkNyZWF0ZU9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uT3B0aW9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvbk9wdGlvbkVudGVyS2V5OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TY3JvbGw6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFycmF5IG9mIEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uIG9iamVjdHMuIFNlZSAjRXVpQ29tYm9Cb3hPcHRpb25PcHRpb25cbiAgICAgKi9cbiAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAgIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gICAgfSkuaXNSZXF1aXJlZCksXG4gICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuICByZW5kZXJPcHRpb246IFByb3BUeXBlcy5mdW5jLFxuICByb290SWQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgcm93SGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHNjcm9sbFRvSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIHNlYXJjaFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHNlbGVjdGVkT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAgIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gICAgfSkuaXNSZXF1aXJlZCksXG4gICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXNQbGFpblRleHQ6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgZGVsaW1pdGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInNlYXJjaFwiLCBcInN0cmljdFwiLCBcImhpZ2hsaWdodEFsbFwiLCBcImhhc1NjcmVlblJlYWRlckhlbHBUZXh0XCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEV1aU1hcmsgfSBmcm9tICcuLi9tYXJrJztcbmltcG9ydCB7IEhpZ2hsaWdodEFsbCB9IGZyb20gJy4vX2hpZ2hsaWdodF9hbGwnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0Rmlyc3QgfSBmcm9tICcuL19oaWdobGlnaHRfZmlyc3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSGlnaGxpZ2h0ID0gZnVuY3Rpb24gRXVpSGlnaGxpZ2h0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBzZWFyY2ggPSBfcmVmLnNlYXJjaCxcbiAgICBfcmVmJHN0cmljdCA9IF9yZWYuc3RyaWN0LFxuICAgIHN0cmljdCA9IF9yZWYkc3RyaWN0ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkc3RyaWN0LFxuICAgIF9yZWYkaGlnaGxpZ2h0QWxsID0gX3JlZi5oaWdobGlnaHRBbGwsXG4gICAgaGlnaGxpZ2h0QWxsID0gX3JlZiRoaWdobGlnaHRBbGwgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRoaWdobGlnaHRBbGwsXG4gICAgX3JlZiRoYXNTY3JlZW5SZWFkZXJIID0gX3JlZi5oYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCxcbiAgICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCA9IF9yZWYkaGFzU2NyZWVuUmVhZGVySCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkaGFzU2NyZWVuUmVhZGVySCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBoYXNTZWFyY2ggPSBzZWFyY2ggJiYgc2VhcmNoLmxlbmd0aCA+IDA7XG4gIHZhciBIaWdobGlnaHRDb21wb25lbnQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgQ29tcG9uZW50ID0gZnVuY3Rpb24gQ29tcG9uZW50KF9yZWYyKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbjtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aU1hcmssIHtcbiAgICAgICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQ6IGhhc1NjcmVlblJlYWRlckhlbHBUZXh0XG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfTtcbiAgICBDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgICAgY2hpbGRyZW46IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICAgIH07XG4gICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gJ19IaWdobGlnaHRDb21wb25lbnQnO1xuICAgIHJldHVybiBDb21wb25lbnQ7XG4gIH0sIFtoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dF0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0sIHJlc3QpLCBjaGlsZHJlbiAmJiBoYXNTZWFyY2ggPyBoaWdobGlnaHRBbGwgPyBfX19FbW90aW9uSlNYKEhpZ2hsaWdodEFsbCwge1xuICAgIHNlYXJjaFZhbHVlOiBzZWFyY2gsXG4gICAgc2VhcmNoU3ViamVjdDogY2hpbGRyZW4sXG4gICAgaXNTdHJpY3Q6IHN0cmljdCxcbiAgICBoaWdobGlnaHRDb21wb25lbnQ6IEhpZ2hsaWdodENvbXBvbmVudFxuICB9KSA6IF9fX0Vtb3Rpb25KU1goSGlnaGxpZ2h0Rmlyc3QsIHtcbiAgICBzZWFyY2hWYWx1ZTogc2VhcmNoLFxuICAgIHNlYXJjaFN1YmplY3Q6IGNoaWxkcmVuLFxuICAgIGlzU3RyaWN0OiBzdHJpY3QsXG4gICAgaGlnaGxpZ2h0Q29tcG9uZW50OiBIaWdobGlnaHRDb21wb25lbnRcbiAgfSkgOiBjaGlsZHJlbik7XG59O1xuRXVpSGlnaGxpZ2h0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogc3RyaW5nIHRvIGhpZ2hsaWdodCBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgICAqIFdoYXQgdG8gc2VhcmNoIGZvci5cbiAgICAgICAqXG4gICAgICAgKiBBbGxvd3MgcGFzc2luZyBhbiBhcnJheSBvZiBzdHJpbmdzIChzZWFyY2hpbmcgYnkgbXVsdGlwbGUgc2VwYXJhdGVcbiAgICAgICAqIHdvcmRzIG9yIHBocmFzZXMpICoqb25seSoqIGlmIGBoaWdobGlnaHRBbGxgIGlzIGFsc28gc2V0IHRvIGB0cnVlYC5cbiAgICAgICAqL1xuICBzZWFyY2g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICAgKiBTaG91bGQgdGhlIHNlYXJjaCBiZSBzdHJpY3Qgb3Igbm90XG4gICAgICAgKi9cbiAgc3RyaWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBTaG91bGQgaGlnaGxpZ2h0IGFsbCBtYXRjaGVzXG4gICAgICAgKi9cbiAgaGlnaGxpZ2h0QWxsOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaGFzU2NyZWVuUmVhZGVySGVscFRleHRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aU1hcmtTdHlsZXMsIGV1aU1hcmtTY3JlZW5SZWFkZXJTdHlsZXMgfSBmcm9tICcuL21hcmsuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aU1hcmsgPSBmdW5jdGlvbiBFdWlNYXJrKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJGhhc1NjcmVlblJlYWRlckggPSBfcmVmLmhhc1NjcmVlblJlYWRlckhlbHBUZXh0LFxuICAgIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0ID0gX3JlZiRoYXNTY3JlZW5SZWFkZXJIID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRoYXNTY3JlZW5SZWFkZXJILFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlNYXJrJywgY2xhc3NOYW1lKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aU1hcmtTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgaGlnaGxpZ2h0U3RhcnQgPSB1c2VFdWlJMThuKCdldWlNYXJrLmhpZ2hsaWdodFN0YXJ0JywgJ2hpZ2hsaWdodCBzdGFydCcpO1xuICB2YXIgaGlnaGxpZ2h0RW5kID0gdXNlRXVpSTE4bignZXVpTWFyay5oaWdobGlnaHRFbmQnLCAnaGlnaGxpZ2h0IGVuZCcpO1xuICB2YXIgc2NyZWVuUmVhZGVyU3R5bGVzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGV1aU1hcmtTY3JlZW5SZWFkZXJTdHlsZXMoaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVuZCk7XG4gIH0sIFtoaWdobGlnaHRTdGFydCwgaGlnaGxpZ2h0RW5kXSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aU1hcmssIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0ICYmIHNjcmVlblJlYWRlclN0eWxlcy5oYXNTY3JlZW5SZWFkZXJIZWxwVGV4dF07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwibWFya1wiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpTWFyay5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFNldCB0byBgZmFsc2VgIHRvIHJlbW92ZSB0aGUgQ1NTIDpiZWZvcmUgYW5kIDphZnRlclxuICAgICAgICogc2NyZWVuIHJlYWRlciBoZWxwZXIgdGV4dFxuICAgICAgICovXG4gIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmV4cG9ydCB2YXIgZXVpTWFya1N0eWxlcyA9IGZ1bmN0aW9uIGV1aU1hcmtTdHlsZXMoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlO1xuICAvLyBUT0RPOiBXYXMgJGV1aUZvY3VzQmFja2dyb3VuZENvbG9yXG4gIHZhciB0cmFuc3BhcmVuY3kgPSB7XG4gICAgTElHSFQ6IDAuMSxcbiAgICBEQVJLOiAwLjNcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBldWlNYXJrOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIHRyYW5zcGFyZW5jeVtjb2xvck1vZGVdKSwgXCI7Zm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0LmJvbGQsIFwiO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7O2xhYmVsOmV1aU1hcms7XCIpXG4gIH07XG59O1xuZXhwb3J0IHZhciBldWlNYXJrU2NyZWVuUmVhZGVyU3R5bGVzID0gZnVuY3Rpb24gZXVpTWFya1NjcmVlblJlYWRlclN0eWxlcyhoaWdobGlnaHRTdGFydCwgaGlnaGxpZ2h0RW5kKSB7XG4gIHJldHVybiB7XG4gICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQ6IC8qI19fUFVSRV9fKi9jc3MoXCImOjpiZWZvcmUsJjo6YWZ0ZXJ7XCIsIGV1aVNjcmVlblJlYWRlck9ubHkoKSwgXCI7fSY6OmJlZm9yZXtjb250ZW50OicgW1wiLCBoaWdobGlnaHRTdGFydCwgXCJdICc7fSY6OmFmdGVye2NvbnRlbnQ6JyBbXCIsIGhpZ2hsaWdodEVuZCwgXCJdICc7fTtsYWJlbDpoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dDtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoL2VzY2FwZVJlZ0V4cCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuLyoqXG4gKiBJbnRlcm5hbCBzdWJjb21wb25lbnQgd2l0aCBsb2dpYyBmb3IgaGlnaGxpZ2h0aW5nIGFsbCBvY2N1cnJlbmNlc1xuICogb2YgYSBzZWFyY2ggdmFsdWUgd2l0aGluIGEgc3ViamVjdFxuICpcbiAqIFVzZXMgcmVnZXggcmF0aGVyIHRoYW4gaW5kZXhPZi93aGlsZSBsb29wcyBmb3IgZWFzaWVyIGRldiBtYWludGFpbmFiaWxpdHlcbiAqL1xuZXhwb3J0IHZhciBIaWdobGlnaHRBbGwgPSBmdW5jdGlvbiBIaWdobGlnaHRBbGwoX3JlZikge1xuICB2YXIgc2VhcmNoU3ViamVjdCA9IF9yZWYuc2VhcmNoU3ViamVjdCxcbiAgICBfc2VhcmNoVmFsdWUgPSBfcmVmLnNlYXJjaFZhbHVlLFxuICAgIGlzU3RyaWN0ID0gX3JlZi5pc1N0cmljdCxcbiAgICBfcmVmJGhpZ2hsaWdodENvbXBvbmUgPSBfcmVmLmhpZ2hsaWdodENvbXBvbmVudCxcbiAgICBIaWdobGlnaHRDb21wb25lbnQgPSBfcmVmJGhpZ2hsaWdodENvbXBvbmUgPT09IHZvaWQgMCA/ICdtYXJrJyA6IF9yZWYkaGlnaGxpZ2h0Q29tcG9uZTtcbiAgdmFyIHNlYXJjaFZhbHVlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoX3NlYXJjaFZhbHVlKSA/IF9zZWFyY2hWYWx1ZS5tYXAoZXNjYXBlUmVnRXhwKS5qb2luKCd8JykgOiBlc2NhcGVSZWdFeHAoX3NlYXJjaFZhbHVlKTtcbiAgfSwgW19zZWFyY2hWYWx1ZV0pO1xuICB2YXIgY2h1bmtzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cChzZWFyY2hWYWx1ZSwgaXNTdHJpY3QgPyAnZycgOiAnZ2knKTtcbiAgICB2YXIgbWF0Y2hlcyA9IF90b0NvbnN1bWFibGVBcnJheShzZWFyY2hTdWJqZWN0Lm1hdGNoQWxsKHJlZ2V4KSkubWFwKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IG1hdGNoLmluZGV4IHx8IDAsXG4gICAgICAgIGVuZDogKG1hdGNoLmluZGV4IHx8IDApICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBmaWxsSW5DaHVua3MobWF0Y2hlcywgc2VhcmNoU3ViamVjdC5sZW5ndGgpO1xuICB9LCBbc2VhcmNoVmFsdWUsIHNlYXJjaFN1YmplY3QsIGlzU3RyaWN0XSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaHVua3MubWFwKGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHZhciBlbmQgPSBjaHVuay5lbmQsXG4gICAgICBoaWdobGlnaHQgPSBjaHVuay5oaWdobGlnaHQsXG4gICAgICBzdGFydCA9IGNodW5rLnN0YXJ0O1xuICAgIHZhciB2YWx1ZSA9IHNlYXJjaFN1YmplY3Quc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuICAgIHJldHVybiBoaWdobGlnaHQgPyBfX19FbW90aW9uSlNYKEhpZ2hsaWdodENvbXBvbmVudCwge1xuICAgICAga2V5OiBzdGFydFxuICAgIH0sIHZhbHVlKSA6IHZhbHVlO1xuICB9KSk7XG59O1xuXG4vKipcbiAqIENodW5rIHV0aWxpdHlcbiAqL1xuSGlnaGxpZ2h0QWxsLnByb3BUeXBlcyA9IHtcbiAgc2VhcmNoVmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgc2VhcmNoU3ViamVjdDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpc1N0cmljdDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaGlnaGxpZ2h0Q29tcG9uZW50OiBQcm9wVHlwZXMuYW55XG59O1xudmFyIGZpbGxJbkNodW5rcyA9IGZ1bmN0aW9uIGZpbGxJbkNodW5rcyhjaHVua3NUb0hpZ2hsaWdodCwgdG90YWxMZW5ndGgpIHtcbiAgdmFyIGFsbENodW5rcyA9IFtdO1xuICB2YXIgYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKHN0YXJ0LCBlbmQsIGhpZ2hsaWdodCkge1xuICAgIGlmIChlbmQgLSBzdGFydCA+IDApIHtcbiAgICAgIGFsbENodW5rcy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICBlbmQ6IGVuZCxcbiAgICAgICAgaGlnaGxpZ2h0OiBoaWdobGlnaHRcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgaWYgKGNodW5rc1RvSGlnaGxpZ2h0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGFwcGVuZCgwLCB0b3RhbExlbmd0aCwgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsYXN0SW5kZXggPSAwO1xuICAgIGNodW5rc1RvSGlnaGxpZ2h0LmZvckVhY2goZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICBhcHBlbmQobGFzdEluZGV4LCBjaHVuay5zdGFydCwgZmFsc2UpO1xuICAgICAgYXBwZW5kKGNodW5rLnN0YXJ0LCBjaHVuay5lbmQsIHRydWUpO1xuICAgICAgbGFzdEluZGV4ID0gY2h1bmsuZW5kO1xuICAgIH0pO1xuICAgIGFwcGVuZChsYXN0SW5kZXgsIHRvdGFsTGVuZ3RoLCBmYWxzZSk7XG4gIH1cbiAgcmV0dXJuIGFsbENodW5rcztcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuLyoqXG4gKiBJbnRlcm5hbCBzdWJjb21wb25lbnQgd2l0aCBsb2dpYyBmb3IgaGlnaGxpZ2h0aW5nIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2VcbiAqIG9mIGEgc2VhcmNoIHZhbHVlIHdpdGhpbiBhIHN1YmplY3RcbiAqXG4gKiBVc2VzIGluZGV4T2YgZm9yIHBlcmZvcm1hbmNlICh3aGljaCBkb2VzIG1hdHRlciBmb3IsIGUuZy4gRXVpU2VsZWN0YWJsZSBzZWFyY2hpbmcpXG4gKi9cbmV4cG9ydCB2YXIgSGlnaGxpZ2h0Rmlyc3QgPSBmdW5jdGlvbiBIaWdobGlnaHRGaXJzdChfcmVmKSB7XG4gIHZhciBzZWFyY2hTdWJqZWN0ID0gX3JlZi5zZWFyY2hTdWJqZWN0LFxuICAgIHNlYXJjaFZhbHVlID0gX3JlZi5zZWFyY2hWYWx1ZSxcbiAgICBpc1N0cmljdCA9IF9yZWYuaXNTdHJpY3QsXG4gICAgX3JlZiRoaWdobGlnaHRDb21wb25lID0gX3JlZi5oaWdobGlnaHRDb21wb25lbnQsXG4gICAgSGlnaGxpZ2h0Q29tcG9uZW50ID0gX3JlZiRoaWdobGlnaHRDb21wb25lID09PSB2b2lkIDAgPyAnbWFyaycgOiBfcmVmJGhpZ2hsaWdodENvbXBvbmU7XG4gIGlmIChBcnJheS5pc0FycmF5KHNlYXJjaFZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIG11bHRpcGxlIHNlYXJjaCBzdHJpbmdzIHdpdGhvdXQgYGhpZ2hsaWdodEFsbGAgZW5hYmxlZCcpO1xuICB9XG4gIHZhciBub3JtYWxpemVkU2VhcmNoU3ViamVjdCA9IGlzU3RyaWN0ID8gc2VhcmNoU3ViamVjdCA6IHNlYXJjaFN1YmplY3QudG9Mb3dlckNhc2UoKTtcbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IGlzU3RyaWN0ID8gc2VhcmNoVmFsdWUgOiBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICB2YXIgaW5kZXhPZk1hdGNoID0gbm9ybWFsaXplZFNlYXJjaFN1YmplY3QuaW5kZXhPZihub3JtYWxpemVkU2VhcmNoVmFsdWUpO1xuICBpZiAoaW5kZXhPZk1hdGNoID09PSAtMSkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBzZWFyY2hTdWJqZWN0KTtcbiAgfVxuICB2YXIgcHJlTWF0Y2ggPSBzZWFyY2hTdWJqZWN0LnN1YnN0cmluZygwLCBpbmRleE9mTWF0Y2gpO1xuICB2YXIgbWF0Y2ggPSBzZWFyY2hTdWJqZWN0LnN1YnN0cmluZyhpbmRleE9mTWF0Y2gsIGluZGV4T2ZNYXRjaCArIHNlYXJjaFZhbHVlLmxlbmd0aCk7XG4gIHZhciBwb3N0TWF0Y2ggPSBzZWFyY2hTdWJqZWN0LnN1YnN0cmluZyhpbmRleE9mTWF0Y2ggKyBzZWFyY2hWYWx1ZS5sZW5ndGgpO1xuICByZXR1cm4gKFxuICAgIC8vIE5vdGU6IFJlYWN0IDE2LzE3IHdpbGwgcmVuZGVyIGVtcHR5IHN0cmluZ3MgaW4gdGhlIERPTS4gVGhlXG4gICAgLy8gYHx8IHVuZGVmaW5lZGAgcHJldmVudHMgdGhpcyAmIGtlZXBzIHNuYXBzaG90cyB0aGUgc2FtZSBmb3IgYWxsIHZlcnNpb25zXG4gICAgX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgcHJlTWF0Y2ggfHwgdW5kZWZpbmVkLCBfX19FbW90aW9uSlNYKEhpZ2hsaWdodENvbXBvbmVudCwgbnVsbCwgbWF0Y2gpLCBwb3N0TWF0Y2ggfHwgdW5kZWZpbmVkKVxuICApO1xufTtcbkhpZ2hsaWdodEZpcnN0LnByb3BUeXBlcyA9IHtcbiAgc2VhcmNoVmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgc2VhcmNoU3ViamVjdDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpc1N0cmljdDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaGlnaGxpZ2h0Q29tcG9uZW50OiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGhlbWVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiY2hlY2tlZFwiLCBcImlzRm9jdXNlZFwiLCBcInNob3dJY29uc1wiLCBcInRvb2xUaXBDb250ZW50XCIsIFwidG9vbFRpcFByb3BzXCIsIFwic3R5bGVcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIGNyZWF0ZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgd2l0aEV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IGV1aUZpbHRlclNlbGVjdEl0ZW1TdHlsZXMgfSBmcm9tICcuL2ZpbHRlcl9zZWxlY3RfaXRlbS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciByZXNvbHZlSWNvbkFuZENvbG9yID0gZnVuY3Rpb24gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSB7XG4gIGlmICghY2hlY2tlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBpY29uOiAnZW1wdHknXG4gICAgfTtcbiAgfVxuICByZXR1cm4gY2hlY2tlZCA9PT0gJ29uJyA/IHtcbiAgICBpY29uOiAnY2hlY2snLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfSA6IHtcbiAgICBpY29uOiAnY3Jvc3MnLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfTtcbn07XG5cbi8qKlxuICogVE9ETzogVGhpcyBjb21wb25lbnQgc2hvdWxkIHJlbW92ZWQgaW4gZmF2b3Igb2YgRXVpU2VsZWN0YWJsZSB1c2FnZVxuICogb25jZSBFdWlDb21ib0JveCBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gZG9nZm9vZCBFdWlTZWxlY3RhYmxlLlxuICpcbiAqIEBkZXByZWNhdGVkIC0gVXNlIEV1aVNlbGVjdGFibGUgaW5zdGVhZFxuICovXG5leHBvcnQgdmFyIEV1aUZpbHRlclNlbGVjdEl0ZW1DbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MoKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aUZpbHRlclNlbGVjdEl0ZW1DbGFzcywgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYnV0dG9uUmVmXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0b29sdGlwUmVmXCIsIC8qI19fUFVSRV9fKi9jcmVhdGVSZWYoKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0YXRlXCIsIHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJmb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMuYnV0dG9uUmVmKSB7XG4gICAgICAgIF90aGlzLmJ1dHRvblJlZi5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0b2dnbGVUb29sVGlwXCIsIGZ1bmN0aW9uIChpc0ZvY3VzZWQpIHtcbiAgICAgIGlmIChpc0ZvY3VzZWQpIHtcbiAgICAgICAgdmFyIF90aGlzJHRvb2x0aXBSZWY7XG4gICAgICAgIChfdGhpcyR0b29sdGlwUmVmID0gX3RoaXMudG9vbHRpcFJlZikgPT09IG51bGwgfHwgX3RoaXMkdG9vbHRpcFJlZiA9PT0gdm9pZCAwIHx8IChfdGhpcyR0b29sdGlwUmVmID0gX3RoaXMkdG9vbHRpcFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdGhpcyR0b29sdGlwUmVmID09PSB2b2lkIDAgfHwgX3RoaXMkdG9vbHRpcFJlZi5zaG93VG9vbFRpcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF90aGlzJHRvb2x0aXBSZWYyO1xuICAgICAgICAoX3RoaXMkdG9vbHRpcFJlZjIgPSBfdGhpcy50b29sdGlwUmVmKSA9PT0gbnVsbCB8fCBfdGhpcyR0b29sdGlwUmVmMiA9PT0gdm9pZCAwIHx8IChfdGhpcyR0b29sdGlwUmVmMiA9IF90aGlzJHRvb2x0aXBSZWYyLmN1cnJlbnQpID09PSBudWxsIHx8IF90aGlzJHRvb2x0aXBSZWYyID09PSB2b2lkIDAgfHwgX3RoaXMkdG9vbHRpcFJlZjIuaGlkZVRvb2xUaXAoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaGFzRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLmhhc0ZvY3VzO1xuICAgIH0pO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpRmlsdGVyU2VsZWN0SXRlbUNsYXNzLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIHRoZW1lID0gX3RoaXMkcHJvcHMudGhlbWUsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5kaXNhYmxlZCxcbiAgICAgICAgY2hlY2tlZCA9IF90aGlzJHByb3BzLmNoZWNrZWQsXG4gICAgICAgIGlzRm9jdXNlZCA9IF90aGlzJHByb3BzLmlzRm9jdXNlZCxcbiAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHMuc2hvd0ljb25zLFxuICAgICAgICB0b29sVGlwQ29udGVudCA9IF90aGlzJHByb3BzLnRvb2xUaXBDb250ZW50LFxuICAgICAgICB0b29sVGlwUHJvcHMgPSBfdGhpcyRwcm9wcy50b29sVGlwUHJvcHMsXG4gICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHMuc3R5bGUsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgc3R5bGVzID0gZXVpRmlsdGVyU2VsZWN0SXRlbVN0eWxlcyh0aGVtZSk7XG4gICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlGaWx0ZXJTZWxlY3RJdGVtLCBpc0ZvY3VzZWQgJiYgc3R5bGVzLmlzRm9jdXNlZF07XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZpbHRlclNlbGVjdEl0ZW0nLCBjbGFzc05hbWUpO1xuICAgICAgdmFyIGhhc1Rvb2xUaXAgPVxuICAgICAgLy8gd2UncmUgdXNpbmcgaXNWYWxpZEVsZW1lbnQgaGVyZSBhcyBFdWlUb29sVGlwQW5jaG9yIHVzZXNcbiAgICAgIC8vIGNsb25lRWxlbWVudCB0byBlbmhhbmNlIHRoZSBlbGVtZW50IHdpdGggcmVxdWlyZWQgYXR0cmlidXRlc1xuICAgICAgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJiAhZGlzYWJsZWQgJiYgdG9vbFRpcENvbnRlbnQ7XG4gICAgICB2YXIgYW5jaG9yUHJvcHMgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoaGFzVG9vbFRpcCkge1xuICAgICAgICB2YXIgX3Rvb2xUaXBQcm9wcyRhbmNob3JQLCBfdG9vbFRpcFByb3BzJGFuY2hvclAyO1xuICAgICAgICB2YXIgYW5jaG9yU3R5bGVzID0gdG9vbFRpcFByb3BzICE9PSBudWxsICYmIHRvb2xUaXBQcm9wcyAhPT0gdm9pZCAwICYmIChfdG9vbFRpcFByb3BzJGFuY2hvclAgPSB0b29sVGlwUHJvcHMuYW5jaG9yUHJvcHMpICE9PSBudWxsICYmIF90b29sVGlwUHJvcHMkYW5jaG9yUCAhPT0gdm9pZCAwICYmIF90b29sVGlwUHJvcHMkYW5jaG9yUC5zdHlsZSA/IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdG9vbFRpcFByb3BzID09PSBudWxsIHx8IHRvb2xUaXBQcm9wcyA9PT0gdm9pZCAwIHx8IChfdG9vbFRpcFByb3BzJGFuY2hvclAyID0gdG9vbFRpcFByb3BzLmFuY2hvclByb3BzKSA9PT0gbnVsbCB8fCBfdG9vbFRpcFByb3BzJGFuY2hvclAyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdG9vbFRpcFByb3BzJGFuY2hvclAyLnN0eWxlKSwgc3R5bGUpIDogc3R5bGU7XG4gICAgICAgIGFuY2hvclByb3BzID0gdG9vbFRpcFByb3BzICE9PSBudWxsICYmIHRvb2xUaXBQcm9wcyAhPT0gdm9pZCAwICYmIHRvb2xUaXBQcm9wcy5hbmNob3JQcm9wcyA/IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdG9vbFRpcFByb3BzLmFuY2hvclByb3BzKSwge30sIHtcbiAgICAgICAgICBzdHlsZTogYW5jaG9yU3R5bGVzXG4gICAgICAgIH0pIDoge1xuICAgICAgICAgIHN0eWxlOiBzdHlsZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRvZ2dsZVRvb2xUaXAoaXNGb2N1c2VkICE9PSBudWxsICYmIGlzRm9jdXNlZCAhPT0gdm9pZCAwID8gaXNGb2N1c2VkIDogZmFsc2UpO1xuICAgICAgfVxuICAgICAgdmFyIGljb25Ob2RlO1xuICAgICAgaWYgKHNob3dJY29ucykge1xuICAgICAgICB2YXIgX3Jlc29sdmVJY29uQW5kQ29sb3IgPSByZXNvbHZlSWNvbkFuZENvbG9yKGNoZWNrZWQpLFxuICAgICAgICAgIGljb24gPSBfcmVzb2x2ZUljb25BbmRDb2xvci5pY29uLFxuICAgICAgICAgIGNvbG9yID0gX3Jlc29sdmVJY29uQW5kQ29sb3IuY29sb3I7XG4gICAgICAgIGljb25Ob2RlID0gX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgICAgICAgIGdyb3c6IGZhbHNlXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgICB0eXBlOiBpY29uXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIHZhciBvcHRpb25JdGVtID0gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKF9yZWYpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLmJ1dHRvblJlZiA9IF9yZWY7XG4gICAgICAgIH0sXG4gICAgICAgIHJvbGU6IFwib3B0aW9uXCIsXG4gICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiBpc0ZvY3VzZWQsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IGRpc2FibGVkLFxuICAgICAgICBzdHlsZTogIWhhc1Rvb2xUaXAgPyBzdHlsZSA6IHVuZGVmaW5lZFxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgIGd1dHRlclNpemU6IFwic1wiLFxuICAgICAgICBjb21wb25lbnQ6IFwic3BhblwiLFxuICAgICAgICByZXNwb25zaXZlOiBmYWxzZVxuICAgICAgfSwgaWNvbk5vZGUsIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZpbHRlclNlbGVjdEl0ZW1fX2NvbnRlbnQgZXVpLXRleHRUcnVuY2F0ZVwiLFxuICAgICAgICBjb21wb25lbnQ6IFwic3BhblwiXG4gICAgICB9LCBjaGlsZHJlbikpKTtcbiAgICAgIHJldHVybiBoYXNUb29sVGlwID8gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogdGhpcy50b29sdGlwUmVmLFxuICAgICAgICBkaXNwbGF5OiBcImJsb2NrXCIsXG4gICAgICAgIGNvbnRlbnQ6IHRvb2xUaXBDb250ZW50LFxuICAgICAgICBwb3NpdGlvbjogXCJsZWZ0XCJcbiAgICAgIH0sIHRvb2xUaXBQcm9wcywge1xuICAgICAgICBhbmNob3JQcm9wczogYW5jaG9yUHJvcHNcbiAgICAgIH0pLCBvcHRpb25JdGVtKSA6IG9wdGlvbkl0ZW07XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgLSBVc2UgRXVpU2VsZWN0YWJsZSBpbnN0ZWFkXG4gKi9cbl9kZWZpbmVQcm9wZXJ0eShFdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgc2hvd0ljb25zOiB0cnVlXG59KTtcbkV1aUZpbHRlclNlbGVjdEl0ZW1DbGFzcy5wcm9wVHlwZXMgPSB7XG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5vbmVPZihbXCJvblwiLCBcIm9mZlwiXSksXG4gIHNob3dJY29uczogUHJvcFR5cGVzLmJvb2wsXG4gIGlzRm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTtcbmV4cG9ydCB2YXIgRXVpRmlsdGVyU2VsZWN0SXRlbSA9IHdpdGhFdWlUaGVtZShFdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MpOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxTaG9ydGhhbmRDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MsIGV1aUZvbnRTaXplIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlGaWx0ZXJTZWxlY3RJdGVtU3R5bGVzID0gZnVuY3Rpb24gZXVpRmlsdGVyU2VsZWN0SXRlbVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgZm9jdXNTdHlsZXMgPSBcIlxcbiAgICBjb2xvcjogXCIuY29uY2F0KGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCBcIjtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdChldWlUaGVtZS5mb2N1cy5iYWNrZ3JvdW5kQ29sb3IsIFwiO1xcbiAgICBvdXRsaW5lLW9mZnNldDogLVwiKS5jb25jYXQoZXVpVGhlbWUuZm9jdXMud2lkdGgsIFwiO1xcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG5cXG4gICAgJjpkaXNhYmxlZCB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdCh0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWQsIDAuMSksIFwiO1xcbiAgICB9XFxuICBcIik7XG4gIHJldHVybiB7XG4gICAgZXVpRmlsdGVyU2VsZWN0SXRlbTogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6YmxvY2s7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgXCIsIGxvZ2ljYWxTaG9ydGhhbmRDU1MoJ3BhZGRpbmcnLCBcIlwiLmNvbmNhdChldWlUaGVtZS5zaXplLnhzLCBcIiBcIikuY29uY2F0KGV1aVRoZW1lLnNpemUubSkpLCBcIiBcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIiBcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIiBjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO1wiLCBsb2dpY2FsQ1NTKCdib3JkZXItYm90dG9tJywgXCJcIi5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIFwiKS5jb25jYXQoZXVpVGhlbWUuY29sb3JzLmxpZ2h0ZXN0U2hhZGUpKSwgXCIgJjpob3ZlcntjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30mOmZvY3Vze1wiLCBmb2N1c1N0eWxlcywgXCI7fSY6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0LCBcIjt9O2xhYmVsOmV1aUZpbHRlclNlbGVjdEl0ZW07XCIpLFxuICAgIGlzRm9jdXNlZDogLyojX19QVVJFX18qL2Nzcyhmb2N1c1N0eWxlcywgXCI7O2xhYmVsOmlzRm9jdXNlZDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ3aWR0aFwiLCBcIm9uUmVzaXplXCJdLFxuICBfZXhjbHVkZWQyID0gW1wid2lkdGhcIiwgXCJjaGlsZHJlblwiLCBcInRleHRcIiwgXCJ0cnVuY2F0aW9uXCIsIFwidHJ1bmNhdGlvbk9mZnNldFwiLCBcInRydW5jYXRpb25Qb3NpdGlvblwiLCBcImVsbGlwc2lzXCIsIFwiY2FsY3VsYXRpb25EZWxheU1zXCIsIFwiY29udGFpbmVyUmVmXCIsIFwiY2xhc3NOYW1lXCJdLFxuICBfZXhjbHVkZWQzID0gW1wib25SZXNpemVcIl07XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VDb21iaW5lZFJlZnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlSZXNpemVPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyL3Jlc2l6ZV9vYnNlcnZlcic7XG5pbXBvcnQgeyBUcnVuY2F0aW9uVXRpbHMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGV1aVRleHRUcnVuY2F0ZVN0eWxlcyBhcyBzdHlsZXMgfSBmcm9tICcuL3RleHRfdHJ1bmNhdGUuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgVFJVTkNBVElPTl9UWVBFUyA9IFsnZW5kJywgJ3N0YXJ0JywgJ3N0YXJ0RW5kJywgJ21pZGRsZSddO1xuZXhwb3J0IHZhciBFdWlUZXh0VHJ1bmNhdGUgPSBmdW5jdGlvbiBFdWlUZXh0VHJ1bmNhdGUoX3JlZikge1xuICB2YXIgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgIG9uUmVzaXplID0gX3JlZi5vblJlc2l6ZSxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gd2lkdGggIT0gbnVsbCA/IF9fX0Vtb3Rpb25KU1goRXVpVGV4dFRydW5jYXRlV2l0aFdpZHRoLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IHdpZHRoXG4gIH0sIHByb3BzKSkgOiBfX19FbW90aW9uSlNYKEV1aVRleHRUcnVuY2F0ZVdpdGhSZXNpemVPYnNlcnZlciwgX2V4dGVuZHMoe1xuICAgIG9uUmVzaXplOiBvblJlc2l6ZVxuICB9LCBwcm9wcykpO1xufTtcbkV1aVRleHRUcnVuY2F0ZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFRoZSBmdWxsIHRleHQgc3RyaW5nIHRvIHRydW5jYXRlXG4gICAgICAgKi9cbiAgdGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgICAqIFRoZSB0cnVuY2F0aW9uIHR5cGUgZGVzaXJlZC4gRGV0ZXJtaW5lcyB3aGVyZSB0aGUgZWxsaXBzZXMgYXJlIHBsYWNlZC5cbiAgICAgICAqL1xuICB0cnVuY2F0aW9uOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFRoaXMgcHJvcCAqKm9ubHkqKiBhcHBsaWVzIHRvIHRoZSBgc3RhcnRgIGFuZCBgZW5kYCB0cnVuY2F0aW9uIHR5cGVzLlxuICAgICAgICogSXQgYWxsb3dzIHByZXNlcnZpbmcgYSBjZXJ0YWluIG51bWJlciBvZiBjaGFyYWN0ZXJzIG9mIGVpdGhlciB0aGVcbiAgICAgICAqIHN0YXJ0aW5nIG9yIGVuZGluZyB0ZXh0LlxuICAgICAgICpcbiAgICAgICAqIElmIHRoZSBwYXNzZWQgb2Zmc2V0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgdGV4dCBsZW5ndGgsXG4gICAgICAgKiB0aGUgb2Zmc2V0IHdpbGwgYmUgaWdub3JlZC5cbiAgICAgICAqL1xuICB0cnVuY2F0aW9uT2Zmc2V0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICAgICAqIFRoaXMgcHJvcCAqKm9ubHkqKiBhcHBsaWVzIHRvIHRoZSBgc3RhcnRFbmRgIHRydW5jYXRpb24gdHlwZS5cbiAgICAgICAqIEl0IGFsbG93cyBjdXN0b21pemluZyB0aGUgYW5jaG9yIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5ZWQgdGV4dCxcbiAgICAgICAqIHdoaWNoIG90aGVyd2lzZSBkZWZhdWx0cyB0byB0aGUgbWlkZGxlIG9mIHRoZSB0ZXh0IHN0cmluZy5cbiAgICAgICAqXG4gICAgICAgKiBUaGUgcHJpbWFyeSB1c2UgY2FzZSBmb3IgdGhpcyBwcm9wIGZvciBpcyBzZWFyY2ggaGlnaGxpZ2h0aW5nIC0gZS5nLiwgaWZcbiAgICAgICAqIGEgdXNlciBzZWFyY2hlcyBmb3IgYSBzcGVjaWZpYyB3b3JkIGluIHRoZSB0ZXh0LCBwYXNzIHRoZSBpbmRleCBvZiB0aGF0XG4gICAgICAgKiBmb3VuZCB3b3JkIHRvIGVuc3VyZSBpdCBpcyBhbHdheXMgdmlzaWJsZS5cbiAgICAgICAqXG4gICAgICAgKiBUaGlzIGJlaGF2aW9yIHdpbGwgaW50ZWxsaWdlbnRseSBkZXRlY3Qgd2hlbiBwb3NpdGlvbnMgYXJlIGNsb3NlIHRvIHRoZSBzdGFydFxuICAgICAgICogb3IgZW5kIG9mIHRoZSB0ZXh0LCBhbmQgb21pdCBsZWFkaW5nIG9yIHRyYWlsaW5nIGVsbGlwc2VzIHdoZW4gbmVjZXNzYXJ5LlxuICAgICAgICogSWYgdGhlIHBhc3NlZCBwb3NpdGlvbiBpcyBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIHRleHQgbGVuZ3RoLFxuICAgICAgICogdGhlIHRydW5jYXRpb24gd2lsbCBzaW1wbHkgZGVmYXVsdCB0byBgc3RhcnRgIGluc3RlYWQuXG4gICAgICAgKi9cbiAgdHJ1bmNhdGlvblBvc2l0aW9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICAgICAqIERlZmF1bHRzIHRvIHRoZSBob3Jpem9udGFsIGVsbGlwc2lzIGNoYXJhY3Rlci5cbiAgICAgICAqIENhbiBiZSBvcHRpb25hbGx5IGNvbmZpZ3VyZWQgdG8gdXNlIG90aGVyIHB1bmN0dWF0aW9uLFxuICAgICAgICogZS5nLiBzcGFjZXMsIGJyYWNrZXRzLCBoeXBoZW5zLCBhc3Rlcmlza3MsIGV0Yy5cbiAgICAgICAqL1xuICBlbGxpcHNpczogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICAgKiBCeSBkZWZhdWx0LCBFdWlUZXh0VHJ1bmNhdGUgd2lsbCByZW5kZXIgYSByZXNpemUgb2JzZXJ2ZXIgdG8gZGV0ZWN0IHRoZVxuICAgICAgICogYXZhaWxhYmxlIHdpZHRoIGl0IGhhcy4gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgKGUuZy4gbXVsdGlwbGUgdHJ1bmNhdGVkXG4gICAgICAgKiB0ZXh0IGl0ZW1zIHdpdGhpbiB0aGUgc2FtZSBjb250YWluZXIpLCB5b3UgbWF5IG9wdCB0byBwYXNzIGluIHlvdXIgb3duXG4gICAgICAgKiBjb250YWluZXIgd2lkdGgsIHdoaWNoIHdpbGwgc2tpcCBpbml0aWFsaXppbmcgYSByZXNpemUgb2JzZXJ2ZXIuXG4gICAgICAgKi9cbiAgd2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgICAgICogT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCBmaXJlcyB3aGVuIHRoZSBkZWZhdWx0IHJlc2l6ZXIgb2JzZXJ2ZXIgYm90aCBtb3VudHMgYW5kXG4gICAgICAgKiByZWdpc3RlcnMgYSBzaXplIGNoYW5nZS4gVGhpcyBjYWxsYmFjayB3aWxsICoqbm90KiogZmlyZSBpZiBgd2lkdGhgIGlzIHBhc3NlZC5cbiAgICAgICAqL1xuICBvblJlc2l6ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAgICogQnkgZGVmYXVsdCwgRXVpVGV4dFRydW5jYXRlIHdpbGwgcmVuZGVyIHRoZSB0cnVuY2F0ZWQgc3RyaW5nIGRpcmVjdGx5LlxuICAgICAgICogWW91IGNhbiBvcHRpb25hbGx5IHBhc3MgYSByZW5kZXIgcHJvcCBmdW5jdGlvbiB0byB0aGUgY29tcG9uZW50LCB3aGljaFxuICAgICAgICogYWxsb3dzIGZvciBtb3JlIGZsZXhpYmxlIHRleHQgcmVuZGVyaW5nLCBlLmcuIGFkZGluZyBjdXN0b20gbWFya3VwXG4gICAgICAgKiBvciBoaWdobGlnaHRpbmdcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAgICogRm9yIHNvbWUgZWRnZSBjYXNlIHNjZW5hcmlvcywgRXVpVGV4dFRydW5jYXRlJ3MgY2FsY3VsYXRpb25zIG1heSBiZSBvZmYgdW50aWxcbiAgICAgICAqIGZvbnRzIGFyZSBkb25lIGxvYWRpbmcgb3IgbGF5b3V0IGlzIGRvbmUgc2hpZnRpbmcgb3Igc2V0dGxpbmcuIEFkZGluZyBhIGRlbGF5XG4gICAgICAgKiBtYXkgaGVscCByZXNvbHZlIGFueSByZW5kZXJpbmcgaXNzdWVzLlxuICAgICAgICovXG4gIGNhbGN1bGF0aW9uRGVsYXlNczogUHJvcFR5cGVzLm51bWJlclxufTtcbnZhciBFdWlUZXh0VHJ1bmNhdGVXaXRoV2lkdGggPSBmdW5jdGlvbiBFdWlUZXh0VHJ1bmNhdGVXaXRoV2lkdGgoX3JlZjIpIHtcbiAgdmFyIHdpZHRoID0gX3JlZjIud2lkdGgsXG4gICAgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICB0ZXh0ID0gX3JlZjIudGV4dCxcbiAgICBfcmVmMiR0cnVuY2F0aW9uID0gX3JlZjIudHJ1bmNhdGlvbixcbiAgICBfdHJ1bmNhdGlvbiA9IF9yZWYyJHRydW5jYXRpb24gPT09IHZvaWQgMCA/ICdlbmQnIDogX3JlZjIkdHJ1bmNhdGlvbixcbiAgICBfcmVmMiR0cnVuY2F0aW9uT2Zmc2UgPSBfcmVmMi50cnVuY2F0aW9uT2Zmc2V0LFxuICAgIF90cnVuY2F0aW9uT2Zmc2V0ID0gX3JlZjIkdHJ1bmNhdGlvbk9mZnNlID09PSB2b2lkIDAgPyAwIDogX3JlZjIkdHJ1bmNhdGlvbk9mZnNlLFxuICAgIHRydW5jYXRpb25Qb3NpdGlvbiA9IF9yZWYyLnRydW5jYXRpb25Qb3NpdGlvbixcbiAgICBfcmVmMiRlbGxpcHNpcyA9IF9yZWYyLmVsbGlwc2lzLFxuICAgIGVsbGlwc2lzID0gX3JlZjIkZWxsaXBzaXMgPT09IHZvaWQgMCA/ICdcdTIwMjYnIDogX3JlZjIkZWxsaXBzaXMsXG4gICAgY2FsY3VsYXRpb25EZWxheU1zID0gX3JlZjIuY2FsY3VsYXRpb25EZWxheU1zLFxuICAgIGNvbnRhaW5lclJlZiA9IF9yZWYyLmNvbnRhaW5lclJlZixcbiAgICBjbGFzc05hbWUgPSBfcmVmMi5jbGFzc05hbWUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgX2V4Y2x1ZGVkMik7XG4gIC8vIE5vdGU6IFRoaXMgbmVlZHMgdG8gYmUgYSBzdGF0ZSBhbmQgbm90IGEgcmVmIHRvIHRyaWdnZXIgYSByZXJlbmRlciBvbiBtb3VudFxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgY29udGFpbmVyRWwgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldENvbnRhaW5lckVsID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIHJlZnMgPSB1c2VDb21iaW5lZFJlZnMoW3NldENvbnRhaW5lckVsLCBjb250YWluZXJSZWZdKTtcblxuICAvLyBJZiBuZWNlc3NhcnksIHdhaXQgYSB0aWNrIG9uIG1vdW50IGJlZm9yZSB0cnVuY2F0aW5nXG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUoIWNhbGN1bGF0aW9uRGVsYXlNcyksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIHJlYWR5ID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRSZWFkeSA9IF91c2VTdGF0ZTRbMV07XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNhbGN1bGF0aW9uRGVsYXlNcykge1xuICAgICAgdmFyIHRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNldFJlYWR5KHRydWUpO1xuICAgICAgfSwgY2FsY3VsYXRpb25EZWxheU1zKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2NhbGN1bGF0aW9uRGVsYXlNc10pO1xuXG4gIC8vIEhhbmRsZSBleGNlcHRpb25zIHdoZXJlIHdlIG5lZWQgdG8gb3ZlcnJpZGUgdGhlIHBhc3NlZCBwcm9wc1xuICB2YXIgX3VzZU1lbW8gPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0cnVuY2F0aW9uID0gX3RydW5jYXRpb247XG4gICAgICB2YXIgdHJ1bmNhdGlvbk9mZnNldCA9IDA7XG4gICAgICBpZiAoX3RydW5jYXRpb24gPT09ICdlbmQnIHx8IF90cnVuY2F0aW9uID09PSAnc3RhcnQnKSB7XG4gICAgICAgIGlmICgwIDwgX3RydW5jYXRpb25PZmZzZXQgJiYgX3RydW5jYXRpb25PZmZzZXQgPCB0ZXh0Lmxlbmd0aCkge1xuICAgICAgICAgIHRydW5jYXRpb25PZmZzZXQgPSBfdHJ1bmNhdGlvbk9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChfdHJ1bmNhdGlvbiA9PT0gJ3N0YXJ0RW5kJyAmJiB0cnVuY2F0aW9uUG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgICBpZiAodHJ1bmNhdGlvblBvc2l0aW9uIDw9IDApIHtcbiAgICAgICAgICB0cnVuY2F0aW9uID0gJ2VuZCc7XG4gICAgICAgIH0gZWxzZSBpZiAodHJ1bmNhdGlvblBvc2l0aW9uID49IHRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgdHJ1bmNhdGlvbiA9ICdzdGFydCc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRydW5jYXRpb246IHRydW5jYXRpb24sXG4gICAgICAgIHRydW5jYXRpb25PZmZzZXQ6IHRydW5jYXRpb25PZmZzZXRcbiAgICAgIH07XG4gICAgfSwgW190cnVuY2F0aW9uLCBfdHJ1bmNhdGlvbk9mZnNldCwgdHJ1bmNhdGlvblBvc2l0aW9uLCB0ZXh0Lmxlbmd0aF0pLFxuICAgIHRydW5jYXRpb24gPSBfdXNlTWVtby50cnVuY2F0aW9uLFxuICAgIHRydW5jYXRpb25PZmZzZXQgPSBfdXNlTWVtby50cnVuY2F0aW9uT2Zmc2V0O1xuICB2YXIgdHJ1bmNhdGVkVGV4dCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciB0cnVuY2F0ZWRUZXh0ID0gJyc7XG4gICAgaWYgKCFyZWFkeSB8fCAhY29udGFpbmVyRWwpIHJldHVybiB0ZXh0O1xuICAgIGlmICghd2lkdGgpIHJldHVybiB0cnVuY2F0ZWRUZXh0O1xuICAgIHZhciB1dGlscyA9IG5ldyBUcnVuY2F0aW9uVXRpbHMoe1xuICAgICAgZnVsbFRleHQ6IHRleHQsXG4gICAgICBlbGxpcHNpczogZWxsaXBzaXMsXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lckVsLFxuICAgICAgYXZhaWxhYmxlV2lkdGg6IHdpZHRoXG4gICAgfSk7XG4gICAgaWYgKHV0aWxzLmNoZWNrSWZUcnVuY2F0aW9uSXNOZWVkZWQoKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRydW5jYXRlZFRleHQgPSB0ZXh0O1xuICAgIH0gZWxzZSBpZiAodXRpbHMuY2hlY2tTdWZmaWNpZW50RWxsaXBzaXNXaWR0aCh0cnVuY2F0aW9uKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRydW5jYXRlZFRleHQgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoICh0cnVuY2F0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IHV0aWxzLnRydW5jYXRlRW5kKHRydW5jYXRpb25PZmZzZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IHV0aWxzLnRydW5jYXRlU3RhcnQodHJ1bmNhdGlvbk9mZnNldCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N0YXJ0RW5kJzpcbiAgICAgICAgICBpZiAodHJ1bmNhdGlvblBvc2l0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIHRydW5jYXRlZFRleHQgPSB1dGlscy50cnVuY2F0ZVN0YXJ0RW5kQXRNaWRkbGUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IHV0aWxzLnRydW5jYXRlU3RhcnRFbmRBdFBvc2l0aW9uKHRydW5jYXRpb25Qb3NpdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICAgIHRydW5jYXRlZFRleHQgPSB1dGlscy50cnVuY2F0ZU1pZGRsZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1bmNhdGVkVGV4dDtcbiAgfSwgW3JlYWR5LCB3aWR0aCwgdGV4dCwgdHJ1bmNhdGlvbiwgdHJ1bmNhdGlvbk9mZnNldCwgdHJ1bmNhdGlvblBvc2l0aW9uLCBlbGxpcHNpcywgY29udGFpbmVyRWxdKTtcbiAgdmFyIGlzVHJ1bmNhdGluZyA9IHRydW5jYXRlZFRleHQgIT09IHRleHQ7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aVRleHRUcnVuY2F0ZScsIGNsYXNzTmFtZSksXG4gICAgY3NzOiBzdHlsZXMuZXVpVGV4dFRydW5jYXRlLFxuICAgIHJlZjogcmVmcyxcbiAgICB0aXRsZTogaXNUcnVuY2F0aW5nID8gdGV4dCA6IHVuZGVmaW5lZFxuICB9LCByZXN0KSwgaXNUcnVuY2F0aW5nID8gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUZXh0VHJ1bmNhdGVfX3RydW5jYXRlZFRleHRcIixcbiAgICBjc3M6IHN0eWxlcy5ldWlUZXh0VHJ1bmNhdGVfX3RydW5jYXRlZFRleHQsXG4gICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0cnVuY2F0ZWRUZXh0XCJcbiAgfSwgY2hpbGRyZW4gPyBjaGlsZHJlbih0cnVuY2F0ZWRUZXh0KSA6IHRydW5jYXRlZFRleHQpLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRleHRUcnVuY2F0ZV9fZnVsbFRleHRcIixcbiAgICBjc3M6IHN0eWxlcy5ldWlUZXh0VHJ1bmNhdGVfX2Z1bGxUZXh0LFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJmdWxsVGV4dFwiXG4gIH0sIHRleHQpKSA6IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGV4dFRydW5jYXRlX19mdWxsVGV4dFwiLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJmdWxsVGV4dFwiXG4gIH0sIGNoaWxkcmVuID8gY2hpbGRyZW4odGV4dCkgOiB0ZXh0KSk7XG59O1xuRXVpVGV4dFRydW5jYXRlV2l0aFdpZHRoLnByb3BUeXBlcyA9IHtcbiAgd2lkdGg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgY29udGFpbmVyUmVmOiBQcm9wVHlwZXMuYW55XG59O1xudmFyIEV1aVRleHRUcnVuY2F0ZVdpdGhSZXNpemVPYnNlcnZlciA9IGZ1bmN0aW9uIEV1aVRleHRUcnVuY2F0ZVdpdGhSZXNpemVPYnNlcnZlcihfcmVmMykge1xuICB2YXIgX29uUmVzaXplID0gX3JlZjMub25SZXNpemUsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjMsIF9leGNsdWRlZDMpO1xuICB2YXIgX3VzZVN0YXRlNSA9IHVzZVN0YXRlKDApLFxuICAgIF91c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU1LCAyKSxcbiAgICB3aWR0aCA9IF91c2VTdGF0ZTZbMF0sXG4gICAgc2V0V2lkdGggPSBfdXNlU3RhdGU2WzFdO1xuICB2YXIgb25SZXNpemUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICB2YXIgd2lkdGggPSBfcmVmNC53aWR0aDtcbiAgICBzZXRXaWR0aCh3aWR0aCk7XG4gICAgX29uUmVzaXplID09PSBudWxsIHx8IF9vblJlc2l6ZSA9PT0gdm9pZCAwIHx8IF9vblJlc2l6ZSh3aWR0aCk7XG4gIH0sIFtfb25SZXNpemVdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUmVzaXplT2JzZXJ2ZXIsIHtcbiAgICBvblJlc2l6ZTogb25SZXNpemVcbiAgfSwgZnVuY3Rpb24gKHJlZikge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRleHRUcnVuY2F0ZVdpdGhXaWR0aCwgX2V4dGVuZHMoe1xuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgY29udGFpbmVyUmVmOiByZWZcbiAgICB9LCBwcm9wcywge1xuICAgICAgXCJkYXRhLXJlc2l6ZS1vYnNlcnZlclwiOiBcInRydWVcIlxuICAgIH0pKTtcbiAgfSk7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiZnVsbFRleHRcIiwgXCJlbGxpcHNpc1wiLCBcImF2YWlsYWJsZVdpZHRoXCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXQoKSB7IHJldHVybiBfZ2V0ID0gXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgUmVmbGVjdCAmJiBSZWZsZWN0LmdldCA/IFJlZmxlY3QuZ2V0LmJpbmQoKSA6IGZ1bmN0aW9uIChlLCB0LCByKSB7IHZhciBwID0gX3N1cGVyUHJvcEJhc2UoZSwgdCk7IGlmIChwKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwLCB0KTsgcmV0dXJuIG4uZ2V0ID8gbi5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoIDwgMyA/IGUgOiByKSA6IG4udmFsdWU7IH0gfSwgX2dldC5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfc3VwZXJQcm9wQmFzZSh0LCBvKSB7IGZvciAoOyAhe30uaGFzT3duUHJvcGVydHkuY2FsbCh0LCBvKSAmJiBudWxsICE9PSAodCA9IF9nZXRQcm90b3R5cGVPZih0KSk7KTsgcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgQ2FudmFzVGV4dFV0aWxzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FudmFzJztcbi8qKlxuICogVXRpbGl0aWVzIGZvciB0cnVuY2F0aW5nIHR5cGVzIGF0IHZhcmlvdXMgcG9zaXRpb25zLCBhcyB3ZWxsIGFzXG4gKiBkZXRlcm1pbmluZyB3aGV0aGVyIHRydW5jYXRpb24gaXMgcG9zc2libGUgb3IgZXZlbiBuZWNlc3NhcnkuXG4gKi9cbmV4cG9ydCB2YXIgVHJ1bmNhdGlvblV0aWxzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ2FudmFzVGV4dFV0aWxzKSB7XG4gIGZ1bmN0aW9uIFRydW5jYXRpb25VdGlscyhfcmVmKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIHZhciBmdWxsVGV4dCA9IF9yZWYuZnVsbFRleHQsXG4gICAgICBlbGxpcHNpcyA9IF9yZWYuZWxsaXBzaXMsXG4gICAgICBfYXZhaWxhYmxlV2lkdGggPSBfcmVmLmF2YWlsYWJsZVdpZHRoLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcnVuY2F0aW9uVXRpbHMpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBUcnVuY2F0aW9uVXRpbHMsIFtyZXN0XSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImZ1bGxUZXh0XCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImVsbGlwc2lzXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImF2YWlsYWJsZVdpZHRoXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogUGVyZm9ybWFuY2UgdXRpbGl0aWVzXG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImRlYnVnUGVyZm9ybWFuY2VcIiwgZmFsc2UpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJkZWJ1Z0NvdW50ZXJcIiwgMCk7XG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdXRpbHMgZm9yIGNhbGN1bGF0aW5nIGEgcmF0aW8gYmFzZWQgb24gdGhlIHBhc3NlZCBhdmFpbGFibGUgd2lkdGhcbiAgICAgKiB2cyB0aGUgZnVsbCB0ZXh0IHdpZHRoLlxuICAgICAqIFRoaXMgcmF0aW8gaXMgdXNlZCB0byBnZXQgYW4gaW5pdGlhbCBfYXBwcm94aW1hdGVfIHRleHQgc3RyaW5nIHRoYXQgc2hvdWxkXG4gICAgICogYmUgc2xpZ2h0bHkgb3ZlciB0aGUgYXZhaWxhYmxlIHdpZHRoLCB3aGljaCB3ZSBjYW4gdGhlbiByZW1vdmUgZnJvbVxuICAgICAqIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIgdW50aWwgdGhlIHRleHQganVzdCBmaXRzIHdpdGhpbiB0aGUgYXZhaWxhYmxlIHdpZHRoLlxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ3aWR0aFJhdGlvXCIsIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZXRUZXh0V2lkdGhSYXRpb1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGV4dCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogX3RoaXMuZnVsbFRleHQ7XG4gICAgICB2YXIgdGV4dFRvT2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnJztcbiAgICAgIC8vIEFjY291bnQgZm9yIHJlZHVjZWQgYXZhaWxhYmxlIHdpZHRoIGR1ZSB0byAoZS5nLikgdHJ1bmNhdGlvbiBvZmZzZXRcbiAgICAgIHZhciBhdmFpbGFibGVXaWR0aCA9IF90aGlzLmF2YWlsYWJsZVdpZHRoO1xuICAgICAgaWYgKHRleHRUb09mZnNldCkge1xuICAgICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayh0ZXh0VG9PZmZzZXQpO1xuICAgICAgICBhdmFpbGFibGVXaWR0aCA9IGF2YWlsYWJsZVdpZHRoIC0gX3RoaXMudGV4dFdpZHRoO1xuICAgICAgfVxuICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2sodGV4dCk7XG4gICAgICBfdGhpcy53aWR0aFJhdGlvID0gYXZhaWxhYmxlV2lkdGggLyBfdGhpcy50ZXh0V2lkdGg7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImdldFRleHRGcm9tUmF0aW9cIiwgZnVuY3Rpb24gKHRleHQsIHR5cGUpIHtcbiAgICAgIHZhciBjaGFyYWN0ZXJSYXRpbyA9IE1hdGguY2VpbCh0ZXh0Lmxlbmd0aCAqIF90aGlzLndpZHRoUmF0aW8pO1xuICAgICAgdmFyIGluZGV4ID0gdHlwZSA9PT0gJ3N0YXJ0JyA/IHRleHQubGVuZ3RoIC0gY2hhcmFjdGVyUmF0aW8gOiBjaGFyYWN0ZXJSYXRpbztcbiAgICAgIHZhciBfc3BsaXRUZXh0JGF0ID0gc3BsaXRUZXh0KHRleHQpLmF0KGluZGV4KSxcbiAgICAgICAgX3NwbGl0VGV4dCRhdDIgPSBfc2xpY2VkVG9BcnJheShfc3BsaXRUZXh0JGF0LCAyKSxcbiAgICAgICAgZW5kID0gX3NwbGl0VGV4dCRhdDJbMF0sXG4gICAgICAgIHN0YXJ0ID0gX3NwbGl0VGV4dCRhdDJbMV07XG4gICAgICByZXR1cm4gdHlwZSA9PT0gJ3N0YXJ0JyA/IHN0YXJ0IDogZW5kO1xuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIEVhcmx5IHJldHVybiBjaGVja3NcbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2hlY2tJZlRydW5jYXRpb25Jc05lZWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayhfdGhpcy5mdWxsVGV4dCk7XG4gICAgICBpZiAoX3RoaXMuYXZhaWxhYmxlV2lkdGggPj0gX3RoaXMudGV4dFdpZHRoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2hlY2tTdWZmaWNpZW50RWxsaXBzaXNXaWR0aFwiLCBmdW5jdGlvbiAodHJ1bmNhdGlvbikge1xuICAgICAgdmFyIHRleHRUb0NoZWNrID0gdHJ1bmNhdGlvbiA9PT0gJ3N0YXJ0RW5kJyA/IFwiXCIuY29uY2F0KF90aGlzLmVsbGlwc2lzLCBcIiBcIikuY29uY2F0KF90aGlzLmVsbGlwc2lzKSAvLyBzdGFydEVuZCBuZWVkcyBhIGxpdHRsZSBtb3JlIHNwYWNlXG4gICAgICA6IF90aGlzLmVsbGlwc2lzO1xuICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2sodGV4dFRvQ2hlY2spO1xuICAgICAgaWYgKF90aGlzLnRleHRXaWR0aCA+PSBfdGhpcy5hdmFpbGFibGVXaWR0aCAqIDAuOSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgdHJ1bmNhdGlvbiBlbGxpcHNpcyBpcyBsYXJnZXIgdGhhbiB0aGUgYXZhaWxhYmxlIHdpZHRoLiBObyB0ZXh0IGNhbiBiZSByZW5kZXJlZC4nKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjaGVja1RydW5jYXRpb25PZmZzZXRXaWR0aFwiLCBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2sodGV4dCk7XG4gICAgICBpZiAoX3RoaXMudGV4dFdpZHRoID4gX3RoaXMuYXZhaWxhYmxlV2lkdGgpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIHBhc3NlZCB0cnVuY2F0aW9uT2Zmc2V0IGlzIHRvbyBsYXJnZSBmb3IgdGhlIGF2YWlsYWJsZSB3aWR0aC4gVHJ1bmNhdGluZyB0aGUgb2Zmc2V0IGluc3RlYWQuJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBUcnVuY2F0aW9uIHR5cGVzIGxvZ2ljLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zXG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRydW5jYXRlU3RhcnRcIiwgZnVuY3Rpb24gKHRydW5jYXRpb25PZmZzZXQpIHtcbiAgICAgIHZhciB0cnVuY2F0ZWRUZXh0ID0gX3RoaXMuZnVsbFRleHQ7XG4gICAgICB2YXIgbGVhZGluZ1RleHQgPSAnJztcbiAgICAgIHZhciBjb21iaW5lZFRleHQgPSBmdW5jdGlvbiBjb21iaW5lZFRleHQoKSB7XG4gICAgICAgIHJldHVybiBsZWFkaW5nVGV4dCArIHRydW5jYXRlZFRleHQ7XG4gICAgICB9O1xuICAgICAgaWYgKHRydW5jYXRpb25PZmZzZXQpIHtcbiAgICAgICAgdmFyIF9zcGxpdFRleHQkYXQzID0gc3BsaXRUZXh0KF90aGlzLmZ1bGxUZXh0KS5hdCh0cnVuY2F0aW9uT2Zmc2V0KTtcbiAgICAgICAgdmFyIF9zcGxpdFRleHQkYXQ0ID0gX3NsaWNlZFRvQXJyYXkoX3NwbGl0VGV4dCRhdDMsIDIpO1xuICAgICAgICBsZWFkaW5nVGV4dCA9IF9zcGxpdFRleHQkYXQ0WzBdO1xuICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gX3NwbGl0VGV4dCRhdDRbMV07XG4gICAgICAgIHZhciB3aWR0aENoZWNrID0gbGVhZGluZ1RleHQgKyBfdGhpcy5lbGxpcHNpcztcbiAgICAgICAgaWYgKF90aGlzLmNoZWNrVHJ1bmNhdGlvbk9mZnNldFdpZHRoKHdpZHRoQ2hlY2spID09PSBmYWxzZSkge1xuICAgICAgICAgIHRydW5jYXRlZFRleHQgPSBsZWFkaW5nVGV4dDtcbiAgICAgICAgICBsZWFkaW5nVGV4dCA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCB0ZXh0IHdpZHRoIHJhdGlvIHdpZHRoIGFjY291bnRpbmcgZm9yIGFueSB0cnVuY2F0aW9uIG9mZnNldCB0ZXh0LFxuICAgICAgLy8gYW5kIGd1ZXNzdGltYXRlIGFuIGluaXRpYWwgdHJ1bmNhdGVkIHN0cmluZ1xuICAgICAgX3RoaXMuc2V0VGV4dFdpZHRoUmF0aW8odHJ1bmNhdGVkVGV4dCwgbGVhZGluZ1RleHQpO1xuICAgICAgdHJ1bmNhdGVkVGV4dCA9IF90aGlzLmdldFRleHRGcm9tUmF0aW8odHJ1bmNhdGVkVGV4dCwgJ3N0YXJ0Jyk7XG4gICAgICBsZWFkaW5nVGV4dCArPSBfdGhpcy5lbGxpcHNpcztcbiAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKGNvbWJpbmVkVGV4dCgpKTtcbiAgICAgIHdoaWxlIChfdGhpcy50ZXh0V2lkdGggPiBfdGhpcy5hdmFpbGFibGVXaWR0aCkge1xuICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gcmVtb3ZlRmlyc3RDaGFyYWN0ZXIodHJ1bmNhdGVkVGV4dCk7XG4gICAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKGNvbWJpbmVkVGV4dCgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21iaW5lZFRleHQoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidHJ1bmNhdGVFbmRcIiwgZnVuY3Rpb24gKHRydW5jYXRpb25PZmZzZXQpIHtcbiAgICAgIHZhciB0cnVuY2F0ZWRUZXh0ID0gX3RoaXMuZnVsbFRleHQ7XG4gICAgICB2YXIgdHJhaWxpbmdUZXh0ID0gJyc7XG4gICAgICB2YXIgY29tYmluZWRUZXh0ID0gZnVuY3Rpb24gY29tYmluZWRUZXh0KCkge1xuICAgICAgICByZXR1cm4gdHJ1bmNhdGVkVGV4dCArIHRyYWlsaW5nVGV4dDtcbiAgICAgIH07XG4gICAgICBpZiAodHJ1bmNhdGlvbk9mZnNldCkge1xuICAgICAgICB2YXIgaW5kZXggPSBfdGhpcy5mdWxsVGV4dC5sZW5ndGggLSB0cnVuY2F0aW9uT2Zmc2V0O1xuICAgICAgICB2YXIgX3NwbGl0VGV4dCRhdDUgPSBzcGxpdFRleHQoX3RoaXMuZnVsbFRleHQpLmF0KGluZGV4KTtcbiAgICAgICAgdmFyIF9zcGxpdFRleHQkYXQ2ID0gX3NsaWNlZFRvQXJyYXkoX3NwbGl0VGV4dCRhdDUsIDIpO1xuICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gX3NwbGl0VGV4dCRhdDZbMF07XG4gICAgICAgIHRyYWlsaW5nVGV4dCA9IF9zcGxpdFRleHQkYXQ2WzFdO1xuICAgICAgICB2YXIgd2lkdGhDaGVjayA9IF90aGlzLmVsbGlwc2lzICsgdHJhaWxpbmdUZXh0O1xuICAgICAgICBpZiAoX3RoaXMuY2hlY2tUcnVuY2F0aW9uT2Zmc2V0V2lkdGgod2lkdGhDaGVjaykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IHRyYWlsaW5nVGV4dDtcbiAgICAgICAgICB0cmFpbGluZ1RleHQgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBHZXQgdGV4dCB3aWR0aCByYXRpbyB3aWR0aCBhY2NvdW50aW5nIGZvciBhbnkgdHJ1bmNhdGlvbiBvZmZzZXQgdGV4dCxcbiAgICAgIC8vIGFuZCBndWVzc3RpbWF0ZSBhbiBpbml0aWFsIHRydW5jYXRlZCBzdHJpbmdcbiAgICAgIF90aGlzLnNldFRleHRXaWR0aFJhdGlvKHRydW5jYXRlZFRleHQsIHRyYWlsaW5nVGV4dCk7XG4gICAgICB0cnVuY2F0ZWRUZXh0ID0gX3RoaXMuZ2V0VGV4dEZyb21SYXRpbyh0cnVuY2F0ZWRUZXh0LCAnZW5kJyk7XG4gICAgICB0cmFpbGluZ1RleHQgPSBfdGhpcy5lbGxpcHNpcyArIHRyYWlsaW5nVGV4dDtcbiAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKGNvbWJpbmVkVGV4dCgpKTtcbiAgICAgIHdoaWxlIChfdGhpcy50ZXh0V2lkdGggPiBfdGhpcy5hdmFpbGFibGVXaWR0aCkge1xuICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gcmVtb3ZlTGFzdENoYXJhY3Rlcih0cnVuY2F0ZWRUZXh0KTtcbiAgICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2soY29tYmluZWRUZXh0KCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbWJpbmVkVGV4dCgpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0cnVuY2F0ZVN0YXJ0RW5kQXRQb3NpdGlvblwiLCBmdW5jdGlvbiAodHJ1bmNhdGlvblBvc2l0aW9uKSB7XG4gICAgICAvLyBTcGxpdCB0aGUgdGV4dCBmcm9tIHRoZSBhbmNob3IgcG9zaXRpb24sIHVzaW5nIHRoZSB3aWR0aCByYXRpb1xuICAgICAgLy8gdG8gZ2V0IHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIGluZGljZXMgZnJvbSB0aGUgcG9zaXRpb25cbiAgICAgIF90aGlzLnNldFRleHRXaWR0aFJhdGlvKCk7XG4gICAgICB2YXIgY2hhcmFjdGVyUmF0aW8gPSBNYXRoLmZsb29yKF90aGlzLmZ1bGxUZXh0Lmxlbmd0aCAqIF90aGlzLndpZHRoUmF0aW8gLyAyKTtcbiAgICAgIHZhciB0cnVuY2F0ZVN0YXJ0ID0gdHJ1bmNhdGlvblBvc2l0aW9uIC0gY2hhcmFjdGVyUmF0aW87XG4gICAgICB2YXIgdHJ1bmNhdGVFbmQgPSB0cnVuY2F0aW9uUG9zaXRpb24gKyBjaGFyYWN0ZXJSYXRpbztcblxuICAgICAgLy8gSWYgZWl0aGVyIG9mIHRoZSBhcHByb3hpbWF0ZSBzdGFydC9lbmQgdHJ1bmNhdGlvbiBpbmRpY2VzIGdvIGJleW9uZCB0aGVcbiAgICAgIC8vIGJvdW5kcyBvZiB0aGUgYWN0dWFsIHRleHQsIHdlIGNhbiBzaW1wbHkgdXNlIGVuZCBvciBzdGFydCB0cnVuY2F0aW9uIGluc3RlYWRcbiAgICAgIGlmICh0cnVuY2F0ZVN0YXJ0IDwgMCkge1xuICAgICAgICByZXR1cm4gX3RoaXMudHJ1bmNhdGVFbmQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0cnVuY2F0ZUVuZCA+PSBfdGhpcy5mdWxsVGV4dC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnRydW5jYXRlU3RhcnQoKTtcbiAgICAgIH1cbiAgICAgIHZhciB0cnVuY2F0ZWRUZXh0ID0gX3RoaXMuZnVsbFRleHQuc3Vic3RyaW5nKHRydW5jYXRlU3RhcnQsIHRydW5jYXRlRW5kKTtcbiAgICAgIHZhciBjb21iaW5lZFRleHQgPSBmdW5jdGlvbiBjb21iaW5lZFRleHQoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5lbGxpcHNpcyArIHRydW5jYXRlZFRleHQgKyBfdGhpcy5lbGxpcHNpcztcbiAgICAgIH07XG4gICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayhjb21iaW5lZFRleHQoKSk7XG4gICAgICB2YXIgYWx0ZXJuYXRpbmc7XG4gICAgICB3aGlsZSAoX3RoaXMudGV4dFdpZHRoID4gX3RoaXMuYXZhaWxhYmxlV2lkdGgpIHtcbiAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IGFsdGVybmF0aW5nID8gcmVtb3ZlTGFzdENoYXJhY3Rlcih0cnVuY2F0ZWRUZXh0KSA6IHJlbW92ZUZpcnN0Q2hhcmFjdGVyKHRydW5jYXRlZFRleHQpO1xuICAgICAgICBhbHRlcm5hdGluZyA9ICFhbHRlcm5hdGluZztcbiAgICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2soY29tYmluZWRUZXh0KCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbWJpbmVkVGV4dCgpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0cnVuY2F0ZVN0YXJ0RW5kQXRNaWRkbGVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG1pZGRsZVBvc2l0aW9uID0gTWF0aC5mbG9vcihfdGhpcy5mdWxsVGV4dC5sZW5ndGggLyAyKTtcbiAgICAgIHJldHVybiBfdGhpcy50cnVuY2F0ZVN0YXJ0RW5kQXRQb3NpdGlvbihtaWRkbGVQb3NpdGlvbik7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRydW5jYXRlTWlkZGxlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBtaWRkbGVQb3NpdGlvbiA9IE1hdGguZmxvb3IoX3RoaXMuZnVsbFRleHQubGVuZ3RoIC8gMik7XG4gICAgICB2YXIgX3NwbGl0VGV4dCRhdDcgPSBzcGxpdFRleHQoX3RoaXMuZnVsbFRleHQpLmF0KG1pZGRsZVBvc2l0aW9uKSxcbiAgICAgICAgX3NwbGl0VGV4dCRhdDggPSBfc2xpY2VkVG9BcnJheShfc3BsaXRUZXh0JGF0NywgMiksXG4gICAgICAgIGZpcnN0SGFsZiA9IF9zcGxpdFRleHQkYXQ4WzBdLFxuICAgICAgICBzZWNvbmRIYWxmID0gX3NwbGl0VGV4dCRhdDhbMV07XG4gICAgICBfdGhpcy5zZXRUZXh0V2lkdGhSYXRpbygpO1xuICAgICAgZmlyc3RIYWxmID0gX3RoaXMuZ2V0VGV4dEZyb21SYXRpbyhmaXJzdEhhbGYsICdlbmQnKTtcbiAgICAgIHNlY29uZEhhbGYgPSBfdGhpcy5nZXRUZXh0RnJvbVJhdGlvKHNlY29uZEhhbGYsICdzdGFydCcpO1xuICAgICAgdmFyIGNvbWJpbmVkVGV4dCA9IGZ1bmN0aW9uIGNvbWJpbmVkVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0SGFsZiArIF90aGlzLmVsbGlwc2lzICsgc2Vjb25kSGFsZjtcbiAgICAgIH07XG4gICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayhjb21iaW5lZFRleHQoKSk7XG4gICAgICB2YXIgYWx0ZXJuYXRpbmc7XG4gICAgICB3aGlsZSAoX3RoaXMudGV4dFdpZHRoID4gX3RoaXMuYXZhaWxhYmxlV2lkdGgpIHtcbiAgICAgICAgYWx0ZXJuYXRpbmcgPSAhYWx0ZXJuYXRpbmc7XG4gICAgICAgIGlmIChhbHRlcm5hdGluZykge1xuICAgICAgICAgIGZpcnN0SGFsZiA9IHJlbW92ZUxhc3RDaGFyYWN0ZXIoZmlyc3RIYWxmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWNvbmRIYWxmID0gcmVtb3ZlRmlyc3RDaGFyYWN0ZXIoc2Vjb25kSGFsZik7XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2soY29tYmluZWRUZXh0KCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbWJpbmVkVGV4dCgpO1xuICAgIH0pO1xuICAgIF90aGlzLmZ1bGxUZXh0ID0gZnVsbFRleHQ7XG4gICAgX3RoaXMuZWxsaXBzaXMgPSBlbGxpcHNpcztcbiAgICBfdGhpcy5hdmFpbGFibGVXaWR0aCA9IF9hdmFpbGFibGVXaWR0aDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKFRydW5jYXRpb25VdGlscywgX0NhbnZhc1RleHRVdGlscyk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoVHJ1bmNhdGlvblV0aWxzLCBbe1xuICAgIGtleTogXCJ0ZXh0V2lkdGhcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnUGVyZm9ybWFuY2UpIHtcbiAgICAgICAgdGhpcy5kZWJ1Z0NvdW50ZXIrKztcbiAgICAgIH1cbiAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihUcnVuY2F0aW9uVXRpbHMucHJvdG90eXBlKSwgXCJ0ZXh0V2lkdGhcIiwgdGhpcyk7XG4gICAgfVxuICB9XSk7XG59KENhbnZhc1RleHRVdGlscyk7XG5cbi8qKlxuICogRFJZIGNoYXJhY3Rlci9zdWJzdHJpbmcgdXRpbHNcbiAqL1xuXG52YXIgcmVtb3ZlTGFzdENoYXJhY3RlciA9IGZ1bmN0aW9uIHJlbW92ZUxhc3RDaGFyYWN0ZXIodGV4dCkge1xuICByZXR1cm4gdGV4dC5zdWJzdHJpbmcoMCwgdGV4dC5sZW5ndGggLSAxKTtcbn07XG52YXIgcmVtb3ZlRmlyc3RDaGFyYWN0ZXIgPSBmdW5jdGlvbiByZW1vdmVGaXJzdENoYXJhY3Rlcih0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnN1YnN0cmluZygxKTtcbn07XG52YXIgc3BsaXRUZXh0ID0gZnVuY3Rpb24gc3BsaXRUZXh0KHRleHQpIHtcbiAgcmV0dXJuIHtcbiAgICBhdDogZnVuY3Rpb24gYXQoaW5kZXgpIHtcbiAgICAgIHJldHVybiBbdGV4dC5zdWJzdHJpbmcoMCwgaW5kZXgpLCB0ZXh0LnN1YnN0cmluZyhpbmRleCldO1xuICAgIH1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmV4cG9ydCB2YXIgZXVpVGV4dFRydW5jYXRlU3R5bGVzID0ge1xuICBldWlUZXh0VHJ1bmNhdGU6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICBuYW1lOiBcIjdvNXFuei1ldWlUZXh0VHJ1bmNhdGVcIixcbiAgICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDtsYWJlbDpldWlUZXh0VHJ1bmNhdGU7XCJcbiAgfSA6IHtcbiAgICBuYW1lOiBcIjdvNXFuei1ldWlUZXh0VHJ1bmNhdGVcIixcbiAgICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDtsYWJlbDpldWlUZXh0VHJ1bmNhdGU7XCIsXG4gICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gIH0sXG4gIC8qKlxuICAgKiBUaGUgYmVsb3cgQ1NTIGlzIGEgaGFjayB0byBnZXQgZG91YmxlIGNsaWNraW5nIGFuZCBzZWxlY3RpbmcgdGhlICpmdWxsKiB0ZXh0XG4gICAqIGluc3RlYWQgb2YgdGhlIHRydW5jYXRlZCB0ZXh0ICh1c2VmdWwgZm9yIGNvcHlpbmcvcGFzdGluZywgYW5kIG1pbWljcyBob3dcbiAgICogYHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzYCB3b3JrcykuXG4gICAqXG4gICAqIFJlYWwgdGFsazogSSdtIGxvd2tleSBhbWF6ZWQgaXQgd29ya3MgYW5kIGl0IHdvdWxkbid0IHN1cnByaXNlIG1lIGlmIHdlIHJhbiBpbnRvXG4gICAqIGNyb3NzLWJyb3dzZXIgaXNzdWVzIHdpdGggdGhpcyBhdCBzb21lIHBvaW50LiBIb3BlZnVsbHkgQ1NTIG5hdGl2ZWx5IGltcGxlbWVudHNcbiAgICogY3VzdG9tIHRleHQgdHJ1bmNhdGlvbiBzb21lIGRheSAoaHR0cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMvaXNzdWVzLzM5MzcpXG4gICAqIGFuZCB0aGVyZSdsbCBiZSBubyBuZWVkIGZvciB0aGUgZW50aXJlIGNvbXBvbmVudCBhdCB0aGF0IHBvaW50IFx1RDgzRFx1REU0RlxuICAgKi9cbiAgLy8gTWFrZXMgdGhlIHRydW5jYXRlZCB0ZXh0IHVuc2VsZWN0YWJsZS91bi1jbGlja2FibGVcbiAgZXVpVGV4dFRydW5jYXRlX190cnVuY2F0ZWRUZXh0OiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgbmFtZTogXCIxc2p4a2IxLWV1aVRleHRUcnVuY2F0ZV9fdHJ1bmNhdGVkVGV4dFwiLFxuICAgIHN0eWxlczogXCJ1c2VyLXNlbGVjdDpub25lO3BvaW50ZXItZXZlbnRzOm5vbmU7bGFiZWw6ZXVpVGV4dFRydW5jYXRlX190cnVuY2F0ZWRUZXh0O1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCIxc2p4a2IxLWV1aVRleHRUcnVuY2F0ZV9fdHJ1bmNhdGVkVGV4dFwiLFxuICAgIHN0eWxlczogXCJ1c2VyLXNlbGVjdDpub25lO3BvaW50ZXItZXZlbnRzOm5vbmU7bGFiZWw6ZXVpVGV4dFRydW5jYXRlX190cnVuY2F0ZWRUZXh0O1wiLFxuICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICB9LFxuICAvLyBQb3NpdGlvbnMgdGhlIGZ1bGwgdGV4dCBvbiB0b3Agb2YgdGhlIHRydW5jYXRlZCB0ZXh0IChzbyB0aGF0IGNsaWNraW5nIHRhcmdldHMgaXQpXG4gIC8vIGFuZCBnaXZlcyBpdCBhIGNvbG9yIG9wYWNpdHkgb2YgMCBzbyB0aGF0IGl0J3Mgbm90IGFjdHVhbGx5IHZpc2libGVcbiAgZXVpVGV4dFRydW5jYXRlX19mdWxsVGV4dDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgIG5hbWU6IFwiMTljOWdxaS1ldWlUZXh0VHJ1bmNhdGVfX2Z1bGxUZXh0XCIsXG4gICAgc3R5bGVzOiBcInBvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7b3ZlcmZsb3c6aGlkZGVuO2NvbG9yOnJnYmEoMCwgMCwgMCwgMCk7QHN1cHBvcnRzICgtd2Via2l0LWh5cGhlbnM6IG5vbmUpe3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7fTtsYWJlbDpldWlUZXh0VHJ1bmNhdGVfX2Z1bGxUZXh0O1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCIxOWM5Z3FpLWV1aVRleHRUcnVuY2F0ZV9fZnVsbFRleHRcIixcbiAgICBzdHlsZXM6IFwicG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtvdmVyZmxvdzpoaWRkZW47Y29sb3I6cmdiYSgwLCAwLCAwLCAwKTtAc3VwcG9ydHMgKC13ZWJraXQtaHlwaGVuczogbm9uZSl7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt9O2xhYmVsOmV1aVRleHRUcnVuY2F0ZV9fZnVsbFRleHQ7XCIsXG4gICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gIH1cbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInN0eWxlXCIsIFwibGluZXNcIiwgXCJjbG9uZUVsZW1lbnRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGlzVmFsaWRFbGVtZW50LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBzdHlsZXMgPSB7XG4gIGV1aVRleHRCbG9ja1RydW5jYXRlOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgbmFtZTogXCIxY2ZtM2dlLWV1aVRleHRCbG9ja1RydW5jYXRlXCIsXG4gICAgc3R5bGVzOiBcImRpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsOy13ZWJraXQtbGluZS1jbGFtcDowO292ZXJmbG93OmhpZGRlbjtsYWJlbDpldWlUZXh0QmxvY2tUcnVuY2F0ZTtcIlxuICB9IDoge1xuICAgIG5hbWU6IFwiMWNmbTNnZS1ldWlUZXh0QmxvY2tUcnVuY2F0ZVwiLFxuICAgIHN0eWxlczogXCJkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWxpbmUtY2xhbXA6MDtvdmVyZmxvdzpoaWRkZW47bGFiZWw6ZXVpVGV4dEJsb2NrVHJ1bmNhdGU7XCIsXG4gICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gIH1cbn07XG5leHBvcnQgdmFyIEV1aVRleHRCbG9ja1RydW5jYXRlID0gZnVuY3Rpb24gRXVpVGV4dEJsb2NrVHJ1bmNhdGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICBsaW5lcyA9IF9yZWYubGluZXMsXG4gICAgY2xvbmVFbGVtZW50ID0gX3JlZi5jbG9uZUVsZW1lbnQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRleHRCbG9ja1RydW5jYXRlJywgY2xhc3NOYW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IHN0eWxlcy5ldWlUZXh0QmxvY2tUcnVuY2F0ZTtcbiAgdmFyIGlubGluZVN0eWxlcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIFdlYmtpdExpbmVDbGFtcDogbGluZXNcbiAgICB9LCBzdHlsZSk7XG4gIH0sIFtsaW5lcywgc3R5bGVdKTtcbiAgaWYgKCAvKiNfX1BVUkVfXyovaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNsb25lRWxlbWVudCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCB7XG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIHN0eWxlOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNoaWxkcmVuLnByb3BzLnN0eWxlKSwgaW5saW5lU3R5bGVzKSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhjaGlsZHJlbi5wcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMpXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICBzdHlsZTogaW5saW5lU3R5bGVzXG4gICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgfVxufTtcbkV1aVRleHRCbG9ja1RydW5jYXRlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogTnVtYmVyIG9mIGxpbmVzIG9mIHRleHQgdG8gdHJ1bmNhdGUgdG9cbiAgICAgICAqL1xuICBsaW5lczogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgICAqIEFwcGxpZXMgc3R5bGluZyB0byB0aGUgY2hpbGQgZWxlbWVudCBpbnN0ZWFkIG9mIHJlbmRlcmluZyBhIHBhcmVudCB3cmFwcGVyIGBkaXZgLlxuICAgICAgICogQ2FuIG9ubHkgYmUgdXNlZCB3aGVuIHdyYXBwaW5nIGEgKnNpbmdsZSogY2hpbGQgZWxlbWVudC90YWcsIGFuZCBub3QgcmF3IHRleHQuXG4gICAgICAgKi9cbiAgY2xvbmVFbGVtZW50OiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94VGl0bGUgPSBmdW5jdGlvbiBFdWlDb21ib0JveFRpdGxlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveFRpdGxlXCJcbiAgfSwgY2hpbGRyZW4pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbWF0aFdpdGhVbml0cywgZXVpU2Nyb2xsQmFyU3R5bGVzLCBldWlUZXh0QnJlYWtXb3JkLCBldWlUZXh0VHJ1bmNhdGUgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlUaXRsZSB9IGZyb20gJy4uLy4uL3RpdGxlL3RpdGxlLnN0eWxlcyc7XG5leHBvcnQgdmFyIExJU1RfTUFYX0hFSUdIVCA9IDIwMDtcbmV4cG9ydCB2YXIgZXVpQ29tYm9Cb3hPcHRpb25MaXN0U3R5bGVzID0gZnVuY3Rpb24gZXVpQ29tYm9Cb3hPcHRpb25MaXN0U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpQ29tYm9Cb3hPcHRpb25MaXN0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21heC1oZWlnaHQnLCBcIlwiLmNvbmNhdChMSVNUX01BWF9IRUlHSFQsIFwicHhcIikpLCBcIiBvdmVyZmxvdzpoaWRkZW47LmV1aVRleHRUcnVuY2F0ZXtwb2ludGVyLWV2ZW50czpub25lO30uZXVpQ29tYm9Cb3hPcHRpb25fX2NvbnRlbnRXcmFwcGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7fS5ldWlDb21ib0JveE9wdGlvbl9fY29udGVudHtmbGV4OjE7dGV4dC1hbGlnbjpzdGFydDtcIiwgZXVpVGV4dFRydW5jYXRlKCksIFwiO30uZXVpQ29tYm9Cb3hPcHRpb25fX2VtcHR5U3RhdGVUZXh0e2ZsZXg6MTt0ZXh0LWFsaWduOnN0YXJ0O1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgMCksIFwiO30uZXVpQ29tYm9Cb3hPcHRpb25fX2VudGVyQmFkZ2V7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgZXVpVGhlbWUuc2l6ZS54cyksIFwiO30uZXVpQ29tYm9Cb3hUaXRsZXtkaXNwbGF5OmZsZXg7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGV1aVRoZW1lLnNpemUucyksIGxvZ2ljYWxDU1MoJ3BhZGRpbmctdG9wJywgbWF0aFdpdGhVbml0cyhldWlUaGVtZS5zaXplLnMsIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCArIDE7XG4gICAgfSkpLCBcIiBcIiwgbG9naWNhbENTUygncGFkZGluZy1ib3R0b20nLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgXCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4eHMnKSwgXCI7fTtsYWJlbDpldWlDb21ib0JveE9wdGlvbkxpc3Q7XCIpLFxuICAgIGV1aUNvbWJvQm94T3B0aW9uTGlzdF9fdmlydHVhbGl6YXRpb246IC8qI19fUFVSRV9fKi9jc3MoZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCksIFwiOztsYWJlbDpldWlDb21ib0JveE9wdGlvbkxpc3RfX3ZpcnR1YWxpemF0aW9uO1wiKSxcbiAgICBldWlDb21ib0JveE9wdGlvbnNMaXN0X19lbXB0eTogLyojX19QVVJFX18qL2NzcyhcInBhZGRpbmc6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7dGV4dC1hbGlnbjpjZW50ZXI7XCIsIGV1aVRleHRCcmVha1dvcmQoKSwgXCI7O2xhYmVsOmV1aUNvbWJvQm94T3B0aW9uc0xpc3RfX2VtcHR5O1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpQ29tYm9Cb3hTdHlsZXMgPSB7XG4gIGV1aUNvbWJvQm94OiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsICdhdXRvJyksIFwiOztsYWJlbDpldWlDb21ib0JveDtcIiksXG4gIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImFjdGl2ZVBhZ2VcIiwgXCJpdGVtc1BlclBhZ2VcIiwgXCJpdGVtc1BlclBhZ2VPcHRpb25zXCIsIFwic2hvd1BlclBhZ2VPcHRpb25zXCIsIFwib25DaGFuZ2VJdGVtc1BlclBhZ2VcIiwgXCJvbkNoYW5nZVBhZ2VcIiwgXCJwYWdlQ291bnRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5IH0gZnJvbSAnLi4vLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSwgRXVpQ29udGV4dE1lbnVQYW5lbCB9IGZyb20gJy4uLy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtIH0gZnJvbSAnLi4vLi4vZmxleCc7XG5pbXBvcnQgeyBFdWlQYWdpbmF0aW9uIH0gZnJvbSAnLi4vLi4vcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBFdWlQb3BvdmVyIH0gZnJvbSAnLi4vLi4vcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyB1c2VQcm9wc1dpdGhDb21wb25lbnREZWZhdWx0cyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVyL2NvbXBvbmVudF9kZWZhdWx0cyc7XG5pbXBvcnQgeyBldWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cyB9IGZyb20gJy4vdGFibGVfcGFnaW5hdGlvbl9kZWZhdWx0cyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVBhZ2luYXRpb24gPSBmdW5jdGlvbiBFdWlUYWJsZVBhZ2luYXRpb24ocHJvcHMpIHtcbiAgdmFyIF91c2VQcm9wc1dpdGhDb21wb25lbiA9IHVzZVByb3BzV2l0aENvbXBvbmVudERlZmF1bHRzKCdFdWlUYWJsZVBhZ2luYXRpb24nLCBwcm9wcyksXG4gICAgYWN0aXZlUGFnZSA9IF91c2VQcm9wc1dpdGhDb21wb25lbi5hY3RpdmVQYWdlLFxuICAgIF91c2VQcm9wc1dpdGhDb21wb25lbjIgPSBfdXNlUHJvcHNXaXRoQ29tcG9uZW4uaXRlbXNQZXJQYWdlLFxuICAgIGl0ZW1zUGVyUGFnZSA9IF91c2VQcm9wc1dpdGhDb21wb25lbjIgPT09IHZvaWQgMCA/IGV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzLml0ZW1zUGVyUGFnZSA6IF91c2VQcm9wc1dpdGhDb21wb25lbjIsXG4gICAgX3VzZVByb3BzV2l0aENvbXBvbmVuMyA9IF91c2VQcm9wc1dpdGhDb21wb25lbi5pdGVtc1BlclBhZ2VPcHRpb25zLFxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMgPSBfdXNlUHJvcHNXaXRoQ29tcG9uZW4zID09PSB2b2lkIDAgPyBldWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cy5pdGVtc1BlclBhZ2VPcHRpb25zIDogX3VzZVByb3BzV2l0aENvbXBvbmVuMyxcbiAgICBfdXNlUHJvcHNXaXRoQ29tcG9uZW40ID0gX3VzZVByb3BzV2l0aENvbXBvbmVuLnNob3dQZXJQYWdlT3B0aW9ucyxcbiAgICBzaG93UGVyUGFnZU9wdGlvbnMgPSBfdXNlUHJvcHNXaXRoQ29tcG9uZW40ID09PSB2b2lkIDAgPyBldWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cy5zaG93UGVyUGFnZU9wdGlvbnMgOiBfdXNlUHJvcHNXaXRoQ29tcG9uZW40LFxuICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlID0gX3VzZVByb3BzV2l0aENvbXBvbmVuLm9uQ2hhbmdlSXRlbXNQZXJQYWdlLFxuICAgIG9uQ2hhbmdlUGFnZSA9IF91c2VQcm9wc1dpdGhDb21wb25lbi5vbkNoYW5nZVBhZ2UsXG4gICAgcGFnZUNvdW50ID0gX3VzZVByb3BzV2l0aENvbXBvbmVuLnBhZ2VDb3VudCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF91c2VQcm9wc1dpdGhDb21wb25lbiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBpc1BvcG92ZXJPcGVuID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRJc1BvcG92ZXJPcGVuID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIHRvZ2dsZVBvcG92ZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgc2V0SXNQb3BvdmVyT3BlbihmdW5jdGlvbiAoaXNPcGVuKSB7XG4gICAgICByZXR1cm4gIWlzT3BlbjtcbiAgICB9KTtcbiAgfSwgW10pO1xuICB2YXIgY2xvc2VQb3BvdmVyID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHNldElzUG9wb3Zlck9wZW4oZmFsc2UpO1xuICB9LCBbXSk7XG4gIHZhciBidXR0b24gPSBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkVtcHR5LCB7XG4gICAgc2l6ZTogXCJ4c1wiLFxuICAgIGNvbG9yOiBcInRleHRcIixcbiAgICBpY29uVHlwZTogXCJhcnJvd0Rvd25cIixcbiAgICBpY29uU2lkZTogXCJyaWdodFwiLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0YWJsZVBhZ2luYXRpb25Qb3BvdmVyQnV0dG9uXCIsXG4gICAgb25DbGljazogdG9nZ2xlUG9wb3ZlclxuICB9LCBpdGVtc1BlclBhZ2UgPT09IDAgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICB0b2tlbjogXCJldWlUYWJsZVBhZ2luYXRpb24uYWxsUm93c1wiLFxuICAgIGRlZmF1bHQ6IFwiU2hvd2luZyBhbGwgcm93c1wiXG4gIH0pIDogX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLnJvd3NQZXJQYWdlXCIsXG4gICAgZGVmYXVsdDogXCJSb3dzIHBlciBwYWdlXCJcbiAgfSksIFwiOiBcIiwgaXRlbXNQZXJQYWdlKSk7XG4gIHZhciBpdGVtcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpdGVtc1BlclBhZ2VPcHRpb25zLm1hcChmdW5jdGlvbiAoaXRlbXNQZXJQYWdlT3B0aW9uKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIHtcbiAgICAgICAga2V5OiBpdGVtc1BlclBhZ2VPcHRpb24sXG4gICAgICAgIGljb246IGl0ZW1zUGVyUGFnZU9wdGlvbiA9PT0gaXRlbXNQZXJQYWdlID8gJ2NoZWNrJyA6ICdlbXB0eScsXG4gICAgICAgIFwiYXJpYS1jdXJyZW50XCI6IGl0ZW1zUGVyUGFnZU9wdGlvbiA9PT0gaXRlbXNQZXJQYWdlID8gJ3RydWUnIDogdW5kZWZpbmVkLFxuICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgIGNsb3NlUG9wb3ZlcigpO1xuICAgICAgICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlID09PSBudWxsIHx8IG9uQ2hhbmdlSXRlbXNQZXJQYWdlID09PSB2b2lkIDAgfHwgb25DaGFuZ2VJdGVtc1BlclBhZ2UoaXRlbXNQZXJQYWdlT3B0aW9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlUGFnaW5hdGlvbi1cIi5jb25jYXQoaXRlbXNQZXJQYWdlT3B0aW9uLCBcIi1yb3dzXCIpXG4gICAgICB9LCBpdGVtc1BlclBhZ2VPcHRpb24gPT09IDAgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLnJvd3NQZXJQYWdlT3B0aW9uU2hvd0FsbFJvd3NcIixcbiAgICAgICAgZGVmYXVsdDogXCJTaG93IGFsbCByb3dzXCJcbiAgICAgIH0pIDogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRhYmxlUGFnaW5hdGlvbi5yb3dzUGVyUGFnZU9wdGlvblwiLFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICByb3dzUGVyUGFnZTogaXRlbXNQZXJQYWdlT3B0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IFwie3Jvd3NQZXJQYWdlfSByb3dzXCJcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfSwgW2l0ZW1zUGVyUGFnZU9wdGlvbnMsIGl0ZW1zUGVyUGFnZSwgb25DaGFuZ2VJdGVtc1BlclBhZ2UsIGNsb3NlUG9wb3Zlcl0pO1xuICB2YXIgaXRlbXNQZXJQYWdlUG9wb3ZlciA9IF9fX0Vtb3Rpb25KU1goRXVpUG9wb3Zlciwge1xuICAgIGJ1dHRvbjogYnV0dG9uLFxuICAgIGlzT3BlbjogaXNQb3BvdmVyT3BlbixcbiAgICBjbG9zZVBvcG92ZXI6IGNsb3NlUG9wb3ZlcixcbiAgICBwYW5lbFBhZGRpbmdTaXplOiBcIm5vbmVcIixcbiAgICBhbmNob3JQb3NpdGlvbjogXCJ1cFJpZ2h0XCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudVBhbmVsLCB7XG4gICAgaXRlbXM6IGl0ZW1zLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0YWJsZVBhZ2luYXRpb25Sb3dPcHRpb25zXCJcbiAgfSkpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGbGV4R3JvdXAsIHtcbiAgICBqdXN0aWZ5Q29udGVudDogXCJzcGFjZUJldHdlZW5cIixcbiAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgIHJlc3BvbnNpdmU6IGZhbHNlLFxuICAgIHdyYXA6IHRydWUsXG4gICAgZ3V0dGVyU2l6ZTogXCJzXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aS14U2Nyb2xsXCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIHNob3dQZXJQYWdlT3B0aW9ucyAmJiBpdGVtc1BlclBhZ2VQb3BvdmVyKSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIGl0ZW1zUGVyUGFnZSA+IDAgJiYgX19fRW1vdGlvbkpTWChFdWlQYWdpbmF0aW9uLCBfZXh0ZW5kcyh7XG4gICAgcGFnZUNvdW50OiBwYWdlQ291bnQsXG4gICAgYWN0aXZlUGFnZTogYWN0aXZlUGFnZSxcbiAgICBvblBhZ2VDbGljazogb25DaGFuZ2VQYWdlXG4gIH0sIHJlc3QpKSkpO1xufTtcbkV1aVRhYmxlUGFnaW5hdGlvbi5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIE9wdGlvbiB0byBjb21wbGV0ZWx5IGhpZGUgdGhlIFwiUm93cyBwZXIgcGFnZVwiIHNlbGVjdG9yLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICBzaG93UGVyUGFnZU9wdGlvbnM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBDdXJyZW50IHNlbGVjdGlvbiBmb3IgXCJSb3dzIHBlciBwYWdlXCIuXG4gICAgICogUGFzcyBgMGAgdG8gZGlzcGxheSB0aGUgc2VsZWN0ZWQgXCJTaG93IGFsbFwiIG9wdGlvbiBhbmQgaGlkZSB0aGUgcGFnaW5hdGlvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gIGl0ZW1zUGVyUGFnZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAgICogQ3VzdG9tIGFycmF5IG9mIG9wdGlvbnMgZm9yIFwiUm93cyBwZXIgcGFnZVwiLlxuICAgICAqIFBhc3MgYDBgIGFzIG9uZSBvZiB0aGUgb3B0aW9ucyB0byBjcmVhdGUgYSBcIlNob3cgYWxsXCIgb3B0aW9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgWzEwLCAyNSwgNTBdXG4gICAgICovXG4gIGl0ZW1zUGVyUGFnZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCksXG4gIC8qKlxuICAgICAqIENsaWNrIGhhbmRsZXIgdGhhdCBwYXNzZXMgYmFjayBzZWxlY3RlZCBgcGFnZVNpemVgIG51bWJlclxuICAgICAqL1xuICBvbkNoYW5nZUl0ZW1zUGVyUGFnZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2hhbmdlUGFnZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIFJlcXVpcmVzIHRoZSBgaWRgIG9mIHRoZSB0YWJsZSBiZWluZyBjb250cm9sbGVkXG4gICAgICovXG4gIFwiYXJpYS1jb250cm9sc1wiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcInBhZ2VDb3VudFwiLCBcImFjdGl2ZVBhZ2VcIiwgXCJvblBhZ2VDbGlja1wiLCBcImNvbXByZXNzZWRcIiwgXCJhcmlhLWNvbnRyb2xzXCIsIFwicmVzcG9uc2l2ZVwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlQYWdpbmF0aW9uQnV0dG9uIH0gZnJvbSAnLi9wYWdpbmF0aW9uX2J1dHRvbic7XG5pbXBvcnQgeyBFdWlJMThuLCB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQgeyBFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cgfSBmcm9tICcuL3BhZ2luYXRpb25fYnV0dG9uX2Fycm93JztcbmltcG9ydCB7IHVzZUlzV2l0aGluQnJlYWtwb2ludHMsIHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgZXVpUGFnaW5hdGlvblN0eWxlcyB9IGZyb20gJy4vcGFnaW5hdGlvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBNQVhfVklTSUJMRV9QQUdFUyA9IDU7XG52YXIgTlVNQkVSX1NVUlJPVU5ESU5HX1BBR0VTID0gTWF0aC5mbG9vcihNQVhfVklTSUJMRV9QQUdFUyAqIDAuNSk7XG5leHBvcnQgdmFyIEV1aVBhZ2luYXRpb24gPSBmdW5jdGlvbiBFdWlQYWdpbmF0aW9uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkcGFnZUNvdW50ID0gX3JlZi5wYWdlQ291bnQsXG4gICAgcGFnZUNvdW50ID0gX3JlZiRwYWdlQ291bnQgPT09IHZvaWQgMCA/IDEgOiBfcmVmJHBhZ2VDb3VudCxcbiAgICBfcmVmJGFjdGl2ZVBhZ2UgPSBfcmVmLmFjdGl2ZVBhZ2UsXG4gICAgYWN0aXZlUGFnZSA9IF9yZWYkYWN0aXZlUGFnZSA9PT0gdm9pZCAwID8gMCA6IF9yZWYkYWN0aXZlUGFnZSxcbiAgICBfcmVmJG9uUGFnZUNsaWNrID0gX3JlZi5vblBhZ2VDbGljayxcbiAgICBvblBhZ2VDbGljayA9IF9yZWYkb25QYWdlQ2xpY2sgPT09IHZvaWQgMCA/IGZ1bmN0aW9uICgpIHt9IDogX3JlZiRvblBhZ2VDbGljayxcbiAgICBfY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICBhcmlhQ29udHJvbHMgPSBfcmVmWydhcmlhLWNvbnRyb2xzJ10sXG4gICAgX3JlZiRyZXNwb25zaXZlID0gX3JlZi5yZXNwb25zaXZlLFxuICAgIHJlc3BvbnNpdmUgPSBfcmVmJHJlc3BvbnNpdmUgPT09IHZvaWQgMCA/IFsneHMnLCAncyddIDogX3JlZiRyZXNwb25zaXZlLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzUmVzcG9uc2l2ZSA9IHVzZUlzV2l0aGluQnJlYWtwb2ludHMocmVzcG9uc2l2ZSwgISFyZXNwb25zaXZlKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVBhZ2luYXRpb25TdHlsZXMoZXVpVGhlbWUpO1xuXG4gIC8vIEZvcmNlIHRvIGBjb21wcmVzc2VkYCB2ZXJzaW9uIGlmIHNwZWNpZmllZCBvciB3aXRoaW4gdGhlIHJlc3BvbnNpdmUgYnJlYWtwb2ludHNcbiAgdmFyIGNvbXByZXNzZWQgPSBfY29tcHJlc3NlZCB8fCBpc1Jlc3BvbnNpdmU7XG4gIHZhciBzYWZlQ2xpY2sgPSBmdW5jdGlvbiBzYWZlQ2xpY2soZSwgcGFnZUluZGV4KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChhcmlhQ29udHJvbHMpIHtcbiAgICAgIHZhciBjb250cm9sbGVkRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFyaWFDb250cm9scyk7XG4gICAgICBpZiAoY29udHJvbGxlZEVsZW1lbnQpIHtcbiAgICAgICAgY29udHJvbGxlZEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgb25QYWdlQ2xpY2socGFnZUluZGV4KTtcbiAgfTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQYWdpbmF0aW9uJywgY2xhc3NOYW1lKTtcbiAgdmFyIGZpcnN0QnV0dG9uID0gKHBhZ2VDb3VudCA8IDEgfHwgY29tcHJlc3NlZCkgJiYgX19fRW1vdGlvbkpTWChFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3csIHtcbiAgICB0eXBlOiBcImZpcnN0XCIsXG4gICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gc2FmZUNsaWNrKGUsIDApO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGFjdGl2ZVBhZ2UgPT09IDBcbiAgfSk7XG4gIHZhciBwcmV2aW91c0J1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LCB7XG4gICAgdHlwZTogXCJwcmV2aW91c1wiLFxuICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBhY3RpdmVQYWdlIC0gMSk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gMFxuICB9KTtcbiAgdmFyIG5leHRCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwibmV4dFwiLFxuICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBhY3RpdmVQYWdlICsgMSk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gLTEgfHwgYWN0aXZlUGFnZSA9PT0gcGFnZUNvdW50IC0gMVxuICB9KTtcbiAgdmFyIGxhc3RCdXR0b24gPSAocGFnZUNvdW50IDwgMSB8fCBjb21wcmVzc2VkKSAmJiBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwibGFzdFwiLFxuICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBwYWdlQ291bnQgPyBwYWdlQ291bnQgLSAxIDogLTEpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGFjdGl2ZVBhZ2UgPT09IC0xIHx8IGFjdGl2ZVBhZ2UgPT09IHBhZ2VDb3VudCAtIDFcbiAgfSk7XG4gIHZhciBjZW50ZXJQYWdlQ291bnQ7XG4gIGlmIChwYWdlQ291bnQpIHtcbiAgICB2YXIgc2hhcmVkQnV0dG9uUHJvcHMgPSB7XG4gICAgICBhY3RpdmVQYWdlOiBhY3RpdmVQYWdlLFxuICAgICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgICBzYWZlQ2xpY2s6IHNhZmVDbGljayxcbiAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgfTtcbiAgICBpZiAoY29tcHJlc3NlZCkge1xuICAgICAgY2VudGVyUGFnZUNvdW50ID0gX19fRW1vdGlvbkpTWChFdWlUZXh0LCB7XG4gICAgICAgIHNpemU6IFwic1wiLFxuICAgICAgICBjc3M6IHN0eWxlcy5ldWlQYWdpbmF0aW9uX19jb21wcmVzc2VkVGV4dCxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25fX2NvbXByZXNzZWRUZXh0XCJcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlQYWdpbmF0aW9uLnBhZ2VPZlRvdGFsQ29tcHJlc3NlZFwiLFxuICAgICAgICBkZWZhdWx0OiBcIntwYWdlfSBvZiB7dG90YWx9XCIsXG4gICAgICAgIHZhbHVlczoge1xuICAgICAgICAgIHBhZ2U6IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIGFjdGl2ZVBhZ2UgKyAxKSxcbiAgICAgICAgICB0b3RhbDogX19fRW1vdGlvbkpTWChcInNwYW5cIiwgbnVsbCwgcGFnZUNvdW50KVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwYWdlcyA9IFtdO1xuICAgICAgdmFyIGZpcnN0UGFnZUluUmFuZ2UgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihhY3RpdmVQYWdlIC0gTlVNQkVSX1NVUlJPVU5ESU5HX1BBR0VTLCBwYWdlQ291bnQgLSBNQVhfVklTSUJMRV9QQUdFUykpO1xuICAgICAgdmFyIGxhc3RQYWdlSW5SYW5nZSA9IE1hdGgubWluKHBhZ2VDb3VudCwgZmlyc3RQYWdlSW5SYW5nZSArIE1BWF9WSVNJQkxFX1BBR0VTKTtcbiAgICAgIGZvciAodmFyIGkgPSBmaXJzdFBhZ2VJblJhbmdlLCBpbmRleCA9IDA7IGkgPCBsYXN0UGFnZUluUmFuZ2U7IGkrKywgaW5kZXgrKykge1xuICAgICAgICBwYWdlcy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBwYWdlSW5kZXg6IGksXG4gICAgICAgICAga2V5OiBpXG4gICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgfVxuICAgICAgdmFyIGZpcnN0UGFnZUJ1dHRvbnMgPSBbXTtcbiAgICAgIGlmIChmaXJzdFBhZ2VJblJhbmdlID4gMCkge1xuICAgICAgICBmaXJzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICBrZXk6IDBcbiAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG4gICAgICAgIGlmIChmaXJzdFBhZ2VJblJhbmdlID4gMSAmJiBmaXJzdFBhZ2VJblJhbmdlICE9PSAyKSB7XG4gICAgICAgICAgZmlyc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAga2V5OiBcInN0YXJ0aW5nRWxsaXBzZXNcIixcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb24uZmlyc3RSYW5nZUFyaWFMYWJlbFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJTa2lwcGluZyBwYWdlcyAyIHRvIHtsYXN0UGFnZX1cIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBsYXN0UGFnZTogZmlyc3RQYWdlSW5SYW5nZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZ1bmN0aW9uIChmaXJzdFJhbmdlQXJpYUxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIHtcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGZpcnN0UmFuZ2VBcmlhTGFiZWwsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uX19pdGVtXCIsXG4gICAgICAgICAgICAgIGNzczogc3R5bGVzLmV1aVBhZ2luYXRpb25fX2VsbGlwc2lzXG4gICAgICAgICAgICB9LCBcIlxcdTIwMjZcIik7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpcnN0UGFnZUluUmFuZ2UgPT09IDIpIHtcbiAgICAgICAgICBmaXJzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgcGFnZUluZGV4OiAxLFxuICAgICAgICAgICAga2V5OiAxXG4gICAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBsYXN0UGFnZUJ1dHRvbnMgPSBbXTtcbiAgICAgIGlmIChsYXN0UGFnZUluUmFuZ2UgPCBwYWdlQ291bnQpIHtcbiAgICAgICAgaWYgKGxhc3RQYWdlSW5SYW5nZSArIDEgPT09IHBhZ2VDb3VudCAtIDEpIHtcbiAgICAgICAgICBsYXN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CdXR0b25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IGxhc3RQYWdlSW5SYW5nZSxcbiAgICAgICAgICAgIGtleTogbGFzdFBhZ2VJblJhbmdlXG4gICAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobGFzdFBhZ2VJblJhbmdlIDwgcGFnZUNvdW50IC0gMSkge1xuICAgICAgICAgIGxhc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAga2V5OiBcImVuZGluZ0VsbGlwc2VzXCIsXG4gICAgICAgICAgICB0b2tlbjogXCJldWlQYWdpbmF0aW9uLmxhc3RSYW5nZUFyaWFMYWJlbFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJTa2lwcGluZyBwYWdlcyB7Zmlyc3RQYWdlfSB0byB7bGFzdFBhZ2V9XCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgZmlyc3RQYWdlOiBsYXN0UGFnZUluUmFuZ2UgKyAxLFxuICAgICAgICAgICAgICBsYXN0UGFnZTogcGFnZUNvdW50IC0gMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZ1bmN0aW9uIChsYXN0UmFuZ2VBcmlhTGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwge1xuICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogbGFzdFJhbmdlQXJpYUxhYmVsLFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpUGFnaW5hdGlvbl9faXRlbVwiLFxuICAgICAgICAgICAgICBjc3M6IHN0eWxlcy5ldWlQYWdpbmF0aW9uX19lbGxpcHNpc1xuICAgICAgICAgICAgfSwgXCJcXHUyMDI2XCIpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CdXR0b25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgcGFnZUluZGV4OiBwYWdlQ291bnQgLSAxLFxuICAgICAgICAgIGtleTogcGFnZUNvdW50IC0gMVxuICAgICAgICB9LCBzaGFyZWRCdXR0b25Qcm9wcykpKTtcbiAgICAgIH1cbiAgICAgIHZhciBzZWxlY3RhYmxlUGFnZXMgPSBwYWdlcztcbiAgICAgIHZhciBhY2Nlc3NpYmxlTmFtZSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdFsnYXJpYS1sYWJlbCddICYmIHtcbiAgICAgICAgJ2FyaWEtbGFiZWwnOiByZXN0WydhcmlhLWxhYmVsJ11cbiAgICAgIH0pLCByZXN0WydhcmlhLWxhYmVsbGVkYnknXSAmJiB7XG4gICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiByZXN0WydhcmlhLWxhYmVsbGVkYnknXVxuICAgICAgfSk7XG4gICAgICBjZW50ZXJQYWdlQ291bnQgPSBfX19FbW90aW9uSlNYKFwidWxcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpUGFnaW5hdGlvbl9fbGlzdFwiLFxuICAgICAgICBjc3M6IHN0eWxlcy5ldWlQYWdpbmF0aW9uX19saXN0XG4gICAgICB9LCBhY2Nlc3NpYmxlTmFtZSksIGZpcnN0UGFnZUJ1dHRvbnMsIHNlbGVjdGFibGVQYWdlcywgbGFzdFBhZ2VCdXR0b25zKTtcbiAgICB9XG4gIH1cblxuICAvLyBBbGwgdGhlIGkxOG4gc3RyaW5ncyB1c2VkIHRvIGJ1aWxkIHRoZSB3aG9sZSBTUi1vbmx5IHRleHRcbiAgdmFyIGxhc3RMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24ubGFzdCcsICdMYXN0Jyk7XG4gIHZhciBwYWdlTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLnBhZ2UnLCAnUGFnZScpO1xuICB2YXIgb2ZMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24ub2YnLCAnb2YnKTtcbiAgdmFyIGNvbGxlY3Rpb25MYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24uY29sbGVjdGlvbicsICdjb2xsZWN0aW9uJyk7XG4gIHZhciBmcm9tRW5kTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLmZyb21FbmRMYWJlbCcsICdmcm9tIGVuZCcpO1xuXG4gIC8vIEJhc2VkIG9uIHRoZSBgYWN0aXZlUGFnZWAgY291bnQsIGJ1aWxkIHRoZSBmcm9udCBvZiB0aGUgU1Itb25seSB0ZXh0XG4gIC8vIGkuZS4gYFBhZ2UgMWAsIGBQYWdlIDIgZnJvbSBlbmRgLCBgTGFzdCBQYWdlYFxuICB2YXIgYWNjZXNzaWJsZVBhZ2VTdHJpbmcgPSBmdW5jdGlvbiBhY2Nlc3NpYmxlUGFnZVN0cmluZygpIHtcbiAgICBpZiAoYWN0aXZlUGFnZSA8IC0xKSByZXR1cm4gXCJcIi5jb25jYXQocGFnZUxhYmVsLCBcIiBcIikuY29uY2F0KE1hdGguYWJzKGFjdGl2ZVBhZ2UpLCBcIiBcIikuY29uY2F0KGZyb21FbmRMYWJlbCk7XG4gICAgaWYgKGFjdGl2ZVBhZ2UgPT09IC0xKSByZXR1cm4gXCJcIi5jb25jYXQobGFzdExhYmVsLCBcIiBcIikuY29uY2F0KHBhZ2VMYWJlbCk7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHBhZ2VMYWJlbCwgXCIgXCIpLmNvbmNhdChhY3RpdmVQYWdlICsgMSk7XG4gIH07XG5cbiAgLy8gSWYgYHBhZ2VDb3VudGAgaXMgdW5rbm93biBjYWxsIGl0IGBjb2xsZWN0aW9uYFxuICB2YXIgYWNjZXNzaWJsZUNvbGxlY3Rpb25TdHJpbmcgPSBwYWdlQ291bnQgPT09IDAgPyBjb2xsZWN0aW9uTGFiZWwgOiBwYWdlQ291bnQudG9TdHJpbmcoKTtcblxuICAvLyBDcmVhdGUgdGhlIHdob2xlIHN0cmluZyB3aXRoIHRvdGFsIHBhZ2VDb3VudCBvciBgY29sbGVjdGlvbmBcbiAgdmFyIGFjY2Vzc2libGVQYWdlQ291bnQgPSBcIlwiLmNvbmNhdChhY2Nlc3NpYmxlUGFnZVN0cmluZygpLCBcIiBcIikuY29uY2F0KG9mTGFiZWwsIFwiIFwiKS5jb25jYXQoYWNjZXNzaWJsZUNvbGxlY3Rpb25TdHJpbmcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcIm5hdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBzdHlsZXMuZXVpUGFnaW5hdGlvbixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIFwiYXJpYS1hdG9taWNcIjogXCJ0cnVlXCIsXG4gICAgXCJhcmlhLXJlbGV2YW50XCI6IFwiYWRkaXRpb25zIHRleHRcIixcbiAgICByb2xlOiBcInN0YXR1c1wiXG4gIH0sIGFjY2Vzc2libGVQYWdlQ291bnQpKSwgZmlyc3RCdXR0b24sIHByZXZpb3VzQnV0dG9uLCBjZW50ZXJQYWdlQ291bnQsIG5leHRCdXR0b24sIGxhc3RCdXR0b24pO1xufTtcbkV1aVBhZ2luYXRpb24ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcy5cbiAgICAgKiBQYXNzIGAwYCBpZiB0b3RhbCBjb3VudCBpcyB1bmtub3duLlxuICAgICAqL1xuICBwYWdlQ291bnQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHBhZ2UgdXNpbmcgYSB6ZXJvIGJhc2VkIGluZGV4LlxuICAgICAqIFNvIGlmIHlvdSBzZXQgdGhlIGFjdGl2ZVBhZ2UgdG8gMSwgaXQgd2lsbCBhY3RpdmF0ZSB0aGUgc2Vjb25kIHBhZ2UuXG4gICAgICogUGFzcyBgLTFgIGZvciBmb3JjaW5nIHRvIGxhc3QgcGFnZS5cbiAgICAgKi9cbiAgYWN0aXZlUGFnZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAgICogQ2xpY2sgaGFuZGxlciB0aGF0IHBhc3NlcyBiYWNrIHRoZSBpbnRlcm5hbGx5IGNhbGN1bGF0ZWQgYGFjdGl2ZVBhZ2VgIGluZGV4XG4gICAgICovXG4gIG9uUGFnZUNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogSWYgdHJ1ZSwgd2lsbCBvbmx5IHNob3cgbmV4dC9wcmV2IGFycm93cyBhbmQgc2ltcGxpZmllZCBudW1iZXIgc2V0LlxuICAgICAqL1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSWYgcGFzc2VkIGluLCBwYXNzZXMgdmFsdWUgdGhyb3VnaCB0byBlYWNoIGJ1dHRvbiB0byBzZXQgYXJpYS1jb250cm9scy5cbiAgICAgKi9cbiAgXCJhcmlhLWNvbnRyb2xzXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIEF1dG9tYXRpY2FsbHkgcmVkdWNlcyB0byB0aGUgYGNvbXByZXNzZWRgIHZlcnNpb24gb24gc21hbGxlciBzY3JlZW5zLlxuICAgICAqIFJlbW92ZSBjb21wbGV0ZWx5IHdpdGggYGZhbHNlYCBvciBwcm92aWRlIHlvdXIgb3duIGxpc3Qgb2YgcmVzcG9uc2l2ZSBicmVha3BvaW50cy5cbiAgICAgKi9cbiAgcmVzcG9uc2l2ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKVxufTtcbnZhciBQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciA9IGZ1bmN0aW9uIFBhZ2luYXRpb25CdXR0b25XcmFwcGVyKF9yZWYyKSB7XG4gIHZhciBwYWdlSW5kZXggPSBfcmVmMi5wYWdlSW5kZXgsXG4gICAgX3JlZjIkaW5MaXN0ID0gX3JlZjIuaW5MaXN0LFxuICAgIGluTGlzdCA9IF9yZWYyJGluTGlzdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGluTGlzdCxcbiAgICBhY3RpdmVQYWdlID0gX3JlZjIuYWN0aXZlUGFnZSxcbiAgICBwYWdlQ291bnQgPSBfcmVmMi5wYWdlQ291bnQsXG4gICAgYXJpYUNvbnRyb2xzID0gX3JlZjIuYXJpYUNvbnRyb2xzLFxuICAgIHNhZmVDbGljayA9IF9yZWYyLnNhZmVDbGljayxcbiAgICBkaXNhYmxlZCA9IF9yZWYyLmRpc2FibGVkO1xuICB2YXIgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlQYWdpbmF0aW9uQnV0dG9uLCB7XG4gICAgaXNBY3RpdmU6IHBhZ2VJbmRleCA9PT0gYWN0aXZlUGFnZSxcbiAgICB0b3RhbFBhZ2VzOiBwYWdlQ291bnQsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gc2FmZUNsaWNrKGUsIHBhZ2VJbmRleCk7XG4gICAgfSxcbiAgICBwYWdlSW5kZXg6IHBhZ2VJbmRleCxcbiAgICBcImFyaWEtY29udHJvbHNcIjogYXJpYUNvbnRyb2xzLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICB9KTtcbiAgaWYgKGluTGlzdCkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25fX2l0ZW1cIlxuICAgIH0sIGJ1dHRvbik7XG4gIH1cbiAgcmV0dXJuIGJ1dHRvbjtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpc0FjdGl2ZVwiLCBcInBhZ2VJbmRleFwiLCBcInRvdGFsUGFnZXNcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uRW1wdHkgfSBmcm9tICcuLi9idXR0b24nO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlQYWdpbmF0aW9uQnV0dG9uU3R5bGVzIH0gZnJvbSAnLi9wYWdpbmF0aW9uX2J1dHRvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpUGFnaW5hdGlvbkJ1dHRvbiA9IGZ1bmN0aW9uIEV1aVBhZ2luYXRpb25CdXR0b24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgaXNBY3RpdmUgPSBfcmVmLmlzQWN0aXZlLFxuICAgIHBhZ2VJbmRleCA9IF9yZWYucGFnZUluZGV4LFxuICAgIHRvdGFsUGFnZXMgPSBfcmVmLnRvdGFsUGFnZXMsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpUGFnaW5hdGlvbkJ1dHRvblN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBwYWdpbmF0aW9uQnV0dG9uQ3NzID0gW3N0eWxlcy5ldWlQYWdpbmF0aW9uQnV0dG9uLCBpc0FjdGl2ZSAmJiBzdHlsZXMuaXNBY3RpdmVdO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBhZ2luYXRpb25CdXR0b24nLCBjbGFzc05hbWUpO1xuICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBwYWdpbmF0aW9uQnV0dG9uQ3NzLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBzaXplOiAncycsXG4gICAgY29sb3I6ICd0ZXh0JyxcbiAgICAnZGF0YS10ZXN0LXN1YmonOiBcInBhZ2luYXRpb24tYnV0dG9uLVwiLmNvbmNhdChwYWdlSW5kZXgpLFxuICAgIGlzRGlzYWJsZWQ6IGlzQWN0aXZlXG4gIH0sIGlzQWN0aXZlICYmIHtcbiAgICAnYXJpYS1jdXJyZW50JzogdHJ1ZVxuICB9KSwgcmVzdFsnYXJpYS1jb250cm9scyddICYmIHtcbiAgICBocmVmOiBcIiNcIi5jb25jYXQocmVzdFsnYXJpYS1jb250cm9scyddKVxuICB9KSwgcmVzdCk7XG4gIHZhciBwYWdlTnVtYmVyID0gcGFnZUluZGV4ICsgMTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb25CdXR0b24ubG9uZ1BhZ2VTdHJpbmdcIixcbiAgICBkZWZhdWx0OiBcIlBhZ2Uge3BhZ2V9IG9mIHt0b3RhbFBhZ2VzfVwiLFxuICAgIHZhbHVlczoge1xuICAgICAgcGFnZTogcGFnZU51bWJlcixcbiAgICAgIHRvdGFsUGFnZXM6IHRvdGFsUGFnZXNcbiAgICB9XG4gIH0sIGZ1bmN0aW9uIChsb25nUGFnZVN0cmluZykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb25CdXR0b24uc2hvcnRQYWdlU3RyaW5nXCIsXG4gICAgICBkZWZhdWx0OiBcIlBhZ2Uge3BhZ2V9XCIsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgcGFnZTogcGFnZU51bWJlclxuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChzaG9ydFBhZ2VTdHJpbmcpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkVtcHR5LCBfZXh0ZW5kcyh7XG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiB0b3RhbFBhZ2VzID8gbG9uZ1BhZ2VTdHJpbmcgOiBzaG9ydFBhZ2VTdHJpbmdcbiAgICAgIH0sIHByb3BzKSwgcGFnZU51bWJlcik7XG4gICAgfSk7XG4gIH0pO1xufTtcbkV1aVBhZ2luYXRpb25CdXR0b24ucHJvcFR5cGVzID0ge1xuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogQW55IG9mIHRoZSBuYW1lZCBjb2xvciBwYWxldHRlIG9wdGlvbnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG4gIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cbiAgZmx1c2g6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHlwZTogUHJvcFR5cGVzLmFueSxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFt1bmRlZmluZWRdKV0pLFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQvY2hpbGRyZW4gb25seSAobm90IGljb24pXG4gICAgICpcbiAgICAgKiBUaGlzIHNwYW4gd3JhcHBlciBjYW4gYmUgcmVtb3ZlZCBieSBwYXNzaW5nIGB0ZXh0UHJvcHM9e2ZhbHNlfWAuXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBpc0FjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gIHBhZ2VJbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICB0b3RhbFBhZ2VzOiBQcm9wVHlwZXMubnVtYmVyXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgdmFyIGV1aVBhZ2luYXRpb25CdXR0b25TdHlsZXMgPSBmdW5jdGlvbiBldWlQYWdpbmF0aW9uQnV0dG9uU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVBhZ2luYXRpb25CdXR0b246IC8qI19fUFVSRV9fKi9jc3MoXCJvdXRsaW5lLW9mZnNldDotXCIsIGV1aVRoZW1lLmZvY3VzLndpZHRoLCBcIjs7bGFiZWw6ZXVpUGFnaW5hdGlvbkJ1dHRvbjtcIiksXG4gICAgLy8gU3RhdGVzXG4gICAgaXNBY3RpdmU6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQuYm9sZCwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCBcIjsmLCY6aG92ZXJ7Y3Vyc29yOmRlZmF1bHQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9O2xhYmVsOmlzQWN0aXZlO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbl9pY29uJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVBhZ2luYXRpb25CdXR0b25TdHlsZXMgfSBmcm9tICcuL3BhZ2luYXRpb25fYnV0dG9uLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHR5cGVUb0ljb25UeXBlTWFwID0ge1xuICBmaXJzdDogJ2Fycm93U3RhcnQnLFxuICBwcmV2aW91czogJ2Fycm93TGVmdCcsXG4gIG5leHQ6ICdhcnJvd1JpZ2h0JyxcbiAgbGFzdDogJ2Fycm93RW5kJ1xufTtcbmV4cG9ydCB2YXIgVFlQRVMgPSBrZXlzT2YodHlwZVRvSWNvblR5cGVNYXApO1xuZXhwb3J0IHZhciBFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cgPSBmdW5jdGlvbiBFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3coX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgdHlwZSA9IF9yZWYudHlwZSxcbiAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgYXJpYUNvbnRyb2xzID0gX3JlZi5hcmlhQ29udHJvbHMsXG4gICAgb25DbGljayA9IF9yZWYub25DbGljaztcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVBhZ2luYXRpb25CdXR0b25TdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgbGFiZWxzID0ge1xuICAgIGZpcnN0OiB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cuZmlyc3RQYWdlJywgJ0ZpcnN0IHBhZ2UnKSxcbiAgICBwcmV2aW91czogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LnByZXZpb3VzUGFnZScsICdQcmV2aW91cyBwYWdlJyksXG4gICAgbmV4dDogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93Lm5leHRQYWdlJywgJ05leHQgcGFnZScpLFxuICAgIGxhc3Q6IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5sYXN0UGFnZScsICdMYXN0IHBhZ2UnKVxuICB9O1xuICB2YXIgYnV0dG9uUHJvcHMgPSB7fTtcbiAgaWYgKGFyaWFDb250cm9scyAmJiAhZGlzYWJsZWQpIHtcbiAgICBidXR0b25Qcm9wcy5ocmVmID0gXCIjXCIuY29uY2F0KGFyaWFDb250cm9scyk7XG4gICAgYnV0dG9uUHJvcHNbJ2FyaWEtY29udHJvbHMnXSA9IGFyaWFDb250cm9scztcbiAgfVxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCdXR0b25JY29uLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBzdHlsZXMuZXVpUGFnaW5hdGlvbkJ1dHRvbixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aVBhZ2luYXRpb25BcnJvd0J1dHRvbicsIGNsYXNzTmFtZSksXG4gICAgY29sb3I6IFwidGV4dFwiLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBsYWJlbHNbdHlwZV0sXG4gICAgdGl0bGU6IGRpc2FibGVkID8gdW5kZWZpbmVkIDogbGFiZWxzW3R5cGVdLFxuICAgIGlzRGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInBhZ2luYXRpb24tYnV0dG9uLVwiLmNvbmNhdCh0eXBlKSxcbiAgICBpY29uVHlwZTogdHlwZVRvSWNvblR5cGVNYXBbdHlwZV1cbiAgfSwgYnV0dG9uUHJvcHMpKTtcbn07XG5FdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cucHJvcFR5cGVzID0ge1xuICB0eXBlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgYXJpYUNvbnRyb2xzOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrLCBldWlTY3JvbGxCYXJTdHlsZXMsIGV1aUZvbnRTaXplIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWRiZDJyYy1ldWlQYWdpbmF0aW9uX19saXN0XCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7bGFiZWw6ZXVpUGFnaW5hdGlvbl9fbGlzdDtcIlxufSA6IHtcbiAgbmFtZTogXCIxZGJkMnJjLWV1aVBhZ2luYXRpb25fX2xpc3RcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTtsYWJlbDpldWlQYWdpbmF0aW9uX19saXN0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVBhZ2luYXRpb25TdHlsZXMgPSBmdW5jdGlvbiBldWlQYWdpbmF0aW9uU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVBhZ2luYXRpb246IC8qI19fUFVSRV9fKi9jc3MoZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCksIFwiIGRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7XCIsIGxvZ2ljYWxDU1NXaXRoRmFsbGJhY2soJ292ZXJmbG93LXknLCAnaGlkZGVuJyksIFwiIFwiLCBsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrKCdvdmVyZmxvdy14JywgJ2F1dG8nKSwgXCI7O2xhYmVsOmV1aVBhZ2luYXRpb247XCIpLFxuICAgIC8vIEVsZW1lbnRzXG4gICAgZXVpUGFnaW5hdGlvbl9fY29tcHJlc3NlZFRleHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtsaW5lLWhlaWdodDoxOz5zcGFue1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4taG9yaXpvbnRhbCcsIGV1aVRoZW1lLnNpemUucyksIFwiIGZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodC5zZW1pQm9sZCwgXCI7JjpmaXJzdC1vZi10eXBle2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMucHJpbWFyeVRleHQsIFwiO319O2xhYmVsOmV1aVBhZ2luYXRpb25fX2NvbXByZXNzZWRUZXh0O1wiKSxcbiAgICBldWlQYWdpbmF0aW9uX19saXN0OiBfcmVmLFxuICAgIGV1aVBhZ2luYXRpb25fX2VsbGlwc2lzOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZFRleHQsIFwiO2ZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLmZvbnRTaXplLCBcIjtcIiwgbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS5zKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGV1aVRoZW1lLnNpemUubCksIFwiOztsYWJlbDpldWlQYWdpbmF0aW9uX19lbGxpcHNpcztcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbXBvbmVudERlZmF1bHRzIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXIvY29tcG9uZW50X2RlZmF1bHRzJztcbi8qKlxuICogVGFibGUgcGFnaW5hdGlvbiBwcm9wIGRlZmF1bHRzIGxpdmUgaW4gYSBzZXBhcmF0ZSBmaWxlIGJlY2F1c2VcbiAqIHRoZXknbGwgYmUgcmV1c2VkIGJ5IGJhc2ljIHRhYmxlcyBhbmQgZGF0YWdyaWRzIGFzIGZhbGxiYWNrc1xuICovXG5cbmV4cG9ydCB2YXIgZXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMgPSB7XG4gIGl0ZW1zUGVyUGFnZTogMTAsXG4gIGl0ZW1zUGVyUGFnZU9wdGlvbnM6IFsxMCwgMjUsIDUwXSxcbiAgc2hvd1BlclBhZ2VPcHRpb25zOiB0cnVlXG59O1xuZXhwb3J0IHZhciB1c2VFdWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cyA9IGZ1bmN0aW9uIHVzZUV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzKCkge1xuICB2YXIgY29uc3VtZXJEZWZhdWx0cyA9IHVzZUNvbXBvbmVudERlZmF1bHRzKCkuRXVpVGFibGVQYWdpbmF0aW9uO1xuICByZXR1cm4gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMpLCBjb25zdW1lckRlZmF1bHRzKTtcbiAgfSwgW2NvbnN1bWVyRGVmYXVsdHNdKTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJhbGlnblwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic3R5bGVcIiwgXCJjb21wcmVzc2VkXCIsIFwiZGVzY3JpcHRpb25Qcm9wc1wiLCBcImxpc3RJdGVtc1wiLCBcInRleHRTdHlsZVwiLCBcInRpdGxlUHJvcHNcIiwgXCJ0eXBlXCIsIFwicm93R3V0dGVyU2l6ZVwiLCBcImNvbHVtbkd1dHRlclNpemVcIiwgXCJjb2x1bW5XaWR0aHNcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzLCB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpRGVzY3JpcHRpb25MaXN0Q29udGV4dCB9IGZyb20gJy4vZGVzY3JpcHRpb25fbGlzdF9jb250ZXh0JztcbmltcG9ydCB7IEV1aURlc2NyaXB0aW9uTGlzdFRpdGxlIH0gZnJvbSAnLi9kZXNjcmlwdGlvbl9saXN0X3RpdGxlJztcbmltcG9ydCB7IEV1aURlc2NyaXB0aW9uTGlzdERlc2NyaXB0aW9uIH0gZnJvbSAnLi9kZXNjcmlwdGlvbl9saXN0X2Rlc2NyaXB0aW9uJztcbmltcG9ydCB7IGV1aURlc2NyaXB0aW9uTGlzdFN0eWxlcyB9IGZyb20gJy4vZGVzY3JpcHRpb25fbGlzdC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRGVzY3JpcHRpb25MaXN0ID0gZnVuY3Rpb24gRXVpRGVzY3JpcHRpb25MaXN0KF9yZWYpIHtcbiAgdmFyIF9yZWYkYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgIGFsaWduID0gX3JlZiRhbGlnbiA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZiRhbGlnbixcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIF9yZWYkY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICBjb21wcmVzc2VkID0gX3JlZiRjb21wcmVzc2VkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY29tcHJlc3NlZCxcbiAgICBkZXNjcmlwdGlvblByb3BzID0gX3JlZi5kZXNjcmlwdGlvblByb3BzLFxuICAgIGxpc3RJdGVtcyA9IF9yZWYubGlzdEl0ZW1zLFxuICAgIF9yZWYkdGV4dFN0eWxlID0gX3JlZi50ZXh0U3R5bGUsXG4gICAgdGV4dFN0eWxlID0gX3JlZiR0ZXh0U3R5bGUgPT09IHZvaWQgMCA/ICdub3JtYWwnIDogX3JlZiR0ZXh0U3R5bGUsXG4gICAgdGl0bGVQcm9wcyA9IF9yZWYudGl0bGVQcm9wcyxcbiAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgX3R5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdyb3cnIDogX3JlZiR0eXBlLFxuICAgIF9yZWYkcm93R3V0dGVyU2l6ZSA9IF9yZWYucm93R3V0dGVyU2l6ZSxcbiAgICByb3dHdXR0ZXJTaXplID0gX3JlZiRyb3dHdXR0ZXJTaXplID09PSB2b2lkIDAgPyAncycgOiBfcmVmJHJvd0d1dHRlclNpemUsXG4gICAgX3JlZiRjb2x1bW5HdXR0ZXJTaXplID0gX3JlZi5jb2x1bW5HdXR0ZXJTaXplLFxuICAgIGNvbHVtbkd1dHRlclNpemUgPSBfcmVmJGNvbHVtbkd1dHRlclNpemUgPT09IHZvaWQgMCA/ICdzJyA6IF9yZWYkY29sdW1uR3V0dGVyU2l6ZSxcbiAgICBjb2x1bW5XaWR0aHMgPSBfcmVmLmNvbHVtbldpZHRocyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzaG93UmVzcG9uc2l2ZUNvbHVtbnMgPSB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzKFsneHMnLCAncyddKTtcbiAgdmFyIHR5cGUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoX3R5cGUgPT09ICdyZXNwb25zaXZlQ29sdW1uJykge1xuICAgICAgcmV0dXJuIHNob3dSZXNwb25zaXZlQ29sdW1ucyA/ICdyb3cnIDogJ2NvbHVtbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBfdHlwZTtcbiAgICB9XG4gIH0sIFtfdHlwZSwgc2hvd1Jlc3BvbnNpdmVDb2x1bW5zXSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlEZXNjcmlwdGlvbkxpc3RTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlEZXNjcmlwdGlvbkxpc3QsIHN0eWxlc1t0eXBlXSwgc3R5bGVzW2FsaWduXSwgdHlwZSA9PT0gJ2NvbHVtbicgJiYgc3R5bGVzLnJvd0dhcFtyb3dHdXR0ZXJTaXplXSwgdHlwZSA9PT0gJ2NvbHVtbicgJiYgc3R5bGVzLmNvbHVtbkdhcFtjb2x1bW5HdXR0ZXJTaXplXV07XG4gIHZhciBpbmxpbmVTdHlsZXMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2NvbHVtbicgJiYgY29sdW1uV2lkdGhzKSB7XG4gICAgICAvLyBMZWF2ZSBzdHJpbmcgdmFsdWVzIGFzIGlzIC0gZS5nLiBpZiBhIGNvbnN1bWVyIHBhc3NlcyBpbiBhIHNwZWNpZmljICcyMDBweCcgb3IgJ21pbm1heCgpJ1xuICAgICAgdmFyIGNvbnZlcnROdW1iZXJzVG9GciA9IGZ1bmN0aW9uIGNvbnZlcnROdW1iZXJzVG9Gcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IFwiXCIuY29uY2F0KHZhbHVlLCBcImZyXCIpIDogdmFsdWU7XG4gICAgICB9O1xuICAgICAgdmFyIHRpdGxlV2lkdGggPSBjb252ZXJ0TnVtYmVyc1RvRnIoY29sdW1uV2lkdGhzWzBdKTtcbiAgICAgIHZhciBkZXNjcmlwdGlvbldpZHRoID0gY29udmVydE51bWJlcnNUb0ZyKGNvbHVtbldpZHRoc1sxXSk7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwiXCIuY29uY2F0KHRpdGxlV2lkdGgsIFwiIFwiKS5jb25jYXQoZGVzY3JpcHRpb25XaWR0aClcbiAgICAgIH0sIHN0eWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9LCBbc3R5bGUsIHR5cGUsIGNvbHVtbldpZHRoc10pO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aURlc2NyaXB0aW9uTGlzdCcsIGNsYXNzTmFtZSk7XG4gIHZhciByZW5kZXJlZExpc3RJdGVtcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmIChsaXN0SXRlbXMpIHtcbiAgICAgIHJldHVybiBsaXN0SXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gW19fX0Vtb3Rpb25KU1goRXVpRGVzY3JpcHRpb25MaXN0VGl0bGUsIF9leHRlbmRzKHtcbiAgICAgICAgICBrZXk6IFwidGl0bGUtXCIuY29uY2F0KGluZGV4KVxuICAgICAgICB9LCB0aXRsZVByb3BzKSwgaXRlbS50aXRsZSksIF9fX0Vtb3Rpb25KU1goRXVpRGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb24sIF9leHRlbmRzKHtcbiAgICAgICAgICBrZXk6IFwiZGVzY3JpcHRpb24tXCIuY29uY2F0KGluZGV4KVxuICAgICAgICB9LCBkZXNjcmlwdGlvblByb3BzKSwgaXRlbS5kZXNjcmlwdGlvbildO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbbGlzdEl0ZW1zLCBkZXNjcmlwdGlvblByb3BzLCB0aXRsZVByb3BzXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aURlc2NyaXB0aW9uTGlzdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZToge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICB0ZXh0U3R5bGU6IHRleHRTdHlsZSxcbiAgICAgIGFsaWduOiBhbGlnbixcbiAgICAgIHJvd0d1dHRlclNpemU6IHJvd0d1dHRlclNpemVcbiAgICB9XG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJkbFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIHN0eWxlOiBpbmxpbmVTdHlsZXNcbiAgfSwgcmVzdCwge1xuICAgIFwiZGF0YS10eXBlXCI6IF90eXBlXG4gIH0pLCBsaXN0SXRlbXMgPyByZW5kZXJlZExpc3RJdGVtcyA6IGNoaWxkcmVuKSk7XG59O1xuRXVpRGVzY3JpcHRpb25MaXN0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGxpc3RJdGVtczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICB0aXRsZTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRcbiAgfSkuaXNSZXF1aXJlZCksXG4gIC8qKlxuICAgICAqIFRleHQgYWxpZ25tZW50XG4gICAgICovXG4gIGFsaWduOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBTbWFsbGVyIHRleHQgYW5kIGNvbmRlbnNlZCBzcGFjaW5nXG4gICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBIb3cgc2hvdWxkIHRoZSBjb250ZW50IGJlIHN0eWxlZCwgYnkgZGVmYXVsdFxuICAgICAqIHRoaXMgd2lsbCBlbXBoYXNpemUgdGhlIHRpdGxlXG4gICAgICovXG4gIHRleHRTdHlsZTogUHJvcFR5cGVzLm9uZU9mKFtcIm5vcm1hbFwiLCBcInJldmVyc2VcIl0pLFxuICAvKipcbiAgICAgKiBIb3cgZWFjaCBpdGVtIHNob3VsZCBiZSBsYWlkIG91dFxuICAgICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBQcm9wcyBvYmplY3QgdG8gYmUgcGFzc2VkIHRvIGBFdWlEZXNjcmlwdGlvbkxpc3RUaXRsZWBcbiAgICAgKi9cbiAgdGl0bGVQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgLyoqXG4gICAgICogUHJvcHMgb2JqZWN0IHRvIGJlIHBhc3NlZCB0byBgRXVpRGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb25gXG4gICAgICovXG4gIGRlc2NyaXB0aW9uUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIC8qKlxuICAgICAqIEFsbG93cyBjdXN0b21pemluZyB0aGUgdmVydGljYWwgc3BhY2luZyBiZXR3ZWVuIHJvd3MuXG4gICAgICovXG4gIHJvd0d1dHRlclNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFsbG93cyBjdXN0b21pemluZyB0aGUgaG9yaXpvbnRhbCBzcGFjaW5nIGJldHdlZW4gY29sdW1ucy5cbiAgICAgKlxuICAgICAqIE9ubHkgYXBwbGllcyB0byBgY29sdW1uYCBhbmQgYHJlc3BvbnNpdmVDb2x1bW5gIHR5cGVzLlxuICAgICAqL1xuICBjb2x1bW5HdXR0ZXJTaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBbGxvd3MgY3VzdG9taXppbmcgc3BlY2lmaWMgY29sdW1uIHdpZHRocyAoZS5nLiBgWycxMDBweCcsICcyMDBweCddYCkuIFRoZSBmaXJzdFxuICAgICAqIGFycmF5IHZhbHVlIGFwcGxpZXMgdG8gdGhlIHRpdGxlIGNvbHVtbiwgYW5kIHRoZSBzZWNvbmQgYXBwbGllcyB0byB0aGUgZGVzY3JpcHRpb24gY29sdW1uLlxuICAgICAqXG4gICAgICogUGFzc2luZyBudW1iZXJzIGluc3RlYWQgb2YgQ1NTIHdpZHRoIHN0cmluZ3Mgd2lsbCB1c2UgYSByYXRpbyBvZiB3aWR0aHMuXG4gICAgICogRm9yIGV4YW1wbGUsIFsxLCAzXSB3aWxsIHJlbmRlciBhIGRlc2NyaXB0aW9uIGNvbHVtbiAzeCB0aGUgd2lkdGggb2YgdGhlIHRpdGxlIGNvbHVtbi5cbiAgICAgKiBJbiBvdGhlciB3b3JkcywgZGVzY3JpcHRpb25zIHdpbGwgaGF2ZSBhIHdpZHRoIG9mIGA3NSVgIGFuZCB0aXRsZXMgd2lsbCBoYXZlIGEgd2lkdGggb2YgYDI1JWAuXG4gICAgICpcbiAgICAgKiBPbmx5IGFwcGxpZXMgdG8gYGNvbHVtbmAgYW5kIGByZXNwb25zaXZlQ29sdW1uYCB0eXBlcy5cbiAgICAgKlxuICAgICAqIF9BZHZhbmNlZCB1c2FnZSBub3RlOl8gY29sdW1uIHdpZHRoIHN0cmluZ3MgYWxzbyBhY2NlcHQgW0NTUyBncmlkIHNwZWNpYWwgdW5pdHMsXG4gICAgICogc2l6aW5nLCBrZXl3b3JkcywgYW5kIHNpemluZyBmdW5jdGlvbnNdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL2NvbXBsZXRlLWd1aWRlLWdyaWQvI2FhLXNwZWNpYWwtdW5pdHMtZnVuY3Rpb25zKS5cbiAgICAgKi9cbiAgY29sdW1uV2lkdGhzOiBQcm9wVHlwZXMuYW55XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBjb250ZXh0RGVmYXVsdHMgPSB7XG4gIHR5cGU6ICdyb3cnLFxuICB0ZXh0U3R5bGU6ICdub3JtYWwnLFxuICBhbGlnbjogJ2xlZnQnLFxuICByb3dHdXR0ZXJTaXplOiAncydcbn07XG5leHBvcnQgdmFyIEV1aURlc2NyaXB0aW9uTGlzdENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChjb250ZXh0RGVmYXVsdHMpOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlEZXNjcmlwdGlvbkxpc3RDb250ZXh0IH0gZnJvbSAnLi9kZXNjcmlwdGlvbl9saXN0X2NvbnRleHQnO1xuaW1wb3J0IHsgZXVpRGVzY3JpcHRpb25MaXN0VGl0bGVTdHlsZXMgfSBmcm9tICcuL2Rlc2NyaXB0aW9uX2xpc3RfdGl0bGUuc3R5bGVzJztcblxuLy8gRXhwb3J0IHJlcXVpcmVkIGZvciBjb3JyZWN0IGluZmVyZW5jZSBieSBIT0NzXG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlEZXNjcmlwdGlvbkxpc3RUaXRsZSA9IGZ1bmN0aW9uIEV1aURlc2NyaXB0aW9uTGlzdFRpdGxlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfdXNlQ29udGV4dCA9IHVzZUNvbnRleHQoRXVpRGVzY3JpcHRpb25MaXN0Q29udGV4dCksXG4gICAgdHlwZSA9IF91c2VDb250ZXh0LnR5cGUsXG4gICAgdGV4dFN0eWxlID0gX3VzZUNvbnRleHQudGV4dFN0eWxlLFxuICAgIGNvbXByZXNzZWQgPSBfdXNlQ29udGV4dC5jb21wcmVzc2VkLFxuICAgIGFsaWduID0gX3VzZUNvbnRleHQuYWxpZ24sXG4gICAgcm93R3V0dGVyU2l6ZSA9IF91c2VDb250ZXh0LnJvd0d1dHRlclNpemU7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlEZXNjcmlwdGlvbkxpc3RUaXRsZVN0eWxlcyk7XG4gIHZhciBjb25kaXRpb25hbFN0eWxlcyA9IGNvbXByZXNzZWQgJiYgdGV4dFN0eWxlICE9PSAncmV2ZXJzZScgPyBbc3R5bGVzLmZvbnRTdHlsZXMuY29tcHJlc3NlZF0gOiBbc3R5bGVzLmZvbnRTdHlsZXNbdGV4dFN0eWxlXV07XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2lubGluZSc6XG4gICAgICBjb25kaXRpb25hbFN0eWxlcyA9IGNvbXByZXNzZWQgPyBbc3R5bGVzLmlubGluZVN0eWxlcy5jb21wcmVzc2VkXSA6IFtzdHlsZXMuaW5saW5lU3R5bGVzLm5vcm1hbF07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyb3cnOlxuICAgICAgY29uZGl0aW9uYWxTdHlsZXMucHVzaChzdHlsZXNbcm93R3V0dGVyU2l6ZV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uJzpcbiAgICAgIGlmIChhbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgY29uZGl0aW9uYWxTdHlsZXMucHVzaChzdHlsZXMucmlnaHQpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRGVzY3JpcHRpb25MaXN0X190aXRsZSwgc3R5bGVzW3R5cGVdXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNvbmRpdGlvbmFsU3R5bGVzKSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRGVzY3JpcHRpb25MaXN0X190aXRsZScsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZHRcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aURlc2NyaXB0aW9uTGlzdFRpdGxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvbnRTaXplLCBldWlUZXh0QnJlYWtXb3JkLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpVGl0bGUgfSBmcm9tICcuLi90aXRsZS90aXRsZS5zdHlsZXMnO1xuZXhwb3J0IHZhciBldWlEZXNjcmlwdGlvbkxpc3RUaXRsZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aURlc2NyaXB0aW9uTGlzdFRpdGxlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcbiAgcmV0dXJuIHtcbiAgICBldWlEZXNjcmlwdGlvbkxpc3RfX3RpdGxlOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHRCcmVha1dvcmQoKSwgXCI7O2xhYmVsOmV1aURlc2NyaXB0aW9uTGlzdF9fdGl0bGU7XCIpLFxuICAgIC8vIFR5cGVzXG4gICAgcm93OiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOnJvdztcIiksXG4gICAgY29sdW1uOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmNvbHVtbjtcIiksXG4gICAgaW5saW5lOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTppbmxpbmU7Ym9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCwgXCI7Zm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0Lm1lZGl1bSwgXCI7YmFja2dyb3VuZC1jb2xvcjpcIiwgY29sb3JNb2RlID09PSAnREFSSycgPyBldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSA6IGV1aVRoZW1lLmNvbG9ycy5saWdodGVzdFNoYWRlLCBcIjtcIiwgbG9naWNhbENTUygnbWFyZ2luLXZlcnRpY2FsJywgJzAnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiIFwiLCBjb2xvck1vZGUgPT09ICdEQVJLJyAmJiBcImNvbG9yOiBcIi5jb25jYXQoZXVpVGhlbWUuY29sb3JzLnRpdGxlLCBcIjtcIiksIFwiJjpmaXJzdC1vZi10eXBle1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tbGVmdCcsICcwJyksIFwiO307bGFiZWw6aW5saW5lO1wiKSxcbiAgICAvLyBUaGlzIG5lc3RlZCBibG9jayBoYW5kbGVzIGp1c3QgdGhlIGZvbnQgc3R5bGluZyBiYXNlZCBvbiBjb21wcmVzc2VkIGFuZCByZXZlcnNlXG4gICAgZm9udFN0eWxlczoge1xuICAgICAgbm9ybWFsOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiOztsYWJlbDpub3JtYWw7XCIpLFxuICAgICAgcmV2ZXJzZTogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiOztsYWJlbDpyZXZlcnNlO1wiKSxcbiAgICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJyksIFwiOztsYWJlbDpjb21wcmVzc2VkO1wiKVxuICAgIH0sXG4gICAgLy8gSW5saW5lIHR5cGVzXG4gICAgaW5saW5lU3R5bGVzOiB7XG4gICAgICBub3JtYWw6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIiBcIiwgbG9naWNhbENTUygncGFkZGluZy12ZXJ0aWNhbCcsICcxcHgnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIjs7bGFiZWw6bm9ybWFsO1wiKSxcbiAgICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJykuZm9udFNpemUsIFwiO2xpbmUtaGVpZ2h0OlwiLCBldWlUaGVtZS5mb250LmxpbmVIZWlnaHRNdWx0aXBsaWVyLCBcIjtcIiwgbG9naWNhbENTUygncGFkZGluZy12ZXJ0aWNhbCcsICcwJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7O2xhYmVsOmNvbXByZXNzZWQ7XCIpXG4gICAgfSxcbiAgICAvLyBBbGlnbm1lbnRcbiAgICByaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdyaWdodCcpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpLFxuICAgIC8vIEd1dHRlclxuICAgIC8vIEFkZCBtYXJnaW4gb25seSB0byB0aGUgbm9uLWZpcnN0IDxkdD4uXG4gICAgczogLyojX19QVVJFX18qL2NzcyhcIiY6bm90KDpmaXJzdC1vZi10eXBlKXtcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGV1aVRoZW1lLnNpemUucyksIFwiO307bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhcIiY6bm90KDpmaXJzdC1vZi10eXBlKXtcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGV1aVRoZW1lLnNpemUuYmFzZSksIFwiO307bGFiZWw6bTtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aURlc2NyaXB0aW9uTGlzdENvbnRleHQgfSBmcm9tICcuL2Rlc2NyaXB0aW9uX2xpc3RfY29udGV4dCc7XG5pbXBvcnQgeyBldWlEZXNjcmlwdGlvbkxpc3REZXNjcmlwdGlvblN0eWxlcyB9IGZyb20gJy4vZGVzY3JpcHRpb25fbGlzdF9kZXNjcmlwdGlvbi5zdHlsZXMnO1xuXG4vLyBFeHBvcnQgcmVxdWlyZWQgZm9yIGNvcnJlY3QgaW5mZXJlbmNlIGJ5IEhPQ3NcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aURlc2NyaXB0aW9uTGlzdERlc2NyaXB0aW9uID0gZnVuY3Rpb24gRXVpRGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb24oX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIF91c2VDb250ZXh0ID0gdXNlQ29udGV4dChFdWlEZXNjcmlwdGlvbkxpc3RDb250ZXh0KSxcbiAgICB0eXBlID0gX3VzZUNvbnRleHQudHlwZSxcbiAgICB0ZXh0U3R5bGUgPSBfdXNlQ29udGV4dC50ZXh0U3R5bGUsXG4gICAgY29tcHJlc3NlZCA9IF91c2VDb250ZXh0LmNvbXByZXNzZWQsXG4gICAgYWxpZ24gPSBfdXNlQ29udGV4dC5hbGlnbjtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aURlc2NyaXB0aW9uTGlzdERlc2NyaXB0aW9uU3R5bGVzKTtcbiAgdmFyIGNvbmRpdGlvbmFsU3R5bGVzID0gY29tcHJlc3NlZCAmJiB0ZXh0U3R5bGUgPT09ICdyZXZlcnNlJyA/IFtzdHlsZXMuZm9udFN0eWxlcy5jb21wcmVzc2VkXSA6IFtzdHlsZXMuZm9udFN0eWxlc1t0ZXh0U3R5bGVdXTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnaW5saW5lJzpcbiAgICAgIGNvbmRpdGlvbmFsU3R5bGVzID0gY29tcHJlc3NlZCA/IFtzdHlsZXMuaW5saW5lU3R5bGVzLmNvbXByZXNzZWRdIDogW3N0eWxlcy5pbmxpbmVTdHlsZXMubm9ybWFsXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbic6XG4gICAgICBpZiAoYWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIGNvbmRpdGlvbmFsU3R5bGVzLnB1c2goc3R5bGVzLmxlZnQpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRGVzY3JpcHRpb25MaXN0X19kZXNjcmlwdGlvbiwgc3R5bGVzW3R5cGVdXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNvbmRpdGlvbmFsU3R5bGVzKSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRGVzY3JpcHRpb25MaXN0X19kZXNjcmlwdGlvbicsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGRcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aURlc2NyaXB0aW9uTGlzdERlc2NyaXB0aW9uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvbnRTaXplLCBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpVGl0bGUgfSBmcm9tICcuLi90aXRsZS90aXRsZS5zdHlsZXMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXluOWdpZy1pbmxpbmVcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6aW5saW5lO2xhYmVsOmlubGluZTtcIlxufSA6IHtcbiAgbmFtZTogXCIxeW45Z2lnLWlubGluZVwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmU7bGFiZWw6aW5saW5lO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aURlc2NyaXB0aW9uTGlzdERlc2NyaXB0aW9uU3R5bGVzID0gZnVuY3Rpb24gZXVpRGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb25TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiB7XG4gICAgZXVpRGVzY3JpcHRpb25MaXN0X19kZXNjcmlwdGlvbjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlEZXNjcmlwdGlvbkxpc3RfX2Rlc2NyaXB0aW9uO1wiKSxcbiAgICAvLyBUeXBlc1xuICAgIHJvdzogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpyb3c7XCIpLFxuICAgIGNvbHVtbjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpjb2x1bW47XCIpLFxuICAgIGlubGluZTogX3JlZixcbiAgICAvLyBUaGlzIG5lc3RlZCBibG9jayBoYW5kbGVzIGp1c3QgdGhlIGZvbnQgc3R5bGluZyBiYXNlZCBvbiBjb21wcmVzc2VkIGFuZCByZXZlcnNlXG4gICAgZm9udFN0eWxlczoge1xuICAgICAgbm9ybWFsOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7O2xhYmVsOm5vcm1hbDtcIiksXG4gICAgICByZXZlcnNlOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiOztsYWJlbDpyZXZlcnNlO1wiKSxcbiAgICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJyksIFwiOztsYWJlbDpjb21wcmVzc2VkO1wiKVxuICAgIH0sXG4gICAgLy8gTmVzdGVkIGlubGluZSBzdHlsZXMgZm9yIHR5cGUgYW5kIGZvbnRcbiAgICBpbmxpbmVTdHlsZXM6IHtcbiAgICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnKSwgXCI7O2xhYmVsOmNvbXByZXNzZWQ7XCIpLFxuICAgICAgbm9ybWFsOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7O2xhYmVsOm5vcm1hbDtcIilcbiAgICB9LFxuICAgIC8vIENvbHVtbiB0eXBlcyBzaG91bGQgYWxpZ24gZGVzY3JpcHRpb24gdGV4dCB0byB0aGUgbGVmdCB3aGVuIEV1aURlY3JpcHRpb25MaXN0IGlzIGNlbnRlcmVkXG4gICAgbGVmdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiOztsYWJlbDpsZWZ0O1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbFRleHRBbGlnbkNTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInpyNWZoYy1jb2x1bW5cIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KGF1dG8sIG1heC1jb250ZW50KSBtaW5tYXgoYXV0bywgbWF4LWNvbnRlbnQpO2FsaWduLWl0ZW1zOmJhc2VsaW5lO2xhYmVsOmNvbHVtbjtcIlxufSA6IHtcbiAgbmFtZTogXCJ6cjVmaGMtY29sdW1uXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heChhdXRvLCBtYXgtY29udGVudCkgbWlubWF4KGF1dG8sIG1heC1jb250ZW50KTthbGlnbi1pdGVtczpiYXNlbGluZTtsYWJlbDpjb2x1bW47XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpRGVzY3JpcHRpb25MaXN0U3R5bGVzID0gZnVuY3Rpb24gZXVpRGVzY3JpcHRpb25MaXN0U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4ge1xuICAgIGV1aURlc2NyaXB0aW9uTGlzdDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlEZXNjcmlwdGlvbkxpc3Q7XCIpLFxuICAgIC8vIFR5cGVzXG4gICAgcm93OiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOnJvdztcIiksXG4gICAgaW5saW5lOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmlubGluZTtcIiksXG4gICAgY29sdW1uOiBfcmVmLFxuICAgIGNvbHVtbkdhcDoge1xuICAgICAgczogLyojX19QVVJFX18qL2NzcyhcImNvbHVtbi1nYXA6XCIsIGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJjb2x1bW4tZ2FwOlwiLCBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOm07XCIpXG4gICAgfSxcbiAgICByb3dHYXA6IHtcbiAgICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJyb3ctZ2FwOlwiLCBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6cztcIiksXG4gICAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwicm93LWdhcDpcIiwgZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLnNpemUubSwgXCI7O2xhYmVsOm07XCIpXG4gICAgfSxcbiAgICAvLyBBbGlnbm1lbnRcbiAgICBjZW50ZXI6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiOztsYWJlbDpjZW50ZXI7XCIpLFxuICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIjs7bGFiZWw6bGVmdDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJpc1NlbGVjdGVkXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGV1aVRhYlN0eWxlcywgZXVpVGFiQ29udGVudFN0eWxlcyB9IGZyb20gJy4vdGFiLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlUYWJzQ29udGV4dCB9IGZyb20gJy4vdGFic19jb250ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYiA9IGZ1bmN0aW9uIEV1aVRhYihfcmVmKSB7XG4gIHZhciBpc1NlbGVjdGVkID0gX3JlZi5pc1NlbGVjdGVkLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgcmVsID0gX3JlZi5yZWwsXG4gICAgcHJlcGVuZCA9IF9yZWYucHJlcGVuZCxcbiAgICBhcHBlbmQgPSBfcmVmLmFwcGVuZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfdXNlQ29udGV4dCA9IHVzZUNvbnRleHQoRXVpVGFic0NvbnRleHQpLFxuICAgIHNpemUgPSBfdXNlQ29udGV4dC5zaXplLFxuICAgIGV4cGFuZCA9IF91c2VDb250ZXh0LmV4cGFuZDtcbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgZGlzYWJsZWQgPSBfZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuXG4gIC8vIEtlZXAgQ1NTIGNsYXNzbmFtZXMgZm9yIHJlZmVyZW5jZVxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYicsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWItaXNTZWxlY3RlZCc6IGlzU2VsZWN0ZWRcbiAgfSk7XG4gIHZhciB0YWJTdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJTdHlsZXMpO1xuICB2YXIgY3NzVGFiU3R5bGVzID0gW3RhYlN0eWxlcy5ldWlUYWIsIGV4cGFuZCAmJiB0YWJTdHlsZXMuZXhwYW5kZWQsIGRpc2FibGVkICYmIHRhYlN0eWxlcy5kaXNhYmxlZC5kaXNhYmxlZCwgaXNTZWxlY3RlZCAmJiAoZGlzYWJsZWQgPyB0YWJTdHlsZXMuZGlzYWJsZWQuc2VsZWN0ZWQgOiB0YWJTdHlsZXMuc2VsZWN0ZWQpXTtcbiAgdmFyIHRhYkNvbnRlbnRTdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJDb250ZW50U3R5bGVzKTtcbiAgdmFyIGNzc1RhYkNvbnRlbnRTdHlsZXMgPSBbdGFiQ29udGVudFN0eWxlcy5ldWlUYWJfX2NvbnRlbnQsIHNpemUgJiYgdGFiQ29udGVudFN0eWxlc1tzaXplXV07XG4gIHZhciBwcmVwZW5kTm9kZSA9IHByZXBlbmQgJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX3ByZXBlbmRcIlxuICB9LCBwcmVwZW5kKTtcbiAgdmFyIGFwcGVuZE5vZGUgPSBhcHBlbmQgJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX2FwcGVuZFwiXG4gIH0sIGFwcGVuZCk7XG5cbiAgLy8gIDxhPiBlbGVtZW50cyBkb24ndCByZXNwZWN0IHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZS4gU28gaWYgd2UncmUgZGlzYWJsZWQsIHdlJ2xsIGp1c3QgcHJldGVuZFxuICAvLyAgdGhpcyBpcyBhIGJ1dHRvbiBhbmQgcGlnZ3liYWNrIG9mZiBpdHMgZGlzYWJsZWQgc3R5bGVzLlxuICBpZiAoaHJlZiAmJiAhZGlzYWJsZWQpIHtcbiAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICAgIHJvbGU6IFwidGFiXCIsXG4gICAgICBcImFyaWEtc2VsZWN0ZWRcIjogISFpc1NlbGVjdGVkLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY3NzOiBjc3NUYWJTdHlsZXMsXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHNlY3VyZVJlbFxuICAgIH0sIHJlc3QpLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVRhYl9fY29udGVudCBldWktdGV4dFRydW5jYXRlXCIsXG4gICAgICBjc3M6IGNzc1RhYkNvbnRlbnRTdHlsZXNcbiAgICB9LCBjaGlsZHJlbiksIGFwcGVuZE5vZGUpO1xuICB9XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcInRhYlwiLFxuICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAhIWlzU2VsZWN0ZWQsXG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NUYWJTdHlsZXMsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gIH0sIHJlc3QpLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX2NvbnRlbnQgZXVpLXRleHRUcnVuY2F0ZVwiLFxuICAgIGNzczogY3NzVGFiQ29udGVudFN0eWxlc1xuICB9LCBjaGlsZHJlbiksIGFwcGVuZE5vZGUpO1xufTtcbkV1aVRhYi5wcm9wVHlwZXMgPSB7XG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFBsYWNlcyBjb250ZW50IGJlZm9yZSB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICovXG4gIC8qKlxuICAgICAqIFBsYWNlcyBjb250ZW50IGJlZm9yZSB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICovXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBQbGFjZXMgY29udGVudCBhZnRlciB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICovXG4gIC8qKlxuICAgICAqIFBsYWNlcyBjb250ZW50IGFmdGVyIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBtYXRoV2l0aFVuaXRzLCBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjEwdHNvNzgtZXhwYW5kZWRcIixcbiAgc3R5bGVzOiBcImZsZXgtYmFzaXM6MCU7ZmxleC1ncm93OjE7anVzdGlmeS1jb250ZW50OmNlbnRlcjtsYWJlbDpleHBhbmRlZDtcIlxufSA6IHtcbiAgbmFtZTogXCIxMHRzbzc4LWV4cGFuZGVkXCIsXG4gIHN0eWxlczogXCJmbGV4LWJhc2lzOjAlO2ZsZXgtZ3JvdzoxO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGFiZWw6ZXhwYW5kZWQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpVGFiU3R5bGVzID0gZnVuY3Rpb24gZXVpVGFiU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVRhYjogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6ZmxleDtjdXJzb3I6cG9pbnRlcjtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjtcIiwgbG9naWNhbENTUygncGFkZGluZy12ZXJ0aWNhbCcsIDApLCBcIiBcIiwgbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiZm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0LnNlbWlCb2xkLCBcIjtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRpdGxlLCBcIjsmOmZvY3Vze291dGxpbmUtb2Zmc2V0Oi1cIiwgZXVpVGhlbWUuZm9jdXMud2lkdGgsIFwiO307bGFiZWw6ZXVpVGFiO1wiKSxcbiAgICAvLyB2YXJpYXRpb25zXG4gICAgZXhwYW5kZWQ6IF9yZWYsXG4gICAgc2VsZWN0ZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJib3gtc2hhZG93Omluc2V0IDAgLVwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpY2ssIFwiIDAgXCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCBcIjtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnlUZXh0LCBcIjs7bGFiZWw6c2VsZWN0ZWQ7XCIpLFxuICAgIGRpc2FibGVkOiB7XG4gICAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2NzcyhcImN1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRpc2FibGVkVGV4dCwgXCI7O2xhYmVsOmRpc2FibGVkO1wiKSxcbiAgICAgIHNlbGVjdGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiYm94LXNoYWRvdzppbnNldCAwIC1cIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaWNrLCBcIiAwIFwiLCBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0LCBcIjs7bGFiZWw6c2VsZWN0ZWQ7XCIpXG4gICAgfVxuICB9O1xufTtcbmV4cG9ydCB2YXIgZXVpVGFiQ29udGVudFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRhYkNvbnRlbnRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUYWJfX2NvbnRlbnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHRbZXVpVGhlbWUuZm9udC50aXRsZS53ZWlnaHRdLCBcIjs7bGFiZWw6ZXVpVGFiX19jb250ZW50O1wiKSxcbiAgICAvLyBzaXplc1xuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJykuZm9udFNpemUsIFwiO2xpbmUtaGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplLnhsLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhcImZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLmZvbnRTaXplLCBcIjtsaW5lLWhlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC1zaXplOlwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdtJykuZm9udFNpemUsIFwiO2xpbmUtaGVpZ2h0OlwiLCBtYXRoV2l0aFVuaXRzKFtldWlUaGVtZS5zaXplLnhsLCBldWlUaGVtZS5zaXplLnNdLCBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgcmV0dXJuIHggKyB5O1xuICAgIH0pLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ2wnKS5mb250U2l6ZSwgXCI7bGluZS1oZWlnaHQ6XCIsIG1hdGhXaXRoVW5pdHMoW2V1aVRoZW1lLnNpemUueHh4bCwgZXVpVGhlbWUuc2l6ZS5zXSwgZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ICsgeTtcbiAgICB9KSwgXCI7O2xhYmVsOnhsO1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgY29udGV4dERlZmF1bHRzID0ge1xuICBleHBhbmQ6IGZhbHNlLFxuICBzaXplOiAnbSdcbn07XG5leHBvcnQgdmFyIEV1aVRhYnNDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoY29udGV4dERlZmF1bHRzKTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYm90dG9tQm9yZGVyXCIsIFwiZXhwYW5kXCIsIFwic2l6ZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpVGFic1N0eWxlcyB9IGZyb20gJy4vdGFicy5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpVGFic0NvbnRleHQgfSBmcm9tICcuL3RhYnNfY29udGV4dCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsncycsICdtJywgJ2wnLCAneGwnXTtcbmV4cG9ydCB2YXIgRXVpVGFicyA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJGJvdHRvbUJvcmRlciA9IF9yZWYuYm90dG9tQm9yZGVyLFxuICAgIGJvdHRvbUJvcmRlciA9IF9yZWYkYm90dG9tQm9yZGVyID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRib3R0b21Cb3JkZXIsXG4gICAgX3JlZiRleHBhbmQgPSBfcmVmLmV4cGFuZCxcbiAgICBleHBhbmQgPSBfcmVmJGV4cGFuZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGV4cGFuZCxcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJzJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRhYnNTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUYWJzLCBzdHlsZXNbc2l6ZV0sIGJvdHRvbUJvcmRlciAmJiBzdHlsZXMuYm90dG9tQm9yZGVyXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCBjaGlsZHJlbiAmJiB7XG4gICAgcm9sZTogJ3RhYmxpc3QnXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aVRhYnNDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHtcbiAgICAgIGV4cGFuZDogZXhwYW5kLFxuICAgICAgc2l6ZTogc2l6ZVxuICAgIH1cbiAgfSwgY2hpbGRyZW4pKTtcbn0pO1xuRXVpVGFicy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgICAqIEV2ZW5seSBzdHJldGNoZXMgZWFjaCB0YWIgdG8gZmlsbCB0aGVcbiAgICAgICAqIGhvcml6b250YWwgc3BhY2VcbiAgICAgICAqL1xuICBleHBhbmQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIEFkZHMgYSBib3R0b20gYm9yZGVyIHRvIHNlcGFyYXRlIGl0IGZyb20gdGhlIGNvbnRlbnQgYWZ0ZXJcbiAgICAgICAqL1xuICBib3R0b21Cb3JkZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIFNpemVzIGFmZmVjdCBib3RoIGZvbnQgc2l6ZSBhbmQgb3ZlcmFsbCBzaXplLlxuICAgICAgICogT25seSB1c2UgdGhlIGB4bGAgc2l6ZSB3aGVuIGRpc3BsYXllZCBhcyBwYWdlIHRpdGxlcy5cbiAgICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55XG59O1xuRXVpVGFicy5kaXNwbGF5TmFtZSA9ICdFdWlUYWJzJzsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbENTU1dpdGhGYWxsYmFjayB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpVGFic1N0eWxlcyA9IGZ1bmN0aW9uIGV1aVRhYnNTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUYWJzOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTpmbGV4O1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIiBcIiwgbG9naWNhbENTU1dpdGhGYWxsYmFjaygnb3ZlcmZsb3cteCcsICdhdXRvJyksIFwiIFwiLCBsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrKCdvdmVyZmxvdy15JywgJ2hpZGRlbicpLCBcIiBwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4LXNocmluazowOztsYWJlbDpldWlUYWJzO1wiKSxcbiAgICBib3R0b21Cb3JkZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJib3gtc2hhZG93Omluc2V0IDAgLVwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgMCBcIiwgZXVpVGhlbWUuYm9yZGVyLmNvbG9yLCBcIjs7bGFiZWw6Ym90dG9tQm9yZGVyO1wiKSxcbiAgICAvLyBzaXplc1xuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIGV1aVRoZW1lLnNpemUubSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIGV1aVRoZW1lLnNpemUubCwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLnhsLCBcIjs7bGFiZWw6eGw7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZXhwYW5kXCIsIFwiaW5pdGlhbFNlbGVjdGVkVGFiXCIsIFwib25UYWJDbGlja1wiLCBcInNlbGVjdGVkVGFiXCIsIFwic2l6ZVwiLCBcInRhYnNcIiwgXCJhdXRvRm9jdXNcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJpZFwiLCBcIm5hbWVcIiwgXCJjb250ZW50XCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjcmVhdGVSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlUYWJzIH0gZnJvbSAnLi4vdGFicyc7XG5pbXBvcnQgeyBFdWlUYWIgfSBmcm9tICcuLi90YWInO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbi8qKlxuICogTWFya2VkIGFzIGNvbnN0IHNvIHR5cGUgaXMgYFsnaW5pdGlhbCcsICdzZWxlY3RlZCddYCBpbnN0ZWFkIG9mIGBzdHJpbmdbXWBcbiAqL1xuZXhwb3J0IHZhciBBVVRPRk9DVVMgPSBbJ2luaXRpYWwnLCAnc2VsZWN0ZWQnXTtcbmV4cG9ydCB2YXIgRXVpVGFiYmVkQ29udGVudCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlUYWJiZWRDb250ZW50KHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlUYWJiZWRDb250ZW50KTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpVGFiYmVkQ29udGVudCwgW3Byb3BzXSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJvb3RJZFwiLCBodG1sSWRHZW5lcmF0b3IoKSgpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidGFic1JlZlwiLCAvKiNfX1BVUkVfXyovY3JlYXRlUmVmKCkpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJmb2N1c1RhYlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGFyZ2V0VGFiID0gX3RoaXMudGFic1JlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCIjXCIuY29uY2F0KF90aGlzLnN0YXRlLnNlbGVjdGVkVGFiSWQpKTtcbiAgICAgIHRhcmdldFRhYi5mb2N1cygpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpbml0aWFsaXplRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pbkZvY3VzICYmIF90aGlzLnByb3BzLmF1dG9Gb2N1cyA9PT0gJ3NlbGVjdGVkJykge1xuICAgICAgICAvLyBNdXN0IHdhaXQgZm9yIHNldFN0YXRlIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyBgLmZvY3VzKClgXG4gICAgICAgIC8vIGFzIHRoZSBmb2N1cyBjYWxsIHRyaWdnZXJzIGEgYmx1ciBvbiB0aGUgZmlyc3QgdGFiXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpbkZvY3VzOiB0cnVlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5mb2N1c1RhYigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVtb3ZlRm9jdXNcIiwgZnVuY3Rpb24gKGJsdXJFdmVudCkge1xuICAgICAgLy8gb25seSBzZXQgaW5Gb2N1cyB0byBmYWxzZSBpZiB0aGUgd3JhcHBpbmcgZGl2IGRvZXNuJ3QgY29udGFpbiB0aGUgbm93LWZvY3VzaW5nIGVsZW1lbnRcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gYmx1ckV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IGJsdXJFdmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgICAgaWYgKGN1cnJlbnRUYXJnZXQuY29udGFpbnMocmVsYXRlZFRhcmdldCkgPT09IGZhbHNlKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpbkZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25UYWJDbGlja1wiLCBmdW5jdGlvbiAoc2VsZWN0ZWRUYWIpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICBvblRhYkNsaWNrID0gX3RoaXMkcHJvcHMub25UYWJDbGljayxcbiAgICAgICAgZXh0ZXJuYWxTZWxlY3RlZFRhYiA9IF90aGlzJHByb3BzLnNlbGVjdGVkVGFiO1xuICAgICAgaWYgKG9uVGFiQ2xpY2spIHtcbiAgICAgICAgb25UYWJDbGljayhzZWxlY3RlZFRhYik7XG4gICAgICB9XG5cbiAgICAgIC8vIE9ubHkgdHJhY2sgc2VsZWN0aW9uIHN0YXRlIGlmIGl0J3Mgbm90IGNvbnRyb2xsZWQgZXh0ZXJuYWxseS5cbiAgICAgIGlmICghZXh0ZXJuYWxTZWxlY3RlZFRhYikge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc2VsZWN0ZWRUYWJJZDogc2VsZWN0ZWRUYWIuaWRcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLmZvY3VzVGFiKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBpbml0aWFsU2VsZWN0ZWRUYWIgPSBwcm9wcy5pbml0aWFsU2VsZWN0ZWRUYWIsXG4gICAgICBfc2VsZWN0ZWRUYWIgPSBwcm9wcy5zZWxlY3RlZFRhYixcbiAgICAgIHRhYnMgPSBwcm9wcy50YWJzO1xuXG4gICAgLy8gT25seSB0cmFjayBzZWxlY3Rpb24gc3RhdGUgaWYgaXQncyBub3QgY29udHJvbGxlZCBleHRlcm5hbGx5LlxuICAgIHZhciBzZWxlY3RlZFRhYklkO1xuICAgIGlmICghX3NlbGVjdGVkVGFiKSB7XG4gICAgICBzZWxlY3RlZFRhYklkID0gKGluaXRpYWxTZWxlY3RlZFRhYiA9PT0gbnVsbCB8fCBpbml0aWFsU2VsZWN0ZWRUYWIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGluaXRpYWxTZWxlY3RlZFRhYi5pZCkgfHwgdGFic1swXS5pZDtcbiAgICB9XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzZWxlY3RlZFRhYklkOiBzZWxlY3RlZFRhYklkLFxuICAgICAgaW5Gb2N1czogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpVGFiYmVkQ29udGVudCwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpVGFiYmVkQ29udGVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgIGV4cGFuZCA9IF90aGlzJHByb3BzMi5leHBhbmQsXG4gICAgICAgIGluaXRpYWxTZWxlY3RlZFRhYiA9IF90aGlzJHByb3BzMi5pbml0aWFsU2VsZWN0ZWRUYWIsXG4gICAgICAgIG9uVGFiQ2xpY2sgPSBfdGhpcyRwcm9wczIub25UYWJDbGljayxcbiAgICAgICAgZXh0ZXJuYWxTZWxlY3RlZFRhYiA9IF90aGlzJHByb3BzMi5zZWxlY3RlZFRhYixcbiAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzMi5zaXplLFxuICAgICAgICB0YWJzID0gX3RoaXMkcHJvcHMyLnRhYnMsXG4gICAgICAgIGF1dG9Gb2N1cyA9IF90aGlzJHByb3BzMi5hdXRvRm9jdXMsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuXG4gICAgICAvLyBBbGxvdyB0aGUgY29uc3VtZXIgdG8gY29udHJvbCB0YWIgc2VsZWN0aW9uLlxuICAgICAgdmFyIHNlbGVjdGVkVGFiID0gZXh0ZXJuYWxTZWxlY3RlZFRhYiB8fCB0YWJzLmZpbmQoZnVuY3Rpb24gKHRhYikge1xuICAgICAgICByZXR1cm4gdGFiLmlkID09PSBfdGhpczIuc3RhdGUuc2VsZWN0ZWRUYWJJZDtcbiAgICAgIH0pIHx8IHRhYnNbMF07IC8vIEZhbGwgYmFjayB0byB0aGUgZmlyc3QgdGFiIGlmIGEgc2VsZWN0ZWQgdGFiIGNhbid0IGJlIGZvdW5kXG5cbiAgICAgIHZhciBzZWxlY3RlZFRhYkNvbnRlbnQgPSBzZWxlY3RlZFRhYi5jb250ZW50LFxuICAgICAgICBzZWxlY3RlZFRhYklkID0gc2VsZWN0ZWRUYWIuaWQ7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlUYWJzLCB7XG4gICAgICAgIHJlZjogdGhpcy50YWJzUmVmLFxuICAgICAgICBleHBhbmQ6IGV4cGFuZCxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgICAgb25Gb2N1czogdGhpcy5pbml0aWFsaXplRm9jdXMsXG4gICAgICAgIG9uQmx1cjogdGhpcy5yZW1vdmVGb2N1c1xuICAgICAgfSwgdGFicy5tYXAoZnVuY3Rpb24gKHRhYikge1xuICAgICAgICB2YXIgaWQgPSB0YWIuaWQsXG4gICAgICAgICAgbmFtZSA9IHRhYi5uYW1lLFxuICAgICAgICAgIGNvbnRlbnQgPSB0YWIuY29udGVudCxcbiAgICAgICAgICB0YWJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyh0YWIsIF9leGNsdWRlZDIpO1xuICAgICAgICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIGtleTogaWQsXG4gICAgICAgICAgaWQ6IGlkXG4gICAgICAgIH0sIHRhYlByb3BzKSwge30sIHtcbiAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5vblRhYkNsaWNrKHRhYik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpc1NlbGVjdGVkOiB0YWIgPT09IHNlbGVjdGVkVGFiLFxuICAgICAgICAgICdhcmlhLWNvbnRyb2xzJzogXCJcIi5jb25jYXQoX3RoaXMyLnJvb3RJZClcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYiwgcHJvcHMsIG5hbWUpO1xuICAgICAgfSkpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgcm9sZTogXCJ0YWJwYW5lbFwiLFxuICAgICAgICBpZDogXCJcIi5jb25jYXQodGhpcy5yb290SWQpLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBzZWxlY3RlZFRhYklkXG4gICAgICB9LCBzZWxlY3RlZFRhYkNvbnRlbnQpKTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlUYWJiZWRDb250ZW50LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGF1dG9Gb2N1czogJ2luaXRpYWwnXG59KTtcbkV1aVRhYmJlZENvbnRlbnQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBXaGVuIHRhYmJpbmcgaW50byB0aGUgdGFicywgc2V0IHRoZSBmb2N1cyBvbiBgaW5pdGlhbGAgZm9yIHRoZSBmaXJzdCB0YWIsXG4gICAgICAgKiBvciBgc2VsZWN0ZWRgIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRhYi4gQmVzdCB1c2UgY2FzZSBpcyBmb3IgaW5zaWRlIG9mXG4gICAgICAgKiBvdmVybGF5IGNvbnRlbnQgbGlrZSBwb3BvdmVycyBvciBmbHlvdXRzLlxuICAgICAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLm9uZU9mKFtcImluaXRpYWxcIiwgXCJzZWxlY3RlZFwiXSksXG4gIC8qKlxuICAgICAgICogRXZlbmx5IHN0cmV0Y2hlcyBlYWNoIHRhYiB0byBmaWxsIHRoZSBob3Jpem9udGFsIHNwYWNlXG4gICAgICAgKi9cbiAgZXhwYW5kOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBVc2UgdGhpcyBwcm9wIHRvIHNldCB0aGUgaW5pdGlhbGx5IHNlbGVjdGVkIHRhYiB3aGlsZSBsZXR0aW5nIHRoZSB0YWJiZWQgY29udGVudCBjb21wb25lbnRcbiAgICAgICAqIGNvbnRyb2wgc2VsZWN0aW9uIHN0YXRlIGludGVybmFsbHlcbiAgICAgICAqL1xuICBpbml0aWFsU2VsZWN0ZWRUYWI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogUGxhY2VzIGNvbnRlbnQgYmVmb3JlIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAgICovXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICAgKiBQbGFjZXMgY29udGVudCBhZnRlciB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgICAqL1xuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIG9uVGFiQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgICAqIFVzZSB0aGlzIHByb3AgaWYgeW91IHdhbnQgdG8gY29udHJvbCBzZWxlY3Rpb24gc3RhdGUgd2l0aGluIHRoZSBvd25lciBjb21wb25lbnRcbiAgICAgICAqL1xuICBzZWxlY3RlZFRhYjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgY29udGVudDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBFYWNoIHRhYiBuZWVkcyBpZCBhbmQgY29udGVudCBwcm9wZXJ0aWVzLCBzbyB3ZSBjYW4gYXNzb2NpYXRlIGl0IHdpdGggaXRzIHBhbmVsIGZvciBhY2Nlc3NpYmlsaXR5LlxuICAgICAgICogVGhlIG5hbWUgcHJvcGVydHkgKGEgbm9kZSkgaXMgYWxzbyByZXF1aXJlZCB0byBkaXNwbGF5IHRvIHRoZSB1c2VyLlxuICAgICAgICovXG4gIHRhYnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZFxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmV4cG9ydCB2YXIgRXVpRGVsYXlSZW5kZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpRGVsYXlSZW5kZXIocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aURlbGF5UmVuZGVyKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpRGVsYXlSZW5kZXIsIFtwcm9wc10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJkZWxheUlEXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRvQmVEZWxheWVkXCIsIHRydWUpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzdGFydERlbGF5aW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoX3RoaXMuZGVsYXlJRCk7XG4gICAgICBfdGhpcy50b0JlRGVsYXllZCA9IHRydWU7XG4gICAgICBfdGhpcy5kZWxheUlEID0gd2luZG93LnNldFRpbWVvdXQoX3RoaXMuc3RvcERlbGF5aW5nLCBfdGhpcy5wcm9wcy5kZWxheSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0b3BEZWxheWluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KF90aGlzLmRlbGF5SUQpO1xuICAgICAgX3RoaXMudG9CZURlbGF5ZWQgPSBmYWxzZTtcbiAgICAgIF90aGlzLnNob3VsZFVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgdG9nZ2xlOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlEZWxheVJlbmRlciwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpRGVsYXlSZW5kZXIsIFt7XG4gICAga2V5OiBcInNob3VsZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRVcGRhdGUoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciB0b2dnbGUgPSBfcmVmLnRvZ2dsZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b2dnbGU6ICF0b2dnbGVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuc3RhcnREZWxheWluZygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzaG91bGRDb21wb25lbnRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgICAgaWYgKHRoaXMudG9CZURlbGF5ZWQpIHtcbiAgICAgICAgdGhpcy5zdGFydERlbGF5aW5nKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLnN0b3BEZWxheWluZygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdGhpcy50b0JlRGVsYXllZCA9IHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gIXRoaXMudG9CZURlbGF5ZWQgPyB0aGlzLnByb3BzLmNoaWxkcmVuIDogbnVsbDtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlEZWxheVJlbmRlciwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBkZWxheTogNTAwXG59KTtcbkV1aURlbGF5UmVuZGVyLnByb3BUeXBlcyA9IHtcbiAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJ0ZXh0U2l6ZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlIZWFsdGhTdHlsZXMgfSBmcm9tICcuL2hlYWx0aC5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uL2ZsZXgnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgVEVYVF9TSVpFUyA9IFsneHMnLCAncycsICdtJywgJ2luaGVyaXQnXTtcbmV4cG9ydCB2YXIgRXVpSGVhbHRoID0gZnVuY3Rpb24gRXVpSGVhbHRoKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgX3JlZiR0ZXh0U2l6ZSA9IF9yZWYudGV4dFNpemUsXG4gICAgdGV4dFNpemUgPSBfcmVmJHRleHRTaXplID09PSB2b2lkIDAgPyAncycgOiBfcmVmJHRleHRTaXplLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUhlYWx0aFN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUhlYWx0aCwgc3R5bGVzW3RleHRTaXplXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSGVhbHRoJywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlGbGV4R3JvdXAsIHtcbiAgICBndXR0ZXJTaXplOiBcInhzXCIsXG4gICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICByZXNwb25zaXZlOiBmYWxzZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJkb3RcIixcbiAgICBjb2xvcjogY29sb3JcbiAgfSkpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgY2hpbGRyZW4pKSk7XG59O1xuRXVpSGVhbHRoLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIGRvdCBpY29uLlxuICAgICAgICogSXQgYWNjZXB0cyBhbnkgYEljb25Db2xvcmA6IGBkZWZhdWx0YCwgYHByaW1hcnlgLCBgc3VjY2Vzc2AsIGBhY2NlbnRgLCBgd2FybmluZ2AsIGBkYW5nZXJgLCBgdGV4dGAsXG4gICAgICAgKiBgc3ViZHVlZGAgb3IgYGdob3N0YDsgb3IgYW55IHZhbGlkIENTUyBjb2xvciB2YWx1ZSBhcyBhIGBzdHJpbmdgXG4gICAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogTWF0Y2hlcyB0aGUgdGV4dCBzY2FsZXMgb2YgRXVpVGV4dC5cbiAgICAgICAqIFRoZSBgaW5oZXJpdGAgc3R5bGUgd2lsbCBnZXQgaXRzIGZvbnQgc2l6ZSBmcm9tIHRoZSBwYXJlbnQgZWxlbWVudFxuICAgICAgICovXG4gIHRleHRTaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFxaG9qcmktaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiZm9udC1zaXplOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIlxufSA6IHtcbiAgbmFtZTogXCIxcWhvanJpLWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImZvbnQtc2l6ZTppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJqOHVoY2stZXVpSGVhbHRoXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmlubGluZS1ibG9jaztsYWJlbDpldWlIZWFsdGg7XCJcbn0gOiB7XG4gIG5hbWU6IFwiajh1aGNrLWV1aUhlYWx0aFwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7bGFiZWw6ZXVpSGVhbHRoO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUhlYWx0aFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUhlYWx0aFN0eWxlcyhldWlUaGVtZSkge1xuICByZXR1cm4ge1xuICAgIGV1aUhlYWx0aDogX3JlZjIsXG4gICAgLy8gVGV4dCBzaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lLCAneHMnKSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lLCAncycpLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZSwgJ20nKSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGluaGVyaXQ6IF9yZWZcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJhbHRcIiwgXCJ1cmxcIiwgXCJzcmNcIiwgXCJzaXplXCIsIFwiaGFzU2hhZG93XCIsIFwic3R5bGVcIiwgXCJ3cmFwcGVyUHJvcHNcIiwgXCJmdWxsU2NyZWVuSWNvbkNvbG9yXCIsIFwiYWxsb3dGdWxsU2NyZWVuXCIsIFwiY2FwdGlvblwiLCBcImZsb2F0XCIsIFwibWFyZ2luXCIsIFwib25GdWxsU2NyZWVuXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUltYWdlV3JhcHBlciB9IGZyb20gJy4vaW1hZ2Vfd3JhcHBlcic7XG5pbXBvcnQgeyBldWlJbWFnZVN0eWxlcyB9IGZyb20gJy4vaW1hZ2Uuc3R5bGVzJztcbmltcG9ydCB7IEV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIgfSBmcm9tICcuL2ltYWdlX2Z1bGxzY3JlZW5fd3JhcHBlcic7XG5pbXBvcnQgeyBTSVpFUyB9IGZyb20gJy4vaW1hZ2VfdHlwZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSW1hZ2UgPSBmdW5jdGlvbiBFdWlJbWFnZShfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBhbHQgPSBfcmVmLmFsdCxcbiAgICB1cmwgPSBfcmVmLnVybCxcbiAgICBzcmMgPSBfcmVmLnNyYyxcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ29yaWdpbmFsJyA6IF9yZWYkc2l6ZSxcbiAgICBoYXNTaGFkb3cgPSBfcmVmLmhhc1NoYWRvdyxcbiAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgd3JhcHBlclByb3BzID0gX3JlZi53cmFwcGVyUHJvcHMsXG4gICAgZnVsbFNjcmVlbkljb25Db2xvciA9IF9yZWYuZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICBhbGxvd0Z1bGxTY3JlZW4gPSBfcmVmLmFsbG93RnVsbFNjcmVlbixcbiAgICBjYXB0aW9uID0gX3JlZi5jYXB0aW9uLFxuICAgIGZsb2F0ID0gX3JlZi5mbG9hdCxcbiAgICBtYXJnaW4gPSBfcmVmLm1hcmdpbixcbiAgICBvbkZ1bGxTY3JlZW4gPSBfcmVmLm9uRnVsbFNjcmVlbixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgaXNGdWxsU2NyZWVuID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRJc0Z1bGxTY3JlZW4gPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgaXNOYW1lZFNpemUgPSB0eXBlb2Ygc2l6ZSA9PT0gJ3N0cmluZycgJiYgU0laRVMuaW5jbHVkZXMoc2l6ZSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSW1hZ2UnLCBjbGFzc05hbWUpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpSW1hZ2VTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZSwgaXNOYW1lZFNpemUgJiYgc3R5bGVzW3NpemVdLCAhaXNOYW1lZFNpemUgJiYgc3R5bGVzLmN1c3RvbVNpemUsIGhhc1NoYWRvdyAmJiBzdHlsZXMuaGFzU2hhZG93XTtcbiAgdmFyIGNzc0lzRnVsbFNjcmVlblN0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2UsIHN0eWxlcy5pc0Z1bGxTY3JlZW5dO1xuICB2YXIgaXNDdXN0b21TaXplID0gIWlzTmFtZWRTaXplICYmIHNpemUgIT09ICdvcmlnaW5hbCc7XG4gIHZhciBjdXN0b21TaXplID0gdHlwZW9mIHNpemUgPT09ICdzdHJpbmcnID8gc2l6ZSA6IFwiXCIuY29uY2F0KHNpemUsIFwicHhcIik7XG4gIHZhciBpbWFnZVN0eWxlV2l0aEN1c3RvbVNpemUgPSBpc0N1c3RvbVNpemUgPyBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKSwge30sIHtcbiAgICBtYXhXaWR0aDogY3VzdG9tU2l6ZSxcbiAgICBtYXhIZWlnaHQ6IGN1c3RvbVNpemVcbiAgfSkgOiBzdHlsZTtcbiAgdmFyIGlzRnVsbFdpZHRoID0gc2l6ZSA9PT0gJ2Z1bGxXaWR0aCc7XG4gIHZhciBjb21tb25XcmFwcGVyUHJvcHMgPSB7XG4gICAgaGFzU2hhZG93OiBoYXNTaGFkb3csXG4gICAgd3JhcHBlclByb3BzOiB3cmFwcGVyUHJvcHMsXG4gICAgc2V0SXNGdWxsU2NyZWVuOiBzZXRJc0Z1bGxTY3JlZW4sXG4gICAgZnVsbFNjcmVlbkljb25Db2xvcjogZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICBpc0Z1bGxXaWR0aDogaXNGdWxsV2lkdGgsXG4gICAgYWxsb3dGdWxsU2NyZWVuOiBhbGxvd0Z1bGxTY3JlZW4sXG4gICAgYWx0OiBhbHQsXG4gICAgY2FwdGlvbjogY2FwdGlvbixcbiAgICBmbG9hdDogZmxvYXQsXG4gICAgbWFyZ2luOiBtYXJnaW4sXG4gICAgb25GdWxsU2NyZWVuOiBvbkZ1bGxTY3JlZW5cbiAgfTtcbiAgdmFyIGNvbW1vbkltZ1Byb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHNyYzogc3JjIHx8IHVybFxuICB9LCByZXN0KTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VXcmFwcGVyLCBjb21tb25XcmFwcGVyUHJvcHMsIF9fX0Vtb3Rpb25KU1goXCJpbWdcIiwgX2V4dGVuZHMoe1xuICAgIGFsdDogYWx0LFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIHN0eWxlOiBpbWFnZVN0eWxlV2l0aEN1c3RvbVNpemVcbiAgfSwgY29tbW9uSW1nUHJvcHMpKSksIGFsbG93RnVsbFNjcmVlbiAmJiBpc0Z1bGxTY3JlZW4gJiYgX19fRW1vdGlvbkpTWChFdWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyLCBjb21tb25XcmFwcGVyUHJvcHMsIF9fX0Vtb3Rpb25KU1goXCJpbWdcIiwgX2V4dGVuZHMoe1xuICAgIGFsdDogYWx0LFxuICAgIGNzczogY3NzSXNGdWxsU2NyZWVuU3R5bGVzLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9LCBjb21tb25JbWdQcm9wcykpKSk7XG59O1xuRXVpSW1hZ2UucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBSZXF1aXJlcyBlaXRoZXIgYHNyY2Agb3IgYHVybGAgYnV0IGRlZmF1bHRzIHRvIHVzaW5nIGBzcmNgIGlmIGJvdGggYXJlIHByb3ZpZGVkXG4gICAgICAgKi9cbiAgc3JjOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB1cmw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAgICogQWx0IHRleHQgc2hvdWxkIGRlc2NyaWJlIHRoZSBpbWFnZSB0byBhaWQgc2NyZWVuIHJlYWRlciB1c2Vycy4gU2VlXG4gICAgICAgKiBodHRwczovL3dlYmFpbS5vcmcvdGVjaG5pcXVlcy9hbHR0ZXh0LyBmb3IgYSBndWlkZSBvbiB3cml0aW5nXG4gICAgICAgKiBlZmZlY3RpdmUgYWx0IHRleHQuXG4gICAgICAgKlxuICAgICAgICogSWYgbm8gbWVhbmluZ2Z1bCBkZXNjcmlwdGlvbiBleGlzdHMsIG9yIGlmIHRoZSBpbWFnZSBpcyBhZGVxdWF0ZWx5XG4gICAgICAgKiBkZXNjcmliZWQgYnkgdGhlIHN1cnJvdW5kaW5nIHRleHQsIHBhc3MgYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgICovXG4gIGFsdDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgICAqIFByb3ZpZGVzIGEgdmlzaWJsZSBjYXB0aW9uIHRvIHRoZSBpbWFnZVxuICAgICAgICovXG4gIGNhcHRpb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgICAqIEFjY2VwdHMgYHNgIC8gYG1gIC8gYGxgIC8gYHhsYCAvIGBvcmlnaW5hbGAgLyBgZnVsbFdpZHRoYCAvIG9yIGEgQ1NTIHNpemUgb2YgYG51bWJlcmAgb3IgYHN0cmluZ2AuXG4gICAgICAgKiBgZnVsbFdpZHRoYCB3aWxsIHNldCB0aGUgZmlndXJlIHRvIHN0cmV0Y2ggdG8gMTAwJSBvZiBpdHMgY29udGFpbmVyLlxuICAgICAgICogYHN0cmluZ2AgYW5kIGBudW1iZXJgIHR5cGVzIHdpbGwgbWF4IGJvdGggdGhlIHdpZHRoIG9yIGhlaWdodCwgd2hpY2hldmVyIGlzIGdyZWF0ZXIuXG4gICAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIEZsb2F0IHRoZSBpbWFnZSB0byB0aGUgbGVmdCBvciByaWdodC4gVXNlZnVsIGluIGxhcmdlIHRleHQgYmxvY2tzLlxuICAgICAgICovXG4gIGZsb2F0OiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIE1hcmdpbiBhcm91bmQgdGhlIGltYWdlLlxuICAgICAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAgKGRlZmF1bHQpIHdpbGwgYXBwbHkgYSBzbGlnaHQgc2hhZG93IHRvIHRoZSBpbWFnZVxuICAgICAgICovXG4gIGhhc1NoYWRvdzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogV2hlbiBzZXQgdG8gYHRydWVgIHdpbGwgbWFrZSB0aGUgaW1hZ2UgY2xpY2thYmxlIHRvIGEgbGFyZ2VyIHZlcnNpb25cbiAgICAgICAqL1xuICBhbGxvd0Z1bGxTY3JlZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIENhbGxiYWNrIHdoZW4gdGhlIGltYWdlIGlzIGNsaWNrZWQgYW5kIGBhbGxvd0Z1bGxTY3JlZW5gIGlzIGB0cnVlYFxuICAgICAgICovXG4gIG9uRnVsbFNjcmVlbjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAgICogQ2hhbmdlcyB0aGUgY29sb3Igb2YgdGhlIGljb24gdGhhdCBmbG9hdHMgYWJvdmUgdGhlIGltYWdlIHdoZW4gaXQgY2FuIGJlIGNsaWNrZWQgdG8gZnVsbHNjcmVlbi5cbiAgICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIGBsaWdodGAgaXMgZmluZSB1bmxlc3MgeW91ciBpbWFnZSBoYXMgYSB3aGl0ZSBiYWNrZ3JvdW5kLCBpbiB3aGljaCBjYXNlIHlvdSBzaG91bGQgY2hhbmdlIGl0IHRvIGBkYXJrYC5cbiAgICAgICAqL1xuICBmdWxsU2NyZWVuSWNvbkNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wibGlnaHRcIiwgXCJkYXJrXCJdKSxcbiAgLyoqXG4gICAgICAgKiBQcm9wcyB0byBhZGQgdG8gdGhlIHdyYXBwaW5nIGZpZ3VyZSBlbGVtZW50XG4gICAgICAgKi9cbiAgd3JhcHBlclByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pXG59OyIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VJbm5lclRleHQgfSBmcm9tICcuLi9pbm5lcl90ZXh0JztcbmltcG9ydCB7IGV1aUltYWdlV3JhcHBlclN0eWxlcyB9IGZyb20gJy4vaW1hZ2Vfd3JhcHBlci5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpSW1hZ2VCdXR0b24gfSBmcm9tICcuL2ltYWdlX2J1dHRvbic7XG5pbXBvcnQgeyBFdWlJbWFnZUNhcHRpb24gfSBmcm9tICcuL2ltYWdlX2NhcHRpb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSW1hZ2VXcmFwcGVyID0gZnVuY3Rpb24gRXVpSW1hZ2VXcmFwcGVyKF9yZWYpIHtcbiAgdmFyIGFsdCA9IF9yZWYuYWx0LFxuICAgIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgYWxsb3dGdWxsU2NyZWVuID0gX3JlZi5hbGxvd0Z1bGxTY3JlZW4sXG4gICAgZmxvYXQgPSBfcmVmLmZsb2F0LFxuICAgIG1hcmdpbiA9IF9yZWYubWFyZ2luLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBzZXRJc0Z1bGxTY3JlZW4gPSBfcmVmLnNldElzRnVsbFNjcmVlbixcbiAgICB3cmFwcGVyUHJvcHMgPSBfcmVmLndyYXBwZXJQcm9wcyxcbiAgICBmdWxsU2NyZWVuSWNvbkNvbG9yID0gX3JlZi5mdWxsU2NyZWVuSWNvbkNvbG9yLFxuICAgIGlzRnVsbFdpZHRoID0gX3JlZi5pc0Z1bGxXaWR0aCxcbiAgICBvbkZ1bGxTY3JlZW4gPSBfcmVmLm9uRnVsbFNjcmVlbjtcbiAgdmFyIG9wZW5GdWxsU2NyZWVuID0gZnVuY3Rpb24gb3BlbkZ1bGxTY3JlZW4oKSB7XG4gICAgc2V0SXNGdWxsU2NyZWVuKHRydWUpO1xuICAgIG9uRnVsbFNjcmVlbiA9PT0gbnVsbCB8fCBvbkZ1bGxTY3JlZW4gPT09IHZvaWQgMCB8fCBvbkZ1bGxTY3JlZW4odHJ1ZSk7XG4gIH07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSW1hZ2VXcmFwcGVyJywgd3JhcHBlclByb3BzICYmIHdyYXBwZXJQcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpSW1hZ2VXcmFwcGVyU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc0ZpZ3VyZVN0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2VXcmFwcGVyLCBmbG9hdCAmJiBzdHlsZXNbZmxvYXRdLCBtYXJnaW4gJiYgc3R5bGVzW21hcmdpbl0sIGFsbG93RnVsbFNjcmVlbiAmJiBzdHlsZXMuYWxsb3dGdWxsU2NyZWVuLCBpc0Z1bGxXaWR0aCAmJiBzdHlsZXMuZnVsbFdpZHRoLCB3cmFwcGVyUHJvcHMgPT09IG51bGwgfHwgd3JhcHBlclByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3cmFwcGVyUHJvcHMuY3NzXTtcbiAgdmFyIF91c2VJbm5lclRleHQgPSB1c2VJbm5lclRleHQoKSxcbiAgICBfdXNlSW5uZXJUZXh0MiA9IF9zbGljZWRUb0FycmF5KF91c2VJbm5lclRleHQsIDIpLFxuICAgIG9wdGlvbmFsQ2FwdGlvblJlZiA9IF91c2VJbm5lclRleHQyWzBdLFxuICAgIG9wdGlvbmFsQ2FwdGlvblRleHQgPSBfdXNlSW5uZXJUZXh0MlsxXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJmaWd1cmVcIiwgX2V4dGVuZHMoe1xuICAgIFwiYXJpYS1sYWJlbFwiOiBvcHRpb25hbENhcHRpb25UZXh0XG4gIH0sIHdyYXBwZXJQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc0ZpZ3VyZVN0eWxlc1xuICB9KSwgYWxsb3dGdWxsU2NyZWVuID8gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJbWFnZUJ1dHRvbiwge1xuICAgIGhhc0FsdDogISFhbHQsXG4gICAgaGFzU2hhZG93OiBoYXNTaGFkb3csXG4gICAgb25DbGljazogb3BlbkZ1bGxTY3JlZW4sXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImFjdGl2YXRlRnVsbFNjcmVlbkJ1dHRvblwiLFxuICAgIGlzRnVsbFdpZHRoOiBpc0Z1bGxXaWR0aCxcbiAgICBmdWxsU2NyZWVuSWNvbkNvbG9yOiBmdWxsU2NyZWVuSWNvbkNvbG9yXG4gIH0sIGNoaWxkcmVuKSkgOiBjaGlsZHJlbiwgX19fRW1vdGlvbkpTWChFdWlJbWFnZUNhcHRpb24sIHtcbiAgICByZWY6IG9wdGlvbmFsQ2FwdGlvblJlZixcbiAgICBjYXB0aW9uOiBjYXB0aW9uXG4gIH0pKTtcbn07XG5FdWlJbWFnZVdyYXBwZXIucHJvcFR5cGVzID0ge1xuICBpc0Z1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgc2V0SXNGdWxsU2NyZWVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlNaW5CcmVha3BvaW50LCBsb2dpY2FsQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBsb2dpY2FsU2lkZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImdhY25tYy1hbGxvd0Z1bGxTY3JlZW5cIixcbiAgc3R5bGVzOiBcIiY6aG92ZXIgW2NsYXNzKj0nZXVpSW1hZ2VDYXB0aW9uJ117dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9O2xhYmVsOmFsbG93RnVsbFNjcmVlbjtcIlxufSA6IHtcbiAgbmFtZTogXCJnYWNubWMtYWxsb3dGdWxsU2NyZWVuXCIsXG4gIHN0eWxlczogXCImOmhvdmVyIFtjbGFzcyo9J2V1aUltYWdlQ2FwdGlvbidde3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fTtsYWJlbDphbGxvd0Z1bGxTY3JlZW47XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpSW1hZ2VXcmFwcGVyU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VXcmFwcGVyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUltYWdlV3JhcHBlcjogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6aW5saW5lLWJsb2NrO1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIiBcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwibGluZS1oZWlnaHQ6MDtmbGV4LXNocmluazowOztsYWJlbDpldWlJbWFnZVdyYXBwZXI7XCIpLFxuICAgIGFsbG93RnVsbFNjcmVlbjogX3JlZixcbiAgICAvLyBNYXJnaW5zXG4gICAgczogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbjpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbjpcIiwgZXVpVGhlbWUuc2l6ZS5iYXNlLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbjpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW46XCIsIGV1aVRoZW1lLnNpemUueGwsIFwiOztsYWJlbDp4bDtcIiksXG4gICAgLy8gRmxvYXRzXG4gICAgLy8gMTogTG9naWNhbCBwcm9wZXJ0aWVzL3ZhbHVlcyBpbiBgZmxvYXRgIGlzIGN1cnJlbnRseSBub3QgeWV0IHN1cHBvcnRlZCBieSBhbGwgYnJvd3NlcnMgdy9vIGZsYWdzXG4gICAgLy8gQHNlZSBodHRwczovL2Nhbml1c2UuY29tL21kbi1jc3NfcHJvcGVydGllc19mbG9hdF9mbG93X3JlbGF0aXZlX3ZhbHVlcyBmb3Igd2hlbiB3ZSBjYW4gcmVtb3ZlIGxlZnQvcmlnaHQgZmFsbGJhY2tzXG4gICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhldWlNaW5CcmVha3BvaW50KGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCJ7ZmxvYXQ6bGVmdDtmbG9hdDpcIiwgbG9naWNhbFNpZGUubGVmdCwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgJzAnKSwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCAnMCcpLCBcIjt9O2xhYmVsOmxlZnQ7XCIpLFxuICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKGV1aU1pbkJyZWFrcG9pbnQoZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIntmbG9hdDpyaWdodDtmbG9hdDpcIiwgbG9naWNhbFNpZGUucmlnaHQsIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tcmlnaHQnLCAnMCcpLCBcIjtcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsICcwJyksIFwiO307bGFiZWw6cmlnaHQ7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJoYXNBbHRcIiwgXCJoYXNTaGFkb3dcIiwgXCJjaGlsZHJlblwiLCBcIm9uQ2xpY2tcIiwgXCJvbktleURvd25cIiwgXCJpc0Z1bGxTY3JlZW5cIiwgXCJpc0Z1bGxXaWR0aFwiLCBcImZ1bGxTY3JlZW5JY29uQ29sb3JcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGV1aUltYWdlQnV0dG9uU3R5bGVzLCBldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMgfSBmcm9tICcuL2ltYWdlX2J1dHRvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBmdWxsU2NyZWVuSWNvbkNvbG9yTWFwID0ge1xuICBsaWdodDogJ2dob3N0JyxcbiAgZGFyazogJ2RlZmF1bHQnXG59O1xuZXhwb3J0IHZhciBFdWlJbWFnZUJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUltYWdlQnV0dG9uKF9yZWYpIHtcbiAgdmFyIGhhc0FsdCA9IF9yZWYuaGFzQWx0LFxuICAgIGhhc1NoYWRvdyA9IF9yZWYuaGFzU2hhZG93LFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgIG9uS2V5RG93biA9IF9yZWYub25LZXlEb3duLFxuICAgIGlzRnVsbFNjcmVlbiA9IF9yZWYuaXNGdWxsU2NyZWVuLFxuICAgIGlzRnVsbFdpZHRoID0gX3JlZi5pc0Z1bGxXaWR0aCxcbiAgICBfcmVmJGZ1bGxTY3JlZW5JY29uQ28gPSBfcmVmLmZ1bGxTY3JlZW5JY29uQ29sb3IsXG4gICAgZnVsbFNjcmVlbkljb25Db2xvciA9IF9yZWYkZnVsbFNjcmVlbkljb25DbyA9PT0gdm9pZCAwID8gJ2xpZ2h0JyA6IF9yZWYkZnVsbFNjcmVlbkljb25DbyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBidXR0b25TdHlsZXMgPSBldWlJbWFnZUJ1dHRvblN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NCdXR0b25TdHlsZXMgPSBbYnV0dG9uU3R5bGVzLmV1aUltYWdlQnV0dG9uLCBoYXNTaGFkb3cgPyBidXR0b25TdHlsZXMuaGFzU2hhZG93SG92ZXIgOiBidXR0b25TdHlsZXMuc2hhZG93SG92ZXIsICFpc0Z1bGxTY3JlZW4gJiYgaXNGdWxsV2lkdGggJiYgYnV0dG9uU3R5bGVzLmZ1bGxXaWR0aF07XG4gIHZhciBpY29uU3R5bGVzID0gZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc0ljb25TdHlsZXMgPSBbaWNvblN0eWxlcy5ldWlJbWFnZUJ1dHRvbl9faWNvbiwgaWNvblN0eWxlcy5vcGVuRnVsbFNjcmVlbl07XG4gIHZhciBvcGVuRnVsbFNjcmVlbkluc3RydWN0aW9ucyA9IHVzZUV1aUkxOG4oJ2V1aUltYWdlQnV0dG9uLm9wZW5GdWxsU2NyZWVuJywgJ0NsaWNrIHRvIG9wZW4gdGhpcyBpbWFnZSBpbiBmdWxsc2NyZWVuIG1vZGUnKTtcbiAgdmFyIGNsb3NlRnVsbFNjcmVlbkluc3RydWN0aW9ucyA9IHVzZUV1aUkxOG4oJ2V1aUltYWdlQnV0dG9uLmNsb3NlRnVsbFNjcmVlbicsICdQcmVzcyBFc2NhcGUgb3IgY2xpY2sgdG8gY2xvc2UgaW1hZ2UgZnVsbHNjcmVlbiBtb2RlJyk7XG4gIHZhciBpY29uQ29sb3IgPSBmdWxsU2NyZWVuSWNvbkNvbG9yTWFwW2Z1bGxTY3JlZW5JY29uQ29sb3JdO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBjc3M6IGNzc0J1dHRvblN0eWxlcyxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uS2V5RG93bjogb25LZXlEb3duXG4gIH0sIHJlc3QpLCBpc0Z1bGxTY3JlZW4gJiZcbiAgLy8gSW4gZnVsbHNjcmVlbiBtb2RlLCBpbnN0cnVjdGlvbnMgc2hvdWxkIGNvbWUgZmlyc3QgdG8gYWxsb3cgc2NyZWVuIHJlYWRlclxuICAvLyB1c2VycyB0byBxdWlja2x5IGV4aXQgdnMuIHBvdGVudGlhbGx5IHJlYWRpbmcgb3V0IGxvbmcvdW5za2lwcGFibGUgYWx0IHRleHRcbiAgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBjbG9zZUZ1bGxTY3JlZW5JbnN0cnVjdGlvbnMsIGhhc0FsdCAmJiAnIFx1MjAxNCAnKSksIGNoaWxkcmVuLCAhaXNGdWxsU2NyZWVuICYmIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNzczogY3NzSWNvblN0eWxlc1xuICB9LCBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGhhc0FsdCAmJiAnIFx1MjAxNCAnLCBvcGVuRnVsbFNjcmVlbkluc3RydWN0aW9ucykpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICB0eXBlOiBcImZ1bGxTY3JlZW5cIixcbiAgICBjb2xvcjogaWNvbkNvbG9yXG4gIH0pKSkpO1xufTtcbkV1aUltYWdlQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgaGFzQWx0OiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuICBpc0Z1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaXNGdWxsU2NyZWVuOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9jdXNSaW5nLCBsb2dpY2FsQ1NTLCBldWlDYW5BbmltYXRlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpU2hhZG93IH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuZXhwb3J0IHZhciBldWlJbWFnZUJ1dHRvblN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlQnV0dG9uU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUltYWdlQnV0dG9uOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjptYXRjaC1wYXJlbnQ7bGluZS1oZWlnaHQ6MDsmOjpiZWZvcmV7b3BhY2l0eTowO2NvbnRlbnQ6Jyc7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO319Jjpob3ZlciwmOmZvY3VzeyY6OmJlZm9yZXtvcGFjaXR5OjE7fVtjbGFzcyo9J2V1aUltYWdlQnV0dG9uX19pY29uJ117b3BhY2l0eToxO319Jjpmb2N1c3tcIiwgZXVpRm9jdXNSaW5nKGV1aVRoZW1lQ29udGV4dCwgJ291dHNldCcpLCBcIjt9O2xhYmVsOmV1aUltYWdlQnV0dG9uO1wiKSxcbiAgICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKSxcbiAgICBzaGFkb3dIb3ZlcjogLyojX19QVVJFX18qL2NzcyhcIiY6OmJlZm9yZXtcIiwgZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7fTtsYWJlbDpzaGFkb3dIb3ZlcjtcIiksXG4gICAgaGFzU2hhZG93SG92ZXI6IC8qI19fUFVSRV9fKi9jc3MoXCImOjpiZWZvcmV7XCIsIGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdtJyksIFwiO307bGFiZWw6aGFzU2hhZG93SG92ZXI7XCIpXG4gIH07XG59O1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwieGo0ZHNhLWNsb3NlRnVsbFNjcmVlblwiLFxuICBzdHlsZXM6IFwicG9pbnRlci1ldmVudHM6bm9uZTtsYWJlbDpjbG9zZUZ1bGxTY3JlZW47XCJcbn0gOiB7XG4gIG5hbWU6IFwieGo0ZHNhLWNsb3NlRnVsbFNjcmVlblwiLFxuICBzdHlsZXM6IFwicG9pbnRlci1ldmVudHM6bm9uZTtsYWJlbDpjbG9zZUZ1bGxTY3JlZW47XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJbWFnZUJ1dHRvbl9faWNvbjogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCBldWlUaGVtZS5zaXplLmJhc2UpLCBcIiBcIiwgbG9naWNhbENTUygncmlnaHQnLCBldWlUaGVtZS5zaXplLmJhc2UpLCBcIjs7bGFiZWw6ZXVpSW1hZ2VCdXR0b25fX2ljb247XCIpLFxuICAgIG9wZW5GdWxsU2NyZWVuOiAvKiNfX1BVUkVfXyovY3NzKFwib3BhY2l0eTowO2N1cnNvcjpwb2ludGVyO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5zbG93LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO307bGFiZWw6b3BlbkZ1bGxTY3JlZW47XCIpLFxuICAgIGNsb3NlRnVsbFNjcmVlbjogX3JlZlxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUltYWdlQ2FwdGlvblN0eWxlcyB9IGZyb20gJy4vaW1hZ2VfY2FwdGlvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSW1hZ2VDYXB0aW9uID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2FwdGlvbiA9IF9yZWYuY2FwdGlvbixcbiAgICBfcmVmJGlzT25PdmVybGF5TWFzayA9IF9yZWYuaXNPbk92ZXJsYXlNYXNrLFxuICAgIGlzT25PdmVybGF5TWFzayA9IF9yZWYkaXNPbk92ZXJsYXlNYXNrID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaXNPbk92ZXJsYXlNYXNrO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpSW1hZ2VDYXB0aW9uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2VDYXB0aW9uLCBpc09uT3ZlcmxheU1hc2sgJiYgc3R5bGVzLmlzT25PdmVybGF5TWFza107XG4gIHJldHVybiBjYXB0aW9uID8gX19fRW1vdGlvbkpTWChcImZpZ2NhcHRpb25cIiwge1xuICAgIHJlZjogcmVmLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIGNhcHRpb24pIDogbnVsbDtcbn0pO1xuRXVpSW1hZ2VDYXB0aW9uLnByb3BUeXBlcyA9IHtcbiAgaXNPbk92ZXJsYXlNYXNrOiBQcm9wVHlwZXMuYm9vbFxufTtcbkV1aUltYWdlQ2FwdGlvbi5kaXNwbGF5TmFtZSA9ICdFdWlJbWFnZUNhcHRpb24nOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSwgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuZXhwb3J0IHZhciBldWlJbWFnZUNhcHRpb25TdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZUNhcHRpb25TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VDYXB0aW9uOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7O2xhYmVsOmV1aUltYWdlQ2FwdGlvbjtcIiksXG4gICAgaXNPbk92ZXJsYXlNYXNrOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7dGV4dC1zaGFkb3c6MCAxcHggMnB4IFwiLCB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMuaW5rLCAwLjYpLCBcIjtbY2xhc3MqPSdldWlMaW5rJ117Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7fTtsYWJlbDppc09uT3ZlcmxheU1hc2s7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpU2hhZG93IH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuZXhwb3J0IHZhciBldWlJbWFnZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4ge1xuICAgIGV1aUltYWdlOiAvKiNfX1BVUkVfXyovY3NzKFwidmVydGljYWwtYWxpZ246bWlkZGxlO1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIiAmLFtjbGFzcyo9J2V1aVRleHQnXSAme1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgMCksIFwiO307bGFiZWw6ZXVpSW1hZ2U7XCIpLFxuICAgIC8vIFZhcmlhdGlvbnNcbiAgICBpc0Z1bGxTY3JlZW46IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTtcIiwgbG9naWNhbENTUygnbWF4LWhlaWdodCcsICc4MHZoJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnODB2dycpLCBcIjs7bGFiZWw6aXNGdWxsU2NyZWVuO1wiKSxcbiAgICBoYXNTaGFkb3c6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7O2xhYmVsOmhhc1NoYWRvdztcIiksXG4gICAgLy8gU2l6ZXNcbiAgICAvLyBUaGVzZSBzaXplcyBhcmUgbW9zdGx5IHN1Z2dlc3Rpb25zLiBEb24ndCBsb29rIHRvbyBoYXJkIGZvciBtZWFuaW5nIGluIHRoZWlyIHZhbHVlcy5cbiAgICAvLyBTaXplIGlzIGFwcGxpZWQgdG8gdGhlIGltYWdlLCByYXRoZXIgdGhhbiB0aGUgd3JhcHBlciBmaWd1cmUgdG8gd29yayBiZXR0ZXIgd2l0aCBmbG9hdHNcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMHB4JyksIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzIwMHB4JyksIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzM2MHB4JyksIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICc2MDBweCcpLCBcIjs7bGFiZWw6eGw7XCIpLFxuICAgIG9yaWdpbmFsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJ2F1dG8nKSwgXCI7O2xhYmVsOm9yaWdpbmFsO1wiKSxcbiAgICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKSxcbiAgICBjdXN0b21TaXplOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJ2F1dG8nKSwgXCI7O2xhYmVsOmN1c3RvbVNpemU7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpRm9jdXNUcmFwIH0gZnJvbSAnLi4vZm9jdXNfdHJhcCc7XG5pbXBvcnQgeyBFdWlPdmVybGF5TWFzayB9IGZyb20gJy4uL292ZXJsYXlfbWFzayc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSwga2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsgZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlclN0eWxlcyB9IGZyb20gJy4vaW1hZ2VfZnVsbHNjcmVlbl93cmFwcGVyLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUJ1dHRvbiB9IGZyb20gJy4vaW1hZ2VfYnV0dG9uJztcbmltcG9ydCB7IGV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyB9IGZyb20gJy4vaW1hZ2VfYnV0dG9uLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUNhcHRpb24gfSBmcm9tICcuL2ltYWdlX2NhcHRpb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlciA9IGZ1bmN0aW9uIEV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIoX3JlZikge1xuICB2YXIgYWx0ID0gX3JlZi5hbHQsXG4gICAgaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgY2FwdGlvbiA9IF9yZWYuY2FwdGlvbixcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgc2V0SXNGdWxsU2NyZWVuID0gX3JlZi5zZXRJc0Z1bGxTY3JlZW4sXG4gICAgd3JhcHBlclByb3BzID0gX3JlZi53cmFwcGVyUHJvcHMsXG4gICAgaXNGdWxsV2lkdGggPSBfcmVmLmlzRnVsbFdpZHRoLFxuICAgIGZ1bGxTY3JlZW5JY29uQ29sb3IgPSBfcmVmLmZ1bGxTY3JlZW5JY29uQ29sb3IsXG4gICAgb25GdWxsU2NyZWVuID0gX3JlZi5vbkZ1bGxTY3JlZW47XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlciwgd3JhcHBlclByb3BzID09PSBudWxsIHx8IHdyYXBwZXJQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd3JhcHBlclByb3BzLmNzc107XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlcicsIHdyYXBwZXJQcm9wcyAmJiB3cmFwcGVyUHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIG9uS2V5RG93biA9IGZ1bmN0aW9uIG9uS2V5RG93bihldmVudCkge1xuICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuRVNDQVBFKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjbG9zZUZ1bGxTY3JlZW4oKTtcbiAgICB9XG4gIH07XG4gIHZhciBjbG9zZUZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBjbG9zZUZ1bGxTY3JlZW4oKSB7XG4gICAgc2V0SXNGdWxsU2NyZWVuKGZhbHNlKTtcbiAgICBvbkZ1bGxTY3JlZW4gPT09IG51bGwgfHwgb25GdWxsU2NyZWVuID09PSB2b2lkIDAgfHwgb25GdWxsU2NyZWVuKGZhbHNlKTtcbiAgfTtcbiAgdmFyIF91c2VJbm5lclRleHQgPSB1c2VJbm5lclRleHQoKSxcbiAgICBfdXNlSW5uZXJUZXh0MiA9IF9zbGljZWRUb0FycmF5KF91c2VJbm5lclRleHQsIDIpLFxuICAgIG9wdGlvbmFsQ2FwdGlvblJlZiA9IF91c2VJbm5lclRleHQyWzBdLFxuICAgIG9wdGlvbmFsQ2FwdGlvblRleHQgPSBfdXNlSW5uZXJUZXh0MlsxXTtcbiAgdmFyIGljb25TdHlsZXMgPSBldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzSWNvblN0eWxlcyA9IFtpY29uU3R5bGVzLmV1aUltYWdlQnV0dG9uX19pY29uLCBpY29uU3R5bGVzLmNsb3NlRnVsbFNjcmVlbl07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aU92ZXJsYXlNYXNrLCB7XG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImZ1bGxTY3JlZW5PdmVybGF5TWFza1wiXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpRm9jdXNUcmFwLCB7XG4gICAgc2Nyb2xsTG9jazogdHJ1ZSxcbiAgICBwcmV2ZW50U2Nyb2xsT25Gb2N1czogdHJ1ZSxcbiAgICBvbkNsaWNrT3V0c2lkZTogY2xvc2VGdWxsU2NyZWVuXG4gIH0sIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJmaWd1cmVcIiwgX2V4dGVuZHMoe1xuICAgIFwiYXJpYS1sYWJlbFwiOiBvcHRpb25hbENhcHRpb25UZXh0XG4gIH0sIHdyYXBwZXJQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9KSwgX19fRW1vdGlvbkpTWChFdWlJbWFnZUJ1dHRvbiwge1xuICAgIGhhc0FsdDogISFhbHQsXG4gICAgaGFzU2hhZG93OiBoYXNTaGFkb3csXG4gICAgb25DbGljazogY2xvc2VGdWxsU2NyZWVuLFxuICAgIG9uS2V5RG93bjogb25LZXlEb3duLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJkZWFjdGl2YXRlRnVsbFNjcmVlbkJ1dHRvblwiLFxuICAgIGlzRnVsbFNjcmVlbjogdHJ1ZSxcbiAgICBpc0Z1bGxXaWR0aDogaXNGdWxsV2lkdGgsXG4gICAgZnVsbFNjcmVlbkljb25Db2xvcjogZnVsbFNjcmVlbkljb25Db2xvclxuICB9LCBjaGlsZHJlbiksIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VDYXB0aW9uLCB7XG4gICAgY2FwdGlvbjogY2FwdGlvbixcbiAgICByZWY6IG9wdGlvbmFsQ2FwdGlvblJlZixcbiAgICBpc09uT3ZlcmxheU1hc2s6IHRydWVcbiAgfSkpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICB0eXBlOiBcImZ1bGxTY3JlZW5FeGl0XCIsXG4gICAgY29sb3I6IFwiZ2hvc3RcIixcbiAgICBjc3M6IGNzc0ljb25TdHlsZXNcbiAgfSkpKSk7XG59O1xuRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlci5wcm9wVHlwZXMgPSB7XG4gIGlzRnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBzZXRJc0Z1bGxTY3JlZW46IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MsIGV1aUNhbkFuaW1hdGUsIGV1aUFuaW1TbGlkZUluVXAgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXJTdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXI6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWF4LWhlaWdodCcsICc4MHZoJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnODB2dycpLCBcIiBcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwibGluZS1oZWlnaHQ6MDtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7YW5pbWF0aW9uOlwiLCBldWlBbmltU2xpZGVJblVwKGV1aVRoZW1lLnNpemUueHh4eGwpLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmV4dHJhU2xvdywgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ib3VuY2UsIFwiO30mOmhvdmVyIFtjbGFzcyo9J2V1aUltYWdlQ2FwdGlvbidde3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fTtsYWJlbDpldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsV2lkdGg7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nLCAnbCcsICd4bCcsICdmdWxsV2lkdGgnLCAnb3JpZ2luYWwnXTtcbnZhciBGTE9BVFMgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbnZhciBNQVJHSU5TID0gWydzJywgJ20nLCAnbCcsICd4bCddOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpVGhlbWVQcm92aWRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGVtaXRFdWlQcm92aWRlcldhcm5pbmcgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS93YXJuaW5nJztcbmltcG9ydCB7IGNhY2hlIGFzIGZhbGxiYWNrQ2FjaGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbW90aW9uL2Nzcyc7XG5pbXBvcnQgeyBFdWlHbG9iYWxTdHlsZXMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZy9yZXNldC9nbG9iYWxfc3R5bGVzJztcbmltcG9ydCB7IEV1aVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcvdXRpbGl0eS91dGlsaXR5JztcbmltcG9ydCB7IEV1aVRoZW1lQW1zdGVyZGFtIH0gZnJvbSAnLi4vLi4vdGhlbWVzJztcbmltcG9ydCB7IEV1aUNhY2hlUHJvdmlkZXIgfSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCB7IEV1aVN5c3RlbUNvbG9yTW9kZVByb3ZpZGVyIH0gZnJvbSAnLi9zeXN0ZW1fY29sb3JfbW9kZSc7XG5pbXBvcnQgeyBFdWlQcm92aWRlck5lc3RlZENoZWNrLCB1c2VJc05lc3RlZEV1aVByb3ZpZGVyIH0gZnJvbSAnLi9uZXN0ZWQnO1xuaW1wb3J0IHsgRXVpQ29tcG9uZW50RGVmYXVsdHNQcm92aWRlciB9IGZyb20gJy4vY29tcG9uZW50X2RlZmF1bHRzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaXNFbW90aW9uQ2FjaGVPYmplY3QgPSBmdW5jdGlvbiBpc0Vtb3Rpb25DYWNoZU9iamVjdChvYmopIHtcbiAgcmV0dXJuIG9iai5oYXNPd25Qcm9wZXJ0eSgna2V5Jyk7XG59O1xuZXhwb3J0IHZhciBFdWlQcm92aWRlciA9IGZ1bmN0aW9uIEV1aVByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIF9kZWZhdWx0Q2FjaGU7XG4gIHZhciBfcmVmJGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICBjYWNoZSA9IF9yZWYkY2FjaGUgPT09IHZvaWQgMCA/IGZhbGxiYWNrQ2FjaGUgOiBfcmVmJGNhY2hlLFxuICAgIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgIHRoZW1lID0gX3JlZiR0aGVtZSA9PT0gdm9pZCAwID8gRXVpVGhlbWVBbXN0ZXJkYW0gOiBfcmVmJHRoZW1lLFxuICAgIF9yZWYkZ2xvYmFsU3R5bGVzID0gX3JlZi5nbG9iYWxTdHlsZXMsXG4gICAgR2xvYmFscyA9IF9yZWYkZ2xvYmFsU3R5bGVzID09PSB2b2lkIDAgPyBFdWlHbG9iYWxTdHlsZXMgOiBfcmVmJGdsb2JhbFN0eWxlcyxcbiAgICBfcmVmJHV0aWxpdHlDbGFzc2VzID0gX3JlZi51dGlsaXR5Q2xhc3NlcyxcbiAgICBVdGlsaXRpZXMgPSBfcmVmJHV0aWxpdHlDbGFzc2VzID09PSB2b2lkIDAgPyBFdWlVdGlsaXR5Q2xhc3NlcyA6IF9yZWYkdXRpbGl0eUNsYXNzZXMsXG4gICAgY29sb3JNb2RlID0gX3JlZi5jb2xvck1vZGUsXG4gICAgbW9kaWZ5ID0gX3JlZi5tb2RpZnksXG4gICAgY29tcG9uZW50RGVmYXVsdHMgPSBfcmVmLmNvbXBvbmVudERlZmF1bHRzLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIGlzTmVzdGVkID0gdXNlSXNOZXN0ZWRFdWlQcm92aWRlcigpO1xuICBpZiAoaXNOZXN0ZWQpIHtcbiAgICB2YXIgcHJvdmlkZXJNZXNzYWdlID0gXCJgRXVpUHJvdmlkZXJgIHNob3VsZCBub3QgYmUgbmVzdGVkIG9yIHVzZWQgbW9yZSB0aGFuIG9uY2UsIG90aGVyIHRoYW4gYXQgdGhlIHRvcCBsZXZlbCBvZiB5b3VyIGFwcC5cXG4gICAgVXNlIGBFdWlUaGVtZVByb3ZpZGVyYCBpbnN0ZWFkIGZvciBuZXN0ZWQgY29tcG9uZW50LWxldmVsIHRoZW1pbmc6IGh0dHBzOi8vZWxhLnN0L2V1aXByb3ZpZGVyLlwiO1xuICAgIGVtaXRFdWlQcm92aWRlcldhcm5pbmcocHJvdmlkZXJNZXNzYWdlKTtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgdmFyIGRlZmF1bHRDYWNoZTtcbiAgdmFyIGdsb2JhbENhY2hlO1xuICB2YXIgdXRpbGl0eUNhY2hlO1xuICBpZiAoY2FjaGUpIHtcbiAgICBpZiAoaXNFbW90aW9uQ2FjaGVPYmplY3QoY2FjaGUpKSB7XG4gICAgICBjYWNoZS5jb21wYXQgPSB0cnVlO1xuICAgICAgZGVmYXVsdENhY2hlID0gY2FjaGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjYWNoZS5kZWZhdWx0KSB7XG4gICAgICAgIGNhY2hlLmRlZmF1bHQuY29tcGF0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHRDYWNoZSA9IGNhY2hlLmRlZmF1bHQ7XG4gICAgICBpZiAoY2FjaGUuZ2xvYmFsKSB7XG4gICAgICAgIGNhY2hlLmdsb2JhbC5jb21wYXQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgZ2xvYmFsQ2FjaGUgPSBjYWNoZS5nbG9iYWw7XG4gICAgICBpZiAoY2FjaGUudXRpbGl0eSkge1xuICAgICAgICBjYWNoZS51dGlsaXR5LmNvbXBhdCA9IHRydWU7XG4gICAgICB9XG4gICAgICB1dGlsaXR5Q2FjaGUgPSBjYWNoZS51dGlsaXR5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQcm92aWRlck5lc3RlZENoZWNrLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUNhY2hlUHJvdmlkZXIsIHtcbiAgICBjYWNoZTogKF9kZWZhdWx0Q2FjaGUgPSBkZWZhdWx0Q2FjaGUpICE9PSBudWxsICYmIF9kZWZhdWx0Q2FjaGUgIT09IHZvaWQgMCA/IF9kZWZhdWx0Q2FjaGUgOiBmYWxsYmFja0NhY2hlXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpU3lzdGVtQ29sb3JNb2RlUHJvdmlkZXIsIG51bGwsIGZ1bmN0aW9uIChzeXN0ZW1Db2xvck1vZGUpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUaGVtZVByb3ZpZGVyLCB7XG4gICAgICB0aGVtZTogdGhlbWUgIT09IG51bGwgJiYgdGhlbWUgIT09IHZvaWQgMCA/IHRoZW1lIDogdW5kZWZpbmVkLFxuICAgICAgY29sb3JNb2RlOiBjb2xvck1vZGUgIT09IG51bGwgJiYgY29sb3JNb2RlICE9PSB2b2lkIDAgPyBjb2xvck1vZGUgOiBzeXN0ZW1Db2xvck1vZGUsXG4gICAgICBtb2RpZnk6IG1vZGlmeVxuICAgIH0sIHRoZW1lICYmIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpQ2FjaGVQcm92aWRlciwge1xuICAgICAgY2FjaGU6IGdsb2JhbENhY2hlLFxuICAgICAgY2hpbGRyZW46IEdsb2JhbHMgJiYgX19fRW1vdGlvbkpTWChHbG9iYWxzLCBudWxsKVxuICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aUNhY2hlUHJvdmlkZXIsIHtcbiAgICAgIGNhY2hlOiB1dGlsaXR5Q2FjaGUsXG4gICAgICBjaGlsZHJlbjogVXRpbGl0aWVzICYmIF9fX0Vtb3Rpb25KU1goVXRpbGl0aWVzLCBudWxsKVxuICAgIH0pKSwgX19fRW1vdGlvbkpTWChFdWlDb21wb25lbnREZWZhdWx0c1Byb3ZpZGVyLCB7XG4gICAgICBjb21wb25lbnREZWZhdWx0czogY29tcG9uZW50RGVmYXVsdHNcbiAgICB9LCBjaGlsZHJlbikpO1xuICB9KSkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS9ob29rcyc7XG5pbXBvcnQgeyBldWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hY2Nlc3NpYmlsaXR5L3NjcmVlbl9yZWFkZXJfb25seS9zY3JlZW5fcmVhZGVyX29ubHkuc3R5bGVzJztcbmltcG9ydCB7IGV1aUZ1bGxIZWlnaHQsIGV1aVRleHRCcmVha1dvcmQsIGV1aVRleHRUcnVuY2F0ZSwgZXVpTnVtYmVyRm9ybWF0LCBldWlTY3JvbGxCYXJTdHlsZXMsIGV1aVlTY3JvbGwsIGV1aVhTY3JvbGwsIGV1aVlTY3JvbGxXaXRoU2hhZG93cywgZXVpWFNjcm9sbFdpdGhTaGFkb3dzLCBldWlCcmVha3BvaW50IH0gZnJvbSAnLi4vbWl4aW5zJztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgZ2xvYmFsU3R5bGVzID0gZnVuY3Rpb24gZ2xvYmFsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4gLyojX19QVVJFX18qL2NzcyhcIi5ldWlTY3JlZW5SZWFkZXJPbmx5e1wiLCBldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO30uZXVpLWFsaWduQmFzZWxpbmV7dmVydGljYWwtYWxpZ246YmFzZWxpbmUhaW1wb3J0YW50O30uZXVpLWFsaWduQm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbSFpbXBvcnRhbnQ7fS5ldWktYWxpZ25NaWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlIWltcG9ydGFudDt9LmV1aS1hbGlnblRvcHt2ZXJ0aWNhbC1hbGlnbjp0b3AhaW1wb3J0YW50O30uZXVpLWRpc3BsYXlCbG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt9LmV1aS1kaXNwbGF5SW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudDt9LmV1aS1kaXNwbGF5SW5saW5lQmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50O30uZXVpLWZ1bGxXaWR0aHtkaXNwbGF5OmJsb2NrIWltcG9ydGFudDtcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJSAhaW1wb3J0YW50JyksIFwiO30uZXVpLWZ1bGxIZWlnaHR7XCIsIGV1aUZ1bGxIZWlnaHQoKSwgXCI7fS5ldWktdGV4dENlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnQ7fS5ldWktdGV4dExlZnR7dGV4dC1hbGlnbjpzdGFydCFpbXBvcnRhbnQ7fS5ldWktdGV4dFJpZ2h0e3RleHQtYWxpZ246ZW5kIWltcG9ydGFudDt9LmV1aS10ZXh0Tm9XcmFwe3doaXRlLXNwYWNlOm5vd3JhcCFpbXBvcnRhbnQ7fS5ldWktdGV4dEluaGVyaXRDb2xvcntjb2xvcjppbmhlcml0IWltcG9ydGFudDt9LmV1aS10ZXh0QnJlYWtXb3Jke1wiLCBldWlUZXh0QnJlYWtXb3JkKCksIFwiO30uZXVpLXRleHRCcmVha0FsbHtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQhaW1wb3J0YW50O3dvcmQtYnJlYWs6YnJlYWstYWxsIWltcG9ydGFudDt9LmV1aS10ZXh0QnJlYWtOb3JtYWx7b3ZlcmZsb3ctd3JhcDpub3JtYWwhaW1wb3J0YW50O3dvcmQtd3JhcDpub3JtYWwhaW1wb3J0YW50O3dvcmQtYnJlYWs6bm9ybWFsIWltcG9ydGFudDt9LmV1aS10ZXh0VHJ1bmNhdGV7XCIsIGV1aVRleHRUcnVuY2F0ZSgpLCBcIjt9LmV1aS10ZXh0TnVtYmVye1wiLCBldWlOdW1iZXJGb3JtYXQoZXVpVGhlbWVDb250ZXh0KSwgXCI7fS5ldWktc2Nyb2xsQmFye1wiLCBldWlTY3JvbGxCYXJTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSwgXCI7fS5ldWkteVNjcm9sbHtcIiwgZXVpWVNjcm9sbChldWlUaGVtZUNvbnRleHQpLCBcIjt9LmV1aS14U2Nyb2xse1wiLCBldWlYU2Nyb2xsKGV1aVRoZW1lQ29udGV4dCksIFwiO30uZXVpLXlTY3JvbGxXaXRoU2hhZG93c3tcIiwgZXVpWVNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lQ29udGV4dCksIFwiO30uZXVpLXhTY3JvbGxXaXRoU2hhZG93c3tcIiwgZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lQ29udGV4dCksIFwiO31bY2xhc3MqPSdldWktc2hvd0Zvcidde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnQ7fVwiLCBPYmplY3Qua2V5cyhldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUuYnJlYWtwb2ludCkubWFwKGZ1bmN0aW9uIChzaXplKSB7XG4gICAgcmV0dXJuIFwiXFxuICAgICAgLmV1aS1oaWRlRm9yLS1cIi5jb25jYXQoc2l6ZSwgXCIge1xcbiAgICAgICAgXCIpLmNvbmNhdChldWlCcmVha3BvaW50KGV1aVRoZW1lQ29udGV4dCwgW3NpemVdKSwgXCIge1xcbiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIC5ldWktc2hvd0Zvci0tXCIpLmNvbmNhdChzaXplLCBcIiB7XFxuICAgICAgICBcIikuY29uY2F0KGV1aUJyZWFrcG9pbnQoZXVpVGhlbWVDb250ZXh0LCBbc2l6ZV0pLCBcIiB7XFxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICAuZXVpLXNob3dGb3ItLVwiKS5jb25jYXQoc2l6ZSwgXCItLWJsb2NrIHtcXG4gICAgICAgIFwiKS5jb25jYXQoZXVpQnJlYWtwb2ludChldWlUaGVtZUNvbnRleHQsIFtzaXplXSksIFwiIHtcXG4gICAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgLmV1aS1zaG93Rm9yLS1cIikuY29uY2F0KHNpemUsIFwiLS1pbmxpbmVCbG9jayB7XFxuICAgICAgICBcIikuY29uY2F0KGV1aUJyZWFrcG9pbnQoZXVpVGhlbWVDb250ZXh0LCBbc2l6ZV0pLCBcIiB7XFxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICAuZXVpLXNob3dGb3ItLVwiKS5jb25jYXQoc2l6ZSwgXCItLWZsZXgge1xcbiAgICAgICAgXCIpLmNvbmNhdChldWlCcmVha3BvaW50KGV1aVRoZW1lQ29udGV4dCwgW3NpemVdKSwgXCIge1xcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICAgICAgICB9XFxuICAgICAgfVwiKTtcbiAgfSksIFwiOztsYWJlbDpnbG9iYWxTdHlsZXM7XCIpO1xufTtcbmV4cG9ydCB2YXIgRXVpVXRpbGl0eUNsYXNzZXMgPSBmdW5jdGlvbiBFdWlVdGlsaXR5Q2xhc3NlcygpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBnbG9iYWxTdHlsZXMoZXVpVGhlbWUpXG4gIH0pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENhY2hlUHJvdmlkZXIgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDYWNoZVByb3ZpZGVyID0gZnVuY3Rpb24gRXVpQ2FjaGVQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gY2hpbGRyZW4gJiYgY2FjaGUgPyBfX19FbW90aW9uSlNYKENhY2hlUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2FjaGVcbiAgfSwgY2hpbGRyZW4pIDogX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pO1xufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuZXhwb3J0IHZhciBDT0xPUl9NT0RFX01FRElBX1FVRVJZID0gJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknO1xuZXhwb3J0IHZhciBFdWlTeXN0ZW1Db2xvck1vZGVQcm92aWRlciA9IGZ1bmN0aW9uIEV1aVN5c3RlbUNvbG9yTW9kZVByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgLy8gQ2hlY2sgdHlwZW9mIGFuZCB1c2Ugb3B0aW9uYWwgY2hhaW5pbmcgZm9yIFNTUiBvciB0ZXN0IGVudmlyb25tZW50c1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF93aW5kb3ckbWF0Y2hNZWRpYSwgX3dpbmRvdztcbiAgICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAoX3dpbmRvdyRtYXRjaE1lZGlhID0gKF93aW5kb3cgPSB3aW5kb3cpLm1hdGNoTWVkaWEpICE9PSBudWxsICYmIF93aW5kb3ckbWF0Y2hNZWRpYSAhPT0gdm9pZCAwICYmIChfd2luZG93JG1hdGNoTWVkaWEgPSBfd2luZG93JG1hdGNoTWVkaWEuY2FsbChfd2luZG93LCBDT0xPUl9NT0RFX01FRElBX1FVRVJZKSkgIT09IG51bGwgJiYgX3dpbmRvdyRtYXRjaE1lZGlhICE9PSB2b2lkIDAgJiYgX3dpbmRvdyRtYXRjaE1lZGlhLm1hdGNoZXMgPyAnREFSSycgOiAnTElHSFQnO1xuICAgIH0pLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHN5c3RlbUNvbG9yTW9kZSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0U3lzdGVtQ29sb3JNb2RlID0gX3VzZVN0YXRlMlsxXTtcblxuICAvLyBMaXN0ZW4gZm9yIHN5c3RlbSBjaGFuZ2VzXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF93aW5kb3ckbWF0Y2hNZWRpYTIsIF93aW5kb3cyLCBfd2luZG93JG1hdGNoTWVkaWEyJGMsIF93aW5kb3ckbWF0Y2hNZWRpYTIkYzI7XG4gICAgdmFyIGV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBldmVudExpc3RlbmVyKGV2ZW50KSB7XG4gICAgICBzZXRTeXN0ZW1Db2xvck1vZGUoZXZlbnQubWF0Y2hlcyA/ICdEQVJLJyA6ICdMSUdIVCcpO1xuICAgIH07XG5cbiAgICAvLyBPcHRpb25hbCBjaGFpbmluZyBoZXJlIGlzIGZvciB0ZXN0IGVudmlyb25tZW50cyAtIFNTUiBzaG91bGQgbm90IHJ1biB1c2VFZmZlY3RcbiAgICAoX3dpbmRvdyRtYXRjaE1lZGlhMiA9IChfd2luZG93MiA9IHdpbmRvdykubWF0Y2hNZWRpYSkgPT09IG51bGwgfHwgX3dpbmRvdyRtYXRjaE1lZGlhMiA9PT0gdm9pZCAwIHx8IChfd2luZG93JG1hdGNoTWVkaWEyJGMgPSAoX3dpbmRvdyRtYXRjaE1lZGlhMiRjMiA9IF93aW5kb3ckbWF0Y2hNZWRpYTIuY2FsbChfd2luZG93MiwgQ09MT1JfTU9ERV9NRURJQV9RVUVSWSkpLmFkZEV2ZW50TGlzdGVuZXIpID09PSBudWxsIHx8IF93aW5kb3ckbWF0Y2hNZWRpYTIkYyA9PT0gdm9pZCAwIHx8IF93aW5kb3ckbWF0Y2hNZWRpYTIkYy5jYWxsKF93aW5kb3ckbWF0Y2hNZWRpYTIkYzIsICdjaGFuZ2UnLCBldmVudExpc3RlbmVyKTtcblxuICAgIC8vIENsZWFuIHVwIHRoZSBsaXN0ZW5lciBvbiB1bm1vdW50XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfd2luZG93JG1hdGNoTWVkaWEzLCBfd2luZG93MywgX3dpbmRvdyRtYXRjaE1lZGlhMyRjLCBfd2luZG93JG1hdGNoTWVkaWEzJGMyO1xuICAgICAgKF93aW5kb3ckbWF0Y2hNZWRpYTMgPSAoX3dpbmRvdzMgPSB3aW5kb3cpLm1hdGNoTWVkaWEpID09PSBudWxsIHx8IF93aW5kb3ckbWF0Y2hNZWRpYTMgPT09IHZvaWQgMCB8fCAoX3dpbmRvdyRtYXRjaE1lZGlhMyRjID0gKF93aW5kb3ckbWF0Y2hNZWRpYTMkYzIgPSBfd2luZG93JG1hdGNoTWVkaWEzLmNhbGwoX3dpbmRvdzMsIENPTE9SX01PREVfTUVESUFfUVVFUlkpKS5yZW1vdmVFdmVudExpc3RlbmVyKSA9PT0gbnVsbCB8fCBfd2luZG93JG1hdGNoTWVkaWEzJGMgPT09IHZvaWQgMCB8fCBfd2luZG93JG1hdGNoTWVkaWEzJGMuY2FsbChfd2luZG93JG1hdGNoTWVkaWEzJGMyLCAnY2hhbmdlJywgZXZlbnRMaXN0ZW5lcik7XG4gICAgfTtcbiAgfSwgW10pO1xuICByZXR1cm4gY2hpbGRyZW4oc3lzdGVtQ29sb3JNb2RlKTtcbn07XG5FdWlTeXN0ZW1Db2xvck1vZGVQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBUaGlzIHV0aWwgY3JlYXRlcyBhIGNvbnRleHQgZm9yIEV1aVByb3ZpZGVycyB0byB1c2UgYW5kIGRldGVybWluZSBpZiB0aGV5J3JlXG4gKiB0aGUgb25seSAodG9wLW1vc3QpIEV1aVByb3ZpZGVyIGluIHRoZSBhcHAuIElmIHRoZXkgYXJlbid0IChpLmUuLCB0aGV5J3JlXG4gKiBuZXN0ZWQgd2l0aGluIGFub3RoZXIgRXVpUHJvdmlkZXIpIHdlIHNob3VsZCB0aHJvdyBhIHdhcm5pbmcgYW5kIG5vdFxuICogcmVuZGVyIGluc3RhbnRpYXRlIHRoZSBuZXN0ZWQgRXVpUHJvdmlkZXIuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aU5lc3RlZFByb3ZpZGVyQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KGZhbHNlKTtcbmV4cG9ydCB2YXIgRXVpUHJvdmlkZXJOZXN0ZWRDaGVjayA9IGZ1bmN0aW9uIEV1aVByb3ZpZGVyTmVzdGVkQ2hlY2soX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlOZXN0ZWRQcm92aWRlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxuICB9LCBjaGlsZHJlbik7XG59O1xuZXhwb3J0IHZhciB1c2VJc05lc3RlZEV1aVByb3ZpZGVyID0gZnVuY3Rpb24gdXNlSXNOZXN0ZWRFdWlQcm92aWRlcigpIHtcbiAgcmV0dXJuICEhdXNlQ29udGV4dChFdWlOZXN0ZWRQcm92aWRlckNvbnRleHQpO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwib3B0aW9uc1wiLCBcIm9uQ2hhbmdlXCIsIFwib25BY3RpdmVPcHRpb25DaGFuZ2VcIiwgXCJzZWFyY2hhYmxlXCIsIFwic2VhcmNoUHJvcHNcIiwgXCJzaW5nbGVTZWxlY3Rpb25cIiwgXCJpc0xvYWRpbmdcIiwgXCJsaXN0UHJvcHNcIiwgXCJyZW5kZXJPcHRpb25cIiwgXCJoZWlnaHRcIiwgXCJhbGxvd0V4Y2x1c2lvbnNcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBcImxvYWRpbmdNZXNzYWdlXCIsIFwibm9NYXRjaGVzTWVzc2FnZVwiLCBcImVtcHR5TWVzc2FnZVwiLCBcImVycm9yTWVzc2FnZVwiLCBcInNlbGVjdGFibGVTY3JlZW5SZWFkZXJUZXh0XCIsIFwiaXNQcmVGaWx0ZXJlZFwiLCBcIm9wdGlvbk1hdGNoZXJcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBcIm9uQ2hhbmdlXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiaW5wdXRSZWZcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBcImlzVmlydHVhbGl6ZWRcIiwgXCJyb3dIZWlnaHRcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgY3JlYXRlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzLCBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciB9IGZyb20gJy4uL2xvYWRpbmcnO1xuaW1wb3J0IHsgRXVpU3BhY2VyIH0gZnJvbSAnLi4vc3BhY2VyJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlckxpdmUsIEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aVNlbGVjdGFibGVTZWFyY2ggfSBmcm9tICcuL3NlbGVjdGFibGVfc2VhcmNoJztcbmltcG9ydCB7IEV1aVNlbGVjdGFibGVNZXNzYWdlIH0gZnJvbSAnLi9zZWxlY3RhYmxlX21lc3NhZ2UnO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZUxpc3QgfSBmcm9tICcuL3NlbGVjdGFibGVfbGlzdCc7XG5pbXBvcnQgeyBjcmVhdGVQYXJ0aWFsU3RyaW5nRXF1YWxpdHlPcHRpb25NYXRjaGVyLCBnZXRNYXRjaGluZ09wdGlvbnMgfSBmcm9tICcuL21hdGNoaW5nX29wdGlvbnMnO1xuaW1wb3J0IHsgZXVpU2VsZWN0YWJsZVN0eWxlcyBhcyBzdHlsZXMgfSBmcm9tICcuL3NlbGVjdGFibGUuc3R5bGVzJztcblxuLy8gVGhlIGBzZWFyY2hhYmxlYCBwcm9wIGhhcyBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIGExMXkuXG4vLyBXaGVuIHByZXNlbnQsIHdlIGVmZmVjdGl2ZWx5IGNoYW5nZSBmcm9tIGFkaGVyaW5nXG4vLyB0byB0aGUgQVJJQSBgbGlzdGJveGAgc3BlYyAoaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjIvI0xpc3Rib3gpXG4vLyB0byB0aGUgQVJJQSBgY29tYm9ib3hgIHNwZWMgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4yLyNjb21ib2JveClcbi8vIGFuZCAocmUpaW1wbGVtZW50IGFsbCByZWxldmFudCBhdHRyaWJ1dGVzIGFuZCBrZXlib2FyZCBpbnRlcmFjdGlvbnMuXG4vLyBUYWtlIG5vdGUgb2YgbG9naWMgdGhhdCByZWxpZXMgb24gYHNlYXJjaGFibGVgIHRvIGVuc3VyZSB0aGF0IGFueVxuLy8gbW9kaWZpY2F0aW9ucyByZW1haW4gaW4gYWxpZ25tZW50LlxuLy9cbi8vIGBzZWFyY2hQcm9wc2AgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIHdoZW4gYHNlYXJjaGFibGVgIGlzIHRydWVcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpU2VsZWN0YWJsZShwcm9wcykge1xuICAgIHZhciBfc2VhcmNoUHJvcHMkb25DaGFuZ2U7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlTZWxlY3RhYmxlKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpU2VsZWN0YWJsZSwgW3Byb3BzXSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImlucHV0UmVmXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjb250YWluZXJSZWZcIiwgLyojX19QVVJFX18qL2NyZWF0ZVJlZigpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib3B0aW9uc0xpc3RSZWZcIiwgLyojX19QVVJFX18qL2NyZWF0ZVJlZigpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicHJldmVudE9uRm9jdXNcIiwgZmFsc2UpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyb290SWRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibWVzc2FnZUNvbnRlbnRJZFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJsaXN0SWRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaXNGb2N1c09uU2VhcmNoT3JMaXN0Qm94XCIsIGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgIHZhciBfdGhpcyRvcHRpb25zTGlzdFJlZiQ7XG4gICAgICB2YXIgc2VhcmNoSGFzRm9jdXMgPSBfdGhpcy5wcm9wcy5zZWFyY2hhYmxlICYmIHRhcmdldCA9PT0gX3RoaXMuaW5wdXRSZWY7XG4gICAgICB2YXIgbGlzdEJveCA9IChfdGhpcyRvcHRpb25zTGlzdFJlZiQgPSBfdGhpcy5vcHRpb25zTGlzdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdGhpcyRvcHRpb25zTGlzdFJlZiQgPT09IHZvaWQgMCB8fCAoX3RoaXMkb3B0aW9uc0xpc3RSZWYkID0gX3RoaXMkb3B0aW9uc0xpc3RSZWYkLmxpc3RCb3hSZWYpID09PSBudWxsIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkb3B0aW9uc0xpc3RSZWYkLnBhcmVudEVsZW1lbnQ7XG4gICAgICB2YXIgbGlzdEJveENvbnRhaW5zRm9jdXMgPSB0YXJnZXQgaW5zdGFuY2VvZiBOb2RlICYmIChsaXN0Qm94ID09PSBudWxsIHx8IGxpc3RCb3ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxpc3RCb3guY29udGFpbnModGFyZ2V0KSk7XG4gICAgICB2YXIgbGlzdEJveEhhc0ZvY3VzID0gdGFyZ2V0ID09PSBsaXN0Qm94IHx8IGxpc3RCb3hDb250YWluc0ZvY3VzO1xuICAgICAgcmV0dXJuIHNlYXJjaEhhc0ZvY3VzIHx8IGxpc3RCb3hIYXNGb2N1cztcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Nb3VzZURvd25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQnlwYXNzIG9uRm9jdXMgd2hlbiBhIGNsaWNrIGV2ZW50IG9yaWdpbmF0ZXMgZnJvbSB0aGlzLmNvbnRhaW5lclJlZi5cbiAgICAgIC8vIFByZXZlbnRzIG9uRm9jdXMgZnJvbSBzY3JvbGxpbmcgYXdheSBmcm9tIGEgY2xpY2tlZCBvcHRpb24gYW5kIG5lZ2F0aW5nIHRoZSBzZWxlY3Rpb24gZXZlbnQuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzQxNDdcbiAgICAgIF90aGlzLnByZXZlbnRPbkZvY3VzID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Gb2N1c1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5wcmV2ZW50T25Gb2N1cykge1xuICAgICAgICBfdGhpcy5wcmV2ZW50T25Gb2N1cyA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIV90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zLmxlbmd0aCB8fCBfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCAmJiAhX3RoaXMuaXNGb2N1c09uU2VhcmNoT3JMaXN0Qm94KGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGZpcnN0U2VsZWN0ZWQgPSBfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gb3B0aW9uLmNoZWNrZWQgJiYgIW9wdGlvbi5kaXNhYmxlZCAmJiAhb3B0aW9uLmlzR3JvdXBMYWJlbDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpcnN0U2VsZWN0ZWQgPiAtMSkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IGZpcnN0U2VsZWN0ZWQsXG4gICAgICAgICAgaXNGb2N1c2VkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuICFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5pc0dyb3VwTGFiZWw7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgaXNGb2N1c2VkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgb3B0aW9uc0xpc3QgPSBfdGhpcy5vcHRpb25zTGlzdFJlZi5jdXJyZW50O1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGUgdXNlciBpcyBpbnRlcmFjdGluZyB3aXRoIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gc2VhcmNoYm94IG9yIHNlbGVjdGlvbiBsaXN0LiBJZiBzbywgdGhlIHVzZXIgbWF5IGJlIGF0dGVtcHRpbmcgdG9cbiAgICAgIC8vIGludGVyYWN0IHdpdGggdGhlIHNlYXJjaCBjbGVhciBidXR0b24gb3IgYSB0b3RhbGx5IGN1c3RvbSBidXR0b24sXG4gICAgICAvLyBhbmQgbGlzdGJveCBrZXlib2FyZCBuYXZpZ2F0aW9uL3NlbGVjdGlvbiBzaG91bGQgbm90IGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmICghX3RoaXMuaXNGb2N1c09uU2VhcmNoT3JMaXN0Qm94KGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiB1bmRlZmluZWQsXG4gICAgICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX1VQOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgX3RoaXMuaW5jcmVtZW50QWN0aXZlT3B0aW9uSW5kZXgoLTEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGtleXMuQVJST1dfRE9XTjpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIF90aGlzLmluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4KDEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZvciBub24tc2VhcmNoYWJsZSBpbnN0YW5jZXMsIFNQQUNFIGludGVyYWN0aW9uIHNob3VsZCBhbGlnbiB3aXRoXG4gICAgICAgIC8vIHRoZSB1c2VyIGV4cGVjdGF0aW9uIG9mIHNlbGVjdGlvbiB0b2dnbGluZyAoZS5nLiwgaW5wdXRbdHlwZT1jaGVja2JveF0pLlxuICAgICAgICAvLyBFTlRFUiBpcyBhbHNvIGEgdmFsaWQgc2VsZWN0aW9uIG1lY2hhbmlzbSBpbiB0aGlzIGNhc2UuXG4gICAgICAgIGNhc2Uga2V5cy5FTlRFUjpcbiAgICAgICAgY2FzZSBrZXlzLlNQQUNFOlxuICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5zZWFyY2hhYmxlKSB7XG4gICAgICAgICAgICAvLyBGb3Igc2VhcmNoYWJsZSBpbnN0YW5jZXMsIFNQQUNFIGlzIHJlc2VydmVkIGFzIGEgY2hhcmFjdGVyIGZvciBmaWx0ZXJpbmdcbiAgICAgICAgICAgIC8vIHZpYSB0aGUgaW5wdXQgYm94LCBhbmQgYXMgc3VjaCBvbmx5IEVOVEVSIHdpbGwgdG9nZ2xlIHNlbGVjdGlvbi5cbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IF90aGlzLmlucHV0UmVmICYmIGV2ZW50LmtleSA9PT0ga2V5cy5TUEFDRSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgaWYgKF90aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGwgJiYgb3B0aW9uc0xpc3QpIHtcbiAgICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTsgLy8gTk9URTogVGhpcyBpcyBuZWVkZWQgZm9yIFJlYWN0IHYxNiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgb3B0aW9uc0xpc3Qub25BZGRPclJlbW92ZU9wdGlvbihfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9uc1tfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleF0sIGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Uga2V5cy5BTFQ6XG4gICAgICAgIGNhc2Uga2V5cy5TSElGVDpcbiAgICAgICAgY2FzZSBrZXlzLkNUUkw6XG4gICAgICAgIGNhc2Uga2V5cy5NRVRBOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiB1bmRlZmluZWRcbiAgICAgICAgICB9LCBfdGhpcy5vbkZvY3VzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaW5jcmVtZW50QWN0aXZlT3B0aW9uSW5kZXhcIiwgZnVuY3Rpb24gKGFtb3VudCkge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMgYXZhaWxhYmxlLCBkbyBub3RoaW5nLlxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3JlZi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICB2aXNpYmxlT3B0aW9ucyA9IF9yZWYudmlzaWJsZU9wdGlvbnM7XG4gICAgICAgIHZhciBuZXh0QWN0aXZlT3B0aW9uSW5kZXg7XG4gICAgICAgIGlmIChhY3RpdmVPcHRpb25JbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1c2VyJ3Mga2V5Ym9hcmQgbmF2aWdhdGlvbiBvZiB0aGUgbWVudSwgdGhlbiB3ZSdsbCBmb2N1c1xuICAgICAgICAgIC8vIGVpdGhlciB0aGUgZmlyc3Qgb3IgbGFzdCBpdGVtLlxuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IGFtb3VudCA8IDAgPyB2aXNpYmxlT3B0aW9ucy5sZW5ndGggLSAxIDogMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhY3RpdmVPcHRpb25JbmRleCArIGFtb3VudDtcbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA9PT0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdyb3VwIHRpdGxlcyBhbmQgZGlzYWJsZWQgb3B0aW9ucyBhcmUgaW5jbHVkZWQgaW4gb3B0aW9uIGxpc3QgYnV0IGFyZSBub3Qgc2VsZWN0YWJsZVxuICAgICAgICB2YXIgZGlyZWN0aW9uID0gYW1vdW50ID4gMCA/IDEgOiAtMTtcbiAgICAgICAgd2hpbGUgKHZpc2libGVPcHRpb25zW25leHRBY3RpdmVPcHRpb25JbmRleF0uaXNHcm91cExhYmVsIHx8IHZpc2libGVPcHRpb25zW25leHRBY3RpdmVPcHRpb25JbmRleF0uZGlzYWJsZWQpIHtcbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBuZXh0QWN0aXZlT3B0aW9uSW5kZXggKyBkaXJlY3Rpb247XG4gICAgICAgICAgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IHZpc2libGVPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IHZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogbmV4dEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25TZWFyY2hDaGFuZ2VcIiwgZnVuY3Rpb24gKHNlYXJjaFZhbHVlLCB2aXNpYmxlT3B0aW9ucykge1xuICAgICAgdmFyIF90aGlzJHByb3BzJHNlYXJjaFBybywgX3RoaXMkcHJvcHMkc2VhcmNoUHJvMjtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICB2aXNpYmxlT3B0aW9uczogdmlzaWJsZU9wdGlvbnMsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiB1bmRlZmluZWRcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLnN0YXRlLmlzRm9jdXNlZCkge1xuICAgICAgICAgIF90aGlzLm9uRm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAoX3RoaXMkcHJvcHMkc2VhcmNoUHJvID0gX3RoaXMucHJvcHMuc2VhcmNoUHJvcHMpID09PSBudWxsIHx8IF90aGlzJHByb3BzJHNlYXJjaFBybyA9PT0gdm9pZCAwIHx8IChfdGhpcyRwcm9wcyRzZWFyY2hQcm8yID0gX3RoaXMkcHJvcHMkc2VhcmNoUHJvLm9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRzZWFyY2hQcm8yID09PSB2b2lkIDAgfHwgX3RoaXMkcHJvcHMkc2VhcmNoUHJvMi5jYWxsKF90aGlzJHByb3BzJHNlYXJjaFBybywgc2VhcmNoVmFsdWUsIHZpc2libGVPcHRpb25zKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Db250YWluZXJCbHVyXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAvLyBJZ25vcmUgYmx1ciBldmVudHMgd2hlbiBtb3ZpbmcgZnJvbSBzZWFyY2ggdG8gb3B0aW9uIHRvIGF2b2lkIGFjdGl2ZU9wdGlvbkluZGV4IGNvbmZsaWN0c1xuICAgICAgaWYgKF90aGlzLmlzRm9jdXNPblNlYXJjaE9yTGlzdEJveChlLnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uT3B0aW9uQ2xpY2tcIiwgZnVuY3Rpb24gKG9wdGlvbnMsIGV2ZW50LCBjbGlja2VkT3B0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgaXNQcmVGaWx0ZXJlZCA9IF90aGlzJHByb3BzLmlzUHJlRmlsdGVyZWQsXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2UsXG4gICAgICAgIG9wdGlvbk1hdGNoZXIgPSBfdGhpcyRwcm9wcy5vcHRpb25NYXRjaGVyO1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gX3RoaXMuc3RhdGUuc2VhcmNoVmFsdWU7XG4gICAgICB2YXIgdmlzaWJsZU9wdGlvbnMgPSBnZXRNYXRjaGluZ09wdGlvbnMoe1xuICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUgIT09IG51bGwgJiYgc2VhcmNoVmFsdWUgIT09IHZvaWQgMCA/IHNlYXJjaFZhbHVlIDogJycsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQ6ICEhaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBbXSxcbiAgICAgICAgb3B0aW9uTWF0Y2hlcjogb3B0aW9uTWF0Y2hlclxuICAgICAgfSk7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZpc2libGVPcHRpb25zOiB2aXNpYmxlT3B0aW9uc1xuICAgICAgfSk7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2Uob3B0aW9ucywgZXZlbnQsIGNsaWNrZWRPcHRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzY3JvbGxUb0l0ZW1cIiwgZnVuY3Rpb24gKGluZGV4LCBhbGlnbikge1xuICAgICAgdmFyIF90aGlzJG9wdGlvbnNMaXN0UmVmJDI7XG4gICAgICAoX3RoaXMkb3B0aW9uc0xpc3RSZWYkMiA9IF90aGlzLm9wdGlvbnNMaXN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJDIgPT09IHZvaWQgMCB8fCAoX3RoaXMkb3B0aW9uc0xpc3RSZWYkMiA9IF90aGlzJG9wdGlvbnNMaXN0UmVmJDIubGlzdFJlZikgPT09IG51bGwgfHwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkMiA9PT0gdm9pZCAwIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJDIuc2Nyb2xsVG9JdGVtKGluZGV4LCBhbGlnbik7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm1ha2VPcHRpb25JZFwiLCBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgIHJldHVybiBpbmRleCAhPSBudWxsID8gXCJcIi5jb25jYXQoX3RoaXMubGlzdElkLCBcIl9vcHRpb24tXCIpLmNvbmNhdChpbmRleCkgOiAnJztcbiAgICB9KTtcbiAgICBfdGhpcy5yb290SWQgPSBwcm9wcy5pZCA/IGZ1bmN0aW9uIChzdWZmaXgpIHtcbiAgICAgIHJldHVybiBcIlwiLmNvbmNhdChwcm9wcy5pZCkuY29uY2F0KHN1ZmZpeCA/IFwiX1wiLmNvbmNhdChzdWZmaXgpIDogJycpO1xuICAgIH0gOiBodG1sSWRHZW5lcmF0b3IoKTtcbiAgICBfdGhpcy5saXN0SWQgPSBfdGhpcy5yb290SWQoJ2xpc3Rib3gnKTtcbiAgICBfdGhpcy5tZXNzYWdlQ29udGVudElkID0gX3RoaXMucm9vdElkKCdtZXNzYWdlQ29udGVudCcpO1xuICAgIHZhciBfb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMsXG4gICAgICBzaW5nbGVTZWxlY3Rpb24gPSBwcm9wcy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICBfaXNQcmVGaWx0ZXJlZCA9IHByb3BzLmlzUHJlRmlsdGVyZWQsXG4gICAgICBzZWFyY2hQcm9wcyA9IHByb3BzLnNlYXJjaFByb3BzO1xuICAgIHZhciBpbml0aWFsU2VhcmNoVmFsdWUgPSAoc2VhcmNoUHJvcHMgPT09IG51bGwgfHwgc2VhcmNoUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlYXJjaFByb3BzLnZhbHVlKSB8fCBTdHJpbmcoKHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWFyY2hQcm9wcy5kZWZhdWx0VmFsdWUpIHx8ICcnKTtcbiAgICB2YXIgX3Zpc2libGVPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKHtcbiAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgc2VhcmNoVmFsdWU6IGluaXRpYWxTZWFyY2hWYWx1ZSxcbiAgICAgIGlzUHJlRmlsdGVyZWQ6ICEhX2lzUHJlRmlsdGVyZWQsXG4gICAgICBzZWxlY3RlZE9wdGlvbnM6IFtdLFxuICAgICAgb3B0aW9uTWF0Y2hlcjogcHJvcHMub3B0aW9uTWF0Y2hlclxuICAgIH0pO1xuICAgIHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgfHwgKF9zZWFyY2hQcm9wcyRvbkNoYW5nZSA9IHNlYXJjaFByb3BzLm9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfc2VhcmNoUHJvcHMkb25DaGFuZ2UgPT09IHZvaWQgMCB8fCBfc2VhcmNoUHJvcHMkb25DaGFuZ2UuY2FsbChzZWFyY2hQcm9wcywgaW5pdGlhbFNlYXJjaFZhbHVlLCBfdmlzaWJsZU9wdGlvbnMpO1xuXG4gICAgLy8gZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzaW5nbGUgb3B0aW9uIGlzIGFjdGl2ZSBpZiBpdCBpcyBpbiB0aGUgdmlzaWJsZU9wdGlvbnNcbiAgICB2YXIgc2VsZWN0ZWRPcHRpb25zID0gX29wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb24uY2hlY2tlZDtcbiAgICB9KTtcbiAgICB2YXIgX2FjdGl2ZU9wdGlvbkluZGV4O1xuICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKF92aXNpYmxlT3B0aW9ucy5pbmNsdWRlcyhzZWxlY3RlZE9wdGlvbnNbMF0pKSB7XG4gICAgICAgIF9hY3RpdmVPcHRpb25JbmRleCA9IF92aXNpYmxlT3B0aW9ucy5pbmRleE9mKHNlbGVjdGVkT3B0aW9uc1swXSk7XG4gICAgICB9XG4gICAgfVxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IF9hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgIHNlYXJjaFZhbHVlOiBpbml0aWFsU2VhcmNoVmFsdWUsXG4gICAgICB2aXNpYmxlT3B0aW9uczogX3Zpc2libGVPcHRpb25zLFxuICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlTZWxlY3RhYmxlLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlTZWxlY3RhYmxlLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJldlN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSB0aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4KSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRvbkFjdGl2ZU8sIF90aGlzJHByb3BzMjtcbiAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbiA9IHRoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbCA/IHRoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnNbdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleF0gOiBudWxsO1xuICAgICAgICAoX3RoaXMkcHJvcHMkb25BY3RpdmVPID0gKF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMpLm9uQWN0aXZlT3B0aW9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkFjdGl2ZU8gPT09IHZvaWQgMCB8fCBfdGhpcyRwcm9wcyRvbkFjdGl2ZU8uY2FsbChfdGhpcyRwcm9wczIsIGFjdGl2ZU9wdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMy5jaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMzLmNsYXNzTmFtZSxcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMy5vcHRpb25zLFxuICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMy5vbkNoYW5nZSxcbiAgICAgICAgb25BY3RpdmVPcHRpb25DaGFuZ2UgPSBfdGhpcyRwcm9wczMub25BY3RpdmVPcHRpb25DaGFuZ2UsXG4gICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wczMuc2VhcmNoYWJsZSxcbiAgICAgICAgc2VhcmNoUHJvcHMgPSBfdGhpcyRwcm9wczMuc2VhcmNoUHJvcHMsXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzMy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMy5pc0xvYWRpbmcsXG4gICAgICAgIGxpc3RQcm9wcyA9IF90aGlzJHByb3BzMy5saXN0UHJvcHMsXG4gICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzMy5yZW5kZXJPcHRpb24sXG4gICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzMy5oZWlnaHQsXG4gICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzMy5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzM1snYXJpYS1sYWJlbCddLFxuICAgICAgICBhcmlhRGVzY3JpYmVkYnkgPSBfdGhpcyRwcm9wczNbJ2FyaWEtZGVzY3JpYmVkYnknXSxcbiAgICAgICAgbG9hZGluZ01lc3NhZ2UgPSBfdGhpcyRwcm9wczMubG9hZGluZ01lc3NhZ2UsXG4gICAgICAgIG5vTWF0Y2hlc01lc3NhZ2UgPSBfdGhpcyRwcm9wczMubm9NYXRjaGVzTWVzc2FnZSxcbiAgICAgICAgZW1wdHlNZXNzYWdlID0gX3RoaXMkcHJvcHMzLmVtcHR5TWVzc2FnZSxcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gX3RoaXMkcHJvcHMzLmVycm9yTWVzc2FnZSxcbiAgICAgICAgc2VsZWN0YWJsZVNjcmVlblJlYWRlclRleHQgPSBfdGhpcyRwcm9wczMuc2VsZWN0YWJsZVNjcmVlblJlYWRlclRleHQsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQgPSBfdGhpcyRwcm9wczMuaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgb3B0aW9uTWF0Y2hlciA9IF90aGlzJHByb3BzMy5vcHRpb25NYXRjaGVyLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMywgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkc3RhdGUuc2VhcmNoVmFsdWUsXG4gICAgICAgIHZpc2libGVPcHRpb25zID0gX3RoaXMkc3RhdGUudmlzaWJsZU9wdGlvbnMsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXg7XG5cbiAgICAgIC8vIFNvbWUgbWVzc3kgZGVzdHJ1Y3R1cmluZyBoZXJlIHRvIHJlbW92ZSBhcmlhLWxhYmVsL2Rlc2NyaWJlZGJ5IGZyb20gc2VhcmNoUHJvcHMgYW5kIGxpc3RQcm9wc1xuICAgICAgLy8gTWFkZSBtZXNzaWVyIGJ5IHNvbWUgVFMgcmVxdWlyZW1lbnRzXG4gICAgICAvLyBUaGUgYXJpYSBhdHRyaWJ1dGVzIGFyZSB0aGVuIHVzZWQgaW4gZ2V0QWNjZXNzaWJsZU5hbWUoKSB0byBwbGFjZSB0aGVtIHdoZXJlIHRoZXkgbmVlZCB0byBnb1xuICAgICAgdmFyIHVua25vd25BY2Nlc3NpYmxlTmFtZSA9IHtcbiAgICAgICAgJ2FyaWEtbGFiZWwnOiB1bmRlZmluZWQsXG4gICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgdmFyIF9yZWYyID0gc2VhcmNoUHJvcHMgfHwgdW5rbm93bkFjY2Vzc2libGVOYW1lLFxuICAgICAgICBzZWFyY2hBcmlhTGFiZWwgPSBfcmVmMlsnYXJpYS1sYWJlbCddLFxuICAgICAgICBzZWFyY2hBcmlhRGVzY3JpYmVkYnkgPSBfcmVmMlsnYXJpYS1kZXNjcmliZWRieSddLFxuICAgICAgICBwcm9wc09uQ2hhbmdlID0gX3JlZjIub25DaGFuZ2UsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF9yZWYyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgaW5wdXRSZWYgPSBfcmVmMi5pbnB1dFJlZixcbiAgICAgICAgY2xlYW5lZFNlYXJjaFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQyKTtcbiAgICAgIHZhciBfcmVmMyA9IGxpc3RQcm9wcyB8fCB1bmtub3duQWNjZXNzaWJsZU5hbWUsXG4gICAgICAgIGxpc3RBcmlhTGFiZWwgPSBfcmVmM1snYXJpYS1sYWJlbCddLFxuICAgICAgICBsaXN0QXJpYURlc2NyaWJlZGJ5ID0gX3JlZjNbJ2FyaWEtZGVzY3JpYmVkYnknXSxcbiAgICAgICAgaXNWaXJ0dWFsaXplZCA9IF9yZWYzLmlzVmlydHVhbGl6ZWQsXG4gICAgICAgIHJvd0hlaWdodCA9IF9yZWYzLnJvd0hlaWdodCxcbiAgICAgICAgY2xlYW5lZExpc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMywgX2V4Y2x1ZGVkMyk7XG4gICAgICB2YXIgdmlydHVhbGl6ZWRQcm9wcztcbiAgICAgIGlmIChpc1ZpcnR1YWxpemVkID09PSBmYWxzZSkge1xuICAgICAgICB2aXJ0dWFsaXplZFByb3BzID0ge1xuICAgICAgICAgIGlzVmlydHVhbGl6ZWQ6IGlzVmlydHVhbGl6ZWRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAocm93SGVpZ2h0ICE9IG51bGwpIHtcbiAgICAgICAgdmlydHVhbGl6ZWRQcm9wcyA9IHtcbiAgICAgICAgICByb3dIZWlnaHQ6IHJvd0hlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlJywgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVNlbGVjdGFibGUsIGhlaWdodCA9PT0gJ2Z1bGwnICYmIHN0eWxlcy5mdWxsSGVpZ2h0XTtcblxuICAgICAgLyoqIENyZWF0ZSBtZXNzYWdlIGNvbnRlbnQgdGhhdCByZXBsYWNlcyB0aGUgbGlzdCBpZiBubyBvcHRpb25zIGFyZSBhdmFpbGFibGUgKHlldCkgKi9cbiAgICAgIHZhciBtZXNzYWdlQ29udGVudDtcbiAgICAgIGlmIChlcnJvck1lc3NhZ2UgIT0gbnVsbCkge1xuICAgICAgICBtZXNzYWdlQ29udGVudCA9IHR5cGVvZiBlcnJvck1lc3NhZ2UgPT09ICdzdHJpbmcnID8gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgZXJyb3JNZXNzYWdlKSA6IGVycm9yTWVzc2FnZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgIGlmIChsb2FkaW5nTWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBsb2FkaW5nTWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpTG9hZGluZ1NwaW5uZXIsIHtcbiAgICAgICAgICAgIHNpemU6IFwibVwiXG4gICAgICAgICAgfSksIF9fX0Vtb3Rpb25KU1goRXVpU3BhY2VyLCB7XG4gICAgICAgICAgICBzaXplOiBcInhzXCJcbiAgICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgbG9hZGluZ01lc3NhZ2UgfHwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlLmxvYWRpbmdPcHRpb25zXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIkxvYWRpbmcgb3B0aW9uc1wiXG4gICAgICAgICAgfSkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQobG9hZGluZ01lc3NhZ2UsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaWQ6IHRoaXMubWVzc2FnZUNvbnRlbnRJZFxuICAgICAgICAgIH0sIGxvYWRpbmdNZXNzYWdlLnByb3BzKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2VhcmNoVmFsdWUgJiYgdmlzaWJsZU9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChub01hdGNoZXNNZXNzYWdlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG5vTWF0Y2hlc01lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBub01hdGNoZXNNZXNzYWdlIHx8IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5ub01hdGNoaW5nT3B0aW9uc1wiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJ7c2VhcmNoVmFsdWV9IGRvZXNuJ3QgbWF0Y2ggYW55IG9wdGlvbnNcIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBzZWFyY2hWYWx1ZTogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWFyY2hWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KG5vTWF0Y2hlc01lc3NhZ2UsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaWQ6IHRoaXMubWVzc2FnZUNvbnRlbnRJZFxuICAgICAgICAgIH0sIG5vTWF0Y2hlc01lc3NhZ2UucHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGVtcHR5TWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBlbXB0eU1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBlbXB0eU1lc3NhZ2UgfHwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlLm5vQXZhaWxhYmxlT3B0aW9uc1wiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJObyBvcHRpb25zIGF2YWlsYWJsZVwiXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChlbXB0eU1lc3NhZ2UsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaWQ6IHRoaXMubWVzc2FnZUNvbnRlbnRJZFxuICAgICAgICAgIH0sIGVtcHR5TWVzc2FnZS5wcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlcmUgYXJlIGxvdHMgb2Ygd2F5cyB0byBhZGQgYW4gYWNjZXNzaWJsZSBuYW1lXG4gICAgICAgKiBVc3VhbGx5IHdlIHdhbnQgdGhlIHNhbWUgbmFtZSBmb3IgdGhlIGlucHV0IGFuZCB0aGUgbGlzdGJveCAod2hpY2ggaXMgYWRkZWQgYnkgYXJpYS1sYWJlbC9kZXNjcmliZWRieSlcbiAgICAgICAqIEJ1dCB5b3UgY2FuIGFsd2F5cyBvdmVycmlkZSBpdCB1c2luZyBzZWFyY2hQcm9wcyBvciBsaXN0UHJvcHNcbiAgICAgICAqIFRoaXMgZmluZHMgdGhlIGNvcnJlY3QgbmFtZSB0byB1c2VcbiAgICAgICAqXG4gICAgICAgKiBUT0RPOiBUaGlzIGRvZXNuJ3QgaGFuZGxlIGJlaW5nIGxhYmVsbGVkICg8bGFiZWwgZm9yPVwiaWRPZklucHV0XCI+KVxuICAgICAgICovXG4gICAgICB2YXIgZ2V0QWNjZXNzaWJsZU5hbWUgPSBmdW5jdGlvbiBnZXRBY2Nlc3NpYmxlTmFtZShwcm9wcywgbWVzc2FnZUNvbnRlbnRJZCkge1xuICAgICAgICBpZiAocHJvcHMgJiYgcHJvcHNbJ2FyaWEtbGFiZWwnXSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6IHByb3BzWydhcmlhLWxhYmVsJ11cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHZhciBtZXNzYWdlQ29udGVudElkU3RyaW5nID0gbWVzc2FnZUNvbnRlbnRJZCA/IFwiIFwiLmNvbmNhdChtZXNzYWdlQ29udGVudElkKSA6ICcnO1xuICAgICAgICBpZiAocHJvcHMgJiYgcHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IFwiXCIuY29uY2F0KHByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J10pLmNvbmNhdChtZXNzYWdlQ29udGVudElkU3RyaW5nKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyaWFMYWJlbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyaWFEZXNjcmliZWRieSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IFwiXCIuY29uY2F0KGFyaWFEZXNjcmliZWRieSkuY29uY2F0KG1lc3NhZ2VDb250ZW50SWRTdHJpbmcpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge307XG4gICAgICB9O1xuICAgICAgdmFyIHNlYXJjaEFjY2Vzc2libGVOYW1lID0gZ2V0QWNjZXNzaWJsZU5hbWUoc2VhcmNoUHJvcHMsIHRoaXMubWVzc2FnZUNvbnRlbnRJZCk7XG4gICAgICB2YXIgc2VhcmNoSGFzQWNjZXNzaWJsZU5hbWUgPSBCb29sZWFuKE9iamVjdC5rZXlzKHNlYXJjaEFjY2Vzc2libGVOYW1lKS5sZW5ndGgpO1xuICAgICAgdmFyIHNlYXJjaCA9IHNlYXJjaGFibGUgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW5zOiBbJ2V1aVNlbGVjdGFibGUuc2NyZWVuUmVhZGVySW5zdHJ1Y3Rpb25zJywgJ2V1aVNlbGVjdGFibGUucGxhY2Vob2xkZXJOYW1lJ10sXG4gICAgICAgIGRlZmF1bHRzOiBbJ1VzZSB0aGUgVXAgYW5kIERvd24gYXJyb3cga2V5cyB0byBtb3ZlIGZvY3VzIG92ZXIgb3B0aW9ucy4gUHJlc3MgRW50ZXIgdG8gc2VsZWN0LiBQcmVzcyBFc2NhcGUgdG8gY29sbGFwc2Ugb3B0aW9ucy4nLCAnRmlsdGVyIG9wdGlvbnMnXVxuICAgICAgfSwgZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgICAgIHZhciBfcmVmNSA9IF9zbGljZWRUb0FycmF5KF9yZWY0LCAyKSxcbiAgICAgICAgICBzY3JlZW5SZWFkZXJJbnN0cnVjdGlvbnMgPSBfcmVmNVswXSxcbiAgICAgICAgICBwbGFjZWhvbGRlck5hbWUgPSBfcmVmNVsxXTtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpU2VsZWN0YWJsZVNlYXJjaCwgX2V4dGVuZHMoe1xuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBsaXN0QXJpYURlc2NyaWJlZGJ5SWQsXG4gICAgICAgICAga2V5OiBcImxpc3RTZWFyY2hcIixcbiAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICBvbkNoYW5nZTogX3RoaXMyLm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIGxpc3RJZDogX3RoaXMyLm9wdGlvbnNMaXN0UmVmLmN1cnJlbnQgPyBfdGhpczIubGlzdElkIDogdW5kZWZpbmVkIC8vIE9ubHkgcGFzcyB0aGUgbGlzdElkIGlmIGl0IGV4aXN0cyBvbiB0aGUgcGFnZVxuICAgICAgICAgICxcbiAgICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBfdGhpczIubWFrZU9wdGlvbklkKGFjdGl2ZU9wdGlvbkluZGV4KSAvLyB0aGUgY3VycmVudCBmYXV4LWZvY3VzZWQgb3B0aW9uXG4gICAgICAgICAgLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlck5hbWUsXG4gICAgICAgICAgaXNQcmVGaWx0ZXJlZDogISFpc1ByZUZpbHRlcmVkLFxuICAgICAgICAgIG9wdGlvbk1hdGNoZXI6IG9wdGlvbk1hdGNoZXIsXG4gICAgICAgICAgaW5wdXRSZWY6IGZ1bmN0aW9uIGlucHV0UmVmKG5vZGUpIHtcbiAgICAgICAgICAgIHZhciBfc2VhcmNoUHJvcHMkaW5wdXRSZWY7XG4gICAgICAgICAgICBfdGhpczIuaW5wdXRSZWYgPSBub2RlO1xuICAgICAgICAgICAgc2VhcmNoUHJvcHMgPT09IG51bGwgfHwgc2VhcmNoUHJvcHMgPT09IHZvaWQgMCB8fCAoX3NlYXJjaFByb3BzJGlucHV0UmVmID0gc2VhcmNoUHJvcHMuaW5wdXRSZWYpID09PSBudWxsIHx8IF9zZWFyY2hQcm9wcyRpbnB1dFJlZiA9PT0gdm9pZCAwIHx8IF9zZWFyY2hQcm9wcyRpbnB1dFJlZi5jYWxsKHNlYXJjaFByb3BzLCBub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHNlYXJjaEhhc0FjY2Vzc2libGVOYW1lID8gc2VhcmNoQWNjZXNzaWJsZU5hbWUgOiB7XG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBwbGFjZWhvbGRlck5hbWVcbiAgICAgICAgfSwgY2xlYW5lZFNlYXJjaFByb3BzKSksIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgIGlkOiBsaXN0QXJpYURlc2NyaWJlZGJ5SWRcbiAgICAgICAgfSwgc2VsZWN0YWJsZVNjcmVlblJlYWRlclRleHQsIFwiIFwiLCBzY3JlZW5SZWFkZXJJbnN0cnVjdGlvbnMpKSk7XG4gICAgICB9KSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciByZXN1bHRzTGVuZ3RoID0gdmlzaWJsZU9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuICFvcHRpb24uZGlzYWJsZWQ7XG4gICAgICB9KS5sZW5ndGg7XG4gICAgICB2YXIgbGlzdFNjcmVlblJlYWRlclN0YXR1cyA9IHNlYXJjaGFibGUgJiYgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUuc2VhcmNoUmVzdWx0c1wiLFxuICAgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdChfcmVmNikge1xuICAgICAgICAgIHZhciByZXN1bHRzTGVuZ3RoID0gX3JlZjYucmVzdWx0c0xlbmd0aDtcbiAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQocmVzdWx0c0xlbmd0aCwgXCIgcmVzdWx0XCIpLmNvbmNhdChyZXN1bHRzTGVuZ3RoID09PSAxID8gJycgOiAncycsIFwiIGF2YWlsYWJsZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgcmVzdWx0c0xlbmd0aDogcmVzdWx0c0xlbmd0aFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHZhciBsaXN0QXJpYURlc2NyaWJlZGJ5SWQgPSB0aGlzLnJvb3RJZCgnaW5zdHJ1Y3Rpb25zJyk7XG4gICAgICB2YXIgbGlzdEFjY2Vzc2libGVOYW1lID0gZ2V0QWNjZXNzaWJsZU5hbWUobGlzdFByb3BzLCBsaXN0QXJpYURlc2NyaWJlZGJ5SWQpO1xuICAgICAgdmFyIGxpc3RIYXNBY2Nlc3NpYmxlTmFtZSA9IEJvb2xlYW4oT2JqZWN0LmtleXMobGlzdEFjY2Vzc2libGVOYW1lKS5sZW5ndGgpO1xuICAgICAgdmFyIGxpc3QgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5wbGFjZWhvbGRlck5hbWVcIixcbiAgICAgICAgZGVmYXVsdDogXCJGaWx0ZXIgb3B0aW9uc1wiXG4gICAgICB9LCBmdW5jdGlvbiAocGxhY2Vob2xkZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBzZWFyY2hhYmxlICYmIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyTGl2ZSwge1xuICAgICAgICAgIGlzQWN0aXZlOiBtZXNzYWdlQ29udGVudCAhPSBudWxsIHx8IGFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGxcbiAgICAgICAgfSwgbWVzc2FnZUNvbnRlbnQgfHwgbGlzdFNjcmVlblJlYWRlclN0YXR1cyksIG1lc3NhZ2VDb250ZW50ID8gX19fRW1vdGlvbkpTWChFdWlTZWxlY3RhYmxlTWVzc2FnZSwge1xuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJldWlTZWxlY3RhYmxlTWVzc2FnZVwiLFxuICAgICAgICAgIGlkOiBfdGhpczIubWVzc2FnZUNvbnRlbnRJZCxcbiAgICAgICAgICBib3JkZXJlZDogbGlzdFByb3BzICYmIGxpc3RQcm9wcy5ib3JkZXJlZFxuICAgICAgICB9LCBtZXNzYWdlQ29udGVudCkgOiBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVMaXN0LCBfZXh0ZW5kcyh7XG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aVNlbGVjdGFibGVMaXN0XCIsXG4gICAgICAgICAga2V5OiBcImxpc3RcIixcbiAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHZpc2libGVPcHRpb25zOiB2aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgaXNQcmVGaWx0ZXJlZDogaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgc2V0QWN0aXZlT3B0aW9uSW5kZXg6IGZ1bmN0aW9uIHNldEFjdGl2ZU9wdGlvbkluZGV4KGluZGV4LCBjYikge1xuICAgICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IGluZGV4XG4gICAgICAgICAgICB9LCBjYik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrOiBfdGhpczIub25PcHRpb25DbGljayxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb246IHNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICByZWY6IF90aGlzMi5vcHRpb25zTGlzdFJlZixcbiAgICAgICAgICByZW5kZXJPcHRpb246IHJlbmRlck9wdGlvbixcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICBhbGxvd0V4Y2x1c2lvbnM6IGFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgICBzZWFyY2hhYmxlOiBzZWFyY2hhYmxlLFxuICAgICAgICAgIG1ha2VPcHRpb25JZDogX3RoaXMyLm1ha2VPcHRpb25JZCxcbiAgICAgICAgICBsaXN0SWQ6IF90aGlzMi5saXN0SWRcbiAgICAgICAgfSwgbGlzdEhhc0FjY2Vzc2libGVOYW1lID8gbGlzdEFjY2Vzc2libGVOYW1lIDogc2VhcmNoYWJsZSAmJiB7XG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBwbGFjZWhvbGRlck5hbWVcbiAgICAgICAgfSwgY2xlYW5lZExpc3RQcm9wcywgdmlydHVhbGl6ZWRQcm9wcykpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IHRoaXMuY29udGFpbmVyUmVmLFxuICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBvbktleURvd246IHRoaXMub25LZXlEb3duLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25Db250YWluZXJCbHVyLFxuICAgICAgICBvbkZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIG9uTW91c2VEb3duOiB0aGlzLm9uTW91c2VEb3duXG4gICAgICB9LCByZXN0KSwgY2hpbGRyZW4gJiYgY2hpbGRyZW4obGlzdCwgc2VhcmNoKSk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFyIF9zdGF0ZVVwZGF0ZSRzZWFyY2hWYTtcbiAgICAgIHZhciBvcHRpb25zID0gbmV4dFByb3BzLm9wdGlvbnMsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQgPSBuZXh0UHJvcHMuaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgc2VhcmNoUHJvcHMgPSBuZXh0UHJvcHMuc2VhcmNoUHJvcHMsXG4gICAgICAgIG9wdGlvbk1hdGNoZXIgPSBuZXh0UHJvcHMub3B0aW9uTWF0Y2hlcjtcbiAgICAgIHZhciBhY3RpdmVPcHRpb25JbmRleCA9IHByZXZTdGF0ZS5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgc2VhcmNoVmFsdWUgPSBwcmV2U3RhdGUuc2VhcmNoVmFsdWU7XG4gICAgICB2YXIgc3RhdGVVcGRhdGUgPSB7XG4gICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IGFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICB9O1xuICAgICAgaWYgKChzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VhcmNoUHJvcHMudmFsdWUpICE9IG51bGwgJiYgc2VhcmNoUHJvcHMudmFsdWUgIT09IHNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHN0YXRlVXBkYXRlLnNlYXJjaFZhbHVlID0gc2VhcmNoUHJvcHMudmFsdWU7XG4gICAgICB9XG4gICAgICBzdGF0ZVVwZGF0ZS52aXNpYmxlT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyh7XG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIHNlYXJjaFZhbHVlOiAoX3N0YXRlVXBkYXRlJHNlYXJjaFZhID0gc3RhdGVVcGRhdGUuc2VhcmNoVmFsdWUpICE9PSBudWxsICYmIF9zdGF0ZVVwZGF0ZSRzZWFyY2hWYSAhPT0gdm9pZCAwID8gX3N0YXRlVXBkYXRlJHNlYXJjaFZhIDogJycsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQ6ICEhaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBbXSxcbiAgICAgICAgb3B0aW9uTWF0Y2hlcjogb3B0aW9uTWF0Y2hlclxuICAgICAgfSk7XG4gICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbCAmJiBhY3RpdmVPcHRpb25JbmRleCA+PSBzdGF0ZVVwZGF0ZS52aXNpYmxlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGVVcGRhdGUuYWN0aXZlT3B0aW9uSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZVVwZGF0ZTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlTZWxlY3RhYmxlLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIG9wdGlvbnM6IFtdLFxuICBzaW5nbGVTZWxlY3Rpb246IGZhbHNlLFxuICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgaXNQcmVGaWx0ZXJlZDogZmFsc2UsXG4gIG9wdGlvbk1hdGNoZXI6IGNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIoKVxufSk7XG5FdWlTZWxlY3RhYmxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogSG9va3MgdXAgYSBzZWFyY2ggYm94IHRvIGZpbHRlciB0aGUgbGlzdCAoYm9vbGVhbilcbiAgICAgICAqL1xuICBzZWFyY2hhYmxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAgICogUGFzc2VzIHByb3BzIGRvd24gdG8gdGhlIGBFdWlGaWVsZFNlYXJjaGAuXG4gICAgICAgKiBTZWUgI0V1aVNlbGVjdGFibGVTZWFyY2hQcm9wc1xuICAgICAgICovXG4gIHNlYXJjaFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIEZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIGBsaXN0YCBub2RlIGFuZCB0aGVuXG4gICAgICAgKiB0aGUgYHNlYXJjaGAgbm9kZSAoaWYgYHNlYXJjaGFibGVgIGlzIGFwcGxpZWQpXG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgICAqIEFycmF5IG9mIEV1aVNlbGVjdGFibGVPcHRpb24gb2JqZWN0cy4gU2VlICNFdWlTZWxlY3RhYmxlT3B0aW9uUHJvcHNcbiAgICAgICAqL1xuICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgYGJvb2xlYW5gLlxuICAgICAgICogU2V0IHRvIGB0cnVlYCB0byBpbmRpY2F0ZSBvYmplY3QgaXMganVzdCBhIGdyb3VwaW5nIGxhYmVsLCBub3QgYSBzZWxlY3RhYmxlIGl0ZW1cbiAgICAgICAqL1xuICAgIGlzR3JvdXBMYWJlbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBWaXNpYmxlIGxhYmVsIG9mIG9wdGlvbi5cbiAgICAgICAqIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBpdGVtcyBpZiBga2V5YCBpcyBub3Qgc3VwcGxpZWRcbiAgICAgICAqL1xuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWxseSBjaGFuZ2UgdGhlIHNlYXJjaGFibGUgdGVybSBieSBwYXNzaW5nIGEgZGlmZmVyZW50IHN0cmluZyBvdGhlciB0aGFuIHRoZSBgbGFiZWxgLlxuICAgICAgICogQmVzdCB1c2VkIHdoZW4gY3JlYXRpbmcgYSBjdXN0b20gYG9wdGlvblJlbmRlcmAgdG8gc2VwYXJhdGUgdGhlIGxhYmVsIGZyb20gbWV0YWRhdGEgYnV0IGFsbG93aW5nIHRvIHNlYXJjaCBvbiBib3RoXG4gICAgICAgKi9cbiAgICBzZWFyY2hhYmxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLyoqXG4gICAgICAgKiBNdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgaXRlbXMuXG4gICAgICAgKiBXaWxsIGJlIHVzZWQgdG8gbWF0Y2ggb3B0aW9ucyBpbnN0ZWFkIG9mIGBsYWJlbGBcbiAgICAgICAqL1xuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvKipcbiAgICAgICAqIExlYXZlIGB1bmRlZmluZWRgIHRvIGluZGljYXRlIG5vdCBzZWxlY3RlZC4gUGFzcyBhIHN0cmluZyBvZlxuICAgICAgICogJ29uJyB0byBpbmRpY2F0ZSBpbmNsdXNpb24sICdvZmYnIHRvIGluZGljYXRlIGV4Y2x1c2lvbixcbiAgICAgICAqIG9yICdtaXhlZCcgdG8gaW5kaWNhdGUgaW5jbHVzaW9uIGZvciBzb21lLlxuICAgICAgICovXG4gICAgY2hlY2tlZDogUHJvcFR5cGVzLmFueSxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBOb2RlIHRvIGFkZCBiZXR3ZWVuIHRoZSBzZWxlY3Rpb24gaWNvbiBhbmQgdGhlIGxhYmVsXG4gICAgICAgKi9cbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAvKipcbiAgICAgICAqIE5vZGUgdG8gYWRkIHRvIHRoZSBmYXIgcmlnaHQgb2YgdGhlIGl0ZW1cbiAgICAgICAqL1xuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgcmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbiBkYXRhIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgYHJlbmRlck9wdGlvbnNgIGVsZW1lbnQuXG4gICAgICAgKiBCeXBhc3MgYEV1aVNlbGVjdGFibGVJdGVtYCBhbmQgYXZvaWQgRE9NIGF0dHJpYnV0ZSB3YXJuaW5ncy5cbiAgICAgICAqL1xuICAgIGRhdGE6IFByb3BUeXBlcy5zaGFwZSh7fSksXG4gICAgLyoqXG4gICAgICAgKiBIb3cgdG8gaGFuZGxlIGxvbmcgdGV4dCB3aXRoaW4gdGhlIGl0ZW0uXG4gICAgICAgKiBXcmFwcGluZyBvbmx5IHdvcmtzIGlmIGBpc1ZpcnR1YWxpemF0aW9uYCBpcyBmYWxzZS5cbiAgICAgICAqIEBkZWZhdWx0ICd0cnVuY2F0ZSdcbiAgICAgICAqL1xuICAgIHRleHRXcmFwOiBQcm9wVHlwZXMub25lT2YoW1widHJ1bmNhdGVcIiwgXCJ3cmFwXCJdKSxcbiAgICAvKipcbiAgICAgICAqIElmIHRleHRXcmFwIGlzIHNldCB0byBgdHJ1bmNhdGVgLCB5b3UgY2FuIHBhc3MgYSBjdXN0b20gdHJ1bmNhdGlvbiBjb25maWd1cmF0aW9uXG4gICAgICAgKiB0aGF0IGFjY2VwdHMgYW55IFtFdWlUZXh0VHJ1bmNhdGVdKC8jL3V0aWxpdGllcy90ZXh0LXRydW5jYXRpb24pIHByb3AgZXhjZXB0IGZvclxuICAgICAgICogYHRleHRgIGFuZCBgY2hpbGRyZW5gLlxuICAgICAgICpcbiAgICAgICAqIE5vdGU6IHdoZW4gc2VhcmNoaW5nLCBjdXN0b20gdHJ1bmNhdGlvbiBwcm9wcyBhcmUgaWdub3JlZC4gVGhlIGhpZ2hsaWdodGVkIHNlYXJjaFxuICAgICAgICogdGV4dCB3aWxsIGFsd2F5cyB0YWtlIHByZWNlZGVuY2UuXG4gICAgICAgKi9cbiAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBjdXN0b20gdG9vbHRpcCBjb250ZW50IGZvciB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBwcm9wcyB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nICoqW0V1aVRvb2xUaXBdKC8jL2Rpc3BsYXkvdG9vbHRpcCkqKlxuICAgICAgICovXG4gICAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAgICogUGFzc2VzIGJhY2sgdGhlIGFsdGVyZWQgYG9wdGlvbnNgIGFycmF5IHdpdGggc2VsZWN0ZWQgb3B0aW9ucyBoYXZpbmcgYGNoZWNrZWQ6ICdvbidgLlxuICAgICAgICogQWxzbyBwYXNzZXMgYmFjayB0aGUgUmVhY3QgY2xpY2sva2V5Ym9hcmQgZXZlbnQgYXMgYSBzZWNvbmQgYXJndW1lbnQsXG4gICAgICAgKiBhbmQgdGhlIG9wdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgb25DaGFuZ2UgZXZlbnQgYXMgYSB0aGlyZCBhcmd1bWVudC5cbiAgICAgICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAgICogUGFzc2VzIGJhY2sgdGhlIGN1cnJlbnQgYWN0aXZlIG9wdGlvbiB3aGVuZXZlciB0aGUgdXNlciBjaGFuZ2VzIHRoZSBjdXJyZW50bHlcbiAgICAgICAqIGhpZ2hsaWdodGVkIG9wdGlvbiB2aWEga2V5Ym9hcmQgbmF2aWdhdGlvbiBvciBzZWFyY2hpbmcuXG4gICAgICAgKi9cbiAgb25BY3RpdmVPcHRpb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgICAqIFNldHMgdGhlIHNpbmdsZSBzZWxlY3Rpb24gcG9saWN5IG9mXG4gICAgICAgKiBgZmFsc2VgOiBhbGxvd3MgbXVsdGlwbGUgc2VsZWN0aW9uXG4gICAgICAgKiBgdHJ1ZWA6IG9ubHkgYWxsb3dzIG9uZSBzZWxlY3Rpb25cbiAgICAgICAqIGBhbHdheXNgOiBjYW4gYW5kIG11c3QgaGF2ZSBvbmx5IG9uZSBzZWxlY3Rpb25cbiAgICAgICAqL1xuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhbHdheXNcIl0pLCBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogQWxsb3dzIG1hcmtpbmcgb3B0aW9ucyBhcyBgY2hlY2tlZD0nb2ZmJ2AgYXMgd2VsbCBhcyBgJ29uJ2BcbiAgICAgICAqL1xuICBhbGxvd0V4Y2x1c2lvbnM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIFNob3cgYW4gbG9hZGluZyBpbmRpY2F0b3Igd2hpbGUgeW91IGxvYWQgYW5kIGhvb2sgdXAgeW91ciBkYXRhXG4gICAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBTZXRzIHRoZSBtYXggaGVpZ2h0IGluIHBpeGVscyBvciBwYXNzIGBmdWxsYCB0byBhbGxvd1xuICAgICAgICogdGhlIHdob2xlIGdyb3VwIHRvIGZpbGwgdGhlIGhlaWdodCBvZiBpdHMgY29udGFpbmVyIGFuZFxuICAgICAgICogYWxsb3dzIHRoZSBsaXN0IGdyb3cgYXMgd2VsbFxuICAgICAgICovXG4gIGhlaWdodDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW1wiZnVsbFwiXSldKSxcbiAgLyoqXG4gICAgICAgKiBTZWUgI0V1aVNlbGVjdGFibGVPcHRpb25zTGlzdFxuICAgICAgICovXG4gIGxpc3RQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBDdXN0b20gcmVuZGVyIGZ1bmN0aW9uIGZvciBlYWNoIG9wdGlvbi5cbiAgICAgICAqIFJldHVybnMgYChvcHRpb24sIHNlYXJjaFZhbHVlKWBcbiAgICAgICAqL1xuICByZW5kZXJPcHRpb246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgICAqIEN1c3RvbWl6ZSB0aGUgbG9hZGluZyBtZXNzYWdlLiBQYXNzIGEgc3RyaW5nIHRvIHNpbXBseSBjaGFuZ2UgdGhlIHRleHQsXG4gICAgICAgKiBvciBhIG5vZGUgdG8gcmVwbGFjZSB0aGUgd2hvbGUgY29udGVudC5cbiAgICAgICAqL1xuICBsb2FkaW5nTWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogQ3VzdG9taXplIHRoZSBubyBtYXRjaGVzIG1lc3NhZ2UuIFBhc3MgYSBzdHJpbmcgdG8gc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCxcbiAgICAgICAqIG9yIGEgbm9kZSB0byByZXBsYWNlIHRoZSB3aG9sZSBjb250ZW50LlxuICAgICAgICovXG4gIG5vTWF0Y2hlc01lc3NhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIEN1c3RvbWl6ZSB0aGUgZW1wdHkgbWVzc2FnZS4gUGFzcyBhIHN0cmluZyB0byBzaW1wbHkgY2hhbmdlIHRoZSB0ZXh0LFxuICAgICAgICogb3IgYSBub2RlIHRvIHJlcGxhY2UgdGhlIHdob2xlIGNvbnRlbnQuXG4gICAgICAgKi9cbiAgZW1wdHlNZXNzYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBBZGQgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICAgICAqIFRoZSBtZXNzYWdlIHdpbGwgYmUgc2hvd24gd2hlbiB0aGUgdmFsdWUgaXMgbm90IGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAgICAgICAqIFBhc3MgYSBzdHJpbmcgdG8gc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCwgb3IgYSBub2RlIHRvIHJlcGxhY2UgdGhlIHdob2xlIGNvbnRlbnQuXG4gICAgICAgKlxuICAgICAgICogYGVycm9yTWVzc2FnZT17aGFzRXJyb3JzID8gJ015IGVycm9yIG1lc3NhZ2UnIDogbnVsbH1gXG4gICAgICAgKi9cbiAgZXJyb3JNZXNzYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSksXG4gIC8qKlxuICAgICAgICogQ29udHJvbCB3aGV0aGVyIG9yIG5vdCBvcHRpb25zIGdldCBmaWx0ZXJlZCBpbnRlcm5hbGx5IChpLmUuLCB3aGV0aGVyIGZpbHRlcmluZyBpc1xuICAgICAgICogaGFuZGxlZCBieSBFVUkgb3IgYnkgeW91LCB0aGUgY29uc3VtZXIpLlxuICAgICAgICogSWYgc2V0IHRvIGB0cnVlYCwgYWxsIHBhc3NlZCBgb3B0aW9uc2Agd2lsbCBiZSBkaXNwbGF5ZWQgcmVnYXJkbGVzcyBvZiB0aGUgdXNlcidzXG4gICAgICAgKiBzZWFyY2ggaW5wdXQuXG4gICAgICAgKlxuICAgICAgICogQWRkaXRpb25hbGx5IGFsbG93cyBwYXNzaW5nIGEgY29uZmlndXJhdGlvbiBvYmplY3Qgd2hpY2ggZW5hYmxlcyB0dXJuaW5nIG9mZlxuICAgICAgICogc2VhcmNoIGhpZ2hsaWdodGluZyBpZiBuZWVkZWQuXG4gICAgICAgKlxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICBpc1ByZUZpbHRlcmVkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhpZ2hsaWdodFNlYXJjaDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIE9wdGlvbmFsIHNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zIHRvIGFubm91bmNlIHVwb24gZm9jdXMvaW50ZXJhY3Rpb24uIFRoaXMgdGV4dCBpcyByZWFkIG91dFxuICAgICAgICogYWZ0ZXIgdGhlIGBFdWlTZWxlY3RhYmxlYCBsYWJlbCBhbmQgYSBicmllZiBwYXVzZSwgYnV0IGJlZm9yZSB0aGUgZGVmYXVsdCBrZXlib2FyZCBpbnN0cnVjdGlvbnMgZm9yXG4gICAgICAgKiBpbnRlcmFjdGluZyB3aXRoIGEgc2VsZWN0YWJsZSBhcmUgcmVhZCBvdXQuXG4gICAgICAgKi9cbiAgc2VsZWN0YWJsZVNjcmVlblJlYWRlclRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAgICogT3B0aW9uYWwgY3VzdG9tIG9wdGlvbiBtYXRjaGVyIGZ1bmN0aW9uXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqIGNvbnN0IGV4YWN0RXF1YWxpdHlNYXRjaGVyOiBFdWlTZWxlY3RhYmxlT3B0aW9uTWF0Y2hlciA9ICh7IG9wdGlvbiwgc2VhcmNoVmFsdWUgfSkgPT4ge1xuICAgICAgICogICByZXR1cm4gb3B0aW9uLmxhYmVsID09PSBzZWFyY2hWYWx1ZTtcbiAgICAgICAqIH1cbiAgICAgICAqL1xuICBvcHRpb25NYXRjaGVyOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcIm9uQ2hhbmdlXCIsIFwib3B0aW9uc1wiLCBcInZhbHVlXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJpc1ByZUZpbHRlcmVkXCIsIFwibGlzdElkXCIsIFwiY2xhc3NOYW1lXCIsIFwib3B0aW9uTWF0Y2hlclwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlGaWVsZFNlYXJjaCB9IGZyb20gJy4uLy4uL2Zvcm0nO1xuaW1wb3J0IHsgZ2V0TWF0Y2hpbmdPcHRpb25zIH0gZnJvbSAnLi4vbWF0Y2hpbmdfb3B0aW9ucyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlU2VhcmNoID0gZnVuY3Rpb24gRXVpU2VsZWN0YWJsZVNlYXJjaChfcmVmKSB7XG4gIHZhciBvbkNoYW5nZUNhbGxiYWNrID0gX3JlZi5vbkNoYW5nZSxcbiAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcbiAgICBwbGFjZWhvbGRlciA9IF9yZWYucGxhY2Vob2xkZXIsXG4gICAgaXNQcmVGaWx0ZXJlZCA9IF9yZWYuaXNQcmVGaWx0ZXJlZCxcbiAgICBsaXN0SWQgPSBfcmVmLmxpc3RJZCxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBvcHRpb25NYXRjaGVyID0gX3JlZi5vcHRpb25NYXRjaGVyLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgc2VhcmNoVmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICB2YXIgbWF0Y2hpbmdPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKHtcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICBpc1ByZUZpbHRlcmVkOiBpc1ByZUZpbHRlcmVkLFxuICAgICAgb3B0aW9uTWF0Y2hlcjogb3B0aW9uTWF0Y2hlclxuICAgIH0pO1xuICAgIG9uQ2hhbmdlQ2FsbGJhY2soc2VhcmNoVmFsdWUsIG1hdGNoaW5nT3B0aW9ucyk7XG4gIH0sIFtvcHRpb25zLCBpc1ByZUZpbHRlcmVkLCBvbkNoYW5nZUNhbGxiYWNrLCBvcHRpb25NYXRjaGVyXSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZVNlYXJjaCcsIGNsYXNzTmFtZSk7XG4gIHZhciBhcmlhUHJvcHNJZkxpc3RJc1ByZXNlbnQgPSBsaXN0SWQgPyB7XG4gICAgcm9sZTogJ2NvbWJvYm94JyxcbiAgICAnYXJpYS1hdXRvY29tcGxldGUnOiAnbGlzdCcsXG4gICAgJ2FyaWEtZXhwYW5kZWQnOiB0cnVlLFxuICAgICdhcmlhLWNvbnRyb2xzJzogbGlzdElkLFxuICAgICdhcmlhLW93bnMnOiBsaXN0SWQgLy8gbGVnYWN5IGF0dHJpYnV0ZSBidXQgc2hpbXMgc3VwcG9ydCBmb3IgbmVhcmx5IGV2ZXJ5dGhpbmcgYXRtXG4gIH0gOiB1bmRlZmluZWQ7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZpZWxkU2VhcmNoLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIGluY3JlbWVudGFsOiB0cnVlLFxuICAgIGZ1bGxXaWR0aDogdHJ1ZSxcbiAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gICAgXCJhcmlhLWhhc3BvcHVwXCI6IFwibGlzdGJveFwiXG4gIH0sIGFyaWFQcm9wc0lmTGlzdElzUHJlc2VudCwgcmVzdCkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxudmFyIGdldFNlYXJjaGFibGVMYWJlbCA9IGZ1bmN0aW9uIGdldFNlYXJjaGFibGVMYWJlbChvcHRpb24pIHtcbiAgdmFyIG5vcm1hbGl6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgdmFyIHNlYXJjaGFibGVMYWJlbCA9IG9wdGlvbi5zZWFyY2hhYmxlTGFiZWwgfHwgb3B0aW9uLmxhYmVsO1xuICByZXR1cm4gbm9ybWFsaXplID8gc2VhcmNoYWJsZUxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogc2VhcmNoYWJsZUxhYmVsO1xufTtcbnZhciBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlID0gZnVuY3Rpb24gZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShzZWFyY2hWYWx1ZSwgc2VsZWN0ZWRPcHRpb25zKSB7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmZpbmQoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIHJldHVybiBnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uKSA9PT0gbm9ybWFsaXplZFNlYXJjaFZhbHVlO1xuICB9KTtcbn07XG52YXIgY29sbGVjdE1hdGNoaW5nT3B0aW9uID0gZnVuY3Rpb24gY29sbGVjdE1hdGNoaW5nT3B0aW9uKF9yZWYpIHtcbiAgdmFyIHNlbGVjdGVkT3B0aW9ucyA9IF9yZWYuc2VsZWN0ZWRPcHRpb25zLFxuICAgIGlzUHJlRmlsdGVyZWQgPSBfcmVmLmlzUHJlRmlsdGVyZWQsXG4gICAgb3B0aW9uID0gX3JlZi5vcHRpb24sXG4gICAgYWNjdW11bGF0b3IgPSBfcmVmLmFjY3VtdWxhdG9yLFxuICAgIHNlYXJjaFZhbHVlID0gX3JlZi5zZWFyY2hWYWx1ZSxcbiAgICBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBfcmVmLm5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSxcbiAgICBvcHRpb25NYXRjaGVyID0gX3JlZi5vcHRpb25NYXRjaGVyO1xuICAvLyBEb24ndCBzaG93IG9wdGlvbnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQgaWZcbiAgLy8gdGhlIHNlbGVjdGVkT3B0aW9ucyBsaXN0IGV4aXN0c1xuICBpZiAoc2VsZWN0ZWRPcHRpb25zKSB7XG4gICAgdmFyIHNlbGVjdGVkT3B0aW9uID0gZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uLCBmYWxzZSksIHNlbGVjdGVkT3B0aW9ucyk7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgdGhlIG9wdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJlZmlsdGVyZWQgdGhlbiB3ZSBjYW4gc2tpcCBmaWx0ZXJpbmcgYWdhaW5zdCB0aGUgc2VhcmNoIHZhbHVlLlxuICAvLyBUT0RPOiBJIHN0aWxsIGRvbid0IHF1aXRlIHVuZGVyc3RhbmQgaG93IHRoaXMgd29ya3Mgd2hlbiBob29rZWQgdXAgdG8gYXN5bmNcbiAgaWYgKGlzUHJlRmlsdGVyZWQpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghbm9ybWFsaXplZFNlYXJjaFZhbHVlKSB7XG4gICAgYWNjdW11bGF0b3IucHVzaChvcHRpb24pO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgaXNNYXRjaGluZyA9IG9wdGlvbk1hdGNoZXIoe1xuICAgIG9wdGlvbjogb3B0aW9uLFxuICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICBub3JtYWxpemVkU2VhcmNoVmFsdWU6IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZVxuICB9KTtcbiAgaWYgKGlzTWF0Y2hpbmcpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gIH1cbn07XG5leHBvcnQgdmFyIGdldE1hdGNoaW5nT3B0aW9ucyA9IGZ1bmN0aW9uIGdldE1hdGNoaW5nT3B0aW9ucyhfcmVmMikge1xuICB2YXIgc2VhcmNoVmFsdWUgPSBfcmVmMi5zZWFyY2hWYWx1ZSxcbiAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICBpc1ByZUZpbHRlcmVkID0gX3JlZjIuaXNQcmVGaWx0ZXJlZCxcbiAgICBfcmVmMiRzZWxlY3RlZE9wdGlvbnMgPSBfcmVmMi5zZWxlY3RlZE9wdGlvbnMsXG4gICAgc2VsZWN0ZWRPcHRpb25zID0gX3JlZjIkc2VsZWN0ZWRPcHRpb25zID09PSB2b2lkIDAgPyBbXSA6IF9yZWYyJHNlbGVjdGVkT3B0aW9ucyxcbiAgICBvcHRpb25NYXRjaGVyID0gX3JlZjIub3B0aW9uTWF0Y2hlcjtcbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBtYXRjaGluZ09wdGlvbnMgPSBbXTtcbiAgb3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICBjb2xsZWN0TWF0Y2hpbmdPcHRpb24oe1xuICAgICAgYWNjdW11bGF0b3I6IG1hdGNoaW5nT3B0aW9ucyxcbiAgICAgIG9wdGlvbjogb3B0aW9uLFxuICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgbm9ybWFsaXplZFNlYXJjaFZhbHVlOiBub3JtYWxpemVkU2VhcmNoVmFsdWUsXG4gICAgICBpc1ByZUZpbHRlcmVkOiBpc1ByZUZpbHRlcmVkLFxuICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICBvcHRpb25NYXRjaGVyOiBvcHRpb25NYXRjaGVyXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gbWF0Y2hpbmdPcHRpb25zO1xufTtcblxuLyoqXG4gKiBQYXJ0aWFsIHN0cmluZyBlcXVhbGl0eSBvcHRpb24gbWF0Y2hlciBmb3IgRXVpU2VsZWN0YWJsZVxuICogSXQgbWF0Y2hlcyBhbGwgb3B0aW9ucyB3aXRoIGxhYmVscyBpbmNsdWRpbmcgdGhlIHNlYXJjaGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IHZhciBjcmVhdGVQYXJ0aWFsU3RyaW5nRXF1YWxpdHlPcHRpb25NYXRjaGVyID0gZnVuY3Rpb24gY3JlYXRlUGFydGlhbFN0cmluZ0VxdWFsaXR5T3B0aW9uTWF0Y2hlcigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChfcmVmMykge1xuICAgIHZhciBvcHRpb24gPSBfcmVmMy5vcHRpb24sXG4gICAgICBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBfcmVmMy5ub3JtYWxpemVkU2VhcmNoVmFsdWU7XG4gICAgdmFyIG5vcm1hbGl6ZWRPcHRpb24gPSBnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uKTtcbiAgICByZXR1cm4gbm9ybWFsaXplZE9wdGlvbi5pbmNsdWRlcyhub3JtYWxpemVkU2VhcmNoVmFsdWUpO1xuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYm9yZGVyZWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gJy4uLy4uL3RleHQnO1xuaW1wb3J0IHsgZXVpU2VsZWN0YWJsZU1lc3NhZ2VTdHlsZXMgfSBmcm9tICcuL3NlbGVjdGFibGVfbWVzc2FnZS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU2VsZWN0YWJsZU1lc3NhZ2UgPSBmdW5jdGlvbiBFdWlTZWxlY3RhYmxlTWVzc2FnZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRib3JkZXJlZCA9IF9yZWYuYm9yZGVyZWQsXG4gICAgYm9yZGVyZWQgPSBfcmVmJGJvcmRlcmVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkYm9yZGVyZWQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVNZXNzYWdlJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVNlbGVjdGFibGVNZXNzYWdlU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpU2VsZWN0YWJsZU1lc3NhZ2UsIGJvcmRlcmVkICYmIHN0eWxlcy5ib3JkZXJlZF07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRleHQsIF9leHRlbmRzKHtcbiAgICBjb2xvcjogXCJzdWJkdWVkXCIsXG4gICAgc2l6ZTogXCJ4c1wiLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVNlbGVjdGFibGVNZXNzYWdlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogTWF0Y2ggdGhpcyB0byB0aGUgYGxpc3RQcm9wcy5ib3JkZXJlZGAgcHJvcGVydHkgb2YgeW91ciBgRXVpU2VsZWN0YWJsZWAgaW5zdGFuY2VcbiAgICAgICAqL1xuICBib3JkZXJlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmV4cG9ydCB2YXIgZXVpU2VsZWN0YWJsZU1lc3NhZ2VTdHlsZXMgPSBmdW5jdGlvbiBldWlTZWxlY3RhYmxlTWVzc2FnZVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVNlbGVjdGFibGVNZXNzYWdlOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiO3RleHQtYWxpZ246Y2VudGVyO3dvcmQtd3JhcDpicmVhay13b3JkOztsYWJlbDpldWlTZWxlY3RhYmxlTWVzc2FnZTtcIiksXG4gICAgLy8gTWF0Y2ggYm9yZGVyIGZyb20gc2VsZWN0YWJsZV9saXN0XG4gICAgYm9yZGVyZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJvdmVyZmxvdzpoaWRkZW47Ym9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIudGhpbiwgXCI7Ym9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIFwiOztsYWJlbDpib3JkZXJlZDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJkYXRhXCJdLFxuICBfZXhjbHVkZWQyID0gW1wibGFiZWxcIiwgXCJpc0dyb3VwTGFiZWxcIiwgXCJjaGVja2VkXCIsIFwiZGlzYWJsZWRcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCIsIFwicmVmXCIsIFwia2V5XCIsIFwic2VhcmNoYWJsZUxhYmVsXCIsIFwiZGF0YVwiLCBcInRydW5jYXRpb25Qcm9wc1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcImNsYXNzTmFtZVwiLCBcIm9wdGlvbnNcIiwgXCJzZWFyY2hWYWx1ZVwiLCBcIm9uT3B0aW9uQ2xpY2tcIiwgXCJyZW5kZXJPcHRpb25cIiwgXCJoZWlnaHRcIiwgXCJ3aW5kb3dQcm9wc1wiLCBcInJvd0hlaWdodFwiLCBcImFjdGl2ZU9wdGlvbkluZGV4XCIsIFwibWFrZU9wdGlvbklkXCIsIFwic2hvd0ljb25zXCIsIFwic2luZ2xlU2VsZWN0aW9uXCIsIFwidmlzaWJsZU9wdGlvbnNcIiwgXCJhbGxvd0V4Y2x1c2lvbnNcIiwgXCJib3JkZXJlZFwiLCBcInBhZGRpbmdTaXplXCIsIFwic2VhcmNoYWJsZVwiLCBcIm9uRm9jdXNCYWRnZVwiLCBcImxpc3RJZFwiLCBcInNldEFjdGl2ZU9wdGlvbkluZGV4XCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJyb2xlXCIsIFwiaXNQcmVGaWx0ZXJlZFwiLCBcImlzVmlydHVhbGl6ZWRcIiwgXCJ0ZXh0V3JhcFwiLCBcInRydW5jYXRpb25Qcm9wc1wiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgbWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRml4ZWRTaXplTGlzdCwgYXJlRXF1YWwgfSBmcm9tICdyZWFjdC13aW5kb3cnO1xuaW1wb3J0IHsgUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpQXV0b1NpemVyIH0gZnJvbSAnLi4vLi4vYXV0b19zaXplcic7XG5pbXBvcnQgeyBFdWlIaWdobGlnaHQgfSBmcm9tICcuLi8uLi9oaWdobGlnaHQnO1xuaW1wb3J0IHsgRXVpTWFyayB9IGZyb20gJy4uLy4uL21hcmsnO1xuaW1wb3J0IHsgRXVpVGV4dFRydW5jYXRlIH0gZnJvbSAnLi4vLi4vdGV4dF90cnVuY2F0ZSc7XG5pbXBvcnQgeyBFdWlTZWxlY3RhYmxlTGlzdEl0ZW0gfSBmcm9tICcuL3NlbGVjdGFibGVfbGlzdF9pdGVtJztcbmltcG9ydCB7IGV1aVNlbGVjdGFibGVMaXN0U3R5bGVzIH0gZnJvbSAnLi9zZWxlY3RhYmxlX2xpc3Quc3R5bGVzJztcblxuLy8gQ29uc3VtZXIgQ29uZmlndXJhYmxlIFByb3BzIHZpYSBgRXVpU2VsZWN0YWJsZS5saXN0UHJvcHNgXG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlTGlzdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlTZWxlY3RhYmxlTGlzdChwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpU2VsZWN0YWJsZUxpc3QpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlTZWxlY3RhYmxlTGlzdCwgW3Byb3BzXSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImFuaW1hdGlvbkZyYW1lSWRcIiwgdm9pZCAwKTtcbiAgICAvLyBjb3VudGVyIGZvciB0cmFja2luZyBsaXN0IHJlbmRlcnMgYW5kIGVuc3VyaW5nIHJlcmVuZGVyc1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJsaXN0Um93UmVyZW5kZXJcIiwgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImxpc3RSZWZcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImxpc3RCb3hSZWZcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNldExpc3RSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMubGlzdFJlZiA9IHJlZjtcbiAgICAgIGlmIChyZWYgJiYgX3RoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgICAgcmVmLnNjcm9sbFRvSXRlbShfdGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCwgJ2F1dG8nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVtb3ZlU2Nyb2xsYWJsZVRhYlN0b3BcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgLy8gRmlyZWZveCBhZGRzIGEgdGFiIHN0b3AgZm9yIHNjcm9sbGFibGUgY29udGFpbmVyc1xuICAgICAgLy8gV2UgaGFuZGxlIHRoaXMgaW5zaWRlIHNvIG5lZWQgdG8gc3RvcCBmaXJlZm94IGZyb20gZG9pbmcgaXRzIHRoaW5nXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNldExpc3RCb3hSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMubGlzdEJveFJlZiA9IHJlZjtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICBsaXN0SWQgPSBfdGhpcyRwcm9wcy5saXN0SWQsXG4gICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wcy5zZWFyY2hhYmxlLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wcy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgIGFyaWFMYWJlbGxlZGJ5ID0gX3RoaXMkcHJvcHNbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICBhcmlhRGVzY3JpYmVkYnkgPSBfdGhpcyRwcm9wc1snYXJpYS1kZXNjcmliZWRieSddO1xuICAgICAgaWYgKHJlZikge1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdpZCcsIGxpc3RJZCk7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbGlzdGJveCcpO1xuICAgICAgICBpZiAoc2VhcmNoYWJsZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uICE9PSAnYWx3YXlzJyAmJiBzaW5nbGVTZWxlY3Rpb24gIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJywgJ3RydWUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmlhTGFiZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGFyaWFMYWJlbCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyaWFMYWJlbGxlZGJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGFyaWFMYWJlbGxlZGJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyaWFEZXNjcmliZWRieSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgYXJpYURlc2NyaWJlZGJ5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIFRoaXMgdXRpbGl0eSBpcyBuZWNlc3NhcnkgdG8gZXhjbHVkZSBncm91cCBsYWJlbHMgZnJvbSB0aGUgYXJpYSBzZXQgY291bnRcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2FsY3VsYXRlQXJpYVNldEF0dHJzXCIsIGZ1bmN0aW9uIChvcHRpb25BcnJheSkge1xuICAgICAgdmFyIGFyaWFQb3NJblNldE1hcCA9IHt9O1xuICAgICAgdmFyIGxhdGVzdEFyaWFQb3NJbmRleCA9IDA7XG4gICAgICBvcHRpb25BcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24sIGluZGV4KSB7XG4gICAgICAgIGlmICghb3B0aW9uLmlzR3JvdXBMYWJlbCkge1xuICAgICAgICAgIGxhdGVzdEFyaWFQb3NJbmRleCsrO1xuICAgICAgICAgIGFyaWFQb3NJblNldE1hcFtpbmRleF0gPSBsYXRlc3RBcmlhUG9zSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXJpYVBvc0luU2V0TWFwOiBhcmlhUG9zSW5TZXRNYXAsXG4gICAgICAgIGFyaWFTZXRTaXplOiBsYXRlc3RBcmlhUG9zSW5kZXhcbiAgICAgIH07XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIkxpc3RSb3dcIiwgLyojX19QVVJFX18qL21lbW8oZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBfb3B0aW9uJHRleHRXcmFwO1xuICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGEsXG4gICAgICAgIGluZGV4ID0gX3JlZi5pbmRleCxcbiAgICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlO1xuICAgICAgdmFyIG9wdGlvbiA9IGRhdGFbaW5kZXhdO1xuICAgICAgdmFyIG9wdGlvbkRhdGEgPSBvcHRpb24uZGF0YSxcbiAgICAgICAgX29wdGlvbiA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvcHRpb24sIF9leGNsdWRlZCk7XG4gICAgICB2YXIgbGFiZWwgPSBvcHRpb24ubGFiZWwsXG4gICAgICAgIGlzR3JvdXBMYWJlbCA9IG9wdGlvbi5pc0dyb3VwTGFiZWwsXG4gICAgICAgIGNoZWNrZWQgPSBvcHRpb24uY2hlY2tlZCxcbiAgICAgICAgZGlzYWJsZWQgPSBvcHRpb24uZGlzYWJsZWQsXG4gICAgICAgIHByZXBlbmQgPSBvcHRpb24ucHJlcGVuZCxcbiAgICAgICAgYXBwZW5kID0gb3B0aW9uLmFwcGVuZCxcbiAgICAgICAgcmVmID0gb3B0aW9uLnJlZixcbiAgICAgICAga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgICAgc2VhcmNoYWJsZUxhYmVsID0gb3B0aW9uLnNlYXJjaGFibGVMYWJlbCxcbiAgICAgICAgX2RhdGEgPSBvcHRpb24uZGF0YSxcbiAgICAgICAgX3RydW5jYXRpb25Qcm9wcyA9IG9wdGlvbi50cnVuY2F0aW9uUHJvcHMsXG4gICAgICAgIG9wdGlvblJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9uLCBfZXhjbHVkZWQyKTtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczIuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzMi5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgIG9uRm9jdXNCYWRnZSA9IF90aGlzJHByb3BzMi5vbkZvY3VzQmFkZ2UsXG4gICAgICAgIHBhZGRpbmdTaXplID0gX3RoaXMkcHJvcHMyLnBhZGRpbmdTaXplLFxuICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wczIuc2hvd0ljb25zLFxuICAgICAgICBtYWtlT3B0aW9uSWQgPSBfdGhpcyRwcm9wczIubWFrZU9wdGlvbklkLFxuICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczIucmVuZGVyT3B0aW9uLFxuICAgICAgICBzZXRBY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMi5zZXRBY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzMi5zZWFyY2hhYmxlLFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzMi5zZWFyY2hWYWx1ZSxcbiAgICAgICAgaXNQcmVGaWx0ZXJlZCA9IF90aGlzJHByb3BzMi5pc1ByZUZpbHRlcmVkLFxuICAgICAgICBpc1ZpcnR1YWxpemVkID0gX3RoaXMkcHJvcHMyLmlzVmlydHVhbGl6ZWQ7XG4gICAgICBpZiAoaXNHcm91cExhYmVsKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciwgbnVsbCwgZnVuY3Rpb24gKHN0eWxlc01lbW9pemVyKSB7XG4gICAgICAgICAgdmFyIHN0eWxlcyA9IHN0eWxlc01lbW9pemVyKGV1aVNlbGVjdGFibGVMaXN0U3R5bGVzKTtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIHJvbGU6IFwicHJlc2VudGF0aW9uXCIsXG4gICAgICAgICAgICBjc3M6IHN0eWxlcy5ldWlTZWxlY3RhYmxlTGlzdF9fZ3JvdXBMYWJlbCxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdF9fZ3JvdXBMYWJlbFwiLFxuICAgICAgICAgICAgc3R5bGU6IHN0eWxlXG4gICAgICAgICAgfSwgb3B0aW9uUmVzdCksIHByZXBlbmQsIGxhYmVsLCBhcHBlbmQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHZhciBpZCA9IG1ha2VPcHRpb25JZChpbmRleCk7XG4gICAgICB2YXIgaXNGb2N1c2VkID0gYWN0aXZlT3B0aW9uSW5kZXggPT09IGluZGV4O1xuXG4gICAgICAvLyBTZWFyY2ggaGlnaGxpZ2h0aW5nXG4gICAgICB2YXIgaGFzU2VhcmNoID0gISFzZWFyY2hWYWx1ZTtcbiAgICAgIHZhciBoaWdobGlnaHRTZWFyY2ggPSBoYXNTZWFyY2ggJiYgKF90eXBlb2YoaXNQcmVGaWx0ZXJlZCkgPT09ICdvYmplY3QnID8gaXNQcmVGaWx0ZXJlZC5oaWdobGlnaHRTZWFyY2ggIT09IGZhbHNlIDogdHJ1ZSk7XG5cbiAgICAgIC8vIFRleHQgd3JhcHBpbmdcbiAgICAgIHZhciBjYW5XcmFwID0gIWlzVmlydHVhbGl6ZWQ7XG4gICAgICB2YXIgX3RleHRXcmFwID0gKF9vcHRpb24kdGV4dFdyYXAgPSBvcHRpb24udGV4dFdyYXApICE9PSBudWxsICYmIF9vcHRpb24kdGV4dFdyYXAgIT09IHZvaWQgMCA/IF9vcHRpb24kdGV4dFdyYXAgOiBfdGhpcy5wcm9wcy50ZXh0V3JhcDtcbiAgICAgIHZhciB0ZXh0V3JhcCA9IGNhbldyYXAgPyBfdGV4dFdyYXAgOiAndHJ1bmNhdGUnO1xuXG4gICAgICAvLyBUcnVuY2F0aW9uIGNvbmZpZyAoaWYgYW55KS4gSWYgbm9uZSwgQ1NTIHRydW5jYXRpb24gaXMgdXNlZFxuICAgICAgdmFyIHRydW5jYXRpb25Qcm9wcyA9IHRleHRXcmFwID09PSAndHJ1bmNhdGUnID8gX3RoaXMuZ2V0VHJ1bmNhdGlvblByb3BzKG9wdGlvbiwgaGlnaGxpZ2h0U2VhcmNoLCBpc0ZvY3VzZWQpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpU2VsZWN0YWJsZUxpc3RJdGVtLCBfZXh0ZW5kcyh7XG4gICAgICAgIGtleTogaWQsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24gb25Nb3VzZURvd24oKSB7XG4gICAgICAgICAgc2V0QWN0aXZlT3B0aW9uSW5kZXgoaW5kZXgpO1xuICAgICAgICB9LFxuICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQucGVyc2lzdCgpOyAvLyBOT1RFOiBUaGlzIGlzIG5lZWRlZCBmb3IgUmVhY3QgdjE2IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgX3RoaXMub25BZGRPclJlbW92ZU9wdGlvbihvcHRpb24sIGV2ZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgIHRpdGxlOiBzZWFyY2hhYmxlTGFiZWwgfHwgbGFiZWwsXG4gICAgICAgIGNoZWNrZWQ6IGNoZWNrZWQsXG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgcHJlcGVuZDogcHJlcGVuZCxcbiAgICAgICAgYXBwZW5kOiBhcHBlbmQsXG4gICAgICAgIFwiYXJpYS1wb3NpbnNldFwiOiBfdGhpcy5zdGF0ZS5hcmlhUG9zSW5TZXRNYXBbaW5kZXhdLFxuICAgICAgICBcImFyaWEtc2V0c2l6ZVwiOiBfdGhpcy5zdGF0ZS5hcmlhU2V0U2l6ZSxcbiAgICAgICAgb25Gb2N1c0JhZGdlOiBvbkZvY3VzQmFkZ2UsXG4gICAgICAgIGFsbG93RXhjbHVzaW9uczogYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICBzaG93SWNvbnM6IHNob3dJY29ucyxcbiAgICAgICAgcGFkZGluZ1NpemU6IHBhZGRpbmdTaXplLFxuICAgICAgICBzZWFyY2hhYmxlOiBzZWFyY2hhYmxlLFxuICAgICAgICB0ZXh0V3JhcDogdGV4dFdyYXBcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBjb21wbGV4XG4gICAgICB9LCBvcHRpb25SZXN0KSwgcmVuZGVyT3B0aW9uID8gcmVuZGVyT3B0aW9uKCAvLyBAdHMtaWdub3JlIGNvbXBsZXhcbiAgICAgIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgX29wdGlvbiksIG9wdGlvbkRhdGEpLCBzZWFyY2hWYWx1ZSkgOiBoaWdobGlnaHRTZWFyY2ggPyBfdGhpcy5yZW5kZXJTZWFyY2hlZFRleHQobGFiZWwsIHRydW5jYXRpb25Qcm9wcykgOiB0cnVuY2F0aW9uUHJvcHMgPyBfdGhpcy5yZW5kZXJUcnVuY2F0ZWRUZXh0KGxhYmVsLCB0cnVuY2F0aW9uUHJvcHMpIDogbGFiZWwpO1xuICAgIH0sIGFyZUVxdWFsKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlbmRlclZpcnR1YWxpemVkTGlzdFwiLCBmdW5jdGlvbiAobGlzdENsYXNzZXMpIHtcbiAgICAgIGlmICghX3RoaXMucHJvcHMuaXNWaXJ0dWFsaXplZCkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSBfdGhpcy5zdGF0ZSxcbiAgICAgICAgb3B0aW9uQXJyYXkgPSBfdGhpcyRzdGF0ZS5vcHRpb25BcnJheSxcbiAgICAgICAgaXRlbURhdGEgPSBfdGhpcyRzdGF0ZS5pdGVtRGF0YTtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgd2luZG93UHJvcHMgPSBfdGhpcyRwcm9wczMud2luZG93UHJvcHMsXG4gICAgICAgIGZvcmNlZEhlaWdodCA9IF90aGlzJHByb3BzMy5oZWlnaHQsXG4gICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzMy5yb3dIZWlnaHQ7XG4gICAgICB2YXIgaGVpZ2h0SXNGdWxsID0gZm9yY2VkSGVpZ2h0ID09PSAnZnVsbCc7XG4gICAgICB2YXIgdmlydHVhbGl6YXRpb25Qcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBjbGFzc05hbWU6IGxpc3RDbGFzc2VzLFxuICAgICAgICByZWY6IF90aGlzLnNldExpc3RSZWYsXG4gICAgICAgIG91dGVyUmVmOiBfdGhpcy5yZW1vdmVTY3JvbGxhYmxlVGFiU3RvcCxcbiAgICAgICAgaW5uZXJSZWY6IF90aGlzLnNldExpc3RCb3hSZWYsXG4gICAgICAgIGlubmVyRWxlbWVudFR5cGU6ICd1bCcsXG4gICAgICAgIGl0ZW1Db3VudDogb3B0aW9uQXJyYXkubGVuZ3RoLFxuICAgICAgICBpdGVtRGF0YTogaXRlbURhdGEsXG4gICAgICAgIGl0ZW1TaXplOiByb3dIZWlnaHQsXG4gICAgICAgICdkYXRhLXNraXAtYXhlJzogJ3Njcm9sbGFibGUtcmVnaW9uLWZvY3VzYWJsZSdcbiAgICAgIH0sIHdpbmRvd1Byb3BzKTtcblxuICAgICAgLy8gQ2FsY3VsYXRlZCBoZWlnaHQgaXMgb25seSB1c2VkIGlmIGhlaWdodCBpcyBub3QgZnVsbFxuICAgICAgdmFyIGNhbGN1bGF0ZWRIZWlnaHQgPSAhaGVpZ2h0SXNGdWxsID8gZm9yY2VkSGVpZ2h0IHx8IDAgOiAwO1xuXG4gICAgICAvLyBJZiBjYWxjdWxhdGVkSGVpZ2h0IGlzIHN0aWxsIGZhbHN5LCB0aGVuIGNhbGN1bGF0ZSBpdFxuICAgICAgaWYgKCFoZWlnaHRJc0Z1bGwgJiYgIWNhbGN1bGF0ZWRIZWlnaHQpIHtcbiAgICAgICAgdmFyIG1heFZpc2libGVPcHRpb25zID0gNztcbiAgICAgICAgdmFyIG51bVZpc2libGVPcHRpb25zID0gb3B0aW9uQXJyYXkubGVuZ3RoO1xuICAgICAgICB2YXIgbnVtVmlzaWJsZU1vcmVUaGFuTWF4ID0gb3B0aW9uQXJyYXkubGVuZ3RoID4gbWF4VmlzaWJsZU9wdGlvbnM7XG4gICAgICAgIGlmIChudW1WaXNpYmxlTW9yZVRoYW5NYXgpIHtcbiAgICAgICAgICAvLyBTaG93IG9ubHkgaGFsZiBvZiB0aGUgbGFzdCBvbmUgdG8gaW5kaWNhdGUgdGhlcmUncyBtb3JlIHRvIHNjcm9sbCB0b1xuICAgICAgICAgIGNhbGN1bGF0ZWRIZWlnaHQgPSAobWF4VmlzaWJsZU9wdGlvbnMgLSAwLjUpICogcm93SGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGN1bGF0ZWRIZWlnaHQgPSBudW1WaXNpYmxlT3B0aW9ucyAqIHJvd0hlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhlaWdodElzRnVsbCA/IF9fX0Vtb3Rpb25KU1goRXVpQXV0b1NpemVyLCB7XG4gICAgICAgIG9uUmVzaXplOiBfdGhpcy5jYWxjdWxhdGVEZWZhdWx0T3B0aW9uV2lkdGhcbiAgICAgIH0sIGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgd2lkdGggPSBfcmVmMi53aWR0aCxcbiAgICAgICAgICBoZWlnaHQgPSBfcmVmMi5oZWlnaHQ7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZpeGVkU2l6ZUxpc3QsIF9leHRlbmRzKHtcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICAgICAgfSwgdmlydHVhbGl6YXRpb25Qcm9wcyksIF90aGlzLkxpc3RSb3cpO1xuICAgICAgfSkgOiBfX19FbW90aW9uSlNYKEV1aUF1dG9TaXplciwge1xuICAgICAgICBkaXNhYmxlSGVpZ2h0OiB0cnVlLFxuICAgICAgICBvblJlc2l6ZTogX3RoaXMuY2FsY3VsYXRlRGVmYXVsdE9wdGlvbldpZHRoXG4gICAgICB9LCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgdmFyIHdpZHRoID0gX3JlZjMud2lkdGg7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZpeGVkU2l6ZUxpc3QsIF9leHRlbmRzKHtcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBjYWxjdWxhdGVkSGVpZ2h0XG4gICAgICAgIH0sIHZpcnR1YWxpemF0aW9uUHJvcHMpLCBfdGhpcy5MaXN0Um93KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJmb3JjZVZpcnR1YWxpemVkTGlzdFJvd1JlcmVuZGVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXRlbURhdGE6IF9vYmplY3RTcHJlYWQoe30sIF90aGlzLnN0YXRlLm9wdGlvbkFycmF5KVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gRXVpVGV4dFRydW5jYXRlIGlzIGV4cGVuc2l2ZSBwZXJmLXdpc2UgLSB3ZSB1c2Ugc2V2ZXJhbCB1dGlsaXRpZXMgaGVyZSB0b1xuICAgIC8vIG9mZnNldCBpdHMgcGVyZm9ybWFuY2UgY29zdFxuICAgIC8vIGFuZCBjcmVhdGVzIGEgcmVzaXplIG9ic2VydmVyIGZvclxuICAgIC8vIGVhY2ggaW5kaXZpZHVhbCBpdGVtLiBUaGlzIGxvZ2ljIHRyaWVzIHRvIG9mZnNldCB0aGlzIHBlcmZvcm1hbmNlIGhpdCBieVxuICAgIC8vIGd1ZXNzdGltYXRpbmcgYSBkZWZhdWx0IHdpZHRoIGZvciBlYWNoIG9wdGlvblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJmb2N1c0JhZGdlT2Zmc2V0XCIsIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjYWxjdWxhdGVEZWZhdWx0T3B0aW9uV2lkdGhcIiwgZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgICB2YXIgY29udGFpbmVyV2lkdGggPSBfcmVmNC53aWR0aDtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgdHJ1bmNhdGlvblByb3BzID0gX3RoaXMkcHJvcHM0LnRydW5jYXRpb25Qcm9wcyxcbiAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzNC5zZWFyY2hhYmxlLFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzNC5zZWFyY2hWYWx1ZTtcblxuICAgICAgLy8gSWYgaXQncyBub3QgbGlrZWx5IHdlJ2xsIG5lZWQgdG8gdXNlIEV1aVRleHRUcnVuY2F0ZSwgZG9uJ3Qgc2V0IHN0YXRlL3JlcmVuZGVyIG9uIGV2ZXJ5IHBhbmVsIHJlc2l6ZVxuICAgICAgdmFyIG1heVRydW5jYXRlID0gc2VhcmNoYWJsZSB8fCB0cnVuY2F0aW9uUHJvcHM7XG4gICAgICBpZiAoIW1heVRydW5jYXRlKSByZXR1cm47XG4gICAgICB2YXIgcGFkZGluZ09mZnNldCA9IF90aGlzLnByb3BzLnBhZGRpbmdTaXplID09PSAnbm9uZScgPyAwIDogMjQ7IC8vIERlZmF1bHRzIHRvICdzJ1xuICAgICAgdmFyIGNoZWNrZWRJY29uT2Zmc2V0ID0gX3RoaXMucHJvcHMuc2hvd0ljb25zID09PSBmYWxzZSA/IDAgOiAyODsgLy8gRGVmYXVsdHMgdG8gdHJ1ZVxuICAgICAgX3RoaXMuZm9jdXNCYWRnZU9mZnNldCA9IF90aGlzLnByb3BzLm9uRm9jdXNCYWRnZSA9PT0gZmFsc2UgPyAwIDogNDY7XG5cbiAgICAgIC8vIFdhaXQgYSB0aWNrIGZvciB0aGUgbGlzdGJveCByZWYgdG8gdXBkYXRlIGJlZm9yZSBwcm9jZWVkaW5nXG4gICAgICBfdGhpcy5hbmltYXRpb25GcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNjcm9sbGJhck9mZnNldCA9IF90aGlzLmxpc3RCb3hSZWYgPyBjb250YWluZXJXaWR0aCAtIF90aGlzLmxpc3RCb3hSZWYub2Zmc2V0V2lkdGggOiAwO1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgZGVmYXVsdE9wdGlvbldpZHRoOiBjb250YWluZXJXaWR0aCAtIHNjcm9sbGJhck9mZnNldCAtIHBhZGRpbmdPZmZzZXQgLSBjaGVja2VkSWNvbk9mZnNldFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBQb3RlbnRpYWxseSBmb3JjZSBsaXN0IHJvd3MgdG8gcmVyZW5kZXIgb24gZHluYW1pYyByZXNpemUgYXMgd2VsbCxcbiAgICAgICAgLy8gYnV0IHRyeSB0byBkbyBpdCBhcyBsaWdodGx5IGFzIHBvc3NpYmxlXG4gICAgICAgIGlmICh0cnVuY2F0aW9uUHJvcHMgfHwgc2VhcmNoYWJsZSAmJiBzZWFyY2hWYWx1ZSkge1xuICAgICAgICAgIF90aGlzLmZvcmNlVmlydHVhbGl6ZWRMaXN0Um93UmVyZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImdldFRydW5jYXRpb25Qcm9wc1wiLCBmdW5jdGlvbiAob3B0aW9uLCBoaWdobGlnaHRTZWFyY2gsIGlzRm9jdXNlZCkge1xuICAgICAgLy8gSW5kaXZpZHVhbCB0cnVuY2F0aW9uIHNldHRpbmdzIHNob3VsZCBvdmVycmlkZSBjb21wb25lbnQtd2lkZSBzZXR0aW5nc1xuICAgICAgdmFyIHRydW5jYXRpb25Qcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgX3RoaXMucHJvcHMudHJ1bmNhdGlvblByb3BzKSwgb3B0aW9uLnRydW5jYXRpb25Qcm9wcyk7XG5cbiAgICAgIC8vIElmIHdlJ3JlIG5vdCBhY3R1YWxseSB1c2luZyBFdWlUZXh0VHJ1bmNhdGUsIG5vIG5lZWQgdG8gY29udGludWVcbiAgICAgIHZhciBoYXNDb21wbGV4VHJ1bmNhdGlvbiA9IGhpZ2hsaWdodFNlYXJjaCB8fCBPYmplY3Qua2V5cyh0cnVuY2F0aW9uUHJvcHMpLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoIWhhc0NvbXBsZXhUcnVuY2F0aW9uKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciB3ZSBjYW4gdXNlIHRoZSBvcHRpbWl6ZWQgZGVmYXVsdCBvcHRpb24gd2lkdGhcbiAgICAgIHZhciBkZWZhdWx0T3B0aW9uV2lkdGggPSBfdGhpcy5zdGF0ZS5kZWZhdWx0T3B0aW9uV2lkdGg7XG4gICAgICB2YXIgdXNlRGVmYXVsdFdpZHRoID0gIW9wdGlvbi5hcHBlbmQgJiYgIW9wdGlvbi5wcmVwZW5kO1xuICAgICAgdmFyIGRlZmF1bHRXaWR0aCA9IHVzZURlZmF1bHRXaWR0aCAmJiBkZWZhdWx0T3B0aW9uV2lkdGggPyBpc0ZvY3VzZWQgPyBkZWZhdWx0T3B0aW9uV2lkdGggLSBfdGhpcy5mb2N1c0JhZGdlT2Zmc2V0IDogZGVmYXVsdE9wdGlvbldpZHRoIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICB3aWR0aDogZGVmYXVsdFdpZHRoXG4gICAgICB9LCB0cnVuY2F0aW9uUHJvcHMpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZW5kZXJTZWFyY2hlZFRleHRcIiwgZnVuY3Rpb24gKHRleHQsIHRydW5jYXRpb25Qcm9wcykge1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gX3RoaXMucHJvcHMuc2VhcmNoVmFsdWU7XG5cbiAgICAgIC8vIElmIHRydW5jYXRpb25Qcm9wcyBpcyB1bmRlZmluZWQsIHdlJ3JlIHVzaW5nIG5vbi12aXJ0dWFsaXplZCB0ZXh0IHdyYXBwaW5nXG4gICAgICBpZiAoIXRydW5jYXRpb25Qcm9wcykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlIaWdobGlnaHQsIHtcbiAgICAgICAgICBzZWFyY2g6IHNlYXJjaFZhbHVlXG4gICAgICAgIH0sIHRleHQpO1xuICAgICAgfVxuICAgICAgdmFyIHNlYXJjaFBvc2l0aW9uU3RhcnQgPSB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIHZhciBzZWFyY2hQb3NpdGlvbkNlbnRlciA9IHNlYXJjaFBvc2l0aW9uU3RhcnQgKyBNYXRoLmZsb29yKHNlYXJjaFZhbHVlLmxlbmd0aCAvIDIpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGV4dFRydW5jYXRlLCBfZXh0ZW5kcyh7fSwgdHJ1bmNhdGlvblByb3BzLCB7XG4gICAgICAgIC8vIFdoZW4gc2VhcmNoaW5nLCBkb24ndCBhbGxvdyBvdmVycmlkaW5nIHRoZSB0cnVuY2F0aW9uIHNldHRpbmdzXG4gICAgICAgIHRydW5jYXRpb246IFwic3RhcnRFbmRcIixcbiAgICAgICAgdHJ1bmNhdGlvblBvc2l0aW9uOiBzZWFyY2hQb3NpdGlvbkNlbnRlcixcbiAgICAgICAgdGV4dDogdGV4dFxuICAgICAgfSksIGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCB0ZXh0Lmxlbmd0aCA+PSBzZWFyY2hWYWx1ZS5sZW5ndGggPyBfX19FbW90aW9uSlNYKEV1aUhpZ2hsaWdodCwge1xuICAgICAgICAgIHNlYXJjaDogc2VhcmNoVmFsdWVcbiAgICAgICAgfSwgdGV4dCkgOlxuICAgICAgICAvLyBJZiB0aGUgYXZhaWxhYmxlIHRydW5jYXRlZCB0ZXh0IGlzIHNob3J0ZXIgdGhhbiB0aGUgZnVsbCBzZWFyY2ggc3RyaW5nLFxuICAgICAgICAvLyBqdXN0IGhpZ2hsaWdodCB0aGUgZW50aXJlIHRydW5jYXRlZCB0ZXh0XG4gICAgICAgIF9fX0Vtb3Rpb25KU1goRXVpTWFyaywgbnVsbCwgdGV4dCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlbmRlclRydW5jYXRlZFRleHRcIiwgZnVuY3Rpb24gKHRleHQsIHRydW5jYXRpb25Qcm9wcykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gRm9yIHNvbWUgYml6YXJyZSByZWFzb24sIHRydW5jYXRpb24gaW4gRXVpU2VsZWN0YWJsZSBpcyBvZmYgb24gaW5pdGlhbCBtb3VudFxuICAgICAgICAvLyAoYnV0IG5vdCBvbiByZXJlbmRlcikgZm9yIFNhZmFyaSBhbmQgX3NvbWVfIHRydW5jYXRpb24gdHlwZXMgaW4gRmlyZWZveCA6fFxuICAgICAgICAvLyBXYWl0aW5nIGEgdGljayBiZWZvcmUgY2FsY3VsYXRpbmcgdHJ1bmNhdGlvbiBzZWVtcyB0byBzbW9vdGggb3ZlciB0aGUgaXNzdWVcbiAgICAgICAgX19fRW1vdGlvbkpTWChFdWlUZXh0VHJ1bmNhdGUsIF9leHRlbmRzKHtcbiAgICAgICAgICBjYWxjdWxhdGlvbkRlbGF5TXM6IDJcbiAgICAgICAgfSwgdHJ1bmNhdGlvblByb3BzLCB7XG4gICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICB9KSwgZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQWRkT3JSZW1vdmVPcHRpb25cIiwgZnVuY3Rpb24gKG9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIGlmIChvcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IF90aGlzLnByb3BzLFxuICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wczUuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM1Lm9wdGlvbnMsXG4gICAgICAgIF90aGlzJHByb3BzNSR2aXNpYmxlTyA9IF90aGlzJHByb3BzNS52aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgdmlzaWJsZU9wdGlvbnMgPSBfdGhpcyRwcm9wczUkdmlzaWJsZU8gPT09IHZvaWQgMCA/IG9wdGlvbnMgOiBfdGhpcyRwcm9wczUkdmlzaWJsZU87XG4gICAgICBfdGhpcy5wcm9wcy5zZXRBY3RpdmVPcHRpb25JbmRleCh2aXNpYmxlT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICAgIHZhciBsYWJlbCA9IF9yZWY1LmxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWwgPT09IG9wdGlvbi5sYWJlbDtcbiAgICAgIH0pLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChvcHRpb24uY2hlY2tlZCA9PT0gJ29uJyAmJiBhbGxvd0V4Y2x1c2lvbnMpIHtcbiAgICAgICAgICBfdGhpcy5vbkV4Y2x1ZGVPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLmNoZWNrZWQgPT09ICdvbicgfHwgb3B0aW9uLmNoZWNrZWQgPT09ICdvZmYnKSB7XG4gICAgICAgICAgX3RoaXMub25SZW1vdmVPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMub25BZGRPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkFkZE9wdGlvblwiLCBmdW5jdGlvbiAoYWRkZWRPcHRpb24sIGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczYub25PcHRpb25DbGljayxcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzNi5vcHRpb25zLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczYuc2luZ2xlU2VsZWN0aW9uO1xuICAgICAgdmFyIGNoYW5nZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBhZGRlZE9wdGlvbik7XG4gICAgICB2YXIgdXBkYXRlZE9wdGlvbnMgPSBvcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIC8vIGlmIHNpbmdsZVNlbGVjdGlvbiBpcyBlbmFibGVkLCB1bmNoZWNrIGFueSBzZWxlY3RlZCBvcHRpb24ocylcbiAgICAgICAgdmFyIHVwZGF0ZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pO1xuICAgICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlIHVwZGF0ZWRPcHRpb24uY2hlY2tlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoaXMgaXMgdGhlIG5vdy1zZWxlY3RlZCBvcHRpb24sIGNoZWNrIGl0XG4gICAgICAgIGlmIChvcHRpb24gPT09IGFkZGVkT3B0aW9uKSB7XG4gICAgICAgICAgdXBkYXRlZE9wdGlvbi5jaGVja2VkID0gJ29uJztcbiAgICAgICAgICBjaGFuZ2VkT3B0aW9uID0gdXBkYXRlZE9wdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXBkYXRlZE9wdGlvbjtcbiAgICAgIH0pO1xuICAgICAgb25PcHRpb25DbGljayh1cGRhdGVkT3B0aW9ucywgZXZlbnQsIGNoYW5nZWRPcHRpb24pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvblJlbW92ZU9wdGlvblwiLCBmdW5jdGlvbiAocmVtb3ZlZE9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzNy5vbk9wdGlvbkNsaWNrLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczcuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM3Lm9wdGlvbnM7XG4gICAgICB2YXIgY2hhbmdlZE9wdGlvbiA9IF9vYmplY3RTcHJlYWQoe30sIHJlbW92ZWRPcHRpb24pO1xuICAgICAgdmFyIHVwZGF0ZWRPcHRpb25zID0gb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICB2YXIgdXBkYXRlZE9wdGlvbiA9IF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbik7XG4gICAgICAgIGlmIChvcHRpb24gPT09IHJlbW92ZWRPcHRpb24gJiYgc2luZ2xlU2VsZWN0aW9uICE9PSAnYWx3YXlzJykge1xuICAgICAgICAgIGRlbGV0ZSB1cGRhdGVkT3B0aW9uLmNoZWNrZWQ7XG4gICAgICAgICAgY2hhbmdlZE9wdGlvbiA9IHVwZGF0ZWRPcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRPcHRpb247XG4gICAgICB9KTtcbiAgICAgIG9uT3B0aW9uQ2xpY2sodXBkYXRlZE9wdGlvbnMsIGV2ZW50LCBjaGFuZ2VkT3B0aW9uKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25FeGNsdWRlT3B0aW9uXCIsIGZ1bmN0aW9uIChleGNsdWRlZE9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzOC5vbk9wdGlvbkNsaWNrLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM4Lm9wdGlvbnM7XG4gICAgICB2YXIgY2hhbmdlZE9wdGlvbiA9IF9vYmplY3RTcHJlYWQoe30sIGV4Y2x1ZGVkT3B0aW9uKTtcbiAgICAgIHZhciB1cGRhdGVkT3B0aW9ucyA9IG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pO1xuICAgICAgICBpZiAob3B0aW9uID09PSBleGNsdWRlZE9wdGlvbikge1xuICAgICAgICAgIHVwZGF0ZWRPcHRpb24uY2hlY2tlZCA9ICdvZmYnO1xuICAgICAgICAgIGNoYW5nZWRPcHRpb24gPSB1cGRhdGVkT3B0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cGRhdGVkT3B0aW9uO1xuICAgICAgfSk7XG4gICAgICBvbk9wdGlvbkNsaWNrKHVwZGF0ZWRPcHRpb25zLCBldmVudCwgY2hhbmdlZE9wdGlvbik7XG4gICAgfSk7XG4gICAgdmFyIF9vcHRpb25BcnJheSA9IHByb3BzLnZpc2libGVPcHRpb25zIHx8IHByb3BzLm9wdGlvbnM7XG4gICAgX3RoaXMuc3RhdGUgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIGRlZmF1bHRPcHRpb25XaWR0aDogMCxcbiAgICAgIG9wdGlvbkFycmF5OiBfb3B0aW9uQXJyYXksXG4gICAgICBpdGVtRGF0YTogX29iamVjdFNwcmVhZCh7fSwgX29wdGlvbkFycmF5KVxuICAgIH0sIF90aGlzLmNhbGN1bGF0ZUFyaWFTZXRBdHRycyhfb3B0aW9uQXJyYXkpKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aVNlbGVjdGFibGVMaXN0LCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlTZWxlY3RhYmxlTGlzdCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAvLyBlbnN1cmUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGlzIGNhbmNlbGVkIG9uIHVubW91bnQgYXNcbiAgICAgIC8vIGl0IGNvdWxkIHBvdGVudGlhbGx5IHJ1biBvbiBhIG5leHQgdGljayBvdGhlcndpc2VcbiAgICAgIGlmICh0aGlzLmFuaW1hdGlvbkZyYW1lSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmFuaW1hdGlvbkZyYW1lSWQpO1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkZyYW1lSWQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNob3VsZENvbXBvbmVudFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM5ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHM5LmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHM5LnNob3dJY29ucyxcbiAgICAgICAgcGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wczkucGFkZGluZ1NpemUsXG4gICAgICAgIHRleHRXcmFwID0gX3RoaXMkcHJvcHM5LnRleHRXcmFwLFxuICAgICAgICBvbkZvY3VzQmFkZ2UgPSBfdGhpcyRwcm9wczkub25Gb2N1c0JhZGdlLFxuICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHM5LnNlYXJjaGFibGU7XG5cbiAgICAgIC8vIHVzaW5nIHNob3VsZENvbXBvbmVudFVwZGF0ZSB0byBkZXRlcm1pbmUgbmVlZGVkIHJlcmVuZGVyIGJlZm9yZSBhY3R1YWwgcmVyZW5kZXJcbiAgICAgIC8vIHdpdGhvdXQgbmVlZGluZyBzdGF0ZSB1cGRhdGVzIG9yIGxhZ2dpbmcgYmVoaW5kIG9uIHVwZGF0ZXNcbiAgICAgIGlmIChuZXh0UHJvcHMuYWxsb3dFeGNsdXNpb25zICE9PSBhbGxvd0V4Y2x1c2lvbnMgfHwgbmV4dFByb3BzLnNob3dJY29ucyAhPT0gc2hvd0ljb25zIHx8IG5leHRQcm9wcy5wYWRkaW5nU2l6ZSAhPT0gcGFkZGluZ1NpemUgfHwgbmV4dFByb3BzLnRleHRXcmFwICE9PSB0ZXh0V3JhcCB8fCBuZXh0UHJvcHMub25Gb2N1c0JhZGdlICE9PSBvbkZvY3VzQmFkZ2UgfHwgbmV4dFByb3BzLnNlYXJjaGFibGUgIT09IHNlYXJjaGFibGUpIHtcbiAgICAgICAgdGhpcy5saXN0Um93UmVyZW5kZXIgKz0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIF90aGlzJHByb3BzMTAgPSB0aGlzLnByb3BzLFxuICAgICAgICBpc1ZpcnR1YWxpemVkID0gX3RoaXMkcHJvcHMxMC5pc1ZpcnR1YWxpemVkLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMTAuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgIHZpc2libGVPcHRpb25zID0gX3RoaXMkcHJvcHMxMC52aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMTAub3B0aW9ucyxcbiAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHMxMC5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgIHNob3dJY29ucyA9IF90aGlzJHByb3BzMTAuc2hvd0ljb25zLFxuICAgICAgICBwYWRkaW5nU2l6ZSA9IF90aGlzJHByb3BzMTAucGFkZGluZ1NpemUsXG4gICAgICAgIHRleHRXcmFwID0gX3RoaXMkcHJvcHMxMC50ZXh0V3JhcCxcbiAgICAgICAgb25Gb2N1c0JhZGdlID0gX3RoaXMkcHJvcHMxMC5vbkZvY3VzQmFkZ2UsXG4gICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wczEwLnNlYXJjaGFibGU7XG4gICAgICBpZiAocHJldlByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSBhY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgICB2YXIgbWFrZU9wdGlvbklkID0gdGhpcy5wcm9wcy5tYWtlT3B0aW9uSWQ7XG4gICAgICAgIGlmICh0aGlzLmxpc3RCb3hSZWYgJiYgdGhpcy5wcm9wcy5zZWFyY2hhYmxlICE9PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5saXN0Qm94UmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgbWFrZU9wdGlvbklkKGFjdGl2ZU9wdGlvbkluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3RpdmVPcHRpb25JbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBpZiAoaXNWaXJ0dWFsaXplZCkge1xuICAgICAgICAgICAgdmFyIF90aGlzJGxpc3RSZWY7XG4gICAgICAgICAgICAoX3RoaXMkbGlzdFJlZiA9IHRoaXMubGlzdFJlZikgPT09IG51bGwgfHwgX3RoaXMkbGlzdFJlZiA9PT0gdm9pZCAwIHx8IF90aGlzJGxpc3RSZWYuc2Nyb2xsVG9JdGVtKGFjdGl2ZU9wdGlvbkluZGV4LCAnYXV0bycpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkbGlzdEJveFJlZjtcbiAgICAgICAgICAgIHZhciBhY3RpdmVPcHRpb25JZCA9IFwiI1wiLmNvbmNhdChtYWtlT3B0aW9uSWQoYWN0aXZlT3B0aW9uSW5kZXgpKTtcbiAgICAgICAgICAgIHZhciBhY3RpdmVPcHRpb25FbCA9IChfdGhpcyRsaXN0Qm94UmVmID0gdGhpcy5saXN0Qm94UmVmKSA9PT0gbnVsbCB8fCBfdGhpcyRsaXN0Qm94UmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRsaXN0Qm94UmVmLnF1ZXJ5U2VsZWN0b3IoYWN0aXZlT3B0aW9uSWQpO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbkVsKSB7XG4gICAgICAgICAgICAgIHZhciBfYWN0aXZlT3B0aW9uRWwkc2Nyb2w7XG4gICAgICAgICAgICAgIC8vIFRPRE86IHdlIGNhbiByZW1vdmUgc2Nyb2xsSW50b1ZpZXcncyBjb25kaXRpb25hbCBjaGFpbmluZyBvbmNlIGpzZG9tIHN0dWJzIGl0XG4gICAgICAgICAgICAgIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pzZG9tL2pzZG9tL2lzc3Vlcy8xNjk1XG4gICAgICAgICAgICAgIChfYWN0aXZlT3B0aW9uRWwkc2Nyb2wgPSBhY3RpdmVPcHRpb25FbC5zY3JvbGxJbnRvVmlldykgPT09IG51bGwgfHwgX2FjdGl2ZU9wdGlvbkVsJHNjcm9sID09PSB2b2lkIDAgfHwgX2FjdGl2ZU9wdGlvbkVsJHNjcm9sLmNhbGwoYWN0aXZlT3B0aW9uRWwsIHtcbiAgICAgICAgICAgICAgICBibG9jazogJ25lYXJlc3QnXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIG9wdGlvbkFycmF5ID0gdmlzaWJsZU9wdGlvbnMgfHwgb3B0aW9ucztcbiAgICAgIGlmIChwcmV2UHJvcHMudmlzaWJsZU9wdGlvbnMgIT09IHZpc2libGVPcHRpb25zIHx8IHByZXZQcm9wcy5vcHRpb25zICE9PSBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgb3B0aW9uQXJyYXk6IG9wdGlvbkFycmF5LFxuICAgICAgICAgIGl0ZW1EYXRhOiBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb25BcnJheSlcbiAgICAgICAgfSwgdGhpcy5jYWxjdWxhdGVBcmlhU2V0QXR0cnMob3B0aW9uQXJyYXkpKSk7XG4gICAgICB9IGVsc2UgaWYgKGlzVmlydHVhbGl6ZWQpIHtcbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgTGlzdFJvdyB1cGRhdGVzIGJhc2VkIG9uIGl0ZW0gcHJvcHNcbiAgICAgICAgaWYgKHByZXZQcm9wcy5hbGxvd0V4Y2x1c2lvbnMgIT09IGFsbG93RXhjbHVzaW9ucyB8fCBwcmV2UHJvcHMuc2hvd0ljb25zICE9PSBzaG93SWNvbnMgfHwgcHJldlByb3BzLnBhZGRpbmdTaXplICE9PSBwYWRkaW5nU2l6ZSB8fCBwcmV2UHJvcHMudGV4dFdyYXAgIT09IHRleHRXcmFwIHx8IHByZXZQcm9wcy5vbkZvY3VzQmFkZ2UgIT09IG9uRm9jdXNCYWRnZSB8fCBwcmV2UHJvcHMuc2VhcmNoYWJsZSAhPT0gc2VhcmNoYWJsZSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXRlbURhdGE6IF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbkFycmF5KVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczExID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMxMS5jbGFzc05hbWUsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczExLm9wdGlvbnMsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMxMS5zZWFyY2hWYWx1ZSxcbiAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzMTEub25PcHRpb25DbGljayxcbiAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHMxMS5yZW5kZXJPcHRpb24sXG4gICAgICAgIGZvcmNlZEhlaWdodCA9IF90aGlzJHByb3BzMTEuaGVpZ2h0LFxuICAgICAgICB3aW5kb3dQcm9wcyA9IF90aGlzJHByb3BzMTEud2luZG93UHJvcHMsXG4gICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzMTEucm93SGVpZ2h0LFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMTEuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgIG1ha2VPcHRpb25JZCA9IF90aGlzJHByb3BzMTEubWFrZU9wdGlvbklkLFxuICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wczExLnNob3dJY29ucyxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMxMS5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIHZpc2libGVPcHRpb25zID0gX3RoaXMkcHJvcHMxMS52aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHMxMS5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgIGJvcmRlcmVkID0gX3RoaXMkcHJvcHMxMS5ib3JkZXJlZCxcbiAgICAgICAgcGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wczExLnBhZGRpbmdTaXplLFxuICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMxMS5zZWFyY2hhYmxlLFxuICAgICAgICBvbkZvY3VzQmFkZ2UgPSBfdGhpcyRwcm9wczExLm9uRm9jdXNCYWRnZSxcbiAgICAgICAgbGlzdElkID0gX3RoaXMkcHJvcHMxMS5saXN0SWQsXG4gICAgICAgIHNldEFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMxMS5zZXRBY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHMxMVsnYXJpYS1sYWJlbCddLFxuICAgICAgICBhcmlhTGFiZWxsZWRieSA9IF90aGlzJHByb3BzMTFbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICBhcmlhRGVzY3JpYmVkYnkgPSBfdGhpcyRwcm9wczExWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgIHJvbGUgPSBfdGhpcyRwcm9wczExLnJvbGUsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQgPSBfdGhpcyRwcm9wczExLmlzUHJlRmlsdGVyZWQsXG4gICAgICAgIGlzVmlydHVhbGl6ZWQgPSBfdGhpcyRwcm9wczExLmlzVmlydHVhbGl6ZWQsXG4gICAgICAgIHRleHRXcmFwID0gX3RoaXMkcHJvcHMxMS50ZXh0V3JhcCxcbiAgICAgICAgdHJ1bmNhdGlvblByb3BzID0gX3RoaXMkcHJvcHMxMS50cnVuY2F0aW9uUHJvcHMsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMxMSwgX2V4Y2x1ZGVkMyk7XG4gICAgICB2YXIgaGVpZ2h0SXNGdWxsID0gZm9yY2VkSGVpZ2h0ID09PSAnZnVsbCc7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0JywgY2xhc3NOYW1lKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciwgbnVsbCwgZnVuY3Rpb24gKHN0eWxlc01lbW9pemVyKSB7XG4gICAgICAgIHZhciBzdHlsZXMgPSBzdHlsZXNNZW1vaXplcihldWlTZWxlY3RhYmxlTGlzdFN0eWxlcyk7XG4gICAgICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVNlbGVjdGFibGVMaXN0LCBoZWlnaHRJc0Z1bGwgJiYgc3R5bGVzLmZ1bGxIZWlnaHQsIGJvcmRlcmVkICYmIHN0eWxlcy5ib3JkZXJlZF07XG4gICAgICAgIHZhciBsaXN0Q2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0X19saXN0Jywgc3R5bGVzLmV1aVNlbGVjdGFibGVMaXN0X19saXN0KTtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgICB9LCByZXN0KSwgaXNWaXJ0dWFsaXplZCA/IF90aGlzMi5yZW5kZXJWaXJ0dWFsaXplZExpc3QobGlzdENsYXNzZXMpIDogX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBsaXN0Q2xhc3NlcyxcbiAgICAgICAgICBzdHlsZTogIWhlaWdodElzRnVsbCA/IHtcbiAgICAgICAgICAgIGJsb2NrU2l6ZTogZm9yY2VkSGVpZ2h0XG4gICAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZWY6IF90aGlzMi5yZW1vdmVTY3JvbGxhYmxlVGFiU3RvcFxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKFwidWxcIiwge1xuICAgICAgICAgIHJlZjogX3RoaXMyLnNldExpc3RCb3hSZWZcbiAgICAgICAgfSwgX3RoaXMyLnN0YXRlLm9wdGlvbkFycmF5Lm1hcChmdW5jdGlvbiAoXywgaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoX3RoaXMyLkxpc3RSb3csIHtcbiAgICAgICAgICAgIGtleTogXCJcIi5jb25jYXQoaW5kZXgsIFwiLVwiKS5jb25jYXQoX3RoaXMyLmxpc3RSb3dSZXJlbmRlciksXG4gICAgICAgICAgICBkYXRhOiBfdGhpczIuc3RhdGUub3B0aW9uQXJyYXksXG4gICAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgICB9LCBudWxsKTtcbiAgICAgICAgfSkpKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlTZWxlY3RhYmxlTGlzdCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICByb3dIZWlnaHQ6IDMyLFxuICBzZWFyY2hWYWx1ZTogJycsXG4gIGlzVmlydHVhbGl6ZWQ6IHRydWVcbn0pO1xuRXVpU2VsZWN0YWJsZUxpc3QucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBUaGUgaW5kZXggb2YgdGhlIG9wdGlvbiB0byBiZSBoaWdobGlnaHRlZCBhcyBwc2V1ZG8tZm9jdXNlZDtcbiAgICAgICAqIEdvb2QgZm9yIHVzZSB3aGVuIG9ubHkgb25lIHNlbGVjdGlvbiBpcyBhbGxvd2VkIGFuZCBuZWVkaW5nIHRvIG9wZW5cbiAgICAgICAqIGRpcmVjdGx5IHRvIHRoYXQgb3B0aW9uXG4gICAgICAgKi9cbiAgYWN0aXZlT3B0aW9uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgICAgICogU2hvdyB0aGUgY2hlY2svY3Jvc3Mgc2VsZWN0aW9uIGluZGljYXRvciBpY29uc1xuICAgICAgICovXG4gIHNob3dJY29uczogUHJvcFR5cGVzLmJvb2wsXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFsd2F5c1wiXSksIFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBBbnkgcHJvcHMgdG8gc2VuZCBzcGVjaWZpY2FsbHkgdG8gdGhlIHJlYWN0LXdpbmRvdyBgRml4ZWRTaXplTGlzdGBcbiAgICAgICAqL1xuICB3aW5kb3dQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBBZGRzIGEgYm9yZGVyIGFyb3VuZCB0aGUgbGlzdCB0byBpbmRpY2F0ZSB0aGUgYm91bmRzO1xuICAgICAgICogVXNlZnVsIHdoZW4gdGhlIGxpc3Qgc2Nyb2xscywgb3RoZXJ3aXNlIHVzZSB5b3VyIG93biBjb250YWluZXJcbiAgICAgICAqL1xuICBib3JkZXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogV2hlbiBlbmFibGVkIGJ5IHNldHRpbmcgdG8gZWl0aGVyIGB0cnVlYCBvciBwYXNzaW5nIGN1c3RvbSB0ZXh0LFxuICAgICAgICogc2hvd3MgYSBob2xsb3cgYmFkZ2UgYXMgYW4gYXBwZW5kIChmYXIgcmlnaHQpIHdoZW4gdGhlIGl0ZW0gaXMgZm9jdXNlZC5cbiAgICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgd2hlbiBgdHJ1ZWAgaXMgYFx1MjFBOSB0byBzZWxlY3QvZGVzZWxlY3QvaW5jbHVkZS9leGNsdWRlYFxuICAgICAgICovXG4gIG9uRm9jdXNCYWRnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW55IHN0cmluZyBmcm9tIG91ciBpY29uIGxpYnJhcnlcbiAgICAgICAqL1xuICAgIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogVGhlIHNpZGUgb2YgdGhlIGJhZGdlIHRoZSBpY29uIHNob3VsZCBzaXRcbiAgICAgICAqL1xuICAgIGljb25TaWRlOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBlaXRoZXIgb3VyIHBhbGV0dGUgY29sb3JzIChwcmltYXJ5LCBzdWNjZXNzIC4uZXRjKSBvciBhIGhleCB2YWx1ZSBgI0ZGRkZGRmAsIGAjMDAwYC5cbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogV2lsbCBvdmVycmlkZSBhbnkgY29sb3IgcGFzc2VkIHRocm91Z2ggdGhlIGBjb2xvcmAgcHJvcC5cbiAgICAgICAqL1xuICAgIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogUHJvcHMgcGFzc2VkIHRvIHRoZSBjbG9zZSBidXR0b24uXG4gICAgICAgKi9cbiAgICBjbG9zZUJ1dHRvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIGljb24gd2l0aGluIHRoZSBiYWRnZVxuICAgICAgICovXG4gICAgaWNvbk9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBpY29uT25DbGljayBidXR0b25cbiAgICAgICAqL1xuICAgIGljb25PbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIHRoZSBiYWRnZSBpdHNlbGZcbiAgICAgICAqL1xuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBvbkNsaWNrIGJ1dHRvblxuICAgICAgICovXG4gICAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWw6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIFBhZGRpbmcgZm9yIHRoZSBsaXN0IGl0ZW1zLlxuICAgICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIEhvdyB0byBoYW5kbGUgbG9uZyB0ZXh0IHdpdGhpbiB0aGUgaXRlbS5cbiAgICAgICAqIFdyYXBwaW5nIG9ubHkgd29ya3MgaWYgdmlydHVhbGl6YXRpb24gaXMgb2ZmLlxuICAgICAgICovXG4gIHRleHRXcmFwOiBQcm9wVHlwZXMub25lT2YoW1widHJ1bmNhdGVcIiwgXCJ3cmFwXCJdKSxcbiAgLyoqXG4gICAgICAgKiBJZiB0ZXh0V3JhcCBpcyBzZXQgdG8gYHRydW5jYXRlYCwgeW91IGNhbiBwYXNzIGEgY3VzdG9tIHRydW5jYXRpb24gY29uZmlndXJhdGlvblxuICAgICAgICogdGhhdCBhY2NlcHRzIGFueSBbRXVpVGV4dFRydW5jYXRlXSgvIy91dGlsaXRpZXMvdGV4dC10cnVuY2F0aW9uKSBwcm9wIGV4Y2VwdCBmb3JcbiAgICAgICAqIGB0ZXh0YCBhbmQgYGNoaWxkcmVuYC5cbiAgICAgICAqXG4gICAgICAgKiBOb3RlOiB3aGVuIHNlYXJjaGluZywgY3VzdG9tIHRydW5jYXRpb24gcHJvcHMgYXJlIGlnbm9yZWQuIFRoZSBoaWdobGlnaHRlZCBzZWFyY2hcbiAgICAgICAqIHRleHQgd2lsbCBhbHdheXMgdGFrZSBwcmVjZWRlbmNlLlxuICAgICAgICovXG4gIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBVc2UgdmlydHVhbGl6ZWQgcmVuZGVyaW5nIGZvciBsaXN0IGl0ZW1zIHdpdGggYHJlYWN0LXdpbmRvd2AuXG4gICAgICAgKiBTZXRzIGVhY2ggcm93J3MgaGVpZ2h0IHRvIHRoZSB2YWx1ZSBvZiBgcm93SGVpZ2h0YC5cbiAgICAgICAqL1xuICBpc1ZpcnR1YWxpemVkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3RydWVdKSwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiAgVGhlIGhlaWdodCBvZiBlYWNoIG9wdGlvbiBpbiBwaXhlbHMuIERlZmF1bHRzIHRvIGAzMmAuXG4gICAgICAgKiAgSGFzIG5vIGVmZmVjdCBpZiBgaXNWaXJ0dWFsaXplZD1mYWxzZWAuXG4gICAgICAgKi9cbiAgcm93SGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICAgKiBBbGwgcG9zc2libGUgb3B0aW9uc1xuICAgICAqL1xuICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgYGJvb2xlYW5gLlxuICAgICAgICogU2V0IHRvIGB0cnVlYCB0byBpbmRpY2F0ZSBvYmplY3QgaXMganVzdCBhIGdyb3VwaW5nIGxhYmVsLCBub3QgYSBzZWxlY3RhYmxlIGl0ZW1cbiAgICAgICAqL1xuICAgIGlzR3JvdXBMYWJlbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBWaXNpYmxlIGxhYmVsIG9mIG9wdGlvbi5cbiAgICAgICAqIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBpdGVtcyBpZiBga2V5YCBpcyBub3Qgc3VwcGxpZWRcbiAgICAgICAqL1xuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWxseSBjaGFuZ2UgdGhlIHNlYXJjaGFibGUgdGVybSBieSBwYXNzaW5nIGEgZGlmZmVyZW50IHN0cmluZyBvdGhlciB0aGFuIHRoZSBgbGFiZWxgLlxuICAgICAgICogQmVzdCB1c2VkIHdoZW4gY3JlYXRpbmcgYSBjdXN0b20gYG9wdGlvblJlbmRlcmAgdG8gc2VwYXJhdGUgdGhlIGxhYmVsIGZyb20gbWV0YWRhdGEgYnV0IGFsbG93aW5nIHRvIHNlYXJjaCBvbiBib3RoXG4gICAgICAgKi9cbiAgICBzZWFyY2hhYmxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLyoqXG4gICAgICAgKiBNdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgaXRlbXMuXG4gICAgICAgKiBXaWxsIGJlIHVzZWQgdG8gbWF0Y2ggb3B0aW9ucyBpbnN0ZWFkIG9mIGBsYWJlbGBcbiAgICAgICAqL1xuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvKipcbiAgICAgICAqIExlYXZlIGB1bmRlZmluZWRgIHRvIGluZGljYXRlIG5vdCBzZWxlY3RlZC4gUGFzcyBhIHN0cmluZyBvZlxuICAgICAgICogJ29uJyB0byBpbmRpY2F0ZSBpbmNsdXNpb24sICdvZmYnIHRvIGluZGljYXRlIGV4Y2x1c2lvbixcbiAgICAgICAqIG9yICdtaXhlZCcgdG8gaW5kaWNhdGUgaW5jbHVzaW9uIGZvciBzb21lLlxuICAgICAgICovXG4gICAgY2hlY2tlZDogUHJvcFR5cGVzLmFueSxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBOb2RlIHRvIGFkZCBiZXR3ZWVuIHRoZSBzZWxlY3Rpb24gaWNvbiBhbmQgdGhlIGxhYmVsXG4gICAgICAgKi9cbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAvKipcbiAgICAgICAqIE5vZGUgdG8gYWRkIHRvIHRoZSBmYXIgcmlnaHQgb2YgdGhlIGl0ZW1cbiAgICAgICAqL1xuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgcmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbiBkYXRhIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgYHJlbmRlck9wdGlvbnNgIGVsZW1lbnQuXG4gICAgICAgKiBCeXBhc3MgYEV1aVNlbGVjdGFibGVJdGVtYCBhbmQgYXZvaWQgRE9NIGF0dHJpYnV0ZSB3YXJuaW5ncy5cbiAgICAgICAqL1xuICAgIGRhdGE6IFByb3BUeXBlcy5zaGFwZSh7fSksXG4gICAgLyoqXG4gICAgICAgKiBIb3cgdG8gaGFuZGxlIGxvbmcgdGV4dCB3aXRoaW4gdGhlIGl0ZW0uXG4gICAgICAgKiBXcmFwcGluZyBvbmx5IHdvcmtzIGlmIGBpc1ZpcnR1YWxpemF0aW9uYCBpcyBmYWxzZS5cbiAgICAgICAqIEBkZWZhdWx0ICd0cnVuY2F0ZSdcbiAgICAgICAqL1xuICAgIHRleHRXcmFwOiBQcm9wVHlwZXMub25lT2YoW1widHJ1bmNhdGVcIiwgXCJ3cmFwXCJdKSxcbiAgICAvKipcbiAgICAgICAqIElmIHRleHRXcmFwIGlzIHNldCB0byBgdHJ1bmNhdGVgLCB5b3UgY2FuIHBhc3MgYSBjdXN0b20gdHJ1bmNhdGlvbiBjb25maWd1cmF0aW9uXG4gICAgICAgKiB0aGF0IGFjY2VwdHMgYW55IFtFdWlUZXh0VHJ1bmNhdGVdKC8jL3V0aWxpdGllcy90ZXh0LXRydW5jYXRpb24pIHByb3AgZXhjZXB0IGZvclxuICAgICAgICogYHRleHRgIGFuZCBgY2hpbGRyZW5gLlxuICAgICAgICpcbiAgICAgICAqIE5vdGU6IHdoZW4gc2VhcmNoaW5nLCBjdXN0b20gdHJ1bmNhdGlvbiBwcm9wcyBhcmUgaWdub3JlZC4gVGhlIGhpZ2hsaWdodGVkIHNlYXJjaFxuICAgICAgICogdGV4dCB3aWxsIGFsd2F5cyB0YWtlIHByZWNlZGVuY2UuXG4gICAgICAgKi9cbiAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBjdXN0b20gdG9vbHRpcCBjb250ZW50IGZvciB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBwcm9wcyB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nICoqW0V1aVRvb2xUaXBdKC8jL2Rpc3BsYXkvdG9vbHRpcCkqKlxuICAgICAgICovXG4gICAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIEZpbHRlcmVkIG9wdGlvbnMgbGlzdCAoaWYgYXBwbGljYWJsZSlcbiAgICAgKi9cbiAgdmlzaWJsZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3RydWVdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWFyY2hhYmxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNoZWNrZWQ6IFByb3BUeXBlcy5hbnksXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgcmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBkYXRhOiBQcm9wVHlwZXMuc2hhcGUoe30pLFxuICAgIHRleHRXcmFwOiBQcm9wVHlwZXMub25lT2YoW1widHJ1bmNhdGVcIiwgXCJ3cmFwXCJdKSxcbiAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueVxuICB9KS5pc1JlcXVpcmVkKSxcbiAgLyoqXG4gICAgICogU2VhcmNoIHZhbHVlIHRvIGhpZ2hsaWdodCBvbiB0aGUgb3B0aW9uIHJlbmRlclxuICAgICAqL1xuICBzZWFyY2hWYWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhcnJheSBvZiBvcHRpb25zIHdpdGggYWx0ZXJlZCBjaGVja2VkIHN0YXRlLCB0aGUgY2xpY2sva2V5Ym9hcmQgZXZlbnQsXG4gICAgICogYW5kIHRoZSBvcHRpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIGNsaWNrL2tleWJvYXJkIGV2ZW50XG4gICAgICovXG4gIG9uT3B0aW9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIEN1c3RvbSByZW5kZXIgZm9yIHRoZSBsYWJlbCBwb3J0aW9uIG9mIHRoZSBvcHRpb247XG4gICAgICogVGFrZXMgKG9wdGlvbiwgc2VhcmNoVmFsdWUpLCByZXR1cm5zIFJlYWN0Tm9kZVxuICAgICAqL1xuICByZW5kZXJPcHRpb246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXggaGVpZ2h0IGluIHBpeGVscyBvciBwYXNzIGBmdWxsYCB0byBhbGxvd1xuICAgICAqIHRoZSB3aG9sZSBncm91cCB0byBmaWxsIHRoZSBoZWlnaHQgb2YgaXRzIGNvbnRhaW5lciBhbmRcbiAgICAgKiBhbGxvd3MgdGhlIGxpc3QgZ3JvdyBhcyB3ZWxsXG4gICAgICovXG4gIGhlaWdodDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW1wiZnVsbFwiXSldKSxcbiAgLyoqXG4gICAgICogQWxsb3cgY3ljbGluZyB0aHJvdWdoIHRoZSBvbiwgb2ZmIGFuZCB1bmRlZmluZWQgc3RhdGUgb2Ygb3B0aW9uLmNoZWNrZWRcbiAgICAgKiBhbmQgbm90IGp1c3Qgb24gYW5kIHVuZGVmaW5lZFxuICAgICAqL1xuICBhbGxvd0V4Y2x1c2lvbnM6IFByb3BUeXBlcy5ib29sLFxuICBzZWFyY2hhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNQcmVGaWx0ZXJlZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBoaWdobGlnaHRTZWFyY2g6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgbWFrZU9wdGlvbklkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBsaXN0SWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc2V0QWN0aXZlT3B0aW9uSW5kZXg6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiY2hlY2tlZFwiLCBcImlzRm9jdXNlZFwiLCBcInNob3dJY29uc1wiLCBcInByZXBlbmRcIiwgXCJhcHBlbmRcIiwgXCJhbGxvd0V4Y2x1c2lvbnNcIiwgXCJvbkZvY3VzQmFkZ2VcIiwgXCJwYWRkaW5nU2l6ZVwiLCBcInJvbGVcIiwgXCJzZWFyY2hhYmxlXCIsIFwidGV4dFdyYXBcIiwgXCJ0b29sVGlwQ29udGVudFwiLCBcInRvb2xUaXBQcm9wc1wiLCBcImFyaWEtZGVzY3JpYmVkYnlcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlCYWRnZSB9IGZyb20gJy4uLy4uL2JhZGdlJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi8uLi90b29sX3RpcCc7XG5pbXBvcnQgeyBldWlTZWxlY3RhYmxlTGlzdEl0ZW1TdHlsZXMgfSBmcm9tICcuL3NlbGVjdGFibGVfbGlzdF9pdGVtLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZnVuY3Rpb24gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSB7XG4gIHN3aXRjaCAoY2hlY2tlZCkge1xuICAgIGNhc2UgJ29uJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGljb246ICdjaGVjaycsXG4gICAgICAgIGNvbG9yOiAndGV4dCdcbiAgICAgIH07XG4gICAgY2FzZSAnb2ZmJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGljb246ICdjcm9zcycsXG4gICAgICAgIGNvbG9yOiAndGV4dCdcbiAgICAgIH07XG4gICAgY2FzZSAnbWl4ZWQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvbjogJ21pbnVzJyxcbiAgICAgICAgY29sb3I6ICd0ZXh0J1xuICAgICAgfTtcbiAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvbjogJ2VtcHR5J1xuICAgICAgfTtcbiAgfVxufVxuZXhwb3J0IHZhciBQQURESU5HX1NJWkVTID0gWydub25lJywgJ3MnXTtcbmV4cG9ydCB2YXIgRXVpU2VsZWN0YWJsZUxpc3RJdGVtID0gZnVuY3Rpb24gRXVpU2VsZWN0YWJsZUxpc3RJdGVtKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgY2hlY2tlZCA9IF9yZWYuY2hlY2tlZCxcbiAgICBpc0ZvY3VzZWQgPSBfcmVmLmlzRm9jdXNlZCxcbiAgICBfcmVmJHNob3dJY29ucyA9IF9yZWYuc2hvd0ljb25zLFxuICAgIHNob3dJY29ucyA9IF9yZWYkc2hvd0ljb25zID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRzaG93SWNvbnMsXG4gICAgcHJlcGVuZCA9IF9yZWYucHJlcGVuZCxcbiAgICBhcHBlbmQgPSBfcmVmLmFwcGVuZCxcbiAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfcmVmLmFsbG93RXhjbHVzaW9ucyxcbiAgICBfcmVmJG9uRm9jdXNCYWRnZSA9IF9yZWYub25Gb2N1c0JhZGdlLFxuICAgIG9uRm9jdXNCYWRnZSA9IF9yZWYkb25Gb2N1c0JhZGdlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRvbkZvY3VzQmFkZ2UsXG4gICAgX3JlZiRwYWRkaW5nU2l6ZSA9IF9yZWYucGFkZGluZ1NpemUsXG4gICAgcGFkZGluZ1NpemUgPSBfcmVmJHBhZGRpbmdTaXplID09PSB2b2lkIDAgPyAncycgOiBfcmVmJHBhZGRpbmdTaXplLFxuICAgIF9yZWYkcm9sZSA9IF9yZWYucm9sZSxcbiAgICByb2xlID0gX3JlZiRyb2xlID09PSB2b2lkIDAgPyAnb3B0aW9uJyA6IF9yZWYkcm9sZSxcbiAgICBzZWFyY2hhYmxlID0gX3JlZi5zZWFyY2hhYmxlLFxuICAgIF9yZWYkdGV4dFdyYXAgPSBfcmVmLnRleHRXcmFwLFxuICAgIHRleHRXcmFwID0gX3JlZiR0ZXh0V3JhcCA9PT0gdm9pZCAwID8gJ3RydW5jYXRlJyA6IF9yZWYkdGV4dFdyYXAsXG4gICAgdG9vbFRpcENvbnRlbnQgPSBfcmVmLnRvb2xUaXBDb250ZW50LFxuICAgIHRvb2xUaXBQcm9wcyA9IF9yZWYudG9vbFRpcFByb3BzLFxuICAgIF9hcmlhRGVzY3JpYmVkQnkgPSBfcmVmWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0SXRlbScsIHtcbiAgICAnZXVpU2VsZWN0YWJsZUxpc3RJdGVtLWlzRm9jdXNlZCc6IGlzRm9jdXNlZFxuICB9LCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpU2VsZWN0YWJsZUxpc3RJdGVtU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpU2VsZWN0YWJsZUxpc3RJdGVtLCBzdHlsZXMucGFkZGluZ1twYWRkaW5nU2l6ZV1dO1xuICB2YXIgdGV4dFN0eWxlcyA9IFtzdHlsZXMuZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0LCBzdHlsZXMudGV4dFdyYXBbdGV4dFdyYXBdXTtcbiAgdmFyIG9wdGlvbkljb24gPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2hvd0ljb25zKSB7XG4gICAgICB2YXIgX3Jlc29sdmVJY29uQW5kQ29sb3IgPSByZXNvbHZlSWNvbkFuZENvbG9yKGNoZWNrZWQpLFxuICAgICAgICBpY29uID0gX3Jlc29sdmVJY29uQW5kQ29sb3IuaWNvbixcbiAgICAgICAgY29sb3IgPSBfcmVzb2x2ZUljb25BbmRDb2xvci5jb2xvcjtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgY3NzOiBzdHlsZXMuZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19pY29uLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19pY29uXCIsXG4gICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgdHlwZTogaWNvblxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbc2hvd0ljb25zLCBjaGVja2VkLCBzdHlsZXNdKTtcbiAgdmFyIHByZXBlbmROb2RlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHByZXBlbmQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNzczogc3R5bGVzLmV1aVNlbGVjdGFibGVMaXN0SXRlbV9fcHJlcGVuZCxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fcHJlcGVuZFwiXG4gICAgICB9LCBwcmVwZW5kKTtcbiAgICB9XG4gIH0sIFtwcmVwZW5kLCBzdHlsZXNdKTtcbiAgdmFyIG9uRm9jdXNCYWRnZU5vZGUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZGVmYXVsdE9uRm9jdXNCYWRnZVByb3BzID0ge1xuICAgICAgJ2FyaWEtaGlkZGVuJzogdHJ1ZSxcbiAgICAgIGljb25UeXBlOiAncmV0dXJuS2V5JyxcbiAgICAgIGljb25TaWRlOiAnbGVmdCcsXG4gICAgICBjb2xvcjogJ2hvbGxvdydcbiAgICB9O1xuICAgIGlmIChvbkZvY3VzQmFkZ2UgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX29uRm9jdXNCYWRnZVwiXG4gICAgICB9LCBkZWZhdWx0T25Gb2N1c0JhZGdlUHJvcHMpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvbkZvY3VzQmFkZ2UgIT09ICdib29sZWFuJyAmJiAhIW9uRm9jdXNCYWRnZSkge1xuICAgICAgdmFyIF9jaGlsZHJlbiA9IG9uRm9jdXNCYWRnZS5jaGlsZHJlbixcbiAgICAgICAgX2NsYXNzTmFtZSA9IG9uRm9jdXNCYWRnZS5jbGFzc05hbWUsXG4gICAgICAgIHJlc3RCYWRnZVByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9uRm9jdXNCYWRnZSwgX2V4Y2x1ZGVkMik7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0SXRlbV9fb25Gb2N1c0JhZGdlJywgX2NsYXNzTmFtZSlcbiAgICAgIH0sIGRlZmF1bHRPbkZvY3VzQmFkZ2VQcm9wcywgcmVzdEJhZGdlUHJvcHMpLCBfY2hpbGRyZW4pO1xuICAgIH1cbiAgfSwgW29uRm9jdXNCYWRnZV0pO1xuICB2YXIgc2hvd09uRm9jdXNCYWRnZSA9ICEhKGlzRm9jdXNlZCAmJiAhZGlzYWJsZWQgJiYgb25Gb2N1c0JhZGdlTm9kZSk7XG4gIHZhciBhcHBlbmROb2RlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGFwcGVuZCB8fCBzaG93T25Gb2N1c0JhZGdlKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjc3M6IHN0eWxlcy5ldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2FwcGVuZCxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fYXBwZW5kXCJcbiAgICAgIH0sIGFwcGVuZCwgXCIgXCIsIHNob3dPbkZvY3VzQmFkZ2UgPyBvbkZvY3VzQmFkZ2VOb2RlIDogbnVsbCk7XG4gICAgfVxuICB9LCBbYXBwZW5kLCBzaG93T25Gb2N1c0JhZGdlLCBvbkZvY3VzQmFkZ2VOb2RlLCBzdHlsZXNdKTtcbiAgdmFyIHNjcmVlblJlYWRlclRleHQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgdmFyIGluc3RydWN0aW9ucztcbiAgICB2YXIgc2NyZWVuUmVhZGVyU3RyaW5ncyA9IHtcbiAgICAgIGNoZWNrZWQ6IHtcbiAgICAgICAgc3RhdGU6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5jaGVja2VkT3B0aW9uXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJDaGVja2VkIG9wdGlvbi5cIlxuICAgICAgICB9KSxcbiAgICAgICAgaW5zdHJ1Y3Rpb25zOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uY2hlY2tPcHRpb25JbnN0cnVjdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRvIGNoZWNrIHRoaXMgb3B0aW9uLCBwcmVzcyBFbnRlci5cIlxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIHVuY2hlY2tlZDoge1xuICAgICAgICBpbnN0cnVjdGlvbnM6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS51bmNoZWNrT3B0aW9uSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUbyB1bmNoZWNrIHRoaXMgb3B0aW9uLCBwcmVzcyBFbnRlci5cIlxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIGV4Y2x1ZGVkOiB7XG4gICAgICAgIHN0YXRlOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uZXhjbHVkZWRPcHRpb25cIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkV4Y2x1ZGVkIG9wdGlvbi5cIlxuICAgICAgICB9KSxcbiAgICAgICAgaW5zdHJ1Y3Rpb25zOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uZXhjbHVkZU9wdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gZXhjbHVkZSB0aGlzIG9wdGlvbiwgcHJlc3MgRW50ZXIuXCJcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICBtaXhlZDoge1xuICAgICAgICBzdGF0ZTogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLm1peGVkT3B0aW9uXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJNaXhlZCAoaW5kZXRlcm1pbmF0ZSkgb3B0aW9uLlwiXG4gICAgICAgIH0pLFxuICAgICAgICBpbnN0cnVjdGlvbnM6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5taXhlZE9wdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gY2hlY2sgdGhpcyBvcHRpb24gZm9yIGFsbCwgcHJlc3MgRW50ZXIgb25jZS5cIlxuICAgICAgICB9KSxcbiAgICAgICAgdW5jaGVja0luc3RydWN0aW9uczogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLm1peGVkT3B0aW9uVW5jaGVja0luc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gdW5jaGVjayB0aGlzIG9wdGlvbiBmb3IgYWxsLCBwcmVzcyBFbnRlciB0d2ljZS5cIlxuICAgICAgICB9KSxcbiAgICAgICAgZXhjbHVkZUluc3RydWN0aW9uczogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLm1peGVkT3B0aW9uRXhjbHVkZUluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gZXhjbHVkZSB0aGlzIG9wdGlvbiBmb3IgYWxsLCBwcmVzcyBFbnRlciB0d2ljZS5cIlxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH07XG4gICAgc3dpdGNoIChjaGVja2VkKSB7XG4gICAgICBjYXNlICdvbic6XG4gICAgICAgIHN0YXRlID0gc2NyZWVuUmVhZGVyU3RyaW5ncy5jaGVja2VkLnN0YXRlO1xuICAgICAgICBpbnN0cnVjdGlvbnMgPSBhbGxvd0V4Y2x1c2lvbnMgPyBzY3JlZW5SZWFkZXJTdHJpbmdzLmV4Y2x1ZGVkLmluc3RydWN0aW9ucyA6IHNlYXJjaGFibGUgPyBzY3JlZW5SZWFkZXJTdHJpbmdzLnVuY2hlY2tlZC5pbnN0cnVjdGlvbnMgOiB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb2ZmJzpcbiAgICAgICAgc3RhdGUgPSBzY3JlZW5SZWFkZXJTdHJpbmdzLmV4Y2x1ZGVkLnN0YXRlO1xuICAgICAgICBpbnN0cnVjdGlvbnMgPSBzY3JlZW5SZWFkZXJTdHJpbmdzLnVuY2hlY2tlZC5pbnN0cnVjdGlvbnM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWl4ZWQnOlxuICAgICAgICBzdGF0ZSA9IHNjcmVlblJlYWRlclN0cmluZ3MubWl4ZWQuc3RhdGU7XG4gICAgICAgIGluc3RydWN0aW9ucyA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHNjcmVlblJlYWRlclN0cmluZ3MubWl4ZWQuaW5zdHJ1Y3Rpb25zLCAnICcsIGFsbG93RXhjbHVzaW9ucyA/IHNjcmVlblJlYWRlclN0cmluZ3MubWl4ZWQuZXhjbHVkZUluc3RydWN0aW9ucyA6IHNjcmVlblJlYWRlclN0cmluZ3MubWl4ZWQudW5jaGVja0luc3RydWN0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpbnN0cnVjdGlvbnMgPSBhbGxvd0V4Y2x1c2lvbnMgfHwgc2VhcmNoYWJsZSA/IHNjcmVlblJlYWRlclN0cmluZ3MuY2hlY2tlZC5pbnN0cnVjdGlvbnMgOiB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUgfHwgaW5zdHJ1Y3Rpb25zID8gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIG51bGwsIHN0YXRlIHx8IGluc3RydWN0aW9ucyA/ICcuICcgOiBudWxsLCBzdGF0ZSwgc3RhdGUgJiYgaW5zdHJ1Y3Rpb25zID8gJyAnIDogbnVsbCwgaW5zdHJ1Y3Rpb25zKSkgOiBudWxsO1xuICB9LCBbY2hlY2tlZCwgc2VhcmNoYWJsZSwgYWxsb3dFeGNsdXNpb25zXSk7XG5cbiAgLy8gYXJpYS1jaGVja2VkIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCByb2xlPVwiY2hlY2tib3hcIiBidXRcbiAgLy8gdGhlIE1ETiBkb2N1bWVudGF0aW9uIGxpc3RzIGl0IGFzIGEgcG9zc2liaWxpdHkgZm9yIHJvbGU9XCJvcHRpb25cIi5cbiAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FjY2Vzc2liaWxpdHkvQVJJQS9BdHRyaWJ1dGVzL2FyaWEtY2hlY2tlZFxuICAvLyBhbmQgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQWNjZXNzaWJpbGl0eS9BUklBL1JvbGVzL29wdGlvbl9yb2xlXG4gIHZhciBhcmlhQ2hlY2tlZCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciByb2xlc1RoYXRDYW5CZU1peGVkID0gWydvcHRpb24nLCAnY2hlY2tib3gnLCAnbWVudWl0ZW1jaGVja2JveCddO1xuICAgIHZhciByb2xlc1RoYXRDYW5CZUNoZWNrZWQgPSBbXS5jb25jYXQocm9sZXNUaGF0Q2FuQmVNaXhlZCwgWydyYWRpbycsICdtZW51aXRlbXJhZGlvJywgJ3N3aXRjaCddKTtcbiAgICBpZiAoIXJvbGVzVGhhdENhbkJlQ2hlY2tlZC5pbmNsdWRlcyhyb2xlKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBzd2l0Y2ggKGNoZWNrZWQpIHtcbiAgICAgIGNhc2UgJ29uJzpcbiAgICAgIGNhc2UgJ29mZic6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnbWl4ZWQnOlxuICAgICAgICBpZiAocm9sZXNUaGF0Q2FuQmVNaXhlZC5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiAnbWl4ZWQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSwgW3JvbGUsIGNoZWNrZWRdKTtcbiAgdmFyIGhhc1Rvb2xUaXAgPSAhIXRvb2xUaXBDb250ZW50ICYmICFkaXNhYmxlZDtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG51bGwpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHRvb2x0aXBSZWYgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldFRvb2x0aXBSZWYgPSBfdXNlU3RhdGUyWzFdOyAvLyBOZWVkcyB0byBiZSBzdGF0ZSBhbmQgbm90IGEgcmVmIHRvIHRyaWdnZXIgdXNlRWZmZWN0XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUoX2FyaWFEZXNjcmliZWRCeSksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIGFyaWFEZXNjcmliZWRCeSA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0QXJpYURlc2NyaWJlZEJ5ID0gX3VzZVN0YXRlNFsxXTtcblxuICAvLyBNYW51YWxseSB0cmlnZ2VyIHRoZSB0b29sdGlwIG9uIGtleWJvYXJkIGZvY3VzXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0b29sdGlwUmVmKSByZXR1cm47XG4gICAgaWYgKGlzRm9jdXNlZCkge1xuICAgICAgdG9vbHRpcFJlZi5zaG93VG9vbFRpcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b29sdGlwUmVmLmhpZGVUb29sVGlwKCk7XG4gICAgfVxuICB9LCBbaXNGb2N1c2VkLCB0b29sdGlwUmVmXSk7XG5cbiAgLy8gTWFudWFsbHkgc2V0IHRoZSBgYXJpYS1kZXNjcmliZWRieWAgaWQgb24gdGhlIDxsaT4gd3JhcHBlclxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICh0b29sdGlwUmVmKSB7XG4gICAgICB2YXIgdG9vbHRpcElkID0gdG9vbHRpcFJlZi5zdGF0ZS5pZDtcbiAgICAgIHNldEFyaWFEZXNjcmliZWRCeShjbGFzc05hbWVzKHRvb2x0aXBJZCwgX2FyaWFEZXNjcmliZWRCeSkpO1xuICAgIH1cbiAgfSwgW3Rvb2x0aXBSZWYsIF9hcmlhRGVzY3JpYmVkQnldKTtcbiAgdmFyIGNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY3NzOiBzdHlsZXMuZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19jb250ZW50LFxuICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2NvbnRlbnRcIlxuICB9LCBvcHRpb25JY29uLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNzczogdGV4dFN0eWxlcyxcbiAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0XCJcbiAgfSwgY2hpbGRyZW4sIHNjcmVlblJlYWRlclRleHQpLCBhcHBlbmROb2RlKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsaVwiLCBfZXh0ZW5kcyh7XG4gICAgcm9sZTogcm9sZSxcbiAgICBcImFyaWEtZGlzYWJsZWRcIjogZGlzYWJsZWQsXG4gICAgXCJhcmlhLWNoZWNrZWRcIjogYXJpYUNoZWNrZWQgLy8gV2hldGhlciB0aGUgaXRlbSBpcyBcImNoZWNrZWRcIlxuICAgICxcbiAgICBcImFyaWEtc2VsZWN0ZWRcIjogIWRpc2FibGVkICYmIGlzRm9jdXNlZCAvLyBXaGV0aGVyIHRoZSBpdGVtIGhhcyBrZXlib2FyZCBmb2N1cyBwZXIgVzMgc3BlY1xuICAgICxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCwge1xuICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkQnlcbiAgfSksIGhhc1Rvb2xUaXAgPyBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIF9leHRlbmRzKHtcbiAgICByZWY6IHNldFRvb2x0aXBSZWYsXG4gICAgY29udGVudDogdG9vbFRpcENvbnRlbnQsXG4gICAgYW5jaG9yQ2xhc3NOYW1lOiBcImV1aS1mdWxsV2lkdGhcIixcbiAgICBwb3NpdGlvbjogXCJsZWZ0XCJcbiAgfSwgdG9vbFRpcFByb3BzKSwgY29udGVudCkgOiBjb250ZW50KTtcbn07XG5FdWlTZWxlY3RhYmxlTGlzdEl0ZW0ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgICAqIEFwcGxpZXMgYW4gaWNvbiBhbmQgdmlzdWFsIHN0eWxpbmcgdG8gYWN0aXZhdGVkIGl0ZW1zXG4gICAgICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBTaG93cyBpY29ucyBiYXNlZCBvbiBgY2hlY2tlZGAgdHlwZVxuICAgICAgICovXG4gIHNob3dJY29uczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogSGlnaGxpZ2h0cyB0aGUgaXRlbSBmb3IgcHNldWRvIGZvY3VzXG4gICAgICAgKi9cbiAgaXNGb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgYWxsb3dFeGNsdXNpb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBXaGVuIGVuYWJsZWQgYnkgc2V0dGluZyB0byBlaXRoZXIgYHRydWVgIG9yIHBhc3NpbmcgY3VzdG9tIGEgY3VzdG9tIGJhZGdlLFxuICAgICAgICogc2hvd3MgYSBob2xsb3cgYmFkZ2UgYXMgYW4gYXBwZW5kIChmYXIgcmlnaHQpIHdoZW4gdGhlIGl0ZW0gaXMgZm9jdXNlZC5cbiAgICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgd2hlbiBgdHJ1ZWAgaXMgYFx1MjFBOSB0byBzZWxlY3QvZGVzZWxlY3QvaW5jbHVkZS9leGNsdWRlYFxuICAgICAgICovXG4gIG9uRm9jdXNCYWRnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW55IHN0cmluZyBmcm9tIG91ciBpY29uIGxpYnJhcnlcbiAgICAgICAqL1xuICAgIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogVGhlIHNpZGUgb2YgdGhlIGJhZGdlIHRoZSBpY29uIHNob3VsZCBzaXRcbiAgICAgICAqL1xuICAgIGljb25TaWRlOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBlaXRoZXIgb3VyIHBhbGV0dGUgY29sb3JzIChwcmltYXJ5LCBzdWNjZXNzIC4uZXRjKSBvciBhIGhleCB2YWx1ZSBgI0ZGRkZGRmAsIGAjMDAwYC5cbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogV2lsbCBvdmVycmlkZSBhbnkgY29sb3IgcGFzc2VkIHRocm91Z2ggdGhlIGBjb2xvcmAgcHJvcC5cbiAgICAgICAqL1xuICAgIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogUHJvcHMgcGFzc2VkIHRvIHRoZSBjbG9zZSBidXR0b24uXG4gICAgICAgKi9cbiAgICBjbG9zZUJ1dHRvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIGljb24gd2l0aGluIHRoZSBiYWRnZVxuICAgICAgICovXG4gICAgaWNvbk9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBpY29uT25DbGljayBidXR0b25cbiAgICAgICAqL1xuICAgIGljb25PbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIHRoZSBiYWRnZSBpdHNlbGZcbiAgICAgICAqL1xuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBvbkNsaWNrIGJ1dHRvblxuICAgICAgICovXG4gICAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWw6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIFBhZGRpbmcgZm9yIHRoZSBsaXN0IGl0ZW1zLlxuICAgICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFdoZXRoZXIgdGhlIGBFdWlTZWxlY3RhYmxlYCBpbnN0YW5jZSBpcyBzZWFyY2hhYmxlLlxuICAgICAgICogV2hlbiB0cnVlLCB0aGUgU3BhY2Uga2V5IHdpbGwgbm90IHRvZ2dsZSBzZWxlY3Rpb24sIGFzIGl0IHdpbGwgdHlwZSBpbnRvIHRoZSBzZWFyY2ggYm94IGluc3RlYWQuIFNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zIHdpbGwgYmUgYWRkZWQgaW5zdHJ1Y3RpbmcgdXNlcnMgdG8gdXNlIHRoZSBFbnRlciBrZXkgdG8gc2VsZWN0IGl0ZW1zLlxuICAgICAgICogV2hlbiBmYWxzZSwgdGhlIFNwYWNlIGtleSB3aWxsIHRvZ2dsZSBpdGVtIHNlbGVjdGlvbi4gTm8gZXh0cmEgc2NyZWVuIHJlYWRlciBpbnN0cnVjdGlvbnMgd2lsbCBiZSBhZGRlZCwgYXMgU3BhY2UgdG8gdG9nZ2xlIGlzIGEgZ2VuZXJhbGx5IHN0YW5kYXJkIGZvciBtb3N0IHNlbGVjdC9jaGVja2VkIGVsZW1lbnRzLlxuICAgICAgICovXG4gIHNlYXJjaGFibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIEF0dHJpYnV0ZSBhcHBsaWVkIHRoZSBvcHRpb24gYDxsaT5gLlxuICAgICAgICogSWYgc2V0IHRvIGEgcm9sZSB0aGF0IGFsbG93cyBbYXJpYS1jaGVja2VkXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BY2Nlc3NpYmlsaXR5L0FSSUEvQXR0cmlidXRlcy9hcmlhLWNoZWNrZWQpLFxuICAgICAgICogYGFyaWEtY2hlY2tlZGAgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZWQuXG4gICAgICAgKi9cbiAgcm9sZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBIb3cgdG8gaGFuZGxlIGxvbmcgdGV4dCB3aXRoaW4gdGhlIGl0ZW0uXG4gICAgICAgKiBXcmFwcGluZyBvbmx5IHdvcmtzIGlmIHZpcnR1YWxpemF0aW9uIGlzIG9mZi5cbiAgICAgICAqL1xuICB0ZXh0V3JhcDogUHJvcFR5cGVzLm9uZU9mKFtcInRydW5jYXRlXCIsIFwid3JhcFwiXSksXG4gIC8qKlxuICAgICAgICogT3B0aW9uYWwgY3VzdG9tIHRvb2x0aXAgY29udGVudCBmb3IgdGhlIGJ1dHRvblxuICAgICAgICovXG4gIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBwcm9wcyB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nICoqW0V1aVRvb2xUaXBdKC8jL2Rpc3BsYXkvdG9vbHRpcCkqKlxuICAgICAgICovXG4gIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSwgZXVpVGV4dFRydW5jYXRlLCBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlTZWxlY3RhYmxlTGlzdEl0ZW1WYXJpYWJsZXMgPSBmdW5jdGlvbiBldWlTZWxlY3RhYmxlTGlzdEl0ZW1WYXJpYWJsZXMoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHZhciBsaWdodGVyQm9yZGVyID0gdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuYm9yZGVyLmNvbG9yLCAwLjQpO1xuICByZXR1cm4ge1xuICAgIGJvcmRlcjogXCJcIi5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIFwiKS5jb25jYXQobGlnaHRlckJvcmRlciksXG4gICAgcGFkZGluZ0hvcml6b250YWw6IGV1aVRoZW1lLnNpemUubSxcbiAgICBwYWRkaW5nVmVydGljYWw6IGV1aVRoZW1lLnNpemUueHNcbiAgfTtcbn07XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxcm5lbnJ0LWV1aVNlbGVjdGFibGVMaXN0SXRlbV9fdGV4dFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6ZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0O1wiXG59IDoge1xuICBuYW1lOiBcIjFybmVucnQtZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDpldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3RleHQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpU2VsZWN0YWJsZUxpc3RJdGVtU3R5bGVzID0gZnVuY3Rpb24gZXVpU2VsZWN0YWJsZUxpc3RJdGVtU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBfZXVpU2VsZWN0YWJsZUxpc3RJdGUgPSBldWlTZWxlY3RhYmxlTGlzdEl0ZW1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBib3JkZXIgPSBfZXVpU2VsZWN0YWJsZUxpc3RJdGUuYm9yZGVyLFxuICAgIHBhZGRpbmdIb3Jpem9udGFsID0gX2V1aVNlbGVjdGFibGVMaXN0SXRlLnBhZGRpbmdIb3Jpem9udGFsLFxuICAgIHBhZGRpbmdWZXJ0aWNhbCA9IF9ldWlTZWxlY3RhYmxlTGlzdEl0ZS5wYWRkaW5nVmVydGljYWw7XG4gIHJldHVybiB7XG4gICAgZXVpU2VsZWN0YWJsZUxpc3RJdGVtOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTppbmxpbmUtZmxleDtcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiBsaW5lLWhlaWdodDpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAnbScpLmxpbmVIZWlnaHQsIFwiO2ZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLmZvbnRTaXplLCBcIjt0ZXh0LWFsaWduOnN0YXJ0O2N1cnNvcjpwb2ludGVyO292ZXJmbG93OmhpZGRlbjsmOm5vdCg6bGFzdC1vZi10eXBlKXtcIiwgbG9naWNhbENTUygnYm9yZGVyLWJvdHRvbScsIGJvcmRlciksIFwiO30mW2FyaWEtZGlzYWJsZWQ9J3RydWUnXXtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRpc2FibGVkVGV4dCwgXCI7Y3Vyc29yOm5vdC1hbGxvd2VkO30mOmhvdmVyLCYuZXVpU2VsZWN0YWJsZUxpc3RJdGVtLWlzRm9jdXNlZHsmOm5vdChbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddKXtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnlUZXh0LCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUaGVtZS5mb2N1cy5iYWNrZ3JvdW5kQ29sb3IsIFwiOy5ldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3RleHR7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9fX07bGFiZWw6ZXVpU2VsZWN0YWJsZUxpc3RJdGVtO1wiKSxcbiAgICBwYWRkaW5nOiB7XG4gICAgICBub25lOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOm5vbmU7XCIpLFxuICAgICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdwYWRkaW5nLXZlcnRpY2FsJywgcGFkZGluZ1ZlcnRpY2FsKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIHBhZGRpbmdIb3Jpem9udGFsKSwgXCI7O2xhYmVsOnM7XCIpXG4gICAgfSxcbiAgICAvLyBDaGlsZCBlbGVtZW50c1xuXG4gICAgZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19jb250ZW50OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjs7bGFiZWw6ZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19jb250ZW50O1wiKSxcbiAgICBldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3RleHQ6IF9yZWYsXG4gICAgdGV4dFdyYXA6IHtcbiAgICAgIHRydW5jYXRlOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHRUcnVuY2F0ZSgpLCBcIjtsYWJlbDp0cnVuY2F0ZTtcIiksXG4gICAgICB3cmFwOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOndyYXA7XCIpXG4gICAgfSxcbiAgICBldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3ByZXBlbmQ6IC8qI19fUFVSRV9fKi9jc3MoXCJmbGV4LXNocmluazowO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tcmlnaHQnLCBwYWRkaW5nSG9yaXpvbnRhbCksIFwiOztsYWJlbDpldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3ByZXBlbmQ7XCIpLFxuICAgIGV1aVNlbGVjdGFibGVMaXN0SXRlbV9fYXBwZW5kOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1zaHJpbms6MDtcIiwgbG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCBwYWRkaW5nSG9yaXpvbnRhbCksIFwiOztsYWJlbDpldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2FwcGVuZDtcIiksXG4gICAgZ2V0IGV1aVNlbGVjdGFibGVMaXN0SXRlbV9faWNvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmV1aVNlbGVjdGFibGVMaXN0SXRlbV9fcHJlcGVuZDtcbiAgICB9XG4gIH07XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG4vLyAuZXVpU2VsZWN0YWJsZUxpc3RfX2xpc3QgcmVxdWlyZXMgYSBzdGF0aWMgdmFuaWxsYSBjbGFzc05hbWVcbi8vIGFzIGl0J3MgcGFzc2VkIGRvd24gdG8gcmVhY3Qtd2luZG93J3MgdmlydHVhbGl6YXRpb24gbGlicmFyeVxuaW1wb3J0IHsgY3NzIGFzIGNsYXNzTmFtZUNzcyB9IGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGV1aVlTY3JvbGxXaXRoU2hhZG93cywgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVRpdGxlIH0gZnJvbSAnLi4vLi4vdGl0bGUvdGl0bGUuc3R5bGVzJztcbmltcG9ydCB7IGV1aVNlbGVjdGFibGVMaXN0SXRlbVZhcmlhYmxlcyB9IGZyb20gJy4vc2VsZWN0YWJsZV9saXN0X2l0ZW0uc3R5bGVzJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFnaXU4ajUtZnVsbEhlaWdodFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6ZnVsbEhlaWdodDtcIlxufSA6IHtcbiAgbmFtZTogXCIxZ2l1OGo1LWZ1bGxIZWlnaHRcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOmZ1bGxIZWlnaHQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpU2VsZWN0YWJsZUxpc3RTdHlsZXMgPSBmdW5jdGlvbiBldWlTZWxlY3RhYmxlTGlzdFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgaXRlbVZhcnMgPSBldWlTZWxlY3RhYmxlTGlzdEl0ZW1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIHtcbiAgICBldWlTZWxlY3RhYmxlTGlzdDogLyojX19QVVJFX18qL2NzcyhcIiY6aGFzKDpmb2N1cy12aXNpYmxlKXtcIiwgZXVpRm9jdXNSaW5nKGV1aVRoZW1lQ29udGV4dCwgJ291dHNldCcpLCBcIjt9O2xhYmVsOmV1aVNlbGVjdGFibGVMaXN0O1wiKSxcbiAgICBmdWxsSGVpZ2h0OiBfcmVmLFxuICAgIGJvcmRlcmVkOiAvKiNfX1BVUkVfXyovY3NzKFwib3ZlcmZsb3c6aGlkZGVuO2JvcmRlcjpcIiwgZXVpVGhlbWUuYm9yZGVyLnRoaW4sIFwiO2JvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBcIjs7bGFiZWw6Ym9yZGVyZWQ7XCIpLFxuICAgIGV1aVNlbGVjdGFibGVMaXN0X19saXN0OiAvKiNfX1BVUkVfXyovY2xhc3NOYW1lQ3NzKGV1aVlTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZUNvbnRleHQpLCBcIiAmOmZvY3VzLCY+dWw6Zm9jdXN7b3V0bGluZTpub25lO307bGFiZWw6ZXVpU2VsZWN0YWJsZUxpc3RfX2xpc3Q7XCIpLFxuICAgIGV1aVNlbGVjdGFibGVMaXN0X19ncm91cExhYmVsOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4eHMnKSwgXCIgZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtcIiwgbG9naWNhbENTUygnYm9yZGVyLWJvdHRvbScsIGl0ZW1WYXJzLmJvcmRlciksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLXZlcnRpY2FsJywgaXRlbVZhcnMucGFkZGluZ1ZlcnRpY2FsKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGl0ZW1WYXJzLnBhZGRpbmdIb3Jpem9udGFsKSwgXCI7O2xhYmVsOmV1aVNlbGVjdGFibGVMaXN0X19ncm91cExhYmVsO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpU2VsZWN0YWJsZVN0eWxlcyA9IHtcbiAgZXVpU2VsZWN0YWJsZTogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgIG5hbWU6IFwiMXNkMHF2LWV1aVNlbGVjdGFibGVcIixcbiAgICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsYWJlbDpldWlTZWxlY3RhYmxlO1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCIxc2QwcXYtZXVpU2VsZWN0YWJsZVwiLFxuICAgIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2xhYmVsOmV1aVNlbGVjdGFibGU7XCIsXG4gICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gIH0sXG4gIGZ1bGxIZWlnaHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnaGVpZ2h0JywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxIZWlnaHQ7XCIpXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wcmVzc2VkXCIsIFwidGFibGVMYXlvdXRcIiwgXCJyZXNwb25zaXZlQnJlYWtwb2ludFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VJc0V1aVRhYmxlUmVzcG9uc2l2ZSwgRXVpVGFibGVJc1Jlc3BvbnNpdmVDb250ZXh0IH0gZnJvbSAnLi9tb2JpbGUvcmVzcG9uc2l2ZV9jb250ZXh0JztcbmltcG9ydCB7IGV1aVRhYmxlU3R5bGVzIH0gZnJvbSAnLi90YWJsZS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGUgPSBmdW5jdGlvbiBFdWlUYWJsZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICBfcmVmJHRhYmxlTGF5b3V0ID0gX3JlZi50YWJsZUxheW91dCxcbiAgICB0YWJsZUxheW91dCA9IF9yZWYkdGFibGVMYXlvdXQgPT09IHZvaWQgMCA/ICdmaXhlZCcgOiBfcmVmJHRhYmxlTGF5b3V0LFxuICAgIHJlc3BvbnNpdmVCcmVha3BvaW50ID0gX3JlZi5yZXNwb25zaXZlQnJlYWtwb2ludCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSB1c2VJc0V1aVRhYmxlUmVzcG9uc2l2ZShyZXNwb25zaXZlQnJlYWtwb2ludCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGUnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFibGVTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUYWJsZSwgc3R5bGVzLmxheW91dFt0YWJsZUxheW91dF0sICghY29tcHJlc3NlZCB8fCBpc1Jlc3BvbnNpdmUpICYmIHN0eWxlcy51bmNvbXByZXNzZWQsIGNvbXByZXNzZWQgJiYgIWlzUmVzcG9uc2l2ZSAmJiBzdHlsZXMuY29tcHJlc3NlZCwgaXNSZXNwb25zaXZlID8gc3R5bGVzLm1vYmlsZSA6IHN0eWxlcy5kZXNrdG9wXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0YWJsZVwiLCBfZXh0ZW5kcyh7XG4gICAgdGFiSW5kZXg6IC0xLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlUYWJsZUlzUmVzcG9uc2l2ZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogaXNSZXNwb25zaXZlXG4gIH0sIGNoaWxkcmVuKSk7XG59O1xuRXVpVGFibGUucHJvcFR5cGVzID0ge1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogTmFtZWQgYnJlYWtwb2ludC4gQmVsb3cgdGhpcyBzaXplLCB0aGUgdGFibGUgd2lsbCBjb2xsYXBzZVxuICAgICAqIGludG8gcmVzcG9uc2l2ZSBjYXJkcy5cbiAgICAgKlxuICAgICAqIFBhc3MgYGZhbHNlYCB0byBuZXZlciBjb2xsYXBzZSB0byBhIG1vYmlsZSB2aWV3LCBvciBpbnZlcnNlbHksXG4gICAgICogYHRydWVgIHRvIGFsd2F5cyByZW5kZXIgbW9iaWxlLWZyaWVuZGx5IGNhcmRzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgbVxuICAgICAqL1xuICByZXNwb25zaXZlQnJlYWtwb2ludDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIHRhYmxlLWxheW91dCBDU1MgcHJvcGVydHlcbiAgICAgKi9cbiAgdGFibGVMYXlvdXQ6IFByb3BUeXBlcy5vbmVPZihbXCJmaXhlZFwiLCBcImF1dG9cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUlzV2l0aGluTWluQnJlYWtwb2ludCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUNvbXBvbmVudERlZmF1bHRzIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXIvY29tcG9uZW50X2RlZmF1bHRzJztcbmV4cG9ydCB2YXIgREVGQVVMVF9UQUJMRV9CUkVBS1BPSU5UID0gJ20nO1xuXG4vKipcbiAqIFVzZWQgYnkgcGFyZW50L3RvcC1sZXZlbCB0YWJsZSBjb21wb25lbnRzIHRvIGRldGVybWluZSBpc1Jlc3BvbnNpdmUgc3RhdGVcbiAqIGJhc2VkIG9uIHRoZSBwYXNzZWQgYnJlYWtwb2ludFxuICovXG5leHBvcnQgdmFyIHVzZUlzRXVpVGFibGVSZXNwb25zaXZlID0gZnVuY3Rpb24gdXNlSXNFdWlUYWJsZVJlc3BvbnNpdmUoY29tcG9uZW50UHJvcCkge1xuICB2YXIgX3VzZUNvbXBvbmVudERlZmF1bHRzLCBfcmVmO1xuICB2YXIgY29tcG9uZW50RGVmYXVsdCA9IChfdXNlQ29tcG9uZW50RGVmYXVsdHMgPSB1c2VDb21wb25lbnREZWZhdWx0cygpLkV1aVRhYmxlKSA9PT0gbnVsbCB8fCBfdXNlQ29tcG9uZW50RGVmYXVsdHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF91c2VDb21wb25lbnREZWZhdWx0cy5yZXNwb25zaXZlQnJlYWtwb2ludDtcbiAgdmFyIGJyZWFrcG9pbnQgPSAoX3JlZiA9IGNvbXBvbmVudFByb3AgIT09IG51bGwgJiYgY29tcG9uZW50UHJvcCAhPT0gdm9pZCAwID8gY29tcG9uZW50UHJvcCA6IGNvbXBvbmVudERlZmF1bHQpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBERUZBVUxUX1RBQkxFX0JSRUFLUE9JTlQ7XG4gIHZhciBpc0Jvb2xlYW4gPSB0eXBlb2YgYnJlYWtwb2ludCA9PT0gJ2Jvb2xlYW4nO1xuXG4gIC8vIE5vdGU6IHdlJ3JlIHVzaW5nIGAhdXNlSXNXaXRoaW5NaW5CcmVha3BvaW50YCBoZXJlIGluc3RlYWQgb2YgYHVzZUlzV2l0aGluTWF4QnJlYWtwb2ludGBcbiAgLy8gYmVjYXVzZSBpdCBtb3JlIGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIHNpbmdsZSBicmVha3BvaW50IGF0IHdoaWNoIHRhYmxlcyBjb2xsYXBzZVxuICB2YXIgaXNSZXNwb25zaXZlID0gIXVzZUlzV2l0aGluTWluQnJlYWtwb2ludChpc0Jvb2xlYW4gPyAnJyA6IGJyZWFrcG9pbnQpO1xuICByZXR1cm4gaXNCb29sZWFuID8gYnJlYWtwb2ludCA6IGlzUmVzcG9uc2l2ZTtcbn07XG5cbi8qKlxuICogQ29udGV4dCBzZXQgYnkgcGFyZW50IHRhYmxlIGNvbXBvbmVudHNcbiAqIEhvb2sgdXNlZCBieSBjZWxscyB0byBmZXRjaCBwYXJlbnQgaXNSZXNwb25zaXZlIHN0YXRlXG4gKi9cbmV4cG9ydCB2YXIgRXVpVGFibGVJc1Jlc3BvbnNpdmVDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoZmFsc2UpO1xuZXhwb3J0IHZhciB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSA9IGZ1bmN0aW9uIHVzZUV1aVRhYmxlSXNSZXNwb25zaXZlKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChFdWlUYWJsZUlzUmVzcG9uc2l2ZUNvbnRleHQpO1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUsIGV1aU51bWJlckZvcm1hdCwgbG9naWNhbENTUywgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpVGFibGVWYXJpYWJsZXMgPSBmdW5jdGlvbiBldWlUYWJsZVZhcmlhYmxlcyhfcmVmNCkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmNC5ldWlUaGVtZTtcbiAgdmFyIGNlbGxDb250ZW50UGFkZGluZyA9IGV1aVRoZW1lLnNpemUucztcbiAgdmFyIGNvbXByZXNzZWRDZWxsQ29udGVudFBhZGRpbmcgPSBldWlUaGVtZS5zaXplLnhzO1xuICB2YXIgbW9iaWxlU2l6ZXMgPSB7XG4gICAgYWN0aW9uczoge1xuICAgICAgd2lkdGg6IGV1aVRoZW1lLnNpemUueHhsLFxuICAgICAgb2Zmc2V0OiBtYXRoV2l0aFVuaXRzKGNlbGxDb250ZW50UGFkZGluZywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggKiAyO1xuICAgICAgfSlcbiAgICB9LFxuICAgIGNoZWNrYm94OiB7XG4gICAgICB3aWR0aDogbWF0aFdpdGhVbml0cyhbZXVpVGhlbWUuc2l6ZS54bCwgZXVpVGhlbWUuc2l6ZS54c10sIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgICAgIHJldHVybiB4ICsgeTtcbiAgICAgIH0pLFxuICAgICAgb2Zmc2V0OiBtYXRoV2l0aFVuaXRzKGNlbGxDb250ZW50UGFkZGluZywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggLyAyO1xuICAgICAgfSlcbiAgICB9XG4gIH07XG4gIHZhciBjaGVja2JveFNpemUgPSBldWlUaGVtZS5zaXplLnhsO1xuICByZXR1cm4ge1xuICAgIGNlbGxDb250ZW50UGFkZGluZzogY2VsbENvbnRlbnRQYWRkaW5nLFxuICAgIGNvbXByZXNzZWRDZWxsQ29udGVudFBhZGRpbmc6IGNvbXByZXNzZWRDZWxsQ29udGVudFBhZGRpbmcsXG4gICAgbW9iaWxlU2l6ZXM6IG1vYmlsZVNpemVzLFxuICAgIGNoZWNrYm94U2l6ZTogY2hlY2tib3hTaXplXG4gIH07XG59O1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiZ3QydjFjLW1vYmlsZVwiLFxuICBzdHlsZXM6IFwidGhlYWR7ZGlzcGxheTpub25lO310Zm9vdHtkaXNwbGF5Om5vbmU7fTtsYWJlbDptb2JpbGU7XCJcbn0gOiB7XG4gIG5hbWU6IFwiZ3QydjFjLW1vYmlsZVwiLFxuICBzdHlsZXM6IFwidGhlYWR7ZGlzcGxheTpub25lO310Zm9vdHtkaXNwbGF5Om5vbmU7fTtsYWJlbDptb2JpbGU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxOHVvbGpjLWF1dG9cIixcbiAgc3R5bGVzOiBcInRhYmxlLWxheW91dDphdXRvO2xhYmVsOmF1dG87XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTh1b2xqYy1hdXRvXCIsXG4gIHN0eWxlczogXCJ0YWJsZS1sYXlvdXQ6YXV0bztsYWJlbDphdXRvO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWZtNnpmdy1maXhlZFwiLFxuICBzdHlsZXM6IFwidGFibGUtbGF5b3V0OmZpeGVkO2xhYmVsOmZpeGVkO1wiXG59IDoge1xuICBuYW1lOiBcIjFmbTZ6ZnctZml4ZWRcIixcbiAgc3R5bGVzOiBcInRhYmxlLWxheW91dDpmaXhlZDtsYWJlbDpmaXhlZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlUYWJsZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRhYmxlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBfZXVpVGFibGVWYXJpYWJsZXMgPSBldWlUYWJsZVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIGNlbGxDb250ZW50UGFkZGluZyA9IF9ldWlUYWJsZVZhcmlhYmxlcy5jZWxsQ29udGVudFBhZGRpbmcsXG4gICAgY29tcHJlc3NlZENlbGxDb250ZW50UGFkZGluZyA9IF9ldWlUYWJsZVZhcmlhYmxlcy5jb21wcmVzc2VkQ2VsbENvbnRlbnRQYWRkaW5nO1xuICByZXR1cm4ge1xuICAgIGV1aVRhYmxlOiAvKiNfX1BVUkVfXyovY3NzKGV1aU51bWJlckZvcm1hdChldWlUaGVtZUNvbnRleHQpLCBcIiBcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiBib3JkZXI6bm9uZTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7YmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsIFwiOztsYWJlbDpldWlUYWJsZTtcIiksXG4gICAgbGF5b3V0OiB7XG4gICAgICBmaXhlZDogX3JlZjMsXG4gICAgICBhdXRvOiBfcmVmMlxuICAgIH0sXG4gICAgLyoqXG4gICAgICogMS4gVGhlIHBhZGRpbmcgb24gdGhlIGAuZXVpVGFibGVDZWxsQ29udGVudGAgZGl2IGFsbG93cyB0aGUgZWxsaXBzaXMgdG8gc2hvdyBpZiB0aGVcbiAgICAgKiBjb250ZW50IGlzIHRydW5jYXRlZC4gSWYgdGhlIHBhZGRpbmcgd2FzIG9uIHRoZSBjZWxsLCB0aGUgZWxsaXBzaXMgd291bGQgYmUgY3JvcHBlZC5cbiAgICAgKiAyLiBUaGUgYDp3aGVyZSgpYCBzZWxlY3RvciBzZXRzIHRoZSBzcGVjaWZpY2l0eSB0byAwLCBhbGxvd2luZyBjb25zdW1lcnMgdG8gbW9yZSBlYXNpbHlcbiAgICAgKiBvdmVycmlkZSBvdXIgQ1NTIGlmIG5lZWRlZFxuICAgICAqL1xuICAgIHVuY29tcHJlc3NlZDogLyojX19QVVJFX18qL2NzcyhcImZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLmZvbnRTaXplLCBcIjtsaW5lLWhlaWdodDpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAnbScpLmxpbmVIZWlnaHQsIFwiOyYgOndoZXJlKC5ldWlUYWJsZUNlbGxDb250ZW50KXtwYWRkaW5nOlwiLCBjZWxsQ29udGVudFBhZGRpbmcsIFwiO307bGFiZWw6dW5jb21wcmVzc2VkO1wiKSxcbiAgICBjb21wcmVzc2VkOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiJiA6d2hlcmUoLmV1aVRhYmxlQ2VsbENvbnRlbnQpe3BhZGRpbmc6XCIsIGNvbXByZXNzZWRDZWxsQ29udGVudFBhZGRpbmcsIFwiO307bGFiZWw6Y29tcHJlc3NlZDtcIiksXG4gICAgLyoqXG4gICAgICogUmVzcG9uc2l2ZS9tb2JpbGUgdnMgZGVza3RvcCBzdHlsZXNcbiAgICAgKiBJbmRpdmlkdWFsIHJvdy9jZWxscyBoYW5kbGUgdGhlaXIgb3duIGRlc2t0b3AgdnMgbW9iaWxlIHN0eWxlc1xuICAgICAqL1xuICAgIGRlc2t0b3A6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZGVza3RvcDtcIiksXG4gICAgbW9iaWxlOiBfcmVmXG4gIH07XG59O1xuXG4vLyBUaGUgdGFibGUgY2FwdGlvbiBuZWVkcyB0byBub3QgYmUgYWJzb2x1dGVseSBwb3NpdGlvbmVkLCBiZWNhdXNlIGZvciBzb21lIHJlYXNvblxuLy8gaXQgY2F1c2VzIHdlaXJkIGxheW91dCBpc3N1ZXMvZG91YmxlIGJvcmRlcnMgd2hlbiB1c2VkIHdpdGhpbiBhIDx0YWJsZT5cbi8vIEFsc28gbmVlZHMgdG8gYmUgIWltcG9ydGFudCB0byBvdmVycmlkZSBldWlTY3JlZW5SZWFkZXJPbmx5IGFic29sdXRlIHBvc2l0aW9uaW5nXG5leHBvcnQgdmFyIGV1aVRhYmxlQ2FwdGlvblN0eWxlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxaG5pbzk4LWV1aVRhYmxlQ2FwdGlvblN0eWxlc1wiLFxuICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmUhaW1wb3J0YW50O2xhYmVsOmV1aVRhYmxlQ2FwdGlvblN0eWxlcztcIlxufSA6IHtcbiAgbmFtZTogXCIxaG5pbzk4LWV1aVRhYmxlQ2FwdGlvblN0eWxlc1wiLFxuICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmUhaW1wb3J0YW50O2xhYmVsOmV1aVRhYmxlQ2FwdGlvblN0eWxlcztcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJib2R5UmVmXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVCb2R5ID0gZnVuY3Rpb24gRXVpVGFibGVCb2R5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBib2R5UmVmID0gX3JlZi5ib2R5UmVmLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0Ym9keVwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgcmVmOiBib2R5UmVmXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpVGFibGVCb2R5LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGJvZHlSZWY6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlRm9vdGVyID0gZnVuY3Rpb24gRXVpVGFibGVGb290ZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0Zm9vdFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBudWxsLCBjaGlsZHJlbikpO1xufTtcbkV1aVRhYmxlRm9vdGVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImFsaWduXCIsIFwiY2xhc3NOYW1lXCIsIFwid2lkdGhcIiwgXCJzdHlsZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMsIExFRlRfQUxJR05NRU5UIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRXVpVGFibGVDZWxsQ29udGVudCB9IGZyb20gJy4vX3RhYmxlX2NlbGxfY29udGVudCc7XG5pbXBvcnQgeyBldWlUYWJsZUhlYWRlckZvb3RlckNlbGxTdHlsZXMgfSBmcm9tICcuL3RhYmxlX2NlbGxzX3NoYXJlZC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVGb290ZXJDZWxsID0gZnVuY3Rpb24gRXVpVGFibGVGb290ZXJDZWxsKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBfcmVmJGFsaWduID0gX3JlZi5hbGlnbixcbiAgICBhbGlnbiA9IF9yZWYkYWxpZ24gPT09IHZvaWQgMCA/IExFRlRfQUxJR05NRU5UIDogX3JlZiRhbGlnbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUZvb3RlckNlbGwnLCBjbGFzc05hbWUpO1xuICB2YXIgaW5saW5lU3R5bGVzID0gcmVzb2x2ZVdpZHRoQXNTdHlsZShzdHlsZSwgd2lkdGgpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFibGVIZWFkZXJGb290ZXJDZWxsU3R5bGVzKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0ZFwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBzdHlsZXMuZXVpVGFibGVGb290ZXJDZWxsLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBzdHlsZTogaW5saW5lU3R5bGVzXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlQ2VsbENvbnRlbnQsIHtcbiAgICBhbGlnbjogYWxpZ24sXG4gICAgdHJ1bmNhdGVUZXh0OiB0cnVlLFxuICAgIHRleHRPbmx5OiB0cnVlXG4gIH0sIGNoaWxkcmVuKSk7XG59O1xuRXVpVGFibGVGb290ZXJDZWxsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGFsaWduOiBQcm9wVHlwZXMuYW55LFxuICB3aWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKVxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcIndpZHRoXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIFdBUk5JTkdfTUVTU0FHRSA9ICdUd28gYHdpZHRoYCBwcm9wZXJ0aWVzIHdlcmUgcHJvdmlkZWQuIFByb3ZpZGUgb25seSBvbmUgb2YgYHN0eWxlLndpZHRoYCBvciBgd2lkdGhgIHRvIGF2b2lkIGNvbmZsaWN0cy4nO1xuZXhwb3J0IHZhciByZXNvbHZlV2lkdGhBc1N0eWxlID0gZnVuY3Rpb24gcmVzb2x2ZVdpZHRoQXNTdHlsZSgpIHtcbiAgdmFyIHN0eWxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIHdpZHRoID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBzdHlsZVdpZHRoID0gc3R5bGUud2lkdGgsXG4gICAgc3R5bGVSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHN0eWxlLCBfZXhjbHVkZWQpO1xuICB2YXIgYXR0cldpZHRoID0gd2lkdGg7XG4gIGlmIChhdHRyV2lkdGggIT0gbnVsbCAmJiAodHlwZW9mIGF0dHJXaWR0aCA9PT0gJ251bWJlcicgfHwgIWlzTmFOKE51bWJlcihhdHRyV2lkdGgpKSkgLy8gdHJhbnNmb3JtIHtudW1iZXJ9IG9yIHVuaXRsZXNzICdudW1iZXInIHRvIHB4IHN0cmluZ1xuICApIHtcbiAgICBhdHRyV2lkdGggPSBcIlwiLmNvbmNhdChhdHRyV2lkdGgsIFwicHhcIik7XG4gIH1cbiAgaWYgKHN0eWxlV2lkdGggJiYgYXR0cldpZHRoKSB7XG4gICAgY29uc29sZS53YXJuKFdBUk5JTkdfTUVTU0FHRSk7XG4gIH1cbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgc3R5bGVSZXN0KSwge30sIHtcbiAgICB3aWR0aDogYXR0cldpZHRoIHx8IHN0eWxlV2lkdGhcbiAgfSk7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJhbGlnblwiLCBcInRleHRPbmx5XCIsIFwidHJ1bmNhdGVUZXh0XCIsIFwiaGFzQWN0aW9uc1wiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBMRUZUX0FMSUdOTUVOVCwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZWRpY2F0ZSc7XG5pbXBvcnQgeyBFdWlUZXh0QmxvY2tUcnVuY2F0ZSB9IGZyb20gJy4uL3RleHRfdHJ1bmNhdGUnO1xuaW1wb3J0IHsgdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUgfSBmcm9tICcuL21vYmlsZS9yZXNwb25zaXZlX2NvbnRleHQnO1xuaW1wb3J0IHsgZXVpVGFibGVDZWxsQ29udGVudFN0eWxlcyB9IGZyb20gJy4vX3RhYmxlX2NlbGxfY29udGVudC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVDZWxsQ29udGVudCA9IGZ1bmN0aW9uIEV1aVRhYmxlQ2VsbENvbnRlbnQoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgIGFsaWduID0gX3JlZiRhbGlnbiA9PT0gdm9pZCAwID8gTEVGVF9BTElHTk1FTlQgOiBfcmVmJGFsaWduLFxuICAgIHRleHRPbmx5ID0gX3JlZi50ZXh0T25seSxcbiAgICBfcmVmJHRydW5jYXRlVGV4dCA9IF9yZWYudHJ1bmNhdGVUZXh0LFxuICAgIHRydW5jYXRlVGV4dCA9IF9yZWYkdHJ1bmNhdGVUZXh0ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkdHJ1bmNhdGVUZXh0LFxuICAgIGhhc0FjdGlvbnMgPSBfcmVmLmhhc0FjdGlvbnMsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNSZXNwb25zaXZlID0gdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUoKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRhYmxlQ2VsbENvbnRlbnRTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUYWJsZUNlbGxDb250ZW50LCBzdHlsZXNbYWxpZ25dLCB0cnVuY2F0ZVRleHQgPT09IHRydWUgJiYgc3R5bGVzLnRydW5jYXRlVGV4dCwgdHJ1bmNhdGVUZXh0ID09PSBmYWxzZSAmJiBzdHlsZXMud3JhcFRleHRdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoaGFzQWN0aW9ucyA/IFtzdHlsZXMuaGFzQWN0aW9ucy5hY3Rpb25zLCAhaXNSZXNwb25zaXZlICYmIHN0eWxlcy5oYXNBY3Rpb25zLmRlc2t0b3AsIGlzUmVzcG9uc2l2ZSAmJiBoYXNBY3Rpb25zICE9PSAnY3VzdG9tJyAmJiBzdHlsZXMuaGFzQWN0aW9ucy5tb2JpbGVdIDogW10pKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUNlbGxDb250ZW50JywgY2xhc3NOYW1lKTtcbiAgdmFyIHJlbmRlcmVkQ2hpbGRyZW4gPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGV4dENsYXNzZXMgPSAnZXVpVGFibGVDZWxsQ29udGVudF9fdGV4dCc7XG4gICAgaWYgKGlzT2JqZWN0KHRydW5jYXRlVGV4dCkgJiYgdHJ1bmNhdGVUZXh0LmxpbmVzKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUZXh0QmxvY2tUcnVuY2F0ZSwge1xuICAgICAgICBsaW5lczogdHJ1bmNhdGVUZXh0LmxpbmVzLFxuICAgICAgICBjbG9uZUVsZW1lbnQ6IHRydWVcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiB0ZXh0Q2xhc3Nlc1xuICAgICAgfSwgY2hpbGRyZW4pKTtcbiAgICB9XG4gICAgaWYgKHRleHRPbmx5ID09PSB0cnVlIHx8IHRydW5jYXRlVGV4dCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiB0ZXh0Q2xhc3Nlc1xuICAgICAgfSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH0sIFtjaGlsZHJlbiwgdGV4dE9ubHksIHRydW5jYXRlVGV4dF0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCByZW5kZXJlZENoaWxkcmVuKTtcbn07XG5FdWlUYWJsZUNlbGxDb250ZW50LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHRydW5jYXRlVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBsaW5lczogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG4gIH0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW251bGxdKV0pXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlUZXh0VHJ1bmNhdGUsIGV1aVRleHRCcmVha1dvcmQsIGxvZ2ljYWxUZXh0QWxpZ25DU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxdDFwdGxjLW1vYmlsZVwiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MDtsYWJlbDptb2JpbGU7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXQxcHRsYy1tb2JpbGVcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjA7bGFiZWw6bW9iaWxlO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwibzl0ZGpkLWRlc2t0b3BcIixcbiAgc3R5bGVzOiBcImZsZXgtd3JhcDp3cmFwO2xhYmVsOmRlc2t0b3A7XCJcbn0gOiB7XG4gIG5hbWU6IFwibzl0ZGpkLWRlc2t0b3BcIixcbiAgc3R5bGVzOiBcImZsZXgtd3JhcDp3cmFwO2xhYmVsOmRlc2t0b3A7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxeDN4M2poLWNlbnRlclwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtsYWJlbDpjZW50ZXI7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXgzeDNqaC1jZW50ZXJcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7bGFiZWw6Y2VudGVyO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXZzaWQyZC1ldWlUYWJsZUNlbGxDb250ZW50XCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2xhYmVsOmV1aVRhYmxlQ2VsbENvbnRlbnQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXZzaWQyZC1ldWlUYWJsZUNlbGxDb250ZW50XCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2xhYmVsOmV1aVRhYmxlQ2VsbENvbnRlbnQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpVGFibGVDZWxsQ29udGVudFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRhYmxlQ2VsbENvbnRlbnRTdHlsZXMoX3JlZjUpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjUuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpVGFibGVDZWxsQ29udGVudDogX3JlZjQsXG4gICAgLy8gQWxpZ25cbiAgICBsZWZ0OiBudWxsLFxuICAgIC8vIERlZmF1bHQsIG5vIENTUyBuZWVkZWRcbiAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhcImp1c3RpZnktY29udGVudDpmbGV4LWVuZDtcIiwgbG9naWNhbFRleHRBbGlnbkNTUygncmlnaHQnKSwgXCI7O2xhYmVsOnJpZ2h0O1wiKSxcbiAgICBjZW50ZXI6IF9yZWYzLFxuICAgIC8vIFRleHQgd3JhcHBpbmdcbiAgICB0cnVuY2F0ZVRleHQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dFRydW5jYXRlKCksIFwiLmV1aVRhYmxlQ2VsbENvbnRlbnRfX3RleHR7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7fTtsYWJlbDp0cnVuY2F0ZVRleHQ7XCIpLFxuICAgIHdyYXBUZXh0OiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHRCcmVha1dvcmQoKSwgXCI7O2xhYmVsOndyYXBUZXh0O1wiKSxcbiAgICAvLyBBY3Rpb24gY2VsbHNcbiAgICBoYXNBY3Rpb25zOiB7XG4gICAgICBhY3Rpb25zOiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDphY3Rpb25zO1wiKSxcbiAgICAgIGRlc2t0b3A6IF9yZWYyLFxuICAgICAgbW9iaWxlOiBfcmVmXG4gICAgfVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBtYWtlSGlnaENvbnRyYXN0Q29sb3IsIHRpbnRPclNoYWRlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUsIGxvZ2ljYWxDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlUYWJsZVZhcmlhYmxlcyB9IGZyb20gJy4vdGFibGUuc3R5bGVzJztcbmV4cG9ydCB2YXIgZXVpVGFibGVIZWFkZXJGb290ZXJDZWxsU3R5bGVzID0gZnVuY3Rpb24gZXVpVGFibGVIZWFkZXJGb290ZXJDZWxsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcblxuICAvLyBldWlGb250U2l6ZSByZXR1cm5zIGFuIG9iamVjdCwgc28gd2Uga2VlcCBvYmplY3Qgbm90YXRpb24gaGVyZSB0byBtZXJnZSBpbnRvIGNzc2BgXG4gIHZhciBzaGFyZWRTdHlsZXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJykpLCB7fSwge1xuICAgIGZvbnRXZWlnaHQ6IGV1aVRoZW1lLmZvbnQud2VpZ2h0LnNlbWlCb2xkLFxuICAgIGNvbG9yOiBldWlUaGVtZS5jb2xvcnMudGl0bGUsXG4gICAgdmVydGljYWxBbGlnbjogJ21pZGRsZSdcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgZXVpVGFibGVIZWFkZXJDZWxsOiAvKiNfX1BVUkVfXyovY3NzKHNoYXJlZFN0eWxlcywgXCI7O2xhYmVsOmV1aVRhYmxlSGVhZGVyQ2VsbDtcIiksXG4gICAgZXVpVGFibGVIZWFkZXJDZWxsX19jb250ZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLnhzLCBcIjs7bGFiZWw6ZXVpVGFibGVIZWFkZXJDZWxsX19jb250ZW50O1wiKSxcbiAgICBldWlUYWJsZUhlYWRlckNlbGxfX2J1dHRvbjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIGZvbnQtd2VpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDsuZXVpVGFibGVTb3J0SWNvbi0tc29ydGFibGV7Y29sb3I6XCIsIG1ha2VIaWdoQ29udHJhc3RDb2xvcihcbiAgICAvLyBUaW50IGl0IGFyYml0cmFyaWx5IGhpZ2gsIHRoZSBjb250cmFzdCB1dGlsIHdpbGwgdGFrZSBjYXJlIG9mIGxvd2VyaW5nIGJhY2sgZG93biB0byBXQ0FHXG4gICAgdGludE9yU2hhZGUoZXVpVGhlbWUuY29sb3JzLnN1YmR1ZWRUZXh0LCAwLjksIGNvbG9yTW9kZSksIDMgLy8gMzoxIHJhdGlvIGZyb20gaHR0cHM6Ly93d3cudzMub3JnL1dBSS9XQ0FHMjIvVW5kZXJzdGFuZGluZy9ub24tdGV4dC1jb250cmFzdC5odG1sXG4gICAgKShldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSksIFwiO30mOmhvdmVyLCY6Zm9jdXN7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsuZXVpVGFibGVTb3J0SWNvbi0tc29ydGFibGV7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7fX07bGFiZWw6ZXVpVGFibGVIZWFkZXJDZWxsX19idXR0b247XCIpLFxuICAgIGV1aVRhYmxlRm9vdGVyQ2VsbDogLyojX19QVVJFX18qL2NzcyhzaGFyZWRTdHlsZXMsIFwiIGJhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5saWdodGVzdFNoYWRlLCBcIjs7bGFiZWw6ZXVpVGFibGVGb290ZXJDZWxsO1wiKVxuICB9O1xufTtcbmV4cG9ydCB2YXIgZXVpVGFibGVDZWxsQ2hlY2tib3hTdHlsZXMgPSBmdW5jdGlvbiBldWlUYWJsZUNlbGxDaGVja2JveFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgX2V1aVRhYmxlVmFyaWFibGVzID0gZXVpVGFibGVWYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBjZWxsQ29udGVudFBhZGRpbmcgPSBfZXVpVGFibGVWYXJpYWJsZXMuY2VsbENvbnRlbnRQYWRkaW5nLFxuICAgIG1vYmlsZVNpemVzID0gX2V1aVRhYmxlVmFyaWFibGVzLm1vYmlsZVNpemVzLFxuICAgIGNoZWNrYm94U2l6ZSA9IF9ldWlUYWJsZVZhcmlhYmxlcy5jaGVja2JveFNpemU7XG4gIHZhciBzaGFyZWRDaGVja2JveFN0eWxlcyA9IFwiXFxuICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsIGNoZWNrYm94U2l6ZSksIFwiXFxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBcIik7XG4gIHJldHVybiB7XG4gICAgZXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3g6IC8qI19fUFVSRV9fKi9jc3Moc2hhcmVkQ2hlY2tib3hTdHlsZXMsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2xlZnQnKSwgXCI7O2xhYmVsOmV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94O1wiKSxcbiAgICBldWlUYWJsZVJvd0NlbGxDaGVja2JveDogLyojX19QVVJFX18qL2NzcyhzaGFyZWRDaGVja2JveFN0eWxlcywgXCI7O2xhYmVsOmV1aVRhYmxlUm93Q2VsbENoZWNrYm94O1wiKSxcbiAgICBkZXNrdG9wOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2JvcmRlci12ZXJ0aWNhbCcsIGV1aVRoZW1lLmJvcmRlci50aGluKSwgXCI7O2xhYmVsOmRlc2t0b3A7XCIpLFxuICAgIG1vYmlsZTogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCBjZWxsQ29udGVudFBhZGRpbmcpLCBcIiBcIiwgbG9naWNhbENTUygnbGVmdCcsIG1vYmlsZVNpemVzLmNoZWNrYm94Lm9mZnNldCksIFwiOztsYWJlbDptb2JpbGU7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJ3cmFwV2l0aFRhYmxlUm93XCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXIgPSBmdW5jdGlvbiBFdWlUYWJsZUhlYWRlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiR3cmFwV2l0aFRhYmxlUm93ID0gX3JlZi53cmFwV2l0aFRhYmxlUm93LFxuICAgIHdyYXBXaXRoVGFibGVSb3cgPSBfcmVmJHdyYXBXaXRoVGFibGVSb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHdyYXBXaXRoVGFibGVSb3csXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRoZWFkXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCByZXN0KSwgd3JhcFdpdGhUYWJsZVJvdyA/IF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBudWxsLCBjaGlsZHJlbikgOiBjaGlsZHJlbik7XG59O1xuRXVpVGFibGVIZWFkZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBDaGlsZHJlbiBtdXN0IGJlIHZhbGlkIERPTSBzdHJ1Y3R1cmUgcmVzaWRpbmcgd2l0aGluIGA8dGhlYWQ+YC5cbiAgICAgICAqIFVzZSBgPHRkPiB8IDx0aD5gIGJ5IGRlZmF1bHQsIG9yIGA8dHI+PHRoLz48L3RyPmAgd2hlbiBgd3JhcFdpdGhUYWJsZVJvdz1mYWxzZWBcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAgICogQXV0b21hdGljYWxseSBhZGRzIGEgd3JhcHBpbmcgYDx0cj5gIGVsZW1lbnQgYXJvdW5kIHRoZSBjaGlsZHJlblxuICAgICAgICovXG4gIHdyYXBXaXRoVGFibGVSb3c6IFByb3BUeXBlcy5ib29sXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJhbGlnblwiLCBcIm9uU29ydFwiLCBcImlzU29ydGVkXCIsIFwiaXNTb3J0QXNjZW5kaW5nXCIsIFwiY2xhc3NOYW1lXCIsIFwic2NvcGVcIiwgXCJtb2JpbGVPcHRpb25zXCIsIFwid2lkdGhcIiwgXCJzdHlsZVwiLCBcInJlYWRPbmx5XCIsIFwiZGVzY3JpcHRpb25cIiwgXCJhcHBlbmRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzLCBMRUZUX0FMSUdOTUVOVCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUgfSBmcm9tICcuL21vYmlsZS9yZXNwb25zaXZlX2NvbnRleHQnO1xuaW1wb3J0IHsgRXVpVGFibGVDZWxsQ29udGVudCB9IGZyb20gJy4vX3RhYmxlX2NlbGxfY29udGVudCc7XG5pbXBvcnQgeyBldWlUYWJsZUhlYWRlckZvb3RlckNlbGxTdHlsZXMgfSBmcm9tICcuL3RhYmxlX2NlbGxzX3NoYXJlZC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBDZWxsQ29udGVudHMgPSBmdW5jdGlvbiBDZWxsQ29udGVudHMoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgIGRlc2NyaXB0aW9uID0gX3JlZi5kZXNjcmlwdGlvbixcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2FuU29ydCA9IF9yZWYuY2FuU29ydCxcbiAgICBpc1NvcnRlZCA9IF9yZWYuaXNTb3J0ZWQsXG4gICAgaXNTb3J0QXNjZW5kaW5nID0gX3JlZi5pc1NvcnRBc2NlbmRpbmc7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlQ2VsbENvbnRlbnQsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBhbGlnbjogYWxpZ24sXG4gICAgdGV4dE9ubHk6IGZhbHNlLFxuICAgIHRydW5jYXRlVGV4dDogbnVsbFxuICB9LCBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpVGFibGVIZWFkZXJDZWxsLnRpdGxlVGV4dFdpdGhEZXNjXCIsXG4gICAgICBkZWZhdWx0OiBcIntpbm5lclRleHR9OyB7ZGVzY3JpcHRpb259XCIsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgaW5uZXJUZXh0OiBpbm5lclRleHQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uICh0aXRsZVRleHRXaXRoRGVzYykge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgdGl0bGU6IGRlc2NyaXB0aW9uID8gdGl0bGVUZXh0V2l0aERlc2MgOiBpbm5lclRleHQsXG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpLXRleHRUcnVuY2F0ZVwiXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfSk7XG4gIH0pLCBkZXNjcmlwdGlvbiAmJiBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIGRlc2NyaXB0aW9uKSksIGlzU29ydGVkID8gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlU29ydEljb25cIixcbiAgICB0eXBlOiBpc1NvcnRBc2NlbmRpbmcgPyAnc29ydFVwJyA6ICdzb3J0RG93bicsXG4gICAgc2l6ZTogXCJtXCJcbiAgfSkgOiBjYW5Tb3J0ID8gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlU29ydEljb24gZXVpVGFibGVTb3J0SWNvbi0tc29ydGFibGVcIixcbiAgICB0eXBlOiBcInNvcnRhYmxlXCIsXG4gICAgc2l6ZTogXCJtXCIsXG4gICAgY29sb3I6IFwic3ViZHVlZFwiIC8vIFRpbnRlZCBhIGJpdCBmdXJ0aGVyIHZpYSBDU1NcbiAgfSkgOiBudWxsKTtcbn07XG5leHBvcnQgdmFyIEV1aVRhYmxlSGVhZGVyQ2VsbCA9IGZ1bmN0aW9uIEV1aVRhYmxlSGVhZGVyQ2VsbChfcmVmMikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICBfcmVmMiRhbGlnbiA9IF9yZWYyLmFsaWduLFxuICAgIGFsaWduID0gX3JlZjIkYWxpZ24gPT09IHZvaWQgMCA/IExFRlRfQUxJR05NRU5UIDogX3JlZjIkYWxpZ24sXG4gICAgb25Tb3J0ID0gX3JlZjIub25Tb3J0LFxuICAgIGlzU29ydGVkID0gX3JlZjIuaXNTb3J0ZWQsXG4gICAgaXNTb3J0QXNjZW5kaW5nID0gX3JlZjIuaXNTb3J0QXNjZW5kaW5nLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYyLmNsYXNzTmFtZSxcbiAgICBzY29wZSA9IF9yZWYyLnNjb3BlLFxuICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmMi5tb2JpbGVPcHRpb25zLFxuICAgIHdpZHRoID0gX3JlZjIud2lkdGgsXG4gICAgc3R5bGUgPSBfcmVmMi5zdHlsZSxcbiAgICByZWFkT25seSA9IF9yZWYyLnJlYWRPbmx5LFxuICAgIGRlc2NyaXB0aW9uID0gX3JlZjIuZGVzY3JpcHRpb24sXG4gICAgYXBwZW5kID0gX3JlZjIuYXBwZW5kLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJsZUhlYWRlckZvb3RlckNlbGxTdHlsZXMpO1xuICB2YXIgaXNSZXNwb25zaXZlID0gdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUoKTtcbiAgdmFyIGhpZGVGb3JEZXNrdG9wID0gIWlzUmVzcG9uc2l2ZSAmJiAobW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLm9ubHkpO1xuICB2YXIgaGlkZUZvck1vYmlsZSA9IGlzUmVzcG9uc2l2ZSAmJiAobW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLnNob3cpID09PSBmYWxzZTtcbiAgaWYgKGhpZGVGb3JEZXNrdG9wIHx8IGhpZGVGb3JNb2JpbGUpIHJldHVybiBudWxsO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlSGVhZGVyQ2VsbCcsIGNsYXNzTmFtZSk7XG4gIHZhciBpbmxpbmVTdHlsZXMgPSByZXNvbHZlV2lkdGhBc1N0eWxlKHN0eWxlLCB3aWR0aCk7XG4gIHZhciBDZWxsQ29tcG9uZW50ID0gY2hpbGRyZW4gPyAndGgnIDogJ3RkJztcbiAgdmFyIGNlbGxTY29wZSA9IENlbGxDb21wb25lbnQgPT09ICd0aCcgPyBzY29wZSAhPT0gbnVsbCAmJiBzY29wZSAhPT0gdm9pZCAwID8gc2NvcGUgOiAnY29sJyA6IHVuZGVmaW5lZDsgLy8gYHNjb3BlYCBpcyBvbmx5IHZhbGlkIG9uIGB0aGAgZWxlbWVudHNcblxuICB2YXIgY2FuU29ydCA9ICEhKG9uU29ydCAmJiAhcmVhZE9ubHkpO1xuICB2YXIgYXJpYVNvcnRWYWx1ZTtcbiAgaWYgKGlzU29ydGVkKSB7XG4gICAgYXJpYVNvcnRWYWx1ZSA9IGlzU29ydEFzY2VuZGluZyA/ICdhc2NlbmRpbmcnIDogJ2Rlc2NlbmRpbmcnO1xuICB9IGVsc2UgaWYgKGNhblNvcnQpIHtcbiAgICBhcmlhU29ydFZhbHVlID0gJ25vbmUnO1xuICB9XG4gIHZhciBjZWxsQ29udGVudHNQcm9wcyA9IHtcbiAgICBjc3M6IHN0eWxlcy5ldWlUYWJsZUhlYWRlckNlbGxfX2NvbnRlbnQsXG4gICAgYWxpZ246IGFsaWduLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICBjYW5Tb3J0OiBjYW5Tb3J0LFxuICAgIGlzU29ydGVkOiBpc1NvcnRlZCxcbiAgICBpc1NvcnRBc2NlbmRpbmc6IGlzU29ydEFzY2VuZGluZyxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgfTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ2VsbENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGNzczogc3R5bGVzLmV1aVRhYmxlSGVhZGVyQ2VsbCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc2NvcGU6IGNlbGxTY29wZSxcbiAgICByb2xlOiBcImNvbHVtbmhlYWRlclwiLFxuICAgIFwiYXJpYS1zb3J0XCI6IGFyaWFTb3J0VmFsdWUsXG4gICAgc3R5bGU6IGlubGluZVN0eWxlc1xuICB9LCByZXN0KSwgY2FuU29ydCA/IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgY3NzOiBzdHlsZXMuZXVpVGFibGVIZWFkZXJDZWxsX19idXR0b24sXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlckJ1dHRvbicsIHtcbiAgICAgICdldWlUYWJsZUhlYWRlckJ1dHRvbi1pc1NvcnRlZCc6IGlzU29ydGVkXG4gICAgfSksXG4gICAgb25DbGljazogb25Tb3J0LFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0YWJsZUhlYWRlclNvcnRCdXR0b25cIlxuICB9LCBfX19FbW90aW9uSlNYKENlbGxDb250ZW50cywgY2VsbENvbnRlbnRzUHJvcHMpKSA6IF9fX0Vtb3Rpb25KU1goQ2VsbENvbnRlbnRzLCBjZWxsQ29udGVudHNQcm9wcyksIGFwcGVuZCk7XG59O1xuRXVpVGFibGVIZWFkZXJDZWxsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGFsaWduOiBQcm9wVHlwZXMuYW55LFxuICBpc1NvcnRBc2NlbmRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBpc1NvcnRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG1vYmlsZU9wdGlvbnM6IFByb3BUeXBlcy5hbnksXG4gIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG4gIHNjb3BlOiBQcm9wVHlwZXMuYW55LFxuICB3aWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKSxcbiAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAgICogU2hvd3MgdGhlIHNvcnQgaW5kaWNhdG9yIGJ1dCByZW1vdmVzIHRoZSBidXR0b25cbiAgICAgICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogQ29udGVudCByZW5kZXJlZCBvdXRzaWRlIHRoZSB2aXNpYmxlIGNlbGwgY29udGVudCB3cmFwcGVyLiBVc2VmdWwgZm9yLCBlLmcuIHNjcmVlbiByZWFkZXIgdGV4dC5cbiAgICAgICAqXG4gICAgICAgKiBVc2VkIGJ5IEV1aUJhc2ljVGFibGUgdG8gcmVuZGVyIGhpZGRlbiBjb3B5IG1hcmtlcnNcbiAgICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJzY29wZVwiLCBcInN0eWxlXCIsIFwid2lkdGhcIiwgXCJhcHBlbmRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZXVpVGFibGVDZWxsQ2hlY2tib3hTdHlsZXMgfSBmcm9tICcuL3RhYmxlX2NlbGxzX3NoYXJlZC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3ggPSBmdW5jdGlvbiBFdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRzY29wZSA9IF9yZWYuc2NvcGUsXG4gICAgc2NvcGUgPSBfcmVmJHNjb3BlID09PSB2b2lkIDAgPyAnY29sJyA6IF9yZWYkc2NvcGUsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICBhcHBlbmQgPSBfcmVmLmFwcGVuZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3gnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFibGVDZWxsQ2hlY2tib3hTdHlsZXMpO1xuICB2YXIgaW5saW5lU3R5bGVzID0gcmVzb2x2ZVdpZHRoQXNTdHlsZShzdHlsZSwgd2lkdGgpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRoXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IHN0eWxlcy5ldWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc2NvcGU6IHNjb3BlLFxuICAgIHN0eWxlOiBpbmxpbmVTdHlsZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNlbGxDb250ZW50XCJcbiAgfSwgY2hpbGRyZW4pLCBhcHBlbmQpO1xufTtcbkV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHdpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZF0pLFxuICBzY29wZTogUHJvcFR5cGVzLmFueSxcbiAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwicmVzcG9uc2l2ZUJyZWFrcG9pbnRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlSXNFdWlUYWJsZVJlc3BvbnNpdmUgfSBmcm9tICcuL3Jlc3BvbnNpdmVfY29udGV4dCc7XG5pbXBvcnQgeyBldWlUYWJsZUhlYWRlck1vYmlsZVN0eWxlcyB9IGZyb20gJy4vdGFibGVfaGVhZGVyX21vYmlsZS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXJNb2JpbGUgPSBmdW5jdGlvbiBFdWlUYWJsZUhlYWRlck1vYmlsZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgcmVzcG9uc2l2ZUJyZWFrcG9pbnQgPSBfcmVmLnJlc3BvbnNpdmVCcmVha3BvaW50LFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzUmVzcG9uc2l2ZSA9IHVzZUlzRXVpVGFibGVSZXNwb25zaXZlKHJlc3BvbnNpdmVCcmVha3BvaW50KTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRhYmxlSGVhZGVyTW9iaWxlU3R5bGVzKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlck1vYmlsZScsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBpc1Jlc3BvbnNpdmUgPyBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBzdHlsZXMuZXVpVGFibGVIZWFkZXJNb2JpbGVcbiAgfSwgcmVzdCksIGNoaWxkcmVuKSA6IG51bGw7XG59O1xuRXVpVGFibGVIZWFkZXJNb2JpbGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuZXhwb3J0IHZhciBldWlUYWJsZUhlYWRlck1vYmlsZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRhYmxlSGVhZGVyTW9iaWxlU3R5bGVzKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUYWJsZUhlYWRlck1vYmlsZTogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpiYXNlbGluZTtwYWRkaW5nLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpldWlUYWJsZUhlYWRlck1vYmlsZTtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJhbmNob3JQb3NpdGlvblwiLCBcIml0ZW1zXCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uRW1wdHkgfSBmcm9tICcuLi8uLi9idXR0b24vYnV0dG9uX2VtcHR5JztcbmltcG9ydCB7IEV1aVBvcG92ZXIgfSBmcm9tICcuLi8uLi9wb3BvdmVyJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51UGFuZWwgfSBmcm9tICcuLi8uLi9jb250ZXh0X21lbnUnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpVGFibGVTb3J0TW9iaWxlSXRlbSB9IGZyb20gJy4vdGFibGVfc29ydF9tb2JpbGVfaXRlbSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVNvcnRNb2JpbGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpVGFibGVTb3J0TW9iaWxlKCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpVGFibGVTb3J0TW9iaWxlKTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlUYWJsZVNvcnRNb2JpbGUsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0YXRlXCIsIHtcbiAgICAgIGlzUG9wb3Zlck9wZW46IGZhbHNlXG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQnV0dG9uQ2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc1BvcG92ZXJPcGVuOiAhX3RoaXMuc3RhdGUuaXNQb3BvdmVyT3BlblxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNsb3NlUG9wb3ZlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzUG9wb3Zlck9wZW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICAvLyBBbGlnbnMgdGhlIGJ1dHRvbiB0byB0aGUgcmlnaHQgZXZlbiB3aGVuIGl0J3MgdGhlIG9ubHkgZWxlbWVudCBwcmVzZW50XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImV1aVRhYmxlU29ydE1vYmlsZVN0eWxlc1wiLCB7XG4gICAgICBtYXJnaW5JbmxpbmVTdGFydDogJ2F1dG8nLFxuICAgICAgbGFiZWw6ICdldWlUYWJsZVNvcnRNb2JpbGUnXG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlUYWJsZVNvcnRNb2JpbGUsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aVRhYmxlU29ydE1vYmlsZSwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgYW5jaG9yUG9zaXRpb24gPSBfdGhpcyRwcm9wcy5hbmNob3JQb3NpdGlvbixcbiAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wcy5pdGVtcyxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVTb3J0TW9iaWxlJywgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBtb2JpbGVTb3J0QnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgICAgICBpY29uVHlwZTogXCJhcnJvd0Rvd25cIixcbiAgICAgICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICAgICAgb25DbGljazogdGhpcy5vbkJ1dHRvbkNsaWNrLmJpbmQodGhpcyksXG4gICAgICAgIGZsdXNoOiBcInJpZ2h0XCIsXG4gICAgICAgIHNpemU6IFwieHNcIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRhYmxlU29ydE1vYmlsZS5zb3J0aW5nXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiU29ydGluZ1wiXG4gICAgICB9KSk7XG4gICAgICB2YXIgbW9iaWxlU29ydFBvcG92ZXIgPSBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXIsIF9leHRlbmRzKHtcbiAgICAgICAgYnV0dG9uOiBtb2JpbGVTb3J0QnV0dG9uLFxuICAgICAgICBpc09wZW46IHRoaXMuc3RhdGUuaXNQb3BvdmVyT3BlbixcbiAgICAgICAgY2xvc2VQb3BvdmVyOiB0aGlzLmNsb3NlUG9wb3ZlcixcbiAgICAgICAgYW5jaG9yUG9zaXRpb246IGFuY2hvclBvc2l0aW9uIHx8ICdkb3duUmlnaHQnLFxuICAgICAgICBwYW5lbFBhZGRpbmdTaXplOiBcIm5vbmVcIlxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVQYW5lbCwge1xuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIG1pbldpZHRoOiAyMDBcbiAgICAgICAgfSxcbiAgICAgICAgaXRlbXM6IGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA/IGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlU29ydE1vYmlsZUl0ZW0sIHtcbiAgICAgICAgICAgIGtleTogaXRlbS5rZXksXG4gICAgICAgICAgICBvblNvcnQ6IGl0ZW0ub25Tb3J0LFxuICAgICAgICAgICAgaXNTb3J0ZWQ6IGl0ZW0uaXNTb3J0ZWQsXG4gICAgICAgICAgICBpc1NvcnRBc2NlbmRpbmc6IGl0ZW0uaXNTb3J0QXNjZW5kaW5nXG4gICAgICAgICAgfSwgaXRlbS5uYW1lKTtcbiAgICAgICAgfSkgOiB1bmRlZmluZWRcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBjc3M6IHRoaXMuZXVpVGFibGVTb3J0TW9iaWxlU3R5bGVzXG4gICAgICB9LCBtb2JpbGVTb3J0UG9wb3Zlcik7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5FdWlUYWJsZVNvcnRNb2JpbGUucHJvcFR5cGVzID0ge1xuICBhbmNob3JQb3NpdGlvbjogUHJvcFR5cGVzLmFueSxcbiAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5hbnksXG4gICAgb25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBpc1NvcnRlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNTb3J0QXNjZW5kaW5nOiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcIm9uU29ydFwiLCBcImlzU29ydGVkXCIsIFwiaXNTb3J0QXNjZW5kaW5nXCIsIFwiY2xhc3NOYW1lXCIsIFwiYXJpYUxhYmVsXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlDb250ZXh0TWVudUl0ZW0gfSBmcm9tICcuLi8uLi9jb250ZXh0X21lbnUnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVTb3J0TW9iaWxlSXRlbSA9IGZ1bmN0aW9uIEV1aVRhYmxlU29ydE1vYmlsZUl0ZW0oX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIG9uU29ydCA9IF9yZWYub25Tb3J0LFxuICAgIGlzU29ydGVkID0gX3JlZi5pc1NvcnRlZCxcbiAgICBpc1NvcnRBc2NlbmRpbmcgPSBfcmVmLmlzU29ydEFzY2VuZGluZyxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBhcmlhTGFiZWwgPSBfcmVmLmFyaWFMYWJlbCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzb3J0SWNvbiA9ICdlbXB0eSc7XG4gIGlmIChpc1NvcnRlZCkge1xuICAgIHNvcnRJY29uID0gaXNTb3J0QXNjZW5kaW5nID8gJ3NvcnRVcCcgOiAnc29ydERvd24nO1xuICB9XG4gIHZhciBidXR0b25DbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVTb3J0TW9iaWxlSXRlbScsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZVNvcnRNb2JpbGVJdGVtLWlzU29ydGVkJzogaXNTb3J0ZWRcbiAgfSk7XG4gIHZhciBjb2x1bW5UaXRsZSA9IGFyaWFMYWJlbCA/IGFyaWFMYWJlbCA6IGNoaWxkcmVuO1xuICB2YXIgc3RhdGVmdWxBcmlhTGFiZWwgPSBcIlNvcnQgXCIuY29uY2F0KGNvbHVtblRpdGxlLCBcIiBcIikuY29uY2F0KGlzU29ydEFzY2VuZGluZyA/ICdkZXNjZW5kaW5nJyA6ICdhc2NlbmRpbmcnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVJdGVtLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBidXR0b25DbGFzc2VzLFxuICAgIGljb246IHNvcnRJY29uLFxuICAgIG9uQ2xpY2s6IG9uU29ydCxcbiAgICBcImFyaWEtbGFiZWxcIjogc3RhdGVmdWxBcmlhTGFiZWxcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZVNvcnRNb2JpbGVJdGVtLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8ga25vdyB3aGVuIGFuIGl0ZW0gaGFzIGJlZW4gY2xpY2tlZFxuICAgICAqL1xuICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgY3VycmVudCBvcHRpb24gaXMgdGhlIHNvcnRlZCBvbiBjb2x1bW5cbiAgICAgKi9cbiAgaXNTb3J0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hpY2ggZGlyZWN0aW9uIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBzb3J0ZWQgb25cbiAgICAgKi9cbiAgaXNTb3J0QXNjZW5kaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaGFzU2VsZWN0aW9uXCIsIFwiaXNTZWxlY3RlZFwiLCBcImlzU2VsZWN0YWJsZVwiLCBcImhhc0FjdGlvbnNcIiwgXCJpc0V4cGFuZGVkUm93XCIsIFwiaXNFeHBhbmRhYmxlXCIsIFwib25DbGlja1wiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5cywgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSB9IGZyb20gJy4vbW9iaWxlL3Jlc3BvbnNpdmVfY29udGV4dCc7XG5pbXBvcnQgeyBldWlUYWJsZVJvd1N0eWxlcyB9IGZyb20gJy4vdGFibGVfcm93LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVJvdyA9IGZ1bmN0aW9uIEV1aVRhYmxlUm93KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBoYXNTZWxlY3Rpb24gPSBfcmVmLmhhc1NlbGVjdGlvbixcbiAgICBpc1NlbGVjdGVkID0gX3JlZi5pc1NlbGVjdGVkLFxuICAgIGlzU2VsZWN0YWJsZSA9IF9yZWYuaXNTZWxlY3RhYmxlLFxuICAgIGhhc0FjdGlvbnMgPSBfcmVmLmhhc0FjdGlvbnMsXG4gICAgaXNFeHBhbmRlZFJvdyA9IF9yZWYuaXNFeHBhbmRlZFJvdyxcbiAgICBpc0V4cGFuZGFibGUgPSBfcmVmLmlzRXhwYW5kYWJsZSxcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzUmVzcG9uc2l2ZSA9IHVzZUV1aVRhYmxlSXNSZXNwb25zaXZlKCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJsZVJvd1N0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBpc1Jlc3BvbnNpdmUgPyBbc3R5bGVzLmV1aVRhYmxlUm93LCBzdHlsZXMubW9iaWxlLm1vYmlsZSwgaXNTZWxlY3RlZCAmJiBzdHlsZXMubW9iaWxlLnNlbGVjdGVkLCBpc0V4cGFuZGVkUm93ICYmIHN0eWxlcy5tb2JpbGUuZXhwYW5kZWQsIChoYXNBY3Rpb25zID09PSB0cnVlIHx8IGlzRXhwYW5kYWJsZSB8fCBpc0V4cGFuZGVkUm93KSAmJiBzdHlsZXMubW9iaWxlLmhhc1JpZ2h0Q29sdW1uLCBoYXNTZWxlY3Rpb24gJiYgc3R5bGVzLm1vYmlsZS5oYXNMZWZ0Q29sdW1uXSA6IFtzdHlsZXMuZXVpVGFibGVSb3csIHN0eWxlcy5kZXNrdG9wLmRlc2t0b3AsIGlzU2VsZWN0ZWQgJiYgc3R5bGVzLmRlc2t0b3Auc2VsZWN0ZWQsIGlzRXhwYW5kZWRSb3cgJiYgc3R5bGVzLmRlc2t0b3AuZXhwYW5kZWQsIG9uQ2xpY2sgJiYgc3R5bGVzLmRlc2t0b3AuY2xpY2thYmxlLCBpc0V4cGFuZGVkUm93ICYmIGhhc1NlbGVjdGlvbiAmJiBzdHlsZXMuZGVza3RvcC5jaGVja2JveE9mZnNldF07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVSb3cnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVSb3ctaXNTZWxlY3RhYmxlJzogaXNTZWxlY3RhYmxlLFxuICAgICdldWlUYWJsZVJvdy1pc1NlbGVjdGVkJzogaXNTZWxlY3RlZCxcbiAgICAnZXVpVGFibGVSb3ctaGFzQWN0aW9ucyc6IGhhc0FjdGlvbnMsXG4gICAgJ2V1aVRhYmxlUm93LWlzRXhwYW5kZWRSb3cnOiBpc0V4cGFuZGVkUm93LFxuICAgICdldWlUYWJsZVJvdy1pc0V4cGFuZGFibGUnOiBpc0V4cGFuZGFibGUsXG4gICAgJ2V1aVRhYmxlUm93LWlzQ2xpY2thYmxlJzogb25DbGlja1xuICB9KTtcbiAgaWYgKCFvbkNsaWNrKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBfZXh0ZW5kcyh7XG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH1cbiAgdmFyIG9uS2V5RG93biA9IGZ1bmN0aW9uIG9uS2V5RG93bihldmVudCkge1xuICAgIC8vIFByZXZlbnQgYSBzY3JvbGwgZnJvbSBvY2N1cnJpbmcgaWYgdGhlIHVzZXIgaGFzIGhpdCBzcGFjZS5cbiAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLlNQQUNFKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9O1xuICB2YXIgb25LZXlVcCA9IGZ1bmN0aW9uIG9uS2V5VXAoZXZlbnQpIHtcbiAgICAvLyBTdXBwb3J0IGtleWJvYXJkIGFjY2Vzc2liaWxpdHkgYnkgZW11bGF0aW5nIG1vdXNlIGNsaWNrIG9uIEVOVEVSIG9yIFNQQUNFIGtleXByZXNzLlxuICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuRU5URVIgfHwgZXZlbnQua2V5ID09PSBrZXlzLlNQQUNFKSB7XG4gICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidHJcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uS2V5RG93bjogb25LZXlEb3duLFxuICAgIG9uS2V5VXA6IG9uS2V5VXAsXG4gICAgdGFiSW5kZXg6IDBcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZVJvdy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHRhYmxlIGhhcyBhIHNpbmdsZSBjb2x1bW4gb2YgY2hlY2tib3hlcyBmb3Igc2VsZWN0aW5nXG4gICAgICogcm93cyAodXNlZCBmb3IgbW9iaWxlIHN0eWxpbmcpXG4gICAgICovXG4gIGhhc1NlbGVjdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBjdXJyZW50IHJvdydzIGNoZWNrYm94IGlzIHNlbGVjdGFibGUgLyBub3QgZGlzYWJsZWRcbiAgICAgKi9cbiAgaXNTZWxlY3RhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoZSBjdXJyZW50IHJvdyBoYXMgYmVlbiBzZWxlY3RlZFxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSB0YWJsZSBoYXMgYSBkZWRpY2F0ZWQgY29sdW1uIGZvciBhY3Rpb25zXG4gICAgICogKHVzZWQgZm9yIG1vYmlsZSBzdHlsaW5nIGFuZCBkZXNrdG9wIGFjdGlvbiBob3ZlciBiZWhhdmlvcilcbiAgICAgKi9cbiAgaGFzQWN0aW9uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImN1c3RvbVwiXSldKSxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSByb3cgd2lsbCBoYXZlIGFuIGV4cGFuZGVkIHJvd1xuICAgICAqL1xuICBpc0V4cGFuZGFibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHJvdyB3aWxsIGJlIHRoZSBleHBhbmRlZCByb3dcbiAgICAgKi9cbiAgaXNFeHBhbmRlZFJvdzogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKGUsIHQpIHsgcmV0dXJuIHQgfHwgKHQgPSBlLnNsaWNlKDApKSwgT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZSh0KSB9IH0pKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB0aW50LCBzaGFkZSwgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlLCBldWlCYWNrZ3JvdW5kQ29sb3IsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlTaGFkb3cgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5pbXBvcnQgeyBldWlUYWJsZVZhcmlhYmxlcyB9IGZyb20gJy4vdGFibGUuc3R5bGVzJztcbmV4cG9ydCB2YXIgZXVpVGFibGVSb3dTdHlsZXMgPSBmdW5jdGlvbiBldWlUYWJsZVJvd1N0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgcm93Q29sb3JzID0gX3Jvd0NvbG9yVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBleHBhbmRlZEFuaW1hdGlvbkNzcyA9IF9leHBhbmRlZFJvd0FuaW1hdGlvbihldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgX2V1aVRhYmxlVmFyaWFibGVzID0gZXVpVGFibGVWYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBjZWxsQ29udGVudFBhZGRpbmcgPSBfZXVpVGFibGVWYXJpYWJsZXMuY2VsbENvbnRlbnRQYWRkaW5nLFxuICAgIG1vYmlsZVNpemVzID0gX2V1aVRhYmxlVmFyaWFibGVzLm1vYmlsZVNpemVzLFxuICAgIGNoZWNrYm94U2l6ZSA9IF9ldWlUYWJsZVZhcmlhYmxlcy5jaGVja2JveFNpemU7XG4gIHJldHVybiB7XG4gICAgZXVpVGFibGVSb3c6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZXVpVGFibGVSb3c7XCIpLFxuICAgIGRlc2t0b3A6IHtcbiAgICAgIGRlc2t0b3A6IC8qI19fUFVSRV9fKi9jc3MoXCImOmhvdmVye2JhY2tncm91bmQtY29sb3I6XCIsIHJvd0NvbG9ycy5ob3ZlciwgXCI7fTtsYWJlbDpkZXNrdG9wO1wiKSxcbiAgICAgIGV4cGFuZGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgcm93Q29sb3JzLmhvdmVyLCBcIjtcIiwgZXhwYW5kZWRBbmltYXRpb25Dc3MsIFwiOztsYWJlbDpleHBhbmRlZDtcIiksXG4gICAgICBjbGlja2FibGU6IC8qI19fUFVSRV9fKi9jc3MoXCImOmhvdmVye2JhY2tncm91bmQtY29sb3I6XCIsIHJvd0NvbG9ycy5jbGlja2FibGUuaG92ZXIsIFwiO2N1cnNvcjpwb2ludGVyO30mOmZvY3Vze2JhY2tncm91bmQtY29sb3I6XCIsIHJvd0NvbG9ycy5jbGlja2FibGUuZm9jdXMsIFwiO307bGFiZWw6Y2xpY2thYmxlO1wiKSxcbiAgICAgIHNlbGVjdGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiJiwmKy5ldWlUYWJsZVJvdy1pc0V4cGFuZGVkUm93e2JhY2tncm91bmQtY29sb3I6XCIsIHJvd0NvbG9ycy5zZWxlY3RlZC5jb2xvciwgXCI7fSY6aG92ZXIsJjpob3ZlcisuZXVpVGFibGVSb3ctaXNFeHBhbmRlZFJvd3tiYWNrZ3JvdW5kLWNvbG9yOlwiLCByb3dDb2xvcnMuc2VsZWN0ZWQuaG92ZXIsIFwiO307bGFiZWw6c2VsZWN0ZWQ7XCIpLFxuICAgICAgLy8gT2Zmc2V0IGV4cGFuZGVkICYgc2VsZWN0YWJsZSByb3dzIGJ5IHRoZSBjaGVja2JveCB3aWR0aCB0byBsaW5lIHVwIGNvbnRlbnQgd2l0aCB0aGUgMm5kIGNvbHVtblxuICAgICAgLy8gU2V0IG9uIHRoZSBgPHRkPmAgYmVjYXVzZSBwYWRkaW5nIGNhbid0IGJlIGFwcGxpZWQgdG8gYDx0cj5gIGVsZW1lbnRzIGRpcmVjdGx5XG4gICAgICBjaGVja2JveE9mZnNldDogLyojX19QVVJFX18qL2NzcyhcIiY+LmV1aVRhYmxlUm93Q2VsbDpmaXJzdC1jaGlsZHtcIiwgbG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgY2hlY2tib3hTaXplKSwgXCI7fTtsYWJlbDpjaGVja2JveE9mZnNldDtcIilcbiAgICB9LFxuICAgIG1vYmlsZToge1xuICAgICAgbW9iaWxlOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO3BhZGRpbmc6XCIsIGNlbGxDb250ZW50UGFkZGluZywgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBjZWxsQ29udGVudFBhZGRpbmcpLCBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIiBiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAncGxhaW4nKSwgXCI7Ym9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIFwiOztsYWJlbDptb2JpbGU7XCIpLFxuICAgICAgc2VsZWN0ZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCImLCYrLmV1aVRhYmxlUm93LWlzRXhwYW5kZWRSb3d7YmFja2dyb3VuZC1jb2xvcjpcIiwgcm93Q29sb3JzLnNlbGVjdGVkLmNvbG9yLCBcIjt9O2xhYmVsOnNlbGVjdGVkO1wiKSxcbiAgICAgIC8qKlxuICAgICAgICogTGVmdCBjb2x1bW4gb2Zmc2V0IChubyBib3JkZXIpXG4gICAgICAgKiBVc2VkIGZvciBzZWxlY3Rpb24gY2hlY2tib3gsIHdoaWNoIHdpbGwgYmUgYWJzb2x1dGVseSBwb3NpdGlvbmVkXG4gICAgICAgKi9cbiAgICAgIGhhc0xlZnRDb2x1bW46IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgbW9iaWxlU2l6ZXMuY2hlY2tib3gud2lkdGgpLCBcIjs7bGFiZWw6aGFzTGVmdENvbHVtbjtcIiksXG4gICAgICAvKipcbiAgICAgICAqIFJpZ2h0IGNvbHVtbiBzdHlsZXMgKyBib3JkZXJcbiAgICAgICAqIFVzZWQgZm9yIGNlbGwgYWN0aW9ucyBhbmQgcm93IGV4cGFuZGVyIGFycm93XG4gICAgICAgKi9cbiAgICAgIGhhc1JpZ2h0Q29sdW1uOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3BhZGRpbmctcmlnaHQnLCBtb2JpbGVTaXplcy5hY3Rpb25zLndpZHRoKSwgXCIgJjo6YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygndmVydGljYWwnLCAwKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3JpZ2h0JywgbW9iaWxlU2l6ZXMuYWN0aW9ucy53aWR0aCksIFwiIFwiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluKSwgXCIgYmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpVGhlbWUuYm9yZGVyLmNvbG9yLCBcIjt9O2xhYmVsOmhhc1JpZ2h0Q29sdW1uO1wiKSxcbiAgICAgIC8qKlxuICAgICAgICogQm90dG9tIG9mIGNhcmQgLSBleHBhbmRlZCByb3dzXG4gICAgICAgKi9cbiAgICAgIGV4cGFuZGVkOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBcIi1cIi5jb25jYXQobW9iaWxlU2l6ZXMuYWN0aW9ucy5vZmZzZXQpKSwgbG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgY2VsbENvbnRlbnRQYWRkaW5nKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2JvcmRlci10b3AnLCBldWlUaGVtZS5ib3JkZXIudGhpbiksIFwiIFwiLCBsb2dpY2FsQ1NTKCdib3JkZXItdG9wLWxlZnQtcmFkaXVzJywgMCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdib3JkZXItdG9wLXJpZ2h0LXJhZGl1cycsIDApLCBcIj4uZXVpVGFibGVSb3dDZWxse1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiO31cIiwgZXhwYW5kZWRBbmltYXRpb25Dc3MsIFwiOztsYWJlbDpleHBhbmRlZDtcIilcbiAgICB9XG4gIH07XG59O1xudmFyIF9leHBhbmRlZFJvd0FuaW1hdGlvbiA9IGZ1bmN0aW9uIF9leHBhbmRlZFJvd0FuaW1hdGlvbihfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIC8vIERvIG5vdCBhdHRlbXB0IHRvIGFuaW1hdGUgdG8gaGVpZ2h0IGF1dG8gLSBkb3duIHRoYXQgcm9hZCBkcmFnb25zIGxpZVxuICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9wdWxsLzY4MjZcbiAgdmFyIGV4cGFuZFJvdyA9IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgIDAlIHtcXG4gICAgICBvcGFjaXR5OiAwO1xcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtXCIsIFwiKTtcXG4gICAgfVxcbiAgICAxMDAlIHtcXG4gICAgICBvcGFjaXR5OiAxO1xcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG4gICAgfVxcbiAgXCJdKSksIGV1aVRoZW1lLnNpemUubSk7XG5cbiAgLy8gQW5pbWF0aW9uIG11c3QgYmUgb24gdGhlIGNvbnRlbnRzIGRpdiBpbnNpZGUsIG5vdCB0aGUgcm93IGl0c2VsZlxuICByZXR1cm4gLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInsuZXVpVGFibGVDZWxsQ29udGVudHthbmltYXRpb246XCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiIDEgbm9ybWFsIG5vbmUgXCIsIGV4cGFuZFJvdywgXCI7fX1cIik7XG59O1xudmFyIF9yb3dDb2xvclZhcmlhYmxlcyA9IGZ1bmN0aW9uIF9yb3dDb2xvclZhcmlhYmxlcyhfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmMi5jb2xvck1vZGU7XG4gIHJldHVybiB7XG4gICAgaG92ZXI6IGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gZXVpVGhlbWUuY29sb3JzLmxpZ2h0ZXN0U2hhZGUgOiB0aW50KGV1aVRoZW1lLmNvbG9ycy5saWdodGVzdFNoYWRlLCAwLjUpLFxuICAgIHNlbGVjdGVkOiB7XG4gICAgICBjb2xvcjogY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgMC43KSA6IHRpbnQoZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIDAuOTYpLFxuICAgICAgaG92ZXI6IGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gc2hhZGUoZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIDAuNzUpIDogdGludChldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgMC45KVxuICAgIH0sXG4gICAgY2xpY2thYmxlOiB7XG4gICAgICBob3ZlcjogdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIDAuMDUpLFxuICAgICAgZm9jdXM6IHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCAwLjEpXG4gICAgfVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImFsaWduXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJ0cnVuY2F0ZVRleHRcIiwgXCJzZXRTY29wZVJvd1wiLCBcInRleHRPbmx5XCIsIFwiaGFzQWN0aW9uc1wiLCBcImlzRXhwYW5kZXJcIiwgXCJzdHlsZVwiLCBcIndpZHRoXCIsIFwidmFsaWduXCIsIFwibW9iaWxlT3B0aW9uc1wiLCBcImFwcGVuZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMsIExFRlRfQUxJR05NRU5UIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUgfSBmcm9tICcuL21vYmlsZS9yZXNwb25zaXZlX2NvbnRleHQnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRXVpVGFibGVDZWxsQ29udGVudCB9IGZyb20gJy4vX3RhYmxlX2NlbGxfY29udGVudCc7XG5pbXBvcnQgeyBldWlUYWJsZVJvd0NlbGxTdHlsZXMgfSBmcm9tICcuL3RhYmxlX3Jvd19jZWxsLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVJvd0NlbGwgPSBmdW5jdGlvbiBFdWlUYWJsZVJvd0NlbGwoX3JlZikge1xuICB2YXIgX3JlZiRhbGlnbiA9IF9yZWYuYWxpZ24sXG4gICAgYWxpZ24gPSBfcmVmJGFsaWduID09PSB2b2lkIDAgPyBMRUZUX0FMSUdOTUVOVCA6IF9yZWYkYWxpZ24sXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHRydW5jYXRlVGV4dCA9IF9yZWYudHJ1bmNhdGVUZXh0LFxuICAgIHNldFNjb3BlUm93ID0gX3JlZi5zZXRTY29wZVJvdyxcbiAgICBfcmVmJHRleHRPbmx5ID0gX3JlZi50ZXh0T25seSxcbiAgICB0ZXh0T25seSA9IF9yZWYkdGV4dE9ubHkgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHRleHRPbmx5LFxuICAgIGhhc0FjdGlvbnMgPSBfcmVmLmhhc0FjdGlvbnMsXG4gICAgaXNFeHBhbmRlciA9IF9yZWYuaXNFeHBhbmRlcixcbiAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgIF9yZWYkdmFsaWduID0gX3JlZi52YWxpZ24sXG4gICAgdmFsaWduID0gX3JlZiR2YWxpZ24gPT09IHZvaWQgMCA/ICdtaWRkbGUnIDogX3JlZiR2YWxpZ24sXG4gICAgbW9iaWxlT3B0aW9ucyA9IF9yZWYubW9iaWxlT3B0aW9ucyxcbiAgICBhcHBlbmQgPSBfcmVmLmFwcGVuZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSgpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFibGVSb3dDZWxsU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGFibGVSb3dDZWxsLCBzZXRTY29wZVJvdyAmJiBzdHlsZXMucm93SGVhZGVyLCBpc0V4cGFuZGVyICYmIHN0eWxlcy5pc0V4cGFuZGVyLCBoYXNBY3Rpb25zICYmIHN0eWxlcy5oYXNBY3Rpb25zLCBzdHlsZXNbdmFsaWduXV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShpc1Jlc3BvbnNpdmUgPyBbc3R5bGVzLm1vYmlsZS5tb2JpbGUsIChtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vYmlsZU9wdGlvbnMuZW5sYXJnZSkgJiYgc3R5bGVzLm1vYmlsZS5lbmxhcmdlLCBoYXNBY3Rpb25zID09PSAnY3VzdG9tJyAmJiBzdHlsZXMubW9iaWxlLmN1c3RvbUFjdGlvbnMsIGhhc0FjdGlvbnMgPT09IHRydWUgJiYgc3R5bGVzLm1vYmlsZS5hY3Rpb25zLCBpc0V4cGFuZGVyICYmIHN0eWxlcy5tb2JpbGUuZXhwYW5kZXJdIDogW3N0eWxlcy5kZXNrdG9wLmRlc2t0b3AsIGhhc0FjdGlvbnMgJiYgc3R5bGVzLmRlc2t0b3AuYWN0aW9uc10pKTtcbiAgdmFyIGNlbGxDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVSb3dDZWxsJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taGFzQWN0aW9ucyc6IGhhc0FjdGlvbnMsXG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taXNFeHBhbmRlcic6IGlzRXhwYW5kZXJcbiAgfSk7XG4gIHZhciB3aWR0aFZhbHVlID0gaXNSZXNwb25zaXZlID8gaGFzQWN0aW9ucyB8fCBpc0V4cGFuZGVyID8gdW5kZWZpbmVkIC8vIE9uIG1vYmlsZSwgYWN0aW9ucyBhcmUgc2hpZnRlZCB0byBhIHJpZ2h0IGNvbHVtbiB2aWEgQ1NTXG4gIDogbW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLndpZHRoIDogd2lkdGg7XG4gIHZhciBzdHlsZU9iaiA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoVmFsdWUpO1xuICB2YXIgRWxlbWVudCA9IHNldFNjb3BlUm93ID8gJ3RoJyA6ICd0ZCc7XG4gIHZhciBzaGFyZWRQcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIHNjb3BlOiBzZXRTY29wZVJvdyA/ICdyb3cnIDogdW5kZWZpbmVkLFxuICAgIHN0eWxlOiBzdHlsZU9iaixcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KTtcbiAgdmFyIHNoYXJlZENvbnRlbnRQcm9wcyA9IHtcbiAgICBhbGlnbjogYWxpZ24sXG4gICAgdGV4dE9ubHk6IHRleHRPbmx5LFxuICAgIHRydW5jYXRlVGV4dDogdHJ1bmNhdGVUZXh0LFxuICAgIGhhc0FjdGlvbnM6IGhhc0FjdGlvbnMgfHwgaXNFeHBhbmRlclxuICB9O1xuICBpZiAoaXNSZXNwb25zaXZlKSB7XG4gICAgLy8gTW9iaWxlIHZpZXdcbiAgICBpZiAoKG1vYmlsZU9wdGlvbnMgPT09IG51bGwgfHwgbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbW9iaWxlT3B0aW9ucy5zaG93KSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX21vYmlsZU9wdGlvbnMkYWxpZ24sIF9tb2JpbGVPcHRpb25zJHRydW5jYSwgX21vYmlsZU9wdGlvbnMkdGV4dE9uO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNlbGxDbGFzc2VzXG4gICAgICB9LCBzaGFyZWRQcm9wcyksIChtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vYmlsZU9wdGlvbnMuaGVhZGVyKSAmJiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlUm93Q2VsbF9fbW9iaWxlSGVhZGVyXCIsXG4gICAgICAgIGNzczogc3R5bGVzLmV1aVRhYmxlUm93Q2VsbF9fbW9iaWxlSGVhZGVyXG4gICAgICB9LCBtb2JpbGVPcHRpb25zLmhlYWRlciksIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVDZWxsQ29udGVudCwgX2V4dGVuZHMoe30sIHNoYXJlZENvbnRlbnRQcm9wcywge1xuICAgICAgICBhbGlnbjogKF9tb2JpbGVPcHRpb25zJGFsaWduID0gbW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLmFsaWduKSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyRhbGlnbiAhPT0gdm9pZCAwID8gX21vYmlsZU9wdGlvbnMkYWxpZ24gOiAnbGVmdCcgLy8gRGVmYXVsdCB0byBsZWZ0IGFsaWduZWQgbW9iaWxlIGNlbGxzLCB1bmxlc3MgY29uc3VtZXJzIHNwZWNpZmljYWxseSBzZXQgYW4gYWxpZ25tZW50IGZvciBtb2JpbGVcbiAgICAgICAgLFxuICAgICAgICB0cnVuY2F0ZVRleHQ6IChfbW9iaWxlT3B0aW9ucyR0cnVuY2EgPSBtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vYmlsZU9wdGlvbnMudHJ1bmNhdGVUZXh0KSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyR0cnVuY2EgIT09IHZvaWQgMCA/IF9tb2JpbGVPcHRpb25zJHRydW5jYSA6IHRydW5jYXRlVGV4dCxcbiAgICAgICAgdGV4dE9ubHk6IChfbW9iaWxlT3B0aW9ucyR0ZXh0T24gPSBtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vYmlsZU9wdGlvbnMudGV4dE9ubHkpICE9PSBudWxsICYmIF9tb2JpbGVPcHRpb25zJHRleHRPbiAhPT0gdm9pZCAwID8gX21vYmlsZU9wdGlvbnMkdGV4dE9uIDogdGV4dE9ubHlcbiAgICAgIH0pLCAobW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLnJlbmRlcikgfHwgY2hpbGRyZW4pLCBhcHBlbmQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBEZXNrdG9wIHZpZXdcbiAgICBpZiAobW9iaWxlT3B0aW9ucyAhPT0gbnVsbCAmJiBtb2JpbGVPcHRpb25zICE9PSB2b2lkIDAgJiYgbW9iaWxlT3B0aW9ucy5vbmx5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNlbGxDbGFzc2VzXG4gICAgICB9LCBzaGFyZWRQcm9wcyksIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVDZWxsQ29udGVudCwgc2hhcmVkQ29udGVudFByb3BzLCBjaGlsZHJlbiksIGFwcGVuZCk7XG4gICAgfVxuICB9XG59O1xuRXVpVGFibGVSb3dDZWxsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFZlcnRpY2FsIGFsaWdubWVudCBvZiB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuICAgICAqL1xuICB2YWxpZ246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjZWxsIHNob3VsZCBiZSBtYXJrZWQgYXMgdGhlIGhlYWRpbmcgZm9yIGl0cyByb3dcbiAgICAgKi9cbiAgc2V0U2NvcGVSb3c6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGNlbGwgaXMgZGVkaWNhdGVkIHRvIHJvdyBhY3Rpb25zXG4gICAgICogKHVzZWQgZm9yIG1vYmlsZSBzdHlsaW5nIGFuZCBkZXNrdG9wIGFjdGlvbiBob3ZlciBiZWhhdmlvcilcbiAgICAgKi9cbiAgaGFzQWN0aW9uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImN1c3RvbVwiXSldKSxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gaXMgZGVkaWNhdGVkIGFzIHRoZSBleHBhbmRhYmxlIHJvdyB0b2dnbGVcbiAgICAgKi9cbiAgaXNFeHBhbmRlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE1vYmlsZSBvcHRpb25zIGZvciBkaXNwbGF5aW5nIGRpZmZlcmVudGx5IGF0IHNtYWxsIHNjcmVlbnM7XG4gICAgICogU2VlICNFdWlUYWJsZVJvd0NlbGxNb2JpbGVPcHRpb25zU2hhcGVcbiAgICAgKi9cbiAgbW9iaWxlT3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIElmIGZhbHNlLCB3aWxsIG5vdCByZW5kZXIgdGhlIGNlbGwgYXQgYWxsIGZvciBtb2JpbGVcbiAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAqL1xuICAgIHNob3c6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogT25seSBzaG93IGZvciBtb2JpbGU/IElmIHRydWUsIHdpbGwgbm90IHJlbmRlciB0aGUgY29sdW1uIGF0IGFsbCBmb3IgZGVza3RvcFxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgIG9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogQ3VzdG9tIHJlbmRlci9jaGlsZHJlbiBpZiBkaWZmZXJlbnQgZnJvbSBkZXNrdG9wXG4gICAgICAgKi9cbiAgICByZW5kZXI6IFByb3BUeXBlcy5ub2RlLFxuICAgIC8qKlxuICAgICAgICogVGhlIGNvbHVtbidzIGhlYWRlciBmb3IgdXNlIGluIG1vYmlsZSB2aWV3IChhdXRvbWF0aWNhbGx5IHBhc3NlZCBkb3duXG4gICAgICAgKiB3aGVuIHVzaW5nIGBFdWlCYXNpY1RhYmxlYCkuXG4gICAgICAgKiBPciBwYXNzIGBmYWxzZWAgdG8gbm90IHNob3cgYSBoZWFkZXIgYXQgYWxsLlxuICAgICAgICovXG4gICAgaGVhZGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXSksXG4gICAgLyoqXG4gICAgICAgKiBJbmNyZWFzZSB0ZXh0IHNpemUgY29tcGFyZWQgdG8gcmVzdCBvZiBjZWxsc1xuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgIGVubGFyZ2U6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogQXBwbGllcyB0aGUgdmFsdWUgdG8gdGhlIHdpZHRoIG9mIHRoZSBjZWxsIGluIG1vYmlsZSB2aWV3ICh0eXBpY2FsbHkgNTAlKVxuICAgICAgICogQGRlZmF1bHQgNTAlXG4gICAgICAgKi9cbiAgICB3aWR0aDogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIEhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSB0ZXh0IGluIHRoZSBjZWxsXG4gICAgICAgKi9cbiAgICBhbGlnbjogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSB0ZXh0IHdyYXBwZXIgYXJvdW5kIGNlbGwgY29udGVudCB0aGF0IGhlbHBzIHdvcmQgYnJlYWsgb3IgdHJ1bmNhdGVcbiAgICAgICAqIGxvbmcgdGV4dCBjb3JyZWN0bHkuXG4gICAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICAgKi9cbiAgICB0ZXh0T25seTogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGNvbHVtbiBzaG91bGQgdHJ1bmNhdGUgb3ZlcmZsb3dpbmcgdGV4dCBjb250ZW50LlxuICAgICAgICogLSBTZXQgdG8gYHRydWVgIHRvIGVuYWJsZSBzaW5nbGUtbGluZSB0cnVuY2F0aW9uLlxuICAgICAgICogLSBUbyBlbmFibGUgbXVsdGktbGluZSB0cnVuY2F0aW9uLCB1c2UgYSBjb25maWd1cmF0aW9uIG9iamVjdCB3aXRoIGBsaW5lc2BcbiAgICAgICAqIHNldCB0byBhIG51bWJlciBvZiBsaW5lcyB0byB0cnVuY2F0ZSB0by5cbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgICB0cnVuY2F0ZVRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBsaW5lczogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZF0pXG4gIH0pLFxuICAvKipcbiAgICAgKiBDb250ZW50IHJlbmRlcmVkIG91dHNpZGUgdGhlIHZpc2libGUgY2VsbCBjb250ZW50IHdyYXBwZXIuIFVzZWZ1bCBmb3IsIGUuZy4gc2NyZWVuIHJlYWRlciB0ZXh0LlxuICAgICAqXG4gICAgICogVXNlZCBieSBFdWlCYXNpY1RhYmxlIHRvIHJlbmRlciBoaWRkZW4gY29weSBtYXJrZXJzXG4gICAgICovXG4gIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIEhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSB0ZXh0IGluIHRoZSBjZWxsXG4gICAgICovXG4gIGFsaWduOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBDcmVhdGVzIGEgdGV4dCB3cmFwcGVyIGFyb3VuZCBjZWxsIGNvbnRlbnQgdGhhdCBoZWxwcyB3b3JkIGJyZWFrIG9yIHRydW5jYXRlXG4gICAgICogbG9uZyB0ZXh0IGNvcnJlY3RseS5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gIHRleHRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjb2x1bW4gc2hvdWxkIHRydW5jYXRlIG92ZXJmbG93aW5nIHRleHQgY29udGVudC5cbiAgICAgKiAtIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIHNpbmdsZS1saW5lIHRydW5jYXRpb24uXG4gICAgICogLSBUbyBlbmFibGUgbXVsdGktbGluZSB0cnVuY2F0aW9uLCB1c2UgYSBjb25maWd1cmF0aW9uIG9iamVjdCB3aXRoIGBsaW5lc2BcbiAgICAgKiBzZXQgdG8gYSBudW1iZXIgb2YgbGluZXMgdG8gdHJ1bmNhdGUgdG8uXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgdHJ1bmNhdGVUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGxpbmVzOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICB3aWR0aDogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSwgZXVpRm9udFNpemUsIGV1aVRleHRUcnVuY2F0ZSwgbG9naWNhbENTUywgbG9naWNhbFRleHRBbGlnbkNTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVRhYmxlVmFyaWFibGVzIH0gZnJvbSAnLi90YWJsZS5zdHlsZXMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWFtdmR5Ni1ib3R0b21cIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOmJvdHRvbTtsYWJlbDpib3R0b207XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWFtdmR5Ni1ib3R0b21cIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOmJvdHRvbTtsYWJlbDpib3R0b207XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIyZjc2NGUtdG9wXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjp0b3A7bGFiZWw6dG9wO1wiXG59IDoge1xuICBuYW1lOiBcIjJmNzY0ZS10b3BcIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOnRvcDtsYWJlbDp0b3A7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxOWhleGh5LWJhc2VsaW5lXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtsYWJlbDpiYXNlbGluZTtcIlxufSA6IHtcbiAgbmFtZTogXCIxOWhleGh5LWJhc2VsaW5lXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtsYWJlbDpiYXNlbGluZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY0ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImwxbm1lNy1taWRkbGVcIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOm1pZGRsZTtsYWJlbDptaWRkbGU7XCJcbn0gOiB7XG4gIG5hbWU6IFwibDFubWU3LW1pZGRsZVwiLFxuICBzdHlsZXM6IFwidmVydGljYWwtYWxpZ246bWlkZGxlO2xhYmVsOm1pZGRsZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlUYWJsZVJvd0NlbGxTdHlsZXMgPSBmdW5jdGlvbiBldWlUYWJsZVJvd0NlbGxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIF9ldWlUYWJsZVZhcmlhYmxlcyA9IGV1aVRhYmxlVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgbW9iaWxlU2l6ZXMgPSBfZXVpVGFibGVWYXJpYWJsZXMubW9iaWxlU2l6ZXM7XG5cbiAgLy8gVW5zZXRzIHRoZSBleHRyYSBzdHJ1dCBjYXVzZWQgYnkgaW5saW5lLWJsb2NrIGRpc3BsYXkgb2YgYnV0dG9ucy9pY29ucy90b29sdGlwcy5cbiAgLy8gV2l0aG91dCB0aGlzLCB0aGUgcm93IGhlaWdodCBqdW1wcyB3aGVuZXZlciBhY3Rpb25zIGFyZSBkaXNhYmxlZC5cbiAgdmFyIGhhc0ljb25zID0gXCJsaW5lLWhlaWdodDogMTtcIjtcbiAgcmV0dXJuIHtcbiAgICBldWlUYWJsZVJvd0NlbGw6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiOztsYWJlbDpldWlUYWJsZVJvd0NlbGw7XCIpLFxuICAgIHJvd0hlYWRlcjogLyojX19QVVJFX18qL2NzcyhcImZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodC5yZWd1bGFyLCBcIjtcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIjs7bGFiZWw6cm93SGVhZGVyO1wiKSxcbiAgICBpc0V4cGFuZGVyOiAvKiNfX1BVUkVfXyovY3NzKGhhc0ljb25zLCBcIjs7bGFiZWw6aXNFeHBhbmRlcjtcIiksXG4gICAgaGFzQWN0aW9uczogLyojX19QVVJFX18qL2NzcyhoYXNJY29ucywgXCI7O2xhYmVsOmhhc0FjdGlvbnM7XCIpLFxuICAgIC8vIHZhbGlnblxuICAgIG1pZGRsZTogX3JlZjQsXG4gICAgYmFzZWxpbmU6IF9yZWYzLFxuICAgIHRvcDogX3JlZjIsXG4gICAgYm90dG9tOiBfcmVmLFxuICAgIGRlc2t0b3A6IHtcbiAgICAgIGRlc2t0b3A6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnYm9yZGVyLXZlcnRpY2FsJywgZXVpVGhlbWUuYm9yZGVyLnRoaW4pLCBcIjs7bGFiZWw6ZGVza3RvcDtcIiksXG4gICAgICBhY3Rpb25zOiAvKiNfX1BVUkVfXyovY3NzKFwiLmV1aUJhc2ljVGFibGVBY3Rpb24tc2hvd09uSG92ZXJ7b3BhY2l0eTowO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ub3JtYWwsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCI7fX0mOmZvY3VzLXdpdGhpbiwuZXVpVGFibGVSb3ctaGFzQWN0aW9uczpob3ZlciAmey5ldWlCYXNpY1RhYmxlQWN0aW9uLXNob3dPbkhvdmVye29wYWNpdHk6MTt9fTtsYWJlbDphY3Rpb25zO1wiKVxuICAgIH0sXG4gICAgbW9iaWxlOiB7XG4gICAgICBtb2JpbGU6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWluLXdpZHRoJywgJzUwJScpLCBcIjs7bGFiZWw6bW9iaWxlO1wiKSxcbiAgICAgIGVubGFyZ2U6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIjs7bGFiZWw6ZW5sYXJnZTtcIiksXG4gICAgICByaWdodENvbHVtbkNvbnRlbnQ6IFwiXFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICBcIi5jb25jYXQobG9naWNhbENTUygncmlnaHQnLCAwKSwgXCJcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWluLXdpZHRoJywgJzAnKSwgXCJcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCBtb2JpbGVTaXplcy5hY3Rpb25zLndpZHRoKSwgXCJcXG4gICAgICBcIiksXG4gICAgICBnZXQgYWN0aW9ucygpIHtcbiAgICAgICAgLy8gTm90ZTogVmlzaWJsZS1vbi1ob3ZlciBhY3Rpb25zIG9uIGRlc2t0b3AgYWx3YXlzIHNob3cgb24gbW9iaWxlXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3NzKHRoaXMucmlnaHRDb2x1bW5Db250ZW50LCBcIiBcIiwgbG9naWNhbENTUygndG9wJywgbW9iaWxlU2l6ZXMuYWN0aW9ucy5vZmZzZXQpLCBcIjs7bGFiZWw6YWN0aW9ucztcIik7XG4gICAgICB9LFxuICAgICAgZ2V0IGV4cGFuZGVyKCkge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL2Nzcyh0aGlzLnJpZ2h0Q29sdW1uQ29udGVudCwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2JvdHRvbScsIG1vYmlsZVNpemVzLmFjdGlvbnMub2Zmc2V0KSwgXCI7O2xhYmVsOmV4cGFuZGVyO1wiKTtcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIEN1c3RvbSBhY3Rpb25zIG1heSBub3QgYmUgaWNvbnMgYW5kIHRoZXJlZm9yZSBtYXkgbm90IGZpdCBpbiBhIGNvbHVtblxuICAgICAgICogSWYgdGhleSdyZSB0aGUgbGFzdCBjZWxsLCB3ZSBjYW4gY3JlYXRlIGEgcHNldWRvIFwicm93XCIvXCJib3JkZXItdG9wXCJcbiAgICAgICAqIHRoYXQgbWltaWNrcyB0aGUgdmlzdWFsIHNlcGFyYXRpb24gdGhhdCB0aGUgcmlnaHQgY29sdW1uIGhhc1xuICAgICAgICovXG4gICAgICBjdXN0b21BY3Rpb25zOiAvKiNfX1BVUkVfXyovY3NzKFwiJjpsYXN0LWNoaWxke1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiICY6OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCdob3Jpem9udGFsJywgMCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiksIFwiIGJhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmJvcmRlci5jb2xvciwgXCI7fS5ldWlUYWJsZUNlbGxDb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7fX07bGFiZWw6Y3VzdG9tQWN0aW9ucztcIilcbiAgICB9LFxuICAgIGV1aVRhYmxlUm93Q2VsbF9fbW9iaWxlSGVhZGVyOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHRUcnVuY2F0ZSgpLCBcIiBmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnLCB7XG4gICAgICBjdXN0b21TY2FsZTogJ3h4cydcbiAgICB9KS5mb250U2l6ZSwgXCI7ZGlzcGxheTpibG9jaztjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhcmtTaGFkZSwgXCI7cGFkZGluZzpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjtwYWRkaW5nLWJsb2NrLWVuZDowO21hcmdpbi1ibG9jay1lbmQ6LVwiLCBldWlUaGVtZS5zaXplLnMsIFwiOy5ldWlUYWJsZVJvd0NlbGw6bm90KDpvbmx5LWNoaWxkKSAme1wiLCBsb2dpY2FsQ1NTKCdtaW4taGVpZ2h0JywgZXVpVGhlbWUuc2l6ZS5sKSwgXCI7fTtsYWJlbDpldWlUYWJsZVJvd0NlbGxfX21vYmlsZUhlYWRlcjtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImFwcGVuZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSB9IGZyb20gJy4vbW9iaWxlL3Jlc3BvbnNpdmVfY29udGV4dCc7XG5pbXBvcnQgeyBldWlUYWJsZUNlbGxDaGVja2JveFN0eWxlcyB9IGZyb20gJy4vdGFibGVfY2VsbHNfc2hhcmVkLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVJvd0NlbGxDaGVja2JveCA9IGZ1bmN0aW9uIEV1aVRhYmxlUm93Q2VsbENoZWNrYm94KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBhcHBlbmQgPSBfcmVmLmFwcGVuZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSgpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFibGVDZWxsQ2hlY2tib3hTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUYWJsZVJvd0NlbGxDaGVja2JveCwgaXNSZXNwb25zaXZlID8gc3R5bGVzLm1vYmlsZSA6IHN0eWxlcy5kZXNrdG9wXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZVJvd0NlbGxDaGVja2JveCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGRcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlQ2VsbENvbnRlbnRcIlxuICB9LCBjaGlsZHJlbiksIGFwcGVuZCk7XG59O1xuRXVpVGFibGVSb3dDZWxsQ2hlY2tib3gucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImxvYWRpbmdcIiwgXCJpdGVtc1wiLCBcIml0ZW1JZFwiLCBcImNvbHVtbnNcIiwgXCJwYWdpbmF0aW9uXCIsIFwic29ydGluZ1wiLCBcInNlbGVjdGlvblwiLCBcIm9uQ2hhbmdlXCIsIFwiZXJyb3JcIiwgXCJub0l0ZW1zTWVzc2FnZVwiLCBcImNvbXByZXNzZWRcIiwgXCJpdGVtSWRUb0V4cGFuZGVkUm93TWFwXCIsIFwicmVzcG9uc2l2ZUJyZWFrcG9pbnRcIiwgXCJyb3dQcm9wc1wiLCBcImNlbGxQcm9wc1wiLCBcInRhYmxlQ2FwdGlvblwiLCBcInJvd0hlYWRlclwiLCBcInRhYmxlTGF5b3V0XCJdLFxuICBfZXhjbHVkZWQyID0gW1wiYWxpZ25cIiwgXCJyZW5kZXJcIiwgXCJkYXRhVHlwZVwiLCBcImlzRXhwYW5kZXJcIiwgXCJ0ZXh0T25seVwiLCBcIm5hbWVcIiwgXCJmaWVsZFwiLCBcImRlc2NyaXB0aW9uXCIsIFwic29ydGFibGVcIiwgXCJmb290ZXJcIiwgXCJtb2JpbGVPcHRpb25zXCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZm9ybWF0QXV0bywgZm9ybWF0Qm9vbGVhbiwgZm9ybWF0RGF0ZSwgZm9ybWF0TnVtYmVyLCBmb3JtYXRUZXh0LCBMRUZUX0FMSUdOTUVOVCwgUklHSFRfQUxJR05NRU5ULCBTb3J0RGlyZWN0aW9uLCBSZW5kZXJXaXRoRXVpVGhlbWUsIE92ZXJyaWRlQ29waWVkVGFidWxhckNvbnRlbnQsIHRhYnVsYXJDb3B5TWFya2VycyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb2JqZWN0cyc7XG5pbXBvcnQgeyBFdWlDaGVja2JveCB9IGZyb20gJy4uL2Zvcm0nO1xuaW1wb3J0IHsgRXVpQ29tcG9uZW50RGVmYXVsdHNDb250ZXh0IH0gZnJvbSAnLi4vcHJvdmlkZXIvY29tcG9uZW50X2RlZmF1bHRzJztcbmltcG9ydCB7IGV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzIH0gZnJvbSAnLi4vdGFibGUvdGFibGVfcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBFdWlUYWJsZSwgRXVpVGFibGVCb2R5LCBFdWlUYWJsZUZvb3RlciwgRXVpVGFibGVGb290ZXJDZWxsLCBFdWlUYWJsZUhlYWRlciwgRXVpVGFibGVIZWFkZXJDZWxsLCBFdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCwgRXVpVGFibGVIZWFkZXJNb2JpbGUsIEV1aVRhYmxlUm93LCBFdWlUYWJsZVJvd0NlbGwsIEV1aVRhYmxlUm93Q2VsbENoZWNrYm94LCBFdWlUYWJsZVNvcnRNb2JpbGUgfSBmcm9tICcuLi90YWJsZSc7XG5pbXBvcnQgeyBldWlUYWJsZUNhcHRpb25TdHlsZXMgfSBmcm9tICcuLi90YWJsZS90YWJsZS5zdHlsZXMnO1xuaW1wb3J0IHsgQ29sbGFwc2VkSXRlbUFjdGlvbnMgfSBmcm9tICcuL2NvbGxhcHNlZF9pdGVtX2FjdGlvbnMnO1xuaW1wb3J0IHsgRXhwYW5kZWRJdGVtQWN0aW9ucyB9IGZyb20gJy4vZXhwYW5kZWRfaXRlbV9hY3Rpb25zJztcbmltcG9ydCB7IFBhZ2luYXRpb25CYXIgfSBmcm9tICcuL3BhZ2luYXRpb25fYmFyJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aURlbGF5UmVuZGVyIH0gZnJvbSAnLi4vZGVsYXlfcmVuZGVyJztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgZXVpQmFzaWNUYWJsZUJvZHlMb2FkaW5nLCBzYWZhcmlMb2FkaW5nV29ya2Fyb3VuZCB9IGZyb20gJy4vYmFzaWNfdGFibGUuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgZGF0YVR5cGVzUHJvZmlsZXMgPSB7XG4gIGF1dG86IHtcbiAgICBhbGlnbjogTEVGVF9BTElHTk1FTlQsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXRBdXRvKHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIHN0cmluZzoge1xuICAgIGFsaWduOiBMRUZUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFRleHQodmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgbnVtYmVyOiB7XG4gICAgYWxpZ246IFJJR0hUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBib29sZWFuOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0Qm9vbGVhbih2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBkYXRlOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG59O1xudmFyIERBVEFfVFlQRVMgPSBPYmplY3Qua2V5cyhkYXRhVHlwZXNQcm9maWxlcyk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZCkge1xuICBpZiAoaXRlbUlkKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oaXRlbUlkKSkge1xuICAgICAgcmV0dXJuIGl0ZW1JZChpdGVtKTtcbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZSBuZXZlciBtaW5kIGFib3V0IHRoZSBpbmRleCBzaWduYXR1cmVcbiAgICByZXR1cm4gaXRlbVtpdGVtSWRdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRSb3dQcm9wcyhpdGVtLCByb3dQcm9wcykge1xuICBpZiAocm93UHJvcHMpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihyb3dQcm9wcykpIHtcbiAgICAgIHJldHVybiByb3dQcm9wcyhpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd1Byb3BzO1xuICB9XG4gIHJldHVybiB7fTtcbn1cbmZ1bmN0aW9uIGdldENlbGxQcm9wcyhpdGVtLCBjb2x1bW4sIGNlbGxQcm9wcykge1xuICBpZiAoY2VsbFByb3BzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oY2VsbFByb3BzKSkge1xuICAgICAgcmV0dXJuIGNlbGxQcm9wcyhpdGVtLCBjb2x1bW4pO1xuICAgIH1cbiAgICByZXR1cm4gY2VsbFByb3BzO1xuICB9XG4gIHJldHVybiB7fTtcbn1cbmZ1bmN0aW9uIGdldENvbHVtbkZvb3Rlcihjb2x1bW4sIF9yZWYpIHtcbiAgdmFyIGl0ZW1zID0gX3JlZi5pdGVtcyxcbiAgICBwYWdpbmF0aW9uID0gX3JlZi5wYWdpbmF0aW9uO1xuICB2YXIgX3JlZjIgPSBjb2x1bW4sXG4gICAgZm9vdGVyID0gX3JlZjIuZm9vdGVyO1xuICBpZiAoZm9vdGVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZm9vdGVyKSkge1xuICAgICAgcmV0dXJuIGZvb3Rlcih7XG4gICAgICAgIGl0ZW1zOiBpdGVtcyxcbiAgICAgICAgcGFnaW5hdGlvbjogcGFnaW5hdGlvblxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmb290ZXI7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGhhc1BhZ2luYXRpb24oeCkge1xuICByZXR1cm4geC5oYXNPd25Qcm9wZXJ0eSgncGFnaW5hdGlvbicpICYmICEheC5wYWdpbmF0aW9uO1xufVxuZXhwb3J0IHZhciBFdWlCYXNpY1RhYmxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aUJhc2ljVGFibGUocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUJhc2ljVGFibGUpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlCYXNpY1RhYmxlLCBbcHJvcHNdKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidGFibGVJZFwiLCBodG1sSWRHZW5lcmF0b3IoJ19fdGFibGUnKSgpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2VsZWN0QWxsSWRHZW5lcmF0b3JcIiwgaHRtbElkR2VuZXJhdG9yKCdfc2VsZWN0aW9uX2NvbHVtbi1jaGVja2JveCcpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVuZGVyU2VsZWN0QWxsXCIsIGZ1bmN0aW9uIChpc01vYmlsZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMuaXRlbXMsXG4gICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzLnNlbGVjdGlvbjtcbiAgICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBzZWxlY3RhYmxlSXRlbXMgPSBpdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuICFzZWxlY3Rpb24uc2VsZWN0YWJsZSB8fCBzZWxlY3Rpb24uc2VsZWN0YWJsZShpdGVtKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGNoZWNrZWQgPSBfdGhpcy5zdGF0ZS5zZWxlY3Rpb24gJiYgc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aCA+IDAgJiYgX3RoaXMuc3RhdGUuc2VsZWN0aW9uLmxlbmd0aCA9PT0gc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aDtcbiAgICAgIHZhciBpbmRldGVybWluYXRlID0gIWNoZWNrZWQgJiYgX3RoaXMuc3RhdGUuc2VsZWN0aW9uICYmIHNlbGVjdGFibGVJdGVtcy5sZW5ndGggPiAwICYmIF90aGlzLnN0YXRlLnNlbGVjdGlvbi5sZW5ndGggPiAwO1xuICAgICAgdmFyIGRpc2FibGVkID0gc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCAmJiAhaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNlbGVjdGlvbihzZWxlY3RhYmxlSXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNlbGVjdGlvbihbXSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuczogWydldWlCYXNpY1RhYmxlLnNlbGVjdEFsbFJvd3MnLCAnZXVpQmFzaWNUYWJsZS5kZXNlbGVjdFJvd3MnXSxcbiAgICAgICAgZGVmYXVsdHM6IFsnU2VsZWN0IGFsbCByb3dzJywgJ0Rlc2VsZWN0IHJvd3MnXVxuICAgICAgfSwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAyKSxcbiAgICAgICAgICBzZWxlY3RBbGxSb3dzID0gX3JlZjRbMF0sXG4gICAgICAgICAgZGVzZWxlY3RSb3dzID0gX3JlZjRbMV07XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNoZWNrYm94LCB7XG4gICAgICAgICAgaWQ6IF90aGlzLnNlbGVjdEFsbElkR2VuZXJhdG9yKCksXG4gICAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgICBpbmRldGVybWluYXRlOiBpbmRldGVybWluYXRlLFxuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNoZWNrYm94U2VsZWN0QWxsXCIsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGNoZWNrZWQgfHwgaW5kZXRlcm1pbmF0ZSA/IGRlc2VsZWN0Um93cyA6IHNlbGVjdEFsbFJvd3MsXG4gICAgICAgICAgdGl0bGU6IGNoZWNrZWQgfHwgaW5kZXRlcm1pbmF0ZSA/IGRlc2VsZWN0Um93cyA6IHNlbGVjdEFsbFJvd3MsXG4gICAgICAgICAgbGFiZWw6IGlzTW9iaWxlID8gc2VsZWN0QWxsUm93cyA6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVuZGVyQ29weUNoYXJcIiwgZnVuY3Rpb24gKGNvbHVtbkluZGV4KSB7XG4gICAgICB2YXIgaXNMYXN0Q29sdW1uID0gY29sdW1uSW5kZXggPT09IF90aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICAgIHJldHVybiBpc0xhc3RDb2x1bW4gPyB0YWJ1bGFyQ29weU1hcmtlcnMuaGlkZGVuTmV3bGluZSA6IHRhYnVsYXJDb3B5TWFya2Vycy5oaWRkZW5UYWI7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlc29sdmVDb2x1bW5Tb3J0RGlyZWN0aW9uXCIsIGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHZhciBzb3J0aW5nID0gX3RoaXMucHJvcHMuc29ydGluZztcbiAgICAgIHZhciBfcmVmNSA9IGNvbHVtbixcbiAgICAgICAgc29ydGFibGUgPSBfcmVmNS5zb3J0YWJsZSxcbiAgICAgICAgZmllbGQgPSBfcmVmNS5maWVsZCxcbiAgICAgICAgbmFtZSA9IF9yZWY1Lm5hbWU7XG4gICAgICBpZiAoIXNvcnRpbmcgfHwgIXNvcnRpbmcuc29ydCB8fCAhc29ydGFibGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHNvcnRpbmcuc29ydC5maWVsZCA9PT0gZmllbGQgfHwgc29ydGluZy5zb3J0LmZpZWxkID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiBzb3J0aW5nLnNvcnQuZGlyZWN0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZXNvbHZlQ29sdW1uT25Tb3J0XCIsIGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHZhciBzb3J0aW5nID0gX3RoaXMucHJvcHMuc29ydGluZztcbiAgICAgIHZhciBfcmVmNiA9IGNvbHVtbixcbiAgICAgICAgc29ydGFibGUgPSBfcmVmNi5zb3J0YWJsZSxcbiAgICAgICAgbmFtZSA9IF9yZWY2Lm5hbWU7XG4gICAgICBpZiAoIXNvcnRpbmcgfHwgIXNvcnRhYmxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghX3RoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFzaWNUYWJsZSBpcyBjb25maWd1cmVkIHRvIGJlIHNvcnRhYmxlIG9uIGNvbHVtbiBbXCIuY29uY2F0KG5hbWUsIFwiXSBidXRcXG4gICAgICAgICAgW29uQ2hhbmdlXSBpcyBub3QgY29uZmlndXJlZC4gVGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkIHRvIGhhbmRsZSB0aGUgc29ydCByZXF1ZXN0c1wiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub25Db2x1bW5Tb3J0Q2hhbmdlKGNvbHVtbik7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgLy8gdXNlZCBmb3IgY2hlY2tpbmcgaWYgIGluaXRpYWwgc2VsZWN0aW9uIGlzIHJlbmRlcmVkXG4gICAgICBpbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0aW9uOiBbXVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlCYXNpY1RhYmxlLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlCYXNpY1RhYmxlLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuZ2V0SW5pdGlhbFNlbGVjdGlvbigpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInBhZ2VTaXplXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgX3JlZjcsIF90aGlzJHByb3BzJHBhZ2luYXRpbywgX3RoaXMkcHJvcHMkcGFnaW5hdGlvMiwgX3RoaXMkY29udGV4dCRFdWlUYWJsO1xuICAgICAgcmV0dXJuIChfcmVmNyA9IChfdGhpcyRwcm9wcyRwYWdpbmF0aW8gPSAoX3RoaXMkcHJvcHMkcGFnaW5hdGlvMiA9IHRoaXMucHJvcHMucGFnaW5hdGlvbikgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkcGFnaW5hdGlvMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkcGFnaW5hdGlvMi5wYWdlU2l6ZSkgIT09IG51bGwgJiYgX3RoaXMkcHJvcHMkcGFnaW5hdGlvICE9PSB2b2lkIDAgPyBfdGhpcyRwcm9wcyRwYWdpbmF0aW8gOiAoX3RoaXMkY29udGV4dCRFdWlUYWJsID0gdGhpcy5jb250ZXh0LkV1aVRhYmxlUGFnaW5hdGlvbikgPT09IG51bGwgfHwgX3RoaXMkY29udGV4dCRFdWlUYWJsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRjb250ZXh0JEV1aVRhYmwuaXRlbXNQZXJQYWdlKSAhPT0gbnVsbCAmJiBfcmVmNyAhPT0gdm9pZCAwID8gX3JlZjcgOiBldWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cy5pdGVtc1BlclBhZ2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzU2VsZWN0aW9uQ29udHJvbGxlZFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJHNlbGVjdGlvbjtcbiAgICAgIHJldHVybiAhISgoX3RoaXMkcHJvcHMkc2VsZWN0aW9uID0gdGhpcy5wcm9wcy5zZWxlY3Rpb24pICE9PSBudWxsICYmIF90aGlzJHByb3BzJHNlbGVjdGlvbiAhPT0gdm9pZCAwICYmIF90aGlzJHByb3BzJHNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEluaXRpYWxTZWxlY3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SW5pdGlhbFNlbGVjdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uQ29udHJvbGxlZCkgcmV0dXJuO1xuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0aW9uICYmIHRoaXMucHJvcHMuc2VsZWN0aW9uLmluaXRpYWxTZWxlY3RlZCAmJiAhdGhpcy5zdGF0ZS5pbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQgJiYgdGhpcy5wcm9wcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5wcm9wcy5zZWxlY3Rpb24uaW5pdGlhbFNlbGVjdGVkLFxuICAgICAgICAgIGluaXRpYWxTZWxlY3Rpb25SZW5kZXJlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYnVpbGRDcml0ZXJpYVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZENyaXRlcmlhKHByb3BzKSB7XG4gICAgICB2YXIgY3JpdGVyaWEgPSB7fTtcbiAgICAgIGlmIChoYXNQYWdpbmF0aW9uKHByb3BzKSkge1xuICAgICAgICBjcml0ZXJpYS5wYWdlID0ge1xuICAgICAgICAgIGluZGV4OiBwcm9wcy5wYWdpbmF0aW9uLnBhZ2VJbmRleCxcbiAgICAgICAgICBzaXplOiB0aGlzLnBhZ2VTaXplXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuc29ydGluZykge1xuICAgICAgICBjcml0ZXJpYS5zb3J0ID0gcHJvcHMuc29ydGluZy5zb3J0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyaXRlcmlhO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjaGFuZ2VTZWxlY3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hhbmdlU2VsZWN0aW9uKGNoYW5nZWRTZWxlY3Rpb24pIHtcbiAgICAgIHZhciBfc2VsZWN0aW9uJG9uU2VsZWN0aW87XG4gICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5wcm9wcy5zZWxlY3Rpb247XG4gICAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuO1xuICAgICAgKF9zZWxlY3Rpb24kb25TZWxlY3RpbyA9IHNlbGVjdGlvbi5vblNlbGVjdGlvbkNoYW5nZSkgPT09IG51bGwgfHwgX3NlbGVjdGlvbiRvblNlbGVjdGlvID09PSB2b2lkIDAgfHwgX3NlbGVjdGlvbiRvblNlbGVjdGlvLmNhbGwoc2VsZWN0aW9uLCBjaGFuZ2VkU2VsZWN0aW9uKTtcbiAgICAgIGlmICghdGhpcy5pc1NlbGVjdGlvbkNvbnRyb2xsZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc2VsZWN0aW9uOiBjaGFuZ2VkU2VsZWN0aW9uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhclNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhclNlbGVjdGlvbigpIHtcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKFtdKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25QYWdlU2l6ZUNoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvblBhZ2VTaXplQ2hhbmdlKHNpemUpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHZhciBjdXJyZW50Q3JpdGVyaWEgPSB0aGlzLmJ1aWxkQ3JpdGVyaWEodGhpcy5wcm9wcyk7XG4gICAgICB2YXIgY3JpdGVyaWEgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGN1cnJlbnRDcml0ZXJpYSksIHt9LCB7XG4gICAgICAgIHBhZ2U6IHtcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICAvLyB3aGVuIHBhZ2Ugc2l6ZSBjaGFuZ2VzLCB3ZSB0YWtlIHRoZSB1c2VyIGJhY2sgdG8gdGhlIGZpcnN0IHBhZ2VcbiAgICAgICAgICBzaXplOiBzaXplXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShjcml0ZXJpYSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uUGFnZUNoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvblBhZ2VDaGFuZ2UoaW5kZXgpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHZhciBjdXJyZW50Q3JpdGVyaWEgPSB0aGlzLmJ1aWxkQ3JpdGVyaWEodGhpcy5wcm9wcyk7XG4gICAgICB2YXIgY3JpdGVyaWEgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGN1cnJlbnRDcml0ZXJpYSksIHt9LCB7XG4gICAgICAgIHBhZ2U6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudENyaXRlcmlhLnBhZ2UpLCB7fSwge1xuICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGNyaXRlcmlhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25Db2x1bW5Tb3J0Q2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ29sdW1uU29ydENoYW5nZShjb2x1bW4pIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHZhciBjdXJyZW50Q3JpdGVyaWEgPSB0aGlzLmJ1aWxkQ3JpdGVyaWEodGhpcy5wcm9wcyk7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gU29ydERpcmVjdGlvbi5BU0M7XG4gICAgICBpZiAoY3VycmVudENyaXRlcmlhICYmIGN1cnJlbnRDcml0ZXJpYS5zb3J0ICYmIChjdXJyZW50Q3JpdGVyaWEuc29ydC5maWVsZCA9PT0gY29sdW1uLmZpZWxkIHx8IGN1cnJlbnRDcml0ZXJpYS5zb3J0LmZpZWxkID09PSBjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gU29ydERpcmVjdGlvbi5yZXZlcnNlKGN1cnJlbnRDcml0ZXJpYS5zb3J0LmRpcmVjdGlvbik7XG4gICAgICB9XG4gICAgICB2YXIgY3JpdGVyaWEgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGN1cnJlbnRDcml0ZXJpYSksIHt9LCB7XG4gICAgICAgIC8vIHJlc2V0dGluZyB0aGUgcGFnZSBpZiB0aGUgY3JpdGVyaWEgaGFzIG9uZVxuICAgICAgICBwYWdlOiAhY3VycmVudENyaXRlcmlhLnBhZ2UgPyB1bmRlZmluZWQgOiB7XG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgc2l6ZTogY3VycmVudENyaXRlcmlhLnBhZ2Uuc2l6ZVxuICAgICAgICB9LFxuICAgICAgICBzb3J0OiB7XG4gICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCB8fCBjb2x1bW4ubmFtZSxcbiAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgY29tcGxleCByZWxhdGlvbnNoaXAgYmV0d2VlbiBwYWdpbmF0aW9uJ3MgZXhpc3RlbmNlIGFuZCBjcml0ZXJpYSwgdGhlIGNvZGUgbG9naWMgZW5zdXJlcyB0aGlzIGlzIGNvcnJlY3RseSBtYWludGFpbmVkXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoY3JpdGVyaWEpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgIGxvYWRpbmcgPSBfdGhpcyRwcm9wczIubG9hZGluZyxcbiAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wczIuaXRlbXMsXG4gICAgICAgIGl0ZW1JZCA9IF90aGlzJHByb3BzMi5pdGVtSWQsXG4gICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczIuY29sdW1ucyxcbiAgICAgICAgcGFnaW5hdGlvbiA9IF90aGlzJHByb3BzMi5wYWdpbmF0aW9uLFxuICAgICAgICBzb3J0aW5nID0gX3RoaXMkcHJvcHMyLnNvcnRpbmcsXG4gICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzMi5zZWxlY3Rpb24sXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMyLm9uQ2hhbmdlLFxuICAgICAgICBlcnJvciA9IF90aGlzJHByb3BzMi5lcnJvcixcbiAgICAgICAgbm9JdGVtc01lc3NhZ2UgPSBfdGhpcyRwcm9wczIubm9JdGVtc01lc3NhZ2UsXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczIuY29tcHJlc3NlZCxcbiAgICAgICAgaXRlbUlkVG9FeHBhbmRlZFJvd01hcCA9IF90aGlzJHByb3BzMi5pdGVtSWRUb0V4cGFuZGVkUm93TWFwLFxuICAgICAgICByZXNwb25zaXZlQnJlYWtwb2ludCA9IF90aGlzJHByb3BzMi5yZXNwb25zaXZlQnJlYWtwb2ludCxcbiAgICAgICAgcm93UHJvcHMgPSBfdGhpcyRwcm9wczIucm93UHJvcHMsXG4gICAgICAgIGNlbGxQcm9wcyA9IF90aGlzJHByb3BzMi5jZWxsUHJvcHMsXG4gICAgICAgIHRhYmxlQ2FwdGlvbiA9IF90aGlzJHByb3BzMi50YWJsZUNhcHRpb24sXG4gICAgICAgIHJvd0hlYWRlciA9IF90aGlzJHByb3BzMi5yb3dIZWFkZXIsXG4gICAgICAgIHRhYmxlTGF5b3V0ID0gX3RoaXMkcHJvcHMyLnRhYmxlTGF5b3V0LFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQmFzaWNUYWJsZScsIHtcbiAgICAgICAgJ2V1aUJhc2ljVGFibGUtbG9hZGluZyc6IGxvYWRpbmdcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgdGFibGUgPSB0aGlzLnJlbmRlclRhYmxlKCk7XG4gICAgICB2YXIgcGFnaW5hdGlvbkJhciA9IHRoaXMucmVuZGVyUGFnaW5hdGlvbkJhcigpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgIH0sIHJlc3QpLCB0YWJsZSwgcGFnaW5hdGlvbkJhcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczMuY29tcHJlc3NlZCxcbiAgICAgICAgcmVzcG9uc2l2ZUJyZWFrcG9pbnQgPSBfdGhpcyRwcm9wczMucmVzcG9uc2l2ZUJyZWFrcG9pbnQsXG4gICAgICAgIHRhYmxlTGF5b3V0ID0gX3RoaXMkcHJvcHMzLnRhYmxlTGF5b3V0LFxuICAgICAgICBsb2FkaW5nID0gX3RoaXMkcHJvcHMzLmxvYWRpbmc7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlck1vYmlsZSwge1xuICAgICAgICByZXNwb25zaXZlQnJlYWtwb2ludDogcmVzcG9uc2l2ZUJyZWFrcG9pbnRcbiAgICAgIH0sIHRoaXMucmVuZGVyU2VsZWN0QWxsKHRydWUpLCB0aGlzLnJlbmRlclRhYmxlTW9iaWxlU29ydCgpKSwgX19fRW1vdGlvbkpTWChPdmVycmlkZUNvcGllZFRhYnVsYXJDb250ZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlLCB7XG4gICAgICAgIGlkOiB0aGlzLnRhYmxlSWQsXG4gICAgICAgIHRhYmxlTGF5b3V0OiB0YWJsZUxheW91dCxcbiAgICAgICAgcmVzcG9uc2l2ZUJyZWFrcG9pbnQ6IHJlc3BvbnNpdmVCcmVha3BvaW50LFxuICAgICAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkLFxuICAgICAgICBjc3M6IGxvYWRpbmcgJiYgc2FmYXJpTG9hZGluZ1dvcmthcm91bmRcbiAgICAgIH0sIHRoaXMucmVuZGVyVGFibGVDYXB0aW9uKCksIHRoaXMucmVuZGVyVGFibGVIZWFkKCksIHRoaXMucmVuZGVyVGFibGVCb2R5KCksIHRoaXMucmVuZGVyVGFibGVGb290ZXIoKSkpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVNb2JpbGVTb3J0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlTW9iaWxlU29ydCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczQuY29sdW1ucyxcbiAgICAgICAgc29ydGluZyA9IF90aGlzJHByb3BzNC5zb3J0aW5nO1xuICAgICAgdmFyIGl0ZW1zID0gW107XG4gICAgICBpZiAoIXNvcnRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbiwgaW5kZXgpIHtcbiAgICAgICAgdmFyIF9jb2x1bW47XG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgJiYgc29ydGluZy5zb3J0ICYmICEhc29ydGluZy5lbmFibGVBbGxDb2x1bW5zICYmIGNvbHVtbi5zb3J0YWJsZSA9PSBudWxsKSB7XG4gICAgICAgICAgY29sdW1uID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjb2x1bW4pLCB7fSwge1xuICAgICAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbHVtbi5zb3J0YWJsZSB8fCAoKF9jb2x1bW4gPSBjb2x1bW4pID09PSBudWxsIHx8IF9jb2x1bW4gPT09IHZvaWQgMCB8fCAoX2NvbHVtbiA9IF9jb2x1bW4ubW9iaWxlT3B0aW9ucykgPT09IG51bGwgfHwgX2NvbHVtbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NvbHVtbi5zaG93KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNvcnREaXJlY3Rpb24gPSBfdGhpczIucmVzb2x2ZUNvbHVtblNvcnREaXJlY3Rpb24oY29sdW1uKTtcbiAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAga2V5OiBcIl9kYXRhX3NfXCIuY29uY2F0KFN0cmluZyhjb2x1bW4uZmllbGQpLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICBvblNvcnQ6IF90aGlzMi5yZXNvbHZlQ29sdW1uT25Tb3J0KGNvbHVtbiksXG4gICAgICAgICAgaXNTb3J0ZWQ6ICEhc29ydERpcmVjdGlvbixcbiAgICAgICAgICBpc1NvcnRBc2NlbmRpbmc6IHNvcnREaXJlY3Rpb24gPyBTb3J0RGlyZWN0aW9uLmlzQXNjKHNvcnREaXJlY3Rpb24pIDogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gaXRlbXMubGVuZ3RoID8gX19fRW1vdGlvbkpTWChFdWlUYWJsZVNvcnRNb2JpbGUsIHtcbiAgICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgICB9KSA6IG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlQ2FwdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUNhcHRpb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wczUuaXRlbXMsXG4gICAgICAgIHBhZ2luYXRpb24gPSBfdGhpcyRwcm9wczUucGFnaW5hdGlvbixcbiAgICAgICAgdGFibGVDYXB0aW9uID0gX3RoaXMkcHJvcHM1LnRhYmxlQ2FwdGlvbjtcbiAgICAgIHZhciBpdGVtQ291bnQgPSBpdGVtcy5sZW5ndGg7XG4gICAgICB2YXIgdG90YWxJdGVtQ291bnQgPSBwYWdpbmF0aW9uID8gcGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCA6IGl0ZW1Db3VudDtcbiAgICAgIHZhciBwYWdlID0gcGFnaW5hdGlvbiA/IHBhZ2luYXRpb24ucGFnZUluZGV4ICsgMSA6IDE7XG4gICAgICB2YXIgcGFnZUNvdW50ID0gcGFnaW5hdGlvbiA/IE1hdGguY2VpbChwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50IC8gdGhpcy5wYWdlU2l6ZSkgOiAxO1xuICAgICAgdmFyIGNhcHRpb25FbGVtZW50O1xuICAgICAgaWYgKHRhYmxlQ2FwdGlvbikge1xuICAgICAgICBpZiAocGFnaW5hdGlvbikge1xuICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlQ2FwdGlvbldpdGhQYWdpbmF0aW9uXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcInt0YWJsZUNhcHRpb259OyBQYWdlIHtwYWdlfSBvZiB7cGFnZUNvdW50fS5cIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICB0YWJsZUNhcHRpb246IHRhYmxlQ2FwdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICAgICAgcGFnZUNvdW50OiBwYWdlQ291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXB0aW9uRWxlbWVudCA9IHRhYmxlQ2FwdGlvbjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHBhZ2luYXRpb24pIHtcbiAgICAgICAgICBpZiAocGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUudGFibGVBdXRvQ2FwdGlvbldpdGhQYWdpbmF0aW9uXCIsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IFwiVGhpcyB0YWJsZSBjb250YWlucyB7aXRlbUNvdW50fSByb3dzIG91dCBvZiB7dG90YWxJdGVtQ291bnR9IHJvd3M7IFBhZ2Uge3BhZ2V9IG9mIHtwYWdlQ291bnR9LlwiLFxuICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICB0b3RhbEl0ZW1Db3VudDogdG90YWxJdGVtQ291bnQsXG4gICAgICAgICAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnQsXG4gICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICAgICAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS50YWJsZVNpbXBsZUF1dG9DYXB0aW9uV2l0aFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgICAgZGVmYXVsdDogXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3M7IFBhZ2Uge3BhZ2V9IG9mIHtwYWdlQ291bnR9LlwiLFxuICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudCxcbiAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXB0aW9uRWxlbWVudCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS50YWJsZUF1dG9DYXB0aW9uV2l0aG91dFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiVGhpcyB0YWJsZSBjb250YWlucyB7aXRlbUNvdW50fSByb3dzLlwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGl0ZW1Db3VudDogaXRlbUNvdW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJjYXB0aW9uXCIsIHtcbiAgICAgICAgY3NzOiBldWlUYWJsZUNhcHRpb25TdHlsZXMsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNhcHRpb25cIlxuICAgICAgfSwgdGFidWxhckNvcHlNYXJrZXJzLmhpZGRlbk5vQ29weUJvdW5kYXJ5LCBfX19FbW90aW9uSlNYKEV1aURlbGF5UmVuZGVyLCBudWxsLCBjYXB0aW9uRWxlbWVudCksIHRhYnVsYXJDb3B5TWFya2Vycy5oaWRkZW5Ob0NvcHlCb3VuZGFyeSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZUhlYWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyVGFibGVIZWFkKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNi5jb2x1bW5zLFxuICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczYuc2VsZWN0aW9uO1xuICAgICAgdmFyIGhlYWRlcnMgPSBbXTtcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3gsIHtcbiAgICAgICAgICBrZXk6IFwiX3NlbGVjdGlvbl9jb2x1bW5faFwiLFxuICAgICAgICAgIGFwcGVuZDogdGhpcy5yZW5kZXJDb3B5Q2hhcigtMSlcbiAgICAgICAgfSwgdGhpcy5yZW5kZXJTZWxlY3RBbGwoZmFsc2UpKSk7XG4gICAgICB9XG4gICAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbiwgaW5kZXgpIHtcbiAgICAgICAgdmFyIF9yZWY4ID0gY29sdW1uLFxuICAgICAgICAgIGZpZWxkID0gX3JlZjguZmllbGQsXG4gICAgICAgICAgd2lkdGggPSBfcmVmOC53aWR0aCxcbiAgICAgICAgICBuYW1lID0gX3JlZjgubmFtZSxcbiAgICAgICAgICBhbGlnbiA9IF9yZWY4LmFsaWduLFxuICAgICAgICAgIGRhdGFUeXBlID0gX3JlZjguZGF0YVR5cGUsXG4gICAgICAgICAgc29ydGFibGUgPSBfcmVmOC5zb3J0YWJsZSxcbiAgICAgICAgICBtb2JpbGVPcHRpb25zID0gX3JlZjgubW9iaWxlT3B0aW9ucyxcbiAgICAgICAgICByZWFkT25seSA9IF9yZWY4LnJlYWRPbmx5LFxuICAgICAgICAgIGRlc2NyaXB0aW9uID0gX3JlZjguZGVzY3JpcHRpb247XG4gICAgICAgIHZhciBjb2x1bW5BbGlnbiA9IGFsaWduIHx8IF90aGlzMy5nZXRBbGlnbkZvckRhdGFUeXBlKGRhdGFUeXBlKTtcbiAgICAgICAgdmFyIHNoYXJlZFByb3BzID0ge1xuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgbW9iaWxlT3B0aW9uczogbW9iaWxlT3B0aW9ucyxcbiAgICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgICAgYXBwZW5kOiBfdGhpczMucmVuZGVyQ29weUNoYXIoaW5kZXgpXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYWN0aW9ucyBjb2x1bW5cbiAgICAgICAgaWYgKGNvbHVtbi5hY3Rpb25zKSB7XG4gICAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsLCBfZXh0ZW5kcyh7fSwgc2hhcmVkUHJvcHMsIHtcbiAgICAgICAgICAgIGtleTogXCJfYWN0aW9uc19oX1wiLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgICBhbGlnbjogXCJyaWdodFwiXG4gICAgICAgICAgfSksIG5hbWUpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb21wdXRlZCBjb2x1bW5cbiAgICAgICAgaWYgKCFjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICB2YXIgX3NvcnRpbmcgPSB7fTtcbiAgICAgICAgICAvLyBjb21wdXRlZCBjb2x1bW5zIGFyZSBvbmx5IHNvcnRhYmxlIGlmIHRoZWlyIGBzb3J0YWJsZWAgaXMgYSBmdW5jdGlvblxuICAgICAgICAgIGlmIChfdGhpczMucHJvcHMuc29ydGluZyAmJiB0eXBlb2Ygc29ydGFibGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBzb3J0RGlyZWN0aW9uID0gX3RoaXMzLnJlc29sdmVDb2x1bW5Tb3J0RGlyZWN0aW9uKGNvbHVtbik7XG4gICAgICAgICAgICBfc29ydGluZy5pc1NvcnRlZCA9ICEhc29ydERpcmVjdGlvbjtcbiAgICAgICAgICAgIF9zb3J0aW5nLmlzU29ydEFzY2VuZGluZyA9IHNvcnREaXJlY3Rpb24gPyBTb3J0RGlyZWN0aW9uLmlzQXNjKHNvcnREaXJlY3Rpb24pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgX3NvcnRpbmcub25Tb3J0ID0gX3RoaXMzLnJlc29sdmVDb2x1bW5PblNvcnQoY29sdW1uKTtcbiAgICAgICAgICAgIF9zb3J0aW5nLnJlYWRPbmx5ID0gX3RoaXMzLnByb3BzLnNvcnRpbmcucmVhZE9ubHkgfHwgcmVhZE9ubHk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGhlYWRlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyQ2VsbCwgX2V4dGVuZHMoe30sIHNoYXJlZFByb3BzLCB7XG4gICAgICAgICAgICBrZXk6IFwiX2NvbXB1dGVkX2NvbHVtbl9oX1wiLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidGFibGVIZWFkZXJDZWxsX1wiLmNvbmNhdCh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgPyBuYW1lIDogJycsIFwiX1wiKS5jb25jYXQoaW5kZXgpXG4gICAgICAgICAgfSwgX3NvcnRpbmcpLCBuYW1lKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmllbGQgZGF0YSBjb2x1bW5cbiAgICAgICAgdmFyIHNvcnRpbmcgPSB7fTtcbiAgICAgICAgaWYgKF90aGlzMy5wcm9wcy5zb3J0aW5nKSB7XG4gICAgICAgICAgaWYgKF90aGlzMy5wcm9wcy5zb3J0aW5nLnNvcnQgJiYgISFfdGhpczMucHJvcHMuc29ydGluZy5lbmFibGVBbGxDb2x1bW5zICYmIGNvbHVtbi5zb3J0YWJsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb2x1bW4gPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNvbHVtbiksIHt9LCB7XG4gICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIF9yZWY5ID0gY29sdW1uLFxuICAgICAgICAgICAgX3NvcnRhYmxlID0gX3JlZjkuc29ydGFibGU7XG4gICAgICAgICAgaWYgKF9zb3J0YWJsZSkge1xuICAgICAgICAgICAgdmFyIF9zb3J0RGlyZWN0aW9uID0gX3RoaXMzLnJlc29sdmVDb2x1bW5Tb3J0RGlyZWN0aW9uKGNvbHVtbik7XG4gICAgICAgICAgICBzb3J0aW5nLmlzU29ydGVkID0gISFfc29ydERpcmVjdGlvbjtcbiAgICAgICAgICAgIHNvcnRpbmcuaXNTb3J0QXNjZW5kaW5nID0gX3NvcnREaXJlY3Rpb24gPyBTb3J0RGlyZWN0aW9uLmlzQXNjKF9zb3J0RGlyZWN0aW9uKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHNvcnRpbmcub25Tb3J0ID0gX3RoaXMzLnJlc29sdmVDb2x1bW5PblNvcnQoY29sdW1uKTtcbiAgICAgICAgICAgIHNvcnRpbmcucmVhZE9ubHkgPSBfdGhpczMucHJvcHMuc29ydGluZy5yZWFkT25seSB8fCByZWFkT25seTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsLCBfZXh0ZW5kcyh7fSwgc2hhcmVkUHJvcHMsIHtcbiAgICAgICAgICBrZXk6IFwiX2RhdGFfaF9cIi5jb25jYXQoU3RyaW5nKGZpZWxkKSwgXCJfXCIpLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyQ2VsbF9cIi5jb25jYXQoU3RyaW5nKGZpZWxkKSwgXCJfXCIpLmNvbmNhdChpbmRleClcbiAgICAgICAgfSwgc29ydGluZyksIG5hbWUpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXIsIG51bGwsIGhlYWRlcnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZUZvb3RlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUZvb3RlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSB0aGlzLnByb3BzLFxuICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzNy5pdGVtcyxcbiAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNy5jb2x1bW5zLFxuICAgICAgICBwYWdpbmF0aW9uID0gX3RoaXMkcHJvcHM3LnBhZ2luYXRpb24sXG4gICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzNy5zZWxlY3Rpb247XG4gICAgICB2YXIgZm9vdGVycyA9IFtdO1xuICAgICAgdmFyIGhhc0RlZmluZWRGb290ZXIgPSBmYWxzZTtcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFuIGVtcHR5IGNlbGwgdG8gY29tcGVuc2F0ZSBmb3IgYWRkaXRpb25hbCBzZWxlY3Rpb24gY29sdW1uXG4gICAgICAgIGZvb3RlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlRm9vdGVyQ2VsbCwge1xuICAgICAgICAgIGtleTogXCJfc2VsZWN0aW9uX2NvbHVtbl9mXCJcbiAgICAgICAgfSwgdW5kZWZpbmVkKSk7XG4gICAgICB9XG4gICAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICB2YXIgZm9vdGVyID0gZ2V0Q29sdW1uRm9vdGVyKGNvbHVtbiwge1xuICAgICAgICAgIGl0ZW1zOiBpdGVtcyxcbiAgICAgICAgICBwYWdpbmF0aW9uOiBwYWdpbmF0aW9uXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX3JlZjEwID0gY29sdW1uLFxuICAgICAgICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmMTAubW9iaWxlT3B0aW9ucyxcbiAgICAgICAgICBmaWVsZCA9IF9yZWYxMC5maWVsZCxcbiAgICAgICAgICBhbGlnbiA9IF9yZWYxMC5hbGlnbjtcbiAgICAgICAgaWYgKG1vYmlsZU9wdGlvbnMgIT09IG51bGwgJiYgbW9iaWxlT3B0aW9ucyAhPT0gdm9pZCAwICYmIG1vYmlsZU9wdGlvbnMub25seSkge1xuICAgICAgICAgIHJldHVybjsgLy8gZXhjbHVkZSBjb2x1bW5zIHRoYXQgb25seSBleGlzdCBmb3IgbW9iaWxlIGhlYWRlcnNcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9vdGVyKSB7XG4gICAgICAgICAgZm9vdGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVGb290ZXJDZWxsLCB7XG4gICAgICAgICAgICBrZXk6IFwiZm9vdGVyX1wiLmNvbmNhdChTdHJpbmcoZmllbGQpLCBcIl9cIikuY29uY2F0KGZvb3RlcnMubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICBhbGlnbjogYWxpZ25cbiAgICAgICAgICB9LCBmb290ZXIpKTtcbiAgICAgICAgICBoYXNEZWZpbmVkRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb290ZXIgaXMgdW5kZWZpbmVkLCBzbyBjcmVhdGUgYW4gZW1wdHkgY2VsbCB0byBwcmVzZXJ2ZSBsYXlvdXRcbiAgICAgICAgICBmb290ZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUZvb3RlckNlbGwsIHtcbiAgICAgICAgICAgIGtleTogXCJmb290ZXJfZW1wdHlfXCIuY29uY2F0KGZvb3RlcnMubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICBhbGlnbjogYWxpZ25cbiAgICAgICAgICB9LCB1bmRlZmluZWQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZm9vdGVycy5sZW5ndGggJiYgaGFzRGVmaW5lZEZvb3RlciA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVGb290ZXIsIG51bGwsIGZvb3RlcnMpIDogbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVCb2R5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlQm9keSgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzOCA9IHRoaXMucHJvcHMsXG4gICAgICAgIGVycm9yID0gX3RoaXMkcHJvcHM4LmVycm9yLFxuICAgICAgICBsb2FkaW5nID0gX3RoaXMkcHJvcHM4LmxvYWRpbmcsXG4gICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHM4Lml0ZW1zO1xuICAgICAgdmFyIGNvbnRlbnQ7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29udGVudCA9IHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRlbnQgPSB0aGlzLnJlbmRlckVtcHR5TWVzc2FnZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGVudCA9IGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICAvLyBpZiB0aGVyZSdzIHBhZ2luYXRpb24gdGhlIGl0ZW0ncyBpbmRleCBtdXN0IGJlIGFkanVzdGVkIHRvIHRoZSB3aGVyZSBpdCBpcyBpbiB0aGUgd2hvbGUgZGF0YXNldFxuICAgICAgICAgIHZhciB0YWJsZUl0ZW1JbmRleCA9IGhhc1BhZ2luYXRpb24oX3RoaXM0LnByb3BzKSAmJiBfdGhpczQucGFnZVNpemUgPiAwID8gX3RoaXM0LnByb3BzLnBhZ2luYXRpb24ucGFnZUluZGV4ICogX3RoaXM0LnBhZ2VTaXplICsgaW5kZXggOiBpbmRleDtcbiAgICAgICAgICByZXR1cm4gX3RoaXM0LnJlbmRlckl0ZW1Sb3coaXRlbSwgdGFibGVJdGVtSW5kZXgsIGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZW5kZXJXaXRoRXVpVGhlbWUsIG51bGwsIGZ1bmN0aW9uICh0aGVtZSkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZUJvZHksIHtcbiAgICAgICAgICBjc3M6IGxvYWRpbmcgJiYgZXVpQmFzaWNUYWJsZUJvZHlMb2FkaW5nKHRoZW1lKVxuICAgICAgICB9LCBjb250ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJFcnJvck1lc3NhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyRXJyb3JNZXNzYWdlKGVycm9yKSB7XG4gICAgICB2YXIgY29sU3BhbiA9IHRoaXMucHJvcHMuY29sdW1ucy5sZW5ndGggKyAodGhpcy5wcm9wcy5zZWxlY3Rpb24gPyAxIDogMCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvdywgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIHtcbiAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGNvbFNwYW46IGNvbFNwYW4sXG4gICAgICAgIG1vYmlsZU9wdGlvbnM6IHtcbiAgICAgICAgICB3aWR0aDogJzEwMCUnXG4gICAgICAgIH1cbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICB0eXBlOiBcIm1pbnVzSW5DaXJjbGVcIixcbiAgICAgICAgY29sb3I6IFwiZGFuZ2VyXCJcbiAgICAgIH0pLCBcIiBcIiwgZXJyb3IpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRW1wdHlNZXNzYWdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckVtcHR5TWVzc2FnZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHM5LmNvbHVtbnMsXG4gICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzOS5zZWxlY3Rpb24sXG4gICAgICAgIG5vSXRlbXNNZXNzYWdlID0gX3RoaXMkcHJvcHM5Lm5vSXRlbXNNZXNzYWdlO1xuICAgICAgdmFyIGNvbFNwYW4gPSBjb2x1bW5zLmxlbmd0aCArIChzZWxlY3Rpb24gPyAxIDogMCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvdywgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIHtcbiAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGNvbFNwYW46IGNvbFNwYW4sXG4gICAgICAgIG1vYmlsZU9wdGlvbnM6IHtcbiAgICAgICAgICB3aWR0aDogJzEwMCUnXG4gICAgICAgIH1cbiAgICAgIH0sIG5vSXRlbXNNZXNzYWdlKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1Sb3dcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbVJvdyhpdGVtLCByb3dJbmRleCwgZGlzcGxheWVkUm93SW5kZXgpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTAgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHMxMC5jb2x1bW5zLFxuICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczEwLnNlbGVjdGlvbixcbiAgICAgICAgcm93SGVhZGVyID0gX3RoaXMkcHJvcHMxMC5yb3dIZWFkZXIsXG4gICAgICAgIGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXAgPSBfdGhpcyRwcm9wczEwLml0ZW1JZFRvRXhwYW5kZWRSb3dNYXA7XG4gICAgICB2YXIgY2VsbHMgPSBbXTtcbiAgICAgIHZhciBpdGVtSWRDYWxsYmFjayA9IHRoaXMucHJvcHMuaXRlbUlkO1xuICAgICAgdmFyIGl0ZW1JZCA9IGdldEl0ZW1JZChpdGVtLCBpdGVtSWRDYWxsYmFjaykgIT0gbnVsbCA/IGdldEl0ZW1JZChpdGVtLCBpdGVtSWRDYWxsYmFjaykgOiByb3dJbmRleDtcbiAgICAgIHZhciBzZWxlY3RlZCA9ICFzZWxlY3Rpb24gPyBmYWxzZSA6IHRoaXMuc3RhdGUuc2VsZWN0aW9uICYmICEhdGhpcy5zdGF0ZS5zZWxlY3Rpb24uZmluZChmdW5jdGlvbiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgIHJldHVybiBnZXRJdGVtSWQoc2VsZWN0ZWRJdGVtLCBpdGVtSWRDYWxsYmFjaykgPT09IGl0ZW1JZDtcbiAgICAgIH0pO1xuICAgICAgdmFyIHJvd1NlbGVjdGlvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyRyZW5kZXJJdGVtU2VsZWMgPSB0aGlzLnJlbmRlckl0ZW1TZWxlY3Rpb25DZWxsKGl0ZW1JZCwgaXRlbSwgc2VsZWN0ZWQsIGRpc3BsYXllZFJvd0luZGV4KSxcbiAgICAgICAgICBfdGhpcyRyZW5kZXJJdGVtU2VsZWMyID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkcmVuZGVySXRlbVNlbGVjLCAyKSxcbiAgICAgICAgICBjaGVja2JveENlbGwgPSBfdGhpcyRyZW5kZXJJdGVtU2VsZWMyWzBdLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRyZW5kZXJJdGVtU2VsZWMyWzFdO1xuICAgICAgICBjZWxscy5wdXNoKGNoZWNrYm94Q2VsbCk7XG4gICAgICAgIHJvd1NlbGVjdGlvbkRpc2FibGVkID0gISFpc0Rpc2FibGVkO1xuICAgICAgfVxuICAgICAgdmFyIGhhc0FjdGlvbnMgPSBmYWxzZTtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uLCBjb2x1bW5JbmRleCkge1xuICAgICAgICB2YXIgY29sdW1uQWN0aW9ucyA9IGNvbHVtbi5hY3Rpb25zO1xuICAgICAgICBpZiAoY29sdW1uQWN0aW9ucykge1xuICAgICAgICAgIHZhciBoYXNDdXN0b21BY3Rpb25zID0gY29sdW1uQWN0aW9ucy5zb21lKGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiAhIWFjdGlvbi5yZW5kZXI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2VsbHMucHVzaChfdGhpczUucmVuZGVySXRlbUFjdGlvbnNDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCwgcm93SW5kZXgsIGhhc0N1c3RvbUFjdGlvbnMpKTtcbiAgICAgICAgICAvLyBBIHRhYmxlIHRoZW9yZXRpY2FsbHkgY291bGQgaGF2ZSBib3RoIGN1c3RvbSBhbmQgZGVmYXVsdCBhY3Rpb24gaXRlbXNcbiAgICAgICAgICAvLyBJZiBpdCBoYXMgYm90aCwgZGVmYXVsdCBhY3Rpb24gbW9iaWxlIHJvdyBzdHlsZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgY3VzdG9tXG4gICAgICAgICAgaGFzQWN0aW9ucyA9ICFoYXNBY3Rpb25zICYmIGhhc0N1c3RvbUFjdGlvbnMgPyAnY3VzdG9tJyA6IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgdmFyIGZpZWxkRGF0YUNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgICBjZWxscy5wdXNoKF90aGlzNS5yZW5kZXJJdGVtRmllbGREYXRhQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIGZpZWxkRGF0YUNvbHVtbi5maWVsZCA9PT0gcm93SGVhZGVyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2VsbHMucHVzaChfdGhpczUucmVuZGVySXRlbUNvbXB1dGVkQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIE9jY3VweSBmdWxsIHdpZHRoIG9mIHRhYmxlLCB0YWtpbmcgY2hlY2tib3ggJiBtb2JpbGUgb25seSBjb2x1bW5zIGludG8gYWNjb3VudC5cbiAgICAgIHZhciBleHBhbmRlZFJvd0NvbFNwYW4gPSBzZWxlY3Rpb24gPyBjb2x1bW5zLmxlbmd0aCArIDEgOiBjb2x1bW5zLmxlbmd0aDtcbiAgICAgIHZhciBtb2JpbGVPbmx5Q29scyA9IGNvbHVtbnMucmVkdWNlKGZ1bmN0aW9uIChudW0sIGNvbHVtbikge1xuICAgICAgICB2YXIgX21vYmlsZU9wdGlvbnM7XG4gICAgICAgIHJldHVybiBjb2x1bW4gIT09IG51bGwgJiYgY29sdW1uICE9PSB2b2lkIDAgJiYgKF9tb2JpbGVPcHRpb25zID0gY29sdW1uLm1vYmlsZU9wdGlvbnMpICE9PSBudWxsICYmIF9tb2JpbGVPcHRpb25zICE9PSB2b2lkIDAgJiYgX21vYmlsZU9wdGlvbnMub25seSA/IG51bSArIDEgOiBudW0gKyAwOyAvLyBCV0Mgb25seVxuICAgICAgfSwgMCk7XG4gICAgICBleHBhbmRlZFJvd0NvbFNwYW4gPSBleHBhbmRlZFJvd0NvbFNwYW4gLSBtb2JpbGVPbmx5Q29scztcblxuICAgICAgLy8gV2UnbGwgdXNlIHRoZSBJRCB0byBhc3NvY2lhdGUgdGhlIGV4cGFuZGVkIHJvdyB3aXRoIHRoZSBvcmlnaW5hbC5cbiAgICAgIHZhciBoYXNFeHBhbmRlZFJvdyA9IGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXAgPT09IG51bGwgfHwgaXRlbUlkVG9FeHBhbmRlZFJvd01hcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaXRlbUlkVG9FeHBhbmRlZFJvd01hcC5oYXNPd25Qcm9wZXJ0eShpdGVtSWQpO1xuICAgICAgdmFyIGV4cGFuZGVkUm93SWQgPSBoYXNFeHBhbmRlZFJvdyA/IFwicm93X1wiLmNvbmNhdChpdGVtSWQsIFwiX2V4cGFuc2lvblwiKSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBleHBhbmRlZFJvdyA9IGhhc0V4cGFuZGVkUm93ID8gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvdywge1xuICAgICAgICBpZDogZXhwYW5kZWRSb3dJZCxcbiAgICAgICAgaXNFeHBhbmRlZFJvdzogdHJ1ZSxcbiAgICAgICAgaGFzU2VsZWN0aW9uOiAhIXNlbGVjdGlvblxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIHtcbiAgICAgICAgY29sU3BhbjogZXhwYW5kZWRSb3dDb2xTcGFuLFxuICAgICAgICB0ZXh0T25seTogZmFsc2UsXG4gICAgICAgIGFwcGVuZDogdGFidWxhckNvcHlNYXJrZXJzLmhpZGRlbk5ld2xpbmVcbiAgICAgIH0sIGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXBbaXRlbUlkXSkpIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIHJvd1Byb3BzQ2FsbGJhY2sgPSB0aGlzLnByb3BzLnJvd1Byb3BzO1xuICAgICAgdmFyIHJvd1Byb3BzID0gZ2V0Um93UHJvcHMoaXRlbSwgcm93UHJvcHNDYWxsYmFjayk7XG4gICAgICB2YXIgcm93ID0gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvdywgX2V4dGVuZHMoe1xuICAgICAgICBcImFyaWEtb3duc1wiOiBleHBhbmRlZFJvd0lkLFxuICAgICAgICBoYXNTZWxlY3Rpb246ICEhc2VsZWN0aW9uLFxuICAgICAgICBpc1NlbGVjdGFibGU6ICFyb3dTZWxlY3Rpb25EaXNhYmxlZCxcbiAgICAgICAgaXNTZWxlY3RlZDogc2VsZWN0ZWQsXG4gICAgICAgIGhhc0FjdGlvbnM6IGhhc0FjdGlvbnMsXG4gICAgICAgIGlzRXhwYW5kYWJsZTogaGFzRXhwYW5kZWRSb3dcbiAgICAgIH0sIHJvd1Byb3BzKSwgY2VsbHMpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIHtcbiAgICAgICAga2V5OiBcInJvd19cIi5jb25jYXQoaXRlbUlkKVxuICAgICAgfSwgcm93LCBleHBhbmRlZFJvdyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1TZWxlY3Rpb25DZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1TZWxlY3Rpb25DZWxsKGl0ZW1JZCwgaXRlbSwgc2VsZWN0ZWQsIGRpc3BsYXllZFJvd0luZGV4KSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcbiAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnByb3BzLnNlbGVjdGlvbjtcbiAgICAgIHZhciBrZXkgPSBcIl9zZWxlY3Rpb25fY29sdW1uX1wiLmNvbmNhdChpdGVtSWQpO1xuICAgICAgdmFyIGNoZWNrZWQgPSBzZWxlY3RlZDtcbiAgICAgIHZhciBkaXNhYmxlZCA9IHNlbGVjdGlvbi5zZWxlY3RhYmxlICYmICFzZWxlY3Rpb24uc2VsZWN0YWJsZShpdGVtKTtcbiAgICAgIHZhciB0aXRsZSA9IHNlbGVjdGlvbi5zZWxlY3RhYmxlTWVzc2FnZSAmJiBzZWxlY3Rpb24uc2VsZWN0YWJsZU1lc3NhZ2UoIWRpc2FibGVkLCBpdGVtKTtcbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgIF90aGlzNi5jaGFuZ2VTZWxlY3Rpb24oW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShfdGhpczYuc3RhdGUuc2VsZWN0aW9uKSwgW2l0ZW1dKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGl0ZW1JZENhbGxiYWNrID0gX3RoaXM2LnByb3BzLml0ZW1JZDtcbiAgICAgICAgICBfdGhpczYuY2hhbmdlU2VsZWN0aW9uKF90aGlzNi5zdGF0ZS5zZWxlY3Rpb24ucmVkdWNlKGZ1bmN0aW9uIChzZWxlY3Rpb24sIHNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgaWYgKGdldEl0ZW1JZChzZWxlY3RlZEl0ZW0sIGl0ZW1JZENhbGxiYWNrKSAhPT0gaXRlbUlkKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGlvbi5wdXNoKHNlbGVjdGVkSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uO1xuICAgICAgICAgIH0sIFtdKSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gW19fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsQ2hlY2tib3gsIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGFwcGVuZDogdGhpcy5yZW5kZXJDb3B5Q2hhcigtMSlcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnNlbGVjdFRoaXNSb3dcIixcbiAgICAgICAgZGVmYXVsdDogXCJTZWxlY3Qgcm93IHtpbmRleH1cIixcbiAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgaW5kZXg6IGRpc3BsYXllZFJvd0luZGV4ICsgMVxuICAgICAgICB9XG4gICAgICB9LCBmdW5jdGlvbiAoc2VsZWN0VGhpc1Jvdykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDaGVja2JveCwge1xuICAgICAgICAgIGlkOiBcIlwiLmNvbmNhdChfdGhpczYudGFibGVJZCkuY29uY2F0KGtleSwgXCItY2hlY2tib3hcIiksXG4gICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgIGNoZWNrZWQ6IGNoZWNrZWQsXG4gICAgICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgICAgICAgIHRpdGxlOiB0aXRsZSB8fCBzZWxlY3RUaGlzUm93LFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiB0aXRsZSB8fCBzZWxlY3RUaGlzUm93LFxuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjaGVja2JveFNlbGVjdFJvdy1cIi5jb25jYXQoaXRlbUlkKVxuICAgICAgICB9KTtcbiAgICAgIH0pKSwgZGlzYWJsZWRdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQWN0aW9uc0NlbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbUFjdGlvbnNDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCwgcm93SW5kZXgsIGhhc0N1c3RvbUFjdGlvbnMpIHtcbiAgICAgIC8vIERpc2FibGUgYWxsIGFjdGlvbnMgaWYgYW55IHJvdyhzKSBhcmUgc2VsZWN0ZWRcbiAgICAgIHZhciBhbGxEaXNhYmxlZCA9IHRoaXMuc3RhdGUuc2VsZWN0aW9uLmxlbmd0aCA+IDA7XG4gICAgICB2YXIgYWN0dWFsQWN0aW9ucyA9IGNvbHVtbi5hY3Rpb25zLmZpbHRlcihmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiAhYWN0aW9uLmF2YWlsYWJsZSB8fCBhY3Rpb24uYXZhaWxhYmxlKGl0ZW0pO1xuICAgICAgfSk7XG4gICAgICBpZiAoYWN0dWFsQWN0aW9ucy5sZW5ndGggPiAyKSB7XG4gICAgICAgIGlmIChhbGxEaXNhYmxlZCkge1xuICAgICAgICAgIC8vIElmIGFsbCBhY3Rpb25zIGFyZSBkaXNhYmxlZCwgZG8gbm90IHNob3cgYW55IGFjdGlvbnMgYnV0IHRoZSBwb3BvdmVyIHRvZ2dsZVxuICAgICAgICAgIGFjdHVhbEFjdGlvbnMgPSBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpZiBhbnkgb2YgdGhlIGFjdGlvbnMgYGlzUHJpbWFyeWAsIGFkZCB0aGVtIGlubGluZSBhcyB3ZWxsLCBidXQgb25seSB0aGUgZmlyc3QgMixcbiAgICAgICAgICAvLyB3aGljaCB3ZSdsbCBmb3JjZSB0byBvbmx5IHNob3cgb24gaG92ZXIgZm9yIGRlc2t0b3Agdmlld3NcbiAgICAgICAgICB2YXIgcHJpbWFyeUFjdGlvbnMgPSBhY3R1YWxBY3Rpb25zLmZpbHRlcihmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLmlzUHJpbWFyeTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhY3R1YWxBY3Rpb25zID0gcHJpbWFyeUFjdGlvbnMuc2xpY2UoMCwgMikubWFwKGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFjdGlvbiksIHt9LCB7XG4gICAgICAgICAgICAgIHNob3dPbkhvdmVyOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgbW9yZSB0aGFuIDEgYWN0aW9uLCB3ZSBkb24ndCBzaG93IHRoZW0gYWxsIGluIHRoZSBjZWxsLCBpbnN0ZWFkIHdlXG4gICAgICAgIC8vIHB1dCB0aGVtIGFsbCBpbiBhIHBvcG92ZXIgdG9vbC4gVGhpcyBlZmZlY3RpdmVseSBtZWFucyB3ZSBjYW4gb25seSBoYXZlIGEgbWF4aW11bVxuICAgICAgICAvLyBvZiBvbmUgdG9vbCBwZXIgcm93IChpdCdzIGVpdGhlciBhbmQgbm9ybWFsIGFjdGlvbiwgb3IgaXQncyBhIHBvcG92ZXIgdGhhdCBzaG93cyBtdWx0aXBsZSBhY3Rpb25zKVxuICAgICAgICAvL1xuICAgICAgICAvLyBoZXJlIHdlIGNyZWF0ZSBhIHNpbmdsZSBjdXN0b20gYWN0aW9uIHRoYXQgdHJpZ2dlcnMgdGhlIHBvcG92ZXIgd2l0aCBhbGwgdGhlIGNvbmZpZ3VyZWQgYWN0aW9uc1xuXG4gICAgICAgIGFjdHVhbEFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgbmFtZTogJ0FsbCBhY3Rpb25zJyxcbiAgICAgICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChDb2xsYXBzZWRJdGVtQWN0aW9ucywge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFzaWNUYWJsZV9fY29sbGFwc2VkQWN0aW9uc1wiLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBjb2x1bW4uYWN0aW9ucyxcbiAgICAgICAgICAgICAgYWN0aW9uc0Rpc2FibGVkOiBhbGxEaXNhYmxlZCxcbiAgICAgICAgICAgICAgaXRlbUlkOiBpdGVtSWQsXG4gICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgIGRpc3BsYXllZFJvd0luZGV4OiByb3dJbmRleFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHZhciBrZXkgPSBcInJlY29yZF9hY3Rpb25zX1wiLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoY29sdW1uSW5kZXgpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsLCB7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBhbGlnbjogXCJyaWdodFwiLFxuICAgICAgICB0ZXh0T25seTogZmFsc2UsXG4gICAgICAgIGhhc0FjdGlvbnM6IGhhc0N1c3RvbUFjdGlvbnMgPyAnY3VzdG9tJyA6IHRydWUsXG4gICAgICAgIGFwcGVuZDogdGhpcy5yZW5kZXJDb3B5Q2hhcihjb2x1bW5JbmRleClcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXhwYW5kZWRJdGVtQWN0aW9ucywge1xuICAgICAgICBhY3Rpb25zOiBhY3R1YWxBY3Rpb25zLFxuICAgICAgICBhY3Rpb25zRGlzYWJsZWQ6IGFsbERpc2FibGVkLFxuICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgaXRlbTogaXRlbVxuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtRmllbGREYXRhQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtRmllbGREYXRhQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIHNldFNjb3BlUm93KSB7XG4gICAgICB2YXIgZmllbGQgPSBjb2x1bW4uZmllbGQsXG4gICAgICAgIHJlbmRlciA9IGNvbHVtbi5yZW5kZXIsXG4gICAgICAgIGRhdGFUeXBlID0gY29sdW1uLmRhdGFUeXBlO1xuICAgICAgdmFyIGtleSA9IFwiX2RhdGFfY29sdW1uX1wiLmNvbmNhdChTdHJpbmcoZmllbGQpLCBcIl9cIikuY29uY2F0KGl0ZW1JZCwgXCJfXCIpLmNvbmNhdChjb2x1bW5JbmRleCk7XG4gICAgICB2YXIgY29udGVudFJlbmRlcmVyID0gcmVuZGVyIHx8IHRoaXMuZ2V0UmVuZGVyZXJGb3JEYXRhVHlwZShkYXRhVHlwZSk7XG4gICAgICB2YXIgdmFsdWUgPSBnZXQoaXRlbSwgZmllbGQpO1xuICAgICAgdmFyIGNvbnRlbnQgPSBjb250ZW50UmVuZGVyZXIodmFsdWUsIGl0ZW0pO1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVySXRlbUNlbGwoaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCwga2V5LCBjb250ZW50LCBzZXRTY29wZVJvdyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1Db21wdXRlZENlbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbUNvbXB1dGVkQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgpIHtcbiAgICAgIHZhciByZW5kZXIgPSBjb2x1bW4ucmVuZGVyO1xuICAgICAgdmFyIGtleSA9IFwiX2NvbXB1dGVkX2NvbHVtbl9cIi5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGNvbHVtbkluZGV4KTtcbiAgICAgIHZhciBjb250ZW50UmVuZGVyZXIgPSByZW5kZXIgfHwgdGhpcy5nZXRSZW5kZXJlckZvckRhdGFUeXBlKCk7XG4gICAgICB2YXIgY29udGVudCA9IGNvbnRlbnRSZW5kZXJlcihpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckl0ZW1DZWxsKGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIGtleSwgY29udGVudCwgZmFsc2UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4LCBrZXksIGNvbnRlbnQsIHNldFNjb3BlUm93KSB7XG4gICAgICB2YXIgX21vYmlsZU9wdGlvbnMkcmVuZGVyLCBfbW9iaWxlT3B0aW9ucyRoZWFkZXI7XG4gICAgICB2YXIgX3JlZjExID0gY29sdW1uLFxuICAgICAgICBhbGlnbiA9IF9yZWYxMS5hbGlnbixcbiAgICAgICAgcmVuZGVyID0gX3JlZjExLnJlbmRlcixcbiAgICAgICAgZGF0YVR5cGUgPSBfcmVmMTEuZGF0YVR5cGUsXG4gICAgICAgIGlzRXhwYW5kZXIgPSBfcmVmMTEuaXNFeHBhbmRlcixcbiAgICAgICAgdGV4dE9ubHkgPSBfcmVmMTEudGV4dE9ubHksXG4gICAgICAgIG5hbWUgPSBfcmVmMTEubmFtZSxcbiAgICAgICAgZmllbGQgPSBfcmVmMTEuZmllbGQsXG4gICAgICAgIGRlc2NyaXB0aW9uID0gX3JlZjExLmRlc2NyaXB0aW9uLFxuICAgICAgICBzb3J0YWJsZSA9IF9yZWYxMS5zb3J0YWJsZSxcbiAgICAgICAgZm9vdGVyID0gX3JlZjExLmZvb3RlcixcbiAgICAgICAgbW9iaWxlT3B0aW9ucyA9IF9yZWYxMS5tb2JpbGVPcHRpb25zLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYxMSwgX2V4Y2x1ZGVkMik7XG4gICAgICB2YXIgY29sdW1uQWxpZ24gPSBhbGlnbiB8fCB0aGlzLmdldEFsaWduRm9yRGF0YVR5cGUoZGF0YVR5cGUpO1xuICAgICAgdmFyIGNlbGxQcm9wc0NhbGxiYWNrID0gdGhpcy5wcm9wcy5jZWxsUHJvcHM7XG4gICAgICB2YXIgY2VsbFByb3BzID0gZ2V0Q2VsbFByb3BzKGl0ZW0sIGNvbHVtbiwgY2VsbFByb3BzQ2FsbGJhY2spO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgIGlzRXhwYW5kZXI6IGlzRXhwYW5kZXIsXG4gICAgICAgIHRleHRPbmx5OiB0ZXh0T25seSB8fCAhcmVuZGVyLFxuICAgICAgICBzZXRTY29wZVJvdzogc2V0U2NvcGVSb3csXG4gICAgICAgIG1vYmlsZU9wdGlvbnM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbW9iaWxlT3B0aW9ucyksIHt9LCB7XG4gICAgICAgICAgcmVuZGVyOiBtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCB8fCAoX21vYmlsZU9wdGlvbnMkcmVuZGVyID0gbW9iaWxlT3B0aW9ucy5yZW5kZXIpID09PSBudWxsIHx8IF9tb2JpbGVPcHRpb25zJHJlbmRlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogX21vYmlsZU9wdGlvbnMkcmVuZGVyLmNhbGwobW9iaWxlT3B0aW9ucywgaXRlbSksXG4gICAgICAgICAgaGVhZGVyOiAoX21vYmlsZU9wdGlvbnMkaGVhZGVyID0gbW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLmhlYWRlcikgIT09IG51bGwgJiYgX21vYmlsZU9wdGlvbnMkaGVhZGVyICE9PSB2b2lkIDAgPyBfbW9iaWxlT3B0aW9ucyRoZWFkZXIgOiBuYW1lXG4gICAgICAgIH0pXG4gICAgICB9LCBjZWxsUHJvcHMsIHJlc3QsIHtcbiAgICAgICAgYXBwZW5kOiB0aGlzLnJlbmRlckNvcHlDaGFyKGNvbHVtbkluZGV4KVxuICAgICAgfSksIGNvbnRlbnQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZW5kZXJlckZvckRhdGFUeXBlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVyRm9yRGF0YVR5cGUoKSB7XG4gICAgICB2YXIgZGF0YVR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdhdXRvJztcbiAgICAgIHZhciBwcm9maWxlID0gZGF0YVR5cGVzUHJvZmlsZXNbZGF0YVR5cGVdO1xuICAgICAgaWYgKCFwcm9maWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZGF0YVR5cGUgW1wiLmNvbmNhdChkYXRhVHlwZSwgXCJdLiBUaGUgc3VwcG9ydGVkIGRhdGEgdHlwZXMgYXJlIFtcIikuY29uY2F0KERBVEFfVFlQRVMuam9pbignLCAnKSwgXCJdXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9maWxlLnJlbmRlcjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0QWxpZ25Gb3JEYXRhVHlwZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBbGlnbkZvckRhdGFUeXBlKCkge1xuICAgICAgdmFyIGRhdGFUeXBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnYXV0byc7XG4gICAgICB2YXIgcHJvZmlsZSA9IGRhdGFUeXBlc1Byb2ZpbGVzW2RhdGFUeXBlXTtcbiAgICAgIGlmICghcHJvZmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlIFtcIi5jb25jYXQoZGF0YVR5cGUsIFwiXS4gVGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzIGFyZSBbXCIpLmNvbmNhdChEQVRBX1RZUEVTLmpvaW4oJywgJyksIFwiXVwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZmlsZS5hbGlnbjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyUGFnaW5hdGlvbkJhclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJQYWdpbmF0aW9uQmFyKCkge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGVycm9yID0gX3RoaXMkcHJvcHMxMS5lcnJvcixcbiAgICAgICAgcGFnaW5hdGlvbiA9IF90aGlzJHByb3BzMTEucGFnaW5hdGlvbixcbiAgICAgICAgdGFibGVDYXB0aW9uID0gX3RoaXMkcHJvcHMxMS50YWJsZUNhcHRpb24sXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMxMS5vbkNoYW5nZTtcbiAgICAgIGlmICghZXJyb3IgJiYgcGFnaW5hdGlvbiAmJiBwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50ID4gMCkge1xuICAgICAgICBpZiAoIW9uQ2hhbmdlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIEJhc2ljIFRhYmxlIGlzIGNvbmZpZ3VyZWQgd2l0aCBwYWdpbmF0aW9uIGJ1dCBbb25DaGFuZ2VdIGlzXFxuICAgICAgICBub3QgY29uZmlndXJlZC4gVGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkIHRvIGhhbmRsZSBwYWdpbmF0aW9uIGNoYW5nZXNcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUudGFibGVQYWdpbmF0aW9uXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJQYWdpbmF0aW9uIGZvciB0YWJsZToge3RhYmxlQ2FwdGlvbn1cIixcbiAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgIHRhYmxlQ2FwdGlvbjogdGFibGVDYXB0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAodGFibGVQYWdpbmF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJhciwge1xuICAgICAgICAgICAgcGFnaW5hdGlvbjogcGFnaW5hdGlvbixcbiAgICAgICAgICAgIG9uUGFnZVNpemVDaGFuZ2U6IF90aGlzNy5vblBhZ2VTaXplQ2hhbmdlLmJpbmQoX3RoaXM3KSxcbiAgICAgICAgICAgIG9uUGFnZUNoYW5nZTogX3RoaXM3Lm9uUGFnZUNoYW5nZS5iaW5kKF90aGlzNyksXG4gICAgICAgICAgICBcImFyaWEtY29udHJvbHNcIjogX3RoaXM3LnRhYmxlSWQsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogdGFibGVQYWdpbmF0aW9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIGlmICghbmV4dFByb3BzLnNlbGVjdGlvbikge1xuICAgICAgICAvLyBuZXh0IHByb3BzIGRvZXNuJ3QgaGF2ZSBhIHNlbGVjdGlvbiwgcmVzZXQgb3VyIHN0YXRlXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2VsZWN0aW9uOiBbXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIGNvbnRyb2xsZWRTZWxlY3Rpb24gPSBuZXh0UHJvcHMuc2VsZWN0aW9uLnNlbGVjdGVkO1xuICAgICAgdmFyIHVuZmlsdGVyZWRTZWxlY3Rpb24gPSBjb250cm9sbGVkU2VsZWN0aW9uICE9PSBudWxsICYmIGNvbnRyb2xsZWRTZWxlY3Rpb24gIT09IHZvaWQgMCA/IGNvbnRyb2xsZWRTZWxlY3Rpb24gOiBwcmV2U3RhdGUuc2VsZWN0aW9uO1xuXG4gICAgICAvLyBFbnN1cmUgd2UncmUgbm90IGluY2x1ZGluZyBzZWxlY3Rpb25zIHRoYXQgYXJlbid0IGluIHRoZVxuICAgICAgLy8gY3VycmVudCBgaXRlbXNgIGFycmF5IChhZmZlY3RlZCBieSBwYWdpbmF0aW9uKVxuICAgICAgdmFyIGl0ZW1JZCA9IG5leHRQcm9wcy5pdGVtSWQsXG4gICAgICAgIGl0ZW1zID0gbmV4dFByb3BzLml0ZW1zO1xuICAgICAgdmFyIHNlbGVjdGlvbiA9IHVuZmlsdGVyZWRTZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uIChzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbmRJbmRleChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBnZXRJdGVtSWQoaXRlbSwgaXRlbUlkKSA9PT0gZ2V0SXRlbUlkKHNlbGVjdGVkSXRlbSwgaXRlbUlkKTtcbiAgICAgICAgfSkgIT09IC0xO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIHNvbWUgc2VsZWN0ZWQgaXRlbXMgd2VyZSBmaWx0ZXJlZCBvdXQsIHVwZGF0ZSBzdGF0ZSBhbmQgY2FsbGJhY2tcbiAgICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoICE9PSB1bmZpbHRlcmVkU2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICB2YXIgX25leHRQcm9wcyRzZWxlY3Rpb24kLCBfbmV4dFByb3BzJHNlbGVjdGlvbjtcbiAgICAgICAgKF9uZXh0UHJvcHMkc2VsZWN0aW9uJCA9IChfbmV4dFByb3BzJHNlbGVjdGlvbiA9IG5leHRQcm9wcy5zZWxlY3Rpb24pLm9uU2VsZWN0aW9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfbmV4dFByb3BzJHNlbGVjdGlvbiQgPT09IHZvaWQgMCB8fCBfbmV4dFByb3BzJHNlbGVjdGlvbiQuY2FsbChfbmV4dFByb3BzJHNlbGVjdGlvbiwgc2VsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZWxlY3Rpb246IHNlbGVjdGlvblxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBBbHdheXMgdXBkYXRlIHNlbGVjdGlvbiBzdGF0ZSBmcm9tIHByb3BzIGlmIGNvbnRyb2xsZWRcbiAgICAgIGlmIChjb250cm9sbGVkU2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb25cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aUJhc2ljVGFibGUsIFwiY29udGV4dFR5cGVcIiwgRXVpQ29tcG9uZW50RGVmYXVsdHNDb250ZXh0KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlCYXNpY1RhYmxlLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHRhYmxlTGF5b3V0OiAnZml4ZWQnLFxuICBub0l0ZW1zTWVzc2FnZTogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS5ub0l0ZW1zTWVzc2FnZVwiLFxuICAgIGRlZmF1bHQ6IFwiTm8gaXRlbXMgZm91bmRcIlxuICB9KVxufSk7XG5FdWlCYXNpY1RhYmxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyBob3cgdG8gZXh0cmFjdCBhIHVuaXF1ZSBJRCBmcm9tIGVhY2ggaXRlbSwgdXNlZCBmb3Igc2VsZWN0aW9ucyAmIGV4cGFuZGVkIHJvd3NcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRGVzY3JpYmVzIGhvdyB0byBleHRyYWN0IGEgdW5pcXVlIElEIGZyb20gZWFjaCBpdGVtLCB1c2VkIGZvciBzZWxlY3Rpb25zICYgZXhwYW5kZWQgcm93c1xuICAgICAqL1xuICBpdGVtSWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIFJvdyBleHBhbnNpb24gdXNlcyB0aGUgaXRlbUlkIHByb3AgdG8gaWRlbnRpZnkgZWFjaCByb3dcbiAgICAgKi9cbiAgLyoqXG4gICAgICogUm93IGV4cGFuc2lvbiB1c2VzIHRoZSBpdGVtSWQgcHJvcCB0byBpZGVudGlmeSBlYWNoIHJvd1xuICAgICAqL1xuICBpdGVtSWRUb0V4cGFuZGVkUm93TWFwOiBQcm9wVHlwZXMuc2hhcGUoe30pLFxuICAvKipcbiAgICAgKiBBIGxpc3Qgb2Ygb2JqZWN0cyB0byBhcHBlYXIgaW4gdGhlIHRhYmxlIC0gYW4gaXRlbSBwZXIgcm93XG4gICAgICovXG4gIC8qKlxuICAgICAqIEEgbGlzdCBvZiBvYmplY3RzIHRvIGFwcGVhciBpbiB0aGUgdGFibGUgLSBhbiBpdGVtIHBlciByb3dcbiAgICAgKi9cbiAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gYEV1aVRhYmxlUm93Q2VsbGBcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQXBwbGllZCB0byBgRXVpVGFibGVSb3dDZWxsYFxuICAgICAqL1xuICBjZWxsUHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBvbmUgb2YgdGhlIG9iamVjdHM6ICNFdWlUYWJsZUZpZWxkRGF0YUNvbHVtblR5cGUsICNFdWlUYWJsZUNvbXB1dGVkQ29sdW1uVHlwZSBvciAjRXVpVGFibGVBY3Rpb25zQ29sdW1uVHlwZS5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygb25lIG9mIHRoZSBvYmplY3RzOiAjRXVpVGFibGVGaWVsZERhdGFDb2x1bW5UeXBlLCAjRXVpVGFibGVDb21wdXRlZENvbHVtblR5cGUgb3IgI0V1aVRhYmxlQWN0aW9uc0NvbHVtblR5cGUuXG4gICAgICovXG4gIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBIGZpZWxkIG9mIHRoZSBpdGVtIChtYXkgYmUgYSBuZXN0ZWQgZmllbGQpXG4gICAgICAgKi9cbiAgICAvLyB0eXBlIGhhY2sgdXNlZCBmb3IgYmV0dGVyIGF1dG9jb21wbGV0ZSBzdXBwb3J0XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yOTcyOVxuICAgIGZpZWxkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgLy8gc3VwcG9ydHMgb3V0ZXIuaW5uZXIga2V5IHBhdGhzXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgLyoqXG4gICAgICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBjb2x1bW4gKHdpbGwgYmUgcHJlc2VudGVkIGFzIGEgdGl0bGUgb3ZlciB0aGUgY29sdW1uIGhlYWRlcilcbiAgICAgICAqL1xuICAgIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8qKlxuICAgICAgICogRGVzY3JpYmVzIHRoZSBkYXRhIHR5cGVzIG9mIHRoZSBkaXNwbGF5ZWQgdmFsdWUgKHNlcnZlcyBhcyBhIHJlbmRlcmluZyBoaW50IGZvciB0aGUgdGFibGUpXG4gICAgICAgKi9cbiAgICBkYXRhVHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImF1dG9cIiwgXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJib29sZWFuXCIsIFwiZGF0ZVwiXSksXG4gICAgLyoqXG4gICAgICAgKiBBIENTUyB3aWR0aCBwcm9wZXJ0eS4gSGludHMgZm9yIHRoZSByZXF1aXJlZCB3aWR0aCBvZiB0aGUgY29sdW1uIChlLmcuIFwiMzAlXCIsIFwiMTAwcHhcIiwgZXRjLi4pXG4gICAgICAgKi9cbiAgICB3aWR0aDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvKipcbiAgICAgICAqIERlZmluZXMgd2hldGhlciB0aGUgdXNlciBjYW4gc29ydCBvbiB0aGlzIGNvbHVtbi4gSWYgYSBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSB0byBzb3J0IGFnYWluc3RcbiAgICAgICAqL1xuICAgIHNvcnRhYmxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gICAgLyoqXG4gICAgICAgKiBEaXNhYmxlcyB0aGUgdXNlcidzIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSBzb3J0LCBidXQgd2lsbCBzdGlsbFxuICAgICAgICogc2hvdyB0aGUgY3VycmVudCBzb3J0IGRpcmVjdGlvbiBpbiB0aGUgY29sdW1uIGhlYWRlclxuICAgICAgICovXG4gICAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogRGVmaW5lcyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgdGhlIGNvbHVtblxuICAgICAgICogQGRlZmF1bHQgbGVmdFxuICAgICAgICovXG4gICAgYWxpZ246IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGEgdGV4dCB3cmFwcGVyIGFyb3VuZCBjZWxsIGNvbnRlbnQgdGhhdCBoZWxwcyB3b3JkIGJyZWFrIG9yIHRydW5jYXRlXG4gICAgICAgKiBsb25nIHRleHQgY29ycmVjdGx5LlxuICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICovXG4gICAgdGV4dE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjb2x1bW4gc2hvdWxkIHRydW5jYXRlIG92ZXJmbG93aW5nIHRleHQgY29udGVudC5cbiAgICAgICAqIC0gU2V0IHRvIGB0cnVlYCB0byBlbmFibGUgc2luZ2xlLWxpbmUgdHJ1bmNhdGlvbi5cbiAgICAgICAqIC0gVG8gZW5hYmxlIG11bHRpLWxpbmUgdHJ1bmNhdGlvbiwgdXNlIGEgY29uZmlndXJhdGlvbiBvYmplY3Qgd2l0aCBgbGluZXNgXG4gICAgICAgKiBzZXQgdG8gYSBudW1iZXIgb2YgbGluZXMgdG8gdHJ1bmNhdGUgdG8uXG4gICAgICAgKi9cbiAgICB0cnVuY2F0ZVRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBsaW5lczogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogQWxsb3dzIGNvbmZpZ3VyaW5nIGN1c3RvbSByZW5kZXIgb3B0aW9ucyBvciBhcHBlYXJhbmNlcyBmb3IgY29sdW1uIGNlbGxzXG4gICAgICAgKiB3aGVuIHRoZSB0YWJsZSByZXNwb25zaXZlbHkgY29sbGFwc2VzIGludG8gYSBtb2JpbGUtZnJpZW5kbHkgdmlld1xuICAgICAgICovXG4gICAgbW9iaWxlT3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmNcbiAgICB9KSxcbiAgICAvKipcbiAgICAgICAqIERlc2NyaWJlIGEgY3VzdG9tIHJlbmRlcmVyIGZ1bmN0aW9uIGZvciB0aGUgY29udGVudFxuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIENvbnRlbnQgdG8gZGlzcGxheSBpbiB0aGUgZm9vdGVyIGJlbmVhdGggdGhpcyBjb2x1bW5cbiAgICAgICAqL1xuICAgIGZvb3RlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gICAgLyoqXG4gICAgICAgKiBJZiBwYXNzaW5nIGBpdGVtSWRUb0V4cGFuZGVkUm93TWFwYCB0byB5b3VyIHRhYmxlLCBzZXQgdGhpcyBmbGFnIHRvIGB0cnVlYFxuICAgICAgICogZm9yIHRoZSBjdXN0b20gY29sdW1uIG9yIGNlbGwgdXNlZCB0byB0b2dnbGUgdGhlIGV4cGFuZGVkIHJvdy5cbiAgICAgICAqL1xuICAgIGlzRXhwYW5kZXI6IFByb3BUeXBlcy5ib29sLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgICAqIEEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyB0aGUgdmFsdWUgZm9yIGVhY2ggaXRlbSBhbmQgcmVuZGVycyBpdFxuICAgICAgICAgKi9cbiAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgLyoqXG4gICAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGNvbHVtblxuICAgICAgICAgKi9cbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZSxcbiAgICAvKipcbiAgICAgICAgICogSWYgcHJvdmlkZWQsIGFsbG93cyB0aGlzIGNvbHVtbiB0byBiZSBzb3J0ZWQgb24uIE11c3QgcmV0dXJuIHRoZSB2YWx1ZSB0byBzb3J0IGFnYWluc3QuXG4gICAgICAgICAqL1xuICAgIHNvcnRhYmxlOiBQcm9wVHlwZXMuZnVuY1xuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogQW4gYXJyYXkgb2Ygb25lIG9mIHRoZSBvYmplY3RzOiAjRGVmYXVsdEl0ZW1BY3Rpb24gb3IgI0N1c3RvbUl0ZW1BY3Rpb25cbiAgICAgICAqL1xuICAgIGFjdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgICAvKipcbiAgICAgICAgICogVGhlIHR5cGUgb2YgYWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImJ1dHRvblwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJpY29uXCJdKS5pc1JlcXVpcmVkXSksXG4gICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgY29sb3Igb2YgdGhlIGJ1dHRvblxuICAgICAgICAgKi9cbiAgICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcbiAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBhY3Rpb24gKHdpbGwgcmVuZGVyIGFzIHZpc2libGUgdGV4dCBpZiByZW5kZXJlZCB3aXRoaW4gYSBjb2xsYXBzZWQgbWVudSlcbiAgICAgICAgICovXG4gICAgICAvKipcbiAgICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgYWN0aW9uICh3aWxsIHJlbmRlciBhcyB2aXNpYmxlIHRleHQgaWYgcmVuZGVyZWQgd2l0aGluIGEgY29sbGFwc2VkIG1lbnUpXG4gICAgICAgICAqL1xuICAgICAgbmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgICAvKipcbiAgICAgICAgICogRGVzY3JpYmVzIHRoZSBhY3Rpb24gKHdpbGwgcmVuZGVyIGFzIHRvb2x0aXAgY29udGVudClcbiAgICAgICAgICovXG4gICAgICAvKipcbiAgICAgICAgICogRGVzY3JpYmVzIHRoZSBhY3Rpb24gKHdpbGwgcmVuZGVyIGFzIHRvb2x0aXAgY29udGVudClcbiAgICAgICAgICovXG4gICAgICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGhhbmRsZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgYWN0aW9uLiBQYXNzZXMgYmFjayB0aGUgY3VycmVudCByb3dcbiAgICAgICAgICogaXRlbSBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIGFuZCB0aGUgb3JpZ2luYXRpbmcgUmVhY3QgY2xpY2sgZXZlbnRcbiAgICAgICAgICogYXMgYSBzZWNvbmQgYXJndW1lbnQuXG4gICAgICAgICAqL1xuICAgICAgLyoqXG4gICAgICAgICAqIEEgaGFuZGxlciBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBhY3Rpb24uIFBhc3NlcyBiYWNrIHRoZSBjdXJyZW50IHJvd1xuICAgICAgICAgKiBpdGVtIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgYW5kIHRoZSBvcmlnaW5hdGluZyBSZWFjdCBjbGljayBldmVudFxuICAgICAgICAgKiBhcyBhIHNlY29uZCBhcmd1bWVudC5cbiAgICAgICAgICovXG4gICAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGhyZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICAgICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBhdmFpbGFibGVcbiAgICAgICAgICovXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICAgKi9cbiAgICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGVuYWJsZWRcbiAgICAgICAgICovXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGVuYWJsZWRcbiAgICAgICAgICovXG4gICAgICBlbmFibGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gICAgICAvKipcbiAgICAgICAgICogSWYgbW9yZSB0aGFuIDMgYWN0aW9ucyBhcmUgcGFzc2VkLCAyIHByaW1hcnkgYWN0aW9ucyB3aWxsIHNob3cgKG9uIGhvdmVyKVxuICAgICAgICAgKiBuZXh0IHRvIGFuIGV4cGFuc2lvbiBtZW51IG9mIGFsbCBhY3Rpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBPbiBtb2JpbGUsIHByaW1hcnkgYWN0aW9ucyB3aWxsIGJlIHR1Y2tlZCBhd2F5IGluIHRoZSBleHBhbnNpb24gbWVudSBmb3Igc3BhY2UuXG4gICAgICAgICAqL1xuICAgICAgLyoqXG4gICAgICAgICAqIElmIG1vcmUgdGhhbiAzIGFjdGlvbnMgYXJlIHBhc3NlZCwgMiBwcmltYXJ5IGFjdGlvbnMgd2lsbCBzaG93IChvbiBob3ZlcilcbiAgICAgICAgICogbmV4dCB0byBhbiBleHBhbnNpb24gbWVudSBvZiBhbGwgYWN0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogT24gbW9iaWxlLCBwcmltYXJ5IGFjdGlvbnMgd2lsbCBiZSB0dWNrZWQgYXdheSBpbiB0aGUgZXhwYW5zaW9uIG1lbnUgZm9yIHNwYWNlLlxuICAgICAgICAgKi9cbiAgICAgIGlzUHJpbWFyeTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAvKipcbiAgICAgICAgICogQWxsb3dzIG9ubHkgc2hvd2luZyB0aGUgYWN0aW9uIG9uIG1vdXNlIGhvdmVyIG9yIGtleWJvYXJkIGZvY3VzLlxuICAgICAgICAgKiBJZiBtb3JlIHRoYW4gMyBhY3Rpb25zIGFyZSBwYXNzZWQsIHRoaXMgd2lsbCBhbHdheXMgYmUgdHJ1ZSBmb3IgYGlzUHJpbWFyeWAgYWN0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogSGFzIG5vIGVmZmVjdCBvbiBtb2JpbGUsIG9yIGlmIGBoYXNBY3Rpb25zYCBpcyBub3Qgc2V0LlxuICAgICAgICAgKi9cbiAgICAgIC8qKlxuICAgICAgICAgKiBBbGxvd3Mgb25seSBzaG93aW5nIHRoZSBhY3Rpb24gb24gbW91c2UgaG92ZXIgb3Iga2V5Ym9hcmQgZm9jdXMuXG4gICAgICAgICAqIElmIG1vcmUgdGhhbiAzIGFjdGlvbnMgYXJlIHBhc3NlZCwgdGhpcyB3aWxsIGFsd2F5cyBiZSB0cnVlIGZvciBgaXNQcmltYXJ5YCBhY3Rpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBIYXMgbm8gZWZmZWN0IG9uIG1vYmlsZSwgb3IgaWYgYGhhc0FjdGlvbnNgIGlzIG5vdCBzZXQuXG4gICAgICAgICAqL1xuICAgICAgc2hvd09uSG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICAgICAgLyoqXG4gICAgICAgICAqIEFzc29jaWF0ZXMgYW4gaWNvbiB3aXRoIHRoZSBidXR0b25cbiAgICAgICAgICovXG4gICAgICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG4gICAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIC8qKlxuICAgICAgICAgKiBBbGxvd3MgcmVuZGVyaW5nIGEgdG90YWxseSBjdXN0b20gYWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgdGhhdCBkZWZpbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBhdmFpbGFibGVcbiAgICAgICAgICovXG4gICAgICBhdmFpbGFibGU6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgdGhhdCBkZWZpbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgICAqL1xuICAgICAgZW5hYmxlZDogUHJvcFR5cGVzLmZ1bmNcbiAgICB9KS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgICAvKipcbiAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGNvbHVtblxuICAgICAgICovXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGVcbiAgfSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLFxuICAvKipcbiAgICAgKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXlcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5XG4gICAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBEZXNjcmliZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHRhYmxlLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgY2FwdGlvbiB3aWxsIGJlIFwiVGhpcyB0YWJsZSBjb250YWlucyB7aXRlbUNvdW50fSByb3dzLlwiXG4gICAgICovXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyB0aGUgY29udGVudCBvZiB0aGUgdGFibGUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjYXB0aW9uIHdpbGwgYmUgXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3MuXCJcbiAgICAgKi9cbiAgdGFibGVDYXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hpY2ggY29sdW1uIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBpZGVudGlmeWluZyBjZWxsIGluIGVhY2ggcm93LiBTaG91bGQgbWF0Y2ggYSBcImZpZWxkXCIgcHJvcCBpbiBGaWVsZERhdGFDb2x1bW5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoaWNoIGNvbHVtbiBzaG91bGQgYmUgdXNlZCBhcyB0aGUgaWRlbnRpZnlpbmcgY2VsbCBpbiBlYWNoIHJvdy4gU2hvdWxkIG1hdGNoIGEgXCJmaWVsZFwiIHByb3AgaW4gRmllbGREYXRhQ29sdW1uXG4gICAgICovXG4gIHJvd0hlYWRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogUHJvdmlkZXMgYW4gaW5maW5pdGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICAgKi9cbiAgLyoqXG4gICAgICogUHJvdmlkZXMgYW4gaW5maW5pdGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICAgKi9cbiAgbG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE1lc3NhZ2UgdG8gZGlzcGxheSBpZiB0YWJsZSBpcyBlbXB0eVxuICAgICAqL1xuICAvKipcbiAgICAgKiBNZXNzYWdlIHRvIGRpc3BsYXkgaWYgdGFibGUgaXMgZW1wdHlcbiAgICAgKi9cbiAgbm9JdGVtc01lc3NhZ2U6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbmV2ZXIgcGFnaW5hdGlvbiBvciBzb3J0aW5nIGNoYW5nZXMgKHRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgd2hlbiBlaXRoZXIgcGFnaW5hdGlvbiBvciBzb3J0aW5nIGlzIGNvbmZpZ3VyZWQpLiBTZWUgI0NyaXRlcmlhIG9yICNDcml0ZXJpYVdpdGhQYWdpbmF0aW9uXG4gICAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogQ29uZmlndXJlcyAjUGFnaW5hdGlvblxuICAgICAqL1xuICBwYWdpbmF0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3VuZGVmaW5lZF0pLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogVGhlIGN1cnJlbnQgcGFnZSAoemVyby1iYXNlZCkgaW5kZXhcbiAgICAgICAqL1xuICAgIHBhZ2VJbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIC8qKlxuICAgICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIHNob3duIGluIGEgc2luZ2xlIHBhZ2UuXG4gICAgICAgKiBQYXNzIGAwYCB0byBkaXNwbGF5IHRoZSBzZWxlY3RlZCBcIlNob3cgYWxsXCIgb3B0aW9uIGFuZCBoaWRlIHRoZSBwYWdpbmF0aW9uLlxuICAgICAgICpcbiAgICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICAgKi9cbiAgICBwYWdlU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICAvKipcbiAgICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgdGhlIHBhZ2UgaXMgXCJzbGljZWRcIiBvZlxuICAgICAgICovXG4gICAgdG90YWxJdGVtQ291bnQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICAvKipcbiAgICAgICAqIENvbmZpZ3VyZXMgdGhlIHBhZ2Ugc2l6ZSBkcm9wZG93biBvcHRpb25zLlxuICAgICAgICogUGFzcyBgMGAgYXMgb25lIG9mIHRoZSBvcHRpb25zIHRvIGNyZWF0ZSBhIFwiU2hvdyBhbGxcIiBvcHRpb24uXG4gICAgICAgKlxuICAgICAgICogQGRlZmF1bHQgWzEwLCAyNSwgNTBdXG4gICAgICAgKi9cbiAgICBwYWdlU2l6ZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCksXG4gICAgLyoqXG4gICAgICAgKiBTZXQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgcGFnZSBzaXplIGRyb3Bkb3duXG4gICAgICAgKlxuICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICovXG4gICAgc2hvd1BlclBhZ2VPcHRpb25zOiBQcm9wVHlwZXMuYm9vbFxuICB9KV0pLFxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd2BcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQXBwbGllZCB0byBgRXVpVGFibGVSb3dgXG4gICAgICovXG4gIHJvd1Byb3BzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogQ29uZmlndXJlcyAjRXVpVGFibGVTZWxlY3Rpb25UeXBlXG4gICAgICovXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU2VsZWN0aW9uVHlwZVxuICAgICAqL1xuICBzZWxlY3Rpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGl0ZW0gc2VsZWN0aW9uIGNoYW5nZXMuXG4gICAgICAgKlxuICAgICAgICogUmVxdWlyZWQgaWYgYHNlbGVjdGVkYCBpcyBwYXNzZWQuXG4gICAgICAgKi9cbiAgICBvblNlbGVjdGlvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHBlciBpdGVtIHRvIGluZGljYXRlIHdoZXRoZXIgaXQgaXMgc2VsZWN0YWJsZVxuICAgICAgICovXG4gICAgc2VsZWN0YWJsZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHBlciBpdGVtIHRvIHJldHJpZXZlIGEgbWVzc2FnZSBmb3IgaXRzIHNlbGVjdGFibGUgc3RhdGUuXG4gICAgICAgKiBXZSBkaXNwbGF5IHRoZXNlIG1lc3NhZ2VzIGFzIGEgdG9vbHRpcCBvbiBhbiB1bnNlbGVjdGFibGUgY2hlY2tib3hcbiAgICAgICAqL1xuICAgIHNlbGVjdGFibGVNZXNzYWdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIFNldHMgaW5pdGlhbGx5IHNlbGVjdGVkIGl0ZW1zLiBVc2UgZm9yIHVuY29udHJvbGxlZCBzZWxlY3Rpb24gYmVoYXZpb3IgKGNoZWNrYm94XG4gICAgICAgKiB3aWxsIG9ubHkgY2hhbmdlIGZyb20gdXNlciBpbnB1dCwgYW5kIG5vdCBmcm9tIGRldmVsb3BlciBjb250cm9sKS5cbiAgICAgICAqXG4gICAgICAgKiBUaGlzIHByb3Agd2lsbCBiZSBpZ25vcmVkIGlmIGBzZWxlY3RlZGAgaXMgcGFzc2VkLlxuICAgICAgICovXG4gICAgaW5pdGlhbFNlbGVjdGVkOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgIC8qKlxuICAgICAgICogVXNlZCBmb3IgY29udHJvbGxlZCBzZWxlY3Rpb24gYmVoYXZpb3IsIGUuZy4gd2hlbiB5b3Ugd2FudCB0byBwcm9ncmFtbWF0aWNhbGx5XG4gICAgICAgKiBjb250cm9sIHdoaWNoIHNlbGVjdGlvbiBjaGVja2JveGVzIGFyZSBjaGVja2VkLCBhbmQgd2hpY2ggYXJlIG5vdC5cbiAgICAgICAqL1xuICAgIHNlbGVjdGVkOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpXG4gIH0pLFxuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNFdWlUYWJsZVNvcnRpbmdUeXBlXG4gICAgICovXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU29ydGluZ1R5cGVcbiAgICAgKi9cbiAgc29ydGluZzogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEluZGljYXRlcyB0aGUgcHJvcGVydHkvZmllbGQgdG8gc29ydCBvblxuICAgICAgICovXG4gICAgc29ydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGZpZWxkOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZihbXCJhc2NcIiwgXCJkZXNjXCJdKS5pc1JlcXVpcmVkXG4gICAgfSksXG4gICAgLyoqXG4gICAgICAgKiBFbmFibGVzL2Rpc2FibGVzIHVuc29ydGluZyBvZiB0YWJsZSBjb2x1bW5zLiBTdXBwb3J0ZWQgYnkgRXVpSW5NZW1vcnlUYWJsZS5cbiAgICAgICAqL1xuICAgIGFsbG93TmV1dHJhbFNvcnQ6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogRW5hYmxlcyB0aGUgZGVmYXVsdCBzb3J0aW5nIGFiaWxpdHkgZm9yIGVhY2ggY29sdW1uLlxuICAgICAgICovXG4gICAgZW5hYmxlQWxsQ29sdW1uczogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBEaXNhYmxlcyB0aGUgdXNlcidzIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSBzb3J0IGJ1dCBzdGlsbCBzaG93cyB0aGUgY3VycmVudCBkaXJlY3Rpb25cbiAgICAgICAqL1xuICAgIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbFxuICB9KSxcbiAgLyoqXG4gICAgICogU2V0cyB0aGUgdGFibGUtbGF5b3V0IENTUyBwcm9wZXJ0eS4gTm90ZSB0aGF0IGF1dG8gdGFibGVMYXlvdXQgcHJldmVudHMgdHJ1bmNhdGVUZXh0IGZyb20gd29ya2luZyBwcm9wZXJseS5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgdGFibGUtbGF5b3V0IENTUyBwcm9wZXJ0eS4gTm90ZSB0aGF0IGF1dG8gdGFibGVMYXlvdXQgcHJldmVudHMgdHJ1bmNhdGVUZXh0IGZyb20gd29ya2luZyBwcm9wZXJseS5cbiAgICAgKi9cbiAgdGFibGVMYXlvdXQ6IFByb3BUeXBlcy5vbmVPZihbXCJmaXhlZFwiLCBcImF1dG9cIl0pXG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlDb250ZXh0TWVudUl0ZW0sIEV1aUNvbnRleHRNZW51UGFuZWwgfSBmcm9tICcuLi9jb250ZXh0X21lbnUnO1xuaW1wb3J0IHsgRXVpUG9wb3ZlciB9IGZyb20gJy4uL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpQnV0dG9uSWNvbiB9IGZyb20gJy4uL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi4vdG9vbF90aXAnO1xuaW1wb3J0IHsgdXNlRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgaXNDdXN0b21JdGVtQWN0aW9uLCBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uIH0gZnJvbSAnLi9hY3Rpb25fdHlwZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ29sbGFwc2VkSXRlbUFjdGlvbnMgPSBmdW5jdGlvbiBDb2xsYXBzZWRJdGVtQWN0aW9ucyhfcmVmKSB7XG4gIHZhciBhY3Rpb25zID0gX3JlZi5hY3Rpb25zLFxuICAgIGl0ZW1JZCA9IF9yZWYuaXRlbUlkLFxuICAgIGl0ZW0gPSBfcmVmLml0ZW0sXG4gICAgYWN0aW9uc0Rpc2FibGVkID0gX3JlZi5hY3Rpb25zRGlzYWJsZWQsXG4gICAgZGlzcGxheWVkUm93SW5kZXggPSBfcmVmLmRpc3BsYXllZFJvd0luZGV4LFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHBvcG92ZXJPcGVuID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRQb3BvdmVyT3BlbiA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBjbG9zZVBvcG92ZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNldFBvcG92ZXJPcGVuKGZhbHNlKTtcbiAgfSwgW10pO1xuICB2YXIgYWxsQWN0aW9uc1Rvb2x0aXAgPSB1c2VFdWlJMThuKCdldWlDb2xsYXBzZWRJdGVtQWN0aW9ucy5hbGxBY3Rpb25zVG9vbHRpcCcsICdBbGwgYWN0aW9ucycpO1xuICB2YXIgYWxsQWN0aW9uc0J1dHRvbkFyaWFMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aUNvbGxhcHNlZEl0ZW1BY3Rpb25zLmFsbEFjdGlvbnMnLCAnQWxsIGFjdGlvbnMsIHJvdyB7aW5kZXh9Jywge1xuICAgIGluZGV4OiBkaXNwbGF5ZWRSb3dJbmRleCArIDFcbiAgfSk7XG4gIHZhciBhbGxBY3Rpb25zQnV0dG9uRGlzYWJsZWRBcmlhTGFiZWwgPSB1c2VFdWlJMThuKCdldWlDb2xsYXBzZWRJdGVtQWN0aW9ucy5hbGxBY3Rpb25zRGlzYWJsZWQnLCAnSW5kaXZpZHVhbCBpdGVtIGFjdGlvbnMgYXJlIGRpc2FibGVkIHdoZW4gcm93cyBhcmUgYmVpbmcgc2VsZWN0ZWQuJyk7XG4gIHZhciBjb250cm9scyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBhY3Rpb25zLnJlZHVjZShmdW5jdGlvbiAoY29udHJvbHMsIGFjdGlvbiwgaW5kZXgpIHtcbiAgICAgIHZhciBfYWN0aW9uJGF2YWlsYWJsZSwgX2FjdGlvbiRhdmFpbGFibGUyO1xuICAgICAgdmFyIGF2YWlsYWJsZSA9IChfYWN0aW9uJGF2YWlsYWJsZSA9IChfYWN0aW9uJGF2YWlsYWJsZTIgPSBhY3Rpb24uYXZhaWxhYmxlKSA9PT0gbnVsbCB8fCBfYWN0aW9uJGF2YWlsYWJsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hY3Rpb24kYXZhaWxhYmxlMi5jYWxsKGFjdGlvbiwgaXRlbSkpICE9PSBudWxsICYmIF9hY3Rpb24kYXZhaWxhYmxlICE9PSB2b2lkIDAgPyBfYWN0aW9uJGF2YWlsYWJsZSA6IHRydWU7XG4gICAgICBpZiAoIWF2YWlsYWJsZSkgcmV0dXJuIGNvbnRyb2xzO1xuICAgICAgdmFyIGVuYWJsZWQgPSBhY3Rpb24uZW5hYmxlZCA9PSBudWxsIHx8IGFjdGlvbi5lbmFibGVkKGl0ZW0pO1xuICAgICAgaWYgKGlzQ3VzdG9tSXRlbUFjdGlvbihhY3Rpb24pKSB7XG4gICAgICAgIHZhciBjdXN0b21BY3Rpb24gPSBhY3Rpb247XG4gICAgICAgIHZhciBhY3Rpb25Db250cm9sID0gY3VzdG9tQWN0aW9uLnJlbmRlcihpdGVtLCBlbmFibGVkKTtcbiAgICAgICAgY29udHJvbHMucHVzaChcbiAgICAgICAgLy8gRG8gbm90IHB1dCB0aGUgYG9uQ2xpY2tgIG9uIHRoZSBFdWlDb250ZXh0TWVudUl0ZW0gaXRzZWxmIC0gb3RoZXJ3aXNlXG4gICAgICAgIC8vIGl0IHJlbmRlcnMgYSA8YnV0dG9uPiB0YWcgaW5zdGVhZCBvZiBhIDxkaXY+LCBhbmQgd2UgZW5kIHVwIHdpdGggbmVzdGVkXG4gICAgICAgIC8vIGludGVyYWN0aXZlIGVsZW1lbnRzXG4gICAgICAgIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVJdGVtLCB7XG4gICAgICAgICAga2V5OiBpbmRleCxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFzaWNUYWJsZV9fY29sbGFwc2VkQ3VzdG9tQWN0aW9uXCJcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgIG9uQ2xpY2s6IGNsb3NlUG9wb3ZlclxuICAgICAgICB9LCBhY3Rpb25Db250cm9sKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGljb24gPSBhY3Rpb24uaWNvbiA/IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkoYWN0aW9uLmljb24pIDogdW5kZWZpbmVkO1xuICAgICAgICB2YXIgYnV0dG9uQ29udGVudCA9IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkoYWN0aW9uLm5hbWUpO1xuICAgICAgICB2YXIgdG9vbFRpcENvbnRlbnQgPSBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uKGl0ZW0pKGFjdGlvbi5kZXNjcmlwdGlvbik7XG4gICAgICAgIHZhciBocmVmID0gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKShhY3Rpb24uaHJlZik7XG4gICAgICAgIHZhciBkYXRhVGVzdFN1YmogPSBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uKGl0ZW0pKGFjdGlvblsnZGF0YS10ZXN0LXN1YmonXSk7XG4gICAgICAgIHZhciBfb25DbGljayA9IGFjdGlvbi5vbkNsaWNrLFxuICAgICAgICAgIHRhcmdldCA9IGFjdGlvbi50YXJnZXQ7XG4gICAgICAgIGNvbnRyb2xzLnB1c2goX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIHtcbiAgICAgICAgICBrZXk6IGluZGV4LFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlCYXNpY1RhYmxlX19jb2xsYXBzZWRBY3Rpb25cIixcbiAgICAgICAgICBkaXNhYmxlZDogIWVuYWJsZWQgJiYgIWFjdGlvbnNEaXNhYmxlZCxcbiAgICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgIGljb246IGljb24sXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBkYXRhVGVzdFN1YmosXG4gICAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICAgICAgICAgICAgZXZlbnQucGVyc2lzdCgpO1xuICAgICAgICAgICAgX29uQ2xpY2sgPT09IG51bGwgfHwgX29uQ2xpY2sgPT09IHZvaWQgMCB8fCBfb25DbGljayhpdGVtLCBldmVudCk7XG4gICAgICAgICAgICAvLyBBbGxvdyBjb25zdW1lciBldmVudHMgdG8gcHJldmVudCB0aGUgcG9wb3ZlciBmcm9tIGNsb3NpbmcgaWYgbmVjZXNzYXJ5XG4gICAgICAgICAgICBpZiAoIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIGNsb3NlUG9wb3ZlcigpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdG9vbFRpcENvbnRlbnQ6IHRvb2xUaXBDb250ZW50LFxuICAgICAgICAgIHRvb2xUaXBQcm9wczoge1xuICAgICAgICAgICAgZGVsYXk6ICdsb25nJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgYnV0dG9uQ29udGVudCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRyb2xzO1xuICAgIH0sIFtdKTtcbiAgfSwgW2FjdGlvbnMsIGFjdGlvbnNEaXNhYmxlZCwgaXRlbSwgY2xvc2VQb3BvdmVyXSk7XG4gIHZhciBwb3BvdmVyQnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25JY29uLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFjdGlvbnNEaXNhYmxlZCA/IGFsbEFjdGlvbnNCdXR0b25EaXNhYmxlZEFyaWFMYWJlbCA6IGFsbEFjdGlvbnNCdXR0b25BcmlhTGFiZWwsXG4gICAgdGl0bGU6IGFjdGlvbnNEaXNhYmxlZCA/IGFsbEFjdGlvbnNCdXR0b25EaXNhYmxlZEFyaWFMYWJlbCA6IHVuZGVmaW5lZCxcbiAgICBpY29uVHlwZTogXCJib3hlc0hvcml6b250YWxcIixcbiAgICBjb2xvcjogXCJ0ZXh0XCIsXG4gICAgaXNEaXNhYmxlZDogYWN0aW9uc0Rpc2FibGVkLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICByZXR1cm4gc2V0UG9wb3Zlck9wZW4oZnVuY3Rpb24gKGlzT3Blbikge1xuICAgICAgICByZXR1cm4gIWlzT3BlbjtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aUNvbGxhcHNlZEl0ZW1BY3Rpb25zQnV0dG9uXCJcbiAgfSk7XG4gIHZhciB3aXRoVG9vbHRpcCA9ICFhY3Rpb25zRGlzYWJsZWQgJiYgX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgY29udGVudDogYWxsQWN0aW9uc1Rvb2x0aXAsXG4gICAgZGVsYXk6IFwibG9uZ1wiXG4gIH0sIHBvcG92ZXJCdXR0b24pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgaWQ6IFwiXCIuY29uY2F0KGl0ZW1JZCwgXCItYWN0aW9uc1wiKSxcbiAgICBpc09wZW46IHBvcG92ZXJPcGVuLFxuICAgIGJ1dHRvbjogd2l0aFRvb2x0aXAgfHwgcG9wb3ZlckJ1dHRvbixcbiAgICBjbG9zZVBvcG92ZXI6IGNsb3NlUG9wb3ZlcixcbiAgICBwYW5lbFBhZGRpbmdTaXplOiBcIm5vbmVcIixcbiAgICBhbmNob3JQb3NpdGlvbjogXCJsZWZ0Q2VudGVyXCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudVBhbmVsLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUJhc2ljVGFibGVfX2NvbGxhcHNlZEFjdGlvbnNcIixcbiAgICBpdGVtczogY29udHJvbHNcbiAgfSkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciBpc0N1c3RvbUl0ZW1BY3Rpb24gPSBmdW5jdGlvbiBpc0N1c3RvbUl0ZW1BY3Rpb24oYWN0aW9uKSB7XG4gIHJldHVybiBhY3Rpb24uaGFzT3duUHJvcGVydHkoJ3JlbmRlcicpO1xufTtcbmV4cG9ydCB2YXIgY2FsbFdpdGhJdGVtSWZGdW5jdGlvbiA9IGZ1bmN0aW9uIGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkge1xuICByZXR1cm4gZnVuY3Rpb24gKHByb3ApIHtcbiAgICByZXR1cm4gdHlwZW9mIHByb3AgPT09ICdmdW5jdGlvbicgPyBwcm9wKGl0ZW0pIDogcHJvcDtcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IERlZmF1bHRJdGVtQWN0aW9uIH0gZnJvbSAnLi9kZWZhdWx0X2l0ZW1fYWN0aW9uJztcbmltcG9ydCB7IEN1c3RvbUl0ZW1BY3Rpb24gfSBmcm9tICcuL2N1c3RvbV9pdGVtX2FjdGlvbic7XG5pbXBvcnQgeyBpc0N1c3RvbUl0ZW1BY3Rpb24gfSBmcm9tICcuL2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFeHBhbmRlZEl0ZW1BY3Rpb25zID0gZnVuY3Rpb24gRXhwYW5kZWRJdGVtQWN0aW9ucyhfcmVmKSB7XG4gIHZhciBhY3Rpb25zID0gX3JlZi5hY3Rpb25zLFxuICAgIGl0ZW1JZCA9IF9yZWYuaXRlbUlkLFxuICAgIGl0ZW0gPSBfcmVmLml0ZW0sXG4gICAgYWN0aW9uc0Rpc2FibGVkID0gX3JlZi5hY3Rpb25zRGlzYWJsZWQsXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWU7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBhY3Rpb25zLnJlZHVjZShmdW5jdGlvbiAodG9vbHMsIGFjdGlvbiwgaW5kZXgpIHtcbiAgICB2YXIgYXZhaWxhYmxlID0gYWN0aW9uLmF2YWlsYWJsZSA/IGFjdGlvbi5hdmFpbGFibGUoaXRlbSkgOiB0cnVlO1xuICAgIGlmICghYXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gdG9vbHM7XG4gICAgfVxuICAgIHZhciBlbmFibGVkID0gYWN0aW9uLmVuYWJsZWQgPT0gbnVsbCB8fCBhY3Rpb24uZW5hYmxlZChpdGVtKTtcbiAgICB2YXIga2V5ID0gXCJpdGVtX2FjdGlvbl9cIi5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGluZGV4KTtcbiAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCB7XG4gICAgICAnZXVpQmFzaWNUYWJsZUFjdGlvbi1zaG93T25Ib3Zlcic6IGFjdGlvbi5zaG93T25Ib3ZlclxuICAgIH0pO1xuICAgIGlmIChpc0N1c3RvbUl0ZW1BY3Rpb24oYWN0aW9uKSkge1xuICAgICAgLy8gY3VzdG9tIGFjdGlvbiBoYXMgYSByZW5kZXIgZnVuY3Rpb25cbiAgICAgIHRvb2xzLnB1c2goX19fRW1vdGlvbkpTWChDdXN0b21JdGVtQWN0aW9uLCB7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQgJiYgIWFjdGlvbnNEaXNhYmxlZCxcbiAgICAgICAgaXRlbTogaXRlbVxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b29scy5wdXNoKF9fX0Vtb3Rpb25KU1goRGVmYXVsdEl0ZW1BY3Rpb24sIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQgJiYgIWFjdGlvbnNEaXNhYmxlZCxcbiAgICAgICAgaXRlbTogaXRlbVxuICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gdG9vbHM7XG4gIH0sIFtdKSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSwgRXVpQnV0dG9uSWNvbiB9IGZyb20gJy4uL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi4vdG9vbF90aXAnO1xuaW1wb3J0IHsgdXNlR2VuZXJhdGVkSHRtbElkIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uIH0gZnJvbSAnLi9hY3Rpb25fdHlwZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRGVmYXVsdEl0ZW1BY3Rpb24gPSBmdW5jdGlvbiBEZWZhdWx0SXRlbUFjdGlvbihfcmVmKSB7XG4gIHZhciBhY3Rpb24gPSBfcmVmLmFjdGlvbixcbiAgICBlbmFibGVkID0gX3JlZi5lbmFibGVkLFxuICAgIGl0ZW0gPSBfcmVmLml0ZW0sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWU7XG4gIGlmICghYWN0aW9uLm9uQ2xpY2sgJiYgIWFjdGlvbi5ocmVmKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHJlbmRlciBpdGVtIGFjdGlvbiBbXCIuY29uY2F0KGFjdGlvbi5uYW1lLCBcIl0uIE1pc3NpbmcgcmVxdWlyZWQgJ29uQ2xpY2snIGNhbGxiYWNrXFxuICAgICAgb3IgJ2hyZWYnIHN0cmluZy4gSWYgeW91IHdhbnQgdG8gcHJvdmlkZSBhIGN1c3RvbSBhY3Rpb24gY29udHJvbCwgbWFrZSBzdXJlIHRvIGRlZmluZSB0aGUgJ3JlbmRlcicgY2FsbGJhY2tcIikpO1xuICB9XG4gIHZhciBvbkNsaWNrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKCFhY3Rpb24ub25DbGljaykgcmV0dXJuO1xuICAgIGV2ZW50LnBlcnNpc3QoKTsgLy8gVE9ETzogUmVtb3ZlIG9uY2UgUmVhY3QgMTYgc3VwcG9ydCBpcyBkcm9wcGVkXG4gICAgYWN0aW9uLm9uQ2xpY2soaXRlbSwgZXZlbnQpO1xuICB9LCBbYWN0aW9uLm9uQ2xpY2ssIGl0ZW1dKTtcbiAgdmFyIGNvbG9yID0gYWN0aW9uLmNvbG9yID8gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKShhY3Rpb24uY29sb3IpIDogJ3ByaW1hcnknO1xuICB2YXIgaWNvbiA9IGFjdGlvbi5pY29uID8gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKShhY3Rpb24uaWNvbikgOiB1bmRlZmluZWQ7XG4gIHZhciBhY3Rpb25Db250ZW50ID0gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKShhY3Rpb24ubmFtZSk7XG4gIHZhciB0b29sdGlwQ29udGVudCA9IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkoYWN0aW9uLmRlc2NyaXB0aW9uKTtcbiAgdmFyIGhyZWYgPSBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uKGl0ZW0pKGFjdGlvbi5ocmVmKTtcbiAgdmFyIGRhdGFUZXN0U3ViaiA9IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkoYWN0aW9uWydkYXRhLXRlc3Qtc3ViaiddKTtcbiAgdmFyIGFyaWFMYWJlbElkID0gdXNlR2VuZXJhdGVkSHRtbElkKCk7XG4gIHZhciBhcmlhTGFiZWxsZWRCeTtcbiAgdmFyIGJ1dHRvbjtcbiAgaWYgKGFjdGlvbi50eXBlID09PSAnaWNvbicpIHtcbiAgICBpZiAoIWljb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCByZW5kZXIgaXRlbSBhY3Rpb24gW1wiLmNvbmNhdChhY3Rpb24ubmFtZSwgXCJdLiBJdCBpcyBjb25maWd1cmVkIHRvIHJlbmRlciBhcyBhbiBpY29uIGJ1dCBub1xcbiAgICAgIGljb24gaXMgcHJvdmlkZWQuIE1ha2Ugc3VyZSB0byBzZXQgdGhlICdpY29uJyBwcm9wZXJ0eSBvZiB0aGUgYWN0aW9uXCIpKTtcbiAgICB9XG4gICAgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25JY29uLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbElkLFxuICAgICAgaXNEaXNhYmxlZDogIWVuYWJsZWQsXG4gICAgICBjb2xvcjogY29sb3IsXG4gICAgICBpY29uVHlwZTogaWNvbixcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiBhY3Rpb24udGFyZ2V0LFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBkYXRhVGVzdFN1YmpcbiAgICAgIC8vIElmIGFjdGlvbiBpcyBkaXNhYmxlZCwgdGhlIG5vcm1hbCB0b29sdGlwIGNhbid0IHNob3cgLSBhdHRlbXB0IHRvXG4gICAgICAvLyBwcm92aWRlIHNvbWUgYW1vdW50IG9mIGFmZm9yZGFuY2Ugd2l0aCBhIGJyb3dzZXIgdGl0bGUgdG9vbHRpcFxuICAgICAgLFxuICAgICAgdGl0bGU6ICFlbmFibGVkID8gdG9vbHRpcENvbnRlbnQgOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgICAvLyBhY3Rpb25Db250ZW50IChhY3Rpb24ubmFtZSkgaXMgYSBSZWFjdE5vZGUgYW5kIG11c3QgYmUgcmVuZGVyZWRcbiAgICAvLyB0byBhbiBlbGVtZW50IGFuZCByZWZlcmVuY2VkIGJ5IElEIGZvciBzY3JlZW4gcmVhZGVyc1xuICAgIGFyaWFMYWJlbGxlZEJ5ID0gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICBpZDogYXJpYUxhYmVsSWRcbiAgICB9LCBhY3Rpb25Db250ZW50KSk7XG4gIH0gZWxzZSB7XG4gICAgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICBzaXplOiBcInNcIixcbiAgICAgIGlzRGlzYWJsZWQ6ICFlbmFibGVkLFxuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgaWNvblR5cGU6IGljb24sXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogYWN0aW9uLnRhcmdldCxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogZGF0YVRlc3RTdWJqLFxuICAgICAgZmx1c2g6IFwicmlnaHRcIlxuICAgIH0sIGFjdGlvbkNvbnRlbnQpO1xuICB9XG4gIHJldHVybiBlbmFibGVkID8gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgY29udGVudDogdG9vbHRpcENvbnRlbnQsXG4gICAgZGVsYXk6IFwibG9uZ1wiXG4gIH0sIGJ1dHRvbiksIGFyaWFMYWJlbGxlZEJ5KSA6IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIGJ1dHRvbiwgYXJpYUxhYmVsbGVkQnkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEN1c3RvbUl0ZW1BY3Rpb24gPSBmdW5jdGlvbiBDdXN0b21JdGVtQWN0aW9uKF9yZWYpIHtcbiAgdmFyIGFjdGlvbiA9IF9yZWYuYWN0aW9uLFxuICAgIGVuYWJsZWQgPSBfcmVmLmVuYWJsZWQsXG4gICAgaXRlbSA9IF9yZWYuaXRlbSxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0sIGFjdGlvbi5yZW5kZXIoaXRlbSwgZW5hYmxlZCkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aVNwYWNlciB9IGZyb20gJy4uL3NwYWNlcic7XG5pbXBvcnQgeyBFdWlUYWJsZVBhZ2luYXRpb24sIHVzZUV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzIH0gZnJvbSAnLi4vdGFibGUvdGFibGVfcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBQYWdpbmF0aW9uQmFyID0gZnVuY3Rpb24gUGFnaW5hdGlvbkJhcihfcmVmKSB7XG4gIHZhciBwYWdpbmF0aW9uID0gX3JlZi5wYWdpbmF0aW9uLFxuICAgIG9uUGFnZVNpemVDaGFuZ2UgPSBfcmVmLm9uUGFnZVNpemVDaGFuZ2UsXG4gICAgb25QYWdlQ2hhbmdlID0gX3JlZi5vblBhZ2VDaGFuZ2UsXG4gICAgYXJpYUNvbnRyb2xzID0gX3JlZlsnYXJpYS1jb250cm9scyddLFxuICAgIGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXTtcbiAgdmFyIGRlZmF1bHRzID0gdXNlRXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMoKTtcbiAgdmFyIHBhZ2VJbmRleCA9IHBhZ2luYXRpb24ucGFnZUluZGV4LFxuICAgIHRvdGFsSXRlbUNvdW50ID0gcGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCxcbiAgICBfcGFnaW5hdGlvbiRwYWdlU2l6ZSA9IHBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgcGFnZVNpemUgPSBfcGFnaW5hdGlvbiRwYWdlU2l6ZSA9PT0gdm9pZCAwID8gZGVmYXVsdHMuaXRlbXNQZXJQYWdlIDogX3BhZ2luYXRpb24kcGFnZVNpemUsXG4gICAgX3BhZ2luYXRpb24kcGFnZVNpemVPID0gcGFnaW5hdGlvbi5wYWdlU2l6ZU9wdGlvbnMsXG4gICAgcGFnZVNpemVPcHRpb25zID0gX3BhZ2luYXRpb24kcGFnZVNpemVPID09PSB2b2lkIDAgPyBkZWZhdWx0cy5pdGVtc1BlclBhZ2VPcHRpb25zIDogX3BhZ2luYXRpb24kcGFnZVNpemVPLFxuICAgIF9wYWdpbmF0aW9uJHNob3dQZXJQYSA9IHBhZ2luYXRpb24uc2hvd1BlclBhZ2VPcHRpb25zLFxuICAgIHNob3dQZXJQYWdlT3B0aW9ucyA9IF9wYWdpbmF0aW9uJHNob3dQZXJQYSA9PT0gdm9pZCAwID8gZGVmYXVsdHMuc2hvd1BlclBhZ2VPcHRpb25zIDogX3BhZ2luYXRpb24kc2hvd1BlclBhO1xuICB2YXIgcGFnZUNvdW50ID0gcGFnZVNpemUgPyBNYXRoLmNlaWwodG90YWxJdGVtQ291bnQgLyBwYWdlU2l6ZSkgOiAxO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChwYWdlQ291bnQgPCBwYWdlSW5kZXggKyAxKSB7XG4gICAgICBvblBhZ2VDaGFuZ2UgPT09IG51bGwgfHwgb25QYWdlQ2hhbmdlID09PSB2b2lkIDAgfHwgb25QYWdlQ2hhbmdlKHBhZ2VDb3VudCAtIDEpO1xuICAgIH1cbiAgfSwgW3BhZ2VDb3VudCwgb25QYWdlQ2hhbmdlLCBwYWdlSW5kZXhdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlTcGFjZXIsIHtcbiAgICBzaXplOiBcIm1cIlxuICB9KSwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVBhZ2luYXRpb24sIHtcbiAgICBhY3RpdmVQYWdlOiBwYWdlSW5kZXgsXG4gICAgc2hvd1BlclBhZ2VPcHRpb25zOiBzaG93UGVyUGFnZU9wdGlvbnMsXG4gICAgaXRlbXNQZXJQYWdlOiBwYWdlU2l6ZSxcbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zOiBwYWdlU2l6ZU9wdGlvbnMsXG4gICAgcGFnZUNvdW50OiBwYWdlQ291bnQsXG4gICAgb25DaGFuZ2VJdGVtc1BlclBhZ2U6IG9uUGFnZVNpemVDaGFuZ2UsXG4gICAgb25DaGFuZ2VQYWdlOiBvblBhZ2VDaGFuZ2UsXG4gICAgXCJhcmlhLWNvbnRyb2xzXCI6IGFyaWFDb250cm9scyxcbiAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsXG4gIH0pKTtcbn07IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKGUsIHQpIHsgcmV0dXJuIHQgfHwgKHQgPSBlLnNsaWNlKDApKSwgT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZSh0KSB9IH0pKTsgfVxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBldWlDYW50QW5pbWF0ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciB0YWJsZUxvYWRpbmdMaW5lID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIGZyb20ge1xcbiAgICBcIiwgXCJcXG4gICAgXCIsIFwiXFxuICB9XFxuXFxuICAyMCUge1xcbiAgICBcIiwgXCJcXG4gICAgXCIsIFwiXFxuICB9XFxuXFxuICA4MCUge1xcbiAgICBcIiwgXCJcXG4gICAgXCIsIFwiXFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgXCIsIFwiXFxuICAgIFwiLCBcIlxcbiAgfVxcblwiXSkpLCBsb2dpY2FsQ1NTKCdsZWZ0JywgMCksIGxvZ2ljYWxDU1MoJ3dpZHRoJywgMCksIGxvZ2ljYWxDU1MoJ2xlZnQnLCAwKSwgbG9naWNhbENTUygnd2lkdGgnLCAnNDAlJyksIGxvZ2ljYWxDU1MoJ2xlZnQnLCAnNjAlJyksIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzQwJScpLCBsb2dpY2FsQ1NTKCdsZWZ0JywgJzEwMCUnKSwgbG9naWNhbENTUygnd2lkdGgnLCAwKSk7XG5leHBvcnQgdmFyIGV1aUJhc2ljVGFibGVCb2R5TG9hZGluZyA9IGZ1bmN0aW9uIGV1aUJhc2ljVGFibGVCb2R5TG9hZGluZyhfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuOyY6OmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OicnO1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpY2spLCBcIiBiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgXCI7YW5pbWF0aW9uOlwiLCB0YWJsZUxvYWRpbmdMaW5lLCBcIiAxcyBsaW5lYXIgaW5maW5pdGU7XCIsIGV1aUNhbnRBbmltYXRlLCBcInthbmltYXRpb24tZHVyYXRpb246MnM7fX07bGFiZWw6ZXVpQmFzaWNUYWJsZUJvZHlMb2FkaW5nO1wiKTtcbn07XG5cbi8vIEZpeCB0byBtYWtlIHRoZSBsb2FkaW5nIGluZGljYXRvciBwb3NpdGlvbiBjb3JyZWN0bHkgaW4gU2FmYXJpXG4vLyBGb3Igd2hhdGV2ZXIgYW5ub3lpbmcgcmVhc29uLCBTYWZhcmkgZG9lc24ndCByZXNwZWN0IGBwb3NpdGlvbjogcmVsYXRpdmU7YFxuLy8gb24gYHRib2R5YCB3aXRob3V0IGBwb3NpdGlvbjogcmVsYXRpdmVgIG9uIHRoZSBwYXJlbnQgYHRhYmxlYFxuZXhwb3J0IHZhciBzYWZhcmlMb2FkaW5nV29ya2Fyb3VuZCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI2eGJudzQtc2FmYXJpTG9hZGluZ1dvcmthcm91bmRcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO2xhYmVsOnNhZmFyaUxvYWRpbmdXb3JrYXJvdW5kO1wiXG59IDoge1xuICBuYW1lOiBcIjZ4Ym53NC1zYWZhcmlMb2FkaW5nV29ya2Fyb3VuZFwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmU7bGFiZWw6c2FmYXJpTG9hZGluZ1dvcmthcm91bmQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTsiLCAiZXhwb3J0IHZhciBTdWJzY3JpYmFibGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdWJzY3JpYmFibGUoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTdWJzY3JpYmFibGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNhbGxiYWNrID0gbGlzdGVuZXIgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChjYWxsYmFjayk7XG4gICAgdGhpcy5vblN1YnNjcmliZSgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5saXN0ZW5lcnMgPSBfdGhpcy5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBjYWxsYmFjaztcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5vblVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8uaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gaGFzTGlzdGVuZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5sZW5ndGggPiAwO1xuICB9O1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkgey8vIERvIG5vdGhpbmdcbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7Ly8gRG8gbm90aGluZ1xuICB9O1xuXG4gIHJldHVybiBTdWJzY3JpYmFibGU7XG59KCk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuLy8gVFlQRVNcbi8vIFVUSUxTXG5leHBvcnQgdmFyIGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpIHtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmdW5jdGlvbmFsVXBkYXRlKHVwZGF0ZXIsIGlucHV0KSB7XG4gIHJldHVybiB0eXBlb2YgdXBkYXRlciA9PT0gJ2Z1bmN0aW9uJyA/IHVwZGF0ZXIoaW5wdXQpIDogdXBkYXRlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGltZW91dCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwICYmIHZhbHVlICE9PSBJbmZpbml0eTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVRdWVyeUtleUFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlKGFycmF5MSwgYXJyYXkyKSB7XG4gIHJldHVybiBhcnJheTEuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIGFycmF5Mi5pbmRleE9mKHgpID09PSAtMTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUF0KGFycmF5LCBpbmRleCwgdmFsdWUpIHtcbiAgdmFyIGNvcHkgPSBhcnJheS5zbGljZSgwKTtcbiAgY29weVtpbmRleF0gPSB2YWx1ZTtcbiAgcmV0dXJuIGNvcHk7XG59XG5leHBvcnQgZnVuY3Rpb24gdGltZVVudGlsU3RhbGUodXBkYXRlZEF0LCBzdGFsZVRpbWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHVwZGF0ZWRBdCArIChzdGFsZVRpbWUgfHwgMCkgLSBEYXRlLm5vdygpLCAwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIGlmICghaXNRdWVyeUtleShhcmcxKSkge1xuICAgIHJldHVybiBhcmcxO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhcmcyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmczLCB7XG4gICAgICBxdWVyeUtleTogYXJnMSxcbiAgICAgIHF1ZXJ5Rm46IGFyZzJcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIHF1ZXJ5S2V5OiBhcmcxXG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXV0YXRpb25BcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKGlzUXVlcnlLZXkoYXJnMSkpIHtcbiAgICBpZiAodHlwZW9mIGFyZzIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMywge1xuICAgICAgICBtdXRhdGlvbktleTogYXJnMSxcbiAgICAgICAgbXV0YXRpb25GbjogYXJnMlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgICBtdXRhdGlvbktleTogYXJnMVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhcmcxID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgICBtdXRhdGlvbkZuOiBhcmcxXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzEpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIHJldHVybiBpc1F1ZXJ5S2V5KGFyZzEpID8gW19leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgcXVlcnlLZXk6IGFyZzFcbiAgfSksIGFyZzNdIDogW2FyZzEgfHwge30sIGFyZzJdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXV0YXRpb25GaWx0ZXJBcmdzKGFyZzEsIGFyZzIpIHtcbiAgcmV0dXJuIGlzUXVlcnlLZXkoYXJnMSkgPyBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIG11dGF0aW9uS2V5OiBhcmcxXG4gIH0pIDogYXJnMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXBRdWVyeVN0YXR1c0ZpbHRlcihhY3RpdmUsIGluYWN0aXZlKSB7XG4gIGlmIChhY3RpdmUgPT09IHRydWUgJiYgaW5hY3RpdmUgPT09IHRydWUgfHwgYWN0aXZlID09IG51bGwgJiYgaW5hY3RpdmUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnYWxsJztcbiAgfSBlbHNlIGlmIChhY3RpdmUgPT09IGZhbHNlICYmIGluYWN0aXZlID09PSBmYWxzZSkge1xuICAgIHJldHVybiAnbm9uZSc7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXQgdGhpcyBwb2ludCwgYWN0aXZlfGluYWN0aXZlIGNhbiBvbmx5IGJlIHRydWV8ZmFsc2Ugb3IgZmFsc2V8dHJ1ZVxuICAgIC8vIHNvLCB3aGVuIG9ubHkgb25lIHZhbHVlIGlzIHByb3ZpZGVkLCB0aGUgbWlzc2luZyBvbmUgaGFzIHRvIGJlIHRoZSBuZWdhdGVkIHZhbHVlXG4gICAgdmFyIGlzQWN0aXZlID0gYWN0aXZlICE9IG51bGwgPyBhY3RpdmUgOiAhaW5hY3RpdmU7XG4gICAgcmV0dXJuIGlzQWN0aXZlID8gJ2FjdGl2ZScgOiAnaW5hY3RpdmUnO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSkge1xuICB2YXIgYWN0aXZlID0gZmlsdGVycy5hY3RpdmUsXG4gICAgICBleGFjdCA9IGZpbHRlcnMuZXhhY3QsXG4gICAgICBmZXRjaGluZyA9IGZpbHRlcnMuZmV0Y2hpbmcsXG4gICAgICBpbmFjdGl2ZSA9IGZpbHRlcnMuaW5hY3RpdmUsXG4gICAgICBwcmVkaWNhdGUgPSBmaWx0ZXJzLnByZWRpY2F0ZSxcbiAgICAgIHF1ZXJ5S2V5ID0gZmlsdGVycy5xdWVyeUtleSxcbiAgICAgIHN0YWxlID0gZmlsdGVycy5zdGFsZTtcblxuICBpZiAoaXNRdWVyeUtleShxdWVyeUtleSkpIHtcbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChxdWVyeS5xdWVyeUhhc2ggIT09IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgcXVlcnkub3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShxdWVyeS5xdWVyeUtleSwgcXVlcnlLZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdmFyIHF1ZXJ5U3RhdHVzRmlsdGVyID0gbWFwUXVlcnlTdGF0dXNGaWx0ZXIoYWN0aXZlLCBpbmFjdGl2ZSk7XG5cbiAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnbm9uZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgIT09ICdhbGwnKSB7XG4gICAgdmFyIGlzQWN0aXZlID0gcXVlcnkuaXNBY3RpdmUoKTtcblxuICAgIGlmIChxdWVyeVN0YXR1c0ZpbHRlciA9PT0gJ2FjdGl2ZScgJiYgIWlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnaW5hY3RpdmUnICYmIGlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdGFsZSA9PT0gJ2Jvb2xlYW4nICYmIHF1ZXJ5LmlzU3RhbGUoKSAhPT0gc3RhbGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGZldGNoaW5nID09PSAnYm9vbGVhbicgJiYgcXVlcnkuaXNGZXRjaGluZygpICE9PSBmZXRjaGluZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcmVkaWNhdGUgJiYgIXByZWRpY2F0ZShxdWVyeSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKSB7XG4gIHZhciBleGFjdCA9IGZpbHRlcnMuZXhhY3QsXG4gICAgICBmZXRjaGluZyA9IGZpbHRlcnMuZmV0Y2hpbmcsXG4gICAgICBwcmVkaWNhdGUgPSBmaWx0ZXJzLnByZWRpY2F0ZSxcbiAgICAgIG11dGF0aW9uS2V5ID0gZmlsdGVycy5tdXRhdGlvbktleTtcblxuICBpZiAoaXNRdWVyeUtleShtdXRhdGlvbktleSkpIHtcbiAgICBpZiAoIW11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChoYXNoUXVlcnlLZXkobXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkgIT09IGhhc2hRdWVyeUtleShtdXRhdGlvbktleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5LCBtdXRhdGlvbktleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGZldGNoaW5nID09PSAnYm9vbGVhbicgJiYgbXV0YXRpb24uc3RhdGUuc3RhdHVzID09PSAnbG9hZGluZycgIT09IGZldGNoaW5nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZWRpY2F0ZSAmJiAhcHJlZGljYXRlKG11dGF0aW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgb3B0aW9ucykge1xuICB2YXIgaGFzaEZuID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucXVlcnlLZXlIYXNoRm4pIHx8IGhhc2hRdWVyeUtleTtcbiAgcmV0dXJuIGhhc2hGbihxdWVyeUtleSk7XG59XG4vKipcbiAqIERlZmF1bHQgcXVlcnkga2V5cyBoYXNoIGZ1bmN0aW9uLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoUXVlcnlLZXkocXVlcnlLZXkpIHtcbiAgdmFyIGFzQXJyYXkgPSBlbnN1cmVRdWVyeUtleUFycmF5KHF1ZXJ5S2V5KTtcbiAgcmV0dXJuIHN0YWJsZVZhbHVlSGFzaChhc0FycmF5KTtcbn1cbi8qKlxuICogSGFzaGVzIHRoZSB2YWx1ZSBpbnRvIGEgc3RhYmxlIGhhc2guXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YWJsZVZhbHVlSGFzaCh2YWx1ZSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIGZ1bmN0aW9uIChfLCB2YWwpIHtcbiAgICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWwpID8gT2JqZWN0LmtleXModmFsKS5zb3J0KCkucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWxba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pIDogdmFsO1xuICB9KTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGtleSBgYmAgcGFydGlhbGx5IG1hdGNoZXMgd2l0aCBrZXkgYGFgLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2hLZXkoYSwgYikge1xuICByZXR1cm4gcGFydGlhbERlZXBFcXVhbChlbnN1cmVRdWVyeUtleUFycmF5KGEpLCBlbnN1cmVRdWVyeUtleUFycmF5KGIpKTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGBiYCBwYXJ0aWFsbHkgbWF0Y2hlcyB3aXRoIGBhYC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbERlZXBFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGEgJiYgYiAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuICFPYmplY3Qua2V5cyhiKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiAhcGFydGlhbERlZXBFcXVhbChhW2tleV0sIGJba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBgYWAgaWYgYGJgIGlzIGRlZXBseSBlcXVhbC5cbiAqIElmIG5vdCwgaXQgd2lsbCByZXBsYWNlIGFueSBkZWVwbHkgZXF1YWwgY2hpbGRyZW4gb2YgYGJgIHdpdGggdGhvc2Ugb2YgYGFgLlxuICogVGhpcyBjYW4gYmUgdXNlZCBmb3Igc3RydWN0dXJhbCBzaGFyaW5nIGJldHdlZW4gSlNPTiB2YWx1ZXMgZm9yIGV4YW1wbGUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VFcXVhbERlZXAoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiBhO1xuICB9XG5cbiAgdmFyIGFycmF5ID0gQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpO1xuXG4gIGlmIChhcnJheSB8fCBpc1BsYWluT2JqZWN0KGEpICYmIGlzUGxhaW5PYmplY3QoYikpIHtcbiAgICB2YXIgYVNpemUgPSBhcnJheSA/IGEubGVuZ3RoIDogT2JqZWN0LmtleXMoYSkubGVuZ3RoO1xuICAgIHZhciBiSXRlbXMgPSBhcnJheSA/IGIgOiBPYmplY3Qua2V5cyhiKTtcbiAgICB2YXIgYlNpemUgPSBiSXRlbXMubGVuZ3RoO1xuICAgIHZhciBjb3B5ID0gYXJyYXkgPyBbXSA6IHt9O1xuICAgIHZhciBlcXVhbEl0ZW1zID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYlNpemU7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGFycmF5ID8gaSA6IGJJdGVtc1tpXTtcbiAgICAgIGNvcHlba2V5XSA9IHJlcGxhY2VFcXVhbERlZXAoYVtrZXldLCBiW2tleV0pO1xuXG4gICAgICBpZiAoY29weVtrZXldID09PSBhW2tleV0pIHtcbiAgICAgICAgZXF1YWxJdGVtcysrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhU2l6ZSA9PT0gYlNpemUgJiYgZXF1YWxJdGVtcyA9PT0gYVNpemUgPyBhIDogY29weTtcbiAgfVxuXG4gIHJldHVybiBiO1xufVxuLyoqXG4gKiBTaGFsbG93IGNvbXBhcmUgb2JqZWN0cy4gT25seSB3b3JrcyB3aXRoIG9iamVjdHMgdGhhdCBhbHdheXMgaGF2ZSB0aGUgc2FtZSBwcm9wZXJ0aWVzLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RXF1YWxPYmplY3RzKGEsIGIpIHtcbiAgaWYgKGEgJiYgIWIgfHwgYiAmJiAhYSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGtleSBpbiBhKSB7XG4gICAgaWYgKGFba2V5XSAhPT0gYltrZXldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59IC8vIENvcGllZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1wbGFpbi1vYmplY3RcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qobykge1xuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiBoYXMgbW9kaWZpZWQgY29uc3RydWN0b3JcblxuXG4gIHZhciBjdG9yID0gby5jb25zdHJ1Y3RvcjtcblxuICBpZiAodHlwZW9mIGN0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSWYgaGFzIG1vZGlmaWVkIHByb3RvdHlwZVxuXG5cbiAgdmFyIHByb3QgPSBjdG9yLnByb3RvdHlwZTtcblxuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShwcm90KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiBjb25zdHJ1Y3RvciBkb2VzIG5vdCBoYXZlIGFuIE9iamVjdC1zcGVjaWZpYyBtZXRob2RcblxuXG4gIGlmICghcHJvdC5oYXNPd25Qcm9wZXJ0eSgnaXNQcm90b3R5cGVPZicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIE1vc3QgbGlrZWx5IGEgcGxhaW4gT2JqZWN0XG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaGFzT2JqZWN0UHJvdG90eXBlKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1F1ZXJ5S2V5KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRXJyb3I7XG59XG5leHBvcnQgZnVuY3Rpb24gc2xlZXAodGltZW91dCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpO1xuICB9KTtcbn1cbi8qKlxuICogU2NoZWR1bGVzIGEgbWljcm90YXNrLlxuICogVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHNjaGVkdWxlIHN0YXRlIHVwZGF0ZXMgYWZ0ZXIgcmVuZGVyaW5nLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZU1pY3JvdGFzayhjYWxsYmFjaykge1xuICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGNhbGxiYWNrKS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJvcnRDb250cm9sbGVyKCkge1xuICBpZiAodHlwZW9mIEFib3J0Q29udHJvbGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIH1cbn0iLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG5pbXBvcnQgeyBpc1NlcnZlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHZhciBGb2N1c01hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoRm9jdXNNYW5hZ2VyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBGb2N1c01hbmFnZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcblxuICAgIF90aGlzLnNldHVwID0gZnVuY3Rpb24gKG9uRm9jdXMpIHtcbiAgICAgIHZhciBfd2luZG93O1xuXG4gICAgICBpZiAoIWlzU2VydmVyICYmICgoX3dpbmRvdyA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIG9uRm9jdXMoKTtcbiAgICAgICAgfTsgLy8gTGlzdGVuIHRvIHZpc2liaWxsaXR5Y2hhbmdlIGFuZCBmb2N1c1xuXG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIEJlIHN1cmUgdG8gdW5zdWJzY3JpYmUgaWYgYSBuZXcgaGFuZGxlciBpcyBzZXRcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGxpc3RlbmVyKTtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBGb2N1c01hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5jbGVhbnVwKSB7XG4gICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIodGhpcy5zZXR1cCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHZhciBfdGhpcyRjbGVhbnVwO1xuXG4gICAgICAoX3RoaXMkY2xlYW51cCA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAuY2FsbCh0aGlzKTtcbiAgICAgIHRoaXMuY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyKHNldHVwKSB7XG4gICAgdmFyIF90aGlzJGNsZWFudXAyLFxuICAgICAgICBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5zZXR1cCA9IHNldHVwO1xuICAgIChfdGhpcyRjbGVhbnVwMiA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5jbGVhbnVwID0gc2V0dXAoZnVuY3Rpb24gKGZvY3VzZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIF90aGlzMi5zZXRGb2N1c2VkKGZvY3VzZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMyLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0Rm9jdXNlZCA9IGZ1bmN0aW9uIHNldEZvY3VzZWQoZm9jdXNlZCkge1xuICAgIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XG5cbiAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgdGhpcy5vbkZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNGb2N1c2VkID0gZnVuY3Rpb24gaXNGb2N1c2VkKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5mb2N1c2VkID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvY3VzZWQ7XG4gICAgfSAvLyBkb2N1bWVudCBnbG9iYWwgY2FuIGJlIHVuYXZhaWxhYmxlIGluIHJlYWN0IG5hdGl2ZVxuXG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIFt1bmRlZmluZWQsICd2aXNpYmxlJywgJ3ByZXJlbmRlciddLmluY2x1ZGVzKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSk7XG4gIH07XG5cbiAgcmV0dXJuIEZvY3VzTWFuYWdlcjtcbn0oU3Vic2NyaWJhYmxlKTtcbmV4cG9ydCB2YXIgZm9jdXNNYW5hZ2VyID0gbmV3IEZvY3VzTWFuYWdlcigpOyIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIE9ubGluZU1hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoT25saW5lTWFuYWdlciwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gT25saW5lTWFuYWdlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc2V0dXAgPSBmdW5jdGlvbiAob25PbmxpbmUpIHtcbiAgICAgIHZhciBfd2luZG93O1xuXG4gICAgICBpZiAoIWlzU2VydmVyICYmICgoX3dpbmRvdyA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIG9uT25saW5lKCk7XG4gICAgICAgIH07IC8vIExpc3RlbiB0byBvbmxpbmVcblxuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQmUgc3VyZSB0byB1bnN1YnNjcmliZSBpZiBhIG5ldyBoYW5kbGVyIGlzIHNldFxuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBsaXN0ZW5lcik7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBPbmxpbmVNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuY2xlYW51cCkge1xuICAgICAgdGhpcy5zZXRFdmVudExpc3RlbmVyKHRoaXMuc2V0dXApO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB2YXIgX3RoaXMkY2xlYW51cDtcblxuICAgICAgKF90aGlzJGNsZWFudXAgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwLmNhbGwodGhpcyk7XG4gICAgICB0aGlzLmNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gc2V0RXZlbnRMaXN0ZW5lcihzZXR1cCkge1xuICAgIHZhciBfdGhpcyRjbGVhbnVwMixcbiAgICAgICAgX3RoaXMyID0gdGhpcztcblxuICAgIHRoaXMuc2V0dXAgPSBzZXR1cDtcbiAgICAoX3RoaXMkY2xlYW51cDIgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwMi5jYWxsKHRoaXMpO1xuICAgIHRoaXMuY2xlYW51cCA9IHNldHVwKGZ1bmN0aW9uIChvbmxpbmUpIHtcbiAgICAgIGlmICh0eXBlb2Ygb25saW5lID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgX3RoaXMyLnNldE9ubGluZShvbmxpbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMyLm9uT25saW5lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE9ubGluZSA9IGZ1bmN0aW9uIHNldE9ubGluZShvbmxpbmUpIHtcbiAgICB0aGlzLm9ubGluZSA9IG9ubGluZTtcblxuICAgIGlmIChvbmxpbmUpIHtcbiAgICAgIHRoaXMub25PbmxpbmUoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzT25saW5lID0gZnVuY3Rpb24gaXNPbmxpbmUoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLm9ubGluZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gdGhpcy5vbmxpbmU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBuYXZpZ2F0b3Iub25MaW5lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvci5vbkxpbmU7XG4gIH07XG5cbiAgcmV0dXJuIE9ubGluZU1hbmFnZXI7XG59KFN1YnNjcmliYWJsZSk7XG5leHBvcnQgdmFyIG9ubGluZU1hbmFnZXIgPSBuZXcgT25saW5lTWFuYWdlcigpOyIsICJpbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnLi91dGlscyc7XG5cbmZ1bmN0aW9uIGRlZmF1bHRSZXRyeURlbGF5KGZhaWx1cmVDb3VudCkge1xuICByZXR1cm4gTWF0aC5taW4oMTAwMCAqIE1hdGgucG93KDIsIGZhaWx1cmVDb3VudCksIDMwMDAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mICh2YWx1ZSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWUuY2FuY2VsKSA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydCB2YXIgQ2FuY2VsbGVkRXJyb3IgPSBmdW5jdGlvbiBDYW5jZWxsZWRFcnJvcihvcHRpb25zKSB7XG4gIHRoaXMucmV2ZXJ0ID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZXZlcnQ7XG4gIHRoaXMuc2lsZW50ID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5zaWxlbnQ7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsbGVkRXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQ2FuY2VsbGVkRXJyb3I7XG59IC8vIENMQVNTXG5cbmV4cG9ydCB2YXIgUmV0cnllciA9IGZ1bmN0aW9uIFJldHJ5ZXIoY29uZmlnKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIGNhbmNlbFJldHJ5ID0gZmFsc2U7XG4gIHZhciBjYW5jZWxGbjtcbiAgdmFyIGNvbnRpbnVlRm47XG4gIHZhciBwcm9taXNlUmVzb2x2ZTtcbiAgdmFyIHByb21pc2VSZWplY3Q7XG4gIHRoaXMuYWJvcnQgPSBjb25maWcuYWJvcnQ7XG5cbiAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbiAoY2FuY2VsT3B0aW9ucykge1xuICAgIHJldHVybiBjYW5jZWxGbiA9PSBudWxsID8gdm9pZCAwIDogY2FuY2VsRm4oY2FuY2VsT3B0aW9ucyk7XG4gIH07XG5cbiAgdGhpcy5jYW5jZWxSZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjYW5jZWxSZXRyeSA9IHRydWU7XG4gIH07XG5cbiAgdGhpcy5jb250aW51ZVJldHJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIGNhbmNlbFJldHJ5ID0gZmFsc2U7XG4gIH07XG5cbiAgdGhpcy5jb250aW51ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICB9O1xuXG4gIHRoaXMuZmFpbHVyZUNvdW50ID0gMDtcbiAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICB0aGlzLmlzUmVzb2x2ZWQgPSBmYWxzZTtcbiAgdGhpcy5pc1RyYW5zcG9ydENhbmNlbGFibGUgPSBmYWxzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKG91dGVyUmVzb2x2ZSwgb3V0ZXJSZWplY3QpIHtcbiAgICBwcm9taXNlUmVzb2x2ZSA9IG91dGVyUmVzb2x2ZTtcbiAgICBwcm9taXNlUmVqZWN0ID0gb3V0ZXJSZWplY3Q7XG4gIH0pO1xuXG4gIHZhciByZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSh2YWx1ZSkge1xuICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgX3RoaXMuaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25TdWNjZXNzKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRpbnVlRm4oKTtcbiAgICAgIHByb21pc2VSZXNvbHZlKHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHJlamVjdCA9IGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkge1xuICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgX3RoaXMuaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uRXJyb3IodmFsdWUpO1xuICAgICAgY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICAgICAgcHJvbWlzZVJlamVjdCh2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwYXVzZSA9IGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoY29udGludWVSZXNvbHZlKSB7XG4gICAgICBjb250aW51ZUZuID0gY29udGludWVSZXNvbHZlO1xuICAgICAgX3RoaXMuaXNQYXVzZWQgPSB0cnVlO1xuICAgICAgY29uZmlnLm9uUGF1c2UgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vblBhdXNlKCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBjb250aW51ZUZuID0gdW5kZWZpbmVkO1xuICAgICAgX3RoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIGNvbmZpZy5vbkNvbnRpbnVlID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25Db250aW51ZSgpO1xuICAgIH0pO1xuICB9OyAvLyBDcmVhdGUgbG9vcCBmdW5jdGlvblxuXG5cbiAgdmFyIHJ1biA9IGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAvLyBEbyBub3RoaW5nIGlmIGFscmVhZHkgcmVzb2x2ZWRcbiAgICBpZiAoX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9taXNlT3JWYWx1ZTsgLy8gRXhlY3V0ZSBxdWVyeVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gY29uZmlnLmZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH0gLy8gQ3JlYXRlIGNhbGxiYWNrIHRvIGNhbmNlbCB0aGlzIGZldGNoXG5cblxuICAgIGNhbmNlbEZuID0gZnVuY3Rpb24gY2FuY2VsRm4oY2FuY2VsT3B0aW9ucykge1xuICAgICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICAgIHJlamVjdChuZXcgQ2FuY2VsbGVkRXJyb3IoY2FuY2VsT3B0aW9ucykpO1xuICAgICAgICBfdGhpcy5hYm9ydCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMuYWJvcnQoKTsgLy8gQ2FuY2VsIHRyYW5zcG9ydCBpZiBzdXBwb3J0ZWRcblxuICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHByb21pc2VPclZhbHVlKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwcm9taXNlT3JWYWx1ZS5jYW5jZWwoKTtcbiAgICAgICAgICB9IGNhdGNoIChfdW51c2VkKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTsgLy8gQ2hlY2sgaWYgdGhlIHRyYW5zcG9ydCBsYXllciBzdXBwb3J0IGNhbmNlbGxhdGlvblxuXG5cbiAgICBfdGhpcy5pc1RyYW5zcG9ydENhbmNlbGFibGUgPSBpc0NhbmNlbGFibGUocHJvbWlzZU9yVmFsdWUpO1xuICAgIFByb21pc2UucmVzb2x2ZShwcm9taXNlT3JWYWx1ZSkudGhlbihyZXNvbHZlKS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIHZhciBfY29uZmlnJHJldHJ5LCBfY29uZmlnJHJldHJ5RGVsYXk7XG5cbiAgICAgIC8vIFN0b3AgaWYgdGhlIGZldGNoIGlzIGFscmVhZHkgcmVzb2x2ZWRcbiAgICAgIGlmIChfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRG8gd2UgbmVlZCB0byByZXRyeSB0aGUgcmVxdWVzdD9cblxuXG4gICAgICB2YXIgcmV0cnkgPSAoX2NvbmZpZyRyZXRyeSA9IGNvbmZpZy5yZXRyeSkgIT0gbnVsbCA/IF9jb25maWckcmV0cnkgOiAzO1xuICAgICAgdmFyIHJldHJ5RGVsYXkgPSAoX2NvbmZpZyRyZXRyeURlbGF5ID0gY29uZmlnLnJldHJ5RGVsYXkpICE9IG51bGwgPyBfY29uZmlnJHJldHJ5RGVsYXkgOiBkZWZhdWx0UmV0cnlEZWxheTtcbiAgICAgIHZhciBkZWxheSA9IHR5cGVvZiByZXRyeURlbGF5ID09PSAnZnVuY3Rpb24nID8gcmV0cnlEZWxheShfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKSA6IHJldHJ5RGVsYXk7XG4gICAgICB2YXIgc2hvdWxkUmV0cnkgPSByZXRyeSA9PT0gdHJ1ZSB8fCB0eXBlb2YgcmV0cnkgPT09ICdudW1iZXInICYmIF90aGlzLmZhaWx1cmVDb3VudCA8IHJldHJ5IHx8IHR5cGVvZiByZXRyeSA9PT0gJ2Z1bmN0aW9uJyAmJiByZXRyeShfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKTtcblxuICAgICAgaWYgKGNhbmNlbFJldHJ5IHx8ICFzaG91bGRSZXRyeSkge1xuICAgICAgICAvLyBXZSBhcmUgZG9uZSBpZiB0aGUgcXVlcnkgZG9lcyBub3QgbmVlZCB0byBiZSByZXRyaWVkXG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuZmFpbHVyZUNvdW50Kys7IC8vIE5vdGlmeSBvbiBmYWlsXG5cbiAgICAgIGNvbmZpZy5vbkZhaWwgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkZhaWwoX3RoaXMuZmFpbHVyZUNvdW50LCBlcnJvcik7IC8vIERlbGF5XG5cbiAgICAgIHNsZWVwKGRlbGF5KSAvLyBQYXVzZSBpZiB0aGUgZG9jdW1lbnQgaXMgbm90IHZpc2libGUgb3Igd2hlbiB0aGUgZGV2aWNlIGlzIG9mZmxpbmVcbiAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgfHwgIW9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICAgIHJldHVybiBwYXVzZSgpO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNhbmNlbFJldHJ5KSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBydW4oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07IC8vIFN0YXJ0IGxvb3BcblxuXG4gIHJ1bigpO1xufTsiLCAiaW1wb3J0IHsgc2NoZWR1bGVNaWNyb3Rhc2sgfSBmcm9tICcuL3V0aWxzJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTm90aWZ5TWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE5vdGlmeU1hbmFnZXIoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMudHJhbnNhY3Rpb25zID0gMDtcblxuICAgIHRoaXMubm90aWZ5Rm4gPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcblxuICAgIHRoaXMuYmF0Y2hOb3RpZnlGbiA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE5vdGlmeU1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5iYXRjaCA9IGZ1bmN0aW9uIGJhdGNoKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICB0aGlzLnRyYW5zYWN0aW9ucysrO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25zLS07XG5cbiAgICAgIGlmICghdGhpcy50cmFuc2FjdGlvbnMpIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLnNjaGVkdWxlID0gZnVuY3Rpb24gc2NoZWR1bGUoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb25zKSB7XG4gICAgICB0aGlzLnF1ZXVlLnB1c2goY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2hlZHVsZU1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLm5vdGlmeUZuKGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQWxsIGNhbGxzIHRvIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIHdpbGwgYmUgYmF0Y2hlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmF0Y2hDYWxscyA9IGZ1bmN0aW9uIGJhdGNoQ2FsbHMoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FsbGJhY2suYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgcXVldWUgPSB0aGlzLnF1ZXVlO1xuICAgIHRoaXMucXVldWUgPSBbXTtcblxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLmJhdGNoTm90aWZ5Rm4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHF1ZXVlLmZvckVhY2goZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfdGhpczMubm90aWZ5Rm4oY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBub3RpZnkgZnVuY3Rpb24uXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yIGV4YW1wbGUgd3JhcCBub3RpZmljYXRpb25zIHdpdGggYFJlYWN0LmFjdGAgd2hpbGUgcnVubmluZyB0ZXN0cy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0Tm90aWZ5RnVuY3Rpb24gPSBmdW5jdGlvbiBzZXROb3RpZnlGdW5jdGlvbihmbikge1xuICAgIHRoaXMubm90aWZ5Rm4gPSBmbjtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBmdW5jdGlvbiB0byBiYXRjaCBub3RpZmljYXRpb25zIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgdGljay5cbiAgICogQnkgZGVmYXVsdCBSZWFjdCBRdWVyeSB3aWxsIHVzZSB0aGUgYmF0Y2ggZnVuY3Rpb24gcHJvdmlkZWQgYnkgUmVhY3RET00gb3IgUmVhY3QgTmF0aXZlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXRCYXRjaE5vdGlmeUZ1bmN0aW9uID0gZnVuY3Rpb24gc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbihmbikge1xuICAgIHRoaXMuYmF0Y2hOb3RpZnlGbiA9IGZuO1xuICB9O1xuXG4gIHJldHVybiBOb3RpZnlNYW5hZ2VyO1xufSgpOyAvLyBTSU5HTEVUT05cblxuZXhwb3J0IHZhciBub3RpZnlNYW5hZ2VyID0gbmV3IE5vdGlmeU1hbmFnZXIoKTsiLCAiLy8gVFlQRVNcbi8vIEZVTkNUSU9OU1xudmFyIGxvZ2dlciA9IGNvbnNvbGU7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyKCkge1xuICByZXR1cm4gbG9nZ2VyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldExvZ2dlcihuZXdMb2dnZXIpIHtcbiAgbG9nZ2VyID0gbmV3TG9nZ2VyO1xufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGdldEFib3J0Q29udHJvbGxlciwgZnVuY3Rpb25hbFVwZGF0ZSwgaXNWYWxpZFRpbWVvdXQsIG5vb3AsIHJlcGxhY2VFcXVhbERlZXAsIHRpbWVVbnRpbFN0YWxlLCBlbnN1cmVRdWVyeUtleUFycmF5IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IFJldHJ5ZXIsIGlzQ2FuY2VsbGVkRXJyb3IgfSBmcm9tICcuL3JldHJ5ZXInOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBRdWVyeSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFF1ZXJ5KGNvbmZpZykge1xuICAgIHRoaXMuYWJvcnRTaWduYWxDb25zdW1lZCA9IGZhbHNlO1xuICAgIHRoaXMuaGFkT2JzZXJ2ZXJzID0gZmFsc2U7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGNvbmZpZy5kZWZhdWx0T3B0aW9ucztcbiAgICB0aGlzLnNldE9wdGlvbnMoY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5jYWNoZSA9IGNvbmZpZy5jYWNoZTtcbiAgICB0aGlzLnF1ZXJ5S2V5ID0gY29uZmlnLnF1ZXJ5S2V5O1xuICAgIHRoaXMucXVlcnlIYXNoID0gY29uZmlnLnF1ZXJ5SGFzaDtcbiAgICB0aGlzLmluaXRpYWxTdGF0ZSA9IGNvbmZpZy5zdGF0ZSB8fCB0aGlzLmdldERlZmF1bHRTdGF0ZSh0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmluaXRpYWxTdGF0ZTtcbiAgICB0aGlzLm1ldGEgPSBjb25maWcubWV0YTtcbiAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldE9wdGlvbnMgPSBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMkb3B0aW9ucyRjYWNoZVRpO1xuXG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe30sIHRoaXMuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIHRoaXMubWV0YSA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubWV0YTsgLy8gRGVmYXVsdCB0byA1IG1pbnV0ZXMgaWYgbm90IGNhY2hlIHRpbWUgaXMgc2V0XG5cbiAgICB0aGlzLmNhY2hlVGltZSA9IE1hdGgubWF4KHRoaXMuY2FjaGVUaW1lIHx8IDAsIChfdGhpcyRvcHRpb25zJGNhY2hlVGkgPSB0aGlzLm9wdGlvbnMuY2FjaGVUaW1lKSAhPSBudWxsID8gX3RoaXMkb3B0aW9ucyRjYWNoZVRpIDogNSAqIDYwICogMTAwMCk7XG4gIH07XG5cbiAgX3Byb3RvLnNldERlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zO1xuICB9O1xuXG4gIF9wcm90by5zY2hlZHVsZUdjID0gZnVuY3Rpb24gc2NoZWR1bGVHYygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuXG4gICAgaWYgKGlzVmFsaWRUaW1lb3V0KHRoaXMuY2FjaGVUaW1lKSkge1xuICAgICAgdGhpcy5nY1RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMub3B0aW9uYWxSZW1vdmUoKTtcbiAgICAgIH0sIHRoaXMuY2FjaGVUaW1lKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyR2NUaW1lb3V0ID0gZnVuY3Rpb24gY2xlYXJHY1RpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMuZ2NUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5nY1RpbWVvdXQpO1xuICAgICAgdGhpcy5nY1RpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vcHRpb25hbFJlbW92ZSA9IGZ1bmN0aW9uIG9wdGlvbmFsUmVtb3ZlKCkge1xuICAgIGlmICghdGhpcy5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5pc0ZldGNoaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmhhZE9ic2VydmVycykge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNhY2hlLnJlbW92ZSh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldERhdGEgPSBmdW5jdGlvbiBzZXREYXRhKHVwZGF0ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMkb3B0aW9ucyRpc0RhdGFFLCBfdGhpcyRvcHRpb25zO1xuXG4gICAgdmFyIHByZXZEYXRhID0gdGhpcy5zdGF0ZS5kYXRhOyAvLyBHZXQgdGhlIG5ldyBkYXRhXG5cbiAgICB2YXIgZGF0YSA9IGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgcHJldkRhdGEpOyAvLyBVc2UgcHJldiBkYXRhIGlmIGFuIGlzRGF0YUVxdWFsIGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIHJldHVybnMgYHRydWVgXG5cbiAgICBpZiAoKF90aGlzJG9wdGlvbnMkaXNEYXRhRSA9IChfdGhpcyRvcHRpb25zID0gdGhpcy5vcHRpb25zKS5pc0RhdGFFcXVhbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkaXNEYXRhRS5jYWxsKF90aGlzJG9wdGlvbnMsIHByZXZEYXRhLCBkYXRhKSkge1xuICAgICAgZGF0YSA9IHByZXZEYXRhO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgICAgLy8gU3RydWN0dXJhbGx5IHNoYXJlIGRhdGEgYmV0d2VlbiBwcmV2IGFuZCBuZXcgZGF0YSBpZiBuZWVkZWRcbiAgICAgIGRhdGEgPSByZXBsYWNlRXF1YWxEZWVwKHByZXZEYXRhLCBkYXRhKTtcbiAgICB9IC8vIFNldCBkYXRhIGFuZCBtYXJrIGl0IGFzIGNhY2hlZFxuXG5cbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnVwZGF0ZWRBdFxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9O1xuXG4gIF9wcm90by5zZXRTdGF0ZSA9IGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlLCBzZXRTdGF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdzZXRTdGF0ZScsXG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRTdGF0ZU9wdGlvbnM6IHNldFN0YXRlT3B0aW9uc1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWwgPSBmdW5jdGlvbiBjYW5jZWwob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyO1xuXG4gICAgdmFyIHByb21pc2UgPSB0aGlzLnByb21pc2U7XG4gICAgKF90aGlzJHJldHJ5ZXIgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyLmNhbmNlbChvcHRpb25zKTtcbiAgICByZXR1cm4gcHJvbWlzZSA/IHByb21pc2UudGhlbihub29wKS5jYXRjaChub29wKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgdGhpcy5jYW5jZWwoe1xuICAgICAgc2lsZW50OiB0cnVlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh0aGlzLmluaXRpYWxTdGF0ZSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzQWN0aXZlID0gZnVuY3Rpb24gaXNBY3RpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXJzLnNvbWUoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICByZXR1cm4gb2JzZXJ2ZXIub3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNGZXRjaGluZyA9IGZ1bmN0aW9uIGlzRmV0Y2hpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNGZXRjaGluZztcbiAgfTtcblxuICBfcHJvdG8uaXNTdGFsZSA9IGZ1bmN0aW9uIGlzU3RhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCB8fCAhdGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0IHx8IHRoaXMub2JzZXJ2ZXJzLnNvbWUoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICByZXR1cm4gb2JzZXJ2ZXIuZ2V0Q3VycmVudFJlc3VsdCgpLmlzU3RhbGU7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzU3RhbGVCeVRpbWUgPSBmdW5jdGlvbiBpc1N0YWxlQnlUaW1lKHN0YWxlVGltZSkge1xuICAgIGlmIChzdGFsZVRpbWUgPT09IHZvaWQgMCkge1xuICAgICAgc3RhbGVUaW1lID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkIHx8ICF0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgfHwgIXRpbWVVbnRpbFN0YWxlKHRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCwgc3RhbGVUaW1lKTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXIyO1xuXG4gICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc2hvdWxkRmV0Y2hPbldpbmRvd0ZvY3VzKCk7XG4gICAgfSk7XG5cbiAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLnJlZmV0Y2goKTtcbiAgICB9IC8vIENvbnRpbnVlIGZldGNoIGlmIGN1cnJlbnRseSBwYXVzZWRcblxuXG4gICAgKF90aGlzJHJldHJ5ZXIyID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllcjIuY29udGludWUoKTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjM7XG5cbiAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC5zaG91bGRGZXRjaE9uUmVjb25uZWN0KCk7XG4gICAgfSk7XG5cbiAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLnJlZmV0Y2goKTtcbiAgICB9IC8vIENvbnRpbnVlIGZldGNoIGlmIGN1cnJlbnRseSBwYXVzZWRcblxuXG4gICAgKF90aGlzJHJldHJ5ZXIzID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllcjMuY29udGludWUoKTtcbiAgfTtcblxuICBfcHJvdG8uYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgICAgdGhpcy5oYWRPYnNlcnZlcnMgPSB0cnVlOyAvLyBTdG9wIHRoZSBxdWVyeSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkXG5cbiAgICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcbiAgICAgIHRoaXMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ29ic2VydmVyQWRkZWQnLFxuICAgICAgICBxdWVyeTogdGhpcyxcbiAgICAgICAgb2JzZXJ2ZXI6IG9ic2VydmVyXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZU9ic2VydmVyID0gZnVuY3Rpb24gcmVtb3ZlT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcikgIT09IC0xKSB7XG4gICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPT0gb2JzZXJ2ZXI7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCF0aGlzLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgLy8gSWYgdGhlIHRyYW5zcG9ydCBsYXllciBkb2VzIG5vdCBzdXBwb3J0IGNhbmNlbGxhdGlvblxuICAgICAgICAvLyB3ZSdsbCBsZXQgdGhlIHF1ZXJ5IGNvbnRpbnVlIHNvIHRoZSByZXN1bHQgY2FuIGJlIGNhY2hlZFxuICAgICAgICBpZiAodGhpcy5yZXRyeWVyKSB7XG4gICAgICAgICAgaWYgKHRoaXMucmV0cnllci5pc1RyYW5zcG9ydENhbmNlbGFibGUgfHwgdGhpcy5hYm9ydFNpZ25hbENvbnN1bWVkKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsKHtcbiAgICAgICAgICAgICAgcmV2ZXJ0OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXRyeWVyLmNhbmNlbFJldHJ5KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2FjaGVUaW1lKSB7XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jYWNoZS5yZW1vdmUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5jYWNoZS5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnb2JzZXJ2ZXJSZW1vdmVkJyxcbiAgICAgICAgcXVlcnk6IHRoaXMsXG4gICAgICAgIG9ic2VydmVyOiBvYnNlcnZlclxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5nZXRPYnNlcnZlcnNDb3VudCA9IGZ1bmN0aW9uIGdldE9ic2VydmVyc0NvdW50KCkge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVycy5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmludmFsaWRhdGUgPSBmdW5jdGlvbiBpbnZhbGlkYXRlKCkge1xuICAgIGlmICghdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ2ludmFsaWRhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoID0gZnVuY3Rpb24gZmV0Y2gob3B0aW9ucywgZmV0Y2hPcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXMsXG4gICAgICAgIF90aGlzJG9wdGlvbnMkYmVoYXZpbyxcbiAgICAgICAgX2NvbnRleHQkZmV0Y2hPcHRpb25zLFxuICAgICAgICBfYWJvcnRDb250cm9sbGVyJGFib3I7XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5pc0ZldGNoaW5nKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0ICYmIChmZXRjaE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoT3B0aW9ucy5jYW5jZWxSZWZldGNoKSkge1xuICAgICAgICAvLyBTaWxlbnRseSBjYW5jZWwgY3VycmVudCBmZXRjaCBpZiB0aGUgdXNlciB3YW50cyB0byBjYW5jZWwgcmVmZXRjaGVzXG4gICAgICAgIHRoaXMuY2FuY2VsKHtcbiAgICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJvbWlzZSkge1xuICAgICAgICB2YXIgX3RoaXMkcmV0cnllcjQ7XG5cbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgcmV0cmllcyB0aGF0IHdlcmUgcG90ZW50aWFsbHkgY2FuY2VsbGVkIGR1ZSB0byB1bm1vdW50cyBjYW4gY29udGludWVcbiAgICAgICAgKF90aGlzJHJldHJ5ZXI0ID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllcjQuY29udGludWVSZXRyeSgpOyAvLyBSZXR1cm4gY3VycmVudCBwcm9taXNlIGlmIHdlIGFyZSBhbHJlYWR5IGZldGNoaW5nXG5cbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgICAgIH1cbiAgICB9IC8vIFVwZGF0ZSBjb25maWcgaWYgcGFzc2VkLCBvdGhlcndpc2UgdGhlIGNvbmZpZyBmcm9tIHRoZSBsYXN0IGV4ZWN1dGlvbiBpcyB1c2VkXG5cblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgfSAvLyBVc2UgdGhlIG9wdGlvbnMgZnJvbSB0aGUgZmlyc3Qgb2JzZXJ2ZXIgd2l0aCBhIHF1ZXJ5IGZ1bmN0aW9uIGlmIG5vIGZ1bmN0aW9uIGlzIGZvdW5kLlxuICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZSBxdWVyeSBpcyBoeWRyYXRlZCBvciBjcmVhdGVkIHdpdGggc2V0UXVlcnlEYXRhLlxuXG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5xdWVyeUZuKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4Lm9wdGlvbnMucXVlcnlGbjtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKG9ic2VydmVyLm9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBxdWVyeUtleSA9IGVuc3VyZVF1ZXJ5S2V5QXJyYXkodGhpcy5xdWVyeUtleSk7XG4gICAgdmFyIGFib3J0Q29udHJvbGxlciA9IGdldEFib3J0Q29udHJvbGxlcigpOyAvLyBDcmVhdGUgcXVlcnkgZnVuY3Rpb24gY29udGV4dFxuXG4gICAgdmFyIHF1ZXJ5Rm5Db250ZXh0ID0ge1xuICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgcGFnZVBhcmFtOiB1bmRlZmluZWQsXG4gICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeUZuQ29udGV4dCwgJ3NpZ25hbCcsIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgaWYgKGFib3J0Q29udHJvbGxlcikge1xuICAgICAgICAgIF90aGlzMi5hYm9ydFNpZ25hbENvbnN1bWVkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7IC8vIENyZWF0ZSBmZXRjaCBmdW5jdGlvblxuXG4gICAgdmFyIGZldGNoRm4gPSBmdW5jdGlvbiBmZXRjaEZuKCkge1xuICAgICAgaWYgKCFfdGhpczIub3B0aW9ucy5xdWVyeUZuKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTWlzc2luZyBxdWVyeUZuJyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzMi5hYm9ydFNpZ25hbENvbnN1bWVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gX3RoaXMyLm9wdGlvbnMucXVlcnlGbihxdWVyeUZuQ29udGV4dCk7XG4gICAgfTsgLy8gVHJpZ2dlciBiZWhhdmlvciBob29rXG5cblxuICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgZmV0Y2hPcHRpb25zOiBmZXRjaE9wdGlvbnMsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgIGZldGNoRm46IGZldGNoRm4sXG4gICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICB9O1xuXG4gICAgaWYgKChfdGhpcyRvcHRpb25zJGJlaGF2aW8gPSB0aGlzLm9wdGlvbnMuYmVoYXZpb3IpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGJlaGF2aW8ub25GZXRjaCkge1xuICAgICAgdmFyIF90aGlzJG9wdGlvbnMkYmVoYXZpbzI7XG5cbiAgICAgIChfdGhpcyRvcHRpb25zJGJlaGF2aW8yID0gdGhpcy5vcHRpb25zLmJlaGF2aW9yKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRiZWhhdmlvMi5vbkZldGNoKGNvbnRleHQpO1xuICAgIH0gLy8gU3RvcmUgc3RhdGUgaW4gY2FzZSB0aGUgY3VycmVudCBmZXRjaCBuZWVkcyB0byBiZSByZXZlcnRlZFxuXG5cbiAgICB0aGlzLnJldmVydFN0YXRlID0gdGhpcy5zdGF0ZTsgLy8gU2V0IHRvIGZldGNoaW5nIHN0YXRlIGlmIG5vdCBhbHJlYWR5IGluIGl0XG5cbiAgICBpZiAoIXRoaXMuc3RhdGUuaXNGZXRjaGluZyB8fCB0aGlzLnN0YXRlLmZldGNoTWV0YSAhPT0gKChfY29udGV4dCRmZXRjaE9wdGlvbnMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9ucy5tZXRhKSkge1xuICAgICAgdmFyIF9jb250ZXh0JGZldGNoT3B0aW9uczI7XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnZmV0Y2gnLFxuICAgICAgICBtZXRhOiAoX2NvbnRleHQkZmV0Y2hPcHRpb25zMiA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zMi5tZXRhXG4gICAgICB9KTtcbiAgICB9IC8vIFRyeSB0byBmZXRjaCB0aGUgZGF0YVxuXG5cbiAgICB0aGlzLnJldHJ5ZXIgPSBuZXcgUmV0cnllcih7XG4gICAgICBmbjogY29udGV4dC5mZXRjaEZuLFxuICAgICAgYWJvcnQ6IGFib3J0Q29udHJvbGxlciA9PSBudWxsID8gdm9pZCAwIDogKF9hYm9ydENvbnRyb2xsZXIkYWJvciA9IGFib3J0Q29udHJvbGxlci5hYm9ydCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hYm9ydENvbnRyb2xsZXIkYWJvci5iaW5kKGFib3J0Q29udHJvbGxlciksXG4gICAgICBvblN1Y2Nlc3M6IGZ1bmN0aW9uIG9uU3VjY2VzcyhkYXRhKSB7XG4gICAgICAgIF90aGlzMi5zZXREYXRhKGRhdGEpOyAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcblxuXG4gICAgICAgIF90aGlzMi5jYWNoZS5jb25maWcub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczIuY2FjaGUuY29uZmlnLm9uU3VjY2VzcyhkYXRhLCBfdGhpczIpOyAvLyBSZW1vdmUgcXVlcnkgYWZ0ZXIgZmV0Y2hpbmcgaWYgY2FjaGUgdGltZSBpcyAwXG5cbiAgICAgICAgaWYgKF90aGlzMi5jYWNoZVRpbWUgPT09IDApIHtcbiAgICAgICAgICBfdGhpczIub3B0aW9uYWxSZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uRXJyb3I6IGZ1bmN0aW9uIG9uRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgLy8gT3B0aW1pc3RpY2FsbHkgdXBkYXRlIHN0YXRlIGlmIG5lZWRlZFxuICAgICAgICBpZiAoIShpc0NhbmNlbGxlZEVycm9yKGVycm9yKSAmJiBlcnJvci5zaWxlbnQpKSB7XG4gICAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNDYW5jZWxsZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgICAgICBfdGhpczIuY2FjaGUuY29uZmlnLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzMi5jYWNoZS5jb25maWcub25FcnJvcihlcnJvciwgX3RoaXMyKTsgLy8gTG9nIGVycm9yXG5cbiAgICAgICAgICBnZXRMb2dnZXIoKS5lcnJvcihlcnJvcik7XG4gICAgICAgIH0gLy8gUmVtb3ZlIHF1ZXJ5IGFmdGVyIGZldGNoaW5nIGlmIGNhY2hlIHRpbWUgaXMgMFxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5jYWNoZVRpbWUgPT09IDApIHtcbiAgICAgICAgICBfdGhpczIub3B0aW9uYWxSZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uRmFpbDogZnVuY3Rpb24gb25GYWlsKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdmYWlsZWQnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uUGF1c2U6IGZ1bmN0aW9uIG9uUGF1c2UoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ3BhdXNlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvbkNvbnRpbnVlOiBmdW5jdGlvbiBvbkNvbnRpbnVlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdjb250aW51ZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcmV0cnk6IGNvbnRleHQub3B0aW9ucy5yZXRyeSxcbiAgICAgIHJldHJ5RGVsYXk6IGNvbnRleHQub3B0aW9ucy5yZXRyeURlbGF5XG4gICAgfSk7XG4gICAgdGhpcy5wcm9taXNlID0gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8uZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnJlZHVjZXIodGhpcy5zdGF0ZSwgYWN0aW9uKTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5vYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIub25RdWVyeVVwZGF0ZShhY3Rpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzMy5jYWNoZS5ub3RpZnkoe1xuICAgICAgICBxdWVyeTogX3RoaXMzLFxuICAgICAgICB0eXBlOiAncXVlcnlVcGRhdGVkJyxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb25cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXREZWZhdWx0U3RhdGUgPSBmdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUob3B0aW9ucykge1xuICAgIHZhciBkYXRhID0gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGEgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmluaXRpYWxEYXRhKCkgOiBvcHRpb25zLmluaXRpYWxEYXRhO1xuICAgIHZhciBoYXNJbml0aWFsRGF0YSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhICE9PSAndW5kZWZpbmVkJztcbiAgICB2YXIgaW5pdGlhbERhdGFVcGRhdGVkQXQgPSBoYXNJbml0aWFsRGF0YSA/IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0ID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCgpIDogb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA6IDA7XG4gICAgdmFyIGhhc0RhdGEgPSB0eXBlb2YgZGF0YSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBkYXRhVXBkYXRlQ291bnQ6IDAsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBoYXNEYXRhID8gaW5pdGlhbERhdGFVcGRhdGVkQXQgIT0gbnVsbCA/IGluaXRpYWxEYXRhVXBkYXRlZEF0IDogRGF0ZS5ub3coKSA6IDAsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGVycm9yVXBkYXRlQ291bnQ6IDAsXG4gICAgICBlcnJvclVwZGF0ZWRBdDogMCxcbiAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgZmV0Y2hNZXRhOiBudWxsLFxuICAgICAgaXNGZXRjaGluZzogZmFsc2UsXG4gICAgICBpc0ludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgIHN0YXR1czogaGFzRGF0YSA/ICdzdWNjZXNzJyA6ICdpZGxlJ1xuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLnJlZHVjZXIgPSBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgICB2YXIgX2FjdGlvbiRtZXRhLCBfYWN0aW9uJGRhdGFVcGRhdGVkQXQ7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IHN0YXRlLmZldGNoRmFpbHVyZUNvdW50ICsgMVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAncGF1c2UnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNQYXVzZWQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2NvbnRpbnVlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZmV0Y2gnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgZmV0Y2hNZXRhOiAoX2FjdGlvbiRtZXRhID0gYWN0aW9uLm1ldGEpICE9IG51bGwgPyBfYWN0aW9uJG1ldGEgOiBudWxsLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IHRydWUsXG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICAgIH0sICFzdGF0ZS5kYXRhVXBkYXRlZEF0ICYmIHtcbiAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBkYXRhOiBhY3Rpb24uZGF0YSxcbiAgICAgICAgICBkYXRhVXBkYXRlQ291bnQ6IHN0YXRlLmRhdGFVcGRhdGVDb3VudCArIDEsXG4gICAgICAgICAgZGF0YVVwZGF0ZWRBdDogKF9hY3Rpb24kZGF0YVVwZGF0ZWRBdCA9IGFjdGlvbi5kYXRhVXBkYXRlZEF0KSAhPSBudWxsID8gX2FjdGlvbiRkYXRhVXBkYXRlZEF0IDogRGF0ZS5ub3coKSxcbiAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0ludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgdmFyIGVycm9yID0gYWN0aW9uLmVycm9yO1xuXG4gICAgICAgIGlmIChpc0NhbmNlbGxlZEVycm9yKGVycm9yKSAmJiBlcnJvci5yZXZlcnQgJiYgdGhpcy5yZXZlcnRTdGF0ZSkge1xuICAgICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgdGhpcy5yZXZlcnRTdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgIGVycm9yVXBkYXRlQ291bnQ6IHN0YXRlLmVycm9yVXBkYXRlQ291bnQgKyAxLFxuICAgICAgICAgIGVycm9yVXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCArIDEsXG4gICAgICAgICAgaXNGZXRjaGluZzogZmFsc2UsXG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogJ2Vycm9yJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnaW52YWxpZGF0ZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc0ludmFsaWRhdGVkOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdzZXRTdGF0ZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIGFjdGlvbi5zdGF0ZSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5O1xufSgpOyIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleUJ5T3B0aW9ucywgbWF0Y2hRdWVyeSwgcGFyc2VGaWx0ZXJBcmdzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG4vLyBDTEFTU1xuZXhwb3J0IHZhciBRdWVyeUNhY2hlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKFF1ZXJ5Q2FjaGUsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIFF1ZXJ5Q2FjaGUoY29uZmlnKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5jb25maWcgPSBjb25maWcgfHwge307XG4gICAgX3RoaXMucXVlcmllcyA9IFtdO1xuICAgIF90aGlzLnF1ZXJpZXNNYXAgPSB7fTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnlDYWNoZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkID0gZnVuY3Rpb24gYnVpbGQoY2xpZW50LCBvcHRpb25zLCBzdGF0ZSkge1xuICAgIHZhciBfb3B0aW9ucyRxdWVyeUhhc2g7XG5cbiAgICB2YXIgcXVlcnlLZXkgPSBvcHRpb25zLnF1ZXJ5S2V5O1xuICAgIHZhciBxdWVyeUhhc2ggPSAoX29wdGlvbnMkcXVlcnlIYXNoID0gb3B0aW9ucy5xdWVyeUhhc2gpICE9IG51bGwgPyBfb3B0aW9ucyRxdWVyeUhhc2ggOiBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIG9wdGlvbnMpO1xuICAgIHZhciBxdWVyeSA9IHRoaXMuZ2V0KHF1ZXJ5SGFzaCk7XG5cbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICBxdWVyeSA9IG5ldyBRdWVyeSh7XG4gICAgICAgIGNhY2hlOiB0aGlzLFxuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIHF1ZXJ5SGFzaDogcXVlcnlIYXNoLFxuICAgICAgICBvcHRpb25zOiBjbGllbnQuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKSxcbiAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICBkZWZhdWx0T3B0aW9uczogY2xpZW50LmdldFF1ZXJ5RGVmYXVsdHMocXVlcnlLZXkpLFxuICAgICAgICBtZXRhOiBvcHRpb25zLm1ldGFcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGQocXVlcnkpO1xuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfTtcblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKHF1ZXJ5KSB7XG4gICAgaWYgKCF0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXSkge1xuICAgICAgdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF0gPSBxdWVyeTtcbiAgICAgIHRoaXMucXVlcmllcy5wdXNoKHF1ZXJ5KTtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3F1ZXJ5QWRkZWQnLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKHF1ZXJ5KSB7XG4gICAgdmFyIHF1ZXJ5SW5NYXAgPSB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXTtcblxuICAgIGlmIChxdWVyeUluTWFwKSB7XG4gICAgICBxdWVyeS5kZXN0cm95KCk7XG4gICAgICB0aGlzLnF1ZXJpZXMgPSB0aGlzLnF1ZXJpZXMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBxdWVyeTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocXVlcnlJbk1hcCA9PT0gcXVlcnkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdxdWVyeVJlbW92ZWQnLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgX3RoaXMyLnJlbW92ZShxdWVyeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHF1ZXJ5SGFzaCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXNNYXBbcXVlcnlIYXNoXTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXM7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmQgPSBmdW5jdGlvbiBmaW5kKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBpZiAodHlwZW9mIGZpbHRlcnMuZXhhY3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBmaWx0ZXJzLmV4YWN0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzLmZpbmQoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmRBbGwgPSBmdW5jdGlvbiBmaW5kQWxsKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhmaWx0ZXJzKS5sZW5ndGggPiAwID8gdGhpcy5xdWVyaWVzLmZpbHRlcihmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgIHJldHVybiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KTtcbiAgICB9KSA6IHRoaXMucXVlcmllcztcbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KGV2ZW50KSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczQucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5vbkZvY3VzKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkub25PbmxpbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeUNhY2hlO1xufShTdWJzY3JpYmFibGUpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgUmV0cnllciB9IGZyb20gJy4vcmV0cnllcic7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi91dGlscyc7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIE11dGF0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTXV0YXRpb24oY29uZmlnKSB7XG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe30sIGNvbmZpZy5kZWZhdWx0T3B0aW9ucywgY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMubXV0YXRpb25JZCA9IGNvbmZpZy5tdXRhdGlvbklkO1xuICAgIHRoaXMubXV0YXRpb25DYWNoZSA9IGNvbmZpZy5tdXRhdGlvbkNhY2hlO1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5zdGF0ZSA9IGNvbmZpZy5zdGF0ZSB8fCBnZXREZWZhdWx0U3RhdGUoKTtcbiAgICB0aGlzLm1ldGEgPSBjb25maWcubWV0YTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBNdXRhdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldFN0YXRlID0gZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUpIHtcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdzZXRTdGF0ZScsXG4gICAgICBzdGF0ZTogc3RhdGVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAhPT0gb2JzZXJ2ZXI7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAodGhpcy5yZXRyeWVyKSB7XG4gICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsKCk7XG4gICAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2UudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbnRpbnVlID0gZnVuY3Rpb24gX2NvbnRpbnVlKCkge1xuICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgIHRoaXMucmV0cnllci5jb250aW51ZSgpO1xuICAgICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZSA9IGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBkYXRhO1xuICAgIHZhciByZXN0b3JlZCA9IHRoaXMuc3RhdGUuc3RhdHVzID09PSAnbG9hZGluZyc7XG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIGlmICghcmVzdG9yZWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnbG9hZGluZycsXG4gICAgICAgIHZhcmlhYmxlczogdGhpcy5vcHRpb25zLnZhcmlhYmxlc1xuICAgICAgfSk7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbk11dGF0ZShfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vbk11dGF0ZSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vbk11dGF0ZShfdGhpcy5zdGF0ZS52YXJpYWJsZXMpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBpZiAoY29udGV4dCAhPT0gX3RoaXMuc3RhdGUuY29udGV4dCkge1xuICAgICAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgICB2YXJpYWJsZXM6IF90aGlzLnN0YXRlLnZhcmlhYmxlc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5leGVjdXRlTXV0YXRpb24oKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgIGRhdGEgPSByZXN1bHQ7IC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuXG4gICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uU3VjY2VzcyhkYXRhLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQsIF90aGlzKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblNldHRsZWQoZGF0YSwgbnVsbCwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uRXJyb3IoZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCwgX3RoaXMpOyAvLyBMb2cgZXJyb3JcblxuICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uRXJyb3IoZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCh1bmRlZmluZWQsIGVycm9yLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICB9KTtcblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlTXV0YXRpb24gPSBmdW5jdGlvbiBleGVjdXRlTXV0YXRpb24oKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXMsXG4gICAgICAgIF90aGlzJG9wdGlvbnMkcmV0cnk7XG5cbiAgICB0aGlzLnJldHJ5ZXIgPSBuZXcgUmV0cnllcih7XG4gICAgICBmbjogZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMubXV0YXRpb25Gbikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTm8gbXV0YXRpb25GbiBmb3VuZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90aGlzMi5vcHRpb25zLm11dGF0aW9uRm4oX3RoaXMyLnN0YXRlLnZhcmlhYmxlcyk7XG4gICAgICB9LFxuICAgICAgb25GYWlsOiBmdW5jdGlvbiBvbkZhaWwoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25QYXVzZTogZnVuY3Rpb24gb25QYXVzZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAncGF1c2UnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGludWU6IGZ1bmN0aW9uIG9uQ29udGludWUoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2NvbnRpbnVlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogKF90aGlzJG9wdGlvbnMkcmV0cnkgPSB0aGlzLm9wdGlvbnMucmV0cnkpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJHJldHJ5IDogMCxcbiAgICAgIHJldHJ5RGVsYXk6IHRoaXMub3B0aW9ucy5yZXRyeURlbGF5XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHJlZHVjZXIodGhpcy5zdGF0ZSwgYWN0aW9uKTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5vYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIub25NdXRhdGlvblVwZGF0ZShhY3Rpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzMy5tdXRhdGlvbkNhY2hlLm5vdGlmeShfdGhpczMpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNdXRhdGlvbjtcbn0oKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUoKSB7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogdW5kZWZpbmVkLFxuICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBmYWlsdXJlQ291bnQ6IDAsXG4gICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgIHN0YXR1czogJ2lkbGUnLFxuICAgIHZhcmlhYmxlczogdW5kZWZpbmVkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mYWlsdXJlQ291bnQgKyAxXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3BhdXNlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNQYXVzZWQ6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnY29udGludWUnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGNvbnRleHQ6IGFjdGlvbi5jb250ZXh0LFxuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgIHN0YXR1czogJ2xvYWRpbmcnLFxuICAgICAgICB2YXJpYWJsZXM6IGFjdGlvbi52YXJpYWJsZXNcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGRhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdlcnJvcic6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IGFjdGlvbi5lcnJvcixcbiAgICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mYWlsdXJlQ291bnQgKyAxLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgIHN0YXR1czogJ2Vycm9yJ1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdzZXRTdGF0ZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBhY3Rpb24uc3RhdGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgTXV0YXRpb24gfSBmcm9tICcuL211dGF0aW9uJztcbmltcG9ydCB7IG1hdGNoTXV0YXRpb24sIG5vb3AgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTXV0YXRpb25DYWNoZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShNdXRhdGlvbkNhY2hlLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBNdXRhdGlvbkNhY2hlKGNvbmZpZykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIF90aGlzLm11dGF0aW9ucyA9IFtdO1xuICAgIF90aGlzLm11dGF0aW9uSWQgPSAwO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBNdXRhdGlvbkNhY2hlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYnVpbGQgPSBmdW5jdGlvbiBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgdmFyIG11dGF0aW9uID0gbmV3IE11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uQ2FjaGU6IHRoaXMsXG4gICAgICBtdXRhdGlvbklkOiArK3RoaXMubXV0YXRpb25JZCxcbiAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgZGVmYXVsdE9wdGlvbnM6IG9wdGlvbnMubXV0YXRpb25LZXkgPyBjbGllbnQuZ2V0TXV0YXRpb25EZWZhdWx0cyhvcHRpb25zLm11dGF0aW9uS2V5KSA6IHVuZGVmaW5lZCxcbiAgICAgIG1ldGE6IG9wdGlvbnMubWV0YVxuICAgIH0pO1xuICAgIHRoaXMuYWRkKG11dGF0aW9uKTtcbiAgICByZXR1cm4gbXV0YXRpb247XG4gIH07XG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChtdXRhdGlvbikge1xuICAgIHRoaXMubXV0YXRpb25zLnB1c2gobXV0YXRpb24pO1xuICAgIHRoaXMubm90aWZ5KG11dGF0aW9uKTtcbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKG11dGF0aW9uKSB7XG4gICAgdGhpcy5tdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICE9PSBtdXRhdGlvbjtcbiAgICB9KTtcbiAgICBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICB0aGlzLm5vdGlmeShtdXRhdGlvbik7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5tdXRhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgICAgX3RoaXMyLnJlbW92ZShtdXRhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsKCkge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZmluZCA9IGZ1bmN0aW9uIGZpbmQoZmlsdGVycykge1xuICAgIGlmICh0eXBlb2YgZmlsdGVycy5leGFjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpbHRlcnMuZXhhY3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucy5maW5kKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5maW5kQWxsID0gZnVuY3Rpb24gZmluZEFsbChmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgIHJldHVybiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KG11dGF0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIobXV0YXRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHRoaXMucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdGhpcy5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHZhciBwYXVzZWRNdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnN0YXRlLmlzUGF1c2VkO1xuICAgIH0pO1xuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBwYXVzZWRNdXRhdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChwcm9taXNlLCBtdXRhdGlvbikge1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gbXV0YXRpb24uY29udGludWUoKS5jYXRjaChub29wKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBQcm9taXNlLnJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE11dGF0aW9uQ2FjaGU7XG59KFN1YnNjcmliYWJsZSk7IiwgImltcG9ydCB7IGlzQ2FuY2VsYWJsZSB9IGZyb20gJy4vcmV0cnllcic7XG5pbXBvcnQgeyBnZXRBYm9ydENvbnRyb2xsZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCBmdW5jdGlvbiBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKSB7XG4gIHJldHVybiB7XG4gICAgb25GZXRjaDogZnVuY3Rpb24gb25GZXRjaChjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmZldGNoRm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfY29udGV4dCRmZXRjaE9wdGlvbnMsIF9jb250ZXh0JGZldGNoT3B0aW9uczIsIF9jb250ZXh0JGZldGNoT3B0aW9uczMsIF9jb250ZXh0JGZldGNoT3B0aW9uczQsIF9jb250ZXh0JHN0YXRlJGRhdGEsIF9jb250ZXh0JHN0YXRlJGRhdGEyO1xuXG4gICAgICAgIHZhciByZWZldGNoUGFnZSA9IChfY29udGV4dCRmZXRjaE9wdGlvbnMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IChfY29udGV4dCRmZXRjaE9wdGlvbnMyID0gX2NvbnRleHQkZmV0Y2hPcHRpb25zLm1ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMyLnJlZmV0Y2hQYWdlO1xuICAgICAgICB2YXIgZmV0Y2hNb3JlID0gKF9jb250ZXh0JGZldGNoT3B0aW9uczMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IChfY29udGV4dCRmZXRjaE9wdGlvbnM0ID0gX2NvbnRleHQkZmV0Y2hPcHRpb25zMy5tZXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zNC5mZXRjaE1vcmU7XG4gICAgICAgIHZhciBwYWdlUGFyYW0gPSBmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5wYWdlUGFyYW07XG4gICAgICAgIHZhciBpc0ZldGNoaW5nTmV4dFBhZ2UgPSAoZmV0Y2hNb3JlID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE1vcmUuZGlyZWN0aW9uKSA9PT0gJ2ZvcndhcmQnO1xuICAgICAgICB2YXIgaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSA9IChmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5kaXJlY3Rpb24pID09PSAnYmFja3dhcmQnO1xuICAgICAgICB2YXIgb2xkUGFnZXMgPSAoKF9jb250ZXh0JHN0YXRlJGRhdGEgPSBjb250ZXh0LnN0YXRlLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRzdGF0ZSRkYXRhLnBhZ2VzKSB8fCBbXTtcbiAgICAgICAgdmFyIG9sZFBhZ2VQYXJhbXMgPSAoKF9jb250ZXh0JHN0YXRlJGRhdGEyID0gY29udGV4dC5zdGF0ZS5kYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkc3RhdGUkZGF0YTIucGFnZVBhcmFtcykgfHwgW107XG4gICAgICAgIHZhciBhYm9ydENvbnRyb2xsZXIgPSBnZXRBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgdmFyIGFib3J0U2lnbmFsID0gYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICB2YXIgbmV3UGFnZVBhcmFtcyA9IG9sZFBhZ2VQYXJhbXM7XG4gICAgICAgIHZhciBjYW5jZWxsZWQgPSBmYWxzZTsgLy8gR2V0IHF1ZXJ5IGZ1bmN0aW9uXG5cbiAgICAgICAgdmFyIHF1ZXJ5Rm4gPSBjb250ZXh0Lm9wdGlvbnMucXVlcnlGbiB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdNaXNzaW5nIHF1ZXJ5Rm4nKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgYnVpbGROZXdQYWdlcyA9IGZ1bmN0aW9uIGJ1aWxkTmV3UGFnZXMocGFnZXMsIHBhcmFtLCBwYWdlLCBwcmV2aW91cykge1xuICAgICAgICAgIG5ld1BhZ2VQYXJhbXMgPSBwcmV2aW91cyA/IFtwYXJhbV0uY29uY2F0KG5ld1BhZ2VQYXJhbXMpIDogW10uY29uY2F0KG5ld1BhZ2VQYXJhbXMsIFtwYXJhbV0pO1xuICAgICAgICAgIHJldHVybiBwcmV2aW91cyA/IFtwYWdlXS5jb25jYXQocGFnZXMpIDogW10uY29uY2F0KHBhZ2VzLCBbcGFnZV0pO1xuICAgICAgICB9OyAvLyBDcmVhdGUgZnVuY3Rpb24gdG8gZmV0Y2ggYSBwYWdlXG5cblxuICAgICAgICB2YXIgZmV0Y2hQYWdlID0gZnVuY3Rpb24gZmV0Y2hQYWdlKHBhZ2VzLCBtYW51YWwsIHBhcmFtLCBwcmV2aW91cykge1xuICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnQ2FuY2VsbGVkJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3VuZGVmaW5lZCcgJiYgIW1hbnVhbCAmJiBwYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGFnZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBxdWVyeUZuQ29udGV4dCA9IHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBjb250ZXh0LnF1ZXJ5S2V5LFxuICAgICAgICAgICAgc2lnbmFsOiBhYm9ydFNpZ25hbCxcbiAgICAgICAgICAgIHBhZ2VQYXJhbTogcGFyYW0sXG4gICAgICAgICAgICBtZXRhOiBjb250ZXh0Lm1ldGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZhciBxdWVyeUZuUmVzdWx0ID0gcXVlcnlGbihxdWVyeUZuQ29udGV4dCk7XG4gICAgICAgICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUocXVlcnlGblJlc3VsdCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkTmV3UGFnZXMocGFnZXMsIHBhcmFtLCBwYWdlLCBwcmV2aW91cyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHF1ZXJ5Rm5SZXN1bHQpKSB7XG4gICAgICAgICAgICB2YXIgcHJvbWlzZUFzQW55ID0gcHJvbWlzZTtcbiAgICAgICAgICAgIHByb21pc2VBc0FueS5jYW5jZWwgPSBxdWVyeUZuUmVzdWx0LmNhbmNlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcHJvbWlzZTsgLy8gRmV0Y2ggZmlyc3QgcGFnZT9cblxuICAgICAgICBpZiAoIW9sZFBhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2UoW10pO1xuICAgICAgICB9IC8vIEZldGNoIG5leHQgcGFnZT9cbiAgICAgICAgZWxzZSBpZiAoaXNGZXRjaGluZ05leHRQYWdlKSB7XG4gICAgICAgICAgICB2YXIgbWFudWFsID0gdHlwZW9mIHBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgICB2YXIgcGFyYW0gPSBtYW51YWwgPyBwYWdlUGFyYW0gOiBnZXROZXh0UGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgb2xkUGFnZXMpO1xuICAgICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShvbGRQYWdlcywgbWFudWFsLCBwYXJhbSk7XG4gICAgICAgICAgfSAvLyBGZXRjaCBwcmV2aW91cyBwYWdlP1xuICAgICAgICAgIGVsc2UgaWYgKGlzRmV0Y2hpbmdQcmV2aW91c1BhZ2UpIHtcbiAgICAgICAgICAgICAgdmFyIF9tYW51YWwgPSB0eXBlb2YgcGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJztcblxuICAgICAgICAgICAgICB2YXIgX3BhcmFtID0gX21hbnVhbCA/IHBhZ2VQYXJhbSA6IGdldFByZXZpb3VzUGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgb2xkUGFnZXMpO1xuXG4gICAgICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2Uob2xkUGFnZXMsIF9tYW51YWwsIF9wYXJhbSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IC8vIFJlZmV0Y2ggcGFnZXNcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICBuZXdQYWdlUGFyYW1zID0gW107XG4gICAgICAgICAgICAgICAgICB2YXIgbWFudWFsID0gdHlwZW9mIGNvbnRleHQub3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtID09PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRGZXRjaEZpcnN0UGFnZSA9IHJlZmV0Y2hQYWdlICYmIG9sZFBhZ2VzWzBdID8gcmVmZXRjaFBhZ2Uob2xkUGFnZXNbMF0sIDAsIG9sZFBhZ2VzKSA6IHRydWU7IC8vIEZldGNoIGZpcnN0IHBhZ2VcblxuICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNob3VsZEZldGNoRmlyc3RQYWdlID8gZmV0Y2hQYWdlKFtdLCBtYW51YWwsIG9sZFBhZ2VQYXJhbXNbMF0pIDogUHJvbWlzZS5yZXNvbHZlKGJ1aWxkTmV3UGFnZXMoW10sIG9sZFBhZ2VQYXJhbXNbMF0sIG9sZFBhZ2VzWzBdKSk7IC8vIEZldGNoIHJlbWFpbmluZyBwYWdlc1xuXG4gICAgICAgICAgICAgICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHBhZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZEZldGNoTmV4dFBhZ2UgPSByZWZldGNoUGFnZSAmJiBvbGRQYWdlc1tpXSA/IHJlZmV0Y2hQYWdlKG9sZFBhZ2VzW2ldLCBpLCBvbGRQYWdlcykgOiB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEZldGNoTmV4dFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcGFyYW0yID0gbWFudWFsID8gb2xkUGFnZVBhcmFtc1tpXSA6IGdldE5leHRQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBwYWdlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaFBhZ2UocGFnZXMsIG1hbnVhbCwgX3BhcmFtMik7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShidWlsZE5ld1BhZ2VzKHBhZ2VzLCBvbGRQYWdlUGFyYW1zW2ldLCBvbGRQYWdlc1tpXSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgb2xkUGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvb3AoaSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgIHZhciBmaW5hbFByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHBhZ2VzKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhZ2VzOiBwYWdlcyxcbiAgICAgICAgICAgIHBhZ2VQYXJhbXM6IG5ld1BhZ2VQYXJhbXNcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGZpbmFsUHJvbWlzZUFzQW55ID0gZmluYWxQcm9taXNlO1xuXG4gICAgICAgIGZpbmFsUHJvbWlzZUFzQW55LmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgIGFib3J0Q29udHJvbGxlciA9PSBudWxsID8gdm9pZCAwIDogYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG5cbiAgICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHByb21pc2UpKSB7XG4gICAgICAgICAgICBwcm9taXNlLmNhbmNlbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZmluYWxQcm9taXNlO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dFBhZ2VQYXJhbShvcHRpb25zLCBwYWdlcykge1xuICByZXR1cm4gb3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0ocGFnZXNbcGFnZXMubGVuZ3RoIC0gMV0sIHBhZ2VzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2aW91c1BhZ2VQYXJhbShvcHRpb25zLCBwYWdlcykge1xuICByZXR1cm4gb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbSA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbShwYWdlc1swXSwgcGFnZXMpO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgaXMgYSBuZXh0IHBhZ2UuXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXh0UGFnZShvcHRpb25zLCBwYWdlcykge1xuICBpZiAob3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtICYmIEFycmF5LmlzQXJyYXkocGFnZXMpKSB7XG4gICAgdmFyIG5leHRQYWdlUGFyYW0gPSBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKTtcbiAgICByZXR1cm4gdHlwZW9mIG5leHRQYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnICYmIG5leHRQYWdlUGFyYW0gIT09IG51bGwgJiYgbmV4dFBhZ2VQYXJhbSAhPT0gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgcHJldmlvdXMgcGFnZS5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ByZXZpb3VzUGFnZShvcHRpb25zLCBwYWdlcykge1xuICBpZiAob3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbSAmJiBBcnJheS5pc0FycmF5KHBhZ2VzKSkge1xuICAgIHZhciBwcmV2aW91c1BhZ2VQYXJhbSA9IGdldFByZXZpb3VzUGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKTtcbiAgICByZXR1cm4gdHlwZW9mIHByZXZpb3VzUGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJyAmJiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gbnVsbCAmJiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gZmFsc2U7XG4gIH1cbn0iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBoYXNoUXVlcnlLZXksIG5vb3AsIHBhcnNlRmlsdGVyQXJncywgcGFyc2VRdWVyeUFyZ3MsIHBhcnRpYWxNYXRjaEtleSwgaGFzaFF1ZXJ5S2V5QnlPcHRpb25zIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBRdWVyeUNhY2hlIH0gZnJvbSAnLi9xdWVyeUNhY2hlJztcbmltcG9ydCB7IE11dGF0aW9uQ2FjaGUgfSBmcm9tICcuL211dGF0aW9uQ2FjaGUnO1xuaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSAnLi9mb2N1c01hbmFnZXInO1xuaW1wb3J0IHsgb25saW5lTWFuYWdlciB9IGZyb20gJy4vb25saW5lTWFuYWdlcic7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IGluZmluaXRlUXVlcnlCZWhhdmlvciB9IGZyb20gJy4vaW5maW5pdGVRdWVyeUJlaGF2aW9yJztcbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5Q2xpZW50ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUXVlcnlDbGllbnQoY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7XG4gICAgICBjb25maWcgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLnF1ZXJ5Q2FjaGUgPSBjb25maWcucXVlcnlDYWNoZSB8fCBuZXcgUXVlcnlDYWNoZSgpO1xuICAgIHRoaXMubXV0YXRpb25DYWNoZSA9IGNvbmZpZy5tdXRhdGlvbkNhY2hlIHx8IG5ldyBNdXRhdGlvbkNhY2hlKCk7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGNvbmZpZy5kZWZhdWx0T3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLnF1ZXJ5RGVmYXVsdHMgPSBbXTtcbiAgICB0aGlzLm11dGF0aW9uRGVmYXVsdHMgPSBbXTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeUNsaWVudC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm1vdW50ID0gZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMudW5zdWJzY3JpYmVGb2N1cyA9IGZvY3VzTWFuYWdlci5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5vbkZvY3VzKCk7XG5cbiAgICAgICAgX3RoaXMucXVlcnlDYWNoZS5vbkZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy51bnN1YnNjcmliZU9ubGluZSA9IG9ubGluZU1hbmFnZXIuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgJiYgb25saW5lTWFuYWdlci5pc09ubGluZSgpKSB7XG4gICAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUub25PbmxpbmUoKTtcblxuICAgICAgICBfdGhpcy5xdWVyeUNhY2hlLm9uT25saW5lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnVubW91bnQgPSBmdW5jdGlvbiB1bm1vdW50KCkge1xuICAgIHZhciBfdGhpcyR1bnN1YnNjcmliZUZvY3UsIF90aGlzJHVuc3Vic2NyaWJlT25saTtcblxuICAgIChfdGhpcyR1bnN1YnNjcmliZUZvY3UgPSB0aGlzLnVuc3Vic2NyaWJlRm9jdXMpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyR1bnN1YnNjcmliZUZvY3UuY2FsbCh0aGlzKTtcbiAgICAoX3RoaXMkdW5zdWJzY3JpYmVPbmxpID0gdGhpcy51bnN1YnNjcmliZU9ubGluZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHVuc3Vic2NyaWJlT25saS5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5pc0ZldGNoaW5nID0gZnVuY3Rpb24gaXNGZXRjaGluZyhhcmcxLCBhcmcyKSB7XG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzWzBdO1xuXG4gICAgZmlsdGVycy5mZXRjaGluZyA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmxlbmd0aDtcbiAgfTtcblxuICBfcHJvdG8uaXNNdXRhdGluZyA9IGZ1bmN0aW9uIGlzTXV0YXRpbmcoZmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9uQ2FjaGUuZmluZEFsbChfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgZmV0Y2hpbmc6IHRydWVcbiAgICB9KSkubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyeURhdGEgPSBmdW5jdGlvbiBnZXRRdWVyeURhdGEocXVlcnlLZXksIGZpbHRlcnMpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlDYWNoZSRmaW5kO1xuXG4gICAgcmV0dXJuIChfdGhpcyRxdWVyeUNhY2hlJGZpbmQgPSB0aGlzLnF1ZXJ5Q2FjaGUuZmluZChxdWVyeUtleSwgZmlsdGVycykpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeUNhY2hlJGZpbmQuc3RhdGUuZGF0YTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcmllc0RhdGEgPSBmdW5jdGlvbiBnZXRRdWVyaWVzRGF0YShxdWVyeUtleU9yRmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5Q2FjaGUoKS5maW5kQWxsKHF1ZXJ5S2V5T3JGaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBxdWVyeUtleSA9IF9yZWYucXVlcnlLZXksXG4gICAgICAgICAgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICAgICAgdmFyIGRhdGEgPSBzdGF0ZS5kYXRhO1xuICAgICAgcmV0dXJuIFtxdWVyeUtleSwgZGF0YV07XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJ5RGF0YSA9IGZ1bmN0aW9uIHNldFF1ZXJ5RGF0YShxdWVyeUtleSwgdXBkYXRlciwgb3B0aW9ucykge1xuICAgIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MocXVlcnlLZXkpO1xuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKHBhcnNlZE9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2FjaGUuYnVpbGQodGhpcywgZGVmYXVsdGVkT3B0aW9ucykuc2V0RGF0YSh1cGRhdGVyLCBvcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcmllc0RhdGEgPSBmdW5jdGlvbiBzZXRRdWVyaWVzRGF0YShxdWVyeUtleU9yRmlsdGVycywgdXBkYXRlciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzMi5nZXRRdWVyeUNhY2hlKCkuZmluZEFsbChxdWVyeUtleU9yRmlsdGVycykubWFwKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgcXVlcnlLZXkgPSBfcmVmMi5xdWVyeUtleTtcbiAgICAgICAgcmV0dXJuIFtxdWVyeUtleSwgX3RoaXMyLnNldFF1ZXJ5RGF0YShxdWVyeUtleSwgdXBkYXRlciwgb3B0aW9ucyldO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5U3RhdGUgPSBmdW5jdGlvbiBnZXRRdWVyeVN0YXRlKHF1ZXJ5S2V5LCBmaWx0ZXJzKSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDI7XG5cbiAgICByZXR1cm4gKF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDIgPSB0aGlzLnF1ZXJ5Q2FjaGUuZmluZChxdWVyeUtleSwgZmlsdGVycykpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeUNhY2hlJGZpbmQyLnN0YXRlO1xuICB9O1xuXG4gIF9wcm90by5yZW1vdmVRdWVyaWVzID0gZnVuY3Rpb24gcmVtb3ZlUXVlcmllcyhhcmcxLCBhcmcyKSB7XG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MyID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczJbMF07XG5cbiAgICB2YXIgcXVlcnlDYWNoZSA9IHRoaXMucXVlcnlDYWNoZTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeUNhY2hlLnJlbW92ZShxdWVyeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXRRdWVyaWVzID0gZnVuY3Rpb24gcmVzZXRRdWVyaWVzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzMyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3MzWzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczNbMV07XG5cbiAgICB2YXIgcXVlcnlDYWNoZSA9IHRoaXMucXVlcnlDYWNoZTtcblxuICAgIHZhciByZWZldGNoRmlsdGVycyA9IF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICBhY3RpdmU6IHRydWVcbiAgICB9KTtcblxuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5yZXNldCgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX3RoaXMzLnJlZmV0Y2hRdWVyaWVzKHJlZmV0Y2hGaWx0ZXJzLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsUXVlcmllcyA9IGZ1bmN0aW9uIGNhbmNlbFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3M0ID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczRbMF0sXG4gICAgICAgIF9wYXJzZUZpbHRlckFyZ3M0JCA9IF9wYXJzZUZpbHRlckFyZ3M0WzFdLFxuICAgICAgICBjYW5jZWxPcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczQkID09PSB2b2lkIDAgPyB7fSA6IF9wYXJzZUZpbHRlckFyZ3M0JDtcblxuICAgIGlmICh0eXBlb2YgY2FuY2VsT3B0aW9ucy5yZXZlcnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjYW5jZWxPcHRpb25zLnJldmVydCA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM0LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBxdWVyeS5jYW5jZWwoY2FuY2VsT3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH07XG5cbiAgX3Byb3RvLmludmFsaWRhdGVRdWVyaWVzID0gZnVuY3Rpb24gaW52YWxpZGF0ZVF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfcmVmMyxcbiAgICAgICAgX2ZpbHRlcnMkcmVmZXRjaEFjdGl2LFxuICAgICAgICBfZmlsdGVycyRyZWZldGNoSW5hY3QsXG4gICAgICAgIF90aGlzNSA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczUgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNVswXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M1WzFdO1xuXG4gICAgdmFyIHJlZmV0Y2hGaWx0ZXJzID0gX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIC8vIGlmIGZpbHRlcnMucmVmZXRjaEFjdGl2ZSBpcyBub3QgcHJvdmlkZWQgYW5kIGZpbHRlcnMuYWN0aXZlIGlzIGV4cGxpY2l0bHkgZmFsc2UsXG4gICAgICAvLyBlLmcuIGludmFsaWRhdGVRdWVyaWVzKHsgYWN0aXZlOiBmYWxzZSB9KSwgd2UgZG9uJ3Qgd2FudCB0byByZWZldGNoIGFjdGl2ZSBxdWVyaWVzXG4gICAgICBhY3RpdmU6IChfcmVmMyA9IChfZmlsdGVycyRyZWZldGNoQWN0aXYgPSBmaWx0ZXJzLnJlZmV0Y2hBY3RpdmUpICE9IG51bGwgPyBfZmlsdGVycyRyZWZldGNoQWN0aXYgOiBmaWx0ZXJzLmFjdGl2ZSkgIT0gbnVsbCA/IF9yZWYzIDogdHJ1ZSxcbiAgICAgIGluYWN0aXZlOiAoX2ZpbHRlcnMkcmVmZXRjaEluYWN0ID0gZmlsdGVycy5yZWZldGNoSW5hY3RpdmUpICE9IG51bGwgPyBfZmlsdGVycyRyZWZldGNoSW5hY3QgOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5pbnZhbGlkYXRlKCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF90aGlzNS5yZWZldGNoUXVlcmllcyhyZWZldGNoRmlsdGVycywgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlZmV0Y2hRdWVyaWVzID0gZnVuY3Rpb24gcmVmZXRjaFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3M2ID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczZbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNlsxXTtcblxuICAgIHZhciBwcm9taXNlcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzNi5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubWFwKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICByZXR1cm4gcXVlcnkuZmV0Y2godW5kZWZpbmVkLCBfZXh0ZW5kcyh7fSwgb3B0aW9ucywge1xuICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgIHJlZmV0Y2hQYWdlOiBmaWx0ZXJzID09IG51bGwgPyB2b2lkIDAgOiBmaWx0ZXJzLnJlZmV0Y2hQYWdlXG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKG5vb3ApO1xuXG4gICAgaWYgKCEob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy50aHJvd09uRXJyb3IpKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hRdWVyeSA9IGZ1bmN0aW9uIGZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MoYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMocGFyc2VkT3B0aW9ucyk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YW5uZXJsaW5zbGV5L3JlYWN0LXF1ZXJ5L2lzc3Vlcy82NTJcblxuICAgIGlmICh0eXBlb2YgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucmV0cnkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgcXVlcnkgPSB0aGlzLnF1ZXJ5Q2FjaGUuYnVpbGQodGhpcywgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHF1ZXJ5LmlzU3RhbGVCeVRpbWUoZGVmYXVsdGVkT3B0aW9ucy5zdGFsZVRpbWUpID8gcXVlcnkuZmV0Y2goZGVmYXVsdGVkT3B0aW9ucykgOiBQcm9taXNlLnJlc29sdmUocXVlcnkuc3RhdGUuZGF0YSk7XG4gIH07XG5cbiAgX3Byb3RvLnByZWZldGNoUXVlcnkgPSBmdW5jdGlvbiBwcmVmZXRjaFF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoSW5maW5pdGVRdWVyeSA9IGZ1bmN0aW9uIGZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgICBwYXJzZWRPcHRpb25zLmJlaGF2aW9yID0gaW5maW5pdGVRdWVyeUJlaGF2aW9yKCk7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hRdWVyeShwYXJzZWRPcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8ucHJlZmV0Y2hJbmZpbml0ZVF1ZXJ5ID0gZnVuY3Rpb24gcHJlZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsTXV0YXRpb25zID0gZnVuY3Rpb24gY2FuY2VsTXV0YXRpb25zKCkge1xuICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM3Lm11dGF0aW9uQ2FjaGUuZ2V0QWxsKCkubWFwKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgICByZXR1cm4gbXV0YXRpb24uY2FuY2VsKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc3VtZVBhdXNlZE11dGF0aW9ucyA9IGZ1bmN0aW9uIHJlc3VtZVBhdXNlZE11dGF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNdXRhdGlvbkNhY2hlKCkucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGVNdXRhdGlvbiA9IGZ1bmN0aW9uIGV4ZWN1dGVNdXRhdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZS5idWlsZCh0aGlzLCBvcHRpb25zKS5leGVjdXRlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5Q2FjaGUgPSBmdW5jdGlvbiBnZXRRdWVyeUNhY2hlKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2FjaGU7XG4gIH07XG5cbiAgX3Byb3RvLmdldE11dGF0aW9uQ2FjaGUgPSBmdW5jdGlvbiBnZXRNdXRhdGlvbkNhY2hlKCkge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9uQ2FjaGU7XG4gIH07XG5cbiAgX3Byb3RvLmdldERlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdE9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNldERlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyeURlZmF1bHRzID0gZnVuY3Rpb24gc2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSwgb3B0aW9ucykge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLnF1ZXJ5RGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIGhhc2hRdWVyeUtleShxdWVyeUtleSkgPT09IGhhc2hRdWVyeUtleSh4LnF1ZXJ5S2V5KTtcbiAgICB9KTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlcnlEZWZhdWx0cy5wdXNoKHtcbiAgICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyeURlZmF1bHRzID0gZnVuY3Rpb24gZ2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSkge1xuICAgIHZhciBfdGhpcyRxdWVyeURlZmF1bHRzJGY7XG5cbiAgICByZXR1cm4gcXVlcnlLZXkgPyAoX3RoaXMkcXVlcnlEZWZhdWx0cyRmID0gdGhpcy5xdWVyeURlZmF1bHRzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwYXJ0aWFsTWF0Y2hLZXkocXVlcnlLZXksIHgucXVlcnlLZXkpO1xuICAgIH0pKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcXVlcnlEZWZhdWx0cyRmLmRlZmF1bHRPcHRpb25zIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIF9wcm90by5zZXRNdXRhdGlvbkRlZmF1bHRzID0gZnVuY3Rpb24gc2V0TXV0YXRpb25EZWZhdWx0cyhtdXRhdGlvbktleSwgb3B0aW9ucykge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLm11dGF0aW9uRGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIGhhc2hRdWVyeUtleShtdXRhdGlvbktleSkgPT09IGhhc2hRdWVyeUtleSh4Lm11dGF0aW9uS2V5KTtcbiAgICB9KTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXV0YXRpb25EZWZhdWx0cy5wdXNoKHtcbiAgICAgICAgbXV0YXRpb25LZXk6IG11dGF0aW9uS2V5LFxuICAgICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5nZXRNdXRhdGlvbkRlZmF1bHRzID0gZnVuY3Rpb24gZ2V0TXV0YXRpb25EZWZhdWx0cyhtdXRhdGlvbktleSkge1xuICAgIHZhciBfdGhpcyRtdXRhdGlvbkRlZmF1bHQ7XG5cbiAgICByZXR1cm4gbXV0YXRpb25LZXkgPyAoX3RoaXMkbXV0YXRpb25EZWZhdWx0ID0gdGhpcy5tdXRhdGlvbkRlZmF1bHRzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwYXJ0aWFsTWF0Y2hLZXkobXV0YXRpb25LZXksIHgubXV0YXRpb25LZXkpO1xuICAgIH0pKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkbXV0YXRpb25EZWZhdWx0LmRlZmF1bHRPcHRpb25zIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0UXVlcnlPcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucy5xdWVyaWVzLCB0aGlzLmdldFF1ZXJ5RGVmYXVsdHMob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5xdWVyeUtleSksIG9wdGlvbnMsIHtcbiAgICAgIF9kZWZhdWx0ZWQ6IHRydWVcbiAgICB9KTtcblxuICAgIGlmICghZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2ggJiYgZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUtleSkge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2ggPSBoYXNoUXVlcnlLZXlCeU9wdGlvbnMoZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUtleSwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmF1bHRlZE9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdE11dGF0aW9uT3B0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRNdXRhdGlvbk9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLl9kZWZhdWx0ZWQpIHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucy5tdXRhdGlvbnMsIHRoaXMuZ2V0TXV0YXRpb25EZWZhdWx0cyhvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLm11dGF0aW9uS2V5KSwgb3B0aW9ucywge1xuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHRoaXMucXVlcnlDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMubXV0YXRpb25DYWNoZS5jbGVhcigpO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeUNsaWVudDtcbn0oKTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IGlzU2VydmVyLCBpc1ZhbGlkVGltZW91dCwgbm9vcCwgcmVwbGFjZUVxdWFsRGVlcCwgc2hhbGxvd0VxdWFsT2JqZWN0cywgdGltZVVudGlsU3RhbGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSAnLi9mb2N1c01hbmFnZXInO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgaXNDYW5jZWxsZWRFcnJvciB9IGZyb20gJy4vcmV0cnllcic7XG5leHBvcnQgdmFyIFF1ZXJ5T2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoUXVlcnlPYnNlcnZlciwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gUXVlcnlPYnNlcnZlcihjbGllbnQsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICBfdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICBfdGhpcy50cmFja2VkUHJvcHMgPSBbXTtcbiAgICBfdGhpcy5zZWxlY3RFcnJvciA9IG51bGw7XG5cbiAgICBfdGhpcy5iaW5kTWV0aG9kcygpO1xuXG4gICAgX3RoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeU9ic2VydmVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYmluZE1ldGhvZHMgPSBmdW5jdGlvbiBiaW5kTWV0aG9kcygpIHtcbiAgICB0aGlzLnJlbW92ZSA9IHRoaXMucmVtb3ZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZWZldGNoID0gdGhpcy5yZWZldGNoLmJpbmQodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7XG4gICAgaWYgKHRoaXMubGlzdGVuZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5jdXJyZW50UXVlcnkuYWRkT2JzZXJ2ZXIodGhpcyk7XG5cbiAgICAgIGlmIChzaG91bGRGZXRjaE9uTW91bnQodGhpcy5jdXJyZW50UXVlcnksIHRoaXMub3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2goKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVUaW1lcnMoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5saXN0ZW5lcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNob3VsZEZldGNoT25SZWNvbm5lY3QgPSBmdW5jdGlvbiBzaG91bGRGZXRjaE9uUmVjb25uZWN0KCkge1xuICAgIHJldHVybiBzaG91bGRGZXRjaE9uKHRoaXMuY3VycmVudFF1ZXJ5LCB0aGlzLm9wdGlvbnMsIHRoaXMub3B0aW9ucy5yZWZldGNoT25SZWNvbm5lY3QpO1xuICB9O1xuXG4gIF9wcm90by5zaG91bGRGZXRjaE9uV2luZG93Rm9jdXMgPSBmdW5jdGlvbiBzaG91bGRGZXRjaE9uV2luZG93Rm9jdXMoKSB7XG4gICAgcmV0dXJuIHNob3VsZEZldGNoT24odGhpcy5jdXJyZW50UXVlcnksIHRoaXMub3B0aW9ucywgdGhpcy5vcHRpb25zLnJlZmV0Y2hPbldpbmRvd0ZvY3VzKTtcbiAgfTtcblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbiAgICB0aGlzLmNsZWFyVGltZXJzKCk7XG4gICAgdGhpcy5jdXJyZW50UXVlcnkucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE9wdGlvbnMgPSBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMsIG5vdGlmeU9wdGlvbnMpIHtcbiAgICB2YXIgcHJldk9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHByZXZRdWVyeSA9IHRoaXMuY3VycmVudFF1ZXJ5O1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuY2xpZW50LmRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyhvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGVuYWJsZWQgdG8gYmUgYSBib29sZWFuJyk7XG4gICAgfSAvLyBLZWVwIHByZXZpb3VzIHF1ZXJ5IGtleSBpZiB0aGUgdXNlciBkb2VzIG5vdCBzdXBwbHkgb25lXG5cblxuICAgIGlmICghdGhpcy5vcHRpb25zLnF1ZXJ5S2V5KSB7XG4gICAgICB0aGlzLm9wdGlvbnMucXVlcnlLZXkgPSBwcmV2T3B0aW9ucy5xdWVyeUtleTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVF1ZXJ5KCk7XG4gICAgdmFyIG1vdW50ZWQgPSB0aGlzLmhhc0xpc3RlbmVycygpOyAvLyBGZXRjaCBpZiB0aGVyZSBhcmUgc3Vic2NyaWJlcnNcblxuICAgIGlmIChtb3VudGVkICYmIHNob3VsZEZldGNoT3B0aW9uYWxseSh0aGlzLmN1cnJlbnRRdWVyeSwgcHJldlF1ZXJ5LCB0aGlzLm9wdGlvbnMsIHByZXZPcHRpb25zKSkge1xuICAgICAgdGhpcy5leGVjdXRlRmV0Y2goKTtcbiAgICB9IC8vIFVwZGF0ZSByZXN1bHRcblxuXG4gICAgdGhpcy51cGRhdGVSZXN1bHQobm90aWZ5T3B0aW9ucyk7IC8vIFVwZGF0ZSBzdGFsZSBpbnRlcnZhbCBpZiBuZWVkZWRcblxuICAgIGlmIChtb3VudGVkICYmICh0aGlzLmN1cnJlbnRRdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSBwcmV2T3B0aW9ucy5lbmFibGVkIHx8IHRoaXMub3B0aW9ucy5zdGFsZVRpbWUgIT09IHByZXZPcHRpb25zLnN0YWxlVGltZSkpIHtcbiAgICAgIHRoaXMudXBkYXRlU3RhbGVUaW1lb3V0KCk7XG4gICAgfVxuXG4gICAgdmFyIG5leHRSZWZldGNoSW50ZXJ2YWwgPSB0aGlzLmNvbXB1dGVSZWZldGNoSW50ZXJ2YWwoKTsgLy8gVXBkYXRlIHJlZmV0Y2ggaW50ZXJ2YWwgaWYgbmVlZGVkXG5cbiAgICBpZiAobW91bnRlZCAmJiAodGhpcy5jdXJyZW50UXVlcnkgIT09IHByZXZRdWVyeSB8fCB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gcHJldk9wdGlvbnMuZW5hYmxlZCB8fCBuZXh0UmVmZXRjaEludGVydmFsICE9PSB0aGlzLmN1cnJlbnRSZWZldGNoSW50ZXJ2YWwpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVJlZmV0Y2hJbnRlcnZhbChuZXh0UmVmZXRjaEludGVydmFsKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE9wdGltaXN0aWNSZXN1bHQgPSBmdW5jdGlvbiBnZXRPcHRpbWlzdGljUmVzdWx0KG9wdGlvbnMpIHtcbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuY2xpZW50LmRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyhvcHRpb25zKTtcbiAgICB2YXIgcXVlcnkgPSB0aGlzLmNsaWVudC5nZXRRdWVyeUNhY2hlKCkuYnVpbGQodGhpcy5jbGllbnQsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJlc3VsdChxdWVyeSwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gIH07XG5cbiAgX3Byb3RvLmdldEN1cnJlbnRSZXN1bHQgPSBmdW5jdGlvbiBnZXRDdXJyZW50UmVzdWx0KCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRSZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLnRyYWNrUmVzdWx0ID0gZnVuY3Rpb24gdHJhY2tSZXN1bHQocmVzdWx0LCBkZWZhdWx0ZWRPcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgdHJhY2tlZFJlc3VsdCA9IHt9O1xuXG4gICAgdmFyIHRyYWNrUHJvcCA9IGZ1bmN0aW9uIHRyYWNrUHJvcChrZXkpIHtcbiAgICAgIGlmICghX3RoaXMyLnRyYWNrZWRQcm9wcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIF90aGlzMi50cmFja2VkUHJvcHMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRyYWNrZWRSZXN1bHQsIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICB0cmFja1Byb3Aoa2V5KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGRlZmF1bHRlZE9wdGlvbnMudXNlRXJyb3JCb3VuZGFyeSB8fCBkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlKSB7XG4gICAgICB0cmFja1Byb3AoJ2Vycm9yJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYWNrZWRSZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLmdldE5leHRSZXN1bHQgPSBmdW5jdGlvbiBnZXROZXh0UmVzdWx0KG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgdW5zdWJzY3JpYmUgPSBfdGhpczMuc3Vic2NyaWJlKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgaWYgKCFyZXN1bHQuaXNGZXRjaGluZykge1xuICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgICBpZiAocmVzdWx0LmlzRXJyb3IgJiYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMudGhyb3dPbkVycm9yKSkge1xuICAgICAgICAgICAgcmVqZWN0KHJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXRDdXJyZW50UXVlcnkgPSBmdW5jdGlvbiBnZXRDdXJyZW50UXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFF1ZXJ5O1xuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgdGhpcy5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLnJlbW92ZSh0aGlzLmN1cnJlbnRRdWVyeSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlZmV0Y2ggPSBmdW5jdGlvbiByZWZldGNoKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaChfZXh0ZW5kcyh7fSwgb3B0aW9ucywge1xuICAgICAgbWV0YToge1xuICAgICAgICByZWZldGNoUGFnZTogb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZWZldGNoUGFnZVxuICAgICAgfVxuICAgIH0pKTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hPcHRpbWlzdGljID0gZnVuY3Rpb24gZmV0Y2hPcHRpbWlzdGljKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5jbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpO1xuICAgIHZhciBxdWVyeSA9IHRoaXMuY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLmNsaWVudCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHF1ZXJ5LmZldGNoKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM0LmNyZWF0ZVJlc3VsdChxdWVyeSwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoID0gZnVuY3Rpb24gZmV0Y2goZmV0Y2hPcHRpb25zKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlRmV0Y2goZmV0Y2hPcHRpb25zKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNS51cGRhdGVSZXN1bHQoKTtcblxuICAgICAgcmV0dXJuIF90aGlzNS5jdXJyZW50UmVzdWx0O1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlRmV0Y2ggPSBmdW5jdGlvbiBleGVjdXRlRmV0Y2goZmV0Y2hPcHRpb25zKSB7XG4gICAgLy8gTWFrZSBzdXJlIHdlIHJlZmVyZW5jZSB0aGUgbGF0ZXN0IHF1ZXJ5IGFzIHRoZSBjdXJyZW50IG9uZSBtaWdodCBoYXZlIGJlZW4gcmVtb3ZlZFxuICAgIHRoaXMudXBkYXRlUXVlcnkoKTsgLy8gRmV0Y2hcblxuICAgIHZhciBwcm9taXNlID0gdGhpcy5jdXJyZW50UXVlcnkuZmV0Y2godGhpcy5vcHRpb25zLCBmZXRjaE9wdGlvbnMpO1xuXG4gICAgaWYgKCEoZmV0Y2hPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE9wdGlvbnMudGhyb3dPbkVycm9yKSkge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuY2F0Y2gobm9vcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVN0YWxlVGltZW91dCA9IGZ1bmN0aW9uIHVwZGF0ZVN0YWxlVGltZW91dCgpIHtcbiAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgIHRoaXMuY2xlYXJTdGFsZVRpbWVvdXQoKTtcblxuICAgIGlmIChpc1NlcnZlciB8fCB0aGlzLmN1cnJlbnRSZXN1bHQuaXNTdGFsZSB8fCAhaXNWYWxpZFRpbWVvdXQodGhpcy5vcHRpb25zLnN0YWxlVGltZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGltZSA9IHRpbWVVbnRpbFN0YWxlKHRoaXMuY3VycmVudFJlc3VsdC5kYXRhVXBkYXRlZEF0LCB0aGlzLm9wdGlvbnMuc3RhbGVUaW1lKTsgLy8gVGhlIHRpbWVvdXQgaXMgc29tZXRpbWVzIHRyaWdnZXJlZCAxIG1zIGJlZm9yZSB0aGUgc3RhbGUgdGltZSBleHBpcmF0aW9uLlxuICAgIC8vIFRvIG1pdGlnYXRlIHRoaXMgaXNzdWUgd2UgYWx3YXlzIGFkZCAxIG1zIHRvIHRoZSB0aW1lb3V0LlxuXG4gICAgdmFyIHRpbWVvdXQgPSB0aW1lICsgMTtcbiAgICB0aGlzLnN0YWxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIV90aGlzNi5jdXJyZW50UmVzdWx0LmlzU3RhbGUpIHtcbiAgICAgICAgX3RoaXM2LnVwZGF0ZVJlc3VsdCgpO1xuICAgICAgfVxuICAgIH0sIHRpbWVvdXQpO1xuICB9O1xuXG4gIF9wcm90by5jb21wdXRlUmVmZXRjaEludGVydmFsID0gZnVuY3Rpb24gY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpIHtcbiAgICB2YXIgX3RoaXMkb3B0aW9ucyRyZWZldGNoO1xuXG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLm9wdGlvbnMucmVmZXRjaEludGVydmFsID09PSAnZnVuY3Rpb24nID8gdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCh0aGlzLmN1cnJlbnRSZXN1bHQuZGF0YSwgdGhpcy5jdXJyZW50UXVlcnkpIDogKF90aGlzJG9wdGlvbnMkcmVmZXRjaCA9IHRoaXMub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWwpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJHJlZmV0Y2ggOiBmYWxzZTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlUmVmZXRjaEludGVydmFsID0gZnVuY3Rpb24gdXBkYXRlUmVmZXRjaEludGVydmFsKG5leHRJbnRlcnZhbCkge1xuICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgdGhpcy5jbGVhclJlZmV0Y2hJbnRlcnZhbCgpO1xuICAgIHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCA9IG5leHRJbnRlcnZhbDtcblxuICAgIGlmIChpc1NlcnZlciB8fCB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9PT0gZmFsc2UgfHwgIWlzVmFsaWRUaW1lb3V0KHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCkgfHwgdGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZWZldGNoSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpczcub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWxJbkJhY2tncm91bmQgfHwgZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpKSB7XG4gICAgICAgIF90aGlzNy5leGVjdXRlRmV0Y2goKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLmN1cnJlbnRSZWZldGNoSW50ZXJ2YWwpO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVUaW1lcnMgPSBmdW5jdGlvbiB1cGRhdGVUaW1lcnMoKSB7XG4gICAgdGhpcy51cGRhdGVTdGFsZVRpbWVvdXQoKTtcbiAgICB0aGlzLnVwZGF0ZVJlZmV0Y2hJbnRlcnZhbCh0aGlzLmNvbXB1dGVSZWZldGNoSW50ZXJ2YWwoKSk7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyVGltZXJzID0gZnVuY3Rpb24gY2xlYXJUaW1lcnMoKSB7XG4gICAgdGhpcy5jbGVhclN0YWxlVGltZW91dCgpO1xuICAgIHRoaXMuY2xlYXJSZWZldGNoSW50ZXJ2YWwoKTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXJTdGFsZVRpbWVvdXQgPSBmdW5jdGlvbiBjbGVhclN0YWxlVGltZW91dCgpIHtcbiAgICBpZiAodGhpcy5zdGFsZVRpbWVvdXRJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RhbGVUaW1lb3V0SWQpO1xuICAgICAgdGhpcy5zdGFsZVRpbWVvdXRJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyUmVmZXRjaEludGVydmFsID0gZnVuY3Rpb24gY2xlYXJSZWZldGNoSW50ZXJ2YWwoKSB7XG4gICAgaWYgKHRoaXMucmVmZXRjaEludGVydmFsSWQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yZWZldGNoSW50ZXJ2YWxJZCk7XG4gICAgICB0aGlzLnJlZmV0Y2hJbnRlcnZhbElkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY3JlYXRlUmVzdWx0ID0gZnVuY3Rpb24gY3JlYXRlUmVzdWx0KHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgdmFyIHByZXZRdWVyeSA9IHRoaXMuY3VycmVudFF1ZXJ5O1xuICAgIHZhciBwcmV2T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgcHJldlJlc3VsdCA9IHRoaXMuY3VycmVudFJlc3VsdDtcbiAgICB2YXIgcHJldlJlc3VsdFN0YXRlID0gdGhpcy5jdXJyZW50UmVzdWx0U3RhdGU7XG4gICAgdmFyIHByZXZSZXN1bHRPcHRpb25zID0gdGhpcy5jdXJyZW50UmVzdWx0T3B0aW9ucztcbiAgICB2YXIgcXVlcnlDaGFuZ2UgPSBxdWVyeSAhPT0gcHJldlF1ZXJ5O1xuICAgIHZhciBxdWVyeUluaXRpYWxTdGF0ZSA9IHF1ZXJ5Q2hhbmdlID8gcXVlcnkuc3RhdGUgOiB0aGlzLmN1cnJlbnRRdWVyeUluaXRpYWxTdGF0ZTtcbiAgICB2YXIgcHJldlF1ZXJ5UmVzdWx0ID0gcXVlcnlDaGFuZ2UgPyB0aGlzLmN1cnJlbnRSZXN1bHQgOiB0aGlzLnByZXZpb3VzUXVlcnlSZXN1bHQ7XG4gICAgdmFyIHN0YXRlID0gcXVlcnkuc3RhdGU7XG4gICAgdmFyIGRhdGFVcGRhdGVkQXQgPSBzdGF0ZS5kYXRhVXBkYXRlZEF0LFxuICAgICAgICBlcnJvciA9IHN0YXRlLmVycm9yLFxuICAgICAgICBlcnJvclVwZGF0ZWRBdCA9IHN0YXRlLmVycm9yVXBkYXRlZEF0LFxuICAgICAgICBpc0ZldGNoaW5nID0gc3RhdGUuaXNGZXRjaGluZyxcbiAgICAgICAgc3RhdHVzID0gc3RhdGUuc3RhdHVzO1xuICAgIHZhciBpc1ByZXZpb3VzRGF0YSA9IGZhbHNlO1xuICAgIHZhciBpc1BsYWNlaG9sZGVyRGF0YSA9IGZhbHNlO1xuICAgIHZhciBkYXRhOyAvLyBPcHRpbWlzdGljYWxseSBzZXQgcmVzdWx0IGluIGZldGNoaW5nIHN0YXRlIGlmIG5lZWRlZFxuXG4gICAgaWYgKG9wdGlvbnMub3B0aW1pc3RpY1Jlc3VsdHMpIHtcbiAgICAgIHZhciBtb3VudGVkID0gdGhpcy5oYXNMaXN0ZW5lcnMoKTtcbiAgICAgIHZhciBmZXRjaE9uTW91bnQgPSAhbW91bnRlZCAmJiBzaG91bGRGZXRjaE9uTW91bnQocXVlcnksIG9wdGlvbnMpO1xuICAgICAgdmFyIGZldGNoT3B0aW9uYWxseSA9IG1vdW50ZWQgJiYgc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHF1ZXJ5LCBwcmV2UXVlcnksIG9wdGlvbnMsIHByZXZPcHRpb25zKTtcblxuICAgICAgaWYgKGZldGNoT25Nb3VudCB8fCBmZXRjaE9wdGlvbmFsbHkpIHtcbiAgICAgICAgaXNGZXRjaGluZyA9IHRydWU7XG5cbiAgICAgICAgaWYgKCFkYXRhVXBkYXRlZEF0KSB7XG4gICAgICAgICAgc3RhdHVzID0gJ2xvYWRpbmcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBLZWVwIHByZXZpb3VzIGRhdGEgaWYgbmVlZGVkXG5cblxuICAgIGlmIChvcHRpb25zLmtlZXBQcmV2aW91c0RhdGEgJiYgIXN0YXRlLmRhdGFVcGRhdGVDb3VudCAmJiAocHJldlF1ZXJ5UmVzdWx0ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UXVlcnlSZXN1bHQuaXNTdWNjZXNzKSAmJiBzdGF0dXMgIT09ICdlcnJvcicpIHtcbiAgICAgIGRhdGEgPSBwcmV2UXVlcnlSZXN1bHQuZGF0YTtcbiAgICAgIGRhdGFVcGRhdGVkQXQgPSBwcmV2UXVlcnlSZXN1bHQuZGF0YVVwZGF0ZWRBdDtcbiAgICAgIHN0YXR1cyA9IHByZXZRdWVyeVJlc3VsdC5zdGF0dXM7XG4gICAgICBpc1ByZXZpb3VzRGF0YSA9IHRydWU7XG4gICAgfSAvLyBTZWxlY3QgZGF0YSBpZiBuZWVkZWRcbiAgICBlbHNlIGlmIChvcHRpb25zLnNlbGVjdCAmJiB0eXBlb2Ygc3RhdGUuZGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gTWVtb2l6ZSBzZWxlY3QgcmVzdWx0XG4gICAgICAgIGlmIChwcmV2UmVzdWx0ICYmIHN0YXRlLmRhdGEgPT09IChwcmV2UmVzdWx0U3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHRTdGF0ZS5kYXRhKSAmJiBvcHRpb25zLnNlbGVjdCA9PT0gdGhpcy5zZWxlY3RGbikge1xuICAgICAgICAgIGRhdGEgPSB0aGlzLnNlbGVjdFJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RGbiA9IG9wdGlvbnMuc2VsZWN0O1xuICAgICAgICAgICAgZGF0YSA9IG9wdGlvbnMuc2VsZWN0KHN0YXRlLmRhdGEpO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJ1Y3R1cmFsU2hhcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IHJlcGxhY2VFcXVhbERlZXAocHJldlJlc3VsdCA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdC5kYXRhLCBkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RSZXN1bHQgPSBkYXRhO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgfSBjYXRjaCAoc2VsZWN0RXJyb3IpIHtcbiAgICAgICAgICAgIGdldExvZ2dlcigpLmVycm9yKHNlbGVjdEVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RXJyb3IgPSBzZWxlY3RFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVXNlIHF1ZXJ5IGRhdGFcbiAgICAgIGVsc2Uge1xuICAgICAgICAgIGRhdGEgPSBzdGF0ZS5kYXRhO1xuICAgICAgICB9IC8vIFNob3cgcGxhY2Vob2xkZXIgZGF0YSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRhdGEgPT09ICd1bmRlZmluZWQnICYmIChzdGF0dXMgPT09ICdsb2FkaW5nJyB8fCBzdGF0dXMgPT09ICdpZGxlJykpIHtcbiAgICAgIHZhciBwbGFjZWhvbGRlckRhdGE7IC8vIE1lbW9pemUgcGxhY2Vob2xkZXIgZGF0YVxuXG4gICAgICBpZiAoKHByZXZSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHQuaXNQbGFjZWhvbGRlckRhdGEpICYmIG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhID09PSAocHJldlJlc3VsdE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHRPcHRpb25zLnBsYWNlaG9sZGVyRGF0YSkpIHtcbiAgICAgICAgcGxhY2Vob2xkZXJEYXRhID0gcHJldlJlc3VsdC5kYXRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGxhY2Vob2xkZXJEYXRhID0gdHlwZW9mIG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEoKSA6IG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnNlbGVjdCAmJiB0eXBlb2YgcGxhY2Vob2xkZXJEYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSBvcHRpb25zLnNlbGVjdChwbGFjZWhvbGRlckRhdGEpO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJ1Y3R1cmFsU2hhcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJEYXRhID0gcmVwbGFjZUVxdWFsRGVlcChwcmV2UmVzdWx0ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UmVzdWx0LmRhdGEsIHBsYWNlaG9sZGVyRGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgIH0gY2F0Y2ggKHNlbGVjdEVycm9yKSB7XG4gICAgICAgICAgICBnZXRMb2dnZXIoKS5lcnJvcihzZWxlY3RFcnJvcik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVycm9yID0gc2VsZWN0RXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgcGxhY2Vob2xkZXJEYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzdGF0dXMgPSAnc3VjY2Vzcyc7XG4gICAgICAgIGRhdGEgPSBwbGFjZWhvbGRlckRhdGE7XG4gICAgICAgIGlzUGxhY2Vob2xkZXJEYXRhID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RFcnJvcikge1xuICAgICAgZXJyb3IgPSB0aGlzLnNlbGVjdEVycm9yO1xuICAgICAgZGF0YSA9IHRoaXMuc2VsZWN0UmVzdWx0O1xuICAgICAgZXJyb3JVcGRhdGVkQXQgPSBEYXRlLm5vdygpO1xuICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICBpc0xvYWRpbmc6IHN0YXR1cyA9PT0gJ2xvYWRpbmcnLFxuICAgICAgaXNTdWNjZXNzOiBzdGF0dXMgPT09ICdzdWNjZXNzJyxcbiAgICAgIGlzRXJyb3I6IHN0YXR1cyA9PT0gJ2Vycm9yJyxcbiAgICAgIGlzSWRsZTogc3RhdHVzID09PSAnaWRsZScsXG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogZGF0YVVwZGF0ZWRBdCxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgIGVycm9yVXBkYXRlZEF0OiBlcnJvclVwZGF0ZWRBdCxcbiAgICAgIGZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQsXG4gICAgICBlcnJvclVwZGF0ZUNvdW50OiBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50LFxuICAgICAgaXNGZXRjaGVkOiBzdGF0ZS5kYXRhVXBkYXRlQ291bnQgPiAwIHx8IHN0YXRlLmVycm9yVXBkYXRlQ291bnQgPiAwLFxuICAgICAgaXNGZXRjaGVkQWZ0ZXJNb3VudDogc3RhdGUuZGF0YVVwZGF0ZUNvdW50ID4gcXVlcnlJbml0aWFsU3RhdGUuZGF0YVVwZGF0ZUNvdW50IHx8IHN0YXRlLmVycm9yVXBkYXRlQ291bnQgPiBxdWVyeUluaXRpYWxTdGF0ZS5lcnJvclVwZGF0ZUNvdW50LFxuICAgICAgaXNGZXRjaGluZzogaXNGZXRjaGluZyxcbiAgICAgIGlzUmVmZXRjaGluZzogaXNGZXRjaGluZyAmJiBzdGF0dXMgIT09ICdsb2FkaW5nJyxcbiAgICAgIGlzTG9hZGluZ0Vycm9yOiBzdGF0dXMgPT09ICdlcnJvcicgJiYgc3RhdGUuZGF0YVVwZGF0ZWRBdCA9PT0gMCxcbiAgICAgIGlzUGxhY2Vob2xkZXJEYXRhOiBpc1BsYWNlaG9sZGVyRGF0YSxcbiAgICAgIGlzUHJldmlvdXNEYXRhOiBpc1ByZXZpb3VzRGF0YSxcbiAgICAgIGlzUmVmZXRjaEVycm9yOiBzdGF0dXMgPT09ICdlcnJvcicgJiYgc3RhdGUuZGF0YVVwZGF0ZWRBdCAhPT0gMCxcbiAgICAgIGlzU3RhbGU6IGlzU3RhbGUocXVlcnksIG9wdGlvbnMpLFxuICAgICAgcmVmZXRjaDogdGhpcy5yZWZldGNoLFxuICAgICAgcmVtb3ZlOiB0aGlzLnJlbW92ZVxuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8uc2hvdWxkTm90aWZ5TGlzdGVuZXJzID0gZnVuY3Rpb24gc2hvdWxkTm90aWZ5TGlzdGVuZXJzKHJlc3VsdCwgcHJldlJlc3VsdCkge1xuICAgIGlmICghcHJldlJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIG5vdGlmeU9uQ2hhbmdlUHJvcHMgPSBfdGhpcyRvcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHMsXG4gICAgICAgIG5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zID0gX3RoaXMkb3B0aW9ucy5ub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucztcblxuICAgIGlmICghbm90aWZ5T25DaGFuZ2VQcm9wcyAmJiAhbm90aWZ5T25DaGFuZ2VQcm9wc0V4Y2x1c2lvbnMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChub3RpZnlPbkNoYW5nZVByb3BzID09PSAndHJhY2tlZCcgJiYgIXRoaXMudHJhY2tlZFByb3BzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGluY2x1ZGVkUHJvcHMgPSBub3RpZnlPbkNoYW5nZVByb3BzID09PSAndHJhY2tlZCcgPyB0aGlzLnRyYWNrZWRQcm9wcyA6IG5vdGlmeU9uQ2hhbmdlUHJvcHM7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlc3VsdCkuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgdHlwZWRLZXkgPSBrZXk7XG4gICAgICB2YXIgY2hhbmdlZCA9IHJlc3VsdFt0eXBlZEtleV0gIT09IHByZXZSZXN1bHRbdHlwZWRLZXldO1xuICAgICAgdmFyIGlzSW5jbHVkZWQgPSBpbmNsdWRlZFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBpbmNsdWRlZFByb3BzLnNvbWUoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IGtleTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGlzRXhjbHVkZWQgPSBub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucyA9PSBudWxsID8gdm9pZCAwIDogbm90aWZ5T25DaGFuZ2VQcm9wc0V4Y2x1c2lvbnMuc29tZShmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCA9PT0ga2V5O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY2hhbmdlZCAmJiAhaXNFeGNsdWRlZCAmJiAoIWluY2x1ZGVkUHJvcHMgfHwgaXNJbmNsdWRlZCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVJlc3VsdCA9IGZ1bmN0aW9uIHVwZGF0ZVJlc3VsdChub3RpZnlPcHRpb25zKSB7XG4gICAgdmFyIHByZXZSZXN1bHQgPSB0aGlzLmN1cnJlbnRSZXN1bHQ7XG4gICAgdGhpcy5jdXJyZW50UmVzdWx0ID0gdGhpcy5jcmVhdGVSZXN1bHQodGhpcy5jdXJyZW50UXVlcnksIHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5jdXJyZW50UmVzdWx0U3RhdGUgPSB0aGlzLmN1cnJlbnRRdWVyeS5zdGF0ZTtcbiAgICB0aGlzLmN1cnJlbnRSZXN1bHRPcHRpb25zID0gdGhpcy5vcHRpb25zOyAvLyBPbmx5IG5vdGlmeSBpZiBzb21ldGhpbmcgaGFzIGNoYW5nZWRcblxuICAgIGlmIChzaGFsbG93RXF1YWxPYmplY3RzKHRoaXMuY3VycmVudFJlc3VsdCwgcHJldlJlc3VsdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIERldGVybWluZSB3aGljaCBjYWxsYmFja3MgdG8gdHJpZ2dlclxuXG5cbiAgICB2YXIgZGVmYXVsdE5vdGlmeU9wdGlvbnMgPSB7XG4gICAgICBjYWNoZTogdHJ1ZVxuICAgIH07XG5cbiAgICBpZiAoKG5vdGlmeU9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG5vdGlmeU9wdGlvbnMubGlzdGVuZXJzKSAhPT0gZmFsc2UgJiYgdGhpcy5zaG91bGROb3RpZnlMaXN0ZW5lcnModGhpcy5jdXJyZW50UmVzdWx0LCBwcmV2UmVzdWx0KSkge1xuICAgICAgZGVmYXVsdE5vdGlmeU9wdGlvbnMubGlzdGVuZXJzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLm5vdGlmeShfZXh0ZW5kcyh7fSwgZGVmYXVsdE5vdGlmeU9wdGlvbnMsIG5vdGlmeU9wdGlvbnMpKTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlUXVlcnkgPSBmdW5jdGlvbiB1cGRhdGVRdWVyeSgpIHtcbiAgICB2YXIgcXVlcnkgPSB0aGlzLmNsaWVudC5nZXRRdWVyeUNhY2hlKCkuYnVpbGQodGhpcy5jbGllbnQsIHRoaXMub3B0aW9ucyk7XG5cbiAgICBpZiAocXVlcnkgPT09IHRoaXMuY3VycmVudFF1ZXJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByZXZRdWVyeSA9IHRoaXMuY3VycmVudFF1ZXJ5O1xuICAgIHRoaXMuY3VycmVudFF1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5jdXJyZW50UXVlcnlJbml0aWFsU3RhdGUgPSBxdWVyeS5zdGF0ZTtcbiAgICB0aGlzLnByZXZpb3VzUXVlcnlSZXN1bHQgPSB0aGlzLmN1cnJlbnRSZXN1bHQ7XG5cbiAgICBpZiAodGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgcHJldlF1ZXJ5ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UXVlcnkucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7XG4gICAgICBxdWVyeS5hZGRPYnNlcnZlcih0aGlzKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uUXVlcnlVcGRhdGUgPSBmdW5jdGlvbiBvblF1ZXJ5VXBkYXRlKGFjdGlvbikge1xuICAgIHZhciBub3RpZnlPcHRpb25zID0ge307XG5cbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09ICdzdWNjZXNzJykge1xuICAgICAgbm90aWZ5T3B0aW9ucy5vblN1Y2Nlc3MgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09ICdlcnJvcicgJiYgIWlzQ2FuY2VsbGVkRXJyb3IoYWN0aW9uLmVycm9yKSkge1xuICAgICAgbm90aWZ5T3B0aW9ucy5vbkVycm9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVJlc3VsdChub3RpZnlPcHRpb25zKTtcblxuICAgIGlmICh0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRpbWVycygpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KG5vdGlmeU9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgLy8gRmlyc3QgdHJpZ2dlciB0aGUgY29uZmlndXJhdGlvbiBjYWxsYmFja3NcbiAgICAgIGlmIChub3RpZnlPcHRpb25zLm9uU3VjY2Vzcykge1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uU3VjY2VzcyhfdGhpczguY3VycmVudFJlc3VsdC5kYXRhKTtcbiAgICAgICAgX3RoaXM4Lm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczgub3B0aW9ucy5vblNldHRsZWQoX3RoaXM4LmN1cnJlbnRSZXN1bHQuZGF0YSwgbnVsbCk7XG4gICAgICB9IGVsc2UgaWYgKG5vdGlmeU9wdGlvbnMub25FcnJvcikge1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczgub3B0aW9ucy5vbkVycm9yKF90aGlzOC5jdXJyZW50UmVzdWx0LmVycm9yKTtcbiAgICAgICAgX3RoaXM4Lm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczgub3B0aW9ucy5vblNldHRsZWQodW5kZWZpbmVkLCBfdGhpczguY3VycmVudFJlc3VsdC5lcnJvcik7XG4gICAgICB9IC8vIFRoZW4gdHJpZ2dlciB0aGUgbGlzdGVuZXJzXG5cblxuICAgICAgaWYgKG5vdGlmeU9wdGlvbnMubGlzdGVuZXJzKSB7XG4gICAgICAgIF90aGlzOC5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgICBsaXN0ZW5lcihfdGhpczguY3VycmVudFJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgICAgfSAvLyBUaGVuIHRoZSBjYWNoZSBsaXN0ZW5lcnNcblxuXG4gICAgICBpZiAobm90aWZ5T3B0aW9ucy5jYWNoZSkge1xuICAgICAgICBfdGhpczguY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5ub3RpZnkoe1xuICAgICAgICAgIHF1ZXJ5OiBfdGhpczguY3VycmVudFF1ZXJ5LFxuICAgICAgICAgIHR5cGU6ICdvYnNlcnZlclJlc3VsdHNVcGRhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gUXVlcnlPYnNlcnZlcjtcbn0oU3Vic2NyaWJhYmxlKTtcblxuZnVuY3Rpb24gc2hvdWxkTG9hZE9uTW91bnQocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2UgJiYgIXF1ZXJ5LnN0YXRlLmRhdGFVcGRhdGVkQXQgJiYgIShxdWVyeS5zdGF0ZS5zdGF0dXMgPT09ICdlcnJvcicgJiYgb3B0aW9ucy5yZXRyeU9uTW91bnQgPT09IGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKSB7XG4gIHJldHVybiBzaG91bGRMb2FkT25Nb3VudChxdWVyeSwgb3B0aW9ucykgfHwgcXVlcnkuc3RhdGUuZGF0YVVwZGF0ZWRBdCA+IDAgJiYgc2hvdWxkRmV0Y2hPbihxdWVyeSwgb3B0aW9ucywgb3B0aW9ucy5yZWZldGNoT25Nb3VudCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEZldGNoT24ocXVlcnksIG9wdGlvbnMsIGZpZWxkKSB7XG4gIGlmIChvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlKSB7XG4gICAgdmFyIHZhbHVlID0gdHlwZW9mIGZpZWxkID09PSAnZnVuY3Rpb24nID8gZmllbGQocXVlcnkpIDogZmllbGQ7XG4gICAgcmV0dXJuIHZhbHVlID09PSAnYWx3YXlzJyB8fCB2YWx1ZSAhPT0gZmFsc2UgJiYgaXNTdGFsZShxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEZldGNoT3B0aW9uYWxseShxdWVyeSwgcHJldlF1ZXJ5LCBvcHRpb25zLCBwcmV2T3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZSAmJiAocXVlcnkgIT09IHByZXZRdWVyeSB8fCBwcmV2T3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSkgJiYgKCFvcHRpb25zLnN1c3BlbnNlIHx8IHF1ZXJ5LnN0YXRlLnN0YXR1cyAhPT0gJ2Vycm9yJykgJiYgaXNTdGFsZShxdWVyeSwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGlzU3RhbGUocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHF1ZXJ5LmlzU3RhbGVCeVRpbWUob3B0aW9ucy5zdGFsZVRpbWUpO1xufSIsICJpbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmV4cG9ydCB2YXIgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgPSBSZWFjdERPTS51bnN0YWJsZV9iYXRjaGVkVXBkYXRlczsiLCAiaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgfSBmcm9tICcuL3JlYWN0QmF0Y2hlZFVwZGF0ZXMnO1xubm90aWZ5TWFuYWdlci5zZXRCYXRjaE5vdGlmeUZ1bmN0aW9uKHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKTsiLCAiZXhwb3J0IHZhciBsb2dnZXIgPSBjb25zb2xlOyIsICJpbXBvcnQgeyBzZXRMb2dnZXIgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbnNldExvZ2dlcihsb2dnZXIpOyIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIGRlZmF1bHRDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbnZhciBRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoZmFsc2UpOyAvLyBpZiBjb250ZXh0U2hhcmluZyBpcyBvbiwgd2Ugc2hhcmUgdGhlIGZpcnN0IGFuZCBhdCBsZWFzdCBvbmVcbi8vIGluc3RhbmNlIG9mIHRoZSBjb250ZXh0IGFjcm9zcyB0aGUgd2luZG93XG4vLyB0byBlbnN1cmUgdGhhdCBpZiBSZWFjdCBRdWVyeSBpcyB1c2VkIGFjcm9zc1xuLy8gZGlmZmVyZW50IGJ1bmRsZXMgb3IgbWljcm9mcm9udGVuZHMgdGhleSB3aWxsXG4vLyBhbGwgdXNlIHRoZSBzYW1lICoqaW5zdGFuY2UqKiBvZiBjb250ZXh0LCByZWdhcmRsZXNzXG4vLyBvZiBtb2R1bGUgc2NvcGluZy5cblxuZnVuY3Rpb24gZ2V0UXVlcnlDbGllbnRDb250ZXh0KGNvbnRleHRTaGFyaW5nKSB7XG4gIGlmIChjb250ZXh0U2hhcmluZyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICghd2luZG93LlJlYWN0UXVlcnlDbGllbnRDb250ZXh0KSB7XG4gICAgICB3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQgPSBkZWZhdWx0Q29udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gd2luZG93LlJlYWN0UXVlcnlDbGllbnRDb250ZXh0O1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRDb250ZXh0O1xufVxuXG5leHBvcnQgdmFyIHVzZVF1ZXJ5Q2xpZW50ID0gZnVuY3Rpb24gdXNlUXVlcnlDbGllbnQoKSB7XG4gIHZhciBxdWVyeUNsaWVudCA9IFJlYWN0LnVzZUNvbnRleHQoZ2V0UXVlcnlDbGllbnRDb250ZXh0KFJlYWN0LnVzZUNvbnRleHQoUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dCkpKTtcblxuICBpZiAoIXF1ZXJ5Q2xpZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBRdWVyeUNsaWVudCBzZXQsIHVzZSBRdWVyeUNsaWVudFByb3ZpZGVyIHRvIHNldCBvbmUnKTtcbiAgfVxuXG4gIHJldHVybiBxdWVyeUNsaWVudDtcbn07XG5leHBvcnQgdmFyIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgPSBmdW5jdGlvbiBRdWVyeUNsaWVudFByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNsaWVudCA9IF9yZWYuY2xpZW50LFxuICAgICAgX3JlZiRjb250ZXh0U2hhcmluZyA9IF9yZWYuY29udGV4dFNoYXJpbmcsXG4gICAgICBjb250ZXh0U2hhcmluZyA9IF9yZWYkY29udGV4dFNoYXJpbmcgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRjb250ZXh0U2hhcmluZyxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBjbGllbnQubW91bnQoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgY2xpZW50LnVubW91bnQoKTtcbiAgICB9O1xuICB9LCBbY2xpZW50XSk7XG4gIHZhciBDb250ZXh0ID0gZ2V0UXVlcnlDbGllbnRDb250ZXh0KGNvbnRleHRTaGFyaW5nKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dFNoYXJpbmdcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjbGllbnRcbiAgfSwgY2hpbGRyZW4pKTtcbn07IiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIENPTlRFWFRcblxuZnVuY3Rpb24gY3JlYXRlVmFsdWUoKSB7XG4gIHZhciBfaXNSZXNldCA9IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIGNsZWFyUmVzZXQ6IGZ1bmN0aW9uIGNsZWFyUmVzZXQoKSB7XG4gICAgICBfaXNSZXNldCA9IGZhbHNlO1xuICAgIH0sXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgX2lzUmVzZXQgPSB0cnVlO1xuICAgIH0sXG4gICAgaXNSZXNldDogZnVuY3Rpb24gaXNSZXNldCgpIHtcbiAgICAgIHJldHVybiBfaXNSZXNldDtcbiAgICB9XG4gIH07XG59XG5cbnZhciBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeUNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChjcmVhdGVWYWx1ZSgpKTsgLy8gSE9PS1xuXG5leHBvcnQgdmFyIHVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkoKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dCk7XG59OyAvLyBDT01QT05FTlRcblxuZXhwb3J0IHZhciBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSA9IGZ1bmN0aW9uIFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIHZhbHVlID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVZhbHVlKCk7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB2YWx1ZVxuICB9LCB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbih2YWx1ZSkgOiBjaGlsZHJlbik7XG59OyIsICJleHBvcnQgZnVuY3Rpb24gc2hvdWxkVGhyb3dFcnJvcihzdXNwZW5zZSwgX3VzZUVycm9yQm91bmRhcnksIHBhcmFtcykge1xuICAvLyBBbGxvdyB1c2VFcnJvckJvdW5kYXJ5IGZ1bmN0aW9uIHRvIG92ZXJyaWRlIHRocm93aW5nIGJlaGF2aW9yIG9uIGEgcGVyLWVycm9yIGJhc2lzXG4gIGlmICh0eXBlb2YgX3VzZUVycm9yQm91bmRhcnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gX3VzZUVycm9yQm91bmRhcnkuYXBwbHkodm9pZCAwLCBwYXJhbXMpO1xuICB9IC8vIEFsbG93IHVzZUVycm9yQm91bmRhcnkgdG8gb3ZlcnJpZGUgc3VzcGVuc2UncyB0aHJvd2luZyBiZWhhdmlvclxuXG5cbiAgaWYgKHR5cGVvZiBfdXNlRXJyb3JCb3VuZGFyeSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gX3VzZUVycm9yQm91bmRhcnk7IC8vIElmIHN1c3BlbnNlIGlzIGVuYWJsZWQgZGVmYXVsdCB0byB0aHJvd2luZyBlcnJvcnNcblxuICByZXR1cm4gISFzdXNwZW5zZTtcbn0iLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuLi9jb3JlL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkgfSBmcm9tICcuL1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5JztcbmltcG9ydCB7IHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSAnLi9RdWVyeUNsaWVudFByb3ZpZGVyJztcbmltcG9ydCB7IHNob3VsZFRocm93RXJyb3IgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCBmdW5jdGlvbiB1c2VCYXNlUXVlcnkob3B0aW9ucywgT2JzZXJ2ZXIpIHtcbiAgdmFyIG1vdW50ZWRSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuXG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSgwKSxcbiAgICAgIGZvcmNlVXBkYXRlID0gX1JlYWN0JHVzZVN0YXRlWzFdO1xuXG4gIHZhciBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHZhciBlcnJvclJlc2V0Qm91bmRhcnkgPSB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSgpO1xuICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHF1ZXJ5Q2xpZW50LmRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyhvcHRpb25zKTsgLy8gTWFrZSBzdXJlIHJlc3VsdHMgYXJlIG9wdGltaXN0aWNhbGx5IHNldCBpbiBmZXRjaGluZyBzdGF0ZSBiZWZvcmUgc3Vic2NyaWJpbmcgb3IgdXBkYXRpbmcgb3B0aW9uc1xuXG4gIGRlZmF1bHRlZE9wdGlvbnMub3B0aW1pc3RpY1Jlc3VsdHMgPSB0cnVlOyAvLyBJbmNsdWRlIGNhbGxiYWNrcyBpbiBiYXRjaCByZW5kZXJzXG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMub25FcnJvcikge1xuICAgIGRlZmF1bHRlZE9wdGlvbnMub25FcnJvciA9IG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhkZWZhdWx0ZWRPcHRpb25zLm9uRXJyb3IpO1xuICB9XG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMub25TdWNjZXNzKSB7XG4gICAgZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MgPSBub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MpO1xuICB9XG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkKSB7XG4gICAgZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQgPSBub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQpO1xuICB9XG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UpIHtcbiAgICAvLyBBbHdheXMgc2V0IHN0YWxlIHRpbWUgd2hlbiB1c2luZyBzdXNwZW5zZSB0byBwcmV2ZW50XG4gICAgLy8gZmV0Y2hpbmcgYWdhaW4gd2hlbiBkaXJlY3RseSBtb3VudGluZyBhZnRlciBzdXNwZW5kaW5nXG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lID0gMTAwMDtcbiAgICB9IC8vIFNldCBjYWNoZSB0aW1lIHRvIDEgaWYgdGhlIG9wdGlvbiBoYXMgYmVlbiBzZXQgdG8gMFxuICAgIC8vIHdoZW4gdXNpbmcgc3VzcGVuc2UgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wIG9mIGZldGNoZXNcblxuXG4gICAgaWYgKGRlZmF1bHRlZE9wdGlvbnMuY2FjaGVUaW1lID09PSAwKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLmNhY2hlVGltZSA9IDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UgfHwgZGVmYXVsdGVkT3B0aW9ucy51c2VFcnJvckJvdW5kYXJ5KSB7XG4gICAgLy8gUHJldmVudCByZXRyeWluZyBmYWlsZWQgcXVlcnkgaWYgdGhlIGVycm9yIGJvdW5kYXJ5IGhhcyBub3QgYmVlbiByZXNldCB5ZXRcbiAgICBpZiAoIWVycm9yUmVzZXRCb3VuZGFyeS5pc1Jlc2V0KCkpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucmV0cnlPbk1vdW50ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTIgPSBSZWFjdC51c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZlcihxdWVyeUNsaWVudCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gIH0pLFxuICAgICAgb2JzZXJ2ZXIgPSBfUmVhY3QkdXNlU3RhdGUyWzBdO1xuXG4gIHZhciByZXN1bHQgPSBvYnNlcnZlci5nZXRPcHRpbWlzdGljUmVzdWx0KGRlZmF1bHRlZE9wdGlvbnMpO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIG1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgZXJyb3JSZXNldEJvdW5kYXJ5LmNsZWFyUmVzZXQoKTtcbiAgICB2YXIgdW5zdWJzY3JpYmUgPSBvYnNlcnZlci5zdWJzY3JpYmUobm90aWZ5TWFuYWdlci5iYXRjaENhbGxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChtb3VudGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgZm9yY2VVcGRhdGUoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4geCArIDE7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pKTsgLy8gVXBkYXRlIHJlc3VsdCB0byBtYWtlIHN1cmUgd2UgZGlkIG5vdCBtaXNzIGFueSBxdWVyeSB1cGRhdGVzXG4gICAgLy8gYmV0d2VlbiBjcmVhdGluZyB0aGUgb2JzZXJ2ZXIgYW5kIHN1YnNjcmliaW5nIHRvIGl0LlxuXG4gICAgb2JzZXJ2ZXIudXBkYXRlUmVzdWx0KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICB9LCBbZXJyb3JSZXNldEJvdW5kYXJ5LCBvYnNlcnZlcl0pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIERvIG5vdCBub3RpZnkgb24gdXBkYXRlcyBiZWNhdXNlIG9mIGNoYW5nZXMgaW4gdGhlIG9wdGlvbnMgYmVjYXVzZVxuICAgIC8vIHRoZXNlIGNoYW5nZXMgc2hvdWxkIGFscmVhZHkgYmUgcmVmbGVjdGVkIGluIHRoZSBvcHRpbWlzdGljIHJlc3VsdC5cbiAgICBvYnNlcnZlci5zZXRPcHRpb25zKGRlZmF1bHRlZE9wdGlvbnMsIHtcbiAgICAgIGxpc3RlbmVyczogZmFsc2VcbiAgICB9KTtcbiAgfSwgW2RlZmF1bHRlZE9wdGlvbnMsIG9ic2VydmVyXSk7IC8vIEhhbmRsZSBzdXNwZW5zZVxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlICYmIHJlc3VsdC5pc0xvYWRpbmcpIHtcbiAgICB0aHJvdyBvYnNlcnZlci5mZXRjaE9wdGltaXN0aWMoZGVmYXVsdGVkT3B0aW9ucykudGhlbihmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MoZGF0YSk7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQoZGF0YSwgbnVsbCk7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBlcnJvclJlc2V0Qm91bmRhcnkuY2xlYXJSZXNldCgpO1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBkZWZhdWx0ZWRPcHRpb25zLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkKHVuZGVmaW5lZCwgZXJyb3IpO1xuICAgIH0pO1xuICB9IC8vIEhhbmRsZSBlcnJvciBib3VuZGFyeVxuXG5cbiAgaWYgKHJlc3VsdC5pc0Vycm9yICYmICFlcnJvclJlc2V0Qm91bmRhcnkuaXNSZXNldCgpICYmICFyZXN1bHQuaXNGZXRjaGluZyAmJiBzaG91bGRUaHJvd0Vycm9yKGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UsIGRlZmF1bHRlZE9wdGlvbnMudXNlRXJyb3JCb3VuZGFyeSwgW3Jlc3VsdC5lcnJvciwgb2JzZXJ2ZXIuZ2V0Q3VycmVudFF1ZXJ5KCldKSkge1xuICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgfSAvLyBIYW5kbGUgcmVzdWx0IHByb3BlcnR5IHVzYWdlIHRyYWNraW5nXG5cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5ub3RpZnlPbkNoYW5nZVByb3BzID09PSAndHJhY2tlZCcpIHtcbiAgICByZXN1bHQgPSBvYnNlcnZlci50cmFja1Jlc3VsdChyZXN1bHQsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn0iLCAiaW1wb3J0IHsgUXVlcnlPYnNlcnZlciB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgcGFyc2VRdWVyeUFyZ3MgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IHVzZUJhc2VRdWVyeSB9IGZyb20gJy4vdXNlQmFzZVF1ZXJ5JzsgLy8gSE9PS1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpO1xuICByZXR1cm4gdXNlQmFzZVF1ZXJ5KHBhcnNlZE9wdGlvbnMsIFF1ZXJ5T2JzZXJ2ZXIpO1xufSIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlCYWRnZSwgRXVpSWNvbiB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWJQcmVzZW50YXRpb25Qcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uL3N0eWxlL3RzNG5mZGlTdHlsZXMvdHM0bmZkaUJyZWFkY3J1bWJTdHlsZS5jc3NcIjtcblxuZnVuY3Rpb24gQnJlYWRjcnVtYlByZXNlbnRhdGlvbihwcm9wczogQnJlYWRjcnVtYlByZXNlbnRhdGlvblByb3BzKSB7XG4gIGNvbnN0IGZpbmFsQ2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lIHx8IFwidHM0bmZkaS1icmVhZGNydW1iLXN0eWxlXCI7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PlxuICAgICAgICA8c3BhblxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSlcbiAgICAgICAgICAgICAgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3koXG4gICAgICAgICAgICAgICAgcHJvcHMub250b2xvZ3lJZCB8fCBcIlwiLFxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHJvbGU9XCJidXR0b25cIiAvLyBJbXByb3ZlIGFjY2Vzc2liaWxpdHlcbiAgICAgICAgICB0YWJJbmRleD17MH0gLy8gTWFrZSBpdCBmb2N1c2FibGVcbiAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikgZS5jdXJyZW50VGFyZ2V0LmNsaWNrKCk7XG4gICAgICAgICAgfX0gLy8gSGFuZGxlIGtleWJvYXJkIG5hdmlnYXRpb25cbiAgICAgICAgPlxuICAgICAgICAgIDxFdWlCYWRnZVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgcHJvcHMub250b2xvZ3lJZFxuICAgICAgICAgICAgICAgID8gXCJicmVhZGNydW1iIGNsaWNrYWJsZS1icmVhZGNydW1iXCJcbiAgICAgICAgICAgICAgICA6IFwiYnJlYWRjcnVtYlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2xvcj17cHJvcHMuY29sb3JGaXJzdCB8fCBcInByaW1hcnlcIn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7cHJvcHMub250b2xvZ3lOYW1lXG4gICAgICAgICAgICAgID8gcHJvcHMub250b2xvZ3lOYW1lLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgOiBcIk5vIG9udG9sb2d5IG5hbWUgYXZhaWxhYmxlXCJ9XG4gICAgICAgICAgPC9FdWlCYWRnZT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICAmbmJzcDtcbiAgICAgICAgPEV1aUljb24gdHlwZT1cImFycm93UmlnaHRcIiAvPlxuICAgICAgICAmbmJzcDtcbiAgICAgICAgPEV1aUJhZGdlIGNsYXNzTmFtZT1cImJyZWFkY3J1bWJcIiBjb2xvcj17cHJvcHMuY29sb3JTZWNvbmQgfHwgXCJzdWNjZXNzXCJ9PlxuICAgICAgICAgIHtwcm9wcy5zaG9ydEZvcm1cbiAgICAgICAgICAgID8gcHJvcHMuc2hvcnRGb3JtLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIDogXCJObyBzaG9ydCBmb3JtIGF2YWlsYWJsZVwifVxuICAgICAgICA8L0V1aUJhZGdlPlxuICAgICAgPC9zcGFuPlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpQ2FyZCwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgT250b2xvZ2llcyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBEYXRhQ29udGVudFdpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuZnVuY3Rpb24gRGF0YUNvbnRlbnRXaWRnZXQocHJvcHM6IERhdGFDb250ZW50V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGksIHBhcmFtZXRlciwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YTogb250b2xvZ2llc0RhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgZGF0YVVwZGF0ZWRBdCxcbiAgfSA9IHVzZVF1ZXJ5PE9udG9sb2dpZXM+KFtcIm9udG9sb2dpZXNEYXRhXCIsIGFwaSwgcGFyYW1ldGVyXSwgYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybiBvbHNBcGkuZ2V0T250b2xvZ2llc0RhdGEocHJvcHMucGFyYW1ldGVyKTtcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEV1aUNhcmRcbiAgICAgICAgdGl0bGU9XCJEYXRhIENvbnRlbnRcIlxuICAgICAgICBkZXNjcmlwdGlvbj17XG4gICAgICAgICAgZGF0YVVwZGF0ZWRBdFxuICAgICAgICAgICAgPyBgVXBkYXRlZCAke25ldyBEYXRlKGRhdGFVcGRhdGVkQXQpLnRvTG9jYWxlU3RyaW5nKCl9YFxuICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgIH1cbiAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICA+XG4gICAgICAgIDxFdWlUZXh0IHsuLi5yZXN0fT5cbiAgICAgICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD5ObyBkYXRhIGNvbnRlbnQgYXZhaWxhYmxlPC9FdWlUZXh0Pn1cbiAgICAgICAgICB7aXNMb2FkaW5nID8gKFxuICAgICAgICAgICAgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJzXCIgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICB7b250b2xvZ2llc0RhdGE/LmdldFRvdGFsT250b2xvZ2llcygpID8gKFxuICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgIHtvbnRvbG9naWVzRGF0YT8uZ2V0VG90YWxPbnRvbG9naWVzKCkudG9Mb2NhbGVTdHJpbmcoKX17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICBvbnRvbG9naWVzIGFuZCB0ZXJtaW5vbG9naWVzXG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19PlxuICAgICAgICAgICAgICAgICAgb250b2xvZ3kgbnVtYmVyIG5vdCBhdmFpbGFibGVcbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7b250b2xvZ2llc0RhdGE/LmdldE51bUNsYXNzZXMoKSA/IChcbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICB7b250b2xvZ2llc0RhdGE/LmdldE51bUNsYXNzZXMoKS50b0xvY2FsZVN0cmluZygpfSB0ZXJtc1xuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPGxpIHN0eWxlPXt7IGZvbnRTdHlsZTogXCJpdGFsaWNcIiB9fT5cbiAgICAgICAgICAgICAgICAgIHRlcm0gbnVtYmVyIG5vdCBhdmFpbGFibGVcbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7b250b2xvZ2llc0RhdGE/LmdldE51bVByb3BlcnRpZXMoKSA/IChcbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICB7b250b2xvZ2llc0RhdGE/LmdldE51bVByb3BlcnRpZXMoKS50b0xvY2FsZVN0cmluZygpfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxsaSBzdHlsZT17eyBmb250U3R5bGU6IFwiaXRhbGljXCIgfX0+XG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0eSBudW1iZXIgbm90IGF2YWlsYWJsZVxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtvbnRvbG9naWVzRGF0YT8uZ2V0TnVtSW5kaXZpZHVhbHMoKSA/IChcbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICB7b250b2xvZ2llc0RhdGE/LmdldE51bUluZGl2aWR1YWxzKCkudG9Mb2NhbGVTdHJpbmcoKX17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsc1xuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPGxpIHN0eWxlPXt7IGZvbnRTdHlsZTogXCJpdGFsaWNcIiB9fT5cbiAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgbnVtYmVyIG5vdCBhdmFpbGFibGVcbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7LyogPGxpPlZlcnNpb24ge05PVF9BVkFJTEFCTEV9PC9saT4gKi99e1wiIFwifVxuICAgICAgICAgICAgICB7LyogVE9ETyBob3cgdG8gZ2V0IEFQSSB2ZXJzaW9uPyAqL31cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgPC9FdWlDYXJkPlxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEYXRhQ29udGVudChcbiAgcHJvcHM6IERhdGFDb250ZW50V2lkZ2V0UHJvcHMsXG4gIGNvbnRhaW5lcjogYW55LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZERhdGFDb250ZW50V2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWREYXRhQ29udGVudFdpZGdldChwcm9wczogRGF0YUNvbnRlbnRXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxEYXRhQ29udGVudFdpZGdldCBhcGk9e3Byb3BzLmFwaX0gcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9IC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRGF0YUNvbnRlbnRXaWRnZXQsIGNyZWF0ZURhdGFDb250ZW50IH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7IFJlYWN0RWxlbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgRXVpQ2FyZCxcbiAgRXVpRmxleEl0ZW0sXG4gIEV1aUxvYWRpbmdTcGlubmVyLFxuICBFdWlQcm92aWRlcixcbiAgRXVpU3BhY2VyLFxuICBFdWlUZXh0LFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge1xuICBhc0FycmF5LFxuICBjYXBpdGFsaXplLFxuICBkZUNhbWVsQ2FzZSxcbiAgZGVVbmRlcnNjb3JlLFxuICBnZXRFbnRpdHlUeXBlTmFtZSxcbiAgcmFuZG9tU3RyaW5nLFxuICBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXksXG59IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtcbiAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYLFxuICBnZXRFbnRpdHlMaW5rSlNYLFxuICBnZXRSZWlmaWVkSlNYLFxuICBnZXRUb29sdGlwLFxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nXCI7XG5pbXBvcnQge1xuICBQcm9wZXJ0eSxcbiAgVGhpbmcsXG4gIENsYXNzLFxuICBFbnRpdHksXG4gIEluZGl2aWR1YWwsXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge1xuICBpc0NsYXNzLFxuICBpc1Byb3BlcnR5LFxuICBpc0luZGl2aWR1YWwsXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgRW50aXR5SW5mb1dpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgREVGQVVMVF9IQVNfVElUTEUgPSB0cnVlO1xuXG5mdW5jdGlvbiBFbnRpdHlJbmZvV2lkZ2V0KHByb3BzOiBFbnRpdHlJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBjb25zdCB7XG4gICAgYXBpLFxuICAgIGlyaSxcbiAgICBvbnRvbG9neUlkLFxuICAgIGhhc1RpdGxlID0gREVGQVVMVF9IQVNfVElUTEUsXG4gICAgZW50aXR5VHlwZSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgc2hvd0JhZGdlcyxcbiAgICB1c2VMZWdhY3ksXG4gICAgb25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgIG9uTmF2aWdhdGVUb09udG9sb2d5LFxuICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBlbnRpdHksXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdFbnRpdHksXG4gICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NFbnRpdHksXG4gICAgaXNFcnJvcjogaXNFcnJvckVudGl0eSxcbiAgICBlcnJvcjogZXJyb3JFbnRpdHksXG4gIH0gPSB1c2VRdWVyeShbXCJlbnRpdHlJbmZvXCIsIHByb3BzXSwgKCkgPT4ge1xuICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KFxuICAgICAgaXJpLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBwYXJhbWV0ZXIsXG4gICAgICB1c2VMZWdhY3lcbiAgICApO1xuICB9KTtcblxuICBmdW5jdGlvbiBnZXRMYWJlbFNlY3Rpb24oZW50aXR5OiBFbnRpdHkpOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7ZW50aXR5LmdldExhYmVsKCkgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDxiPkxhYmVsOjwvYj5cbiAgICAgICAgICAgICAge2VudGl0eS5nZXRMYWJlbCgpfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxFdWlTcGFjZXIgLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTeW5vbnltc1NlY3Rpb24oZW50aXR5OiBFbnRpdHkpOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7ZW50aXR5LmdldFN5bm9ueW1zKCkubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgPGI+U3lub255bXM6PC9iPlxuICAgICAgICAgICAgICB7ZW50aXR5LmdldFN5bm9ueW1zKCkubGVuZ3RoID4gMSA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICB7ZW50aXR5LmdldFN5bm9ueW1zKCkubWFwKChzeW5vbnltKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17c3lub255bS52YWx1ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRSZWlmaWVkSlNYKGVudGl0eSwgc3lub255bSwgc2hvd0JhZGdlcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICB7Z2V0UmVpZmllZEpTWChlbnRpdHksIGVudGl0eS5nZXRTeW5vbnltcygpWzBdLCBzaG93QmFkZ2VzLCB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRIYXNLZXlTZWN0aW9uKHRlcm06IENsYXNzKTogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCBrZXlzID0gdGVybS5nZXRIYXNLZXkoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2tleXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgPGI+SGFzIEtleTo8L2I+XG4gICAgICAgICAgICAgIHtrZXlzLmxlbmd0aCA+IDEgPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAge2tleXMubWFwKChrZXlzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgIDxwPjwvcD5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICAgICAgICAgIHRlcm0sXG4gICAgICAgICAgICAgICAgICAgIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSxcbiAgICAgICAgICAgICAgICAgICAga2V5c1swXSxcbiAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFN1YnNldHNTZWN0aW9uKHRlcm06IENsYXNzKTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge3Rlcm0uZ2V0U3Vic2V0cygpLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDxiPkluIFN1YnNldHM6PC9iPlxuICAgICAgICAgICAgICB7dGVybS5nZXRTdWJzZXRzKCkubGVuZ3RoID4gMSA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICB7dGVybS5nZXRTdWJzZXRzKCkubWFwKChzdWJzZXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9IGlkPXtzdWJzZXQgKyByYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChcbiAgICAgICAgICAgICAgICAgICAgdGVybSxcbiAgICAgICAgICAgICAgICAgICAgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgICB0ZXJtLmdldFN1YnNldHMoKVswXSxcbiAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFByb3BlcnR5Q2hhcmFjdGVyaXN0aWNzU2VjdGlvbihwcm9wZXJ0eTogUHJvcGVydHkpOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IGNoYXJhY3RlcmlzdGljcyA9IHByb3BlcnR5XG4gICAgICAuZ2V0UmRmVHlwZXMoKVxuICAgICAgLm1hcCgodHlwZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjRnVuY3Rpb25hbFByb3BlcnR5XCI6IFwiRnVuY3Rpb25hbFwiLFxuICAgICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjSW52ZXJzZUZ1bmN0aW9uYWxQcm9wZXJ0eVwiOlxuICAgICAgICAgICAgXCJJbnZlcnNlIEZ1bmN0aW9uYWxcIixcbiAgICAgICAgICBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1RyYW5zaXRpdmVQcm9wZXJ0eVwiOiBcIlRyYW5zaXRpdmVcIixcbiAgICAgICAgICBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1N5bW1ldHJpY1Byb3BlcnR5XCI6IFwiU3ltbWV0cmljXCIsXG4gICAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNBc3ltbWV0cmljUHJvcGVydHlcIjogXCJBc3ltbWV0cmljXCIsXG4gICAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNSZWZsZXhpdmVQcm9wZXJ0eVwiOiBcIlJlZmxleGl2ZVwiLFxuICAgICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjSXJyZWZsZXhpdmVQcm9wZXJ0eVwiOiBcIklycmVmbGV4aXZlXCIsXG4gICAgICAgIH1bdHlwZV07XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigodHlwZSkgPT4gISF0eXBlKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7Y2hhcmFjdGVyaXN0aWNzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDxiPkNoYXJhY3RlcmlzdGljczo8L2I+XG4gICAgICAgICAgICAgIHtjaGFyYWN0ZXJpc3RpY3MubGVuZ3RoID4gMSA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICB7Y2hhcmFjdGVyaXN0aWNzXG4gICAgICAgICAgICAgICAgICAgICAgLm1hcCgoY2hhcmFjdGVyaXN0aWMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2NoYXJhY3RlcmlzdGljfTwvbGk+O1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKX1cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPHA+e2NoYXJhY3RlcmlzdGljc1swXX08L3A+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERvbWFpblNlY3Rpb24ocHJvcGVydHk6IFByb3BlcnR5KTogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCBkb21haW5zID0gcHJvcGVydHkuZ2V0RG9tYWluKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtkb21haW5zLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDxiPkRvbWFpbjo8L2I+XG4gICAgICAgICAgICAgIHtkb21haW5zLmxlbmd0aCA+IDEgPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAge2RvbWFpbnMubWFwKChkb21haW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgPHA+PC9wPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgICAgICAgIGRvbWFpbnNbMF0sXG4gICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRSYW5nZVNlY3Rpb24ocHJvcGVydHk6IFByb3BlcnR5KTogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCByYW5nZXMgPSBwcm9wZXJ0eS5nZXRSYW5nZSgpO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7cmFuZ2VzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxiPlJhbmdlOjwvYj5cbiAgICAgICAgICAgIHtyYW5nZXMubGVuZ3RoID4gMSA/IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICB7cmFuZ2VzLm1hcCgocmFuZ2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgPHA+PC9wPlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgICAgICByYW5nZXNbMF0sXG4gICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LFxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbFByb3BlcnR5QXNzZXJ0aW9uc1NlY3Rpb24oXG4gICAgaW5kaXZpZHVhbDogSW5kaXZpZHVhbFxuICApOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IHByb3BlcnR5SXJpcyA9IE9iamVjdC5rZXlzKGluZGl2aWR1YWwucHJvcGVydGllcyk7XG4gICAgY29uc3QgbmVnYXRpdmVQcm9wZXJ0aWVzID0gcHJvcGVydHlJcmlzLmZpbHRlcigoa2V5KSA9PlxuICAgICAga2V5LnN0YXJ0c1dpdGgoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiKVxuICAgICk7XG4gICAgY29uc3Qgb2JqZWN0UHJvcGVydGllcyA9IHByb3BlcnR5SXJpcy5maWx0ZXIoXG4gICAgICAoa2V5KSA9PlxuICAgICAgICBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGtleSkgJiZcbiAgICAgICAgaW5kaXZpZHVhbFxuICAgICAgICAgIC5nZXRMaW5rZWRFbnRpdGllcygpXG4gICAgICAgICAgLmdldChrZXkpXG4gICAgICAgICAgPy50eXBlLmluZGV4T2YoXCJvYmplY3RQcm9wZXJ0eVwiKSAhPT0gLTFcbiAgICApO1xuICAgIGNvbnN0IGRhdGFQcm9wZXJ0aWVzID0gcHJvcGVydHlJcmlzLmZpbHRlcihcbiAgICAgIChrZXkpID0+XG4gICAgICAgIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoa2V5KSAmJlxuICAgICAgICBpbmRpdmlkdWFsXG4gICAgICAgICAgLmdldExpbmtlZEVudGl0aWVzKClcbiAgICAgICAgICAuZ2V0KGtleSlcbiAgICAgICAgICA/LnR5cGUuaW5kZXhPZihcImRhdGFQcm9wZXJ0eVwiKSAhPT0gLTFcbiAgICApO1xuICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uczogUmVhY3RFbGVtZW50W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgaXJpIG9mIG9iamVjdFByb3BlcnRpZXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGFzQXJyYXkoaW5kaXZpZHVhbC5wcm9wZXJ0aWVzW2lyaV0pO1xuICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbnMucHVzaChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgICAgaW5kaXZpZHVhbCxcbiAgICAgICAgICAgICAgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICBpcmksXG4gICAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7dHlwZW9mIHYgPT09IFwic3RyaW5nXCIgJiYgdi5pbmNsdWRlcyhcImh0dHBcIikgPyAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIiB9fT5cbiAgICAgICAgICAgICAgICAgICYjOTY1NjtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1goXG4gICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsLFxuICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgdixcbiAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgZ2V0VG9vbHRpcChcbiAgICAgICAgICAgICAgICB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgPyB2XG4gICAgICAgICAgICAgICAgICA6IHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHYpICYmIHYudmFsdWVcbiAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkodi52YWx1ZSlcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkodilcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGlyaSBvZiBkYXRhUHJvcGVydGllcykge1xuICAgICAgY29uc3QgdmFsdWVzID0gYXNBcnJheShpbmRpdmlkdWFsLnByb3BlcnRpZXNbaXJpXSk7XG4gICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgIHByb3BlcnR5QXNzZXJ0aW9ucy5wdXNoKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgICBpbmRpdmlkdWFsLFxuICAgICAgICAgICAgICBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgIGlyaSxcbiAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwiIH19PlxuICAgICAgICAgICAgICAgICAgJiM5NjU2O1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChcbiAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWwsXG4gICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgICAgICB2LFxuICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgbmVnYXRpdmVQcm9wZXJ0aWVzKSB7XG4gICAgICBjb25zdCBpcmkgPSBrZXkuc2xpY2UoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiLmxlbmd0aCk7XG4gICAgICBjb25zdCBsaW5rZWRFbnRpdHkgPSBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGlyaSk7XG4gICAgICBjb25zdCBoYXNEYXRhUHJvcGVydHkgPSBsaW5rZWRFbnRpdHk/LnR5cGUuaW5kZXhPZihcImRhdGFQcm9wZXJ0eVwiKSAhPT0gLTE7XG4gICAgICBjb25zdCBoYXNPYmplY3RQcm9wZXJ0eSA9XG4gICAgICAgIGxpbmtlZEVudGl0eT8udHlwZS5pbmRleE9mKFwib2JqZWN0UHJvcGVydHlcIikgIT09IC0xO1xuICAgICAgY29uc3QgdmFsdWVzID0gYXNBcnJheShpbmRpdmlkdWFsLnByb3BlcnRpZXNba2V5XSk7XG5cbiAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcbiAgICAgICAgcHJvcGVydHlBc3NlcnRpb25zLnB1c2goXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxpIHN0eWxlPXt7IGNvbG9yOiBcInB1cnBsZVwiIH19Pm5vdDwvaT57XCIgXCJ9XG4gICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgICBpbmRpdmlkdWFsLFxuICAgICAgICAgICAgICBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgIGlyaSxcbiAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHt0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiAmJiB2LmluY2x1ZGVzKFwiaHR0cFwiKSA/IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwiIH19PlxuICAgICAgICAgICAgICAgICAgJiM5NjU2O1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChcbiAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWwsXG4gICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgICAgICB2LFxuICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogaGFzT2JqZWN0UHJvcGVydHkgPyAoXG4gICAgICAgICAgICAgIGdldFRvb2x0aXAoXG4gICAgICAgICAgICAgICAgdHlwZW9mIHYgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgID8gdlxuICAgICAgICAgICAgICAgICAgOiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2KSAmJiB2LnZhbHVlXG4gICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHYudmFsdWUpXG4gICAgICAgICAgICAgICAgICA6IEpTT04uc3RyaW5naWZ5KHYpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkgOiBoYXNEYXRhUHJvcGVydHkgPyAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIiB9fT5cbiAgICAgICAgICAgICAgICAgICYjOTY1NjtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1goXG4gICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsLFxuICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgdixcbiAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtwcm9wZXJ0eUFzc2VydGlvbnMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgPGI+UHJvcGVydHkgYXNzZXJ0aW9uczo8L2I+XG4gICAgICAgICAgICAgIHtwcm9wZXJ0eUFzc2VydGlvbnMubGVuZ3RoID4gMSA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICB7cHJvcGVydHlBc3NlcnRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgLm1hcCgocGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e3BhfTwvbGk+O1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKX1cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPHA+e3Byb3BlcnR5QXNzZXJ0aW9uc1swXX08L3A+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFubm90YXRpb25TZWN0aW9uKHRoaW5nOiBUaGluZyk6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHt0aGluZy5nZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpLm1hcCgoYW5ub0tleSwgaW5kZXgsIGFycikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFubm9zID0gdGhpbmcuZ2V0QW5ub3RhdGlvbkJ5SWQoYW5ub0tleSk7XG4gICAgICAgICAgaWYgKGFubm9zLmxlbmd0aCA9PSAwKSByZXR1cm4gPD48Lz47XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfSBrZXk9e2Fubm9LZXl9PlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAge2NhcGl0YWxpemUoXG4gICAgICAgICAgICAgICAgICAgIGRlVW5kZXJzY29yZShcbiAgICAgICAgICAgICAgICAgICAgICBkZUNhbWVsQ2FzZSh0aGluZy5nZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGFubm9LZXkpKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgICB7YW5ub3MubGVuZ3RoID4gMSA/IChcbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICB7YW5ub3MubWFwKChhbm5vdGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gaWQ9e2Fubm90YXRpb24udmFsdWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRSZWlmaWVkSlNYKHRoaW5nLCBhbm5vdGF0aW9uLCBzaG93QmFkZ2VzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgPHA+PC9wPlxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxwIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0UmVpZmllZEpTWCh0aGluZywgYW5ub3NbMF0sIHNob3dCYWRnZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RXVpQ2FyZFxuICAgICAgICB0aXRsZT17XG4gICAgICAgICAgaGFzVGl0bGVcbiAgICAgICAgICAgID8gKGVudGl0eVR5cGVcbiAgICAgICAgICAgICAgICA/IGNhcGl0YWxpemUoZ2V0RW50aXR5VHlwZU5hbWUoZW50aXR5VHlwZSkpXG4gICAgICAgICAgICAgICAgOiBpc1N1Y2Nlc3NFbnRpdHkgJiYgZW50aXR5XG4gICAgICAgICAgICAgICAgPyBjYXBpdGFsaXplKGVudGl0eS5nZXRUeXBlKCkpXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArIFwiIEluZm9ybWF0aW9uXCJcbiAgICAgICAgICAgIDogXCJcIlxuICAgICAgICB9XG4gICAgICAgIGxheW91dD1cImhvcml6b250YWxcIlxuICAgICAgPlxuICAgICAgICB7aXNMb2FkaW5nRW50aXR5ICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXtcInNcIn0gLz59XG4gICAgICAgIHtpc1N1Y2Nlc3NFbnRpdHkgJiYgZW50aXR5ICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICAgIDxFdWlUZXh0IHsuLi5yZXN0fT5cbiAgICAgICAgICAgIHtnZXRMYWJlbFNlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgIHtnZXRTeW5vbnltc1NlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgIHtpc0NsYXNzKGVudGl0eSkgJiYgKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtnZXRTdWJzZXRzU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgIHtnZXRIYXNLZXlTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAge2lzUHJvcGVydHkoZW50aXR5KSAmJiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2dldFByb3BlcnR5Q2hhcmFjdGVyaXN0aWNzU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgIHtnZXREb21haW5TZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAge2dldFJhbmdlU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtpc0luZGl2aWR1YWwoZW50aXR5KSAmJiAoXG4gICAgICAgICAgICAgIDw+e2dldEluZGl2aWR1YWxQcm9wZXJ0eUFzc2VydGlvbnNTZWN0aW9uKGVudGl0eSl9PC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2dldEFubm90YXRpb25TZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICApfVxuICAgICAgICB7aXNFcnJvckVudGl0eSAmJiAoXG4gICAgICAgICAgPEV1aVRleHQ+XG4gICAgICAgICAgICB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yRW50aXR5LCBcImluZm9ybWF0aW9uXCIpfVxuICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgKX1cbiAgICAgIDwvRXVpQ2FyZD5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW50aXR5SW5mbyhcbiAgcHJvcHM6IEVudGl0eUluZm9XaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBhbnksXG4gIGNhbGxiYWNrPzogKCkgPT4gdm9pZFxuKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkRW50aXRpeUluZm9XaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEVudGl0aXlJbmZvV2lkZ2V0KHByb3BzOiBFbnRpdHlJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8RW50aXR5SW5mb1dpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgaGFzVGl0bGU9e3Byb3BzLmhhc1RpdGxlfVxuICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgc2hvd0JhZGdlcz17cHJvcHMuc2hvd0JhZGdlc31cbiAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRW50aXR5SW5mb1dpZGdldCwgY3JlYXRlRW50aXR5SW5mbyB9O1xuIiwgImltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IFJlYWN0LCB7IFJlYWN0RWxlbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpSWNvblRpcCwgRXVpSWNvbiB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IGFzQXJyYXksIGluZmVyVHlwZUZyb21UeXBlQXJyYXksIHJhbmRvbVN0cmluZyB9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IExpbmtlZEVudGl0aWVzIGZyb20gXCIuL0xpbmtlZEVudGl0aWVzXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5pbXBvcnQgXCIuLi9zdHlsZS90c3NTdHlsZXMuY3NzXCI7XG5pbXBvcnQgeyBPbk5hdmlnYXRlcyB9IGZyb20gXCIuLi9hcHAvdHlwZXNcIjtcblxuY29uc3QgREVGQVVMVF9TSE9XX0JBREdFUyA9IHRydWU7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sdGlwKHRleHQ6IHN0cmluZyk6IFJlYWN0RWxlbWVudCB7XG4gIHJldHVybiA8RXVpSWNvblRpcCB0eXBlPXtcImlJbkNpcmNsZVwifSBjb2xvcj17XCJzdWJkdWVkXCJ9IGNvbnRlbnQ9e3RleHR9IC8+O1xufVxuXG4vKipcbiAqIE9OTFkgVVNBQkxFIFdJVEggVjItQVBJIEVOVElUSUVTXG4gKlxuICogUmV0dXJucyBSZWlmaWVkIGF4aW9tcyBhcyBKU1ggZWxlbWVudCAoc2ltaWxhciB0byBNZXRhZGF0YVRvb2x0aXAgY29tcG9uZW50IGluIG9sczQgcHJvamVjdClcbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHkgdGhlIHN1cnJvdW5kaW5nIGVudGl0eSBvZiB0aGUgYXhpb21zIGFycmF5IChmb3IgZXZlbnR1YWwgbGFiZWwgZmV0Y2hpbmcpXG4gKiBAcGFyYW0gYXhpb21zRGljdCB0aGUgZW50aXRpZXMgYXhpb21zIGluIHRoZSBmb3JtYXQgcmV0dXJuZWQgYnkgUmVpZmllZDo6Z2V0TWV0YWRhdGEoKVxuICogQHJldHVybnMgUmVhY3RFbGVtZW50IHRoZSBheGlvbXMgaW4gSlNYIGZvcm1hdCB0byBkaXNwbGF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBeGlvbXNJbmZvcm1hdGlvbkpTWChcbiAgcGFyZW50RW50aXR5OiBUaGluZyxcbiAgYXhpb21zRGljdDogYW55IHwgbnVsbFxuKTogUmVhY3RFbGVtZW50IHtcbiAgY29uc3QgYXhpb21zVGV4dCA9IE9iamVjdC5rZXlzKGF4aW9tc0RpY3QpXG4gICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHBhcmVudEVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLmdldExhYmVsRm9ySXJpKGtleSkgfHwga2V5O1xuICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiBcIipcIiArIGF4aW9tc0RpY3Rba2V5XSArIFwiIChcIiArIGxhYmVsICsgXCIpXCI7XG4gICAgICB9IGVsc2UgcmV0dXJuIFwiXCI7XG4gICAgfSlcbiAgICAuam9pbihcIlxcblwiKTtcblxuICByZXR1cm4gZ2V0VG9vbHRpcChheGlvbXNUZXh0KTtcbn1cblxuLyoqXG4gKiBPTkxZIFVTQUJMRSBXSVRIIFYyLUFQSSBFTlRJVElFU1xuICpcbiAqIFJldHVybnMgYSBsYWJlbGVkIGVudGl0eSBsaW5rIGFzIEpTWCBlbGVtZW50XG4gKiBAcGFyYW0gcGFyZW50RW50aXR5IHRoZSBlbnRpdHkgb2JqZWN0IGluIHdoaWNoIHRoZSBsaW5rZWQgZW50aXR5IGV4aXN0c1xuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzIHRoZSBsaW5rZWRFbnRpdGllcyBvYmplY3QgKGV4aXN0cyBhcyBwYXJhbSBiZWNhdXNlIGl0IGlzIG5lY2Vzc2FyeSB0aGF0IHRoZSBlbnRpdHkgaGFzIGEgbGlua2VkRW50aXRpZXMgYmxvY2sgaW4gcHJvcGVydGllcylcbiAqIEBwYXJhbSBpcmkgICB0aGUgZW50aXRpZXMnIGlyaVxuICogQHBhcmFtIHNob3dCYWRnZXMgICAgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKiBAcmV0dXJucyBSZWFjdEVsZW1lbnQgdGhlIGVudGl0eSBsaW5rIEpTWFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50aXR5TGlua0pTWChcbiAgcGFyZW50RW50aXR5OiBUaGluZyxcbiAgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzLFxuICBpcmk6IHN0cmluZyxcbiAgc2hvd0JhZGdlczogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMsXG4gIC8qVE9ETzogY2hhbmdlIHRvIHVzaW5nIChlbnRpdHkgOiBFbnRpdHlEYXRhKSBsYXRlciovIG9uTmF2aWdhdGVzOiBPbk5hdmlnYXRlc1xuKTogUmVhY3RFbGVtZW50IHtcbiAgY29uc3QgbGFiZWwgPVxuICAgIGxpbmtlZEVudGl0aWVzLmdldExhYmVsRm9ySXJpKGlyaSkgfHwgaXJpLnNwbGl0KFwiL1wiKS5wb3AoKSB8fCBpcmk7XG4gIGNvbnN0IGxpbmtlZEVudGl0eSA9IGxpbmtlZEVudGl0aWVzLmdldChpcmkpO1xuICBjb25zdCBsb2NhbE9udG9sb2d5ID0gcGFyZW50RW50aXR5LmdldE9udG9sb2d5SWQoKTtcblxuICAvLyByZWZlcmVuY2UgdG8gc2VsZjoganVzdCBkaXNwbGF5IGxhYmVsIGJlY2F1c2Ugd2UgYXJlIGFscmVhZHkgb24gdGhhdCBwYWdlXG4gIGlmIChwYXJlbnRFbnRpdHkuZ2V0VHlwZSgpICE9PSBcIm9udG9sb2d5XCIgJiYgaXJpID09PSBwYXJlbnRFbnRpdHk/LmdldElyaSgpKSB7XG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cImhpZ2hsaWdodFwiPntwYXJlbnRFbnRpdHkuZ2V0TGFiZWwoKX08L3NwYW4+O1xuICB9XG5cbiAgaWYgKCFsaW5rZWRFbnRpdHkpIHtcbiAgICBpZiAoaXJpLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8YSBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBocmVmPXtpcml9PlxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgPC9hPlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU28gZmFyIG9ubHkga25vd24gb2NjdXJyZW5jZSBvZiB0aGlzIGJyYW5jaCBpcyBmb3Igb3dsI1RoaW5nXG4gICAgICByZXR1cm4gPHNwYW4+e2xhYmVsfTwvc3Bhbj47XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3RoZXJEZWZpbmVkQnkgPSBsaW5rZWRFbnRpdHlbXCJkZWZpbmVkQnlcIl1cbiAgICA/IGxpbmtlZEVudGl0eVtcImRlZmluZWRCeVwiXS5maWx0ZXIoKGVsZW06IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gZWxlbSAhPT0gbG9jYWxPbnRvbG9neTtcbiAgICAgIH0pXG4gICAgOiBbXTtcbiAgY29uc3QgbGlua2VkRW50aXR5VHlwZSA9IGxpbmtlZEVudGl0eVtcInR5cGVcIl1cbiAgICA/IGluZmVyVHlwZUZyb21UeXBlQXJyYXkobGlua2VkRW50aXR5W1widHlwZVwiXSlcbiAgICA6IHBhcmVudEVudGl0eS5nZXRUeXBlKCk7XG5cbiAgLy8gc2VlIGh0dHBzOi8vZ2l0bGFiLnpibWVkLmRlL2ttL3NlbWxvb2twL29sczQvLS9ibG9iL2Rldi9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9FbnRpdHlMaW5rLnRzeCBmb3Igb3JpZ2luYWwgcmVmZXJlbmNlXG4gIGlmIChvdGhlckRlZmluZWRCeS5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAobGlua2VkRW50aXR5W1wiaGFzTG9jYWxEZWZpbml0aW9uXCJdKSB7XG4gICAgICAvLyBzaG93IDxsYWJlbD4gPG9udG9sb2d5SWQ+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhpcyBvbnRvbG9neSBhbmQgPG9udG9sb2d5SWQ+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoZSBkZWZpbmluZyBvbnRvbG9neVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJjbGlja2FibGVcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eShcbiAgICAgICAgICAgICAgICAgIGxvY2FsT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICBsaW5rZWRFbnRpdHlUeXBlLFxuICAgICAgICAgICAgICAgICAgeyBpcmksIGxhYmVsIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAge3Nob3dCYWRnZXMgPyAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSlcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3koXG4gICAgICAgICAgICAgICAgICAgICAgb3RoZXJEZWZpbmVkQnlbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgbGlua2VkRW50aXR5VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICB7IGlyaSwgbGFiZWwgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgICB7b3RoZXJEZWZpbmVkQnlbMF0udG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IDxsYWJlbD4gPG9udG9sb2d5SWQ+IGxpbmtpbmcgdG8gdGhlIHRlcm0gaW4gdGhlIGRlZmluaW5nIG9udG9sb2d5XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkpXG4gICAgICAgICAgICAgICAgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KFxuICAgICAgICAgICAgICAgICAgb3RoZXJEZWZpbmVkQnlbMF0sXG4gICAgICAgICAgICAgICAgICBsaW5rZWRFbnRpdHlUeXBlLFxuICAgICAgICAgICAgICAgICAgeyBpcmksIGxhYmVsIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAge3Nob3dCYWRnZXMgPyAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSlcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3koXG4gICAgICAgICAgICAgICAgICAgICAgb3RoZXJEZWZpbmVkQnlbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgbGlua2VkRW50aXR5VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICB7IGlyaSwgbGFiZWwgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgICB7b3RoZXJEZWZpbmVkQnlbMF0udG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvdGhlckRlZmluZWRCeS5sZW5ndGggPiAxKSB7XG4gICAgaWYgKGxpbmtlZEVudGl0eVtcImhhc0xvY2FsRGVmaW5pdGlvblwiXSkge1xuICAgICAgLy8gc2hvdyA8bGFiZWw+IDxvbnRvbG9neUlkMT4gPG9udG9sb2d5SWQyPiAuLi4gPG9udG9sb2d5SWROPiB3aGVyZSA8bGFiZWw+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoaXMgb250b2xvZ3kgYW5kIDxvbnRvbG9neUlkST4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhhdCBkZWZpbmluZyBvbnRvbG9neVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJjbGlja2FibGVcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eShcbiAgICAgICAgICAgICAgICAgIGxvY2FsT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICBsaW5rZWRFbnRpdHlUeXBlLFxuICAgICAgICAgICAgICAgICAgeyBpcmksIGxhYmVsIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAge3Nob3dCYWRnZXMgPyAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAge290aGVyRGVmaW5lZEJ5Lm1hcCgoZWxlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibm8tZGVjb3JhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kpXG4gICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VkRW50aXR5VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpcmksIGxhYmVsIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2VsZW0udG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IDxsYWJlbD48SUNPTj4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybXMnIGlyaSBhbmQgPElDT04+IGxpbmtzIHRvIGRpc2FtYmlndWF0aW9uIHBhZ2VcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPGEgY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgaHJlZj17aXJpfT5cbiAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAge3Nob3dCYWRnZXMgPyAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIlxuICAgICAgICAgICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSlcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlKGxpbmtlZEVudGl0eVR5cGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICBpcmksXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgPEV1aUljb24gdHlwZT17XCJzZWFyY2hcIn0gc2l6ZT17XCJzXCJ9IC8+XG4gICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgIHtvdGhlckRlZmluZWRCeS5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgIHtcIm9udG9sb2dpZXNcIn1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAobGlua2VkRW50aXR5W1wiaGFzTG9jYWxEZWZpbml0aW9uXCJdKSB7XG4gICAgICAvLyBzaG93IDxsYWJlbD4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybSBpbiB0aGlzIG9udG9sb2d5XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkpXG4gICAgICAgICAgICAgICAgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KFxuICAgICAgICAgICAgICAgICAgbG9jYWxPbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgIGxpbmtlZEVudGl0eVR5cGUsXG4gICAgICAgICAgICAgICAgICB7IGlyaSwgbGFiZWwgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocGFyc2VJbnQobGlua2VkRW50aXR5W1wibnVtQXBwZWFyc0luXCJdKSA+IDApIHtcbiAgICAgICAgLy8gc2hvdyA8bGFiZWw+PElDT04+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm1zJyBpcmkgYW5kIDxJQ09OPiBsaW5rcyB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e2lyaX0+XG4gICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIHtzaG93QmFkZ2VzID8gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIlxuICAgICAgICAgICAgICAgICAga2V5PXtyYW5kb21TdHJpbmcoKX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUobGlua2VkRW50aXR5VHlwZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxFdWlJY29uIHR5cGU9e1wic2VhcmNoXCJ9IHNpemU9e1wic1wifSAvPlxuICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAge2xpbmtlZEVudGl0eVtcIm51bUFwcGVhcnNJblwiXX1cbiAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgIHtwYXJzZUludChsaW5rZWRFbnRpdHlbXCJudW1BcHBlYXJzSW5cIl0pID4gMVxuICAgICAgICAgICAgICAgICAgICAgID8gXCJvbnRvbG9naWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwib250b2xvZ3lcIn1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNob3cgcmF3IGlyaVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8YSBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBocmVmPXtsaW5rZWRFbnRpdHlbXCJ1cmxcIl0gfHwgaXJpfT5cbiAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE9OTFkgVVNBQkxFIFdJVEggVjItQVBJIEVOVElUSUVTXG4gKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIG9uZSBlbGVtZW50IG9mIGEgc2VjdGlvbnMnIGxpc3QsIHBvc3NpYmx5IGluIGEgcmVjdXJzaXZlIGZhc2hpb24gYnkgcGFyc2luZyB0aGUgcmVzcG9uc2Ugb2JqZWN0IGF0IHRoZSBjdXJyZW50UmVzcG9uc2VQYXRoIHRvIHNob3cgTWFuY2hlc3RlciBzeW50YXguXG4gKiBAcGFyYW0gcGFyZW50RW50aXR5IHRoZSBlbnRpdHkgb2JqZWN0IHBvc3Nlc3NpbmcgdGhlIHdob2xlIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzIHRoZSBsaW5rZWRFbnRpdGllcyBvYmplY3QgKGV4aXN0cyBhcyBwYXJhbSBiZWNhdXNlIGl0IGlzIG5lY2Vzc2FyeSB0aGF0IHRoZSBlbnRpdHkgaGFzIGEgbGlua2VkRW50aXRpZXMgYmxvY2sgaW4gcHJvcGVydGllcylcbiAqIEBwYXJhbSBjdXJyZW50UmVzcG9uc2VQYXRoIHRoZSBjdXJyZW50IHN1Yi1vYmplY3Qgb2YgdGhlIHBhcmVudEVudGl0aWVzIHJlc3BvbnNlIG9iamVjdCBwYXJzZWQgYXMgY2xhc3MgZXhwcmVzc2lvblxuICogQHBhcmFtIHNob3dCYWRnZXMgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKiBAcmV0dXJucyBSZWFjdEVsZW1lbnQgdGhlIGNsYXNzIGV4cHJlc3Npb24gSlNYXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gIHBhcmVudEVudGl0eTogVGhpbmcsXG4gIGxpbmtlZEVudGl0aWVzOiBMaW5rZWRFbnRpdGllcyxcbiAgY3VycmVudFJlc3BvbnNlUGF0aDogYW55LFxuICBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUyxcbiAgLypUT0RPOiBjaGFuZ2UgdG8gdXNpbmcgKGVudGl0eSA6IEVudGl0eURhdGEpIGxhdGVyKi8gb25OYXZpZ2F0ZXM6IE9uTmF2aWdhdGVzXG4pOiBSZWFjdEVsZW1lbnQge1xuICBsZXQgcmVzdWx0ID0gPD48Lz47XG5cbiAgLy8gbWVyZ2UgbGlua2VkRW50aXRpZXMgb2YgY3VycmVudFJlc3BvbnNlUGF0aCBpZiBjdXJyZW50UmVzcG9uc2VQYXRoLmxpbmtlZEVudGl0aWVzIGlzIG5vdCB1bmRlZmluZWRcbiAgbGlua2VkRW50aXRpZXMgPSBsaW5rZWRFbnRpdGllcy5tZXJnZVdpdGgoY3VycmVudFJlc3BvbnNlUGF0aC5saW5rZWRFbnRpdGllcyk7XG5cbiAgaWYgKHR5cGVvZiBjdXJyZW50UmVzcG9uc2VQYXRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmVzdWx0ID0gZ2V0RW50aXR5TGlua0pTWChcbiAgICAgIHBhcmVudEVudGl0eSxcbiAgICAgIGxpbmtlZEVudGl0aWVzLFxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aCxcbiAgICAgIHNob3dCYWRnZXMsXG4gICAgICBvbk5hdmlnYXRlc1xuICAgICk7XG4gIH0gZWxzZSBpZiAoXG4gICAgdHlwZW9mIGN1cnJlbnRSZXNwb25zZVBhdGggPT09IFwib2JqZWN0XCIgJiZcbiAgICAhQXJyYXkuaXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoKSAmJlxuICAgIEFycmF5LmlzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aFtcInR5cGVcIl0pICYmXG4gICAgY3VycmVudFJlc3BvbnNlUGF0aFtcInR5cGVcIl0uaW5kZXhPZihcInJlaWZpY2F0aW9uXCIpICE9PSAtMVxuICApIHtcbiAgICAvLyBUT0RPOiBDb25jYXQgd2l0aCBlbHNlIHBhcnQ/IFNlZSByZWxhdGVkRnJvbSAoTWFuY2hlc3RlciBzeW50YXggZG9lcyBub3QgZ2V0IGRpc3BsYXllZCwgYnV0IG5laXRoZXIgaW4gb2xzNClcbiAgICAvLyBjdXJyZW50IHJlc3BvbnNlIHBhdGggaXMgcmVpZmljYXRpb25cbiAgICByZXN1bHQgPSBnZXRSZWlmaWVkSlNYKFxuICAgICAgcGFyZW50RW50aXR5LFxuICAgICAgUmVpZmllZC5mcm9tSnNvbjxhbnk+KGN1cnJlbnRSZXNwb25zZVBhdGgpWzBdLFxuICAgICAgc2hvd0JhZGdlcyxcbiAgICAgIG9uTmF2aWdhdGVzXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB0eXBlID09PSBcIm9iamVjdFwiXG4gICAgY29uc3Qgc29tZVZhbHVlc0Zyb20gPVxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3NvbWVWYWx1ZXNGcm9tXCJdO1xuICAgIGNvbnN0IGFsbFZhbHVlc0Zyb20gPVxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2FsbFZhbHVlc0Zyb21cIl07XG4gICAgY29uc3QgaW50ZXJzZWN0aW9uT2YgPSBhc0FycmF5KFxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludGVyc2VjdGlvbk9mXCJdXG4gICAgKTtcbiAgICBjb25zdCB1bmlvbk9mID0gYXNBcnJheShcbiAgICAgIGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN1bmlvbk9mXCJdXG4gICAgKTtcbiAgICBjb25zdCBoYXNWYWx1ZSA9XG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzVmFsdWVcIl07XG4gICAgY29uc3QgbWluQ2FyZGluYWxpdHkgPVxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21pbkNhcmRpbmFsaXR5XCJdIHx8XG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1xuICAgICAgICBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21pblF1YWxpZmllZENhcmRpbmFsaXR5XCJcbiAgICAgIF07XG4gICAgY29uc3QgbWF4Q2FyZGluYWxpdHkgPVxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21heENhcmRpbmFsaXR5XCJdIHx8XG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1xuICAgICAgICBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21heFF1YWxpZmllZENhcmRpbmFsaXR5XCJcbiAgICAgIF07XG4gICAgY29uc3QgY2FyZGluYWxpdHkgPVxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2NhcmRpbmFsaXR5XCJdIHx8XG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcXVhbGlmaWVkQ2FyZGluYWxpdHlcIl07XG4gICAgY29uc3QgaGFzU2VsZiA9XG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzU2VsZlwiXTtcbiAgICBjb25zdCBjb21wbGVtZW50T2YgPVxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2NvbXBsZW1lbnRPZlwiXTtcbiAgICBjb25zdCBvbmVPZiA9IGFzQXJyYXkoXG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjb25lT2ZcIl1cbiAgICApO1xuICAgIGNvbnN0IGludmVyc2VPZiA9XG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW52ZXJzZU9mXCJdO1xuICAgIGNvbnN0IG9uUHJvcGVydHkgPVxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI29uUHJvcGVydHlcIl07XG4gICAgY29uc3Qgb25EYXRhVHlwZSA9XG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjb25EYXRhdHlwZVwiXTtcblxuICAgIGlmIChvbkRhdGFUeXBlKSB7XG4gICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgIGdldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgb25EYXRhVHlwZSxcbiAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICksXG4gICAgICBdO1xuXG4gICAgICBjb25zdCB3aXRoUmVzdHJpY3Rpb25zID0gYXNBcnJheShcbiAgICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3dpdGhSZXN0cmljdGlvbnNcIl1cbiAgICAgICk7XG4gICAgICBpZiAod2l0aFJlc3RyaWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVsZW1lbnRzLnB1c2goPD5bPC8+KTtcblxuICAgICAgICBsZXQgaXNGaXJzdCA9IHRydWU7XG4gICAgICAgIGZvciAoY29uc3QgcmVzdHJpY3Rpb24gb2Ygd2l0aFJlc3RyaWN0aW9ucykge1xuICAgICAgICAgIGlmIChpc0ZpcnN0KSBpc0ZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgZWxzZSBlbGVtZW50cy5wdXNoKDw+LCZuYnNwOzwvPik7XG5cbiAgICAgICAgICBjb25zdCBtaW5FeGNsdXNpdmUgPVxuICAgICAgICAgICAgcmVzdHJpY3Rpb25bXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtaW5FeGNsdXNpdmVcIl07XG4gICAgICAgICAgY29uc3QgbWluSW5jbHVzaXZlID1cbiAgICAgICAgICAgIHJlc3RyaWN0aW9uW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjbWluSW5jbHVzaXZlXCJdO1xuICAgICAgICAgIGNvbnN0IG1heEV4Y2x1c2l2ZSA9XG4gICAgICAgICAgICByZXN0cmljdGlvbltcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI21heEV4Y2x1c2l2ZVwiXTtcbiAgICAgICAgICBjb25zdCBtYXhJbmNsdXNpdmUgPVxuICAgICAgICAgICAgcmVzdHJpY3Rpb25bXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtYXhJbmNsdXNpdmVcIl07XG5cbiAgICAgICAgICBpZiAobWluRXhjbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+Jmd0OyB7bWluRXhjbHVzaXZlfTwvPik7XG4gICAgICAgICAgZWxzZSBpZiAobWluSW5jbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+JmdlOyB7bWluSW5jbHVzaXZlfTwvPik7XG4gICAgICAgICAgZWxzZSBpZiAobWF4RXhjbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+Jmx0OyB7bWF4RXhjbHVzaXZlfTwvPik7XG4gICAgICAgICAgZWxzZSBpZiAobWF4SW5jbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+JmxlOyB7bWF4SW5jbHVzaXZlfTwvPik7XG4gICAgICAgIH1cblxuICAgICAgICBlbGVtZW50cy5wdXNoKDw+XTwvPik7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7ZWxlbWVudHMubWFwKChlbGVtKSA9PiAoXG4gICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57ZWxlbX08L3NwYW4+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvPlxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHNvbWVWYWx1ZXNGcm9tKSB7XG4gICAgICByZXN1bHQgPSAoXG4gICAgICAgIDw+XG4gICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgIHBhcmVudEVudGl0eSxcbiAgICAgICAgICAgIGxpbmtlZEVudGl0aWVzLFxuICAgICAgICAgICAgb25Qcm9wZXJ0eSxcbiAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICBvbk5hdmlnYXRlc1xuICAgICAgICAgICl9XG4gICAgICAgICAgPGkgc3R5bGU9e3sgY29sb3I6IFwicHVycGxlXCIgfX0+IHNvbWUgPC9pPlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIGFzQXJyYXkoc29tZVZhbHVlc0Zyb20pWzBdLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoYWxsVmFsdWVzRnJvbSkge1xuICAgICAgcmVzdWx0ID0gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIG9uUHJvcGVydHksXG4gICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICApfVxuICAgICAgICAgIDxpIHN0eWxlPXt7IGNvbG9yOiBcInB1cnBsZVwiIH19PiBvbmx5IDwvaT5cbiAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgcGFyZW50RW50aXR5LFxuICAgICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgICBhc0FycmF5KGFsbFZhbHVlc0Zyb20pWzBdLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaW50ZXJzZWN0aW9uT2YubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZWxlbWVudHM6IFJlYWN0RWxlbWVudFtdID0gW1xuICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICYjNDA7XG4gICAgICAgIDwvc3Bhbj4sXG4gICAgICBdO1xuICAgICAgZm9yIChjb25zdCBlbGVtIG9mIGludGVyc2VjdGlvbk9mKSB7XG4gICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgZWxlbWVudHMucHVzaCg8aT4gYW5kIDwvaT4pO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgcGFyZW50RW50aXR5LFxuICAgICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgICBlbGVtLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZWxlbWVudHMucHVzaCg8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPiYjNDE7PC9zcGFuPik7XG4gICAgICByZXN1bHQgPSAoXG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIHtlbGVtZW50cy5tYXAoKGVsZW0pID0+IChcbiAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PntlbGVtfTwvc3Bhbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHVuaW9uT2YubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZWxlbWVudHM6IFJlYWN0RWxlbWVudFtdID0gW1xuICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICYjNDA7XG4gICAgICAgIDwvc3Bhbj4sXG4gICAgICBdO1xuICAgICAgZm9yIChjb25zdCBlbGVtIG9mIHVuaW9uT2YpIHtcbiAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBlbGVtZW50cy5wdXNoKDxpPiBvciA8L2k+KTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgIGdldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgIHBhcmVudEVudGl0eSxcbiAgICAgICAgICAgIGxpbmtlZEVudGl0aWVzLFxuICAgICAgICAgICAgZWxlbSxcbiAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICBvbk5hdmlnYXRlc1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnRzLnB1c2goPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj4mIzQxOzwvc3Bhbj4pO1xuICAgICAgcmVzdWx0ID0gKFxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICB7ZWxlbWVudHMubWFwKChlbGVtKSA9PiAoXG4gICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57ZWxlbX08L3NwYW4+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChoYXNWYWx1ZSkge1xuICAgICAgcmVzdWx0ID0gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIG9uUHJvcGVydHksXG4gICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICApfVxuICAgICAgICAgIDxpIHN0eWxlPXt7IGNvbG9yOiBcInB1cnBsZVwiIH19PiB2YWx1ZSA8L2k+XG4gICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgIHBhcmVudEVudGl0eSxcbiAgICAgICAgICAgIGxpbmtlZEVudGl0aWVzLFxuICAgICAgICAgICAgYXNBcnJheShoYXNWYWx1ZSlbMF0sXG4gICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtaW5DYXJkaW5hbGl0eSkge1xuICAgICAgcmVzdWx0ID0gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIG9uUHJvcGVydHksXG4gICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICApfVxuICAgICAgICAgIDxpIHN0eWxlPXt7IGNvbG9yOiBcInB1cnBsZVwiIH19PiBtaW4gPC9pPlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIGFzQXJyYXkobWluQ2FyZGluYWxpdHkpWzBdLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAobWF4Q2FyZGluYWxpdHkpIHtcbiAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgcGFyZW50RW50aXR5LFxuICAgICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgICBvblByb3BlcnR5LFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKX1cbiAgICAgICAgICA8aSBzdHlsZT17eyBjb2xvcjogXCJwdXJwbGVcIiB9fT4gbWF4IDwvaT5cbiAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgcGFyZW50RW50aXR5LFxuICAgICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgICBhc0FycmF5KG1heENhcmRpbmFsaXR5KVswXSxcbiAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICBvbk5hdmlnYXRlc1xuICAgICAgICAgICl9XG4gICAgICAgIDwvPlxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGNhcmRpbmFsaXR5KSB7XG4gICAgICByZXN1bHQgPSAoXG4gICAgICAgIDw+XG4gICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgIHBhcmVudEVudGl0eSxcbiAgICAgICAgICAgIGxpbmtlZEVudGl0aWVzLFxuICAgICAgICAgICAgb25Qcm9wZXJ0eSxcbiAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICBvbk5hdmlnYXRlc1xuICAgICAgICAgICl9XG4gICAgICAgICAgPGkgc3R5bGU9e3sgY29sb3I6IFwicHVycGxlXCIgfX0+IGV4YWN0bHkgPC9pPlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIGFzQXJyYXkoY2FyZGluYWxpdHkpWzBdLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaGFzU2VsZikge1xuICAgICAgcmVzdWx0ID0gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIG9uUHJvcGVydHksXG4gICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICApfVxuICAgICAgICAgIDxpIHN0eWxlPXt7IGNvbG9yOiBcInB1cnBsZVwiIH19PiBTZWxmIDwvaT5cbiAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgcGFyZW50RW50aXR5LFxuICAgICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgICBhc0FycmF5KGhhc1NlbGYpWzBdLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoY29tcGxlbWVudE9mKSB7XG4gICAgICByZXN1bHQgPSAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPGk+bm90IDwvaT5cbiAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgcGFyZW50RW50aXR5LFxuICAgICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgICBhc0FycmF5KGNvbXBsZW1lbnRPZilbMF0sXG4gICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChvbmVPZi5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgJiMxMjM7XG4gICAgICAgIDwvc3Bhbj4sXG4gICAgICBdO1xuICAgICAgZm9yIChjb25zdCBlbGVtIG9mIG9uZU9mKSB7XG4gICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICYjNDQ7Jm5ic3A7XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgIGdldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgIHBhcmVudEVudGl0eSxcbiAgICAgICAgICAgIGxpbmtlZEVudGl0aWVzLFxuICAgICAgICAgICAgZWxlbSxcbiAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICBvbk5hdmlnYXRlc1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnRzLnB1c2goPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj4mIzEyNTs8L3NwYW4+KTtcbiAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAge2VsZW1lbnRzLm1hcCgoZWxlbSkgPT4gKFxuICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e2VsZW19PC9zcGFuPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaW52ZXJzZU9mKSB7XG4gICAgICByZXN1bHQgPSAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPGkgc3R5bGU9e3sgY29sb3I6IFwicHVycGxlXCIgfX0+aW52ZXJzZSA8L2k+XG4gICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICYjNDA7XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIGludmVyc2VPZixcbiAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICBvbk5hdmlnYXRlc1xuICAgICAgICAgICl9XG4gICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICYjNDE7XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgYW4gYXJyYXkgb2Ygc2VjdGlvbiBsaXN0IGVsZW1lbnRzIHNwZWNpZmllZCBhdCBgY3VycmVudFJlc3BvbnNlUGF0aGBcbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHlcbiAqIEBwYXJhbSBsaW5rZWRFbnRpdGllc1xuICogQHBhcmFtIGFycmF5XG4gKiBAcGFyYW0gc2hvd0JhZGdlc1xuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWN0aW9uTGlzdEpTWChcbiAgcGFyZW50RW50aXR5OiBUaGluZyxcbiAgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzLFxuICBhcnJheTogYW55W10sXG4gIHNob3dCYWRnZXM6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTLFxuICAvKlRPRE86IGNoYW5nZSB0byB1c2luZyAoZW50aXR5IDogRW50aXR5RGF0YSkgbGF0ZXIqLyBvbk5hdmlnYXRlczogT25OYXZpZ2F0ZXNcbik6IFJlYWN0RWxlbWVudCB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHthcnJheS5sZW5ndGggPT09IDEgPyAoXG4gICAgICAgIDxwPlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSxcbiAgICAgICAgICAgIGFycmF5WzBdLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9wPlxuICAgICAgKSA6IChcbiAgICAgICAgPHVsPlxuICAgICAgICAgIHthcnJheS5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICAgICAgICBwYXJlbnRFbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSxcbiAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC91bD5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59XG5cbi8qKlxuICogSW5zZXJ0cyBsaW5rcyBpbnRvIHRleHQgKHBvdGVudGlhbGx5IHdpdGggbGFiZWwgaW5zdGVhZCBvZiBsaW5rIGRpc3BsYXllZCBpZiBsaW5rIGV4aXN0cyBhcyBrZXkgaW5zaWRlIGxpbmtlZEVudGl0aWVzKSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIEpTWCBlbGVtZW50XG4gKiBAcGFyYW0gcGFyZW50RW50aXR5IHRoZSBlbnRpdHkgb2JqZWN0IHBvc3Nlc3NpbmcgdGhlIHdob2xlIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHRleHQgdGhlIHRleHQgdG8gaW5zZXJ0IGxpbmtzIGludG9cbiAqIEBwYXJhbSBsaW5rZWRFbnRpdGllcyB0aGUgbGlua2VkRW50aXRpZXMgb2JqZWN0IChpZiB1bmRlZmluZWQsIG5vIGxhYmVscyBhcmUgaW5mZXJyZWQpXG4gKiBAcGFyYW0gc2hvd0JhZGdlcyBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiBiYWRnZXMgc2hvdWxkIGJlIHNob3duXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMgZnVuY3Rpb25zIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBjbGlja2FibGUgaXRlbXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIGVudGl0aWVzIG5hbWVcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gb250b2xvZ3kgYmFkZ2VcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGEgZGlzYW1iaWd1YXRpb24gYmFkZ2VcbiAqL1xuZnVuY3Rpb24gYWRkTGlua3NUb1RleHQoXG4gIHBhcmVudEVudGl0eTogVGhpbmcsXG4gIHRleHQ6IHN0cmluZyxcbiAgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzIHwgdW5kZWZpbmVkLFxuICBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUyxcbiAgLypUT0RPOiBjaGFuZ2UgdG8gdXNpbmcgKGVudGl0eSA6IEVudGl0eURhdGEpIGxhdGVyKi8gb25OYXZpZ2F0ZXM6IE9uTmF2aWdhdGVzXG4pIHtcbiAgY29uc3QgbGlua3NUb1NwbGljZTogQXJyYXk8e1xuICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgZW5kOiBudW1iZXI7XG4gICAgbGluazogUmVhY3RFbGVtZW50O1xuICB9PiA9IFtdO1xuXG4gIGlmIChsaW5rZWRFbnRpdGllcykge1xuICAgIGZvciAoY29uc3QgZW50aXR5SWQgb2YgT2JqZWN0LmtleXMobGlua2VkRW50aXRpZXMubGlua2VkRW50aXRpZXMpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgbiA9IHRleHQuaW5kZXhPZihlbnRpdHlJZCwgMCk7XG4gICAgICAgIG4gIT09IC0xO1xuICAgICAgICBuID0gdGV4dC5pbmRleE9mKGVudGl0eUlkLCBuKVxuICAgICAgKSB7XG4gICAgICAgIGxpbmtzVG9TcGxpY2UucHVzaCh7XG4gICAgICAgICAgc3RhcnQ6IG4sXG4gICAgICAgICAgZW5kOiBuICsgZW50aXR5SWQubGVuZ3RoLFxuICAgICAgICAgIGxpbms6IGdldEVudGl0eUxpbmtKU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIGVudGl0eUlkLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbiArPSBlbnRpdHlJZC5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdXJsUmUgPSAvW0Etel0rOlxcL1xcL1teXFxzXSsvZztcbiAgZm9yIChsZXQgbWF0Y2ggPSB1cmxSZS5leGVjKHRleHQpOyBtYXRjaDsgbWF0Y2ggPSB1cmxSZS5leGVjKHRleHQpKSB7XG4gICAgY29uc3QgdXJsID0gbWF0Y2hbMF07XG4gICAgLy8gY29uc29sZS5sb2coXCJmb3VuZCBtYXRjaCBcIiArIHVybCk7XG5cbiAgICBsaW5rc1RvU3BsaWNlLnB1c2goe1xuICAgICAgc3RhcnQ6IG1hdGNoLmluZGV4LFxuICAgICAgZW5kOiBtYXRjaC5pbmRleCArIHVybC5sZW5ndGgsXG4gICAgICBsaW5rOiAoXG4gICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e3VybH0+XG4gICAgICAgICAgICB7dXJsfVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKSxcbiAgICB9KTtcbiAgfVxuXG4gIGxpbmtzVG9TcGxpY2Uuc29ydCgoYSwgYikgPT4gYS5zdGFydCAtIGIuc3RhcnQpO1xuXG4gIHJlbW92ZU92ZXJsYXBwaW5nOiBmb3IgKGxldCBuID0gMDsgbiA8IGxpbmtzVG9TcGxpY2UubGVuZ3RoOyApIHtcbiAgICBmb3IgKGxldCBuMiA9IG4gKyAxOyBuMiA8IGxpbmtzVG9TcGxpY2UubGVuZ3RoOyArK24yKSB7XG4gICAgICBjb25zdCBzcGxpY2VBID0gbGlua3NUb1NwbGljZVtuXTtcbiAgICAgIGNvbnN0IHNwbGljZUIgPSBsaW5rc1RvU3BsaWNlW24yXTtcblxuICAgICAgaWYgKHNwbGljZUEgPT09IHNwbGljZUIpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBUaGUgc3BsaWNlcyBvdmVybGFwIGlmIG5laXRoZXIgZW5kcyBiZWZvcmUgdGhlIG90aGVyIHN0YXJ0c1xuICAgICAgaWYgKHNwbGljZUEuZW5kID49IHNwbGljZUIuc3RhcnQgJiYgc3BsaWNlQi5lbmQgPj0gc3BsaWNlQS5zdGFydCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlJlbW92aW5nIG92ZXJsYXBwaW5nXCIpO1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgc2hvcnRlciBsaW5rIG9mIGJvdGhcbiAgICAgICAgaWYgKHNwbGljZUEuZW5kIC0gc3BsaWNlQS5zdGFydCA8IHNwbGljZUIuZW5kIC0gc3BsaWNlQi5zdGFydCkge1xuICAgICAgICAgIGxpbmtzVG9TcGxpY2Uuc3BsaWNlKG4sIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmtzVG9TcGxpY2Uuc3BsaWNlKG4yLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZSByZW1vdmVPdmVybGFwcGluZztcbiAgICAgIH1cbiAgICB9XG4gICAgKytuO1xuICB9XG5cbiAgaWYgKGxpbmtzVG9TcGxpY2UubGVuZ3RoID09PSAwKSByZXR1cm4gPD57dGV4dH08Lz47XG5cbiAgY29uc3QgcmVzOiBSZWFjdEVsZW1lbnRbXSA9IFtdO1xuICBsZXQgbiA9IDA7XG5cbiAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzVG9TcGxpY2UpIHtcbiAgICByZXMucHVzaCg8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57dGV4dC5zdWJzdHJpbmcobiwgbGluay5zdGFydCl9PC9zcGFuPik7XG4gICAgcmVzLnB1c2gobGluay5saW5rKTtcbiAgICBuID0gbGluay5lbmQ7XG4gIH1cbiAgcmVzLnB1c2goPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e3RleHQuc2xpY2Uobil9PC9zcGFuPik7XG5cbiAgcmV0dXJuIDw+e3Jlc308Lz47XG59XG5cbi8qKlxuICogUmVuZGVycyBhIGdpdmVuIFJlaWZpZWRcbiAqIEBwYXJhbSBlbnRpdHkgdGhlIGVudGl0eSB0aGUgUmVpZmllZCBleGlzdHMgaW5cbiAqIEBwYXJhbSByZWlmaWVkIHRoZSBSZWlmaWVkXG4gKiBAcGFyYW0gc2hvd0JhZGdlcyBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiBiYWRnZXMgc2hvdWxkIGJlIHNob3duXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMgZnVuY3Rpb25zIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBjbGlja2FibGUgaXRlbXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIGVudGl0aWVzIG5hbWVcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gb250b2xvZ3kgYmFkZ2VcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGEgZGlzYW1iaWd1YXRpb24gYmFkZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlaWZpZWRKU1goXG4gIGVudGl0eTogVGhpbmcsXG4gIHJlaWZpZWQ6IFJlaWZpZWQ8YW55PixcbiAgc2hvd0JhZGdlczogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMsXG4gIC8qVE9ETzogY2hhbmdlIHRvIHVzaW5nIChlbnRpdHkgOiBFbnRpdHlEYXRhKSBsYXRlciovIG9uTmF2aWdhdGVzOiBPbk5hdmlnYXRlc1xuKTogUmVhY3RFbGVtZW50IHtcbiAgZnVuY3Rpb24gZ2V0VmFsdWVKU1godmFsdWU6IFJlaWZpZWQ8YW55Pik6IFJlYWN0RWxlbWVudCB7XG4gICAgY29uc3QgbGlua2VkRW50aXRpZXMgPSBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKTtcblxuICAgIC8vIGxpbmtlZEVudGl0aWVzIG5vdCBleGlzdGVudCBvbiBlbnRpdHkgKC0+IHByb2JhYmx5IGxlZ2FjeSBhcGkgdmVyc2lvbilcbiAgICBpZiAoT2JqZWN0LmtleXMobGlua2VkRW50aXRpZXMubGlua2VkRW50aXRpZXMpLmxlbmd0aCA9PSAwKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlLnZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIGFkZExpbmtzVG9UZXh0KFxuICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICB2YWx1ZS52YWx1ZS50b1N0cmluZygpLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBzaG91bGQgbm90IGhhcHBlbiwgcHJvdmUgdGhhdCB0aGlzIGlzIG5ldmVyIHRoZSBjYXNlXG4gICAgICAgIHJldHVybiA8PntKU09OLnN0cmluZ2lmeSh2YWx1ZS52YWx1ZSl9PC8+O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsaW5rZWRFbnRpdHkgPSBsaW5rZWRFbnRpdGllcy5nZXQodmFsdWUudmFsdWUpO1xuXG4gICAgICBpZiAobGlua2VkRW50aXR5KSB7XG4gICAgICAgIHJldHVybiBnZXRFbnRpdHlMaW5rSlNYKFxuICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgaWYgKGVudGl0eS5nZXRUeXBlKCkgPT0gXCJvbnRvbG9neVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gPD57SlNPTi5zdHJpbmdpZnkodmFsdWUudmFsdWUpfTwvPjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgICAgdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYWRkTGlua3NUb1RleHQoXG4gICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICB2YWx1ZS52YWx1ZS50b1N0cmluZygpLFxuICAgICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2dldFZhbHVlSlNYKHJlaWZpZWQpfVxuICAgICAgJm5ic3A7XG4gICAgICB7cmVpZmllZC5oYXNNZXRhZGF0YSgpICYmXG4gICAgICAgIGdldEF4aW9tc0luZm9ybWF0aW9uSlNYKGVudGl0eSwgcmVpZmllZC5nZXRNZXRhZGF0YSgpKX1cbiAgICA8Lz5cbiAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlCdXR0b24sIEV1aVByb3ZpZGVyIH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgSnNvbkFwaVdpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyIH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5cbmZ1bmN0aW9uIEpzb25BcGlXaWRnZXQocHJvcHM6IEpzb25BcGlXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaVF1ZXJ5LCBidXR0b25UZXh0LCBidXR0b25TaXplIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxFdWlCdXR0b24gaHJlZj17YXBpUXVlcnl9IHRhcmdldD1cIl9ibGFua1wiIHNpemU9e2J1dHRvblNpemUgfHwgXCJtXCJ9PlxuICAgICAge2J1dHRvblRleHR9XG4gICAgPC9FdWlCdXR0b24+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUpzb25BcGkoXG4gIHByb3BzOiBKc29uQXBpV2lkZ2V0UHJvcHMsXG4gIGNvbnRhaW5lcjogRWxlbWVudCxcbiAgY2FsbGJhY2s/OiAoKSA9PiB2b2lkXG4pIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRKc29uQXBpV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRKc29uQXBpV2lkZ2V0KHByb3BzOiBKc29uQXBpV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8SnNvbkFwaVdpZGdldFxuICAgICAgICAgIGFwaVF1ZXJ5PXtwcm9wcy5hcGlRdWVyeX1cbiAgICAgICAgICBidXR0b25UZXh0PXtwcm9wcy5idXR0b25UZXh0fVxuICAgICAgICAgIGJ1dHRvblNpemU9e3Byb3BzLmJ1dHRvblNpemV9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgSnNvbkFwaVdpZGdldCwgY3JlYXRlSnNvbkFwaSB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIEV1aUxvYWRpbmdTcGlubmVyLFxuICBFdWlQcm92aWRlcixcbiAgRXVpQmFkZ2UsXG4gIEV1aUljb24sXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWJXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGlzRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQnJlYWRjcnVtYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBCcmVhZGNydW1iV2lkZ2V0KHByb3BzOiBCcmVhZGNydW1iV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBvbnRvbG9neUlkLFxuICAgIGlyaSxcbiAgICBlbnRpdHlUeXBlLFxuICAgIGNvbG9yRmlyc3QsXG4gICAgY29sb3JTZWNvbmQsXG4gICAgcGFyYW1ldGVyLFxuICAgIHVzZUxlZ2FjeSxcbiAgICBvbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICBjbGFzc05hbWUsXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nLCBpc1N1Y2Nlc3MsIGlzRXJyb3IsIGVycm9yIH0gPSB1c2VRdWVyeShcbiAgICBbXCJicmVhZGNydW1iXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoXG4gICAgICAgIGlyaSxcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB1c2VMZWdhY3lcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmcgJiYgKFxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpXG4gICAgICAgICAgICAgICAgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3koXG4gICAgICAgICAgICAgICAgICBwcm9wcy5vbnRvbG9neUlkIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIiAvLyBJbXByb3ZlIGFjY2Vzc2liaWxpdHlcbiAgICAgICAgICAgIHRhYkluZGV4PXswfSAvLyBNYWtlIGl0IGZvY3VzYWJsZVxuICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikgZS5jdXJyZW50VGFyZ2V0LmNsaWNrKCk7XG4gICAgICAgICAgICB9fSAvLyBIYW5kbGUga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxFdWlCYWRnZVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgICAgICAgIHByb3BzLm9udG9sb2d5SWRcbiAgICAgICAgICAgICAgICAgID8gXCJicmVhZGNydW1iIGNsaWNrYWJsZS1icmVhZGNydW1iXCJcbiAgICAgICAgICAgICAgICAgIDogXCJicmVhZGNydW1iXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb2xvcj17Y29sb3JGaXJzdCB8fCAocHJvcHMub250b2xvZ3lJZCA/IFwicHJpbWFyeVwiIDogXCJ3YXJuaW5nXCIpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7cHJvcHMub250b2xvZ3lJZD8udG9VcHBlckNhc2UoKSB8fCAoXG4gICAgICAgICAgICAgICAgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9e1wic1wifSAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9FdWlCYWRnZT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgPEV1aUljb24gdHlwZT1cImFycm93UmlnaHRcIiAvPlxuICAgICAgICAgICZuYnNwO1xuICAgICAgICAgIDxFdWlCYWRnZSBjbGFzc05hbWU9XCJicmVhZGNydW1iXCIgY29sb3I9e2NvbG9yU2Vjb25kIHx8IFwid2FybmluZ1wifT5cbiAgICAgICAgICAgIHs8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT17XCJzXCJ9IC8+fVxuICAgICAgICAgIDwvRXVpQmFkZ2U+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICl9XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiYgaXNFbnRpdHkoZGF0YSkgJiYgKFxuICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgIG9udG9sb2d5TmFtZT17ZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgc2hvcnRGb3JtPXtkYXRhLmdldFNob3J0Rm9ybSgpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e29udG9sb2d5SWQgfHwgZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgY29sb3JGaXJzdD17Y29sb3JGaXJzdH1cbiAgICAgICAgICBjb2xvclNlY29uZD17Y29sb3JTZWNvbmR9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtpc0Vycm9yICYmIChcbiAgICAgICAgPEJyZWFkY3J1bWJQcmVzZW50YXRpb25cbiAgICAgICAgICBvbnRvbG9neU5hbWU9e1xuICAgICAgICAgICAgcHJvcHMub250b2xvZ3lJZD8udG9VcHBlckNhc2UoKSB8fFxuICAgICAgICAgICAgKGRhdGEgJiYgZGF0YS5nZXRPbnRvbG9neUlkKCkudG9VcHBlckNhc2UoKSkgfHxcbiAgICAgICAgICAgIGdldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJvbnRvbG9neVwiKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzaG9ydEZvcm09e1xuICAgICAgICAgICAgZGF0YSAmJiBkYXRhLmdldFNob3J0Rm9ybSgpID8gZGF0YS5nZXRTaG9ydEZvcm0oKS50b1VwcGVyQ2FzZSgpIDogXCJcIlxuICAgICAgICAgIH1cbiAgICAgICAgICBvbnRvbG9neUlkPXtvbnRvbG9neUlkIHx8IChkYXRhID8gZGF0YS5nZXRPbnRvbG9neUlkKCkgOiBcIlwiKX1cbiAgICAgICAgICBjb2xvckZpcnN0PXtcbiAgICAgICAgICAgIGNvbG9yRmlyc3QgfHxcbiAgICAgICAgICAgIChwcm9wcy5vbnRvbG9neUlkIHx8IChkYXRhICYmIGRhdGEuZ2V0T250b2xvZ3lJZCgpKVxuICAgICAgICAgICAgICA/IFwicHJpbWFyeVwiXG4gICAgICAgICAgICAgIDogXCJkYW5nZXJcIilcbiAgICAgICAgICB9XG4gICAgICAgICAgY29sb3JTZWNvbmQ9e1xuICAgICAgICAgICAgY29sb3JTZWNvbmQgfHwgKGRhdGEgJiYgZGF0YS5nZXRTaG9ydEZvcm0oKSA/IFwic3VjY2Vzc1wiIDogXCJkYW5nZXJcIilcbiAgICAgICAgICB9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnJlYWRjcnVtYihcbiAgcHJvcHM6IEJyZWFkY3J1bWJXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEJyZWFkY3J1bWJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEJyZWFkY3J1bWJXaWRnZXQocHJvcHM6IEJyZWFkY3J1bWJXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiIGdsb2JhbFN0eWxlcz17ZmFsc2V9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxCcmVhZGNydW1iV2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIGNvbG9yRmlyc3Q9e3Byb3BzLmNvbG9yRmlyc3R9XG4gICAgICAgICAgY29sb3JTZWNvbmQ9e3Byb3BzLmNvbG9yU2Vjb25kfVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBCcmVhZGNydW1iV2lkZ2V0LCBjcmVhdGVCcmVhZGNydW1iIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBEZXNjcmlwdGlvbldpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgRGVzY3JpcHRpb25QcmVzZW50YXRpb24gfSBmcm9tIFwiLi9EZXNjcmlwdGlvblByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgTk9fREVTQ1JJUFRJT04gPSBcIk5vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZS5cIjtcblxuZnVuY3Rpb24gRGVzY3JpcHRpb25XaWRnZXQocHJvcHM6IERlc2NyaXB0aW9uV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBvbnRvbG9neUlkLFxuICAgIGlyaSxcbiAgICBkZXNjVGV4dCxcbiAgICB0aGluZ1R5cGUsXG4gICAgcGFyYW1ldGVyLFxuICAgIHVzZUxlZ2FjeSxcbiAgICBjbGFzc05hbWUsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNFcnJvciwgZXJyb3IgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXCJkZXNjcmlwdGlvblwiLCBhcGksIHBhcmFtZXRlciwgdGhpbmdUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChcbiAgICAgICAgaXJpLFxuICAgICAgICB0aGluZ1R5cGUsXG4gICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgdXNlTGVnYWN5XG4gICAgICApO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxEZXNjcmlwdGlvblByZXNlbnRhdGlvblxuICAgICAgZGVzY3JpcHRpb249e2RhdGEgPyBkYXRhLmdldERlc2NyaXB0aW9uKCkgOiBOT19ERVNDUklQVElPTn1cbiAgICAgIGRlc2NUZXh0PXtkZXNjVGV4dH1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICBlcnJvcj17aXNFcnJvciA/IGVycm9yIDogbnVsbH1cbiAgICAgIHsuLi5yZXN0fVxuICAgIC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlc2NyaXB0aW9uKFxuICBwcm9wczogRGVzY3JpcHRpb25XaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZERlc2NyaXB0aW9uV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWREZXNjcmlwdGlvbldpZGdldChwcm9wczogRGVzY3JpcHRpb25XaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiIGdsb2JhbFN0eWxlcz17ZmFsc2V9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxEZXNjcmlwdGlvbldpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgZGVzY1RleHQ9e3Byb3BzLmRlc2NUZXh0fVxuICAgICAgICAgIHRoaW5nVHlwZT17cHJvcHMudGhpbmdUeXBlfVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIGNvbG9yPXtwcm9wcy5jb2xvcn1cbiAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBEZXNjcmlwdGlvbldpZGdldCwgY3JlYXRlRGVzY3JpcHRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IERlc2NyaXB0aW9uUHJlc2VudGF0aW9uUHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uL3N0eWxlL3RzNG5mZGlTdHlsZXMvdHM0bmZkaURlc2NyaXB0aW9uU3R5bGUuY3NzXCI7XG5cbmZ1bmN0aW9uIERlc2NyaXB0aW9uUHJlc2VudGF0aW9uKHByb3BzOiBEZXNjcmlwdGlvblByZXNlbnRhdGlvblByb3BzKSB7XG4gIGNvbnN0IHsgZGVzY1RleHQsIGRlc2NyaXB0aW9uLCBpc0xvYWRpbmcsIGVycm9yLCBjbGFzc05hbWUgfSA9IHByb3BzO1xuICBjb25zdCBmaW5hbENsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcInRzNG5mZGktZGVzY3JpcHRpb24tc3R5bGVcIjtcblxuICBjb25zdCByZW5kZXJDb250ZW50ID0gKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPjtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiZGVzY3JpcHRpb25cIil9PC9FdWlUZXh0PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gPEV1aVRleHQ+e2Rlc2NUZXh0IHx8IGRlc2NyaXB0aW9ufTwvRXVpVGV4dD47XG4gIH07XG4gIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PntyZW5kZXJDb250ZW50KCl9PC9kaXY+O1xufVxuXG5leHBvcnQgeyBEZXNjcmlwdGlvblByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpRmxleEl0ZW0sIEV1aUxpbmssIEV1aVByb3ZpZGVyLCBFdWlCdXR0b25JY29uIH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgSXJpV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge1xuICBpc0V1aUJ1dHRvbkNvbG9yLFxuICBpc0V1aUxpbmtDb2xvcixcbiAgaXNIZXhDb2xvcixcbiAgaXNSZ2JDb2xvcixcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uL3N0eWxlL3RzNG5mZGlTdHlsZXMvdHM0bmZkaUlyaVN0eWxlLmNzc1wiO1xuXG5mdW5jdGlvbiBJcmlXaWRnZXQocHJvcHM6IElyaVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpcmksXG4gICAgaXJpVGV4dCxcbiAgICBjb2xvcixcbiAgICBleHRlcm5hbEljb24sXG4gICAgdXJsUHJlZml4LFxuICAgIGNvcHlCdXR0b24sXG4gICAgY2xhc3NOYW1lLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHVybFByZWZpeEV4aXN0ID1cbiAgICB0eXBlb2YgdXJsUHJlZml4ICE9PSBcInVuZGVmaW5lZFwiICYmIHVybFByZWZpeCAhPT0gXCJcIiA/IHRydWUgOiBmYWxzZTtcbiAgY29uc3QgaXJpVXJsID0gdXJsUHJlZml4RXhpc3QgPyB1cmxQcmVmaXggKyBlbmNvZGVVUklDb21wb25lbnQoaXJpKSA6IGlyaTtcbiAgY29uc3QgZmluYWxDbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJ0czRuZmRpLWlyaS1zdHlsZVwiO1xuXG4gIGNvbnN0IENvcHlMaW5rQnV0dG9uID0gKCkgPT4ge1xuICAgIGlmICghY29waWVkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PlxuICAgICAgICAgIDxFdWlCdXR0b25JY29uXG4gICAgICAgICAgICBkaXNwbGF5PVwiYmFzZVwiXG4gICAgICAgICAgICBpY29uVHlwZT1cImNvcHlcIlxuICAgICAgICAgICAga2V5PXtcImNvcHktYnRuXCJ9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBcIjVweFwiLFxuICAgICAgICAgICAgICBtYXJnaW5SaWdodDogXCI1cHhcIixcbiAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgY29sb3IgJiYgKGlzSGV4Q29sb3IoY29sb3IpIHx8IGlzUmdiQ29sb3IoY29sb3IpKSA/IGNvbG9yIDogXCJcIixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlCdXR0b25Db2xvcihjb2xvcikgPyBjb2xvciA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaXJpVXJsKTtcbiAgICAgICAgICAgICAgc2V0Q29waWVkKHRydWUpO1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRDb3BpZWQoZmFsc2UpO1xuICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPjwvRXVpQnV0dG9uSWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfT5cbiAgICAgICAgPEV1aUJ1dHRvbkljb25cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgbWFyZ2luTGVmdDogXCI1cHhcIixcbiAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICBjb2xvciAmJiAoaXNIZXhDb2xvcihjb2xvcikgfHwgaXNSZ2JDb2xvcihjb2xvcikpID8gY29sb3IgOiBcIlwiLFxuICAgICAgICAgIH19XG4gICAgICAgICAgZGlzcGxheT1cImJhc2VcIlxuICAgICAgICAgIGljb25UeXBlPVwiY2hlY2tcIlxuICAgICAgICAgIGtleT17XCJjb3B5LWJ0blwifVxuICAgICAgICAgIGNvbG9yPXtjb2xvciAmJiBpc0V1aUxpbmtDb2xvcihjb2xvcikgPyBjb2xvciA6IHVuZGVmaW5lZH1cbiAgICAgICAgPjwvRXVpQnV0dG9uSWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfT5cbiAgICAgICAge2NvcHlCdXR0b24gPT09IFwibGVmdFwiICYmIDxDb3B5TGlua0J1dHRvbiAvPn1cbiAgICAgICAgPEV1aUxpbmtcbiAgICAgICAgICBocmVmPXtpcmlVcmx9XG4gICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgIGNvbG9yICYmIChpc0hleENvbG9yKGNvbG9yKSB8fCBpc1JnYkNvbG9yKGNvbG9yKSkgPyBjb2xvciA6IFwiXCIsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgICAgZXh0ZXJuYWw9e2V4dGVybmFsSWNvbn1cbiAgICAgICAgPlxuICAgICAgICAgIHtpcmlUZXh0ID8gaXJpVGV4dCA6IGlyaX1cbiAgICAgICAgPC9FdWlMaW5rPlxuICAgICAgICB7Y29weUJ1dHRvbiA9PT0gXCJyaWdodFwiICYmIDxDb3B5TGlua0J1dHRvbiAvPn1cbiAgICAgIDwvZGl2PlxuICAgIDwvRXVpRmxleEl0ZW0+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUlyaShcbiAgcHJvcHM6IElyaVdpZGdldFByb3BzLFxuICBjb250YWluZXI6IEVsZW1lbnQsXG4gIGNhbGxiYWNrPzogKCkgPT4gdm9pZFxuKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkSXJpV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRJcmlXaWRnZXQocHJvcHM6IElyaVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCIgZ2xvYmFsU3R5bGVzPXtmYWxzZX0+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPElyaVdpZGdldFxuICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgIGlyaVRleHQ9e3Byb3BzLmlyaVRleHR9XG4gICAgICAgICAgY29sb3I9e3Byb3BzLmNvbG9yfVxuICAgICAgICAgIGV4dGVybmFsSWNvbj17cHJvcHMuZXh0ZXJuYWxJY29ufVxuICAgICAgICAgIHVybFByZWZpeD17cHJvcHMudXJsUHJlZml4fVxuICAgICAgICAgIGNvcHlCdXR0b249e3Byb3BzLmNvcHlCdXR0b259XG4gICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgSXJpV2lkZ2V0LCBjcmVhdGVJcmkgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnkgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBUYWJXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9UYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgRW50aXR5VHlwZU5hbWUsIGlzRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBUYWJXaWRnZXQocHJvcHM6IFRhYldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpcmksXG4gICAgYXBpLFxuICAgIG9udG9sb2d5SWQsXG4gICAgZW50aXR5VHlwZSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5LFxuICAgIGhpZXJhcmNoeVRhYixcbiAgICBjcm9zc1JlZlRhYixcbiAgICB0ZXJtaW5vbG9neUluZm9UYWIsXG4gICAgYWx0TmFtZXNUYWIsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNTdWNjZXNzLCBpc0Vycm9yLCBlcnJvciB9ID0gdXNlUXVlcnk8RW50aXR5PihcbiAgICBbXCJ0YWJkYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoXG4gICAgICAgIGlyaSxcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB1c2VMZWdhY3lcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG4gIGZ1bmN0aW9uIHJlbmRlcihkYXRhOiBFbnRpdHkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFRhYlByZXNlbnRhdGlvblxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgZGF0YT17ZGF0YX1cbiAgICAgICAgaXJpPXtpcml9XG4gICAgICAgIGFwaT17YXBpfVxuICAgICAgICB1c2VMZWdhY3k9e3VzZUxlZ2FjeX1cbiAgICAgICAgZW50aXR5VHlwZT17ZGF0YS5nZXRUeXBlKCkgYXMgRW50aXR5VHlwZU5hbWV9XG4gICAgICAgIG9udG9sb2d5SWQ9e29udG9sb2d5SWQgPyBvbnRvbG9neUlkIDogZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgIGhpZXJhcmNoeVRhYj17aGllcmFyY2h5VGFifVxuICAgICAgICBjcm9zc1JlZlRhYj17Y3Jvc3NSZWZUYWJ9XG4gICAgICAgIHRlcm1pbm9sb2d5SW5mb1RhYj17dGVybWlub2xvZ3lJbmZvVGFifVxuICAgICAgICBhbHROYW1lc1RhYj17YWx0TmFtZXNUYWJ9XG4gICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZT17cHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfVxuICAgICAgICBoaWVyYXJjaHlQcmVmZXJyZWRSb290cz17cHJvcHMuaGllcmFyY2h5UHJlZmVycmVkUm9vdHN9XG4gICAgICAgIGhpZXJhcmNoeUtlZXBFeHBhbnNpb25TdGF0ZXM9e3Byb3BzLmhpZXJhcmNoeUtlZXBFeHBhbnNpb25TdGF0ZXN9XG4gICAgICAgIGhpZXJhcmNoeVNob3dTaWJsaW5nc09uSW5pdD17cHJvcHMuaGllcmFyY2h5U2hvd1NpYmxpbmdzT25Jbml0fVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiAoXG4gICAgICAgIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiZGVzY3JpcHRpb25cIil9PC9FdWlUZXh0PlxuICAgICAgKX1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiA8Pntpc0VudGl0eShkYXRhKSA/IHJlbmRlcihkYXRhKSA6IG51bGx9PC8+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUYWIoXG4gIHByb3BzOiBUYWJXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFRhYldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkVGFiV2lkZ2V0KHByb3BzOiBUYWJXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiIGdsb2JhbFN0eWxlcz17ZmFsc2V9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxUYWJXaWRnZXRcbiAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgYWx0TmFtZXNUYWI9e3Byb3BzLmFsdE5hbWVzVGFifVxuICAgICAgICAgIGhpZXJhcmNoeVRhYj17cHJvcHMuaGllcmFyY2h5VGFifVxuICAgICAgICAgIGNyb3NzUmVmVGFiPXtwcm9wcy5jcm9zc1JlZlRhYn1cbiAgICAgICAgICB0ZXJtaW5vbG9neUluZm9UYWI9e3Byb3BzLnRlcm1pbm9sb2d5SW5mb1RhYn1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgICAgaGllcmFyY2h5UHJlZmVycmVkUm9vdHM9e3Byb3BzLmhpZXJhcmNoeVByZWZlcnJlZFJvb3RzfVxuICAgICAgICAgIGhpZXJhcmNoeUtlZXBFeHBhbnNpb25TdGF0ZXM9e3Byb3BzLmhpZXJhcmNoeUtlZXBFeHBhbnNpb25TdGF0ZXN9XG4gICAgICAgICAgaGllcmFyY2h5U2hvd1NpYmxpbmdzT25Jbml0PXtwcm9wcy5oaWVyYXJjaHlTaG93U2libGluZ3NPbkluaXR9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgVGFiV2lkZ2V0LCBjcmVhdGVUYWIgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlUYWJiZWRDb250ZW50IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7XG4gIGlzRW50aXR5LFxuICBpc0luZGl2aWR1YWwsXG4gIGlzUHJvcGVydHksXG59IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9Dcm9zc1JlZldpZGdldC9Dcm9zc1JlZlRhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL1JlaWZpZWRcIjtcbmltcG9ydCB7IFRhYlByZXNlbnRhdGlvblByb3BzIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgT250b2xvZ3lJbmZvV2lkZ2V0IH0gZnJvbSBcIi4uLy4uL09udG9sb2d5SW5mb1dpZGdldFwiO1xuaW1wb3J0IHsgSGllcmFyY2h5V2lkZ2V0IH0gZnJvbSBcIi4vSGllcmFyY2h5V2lkZ2V0XCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi9zdHlsZS90czRuZmRpU3R5bGVzL3RzNG5mZGlUYWJTdHlsZS5jc3NcIjtcblxuZnVuY3Rpb24gVGFiUHJlc2VudGF0aW9uKHByb3BzOiBUYWJQcmVzZW50YXRpb25Qcm9wcykge1xuICBmdW5jdGlvbiByZW5kZXIoZGF0YTogRW50aXR5KSB7XG4gICAgY29uc3QgZmluYWxDbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgfHwgXCJ0czRuZmRpLXRhYi1zdHlsZVwiO1xuICAgIGNvbnN0IHRhYnMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gc2hvdyB0aGUgdGFicy4gVGhlcmVmb3JlLCB1bmRlZmluZWQgZ2V0cyB0cmVhdGVkIGFzIHRydXRoeS5cbiAgICAgKi9cbiAgICBpZiAocHJvcHMuYWx0TmFtZXNUYWIgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5hbHROYW1lc1RhYikge1xuICAgICAgdGFicy5wdXNoKHtcbiAgICAgICAgY29udGVudDogKFxuICAgICAgICAgIDxBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb25cbiAgICAgICAgICAgIHN5bm9ueW1zPXtcbiAgICAgICAgICAgICAgZGF0YSA/IGRhdGEuZ2V0U3lub255bXMoKS5tYXAoKHN5bm9ueW0pID0+IHN5bm9ueW0udmFsdWUpIDogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlzTG9hZGluZz17cHJvcHMuaXNMb2FkaW5nfVxuICAgICAgICAgICAgZXJyb3I9e3Byb3BzLmVycm9yfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtmaW5hbENsYXNzTmFtZX0tYWx0TmFtZVRhYmB9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSxcbiAgICAgICAgaWQ6IFwidGFiMVwiLFxuICAgICAgICBuYW1lOiBcIkFsdGVybmF0aXZlIE5hbWVzXCIsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuaGllcmFyY2h5VGFiID09PSB1bmRlZmluZWQgfHwgcHJvcHMuaGllcmFyY2h5VGFiKSB7XG4gICAgICB0YWJzLnB1c2goe1xuICAgICAgICBjb250ZW50OiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIHsvKiBUT0RPOiBJcyBvdmVyZmxvdzogXCJhdXRvXCIgd2FudGVkPyAqL31cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgb3ZlcmZsb3c6IFwiYXV0b1wiIH19PlxuICAgICAgICAgICAgICA8SGllcmFyY2h5V2lkZ2V0XG4gICAgICAgICAgICAgICAgLy8gYmFja2VuZF90eXBlIGFuZCBhcGlLZXkgbWlzc2luZyBoZXJlLiBJZiBUYWJXaWRnZXQvIE1ldGFkYXRhV2lkZ2V0IHNoYWxsIGJlIHVzZWQgZm9yIG90aGVyIGJhY2tlbmQgdHlwZXMgbGF0ZXIsIHRoaXMgaGFzIHRvIGJlIHByb3ZpZGVkXG4gICAgICAgICAgICAgICAgYXBpVXJsPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgb250b2xvZ3lJZD17XG4gICAgICAgICAgICAgICAgICBwcm9wcy5vbnRvbG9neUlkIHx8XG4gICAgICAgICAgICAgICAgICAoZGF0YSAmJiBkYXRhLmdldE9udG9sb2d5SWQoKSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgID8gZGF0YS5nZXRPbnRvbG9neUlkKClcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICBwcmVmZXJyZWRSb290cz17cHJvcHMuaGllcmFyY2h5UHJlZmVycmVkUm9vdHN9XG4gICAgICAgICAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0PXtwcm9wcy5oaWVyYXJjaHlTaG93U2libGluZ3NPbkluaXR9XG4gICAgICAgICAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlcz17cHJvcHMuaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlc31cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2ZpbmFsQ2xhc3NOYW1lfS1oaWVyYXJjaHlgfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgICksXG4gICAgICAgIGlkOiBcInRhYjJcIixcbiAgICAgICAgbmFtZTogXCJIaWVyYXJjaHlcIixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5jcm9zc1JlZlRhYiA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmNyb3NzUmVmVGFiKSB7XG4gICAgICB0YWJzLnB1c2goe1xuICAgICAgICBjb250ZW50OiAoXG4gICAgICAgICAgPENyb3NzUmVmVGFiUHJlc2VudGF0aW9uXG4gICAgICAgICAgICBjcm9zc3JlZnM9e1xuICAgICAgICAgICAgICBkYXRhXG4gICAgICAgICAgICAgICAgPyBSZWlmaWVkLmZyb21Kc29uKGRhdGEuZ2V0Q3Jvc3NSZWZlcmVuY2VzKCkpLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc0xvYWRpbmc9e3Byb3BzLmlzTG9hZGluZ31cbiAgICAgICAgICAgIGVycm9yPXtwcm9wcy5lcnJvcn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7ZmluYWxDbGFzc05hbWV9LWNyb3NzUmVmYH1cbiAgICAgICAgICAvPlxuICAgICAgICApLFxuICAgICAgICBpZDogXCJ0YWIzXCIsXG4gICAgICAgIG5hbWU6IFwiQ3Jvc3MgcmVmZXJlbmNlc1wiLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnRlcm1pbm9sb2d5SW5mb1RhYiA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLnRlcm1pbm9sb2d5SW5mb1RhYikge1xuICAgICAgdGFicy5wdXNoKHtcbiAgICAgICAgY29udGVudDogKFxuICAgICAgICAgIDxPbnRvbG9neUluZm9XaWRnZXRcbiAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWQgfHwgZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgIHBhcmFtZXRlcj17XCJcIn1cbiAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgc2hvd0JhZGdlcz17ZmFsc2V9XG4gICAgICAgICAgICBoYXNUaXRsZT17ZmFsc2V9XG4gICAgICAgICAgICB3aWR0aD17NjAwfVxuICAgICAgICAgIC8+XG4gICAgICAgICksXG4gICAgICAgIGlkOiBcInRhYjRcIixcbiAgICAgICAgbmFtZTogYEFib3V0ICR7cHJvcHMub250b2xvZ3lJZD8udG9VcHBlckNhc2UoKX1gLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRhYnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvKipcbiAgICAgICAqIEV1aVRhYmJlZENvbnRlbnQgY29tcG9uZW50IHJhaXNlcyBleGNlcHRpb24gaWYgbm8gdGFiIGlzIHByb3ZpZGVkLlxuICAgICAgICovXG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfT5cbiAgICAgICAgPEV1aVRhYmJlZENvbnRlbnQgc2l6ZT1cInNcIiB0YWJzPXt0YWJzfSAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0VudGl0eShwcm9wcy5kYXRhKSB8fFxuICAgICAgaXNQcm9wZXJ0eShwcm9wcy5kYXRhKSB8fFxuICAgICAgaXNJbmRpdmlkdWFsKHByb3BzLmRhdGEpXG4gICAgICAgID8gcmVuZGVyKHByb3BzLmRhdGEpXG4gICAgICAgIDogbnVsbH1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IHsgVGFiUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgRXVpRmxleEdyb3VwLFxuICBFdWlGbGV4SXRlbSxcbiAgRXVpTG9hZGluZ1NwaW5uZXIsXG4gIEV1aVBhbmVsLFxuICBFdWlUZXh0LFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcmVzZW50YXRpb25Qcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vLi4vLi4vc3R5bGUvdHM0bmZkaVN0eWxlcy90czRuZmRpQWx0TmFtZVRhYlN0eWxlLmNzc1wiO1xuXG5mdW5jdGlvbiBBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24oXG4gIHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcmVzZW50YXRpb25Qcm9wc1xuKSB7XG4gIGNvbnN0IGZpbmFsQ2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lIHx8IFwidHM0bmZkaS1hbHROYW1lVGFiLXN0eWxlXCI7XG5cbiAgZnVuY3Rpb24gcmVuZGVyQWx0TGFiZWwoKSB7XG4gICAgaWYgKHByb3BzLmlzTG9hZGluZykge1xuICAgICAgcmV0dXJuIDxFdWlMb2FkaW5nU3Bpbm5lciAvPjtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZXJyb3IpIHtcbiAgICAgIDxFdWlUZXh0PlxuICAgICAgICB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KHByb3BzLmVycm9yLCBcImFsdGVybmF0aXZlIG5hbWVzXCIpfVxuICAgICAgPC9FdWlUZXh0PjtcbiAgICB9XG4gICAgaWYgKHByb3BzLnN5bm9ueW1zICYmIHByb3BzLnN5bm9ueW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBwcm9wcy5zeW5vbnltcy5tYXAoKHZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgPEV1aUZsZXhJdGVtIGtleT17dmFsdWUgKyBpbmRleH0+e3ZhbHVlfTwvRXVpRmxleEl0ZW0+XG4gICAgICApKTtcbiAgICB9XG4gICAgcmV0dXJuIDxFdWlUZXh0Pk5vIGFsdGVybmF0aXZlIG5hbWVzIGV4aXN0LjwvRXVpVGV4dD47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0+XG4gICAgICA8RXVpUGFuZWw+XG4gICAgICAgIDxFdWlGbGV4R3JvdXAgc3R5bGU9e3sgcGFkZGluZzogMTAgfX0gZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAge3JlbmRlckFsdExhYmVsKCl9XG4gICAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgICAgPC9FdWlQYW5lbD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgRXVpRmxleEdyb3VwLFxuICBFdWlGbGV4SXRlbSxcbiAgRXVpTG9hZGluZ1NwaW5uZXIsXG4gIEV1aVBhbmVsLFxuICBFdWlUZXh0LFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBDcm9zc1JlZlByZXNlbnRhdGlvblByb3BzIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi8uLi9zdHlsZS90czRuZmRpU3R5bGVzL3RzNG5mZGlDcm9zc1JlZlN0eWxlLmNzc1wiO1xuXG5mdW5jdGlvbiBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbihwcm9wczogQ3Jvc3NSZWZQcmVzZW50YXRpb25Qcm9wcykge1xuICBjb25zdCBmaW5hbENsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSB8fCBcInRzNG5mZGktYWx0TmFtZVRhYi1zdHlsZVwiO1xuXG4gIGZ1bmN0aW9uIHJlbmRlckNyb3NzUmVmcyhjcm9zc3JlZnM6IGFueSkge1xuICAgIGlmIChwcm9wcy5pc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybiA8RXVpTG9hZGluZ1NwaW5uZXIgLz47XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmVycm9yKSB7XG4gICAgICA8RXVpVGV4dD5cbiAgICAgICAge2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShwcm9wcy5lcnJvciwgXCJjcm9zcyByZWZlcmVuY2VzXCIpfVxuICAgICAgPC9FdWlUZXh0PjtcbiAgICB9XG5cbiAgICBpZiAoY3Jvc3NyZWZzICYmIGNyb3NzcmVmcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3Jvc3NyZWZzPy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4gKFxuICAgICAgICA8RXVpRmxleEl0ZW0ga2V5PXtpbmRleH0+e2l0ZW19PC9FdWlGbGV4SXRlbT5cbiAgICAgICkpO1xuICAgIH1cbiAgICByZXR1cm4gPEV1aVRleHQ+Tm8gY3Jvc3MgcmVmZXJlbmNlcyBleGlzdC48L0V1aVRleHQ+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PlxuICAgICAgPEV1aVBhbmVsPlxuICAgICAgICA8PlxuICAgICAgICAgIDxFdWlGbGV4R3JvdXAgc3R5bGU9e3sgcGFkZGluZzogNyB9fSBkaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIHtyZW5kZXJDcm9zc1JlZnMocHJvcHMuY3Jvc3NyZWZzKX1cbiAgICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgICAgPC8+XG4gICAgICA8L0V1aVBhbmVsPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgeyBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCwgeyBSZWFjdEVsZW1lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIEV1aUNhcmQsXG4gIEV1aUZsZXhJdGVtLFxuICBFdWlMb2FkaW5nU3Bpbm5lcixcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aVNwYWNlcixcbiAgRXVpVGV4dCxcbn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgT250b2xvZ3ksIFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7XG4gIGNhcGl0YWxpemUsXG4gIGRlQ2FtZWxDYXNlLFxuICBkZVVuZGVyc2NvcmUsXG4gIHJhbmRvbVN0cmluZyxcbn0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge1xuICBnZXRFbnRpdHlMaW5rSlNYLFxuICBnZXRSZWlmaWVkSlNYLFxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IE9udG9sb2d5SW5mb1dpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCBcIi4uLy4uLy4uL3N0eWxlL3RzNG5mZGlTdHlsZXMvdHM0bmZkaU9udG9sb2d5SW5mb1N0eWxlLmNzc1wiO1xuXG5jb25zdCBERUZBVUxUX0hBU19USVRMRSA9IHRydWU7XG5cbmZ1bmN0aW9uIE9udG9sb2d5SW5mb1dpZGdldChwcm9wczogT250b2xvZ3lJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIG9udG9sb2d5SWQsXG4gICAgYXBpLFxuICAgIHBhcmFtZXRlcixcbiAgICBoYXNUaXRsZSA9IERFRkFVTFRfSEFTX1RJVExFLFxuICAgIHVzZUxlZ2FjeSxcbiAgICBzaG93QmFkZ2VzLFxuICAgIGNsYXNzTmFtZSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuICBjb25zdCBvbk5hdmlnYXRlcyA9IHtcbiAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gIH07XG4gIGNvbnN0IGZpbmFsQ2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwidHM0bmZkaS1vbnRvbG9neXktaW5mby1zdHlsZVwiO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBvbnRvbG9neSxcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ09udG9sb2d5LFxuICAgIGlzU3VjY2VzczogaXNTdWNjZXNzT250b2xvZ3ksXG4gICAgaXNFcnJvcjogaXNFcnJvck9udG9sb2d5LFxuICAgIGVycm9yOiBlcnJvck9udG9sb2d5LFxuICB9ID0gdXNlUXVlcnkoW1wib250b2xvZ3lJbmZvXCIsIHByb3BzXSwgKCkgPT4ge1xuICAgIHJldHVybiBvbHNBcGkuZ2V0T250b2xvZ3lPYmplY3Qob250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICB9KTtcblxuICBmdW5jdGlvbiBnZXRPbnRvbG9neUlyaVNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgeyhvbnRvbG9neS5nZXRJcmkoKSB8fCBvbnRvbG9neS5nZXRPbnRvbG9neVB1cmwoKSkgJiYgKFxuICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxiPk9udG9sb2d5IElSSTo8L2I+XG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBpZD17XCJvbnRvbG9neUlyaVwifVxuICAgICAgICAgICAgICAgIGhyZWY9e29udG9sb2d5LmdldElyaSgpIHx8IG9udG9sb2d5LmdldE9udG9sb2d5UHVybCgpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge29udG9sb2d5LmdldElyaSgpIHx8IG9udG9sb2d5LmdldE9udG9sb2d5UHVybCgpfVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRWZXJzaW9uSXJpU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7b250b2xvZ3kuZ2V0VmVyc2lvbklyaSgpICYmIChcbiAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8Yj5WZXJzaW9uIElSSTo8L2I+XG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgPGEgaWQ9e1widmVyc2lvbklyaVwifSBocmVmPXtvbnRvbG9neS5nZXRWZXJzaW9uSXJpKCl9PlxuICAgICAgICAgICAgICAgIHtvbnRvbG9neS5nZXRWZXJzaW9uSXJpKCl9XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldExhc3RMb2FkU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7b250b2xvZ3kuZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpICYmIChcbiAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8Yj5MYXN0IGxvYWRlZDo8L2I+XG4gICAgICAgICAgICA8cD57bmV3IERhdGUob250b2xvZ3kuZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpKS50b1N0cmluZygpfTwvcD5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE9udG9sb2d5SWRTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSk6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtvbnRvbG9neS5nZXRPbnRvbG9neUlkKCkgJiYgKFxuICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxiPk9udG9sb2d5IElEOjwvYj5cbiAgICAgICAgICAgIDxwPntvbnRvbG9neS5nZXRPbnRvbG9neUlkKCl9PC9wPlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VmVyc2lvblNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge29udG9sb2d5LmdldFZlcnNpb24oKSAmJiAoXG4gICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgPGI+VmVyc2lvbjo8L2I+XG4gICAgICAgICAgICA8cD57b250b2xvZ3kuZ2V0VmVyc2lvbigpfTwvcD5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE51bUNsYXNzZXNTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSk6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtvbnRvbG9neS5nZXROdW1DbGFzc2VzKCkgJiYgKFxuICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxiPk51bWJlciBvZiBjbGFzc2VzOjwvYj5cbiAgICAgICAgICAgIDxwPntvbnRvbG9neS5nZXROdW1DbGFzc2VzKCkudG9Mb2NhbGVTdHJpbmcoKX08L3A+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDcmVhdG9yc1NlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge29udG9sb2d5LmdldENyZWF0b3JzKCkubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgPGI+Q3JlYXRvcnM6PC9iPlxuICAgICAgICAgICAgICB7b250b2xvZ3kuZ2V0Q3JlYXRvcnMoKS5sZW5ndGggPiAxID8gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgIHtvbnRvbG9neS5nZXRDcmVhdG9ycygpLm1hcCgoY3JlYXRvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtjcmVhdG9yICsgcmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neS5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChcbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5LmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5LmdldENyZWF0b3JzKClbMF0sXG4gICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8RXVpU3BhY2VyIC8+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QW5ub3RhdGlvblNlY3Rpb24odGhpbmc6IFRoaW5nKTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge3RoaW5nLmdldEFubm90YXRpb25QcmVkaWNhdGVzKCkubWFwKChhbm5vS2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgYW5ub3MgPSB0aGluZy5nZXRBbm5vdGF0aW9uQnlJZChhbm5vS2V5KTtcbiAgICAgICAgICBpZiAoYW5ub3MubGVuZ3RoID09IDApIHJldHVybiA8PjwvPjtcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9IGtleT17YW5ub0tleX0+XG4gICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgIHtjYXBpdGFsaXplKFxuICAgICAgICAgICAgICAgICAgZGVVbmRlcnNjb3JlKFxuICAgICAgICAgICAgICAgICAgICBkZUNhbWVsQ2FzZSh0aGluZy5nZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGFubm9LZXkpKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgIHthbm5vcy5sZW5ndGggPiAxID8gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgIHthbm5vcy5tYXAoKGFubm90YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9IGlkPXthbm5vdGF0aW9uLnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2dldFJlaWZpZWRKU1goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgIDxwPjwvcD5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8cCBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgIHtnZXRSZWlmaWVkSlNYKHRoaW5nLCBhbm5vc1swXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PlxuICAgICAgPEV1aUNhcmRcbiAgICAgICAgdGl0bGU9e2hhc1RpdGxlID8gXCJPbnRvbG9neSBJbmZvcm1hdGlvblwiIDogXCJcIn1cbiAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICAgIHN0eWxlPXtwcm9wcy53aWR0aCA/IHsgd2lkdGg6IHByb3BzLndpZHRoIH0gOiB7fX1cbiAgICAgID5cbiAgICAgICAge2lzTG9hZGluZ09udG9sb2d5ICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXtcInNcIn0gLz59XG4gICAgICAgIHtpc1N1Y2Nlc3NPbnRvbG9neSAmJiBvbnRvbG9neSAhPT0gdW5kZWZpbmVkICYmIChcbiAgICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG4gICAgICAgICAgICB7Z2V0T250b2xvZ3lJcmlTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgIHtnZXRWZXJzaW9uSXJpU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICB7Z2V0TGFzdExvYWRTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLyogVE9ETzogRG8gd2Ugd2FudCB0aGUgZm9sbG93aW5nIG9uIHRoZSBpbmZvcm1hdGlvbiB3aWRnZXQ/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYmkgZG9lcyBub3QgaGF2ZSB0aGVtIHRoZXJlLCBidXQgb24gb3RoZXIgcGFydHMgb2YgdGhlIGVudGl0eSBwYWdlICovXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2dldE9udG9sb2d5SWRTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICB7Z2V0VmVyc2lvblNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgIHtnZXROdW1DbGFzc2VzU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgey8qe2dldENyZWF0b3JzU2VjdGlvbihlbnRpdHlJbmZvKX0qL1xuICAgICAgICAgICAgICAgIC8qIHJlZHVuZGFudCBhcyBpdCdzIGxpc3RlZCBpbiBhbm5vdGF0aW9ucyBhbnl3YXkgKi99XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7Z2V0QW5ub3RhdGlvblNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgKX1cbiAgICAgICAge2lzRXJyb3JPbnRvbG9neSAmJiAoXG4gICAgICAgICAgPEV1aVRleHQ+XG4gICAgICAgICAgICB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yT250b2xvZ3ksIFwiaW5mb3JtYXRpb25cIil9XG4gICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICApfVxuICAgICAgPC9FdWlDYXJkPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPbnRvbG9neUluZm8oXG4gIHByb3BzOiBPbnRvbG9neUluZm9XaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZE9udG9sb2d5SW5mb1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkT250b2xvZ3lJbmZvV2lkZ2V0KHByb3BzOiBPbnRvbG9neUluZm9XaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxPbnRvbG9neUluZm9XaWRnZXRcbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgIHNob3dCYWRnZXM9e3Byb3BzLnNob3dCYWRnZXN9XG4gICAgICAgICAgaGFzVGl0bGU9e3Byb3BzLmhhc1RpdGxlfVxuICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e3Byb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBPbnRvbG9neUluZm9XaWRnZXQsIGNyZWF0ZU9udG9sb2d5SW5mbyB9O1xuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlUmVkdWNlciB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgRXVpTG9hZGluZ1NwaW5uZXIsXG4gIEV1aVRleHQsXG4gIEV1aUljb24sXG4gIEV1aVByb3ZpZGVyLFxuICBFdWlDYXJkLFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgSGllcmFyY2h5LCBUcmVlTm9kZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzL0hpZXJhcmNoeVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgU2tvc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvU2tvc0FwaVwiO1xuaW1wb3J0IHsgSGllcmFyY2h5QnVpbGRlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHsgT250b1BvcnRhbEFwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvT250b1BvcnRhbEFwaVwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vLi4vLi4vc3R5bGUvdHNzU3R5bGVzLmNzc1wiO1xuaW1wb3J0IHsgcmFuZG9tU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBIaWVyYXJjaHlXaWRnZXRQcm9wcywgRW50aXR5RGF0YSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGlzSW5kaXZpZHVhbFR5cGVOYW1lIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi8uLi9zdHlsZS90czRuZmRpU3R5bGVzL3RzNG5mZGlIaWVyYXJjaHlTdHlsZS5jc3NcIjtcblxuZXhwb3J0IGNvbnN0IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMgPSB7XG4gIElOQ0xVREVfT0JTT0xFVEVfRU5USVRJRVM6IGZhbHNlLFxuICBQUkVGRVJSRURfUk9PVFM6IGZhbHNlLFxuICBLRUVQX0VYUEFOU0lPTl9TVEFURVM6IGZhbHNlLFxuICBTSE9XX1NJQkxJTkdTX09OX0lOSVQ6IGZhbHNlLFxuICBVU0VfTEVHQUNZOiBmYWxzZSxcbn0gYXMgY29uc3Q7XG5cbi8vIFRPRE86IHVzZSBvZiBlbnRpdHlUeXBlIGhhcyB0byBiZSByZXZpZXdlZC4gQ3VycmVudGx5IGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZW50aXR5VHlwZSBvZiB0aGUgaGllcmFyY2h5IGFuZCB0aGUgc3BlY2lmaWMgZW50aXR5IGluc2lkZSBpdCBhbHdheXMgbWF0Y2ggKG5vdCBuZWNlc3NhcmlseSB0cnVlIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzLCBidXQgdGhlc2UgaGF2ZSB0byBiZSByZXZpZXdlZCBhbnl3YXlzKVxuZnVuY3Rpb24gVHJlZUxpbmsocHJvcHM6IHtcbiAgZW50aXR5RGF0YTogRW50aXR5RGF0YTtcbiAgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nO1xuICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gIGVudGl0eVR5cGU/OiBzdHJpbmc7XG4gIG9uTmF2aWdhdGVUb0VudGl0eT86IChcbiAgICBvbnRvbG9neUlkOiBzdHJpbmcsXG4gICAgZW50aXR5VHlwZT86IHN0cmluZyxcbiAgICBlbnRpdHk/OiBFbnRpdHlEYXRhXG4gICkgPT4gdm9pZDtcbiAgb25OYXZpZ2F0ZVRvT250b2xvZ3k/OiAoXG4gICAgb250b2xvZ3lJZDogc3RyaW5nLFxuICAgIGVudGl0eVR5cGU/OiBzdHJpbmcsXG4gICAgZW50aXR5PzogRW50aXR5RGF0YVxuICApID0+IHZvaWQ7XG4gIGhpZ2hsaWdodDogYm9vbGVhbjtcbn0pIHtcbiAgbGV0IGRlZmluZWRCeTogc3RyaW5nW10gPSBwcm9wcy5lbnRpdHlEYXRhLmRlZmluZWRCeSB8fCBbXTtcbiAgaWYgKGRlZmluZWRCeS5pbmNsdWRlcyhwcm9wcy5vbnRvbG9neUlkKSkgZGVmaW5lZEJ5ID0gW107XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtwcm9wcy5oaWdobGlnaHQgPyBcImhpZ2hsaWdodFwiIDogdW5kZWZpbmVkfT5cbiAgICAgICAge3Byb3BzLmNoaWxkUmVsYXRpb25Ub1BhcmVudCA9PVxuICAgICAgICAgIFwiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0JGT18wMDAwMDUwXCIgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5JbmxpbmVTdGFydDogXCIxLjVweFwiLCBtYXJnaW5Ub3A6IFwiMi41cHhcIiB9fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdXJyb3VuZENpcmNsZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICZuYnNwO1AmbmJzcDtcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICB7cHJvcHMuY2hpbGRSZWxhdGlvblRvUGFyZW50ID09XG4gICAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZVwiICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luSW5saW5lU3RhcnQ6IFwiMS41cHhcIiwgbWFyZ2luVG9wOiBcIjIuNXB4XCIgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3Vycm91bmRDaXJjbGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBJXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHkpXG4gICAgICAgICAgICAgIHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eShcbiAgICAgICAgICAgICAgICBwcm9wcy5vbnRvbG9neUlkLFxuICAgICAgICAgICAgICAgIHByb3BzLmVudGl0eVR5cGUgfHwgXCJcIixcbiAgICAgICAgICAgICAgICBwcm9wcy5lbnRpdHlEYXRhXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuPiB7cHJvcHMuZW50aXR5RGF0YS5sYWJlbCB8fCBwcm9wcy5lbnRpdHlEYXRhLmlyaX0gPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHtkZWZpbmVkQnkubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgJm5ic3A7XG4gICAgICAgICAge2RlZmluZWRCeS5tYXAoKGRlZmluaW5nT250b2xvZ3kpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e2Ake3Byb3BzLmVudGl0eURhdGEuaXJpfToke2RlZmluaW5nT250b2xvZ3l9YH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KFxuICAgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcHMuZW50aXR5VHlwZSB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmVudGl0eURhdGFcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICAgIHtkZWZpbmluZ09udG9sb2d5LnRvVXBwZXJDYXNlKCl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSGllcmFyY2h5V2lkZ2V0KHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcykge1xuICBjb25zdCB7XG4gICAgYXBpVXJsLFxuICAgIGJhY2tlbmRUeXBlLFxuICAgIGFwaUtleSxcbiAgICBvbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgb25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgaXJpLFxuICAgIG9udG9sb2d5SWQsXG4gICAgZW50aXR5VHlwZSxcbiAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMuSU5DTFVERV9PQlNPTEVURV9FTlRJVElFUyxcbiAgICBwcmVmZXJyZWRSb290cyA9IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMuUFJFRkVSUkVEX1JPT1RTLFxuICAgIGtlZXBFeHBhbnNpb25TdGF0ZXMgPSBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTLktFRVBfRVhQQU5TSU9OX1NUQVRFUyxcbiAgICBzaG93U2libGluZ3NPbkluaXQgPSBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTLlNIT1dfU0lCTElOR1NfT05fSU5JVCxcbiAgICB1c2VMZWdhY3kgPSBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTLlVTRV9MRUdBQ1ksXG4gICAgY2xhc3NOYW1lLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGZpbmFsQ2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwidHM0bmZkaS1oaWVyYXJjaHktc3R5bGVcIjtcblxuICAvLyB1c2VkIHRvIG1hbnVhbGx5IHJlcmVuZGVyIHRoZSBjb21wb25lbnQgb24gdXBkYXRlIG9mIGhpZXJhcmNoeSAoYXMgaGllcmFyY2h5IG9iamVjdCBpcyBuZXN0ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIHN0YXRlIHZhcmlhYmxlIGl0c2VsZilcbiAgY29uc3QgWywgZm9yY2VVcGRhdGVdID0gdXNlUmVkdWNlcihcbiAgICAoeCkgPT4geCArICgxICUgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLFxuICAgIDBcbiAgKTtcblxuICBjb25zdCBhcGk6IEhpZXJhcmNoeUJ1aWxkZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBzd2l0Y2ggKGJhY2tlbmRUeXBlKSB7XG4gICAgICBjYXNlIFwib2xzXCI6XG4gICAgICAgIHJldHVybiBuZXcgT2xzQXBpKGFwaVVybCk7XG4gICAgICBjYXNlIFwic2tvc21vc1wiOlxuICAgICAgICByZXR1cm4gbmV3IFNrb3NBcGkoYXBpVXJsKTtcbiAgICAgIGNhc2UgXCJvbnRvcG9ydGFsXCI6XG4gICAgICAgIHJldHVybiBuZXcgT250b1BvcnRhbEFwaShhcGlVcmwsIGFwaUtleSB8fCBcIlwiKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuZXcgT2xzQXBpKGFwaVVybCk7XG4gICAgfVxuICB9LCBbYXBpVXJsLCBiYWNrZW5kVHlwZSwgYXBpS2V5XSk7XG5cbiAgY29uc3QgeyBkYXRhOiBoaWVyYXJjaHksIGlzU3VjY2VzczogaXNTdWNjZXNzSGllcmFyY2h5IH0gPSB1c2VRdWVyeShcbiAgICBbXG4gICAgICBcImhpZXJhcmNoeVNlbUxvb2tQXCIsXG4gICAgICBpcmksXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIHByZWZlcnJlZFJvb3RzLFxuICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgdXNlTGVnYWN5LFxuICAgIF0sXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0TmV3SGllcmFyY2h5KCkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFwaS5idWlsZEhpZXJhcmNoeVdpdGhJcmkoe1xuICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgICBpcmk6IGlyaSxcbiAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcbiAgICAgICAgcHJlZmVycmVkUm9vdHM6IHByZWZlcnJlZFJvb3RzLFxuICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgIHNob3dTaWJsaW5nc09uSW5pdDogc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICAgIH0pO1xuICAgIH1cbiAgKTtcblxuICBjb25zdCB0b2dnbGVOb2RlID0gdXNlQ2FsbGJhY2soXG4gICAgKG5vZGU6IFRyZWVOb2RlKSA9PiB7XG4gICAgICBpZiAoIShoaWVyYXJjaHkgaW5zdGFuY2VvZiBIaWVyYXJjaHkpKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkhpZXJhcmNoeSBvYmplY3Qgd2FzIHVuZGVmaW5lZCB3aGlsZSB0cnlpbmcgdG8gZXhwYW5kIGEgdHJlZSBub2RlLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uXCJcbiAgICAgICAgKTtcblxuICAgICAgLy8gVE9ETzogaW5kaXZpZHVhbCBoaWVyYXJjaGllcyBhcmUgZnJvemVuIGZvciBub3cgKGJlZm9yZSB1bmRvaW5nLCBjb3JyZWN0IGNoaWxkIGxvYWRpbmcgaGFzIHRvIGJlIGltcGxlbWVudGVkIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzKVxuICAgICAgaWYgKGhpZXJhcmNoeS5lbnRpdHlUeXBlICYmIGlzSW5kaXZpZHVhbFR5cGVOYW1lKGhpZXJhcmNoeS5lbnRpdHlUeXBlKSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICAvLyB0b2dnbGUgZXhwYW5zaW9uIHN0YXRlIGFuZCBmb3JjZSBjb21wb25lbnQgdG8gcmVyZW5kZXIgYWZ0ZXJ3YXJkXG4gICAgICBub2RlLmV4cGFuZGVkID0gIW5vZGUuZXhwYW5kZWQ7XG5cbiAgICAgIC8vIGZldGNoIG5lZWRlZCBpbmZvcm1hdGlvbiBhbmQgcmVyZW5kZXIgYWdhaW4gaWYgbmVlZGVkXG4gICAgICBpZiAobm9kZS5leHBhbmRlZCkge1xuICAgICAgICBub2RlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICBmb3JjZVVwZGF0ZSgpO1xuXG4gICAgICAgIGhpZXJhcmNoeS5mZXRjaEluZm9ybWF0aW9uRm9yRXhwYW5zaW9uKG5vZGUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIG5vZGUubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIGZvcmNlVXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgaGllcmFyY2h5LmNsb3NlTm9kZShub2RlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoaWVyYXJjaHldXG4gICk7XG5cbiAgZnVuY3Rpb24gcmVuZGVyVHJlZU5vZGUoXG4gICAgaGllcmFyY2h5OiBIaWVyYXJjaHksXG4gICAgbm9kZTogVHJlZU5vZGUsXG4gICAgZHJhd0xpbmU/OiBib29sZWFuXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICA8RXVpVGV4dD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGhlaWdodDogXCIyNHB4XCIgfX0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICAgICAgICAgICAgICBib3JkZXJMZWZ0OiBcIjFweCBkb3R0ZWQgYmxhY2tcIixcbiAgICAgICAgICAgICAgICBib3JkZXJCb3R0b206IFwiMXB4IGRvdHRlZCBibGFja1wiLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEycHhcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMTZweFwiLFxuICAgICAgICAgICAgICAgIGxlZnQ6IFwiNS41cHhcIixcbiAgICAgICAgICAgICAgICB0b3A6IFwiLTFweFwiLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgYm9yZGVyTGVmdDogZHJhd0xpbmUgPyBcIjFweCBkb3R0ZWQgYmxhY2tcIiA6IFwiXCIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IFwiMTJweFwiLFxuICAgICAgICAgICAgICAgIGhlaWdodDogXCI5cHhcIixcbiAgICAgICAgICAgICAgICBsZWZ0OiBcIjUuNXB4XCIsXG4gICAgICAgICAgICAgICAgdG9wOiBcIjBweFwiLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLCB0b3A6IFwiLTIycHhcIiB9fT5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgeyFub2RlLmVudGl0eURhdGEuaGFzQ2hpbGRyZW4gPyAoXG4gICAgICAgICAgICAgICAgICA8RXVpSWNvbiB0eXBlPXtcImVtcHR5XCJ9IC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3t9fVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlTm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEV1aUljb25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPXtub2RlLmV4cGFuZGVkID8gXCJhcnJvd0Rvd25cIiA6IFwiYXJyb3dSaWdodFwifVxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9e1wic1wifVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgPFRyZWVMaW5rXG4gICAgICAgICAgICAgICAgZW50aXR5RGF0YT17bm9kZS5lbnRpdHlEYXRhfVxuICAgICAgICAgICAgICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudD17bm9kZS5jaGlsZFJlbGF0aW9uVG9QYXJlbnR9XG4gICAgICAgICAgICAgICAgb250b2xvZ3lJZD17aGllcmFyY2h5Lm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgZW50aXR5VHlwZT17aGllcmFyY2h5LmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtvbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodD17bm9kZS5lbnRpdHlEYXRhLmlyaSA9PSBoaWVyYXJjaHk/Lm1haW5FbnRpdHlJcml9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICB7bm9kZS5lbnRpdHlEYXRhLm51bURlc2NlbmRhbnRzICE9IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIG5vZGUuZW50aXR5RGF0YS5udW1EZXNjZW5kYW50cyA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6IFwiZ3JheVwiIH19PlxuICAgICAgICAgICAgICAgICAgICAoe25vZGUuZW50aXR5RGF0YS5udW1EZXNjZW5kYW50cy50b0xvY2FsZVN0cmluZygpfSlcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAge25vZGUuZXhwYW5kZWQgJiYgKFxuICAgICAgICAgIDx1bCBzdHlsZT17eyBtYXJnaW5CbG9ja0VuZDogXCIwXCIsIG1hcmdpbklubGluZVN0YXJ0OiBcIjUuNXB4XCIgfX0+XG4gICAgICAgICAgICB7bm9kZS5sb2FkaW5nID8gKFxuICAgICAgICAgICAgICA8RXVpTG9hZGluZ1NwaW5uZXJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLCBsZWZ0OiBcIjEzcHhcIiwgdG9wOiBcIjVweFwiIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICBub2RlLmxvYWRlZENoaWxkcmVuLm1hcCgoY2hpbGQsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyTGVmdDogZHJhd0xpbmUgPyBcIjFweCBkb3R0ZWQgYmxhY2tcIiA6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IFwiMXJlbVwiLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cmVuZGVyVHJlZU5vZGUoXG4gICAgICAgICAgICAgICAgICAgICAgaGllcmFyY2h5LFxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgIGlkeCA8IG5vZGUubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0+XG4gICAgICA8RXVpQ2FyZFxuICAgICAgICB0aXRsZT17XCJcIn1cbiAgICAgICAgbGF5b3V0PXtcImhvcml6b250YWxcIn1cbiAgICAgICAgc3R5bGU9e3sgb3ZlcmZsb3dYOiBcImF1dG9cIiwgb3ZlcmZsb3dZOiBcImhpZGRlblwiIH19XG4gICAgICA+XG4gICAgICAgIHtpc1N1Y2Nlc3NIaWVyYXJjaHkgJiYgaGllcmFyY2h5ICE9IHVuZGVmaW5lZCA/IChcbiAgICAgICAgICA8RXVpVGV4dCBzdHlsZT17eyB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiIH19PlxuICAgICAgICAgICAge1wiIFwifVxuICAgICAgICAgICAgey8qIC8vIFRPRE86IERvZXMgbm90IGdldCBkaXNwbGF5ZWQgY29ycmVjdGx5IG9uIHN0b3J5Ym9vayBtYWluIHBhZ2UgKi99XG4gICAgICAgICAgICB7aGllcmFyY2h5LnJvb3RzLm1hcCgocm9vdE5vZGUsIGlkeCkgPT5cbiAgICAgICAgICAgICAgcmVuZGVyVHJlZU5vZGUoXG4gICAgICAgICAgICAgICAgaGllcmFyY2h5LFxuICAgICAgICAgICAgICAgIHJvb3ROb2RlLFxuICAgICAgICAgICAgICAgIGlkeCA8IGhpZXJhcmNoeS5yb290cy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxFdWlMb2FkaW5nU3Bpbm5lciAvPlxuICAgICAgICApfVxuICAgICAgPC9FdWlDYXJkPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIaWVyYXJjaHkoXG4gIHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEhpZXJhcmNoeVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkSGllcmFyY2h5V2lkZ2V0KHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiIGdsb2JhbFN0eWxlcz17ZmFsc2V9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxIaWVyYXJjaHlXaWRnZXRcbiAgICAgICAgICBhcGlVcmw9e3Byb3BzLmFwaVVybH1cbiAgICAgICAgICBhcGlLZXk9e3Byb3BzLmFwaUtleX1cbiAgICAgICAgICBiYWNrZW5kVHlwZT17cHJvcHMuYmFja2VuZFR5cGV9XG4gICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzPXtwcm9wcy5pbmNsdWRlT2Jzb2xldGVFbnRpdGllc31cbiAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICBwcmVmZXJyZWRSb290cz17cHJvcHMucHJlZmVycmVkUm9vdHN9XG4gICAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlcz17cHJvcHMua2VlcEV4cGFuc2lvblN0YXRlc31cbiAgICAgICAgICBzaG93U2libGluZ3NPbkluaXQ9e3Byb3BzLnNob3dTaWJsaW5nc09uSW5pdH1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgSGllcmFyY2h5V2lkZ2V0LCBjcmVhdGVIaWVyYXJjaHkgfTtcbiIsICJpbXBvcnQgYXhpb3MsIHsgQXhpb3NJbnN0YW5jZSwgQXhpb3NSZXF1ZXN0Q29uZmlnIH0gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQge1xuICBCdWlsZEhpZXJhcmNoeVByb3BzLFxuICBIaWVyYXJjaHlCdWlsZGVyLFxuICBIaWVyYXJjaHlJcmlQcm9wLFxuICBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wcyxcbn0gZnJvbSBcIi4vSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHtcbiAgSGllcmFyY2h5LFxuICBQYXJlbnRDaGlsZFJlbGF0aW9uLFxuICBUcmVlTm9kZSxcbn0gZnJvbSBcIi4uL21vZGVsL2ludGVyZmFjZXMvSGllcmFyY2h5XCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IHsgRW50aXR5RGF0YSB9IGZyb20gXCIuLi9hcHAvdHlwZXNcIjtcblxudHlwZSBUb3BDb25jZXB0ID0ge1xuICB1cmk6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHRvcENvbmNlcHRPZj86IHN0cmluZztcbiAgaGFzQ2hpbGRyZW46IGJvb2xlYW47XG4gIG5vdGF0aW9uPzogc3RyaW5nO1xufTtcblxudHlwZSBMYWJlbEFuZFVyaUFuZENoaWxkcmVuID0ge1xuICB1cmk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaGFzQ2hpbGRyZW46IGJvb2xlYW47XG4gIG5vdGF0aW9uPzogc3RyaW5nO1xufTtcblxudHlwZSBIaWVyYXJjaHlSZXN1bHQgPSB7XG4gIHVyaTogc3RyaW5nO1xuICBwcmVmTGFiZWw6IHN0cmluZztcbiAgdG9wPzogc3RyaW5nO1xuICBicm9hZGVyPzogc3RyaW5nW107XG4gIG5hcnJvd2VyPzogTGFiZWxBbmRVcmlBbmRDaGlsZHJlbltdO1xufTtcblxudHlwZSBQcmVmQW5kVXJpQW5kQ2hpbGRyZW4gPSB7XG4gIHVyaTogc3RyaW5nO1xuICBwcmVmTGFiZWw6IHN0cmluZztcbiAgaGFzQ2hpbGRyZW46IGJvb2xlYW47XG4gIG5vdGF0aW9uPzogc3RyaW5nO1xufTtcblxuYWJzdHJhY3QgY2xhc3MgU2tvc0VudGl0eURhdGFCdWlsZGVyIHtcbiAgc3RhdGljIGZyb21Ub3BDb25jZXB0KG9iajogVG9wQ29uY2VwdCk6IEVudGl0eURhdGEge1xuICAgIHJldHVybiB7XG4gICAgICBpcmk6IG9iai51cmksXG4gICAgICBsYWJlbDogb2JqLmxhYmVsLFxuICAgICAgaGFzQ2hpbGRyZW46IG9iai5oYXNDaGlsZHJlbixcbiAgICAgIHBhcmVudHM6IFtdLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZnJvbUhpZXJhcmNoeVJlc3VsdChvYmo6IEhpZXJhcmNoeVJlc3VsdCk6IEVudGl0eURhdGEge1xuICAgIHJldHVybiB7XG4gICAgICBpcmk6IG9iai51cmksXG4gICAgICBsYWJlbDogb2JqLnByZWZMYWJlbCxcbiAgICAgIGhhc0NoaWxkcmVuOiBvYmoubmFycm93ZXIgIT0gdW5kZWZpbmVkICYmIG9iai5uYXJyb3dlci5sZW5ndGggPiAwLFxuICAgICAgcGFyZW50czogUmVpZmllZC5mcm9tSnNvbihvYmouYnJvYWRlciksXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUHJlZkFuZFVyaUFuZENoaWxkcmVuKFxuICAgIG9iajogUHJlZkFuZFVyaUFuZENoaWxkcmVuLFxuICAgIHBhcmVudHM/OiBzdHJpbmdbXVxuICApOiBFbnRpdHlEYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXJpOiBvYmoudXJpLFxuICAgICAgbGFiZWw6IG9iai5wcmVmTGFiZWwsXG4gICAgICBoYXNDaGlsZHJlbjogb2JqLmhhc0NoaWxkcmVuLFxuICAgICAgcGFyZW50czogUmVpZmllZC5mcm9tSnNvbihwYXJlbnRzKSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZyb21MYWJlbEFuZFVyaUFuZENoaWxkcmVuKFxuICAgIG9iajogTGFiZWxBbmRVcmlBbmRDaGlsZHJlbixcbiAgICBwYXJlbnRzPzogc3RyaW5nW11cbiAgKTogRW50aXR5RGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlyaTogb2JqLnVyaSxcbiAgICAgIGxhYmVsOiBvYmoubGFiZWwsXG4gICAgICBoYXNDaGlsZHJlbjogb2JqLmhhc0NoaWxkcmVuLFxuICAgICAgcGFyZW50czogUmVpZmllZC5mcm9tSnNvbihwYXJlbnRzKSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTa29zQXBpIGltcGxlbWVudHMgSGllcmFyY2h5QnVpbGRlciB7XG4gIHByaXZhdGUgYXhpb3NJbnN0YW5jZTogQXhpb3NJbnN0YW5jZTtcblxuICBjb25zdHJ1Y3RvcihhcGk6IHN0cmluZykge1xuICAgIHRoaXMuYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgICBiYXNlVVJMOiBhcGksXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIC8vIENvbnRlbnRfVHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsIC8vIGxlYWRzIHRvIHByZWZsaWdodCBlcnJvclxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbWFrZUNhbGwoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWc8bmV2ZXI+IHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldCh1cmwsIGNvbmZpZykpLmRhdGE7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYnVpbGRIaWVyYXJjaHlXaXRoSXJpKFxuICAgIHByb3BzOiBCdWlsZEhpZXJhcmNoeVByb3BzICYgSGllcmFyY2h5SXJpUHJvcFxuICApOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuICAgIGNvbnN0IHsgaXJpLCBvbnRvbG9neUlkLCBzaG93U2libGluZ3NPbkluaXQgfSA9IHByb3BzO1xuXG4gICAgaWYgKCFvbnRvbG9neUlkKVxuICAgICAgdGhyb3cgRXJyb3IoXCJvbnRvbG9neUlkIGhhcyB0byBiZSBzcGVjaWZpZWQgZm9yIFNLT1MgQVBJLlwiKTtcblxuICAgIGNvbnN0IHJvb3RFbnRpdGllczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPiA9IG5ldyBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICBQYXJlbnRDaGlsZFJlbGF0aW9uW11cbiAgICA+KCk7XG4gICAgY29uc3QgZW50aXRpZXNEYXRhOiBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhPiA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhPigpO1xuICAgIGNvbnN0IGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBvbkluaXRpYWxQYXRoOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBvbmx5IHVzZWQgaWYgc2hvd1NpYmxpbmdzT25Jbml0ID09IGZhbHNlXG5cbiAgICBpZiAoaXJpKSB7XG4gICAgICBjb25zdCBicm9hZGVyVHJhbnNpdGl2ZTogSGllcmFyY2h5UmVzdWx0W10gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgICBgLyR7b250b2xvZ3lJZH0vaGllcmFyY2h5YCxcbiAgICAgICAgeyBwYXJhbXM6IHsgdXJpOiBpcmksIGxhbmc6IFwiZW5cIiwgZm9ybWF0OiBcImFwcGxpY2F0aW9uL2pzb25cIiB9IH1cbiAgICAgICkudGhlbigob2JqKSA9PlxuICAgICAgICBPYmplY3Qua2V5cyhvYmpbXCJicm9hZGVyVHJhbnNpdGl2ZVwiXSkubWFwKFxuICAgICAgICAgIChrZXkpID0+IG9ialtcImJyb2FkZXJUcmFuc2l0aXZlXCJdW2tleV1cbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgLy8gc3RvcmVzIGFsbCBlbnRpdGllcyBhcHBlYXJpbmcgaW4gYnJvYWRlclRyYW5zaXRpdmVcbiAgICAgIC8vY29uc3QgZW50aXRpZXM6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+ID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+KClcblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIGJyb2FkZXJUcmFuc2l0aXZlKSB7XG4gICAgICAgIGNvbnN0IG5vZGVEYXRhOiBFbnRpdHlEYXRhID1cbiAgICAgICAgICBTa29zRW50aXR5RGF0YUJ1aWxkZXIuZnJvbUhpZXJhcmNoeVJlc3VsdChub2RlKTtcblxuICAgICAgICBlbnRpdGllc0RhdGEuc2V0KG5vZGVEYXRhLmlyaSwgbm9kZURhdGEpO1xuICAgICAgICBpZiAobm9kZS50b3ApIHJvb3RFbnRpdGllcy5wdXNoKG5vZGVEYXRhLmlyaSk7XG5cbiAgICAgICAgaWYgKCFzaG93U2libGluZ3NPbkluaXQpIG9uSW5pdGlhbFBhdGguYWRkKG5vZGVEYXRhLmlyaSk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgYnJvYWRlclRyYW5zaXRpdmUpIHtcbiAgICAgICAgaWYgKG5vZGUubmFycm93ZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRyZW46IEVudGl0eURhdGFbXSA9IFtdO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2Ygbm9kZS5uYXJyb3dlcikge1xuICAgICAgICAgICAgbGV0IGNoaWxkTm9kZURhdGEgPSBlbnRpdGllc0RhdGEuZ2V0KGNoaWxkTm9kZS51cmkpO1xuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZURhdGEgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZURhdGEgPSBTa29zRW50aXR5RGF0YUJ1aWxkZXIuZnJvbUxhYmVsQW5kVXJpQW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgY2hpbGROb2RlLFxuICAgICAgICAgICAgICAgIFtub2RlLnVyaV1cbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBlbnRpdGllc0RhdGEuc2V0KGNoaWxkTm9kZURhdGEuaXJpLCBjaGlsZE5vZGVEYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgaWYgKCFjaGlsZE5vZGVEYXRhLnBhcmVudHMubWFwKChyKSA9PiByLnZhbHVlKS5pbmNsdWRlcyhub2RlLnVyaSkpXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZURhdGEucGFyZW50cykge1xuICAgICAgICAgICAgICAgICAgY2hpbGROb2RlRGF0YS5wYXJlbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIC4uLlJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihub2RlLnVyaSlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZE5vZGVEYXRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGlsZHJlbi5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgKGEubGFiZWwgfHwgYS5pcmkpLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCB8fCBiLmlyaSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KFxuICAgICAgICAgICAgbm9kZS51cmksXG4gICAgICAgICAgICBjaGlsZHJlbi5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgY2hpbGRJcmk6IGMuaXJpIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50LmFkZChub2RlLnVyaSk7IC8vIGluIHNrb3MsIGFsbCBjaGlsZHJlbiBhcmUgbG9hZGVkIGlmIGFueSBhcmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0b3Bjb25jZXB0czogVG9wQ29uY2VwdFtdID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChcbiAgICAgICAgYC8ke29udG9sb2d5SWR9L3RvcENvbmNlcHRzYCxcbiAgICAgICAgeyBwYXJhbXM6IHsgbGFuZzogXCJlblwiLCBmb3JtYXQ6IFwiYXBwbGljYXRpb24vanNvblwiIH0gfVxuICAgICAgKS50aGVuKChvYmopID0+IG9ialtcInRvcGNvbmNlcHRzXCJdKTtcblxuICAgICAgZm9yIChjb25zdCBjb25jZXB0IG9mIHRvcGNvbmNlcHRzKSB7XG4gICAgICAgIHJvb3RFbnRpdGllcy5wdXNoKGNvbmNlcHQudXJpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVUcmVlTm9kZShcbiAgICAgIGVudGl0eURhdGE6IEVudGl0eURhdGEsXG4gICAgICBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPlxuICAgICk6IFRyZWVOb2RlIHtcbiAgICAgIGN5Y2xlQ2hlY2suYWRkKGVudGl0eURhdGEuaXJpKTsgLy8gYWRkIGN1cnJlbnQgZW50aXR5IHRvIGN5Y2xlIGNoZWNrIHNldFxuXG4gICAgICBjb25zdCBub2RlID0gbmV3IFRyZWVOb2RlKGVudGl0eURhdGEpO1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnRDaGlsZFJlbGF0aW9ucy5nZXQoZW50aXR5RGF0YS5pcmkpIHx8IFtdO1xuXG4gICAgICBpZiAoIXNob3dTaWJsaW5nc09uSW5pdCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgICAgLy8gY3ljbGljIHRyZWUsIHNraXAgY3ljbGVcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEN5Y2xpYyB0cmVlIGF0IGVudGl0eSBcIiR7Y2hpbGQuY2hpbGRJcml9XCIuYCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjaGlsZERhdGEgPSBlbnRpdGllc0RhdGEuZ2V0KGNoaWxkLmNoaWxkSXJpKTtcbiAgICAgICAgICBpZiAoY2hpbGREYXRhICE9IHVuZGVmaW5lZCAmJiBvbkluaXRpYWxQYXRoLmhhcyhjaGlsZC5jaGlsZElyaSkpIHtcbiAgICAgICAgICAgIG5vZGUuYWRkQ2hpbGQoY3JlYXRlVHJlZU5vZGUoY2hpbGREYXRhLCBjeWNsZUNoZWNrKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgICAgLy8gY3ljbGljIHRyZWUsIHNraXAgY3ljbGVcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEN5Y2xpYyB0cmVlIGF0IGVudGl0eSBcIiR7Y2hpbGQuY2hpbGRJcml9XCIuYCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjaGlsZERhdGEgPSBlbnRpdGllc0RhdGEuZ2V0KGNoaWxkLmNoaWxkSXJpKTtcbiAgICAgICAgICBpZiAoY2hpbGREYXRhICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgIG5vZGUuYWRkQ2hpbGQoY3JlYXRlVHJlZU5vZGUoY2hpbGREYXRhLCBjeWNsZUNoZWNrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoID4gMCkgbm9kZS5leHBhbmRlZCA9IHRydWU7XG5cbiAgICAgIGN5Y2xlQ2hlY2suZGVsZXRlKGVudGl0eURhdGEuaXJpKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGNvbnN0IGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIENvbnRhaW5zIGlyaXMgb2YgYWxsIGVudGl0aWVzIHRoYXQgaGF2ZSBvY2N1cnJlZCB3aXRoaW4gdGhlIGN1cnJlbnQgcmVjdXJzaW9uIGJyYW5jaC4gSXMgdXNlZCB0byBjaGVjayBmb3IgY3ljbGVzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgY29uc3Qgcm9vdE5vZGVzOiBUcmVlTm9kZVtdID0gcm9vdEVudGl0aWVzXG4gICAgICAubWFwKChyb290RW50aXR5KSA9PlxuICAgICAgICBjcmVhdGVUcmVlTm9kZShlbnRpdGllc0RhdGEuZ2V0KHJvb3RFbnRpdHkpISwgY3ljbGVDaGVjaylcbiAgICAgIClcbiAgICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgICAoYS5lbnRpdHlEYXRhLmxhYmVsIHx8IGEuZW50aXR5RGF0YS5pcmkpLmxvY2FsZUNvbXBhcmUoXG4gICAgICAgICAgYi5lbnRpdHlEYXRhLmxhYmVsIHx8IGIuZW50aXR5RGF0YS5pcmlcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBhbGxDaGlsZHJlblByZXNlbnQsXG4gICAgICByb290czogcm9vdE5vZGVzLFxuICAgICAgYXBpOiBuZXcgU2tvc0FwaSh0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0VXJpKCkpLFxuICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgIG1haW5FbnRpdHlJcmk6IGlyaSxcbiAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IHByb3BzLmtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEhpZXJhcmNoeUNoaWxkcmVuKFxuICAgIHByb3BzOiBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wc1xuICApOiBQcm9taXNlPEVudGl0eURhdGFbXT4ge1xuICAgIGNvbnN0IHsgbm9kZVRvRXhwYW5kLCBvbnRvbG9neUlkIH0gPSBwcm9wcztcblxuICAgIGNvbnN0IG5hcnJvd2VyOiBQcmVmQW5kVXJpQW5kQ2hpbGRyZW5bXSA9IChcbiAgICAgIGF3YWl0IHRoaXMubWFrZUNhbGwoYC8ke29udG9sb2d5SWR9L2NoaWxkcmVuYCwge1xuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICB1cmk6IG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSxcbiAgICAgICAgICBsYW5nOiBcImVuXCIsXG4gICAgICAgICAgZm9ybWF0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKVtcIm5hcnJvd2VyXCJdO1xuXG4gICAgcmV0dXJuIG5hcnJvd2VyLm1hcCgob2JqKSA9PlxuICAgICAgU2tvc0VudGl0eURhdGFCdWlsZGVyLmZyb21QcmVmQW5kVXJpQW5kQ2hpbGRyZW4ob2JqLCBbXG4gICAgICAgIG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSxcbiAgICAgIF0pXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIEJ1aWxkSGllcmFyY2h5UHJvcHMsXG4gIEhpZXJhcmNoeUJ1aWxkZXIsXG4gIEhpZXJhcmNoeUlyaVByb3AsXG4gIExvYWRIaWVyYXJjaHlDaGlsZHJlblByb3BzLFxufSBmcm9tIFwiLi9IaWVyYXJjaHlCdWlsZGVyXCI7XG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NJbnN0YW5jZSwgQXhpb3NSZXF1ZXN0Q29uZmlnIH0gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQge1xuICBIaWVyYXJjaHksXG4gIFBhcmVudENoaWxkUmVsYXRpb24sXG4gIFRyZWVOb2RlLFxufSBmcm9tIFwiLi4vbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHlcIjtcbmltcG9ydCB7IHBsdXJhbGl6ZVR5cGUgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IEVudGl0eURhdGEgfSBmcm9tIFwiLi4vYXBwL3R5cGVzXCI7XG5cbnR5cGUgSGllcmFyY2h5Tm9kZSA9IHtcbiAgcHJlZkxhYmVsOiBzdHJpbmc7XG4gIGhhc0NoaWxkcmVuOiBib29sZWFuO1xuICBjaGlsZHJlbjogSGllcmFyY2h5Tm9kZVtdO1xuICBvYnNvbGV0ZTogYm9vbGVhbjsgLy8gVE9ETzogdXNlIHRoaXMgdG8gZW5hYmxlIHNob3dpbmcgb2Jzb2xldGVUZXJtcz9cbiAgW1wiQGlkXCJdOiBzdHJpbmc7XG4gIFtcIkB0eXBlXCJdOiBzdHJpbmc7XG4gIC8vIGxpbmtzOiBvYmplY3QgLSBub3QgbmVlZGVkIGhlcmVcbiAgW1wiQGNvbnRleHRcIl06IHtcbiAgICBbXCJAdm9jYWJcIl06IHN0cmluZztcbiAgICBwcmVmTGFiZWw6IHN0cmluZztcbiAgICBvYnNvbGV0ZTogc3RyaW5nO1xuICAgIFtcIkBsYW5ndWFnZVwiXTogc3RyaW5nO1xuICB9O1xufTtcblxuZnVuY3Rpb24gSGllcmFyY2h5Tm9kZVRvRW50aXR5RGF0YShoaWVyYXJjaHlOb2RlOiBIaWVyYXJjaHlOb2RlKTogRW50aXR5RGF0YSB7XG4gIHJldHVybiB7XG4gICAgaXJpOiBoaWVyYXJjaHlOb2RlW1wiQGlkXCJdLFxuICAgIGxhYmVsOiBoaWVyYXJjaHlOb2RlW1wicHJlZkxhYmVsXCJdLFxuICAgIGhhc0NoaWxkcmVuOiBoaWVyYXJjaHlOb2RlW1wiaGFzQ2hpbGRyZW5cIl0sXG4gICAgcGFyZW50czogW10sXG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBPbnRvUG9ydGFsQXBpIGltcGxlbWVudHMgSGllcmFyY2h5QnVpbGRlciB7XG4gIHByaXZhdGUgYXhpb3NJbnN0YW5jZTogQXhpb3NJbnN0YW5jZTtcbiAgcHJpdmF0ZSBhcGlLZXk6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihhcGk6IHN0cmluZywgYXBpS2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLmF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgYmFzZVVSTDogYXBpLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAvLyBDb250ZW50X1R5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLCAvLyBsZWFkcyB0byBwcmVmbGlnaHQgZXJyb3JcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5hcGlLZXkgPSBhcGlLZXk7XG4gICAgdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgoY29uZmlnKSA9PiB7XG4gICAgICBjb25maWcucGFyYW1zID0gY29uZmlnLnBhcmFtcyB8fCB7fTtcblxuICAgICAgLy8gZGVmYXVsdCBwYXJhbXNcbiAgICAgIGNvbmZpZy5wYXJhbXNbXCJhcGlrZXlcIl0gPSB0aGlzLmFwaUtleTtcbiAgICAgIGNvbmZpZy5wYXJhbXNbXCJmb3JtYXRcIl0gPSBcImpzb25cIjtcblxuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbWFrZUNhbGwodXJsOiBzdHJpbmcsIGNvbmZpZz86IEF4aW9zUmVxdWVzdENvbmZpZzxuZXZlcj4pIHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQodXJsLCBjb25maWcpKS5kYXRhO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkSGllcmFyY2h5V2l0aElyaShcbiAgICBwcm9wczogQnVpbGRIaWVyYXJjaHlQcm9wcyAmIEhpZXJhcmNoeUlyaVByb3BcbiAgKTogUHJvbWlzZTxIaWVyYXJjaHk+IHtcbiAgICBjb25zdCB7IGlyaSwgb250b2xvZ3lJZCwgZW50aXR5VHlwZSwgc2hvd1NpYmxpbmdzT25Jbml0IH0gPSBwcm9wcztcblxuICAgIGlmICghb250b2xvZ3lJZClcbiAgICAgIHRocm93IEVycm9yKFwib250b2xvZ3lJZCBoYXMgdG8gYmUgc3BlY2lmaWVkIGZvciBPbnRvUG9ydGFsIEFQSS5cIik7XG4gICAgaWYgKCFlbnRpdHlUeXBlKVxuICAgICAgdGhyb3cgRXJyb3IoXCJlbnRpdHlUeXBlIGhhcyB0byBiZSBzcGVjaWZpZWQgZm9yIE9udG9Qb3J0YWwgQVBJLlwiKTtcblxuICAgIGNvbnN0IHJvb3RFbnRpdGllczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+ID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+KCk7XG4gICAgY29uc3QgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4gPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgUGFyZW50Q2hpbGRSZWxhdGlvbltdXG4gICAgPigpO1xuICAgIGNvbnN0IGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBvbkluaXRpYWxQYXRoOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBvbmx5IHVzZWQgaWYgc2hvd1NpYmxpbmdzT25Jbml0ID09IGZhbHNlXG5cbiAgICBmdW5jdGlvbiBidWlsZFJlbGF0aW9ucyhjdXJyTm9kZTogSGllcmFyY2h5Tm9kZSkge1xuICAgICAgZW50aXRpZXNEYXRhLnNldChjdXJyTm9kZVtcIkBpZFwiXSwgSGllcmFyY2h5Tm9kZVRvRW50aXR5RGF0YShjdXJyTm9kZSkpO1xuICAgICAgaWYgKGN1cnJOb2RlLmhhc0NoaWxkcmVuICYmIGN1cnJOb2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KFxuICAgICAgICAgIGN1cnJOb2RlW1wiQGlkXCJdLFxuICAgICAgICAgIGN1cnJOb2RlLmNoaWxkcmVuLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgY2hpbGRJcmk6IGNbXCJAaWRcIl0gfTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGFsbENoaWxkcmVuUHJlc2VudC5hZGQoY3Vyck5vZGVbXCJAaWRcIl0pO1xuICAgICAgICBvbkluaXRpYWxQYXRoLmFkZChjdXJyTm9kZVtcIkBpZFwiXSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjdXJyTm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgIGJ1aWxkUmVsYXRpb25zKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpcmkpIHtcbiAgICAgIC8vIFRPRE86IHByb3BlcnR5IHdoaWNoIGlzIGNoaWxkIG9mIG11bHRpcGxlIHByb3BlcnRpZXMgb25seSBpcyByZXR1cm5lZCBpbiBvbmUgcGFyZW50IGluIC90cmVlIHF1ZXJ5ICgtPiBkbyBpdCByaWdodCBtYW51YWxseT8pIChlLmcuOiBodHRwOi8vc3dlZXRvbnRvbG9neS5uZXQvcmVsYVRpbWUvaGFzTkhUaW1lIC0+IGhhcyBtb3JlIHRoYW4gb25lIHBhcmVudCwgYnV0IGlzIG9ubHkgc2hvd24gaW4gb25lIHBhcmVudCBpbiAvdHJlZSlcbiAgICAgIGNvbnN0IGFwaV90cmVlOiBIaWVyYXJjaHlOb2RlW10gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgICBgL29udG9sb2dpZXMvJHtvbnRvbG9neUlkLnRvVXBwZXJDYXNlKCl9LyR7cGx1cmFsaXplVHlwZShcbiAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlyaSl9L3RyZWVgLFxuICAgICAgICB7IHBhcmFtczogeyBpbmNsdWRlOiBcIkBpZCxwcmVmTGFiZWwsaGFzQ2hpbGRyZW4sY2hpbGRyZW5cIiB9IH1cbiAgICAgICk7XG5cbiAgICAgIGZvciAoY29uc3Qgcm9vdE5vZGUgb2YgYXBpX3RyZWUpIHtcbiAgICAgICAgcm9vdEVudGl0aWVzLnB1c2gocm9vdE5vZGVbXCJAaWRcIl0pO1xuICAgICAgICBvbkluaXRpYWxQYXRoLmFkZChyb290Tm9kZVtcIkBpZFwiXSk7XG4gICAgICAgIGJ1aWxkUmVsYXRpb25zKHJvb3ROb2RlKTtcbiAgICAgIH1cbiAgICAgIG9uSW5pdGlhbFBhdGguYWRkKGlyaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJvb3RzOiBIaWVyYXJjaHlOb2RlW10gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgICBgL29udG9sb2dpZXMvJHtvbnRvbG9neUlkLnRvVXBwZXJDYXNlKCl9LyR7cGx1cmFsaXplVHlwZShcbiAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICl9L3Jvb3RzYCxcbiAgICAgICAgeyBwYXJhbXM6IHsgaW5jbHVkZTogXCJAaWQscHJlZkxhYmVsLGhhc0NoaWxkcmVuXCIgfSB9XG4gICAgICApO1xuXG4gICAgICBmb3IgKGNvbnN0IHJvb3ROb2RlIG9mIHJvb3RzKSB7XG4gICAgICAgIHJvb3RFbnRpdGllcy5wdXNoKHJvb3ROb2RlW1wiQGlkXCJdKTtcbiAgICAgICAgb25Jbml0aWFsUGF0aC5hZGQocm9vdE5vZGVbXCJAaWRcIl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVRyZWVOb2RlKFxuICAgICAgZW50aXR5RGF0YTogRW50aXR5RGF0YSxcbiAgICAgIGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+XG4gICAgKTogVHJlZU5vZGUge1xuICAgICAgY3ljbGVDaGVjay5hZGQoZW50aXR5RGF0YS5pcmkpOyAvLyBhZGQgY3VycmVudCBlbnRpdHkgdG8gY3ljbGUgY2hlY2sgc2V0XG5cbiAgICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJlZU5vZGUoZW50aXR5RGF0YSk7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkUmVsYXRpb25zLmdldChlbnRpdHlEYXRhLmlyaSkgfHwgW107XG5cbiAgICAgIGlmICghc2hvd1NpYmxpbmdzT25Jbml0KSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgICAvLyBjeWNsaWMgdHJlZSwgc2tpcCBjeWNsZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgaWYgKG9uSW5pdGlhbFBhdGguaGFzKGNoaWxkLmNoaWxkSXJpKSlcbiAgICAgICAgICAgIG5vZGUuYWRkQ2hpbGQoXG4gICAgICAgICAgICAgIGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpISwgY3ljbGVDaGVjaylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgICAvLyBjeWNsaWMgdHJlZSwgc2tpcCBjeWNsZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgbm9kZS5hZGRDaGlsZChcbiAgICAgICAgICAgIGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpISwgY3ljbGVDaGVjaylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLmxvYWRlZENoaWxkcmVuLmxlbmd0aCA+IDApIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgICBjeWNsZUNoZWNrLmRlbGV0ZShlbnRpdHlEYXRhLmlyaSk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBjb25zdCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBDb250YWlucyBpcmlzIG9mIGFsbCBlbnRpdGllcyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBicmFuY2guIElzIHVzZWQgdG8gY2hlY2sgZm9yIGN5Y2xlcy5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIGNvbnN0IHJvb3ROb2RlczogVHJlZU5vZGVbXSA9IHJvb3RFbnRpdGllc1xuICAgICAgLm1hcCgocm9vdEVudGl0eSkgPT5cbiAgICAgICAgY3JlYXRlVHJlZU5vZGUoZW50aXRpZXNEYXRhLmdldChyb290RW50aXR5KSEsIGN5Y2xlQ2hlY2spXG4gICAgICApXG4gICAgICAuc29ydCgoYSwgYikgPT5cbiAgICAgICAgKGEuZW50aXR5RGF0YS5sYWJlbCB8fCBhLmVudGl0eURhdGEuaXJpKS5sb2NhbGVDb21wYXJlKFxuICAgICAgICAgIGIuZW50aXR5RGF0YS5sYWJlbCB8fCBiLmVudGl0eURhdGEuaXJpXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICByZXR1cm4gbmV3IEhpZXJhcmNoeSh7XG4gICAgICBwYXJlbnRDaGlsZFJlbGF0aW9uczogcGFyZW50Q2hpbGRSZWxhdGlvbnMsXG4gICAgICBlbnRpdGllc0RhdGE6IGVudGl0aWVzRGF0YSxcbiAgICAgIGFsbENoaWxkcmVuUHJlc2VudDogYWxsQ2hpbGRyZW5QcmVzZW50LFxuICAgICAgcm9vdHM6IHJvb3ROb2RlcyxcbiAgICAgIGFwaTogbmV3IE9udG9Qb3J0YWxBcGkodGhpcy5heGlvc0luc3RhbmNlLmdldFVyaSgpLCB0aGlzLmFwaUtleSksXG4gICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgbWFpbkVudGl0eUlyaTogaXJpLFxuICAgICAga2VlcEV4cGFuc2lvblN0YXRlczogcHJvcHMua2VlcEV4cGFuc2lvblN0YXRlcyxcbiAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEhpZXJhcmNoeUNoaWxkcmVuKFxuICAgIHByb3BzOiBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wc1xuICApOiBQcm9taXNlPEVudGl0eURhdGFbXT4ge1xuICAgIGNvbnN0IHsgbm9kZVRvRXhwYW5kLCBvbnRvbG9neUlkLCBlbnRpdHlUeXBlIH0gPSBwcm9wcztcblxuICAgIGlmIChlbnRpdHlUeXBlID09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcImVudGl0eVR5cGUgaGFzIHRvIGJlIHByb3ZpZGVkIHRvIGxvYWQgY2hpbGRyZW4gaW4gYW4gT250b1BvcnRhbCBoaWVyYXJjaHkuXCJcbiAgICAgICk7XG5cbiAgICBjb25zdCBjaGlsZHJlbjogSGllcmFyY2h5Tm9kZVtdID0gKFxuICAgICAgYXdhaXQgdGhpcy5tYWtlQ2FsbChcbiAgICAgICAgYC9vbnRvbG9naWVzLyR7b250b2xvZ3lJZC50b1VwcGVyQ2FzZSgpfS8ke3BsdXJhbGl6ZVR5cGUoXG4gICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApfS8ke2VuY29kZVVSSUNvbXBvbmVudChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpfS9jaGlsZHJlbmAsXG4gICAgICAgIHsgcGFyYW1zOiB7IGluY2x1ZGU6IFwiQGlkLHByZWZMYWJlbCxoYXNDaGlsZHJlblwiIH0gfVxuICAgICAgKVxuICAgIClbXCJjb2xsZWN0aW9uXCJdO1xuXG4gICAgcmV0dXJuIGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IEhpZXJhcmNoeU5vZGVUb0VudGl0eURhdGEoY2hpbGQpKTtcbiAgfVxufVxuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnkgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBpc0VudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQocHJvcHM6IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5LCBjbGFzc05hbWUgfSA9XG4gICAgcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgZXJyb3IgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXG4gICAgICBcImFsdGVybmF0aXZlTmFtZVRhYlwiLFxuICAgICAgYXBpLFxuICAgICAgcGFyYW1ldGVyLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICAgIGlyaSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICB1c2VMZWdhY3ksXG4gICAgXSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldEVudGl0eU9iamVjdChcbiAgICAgICAgaXJpLFxuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgIHVzZUxlZ2FjeVxuICAgICAgKTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uXG4gICAgICBzeW5vbnltcz17XG4gICAgICAgIGRhdGFcbiAgICAgICAgICA/IGlzRW50aXR5KGRhdGEpXG4gICAgICAgICAgICA/IGRhdGEuZ2V0U3lub255bXMoKS5tYXAoKHN5bm9ueW0pID0+IHN5bm9ueW0udmFsdWUpXG4gICAgICAgICAgICA6IFtdXG4gICAgICAgICAgOiBbXVxuICAgICAgfVxuICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIoXG4gIHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEFsdGVybmF0aXZlTmFtZVRhYldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0KHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiIGdsb2JhbFN0eWxlcz17ZmFsc2V9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRcbiAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0LCBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IENyb3NzUmVmV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBpc0VudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9Dcm9zc1JlZlRhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL1JlaWZpZWRcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIENyb3NzUmVmVGFiV2lkZ2V0KHByb3BzOiBDcm9zc1JlZldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5LCBjbGFzc05hbWUgfSA9XG4gICAgcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgZXJyb3IgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXCJjcm9zc1JlZlRhYlwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KFxuICAgICAgICBpcmksXG4gICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgdXNlTGVnYWN5XG4gICAgICApO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxDcm9zc1JlZlRhYlByZXNlbnRhdGlvblxuICAgICAgY3Jvc3NyZWZzPXtcbiAgICAgICAgZGF0YVxuICAgICAgICAgID8gaXNFbnRpdHkoZGF0YSlcbiAgICAgICAgICAgID8gUmVpZmllZC5mcm9tSnNvbihkYXRhLmdldENyb3NzUmVmZXJlbmNlcygpKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBbXVxuICAgICAgICAgIDogW11cbiAgICAgIH1cbiAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxuICAgICAgZXJyb3I9e2Vycm9yfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgLz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ3Jvc3NSZWZUYWIoXG4gIHByb3BzOiBDcm9zc1JlZldpZGdldFByb3BzLFxuICBjb250YWluZXI6IEVsZW1lbnQsXG4gIGNhbGxiYWNrPzogKCkgPT4gdm9pZFxuKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkQ3Jvc3NSZWZUYWJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZENyb3NzUmVmVGFiV2lkZ2V0KHByb3BzOiBDcm9zc1JlZldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCIgZ2xvYmFsU3R5bGVzPXtmYWxzZX0+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPENyb3NzUmVmVGFiV2lkZ2V0XG4gICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgIGNsYXNzTmFtZT17cHJvcHMuY2xhc3NOYW1lfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IENyb3NzUmVmVGFiV2lkZ2V0LCBjcmVhdGVDcm9zc1JlZlRhYiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgRXVpUHJvdmlkZXIgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgVGl0bGVXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGlzT250b2xvZ3kgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IFRpdGxlUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGl0bGVQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIFRpdGxlV2lkZ2V0KHByb3BzOiBUaXRsZVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpcmksXG4gICAgb250b2xvZ3lJZCxcbiAgICBhcGksXG4gICAgdGl0bGVUZXh0LFxuICAgIHRoaW5nVHlwZSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5LFxuICAgIGRlZmF1bHRWYWx1ZSxcbiAgICBjbGFzc05hbWUsXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nLCBpc1N1Y2Nlc3MsIGlzRXJyb3IsIGVycm9yIH0gPSB1c2VRdWVyeTxUaGluZz4oXG4gICAgW1widGl0bGVEYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCB0aGluZ1R5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldFRoaW5nT2JqZWN0KFxuICAgICAgICBpcmksXG4gICAgICAgIHRoaW5nVHlwZSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB1c2VMZWdhY3lcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFRpdGxlUHJlc2VudGF0aW9uXG4gICAgICB0aXRsZT17XG4gICAgICAgIGRhdGEgPyAoaXNPbnRvbG9neShkYXRhKSA/IGRhdGEuZ2V0TmFtZSgpIDogZGF0YS5nZXRMYWJlbCgpKSA6IG51bGxcbiAgICAgIH1cbiAgICAgIHRpdGxlVGV4dD17dGl0bGVUZXh0fVxuICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxuICAgICAgZXJyb3I9e2lzRXJyb3IgPyBlcnJvciA6IG51bGx9XG4gICAgLz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGl0bGUoXG4gIHByb3BzOiBUaXRsZVdpZGdldFByb3BzLFxuICBjb250YWluZXI6IEVsZW1lbnQsXG4gIGNhbGxiYWNrPzogKCkgPT4gdm9pZFxuKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkVGl0bGVXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFRpdGxlV2lkZ2V0KHByb3BzOiBUaXRsZVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCIgZ2xvYmFsU3R5bGVzPXtmYWxzZX0+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPFRpdGxlV2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgdGhpbmdUeXBlPXtwcm9wcy50aGluZ1R5cGV9XG4gICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICB0aXRsZVRleHQ9e3Byb3BzLnRpdGxlVGV4dH1cbiAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICBkZWZhdWx0VmFsdWU9e3Byb3BzLmRlZmF1bHRWYWx1ZX1cbiAgICAgICAgICBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBUaXRsZVdpZGdldCwgY3JlYXRlVGl0bGUgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IFRpdGxlUHJlc2VudGF0aW9uUHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uL3N0eWxlL3RzNG5mZGlTdHlsZXMvdHM0bmZkaVRpdGxlU3R5bGUuY3NzXCI7XG5cbmZ1bmN0aW9uIFRpdGxlUHJlc2VudGF0aW9uKHByb3BzOiBUaXRsZVByZXNlbnRhdGlvblByb3BzKSB7XG4gIGNvbnN0IHsgdGl0bGUsIHRpdGxlVGV4dCwgaXNMb2FkaW5nLCBlcnJvciwgZGVmYXVsdFZhbHVlLCBjbGFzc05hbWUgfSA9IHByb3BzO1xuICBjb25zdCBmaW5hbENsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcInRzNG5mZGktdGl0bGUtc3R5bGVcIjtcblxuICBjb25zdCByZW5kZXJDb250ZW50ID0gKCkgPT4ge1xuICAgIGlmICh0aXRsZVRleHQpIHtcbiAgICAgIHJldHVybiA8RXVpVGV4dD57dGl0bGVUZXh0fTwvRXVpVGV4dD47XG4gICAgfVxuXG4gICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSA/IChcbiAgICAgICAgPEV1aVRleHQ+e2RlZmF1bHRWYWx1ZX08L0V1aVRleHQ+XG4gICAgICApIDogKFxuICAgICAgICA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgPyAoXG4gICAgICAgIDxFdWlUZXh0PntkZWZhdWx0VmFsdWV9PC9FdWlUZXh0PlxuICAgICAgKSA6IChcbiAgICAgICAgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJ0aXRsZVwiKX08L0V1aVRleHQ+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiA8RXVpVGV4dD57dGl0bGV9PC9FdWlUZXh0PjtcbiAgfTtcblxuICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfT57cmVuZGVyQ29udGVudCgpfTwvZGl2Pjtcbn1cblxuZXhwb3J0IHsgVGl0bGVQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBFdWlGbGV4R3JvdXAsXG4gIEV1aUZsZXhJdGVtLFxuICBFdWlMb2FkaW5nU3Bpbm5lcixcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aVRleHQsXG4gIEV1aUxpbmssXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IElyaVdpZGdldCB9IGZyb20gXCIuL0lyaVdpZGdldFwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgTWV0YWRhdGFXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQnJlYWRjcnVtYldpZGdldC9CcmVhZGNydW1iUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9UYWJXaWRnZXQvVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBEZXNjcmlwdGlvblByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0Rlc2NyaXB0aW9uV2lkZ2V0L0Rlc2NyaXB0aW9uUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBUaXRsZVByZXNlbnRhdGlvbiB9IGZyb20gXCIuL1RpdGxlV2lkZ2V0L1RpdGxlUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IEVudGl0eVR5cGVOYW1lLCBpc0VudGl0eSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7XG4gIGNyZWF0ZU1vZGVsT2JqZWN0LFxuICBnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04sXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9Nb2RlbE9iamVjdENyZWF0b3JcIjtcbmltcG9ydCB7IEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vRW50aXR5T250b0xpc3RXaWRnZXQvRW50aXR5T250b0xpc3RQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IEVudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb25cIjtcbmltcG9ydCBcIi4uLy4uLy4uL3N0eWxlL3Rzc1N0eWxlcy5jc3NcIjtcbmltcG9ydCBcIi4uLy4uLy4uL3N0eWxlL3RzNG5mZGlTdHlsZXMvdHM0bmZkaU1ldGFkYXRhU3R5bGUuY3NzXCI7XG5cbnR5cGUgTWV0YWRhdGFJbmZvID0ge1xuICBlbnRpdHk6IEVudGl0eTtcbiAgb250b0xpc3Q6IHN0cmluZ1tdO1xuICBkZWZpbmVkQnk6IHN0cmluZ1tdO1xufTtcblxuZnVuY3Rpb24gTWV0YWRhdGFXaWRnZXQocHJvcHM6IE1ldGFkYXRhV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlyaSxcbiAgICBhcGksXG4gICAgb250b2xvZ3lJZCxcbiAgICBlbnRpdHlUeXBlLFxuICAgIHBhcmFtZXRlcixcbiAgICB1c2VMZWdhY3ksXG4gICAgb25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgaGllcmFyY2h5VGFiLFxuICAgIGNyb3NzUmVmVGFiLFxuICAgIHRlcm1pbm9sb2d5SW5mb1RhYixcbiAgICBhbHROYW1lc1RhYixcbiAgICB0ZXJtTGluayxcbiAgICBjbGFzc05hbWUsXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuICBjb25zdCBmaW5hbENsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcInRzNG5mZGktbWV0YWRhdGEtc3R5bGVcIjtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNTdWNjZXNzLCBpc0Vycm9yLCBlcnJvciB9ID0gdXNlUXVlcnk8TWV0YWRhdGFJbmZvPihcbiAgICBbXCJtZXRhZGF0YVwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBlbnRpdHk6IEVudGl0eSwgb250b0xpc3Q6IHN0cmluZ1tdLCBkZWZpbmVkQnk6IHN0cmluZ1tdO1xuICAgICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgICBjb25zdCBlbWJlZGRlZCA9IChcbiAgICAgICAgICBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5UmVzcG9uc2UoXG4gICAgICAgICAgICBpcmksXG4gICAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICAgKVxuICAgICAgICApW1wiX2VtYmVkZGVkXCJdO1xuICAgICAgICBlbnRpdHkgPSBjcmVhdGVNb2RlbE9iamVjdCh7XG4gICAgICAgICAgX2VtYmVkZGVkOiB7XG4gICAgICAgICAgICBbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXTogZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKFxuICAgICAgICAgICAgICBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dLFxuICAgICAgICAgICAgICB1c2VMZWdhY3ksXG4gICAgICAgICAgICAgIG9udG9sb2d5SWRcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSkgYXMgRW50aXR5O1xuICAgICAgICBvbnRvTGlzdCA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV0ubWFwKFxuICAgICAgICAgIChlbnRpdHlJbk9udG9sb2d5OiBhbnkpID0+IGVudGl0eUluT250b2xvZ3lbXCJvbnRvbG9neV9uYW1lXCJdXG4gICAgICAgICk7XG4gICAgICAgIGRlZmluZWRCeSA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1cbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKGVudGl0eUluT250b2xvZ3k6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3k6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW50aXR5ID0gYXdhaXQgb2xzQXBpLmdldEVudGl0eU9iamVjdChcbiAgICAgICAgICBpcmksXG4gICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgKTtcbiAgICAgICAgb250b0xpc3QgPSBlbnRpdHkuZ2V0QXBwZWFyc0luKCk7XG4gICAgICAgIGRlZmluZWRCeSA9IGVudGl0eS5nZXREZWZpbmVkQnkoKTtcbiAgICAgIH1cblxuICAgICAgZGVmaW5lZEJ5ID0gZGVmaW5lZEJ5XG4gICAgICAgIC5maWx0ZXIoKG9udG86IHN0cmluZykgPT4gb250byAhPSBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpKVxuICAgICAgICAuc29ydCgpO1xuICAgICAgb250b0xpc3QgPSBvbnRvTGlzdFxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChvbnRvOiBzdHJpbmcpID0+XG4gICAgICAgICAgICBvbnRvICE9IGVudGl0eS5nZXRPbnRvbG9neUlkKCkgJiYgIWRlZmluZWRCeS5pbmNsdWRlcyhvbnRvKVxuICAgICAgICApXG4gICAgICAgIC5zb3J0KCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudGl0eTogZW50aXR5LFxuICAgICAgICBvbnRvTGlzdDogb250b0xpc3QsXG4gICAgICAgIGRlZmluZWRCeTogZGVmaW5lZEJ5LFxuICAgICAgfSBhcyBNZXRhZGF0YUluZm87XG4gICAgfVxuICApO1xuXG4gIGZ1bmN0aW9uIHJlbmRlcihkYXRhOiBNZXRhZGF0YUluZm8pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfT5cbiAgICAgICAgPEV1aUZsZXhHcm91cCBkaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9IHN0eWxlPXt7IG1heFdpZHRoOiA2MDAgfX0+XG4gICAgICAgICAgICB7dGVybUxpbmsgPyAoXG4gICAgICAgICAgICAgIDxFdWlMaW5rIGhyZWY9e3Rlcm1MaW5rfSB0YXJnZXQ9XCJfYmxhbmtcIiBleHRlcm5hbD17ZmFsc2V9PlxuICAgICAgICAgICAgICAgIDxUaXRsZVByZXNlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgdGl0bGU9e2RhdGEuZW50aXR5LmdldExhYmVsKCl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2ZpbmFsQ2xhc3NOYW1lfS10aXRsZWB9XG4gICAgICAgICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIGVycm9yPXtlcnJvcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0V1aUxpbms+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VGl0bGVQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICB0aXRsZT17ZGF0YS5lbnRpdHkuZ2V0TGFiZWwoKX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2ZpbmFsQ2xhc3NOYW1lfS10aXRsZWB9XG4gICAgICAgICAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgZXJyb3I9e2Vycm9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPEJyZWFkY3J1bWJQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgb250b2xvZ3lJZD17b250b2xvZ3lJZCB8fCBkYXRhLmVudGl0eS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgICAgICAgb250b2xvZ3lOYW1lPXtkYXRhLmVudGl0eS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgICAgICAgc2hvcnRGb3JtPXtkYXRhLmVudGl0eS5nZXRTaG9ydEZvcm0oKX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2ZpbmFsQ2xhc3NOYW1lfS1icmVhZGNydW1iYH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxFdWlGbGV4R3JvdXAgZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfSBzdHlsZT17eyBtYXhXaWR0aDogNjAwIH19PlxuICAgICAgICAgICAgICAgICAgICA8SXJpV2lkZ2V0IGlyaT17aXJpfSBjbGFzc05hbWU9e2Ake2ZpbmFsQ2xhc3NOYW1lfS1pcmlgfSAvPlxuICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgPEV1aUZsZXhJdGVtIHN0eWxlPXt7IG1heFdpZHRoOiA2MDAgfX0+XG4gICAgICAgICAgICA8RGVzY3JpcHRpb25QcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgZGVzY3JpcHRpb249e2RhdGEuZW50aXR5LmdldERlc2NyaXB0aW9uKCl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7ZmluYWxDbGFzc05hbWV9LWRlc2NyaXB0aW9uYH1cbiAgICAgICAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAgIGVycm9yPXtlcnJvcn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cblxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luOiBcIjAgMTJweCAwXCIsIG1heFdpZHRoOiA2MDAgfX0+XG4gICAgICAgICAgICA8RW50aXR5T250b0xpc3RQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgIGxhYmVsPXtkYXRhLmVudGl0eS5nZXRMYWJlbCgpIHx8IFwiXCJ9XG4gICAgICAgICAgICAgIG9udG9saXN0PXtkYXRhLm9udG9MaXN0fVxuICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtcbiAgICAgICAgICAgICAgICBlbnRpdHlUeXBlIHx8IChkYXRhLmVudGl0eS5nZXRUeXBlKCkgYXMgRW50aXR5VHlwZU5hbWUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2ZpbmFsQ2xhc3NOYW1lfS1lbnRpdHktb250by1saXN0YH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8RW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICBvbnRvbGlzdD17ZGF0YS5kZWZpbmVkQnl9XG4gICAgICAgICAgICAgIGxhYmVsPXtkYXRhLmVudGl0eS5nZXRMYWJlbCgpIHx8IFwiXCJ9XG4gICAgICAgICAgICAgIGVudGl0eVR5cGU9e1xuICAgICAgICAgICAgICAgIGVudGl0eVR5cGUgfHwgKGRhdGEuZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17b25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7ZmluYWxDbGFzc05hbWV9LWVudGl0eS1kZWZpbmVkLWJ5YH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8VGFiUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgIGRhdGE9e2RhdGEuZW50aXR5fVxuICAgICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cbiAgICAgICAgICAgICAgZXJyb3I9e2Vycm9yfVxuICAgICAgICAgICAgICBpcmk9e2lyaX1cbiAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgYXBpPXthcGl9XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e1xuICAgICAgICAgICAgICAgIHByb3BzLm9udG9sb2d5SWRcbiAgICAgICAgICAgICAgICAgID8gcHJvcHMub250b2xvZ3lJZFxuICAgICAgICAgICAgICAgICAgOiBkYXRhLmVudGl0eS5nZXRPbnRvbG9neUlkKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB1c2VMZWdhY3k9e3VzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgaGllcmFyY2h5VGFiPXtoaWVyYXJjaHlUYWJ9XG4gICAgICAgICAgICAgIGNyb3NzUmVmVGFiPXtjcm9zc1JlZlRhYn1cbiAgICAgICAgICAgICAgdGVybWlub2xvZ3lJbmZvVGFiPXt0ZXJtaW5vbG9neUluZm9UYWJ9XG4gICAgICAgICAgICAgIGFsdE5hbWVzVGFiPXthbHROYW1lc1RhYn1cbiAgICAgICAgICAgICAgaGllcmFyY2h5UHJlZmVycmVkUm9vdHM9e3Byb3BzLmhpZXJhcmNoeVByZWZlcnJlZFJvb3RzfVxuICAgICAgICAgICAgICBoaWVyYXJjaHlTaG93U2libGluZ3NPbkluaXQ9e3Byb3BzLmhpZXJhcmNoeVNob3dTaWJsaW5nc09uSW5pdH1cbiAgICAgICAgICAgICAgaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlcz17cHJvcHMuaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlc31cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIChcbiAgICAgICAgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJtZXRhZGF0YVwiKX08L0V1aVRleHQ+XG4gICAgICApfVxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmIDw+e2lzRW50aXR5KGRhdGEuZW50aXR5KSA/IHJlbmRlcihkYXRhKSA6IG51bGx9PC8+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVNZXRhZGF0YShcbiAgcHJvcHM6IE1ldGFkYXRhV2lkZ2V0UHJvcHMsXG4gIGNvbnRhaW5lcjogRWxlbWVudCxcbiAgY2FsbGJhY2s/OiAoKSA9PiB2b2lkXG4pIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRNZXRhZGF0YVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkTWV0YWRhdGFXaWRnZXQocHJvcHM6IE1ldGFkYXRhV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIiBnbG9iYWxTdHlsZXM9e2ZhbHNlfT5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8TWV0YWRhdGFXaWRnZXRcbiAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgdGVybUxpbms9e3Byb3BzLnRlcm1MaW5rfVxuICAgICAgICAgIGFsdE5hbWVzVGFiPXtwcm9wcy5hbHROYW1lc1RhYn1cbiAgICAgICAgICBoaWVyYXJjaHlUYWI9e3Byb3BzLmhpZXJhcmNoeVRhYn1cbiAgICAgICAgICBjcm9zc1JlZlRhYj17cHJvcHMuY3Jvc3NSZWZUYWJ9XG4gICAgICAgICAgdGVybWlub2xvZ3lJbmZvVGFiPXtwcm9wcy50ZXJtaW5vbG9neUluZm9UYWJ9XG4gICAgICAgICAgaGllcmFyY2h5UHJlZmVycmVkUm9vdHM9e3Byb3BzLmhpZXJhcmNoeVByZWZlcnJlZFJvb3RzfVxuICAgICAgICAgIGhpZXJhcmNoeVNob3dTaWJsaW5nc09uSW5pdD17cHJvcHMuaGllcmFyY2h5U2hvd1NpYmxpbmdzT25Jbml0fVxuICAgICAgICAgIGhpZXJhcmNoeUtlZXBFeHBhbnNpb25TdGF0ZXM9e3Byb3BzLmhpZXJhcmNoeUtlZXBFeHBhbnNpb25TdGF0ZXN9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZT17cHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfVxuICAgICAgICAgIGNsYXNzTmFtZT17cHJvcHMuY2xhc3NOYW1lfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IE1ldGFkYXRhV2lkZ2V0LCBjcmVhdGVNZXRhZGF0YSB9O1xuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uUHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyByYW5kb21TdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uL3N0eWxlL3RzNG5mZGlTdHlsZXMvdHM0bmZkaUVudGl0eU9udG9MaXN0U3R5bGUuY3NzXCI7XG5cbmNvbnN0IE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkgPSA1IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbihwcm9wczogRW50aXR5T250b0xpc3RQcmVzZW50YXRpb25Qcm9wcykge1xuICBjb25zdCBbYXBwZWFyc0luRXhwYW5kZWQsIHNldEFwcGVhcnNJbkV4cGFuZGVkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgZmluYWxDbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgfHwgXCJ0czRuZmRpLWVudGl0eS1vbnRvLWxpc3Qtc3R5bGVcIjtcblxuICBmdW5jdGlvbiByZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3k6IHN0cmluZykge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBpZiAocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpXG4gICAgICAgICAgICBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neShvbnRvbG9neSwgcHJvcHMuZW50aXR5VHlwZSB8fCBcIlwiLCB7XG4gICAgICAgICAgICAgIGlyaTogcHJvcHMuaXJpLFxuICAgICAgICAgICAgICBsYWJlbDogcHJvcHMubGFiZWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57b250b2xvZ3kudG9VcHBlckNhc2UoKX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyT250b0JhZGdlcygpIHtcbiAgICByZXR1cm4gcHJvcHMub250b2xpc3QubGVuZ3RoID4gTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSAmJlxuICAgICAgIWFwcGVhcnNJbkV4cGFuZGVkID8gKFxuICAgICAgPD5cbiAgICAgICAge3Byb3BzLm9udG9saXN0XG4gICAgICAgICAgLnNsaWNlKDAsIE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkpXG4gICAgICAgICAgLm1hcCgob250b2xvZ3k6IHN0cmluZykgPT4gKFxuICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgIHtyZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3kpfVxuICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzTmFtZT1cImV4cGFuZC1vbnRvLWxpc3RcIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEFwcGVhcnNJbkV4cGFuZGVkKHRydWUpfVxuICAgICAgICA+XG4gICAgICAgICAgKyB7cHJvcHMub250b2xpc3QubGVuZ3RoIC0gTUFYX09OVE9MT0dJRVNfT05fRElTUExBWX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8Lz5cbiAgICApIDogKFxuICAgICAgcHJvcHMub250b2xpc3QubWFwKChvbnRvbG9neTogc3RyaW5nKSA9PiAoXG4gICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgIHtyZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3kpfVxuICAgICAgICAgICZuYnNwO1xuICAgICAgICA8L3NwYW4+XG4gICAgICApKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0+XG4gICAgICB7cHJvcHMub250b2xpc3QgJiYgcHJvcHMub250b2xpc3QubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxFdWlUZXh0IHN0eWxlPXt7IGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIgfX0+XG4gICAgICAgICAgQWxzbyBhcHBlYXJzIGluJm5ic3A7XG4gICAgICAgICAge3JlbmRlck9udG9CYWRnZXMoKX1cbiAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRW50aXR5T250b0xpc3RQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblByb3BzIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgcmFuZG9tU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi9zdHlsZS90czRuZmRpU3R5bGVzL3RzNG5mZGlFbnRpdHlEZWZpbmVkQnlTdHlsZS5jc3NcIjtcblxuY29uc3QgTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSA9IDUgYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIEVudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbihwcm9wczogRW50aXR5T250b0xpc3RQcmVzZW50YXRpb25Qcm9wcykge1xuICBjb25zdCBbYXBwZWFyc0luRXhwYW5kZWQsIHNldEFwcGVhcnNJbkV4cGFuZGVkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgZmluYWxDbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgfHwgXCJ0czRuZmRpLWVudGl0eS1kZWZpbmVkLWJ5LXN0eWxlXCI7XG5cbiAgZnVuY3Rpb24gcmVuZGVyT250b0JhZGdlKG9udG9sb2d5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICBrZXk9e3JhbmRvbVN0cmluZygpfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgaWYgKHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KVxuICAgICAgICAgICAgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kob250b2xvZ3ksIHByb3BzLmVudGl0eVR5cGUgfHwgXCJcIiwge1xuICAgICAgICAgICAgICBpcmk6IHByb3BzLmlyaSxcbiAgICAgICAgICAgICAgbGFiZWw6IHByb3BzLmxhYmVsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+e29udG9sb2d5LnRvVXBwZXJDYXNlKCl9PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlck9udG9CYWRnZXMoKSB7XG4gICAgcmV0dXJuIHByb3BzLm9udG9saXN0Lmxlbmd0aCA+IE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkgJiZcbiAgICAgICFhcHBlYXJzSW5FeHBhbmRlZCA/IChcbiAgICAgIDw+XG4gICAgICAgIHtwcm9wcy5vbnRvbGlzdFxuICAgICAgICAgIC5zbGljZSgwLCBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZKVxuICAgICAgICAgIC5tYXAoKG9udG9sb2d5OiBzdHJpbmcpID0+IChcbiAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9XCJleHBhbmQtb250by1saXN0XCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRBcHBlYXJzSW5FeHBhbmRlZCh0cnVlKX1cbiAgICAgICAgPlxuICAgICAgICAgICsge3Byb3BzLm9udG9saXN0Lmxlbmd0aCAtIE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVl9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC8+XG4gICAgKSA6IChcbiAgICAgIHByb3BzLm9udG9saXN0Lm1hcCgob250b2xvZ3k6IHN0cmluZykgPT4gKFxuICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICB7cmVuZGVyT250b0JhZGdlKG9udG9sb2d5KX1cbiAgICAgICAgICAmbmJzcDtcbiAgICAgICAgPC9zcGFuPlxuICAgICAgKSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PlxuICAgICAge3Byb3BzLm9udG9saXN0ICYmIHByb3BzLm9udG9saXN0Lmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8RXVpVGV4dCBzdHlsZT17eyBmb250V2VpZ2h0OiBcIm5vcm1hbFwiIH19PlxuICAgICAgICAgIERlZmluZWQgYnkmbmJzcDtcbiAgICAgICAgICB7cmVuZGVyT250b0JhZGdlcygpfVxuICAgICAgICA8L0V1aVRleHQ+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgeyBFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQ29tcGFyYXRvcnMsXG4gIENyaXRlcmlhV2l0aFBhZ2luYXRpb24sXG4gIEV1aUJhc2ljVGFibGUsXG4gIEV1aUJ1dHRvbkljb24sXG4gIEV1aUhvcml6b250YWxSdWxlLFxuICBFdWlQcm92aWRlcixcbiAgRXVpTGluayxcbiAgRXVpU3BhY2VyLFxuICBFdWlUZXh0LFxuICBFdWlTY3JlZW5SZWFkZXJPbmx5LFxuICBFdWlEZXNjcmlwdGlvbkxpc3QsXG4gIEV1aUNhbGxPdXQsXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IGNzcywgU2VyaWFsaXplZFN0eWxlcyB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuaW1wb3J0IHsgRXVpQmFzaWNUYWJsZUNvbHVtbiB9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvYmFzaWNfdGFibGVcIjtcbmltcG9ydCB7IE9sc1Jlc291cmNlLCBSZXNvdXJjZXNXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IE9udG9sb2dpZXMgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IE9MUzRPbnRvbG9neSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9vbHM0LW1vZGVsXCI7XG5pbXBvcnQgeyBPQk9fRk9VTkRSWV9SRVBPX1VSTF9SQVcgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcblxuY29uc3QgREVGQVVMVF9JTklUSUFMX0VOVFJJRVNfUEVSX1BBR0UgPSAxMDtcbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMgPSBbMTAsIDI1LCA1MCwgMTAwXTtcbmNvbnN0IERFRkFVTFRfSU5JVElBTF9TT1JUX0ZJRUxEID0gXCJjb25maWcucHJlZmVycmVkUHJlZml4XCI7XG5jb25zdCBERUZBVUxUX0lOSVRJQUxfU09SVF9ESVIgPSBcImFzY1wiIGFzIGNvbnN0O1xuY29uc3QgREVGQVVMVF9VU0VfTEVHQUNZID0gdHJ1ZSBhcyBjb25zdDtcblxuZnVuY3Rpb24gUmVzb3VyY2VzV2lkZ2V0KHByb3BzOiBSZXNvdXJjZXNXaWRnZXRQcm9wcykge1xuICBjb25zdCB7XG4gICAgYXBpLFxuICAgIGluaXRpYWxFbnRyaWVzUGVyUGFnZSA9IERFRkFVTFRfSU5JVElBTF9FTlRSSUVTX1BFUl9QQUdFLFxuICAgIHBhZ2VTaXplT3B0aW9ucyA9IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMsXG4gICAgaW5pdGlhbFNvcnRGaWVsZCA9IERFRkFVTFRfSU5JVElBTF9TT1JUX0ZJRUxELFxuICAgIGluaXRpYWxTb3J0RGlyID0gREVGQVVMVF9JTklUSUFMX1NPUlRfRElSLFxuICAgIG9uTmF2aWdhdGUsXG4gICAgcGFyYW1ldGVyLFxuICAgIHVzZUxlZ2FjeSA9IERFRkFVTFRfVVNFX0xFR0FDWSxcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3QgW3BhZ2VJbmRleCwgc2V0UGFnZUluZGV4XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbcGFnZVNpemUsIHNldFBhZ2VTaXplXSA9IHVzZVN0YXRlKGluaXRpYWxFbnRyaWVzUGVyUGFnZSk7XG4gIGNvbnN0IFtzb3J0RmllbGQsIHNldFNvcnRGaWVsZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudW1iZXI+KGluaXRpYWxTb3J0RmllbGQpO1xuICBjb25zdCBbc29ydERpcmVjdGlvbiwgc2V0U29ydERpcmVjdGlvbl0gPSB1c2VTdGF0ZShpbml0aWFsU29ydERpcik7XG5cbiAgY29uc3QgW2l0ZW1JZFRvRXhwYW5kZWRSb3dNYXAsIHNldEl0ZW1JZFRvRXhwYW5kZWRSb3dNYXBdID0gdXNlU3RhdGU8XG4gICAgUmVjb3JkPHN0cmluZywgUmVhY3ROb2RlPlxuICA+KHt9KTtcblxuICBjb25zdCBjb2x1bW5zOiBBcnJheTxcbiAgICBFdWlCYXNpY1RhYmxlQ29sdW1uPE9sc1Jlc291cmNlPiAmIHsgY3NzPzogU2VyaWFsaXplZFN0eWxlcyB9XG4gID4gPSBbXG4gICAge1xuICAgICAgbmFtZTogXCJMb2dvXCIsXG4gICAgICBmaWVsZDogXCJjb25maWcubG9nb1wiLFxuICAgICAgLy8gVE9ETzogaW1wcm92ZSBwb3NpdGlvbiBvZiBsb2dvIChtYXliZSBpbnNpZGUgYW5vdGhlciBjZWxsLCBidXQgdGhpcyBtYWtlcyBzb3J0aW5nIG1vcmUgY29tcGxpY2F0ZWQpXG4gICAgICByZW5kZXI6IChsb2dvVXJsOiBzdHJpbmcpID0+XG4gICAgICAgIGxvZ29VcmwgPyAoXG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgd2lkdGg9e1wiMTAwJVwifVxuICAgICAgICAgICAgc3R5bGU9e3sgb2JqZWN0Rml0OiBcImNvbnRhaW5cIiB9fVxuICAgICAgICAgICAgc3JjPXtcbiAgICAgICAgICAgICAgbG9nb1VybC5zdGFydHNXaXRoKFwiL2ltYWdlc1wiKVxuICAgICAgICAgICAgICAgID8gT0JPX0ZPVU5EUllfUkVQT19VUkxfUkFXICsgbG9nb1VybFxuICAgICAgICAgICAgICAgIDogbG9nb1VybFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWx0PXtcIi1sb2dvLVwifVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPD48Lz5cbiAgICAgICAgKSxcbiAgICAgIHdpZHRoOiBcIjclXCIsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlJlc291cmNlIE5hbWVcIixcbiAgICAgIGZpZWxkOiBcImNvbmZpZy50aXRsZVwiLFxuICAgICAgd2lkdGg6IFwiMTUlXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiU2hvcnQgTmFtZVwiLFxuICAgICAgZmllbGQ6IFwib250b2xvZ3lJZFwiLFxuXG4gICAgICByZW5kZXI6IChvbnRvbG9neUlkOiBzdHJpbmcpID0+IChcbiAgICAgICAgPEV1aUxpbmtcbiAgICAgICAgICBocmVmPXtcIiNcIn1cbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYgKG9uTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZShvbnRvbG9neUlkIHx8IFwiXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7b250b2xvZ3lJZH1cbiAgICAgICAgPC9FdWlMaW5rPlxuICAgICAgKSxcblxuICAgICAgd2lkdGg6IFwiMTAlXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiRGVzY3JpcHRpb25cIixcbiAgICAgIGZpZWxkOiBcImNvbmZpZy5kZXNjcmlwdGlvblwiLFxuICAgICAgLy8gd2lkdGg6IFwiMzAlXCIsXG4gICAgICBjc3M6IGNzc2BcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4O1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIGAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlZlcnNpb25cIixcbiAgICAgIGZpZWxkOiBcImNvbmZpZy52ZXJzaW9uXCIsXG4gICAgICB3aWR0aDogXCI3JVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJMb2FkZWQgb25cIixcbiAgICAgIGZpZWxkOiBcImxvYWRlZFwiLFxuICAgICAgd2lkdGg6IFwiOCVcIixcbiAgICAgIGRhdGFUeXBlOiBcImRhdGVcIiBhcyBjb25zdCxcbiAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJUZXJtc1wiLFxuICAgICAgZmllbGQ6IFwibnVtYmVyT2ZUZXJtc1wiLFxuICAgICAgcmVuZGVyOiAodmFsdWU6IG51bWJlcikgPT4gPD57dmFsdWUudG9Mb2NhbGVTdHJpbmcoKX08Lz4sXG4gICAgICB3aWR0aDogXCI3JVwiLFxuICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgIGZpZWxkOiBcIm51bWJlck9mUHJvcGVydGllc1wiLFxuICAgICAgcmVuZGVyOiAodmFsdWU6IG51bWJlcikgPT4gPD57dmFsdWUudG9Mb2NhbGVTdHJpbmcoKX08Lz4sXG4gICAgICB3aWR0aDogXCI3JVwiLFxuICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIkluZGl2aWR1YWxzXCIsXG4gICAgICBmaWVsZDogXCJudW1iZXJPZkluZGl2aWR1YWxzXCIsXG4gICAgICByZW5kZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiA8Pnt2YWx1ZS50b0xvY2FsZVN0cmluZygpfTwvPixcbiAgICAgIHdpZHRoOiBcIjclXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHdpZHRoOiBcIjIlXCIsXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIC4uLihwcm9wcy5hY3Rpb25zIHx8IFtdKSxcbiAgICAgICAge1xuICAgICAgICAgIHJlbmRlcjogKGl0ZW06IE9sc1Jlc291cmNlKSA9PiAoXG4gICAgICAgICAgICA8RXVpQnV0dG9uSWNvblxuICAgICAgICAgICAgICBocmVmPXtpdGVtLmNvbmZpZy5maWxlTG9jYXRpb259XG4gICAgICAgICAgICAgIGljb25UeXBlPVwiZG93bmxvYWRcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRG93bmxvYWRcIlxuICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAhaXRlbS5jb25maWcuYWxsb3dEb3dubG9hZCB8fFxuICAgICAgICAgICAgICAgICFpdGVtLmNvbmZpZy5maWxlTG9jYXRpb24gfHxcbiAgICAgICAgICAgICAgICBpdGVtLmNvbmZpZy5maWxlTG9jYXRpb24uc3RhcnRzV2l0aChcImZpbGU6Ly9cIilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuXG4gIGNvbnN0IG9uVGFibGVDaGFuZ2UgPSAoe1xuICAgIHBhZ2UsXG4gICAgc29ydCxcbiAgfTogQ3JpdGVyaWFXaXRoUGFnaW5hdGlvbjxPbHNSZXNvdXJjZT4pID0+IHtcbiAgICBjb25zdCB7IGluZGV4OiBwYWdlSW5kZXgsIHNpemU6IHBhZ2VTaXplIH0gPSBwYWdlO1xuICAgIHNldFBhZ2VJbmRleChwYWdlSW5kZXgpO1xuICAgIHNldFBhZ2VTaXplKHBhZ2VTaXplKTtcblxuICAgIGlmIChzb3J0KSB7XG4gICAgICBjb25zdCB7IGZpZWxkOiBzb3J0RmllbGQsIGRpcmVjdGlvbjogc29ydERpcmVjdGlvbiB9ID0gc29ydDtcbiAgICAgIHNldFNvcnRGaWVsZChzb3J0RmllbGQpO1xuICAgICAgc2V0U29ydERpcmVjdGlvbihzb3J0RGlyZWN0aW9uKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qge1xuICAgIGRhdGE6IG9udG9sb2dpZXNEYXRhLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGlzTG9hZGluZyxcbiAgfSA9IHVzZVF1ZXJ5PE9udG9sb2dpZXM+KFxuICAgIFtcIm9udG9sb2dpZXNEYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0T250b2xvZ2llc0RhdGEocHJvcHMucGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICBmdW5jdGlvbiB2MnRvT2xzUmVzb3VyY2Uob250b2xvZ3k6IE9MUzRPbnRvbG9neSk6IE9sc1Jlc291cmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgb250b2xvZ3lJZDogb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgbG9hZGVkOiBvbnRvbG9neS5nZXRMb2FkZWQoKSxcbiAgICAgIG51bWJlck9mVGVybXM6IG9udG9sb2d5LmdldE51bUNsYXNzZXMoKSxcbiAgICAgIG51bWJlck9mUHJvcGVydGllczogb250b2xvZ3kuZ2V0TnVtUHJvcGVydGllcygpLFxuICAgICAgbnVtYmVyT2ZJbmRpdmlkdWFsczogb250b2xvZ3kuZ2V0TnVtSW5kaXZpZHVhbHMoKSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBsb2dvOiBvbnRvbG9neS5nZXRMb2dvVVJMKCksXG4gICAgICAgIHRpdGxlOiBvbnRvbG9neS5nZXROYW1lKCkudHJpbSgpLFxuICAgICAgICBkZXNjcmlwdGlvbjogb250b2xvZ3kuZ2V0RGVzY3JpcHRpb24oKSxcbiAgICAgICAgcHJlZmVycmVkUHJlZml4OiBvbnRvbG9neS5nZXRQcmVmZXJyZWRQcmVmaXgoKSxcbiAgICAgICAgYWxsb3dEb3dubG9hZDogb250b2xvZ3kuZ2V0QWxsb3dEb3dubG9hZCgpLFxuICAgICAgICBmaWxlTG9jYXRpb246IG9udG9sb2d5LmdldElyaSgpLFxuICAgICAgICB2ZXJzaW9uOiBvbnRvbG9neS5nZXRWZXJzaW9uKCksXG4gICAgICAgIGlyaTogb250b2xvZ3kuZ2V0SXJpKCksXG4gICAgICAgIGhvbWVwYWdlOiBvbnRvbG9neS5nZXRIb21lcGFnZSgpLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIGxpY2Vuc2U6IG9udG9sb2d5LmdldExpY2Vuc2UoKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG9udG9zID0gdXNlTGVnYWN5XG4gICAgPyBvbnRvbG9naWVzRGF0YT8ucHJvcGVydGllcy5tYXAoKG9udG9sb2d5KSA9PiAoe1xuICAgICAgICAuLi5vbnRvbG9neS5wcm9wZXJ0aWVzLFxuICAgICAgfSkpIHx8IFtdXG4gICAgOiBvbnRvbG9naWVzRGF0YT8ucHJvcGVydGllcy5tYXAoKG9udG9sb2d5KSA9PiB2MnRvT2xzUmVzb3VyY2Uob250b2xvZ3kpKSB8fFxuICAgICAgW107XG5cbiAgY29uc3QgZmluZE9udG9sb2dpZXMgPSAoXG4gICAgb250b2xvZ2llczogYW55W10sXG4gICAgcGFnZUluZGV4OiBudW1iZXIsXG4gICAgcGFnZVNpemU6IG51bWJlcixcbiAgICBzb3J0RmllbGQ6IGFueSxcbiAgICBzb3J0RGlyZWN0aW9uOiBcImFzY1wiIHwgXCJkZXNjXCJcbiAgKSA9PiB7XG4gICAgbGV0IGl0ZW1zO1xuXG4gICAgaWYgKHNvcnRGaWVsZCkge1xuICAgICAgaXRlbXMgPSBvbnRvbG9naWVzXG4gICAgICAgIC5zbGljZSgwKVxuICAgICAgICAuc29ydChcbiAgICAgICAgICBDb21wYXJhdG9ycy5wcm9wZXJ0eShzb3J0RmllbGQsIENvbXBhcmF0b3JzLmRlZmF1bHQoc29ydERpcmVjdGlvbikpXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zID0gb250b2xvZ2llcztcbiAgICB9XG5cbiAgICBsZXQgcGFnZU9mSXRlbXM7XG5cbiAgICBpZiAoIXBhZ2VJbmRleCAmJiAhcGFnZVNpemUpIHtcbiAgICAgIHBhZ2VPZkl0ZW1zID0gaXRlbXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBwYWdlSW5kZXggKiBwYWdlU2l6ZTtcbiAgICAgIHBhZ2VPZkl0ZW1zID0gaXRlbXMuc2xpY2UoXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIE1hdGgubWluKHN0YXJ0SW5kZXggKyBwYWdlU2l6ZSwgb250b2xvZ2llcy5sZW5ndGgpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwYWdlT2ZJdGVtcyxcbiAgICAgIHRvdGFsSXRlbUNvdW50OiBvbnRvbG9naWVzLmxlbmd0aCxcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IHsgcGFnZU9mSXRlbXMsIHRvdGFsSXRlbUNvdW50IH0gPSBmaW5kT250b2xvZ2llcyhcbiAgICBvbnRvcyxcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgc29ydEZpZWxkLFxuICAgIHNvcnREaXJlY3Rpb25cbiAgKTtcblxuICBjb25zdCBwYWdpbmF0aW9uID0ge1xuICAgIHBhZ2VJbmRleCxcbiAgICBwYWdlU2l6ZSxcbiAgICB0b3RhbEl0ZW1Db3VudCxcbiAgICBwYWdlU2l6ZU9wdGlvbnMsXG4gIH07XG5cbiAgY29uc3QgcmVzdWx0c0NvdW50ID1cbiAgICBwYWdlU2l6ZSA9PT0gMCA/IChcbiAgICAgIDxzdHJvbmc+QWxsPC9zdHJvbmc+XG4gICAgKSA6IChcbiAgICAgIDw+XG4gICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAge3BhZ2VTaXplICogcGFnZUluZGV4ICsgMX0te3BhZ2VTaXplICogcGFnZUluZGV4ICsgcGFnZVNpemV9XG4gICAgICAgIDwvc3Ryb25nPntcIiBcIn1cbiAgICAgICAgb2Yge3RvdGFsSXRlbUNvdW50fVxuICAgICAgPC8+XG4gICAgKTtcblxuICBjb25zdCBzb3J0aW5nID0ge1xuICAgIHNvcnQ6IHtcbiAgICAgIGZpZWxkOiBzb3J0RmllbGQsXG4gICAgICBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb24sXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCB0b2dnbGVEZXRhaWxzID0gKHJlc291cmNlOiBhbnkpID0+IHtcbiAgICBjb25zdCBpdGVtSWRUb0V4cGFuZGVkUm93TWFwVmFsdWVzID0geyAuLi5pdGVtSWRUb0V4cGFuZGVkUm93TWFwIH07XG5cbiAgICBpZiAoaXRlbUlkVG9FeHBhbmRlZFJvd01hcFZhbHVlc1tyZXNvdXJjZS5vbnRvbG9neUlkXSkge1xuICAgICAgZGVsZXRlIGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXBWYWx1ZXNbcmVzb3VyY2Uub250b2xvZ3lJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBob21lcGFnZSA9IG51bGw7XG4gICAgICBsZXQgbGljZW5zZVVybCA9IFwiXCI7XG4gICAgICBsZXQgbGljZW5zZUxhYmVsID0gXCJcIjtcblxuICAgICAgcmVzb3VyY2UuY29uZmlnLmhvbWVwYWdlID8gKGhvbWVwYWdlID0gcmVzb3VyY2UuY29uZmlnLmhvbWVwYWdlKSA6IG51bGw7XG5cbiAgICAgIGlmIChyZXNvdXJjZT8uY29uZmlnPy5hbm5vdGF0aW9ucz8ubGljZW5zZSkge1xuICAgICAgICBjb25zdCBsaWNlbnNlID0gcmVzb3VyY2UuY29uZmlnLmFubm90YXRpb25zLmxpY2Vuc2U7XG4gICAgICAgIGlmICh1c2VMZWdhY3kpIHtcbiAgICAgICAgICBpZiAobGljZW5zZVswXSAhPT0gXCJcIikge1xuICAgICAgICAgICAgbGljZW5zZVVybCA9IGBodHRwczovLyR7bGljZW5zZVswXX1gO1xuICAgICAgICAgICAgbGljZW5zZUxhYmVsID0gbGljZW5zZVswXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGljZW5zZVVybCA9IGxpY2Vuc2UudXJsID8gbGljZW5zZS51cmwgOiBcIlwiO1xuICAgICAgICAgIGxpY2Vuc2VMYWJlbCA9IGxpY2Vuc2UubGFiZWwgPyBsaWNlbnNlLmxhYmVsIDogXCJcIjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBsaXN0SXRlbXMgPSBbXTtcblxuICAgICAgaWYgKGhvbWVwYWdlKSB7XG4gICAgICAgIGxpc3RJdGVtcy5wdXNoKHtcbiAgICAgICAgICB0aXRsZTogXCJIb21lcGFnZVwiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAoXG4gICAgICAgICAgICA8RXVpTGluayBocmVmPXtgJHtob21lcGFnZSA/IGhvbWVwYWdlIDogXCItXCJ9YH0+e2Ake1xuICAgICAgICAgICAgICBob21lcGFnZSA/IGhvbWVwYWdlIDogXCItXCJcbiAgICAgICAgICAgIH1gfTwvRXVpTGluaz5cbiAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChsaWNlbnNlTGFiZWwgIT09IFwiXCIpIHtcbiAgICAgICAgbGlzdEl0ZW1zLnB1c2goe1xuICAgICAgICAgIHRpdGxlOiBcIkxpY2Vuc2VcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogKFxuICAgICAgICAgICAgPEV1aUxpbmtcbiAgICAgICAgICAgICAgaHJlZj17YCR7bGljZW5zZVVybCAhPT0gXCJcIiA/IGxpY2Vuc2VVcmwgOiBudWxsfWB9XG4gICAgICAgICAgICA+e2Ake2xpY2Vuc2VMYWJlbH1gfTwvRXVpTGluaz5cbiAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaXRlbUlkVG9FeHBhbmRlZFJvd01hcFZhbHVlc1tyZXNvdXJjZS5vbnRvbG9neUlkXSA9IChcbiAgICAgICAgPEV1aURlc2NyaXB0aW9uTGlzdCBsaXN0SXRlbXM9e2xpc3RJdGVtc30gLz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0SXRlbUlkVG9FeHBhbmRlZFJvd01hcChpdGVtSWRUb0V4cGFuZGVkUm93TWFwVmFsdWVzKTtcbiAgfTtcblxuICBjb25zdCBjb2x1bW5zV2l0aEV4cGFuZGluZ1Jvd1RvZ2dsZTogQXJyYXk8XG4gICAgRXVpQmFzaWNUYWJsZUNvbHVtbjxPbHNSZXNvdXJjZT4gJiB7IGNzcz86IFNlcmlhbGl6ZWRTdHlsZXMgfVxuICA+ID0gW1xuICAgIC4uLmNvbHVtbnMsXG4gICAge1xuICAgICAgYWxpZ246IFwicmlnaHRcIixcbiAgICAgIHdpZHRoOiBcIjQwcHhcIixcbiAgICAgIGlzRXhwYW5kZXI6IHRydWUsXG4gICAgICBuYW1lOiAoXG4gICAgICAgIDxFdWlTY3JlZW5SZWFkZXJPbmx5PlxuICAgICAgICAgIDxzcGFuPkV4cGFuZCByb3c8L3NwYW4+XG4gICAgICAgIDwvRXVpU2NyZWVuUmVhZGVyT25seT5cbiAgICAgICksXG4gICAgICBtb2JpbGVPcHRpb25zOiB7IGhlYWRlcjogZmFsc2UgfSxcbiAgICAgIHJlbmRlcjogKHJlc291cmNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbUlkVG9FeHBhbmRlZFJvd01hcFZhbHVlcyA9IHsgLi4uaXRlbUlkVG9FeHBhbmRlZFJvd01hcCB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEV1aUJ1dHRvbkljb25cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgdG9nZ2xlRGV0YWlscyhyZXNvdXJjZSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgaWNvblR5cGU9e1xuICAgICAgICAgICAgICBpdGVtSWRUb0V4cGFuZGVkUm93TWFwVmFsdWVzW3Jlc291cmNlLm9udG9sb2d5SWRdXG4gICAgICAgICAgICAgICAgPyBcImFycm93RG93blwiXG4gICAgICAgICAgICAgICAgOiBcImFycm93UmlnaHRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17XG4gICAgICAgICAgICAgIGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXBWYWx1ZXNbcmVzb3VyY2Uub250b2xvZ3lJZF1cbiAgICAgICAgICAgICAgICA/IFwiQ29sbGFwc2VcIlxuICAgICAgICAgICAgICAgIDogXCJFeHBhbmRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0sXG4gIF07XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPEV1aUNhbGxPdXRcbiAgICAgICAgICAgIHRpdGxlPXtcIkxpY2Vuc2VzXCJ9XG4gICAgICAgICAgICBpY29uVHlwZT1cIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIlxuICAgICAgICAgICAgY29sb3I9e1wid2FybmluZ1wifVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICBUaGUgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIHRlcm1pbm9sb2dpZXMgYmV5b25kIHRoaXMgc2VydmljZVxuICAgICAgICAgICAgICBpcyBvbmx5IHBlcm1pdHRlZCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBvZiB0aGVcbiAgICAgICAgICAgICAgcmVzcGVjdGl2ZSB0ZXJtaW5vbG9neSwgYWxzbyBpbiBjb21wbGlhbmNlIHdpdGggdGhlIGxpY2Vuc2VcbiAgICAgICAgICAgICAgY29uZGl0aW9ucyBpbiB0aGUgcmVzcGVjdGl2ZSBjb3VudHJpZXMuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9FdWlDYWxsT3V0PlxuICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgIDxFdWlUZXh0IHNpemU9XCJ4c1wiPlxuICAgICAgICAgICAgU2hvd2luZyB7cmVzdWx0c0NvdW50fSA8c3Ryb25nPk9udG9sb2dpZXM8L3N0cm9uZz5cbiAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG4gICAgICAgICAgPEV1aUhvcml6b250YWxSdWxlIG1hcmdpbj1cIm5vbmVcIiBzdHlsZT17eyBoZWlnaHQ6IDIgfX0gLz5cblxuICAgICAgICAgIDxFdWlCYXNpY1RhYmxlXG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zV2l0aEV4cGFuZGluZ1Jvd1RvZ2dsZX1cbiAgICAgICAgICAgIGl0ZW1zPXtwYWdlT2ZJdGVtc31cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvblRhYmxlQ2hhbmdlfVxuICAgICAgICAgICAgcGFnaW5hdGlvbj17cGFnaW5hdGlvbn1cbiAgICAgICAgICAgIHNvcnRpbmc9e3NvcnRpbmd9XG4gICAgICAgICAgICBpdGVtSWRUb0V4cGFuZGVkUm93TWFwPXtpdGVtSWRUb0V4cGFuZGVkUm93TWFwfVxuICAgICAgICAgICAgaXNFeHBhbmRhYmxlPXt0cnVlfVxuICAgICAgICAgICAgaXRlbUlkPXtcIm9udG9sb2d5SWRcIn1cbiAgICAgICAgICAvPlxuICAgICAgICA8Lz5cbiAgICAgICl9XG4gICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgPEV1aUJhc2ljVGFibGVcbiAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zV2l0aEV4cGFuZGluZ1Jvd1RvZ2dsZX1cbiAgICAgICAgICBpdGVtcz17cGFnZU9mSXRlbXN9XG4gICAgICAgICAgb25DaGFuZ2U9e29uVGFibGVDaGFuZ2V9XG4gICAgICAgICAgcGFnaW5hdGlvbj17cGFnaW5hdGlvbn1cbiAgICAgICAgICBzb3J0aW5nPXtzb3J0aW5nfVxuICAgICAgICAgIGxvYWRpbmdcbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7aXNFcnJvciAmJiAoXG4gICAgICAgIDxFdWlCYXNpY1RhYmxlXG4gICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICBpdGVtcz17cGFnZU9mSXRlbXN9XG4gICAgICAgICAgb25DaGFuZ2U9e29uVGFibGVDaGFuZ2V9XG4gICAgICAgICAgcGFnaW5hdGlvbj17cGFnaW5hdGlvbn1cbiAgICAgICAgICBzb3J0aW5nPXtzb3J0aW5nfVxuICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXtnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwicmVzb3VyY2VzXCIpfVxuICAgICAgICAgICovXG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXNvdXJjZXMoXG4gIHByb3BzOiBSZXNvdXJjZXNXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFJlc291cmNlc1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkUmVzb3VyY2VzV2lkZ2V0KHByb3BzOiBSZXNvdXJjZXNXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxSZXNvdXJjZXNXaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBpbml0aWFsRW50cmllc1BlclBhZ2U9e3Byb3BzLmluaXRpYWxFbnRyaWVzUGVyUGFnZX1cbiAgICAgICAgICBwYWdlU2l6ZU9wdGlvbnM9e3Byb3BzLnBhZ2VTaXplT3B0aW9uc31cbiAgICAgICAgICBpbml0aWFsU29ydEZpZWxkPXtwcm9wcy5pbml0aWFsU29ydEZpZWxkfVxuICAgICAgICAgIGluaXRpYWxTb3J0RGlyPXtwcm9wcy5pbml0aWFsU29ydERpcn1cbiAgICAgICAgICBhY3Rpb25zPXtwcm9wcy5hY3Rpb25zfVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IFJlc291cmNlc1dpZGdldCwgY3JlYXRlUmVzb3VyY2VzIH07XG4iLCAiaW1wb3J0IHsgRXVpQ29tYm9Cb3gsIEV1aVByb3ZpZGVyIH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnkgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IFNlYXJjaEJhcldpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uIH0gZnJvbSBcIkBlbGFzdGljL2V1aS9zcmMvY29tcG9uZW50cy9jb21ib19ib3gvdHlwZXNcIjtcblxuZnVuY3Rpb24gU2VhcmNoQmFyV2lkZ2V0KHByb3BzOiBTZWFyY2hCYXJXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaSwgcXVlcnksIHNlbGVjdGlvbkNoYW5nZWRFdmVudCwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAvKipcbiAgICogc3VnZ2VzdGlvbnNcbiAgICovXG4gIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IHVzZVN0YXRlPEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+PigpO1xuXG4gIC8qKlxuICAgKiBzZWxlY3RlZCBzdWdnZXN0aW9uIChvbiBjbGljaylcbiAgICovXG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkXSA9IHVzZVN0YXRlPFxuICAgIEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+XG4gID4oW10pO1xuXG4gIC8qKlxuICAgKiBjdXJyZW50IHNlYXJjaCB2YWx1ZVxuICAgKi9cbiAgY29uc3QgW3NlYXJjaFZhbHVlLCBzZXRTZWFyY2hWYWx1ZV0gPSB1c2VTdGF0ZTxzdHJpbmc+KHF1ZXJ5KTtcblxuICBjb25zdCBvbkNoYW5nZSA9IChzZWxlY3RlZE9wdGlvbjogQXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj4pID0+IHtcbiAgICBzZXRTZWxlY3RlZChzZWxlY3RlZE9wdGlvbik7XG4gIH07XG5cbiAgY29uc3Qgb25DcmVhdGVPcHRpb24gPSAoc2VhcmNoVmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKCFub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdPcHRpb246IEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+ID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogc2VhcmNoVmFsdWUsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBzZXRTZWxlY3RlZChuZXdPcHRpb24pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBmZXRjaGVzIHN1Z2dlc3Rpb25zIHdoZW4gc2VhcmNoVmFsdWUgY2hhbmdlc1xuICAgKi9cbiAgY29uc3QgeyBpc0xvYWRpbmcgfSA9IHVzZVF1ZXJ5KFtcInN1Z2dlc3Rpb25zXCIsIHNlYXJjaFZhbHVlXSwgYXN5bmMgKCkgPT4ge1xuICAgIGlmICghc2VhcmNoVmFsdWUudHJpbSgpKSB7XG4gICAgICByZXR1cm47IC8vIEV4aXQgZWFybHkgaWYgc2VhcmNoVmFsdWUgaXMgZW1wdHlcbiAgICB9XG4gICAgcmV0dXJuIG9sc0FwaVxuICAgICAgLnN1Z2dlc3QoXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeTogc2VhcmNoVmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBwcm9wcy5wYXJhbWV0ZXJcbiAgICAgIClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UucmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzcG9uc2UuZG9jcykge1xuICAgICAgICAgIHNldE9wdGlvbnMoXG4gICAgICAgICAgICByZXNwb25zZS5yZXNwb25zZS5kb2NzLm1hcCgoc3VnZ2VzdGlvbjogYW55KSA9PiAoe1xuICAgICAgICAgICAgICBsYWJlbDogc3VnZ2VzdGlvbi5hdXRvc3VnZ2VzdCxcbiAgICAgICAgICAgICAgdHlwZTogeyBjb2xvcjogXCJ0aW50MVwiLCBpY29uVHlwZTogXCJcIiB9LFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBPbmNlIHRoZSBzZWxlY3RlZCBvcHRpb24gY2hhbmdlcywgcGFzcyB0aGUgZXZlbnQgYnkgaW52b2tpbmcgdGhlIHBhc3NlZCBmdW5jdGlvbi5cbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KFxuICAgICAgc2VsZWN0ZWRPcHRpb25zLm1hcCgoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYWJlbDogc2VsZWN0ZWRPcHRpb24ubGFiZWwsXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFtzZWxlY3RlZE9wdGlvbnNdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RXVpQ29tYm9Cb3hcbiAgICAgICAgaWQ9e1wic3VnZ2VzdFwifVxuICAgICAgICBpc0NsZWFyYWJsZVxuICAgICAgICBhcmlhLWxhYmVsPVwic2VhcmNoQmFyXCJcbiAgICAgICAgZnVsbFdpZHRoPXt0cnVlfVxuICAgICAgICBhc3luYz17dHJ1ZX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e1wiU2VhcmNoXCJ9XG4gICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICBzaW5nbGVTZWxlY3Rpb249e3RydWV9XG4gICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxuICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICBzZWxlY3RlZE9wdGlvbnM9e3NlbGVjdGVkT3B0aW9uc31cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICBvbkNyZWF0ZU9wdGlvbj17b25DcmVhdGVPcHRpb259XG4gICAgICAgIG9uU2VhcmNoQ2hhbmdlPXsoaXRlbSkgPT4ge1xuICAgICAgICAgIHNldFNlYXJjaFZhbHVlKGl0ZW0pO1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2VhcmNoQmFyKFxuICBwcm9wczogU2VhcmNoQmFyV2lkZ2V0UHJvcHMsXG4gIGNvbnRhaW5lcjogYW55LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFNlYXJjaEJhcldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkU2VhcmNoQmFyV2lkZ2V0KHByb3BzOiBTZWFyY2hCYXJXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxTZWFyY2hCYXJXaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBxdWVyeT17cHJvcHMucXVlcnl9XG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50PXtwcm9wcy5zZWxlY3Rpb25DaGFuZ2VkRXZlbnR9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgU2VhcmNoQmFyV2lkZ2V0LCBjcmVhdGVTZWFyY2hCYXIgfTtcbiIsICJpbXBvcnQge1xuICBFdWlCdXR0b25FbXB0eSxcbiAgRXVpRmxleEdyb3VwLFxuICBFdWlGbGV4SXRlbSxcbiAgRXVpRm9ybVJvdyxcbiAgRXVpSG9yaXpvbnRhbFJ1bGUsXG4gIEV1aUxvYWRpbmdTcGlubmVyLFxuICBFdWlQYW5lbCxcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aVNlbGVjdGFibGUsXG4gIEV1aVNlbGVjdGFibGVPcHRpb24sXG4gIEV1aVNwYWNlcixcbiAgRXVpU3dpdGNoLFxuICBFdWlUYWJsZVBhZ2luYXRpb24sXG4gIEV1aVRleHQsXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnkgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBNZXRhZGF0YUNvbXBhY3QgfSBmcm9tIFwiLi9NZXRhZGF0YUNvbXBhY3RcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVXaWRnZXQgfSBmcm9tIFwiLi4vQXV0b2NvbXBsZXRlV2lkZ2V0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgU2VhcmNoQmFyV2lkZ2V0IH0gZnJvbSBcIi4uL1NlYXJjaEJhcldpZGdldFwiO1xuXG5jb25zdCBERUZBVUxUX0lOSVRJQUxfSVRFTVNfUEVSX1BBR0UgPSAxMDtcbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMgPSBbMTAsIDI1LCA1MCwgMTAwXTtcblxuZnVuY3Rpb24gU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQocHJvcHM6IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBxdWVyeSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgaW5pdGlhbEl0ZW1zUGVyUGFnZSA9IERFRkFVTFRfSU5JVElBTF9JVEVNU19QRVJfUEFHRSxcbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyxcbiAgICB0YXJnZXRMaW5rLFxuICAgIHByZXNlbGVjdGVkLFxuICAgIHVzZUxlZ2FjeSA9IHRydWUsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlKHF1ZXJ5KTtcbiAgY29uc3QgW2FjdGl2ZVBhZ2UsIHNldEFjdGl2ZVBhZ2VdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtwYWdlQ291bnQsIHNldFBhZ2VDb3VudF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2l0ZW1zUGVyUGFnZSwgc2V0SXRlbXNQZXJQYWdlXSA9IHVzZVN0YXRlKGluaXRpYWxJdGVtc1BlclBhZ2UpO1xuICBjb25zdCBbdG90YWxJdGVtcywgc2V0VG90YWxJdGVtc10gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2V4YWN0TWF0Y2gsIHNldEV4YWN0TWF0Y2hdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd09ic29sZXRlVGVybXMsIHNldFNob3dPYnNvbGV0ZVRlcm1zXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2ZpbHRlckJ5VHlwZU9wdGlvbnMsIHNldEZpbHRlckJ5VHlwZU9wdGlvbnNdID0gdXNlU3RhdGU8XG4gICAgRXVpU2VsZWN0YWJsZU9wdGlvbltdXG4gID4oW10pO1xuICBjb25zdCBbZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsIHNldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zXSA9IHVzZVN0YXRlPFxuICAgIEV1aVNlbGVjdGFibGVPcHRpb25bXVxuICA+KFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNlYXJjaFZhbHVlKHF1ZXJ5KTtcbiAgfSwgW3F1ZXJ5XSk7XG5cbiAgZnVuY3Rpb24gdXBkYXRlRmlsdGVyT3B0aW9ucyhcbiAgICBjdXJyZW50T3B0aW9uczogRXVpU2VsZWN0YWJsZU9wdGlvbltdLFxuICAgIG9wdGlvbkNvdW50czogYW55W10sXG4gICAgc2V0T3B0aW9uczogRnVuY3Rpb24sXG4gICAgcmVuZGVyPzogKHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZ1xuICApIHtcbiAgICBpZiAoY3VycmVudE9wdGlvbnMubGVuZ3RoID09IDApIHtcbiAgICAgIHNldE9wdGlvbnMoXG4gICAgICAgIG9wdGlvbkNvdW50cy5yZWR1Y2UoXG4gICAgICAgICAgKFxuICAgICAgICAgICAgYWNjdW11bGF0b3I6IGFueVtdLFxuICAgICAgICAgICAgY3VycmVudFZhbHVlOiBzdHJpbmcsXG4gICAgICAgICAgICBjdXJyZW50SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgIGFycmF5OiBhbnlbXVxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAlIDIgPT09IDApIHtcbiAgICAgICAgICAgICAgYWNjdW11bGF0b3IucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHJlbmRlciA/IHJlbmRlcihjdXJyZW50VmFsdWUpIDogY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIGtleTogY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIGFwcGVuZDogXCIoXCIgKyBhcnJheVtjdXJyZW50SW5kZXggKyAxXSArIFwiKVwiLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBhcnJheVtjdXJyZW50SW5kZXggKyAxXSA9PSAwLFxuICAgICAgICAgICAgICAgIGRhdGE6IHsgdG90YWxDb3VudDogYXJyYXlbY3VycmVudEluZGV4ICsgMV0gfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdPcHRpb25zOiBFdWlTZWxlY3RhYmxlT3B0aW9uW10gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbmV3T3B0aW9ucy5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnRPcHRpb25zW2ldKSk7IC8vIHVzaW5nIE9iamVjdC5hc3NpZ24gdG8gcGFzcyBieSB2YWx1ZSwgbm90IGJ5IHJlZmVyZW5jZVxuICAgICAgfVxuXG4gICAgICBvcHRpb25Db3VudHMuZm9yRWFjaChcbiAgICAgICAgKGN1cnJlbnRWYWx1ZTogc3RyaW5nLCBjdXJyZW50SW5kZXg6IG51bWJlciwgYXJyYXk6IGFueVtdKSA9PiB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAlIDIgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IG5ld09wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmtleSA9PSBjdXJyZW50VmFsdWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICAgIG9wdGlvbi5hcHBlbmQgPSBcIihcIiArIGFycmF5W2N1cnJlbnRJbmRleCArIDFdO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgb3B0aW9uLmRhdGEgJiZcbiAgICAgICAgICAgICAgICBhcnJheVtjdXJyZW50SW5kZXggKyAxXSA8IG9wdGlvbi5kYXRhLnRvdGFsQ291bnRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLmFwcGVuZCArPSBcIi9cIiArIG9wdGlvbi5kYXRhLnRvdGFsQ291bnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3B0aW9uLmFwcGVuZCArPSBcIilcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBzZXRPcHRpb25zKG5ld09wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpbHRlclNlbGVjdGVkT3B0aW9ucyA9IChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+XG4gICAgb3B0aW9uLmNoZWNrZWQgPT09IFwib25cIjtcblxuICBjb25zdCB7XG4gICAgZGF0YTogc2VhcmNoUmVzdWx0cyxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3IsXG4gIH0gPSB1c2VRdWVyeShcbiAgICBbXG4gICAgICBcInNlYXJjaFJlc3VsdHNcIixcbiAgICAgIGFwaSxcbiAgICAgIHNlYXJjaFZhbHVlLFxuICAgICAgZXhhY3RNYXRjaCxcbiAgICAgIHNob3dPYnNvbGV0ZVRlcm1zLFxuICAgICAgYWN0aXZlUGFnZSxcbiAgICAgIGl0ZW1zUGVyUGFnZSxcbiAgICAgIGZpbHRlckJ5VHlwZU9wdGlvbnNcbiAgICAgICAgLmZpbHRlcihmaWx0ZXJTZWxlY3RlZE9wdGlvbnMpXG4gICAgICAgIC5tYXAoKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmtleSksXG4gICAgICBmaWx0ZXJCeU9udG9sb2d5T3B0aW9uc1xuICAgICAgICAuZmlsdGVyKGZpbHRlclNlbGVjdGVkT3B0aW9ucylcbiAgICAgICAgLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5KSxcbiAgICAgIHBhcmFtZXRlcixcbiAgICBdLFxuICAgIGFzeW5jICh7IHNpZ25hbCB9KSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpXG4gICAgICAgIC5zZWFyY2goXG4gICAgICAgICAge1xuICAgICAgICAgICAgcXVlcnk6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgZXhhY3RNYXRjaDogZXhhY3RNYXRjaCxcbiAgICAgICAgICAgIHNob3dPYnNvbGV0ZVRlcm1zOiBzaG93T2Jzb2xldGVUZXJtcyxcbiAgICAgICAgICAgIHR5cGVzOiBmaWx0ZXJCeVR5cGVPcHRpb25zXG4gICAgICAgICAgICAgIC5maWx0ZXIoZmlsdGVyU2VsZWN0ZWRPcHRpb25zKVxuICAgICAgICAgICAgICAubWFwKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkpXG4gICAgICAgICAgICAgIC5qb2luKFwiLFwiKSxcbiAgICAgICAgICAgIG9udG9sb2d5OiBmaWx0ZXJCeU9udG9sb2d5T3B0aW9uc1xuICAgICAgICAgICAgICAuZmlsdGVyKGZpbHRlclNlbGVjdGVkT3B0aW9ucylcbiAgICAgICAgICAgICAgLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5KVxuICAgICAgICAgICAgICAuam9pbihcIixcIiksXG4gICAgICAgICAgICBncm91cEJ5SXJpOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFnZTogYWN0aXZlUGFnZS50b1N0cmluZygpLFxuICAgICAgICAgICAgc2l6ZTogaXRlbXNQZXJQYWdlLnRvU3RyaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgcHJvcHMucGFyYW1ldGVyLFxuICAgICAgICAgIHNpZ25hbFxuICAgICAgICApXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc3BvbnNlW1wicmVzcG9uc2VcIl0gJiZcbiAgICAgICAgICAgIHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJkb2NzXCJdICE9IG51bGwgJiZcbiAgICAgICAgICAgIHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJudW1Gb3VuZFwiXSAhPSBudWxsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdICYmXG4gICAgICAgICAgICAgIHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdW1widHlwZVwiXSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZUZpbHRlck9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJCeVR5cGVPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJ0eXBlXCJdLFxuICAgICAgICAgICAgICAgICAgc2V0RmlsdGVyQnlUeXBlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50VmFsdWU6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICAgICAgYCR7Y3VycmVudFZhbHVlWzBdLnRvVXBwZXJDYXNlKCl9JHtjdXJyZW50VmFsdWUuc2xpY2UoMSl9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcIm9udG9sb2d5X25hbWVcIl0pIHtcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZUZpbHRlck9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcIm9udG9sb2d5X25hbWVcIl0sXG4gICAgICAgICAgICAgICAgICAgIHNldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAoY3VycmVudFZhbHVlOiBzdHJpbmcpID0+IGN1cnJlbnRWYWx1ZS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJvbnRvbG9neUlkXCJdKSB7XG4gICAgICAgICAgICAgICAgICB1cGRhdGVGaWx0ZXJPcHRpb25zKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJvbnRvbG9neUlkXCJdLFxuICAgICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRWYWx1ZTogc3RyaW5nKSA9PiBjdXJyZW50VmFsdWUudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0VG90YWxJdGVtcyhyZXNwb25zZVtcInJlc3BvbnNlXCJdW1wibnVtRm91bmRcIl0pO1xuICAgICAgICAgICAgY29uc3QgbmV3UGFnZUNvdW50ID0gTWF0aC5jZWlsKFxuICAgICAgICAgICAgICByZXNwb25zZVtcInJlc3BvbnNlXCJdW1wibnVtRm91bmRcIl0gLyBpdGVtc1BlclBhZ2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzZXRQYWdlQ291bnQobmV3UGFnZUNvdW50KTtcbiAgICAgICAgICAgIGlmIChhY3RpdmVQYWdlID49IG5ld1BhZ2VDb3VudCkge1xuICAgICAgICAgICAgICBzZXRBY3RpdmVQYWdlKDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzcG9uc2UuZG9jcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBBUEkgcmVzcG9uc2VcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHtcbiAgICAgIGtlZXBQcmV2aW91c0RhdGE6IHRydWUsXG4gICAgfSAvLyBTZWU6IGh0dHBzOi8vcmVhY3QtcXVlcnktdjMudGFuc3RhY2suY29tL2d1aWRlcy9wYWdpbmF0ZWQtcXVlcmllc1xuICApO1xuXG4gIGZ1bmN0aW9uIG9uQ2hhbmdlSXRlbXNQZXJQYWdlKG5ld0l0ZW1zUGVyUGFnZTogbnVtYmVyKSB7XG4gICAgc2V0QWN0aXZlUGFnZShcbiAgICAgIE1hdGguZmxvb3IoKGFjdGl2ZVBhZ2UgKiBpdGVtc1BlclBhZ2UgKyAxKSAvIG5ld0l0ZW1zUGVyUGFnZSlcbiAgICApO1xuICAgIHNldEl0ZW1zUGVyUGFnZShuZXdJdGVtc1BlclBhZ2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlRXhhY3RNYXRjaCgpIHtcbiAgICBzZXRFeGFjdE1hdGNoKCFleGFjdE1hdGNoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZVNob3dPYnNvbGV0ZVRlcm1zKCkge1xuICAgIHNldFNob3dPYnNvbGV0ZVRlcm1zKCFzaG93T2Jzb2xldGVUZXJtcyk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckZpbHRlcihcbiAgICBjdXJyZW50T3B0aW9uczogRXVpU2VsZWN0YWJsZU9wdGlvbltdLFxuICAgIHNldE9wdGlvbnM6IEZ1bmN0aW9uXG4gICkge1xuICAgIGNvbnN0IG5ld09wdGlvbnMgPSBbLi4uY3VycmVudE9wdGlvbnNdO1xuICAgIHNldE9wdGlvbnMoXG4gICAgICBuZXdPcHRpb25zLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiAoe1xuICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgIGNoZWNrZWQ6IHVuZGVmaW5lZCxcbiAgICAgIH0pKVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckFsbEZpbHRlcnMoKSB7XG4gICAgY2xlYXJGaWx0ZXIoZmlsdGVyQnlUeXBlT3B0aW9ucywgc2V0RmlsdGVyQnlUeXBlT3B0aW9ucyk7XG4gICAgY2xlYXJGaWx0ZXIoZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsIHNldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybV90b19zZWFyY2hWYWx1ZShcbiAgICBzZWxlY3RlZE9wdGlvbjoge1xuICAgICAgbGFiZWw6IHN0cmluZztcbiAgICAgIGlyaT86IHN0cmluZztcbiAgICAgIG9udG9sb2d5X25hbWU/OiBzdHJpbmc7XG4gICAgICB0eXBlPzogc3RyaW5nO1xuICAgIH1bXVxuICApIHtcbiAgICBzZXRTZWFyY2hWYWx1ZShzZWxlY3RlZE9wdGlvblswXSA/IHNlbGVjdGVkT3B0aW9uWzBdLmxhYmVsIDogXCJcIik7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U2VhcmNoQmFyV2lkZ2V0XG4gICAgICAgIGFwaT17YXBpfVxuICAgICAgICBxdWVyeT17XCJcIn1cbiAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50PXsoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgICAgICB0cmFuc2Zvcm1fdG9fc2VhcmNoVmFsdWUoc2VsZWN0ZWRPcHRpb24pO1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInhsXCIgLz5cbiAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIiAvPlxuXG4gICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17M30gc3R5bGU9e3sgbWluV2lkdGg6IDI1MCB9fT5cbiAgICAgICAgICA8RXVpUGFuZWw+XG4gICAgICAgICAgICB7aXNTdWNjZXNzICYmIChcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgdHlwZVwiPlxuICAgICAgICAgICAgICAgIDxFdWlTZWxlY3RhYmxlXG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXtmaWx0ZXJCeVR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEZpbHRlckJ5VHlwZU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBsaXN0UHJvcHM9e3sgYm9yZGVyZWQ6IHRydWUgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7KGxpc3QpID0+IGxpc3R9XG4gICAgICAgICAgICAgICAgPC9FdWlTZWxlY3RhYmxlPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2lzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IHR5cGVcIj5cbiAgICAgICAgICAgICAgICA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2lzRXJyb3IgJiYgKFxuICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSB0eXBlXCI+XG4gICAgICAgICAgICAgICAgPEV1aVNlbGVjdGFibGVcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e1tdfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEZpbHRlckJ5VHlwZU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBsaXN0UHJvcHM9e3sgYm9yZGVyZWQ6IHRydWUgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7KGxpc3QpID0+IGxpc3R9XG4gICAgICAgICAgICAgICAgPC9FdWlTZWxlY3RhYmxlPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7aXNTdWNjZXNzICYmIChcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgb250b2xvZ3lcIj5cbiAgICAgICAgICAgICAgICA8RXVpU2VsZWN0YWJsZVxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17ZmlsdGVyQnlPbnRvbG9neU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBsaXN0UHJvcHM9e3sgYm9yZGVyZWQ6IHRydWUgfX1cbiAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7KGxpc3QsIHNlYXJjaCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgIHtzZWFyY2h9XG4gICAgICAgICAgICAgICAgICAgICAge2xpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0V1aVNlbGVjdGFibGU+XG4gICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgb250b2xvZ3lcIj5cbiAgICAgICAgICAgICAgICA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2lzRXJyb3IgJiYgKFxuICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSBvbnRvbG9neVwiPlxuICAgICAgICAgICAgICAgIDxFdWlTZWxlY3RhYmxlXG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXtbXX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIGxpc3RQcm9wcz17eyBib3JkZXJlZDogdHJ1ZSB9fVxuICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHsobGlzdCwgc2VhcmNoKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAge3NlYXJjaH1cbiAgICAgICAgICAgICAgICAgICAgICB7bGlzdH1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvRXVpU2VsZWN0YWJsZT5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPEV1aUJ1dHRvbkVtcHR5IG9uQ2xpY2s9e2NsZWFyQWxsRmlsdGVyc30+XG4gICAgICAgICAgICAgIENsZWFyIGFsbCBmaWx0ZXJzXG4gICAgICAgICAgICA8L0V1aUJ1dHRvbkVtcHR5PlxuICAgICAgICAgIDwvRXVpUGFuZWw+XG4gICAgICAgIDwvRXVpRmxleEl0ZW0+XG5cbiAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9ezd9PlxuICAgICAgICAgIDxFdWlQYW5lbCBjb2xvcj1cInRyYW5zcGFyZW50XCIgZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgPEV1aUZsZXhHcm91cD5cbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfT5cbiAgICAgICAgICAgICAgICA8RXVpU3dpdGNoXG4gICAgICAgICAgICAgICAgICBsYWJlbD1cIkV4YWN0IG1hdGNoXCJcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2V4YWN0TWF0Y2h9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dG9nZ2xlRXhhY3RNYXRjaH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPEV1aVN3aXRjaFxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJTaG93IG9ubHkgb2Jzb2xldGUgdGVybXNcIlxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17c2hvd09ic29sZXRlVGVybXN9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dG9nZ2xlU2hvd09ic29sZXRlVGVybXN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDwvRXVpRmxleEdyb3VwPlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJtXCIgLz5cblxuICAgICAgICAgICAgPEV1aVRleHQgc2l6ZT1cInhzXCIgc3R5bGU9e3sgcGFkZGluZzogXCIwIDhweFwiIH19PlxuICAgICAgICAgICAgICBTaG93aW5nIHtNYXRoLm1pbihhY3RpdmVQYWdlICogaXRlbXNQZXJQYWdlICsgMSwgdG90YWxJdGVtcyl9IHRve1wiIFwifVxuICAgICAgICAgICAgICB7TWF0aC5taW4oKGFjdGl2ZVBhZ2UgKyAxKSAqIGl0ZW1zUGVyUGFnZSwgdG90YWxJdGVtcyl9IG9me1wiIFwifVxuICAgICAgICAgICAgICB7dG90YWxJdGVtc30gcmVzdWx0c1xuICAgICAgICAgICAgPC9FdWlUZXh0PlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIgLz5cblxuICAgICAgICAgICAgPEV1aUhvcml6b250YWxSdWxlIG1hcmdpbj1cIm5vbmVcIiBzdHlsZT17eyBoZWlnaHQ6IDIgfX0gLz5cblxuICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG5cbiAgICAgICAgICAgIDxFdWlUYWJsZVBhZ2luYXRpb25cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlYXJjaCByZXN1bHQgcGFnaW5hdGlvblwiXG4gICAgICAgICAgICAgIHBhZ2VDb3VudD17cGFnZUNvdW50fVxuICAgICAgICAgICAgICBhY3RpdmVQYWdlPXthY3RpdmVQYWdlfVxuICAgICAgICAgICAgICBvbkNoYW5nZVBhZ2U9e3NldEFjdGl2ZVBhZ2V9XG4gICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZT17aXRlbXNQZXJQYWdlfVxuICAgICAgICAgICAgICBvbkNoYW5nZUl0ZW1zUGVyUGFnZT17b25DaGFuZ2VJdGVtc1BlclBhZ2V9XG4gICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnM9e2l0ZW1zUGVyUGFnZU9wdGlvbnN9XG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIgLz5cblxuICAgICAgICAgICAge3NlYXJjaFJlc3VsdHMgJiZcbiAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdDogYW55KSA9PiAoXG4gICAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17cmVzdWx0LmlkfT5cbiAgICAgICAgICAgICAgICAgIDxNZXRhZGF0YUNvbXBhY3RcbiAgICAgICAgICAgICAgICAgICAgYXBpPXthcGl9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdD17cmVzdWx0fVxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRMaW5rPXt0YXJnZXRMaW5rfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxFdWlTcGFjZXIgLz5cbiAgICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0V1aVBhbmVsPlxuICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0KFxuICBwcm9wczogU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBhbnksXG4gIGNhbGxiYWNrPzogKCkgPT4gdm9pZFxuKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0KHByb3BzOiBTZWFyY2hSZXN1bHRzTGlzdFdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgcXVlcnk9e3Byb3BzLnF1ZXJ5fVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIGluaXRpYWxJdGVtc1BlclBhZ2U9e3Byb3BzLmluaXRpYWxJdGVtc1BlclBhZ2V9XG4gICAgICAgICAgaXRlbXNQZXJQYWdlT3B0aW9ucz17cHJvcHMuaXRlbXNQZXJQYWdlT3B0aW9uc31cbiAgICAgICAgICB0YXJnZXRMaW5rPXtwcm9wcy50YXJnZXRMaW5rfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0LCBjcmVhdGVTZWFyY2hSZXN1bHRzTGlzdCB9O1xuIiwgImltcG9ydCB7XG4gIEV1aUNhcmQsXG4gIEV1aUZsZXhHcm91cCxcbiAgRXVpRmxleEl0ZW0sXG4gIEV1aVNwYWNlcixcbiAgRXVpVGl0bGUsXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIEJyZWFkY3J1bWJXaWRnZXQsXG4gIERlc2NyaXB0aW9uV2lkZ2V0LFxuICBJcmlXaWRnZXQsXG59IGZyb20gXCIuLi9NZXRhZGF0YVdpZGdldFwiO1xuaW1wb3J0IHsgTWV0YWRhdGFDb21wYWN0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBwbHVyYWxpemVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5cbmZ1bmN0aW9uIE1ldGFkYXRhQ29tcGFjdChwcm9wczogTWV0YWRhdGFDb21wYWN0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGksIHJlc3VsdCwgdGFyZ2V0TGluaywgLi4ucmVzdCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpQ2FyZFxuICAgICAgdGV4dEFsaWduPVwibGVmdFwiXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIGhyZWY9e1xuICAgICAgICB0YXJnZXRMaW5rXG4gICAgICAgICAgPyByZXN1bHQudHlwZSAhPSBcIm9udG9sb2d5XCJcbiAgICAgICAgICAgID8gdGFyZ2V0TGluayArXG4gICAgICAgICAgICAgIFwib250b2xvZ2llcy9cIiArXG4gICAgICAgICAgICAgIHJlc3VsdC5vbnRvbG9neV9uYW1lICtcbiAgICAgICAgICAgICAgXCIvXCIgK1xuICAgICAgICAgICAgICBwbHVyYWxpemVUeXBlKHJlc3VsdC50eXBlLCB0cnVlKSArXG4gICAgICAgICAgICAgIFwiP2lyaT1cIiArXG4gICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChyZXN1bHQuaXJpKVxuICAgICAgICAgICAgOiB0YXJnZXRMaW5rICsgXCJvbnRvbG9naWVzL1wiICsgcmVzdWx0Lm9udG9sb2d5X25hbWVcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgdGl0bGU9e1xuICAgICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICA8RXVpVGl0bGU+XG4gICAgICAgICAgICAgIDxoMj57cmVzdWx0LmxhYmVsfTwvaDI+XG4gICAgICAgICAgICA8L0V1aVRpdGxlPlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAge3Jlc3VsdC50eXBlICE9IFwib250b2xvZ3lcIiAmJiAoXG4gICAgICAgICAgICAgIDxCcmVhZGNydW1iV2lkZ2V0XG4gICAgICAgICAgICAgICAgYXBpPXthcGl9XG4gICAgICAgICAgICAgICAgaXJpPXtyZXN1bHQuaXJpfVxuICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Jlc3VsdC50eXBlfVxuICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Jlc3VsdC5vbnRvbG9neV9uYW1lfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgIH1cbiAgICA+XG4gICAgICB7cmVzdWx0LnR5cGUgIT0gXCJvbnRvbG9neVwiID8gPElyaVdpZGdldCBpcmk9e3Jlc3VsdC5pcml9IC8+IDogdW5kZWZpbmVkfVxuICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG4gICAgICA8RGVzY3JpcHRpb25XaWRnZXRcbiAgICAgICAgYXBpPXthcGl9XG4gICAgICAgIG9udG9sb2d5SWQ9e3Jlc3VsdC5vbnRvbG9neV9uYW1lfVxuICAgICAgICBpcmk9e3Jlc3VsdC5pcml9XG4gICAgICAgIHRoaW5nVHlwZT17cmVzdWx0LnR5cGV9XG4gICAgICAvPlxuICAgIDwvRXVpQ2FyZD5cbiAgKTtcbn1cblxuZXhwb3J0IHsgTWV0YWRhdGFDb21wYWN0IH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtcbiAgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5LFxuICBzaW5ndWxhcml6ZVR5cGUsXG59IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgRW50aXR5T250b0xpc3RXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vRW50aXR5T250b0xpc3RQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi9zdHlsZS90c3NTdHlsZXMuY3NzXCI7XG5pbXBvcnQgeyBFbnRpdHlUeXBlTmFtZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuXG4vLyBUT0RPOiBleGNsdWRlIG9udG9sb2dpZXMgaW4gd2hpY2ggdGhlIGVudGl0eSBpcyBkZWZpbmVkIGZyb20gdGhlIGJhZGdlIGxpc3RcbmZ1bmN0aW9uIEVudGl0eU9udG9MaXN0V2lkZ2V0KHByb3BzOiBFbnRpdHlPbnRvTGlzdFdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5LCBjbGFzc05hbWUgfSA9XG4gICAgcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNTdWNjZXNzLCBpc0Vycm9yLCBlcnJvciB9ID0gdXNlUXVlcnk8e1xuICAgIG9udG9MaXN0OiBzdHJpbmdbXTtcbiAgICBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZTtcbiAgICBsYWJlbDogc3RyaW5nO1xuICB9PihcbiAgICBbXCJlbnRpdHlPbnRvTGlzdFwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBvbnRvbGlzdDogc3RyaW5nW107XG4gICAgICBsZXQgcmVhbEVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lO1xuICAgICAgbGV0IGxhYmVsOiBzdHJpbmc7XG4gICAgICBpZiAodXNlTGVnYWN5KSB7XG4gICAgICAgIGNvbnN0IGVtYmVkZGVkID0gKFxuICAgICAgICAgIGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlSZXNwb25zZShcbiAgICAgICAgICAgIGlyaSxcbiAgICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgICApXG4gICAgICAgIClbXCJfZW1iZWRkZWRcIl07XG5cbiAgICAgICAgLy8gb2J0YWluIGRlZmluZWRCeSB0byBmaWx0ZXIgdGhlc2Ugb3V0IG9mIG9udG9saXN0XG4gICAgICAgIGNvbnN0IGRlZmluZWRCeSA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1cbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKGVudGl0eUluT250b2xvZ3k6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3k6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pO1xuXG4gICAgICAgIG9udG9saXN0ID0gZW1iZWRkZWRbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXVxuICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3k6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pXG4gICAgICAgICAgLmZpbHRlcigoZWxlbTogYW55KSA9PiAhZGVmaW5lZEJ5LmluY2x1ZGVzKGVsZW0pKTtcbiAgICAgICAgcmVhbEVudGl0eVR5cGUgPVxuICAgICAgICAgIGVudGl0eVR5cGUgfHxcbiAgICAgICAgICAoc2luZ3VsYXJpemVUeXBlKE9iamVjdC5rZXlzKGVtYmVkZGVkKVswXSkgYXMgRW50aXR5VHlwZU5hbWUpO1xuICAgICAgICBsYWJlbCA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1bMF1bXCJsYWJlbFwiXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoXG4gICAgICAgICAgaXJpLFxuICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICk7XG4gICAgICAgIG9udG9saXN0ID0gZW50aXR5XG4gICAgICAgICAgLmdldEFwcGVhcnNJbigpXG4gICAgICAgICAgLmZpbHRlcigoZWxlbTogYW55KSA9PiAhZW50aXR5LmdldERlZmluZWRCeSgpLmluY2x1ZGVzKGVsZW0pKTtcbiAgICAgICAgcmVhbEVudGl0eVR5cGUgPSBlbnRpdHlUeXBlIHx8IChlbnRpdHkuZ2V0VHlwZSgpIGFzIEVudGl0eVR5cGVOYW1lKTtcbiAgICAgICAgbGFiZWwgPSBlbnRpdHkuZ2V0TGFiZWwoKSB8fCBcIlwiO1xuICAgICAgfVxuICAgICAgb250b2xpc3QgPSBvbnRvbGlzdC5maWx0ZXIoKG9udG86IHN0cmluZykgPT4gb250byAhPSBvbnRvbG9neUlkKS5zb3J0KCk7XG4gICAgICByZXR1cm4geyBvbnRvTGlzdDogb250b2xpc3QsIGVudGl0eVR5cGU6IHJlYWxFbnRpdHlUeXBlLCBsYWJlbDogbGFiZWwgfTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmIChcbiAgICAgICAgPEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uXG4gICAgICAgICAgb250b2xpc3Q9e2RhdGEub250b0xpc3R9XG4gICAgICAgICAgZW50aXR5VHlwZT17ZGF0YS5lbnRpdHlUeXBlfVxuICAgICAgICAgIGxhYmVsPXtkYXRhLmxhYmVsfVxuICAgICAgICAgIGlyaT17aXJpfVxuICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIChcbiAgICAgICAgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJvbnRvbG9neSBsaXN0XCIpfTwvRXVpVGV4dD5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVudGl0eU9udG9MaXN0KFxuICBwcm9wczogRW50aXR5T250b0xpc3RXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEVudGl0eU9udG9MaXN0V2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRFbnRpdHlPbnRvTGlzdFdpZGdldChwcm9wczogRW50aXR5T250b0xpc3RXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiIGdsb2JhbFN0eWxlcz17ZmFsc2V9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxFbnRpdHlPbnRvTGlzdFdpZGdldFxuICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRW50aXR5T250b0xpc3RXaWRnZXQsIGNyZWF0ZUVudGl0eU9udG9MaXN0IH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtcbiAgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5LFxuICBzaW5ndWxhcml6ZVR5cGUsXG59IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgRW50aXR5RGVmaW5lZEJ5V2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9FbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi9zdHlsZS90c3NTdHlsZXMuY3NzXCI7XG5pbXBvcnQgeyBFbnRpdHlUeXBlTmFtZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuXG5mdW5jdGlvbiBFbnRpdHlEZWZpbmVkQnlXaWRnZXQocHJvcHM6IEVudGl0eURlZmluZWRCeVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5LCBjbGFzc05hbWUgfSA9XG4gICAgcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNTdWNjZXNzLCBpc0Vycm9yLCBlcnJvciB9ID0gdXNlUXVlcnk8e1xuICAgIG9udG9MaXN0OiBzdHJpbmdbXTtcbiAgICBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZTtcbiAgICBsYWJlbDogc3RyaW5nO1xuICB9PihcbiAgICBbXCJlbnRpdHlEZWZpbmVkQnlcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgb250b2xpc3Q6IHN0cmluZ1tdO1xuICAgICAgbGV0IHJlYWxFbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZTtcbiAgICAgIGxldCBsYWJlbDogc3RyaW5nO1xuICAgICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgICBjb25zdCBlbWJlZGRlZCA9IChcbiAgICAgICAgICBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5UmVzcG9uc2UoXG4gICAgICAgICAgICBpcmksXG4gICAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICAgKVxuICAgICAgICApW1wiX2VtYmVkZGVkXCJdO1xuICAgICAgICBvbnRvbGlzdCA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1cbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKGVudGl0eUluT250b2xvZ3k6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3k6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pO1xuICAgICAgICByZWFsRW50aXR5VHlwZSA9XG4gICAgICAgICAgZW50aXR5VHlwZSB8fFxuICAgICAgICAgIChzaW5ndWxhcml6ZVR5cGUoT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdKSBhcyBFbnRpdHlUeXBlTmFtZSk7XG4gICAgICAgIGxhYmVsID0gZW1iZWRkZWRbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXVswXVtcImxhYmVsXCJdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gYXdhaXQgb2xzQXBpLmdldEVudGl0eU9iamVjdChcbiAgICAgICAgICBpcmksXG4gICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgKTtcbiAgICAgICAgb250b2xpc3QgPSBlbnRpdHlcbiAgICAgICAgICAuZ2V0RGVmaW5lZEJ5KClcbiAgICAgICAgICAuZmlsdGVyKChvbnRvbG9neSkgPT4gb250b2xvZ3kgIT0gZW50aXR5LmdldE9udG9sb2d5SWQoKSk7XG4gICAgICAgIHJlYWxFbnRpdHlUeXBlID0gZW50aXR5VHlwZSB8fCAoZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZSk7XG4gICAgICAgIGxhYmVsID0gZW50aXR5LmdldExhYmVsKCkgfHwgXCJcIjtcbiAgICAgIH1cbiAgICAgIG9udG9saXN0ID0gb250b2xpc3Quc29ydCgpO1xuICAgICAgcmV0dXJuIHsgb250b0xpc3Q6IG9udG9saXN0LCBlbnRpdHlUeXBlOiByZWFsRW50aXR5VHlwZSwgbGFiZWw6IGxhYmVsIH07XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiAoXG4gICAgICAgIDxFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb25cbiAgICAgICAgICBvbnRvbGlzdD17ZGF0YS5vbnRvTGlzdH1cbiAgICAgICAgICBlbnRpdHlUeXBlPXtkYXRhLmVudGl0eVR5cGV9XG4gICAgICAgICAgbGFiZWw9e2RhdGEubGFiZWx9XG4gICAgICAgICAgaXJpPXtpcml9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIC8+fVxuICAgICAge2lzRXJyb3IgJiYgKFxuICAgICAgICA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcIm9udG9sb2d5IGxpc3RcIil9PC9FdWlUZXh0PlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW50aXR5RGVmaW5lZEJ5KFxuICBwcm9wczogRW50aXR5RGVmaW5lZEJ5V2lkZ2V0UHJvcHMsXG4gIGNvbnRhaW5lcjogRWxlbWVudCxcbiAgY2FsbGJhY2s/OiAoKSA9PiB2b2lkXG4pIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRFbnRpdHlEZWZpbmVkQnlXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEVudGl0eURlZmluZWRCeVdpZGdldChwcm9wczogRW50aXR5RGVmaW5lZEJ5V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIiBnbG9iYWxTdHlsZXM9e2ZhbHNlfT5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8RW50aXR5RGVmaW5lZEJ5V2lkZ2V0XG4gICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBFbnRpdHlEZWZpbmVkQnlXaWRnZXQsIGNyZWF0ZUVudGl0eURlZmluZWRCeSB9O1xuIiwgImltcG9ydCBSZWFjdCwgeyBSZWFjdEVsZW1lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnkgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7XG4gIEV1aUNhcmQsXG4gIEV1aUZsZXhJdGVtLFxuICBFdWlMb2FkaW5nU3Bpbm5lcixcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aVNwYWNlcixcbiAgRXVpVGV4dCxcbn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtcbiAgQ2xhc3MsXG4gIEVudGl0eSxcbiAgSW5kaXZpZHVhbCxcbiAgUHJvcGVydHksXG4gIFRoaW5nLFxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtcbiAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYLFxuICBnZXRFbnRpdHlMaW5rSlNYLFxuICBnZXRSZWlmaWVkSlNYLFxuICBnZXRTZWN0aW9uTGlzdEpTWCxcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL1N0cnVjdHVyZVJlbmRlcmluZ1wiO1xuaW1wb3J0IHtcbiAgaXNDbGFzcyxcbiAgaXNJbmRpdmlkdWFsLFxuICBpc1Byb3BlcnR5LFxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi8uLi8uLi9tb2RlbC9SZWlmaWVkXCI7XG5pbXBvcnQge1xuICBhc0FycmF5LFxuICBjYXBpdGFsaXplLFxuICBnZXRFbnRpdHlUeXBlTmFtZSxcbiAgcmFuZG9tU3RyaW5nLFxufSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgREVGQVVMVF9IQVNfVElUTEUgPSB0cnVlO1xuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgdHlwZSBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGluZGl2aWR1YWxcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbFR5cGVzU2VjdGlvbkpTWChcbiAgaW5kaXZpZHVhbDogSW5kaXZpZHVhbCxcbiAgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzXG4pOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCB0eXBlcyA9IGluZGl2aWR1YWxcbiAgICAuZ2V0UmRmVHlwZXMoKVxuICAgIC5maWx0ZXIoXG4gICAgICAoZWxlbTogc3RyaW5nKSA9PlxuICAgICAgICBlbGVtICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI05hbWVkSW5kaXZpZHVhbFwiICYmXG4gICAgICAgICFlbGVtLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpXG4gICAgKTtcblxuICBpZiAoaW5kaXZpZHVhbC5nZXRSZGZUeXBlcygpLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICA8Yj5UeXBlPC9iPlxuICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1goXG4gICAgICAgICAgaW5kaXZpZHVhbCxcbiAgICAgICAgICBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgdHlwZXMsXG4gICAgICAgICAgcHJvcHMuc2hvd0JhZGdlcyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgIH1cbiAgICAgICAgKX1cbiAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgc2FtZSBhcyBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGluZGl2aWR1YWxcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbFNhbWVBc1NlY3Rpb25KU1goXG4gIGluZGl2aWR1YWw6IEluZGl2aWR1YWwsXG4gIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wc1xuKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2FtZUFzID0gaW5kaXZpZHVhbC5nZXRTYW1lQXMoKTtcblxuICBpZiAoc2FtZUFzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICA8Yj5TYW1lIEFzPC9iPlxuICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1goXG4gICAgICAgICAgaW5kaXZpZHVhbCxcbiAgICAgICAgICBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgc2FtZUFzLFxuICAgICAgICAgIHByb3BzLnNob3dCYWRnZXMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICB9XG4gICAgICAgICl9XG4gICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGRpZmZlcmVudCBmcm9tIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gaW5kaXZpZHVhbFxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRJbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb25KU1goXG4gIGluZGl2aWR1YWw6IEluZGl2aWR1YWwsXG4gIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wc1xuKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGlmZmVyZW50RnJvbSA9IGluZGl2aWR1YWwuZ2V0RGlmZmVyZW50RnJvbSgpO1xuXG4gIGlmIChkaWZmZXJlbnRGcm9tLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPEV1aVNwYWNlciAvPlxuICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgPGI+RGlmZmVyZW50IGZyb208L2I+XG4gICAgICAgICAge2dldFNlY3Rpb25MaXN0SlNYKFxuICAgICAgICAgICAgaW5kaXZpZHVhbCxcbiAgICAgICAgICAgIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSxcbiAgICAgICAgICAgIGRpZmZlcmVudEZyb20sXG4gICAgICAgICAgICBwcm9wcy5zaG93QmFkZ2VzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LFxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApfVxuICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgZGlzam9pbnQgd2l0aCBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGVudGl0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXREaXNqb2ludFdpdGhTZWN0aW9uSlNYKFxuICBlbnRpdHk6IFByb3BlcnR5IHwgQ2xhc3MsXG4gIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wc1xuKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGlzam9pbnRXaXRoID0gZW50aXR5LmdldERpc2pvaW50V2l0aCgpO1xuXG4gIGlmIChkaXNqb2ludFdpdGgubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgIDxiPkRpc2pvaW50IHdpdGg8L2I+XG4gICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChcbiAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgZW50aXR5LmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgZGlzam9pbnRXaXRoLFxuICAgICAgICAgIHByb3BzLnNob3dCYWRnZXMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICB9XG4gICAgICAgICl9XG4gICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGludmVyc2Ugb2Ygc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUludmVyc2VPZlNlY3Rpb25KU1goXG4gIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzXG4pOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBpbnZlcnNlT2ZzID0gcHJvcGVydHkuZ2V0SW52ZXJzZU9mKCk7XG5cbiAgaWYgKGludmVyc2VPZnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgIDxiPkludmVyc2Ugb2Y8L2I+XG4gICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChcbiAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgIGludmVyc2VPZnMsXG4gICAgICAgICAgcHJvcHMuc2hvd0JhZGdlcyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgIH1cbiAgICAgICAgKX1cbiAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyBvbmUgcHJvcGVydHkgY2hhaW4gSlNYIGVsZW1lbnQuIElzIHVzZWQgZm9yIHtAbGluayBnZXRQcm9wZXJ0eUNoYWluU2VjdGlvbkpTWH0uXG4gKiBAcGFyYW0gcHJvcGVydHlDaGFpbiB0aGUgcHJvcGVydHkgY2hhaW5cbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BzICAgICB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnRbXX0gdGhlIGNoYWlucyBKU1ggZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUNoYWluSlNYKFxuICBwcm9wZXJ0eUNoYWluOiBhbnlbXSxcbiAgcHJvcGVydHk6IFByb3BlcnR5LFxuICBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHNcbik6IFJlYWN0RWxlbWVudFtdIHtcbiAgcmV0dXJuIGFzQXJyYXkocHJvcGVydHlDaGFpbilcbiAgICAuc2xpY2UoKVxuICAgIC5yZXZlcnNlKClcbiAgICAubWFwKChwcm9wZXJ0eUV4cHIsIGkpID0+IHtcbiAgICAgIC8vIHVzaW5nIC5zbGljZSgpIGhlcmUgaXMgaW1wb3J0YW50IGJlY2F1c2UgYSBtdXRhdGlvbiBvZiBwcm9wZXJ0eUNoYWluIHdvdWxkIHRyaWdnZXIgYSB1c2VRdWVyeSgpXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBrZXk9e3Byb3BlcnR5RXhwcn0+XG4gICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSxcbiAgICAgICAgICAgIHByb3BlcnR5RXhwcixcbiAgICAgICAgICAgIHByb3BzLnNob3dCYWRnZXMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICl9XG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIHtpIDwgYXNBcnJheShwcm9wZXJ0eUNoYWluKS5sZW5ndGggLSAxICYmIChcbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIiB9fT5cbiAgICAgICAgICAgICAgICAmbmJzcDsmIzk2NjY7Jm5ic3A7XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBwcm9wZXJ0eSBjaGFpbnMgc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUNoYWluU2VjdGlvbkpTWChcbiAgcHJvcGVydHk6IFByb3BlcnR5LFxuICBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHNcbik6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHByb3BlcnR5Q2hhaW5zID0gcHJvcGVydHlcbiAgICAuZ2V0UHJvcGVydHlDaGFpbnMoKVxuICAgIC5tYXAoKHJlaWZpZWQ6IFJlaWZpZWQ8YW55PikgPT4gcmVpZmllZC52YWx1ZSk7XG5cbiAgY29uc3QgaGFzTXVsdGlwbGVDaGFpbnMgPVxuICAgIHByb3BlcnR5Q2hhaW5zLmZpbHRlcigoZWxlbTogYW55KSA9PiBBcnJheS5pc0FycmF5KGVsZW0pKS5sZW5ndGggPiAwO1xuXG4gIGlmIChwcm9wZXJ0eUNoYWlucy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgPGI+eyFoYXNNdWx0aXBsZUNoYWlucyA/IFwiUHJvcGVydHkgY2hhaW5cIiA6IFwiUHJvcGVydHkgY2hhaW5zXCJ9PC9iPlxuICAgICAgICB7IWhhc011bHRpcGxlQ2hhaW5zID8gKFxuICAgICAgICAgIDxwPntnZXRQcm9wZXJ0eUNoYWluSlNYKHByb3BlcnR5Q2hhaW5zLCBwcm9wZXJ0eSwgcHJvcHMpfTwvcD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICB7cHJvcGVydHlDaGFpbnMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0UHJvcGVydHlDaGFpbkpTWChpdGVtLCBwcm9wZXJ0eSwgcHJvcHMpfVxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGVxdWl2YWxlbnQgdG8gc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBlbnRpdHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0RW50aXR5RXF1aXZhbGVudFRvU2VjdGlvbkpTWChcbiAgZW50aXR5OiBQcm9wZXJ0eSB8IENsYXNzLFxuICBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHNcbik6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGVxdWl2YWxlbnRzID0gZW50aXR5LmdldEVxdWl2YWxlbnRzKCk7XG5cbiAgaWYgKGVxdWl2YWxlbnRzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICA8Yj5FcXVpdmFsZW50IHRvPC9iPlxuICAgICAgICB7ZXF1aXZhbGVudHMubGVuZ3RoID09PSAxID8gKFxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAge2dldFJlaWZpZWRKU1goZW50aXR5LCBlcXVpdmFsZW50c1swXSwgcHJvcHMuc2hvd0JhZGdlcywge1xuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LFxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICB7ZXF1aXZhbGVudHMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0UmVpZmllZEpTWChlbnRpdHksIGl0ZW0sIHByb3BzLnNob3dCYWRnZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHN1YmVudGl0eSBvZiBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGVudGl0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRTdWJFbnRpdHlPZlNlY3Rpb25KU1goXG4gIGVudGl0eTogUHJvcGVydHkgfCBDbGFzcyxcbiAgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzXG4pOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBzdXBlckVudGl0aWVzID0gZW50aXR5LmdldFN1cGVyRW50aXRpZXMoKTtcblxuICBpZiAoc3VwZXJFbnRpdGllcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgPGI+U3Vie2VudGl0eS5nZXRUeXBlKCl9IG9mPC9iPlxuICAgICAgICB7c3VwZXJFbnRpdGllcy5sZW5ndGggPT09IDEgPyAoXG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICB7Z2V0UmVpZmllZEpTWChlbnRpdHksIHN1cGVyRW50aXRpZXNbMF0sIHByb3BzLnNob3dCYWRnZXMsIHtcbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAge3N1cGVyRW50aXRpZXMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0UmVpZmllZEpTWChlbnRpdHksIGl0ZW0sIHByb3BzLnNob3dCYWRnZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHJlbGF0ZWQgZnJvbSBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGVudGl0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRFbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb25KU1goXG4gIGVudGl0eTogUHJvcGVydHkgfCBDbGFzcyxcbiAgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzXG4pOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCByZWxhdGVkRnJvbXMgPSBlbnRpdHkuZ2V0UmVsYXRlZEZyb20oKTtcbiAgY29uc3QgcHJlZGljYXRlczogc3RyaW5nW10gPSBBcnJheS5mcm9tKFxuICAgIG5ldyBTZXQoXG4gICAgICByZWxhdGVkRnJvbXMubWFwKChlbGVtOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIGVsZW0udmFsdWVbXCJwcm9wZXJ0eVwiXTtcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIGlmIChyZWxhdGVkRnJvbXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgIDxiPlJlbGF0ZWQgZnJvbTwvYj5cbiAgICAgICAge3ByZWRpY2F0ZXMubWFwKChwKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXRMYWJlbEZvcklyaShwKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBrZXk9e3AudG9TdHJpbmcoKSArIHJhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8YSBzdHlsZT17eyBjb2xvcjogXCJibGFja1wiIH19IGhyZWY9e3B9PlxuICAgICAgICAgICAgICAgICAgPGk+e2xhYmVsIHx8IHB9PC9pPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPHVsIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogMCB9fT5cbiAgICAgICAgICAgICAgICAgIHtyZWxhdGVkRnJvbXNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZWxlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0udmFsdWVbXCJwcm9wZXJ0eVwiXSA9PT0gcDtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoZWxlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0udmFsdWVbXCJ2YWx1ZVwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5zaG93QmFkZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDxwPjwvcD5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgIDxwPjwvcD4gey8qIFdvcmtzIGFzIGVtcHR5IHNwYWNlIGxlZnQgdG8gbmV4dCBzZWN0aW9uICovfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGNsYXNzIGluc3RhbmNlcyBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIHRlcm1cbiAqIEBwYXJhbSBpbnN0YW5jZXMgYW4gYXJyYXkgb2YgdGhlIGNsYXNzZXMnIGluc3RhbmNlc1xuICogQHBhcmFtIHByb3BzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldENsYXNzSW5zdGFuY2VzU2VjdGlvbkpTWChcbiAgdGVybTogQ2xhc3MsXG4gIGluc3RhbmNlczogVGhpbmdbXSxcbiAgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzXG4pOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICBpZiAoaW5zdGFuY2VzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICB7PGI+SW5zdGFuY2VzPC9iPn1cbiAgICAgICAgPD5cbiAgICAgICAgICA8dWw+XG4gICAgICAgICAgICB7aW5zdGFuY2VzLm1hcCgoaW5zdGFuY2UpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChcbiAgICAgICAgICAgICAgICAgICAgdGVybSxcbiAgICAgICAgICAgICAgICAgICAgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5nZXRJcmkoKSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgICA8cD48L3A+XG4gICAgICAgIDwvPlxuICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIEVudGl0eVJlbGF0aW9uc1dpZGdldChwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBjb25zdCB7XG4gICAgYXBpLFxuICAgIGlyaSxcbiAgICBvbnRvbG9neUlkLFxuICAgIGhhc1RpdGxlID0gREVGQVVMVF9IQVNfVElUTEUsXG4gICAgc2hvd0JhZGdlcyxcbiAgICBlbnRpdHlUeXBlLFxuICAgIHBhcmFtZXRlcixcbiAgICBvbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgIG9uTmF2aWdhdGVUb09udG9sb2d5LFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAvKipcbiAgICogVXNlZCB0byBmZXRjaCBhbiBlbnRpdGllcycgZGF0YSB0byBiZSBzaG93biBpbiBkaWZmZXJlbnQgc2VjdGlvbnNcbiAgICovXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBlbnRpdHksXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdFbnRpdHlSZWxhdGlvbixcbiAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc0VudGl0eVJlbGF0aW9uLFxuICAgIGlzRXJyb3I6IGlzRXJyb3JFbnRpdHlSZWxhdGlvbixcbiAgfSA9IHVzZVF1ZXJ5KFxuICAgIFtcImVudGl0eUpzb25cIiwgYXBpLCBpcmksIG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIHBhcmFtZXRlciwgc2hvd0JhZGdlc10sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoXG4gICAgICAgIGlyaSxcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICBmYWxzZVxuICAgICAgKTsgLy8gYWx3YXlzIHVzZSB2Mi8gQVBJXG4gICAgfVxuICApO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGZldGNoIGEgY2xhc3NlcyBpbnN0YW5jZXMgdG8gYmUgc2hvd24gaW4gY2xhc3MgaW5zdGFuY2VzIHNlY3Rpb25cbiAgICovXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBpbnN0YW5jZXMsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdJbnN0YW5jZXMsXG4gICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NJbnN0YW5jZXMsXG4gIH0gPSB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IFtcImluc3RhbmNlc1wiLCBlbnRpdHldLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBlbnRpdHkgJiYgaXNDbGFzcyhlbnRpdHkpICYmIGVudGl0eS5oYXNEaXJlY3RDaGlsZHJlbigpXG4gICAgICAgID8gb2xzQXBpLmdldENsYXNzSW5zdGFuY2VzKGVudGl0eS5nZXRJcmkoKSwgZW50aXR5LmdldE9udG9sb2d5SWQoKSlcbiAgICAgICAgOiBbXTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhZW50aXR5LFxuICB9KTtcblxuICBmdW5jdGlvbiByZW5kZXJTZWN0aW9ucyhcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBpbnN0YW5jZXM6IEluZGl2aWR1YWxbXVxuICApOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IHNlY3Rpb25MaXN0OiBSZWFjdEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgaWYgKGlzSW5kaXZpZHVhbChlbnRpdHkpKSB7XG4gICAgICBjb25zdCBpbmRpdmlkdWFsVHlwZXNTZWN0aW9uID0gZ2V0SW5kaXZpZHVhbFR5cGVzU2VjdGlvbkpTWChcbiAgICAgICAgZW50aXR5LFxuICAgICAgICBwcm9wc1xuICAgICAgKTtcbiAgICAgIGlmIChpbmRpdmlkdWFsVHlwZXNTZWN0aW9uICE9IHVuZGVmaW5lZClcbiAgICAgICAgc2VjdGlvbkxpc3QucHVzaChpbmRpdmlkdWFsVHlwZXNTZWN0aW9uKTtcblxuICAgICAgY29uc3QgaW5kaXZpZHVhbFNhbWVBc1NlY3Rpb24gPSBnZXRJbmRpdmlkdWFsU2FtZUFzU2VjdGlvbkpTWChcbiAgICAgICAgZW50aXR5LFxuICAgICAgICBwcm9wc1xuICAgICAgKTtcbiAgICAgIGlmIChpbmRpdmlkdWFsU2FtZUFzU2VjdGlvbiAhPSB1bmRlZmluZWQpXG4gICAgICAgIHNlY3Rpb25MaXN0LnB1c2goaW5kaXZpZHVhbFNhbWVBc1NlY3Rpb24pO1xuXG4gICAgICBjb25zdCBpbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb24gPVxuICAgICAgICBnZXRJbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICBpZiAoaW5kaXZpZHVhbERpZmZlcmVudEZyb21TZWN0aW9uICE9IHVuZGVmaW5lZClcbiAgICAgICAgc2VjdGlvbkxpc3QucHVzaChpbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb24pO1xuICAgIH1cbiAgICBpZiAoaXNQcm9wZXJ0eShlbnRpdHkpIHx8IGlzQ2xhc3MoZW50aXR5KSkge1xuICAgICAgY29uc3QgZGlzam9pbnRXaXRoU2VjdGlvbiA9IGdldERpc2pvaW50V2l0aFNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICBpZiAoZGlzam9pbnRXaXRoU2VjdGlvbiAhPSB1bmRlZmluZWQpXG4gICAgICAgIHNlY3Rpb25MaXN0LnB1c2goZGlzam9pbnRXaXRoU2VjdGlvbik7XG4gICAgfVxuICAgIGlmIChpc1Byb3BlcnR5KGVudGl0eSkpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbiA9IGdldFByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbkpTWChcbiAgICAgICAgZW50aXR5LFxuICAgICAgICBwcm9wc1xuICAgICAgKTtcbiAgICAgIGlmIChwcm9wZXJ0eUludmVyc2VPZlNlY3Rpb24gIT0gdW5kZWZpbmVkKVxuICAgICAgICBzZWN0aW9uTGlzdC5wdXNoKHByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbik7XG5cbiAgICAgIGNvbnN0IHByb3BlcnR5Q2hhaW5TZWN0aW9uID0gZ2V0UHJvcGVydHlDaGFpblNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICBpZiAocHJvcGVydHlDaGFpblNlY3Rpb24gIT0gdW5kZWZpbmVkKVxuICAgICAgICBzZWN0aW9uTGlzdC5wdXNoKHByb3BlcnR5Q2hhaW5TZWN0aW9uKTtcbiAgICB9XG4gICAgaWYgKGlzUHJvcGVydHkoZW50aXR5KSB8fCBpc0NsYXNzKGVudGl0eSkpIHtcbiAgICAgIGNvbnN0IGVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb24gPSBnZXRFbnRpdHlFcXVpdmFsZW50VG9TZWN0aW9uSlNYKFxuICAgICAgICBlbnRpdHksXG4gICAgICAgIHByb3BzXG4gICAgICApO1xuICAgICAgaWYgKGVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb24gIT0gdW5kZWZpbmVkKVxuICAgICAgICBzZWN0aW9uTGlzdC5wdXNoKGVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb24pO1xuXG4gICAgICBjb25zdCBzdWJFbnRpdHlPZlNlY3Rpb24gPSBnZXRTdWJFbnRpdHlPZlNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICBpZiAoc3ViRW50aXR5T2ZTZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChzdWJFbnRpdHlPZlNlY3Rpb24pO1xuXG4gICAgICBjb25zdCBlbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb24gPSBnZXRFbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb25KU1goXG4gICAgICAgIGVudGl0eSxcbiAgICAgICAgcHJvcHNcbiAgICAgICk7XG4gICAgICBpZiAoZW50aXR5UmVsYXRlZEZyb21TZWN0aW9uICE9IHVuZGVmaW5lZClcbiAgICAgICAgc2VjdGlvbkxpc3QucHVzaChlbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb24pO1xuICAgIH1cbiAgICBpZiAoaXNDbGFzcyhlbnRpdHkpKSB7XG4gICAgICBjb25zdCBjbGFzc0luc3RhbmNlc1NlY3Rpb24gPSBnZXRDbGFzc0luc3RhbmNlc1NlY3Rpb25KU1goXG4gICAgICAgIGVudGl0eSxcbiAgICAgICAgaW5zdGFuY2VzLFxuICAgICAgICBwcm9wc1xuICAgICAgKTtcbiAgICAgIGlmIChjbGFzc0luc3RhbmNlc1NlY3Rpb24gIT0gdW5kZWZpbmVkKVxuICAgICAgICBzZWN0aW9uTGlzdC5wdXNoKGNsYXNzSW5zdGFuY2VzU2VjdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHNlY3Rpb25MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiA8RXVpVGV4dCB7Li4ucmVzdH0+e3NlY3Rpb25MaXN0fTwvRXVpVGV4dD47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiA8RXVpVGV4dCB7Li4ucmVzdH0+Tm8gcmVsYXRpb25zIGF2YWlsYWJsZS48L0V1aVRleHQ+O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxFdWlDYXJkXG4gICAgICAgIHRpdGxlPXtcbiAgICAgICAgICBoYXNUaXRsZVxuICAgICAgICAgICAgPyAoZW50aXR5VHlwZVxuICAgICAgICAgICAgICAgID8gY2FwaXRhbGl6ZShnZXRFbnRpdHlUeXBlTmFtZShlbnRpdHlUeXBlKSlcbiAgICAgICAgICAgICAgICA6IGlzU3VjY2Vzc0VudGl0eVJlbGF0aW9uICYmIGVudGl0eVxuICAgICAgICAgICAgICAgID8gY2FwaXRhbGl6ZShlbnRpdHkuZ2V0VHlwZSgpKVxuICAgICAgICAgICAgICAgIDogXCJcIikgKyBcIiBSZWxhdGlvbnNcIlxuICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgIH1cbiAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICA+XG4gICAgICAgIHsoaXNMb2FkaW5nRW50aXR5UmVsYXRpb24gfHwgaXNMb2FkaW5nSW5zdGFuY2VzKSAmJiAoXG4gICAgICAgICAgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9e1wic1wifSAvPlxuICAgICAgICApfVxuICAgICAgICB7aXNFcnJvckVudGl0eVJlbGF0aW9uICYmIChcbiAgICAgICAgICA8RXVpVGV4dD5SZXF1ZXN0ZWQgcmVzb3VyY2Ugbm90IGF2YWlsYWJsZTwvRXVpVGV4dD5cbiAgICAgICAgKX1cbiAgICAgICAge2lzU3VjY2Vzc0VudGl0eVJlbGF0aW9uICYmXG4gICAgICAgICAgaXNTdWNjZXNzSW5zdGFuY2VzICYmXG4gICAgICAgICAgZW50aXR5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBpbnN0YW5jZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHJlbmRlclNlY3Rpb25zKGVudGl0eSwgaW5zdGFuY2VzKX1cbiAgICAgIDwvRXVpQ2FyZD5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW50aXR5UmVsYXRpb25zKFxuICBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMsXG4gIGNvbnRhaW5lcjogRWxlbWVudCxcbiAgY2FsbGJhY2s/OiAoKSA9PiB2b2lkXG4pIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRFbnRpdHlSZWxhdGlvbnNXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEVudGl0eVJlbGF0aW9uc1dpZGdldChwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8RW50aXR5UmVsYXRpb25zV2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICBoYXNUaXRsZT17cHJvcHMuaGFzVGl0bGV9XG4gICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICBzaG93QmFkZ2VzPXtwcm9wcy5zaG93QmFkZ2VzfVxuICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e3Byb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBjcmVhdGVFbnRpdHlSZWxhdGlvbnMsIEVudGl0eVJlbGF0aW9uc1dpZGdldCB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBUZXJtRGVwaWN0aW9uV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgdXNlUXVlcnksIFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyIH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge1xuICBFdWlMb2FkaW5nU3Bpbm5lcixcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aVRleHQsXG4gIEV1aUltYWdlLFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcblxuZnVuY3Rpb24gVGVybURlcGljdGlvbldpZGdldChwcm9wczogVGVybURlcGljdGlvbldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgYXBpLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeSB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNTdWNjZXNzLCBpc0Vycm9yLCBlcnJvciB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcInRlcm1EZXBpY3Rpb25cIiwgYXBpLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChpcmksIFwiY2xhc3NcIiwgb250b2xvZ3lJZCwgXCJcIiwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPn1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiBkYXRhLmdldERlcGljdGlvblVybCgpICYmIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8RXVpSW1hZ2VcbiAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgIGhhc1NoYWRvd1xuICAgICAgICAgICAgYWxsb3dGdWxsU2NyZWVuXG4gICAgICAgICAgICBhbHQ9e2RhdGEuZ2V0RGVwaWN0aW9uVXJsKCl9XG4gICAgICAgICAgICBzcmM9e2RhdGEuZ2V0RGVwaWN0aW9uVXJsKCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIDxzbWFsbD5DbGljayB0byBleHBhbmQuPC9zbWFsbD5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvPlxuICAgICAgKX1cbiAgICAgIHtpc0Vycm9yICYmIChcbiAgICAgICAgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJkZXBpY3Rpb25cIil9PC9FdWlUZXh0PlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVwaWN0aW9uKFxuICBwcm9wczogVGVybURlcGljdGlvbldpZGdldFByb3BzLFxuICBjb250YWluZXI6IEVsZW1lbnQsXG4gIGNhbGxiYWNrPzogKCkgPT4gdm9pZFxuKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkVGVybURlcGljdGlvbldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkVGVybURlcGljdGlvbldpZGdldChwcm9wczogVGVybURlcGljdGlvbldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPFRlcm1EZXBpY3Rpb25XaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZURlcGljdGlvbiwgVGVybURlcGljdGlvbldpZGdldCB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IEdyYXBoVmlld1dpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IHVzZVF1ZXJ5LCBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aUxvYWRpbmdTcGlubmVyLFxuICBFdWlUZXh0LFxuICBFdWlCdXR0b24sXG4gIEV1aVBhbmVsLFxuICBFdWlTd2l0Y2gsXG4gIEV1aVBvcG92ZXIsXG4gIEV1aUJ1dHRvbkVtcHR5LFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBOZXR3b3JrIH0gZnJvbSBcInZpcy1uZXR3b3JrXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcInZpcy1kYXRhXCI7XG5pbXBvcnQgeyBPbHNHcmFwaE5vZGUsIE9sc0dyYXBoRWRnZSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgSlNUcmVlTm9kZSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9zdHlsZS90czRuZmRpU3R5bGVzL3RzNG5mZGlHcmFwaFN0eWxlLmNzc1wiO1xuXG5mdW5jdGlvbiBHcmFwaFZpZXdXaWRnZXQocHJvcHM6IEdyYXBoVmlld1dpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgYXBpLCBpcmksIG9udG9sb2d5SWQsIHJvb3RXYWxrLCBjbGFzc05hbWUgfSA9IHByb3BzO1xuXG4gIGNvbnN0IFtzZWxlY3RlZElyaSwgc2V0U2VsZWN0ZWRJcmldID0gdXNlU3RhdGUoaXJpKTtcbiAgY29uc3QgW2ZpcnN0TG9hZCwgc2V0Rmlyc3RMb2FkXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZGJjbGlja2VkLCBzZXREYmNsaWNrZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcm9vdFdhbGtJc1NlbGVjdGVkLCBzZXRSb290V2Fsa0lzU2VsZWN0ZWRdID0gdXNlU3RhdGUoXG4gICAgcm9vdFdhbGsgPyByb290V2FsayA6IGZhbHNlXG4gICk7XG4gIGNvbnN0IFtpc1BvcG92ZXJPcGVuLCBzZXRJc1BvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAvLyBuZWVkZWQgZm9yIHVzZVF1ZXJ5LiB3aXRob3V0IGl0IHRoZSBncmFwaCB3b24ndCBnZXQgdXBkYXRlZCBvbiBzd2l0Y2hpbmcgYmVyd2VlbiByb290V2Fsaz10cnVlIGFuZCBmYWxzZS5cbiAgY29uc3QgW2NvdW50ZXIsIHNldENvdW50ZXJdID0gdXNlU3RhdGUoMCk7XG5cbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuICBjb25zdCBmaW5hbENsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcInRzNG5mZGktZ3JhcGgtc3R5bGVcIjtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNFcnJvciwgZXJyb3IgfSA9IHVzZVF1ZXJ5KFxuICAgIFtcbiAgICAgIFwidGVybUdyYXBoXCIsXG4gICAgICBhcGksXG4gICAgICBzZWxlY3RlZElyaSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICByb290V2Fsa0lzU2VsZWN0ZWQsXG4gICAgICBkYmNsaWNrZWQsXG4gICAgICBjb3VudGVyLFxuICAgIF0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHJvb3RXYWxrSXNTZWxlY3RlZCAmJiBmaXJzdExvYWQpIHtcbiAgICAgICAgLy8gb25seSB1c2UgdGhpcyBjYWxsIG9uIGxvYWQuIERvdWJsZSBja2lja2luZyBvbiBhIG5vZGUgc2hvdWxkIGNhbGwgdGhlIG5vcm1hbCBnZXRUZXJtUmVsYXRpb25zIGZ1bmN0aW9uLlxuICAgICAgICByZXR1cm4gb2xzQXBpLmdldFRlcm1UcmVlKFxuICAgICAgICAgIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgdGVybUlyaTogaXJpIH0sXG4gICAgICAgICAgeyB2aWV3TW9kZTogXCJBbGxcIiwgc2libGluZ3M6IGZhbHNlIH0sXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChmaXJzdExvYWQgfHwgZGJjbGlja2VkKSB7XG4gICAgICAgIHJldHVybiBvbHNBcGkuZ2V0VGVybVJlbGF0aW9ucyh7XG4gICAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgICAgICB0ZXJtSXJpOiBzZWxlY3RlZElyaSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIGNvbnN0IG5vZGVzID0gdXNlUmVmKG5ldyBEYXRhU2V0KFtdKSk7XG4gIGNvbnN0IGVkZ2VzID0gdXNlUmVmKG5ldyBEYXRhU2V0KFtdKSk7XG4gIGNvbnN0IGdyYXBoTmV0d29yayA9IHVzZVJlZih7fSk7XG4gIGNvbnN0IGNvbnRhaW5lciA9IHVzZVJlZihudWxsKTtcblxuICBjb25zdCBncmFwaE5ldHdvcmtDb25maWcgPSB7XG4gICAgLyoqXG4gICAgICogZm9yIG1vcmUgb3B0aW9ucyBoYXZlIGEgbG9vayBhdDogaHR0cHM6Ly92aXNqcy5naXRodWIuaW8vdmlzLW5ldHdvcmsvZG9jcy9uZXR3b3JrLyNvcHRpb25zXG4gICAgICovXG4gICAgYXV0b1Jlc2l6ZTogdHJ1ZSxcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBsb2NhbGU6IFwiZW5cIixcbiAgICBsYXlvdXQ6IHtcbiAgICAgIHJhbmRvbVNlZWQ6IDEsXG4gICAgICBpbXByb3ZlZExheW91dDogdHJ1ZSxcbiAgICAgIGNsdXN0ZXJUaHJlc2hvbGQ6IDE1MCxcbiAgICB9LFxuICAgIHBoeXNpY3M6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBiYXJuZXNIdXQ6IHtcbiAgICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiAtMjAwMDAsXG4gICAgICAgIGNlbnRyYWxHcmF2aXR5OiAwLjMsXG4gICAgICAgIHNwcmluZ0xlbmd0aDogMTAsXG4gICAgICAgIHNwcmluZ0NvbnN0YW50OiAwLjA0LFxuICAgICAgICBkYW1waW5nOiAwLjA5LFxuICAgICAgICBhdm9pZE92ZXJsYXA6IDAsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgY2xhc3MgR3JhcGhOb2RlIHtcbiAgICBpZD86IHN0cmluZztcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBjb2xvcjoge1xuICAgICAgYmFja2dyb3VuZDogc3RyaW5nO1xuICAgICAgaGlnaGxpZ2h0OiB7XG4gICAgICAgIGJvcmRlcjogc3RyaW5nO1xuICAgICAgICBiYWNrZ3JvdW5kOiBzdHJpbmc7XG4gICAgICB9O1xuICAgIH07XG4gICAgc2hhcGU6IHN0cmluZztcbiAgICBmb250OiB7XG4gICAgICBjb2xvcjogc3RyaW5nO1xuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcih7IG5vZGUgfTogT2xzR3JhcGhOb2RlKSB7XG4gICAgICAvKipcbiAgICAgICAqIGZvciBtb3JlIG9wdGlvbnMgaGF2ZSBhIGxvb2sgYXQ6IGh0dHBzOi8vdmlzanMuZ2l0aHViLmlvL3Zpcy1uZXR3b3JrL2RvY3MvbmV0d29yay9ub2Rlcy5odG1sXG4gICAgICAgKi9cbiAgICAgIHRoaXMuaWQgPSBub2RlW1wiaXJpXCJdO1xuICAgICAgdGhpcy5sYWJlbCA9IG5vZGVbXCJsYWJlbFwiXTtcbiAgICAgIHRoaXMuY29sb3IgPSB7XG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzQ1NTQ2OVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHtcbiAgICAgICAgICBib3JkZXI6IFwiIzQwNDA0MFwiLFxuICAgICAgICAgIGJhY2tncm91bmQ6IFwiIzQwNDA0MFwiLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIHRoaXMuc2hhcGUgPSBcImJveFwiO1xuICAgICAgdGhpcy5mb250ID0ge1xuICAgICAgICBjb2xvcjogXCJ3aGl0ZVwiLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBjbGFzcyBHcmFwaEVkZ2Uge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGZyb20/OiBzdHJpbmc7XG4gICAgdG8/OiBzdHJpbmc7XG4gICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgYXJyb3dzPzoge1xuICAgICAgdG8/OiBib29sZWFuO1xuICAgIH07XG4gICAgd2lkdGg/OiBudW1iZXI7XG4gICAgY29sb3I/OiB7XG4gICAgICBjb2xvcj86IHN0cmluZztcbiAgICAgIGhpZ2hsaWdodD86IHN0cmluZztcbiAgICB9O1xuICAgIGZvbnQ/OiB7XG4gICAgICBzaXplPzogbnVtYmVyO1xuICAgIH07XG4gICAgZGFzaGVzPzogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHsgZWRnZSB9OiBPbHNHcmFwaEVkZ2UpIHtcbiAgICAgIGlmIChlZGdlW1wic291cmNlXCJdICYmIGVkZ2VbXCJ0YXJnZXRcIl0gJiYgZWRnZVtcInVyaVwiXSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogZm9yIG1vcmUgb3B0aW9ucyBoYXZlIGEgbG9vayBhdDogaHR0cHM6Ly92aXNqcy5naXRodWIuaW8vdmlzLW5ldHdvcmsvZG9jcy9uZXR3b3JrL2VkZ2VzLmh0bWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaWQgPSBlZGdlW1wic291cmNlXCJdICsgZWRnZVtcInRhcmdldFwiXSArIFwiJnVyaT1cIiArIGVkZ2VbXCJ1cmlcIl07XG4gICAgICAgIHRoaXMuZnJvbSA9IGVkZ2VbXCJzb3VyY2VcIl07XG4gICAgICAgIHRoaXMudG8gPSBlZGdlW1widGFyZ2V0XCJdO1xuICAgICAgICB0aGlzLmxhYmVsID0gZWRnZVtcImxhYmVsXCJdO1xuICAgICAgICB0aGlzLmFycm93cyA9IHsgdG86IHRydWUgfTtcbiAgICAgICAgdGhpcy53aWR0aCA9IDI7XG4gICAgICAgIHRoaXMuY29sb3IgPSB7XG4gICAgICAgICAgY29sb3I6IFwiZ3JheVwiLFxuICAgICAgICAgIGhpZ2hsaWdodDogXCIjMDA2MTdDXCIsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZm9udCA9IHtcbiAgICAgICAgICBzaXplOiAxNixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VG9PbHNHcmFwaEZvcm1hdChsaXN0T2ZKc1RyZWVOb2RlczogQXJyYXk8SlNUcmVlTm9kZT4pIHtcbiAgICAvLyB1c2VkIGZvciBjb252ZXJ0aW5nIHRoZSBsaXN0IG9mIGFuY2VzdG9ycyB0byB0aGUgb2xzIGFwaSBncmFwaCBlbmRwb2ludHMgZm9ybWF0LiB0byBiZSBjb25zdW1lZCBieSBHcmFwaE5vZGUgYW5kIEdyYXBoRWRnZSBjbGFzc2VzIGNvbnN0cnVjdG9yLlxuICAgIC8vIGN1cnJlbnRseSB1c2VkIGluIHNob3dpbmcgYW5jZXN0b3JzLiBFcXVpdmFsZW50IHRvIGlzLWEgcmVsYXRpb24uXG4gICAgbGV0IGRhdGE6IHsgbm9kZXM6IGFueVtdOyBlZGdlczogYW55W10gfSA9IHsgbm9kZXM6IFtdLCBlZGdlczogW10gfTtcbiAgICBsaXN0T2ZKc1RyZWVOb2Rlcy5tYXAoKHRyZWVOb2RlOiBKU1RyZWVOb2RlKSA9PiB7XG4gICAgICBpZiAoIWRhdGEubm9kZXMuZmluZCgob2JqKSA9PiBvYmouaXJpID09PSB0cmVlTm9kZS5pcmkpKSB7XG4gICAgICAgIGxldCBub2RlID0geyBpcmk6IHRyZWVOb2RlLmlyaSwgbGFiZWw6IHRyZWVOb2RlLnRleHQgfTtcbiAgICAgICAgZGF0YS5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgICAgbGV0IHBhcmVudE5vZGUgPSBsaXN0T2ZKc1RyZWVOb2Rlcy5maW5kKFxuICAgICAgICAob2JqOiBKU1RyZWVOb2RlKSA9PiBvYmouaWQgPT09IHRyZWVOb2RlLnBhcmVudFxuICAgICAgKTtcbiAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgIC8vIHBhcmVudCBkb2VzIG5vdCBleGlzdHMgLS0+ICcjJyBpZCB0aGF0IGluZGljYXRlcyBhIG5vZGUgaXMgYSByb290LlxuICAgICAgICBsZXQgZWRnZSA9IHtcbiAgICAgICAgICBzb3VyY2U6IHRyZWVOb2RlLmlyaSxcbiAgICAgICAgICB0YXJnZXQ6IHBhcmVudE5vZGUuaXJpLFxuICAgICAgICAgIGxhYmVsOiBcInN1YkNsYXNzT2ZcIixcbiAgICAgICAgICB1cmk6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YkNsYXNzT2ZcIixcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFkYXRhLmVkZ2VzLmZpbmQoXG4gICAgICAgICAgICAob2JqKSA9PiBvYmouc291cmNlID09PSBlZGdlLnNvdXJjZSAmJiBvYmoudGFyZ2V0ID09PSBlZGdlLnRhcmdldFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGF0YS5lZGdlcy5wdXNoKGVkZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBpZiAoZGF0YSAmJiAoZmlyc3RMb2FkIHx8IGRiY2xpY2tlZCkpIHtcbiAgICBsZXQgZ0RhdGEgPSBkYXRhO1xuICAgIGlmIChyb290V2Fsa0lzU2VsZWN0ZWQgJiYgZmlyc3RMb2FkKSB7XG4gICAgICBnRGF0YSA9IGNvbnZlcnRUb09sc0dyYXBoRm9ybWF0KGRhdGEpO1xuICAgIH1cbiAgICBmb3IgKGxldCBub2RlIG9mIGdEYXRhW1wibm9kZXNcIl0pIHtcbiAgICAgIGxldCBnTm9kZSA9IG5ldyBHcmFwaE5vZGUoeyBub2RlOiBub2RlIH0pO1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICBpZiAoIW5vZGVzLmN1cnJlbnQuZ2V0KGdOb2RlLmlkKSkge1xuICAgICAgICBpZiAoZ05vZGUuaWQgPT09IGlyaSAmJiByb290V2Fsa0lzU2VsZWN0ZWQpIHtcbiAgICAgICAgICBnTm9kZS5jb2xvci5iYWNrZ3JvdW5kID0gXCIjMEJCQkVGXCI7XG4gICAgICAgICAgZ05vZGUuZm9udC5jb2xvciA9IFwiYmxhY2tcIjtcbiAgICAgICAgfVxuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgbm9kZXMuY3VycmVudC5hZGQoZ05vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBlZGdlIG9mIGdEYXRhW1wiZWRnZXNcIl0pIHtcbiAgICAgIGxldCBnRWRnZSA9IG5ldyBHcmFwaEVkZ2UoeyBlZGdlOiBlZGdlIH0pO1xuICAgICAgbGV0IGRhc2hlZCA9XG4gICAgICAgIGVkZ2UudXJpID09PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCIgfHxcbiAgICAgICAgcm9vdFdhbGtJc1NlbGVjdGVkXG4gICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgIDogdHJ1ZTtcbiAgICAgIGdFZGdlLmRhc2hlcyA9IGRhc2hlZDtcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgaWYgKCFlZGdlcy5jdXJyZW50LmdldChnRWRnZS5pZCkpIHtcbiAgICAgICAgaWYgKGdFZGdlLmlkPy5pbmNsdWRlcyhpcmkpICYmIHJvb3RXYWxrSXNTZWxlY3RlZCkge1xuICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgIGdFZGdlLmNvbG9yLmNvbG9yID0gXCJibGFja1wiO1xuICAgICAgICB9XG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICBlZGdlcy5jdXJyZW50LmFkZChnRWRnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmaXJzdExvYWQpIHtcbiAgICAgIHNldEZpcnN0TG9hZChmYWxzZSk7XG4gICAgfVxuICAgIGlmIChkYmNsaWNrZWQpIHtcbiAgICAgIHNldERiY2xpY2tlZChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgbm9kZXMuY3VycmVudC5jbGVhcigpO1xuICAgIGVkZ2VzLmN1cnJlbnQuY2xlYXIoKTtcbiAgICBzZXRTZWxlY3RlZElyaShpcmkpO1xuICAgIHNldEZpcnN0TG9hZCh0cnVlKTtcbiAgICBzZXREYmNsaWNrZWQoZmFsc2UpO1xuICAgIHNldENvdW50ZXIoY291bnRlciArIDEpO1xuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgZ3JhcGhEYXRhID0geyBub2Rlczogbm9kZXMuY3VycmVudCwgZWRnZXM6IGVkZ2VzLmN1cnJlbnQgfTtcbiAgICAvL0B0cy1pZ25vcmVcbiAgICBncmFwaE5ldHdvcmsuY3VycmVudCA9IG5ldyBOZXR3b3JrKFxuICAgICAgY29udGFpbmVyLmN1cnJlbnQsXG4gICAgICBncmFwaERhdGEsXG4gICAgICBncmFwaE5ldHdvcmtDb25maWdcbiAgICApO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZ3JhcGhOZXR3b3JrLmN1cnJlbnQpIHtcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgZ3JhcGhOZXR3b3JrLmN1cnJlbnQub24oXCJkb3VibGVDbGlja1wiLCBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIGlmIChwYXJhbXMubm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxldCBub2RlSXJpID0gcGFyYW1zLm5vZGVzWzBdO1xuICAgICAgICAgIHNldFNlbGVjdGVkSXJpKG5vZGVJcmkpO1xuICAgICAgICAgIHNldERiY2xpY2tlZCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbZ3JhcGhOZXR3b3JrXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBsb2FkIHRoZSBncmFwaCBkYXRhIGFnYWluIHdoZW4gdGhlIHVzZXIgY2hhbmdlIHRoZSBtb2RlIHRvIHJvb3RXYWxrIGFuZCB2aWNlIHZlcnNhIE9SIGlucHV0IHByb3BzIGNoYW5nZXMuXG4gICAgcmVzZXQoKTtcbiAgfSwgW3Jvb3RXYWxrSXNTZWxlY3RlZCwgYXBpLCBvbnRvbG9neUlkLCBpcmldKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIHdoZW4gdXNlciBjaGFuZ2UgdGhlIHN0b3J5Ym9vayByb290V2FsayB2YWx1ZVxuICAgIHNldFJvb3RXYWxrSXNTZWxlY3RlZChyb290V2FsayA/IHJvb3RXYWxrIDogZmFsc2UpO1xuICB9LCBbcm9vdFdhbGtdKTtcblxuICBjb25zdCBvbkJ1dHRvbkNsaWNrID0gKCkgPT5cbiAgICBzZXRJc1BvcG92ZXJPcGVuKChpc1BvcG92ZXJPcGVuKSA9PiAhaXNQb3BvdmVyT3Blbik7XG4gIGNvbnN0IGNsb3NlUG9wb3ZlciA9ICgpID0+IHNldElzUG9wb3Zlck9wZW4oZmFsc2UpO1xuXG4gIGNvbnN0IGJ1dHRvbiA9IChcbiAgICA8RXVpQnV0dG9uRW1wdHlcbiAgICAgIGljb25UeXBlPVwiaUluQ2lyY2xlXCJcbiAgICAgIGljb25TaWRlPVwicmlnaHRcIlxuICAgICAgb25DbGljaz17b25CdXR0b25DbGlja31cbiAgICA+XG4gICAgICBHdWlkZSBtZVxuICAgIDwvRXVpQnV0dG9uRW1wdHk+XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PlxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJncmFwaFwiKX08L0V1aVRleHQ+fVxuICAgICAgPEV1aVBhbmVsIHN0eWxlPXt7IGZvbnRTaXplOiAxMiB9fSBwYWRkaW5nU2l6ZT1cInNcIiBib3JkZXJSYWRpdXM9XCJub25lXCI+XG4gICAgICAgIDxFdWlCdXR0b24gc2l6ZT1cInNcIiBvbkNsaWNrPXtyZXNldH0+XG4gICAgICAgICAgUmVzZXRcbiAgICAgICAgPC9FdWlCdXR0b24+XG4gICAgICAgIDxFdWlQb3BvdmVyXG4gICAgICAgICAgYnV0dG9uPXtidXR0b259XG4gICAgICAgICAgaXNPcGVuPXtpc1BvcG92ZXJPcGVufVxuICAgICAgICAgIGNsb3NlUG9wb3Zlcj17Y2xvc2VQb3BvdmVyfVxuICAgICAgICA+XG4gICAgICAgICAgPEV1aVRleHQgc3R5bGU9e3sgd2lkdGg6IDMwMCwgcGFkZGluZzogMTAgfX0+XG4gICAgICAgICAgICA8bGk+WW91IGNhbiBleHBhbmQgdGhlIG5vZGVzIGJ5IGRvdWJsZSBjbGlja2luZyBvbiB0aGVtPC9saT5cbiAgICAgICAgICAgIDxsaT5Zb3UgY2FuIHpvb20gb3V0L2luIGJ5IHNjcm9sbGluZyBvbiB0aGUgZ3JhcGguPC9saT5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgWW91IGNhbiBnbyBiYWNrIHRvIHRoZSBpbml0aWFsIGdyYXBoIGJ5IGNsaWNraW5nIG9uIHRoZSBSZXNldFxuICAgICAgICAgICAgICBidXR0b24uXG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpPllvdSBjYW4gbW92ZSB0aGUgbm9kZXMgYW5kIGVkZ2VzIGFyb3VuZCBieSBkcmFnZ2luZy48L2xpPlxuICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICBSb290d2FsayB0b2dnbGUgZW5hYmxlIHRoZSByb290IHdhbGsgbW9kZSBpbiB0aGUgZ3JhcGgsIHdoZXJlIHlvdVxuICAgICAgICAgICAgICBjYW4gc2VlIHRoZSBwYXRoIGZyb20gcm9vdHMgdG8gdGhlIHRhcmdldCBub2RlLlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgIDwvRXVpUG9wb3Zlcj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IFwiaW5saW5lLWJsb2NrXCIsIGZsb2F0OiBcInJpZ2h0XCIsIHBhZGRpbmdUb3A6IDEwIH19XG4gICAgICAgID5cbiAgICAgICAgICA8RXVpU3dpdGNoXG4gICAgICAgICAgICBsYWJlbD1cInJvb3Qgd2Fsa1wiXG4gICAgICAgICAgICBjaGVja2VkPXtyb290V2Fsa0lzU2VsZWN0ZWR9XG4gICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4ge1xuICAgICAgICAgICAgICBzZXRSb290V2Fsa0lzU2VsZWN0ZWQoIXJvb3RXYWxrSXNTZWxlY3RlZCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdGl0bGU9XCJFbmFibGUgdGhlIHJvb3Qgd2FsayBtb2RlIGluIHRoZSBncmFwaDogWW91IGNhbiBzZWUgdGhlIHBhdGggZnJvbSByb290cyB0byB0aGUgdGFyZ2V0IG5vZGVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9FdWlQYW5lbD5cblxuICAgICAgPEV1aVBhbmVsXG4gICAgICAgIHN0eWxlPXt7IHdpZHRoOiA5MDAsIGhlaWdodDogOTAwIH19XG4gICAgICAgIGhhc1NoYWRvdz17ZmFsc2V9XG4gICAgICAgIGhhc0JvcmRlcj17dHJ1ZX1cbiAgICAgICAgYm9yZGVyUmFkaXVzPVwibm9uZVwiXG4gICAgICA+XG4gICAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJtXCIgLz59XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e2NvbnRhaW5lcn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJncmFwaC1jb250YWluZXJcIlxuICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiBcIjg1MHB4XCIsIGhlaWdodDogXCI4NTBweFwiLCBtYXJnaW46IFwiYXV0b1wiIH19XG4gICAgICAgIC8+XG4gICAgICA8L0V1aVBhbmVsPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVHcmFwaFZpZXcoXG4gIHByb3BzOiBHcmFwaFZpZXdXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEdyYXBoVmlld1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkR3JhcGhWaWV3V2lkZ2V0KHByb3BzOiBHcmFwaFZpZXdXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiIGdsb2JhbFN0eWxlcz17ZmFsc2V9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxHcmFwaFZpZXdXaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIHJvb3RXYWxrPXtwcm9wcy5yb290V2Fsa31cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBjcmVhdGVHcmFwaFZpZXcsIEdyYXBoVmlld1dpZGdldCB9O1xuIiwgImltcG9ydCB7IGNyZWF0ZUF1dG9jb21wbGV0ZSB9IGZyb20gXCIuL0F1dG9jb21wbGV0ZVdpZGdldC9BdXRvY29tcGxldGVXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZURhdGFDb250ZW50IH0gZnJvbSBcIi4vRGF0YUNvbnRlbnRXaWRnZXQvRGF0YUNvbnRlbnRXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUVudGl0eUluZm8gfSBmcm9tIFwiLi9FbnRpdHlJbmZvV2lkZ2V0L0VudGl0eUluZm9XaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUpzb25BcGkgfSBmcm9tIFwiLi9Kc29uQXBpV2lkZ2V0L0pzb25BcGlXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUJyZWFkY3J1bWIgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9CcmVhZGNydW1iV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZURlc2NyaXB0aW9uIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvRGVzY3JpcHRpb25XaWRnZXQvRGVzY3JpcHRpb25XaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUlyaSB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0lyaVdpZGdldC9JcmlXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9UYWJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUFsdGVybmF0aXZlTmFtZVRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVDcm9zc1JlZlRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9Dcm9zc1JlZldpZGdldC9Dcm9zc1JlZlRhYldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlSGllcmFyY2h5IH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0hpZXJhcmNoeVdpZGdldC9IaWVyYXJjaHlXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVRpdGxlIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGl0bGVXaWRnZXQvVGl0bGVXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZU1ldGFkYXRhIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvTWV0YWRhdGFXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZU9udG9sb2d5SW5mbyB9IGZyb20gXCIuL09udG9sb2d5SW5mb1dpZGdldC9PbnRvbG9neUluZm9XaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVJlc291cmNlcyB9IGZyb20gXCIuL1Jlc291cmNlc1dpZGdldC9SZXNvdXJjZXNXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVNlYXJjaEJhciB9IGZyb20gXCIuL1NlYXJjaEJhcldpZGdldC9TZWFyY2hCYXJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0IH0gZnJvbSBcIi4vU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUVudGl0eVJlbGF0aW9ucyB9IGZyb20gXCIuL0VudGl0eVJlbGF0aW9uc1dpZGdldC9FbnRpdHlSZWxhdGlvbnNXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZURlcGljdGlvbiB9IGZyb20gXCIuL1Rlcm1EZXBpY3Rpb25XaWRnZXQvVGVybURlcGljdGlvbldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlRW50aXR5T250b0xpc3QgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9FbnRpdHlPbnRvTGlzdFdpZGdldC9FbnRpdHlPbnRvTGlzdFdpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlRW50aXR5RGVmaW5lZEJ5IH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvRW50aXR5RGVmaW5lZEJ5V2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlR3JhcGhWaWV3IH0gZnJvbSBcIi4vR3JhcGhWaWV3V2lkZ2V0L0dyYXBoVmlld1dpZGdldFwiO1xuXG4od2luZG93IGFzIGFueSlbXCJ0czRuZmRpV2lkZ2V0c1wiXSA9IHtcbiAgY3JlYXRlQXV0b2NvbXBsZXRlLFxuICBjcmVhdGVEYXRhQ29udGVudCxcbiAgY3JlYXRlRW50aXR5SW5mbyxcbiAgY3JlYXRlRW50aXR5UmVsYXRpb25zLFxuICBjcmVhdGVKc29uQXBpLFxuICBjcmVhdGVCcmVhZGNydW1iLFxuICBjcmVhdGVEZXNjcmlwdGlvbixcbiAgY3JlYXRlSXJpLFxuICBjcmVhdGVUYWIsXG4gIGNyZWF0ZUFsdGVybmF0aXZlTmFtZVRhYixcbiAgY3JlYXRlQ3Jvc3NSZWZUYWIsXG4gIGNyZWF0ZUhpZXJhcmNoeSxcbiAgY3JlYXRlVGl0bGUsXG4gIGNyZWF0ZU9udG9sb2d5SW5mbyxcbiAgY3JlYXRlUmVzb3VyY2VzLFxuICBjcmVhdGVTZWFyY2hCYXIsXG4gIGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0LFxuICBjcmVhdGVNZXRhZGF0YSxcbiAgY3JlYXRlRGVwaWN0aW9uLFxuICBjcmVhdGVFbnRpdHlPbnRvTGlzdCxcbiAgY3JlYXRlRW50aXR5RGVmaW5lZEJ5LFxuICBjcmVhdGVHcmFwaFZpZXcsXG59O1xuXG5leHBvcnQge1xuICBjcmVhdGVBdXRvY29tcGxldGUsXG4gIGNyZWF0ZURhdGFDb250ZW50LFxuICBjcmVhdGVFbnRpdHlJbmZvLFxuICBjcmVhdGVFbnRpdHlSZWxhdGlvbnMsXG4gIGNyZWF0ZUpzb25BcGksXG4gIGNyZWF0ZUJyZWFkY3J1bWIsXG4gIGNyZWF0ZURlc2NyaXB0aW9uLFxuICBjcmVhdGVJcmksXG4gIGNyZWF0ZVRhYixcbiAgY3JlYXRlQWx0ZXJuYXRpdmVOYW1lVGFiLFxuICBjcmVhdGVDcm9zc1JlZlRhYixcbiAgY3JlYXRlVGl0bGUsXG4gIGNyZWF0ZU9udG9sb2d5SW5mbyxcbiAgY3JlYXRlUmVzb3VyY2VzLFxuICBjcmVhdGVTZWFyY2hCYXIsXG4gIGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0LFxuICBjcmVhdGVNZXRhZGF0YSxcbiAgY3JlYXRlRGVwaWN0aW9uLFxuICBjcmVhdGVIaWVyYXJjaHksXG4gIGNyZWF0ZUVudGl0eU9udG9MaXN0LFxuICBjcmVhdGVFbnRpdHlEZWZpbmVkQnksXG4gIGNyZWF0ZUdyYXBoVmlldyxcbn07XG5cbmV4cG9ydCAqIGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9BdXRvY29tcGxldGVXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0pzb25BcGlXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0RhdGFDb250ZW50V2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZXNvdXJjZXNXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL09udG9sb2d5SW5mb1dpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vU2VhcmNoQmFyV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9TZWFyY2hSZXN1bHRzTGlzdFdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vRW50aXR5SW5mb1dpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vRW50aXR5UmVsYXRpb25zV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9UZXJtRGVwaWN0aW9uV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaFZpZXdXaWRnZXRcIjtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7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LFlBQ0wsSUFBSTtBQUFBLFlBQ0osT0FBTztBQUFBLFlBQ1AsZ0JBQWdCO0FBQUEsWUFDaEIsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsYUFBYTtBQUFBLFlBQ2IsYUFBYTtBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsVUFBVTtBQUFBLFlBQ1YsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsU0FBUztBQUFBLFlBQ1QsV0FBVztBQUFBLFlBQ1gsTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsaUJBQWlCO0FBQUEsWUFDakIsYUFBYTtBQUFBLFlBQ2IsVUFBVTtBQUFBLFlBQ1YsY0FBYztBQUFBLFlBQ2QsUUFBUTtBQUFBLFlBQ1IsYUFBYTtBQUFBLFlBQ2IseUJBQXlCO0FBQUEsWUFDekIsTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsZ0JBQWdCO0FBQUEsWUFDaEIsY0FBYztBQUFBLFlBQ2QsT0FBTztBQUFBLFlBQ1AsS0FBSztBQUFBLFlBQ0wsVUFBVTtBQUFBLFlBQ1YseUJBQXlCO0FBQUEsWUFDekIsdUJBQXVCO0FBQUEsWUFDdkIsVUFBVTtBQUFBLFlBQ1YsV0FBVztBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsY0FBYztBQUFBLFlBQ2QsS0FBSztBQUFBLFlBQ0wsTUFBTTtBQUFBLFlBQ04sWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsWUFBWTtBQUFBLFlBQ1osYUFBYTtBQUFBLFlBQ2IsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLFlBQ1IsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsTUFBTTtBQUFBLFlBQ04sSUFBSTtBQUFBLFlBQ0osV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsSUFBSTtBQUFBLFlBQ0osUUFBUTtBQUFBLFlBQ1IsVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsV0FBVztBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sS0FBSztBQUFBLFlBQ0wsVUFBVTtBQUFBLFlBQ1YsYUFBYTtBQUFBLFlBQ2IsY0FBYztBQUFBLFlBQ2QsS0FBSztBQUFBLFlBQ0wsV0FBVztBQUFBLFlBQ1gsT0FBTztBQUFBLFlBQ1AsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsS0FBSztBQUFBLFlBQ0wsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFlBQ1AsWUFBWTtBQUFBLFlBQ1osTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsYUFBYTtBQUFBLFlBQ2IsYUFBYTtBQUFBLFlBQ2IsUUFBUTtBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osVUFBVTtBQUFBLFlBQ1YsZ0JBQWdCO0FBQUEsWUFDaEIsS0FBSztBQUFBLFlBQ0wsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLFlBQ1IsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1Ys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QUFBQSx1QkFBQUEsR0FBQUEsSUFBQUEsRUFBQUE7WUFBQUEsRUFBQUEsRUFBQUEsTUFBQUEsTUFBQUEsTUFBQUEsWUFBQUEsT0FBQUEsR0FBQUEsUUFBQUE7QUFBQUEsY0FBQUEsT0FBQUEsS0FBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLFdBQUFBO2NBQUFBO0FBQUFBLHFCQUFBQSxFQUFBQSxHQUFBQSxJQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSx1QkFBQUEsTUFBQUEsR0FBQUEsU0FBQUEsRUFBQUEsTUFBQUEsS0FBQUEsSUFBQUEsRUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsU0FBQUEsSUFBQUE7QUFBQUEsc0JBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLEdBQUFBO1lBQUFBO0FBQUFBLGtCQUFBQSxJQUFBQSxVQUFBQSx1SUFBQUE7VUFBQUE7QUFBQUEsY0FBQUEsSUFBQUEsS0FBQUEsTUFBQUEsS0FBQUE7QUFBQUEsaUJBQUFBLEVBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLEVBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUEsR0FBQUEsTUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsU0FBQUEsSUFBQUE7QUFBQUEsWUFBQUEsS0FBQUEsTUFBQUEsS0FBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBO0FBQUFBLGNBQUFBLE1BQUFBLFFBQUFBLEdBQUFBLFVBQUFBLEdBQUFBLE9BQUFBO1lBQUFBLFVBQUFBO0FBQUFBLGtCQUFBQTtBQUFBQSxzQkFBQUE7WUFBQUE7VUFBQUEsRUFBQUE7UUFBQUE7QUFBQUEsaUJBQUFBLEdBQUFBLElBQUFBLElBQUFBO0FBQUFBLFdBQUFBLFFBQUFBLE1BQUFBLEtBQUFBLEdBQUFBLFlBQUFBLEtBQUFBLEdBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxJQUFBQSxNQUFBQSxFQUFBQSxHQUFBQSxLQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxHQUFBQSxFQUFBQSxJQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSxpQkFBQUE7UUFBQUE7QUFBQUEsaUJBQUFBLEtBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxVQUFBQSxRQUFBQSxLQUFBQSxJQUFBQSxNQUFBQSxFQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxHQUFBQSxFQUFBQSxJQUFBQSxVQUFBQSxFQUFBQTtBQUFBQSxpQkFBQUEsU0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEtBQUFBLFdBQUFBO0FBQUFBLHVCQUFBQSxLQUFBQSxXQUFBQTtBQUFBQSxvQkFBQUEsS0FBQUE7QUFBQUEsdUJBQUFBLFNBQUFBLElBQUFBO0FBQUFBLDJCQUFBQSxLQUFBQSxHQUFBQSxTQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxRQUFBQSxNQUFBQTtBQUFBQSx3QkFBQUEsS0FBQUEsdUJBQUFBLE1BQUFBLEdBQUFBLFdBQUFBLEVBQUFBO0FBQUFBLG9CQUFBQSxNQUFBQSxLQUFBQSxPQUFBQSxHQUFBQSxNQUFBQSxNQUFBQSxRQUFBQSxHQUFBQSxNQUFBQSxjQUFBQSxNQUFBQTtrQkFBQUE7QUFBQUEseUJBQUFBLHlCQUFBQSxPQUFBQTtnQkFBQUE7Y0FBQUEsRUFBQUEsR0FBQUEsS0FBQUEsR0FBQUEsR0FBQUEsR0FBQUEsS0FBQUEsR0FBQUEsR0FBQUEsR0FBQUEsS0FBQUEsR0FBQUEsR0FBQUEsR0FBQUEsS0FBQUEsR0FBQUEsS0FBQUEsVUFBQUEsUUFBQUE7QUFBQUEsaUJBQUFBLE1BQUFBLEdBQUFBLEtBQUFBLEtBQUFBLFVBQUFBLFVBQUFBLEtBQUFBLFNBQUFBLFVBQUFBLEVBQUFBLENBQUFBLEtBQUFBLE1BQUFBLE1BQUFBLEtBQUFBLE1BQUFBLEdBQUFBLEtBQUFBLEtBQUFBLFVBQUFBLFVBQUFBLEtBQUFBLFNBQUFBLFVBQUFBLEVBQUFBLENBQUFBLEtBQUFBLE1BQUFBLE1BQUFBLEtBQUFBLE1BQUFBLEdBQUFBLEtBQUFBLEtBQUFBLFVBQUFBLFVBQUFBLEtBQUFBLFNBQUFBLFVBQUFBLEVBQUFBLENBQUFBLEtBQUFBLE1BQUFBLE1BQUFBO0FBQUFBLHFCQUFBQSxDQUFBQSxJQUFBQSxJQUFBQSxFQUFBQTtZQUFBQSxFQUFBQSxFQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxJQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxXQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsVUFBQUEsS0FBQUEsd0JBQUFBO0FBQUFBLHFCQUFBQSxLQUFBQSxJQUFBQSxLQUFBQSxJQUFBQSxLQUFBQSxNQUFBQSxLQUFBQSxJQUFBQTtZQUFBQTtBQUFBQSxtQkFBQUEsR0FBQUEsU0FBQUEsV0FBQUE7QUFBQUEscUJBQUFBLGFBQUFBLEdBQUFBO1lBQUFBLEdBQUFBLEdBQUFBLFVBQUFBLFdBQUFBO0FBQUFBLHFCQUFBQSxHQUFBQSxJQUFBQSx5QkFBQUEsVUFBQUEsR0FBQUEsSUFBQUE7WUFBQUEsR0FBQUEsR0FBQUEsWUFBQUEsUUFBQUEsR0FBQUEsT0FBQUEsSUFBQUEsR0FBQUEsVUFBQUEsT0FBQUE7VUFBQUEsRUFBQUEsR0FBQUEsU0FBQUEsS0FBQUEsQ0FBQUEsR0FBQUEsQ0FBQUEsQ0FBQUE7UUFBQUE7QUcxNkZiM2IsV0FBQSxRQUFBO0FBQUEsWUFBQSxLQUFBLGVBQUEsT0FBQSxTQUFBLE9BQUEsVUFBQSxLQUFBLFdBQUE7QUFBQSxpQkFBQSxXQUFBO0FBQUEsZ0JBQUFyWSxLQUFBLFdBQUE7WUFBQTtBQUFBLG1CQUFBLEVBQUEsSUFBQUEsSUFBQSxLQUFBQSxJQUFBLFNBQUFBLElBQUEsTUFBQUEsSUFBQSxLQUFBLFdBQUE7QUFBQSxxQkFBQSxFQUFBLEtBQUFBLEdBQUE7WUFBQSxFQUFBO1VBQUEs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bUcsR0FBQW5HLEVBQUEsRUFBQSxVQUFBbTdCO1lBQUE7VUFBQTtRQUFBO0FBQUEsWUFBQSxLQUFBLEVBQUEsUUFBQSxTQUFBaDFCLElBQUE7QUFBQSxpQkFBQUE7UUFBQSxHQUFBLFlBQUEsU0FBQUEsSUFBQTtBQUFBLGlCQUFBQSxLQUFBQTtRQUFBLEdBQUEsYUFBQSxTQUFBQSxJQUFBO0FBQUEsaUJBQUFBLE1BQUEsSUFBQUE7UUFBQSxHQUFBLGVBQUEsU0FBQUEsSUFBQTtBQUFBLGlCQUFBQSxLQUFBLE1BQUEsSUFBQUEsS0FBQUEsTUFBQSxJQUFBLElBQUFBLE1BQUFBLEtBQUE7UUFBQSxHQUFBLGFBQUEsU0FBQUEsSUFBQTtBQUFBLGlCQUFBQSxLQUFBQSxLQUFBQTtRQUFBLEdBQUEsY0FBQSxTQUFBQSxJQUFBO0FBQUEsaUJBQUEsRUFBQUEsS0FBQUEsS0FBQUEsS0FBQTtRQUFBLEdBQUEsZ0JBQUEsU0FBQUEsSUFBQTtBQUFBLGlCQUFBQSxLQUFBLE1BQUEsSUFBQUEsS0FBQUEsS0FBQUEsTUFBQUEsS0FBQSxNQUFBLElBQUFBLEtBQUEsTUFBQSxJQUFBQSxLQUFBLEtBQUE7UUFBQSxHQUFBLGFBQUEsU0FBQUEsSUFBQTtBQUFBLGlCQUFBQSxLQUFBQSxLQUFBQSxLQUFBQTtRQUFBLEdBQUEsY0FBQSxTQUFBQSxJQUFBO0FBQUEsaUJBQUEsSUFBQSxFQUFBQSxLQUFBQSxLQUFBQSxLQUFBQTtRQUFBLEdBQUEsZ0JBQUEsU0FBQUEsSUFBQTtBQUFBLGlCQUFBQSxLQUFBLE1BQUEsSUFBQUEsS0FBQUEsS0FBQUEsS0FBQUEsS0FBQSxJQUFBLElBQUEsRUFBQUEsS0FBQUEsS0FBQUEsS0FBQUE7UUFBQSxHQUFBLGFBQUEsU0FBQUEsSUFBQTtBQUFBLGlCQUFBQSxLQUFBQSxLQUFBQSxLQUFBQSxLQUFBQTtRQUFBLEdBQUEsY0FBQSxTQUFBQSxJQUFBO0FBQUEsaUJBQUEsSUFBQSxFQUFBQSxLQUFBQSxLQUFBQSxLQUFBQSxLQUFBQTtRQUFBLEdBQUEsZ0JBQUEsU0FBQUEsSUFBQTtBQUFBLGlCQUFBQSxLQUFBLE1BQUEsS0FBQUEsS0FBQUEsS0FBQUEsS0FBQUEsS0FBQUEsS0FBQSxJQUFBLEtBQUEsRUFBQUEsS0FBQUEsS0FBQUEsS0FBQUEsS0FBQUE7UUFBQSxFQUFBO0FBQUEsaUJBQUEsR0FBQUEsSUFBQXFhLElBQUE7QUFBQSxjQUFBeGdCO0FBQUEsYUFBQXdnQixFQUFBLE1BQUFBLEtBQUEsQ0FBQUEsRUFBQTtBQUFBLGNBQUFqQyxJQUFBN2YsS0FBQSxHQUFBeUgsRUFBQTtBQUFBLGNBQUE7QUFBQSxpQkFBQXpILEdBQUEsRUFBQSxHQUFBLEVBQUE2ZixLQUFBN2YsR0FBQSxFQUFBLEdBQUEsUUFBQTtBQUFBLGtCQUFBK0QsS0FBQThiLEdBQUE7QUFBQSxrQkFBQTliLElBQUE7QUFBQSxnQkFBQXpDLEtBQUF5QyxHQUFBK2QsR0FBQSxDQUFBLENBQUE7QUFBQSx5QkFBQXphLEtBQUEsR0FBQUEsS0FBQXlhLEdBQUEsUUFBQXphO0FBQUEsa0JBQUEvRixPQUFBQSxLQUFBQSxHQUFBd2dCLEdBQUF6YSxFQUFBLENBQUE7QUFBQSxvQkFBQSxXQUFBL0Y7QUFBQTtjQUFBO1lBQUE7VUFBQSxTQUFBbUcsSUFBQTtBQUFBLFlBQUF6SCxHQUFBLEVBQUF5SCxFQUFBO1VBQUEsVUFBQTtBQUFBLFlBQUF6SCxHQUFBLEVBQUE7VUFBQTtBQUFBLGlCQUFBc0I7UUFBQTtBQUFBLFlBQUEsS0FBQSxFQUFBLE9BQUEsV0FBQSxNQUFBLFdBQUEsVUFBQSxXQUFBLFlBQUEsV0FBQSxNQUFBLFdBQUEsV0FBQSxXQUFBLE9BQUEsV0FBQSxNQUFBLFdBQUEsVUFBQSxXQUFBLGFBQUEsV0FBQSxlQUFBLFdBQUEsbUJBQUEsV0FBQSxNQUFBLFdBQUEsYUFBQSxXQUFBLE1BQUEsV0FBQSxNQUFBLFdBQUEsY0FBQSxXQUFBLFlBQUEsV0FBQSxlQUFBLFdBQUEsYUFBQSxXQUFBLFVBQUEsV0FBQSxlQUFBLFdBQUEsV0FBQSxXQUFBLGdCQUFBLFdBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxXQUFBLFdBQUEsZUFBQSxXQUFBLGlCQUFBLFdBQUEsUUFBQSxXQUFBLGdCQUFBLFdBQUEsV0FBQSxXQUFBLGdCQUFBLFdBQUEsa0JBQUEsV0FBQSxTQUFBLFdBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxXQUFBLFdBQUEsZ0JBQUEsV0FBQSxpQkFBQSxXQUFBLFdBQUEsV0FBQSxZQUFBLFdBQUEsWUFBQSxXQUFBLFFBQUEsV0FBQSxRQUFBLFdBQUEsT0FBQSxXQUFBLE1BQUEsV0FBQSxTQUFBLFdBQUEsY0FBQSxXQUFBLFlBQUEsV0FBQSxTQUFBLFdBQUEsYUFBQSxXQUFBLGFBQUEsV0FBQSxjQUFBLFdBQUEsWUFBQSxXQUFBLGNBQUEsV0FBQSxZQUFBLFdBQUEsV0FBQSxXQUFBLFlBQUEsV0FBQSxhQUFBLFdBQUEsUUFBQSxXQUFBLE9BQUEsV0FBQSxVQUFBLFdBQUEsV0FBQSxXQUFBLGFBQUEsV0FBQSxlQUFBLFdBQUEsZ0JBQUEsV0FBQSxZQUFBLFdBQUEsV0FBQSxXQUFBLGVBQUEsV0FBQSxjQUFBLFdBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxRQUFBLFdBQUEsaUJBQUEsV0FBQSxXQUFBLFdBQUEsTUFBQSxXQUFBLFdBQUEsV0FBQSxLQUFBLFdBQUEsV0FBQSxXQUFBLGVBQUEsV0FBQSxTQUFBLFdBQUEsUUFBQSxXQUFBLFdBQUEsV0FBQSxTQUFBLFdBQUEsV0FBQSxXQUFBLE1BQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxXQUFBLFVBQUEsV0FBQSxZQUFBLFdBQUEsUUFBQSxXQUFBLGVBQUEsV0FBQSxZQUFBLFdBQUEsT0FBQSxXQUFBLFdBQUEsV0FBQSxVQUFBLFdBQUEsT0FBQSxXQUFBLFlBQUEsV0FBQSxPQUFBLFdBQUEsT0FBQSxXQUFBLFlBQUEsV0FBQSxXQUFBLFdBQUEsWUFBQSxXQUFBLFFBQUEsV0FBQSxjQUFBLFdBQUEsT0FBQSxXQUFBLHNCQUFBLFdBQUEsU0FBQSxXQUFBLEtBQUEsV0FBQSxTQUFBLFdBQUEsU0FBQSxXQUFBLFVBQUEsV0FBQSxXQUFBLFdBQUEsUUFBQSxXQUFBLFNBQUEsV0FBQSxPQUFBLFdBQUEsWUFBQSxXQUFBLGFBQUEsV0FBQSxRQUFBLFdBQUEsV0FBQSxXQUFBLE1BQUEsV0FBQSxNQUFBLFdBQUEsV0FBQSxXQUFBLGFBQUEsV0FBQSxVQUFBLFdBQUEsUUFBQSxXQUFBLFdBQUEsV0FBQSxnQkFBQSxXQUFBLFlBQUEsV0FBQSxlQUFBLFdBQUEsVUFBQSxXQUFBLFVBQUEsV0FBQSxjQUFBLFdBQUEsYUFBQSxXQUFBLE1BQUEsV0FBQSxRQUFBLFdBQUEsYUFBQSxXQUFBLE9BQUEsV0FBQSxPQUFBLFVBQUEsR0FBQSxLQUFBLFdBQUE7QUFBQSxtQkFBQW1HLEtBQUE7QUFBQSxnQkFBQXFhLEtBQUEsVUFBQSxTQUFBLEtBQUEsV0FBQSxVQUFBLENBQUEsSUFBQSxVQUFBLENBQUEsSUFBQTtBQUFBLGVBQUEsTUFBQXJhLEVBQUEsR0FBQSxLQUFBLGFBQUFxYSxJQUFBLEtBQUEsWUFBQSxPQUFBLEtBQUEsb0JBQUEsRUFBQSxHQUFBLE9BQUEsR0FBQSxNQUFBLEdBQUEsS0FBQSxJQUFBLE1BQUEsTUFBQSxLQUFBLFFBQUEsRUFBQSxHQUFBLEtBQUEsR0FBQSxLQUFBLEdBQUEsS0FBQSxHQUFBLEVBQUEsR0FBQSxLQUFBLFlBQUEsUUFBQSxLQUFBLGVBQUEsRUFBQSxHQUFBLEtBQUEsR0FBQSxLQUFBLEdBQUEsS0FBQSxHQUFBLEVBQUEsR0FBQSxLQUFBLGdCQUFBLFFBQUEsS0FBQSxVQUFBLE9BQUEsS0FBQSxpQkFBQSxXQUFBO1lBQUEsR0FBQSxLQUFBLGdCQUFBLFdBQUE7WUFBQSxHQUFBLEtBQUEsUUFBQTtVQUFBO0FBQUEsaUJBQUEsR0FBQXJhLElBQUEsQ0FBQSxFQUFBLEtBQUEsWUFBQSxPQUFBLFNBQUFBLElBQUE7QUFBQSx1QkFBQSxLQUFBLFdBQUEsS0FBQSxPQUFBLFFBQUEsR0FBQSxLQUFBLFNBQUEsU0FBQSxLQUFBLFlBQUFBLElBQUEsS0FBQSxVQUFBLFlBQUEsS0FBQSxLQUFBLEdBQUEsS0FBQSxZQUFBLEdBQUEsS0FBQSxTQUFBO1VBQUEsRUFBQSxHQUFBLEVBQUEsS0FBQSxx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QUEsR0FBQSxLQUFBLGNBQUEsWUFBQSxLQUFBLGVBQUE7QUFBQSxnQkFBQUosS0FBQTtBQUFBLGlCQUFBLGFBQUEsV0FBQSxXQUFBO0FBQUEsY0FBQUEsR0FBQSxZQUFBLEtBQUEsS0FBQTtZQUFBLEdBQUEsS0FBQSxhQUFBLFVBQUEsV0FBQTtBQUFBLGNBQUFBLEdBQUEsWUFBQSxLQUFBLEtBQUE7WUFBQSxHQUFBLEtBQUEsZ0JBQUEsV0FBQSxXQUFBO0FBQUEsY0FBQUEsR0FBQSxlQUFBLEtBQUEsS0FBQTtZQUFBLEdBQUEsS0FBQSxnQkFBQSxVQUFBLFdBQUE7QUFBQSxjQUFBQSxHQUFBLGVBQUEsS0FBQSxLQUFBO1lBQUEsR0FBQSxLQUFBLGtCQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxnQkFBQSxZQUFBLDRCQUFBLEtBQUEsZ0JBQUEsWUFBQSxlQUFBLEtBQUEsZUFBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsYUFBQSxZQUFBLHlCQUFBLEtBQUEsYUFBQSxZQUFBLFlBQUEsS0FBQSxjQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxZQUFBLFlBQUEsaUJBQUEsS0FBQSxZQUFBLFlBQUEsT0FBQSxLQUFBLGtCQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxnQkFBQSxZQUFBLHFCQUFBLEtBQUEsZ0JBQUEsWUFBQSxXQUFBLEtBQUEsZUFBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsYUFBQSxZQUFBLHlCQUFBLEtBQUEsYUFBQSxZQUFBLFVBQUEsS0FBQSxhQUFBLFVBQUEsR0FBQUksS0FBQSxLQUFBLEtBQUEsRUFBQSxLQUFBQSxJQUFBLE1BQUEsS0FBQSxHQUFBLEtBQUEsY0FBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsWUFBQSxZQUFBLHdCQUFBLEtBQUEsWUFBQSxZQUFBLFNBQUEsS0FBQSxZQUFBLFVBQUEsR0FBQXFhLEtBQUEsS0FBQSxNQUFBLEVBQUEsS0FBQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxhQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxXQUFBLFlBQUEsdUJBQUEsS0FBQSxXQUFBLFlBQUEsUUFBQSxLQUFBLFdBQUEsVUFBQSxHQUFBeGdCLEtBQUEsS0FBQSxLQUFBLEVBQUEsS0FBQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxhQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxXQUFBLFlBQUEsdUJBQUEsS0FBQSxXQUFBLFlBQUEsYUFBQSxLQUFBLFdBQUEsVUFBQSxHQUFBdWUsS0FBQSxLQUFBLFNBQUEsRUFBQSxLQUFBQSxJQUFBLElBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLGNBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFFBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLGVBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLGFBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFlBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFVBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFdBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLGVBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFlBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFdBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFVBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFVBQUE7VUFBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLGVBQUEsT0FBQSxXQUFBO0FBQUEsZ0JBQUFwWSxLQUFBO0FBQUEsaUJBQUEsT0FBQSxDQUFBLEdBQUEsS0FBQSxRQUFBLENBQUEsR0FBQSxLQUFBLFNBQUEsSUFBQSxHQUFBLEtBQUEsaUJBQUEsR0FBQSxLQUFBLE9BQUEsSUFBQSxPQUFBLEVBQUEsSUFBQSxFQUFBLFFBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxPQUFBLEdBQUEsZ0JBQUEsU0FBQXFhLElBQUE7QUFBQSxjQUFBQSxHQUFBLFdBQUFyYSxHQUFBLGNBQUFxYSxFQUFBO1lBQUEsQ0FBQSxHQUFBLEtBQUEsT0FBQSxHQUFBLE9BQUEsU0FBQUEsSUFB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Q0V2SCxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRzFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FHMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFB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QUEsSUFBQUEsVUFBQUEsK0NBQUFBO0FBQUFBLGNBQUFBLGNBQUFBLE9BQUFBLEtBQUFBLE9BQUFBLE1BQUFBLENBQUFBLEtBQUFBLENBQUFBLEdBQUFBLElBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxJQUFBQSxVQUFBQSx5RUFBQUE7QUFBQUEsaUJBQUFBLFFBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLElBQUFBLEVBQUFBLElBQUFBLEtBQUFBLEdBQUFBLFFBQUFBLEtBQUFBLEdBQUFBLElBQUFBLElBQUFBLEVBQUFBLEdBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxXQUFBQSxNQUFBQSxHQUFBQSxFQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtBQUFBQSxjQUFBQSxDQUFBQSxJQUFBQTtBQUFBQSxnQkFBQUEsR0FBQUEsRUFBQUEsTUFBQUEsS0FBQUEsU0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsa0JBQUFBO0FBQUFBLGtCQUFBQSxDQUFBQTtBQUFBQTtBQUFBQSxrQkFBQUEsWUFBQUEsT0FBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLElBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxPQUFBQSxVQUFBQSxTQUFBQSxLQUFBQSxFQUFBQSxDQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSwyQkFBQUEsTUFBQUEsR0FBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLFlBQUFBO0FBQUFBLGtCQUFBQSxVQUFBQSxNQUFBQSxVQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsa0JBQUFBLGdCQUFBQSxNQUFBQSwyQ0FBQUEsS0FBQUEsRUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLElBQUFBLEVBQUFBO1lBQUFBLEVBQUFBLEVBQUFBLE1BQUFBLE1BQUFBLE1BQUFBLFlBQUFBLE9BQUFBLEdBQUFBLFFBQUFBO0FBQUFBLGNBQUFBLE9BQUFBLEtBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxXQUFBQTtjQUFBQTtBQUFBQSxxQkFBQUEsRUFBQUEsR0FBQUEsSUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsdUJBQUFBLE1BQUFBLEdBQUFBLFNBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLElBQUFBLEVBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLEdBQUFBLElBQUFBLEVBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHNCQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtZQUFBQTtBQUFBQSxrQkFBQUEsSUFBQUEsVUFBQUEsdUlBQUFBO1VBQUFBO0FBQUFBLGNBQUFBLElBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO0FBQUFBLGlCQUFBQSxFQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxFQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLEdBQUFBLE1BQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQTtBQUFBQSxjQUFBQSxNQUFBQSxRQUFBQSxHQUFBQSxVQUFBQSxHQUFBQSxPQUFBQTtZQUFBQSxVQUFBQTtBQUFBQSxrQkFBQUE7QUFBQUEsc0JBQUFBO1lBQUFBO1VBQUFBLEVBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxXQUFBQSxRQUFBQSxNQUFBQSxLQUFBQSxHQUFBQSxZQUFBQSxLQUFBQSxHQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsSUFBQUEsTUFBQUEsRUFBQUEsR0FBQUEsS0FBQUEsSUFBQUE7QUFBQUEsWUFBQUEsR0FBQUEsRUFBQUEsSUFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsaUJBQUFBO1FBQUFBO0FDVXRCLGlCQUFTdTBFLEdBQVkzL0Qs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QSxNQUFBQSxNQUFBQSxZQUFBQSxPQUFBQSxHQUFBQSxRQUFBQTtBQUFBQSxjQUFBQSxPQUFBQSxLQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsV0FBQUE7Y0FBQUE7QUFBQUEscUJBQUFBLEVBQUFBLEdBQUFBLElBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLHVCQUFBQSxNQUFBQSxHQUFBQSxTQUFBQSxFQUFBQSxNQUFBQSxLQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxzQkFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7WUFBQUE7QUFBQUEsa0JBQUFBLElBQUFBLFVBQUFBLHVJQUFBQTtVQUFBQTtBQUFBQSxjQUFBQSxJQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtBQUFBQSxpQkFBQUEsRUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsWUFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsRUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxNQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUE7QUFBQUEsY0FBQUEsTUFBQUEsUUFBQUEsR0FBQUEsVUFBQUEsR0FBQUEsT0FBQUE7WUFBQUEsVUFBQUE7QUFBQUEsa0JBQUFBO0FBQUFBLHNCQUFBQTtZQUFBQTtVQUFBQSxFQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsV0FBQUEsUUFBQUEsTUFBQUEsS0FBQUEsR0FBQUEsWUFBQUEsS0FBQUEsR0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLElBQUFBLE1BQUFBLEVBQUFBLEdBQUFBLEtBQUFBLElB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RUFBQUE7QUFBQUEsa0JBQUFBLGdCQUFBQSxNQUFBQSwyQ0FBQUEsS0FBQUEsRUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLElBQUFBLEVBQUFBO1lBQUFBLEVBQUFBLEVBQUFBLE1BQUFBLE1BQUFBLE1BQUFBLFlBQUFBLE9BQUFBLEdBQUFBLFFBQUFBO0FBQUFBLGNBQUFBLE9BQUFBLEtBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxXQUFBQTtjQUFBQTtBQUFBQSxxQkFBQUEsRUFBQUEsR0FBQUEsSUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsdUJBQUFBLE1BQUFBLEdBQUFBLFNBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLElBQUFBLEVBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLEdBQUFBLElBQUFBLEVBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHNCQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtZQUFBQTtBQUFBQSxrQkFBQUEsSUFBQUEsVUFBQUEsdUlBQUFBO1VBQUFBO0FBQUFBLGNBQUFBLElBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO0FBQUFBLGlCQUFBQSxFQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxFQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLEdBQUFBLE1BQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQTtBQUFBQSxjQUFBQSxNQUFBQSxRQUFBQSxHQUFBQSxVQUFBQSxHQUFBQSxPQUFBQTtZQUFBQSxVQUFBQTtBQUFBQSxrQkFBQUE7QUFBQUEsc0JBQUFBO1lBQUFBO1VBQUFBLEVBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxXQUFBQSxR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QSxVQUFBQSxFQUFBQSxJQUFBQSxVQUFBQSxFQUFBQSxJQUFBQSxDQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxJQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxPQUFBQSxFQUFBQSxHQUFBQSxJQUFBQSxDQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxpQkFBQUEsSUFBQUEsSUFBQUEsR0FBQUEsRUFBQUEsQ0FBQUE7WUFBQUEsQ0FBQUEsSUFBQUEsS0FBQUEsR0FBQUEsSUFBQUEsR0FBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsR0FBQUEsS0FBQUEsR0FBQUEsT0FBQUEsRUFBQUEsQ0FBQUEsQ0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsU0FBQUEsSUFBQUE7QUFBQUEsaUJBQUFBLElBQUFBLElBQUFBLEdBQUFBLElBQUFBLEVBQUFBLENBQUFBO1lBQUFBLENBQUFBO1VBQUFBO0FBQUFBLGlCQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsV0FBQUEsTUFBQUEsR0FBQUEsRUFBQUEsS0FBQUEsR0FBQUEsWUFBQUE7QUFBQUEsY0FBQUEsQ0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLFNBQUFBLElBQUFBLElBQUFBO0FBQUFBLGtCQUFBQTtBQUFBQSxrQkFBQUEsQ0FBQUE7QUFBQUE7QUFBQUEsa0JBQUFBLFlBQUFBLE9BQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsT0FBQUEsVUFBQUEsU0FBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsMkJBQUFBLE1BQUFBLEdBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtBQUFBQSxrQkFBQUEsVUFBQUEsTUFBQUEsVUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxnQkFBQUEsTUFBQUEsMkNBQUFBLEtBQUFBLEVBQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtZQUFBQSxFQUFBQSxFQUFBQSxNQUFBQSxNQUFBQSxNQUFBQSxZQUFBQSxPQUFBQSxHQUFBQSxRQUFBQTtBQUFBQSxjQUFBQSxPQUFBQSxLQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsV0FBQUE7Y0FBQUE7QUFBQUEscUJBQUFBLEVBQUFBLEdBQUFBLElBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLHVCQUFBQSxNQUFBQSxHQUFBQSxTQUFBQSxFQUFBQSxNQUFBQSxLQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxzQkFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7WUFBQUE7QUFBQUEsa0JBQUFBLElBQUFBLFVBQUFBLHVJQUFBQTtVQUFBQTtBQUFBQSxjQUFBQSxJQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtBQUFBQSxpQkFBQUEsRUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsWUFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsRUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxNQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUE7QUFBQUEsY0FBQUEsTUFBQUEsUUFBQUEsR0FBQUEsVUFBQUEsR0FBQUEsT0FBQUE7WUFBQUEsVUFBQUE7QUFBQUEsa0JBQUFBO0FBQUFBLHNCQUFBQTtZQUFBQTtVQUFBQSxFQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsV0FBQUEsUUFBQUEsTUFBQUEsS0FBQUEsR0FBQUEsWUFBQUEsS0FBQUEsR0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLElBQUFBLE1BQUFBLEVBQUFBLEdBQUFBLEtBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEdBQUFBLEVBQUFBLElBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGlCQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLGVBQUFBLE9BQUFBLFdBQUFBLENBQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsR0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxjQUFBQSxPQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBO0FBQUFBLHFCQUFBQSxRQUFBQSxVQUFBQSxRQUFBQSxLQUFBQSxHQUFBQSxTQUFBQSxDQUFBQSxHQUFBQSxXQUFBQTtjQUFBQSxDQUFBQSxDQUFBQSxHQUFBQTtZQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxxQkFBQUE7WUFBQUE7VUFBQUEsRUFBQUE7QUFBQUEsaUJBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQSxLQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLElBQUFBLEVBQUFBO0FBQUFBLGNBQUFBLEtBQUFBLEdBQUFBLElBQUFBLFdBQUFBLEVBQUFBO1lBQUFBO0FBQUFBLGNBQUFBLEtBQUFBLEdBQUFBLE1BQUFBLE1BQUFBLFNBQUFBO0FBQUFBLG1CQUFBQSxHQUFBQSxNQUFBQSxFQUFBQTtVQUFBQTtRQUFBQTtBQ3BMVW9DLFlBQUFBLEtBQUFBLFNBSVhDLElBQUFBO0FBQUE3WSxhQUFBNFksSUFBQUMsRUFBQUE7QUFBQSxjQUFBL2IsS0FBQWdjLEdBQUFGLEVBQUFBO0FBZ0NBLG1CQUFBQSxHQUNFcDRDLElBQ0ErQixJQUFBQTtBQUF1QyxnQkFBQXF3QjtBQW9CZCxtQkFwQmM3OEIsRUFBQUEsTUFBQTZpRCxFQUFBQSxHQUl2Q2w4QixHQUFBMEwsR0FGQXdLLEtBQUFrSyxHQUFBcmxDLEtBQUFkLElBQUFBLENBQUFBLEdBQUFBLFVBckJtQyxJQUFBLEdBd0IvQjZKLE1BQUFBLENBQVM4aUIsR0FBYzlpQixFQUFBQSxNQUN6QitCLEtBQVUvQixJQUNWQSxLQUFPLENBQUEsSUFHVG95QixHQUFLbW1CLFdBQVd4MkMsTUFBVyxDQUFBLEdBQzNCcXdCLEdBQUtvbUIsUUFBUSxJQUFBL0MsTUFDYnJqQixHQUFLeDNCLFNBQVMsR0FDZHczQixHQUFLcW1CLFVBQVVybUIsR0FBS21tQixTQUFTRyxXQUFZLE1BR3JDMTRDLE1BQVFBLEdBQUtwRixVQUNmdzNCLEdBQUtuVCxJQUFJamYsRUFBQUEsR0FHWG95QixHQUFLa2hCLFdBQVd2eEMsRUFBQUEsR0FBU3F3QjtVQUMzQjtBQXc1QkMsaUJBdDVCRHJXLEdBQUFxOEIsSUFBQSxDQUFBLEVBQUExN0MsS0FBQSxVQUFBakUsS0FqREEsV0FBQTtBQUNFLG1CQUFPdEMsS0FBS3NpRDtVQUNkLEVBQUEsR0FBQyxFQUFBLzdDLEtBQUEsY0FBQWxELE9Bb0RNLFNBQVd1SSxJQUFBQTtBQUNaQSxZQUFBQSxNQUFBQSxXQUFXQSxHQUFRbWhDLFVBQUFBLFVBQ2pCbmhDLEdBQVFtaEMsUUFFTi9zQyxLQUFLeTlDLFdBQ1B6OUMsS0FBS3k5QyxPQUFPeGlCLFFBQUFBLEdBQ1pqN0IsS0FBS3k5QyxTQUFTLFNBSVh6OUMsS0FBS3k5QyxXQUNSejlDLEtBQUt5OUMsU0FBU3pQLEdBQU1ySSxPQUFPM2xDLE1BQU0sRUFDL0JrSyxTQUFTLENBQUMsT0FBTyxVQUFVLFFBQUEsRUFBQSxDQUFBLElBSTNCMEIsR0FBUW1oQyxTQUFrQyxZQUFBLE9BQWxCbmhDLEdBQVFtaEMsU0FDbEMvc0MsS0FBS3k5QyxPQUFPTixXQUFXdnhDLEdBQVFtaEMsS0FBQUE7VUFJdkMsRUFBQSxHQUVBLEVBQUF4bUMsS0FBQSxPQUFBbEQsT0EwQk8sU0FBSXdHLElBQXFCaTBDLElBQUFBO0FBQW9CLGdCQUU5QzEyQyxJQUY4Q202QixLQUFBdmhDLE1BQzVDd2lELEtBQWlCLENBQUE7QUFHdkIsZ0JBQUk3MUIsR0FBYzlpQixFQUFBQSxHQUFPO0FBRXZCLGtCQUFNNDRDLEtBQWlCdDRCLEdBQUF0Z0IsRUFBQUEsRUFBSS9JLEtBQUorSSxJQUFTLFNBQUM2NEMsSUFBQUE7QUFBQyx1QkFBS0EsR0FBRW5oQixHQUFLK2dCLE9BQUFBO2NBQUFBLENBQUFBO0FBQzlDLGtCQUFJSyxHQUFBRixFQUFBQSxFQUFRM2hELEtBQVIyaEQsSUFBYyxTQUFDcjdDLElBQUFBO0FBQUUsdUJBQUttNkIsR0FBSzhnQixNQUFNL3NDLElBQUlsTyxFQUFBQTtjQUFHLENBQUE7QUFDMUMsc0JBQU0sSUFBSWsrQixNQUFNLGtEQUFBO0FBRWxCLHVCQUFTMTBCLEtBQUksR0FBR0UsS0FBTWpILEdBQUtwRixRQUFRbU0sS0FBSUUsSUFBS0Y7QUFDMUN4SixnQkFBQUEsS0FBS3BILEtBQUs0aUQsU0FBUy80QyxHQUFLK0csRUFBQUEsQ0FBQUEsR0FDeEI0eEMsR0FBUzU3QyxLQUFLUSxFQUFBQTtZQUVqQixPQUFNO0FBQUEsa0JBQUEsQ0FBSXlDLE1BQXdCLFlBQUEsT0FBVEE7QUFLeEIsc0JBQU0sSUFBSXk3QixNQUFNLGtCQUFBO0FBSGhCbCtCLGNBQUFBLEtBQUtwSCxLQUFLNGlELFNBQVMvNEMsRUFBQUEsR0FDbkIyNEMsR0FBUzU3QyxLQUFLUSxFQUFBQTtZQUdmO0FBTUQsbUJBSklvN0MsR0FBUy85QyxVQUNYekUsS0FBSzZpRCxTQUFTLE9BQU8sRUFBRXA1QixPQUFPKzRCLEdBQUFBLEdBQVkxRSxFQUFBQSxHQUdyQzBFO1VBQ1QsRUFBQSxHQUVBLEVBQUFqOEMsS0FBQSxVQUFBbEQsT0FrQ08sU0FDTHdHLElBQ0FpMEMsSUFBQUE7QUFBb0IsZ0JBQUFoYyxLQUFBOWhDLE1BRWR3aUQsS0FBaUIsQ0FBQSxHQUNqQk0sS0FBbUIsQ0FBQSxHQUNuQi80QixLQUFvQyxDQUFBLEdBQ3BDZzVCLEtBQXdDLENBQUEsR0FDeENDLEtBQVNoakQsS0FBS3NpRCxTQUVkVyxLQUFjLFNBQUNuM0IsSUFBQUE7QUFDbkIsa0JBQU1vM0IsS0FBZ0JwM0IsR0FBS2szQixFQUFBQTtBQUMzQixrQkFBYyxRQUFWRSxNQUFrQnBoQixHQUFLdWdCLE1BQU0vc0MsSUFBSTR0QyxFQUFBQSxHQUFTO0FBQzVDLG9CQUFNQyxLQUFXcjNCLElBQ1hzM0IsS0FBVUMsR0FBYyxDQUFBLEdBQUl2aEIsR0FBS3VnQixNQUFNLy9DLElBQUk0Z0QsRUFBQUEsQ0FBQUEsR0FFM0M5N0MsS0FBSzA2QixHQUFLd2hCLFlBQVlILEVBQUFBO0FBQzVCTCxnQkFBQUEsR0FBV2w4QyxLQUFLUSxFQUFBQSxHQUNoQjI3QyxHQUFZbjhDLEtBQUt1OEMsRUFBQUEsR0FDakJwNUIsR0FBUW5qQixLQUFLdzhDLEVBQUFBO2NBQ2QsT0FBTTtBQUVMLG9CQUFNaDhDLEtBQUswNkIsR0FBSzhnQixTQUFTOTJCLEVBQUFBO0FBQ3pCMDJCLGdCQUFBQSxHQUFTNTdDLEtBQUtRLEVBQUFBO2NBQ2Y7WUFBQTtBQUdILGdCQUFJdWxCLEdBQWM5aUIsRUFBQUE7QUFFaEIsdUJBQVMrRyxLQUFJLEdBQUdFLEtBQU1qSCxHQUFLcEYsUUFBUW1NLEtBQUlFLElBQUtGO0FBQ3RDL0csZ0JBQUFBLEdBQUsrRyxFQUFBQSxLQUF5QixZQUFBLE9BQVovRyxHQUFLK0csRUFBQUEsSUFDekJxeUMsR0FBWXA1QyxHQUFLK0csRUFBQUEsQ0FBQUEsSUFFakI2MEIsUUFBUUMsS0FDTiwwREFBMEQ5MEIsRUFBQUE7aUJBSTNEO0FBQUEsa0JBQUEsQ0FBSS9HLE1BQXdCLFlBQUEsT0FBVEE7QUFJeEIsc0JBQU0sSUFBSXk3QixNQUFNLGtCQUFBO0FBRmhCMmQsY0FBQUEsR0FBWXA1QyxFQUFBQTtZQUdiO0FBS0QsZ0JBSEkyNEMsR0FBUy85QyxVQUNYekUsS0FBSzZpRCxTQUFTLE9BQU8sRUFBRXA1QixPQUFPKzRCLEdBQUFBLEdBQVkxRSxFQUFBQSxHQUV4Q2dGLEdBQVdyK0MsUUFBUTtBQUNyQixrQkFBTThOLEtBQVEsRUFBRWtYLE9BQU9xNUIsSUFBWS80QixTQUFTQSxJQUFTbGdCLE1BQU1rNUMsR0FBQUE7QUFRM0QvaUQsbUJBQUs2aUQsU0FBUyxVQUFVdHdDLElBQU91ckMsRUFBQUE7WUFDaEM7QUFFRCxtQkFBT2xXLEdBQUE0YSxFQUFBQSxFQUFRMWhELEtBQVIwaEQsSUFBZ0JNLEVBQUFBO1VBQ3pCLEVBQUEsR0FFQSxFQUFBdjhDLEtBQUEsY0FBQWxELE9Ba0NPLFNBQ0x3RyxJQUNBaTBDLElBQUFBO0FBQW9CLGdCQUFBbjFCLElBQUE0NkIsS0FBQXZqRDtBQUVmMnNCLGVBQWM5aUIsRUFBQUEsTUFDakJBLEtBQU8sQ0FBQ0EsRUFBQUE7QUFHVixnQkFBTTI1QyxLQUFrQnI1QixHQUFBeEIsS0FBQXdCLEdBQUF0Z0IsRUFBQUEsRUFBSS9JLEtBQUorSSxJQUVwQixTQUNFc2YsSUFBQUE7QUFLQSxrQkFBTVksS0FBVXc1QixHQUFLbEIsTUFBTS8vQyxJQUFJNm1CLEdBQU9vNkIsR0FBS2pCLE9BQUFBLENBQUFBO0FBQzNDLGtCQUFlLFFBQVh2NEI7QUFDRixzQkFBTSxJQUFJdWIsTUFBTSw2Q0FBQTtBQUVsQixxQkFBTyxFQUFFdmIsU0FBQUEsSUFBU1osUUFBQUEsR0FBQUE7WUFDbkIsQ0FBQSxDQUFBLEVBQ0Zyb0IsS0FBQTZuQixJQUVDLFNBQUE4NEIsSUFBQUE7QUFPSSxrQkFORjEzQixLQUFPMDNCLEdBQVAxM0IsU0FDQVosS0FBTXM0QixHQUFOdDRCLFFBTU0vaEIsS0FBSzJpQixHQUFRdzVCLEdBQUtqQixPQUFBQSxHQUNsQlMsS0FBQUEsU25IN1pkL2MsSUFBQUE7QUFDMkIseUJBQUFyZCxJQUFBNDBCLEtBQUF0OEMsVUFBQXdELFFBQXhCZy9DLEtBQUFBLElBQXdCbjJDLE1BQUFpd0MsS0FBQUEsSUFBQUEsS0FBQUEsSUFBQUEsQ0FBQUEsR0FBQUMsS0FBQSxHQUFBQSxLQUFBRCxJQUFBQztBQUF4QmlHLGtCQUFBQSxHQUF3QmpHLEtBQUF2OEMsQ0FBQUEsSUFBQUEsVUFBQXU4QyxFQUFBQTtBQUUzQix1QkFBT2xXLEdBQWdCem1DLE1BQUFBLFFBQUErbUMsR0FBQWpmLEtBQUEsQ0FBQyxDQUFBLEdBQVdxZCxFQUFBQSxDQUFBQSxFQUFJbGxDLEtBQUE2bkIsSUFBSzg2QixFQUFBQSxDQUFBQTtjQUM5QyxFbUh5Wm1EMTVCLElBQVNaLEVBQUFBO0FBSWxELHFCQUZBbzZCLEdBQUtsQixNQUFNaHRDLElBQUlqTyxJQUFJMjdDLEVBQUFBLEdBRVosRUFDTDM3QyxJQUFBQSxJQUNBMmlCLFNBQVNBLElBQ1RnNUIsYUFBQUEsR0FBQUE7WUFFSixDQUFBO0FBR0osZ0JBQUlTLEdBQWdCLytDLFFBQVE7QUFDMUIsa0JBQU04TixLQUErQyxFQUNuRGtYLE9BQU9VLEdBQUFxNUIsRUFBQUEsRUFBZTFpRCxLQUFmMGlELElBQW9CLFNBQUNuZ0QsSUFBQUE7QUFBSyx1QkFBU0EsR0FBTStEO2NBQUFBLENBQUFBLEdBQ2hEMmlCLFNBQVNJLEdBQUFxNUIsRUFBQUEsRUFBZTFpRCxLQUFmMGlELElBQ1AsU0FBQ25nRCxJQUFBQTtBQUFLLHVCQUE2QkEsR0FBTTBtQjtjQUFBQSxDQUFBQSxHQUUzQ2xnQixNQUFNc2dCLEdBQUFxNUIsRUFBQUEsRUFBZTFpRCxLQUFmMGlELElBQ0osU0FBQ25nRCxJQUFBQTtBQUFLLHVCQUE2QkEsR0FBTTAvQztjQUFXLENBQUEsRUFBQTtBQVl4RCxxQkFGQS9pRCxLQUFLNmlELFNBQVMsVUFBVXR3QyxJQUFPdXJDLEVBQUFBLEdBRXhCdnJDLEdBQU1rWDtZQUNkO0FBQ0MsbUJBQU8sQ0FBQTtVQUVYLEVBQUEsR0E0REEsRUFBQWxqQixLQUFBLE9BQUFsRCxPQUNPLFNBQ0xvaEIsSUFDQUMsSUFBQUE7QUFTQSxnQkFBSXRkLEtBQUFBLFFBQ0FzOEMsS0FBQUEsUUFDQTkzQyxLQUFBQTtBQUNBb3hDLGVBQUt2NEIsRUFBQUEsS0FFUHJkLEtBQUtxZCxJQUNMN1ksS0FBVThZLE1BQ0RpSSxHQUFjbEksRUFBQUEsS0FFdkJpL0IsS0FBTWovQixJQUNON1ksS0FBVThZLE1BR1Y5WSxLQUFVNlk7QUFJWixnQkFnRmtCay9CLElBaEZaQyxLQUNKaDRDLE1BQWtDLGFBQXZCQSxHQUFRZzRDLGFBQTBCLFdBQVcsU0FjcERsc0MsS0FBUzlMLE1BQU9zZSxHQUFJdGUsRUFBQUEsR0FDcEI2ZCxLQUFrQyxDQUFBLEdBQ3BDcUMsS0FBQUEsUUFDQSszQixLQUFBQSxRQUNBQyxLQUFBQTtBQUdKLGdCQUFVLFFBQU4xOEM7QUFBQUEsZUFFRjBrQixLQUFPOXJCLEtBQUtxaUQsTUFBTS8vQyxJQUFJOEUsRUFBQUEsTUFDVnNRLE1BQUFBLENBQVdBLEdBQU9vVSxFQUFBQSxNQUM1QkEsS0FBQUE7cUJBRWMsUUFBUDQzQjtBQUVULHVCQUFTOXlDLEtBQUksR0FBR0UsS0FBTTR5QyxHQUFJai9DLFFBQVFtTSxLQUFJRSxJQUFLRjtBQUU3Qix5QkFEWmtiLEtBQU85ckIsS0FBS3FpRCxNQUFNLy9DLElBQUlvaEQsR0FBSTl5QyxFQUFBQSxDQUFBQSxNQUNKOEcsTUFBQUEsQ0FBVUEsR0FBT29VLEVBQUFBLEtBQ3JDckMsR0FBTTdpQixLQUFLa2xCLEVBQUFBOztBQU1mLHVCQUhLbEQsSUFHSWhZLEtBQUksR0FBR0UsTUFEaEIreUMsS0FBT3oyQixHQUFPMjJCLEdBQUFuN0IsS0FBQTVvQixLQUFLcWlELEtBQUFBLEVBQUt2aEQsS0FBQThuQixFQUFBQSxDQUFBQSxHQUNNbmtCLFFBQVFtTSxLQUFJRSxJQUFLRjtBQUM3Q2t6QyxnQkFBQUEsS0FBU0QsR0FBUWp6QyxFQUFBQSxHQUVMLFNBRFprYixLQUFPOXJCLEtBQUtxaUQsTUFBTS8vQyxJQUFJd2hELEVBQUFBLE1BQ0Fwc0MsTUFBQUEsQ0FBVUEsR0FBT29VLEVBQUFBLEtBQ3JDckMsR0FBTTdpQixLQUFLa2xCLEVBQUFBO0FBV2pCLGdCQUxJbGdCLE1BQVdBLEdBQVFvNEMsU0FBZXAwQyxRQUFOeEksTUFDOUJwSCxLQUFLaWtELE1BQU14NkIsSUFBTzdkLEdBQVFvNEMsS0FBQUEsR0FJeEJwNEMsTUFBV0EsR0FBUXM0QyxRQUFRO0FBQzdCLGtCQUFNQSxLQUFTdDRDLEdBQVFzNEM7QUFDdkIsa0JBQVV0MEMsUUFBTnhJLE1BQTJCLFFBQVIwa0I7QUFDckJBLGdCQUFBQSxLQUFPOXJCLEtBQUtta0QsY0FBY3I0QixJQUFNbzRCLEVBQUFBOztBQUVoQyx5QkFBU3R6QyxLQUFJLEdBQUdFLEtBQU0yWSxHQUFNaGxCLFFBQVFtTSxLQUFJRSxJQUFLRjtBQUMzQzZZLGtCQUFBQSxHQUFNN1ksRUFBQUEsSUFBSzVRLEtBQUtta0QsY0FBYzE2QixHQUFNN1ksRUFBQUEsR0FBSXN6QyxFQUFBQTtZQU03QztBQUdELGdCQUFrQixZQUFkTixJQUF3QjtBQUUxQix1QkFETW43QyxLQUFpRCxDQUFBLEdBQzlDbUksS0FBSSxHQUFHRSxLQUFNMlksR0FBTWhsQixRQUFRbU0sS0FBSUUsSUFBS0YsTUFBSztBQUNoRCxvQkFBTXd6QyxLQUFZMzZCLEdBQU03WSxFQUFBQTtBQUl4Qm5JLGdCQUFBQSxHQURlMjdDLEdBQVVwa0QsS0FBS3NpRCxPQUFBQSxDQUFBQSxJQUNqQjhCO2NBQ2Q7QUFDRCxxQkFBTzM3QztZQUNSO0FBQ0MsbUJBQVUsUUFBTnJCLEtBRVMsVUFBWHU4QyxLQUFPNzNCLE9BQUFBLFdBQUk2M0IsS0FBQUEsS0FBSSxPQUdSbDZCO1VBR2IsRUFBQSxHQUVBLEVBQUFsakIsS0FBQSxVQUFBbEQsT0FDTyxTQUFPdUksSUFBQUE7QUFDWixnQkFBTS9CLEtBQU83SixLQUFLcWlELE9BQ1ozcUMsS0FBUzlMLE1BQU9zZSxHQUFJdGUsRUFBQUEsR0FDcEJvNEMsS0FBUXA0QyxNQUFXQSxHQUFRbzRDLE9BQzNCSCxLQUFPejJCLEdBQU8yMkIsR0FBQWw2QyxFQUFBQSxFQUFJL0ksS0FBSitJLEVBQUFBLENBQUFBLEdBQ2Q2NUMsS0FBWSxDQUFBO0FBRWxCLGdCQUFJaHNDO0FBRUYsa0JBQUlzc0MsSUFBTztBQUdULHlCQURNdjZCLEtBQVEsQ0FBQSxHQUNMN1ksS0FBSSxHQUFHRSxLQUFNK3lDLEdBQVFwL0MsUUFBUW1NLEtBQUlFLElBQUtGLE1BQUs7QUFDbEQsc0JBQU14SixLQUFLeThDLEdBQVFqekMsRUFBQUEsR0FDYmtiLEtBQU85ckIsS0FBS3FpRCxNQUFNLy9DLElBQUk4RSxFQUFBQTtBQUNoQiwwQkFBUjBrQixNQUFnQnBVLEdBQU9vVSxFQUFBQSxLQUN6QnJDLEdBQU03aUIsS0FBS2tsQixFQUFBQTtnQkFFZDtBQUVEOXJCLHFCQUFLaWtELE1BQU14NkIsSUFBT3U2QixFQUFBQTtBQUVsQix5QkFBU3B6QyxLQUFJLEdBQUdFLEtBQU0yWSxHQUFNaGxCLFFBQVFtTSxLQUFJRSxJQUFLRjtBQUMzQzh5QyxrQkFBQUEsR0FBSTk4QyxLQUFLNmlCLEdBQU03WSxFQUFBQSxFQUFHNVEsS0FBS3NpRCxPQUFBQSxDQUFBQTtjQUUxQjtBQUVDLHlCQUFTMXhDLEtBQUksR0FBR0UsS0FBTSt5QyxHQUFRcC9DLFFBQVFtTSxLQUFJRSxJQUFLRixNQUFLO0FBQ2xELHNCQUFNeEosS0FBS3k4QyxHQUFRanpDLEVBQUFBLEdBQ2JrYixLQUFPOXJCLEtBQUtxaUQsTUFBTS8vQyxJQUFJOEUsRUFBQUE7QUFDaEIsMEJBQVIwa0IsTUFBZ0JwVSxHQUFPb1UsRUFBQUEsS0FDekI0M0IsR0FBSTk4QyxLQUFLa2xCLEdBQUs5ckIsS0FBS3NpRCxPQUFBQSxDQUFBQTtnQkFFdEI7cUJBSUMwQixJQUFPO0FBR1QsdUJBRE12NkIsS0FBUSxDQUFBLEdBQ0w3WSxLQUFJLEdBQUdFLEtBQU0reUMsR0FBUXAvQyxRQUFRbU0sS0FBSUUsSUFBS0YsTUFBSztBQUNsRCxvQkFBTXhKLEtBQUt5OEMsR0FBUWp6QyxFQUFBQTtBQUNuQjZZLGdCQUFBQSxHQUFNN2lCLEtBQUtpRCxHQUFLdkgsSUFBSThFLEVBQUFBLENBQUFBO2NBQ3JCO0FBRURwSCxtQkFBS2lrRCxNQUFNeDZCLElBQU91NkIsRUFBQUE7QUFFbEIsdUJBQVNwekMsS0FBSSxHQUFHRSxLQUFNMlksR0FBTWhsQixRQUFRbU0sS0FBSUUsSUFBS0Y7QUFDM0M4eUMsZ0JBQUFBLEdBQUk5OEMsS0FBSzZpQixHQUFNN1ksRUFBQUEsRUFBRzVRLEtBQUtzaUQsT0FBQUEsQ0FBQUE7WUFFMUI7QUFFQyx1QkFBUzF4QyxLQUFJLEdBQUdFLEtBQU0reUMsR0FBUXAvQyxRQUFRbU0sS0FBSUUsSUFBS0YsTUFBSztBQUNsRCxvQkFBTXhKLEtBQUt5OEMsR0FBUWp6QyxFQUFBQSxHQUNia2IsS0FBT2ppQixHQUFLdkgsSUFBSThFLEVBQUFBO0FBQ1Ysd0JBQVIwa0IsTUFDRjQzQixHQUFJOThDLEtBQUtrbEIsR0FBSzlyQixLQUFLc2lELE9BQUFBLENBQUFBO2NBRXRCO0FBSUwsbUJBQU9vQjtVQUNULEVBQUEsR0FFQSxFQUFBbjlDLEtBQUEsY0FBQWxELE9BQ08sV0FBQTtBQUNMLG1CQUFPckQ7VUFDVCxFQUFBLEdBRUEsRUFBQXVHLEtBQUEsV0FBQWxELE9BQ08sU0FDTDRtQixJQUNBcmUsSUFBQUE7QUFFQSxnQkFBTThMLEtBQVM5TCxNQUFPc2UsR0FBSXRlLEVBQUFBLEdBQ3BCL0IsS0FBTzdKLEtBQUtxaUQsT0FDWndCLEtBQU96MkIsR0FBTzIyQixHQUFBbDZDLEVBQUFBLEVBQUkvSSxLQUFKK0ksRUFBQUEsQ0FBQUE7QUFFcEIsZ0JBQUkrQixNQUFXQSxHQUFRbzRDO0FBSXJCLHVCQUZNdjZCLEtBQWtDenBCLEtBQUtzQyxJQUFJc0osRUFBQUEsR0FFeENnRixLQUFJLEdBQUdFLEtBQU0yWSxHQUFNaGxCLFFBQVFtTSxLQUFJRSxJQUFLRixNQUFLO0FBQ2hELG9CQUFNa2IsS0FBT3JDLEdBQU03WSxFQUFBQTtBQUVuQnFaLGdCQUFBQSxHQUFTNkIsSUFERUEsR0FBSzlyQixLQUFLc2lELE9BQUFBLENBQUFBO2NBRXRCOztBQUdELHVCQUFTMXhDLEtBQUksR0FBR0UsS0FBTSt5QyxHQUFRcC9DLFFBQVFtTSxLQUFJRSxJQUFLRixNQUFLO0FBQ2xELG9CQUFNeEosS0FBS3k4QyxHQUFRanpDLEVBQUFBLEdBQ2JrYixLQUFPOXJCLEtBQUtxaUQsTUFBTS8vQyxJQUFJOEUsRUFBQUE7QUFDaEIsd0JBQVIwa0IsTUFBa0JwVSxNQUFBQSxDQUFVQSxHQUFPb1UsRUFBQUEsS0FDckM3QixHQUFTNkIsSUFBTTFrQixFQUFBQTtjQUVsQjtVQUVMLEVBQUEsR0FFQSxFQUFBYixLQUFBLE9BQUFsRCxPQUNPLFNBQ0w0bUIsSUFDQXJlLElBQUFBO0FBUUEscUJBTk04TCxLQUFTOUwsTUFBT3NlLEdBQUl0ZSxFQUFBQSxHQUNwQnk0QyxLQUFtQixDQUFBLEdBQ25CeDZDLEtBQU83SixLQUFLcWlELE9BQ1p3QixLQUFPejJCLEdBQU8yMkIsR0FBQWw2QyxFQUFBQSxFQUFJL0ksS0FBSitJLEVBQUFBLENBQUFBLEdBR1grRyxLQUFJLEdBQUdFLEtBQU0reUMsR0FBUXAvQyxRQUFRbU0sS0FBSUUsSUFBS0YsTUFBSztBQUNsRCxrQkFBTXhKLEtBQUt5OEMsR0FBUWp6QyxFQUFBQSxHQUNia2IsS0FBTzlyQixLQUFLcWlELE1BQU0vL0MsSUFBSThFLEVBQUFBO0FBQ2hCLHNCQUFSMGtCLE1BQWtCcFUsTUFBQUEsQ0FBVUEsR0FBT29VLEVBQUFBLEtBQ3JDdTRCLEdBQVl6OUMsS0FBS3FqQixHQUFTNkIsSUFBTTFrQixFQUFBQSxDQUFBQTtZQUVuQztBQU9ELG1CQUpJd0UsTUFBV0EsR0FBUW80QyxTQUNyQmhrRCxLQUFLaWtELE1BQU1JLElBQWF6NEMsR0FBUW80QyxLQUFBQSxHQUczQks7VUFDVCxFQUFBLEdBV0EsRUFBQTk5QyxLQUFBLGlCQUFBbEQsT0FRUSxTQUNOeW9CLElBQ0FvNEIsSUFBQUE7QUFBZ0MsZ0JBQUFyN0I7QUFFaEMsbUJBQUtpRCxLQUtFbkMsR0FBQWQsS0FDTDhELEdBQWN1M0IsRUFBQUEsSUFFVkEsS0FFQzNiLEdBQVkyYixFQUFBQSxDQUFBQSxFQUFlcGpELEtBQUErbkIsSUFFaEMsU0FBQ3k3QixJQUFjQyxJQUFBQTtBQUViLHFCQURBRCxHQUFhQyxFQUFBQSxJQUFTejRCLEdBQUt5NEIsRUFBQUEsR0FDcEJEO1lBQ1IsR0FDRCxDQUFFLENBQUEsSUFkS3g0QjtVQWdCWCxFQUFBLEdBRUEsRUFBQXZsQixLQUFBLFNBQUFsRCxPQU9RLFNBQVNvbUIsSUFBWXU2QixJQUFBQTtBQUMzQixnQkFBcUIsWUFBQSxPQUFWQSxJQUFvQjtBQUU3QixrQkFBTS83QyxLQUFPKzdDO0FBQ2J4QyxpQkFBQS8zQixFQUFBQSxFQUFLM29CLEtBQUwyb0IsSUFBVyxTQUFDemdCLElBQUd5QyxJQUFBQTtBQUViLG9CQUFNKzRDLEtBQU14N0MsR0FBVWYsRUFBQUEsR0FDaEJ3OEMsS0FBTWg1QyxHQUFVeEQsRUFBQUE7QUFDdEIsdUJBQU91OEMsS0FBS0MsS0FBSyxJQUFJRCxLQUFLQyxLQUFBQSxLQUFVO2NBQ3RDLENBQUE7WUFDRCxPQUFNO0FBQUEsa0JBQXFCLGNBQUEsT0FBVlQ7QUFNaEIsc0JBQU0sSUFBSXprRCxVQUFVLHNDQUFBO0FBSnBCaWlELGlCQUFBLzNCLEVBQUFBLEVBQUszb0IsS0FBTDJvQixJQUFXdTZCLEVBQUFBO1lBS1o7VUFDSCxFQUFBLEdBRUEsRUFBQXo5QyxLQUFBLFVBQUFsRCxPQTBCTyxTQUFPK0QsSUFBK0IwMkMsSUFBQUE7QUFPM0MscUJBTk00RyxLQUFtQixDQUFBLEdBQ25CQyxLQUF5QyxDQUFBLEdBR3pDakIsS0FBTS8yQixHQUFjdmxCLEVBQUFBLElBQU1BLEtBQUssQ0FBQ0EsRUFBQUEsR0FFN0J3SixLQUFJLEdBQUdFLEtBQU00eUMsR0FBSWovQyxRQUFRbU0sS0FBSUUsSUFBS0YsTUFBSztBQUM5QyxrQkFBTWtiLEtBQU85ckIsS0FBS2twQixRQUFRdzZCLEdBQUk5eUMsRUFBQUEsQ0FBQUE7QUFDOUIsa0JBQUlrYixJQUFNO0FBQ1Isb0JBQU1nNEIsS0FBZ0JoNEIsR0FBSzlyQixLQUFLc2lELE9BQUFBO0FBQ2xCLHdCQUFWd0IsT0FDRlksR0FBVzk5QyxLQUFLazlDLEVBQUFBLEdBQ2hCYSxHQUFhLzlDLEtBQUtrbEIsRUFBQUE7Y0FFckI7WUFDRjtBQVVELG1CQVJJNDRCLEdBQVdqZ0QsVUFDYnpFLEtBQUs2aUQsU0FDSCxVQUNBLEVBQUVwNUIsT0FBT2k3QixJQUFZMzZCLFNBQVM0NkIsR0FBQUEsR0FDOUI3RyxFQUFBQSxHQUlHNEc7VUFDVCxFQUFBLEdBRUEsRUFBQW4rQyxLQUFBLFdBQUFsRCxPQU1RLFNBQVErRCxJQUFBQTtBQUdkLGdCQUFJdzlDO0FBVUosZ0JBUEk1SCxHQUFLNTFDLEVBQUFBLElBQ1B3OUMsS0FBUXg5QyxLQUNDQSxNQUFvQixZQUFBLE9BQVBBLE9BQ3RCdzlDLEtBQVF4OUMsR0FBR3BILEtBQUtzaUQsT0FBQUEsSUFJTCxRQUFUc0MsTUFBaUI1a0QsS0FBS3FpRCxNQUFNL3NDLElBQUlzdkMsRUFBQUEsR0FBUTtBQUMxQyxrQkFBTTk0QixLQUFPOXJCLEtBQUtxaUQsTUFBTS8vQyxJQUFJc2lELEVBQUFBLEtBQVU7QUFHdEMscUJBRkE1a0QsS0FBS3FpRCxNQUFNNXhCLE9BQU9tMEIsRUFBQUEsR0FBQUEsRUFDaEI1a0QsS0FBS3lFLFFBQ0FxbkI7WUFDUjtBQUVELG1CQUFPO1VBQ1QsRUFBQSxHQUVBLEVBQUF2bEIsS0FBQSxTQUFBbEQsT0FRTyxTQUFNeTZDLElBQUFBO0FBSVgscUJBSitCcDBCLElBQ3pCZzZCLEtBQUd0MkIsR0FBTzIyQixHQUFBcjZCLEtBQUkxcEIsS0FBQ3FpRCxLQUFBQSxFQUFLdmhELEtBQUE0b0IsRUFBQUEsQ0FBQUEsR0FDcEJELEtBQWtDLENBQUEsR0FFL0I3WSxLQUFJLEdBQUdFLEtBQU00eUMsR0FBSWovQyxRQUFRbU0sS0FBSUUsSUFBS0Y7QUFDekM2WSxjQUFBQSxHQUFNN2lCLEtBQUs1RyxLQUFLcWlELE1BQU0vL0MsSUFBSW9oRCxHQUFJOXlDLEVBQUFBLENBQUFBLENBQUFBO0FBUWhDLG1CQUxBNVEsS0FBS3FpRCxNQUFNN3hCLE1BQUFBLEdBQ1h4d0IsS0FBS3lFLFNBQVMsR0FFZHpFLEtBQUs2aUQsU0FBUyxVQUFVLEVBQUVwNUIsT0FBT2k2QixJQUFLMzVCLFNBQVNOLEdBQUFBLEdBQVNxMEIsRUFBQUEsR0FFakQ0RjtVQUNULEVBQUEsR0FFQSxFQUFBbjlDLEtBQUEsT0FBQWxELE9BTU8sU0FBSWtoRCxJQUFBQTtBQUFpQixnQkFBQXZGLElBSVlqWCxJQUhsQzkyQixLQUFNLE1BQ040ekMsS0FBVyxNQUFLN2MsS0FBQUMsR0FFRDZjLEdBQUE5RixLQUFJaC9DLEtBQUNxaUQsS0FBQUEsRUFBS3ZoRCxLQUFBaytDLEVBQUFBLENBQUFBO0FBQVMsZ0JBQUE7QUFBdEMsbUJBQUFoWCxHQUFBRyxFQUFBQSxHQUFBQSxFQUFBSixLQUFBQyxHQUFBcjZCLEVBQUFBLEdBQUFzVCxRQUF3QztBQUFBLG9CQUE3QjZLLEtBQUlpYyxHQUFBMWtDLE9BQ1AwaEQsS0FBWWo1QixHQUFLeTRCLEVBQUFBO0FBRUEsNEJBQUEsT0FBZFEsT0FDTSxRQUFaRixNQUFvQkUsS0FBWUYsUUFFakM1ekMsS0FBTTZhLElBQ04rNEIsS0FBV0U7Y0FFZDtZQUFBLFNBQUExYyxJQUFBQTtBQUFBTCxjQUFBQSxHQUFBamIsRUFBQXNiLEVBQUFBO1lBQUEsVUFBQTtBQUFBTCxjQUFBQSxHQUFBbmxDLEVBQUFBO1lBQUE7QUFFRCxtQkFBT29PLE1BQU87VUFDaEIsRUFBQSxHQUVBLEVBQUExSyxLQUFBLE9BQUFsRCxPQU1PLFNBQUlraEQsSUFBQUE7QUFBaUIsZ0JBQUFyRixJQUlZVixJQUhsQzF3QyxLQUFNLE1BQ05rM0MsS0FBVyxNQUFLekcsS0FBQXRXLEdBRUQ2YyxHQUFBNUYsS0FBSWwvQyxLQUFDcWlELEtBQUFBLEVBQUt2aEQsS0FBQW8rQyxFQUFBQSxDQUFBQTtBQUFTLGdCQUFBO0FBQXRDLG1CQUFBWCxHQUFBcFcsRUFBQUEsR0FBQUEsRUFBQXFXLEtBQUFELEdBQUE1d0MsRUFBQUEsR0FBQXNULFFBQXdDO0FBQUEsb0JBQTdCNkssS0FBSTB5QixHQUFBbjdDLE9BQ1AwaEQsS0FBWWo1QixHQUFLeTRCLEVBQUFBO0FBRUEsNEJBQUEsT0FBZFEsT0FDTSxRQUFaQyxNQUFvQkQsS0FBWUMsUUFFakNsM0MsS0FBTWdlLElBQ05rNUIsS0FBV0Q7Y0FFZDtZQUFBLFNBQUExYyxJQUFBQTtBQUFBa1csY0FBQUEsR0FBQXh4QixFQUFBc2IsRUFBQUE7WUFBQSxVQUFBO0FBQUFrVyxjQUFBQSxHQUFBMTdDLEVBQUFBO1lBQUE7QUFFRCxtQkFBT2lMLE1BQU87VUFDaEIsRUFBQSxHQUlBLEVBQUF2SCxLQUFBLFlBQUFsRCxPQU1PLFNBQTJCbXZCLElBQUFBO0FBTWhDLHFCQUxNM29CLEtBQU83SixLQUFLcWlELE9BQ1p3QixLQUFPejJCLEdBQU8yMkIsR0FBQWw2QyxFQUFBQSxFQUFJL0ksS0FBSitJLEVBQUFBLENBQUFBLEdBQ2RrWCxLQUFvQixDQUFBLEdBQ3RCdWdCLEtBQVEsR0FFSDF3QixLQUFJLEdBQUdFLEtBQU0reUMsR0FBUXAvQyxRQUFRbU0sS0FBSUUsSUFBS0YsTUFBSztBQUtsRCx1QkFKTXhKLEtBQUt5OEMsR0FBUWp6QyxFQUFBQSxHQUVidk4sS0FET3dHLEdBQUt2SCxJQUFJOEUsRUFBQUEsRUFDTW9yQixFQUFBQSxHQUN4Qnl5QixLQUFBQSxPQUNLcm9DLEtBQUksR0FBR0EsS0FBSTBrQixJQUFPMWtCO0FBQ3pCLG9CQUFJbUUsR0FBT25FLEVBQUFBLEtBQU12WixJQUFPO0FBQ3RCNGhELGtCQUFBQSxLQUFBQTtBQUNBO2dCQUNEO0FBRUVBLGNBQUFBLE1BQUFBLFdBQVU1aEQsT0FDYjBkLEdBQU91Z0IsRUFBQUEsSUFBU2orQixJQUNoQmkrQjtZQUVIO0FBRUQsbUJBQU92Z0I7VUFDVCxFQUFBLEdBRUEsRUFBQXhhLEtBQUEsWUFBQWxELE9BTVEsU0FBU3lvQixJQUFBQTtBQUNmLGdCQUFNcTNCLEtBMTlCVixTQUNFcjNCLElBQ0FrM0IsSUFBQUE7QUFPQSxxQkFMb0IsUUFBaEJsM0IsR0FBS2szQixFQUFBQSxNQUVQbDNCLEdBQUtrM0IsRUFBQUEsSUFBVWtDLEdBQUFBLElBR1ZwNUI7WUFDVCxFQWc5Qm9DQSxJQUFNOXJCLEtBQUtzaUQsT0FBQUEsR0FDckNsN0MsS0FBSys3QyxHQUFTbmpELEtBQUtzaUQsT0FBQUE7QUFHekIsZ0JBQUl0aUQsS0FBS3FpRCxNQUFNL3NDLElBQUlsTyxFQUFBQTtBQUVqQixvQkFBTSxJQUFJaytCLE1BQ1IsbUNBQW1DbCtCLEtBQUssaUJBQUE7QUFPNUMsbUJBSEFwSCxLQUFLcWlELE1BQU1odEMsSUFBSWpPLElBQUkrN0MsRUFBQUEsR0FBQUEsRUFDakJuakQsS0FBS3lFLFFBRUEyQztVQUNULEVBQUEsR0FFQSxFQUFBYixLQUFBLGVBQUFsRCxPQU9RLFNBQVk4bEIsSUFBQUE7QUFDbEIsZ0JBQU0vaEIsS0FBWStoQixHQUFPbnBCLEtBQUtzaUQsT0FBQUE7QUFDOUIsZ0JBQVUsUUFBTmw3QztBQUNGLG9CQUFNLElBQUlrK0IsTUFDUiwrQ0FDRTZmLEdBQWVoOEIsRUFBQUEsSUFDZixHQUFBO0FBR04sZ0JBQU0yQyxLQUFPOXJCLEtBQUtxaUQsTUFBTS8vQyxJQUFJOEUsRUFBQUE7QUFDNUIsZ0JBQUEsQ0FBSzBrQjtBQUVILG9CQUFNLElBQUl3WixNQUFNLHlDQUF5Q2wrQixLQUFLLFFBQUE7QUFLaEUsbUJBRkFwSCxLQUFLcWlELE1BQU1odEMsSUFBSWpPLElBQUVnK0MsR0FBQUEsR0FBT3Q1QixDQUFBQSxHQUFBQSxFQUFBQSxHQUFTM0MsRUFBQUEsQ0FBQUEsR0FFMUIvaEI7VUFDVCxFQUFBLEdBRUEsRUFBQWIsS0FBQSxVQUFBbEQsT0FDTyxTQUFPcWdELElBQUFBO0FBQ1osZ0JBQUlBLElBQUs7QUFDUCxrQkFBTTc1QyxLQUFPN0osS0FBS3FpRDtBQUVsQixxQkFBTyxJQUFJbkUsR0FBaUIsRUFDMUI5NEIsQ0FBQUEsRUFBQUEsR0FBa0IsTUFBQTJ2QixHQUFBcUMsS0FBQSxTQUFBMEksS0FBQUE7QUFBQSxvQkFBQXBCLElBQUFDLElBQUF2M0MsSUFBQTBrQjtBQUFBLHVCQUFBaXBCLEdBQUFob0MsS0FBQSxTQUFBbXpDLElBQUFBO0FBQUE7QUFBQSw0QkFBQUEsR0FBQXZpQyxPQUFBdWlDLEdBQUF0aUMsTUFBQUE7c0JBQUEsS0FBQTtBQUFBOGdDLHdCQUFBQSxLQUFBelcsR0FDQ3liLEVBQUFBLEdBQUd4RCxHQUFBdmlDLE9BQUEsR0FBQStnQyxHQUFBdlcsRUFBQUE7c0JBQUEsS0FBQTtBQUFBLDZCQUFBd1csS0FBQUQsR0FBQS93QyxFQUFBQSxHQUFBc1QsTUFBQTtBQUFBaS9CLDBCQUFBQSxHQUFBdGlDLE9BQUE7QUFBQTt3QkFBQTtBQUNPLDRCQURoQnhXLEtBQUV1M0MsR0FBQXQ3QyxPQUVDLFNBRE55b0IsS0FBT2ppQixHQUFLdkgsSUFBSThFLEVBQUFBLElBQ047QUFBQTg0QywwQkFBQUEsR0FBQXRpQyxPQUFBO0FBQUE7d0JBQUE7QUFDZCwrQkFEY3NpQyxHQUFBdGlDLE9BQUEsR0FDUixDQUFDeFcsSUFBSTBrQixFQUFBQTtzQkFBSyxLQUFBO0FBQUFvMEIsd0JBQUFBLEdBQUF0aUMsT0FBQTtBQUFBO3NCQUFBLEtBQUE7QUFBQXNpQyx3QkFBQUEsR0FBQXRpQyxPQUFBO0FBQUE7c0JBQUEsS0FBQTtBQUFBc2lDLHdCQUFBQSxHQUFBdmlDLE9BQUEsSUFBQXVpQyxHQUFBNUIsS0FBQTRCLEdBQUEsTUFBQSxDQUFBLEdBQUF4QixHQUFBM3hCLEVBQUFtekIsR0FBQTVCLEVBQUFBO3NCQUFBLEtBQUE7QUFBQSwrQkFBQTRCLEdBQUF2aUMsT0FBQSxJQUFBK2dDLEdBQUE3N0MsRUFBQUEsR0FBQXE5QyxHQUFBdkksT0FBQSxFQUFBO3NCQUFBLEtBQUE7c0JBQUEsS0FBQTtBQUFBLCtCQUFBdUksR0FBQWhjLEtBQUFBO29CQUFBQTtnQkFBQSxHQUFBNGIsSUFBQSxNQUFBLENBQUEsQ0FBQSxHQUFBLElBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQTtjQUFBLENBQUEsRUFKSi9LLEVBQUFBLENBQUFBO1lBU3JCO0FBQU0sZ0JBQUEyTDtBQUNMLG1CQUFPLElBQUl4QyxHQUFXLEVBQ3BCOTRCLENBQUFBLEVBQUFBLEdBQW1CMkQsR0FBQTIzQixLQUFBMkUsR0FBQXJsRCxLQUFLcWlELEtBQUFBLENBQUFBLEVBQUt2aEQsS0FBQTQvQyxJQUFjMWdELEtBQUtxaUQsS0FBQUEsRUFBQUEsQ0FBQUE7VUFHdEQsRUFBQSxDQUFBLENBQUEsR0FBQ0o7UUFBQSxFQS84Qk9wRSxFQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsV0FBQUEsTUFBQUEsR0FBQUEsRUFBQUEsS0FBQUEsR0FBQUEsWUFBQUE7QUFBQUEsY0FBQUEsQ0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLFNBQUFBLElBQUFBLElBQUFBO0FBQUFBLGtCQUFBQTtBQUFBQSxrQkFBQUEsQ0FBQUE7QUFBQUE7QUFBQUEsa0JBQUFBLFlBQUFBLE9BQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsT0FBQUEsVUFBQUEsU0FBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsMkJBQUFBLE1BQUFBLEdBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtBQUFBQSxrQkFBQUEsVUFBQUEsTUFBQUEsVUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxnQkFBQUEsTUFBQUEsMkNBQUFBLEtBQUFBLEVBQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtZQUFBQSxFQUFBQSxFQUFBQSxNQUFBQSxNQUFBQSxNQUFBQSxZQUFBQSxPQUFBQSxHQUFBQSxRQUFBQTtBQUFBQSxjQUFBQSxPQUFBQSxLQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsV0FBQUE7Y0FBQUE7QUFBQUEscUJBQUFBLEVBQUFBLEdBQUFBLElBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLHVCQUFBQSxNQUFBQSxHQUFBQSxTQUFBQSxFQUFBQSxNQUFBQSxLQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxzQkFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7WUFBQUE7QUFBQUEsa0JBQUFBLElBQUFBLFVBQUFBLHVJQUFBQTtVQUFBQTtBQUFBQSxjQUFBQSxJQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtBQUFBQSxpQkFBQUEsRUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsWUFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsRUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxNQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUE7QUFBQUEsY0FBQUEsTUFBQUEsUUFBQUEsR0FBQUEsVUFBQUEsR0FBQUEsT0FBQUE7WUFBQUEsVUFBQUE7QUFBQUEsa0JBQUFBO0FBQUFBLHNCQUFBQTtZQUFBQTtVQUFBQSxFQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsV0FBQUEsUUFBQUEsTUFBQUEsS0FBQUEsR0FBQUEsWUFBQUEsS0FBQUEsR0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLElBQUFBLE1BQUFBLEVBQUFBLEdBQUFBLEtBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEdBQUFBLEVBQUFBLElBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGlCQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLGVBQUFBLE9BQUFBLFdBQUFBLENBQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsR0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxjQUFBQSxPQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBO0FBQUFBLHFCQUFBQSxRQUFBQSxVQUFBQSxRQUFBQSxLQUFBQSxHQUFBQSxTQUFBQSxDQUFBQSxHQUFBQSxXQUFBQTtjQUFBQSxDQUFBQSxDQUFBQSxHQUFBQTtZQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxxQkFBQUE7WUFBQUE7VUFB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QUNMOzs7QUN4QkEsTUFBTSxTQUFTO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxjQUFjO0FBQUEsSUFDZCxNQUFNO0FBQUEsSUFDTixZQUFZO0FBQUEsSUFDWixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsSUFDUCxRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsSUFDTixZQUFZO0FBQUEsSUFDWixPQUFPO0FBQUEsSUFDUCxXQUFXO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxZQUFZO0FBQUEsSUFDWixXQUFXO0FBQUEsSUFDWCxPQUFPO0FBQUEsSUFDUCxnQkFBZ0I7QUFBQSxJQUNoQixVQUFVO0FBQUEsSUFDVixTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsSUFDTixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixlQUFlO0FBQUEsSUFDZixVQUFVO0FBQUEsSUFDVixXQUFXO0FBQUEsSUFDWCxVQUFVO0FBQUEsSUFDVixXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixnQkFBZ0I7QUFBQSxJQUNoQixZQUFZO0FBQUEsSUFDWixZQUFZO0FBQUEsSUFDWixTQUFTO0FBQUEsSUFDVCxZQUFZO0FBQUEsSUFDWixjQUFjO0FBQUEsSUFDZCxlQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZixZQUFZO0FBQUEsSUFDWixVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsSUFDYixTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxZQUFZO0FBQUEsSUFDWixXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixhQUFhO0FBQUEsSUFDYixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxZQUFZO0FBQUEsSUFDWixNQUFNO0FBQUEsSUFDTixXQUFXO0FBQUEsSUFDWCxNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUEsSUFDUCxhQUFhO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixVQUFV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eEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDM0csTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDM0csTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDekcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDekcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUE7QUFBQSxJQUczRyxVQUFVLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDbEksUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQ2hJLE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUM5SCxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDOUgsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQzlILFFBQVEsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUNoSSxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDOUgsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQzlILE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNB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LEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hC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LGFBQWEsUUFBd0M7QUFBQSxNQUNuRCxNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsSUFDVixJQUFJO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsTUFDUixVQUFVQTtBQUFBLElBQ1o7QUFBQSxJQUNBLFVBQVUsUUFBd0M7QUFBQSxNQUNoRCxNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsSUFDVixJQUFJO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsTUFDUixVQUFVQTtBQUFBLElBQ1o7QUFBQSxJQUNBLE1BQU0sUUFBd0M7QUFBQSxNQUM1QyxNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsSUFDVixJQUFJO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsTUFDUixVQUFVQTtBQUFBLElBQ1o7QUFBQSxJQUNBLFdBQVc7QUFBQSxNQUNULEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLE1BQU0sUUFBd0M7QUFBQSxRQUM1QyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxJQUNGO0FBQUEsRUFDRjs7O0FEdEhBLE1BQUlDLGVBQVksQ0FBQyxZQUFZLGFBQWEsUUFBUSxXQUFXO0FBQzdELFdBQVNDLGNBQVc7QUFBRSxXQUFPQSxjQUFXLE9BQU8sU0FBUyxPQUFPLE9BQU8sS0FBSyxJQUFJLFNBQVUsR0FBRztBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLElBQUksVUFB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SUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGOyIsCiAgIm5hbWVzIjogWyJoYXNPd25Qcm9wZXJ0eSIsICJmcm9tIiwgIlJlYWN0RGVidWdDdXJyZW50RnJhbWUiLCAiQ29tcG9uZW50IiwgIlB1cmVDb21wb25lbnQiLCAiY3JlYXRlUmVmIiwgImhhc093blByb3BlcnR5IiwgIlJlYWN0RWxlbWVudCIsICJzZWxmIiwgImNyZWF0ZUVsZW1lbnQiLCAiY2xvbmVFbGVtZW50IiwgImlzVmFsaWRFbGVtZW50IiwgIm9iamVjdCIsICJtYXRjaCIsICJmdW5jIiwgInRvQXJyYXkiLCAiY3JlYXRlQ29udGV4dCIsICJlcnJvciIsICJmb3J3YXJkUmVmIiwgInJlbmRlciIsICJtZW1vIiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlUmVkdWNlciIsICJyZWR1Y2VyIiwgInVzZVJlZiIsICJ1c2VFZmZlY3QiLCAidXNlTGF5b3V0RWZmZWN0IiwgInVzZUNhbGxiYWNrIiwgInVzZU1lbW8iLCAidmFsdWUiLCAicHJlZml4IiwgInByb3RvdHlwZSIsICJub2RlIiwgImtleXMiLCAiQ2hpbGRyZW4iLCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwgIm5vZGUiLCAicGVlayIsICJsZW5ndGgiLCAiaW5pdGlhbFRpbWUiLCAiUmVhY3QiLCAiUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSIsICJGcmFnbWVudCIsICJoYXNPd25Qcm9wZXJ0eSIsICJ2YWx1ZSIsICJwcmVmaXgiLCAic2FuaXRpemVVUkwiLCAiX3JlZiIsICJjYXBpdGFsaXplIiwgInRva2VuIiwgIm5vZGUiLCAibWF0Y2giLCAiQ29tcG9uZW50IiwgInByb3RvdHlwZSIsICJ3b3JrSW5Qcm9ncmVzcyIsICJ0b1N0cmluZyIsICJnZXQiLCAic2V0IiwgImdldEFjdGl2ZUVsZW1lbnQiLCAiaXNIeWRyYXRpbmciLCAidmFsaWRhdGVQcm9wcyIsICJpc0FycmF5IiwgIm9wdGlvbnMiLCAiZnVuYyIsICJpc0N1c3RvbVByb3BlcnR5IiwgInN0cmluZyIsICJjaGFyYWN0ZXIiLCAic3R5bGVzIiwgImRlbGltaXRlciIsICJzdHlsZSIsICJyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzIiwgInBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMiLCAiZXJyb3IiLCAiY2FsbENhbGxiYWNrIiwgImN1cnJlbnQiLCAicm9vdCIsICJxdWV1ZWRFdmVudCIsICJwcmVmaXhlcyIsICJpbmRleCIsICJsb2ciLCAiaXNFdmVudFN1cHBvcnRlZCIsICJmcm9tIiwgImxlbmd0aCIsICJuZXh0IiwgIm5vb3AiLCAiY3JlYXRlRWxlbWVudCIsICJjcmVhdGVJbnN0YW5jZSIsICJjYW5jZWxUaW1lb3V0IiwgImhhcyIsICJjdXJzb3IiLCAibm93IiwgIl9xdWV1ZSIsICJyZW5kZXJMYW5lcyIsICJ1cGRhdGVGcmFnbWVudCIsICJjaGlsZCIsICJyZWNvbmNpbGVDaGlsZEZpYmVycyIsICJpc09iamVjdCIsICJ2ZXJzaW9uIiwgInJlZHVjZXIiLCAicmVuZGVyIiwgInN1YnRyZWVSZW5kZXJMYW5lcyIsICJpc0hpZGRlbiIsICJlcnJvciQxIiwgImNvbW1pdFRpbWUiLCAiaHlkcmF0ZSIsICJjcmVhdGVQb3J0YWwiLCAiY3VycmVudEhvb2siLCAiUmVhY3RDdXJyZW50RGlzcGF0Y2hlciIsICJvYmplY3QiLCAiRWxlbWVudCIsICJGcmFnbWVudCIsICJpc0VsZW1lbnQiLCAiYXNzaWduIiwgImlzVmFsaWRFbGVtZW50IiwgInZhbGlkYXRlIiwgInZhbHVlIiwgImkiLCAiY2hlY2tlciIsICJoYXNPd24iLCAiY2xhc3NOYW1lcyIsICJ2YWx1ZSIsICJyZXF1aXJlX3JlYWN0X2lzX2RldmVsb3BtZW50IiwgIm9iamVjdCIsICJFbGVtZW50IiwgIkZyYWdtZW50IiwgImlzRWxlbWVudCIsICJyZXF1aXJlX3JlYWN0X2lzIiwgImdldFByb3RvdHlwZU9mIiwgImtleXMiLCAidmFsdWUiLCAibGVuZ3RoIiwgInZhbHVlIiwgImxlbmd0aCIsICJTeW1ib2wiLCAiU3ltYm9sIiwgImhhc093blByb3BlcnR5IiwgInZhbHVlIiwgInZhbHVlIiwgIlN5bWJvbCIsICJ2YWx1ZSIsICJpc09iamVjdCIsICJ2YWx1ZSIsICJpc09iamVjdCIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImZ1bmMiLCAiZnVuYyIsICJpc0Z1bmN0aW9uIiwgImlzT2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgInZhbHVlIiwgIm9iamVjdCIsICJvYmplY3QiLCAidmFsdWUiLCAiTWFwIiwgImhhc093blByb3BlcnR5IiwgImhhc093blByb3BlcnR5IiwgInZhbHVlIiwgImxlbmd0aCIsICJNYXAiLCAidmFsdWUiLCAidmFsdWUiLCAic2l6ZSIsICJsZW5ndGgiLCAiTWFwIiwgInZhbHVlIiwgInZhbHVlIiwgInZhbHVlIiwgImxlbmd0aCIsICJsZW5ndGgiLCAiY2FjaGUiLCAib3RoVmFsdWUiLCAiVWludDhBcnJheSIsICJ2YWx1ZSIsICJ2YWx1ZSIsICJTeW1ib2wiLCAiVWludDhBcnJheSIsICJvYmplY3QiLCAibGVuZ3RoIiwgImlzQXJyYXkiLCAiaXNBcnJheSIsICJvYmplY3QiLCAibGVuZ3RoIiwgInZhbHVlIiwgIm9iamVjdCIsICJ2YWx1ZSIsICJ2YWx1ZSIsICJoYXNPd25Qcm9wZXJ0eSIsICJ2YWx1ZSIsICJCdWZmZXIiLCAiaXNCdWZmZXIiLCAidmFsdWUiLCAibGVuZ3RoIiwgInZhbHVlIiwgInZhbHVlIiwgImZ1bmMiLCAidmFsdWUiLCAiaXNUeXBlZEFycmF5IiwgImlzQXJyYXkiLCAiaXNCdWZmZXIiLCAiaXNUeXBlZEFycmF5IiwgImhhc093blByb3BlcnR5IiwgInZhbHVlIiwgImxlbmd0aCIsICJ2YWx1ZSIsICJmdW5jIiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImtleXMiLCAib2JqZWN0IiwgImtleXMiLCAib2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJQcm9taXNlIiwgIlNldCIsICJXZWFrTWFwIiwgIk1hcCIsICJQcm9taXNlIiwgIlNldCIsICJXZWFrTWFwIiwgInZhbHVlIiwgImlzQXJyYXkiLCAiaXNCdWZmZXIiLCAiaXNUeXBlZEFycmF5IiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJ2YWx1ZSIsICJpc0VxdWFsIiwgInZhbHVlIiwgImdsb2JhbCIsICJpc0FycmF5IiwgImlzT2JqZWN0IiwgImlzVW5kZWZpbmVkIiwgImlzTnVtYmVyIiwgImlzRGF0ZSIsICJleHRlbmQiLCAiZm9ybWF0IiwgImxvY2FsZSIsICJ0byIsICJmcm9tIiwgImlzRnVuY3Rpb24iLCAia2V5cyIsICJjYWxlbmRhciIsICJub3ciLCAic2lnbiIsICJ0b2tlbiIsICJvcmRpbmFsIiwgImZ1bmMiLCAibGVuZ3RoIiwgImkiLCAic3RyaW5nIiwgImRpZmYiLCAibG9jYWxlRGF0YSIsICJ2YWx1ZSIsICJnZXQiLCAiaG91cnMiLCAibWludXRlcyIsICJuZXh0IiwgIm1hdGNoIiwgImRlZmF1bHRzIiwgInRva2VucyIsICJtZXJpZGllbSIsICJtaW4iLCAibWF4IiwgInllYXJzIiwgIm1vbnRocyIsICJ3ZWVrcyIsICJkYXlzIiwgInNlY29uZHMiLCAibWlsbGlzZWNvbmRzIiwgIm9mZnNldCIsICJtYXRjaGVzIiwgImJhc2UiLCAiaXNTdHJpbmciLCAicHJvcGVydHkiLCAidG9TdHJpbmciLCAicHJlZml4IiwgInRvQXJyYXkiLCAidG9KU09OIiwgImFicyIsICJyb3VuZCIsICJ0aHJlc2hvbGRzIiwgImlzQXJyYXkiLCAiaXNTdHJpbmciLCAidmFsdWUiLCAiaXNCb29sZWFuIiwgInZhbHVlIiwgImlzTnVtYmVyIiwgInZhbHVlIiwgImlzTnVtYmVyIiwgImlzTmFOIiwgInZhbHVlIiwgImdsb2JhbCIsICJudW1lcmFsIiwgIlZFUlNJT04iLCAiZGVmYXVsdHMiLCAidmFsdWUiLCAiYWJzIiwgIm1pbiIsICJtYXgiLCAic3RyaW5nIiwgIm5leHQiLCAicHJvcGVydHkiLCAibnVtIiwgInZhbHVlIiwgImlzQXJyYXkiLCAidmFsdWUiLCAib2JqZWN0IiwgIm1lbW9pemUiLCAiZnVuYyIsICJjYWNoZSIsICJtZW1vaXplIiwgImZ1bmMiLCAiY2FjaGUiLCAic3RyaW5nIiwgIm1hdGNoIiwgImxlbmd0aCIsICJTeW1ib2wiLCAiaXNBcnJheSIsICJ2YWx1ZSIsICJ0b1N0cmluZyIsICJ2YWx1ZSIsICJpc0FycmF5IiwgInRvU3RyaW5nIiwgInZhbHVlIiwgIm9iamVjdCIsICJ2YWx1ZSIsICJvYmplY3QiLCAibGVuZ3RoIiwgImdldCIsICJvYmplY3QiLCAibGVuZ3RoIiwgImZ1bmMiLCAib2JqZWN0IiwgInZhbHVlIiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJ2YWx1ZSIsICJvYmplY3QiLCAibGVuZ3RoIiwgImtleXMiLCAib2JqZWN0IiwgIm9iamVjdCIsICJpc09iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAib2JqZWN0IiwgIm9iamVjdCIsICJCdWZmZXIiLCAibGVuZ3RoIiwgImxlbmd0aCIsICJvYmplY3QiLCAib2JqZWN0IiwgIm9iamVjdCIsICJvYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAibGVuZ3RoIiwgIlVpbnQ4QXJyYXkiLCAiU3ltYm9sIiwgIm9iamVjdCIsICJpc09iamVjdCIsICJvYmplY3QiLCAib2JqZWN0IiwgInZhbHVlIiwgInZhbHVlIiwgImlzQXJyYXkiLCAiaXNCdWZmZXIiLCAiaXNPYmplY3QiLCAia2V5cyIsICJ2YWx1ZSIsICJvYmplY3QiLCAia2V5IiwgImxlbmd0aCIsICJsZW5ndGgiLCAib2JqZWN0IiwgIm9iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJpc1BsYWluT2JqZWN0IiwgInZhbHVlIiwgImlzUGxhaW5PYmplY3QiLCAidmFsdWUiLCAiU3ltYm9sIiwgImlzQXJyYXkiLCAidmFsdWUiLCAibGVuZ3RoIiwgInZhbHVlIiwgImZsYXR0ZW4iLCAibGVuZ3RoIiwgImZ1bmMiLCAiZnVuYyIsICJsZW5ndGgiLCAidmFsdWUiLCAidmFsdWUiLCAiZnVuYyIsICJzdHJpbmciLCAiZnVuYyIsICJmbGF0dGVuIiwgImZ1bmMiLCAib2JqZWN0IiwgImxlbmd0aCIsICJyZXF1aXJlX3JlYWN0X2lzX2RldmVsb3BtZW50IiwgIm9iamVjdCIsICJFbGVtZW50IiwgIkZyYWdtZW50IiwgImlzRWxlbWVudCIsICJyZXF1aXJlX3JlYWN0X2lzIiwgImVuY29kZSIsICJ2YWx1ZSIsICJwcmVmaXgiLCAibWF0Y2giLCAiYmFzZSIsICJwYXJzZSIsICJ2YWx1ZSIsICJjaGFyIiwgInRvU3RyaW5nIiwgInN0cmluZ2lmeSIsICJ0b1N0cmluZyIsICJlc2NhcGVSZWdFeHAiLCAic3RyaW5nIiwgIl9jbGFzc0NhbGxDaGVjayIsICJnbG9iYWwiLCAidGhpcyIsICJmYWlscyIsICJleGVjIiwgInJlcXVpcmUkJDAiLCAidGVzdCIsICJOQVRJVkVfQklORCIsICJGdW5jdGlvblByb3RvdHlwZSIsICJhcHBseSIsICJjYWxsIiwgInVuY3VycnlUaGlzIiwgInRvU3RyaW5nIiwgInN0cmluZ1NsaWNlIiwgImNsYXNzb2ZSYXciLCAicmVxdWlyZSQkMSIsICJkb2N1bWVudEFsbCIsICIkZG9jdW1lbnRBbGwiLCAiaXNDYWxsYWJsZSIsICJkZXNjcmlwdG9ycyIsICIkcHJvcGVydHlJc0VudW1lcmFibGUiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgImNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciIsICJ2YWx1ZSIsICJjbGFzc29mIiwgInJlcXVpcmUkJDIiLCAiJE9iamVjdCIsICJpc051bGxPclVuZGVmaW5lZCIsICIkVHlwZUVycm9yIiwgInJlcXVpcmVPYmplY3RDb2VyY2libGUiLCAiSW5kZXhlZE9iamVjdCIsICJ0b0luZGV4ZWRPYmplY3QiLCAiaXNPYmplY3QiLCAicGF0aCIsICJnZXRCdWlsdEluIiwgIm1ldGhvZCIsICJ1c2VyQWdlbnQiLCAicHJvY2VzcyIsICJEZW5vIiwgIm1hdGNoIiwgInZlcnNpb24iLCAiVjhfVkVSU0lPTiIsICIkU3RyaW5nIiwgInN5bWJvbCIsICJOQVRJVkVfU1lNQk9MIiwgImlzUHJvdG90eXBlT2YiLCAiVVNFX1NZTUJPTF9BU19VSUQiLCAicmVxdWlyZSQkMyIsICJpc1N5bWJvbCIsICIkU3ltYm9sIiwgInRyeVRvU3RyaW5nIiwgImFDYWxsYWJsZSIsICJnZXRNZXRob2QiLCAiZnVuYyIsICJvcmRpbmFyeVRvUHJpbWl0aXZlIiwgImRlZmluZVByb3BlcnR5IiwgImRlZmluZUdsb2JhbFByb3BlcnR5IiwgInN0b3JlIiwgInNoYXJlZE1vZHVsZSIsICJ0b09iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJoYXNPd24iLCAiaWQiLCAidWlkIiwgInNoYXJlZCIsICJyZXF1aXJlJCQ0IiwgInJlcXVpcmUkJDUiLCAiU3ltYm9sIiwgIldlbGxLbm93blN5bWJvbHNTdG9yZSIsICJ3ZWxsS25vd25TeW1ib2wiLCAidG9QcmltaXRpdmUiLCAidG9Qcm9wZXJ0eUtleSIsICJkb2N1bWVudCIsICJFWElTVFMiLCAiZG9jdW1lbnRDcmVhdGVFbGVtZW50IiwgIkRFU0NSSVBUT1JTIiwgImNyZWF0ZUVsZW1lbnQiLCAicHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUiLCAicmVxdWlyZSQkNiIsICJJRThfRE9NX0RFRklORSIsICJyZXF1aXJlJCQ3IiwgIiRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiaXNGb3JjZWQiLCAic3RyaW5nIiwgImJpbmQiLCAiYW5PYmplY3QiLCAiVjhfUFJPVE9UWVBFX0RFRklORV9CVUciLCAiJGRlZmluZVByb3BlcnR5IiwgIkNPTkZJR1VSQUJMRSIsICJkZWZpbmVQcm9wZXJ0eU1vZHVsZSIsICJjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkiLCAib2JqZWN0IiwgInJlcXVpcmUkJDgiLCAicmVxdWlyZSQkOSIsICJGT1JDRUQiLCAiJCIsICJPYmplY3QiLCAicGFyZW50IiwgImlzQXJyYXkiLCAiZmxvb3IiLCAidHJ1bmMiLCAidG9JbnRlZ2VyT3JJbmZpbml0eSIsICJtaW4iLCAidG9MZW5ndGgiLCAibGVuZ3RoT2ZBcnJheUxpa2UiLCAiZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyIiwgImNyZWF0ZVByb3BlcnR5IiwgIlRPX1NUUklOR19UQUciLCAiVE9fU1RSSU5HX1RBR19TVVBQT1JUIiwgImluc3BlY3RTb3VyY2UiLCAibm9vcCIsICJjb25zdHJ1Y3QiLCAiaXNDb25zdHJ1Y3RvciIsICJjYWxsZWQiLCAiU1BFQ0lFUyIsICIkQXJyYXkiLCAiYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IiLCAiYXJyYXlTcGVjaWVzQ3JlYXRlIiwgImxlbmd0aCIsICJhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0IiwgInJlcXVpcmUkJDEwIiwgInJlcXVpcmUkJDExIiwgImNvbmNhdCIsICJpIiwgIm1heCIsICJ0b0Fic29sdXRlSW5kZXgiLCAiY3JlYXRlTWV0aG9kIiwgImhpZGRlbktleXMiLCAicHVzaCIsICJlbnVtQnVnS2V5cyIsICJpbnRlcm5hbE9iamVjdEtleXMiLCAib2JqZWN0S2V5cyIsICJrZXlzIiwgImRlZmluZVByb3BlcnRpZXMiLCAiaHRtbCIsICJzaGFyZWRLZXkiLCAiZGVmaW5lUHJvcGVydGllc01vZHVsZSIsICJQUk9UT1RZUEUiLCAiSUVfUFJPVE8iLCAiYWN0aXZlWERvY3VtZW50IiwgImNyZWF0ZSIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgIiRnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImFycmF5U2xpY2UiLCAiZGVmaW5lQnVpbHRJbiIsICJkZWZpbmVCdWlsdEluQWNjZXNzb3IiLCAid3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSIsICJTeW1ib2xQcm90b3R5cGUiLCAiVE9fUFJJTUlUSVZFIiwgInNldFRvU3RyaW5nVGFnIiwgIldlYWtNYXAiLCAiVHlwZUVycm9yIiwgInNldCIsICJnZXQiLCAic2VsZiIsICJyZXF1aXJlJCQxMiIsICJyZXF1aXJlJCQxMyIsICJyZXF1aXJlJCQxNCIsICJyZXF1aXJlJCQxNSIsICJyZXF1aXJlJCQxNiIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlIiwgInJlcXVpcmUkJDE3IiwgInJlcXVpcmUkJDE4IiwgImdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSIsICJyZXF1aXJlJCQxOSIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUiLCAicmVxdWlyZSQkMjAiLCAicmVxdWlyZSQkMjEiLCAicmVxdWlyZSQkMjIiLCAicmVxdWlyZSQkMjMiLCAicmVxdWlyZSQkMjQiLCAicmVxdWlyZSQkMjUiLCAicmVxdWlyZSQkMjYiLCAicmVxdWlyZSQkMjciLCAicmVxdWlyZSQkMjgiLCAicmVxdWlyZSQkMjkiLCAicmVxdWlyZSQkMzAiLCAicmVxdWlyZSQkMzEiLCAiZGVmaW5lV2VsbEtub3duU3ltYm9sIiwgInJlcXVpcmUkJDMyIiwgImRlZmluZVN5bWJvbFRvUHJpbWl0aXZlIiwgInJlcXVpcmUkJDMzIiwgInJlcXVpcmUkJDM0IiwgIkludGVybmFsU3RhdGVNb2R1bGUiLCAicmVxdWlyZSQkMzUiLCAiJGZvckVhY2giLCAicmVxdWlyZSQkMzYiLCAic2V0SW50ZXJuYWxTdGF0ZSIsICJnZXRJbnRlcm5hbFN0YXRlIiwgIk9iamVjdFByb3RvdHlwZSIsICJSYW5nZUVycm9yIiwgIm5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIiwgIlN5bWJvbFRvU3RyaW5nUmVnaXN0cnkiLCAia2V5Rm9yIiwgImNoYXJBdCIsICJjaGFyQ29kZUF0IiwgInJlcGxhY2UiLCAicHJldiIsICJuZXh0IiwgInN0cmluZ2lmeSIsICJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiJGdldE93blByb3BlcnR5U3ltYm9scyIsICJDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIiLCAiZ2V0UHJvdG90eXBlT2YiLCAiSVRFUkFUT1IiLCAiQlVHR1lfU0FGQVJJX0lURVJBVE9SUyIsICJJdGVyYXRvclByb3RvdHlwZSIsICJJdGVyYXRvcnMiLCAicmV0dXJuVGhpcyIsICJhUG9zc2libGVQcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAidmFsdWVzIiwgImVudHJpZXMiLCAiY3JlYXRlSXRlclJlc3VsdE9iamVjdCIsICJkZWZpbmVJdGVyYXRvciIsICJET01JdGVyYWJsZXMiLCAiTUVUQURBVEEiLCAidGhpc1N5bWJvbFZhbHVlIiwgImlzUmVnaXN0ZXJlZFN5bWJvbCIsICJpc1dlbGxLbm93blN5bWJvbCIsICJwb3NpdGlvbiIsICJzaXplIiwgIldyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUiLCAiaXRlcmF0b3IiLCAiX3R5cGVvZiIsICJfU3ltYm9sIiwgIl9TeW1ib2wkaXRlcmF0b3IiLCAibyIsICJfdG9QcmltaXRpdmUiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX09iamVjdCRkZWZpbmVQcm9wZXJ0eSIsICJfY3JlYXRlQ2xhc3MiLCAiX2RlZmluZVByb3BlcnR5IiwgImdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QiLCAibWVtbyIsICJhcnJheU1ldGhvZElzU3RyaWN0IiwgIklTX05PREUiLCAicmVkdWNlIiwgIkFycmF5UHJvdG90eXBlIiwgIkhBU19TUEVDSUVTX1NVUFBPUlQiLCAiZmlsdGVyIiwgIm1hcCIsICJmbGF0dGVuSW50b0FycmF5IiwgImZsYXRNYXAiLCAiY3JlYXRlTmV3RGF0YVBpcGVGcm9tIiwgImZyb20iLCAiRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbiIsICJTaW1wbGVEYXRhUGlwZSIsICJfc291cmNlIiwgIl90cmFuc2Zvcm1lcnMiLCAiX3RhcmdldCIsICJfY29udGV4dCIsICJfY29udGV4dDIiLCAiX2NvbnRleHQzIiwgImFkZCIsICJfYmluZEluc3RhbmNlUHJvcGVydHkiLCAiX2FkZCIsICJyZW1vdmUiLCAiX3JlbW92ZSIsICJ1cGRhdGUiLCAiX3VwZGF0ZSIsICJrZXkiLCAiYWxsIiwgIl90cmFuc2Zvcm1JdGVtcyIsICJzdGFydCIsICJvbiIsICJfbGlzdGVuZXJzIiwgInN0b3AiLCAib2ZmIiwgIml0ZW1zIiwgIl9jb250ZXh0NCIsICJfcmVkdWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJ0cmFuc2Zvcm0iLCAiX25hbWUiLCAicGF5bG9hZCIsICJvbGREYXRhIiwgImNhbGxiYWNrIiwgImlucHV0IiwgIl9maWx0ZXJJbnN0YW5jZVByb3BlcnR5IiwgIl9tYXBJbnN0YW5jZVByb3BlcnR5IiwgIl9mbGF0TWFwSW5zdGFuY2VQcm9wZXJ0eSIsICJ0byIsICJ0YXJnZXQiLCAiaXRlcmF0b3JDbG9zZSIsICJjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nIiwgIkVOVFJJRVMiLCAiaXNBcnJheUl0ZXJhdG9yTWV0aG9kIiwgImdldEl0ZXJhdG9yTWV0aG9kIiwgImdldEl0ZXJhdG9yIiwgImNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX0FycmF5JGlzQXJyYXkiLCAic2V0QXJyYXlMZW5ndGgiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl9nZXRJdGVyYXRvck1ldGhvZCIsICJyIiwgInNsaWNlIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJhcnJheUxpa2VUb0FycmF5IiwgIl9zbGljZUluc3RhbmNlUHJvcGVydHkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfc2xpY2VkVG9BcnJheSIsICJhcnJheVdpdGhIb2xlcyIsICJpdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJ1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJhcnJheVdpdGhvdXRIb2xlcyIsICJpdGVyYWJsZVRvQXJyYXkiLCAibm9uSXRlcmFibGVTcHJlYWQiLCAib3duS2V5cyIsICJGQUlMU19PTl9QUklNSVRJVkVTIiwgIlNUUklDVF9NRVRIT0QiLCAiZm9yRWFjaCIsICJyZXZlcnNlIiwgImRlbGV0ZVByb3BlcnR5T3JUaHJvdyIsICJzcGxpY2UiLCAiYXNzaWduIiwgInZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoIiwgIkZ1bmN0aW9uIiwgInNjaGVkdWxlcnNGaXgiLCAic2V0SW50ZXJ2YWwiLCAic2V0VGltZW91dCIsICJFbWl0dGVyIiwgIm1vZHVsZSIsICJfZXh0ZW5kcyIsICJfaW5oZXJpdHNMb29zZSIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInJvdW5kIiwgImFicyIsICJub3ciLCAicHJvcGVydHkiLCAicHJlZml4IiwgImVhY2giLCAiVG91Y2hBY3Rpb24iLCAibm9kZSIsICJJbnB1dCIsICJQb2ludGVyRXZlbnRJbnB1dCIsICJ0b0FycmF5IiwgInNvcnQiLCAiVG91Y2hJbnB1dCIsICJNb3VzZUlucHV0IiwgInJlbW92ZUxhc3RUb3VjaCIsICJUb3VjaE1vdXNlSW5wdXQiLCAiUmVjb2duaXplciIsICJlbWl0IiwgIlRhcFJlY29nbml6ZXIiLCAiQXR0clJlY29nbml6ZXIiLCAiUGFuUmVjb2duaXplciIsICJTd2lwZVJlY29nbml6ZXIiLCAiUGluY2hSZWNvZ25pemVyIiwgIlJvdGF0ZVJlY29nbml6ZXIiLCAiUHJlc3NSZWNvZ25pemVyIiwgImRlZmF1bHRzIiwgImRhdGEiLCAiTWFuYWdlciIsICJTaW5nbGVUb3VjaElucHV0IiwgImxvZyIsICJleHRlbmQiLCAibWVyZ2UiLCAiYmFzZSIsICJIYW1tZXIiLCAiREVMRVRFIiwgInB1cmVEZWVwT2JqZWN0QXNzaWduIiwgIl9sZW4iLCAiYXJndW1lbnRzIiwgInVwZGF0ZXMiLCAiQXJyYXkiLCAiX2tleSIsICJkZWVwT2JqZWN0QXNzaWduIiwgIl9jb25jYXRJbnN0YW5jZVByb3BlcnR5IiwgIm1lcmdlZCIsICJkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkiLCAic3RyaXBEZWxldGUiLCAiX2xlbjIiLCAiX2tleTIiLCAiYSIsICJiIiwgIkRhdGUiLCAic2V0VGltZSIsICJnZXRUaW1lIiwgIl9pdGVyYXRvciIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJfUmVmbGVjdCRvd25LZXlzIiwgIl9zdGVwIiwgInMiLCAibiIsICJkb25lIiwgInByb3AiLCAicHJvdG90eXBlIiwgInByb3BlcnR5SXNFbnVtZXJhYmxlIiwgImNsb25lIiwgImVyciIsICJlIiwgImYiLCAiX2kiLCAiX09iamVjdCRrZXlzIiwgIl9PYmplY3Qka2V5czIiLCAiYUNvbnN0cnVjdG9yIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCAiX3NldFByb3RvdHlwZU9mIiwgInAiLCAiX2luaGVyaXRzIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgImFzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyIsICJpbnN0YWxsRXJyb3JDYXVzZSIsICIkRXJyb3IiLCAiaXRlcmF0ZSIsICJub3JtYWxpemVTdHJpbmdBcmd1bWVudCIsICJzZXRTcGVjaWVzIiwgImFuSW5zdGFuY2UiLCAic3BlY2llc0NvbnN0cnVjdG9yIiwgIklTX0lPUyIsICJNZXNzYWdlQ2hhbm5lbCIsICJTdHJpbmciLCAicXVldWUiLCAic2V0SW1tZWRpYXRlIiwgInRhc2siLCAiUXVldWUiLCAiTXV0YXRpb25PYnNlcnZlciIsICJQcm9taXNlIiwgIm1pY3JvdGFzayIsICJub3RpZnkiLCAicHJvbWlzZSIsICJmbHVzaCIsICJob3N0UmVwb3J0RXJyb3JzIiwgInBlcmZvcm0iLCAiSVNfREVOTyIsICJOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IiLCAiTmF0aXZlUHJvbWlzZVByb3RvdHlwZSIsICJOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQiLCAiRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IiLCAibmV3UHJvbWlzZUNhcGFiaWxpdHkiLCAibmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUiLCAiaXNUaGVuYWJsZSIsICJ0aGVuIiwgIlBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIiwgImNvdW50ZXIiLCAicHJvbWlzZVJlc29sdmUiLCAiYW55IiwgImlzRnVuY3Rpb24iLCAiX09iamVjdCRjcmVhdGUiLCAiX09iamVjdCRnZXRQcm90b3R5cGVPZiIsICJfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkiLCAiX3B1c2hJbnN0YW5jZVByb3BlcnR5IiwgIl9PYmplY3Qkc2V0UHJvdG90eXBlT2YiLCAiX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5IiwgIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCAidCIsICJkZWZpbmUiLCAid3JhcCIsICJjIiwgIkFzeW5jSXRlcmF0b3IiLCAidSIsICJoIiwgImlzRXh0ZW5zaWJsZSIsICJmYXN0S2V5IiwgImludGVybmFsTWV0YWRhdGFNb2R1bGUiLCAiaW50ZXJuYWxTdGF0ZUdldHRlckZvciIsICJjb2xsZWN0aW9uIiwgImRlZmluZUJ1aWx0SW5zIiwgImNvbGxlY3Rpb25TdHJvbmciLCAiY2xlYXIiLCAiaGFzIiwgIk1hcCIsICJzb21lIiwgIldFQktJVCIsICJnZXRSYW5kb21WYWx1ZXMiLCAicm5kczgiLCAicm5nIiwgImJ5dGVUb0hleCIsICJpc0lkIiwgIm9wdGlvbnMiLCAiZGVsYXkiLCAiSW5maW5pdHkiLCAic2V0T3B0aW9ucyIsICJfZmx1c2hJZk5lZWRlZCIsICJkZXN0cm95IiwgIl9leHRlbmRlZCIsICJtZXRob2RzIiwgIm9yaWdpbmFsIiwgIm5hbWUiLCAibWUiLCAiRXJyb3IiLCAiYXJncyIsICJmbiIsICJjb250ZXh0IiwgImVudHJ5IiwgIl9xdWV1ZSIsICJfdGhpcyIsICJfdGltZW91dCIsICJjbGVhclRpbWVvdXQiLCAiX3NldFRpbWVvdXQiLCAiX3NwbGljZUluc3RhbmNlUHJvcGVydHkiLCAidW5kZWZpbmVkIiwgIkRhdGFTZXRQYXJ0IiwgIl90cmlnZ2VyIiwgImV2ZW50IiwgInNlbmRlcklkIiwgIl9zdWJzY3JpYmVycyIsICJzdWJzY3JpYmVyIiwgIlNldCIsICJEYXRhU3RyZWFtIiwgInBhaXJzIiwgIl9wYWlycyIsICJtYXJrIiwgIl9zdGVwJHZhbHVlIiwgIml0ZW0iLCAidmFsdWUkIiwgInQwIiwgImZpbmlzaCIsICJfaXRlcmF0b3IyIiwgIl9zdGVwMiIsICJfc3RlcDIkdmFsdWUiLCAiZW50cmllcyQiLCAiX2l0ZXJhdG9yMyIsICJfc3RlcDMiLCAiX3N0ZXAzJHZhbHVlIiwgImtleXMkIiwgIl9pdGVyYXRvcjQiLCAiX3N0ZXA0IiwgIl9zdGVwNCR2YWx1ZSIsICJ2YWx1ZXMkIiwgInRvSWRBcnJheSIsICJfY29udGV4dDUiLCAicGFpciIsICJ0b0l0ZW1BcnJheSIsICJfY29udGV4dDYiLCAidG9FbnRyeUFycmF5IiwgInRvT2JqZWN0TWFwIiwgIl9pdGVyYXRvcjUiLCAiX3N0ZXA1IiwgIl9zdGVwNSR2YWx1ZSIsICJ0b01hcCIsICJfTWFwIiwgInRvSWRTZXQiLCAiX1NldCIsICJ0b0l0ZW1TZXQiLCAiY2FjaGUiLCAiZGlzdGluY3QiLCAiX2l0ZXJhdG9yNiIsICJfc3RlcDYiLCAiX3N0ZXA2JHZhbHVlIiwgIl9TeW1ib2wkaXRlcmF0b3IyIiwgIl9jYWxsZWUiLCAiX2l0ZXJhdG9yNyIsICJfc3RlcDciLCAiX3N0ZXA3JHZhbHVlIiwgIl9jYWxsZWUkIiwgIl9jb250ZXh0NyIsICJfaXRlcmF0b3I4IiwgIl9zdGVwOCIsICJfc3RlcDgkdmFsdWUiLCAiX2NhbGxlZTIiLCAiX2l0ZXJhdG9yOSIsICJfc3RlcDkiLCAiX3N0ZXA5JHZhbHVlIiwgIl9jYWxsZWUyJCIsICJfY29udGV4dDgiLCAiaXRlciIsICJfZ2V0SXRlcmF0b3IiLCAiY3VyciIsICJtYXhJdGVtIiwgIm1heFZhbHVlIiwgIl9jdXJyJHZhbHVlIiwgIm1pbkl0ZW0iLCAibWluVmFsdWUiLCAiX2N1cnIkdmFsdWUyIiwgImFjY3VtdWxhdG9yIiwgIl9pdGVyYXRvcjEwIiwgIl9zdGVwMTAiLCAiX3N0ZXAxMCR2YWx1ZSIsICJfY29udGV4dDkiLCAiX3NvcnRJbnN0YW5jZVByb3BlcnR5IiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiaWRBIiwgIml0ZW1BIiwgIl9yZWY0IiwgImlkQiIsICJpdGVtQiIsICJlbnN1cmVGdWxsSXRlbSIsICJpZFByb3AiLCAidXVpZDQiLCAiRGF0YVNldCIsICJfRGF0YVNldFBhcnQiLCAiX3N1cGVyIiwgIl9jcmVhdGVTdXBlciIsICJfb3B0aW9ucyIsICJfZGF0YSIsICJfaWRQcm9wIiwgImZpZWxkSWQiLCAiX3RoaXMyIiwgImFkZGVkSWRzIiwgImlkc1RvQWRkIiwgImQiLCAiX3NvbWVJbnN0YW5jZVByb3BlcnR5IiwgImxlbiIsICJfYWRkSXRlbSIsICJfdGhpczMiLCAidXBkYXRlZElkcyIsICJ1cGRhdGVkRGF0YSIsICJhZGRPclVwZGF0ZSIsICJvcmlnSWQiLCAiZnVsbEl0ZW0iLCAib2xkSXRlbSIsICJfT2JqZWN0JGFzc2lnbiIsICJfdXBkYXRlSXRlbSIsICJjb25zb2xlIiwgIndhcm4iLCAicHJvcHMiLCAidXBkYXRlT25seSIsICJfdGhpczQiLCAidXBkYXRlRXZlbnREYXRhIiwgImZpcnN0IiwgInNlY29uZCIsICJpZHMiLCAicmV0dXJuVHlwZSIsICJpdGVtSWRzIiwgIml0ZW1JZCIsICJfa2V5c0luc3RhbmNlUHJvcGVydHkiLCAib3JkZXIiLCAiX3NvcnQiLCAiZmllbGRzIiwgIl9maWx0ZXJGaWVsZHMiLCAicmVzdWx0IiwgInJlc3VsdGFudCIsICJfaXRlbSIsICJnZXRJZHMiLCAiZ2V0RGF0YVNldCIsICJtYXBwZWRJdGVtcyIsICJmaWx0ZXJlZEl0ZW0iLCAiZmllbGQiLCAiYXYiLCAiYnYiLCAicmVtb3ZlZElkcyIsICJyZW1vdmVkSXRlbXMiLCAiaWRlbnQiLCAiZGVsZXRlIiwgIm1heEZpZWxkIiwgIl92YWx1ZXNJbnN0YW5jZVByb3BlcnR5IiwgIml0ZW1GaWVsZCIsICJtaW5GaWVsZCIsICJjb3VudCIsICJleGlzdHMiLCAiaiIsICJfSlNPTiRzdHJpbmdpZnkiLCAiX29iamVjdFNwcmVhZCIsICJzdHJlYW0iLCAiX2VudHJpZXNJbnN0YW5jZVByb3BlcnR5IiwgIkRhdGFWaWV3IiwgIl9saXN0ZW5lciIsICJfb25FdmVudCIsICJzZXREYXRhIiwgIl9pZHMiLCAicmVmcmVzaCIsICJvbGRJZHMiLCAibmV3SWRzIiwgImVycm9yIiwgInZpZXdPcHRpb25zIiwgInRoaXNGaWx0ZXIiLCAib3B0aW9uc0ZpbHRlciIsICJkZWZhdWx0RmlsdGVyIiwgImRpc3Bvc2UiLCAiX3RoaXMkX2RhdGEiLCAibWVzc2FnZSIsICJyZXBsYWNlbWVudCIsICJjb25maWd1cmFibGUiLCAicGFyYW1zIiwgIm9sZEl0ZW1zIiwgInVwZGF0ZWRJdGVtcyIsICJpc0RhdGFTZXRMaWtlIiwgInYiLCAiaXNEYXRhVmlld0xpa2UiLCAiY2hlY2siLCAiaXQiLCAiTWF0aCIsICJnbG9iYWwiLCAiZ2xvYmFsVGhpcyIsICJ3aW5kb3ciLCAic2VsZiIsICJ0aGlzIiwgIkZ1bmN0aW9uIiwgImZhaWxzIiwgImV4ZWMiLCAiZXJyb3IiLCAiZnVuY3Rpb25CaW5kTmF0aXZlIiwgInJlcXVpcmUkJDAiLCAidGVzdCIsICJiaW5kIiwgImhhc093blByb3BlcnR5IiwgIk5BVElWRV9CSU5EIiwgIkZ1bmN0aW9uUHJvdG90eXBlIiwgInByb3RvdHlwZSIsICJhcHBseSIsICJjYWxsIiwgImZ1bmN0aW9uQXBwbHkiLCAiUmVmbGVjdCIsICJhcmd1bWVudHMiLCAidW5jdXJyeVRoaXNXaXRoQmluZCIsICJmdW5jdGlvblVuY3VycnlUaGlzIiwgImZuIiwgInVuY3VycnlUaGlzIiwgInRvU3RyaW5nIiwgInN0cmluZ1NsaWNlIiwgInNsaWNlIiwgImNsYXNzb2ZSYXciLCAicmVxdWlyZSQkMSIsICJmdW5jdGlvblVuY3VycnlUaGlzQ2xhdXNlIiwgImRvY3VtZW50QWxsIiwgImRvY3VtZW50IiwgImFsbCIsICJkb2N1bWVudEFsbF8xIiwgIklTX0hUTUxEREEiLCAiaXNDYWxsYWJsZSIsICJhcmd1bWVudCIsICJkZXNjcmlwdG9ycyIsICJPYmplY3QiLCAiZGVmaW5lUHJvcGVydHkiLCAiZ2V0IiwgImZ1bmN0aW9uQ2FsbCIsICIkcHJvcGVydHlJc0VudW1lcmFibGUiLCAicHJvcGVydHlJc0VudW1lcmFibGUiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIk5BU0hPUk5fQlVHIiwgIm9iamVjdFByb3BlcnR5SXNFbnVtZXJhYmxlIiwgImYiLCAiViIsICJkZXNjcmlwdG9yIiwgImVudW1lcmFibGUiLCAibWF0Y2giLCAidmVyc2lvbiIsICJjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IiLCAiYml0bWFwIiwgInZhbHVlIiwgImNvbmZpZ3VyYWJsZSIsICJ3cml0YWJsZSIsICJjbGFzc29mIiwgInJlcXVpcmUkJDIiLCAiJE9iamVjdCIsICJzcGxpdCIsICJpbmRleGVkT2JqZWN0IiwgImlzTnVsbE9yVW5kZWZpbmVkIiwgIiRUeXBlRXJyb3IiLCAiVHlwZUVycm9yIiwgInJlcXVpcmVPYmplY3RDb2VyY2libGUiLCAiSW5kZXhlZE9iamVjdCIsICJ0b0luZGV4ZWRPYmplY3QiLCAiaXNPYmplY3QiLCAicGF0aCIsICJhRnVuY3Rpb24iLCAidmFyaWFibGUiLCAiZ2V0QnVpbHRJbiIsICJuYW1lc3BhY2UiLCAibWV0aG9kIiwgImxlbmd0aCIsICJvYmplY3RJc1Byb3RvdHlwZU9mIiwgImlzUHJvdG90eXBlT2YiLCAiZW5naW5lVXNlckFnZW50IiwgIm5hdmlnYXRvciIsICJTdHJpbmciLCAidXNlckFnZW50IiwgInByb2Nlc3MiLCAiRGVubyIsICJ2ZXJzaW9ucyIsICJ2OCIsICJlbmdpbmVWOFZlcnNpb24iLCAiVjhfVkVSU0lPTiIsICIkU3RyaW5nIiwgInN5bWJvbENvbnN0cnVjdG9yRGV0ZWN0aW9uIiwgImdldE93blByb3BlcnR5U3ltYm9scyIsICJzeW1ib2wiLCAiU3ltYm9sIiwgInNoYW0iLCAidXNlU3ltYm9sQXNVaWQiLCAiaXRlcmF0b3IiLCAiaXNTeW1ib2wiLCAicmVxdWlyZSQkMyIsICIkU3ltYm9sIiwgInRyeVRvU3RyaW5nIiwgImFDYWxsYWJsZSIsICJnZXRNZXRob2QiLCAiUCIsICJmdW5jIiwgImRlZmluZUdsb2JhbFByb3BlcnR5IiwgImtleSIsICJTSEFSRUQiLCAic2hhcmVkU3RvcmUiLCAic3RvcmUiLCAic2hhcmVkTW9kdWxlIiwgInB1c2giLCAibW9kZSIsICJjb3B5cmlnaHQiLCAibGljZW5zZSIsICJzb3VyY2UiLCAidG9PYmplY3QiLCAiaGFzT3duUHJvcGVydHlfMSIsICJoYXNPd24iLCAiaWQiLCAicG9zdGZpeCIsICJyYW5kb20iLCAidWlkIiwgInNoYXJlZCIsICJOQVRJVkVfU1lNQk9MIiwgInJlcXVpcmUkJDQiLCAiVVNFX1NZTUJPTF9BU19VSUQiLCAicmVxdWlyZSQkNSIsICJXZWxsS25vd25TeW1ib2xzU3RvcmUiLCAiY3JlYXRlV2VsbEtub3duU3ltYm9sIiwgIndpdGhvdXRTZXR0ZXIiLCAid2VsbEtub3duU3ltYm9sIiwgIm5hbWUiLCAib3JkaW5hcnlUb1ByaW1pdGl2ZSIsICJpbnB1dCIsICJwcmVmIiwgInZhbCIsICJ2YWx1ZU9mIiwgIlRPX1BSSU1JVElWRSIsICJ0b1ByaW1pdGl2ZSIsICJyZXN1bHQiLCAiZXhvdGljVG9QcmltIiwgInRvUHJvcGVydHlLZXkiLCAiRVhJU1RTIiwgImNyZWF0ZUVsZW1lbnQiLCAiZG9jdW1lbnRDcmVhdGVFbGVtZW50IiwgImllOERvbURlZmluZSIsICJhIiwgIkRFU0NSSVBUT1JTIiwgInByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlIiwgInJlcXVpcmUkJDYiLCAiSUU4X0RPTV9ERUZJTkUiLCAicmVxdWlyZSQkNyIsICIkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIm9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJPIiwgInJlcGxhY2VtZW50IiwgImlzRm9yY2VkIiwgImZlYXR1cmUiLCAiZGV0ZWN0aW9uIiwgImRhdGEiLCAibm9ybWFsaXplIiwgIlBPTFlGSUxMIiwgIk5BVElWRSIsICJzdHJpbmciLCAicmVwbGFjZSIsICJ0b0xvd2VyQ2FzZSIsICJpc0ZvcmNlZF8xIiwgImZ1bmN0aW9uQmluZENvbnRleHQiLCAidGhhdCIsICJ2OFByb3RvdHlwZURlZmluZUJ1ZyIsICJhbk9iamVjdCIsICJWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyIsICIkZGVmaW5lUHJvcGVydHkiLCAiRU5VTUVSQUJMRSIsICJDT05GSUdVUkFCTEUiLCAiV1JJVEFCTEUiLCAib2JqZWN0RGVmaW5lUHJvcGVydHkiLCAiQXR0cmlidXRlcyIsICJjdXJyZW50IiwgImRlZmluZVByb3BlcnR5TW9kdWxlIiwgImNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSIsICJvYmplY3QiLCAicmVxdWlyZSQkOCIsICJyZXF1aXJlJCQ5IiwgIndyYXBDb25zdHJ1Y3RvciIsICJOYXRpdmVDb25zdHJ1Y3RvciIsICJXcmFwcGVyIiwgImIiLCAiYyIsICJfZXhwb3J0IiwgIm9wdGlvbnMiLCAiRk9SQ0VEIiwgIlVTRV9OQVRJVkUiLCAiVklSVFVBTF9QUk9UT1RZUEUiLCAic291cmNlUHJvcGVydHkiLCAidGFyZ2V0UHJvcGVydHkiLCAibmF0aXZlUHJvcGVydHkiLCAicmVzdWx0UHJvcGVydHkiLCAiVEFSR0VUIiwgInRhcmdldCIsICJHTE9CQUwiLCAiU1RBVElDIiwgInN0YXQiLCAiUFJPVE8iLCAicHJvdG8iLCAibmF0aXZlU291cmNlIiwgInRhcmdldFByb3RvdHlwZSIsICJmb3JjZWQiLCAiZG9udENhbGxHZXRTZXQiLCAid3JhcCIsICJyZWFsIiwgImNlaWwiLCAiZmxvb3IiLCAidHJ1bmMiLCAieCIsICJuIiwgInRvSW50ZWdlck9ySW5maW5pdHkiLCAibnVtYmVyIiwgIm1heCIsICJtaW4iLCAidG9BYnNvbHV0ZUluZGV4IiwgImluZGV4IiwgImludGVnZXIiLCAidG9MZW5ndGgiLCAibGVuZ3RoT2ZBcnJheUxpa2UiLCAib2JqIiwgImNyZWF0ZU1ldGhvZCIsICJJU19JTkNMVURFUyIsICIkdGhpcyIsICJlbCIsICJmcm9tSW5kZXgiLCAiYXJyYXlJbmNsdWRlcyIsICJpbmNsdWRlcyIsICJpbmRleE9mIiwgImhpZGRlbktleXMiLCAib2JqZWN0S2V5c0ludGVybmFsIiwgIm5hbWVzIiwgImkiLCAiZW51bUJ1Z0tleXMiLCAiaW50ZXJuYWxPYmplY3RLZXlzIiwgIm9iamVjdEtleXMiLCAia2V5cyIsICJvYmplY3RHZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlIiwgIiRhc3NpZ24iLCAiYXNzaWduIiwgImNvbmNhdCIsICJvYmplY3RBc3NpZ24iLCAiQSIsICJCIiwgImFscGhhYmV0IiwgImZvckVhY2giLCAiY2hyIiwgImpvaW4iLCAiVCIsICJhcmd1bWVudHNMZW5ndGgiLCAiUyIsICJqIiwgImFyaXR5IiwgImFycmF5U2xpY2UiLCAiJEZ1bmN0aW9uIiwgImZhY3RvcmllcyIsICJmdW5jdGlvbkJpbmQiLCAiRiIsICJQcm90b3R5cGUiLCAicGFydEFyZ3MiLCAiYm91bmRGdW5jdGlvbiIsICJhcmdzIiwgIkMiLCAiYXJnc0xlbmd0aCIsICJsaXN0IiwgImVudHJ5VmlydHVhbCIsICJDT05TVFJVQ1RPUiIsICJwYXJlbnQiLCAib3duIiwgImRyYXdDaXJjbGUiLCAiY3R4IiwgInkiLCAiciIsICJiZWdpblBhdGgiLCAiYXJjIiwgIlBJIiwgImNsb3NlUGF0aCIsICJkcmF3Um91bmRSZWN0IiwgInciLCAiaCIsICJyMmQiLCAibW92ZVRvIiwgImxpbmVUbyIsICJkcmF3RWxsaXBzZSIsICJrYXBwYSIsICJveCIsICJveSIsICJ4ZSIsICJ5ZSIsICJ4bSIsICJ5bSIsICJiZXppZXJDdXJ2ZVRvIiwgImRyYXdEYXRhYmFzZSIsICJoRWxsaXBzZSIsICJ5bWIiLCAieWViIiwgImRyYXdEYXNoZWRMaW5lIiwgIngyIiwgInkyIiwgInBhdHRlcm4iLCAicGF0dGVybkxlbmd0aCIsICJkeCIsICJkeSIsICJzbG9wZSIsICJkaXN0UmVtYWluaW5nIiwgInNxcnQiLCAicGF0dGVybkluZGV4IiwgImRyYXciLCAieFN0ZXAiLCAiZGFzaExlbmd0aCIsICJzaGFwZU1hcCIsICJjaXJjbGUiLCAiZGFzaGVkTGluZSIsICJkYXRhYmFzZSIsICJkaWFtb25kIiwgImVsbGlwc2UiLCAiZWxsaXBzZV92aXMiLCAiaGV4YWdvbiIsICJjb3MiLCAic2luIiwgInJvdW5kUmVjdCIsICJzcXVhcmUiLCAicmVjdCIsICJzdGFyIiwgInJhZGl1cyIsICJ0cmlhbmdsZSIsICJzIiwgInMyIiwgImlyIiwgInRyaWFuZ2xlRG93biIsICJ0IiwgIkVtaXR0ZXIiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAib24iLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJldmVudCIsICJfY2FsbGJhY2tzIiwgIm9uY2UiLCAib2ZmIiwgInJlbW92ZUxpc3RlbmVyIiwgInJlbW92ZUFsbExpc3RlbmVycyIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgImNiIiwgImNhbGxiYWNrcyIsICJzcGxpY2UiLCAiZW1pdCIsICJBcnJheSIsICJsZW4iLCAibGlzdGVuZXJzIiwgImhhc0xpc3RlbmVycyIsICJzZXQiLCAiaGFzIiwgInRvU3RyaW5nVGFnU3VwcG9ydCIsICJUT19TVFJJTkdfVEFHX1NVUFBPUlQiLCAiVE9fU1RSSU5HX1RBRyIsICJDT1JSRUNUX0FSR1VNRU5UUyIsICJ0YWciLCAiY2FsbGVlIiwgImNoYXJBdCIsICJjaGFyQ29kZUF0IiwgIkNPTlZFUlRfVE9fU1RSSU5HIiwgInBvcyIsICJmaXJzdCIsICJzZWNvbmQiLCAicG9zaXRpb24iLCAic2l6ZSIsICJzdHJpbmdNdWx0aWJ5dGUiLCAiY29kZUF0IiwgIldlYWtNYXAiLCAid2Vha01hcEJhc2ljRGV0ZWN0aW9uIiwgInNoYXJlZEtleSIsICJOQVRJVkVfV0VBS19NQVAiLCAiT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQiLCAic3RhdGUiLCAibWV0YWRhdGEiLCAiZmFjYWRlIiwgIlNUQVRFIiwgImludGVybmFsU3RhdGUiLCAiZW5mb3JjZSIsICJnZXR0ZXJGb3IiLCAiVFlQRSIsICJ0eXBlIiwgImdldERlc2NyaXB0b3IiLCAiZnVuY3Rpb25OYW1lIiwgIlBST1BFUiIsICJvYmplY3REZWZpbmVQcm9wZXJ0aWVzIiwgImRlZmluZVByb3BlcnRpZXMiLCAiUHJvcGVydGllcyIsICJwcm9wcyIsICJhY3RpdmVYRG9jdW1lbnQiLCAiaHRtbCIsICJkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlIiwgIlBST1RPVFlQRSIsICJTQ1JJUFQiLCAiSUVfUFJPVE8iLCAiRW1wdHlDb25zdHJ1Y3RvciIsICJzY3JpcHRUYWciLCAiY29udGVudCIsICJMVCIsICJOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYIiwgIndyaXRlIiwgImNsb3NlIiwgInRlbXAiLCAicGFyZW50V2luZG93IiwgIk51bGxQcm90b09iamVjdCIsICJBY3RpdmVYT2JqZWN0IiwgImlmcmFtZURvY3VtZW50IiwgImlmcmFtZSIsICJKUyIsICJkb21haW4iLCAic3R5bGUiLCAiZGlzcGxheSIsICJhcHBlbmRDaGlsZCIsICJzcmMiLCAiY29udGVudFdpbmRvdyIsICJvcGVuIiwgIkl0ZXJhdG9yUHJvdG90eXBlIiwgIlByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSIsICJhcnJheUl0ZXJhdG9yIiwgIm9iamVjdENyZWF0ZSIsICJjcmVhdGUiLCAiY29ycmVjdFByb3RvdHlwZUdldHRlciIsICJjb25zdHJ1Y3RvciIsICJnZXRQcm90b3R5cGVPZiIsICJDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIiLCAiT2JqZWN0UHJvdG90eXBlIiwgIm9iamVjdEdldFByb3RvdHlwZU9mIiwgImRlZmluZUJ1aWx0SW4iLCAiSVRFUkFUT1IiLCAiQlVHR1lfU0FGQVJJX0lURVJBVE9SUyIsICJORVdfSVRFUkFUT1JfUFJPVE9UWVBFIiwgIml0ZXJhdG9yc0NvcmUiLCAib2JqZWN0VG9TdHJpbmciLCAic2V0VG9TdHJpbmdUYWciLCAiVEFHIiwgIlNFVF9NRVRIT0QiLCAiaXRlcmF0b3JzIiwgIkl0ZXJhdG9ycyIsICJyZXR1cm5UaGlzIiwgInVuY3VycnlUaGlzQWNjZXNzb3IiLCAiYVBvc3NpYmxlUHJvdG90eXBlIiwgIm9iamVjdFNldFByb3RvdHlwZU9mIiwgInNldFByb3RvdHlwZU9mIiwgInNldHRlciIsICJDT1JSRUNUX1NFVFRFUiIsICJfX3Byb3RvX18iLCAiJCIsICJGdW5jdGlvbk5hbWUiLCAiY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciIsICJJdGVyYXRvckNvbnN0cnVjdG9yIiwgIk5BTUUiLCAibmV4dCIsICJFTlVNRVJBQkxFX05FWFQiLCAicmVxdWlyZSQkMTAiLCAicmVxdWlyZSQkMTIiLCAiSXRlcmF0b3JzQ29yZSIsICJyZXF1aXJlJCQxMyIsICJQUk9QRVJfRlVOQ1RJT05fTkFNRSIsICJyZXF1aXJlJCQxMSIsICJLRVlTIiwgIlZBTFVFUyIsICJFTlRSSUVTIiwgIml0ZXJhdG9yRGVmaW5lIiwgIkl0ZXJhYmxlIiwgIkRFRkFVTFQiLCAiSVNfU0VUIiwgIkN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSIsICJtZXRob2RzIiwgIktFWSIsICJnZXRJdGVyYXRpb25NZXRob2QiLCAiS0lORCIsICJkZWZhdWx0SXRlcmF0b3IiLCAiSXRlcmFibGVQcm90b3R5cGUiLCAiSU5DT1JSRUNUX1ZBTFVFU19OQU1FIiwgIm5hdGl2ZUl0ZXJhdG9yIiwgImFueU5hdGl2ZUl0ZXJhdG9yIiwgImVudHJpZXMiLCAidmFsdWVzIiwgImNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QiLCAiZG9uZSIsICJJbnRlcm5hbFN0YXRlTW9kdWxlIiwgImRlZmluZUl0ZXJhdG9yIiwgIlNUUklOR19JVEVSQVRPUiIsICJzZXRJbnRlcm5hbFN0YXRlIiwgImdldEludGVybmFsU3RhdGUiLCAiaXRlcmF0ZWQiLCAicG9pbnQiLCAidW5kZWZpbmVkIiwgIml0ZXJhdG9yQ2xvc2UiLCAia2luZCIsICJpbm5lclJlc3VsdCIsICJpbm5lckVycm9yIiwgIkFycmF5UHJvdG90eXBlIiwgImlzQXJyYXlJdGVyYXRvck1ldGhvZCIsICJmdW5jdGlvblRvU3RyaW5nIiwgImluc3BlY3RTb3VyY2UiLCAibm9vcCIsICJlbXB0eSIsICJjb25zdHJ1Y3QiLCAiY29uc3RydWN0b3JSZWdFeHAiLCAiSU5DT1JSRUNUX1RPX1NUUklORyIsICJpc0NvbnN0cnVjdG9yTW9kZXJuIiwgImlzQ29uc3RydWN0b3JMZWdhY3kiLCAiaXNDb25zdHJ1Y3RvciIsICJjYWxsZWQiLCAiY3JlYXRlUHJvcGVydHkiLCAicHJvcGVydHlLZXkiLCAiZ2V0SXRlcmF0b3JNZXRob2QiLCAiZ2V0SXRlcmF0b3IiLCAidXNpbmdJdGVyYXRvciIsICJpdGVyYXRvck1ldGhvZCIsICJjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nIiwgIiRBcnJheSIsICJTQUZFX0NMT1NJTkciLCAiaXRlcmF0b3JXaXRoUmV0dXJuIiwgInJldHVybiIsICJmcm9tIiwgImFycmF5TGlrZSIsICJJU19DT05TVFJVQ1RPUiIsICJtYXBmbiIsICJtYXBwaW5nIiwgInN0ZXAiLCAiY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uIiwgIlNLSVBfQ0xPU0lORyIsICJJVEVSQVRJT05fU1VQUE9SVCIsICJpdGVyYWJsZSIsICJBUlJBWV9JVEVSQVRPUiIsICJkZWZpbmVJdGVyYXRvciQxIiwgIkFyZ3VtZW50cyIsICJnZXRJdGVyYXRvck1ldGhvZF8xIiwgIkRPTUl0ZXJhYmxlcyIsICJDU1NSdWxlTGlzdCIsICJDU1NTdHlsZURlY2xhcmF0aW9uIiwgIkNTU1ZhbHVlTGlzdCIsICJDbGllbnRSZWN0TGlzdCIsICJET01SZWN0TGlzdCIsICJET01TdHJpbmdMaXN0IiwgIkRPTVRva2VuTGlzdCIsICJEYXRhVHJhbnNmZXJJdGVtTGlzdCIsICJGaWxlTGlzdCIsICJIVE1MQWxsQ29sbGVjdGlvbiIsICJIVE1MQ29sbGVjdGlvbiIsICJIVE1MRm9ybUVsZW1lbnQiLCAiSFRNTFNlbGVjdEVsZW1lbnQiLCAiTWVkaWFMaXN0IiwgIk1pbWVUeXBlQXJyYXkiLCAiTmFtZWROb2RlTWFwIiwgIk5vZGVMaXN0IiwgIlBhaW50UmVxdWVzdExpc3QiLCAiUGx1Z2luIiwgIlBsdWdpbkFycmF5IiwgIlNWR0xlbmd0aExpc3QiLCAiU1ZHTnVtYmVyTGlzdCIsICJTVkdQYXRoU2VnTGlzdCIsICJTVkdQb2ludExpc3QiLCAiU1ZHU3RyaW5nTGlzdCIsICJTVkdUcmFuc2Zvcm1MaXN0IiwgIlNvdXJjZUJ1ZmZlckxpc3QiLCAiU3R5bGVTaGVldExpc3QiLCAiVGV4dFRyYWNrQ3VlTGlzdCIsICJUZXh0VHJhY2tMaXN0IiwgIlRvdWNoTGlzdCIsICJDT0xMRUNUSU9OX05BTUUiLCAiQ29sbGVjdGlvbiIsICJDb2xsZWN0aW9uUHJvdG90eXBlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJpbnN0YW5jZSIsICJDb25zdHJ1Y3RvciIsICIkJEsiLCAiZGVzYyIsICJpc0FycmF5IiwgImRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciIsICJTUEVDSUVTIiwgImFycmF5U3BlY2llc0NvbnN0cnVjdG9yIiwgIm9yaWdpbmFsQXJyYXkiLCAiYXJyYXlTcGVjaWVzQ3JlYXRlIiwgImFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQiLCAiTUVUSE9EX05BTUUiLCAiYXJyYXkiLCAiZm9vIiwgIkJvb2xlYW4iLCAiSVNfQ09OQ0FUX1NQUkVBREFCTEUiLCAiSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCIsICJpc0NvbmNhdFNwcmVhZGFibGUiLCAic3ByZWFkYWJsZSIsICJhcmciLCAiayIsICJFIiwgIm9iamVjdEdldE93blByb3BlcnR5TmFtZXMiLCAiZ2V0T3duUHJvcGVydHlOYW1lcyIsICJhcnJheVNsaWNlU2ltcGxlIiwgInN0YXJ0IiwgImVuZCIsICJmaW4iLCAiJGdldE93blByb3BlcnR5TmFtZXMiLCAid2luZG93TmFtZXMiLCAib2JqZWN0R2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsIiwgImRlZmluZUJ1aWx0SW5BY2Nlc3NvciIsICJ3ZWxsS25vd25TeW1ib2xXcmFwcGVkIiwgIndyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUiLCAid2VsbEtub3duU3ltYm9sRGVmaW5lIiwgInN5bWJvbERlZmluZVRvUHJpbWl0aXZlIiwgIlN5bWJvbFByb3RvdHlwZSIsICJoaW50IiwgIklTX01BUCIsICJJU19GSUxURVIiLCAiSVNfU09NRSIsICJJU19FVkVSWSIsICJJU19GSU5EX0lOREVYIiwgIklTX0ZJTFRFUl9SRUpFQ1QiLCAiTk9fSE9MRVMiLCAiY2FsbGJhY2tmbiIsICJzcGVjaWZpY0NyZWF0ZSIsICJhcnJheUl0ZXJhdGlvbiIsICJtYXAiLCAiZmlsdGVyIiwgInNvbWUiLCAiZXZlcnkiLCAiZmluZCIsICJmaW5kSW5kZXgiLCAiZmlsdGVyUmVqZWN0IiwgIiR0b1N0cmluZyIsICJyZXF1aXJlJCQxNCIsICJuYXRpdmVPYmplY3RDcmVhdGUiLCAicmVxdWlyZSQkMTUiLCAicmVxdWlyZSQkMTYiLCAiZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSIsICJyZXF1aXJlJCQxNyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwiLCAicmVxdWlyZSQkMTgiLCAicmVxdWlyZSQkMTkiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlIiwgInJlcXVpcmUkJDIwIiwgInJlcXVpcmUkJDIxIiwgInJlcXVpcmUkJDIyIiwgInJlcXVpcmUkJDIzIiwgInJlcXVpcmUkJDI0IiwgInJlcXVpcmUkJDI1IiwgInJlcXVpcmUkJDI2IiwgInJlcXVpcmUkJDI4IiwgInJlcXVpcmUkJDI5IiwgInJlcXVpcmUkJDMwIiwgInJlcXVpcmUkJDMxIiwgImRlZmluZVdlbGxLbm93blN5bWJvbCIsICJyZXF1aXJlJCQzMiIsICJkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSIsICJyZXF1aXJlJCQzMyIsICJyZXF1aXJlJCQzNCIsICJyZXF1aXJlJCQzNSIsICIkZm9yRWFjaCIsICJyZXF1aXJlJCQzNiIsICJISURERU4iLCAicmVxdWlyZSQkMjciLCAiU1lNQk9MIiwgIlJhbmdlRXJyb3IiLCAiUU9iamVjdCIsICJuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAibmF0aXZlRGVmaW5lUHJvcGVydHkiLCAibmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyIsICJuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJBbGxTeW1ib2xzIiwgIk9iamVjdFByb3RvdHlwZVN5bWJvbHMiLCAiVVNFX1NFVFRFUiIsICJmaW5kQ2hpbGQiLCAiZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSIsICJPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yIiwgInNldFN5bWJvbERlc2NyaXB0b3IiLCAiZGVzY3JpcHRpb24iLCAiJGRlZmluZVByb3BlcnRpZXMiLCAicHJvcGVydGllcyIsICIkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwgIklTX09CSkVDVF9QUk9UT1RZUEUiLCAiJCRJIiwgIiRmb3JFYWNoJDEiLCAidXNlU2V0dGVyIiwgInVzZVNpbXBsZSIsICJzeW1ib2xSZWdpc3RyeURldGVjdGlvbiIsICJrZXlGb3IiLCAiTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSIsICJTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5IiwgIlN5bWJvbFRvU3RyaW5nUmVnaXN0cnkiLCAiZm9yIiwgInN5bSIsICJnZXRSZXBsYWNlckZ1bmN0aW9uIiwgInJlcGxhY2VyIiwgInJhd0xlbmd0aCIsICJlbGVtZW50IiwgImtleXNMZW5ndGgiLCAicm9vdCIsICIkc3RyaW5naWZ5IiwgIm51bWJlclRvU3RyaW5nIiwgInRlc3RlciIsICJsb3ciLCAiaGkiLCAiV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OIiwgIklMTF9GT1JNRURfVU5JQ09ERSIsICJzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCIsICIkcmVwbGFjZXIiLCAiZml4SWxsRm9ybWVkIiwgIm9mZnNldCIsICJwcmV2IiwgInN0cmluZ2lmeSIsICJzcGFjZSIsICJKU09OIiwgIk1FVEFEQVRBIiwgInRoaXNTeW1ib2xWYWx1ZSIsICJzeW1ib2xJc1JlZ2lzdGVyZWQiLCAiaXNSZWdpc3RlcmVkU3ltYm9sIiwgIiRpc1dlbGxLbm93blN5bWJvbCIsICJpc1dlbGxLbm93blN5bWJvbCIsICJzeW1ib2xLZXlzIiwgInN5bWJvbEtleXNMZW5ndGgiLCAic3ltYm9sS2V5IiwgInN5bWJvbElzV2VsbEtub3duIiwgImlzUmVnaXN0ZXJlZCIsICJpc1dlbGxLbm93biIsICJfdHlwZW9mIiwgIm8iLCAiX1N5bWJvbCIsICJfU3ltYm9sJGl0ZXJhdG9yIiwgIl90b1Byb3BlcnR5S2V5IiwgInByaW0iLCAiX1N5bWJvbCR0b1ByaW1pdGl2ZSIsICJyZXMiLCAiTnVtYmVyIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9PYmplY3QkZGVmaW5lUHJvcGVydHkiLCAiX2NyZWF0ZUNsYXNzIiwgInByb3RvUHJvcHMiLCAic3RhdGljUHJvcHMiLCAiYXJyYXlTZXRMZW5ndGgiLCAic2V0QXJyYXlMZW5ndGgiLCAicHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoIiwgIml0ZW0iLCAiYXJnQ291bnQiLCAibmF0aXZlU2xpY2UiLCAiSEFTX1NQRUNJRVNfU1VQUE9SVCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJhcnIiLCAiYXJyMiIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAibWluTGVuIiwgIl9jb250ZXh0IiwgImFycmF5TGlrZVRvQXJyYXkiLCAiX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJfQXJyYXkkZnJvbSIsICJfc2xpY2VkVG9BcnJheSIsICJfQXJyYXkkaXNBcnJheSIsICJsIiwgIl9nZXRJdGVyYXRvck1ldGhvZCIsICJlIiwgInUiLCAiX3B1c2hJbnN0YW5jZVByb3BlcnR5IiwgInVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIm5vbkl0ZXJhYmxlUmVzdCIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiaXRlciIsICJub25JdGVyYWJsZVNwcmVhZCIsICJvd25LZXlzIiwgIiRtYXAiLCAibmF0aXZlS2V5cyIsICIkRGF0ZSIsICJEYXRlIiwgInRoaXNUaW1lVmFsdWUiLCAiZ2V0VGltZSIsICIkJHUiLCAibm93IiwgImFycmF5TWV0aG9kSXNTdHJpY3QiLCAiYXJyYXlGb3JFYWNoIiwgIm5hdGl2ZVJldmVyc2UiLCAicmV2ZXJzZSIsICIkJHMiLCAiZGVsZXRlUHJvcGVydHlPclRocm93IiwgImRlbGV0ZUNvdW50IiwgImluc2VydENvdW50IiwgImFjdHVhbERlbGV0ZUNvdW50IiwgInRvIiwgImFjdHVhbFN0YXJ0IiwgIiRpbmNsdWRlcyIsICJNQVRDSCIsICJpc1JlZ0V4cCIsICJub3RBUmVnRXhwIiwgImNvcnJlY3RJc1JlZ0V4cExvZ2ljIiwgInJlZ2V4cCIsICJlcnJvcjEiLCAiZXJyb3IyIiwgInN0cmluZ0luZGV4T2YiLCAic2VhcmNoU3RyaW5nIiwgImFycmF5TWV0aG9kIiwgInN0cmluZ01ldGhvZCIsICJTdHJpbmdQcm90b3R5cGUiLCAibmF0aXZlR2V0UHJvdG90eXBlT2YiLCAiJGZpbHRlciIsICJ3aGl0ZXNwYWNlcyIsICJsdHJpbSIsICJSZWdFeHAiLCAicnRyaW0iLCAic3RyaW5nVHJpbSIsICJ0cmltIiwgIiRwYXJzZUludCIsICJwYXJzZUludCIsICJoZXgiLCAibnVtYmVyUGFyc2VJbnQiLCAicmFkaXgiLCAiJGluZGV4T2YiLCAibmF0aXZlSW5kZXhPZiIsICJORUdBVElWRV9aRVJPIiwgInNlYXJjaEVsZW1lbnQiLCAiRCIsICJlbmdpbmVJc0J1biIsICJCdW4iLCAiRU5HSU5FX0lTX0JVTiIsICJVU0VSX0FHRU5UIiwgInZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoIiwgInBhc3NlZCIsICJyZXF1aXJlZCIsICJXUkFQIiwgInNjaGVkdWxlcnNGaXgiLCAic2NoZWR1bGVyIiwgImhhc1RpbWVBcmciLCAiZmlyc3RQYXJhbUluZGV4IiwgImhhbmRsZXIiLCAidGltZW91dCIsICJib3VuZEFyZ3MiLCAicGFyYW1zIiwgImNhbGxiYWNrIiwgInNldEludGVydmFsIiwgInNldFRpbWVvdXQiLCAiZmlsbCIsICJlbmRQb3MiLCAiX2V4dGVuZHMiLCAiX2luaGVyaXRzTG9vc2UiLCAic3ViQ2xhc3MiLCAic3VwZXJDbGFzcyIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIlJlZmVyZW5jZUVycm9yIiwgIm91dHB1dCIsICJuZXh0S2V5IiwgIndpbiIsICJhc3NpZ24kMSIsICJWRU5ET1JfUFJFRklYRVMiLCAiVEVTVF9FTEVNRU5UIiwgInJvdW5kIiwgImFicyIsICJwcmVmaXhlZCIsICJwcm9wZXJ0eSIsICJwcmVmaXgiLCAicHJvcCIsICJjYW1lbFByb3AiLCAidG9VcHBlckNhc2UiLCAiUFJFRklYRURfVE9VQ0hfQUNUSU9OIiwgIk5BVElWRV9UT1VDSF9BQ1RJT04iLCAiVE9VQ0hfQUNUSU9OX0NPTVBVVEUiLCAiVE9VQ0hfQUNUSU9OX0FVVE8iLCAiVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTiIsICJUT1VDSF9BQ1RJT05fTk9ORSIsICJUT1VDSF9BQ1RJT05fUEFOX1giLCAiVE9VQ0hfQUNUSU9OX1BBTl9ZIiwgIlRPVUNIX0FDVElPTl9NQVAiLCAidG91Y2hNYXAiLCAiY3NzU3VwcG9ydHMiLCAiQ1NTIiwgInN1cHBvcnRzIiwgImdldFRvdWNoQWN0aW9uUHJvcHMiLCAiU1VQUE9SVF9UT1VDSCIsICJTVVBQT1JUX1BPSU5URVJfRVZFTlRTIiwgIlNVUFBPUlRfT05MWV9UT1VDSCIsICJJTlBVVF9UWVBFX1RPVUNIIiwgIklOUFVUX1RZUEVfTU9VU0UiLCAiQ09NUFVURV9JTlRFUlZBTCIsICJJTlBVVF9TVEFSVCIsICJJTlBVVF9FTkQiLCAiSU5QVVRfQ0FOQ0VMIiwgIkRJUkVDVElPTl9OT05FIiwgIkRJUkVDVElPTl9MRUZUIiwgIkRJUkVDVElPTl9SSUdIVCIsICJESVJFQ1RJT05fVVAiLCAiRElSRUNUSU9OX0RPV04iLCAiRElSRUNUSU9OX0hPUklaT05UQUwiLCAiRElSRUNUSU9OX1ZFUlRJQ0FMIiwgIkRJUkVDVElPTl9BTEwiLCAiUFJPUFNfWFkiLCAiUFJPUFNfQ0xJRU5UX1hZIiwgImVhY2giLCAiY29udGV4dCIsICJib29sT3JGbiIsICJpblN0ciIsICJzdHIiLCAiVG91Y2hBY3Rpb24iLCAibWFuYWdlciIsICJfcHJvdG8iLCAiY29tcHV0ZSIsICJhY3Rpb25zIiwgInVwZGF0ZSIsICJ0b3VjaEFjdGlvbiIsICJyZWNvZ25pemVycyIsICJyZWNvZ25pemVyIiwgImVuYWJsZSIsICJnZXRUb3VjaEFjdGlvbiIsICJoYXNQYW5YIiwgImhhc1BhblkiLCAicHJldmVudERlZmF1bHRzIiwgInNyY0V2ZW50IiwgImRpcmVjdGlvbiIsICJvZmZzZXREaXJlY3Rpb24iLCAic2Vzc2lvbiIsICJwcmV2ZW50ZWQiLCAicHJldmVudERlZmF1bHQiLCAiaGFzTm9uZSIsICJpc1RhcFBvaW50ZXIiLCAicG9pbnRlcnMiLCAiaXNUYXBNb3ZlbWVudCIsICJkaXN0YW5jZSIsICJpc1RhcFRvdWNoVGltZSIsICJkZWx0YVRpbWUiLCAicHJldmVudFNyYyIsICJoYXNQYXJlbnQiLCAibm9kZSIsICJwYXJlbnROb2RlIiwgImdldENlbnRlciIsICJwb2ludGVyc0xlbmd0aCIsICJjbGllbnRYIiwgImNsaWVudFkiLCAic2ltcGxlQ2xvbmVJbnB1dERhdGEiLCAidGltZVN0YW1wIiwgImNlbnRlciIsICJkZWx0YVgiLCAiZGVsdGFZIiwgImdldERpc3RhbmNlIiwgInAxIiwgInAyIiwgImdldEFuZ2xlIiwgImF0YW4yIiwgImdldERpcmVjdGlvbiIsICJnZXRWZWxvY2l0eSIsICJjb21wdXRlSW5wdXREYXRhIiwgImZpcnN0SW5wdXQiLCAiZmlyc3RNdWx0aXBsZSIsICJvZmZzZXRDZW50ZXIiLCAiYW5nbGUiLCAib2Zmc2V0RGVsdGEiLCAicHJldkRlbHRhIiwgInByZXZJbnB1dCIsICJldmVudFR5cGUiLCAib3ZlcmFsbFZlbG9jaXR5IiwgIm92ZXJhbGxWZWxvY2l0eVgiLCAib3ZlcmFsbFZlbG9jaXR5WSIsICJzY2FsZSIsICJyb3RhdGlvbiIsICJtYXhQb2ludGVycyIsICJ2ZWxvY2l0eSIsICJ2ZWxvY2l0eVgiLCAidmVsb2NpdHlZIiwgImxhc3QiLCAibGFzdEludGVydmFsIiwgInYiLCAic3JjRXZlbnRUYXJnZXQiLCAiY29tcG9zZWRQYXRoIiwgImlucHV0SGFuZGxlciIsICJwb2ludGVyc0xlbiIsICJjaGFuZ2VkUG9pbnRlcnNMZW4iLCAiY2hhbmdlZFBvaW50ZXJzIiwgImlzRmlyc3QiLCAiaXNGaW5hbCIsICJyZWNvZ25pemUiLCAic3BsaXRTdHIiLCAiYWRkRXZlbnRMaXN0ZW5lcnMiLCAidHlwZXMiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lcnMiLCAiZ2V0V2luZG93Rm9yRWxlbWVudCIsICJkb2MiLCAib3duZXJEb2N1bWVudCIsICJkZWZhdWx0VmlldyIsICJJbnB1dCIsICJpbnB1dFRhcmdldCIsICJkb21IYW5kbGVyIiwgImV2IiwgImluaXQiLCAiZXZFbCIsICJldlRhcmdldCIsICJldldpbiIsICJkZXN0cm95IiwgImluQXJyYXkiLCAiZmluZEJ5S2V5IiwgIlBPSU5URVJfSU5QVVRfTUFQIiwgInBvaW50ZXJkb3duIiwgInBvaW50ZXJtb3ZlIiwgInBvaW50ZXJ1cCIsICJwb2ludGVyY2FuY2VsIiwgInBvaW50ZXJvdXQiLCAiSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSIsICJQT0lOVEVSX0VMRU1FTlRfRVZFTlRTIiwgIlBPSU5URVJfV0lORE9XX0VWRU5UUyIsICJNU1BvaW50ZXJFdmVudCIsICJQb2ludGVyRXZlbnQiLCAiUG9pbnRlckV2ZW50SW5wdXQiLCAiX0lucHV0IiwgIl90aGlzIiwgInBvaW50ZXJFdmVudHMiLCAicmVtb3ZlUG9pbnRlciIsICJldmVudFR5cGVOb3JtYWxpemVkIiwgInBvaW50ZXJUeXBlIiwgImlzVG91Y2giLCAic3RvcmVJbmRleCIsICJwb2ludGVySWQiLCAiYnV0dG9uIiwgInRvQXJyYXkiLCAidW5pcXVlQXJyYXkiLCAic29ydCIsICJyZXN1bHRzIiwgIlRPVUNIX0lOUFVUX01BUCIsICJ0b3VjaHN0YXJ0IiwgInRvdWNobW92ZSIsICJ0b3VjaGVuZCIsICJ0b3VjaGNhbmNlbCIsICJUb3VjaElucHV0IiwgInRhcmdldElkcyIsICJ0b3VjaGVzIiwgImdldFRvdWNoZXMiLCAidGFyZ2V0VG91Y2hlcyIsICJhbGxUb3VjaGVzIiwgImlkZW50aWZpZXIiLCAiY2hhbmdlZFRvdWNoZXMiLCAiY2hhbmdlZFRhcmdldFRvdWNoZXMiLCAidG91Y2giLCAiTU9VU0VfSU5QVVRfTUFQIiwgIm1vdXNlZG93biIsICJtb3VzZW1vdmUiLCAibW91c2V1cCIsICJNb3VzZUlucHV0IiwgInByZXNzZWQiLCAid2hpY2giLCAiREVEVVBfVElNRU9VVCIsICJzZXRMYXN0VG91Y2giLCAiZXZlbnREYXRhIiwgInByaW1hcnlUb3VjaCIsICJsYXN0VG91Y2giLCAibHRzIiwgImxhc3RUb3VjaGVzIiwgInJlY29yZFRvdWNoZXMiLCAiaXNTeW50aGV0aWNFdmVudCIsICJUb3VjaE1vdXNlSW5wdXQiLCAiX21hbmFnZXIiLCAiaW5wdXRFdmVudCIsICJpbnB1dERhdGEiLCAiaXNNb3VzZSIsICJzb3VyY2VDYXBhYmlsaXRpZXMiLCAiZmlyZXNUb3VjaEV2ZW50cyIsICJtb3VzZSIsICJpbnZva2VBcnJheUFyZyIsICJTVEFURV9GQUlMRUQiLCAiX3VuaXF1ZUlkIiwgImdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIiLCAib3RoZXJSZWNvZ25pemVyIiwgInN0YXRlU3RyIiwgIlJlY29nbml6ZXIiLCAic2ltdWx0YW5lb3VzIiwgInJlcXVpcmVGYWlsIiwgInJlY29nbml6ZVdpdGgiLCAiZHJvcFJlY29nbml6ZVdpdGgiLCAicmVxdWlyZUZhaWx1cmUiLCAiZHJvcFJlcXVpcmVGYWlsdXJlIiwgImhhc1JlcXVpcmVGYWlsdXJlcyIsICJjYW5SZWNvZ25pemVXaXRoIiwgImFkZGl0aW9uYWxFdmVudCIsICJ0cnlFbWl0IiwgImNhbkVtaXQiLCAiaW5wdXREYXRhQ2xvbmUiLCAicmVzZXQiLCAiVGFwUmVjb2duaXplciIsICJfUmVjb2duaXplciIsICJ0YXBzIiwgImludGVydmFsIiwgInRpbWUiLCAidGhyZXNob2xkIiwgInBvc1RocmVzaG9sZCIsICJwVGltZSIsICJwQ2VudGVyIiwgIl90aW1lciIsICJfaW5wdXQiLCAiY291bnQiLCAiX3RoaXMyIiwgInZhbGlkUG9pbnRlcnMiLCAidmFsaWRNb3ZlbWVudCIsICJ2YWxpZFRvdWNoVGltZSIsICJmYWlsVGltZW91dCIsICJ2YWxpZEludGVydmFsIiwgInZhbGlkTXVsdGlUYXAiLCAiX3RoaXMzIiwgImNsZWFyVGltZW91dCIsICJ0YXBDb3VudCIsICJBdHRyUmVjb2duaXplciIsICJhdHRyVGVzdCIsICJvcHRpb25Qb2ludGVycyIsICJpc1JlY29nbml6ZWQiLCAiaXNWYWxpZCIsICJkaXJlY3Rpb25TdHIiLCAiUGFuUmVjb2duaXplciIsICJfQXR0clJlY29nbml6ZXIiLCAicFgiLCAicFkiLCAiZGlyZWN0aW9uVGVzdCIsICJoYXNNb3ZlZCIsICJTd2lwZVJlY29nbml6ZXIiLCAiUGluY2hSZWNvZ25pemVyIiwgImluT3V0IiwgIlJvdGF0ZVJlY29nbml6ZXIiLCAiUHJlc3NSZWNvZ25pemVyIiwgInZhbGlkVGltZSIsICJkZWZhdWx0cyIsICJkb21FdmVudHMiLCAiaW5wdXRDbGFzcyIsICJjc3NQcm9wcyIsICJ1c2VyU2VsZWN0IiwgInRvdWNoU2VsZWN0IiwgInRvdWNoQ2FsbG91dCIsICJjb250ZW50Wm9vbWluZyIsICJ1c2VyRHJhZyIsICJ0YXBIaWdobGlnaHRDb2xvciIsICJwcmVzZXQiLCAidG9nZ2xlQ3NzUHJvcHMiLCAiYWRkIiwgIm9sZENzc1Byb3BzIiwgIk1hbmFnZXIiLCAiaGFuZGxlcnMiLCAic3RvcCIsICJmb3JjZSIsICJzdG9wcGVkIiwgImN1clJlY29nbml6ZXIiLCAiZXhpc3RpbmciLCAicmVtb3ZlIiwgInRhcmdldFJlY29nbml6ZXIiLCAiZXZlbnRzIiwgImdlc3R1cmVFdmVudCIsICJjcmVhdGVFdmVudCIsICJpbml0RXZlbnQiLCAiZ2VzdHVyZSIsICJkaXNwYXRjaEV2ZW50IiwgIlNJTkdMRV9UT1VDSF9JTlBVVF9NQVAiLCAiU2luZ2xlVG91Y2hJbnB1dCIsICJzdGFydGVkIiwgIm5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMiLCAiY2hhbmdlZCIsICJkZXByZWNhdGUiLCAibWVzc2FnZSIsICJkZXByZWNhdGlvbk1lc3NhZ2UiLCAiRXJyb3IiLCAic3RhY2siLCAibG9nIiwgImNvbnNvbGUiLCAid2FybiIsICJleHRlbmQiLCAiZGVzdCIsICJtZXJnZSIsICJpbmhlcml0IiwgImNoaWxkIiwgImJhc2UiLCAiY2hpbGRQIiwgImJhc2VQIiwgIl9zdXBlciIsICJiaW5kRm4iLCAiSGFtbWVyIiwgIlZFUlNJT04iLCAiSU5QVVRfTU9WRSIsICJTVEFURV9QT1NTSUJMRSIsICJTVEFURV9CRUdBTiIsICJTVEFURV9DSEFOR0VEIiwgIlNUQVRFX0VOREVEIiwgIlNUQVRFX1JFQ09HTklaRUQiLCAiU1RBVEVfQ0FOQ0VMTEVEIiwgIlRhcCIsICJQYW4iLCAiU3dpcGUiLCAiUGluY2giLCAiUm90YXRlIiwgIlByZXNzIiwgIlJlYWxIYW1tZXIiLCAiZCIsICJwIiwgInBhcnNlRE9UIiwgImRvdCIsICJncmFwaCIsICJnZXRUb2tlbiIsICJ0b2tlbiIsICJzdHJpY3QiLCAidG9rZW5UeXBlIiwgIlRPS0VOVFlQRSIsICJJREVOVElGSUVSIiwgIm5ld1N5bnRheEVycm9yIiwgInBhcnNlU3RhdGVtZW50cyIsICJlZGdlIiwgInBhcnNlR3JhcGgiLCAiTk9ERV9BVFRSX01BUFBJTkciLCAiZm9udHNpemUiLCAiZm9udGNvbG9yIiwgImxhYmVsZm9udGNvbG9yIiwgImZvbnRuYW1lIiwgImNvbG9yIiwgImZpbGxjb2xvciIsICJ0b29sdGlwIiwgImxhYmVsdG9vbHRpcCIsICJFREdFX0FUVFJfTUFQUElORyIsICJfT2JqZWN0JGNyZWF0ZSIsICJOVUxMIiwgIkRFTElNSVRFUiIsICJVTktOT1dOIiwgIkRFTElNSVRFUlMiLCAibmV4dFByZXZpZXciLCAiaXNBbHBoYU51bWVyaWMiLCAiY2hhckNvZGUiLCAic2V0VmFsdWUiLCAic2hpZnQiLCAiYWRkTm9kZSIsICJncmFwaHMiLCAibm9kZXMiLCAiYXR0ciIsICJnIiwgIl9pbmRleE9mSW5zdGFuY2VQcm9wZXJ0eSIsICJhZGRFZGdlIiwgImVkZ2VzIiwgImNyZWF0ZUVkZ2UiLCAiZW5hYmxlZCIsICJhcnJvd3MiLCAiaXNDb21tZW50IiwgImMyIiwgImlzTmFOIiwgIlN5bnRheEVycm9yIiwgImNob3AiLCAicGFyc2VTdGF0ZW1lbnQiLCAic3ViZ3JhcGgiLCAicGFyc2VTdWJncmFwaCIsICJwYXJzZUVkZ2UiLCAicGFyc2VBdHRyaWJ1dGVMaXN0IiwgInN1YmdyYXBocyIsICJub2ZfYXR0cl9saXN0IiwgImVkZ2VTdHlsZXMiLCAiZGFzaGVkIiwgInNvbGlkIiwgImRvdHRlZCIsICJhcnJvd1R5cGVzIiwgImJveCIsICJjcm93IiwgImN1cnZlIiwgImljdXJ2ZSIsICJub3JtYWwiLCAiaW52IiwgInRlZSIsICJ2ZWUiLCAiYXR0cl9saXN0IiwgImF0dHJfbmFtZXMiLCAiX2luY2x1ZGVzSW5zdGFuY2VQcm9wZXJ0eSIsICJpZHgiLCAiZGlyIiwgImZyb21fdHlwZSIsICJ0b190eXBlIiwgImRpcl90eXBlIiwgIl9zcGxpY2VJbnN0YW5jZVByb3BlcnR5IiwgImlkeF9hcnJvdyIsICJ0bXBfYXR0cl9saXN0IiwgInRleHQiLCAibWF4TGVuZ3RoIiwgInN1YnN0ciIsICJzZXRQcm9wIiwgInBvcCIsICJjb252ZXJ0QXR0ciIsICJjb252ZXJ0ZWQiLCAidmlzUHJvcCIsICJfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkiLCAidmlzUHJvcEkiLCAiRE9UVG9HcmFwaCIsICJfY29udGV4dDIiLCAiZG90RGF0YSIsICJncmFwaERhdGEiLCAiZG90Tm9kZSIsICJncmFwaE5vZGUiLCAibGFiZWwiLCAiaW1hZ2UiLCAic2hhcGUiLCAiX2NvbnRleHQzIiwgImNvbnZlcnRFZGdlIiwgImRvdEVkZ2UiLCAiZ3JhcGhFZGdlIiwgIl9jb250ZXh0NCIsICJhcnJheTEiLCAiYXJyYXkyIiwgIl9jb250ZXh0NSIsICJzdWJFZGdlIiwgImVsZW0xIiwgImVsZW0yIiwgInBhcnNlR2VwaGkiLCAiZ2VwaGlKU09OIiwgIm9wdGlvbnNPYmoiLCAiaW5oZXJpdENvbG9yIiwgImZpeGVkIiwgInBhcnNlQ29sb3IiLCAiZ0VkZ2VzIiwgInZFZGdlcyIsICJfbWFwSW5zdGFuY2VQcm9wZXJ0eSIsICJnRWRnZSIsICJ2RWRnZSIsICJhdHRyaWJ1dGVzIiwgInRpdGxlIiwgImdOb2RlIiwgInZOb2RlIiwgImJhY2tncm91bmQiLCAiYm9yZGVyIiwgImhpZ2hsaWdodCIsICJob3ZlciIsICJhZGREZXNjcmlwdGlvbiIsICJiYWNrIiwgImNyZWF0ZUVkZ2VFcnJvciIsICJkZWwiLCAiZGVsZXRlQ2x1c3RlckVycm9yIiwgImVkZ2VEZXNjcmlwdGlvbiIsICJlZGl0IiwgImVkaXRDbHVzdGVyRXJyb3IiLCAiZWRpdEVkZ2UiLCAiZWRpdEVkZ2VEZXNjcmlwdGlvbiIsICJlZGl0Tm9kZSIsICJDYWNoZWRJbWFnZSIsICJOVU1fSVRFUkFUSU9OUyIsICJJbWFnZSIsICJjYW52YXMiLCAiaW5pdGlhbGl6ZWQiLCAid2lkdGgiLCAiaGVpZ2h0IiwgImgyIiwgImg0IiwgImg4IiwgImgxNiIsICJ3MiIsICJ3NCIsICJ3OCIsICJ3MTYiLCAiY29vcmRpbmF0ZXMiLCAiX2ZpbGxNaXBNYXAiLCAiZ2V0Q29udGV4dCIsICJkcmF3SW1hZ2UiLCAiaXRlcmF0aW9ucyIsICJmYWN0b3IiLCAibGVmdCIsICJ0b3AiLCAiSW1hZ2VzIiwgImltYWdlcyIsICJpbWFnZUJyb2tlbiIsICJ1cmwiLCAiYnJva2VuVXJsIiwgImltYWdlVG9Mb2FkQnJva2VuVXJsT24iLCAib25lcnJvciIsICJpbWFnZVRvUmVkcmF3V2l0aCIsICJjYWNoZWRJbWFnZSIsICJpbWciLCAib25sb2FkIiwgIl9maXhJbWFnZUNvb3JkaW5hdGVzIiwgIl9yZWRyYXdXaXRoSW1hZ2UiLCAiX3RyeWxvYWRCcm9rZW5VcmwiLCAiaW1hZ2VUb0NhY2hlIiwgImJvZHkiLCAib2Zmc2V0V2lkdGgiLCAib2Zmc2V0SGVpZ2h0IiwgInJlbW92ZUNoaWxkIiwgImFycmF5QnVmZmVyTm9uRXh0ZW5zaWJsZSIsICJBcnJheUJ1ZmZlciIsICJidWZmZXIiLCAiaXNFeHRlbnNpYmxlIiwgIkFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSIsICIkaXNFeHRlbnNpYmxlIiwgIm9iamVjdElzRXh0ZW5zaWJsZSIsICJmcmVlemluZyIsICJwcmV2ZW50RXh0ZW5zaW9ucyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUiLCAiRlJFRVpJTkciLCAiUkVRVUlSRUQiLCAic2V0TWV0YWRhdGEiLCAib2JqZWN0SUQiLCAid2Vha0RhdGEiLCAibWV0YSIsICJpbnRlcm5hbE1ldGFkYXRhTW9kdWxlIiwgImZhc3RLZXkiLCAiZ2V0V2Vha0RhdGEiLCAib25GcmVlemUiLCAiUmVzdWx0IiwgIlJlc3VsdFByb3RvdHlwZSIsICJpdGVyYXRlIiwgInVuYm91bmRGdW5jdGlvbiIsICJpdGVyRm4iLCAiQVNfRU5UUklFUyIsICJJU19SRUNPUkQiLCAiSVNfSVRFUkFUT1IiLCAiSU5URVJSVVBURUQiLCAiY29uZGl0aW9uIiwgImNhbGxGbiIsICJhbkluc3RhbmNlIiwgIkludGVybmFsTWV0YWRhdGFNb2R1bGUiLCAiaW50ZXJuYWxTdGF0ZUdldHRlckZvciIsICJjb2xsZWN0aW9uIiwgIkNPTlNUUlVDVE9SX05BTUUiLCAid3JhcHBlciIsICJjb21tb24iLCAiSVNfV0VBSyIsICJBRERFUiIsICJOYXRpdmVQcm90b3R5cGUiLCAiZXhwb3J0ZWQiLCAiSVNfQURERVIiLCAiZ2V0Q29uc3RydWN0b3IiLCAic2V0U3Ryb25nIiwgImRlZmluZUJ1aWx0SW5zIiwgInVuc2FmZSIsICJzZXRTcGVjaWVzIiwgImNvbGxlY3Rpb25TdHJvbmciLCAiZGVmaW5lIiwgInByZXZpb3VzIiwgImVudHJ5IiwgImdldEVudHJ5IiwgInJlbW92ZWQiLCAiY2xlYXIiLCAiZGVsZXRlIiwgIklURVJBVE9SX05BTUUiLCAiZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUiLCAiZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlIiwgIk1hcCIsICJHcm91cHMiLCAiX2RlZmF1bHRJbmRleCIsICJfZ3JvdXBJbmRleCIsICJfZGVmYXVsdEdyb3VwcyIsICJkZWZhdWx0T3B0aW9ucyIsICJ1c2VEZWZhdWx0R3JvdXBzIiwgIl9PYmplY3QkYXNzaWduIiwgIm9wdGlvbkZpZWxkcyIsICJncm91cE5hbWUiLCAiZ3JvdXAiLCAiX2dyb3VwcyIsICJfTWFwIiwgIl9ncm91cE5hbWVzIiwgImdyb3VwbmFtZSIsICJzaG91bGRDcmVhdGUiLCAiZ2xvYmFsSXNGaW5pdGUiLCAiaXNGaW5pdGUiLCAibnVtYmVySXNGaW5pdGUiLCAiJHNvbWUiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICIkJDkiLCAiX2RlZmluZVByb3BlcnR5IiwgIiRwYXJzZUZsb2F0IiwgInBhcnNlRmxvYXQiLCAibnVtYmVyUGFyc2VGbG9hdCIsICJJbmZpbml0eSIsICJ0cmltbWVkU3RyaW5nIiwgImNob29zaWZ5IiwgInN1Yk9wdGlvbiIsICJwaWxlIiwgImFsbG93ZWQiLCAiY2hvc2VuIiwgInRvcE1vc3QiLCAiY2hvc2VuRWRnZSIsICJwb2ludEluUmVjdCIsICJyb3RhdGlvblBvaW50IiwgInRtcCIsICJyaWdodCIsICJib3R0b20iLCAiaXNWYWxpZExhYmVsIiwgImdldFNlbGZSZWZDb29yZGluYXRlcyIsICJkaXN0YW5jZVRvQm9yZGVyIiwgInRvQm9yZGVyRGlzdCIsICJ5RnJvbU5vZGVDZW50ZXIiLCAieEZyb21Ob2RlQ2VudGVyIiwgIkxhYmVsQWNjdW11bGF0b3IiLCAibWVhc3VyZVRleHQiLCAibGluZXMiLCAibW9kIiwgImJsb2NrcyIsICJ0bXBUZXh0IiwgImJsb2NrIiwgIl92YWx1ZXNJbnN0YW5jZVByb3BlcnR5IiwgImxpbmUiLCAiX2FkZCIsICJ0bXBMaW5lcyIsICJ0bXBMaW5lIiwgImZpcnN0RW1wdHlCbG9jayIsICJ0bXBCbG9ja3MiLCAiZGV0ZXJtaW5lTGluZUhlaWdodHMiLCAiZGV0ZXJtaW5lTGFiZWxTaXplIiwgInJlbW92ZUVtcHR5QmxvY2tzIiwgInRhZ1BhdHRlcm4iLCAiXyIsICJhZnRlckJvbGQiLCAiYWZ0ZXJJdGFsIiwgImFmdGVyTW9ubyIsICJNYXJrdXBBY2N1bXVsYXRvciIsICJib2xkIiwgIml0YWwiLCAibW9ubyIsICJzcGFjaW5nIiwgIm1vZFN0YWNrIiwgIm1vZE5hbWUiLCAiY2giLCAidGFnTmFtZSIsICJlbWl0QmxvY2siLCAidW5zaGlmdCIsICJzZXRUYWciLCAiYWR2YW5jZSIsICJfdGhpcyRwcmVwYXJlUmVnRXhwMiIsICJwcmVwYXJlUmVnRXhwIiwgInJlZ0V4cCIsICJtYXRjaGVkIiwgIm5leHRUYWciLCAiY2hlY2tUYWciLCAidW5zZXRUYWciLCAicHJlcGFyZWQiLCAiTGFiZWxTcGxpdHRlciIsICJzZWxlY3RlZCIsICJnZXRGb3JtYXR0aW5nVmFsdWVzIiwgImZpbmFsaXplIiwgImZvbnQiLCAiZm9udE9wdGlvbnMiLCAibmxMaW5lcyIsICJsaW5lQ291bnQiLCAibXVsdGkiLCAic3BsaXRCbG9ja3MiLCAibWF4V2R0IiwgInNwbGl0U3RyaW5nSW50b0xpbmVzIiwgImFwcGVuZCIsICJuZXdMaW5lIiwgIm1hcmt1cFN5c3RlbSIsICJzeXN0ZW0iLCAicGFyc2VFbnRpdGllcyIsICJwYXJzZVdTIiwgInBhcnNlU3RhcnRUYWciLCAicGFyc2VFbmRUYWciLCAiYmVnaW5hYmxlIiwgInBhcnNlT3ZlcnJpZGUiLCAiZGVjb2RlTWFya3VwU3lzdGVtIiwgInNwbGl0TWFya2Rvd25CbG9ja3MiLCAic3BsaXRIdG1sQmxvY2tzIiwgImN1cldpZHRoIiwgIndvcmRzIiwgIm5ld1RleHQiLCAib3Zlck1heFdpZHRoIiwgImFwcGVuZExhc3QiLCAiZ2V0TG9uZ2VzdEZpdCIsICJ3b3JkIiwgImdldExvbmdlc3RGaXRXb3JkIiwgIm5ld1ciLCAibXVsdGlGb250U3R5bGUiLCAiTGFiZWwiLCAiZWRnZWxhYmVsIiwgInBvaW50VG9TZWxmIiwgImJhc2VTaXplIiwgInNldE9wdGlvbnMiLCAieUxpbmUiLCAiaXNFZGdlTGFiZWwiLCAiZWxlbWVudE9wdGlvbnMiLCAiaW5pdEZvbnRPcHRpb25zIiwgImxhYmVsRGlydHkiLCAibmV3Rm9udE9wdGlvbnMiLCAicGFyc2VGb250U3RyaW5nIiwgInZhZGp1c3QiLCAiY29uc3RyYWluV2lkdGgiLCAibWluV2R0IiwgImNvbnN0cmFpbkhlaWdodCIsICJtaW5IZ3QiLCAidmFsaWduIiwgIndpZHRoQ29uc3RyYWludCIsICJ3aWR0aENvbnN0cmFpbnRNYXhpbXVtIiwgIndpZHRoQ29uc3RyYWludE1pbmltdW0iLCAiaGVpZ2h0Q29uc3RyYWludCIsICJoZWlnaHRDb25zdHJhaW50TWluaW11bSIsICJoZWlnaHRDb25zdHJhaW50VmFsaWduIiwgInByb3BhZ2F0ZUZvbnRzIiwgImRlZXBFeHRlbmQiLCAiY29uc3RyYWluIiwgImNob29zZXIiLCAibWFyZ2lucyIsICJ3aWR0aEJpYXMiLCAiaGVpZ2h0QmlhcyIsICJkc3RQaWxlIiwgInNyY1BpbGUiLCAiYWRkRm9udFRvUGlsZSIsICJyZXQiLCAidG1wU2hvcnRoYW5kIiwgIm9wdCIsICJtdWx0aU5hbWUiLCAib3B0aW9uIiwgIm11bHRpRm9udCIsICJvcHRpb25OYW1lcyIsICJnZXRGb250T3B0aW9uIiwgImZvbnRQaWxlIiwgImFkZEZvbnRPcHRpb25zVG9QaWxlIiwgImdldEJhc2ljT3B0aW9ucyIsICJfbG9vcCIsICJtb2RPcHRpb25zIiwgImdldEZvbnRPcHRpb25zIiwgImJhc2VsaW5lIiwgInZpZXdGb250U2l6ZSIsICJ2aWV3IiwgInNjYWxpbmciLCAiZHJhd1RocmVzaG9sZCIsICJtYXhWaXNpYmxlIiwgImNhbGN1bGF0ZUxhYmVsU2l6ZSIsICJfZHJhd0JhY2tncm91bmQiLCAiX2RyYXdUZXh0IiwgImZpbGxTdHlsZSIsICJnZXRTaXplIiwgImZpbGxSZWN0IiwgIl90aGlzJF9zZXRBbGlnbm1lbnQyIiwgIl9zZXRBbGlnbm1lbnQiLCAidGV4dEFsaWduIiwgImxhYmVsSGVpZ2h0IiwgImFsaWduIiwgIl90aGlzJF9nZXRDb2xvcjIiLCAiX2dldENvbG9yIiwgInN0cm9rZUNvbG9yIiwgImZvbnRDb2xvciIsICJzdHJva2VXaWR0aCIsICJsaW5lV2lkdGgiLCAic3Ryb2tlU3R5bGUiLCAibGluZUpvaW4iLCAic3Ryb2tlVGV4dCIsICJmaWxsVGV4dCIsICJ0ZXh0QmFzZWxpbmUiLCAiaW5pdGlhbFN0cm9rZUNvbG9yIiwgIm9wYWNpdHkiLCAib3ZlcnJpZGVPcGFjaXR5IiwgIl9wcm9jZXNzTGFiZWwiLCAiZ2V0VmFsdWUiLCAiZmFjZSIsICJsYWJlbEhpZ2hsaWdodEJvbGQiLCAiZm9udFN0cmluZyIsICJzZWxlY3RlZFN0YXRlIiwgImhvdmVyU3RhdGUiLCAiaW5UZXh0IiwgImRpZmZlcmVudFN0YXRlIiwgIl9wcm9jZXNzTGFiZWxUZXh0IiwgIm91dE9wdGlvbnMiLCAiaW5PcHRpb25zIiwgIm5ld09wdGlvbnNBcnJheSIsICJhQ29uc3RydWN0b3IiLCAibmF0aXZlQ29uc3RydWN0IiwgIk5FV19UQVJHRVRfQlVHIiwgIkFSR1NfQlVHIiwgIlRhcmdldCIsICJuZXdUYXJnZXQiLCAiJGFyZ3MiLCAiX3NldFByb3RvdHlwZU9mIiwgIl9PYmplY3Qkc2V0UHJvdG90eXBlT2YiLCAiX2JpbmRJbnN0YW5jZVByb3BlcnR5IiwgIl9pbmhlcml0cyIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX09iamVjdCRnZXRQcm90b3R5cGVPZiIsICJOb2RlQmFzZSIsICJsYWJlbE1vZHVsZSIsICJtYXJnaW4iLCAicmVmcmVzaE5lZWRlZCIsICJib3VuZGluZ0JveCIsICJhZGp1c3RTaXplcyIsICJib3JkZXJXaWR0aCIsICJyZXNpemUiLCAic2hhZG93IiwgInNoYWRvd0NvbG9yIiwgInNoYWRvd0JsdXIiLCAic2hhZG93U2l6ZSIsICJzaGFkb3dPZmZzZXRYIiwgInNoYWRvd1giLCAic2hhZG93T2Zmc2V0WSIsICJzaGFkb3dZIiwgImJvcmRlckRhc2hlcyIsICJzZXRMaW5lRGFzaCIsICJkYXNoZXMiLCAic2hhcGVQcm9wZXJ0aWVzIiwgImJvcmRlckNvbG9yIiwgInNhdmUiLCAiZW5hYmxlQm9yZGVyRGFzaGVzIiwgInN0cm9rZSIsICJkaXNhYmxlQm9yZGVyRGFzaGVzIiwgInJlc3RvcmUiLCAiZW5hYmxlU2hhZG93IiwgIl9maWxsSW5zdGFuY2VQcm9wZXJ0eSIsICJkaXNhYmxlU2hhZG93IiwgInBlcmZvcm1TdHJva2UiLCAiX3VwZGF0ZUJvdW5kaW5nQm94IiwgInRleHRTaXplIiwgImdldFRleHRTaXplIiwgIl9jcmVhdGVTdXBlciIsICJEZXJpdmVkIiwgImhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX1JlZmxlY3QkY29uc3RydWN0IiwgIlByb3h5IiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiU3VwZXIiLCAiTmV3VGFyZ2V0IiwgIkJveCIsICJfTm9kZUJhc2UiLCAiX3NldE1hcmdpbnMiLCAibmVlZHNSZWZyZXNoIiwgImRpbWVuc2lvbnMiLCAiZ2V0RGltZW5zaW9uc0Zyb21MYWJlbCIsICJpbml0Q29udGV4dEZvckRyYXciLCAiYm9yZGVyUmFkaXVzIiwgInBlcmZvcm1GaWxsIiwgInVwZGF0ZUJvdW5kaW5nQm94IiwgIl9hZGRCb3VuZGluZ0JveE1hcmdpbiIsICJDaXJjbGVJbWFnZUJhc2UiLCAibGFiZWxPZmZzZXQiLCAiaW1hZ2VPYmoiLCAiaW1hZ2VPYmpBbHQiLCAic2V0SW1hZ2VzIiwgInNlbGVjdGlvbl9jaGFuZ2VkIiwgImltYWdlVG1wIiwgImltZ1BhZGRpbmciLCAiaW1hZ2VQYWRkaW5nIiwgIm9wdEltZ1BhZGRpbmciLCAidXNlSW1hZ2VTaXplIiwgInJhdGlvX3dpZHRoIiwgInJhdGlvX2hlaWdodCIsICJfZ2V0SW1hZ2VQYWRkaW5nIiwgImdsb2JhbEFscGhhIiwgImludGVycG9sYXRpb24iLCAiaW1nUG9zTGVmdCIsICJpbWdQb3NUb3AiLCAiaW1nV2lkdGgiLCAiaW1nSGVpZ2h0IiwgImRyYXdJbWFnZUF0UG9zaXRpb24iLCAibGFiZWxEaW1lbnNpb25zIiwgInlMYWJlbCIsICJDaXJjbGUiLCAiX0NpcmNsZUltYWdlQmFzZSIsICJkaWFtZXRlciIsICJfZHJhd1Jhd0NpcmNsZSIsICJDaXJjdWxhckltYWdlIiwgIl9yZXNpemVJbWFnZSIsICJzd2l0Y2hJbWFnZXMiLCAibGFiZWxYIiwgImxhYmVsWSIsICJjb29yZGluYXRlT3JpZ2luIiwgImNsaXAiLCAiX2RyYXdJbWFnZUF0UG9zaXRpb24iLCAiX2RyYXdJbWFnZUxhYmVsIiwgIlNoYXBlQmFzZSIsICJfdGhpcyRjdXN0b21TaXplV2lkdGgiLCAiX3RoaXMkY3VzdG9tU2l6ZUhlaWdoIiwgImN1c3RvbVNpemVXaWR0aCIsICJjdXN0b21TaXplSGVpZ2h0IiwgInNpemVNdWx0aXBsaWVyIiwgIl9sZW4iLCAiX2tleSIsICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQiLCAiaWNvbiIsICJjb2RlIiwgImRyYXdFeHRlcm5hbExhYmVsIiwgIl9PYmplY3Qka2V5cyIsICJfT2JqZWN0JGdldE93blByb3BlcnR5U3ltYm9scyIsICJfZmlsdGVySW5zdGFuY2VQcm9wZXJ0eSIsICJfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJfb2JqZWN0U3ByZWFkIiwgIl9PYmplY3QkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICJfT2JqZWN0JGRlZmluZVByb3BlcnRpZXMiLCAiQ3VzdG9tU2hhcGUiLCAiX1NoYXBlQmFzZSIsICJjdHhSZW5kZXJlciIsICJkcmF3TGF0ZXIiLCAiZHJhd05vZGUiLCAibm9kZURpbWVuc2lvbnMiLCAiX2Rpc3RhbmNlVG9Cb3JkZXIiLCAiRGF0YWJhc2UiLCAiRGlhbW9uZCIsICJfZHJhd1NoYXBlIiwgIkRvdCIsICJFbGxpcHNlIiwgIkljb24iLCAiaWNvblNpemUiLCAiX2ljb24iLCAid2VpZ2h0IiwgInNpZGUiLCAidXNlQm9yZGVyV2l0aEltYWdlIiwgIm5ldXRyYWxib3JkZXJXaWR0aCIsICJzZWxlY3Rpb25MaW5lV2lkdGgiLCAiYm9yZGVyV2lkdGhTZWxlY3RlZCIsICJTcXVhcmUiLCAiSGV4YWdvbiIsICJTdGFyIiwgIlRleHQiLCAiVHJpYW5nbGUiLCAiVHJpYW5nbGVEb3duIiwgIk5vZGUiLCAiaW1hZ2VsaXN0IiwgImdyb3VwbGlzdCIsICJnbG9iYWxPcHRpb25zIiwgImJyaWRnZU9iamVjdCIsICJiYXNlRm9udFNpemUiLCAicHJlZGVmaW5lZFBvc2l0aW9uIiwgImN1cnJlbnRTaGFwZSIsICJfbG9jYWxDb2xvciIsICJjaGVja01hc3MiLCAiX3BhcnNlSW50IiwgIl9wYXJzZUZsb2F0IiwgInBhcnNlT3B0aW9ucyIsICJfbG9hZF9pbWFnZXMiLCAidXBkYXRlTGFiZWxNb2R1bGUiLCAiY2hlY2tPcGFjaXR5IiwgInVwZGF0ZVNoYXBlIiwgImhpZGRlbiIsICJwaHlzaWNzIiwgImxvYWQiLCAiYnJva2VuSW1hZ2UiLCAidW5zZWxlY3RlZCIsICJ1cGRhdGVHcm91cE9wdGlvbnMiLCAiY3VycmVudEdyb3VwIiwgInRvdGFsIiwgImN1c3RvbVNjYWxpbmdGdW5jdGlvbiIsICJzaXplRGlmZiIsICJmb250RGlmZiIsICJ2aXNpYmxlIiwgIm5vZGVJZCIsICJsYWJlbElkIiwgIm9yaWdpbiIsICJwYXJlbnRPcHRpb25zIiwgIm5ld09wdGlvbnMiLCAiZ3JvdXBMaXN0IiwgImdyb3VwT2JqIiwgInNraXBQcm9wZXJ0aWVzIiwgIl9PYmplY3QkZ2V0T3duUHJvcGVydHlOYW1lcyIsICJzZWxlY3RpdmVOb3REZWVwRXh0ZW5kIiwgImFsbG93RGVsZXRpb24iLCAiY2hlY2tDb29yZGluYXRlT3JpZ2luIiwgIm1lcmdlT3B0aW9ucyIsICJwYXJzZWRDb2xvciIsICJmaWxsSWZEZWZpbmVkIiwgIm1hc3MiLCAic3RySWQiLCAiVkFMSURBVE9SX1BSSU5UX1NUWUxFIiwgIk5vZGVzSGFuZGxlciIsICJncm91cHMiLCAibGF5b3V0RW5naW5lIiwgImZ1bmN0aW9ucyIsICJjcmVhdGVOb2RlIiwgIm5vZGVzTGlzdGVuZXJzIiwgIml0ZW1zIiwgIm9sZERhdGEiLCAiYm9sZGl0YWwiLCAibGV2ZWwiLCAiYmluZEV2ZW50TGlzdGVuZXJzIiwgImVtaXR0ZXIiLCAicmVmcmVzaCIsICJfTnVtYmVyJGlzTmFOIiwgIl9OdW1iZXIkaXNGaW5pdGUiLCAiX2kiLCAiX09iamVjdCRrZXlzMiIsICJkb05vdEVtaXQiLCAib2xkTm9kZXNEYXRhIiwgImlzRGF0YVZpZXdMaWtlIiwgIkRhdGFTZXQiLCAibWUiLCAiaWRzIiwgImdldElkcyIsICJuZXdOb2RlcyIsICJwb3NpdGlvbkluaXRpYWxseSIsICJjaGFuZ2VkRGF0YSIsICJkYXRhQ2hhbmdlZCIsICJfc29tZUluc3RhbmNlUHJvcGVydHkiLCAibmV3VmFsdWUiLCAib2xkVmFsdWUiLCAiY2xlYXJQb3NpdGlvbnMiLCAiZGF0YUFycmF5IiwgIm5vZGVJbmRpY2VzIiwgIl9zdGVwIiwgImRhdGFzZXQiLCAiZ2V0RGF0YVNldCIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiZHNOb2RlIiwgImJvZHlOb2RlIiwgImVyciIsICJub2RlTGlzdCIsICJub2RlT2JqIiwgInRvSWQiLCAiZnJvbUlkIiwgImVkZ2VMaXN0IiwgIl90aGlzNCIsICJfc2V0VGltZW91dCIsICJpc0RhdGFEZXNjcmlwdG9yIiwgInJlY2VpdmVyIiwgIl9nZXQiLCAiX1JlZmxlY3QkZ2V0IiwgIiRoeXBvdCIsICJoeXBvdCIsICJOYU4iLCAidmFsdWUxIiwgInZhbHVlMiIsICJkaXYiLCAic3VtIiwgImFMZW4iLCAibGFyZyIsICJFbmRQb2ludCIsICJwb2ludHMiLCAiYXJyb3dEYXRhIiwgInh0IiwgInl0IiwgIl9FbmRQb2ludCIsICJ0cmFuc2xhdGUiLCAicm90YXRlIiwgImltYWdlV2lkdGgiLCAiaW1hZ2VIZWlnaHQiLCAiQXJyb3ciLCAiX0VuZFBvaW50MiIsICJfc3VwZXIyIiwgInRyYW5zZm9ybSIsICJkcmF3UGF0aCIsICJDcm93IiwgIkN1cnZlIiwgInBpIiwgInN0YXJ0QW5nbGUiLCAiZW5kQW5nbGUiLCAiSW52ZXJ0ZWRDdXJ2ZSIsICJJbnZlcnRlZFRyaWFuZ2xlIiwgIkJhciIsICJWZWUiLCAiRW5kUG9pbnRzIiwgIkVkZ2VCYXNlIiwgIl9ib2R5IiwgIl9sYWJlbE1vZHVsZSIsICJjb2xvckRpcnR5IiwgImhvdmVyV2lkdGgiLCAic2VsZWN0aW9uV2lkdGgiLCAiZnJvbVBvaW50IiwgInRvUG9pbnQiLCAiX3NlbGVjdGVkIiwgIl9ob3ZlciIsICJ2aWFOb2RlIiwgImdldFZpYU5vZGUiLCAiZ2V0Q29sb3IiLCAiX2RyYXdEYXNoZWRMaW5lIiwgIl9kcmF3TGluZSIsICJfbGluZSIsICJfdGhpcyRfZ2V0Q2lyY2xlRGF0YTIiLCAiX2dldENpcmNsZURhdGEiLCAiX2NpcmNsZSIsICJfZnJvbVBvaW50IiwgIl90b1BvaW50IiwgImxpbmVDYXAiLCAibGluZURhc2hPZmZzZXQiLCAiX3RoaXMkX2dldENpcmNsZURhdGE0IiwgIl90aGlzJF9nZXRDaXJjbGVEYXRhNiIsICJfZmluZEJvcmRlclBvc2l0aW9uIiwgIl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUiLCAiX3RoaXMkX2dldENpcmNsZURhdGEkMiIsICJoaWdoIiwgInNlbGZSZWZlcmVuY2UiLCAibmVhck5vZGUiLCAibWlkZGxlIiwgImVuZFBvaW50T2Zmc2V0IiwgImFycm93U3RyaWtldGhyb3VnaCIsICJpdGVyYXRpb24iLCAiX3BvaW50T25DaXJjbGUiLCAiZGlmZmVyZW5jZSIsICJwb3ciLCAiaW5oZXJpdHNDb2xvciIsICJncmQiLCAiY3JlYXRlTGluZWFyR3JhZGllbnQiLCAiZnJvbUNvbG9yIiwgInRvQ29sb3IiLCAiYWRkQ29sb3JTdG9wIiwgImFuZ2xlRnJvbSIsICJhbmdsZVRvIiwgInJlbmRlckJlaGluZFRoZU5vZGUiLCAicG9pbnRURnJvbSIsICJwb2ludFRUbyIsICJ4MSIsICJ5MSIsICJ4MyIsICJ5MyIsICJfZ2V0RGlzdGFuY2VUb0VkZ2UiLCAiX3RoaXMkX2dldENpcmNsZURhdGE4IiwgInB4IiwgInB5IiwgImFycm93UG9pbnQiLCAibm9kZTEiLCAibm9kZTIiLCAicmV2ZXJzZWQiLCAic2NhbGVGYWN0b3IiLCAiZnJvbUFycm93U2NhbGUiLCAiZnJvbUFycm93VHlwZSIsICJ0b0Fycm93U2NhbGUiLCAidG9BcnJvd1R5cGUiLCAibWlkZGxlQXJyb3dTY2FsZSIsICJtaWRkbGVBcnJvd1R5cGUiLCAicmVsYXRpdmVMZW5ndGgiLCAiX01hdGgkaHlwb3QiLCAic21vb3RoIiwgInBvaW50VCIsICJ2aWEiLCAiZ3VpZGVQb3MiLCAiZ2V0UG9pbnQiLCAiaGFsZkxlbmd0aCIsICJndWlkZVBvczEiLCAiZ3VpZGVQb3MyIiwgIl90aGlzJF9nZXRDaXJjbGVEYXRhMTAiLCAiY29yZSIsICJvcmlnQ3R4QXR0ciIsICJiYWNrZ3JvdW5kQ29sb3IiLCAiYmFja2dyb3VuZFNpemUiLCAic2V0U3Ryb2tlRGFzaGVkIiwgImJhY2tncm91bmREYXNoZXMiLCAiQmV6aWVyRWRnZUJhc2UiLCAiX0VkZ2VCYXNlIiwgIl9nZXRWaWFDb29yZGluYXRlcyIsICJtaW5EaXN0YW5jZSIsICJsYXN0WCIsICJsYXN0WSIsICJfZ2V0RGlzdGFuY2VUb0xpbmUiLCAidmlhTm9kZTEiLCAidmlhTm9kZTIiLCAicXVhZHJhdGljQ3VydmVUbyIsICJkcmF3QmFja2dyb3VuZCIsICJCZXppZXJFZGdlRHluYW1pYyIsICJfQmV6aWVyRWRnZUJhc2UiLCAiX2JvdW5kRnVuY3Rpb24iLCAicG9zaXRpb25CZXppZXJOb2RlIiwgInBoeXNpY3NDaGFuZ2UiLCAic2V0dXBTdXBwb3J0Tm9kZSIsICJjb25uZWN0IiwgInBhcmVudEVkZ2VJZCIsICJfYmV6aWVyQ3VydmUiLCAiY3giLCAiY3kiLCAiY3IiLCAiX2ZpbmRCb3JkZXJQb3NpdGlvbkJlemllciIsICJfZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UiLCAiQmV6aWVyRWRnZVN0YXRpYyIsICJzdGVwWCIsICJzdGVwWSIsICJyb3VuZG5lc3MiLCAieFZpYSIsICJ5VmlhIiwgIm15QW5nbGUiLCAiQ3ViaWNCZXppZXJFZGdlQmFzZSIsICJ2aWExIiwgInZpYTIiLCAidmVjIiwgIkN1YmljQmV6aWVyRWRnZSIsICJfQ3ViaWNCZXppZXJFZGdlQmFzZSIsICJ2aWFOb2RlcyIsICJmb3JjZURpcmVjdGlvbiIsICJfcmVmMiIsICJfZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UyIiwgIl9yZWY0IiwgIlN0cmFpZ2h0RWRnZSIsICJlZGdlU2VnbWVudExlbmd0aCIsICJ0b0JvcmRlclBvaW50IiwgIkVkZ2UiLCAiYmFzZVdpZHRoIiwgImVkZ2VUeXBlIiwgImNvbm5lY3RlZCIsICJhZmZlY3RzTGF5b3V0IiwgInVwZGF0ZUVkZ2VUeXBlIiwgIl9zZXRJbnRlcmFjdGlvbldpZHRocyIsICJ0b0Fycm93IiwgImZyb21BcnJvdyIsICJtaWRkbGVBcnJvdyIsICJ0b0Fycm93U3JjIiwgInRvQXJyb3dJbWFnZVdpZHRoIiwgInRvQXJyb3dJbWFnZUhlaWdodCIsICJtaWRkbGVBcnJvd1NyYyIsICJtaWRkbGVBcnJvd0ltYWdlV2lkdGgiLCAibWlkZGxlQXJyb3dJbWFnZUhlaWdodCIsICJmcm9tQXJyb3dTcmMiLCAiZnJvbUFycm93SW1hZ2VXaWR0aCIsICJmcm9tQXJyb3dJbWFnZUhlaWdodCIsICJzZWxlY3RlZFdpZHRoIiwgImNoYW5nZUluVHlwZSIsICJjbGVhbnVwIiwgImRpc2Nvbm5lY3QiLCAiYXR0YWNoRWRnZSIsICJkZXRhY2hFZGdlIiwgIndpZHRoRGlmZiIsICJkcmF3TGluZSIsICJkcmF3TGFiZWwiLCAiZ2V0QXJyb3dEYXRhIiwgImRyYXdBcnJvd0hlYWQiLCAiX2dldFJvdGF0aW9uIiwgImVkZ2VJZCIsICJpc092ZXJsYXBwaW5nV2l0aCIsICJ4RnJvbSIsICJ5RnJvbSIsICJ4VG8iLCAieVRvIiwgInhPYmoiLCAieU9iaiIsICJnZXREaXN0YW5jZVRvRWRnZSIsICJjb3B5RnJvbUdsb2JhbHMiLCAic2VsZWN0aXZlRGVlcEV4dGVuZCIsICJfSlNPTiRzdHJpbmdpZnkiLCAiaXNTdHJpbmciLCAiY29sb3JzRGVmaW5lZCIsICJzZWxmUmVmZXJlbmNlU2l6ZSIsICJFZGdlc0hhbmRsZXIiLCAiZWRnZXNMaXN0ZW5lcnMiLCAiZWRnZURhdGEiLCAic21vb3RoT3B0aW9ucyIsICJyZWNvbm5lY3RFZGdlcyIsICJvbGRFZGdlc0RhdGEiLCAiZWRnZXNEYXRhIiwgIm9sZEVkZ2UiLCAic2hvd0ludGVybmFsSWRzIiwgIl9hZGRNaXNzaW5nRWRnZXMiLCAiX3JlbW92ZUludmFsaWRFZGdlcyIsICJfdGhpczUiLCAiZWRnZXNUb0RlbGV0ZSIsICJ0b05vZGUiLCAiZnJvbU5vZGUiLCAiaXNDbHVzdGVyIiwgImFkZElkcyIsICJCYXJuZXNIdXRTb2x2ZXIiLCAicGh5c2ljc0JvZHkiLCAiYmFybmVzSHV0VHJlZSIsICJfcm5nIiwgIkFsZWEiLCAidGhldGFJbnZlcnNlZCIsICJ0aGV0YSIsICJvdmVybGFwQXZvaWRhbmNlRmFjdG9yIiwgImF2b2lkT3ZlcmxhcCIsICJncmF2aXRhdGlvbmFsQ29uc3RhbnQiLCAicGh5c2ljc05vZGVJbmRpY2VzIiwgIm5vZGVDb3VudCIsICJfZm9ybUJhcm5lc0h1dFRyZWUiLCAiX2dldEZvcmNlQ29udHJpYnV0aW9ucyIsICJwYXJlbnRCcmFuY2giLCAiX2dldEZvcmNlQ29udHJpYnV0aW9uIiwgImNoaWxkcmVuIiwgIk5XIiwgIk5FIiwgIlNXIiwgIlNFIiwgImNoaWxkcmVuQ291bnQiLCAiY2VudGVyT2ZNYXNzIiwgImNhbGNTaXplIiwgIl9jYWxjdWxhdGVGb3JjZXMiLCAiZ3Jhdml0eUZvcmNlIiwgImZ4IiwgImZ5IiwgImZvcmNlcyIsICJtaW5YIiwgIm1pblkiLCAibWF4WCIsICJtYXhZIiwgInJvb3RTaXplIiwgImhhbGZSb290U2l6ZSIsICJjZW50ZXJYIiwgImNlbnRlclkiLCAicmFuZ2UiLCAibWF4V2lkdGgiLCAiX3NwbGl0QnJhbmNoIiwgIl9wbGFjZUluVHJlZSIsICJ0b3RhbE1hc3MiLCAidG90YWxNYXNzSW52IiwgImJpZ2dlc3RTaXplIiwgInNraXBNYXNzVXBkYXRlIiwgIl91cGRhdGVCcmFuY2hNYXNzIiwgInJlZ2lvbiIsICJfcGxhY2VJblJlZ2lvbiIsICJjb250YWluZWROb2RlIiwgIl9pbnNlcnRSZWdpb24iLCAiY2hpbGRTaXplIiwgIl9kcmF3QnJhbmNoIiwgImJyYW5jaCIsICJSZXB1bHNpb25Tb2x2ZXIiLCAicmVwdWxzaW5nRm9yY2UiLCAibm9kZURpc3RhbmNlIiwgIkhpZXJhcmNoaWNhbFJlcHVsc2lvblNvbHZlciIsICJ0aGVzZU5vZGVzRGlzdGFuY2UiLCAiU3ByaW5nU29sdmVyIiwgImVkZ2VMZW5ndGgiLCAibm9kZTMiLCAiZWRnZUluZGljZXMiLCAicGh5c2ljc0VkZ2VJbmRpY2VzIiwgInNwcmluZ0xlbmd0aCIsICJfY2FsY3VsYXRlU3ByaW5nRm9yY2UiLCAic3ByaW5nRm9yY2UiLCAic3ByaW5nQ29uc3RhbnQiLCAiSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyIiwgInNwcmluZ0Z4IiwgInNwcmluZ0Z5IiwgInRvdGFsRngiLCAidG90YWxGeSIsICJjb3JyZWN0aW9uRngiLCAiY29ycmVjdGlvbkZ5IiwgIkNlbnRyYWxHcmF2aXR5U29sdmVyIiwgImNlbnRyYWxHcmF2aXR5IiwgIkZvcmNlQXRsYXMyQmFzZWRSZXB1bHNpb25Tb2x2ZXIiLCAiX0Jhcm5lc0h1dFNvbHZlciIsICJkZWdyZWUiLCAiRm9yY2VBdGxhczJCYXNlZENlbnRyYWxHcmF2aXR5U29sdmVyIiwgIl9DZW50cmFsR3Jhdml0eVNvbHZlciIsICJQaHlzaWNzRW5naW5lIiwgInZlbG9jaXRpZXMiLCAicGh5c2ljc0VuYWJsZWQiLCAic2ltdWxhdGlvbkludGVydmFsIiwgInJlcXVpcmVzVGltZW91dCIsICJwcmV2aW91c1N0YXRlcyIsICJyZWZlcmVuY2VTdGF0ZSIsICJmcmVlemVDYWNoZSIsICJyZW5kZXJUaW1lciIsICJhZGFwdGl2ZVRpbWVzdGVwIiwgImFkYXB0aXZlVGltZXN0ZXBFbmFibGVkIiwgImFkYXB0aXZlQ291bnRlciIsICJhZGFwdGl2ZUludGVydmFsIiwgInN0YWJpbGl6ZWQiLCAic3RhcnRlZFN0YWJpbGl6YXRpb24iLCAic3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMiLCAicmVhZHkiLCAiYmFybmVzSHV0IiwgImRhbXBpbmciLCAiZm9yY2VBdGxhczJCYXNlZCIsICJyZXB1bHNpb24iLCAiaGllcmFyY2hpY2FsUmVwdWxzaW9uIiwgIm1heFZlbG9jaXR5IiwgIm1pblZlbG9jaXR5IiwgInNvbHZlciIsICJzdGFiaWxpemF0aW9uIiwgInVwZGF0ZUludGVydmFsIiwgIm9ubHlEeW5hbWljRWRnZXMiLCAiZml0IiwgInRpbWVzdGVwIiwgIndpbmQiLCAibGF5b3V0RmFpbGVkIiwgImluaXRQaHlzaWNzIiwgInN0b3BTaW11bGF0aW9uIiwgInN0YXJ0U2ltdWxhdGlvbiIsICJ1cGRhdGVQaHlzaWNzRGF0YSIsICJub2Rlc1NvbHZlciIsICJlZGdlc1NvbHZlciIsICJncmF2aXR5U29sdmVyIiwgIlJlcHVsc2lvbiIsICJIaWVyYXJjaGljYWxSZXB1bHNpb24iLCAibW9kZWxPcHRpb25zIiwgInN0YWJpbGl6ZSIsICJ2aWV3RnVuY3Rpb24iLCAic2ltdWxhdGlvblN0ZXAiLCAiX2VtaXRTdGFiaWxpemVkIiwgInN0YXJ0VGltZSIsICJfRGF0ZSRub3ciLCAicGh5c2ljc1RpY2siLCAicnVuRG91YmxlU3BlZWQiLCAiYW1vdW50T2ZJdGVyYXRpb25zIiwgInNvbHZlIiwgIm1vdmVOb2RlcyIsICJfZXZhbHVhdGVTdGVwUXVhbGl0eSIsICJfc3RhcnRTdGFiaWxpemluZyIsICJwaHlzaWNzU3RlcCIsICJyZXZlcnQiLCAiYWRqdXN0VGltZVN0ZXAiLCAibm9kZUlkcyIsICJwb3NpdGlvbnMiLCAidngiLCAidnkiLCAicmVmZXJlbmNlIiwgIm1heE5vZGVWZWxvY2l0eSIsICJhdmVyYWdlTm9kZVZlbG9jaXR5IiwgIm5vZGVWZWxvY2l0eSIsICJfcGVyZm9ybVN0ZXAiLCAibSIsICJtYXhWIiwgImNhbGN1bGF0ZUNvbXBvbmVudFZlbG9jaXR5IiwgInRhcmdldEl0ZXJhdGlvbnMiLCAiX2ZyZWV6ZU5vZGVzIiwgIl9zdGFiaWxpemF0aW9uQmF0Y2giLCAicnVubmluZyIsICJzZW5kUHJvZ3Jlc3MiLCAiX2ZpbmFsaXplU3RhYmlsaXphdGlvbiIsICJfcmVzdG9yZUZyb3plbk5vZGVzIiwgImZvcmNlU2l6ZSIsICJhcnJvd1NpemUiLCAiSFNWVG9IZXgiLCAiZ2V0UmFuZG9tVmFsdWVzIiwgInJuZHM4IiwgIlVpbnQ4QXJyYXkiLCAicm5nIiwgImNyeXB0byIsICJieXRlVG9IZXgiLCAibmF0aXZlIiwgInJhbmRvbVVVSUQiLCAidjQiLCAiYnVmIiwgInJuZHMiLCAiTmV0d29ya1V0aWwiLCAiYWxsTm9kZXMiLCAic3BlY2lmaWNOb2RlcyIsICJjbG9uZWRPcHRpb25zIiwgImFtb3VudE9mQ29ubmVjdGlvbnMiLCAiQ2x1c3RlciIsICJfTm9kZSIsICJjb250YWluZWROb2RlcyIsICJjb250YWluZWRFZGdlcyIsICJjaGlsZENsdXN0ZXJJZCIsICJjaGlsZENsdXN0ZXIiLCAiY2x1c3RlckVkZ2UiLCAicGFyZW50Q2x1c3RlckVkZ2UiLCAiY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMiLCAic3JjSWQiLCAiZWRnZVJlcGxhY2VkQnlJZCIsICJDbHVzdGVyRW5naW5lIiwgImNsdXN0ZXJlZE5vZGVzIiwgImNsdXN0ZXJlZEVkZ2VzIiwgImh1YnNpemUiLCAiX2dldEh1YlNpemUiLCAiX2NoZWNrT3B0aW9ucyIsICJub2Rlc1RvQ2x1c3RlciIsICJjbHVzdGVyQnlDb25uZWN0aW9uIiwgInJlZnJlc2hEYXRhIiwgImpvaW5Db25kaXRpb24iLCAiY2hpbGROb2Rlc09iaiIsICJjaGlsZEVkZ2VzT2JqIiwgIl9jbHVzdGVyIiwgImVkZ2VDb3VudCIsICJyZWxldmFudEVkZ2VDb3VudCIsICJjbHVzdGVycyIsICJ1c2VkTm9kZXMiLCAiY2hlY2tKb2luQ29uZGl0aW9uIiwgImNsb25lT3B0aW9ucyIsICJnYXRoZXJpbmdTdWNjZXNzZnVsIiwgImNoaWxkTm9kZUlkIiwgIl9nZXRDb25uZWN0ZWRJZCIsICJmb3VuZENsdXN0ZXIiLCAiZmluZENsdXN0ZXJEYXRhIiwgImNsdXN0ZXJCeUVkZ2VDb3VudCIsICJjbHVzdGVyTm9kZVByb3BlcnRpZXMiLCAicGFyZW50Tm9kZUlkIiwgInBhcmVudENsb25lZE9wdGlvbnMiLCAiY2hpbGRDbG9uZWRPcHRpb25zIiwgImNoaWxkTm9kZUlEcyIsICJjaGlsZE5vZGUiLCAiY2hpbGROb2RlS2V5IiwgImNoaWxkRWRnZSIsICJjbHVzdGVyRWRnZVByb3BlcnRpZXMiLCAib3RoZXJOb2RlSWQiLCAiY2hpbGRLZXlzIiwgImNyZWF0ZUVkZ2VzIiwgIm5ld0VkZ2VzIiwgImdldE5ld0VkZ2UiLCAiY3JlYXRlZEVkZ2UiLCAibmV3RWRnZSIsICJtYXRjaFRvRGlyZWN0aW9uIiwgIm1hdGNoRnJvbURpcmVjdGlvbiIsICJfY3JlYXRlQ2x1c3RlcmVkRWRnZSIsICJfYmFja3VwRWRnZU9wdGlvbnMiLCAidG1wTm9kZXNUb1JlbW92ZSIsICJhbGxvd1NpbmdsZU5vZGVDbHVzdGVyIiwgInByb2Nlc3NQcm9wZXJ0aWVzIiwgImNoaWxkTm9kZXNPcHRpb25zIiwgImNoaWxkRWRnZXNPcHRpb25zIiwgImNsdXN0ZXJJZCIsICJfZ2V0Q2x1c3RlclBvc2l0aW9uIiwgImNsdXN0ZXJOb2RlIiwgIl9jbHVzdGVyRWRnZXMiLCAib3JpZ2luYWxPcHRpb25zIiwgImNsdXN0ZXJOb2RlSWQiLCAiZmluZE5vZGUiLCAicGFyZW50SW5kZXgiLCAicGFyZW50Q2x1c3Rlck5vZGVJZCIsICJfb3BlbkNoaWxkQ2x1c3RlciIsICJyZWxlYXNlRnVuY3Rpb24iLCAiY2x1c3RlclBvc2l0aW9uIiwgIm5ld1Bvc2l0aW9ucyIsICJlZGdlc1RvQmVEZWxldGVkIiwgIm90aGVyTm9kZSIsICJ0cmFuc2ZlcklkIiwgInRyYW5zZmVyRWRnZSIsICJvdGhlckNsdXN0ZXIiLCAiX3Jlc3RvcmVFZGdlIiwgIm5vZGVzQXJyYXkiLCAiY291bnRlciIsICJfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkiLCAiY2x1c3RlcmVkTm9kZUlkIiwgInN0YXJ0RWRnZUlkIiwgImFsbEVkZ2VJZHMiLCAiZ2V0Q2x1c3RlcmVkRWRnZXMiLCAiY2x1c3RlcmVkRWRnZUlkIiwgImdldEJhc2VFZGdlcyIsICJJZHNUb0hhbmRsZSIsICJkb25lSWRzIiwgImZvdW5kSWRzIiwgIm5leHRJZCIsICJuZXh0RWRnZSIsICJyZXBsYWNpbmdJZHMiLCAicmVwbGFjaW5nSWQiLCAiYXZlcmFnZSIsICJhdmVyYWdlU3F1YXJlZCIsICJodWJDb3VudGVyIiwgImxhcmdlc3RIdWIiLCAidmFyaWFuY2UiLCAic3RhbmRhcmREZXZpYXRpb24iLCAiaHViVGhyZXNob2xkIiwgImJhc2VFZGdlIiwgImV4dHJhT3B0aW9ucyIsICJjaGlsZE5vZGVzIiwgImNoaWxkRWRnZXMiLCAiX2NyZWF0ZUNsdXN0ZXJFZGdlcyIsICJjbHVzdGVyZWROb2RlIiwgImRlbGV0ZWROb2RlSWRzIiwgImRlbGV0ZWRFZGdlSWRzIiwgImVhY2hDbHVzdGVyTm9kZSIsICJlbmRQb2ludHNWYWxpZCIsICJyZXBsYWNlZElkcyIsICJudW1WYWxpZCIsICJjb250YWluZWRFZGdlSWQiLCAiY29udGFpbmVkRWRnZSIsICJkZWxldGVkRWRnZUlkIiwgIl9maWx0ZXIiLCAic2hvdWxkQmVDbHVzdGVyZWQiLCAiX2lzQ2x1c3RlcmVkTm9kZSIsICJfaXNDbHVzdGVyZWRFZGdlIiwgImNsdXN0ZXJGcm9tIiwgIl9nZXRDbHVzdGVyTm9kZUZvck5vZGUiLCAiY2x1c3RlclRvIiwgImNvbnRpbnVlTG9vcCIsICJfbG9vcDIiLCAiY2x1c3RlcnNUb09wZW4iLCAibnVtTm9kZXMiLCAiYWxsb3dTaW5nbGUiLCAib3BlbkNsdXN0ZXIiLCAiX3VwZGF0ZVN0YXRlIiwgIkNhbnZhc1JlbmRlcmVyIiwgInJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJtb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAid2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgIm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgInJlZHJhd1JlcXVlc3RlZCIsICJyZW5kZXJpbmdBY3RpdmUiLCAicmVuZGVyUmVxdWVzdHMiLCAiYWxsb3dSZWRyYXciLCAiZHJhZ2dpbmciLCAiem9vbWluZyIsICJoaWRlRWRnZXNPbkRyYWciLCAiaGlkZUVkZ2VzT25ab29tIiwgImhpZGVOb2Rlc09uRHJhZyIsICJfZGV0ZXJtaW5lQnJvd3Nlck1ldGhvZCIsICJ6b29tVGltZW91dElkIiwgIl9yZXF1ZXN0UmVkcmF3IiwgIl9yZXNpemVOb2RlcyIsICJfcmVkcmF3IiwgIl9zdGFydFJlbmRlcmluZyIsICJjYW5jZWxBbmltYXRpb25GcmFtZSIsICJkZWxheSIsICJ0aW1lciIsICJteVdpbmRvdyIsICJfcmVxdWVzdE5leHRGcmFtZSIsICJfcmVuZGVyU3RlcCIsICJkcmF3RXh0ZXJuYWxMYWJlbHMiLCAiZnJhbWUiLCAic2V0U2l6ZSIsICJzZXRUcmFuc2Zvcm0iLCAiY2xpZW50V2lkdGgiLCAiY2xpZW50SGVpZ2h0IiwgImNsZWFyUmVjdCIsICJ0cmFuc2xhdGlvbiIsICJfZHJhd0VkZ2VzIiwgIl9kcmF3Tm9kZXMiLCAiX2RyYXdBcnJvd3MiLCAiX2RyYXdTZWxlY3Rpb25Cb3giLCAiYWx3YXlzU2hvdyIsICJob3ZlcmVkIiwgInRvcExlZnQiLCAiRE9NdG9DYW52YXMiLCAiYm90dG9tUmlnaHQiLCAidmlld2FibGVBcmVhIiwgImlzU2VsZWN0ZWQiLCAiaXNCb3VuZGluZ0JveE92ZXJsYXBwaW5nV2l0aCIsICJzZWxlY3RlZExlbmd0aCIsICJob3ZlcmVkTGVuZ3RoIiwgIl9pMiIsICJfZHJhd0V4dGVybmFsTGFiZWxzMiIsICJkcmF3QXJyb3dzIiwgImJyb3dzZXJUeXBlIiwgInNlbGVjdGlvbkJveCIsICJzaG93IiwgIm9uVG91Y2giLCAiaGFtbWVyIiwgIm9uUmVsZWFzZSIsICJDYW52YXMiLCAicGl4ZWxSYXRpbyIsICJjYW1lcmFTdGF0ZSIsICJjYW52YXNWaWV3Q2VudGVyIiwgIl9jbGVhbnVwQ2FsbGJhY2tzIiwgImF1dG9SZXNpemUiLCAiaGFtbWVyRnJhbWUiLCAiX2NsZWFuVXAiLCAiUmVzaXplT2JzZXJ2ZXIiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZSIsICJ1bm9ic2VydmUiLCAicmVzaXplVGltZXIiLCAiX3NldEludGVydmFsIiwgImNsZWFySW50ZXJ2YWwiLCAicmVzaXplRnVuY3Rpb24iLCAiX29uUmVzaXplIiwgInByZXZpb3VzV2lkdGgiLCAicHJldmlvdXNIZWlnaHQiLCAid2lkdGhSYXRpbyIsICJoZWlnaHRSYXRpbyIsICJuZXdTY2FsZSIsICJjdXJyZW50Vmlld0NlbnRlciIsICJkaXN0YW5jZUZyb21DZW50ZXIiLCAiY29udGFpbmVyIiwgImhhc0NoaWxkTm9kZXMiLCAiZmlyc3RDaGlsZCIsICJjbGFzc05hbWUiLCAib3ZlcmZsb3ciLCAidGFiSW5kZXgiLCAiX3NldFBpeGVsUmF0aW8iLCAibm9DYW52YXMiLCAiZm9udFdlaWdodCIsICJwYWRkaW5nIiwgImlubmVyVGV4dCIsICJfYmluZEhhbW1lciIsICJkcmFnIiwgInBpbmNoIiwgImV2ZW50TGlzdGVuZXJzIiwgIm9uVGFwIiwgIm9uRG91YmxlVGFwIiwgIm9uSG9sZCIsICJvbkRyYWdTdGFydCIsICJvbkRyYWciLCAib25EcmFnRW5kIiwgIm9uUGluY2giLCAib25Nb3VzZVdoZWVsIiwgIm9uTW91c2VNb3ZlIiwgIm9uQ29udGV4dCIsICJfcHJlcGFyZVZhbHVlIiwgImVtaXRFdmVudCIsICJvbGRXaWR0aCIsICJvbGRIZWlnaHQiLCAicHJldmlvdXNSYXRpbyIsICJfZ2V0Q2FtZXJhU3RhdGUiLCAibmV3V2lkdGgiLCAibmV3SGVpZ2h0IiwgIl9zZXRDYW1lcmFTdGF0ZSIsICJudW1lcmF0b3IiLCAiZGV2aWNlUGl4ZWxSYXRpbyIsICJ3ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIiwgIm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8iLCAibXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIiwgIm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIiwgImJhY2tpbmdTdG9yZVBpeGVsUmF0aW8iLCAiX2RldGVybWluZVBpeGVsUmF0aW8iLCAiX1hjb252ZXJ0Q2FudmFzVG9ET00iLCAiX1ljb252ZXJ0Q2FudmFzVG9ET00iLCAiX1hjb252ZXJ0RE9NdG9DYW52YXMiLCAiX1ljb252ZXJ0RE9NdG9DYW52YXMiLCAiVmlldyIsICJhbmltYXRpb25TcGVlZCIsICJyZW5kZXJSZWZyZXNoUmF0ZSIsICJhbmltYXRpb25FYXNpbmdGdW5jdGlvbiIsICJlYXNpbmdUaW1lIiwgInNvdXJjZVNjYWxlIiwgInRhcmdldFNjYWxlIiwgInNvdXJjZVRyYW5zbGF0aW9uIiwgInRhcmdldFRyYW5zbGF0aW9uIiwgImxvY2tlZE9uTm9kZUlkIiwgImxvY2tlZE9uTm9kZU9mZnNldCIsICJ0b3VjaFRpbWUiLCAicmVsZWFzZU5vZGUiLCAiaW5pdGlhbFpvb20iLCAicmF3T3B0aW9ucyIsICJhbGxOb2RlSWRzIiwgIm1pblpvb21MZXZlbCIsICJNSU5fVkFMVUUiLCAibWF4Wm9vbUxldmVsIiwgInpvb21MZXZlbCIsICJjYW52YXNXaWR0aCIsICJjYW52YXNIZWlnaHQiLCAiZ2V0UmFuZ2UiLCAicG9zaXRpb25EZWZpbmVkIiwgInhab29tTGV2ZWwiLCAieVpvb21MZXZlbCIsICJhbmltYXRpb25PcHRpb25zIiwgImZpbmRDZW50ZXIiLCAiYW5pbWF0aW9uIiwgIm5vZGVQb3NpdGlvbiIsICJsb2NrZWRPbk5vZGUiLCAiZ2V0Vmlld1Bvc2l0aW9uIiwgImR1cmF0aW9uIiwgImVhc2luZ0Z1bmN0aW9uIiwgImFuaW1hdGVWaWV3IiwgImxvY2tlZCIsICJfdHJhbnNpdGlvblJlZHJhdyIsICJ2aWV3Q2VudGVyIiwgIl9sb2NrZWRSZWRyYXciLCAiZmluaXNoZWQiLCAicHJvZ3Jlc3MiLCAiZWFzaW5nRnVuY3Rpb25zIiwgImtleWNoYXJtIiwgIl9leHBvcnRGdW5jdGlvbnMiLCAiX2JvdW5kIiwgImtleWRvd24iLCAia2V5dXAiLCAiX2tleXMiLCAiZnJvbUNoYXJDb2RlIiwgImRvd24iLCAiaGFuZGxlRXZlbnQiLCAidXAiLCAia2V5Q29kZSIsICJib3VuZCIsICJzaGlmdEtleSIsICJiaW5kQWxsIiwgImdldEtleSIsICJ1bmJpbmQiLCAibmV3QmluZGluZ3MiLCAiTmF2aWdhdGlvbkhhbmRsZXIiLCAiaWNvbnNDcmVhdGVkIiwgIm5hdmlnYXRpb25IYW1tZXJzIiwgImJvdW5kRnVuY3Rpb25zIiwgImFjdGl2YXRlZCIsICJjb25maWd1cmVLZXlib2FyZEJpbmRpbmdzIiwgIm5hdmlnYXRpb25CdXR0b25zIiwgImxvYWROYXZpZ2F0aW9uRWxlbWVudHMiLCAiY2xlYW5OYXZpZ2F0aW9uIiwgIm5hdmlnYXRpb25ET00iLCAibmF2aWdhdGlvbkRpdnMiLCAibmF2aWdhdGlvbkRpdkFjdGlvbnMiLCAiX2ZpdCIsICJiaW5kVG9SZWRyYXciLCAiX3N0b3BNb3ZlbWVudCIsICJhY3Rpb24iLCAiYm91bmRBY3Rpb24iLCAia2V5Ym9hcmQiLCAic3BlZWQiLCAic2NhbGVPbGQiLCAiem9vbSIsICJzY2FsZUZyYWMiLCAidHgiLCAidHkiLCAicG9pbnRlciIsICJfY29udGV4dDYiLCAiX2NvbnRleHQ3IiwgIl9jb250ZXh0OCIsICJfY29udGV4dDkiLCAiX2NvbnRleHQxMCIsICJfY29udGV4dDExIiwgIl9jb250ZXh0MTIiLCAiX2NvbnRleHQxMyIsICJfY29udGV4dDE0IiwgIl9jb250ZXh0MTUiLCAiX2NvbnRleHQxNiIsICJfY29udGV4dDE3IiwgIl9jb250ZXh0MTgiLCAiX2NvbnRleHQxOSIsICJfY29udGV4dDIwIiwgIl9jb250ZXh0MjEiLCAiX2NvbnRleHQyMiIsICJfY29udGV4dDIzIiwgIl9jb250ZXh0MjQiLCAiX2NvbnRleHQyNSIsICJfY29udGV4dDI2IiwgIl9jb250ZXh0MjciLCAiYmluZFRvV2luZG93IiwgInVuYmluZEZyb21SZWRyYXciLCAiSW50ZXJhY3Rpb25IYW5kbGVyIiwgInNlbGVjdGlvbkhhbmRsZXIiLCAibmF2aWdhdGlvbkhhbmRsZXIiLCAicG9wdXAiLCAicG9wdXBPYmoiLCAicG9wdXBUaW1lciIsICJnZXRQb2ludGVyIiwgImRyYWdOb2RlcyIsICJkcmFnVmlldyIsICJhdXRvRm9jdXMiLCAidG9vbHRpcERlbGF5IiwgInpvb21WaWV3IiwgInpvb21TcGVlZCIsICJnZXRBYnNvbHV0ZVRvcCIsICJwaW5jaGVkIiwgIm11bHRpc2VsZWN0IiwgImN0cmxLZXkiLCAibWV0YUtleSIsICJjaGVja1NlbGVjdGlvbkNoYW5nZXMiLCAiY29tbWl0QW5kRW1pdCIsICJnZW5lcmF0ZUNsaWNrRXZlbnQiLCAic2VsZWN0QWRkaXRpb25hbE9uUG9pbnQiLCAic2VsZWN0T25Qb2ludCIsICJmaXJzdFNldCIsICJzZWNvbmRTZXQiLCAiYXJyYXlEaWZmIiwgImZpcnN0QXJyIiwgInNlY29uZEFyciIsICJnZXROb2RlQXQiLCAic2VsZWN0aW9uIiwgInNldFNlbGVjdGlvbiIsICJnZXRTZWxlY3RlZE5vZGVzIiwgInhGaXhlZCIsICJ5Rml4ZWQiLCAiZGlmZlgiLCAiZGlmZlkiLCAic2VsZWN0aW9uQm94UG9zaXRpb24iLCAic2VsZWN0aW9uQm94UG9zaXRpb25NaW5NYXgiLCAidG9CZVNlbGVjdGVkTm9kZXMiLCAic2VsZWN0T2JqZWN0IiwgInByZVNjYWxlRHJhZ1BvaW50ZXIiLCAicG9zdFNjYWxlRHJhZ1BvaW50ZXIiLCAiY2FudmFzVG9ET00iLCAicG9wdXBWaXNpYmxlIiwgIl9jaGVja0hpZGVQb3B1cCIsICJzZXRQb3NpdGlvbiIsICJmb2N1cyIsICJfY2hlY2tTaG93UG9wdXAiLCAiaG92ZXJPYmplY3QiLCAicG9pbnRlck9iaiIsICJwcmV2aW91c1BvcHVwT2JqSWQiLCAibm9kZVVuZGVyQ3Vyc29yIiwgInBvcHVwVHlwZSIsICJvdmVybGFwcGluZ05vZGVzIiwgImdldFRpdGxlIiwgIm92ZXJsYXBwaW5nRWRnZXMiLCAiUG9wdXAiLCAicG9wdXBUYXJnZXRUeXBlIiwgInBvcHVwVGFyZ2V0SWQiLCAic2V0VGV4dCIsICJoaWRlIiwgIl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdCIsICJzdGlsbE9uT2JqIiwgIm92ZXJOb2RlIiwgIlNldCIsICJ1bmNhdWdodEZyb3plblN0b3JlIiwgImZyb3plbiIsICJVbmNhdWdodEZyb3plblN0b3JlIiwgImZpbmRVbmNhdWdodEZyb3plbiIsICJJbnRlcm5hbFdlYWtNYXAiLCAiY29sbGVjdGlvbldlYWsiLCAiZW5mb3JjZUludGVybmFsU3RhdGUiLCAiaXNGcm96ZW4iLCAiaXNTZWFsZWQiLCAiZnJlZXplIiwgInNlYWwiLCAiRlJPWkVOIiwgIlNFQUxFRCIsICJJU19JRTExIiwgIiRXZWFrTWFwIiwgIldlYWtNYXBQcm90b3R5cGUiLCAibmF0aXZlU2V0IiwgIm5hdGl2ZURlbGV0ZSIsICJuYXRpdmVIYXMiLCAibmF0aXZlR2V0IiwgImZyb3plbkFycmF5IiwgImFycmF5SW50ZWdyaXR5TGV2ZWwiLCAiZGlmZlNldHMiLCAiZGlmZiIsICJfU2V0IiwgIlNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvciIsICJfU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yX3ByZXZpb3VzU2VsZWN0aW9uIiwgIl9TaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3Jfc2VsZWN0aW9uIiwgIl9fY2xhc3NQcml2YXRlRmllbGRHZXQiLCAiX2l0ZW1zIiwgIl9sZW4yIiwgIl9rZXkyIiwgIl9pdGVtczIiLCAiYWRkZWQiLCAiZGVsZXRlZCIsICJjaGFuZ2VzIiwgImdldENoYW5nZXMiLCAiX19jbGFzc1ByaXZhdGVGaWVsZFNldCIsICJfc3RlcDIiLCAiX2l0ZXJhdG9yMiIsICJzZWxlY3QiLCAiX3N0ZXAzIiwgIl9pdGVyYXRvcjMiLCAidW5zZWxlY3QiLCAiU2VsZWN0aW9uQWNjdW11bGF0b3IiLCAiY29tbWl0SGFuZGxlciIsICJfU2VsZWN0aW9uQWNjdW11bGF0b3Jfbm9kZXMiLCAiX1NlbGVjdGlvbkFjY3VtdWxhdG9yX2VkZ2VzIiwgIl9TZWxlY3Rpb25BY2N1bXVsYXRvcl9jb21taXRIYW5kbGVyIiwgImdldFNlbGVjdGlvbiIsICJfY2xhc3NQcml2YXRlRmllbGRHZSIsICJfY2xhc3NQcml2YXRlRmllbGRHZTIiLCAiX2NsYXNzUHJpdmF0ZUZpZWxkR2UzIiwgInN1bW1hcnkiLCAiY29tbWl0IiwgIl9sZW4zIiwgInJlc3QiLCAiX2tleTMiLCAiX2NvbmNhdEluc3RhbmNlUHJvcGVydHkiLCAiU2VsZWN0aW9uSGFuZGxlciIsICJfc2VsZWN0aW9uQWNjdW11bGF0b3IiLCAiaG92ZXJPYmoiLCAic2VsZWN0YWJsZSIsICJzZWxlY3RDb25uZWN0ZWRFZGdlcyIsICJob3ZlckNvbm5lY3RlZEVkZ2VzIiwgInVwZGF0ZVNlbGVjdGlvbiIsICJnZXRFZGdlQXQiLCAidW5zZWxlY3RBbGwiLCAic2VsZWN0aW9uQ2hhbmdlZCIsICJkZXNlbGVjdE9iamVjdCIsICJET00iLCAib2xkU2VsZWN0aW9uIiwgImVtcHR5U2VsZWN0aW9uIiwgIl9pbml0QmFzZUV2ZW50IiwgImdldENsaWNrZWRJdGVtcyIsICJjb250cm9sRWRnZSIsICJoaWdobGlnaHRFZGdlcyIsICJfdGhpcyRfc2VsZWN0aW9uQWNjdW0iLCAiYWRkRWRnZXMiLCAiYWRkTm9kZXMiLCAiX3JlbW92ZUZyb21TZWxlY3Rpb24iLCAiY2FudmFzUG9zIiwgInJldHVybk5vZGUiLCAicG9zaXRpb25PYmplY3QiLCAiX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoIiwgIl9nZXRFZGdlc092ZXJsYXBwaW5nV2l0aCIsICJyZXR1cm5FZGdlIiwgIm1pbmRpc3QiLCAib3ZlcmxhcHBpbmdFZGdlIiwgImRpc3QiLCAiX3RoaXMkX3NlbGVjdGlvbkFjY3VtMiIsICJkZWxldGVOb2RlcyIsICJkZWxldGVFZGdlcyIsICJzaXplTm9kZXMiLCAic2l6ZUVkZ2VzIiwgIl9hZGRUb0hvdmVyIiwgImhvdmVyQ2hhbmdlZCIsICJlbWl0Qmx1ckV2ZW50IiwgImhvdmVyZWRFZGdlc0NvdW50IiwgImhvdmVyZWROb2Rlc0NvdW50IiwgImVtaXRIb3ZlckV2ZW50IiwgIl9ob3ZlckNvbm5lY3RlZEVkZ2VzIiwgInNlbGVjdGlvbkNoYW5nZXMiLCAicHJldmlvdXNTZWxlY3Rpb24iLCAiZ2V0U2VsZWN0ZWROb2RlSWRzIiwgImdldFNlbGVjdGVkRWRnZUlkcyIsICJnZXROb2RlcyIsICJnZXRFZGdlcyIsICJnZXRJdGVtc09uUG9pbnQiLCAibWVyZ2VTb3J0IiwgImNvbXBhcmVmbiIsICJpbnNlcnRpb25Tb3J0IiwgImxsZW5ndGgiLCAicmxlbmd0aCIsICJsaW5kZXgiLCAicmluZGV4IiwgImFycmF5U29ydCIsICJmaXJlZm94IiwgImVuZ2luZUZmVmVyc2lvbiIsICJlbmdpbmVJc0llT3JFZGdlIiwgIndlYmtpdCIsICJlbmdpbmVXZWJraXRWZXJzaW9uIiwgImludGVybmFsU29ydCIsICJGRiIsICJJRV9PUl9FREdFIiwgIlY4IiwgIldFQktJVCIsICJuYXRpdmVTb3J0IiwgIkZBSUxTX09OX1VOREVGSU5FRCIsICJGQUlMU19PTl9OVUxMIiwgIlNUUklDVF9NRVRIT0QiLCAiU1RBQkxFX1NPUlQiLCAiaXRlbXNMZW5ndGgiLCAiYXJyYXlMZW5ndGgiLCAiSVNfUklHSFQiLCAibWVtbyIsICJhcnJheVJlZHVjZSIsICJlbmdpbmVJc05vZGUiLCAiJHJlZHVjZSIsICJyZWR1Y2UiLCAiRGlyZWN0aW9uSW50ZXJmYWNlIiwgImFic3RyYWN0IiwgImZha2VfdXNlIiwgIm5vZGVBcnJheSIsICJWZXJ0aWNhbFN0cmF0ZWd5IiwgIl9EaXJlY3Rpb25JbnRlcmZhY2UiLCAibGF5b3V0IiwgImhpZXJhcmNoaWNhbCIsICJhZGRUb09yZGVyaW5nIiwgImdldFRyZWVTaXplIiwgIm1pbl94IiwgIm1heF94IiwgIl9zb3J0SW5zdGFuY2VQcm9wZXJ0eSIsICJsZXZlbFNlcGFyYXRpb24iLCAiSG9yaXpvbnRhbFN0cmF0ZWd5IiwgIl9EaXJlY3Rpb25JbnRlcmZhY2UyIiwgIm1pbl95IiwgIm1heF95IiwgIiRldmVyeSIsICJmaWxsTGV2ZWxzQnlEaXJlY3Rpb25DeWNsaWMiLCAibGV2ZWxzIiwgImZpbGxMZXZlbHNCeURpcmVjdGlvbiIsICJpc0VudHJ5Tm9kZSIsICJzaG91bGRMZXZlbEJlUmVwbGFjZWQiLCAibGltaXQiLCAiX3JlZHVjZUluc3RhbmNlUHJvcGVydHkiLCAiYWNjIiwgImVkZ2VJZFByb3AiLCAibmV3TGV2ZWxEaWZmIiwgIl9yZXQiLCAiX3N0ZXAkdmFsdWUiLCAiZW50cnlOb2RlSWQiLCAiZW50cnlOb2RlIiwgIl9yZXQyIiwgIm5ld0xldmVsIiwgInRhcmdldE5vZGVJZCIsICJvbGRMZXZlbCIsICJIaWVyYXJjaGljYWxTdGF0dXMiLCAiY2hpbGRyZW5SZWZlcmVuY2UiLCAicGFyZW50UmVmZXJlbmNlIiwgInRyZWVzIiwgImRpc3RyaWJ1dGlvbk9yZGVyaW5nIiwgImRpc3RyaWJ1dGlvbkluZGV4IiwgImlzVHJlZSIsICJ0cmVlSW5kZXgiLCAidHJlZUlkIiwgImFjY3VtdWxhdG9yIiwgIl9nZXRNYXhMZXZlbCIsICJub2RlQSIsICJub2RlQiIsICJtaW5MZXZlbCIsICJwYXJlbnRzMSIsICJwYXJlbnRzMiIsICJpc1ByZXNlbnQiLCAiY3VyTGV2ZWwiLCAiTGF5b3V0RW5naW5lIiwgIl9yZXNldFJORyIsICJzZXRQaHlzaWNzIiwgIm9wdGlvbnNCYWNrdXAiLCAicmFuZG9tU2VlZCIsICJpbXByb3ZlZExheW91dCIsICJjbHVzdGVyVGhyZXNob2xkIiwgIm5vZGVTcGFjaW5nIiwgInRyZWVTcGFjaW5nIiwgImJsb2NrU2hpZnRpbmciLCAiZWRnZU1pbmltaXphdGlvbiIsICJwYXJlbnRDZW50cmFsaXphdGlvbiIsICJzb3J0TWV0aG9kIiwgInNldHVwSGllcmFyY2hpY2FsTGF5b3V0IiwgImxheW91dE5ldHdvcmsiLCAiY3VydmVUeXBlIiwgImFsbE9wdGlvbnMiLCAicHJldkhpZXJhcmNoaWNhbFN0YXRlIiwgInNldERpcmVjdGlvblN0cmF0ZWd5IiwgImFkYXB0QWxsT3B0aW9uc0ZvckhpZXJhcmNoaWNhbExheW91dCIsICJzZWVkIiwgImluaXRpYWxSYW5kb21TZWVkIiwgImJhY2t1cFBoeXNpY3MiLCAiaW5kaWNlcyIsICJjbHVzdGVyT3B0aW9ucyIsICJzdGFydExlbmd0aCIsICJiZWZvcmUiLCAibW9kdWxlcyIsICJjbHVzdGVyaW5nIiwgImNsdXN0ZXJCcmlkZ2VzIiwgImNsdXN0ZXJPdXRsaWVycyIsICJfZGVjbHVzdGVyQWxsIiwgImluZm8iLCAia2FtYWRhS2F3YWkiLCAiX3NoaWZ0VG9DZW50ZXIiLCAiZ2V0UmFuZ2VDb3JlIiwgImNsdXN0ZXJzUHJlc2VudCIsICJkZWZpbmVkTGV2ZWwiLCAidW5kZWZpbmVkTGV2ZWwiLCAibGFzdE5vZGVPbkxldmVsIiwgIl9kZXRlcm1pbmVMZXZlbHNCeUh1YnNpemUiLCAiX2RldGVybWluZUxldmVsc0RpcmVjdGVkIiwgIl9kZXRlcm1pbmVMZXZlbHNDdXN0b21DYWxsYmFjayIsICJlbnN1cmVMZXZlbCIsICJkaXN0cmlidXRpb24iLCAiX2dldERpc3RyaWJ1dGlvbiIsICJfZ2VuZXJhdGVNYXAiLCAiX3BsYWNlTm9kZXNCeUhpZXJhcmNoeSIsICJfY29uZGVuc2VIaWVyYXJjaHkiLCAic3RpbGxTaGlmdGluZyIsICJicmFuY2hlcyIsICJzaGlmdFRyZWUiLCAiZ2V0VHJlZVNpemVzIiwgInRyZWVXaWR0aHMiLCAibnVtVHJlZXMiLCAiZ2V0QnJhbmNoTm9kZXMiLCAiZ2V0QnJhbmNoQm91bmRhcnkiLCAiYnJhbmNoTWFwIiwgIm1heExldmVsIiwgIm1pblNwYWNlIiwgIm1heFNwYWNlIiwgImJyYW5jaE5vZGUiLCAiZ2V0UG9zaXRpb24iLCAiX3RoaXMzJF9nZXRTcGFjZUFyb3VuMiIsICJfZ2V0U3BhY2VBcm91bmROb2RlIiwgIm1pblNwYWNlTm9kZSIsICJtYXhTcGFjZU5vZGUiLCAic2hpZnRFbGVtZW50c0Nsb3NlciIsICJjZW50ZXJQYXJlbnRzIiwgImhpZXIiLCAibGV2ZWxOb2RlcyIsICJoYXNTYW1lUGFyZW50IiwgImluU2FtZVN1Yk5ldHdvcmsiLCAiYnJhbmNoU2hpZnRDYWxsYmFjayIsICJjZW50ZXJQYXJlbnQiLCAicG9zMSIsICJwb3MyIiwgImRpZmZBYnMiLCAiYnJhbmNoTm9kZXMxIiwgImJyYW5jaE5vZGVzMiIsICJtYXhMZXZlbDEiLCAiZ2V0TWF4TGV2ZWwiLCAibWF4TGV2ZWwyIiwgImJyYW5jaE5vZGVCb3VuZGFyeTEiLCAiYnJhbmNoTm9kZUJvdW5kYXJ5MiIsICJtYXgxIiwgIm1pbjIiLCAibWluU3BhY2UyIiwgIl9zaGlmdEJsb2NrIiwgIl9jZW50ZXJQYXJlbnQiLCAibWluaW1pemVFZGdlTGVuZ3RoIiwgImFsbEVkZ2VzIiwgIm5vZGVMZXZlbCIsICJDMiIsICJyZWZlcmVuY2VOb2RlcyIsICJhYm92ZUVkZ2VzIiwgImdldEZ4IiwgImdldERGeCIsICJnZXRHdWVzcyIsICJndWVzcyIsICJndWVzc01hcCIsICJkZngiLCAiYnJhbmNoTm9kZXMiLCAiYnJhbmNoQm91bmRhcnkiLCAibWluU3BhY2VCcmFuY2giLCAibWF4U3BhY2VCcmFuY2giLCAiYnJhbmNoT2Zmc2V0IiwgIl90aGlzMyRfZ2V0U3BhY2VBcm91bjQiLCAibmV3UG9zaXRpb24iLCAiZ2V0TGV2ZWxzIiwgImNlbnRlckFsbFBhcmVudHMiLCAiY2VudGVyQWxsUGFyZW50c0JvdHRvbVVwIiwgInRyZWVTaXplcyIsICJzaGlmdEJ5IiwgInNoaWZ0VHJlZXMiLCAidXNlTWFwIiwgIm9yZGVyaW5nIiwgInByZXZOb2RlIiwgIm5leHROb2RlIiwgIm5leHRQb3MiLCAicGFyZW50cyIsICJwYXJlbnRJZCIsICJfZ2V0Q2VudGVyUG9zaXRpb24iLCAiX3RoaXMkX2dldFNwYWNlQXJvdW5kMiIsICJwb3NpdGlvbmVkTm9kZXMiLCAiX2luZGV4QXJyYXlUb05vZGVzIiwgImhhbmRsZWROb2RlQ291bnQiLCAiX3ZhbGlkYXRlUG9zaXRpb25BbmRDb250aW51ZSIsICJwYXJlbnRMZXZlbCIsICJjaGlsZFJlZiIsICJjaGlsZE5vZGVMZXZlbCIsICJwcmV2aW91c1BvcyIsICJzaGFyZWRQYXJlbnQiLCAiX2ZpbmRDb21tb25QYXJlbnQiLCAid2l0aENoaWxkIiwgIl9wbGFjZUJyYW5jaE5vZGVzIiwgImlkQXJyYXkiLCAiZml4IiwgImh1YlNpemVzIiwgImh1YlNpemUiLCAiX2dldEFjdGl2ZUVkZ2VzIiwgIl90aGlzNiIsICJsZXZlbERvd25zdHJlYW0iLCAiX2dldEh1YlNpemVzIiwgIl9jcmF3bE5ldHdvcmsiLCAiX3RoaXM3IiwgImxldmVsQSIsICJzZXRNaW5MZXZlbFRvWmVybyIsICJfdGhpczgiLCAic2hha2VUb3dhcmRzIiwgIl9ldmVyeUluc3RhbmNlUHJvcGVydHkiLCAiX3RoaXM5IiwgImFkZFJlbGF0aW9uIiwgImNoZWNrSWZUcmVlIiwgIl90aGlzMTAiLCAic3RhcnRpbmdOb2RlSWQiLCAiY3Jhd2xlciIsICJ0cmVlIiwgInNldFRyZWVJbmRleCIsICJfdGhpczExIiwgInNoaWZ0ZXIiLCAiY2hpbGRBIiwgImNoaWxkQiIsICJfdGhpczEyIiwgIml0ZXJhdGVQYXJlbnRzIiwgInBhcmVudFJlZiIsICJmaW5kUGFyZW50IiwgImZvdW5kUGFyZW50IiwgImlzVmVydGljYWwiLCAibWluUG9zIiwgIm1heFBvcyIsICJNYW5pcHVsYXRpb25TeXN0ZW0iLCAiaW50ZXJhY3Rpb25IYW5kbGVyIiwgImVkaXRNb2RlIiwgIm1hbmlwdWxhdGlvbkRpdiIsICJlZGl0TW9kZURpdiIsICJjbG9zZURpdiIsICJfZG9tRXZlbnRMaXN0ZW5lckNsZWFudXBRdWV1ZSIsICJ0ZW1wb3JhcnlVSUZ1bmN0aW9ucyIsICJ0ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucyIsICJ0ZW1wb3JhcnlJZHMiLCAiZ3VpRW5hYmxlZCIsICJpbk1vZGUiLCAic2VsZWN0ZWRDb250cm9sTm9kZSIsICJpbml0aWFsbHlBY3RpdmUiLCAiZGVsZXRlTm9kZSIsICJkZWxldGVFZGdlIiwgImNvbnRyb2xOb2RlU3R5bGUiLCAiX2NsZWFuIiwgIl9yZXN0b3JlIiwgImVuYWJsZUVkaXRNb2RlIiwgImRpc2FibGVFZGl0TW9kZSIsICJsb2NhbGUiLCAibG9jYWxlcyIsICJfc2V0dXAiLCAic2hvd01hbmlwdWxhdG9yVG9vbGJhciIsICJfY3JlYXRlRWRpdEJ1dHRvbiIsICJtYW5pcHVsYXRpb25ET00iLCAic2VsZWN0ZWROb2RlQ291bnQiLCAiZ2V0U2VsZWN0ZWROb2RlQ291bnQiLCAic2VsZWN0ZWRFZGdlQ291bnQiLCAiZ2V0U2VsZWN0ZWRFZGdlQ291bnQiLCAic2VsZWN0ZWRUb3RhbENvdW50IiwgIm5lZWRTZXBlcmF0b3IiLCAiX2NyZWF0ZUFkZE5vZGVCdXR0b24iLCAiX2NyZWF0ZVNlcGVyYXRvciIsICJfY3JlYXRlQWRkRWRnZUJ1dHRvbiIsICJfY3JlYXRlRWRpdE5vZGVCdXR0b24iLCAiX2NyZWF0ZUVkaXRFZGdlQnV0dG9uIiwgIl9jcmVhdGVEZWxldGVCdXR0b24iLCAiX2JpbmRFbGVtZW50RXZlbnRzIiwgInRvZ2dsZUVkaXRNb2RlIiwgIl90ZW1wb3JhcnlCaW5kRXZlbnQiLCAiX2NyZWF0ZUJhY2tCdXR0b24iLCAiX2NyZWF0ZURlc2NyaXB0aW9uIiwgIl9wZXJmb3JtQWRkTm9kZSIsICJmaW5hbGl6ZWREYXRhIiwgImFsZXJ0IiwgIl90ZW1wb3JhcnlCaW5kVUkiLCAiX2hhbmRsZUNvbm5lY3QiLCAiX2ZpbmlzaENvbm5lY3QiLCAiX2RyYWdDb250cm9sTm9kZSIsICJfZHJhZ1N0YXJ0RWRnZSIsICJlZGl0V2l0aG91dERyYWciLCAiZWRnZUJlaW5nRWRpdGVkSWQiLCAiY29udHJvbE5vZGVGcm9tIiwgIl9nZXROZXdUYXJnZXROb2RlIiwgImNvbnRyb2xOb2RlVG8iLCAiX2NvbnRyb2xOb2RlVG91Y2giLCAiX2NvbnRyb2xOb2RlRHJhZ1N0YXJ0IiwgIl9jb250cm9sTm9kZURyYWciLCAiX2NvbnRyb2xOb2RlRHJhZ0VuZCIsICJmaW5kQm9yZGVyUG9zaXRpb25zIiwgIl9wZXJmb3JtRWRpdEVkZ2UiLCAic2VsZWN0ZWROb2RlcyIsICJzZWxlY3RlZEVkZ2VzIiwgImRlbGV0ZUZ1bmN0aW9uIiwgIl9jcmVhdGVXcmFwcGVycyIsICJfcmVtb3ZlTWFuaXB1bGF0aW9uRE9NIiwgIl90aGlzJG9wdGlvbnMkbG9jYWxlcyIsICJfdGhpcyRvcHRpb25zJGxvY2FsZXMyIiwgInNldEF0dHJpYnV0ZSIsICJyZWN1cnNpdmVET01EZWxldGUiLCAiX2NyZWF0ZUJ1dHRvbiIsICJfY2xlYW51cERPTUV2ZW50TGlzdGVuZXJzIiwgIl9jbGVhbnVwVGVtcG9yYXJ5Tm9kZXNBbmRFZGdlcyIsICJfdW5iaW5kVGVtcG9yYXJ5VUlzIiwgIl91bmJpbmRUZW1wb3JhcnlFdmVudHMiLCAiYWRkTm9kZU1vZGUiLCAiYWRkRWRnZU1vZGUiLCAiZWRpdEVkZ2VNb2RlIiwgImRlbGV0ZUJ0bkNsYXNzIiwgInJ0bCIsICJkZWxldGVTZWxlY3RlZCIsICJsYWJlbENsYXNzTmFtZSIsICJuZXdGdW5jdGlvbiIsICJVSWZ1bmN0aW9uTmFtZSIsICJldmVudE5hbWUiLCAiZG9tRWxlbWVudCIsICJrZXl1cExpc3RlbmVyIiwgIl9yZWYiLCAiaW5kZXhUZW1wRWRnZSIsICJfY29udGV4dDI4IiwgIl9jb250ZXh0MjkiLCAiaW5kZXhUZW1wTm9kZSIsICJmcm9tU2VsZWN0IiwgInRvU2VsZWN0IiwgIm92ZXJsYXBwaW5nTm9kZUlkcyIsICJ0YXJnZXROb2RlIiwgImNvbm5lY3Rpb25FZGdlIiwgImNvbm5lY3RGcm9tSWQiLCAiX2NvbnRleHQzMCIsICJfY29udGV4dDMxIiwgIl9wZXJmb3JtQWRkRWRnZSIsICJjbGlja0RhdGEiLCAiZGVmYXVsdERhdGEiLCAic291cmNlTm9kZUlkIiwgImVlRnVuY3QiLCAiYm9vbCIsICJlbmRQb2ludHMiLCAibm9kZU9wdGlvbnMiLCAiYm9vbGVhbiIsICJmdW5jdGlvbiIsICJfX3R5cGVfXyIsICJtaW5pbXVtIiwgImRvbSIsICJtYXhpbXVtIiwgImNvbmZpZ3VyZSIsICJzaG93QnV0dG9uIiwgIl9fYW55X18iLCAiaW50ZXJhY3Rpb24iLCAibWFuaXB1bGF0aW9uIiwgImNsaWNrVG9Vc2UiLCAiYW55IiwgImNvbmZpZ3VyZU9wdGlvbnMiLCAiY29uZmlndXJhdG9ySGlkZU9wdGlvbiIsICJwYXJlbnRQYXRoIiwgIm9wdGlvbk5hbWUiLCAiRmxveWRXYXJzaGFsbCIsICJlZGdlc0FycmF5IiwgIkRfbWF0cml4IiwgImNlbGwiLCAia25vZGUiLCAia2NvbG0iLCAiaW5vZGUiLCAiaWNvbG0iLCAiam5vZGUiLCAiamNvbG0iLCAiS2FtYWRhS2F3YWkiLCAiZWRnZVN0cmVuZ3RoIiwgImRpc3RhbmNlU29sdmVyIiwgImlnbm9yZUNsdXN0ZXJzIiwgImdldERpc3RhbmNlcyIsICJfY3JlYXRlTF9tYXRyaXgiLCAiX2NyZWF0ZUtfbWF0cml4IiwgIl9jcmVhdGVFX21hdHJpeCIsICJtYXhJdGVyYXRpb25zIiwgIm1heEVuZXJneSIsICJoaWdoRV9ub2RlSWQiLCAiZEVfZHgiLCAiZEVfZHkiLCAiZGVsdGFfbSIsICJzdWJJdGVyYXRpb25zIiwgIl90aGlzJF9nZXRIaWdoZXN0RW5lcjIiLCAiX2dldEhpZ2hlc3RFbmVyZ3lOb2RlIiwgIl9tb3ZlTm9kZSIsICJfdGhpcyRfZ2V0RW5lcmd5MiIsICJfZ2V0RW5lcmd5IiwgIm1heEVuZXJneU5vZGVJZCIsICJkRV9keF9tYXgiLCAiZEVfZHlfbWF4IiwgIm5vZGVJZHgiLCAiX3RoaXMkX2dldEVuZXJneTQiLCAiX3RoaXMkRV9zdW1zJG0iLCAiRV9zdW1zIiwgImQyRV9keDIiLCAiZDJFX2R4ZHkiLCAiZDJFX2R5MiIsICJ4X20iLCAieV9tIiwgImttIiwgIktfbWF0cml4IiwgImxtIiwgIkxfbWF0cml4IiwgImlJZHgiLCAieF9pIiwgInlfaSIsICJrbWF0IiwgImxtYXQiLCAiZGVub21pbmF0b3IiLCAiX3VwZGF0ZUVfbWF0cml4IiwgIkVfbWF0cml4IiwgIm1JZHgiLCAiY29sbSIsICJsY29sbSIsICJvbGREeCIsICJvbGREeSIsICJOZXR3b3JrIiwgInJlbmRlcmVyIiwgIm5vZGVzSGFuZGxlciIsICJlZGdlc0hhbmRsZXIiLCAiX2NyZWF0ZSIsICJzZXREYXRhIiwgIlZhbGlkYXRvciIsICJ2YWxpZGF0ZSIsICJyYXdDb2RlIiwgIl9yYXdDb2RlJHNwbGl0MiIsICJyYXdMYW5ndWFnZSIsICJyYXdDb3VudHJ5IiwgImxhbmd1YWdlIiwgImNvdW50cnkiLCAiY29uZmlndXJhdG9yIiwgIkNvbmZpZ3VyYXRvciIsICJuZXR3b3JrT3B0aW9ucyIsICJzZXRNb2R1bGVPcHRpb25zIiwgImFjdGl2YXRvciIsICJBY3RpdmF0b3IiLCAiX3VwZGF0ZVZpc2libGVJbmRpY2VzIiwgImVkZ2VOb2Rlc1ByZXNlbnQiLCAiX3VwZGF0ZVZhbHVlUmFuZ2UiLCAiZ2VwaGkiLCAiZ2VwaGlEYXRhIiwgInZhbHVlTWluIiwgInZhbHVlTWF4IiwgInZhbHVlVG90YWwiLCAic2V0VmFsdWVSYW5nZSIsICJpc0FjdGl2ZSIsICJhY3RpdmUiLCAiY2x1c3RlciIsICJnZXROb2Rlc0luQ2x1c3RlciIsICJjbHVzdGVyQnlIdWJzaXplIiwgInVwZGF0ZUNsdXN0ZXJlZE5vZGUiLCAiZ2V0QmFzZUVkZ2UiLCAidXBkYXRlRWRnZSIsICJnZXRTZWVkIiwgImVkaXROb2RlTW9kZSIsICJnZXRQb3NpdGlvbnMiLCAic3RvcmVQb3NpdGlvbnMiLCAibW92ZU5vZGUiLCAiZ2V0Qm91bmRpbmdCb3giLCAiZ2V0Q29ubmVjdGVkTm9kZXMiLCAib2JqZWN0SWQiLCAiZ2V0Q29ubmVjdGVkRWRnZXMiLCAiZ2V0U2VsZWN0ZWRFZGdlcyIsICJzZWxlY3ROb2RlcyIsICJzZWxlY3RFZGdlcyIsICJjb21taXRXaXRob3V0RW1pdHRpbmciLCAicmVkcmF3IiwgImdldFNjYWxlIiwgImdldE9wdGlvbnNGcm9tQ29uZmlndXJhdG9yIiwgImdldE9wdGlvbnMiLCAicGFyc2VET1ROZXR3b3JrIiwgImRvdHBhcnNlciIsICJfY2xhc3NDYWxsQ2hlY2siLCAiaW5zdGFuY2UiLCAiQ29uc3RydWN0b3IiLCAiVHlwZUVycm9yIiwgInQiLCAiY2hlY2siLCAiaXQiLCAiTWF0aCIsICJnbG9iYWwiLCAiZ2xvYmFsVGhpcyIsICJ3aW5kb3ciLCAic2VsZiIsICJ0aGlzIiwgIkZ1bmN0aW9uIiwgImZhaWxzIiwgImV4ZWMiLCAiZXJyb3IiLCAiZnVuY3Rpb25CaW5kTmF0aXZlIiwgInJlcXVpcmUkJDAiLCAidGVzdCIsICJiaW5kIiwgImhhc093blByb3BlcnR5IiwgIk5BVElWRV9CSU5EIiwgIkZ1bmN0aW9uUHJvdG90eXBlIiwgInByb3RvdHlwZSIsICJhcHBseSIsICJjYWxsIiwgImZ1bmN0aW9uQXBwbHkiLCAiUmVmbGVjdCIsICJhcmd1bWVudHMiLCAidW5jdXJyeVRoaXNXaXRoQmluZCIsICJmdW5jdGlvblVuY3VycnlUaGlzIiwgImZuIiwgInVuY3VycnlUaGlzIiwgInRvU3RyaW5nIiwgInN0cmluZ1NsaWNlIiwgInNsaWNlIiwgImNsYXNzb2ZSYXciLCAicmVxdWlyZSQkMSIsICJmdW5jdGlvblVuY3VycnlUaGlzQ2xhdXNlIiwgImRvY3VtZW50QWxsIiwgImRvY3VtZW50IiwgImFsbCIsICJkb2N1bWVudEFsbF8xIiwgIklTX0hUTUxEREEiLCAiaXNDYWxsYWJsZSIsICJhcmd1bWVudCIsICJkZXNjcmlwdG9ycyIsICJPYmplY3QiLCAiZGVmaW5lUHJvcGVydHkiLCAiZ2V0IiwgImZ1bmN0aW9uQ2FsbCIsICIkcHJvcGVydHlJc0VudW1lcmFibGUiLCAicHJvcGVydHlJc0VudW1lcmFibGUiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIk5BU0hPUk5fQlVHIiwgIm9iamVjdFByb3BlcnR5SXNFbnVtZXJhYmxlIiwgImYiLCAiViIsICJkZXNjcmlwdG9yIiwgImVudW1lcmFibGUiLCAibWF0Y2giLCAidmVyc2lvbiIsICJjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IiLCAiYml0bWFwIiwgInZhbHVlIiwgImNvbmZpZ3VyYWJsZSIsICJ3cml0YWJsZSIsICJjbGFzc29mIiwgInJlcXVpcmUkJDIiLCAiJE9iamVjdCIsICJzcGxpdCIsICJpbmRleGVkT2JqZWN0IiwgImlzTnVsbE9yVW5kZWZpbmVkIiwgIiRUeXBlRXJyb3IiLCAicmVxdWlyZU9iamVjdENvZXJjaWJsZSIsICJJbmRleGVkT2JqZWN0IiwgInRvSW5kZXhlZE9iamVjdCIsICJpc09iamVjdCIsICJwYXRoIiwgImFGdW5jdGlvbiIsICJ2YXJpYWJsZSIsICJnZXRCdWlsdEluIiwgIm5hbWVzcGFjZSIsICJtZXRob2QiLCAibGVuZ3RoIiwgIm9iamVjdElzUHJvdG90eXBlT2YiLCAiaXNQcm90b3R5cGVPZiIsICJlbmdpbmVVc2VyQWdlbnQiLCAibmF2aWdhdG9yIiwgIlN0cmluZyIsICJ1c2VyQWdlbnQiLCAicHJvY2VzcyIsICJEZW5vIiwgInZlcnNpb25zIiwgInY4IiwgImVuZ2luZVY4VmVyc2lvbiIsICJWOF9WRVJTSU9OIiwgIiRTdHJpbmciLCAic3ltYm9sQ29uc3RydWN0b3JEZXRlY3Rpb24iLCAiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwgInN5bWJvbCIsICJTeW1ib2wiLCAic2hhbSIsICJ1c2VTeW1ib2xBc1VpZCIsICJpdGVyYXRvciIsICJpc1N5bWJvbCIsICJyZXF1aXJlJCQzIiwgIiRTeW1ib2wiLCAidHJ5VG9TdHJpbmciLCAiYUNhbGxhYmxlIiwgImdldE1ldGhvZCIsICJQIiwgImZ1bmMiLCAiZGVmaW5lR2xvYmFsUHJvcGVydHkiLCAia2V5IiwgIlNIQVJFRCIsICJzaGFyZWRTdG9yZSIsICJzdG9yZSIsICJzaGFyZWRNb2R1bGUiLCAicHVzaCIsICJtb2RlIiwgImNvcHlyaWdodCIsICJsaWNlbnNlIiwgInNvdXJjZSIsICJ0b09iamVjdCIsICJoYXNPd25Qcm9wZXJ0eV8xIiwgImhhc093biIsICJpZCIsICJwb3N0Zml4IiwgInJhbmRvbSIsICJ1aWQiLCAic2hhcmVkIiwgIk5BVElWRV9TWU1CT0wiLCAicmVxdWlyZSQkNCIsICJVU0VfU1lNQk9MX0FTX1VJRCIsICJyZXF1aXJlJCQ1IiwgIldlbGxLbm93blN5bWJvbHNTdG9yZSIsICJjcmVhdGVXZWxsS25vd25TeW1ib2wiLCAid2l0aG91dFNldHRlciIsICJ3ZWxsS25vd25TeW1ib2wiLCAibmFtZSIsICJvcmRpbmFyeVRvUHJpbWl0aXZlIiwgImlucHV0IiwgInByZWYiLCAidmFsIiwgInZhbHVlT2YiLCAiVE9fUFJJTUlUSVZFIiwgInRvUHJpbWl0aXZlIiwgInJlc3VsdCIsICJleG90aWNUb1ByaW0iLCAidG9Qcm9wZXJ0eUtleSIsICJFWElTVFMiLCAiY3JlYXRlRWxlbWVudCIsICJkb2N1bWVudENyZWF0ZUVsZW1lbnQiLCAiaWU4RG9tRGVmaW5lIiwgImEiLCAiREVTQ1JJUFRPUlMiLCAicHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUiLCAicmVxdWlyZSQkNiIsICJJRThfRE9NX0RFRklORSIsICJyZXF1aXJlJCQ3IiwgIiRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAib2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIk8iLCAicmVwbGFjZW1lbnQiLCAiaXNGb3JjZWQiLCAiZmVhdHVyZSIsICJkZXRlY3Rpb24iLCAiZGF0YSIsICJub3JtYWxpemUiLCAiUE9MWUZJTEwiLCAiTkFUSVZFIiwgInN0cmluZyIsICJyZXBsYWNlIiwgInRvTG93ZXJDYXNlIiwgImlzRm9yY2VkXzEiLCAiZnVuY3Rpb25CaW5kQ29udGV4dCIsICJ0aGF0IiwgInY4UHJvdG90eXBlRGVmaW5lQnVnIiwgImFuT2JqZWN0IiwgIlY4X1BST1RPVFlQRV9ERUZJTkVfQlVHIiwgIiRkZWZpbmVQcm9wZXJ0eSIsICJFTlVNRVJBQkxFIiwgIkNPTkZJR1VSQUJMRSIsICJXUklUQUJMRSIsICJvYmplY3REZWZpbmVQcm9wZXJ0eSIsICJBdHRyaWJ1dGVzIiwgImN1cnJlbnQiLCAiZGVmaW5lUHJvcGVydHlNb2R1bGUiLCAiY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5IiwgIm9iamVjdCIsICJyZXF1aXJlJCQ4IiwgInJlcXVpcmUkJDkiLCAid3JhcENvbnN0cnVjdG9yIiwgIk5hdGl2ZUNvbnN0cnVjdG9yIiwgIldyYXBwZXIiLCAiYiIsICJjIiwgIl9leHBvcnQiLCAib3B0aW9ucyIsICJGT1JDRUQiLCAiVVNFX05BVElWRSIsICJWSVJUVUFMX1BST1RPVFlQRSIsICJzb3VyY2VQcm9wZXJ0eSIsICJ0YXJnZXRQcm9wZXJ0eSIsICJuYXRpdmVQcm9wZXJ0eSIsICJyZXN1bHRQcm9wZXJ0eSIsICJUQVJHRVQiLCAidGFyZ2V0IiwgIkdMT0JBTCIsICJTVEFUSUMiLCAic3RhdCIsICJQUk9UTyIsICJwcm90byIsICJuYXRpdmVTb3VyY2UiLCAidGFyZ2V0UHJvdG90eXBlIiwgImZvcmNlZCIsICJkb250Q2FsbEdldFNldCIsICJ3cmFwIiwgInJlYWwiLCAiJCIsICIkJFAiLCAiZXhwb3J0cyIsICJkZXNjIiwgImlzQXJyYXkiLCAiQXJyYXkiLCAiY2VpbCIsICJmbG9vciIsICJ0cnVuYyIsICJ4IiwgIm4iLCAidG9JbnRlZ2VyT3JJbmZpbml0eSIsICJudW1iZXIiLCAibWluIiwgInRvTGVuZ3RoIiwgImxlbmd0aE9mQXJyYXlMaWtlIiwgIm9iaiIsICJkb2VzTm90RXhjZWVkU2FmZUludGVnZXIiLCAiY3JlYXRlUHJvcGVydHkiLCAicHJvcGVydHlLZXkiLCAidG9TdHJpbmdUYWdTdXBwb3J0IiwgIlRPX1NUUklOR19UQUdfU1VQUE9SVCIsICJUT19TVFJJTkdfVEFHIiwgIkNPUlJFQ1RfQVJHVU1FTlRTIiwgInRhZyIsICJjYWxsZWUiLCAiZnVuY3Rpb25Ub1N0cmluZyIsICJpbnNwZWN0U291cmNlIiwgIm5vb3AiLCAiZW1wdHkiLCAiY29uc3RydWN0IiwgImNvbnN0cnVjdG9yUmVnRXhwIiwgIklOQ09SUkVDVF9UT19TVFJJTkciLCAiaXNDb25zdHJ1Y3Rvck1vZGVybiIsICJpc0NvbnN0cnVjdG9yTGVnYWN5IiwgImlzQ29uc3RydWN0b3IiLCAiY2FsbGVkIiwgIlNQRUNJRVMiLCAiJEFycmF5IiwgImFycmF5U3BlY2llc0NvbnN0cnVjdG9yIiwgIm9yaWdpbmFsQXJyYXkiLCAiQyIsICJjb25zdHJ1Y3RvciIsICJ1bmRlZmluZWQiLCAiYXJyYXlTcGVjaWVzQ3JlYXRlIiwgImFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQiLCAiTUVUSE9EX05BTUUiLCAiYXJyYXkiLCAiZm9vIiwgIkJvb2xlYW4iLCAicmVxdWlyZSQkMTEiLCAiSVNfQ09OQ0FUX1NQUkVBREFCTEUiLCAicmVxdWlyZSQkMTAiLCAiSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCIsICJjb25jYXQiLCAiaXNDb25jYXRTcHJlYWRhYmxlIiwgInNwcmVhZGFibGUiLCAiYXJpdHkiLCAiYXJnIiwgImkiLCAiayIsICJsZW4iLCAiRSIsICJBIiwgIm1heCIsICJ0b0Fic29sdXRlSW5kZXgiLCAiaW5kZXgiLCAiaW50ZWdlciIsICJjcmVhdGVNZXRob2QiLCAiSVNfSU5DTFVERVMiLCAiJHRoaXMiLCAiZWwiLCAiZnJvbUluZGV4IiwgImFycmF5SW5jbHVkZXMiLCAiaW5jbHVkZXMiLCAiaW5kZXhPZiIsICJoaWRkZW5LZXlzIiwgIm9iamVjdEtleXNJbnRlcm5hbCIsICJuYW1lcyIsICJlbnVtQnVnS2V5cyIsICJpbnRlcm5hbE9iamVjdEtleXMiLCAib2JqZWN0S2V5cyIsICJrZXlzIiwgIm9iamVjdERlZmluZVByb3BlcnRpZXMiLCAiZGVmaW5lUHJvcGVydGllcyIsICJQcm9wZXJ0aWVzIiwgInByb3BzIiwgImFjdGl2ZVhEb2N1bWVudCIsICJodG1sIiwgInNoYXJlZEtleSIsICJkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlIiwgIlBST1RPVFlQRSIsICJTQ1JJUFQiLCAiSUVfUFJPVE8iLCAiRW1wdHlDb25zdHJ1Y3RvciIsICJzY3JpcHRUYWciLCAiY29udGVudCIsICJMVCIsICJOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYIiwgIndyaXRlIiwgImNsb3NlIiwgInRlbXAiLCAicGFyZW50V2luZG93IiwgIk51bGxQcm90b09iamVjdCIsICJBY3RpdmVYT2JqZWN0IiwgImlmcmFtZURvY3VtZW50IiwgImlmcmFtZSIsICJKUyIsICJkb21haW4iLCAic3R5bGUiLCAiZGlzcGxheSIsICJhcHBlbmRDaGlsZCIsICJzcmMiLCAiY29udGVudFdpbmRvdyIsICJvcGVuIiwgIkYiLCAib2JqZWN0Q3JlYXRlIiwgImNyZWF0ZSIsICJvYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImdldE93blByb3BlcnR5TmFtZXMiLCAiYXJyYXlTbGljZVNpbXBsZSIsICJzdGFydCIsICJlbmQiLCAiZmluIiwgIiRnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImFycmF5U2xpY2UiLCAid2luZG93TmFtZXMiLCAib2JqZWN0R2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsIiwgIm9iamVjdEdldE93blByb3BlcnR5U3ltYm9scyIsICJkZWZpbmVCdWlsdEluIiwgImRlZmluZUJ1aWx0SW5BY2Nlc3NvciIsICJ3ZWxsS25vd25TeW1ib2xXcmFwcGVkIiwgInNldCIsICJoYXMiLCAid3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSIsICJ3ZWxsS25vd25TeW1ib2xEZWZpbmUiLCAiTkFNRSIsICJzeW1ib2xEZWZpbmVUb1ByaW1pdGl2ZSIsICJTeW1ib2xQcm90b3R5cGUiLCAiaGludCIsICJvYmplY3RUb1N0cmluZyIsICJzZXRUb1N0cmluZ1RhZyIsICJUQUciLCAiU0VUX01FVEhPRCIsICJXZWFrTWFwIiwgIk5BVElWRV9XRUFLX01BUCIsICJPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCIsICJzdGF0ZSIsICJtZXRhZGF0YSIsICJmYWNhZGUiLCAiU1RBVEUiLCAiaW50ZXJuYWxTdGF0ZSIsICJlbmZvcmNlIiwgImdldHRlckZvciIsICJUWVBFIiwgInR5cGUiLCAiSVNfTUFQIiwgIklTX0ZJTFRFUiIsICJJU19TT01FIiwgIklTX0VWRVJZIiwgIklTX0ZJTkRfSU5ERVgiLCAiSVNfRklMVEVSX1JFSkVDVCIsICJOT19IT0xFUyIsICJjYWxsYmFja2ZuIiwgInNwZWNpZmljQ3JlYXRlIiwgImJvdW5kRnVuY3Rpb24iLCAiYXJyYXlJdGVyYXRpb24iLCAiZm9yRWFjaCIsICJtYXAiLCAiZmlsdGVyIiwgInNvbWUiLCAiZXZlcnkiLCAiZmluZCIsICJmaW5kSW5kZXgiLCAiZmlsdGVyUmVqZWN0IiwgInJlcXVpcmUkJDEyIiwgIiR0b1N0cmluZyIsICJyZXF1aXJlJCQxMyIsICJyZXF1aXJlJCQxNCIsICJuYXRpdmVPYmplY3RDcmVhdGUiLCAicmVxdWlyZSQkMTUiLCAicmVxdWlyZSQkMTYiLCAiZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSIsICJyZXF1aXJlJCQxNyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwiLCAicmVxdWlyZSQkMTgiLCAiZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlIiwgInJlcXVpcmUkJDE5IiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSIsICJyZXF1aXJlJCQyMCIsICJyZXF1aXJlJCQyMSIsICJyZXF1aXJlJCQyMiIsICJyZXF1aXJlJCQyMyIsICJyZXF1aXJlJCQyNCIsICJyZXF1aXJlJCQyNSIsICJyZXF1aXJlJCQyNiIsICJyZXF1aXJlJCQyOCIsICJyZXF1aXJlJCQyOSIsICJyZXF1aXJlJCQzMCIsICJyZXF1aXJlJCQzMSIsICJkZWZpbmVXZWxsS25vd25TeW1ib2wiLCAicmVxdWlyZSQkMzIiLCAiZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUiLCAicmVxdWlyZSQkMzMiLCAicmVxdWlyZSQkMzQiLCAiSW50ZXJuYWxTdGF0ZU1vZHVsZSIsICJyZXF1aXJlJCQzNSIsICIkZm9yRWFjaCIsICJyZXF1aXJlJCQzNiIsICJISURERU4iLCAicmVxdWlyZSQkMjciLCAiU1lNQk9MIiwgInNldEludGVybmFsU3RhdGUiLCAiZ2V0SW50ZXJuYWxTdGF0ZSIsICJPYmplY3RQcm90b3R5cGUiLCAiUmFuZ2VFcnJvciIsICJRT2JqZWN0IiwgIm5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJuYXRpdmVEZWZpbmVQcm9wZXJ0eSIsICJuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzIiwgIm5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlIiwgIkFsbFN5bWJvbHMiLCAiT2JqZWN0UHJvdG90eXBlU3ltYm9scyIsICJVU0VfU0VUVEVSIiwgImZpbmRDaGlsZCIsICJmYWxsYmFja0RlZmluZVByb3BlcnR5IiwgIk9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IiLCAic2V0U3ltYm9sRGVzY3JpcHRvciIsICJkZXNjcmlwdGlvbiIsICIkZGVmaW5lUHJvcGVydGllcyIsICJwcm9wZXJ0aWVzIiwgIiRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiSVNfT0JKRUNUX1BST1RPVFlQRSIsICJzZXR0ZXIiLCAiJCROIiwgIiRmb3JFYWNoJDEiLCAidXNlU2V0dGVyIiwgInVzZVNpbXBsZSIsICJzeW1ib2xSZWdpc3RyeURldGVjdGlvbiIsICJrZXlGb3IiLCAiTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSIsICJTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5IiwgIlN5bWJvbFRvU3RyaW5nUmVnaXN0cnkiLCAiZm9yIiwgInN5bSIsICJnZXRSZXBsYWNlckZ1bmN0aW9uIiwgInJlcGxhY2VyIiwgInJhd0xlbmd0aCIsICJlbGVtZW50IiwgImtleXNMZW5ndGgiLCAicm9vdCIsICJqIiwgIiRzdHJpbmdpZnkiLCAiY2hhckF0IiwgImNoYXJDb2RlQXQiLCAibnVtYmVyVG9TdHJpbmciLCAidGVzdGVyIiwgImxvdyIsICJoaSIsICJXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04iLCAiSUxMX0ZPUk1FRF9VTklDT0RFIiwgInN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IiwgImFyZ3MiLCAiJHJlcGxhY2VyIiwgImZpeElsbEZvcm1lZCIsICJvZmZzZXQiLCAicHJldiIsICJuZXh0IiwgInN0cmluZ2lmeSIsICJzcGFjZSIsICJKU09OIiwgIkl0ZXJhdG9yUHJvdG90eXBlIiwgIlByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSIsICJhcnJheUl0ZXJhdG9yIiwgIml0ZXJhdG9ycyIsICJnZXREZXNjcmlwdG9yIiwgImZ1bmN0aW9uTmFtZSIsICJQUk9QRVIiLCAiY29ycmVjdFByb3RvdHlwZUdldHRlciIsICJnZXRQcm90b3R5cGVPZiIsICJDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIiLCAib2JqZWN0R2V0UHJvdG90eXBlT2YiLCAiSVRFUkFUT1IiLCAiQlVHR1lfU0FGQVJJX0lURVJBVE9SUyIsICJORVdfSVRFUkFUT1JfUFJPVE9UWVBFIiwgIml0ZXJhdG9yc0NvcmUiLCAiSXRlcmF0b3JzIiwgInJldHVyblRoaXMiLCAidW5jdXJyeVRoaXNBY2Nlc3NvciIsICJhUG9zc2libGVQcm90b3R5cGUiLCAib2JqZWN0U2V0UHJvdG90eXBlT2YiLCAic2V0UHJvdG90eXBlT2YiLCAiQ09SUkVDVF9TRVRURVIiLCAiX19wcm90b19fIiwgIkZ1bmN0aW9uTmFtZSIsICJjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yIiwgIkl0ZXJhdG9yQ29uc3RydWN0b3IiLCAiRU5VTUVSQUJMRV9ORVhUIiwgIkl0ZXJhdG9yc0NvcmUiLCAiUFJPUEVSX0ZVTkNUSU9OX05BTUUiLCAiS0VZUyIsICJWQUxVRVMiLCAiRU5UUklFUyIsICJpdGVyYXRvckRlZmluZSIsICJJdGVyYWJsZSIsICJERUZBVUxUIiwgIklTX1NFVCIsICJDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUiLCAibWV0aG9kcyIsICJLRVkiLCAiZ2V0SXRlcmF0aW9uTWV0aG9kIiwgIktJTkQiLCAiZGVmYXVsdEl0ZXJhdG9yIiwgIkl0ZXJhYmxlUHJvdG90eXBlIiwgIklOQ09SUkVDVF9WQUxVRVNfTkFNRSIsICJuYXRpdmVJdGVyYXRvciIsICJhbnlOYXRpdmVJdGVyYXRvciIsICJlbnRyaWVzIiwgInZhbHVlcyIsICJjcmVhdGVJdGVyUmVzdWx0T2JqZWN0IiwgImRvbmUiLCAiZGVmaW5lSXRlcmF0b3IiLCAiQVJSQVlfSVRFUkFUT1IiLCAiZGVmaW5lSXRlcmF0b3IkMiIsICJpdGVyYXRlZCIsICJraW5kIiwgIkFyZ3VtZW50cyIsICJET01JdGVyYWJsZXMiLCAiQ1NTUnVsZUxpc3QiLCAiQ1NTU3R5bGVEZWNsYXJhdGlvbiIsICJDU1NWYWx1ZUxpc3QiLCAiQ2xpZW50UmVjdExpc3QiLCAiRE9NUmVjdExpc3QiLCAiRE9NU3RyaW5nTGlzdCIsICJET01Ub2tlbkxpc3QiLCAiRGF0YVRyYW5zZmVySXRlbUxpc3QiLCAiRmlsZUxpc3QiLCAiSFRNTEFsbENvbGxlY3Rpb24iLCAiSFRNTENvbGxlY3Rpb24iLCAiSFRNTEZvcm1FbGVtZW50IiwgIkhUTUxTZWxlY3RFbGVtZW50IiwgIk1lZGlhTGlzdCIsICJNaW1lVHlwZUFycmF5IiwgIk5hbWVkTm9kZU1hcCIsICJOb2RlTGlzdCIsICJQYWludFJlcXVlc3RMaXN0IiwgIlBsdWdpbiIsICJQbHVnaW5BcnJheSIsICJTVkdMZW5ndGhMaXN0IiwgIlNWR051bWJlckxpc3QiLCAiU1ZHUGF0aFNlZ0xpc3QiLCAiU1ZHUG9pbnRMaXN0IiwgIlNWR1N0cmluZ0xpc3QiLCAiU1ZHVHJhbnNmb3JtTGlzdCIsICJTb3VyY2VCdWZmZXJMaXN0IiwgIlN0eWxlU2hlZXRMaXN0IiwgIlRleHRUcmFja0N1ZUxpc3QiLCAiVGV4dFRyYWNrTGlzdCIsICJUb3VjaExpc3QiLCAiQ09MTEVDVElPTl9OQU1FIiwgIkNvbGxlY3Rpb24iLCAiQ29sbGVjdGlvblByb3RvdHlwZSIsICJNRVRBREFUQSIsICJ0aGlzU3ltYm9sVmFsdWUiLCAic3ltYm9sSXNSZWdpc3RlcmVkIiwgImlzUmVnaXN0ZXJlZFN5bWJvbCIsICIkaXNXZWxsS25vd25TeW1ib2wiLCAiaXNXZWxsS25vd25TeW1ib2wiLCAic3ltYm9sS2V5cyIsICJzeW1ib2xLZXlzTGVuZ3RoIiwgInN5bWJvbEtleSIsICJzeW1ib2xJc1dlbGxLbm93biIsICJpc1JlZ2lzdGVyZWQiLCAiaXNXZWxsS25vd24iLCAiQ09OVkVSVF9UT19TVFJJTkciLCAicG9zIiwgImZpcnN0IiwgInNlY29uZCIsICJTIiwgInBvc2l0aW9uIiwgInNpemUiLCAiY29kZUF0IiwgIlNUUklOR19JVEVSQVRPUiIsICJwb2ludCIsICJfdHlwZW9mIiwgIm8iLCAiX1N5bWJvbCIsICJfU3ltYm9sJGl0ZXJhdG9yIiwgIl90b1Byb3BlcnR5S2V5IiwgInByaW0iLCAiX1N5bWJvbCR0b1ByaW1pdGl2ZSIsICJyZXMiLCAiTnVtYmVyIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9PYmplY3QkZGVmaW5lUHJvcGVydHkiLCAiX2NyZWF0ZUNsYXNzIiwgInByb3RvUHJvcHMiLCAic3RhdGljUHJvcHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIiRGdW5jdGlvbiIsICJqb2luIiwgImZhY3RvcmllcyIsICJmdW5jdGlvbkJpbmQiLCAiUHJvdG90eXBlIiwgInBhcnRBcmdzIiwgImFyZ3NMZW5ndGgiLCAibGlzdCIsICJnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kIiwgIkNPTlNUUlVDVE9SIiwgIk1FVEhPRCIsICJOYW1lc3BhY2UiLCAicHVyZU1ldGhvZCIsICJOYXRpdmVQcm90b3R5cGUiLCAib3duIiwgIklTX1JJR0hUIiwgImFyZ3VtZW50c0xlbmd0aCIsICJtZW1vIiwgImFycmF5UmVkdWNlIiwgImxlZnQiLCAicmlnaHQiLCAiYXJyYXlNZXRob2RJc1N0cmljdCIsICJlbmdpbmVJc05vZGUiLCAiJHJlZHVjZSIsICJyZWR1Y2UiLCAiQXJyYXlQcm90b3R5cGUiLCAiJGZpbHRlciIsICIkbWFwIiwgImZsYXR0ZW5JbnRvQXJyYXkiLCAib3JpZ2luYWwiLCAic291cmNlTGVuIiwgImRlcHRoIiwgIm1hcHBlciIsICJ0aGlzQXJnIiwgImVsZW1lbnRMZW4iLCAidGFyZ2V0SW5kZXgiLCAic291cmNlSW5kZXgiLCAibWFwRm4iLCAiZmxhdE1hcCIsICJTaW1wbGVEYXRhUGlwZSIsICJfc291cmNlIiwgIl90cmFuc2Zvcm1lcnMiLCAiX3RhcmdldCIsICJfY29udGV4dCIsICJfY29udGV4dDIiLCAiX2NvbnRleHQzIiwgImFkZCIsICJfYmluZEluc3RhbmNlUHJvcGVydHkiLCAiX2FkZCIsICJyZW1vdmUiLCAiX3JlbW92ZSIsICJ1cGRhdGUiLCAiX3VwZGF0ZSIsICJfdHJhbnNmb3JtSXRlbXMiLCAib24iLCAiX2xpc3RlbmVycyIsICJvZmYiLCAiaXRlbXMiLCAiX2NvbnRleHQ0IiwgIl9yZWR1Y2VJbnN0YW5jZVByb3BlcnR5IiwgInRyYW5zZm9ybSIsICJfbmFtZSIsICJwYXlsb2FkIiwgIm9sZERhdGEiLCAiRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbiIsICJjYWxsYmFjayIsICJfZmlsdGVySW5zdGFuY2VQcm9wZXJ0eSIsICJfbWFwSW5zdGFuY2VQcm9wZXJ0eSIsICJfZmxhdE1hcEluc3RhbmNlUHJvcGVydHkiLCAiaXRlcmF0b3JDbG9zZSIsICJpbm5lclJlc3VsdCIsICJpbm5lckVycm9yIiwgImlzQXJyYXlJdGVyYXRvck1ldGhvZCIsICJnZXRJdGVyYXRvck1ldGhvZCIsICJnZXRJdGVyYXRvciIsICJ1c2luZ0l0ZXJhdG9yIiwgIml0ZXJhdG9yTWV0aG9kIiwgImNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmciLCAiU0FGRV9DTE9TSU5HIiwgIml0ZXJhdG9yV2l0aFJldHVybiIsICJyZXR1cm4iLCAiZnJvbSIsICJjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24iLCAiU0tJUF9DTE9TSU5HIiwgIklURVJBVElPTl9TVVBQT1JUIiwgImFycmF5TGlrZSIsICJJU19DT05TVFJVQ1RPUiIsICJtYXBmbiIsICJtYXBwaW5nIiwgInN0ZXAiLCAiaXRlcmFibGUiLCAiYXJyYXlTZXRMZW5ndGgiLCAic2V0QXJyYXlMZW5ndGgiLCAicHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoIiwgIml0ZW0iLCAiYXJnQ291bnQiLCAibmF0aXZlU2xpY2UiLCAiSEFTX1NQRUNJRVNfU1VQUE9SVCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJhcnIiLCAiYXJyMiIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAibWluTGVuIiwgImFycmF5TGlrZVRvQXJyYXkiLCAiX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJfQXJyYXkkZnJvbSIsICJfc2xpY2VkVG9BcnJheSIsICJfQXJyYXkkaXNBcnJheSIsICJyIiwgImwiLCAiX2dldEl0ZXJhdG9yTWV0aG9kIiwgImUiLCAidSIsICJfcHVzaEluc3RhbmNlUHJvcGVydHkiLCAidW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAibm9uSXRlcmFibGVSZXN0IiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJpdGVyIiwgIm5vbkl0ZXJhYmxlU3ByZWFkIiwgIm93bktleXMiLCAibmF0aXZlS2V5cyIsICJhcnJheUZvckVhY2giLCAibmF0aXZlUmV2ZXJzZSIsICJyZXZlcnNlIiwgIiQkciIsICJkZWxldGVQcm9wZXJ0eU9yVGhyb3ciLCAic3BsaWNlIiwgImRlbGV0ZUNvdW50IiwgImluc2VydENvdW50IiwgImFjdHVhbERlbGV0ZUNvdW50IiwgInRvIiwgImFjdHVhbFN0YXJ0IiwgIiRhc3NpZ24iLCAiYXNzaWduIiwgIm9iamVjdEFzc2lnbiIsICJCIiwgImFscGhhYmV0IiwgImNociIsICJUIiwgIm5hdGl2ZUdldFByb3RvdHlwZU9mIiwgIkQiLCAicGFyZW50IiwgImVuZ2luZUlzQnVuIiwgIkJ1biIsICJ2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCIsICJwYXNzZWQiLCAicmVxdWlyZWQiLCAiRU5HSU5FX0lTX0JVTiIsICJVU0VSX0FHRU5UIiwgIldSQVAiLCAic2NoZWR1bGVyc0ZpeCIsICJzY2hlZHVsZXIiLCAiaGFzVGltZUFyZyIsICJmaXJzdFBhcmFtSW5kZXgiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImJvdW5kQXJncyIsICJwYXJhbXMiLCAic2V0SW50ZXJ2YWwiLCAic2V0VGltZW91dCIsICJFbWl0dGVyIiwgIl9jYWxsYmFja3MiLCAiTWFwIiwgImV2ZW50IiwgImxpc3RlbmVyIiwgImNhbGxiYWNrcyIsICJvbmNlIiwgImFyZ3VtZW50c18iLCAiY2xlYXIiLCAiZGVsZXRlIiwgImVtaXQiLCAiY2FsbGJhY2tzQ29weSIsICJsaXN0ZW5lcnMiLCAibGlzdGVuZXJDb3VudCIsICJ0b3RhbENvdW50IiwgImhhc0xpc3RlbmVycyIsICJhZGRFdmVudExpc3RlbmVyIiwgInJlbW92ZUxpc3RlbmVyIiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAicmVtb3ZlQWxsTGlzdGVuZXJzIiwgIm1vZHVsZSIsICJfZXh0ZW5kcyIsICJfaW5oZXJpdHNMb29zZSIsICJzdWJDbGFzcyIsICJzdXBlckNsYXNzIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiUmVmZXJlbmNlRXJyb3IiLCAib3V0cHV0IiwgIm5leHRLZXkiLCAid2luIiwgImFzc2lnbiQxIiwgIlZFTkRPUl9QUkVGSVhFUyIsICJURVNUX0VMRU1FTlQiLCAicm91bmQiLCAiYWJzIiwgIm5vdyIsICJEYXRlIiwgInByZWZpeGVkIiwgInByb3BlcnR5IiwgInByZWZpeCIsICJwcm9wIiwgImNhbWVsUHJvcCIsICJ0b1VwcGVyQ2FzZSIsICJQUkVGSVhFRF9UT1VDSF9BQ1RJT04iLCAiTkFUSVZFX1RPVUNIX0FDVElPTiIsICJUT1VDSF9BQ1RJT05fQ09NUFVURSIsICJUT1VDSF9BQ1RJT05fQVVUTyIsICJUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OIiwgIlRPVUNIX0FDVElPTl9OT05FIiwgIlRPVUNIX0FDVElPTl9QQU5fWCIsICJUT1VDSF9BQ1RJT05fUEFOX1kiLCAiVE9VQ0hfQUNUSU9OX01BUCIsICJ0b3VjaE1hcCIsICJjc3NTdXBwb3J0cyIsICJDU1MiLCAic3VwcG9ydHMiLCAiZ2V0VG91Y2hBY3Rpb25Qcm9wcyIsICJTVVBQT1JUX1RPVUNIIiwgIlNVUFBPUlRfUE9JTlRFUl9FVkVOVFMiLCAiU1VQUE9SVF9PTkxZX1RPVUNIIiwgIklOUFVUX1RZUEVfVE9VQ0giLCAiSU5QVVRfVFlQRV9NT1VTRSIsICJDT01QVVRFX0lOVEVSVkFMIiwgIklOUFVUX1NUQVJUIiwgIklOUFVUX0VORCIsICJJTlBVVF9DQU5DRUwiLCAiRElSRUNUSU9OX05PTkUiLCAiRElSRUNUSU9OX0xFRlQiLCAiRElSRUNUSU9OX1JJR0hUIiwgIkRJUkVDVElPTl9VUCIsICJESVJFQ1RJT05fRE9XTiIsICJESVJFQ1RJT05fSE9SSVpPTlRBTCIsICJESVJFQ1RJT05fVkVSVElDQUwiLCAiRElSRUNUSU9OX0FMTCIsICJQUk9QU19YWSIsICJQUk9QU19DTElFTlRfWFkiLCAiZWFjaCIsICJjb250ZXh0IiwgImJvb2xPckZuIiwgImluU3RyIiwgInN0ciIsICJUb3VjaEFjdGlvbiIsICJtYW5hZ2VyIiwgIl9wcm90byIsICJjb21wdXRlIiwgImFjdGlvbnMiLCAidHJpbSIsICJ0b3VjaEFjdGlvbiIsICJyZWNvZ25pemVycyIsICJyZWNvZ25pemVyIiwgImVuYWJsZSIsICJnZXRUb3VjaEFjdGlvbiIsICJoYXNQYW5YIiwgImhhc1BhblkiLCAicHJldmVudERlZmF1bHRzIiwgInNyY0V2ZW50IiwgImRpcmVjdGlvbiIsICJvZmZzZXREaXJlY3Rpb24iLCAic2Vzc2lvbiIsICJwcmV2ZW50ZWQiLCAicHJldmVudERlZmF1bHQiLCAiaGFzTm9uZSIsICJpc1RhcFBvaW50ZXIiLCAicG9pbnRlcnMiLCAiaXNUYXBNb3ZlbWVudCIsICJkaXN0YW5jZSIsICJpc1RhcFRvdWNoVGltZSIsICJkZWx0YVRpbWUiLCAicHJldmVudFNyYyIsICJoYXNQYXJlbnQiLCAibm9kZSIsICJwYXJlbnROb2RlIiwgImdldENlbnRlciIsICJwb2ludGVyc0xlbmd0aCIsICJjbGllbnRYIiwgInkiLCAiY2xpZW50WSIsICJzaW1wbGVDbG9uZUlucHV0RGF0YSIsICJ0aW1lU3RhbXAiLCAiY2VudGVyIiwgImRlbHRhWCIsICJkZWx0YVkiLCAiZ2V0RGlzdGFuY2UiLCAicDEiLCAicDIiLCAic3FydCIsICJnZXRBbmdsZSIsICJhdGFuMiIsICJQSSIsICJnZXREaXJlY3Rpb24iLCAiZ2V0VmVsb2NpdHkiLCAiY29tcHV0ZUlucHV0RGF0YSIsICJmaXJzdElucHV0IiwgImZpcnN0TXVsdGlwbGUiLCAib2Zmc2V0Q2VudGVyIiwgImFuZ2xlIiwgIm9mZnNldERlbHRhIiwgInByZXZEZWx0YSIsICJwcmV2SW5wdXQiLCAiZXZlbnRUeXBlIiwgIm92ZXJhbGxWZWxvY2l0eSIsICJvdmVyYWxsVmVsb2NpdHlYIiwgIm92ZXJhbGxWZWxvY2l0eVkiLCAic2NhbGUiLCAicm90YXRpb24iLCAibWF4UG9pbnRlcnMiLCAidmVsb2NpdHkiLCAidmVsb2NpdHlYIiwgInZlbG9jaXR5WSIsICJsYXN0IiwgImxhc3RJbnRlcnZhbCIsICJ2IiwgInNyY0V2ZW50VGFyZ2V0IiwgImNvbXBvc2VkUGF0aCIsICJpbnB1dEhhbmRsZXIiLCAicG9pbnRlcnNMZW4iLCAiY2hhbmdlZFBvaW50ZXJzTGVuIiwgImNoYW5nZWRQb2ludGVycyIsICJpc0ZpcnN0IiwgImlzRmluYWwiLCAicmVjb2duaXplIiwgInNwbGl0U3RyIiwgImFkZEV2ZW50TGlzdGVuZXJzIiwgInR5cGVzIiwgInJlbW92ZUV2ZW50TGlzdGVuZXJzIiwgImdldFdpbmRvd0ZvckVsZW1lbnQiLCAiZG9jIiwgIm93bmVyRG9jdW1lbnQiLCAiZGVmYXVsdFZpZXciLCAiSW5wdXQiLCAiaW5wdXRUYXJnZXQiLCAiZG9tSGFuZGxlciIsICJldiIsICJpbml0IiwgImV2RWwiLCAiZXZUYXJnZXQiLCAiZXZXaW4iLCAiZGVzdHJveSIsICJpbkFycmF5IiwgImZpbmRCeUtleSIsICJQT0lOVEVSX0lOUFVUX01BUCIsICJwb2ludGVyZG93biIsICJwb2ludGVybW92ZSIsICJwb2ludGVydXAiLCAicG9pbnRlcmNhbmNlbCIsICJwb2ludGVyb3V0IiwgIklFMTBfUE9JTlRFUl9UWVBFX0VOVU0iLCAiUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyIsICJQT0lOVEVSX1dJTkRPV19FVkVOVFMiLCAiTVNQb2ludGVyRXZlbnQiLCAiUG9pbnRlckV2ZW50IiwgIlBvaW50ZXJFdmVudElucHV0IiwgIl9JbnB1dCIsICJfdGhpcyIsICJwb2ludGVyRXZlbnRzIiwgInJlbW92ZVBvaW50ZXIiLCAiZXZlbnRUeXBlTm9ybWFsaXplZCIsICJwb2ludGVyVHlwZSIsICJpc1RvdWNoIiwgInN0b3JlSW5kZXgiLCAicG9pbnRlcklkIiwgImJ1dHRvbiIsICJ0b0FycmF5IiwgInVuaXF1ZUFycmF5IiwgInNvcnQiLCAicmVzdWx0cyIsICJUT1VDSF9JTlBVVF9NQVAiLCAidG91Y2hzdGFydCIsICJ0b3VjaG1vdmUiLCAidG91Y2hlbmQiLCAidG91Y2hjYW5jZWwiLCAiVG91Y2hJbnB1dCIsICJ0YXJnZXRJZHMiLCAidG91Y2hlcyIsICJnZXRUb3VjaGVzIiwgInRhcmdldFRvdWNoZXMiLCAiYWxsVG91Y2hlcyIsICJpZGVudGlmaWVyIiwgImNoYW5nZWRUb3VjaGVzIiwgImNoYW5nZWRUYXJnZXRUb3VjaGVzIiwgInRvdWNoIiwgIk1PVVNFX0lOUFVUX01BUCIsICJtb3VzZWRvd24iLCAibW91c2Vtb3ZlIiwgIm1vdXNldXAiLCAiTW91c2VJbnB1dCIsICJwcmVzc2VkIiwgIndoaWNoIiwgIkRFRFVQX1RJTUVPVVQiLCAic2V0TGFzdFRvdWNoIiwgImV2ZW50RGF0YSIsICJwcmltYXJ5VG91Y2giLCAibGFzdFRvdWNoIiwgImx0cyIsICJsYXN0VG91Y2hlcyIsICJyZWNvcmRUb3VjaGVzIiwgImlzU3ludGhldGljRXZlbnQiLCAiZHgiLCAiZHkiLCAiVG91Y2hNb3VzZUlucHV0IiwgIl9tYW5hZ2VyIiwgImlucHV0RXZlbnQiLCAiaW5wdXREYXRhIiwgImlzTW91c2UiLCAic291cmNlQ2FwYWJpbGl0aWVzIiwgImZpcmVzVG91Y2hFdmVudHMiLCAibW91c2UiLCAiaW52b2tlQXJyYXlBcmciLCAiU1RBVEVfRkFJTEVEIiwgIl91bmlxdWVJZCIsICJnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyIiwgIm90aGVyUmVjb2duaXplciIsICJzdGF0ZVN0ciIsICJSZWNvZ25pemVyIiwgInNpbXVsdGFuZW91cyIsICJyZXF1aXJlRmFpbCIsICJyZWNvZ25pemVXaXRoIiwgImRyb3BSZWNvZ25pemVXaXRoIiwgInJlcXVpcmVGYWlsdXJlIiwgImRyb3BSZXF1aXJlRmFpbHVyZSIsICJoYXNSZXF1aXJlRmFpbHVyZXMiLCAiY2FuUmVjb2duaXplV2l0aCIsICJhZGRpdGlvbmFsRXZlbnQiLCAidHJ5RW1pdCIsICJjYW5FbWl0IiwgImlucHV0RGF0YUNsb25lIiwgInJlc2V0IiwgIlRhcFJlY29nbml6ZXIiLCAiX1JlY29nbml6ZXIiLCAidGFwcyIsICJpbnRlcnZhbCIsICJ0aW1lIiwgInRocmVzaG9sZCIsICJwb3NUaHJlc2hvbGQiLCAicFRpbWUiLCAicENlbnRlciIsICJfdGltZXIiLCAiX2lucHV0IiwgImNvdW50IiwgIl90aGlzMiIsICJ2YWxpZFBvaW50ZXJzIiwgInZhbGlkTW92ZW1lbnQiLCAidmFsaWRUb3VjaFRpbWUiLCAiZmFpbFRpbWVvdXQiLCAidmFsaWRJbnRlcnZhbCIsICJ2YWxpZE11bHRpVGFwIiwgIl90aGlzMyIsICJjbGVhclRpbWVvdXQiLCAidGFwQ291bnQiLCAiQXR0clJlY29nbml6ZXIiLCAiYXR0clRlc3QiLCAib3B0aW9uUG9pbnRlcnMiLCAiaXNSZWNvZ25pemVkIiwgImlzVmFsaWQiLCAiZGlyZWN0aW9uU3RyIiwgIlBhblJlY29nbml6ZXIiLCAiX0F0dHJSZWNvZ25pemVyIiwgInBYIiwgInBZIiwgImRpcmVjdGlvblRlc3QiLCAiaGFzTW92ZWQiLCAiU3dpcGVSZWNvZ25pemVyIiwgIlBpbmNoUmVjb2duaXplciIsICJpbk91dCIsICJSb3RhdGVSZWNvZ25pemVyIiwgIlByZXNzUmVjb2duaXplciIsICJ2YWxpZFRpbWUiLCAiZGVmYXVsdHMiLCAiZG9tRXZlbnRzIiwgImlucHV0Q2xhc3MiLCAiY3NzUHJvcHMiLCAidXNlclNlbGVjdCIsICJ0b3VjaFNlbGVjdCIsICJ0b3VjaENhbGxvdXQiLCAiY29udGVudFpvb21pbmciLCAidXNlckRyYWciLCAidGFwSGlnaGxpZ2h0Q29sb3IiLCAicHJlc2V0IiwgInRvZ2dsZUNzc1Byb3BzIiwgIm9sZENzc1Byb3BzIiwgIk1hbmFnZXIiLCAiaGFuZGxlcnMiLCAic3RvcCIsICJmb3JjZSIsICJzdG9wcGVkIiwgImN1clJlY29nbml6ZXIiLCAiZXhpc3RpbmciLCAidGFyZ2V0UmVjb2duaXplciIsICJldmVudHMiLCAiZ2VzdHVyZUV2ZW50IiwgImNyZWF0ZUV2ZW50IiwgImluaXRFdmVudCIsICJnZXN0dXJlIiwgImRpc3BhdGNoRXZlbnQiLCAiU0lOR0xFX1RPVUNIX0lOUFVUX01BUCIsICJTaW5nbGVUb3VjaElucHV0IiwgInN0YXJ0ZWQiLCAibm9ybWFsaXplU2luZ2xlVG91Y2hlcyIsICJjaGFuZ2VkIiwgImRlcHJlY2F0ZSIsICJtZXNzYWdlIiwgImRlcHJlY2F0aW9uTWVzc2FnZSIsICJFcnJvciIsICJzdGFjayIsICJsb2ciLCAiY29uc29sZSIsICJ3YXJuIiwgImV4dGVuZCIsICJkZXN0IiwgIm1lcmdlIiwgImluaGVyaXQiLCAiY2hpbGQiLCAiYmFzZSIsICJjaGlsZFAiLCAiYmFzZVAiLCAiX3N1cGVyIiwgImJpbmRGbiIsICJSZWFsSGFtbWVyIiwgIkhhbW1lciIsICJWRVJTSU9OIiwgIklOUFVUX01PVkUiLCAiU1RBVEVfUE9TU0lCTEUiLCAiU1RBVEVfQkVHQU4iLCAiU1RBVEVfQ0hBTkdFRCIsICJTVEFURV9FTkRFRCIsICJTVEFURV9SRUNPR05JWkVEIiwgIlNUQVRFX0NBTkNFTExFRCIsICJUYXAiLCAiUGFuIiwgIlN3aXBlIiwgIlBpbmNoIiwgIlJvdGF0ZSIsICJQcmVzcyIsICJERUxFVEUiLCAiZGVlcE9iamVjdEFzc2lnbiIsICJtZXJnZWQiLCAiZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5IiwgInN0cmlwRGVsZXRlIiwgIl9sZW4yIiwgIl9rZXkyIiwgIl9jb25jYXRJbnN0YW5jZVByb3BlcnR5IiwgInNldFRpbWUiLCAiZ2V0VGltZSIsICJfc3RlcCIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX1JlZmxlY3Qkb3duS2V5cyIsICJzIiwgImNsb25lIiwgImVyciIsICJfaSIsICJfT2JqZWN0JGtleXMiLCAiX09iamVjdCRrZXlzMiIsICJhQ29uc3RydWN0b3IiLCAibmF0aXZlQ29uc3RydWN0IiwgIk5FV19UQVJHRVRfQlVHIiwgIkFSR1NfQlVHIiwgIlRhcmdldCIsICJuZXdUYXJnZXQiLCAiJGFyZ3MiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICIkJGgiLCAiX3NldFByb3RvdHlwZU9mIiwgInAiLCAiX09iamVjdCRzZXRQcm90b3R5cGVPZiIsICJfaW5oZXJpdHMiLCAiX09iamVjdCRjcmVhdGUiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfT2JqZWN0JGdldFByb3RvdHlwZU9mIiwgIl9fZXNNb2R1bGUiLCAiJEVycm9yIiwgIlRFU1QiLCAiVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZIiwgIklTX1Y4X09SX0NIQUtSQV9TVEFDSyIsICJlcnJvclN0YWNrSW5zdGFsbGFibGUiLCAiY2xlYXJFcnJvclN0YWNrIiwgImRyb3BFbnRyaWVzIiwgInByZXBhcmVTdGFja1RyYWNlIiwgIkVSUk9SX1NUQUNLX0lOU1RBTExBQkxFIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIlJlc3VsdCIsICJSZXN1bHRQcm90b3R5cGUiLCAiaXRlcmF0ZSIsICJ1bmJvdW5kRnVuY3Rpb24iLCAiaXRlckZuIiwgIkFTX0VOVFJJRVMiLCAiSVNfUkVDT1JEIiwgIklTX0lURVJBVE9SIiwgIklOVEVSUlVQVEVEIiwgImNvbmRpdGlvbiIsICJjYWxsRm4iLCAiY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyIsICJleGNlcHRpb25zIiwgImluc3RhbGxFcnJvckNhdXNlIiwgImNhdXNlIiwgImluc3RhbGxFcnJvclN0YWNrIiwgIm5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50IiwgIiRkZWZhdWx0IiwgIiRBZ2dyZWdhdGVFcnJvciIsICJlcnJvcnMiLCAiaXNJbnN0YW5jZSIsICJBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSIsICJlcnJvcnNBcnJheSIsICJBZ2dyZWdhdGVFcnJvciIsICIkbG9jYXRpb24iLCAiZGVmZXIiLCAiY2hhbm5lbCIsICJwb3J0IiwgInNldFNwZWNpZXMiLCAiQ09OU1RSVUNUT1JfTkFNRSIsICJhbkluc3RhbmNlIiwgInNwZWNpZXNDb25zdHJ1Y3RvciIsICJkZWZhdWx0Q29uc3RydWN0b3IiLCAiZW5naW5lSXNJb3MiLCAiSVNfSU9TIiwgIklTX05PREUiLCAic2V0SW1tZWRpYXRlIiwgImNsZWFySW1tZWRpYXRlIiwgIkRpc3BhdGNoIiwgIk1lc3NhZ2VDaGFubmVsIiwgImNvdW50ZXIiLCAicXVldWUiLCAiT05SRUFEWVNUQVRFQ0hBTkdFIiwgImxvY2F0aW9uIiwgInJ1biIsICJydW5uZXIiLCAiZXZlbnRMaXN0ZW5lciIsICJnbG9iYWxQb3N0TWVzc2FnZURlZmVyIiwgInBvc3RNZXNzYWdlIiwgInByb3RvY29sIiwgImhvc3QiLCAibmV4dFRpY2siLCAicG9ydDIiLCAicG9ydDEiLCAib25tZXNzYWdlIiwgImltcG9ydFNjcmlwdHMiLCAicmVtb3ZlQ2hpbGQiLCAidGFzayIsICJRdWV1ZSIsICJoZWFkIiwgInRhaWwiLCAiUXVldWUkMyIsICJlbnRyeSIsICJub3RpZnkiLCAidG9nZ2xlIiwgInByb21pc2UiLCAidGhlbiIsICJlbmdpbmVJc0lvc1BlYmJsZSIsICJQZWJibGUiLCAiZW5naW5lSXNXZWJvc1dlYmtpdCIsICJtYWNyb3Rhc2siLCAiSVNfSU9TX1BFQkJMRSIsICJJU19XRUJPU19XRUJLSVQiLCAiTXV0YXRpb25PYnNlcnZlciIsICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIiwgIlByb21pc2UiLCAicXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yIiwgIm1pY3JvdGFzayIsICJmbHVzaCIsICJleGl0IiwgImVudGVyIiwgInJlc29sdmUiLCAiY3JlYXRlVGV4dE5vZGUiLCAib2JzZXJ2ZSIsICJjaGFyYWN0ZXJEYXRhIiwgIm1pY3JvdGFza18xIiwgInBlcmZvcm0iLCAicHJvbWlzZU5hdGl2ZUNvbnN0cnVjdG9yIiwgImVuZ2luZUlzRGVubyIsICJlbmdpbmVJc0Jyb3dzZXIiLCAiTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yIiwgIklTX0JST1dTRVIiLCAiSVNfREVOTyIsICJOYXRpdmVQcm9taXNlUHJvdG90eXBlIiwgIlNVQkNMQVNTSU5HIiwgIk5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCIsICJQcm9taXNlUmVqZWN0aW9uRXZlbnQiLCAiRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IiLCAiUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UiLCAiR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSIsICJGYWtlUHJvbWlzZSIsICJwcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24iLCAiUkVKRUNUSU9OX0VWRU5UIiwgIlByb21pc2VDYXBhYmlsaXR5IiwgInJlamVjdCIsICIkJHJlc29sdmUiLCAiJCRyZWplY3QiLCAibmV3UHJvbWlzZUNhcGFiaWxpdHkiLCAiSW50ZXJuYWwiLCAiT3duUHJvbWlzZUNhcGFiaWxpdHkiLCAiaG9zdFJlcG9ydEVycm9ycyIsICJQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24iLCAibmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUiLCAiUFJPTUlTRSIsICJnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSIsICJQcm9taXNlQ29uc3RydWN0b3IiLCAiUHJvbWlzZVByb3RvdHlwZSIsICJuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkiLCAiRElTUEFUQ0hfRVZFTlQiLCAiVU5IQU5ETEVEX1JFSkVDVElPTiIsICJpc1RoZW5hYmxlIiwgImNhbGxSZWFjdGlvbiIsICJyZWFjdGlvbiIsICJleGl0ZWQiLCAib2siLCAiZmFpbCIsICJyZWplY3Rpb24iLCAib25IYW5kbGVVbmhhbmRsZWQiLCAiaXNSZWplY3QiLCAibm90aWZpZWQiLCAicmVhY3Rpb25zIiwgIm9uVW5oYW5kbGVkIiwgInJlYXNvbiIsICJpc1VuaGFuZGxlZCIsICJ1bndyYXAiLCAiaW50ZXJuYWxSZWplY3QiLCAiaW50ZXJuYWxSZXNvbHZlIiwgIndyYXBwZXIiLCAiZXhlY3V0b3IiLCAib25GdWxmaWxsZWQiLCAib25SZWplY3RlZCIsICJQcm9taXNlV3JhcHBlciIsICJzZXRUb1N0cmluZ1RhZyQxIiwgInNldFNwZWNpZXMkMSIsICJwcm9taXNlU3RhdGljc0luY29ycmVjdEl0ZXJhdGlvbiIsICJjYXBhYmlsaXR5IiwgIiRwcm9taXNlUmVzb2x2ZSIsICJyZW1haW5pbmciLCAiYWxyZWFkeUNhbGxlZCIsICJjYXRjaCIsICJyYWNlIiwgInByb21pc2VSZXNvbHZlIiwgInByb21pc2VDYXBhYmlsaXR5IiwgIlByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIiLCAiQ0hFQ0tfV1JBUFBFUiIsICJhbGxTZXR0bGVkIiwgInN0YXR1cyIsICJQUk9NSVNFX0FOWV9FUlJPUiIsICJhbnkiLCAiYWxyZWFkeVJlc29sdmVkIiwgImFscmVhZHlSZWplY3RlZCIsICJmaW5hbGx5IiwgIm9uRmluYWxseSIsICJpc0Z1bmN0aW9uIiwgIndpdGhSZXNvbHZlcnMiLCAidHJ5IiwgIl9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSIsICJfUHJvbWlzZSIsICJfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkiLCAiX3JlZ2VuZXJhdG9yUnVudGltZSIsICJhc3luY0l0ZXJhdG9yIiwgInRvU3RyaW5nVGFnIiwgImRlZmluZSIsICJHZW5lcmF0b3IiLCAiQ29udGV4dCIsICJtYWtlSW52b2tlTWV0aG9kIiwgInRyeUNhdGNoIiwgImgiLCAiR2VuZXJhdG9yRnVuY3Rpb24iLCAiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCAiZyIsICJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCAiX2ludm9rZSIsICJBc3luY0l0ZXJhdG9yIiwgImludm9rZSIsICJfX2F3YWl0IiwgImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwgImRlbGVnYXRlIiwgIm1heWJlSW52b2tlRGVsZWdhdGUiLCAic2VudCIsICJfc2VudCIsICJkaXNwYXRjaEV4Y2VwdGlvbiIsICJhYnJ1cHQiLCAicmVzdWx0TmFtZSIsICJuZXh0TG9jIiwgInB1c2hUcnlFbnRyeSIsICJ0cnlMb2MiLCAiY2F0Y2hMb2MiLCAiZmluYWxseUxvYyIsICJhZnRlckxvYyIsICJ0cnlFbnRyaWVzIiwgInJlc2V0VHJ5RW50cnkiLCAiY29tcGxldGlvbiIsICJpc05hTiIsICJkaXNwbGF5TmFtZSIsICJpc0dlbmVyYXRvckZ1bmN0aW9uIiwgIm1hcmsiLCAiYXdyYXAiLCAiYXN5bmMiLCAicG9wIiwgInJ2YWwiLCAiaGFuZGxlIiwgImNvbXBsZXRlIiwgImZpbmlzaCIsICJkZWxlZ2F0ZVlpZWxkIiwgInJ1bnRpbWUiLCAicmVnZW5lcmF0b3IiLCAicmVnZW5lcmF0b3JSdW50aW1lIiwgImFjY2lkZW50YWxTdHJpY3RNb2RlIiwgImFycmF5QnVmZmVyTm9uRXh0ZW5zaWJsZSIsICJBcnJheUJ1ZmZlciIsICJidWZmZXIiLCAiaXNFeHRlbnNpYmxlIiwgIkFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSIsICIkaXNFeHRlbnNpYmxlIiwgIm9iamVjdElzRXh0ZW5zaWJsZSIsICJmcmVlemluZyIsICJwcmV2ZW50RXh0ZW5zaW9ucyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUiLCAiRlJFRVpJTkciLCAiUkVRVUlSRUQiLCAic2V0TWV0YWRhdGEiLCAib2JqZWN0SUQiLCAid2Vha0RhdGEiLCAibWV0YSIsICJpbnRlcm5hbE1ldGFkYXRhTW9kdWxlIiwgImZhc3RLZXkiLCAiZ2V0V2Vha0RhdGEiLCAib25GcmVlemUiLCAiSW50ZXJuYWxNZXRhZGF0YU1vZHVsZSIsICJpbnRlcm5hbFN0YXRlR2V0dGVyRm9yIiwgImNvbGxlY3Rpb24iLCAiY29tbW9uIiwgIklTX1dFQUsiLCAiQURERVIiLCAiZXhwb3J0ZWQiLCAiSVNfQURERVIiLCAiZ2V0Q29uc3RydWN0b3IiLCAic2V0U3Ryb25nIiwgImRlZmluZUJ1aWx0SW5zIiwgInVuc2FmZSIsICJjb2xsZWN0aW9uU3Ryb25nIiwgInByZXZpb3VzIiwgImdldEVudHJ5IiwgInJlbW92ZWQiLCAiSVRFUkFUT1JfTkFNRSIsICJnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZSIsICJnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUiLCAiJHNvbWUiLCAibWVyZ2VTb3J0IiwgImNvbXBhcmVmbiIsICJtaWRkbGUiLCAiaW5zZXJ0aW9uU29ydCIsICJsbGVuZ3RoIiwgInJsZW5ndGgiLCAibGluZGV4IiwgInJpbmRleCIsICJhcnJheVNvcnQiLCAiZmlyZWZveCIsICJlbmdpbmVGZlZlcnNpb24iLCAiZW5naW5lSXNJZU9yRWRnZSIsICJ3ZWJraXQiLCAiZW5naW5lV2Via2l0VmVyc2lvbiIsICJpbnRlcm5hbFNvcnQiLCAiRkYiLCAiSUVfT1JfRURHRSIsICJWOCIsICJXRUJLSVQiLCAibmF0aXZlU29ydCIsICJGQUlMU19PTl9VTkRFRklORUQiLCAiRkFJTFNfT05fTlVMTCIsICJTVFJJQ1RfTUVUSE9EIiwgIlNUQUJMRV9TT1JUIiwgImNvZGUiLCAiZnJvbUNoYXJDb2RlIiwgIml0ZW1zTGVuZ3RoIiwgImFycmF5TGVuZ3RoIiwgImdldFJhbmRvbVZhbHVlcyIsICJybmRzOCIsICJVaW50OEFycmF5IiwgInJuZyIsICJjcnlwdG8iLCAiYnl0ZVRvSGV4IiwgIm5hdGl2ZSIsICJyYW5kb21VVUlEIiwgInY0IiwgImJ1ZiIsICJybmRzIiwgImlzSWQiLCAiZGVsYXkiLCAiSW5maW5pdHkiLCAic2V0T3B0aW9ucyIsICJfZmx1c2hJZk5lZWRlZCIsICJfZXh0ZW5kZWQiLCAibWUiLCAiX2xlbiIsICJfa2V5IiwgIl9xdWV1ZSIsICJfdGltZW91dCIsICJfc2V0VGltZW91dCIsICJfc3BsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJEYXRhU2V0UGFydCIsICJzZW5kZXJJZCIsICJfc3Vic2NyaWJlcnMiLCAic3Vic2NyaWJlciIsICJTZXQiLCAiRGF0YVN0cmVhbSIsICJwYWlycyIsICJfcGFpcnMiLCAiX3N0ZXAkdmFsdWUiLCAidDAiLCAiX2l0ZXJhdG9yMiIsICJfc3RlcDIiLCAiX3N0ZXAyJHZhbHVlIiwgIl9pdGVyYXRvcjMiLCAiX3N0ZXAzIiwgIl9zdGVwMyR2YWx1ZSIsICJfaXRlcmF0b3I0IiwgIl9zdGVwNCIsICJfc3RlcDQkdmFsdWUiLCAiX2NvbnRleHQ1IiwgInBhaXIiLCAiX2NvbnRleHQ2IiwgIl9zdGVwNSIsICJfaXRlcmF0b3I1IiwgIl9zdGVwNSR2YWx1ZSIsICJfTWFwIiwgIl9TZXQiLCAidG9JZEFycmF5IiwgInRvSXRlbUFycmF5IiwgIl9zdGVwNiIsICJfaXRlcmF0b3I2IiwgIl9zdGVwNiR2YWx1ZSIsICJfU3ltYm9sJGl0ZXJhdG9yMiIsICJfY2FsbGVlIiwgIl9pdGVyYXRvcjciLCAiX3N0ZXA3IiwgIl9zdGVwNyR2YWx1ZSIsICJfY29udGV4dDciLCAiX3N0ZXA4IiwgIl9pdGVyYXRvcjgiLCAiX3N0ZXA4JHZhbHVlIiwgIl9jYWxsZWUyIiwgIl9pdGVyYXRvcjkiLCAiX3N0ZXA5IiwgIl9zdGVwOSR2YWx1ZSIsICJfY29udGV4dDgiLCAiX2dldEl0ZXJhdG9yIiwgImN1cnIiLCAibWF4SXRlbSIsICJtYXhWYWx1ZSIsICJfY3VyciR2YWx1ZSIsICJtaW5JdGVtIiwgIm1pblZhbHVlIiwgIl9jdXJyJHZhbHVlMiIsICJhY2N1bXVsYXRvciIsICJfc3RlcDEwIiwgIl9pdGVyYXRvcjEwIiwgIl9zdGVwMTAkdmFsdWUiLCAiX2NvbnRleHQ5IiwgIl9zb3J0SW5zdGFuY2VQcm9wZXJ0eSIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgImlkQSIsICJpdGVtQSIsICJfcmVmNCIsICJpZEIiLCAiaXRlbUIiLCAiRGF0YVNldCIsICJfRGF0YVNldFBhcnQiLCAiX2NyZWF0ZVN1cGVyIiwgIl9vcHRpb25zIiwgIl9kYXRhIiwgIl9pZFByb3AiLCAiZmllbGRJZCIsICJhZGRlZElkcyIsICJpZHNUb0FkZCIsICJkIiwgIl9zb21lSW5zdGFuY2VQcm9wZXJ0eSIsICJfYWRkSXRlbSIsICJfdHJpZ2dlciIsICJ1cGRhdGVkSWRzIiwgInVwZGF0ZWREYXRhIiwgImlkUHJvcCIsICJhZGRPclVwZGF0ZSIsICJvcmlnSWQiLCAiZnVsbEl0ZW0iLCAib2xkSXRlbSIsICJfT2JqZWN0JGFzc2lnbiIsICJfdXBkYXRlSXRlbSIsICJfdGhpczQiLCAidXBkYXRlRXZlbnREYXRhIiwgInVwZGF0ZXMiLCAiaWRzIiwgIl9pdGVtIiwgInJldHVyblR5cGUiLCAiaXRlbUlkcyIsICJpdGVtSWQiLCAiX2tleXNJbnN0YW5jZVByb3BlcnR5IiwgIm9yZGVyIiwgIl9zb3J0IiwgImZpZWxkcyIsICJfZmlsdGVyRmllbGRzIiwgInJlc3VsdGFudCIsICJtYXBwZWRJdGVtcyIsICJmaWx0ZXJlZEl0ZW0iLCAiZmllbGQiLCAiYXYiLCAiYnYiLCAicmVtb3ZlZElkcyIsICJyZW1vdmVkSXRlbXMiLCAiaWRlbnQiLCAibWF4RmllbGQiLCAiX3ZhbHVlc0luc3RhbmNlUHJvcGVydHkiLCAiaXRlbUZpZWxkIiwgIm1pbkZpZWxkIiwgImV4aXN0cyIsICJ1dWlkNCIsICJfSlNPTiRzdHJpbmdpZnkiLCAiX29iamVjdFNwcmVhZCIsICJfZW50cmllc0luc3RhbmNlUHJvcGVydHkiLCAiRGF0YVZpZXciLCAiX2xpc3RlbmVyIiwgIl9vbkV2ZW50IiwgInNldERhdGEiLCAiZ2V0RGF0YVNldCIsICJnZXRJZHMiLCAiX2lkcyIsICJvbGRJZHMiLCAibmV3SWRzIiwgInZpZXdPcHRpb25zIiwgInRoaXNGaWx0ZXIiLCAib3B0aW9uc0ZpbHRlciIsICJkZWZhdWx0RmlsdGVyIiwgInN0cmVhbSIsICJfdGhpcyRfZGF0YSIsICJvbGRJdGVtcyIsICJ1cGRhdGVkSXRlbXMiLCAiaXNEYXRhU2V0TGlrZSIsICJkaXN0aW5jdCIsICJ1cGRhdGVPbmx5IiwgImN4IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgImNhY2hlIiwgInByb3RvdHlwZSIsICJrZXlzIiwgImRlc2NyaXB0b3JzIiwgImZpbHRlciIsICJwb3NpdGlvbiIsICJtYXRjaGVzIiwgImhhc093blByb3BlcnR5IiwgInJlZHVjZXIiLCAidmFsdWUiLCAiZGVsaW1pdGVyIiwgImRlZmluZSIsICJzaXplIiwgImxlbmd0aCIsICJ0b2tlbiIsICJmaWx0ZXIiLCAiZWFjaCIsICJ0b2tlbiIsICJ2YWx1ZSIsICJtYXRjaCIsICJwcm90b3R5cGUiLCAidmFsdWUiLCAidG9TdHJpbmciLCAiZWFjaCIsICJlbmNvZGUiLCAidmFsdWUiLCAibWF0Y2giLCAia2V5cyIsICJ2YWx1ZSIsICJpc0Zvcm1EYXRhIiwgImlzRmlsZUxpc3QiLCAidHJhbnNpdGlvbmFsIiwgImxpbmUiLCAidmFsdWUiLCAibWF0Y2giLCAiZmlsdGVyIiwgImNoYXIiLCAic2VsZiIsICJrZXlzIiwgImNvbXB1dGVkIiwgInByb3RvdHlwZSIsICJ2YWx1ZSIsICJ2YWxpZGF0ZVN0YXR1cyIsICJtYXRjaCIsICJtaW4iLCAibm93IiwgIm5vdyIsICJmbHVzaCIsICJvcmlnaW4iLCAidmFsdWUiLCAibWF0Y2giLCAibWVyZ2UiLCAidG9rZW4iLCAidmFsdWUiLCAidHJhbnNpdGlvbmFsIiwgImxlbmd0aCIsICJzaWduYWwiLCAidmFsdWUiLCAiZG9uZSIsICJyZXMiLCAibGVuZ3RoIiwgImZsdXNoIiwgInZhbHVlIiwgImxlbmd0aCIsICJ2ZXJzaW9uIiwgInZhbHVlIiwgImtleXMiLCAidmFsaWRhdG9ycyIsICJ0cmFuc2l0aW9uYWwiLCAidG9rZW4iLCAidmFsdWUiLCAiQXhpb3MiLCAiQXhpb3NFcnJvciIsICJDYW5jZWxlZEVycm9yIiwgImlzQ2FuY2VsIiwgIkNhbmNlbFRva2VuIiwgIlZFUlNJT04iLCAiYWxsIiwgImlzQXhpb3NFcnJvciIsICJzcHJlYWQiLCAidG9Gb3JtRGF0YSIsICJBeGlvc0hlYWRlcnMiLCAiSHR0cFN0YXR1c0NvZGUiLCAibWVyZ2VDb25maWciLCAidmFsdWUiLCAiaUxvYWRlZENoaWxkcmVuIiwgInZhbHVlIiwgImN5Y2xlQ2hlY2siLCAibm9kZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImtleXMiLCAibm9kZSIsICJwcmVmaXgiLCAidXNlRGVwcmVjYXRlZEdlbmVyYXRlZEh0bWxJZCIsICJfcmVmIiwgInVzZU5ld0dlbmVyYXRlZEh0bWxJZCIsICJfcmVmMiIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJyIiwgIm8iLCAiaXNPYmplY3QiLCAiaXNJbnZlcnNlQ29sb3JNb2RlIiwgImdldENvbG9yTW9kZSIsICJnZXRPbiIsICJub2RlIiwgInNldE9uIiwgInZhbHVlIiwgIkNvbXB1dGVkIiwgImJhc2UiLCAiX3JlZiIsICJfcmVmMiIsICJnZXRDb21wdXRlZCIsICJvdmVyIiwgImJ1aWxkVGhlbWUiLCAiZ2V0UHJvdG90eXBlT2YiLCAicHJvdG90eXBlIiwgImtleSIsICJwcm9wZXJ0eSIsICJnZXQiLCAib3duS2V5cyIsICJtZXJnZURlZXAiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgInJnYiIsICJyZ2IiLCAibWF4IiwgInJvdW5kIiwgInJvdW5kIiwgImNzcyIsICJyZ2IiLCAiaHNsIiwgInJnYiIsICJyb3VuZCIsICJtaW4iLCAiZmxvb3IiLCAibWluIiwgIm1heCIsICJyZ2IyaHNsIiwgInBvdyIsICJjb3MiLCAic3FydCIsICJyb3VuZCIsICJudW0iLCAicm91bmQiLCAicm5kIiwgInJvdW5kIiwgInJnYiIsICJwb3ciLCAiYWJzIiwgInBvdyIsICJzaWduIiwgImFicyIsICJsYWIiLCAicG93IiwgInRlc3QiLCAicmdiIiwgInJnYiIsICJsY2giLCAidmFsdWUiLCAic3FydCIsICJwb3ciLCAicG93IiwgInNxcnQiLCAiUEkiLCAiY29zIiwgInNpbiIsICJhdGFuMiIsICJjb2xvcnMiLCAicmdiIiwgInBvdyIsICJjb2xvcnMiLCAidmFsdWUiLCAiZiIsICJfcG9zIiwgImNvbG9ycyIsICJsYWIiLCAicG93IiwgInNpbiIsICJjb3MiLCAibGlnaHRuZXNzIiwgImZsb29yIiwgImxvZyIsICJwb3ciLCAiZmxvb3IiLCAibnVtIiwgIm1pbiIsICJtYXgiLCAibGltaXRzIiwgInZhbHVlIiwgInNxcnQiLCAicG93IiwgIm1pbiIsICJtYXgiLCAiYXRhbjIiLCAiYWJzIiwgImNvcyIsICJzaW4iLCAiUEkiLCAiY29sb3JzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgImZsYXR0ZW4iLCAiX3JlZiIsICJldWlQYWxldHRlQ29sb3JCbGluZCIsICJfcmVmMiIsICJjb2xvcnMiLCAiYmFzZSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2xvb3AiLCAiaSIsICJldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQiLCAiaW5PcmlnaW5hbEZvcm1hdCIsICJ0cmFuc3BhcmVudGl6ZSIsICJ0aW50IiwgInNoYWRlIiwgInRpbnRPclNoYWRlIiwgImxpZ2h0bmVzcyIsICJkYXJrZW4iLCAiX3R5cGVvZiIsICJvIiwgIm1ha2VIaWdoQ29udHJhc3RDb2xvciIsICJsaWdodG5lc3MiLCAibWFrZURpc2FibGVkQ29udHJhc3RDb2xvciIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiY29sb3JzIiwgIl9yZWY2IiwgIl9yZWY3IiwgIl9yZWY4IiwgIl9yZWY5IiwgIl9yZWYxMCIsICJfcmVmMTEiLCAiX3JlZjEyIiwgIl9yZWYxMyIsICJfcmVmMTQiLCAiX3JlZjE1IiwgIl9yZWYxNiIsICJfcmVmMTciLCAiX3JlZjE4IiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl90eXBlb2YiLCAibyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl90eXBlb2YiLCAibG9naWNhbENTUyIsICJwcm9wZXJ0eSIsICJ2YWx1ZSIsICJsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrIiwgImNhbWVsQ2FzZSIsICJsb2dpY2FsU3R5bGUiLCAicHJvcGVydHkiLCAidmFsdWUiLCAiX2RlZmluZVByb3BlcnR5IiwgImxvZ2ljYWxTaXplQ1NTIiwgImxvZ2ljYWxUZXh0QWxpZ25DU1MiLCAidmFsdWUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgImxvZ2ljYWxTaG9ydGhhbmRDU1MiLCAicHJvcGVydHkiLCAidmFsdWUiLCAibG9naWNhbEJvcmRlclJhZGl1c0NTUyIsICJfcmVmIiwgIl9yZWYyIiwgIl9zbGljZWRUb0FycmF5IiwgIl90eXBlb2YiLCAibyIsICJfd3JhcFJlZ0V4cCIsICJlIiwgInIiLCAidCIsICJtYXRoV2l0aFVuaXRzIiwgInZhbHVlIiwgIm1hdGNoZXMiLCAiX3R5cGVvZiIsICJvIiwgInNpemVUb1BpeGVsIiwgImJhc2UiLCAiX3JlZiIsICJiYXNlIiwgImZvbnQiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiX3JlZjYiLCAiX3JlZjciLCAiX3JlZjgiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfcmVmIiwgIl9yZWYyIiwgImJhc2UiLCAiX3JlZiIsICJjb2xvcnMiLCAiZm9jdXMiLCAiZW1pdEV1aVByb3ZpZGVyV2FybmluZyIsICJwcm92aWRlck1lc3NhZ2UiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlN0eWxlU2hlZXQiLCAiaHlkcmF0ZSIsICJzaGVldCIsICJmbHVzaCIsICJhYnMiLCAidmFsdWUiLCAibGVuZ3RoIiwgInRyaW0iLCAiYXBwZW5kIiwgImxlbmd0aCIsICJ2YWx1ZSIsICJ0cmltIiwgInZhbHVlIiwgImxlbmd0aCIsICJwcm9wZXJ0eSIsICJjaGFyYWN0ZXIiLCAiY2hhcmFjdGVycyIsICJhcHBlbmQiLCAic2l6ZSIsICJhYnMiLCAidHJpbSIsICJsZW5ndGgiLCAic3RyaW5naWZ5IiwgImxlbmd0aCIsICJ3ZWFrTWVtb2l6ZSIsICJmdW5jIiwgImNhY2hlIiwgImNhY2hlIiwgImlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyIsICJjaGFyYWN0ZXIiLCAidG9SdWxlcyIsICJnZXRSdWxlcyIsICJ2YWx1ZSIsICJjb21wYXQiLCAicmVtb3ZlTGFiZWwiLCAibGVuZ3RoIiwgInByZWZpeGVyIiwgImNyZWF0ZUNhY2hlIiwgIm5vZGUiLCAic3RyaW5naWZ5IiwgInN0eWxpcyIsICJzdHlsZXMiLCAic2hlZXQiLCAiY2FjaGUiLCAiY2xhc3NOYW1lcyIsICJyZWdpc3RlclN0eWxlcyIsICJjYWNoZSIsICJpbnNlcnRTdHlsZXMiLCAiaXNEZXZlbG9wbWVudCIsICJpc0N1c3RvbVByb3BlcnR5IiwgInByb3BlcnR5IiwgImlzUHJvY2Vzc2FibGVWYWx1ZSIsICJ2YWx1ZSIsICJwcm9jZXNzU3R5bGVWYWx1ZSIsICJtYXRjaCIsICJrZXlmcmFtZXMiLCAibmV4dCIsICJzdHlsZXMiLCAic3RyaW5nIiwgIlJlYWN0IiwgInN5bmNGYWxsYmFjayIsICJ1c2VJbnNlcnRpb25FZmZlY3QiLCAiaXNEZXZlbG9wbWVudCIsICJ3aXRoRW1vdGlvbkNhY2hlIiwgImZ1bmMiLCAiY2FjaGUiLCAiZ2V0VGhlbWUiLCAiVGhlbWVQcm92aWRlciIsICJjcmVhdGVFbW90aW9uUHJvcHMiLCAiSW5zZXJ0aW9uIiwgIl9yZWYiLCAiY2FjaGUiLCAiaXNEZXZlbG9wbWVudCIsICJSZWFjdCIsICJqc3giLCAiY2FjaGUiLCAic3R5bGVzIiwgInNoZWV0IiwgIm5vZGUiLCAidG9TdHJpbmciLCAiX2V4dGVuZHMiLCAidXNlRXVpVGhlbWUiLCAid2l0aEV1aVRoZW1lIiwgIkNvbXBvbmVudCIsICJSZW5kZXIiLCAiUmVuZGVyV2l0aEV1aVRoZW1lIiwgIl9yZWYiLCAidGhyb3R0bGUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgInNvcnRNYXBCeUxhcmdlVG9TbWFsbFZhbHVlcyIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgInNvcnRNYXBCeVNtYWxsVG9MYXJnZVZhbHVlcyIsICJfcmVmNSIsICJfcmVmNiIsICJfcmVmNyIsICJfcmVmOCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciIsICJfcmVmIiwgInRocm90dGxlIiwgImltcG9ydF9yZWFjdCIsICJ1c2VDdXJyZW50RXVpQnJlYWtwb2ludCIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiY2xvbmVFbGVtZW50V2l0aENzcyIsICJldWlTdHlsaXNQcmVmaXhlciIsICJwcmVmaXgiLCAidmFsdWUiLCAibGVuZ3RoIiwgImNhY2hlIiwgIm1lcmdlIiwgImNzcyIsICJjcmVhdGVFbW90aW9uIiwgInZhbHVlIiwgImtleWZyYW1lcyIsICJhbmltYXRpb24iLCAiaW5qZWN0R2xvYmFsIiwgImN4IiwgImh5ZHJhdGUiLCAiZmx1c2giLCAiY2xhc3NuYW1lcyIsICJjc3MiLCAiaW1wb3J0X3JlYWN0IiwgIkV1aUVtb3Rpb25UaGVtZVByb3ZpZGVyIiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJ1c2VVcGRhdGVFZmZlY3QiLCAiaW1wb3J0X3JlYWN0IiwgInVzZUNvbWJpbmVkUmVmcyIsICJub2RlIiwgInNldE11bHRpcGxlUmVmcyIsICJfZXh0ZW5kcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiRXVpVGhlbWVNZW1vaXplZFN0eWxlc1Byb3ZpZGVyIiwgIl9yZWYiLCAiZ2V0TWVtb2l6ZWRTdHlsZXMiLCAidXNlRXVpTWVtb2l6ZWRTdHlsZXMiLCAid2l0aEV1aVN0eWxlc01lbW9pemVyIiwgIkNvbXBvbmVudCIsICJSZW5kZXIiLCAiUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyIiwgIl9yZWYyIiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIkV1aVRoZW1lUHJvdmlkZXIiLCAiX3JlZiIsICJzZXRHbG9iYWxDU1NWYXJpYWJsZXMiLCAiaXNFcXVhbCIsICJjc3MiLCAiX3JlZjIiLCAiY2xvbmVFbGVtZW50IiwgIlJlYWN0IiwgInVzZUlzV2l0aGluQnJlYWtwb2ludHMiLCAibWluIiwgIl90eXBlb2YiLCAibyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiQ2FudmFzVGV4dFV0aWxzIiwgIl9yZWYiLCAiZm9udCIsICJnZXQiLCAiaW1wb3J0X3JlYWN0IiwgImhhc0NoYXJzVG9SZXBsYWNlIiwgImNoYXIiLCAib25UYWJ1bGFyQ29weSIsICJWaXN1YWxseUhpZGUiLCAiX3JlZiIsICJPdmVycmlkZUNvcGllZFRhYnVsYXJDb250ZW50IiwgIl9yZWYyIiwgIlJlYWN0IiwgImZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmIiwgIm5vZGUiLCAiaXNVbmRlZmluZWQiLCAidmFsdWUiLCAiaXNOdWxsIiwgImlzTmlsIiwgImlzRGF0ZSIsICJ2YWx1ZSIsICJtb21lbnQiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJfaXNGdW5jdGlvbiIsICJpc0FycmF5IiwgIl9pc0FycmF5IiwgImlzU3RyaW5nIiwgIl9pc1N0cmluZyIsICJpc0Jvb2xlYW4iLCAiX2lzQm9vbGVhbiIsICJpc051bWJlciIsICJfaXNOdW1iZXIiLCAiaXNOYU4iLCAiX2lzTmFOIiwgImlzT2JqZWN0IiwgIl9pc09iamVjdCIsICJmb3JtYXRCb29sZWFuIiwgInZhbHVlIiwgIl9yZWYiLCAiaW1wb3J0X21vbWVudCIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJjYWxlbmRhciIsICJ2YWx1ZSIsICJtb21lbnQiLCAiZm9ybWF0RGF0ZSIsICJpc1N0cmluZyIsICJpc0Z1bmN0aW9uIiwgImZvcm1hdE51bWJlciIsICJ2YWx1ZSIsICJyb3VuZCIsICJpc1N0cmluZyIsICJudW1lcmFsIiwgImZvcm1hdFRleHQiLCAidmFsdWUiLCAiZm9ybWF0QXV0byIsICJ2YWx1ZSIsICJpc05hTiIsICJpc1N0cmluZyIsICJpc0RhdGUiLCAiaXNCb29sZWFuIiwgImlzTnVtYmVyIiwgImlzQXJyYXkiLCAiX3R5cGVvZiIsICJvIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgImdldEJ1ZmZlclZhbHVlcyIsICJfc2xpY2VkVG9BcnJheSIsICJfcmVmIiwgInBvc2l0aW9uIiwgIl9yZWYyIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfcmVmNCIsICJfcmVmNSIsICJub2RlIiwgImdldFNlY3VyZVJlbEZvclRhcmdldCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfZ2V0IiwgImdldCIsICJvYmplY3QiLCAiX2dldCIsICJ2MSIsICJyZXZlcnNlIiwgInZhbHVlIiwgInZhbHVlIiwgImdldFRyYW5zaXRpb25UaW1pbmdzIiwgImdldFdhaXREdXJhdGlvbiIsICJwZXJmb3JtT25GcmFtZSIsICJvbkZyYW1lIiwgImltcG9ydF9yZWFjdCIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJldWlCYWNrZ3JvdW5kQ29sb3IiLCAiX3JlZiIsICJfcmVmMiIsICJfdGludE9yU2hhZGUiLCAiY29sb3IiLCAiX2V1aUJhY2tncm91bmRDb2xvcnMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAidXNlRXVpQmFja2dyb3VuZENvbG9yQ1NTIiwgImV1aVNjcm9sbEJhclN0eWxlcyIsICJfcmVmIiwgImNvbG9ycyIsICJzaXplIiwgIl9yZWYyIiwgImV1aU92ZXJmbG93U2hhZG93U3R5bGVzIiwgIl9yZWYzIiwgInNpemUiLCAiX3JlZjQiLCAiZXVpWVNjcm9sbCIsICJfcmVmNSIsICJldWlZU2Nyb2xsV2l0aFNoYWRvd3MiLCAiX3JlZjciLCAiZXVpWFNjcm9sbCIsICJldWlYU2Nyb2xsV2l0aFNoYWRvd3MiLCAiZXVpRnVsbEhlaWdodCIsICJfdHlwZW9mIiwgIm8iLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIm93bktleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgImV1aVBhZGRpbmdTaXplIiwgIl9yZWYiLCAic2l6ZSIsICJfZ2V0RXVpUGFkZGluZ1NpemUiLCAiX2V1aVBhZGRpbmdTaWRlc0FuZFNpemVzIiwgIl9nZW5lcmF0ZVNpemVTdHlsZXMiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3NsaWNlZFRvQXJyYXkiLCAidXNlRXVpUGFkZGluZ0NTUyIsICJldWlPdXRsaW5lIiwgIl9yZWYiLCAiZXVpRm9jdXNSaW5nIiwgImV1aUZvbnRTaXplIiwgIl9yZWYiLCAiZXVpVGV4dEJyZWFrV29yZCIsICJldWlUZXh0VHJ1bmNhdGUiLCAiZXVpTnVtYmVyRm9ybWF0IiwgIl9yZWYyIiwgImV1aUJyZWFrcG9pbnQiLCAiX3JlZiIsICJldWlNaW5CcmVha3BvaW50IiwgIl9yZWYyIiwgInNpemUiLCAiZXVpTWF4QnJlYWtwb2ludCIsICJfcmVmMyIsICJzaXplIiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aUdsb2JhbFN0eWxlcyIsICJfcmVmIiwgImJhc2UiLCAiY29sb3JzIiwgImZvbnQiLCAic3R5bGVzIiwgIl90ZW1wbGF0ZU9iamVjdCIsICJfdGVtcGxhdGVPYmplY3QyIiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiX3RlbXBsYXRlT2JqZWN0IiwgImV1aUFuaW1TbGlkZUluVXAiLCAic2l6ZSIsICJfdGVtcGxhdGVPYmplY3QyIiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiZXVpU2NyZWVuUmVhZGVyT25seSIsICJFdWlTY3JlZW5SZWFkZXJPbmx5IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIkV1aVNjcmVlblJlYWRlckxpdmUiLCAiX3JlZiIsICJ0b2dnbGUiLCAiUHJvcFR5cGVzIiwgImNhbmRpZGF0ZVNlbGVjdG9ycyIsICJjYW5kaWRhdGVTZWxlY3RvciIsICJqb2luIiwgIk5vRWxlbWVudCIsICJFbGVtZW50IiwgIm1hdGNoZXMiLCAicHJvdG90eXBlIiwgIm1zTWF0Y2hlc1NlbGVjdG9yIiwgIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsICJnZXRSb290Tm9kZSIsICJlbGVtZW50IiwgIm93bmVyRG9jdW1lbnQiLCAiZ2V0Q2FuZGlkYXRlcyIsICJlbCIsICJpbmNsdWRlQ29udGFpbmVyIiwgImZpbHRlciIsICJjYW5kaWRhdGVzIiwgIkFycmF5IiwgInNsaWNlIiwgImFwcGx5IiwgInF1ZXJ5U2VsZWN0b3JBbGwiLCAiY2FsbCIsICJ1bnNoaWZ0IiwgImdldENhbmRpZGF0ZXNJdGVyYXRpdmVseSIsICJlbGVtZW50cyIsICJvcHRpb25zIiwgImVsZW1lbnRzVG9DaGVjayIsICJmcm9tIiwgImxlbmd0aCIsICJzaGlmdCIsICJ0YWdOYW1lIiwgImFzc2lnbmVkIiwgImFzc2lnbmVkRWxlbWVudHMiLCAiY29udGVudCIsICJjaGlsZHJlbiIsICJuZXN0ZWRDYW5kaWRhdGVzIiwgImZsYXR0ZW4iLCAicHVzaCIsICJzY29wZSIsICJ2YWxpZENhbmRpZGF0ZSIsICJpbmNsdWRlcyIsICJzaGFkb3dSb290IiwgImdldFNoYWRvd1Jvb3QiLCAidmFsaWRTaGFkb3dSb290IiwgInNoYWRvd1Jvb3RGaWx0ZXIiLCAiZ2V0VGFiaW5kZXgiLCAibm9kZSIsICJpc1Njb3BlIiwgInRhYkluZGV4IiwgInRlc3QiLCAiaXNDb250ZW50RWRpdGFibGUiLCAiaXNOYU4iLCAicGFyc2VJbnQiLCAiZ2V0QXR0cmlidXRlIiwgInNvcnRPcmRlcmVkVGFiYmFibGVzIiwgImEiLCAiYiIsICJkb2N1bWVudE9yZGVyIiwgImlzSW5wdXQiLCAiaXNIaWRkZW5JbnB1dCIsICJ0eXBlIiwgImlzRGV0YWlsc1dpdGhTdW1tYXJ5IiwgInIiLCAic29tZSIsICJjaGlsZCIsICJnZXRDaGVja2VkUmFkaW8iLCAibm9kZXMiLCAiZm9ybSIsICJpIiwgImNoZWNrZWQiLCAiaXNUYWJiYWJsZVJhZGlvIiwgIm5hbWUiLCAicmFkaW9TY29wZSIsICJxdWVyeVJhZGlvcyIsICJyYWRpb1NldCIsICJ3aW5kb3ciLCAiQ1NTIiwgImVzY2FwZSIsICJlcnIiLCAiY29uc29sZSIsICJlcnJvciIsICJtZXNzYWdlIiwgImlzUmFkaW8iLCAiaXNOb25UYWJiYWJsZVJhZGlvIiwgImlzWmVyb0FyZWEiLCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwgIndpZHRoIiwgImhlaWdodCIsICJpc0hpZGRlbiIsICJfcmVmIiwgImRpc3BsYXlDaGVjayIsICJnZXRDb21wdXRlZFN0eWxlIiwgInZpc2liaWxpdHkiLCAiaXNEaXJlY3RTdW1tYXJ5IiwgIm5vZGVVbmRlckRldGFpbHMiLCAicGFyZW50RWxlbWVudCIsICJub2RlUm9vdEhvc3QiLCAiaG9zdCIsICJub2RlSXNBdHRhY2hlZCIsICJjb250YWlucyIsICJvcmlnaW5hbE5vZGUiLCAicm9vdE5vZGUiLCAiYXNzaWduZWRTbG90IiwgImdldENsaWVudFJlY3RzIiwgImlzRGlzYWJsZWRGcm9tRmllbGRzZXQiLCAicGFyZW50Tm9kZSIsICJkaXNhYmxlZCIsICJpdGVtIiwgImlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUiLCAiaXNOb2RlTWF0Y2hpbmdTZWxlY3RvclRhYmJhYmxlIiwgImlzVmFsaWRTaGFkb3dSb290VGFiYmFibGUiLCAic2hhZG93SG9zdE5vZGUiLCAic29ydEJ5T3JkZXIiLCAicmVndWxhclRhYmJhYmxlcyIsICJvcmRlcmVkVGFiYmFibGVzIiwgImZvckVhY2giLCAiY2FuZGlkYXRlVGFiaW5kZXgiLCAic29ydCIsICJyZWR1Y2UiLCAiYWNjIiwgInNvcnRhYmxlIiwgImNvbmNhdCIsICJ0YWJiYWJsZSIsICJiaW5kIiwgImZvY3VzYWJsZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiZXVpQnV0dG9uQ29sb3IiLCAidGludE9yU2hhZGUiLCAiY29sb3IiLCAiZXVpQnV0dG9uRmlsbENvbG9yIiwgImdldEZvcmVncm91bmRDb2xvciIsICJiYWNrZ3JvdW5kIiwgImV1aUJ1dHRvbkVtcHR5Q29sb3IiLCAidXNlRXVpQnV0dG9uQ29sb3JDU1MiLCAiZXVpQnV0dG9uRGlzcGxheXNDb2xvcnMiLCAiQ09MT1JTIiwgInVzZUV1aUJ1dHRvbkZvY3VzQ1NTIiwgImV1aUJ1dHRvbkZvY3VzQ1NTIiwgIl9yZWYiLCAiZXVpQnV0dG9uU2l6ZU1hcCIsICJfcmVmMiIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiZ2V0U2hhZG93Q29sb3IiLCAiZXVpU2hhZG93WFNtYWxsIiwgIl9yZWYiLCAiX3JlZjIiLCAiZXVpU2hhZG93U21hbGwiLCAiX3JlZjMiLCAiX3JlZjQiLCAiZXVpU2hhZG93TWVkaXVtIiwgIl9yZWY1IiwgIl9yZWY2IiwgInByb3BlcnR5IiwgImV1aVNoYWRvd0xhcmdlIiwgIl9yZWY3IiwgIl9yZWY4IiwgImV1aVNoYWRvd1hMYXJnZSIsICJfcmVmOSIsICJfcmVmMTAiLCAicmV2ZXJzZSIsICJldWlTaGFkb3dGbGF0IiwgIl9yZWYxMyIsICJfcmVmMTQiLCAiZXVpU2hhZG93IiwgInNpemUiLCAiX3JlZjE1IiwgImV1aUJ1dHRvbkJhc2VDU1MiLCAiZXVpQnV0dG9uRGlzcGxheVN0eWxlcyIsICJfYnV0dG9uU2l6ZSIsICJzaXplIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BY2Nlc3NpYmlsaXR5IiwgIl9yZWYiLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BZ2dyZWdhdGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQWxlcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQW5hbHl6ZUV2ZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFuYWx5emVFdmVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Bbm5vdGF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFub21hbHlDaGFydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Bbm9tYWx5U3dpbUxhbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBtVHJhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQWRkRGF0YSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBZHZhbmNlZFNldHRpbmdzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFnZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFwbSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBcHBTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQXVkaXRiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENhbnZhcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDYXNlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDb2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENvbnNvbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRGFzaGJvYXJkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcERldnRvb2xzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcERpc2NvdmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEVtcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBGaWxlYmVhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBGbGVldCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBHaXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwR3JhcGgiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwR3JvayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBIZWFydGJlYXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEluZGV4UGF0dGVybiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBJbmRleFJvbGx1cCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBMZW5zIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcExvZ3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWFuYWdlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBNZXRyaWNiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE1ldHJpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTW9uaXRvcmluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBOb3RlYm9vayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBQYWNrZXRiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFBpcGVsaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFJlY2VudGx5Vmlld2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFJlcG9ydGluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTYXZlZE9iamVjdHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VhcmNoUHJvZmlsZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VjdXJpdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VjdXJpdHlBbmFseXRpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU3BhY2VzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNxbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBUaW1lbGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFVwdGltZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBVc2Vyc1JvbGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFZpc3VhbGl6ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBWdWxuZXJhYmlsaXR5TWFuYWdlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBXYXRjaGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93RW5kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93U3RhcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dEb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd1JpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93VXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJ0aWNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Bc3RlcmlzayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CZWFrZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmVsbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CZWxsU2xhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmV0YSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Cb2x0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJveGVzSG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Cb3hlc1ZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJyYW5jaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CcmFuY2hVc2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJyb29tIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJydXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJ1ZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CdWxsc2V5ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DYWxlbmRhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DaGFuZ2VQb2ludERldGVjdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DaGVjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DaGVja0luQ2lyY2xlRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNoZWVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsaWNrTGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbGlja1JpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb2NrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb2NrQ291bnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbG91ZERyaXp6bGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvdWRTdG9ybXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvdWRTdW5ueSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbHVzdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbXB1dGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29uc29sZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250YWluZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udGludWl0eUFib3ZlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRpbnVpdHlBYm92ZUJlbG93IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRpbnVpdHlCZWxvdyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250aW51aXR5V2l0aGluIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRyb2xzSG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250cm9sc1ZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvcHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29weUNsaXBib2FyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Dcm9zcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Dcm9zc0luQ2lyY2xlIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3Jvc3NJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Dcm9zc2hhaXJzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkN1cnJlbmN5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkN1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25EYXRhYmFzZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25EZXNrdG9wIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRpZmYiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRGlzY3VzcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudEVkaXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG9jdW1lbnRhdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG90IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvdEluQ2lyY2xlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvdWJsZUFycm93TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb3VibGVBcnJvd1JpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvd25sb2FkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25Cb3R0b20iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnblJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JBbGlnbkNlbnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JBbGlnbkxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQWxpZ25SaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JCb2xkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckNoZWNrbGlzdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JDb2RlQmxvY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQ29tbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JIZWFkaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0YWxpYyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JMaW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclJlZG8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yU3RyaWtlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclRhYmxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclVuZGVybGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JVbmRvIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclVub3JkZXJlZExpc3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRW1haWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRW5kcG9pbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVyYXNlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FcnJvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FcnJvckZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Fc3FsVmlzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4aXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXhwYW5kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4cGFuZE1pbmkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXhwb3J0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV5ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeWVDbG9zZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmFjZUhhcHB5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZhY2VOZXV0cmFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZhY2VTYWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmllbGRTdGF0aXN0aWNzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZpbHRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GaWx0ZXJFeGNsdWRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZpbHRlcklnbm9yZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GaWx0ZXJJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GaWx0ZXJJbmNsdWRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZsYWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Gb2xkZXJDaGVjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Gb2xkZXJDbG9zZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyRXhjbGFtYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyT3BlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GcmFtZU5leHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnJhbWVQcmV2aW91cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GdWxsU2NyZWVuRXhpdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GdWxsU2NyZWVuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZ1bmN0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdlYXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR2xhc3NlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HbG9iZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HcmFiIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdyYWJPbW5pZGlyZWN0aW9uYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR3JhYkhvcml6b250YWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR3JhZGllbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR3JpZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25IZWFydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25IZWF0bWFwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkhlbHAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSG9tZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW1hZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW1wb3J0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4VGVtcG9yYXJ5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4Q2xvc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhFZGl0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4Rmx1c2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhNYXBwaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4T3BlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleFJ1bnRpbWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhTZXR0aW5ncyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmZpbml0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbnB1dE91dHB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbnNwZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkludmVydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Jc3N1ZSIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktleSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LZXlib2FyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxGaWVsZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxGdW5jdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxPcGVyYW5kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbFNlbGVjdG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbFZhbHVlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkt1YmVybmV0ZXNOb2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkt1YmVybmV0ZXNQb2QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGF1bmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxheWVycyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MZXR0ZXJpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGluZURhc2hlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaW5lRG90dGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpbmVTb2xpZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpc3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGlzdEFkZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2NrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvY2tPcGVuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ1BhdHRlcm5BbmFseXNpcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dSYXRlQW5hbHlzaXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0Flcm9zcGlrZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXBhY2hlIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0FwcFNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXdzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Bd3NNb25vIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BenVyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXp1cmVNb25vIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29CZWF0cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQnVzaW5lc3NBbmFseXRpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0NlcGgiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0Nsb3VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29DbG91ZEVjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ29kZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ29kZXNhbmRib3giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0NvdWNoYmFzZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRG9ja2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Ecm9wd2l6YXJkIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0VsYXN0aWMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0VsYXN0aWNTdGFjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRW50ZXJwcmlzZVNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRXRjZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR2NwIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0djcE1vbm8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0dpdGh1YiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR21haWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0dvbGFuZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR29vZ2xlRyIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29IYXByb3h5IiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0libSIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29JYm1Nb25vIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29LYWZrYSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvS2liYW5hIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29LdWJlcm5ldGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Mb2dnaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Mb2dzdGFzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTWFwcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTWVtY2FjaGVkIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb01ldHJpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb01vbmdvZGIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb015c3FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29OZ2lueCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvT3NxdWVyeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUGhwIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1Bvc3RncmVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Qcm9tZXRoZXVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29SYWJiaXRtcSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUmVkaXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1NlY3VyaXR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29TaXRlU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Ta2V0Y2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1NsYWNrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29VcHRpbWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29XZWJob29rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29XaW5kb3dzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hGaWx0ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hJZiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dzdGFzaElucHV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoT3V0cHV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoUXVldWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFnbmV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFnbmlmeVdpdGhNaW51cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NYWduaWZ5V2l0aFBsdXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFwTWFya2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbW9yeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVEb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVMZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51VXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVyZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWluaW1pemUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWludXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWludXNJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NaW51c0luQ2lyY2xlRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbnVzSW5TcXVhcmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENyZWF0ZUFkdmFuY2VkSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ3JlYXRlTXVsdGlNZXRyaWNKb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ3JlYXRlU2luZ2xlTWV0cmljSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sRGF0YVZpc3VhbGl6ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxPdXRsaWVyRGV0ZWN0aW9uSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sUmVncmVzc2lvbkpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Nb2JpbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTW9vbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Nb3ZlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk5hbWVzcGFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25OZXN0ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTmV3Q2hhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ob2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk51bWJlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25PZmZsaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk9ubGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYWNrYWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhZ2VTZWxlY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFnZXNTZWxlY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFpbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFsZXR0ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYXBlckNsaXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFydGlhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYXVzZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYXltZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBlbmNpbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QZXJjZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBpbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QaW5GaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGlwZUJyZWFrcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QaXBlTm9CcmVha3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGl2b3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGxheSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbGF5RmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsdXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGx1c0luQ2lyY2xlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsdXNJbkNpcmNsZUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbHVzSW5TcXVhcmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUG9wb3V0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblB1c2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUXVlc3Rpb25JbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25RdW90ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25SZWZyZXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblJlcG9ydGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblJldHVybktleSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TYXZlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNjYWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWN1cml0eVNpZ25hbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWN1cml0eVNpZ25hbERldGVjdGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2Vzc2lvblZpZXdlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TaGFyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TaGFyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TaW5nbGVNZXRyaWNWaWV3ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU25vd2ZsYWtlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRBc2NlbmRpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydERlc2NlbmRpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydExlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydFJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnREb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRVcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0YWJsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TcGFjZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3BhcmtsZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhclBsdXNFbXB0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyUGx1c0ZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckVtcHR5U3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRmlsbGVkU3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3Rhck1pbnVzRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3Rhck1pbnVzRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXRzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0b3AiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcEZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdG9wU2xhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcmFnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdHJpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3VibW9kdWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN1biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Td2F0Y2hJbnB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TeW1saW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlT2ZDb250ZW50cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGVhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UZW1wZXJhdHVyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lUmVmcmVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lbGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lbGluZVdpdGhBcnJvdyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lc2xpZGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQWxpYXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Bbm5vdGF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQXJyYXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5CaW5hcnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Cb29sZWFuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQ2xhc3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQ29uc3RhbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5EYXRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRGltZW5zaW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRWxlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkVudW0iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FbnVtTWVtYmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRXZlbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FeGNlcHRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5GaWVsZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkZpbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5GbGF0dGVuZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5GdW5jdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkdlbyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkhpc3RvZ3JhbSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbklQIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuSW50ZXJmYWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuSm9pbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbktleSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbktleXdvcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5NZXRob2QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5NZXRyaWNDb3VudGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTWV0cmljR2F1Z2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Nb2R1bGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5OYW1lc3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5OZXN0ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5OdWxsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTnVtYmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuT2JqZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuT3BlcmF0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5QYWNrYWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUGFyYW1ldGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUGVyY29sYXRvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblByb3BlcnR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUmFuZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5SYW5rRmVhdHVyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblJhbmtGZWF0dXJlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblJlcG8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TZWFyY2hUeXBlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU2VtYW50aWNUZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU2hhcGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TdHJpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TdHJ1Y3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TeW1ib2wiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5UYWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5UZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVG9rZW5Db3VudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblZhcmlhYmxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVmVjdG9yRGVuc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5WZWN0b3JTcGFyc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhaW5pbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhbnNpdGlvbkxlZnRJbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UcmFuc2l0aW9uTGVmdE91dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UcmFuc2l0aW9uVG9wSW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhbnNpdGlvblRvcE91dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UcmFzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25VbmZvbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVW5saW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblVzZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVXNlckF2YXRhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Vc2VycyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WZWN0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlkZW9QbGF5ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQXJlYSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNBcmVhU3RhY2tlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0Jhckhvcml6b250YWxTdGFja2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0JhclZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0JhclZlcnRpY2FsU3RhY2tlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNHYXVnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNHb2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0xpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzTWFwQ29vcmRpbmF0ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNNYXBSZWdpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzTWV0cmljIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1BpZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUYWJsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUYWdDbG91ZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1RpbWVsaW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1ZlZ2EiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVmlzdWFsQnVpbGRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25XYXJuaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbldhcm5pbmdGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uV29yZFdyYXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uV29yZFdyYXBEaXNhYmxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25XcmVuY2giLCAiX3JlZiIsICJpY29uIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgImV1aUljb25TdHlsZXMiLCAiX3JlZjMiLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAidCIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiZ2V0SXNBcHBJY29uIiwgImljb24iLCAiRXVpSWNvbkNsYXNzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3JlZiIsICJpY29uIiwgIl9pbmhlcml0cyIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJfb2JqZWN0U3ByZWFkIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkV1aUNvbnRleHQiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAibyIsICJ2YWx1ZSIsICJpc0Jvb2xlYW4iLCAiaXNTdHJpbmciLCAiaXNOdW1iZXIiLCAiaXNVbmRlZmluZWQiLCAiY2hhciIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAidG9rZW4iLCAicmVuZGVyIiwgIkNvbXBvbmVudCIsICJSZWFjdCIsICJFdWlJMThuIiwgIl9yZWYiLCAiX3JlZjIiLCAidXNlTG9hZGluZ0FyaWFMYWJlbCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiZXVpU3Bpbm5lckJvcmRlckNvbG9yc0NTUyIsICJfcmVmIiwgImNvbG9ycyIsICJib3JkZXIiLCAiZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlMb2FkaW5nU3Bpbm5lciIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJfb2JqZWN0U3ByZWFkIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJldWlCdXR0b25EaXNwbGF5Q29udGVudFN0eWxlcyIsICJfcmVmIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQnV0dG9uRGlzcGxheUNvbnRlbnQiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJpY29uIiwgIl9leHRlbmRzIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIlVSTCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9yZWYiLCAiX3JlZjIiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0U3ByZWFkIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUJ1dHRvbiIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlCdXR0b25FbXB0eVN0eWxlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUJ1dHRvbkVtcHR5IiwgIl9yZWYiLCAic2l6ZSIsICJmbHVzaCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIl9vYmplY3RTcHJlYWQiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aUJ1dHRvbkljb25TdHlsZXMiLCAiX2VtcHR5SG92ZXJTdHlsZXMiLCAic3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQnV0dG9uSWNvbiIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJub2RlIiwgIkV1aUlubmVyVGV4dCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJldWlGb3JtTWF4V2lkdGgiLCAiX3JlZiIsICJldWlGb3JtVmFyaWFibGVzIiwgImlzQ29sb3JEYXJrIiwgImNvbG9ycyIsICJkYXJrZW4iLCAiZXVpRm9ybUNvbnRyb2xTdHlsZXMiLCAiZXVpRm9ybUNvbnRyb2xUZXh0IiwgImV1aUZvcm1Db250cm9sRGVmYXVsdFNoYWRvdyIsICJfcmVmMiIsICJib3JkZXIiLCAiZXVpRm9ybUNvbnRyb2xGb2N1c1N0eWxlcyIsICJfcmVmMyIsICJldWlGb3JtQ29udHJvbEludmFsaWRTdHlsZXMiLCAiX3JlZjQiLCAiZXVpRm9ybUNvbnRyb2xEaXNhYmxlZFN0eWxlcyIsICJldWlGb3JtQ29udHJvbFJlYWRPbmx5U3R5bGVzIiwgImV1aUZvcm1Db250cm9sQXV0b0ZpbGxTdHlsZXMiLCAiYm9yZGVyU2hhZG93IiwgImV1aVBsYWNlaG9sZGVyUGVyQnJvd3NlciIsICJldWlGb3JtQ3VzdG9tQ29udHJvbFZhcmlhYmxlcyIsICJhbmltYXRpb24iLCAiZXVpRm9ybUN1c3RvbUNvbnRyb2xTdHlsZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpT2JzZXJ2ZXIiLCAicmVuZGVyIiwgIl90eXBlb2YiLCAibyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1ByaW1pdGl2ZSIsICJFdWlSZXNpemVPYnNlcnZlciIsICJfcmVmIiwgIl9yZWYyIiwgIm1ha2VSZXNpemVPYnNlcnZlciIsICJub2RlIiwgInVzZVJlc2l6ZU9ic2VydmVyIiwgInNpemUiLCAiX3JlZjMiLCAiX3JlZjQiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdF9kb20iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aUNvbXBvbmVudERlZmF1bHRzUHJvdmlkZXIiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAidXNlQ29tcG9uZW50RGVmYXVsdHMiLCAidXNlUHJvcHNXaXRoQ29tcG9uZW50RGVmYXVsdHMiLCAiX3R5cGVvZiIsICJvIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpUG9ydGFsIiwgIlByb3BUeXBlcyIsICJFdWlQb3J0YWxDbGFzcyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfaW5oZXJpdHMiLCAiX2NyZWF0ZUNsYXNzIiwgInBvc2l0aW9uIiwgInJlbmRlciIsICJfZGVmaW5lUHJvcGVydHkiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90ZW1wbGF0ZU9iamVjdCIsICJfdGVtcGxhdGVPYmplY3QyIiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiZXVpVG9vbFRpcEJhY2tncm91bmRDb2xvciIsICJldWlUb29sVGlwQm9yZGVyQ29sb3IiLCAiZXVpVG9vbFRpcEFuaW1hdGlvblZlcnRpY2FsIiwgInNpemUiLCAiZXVpVG9vbFRpcEFuaW1hdGlvbkhvcml6b250YWwiLCAiZXVpVG9vbFRpcFN0eWxlcyIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgImV1aVRvb2xUaXBBbmNob3JTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUb29sVGlwUG9wb3ZlciIsICJfcmVmIiwgInN0eWxlcyIsICJzZXRQb3BvdmVyUmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJvbkZvY3VzIiwgIm9uQmx1ciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVG9vbFRpcEFycm93IiwgIl9yZWYiLCAicG9zaXRpb24iLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJpbWl0aXZlIiwgIlRvb2xUaXBNYW5hZ2VyIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpVG9vbFRpcCIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfZGVmaW5lUHJvcGVydHkiLCAicG9zaXRpb24iLCAiX2luaGVyaXRzIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGlwIiwgIl9yZWYiLCAic2l6ZSIsICJwb3NpdGlvbiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aVRleHRDb2xvclN0eWxlcyIsICJfcmVmMiIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJfaXNOYW1lZENvbG9yIiwgIkV1aVRleHRDb2xvciIsICJfcmVmIiwgIkNvbXBvbmVudCIsICJjbG9uZUVsZW1lbnQiLCAiaXNOYW1lZENvbG9yIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGV4dEFsaWduIiwgIl9yZWYiLCAiQ29tcG9uZW50IiwgImNsb25lRWxlbWVudCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9vYmplY3RTcHJlYWQiLCAiUHJvcFR5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgImV1aUxpbmtDU1MiLCAiX3JlZiIsICJldWlMaW5rU3R5bGVzIiwgIl9jb2xvckNTUyIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlUaXRsZSIsICJfcmVmIiwgImV1aVRpdGxlU3R5bGVzIiwgImV1aVRleHQiLCAiZXVpU2NhbGVUZXh0IiwgImV1aVRleHRTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUZXh0IiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIkNvbXBvbmVudCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImNhbmNlbEZyYW1lIiwgImFuaW1hdGlvbiIsICJjc3MiLCAiX3R5cGVvZiIsICJvIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfdG9QcmltaXRpdmUiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJFdWlBdXRvU2l6ZXIiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAibyIsICJwYXJzZUNvbG9yIiwgInJnYiIsICJjaHJvbWFWYWxpZCIsICJfdHlwZW9mIiwgIl90eXBlb2YiLCAibyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgImV1aUJhZGdlQ29sb3JzIiwgImdldEJhZGdlQ29sb3JzIiwgImdldFRleHRDb2xvciIsICJfcmVmIiwgImdldENvbG9yQ29udHJhc3QiLCAiZ2V0SXNWYWxpZENvbG9yIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpQmFkZ2VTdHlsZXMiLCAic2V0QmFkZ2VDb2xvclZhcnMiLCAiY29sb3JzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiQ09MT1JTIiwgIkV1aUJhZGdlIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJpc05hbWVkQ29sb3IiLCAiX29iamVjdFNwcmVhZCIsICJzdHlsZXMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgImNsYXNzTmFtZXMiLCAiRWxlbWVudCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiZXVpQmV0YUJhZGdlU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUJldGFCYWRnZSIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJpY29uIiwgIkVsZW1lbnQiLCAiX2V4dGVuZHMiLCAiX3R5cGVvZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImljb25TdHlsZSIsICJfcmVmIiwgIkV1aUV4dGVybmFsTGlua0ljb24iLCAiX3JlZjIiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJfb2JqZWN0U3ByZWFkIiwgImNsYXNzTmFtZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX19hc3NpZ24iLCAiZnJvbSIsICJSZWFjdCIsICJSZWFjdCIsICJSZWFjdCIsICJ2YWx1ZSIsICJpbXBvcnRfcmVhY3QiLCAidmFsdWUiLCAiUmVhY3QiLCAiX19hc3NpZ24iLCAiX19yZXN0IiwgImRlZmF1bHRzIiwgIm1pZGRsZXdhcmUiLCAiY2JzIiwgImZpbHRlciIsICJfX2Fzc2lnbiIsICJSZWFjdCIsICJfX3Jlc3QiLCAiX19hc3NpZ24iLCAiU2lkZUNhciIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkluRm9jdXNHdWFyZCIsICJfcmVmIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJfZXh0ZW5kczIiLCAiU2lkZUNhciIsICJfcmVmIiwgImNhcHR1cmVGb2N1c1Jlc3RvcmUiLCAib25Gb2N1cyIsICJvbkJsdXIiLCAiUmVhY3QiLCAiZXh0cmFjdFJlZiIsICJlZmZlY3RDYXIiLCAiU2lkZUNhciIsICJlZmZlY3RDYXIiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJ0IiwgImUiLCAiX3NldFByb3RvdHlwZU9mIiwgIl90eXBlb2YiLCAibyIsICJfdHlwZW9mIiwgIl90eXBlb2YiLCAiX2RlZmluZVByb3BlcnR5IiwgImltcG9ydF9yZWFjdCIsICJyZWR1Y2VQcm9wc1RvU3RhdGUiLCAiaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCIsICJTaWRlRWZmZWN0IiwgInBlZWsiLCAicmVuZGVyIiwgIlJlYWN0IiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJ0b0FycmF5IiwgImFzQXJyYXkiLCAibm9kZSIsICJjYWNoZSIsICJub2RlIiwgInRvQXJyYXkiLCAidG9BcnJheSIsICJub2RlIiwgInRvQXJyYXkiLCAibm9kZSIsICJjYWNoZSIsICJwb3NpdGlvbiIsICJub2RlIiwgImFzQXJyYXkiLCAidG9BcnJheSIsICJ0b0FycmF5IiwgIm5vZGUiLCAidG9BcnJheSIsICJub2RlIiwgIm5vZGUiLCAibm9kZSIsICJub2RlIiwgIm5vZGUiLCAibm9kZSIsICJhc0FycmF5IiwgIm5vZGUiLCAiYXNBcnJheSIsICJub2RlIiwgImZvY3VzYWJsZSIsICJ2YWx1ZSIsICJsaW5lIiwgImZvY3VzYWJsZSIsICJhc0FycmF5IiwgIm5vZGUiLCAibmV4dCIsICJwcmV2IiwgImZvY3VzT25Cb2R5IiwgImlzRnJlZUZvY3VzIiwgInRyeVJlc3RvcmVGb2N1cyIsICJkZWZhdWx0V2hpdGVsaXN0IiwgImZvY3VzV2hpdGVsaXN0ZWQiLCAicmVjb3JkUG9ydGFsIiwgImZvY3VzSXNQb3J0YWxlZFBhaXIiLCAiZm9jdXNXYXNPdXRzaWRlIiwgImNoZWNrSW5Ib3N0IiwgIndpdGhpbkhvc3QiLCAiZ2V0Tm9kZUZvY3VzYWJsZXMiLCAiaXNOb3RGb2N1c2FibGUiLCAibm9kZSIsICJhY3RpdmF0ZVRyYXAiLCAic2hvdWxkRm9yY2VSZXN0b3JlRm9jdXMiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJvblRyYXAiLCAib25CbHVyIiwgIm9uRm9jdXMiLCAiRm9jdXNXYXRjaGVyIiwgIkZvY3VzVHJhcCIsICJfcmVmNSIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAib25XaW5kb3dGb2N1cyIsICJvbldpbmRvd0JsdXIiLCAiYXR0YWNoSGFuZGxlciIsICJkZXRhY2hIYW5kbGVyIiwgIl9yZWY2IiwgIl9yZWY3IiwgIlJlYWN0IiwgIlJlYWN0IiwgIlJlYWN0IiwgImNzcyIsICJzaGVldCIsICJzdHlsZXMiLCAic3R5bGVzIiwgInBhcnNlIiwgIm5vZGUiLCAic3R5bGVzIiwgInBvc2l0aW9uIiwgImV4dHJhY3RSZWYiLCAiU3R5bGUiLCAibm9kZSIsICJzaWRlY2FyX2RlZmF1bHQiLCAiUmVhY3QiLCAibm9kZSIsICJSZWFjdCIsICJTdHlsZSIsICJpbXBvcnRfcmVhY3QiLCAiZXh0cmFjdFJlZiIsICJub2RlIiwgInNpZGVjYXJfZGVmYXVsdCIsICJlZmZlY3RDYXIiLCAic2lkZWNhcl9kZWZhdWx0IiwgIkZvY3VzT24iLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl90b1ByaW1pdGl2ZSIsICJFdWlGb2N1c1RyYXAiLCAiUHJvcFR5cGVzIiwgIkV1aUZvY3VzVHJhcENsYXNzIiwgIm5vZGUiLCAicmVuZGVyIiwgIkZvY3VzT24iLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl90b1ByaW1pdGl2ZSIsICJFdWlNdXRhdGlvbk9ic2VydmVyIiwgIm1ha2VNdXRhdGlvbk9ic2VydmVyIiwgIm5vZGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aU91dHNpZGVDbGlja0RldGVjdG9yIiwgInJlbmRlciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImV1aVBvcG92ZXJBcnJvd1N0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVBvcG92ZXJBcnJvdyIsICJfcmVmIiwgInBvc2l0aW9uIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJldWlQb3BvdmVyU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJldWlQYW5lbFN0eWxlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVBhbmVsIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpUG9wb3ZlclBhbmVsU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpUG9wb3ZlclBhbmVsIiwgIl9yZWYiLCAicG9zaXRpb24iLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9yZWYiLCAiX3JlZjIiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX3JlZjMiLCAiX3JlZjQiLCAiRXVpUG9wb3ZlciIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9yZWY1IiwgImR1cmF0aW9uTWF0Y2giLCAiZGVsYXlNYXRjaCIsICJfcmVmNiIsICJwb3NpdGlvbiIsICJfb2JqZWN0U3ByZWFkIiwgIm5vZGUiLCAiX2luaGVyaXRzIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJpbml0aWFsRm9jdXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJbnB1dFBvcG92ZXIiLCAiX3JlZiIsICJjbGFzc25hbWVzIiwgImNsb3NlUG9wb3Zlck9uU2Nyb2xsIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpU3BhY2VyU3R5bGVzIiwgIl9yZWYyIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU3BhY2VyIiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUaXRsZSIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfb2JqZWN0U3ByZWFkIiwgIlByb3BUeXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgImV1aUNhbGxPdXRTdHlsZXMiLCAiX3JlZjMiLCAiZXVpQ2FsbE91dEhlYWRlclN0eWxlcyIsICJfcmVmNCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJjc3NTdHlsZXMiLCAiX2V4dGVuZHMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlDYXJkU2VsZWN0U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQ2FyZFNlbGVjdCIsICJfcmVmIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiX3JlZjYiLCAiZXVpQ2FyZFN0eWxlcyIsICJfcmVmIiwgImV1aUNhcmRUZXh0U3R5bGVzIiwgImV1aUNhcmRCZXRhQmFkZ2VTdHlsZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUNhcmQiLCAiX3JlZiIsICJpY29uIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgIm91dGVyT25DbGljayIsICJjbGFzc05hbWVzIiwgImljb25TdHlsZXMiLCAiX2V4Y2x1ZGVkMiIsICJfZXh0ZW5kcyIsICJfb2JqZWN0U3ByZWFkIiwgIlJlYWN0IiwgIm5vZGUiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgImV1aUNoZWNrYm94U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQ2hlY2tib3giLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJsYWJlbFN0eWxlcyIsICJpY29uU3R5bGVzIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImV1aUZvcm1MYWJlbCIsICJldWlGb3JtTGFiZWxTdHlsZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiX3JlZjYiLCAiX3JlZjciLCAiX3JlZjgiLCAiX3JlZjkiLCAiX3JlZjEwIiwgIl9yZWYxMSIsICJfcmVmMTIiLCAiX3JlZjEzIiwgIl9yZWYxNCIsICJfcmVmMTUiLCAiX3JlZjE2IiwgIl9yZWYxNyIsICJldWlGbGV4R3JvdXBTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGbGV4R3JvdXBJbnRlcm5hbCIsICJfcmVmIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiQ29tcG9uZW50IiwgIl9leHRlbmRzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZsZXhJdGVtSW50ZXJuYWwiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIkNvbXBvbmVudCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJFdWlWYWxpZGF0YWJsZUNvbnRyb2wiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAidXNlU2V0Q29udHJvbFZhbGlkaXR5IiwgIl9yZWYzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtTGFiZWwiLCAiX3JlZiIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uU3R5bGVzIiwgIl9yZWYiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uIiwgIl9yZWYiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJpY29uU3R5bGVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24iLCAiX3JlZiIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnNTdHlsZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfdG9QcmltaXRpdmUiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgImlzSWNvblNoYXBlIiwgImljb24iLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfaW5oZXJpdHMiLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJzdHlsZXMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJpc1JpZ2h0U2lkZUljb24iLCAiaWNvbiIsICJnZXRJY29uQWZmb3JkYW5jZVN0eWxlcyIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiZXVpRm9ybUNvbnRyb2xMYXlvdXRTdHlsZXMiLCAiZXVpRm9ybUNvbnRyb2xMYXlvdXRTaWRlTm9kZVN0eWxlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZvcm1Db250cm9sTGF5b3V0IiwgImljb24iLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJFdWlGb3JtQ29udHJvbExheW91dFNpZGVOb2RlcyIsICJfcmVmIiwgIlJlYWN0IiwgIm5vZGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aUZpZWxkU2VhcmNoU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpRmllbGRTZWFyY2hDbGFzcyIsICJvblNlYXJjaCIsICJvbkNoYW5nZSIsICJyZW5kZXIiLCAiX3JlZiIsICJhcHBlbmQiLCAidmFsdWUiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlGb3JtRXJyb3JUZXh0U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybUVycm9yVGV4dCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpRm9ybUhlbHBUZXh0U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybUhlbHBUZXh0IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlGb3JtUm93U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiciIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybVJvdyIsICJfcmVmIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiX3NsaWNlZFRvQXJyYXkiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiaGVscFRleHQiLCAiZXJyb3IiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9yZWYyIiwgIkVsZW1lbnQiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlIb3Jpem9udGFsUnVsZVN0eWxlcyIsICJfcmVmIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSG9yaXpvbnRhbFJ1bGUiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJfcmVmNSIsICJfcmVmNiIsICJldWlDb250ZXh0TWVudUl0ZW1TdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlDb250ZXh0TWVudUl0ZW0iLCAiX3JlZiIsICJpY29uIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJSZWFjdCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiZXVpQ29udGV4dE1lbnVWYXJpYWJsZXMiLCAiX3JlZiIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RlbXBsYXRlT2JqZWN0MiIsICJfdGVtcGxhdGVPYmplY3QzIiwgIl90ZW1wbGF0ZU9iamVjdDQiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJldWlDb250ZXh0TWVudVBhbmVsU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpQ29udGV4dE1lbnVQYW5lbENsYXNzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfY2FsbFN1cGVyIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJub2RlIiwgIl9pbmhlcml0cyIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgImV1aVN3aXRjaFZhcnMiLCAiY29sb3JzIiwgImFuaW1hdGlvbiIsICJfcmVmMiIsICJfcmVmMyIsICJldWlTd2l0Y2hTdHlsZXMiLCAiYnV0dG9uU3R5bGVzIiwgIl9yZWYiLCAiYm9keVN0eWxlcyIsICJfcmVmNCIsICJfcmVmNSIsICJfY2FsY3VsYXRlRGlzYWJsZWRDb2xvciIsICJpY29uU3R5bGVzIiwgIl9yZWY2IiwgIl9yZWY3IiwgInRodW1iU3R5bGVzIiwgIl9yZWY4IiwgIl9jYWxjdWxhdGVTY2FsZSIsICJzaXplIiwgIl9jYWxjdWxhdGVMZWZ0IiwgImxhYmVsU3R5bGVzIiwgIl9yZWY5IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU3dpdGNoIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJzaXplIiwgInN0eWxlcyIsICJidXR0b25TdHlsZXMiLCAiYm9keVN0eWxlcyIsICJ0aHVtYlN0eWxlcyIsICJsYWJlbFN0eWxlcyIsICJQcm9wVHlwZXMiLCAiX2NyZWF0ZUVtb3Rpb24iLCAiY3giLCAibWVyZ2UiLCAiZ2V0UmVnaXN0ZXJlZFN0eWxlcyIsICJrZXlmcmFtZXMiLCAiY3NzIiwgImNhY2hlIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJldWlPdmVybGF5TWFza1N0eWxlcyIsICJfcmVmIiwgImNzcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfZXhjbHVkZWQiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfbm9uSXRlcmFibGVSZXN0IiwgInIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aU92ZXJsYXlNYXNrIiwgIl9yZWYiLCAic3R5bGVzIiwgImN4IiwgIlByb3BUeXBlcyIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInZhbHVlIiwgImlzRXF1YWwiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3ciLCAicGVyZm9ybWFuY2UiLCAibm93IiwgIkRhdGUiLCAiY2FuY2VsVGltZW91dCIsICJ0aW1lb3V0SUQiLCAiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCAiaWQiLCAicmVxdWVzdFRpbWVvdXQiLCAiY2FsbGJhY2siLCAiZGVsYXkiLCAic3RhcnQiLCAidGljayIsICJjYWxsIiwgInJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJzaXplIiwgImdldFNjcm9sbGJhclNpemUiLCAicmVjYWxjdWxhdGUiLCAiZGl2IiwgImRvY3VtZW50IiwgImNyZWF0ZUVsZW1lbnQiLCAic3R5bGUiLCAid2lkdGgiLCAiaGVpZ2h0IiwgIm92ZXJmbG93IiwgImJvZHkiLCAiYXBwZW5kQ2hpbGQiLCAib2Zmc2V0V2lkdGgiLCAiY2xpZW50V2lkdGgiLCAicmVtb3ZlQ2hpbGQiLCAiY2FjaGVkUlRMUmVzdWx0IiwgImdldFJUTE9mZnNldFR5cGUiLCAib3V0ZXJEaXYiLCAib3V0ZXJTdHlsZSIsICJkaXJlY3Rpb24iLCAiaW5uZXJEaXYiLCAiaW5uZXJTdHlsZSIsICJzY3JvbGxMZWZ0IiwgImRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCIsICJkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCIsICJkZXZXYXJuaW5nc1RhZ05hbWUiLCAicHJvY2VzcyIsICJ3aW5kb3ciLCAiV2Vha1NldCIsICJJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwiLCAiZGVmYXVsdEl0ZW1LZXkiLCAiaW5kZXgiLCAiZGF0YSIsICJkZXZXYXJuaW5nc0RpcmVjdGlvbiIsICJkZXZXYXJuaW5nc1RhZ05hbWUiLCAicHJvY2VzcyIsICJ3aW5kb3ciLCAiV2Vha1NldCIsICJjcmVhdGVMaXN0Q29tcG9uZW50IiwgIl9yZWYiLCAiZ2V0SXRlbU9mZnNldCIsICJnZXRFc3RpbWF0ZWRUb3RhbFNpemUiLCAiZ2V0SXRlbVNpemUiLCAiZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQiLCAiZ2V0U3RhcnRJbmRleEZvck9mZnNldCIsICJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwgImluaXRJbnN0YW5jZVByb3BzIiwgInNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UiLCAidmFsaWRhdGVQcm9wcyIsICJwcm9wcyIsICJfaW5zdGFuY2VQcm9wcyIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9vdXRlclJlZiIsICJfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCIsICJzdGF0ZSIsICJpbnN0YW5jZSIsICJpc1Njcm9sbGluZyIsICJzY3JvbGxEaXJlY3Rpb24iLCAic2Nyb2xsT2Zmc2V0IiwgImluaXRpYWxTY3JvbGxPZmZzZXQiLCAic2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwgIl9jYWxsT25JdGVtc1JlbmRlcmVkIiwgIm1lbW9pemVPbmUiLCAib3ZlcnNjYW5TdGFydEluZGV4IiwgIm92ZXJzY2FuU3RvcEluZGV4IiwgInZpc2libGVTdGFydEluZGV4IiwgInZpc2libGVTdG9wSW5kZXgiLCAib25JdGVtc1JlbmRlcmVkIiwgIl9jYWxsT25TY3JvbGwiLCAib25TY3JvbGwiLCAiX2dldEl0ZW1TdHlsZSIsICJkaXJlY3Rpb24iLCAiaXRlbVNpemUiLCAibGF5b3V0IiwgIml0ZW1TdHlsZUNhY2hlIiwgIl9nZXRJdGVtU3R5bGVDYWNoZSIsICJzdHlsZSIsICJoYXNPd25Qcm9wZXJ0eSIsICJvZmZzZXQiLCAic2l6ZSIsICJpc0hvcml6b250YWwiLCAiaXNSdGwiLCAib2Zmc2V0SG9yaXpvbnRhbCIsICJwb3NpdGlvbiIsICJsZWZ0IiwgInVuZGVmaW5lZCIsICJyaWdodCIsICJ0b3AiLCAiaGVpZ2h0IiwgIndpZHRoIiwgIl8iLCAiX18iLCAiX19fIiwgIl9vblNjcm9sbEhvcml6b250YWwiLCAiZXZlbnQiLCAiY3VycmVudFRhcmdldCIsICJjbGllbnRXaWR0aCIsICJzY3JvbGxMZWZ0IiwgInNjcm9sbFdpZHRoIiwgInNldFN0YXRlIiwgInByZXZTdGF0ZSIsICJnZXRSVExPZmZzZXRUeXBlIiwgIk1hdGgiLCAibWF4IiwgIm1pbiIsICJfcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCIsICJfb25TY3JvbGxWZXJ0aWNhbCIsICJjbGllbnRIZWlnaHQiLCAic2Nyb2xsSGVpZ2h0IiwgInNjcm9sbFRvcCIsICJfb3V0ZXJSZWZTZXR0ZXIiLCAicmVmIiwgIm91dGVyUmVmIiwgImN1cnJlbnQiLCAiY2FuY2VsVGltZW91dCIsICJyZXF1ZXN0VGltZW91dCIsICJfcmVzZXRJc1Njcm9sbGluZyIsICJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCAibmV4dFByb3BzIiwgInZhbGlkYXRlU2hhcmVkUHJvcHMiLCAic2Nyb2xsVG8iLCAic2Nyb2xsVG9JdGVtIiwgImFsaWduIiwgIml0ZW1Db3VudCIsICJzY3JvbGxiYXJTaXplIiwgImdldFNjcm9sbGJhclNpemUiLCAiY29tcG9uZW50RGlkTW91bnQiLCAiX2NhbGxQcm9wc0NhbGxiYWNrcyIsICJjb21wb25lbnREaWRVcGRhdGUiLCAiY29tcG9uZW50V2lsbFVubW91bnQiLCAicmVuZGVyIiwgImNoaWxkcmVuIiwgImNsYXNzTmFtZSIsICJpbm5lclJlZiIsICJpbm5lckVsZW1lbnRUeXBlIiwgImlubmVyVGFnTmFtZSIsICJpdGVtRGF0YSIsICJpdGVtS2V5IiwgIm91dGVyRWxlbWVudFR5cGUiLCAib3V0ZXJUYWdOYW1lIiwgInVzZUlzU2Nyb2xsaW5nIiwgIl9nZXRSYW5nZVRvUmVuZGVyIiwgInN0YXJ0SW5kZXgiLCAic3RvcEluZGV4IiwgIml0ZW1zIiwgInB1c2giLCAiY3JlYXRlRWxlbWVudCIsICJrZXkiLCAiZXN0aW1hdGVkVG90YWxTaXplIiwgIm92ZXJmbG93IiwgIldlYmtpdE92ZXJmbG93U2Nyb2xsaW5nIiwgIndpbGxDaGFuZ2UiLCAicG9pbnRlckV2ZW50cyIsICJvdmVyc2NhbkNvdW50IiwgIm92ZXJzY2FuQmFja3dhcmQiLCAib3ZlcnNjYW5Gb3J3YXJkIiwgIlB1cmVDb21wb25lbnQiLCAiZGVmYXVsdFByb3BzIiwgIl9yZWYyIiwgIl9yZWYzIiwgImhhcyIsICJhZGQiLCAiY29uc29sZSIsICJ3YXJuIiwgIkVycm9yIiwgIkZpeGVkU2l6ZUxpc3QiLCAiY3JlYXRlTGlzdENvbXBvbmVudCIsICJnZXRJdGVtT2Zmc2V0IiwgIl9yZWYiLCAiaW5kZXgiLCAiaXRlbVNpemUiLCAiZ2V0SXRlbVNpemUiLCAiX3JlZjIiLCAiZ2V0RXN0aW1hdGVkVG90YWxTaXplIiwgIl9yZWYzIiwgIml0ZW1Db3VudCIsICJnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCIsICJfcmVmNCIsICJhbGlnbiIsICJzY3JvbGxPZmZzZXQiLCAiaW5zdGFuY2VQcm9wcyIsICJzY3JvbGxiYXJTaXplIiwgImRpcmVjdGlvbiIsICJoZWlnaHQiLCAibGF5b3V0IiwgIndpZHRoIiwgImlzSG9yaXpvbnRhbCIsICJzaXplIiwgImxhc3RJdGVtT2Zmc2V0IiwgIk1hdGgiLCAibWF4IiwgIm1heE9mZnNldCIsICJtaW4iLCAibWluT2Zmc2V0IiwgIm1pZGRsZU9mZnNldCIsICJyb3VuZCIsICJjZWlsIiwgImZsb29yIiwgImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCAiX3JlZjUiLCAib2Zmc2V0IiwgImdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCAiX3JlZjYiLCAic3RhcnRJbmRleCIsICJudW1WaXNpYmxlSXRlbXMiLCAiaW5pdEluc3RhbmNlUHJvcHMiLCAicHJvcHMiLCAic2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSIsICJ2YWxpZGF0ZVByb3BzIiwgIl9yZWY3IiwgInByb2Nlc3MiLCAiRXJyb3IiLCAic2hhbGxvd0RpZmZlcnMiLCAicHJldiIsICJuZXh0IiwgImF0dHJpYnV0ZSIsICJhcmVFcXVhbCIsICJwcmV2UHJvcHMiLCAibmV4dFByb3BzIiwgInByZXZTdHlsZSIsICJzdHlsZSIsICJwcmV2UmVzdCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfZXhjbHVkZWQiLCAibmV4dFN0eWxlIiwgIm5leHRSZXN0IiwgIl9leGNsdWRlZDIiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eSIsICJzdHJpbmciLCAiZmxhdHRlbk9wdGlvbkdyb3VwcyIsICJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlIiwgIl9yZWYiLCAiY29sbGVjdE1hdGNoaW5nT3B0aW9uIiwgIl9yZWYyIiwgImdldE1hdGNoaW5nT3B0aW9ucyIsICJfcmVmMyIsICJvYmplY3QiLCAiY3JlYXRlUGFydGlhbFN0cmluZ0VxdWFsaXR5T3B0aW9uTWF0Y2hlciIsICJfcmVmNCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZCIsICJfcmVmIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlDb21ib0JveFBpbGxTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlDb21ib0JveFBpbGwiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgImV1aUNvbWJvQm94SW5wdXRTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1ByaW1pdGl2ZSIsICJFdWlDb21ib0JveElucHV0IiwgImFwcGVuZCIsICJnZXQiLCAicmVuZGVyIiwgIm9uRm9jdXMiLCAidmFsdWUiLCAiaWNvbiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpTWFya1N0eWxlcyIsICJfcmVmIiwgImV1aU1hcmtTY3JlZW5SZWFkZXJTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlNYXJrIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJIaWdobGlnaHRBbGwiLCAiX3JlZiIsICJlc2NhcGVSZWdFeHAiLCAibWF0Y2hlcyIsICJtYXRjaCIsICJSZWFjdCIsICJ2YWx1ZSIsICJQcm9wVHlwZXMiLCAiZmlsbEluQ2h1bmtzIiwgImFwcGVuZCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiSGlnaGxpZ2h0Rmlyc3QiLCAiX3JlZiIsICJSZWFjdCIsICJtYXRjaCIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlIaWdobGlnaHQiLCAiX3JlZiIsICJDb21wb25lbnQiLCAiX3JlZjIiLCAiY2hpbGRyZW4iLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlGaWx0ZXJTZWxlY3RJdGVtU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAicmVzb2x2ZUljb25BbmRDb2xvciIsICJFdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MiLCAicmVuZGVyIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgImljb24iLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9nZXQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiVHJ1bmNhdGlvblV0aWxzIiwgIl9yZWYiLCAiY29tYmluZWRUZXh0IiwgImdldCIsICJyZW1vdmVMYXN0Q2hhcmFjdGVyIiwgInJlbW92ZUZpcnN0Q2hhcmFjdGVyIiwgInNwbGl0VGV4dCIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfZXhjbHVkZWQzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGV4dFRydW5jYXRlIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiRXVpVGV4dFRydW5jYXRlV2l0aFdpZHRoIiwgIl9yZWYyIiwgIl9leGNsdWRlZDIiLCAiX3NsaWNlZFRvQXJyYXkiLCAidHJ1bmNhdGlvbiIsICJ0cnVuY2F0aW9uT2Zmc2V0IiwgInRydW5jYXRlZFRleHQiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJFdWlUZXh0VHJ1bmNhdGVXaXRoUmVzaXplT2JzZXJ2ZXIiLCAiX3JlZjMiLCAiX2V4Y2x1ZGVkMyIsICJfcmVmNCIsICJ3aWR0aCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJzdHlsZXMiLCAiRXVpVGV4dEJsb2NrVHJ1bmNhdGUiLCAiX3JlZiIsICJjbG9uZUVsZW1lbnQiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIkV1aUNvbWJvQm94VGl0bGUiLCAiX3JlZiIsICJldWlDb21ib0JveE9wdGlvbkxpc3RTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4Y2x1ZGVkMyIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCIsICJfcmVmIiwgIl9yZWYyIiwgInZhbHVlIiwgImFwcGVuZCIsICJ0ZXh0IiwgIlJlYWN0IiwgInJlbmRlciIsICJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlIiwgImRlbGltaXRlciIsICJoaWdobGlnaHRTZWFyY2hWYWx1ZSIsICJzZWFyY2hWYWx1ZSIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl90b1ByaW1pdGl2ZSIsICJFdWlDb21ib0JveCIsICJfcmVmIiwgIl9yZWYyIiwgImRlbGltaXRlciIsICJyZW5kZXIiLCAib25CbHVyIiwgImFwcGVuZCIsICJjbGFzc05hbWVzIiwgInZhbHVlIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlQYWdpbmF0aW9uQnV0dG9uU3R5bGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpUGFnaW5hdGlvbkJ1dHRvbiIsICJfcmVmIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4dGVuZHMiLCAiVFlQRVMiLCAiRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93IiwgIl9yZWYiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpUGFnaW5hdGlvblN0eWxlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVBhZ2luYXRpb24iLCAiX3JlZiIsICJzdHlsZXMiLCAic2FmZUNsaWNrIiwgImNsYXNzTmFtZXMiLCAiYWNjZXNzaWJsZVBhZ2VTdHJpbmciLCAiUHJvcFR5cGVzIiwgIlBhZ2luYXRpb25CdXR0b25XcmFwcGVyIiwgIl9yZWYyIiwgImltcG9ydF9yZWFjdCIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJ1c2VFdWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVBhZ2luYXRpb24iLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aURlc2NyaXB0aW9uTGlzdFRpdGxlU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRGVzY3JpcHRpb25MaXN0VGl0bGUiLCAiX3JlZiIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpRGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb25TdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlEZXNjcmlwdGlvbkxpc3REZXNjcmlwdGlvbiIsICJfcmVmIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aURlc2NyaXB0aW9uTGlzdFN0eWxlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aURlc2NyaXB0aW9uTGlzdCIsICJfcmVmIiwgInN0eWxlcyIsICJjb252ZXJ0TnVtYmVyc1RvRnIiLCAidmFsdWUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpVGFiU3R5bGVzIiwgIl9yZWYyIiwgImV1aVRhYkNvbnRlbnRTdHlsZXMiLCAiaW1wb3J0X3JlYWN0IiwgImNvbnRleHREZWZhdWx0cyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYiIsICJfcmVmIiwgImFwcGVuZCIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlUYWJzU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiRXVpVGFiYmVkQ29udGVudCIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2luaGVyaXRzIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9leGNsdWRlZDIiLCAiX29iamVjdFNwcmVhZCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAibyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aURlbGF5UmVuZGVyIiwgIl9yZWYiLCAicmVuZGVyIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJldWlIZWFsdGhTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlIZWFsdGgiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpSW1hZ2VXcmFwcGVyU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlJbWFnZUJ1dHRvblN0eWxlcyIsICJfcmVmIiwgImV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyIsICJfcmVmMiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUltYWdlQnV0dG9uIiwgIl9yZWYiLCAiYnV0dG9uU3R5bGVzIiwgImljb25TdHlsZXMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJldWlJbWFnZUNhcHRpb25TdHlsZXMiLCAiX3JlZiIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgIl9leHRlbmRzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJFdWlJbWFnZVdyYXBwZXIiLCAiX3JlZiIsICJvcGVuRnVsbFNjcmVlbiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiZXVpSW1hZ2VTdHlsZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXJTdHlsZXMiLCAiX2V4dGVuZHMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIkV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIiLCAiX3JlZiIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJvbktleURvd24iLCAiY2xvc2VGdWxsU2NyZWVuIiwgImljb25TdHlsZXMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgIlNJWkVTIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJbWFnZSIsICJfcmVmIiwgInNpemUiLCAiU0laRVMiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiZ2xvYmFsU3R5bGVzIiwgInNpemUiLCAiRXVpVXRpbGl0eUNsYXNzZXMiLCAiaW1wb3J0X3JlYWN0IiwgIkV1aUNhY2hlUHJvdmlkZXIiLCAiX3JlZiIsICJjYWNoZSIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIkV1aVN5c3RlbUNvbG9yTW9kZVByb3ZpZGVyIiwgIl9yZWYiLCAiZXZlbnRMaXN0ZW5lciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIkV1aVByb3ZpZGVyTmVzdGVkQ2hlY2siLCAiX3JlZiIsICJ1c2VJc05lc3RlZEV1aVByb3ZpZGVyIiwgImlzRW1vdGlvbkNhY2hlT2JqZWN0IiwgIkV1aVByb3ZpZGVyIiwgIl9yZWYiLCAiY2FjaGUiLCAicHJvdmlkZXJNZXNzYWdlIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZ2V0U2VhcmNoYWJsZUxhYmVsIiwgImdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUiLCAiY29sbGVjdE1hdGNoaW5nT3B0aW9uIiwgIl9yZWYiLCAiZ2V0TWF0Y2hpbmdPcHRpb25zIiwgIl9yZWYyIiwgImNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIiLCAiX3JlZjMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlTZWxlY3RhYmxlU2VhcmNoIiwgIl9yZWYiLCAidmFsdWUiLCAiZ2V0TWF0Y2hpbmdPcHRpb25zIiwgImNsYXNzTmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aVNlbGVjdGFibGVNZXNzYWdlU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU2VsZWN0YWJsZU1lc3NhZ2UiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlTZWxlY3RhYmxlTGlzdEl0ZW1WYXJpYWJsZXMiLCAiX3JlZjIiLCAiX3JlZiIsICJldWlTZWxlY3RhYmxlTGlzdEl0ZW1TdHlsZXMiLCAiYm9yZGVyIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAicmVzb2x2ZUljb25BbmRDb2xvciIsICJFdWlTZWxlY3RhYmxlTGlzdEl0ZW0iLCAiX3JlZiIsICJhcHBlbmQiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJyZXNvbHZlSWNvbkFuZENvbG9yIiwgImljb24iLCAiX2V4dGVuZHMiLCAiX2V4Y2x1ZGVkMiIsICJSZWFjdCIsICJfc2xpY2VkVG9BcnJheSIsICJQcm9wVHlwZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlTZWxlY3RhYmxlTGlzdFN0eWxlcyIsICJjc3MiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4Y2x1ZGVkMyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3R5cGVvZiIsICJvIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiRXVpU2VsZWN0YWJsZUxpc3QiLCAiX3JlZiIsICJhcHBlbmQiLCAic3R5bGVzIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgInRleHQiLCAiUmVhY3QiLCAiX3JlZjUiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leGNsdWRlZDMiLCAiX3R5cGVvZiIsICJvIiwgIl9leHRlbmRzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJvd25LZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiRXVpU2VsZWN0YWJsZSIsICJfcmVmIiwgImdldE1hdGNoaW5nT3B0aW9ucyIsICJpbml0aWFsU2VhcmNoVmFsdWUiLCAicmVuZGVyIiwgIl9yZWYyIiwgIl9yZWYzIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAiZ2V0QWNjZXNzaWJsZU5hbWUiLCAiX3JlZjQiLCAiX3JlZjUiLCAiaW5wdXRSZWYiLCAibm9kZSIsICJfZGVmYXVsdCIsICJfcmVmNiIsICJyZXN1bHRzTGVuZ3RoIiwgImNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAidXNlSXNFdWlUYWJsZVJlc3BvbnNpdmUiLCAiX3JlZiIsICJicmVha3BvaW50IiwgImlzQm9vbGVhbiIsICJ1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlUYWJsZVZhcmlhYmxlcyIsICJfcmVmNCIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgImV1aVRhYmxlU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGUiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVCb2R5IiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlRm9vdGVyIiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgInJlc29sdmVXaWR0aEFzU3R5bGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiZXVpVGFibGVDZWxsQ29udGVudFN0eWxlcyIsICJfcmVmNSIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlQ2VsbENvbnRlbnQiLCAiX3JlZiIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJpc09iamVjdCIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiZXVpVGFibGVIZWFkZXJGb290ZXJDZWxsU3R5bGVzIiwgImV1aVRhYmxlQ2VsbENoZWNrYm94U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVGb290ZXJDZWxsIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlSGVhZGVyIiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNlbGxDb250ZW50cyIsICJfcmVmIiwgIkV1aVRhYmxlSGVhZGVyQ2VsbCIsICJfcmVmMiIsICJhcHBlbmQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94IiwgIl9yZWYiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpVGFibGVIZWFkZXJNb2JpbGVTdHlsZXMiLCAiX3JlZiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlSGVhZGVyTW9iaWxlIiwgIl9yZWYiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVNvcnRNb2JpbGVJdGVtIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1ByaW1pdGl2ZSIsICJFdWlUYWJsZVNvcnRNb2JpbGUiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJldWlUYWJsZVJvd1N0eWxlcyIsICJfZXhwYW5kZWRSb3dBbmltYXRpb24iLCAiX3JlZiIsICJfcm93Q29sb3JWYXJpYWJsZXMiLCAiX3JlZjIiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVJvdyIsICJfcmVmIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIm9uS2V5RG93biIsICJvbktleVVwIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJldWlUYWJsZVJvd0NlbGxTdHlsZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVJvd0NlbGwiLCAiX3JlZiIsICJhcHBlbmQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiRWxlbWVudCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVSb3dDZWxsQ2hlY2tib3giLCAiX3JlZiIsICJhcHBlbmQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaXNDdXN0b21JdGVtQWN0aW9uIiwgImNhbGxXaXRoSXRlbUlmRnVuY3Rpb24iLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIkNvbGxhcHNlZEl0ZW1BY3Rpb25zIiwgIl9yZWYiLCAiY29udHJvbHMiLCAiaWNvbiIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgIkRlZmF1bHRJdGVtQWN0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiQ3VzdG9tSXRlbUFjdGlvbiIsICJfcmVmIiwgIkV4cGFuZGVkSXRlbUFjdGlvbnMiLCAiX3JlZiIsICJSZWFjdCIsICJjbGFzc05hbWVzIiwgImltcG9ydF9yZWFjdCIsICJQYWdpbmF0aW9uQmFyIiwgIl9yZWYiLCAiZGVmYXVsdHMiLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiZXVpQmFzaWNUYWJsZUJvZHlMb2FkaW5nIiwgIl9yZWYiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX3R5cGVvZiIsICJvIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl90b1ByaW1pdGl2ZSIsICJ2YWx1ZSIsICJyZW5kZXIiLCAiaXNGdW5jdGlvbiIsICJjb2x1bW4iLCAiX3JlZiIsICJfcmVmMiIsICJFdWlCYXNpY1RhYmxlIiwgIm9uQ2hhbmdlIiwgIl9yZWYzIiwgIl9yZWY0IiwgIl9yZWY1IiwgIl9yZWY2IiwgImdldCIsICJfcmVmNyIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAiX3JlZjgiLCAiX3JlZjkiLCAiX3JlZjEwIiwgIm51bSIsICJzZWxlY3Rpb24iLCAiaXRlbSIsICJfcmVmMTEiLCAiUHJvcFR5cGVzIiwgIlN1YnNjcmliYWJsZSIsICJub29wIiwgInZhbHVlIiwgImFzQXJyYXkiLCAidmFsdWUiLCAiaXNQbGFpbk9iamVjdCIsICJjb3B5IiwgIkZvY3VzTWFuYWdlciIsICJvbkZvY3VzIiwgImxpc3RlbmVyIiwgIk9ubGluZU1hbmFnZXIiLCAibGlzdGVuZXIiLCAidmFsdWUiLCAiQ2FuY2VsbGVkRXJyb3IiLCAiUmV0cnllciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJwYXVzZSIsICJydW4iLCAiY2FuY2VsRm4iLCAiTm90aWZ5TWFuYWdlciIsICJmbHVzaCIsICJRdWVyeSIsICJub29wIiwgImlzU3RhbGUiLCAib25Gb2N1cyIsICJmZXRjaCIsICJnZXQiLCAiZmV0Y2hGbiIsICJnZXREZWZhdWx0U3RhdGUiLCAicmVkdWNlciIsICJRdWVyeUNhY2hlIiwgImdldCIsICJvbkZvY3VzIiwgIk11dGF0aW9uIiwgIm5vb3AiLCAiTXV0YXRpb25DYWNoZSIsICJvbkZvY3VzIiwgIm5vb3AiLCAiYnVpbGROZXdQYWdlcyIsICJwYXJhbSIsICJmZXRjaFBhZ2UiLCAibWFudWFsIiwgInByb21pc2UiLCAiX2xvb3AiLCAiaSIsICJRdWVyeUNsaWVudCIsICJfcmVmIiwgIl9yZWYyIiwgIm5vb3AiLCAiX3JlZjMiLCAiUXVlcnlPYnNlcnZlciIsICJ0cmFja1Byb3AiLCAiZ2V0IiwgImZldGNoIiwgIm5vb3AiLCAidmFsdWUiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsICJSZWFjdERPTSIsICJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsICJsb2dnZXIiLCAibG9nZ2VyIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJ1c2VRdWVyeUNsaWVudCIsICJRdWVyeUNsaWVudFByb3ZpZGVyIiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgInVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJzZWFyY2hWYWx1ZSIsICJ2YWx1ZSIsICJwcmVmaXgiLCAiUmVhY3QiLCAib3B0aW9ucyIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgIm4iLCAibWF0Y2giLCAibjIiLCAidmFsdWUiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJlbnRpdHkiLCAiUmVhY3QiLCAia2V5cyIsICJwcm9wZXJ0eSIsICJkb21haW5zIiwgInJhbmdlcyIsICJpcmkiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgInZhbHVlIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJERUZBVUxUX0hBU19USVRMRSIsICJvbnRvbG9neSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJub2RlIiwgImN5Y2xlQ2hlY2siLCAiY3ljbGVDaGVjayIsICJub2RlIiwgIlJlYWN0IiwgIm5vZGUiLCAiaGllcmFyY2h5IiwgIlJlYWN0RE9NIiwgInJlbmRlciIsICJSZWFjdCIsICJ2YWx1ZSIsICJpbXBvcnRfcmVhY3RfZG9tIiwgInJlbmRlciIsICJkYXRhIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgInZhbHVlIiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIk1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkiLCAiUmVhY3QiLCAicmVuZGVyIiwgImRhdGEiLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiREVGQVVMVF9VU0VfTEVHQUNZIiwgIlJlYWN0IiwgInZhbHVlIiwgInBhZ2VJbmRleCIsICJwYWdlU2l6ZSIsICJzb3J0RmllbGQiLCAic29ydERpcmVjdGlvbiIsICJwYWdlT2ZJdGVtcyIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJzZWFyY2hWYWx1ZSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyIsICJyZW5kZXIiLCAib3B0aW9uIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIkRFRkFVTFRfSEFTX1RJVExFIiwgIlJlYWN0IiwgInByb3BlcnR5IiwgInByZWRpY2F0ZXMiLCAiZW50aXR5IiwgImluc3RhbmNlcyIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJub2RlIiwgImRhdGEiLCAiaXNQb3BvdmVyT3BlbiIsICJSZWFjdCIsICJSZWFjdERPTSJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci90cmFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxCeVRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRBbGxLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1Byb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQm9vbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL251bWVyYWwvbnVtZXJhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVtb2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9sc0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lRGF0YVZpZXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVSZWdFeHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZUJ5VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2xhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3BhcmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2N1c3RvbU9taXRDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0ZsYXR0ZW5hYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZsYXRSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVxdWlyZXMtcG9ydC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmdpZnkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VybC1wYXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VzY2FwZVJlZ0V4cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dsb2JhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZmFpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3BhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2V4cG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21hdGgtdHJ1bmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9mdW5jdGlvbi92aXJ0dWFsL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZmxhdHRlbi1pbnRvLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZsYXQtbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1waXBlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3Qub3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2pzb24vc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvanNvbi9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1idW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC1pbnRlcnZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3NldC10aW1lb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29tcG9uZW50LWVtaXR0ZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AZWdqcy9oYW1tZXJqcy9kaXN0L2hhbW1lci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy92aXMtdXRpbC9lc25leHQvZXNtL3Zpcy11dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcmVmbGVjdC9jb25zdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3JlZmxlY3QvY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9yZWZsZWN0L2NvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvci5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90YXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9xdWV1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy13ZWJvcy13ZWJraXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21pY3JvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wZXJmb3JtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmNhdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UucmVzb2x2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFueS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnByb21pc2Uud2l0aC1yZXNvbHZlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQucHJvbWlzZS50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9yZWdlbmVyYXRvci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnJlZXppbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm1hcC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9tYXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL21hcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2VudHJpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9ybmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL25hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92NC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtaW50ZXJmYWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvcXVldWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC1wYXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc2V0LmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3NldC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zdHJlYW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtdmlldy50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtc2V0LWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS12aWV3LWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9leHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21hdGgtdHJ1bmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2Fzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnRyeS12aXJ0dWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2Z1bmN0aW9uL3ZpcnR1YWwvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9zaGFwZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb21wb25lbnQtZW1pdHRlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5oYXMtaW5zdGFuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaXMtY29uY2F0LXNwcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnJlcGxhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwZWNpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuc3BsaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wudW5zY29wYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheVdpdGhvdXRIb2xlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5kYXRlLm5vdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9kYXRlL25vdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2luY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1yZWdleHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25vdC1hLXJlZ2V4cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3RyaW5nL3ZpcnR1YWwvaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy10cmltLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9udW1iZXItcGFyc2UtaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucGFyc2UtaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3BhcnNlLWludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmluZGV4LW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvaW5kZXgtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luZGV4LW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2pzb24vc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LWludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC10aW1lb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZmlsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9maWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGVnanMvaGFtbWVyanMvZGlzdC9oYW1tZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy92aXMtdXRpbC9lc25leHQvZXNtL3Zpcy11dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9kb3RwYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL2dlcGhpUGFyc2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9sb2NhbGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9DYWNoZWRJbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvSW1hZ2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mcmVlemluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5tYXAuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbWFwL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL0dyb3Vwcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm51bWJlci5pcy1uYW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbnVtYmVyL2lzLW5hbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbnVtYmVyLWlzLWZpbml0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm51bWJlci5pcy1maW5pdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbnVtYmVyL2lzLWZpbml0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zb21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL251bWJlci1wYXJzZS1mbG9hdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnBhcnNlLWZsb2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3BhcnNlLWZsb2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvc2hhcmVkL0NvbXBvbmVudFV0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3NoYXJlZC9MYWJlbEFjY3VtdWxhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvc2hhcmVkL0xhYmVsU3BsaXR0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9zaGFyZWQvTGFiZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5yZWZsZWN0LmNvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9yZWZsZWN0L2NvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvdXRpbC9Ob2RlQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9Cb3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy91dGlsL0NpcmNsZUltYWdlQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9DaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvQ2lyY3VsYXJJbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3V0aWwvU2hhcGVCYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0N1c3RvbVNoYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0RhdGFiYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0RpYW1vbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvRG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0VsbGlwc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvSWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9JbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9TcXVhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvSGV4YWdvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9TdGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL1RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvVHJpYW5nbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvVHJpYW5nbGVEb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvTm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9Ob2Rlc0hhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWRhdGEtZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3QuZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3JlZmxlY3QvZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9nZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3N1cGVyUHJvcEJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5tYXRoLmh5cG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL21hdGgvaHlwb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy91dGlsL2VuZC1wb2ludHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy91dGlsL2VkZ2UtYmFzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL2VkZ2VzL3V0aWwvYmV6aWVyLWVkZ2UtYmFzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL2VkZ2VzL2Jlemllci1lZGdlLWR5bmFtaWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy9iZXppZXItZWRnZS1zdGF0aWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy91dGlsL2N1YmljLWJlemllci1lZGdlLWJhc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy9jdWJpYy1iZXppZXItZWRnZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL2VkZ2VzL3N0cmFpZ2h0LWVkZ2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9FZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL0VkZ2VzSGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvQmFybmVzSHV0U29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9SZXB1bHNpb25Tb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9waHlzaWNzL0hpZXJhcmNoaWNhbFJlcHVsc2lvblNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvU3ByaW5nU29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9IaWVyYXJjaGljYWxTcHJpbmdTb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9waHlzaWNzL0NlbnRyYWxHcmF2aXR5U29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9GQTJCYXNlZFJlcHVsc2lvblNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvRkEyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9QaHlzaWNzRW5naW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3JuZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvbmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3Y0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9OZXR3b3JrVXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL0NsdXN0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvQ2x1c3RlcmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9DYW52YXNSZW5kZXJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LWludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvaGFtbWVyVXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9DYW52YXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvVmlldy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy92aWV3LWhhbmRsZXIvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9rZXljaGFybS9zcmMva2V5Y2hhcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9OYXZpZ2F0aW9uSGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9JbnRlcmFjdGlvbkhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc2V0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLXdlYWsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy53ZWFrLW1hcC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy93ZWFrLW1hcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9zZWxlY3Rpb24vc2VsZWN0aW9uLWFjY3VtdWxhdG9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL1NlbGVjdGlvbkhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL0RpcmVjdGlvblN0cmF0ZWd5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZXZlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9ldmVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9ldmVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZXZlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvbGF5b3V0LWVuZ2luZS9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9MYXlvdXRFbmdpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvTWFuaXB1bGF0aW9uU3lzdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9vcHRpb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvYWxnb3JpdGhtcy9GbG95ZFdhcnNoYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL0thbWFkYUthd2FpLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9OZXR3b3JrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9sb2NhbGUtdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9lbnRyeS1lc25leHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9leHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21hdGgtdHJ1bmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9mdW5jdGlvbi92aXJ0dWFsL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZmxhdHRlbi1pbnRvLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtcGlwZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3N5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3Qub3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2pzb24vc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LWludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC10aW1lb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvbXBvbmVudC1lbWl0dGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGVnanMvaGFtbWVyanMvZGlzdC9oYW1tZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdmlzLXV0aWwvZXNuZXh0L2VzbS92aXMtdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3JlZmxlY3QvY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL3R5cGVvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYW4taW5zdGFuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3F1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9taWNyb3Rhc2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MtcGViYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wZXJmb3JtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuY2F0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJlamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1wdXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYW55LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQucHJvbWlzZS53aXRoLXJlc29sdmVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvcHJvbWlzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLnRyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvcHJvbWlzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvcmVnZW5lcmF0b3IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZyZWV6aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5tYXAuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbWFwL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9lbnRyaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9lbnRyaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2VudHJpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcm5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9uYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLWludGVyZmFjZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL3F1ZXVlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zZXQtcGFydC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zZXQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zdHJlYW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtdmlldy50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtc2V0LWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS12aWV3LWNoZWNrLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvQXV0b2NvbXBsZXRlV2lkZ2V0L0F1dG9jb21wbGV0ZVdpZGdldC50c3giLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Zvcm1EYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Jsb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vY29tbW9uL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NIZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Rocm90dGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90cmFja1N0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2ZldGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvYWRhcHRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCAiLi4vc3JjL21vZGVsL01vZGVsVHlwZUNoZWNrLnRzIiwgIi4uL3NyYy9hcHAvdXRpbC50cyIsICIuLi9zcmMvbW9kZWwvUmVpZmllZC50cyIsICIuLi9zcmMvbW9kZWwvTGlua2VkRW50aXRpZXMudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM1RoaW5nLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNFbnRpdHkudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM0NsYXNzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNQcm9wZXJ0eS50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzSW5kaXZpZHVhbC50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzT250b2xvZ3kudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM09udG9sb2dpZXMudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNFRoaW5nLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRFbnRpdHkudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNENsYXNzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRQcm9wZXJ0eS50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0SW5kaXZpZHVhbC50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0T250b2xvZ3kudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNE9udG9sb2dpZXMudHMiLCAiLi4vc3JjL21vZGVsL01vZGVsT2JqZWN0Q3JlYXRvci50cyIsICIuLi9zcmMvbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHkudHMiLCAiLi4vc3JjL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3QudHMiLCAiLi4vc3JjL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3RSZXN1bHQudHMiLCAiLi4vc3JjL21vZGVsL3RzNG5mZGktbW9kZWwvVHM0bmZkaVNlYXJjaFJlc3VsdC50cyIsICIuLi9zcmMvYXBpL09sc0FwaS50cyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYWNjZXNzaWJpbGl0eS9zY3JlZW5fcmVhZGVyX2xpdmUvc2NyZWVuX3JlYWRlcl9saXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9hY2Nlc3NpYmlsaXR5L3NjcmVlbl9yZWFkZXJfb25seS9zY3JlZW5fcmVhZGVyX29ubHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9odG1sX2lkX2dlbmVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcm5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9yZWdleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdmFsaWRhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9hbGlnbm1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icmVha3BvaW50L2N1cnJlbnRfYnJlYWtwb2ludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tbW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvaG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvdHlwZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2lzX2NvbG9yX2RhcmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9pc192YWxpZF9oZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9oZXhfdG9fcmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2xpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2NsaXBfcmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvdW5wYWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2xhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvQ29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9jaHJvbWEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY215ay9jbXlrMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9jbXlrL3JnYjJjbXlrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2NteWsvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL2hzbDJjc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNsL3JnYjJoc2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL3JnYjJjc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNsL2hzbDJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL2NzczJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2dsL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hjZy9oY2cycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hjZy9yZ2IyaGNnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hjZy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oZXgvaGV4MnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oZXgvcmdiMmhleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oZXgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNpL2hzaTJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNpL3JnYjJoc2kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc3YvaHN2MnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc3YvcmdiMmhzdi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc3YvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL2xhYi1jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL2xhYjJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL3JnYjJsYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9sY2gybGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9sY2gycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9oY2wycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9sYWIybGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9yZ2IybGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9jb2xvcnMvdzNjeDExLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL25hbWVkL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL251bS9udW0ycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL251bS9yZ2IybnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL251bS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9yZ2IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vdGVtcC90ZW1wZXJhdHVyZTJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vdGVtcC9yZ2IydGVtcGVyYXR1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vdGVtcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xhYi9va2xhYjJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vb2tsYWIvcmdiMm9rbGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGFiL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGNoL29rbGNoMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xjaC9yZ2Iyb2tsY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vb2tsY2gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL2FscGhhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9jbGlwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9kYXJrZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL2dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvbHVtaW5hbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvbWl4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9taXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL3ByZW11bHRpcGx5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9zYXR1cmF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvc2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9zaGFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvcmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9scmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9sYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL19oc3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2xjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvbnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9oY2cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2hzaS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvaHNsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9oc3YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL29rbGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9va2xjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvYXZlcmFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3Ivc2NhbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL2Jlemllci5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvYmxlbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL2N1YmVoZWxpeC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvcmFuZG9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2FuYWx5emUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvY29udHJhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvZGVsdGEtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9kaXN0YW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy92YWxpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9zY2FsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvY29sb3JzL2NvbG9yYnJld2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9jb2xvcl9wYWxldHRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvZXVpX3BhbGV0dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvbWFuaXB1bGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvY29udHJhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fY29sb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2FuaW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19icmVha3BvaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL2xvZ2ljYWxzLmpzb24iLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvbG9naWNhbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvbG9naWNhbF9zaG9ydGhhbmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL21hdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvc2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucy90eXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3NpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYm9yZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19sZXZlbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fdHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zdGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL3RoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvd2FybmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLWVsZW1lbnQtZjBkZTk2OGUuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9VdGlsaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi93ZWFrLW1lbW9pemUvZGlzdC9lbW90aW9uLXdlYWstbWVtb2l6ZS5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9lbW90aW9uLW1lbW9pemUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jYWNoZS9kaXN0L2Vtb3Rpb24tY2FjaGUuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvZW1vdGlvbi11dGlscy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MvZGlzdC9lbW90aW9uLXVzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aHJvdHRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2JyZWFrcG9pbnQvX3NvcnRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icmVha3BvaW50L2N1cnJlbnRfYnJlYWtwb2ludF9ob29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvcHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9lbW90aW9uL2Nsb25lX2VsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9lbW90aW9uL3ByZWZpeGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jc3MvY3JlYXRlLWluc3RhbmNlL2Rpc3QvZW1vdGlvbi1jc3MtY3JlYXRlLWluc3RhbmNlLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2Vtb3Rpb24vY3NzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvZW1vdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RoZW1lL3N0eWxlX21lbW9pemF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvaG9va3MvdXNlVXBkYXRlRWZmZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvaG9va3MvdXNlQ29tYmluZWRSZWZzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYnJlYWtwb2ludC9pc193aXRoaW5faG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jYW52YXMvY2FudmFzX3RleHRfdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb3B5L3RhYnVsYXJfY29weS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2ZpbmRFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2NvbW1vbl9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2xvZGFzaF9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9ib29sZWFuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9kYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9udW1iZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X2F1dG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9wb3BvdmVyL3BvcG92ZXJfcG9zaXRpb25pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zZWN1cml0eS9nZXRfc2VjdXJlX3JlbF9mb3JfdGFyZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvc29ydC9zb3J0X2RpcmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL29iamVjdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zb3J0L2NvbXBhcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvcmVzZXQvZ2xvYmFsX3N0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fY29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX2hlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX3BhZGRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX3N0YXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fdHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fcmVzcG9uc2l2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL3Jlc2V0L3Jlc2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL2FuaW1hdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy91dGlsaXR5L2FuaW1hdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2FjY2Vzc2liaWxpdHkvc2NyZWVuX3JlYWRlcl9vbmx5L3NjcmVlbl9yZWFkZXJfb25seS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3RhYmJhYmxlL3NyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL3NoYWRvd3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucy9zaGFkb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b25fZGlzcGxheS9fYnV0dG9uX2Rpc3BsYXkuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uX2Rpc3BsYXkvX2J1dHRvbl9kaXNwbGF5X2NvbnRlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FjY2Vzc2liaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FnZ3JlZ2F0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYWxlcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FuYWx5emVFdmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5hbHl6ZV9ldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5ub3RhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5vbWFseV9jaGFydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5vbWFseV9zd2ltX2xhbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwbV90cmFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FkZF9kYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FwbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FwcF9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hdWRpdGJlYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jYW52YXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jYXNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2NvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jb25zb2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2Rhc2hib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2RldnRvb2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZGlzY292ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9lbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9maWxlYmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2ZsZWV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZ2lzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZ3JhcGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9ncm9rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaGVhcnRiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9sZW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbG9ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21hbmFnZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9tZXRyaWNiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbWV0cmljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbW9uaXRvcmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX25vdGVib29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcGFja2V0YmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3BpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcmVwb3J0aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NlY3VyaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc3BhY2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc3FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdGltZWxpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3VwdGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdmlzdWFsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdnVsbmVyYWJpbGl0eV9tYW5hZ2VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfd2F0Y2hlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93RW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd1N0YXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19kb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19sZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19yaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXJyb3dfdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FydGljbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FzdGVyaXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYmVha2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9iZWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9iZWxsU2xhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JldGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JvbHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JveGVzX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JveGVzX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icmFuY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JyYW5jaFVzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Jyb29tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icnVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9idWxsc2V5ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2FsZW5kYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NoYW5nZV9wb2ludF9kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NoZWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jaGVlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2xpY2tMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbGlja1JpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2xvY2tDb3VudGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZERyaXp6bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nsb3VkU3Rvcm15LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZFN1bm55LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbHVzdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb2xvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29tcHV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29uc29sZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29udGFpbmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QWJvdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZUJlbG93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QmVsb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRyb2xzX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb3B5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb3B5X2NsaXBib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3Jvc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nyb3NzSW5DaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nyb3NzX2luX2NpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3Jvc3NoYWlycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3VycmVuY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2N1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZGF0YWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Rlc2t0b3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RpZmYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Rpc2N1c3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb2N1bWVudEVkaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3RJbkNpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3dubG9hZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9ib2xkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2NvbW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9oZWFkaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfaXRhbGljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3JlZG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9zdHJpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl90YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3VuZGVybGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3VuZG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZW1haWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lbmRwb2ludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lcmFzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lcnJvckZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXNxbFZpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhwYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leHBhbmRNaW5pLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V5ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXllX2Nsb3NlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmFjZV9oYXBweS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmFjZV9uZXV0cmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mYWNlX3NhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmllbGRfc3RhdGlzdGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9maWx0ZXJFeGNsdWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9maWx0ZXJJZ25vcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZpbHRlckluQ2lyY2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9maWx0ZXJJbmNsdWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mbGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkZXJfY2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGRlcl9jbG9zZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZm9sZGVyX29wZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZyYW1lTmV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnJhbWVQcmV2aW91cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnVsbFNjcmVlbkV4aXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Z1bGxfc2NyZWVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ2Vhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ2xvYmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyYWJPbW5pZGlyZWN0aW9uYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ3JhZGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2hlYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWF0bWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWxwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ob21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pSW5DaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ltYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbXBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleFRlbXBvcmFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfY2xvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X2VkaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X2ZsdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9tYXBwaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9vcGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9ydW50aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9zZXR0aW5ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2lucHV0T3V0cHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnNwZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnZlcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2lwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pc3N1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rZXlib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3FsX2ZpZWxkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF9vcGVyYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF92YWx1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3ViZXJuZXRlc05vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xhdW5jaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGF5ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sZXR0ZXJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmVEYXNoZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmVEb3R0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmVTb2xpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGlzdF9hZGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvY2tPcGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dfcGF0dGVybl9hbmFseXNpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nX3JhdGVfYW5hbHlzaXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYWVyb3NwaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2FwYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hcHBfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2F3cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hd3NfbW9uby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19henVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19henVyZV9tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2JlYXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jZXBoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2Nsb3VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jb2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NvZGVzYW5kYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19kb2NrZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZHJvcHdpemFyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbGFzdGljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZWxhc3RpY3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19ldGNkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2djcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19nY3BfbW9uby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19naXRodWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ21haWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ29sYW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2dvb2dsZV9nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2hhcHJveHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29faWJtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2libV9tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2thZmthLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2tpYmFuYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19rdWJlcm5ldGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2xvZ2dpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbG9nc3Rhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbWFwcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tZW1jYWNoZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbWV0cmljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tb25nb2RiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX215c3FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX25naW54LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fb3NxdWVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19waHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fcG9zdGdyZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fcHJvbWV0aGV1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19yYWJiaXRtcS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19yZWRpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19zZWN1cml0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19za2V0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fc2xhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fdXB0aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb193ZWJob29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3dpbmRvd3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dzdGFzaF9pZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX291dHB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hZ25ldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tYXBfbWFya2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW1vcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnVEb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51TGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVudVJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51VXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lcmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9taW5pbWl6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21pbnVzX2luX2NpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXNfaW5fc3F1YXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9hZHZhbmNlZF9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9zaW5nbGVfbWV0cmljX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX3JlZ3Jlc3Npb25fam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tb2JpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21vb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21vdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL25hbWVzcGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbmVzdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9uZXdfY2hhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9vZmZsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9vbmxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhY2thZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhZ2VTZWxlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhZ2VzU2VsZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYWludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFsZXR0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFwZXJfY2xpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFydGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGF1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BheW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BlbmNpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGVyY2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9waW5fZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9waXBlQnJlYWtzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9waXBlTm9CcmVha3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Bpdm90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbGF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbGF5RmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzX2luX2NpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzX2luX3NxdWFyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcG9wb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3F1b3RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9yZWZyZXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9yZXBvcnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcmV0dXJuX2tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2F2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2NhbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NoYXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zaGFyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2luZ2xlX21ldHJpY192aWV3ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Nub3dmbGFrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydEFzY2VuZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydERlc2NlbmRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zb3J0UmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRfZG93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydF91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NwYWNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3BhcmtsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJQbHVzRW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJQbHVzRmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfbWludXNfZW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RvcF9maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3Bfc2xhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3JhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3VibW9kdWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N3YXRjaF9pbnB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3ltbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGFibGVPZkNvbnRlbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RlbXBlcmF0dXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90aW1lUmVmcmVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGltZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RpbWVsaW5lV2l0aEFycm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90aW1lc2xpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFsaWFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFubm90YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQmluYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkJvb2xlYW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ2xhc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Db25zdGFudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5EYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkRpbWVuc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkVudW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRW51bU1lbWJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FdmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FeGNlcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRmllbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5GbGF0dGVuZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuR2VvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkhpc3RvZ3JhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5JUC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5JbnRlcmZhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuSm9pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5LZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuS2V5d29yZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5NZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Nb2R1bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTmFtZXNwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk5lc3RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5OdWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk51bWJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5PYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuT3BlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUGFja2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5QYXJhbWV0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUGVyY29sYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Qcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUmVwby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TZWFyY2hUeXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblNlbWFudGljVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TaGFwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuU3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5UYWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblZhcmlhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblZlY3RvckRlbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblZlY3RvclNwYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdHJhaW5pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYW5zaXRpb25MZWZ0SW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYW5zaXRpb25MZWZ0T3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90cmFuc2l0aW9uVG9wSW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYW5zaXRpb25Ub3BPdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy91bmZvbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3VubGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlckF2YXRhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3ZlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlkZW9QbGF5ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19hcmVhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYXJlYV9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19nYXVnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2dvYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19saW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19tYXBfcmVnaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWV0cmljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfcGllLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190YWdfY2xvdWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGltZWxpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc192ZWdhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dhcm5pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dhcm5pbmdGaWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dvcmRXcmFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93b3JkV3JhcERpc2FibGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93cmVuY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vaWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9pY29uX21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3JlYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL25hbWVkX2NvbG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9pY29uLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaTE4bi9pMThuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0L2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2kxOG4vaTE4bl91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9sb2FkaW5nL19sb2FkaW5nX3N0cmluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZ19zcGlubmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9sb2FkaW5nL2xvYWRpbmdfc3Bpbm5lci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b25fZGlzcGxheS9fYnV0dG9uX2Rpc3BsYXlfY29udGVudC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9lbXB0eS9idXR0b25fZW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b25fZW1wdHkvYnV0dG9uX2VtcHR5LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9pY29uL2J1dHRvbl9pY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uX2ljb24vYnV0dG9uX2ljb24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbm5lcl90ZXh0L2lubmVyX3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Rvb2xfdGlwL3Rvb2xfdGlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9vYnNlcnZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9ydGFsL3BvcnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcHJvdmlkZXIvY29tcG9uZW50X2RlZmF1bHRzL2NvbXBvbmVudF9kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdG9vbF90aXAvdG9vbF90aXBfcG9wb3Zlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdG9vbF90aXAvdG9vbF90aXAuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC90b29sX3RpcF9hbmNob3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Rvb2xfdGlwL3Rvb2xfdGlwX2Fycm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC90b29sX3RpcF9tYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC9pY29uX3RpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHRfY29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9jb2xvci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9hbGlnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0X2FsaWduLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbGluay9saW5rLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHQuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyL2Rpc3QvcmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2F1dG9fc2l6ZXIvYXV0b19zaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvYmFkZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbG9yX3BpY2tlci91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvY29sb3JfdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2JhZGdlL2JhZGdlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvYmV0YV9iYWRnZS9iZXRhX2JhZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYWRnZS9iZXRhX2JhZGdlL2JldGFfYmFkZ2Uuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9saW5rL2xpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xpbmsvZXh0ZXJuYWxfbGlua19pY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL2lucHV0X3BvcG92ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZvY3VzX3RyYXAvZm9jdXNfdHJhcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L0NvbWJpbmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9VSS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvVUkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLWNhbGxiYWNrLXJlZi9kaXN0L2VzMjAxNS9hc3NpZ25SZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1jYWxsYmFjay1yZWYvZGlzdC9lczIwMTUvdXNlUmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2UtY2FsbGJhY2stcmVmL2Rpc3QvZXMyMDE1L3VzZU1lcmdlUmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLXNpZGVjYXIvZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9kaXN0L2VzMjAxNS9leHBvcnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvTG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvRm9jdXNHdWFyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvc2NvcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9VSS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L1RyYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtY2xpZW50c2lkZS1lZmZlY3QvbGliL2luZGV4LmVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2lzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYk9yZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYmJhYmxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy90YWJVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9ET011dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9hbGwtYWZmZWN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvc2FmZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9nZXRBY3RpdmVFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzSW5zaWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzSXNIaWRkZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvY29ycmVjdEZvY3VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2ZpcnN0Rm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvc29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2F1dG8tZm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvcGFyZW50aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzU29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvY29tbWFuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvbW92ZUZvY3VzSW5zaWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3JldHVybi1mb2N1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9zaWJsaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3NpZGVjYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L1NpZGVFZmZlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L2NvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2hvb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dldC1ub25jZS9kaXN0L2VzMjAxNS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L3NpbmdsZXRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2NvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L2FnZ3Jlc2l2ZUNhcHR1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L2hhbmRsZVNjcm9sbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvc2lkZWNhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvRWZmZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmlhLWhpZGRlbi9kaXN0L2VzMjAxNS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvSW50ZXJhY3Rpdml0eURpc2FibGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9zaWRlY2FyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL29ic2VydmVyL211dGF0aW9uX29ic2VydmVyL211dGF0aW9uX29ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdXRzaWRlX2NsaWNrX2RldGVjdG9yL291dHNpZGVfY2xpY2tfZGV0ZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlcl9hcnJvdy9fcG9wb3Zlcl9hcnJvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX2Fycm93L19wb3BvdmVyX2Fycm93LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX3BhbmVsL19wb3BvdmVyX3BhbmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wYW5lbC9wYW5lbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFuZWwvcGFuZWwuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXJfcGFuZWwvX3BvcG92ZXJfcGFuZWwuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jYWxsX291dC9jYWxsX291dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc3BhY2VyL3NwYWNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc3BhY2VyL3NwYWNlci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RpdGxlL3RpdGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jYWxsX291dC9jYWxsX291dC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NhcmQvY2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY2FyZC9jYXJkX3NlbGVjdC9jYXJkX3NlbGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY2FyZC9jYXJkX3NlbGVjdC9jYXJkX3NlbGVjdC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NhcmQvY2FyZC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vY2hlY2tib3gvY2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vY2hlY2tib3gvY2hlY2tib3guc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fbGFiZWwvZm9ybV9sYWJlbC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZsZXgvZmxleF9ncm91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZmxleC9mbGV4X2dyb3VwLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZmxleC9mbGV4X2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZsZXgvZmxleF9pdGVtLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9ldWlfZm9ybV9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL3ZhbGlkYXRhYmxlX2NvbnRyb2wvdmFsaWRhdGFibGVfY29udHJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9sYWJlbC9mb3JtX2xhYmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9pY29ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXRfY2xlYXJfYnV0dG9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9jbGVhcl9idXR0b24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9jdXN0b21faWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXRfaWNvbnMuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvX251bV9pY29ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXQuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2ZpZWxkX3NlYXJjaC9maWVsZF9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icm93c2VyL2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZmllbGRfc2VhcmNoL2ZpZWxkX3NlYXJjaC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9lcnJvcl90ZXh0L2Zvcm1fZXJyb3JfdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2Vycm9yX3RleHQvZm9ybV9lcnJvcl90ZXh0LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2hlbHBfdGV4dC9mb3JtX2hlbHBfdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2hlbHBfdGV4dC9mb3JtX2hlbHBfdGV4dC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9yb3cvZm9ybV9yb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9yb3cvZm9ybV9yb3cuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9ob3Jpem9udGFsX3J1bGUvaG9yaXpvbnRhbF9ydWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9ob3Jpem9udGFsX3J1bGUvaG9yaXpvbnRhbF9ydWxlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9wYW5lbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0X21lbnUvY29udGV4dF9tZW51X2l0ZW0uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0X21lbnUvY29udGV4dF9tZW51LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9wYW5lbC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vc3dpdGNoL3N3aXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9zd2l0Y2gvc3dpdGNoLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY3NzL2Rpc3QvZW1vdGlvbi1jc3MuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdmVybGF5X21hc2svb3ZlcmxheV9tYXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdmVybGF5X21hc2svb3ZlcmxheV9tYXNrLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvb3ZlcmxheV9tYXNrL292ZXJsYXlfbWFza19ib2R5LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvbm9kZV9tb2R1bGVzL21lbW9pemUtb25lL2Rpc3QvbWVtb2l6ZS1vbmUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL3RpbWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2RvbUhlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvY3JlYXRlR3JpZENvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9WYXJpYWJsZVNpemVHcmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2NyZWF0ZUxpc3RDb21wb25lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvVmFyaWFibGVTaXplTGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9GaXhlZFNpemVHcmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL0ZpeGVkU2l6ZUxpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvc2hhbGxvd0RpZmZlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvYXJlRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvc2hvdWxkQ29tcG9uZW50VXBkYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvY29tYm9fYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvbWF0Y2hpbmdfb3B0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfcGlsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfcGlsbC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfaW5wdXQvY29tYm9fYm94X2lucHV0LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9vcHRpb25zX2xpc3QvY29tYm9fYm94X29wdGlvbnNfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaGlnaGxpZ2h0L2hpZ2hsaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbWFyay9tYXJrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9tYXJrL21hcmsuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9oaWdobGlnaHQvX2hpZ2hsaWdodF9hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hpZ2hsaWdodC9faGlnaGxpZ2h0X2ZpcnN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9maWx0ZXJfZ3JvdXAvZmlsdGVyX3NlbGVjdF9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9maWx0ZXJfZ3JvdXAvZmlsdGVyX3NlbGVjdF9pdGVtLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dF90cnVuY2F0ZS90ZXh0X3RydW5jYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0X3RydW5jYXRlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0X3RydW5jYXRlL3RleHRfdHJ1bmNhdGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0X3RydW5jYXRlL3RleHRfYmxvY2tfdHJ1bmNhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfb3B0aW9uc19saXN0L2NvbWJvX2JveF90aXRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9vcHRpb25zX2xpc3QvY29tYm9fYm94X29wdGlvbnNfbGlzdC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3guc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9wYWdpbmF0aW9uL3RhYmxlX3BhZ2luYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uX2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uX2J1dHRvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbl9idXR0b25fYXJyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3BhZ2luYXRpb24vdGFibGVfcGFnaW5hdGlvbl9kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZGVzY3JpcHRpb25fbGlzdC9kZXNjcmlwdGlvbl9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9kZXNjcmlwdGlvbl9saXN0L2Rlc2NyaXB0aW9uX2xpc3RfY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZGVzY3JpcHRpb25fbGlzdC9kZXNjcmlwdGlvbl9saXN0X3RpdGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9kZXNjcmlwdGlvbl9saXN0L2Rlc2NyaXB0aW9uX2xpc3RfdGl0bGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9kZXNjcmlwdGlvbl9saXN0L2Rlc2NyaXB0aW9uX2xpc3RfZGVzY3JpcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Rlc2NyaXB0aW9uX2xpc3QvZGVzY3JpcHRpb25fbGlzdF9kZXNjcmlwdGlvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Rlc2NyaXB0aW9uX2xpc3QvZGVzY3JpcHRpb25fbGlzdC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJzL3RhYi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFic19jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJzL3RhYnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFicy5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFiYmVkX2NvbnRlbnQvdGFiYmVkX2NvbnRlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2RlbGF5X3JlbmRlci9kZWxheV9yZW5kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hlYWx0aC9oZWFsdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hlYWx0aC9oZWFsdGguc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2Vfd3JhcHBlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2Vfd3JhcHBlci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfYnV0dG9uLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfY2FwdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfY2FwdGlvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfZnVsbHNjcmVlbl93cmFwcGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV9mdWxsc2NyZWVuX3dyYXBwZXIuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcHJvdmlkZXIvcHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy91dGlsaXR5L3V0aWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Byb3ZpZGVyL2NhY2hlL2NhY2hlX3Byb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wcm92aWRlci9zeXN0ZW1fY29sb3JfbW9kZS9zeXN0ZW1fY29sb3JfbW9kZV9wcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcHJvdmlkZXIvbmVzdGVkL25lc3RlZF9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9zZWFyY2gvc2VsZWN0YWJsZV9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvbWF0Y2hpbmdfb3B0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlX21lc3NhZ2Uvc2VsZWN0YWJsZV9tZXNzYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfbWVzc2FnZS9zZWxlY3RhYmxlX21lc3NhZ2Uuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfbGlzdC9zZWxlY3RhYmxlX2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9saXN0L3NlbGVjdGFibGVfbGlzdF9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfbGlzdC9zZWxlY3RhYmxlX2xpc3RfaXRlbS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9saXN0L3NlbGVjdGFibGVfbGlzdC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS9tb2JpbGUvcmVzcG9uc2l2ZV9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2JvZHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2Zvb3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfZm9vdGVyX2NlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS9fdGFibGVfY2VsbF9jb250ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS9fdGFibGVfY2VsbF9jb250ZW50LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfY2VsbHNfc2hhcmVkLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfaGVhZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9oZWFkZXJfY2VsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfaGVhZGVyX2NlbGxfY2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL21vYmlsZS90YWJsZV9oZWFkZXJfbW9iaWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS9tb2JpbGUvdGFibGVfaGVhZGVyX21vYmlsZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL21vYmlsZS90YWJsZV9zb3J0X21vYmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX3NvcnRfbW9iaWxlX2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3Jvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93X2NlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3Jvd19jZWxsLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93X2NlbGxfY2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2Jhc2ljX3RhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9jb2xsYXBzZWRfaXRlbV9hY3Rpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9hY3Rpb25fdHlwZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2V4cGFuZGVkX2l0ZW1fYWN0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvZGVmYXVsdF9pdGVtX2FjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvY3VzdG9tX2l0ZW1fYWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9wYWdpbmF0aW9uX2Jhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvYmFzaWNfdGFibGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3N1YnNjcmliYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9mb2N1c01hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvb25saW5lTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9yZXRyeWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL25vdGlmeU1hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbXV0YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbXV0YXRpb25DYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnlDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnlPYnNlcnZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvcmVhY3RCYXRjaGVkVXBkYXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3Qvc2V0QmF0Y2hVcGRhdGVzRm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L2xvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3Qvc2V0TG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9RdWVyeUNsaWVudFByb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9RdWVyeUVycm9yUmVzZXRCb3VuZGFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3VzZUJhc2VRdWVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvdXNlUXVlcnkuanMiLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9CcmVhZGNydW1iV2lkZ2V0L0JyZWFkY3J1bWJQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvRGF0YUNvbnRlbnRXaWRnZXQvRGF0YUNvbnRlbnRXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvRW50aXR5SW5mb1dpZGdldC9FbnRpdHlJbmZvV2lkZ2V0LnRzeCIsICIuLi9zcmMvbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0pzb25BcGlXaWRnZXQvSnNvbkFwaVdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9CcmVhZGNydW1iV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvRGVzY3JpcHRpb25XaWRnZXQvRGVzY3JpcHRpb25XaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvRGVzY3JpcHRpb25XaWRnZXQvRGVzY3JpcHRpb25QcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvSXJpV2lkZ2V0L0lyaVdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvVGFiV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9UYWJQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0Nyb3NzUmVmV2lkZ2V0L0Nyb3NzUmVmVGFiUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL09udG9sb2d5SW5mb1dpZGdldC9PbnRvbG9neUluZm9XaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0hpZXJhcmNoeVdpZGdldC9IaWVyYXJjaHlXaWRnZXQudHN4IiwgIi4uL3NyYy9hcGkvU2tvc0FwaS50cyIsICIuLi9zcmMvYXBpL09udG9Qb3J0YWxBcGkudHMiLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQ3Jvc3NSZWZXaWRnZXQvQ3Jvc3NSZWZUYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGl0bGVXaWRnZXQvVGl0bGVXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGl0bGVXaWRnZXQvVGl0bGVQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvTWV0YWRhdGFXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvRW50aXR5T250b0xpc3RXaWRnZXQvRW50aXR5T250b0xpc3RQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvRW50aXR5RGVmaW5lZEJ5V2lkZ2V0L0VudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9SZXNvdXJjZXNXaWRnZXQvUmVzb3VyY2VzV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL1NlYXJjaEJhcldpZGdldC9TZWFyY2hCYXJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvTWV0YWRhdGFDb21wYWN0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvRW50aXR5UmVsYXRpb25zV2lkZ2V0L0VudGl0eVJlbGF0aW9uc1dpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9UZXJtRGVwaWN0aW9uV2lkZ2V0L1Rlcm1EZXBpY3Rpb25XaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvR3JhcGhWaWV3V2lkZ2V0L0dyYXBoVmlld1dpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxuLy8gVE9ETzogdGhpcyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgZ2V0cyBpbXBvcnRlZCBkdXJpbmcgYnVpbGQuXG52YXIgUmVhY3RWZXJzaW9uID0gJzE3LjAuMic7XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSAweGVhY2E7XG5leHBvcnRzLkZyYWdtZW50ID0gMHhlYWNiO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gMHhlYWNjO1xuZXhwb3J0cy5Qcm9maWxlciA9IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IDB4ZWFjZTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gMHhlYWQwO1xuZXhwb3J0cy5TdXNwZW5zZSA9IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gMHhlYWQ5O1xudmFyIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gMHhlYWRhO1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSAweGVhZDU7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IDB4ZWFkNztcbnZhciBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IDB4ZWFlMDtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IDB4ZWFlMTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IDB4ZWFlMjtcbnZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSAweGVhZTM7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZWxlbWVudCcpO1xuICBSRUFDVF9QT1JUQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucG9ydGFsJyk7XG4gIGV4cG9ydHMuRnJhZ21lbnQgPSBzeW1ib2xGb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG4gIGV4cG9ydHMuU3RyaWN0TW9kZSA9IHN5bWJvbEZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbiAgZXhwb3J0cy5Qcm9maWxlciA9IHN5bWJvbEZvcigncmVhY3QucHJvZmlsZXInKTtcbiAgUkVBQ1RfUFJPVklERVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvdmlkZXInKTtcbiAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5jb250ZXh0Jyk7XG4gIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG4gIGV4cG9ydHMuU3VzcGVuc2UgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG4gIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xuICBSRUFDVF9NRU1PX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm1lbW8nKTtcbiAgUkVBQ1RfTEFaWV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sYXp5Jyk7XG4gIFJFQUNUX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmJsb2NrJyk7XG4gIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zZXJ2ZXIuYmxvY2snKTtcbiAgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnVuZGFtZW50YWwnKTtcbiAgUkVBQ1RfU0NPUEVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2NvcGUnKTtcbiAgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9wYXF1ZS5pZCcpO1xuICBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZGVidWdfdHJhY2VfbW9kZScpO1xuICBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG4gIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGVnYWN5X2hpZGRlbicpO1xufVxuXG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBkaXNwYXRjaGVyLlxuICovXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IGJhdGNoJ3MgY29uZmlndXJhdGlvbiBzdWNoIGFzIGhvdyBsb25nIGFuIHVwZGF0ZVxuICogc2hvdWxkIHN1c3BlbmQgZm9yIGlmIGl0IG5lZWRzIHRvLlxuICovXG52YXIgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcgPSB7XG4gIHRyYW5zaXRpb246IDBcbn07XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgb3duZXIuXG4gKlxuICogVGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIGNvbXBvbmVudCB3aG8gc2hvdWxkIG93biBhbnkgY29tcG9uZW50cyB0aGF0IGFyZVxuICogY3VycmVudGx5IGJlaW5nIGNvbnN0cnVjdGVkLlxuICovXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge1JlYWN0Q29tcG9uZW50fVxuICAgKi9cbiAgY3VycmVudDogbnVsbFxufTtcblxudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSB7fTtcbnZhciBjdXJyZW50RXh0cmFTdGFja0ZyYW1lID0gbnVsbDtcbmZ1bmN0aW9uIHNldEV4dHJhU3RhY2tGcmFtZShzdGFjaykge1xuICB7XG4gICAgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IHN0YWNrO1xuICB9XG59XG5cbntcbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUgPSBmdW5jdGlvbiAoc3RhY2spIHtcbiAgICB7XG4gICAgICBjdXJyZW50RXh0cmFTdGFja0ZyYW1lID0gc3RhY2s7XG4gICAgfVxuICB9OyAvLyBTdGFjayBpbXBsZW1lbnRhdGlvbiBpbmplY3RlZCBieSB0aGUgY3VycmVudCByZW5kZXJlci5cblxuXG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrID0gbnVsbDtcblxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YWNrID0gJyc7IC8vIEFkZCBhbiBleHRyYSB0b3AgZnJhbWUgd2hpbGUgYW4gZWxlbWVudCBpcyBiZWluZyB2YWxpZGF0ZWRcblxuICAgIGlmIChjdXJyZW50RXh0cmFTdGFja0ZyYW1lKSB7XG4gICAgICBzdGFjayArPSBjdXJyZW50RXh0cmFTdGFja0ZyYW1lO1xuICAgIH0gLy8gRGVsZWdhdGUgdG8gdGhlIGluamVjdGVkIHJlbmRlcmVyLXNwZWNpZmljIGltcGxlbWVudGF0aW9uXG5cblxuICAgIHZhciBpbXBsID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2s7XG5cbiAgICBpZiAoaW1wbCkge1xuICAgICAgc3RhY2sgKz0gaW1wbCgpIHx8ICcnO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFjaztcbiAgfTtcbn1cblxuLyoqXG4gKiBVc2VkIGJ5IGFjdCgpIHRvIHRyYWNrIHdoZXRoZXIgeW91J3JlIGluc2lkZSBhbiBhY3QoKSBzY29wZS5cbiAqL1xudmFyIElzU29tZVJlbmRlcmVyQWN0aW5nID0ge1xuICBjdXJyZW50OiBmYWxzZVxufTtcblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0ge1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyOiBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzogUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsXG4gIFJlYWN0Q3VycmVudE93bmVyOiBSZWFjdEN1cnJlbnRPd25lcixcbiAgSXNTb21lUmVuZGVyZXJBY3Rpbmc6IElzU29tZVJlbmRlcmVyQWN0aW5nLFxuICAvLyBVc2VkIGJ5IHJlbmRlcmVycyB0byBhdm9pZCBidW5kbGluZyBvYmplY3QtYXNzaWduIHR3aWNlIGluIFVNRCBidW5kbGVzOlxuICBhc3NpZ246IF9hc3NpZ25cbn07XG5cbntcbiAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG59XG5cbi8vIGJ5IGNhbGxzIHRvIHRoZXNlIG1ldGhvZHMgYnkgYSBCYWJlbCBwbHVnaW4uXG4vL1xuLy8gSW4gUFJPRCAob3IgaW4gcGFja2FnZXMgd2l0aG91dCBhY2Nlc3MgdG8gUmVhY3QgaW50ZXJuYWxzKSxcbi8vIHRoZXkgYXJlIGxlZnQgYXMgdGhleSBhcmUgaW5zdGVhZC5cblxuZnVuY3Rpb24gd2Fybihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnd2FybicsIGZvcm1hdCwgYXJncyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfVxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiAnJyArIGl0ZW07XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG52YXIgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ID0ge307XG5cbmZ1bmN0aW9uIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBjYWxsZXJOYW1lKSB7XG4gIHtcbiAgICB2YXIgX2NvbnN0cnVjdG9yID0gcHVibGljSW5zdGFuY2UuY29uc3RydWN0b3I7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBfY29uc3RydWN0b3IgJiYgKF9jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCBfY29uc3RydWN0b3IubmFtZSkgfHwgJ1JlYWN0Q2xhc3MnO1xuICAgIHZhciB3YXJuaW5nS2V5ID0gY29tcG9uZW50TmFtZSArIFwiLlwiICsgY2FsbGVyTmFtZTtcblxuICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlcnJvcihcIkNhbid0IGNhbGwgJXMgb24gYSBjb21wb25lbnQgdGhhdCBpcyBub3QgeWV0IG1vdW50ZWQuIFwiICsgJ1RoaXMgaXMgYSBuby1vcCwgYnV0IGl0IG1pZ2h0IGluZGljYXRlIGEgYnVnIGluIHlvdXIgYXBwbGljYXRpb24uICcgKyAnSW5zdGVhZCwgYXNzaWduIHRvIGB0aGlzLnN0YXRlYCBkaXJlY3RseSBvciBkZWZpbmUgYSBgc3RhdGUgPSB7fTtgICcgKyAnY2xhc3MgcHJvcGVydHkgd2l0aCB0aGUgZGVzaXJlZCBzdGF0ZSBpbiB0aGUgJXMgY29tcG9uZW50LicsIGNhbGxlck5hbWUsIGNvbXBvbmVudE5hbWUpO1xuXG4gICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldID0gdHJ1ZTtcbiAgfVxufVxuLyoqXG4gKiBUaGlzIGlzIHRoZSBhYnN0cmFjdCBBUEkgZm9yIGFuIHVwZGF0ZSBxdWV1ZS5cbiAqL1xuXG5cbnZhciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IHtcbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2Ugd2Ugd2FudCB0byB0ZXN0LlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHByb3RlY3RlZFxuICAgKiBAZmluYWxcbiAgICovXG4gIGlzTW91bnRlZDogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoXG4gICAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gICAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlXG4gICAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IGNhbGxlck5hbWUgbmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ2ZvcmNlVXBkYXRlJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS5cbiAgICogWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjb21wbGV0ZVN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAncmVwbGFjZVN0YXRlJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2UgX3BlbmRpbmdTdGF0ZSBpc1xuICAgKiBpbnRlcm5hbC4gVGhpcyBwcm92aWRlcyBhIG1lcmdpbmcgc3RyYXRlZ3kgdGhhdCBpcyBub3QgYXZhaWxhYmxlIHRvIGRlZXBcbiAgICogcHJvcGVydGllcyB3aGljaCBpcyBjb25mdXNpbmcuIFRPRE86IEV4cG9zZSBwZW5kaW5nU3RhdGUgb3IgZG9uJ3QgdXNlIGl0XG4gICAqIGR1cmluZyB0aGUgbWVyZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBzdGF0ZS5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBOYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpO1xuICB9XG59O1xuXG52YXIgZW1wdHlPYmplY3QgPSB7fTtcblxue1xuICBPYmplY3QuZnJlZXplKGVtcHR5T2JqZWN0KTtcbn1cbi8qKlxuICogQmFzZSBjbGFzcyBoZWxwZXJzIGZvciB0aGUgdXBkYXRpbmcgc3RhdGUgb2YgYSBjb21wb25lbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OyAvLyBJZiBhIGNvbXBvbmVudCBoYXMgc3RyaW5nIHJlZnMsIHdlIHdpbGwgYXNzaWduIGEgZGlmZmVyZW50IG9iamVjdCBsYXRlci5cblxuICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDsgLy8gV2UgaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB1cGRhdGVyIGJ1dCB0aGUgcmVhbCBvbmUgZ2V0cyBpbmplY3RlZCBieSB0aGVcbiAgLy8gcmVuZGVyZXIuXG5cbiAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcbn1cblxuQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG4vKipcbiAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgdG8gbXV0YXRlXG4gKiBzdGF0ZS4gWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICpcbiAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICpcbiAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGNhbGxzIHRvIGBzZXRTdGF0ZWAgd2lsbCBydW4gc3luY2hyb25vdXNseSxcbiAqIGFzIHRoZXkgbWF5IGV2ZW50dWFsbHkgYmUgYmF0Y2hlZCB0b2dldGhlci4gIFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbFxuICogY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGNhbGwgdG8gc2V0U3RhdGUgaXMgYWN0dWFsbHlcbiAqIGNvbXBsZXRlZC5cbiAqXG4gKiBXaGVuIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gc2V0U3RhdGUsIGl0IHdpbGwgYmUgY2FsbGVkIGF0IHNvbWUgcG9pbnQgaW5cbiAqIHRoZSBmdXR1cmUgKG5vdCBzeW5jaHJvbm91c2x5KS4gSXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgdXAgdG8gZGF0ZVxuICogY29tcG9uZW50IGFyZ3VtZW50cyAoc3RhdGUsIHByb3BzLCBjb250ZXh0KS4gVGhlc2UgdmFsdWVzIGNhbiBiZSBkaWZmZXJlbnRcbiAqIGZyb20gdGhpcy4qIGJlY2F1c2UgeW91ciBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGFmdGVyIHJlY2VpdmVQcm9wcyBidXQgYmVmb3JlXG4gKiBzaG91bGRDb21wb25lbnRVcGRhdGUsIGFuZCB0aGlzIG5ldyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHdpbGwgbm90IHlldCBiZVxuICogYXNzaWduZWQgdG8gdGhpcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdHxmdW5jdGlvbn0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSBvciBmdW5jdGlvbiB0b1xuICogICAgICAgIHByb2R1Y2UgbmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIGN1cnJlbnQgc3RhdGUuXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHN0YXRlIGlzIHVwZGF0ZWQuXG4gKiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuXG5Db21wb25lbnQucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2spIHtcbiAgaWYgKCEodHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyB8fCBwYXJ0aWFsU3RhdGUgPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcywgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgJ3NldFN0YXRlJyk7XG59O1xuLyoqXG4gKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoXG4gKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAqXG4gKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAqXG4gKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlXG4gKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICpcbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgdXBkYXRlIGlzIGNvbXBsZXRlLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuXG5Db21wb25lbnQucHJvdG90eXBlLmZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHRoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcywgY2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpO1xufTtcbi8qKlxuICogRGVwcmVjYXRlZCBBUElzLiBUaGVzZSBBUElzIHVzZWQgdG8gZXhpc3Qgb24gY2xhc3NpYyBSZWFjdCBjbGFzc2VzIGJ1dCBzaW5jZVxuICogd2Ugd291bGQgbGlrZSB0byBkZXByZWNhdGUgdGhlbSwgd2UncmUgbm90IGdvaW5nIHRvIG1vdmUgdGhlbSBvdmVyIHRvIHRoaXNcbiAqIG1vZGVybiBiYXNlIGNsYXNzLiBJbnN0ZWFkLCB3ZSBkZWZpbmUgYSBnZXR0ZXIgdGhhdCB3YXJucyBpZiBpdCdzIGFjY2Vzc2VkLlxuICovXG5cblxue1xuICB2YXIgZGVwcmVjYXRlZEFQSXMgPSB7XG4gICAgaXNNb3VudGVkOiBbJ2lzTW91bnRlZCcsICdJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGluZyByZXF1ZXN0cyBpbiAnICsgJ2NvbXBvbmVudFdpbGxVbm1vdW50IHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzLiddLFxuICAgIHJlcGxhY2VTdGF0ZTogWydyZXBsYWNlU3RhdGUnLCAnUmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBzZXRTdGF0ZSBpbnN0ZWFkIChzZWUgJyArICdodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzMyMzYpLiddXG4gIH07XG5cbiAgdmFyIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyA9IGZ1bmN0aW9uIChtZXRob2ROYW1lLCBpbmZvKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbXBvbmVudC5wcm90b3R5cGUsIG1ldGhvZE5hbWUsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB3YXJuKCclcyguLi4pIGlzIGRlcHJlY2F0ZWQgaW4gcGxhaW4gSmF2YVNjcmlwdCBSZWFjdCBjbGFzc2VzLiAlcycsIGluZm9bMF0sIGluZm9bMV0pO1xuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgZm9yICh2YXIgZm5OYW1lIGluIGRlcHJlY2F0ZWRBUElzKSB7XG4gICAgaWYgKGRlcHJlY2F0ZWRBUElzLmhhc093blByb3BlcnR5KGZuTmFtZSkpIHtcbiAgICAgIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhmbk5hbWUsIGRlcHJlY2F0ZWRBUElzW2ZuTmFtZV0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBDb21wb25lbnREdW1teSgpIHt9XG5cbkNvbXBvbmVudER1bW15LnByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4vKipcbiAqIENvbnZlbmllbmNlIGNvbXBvbmVudCB3aXRoIGRlZmF1bHQgc2hhbGxvdyBlcXVhbGl0eSBjaGVjayBmb3Igc0NVLlxuICovXG5cbmZ1bmN0aW9uIFB1cmVDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OyAvLyBJZiBhIGNvbXBvbmVudCBoYXMgc3RyaW5nIHJlZnMsIHdlIHdpbGwgYXNzaWduIGEgZGlmZmVyZW50IG9iamVjdCBsYXRlci5cblxuICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcbn1cblxudmFyIHB1cmVDb21wb25lbnRQcm90b3R5cGUgPSBQdXJlQ29tcG9uZW50LnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnREdW1teSgpO1xucHVyZUNvbXBvbmVudFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFB1cmVDb21wb25lbnQ7IC8vIEF2b2lkIGFuIGV4dHJhIHByb3RvdHlwZSBqdW1wIGZvciB0aGVzZSBtZXRob2RzLlxuXG5fYXNzaWduKHB1cmVDb21wb25lbnRQcm90b3R5cGUsIENvbXBvbmVudC5wcm90b3R5cGUpO1xuXG5wdXJlQ29tcG9uZW50UHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ID0gdHJ1ZTtcblxuLy8gYW4gaW1tdXRhYmxlIG9iamVjdCB3aXRoIGEgc2luZ2xlIG11dGFibGUgdmFsdWVcbmZ1bmN0aW9uIGNyZWF0ZVJlZigpIHtcbiAgdmFyIHJlZk9iamVjdCA9IHtcbiAgICBjdXJyZW50OiBudWxsXG4gIH07XG5cbiAge1xuICAgIE9iamVjdC5zZWFsKHJlZk9iamVjdCk7XG4gIH1cblxuICByZXR1cm4gcmVmT2JqZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIG91dGVyVHlwZS5kaXNwbGF5TmFtZSB8fCAoZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBleHBvcnRzLkZyYWdtZW50OlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBleHBvcnRzLlByb2ZpbGVyOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIGV4cG9ydHMuU3RyaWN0TW9kZTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIGV4cG9ydHMuU3VzcGVuc2U6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBSRVNFUlZFRF9QUk9QUyA9IHtcbiAga2V5OiB0cnVlLFxuICByZWY6IHRydWUsXG4gIF9fc2VsZjogdHJ1ZSxcbiAgX19zb3VyY2U6IHRydWVcbn07XG52YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24sIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duLCBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdyZWYnKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAncmVmJykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdrZXknKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAna2V5JykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdrZXknLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ1JlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGByZWZgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHdhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ3JlZicsIHtcbiAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY29uZmlnLnJlZiA9PT0gJ3N0cmluZycgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCAmJiBjb25maWcuX19zZWxmICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuc3RhdGVOb2RlICE9PSBjb25maWcuX19zZWxmKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJyArICdTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArICdUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiAnICsgJ1dlIGFzayB5b3UgdG8gbWFudWFsbHkgZml4IHRoaXMgY2FzZSBieSB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGNvbXBvbmVudE5hbWUsIGNvbmZpZy5yZWYpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUmVhY3QgZWxlbWVudC4gVGhpcyBubyBsb25nZXIgYWRoZXJlcyB0b1xuICogdGhlIGNsYXNzIHBhdHRlcm4sIHNvIGRvIG5vdCB1c2UgbmV3IHRvIGNhbGwgaXQuIEFsc28sIGluc3RhbmNlb2YgY2hlY2tcbiAqIHdpbGwgbm90IHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xuICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7Kn0gcHJvcHNcbiAqIEBwYXJhbSB7Kn0ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBvd25lclxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXG4gKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvd1xuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xuICogY2hhbmdlIGluIGJlaGF2aW9yLlxuICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhlcndpc2UpXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxuICogQGludGVybmFsXG4gKi9cblxuXG52YXIgUmVhY3RFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykge1xuICB2YXIgZWxlbWVudCA9IHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvd3MgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IEVsZW1lbnRcbiAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICB0eXBlOiB0eXBlLFxuICAgIGtleToga2V5LFxuICAgIHJlZjogcmVmLFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxuICAgIF9vd25lcjogb3duZXJcbiAgfTtcblxuICB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307IC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlXG4gICAgLy8gdGhlIHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNob3VsZFxuICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRlc3QgZnJhbWV3b3JrXG4gICAgLy8gaWdub3JlcyBpdC5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50Ll9zdG9yZSwgJ3ZhbGlkYXRlZCcsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZhbHNlXG4gICAgfSk7IC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc2VsZlxuICAgIH0pOyAvLyBUd28gZWxlbWVudHMgY3JlYXRlZCBpbiB0d28gZGlmZmVyZW50IHBsYWNlcyBzaG91bGQgYmUgY29uc2lkZXJlZFxuICAgIC8vIGVxdWFsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIGFuZCB0aGVyZWZvcmUgd2UgaGlkZSBpdCBmcm9tIGVudW1lcmF0aW9uLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc291cmNlJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNvdXJjZVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufTtcbi8qKlxuICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IG9mIHRoZSBnaXZlbiB0eXBlLlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNjcmVhdGVlbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0eXBlLCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIHZhciBwcm9wTmFtZTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG4gIHZhciBwcm9wcyA9IHt9O1xuICB2YXIga2V5ID0gbnVsbDtcbiAgdmFyIHJlZiA9IG51bGw7XG4gIHZhciBzZWxmID0gbnVsbDtcbiAgdmFyIHNvdXJjZSA9IG51bGw7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG5cbiAgICAgIHtcbiAgICAgICAgd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICBzZWxmID0gY29uZmlnLl9fc2VsZiA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NlbGY7XG4gICAgc291cmNlID0gY29uZmlnLl9fc291cmNlID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc291cmNlOyAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvXG4gIC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LlxuXG5cbiAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG5cbiAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHtcbiAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShjaGlsZEFycmF5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gIH0gLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG5cblxuICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wcztcblxuICAgIGZvciAocHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LCBwcm9wcyk7XG59XG5mdW5jdGlvbiBjbG9uZUFuZFJlcGxhY2VLZXkob2xkRWxlbWVudCwgbmV3S2V5KSB7XG4gIHZhciBuZXdFbGVtZW50ID0gUmVhY3RFbGVtZW50KG9sZEVsZW1lbnQudHlwZSwgbmV3S2V5LCBvbGRFbGVtZW50LnJlZiwgb2xkRWxlbWVudC5fc2VsZiwgb2xkRWxlbWVudC5fc291cmNlLCBvbGRFbGVtZW50Ll9vd25lciwgb2xkRWxlbWVudC5wcm9wcyk7XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuLyoqXG4gKiBDbG9uZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCB1c2luZyBlbGVtZW50IGFzIHRoZSBzdGFydGluZyBwb2ludC5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjY2xvbmVlbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gY2xvbmVFbGVtZW50KGVsZW1lbnQsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgaWYgKCEhKGVsZW1lbnQgPT09IG51bGwgfHwgZWxlbWVudCA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0LmNsb25lRWxlbWVudCguLi4pOiBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIFJlYWN0IGVsZW1lbnQsIGJ1dCB5b3UgcGFzc2VkIFwiICsgZWxlbWVudCArIFwiLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHByb3BOYW1lOyAvLyBPcmlnaW5hbCBwcm9wcyBhcmUgY29waWVkXG5cbiAgdmFyIHByb3BzID0gX2Fzc2lnbih7fSwgZWxlbWVudC5wcm9wcyk7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuXG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHJlZiA9IGVsZW1lbnQucmVmOyAvLyBTZWxmIGlzIHByZXNlcnZlZCBzaW5jZSB0aGUgb3duZXIgaXMgcHJlc2VydmVkLlxuXG4gIHZhciBzZWxmID0gZWxlbWVudC5fc2VsZjsgLy8gU291cmNlIGlzIHByZXNlcnZlZCBzaW5jZSBjbG9uZUVsZW1lbnQgaXMgdW5saWtlbHkgdG8gYmUgdGFyZ2V0ZWQgYnkgYVxuICAvLyB0cmFuc3BpbGVyLCBhbmQgdGhlIG9yaWdpbmFsIHNvdXJjZSBpcyBwcm9iYWJseSBhIGJldHRlciBpbmRpY2F0b3Igb2YgdGhlXG4gIC8vIHRydWUgb3duZXIuXG5cbiAgdmFyIHNvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTsgLy8gT3duZXIgd2lsbCBiZSBwcmVzZXJ2ZWQsIHVubGVzcyByZWYgaXMgb3ZlcnJpZGRlblxuXG4gIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuXG4gIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICAvLyBTaWxlbnRseSBzdGVhbCB0aGUgcmVmIGZyb20gdGhlIHBhcmVudC5cbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG4gICAgICBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIG92ZXJyaWRlIGV4aXN0aW5nIHByb3BzXG5cblxuICAgIHZhciBkZWZhdWx0UHJvcHM7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlICYmIGVsZW1lbnQudHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICAgIGRlZmF1bHRQcm9wcyA9IGVsZW1lbnQudHlwZS5kZWZhdWx0UHJvcHM7XG4gICAgfVxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgaWYgKGNvbmZpZ1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSAvLyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvXG4gIC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LlxuXG5cbiAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG5cbiAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHtcbiAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgfVxuXG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0RWxlbWVudChlbGVtZW50LnR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcyk7XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuXG52YXIgU0VQQVJBVE9SID0gJy4nO1xudmFyIFNVQlNFUEFSQVRPUiA9ICc6Jztcbi8qKlxuICogRXNjYXBlIGFuZCB3cmFwIGtleSBzbyBpdCBpcyBzYWZlIHRvIHVzZSBhcyBhIHJlYWN0aWRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHRvIGJlIGVzY2FwZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBlc2NhcGVkIGtleS5cbiAqL1xuXG5mdW5jdGlvbiBlc2NhcGUoa2V5KSB7XG4gIHZhciBlc2NhcGVSZWdleCA9IC9bPTpdL2c7XG4gIHZhciBlc2NhcGVyTG9va3VwID0ge1xuICAgICc9JzogJz0wJyxcbiAgICAnOic6ICc9MidcbiAgfTtcbiAgdmFyIGVzY2FwZWRTdHJpbmcgPSBrZXkucmVwbGFjZShlc2NhcGVSZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVzY2FwZXJMb29rdXBbbWF0Y2hdO1xuICB9KTtcbiAgcmV0dXJuICckJyArIGVzY2FwZWRTdHJpbmc7XG59XG4vKipcbiAqIFRPRE86IFRlc3QgdGhhdCBhIHNpbmdsZSBjaGlsZCBhbmQgYW4gYXJyYXkgd2l0aCBvbmUgaXRlbSBoYXZlIHRoZSBzYW1lIGtleVxuICogcGF0dGVybi5cbiAqL1xuXG5cbnZhciBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7XG52YXIgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXggPSAvXFwvKy9nO1xuXG5mdW5jdGlvbiBlc2NhcGVVc2VyUHJvdmlkZWRLZXkodGV4dCkge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4LCAnJCYvJyk7XG59XG4vKipcbiAqIEdlbmVyYXRlIGEga2V5IHN0cmluZyB0aGF0IGlkZW50aWZpZXMgYSBlbGVtZW50IHdpdGhpbiBhIHNldC5cbiAqXG4gKiBAcGFyYW0geyp9IGVsZW1lbnQgQSBlbGVtZW50IHRoYXQgY291bGQgY29udGFpbiBhIG1hbnVhbCBrZXkuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggdGhhdCBpcyB1c2VkIGlmIGEgbWFudWFsIGtleSBpcyBub3QgcHJvdmlkZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRFbGVtZW50S2V5KGVsZW1lbnQsIGluZGV4KSB7XG4gIC8vIERvIHNvbWUgdHlwZWNoZWNraW5nIGhlcmUgc2luY2Ugd2UgY2FsbCB0aGlzIGJsaW5kbHkuIFdlIHdhbnQgdG8gZW5zdXJlXG4gIC8vIHRoYXQgd2UgZG9uJ3QgYmxvY2sgcG90ZW50aWFsIGZ1dHVyZSBFUyBBUElzLlxuICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdvYmplY3QnICYmIGVsZW1lbnQgIT09IG51bGwgJiYgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgIC8vIEV4cGxpY2l0IGtleVxuICAgIHJldHVybiBlc2NhcGUoJycgKyBlbGVtZW50LmtleSk7XG4gIH0gLy8gSW1wbGljaXQga2V5IGRldGVybWluZWQgYnkgdGhlIGluZGV4IGluIHRoZSBzZXRcblxuXG4gIHJldHVybiBpbmRleC50b1N0cmluZygzNik7XG59XG5cbmZ1bmN0aW9uIG1hcEludG9BcnJheShjaGlsZHJlbiwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5hbWVTb0ZhciwgY2FsbGJhY2spIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47XG5cbiAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgIC8vIEFsbCBvZiB0aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLlxuICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgfVxuXG4gIHZhciBpbnZva2VDYWxsYmFjayA9IGZhbHNlO1xuXG4gIGlmIChjaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBzd2l0Y2ggKGNoaWxkcmVuLiQkdHlwZW9mKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgaWYgKGludm9rZUNhbGxiYWNrKSB7XG4gICAgdmFyIF9jaGlsZCA9IGNoaWxkcmVuO1xuICAgIHZhciBtYXBwZWRDaGlsZCA9IGNhbGxiYWNrKF9jaGlsZCk7IC8vIElmIGl0J3MgdGhlIG9ubHkgY2hpbGQsIHRyZWF0IHRoZSBuYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIGFuIGFycmF5XG4gICAgLy8gc28gdGhhdCBpdCdzIGNvbnNpc3RlbnQgaWYgdGhlIG51bWJlciBvZiBjaGlsZHJlbiBncm93czpcblxuICAgIHZhciBjaGlsZEtleSA9IG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgKyBnZXRFbGVtZW50S2V5KF9jaGlsZCwgMCkgOiBuYW1lU29GYXI7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShtYXBwZWRDaGlsZCkpIHtcbiAgICAgIHZhciBlc2NhcGVkQ2hpbGRLZXkgPSAnJztcblxuICAgICAgaWYgKGNoaWxkS2V5ICE9IG51bGwpIHtcbiAgICAgICAgZXNjYXBlZENoaWxkS2V5ID0gZXNjYXBlVXNlclByb3ZpZGVkS2V5KGNoaWxkS2V5KSArICcvJztcbiAgICAgIH1cblxuICAgICAgbWFwSW50b0FycmF5KG1hcHBlZENoaWxkLCBhcnJheSwgZXNjYXBlZENoaWxkS2V5LCAnJywgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKG1hcHBlZENoaWxkICE9IG51bGwpIHtcbiAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChtYXBwZWRDaGlsZCkpIHtcbiAgICAgICAgbWFwcGVkQ2hpbGQgPSBjbG9uZUFuZFJlcGxhY2VLZXkobWFwcGVkQ2hpbGQsIC8vIEtlZXAgYm90aCB0aGUgKG1hcHBlZCkgYW5kIG9sZCBrZXlzIGlmIHRoZXkgZGlmZmVyLCBqdXN0IGFzXG4gICAgICAgIC8vIHRyYXZlcnNlQWxsQ2hpbGRyZW4gdXNlZCB0byBkbyBmb3Igb2JqZWN0cyBhcyBjaGlsZHJlblxuICAgICAgICBlc2NhcGVkUHJlZml4ICsgKCAvLyAkRmxvd0ZpeE1lIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIFJlYWN0LlBvcnRhbCBkb2Vzbid0IGhhdmUgYSBrZXlcbiAgICAgICAgbWFwcGVkQ2hpbGQua2V5ICYmICghX2NoaWxkIHx8IF9jaGlsZC5rZXkgIT09IG1hcHBlZENoaWxkLmtleSkgPyAvLyAkRmxvd0ZpeE1lIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIGV4aXN0aW5nIGVsZW1lbnQncyBrZXkgY2FuIGJlIGEgbnVtYmVyXG4gICAgICAgIGVzY2FwZVVzZXJQcm92aWRlZEtleSgnJyArIG1hcHBlZENoaWxkLmtleSkgKyAnLycgOiAnJykgKyBjaGlsZEtleSk7XG4gICAgICB9XG5cbiAgICAgIGFycmF5LnB1c2gobWFwcGVkQ2hpbGQpO1xuICAgIH1cblxuICAgIHJldHVybiAxO1xuICB9XG5cbiAgdmFyIGNoaWxkO1xuICB2YXIgbmV4dE5hbWU7XG4gIHZhciBzdWJ0cmVlQ291bnQgPSAwOyAvLyBDb3VudCBvZiBjaGlsZHJlbiBmb3VuZCBpbiB0aGUgY3VycmVudCBzdWJ0cmVlLlxuXG4gIHZhciBuZXh0TmFtZVByZWZpeCA9IG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgOiBuYW1lU29GYXIgKyBTVUJTRVBBUkFUT1I7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRFbGVtZW50S2V5KGNoaWxkLCBpKTtcbiAgICAgIHN1YnRyZWVDb3VudCArPSBtYXBJbnRvQXJyYXkoY2hpbGQsIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuZXh0TmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pO1xuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgaXRlcmFibGVDaGlsZHJlbiA9IGNoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIC8vIFdhcm4gYWJvdXQgdXNpbmcgTWFwcyBhcyBjaGlsZHJlblxuICAgICAgICBpZiAoaXRlcmF0b3JGbiA9PT0gaXRlcmFibGVDaGlsZHJlbi5lbnRyaWVzKSB7XG4gICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNYXBzKSB7XG4gICAgICAgICAgICB3YXJuKCdVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnVXNlIGFuIGFycmF5IG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaWRXYXJuQWJvdXRNYXBzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwoaXRlcmFibGVDaGlsZHJlbik7XG4gICAgICB2YXIgc3RlcDtcbiAgICAgIHZhciBpaSA9IDA7XG5cbiAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgY2hpbGQgPSBzdGVwLnZhbHVlO1xuICAgICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0RWxlbWVudEtleShjaGlsZCwgaWkrKyk7XG4gICAgICAgIHN1YnRyZWVDb3VudCArPSBtYXBJbnRvQXJyYXkoY2hpbGQsIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuZXh0TmFtZSwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhciBjaGlsZHJlblN0cmluZyA9ICcnICsgY2hpbGRyZW47XG5cbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgKyAoY2hpbGRyZW5TdHJpbmcgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhjaGlsZHJlbikuam9pbignLCAnKSArICd9JyA6IGNoaWxkcmVuU3RyaW5nKSArIFwiKS4gSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBpbnN0ZWFkLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3VidHJlZUNvdW50O1xufVxuXG4vKipcbiAqIE1hcHMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbm1hcFxuICpcbiAqIFRoZSBwcm92aWRlZCBtYXBGdW5jdGlvbihjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmdW5jIFRoZSBtYXAgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgQ29udGV4dCBmb3IgbWFwRnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBvcmRlcmVkIG1hcCBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuYywgY29udGV4dCkge1xuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGNvdW50ID0gMDtcbiAgbWFwSW50b0FycmF5KGNoaWxkcmVuLCByZXN1bHQsICcnLCAnJywgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBjaGlsZCwgY291bnQrKyk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXNcbiAqIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuY291bnRcbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbi5cbiAqL1xuXG5cbmZ1bmN0aW9uIGNvdW50Q2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgdmFyIG4gPSAwO1xuICBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKCkge1xuICAgIG4rKzsgLy8gRG9uJ3QgcmV0dXJuIGFueXRoaW5nXG4gIH0pO1xuICByZXR1cm4gbjtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyB0aHJvdWdoIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5mb3JlYWNoXG4gKlxuICogVGhlIHByb3ZpZGVkIGZvckVhY2hGdW5jKGNoaWxkLCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZvckVhY2hGdW5jXG4gKiBAcGFyYW0geyp9IGZvckVhY2hDb250ZXh0IENvbnRleHQgZm9yIGZvckVhY2hDb250ZXh0LlxuICovXG5mdW5jdGlvbiBmb3JFYWNoQ2hpbGRyZW4oY2hpbGRyZW4sIGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCkge1xuICBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKCkge1xuICAgIGZvckVhY2hGdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIERvbid0IHJldHVybiBhbnl0aGluZy5cbiAgfSwgZm9yRWFjaENvbnRleHQpO1xufVxuLyoqXG4gKiBGbGF0dGVuIGEgY2hpbGRyZW4gb2JqZWN0ICh0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmApIGFuZFxuICogcmV0dXJuIGFuIGFycmF5IHdpdGggYXBwcm9wcmlhdGVseSByZS1rZXllZCBjaGlsZHJlbi5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW50b2FycmF5XG4gKi9cblxuXG5mdW5jdGlvbiB0b0FycmF5KGNoaWxkcmVuKSB7XG4gIHJldHVybiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9KSB8fCBbXTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgaW4gYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuIGFuZCB2ZXJpZmllcyB0aGF0IHRoZXJlXG4gKiBpcyBvbmx5IG9uZSBjaGlsZCBpbiB0aGUgY29sbGVjdGlvbi5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5vbmx5XG4gKlxuICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgYSBzaW5nbGUgY2hpbGQgZ2V0c1xuICogcGFzc2VkIHdpdGhvdXQgYSB3cmFwcGVyLCBidXQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgdG9cbiAqIGFic3RyYWN0IGF3YXkgdGhlIHBhcnRpY3VsYXIgc3RydWN0dXJlIG9mIGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7P29iamVjdH0gY2hpbGRyZW4gQ2hpbGQgY29sbGVjdGlvbiBzdHJ1Y3R1cmUuXG4gKiBAcmV0dXJuIHtSZWFjdEVsZW1lbnR9IFRoZSBmaXJzdCBhbmQgb25seSBgUmVhY3RFbGVtZW50YCBjb250YWluZWQgaW4gdGhlXG4gKiBzdHJ1Y3R1cmUuXG4gKi9cblxuXG5mdW5jdGlvbiBvbmx5Q2hpbGQoY2hpbGRyZW4pIHtcbiAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29udGV4dChkZWZhdWx0VmFsdWUsIGNhbGN1bGF0ZUNoYW5nZWRCaXRzKSB7XG4gIGlmIChjYWxjdWxhdGVDaGFuZ2VkQml0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIGlmIChjYWxjdWxhdGVDaGFuZ2VkQml0cyAhPT0gbnVsbCAmJiB0eXBlb2YgY2FsY3VsYXRlQ2hhbmdlZEJpdHMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ2NyZWF0ZUNvbnRleHQ6IEV4cGVjdGVkIHRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcycsIGNhbGN1bGF0ZUNoYW5nZWRCaXRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgY29udGV4dCA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfQ09OVEVYVF9UWVBFLFxuICAgIF9jYWxjdWxhdGVDaGFuZ2VkQml0czogY2FsY3VsYXRlQ2hhbmdlZEJpdHMsXG4gICAgLy8gQXMgYSB3b3JrYXJvdW5kIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29uY3VycmVudCByZW5kZXJlcnMsIHdlIGNhdGVnb3JpemVcbiAgICAvLyBzb21lIHJlbmRlcmVycyBhcyBwcmltYXJ5IGFuZCBvdGhlcnMgYXMgc2Vjb25kYXJ5LiBXZSBvbmx5IGV4cGVjdFxuICAgIC8vIHRoZXJlIHRvIGJlIHR3byBjb25jdXJyZW50IHJlbmRlcmVycyBhdCBtb3N0OiBSZWFjdCBOYXRpdmUgKHByaW1hcnkpIGFuZFxuICAgIC8vIEZhYnJpYyAoc2Vjb25kYXJ5KTsgUmVhY3QgRE9NIChwcmltYXJ5KSBhbmQgUmVhY3QgQVJUIChzZWNvbmRhcnkpLlxuICAgIC8vIFNlY29uZGFyeSByZW5kZXJlcnMgc3RvcmUgdGhlaXIgY29udGV4dCB2YWx1ZXMgb24gc2VwYXJhdGUgZmllbGRzLlxuICAgIF9jdXJyZW50VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICBfY3VycmVudFZhbHVlMjogZGVmYXVsdFZhbHVlLFxuICAgIC8vIFVzZWQgdG8gdHJhY2sgaG93IG1hbnkgY29uY3VycmVudCByZW5kZXJlcnMgdGhpcyBjb250ZXh0IGN1cnJlbnRseVxuICAgIC8vIHN1cHBvcnRzIHdpdGhpbiBpbiBhIHNpbmdsZSByZW5kZXJlci4gU3VjaCBhcyBwYXJhbGxlbCBzZXJ2ZXIgcmVuZGVyaW5nLlxuICAgIF90aHJlYWRDb3VudDogMCxcbiAgICAvLyBUaGVzZSBhcmUgY2lyY3VsYXJcbiAgICBQcm92aWRlcjogbnVsbCxcbiAgICBDb25zdW1lcjogbnVsbFxuICB9O1xuICBjb250ZXh0LlByb3ZpZGVyID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9QUk9WSURFUl9UWVBFLFxuICAgIF9jb250ZXh0OiBjb250ZXh0XG4gIH07XG4gIHZhciBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IGZhbHNlO1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIgPSBmYWxzZTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyID0gZmFsc2U7XG5cbiAge1xuICAgIC8vIEEgc2VwYXJhdGUgb2JqZWN0LCBidXQgcHJveGllcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjb250ZXh0IG9iamVjdCBmb3JcbiAgICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gSXQgaGFzIGEgZGlmZmVyZW50ICQkdHlwZW9mLCBzbyB3ZSBjYW4gcHJvcGVybHlcbiAgICAvLyB3YXJuIGZvciB0aGUgaW5jb3JyZWN0IHVzYWdlIG9mIENvbnRleHQgYXMgYSBDb25zdW1lci5cbiAgICB2YXIgQ29uc3VtZXIgPSB7XG4gICAgICAkJHR5cGVvZjogUkVBQ1RfQ09OVEVYVF9UWVBFLFxuICAgICAgX2NvbnRleHQ6IGNvbnRleHQsXG4gICAgICBfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IGNvbnRleHQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzXG4gICAgfTsgLy8gJEZsb3dGaXhNZTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbm90IHNldHRpbmcgYSB2YWx1ZSwgd2hpY2ggaXMgaW50ZW50aW9uYWwgaGVyZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29uc3VtZXIsIHtcbiAgICAgIFByb3ZpZGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoJ1JlbmRlcmluZyA8Q29udGV4dC5Db25zdW1lci5Qcm92aWRlcj4gaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Qcm92aWRlcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGV4dC5Qcm92aWRlcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX1Byb3ZpZGVyKSB7XG4gICAgICAgICAgY29udGV4dC5Qcm92aWRlciA9IF9Qcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9jdXJyZW50VmFsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX2N1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IF9jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlMjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fY3VycmVudFZhbHVlMjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX2N1cnJlbnRWYWx1ZTIpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUyID0gX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfdGhyZWFkQ291bnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3RocmVhZENvdW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfdGhyZWFkQ291bnQpIHtcbiAgICAgICAgICBjb250ZXh0Ll90aHJlYWRDb3VudCA9IF90aHJlYWRDb3VudDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIENvbnN1bWVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMpIHtcbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoJ1JlbmRlcmluZyA8Q29udGV4dC5Db25zdW1lci5Db25zdW1lcj4gaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Db25zdW1lcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGV4dC5Db25zdW1lcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRpc3BsYXlOYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0LmRpc3BsYXlOYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkaXNwbGF5TmFtZSkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIpIHtcbiAgICAgICAgICAgIHdhcm4oJ1NldHRpbmcgYGRpc3BsYXlOYW1lYCBvbiBDb250ZXh0LkNvbnN1bWVyIGhhcyBubyBlZmZlY3QuICcgKyBcIllvdSBzaG91bGQgc2V0IGl0IGRpcmVjdGx5IG9uIHRoZSBjb250ZXh0IHdpdGggQ29udGV4dC5kaXNwbGF5TmFtZSA9ICclcycuXCIsIGRpc3BsYXlOYW1lKTtcblxuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pOyAvLyAkRmxvd0ZpeE1lOiBGbG93IGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIHByb3BlcnRpZXMgYmVjYXVzZSBpdCBkb2Vzbid0IHVuZGVyc3RhbmQgZGVmaW5lUHJvcGVydHlcblxuICAgIGNvbnRleHQuQ29uc3VtZXIgPSBDb25zdW1lcjtcbiAgfVxuXG4gIHtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSBudWxsO1xuICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlcjIgPSBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbnZhciBVbmluaXRpYWxpemVkID0gLTE7XG52YXIgUGVuZGluZyA9IDA7XG52YXIgUmVzb2x2ZWQgPSAxO1xudmFyIFJlamVjdGVkID0gMjtcblxuZnVuY3Rpb24gbGF6eUluaXRpYWxpemVyKHBheWxvYWQpIHtcbiAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gVW5pbml0aWFsaXplZCkge1xuICAgIHZhciBjdG9yID0gcGF5bG9hZC5fcmVzdWx0O1xuICAgIHZhciB0aGVuYWJsZSA9IGN0b3IoKTsgLy8gVHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZS5cblxuICAgIHZhciBwZW5kaW5nID0gcGF5bG9hZDtcbiAgICBwZW5kaW5nLl9zdGF0dXMgPSBQZW5kaW5nO1xuICAgIHBlbmRpbmcuX3Jlc3VsdCA9IHRoZW5hYmxlO1xuICAgIHRoZW5hYmxlLnRoZW4oZnVuY3Rpb24gKG1vZHVsZU9iamVjdCkge1xuICAgICAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUGVuZGluZykge1xuICAgICAgICB2YXIgZGVmYXVsdEV4cG9ydCA9IG1vZHVsZU9iamVjdC5kZWZhdWx0O1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoZGVmYXVsdEV4cG9ydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlcnJvcignbGF6eTogRXhwZWN0ZWQgdGhlIHJlc3VsdCBvZiBhIGR5bmFtaWMgaW1wb3J0KCkgY2FsbC4gJyArICdJbnN0ZWFkIHJlY2VpdmVkOiAlc1xcblxcbllvdXIgY29kZSBzaG91bGQgbG9vayBsaWtlOiBcXG4gICcgKyAvLyBCcmVhayB1cCBpbXBvcnRzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICAgICAgJ2NvbnN0IE15Q29tcG9uZW50ID0gbGF6eSgoKSA9PiBpbXAnICsgXCJvcnQoJy4vTXlDb21wb25lbnQnKSlcIiwgbW9kdWxlT2JqZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZS5cblxuXG4gICAgICAgIHZhciByZXNvbHZlZCA9IHBheWxvYWQ7XG4gICAgICAgIHJlc29sdmVkLl9zdGF0dXMgPSBSZXNvbHZlZDtcbiAgICAgICAgcmVzb2x2ZWQuX3Jlc3VsdCA9IGRlZmF1bHRFeHBvcnQ7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBQZW5kaW5nKSB7XG4gICAgICAgIC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG4gICAgICAgIHZhciByZWplY3RlZCA9IHBheWxvYWQ7XG4gICAgICAgIHJlamVjdGVkLl9zdGF0dXMgPSBSZWplY3RlZDtcbiAgICAgICAgcmVqZWN0ZWQuX3Jlc3VsdCA9IGVycm9yO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUmVzb2x2ZWQpIHtcbiAgICByZXR1cm4gcGF5bG9hZC5fcmVzdWx0O1xuICB9IGVsc2Uge1xuICAgIHRocm93IHBheWxvYWQuX3Jlc3VsdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBsYXp5KGN0b3IpIHtcbiAgdmFyIHBheWxvYWQgPSB7XG4gICAgLy8gV2UgdXNlIHRoZXNlIGZpZWxkcyB0byBzdG9yZSB0aGUgcmVzdWx0LlxuICAgIF9zdGF0dXM6IC0xLFxuICAgIF9yZXN1bHQ6IGN0b3JcbiAgfTtcbiAgdmFyIGxhenlUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9MQVpZX1RZUEUsXG4gICAgX3BheWxvYWQ6IHBheWxvYWQsXG4gICAgX2luaXQ6IGxhenlJbml0aWFsaXplclxuICB9O1xuXG4gIHtcbiAgICAvLyBJbiBwcm9kdWN0aW9uLCB0aGlzIHdvdWxkIGp1c3Qgc2V0IGl0IG9uIHRoZSBvYmplY3QuXG4gICAgdmFyIGRlZmF1bHRQcm9wcztcbiAgICB2YXIgcHJvcFR5cGVzOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsYXp5VHlwZSwge1xuICAgICAgZGVmYXVsdFByb3BzOiB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHRQcm9wcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3RGVmYXVsdFByb3BzKSB7XG4gICAgICAgICAgZXJyb3IoJ1JlYWN0LmxhenkoLi4uKTogSXQgaXMgbm90IHN1cHBvcnRlZCB0byBhc3NpZ24gYGRlZmF1bHRQcm9wc2AgdG8gJyArICdhIGxhenkgY29tcG9uZW50IGltcG9ydC4gRWl0aGVyIHNwZWNpZnkgdGhlbSB3aGVyZSB0aGUgY29tcG9uZW50ICcgKyAnaXMgZGVmaW5lZCwgb3IgY3JlYXRlIGEgd3JhcHBpbmcgY29tcG9uZW50IGFyb3VuZCBpdC4nKTtcblxuICAgICAgICAgIGRlZmF1bHRQcm9wcyA9IG5ld0RlZmF1bHRQcm9wczsgLy8gTWF0Y2ggcHJvZHVjdGlvbiBiZWhhdmlvciBtb3JlIGNsb3NlbHk6XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxhenlUeXBlLCAnZGVmYXVsdFByb3BzJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJvcFR5cGVzOiB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BUeXBlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJvcFR5cGVzKSB7XG4gICAgICAgICAgZXJyb3IoJ1JlYWN0LmxhenkoLi4uKTogSXQgaXMgbm90IHN1cHBvcnRlZCB0byBhc3NpZ24gYHByb3BUeXBlc2AgdG8gJyArICdhIGxhenkgY29tcG9uZW50IGltcG9ydC4gRWl0aGVyIHNwZWNpZnkgdGhlbSB3aGVyZSB0aGUgY29tcG9uZW50ICcgKyAnaXMgZGVmaW5lZCwgb3IgY3JlYXRlIGEgd3JhcHBpbmcgY29tcG9uZW50IGFyb3VuZCBpdC4nKTtcblxuICAgICAgICAgIHByb3BUeXBlcyA9IG5ld1Byb3BUeXBlczsgLy8gTWF0Y2ggcHJvZHVjdGlvbiBiZWhhdmlvciBtb3JlIGNsb3NlbHk6XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxhenlUeXBlLCAncHJvcFR5cGVzJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbGF6eVR5cGU7XG59XG5cbmZ1bmN0aW9uIGZvcndhcmRSZWYocmVuZGVyKSB7XG4gIHtcbiAgICBpZiAocmVuZGVyICE9IG51bGwgJiYgcmVuZGVyLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCByZWNlaXZlZCBhIGBtZW1vYCAnICsgJ2NvbXBvbmVudC4gSW5zdGVhZCBvZiBmb3J3YXJkUmVmKG1lbW8oLi4uKSksIHVzZSAnICsgJ21lbW8oZm9yd2FyZFJlZiguLi4pKS4nKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByZW5kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCB3YXMgZ2l2ZW4gJXMuJywgcmVuZGVyID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJlbmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyZW5kZXIubGVuZ3RoICE9PSAwICYmIHJlbmRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVuZGVyIGZ1bmN0aW9ucyBhY2NlcHQgZXhhY3RseSB0d28gcGFyYW1ldGVyczogcHJvcHMgYW5kIHJlZi4gJXMnLCByZW5kZXIubGVuZ3RoID09PSAxID8gJ0RpZCB5b3UgZm9yZ2V0IHRvIHVzZSB0aGUgcmVmIHBhcmFtZXRlcj8nIDogJ0FueSBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aWxsIGJlIHVuZGVmaW5lZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVuZGVyICE9IG51bGwpIHtcbiAgICAgIGlmIChyZW5kZXIuZGVmYXVsdFByb3BzICE9IG51bGwgfHwgcmVuZGVyLnByb3BUeXBlcyAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgZG8gbm90IHN1cHBvcnQgcHJvcFR5cGVzIG9yIGRlZmF1bHRQcm9wcy4gJyArICdEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIGEgUmVhY3QgY29tcG9uZW50PycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBlbGVtZW50VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSxcbiAgICByZW5kZXI6IHJlbmRlclxuICB9O1xuXG4gIHtcbiAgICB2YXIgb3duTmFtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudFR5cGUsICdkaXNwbGF5TmFtZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvd25OYW1lO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgb3duTmFtZSA9IG5hbWU7XG5cbiAgICAgICAgaWYgKHJlbmRlci5kaXNwbGF5TmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmVuZGVyLmRpc3BsYXlOYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRUeXBlO1xufVxuXG4vLyBGaWx0ZXIgY2VydGFpbiBET00gYXR0cmlidXRlcyAoZS5nLiBzcmMsIGhyZWYpIGlmIHRoZWlyIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5ncy5cblxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBDcmVhdGUgRXZlbnQgSGFuZGxlIEFQSS5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gZXhwb3J0cy5GcmFnbWVudCB8fCB0eXBlID09PSBleHBvcnRzLlByb2ZpbGVyIHx8IHR5cGUgPT09IFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFIHx8IHR5cGUgPT09IGV4cG9ydHMuU3RyaWN0TW9kZSB8fCB0eXBlID09PSBleHBvcnRzLlN1c3BlbnNlIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgfHwgZW5hYmxlU2NvcGVBUEkgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSB8fCB0eXBlWzBdID09PSBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBtZW1vKHR5cGUsIGNvbXBhcmUpIHtcbiAge1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpKSB7XG4gICAgICBlcnJvcignbWVtbzogVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBjb21wb25lbnQuIEluc3RlYWQgJyArICdyZWNlaXZlZDogJXMnLCB0eXBlID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBlbGVtZW50VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfTUVNT19UWVBFLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgY29tcGFyZTogY29tcGFyZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbXBhcmVcbiAgfTtcblxuICB7XG4gICAgdmFyIG93bk5hbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnRUeXBlLCAnZGlzcGxheU5hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG93bk5hbWUgPSBuYW1lO1xuXG4gICAgICAgIGlmICh0eXBlLmRpc3BsYXlOYW1lID09IG51bGwpIHtcbiAgICAgICAgICB0eXBlLmRpc3BsYXlOYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRUeXBlO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRGlzcGF0Y2hlcigpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7XG5cbiAgaWYgKCEoZGlzcGF0Y2hlciAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaGVyO1xufVxuXG5mdW5jdGlvbiB1c2VDb250ZXh0KENvbnRleHQsIHVuc3RhYmxlX29ic2VydmVkQml0cykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG5cbiAge1xuICAgIGlmICh1bnN0YWJsZV9vYnNlcnZlZEJpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IoJ3VzZUNvbnRleHQoKSBzZWNvbmQgYXJndW1lbnQgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSAnICsgJ3VzZSBpbiBSZWFjdC4gUGFzc2luZyBpdCBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1lvdSBwYXNzZWQ6ICVzLiVzJywgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzLCB0eXBlb2YgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzID09PSAnbnVtYmVyJyAmJiBBcnJheS5pc0FycmF5KGFyZ3VtZW50c1syXSkgPyAnXFxuXFxuRGlkIHlvdSBjYWxsIGFycmF5Lm1hcCh1c2VDb250ZXh0KT8gJyArICdDYWxsaW5nIEhvb2tzIGluc2lkZSBhIGxvb3AgaXMgbm90IHN1cHBvcnRlZC4gJyArICdMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ydWxlcy1vZi1ob29rcycgOiAnJyk7XG4gICAgfSAvLyBUT0RPOiBhZGQgYSBtb3JlIGdlbmVyaWMgd2FybmluZyBmb3IgaW52YWxpZCB2YWx1ZXMuXG5cblxuICAgIGlmIChDb250ZXh0Ll9jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciByZWFsQ29udGV4dCA9IENvbnRleHQuX2NvbnRleHQ7IC8vIERvbid0IGRlZHVwbGljYXRlIGJlY2F1c2UgdGhpcyBsZWdpdGltYXRlbHkgY2F1c2VzIGJ1Z3NcbiAgICAgIC8vIGFuZCBub2JvZHkgc2hvdWxkIGJlIHVzaW5nIHRoaXMgaW4gZXhpc3RpbmcgY29kZS5cblxuICAgICAgaWYgKHJlYWxDb250ZXh0LkNvbnN1bWVyID09PSBDb250ZXh0KSB7XG4gICAgICAgIGVycm9yKCdDYWxsaW5nIHVzZUNvbnRleHQoQ29udGV4dC5Db25zdW1lcikgaXMgbm90IHN1cHBvcnRlZCwgbWF5IGNhdXNlIGJ1Z3MsIGFuZCB3aWxsIGJlICcgKyAncmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gY2FsbCB1c2VDb250ZXh0KENvbnRleHQpIGluc3RlYWQ/Jyk7XG4gICAgICB9IGVsc2UgaWYgKHJlYWxDb250ZXh0LlByb3ZpZGVyID09PSBDb250ZXh0KSB7XG4gICAgICAgIGVycm9yKCdDYWxsaW5nIHVzZUNvbnRleHQoQ29udGV4dC5Qcm92aWRlcikgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCB1c2VDb250ZXh0KENvbnRleHQpIGluc3RlYWQ/Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlQ29udGV4dChDb250ZXh0LCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMpO1xufVxuZnVuY3Rpb24gdXNlU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbn1cbmZ1bmN0aW9uIHVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG59XG5mdW5jdGlvbiB1c2VSZWYoaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlUmVmKGluaXRpYWxWYWx1ZSk7XG59XG5mdW5jdGlvbiB1c2VFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZU1lbW8oY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlTWVtbyhjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAge1xuICAgIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgICByZXR1cm4gZGlzcGF0Y2hlci51c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbik7XG4gIH1cbn1cblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgZGlzYWJsZWREZXB0aCsrO1xuICB9XG59XG5mdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBkaXNhYmxlZERlcHRoLS07XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2SW5mb1xuICAgICAgICB9KSxcbiAgICAgICAgd2FybjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEV4dHJhY3QgdGhlIFZNIHNwZWNpZmljIHByZWZpeCB1c2VkIGJ5IGVhY2ggbGluZS5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgIHByZWZpeCA9IG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xuICAgICAgfVxuICAgIH0gLy8gV2UgdXNlIHRoZSBwcmVmaXggdG8gZW5zdXJlIG91ciBzdGFja3MgbGluZSB1cCB3aXRoIG5hdGl2ZSBzdGFjayBmcmFtZXMuXG5cblxuICAgIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XG4gIH1cbn1cbnZhciByZWVudHJ5ID0gZmFsc2U7XG52YXIgY29tcG9uZW50RnJhbWVDYWNoZTtcblxue1xuICB2YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuICBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGFza2VkIGZvciBhIHN0YWNrIGluc2lkZSBhIGZha2UgcmVuZGVyLCBpdCBzaG91bGQgZ2V0IGlnbm9yZWQuXG4gIGlmICghZm4gfHwgcmVlbnRyeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHtcbiAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG5cbiAgICBpZiAoZnJhbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250cm9sO1xuICByZWVudHJ5ID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZSBJdCBkb2VzIGFjY2VwdCB1bmRlZmluZWQuXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XG4gIHZhciBwcmV2aW91c0Rpc3BhdGNoZXI7XG5cbiAge1xuICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IG51bGw7XG4gICAgZGlzYWJsZUxvZ3MoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH07IC8vICRGbG93Rml4TWVcblxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsICdwcm9wcycsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCB3b24ndCB0aHJvdyBpbiBhIG5vbi1zdHJpY3QgbW9kZSBmdW5jdGlvbi5cbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAvLyBXZSBjb25zdHJ1Y3QgYSBkaWZmZXJlbnQgY29udHJvbCBmb3IgdGhpcyBjYXNlIHRvIGluY2x1ZGUgYW55IGV4dHJhXG4gICAgICAgIC8vIGZyYW1lcyBhZGRlZCBieSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgfVxuXG4gICAgICBmbigpO1xuICAgIH1cbiAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgdHlwZW9mIHNhbXBsZS5zdGFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZS5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgY29udHJvbExpbmVzID0gY29udHJvbC5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgcyA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgYyA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCAmJiBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAvLyBUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIHRoZSByb290IG1vc3Qgb25lLiBIb3dldmVyLCBzdGFjayBmcmFtZXMgbWF5IGJlXG4gICAgICAgIC8vIGN1dCBvZmYgZHVlIHRvIG1heGltdW0gc3RhY2sgbGltaXRzLiBJbiB0aGlzIGNhc2UsIG9uZSBtYXliZSBjdXQgb2ZmXG4gICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgIC8vIGFuZCB0aGVyZSBmb3IgY3V0IG9mZiBlYXJsaWVyLiBTbyB3ZSBzaG91bGQgZmluZCB0aGUgcm9vdCBtb3N0IGZyYW1lIGluXG4gICAgICAgIC8vIHRoZSBzYW1wbGUgc29tZXdoZXJlIGluIHRoZSBjb250cm9sLlxuICAgICAgICBjLS07XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBzID49IDEgJiYgYyA+PSAwOyBzLS0sIGMtLSkge1xuICAgICAgICAvLyBOZXh0IHdlIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHdoaWNoIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gZnJhbWUgdGhhdCBjYWxsZWQgb3VyIHNhbXBsZSBmdW5jdGlvbiBhbmQgdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgLy8gSW4gVjgsIHRoZSBmaXJzdCBsaW5lIGlzIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgYnV0IG90aGVyIFZNcyBkb24ndC5cbiAgICAgICAgICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4gdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgY29udHJvbCBpcyBhbHNvIG9uIHRoZSBzYW1lXG4gICAgICAgICAgLy8gbGluZSwgdGhhdCdzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgb3VyIHNhbXBsZSB0aHJldyBhdCBzYW1lIGxpbmUgYXNcbiAgICAgICAgICAvLyB0aGUgY29udHJvbC4gSS5lLiBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgc2FtcGxlIGZyYW1lLiBTbyB3ZSBpZ25vcmUgdGhpcyByZXN1bHQuXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBwYXNzZWQgYSBjbGFzcyB0byBmdW5jdGlvbiBjb21wb25lbnQsIG9yIG5vbi1mdW5jdGlvbi5cbiAgICAgICAgICBpZiAocyAhPT0gMSB8fCBjICE9PSAxKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHMtLTtcbiAgICAgICAgICAgICAgYy0tOyAvLyBXZSBtYXkgc3RpbGwgaGF2ZSBzaW1pbGFyIGludGVybWVkaWF0ZSBmcmFtZXMgZnJvbSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgICAgICAgIC8vIFRoZSBuZXh0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHNob3VsZCBiZSBvdXIgbWF0Y2ggdGhvdWdoLlxuXG4gICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgICAgICAgLy8gVjggYWRkcyBhIFwibmV3XCIgcHJlZml4IGZvciBuYXRpdmUgY2xhc3Nlcy4gTGV0J3MgcmVtb3ZlIGl0IHRvIG1ha2UgaXQgcHJldHRpZXIuXG4gICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9ICdcXG4nICsgc2FtcGxlTGluZXNbc10ucmVwbGFjZSgnIGF0IG5ldyAnLCAnIGF0ICcpO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XG4gICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICB9XG5cbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxuXG5cbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzeW50aGV0aWNGcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBzb3VyY2UsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBleHBvcnRzLlN1c3BlbnNlOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBzb3VyY2UsIG93bmVyRm4pO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCkge1xuICB7XG4gICAgLy8gJEZsb3dGaXhNZSBUaGlzIGlzIG9rYXkgYnV0IEZsb3cgZG9lc24ndCBrbm93IGl0LlxuICAgIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IkMSA9IHZvaWQgMDsgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgKyAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJyk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvciQxID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciQxID0gZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSAmJiAhKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IkMS5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvciQxLm1lc3NhZ2VdID0gdHJ1ZTtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCdGYWlsZWQgJXMgdHlwZTogJXMnLCBsb2NhdGlvbiwgZXJyb3IkMS5tZXNzYWdlKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIHNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duO1xuXG57XG4gIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAgaWYgKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpIHtcbiAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGZpbGVOYW1lID0gc291cmNlLmZpbGVOYW1lLnJlcGxhY2UoL14uKltcXFxcXFwvXS8sICcnKTtcbiAgICB2YXIgbGluZU51bWJlciA9IHNvdXJjZS5saW5lTnVtYmVyO1xuICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgeW91ciBjb2RlIGF0ICcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnLic7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtRm9yUHJvcHMoZWxlbWVudFByb3BzKSB7XG4gIGlmIChlbGVtZW50UHJvcHMgIT09IG51bGwgJiYgZWxlbWVudFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oZWxlbWVudFByb3BzLl9fc291cmNlKTtcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cbi8qKlxuICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxuICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gKiB1cGRhdGVzLlxuICovXG5cblxudmFyIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcbiAgdmFyIGluZm8gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcblxuICBpZiAoIWluZm8pIHtcbiAgICB2YXIgcGFyZW50TmFtZSA9IHR5cGVvZiBwYXJlbnRUeXBlID09PSAnc3RyaW5nJyA/IHBhcmVudFR5cGUgOiBwYXJlbnRUeXBlLmRpc3BsYXlOYW1lIHx8IHBhcmVudFR5cGUubmFtZTtcblxuICAgIGlmIChwYXJlbnROYW1lKSB7XG4gICAgICBpbmZvID0gXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudE5hbWUgKyBcIj4uXCI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluZm87XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIGlmICghZWxlbWVudC5fc3RvcmUgfHwgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkIHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XG5cbiAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7IC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gIC8vIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncyByZXNwb25zaWJsZSBmb3JcbiAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuXG4gIHZhciBjaGlsZE93bmVyID0gJyc7XG5cbiAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fb3duZXIgIT09IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICAvLyBHaXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cbiAgICBjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBnZXRDb21wb25lbnROYW1lKGVsZW1lbnQuX293bmVyLnR5cGUpICsgXCIuXCI7XG4gIH1cblxuICB7XG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJyArICclcyVzIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8sIGNoaWxkT3duZXIpO1xuXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTtcblxuICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KGNoaWxkLCBwYXJlbnRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQobm9kZSkpIHtcbiAgICAvLyBUaGlzIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0aW9uLlxuICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgbm9kZS5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobm9kZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gRW50cnkgaXRlcmF0b3JzIHVzZWQgdG8gcHJvdmlkZSBpbXBsaWNpdCBrZXlzLFxuICAgICAgLy8gYnV0IG5vdyB3ZSBwcmludCBhIHNlcGFyYXRlIHdhcm5pbmcgZm9yIHRoZW0gbGF0ZXIuXG4gICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTtcbiAgICAgICAgdmFyIHN0ZXA7XG5cbiAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShzdGVwLnZhbHVlLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYW4gZWxlbWVudCwgdmFsaWRhdGUgdGhhdCBpdHMgcHJvcHMgZm9sbG93IHRoZSBwcm9wVHlwZXMgZGVmaW5pdGlvbixcbiAqIHByb3ZpZGVkIGJ5IHRoZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KSB7XG4gIHtcbiAgICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcblxuICAgIGlmICh0eXBlID09PSBudWxsIHx8IHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFR5cGVzO1xuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBOb3RlOiBNZW1vIG9ubHkgY2hlY2tzIG91dGVyIHByb3BzIGhlcmUuXG4gICAgLy8gSW5uZXIgcHJvcHMgYXJlIGNoZWNrZWQgaW4gdGhlIHJlY29uY2lsZXIuXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSkge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpO1xuICAgICAgY2hlY2tQcm9wVHlwZXMocHJvcFR5cGVzLCBlbGVtZW50LnByb3BzLCAncHJvcCcsIG5hbWUsIGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAodHlwZS5Qcm9wVHlwZXMgIT09IHVuZGVmaW5lZCAmJiAhcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24pIHtcbiAgICAgIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gdHJ1ZTsgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcblxuICAgICAgdmFyIF9uYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKTtcblxuICAgICAgZXJyb3IoJ0NvbXBvbmVudCAlcyBkZWNsYXJlZCBgUHJvcFR5cGVzYCBpbnN0ZWFkIG9mIGBwcm9wVHlwZXNgLiBEaWQgeW91IG1pc3NwZWxsIHRoZSBwcm9wZXJ0eSBhc3NpZ25tZW50PycsIF9uYW1lIHx8ICdVbmtub3duJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0eXBlLmdldERlZmF1bHRQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiAhdHlwZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgaXMgb25seSB1c2VkIG9uIGNsYXNzaWMgUmVhY3QuY3JlYXRlQ2xhc3MgJyArICdkZWZpbml0aW9ucy4gVXNlIGEgc3RhdGljIHByb3BlcnR5IG5hbWVkIGBkZWZhdWx0UHJvcHNgIGluc3RlYWQuJyk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGEgZnJhZ21lbnQsIHZhbGlkYXRlIHRoYXQgaXQgY2FuIG9ubHkgYmUgcHJvdmlkZWQgd2l0aCBmcmFnbWVudCBwcm9wc1xuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGZyYWdtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZnJhZ21lbnQpIHtcbiAge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBrZXkgIT09ICdrZXknKSB7XG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICAgIGVycm9yKCdJbnZhbGlkIHByb3AgYCVzYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLiAnICsgJ1JlYWN0LkZyYWdtZW50IGNhbiBvbmx5IGhhdmUgYGtleWAgYW5kIGBjaGlsZHJlbmAgcHJvcHMuJywga2V5KTtcblxuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhZ21lbnQucmVmICE9PSBudWxsKSB7XG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XG5cbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGNoaWxkcmVuKSB7XG4gIHZhciB2YWxpZFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSk7IC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXG5cbiAgaWYgKCF2YWxpZFR5cGUpIHtcbiAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIG5hbWVkIGltcG9ydHMuXCI7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZUluZm8gPSBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKHByb3BzKTtcblxuICAgIGlmIChzb3VyY2VJbmZvKSB7XG4gICAgICBpbmZvICs9IHNvdXJjZUluZm87XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZm8gKz0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG4gICAgfVxuXG4gICAgdmFyIHR5cGVTdHJpbmc7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgdHlwZVN0cmluZyA9ICdudWxsJztcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodHlwZSkpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnYXJyYXknO1xuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgICAgdHlwZVN0cmluZyA9IFwiPFwiICsgKGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKSB8fCAnVW5rbm93bicpICsgXCIgLz5cIjtcbiAgICAgIGluZm8gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IGV4cG9ydCBhIEpTWCBsaXRlcmFsIGluc3RlYWQgb2YgYSBjb21wb25lbnQ/JztcbiAgICB9IGVsc2Uge1xuICAgICAgdHlwZVN0cmluZyA9IHR5cGVvZiB0eXBlO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGVycm9yKCdSZWFjdC5jcmVhdGVFbGVtZW50OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciAnICsgJ2J1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgJyArICdjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGVTdHJpbmcsIGluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBlbGVtZW50ID0gY3JlYXRlRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyAvLyBUaGUgcmVzdWx0IGNhbiBiZSBudWxsaXNoIGlmIGEgbW9jayBvciBhIGN1c3RvbSBmdW5jdGlvbiBpcyB1c2VkLlxuICAvLyBUT0RPOiBEcm9wIHRoaXMgd2hlbiB0aGVzZSBhcmUgbm8gbG9uZ2VyIGFsbG93ZWQgYXMgdGhlIHR5cGUgYXJndW1lbnQuXG5cbiAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9IC8vIFNraXAga2V5IHdhcm5pbmcgaWYgdGhlIHR5cGUgaXNuJ3QgdmFsaWQgc2luY2Ugb3VyIGtleSB2YWxpZGF0aW9uIGxvZ2ljXG4gIC8vIGRvZXNuJ3QgZXhwZWN0IGEgbm9uLXN0cmluZy9mdW5jdGlvbiB0eXBlIGFuZCBjYW4gdGhyb3cgY29uZnVzaW5nIGVycm9ycy5cbiAgLy8gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2IGFuZCBwcm9kLlxuICAvLyAoUmVuZGVyaW5nIHdpbGwgdGhyb3cgd2l0aCBhIGhlbHBmdWwgbWVzc2FnZSBhbmQgYXMgc29vbiBhcyB0aGUgdHlwZSBpc1xuICAvLyBmaXhlZCwgdGhlIGtleSB3YXJuaW5ncyB3aWxsIGFwcGVhci4pXG5cblxuICBpZiAodmFsaWRUeXBlKSB7XG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGUgPT09IGV4cG9ydHMuRnJhZ21lbnQpIHtcbiAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cbnZhciBkaWRXYXJuQWJvdXREZXByZWNhdGVkQ3JlYXRlRmFjdG9yeSA9IGZhbHNlO1xuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uKHR5cGUpIHtcbiAgdmFyIHZhbGlkYXRlZEZhY3RvcnkgPSBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24uYmluZChudWxsLCB0eXBlKTtcbiAgdmFsaWRhdGVkRmFjdG9yeS50eXBlID0gdHlwZTtcblxuICB7XG4gICAgaWYgKCFkaWRXYXJuQWJvdXREZXByZWNhdGVkQ3JlYXRlRmFjdG9yeSkge1xuICAgICAgZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkgPSB0cnVlO1xuXG4gICAgICB3YXJuKCdSZWFjdC5jcmVhdGVGYWN0b3J5KCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gQ29uc2lkZXIgdXNpbmcgSlNYICcgKyAnb3IgdXNlIFJlYWN0LmNyZWF0ZUVsZW1lbnQoKSBkaXJlY3RseSBpbnN0ZWFkLicpO1xuICAgIH0gLy8gTGVnYWN5IGhvb2s6IHJlbW92ZSBpdFxuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsaWRhdGVkRmFjdG9yeSwgJ3R5cGUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB3YXJuKCdGYWN0b3J5LnR5cGUgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHRoZSBjbGFzcyBkaXJlY3RseSAnICsgJ2JlZm9yZSBwYXNzaW5nIGl0IHRvIGNyZWF0ZUZhY3RvcnkuJyk7XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd0eXBlJywge1xuICAgICAgICAgIHZhbHVlOiB0eXBlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZWRGYWN0b3J5O1xufVxuZnVuY3Rpb24gY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24oZWxlbWVudCwgcHJvcHMsIGNoaWxkcmVuKSB7XG4gIHZhciBuZXdFbGVtZW50ID0gY2xvbmVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIG5ld0VsZW1lbnQudHlwZSk7XG4gIH1cblxuICB2YWxpZGF0ZVByb3BUeXBlcyhuZXdFbGVtZW50KTtcbiAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG5cbntcblxuICB0cnkge1xuICAgIHZhciBmcm96ZW5PYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgKi9cblxuICAgIG5ldyBNYXAoW1tmcm96ZW5PYmplY3QsIG51bGxdXSk7XG4gICAgbmV3IFNldChbZnJvemVuT2JqZWN0XSk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1uZXcgKi9cbiAgfSBjYXRjaCAoZSkge1xuICB9XG59XG5cbnZhciBjcmVhdGVFbGVtZW50JDEgPSAgY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uIDtcbnZhciBjbG9uZUVsZW1lbnQkMSA9ICBjbG9uZUVsZW1lbnRXaXRoVmFsaWRhdGlvbiA7XG52YXIgY3JlYXRlRmFjdG9yeSA9ICBjcmVhdGVGYWN0b3J5V2l0aFZhbGlkYXRpb24gO1xudmFyIENoaWxkcmVuID0ge1xuICBtYXA6IG1hcENoaWxkcmVuLFxuICBmb3JFYWNoOiBmb3JFYWNoQ2hpbGRyZW4sXG4gIGNvdW50OiBjb3VudENoaWxkcmVuLFxuICB0b0FycmF5OiB0b0FycmF5LFxuICBvbmx5OiBvbmx5Q2hpbGRcbn07XG5cbmV4cG9ydHMuQ2hpbGRyZW4gPSBDaGlsZHJlbjtcbmV4cG9ydHMuQ29tcG9uZW50ID0gQ29tcG9uZW50O1xuZXhwb3J0cy5QdXJlQ29tcG9uZW50ID0gUHVyZUNvbXBvbmVudDtcbmV4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQgPSBSZWFjdFNoYXJlZEludGVybmFscztcbmV4cG9ydHMuY2xvbmVFbGVtZW50ID0gY2xvbmVFbGVtZW50JDE7XG5leHBvcnRzLmNyZWF0ZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0O1xuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gY3JlYXRlRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVGYWN0b3J5ID0gY3JlYXRlRmFjdG9yeTtcbmV4cG9ydHMuY3JlYXRlUmVmID0gY3JlYXRlUmVmO1xuZXhwb3J0cy5mb3J3YXJkUmVmID0gZm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnQgPSBpc1ZhbGlkRWxlbWVudDtcbmV4cG9ydHMubGF6eSA9IGxhenk7XG5leHBvcnRzLm1lbW8gPSBtZW1vO1xuZXhwb3J0cy51c2VDYWxsYmFjayA9IHVzZUNhbGxiYWNrO1xuZXhwb3J0cy51c2VDb250ZXh0ID0gdXNlQ29udGV4dDtcbmV4cG9ydHMudXNlRGVidWdWYWx1ZSA9IHVzZURlYnVnVmFsdWU7XG5leHBvcnRzLnVzZUVmZmVjdCA9IHVzZUVmZmVjdDtcbmV4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZSA9IHVzZUltcGVyYXRpdmVIYW5kbGU7XG5leHBvcnRzLnVzZUxheW91dEVmZmVjdCA9IHVzZUxheW91dEVmZmVjdDtcbmV4cG9ydHMudXNlTWVtbyA9IHVzZU1lbW87XG5leHBvcnRzLnVzZVJlZHVjZXIgPSB1c2VSZWR1Y2VyO1xuZXhwb3J0cy51c2VSZWYgPSB1c2VSZWY7XG5leHBvcnRzLnVzZVN0YXRlID0gdXNlU3RhdGU7XG5leHBvcnRzLnZlcnNpb24gPSBSZWFjdFZlcnNpb247XG4gIH0pKCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYwLjIwLjJcbiAqIHNjaGVkdWxlci5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBlbmFibGVTY2hlZHVsZXJEZWJ1Z2dpbmcgPSBmYWxzZTtcbnZhciBlbmFibGVQcm9maWxpbmcgPSBmYWxzZTtcblxudmFyIHJlcXVlc3RIb3N0Q2FsbGJhY2s7XG52YXIgcmVxdWVzdEhvc3RUaW1lb3V0O1xudmFyIGNhbmNlbEhvc3RUaW1lb3V0O1xudmFyIHJlcXVlc3RQYWludDtcbnZhciBoYXNQZXJmb3JtYW5jZU5vdyA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJztcblxuaWYgKGhhc1BlcmZvcm1hbmNlTm93KSB7XG4gIHZhciBsb2NhbFBlcmZvcm1hbmNlID0gcGVyZm9ybWFuY2U7XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGxvY2FsUGVyZm9ybWFuY2Uubm93KCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgbG9jYWxEYXRlID0gRGF0ZTtcbiAgdmFyIGluaXRpYWxUaW1lID0gbG9jYWxEYXRlLm5vdygpO1xuXG4gIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsb2NhbERhdGUubm93KCkgLSBpbml0aWFsVGltZTtcbiAgfTtcbn1cblxuaWYgKCAvLyBJZiBTY2hlZHVsZXIgcnVucyBpbiBhIG5vbi1ET00gZW52aXJvbm1lbnQsIGl0IGZhbGxzIGJhY2sgdG8gYSBuYWl2ZVxuLy8gaW1wbGVtZW50YXRpb24gdXNpbmcgc2V0VGltZW91dC5cbnR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IC8vIENoZWNrIGlmIE1lc3NhZ2VDaGFubmVsIGlzIHN1cHBvcnRlZCwgdG9vLlxudHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAnZnVuY3Rpb24nKSB7XG4gIC8vIElmIHRoaXMgYWNjaWRlbnRhbGx5IGdldHMgaW1wb3J0ZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudCwgZS5nLiBKYXZhU2NyaXB0Q29yZSxcbiAgLy8gZmFsbGJhY2sgdG8gYSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi5cbiAgdmFyIF9jYWxsYmFjayA9IG51bGw7XG4gIHZhciBfdGltZW91dElEID0gbnVsbDtcblxuICB2YXIgX2ZsdXNoQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKF9jYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgICAgICAgdmFyIGhhc1JlbWFpbmluZ1RpbWUgPSB0cnVlO1xuXG4gICAgICAgIF9jYWxsYmFjayhoYXNSZW1haW5pbmdUaW1lLCBjdXJyZW50VGltZSk7XG5cbiAgICAgICAgX2NhbGxiYWNrID0gbnVsbDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2V0VGltZW91dChfZmx1c2hDYWxsYmFjaywgMCk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJlcXVlc3RIb3N0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICBpZiAoX2NhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAvLyBQcm90ZWN0IGFnYWluc3QgcmUtZW50cmFuY3kuXG4gICAgICBzZXRUaW1lb3V0KHJlcXVlc3RIb3N0Q2FsbGJhY2ssIDAsIGNiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX2NhbGxiYWNrID0gY2I7XG4gICAgICBzZXRUaW1lb3V0KF9mbHVzaENhbGxiYWNrLCAwKTtcbiAgICB9XG4gIH07XG5cbiAgcmVxdWVzdEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKGNiLCBtcykge1xuICAgIF90aW1lb3V0SUQgPSBzZXRUaW1lb3V0KGNiLCBtcyk7XG4gIH07XG5cbiAgY2FuY2VsSG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgY2xlYXJUaW1lb3V0KF90aW1lb3V0SUQpO1xuICB9O1xuXG4gIGV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIHJlcXVlc3RQYWludCA9IGV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSBmdW5jdGlvbiAoKSB7fTtcbn0gZWxzZSB7XG4gIC8vIENhcHR1cmUgbG9jYWwgcmVmZXJlbmNlcyB0byBuYXRpdmUgQVBJcywgaW4gY2FzZSBhIHBvbHlmaWxsIG92ZXJyaWRlcyB0aGVtLlxuICB2YXIgX3NldFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dDtcbiAgdmFyIF9jbGVhclRpbWVvdXQgPSB3aW5kb3cuY2xlYXJUaW1lb3V0O1xuXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBUT0RPOiBTY2hlZHVsZXIgbm8gbG9uZ2VyIHJlcXVpcmVzIHRoZXNlIG1ldGhvZHMgdG8gYmUgcG9seWZpbGxlZC4gQnV0XG4gICAgLy8gbWF5YmUgd2Ugd2FudCB0byBjb250aW51ZSB3YXJuaW5nIGlmIHRoZXkgZG9uJ3QgZXhpc3QsIHRvIHByZXNlcnZlIHRoZVxuICAgIC8vIG9wdGlvbiB0byByZWx5IG9uIGl0IGluIHRoZSBmdXR1cmU/XG4gICAgdmFyIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG4gICAgdmFyIGNhbmNlbEFuaW1hdGlvbkZyYW1lID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuXG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ2Vycm9yJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuICAgICAgY29uc29sZVsnZXJyb3InXShcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBcIiArICdNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBVc2luZyBjb25zb2xlWydlcnJvciddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGNhbmNlbEFuaW1hdGlvbkZyYW1lLiBcIiArICdNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgICB9XG4gIH1cblxuICB2YXIgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgdmFyIHNjaGVkdWxlZEhvc3RDYWxsYmFjayA9IG51bGw7XG4gIHZhciB0YXNrVGltZW91dElEID0gLTE7IC8vIFNjaGVkdWxlciBwZXJpb2RpY2FsbHkgeWllbGRzIGluIGNhc2UgdGhlcmUgaXMgb3RoZXIgd29yayBvbiB0aGUgbWFpblxuICAvLyB0aHJlYWQsIGxpa2UgdXNlciBldmVudHMuIEJ5IGRlZmF1bHQsIGl0IHlpZWxkcyBtdWx0aXBsZSB0aW1lcyBwZXIgZnJhbWUuXG4gIC8vIEl0IGRvZXMgbm90IGF0dGVtcHQgdG8gYWxpZ24gd2l0aCBmcmFtZSBib3VuZGFyaWVzLCBzaW5jZSBtb3N0IHRhc2tzIGRvbid0XG4gIC8vIG5lZWQgdG8gYmUgZnJhbWUgYWxpZ25lZDsgZm9yIHRob3NlIHRoYXQgZG8sIHVzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuXG5cbiAgdmFyIHlpZWxkSW50ZXJ2YWwgPSA1O1xuICB2YXIgZGVhZGxpbmUgPSAwOyAvLyBUT0RPOiBNYWtlIHRoaXMgY29uZmlndXJhYmxlXG5cbiAge1xuICAgIC8vIGBpc0lucHV0UGVuZGluZ2AgaXMgbm90IGF2YWlsYWJsZS4gU2luY2Ugd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyBpZlxuICAgIC8vIHRoZXJlJ3MgcGVuZGluZyBpbnB1dCwgYWx3YXlzIHlpZWxkIGF0IHRoZSBlbmQgb2YgdGhlIGZyYW1lLlxuICAgIGV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy51bnN0YWJsZV9ub3coKSA+PSBkZWFkbGluZTtcbiAgICB9OyAvLyBTaW5jZSB3ZSB5aWVsZCBldmVyeSBmcmFtZSByZWdhcmRsZXNzLCBgcmVxdWVzdFBhaW50YCBoYXMgbm8gZWZmZWN0LlxuXG5cbiAgICByZXF1ZXN0UGFpbnQgPSBmdW5jdGlvbiAoKSB7fTtcbiAgfVxuXG4gIGV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSBmdW5jdGlvbiAoZnBzKSB7XG4gICAgaWYgKGZwcyA8IDAgfHwgZnBzID4gMTI1KSB7XG4gICAgICAvLyBVc2luZyBjb25zb2xlWydlcnJvciddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oJ2ZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCAnICsgJ2ZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZwcyA+IDApIHtcbiAgICAgIHlpZWxkSW50ZXJ2YWwgPSBNYXRoLmZsb29yKDEwMDAgLyBmcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXNldCB0aGUgZnJhbWVyYXRlXG4gICAgICB5aWVsZEludGVydmFsID0gNTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2NoZWR1bGVkSG9zdENhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpOyAvLyBZaWVsZCBhZnRlciBgeWllbGRJbnRlcnZhbGAgbXMsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgd2UgYXJlIGluIHRoZSB2c3luY1xuICAgICAgLy8gY3ljbGUuIFRoaXMgbWVhbnMgdGhlcmUncyBhbHdheXMgdGltZSByZW1haW5pbmcgYXQgdGhlIGJlZ2lubmluZyBvZlxuICAgICAgLy8gdGhlIG1lc3NhZ2UgZXZlbnQuXG5cbiAgICAgIGRlYWRsaW5lID0gY3VycmVudFRpbWUgKyB5aWVsZEludGVydmFsO1xuICAgICAgdmFyIGhhc1RpbWVSZW1haW5pbmcgPSB0cnVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgaGFzTW9yZVdvcmsgPSBzY2hlZHVsZWRIb3N0Q2FsbGJhY2soaGFzVGltZVJlbWFpbmluZywgY3VycmVudFRpbWUpO1xuXG4gICAgICAgIGlmICghaGFzTW9yZVdvcmspIHtcbiAgICAgICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgIHNjaGVkdWxlZEhvc3RDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhlcmUncyBtb3JlIHdvcmssIHNjaGVkdWxlIHRoZSBuZXh0IG1lc3NhZ2UgZXZlbnQgYXQgdGhlIGVuZFxuICAgICAgICAgIC8vIG9mIHRoZSBwcmVjZWRpbmcgb25lLlxuICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIGEgc2NoZWR1bGVyIHRhc2sgdGhyb3dzLCBleGl0IHRoZSBjdXJyZW50IGJyb3dzZXIgdGFzayBzbyB0aGVcbiAgICAgICAgLy8gZXJyb3IgY2FuIGJlIG9ic2VydmVkLlxuICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9IC8vIFlpZWxkaW5nIHRvIHRoZSBicm93c2VyIHdpbGwgZ2l2ZSBpdCBhIGNoYW5jZSB0byBwYWludCwgc28gd2UgY2FuXG4gIH07XG5cbiAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgdmFyIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZTtcblxuICByZXF1ZXN0SG9zdENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICBpZiAoIWlzTWVzc2FnZUxvb3BSdW5uaW5nKSB7XG4gICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9IHRydWU7XG4gICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgIH1cbiAgfTtcblxuICByZXF1ZXN0SG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIG1zKSB7XG4gICAgdGFza1RpbWVvdXRJRCA9IF9zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrKGV4cG9ydHMudW5zdGFibGVfbm93KCkpO1xuICAgIH0sIG1zKTtcbiAgfTtcblxuICBjYW5jZWxIb3N0VGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICBfY2xlYXJUaW1lb3V0KHRhc2tUaW1lb3V0SUQpO1xuXG4gICAgdGFza1RpbWVvdXRJRCA9IC0xO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwdXNoKGhlYXAsIG5vZGUpIHtcbiAgdmFyIGluZGV4ID0gaGVhcC5sZW5ndGg7XG4gIGhlYXAucHVzaChub2RlKTtcbiAgc2lmdFVwKGhlYXAsIG5vZGUsIGluZGV4KTtcbn1cbmZ1bmN0aW9uIHBlZWsoaGVhcCkge1xuICB2YXIgZmlyc3QgPSBoZWFwWzBdO1xuICByZXR1cm4gZmlyc3QgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBmaXJzdDtcbn1cbmZ1bmN0aW9uIHBvcChoZWFwKSB7XG4gIHZhciBmaXJzdCA9IGhlYXBbMF07XG5cbiAgaWYgKGZpcnN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgbGFzdCA9IGhlYXAucG9wKCk7XG5cbiAgICBpZiAobGFzdCAhPT0gZmlyc3QpIHtcbiAgICAgIGhlYXBbMF0gPSBsYXN0O1xuICAgICAgc2lmdERvd24oaGVhcCwgbGFzdCwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcnN0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpZnRVcChoZWFwLCBub2RlLCBpKSB7XG4gIHZhciBpbmRleCA9IGk7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgcGFyZW50SW5kZXggPSBpbmRleCAtIDEgPj4+IDE7XG4gICAgdmFyIHBhcmVudCA9IGhlYXBbcGFyZW50SW5kZXhdO1xuXG4gICAgaWYgKHBhcmVudCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUocGFyZW50LCBub2RlKSA+IDApIHtcbiAgICAgIC8vIFRoZSBwYXJlbnQgaXMgbGFyZ2VyLiBTd2FwIHBvc2l0aW9ucy5cbiAgICAgIGhlYXBbcGFyZW50SW5kZXhdID0gbm9kZTtcbiAgICAgIGhlYXBbaW5kZXhdID0gcGFyZW50O1xuICAgICAgaW5kZXggPSBwYXJlbnRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHBhcmVudCBpcyBzbWFsbGVyLiBFeGl0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzaWZ0RG93bihoZWFwLCBub2RlLCBpKSB7XG4gIHZhciBpbmRleCA9IGk7XG4gIHZhciBsZW5ndGggPSBoZWFwLmxlbmd0aDtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgbGVmdEluZGV4ID0gKGluZGV4ICsgMSkgKiAyIC0gMTtcbiAgICB2YXIgbGVmdCA9IGhlYXBbbGVmdEluZGV4XTtcbiAgICB2YXIgcmlnaHRJbmRleCA9IGxlZnRJbmRleCArIDE7XG4gICAgdmFyIHJpZ2h0ID0gaGVhcFtyaWdodEluZGV4XTsgLy8gSWYgdGhlIGxlZnQgb3IgcmlnaHQgbm9kZSBpcyBzbWFsbGVyLCBzd2FwIHdpdGggdGhlIHNtYWxsZXIgb2YgdGhvc2UuXG5cbiAgICBpZiAobGVmdCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUobGVmdCwgbm9kZSkgPCAwKSB7XG4gICAgICBpZiAocmlnaHQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHJpZ2h0LCBsZWZ0KSA8IDApIHtcbiAgICAgICAgaGVhcFtpbmRleF0gPSByaWdodDtcbiAgICAgICAgaGVhcFtyaWdodEluZGV4XSA9IG5vZGU7XG4gICAgICAgIGluZGV4ID0gcmlnaHRJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYXBbaW5kZXhdID0gbGVmdDtcbiAgICAgICAgaGVhcFtsZWZ0SW5kZXhdID0gbm9kZTtcbiAgICAgICAgaW5kZXggPSBsZWZ0SW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUocmlnaHQsIG5vZGUpIDwgMCkge1xuICAgICAgaGVhcFtpbmRleF0gPSByaWdodDtcbiAgICAgIGhlYXBbcmlnaHRJbmRleF0gPSBub2RlO1xuICAgICAgaW5kZXggPSByaWdodEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOZWl0aGVyIGNoaWxkIGlzIHNtYWxsZXIuIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICAvLyBDb21wYXJlIHNvcnQgaW5kZXggZmlyc3QsIHRoZW4gdGFzayBpZC5cbiAgdmFyIGRpZmYgPSBhLnNvcnRJbmRleCAtIGIuc29ydEluZGV4O1xuICByZXR1cm4gZGlmZiAhPT0gMCA/IGRpZmYgOiBhLmlkIC0gYi5pZDtcbn1cblxuLy8gVE9ETzogVXNlIHN5bWJvbHM/XG52YXIgSW1tZWRpYXRlUHJpb3JpdHkgPSAxO1xudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5ID0gMjtcbnZhciBOb3JtYWxQcmlvcml0eSA9IDM7XG52YXIgTG93UHJpb3JpdHkgPSA0O1xudmFyIElkbGVQcmlvcml0eSA9IDU7XG5cbmZ1bmN0aW9uIG1hcmtUYXNrRXJyb3JlZCh0YXNrLCBtcykge1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cbi8vIE1hdGgucG93KDIsIDMwKSAtIDFcbi8vIDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExXG5cbnZhciBtYXhTaWduZWQzMUJpdEludCA9IDEwNzM3NDE4MjM7IC8vIFRpbWVzIG91dCBpbW1lZGlhdGVseVxuXG52YXIgSU1NRURJQVRFX1BSSU9SSVRZX1RJTUVPVVQgPSAtMTsgLy8gRXZlbnR1YWxseSB0aW1lcyBvdXRcblxudmFyIFVTRVJfQkxPQ0tJTkdfUFJJT1JJVFlfVElNRU9VVCA9IDI1MDtcbnZhciBOT1JNQUxfUFJJT1JJVFlfVElNRU9VVCA9IDUwMDA7XG52YXIgTE9XX1BSSU9SSVRZX1RJTUVPVVQgPSAxMDAwMDsgLy8gTmV2ZXIgdGltZXMgb3V0XG5cbnZhciBJRExFX1BSSU9SSVRZX1RJTUVPVVQgPSBtYXhTaWduZWQzMUJpdEludDsgLy8gVGFza3MgYXJlIHN0b3JlZCBvbiBhIG1pbiBoZWFwXG5cbnZhciB0YXNrUXVldWUgPSBbXTtcbnZhciB0aW1lclF1ZXVlID0gW107IC8vIEluY3JlbWVudGluZyBpZCBjb3VudGVyLiBVc2VkIHRvIG1haW50YWluIGluc2VydGlvbiBvcmRlci5cblxudmFyIHRhc2tJZENvdW50ZXIgPSAxOyAvLyBQYXVzaW5nIHRoZSBzY2hlZHVsZXIgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuXG52YXIgY3VycmVudFRhc2sgPSBudWxsO1xudmFyIGN1cnJlbnRQcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7IC8vIFRoaXMgaXMgc2V0IHdoaWxlIHBlcmZvcm1pbmcgd29yaywgdG8gcHJldmVudCByZS1lbnRyYW5jeS5cblxudmFyIGlzUGVyZm9ybWluZ1dvcmsgPSBmYWxzZTtcbnZhciBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IGZhbHNlO1xudmFyIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSkge1xuICAvLyBDaGVjayBmb3IgdGFza3MgdGhhdCBhcmUgbm8gbG9uZ2VyIGRlbGF5ZWQgYW5kIGFkZCB0aGVtIHRvIHRoZSBxdWV1ZS5cbiAgdmFyIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcblxuICB3aGlsZSAodGltZXIgIT09IG51bGwpIHtcbiAgICBpZiAodGltZXIuY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgIC8vIFRpbWVyIHdhcyBjYW5jZWxsZWQuXG4gICAgICBwb3AodGltZXJRdWV1ZSk7XG4gICAgfSBlbHNlIGlmICh0aW1lci5zdGFydFRpbWUgPD0gY3VycmVudFRpbWUpIHtcbiAgICAgIC8vIFRpbWVyIGZpcmVkLiBUcmFuc2ZlciB0byB0aGUgdGFzayBxdWV1ZS5cbiAgICAgIHBvcCh0aW1lclF1ZXVlKTtcbiAgICAgIHRpbWVyLnNvcnRJbmRleCA9IHRpbWVyLmV4cGlyYXRpb25UaW1lO1xuICAgICAgcHVzaCh0YXNrUXVldWUsIHRpbWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVtYWluaW5nIHRpbWVycyBhcmUgcGVuZGluZy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVGltZW91dChjdXJyZW50VGltZSkge1xuICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG4gIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuXG4gIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQpIHtcbiAgICBpZiAocGVlayh0YXNrUXVldWUpICE9PSBudWxsKSB7XG4gICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmaXJzdFRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcblxuICAgICAgaWYgKGZpcnN0VGltZXIgIT09IG51bGwpIHtcbiAgICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaFdvcmsoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpIHtcblxuXG4gIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgaWYgKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQpIHtcbiAgICAvLyBXZSBzY2hlZHVsZWQgYSB0aW1lb3V0IGJ1dCBpdCdzIG5vIGxvbmdlciBuZWVkZWQuIENhbmNlbCBpdC5cbiAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG4gICAgY2FuY2VsSG9zdFRpbWVvdXQoKTtcbiAgfVxuXG4gIGlzUGVyZm9ybWluZ1dvcmsgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICBpZiAoZW5hYmxlUHJvZmlsaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRUYXNrICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgICAgICAgICBtYXJrVGFza0Vycm9yZWQoY3VycmVudFRhc2ssIGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICBjdXJyZW50VGFzay5pc1F1ZXVlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGNhdGNoIGluIHByb2QgY29kZSBwYXRoLlxuICAgICAgcmV0dXJuIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFRhc2sgPSBudWxsO1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgIGlzUGVyZm9ybWluZ1dvcmsgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSkge1xuICB2YXIgY3VycmVudFRpbWUgPSBpbml0aWFsVGltZTtcbiAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuXG4gIHdoaWxlIChjdXJyZW50VGFzayAhPT0gbnVsbCAmJiAhKGVuYWJsZVNjaGVkdWxlckRlYnVnZ2luZyApKSB7XG4gICAgaWYgKGN1cnJlbnRUYXNrLmV4cGlyYXRpb25UaW1lID4gY3VycmVudFRpbWUgJiYgKCFoYXNUaW1lUmVtYWluaW5nIHx8IGV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQoKSkpIHtcbiAgICAgIC8vIFRoaXMgY3VycmVudFRhc2sgaGFzbid0IGV4cGlyZWQsIGFuZCB3ZSd2ZSByZWFjaGVkIHRoZSBkZWFkbGluZS5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBjYWxsYmFjayA9IGN1cnJlbnRUYXNrLmNhbGxiYWNrO1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY3VycmVudFRhc2suY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBjdXJyZW50VGFzay5wcmlvcml0eUxldmVsO1xuICAgICAgdmFyIGRpZFVzZXJDYWxsYmFja1RpbWVvdXQgPSBjdXJyZW50VGFzay5leHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZTtcblxuICAgICAgdmFyIGNvbnRpbnVhdGlvbkNhbGxiYWNrID0gY2FsbGJhY2soZGlkVXNlckNhbGxiYWNrVGltZW91dCk7XG4gICAgICBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG5cbiAgICAgIGlmICh0eXBlb2YgY29udGludWF0aW9uQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY3VycmVudFRhc2suY2FsbGJhY2sgPSBjb250aW51YXRpb25DYWxsYmFjaztcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRUYXNrID09PSBwZWVrKHRhc2tRdWV1ZSkpIHtcbiAgICAgICAgICBwb3AodGFza1F1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9wKHRhc2tRdWV1ZSk7XG4gICAgfVxuXG4gICAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG4gIH0gLy8gUmV0dXJuIHdoZXRoZXIgdGhlcmUncyBhZGRpdGlvbmFsIHdvcmtcblxuXG4gIGlmIChjdXJyZW50VGFzayAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBmaXJzdFRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcblxuICAgIGlmIChmaXJzdFRpbWVyICE9PSBudWxsKSB7XG4gICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgZmlyc3RUaW1lci5zdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3J1bldpdGhQcmlvcml0eShwcmlvcml0eUxldmVsLCBldmVudEhhbmRsZXIpIHtcbiAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTtcbiAgfVxuXG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpO1xuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX25leHQoZXZlbnRIYW5kbGVyKSB7XG4gIHZhciBwcmlvcml0eUxldmVsO1xuXG4gIHN3aXRjaCAoY3VycmVudFByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICAgIC8vIFNoaWZ0IGRvd24gdG8gbm9ybWFsIHByaW9yaXR5XG4gICAgICBwcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBBbnl0aGluZyBsb3dlciB0aGFuIG5vcm1hbCBwcmlvcml0eSBzaG91bGQgcmVtYWluIGF0IHRoZSBjdXJyZW50IGxldmVsLlxuICAgICAgcHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV93cmFwQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgdmFyIHBhcmVudFByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGlzIGlzIGEgZm9yayBvZiBydW5XaXRoUHJpb3JpdHksIGlubGluZWQgZm9yIHBlcmZvcm1hbmNlLlxuICAgIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHBhcmVudFByaW9yaXR5TGV2ZWw7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhwcmlvcml0eUxldmVsLCBjYWxsYmFjaywgb3B0aW9ucykge1xuICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICB2YXIgc3RhcnRUaW1lO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucyAhPT0gbnVsbCkge1xuICAgIHZhciBkZWxheSA9IG9wdGlvbnMuZGVsYXk7XG5cbiAgICBpZiAodHlwZW9mIGRlbGF5ID09PSAnbnVtYmVyJyAmJiBkZWxheSA+IDApIHtcbiAgICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lICsgZGVsYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZTtcbiAgfVxuXG4gIHZhciB0aW1lb3V0O1xuXG4gIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gSU1NRURJQVRFX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gVVNFUl9CTE9DS0lOR19QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBJRExFX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gTE9XX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgZGVmYXVsdDpcbiAgICAgIHRpbWVvdXQgPSBOT1JNQUxfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdmFyIGV4cGlyYXRpb25UaW1lID0gc3RhcnRUaW1lICsgdGltZW91dDtcbiAgdmFyIG5ld1Rhc2sgPSB7XG4gICAgaWQ6IHRhc2tJZENvdW50ZXIrKyxcbiAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgcHJpb3JpdHlMZXZlbDogcHJpb3JpdHlMZXZlbCxcbiAgICBzdGFydFRpbWU6IHN0YXJ0VGltZSxcbiAgICBleHBpcmF0aW9uVGltZTogZXhwaXJhdGlvblRpbWUsXG4gICAgc29ydEluZGV4OiAtMVxuICB9O1xuXG4gIGlmIChzdGFydFRpbWUgPiBjdXJyZW50VGltZSkge1xuICAgIC8vIFRoaXMgaXMgYSBkZWxheWVkIHRhc2suXG4gICAgbmV3VGFzay5zb3J0SW5kZXggPSBzdGFydFRpbWU7XG4gICAgcHVzaCh0aW1lclF1ZXVlLCBuZXdUYXNrKTtcblxuICAgIGlmIChwZWVrKHRhc2tRdWV1ZSkgPT09IG51bGwgJiYgbmV3VGFzayA9PT0gcGVlayh0aW1lclF1ZXVlKSkge1xuICAgICAgLy8gQWxsIHRhc2tzIGFyZSBkZWxheWVkLCBhbmQgdGhpcyBpcyB0aGUgdGFzayB3aXRoIHRoZSBlYXJsaWVzdCBkZWxheS5cbiAgICAgIGlmIChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkKSB7XG4gICAgICAgIC8vIENhbmNlbCBhbiBleGlzdGluZyB0aW1lb3V0LlxuICAgICAgICBjYW5jZWxIb3N0VGltZW91dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IHRydWU7XG4gICAgICB9IC8vIFNjaGVkdWxlIGEgdGltZW91dC5cblxuXG4gICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXdUYXNrLnNvcnRJbmRleCA9IGV4cGlyYXRpb25UaW1lO1xuICAgIHB1c2godGFza1F1ZXVlLCBuZXdUYXNrKTtcbiAgICAvLyB3YWl0IHVudGlsIHRoZSBuZXh0IHRpbWUgd2UgeWllbGQuXG5cblxuICAgIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgJiYgIWlzUGVyZm9ybWluZ1dvcmspIHtcbiAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3VGFzaztcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfcGF1c2VFeGVjdXRpb24oKSB7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uKCkge1xuXG4gIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgJiYgIWlzUGVyZm9ybWluZ1dvcmspIHtcbiAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlKCkge1xuICByZXR1cm4gcGVlayh0YXNrUXVldWUpO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjayh0YXNrKSB7XG4gIC8vIHJlbW92ZSBmcm9tIHRoZSBxdWV1ZSBiZWNhdXNlIHlvdSBjYW4ndCByZW1vdmUgYXJiaXRyYXJ5IG5vZGVzIGZyb20gYW5cbiAgLy8gYXJyYXkgYmFzZWQgaGVhcCwgb25seSB0aGUgZmlyc3Qgb25lLilcblxuXG4gIHRhc2suY2FsbGJhY2sgPSBudWxsO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpIHtcbiAgcmV0dXJuIGN1cnJlbnRQcmlvcml0eUxldmVsO1xufVxuXG52YXIgdW5zdGFibGVfcmVxdWVzdFBhaW50ID0gcmVxdWVzdFBhaW50O1xudmFyIHVuc3RhYmxlX1Byb2ZpbGluZyA9ICBudWxsO1xuXG5leHBvcnRzLnVuc3RhYmxlX0lkbGVQcmlvcml0eSA9IElkbGVQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHkgPSBJbW1lZGlhdGVQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfTG93UHJpb3JpdHkgPSBMb3dQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfTm9ybWFsUHJpb3JpdHkgPSBOb3JtYWxQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfUHJvZmlsaW5nID0gdW5zdGFibGVfUHJvZmlsaW5nO1xuZXhwb3J0cy51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSA9IFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayA9IHVuc3RhYmxlX2NhbmNlbENhbGxiYWNrO1xuZXhwb3J0cy51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbiA9IHVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA9IHVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSA9IHVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlO1xuZXhwb3J0cy51bnN0YWJsZV9uZXh0ID0gdW5zdGFibGVfbmV4dDtcbmV4cG9ydHMudW5zdGFibGVfcGF1c2VFeGVjdXRpb24gPSB1bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbjtcbmV4cG9ydHMudW5zdGFibGVfcmVxdWVzdFBhaW50ID0gdW5zdGFibGVfcmVxdWVzdFBhaW50O1xuZXhwb3J0cy51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkgPSB1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2sgPSB1bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrO1xuZXhwb3J0cy51bnN0YWJsZV93cmFwQ2FsbGJhY2sgPSB1bnN0YWJsZV93cmFwQ2FsbGJhY2s7XG4gIH0pKCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjAuMjAuMlxuICogc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgREVGQVVMVF9USFJFQURfSUQgPSAwOyAvLyBDb3VudGVycyB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRHMuXG5cbnZhciBpbnRlcmFjdGlvbklEQ291bnRlciA9IDA7XG52YXIgdGhyZWFkSURDb3VudGVyID0gMDsgLy8gU2V0IG9mIGN1cnJlbnRseSB0cmFjZWQgaW50ZXJhY3Rpb25zLlxuLy8gSW50ZXJhY3Rpb25zIFwic3RhY2tcIlx1MjAxM1xuLy8gTWVhbmluZyB0aGF0IG5ld2x5IHRyYWNlZCBpbnRlcmFjdGlvbnMgYXJlIGFwcGVuZGVkIHRvIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBzZXQuXG4vLyBXaGVuIGFuIGludGVyYWN0aW9uIGdvZXMgb3V0IG9mIHNjb3BlLCB0aGUgcHJldmlvdXMgc2V0IChpZiBhbnkpIGlzIHJlc3RvcmVkLlxuXG5leHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmID0gbnVsbDsgLy8gTGlzdGVuZXIocykgdG8gbm90aWZ5IHdoZW4gaW50ZXJhY3Rpb25zIGJlZ2luIGFuZCBlbmQuXG5cbmV4cG9ydHMuX19zdWJzY3JpYmVyUmVmID0gbnVsbDtcblxue1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmID0ge1xuICAgIGN1cnJlbnQ6IG5ldyBTZXQoKVxuICB9O1xuICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZiA9IHtcbiAgICBjdXJyZW50OiBudWxsXG4gIH07XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9jbGVhcihjYWxsYmFjaykge1xuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBuZXcgU2V0KCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuICB9XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRDdXJyZW50KCkge1xuICB7XG4gICAgcmV0dXJuIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgfVxufVxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0VGhyZWFkSUQoKSB7XG4gIHJldHVybiArK3RocmVhZElEQ291bnRlcjtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3RyYWNlKG5hbWUsIHRpbWVzdGFtcCwgY2FsbGJhY2spIHtcbiAgdmFyIHRocmVhZElEID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBERUZBVUxUX1RIUkVBRF9JRDtcblxuICB2YXIgaW50ZXJhY3Rpb24gPSB7XG4gICAgX19jb3VudDogMSxcbiAgICBpZDogaW50ZXJhY3Rpb25JRENvdW50ZXIrKyxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHRpbWVzdGFtcDogdGltZXN0YW1wXG4gIH07XG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50OyAvLyBUcmFjZWQgaW50ZXJhY3Rpb25zIHNob3VsZCBzdGFjay9hY2N1bXVsYXRlLlxuICAvLyBUbyBkbyB0aGF0LCBjbG9uZSB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG4gIC8vIFRoZSBwcmV2aW91cyBzZXQgd2lsbCBiZSByZXN0b3JlZCB1cG9uIGNvbXBsZXRpb24uXG5cbiAgdmFyIGludGVyYWN0aW9ucyA9IG5ldyBTZXQocHJldkludGVyYWN0aW9ucyk7XG4gIGludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBpbnRlcmFjdGlvbnM7XG4gIHZhciBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcbiAgdmFyIHJldHVyblZhbHVlO1xuXG4gIHRyeSB7XG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbik7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVyblZhbHVlID0gY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07IC8vIElmIG5vIGFzeW5jIHdvcmsgd2FzIHNjaGVkdWxlZCBmb3IgdGhpcyBpbnRlcmFjdGlvbixcbiAgICAgICAgICAvLyBOb3RpZnkgc3Vic2NyaWJlcnMgdGhhdCBpdCdzIGNvbXBsZXRlZC5cblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3dyYXAoY2FsbGJhY2spIHtcbiAgdmFyIHRocmVhZElEID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBERUZBVUxUX1RIUkVBRF9JRDtcblxuICB2YXIgd3JhcHBlZEludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgdmFyIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgc3Vic2NyaWJlci5vbldvcmtTY2hlZHVsZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICB9IC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBhc3luYyB3b3JrIGNvdW50IGZvciB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG4gIC8vIFVwZGF0ZSBhZnRlciBjYWxsaW5nIHN1YnNjcmliZXJzIGluIGNhc2Ugb2YgZXJyb3IuXG5cblxuICB3cmFwcGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICB9KTtcbiAgdmFyIGhhc1J1biA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZWQoKSB7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gd3JhcHBlZEludGVyYWN0aW9ucztcbiAgICBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIHRyeSB7XG4gICAgICB2YXIgcmV0dXJuVmFsdWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKCFoYXNSdW4pIHtcbiAgICAgICAgLy8gV2Ugb25seSBleHBlY3QgYSB3cmFwcGVkIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIG9uY2UsXG4gICAgICAgIC8vIEJ1dCBpbiB0aGUgZXZlbnQgdGhhdCBpdCdzIGV4ZWN1dGVkIG1vcmUgdGhhbiBvbmNlXHUyMDEzXG4gICAgICAgIC8vIE9ubHkgZGVjcmVtZW50IHRoZSBvdXRzdGFuZGluZyBpbnRlcmFjdGlvbiBjb3VudHMgb25jZS5cbiAgICAgICAgaGFzUnVuID0gdHJ1ZTsgLy8gVXBkYXRlIHBlbmRpbmcgYXN5bmMgY291bnRzIGZvciBhbGwgd3JhcHBlZCBpbnRlcmFjdGlvbnMuXG4gICAgICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IHNjaGVkdWxlZCBhc3luYyB3b3JrIGZvciBhbnkgb2YgdGhlbSxcbiAgICAgICAgLy8gTWFyayB0aGVtIGFzIGNvbXBsZXRlZC5cblxuICAgICAgICB3cmFwcGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tO1xuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3cmFwcGVkLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzdWJzY3JpYmVyLm9uV29ya0NhbmNlbGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gVXBkYXRlIHBlbmRpbmcgYXN5bmMgY291bnRzIGZvciBhbGwgd3JhcHBlZCBpbnRlcmFjdGlvbnMuXG4gICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBzY2hlZHVsZWQgYXN5bmMgd29yayBmb3IgYW55IG9mIHRoZW0sXG4gICAgICAvLyBNYXJrIHRoZW0gYXMgY29tcGxldGVkLlxuICAgICAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07XG5cbiAgICAgICAgaWYgKHN1YnNjcmliZXIgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbnZhciBzdWJzY3JpYmVycyA9IG51bGw7XG5cbntcbiAgc3Vic2NyaWJlcnMgPSBuZXcgU2V0KCk7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3N1YnNjcmliZShzdWJzY3JpYmVyKSB7XG4gIHtcbiAgICBzdWJzY3JpYmVycy5hZGQoc3Vic2NyaWJlcik7XG5cbiAgICBpZiAoc3Vic2NyaWJlcnMuc2l6ZSA9PT0gMSkge1xuICAgICAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudCA9IHtcbiAgICAgICAgb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQ6IG9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkLFxuICAgICAgICBvbkludGVyYWN0aW9uVHJhY2VkOiBvbkludGVyYWN0aW9uVHJhY2VkLFxuICAgICAgICBvbldvcmtDYW5jZWxlZDogb25Xb3JrQ2FuY2VsZWQsXG4gICAgICAgIG9uV29ya1NjaGVkdWxlZDogb25Xb3JrU2NoZWR1bGVkLFxuICAgICAgICBvbldvcmtTdGFydGVkOiBvbldvcmtTdGFydGVkLFxuICAgICAgICBvbldvcmtTdG9wcGVkOiBvbldvcmtTdG9wcGVkXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdW5zdGFibGVfdW5zdWJzY3JpYmUoc3Vic2NyaWJlcikge1xuICB7XG4gICAgc3Vic2NyaWJlcnMuZGVsZXRlKHN1YnNjcmliZXIpO1xuXG4gICAgaWYgKHN1YnNjcmliZXJzLnNpemUgPT09IDApIHtcbiAgICAgIGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvbkludGVyYWN0aW9uVHJhY2VkKGludGVyYWN0aW9uKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uVHJhY2VkKGludGVyYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbikge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1NjaGVkdWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTY2hlZHVsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtDYW5jZWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtDYW5jZWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5leHBvcnRzLnVuc3RhYmxlX2NsZWFyID0gdW5zdGFibGVfY2xlYXI7XG5leHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnQgPSB1bnN0YWJsZV9nZXRDdXJyZW50O1xuZXhwb3J0cy51bnN0YWJsZV9nZXRUaHJlYWRJRCA9IHVuc3RhYmxlX2dldFRocmVhZElEO1xuZXhwb3J0cy51bnN0YWJsZV9zdWJzY3JpYmUgPSB1bnN0YWJsZV9zdWJzY3JpYmU7XG5leHBvcnRzLnVuc3RhYmxlX3RyYWNlID0gdW5zdGFibGVfdHJhY2U7XG5leHBvcnRzLnVuc3RhYmxlX3Vuc3Vic2NyaWJlID0gdW5zdGFibGVfdW5zdWJzY3JpYmU7XG5leHBvcnRzLnVuc3RhYmxlX3dyYXAgPSB1bnN0YWJsZV93cmFwO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXItdHJhY2luZy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXItdHJhY2luZy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1kb20uZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG52YXIgU2NoZWR1bGVyID0gcmVxdWlyZSgnc2NoZWR1bGVyJyk7XG52YXIgdHJhY2luZyA9IHJlcXVpcmUoJ3NjaGVkdWxlci90cmFjaW5nJyk7XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IFJlYWN0Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO1xuXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ3dhcm4nLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH1cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxuaWYgKCFSZWFjdCkge1xuICB7XG4gICAgdGhyb3cgRXJyb3IoIFwiUmVhY3RET00gd2FzIGxvYWRlZCBiZWZvcmUgUmVhY3QuIE1ha2Ugc3VyZSB5b3UgbG9hZCB0aGUgUmVhY3QgcGFja2FnZSBiZWZvcmUgbG9hZGluZyBSZWFjdERPTS5cIiApO1xuICB9XG59XG5cbnZhciBGdW5jdGlvbkNvbXBvbmVudCA9IDA7XG52YXIgQ2xhc3NDb21wb25lbnQgPSAxO1xudmFyIEluZGV0ZXJtaW5hdGVDb21wb25lbnQgPSAyOyAvLyBCZWZvcmUgd2Uga25vdyB3aGV0aGVyIGl0IGlzIGZ1bmN0aW9uIG9yIGNsYXNzXG5cbnZhciBIb3N0Um9vdCA9IDM7IC8vIFJvb3Qgb2YgYSBob3N0IHRyZWUuIENvdWxkIGJlIG5lc3RlZCBpbnNpZGUgYW5vdGhlciBub2RlLlxuXG52YXIgSG9zdFBvcnRhbCA9IDQ7IC8vIEEgc3VidHJlZS4gQ291bGQgYmUgYW4gZW50cnkgcG9pbnQgdG8gYSBkaWZmZXJlbnQgcmVuZGVyZXIuXG5cbnZhciBIb3N0Q29tcG9uZW50ID0gNTtcbnZhciBIb3N0VGV4dCA9IDY7XG52YXIgRnJhZ21lbnQgPSA3O1xudmFyIE1vZGUgPSA4O1xudmFyIENvbnRleHRDb25zdW1lciA9IDk7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gMTA7XG52YXIgRm9yd2FyZFJlZiA9IDExO1xudmFyIFByb2ZpbGVyID0gMTI7XG52YXIgU3VzcGVuc2VDb21wb25lbnQgPSAxMztcbnZhciBNZW1vQ29tcG9uZW50ID0gMTQ7XG52YXIgU2ltcGxlTWVtb0NvbXBvbmVudCA9IDE1O1xudmFyIExhenlDb21wb25lbnQgPSAxNjtcbnZhciBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQgPSAxNztcbnZhciBEZWh5ZHJhdGVkRnJhZ21lbnQgPSAxODtcbnZhciBTdXNwZW5zZUxpc3RDb21wb25lbnQgPSAxOTtcbnZhciBGdW5kYW1lbnRhbENvbXBvbmVudCA9IDIwO1xudmFyIFNjb3BlQ29tcG9uZW50ID0gMjE7XG52YXIgQmxvY2sgPSAyMjtcbnZhciBPZmZzY3JlZW5Db21wb25lbnQgPSAyMztcbnZhciBMZWdhY3lIaWRkZW5Db21wb25lbnQgPSAyNDtcblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVQcm9maWxlclRpbWVyID0gdHJ1ZTsgLy8gUmVjb3JkIGR1cmF0aW9ucyBmb3IgY29tbWl0IGFuZCBwYXNzaXZlIGVmZmVjdHMgcGhhc2VzLlxuXG52YXIgZW5hYmxlRnVuZGFtZW50YWxBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIFNjb3BlIHN1cHBvcnQuXG52YXIgZW5hYmxlTmV3UmVjb25jaWxlciA9IGZhbHNlOyAvLyBFcnJvcnMgdGhhdCBhcmUgdGhyb3duIHdoaWxlIHVubW91bnRpbmcgKG9yIGFmdGVyIGluIHRoZSBjYXNlIG9mIHBhc3NpdmUgZWZmZWN0cylcbnZhciB3YXJuQWJvdXRTdHJpbmdSZWZzID0gZmFsc2U7XG5cbnZhciBhbGxOYXRpdmVFdmVudHMgPSBuZXcgU2V0KCk7XG4vKipcbiAqIE1hcHBpbmcgZnJvbSByZWdpc3RyYXRpb24gbmFtZSB0byBldmVudCBuYW1lXG4gKi9cblxuXG52YXIgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyA9IHt9O1xuLyoqXG4gKiBNYXBwaW5nIGZyb20gbG93ZXJjYXNlIHJlZ2lzdHJhdGlvbiBuYW1lcyB0byB0aGUgcHJvcGVybHkgY2FzZWQgdmVyc2lvbixcbiAqIHVzZWQgdG8gd2FybiBpbiB0aGUgY2FzZSBvZiBtaXNzaW5nIGV2ZW50IGhhbmRsZXJzLiBBdmFpbGFibGVcbiAqIG9ubHkgaW4gdHJ1ZS5cbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cblxudmFyIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSAge30gOyAvLyBUcnVzdCB0aGUgZGV2ZWxvcGVyIHRvIG9ubHkgdXNlIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgaW4gdHJ1ZVxuXG5mdW5jdGlvbiByZWdpc3RlclR3b1BoYXNlRXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKSB7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lICsgJ0NhcHR1cmUnLCBkZXBlbmRlbmNpZXMpO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAge1xuICAgIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdKSB7XG4gICAgICBlcnJvcignRXZlbnRSZWdpc3RyeTogTW9yZSB0aGFuIG9uZSBwbHVnaW4gYXR0ZW1wdGVkIHRvIHB1Ymxpc2ggdGhlIHNhbWUgJyArICdyZWdpc3RyYXRpb24gbmFtZSwgYCVzYC4nLCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdID0gZGVwZW5kZW5jaWVzO1xuXG4gIHtcbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSByZWdpc3RyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1tsb3dlckNhc2VkTmFtZV0gPSByZWdpc3RyYXRpb25OYW1lO1xuXG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgPT09ICdvbkRvdWJsZUNsaWNrJykge1xuICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcy5vbmRibGNsaWNrID0gcmVnaXN0cmF0aW9uTmFtZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRlcGVuZGVuY2llcy5sZW5ndGg7IGkrKykge1xuICAgIGFsbE5hdGl2ZUV2ZW50cy5hZGQoZGVwZW5kZW5jaWVzW2ldKTtcbiAgfVxufVxuXG52YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50ICE9PSAndW5kZWZpbmVkJyk7XG5cbi8vIEEgcmVzZXJ2ZWQgYXR0cmlidXRlLlxuLy8gSXQgaXMgaGFuZGxlZCBieSBSZWFjdCBzZXBhcmF0ZWx5IGFuZCBzaG91bGRuJ3QgYmUgd3JpdHRlbiB0byB0aGUgRE9NLlxudmFyIFJFU0VSVkVEID0gMDsgLy8gQSBzaW1wbGUgc3RyaW5nIGF0dHJpYnV0ZS5cbi8vIEF0dHJpYnV0ZXMgdGhhdCBhcmVuJ3QgaW4gdGhlIGZpbHRlciBhcmUgcHJlc3VtZWQgdG8gaGF2ZSB0aGlzIHR5cGUuXG5cbnZhciBTVFJJTkcgPSAxOyAvLyBBIHN0cmluZyBhdHRyaWJ1dGUgdGhhdCBhY2NlcHRzIGJvb2xlYW5zIGluIFJlYWN0LiBJbiBIVE1MLCB0aGVzZSBhcmUgY2FsbGVkXG4vLyBcImVudW1lcmF0ZWRcIiBhdHRyaWJ1dGVzIHdpdGggXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIiBhcyBwb3NzaWJsZSB2YWx1ZXMuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBcInRydWVcIiBzdHJpbmcuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgc2V0IHRvIGEgXCJmYWxzZVwiIHN0cmluZy5cblxudmFyIEJPT0xFQU5JU0hfU1RSSU5HID0gMjsgLy8gQSByZWFsIGJvb2xlYW4gYXR0cmlidXRlLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgcHJlc2VudCAoc2V0IGVpdGhlciB0byBhbiBlbXB0eSBzdHJpbmcgb3IgaXRzIG5hbWUpLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIG9taXR0ZWQuXG5cbnZhciBCT09MRUFOID0gMzsgLy8gQW4gYXR0cmlidXRlIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBmbGFnIGFzIHdlbGwgYXMgd2l0aCBhIHZhbHVlLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgcHJlc2VudCAoc2V0IGVpdGhlciB0byBhbiBlbXB0eSBzdHJpbmcgb3IgaXRzIG5hbWUpLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIG9taXR0ZWQuXG4vLyBGb3IgYW55IG90aGVyIHZhbHVlLCBzaG91bGQgYmUgcHJlc2VudCB3aXRoIHRoYXQgdmFsdWUuXG5cbnZhciBPVkVSTE9BREVEX0JPT0xFQU4gPSA0OyAvLyBBbiBhdHRyaWJ1dGUgdGhhdCBtdXN0IGJlIG51bWVyaWMgb3IgcGFyc2UgYXMgYSBudW1lcmljLlxuLy8gV2hlbiBmYWxzeSwgaXQgc2hvdWxkIGJlIHJlbW92ZWQuXG5cbnZhciBOVU1FUklDID0gNTsgLy8gQW4gYXR0cmlidXRlIHRoYXQgbXVzdCBiZSBwb3NpdGl2ZSBudW1lcmljIG9yIHBhcnNlIGFzIGEgcG9zaXRpdmUgbnVtZXJpYy5cbi8vIFdoZW4gZmFsc3ksIGl0IHNob3VsZCBiZSByZW1vdmVkLlxuXG52YXIgUE9TSVRJVkVfTlVNRVJJQyA9IDY7XG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbnZhciBBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSID0gXCI6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXCI7XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cblxudmFyIEFUVFJJQlVURV9OQU1FX0NIQVIgPSBBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSICsgXCJcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MFwiO1xudmFyIFJPT1RfQVRUUklCVVRFX05BTUUgPSAnZGF0YS1yZWFjdHJvb3QnO1xudmFyIFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYID0gbmV3IFJlZ0V4cCgnXlsnICsgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArICddWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlID0ge307XG52YXIgdmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlID0ge307XG5mdW5jdGlvbiBpc0F0dHJpYnV0ZU5hbWVTYWZlKGF0dHJpYnV0ZU5hbWUpIHtcbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlLCBhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVgudGVzdChhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcblxuICB7XG4gICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIG5hbWU6IGAlc2AnLCBhdHRyaWJ1dGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHNob3VsZElnbm9yZUF0dHJpYnV0ZShuYW1lLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEO1xuICB9XG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG5hbWUubGVuZ3RoID4gMiAmJiAobmFtZVswXSA9PT0gJ28nIHx8IG5hbWVbMF0gPT09ICdPJykgJiYgKG5hbWVbMV0gPT09ICduJyB8fCBuYW1lWzFdID09PSAnTicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSAnZnVuY3Rpb24nOiAvLyAkRmxvd0lzc3VlIHN5bWJvbCBpcyBwZXJmZWN0bHkgdmFsaWQgaGVyZVxuXG4gICAgY2FzZSAnc3ltYm9sJzpcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICB7XG4gICAgICAgIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gIXByb3BlcnR5SW5mby5hY2NlcHRzQm9vbGVhbnM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByZWZpeCA9IG5hbWUudG9Mb3dlckNhc2UoKS5zbGljZSgwLCA1KTtcbiAgICAgICAgICByZXR1cm4gcHJlZml4ICE9PSAnZGF0YS0nICYmIHByZWZpeCAhPT0gJ2FyaWEtJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG5cbiAgICBzd2l0Y2ggKHByb3BlcnR5SW5mby50eXBlKSB7XG4gICAgICBjYXNlIEJPT0xFQU46XG4gICAgICAgIHJldHVybiAhdmFsdWU7XG5cbiAgICAgIGNhc2UgT1ZFUkxPQURFRF9CT09MRUFOOlxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IGZhbHNlO1xuXG4gICAgICBjYXNlIE5VTUVSSUM6XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSk7XG5cbiAgICAgIGNhc2UgUE9TSVRJVkVfTlVNRVJJQzpcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0UHJvcGVydHlJbmZvKG5hbWUpIHtcbiAgcmV0dXJuIHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBwcm9wZXJ0aWVzW25hbWVdIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIHR5cGUsIG11c3RVc2VQcm9wZXJ0eSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlTmFtZXNwYWNlLCBzYW5pdGl6ZVVSTCwgcmVtb3ZlRW1wdHlTdHJpbmcpIHtcbiAgdGhpcy5hY2NlcHRzQm9vbGVhbnMgPSB0eXBlID09PSBCT09MRUFOSVNIX1NUUklORyB8fCB0eXBlID09PSBCT09MRUFOIHx8IHR5cGUgPT09IE9WRVJMT0FERURfQk9PTEVBTjtcbiAgdGhpcy5hdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZTtcbiAgdGhpcy5hdHRyaWJ1dGVOYW1lc3BhY2UgPSBhdHRyaWJ1dGVOYW1lc3BhY2U7XG4gIHRoaXMubXVzdFVzZVByb3BlcnR5ID0gbXVzdFVzZVByb3BlcnR5O1xuICB0aGlzLnByb3BlcnR5TmFtZSA9IG5hbWU7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMuc2FuaXRpemVVUkwgPSBzYW5pdGl6ZVVSTDtcbiAgdGhpcy5yZW1vdmVFbXB0eVN0cmluZyA9IHJlbW92ZUVtcHR5U3RyaW5nO1xufSAvLyBXaGVuIGFkZGluZyBhdHRyaWJ1dGVzIHRvIHRoaXMgbGlzdCwgYmUgc3VyZSB0byBhbHNvIGFkZCB0aGVtIHRvXG4vLyB0aGUgYHBvc3NpYmxlU3RhbmRhcmROYW1lc2AgbW9kdWxlIHRvIGVuc3VyZSBjYXNpbmcgYW5kIGluY29ycmVjdFxuLy8gbmFtZSB3YXJuaW5ncy5cblxuXG52YXIgcHJvcGVydGllcyA9IHt9OyAvLyBUaGVzZSBwcm9wcyBhcmUgcmVzZXJ2ZWQgYnkgUmVhY3QuIFRoZXkgc2hvdWxkbid0IGJlIHdyaXR0ZW4gdG8gdGhlIERPTS5cblxudmFyIHJlc2VydmVkUHJvcHMgPSBbJ2NoaWxkcmVuJywgJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJywgLy8gVE9ETzogVGhpcyBwcmV2ZW50cyB0aGUgYXNzaWdubWVudCBvZiBkZWZhdWx0VmFsdWUgdG8gcmVndWxhclxuLy8gZWxlbWVudHMgKG5vdCBqdXN0IGlucHV0cykuIE5vdyB0aGF0IFJlYWN0RE9NSW5wdXQgYXNzaWducyB0byB0aGVcbi8vIGRlZmF1bHRWYWx1ZSBwcm9wZXJ0eSAtLSBkbyB3ZSBuZWVkIHRoaXM/XG4nZGVmYXVsdFZhbHVlJywgJ2RlZmF1bHRDaGVja2VkJywgJ2lubmVySFRNTCcsICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnLCAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJywgJ3N0eWxlJ107XG5yZXNlcnZlZFByb3BzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgUkVTRVJWRUQsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBBIGZldyBSZWFjdCBzdHJpbmcgYXR0cmlidXRlcyBoYXZlIGEgZGlmZmVyZW50IG5hbWUuXG4vLyBUaGlzIGlzIGEgbWFwcGluZyBmcm9tIFJlYWN0IHByb3AgbmFtZXMgdG8gdGhlIGF0dHJpYnV0ZSBuYW1lcy5cblxuW1snYWNjZXB0Q2hhcnNldCcsICdhY2NlcHQtY2hhcnNldCddLCBbJ2NsYXNzTmFtZScsICdjbGFzcyddLCBbJ2h0bWxGb3InLCAnZm9yJ10sIFsnaHR0cEVxdWl2JywgJ2h0dHAtZXF1aXYnXV0uZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgbmFtZSA9IF9yZWZbMF0sXG4gICAgICBhdHRyaWJ1dGVOYW1lID0gX3JlZlsxXTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIFwiZW51bWVyYXRlZFwiIEhUTUwgYXR0cmlidXRlcyB0aGF0IGFjY2VwdCBcInRydWVcIiBhbmQgXCJmYWxzZVwiLlxuLy8gSW4gUmVhY3QsIHdlIGxldCB1c2VycyBwYXNzIGB0cnVlYCBhbmQgYGZhbHNlYCBldmVuIHRob3VnaCB0ZWNobmljYWxseVxuLy8gdGhlc2UgYXJlbid0IGJvb2xlYW4gYXR0cmlidXRlcyAodGhleSBhcmUgY29lcmNlZCB0byBzdHJpbmdzKS5cblxuWydjb250ZW50RWRpdGFibGUnLCAnZHJhZ2dhYmxlJywgJ3NwZWxsQ2hlY2snLCAndmFsdWUnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU5JU0hfU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgXCJlbnVtZXJhdGVkXCIgU1ZHIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIi5cbi8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbi8vIHRoZXNlIGFyZW4ndCBib29sZWFuIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncykuXG4vLyBTaW5jZSB0aGVzZSBhcmUgU1ZHIGF0dHJpYnV0ZXMsIHRoZWlyIGF0dHJpYnV0ZSBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG5cblsnYXV0b1JldmVyc2UnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdmb2N1c2FibGUnLCAncHJlc2VydmVBbHBoYSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTklTSF9TVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBib29sZWFuIGF0dHJpYnV0ZXMuXG5cblsnYWxsb3dGdWxsU2NyZWVuJywgJ2FzeW5jJywgLy8gTm90ZTogdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBwcmV2ZW50cyBpdCBmcm9tIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIERPTVxuLy8gb24gdGhlIGNsaWVudCBzaWRlIGJlY2F1c2UgdGhlIGJyb3dzZXJzIGFyZSBpbmNvbnNpc3RlbnQuIEluc3RlYWQgd2UgY2FsbCBmb2N1cygpLlxuJ2F1dG9Gb2N1cycsICdhdXRvUGxheScsICdjb250cm9scycsICdkZWZhdWx0JywgJ2RlZmVyJywgJ2Rpc2FibGVkJywgJ2Rpc2FibGVQaWN0dXJlSW5QaWN0dXJlJywgJ2Rpc2FibGVSZW1vdGVQbGF5YmFjaycsICdmb3JtTm9WYWxpZGF0ZScsICdoaWRkZW4nLCAnbG9vcCcsICdub01vZHVsZScsICdub1ZhbGlkYXRlJywgJ29wZW4nLCAncGxheXNJbmxpbmUnLCAncmVhZE9ubHknLCAncmVxdWlyZWQnLCAncmV2ZXJzZWQnLCAnc2NvcGVkJywgJ3NlYW1sZXNzJywgLy8gTWljcm9kYXRhXG4naXRlbVNjb3BlJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgdGhlIGZldyBSZWFjdCBwcm9wcyB0aGF0IHdlIHNldCBhcyBET00gcHJvcGVydGllc1xuLy8gcmF0aGVyIHRoYW4gYXR0cmlidXRlcy4gVGhlc2UgYXJlIGFsbCBib29sZWFucy5cblxuWydjaGVja2VkJywgLy8gTm90ZTogYG9wdGlvbi5zZWxlY3RlZGAgaXMgbm90IHVwZGF0ZWQgaWYgYHNlbGVjdC5tdWx0aXBsZWAgaXNcbi8vIGRpc2FibGVkIHdpdGggYHJlbW92ZUF0dHJpYnV0ZWAuIFdlIGhhdmUgc3BlY2lhbCBsb2dpYyBmb3IgaGFuZGxpbmcgdGhpcy5cbidtdWx0aXBsZScsICdtdXRlZCcsICdzZWxlY3RlZCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTiwgdHJ1ZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IGFyZSBcIm92ZXJsb2FkZWQgYm9vbGVhbnNcIjogdGhleSBiZWhhdmUgbGlrZVxuLy8gYm9vbGVhbnMsIGJ1dCBjYW4gYWxzbyBhY2NlcHQgYSBzdHJpbmcgdmFsdWUuXG5cblsnY2FwdHVyZScsICdkb3dubG9hZCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgT1ZFUkxPQURFRF9CT09MRUFOLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IG11c3QgYmUgcG9zaXRpdmUgbnVtYmVycy5cblxuWydjb2xzJywgJ3Jvd3MnLCAnc2l6ZScsICdzcGFuJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBQT1NJVElWRV9OVU1FUklDLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IG11c3QgYmUgbnVtYmVycy5cblxuWydyb3dTcGFuJywgJ3N0YXJ0J10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBOVU1FUklDLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pO1xudmFyIENBTUVMSVpFID0gL1tcXC1cXDpdKFthLXpdKS9nO1xuXG52YXIgY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICByZXR1cm4gdG9rZW5bMV0udG9VcHBlckNhc2UoKTtcbn07IC8vIFRoaXMgaXMgYSBsaXN0IG9mIGFsbCBTVkcgYXR0cmlidXRlcyB0aGF0IG5lZWQgc3BlY2lhbCBjYXNpbmcsIG5hbWVzcGFjaW5nLFxuLy8gb3IgYm9vbGVhbiB2YWx1ZSBhc3NpZ25tZW50LiBSZWd1bGFyIGF0dHJpYnV0ZXMgdGhhdCBqdXN0IGFjY2VwdCBzdHJpbmdzXG4vLyBhbmQgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcmUgb21pdHRlZCwganVzdCBsaWtlIGluIHRoZSBIVE1MIGF0dHJpYnV0ZSBmaWx0ZXIuXG4vLyBTb21lIG9mIHRoZXNlIGF0dHJpYnV0ZXMgY2FuIGJlIGhhcmQgdG8gZmluZC4gVGhpcyBsaXN0IHdhcyBjcmVhdGVkIGJ5XG4vLyBzY3JhcGluZyB0aGUgTUROIGRvY3VtZW50YXRpb24uXG5cblxuWydhY2NlbnQtaGVpZ2h0JywgJ2FsaWdubWVudC1iYXNlbGluZScsICdhcmFiaWMtZm9ybScsICdiYXNlbGluZS1zaGlmdCcsICdjYXAtaGVpZ2h0JywgJ2NsaXAtcGF0aCcsICdjbGlwLXJ1bGUnLCAnY29sb3ItaW50ZXJwb2xhdGlvbicsICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnLCAnY29sb3ItcHJvZmlsZScsICdjb2xvci1yZW5kZXJpbmcnLCAnZG9taW5hbnQtYmFzZWxpbmUnLCAnZW5hYmxlLWJhY2tncm91bmQnLCAnZmlsbC1vcGFjaXR5JywgJ2ZpbGwtcnVsZScsICdmbG9vZC1jb2xvcicsICdmbG9vZC1vcGFjaXR5JywgJ2ZvbnQtZmFtaWx5JywgJ2ZvbnQtc2l6ZScsICdmb250LXNpemUtYWRqdXN0JywgJ2ZvbnQtc3RyZXRjaCcsICdmb250LXN0eWxlJywgJ2ZvbnQtdmFyaWFudCcsICdmb250LXdlaWdodCcsICdnbHlwaC1uYW1lJywgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnLCAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnLCAnaG9yaXotYWR2LXgnLCAnaG9yaXotb3JpZ2luLXgnLCAnaW1hZ2UtcmVuZGVyaW5nJywgJ2xldHRlci1zcGFjaW5nJywgJ2xpZ2h0aW5nLWNvbG9yJywgJ21hcmtlci1lbmQnLCAnbWFya2VyLW1pZCcsICdtYXJrZXItc3RhcnQnLCAnb3ZlcmxpbmUtcG9zaXRpb24nLCAnb3ZlcmxpbmUtdGhpY2tuZXNzJywgJ3BhaW50LW9yZGVyJywgJ3Bhbm9zZS0xJywgJ3BvaW50ZXItZXZlbnRzJywgJ3JlbmRlcmluZy1pbnRlbnQnLCAnc2hhcGUtcmVuZGVyaW5nJywgJ3N0b3AtY29sb3InLCAnc3RvcC1vcGFjaXR5JywgJ3N0cmlrZXRocm91Z2gtcG9zaXRpb24nLCAnc3RyaWtldGhyb3VnaC10aGlja25lc3MnLCAnc3Ryb2tlLWRhc2hhcnJheScsICdzdHJva2UtZGFzaG9mZnNldCcsICdzdHJva2UtbGluZWNhcCcsICdzdHJva2UtbGluZWpvaW4nLCAnc3Ryb2tlLW1pdGVybGltaXQnLCAnc3Ryb2tlLW9wYWNpdHknLCAnc3Ryb2tlLXdpZHRoJywgJ3RleHQtYW5jaG9yJywgJ3RleHQtZGVjb3JhdGlvbicsICd0ZXh0LXJlbmRlcmluZycsICd1bmRlcmxpbmUtcG9zaXRpb24nLCAndW5kZXJsaW5lLXRoaWNrbmVzcycsICd1bmljb2RlLWJpZGknLCAndW5pY29kZS1yYW5nZScsICd1bml0cy1wZXItZW0nLCAndi1hbHBoYWJldGljJywgJ3YtaGFuZ2luZycsICd2LWlkZW9ncmFwaGljJywgJ3YtbWF0aGVtYXRpY2FsJywgJ3ZlY3Rvci1lZmZlY3QnLCAndmVydC1hZHYteScsICd2ZXJ0LW9yaWdpbi14JywgJ3ZlcnQtb3JpZ2luLXknLCAnd29yZC1zcGFjaW5nJywgJ3dyaXRpbmctbW9kZScsICd4bWxuczp4bGluaycsICd4LWhlaWdodCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lLnJlcGxhY2UoQ0FNRUxJWkUsIGNhcGl0YWxpemUpO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gU3RyaW5nIFNWRyBhdHRyaWJ1dGVzIHdpdGggdGhlIHhsaW5rIG5hbWVzcGFjZS5cblxuWyd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBTdHJpbmcgU1ZHIGF0dHJpYnV0ZXMgd2l0aCB0aGUgeG1sIG5hbWVzcGFjZS5cblxuWyd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnLCBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGF0dHJpYnV0ZSBleGlzdHMgYm90aCBpbiBIVE1MIGFuZCBTVkcuXG4vLyBUaGUgYXR0cmlidXRlIG5hbWUgaXMgY2FzZS1zZW5zaXRpdmUgaW4gU1ZHIHNvIHdlIGNhbid0IGp1c3QgdXNlXG4vLyB0aGUgUmVhY3QgbmFtZSBsaWtlIHdlIGRvIGZvciBhdHRyaWJ1dGVzIHRoYXQgZXhpc3Qgb25seSBpbiBIVE1MLlxuXG5bJ3RhYkluZGV4JywgJ2Nyb3NzT3JpZ2luJ10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICBwcm9wZXJ0aWVzW2F0dHJpYnV0ZU5hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChhdHRyaWJ1dGVOYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGF0dHJpYnV0ZXMgYWNjZXB0IFVSTHMuIFRoZXNlIG11c3Qgbm90IGFsbG93IGphdmFzY3JpcHQ6IFVSTFMuXG4vLyBUaGVzZSB3aWxsIGFsc28gbmVlZCB0byBhY2NlcHQgVHJ1c3RlZCBUeXBlcyBvYmplY3QgaW4gdGhlIGZ1dHVyZS5cblxudmFyIHhsaW5rSHJlZiA9ICd4bGlua0hyZWYnO1xucHJvcGVydGllc1t4bGlua0hyZWZdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZCgneGxpbmtIcmVmJywgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4neGxpbms6aHJlZicsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywgdHJ1ZSwgLy8gc2FuaXRpemVVUkxcbmZhbHNlKTtcblsnc3JjJywgJ2hyZWYnLCAnYWN0aW9uJywgJ2Zvcm1BY3Rpb24nXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHByb3BlcnRpZXNbYXR0cmlidXRlTmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKGF0dHJpYnV0ZU5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIHRydWUsIC8vIHNhbml0aXplVVJMXG4gIHRydWUpO1xufSk7XG5cbi8vIGFuZCBhbnkgbmV3bGluZSBvciB0YWIgYXJlIGZpbHRlcmVkIG91dCBhcyBpZiB0aGV5J3JlIG5vdCBwYXJ0IG9mIHRoZSBVUkwuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybC1wYXJzaW5nXG4vLyBUYWIgb3IgbmV3bGluZSBhcmUgZGVmaW5lZCBhcyBcXHJcXG5cXHQ6XG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYXNjaWktdGFiLW9yLW5ld2xpbmVcbi8vIEEgQzAgY29udHJvbCBpcyBhIGNvZGUgcG9pbnQgaW4gdGhlIHJhbmdlIFxcdTAwMDAgTlVMTCB0byBcXHUwMDFGXG4vLyBJTkZPUk1BVElPTiBTRVBBUkFUT1IgT05FLCBpbmNsdXNpdmU6XG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYzAtY29udHJvbC1vci1zcGFjZVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cbnZhciBpc0phdmFTY3JpcHRQcm90b2NvbCA9IC9eW1xcdTAwMDAtXFx1MDAxRiBdKmpbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qdltcXHJcXG5cXHRdKmFbXFxyXFxuXFx0XSpzW1xcclxcblxcdF0qY1tcXHJcXG5cXHRdKnJbXFxyXFxuXFx0XSppW1xcclxcblxcdF0qcFtcXHJcXG5cXHRdKnRbXFxyXFxuXFx0XSpcXDovaTtcbnZhciBkaWRXYXJuID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHNhbml0aXplVVJMKHVybCkge1xuICB7XG4gICAgaWYgKCFkaWRXYXJuICYmIGlzSmF2YVNjcmlwdFByb3RvY29sLnRlc3QodXJsKSkge1xuICAgICAgZGlkV2FybiA9IHRydWU7XG5cbiAgICAgIGVycm9yKCdBIGZ1dHVyZSB2ZXJzaW9uIG9mIFJlYWN0IHdpbGwgYmxvY2sgamF2YXNjcmlwdDogVVJMcyBhcyBhIHNlY3VyaXR5IHByZWNhdXRpb24uICcgKyAnVXNlIGV2ZW50IGhhbmRsZXJzIGluc3RlYWQgaWYgeW91IGNhbi4gSWYgeW91IG5lZWQgdG8gZ2VuZXJhdGUgdW5zYWZlIEhUTUwgdHJ5ICcgKyAndXNpbmcgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgaW5zdGVhZC4gUmVhY3Qgd2FzIHBhc3NlZCAlcy4nLCBKU09OLnN0cmluZ2lmeSh1cmwpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhIHByb3BlcnR5IG9uIGEgbm9kZS4gT25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKiBUaGUgXCJleHBlY3RlZFwiIGFyZ3VtZW50IGlzIHVzZWQgYXMgYSBoaW50IG9mIHdoYXQgdGhlIGV4cGVjdGVkIHZhbHVlIGlzLlxuICogU29tZSBwcm9wZXJ0aWVzIGhhdmUgbXVsdGlwbGUgZXF1aXZhbGVudCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbykge1xuICB7XG4gICAgaWYgKHByb3BlcnR5SW5mby5tdXN0VXNlUHJvcGVydHkpIHtcbiAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUluZm8ucHJvcGVydHlOYW1lO1xuICAgICAgcmV0dXJuIG5vZGVbcHJvcGVydHlOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCBwcm9wZXJ0eUluZm8uc2FuaXRpemVVUkwpIHtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmdWxseSBkaXNhYmxlZCBqYXZhc2NyaXB0OiBVUkxzLCBhbmQgaWZcbiAgICAgICAgLy8gdGhlIGh5ZHJhdGlvbiBpcyBzdWNjZXNzZnVsIG9mIGEgamF2YXNjcmlwdDogVVJMLCB3ZVxuICAgICAgICAvLyBzdGlsbCB3YW50IHRvIHdhcm4gb24gdGhlIGNsaWVudC5cbiAgICAgICAgc2FuaXRpemVVUkwoJycgKyBleHBlY3RlZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWU7XG4gICAgICB2YXIgc3RyaW5nVmFsdWUgPSBudWxsO1xuXG4gICAgICBpZiAocHJvcGVydHlJbmZvLnR5cGUgPT09IE9WRVJMT0FERURfQk9PTEVBTikge1xuICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgICAgLy8gV2UgaGFkIGFuIGF0dHJpYnV0ZSBidXQgc2hvdWxkbid0IGhhdmUgaGFkIG9uZSwgc28gcmVhZCBpdFxuICAgICAgICAgIC8vIGZvciB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgICAgICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvLnR5cGUgPT09IEJPT0xFQU4pIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBhIGJvb2xlYW4sIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIHZhbHVlIGlzXG4gICAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBleHBlY3RlZC5cbiAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgIH0gLy8gRXZlbiBpZiB0aGlzIHByb3BlcnR5IHVzZXMgYSBuYW1lc3BhY2Ugd2UgdXNlIGdldEF0dHJpYnV0ZVxuICAgICAgICAvLyBiZWNhdXNlIHdlIGFzc3VtZSBpdHMgbmFtZXNwYWNlZCBuYW1lIGlzIHRoZSBzYW1lIGFzIG91ciBjb25maWcuXG4gICAgICAgIC8vIFRvIHVzZSBnZXRBdHRyaWJ1dGVOUyB3ZSBuZWVkIHRoZSBsb2NhbCBuYW1lIHdoaWNoIHdlIGRvbid0IGhhdmVcbiAgICAgICAgLy8gaW4gb3VyIGNvbmZpZyBhdG0uXG5cblxuICAgICAgICBzdHJpbmdWYWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUgPT09IG51bGwgPyBleHBlY3RlZCA6IHN0cmluZ1ZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChzdHJpbmdWYWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9yIGEgYXR0cmlidXRlIG9uIGEgbm9kZS4gT25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKiBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdXNlZCBhcyBhIGhpbnQgb2Ygd2hhdCB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMuIFNvbWVcbiAqIGF0dHJpYnV0ZXMgaGF2ZSBtdWx0aXBsZSBlcXVpdmFsZW50IHZhbHVlcy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRWYWx1ZUZvckF0dHJpYnV0ZShub2RlLCBuYW1lLCBleHBlY3RlZCkge1xuICB7XG4gICAgaWYgKCFpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB0aGUgb2JqZWN0IGlzIGFuIG9wYXF1ZSByZWZlcmVuY2UgSUQsIGl0J3MgZXhwZWN0ZWQgdGhhdFxuICAgIC8vIHRoZSBuZXh0IHByb3AgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHNlcnZlciB2YWx1ZSwgc28ganVzdCByZXR1cm5cbiAgICAvLyBleHBlY3RlZFxuXG5cbiAgICBpZiAoaXNPcGFxdWVIeWRyYXRpbmdPYmplY3QoZXhwZWN0ZWQpKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFub2RlLmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBudWxsO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXG4gICAgaWYgKHZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIGZvciBhIHByb3BlcnR5IG9uIGEgbm9kZS5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKi9cblxuZnVuY3Rpb24gc2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCB2YWx1ZSwgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgdmFyIHByb3BlcnR5SW5mbyA9IGdldFByb3BlcnR5SW5mbyhuYW1lKTtcblxuICBpZiAoc2hvdWxkSWdub3JlQXR0cmlidXRlKG5hbWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICB2YWx1ZSA9IG51bGw7XG4gIH0gLy8gSWYgdGhlIHByb3AgaXNuJ3QgaW4gdGhlIHNwZWNpYWwgbGlzdCwgdHJlYXQgaXQgYXMgYSBzaW1wbGUgYXR0cmlidXRlLlxuXG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnIHx8IHByb3BlcnR5SW5mbyA9PT0gbnVsbCkge1xuICAgIGlmIChpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKSB7XG4gICAgICB2YXIgX2F0dHJpYnV0ZU5hbWUgPSBuYW1lO1xuXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoX2F0dHJpYnV0ZU5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoX2F0dHJpYnV0ZU5hbWUsICAnJyArIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbXVzdFVzZVByb3BlcnR5ID0gcHJvcGVydHlJbmZvLm11c3RVc2VQcm9wZXJ0eTtcblxuICBpZiAobXVzdFVzZVByb3BlcnR5KSB7XG4gICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWU7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHZhciB0eXBlID0gcHJvcGVydHlJbmZvLnR5cGU7XG4gICAgICBub2RlW3Byb3BlcnR5TmFtZV0gPSB0eXBlID09PSBCT09MRUFOID8gZmFsc2UgOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udHJhcnkgdG8gYHNldEF0dHJpYnV0ZWAsIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBwcm9wZXJseVxuICAgICAgLy8gYHRvU3RyaW5nYGVkIGJ5IElFOC85LlxuICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9IC8vIFRoZSByZXN0IGFyZSB0cmVhdGVkIGFzIGF0dHJpYnV0ZXMgd2l0aCBzcGVjaWFsIGNhc2VzLlxuXG5cbiAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZSxcbiAgICAgIGF0dHJpYnV0ZU5hbWVzcGFjZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lc3BhY2U7XG5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF90eXBlID0gcHJvcGVydHlJbmZvLnR5cGU7XG4gICAgdmFyIGF0dHJpYnV0ZVZhbHVlO1xuXG4gICAgaWYgKF90eXBlID09PSBCT09MRUFOIHx8IF90eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU4gJiYgdmFsdWUgPT09IHRydWUpIHtcbiAgICAgIC8vIElmIGF0dHJpYnV0ZSB0eXBlIGlzIGJvb2xlYW4sIHdlIGtub3cgZm9yIHN1cmUgaXQgd29uJ3QgYmUgYW4gZXhlY3V0aW9uIHNpbmtcbiAgICAgIC8vIGFuZCB3ZSB3b24ndCByZXF1aXJlIFRydXN0ZWQgVHlwZSBoZXJlLlxuICAgICAgYXR0cmlidXRlVmFsdWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYHNldEF0dHJpYnV0ZWAgd2l0aCBvYmplY3RzIGJlY29tZXMgb25seSBgW29iamVjdF1gIGluIElFOC85LFxuICAgICAgLy8gKCcnICsgdmFsdWUpIG1ha2VzIGl0IG91dHB1dCB0aGUgY29ycmVjdCB0b1N0cmluZygpLXZhbHVlLlxuICAgICAge1xuICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0eUluZm8uc2FuaXRpemVVUkwpIHtcbiAgICAgICAgc2FuaXRpemVVUkwoYXR0cmlidXRlVmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGF0dHJpYnV0ZU5hbWVzcGFjZSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhhdHRyaWJ1dGVOYW1lc3BhY2UsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gMHhlYWQ5O1xudmFyIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gMHhlYWRhO1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSAweGVhZDU7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IDB4ZWFkNztcbnZhciBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IDB4ZWFlMDtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IDB4ZWFlMTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IDB4ZWFlMjtcbnZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSAweGVhZTM7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZWxlbWVudCcpO1xuICBSRUFDVF9QT1JUQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucG9ydGFsJyk7XG4gIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRyb2w7XG4gIHJlZW50cnkgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgIH1cblxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlQ2xhc3NDb21wb25lbnRGcmFtZShjdG9yLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGN0b3IsIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVGaWJlcihmaWJlcikge1xuICB2YXIgb3duZXIgPSAgZmliZXIuX2RlYnVnT3duZXIgPyBmaWJlci5fZGVidWdPd25lci50eXBlIDogbnVsbCA7XG4gIHZhciBzb3VyY2UgPSAgZmliZXIuX2RlYnVnU291cmNlIDtcblxuICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShmaWJlci50eXBlKTtcblxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnTGF6eScpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcblxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUucmVuZGVyKTtcblxuICAgIGNhc2UgQmxvY2s6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUuX3JlbmRlcik7XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQ2xhc3NDb21wb25lbnRGcmFtZShmaWJlci50eXBlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHdvcmtJblByb2dyZXNzKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSAnJztcbiAgICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzO1xuXG4gICAgZG8ge1xuICAgICAgaW5mbyArPSBkZXNjcmliZUZpYmVyKG5vZGUpO1xuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH0gd2hpbGUgKG5vZGUpO1xuXG4gICAgcmV0dXJuIGluZm87XG4gIH0gY2F0Y2ggKHgpIHtcbiAgICByZXR1cm4gJ1xcbkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6ICcgKyB4Lm1lc3NhZ2UgKyAnXFxuJyArIHguc3RhY2s7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG52YXIgY3VycmVudCA9IG51bGw7XG52YXIgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBvd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXI7XG5cbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgdHlwZW9mIG93bmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUob3duZXIudHlwZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYoKSB7XG4gIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gLy8gU2FmZSBiZWNhdXNlIGlmIGN1cnJlbnQgZmliZXIgZXhpc3RzLCB3ZSBhcmUgcmVjb25jaWxpbmcsXG4gICAgLy8gYW5kIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgdmVyc2lvbi5cblxuXG4gICAgcmV0dXJuIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChjdXJyZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldEN1cnJlbnRGaWJlcigpIHtcbiAge1xuICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrID0gbnVsbDtcbiAgICBjdXJyZW50ID0gbnVsbDtcbiAgICBpc1JlbmRlcmluZyA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBzZXRDdXJyZW50RmliZXIoZmliZXIpIHtcbiAge1xuICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrID0gZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldjtcbiAgICBjdXJyZW50ID0gZmliZXI7XG4gICAgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0SXNSZW5kZXJpbmcocmVuZGVyaW5nKSB7XG4gIHtcbiAgICBpc1JlbmRlcmluZyA9IHJlbmRlcmluZztcbiAgfVxufVxuZnVuY3Rpb24gZ2V0SXNSZW5kZXJpbmcoKSB7XG4gIHtcbiAgICByZXR1cm4gaXNSZW5kZXJpbmc7XG4gIH1cbn1cblxuLy8gRmxvdyBkb2VzIG5vdCBhbGxvdyBzdHJpbmcgY29uY2F0ZW5hdGlvbiBvZiBtb3N0IG5vbi1zdHJpbmcgdHlwZXMuIFRvIHdvcmtcbi8vIGFyb3VuZCB0aGlzIGxpbWl0YXRpb24sIHdlIHVzZSBhbiBvcGFxdWUgdHlwZSB0aGF0IGNhbiBvbmx5IGJlIG9idGFpbmVkIGJ5XG4vLyBwYXNzaW5nIHRoZSB2YWx1ZSB0aHJvdWdoIGdldFRvU3RyaW5nVmFsdWUgZmlyc3QuXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gJycgKyB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGdldFRvU3RyaW5nVmFsdWUodmFsdWUpIHtcbiAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgcmV0dXJuIHZhbHVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGZ1bmN0aW9uLCBzeW1ib2wgYXJlIGFzc2lnbmVkIGFzIGVtcHR5IHN0cmluZ3NcbiAgICAgIHJldHVybiAnJztcbiAgfVxufVxuXG52YXIgaGFzUmVhZE9ubHlWYWx1ZSA9IHtcbiAgYnV0dG9uOiB0cnVlLFxuICBjaGVja2JveDogdHJ1ZSxcbiAgaW1hZ2U6IHRydWUsXG4gIGhpZGRlbjogdHJ1ZSxcbiAgcmFkaW86IHRydWUsXG4gIHJlc2V0OiB0cnVlLFxuICBzdWJtaXQ6IHRydWVcbn07XG5mdW5jdGlvbiBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKHRhZ05hbWUsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAoIShoYXNSZWFkT25seVZhbHVlW3Byb3BzLnR5cGVdIHx8IHByb3BzLm9uQ2hhbmdlIHx8IHByb3BzLm9uSW5wdXQgfHwgcHJvcHMucmVhZE9ubHkgfHwgcHJvcHMuZGlzYWJsZWQgfHwgcHJvcHMudmFsdWUgPT0gbnVsbCkpIHtcbiAgICAgIGVycm9yKCdZb3UgcHJvdmlkZWQgYSBgdmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgKyAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdFZhbHVlYC4gT3RoZXJ3aXNlLCAnICsgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLicpO1xuICAgIH1cblxuICAgIGlmICghKHByb3BzLm9uQ2hhbmdlIHx8IHByb3BzLnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkIHx8IHByb3BzLmNoZWNrZWQgPT0gbnVsbCkpIHtcbiAgICAgIGVycm9yKCdZb3UgcHJvdmlkZWQgYSBgY2hlY2tlZGAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICsgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0Q2hlY2tlZGAuIE90aGVyd2lzZSwgJyArICdzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDaGVja2FibGUoZWxlbSkge1xuICB2YXIgdHlwZSA9IGVsZW0udHlwZTtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIG5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgJiYgKHR5cGUgPT09ICdjaGVja2JveCcgfHwgdHlwZSA9PT0gJ3JhZGlvJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRyYWNrZXIobm9kZSkge1xuICByZXR1cm4gbm9kZS5fdmFsdWVUcmFja2VyO1xufVxuXG5mdW5jdGlvbiBkZXRhY2hUcmFja2VyKG5vZGUpIHtcbiAgbm9kZS5fdmFsdWVUcmFja2VyID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWVGcm9tTm9kZShub2RlKSB7XG4gIHZhciB2YWx1ZSA9ICcnO1xuXG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGlmIChpc0NoZWNrYWJsZShub2RlKSkge1xuICAgIHZhbHVlID0gbm9kZS5jaGVja2VkID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IG5vZGUudmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHRyYWNrVmFsdWVPbk5vZGUobm9kZSkge1xuICB2YXIgdmFsdWVGaWVsZCA9IGlzQ2hlY2thYmxlKG5vZGUpID8gJ2NoZWNrZWQnIDogJ3ZhbHVlJztcbiAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5vZGUuY29uc3RydWN0b3IucHJvdG90eXBlLCB2YWx1ZUZpZWxkKTtcbiAgdmFyIGN1cnJlbnRWYWx1ZSA9ICcnICsgbm9kZVt2YWx1ZUZpZWxkXTsgLy8gaWYgc29tZW9uZSBoYXMgYWxyZWFkeSBkZWZpbmVkIGEgdmFsdWUgb3IgU2FmYXJpLCB0aGVuIGJhaWxcbiAgLy8gYW5kIGRvbid0IHRyYWNrIHZhbHVlIHdpbGwgY2F1c2Ugb3ZlciByZXBvcnRpbmcgb2YgY2hhbmdlcyxcbiAgLy8gYnV0IGl0J3MgYmV0dGVyIHRoZW4gYSBoYXJkIGZhaWx1cmVcbiAgLy8gKG5lZWRlZCBmb3IgY2VydGFpbiB0ZXN0cyB0aGF0IHNweU9uIGlucHV0IHZhbHVlcyBhbmQgU2FmYXJpKVxuXG4gIGlmIChub2RlLmhhc093blByb3BlcnR5KHZhbHVlRmllbGQpIHx8IHR5cGVvZiBkZXNjcmlwdG9yID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZGVzY3JpcHRvci5nZXQgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGRlc2NyaXB0b3Iuc2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGdldCA9IGRlc2NyaXB0b3IuZ2V0LFxuICAgICAgc2V0ID0gZGVzY3JpcHRvci5zZXQ7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGdldC5jYWxsKHRoaXMpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgfVxuICB9KTsgLy8gV2UgY291bGQndmUgcGFzc2VkIHRoaXMgdGhlIGZpcnN0IHRpbWVcbiAgLy8gYnV0IGl0IHRyaWdnZXJzIGEgYnVnIGluIElFMTEgYW5kIEVkZ2UgMTQvMTUuXG4gIC8vIENhbGxpbmcgZGVmaW5lUHJvcGVydHkoKSBhZ2FpbiBzaG91bGQgYmUgZXF1aXZhbGVudC5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTc2OFxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgZW51bWVyYWJsZTogZGVzY3JpcHRvci5lbnVtZXJhYmxlXG4gIH0pO1xuICB2YXIgdHJhY2tlciA9IHtcbiAgICBnZXRWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICB9LFxuICAgIHNldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgfSxcbiAgICBzdG9wVHJhY2tpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRldGFjaFRyYWNrZXIobm9kZSk7XG4gICAgICBkZWxldGUgbm9kZVt2YWx1ZUZpZWxkXTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB0cmFja2VyO1xufVxuXG5mdW5jdGlvbiB0cmFjayhub2RlKSB7XG4gIGlmIChnZXRUcmFja2VyKG5vZGUpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIFRPRE86IE9uY2UgaXQncyBqdXN0IEZpYmVyIHdlIGNhbiBtb3ZlIHRoaXMgdG8gbm9kZS5fd3JhcHBlclN0YXRlXG5cblxuICBub2RlLl92YWx1ZVRyYWNrZXIgPSB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpO1xufVxuZnVuY3Rpb24gdXBkYXRlVmFsdWVJZkNoYW5nZWQobm9kZSkge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdHJhY2tlciA9IGdldFRyYWNrZXIobm9kZSk7IC8vIGlmIHRoZXJlIGlzIG5vIHRyYWNrZXIgYXQgdGhpcyBwb2ludCBpdCdzIHVubGlrZWx5XG4gIC8vIHRoYXQgdHJ5aW5nIGFnYWluIHdpbGwgc3VjY2VlZFxuXG4gIGlmICghdHJhY2tlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIGxhc3RWYWx1ZSA9IHRyYWNrZXIuZ2V0VmFsdWUoKTtcbiAgdmFyIG5leHRWYWx1ZSA9IGdldFZhbHVlRnJvbU5vZGUobm9kZSk7XG5cbiAgaWYgKG5leHRWYWx1ZSAhPT0gbGFzdFZhbHVlKSB7XG4gICAgdHJhY2tlci5zZXRWYWx1ZShuZXh0VmFsdWUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50KGRvYykge1xuICBkb2MgPSBkb2MgfHwgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHVuZGVmaW5lZCk7XG5cbiAgaWYgKHR5cGVvZiBkb2MgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBkb2MuYWN0aXZlRWxlbWVudCB8fCBkb2MuYm9keTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBkb2MuYm9keTtcbiAgfVxufVxuXG52YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gZmFsc2U7XG52YXIgZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCA9IGZhbHNlO1xudmFyIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSBmYWxzZTtcbnZhciBkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGlzQ29udHJvbGxlZChwcm9wcykge1xuICB2YXIgdXNlc0NoZWNrZWQgPSBwcm9wcy50eXBlID09PSAnY2hlY2tib3gnIHx8IHByb3BzLnR5cGUgPT09ICdyYWRpbyc7XG4gIHJldHVybiB1c2VzQ2hlY2tlZCA/IHByb3BzLmNoZWNrZWQgIT0gbnVsbCA6IHByb3BzLnZhbHVlICE9IG51bGw7XG59XG4vKipcbiAqIEltcGxlbWVudHMgYW4gPGlucHV0PiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBzZXR0aW5nIHRoZXNlIG9wdGlvbmFsXG4gKiBwcm9wczogYGNoZWNrZWRgLCBgdmFsdWVgLCBgZGVmYXVsdENoZWNrZWRgLCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKlxuICogSWYgYGNoZWNrZWRgIG9yIGB2YWx1ZWAgYXJlIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnNcbiAqIHRoYXQgYWZmZWN0IHRoZSBjaGVja2VkIHN0YXRlIG9yIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIHRoZXkgYXJlIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBub3RcbiAqIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC4gSW5zdGVhZCwgdGhlIHByb3BzIG11c3QgY2hhbmdlIGluIG9yZGVyIGZvclxuICogdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIGFzIHVuY2hlY2tlZCAob3IgYGRlZmF1bHRDaGVja2VkYClcbiAqIHdpdGggYW4gZW1wdHkgdmFsdWUgKG9yIGBkZWZhdWx0VmFsdWVgKS5cbiAqXG4gKiBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMTAyNS90aGUtaW5wdXQtZWxlbWVudC5odG1sXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgY2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cbiAgdmFyIGhvc3RQcm9wcyA9IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgZGVmYXVsdENoZWNrZWQ6IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgIGNoZWNrZWQ6IGNoZWNrZWQgIT0gbnVsbCA/IGNoZWNrZWQgOiBub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWRcbiAgfSk7XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUoZWxlbWVudCwgcHJvcHMpIHtcbiAge1xuICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoJ2lucHV0JywgcHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLmNoZWNrZWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkKSB7XG4gICAgICBlcnJvcignJXMgY29udGFpbnMgYW4gaW5wdXQgb2YgdHlwZSAlcyB3aXRoIGJvdGggY2hlY2tlZCBhbmQgZGVmYXVsdENoZWNrZWQgcHJvcHMuICcgKyAnSW5wdXQgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIGNoZWNrZWQgcHJvcCwgb3IgdGhlIGRlZmF1bHRDaGVja2VkIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKTtcblxuICAgICAgZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIHZhbHVlIGFuZCBkZWZhdWx0VmFsdWUgcHJvcHMuICcgKyAnSW5wdXQgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcsIHByb3BzLnR5cGUpO1xuXG4gICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZSA9PSBudWxsID8gJycgOiBwcm9wcy5kZWZhdWx0VmFsdWU7XG4gIG5vZGUuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICBpbml0aWFsQ2hlY2tlZDogcHJvcHMuY2hlY2tlZCAhPSBudWxsID8gcHJvcHMuY2hlY2tlZCA6IHByb3BzLmRlZmF1bHRDaGVja2VkLFxuICAgIGluaXRpYWxWYWx1ZTogZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSAhPSBudWxsID8gcHJvcHMudmFsdWUgOiBkZWZhdWx0VmFsdWUpLFxuICAgIGNvbnRyb2xsZWQ6IGlzQ29udHJvbGxlZChwcm9wcylcbiAgfTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNoZWNrZWQoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgY2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cbiAgaWYgKGNoZWNrZWQgIT0gbnVsbCkge1xuICAgIHNldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgJ2NoZWNrZWQnLCBjaGVja2VkLCBmYWxzZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBwZXIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICB2YXIgY29udHJvbGxlZCA9IGlzQ29udHJvbGxlZChwcm9wcyk7XG5cbiAgICBpZiAoIW5vZGUuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmIGNvbnRyb2xsZWQgJiYgIWRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQpIHtcbiAgICAgIGVycm9yKCdBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyBhbiB1bmNvbnRyb2xsZWQgaW5wdXQgdG8gYmUgY29udHJvbGxlZC4gJyArICdUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgdGhlIHZhbHVlIGNoYW5naW5nIGZyb20gdW5kZWZpbmVkIHRvICcgKyAnYSBkZWZpbmVkIHZhbHVlLCB3aGljaCBzaG91bGQgbm90IGhhcHBlbi4gJyArICdEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5fd3JhcHBlclN0YXRlLmNvbnRyb2xsZWQgJiYgIWNvbnRyb2xsZWQgJiYgIWRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQpIHtcbiAgICAgIGVycm9yKCdBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyBhIGNvbnRyb2xsZWQgaW5wdXQgdG8gYmUgdW5jb250cm9sbGVkLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSB0aGUgdmFsdWUgY2hhbmdpbmcgZnJvbSBhIGRlZmluZWQgdG8gJyArICd1bmRlZmluZWQsIHdoaWNoIHNob3VsZCBub3QgaGFwcGVuLiAnICsgJ0RlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJyk7XG5cbiAgICAgIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNoZWNrZWQoZWxlbWVudCwgcHJvcHMpO1xuICB2YXIgdmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKTtcbiAgdmFyIHR5cGUgPSBwcm9wcy50eXBlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAodmFsdWUgPT09IDAgJiYgbm9kZS52YWx1ZSA9PT0gJycgfHwgLy8gV2UgZXhwbGljaXRseSB3YW50IHRvIGNvZXJjZSB0byBudW1iZXIgaGVyZSBpZiBwb3NzaWJsZS5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgbm9kZS52YWx1ZSAhPSB2YWx1ZSkge1xuICAgICAgICBub2RlLnZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS52YWx1ZSAhPT0gdG9TdHJpbmcodmFsdWUpKSB7XG4gICAgICBub2RlLnZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSAnc3VibWl0JyB8fCB0eXBlID09PSAncmVzZXQnKSB7XG4gICAgLy8gU3VibWl0L3Jlc2V0IGlucHV0cyBuZWVkIHRoZSBhdHRyaWJ1dGUgcmVtb3ZlZCBjb21wbGV0ZWx5IHRvIGF2b2lkXG4gICAgLy8gYmxhbmstdGV4dCBidXR0b25zLlxuICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCd2YWx1ZScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgdGhlIHZhbHVlIGNvbWVzIGZyb20gYSBjYXNjYWRlIG9mXG4gICAgLy8gcHJvcGVydGllczpcbiAgICAvLyAgMS4gVGhlIHZhbHVlIFJlYWN0IHByb3BlcnR5XG4gICAgLy8gIDIuIFRoZSBkZWZhdWx0VmFsdWUgUmVhY3QgcHJvcGVydHlcbiAgICAvLyAgMy4gT3RoZXJ3aXNlIHRoZXJlIHNob3VsZCBiZSBubyBjaGFuZ2VcbiAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcbiAgICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCBwcm9wcy50eXBlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZhbHVlJykpIHtcbiAgICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCBwcm9wcy50eXBlLCBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLmRlZmF1bHRWYWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIGNoZWNrZWQgYXR0cmlidXRlLCBpdCBvbmx5IGNoYW5nZXMgd2hlbiBpdCBuZWVkc1xuICAgIC8vIHRvIGJlIHJlbW92ZWQsIHN1Y2ggYXMgdHJhbnNpdGlvbmluZyBmcm9tIGEgY2hlY2tib3ggaW50byBhIHRleHQgaW5wdXRcbiAgICBpZiAocHJvcHMuY2hlY2tlZCA9PSBudWxsICYmIHByb3BzLmRlZmF1bHRDaGVja2VkICE9IG51bGwpIHtcbiAgICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhIXByb3BzLmRlZmF1bHRDaGVja2VkO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlcihlbGVtZW50LCBwcm9wcywgaXNIeWRyYXRpbmcpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50OyAvLyBEbyBub3QgYXNzaWduIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgc2V0LiBUaGlzIHByZXZlbnRzIHVzZXIgdGV4dCBpbnB1dFxuICAvLyBmcm9tIGJlaW5nIGxvc3QgZHVyaW5nIFNTUiBoeWRyYXRpb24uXG5cbiAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCd2YWx1ZScpIHx8IHByb3BzLmhhc093blByb3BlcnR5KCdkZWZhdWx0VmFsdWUnKSkge1xuICAgIHZhciB0eXBlID0gcHJvcHMudHlwZTtcbiAgICB2YXIgaXNCdXR0b24gPSB0eXBlID09PSAnc3VibWl0JyB8fCB0eXBlID09PSAncmVzZXQnOyAvLyBBdm9pZCBzZXR0aW5nIHZhbHVlIGF0dHJpYnV0ZSBvbiBzdWJtaXQvcmVzZXQgaW5wdXRzIGFzIGl0IG92ZXJyaWRlcyB0aGVcbiAgICAvLyBkZWZhdWx0IHZhbHVlIHByb3ZpZGVkIGJ5IHRoZSBicm93c2VyLiBTZWU6ICMxMjg3MlxuXG4gICAgaWYgKGlzQnV0dG9uICYmIChwcm9wcy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLnZhbHVlID09PSBudWxsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbml0aWFsVmFsdWUgPSB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKTsgLy8gRG8gbm90IGFzc2lnbiB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IHNldC4gVGhpcyBwcmV2ZW50cyB1c2VyIHRleHQgaW5wdXRcbiAgICAvLyBmcm9tIGJlaW5nIGxvc3QgZHVyaW5nIFNTUiBoeWRyYXRpb24uXG5cbiAgICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgICB7XG4gICAgICAgIC8vIFdoZW4gc3luY2luZyB0aGUgdmFsdWUgYXR0cmlidXRlLCB0aGUgdmFsdWUgcHJvcGVydHkgc2hvdWxkIHVzZVxuICAgICAgICAvLyB0aGUgd3JhcHBlclN0YXRlLl9pbml0aWFsVmFsdWUgcHJvcGVydHkuIFRoaXMgdXNlczpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAxLiBUaGUgdmFsdWUgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgICAgIC8vICAgMi4gVGhlIGRlZmF1bHRWYWx1ZSBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAgICAgLy8gICAzLiBBbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgaWYgKGluaXRpYWxWYWx1ZSAhPT0gbm9kZS52YWx1ZSkge1xuICAgICAgICAgIG5vZGUudmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyBPdGhlcndpc2UsIHRoZSB2YWx1ZSBhdHRyaWJ1dGUgaXMgc3luY2hyb25pemVkIHRvIHRoZSBwcm9wZXJ0eSxcbiAgICAgIC8vIHNvIHdlIGFzc2lnbiBkZWZhdWx0VmFsdWUgdG8gdGhlIHNhbWUgdGhpbmcgYXMgdGhlIHZhbHVlIHByb3BlcnR5XG4gICAgICAvLyBhc3NpZ25tZW50IHN0ZXAgYWJvdmUuXG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICB9XG4gIH0gLy8gTm9ybWFsbHksIHdlJ2QganVzdCBkbyBgbm9kZS5jaGVja2VkID0gbm9kZS5jaGVja2VkYCB1cG9uIGluaXRpYWwgbW91bnQsIGxlc3MgdGhpcyBidWdcbiAgLy8gdGhpcyBpcyBuZWVkZWQgdG8gd29yayBhcm91bmQgYSBjaHJvbWUgYnVnIHdoZXJlIHNldHRpbmcgZGVmYXVsdENoZWNrZWRcbiAgLy8gd2lsbCBzb21ldGltZXMgaW5mbHVlbmNlIHRoZSB2YWx1ZSBvZiBjaGVja2VkIChldmVuIGFmdGVyIGRldGFjaG1lbnQpLlxuICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTYwODQxNlxuICAvLyBXZSBuZWVkIHRvIHRlbXBvcmFyaWx5IHVuc2V0IG5hbWUgdG8gYXZvaWQgZGlzcnVwdGluZyByYWRpbyBidXR0b24gZ3JvdXBzLlxuXG5cbiAgdmFyIG5hbWUgPSBub2RlLm5hbWU7XG5cbiAgaWYgKG5hbWUgIT09ICcnKSB7XG4gICAgbm9kZS5uYW1lID0gJyc7XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSwgYm90aCB0aGUgY2hlY2tlZCBwcm9wZXJ0eSBhbmRcbiAgICAvLyBhdHRyaWJ1dGUgYXJlIGFzc2lnbmVkIGF0IHRoZSBzYW1lIHRpbWUgdXNpbmcgZGVmYXVsdENoZWNrZWQuIFRoaXMgdXNlczpcbiAgICAvL1xuICAgIC8vICAgMS4gVGhlIGNoZWNrZWQgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgLy8gICAyLiBUaGUgZGVmYXVsdENoZWNrZWQgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgLy8gICAzLiBPdGhlcndpc2UsIGZhbHNlXG4gICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICFub2RlLmRlZmF1bHRDaGVja2VkO1xuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhIW5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZDtcbiAgfVxuXG4gIGlmIChuYW1lICE9PSAnJykge1xuICAgIG5vZGUubmFtZSA9IG5hbWU7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB1cGRhdGVXcmFwcGVyKG5vZGUsIHByb3BzKTtcbiAgdXBkYXRlTmFtZWRDb3VzaW5zKG5vZGUsIHByb3BzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTmFtZWRDb3VzaW5zKHJvb3ROb2RlLCBwcm9wcykge1xuICB2YXIgbmFtZSA9IHByb3BzLm5hbWU7XG5cbiAgaWYgKHByb3BzLnR5cGUgPT09ICdyYWRpbycgJiYgbmFtZSAhPSBudWxsKSB7XG4gICAgdmFyIHF1ZXJ5Um9vdCA9IHJvb3ROb2RlO1xuXG4gICAgd2hpbGUgKHF1ZXJ5Um9vdC5wYXJlbnROb2RlKSB7XG4gICAgICBxdWVyeVJvb3QgPSBxdWVyeVJvb3QucGFyZW50Tm9kZTtcbiAgICB9IC8vIElmIGByb290Tm9kZS5mb3JtYCB3YXMgbm9uLW51bGwsIHRoZW4gd2UgY291bGQgdHJ5IGBmb3JtLmVsZW1lbnRzYCxcbiAgICAvLyBidXQgdGhhdCBzb21ldGltZXMgYmVoYXZlcyBzdHJhbmdlbHkgaW4gSUU4LiBXZSBjb3VsZCBhbHNvIHRyeSB1c2luZ1xuICAgIC8vIGBmb3JtLmdldEVsZW1lbnRzQnlOYW1lYCwgYnV0IHRoYXQgd2lsbCBvbmx5IHJldHVybiBkaXJlY3QgY2hpbGRyZW5cbiAgICAvLyBhbmQgd29uJ3QgaW5jbHVkZSBpbnB1dHMgdGhhdCB1c2UgdGhlIEhUTUw1IGBmb3JtPWAgYXR0cmlidXRlLiBTaW5jZVxuICAgIC8vIHRoZSBpbnB1dCBtaWdodCBub3QgZXZlbiBiZSBpbiBhIGZvcm0uIEl0IG1pZ2h0IG5vdCBldmVuIGJlIGluIHRoZVxuICAgIC8vIGRvY3VtZW50LiBMZXQncyBqdXN0IHVzZSB0aGUgbG9jYWwgYHF1ZXJ5U2VsZWN0b3JBbGxgIHRvIGVuc3VyZSB3ZSBkb24ndFxuICAgIC8vIG1pc3MgYW55dGhpbmcuXG5cblxuICAgIHZhciBncm91cCA9IHF1ZXJ5Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPScgKyBKU09OLnN0cmluZ2lmeSgnJyArIG5hbWUpICsgJ11bdHlwZT1cInJhZGlvXCJdJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgb3RoZXJOb2RlID0gZ3JvdXBbaV07XG5cbiAgICAgIGlmIChvdGhlck5vZGUgPT09IHJvb3ROb2RlIHx8IG90aGVyTm9kZS5mb3JtICE9PSByb290Tm9kZS5mb3JtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgcmFkaW8gYnV0dG9ucyByZW5kZXJlZCBieSBkaWZmZXJlbnQgY29waWVzIG9mIFJlYWN0XG4gICAgICAvLyBhbmQgdGhlIHNhbWUgbmFtZSBhcmUgcmVuZGVyZWQgaW50byB0aGUgc2FtZSBmb3JtIChzYW1lIGFzICMxOTM5KS5cbiAgICAgIC8vIFRoYXQncyBwcm9iYWJseSBva2F5OyB3ZSBkb24ndCBzdXBwb3J0IGl0IGp1c3QgYXMgd2UgZG9uJ3Qgc3VwcG9ydFxuICAgICAgLy8gbWl4aW5nIFJlYWN0IHJhZGlvIGJ1dHRvbnMgd2l0aCBub24tUmVhY3Qgb25lcy5cblxuXG4gICAgICB2YXIgb3RoZXJQcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUob3RoZXJOb2RlKTtcblxuICAgICAgaWYgKCFvdGhlclByb3BzKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJSZWFjdERPTUlucHV0OiBNaXhpbmcgUmVhY3QgYW5kIG5vbi1SZWFjdCByYWRpbyBpbnB1dHMgd2l0aCB0aGUgc2FtZSBgbmFtZWAgaXMgbm90IHN1cHBvcnRlZC5cIiApO1xuICAgICAgICB9XG4gICAgICB9IC8vIFdlIG5lZWQgdXBkYXRlIHRoZSB0cmFja2VkIHZhbHVlIG9uIHRoZSBuYW1lZCBjb3VzaW4gc2luY2UgdGhlIHZhbHVlXG4gICAgICAvLyB3YXMgY2hhbmdlZCBidXQgdGhlIGlucHV0IHNhdyBubyBldmVudCBvciB2YWx1ZSBzZXRcblxuXG4gICAgICB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChvdGhlck5vZGUpOyAvLyBJZiB0aGlzIGlzIGEgY29udHJvbGxlZCByYWRpbyBidXR0b24gZ3JvdXAsIGZvcmNpbmcgdGhlIGlucHV0IHRoYXRcbiAgICAgIC8vIHdhcyBwcmV2aW91c2x5IGNoZWNrZWQgdG8gdXBkYXRlIHdpbGwgY2F1c2UgaXQgdG8gYmUgY29tZSByZS1jaGVja2VkXG4gICAgICAvLyBhcyBhcHByb3ByaWF0ZS5cblxuICAgICAgdXBkYXRlV3JhcHBlcihvdGhlck5vZGUsIG90aGVyUHJvcHMpO1xuICAgIH1cbiAgfVxufSAvLyBJbiBDaHJvbWUsIGFzc2lnbmluZyBkZWZhdWx0VmFsdWUgdG8gY2VydGFpbiBpbnB1dCB0eXBlcyB0cmlnZ2VycyBpbnB1dCB2YWxpZGF0aW9uLlxuLy8gRm9yIG51bWJlciBpbnB1dHMsIHRoZSBkaXNwbGF5IHZhbHVlIGxvc2VzIHRyYWlsaW5nIGRlY2ltYWwgcG9pbnRzLiBGb3IgZW1haWwgaW5wdXRzLFxuLy8gQ2hyb21lIHJhaXNlcyBcIlRoZSBzcGVjaWZpZWQgdmFsdWUgPHg+IGlzIG5vdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIi5cbi8vXG4vLyBIZXJlIHdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgZGVmYXVsdFZhbHVlIGhhcyBhY3R1YWxseSBjaGFuZ2VkLCBhdm9pZGluZyB0aGVzZSBwcm9ibGVtc1xuLy8gd2hlbiB0aGUgdXNlciBpcyBpbnB1dHRpbmcgdGV4dFxuLy9cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzI1M1xuXG5cbmZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZShub2RlLCB0eXBlLCB2YWx1ZSkge1xuICBpZiAoIC8vIEZvY3VzZWQgbnVtYmVyIGlucHV0cyBzeW5jaHJvbml6ZSBvbiBibHVyLiBTZWUgQ2hhbmdlRXZlbnRQbHVnaW4uanNcbiAgdHlwZSAhPT0gJ251bWJlcicgfHwgZ2V0QWN0aXZlRWxlbWVudChub2RlLm93bmVyRG9jdW1lbnQpICE9PSBub2RlKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChub2RlLmRlZmF1bHRWYWx1ZSAhPT0gdG9TdHJpbmcodmFsdWUpKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uID0gZmFsc2U7XG52YXIgZGlkV2FybkludmFsaWRDaGlsZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmbGF0dGVuQ2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgdmFyIGNvbnRlbnQgPSAnJzsgLy8gRmxhdHRlbiBjaGlsZHJlbi4gV2UnbGwgd2FybiBpZiB0aGV5IGFyZSBpbnZhbGlkXG4gIC8vIGR1cmluZyB2YWxpZGF0ZVByb3BzKCkgd2hpY2ggcnVucyBmb3IgaHlkcmF0aW9uIHRvby5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgd291bGQgdGhyb3cgb24gbm9uLWVsZW1lbnQgb2JqZWN0cy5cbiAgLy8gRWxlbWVudHMgYXJlIHN0cmluZ2lmaWVkICh3aGljaCBpcyBub3JtYWxseSBpcnJlbGV2YW50XG4gIC8vIGJ1dCBtYXR0ZXJzIGZvciA8ZmJ0PikuXG5cbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgaWYgKGNoaWxkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZW50ICs9IGNoaWxkOyAvLyBOb3RlOiB3ZSBkb24ndCB3YXJuIGFib3V0IGludmFsaWQgY2hpbGRyZW4gaGVyZS5cbiAgICAvLyBJbnN0ZWFkLCB0aGlzIGlzIGRvbmUgc2VwYXJhdGVseSBiZWxvdyBzbyB0aGF0XG4gICAgLy8gaXQgaGFwcGVucyBkdXJpbmcgdGhlIGh5ZHJhdGlvbiBjb2RlIHBhdGggdG9vLlxuICB9KTtcbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4vKipcbiAqIEltcGxlbWVudHMgYW4gPG9wdGlvbj4gaG9zdCBjb21wb25lbnQgdGhhdCB3YXJucyB3aGVuIGBzZWxlY3RlZGAgaXMgc2V0LlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhlbGVtZW50LCBwcm9wcykge1xuICB7XG4gICAgLy8gVGhpcyBtaXJyb3JzIHRoZSBjb2RlIHBhdGggYWJvdmUsIGJ1dCBydW5zIGZvciBoeWRyYXRpb24gdG9vLlxuICAgIC8vIFdhcm4gYWJvdXQgaW52YWxpZCBjaGlsZHJlbiBoZXJlIHNvIHRoYXQgY2xpZW50IGFuZCBoeWRyYXRpb24gYXJlIGNvbnNpc3RlbnQuXG4gICAgLy8gVE9ETzogdGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIGNhdXNlIGEgREVWLW9ubHkgdGhyb3cgZm9yIGh5ZHJhdGlvblxuICAgIC8vIGlmIGNoaWxkcmVuIGNvbnRhaW5zIGEgbm9uLWVsZW1lbnQgb2JqZWN0LiBXZSBzaG91bGQgdHJ5IHRvIGF2b2lkIHRoYXQuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ29iamVjdCcgJiYgcHJvcHMuY2hpbGRyZW4gIT09IG51bGwpIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2gocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICBpZiAoY2hpbGQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkLnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaWRXYXJuSW52YWxpZENoaWxkKSB7XG4gICAgICAgICAgZGlkV2FybkludmFsaWRDaGlsZCA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignT25seSBzdHJpbmdzIGFuZCBudW1iZXJzIGFyZSBzdXBwb3J0ZWQgYXMgPG9wdGlvbj4gY2hpbGRyZW4uJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gLy8gVE9ETzogUmVtb3ZlIHN1cHBvcnQgZm9yIGBzZWxlY3RlZGAgaW4gPG9wdGlvbj4uXG5cblxuICAgIGlmIChwcm9wcy5zZWxlY3RlZCAhPSBudWxsICYmICFkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbikge1xuICAgICAgZXJyb3IoJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBvbiA8c2VsZWN0PiBpbnN0ZWFkIG9mICcgKyAnc2V0dGluZyBgc2VsZWN0ZWRgIG9uIDxvcHRpb24+LicpO1xuXG4gICAgICBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9IHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgLy8gdmFsdWU9XCJcIiBzaG91bGQgbWFrZSBhIHZhbHVlIGF0dHJpYnV0ZSAoIzYyMTkpXG4gIGlmIChwcm9wcy52YWx1ZSAhPSBudWxsKSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgdG9TdHJpbmcoZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSkpKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIGhvc3RQcm9wcyA9IF9hc3NpZ24oe1xuICAgIGNoaWxkcmVuOiB1bmRlZmluZWRcbiAgfSwgcHJvcHMpO1xuXG4gIHZhciBjb250ZW50ID0gZmxhdHRlbkNoaWxkcmVuKHByb3BzLmNoaWxkcmVuKTtcblxuICBpZiAoY29udGVudCkge1xuICAgIGhvc3RQcm9wcy5jaGlsZHJlbiA9IGNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gaG9zdFByb3BzO1xufVxuXG52YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDE7XG5cbntcbiAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcblxuICBpZiAob3duZXJOYW1lKSB7XG4gICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbnZhciB2YWx1ZVByb3BOYW1lcyA9IFsndmFsdWUnLCAnZGVmYXVsdFZhbHVlJ107XG4vKipcbiAqIFZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICovXG5cbmZ1bmN0aW9uIGNoZWNrU2VsZWN0UHJvcFR5cGVzKHByb3BzKSB7XG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCdzZWxlY3QnLCBwcm9wcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlUHJvcE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcE5hbWUgPSB2YWx1ZVByb3BOYW1lc1tpXTtcblxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkocHJvcHNbcHJvcE5hbWVdKTtcblxuICAgICAgaWYgKHByb3BzLm11bHRpcGxlICYmICFpc0FycmF5KSB7XG4gICAgICAgIGVycm9yKCdUaGUgYCVzYCBwcm9wIHN1cHBsaWVkIHRvIDxzZWxlY3Q+IG11c3QgYmUgYW4gYXJyYXkgaWYgJyArICdgbXVsdGlwbGVgIGlzIHRydWUuJXMnLCBwcm9wTmFtZSwgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkpO1xuICAgICAgfSBlbHNlIGlmICghcHJvcHMubXVsdGlwbGUgJiYgaXNBcnJheSkge1xuICAgICAgICBlcnJvcignVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGEgc2NhbGFyICcgKyAndmFsdWUgaWYgYG11bHRpcGxlYCBpcyBmYWxzZS4lcycsIHByb3BOYW1lLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMobm9kZSwgbXVsdGlwbGUsIHByb3BWYWx1ZSwgc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gIHZhciBvcHRpb25zID0gbm9kZS5vcHRpb25zO1xuXG4gIGlmIChtdWx0aXBsZSkge1xuICAgIHZhciBzZWxlY3RlZFZhbHVlcyA9IHByb3BWYWx1ZTtcbiAgICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IHt9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gUHJlZml4IHRvIGF2b2lkIGNoYW9zIHdpdGggc3BlY2lhbCBrZXlzLlxuICAgICAgc2VsZWN0ZWRWYWx1ZVsnJCcgKyBzZWxlY3RlZFZhbHVlc1tpXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBvcHRpb25zLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIHNlbGVjdGVkID0gc2VsZWN0ZWRWYWx1ZS5oYXNPd25Qcm9wZXJ0eSgnJCcgKyBvcHRpb25zW19pXS52YWx1ZSk7XG5cbiAgICAgIGlmIChvcHRpb25zW19pXS5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uc1tfaV0uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdGVkICYmIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25zW19pXS5kZWZhdWx0U2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBEbyBub3Qgc2V0IGBzZWxlY3QudmFsdWVgIGFzIGV4YWN0IGJlaGF2aW9yIGlzbid0IGNvbnNpc3RlbnQgYWNyb3NzIGFsbFxuICAgIC8vIGJyb3dzZXJzIGZvciBhbGwgY2FzZXMuXG4gICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gdG9TdHJpbmcoZ2V0VG9TdHJpbmdWYWx1ZShwcm9wVmFsdWUpKTtcblxuICAgIHZhciBkZWZhdWx0U2VsZWN0ZWQgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgb3B0aW9ucy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICBpZiAob3B0aW9uc1tfaTJdLnZhbHVlID09PSBfc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBvcHRpb25zW19pMl0uc2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmIChzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgICAgICBvcHRpb25zW19pMl0uZGVmYXVsdFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRTZWxlY3RlZCA9PT0gbnVsbCAmJiAhb3B0aW9uc1tfaTJdLmRpc2FibGVkKSB7XG4gICAgICAgIGRlZmF1bHRTZWxlY3RlZCA9IG9wdGlvbnNbX2kyXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmYXVsdFNlbGVjdGVkICE9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0U2VsZWN0ZWQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgPHNlbGVjdD4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgb3B0aW9uYWxseSBzZXR0aW5nIHRoZVxuICogcHJvcHMgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuIElmIGBtdWx0aXBsZWAgaXMgZmFsc2UsIHRoZSBwcm9wIG11c3QgYmUgYVxuICogc3RyaW5nYWJsZS4gSWYgYG11bHRpcGxlYCBpcyB0cnVlLCB0aGUgcHJvcCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ2FibGVzLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGNoYW5nZSB0aGVcbiAqIHNlbGVjdGVkIG9wdGlvbiB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAqXG4gKiBJZiBpdCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBvcHRpb25zIHdpbGwgbm90XG4gKiB1cGRhdGUgaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb25zLiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIG9wdGlvbnMgdG8gdXBkYXRlLlxuICpcbiAqIElmIGBkZWZhdWx0VmFsdWVgIGlzIHByb3ZpZGVkLCBhbnkgb3B0aW9ucyB3aXRoIHRoZSBzdXBwbGllZCB2YWx1ZXMgd2lsbCBiZVxuICogc2VsZWN0ZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMkMihlbGVtZW50LCBwcm9wcykge1xuICByZXR1cm4gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICB2YWx1ZTogdW5kZWZpbmVkXG4gIH0pO1xufVxuZnVuY3Rpb24gaW5pdFdyYXBwZXJTdGF0ZSQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgY2hlY2tTZWxlY3RQcm9wVHlwZXMocHJvcHMpO1xuICB9XG5cbiAgbm9kZS5fd3JhcHBlclN0YXRlID0ge1xuICAgIHdhc011bHRpcGxlOiAhIXByb3BzLm11bHRpcGxlXG4gIH07XG5cbiAge1xuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSkge1xuICAgICAgZXJyb3IoJ1NlbGVjdCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgc2VsZWN0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgbm9kZS5tdWx0aXBsZSA9ICEhcHJvcHMubXVsdGlwbGU7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5kZWZhdWx0VmFsdWUsIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBwb3N0VXBkYXRlV3JhcHBlcihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB3YXNNdWx0aXBsZSA9IG5vZGUuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZTtcbiAgbm9kZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlID0gISFwcm9wcy5tdWx0aXBsZTtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH0gZWxzZSBpZiAod2FzTXVsdGlwbGUgIT09ICEhcHJvcHMubXVsdGlwbGUpIHtcbiAgICAvLyBGb3Igc2ltcGxpY2l0eSwgcmVhcHBseSBgZGVmYXVsdFZhbHVlYCBpZiBgbXVsdGlwbGVgIGlzIHRvZ2dsZWQuXG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLmRlZmF1bHRWYWx1ZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJldmVydCB0aGUgc2VsZWN0IGJhY2sgdG8gaXRzIGRlZmF1bHQgdW5zZWxlY3RlZCBzdGF0ZS5cbiAgICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMubXVsdGlwbGUgPyBbXSA6ICcnLCBmYWxzZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfVxufVxuXG52YXIgZGlkV2FyblZhbERlZmF1bHRWYWwgPSBmYWxzZTtcblxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgPHRleHRhcmVhPiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBzZXR0aW5nIGB2YWx1ZWAsIGFuZFxuICogYGRlZmF1bHRWYWx1ZWAuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSB0cmFkaXRpb25hbCBET00gQVBJIGJlY2F1c2UgdmFsdWUgaXNcbiAqIHVzdWFsbHkgc2V0IGFzIFBDREFUQSBjaGlsZHJlbi5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBhZmZlY3QgdGhlXG4gKiB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbFxuICogbm90IHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4gKlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIGFuIGVtcHR5IHZhbHVlLCB0aGUgcHJvcFxuICogYGRlZmF1bHRWYWx1ZWAgaWYgc3BlY2lmaWVkLCBvciB0aGUgY2hpbGRyZW4gY29udGVudCAoZGVwcmVjYXRlZCkuXG4gKi9cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICBpZiAoIShwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcImBkYW5nZXJvdXNseVNldElubmVySFRNTGAgZG9lcyBub3QgbWFrZSBzZW5zZSBvbiA8dGV4dGFyZWE+LlwiICk7XG4gICAgfVxuICB9IC8vIEFsd2F5cyBzZXQgY2hpbGRyZW4gdG8gdGhlIHNhbWUgdGhpbmcuIEluIElFOSwgdGhlIHNlbGVjdGlvbiByYW5nZSB3aWxsXG4gIC8vIGdldCByZXNldCBpZiBgdGV4dENvbnRlbnRgIGlzIG11dGF0ZWQuICBXZSBjb3VsZCBhZGQgYSBjaGVjayBpbiBzZXRUZXh0Q29udGVudFxuICAvLyB0byBvbmx5IHNldCB0aGUgdmFsdWUgaWYvd2hlbiB0aGUgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBub2RlIHZhbHVlICh3aGljaCB3b3VsZFxuICAvLyBjb21wbGV0ZWx5IHNvbHZlIHRoaXMgSUU5IGJ1ZyksIGJ1dCBTZWJhc3RpYW4rU29waGllIHNlZW1lZCB0byBsaWtlIHRoaXNcbiAgLy8gc29sdXRpb24uIFRoZSB2YWx1ZSBjYW4gYmUgYSBib29sZWFuIG9yIG9iamVjdCBzbyB0aGF0J3Mgd2h5IGl0J3MgZm9yY2VkXG4gIC8vIHRvIGJlIGEgc3RyaW5nLlxuXG5cbiAgdmFyIGhvc3RQcm9wcyA9IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICBjaGlsZHJlbjogdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSlcbiAgfSk7XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUkMihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAge1xuICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoJ3RleHRhcmVhJywgcHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWxEZWZhdWx0VmFsKSB7XG4gICAgICBlcnJvcignJXMgY29udGFpbnMgYSB0ZXh0YXJlYSB3aXRoIGJvdGggdmFsdWUgYW5kIGRlZmF1bHRWYWx1ZSBwcm9wcy4gJyArICdUZXh0YXJlYSBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgdGV4dGFyZWEgJyArICdhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcpO1xuXG4gICAgICBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluaXRpYWxWYWx1ZSA9IHByb3BzLnZhbHVlOyAvLyBPbmx5IGJvdGhlciBmZXRjaGluZyBkZWZhdWx0IHZhbHVlIGlmIHdlJ3JlIGdvaW5nIHRvIHVzZSBpdFxuXG4gIGlmIChpbml0aWFsVmFsdWUgPT0gbnVsbCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWU7XG5cbiAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICBlcnJvcignVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIGluc3RlYWQgb2Ygc2V0dGluZyAnICsgJ2NoaWxkcmVuIG9uIDx0ZXh0YXJlYT4uJyk7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKCEoZGVmYXVsdFZhbHVlID09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiSWYgeW91IHN1cHBseSBgZGVmYXVsdFZhbHVlYCBvbiBhIDx0ZXh0YXJlYT4sIGRvIG5vdCBwYXNzIGNoaWxkcmVuLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgaWYgKCEoY2hpbGRyZW4ubGVuZ3RoIDw9IDEpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIjx0ZXh0YXJlYT4gY2FuIG9ubHkgaGF2ZSBhdCBtb3N0IG9uZSBjaGlsZC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW5bMF07XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBjaGlsZHJlbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlID09IG51bGwpIHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIGluaXRpYWxWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIG5vZGUuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICBpbml0aWFsVmFsdWU6IGdldFRvU3RyaW5nVmFsdWUoaW5pdGlhbFZhbHVlKVxuICB9O1xufVxuZnVuY3Rpb24gdXBkYXRlV3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSk7XG4gIHZhciBkZWZhdWx0VmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLmRlZmF1bHRWYWx1ZSk7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAvLyBDYXN0IGB2YWx1ZWAgdG8gYSBzdHJpbmcgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyBzZXQgY29ycmVjdGx5LiBXaGlsZVxuICAgIC8vIGJyb3dzZXJzIHR5cGljYWxseSBkbyB0aGlzIGFzIG5lY2Vzc2FyeSwganNkb20gZG9lc24ndC5cbiAgICB2YXIgbmV3VmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7IC8vIFRvIGF2b2lkIHNpZGUgZWZmZWN0cyAoc3VjaCBhcyBsb3NpbmcgdGV4dCBzZWxlY3Rpb24pLCBvbmx5IHNldCB2YWx1ZSBpZiBjaGFuZ2VkXG5cbiAgICBpZiAobmV3VmFsdWUgIT09IG5vZGUudmFsdWUpIHtcbiAgICAgIG5vZGUudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlID09IG51bGwgJiYgbm9kZS5kZWZhdWx0VmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcoZGVmYXVsdFZhbHVlKTtcbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDsgLy8gVGhpcyBpcyBpbiBwb3N0TW91bnQgYmVjYXVzZSB3ZSBuZWVkIGFjY2VzcyB0byB0aGUgRE9NIG5vZGUsIHdoaWNoIGlzIG5vdFxuICAvLyBhdmFpbGFibGUgdW50aWwgYWZ0ZXIgdGhlIGNvbXBvbmVudCBoYXMgbW91bnRlZC5cblxuICB2YXIgdGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50OyAvLyBPbmx5IHNldCBub2RlLnZhbHVlIGlmIHRleHRDb250ZW50IGlzIGVxdWFsIHRvIHRoZSBleHBlY3RlZFxuICAvLyBpbml0aWFsIHZhbHVlLiBJbiBJRTEwL0lFMTEgdGhlcmUgaXMgYSBidWcgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIGF0dHJpYnV0ZVxuICAvLyB3aWxsIHBvcHVsYXRlIHRleHRDb250ZW50IGFzIHdlbGwuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vbWljcm9zb2Z0LWVkZ2UvcGxhdGZvcm0vaXNzdWVzLzEwMTUyNS9cblxuICBpZiAodGV4dENvbnRlbnQgPT09IG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpIHtcbiAgICBpZiAodGV4dENvbnRlbnQgIT09ICcnICYmIHRleHRDb250ZW50ICE9PSBudWxsKSB7XG4gICAgICBub2RlLnZhbHVlID0gdGV4dENvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgLy8gRE9NIGNvbXBvbmVudCBpcyBzdGlsbCBtb3VudGVkOyB1cGRhdGVcbiAgdXBkYXRlV3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKTtcbn1cblxudmFyIEhUTUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnO1xudmFyIE1BVEhfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnO1xudmFyIFNWR19OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xudmFyIE5hbWVzcGFjZXMgPSB7XG4gIGh0bWw6IEhUTUxfTkFNRVNQQUNFLFxuICBtYXRobWw6IE1BVEhfTkFNRVNQQUNFLFxuICBzdmc6IFNWR19OQU1FU1BBQ0Vcbn07IC8vIEFzc3VtZXMgdGhlcmUgaXMgbm8gcGFyZW50IG5hbWVzcGFjZS5cblxuZnVuY3Rpb24gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnc3ZnJzpcbiAgICAgIHJldHVybiBTVkdfTkFNRVNQQUNFO1xuXG4gICAgY2FzZSAnbWF0aCc6XG4gICAgICByZXR1cm4gTUFUSF9OQU1FU1BBQ0U7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIEhUTUxfTkFNRVNQQUNFO1xuICB9XG59XG5mdW5jdGlvbiBnZXRDaGlsZE5hbWVzcGFjZShwYXJlbnROYW1lc3BhY2UsIHR5cGUpIHtcbiAgaWYgKHBhcmVudE5hbWVzcGFjZSA9PSBudWxsIHx8IHBhcmVudE5hbWVzcGFjZSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAvLyBObyAob3IgZGVmYXVsdCkgcGFyZW50IG5hbWVzcGFjZTogcG90ZW50aWFsIGVudHJ5IHBvaW50LlxuICAgIHJldHVybiBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodHlwZSk7XG4gIH1cblxuICBpZiAocGFyZW50TmFtZXNwYWNlID09PSBTVkdfTkFNRVNQQUNFICYmIHR5cGUgPT09ICdmb3JlaWduT2JqZWN0Jykge1xuICAgIC8vIFdlJ3JlIGxlYXZpbmcgU1ZHLlxuICAgIHJldHVybiBIVE1MX05BTUVTUEFDRTtcbiAgfSAvLyBCeSBkZWZhdWx0LCBwYXNzIG5hbWVzcGFjZSBiZWxvdy5cblxuXG4gIHJldHVybiBwYXJlbnROYW1lc3BhY2U7XG59XG5cbi8qIGdsb2JhbHMgTVNBcHAgKi9cblxuLyoqXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB3aGljaCBoYXMgJ3Vuc2FmZScgcHJpdmlsZWdlcyAocmVxdWlyZWQgYnkgd2luZG93czggYXBwcylcbiAqL1xudmFyIGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYykge1xuICBpZiAodHlwZW9mIE1TQXBwICE9PSAndW5kZWZpbmVkJyAmJiBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZnVuYyhhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH1cbn07XG5cbnZhciByZXVzYWJsZVNWR0NvbnRhaW5lcjtcbi8qKlxuICogU2V0IHRoZSBpbm5lckhUTUwgcHJvcGVydHkgb2YgYSBub2RlXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxuICogQGludGVybmFsXG4gKi9cblxudmFyIHNldElubmVySFRNTCA9IGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKG5vZGUsIGh0bWwpIHtcbiAgaWYgKG5vZGUubmFtZXNwYWNlVVJJID09PSBOYW1lc3BhY2VzLnN2Zykge1xuXG4gICAgaWYgKCEoJ2lubmVySFRNTCcgaW4gbm9kZSkpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgaW5uZXJIVE1MIGZvciBTVkcgbm9kZXMsIHNvIGluc3RlYWQgd2UgaW5qZWN0IHRoZVxuICAgICAgLy8gbmV3IG1hcmt1cCBpbiBhIHRlbXAgbm9kZSBhbmQgdGhlbiBtb3ZlIHRoZSBjaGlsZCBub2RlcyBhY3Jvc3MgaW50b1xuICAgICAgLy8gdGhlIHRhcmdldCBub2RlXG4gICAgICByZXVzYWJsZVNWR0NvbnRhaW5lciA9IHJldXNhYmxlU1ZHQ29udGFpbmVyIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgcmV1c2FibGVTVkdDb250YWluZXIuaW5uZXJIVE1MID0gJzxzdmc+JyArIGh0bWwudmFsdWVPZigpLnRvU3RyaW5nKCkgKyAnPC9zdmc+JztcbiAgICAgIHZhciBzdmdOb2RlID0gcmV1c2FibGVTVkdDb250YWluZXIuZmlyc3RDaGlsZDtcblxuICAgICAgd2hpbGUgKG5vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChzdmdOb2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChzdmdOb2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgbm9kZS5pbm5lckhUTUwgPSBodG1sO1xufSk7XG5cbi8qKlxuICogSFRNTCBub2RlVHlwZSB2YWx1ZXMgdGhhdCByZXByZXNlbnQgdGhlIHR5cGUgb2YgdGhlIG5vZGVcbiAqL1xudmFyIEVMRU1FTlRfTk9ERSA9IDE7XG52YXIgVEVYVF9OT0RFID0gMztcbnZhciBDT01NRU5UX05PREUgPSA4O1xudmFyIERPQ1VNRU5UX05PREUgPSA5O1xudmFyIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgPSAxMTtcblxuLyoqXG4gKiBTZXQgdGhlIHRleHRDb250ZW50IHByb3BlcnR5IG9mIGEgbm9kZS4gRm9yIHRleHQgdXBkYXRlcywgaXQncyBmYXN0ZXJcbiAqIHRvIHNldCB0aGUgYG5vZGVWYWx1ZWAgb2YgdGhlIFRleHQgbm9kZSBkaXJlY3RseSBpbnN0ZWFkIG9mIHVzaW5nXG4gKiBgLnRleHRDb250ZW50YCB3aGljaCB3aWxsIHJlbW92ZSB0aGUgZXhpc3Rpbmcgbm9kZSBhbmQgY3JlYXRlIGEgbmV3IG9uZS5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAaW50ZXJuYWxcbiAqL1xuXG52YXIgc2V0VGV4dENvbnRlbnQgPSBmdW5jdGlvbiAobm9kZSwgdGV4dCkge1xuICBpZiAodGV4dCkge1xuICAgIHZhciBmaXJzdENoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuXG4gICAgaWYgKGZpcnN0Q2hpbGQgJiYgZmlyc3RDaGlsZCA9PT0gbm9kZS5sYXN0Q2hpbGQgJiYgZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICBmaXJzdENoaWxkLm5vZGVWYWx1ZSA9IHRleHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XG59O1xuXG4vLyBMaXN0IGRlcml2ZWQgZnJvbSBHZWNrbyBzb3VyY2UgY29kZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2dlY2tvLWRldi9ibG9iLzRlNjM4ZWZjNzEvbGF5b3V0L3N0eWxlL3Rlc3QvcHJvcGVydHlfZGF0YWJhc2UuanNcbnZhciBzaG9ydGhhbmRUb0xvbmdoYW5kID0ge1xuICBhbmltYXRpb246IFsnYW5pbWF0aW9uRGVsYXknLCAnYW5pbWF0aW9uRGlyZWN0aW9uJywgJ2FuaW1hdGlvbkR1cmF0aW9uJywgJ2FuaW1hdGlvbkZpbGxNb2RlJywgJ2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50JywgJ2FuaW1hdGlvbk5hbWUnLCAnYW5pbWF0aW9uUGxheVN0YXRlJywgJ2FuaW1hdGlvblRpbWluZ0Z1bmN0aW9uJ10sXG4gIGJhY2tncm91bmQ6IFsnYmFja2dyb3VuZEF0dGFjaG1lbnQnLCAnYmFja2dyb3VuZENsaXAnLCAnYmFja2dyb3VuZENvbG9yJywgJ2JhY2tncm91bmRJbWFnZScsICdiYWNrZ3JvdW5kT3JpZ2luJywgJ2JhY2tncm91bmRQb3NpdGlvblgnLCAnYmFja2dyb3VuZFBvc2l0aW9uWScsICdiYWNrZ3JvdW5kUmVwZWF0JywgJ2JhY2tncm91bmRTaXplJ10sXG4gIGJhY2tncm91bmRQb3NpdGlvbjogWydiYWNrZ3JvdW5kUG9zaXRpb25YJywgJ2JhY2tncm91bmRQb3NpdGlvblknXSxcbiAgYm9yZGVyOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckJvdHRvbVdpZHRoJywgJ2JvcmRlckltYWdlT3V0c2V0JywgJ2JvcmRlckltYWdlUmVwZWF0JywgJ2JvcmRlckltYWdlU2xpY2UnLCAnYm9yZGVySW1hZ2VTb3VyY2UnLCAnYm9yZGVySW1hZ2VXaWR0aCcsICdib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclJpZ2h0U3R5bGUnLCAnYm9yZGVyUmlnaHRXaWR0aCcsICdib3JkZXJUb3BDb2xvcicsICdib3JkZXJUb3BTdHlsZScsICdib3JkZXJUb3BXaWR0aCddLFxuICBib3JkZXJCbG9ja0VuZDogWydib3JkZXJCbG9ja0VuZENvbG9yJywgJ2JvcmRlckJsb2NrRW5kU3R5bGUnLCAnYm9yZGVyQmxvY2tFbmRXaWR0aCddLFxuICBib3JkZXJCbG9ja1N0YXJ0OiBbJ2JvcmRlckJsb2NrU3RhcnRDb2xvcicsICdib3JkZXJCbG9ja1N0YXJ0U3R5bGUnLCAnYm9yZGVyQmxvY2tTdGFydFdpZHRoJ10sXG4gIGJvcmRlckJvdHRvbTogWydib3JkZXJCb3R0b21Db2xvcicsICdib3JkZXJCb3R0b21TdHlsZScsICdib3JkZXJCb3R0b21XaWR0aCddLFxuICBib3JkZXJDb2xvcjogWydib3JkZXJCb3R0b21Db2xvcicsICdib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJUb3BDb2xvciddLFxuICBib3JkZXJJbWFnZTogWydib3JkZXJJbWFnZU91dHNldCcsICdib3JkZXJJbWFnZVJlcGVhdCcsICdib3JkZXJJbWFnZVNsaWNlJywgJ2JvcmRlckltYWdlU291cmNlJywgJ2JvcmRlckltYWdlV2lkdGgnXSxcbiAgYm9yZGVySW5saW5lRW5kOiBbJ2JvcmRlcklubGluZUVuZENvbG9yJywgJ2JvcmRlcklubGluZUVuZFN0eWxlJywgJ2JvcmRlcklubGluZUVuZFdpZHRoJ10sXG4gIGJvcmRlcklubGluZVN0YXJ0OiBbJ2JvcmRlcklubGluZVN0YXJ0Q29sb3InLCAnYm9yZGVySW5saW5lU3RhcnRTdHlsZScsICdib3JkZXJJbmxpbmVTdGFydFdpZHRoJ10sXG4gIGJvcmRlckxlZnQ6IFsnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJMZWZ0V2lkdGgnXSxcbiAgYm9yZGVyUmFkaXVzOiBbJ2JvcmRlckJvdHRvbUxlZnRSYWRpdXMnLCAnYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMnLCAnYm9yZGVyVG9wTGVmdFJhZGl1cycsICdib3JkZXJUb3BSaWdodFJhZGl1cyddLFxuICBib3JkZXJSaWdodDogWydib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclJpZ2h0U3R5bGUnLCAnYm9yZGVyUmlnaHRXaWR0aCddLFxuICBib3JkZXJTdHlsZTogWydib3JkZXJCb3R0b21TdHlsZScsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJUb3BTdHlsZSddLFxuICBib3JkZXJUb3A6IFsnYm9yZGVyVG9wQ29sb3InLCAnYm9yZGVyVG9wU3R5bGUnLCAnYm9yZGVyVG9wV2lkdGgnXSxcbiAgYm9yZGVyV2lkdGg6IFsnYm9yZGVyQm90dG9tV2lkdGgnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0V2lkdGgnLCAnYm9yZGVyVG9wV2lkdGgnXSxcbiAgY29sdW1uUnVsZTogWydjb2x1bW5SdWxlQ29sb3InLCAnY29sdW1uUnVsZVN0eWxlJywgJ2NvbHVtblJ1bGVXaWR0aCddLFxuICBjb2x1bW5zOiBbJ2NvbHVtbkNvdW50JywgJ2NvbHVtbldpZHRoJ10sXG4gIGZsZXg6IFsnZmxleEJhc2lzJywgJ2ZsZXhHcm93JywgJ2ZsZXhTaHJpbmsnXSxcbiAgZmxleEZsb3c6IFsnZmxleERpcmVjdGlvbicsICdmbGV4V3JhcCddLFxuICBmb250OiBbJ2ZvbnRGYW1pbHknLCAnZm9udEZlYXR1cmVTZXR0aW5ncycsICdmb250S2VybmluZycsICdmb250TGFuZ3VhZ2VPdmVycmlkZScsICdmb250U2l6ZScsICdmb250U2l6ZUFkanVzdCcsICdmb250U3RyZXRjaCcsICdmb250U3R5bGUnLCAnZm9udFZhcmlhbnQnLCAnZm9udFZhcmlhbnRBbHRlcm5hdGVzJywgJ2ZvbnRWYXJpYW50Q2FwcycsICdmb250VmFyaWFudEVhc3RBc2lhbicsICdmb250VmFyaWFudExpZ2F0dXJlcycsICdmb250VmFyaWFudE51bWVyaWMnLCAnZm9udFZhcmlhbnRQb3NpdGlvbicsICdmb250V2VpZ2h0JywgJ2xpbmVIZWlnaHQnXSxcbiAgZm9udFZhcmlhbnQ6IFsnZm9udFZhcmlhbnRBbHRlcm5hdGVzJywgJ2ZvbnRWYXJpYW50Q2FwcycsICdmb250VmFyaWFudEVhc3RBc2lhbicsICdmb250VmFyaWFudExpZ2F0dXJlcycsICdmb250VmFyaWFudE51bWVyaWMnLCAnZm9udFZhcmlhbnRQb3NpdGlvbiddLFxuICBnYXA6IFsnY29sdW1uR2FwJywgJ3Jvd0dhcCddLFxuICBncmlkOiBbJ2dyaWRBdXRvQ29sdW1ucycsICdncmlkQXV0b0Zsb3cnLCAnZ3JpZEF1dG9Sb3dzJywgJ2dyaWRUZW1wbGF0ZUFyZWFzJywgJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnLCAnZ3JpZFRlbXBsYXRlUm93cyddLFxuICBncmlkQXJlYTogWydncmlkQ29sdW1uRW5kJywgJ2dyaWRDb2x1bW5TdGFydCcsICdncmlkUm93RW5kJywgJ2dyaWRSb3dTdGFydCddLFxuICBncmlkQ29sdW1uOiBbJ2dyaWRDb2x1bW5FbmQnLCAnZ3JpZENvbHVtblN0YXJ0J10sXG4gIGdyaWRDb2x1bW5HYXA6IFsnY29sdW1uR2FwJ10sXG4gIGdyaWRHYXA6IFsnY29sdW1uR2FwJywgJ3Jvd0dhcCddLFxuICBncmlkUm93OiBbJ2dyaWRSb3dFbmQnLCAnZ3JpZFJvd1N0YXJ0J10sXG4gIGdyaWRSb3dHYXA6IFsncm93R2FwJ10sXG4gIGdyaWRUZW1wbGF0ZTogWydncmlkVGVtcGxhdGVBcmVhcycsICdncmlkVGVtcGxhdGVDb2x1bW5zJywgJ2dyaWRUZW1wbGF0ZVJvd3MnXSxcbiAgbGlzdFN0eWxlOiBbJ2xpc3RTdHlsZUltYWdlJywgJ2xpc3RTdHlsZVBvc2l0aW9uJywgJ2xpc3RTdHlsZVR5cGUnXSxcbiAgbWFyZ2luOiBbJ21hcmdpbkJvdHRvbScsICdtYXJnaW5MZWZ0JywgJ21hcmdpblJpZ2h0JywgJ21hcmdpblRvcCddLFxuICBtYXJrZXI6IFsnbWFya2VyRW5kJywgJ21hcmtlck1pZCcsICdtYXJrZXJTdGFydCddLFxuICBtYXNrOiBbJ21hc2tDbGlwJywgJ21hc2tDb21wb3NpdGUnLCAnbWFza0ltYWdlJywgJ21hc2tNb2RlJywgJ21hc2tPcmlnaW4nLCAnbWFza1Bvc2l0aW9uWCcsICdtYXNrUG9zaXRpb25ZJywgJ21hc2tSZXBlYXQnLCAnbWFza1NpemUnXSxcbiAgbWFza1Bvc2l0aW9uOiBbJ21hc2tQb3NpdGlvblgnLCAnbWFza1Bvc2l0aW9uWSddLFxuICBvdXRsaW5lOiBbJ291dGxpbmVDb2xvcicsICdvdXRsaW5lU3R5bGUnLCAnb3V0bGluZVdpZHRoJ10sXG4gIG92ZXJmbG93OiBbJ292ZXJmbG93WCcsICdvdmVyZmxvd1knXSxcbiAgcGFkZGluZzogWydwYWRkaW5nQm90dG9tJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCcsICdwYWRkaW5nVG9wJ10sXG4gIHBsYWNlQ29udGVudDogWydhbGlnbkNvbnRlbnQnLCAnanVzdGlmeUNvbnRlbnQnXSxcbiAgcGxhY2VJdGVtczogWydhbGlnbkl0ZW1zJywgJ2p1c3RpZnlJdGVtcyddLFxuICBwbGFjZVNlbGY6IFsnYWxpZ25TZWxmJywgJ2p1c3RpZnlTZWxmJ10sXG4gIHRleHREZWNvcmF0aW9uOiBbJ3RleHREZWNvcmF0aW9uQ29sb3InLCAndGV4dERlY29yYXRpb25MaW5lJywgJ3RleHREZWNvcmF0aW9uU3R5bGUnXSxcbiAgdGV4dEVtcGhhc2lzOiBbJ3RleHRFbXBoYXNpc0NvbG9yJywgJ3RleHRFbXBoYXNpc1N0eWxlJ10sXG4gIHRyYW5zaXRpb246IFsndHJhbnNpdGlvbkRlbGF5JywgJ3RyYW5zaXRpb25EdXJhdGlvbicsICd0cmFuc2l0aW9uUHJvcGVydHknLCAndHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uJ10sXG4gIHdvcmRXcmFwOiBbJ292ZXJmbG93V3JhcCddXG59O1xuXG4vKipcbiAqIENTUyBwcm9wZXJ0aWVzIHdoaWNoIGFjY2VwdCBudW1iZXJzIGJ1dCBhcmUgbm90IGluIHVuaXRzIG9mIFwicHhcIi5cbiAqL1xudmFyIGlzVW5pdGxlc3NOdW1iZXIgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiB0cnVlLFxuICBib3JkZXJJbWFnZU91dHNldDogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VTbGljZTogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogdHJ1ZSxcbiAgYm94RmxleDogdHJ1ZSxcbiAgYm94RmxleEdyb3VwOiB0cnVlLFxuICBib3hPcmRpbmFsR3JvdXA6IHRydWUsXG4gIGNvbHVtbkNvdW50OiB0cnVlLFxuICBjb2x1bW5zOiB0cnVlLFxuICBmbGV4OiB0cnVlLFxuICBmbGV4R3JvdzogdHJ1ZSxcbiAgZmxleFBvc2l0aXZlOiB0cnVlLFxuICBmbGV4U2hyaW5rOiB0cnVlLFxuICBmbGV4TmVnYXRpdmU6IHRydWUsXG4gIGZsZXhPcmRlcjogdHJ1ZSxcbiAgZ3JpZEFyZWE6IHRydWUsXG4gIGdyaWRSb3c6IHRydWUsXG4gIGdyaWRSb3dFbmQ6IHRydWUsXG4gIGdyaWRSb3dTcGFuOiB0cnVlLFxuICBncmlkUm93U3RhcnQ6IHRydWUsXG4gIGdyaWRDb2x1bW46IHRydWUsXG4gIGdyaWRDb2x1bW5FbmQ6IHRydWUsXG4gIGdyaWRDb2x1bW5TcGFuOiB0cnVlLFxuICBncmlkQ29sdW1uU3RhcnQ6IHRydWUsXG4gIGZvbnRXZWlnaHQ6IHRydWUsXG4gIGxpbmVDbGFtcDogdHJ1ZSxcbiAgbGluZUhlaWdodDogdHJ1ZSxcbiAgb3BhY2l0eTogdHJ1ZSxcbiAgb3JkZXI6IHRydWUsXG4gIG9ycGhhbnM6IHRydWUsXG4gIHRhYlNpemU6IHRydWUsXG4gIHdpZG93czogdHJ1ZSxcbiAgekluZGV4OiB0cnVlLFxuICB6b29tOiB0cnVlLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiB0cnVlLFxuICBmbG9vZE9wYWNpdHk6IHRydWUsXG4gIHN0b3BPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VEYXNoYXJyYXk6IHRydWUsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IHRydWUsXG4gIHN0cm9rZU1pdGVybGltaXQ6IHRydWUsXG4gIHN0cm9rZU9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZVdpZHRoOiB0cnVlXG59O1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IHZlbmRvci1zcGVjaWZpYyBwcmVmaXgsIGVnOiBXZWJraXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgc3R5bGUgbmFtZSwgZWc6IHRyYW5zaXRpb25EdXJhdGlvblxuICogQHJldHVybiB7c3RyaW5nfSBzdHlsZSBuYW1lIHByZWZpeGVkIHdpdGggYHByZWZpeGAsIHByb3Blcmx5IGNhbWVsQ2FzZWQsIGVnOlxuICogV2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uXG4gKi9cblxuZnVuY3Rpb24gcHJlZml4S2V5KHByZWZpeCwga2V5KSB7XG4gIHJldHVybiBwcmVmaXggKyBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc3Vic3RyaW5nKDEpO1xufVxuLyoqXG4gKiBTdXBwb3J0IHN0eWxlIG5hbWVzIHRoYXQgbWF5IGNvbWUgcGFzc2VkIGluIHByZWZpeGVkIGJ5IGFkZGluZyBwZXJtdXRhdGlvbnNcbiAqIG9mIHZlbmRvciBwcmVmaXhlcy5cbiAqL1xuXG5cbnZhciBwcmVmaXhlcyA9IFsnV2Via2l0JywgJ21zJywgJ01veicsICdPJ107IC8vIFVzaW5nIE9iamVjdC5rZXlzIGhlcmUsIG9yIGVsc2UgdGhlIHZhbmlsbGEgZm9yLWluIGxvb3AgbWFrZXMgSUU4IGdvIGludG8gYW5cbi8vIGluZmluaXRlIGxvb3AsIGJlY2F1c2UgaXQgaXRlcmF0ZXMgb3ZlciB0aGUgbmV3bHkgYWRkZWQgcHJvcHMgdG9vLlxuXG5PYmplY3Qua2V5cyhpc1VuaXRsZXNzTnVtYmVyKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIHByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24gKHByZWZpeCkge1xuICAgIGlzVW5pdGxlc3NOdW1iZXJbcHJlZml4S2V5KHByZWZpeCwgcHJvcCldID0gaXNVbml0bGVzc051bWJlcltwcm9wXTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgdmFsdWUgaW50byB0aGUgcHJvcGVyIGNzcyB3cml0YWJsZSB2YWx1ZS4gVGhlIHN0eWxlIG5hbWUgYG5hbWVgXG4gKiBzaG91bGQgYmUgbG9naWNhbCAobm8gaHlwaGVucyksIGFzIHNwZWNpZmllZFxuICogaW4gYENTU1Byb3BlcnR5LmlzVW5pdGxlc3NOdW1iZXJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIENTUyBwcm9wZXJ0eSBuYW1lIHN1Y2ggYXMgYHRvcE1hcmdpbmAuXG4gKiBAcGFyYW0geyp9IHZhbHVlIENTUyBwcm9wZXJ0eSB2YWx1ZSBzdWNoIGFzIGAxMHB4YC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBzdHlsZSB2YWx1ZSB3aXRoIGRpbWVuc2lvbnMgYXBwbGllZC5cbiAqL1xuXG5mdW5jdGlvbiBkYW5nZXJvdXNTdHlsZVZhbHVlKG5hbWUsIHZhbHVlLCBpc0N1c3RvbVByb3BlcnR5KSB7XG4gIC8vIE5vdGUgdGhhdCB3ZSd2ZSByZW1vdmVkIGVzY2FwZVRleHRGb3JCcm93c2VyKCkgY2FsbHMgaGVyZSBzaW5jZSB0aGVcbiAgLy8gd2hvbGUgc3RyaW5nIHdpbGwgYmUgZXNjYXBlZCB3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgaW5qZWN0ZWQgaW50b1xuICAvLyB0aGUgbWFya3VwLiBJZiB5b3UgcHJvdmlkZSB1bnNhZmUgdXNlciBkYXRhIGhlcmUgdGhleSBjYW4gaW5qZWN0XG4gIC8vIGFyYml0cmFyeSBDU1Mgd2hpY2ggbWF5IGJlIHByb2JsZW1hdGljIChJIGNvdWxkbid0IHJlcHJvIHRoaXMpOlxuICAvLyBodHRwczovL3d3dy5vd2FzcC5vcmcvaW5kZXgucGhwL1hTU19GaWx0ZXJfRXZhc2lvbl9DaGVhdF9TaGVldFxuICAvLyBodHRwOi8vd3d3LnRoZXNwYW5uZXIuY28udWsvMjAwNy8xMS8yNi91bHRpbWF0ZS14c3MtY3NzLWluamVjdGlvbi9cbiAgLy8gVGhpcyBpcyBub3QgYW4gWFNTIGhvbGUgYnV0IGluc3RlYWQgYSBwb3RlbnRpYWwgQ1NTIGluamVjdGlvbiBpc3N1ZVxuICAvLyB3aGljaCBoYXMgbGVhZCB0byBhIGdyZWF0ZXIgZGlzY3Vzc2lvbiBhYm91dCBob3cgd2UncmUgZ29pbmcgdG9cbiAgLy8gdHJ1c3QgVVJMcyBtb3ZpbmcgZm9yd2FyZC4gU2VlICMyMTE1OTAxXG4gIHZhciBpc0VtcHR5ID0gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG5cbiAgaWYgKGlzRW1wdHkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoIWlzQ3VzdG9tUHJvcGVydHkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCAmJiAhKGlzVW5pdGxlc3NOdW1iZXIuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgaXNVbml0bGVzc051bWJlcltuYW1lXSkpIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnOyAvLyBQcmVzdW1lcyBpbXBsaWNpdCAncHgnIHN1ZmZpeCBmb3IgdW5pdGxlc3MgbnVtYmVyc1xuICB9XG5cbiAgcmV0dXJuICgnJyArIHZhbHVlKS50cmltKCk7XG59XG5cbnZhciB1cHBlcmNhc2VQYXR0ZXJuID0gLyhbQS1aXSkvZztcbnZhciBtc1BhdHRlcm4gPSAvXm1zLS87XG4vKipcbiAqIEh5cGhlbmF0ZXMgYSBjYW1lbGNhc2VkIENTUyBwcm9wZXJ0eSBuYW1lLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdiYWNrZ3JvdW5kQ29sb3InKVxuICogICA8IFwiYmFja2dyb3VuZC1jb2xvclwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdNb3pUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tb3otdHJhbnNpdGlvblwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdtc1RyYW5zaXRpb24nKVxuICogICA8IFwiLW1zLXRyYW5zaXRpb25cIlxuICpcbiAqIEFzIE1vZGVybml6ciBzdWdnZXN0cyAoaHR0cDovL21vZGVybml6ci5jb20vZG9jcy8jcHJlZml4ZWQpLCBhbiBgbXNgIHByZWZpeFxuICogaXMgY29udmVydGVkIHRvIGAtbXMtYC5cbiAqL1xuXG5mdW5jdGlvbiBoeXBoZW5hdGVTdHlsZU5hbWUobmFtZSkge1xuICByZXR1cm4gbmFtZS5yZXBsYWNlKHVwcGVyY2FzZVBhdHRlcm4sICctJDEnKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UobXNQYXR0ZXJuLCAnLW1zLScpO1xufVxuXG52YXIgd2FyblZhbGlkU3R5bGUgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICAvLyAnbXNUcmFuc2Zvcm0nIGlzIGNvcnJlY3QsIGJ1dCB0aGUgb3RoZXIgcHJlZml4ZXMgc2hvdWxkIGJlIGNhcGl0YWxpemVkXG4gIHZhciBiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4gPSAvXig/OndlYmtpdHxtb3p8bylbQS1aXS87XG4gIHZhciBtc1BhdHRlcm4kMSA9IC9eLW1zLS87XG4gIHZhciBoeXBoZW5QYXR0ZXJuID0gLy0oLikvZzsgLy8gc3R5bGUgdmFsdWVzIHNob3VsZG4ndCBjb250YWluIGEgc2VtaWNvbG9uXG5cbiAgdmFyIGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiA9IC87XFxzKiQvO1xuICB2YXIgd2FybmVkU3R5bGVOYW1lcyA9IHt9O1xuICB2YXIgd2FybmVkU3R5bGVWYWx1ZXMgPSB7fTtcbiAgdmFyIHdhcm5lZEZvck5hTlZhbHVlID0gZmFsc2U7XG4gIHZhciB3YXJuZWRGb3JJbmZpbml0eVZhbHVlID0gZmFsc2U7XG5cbiAgdmFyIGNhbWVsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShoeXBoZW5QYXR0ZXJuLCBmdW5jdGlvbiAoXywgY2hhcmFjdGVyKSB7XG4gICAgICByZXR1cm4gY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRTdHlsZU5hbWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignVW5zdXBwb3J0ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8nLCBuYW1lLCAvLyBBcyBBbmRpIFNtaXRoIHN1Z2dlc3RzXG4gICAgLy8gKGh0dHA6Ly93d3cuYW5kaXNtaXRoLmNvbS9ibG9nLzIwMTIvMDIvbW9kZXJuaXpyLXByZWZpeGVkLyksIGFuIGAtbXNgIHByZWZpeFxuICAgIC8vIGlzIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYG1zYC5cbiAgICBjYW1lbGl6ZShuYW1lLnJlcGxhY2UobXNQYXR0ZXJuJDEsICdtcy0nKSkpO1xuICB9O1xuXG4gIHZhciB3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdVbnN1cHBvcnRlZCB2ZW5kb3ItcHJlZml4ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8nLCBuYW1lLCBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlV2l0aFNlbWljb2xvbiA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZVZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkgJiYgd2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKFwiU3R5bGUgcHJvcGVydHkgdmFsdWVzIHNob3VsZG4ndCBjb250YWluIGEgc2VtaWNvbG9uLiBcIiArICdUcnkgXCIlczogJXNcIiBpbnN0ZWFkLicsIG5hbWUsIHZhbHVlLnJlcGxhY2UoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLCAnJykpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZUlzTmFOID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZEZvck5hTlZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkRm9yTmFOVmFsdWUgPSB0cnVlO1xuXG4gICAgZXJyb3IoJ2BOYU5gIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS4nLCBuYW1lKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVJc0luZmluaXR5ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZEZvckluZmluaXR5VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRGb3JJbmZpbml0eVZhbHVlID0gdHJ1ZTtcblxuICAgIGVycm9yKCdgSW5maW5pdHlgIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS4nLCBuYW1lKTtcbiAgfTtcblxuICB3YXJuVmFsaWRTdHlsZSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmIChuYW1lLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybi50ZXN0KG5hbWUpKSB7XG4gICAgICB3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUobmFtZSk7XG4gICAgfSBlbHNlIGlmIChiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHdhcm5TdHlsZVZhbHVlV2l0aFNlbWljb2xvbihuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgd2FyblN0eWxlVmFsdWVJc05hTihuYW1lLCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKCFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICAgICAgd2FyblN0eWxlVmFsdWVJc0luZmluaXR5KG5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbnZhciB3YXJuVmFsaWRTdHlsZSQxID0gd2FyblZhbGlkU3R5bGU7XG5cbi8qKlxuICogT3BlcmF0aW9ucyBmb3IgZGVhbGluZyB3aXRoIENTUyBwcm9wZXJ0aWVzLlxuICovXG5cbi8qKlxuICogVGhpcyBjcmVhdGVzIGEgc3RyaW5nIHRoYXQgaXMgZXhwZWN0ZWQgdG8gYmUgZXF1aXZhbGVudCB0byB0aGUgc3R5bGVcbiAqIGF0dHJpYnV0ZSBnZW5lcmF0ZWQgYnkgc2VydmVyLXNpZGUgcmVuZGVyaW5nLiBJdCBieS1wYXNzZXMgd2FybmluZ3MgYW5kXG4gKiBzZWN1cml0eSBjaGVja3Mgc28gaXQncyBub3Qgc2FmZSB0byB1c2UgdGhpcyB2YWx1ZSBmb3IgYW55dGhpbmcgb3RoZXIgdGhhblxuICogY29tcGFyaXNvbi4gSXQgaXMgb25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlRGFuZ2Vyb3VzU3RyaW5nRm9yU3R5bGVzKHN0eWxlcykge1xuICB7XG4gICAgdmFyIHNlcmlhbGl6ZWQgPSAnJztcbiAgICB2YXIgZGVsaW1pdGVyID0gJyc7XG5cbiAgICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gc3R5bGVzKSB7XG4gICAgICBpZiAoIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3R5bGVWYWx1ZSA9IHN0eWxlc1tzdHlsZU5hbWVdO1xuXG4gICAgICBpZiAoc3R5bGVWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBpc0N1c3RvbVByb3BlcnR5ID0gc3R5bGVOYW1lLmluZGV4T2YoJy0tJykgPT09IDA7XG4gICAgICAgIHNlcmlhbGl6ZWQgKz0gZGVsaW1pdGVyICsgKGlzQ3VzdG9tUHJvcGVydHkgPyBzdHlsZU5hbWUgOiBoeXBoZW5hdGVTdHlsZU5hbWUoc3R5bGVOYW1lKSkgKyAnOic7XG4gICAgICAgIHNlcmlhbGl6ZWQgKz0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShzdHlsZU5hbWUsIHN0eWxlVmFsdWUsIGlzQ3VzdG9tUHJvcGVydHkpO1xuICAgICAgICBkZWxpbWl0ZXIgPSAnOyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQgfHwgbnVsbDtcbiAgfVxufVxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBmb3IgbXVsdGlwbGUgc3R5bGVzIG9uIGEgbm9kZS4gIElmIGEgdmFsdWUgaXMgc3BlY2lmaWVkIGFzXG4gKiAnJyAoZW1wdHkgc3RyaW5nKSwgdGhlIGNvcnJlc3BvbmRpbmcgc3R5bGUgcHJvcGVydHkgd2lsbCBiZSB1bnNldC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZXNcbiAqL1xuXG5mdW5jdGlvbiBzZXRWYWx1ZUZvclN0eWxlcyhub2RlLCBzdHlsZXMpIHtcbiAgdmFyIHN0eWxlID0gbm9kZS5zdHlsZTtcblxuICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gc3R5bGVzKSB7XG4gICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBzdHlsZU5hbWUuaW5kZXhPZignLS0nKSA9PT0gMDtcblxuICAgIHtcbiAgICAgIGlmICghaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgICB3YXJuVmFsaWRTdHlsZSQxKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzdHlsZVZhbHVlID0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShzdHlsZU5hbWUsIHN0eWxlc1tzdHlsZU5hbWVdLCBpc0N1c3RvbVByb3BlcnR5KTtcblxuICAgIGlmIChzdHlsZU5hbWUgPT09ICdmbG9hdCcpIHtcbiAgICAgIHN0eWxlTmFtZSA9ICdjc3NGbG9hdCc7XG4gICAgfVxuXG4gICAgaWYgKGlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgICAgIHN0eWxlLnNldFByb3BlcnR5KHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlW3N0eWxlTmFtZV0gPSBzdHlsZVZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbHVlRW1wdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgPT09ICcnO1xufVxuLyoqXG4gKiBHaXZlbiB7Y29sb3I6ICdyZWQnLCBvdmVyZmxvdzogJ2hpZGRlbid9IHJldHVybnMge1xuICogICBjb2xvcjogJ2NvbG9yJyxcbiAqICAgb3ZlcmZsb3dYOiAnb3ZlcmZsb3cnLFxuICogICBvdmVyZmxvd1k6ICdvdmVyZmxvdycsXG4gKiB9LiBUaGlzIGNhbiBiZSByZWFkIGFzIFwidGhlIG92ZXJmbG93WSBwcm9wZXJ0eSB3YXMgc2V0IGJ5IHRoZSBvdmVyZmxvd1xuICogc2hvcnRoYW5kXCIuIFRoYXQgaXMsIHRoZSB2YWx1ZXMgYXJlIHRoZSBwcm9wZXJ0eSB0aGF0IGVhY2ggd2FzIGRlcml2ZWQgZnJvbS5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4cGFuZFNob3J0aGFuZE1hcChzdHlsZXMpIHtcbiAgdmFyIGV4cGFuZGVkID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHN0eWxlcykge1xuICAgIHZhciBsb25naGFuZHMgPSBzaG9ydGhhbmRUb0xvbmdoYW5kW2tleV0gfHwgW2tleV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmdoYW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgZXhwYW5kZWRbbG9uZ2hhbmRzW2ldXSA9IGtleTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwYW5kZWQ7XG59XG4vKipcbiAqIFdoZW4gbWl4aW5nIHNob3J0aGFuZCBhbmQgbG9uZ2hhbmQgcHJvcGVydHkgbmFtZXMsIHdlIHdhcm4gZHVyaW5nIHVwZGF0ZXMgaWZcbiAqIHdlIGV4cGVjdCBhbiBpbmNvcnJlY3QgcmVzdWx0IHRvIG9jY3VyLiBJbiBwYXJ0aWN1bGFyLCB3ZSB3YXJuIGZvcjpcbiAqXG4gKiBVcGRhdGluZyBhIHNob3J0aGFuZCBwcm9wZXJ0eSAobG9uZ2hhbmQgZ2V0cyBvdmVyd3JpdHRlbik6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udDogJ2JheicsIGZvbnRWYXJpYW50OiAnYmFyJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udCA9ICdiYXonXG4gKiBSZW1vdmluZyBhIHNob3J0aGFuZCBwcm9wZXJ0eSAobG9uZ2hhbmQgZ2V0cyBsb3N0IHRvbyk6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udFZhcmlhbnQ6ICdiYXInfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250ID0gJydcbiAqIFJlbW92aW5nIGEgbG9uZ2hhbmQgcHJvcGVydHkgKHNob3VsZCByZXZlcnQgdG8gc2hvcnRoYW5kOyBkb2Vzbid0KTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250OiAnZm9vJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udFZhcmlhbnQgPSAnJ1xuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVTaG9ydGhhbmRQcm9wZXJ0eUNvbGxpc2lvbkluRGV2KHN0eWxlVXBkYXRlcywgbmV4dFN0eWxlcykge1xuICB7XG4gICAgaWYgKCFuZXh0U3R5bGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGV4cGFuZGVkVXBkYXRlcyA9IGV4cGFuZFNob3J0aGFuZE1hcChzdHlsZVVwZGF0ZXMpO1xuICAgIHZhciBleHBhbmRlZFN0eWxlcyA9IGV4cGFuZFNob3J0aGFuZE1hcChuZXh0U3R5bGVzKTtcbiAgICB2YXIgd2FybmVkQWJvdXQgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiBleHBhbmRlZFVwZGF0ZXMpIHtcbiAgICAgIHZhciBvcmlnaW5hbEtleSA9IGV4cGFuZGVkVXBkYXRlc1trZXldO1xuICAgICAgdmFyIGNvcnJlY3RPcmlnaW5hbEtleSA9IGV4cGFuZGVkU3R5bGVzW2tleV07XG5cbiAgICAgIGlmIChjb3JyZWN0T3JpZ2luYWxLZXkgJiYgb3JpZ2luYWxLZXkgIT09IGNvcnJlY3RPcmlnaW5hbEtleSkge1xuICAgICAgICB2YXIgd2FybmluZ0tleSA9IG9yaWdpbmFsS2V5ICsgJywnICsgY29ycmVjdE9yaWdpbmFsS2V5O1xuXG4gICAgICAgIGlmICh3YXJuZWRBYm91dFt3YXJuaW5nS2V5XSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgd2FybmVkQWJvdXRbd2FybmluZ0tleV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclcyBhIHN0eWxlIHByb3BlcnR5IGR1cmluZyByZXJlbmRlciAoJXMpIHdoZW4gYSAnICsgJ2NvbmZsaWN0aW5nIHByb3BlcnR5IGlzIHNldCAoJXMpIGNhbiBsZWFkIHRvIHN0eWxpbmcgYnVncy4gVG8gJyArIFwiYXZvaWQgdGhpcywgZG9uJ3QgbWl4IHNob3J0aGFuZCBhbmQgbm9uLXNob3J0aGFuZCBwcm9wZXJ0aWVzIFwiICsgJ2ZvciB0aGUgc2FtZSB2YWx1ZTsgaW5zdGVhZCwgcmVwbGFjZSB0aGUgc2hvcnRoYW5kIHdpdGggJyArICdzZXBhcmF0ZSB2YWx1ZXMuJywgaXNWYWx1ZUVtcHR5KHN0eWxlVXBkYXRlc1tvcmlnaW5hbEtleV0pID8gJ1JlbW92aW5nJyA6ICdVcGRhdGluZycsIG9yaWdpbmFsS2V5LCBjb3JyZWN0T3JpZ2luYWxLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBGb3IgSFRNTCwgY2VydGFpbiB0YWdzIHNob3VsZCBvbWl0IHRoZWlyIGNsb3NlIHRhZy4gV2Uga2VlcCBhIGxpc3QgZm9yXG4vLyB0aG9zZSBzcGVjaWFsLWNhc2UgdGFncy5cbnZhciBvbWl0dGVkQ2xvc2VUYWdzID0ge1xuICBhcmVhOiB0cnVlLFxuICBiYXNlOiB0cnVlLFxuICBicjogdHJ1ZSxcbiAgY29sOiB0cnVlLFxuICBlbWJlZDogdHJ1ZSxcbiAgaHI6IHRydWUsXG4gIGltZzogdHJ1ZSxcbiAgaW5wdXQ6IHRydWUsXG4gIGtleWdlbjogdHJ1ZSxcbiAgbGluazogdHJ1ZSxcbiAgbWV0YTogdHJ1ZSxcbiAgcGFyYW06IHRydWUsXG4gIHNvdXJjZTogdHJ1ZSxcbiAgdHJhY2s6IHRydWUsXG4gIHdicjogdHJ1ZSAvLyBOT1RFOiBtZW51aXRlbSdzIGNsb3NlIHRhZyBzaG91bGQgYmUgb21pdHRlZCwgYnV0IHRoYXQgY2F1c2VzIHByb2JsZW1zLlxuXG59O1xuXG4vLyBgb21pdHRlZENsb3NlVGFnc2AgZXhjZXB0IHRoYXQgYG1lbnVpdGVtYCBzaG91bGQgc3RpbGwgaGF2ZSBpdHMgY2xvc2luZyB0YWcuXG5cbnZhciB2b2lkRWxlbWVudFRhZ3MgPSBfYXNzaWduKHtcbiAgbWVudWl0ZW06IHRydWVcbn0sIG9taXR0ZWRDbG9zZVRhZ3MpO1xuXG52YXIgSFRNTCA9ICdfX2h0bWwnO1xuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFByb3BzKHRhZywgcHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHJldHVybjtcbiAgfSAvLyBOb3RlIHRoZSB1c2Ugb2YgYD09YCB3aGljaCBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkLlxuXG5cbiAgaWYgKHZvaWRFbGVtZW50VGFnc1t0YWddKSB7XG4gICAgaWYgKCEocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggdGFnICsgXCIgaXMgYSB2b2lkIGVsZW1lbnQgdGFnIGFuZCBtdXN0IG5laXRoZXIgaGF2ZSBgY2hpbGRyZW5gIG5vciB1c2UgYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPSBudWxsKSB7XG4gICAgaWYgKCEocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2FuIG9ubHkgc2V0IG9uZSBvZiBgY2hpbGRyZW5gIG9yIGBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoISh0eXBlb2YgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT09ICdvYmplY3QnICYmIEhUTUwgaW4gcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcImBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAgbXVzdCBiZSBpbiB0aGUgZm9ybSBge19faHRtbDogLi4ufWAuIFBsZWFzZSB2aXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGFuZ2Vyb3VzbHktc2V0LWlubmVyLWh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKCFwcm9wcy5zdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgJiYgcHJvcHMuY29udGVudEVkaXRhYmxlICYmIHByb3BzLmNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIGVycm9yKCdBIGNvbXBvbmVudCBpcyBgY29udGVudEVkaXRhYmxlYCBhbmQgY29udGFpbnMgYGNoaWxkcmVuYCBtYW5hZ2VkIGJ5ICcgKyAnUmVhY3QuIEl0IGlzIG5vdyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGd1YXJhbnRlZSB0aGF0IG5vbmUgb2YgJyArICd0aG9zZSBub2RlcyBhcmUgdW5leHBlY3RlZGx5IG1vZGlmaWVkIG9yIGR1cGxpY2F0ZWQuIFRoaXMgaXMgJyArICdwcm9iYWJseSBub3QgaW50ZW50aW9uYWwuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCEocHJvcHMuc3R5bGUgPT0gbnVsbCB8fCB0eXBlb2YgcHJvcHMuc3R5bGUgPT09ICdvYmplY3QnKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoZSBgc3R5bGVgIHByb3AgZXhwZWN0cyBhIG1hcHBpbmcgZnJvbSBzdHlsZSBwcm9wZXJ0aWVzIHRvIHZhbHVlcywgbm90IGEgc3RyaW5nLiBGb3IgZXhhbXBsZSwgc3R5bGU9e3ttYXJnaW5SaWdodDogc3BhY2luZyArICdlbSd9fSB3aGVuIHVzaW5nIEpTWC5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0N1c3RvbUNvbXBvbmVudCh0YWdOYW1lLCBwcm9wcykge1xuICBpZiAodGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBwcm9wcy5pcyA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICBzd2l0Y2ggKHRhZ05hbWUpIHtcbiAgICAvLyBUaGVzZSBhcmUgcmVzZXJ2ZWQgU1ZHIGFuZCBNYXRoTUwgZWxlbWVudHMuXG4gICAgLy8gV2UgZG9uJ3QgbWluZCB0aGlzIGxpc3QgdG9vIG11Y2ggYmVjYXVzZSB3ZSBleHBlY3QgaXQgdG8gbmV2ZXIgZ3Jvdy5cbiAgICAvLyBUaGUgYWx0ZXJuYXRpdmUgaXMgdG8gdHJhY2sgdGhlIG5hbWVzcGFjZSBpbiBhIGZldyBwbGFjZXMgd2hpY2ggaXMgY29udm9sdXRlZC5cbiAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViY29tcG9uZW50cy9zcGVjL2N1c3RvbS8jY3VzdG9tLWVsZW1lbnRzLWNvcmUtY29uY2VwdHNcbiAgICBjYXNlICdhbm5vdGF0aW9uLXhtbCc6XG4gICAgY2FzZSAnY29sb3ItcHJvZmlsZSc6XG4gICAgY2FzZSAnZm9udC1mYWNlJzpcbiAgICBjYXNlICdmb250LWZhY2Utc3JjJzpcbiAgICBjYXNlICdmb250LWZhY2UtdXJpJzpcbiAgICBjYXNlICdmb250LWZhY2UtZm9ybWF0JzpcbiAgICBjYXNlICdmb250LWZhY2UtbmFtZSc6XG4gICAgY2FzZSAnbWlzc2luZy1nbHlwaCc6XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGUgSFRNTCBvciBTVkcgYWxsb3dlZCBhdHRyaWJ1dGUgbGlzdCwgYmUgc3VyZSB0b1xuLy8gYWxzbyBhZGQgdGhlbSB0byB0aGlzIG1vZHVsZSB0byBlbnN1cmUgY2FzaW5nIGFuZCBpbmNvcnJlY3QgbmFtZVxuLy8gd2FybmluZ3MuXG52YXIgcG9zc2libGVTdGFuZGFyZE5hbWVzID0ge1xuICAvLyBIVE1MXG4gIGFjY2VwdDogJ2FjY2VwdCcsXG4gIGFjY2VwdGNoYXJzZXQ6ICdhY2NlcHRDaGFyc2V0JyxcbiAgJ2FjY2VwdC1jaGFyc2V0JzogJ2FjY2VwdENoYXJzZXQnLFxuICBhY2Nlc3NrZXk6ICdhY2Nlc3NLZXknLFxuICBhY3Rpb246ICdhY3Rpb24nLFxuICBhbGxvd2Z1bGxzY3JlZW46ICdhbGxvd0Z1bGxTY3JlZW4nLFxuICBhbHQ6ICdhbHQnLFxuICBhczogJ2FzJyxcbiAgYXN5bmM6ICdhc3luYycsXG4gIGF1dG9jYXBpdGFsaXplOiAnYXV0b0NhcGl0YWxpemUnLFxuICBhdXRvY29tcGxldGU6ICdhdXRvQ29tcGxldGUnLFxuICBhdXRvY29ycmVjdDogJ2F1dG9Db3JyZWN0JyxcbiAgYXV0b2ZvY3VzOiAnYXV0b0ZvY3VzJyxcbiAgYXV0b3BsYXk6ICdhdXRvUGxheScsXG4gIGF1dG9zYXZlOiAnYXV0b1NhdmUnLFxuICBjYXB0dXJlOiAnY2FwdHVyZScsXG4gIGNlbGxwYWRkaW5nOiAnY2VsbFBhZGRpbmcnLFxuICBjZWxsc3BhY2luZzogJ2NlbGxTcGFjaW5nJyxcbiAgY2hhbGxlbmdlOiAnY2hhbGxlbmdlJyxcbiAgY2hhcnNldDogJ2NoYXJTZXQnLFxuICBjaGVja2VkOiAnY2hlY2tlZCcsXG4gIGNoaWxkcmVuOiAnY2hpbGRyZW4nLFxuICBjaXRlOiAnY2l0ZScsXG4gIGNsYXNzOiAnY2xhc3NOYW1lJyxcbiAgY2xhc3NpZDogJ2NsYXNzSUQnLFxuICBjbGFzc25hbWU6ICdjbGFzc05hbWUnLFxuICBjb2xzOiAnY29scycsXG4gIGNvbHNwYW46ICdjb2xTcGFuJyxcbiAgY29udGVudDogJ2NvbnRlbnQnLFxuICBjb250ZW50ZWRpdGFibGU6ICdjb250ZW50RWRpdGFibGUnLFxuICBjb250ZXh0bWVudTogJ2NvbnRleHRNZW51JyxcbiAgY29udHJvbHM6ICdjb250cm9scycsXG4gIGNvbnRyb2xzbGlzdDogJ2NvbnRyb2xzTGlzdCcsXG4gIGNvb3JkczogJ2Nvb3JkcycsXG4gIGNyb3Nzb3JpZ2luOiAnY3Jvc3NPcmlnaW4nLFxuICBkYW5nZXJvdXNseXNldGlubmVyaHRtbDogJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJyxcbiAgZGF0YTogJ2RhdGEnLFxuICBkYXRldGltZTogJ2RhdGVUaW1lJyxcbiAgZGVmYXVsdDogJ2RlZmF1bHQnLFxuICBkZWZhdWx0Y2hlY2tlZDogJ2RlZmF1bHRDaGVja2VkJyxcbiAgZGVmYXVsdHZhbHVlOiAnZGVmYXVsdFZhbHVlJyxcbiAgZGVmZXI6ICdkZWZlcicsXG4gIGRpcjogJ2RpcicsXG4gIGRpc2FibGVkOiAnZGlzYWJsZWQnLFxuICBkaXNhYmxlcGljdHVyZWlucGljdHVyZTogJ2Rpc2FibGVQaWN0dXJlSW5QaWN0dXJlJyxcbiAgZGlzYWJsZXJlbW90ZXBsYXliYWNrOiAnZGlzYWJsZVJlbW90ZVBsYXliYWNrJyxcbiAgZG93bmxvYWQ6ICdkb3dubG9hZCcsXG4gIGRyYWdnYWJsZTogJ2RyYWdnYWJsZScsXG4gIGVuY3R5cGU6ICdlbmNUeXBlJyxcbiAgZW50ZXJrZXloaW50OiAnZW50ZXJLZXlIaW50JyxcbiAgZm9yOiAnaHRtbEZvcicsXG4gIGZvcm06ICdmb3JtJyxcbiAgZm9ybW1ldGhvZDogJ2Zvcm1NZXRob2QnLFxuICBmb3JtYWN0aW9uOiAnZm9ybUFjdGlvbicsXG4gIGZvcm1lbmN0eXBlOiAnZm9ybUVuY1R5cGUnLFxuICBmb3Jtbm92YWxpZGF0ZTogJ2Zvcm1Ob1ZhbGlkYXRlJyxcbiAgZm9ybXRhcmdldDogJ2Zvcm1UYXJnZXQnLFxuICBmcmFtZWJvcmRlcjogJ2ZyYW1lQm9yZGVyJyxcbiAgaGVhZGVyczogJ2hlYWRlcnMnLFxuICBoZWlnaHQ6ICdoZWlnaHQnLFxuICBoaWRkZW46ICdoaWRkZW4nLFxuICBoaWdoOiAnaGlnaCcsXG4gIGhyZWY6ICdocmVmJyxcbiAgaHJlZmxhbmc6ICdocmVmTGFuZycsXG4gIGh0bWxmb3I6ICdodG1sRm9yJyxcbiAgaHR0cGVxdWl2OiAnaHR0cEVxdWl2JyxcbiAgJ2h0dHAtZXF1aXYnOiAnaHR0cEVxdWl2JyxcbiAgaWNvbjogJ2ljb24nLFxuICBpZDogJ2lkJyxcbiAgaW5uZXJodG1sOiAnaW5uZXJIVE1MJyxcbiAgaW5wdXRtb2RlOiAnaW5wdXRNb2RlJyxcbiAgaW50ZWdyaXR5OiAnaW50ZWdyaXR5JyxcbiAgaXM6ICdpcycsXG4gIGl0ZW1pZDogJ2l0ZW1JRCcsXG4gIGl0ZW1wcm9wOiAnaXRlbVByb3AnLFxuICBpdGVtcmVmOiAnaXRlbVJlZicsXG4gIGl0ZW1zY29wZTogJ2l0ZW1TY29wZScsXG4gIGl0ZW10eXBlOiAnaXRlbVR5cGUnLFxuICBrZXlwYXJhbXM6ICdrZXlQYXJhbXMnLFxuICBrZXl0eXBlOiAna2V5VHlwZScsXG4gIGtpbmQ6ICdraW5kJyxcbiAgbGFiZWw6ICdsYWJlbCcsXG4gIGxhbmc6ICdsYW5nJyxcbiAgbGlzdDogJ2xpc3QnLFxuICBsb29wOiAnbG9vcCcsXG4gIGxvdzogJ2xvdycsXG4gIG1hbmlmZXN0OiAnbWFuaWZlc3QnLFxuICBtYXJnaW53aWR0aDogJ21hcmdpbldpZHRoJyxcbiAgbWFyZ2luaGVpZ2h0OiAnbWFyZ2luSGVpZ2h0JyxcbiAgbWF4OiAnbWF4JyxcbiAgbWF4bGVuZ3RoOiAnbWF4TGVuZ3RoJyxcbiAgbWVkaWE6ICdtZWRpYScsXG4gIG1lZGlhZ3JvdXA6ICdtZWRpYUdyb3VwJyxcbiAgbWV0aG9kOiAnbWV0aG9kJyxcbiAgbWluOiAnbWluJyxcbiAgbWlubGVuZ3RoOiAnbWluTGVuZ3RoJyxcbiAgbXVsdGlwbGU6ICdtdWx0aXBsZScsXG4gIG11dGVkOiAnbXV0ZWQnLFxuICBuYW1lOiAnbmFtZScsXG4gIG5vbW9kdWxlOiAnbm9Nb2R1bGUnLFxuICBub25jZTogJ25vbmNlJyxcbiAgbm92YWxpZGF0ZTogJ25vVmFsaWRhdGUnLFxuICBvcGVuOiAnb3BlbicsXG4gIG9wdGltdW06ICdvcHRpbXVtJyxcbiAgcGF0dGVybjogJ3BhdHRlcm4nLFxuICBwbGFjZWhvbGRlcjogJ3BsYWNlaG9sZGVyJyxcbiAgcGxheXNpbmxpbmU6ICdwbGF5c0lubGluZScsXG4gIHBvc3RlcjogJ3Bvc3RlcicsXG4gIHByZWxvYWQ6ICdwcmVsb2FkJyxcbiAgcHJvZmlsZTogJ3Byb2ZpbGUnLFxuICByYWRpb2dyb3VwOiAncmFkaW9Hcm91cCcsXG4gIHJlYWRvbmx5OiAncmVhZE9ubHknLFxuICByZWZlcnJlcnBvbGljeTogJ3JlZmVycmVyUG9saWN5JyxcbiAgcmVsOiAncmVsJyxcbiAgcmVxdWlyZWQ6ICdyZXF1aXJlZCcsXG4gIHJldmVyc2VkOiAncmV2ZXJzZWQnLFxuICByb2xlOiAncm9sZScsXG4gIHJvd3M6ICdyb3dzJyxcbiAgcm93c3BhbjogJ3Jvd1NwYW4nLFxuICBzYW5kYm94OiAnc2FuZGJveCcsXG4gIHNjb3BlOiAnc2NvcGUnLFxuICBzY29wZWQ6ICdzY29wZWQnLFxuICBzY3JvbGxpbmc6ICdzY3JvbGxpbmcnLFxuICBzZWFtbGVzczogJ3NlYW1sZXNzJyxcbiAgc2VsZWN0ZWQ6ICdzZWxlY3RlZCcsXG4gIHNoYXBlOiAnc2hhcGUnLFxuICBzaXplOiAnc2l6ZScsXG4gIHNpemVzOiAnc2l6ZXMnLFxuICBzcGFuOiAnc3BhbicsXG4gIHNwZWxsY2hlY2s6ICdzcGVsbENoZWNrJyxcbiAgc3JjOiAnc3JjJyxcbiAgc3JjZG9jOiAnc3JjRG9jJyxcbiAgc3JjbGFuZzogJ3NyY0xhbmcnLFxuICBzcmNzZXQ6ICdzcmNTZXQnLFxuICBzdGFydDogJ3N0YXJ0JyxcbiAgc3RlcDogJ3N0ZXAnLFxuICBzdHlsZTogJ3N0eWxlJyxcbiAgc3VtbWFyeTogJ3N1bW1hcnknLFxuICB0YWJpbmRleDogJ3RhYkluZGV4JyxcbiAgdGFyZ2V0OiAndGFyZ2V0JyxcbiAgdGl0bGU6ICd0aXRsZScsXG4gIHR5cGU6ICd0eXBlJyxcbiAgdXNlbWFwOiAndXNlTWFwJyxcbiAgdmFsdWU6ICd2YWx1ZScsXG4gIHdpZHRoOiAnd2lkdGgnLFxuICB3bW9kZTogJ3dtb2RlJyxcbiAgd3JhcDogJ3dyYXAnLFxuICAvLyBTVkdcbiAgYWJvdXQ6ICdhYm91dCcsXG4gIGFjY2VudGhlaWdodDogJ2FjY2VudEhlaWdodCcsXG4gICdhY2NlbnQtaGVpZ2h0JzogJ2FjY2VudEhlaWdodCcsXG4gIGFjY3VtdWxhdGU6ICdhY2N1bXVsYXRlJyxcbiAgYWRkaXRpdmU6ICdhZGRpdGl2ZScsXG4gIGFsaWdubWVudGJhc2VsaW5lOiAnYWxpZ25tZW50QmFzZWxpbmUnLFxuICAnYWxpZ25tZW50LWJhc2VsaW5lJzogJ2FsaWdubWVudEJhc2VsaW5lJyxcbiAgYWxsb3dyZW9yZGVyOiAnYWxsb3dSZW9yZGVyJyxcbiAgYWxwaGFiZXRpYzogJ2FscGhhYmV0aWMnLFxuICBhbXBsaXR1ZGU6ICdhbXBsaXR1ZGUnLFxuICBhcmFiaWNmb3JtOiAnYXJhYmljRm9ybScsXG4gICdhcmFiaWMtZm9ybSc6ICdhcmFiaWNGb3JtJyxcbiAgYXNjZW50OiAnYXNjZW50JyxcbiAgYXR0cmlidXRlbmFtZTogJ2F0dHJpYnV0ZU5hbWUnLFxuICBhdHRyaWJ1dGV0eXBlOiAnYXR0cmlidXRlVHlwZScsXG4gIGF1dG9yZXZlcnNlOiAnYXV0b1JldmVyc2UnLFxuICBhemltdXRoOiAnYXppbXV0aCcsXG4gIGJhc2VmcmVxdWVuY3k6ICdiYXNlRnJlcXVlbmN5JyxcbiAgYmFzZWxpbmVzaGlmdDogJ2Jhc2VsaW5lU2hpZnQnLFxuICAnYmFzZWxpbmUtc2hpZnQnOiAnYmFzZWxpbmVTaGlmdCcsXG4gIGJhc2Vwcm9maWxlOiAnYmFzZVByb2ZpbGUnLFxuICBiYm94OiAnYmJveCcsXG4gIGJlZ2luOiAnYmVnaW4nLFxuICBiaWFzOiAnYmlhcycsXG4gIGJ5OiAnYnknLFxuICBjYWxjbW9kZTogJ2NhbGNNb2RlJyxcbiAgY2FwaGVpZ2h0OiAnY2FwSGVpZ2h0JyxcbiAgJ2NhcC1oZWlnaHQnOiAnY2FwSGVpZ2h0JyxcbiAgY2xpcDogJ2NsaXAnLFxuICBjbGlwcGF0aDogJ2NsaXBQYXRoJyxcbiAgJ2NsaXAtcGF0aCc6ICdjbGlwUGF0aCcsXG4gIGNsaXBwYXRodW5pdHM6ICdjbGlwUGF0aFVuaXRzJyxcbiAgY2xpcHJ1bGU6ICdjbGlwUnVsZScsXG4gICdjbGlwLXJ1bGUnOiAnY2xpcFJ1bGUnLFxuICBjb2xvcjogJ2NvbG9yJyxcbiAgY29sb3JpbnRlcnBvbGF0aW9uOiAnY29sb3JJbnRlcnBvbGF0aW9uJyxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24nOiAnY29sb3JJbnRlcnBvbGF0aW9uJyxcbiAgY29sb3JpbnRlcnBvbGF0aW9uZmlsdGVyczogJ2NvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMnLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJzogJ2NvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMnLFxuICBjb2xvcnByb2ZpbGU6ICdjb2xvclByb2ZpbGUnLFxuICAnY29sb3ItcHJvZmlsZSc6ICdjb2xvclByb2ZpbGUnLFxuICBjb2xvcnJlbmRlcmluZzogJ2NvbG9yUmVuZGVyaW5nJyxcbiAgJ2NvbG9yLXJlbmRlcmluZyc6ICdjb2xvclJlbmRlcmluZycsXG4gIGNvbnRlbnRzY3JpcHR0eXBlOiAnY29udGVudFNjcmlwdFR5cGUnLFxuICBjb250ZW50c3R5bGV0eXBlOiAnY29udGVudFN0eWxlVHlwZScsXG4gIGN1cnNvcjogJ2N1cnNvcicsXG4gIGN4OiAnY3gnLFxuICBjeTogJ2N5JyxcbiAgZDogJ2QnLFxuICBkYXRhdHlwZTogJ2RhdGF0eXBlJyxcbiAgZGVjZWxlcmF0ZTogJ2RlY2VsZXJhdGUnLFxuICBkZXNjZW50OiAnZGVzY2VudCcsXG4gIGRpZmZ1c2Vjb25zdGFudDogJ2RpZmZ1c2VDb25zdGFudCcsXG4gIGRpcmVjdGlvbjogJ2RpcmVjdGlvbicsXG4gIGRpc3BsYXk6ICdkaXNwbGF5JyxcbiAgZGl2aXNvcjogJ2Rpdmlzb3InLFxuICBkb21pbmFudGJhc2VsaW5lOiAnZG9taW5hbnRCYXNlbGluZScsXG4gICdkb21pbmFudC1iYXNlbGluZSc6ICdkb21pbmFudEJhc2VsaW5lJyxcbiAgZHVyOiAnZHVyJyxcbiAgZHg6ICdkeCcsXG4gIGR5OiAnZHknLFxuICBlZGdlbW9kZTogJ2VkZ2VNb2RlJyxcbiAgZWxldmF0aW9uOiAnZWxldmF0aW9uJyxcbiAgZW5hYmxlYmFja2dyb3VuZDogJ2VuYWJsZUJhY2tncm91bmQnLFxuICAnZW5hYmxlLWJhY2tncm91bmQnOiAnZW5hYmxlQmFja2dyb3VuZCcsXG4gIGVuZDogJ2VuZCcsXG4gIGV4cG9uZW50OiAnZXhwb25lbnQnLFxuICBleHRlcm5hbHJlc291cmNlc3JlcXVpcmVkOiAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsXG4gIGZpbGw6ICdmaWxsJyxcbiAgZmlsbG9wYWNpdHk6ICdmaWxsT3BhY2l0eScsXG4gICdmaWxsLW9wYWNpdHknOiAnZmlsbE9wYWNpdHknLFxuICBmaWxscnVsZTogJ2ZpbGxSdWxlJyxcbiAgJ2ZpbGwtcnVsZSc6ICdmaWxsUnVsZScsXG4gIGZpbHRlcjogJ2ZpbHRlcicsXG4gIGZpbHRlcnJlczogJ2ZpbHRlclJlcycsXG4gIGZpbHRlcnVuaXRzOiAnZmlsdGVyVW5pdHMnLFxuICBmbG9vZG9wYWNpdHk6ICdmbG9vZE9wYWNpdHknLFxuICAnZmxvb2Qtb3BhY2l0eSc6ICdmbG9vZE9wYWNpdHknLFxuICBmbG9vZGNvbG9yOiAnZmxvb2RDb2xvcicsXG4gICdmbG9vZC1jb2xvcic6ICdmbG9vZENvbG9yJyxcbiAgZm9jdXNhYmxlOiAnZm9jdXNhYmxlJyxcbiAgZm9udGZhbWlseTogJ2ZvbnRGYW1pbHknLFxuICAnZm9udC1mYW1pbHknOiAnZm9udEZhbWlseScsXG4gIGZvbnRzaXplOiAnZm9udFNpemUnLFxuICAnZm9udC1zaXplJzogJ2ZvbnRTaXplJyxcbiAgZm9udHNpemVhZGp1c3Q6ICdmb250U2l6ZUFkanVzdCcsXG4gICdmb250LXNpemUtYWRqdXN0JzogJ2ZvbnRTaXplQWRqdXN0JyxcbiAgZm9udHN0cmV0Y2g6ICdmb250U3RyZXRjaCcsXG4gICdmb250LXN0cmV0Y2gnOiAnZm9udFN0cmV0Y2gnLFxuICBmb250c3R5bGU6ICdmb250U3R5bGUnLFxuICAnZm9udC1zdHlsZSc6ICdmb250U3R5bGUnLFxuICBmb250dmFyaWFudDogJ2ZvbnRWYXJpYW50JyxcbiAgJ2ZvbnQtdmFyaWFudCc6ICdmb250VmFyaWFudCcsXG4gIGZvbnR3ZWlnaHQ6ICdmb250V2VpZ2h0JyxcbiAgJ2ZvbnQtd2VpZ2h0JzogJ2ZvbnRXZWlnaHQnLFxuICBmb3JtYXQ6ICdmb3JtYXQnLFxuICBmcm9tOiAnZnJvbScsXG4gIGZ4OiAnZngnLFxuICBmeTogJ2Z5JyxcbiAgZzE6ICdnMScsXG4gIGcyOiAnZzInLFxuICBnbHlwaG5hbWU6ICdnbHlwaE5hbWUnLFxuICAnZ2x5cGgtbmFtZSc6ICdnbHlwaE5hbWUnLFxuICBnbHlwaG9yaWVudGF0aW9uaG9yaXpvbnRhbDogJ2dseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsJyxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnOiAnZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWwnLFxuICBnbHlwaG9yaWVudGF0aW9udmVydGljYWw6ICdnbHlwaE9yaWVudGF0aW9uVmVydGljYWwnLFxuICAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnOiAnZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsJyxcbiAgZ2x5cGhyZWY6ICdnbHlwaFJlZicsXG4gIGdyYWRpZW50dHJhbnNmb3JtOiAnZ3JhZGllbnRUcmFuc2Zvcm0nLFxuICBncmFkaWVudHVuaXRzOiAnZ3JhZGllbnRVbml0cycsXG4gIGhhbmdpbmc6ICdoYW5naW5nJyxcbiAgaG9yaXphZHZ4OiAnaG9yaXpBZHZYJyxcbiAgJ2hvcml6LWFkdi14JzogJ2hvcml6QWR2WCcsXG4gIGhvcml6b3JpZ2lueDogJ2hvcml6T3JpZ2luWCcsXG4gICdob3Jpei1vcmlnaW4teCc6ICdob3Jpek9yaWdpblgnLFxuICBpZGVvZ3JhcGhpYzogJ2lkZW9ncmFwaGljJyxcbiAgaW1hZ2VyZW5kZXJpbmc6ICdpbWFnZVJlbmRlcmluZycsXG4gICdpbWFnZS1yZW5kZXJpbmcnOiAnaW1hZ2VSZW5kZXJpbmcnLFxuICBpbjI6ICdpbjInLFxuICBpbjogJ2luJyxcbiAgaW5saXN0OiAnaW5saXN0JyxcbiAgaW50ZXJjZXB0OiAnaW50ZXJjZXB0JyxcbiAgazE6ICdrMScsXG4gIGsyOiAnazInLFxuICBrMzogJ2szJyxcbiAgazQ6ICdrNCcsXG4gIGs6ICdrJyxcbiAga2VybmVsbWF0cml4OiAna2VybmVsTWF0cml4JyxcbiAga2VybmVsdW5pdGxlbmd0aDogJ2tlcm5lbFVuaXRMZW5ndGgnLFxuICBrZXJuaW5nOiAna2VybmluZycsXG4gIGtleXBvaW50czogJ2tleVBvaW50cycsXG4gIGtleXNwbGluZXM6ICdrZXlTcGxpbmVzJyxcbiAga2V5dGltZXM6ICdrZXlUaW1lcycsXG4gIGxlbmd0aGFkanVzdDogJ2xlbmd0aEFkanVzdCcsXG4gIGxldHRlcnNwYWNpbmc6ICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ2xldHRlci1zcGFjaW5nJzogJ2xldHRlclNwYWNpbmcnLFxuICBsaWdodGluZ2NvbG9yOiAnbGlnaHRpbmdDb2xvcicsXG4gICdsaWdodGluZy1jb2xvcic6ICdsaWdodGluZ0NvbG9yJyxcbiAgbGltaXRpbmdjb25lYW5nbGU6ICdsaW1pdGluZ0NvbmVBbmdsZScsXG4gIGxvY2FsOiAnbG9jYWwnLFxuICBtYXJrZXJlbmQ6ICdtYXJrZXJFbmQnLFxuICAnbWFya2VyLWVuZCc6ICdtYXJrZXJFbmQnLFxuICBtYXJrZXJoZWlnaHQ6ICdtYXJrZXJIZWlnaHQnLFxuICBtYXJrZXJtaWQ6ICdtYXJrZXJNaWQnLFxuICAnbWFya2VyLW1pZCc6ICdtYXJrZXJNaWQnLFxuICBtYXJrZXJzdGFydDogJ21hcmtlclN0YXJ0JyxcbiAgJ21hcmtlci1zdGFydCc6ICdtYXJrZXJTdGFydCcsXG4gIG1hcmtlcnVuaXRzOiAnbWFya2VyVW5pdHMnLFxuICBtYXJrZXJ3aWR0aDogJ21hcmtlcldpZHRoJyxcbiAgbWFzazogJ21hc2snLFxuICBtYXNrY29udGVudHVuaXRzOiAnbWFza0NvbnRlbnRVbml0cycsXG4gIG1hc2t1bml0czogJ21hc2tVbml0cycsXG4gIG1hdGhlbWF0aWNhbDogJ21hdGhlbWF0aWNhbCcsXG4gIG1vZGU6ICdtb2RlJyxcbiAgbnVtb2N0YXZlczogJ251bU9jdGF2ZXMnLFxuICBvZmZzZXQ6ICdvZmZzZXQnLFxuICBvcGFjaXR5OiAnb3BhY2l0eScsXG4gIG9wZXJhdG9yOiAnb3BlcmF0b3InLFxuICBvcmRlcjogJ29yZGVyJyxcbiAgb3JpZW50OiAnb3JpZW50JyxcbiAgb3JpZW50YXRpb246ICdvcmllbnRhdGlvbicsXG4gIG9yaWdpbjogJ29yaWdpbicsXG4gIG92ZXJmbG93OiAnb3ZlcmZsb3cnLFxuICBvdmVybGluZXBvc2l0aW9uOiAnb3ZlcmxpbmVQb3NpdGlvbicsXG4gICdvdmVybGluZS1wb3NpdGlvbic6ICdvdmVybGluZVBvc2l0aW9uJyxcbiAgb3ZlcmxpbmV0aGlja25lc3M6ICdvdmVybGluZVRoaWNrbmVzcycsXG4gICdvdmVybGluZS10aGlja25lc3MnOiAnb3ZlcmxpbmVUaGlja25lc3MnLFxuICBwYWludG9yZGVyOiAncGFpbnRPcmRlcicsXG4gICdwYWludC1vcmRlcic6ICdwYWludE9yZGVyJyxcbiAgcGFub3NlMTogJ3Bhbm9zZTEnLFxuICAncGFub3NlLTEnOiAncGFub3NlMScsXG4gIHBhdGhsZW5ndGg6ICdwYXRoTGVuZ3RoJyxcbiAgcGF0dGVybmNvbnRlbnR1bml0czogJ3BhdHRlcm5Db250ZW50VW5pdHMnLFxuICBwYXR0ZXJudHJhbnNmb3JtOiAncGF0dGVyblRyYW5zZm9ybScsXG4gIHBhdHRlcm51bml0czogJ3BhdHRlcm5Vbml0cycsXG4gIHBvaW50ZXJldmVudHM6ICdwb2ludGVyRXZlbnRzJyxcbiAgJ3BvaW50ZXItZXZlbnRzJzogJ3BvaW50ZXJFdmVudHMnLFxuICBwb2ludHM6ICdwb2ludHMnLFxuICBwb2ludHNhdHg6ICdwb2ludHNBdFgnLFxuICBwb2ludHNhdHk6ICdwb2ludHNBdFknLFxuICBwb2ludHNhdHo6ICdwb2ludHNBdFonLFxuICBwcmVmaXg6ICdwcmVmaXgnLFxuICBwcmVzZXJ2ZWFscGhhOiAncHJlc2VydmVBbHBoYScsXG4gIHByZXNlcnZlYXNwZWN0cmF0aW86ICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJyxcbiAgcHJpbWl0aXZldW5pdHM6ICdwcmltaXRpdmVVbml0cycsXG4gIHByb3BlcnR5OiAncHJvcGVydHknLFxuICByOiAncicsXG4gIHJhZGl1czogJ3JhZGl1cycsXG4gIHJlZng6ICdyZWZYJyxcbiAgcmVmeTogJ3JlZlknLFxuICByZW5kZXJpbmdpbnRlbnQ6ICdyZW5kZXJpbmdJbnRlbnQnLFxuICAncmVuZGVyaW5nLWludGVudCc6ICdyZW5kZXJpbmdJbnRlbnQnLFxuICByZXBlYXRjb3VudDogJ3JlcGVhdENvdW50JyxcbiAgcmVwZWF0ZHVyOiAncmVwZWF0RHVyJyxcbiAgcmVxdWlyZWRleHRlbnNpb25zOiAncmVxdWlyZWRFeHRlbnNpb25zJyxcbiAgcmVxdWlyZWRmZWF0dXJlczogJ3JlcXVpcmVkRmVhdHVyZXMnLFxuICByZXNvdXJjZTogJ3Jlc291cmNlJyxcbiAgcmVzdGFydDogJ3Jlc3RhcnQnLFxuICByZXN1bHQ6ICdyZXN1bHQnLFxuICByZXN1bHRzOiAncmVzdWx0cycsXG4gIHJvdGF0ZTogJ3JvdGF0ZScsXG4gIHJ4OiAncngnLFxuICByeTogJ3J5JyxcbiAgc2NhbGU6ICdzY2FsZScsXG4gIHNlY3VyaXR5OiAnc2VjdXJpdHknLFxuICBzZWVkOiAnc2VlZCcsXG4gIHNoYXBlcmVuZGVyaW5nOiAnc2hhcGVSZW5kZXJpbmcnLFxuICAnc2hhcGUtcmVuZGVyaW5nJzogJ3NoYXBlUmVuZGVyaW5nJyxcbiAgc2xvcGU6ICdzbG9wZScsXG4gIHNwYWNpbmc6ICdzcGFjaW5nJyxcbiAgc3BlY3VsYXJjb25zdGFudDogJ3NwZWN1bGFyQ29uc3RhbnQnLFxuICBzcGVjdWxhcmV4cG9uZW50OiAnc3BlY3VsYXJFeHBvbmVudCcsXG4gIHNwZWVkOiAnc3BlZWQnLFxuICBzcHJlYWRtZXRob2Q6ICdzcHJlYWRNZXRob2QnLFxuICBzdGFydG9mZnNldDogJ3N0YXJ0T2Zmc2V0JyxcbiAgc3RkZGV2aWF0aW9uOiAnc3RkRGV2aWF0aW9uJyxcbiAgc3RlbWg6ICdzdGVtaCcsXG4gIHN0ZW12OiAnc3RlbXYnLFxuICBzdGl0Y2h0aWxlczogJ3N0aXRjaFRpbGVzJyxcbiAgc3RvcGNvbG9yOiAnc3RvcENvbG9yJyxcbiAgJ3N0b3AtY29sb3InOiAnc3RvcENvbG9yJyxcbiAgc3RvcG9wYWNpdHk6ICdzdG9wT3BhY2l0eScsXG4gICdzdG9wLW9wYWNpdHknOiAnc3RvcE9wYWNpdHknLFxuICBzdHJpa2V0aHJvdWdocG9zaXRpb246ICdzdHJpa2V0aHJvdWdoUG9zaXRpb24nLFxuICAnc3RyaWtldGhyb3VnaC1wb3NpdGlvbic6ICdzdHJpa2V0aHJvdWdoUG9zaXRpb24nLFxuICBzdHJpa2V0aHJvdWdodGhpY2tuZXNzOiAnc3RyaWtldGhyb3VnaFRoaWNrbmVzcycsXG4gICdzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyc6ICdzdHJpa2V0aHJvdWdoVGhpY2tuZXNzJyxcbiAgc3RyaW5nOiAnc3RyaW5nJyxcbiAgc3Ryb2tlOiAnc3Ryb2tlJyxcbiAgc3Ryb2tlZGFzaGFycmF5OiAnc3Ryb2tlRGFzaGFycmF5JyxcbiAgJ3N0cm9rZS1kYXNoYXJyYXknOiAnc3Ryb2tlRGFzaGFycmF5JyxcbiAgc3Ryb2tlZGFzaG9mZnNldDogJ3N0cm9rZURhc2hvZmZzZXQnLFxuICAnc3Ryb2tlLWRhc2hvZmZzZXQnOiAnc3Ryb2tlRGFzaG9mZnNldCcsXG4gIHN0cm9rZWxpbmVjYXA6ICdzdHJva2VMaW5lY2FwJyxcbiAgJ3N0cm9rZS1saW5lY2FwJzogJ3N0cm9rZUxpbmVjYXAnLFxuICBzdHJva2VsaW5lam9pbjogJ3N0cm9rZUxpbmVqb2luJyxcbiAgJ3N0cm9rZS1saW5lam9pbic6ICdzdHJva2VMaW5lam9pbicsXG4gIHN0cm9rZW1pdGVybGltaXQ6ICdzdHJva2VNaXRlcmxpbWl0JyxcbiAgJ3N0cm9rZS1taXRlcmxpbWl0JzogJ3N0cm9rZU1pdGVybGltaXQnLFxuICBzdHJva2V3aWR0aDogJ3N0cm9rZVdpZHRoJyxcbiAgJ3N0cm9rZS13aWR0aCc6ICdzdHJva2VXaWR0aCcsXG4gIHN0cm9rZW9wYWNpdHk6ICdzdHJva2VPcGFjaXR5JyxcbiAgJ3N0cm9rZS1vcGFjaXR5JzogJ3N0cm9rZU9wYWNpdHknLFxuICBzdXBwcmVzc2NvbnRlbnRlZGl0YWJsZXdhcm5pbmc6ICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnLFxuICBzdXBwcmVzc2h5ZHJhdGlvbndhcm5pbmc6ICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnLFxuICBzdXJmYWNlc2NhbGU6ICdzdXJmYWNlU2NhbGUnLFxuICBzeXN0ZW1sYW5ndWFnZTogJ3N5c3RlbUxhbmd1YWdlJyxcbiAgdGFibGV2YWx1ZXM6ICd0YWJsZVZhbHVlcycsXG4gIHRhcmdldHg6ICd0YXJnZXRYJyxcbiAgdGFyZ2V0eTogJ3RhcmdldFknLFxuICB0ZXh0YW5jaG9yOiAndGV4dEFuY2hvcicsXG4gICd0ZXh0LWFuY2hvcic6ICd0ZXh0QW5jaG9yJyxcbiAgdGV4dGRlY29yYXRpb246ICd0ZXh0RGVjb3JhdGlvbicsXG4gICd0ZXh0LWRlY29yYXRpb24nOiAndGV4dERlY29yYXRpb24nLFxuICB0ZXh0bGVuZ3RoOiAndGV4dExlbmd0aCcsXG4gIHRleHRyZW5kZXJpbmc6ICd0ZXh0UmVuZGVyaW5nJyxcbiAgJ3RleHQtcmVuZGVyaW5nJzogJ3RleHRSZW5kZXJpbmcnLFxuICB0bzogJ3RvJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNmb3JtJyxcbiAgdHlwZW9mOiAndHlwZW9mJyxcbiAgdTE6ICd1MScsXG4gIHUyOiAndTInLFxuICB1bmRlcmxpbmVwb3NpdGlvbjogJ3VuZGVybGluZVBvc2l0aW9uJyxcbiAgJ3VuZGVybGluZS1wb3NpdGlvbic6ICd1bmRlcmxpbmVQb3NpdGlvbicsXG4gIHVuZGVybGluZXRoaWNrbmVzczogJ3VuZGVybGluZVRoaWNrbmVzcycsXG4gICd1bmRlcmxpbmUtdGhpY2tuZXNzJzogJ3VuZGVybGluZVRoaWNrbmVzcycsXG4gIHVuaWNvZGU6ICd1bmljb2RlJyxcbiAgdW5pY29kZWJpZGk6ICd1bmljb2RlQmlkaScsXG4gICd1bmljb2RlLWJpZGknOiAndW5pY29kZUJpZGknLFxuICB1bmljb2RlcmFuZ2U6ICd1bmljb2RlUmFuZ2UnLFxuICAndW5pY29kZS1yYW5nZSc6ICd1bmljb2RlUmFuZ2UnLFxuICB1bml0c3BlcmVtOiAndW5pdHNQZXJFbScsXG4gICd1bml0cy1wZXItZW0nOiAndW5pdHNQZXJFbScsXG4gIHVuc2VsZWN0YWJsZTogJ3Vuc2VsZWN0YWJsZScsXG4gIHZhbHBoYWJldGljOiAndkFscGhhYmV0aWMnLFxuICAndi1hbHBoYWJldGljJzogJ3ZBbHBoYWJldGljJyxcbiAgdmFsdWVzOiAndmFsdWVzJyxcbiAgdmVjdG9yZWZmZWN0OiAndmVjdG9yRWZmZWN0JyxcbiAgJ3ZlY3Rvci1lZmZlY3QnOiAndmVjdG9yRWZmZWN0JyxcbiAgdmVyc2lvbjogJ3ZlcnNpb24nLFxuICB2ZXJ0YWR2eTogJ3ZlcnRBZHZZJyxcbiAgJ3ZlcnQtYWR2LXknOiAndmVydEFkdlknLFxuICB2ZXJ0b3JpZ2lueDogJ3ZlcnRPcmlnaW5YJyxcbiAgJ3ZlcnQtb3JpZ2luLXgnOiAndmVydE9yaWdpblgnLFxuICB2ZXJ0b3JpZ2lueTogJ3ZlcnRPcmlnaW5ZJyxcbiAgJ3ZlcnQtb3JpZ2luLXknOiAndmVydE9yaWdpblknLFxuICB2aGFuZ2luZzogJ3ZIYW5naW5nJyxcbiAgJ3YtaGFuZ2luZyc6ICd2SGFuZ2luZycsXG4gIHZpZGVvZ3JhcGhpYzogJ3ZJZGVvZ3JhcGhpYycsXG4gICd2LWlkZW9ncmFwaGljJzogJ3ZJZGVvZ3JhcGhpYycsXG4gIHZpZXdib3g6ICd2aWV3Qm94JyxcbiAgdmlld3RhcmdldDogJ3ZpZXdUYXJnZXQnLFxuICB2aXNpYmlsaXR5OiAndmlzaWJpbGl0eScsXG4gIHZtYXRoZW1hdGljYWw6ICd2TWF0aGVtYXRpY2FsJyxcbiAgJ3YtbWF0aGVtYXRpY2FsJzogJ3ZNYXRoZW1hdGljYWwnLFxuICB2b2NhYjogJ3ZvY2FiJyxcbiAgd2lkdGhzOiAnd2lkdGhzJyxcbiAgd29yZHNwYWNpbmc6ICd3b3JkU3BhY2luZycsXG4gICd3b3JkLXNwYWNpbmcnOiAnd29yZFNwYWNpbmcnLFxuICB3cml0aW5nbW9kZTogJ3dyaXRpbmdNb2RlJyxcbiAgJ3dyaXRpbmctbW9kZSc6ICd3cml0aW5nTW9kZScsXG4gIHgxOiAneDEnLFxuICB4MjogJ3gyJyxcbiAgeDogJ3gnLFxuICB4Y2hhbm5lbHNlbGVjdG9yOiAneENoYW5uZWxTZWxlY3RvcicsXG4gIHhoZWlnaHQ6ICd4SGVpZ2h0JyxcbiAgJ3gtaGVpZ2h0JzogJ3hIZWlnaHQnLFxuICB4bGlua2FjdHVhdGU6ICd4bGlua0FjdHVhdGUnLFxuICAneGxpbms6YWN0dWF0ZSc6ICd4bGlua0FjdHVhdGUnLFxuICB4bGlua2FyY3JvbGU6ICd4bGlua0FyY3JvbGUnLFxuICAneGxpbms6YXJjcm9sZSc6ICd4bGlua0FyY3JvbGUnLFxuICB4bGlua2hyZWY6ICd4bGlua0hyZWYnLFxuICAneGxpbms6aHJlZic6ICd4bGlua0hyZWYnLFxuICB4bGlua3JvbGU6ICd4bGlua1JvbGUnLFxuICAneGxpbms6cm9sZSc6ICd4bGlua1JvbGUnLFxuICB4bGlua3Nob3c6ICd4bGlua1Nob3cnLFxuICAneGxpbms6c2hvdyc6ICd4bGlua1Nob3cnLFxuICB4bGlua3RpdGxlOiAneGxpbmtUaXRsZScsXG4gICd4bGluazp0aXRsZSc6ICd4bGlua1RpdGxlJyxcbiAgeGxpbmt0eXBlOiAneGxpbmtUeXBlJyxcbiAgJ3hsaW5rOnR5cGUnOiAneGxpbmtUeXBlJyxcbiAgeG1sYmFzZTogJ3htbEJhc2UnLFxuICAneG1sOmJhc2UnOiAneG1sQmFzZScsXG4gIHhtbGxhbmc6ICd4bWxMYW5nJyxcbiAgJ3htbDpsYW5nJzogJ3htbExhbmcnLFxuICB4bWxuczogJ3htbG5zJyxcbiAgJ3htbDpzcGFjZSc6ICd4bWxTcGFjZScsXG4gIHhtbG5zeGxpbms6ICd4bWxuc1hsaW5rJyxcbiAgJ3htbG5zOnhsaW5rJzogJ3htbG5zWGxpbmsnLFxuICB4bWxzcGFjZTogJ3htbFNwYWNlJyxcbiAgeTE6ICd5MScsXG4gIHkyOiAneTInLFxuICB5OiAneScsXG4gIHljaGFubmVsc2VsZWN0b3I6ICd5Q2hhbm5lbFNlbGVjdG9yJyxcbiAgejogJ3onLFxuICB6b29tYW5kcGFuOiAnem9vbUFuZFBhbidcbn07XG5cbnZhciBhcmlhUHJvcGVydGllcyA9IHtcbiAgJ2FyaWEtY3VycmVudCc6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWRldGFpbHMnOiAwLFxuICAnYXJpYS1kaXNhYmxlZCc6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWhpZGRlbic6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWludmFsaWQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1rZXlzaG9ydGN1dHMnOiAwLFxuICAnYXJpYS1sYWJlbCc6IDAsXG4gICdhcmlhLXJvbGVkZXNjcmlwdGlvbic6IDAsXG4gIC8vIFdpZGdldCBBdHRyaWJ1dGVzXG4gICdhcmlhLWF1dG9jb21wbGV0ZSc6IDAsXG4gICdhcmlhLWNoZWNrZWQnOiAwLFxuICAnYXJpYS1leHBhbmRlZCc6IDAsXG4gICdhcmlhLWhhc3BvcHVwJzogMCxcbiAgJ2FyaWEtbGV2ZWwnOiAwLFxuICAnYXJpYS1tb2RhbCc6IDAsXG4gICdhcmlhLW11bHRpbGluZSc6IDAsXG4gICdhcmlhLW11bHRpc2VsZWN0YWJsZSc6IDAsXG4gICdhcmlhLW9yaWVudGF0aW9uJzogMCxcbiAgJ2FyaWEtcGxhY2Vob2xkZXInOiAwLFxuICAnYXJpYS1wcmVzc2VkJzogMCxcbiAgJ2FyaWEtcmVhZG9ubHknOiAwLFxuICAnYXJpYS1yZXF1aXJlZCc6IDAsXG4gICdhcmlhLXNlbGVjdGVkJzogMCxcbiAgJ2FyaWEtc29ydCc6IDAsXG4gICdhcmlhLXZhbHVlbWF4JzogMCxcbiAgJ2FyaWEtdmFsdWVtaW4nOiAwLFxuICAnYXJpYS12YWx1ZW5vdyc6IDAsXG4gICdhcmlhLXZhbHVldGV4dCc6IDAsXG4gIC8vIExpdmUgUmVnaW9uIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtYXRvbWljJzogMCxcbiAgJ2FyaWEtYnVzeSc6IDAsXG4gICdhcmlhLWxpdmUnOiAwLFxuICAnYXJpYS1yZWxldmFudCc6IDAsXG4gIC8vIERyYWctYW5kLURyb3AgQXR0cmlidXRlc1xuICAnYXJpYS1kcm9wZWZmZWN0JzogMCxcbiAgJ2FyaWEtZ3JhYmJlZCc6IDAsXG4gIC8vIFJlbGF0aW9uc2hpcCBBdHRyaWJ1dGVzXG4gICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnOiAwLFxuICAnYXJpYS1jb2xjb3VudCc6IDAsXG4gICdhcmlhLWNvbGluZGV4JzogMCxcbiAgJ2FyaWEtY29sc3Bhbic6IDAsXG4gICdhcmlhLWNvbnRyb2xzJzogMCxcbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiAwLFxuICAnYXJpYS1lcnJvcm1lc3NhZ2UnOiAwLFxuICAnYXJpYS1mbG93dG8nOiAwLFxuICAnYXJpYS1sYWJlbGxlZGJ5JzogMCxcbiAgJ2FyaWEtb3ducyc6IDAsXG4gICdhcmlhLXBvc2luc2V0JzogMCxcbiAgJ2FyaWEtcm93Y291bnQnOiAwLFxuICAnYXJpYS1yb3dpbmRleCc6IDAsXG4gICdhcmlhLXJvd3NwYW4nOiAwLFxuICAnYXJpYS1zZXRzaXplJzogMFxufTtcblxudmFyIHdhcm5lZFByb3BlcnRpZXMgPSB7fTtcbnZhciByQVJJQSA9IG5ldyBSZWdFeHAoJ14oYXJpYSktWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIHJBUklBQ2FtZWwgPSBuZXcgUmVnRXhwKCdeKGFyaWEpW0EtWl1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgaGFzT3duUHJvcGVydHkkMSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHkodGFnTmFtZSwgbmFtZSkge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5JDEuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzLCBuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAockFSSUFDYW1lbC50ZXN0KG5hbWUpKSB7XG4gICAgICB2YXIgYXJpYU5hbWUgPSAnYXJpYS0nICsgbmFtZS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFyIGNvcnJlY3ROYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoYXJpYU5hbWUpID8gYXJpYU5hbWUgOiBudWxsOyAvLyBJZiB0aGlzIGlzIGFuIGFyaWEtKiBhdHRyaWJ1dGUsIGJ1dCBpcyBub3QgbGlzdGVkIGluIHRoZSBrbm93biBET01cbiAgICAgIC8vIERPTSBwcm9wZXJ0aWVzLCB0aGVuIGl0IGlzIGFuIGludmFsaWQgYXJpYS0qIGF0dHJpYnV0ZS5cblxuICAgICAgaWYgKGNvcnJlY3ROYW1lID09IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgQVJJQSBhdHRyaWJ1dGUgYCVzYC4gQVJJQSBhdHRyaWJ1dGVzIGZvbGxvdyB0aGUgcGF0dGVybiBhcmlhLSogYW5kIG11c3QgYmUgbG93ZXJjYXNlLicsIG5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gLy8gYXJpYS0qIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGxvd2VyY2FzZTsgc3VnZ2VzdCB0aGUgbG93ZXJjYXNlIHZlcnNpb24uXG5cblxuICAgICAgaWYgKG5hbWUgIT09IGNvcnJlY3ROYW1lKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIEFSSUEgYXR0cmlidXRlIGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIGNvcnJlY3ROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJBUklBLnRlc3QobmFtZSkpIHtcbiAgICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBhcmlhUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkgPyBsb3dlckNhc2VkTmFtZSA6IG51bGw7IC8vIElmIHRoaXMgaXMgYW4gYXJpYS0qIGF0dHJpYnV0ZSwgYnV0IGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGtub3duIERPTVxuICAgICAgLy8gRE9NIHByb3BlcnRpZXMsIHRoZW4gaXQgaXMgYW4gaW52YWxpZCBhcmlhLSogYXR0cmlidXRlLlxuXG4gICAgICBpZiAoc3RhbmRhcmROYW1lID09IG51bGwpIHtcbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gLy8gYXJpYS0qIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGxvd2VyY2FzZTsgc3VnZ2VzdCB0aGUgbG93ZXJjYXNlIHZlcnNpb24uXG5cblxuICAgICAgaWYgKG5hbWUgIT09IHN0YW5kYXJkTmFtZSkge1xuICAgICAgICBlcnJvcignVW5rbm93biBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBzdGFuZGFyZE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gd2FybkludmFsaWRBUklBUHJvcHModHlwZSwgcHJvcHMpIHtcbiAge1xuICAgIHZhciBpbnZhbGlkUHJvcHMgPSBbXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgdmFyIGlzVmFsaWQgPSB2YWxpZGF0ZVByb3BlcnR5KHR5cGUsIGtleSk7XG5cbiAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICBpbnZhbGlkUHJvcHMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB1bmtub3duUHJvcFN0cmluZyA9IGludmFsaWRQcm9wcy5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIHJldHVybiAnYCcgKyBwcm9wICsgJ2AnO1xuICAgIH0pLmpvaW4oJywgJyk7XG5cbiAgICBpZiAoaW52YWxpZFByb3BzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgYXJpYSBwcm9wICVzIG9uIDwlcz4gdGFnLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtYXJpYS1wcm9wcycsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9IGVsc2UgaWYgKGludmFsaWRQcm9wcy5sZW5ndGggPiAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCBhcmlhIHByb3BzICVzIG9uIDwlcz4gdGFnLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtYXJpYS1wcm9wcycsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3YXJuSW52YWxpZEFSSUFQcm9wcyh0eXBlLCBwcm9wcyk7XG59XG5cbnZhciBkaWRXYXJuVmFsdWVOdWxsID0gZmFsc2U7XG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXMkMSh0eXBlLCBwcm9wcykge1xuICB7XG4gICAgaWYgKHR5cGUgIT09ICdpbnB1dCcgJiYgdHlwZSAhPT0gJ3RleHRhcmVhJyAmJiB0eXBlICE9PSAnc2VsZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wcyAhPSBudWxsICYmIHByb3BzLnZhbHVlID09PSBudWxsICYmICFkaWRXYXJuVmFsdWVOdWxsKSB7XG4gICAgICBkaWRXYXJuVmFsdWVOdWxsID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGUgPT09ICdzZWxlY3QnICYmIHByb3BzLm11bHRpcGxlKSB7XG4gICAgICAgIGVycm9yKCdgdmFsdWVgIHByb3Agb24gYCVzYCBzaG91bGQgbm90IGJlIG51bGwuICcgKyAnQ29uc2lkZXIgdXNpbmcgYW4gZW1wdHkgYXJyYXkgd2hlbiBgbXVsdGlwbGVgIGlzIHNldCB0byBgdHJ1ZWAgJyArICd0byBjbGVhciB0aGUgY29tcG9uZW50IG9yIGB1bmRlZmluZWRgIGZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy4nLCB0eXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCdgdmFsdWVgIHByb3Agb24gYCVzYCBzaG91bGQgbm90IGJlIG51bGwuICcgKyAnQ29uc2lkZXIgdXNpbmcgYW4gZW1wdHkgc3RyaW5nIHRvIGNsZWFyIHRoZSBjb21wb25lbnQgb3IgYHVuZGVmaW5lZGAgJyArICdmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB2YWxpZGF0ZVByb3BlcnR5JDEgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB2YXIgd2FybmVkUHJvcGVydGllcyQxID0ge307XG4gIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuICB2YXIgRVZFTlRfTkFNRV9SRUdFWCA9IC9eb24uLztcbiAgdmFyIElOVkFMSURfRVZFTlRfTkFNRV9SRUdFWCA9IC9eb25bXkEtWl0vO1xuICB2YXIgckFSSUEkMSA9IG5ldyBSZWdFeHAoJ14oYXJpYSktWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xuICB2YXIgckFSSUFDYW1lbCQxID0gbmV3IFJlZ0V4cCgnXihhcmlhKVtBLVpdWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xuXG4gIHZhbGlkYXRlUHJvcGVydHkkMSA9IGZ1bmN0aW9uICh0YWdOYW1lLCBuYW1lLCB2YWx1ZSwgZXZlbnRSZWdpc3RyeSkge1xuICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzJDEsIG5hbWUpICYmIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnb25mb2N1c2luJyB8fCBsb3dlckNhc2VkTmFtZSA9PT0gJ29uZm9jdXNvdXQnKSB7XG4gICAgICBlcnJvcignUmVhY3QgdXNlcyBvbkZvY3VzIGFuZCBvbkJsdXIgaW5zdGVhZCBvZiBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQuICcgKyAnQWxsIFJlYWN0IGV2ZW50cyBhcmUgbm9ybWFsaXplZCB0byBidWJibGUsIHNvIG9uRm9jdXNJbiBhbmQgb25Gb2N1c091dCAnICsgJ2FyZSBub3QgbmVlZGVkL3N1cHBvcnRlZCBieSBSZWFjdC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gV2UgY2FuJ3QgcmVseSBvbiB0aGUgZXZlbnQgc3lzdGVtIGJlaW5nIGluamVjdGVkIG9uIHRoZSBzZXJ2ZXIuXG5cblxuICAgIGlmIChldmVudFJlZ2lzdHJ5ICE9IG51bGwpIHtcbiAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzID0gZXZlbnRSZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLFxuICAgICAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSBldmVudFJlZ2lzdHJ5LnBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM7XG5cbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1tsb3dlckNhc2VkTmFtZV0gOiBudWxsO1xuXG4gICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgZXJyb3IoJ1Vua25vd24gZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiBJdCB3aWxsIGJlIGlnbm9yZWQuJywgbmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgIC8vIElmIG5vIGV2ZW50IHBsdWdpbnMgaGF2ZSBiZWVuIGluamVjdGVkLCB3ZSBhcmUgaW4gYSBzZXJ2ZXIgZW52aXJvbm1lbnQuXG4gICAgICAvLyBTbyB3ZSBjYW4ndCB0ZWxsIGlmIHRoZSBldmVudCBuYW1lIGlzIGNvcnJlY3QgZm9yIHN1cmUsIGJ1dCB3ZSBjYW4gZmlsdGVyXG4gICAgICAvLyBvdXQga25vd24gYmFkIG9uZXMgbGlrZSBgb25jbGlja2AuIFdlIGNhbid0IHN1Z2dlc3QgYSBzcGVjaWZpYyByZXBsYWNlbWVudCB0aG91Z2guXG4gICAgICBpZiAoSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiAnICsgJ1JlYWN0IGV2ZW50cyB1c2UgdGhlIGNhbWVsQ2FzZSBuYW1pbmcgY29udmVudGlvbiwgZm9yIGV4YW1wbGUgYG9uQ2xpY2tgLicsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBMZXQgdGhlIEFSSUEgYXR0cmlidXRlIGhvb2sgdmFsaWRhdGUgQVJJQSBhdHRyaWJ1dGVzXG5cblxuICAgIGlmIChyQVJJQSQxLnRlc3QobmFtZSkgfHwgckFSSUFDYW1lbCQxLnRlc3QobmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2lubmVyaHRtbCcpIHtcbiAgICAgIGVycm9yKCdEaXJlY3RseSBzZXR0aW5nIHByb3BlcnR5IGBpbm5lckhUTUxgIGlzIG5vdCBwZXJtaXR0ZWQuICcgKyAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIGxvb2t1cCBkb2N1bWVudGF0aW9uIG9uIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdhcmlhJykge1xuICAgICAgZXJyb3IoJ1RoZSBgYXJpYWAgYXR0cmlidXRlIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGluIFJlYWN0LiAnICsgJ1Bhc3MgaW5kaXZpZHVhbCBgYXJpYS1gIGF0dHJpYnV0ZXMgaW5zdGVhZC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2lzJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhIGAlc2AgZm9yIGEgc3RyaW5nIGF0dHJpYnV0ZSBgaXNgLiBJZiB0aGlzIGlzIGV4cGVjdGVkLCBjYXN0ICcgKyAndGhlIHZhbHVlIHRvIGEgc3RyaW5nLicsIHR5cGVvZiB2YWx1ZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWx1ZSkpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBOYU4gZm9yIHRoZSBgJXNgIGF0dHJpYnV0ZS4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCAnICsgJ3RoZSB2YWx1ZSB0byBhIHN0cmluZy4nLCBuYW1lKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8obmFtZSk7XG4gICAgdmFyIGlzUmVzZXJ2ZWQgPSBwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEOyAvLyBLbm93biBhdHRyaWJ1dGVzIHNob3VsZCBtYXRjaCB0aGUgY2FzaW5nIHNwZWNpZmllZCBpbiB0aGUgcHJvcGVydHkgY29uZmlnLlxuXG4gICAgaWYgKHBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdO1xuXG4gICAgICBpZiAoc3RhbmRhcmROYW1lICE9PSBuYW1lKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIERPTSBwcm9wZXJ0eSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBzdGFuZGFyZE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQgJiYgbmFtZSAhPT0gbG93ZXJDYXNlZE5hbWUpIHtcbiAgICAgIC8vIFVua25vd24gYXR0cmlidXRlcyBzaG91bGQgaGF2ZSBsb3dlcmNhc2UgY2FzaW5nIHNpbmNlIHRoYXQncyBob3cgdGhleVxuICAgICAgLy8gd2lsbCBiZSBjYXNlZCBhbnl3YXkgd2l0aCBzZXJ2ZXIgcmVuZGVyaW5nLlxuICAgICAgZXJyb3IoJ1JlYWN0IGRvZXMgbm90IHJlY29nbml6ZSB0aGUgYCVzYCBwcm9wIG9uIGEgRE9NIGVsZW1lbnQuIElmIHlvdSAnICsgJ2ludGVudGlvbmFsbHkgd2FudCBpdCB0byBhcHBlYXIgaW4gdGhlIERPTSBhcyBhIGN1c3RvbSAnICsgJ2F0dHJpYnV0ZSwgc3BlbGwgaXQgYXMgbG93ZXJjYXNlIGAlc2AgaW5zdGVhZC4gJyArICdJZiB5b3UgYWNjaWRlbnRhbGx5IHBhc3NlZCBpdCBmcm9tIGEgcGFyZW50IGNvbXBvbmVudCwgcmVtb3ZlICcgKyAnaXQgZnJvbSB0aGUgRE9NIGVsZW1lbnQuJywgbmFtZSwgbG93ZXJDYXNlZE5hbWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nICYmIHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVycm9yKCdSZWNlaXZlZCBgJXNgIGZvciBhIG5vbi1ib29sZWFuIGF0dHJpYnV0ZSBgJXNgLlxcblxcbicgKyAnSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAnICsgJyVzPVwiJXNcIiBvciAlcz17dmFsdWUudG9TdHJpbmcoKX0uJywgdmFsdWUsIG5hbWUsIG5hbWUsIHZhbHVlLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCdSZWNlaXZlZCBgJXNgIGZvciBhIG5vbi1ib29sZWFuIGF0dHJpYnV0ZSBgJXNgLlxcblxcbicgKyAnSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAnICsgJyVzPVwiJXNcIiBvciAlcz17dmFsdWUudG9TdHJpbmcoKX0uXFxuXFxuJyArICdJZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgJyArICdwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLCB2YWx1ZSwgbmFtZSwgbmFtZSwgdmFsdWUsIG5hbWUsIG5hbWUsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBOb3cgdGhhdCB3ZSd2ZSB2YWxpZGF0ZWQgY2FzaW5nLCBkbyBub3QgdmFsaWRhdGVcbiAgICAvLyBkYXRhIHR5cGVzIGZvciByZXNlcnZlZCBwcm9wc1xuXG5cbiAgICBpZiAoaXNSZXNlcnZlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBXYXJuIHdoZW4gYSBrbm93biBhdHRyaWJ1dGUgaXMgYSBiYWQgdHlwZVxuXG5cbiAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gV2FybiB3aGVuIHBhc3NpbmcgdGhlIHN0cmluZ3MgJ2ZhbHNlJyBvciAndHJ1ZScgaW50byBhIGJvb2xlYW4gcHJvcFxuXG5cbiAgICBpZiAoKHZhbHVlID09PSAnZmFsc2UnIHx8IHZhbHVlID09PSAndHJ1ZScpICYmIHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gQk9PTEVBTikge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIHRoZSBzdHJpbmcgYCVzYCBmb3IgdGhlIGJvb2xlYW4gYXR0cmlidXRlIGAlc2AuICcgKyAnJXMgJyArICdEaWQgeW91IG1lYW4gJXM9eyVzfT8nLCB2YWx1ZSwgbmFtZSwgdmFsdWUgPT09ICdmYWxzZScgPyAnVGhlIGJyb3dzZXIgd2lsbCBpbnRlcnByZXQgaXQgYXMgYSB0cnV0aHkgdmFsdWUuJyA6ICdBbHRob3VnaCB0aGlzIHdvcmtzLCBpdCB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGlmIHlvdSBwYXNzIHRoZSBzdHJpbmcgXCJmYWxzZVwiLicsIG5hbWUsIHZhbHVlKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuXG52YXIgd2FyblVua25vd25Qcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KSB7XG4gIHtcbiAgICB2YXIgdW5rbm93blByb3BzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gdmFsaWRhdGVQcm9wZXJ0eSQxKHR5cGUsIGtleSwgcHJvcHNba2V5XSwgZXZlbnRSZWdpc3RyeSk7XG5cbiAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICB1bmtub3duUHJvcHMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB1bmtub3duUHJvcFN0cmluZyA9IHVua25vd25Qcm9wcy5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIHJldHVybiAnYCcgKyBwcm9wICsgJ2AnO1xuICAgIH0pLmpvaW4oJywgJyk7XG5cbiAgICBpZiAodW5rbm93blByb3BzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgdmFsdWUgZm9yIHByb3AgJXMgb24gPCVzPiB0YWcuIEVpdGhlciByZW1vdmUgaXQgZnJvbSB0aGUgZWxlbWVudCwgJyArICdvciBwYXNzIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZSB0byBrZWVwIGl0IGluIHRoZSBET00uICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvYXR0cmlidXRlLWJlaGF2aW9yICcsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9IGVsc2UgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPiAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCB2YWx1ZXMgZm9yIHByb3BzICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgZWxlbWVudCwgJyArICdvciBwYXNzIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZSB0byBrZWVwIHRoZW0gaW4gdGhlIERPTS4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9hdHRyaWJ1dGUtYmVoYXZpb3IgJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzJDIodHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpIHtcbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHdhcm5Vbmtub3duUHJvcGVydGllcyh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSk7XG59XG5cbnZhciBJU19FVkVOVF9IQU5ETEVfTk9OX01BTkFHRURfTk9ERSA9IDE7XG52YXIgSVNfTk9OX0RFTEVHQVRFRCA9IDEgPDwgMTtcbnZhciBJU19DQVBUVVJFX1BIQVNFID0gMSA8PCAyO1xudmFyIElTX1JFUExBWUVEID0gMSA8PCA0O1xuLy8gc2V0IHRvIExFR0FDWV9GQl9TVVBQT1JULiBMRUdBQ1lfRkJfU1VQUE9SVCBvbmx5IGdldHMgc2V0IHdoZW5cbi8vIHdlIGNhbGwgd2lsbERlZmVyTGF0ZXJGb3JMZWdhY3lGQlN1cHBvcnQsIHRodXMgbm90IGJhaWxpbmcgb3V0XG4vLyB3aWxsIHJlc3VsdCBpbiBlbmRsZXNzIGN5Y2xlcyBsaWtlIGFuIGluZmluaXRlIGxvb3AuXG4vLyBXZSBhbHNvIGRvbid0IHdhbnQgdG8gZGVmZXIgZHVyaW5nIGV2ZW50IHJlcGxheWluZy5cblxudmFyIFNIT1VMRF9OT1RfUFJPQ0VTU19QT0xZRklMTF9FVkVOVF9QTFVHSU5TID0gSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUgfCBJU19OT05fREVMRUdBVEVEIHwgSVNfQ0FQVFVSRV9QSEFTRTtcblxuLyoqXG4gKiBHZXRzIHRoZSB0YXJnZXQgbm9kZSBmcm9tIGEgbmF0aXZlIGJyb3dzZXIgZXZlbnQgYnkgYWNjb3VudGluZyBmb3JcbiAqIGluY29uc2lzdGVuY2llcyBpbiBicm93c2VyIERPTSBBUElzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge0RPTUV2ZW50VGFyZ2V0fSBUYXJnZXQgbm9kZS5cbiAqL1xuXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkge1xuICAvLyBGYWxsYmFjayB0byBuYXRpdmVFdmVudC5zcmNFbGVtZW50IGZvciBJRTlcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjUwNlxuICB2YXIgdGFyZ2V0ID0gbmF0aXZlRXZlbnQudGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgfHwgd2luZG93OyAvLyBOb3JtYWxpemUgU1ZHIDx1c2U+IGVsZW1lbnQgZXZlbnRzICM0OTYzXG5cbiAgaWYgKHRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCkge1xuICAgIHRhcmdldCA9IHRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudDtcbiAgfSAvLyBTYWZhcmkgbWF5IGZpcmUgZXZlbnRzIG9uIHRleHQgbm9kZXMgKE5vZGUuVEVYVF9OT0RFIGlzIDMpLlxuICAvLyBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxuXG5cbiAgcmV0dXJuIHRhcmdldC5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFID8gdGFyZ2V0LnBhcmVudE5vZGUgOiB0YXJnZXQ7XG59XG5cbnZhciByZXN0b3JlSW1wbCA9IG51bGw7XG52YXIgcmVzdG9yZVRhcmdldCA9IG51bGw7XG52YXIgcmVzdG9yZVF1ZXVlID0gbnVsbDtcblxuZnVuY3Rpb24gcmVzdG9yZVN0YXRlT2ZUYXJnZXQodGFyZ2V0KSB7XG4gIC8vIFdlIHBlcmZvcm0gdGhpcyB0cmFuc2xhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBldmVudCBsb29wIHNvIHRoYXQgd2VcbiAgLy8gYWx3YXlzIHJlY2VpdmUgdGhlIGNvcnJlY3QgZmliZXIgaGVyZVxuICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0KTtcblxuICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICAvLyBVbm1vdW50ZWRcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoISh0eXBlb2YgcmVzdG9yZUltcGwgPT09ICdmdW5jdGlvbicpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwic2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKCkgbmVlZHMgdG8gYmUgY2FsbGVkIHRvIGhhbmRsZSBhIHRhcmdldCBmb3IgY29udHJvbGxlZCBldmVudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3RhdGVOb2RlID0gaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGU7IC8vIEd1YXJkIGFnYWluc3QgRmliZXIgYmVpbmcgdW5tb3VudGVkLlxuXG4gIGlmIChzdGF0ZU5vZGUpIHtcbiAgICB2YXIgX3Byb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShzdGF0ZU5vZGUpO1xuXG4gICAgcmVzdG9yZUltcGwoaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGUsIGludGVybmFsSW5zdGFuY2UudHlwZSwgX3Byb3BzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRSZXN0b3JlSW1wbGVtZW50YXRpb24oaW1wbCkge1xuICByZXN0b3JlSW1wbCA9IGltcGw7XG59XG5mdW5jdGlvbiBlbnF1ZXVlU3RhdGVSZXN0b3JlKHRhcmdldCkge1xuICBpZiAocmVzdG9yZVRhcmdldCkge1xuICAgIGlmIChyZXN0b3JlUXVldWUpIHtcbiAgICAgIHJlc3RvcmVRdWV1ZS5wdXNoKHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3RvcmVRdWV1ZSA9IFt0YXJnZXRdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXN0b3JlVGFyZ2V0ID0gdGFyZ2V0O1xuICB9XG59XG5mdW5jdGlvbiBuZWVkc1N0YXRlUmVzdG9yZSgpIHtcbiAgcmV0dXJuIHJlc3RvcmVUYXJnZXQgIT09IG51bGwgfHwgcmVzdG9yZVF1ZXVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gcmVzdG9yZVN0YXRlSWZOZWVkZWQoKSB7XG4gIGlmICghcmVzdG9yZVRhcmdldCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSByZXN0b3JlVGFyZ2V0O1xuICB2YXIgcXVldWVkVGFyZ2V0cyA9IHJlc3RvcmVRdWV1ZTtcbiAgcmVzdG9yZVRhcmdldCA9IG51bGw7XG4gIHJlc3RvcmVRdWV1ZSA9IG51bGw7XG4gIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCk7XG5cbiAgaWYgKHF1ZXVlZFRhcmdldHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlZFRhcmdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHF1ZXVlZFRhcmdldHNbaV0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyB0aGUgcmVuZGVyZXIuIFN1Y2ggYXMgd2hlbiB3ZSdyZSBkaXNwYXRjaGluZyBldmVudHMgb3IgaWYgdGhpcmQgcGFydHlcbi8vIGxpYnJhcmllcyBuZWVkIHRvIGNhbGwgYmF0Y2hlZFVwZGF0ZXMuIEV2ZW50dWFsbHksIHRoaXMgQVBJIHdpbGwgZ28gYXdheSB3aGVuXG4vLyBldmVyeXRoaW5nIGlzIGJhdGNoZWQgYnkgZGVmYXVsdC4gV2UnbGwgdGhlbiBoYXZlIGEgc2ltaWxhciBBUEkgdG8gb3B0LW91dCBvZlxuLy8gc2NoZWR1bGVkIHdvcmsgYW5kIGluc3RlYWQgZG8gc3luY2hyb25vdXMgd29yay5cbi8vIERlZmF1bHRzXG5cbnZhciBiYXRjaGVkVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoZm4sIGJvb2trZWVwaW5nKSB7XG4gIHJldHVybiBmbihib29ra2VlcGluZyk7XG59O1xuXG52YXIgZGlzY3JldGVVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uIChmbiwgYSwgYiwgYywgZCkge1xuICByZXR1cm4gZm4oYSwgYiwgYywgZCk7XG59O1xuXG52YXIgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKCkge307XG5cbnZhciBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCA9IGJhdGNoZWRVcGRhdGVzSW1wbDtcbnZhciBpc0luc2lkZUV2ZW50SGFuZGxlciA9IGZhbHNlO1xudmFyIGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmluaXNoRXZlbnRIYW5kbGVyKCkge1xuICAvLyBIZXJlIHdlIHdhaXQgdW50aWwgYWxsIHVwZGF0ZXMgaGF2ZSBwcm9wYWdhdGVkLCB3aGljaCBpcyBpbXBvcnRhbnRcbiAgLy8gd2hlbiB1c2luZyBjb250cm9sbGVkIGNvbXBvbmVudHMgd2l0aGluIGxheWVyczpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjk4XG4gIC8vIFRoZW4gd2UgcmVzdG9yZSBzdGF0ZSBvZiBhbnkgY29udHJvbGxlZCBjb21wb25lbnQuXG4gIHZhciBjb250cm9sbGVkQ29tcG9uZW50c0hhdmVQZW5kaW5nVXBkYXRlcyA9IG5lZWRzU3RhdGVSZXN0b3JlKCk7XG5cbiAgaWYgKGNvbnRyb2xsZWRDb21wb25lbnRzSGF2ZVBlbmRpbmdVcGRhdGVzKSB7XG4gICAgLy8gSWYgYSBjb250cm9sbGVkIGV2ZW50IHdhcyBmaXJlZCwgd2UgbWF5IG5lZWQgdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2ZcbiAgICAvLyB0aGUgRE9NIG5vZGUgYmFjayB0byB0aGUgY29udHJvbGxlZCB2YWx1ZS4gVGhpcyBpcyBuZWNlc3Nhcnkgd2hlbiBSZWFjdFxuICAgIC8vIGJhaWxzIG91dCBvZiB0aGUgdXBkYXRlIHdpdGhvdXQgdG91Y2hpbmcgdGhlIERPTS5cbiAgICBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwoKTtcbiAgICByZXN0b3JlU3RhdGVJZk5lZWRlZCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzKGZuLCBib29ra2VlcGluZykge1xuICBpZiAoaXNJbnNpZGVFdmVudEhhbmRsZXIpIHtcbiAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGluc2lkZSBhbm90aGVyIGJhdGNoLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXRcbiAgICAvLyBmdWxseSBjb21wbGV0ZXMgYmVmb3JlIHJlc3RvcmluZyBzdGF0ZS5cbiAgICByZXR1cm4gZm4oYm9va2tlZXBpbmcpO1xuICB9XG5cbiAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGJhdGNoZWRVcGRhdGVzSW1wbChmbiwgYm9va2tlZXBpbmcpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gZmFsc2U7XG4gICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGJhdGNoZWRFdmVudFVwZGF0ZXMoZm4sIGEsIGIpIHtcbiAgaWYgKGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMpIHtcbiAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGluc2lkZSBhbm90aGVyIGJhdGNoLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXRcbiAgICAvLyBmdWxseSBjb21wbGV0ZXMgYmVmb3JlIHJlc3RvcmluZyBzdGF0ZS5cbiAgICByZXR1cm4gZm4oYSwgYik7XG4gIH1cblxuICBpc0JhdGNoaW5nRXZlbnRVcGRhdGVzID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbChmbiwgYSwgYik7XG4gIH0gZmluYWxseSB7XG4gICAgaXNCYXRjaGluZ0V2ZW50VXBkYXRlcyA9IGZhbHNlO1xuICAgIGZpbmlzaEV2ZW50SGFuZGxlcigpO1xuICB9XG59XG5mdW5jdGlvbiBkaXNjcmV0ZVVwZGF0ZXMoZm4sIGEsIGIsIGMsIGQpIHtcbiAgdmFyIHByZXZJc0luc2lkZUV2ZW50SGFuZGxlciA9IGlzSW5zaWRlRXZlbnRIYW5kbGVyO1xuICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZGlzY3JldGVVcGRhdGVzSW1wbChmbiwgYSwgYiwgYywgZCk7XG4gIH0gZmluYWxseSB7XG4gICAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBwcmV2SXNJbnNpZGVFdmVudEhhbmRsZXI7XG5cbiAgICBpZiAoIWlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgICBmaW5pc2hFdmVudEhhbmRsZXIoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGZsdXNoRGlzY3JldGVVcGRhdGVzSWZOZWVkZWQodGltZVN0YW1wKSB7XG4gIHtcbiAgICBpZiAoIWlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgICBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHNldEJhdGNoaW5nSW1wbGVtZW50YXRpb24oX2JhdGNoZWRVcGRhdGVzSW1wbCwgX2Rpc2NyZXRlVXBkYXRlc0ltcGwsIF9mbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwsIF9iYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCkge1xuICBiYXRjaGVkVXBkYXRlc0ltcGwgPSBfYmF0Y2hlZFVwZGF0ZXNJbXBsO1xuICBkaXNjcmV0ZVVwZGF0ZXNJbXBsID0gX2Rpc2NyZXRlVXBkYXRlc0ltcGw7XG4gIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCA9IF9mbHVzaERpc2NyZXRlVXBkYXRlc0ltcGw7XG4gIGJhdGNoZWRFdmVudFVwZGF0ZXNJbXBsID0gX2JhdGNoZWRFdmVudFVwZGF0ZXNJbXBsO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyYWN0aXZlKHRhZykge1xuICByZXR1cm4gdGFnID09PSAnYnV0dG9uJyB8fCB0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAnc2VsZWN0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYSc7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KG5hbWUsIHR5cGUsIHByb3BzKSB7XG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgJ29uQ2xpY2snOlxuICAgIGNhc2UgJ29uQ2xpY2tDYXB0dXJlJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZURvd24nOlxuICAgIGNhc2UgJ29uTW91c2VEb3duQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZU1vdmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZVVwJzpcbiAgICBjYXNlICdvbk1vdXNlVXBDYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlRW50ZXInOlxuICAgICAgcmV0dXJuICEhKHByb3BzLmRpc2FibGVkICYmIGlzSW50ZXJhY3RpdmUodHlwZSkpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gaW5zdCBUaGUgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZSBzb3VyY2Ugb2YgZXZlbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5hbWUgTmFtZSBvZiBsaXN0ZW5lciAoZS5nLiBgb25DbGlja2ApLlxuICogQHJldHVybiB7P2Z1bmN0aW9ufSBUaGUgc3RvcmVkIGNhbGxiYWNrLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICB2YXIgc3RhdGVOb2RlID0gaW5zdC5zdGF0ZU5vZGU7XG5cbiAgaWYgKHN0YXRlTm9kZSA9PT0gbnVsbCkge1xuICAgIC8vIFdvcmsgaW4gcHJvZ3Jlc3MgKGV4OiBvbmxvYWQgZXZlbnRzIGluIGluY3JlbWVudGFsIG1vZGUpLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShzdGF0ZU5vZGUpO1xuXG4gIGlmIChwcm9wcyA9PT0gbnVsbCkge1xuICAgIC8vIFdvcmsgaW4gcHJvZ3Jlc3MuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBwcm9wc1tyZWdpc3RyYXRpb25OYW1lXTtcblxuICBpZiAoc2hvdWxkUHJldmVudE1vdXNlRXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgaW5zdC50eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICghKCFsaXN0ZW5lciB8fCB0eXBlb2YgbGlzdGVuZXIgPT09ICdmdW5jdGlvbicpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgYFwiICsgcmVnaXN0cmF0aW9uTmFtZSArIFwiYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBhIHZhbHVlIG9mIGBcIiArIHR5cGVvZiBsaXN0ZW5lciArIFwiYCB0eXBlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG52YXIgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSBmYWxzZTsgLy8gQ2hlY2sgaWYgYnJvd3NlciBzdXBwb3J0IGV2ZW50cyB3aXRoIHBhc3NpdmUgbGlzdGVuZXJzXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnRUYXJnZXQvYWRkRXZlbnRMaXN0ZW5lciNTYWZlbHlfZGV0ZWN0aW5nX29wdGlvbl9zdXBwb3J0XG5cbmlmIChjYW5Vc2VET00pIHtcbiAgdHJ5IHtcbiAgICB2YXIgb3B0aW9ucyA9IHt9OyAvLyAkRmxvd0ZpeE1lOiBJZ25vcmUgRmxvdyBjb21wbGFpbmluZyBhYm91dCBuZWVkaW5nIGEgdmFsdWVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRpb25zLCAncGFzc2l2ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tQcm9kKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFyIGZ1bmNBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTtcblxuICB0cnkge1xuICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gIH1cbn1cblxudmFyIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwgPSBpbnZva2VHdWFyZGVkQ2FsbGJhY2tQcm9kO1xuXG57XG4gIC8vIEluIERFViBtb2RlLCB3ZSBzd2FwIG91dCBpbnZva2VHdWFyZGVkQ2FsbGJhY2sgZm9yIGEgc3BlY2lhbCB2ZXJzaW9uXG4gIC8vIHRoYXQgcGxheXMgbW9yZSBuaWNlbHkgd2l0aCB0aGUgYnJvd3NlcidzIERldlRvb2xzLiBUaGUgaWRlYSBpcyB0byBwcmVzZXJ2ZVxuICAvLyBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvci4gQmVjYXVzZSBSZWFjdCB3cmFwcyBhbGwgdXNlci1wcm92aWRlZFxuICAvLyBmdW5jdGlvbnMgaW4gaW52b2tlR3VhcmRlZENhbGxiYWNrLCBhbmQgdGhlIHByb2R1Y3Rpb24gdmVyc2lvbiBvZlxuICAvLyBpbnZva2VHdWFyZGVkQ2FsbGJhY2sgdXNlcyBhIHRyeS1jYXRjaCwgYWxsIHVzZXIgZXhjZXB0aW9ucyBhcmUgdHJlYXRlZFxuICAvLyBsaWtlIGNhdWdodCBleGNlcHRpb25zLCBhbmQgdGhlIERldlRvb2xzIHdvbid0IHBhdXNlIHVubGVzcyB0aGUgZGV2ZWxvcGVyXG4gIC8vIHRha2VzIHRoZSBleHRyYSBzdGVwIG9mIGVuYWJsaW5nIHBhdXNlIG9uIGNhdWdodCBleGNlcHRpb25zLiBUaGlzIGlzXG4gIC8vIHVuaW50dWl0aXZlLCB0aG91Z2gsIGJlY2F1c2UgZXZlbiB0aG91Z2ggUmVhY3QgaGFzIGNhdWdodCB0aGUgZXJyb3IsIGZyb21cbiAgLy8gdGhlIGRldmVsb3BlcidzIHBlcnNwZWN0aXZlLCB0aGUgZXJyb3IgaXMgdW5jYXVnaHQuXG4gIC8vXG4gIC8vIFRvIHByZXNlcnZlIHRoZSBleHBlY3RlZCBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvciwgd2UgZG9uJ3QgdXNlIGFcbiAgLy8gdHJ5LWNhdGNoIGluIERFVi4gSW5zdGVhZCwgd2Ugc3luY2hyb25vdXNseSBkaXNwYXRjaCBhIGZha2UgZXZlbnQgdG8gYSBmYWtlXG4gIC8vIERPTSBub2RlLCBhbmQgY2FsbCB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayBmcm9tIGluc2lkZSBhbiBldmVudCBoYW5kbGVyXG4gIC8vIGZvciB0aGF0IGZha2UgZXZlbnQuIElmIHRoZSBjYWxsYmFjayB0aHJvd3MsIHRoZSBlcnJvciBpcyBcImNhcHR1cmVkXCIgdXNpbmdcbiAgLy8gYSBnbG9iYWwgZXZlbnQgaGFuZGxlci4gQnV0IGJlY2F1c2UgdGhlIGVycm9yIGhhcHBlbnMgaW4gYSBkaWZmZXJlbnRcbiAgLy8gZXZlbnQgbG9vcCBjb250ZXh0LCBpdCBkb2VzIG5vdCBpbnRlcnJ1cHQgdGhlIG5vcm1hbCBwcm9ncmFtIGZsb3cuXG4gIC8vIEVmZmVjdGl2ZWx5LCB0aGlzIGdpdmVzIHVzIHRyeS1jYXRjaCBiZWhhdmlvciB3aXRob3V0IGFjdHVhbGx5IHVzaW5nXG4gIC8vIHRyeS1jYXRjaC4gTmVhdCFcbiAgLy8gQ2hlY2sgdGhhdCB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGUgQVBJcyB3ZSBuZWVkIHRvIGltcGxlbWVudCBvdXIgc3BlY2lhbFxuICAvLyBERVYgdmVyc2lvbiBvZiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZGlzcGF0Y2hFdmVudCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBmYWtlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3JlYWN0Jyk7XG5cbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsID0gZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrRGV2KG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIC8vIElmIGRvY3VtZW50IGRvZXNuJ3QgZXhpc3Qgd2Uga25vdyBmb3Igc3VyZSB3ZSB3aWxsIGNyYXNoIGluIHRoaXMgbWV0aG9kXG4gICAgICAvLyB3aGVuIHdlIGNhbGwgZG9jdW1lbnQuY3JlYXRlRXZlbnQoKS4gSG93ZXZlciB0aGlzIGNhbiBjYXVzZSBjb25mdXNpbmdcbiAgICAgIC8vIGVycm9yczogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29raW5jdWJhdG9yL2NyZWF0ZS1yZWFjdC1hcHAvaXNzdWVzLzM0ODJcbiAgICAgIC8vIFNvIHdlIHByZWVtcHRpdmVseSB0aHJvdyB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UgaW5zdGVhZC5cbiAgICAgIGlmICghKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGUgYGRvY3VtZW50YCBnbG9iYWwgd2FzIGRlZmluZWQgd2hlbiBSZWFjdCB3YXMgaW5pdGlhbGl6ZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhbnltb3JlLiBUaGlzIGNhbiBoYXBwZW4gaW4gYSB0ZXN0IGVudmlyb25tZW50IGlmIGEgY29tcG9uZW50IHNjaGVkdWxlcyBhbiB1cGRhdGUgZnJvbSBhbiBhc3luY2hyb25vdXMgY2FsbGJhY2ssIGJ1dCB0aGUgdGVzdCBoYXMgYWxyZWFkeSBmaW5pc2hlZCBydW5uaW5nLiBUbyBzb2x2ZSB0aGlzLCB5b3UgY2FuIGVpdGhlciB1bm1vdW50IHRoZSBjb21wb25lbnQgYXQgdGhlIGVuZCBvZiB5b3VyIHRlc3QgKGFuZCBlbnN1cmUgdGhhdCBhbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgZ2V0IGNhbmNlbGVkIGluIGBjb21wb25lbnRXaWxsVW5tb3VudGApLCBvciB5b3UgY2FuIGNoYW5nZSB0aGUgdGVzdCBpdHNlbGYgdG8gYmUgYXN5bmNocm9ub3VzLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgICAgdmFyIGRpZENhbGwgPSBmYWxzZTsgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayB0aHJldyBhbiBlcnJvci4gV2VcbiAgICAgIC8vIHNldCB0aGlzIHRvIHRydWUgYXQgdGhlIGJlZ2lubmluZywgdGhlbiBzZXQgaXQgdG8gZmFsc2UgcmlnaHQgYWZ0ZXJcbiAgICAgIC8vIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLiBJZiB0aGUgZnVuY3Rpb24gZXJyb3JzLCBgZGlkRXJyb3JgIHdpbGwgbmV2ZXIgYmVcbiAgICAgIC8vIHNldCB0byBmYWxzZS4gVGhpcyBzdHJhdGVneSB3b3JrcyBldmVuIGlmIHRoZSBicm93c2VyIGlzIGZsYWt5IGFuZFxuICAgICAgLy8gZmFpbHMgdG8gY2FsbCBvdXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIsIGJlY2F1c2UgaXQgZG9lc24ndCByZWx5IG9uXG4gICAgICAvLyB0aGUgZXJyb3IgZXZlbnQgYXQgYWxsLlxuXG4gICAgICB2YXIgZGlkRXJyb3IgPSB0cnVlOyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgdmFsdWUgb2Ygd2luZG93LmV2ZW50IHNvIHRoYXQgd2UgY2FuIHJlc2V0IGl0XG4gICAgICAvLyBkdXJpbmcgdGhlIGNhbGxiYWNrIHRvIGxldCB1c2VyIGNvZGUgYWNjZXNzIHdpbmRvdy5ldmVudCBpbiB0aGVcbiAgICAgIC8vIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBpdC5cblxuICAgICAgdmFyIHdpbmRvd0V2ZW50ID0gd2luZG93LmV2ZW50OyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgZGVzY3JpcHRvciBvZiB3aW5kb3cuZXZlbnQgdG8gcmVzdG9yZSBpdCBhZnRlciBldmVudFxuICAgICAgLy8gZGlzcGF0Y2hpbmc6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2ODhcblxuICAgICAgdmFyIHdpbmRvd0V2ZW50RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnZXZlbnQnKTtcblxuICAgICAgZnVuY3Rpb24gcmVzdG9yZUFmdGVyRGlzcGF0Y2goKSB7XG4gICAgICAgIC8vIFdlIGltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgY2FsbGJhY2sgZnJvbSBldmVudCBsaXN0ZW5lcnMgc28gdGhhdFxuICAgICAgICAvLyBuZXN0ZWQgYGludm9rZUd1YXJkZWRDYWxsYmFja2AgY2FsbHMgZG8gbm90IGNsYXNoLiBPdGhlcndpc2UsIGFcbiAgICAgICAgLy8gbmVzdGVkIGNhbGwgd291bGQgdHJpZ2dlciB0aGUgZmFrZSBldmVudCBoYW5kbGVycyBvZiBhbnkgY2FsbCBoaWdoZXJcbiAgICAgICAgLy8gaW4gdGhlIHN0YWNrLlxuICAgICAgICBmYWtlTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2dFR5cGUsIGNhbGxDYWxsYmFjaywgZmFsc2UpOyAvLyBXZSBjaGVjayBmb3Igd2luZG93Lmhhc093blByb3BlcnR5KCdldmVudCcpIHRvIHByZXZlbnQgdGhlXG4gICAgICAgIC8vIHdpbmRvdy5ldmVudCBhc3NpZ25tZW50IGluIGJvdGggSUUgPD0gMTAgYXMgdGhleSB0aHJvdyBhbiBlcnJvclxuICAgICAgICAvLyBcIk1lbWJlciBub3QgZm91bmRcIiBpbiBzdHJpY3QgbW9kZSwgYW5kIGluIEZpcmVmb3ggd2hpY2ggZG9lcyBub3RcbiAgICAgICAgLy8gc3VwcG9ydCB3aW5kb3cuZXZlbnQuXG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuZXZlbnQgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnZXZlbnQnKSkge1xuICAgICAgICAgIHdpbmRvdy5ldmVudCA9IHdpbmRvd0V2ZW50O1xuICAgICAgICB9XG4gICAgICB9IC8vIENyZWF0ZSBhbiBldmVudCBoYW5kbGVyIGZvciBvdXIgZmFrZSBldmVudC4gV2Ugd2lsbCBzeW5jaHJvbm91c2x5XG4gICAgICAvLyBkaXNwYXRjaCBvdXIgZmFrZSBldmVudCB1c2luZyBgZGlzcGF0Y2hFdmVudGAuIEluc2lkZSB0aGUgaGFuZGxlciwgd2VcbiAgICAgIC8vIGNhbGwgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2suXG5cblxuICAgICAgdmFyIGZ1bmNBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTtcblxuICAgICAgZnVuY3Rpb24gY2FsbENhbGxiYWNrKCkge1xuICAgICAgICBkaWRDYWxsID0gdHJ1ZTtcbiAgICAgICAgcmVzdG9yZUFmdGVyRGlzcGF0Y2goKTtcbiAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBmdW5jQXJncyk7XG4gICAgICAgIGRpZEVycm9yID0gZmFsc2U7XG4gICAgICB9IC8vIENyZWF0ZSBhIGdsb2JhbCBlcnJvciBldmVudCBoYW5kbGVyLiBXZSB1c2UgdGhpcyB0byBjYXB0dXJlIHRoZSB2YWx1ZVxuICAgICAgLy8gdGhhdCB3YXMgdGhyb3duLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBlcnJvciBoYW5kbGVyIHdpbGwgZmlyZSBtb3JlXG4gICAgICAvLyB0aGFuIG9uY2U7IGZvciBleGFtcGxlLCBpZiBub24tUmVhY3QgY29kZSBhbHNvIGNhbGxzIGBkaXNwYXRjaEV2ZW50YFxuICAgICAgLy8gYW5kIGEgaGFuZGxlciBmb3IgdGhhdCBldmVudCB0aHJvd3MuIFdlIHNob3VsZCBiZSByZXNpbGllbnQgdG8gbW9zdCBvZlxuICAgICAgLy8gdGhvc2UgY2FzZXMuIEV2ZW4gaWYgb3VyIGVycm9yIGV2ZW50IGhhbmRsZXIgZmlyZXMgbW9yZSB0aGFuIG9uY2UsIHRoZVxuICAgICAgLy8gbGFzdCBlcnJvciBldmVudCBpcyBhbHdheXMgdXNlZC4gSWYgdGhlIGNhbGxiYWNrIGFjdHVhbGx5IGRvZXMgZXJyb3IsXG4gICAgICAvLyB3ZSBrbm93IHRoYXQgdGhlIGxhc3QgZXJyb3IgZXZlbnQgaXMgdGhlIGNvcnJlY3Qgb25lLCBiZWNhdXNlIGl0J3Mgbm90XG4gICAgICAvLyBwb3NzaWJsZSBmb3IgYW55dGhpbmcgZWxzZSB0byBoYXZlIGhhcHBlbmVkIGluIGJldHdlZW4gb3VyIGNhbGxiYWNrXG4gICAgICAvLyBlcnJvcmluZyBhbmQgdGhlIGNvZGUgdGhhdCBmb2xsb3dzIHRoZSBgZGlzcGF0Y2hFdmVudGAgY2FsbCBiZWxvdy4gSWZcbiAgICAgIC8vIHRoZSBjYWxsYmFjayBkb2Vzbid0IGVycm9yLCBidXQgdGhlIGVycm9yIGV2ZW50IHdhcyBmaXJlZCwgd2Uga25vdyB0b1xuICAgICAgLy8gaWdub3JlIGl0IGJlY2F1c2UgYGRpZEVycm9yYCB3aWxsIGJlIGZhbHNlLCBhcyBkZXNjcmliZWQgYWJvdmUuXG5cblxuICAgICAgdmFyIGVycm9yOyAvLyBVc2UgdGhpcyB0byB0cmFjayB3aGV0aGVyIHRoZSBlcnJvciBldmVudCBpcyBldmVyIGNhbGxlZC5cblxuICAgICAgdmFyIGRpZFNldEVycm9yID0gZmFsc2U7XG4gICAgICB2YXIgaXNDcm9zc09yaWdpbkVycm9yID0gZmFsc2U7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZVdpbmRvd0Vycm9yKGV2ZW50KSB7XG4gICAgICAgIGVycm9yID0gZXZlbnQuZXJyb3I7XG4gICAgICAgIGRpZFNldEVycm9yID0gdHJ1ZTtcblxuICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwgJiYgZXZlbnQuY29sbm8gPT09IDAgJiYgZXZlbnQubGluZW5vID09PSAwKSB7XG4gICAgICAgICAgaXNDcm9zc09yaWdpbkVycm9yID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgLy8gU29tZSBvdGhlciBlcnJvciBoYW5kbGVyIGhhcyBwcmV2ZW50ZWQgZGVmYXVsdC5cbiAgICAgICAgICAvLyBCcm93c2VycyBzaWxlbmNlIHRoZSBlcnJvciByZXBvcnQgaWYgdGhpcyBoYXBwZW5zLlxuICAgICAgICAgIC8vIFdlJ2xsIHJlbWVtYmVyIHRoaXMgdG8gbGF0ZXIgZGVjaWRlIHdoZXRoZXIgdG8gbG9nIGl0IG9yIG5vdC5cbiAgICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBlcnJvci5fc3VwcHJlc3NMb2dnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGlubmVyKSB7Ly8gSWdub3JlLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBDcmVhdGUgYSBmYWtlIGV2ZW50IHR5cGUuXG5cblxuICAgICAgdmFyIGV2dFR5cGUgPSBcInJlYWN0LVwiICsgKG5hbWUgPyBuYW1lIDogJ2ludm9rZWd1YXJkZWRjYWxsYmFjaycpOyAvLyBBdHRhY2ggb3VyIGV2ZW50IGhhbmRsZXJzXG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGhhbmRsZVdpbmRvd0Vycm9yKTtcbiAgICAgIGZha2VOb2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZ0VHlwZSwgY2FsbENhbGxiYWNrLCBmYWxzZSk7IC8vIFN5bmNocm9ub3VzbHkgZGlzcGF0Y2ggb3VyIGZha2UgZXZlbnQuIElmIHRoZSB1c2VyLXByb3ZpZGVkIGZ1bmN0aW9uXG4gICAgICAvLyBlcnJvcnMsIGl0IHdpbGwgdHJpZ2dlciBvdXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIuXG5cbiAgICAgIGV2dC5pbml0RXZlbnQoZXZ0VHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIGZha2VOb2RlLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblxuICAgICAgaWYgKHdpbmRvd0V2ZW50RGVzY3JpcHRvcikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnZXZlbnQnLCB3aW5kb3dFdmVudERlc2NyaXB0b3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGlkQ2FsbCAmJiBkaWRFcnJvcikge1xuICAgICAgICBpZiAoIWRpZFNldEVycm9yKSB7XG4gICAgICAgICAgLy8gVGhlIGNhbGxiYWNrIGVycm9yZWQsIGJ1dCB0aGUgZXJyb3IgZXZlbnQgbmV2ZXIgZmlyZWQuXG4gICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ0FuIGVycm9yIHdhcyB0aHJvd24gaW5zaWRlIG9uZSBvZiB5b3VyIGNvbXBvbmVudHMsIGJ1dCBSZWFjdCAnICsgXCJkb2Vzbid0IGtub3cgd2hhdCBpdCB3YXMuIFRoaXMgaXMgbGlrZWx5IGR1ZSB0byBicm93c2VyIFwiICsgJ2ZsYWtpbmVzcy4gUmVhY3QgZG9lcyBpdHMgYmVzdCB0byBwcmVzZXJ2ZSB0aGUgXCJQYXVzZSBvbiAnICsgJ2V4Y2VwdGlvbnNcIiBiZWhhdmlvciBvZiB0aGUgRGV2VG9vbHMsIHdoaWNoIHJlcXVpcmVzIHNvbWUgJyArIFwiREVWLW1vZGUgb25seSB0cmlja3MuIEl0J3MgcG9zc2libGUgdGhhdCB0aGVzZSBkb24ndCB3b3JrIGluIFwiICsgJ3lvdXIgYnJvd3Nlci4gVHJ5IHRyaWdnZXJpbmcgdGhlIGVycm9yIGluIHByb2R1Y3Rpb24gbW9kZSwgJyArICdvciBzd2l0Y2hpbmcgdG8gYSBtb2Rlcm4gYnJvd3Nlci4gSWYgeW91IHN1c3BlY3QgdGhhdCB0aGlzIGlzICcgKyAnYWN0dWFsbHkgYW4gaXNzdWUgd2l0aCBSZWFjdCwgcGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDcm9zc09yaWdpbkVycm9yKSB7XG4gICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJBIGNyb3NzLW9yaWdpbiBlcnJvciB3YXMgdGhyb3duLiBSZWFjdCBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvIFwiICsgJ3RoZSBhY3R1YWwgZXJyb3Igb2JqZWN0IGluIGRldmVsb3BtZW50LiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvY3Jvc3NvcmlnaW4tZXJyb3IgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgfSAvLyBSZW1vdmUgb3VyIGV2ZW50IGxpc3RlbmVyc1xuXG5cbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIGhhbmRsZVdpbmRvd0Vycm9yKTtcblxuICAgICAgaWYgKCFkaWRDYWxsKSB7XG4gICAgICAgIC8vIFNvbWV0aGluZyB3ZW50IHJlYWxseSB3cm9uZywgYW5kIG91ciBldmVudCB3YXMgbm90IGRpc3BhdGNoZWQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY3MzRcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjU4NVxuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIHByb2R1Y3Rpb24gaW1wbGVtZW50YXRpb24uXG4gICAgICAgIHJlc3RvcmVBZnRlckRpc3BhdGNoKCk7XG4gICAgICAgIHJldHVybiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tQcm9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG52YXIgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCQxID0gaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbDtcblxudmFyIGhhc0Vycm9yID0gZmFsc2U7XG52YXIgY2F1Z2h0RXJyb3IgPSBudWxsOyAvLyBVc2VkIGJ5IGV2ZW50IHN5c3RlbSB0byBjYXB0dXJlL3JldGhyb3cgdGhlIGZpcnN0IGVycm9yLlxuXG52YXIgaGFzUmV0aHJvd0Vycm9yID0gZmFsc2U7XG52YXIgcmV0aHJvd0Vycm9yID0gbnVsbDtcbnZhciByZXBvcnRlciA9IHtcbiAgb25FcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gIH1cbn07XG4vKipcbiAqIENhbGwgYSBmdW5jdGlvbiB3aGlsZSBndWFyZGluZyBhZ2FpbnN0IGVycm9ycyB0aGF0IGhhcHBlbnMgd2l0aGluIGl0LlxuICogUmV0dXJucyBhbiBlcnJvciBpZiBpdCB0aHJvd3MsIG90aGVyd2lzZSBudWxsLlxuICpcbiAqIEluIHByb2R1Y3Rpb24sIHRoaXMgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSB0cnktY2F0Y2guIFRoZSByZWFzb24gd2UgZG9uJ3RcbiAqIHVzZSBhIHRyeS1jYXRjaCBkaXJlY3RseSBpcyBzbyB0aGF0IHdlIGNhbiBzd2FwIG91dCBhIGRpZmZlcmVudFxuICogaW1wbGVtZW50YXRpb24gaW4gREVWIG1vZGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgdGhlIGd1YXJkIHRvIHVzZSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmdcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIHVzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzIGZvciBmdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFjayhuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGhhc0Vycm9yID0gZmFsc2U7XG4gIGNhdWdodEVycm9yID0gbnVsbDtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCQxLmFwcGx5KHJlcG9ydGVyLCBhcmd1bWVudHMpO1xufVxuLyoqXG4gKiBTYW1lIGFzIGludm9rZUd1YXJkZWRDYWxsYmFjaywgYnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIGVycm9yLCBpdCBzdG9yZXNcbiAqIGl0IGluIGEgZ2xvYmFsIHNvIGl0IGNhbiBiZSByZXRocm93biBieSBgcmV0aHJvd0NhdWdodEVycm9yYCBsYXRlci5cbiAqIFRPRE86IFNlZSBpZiBjYXVnaHRFcnJvciBhbmQgcmV0aHJvd0Vycm9yIGNhbiBiZSB1bmlmaWVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHRoZSBndWFyZCB0byB1c2UgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2VcbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50cyBmb3IgZnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tBbmRDYXRjaEZpcnN0RXJyb3IobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBpZiAoaGFzRXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICBpZiAoIWhhc1JldGhyb3dFcnJvcikge1xuICAgICAgaGFzUmV0aHJvd0Vycm9yID0gdHJ1ZTtcbiAgICAgIHJldGhyb3dFcnJvciA9IGVycm9yO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBEdXJpbmcgZXhlY3V0aW9uIG9mIGd1YXJkZWQgZnVuY3Rpb25zIHdlIHdpbGwgY2FwdHVyZSB0aGUgZmlyc3QgZXJyb3Igd2hpY2hcbiAqIHdlIHdpbGwgcmV0aHJvdyB0byBiZSBoYW5kbGVkIGJ5IHRoZSB0b3AgbGV2ZWwgZXJyb3IgaGFuZGxlci5cbiAqL1xuXG5mdW5jdGlvbiByZXRocm93Q2F1Z2h0RXJyb3IoKSB7XG4gIGlmIChoYXNSZXRocm93RXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSByZXRocm93RXJyb3I7XG4gICAgaGFzUmV0aHJvd0Vycm9yID0gZmFsc2U7XG4gICAgcmV0aHJvd0Vycm9yID0gbnVsbDtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuZnVuY3Rpb24gaGFzQ2F1Z2h0RXJyb3IoKSB7XG4gIHJldHVybiBoYXNFcnJvcjtcbn1cbmZ1bmN0aW9uIGNsZWFyQ2F1Z2h0RXJyb3IoKSB7XG4gIGlmIChoYXNFcnJvcikge1xuICAgIHZhciBlcnJvciA9IGNhdWdodEVycm9yO1xuICAgIGhhc0Vycm9yID0gZmFsc2U7XG4gICAgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcImNsZWFyQ2F1Z2h0RXJyb3Igd2FzIGNhbGxlZCBidXQgbm8gZXJyb3Igd2FzIGNhcHR1cmVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogYFJlYWN0SW5zdGFuY2VNYXBgIG1haW50YWlucyBhIG1hcHBpbmcgZnJvbSBhIHB1YmxpYyBmYWNpbmcgc3RhdGVmdWxcbiAqIGluc3RhbmNlIChrZXkpIGFuZCB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKHZhbHVlKS4gVGhpcyBhbGxvd3MgcHVibGljXG4gKiBtZXRob2RzIHRvIGFjY2VwdCB0aGUgdXNlciBmYWNpbmcgaW5zdGFuY2UgYXMgYW4gYXJndW1lbnQgYW5kIG1hcCB0aGVtIGJhY2tcbiAqIHRvIGludGVybmFsIG1ldGhvZHMuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgbW9kdWxlIGlzIGN1cnJlbnRseSBzaGFyZWQgYW5kIGFzc3VtZWQgdG8gYmUgc3RhdGVsZXNzLlxuICogSWYgdGhpcyBiZWNvbWVzIGFuIGFjdHVhbCBNYXAsIHRoYXQgd2lsbCBicmVhay5cbiAqL1xuZnVuY3Rpb24gZ2V0KGtleSkge1xuICByZXR1cm4ga2V5Ll9yZWFjdEludGVybmFscztcbn1cbmZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbHMgIT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gIGtleS5fcmVhY3RJbnRlcm5hbHMgPSB2YWx1ZTtcbn1cblxuLy8gRG9uJ3QgY2hhbmdlIHRoZXNlIHR3byB2YWx1ZXMuIFRoZXkncmUgdXNlZCBieSBSZWFjdCBEZXYgVG9vbHMuXG52YXIgTm9GbGFncyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuMDtcbnZhciBQZXJmb3JtZWRXb3JrID1cbi8qICAgICAgICAgICAgICAgICovXG4xOyAvLyBZb3UgY2FuIGNoYW5nZSB0aGUgcmVzdCAoYW5kIGFkZCBtb3JlKS5cblxudmFyIFBsYWNlbWVudCA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgVXBkYXRlID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuNDtcbnZhciBQbGFjZW1lbnRBbmRVcGRhdGUgPVxuLyogICAgICAgICAgICovXG42O1xudmFyIERlbGV0aW9uID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjg7XG52YXIgQ29udGVudFJlc2V0ID1cbi8qICAgICAgICAgICAgICAgICAqL1xuMTY7XG52YXIgQ2FsbGJhY2sgPVxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuMzI7XG52YXIgRGlkQ2FwdHVyZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuNjQ7XG52YXIgUmVmID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTI4O1xudmFyIFNuYXBzaG90ID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjI1NjtcbnZhciBQYXNzaXZlID1cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG41MTI7IC8vIFRPRE8gKGVmZmVjdHMpIFJlbW92ZSB0aGlzIGJpdCBvbmNlIHRoZSBuZXcgcmVjb25jaWxlciBpcyBzeW5jZWQgdG8gdGhlIG9sZC5cblxudmFyIFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldiA9XG4vKiAgICAgKi9cbjgxOTI7XG52YXIgSHlkcmF0aW5nID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuMTAyNDtcbnZhciBIeWRyYXRpbmdBbmRVcGRhdGUgPVxuLyogICAgICAgICAgICovXG4xMDI4OyAvLyBQYXNzaXZlICYgVXBkYXRlICYgQ2FsbGJhY2sgJiBSZWYgJiBTbmFwc2hvdFxuXG52YXIgTGlmZWN5Y2xlRWZmZWN0TWFzayA9XG4vKiAgICAgICAgICAqL1xuOTMyOyAvLyBVbmlvbiBvZiBhbGwgaG9zdCBlZmZlY3RzXG5cbnZhciBIb3N0RWZmZWN0TWFzayA9XG4vKiAgICAgICAgICAgICAgICovXG4yMDQ3OyAvLyBUaGVzZSBhcmUgbm90IHJlYWxseSBzaWRlIGVmZmVjdHMsIGJ1dCB3ZSBzdGlsbCByZXVzZSB0aGlzIGZpZWxkLlxuXG52YXIgSW5jb21wbGV0ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMjA0ODtcbnZhciBTaG91bGRDYXB0dXJlID1cbi8qICAgICAgICAgICAgICAgICovXG40MDk2O1xudmFyIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UgPVxuLyogKi9cbjE2Mzg0OyAvLyBTdGF0aWMgdGFncyBkZXNjcmliZSBhc3BlY3RzIG9mIGEgZmliZXIgdGhhdCBhcmUgbm90IHNwZWNpZmljIHRvIGEgcmVuZGVyLFxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbmZ1bmN0aW9uIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpIHtcbiAgdmFyIG5vZGUgPSBmaWJlcjtcbiAgdmFyIG5lYXJlc3RNb3VudGVkID0gZmliZXI7XG5cbiAgaWYgKCFmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBhbHRlcm5hdGUsIHRoaXMgbWlnaHQgYmUgYSBuZXcgdHJlZSB0aGF0IGlzbid0IGluc2VydGVkXG4gICAgLy8geWV0LiBJZiBpdCBpcywgdGhlbiBpdCB3aWxsIGhhdmUgYSBwZW5kaW5nIGluc2VydGlvbiBlZmZlY3Qgb24gaXQuXG4gICAgdmFyIG5leHROb2RlID0gbm9kZTtcblxuICAgIGRvIHtcbiAgICAgIG5vZGUgPSBuZXh0Tm9kZTtcblxuICAgICAgaWYgKChub2RlLmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYW4gaW5zZXJ0aW9uIG9yIGluLXByb2dyZXNzIGh5ZHJhdGlvbi4gVGhlIG5lYXJlc3QgcG9zc2libGVcbiAgICAgICAgLy8gbW91bnRlZCBmaWJlciBpcyB0aGUgcGFyZW50IGJ1dCB3ZSBuZWVkIHRvIGNvbnRpbnVlIHRvIGZpZ3VyZSBvdXRcbiAgICAgICAgLy8gaWYgdGhhdCBvbmUgaXMgc3RpbGwgbW91bnRlZC5cbiAgICAgICAgbmVhcmVzdE1vdW50ZWQgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dE5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChuZXh0Tm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKG5vZGUucmV0dXJuKSB7XG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgd2FzIGEgbmVzdGVkIEhvc3RSb290IHdoZW4gdXNlZCB3aXRoXG4gICAgLy8gcmVuZGVyQ29udGFpbmVySW50b1N1YnRyZWUuXG4gICAgcmV0dXJuIG5lYXJlc3RNb3VudGVkO1xuICB9IC8vIElmIHdlIGRpZG4ndCBoaXQgdGhlIHJvb3QsIHRoYXQgbWVhbnMgdGhhdCB3ZSdyZSBpbiBhbiBkaXNjb25uZWN0ZWQgdHJlZVxuICAvLyB0aGF0IGhhcyBiZWVuIHVubW91bnRlZC5cblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihmaWJlcikge1xuICBpZiAoZmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChzdXNwZW5zZVN0YXRlID09PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3VzcGVuc2VTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5lckZyb21GaWJlcihmaWJlcikge1xuICByZXR1cm4gZmliZXIudGFnID09PSBIb3N0Um9vdCA/IGZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGlzRmliZXJNb3VudGVkKGZpYmVyKSB7XG4gIHJldHVybiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXI7XG59XG5mdW5jdGlvbiBpc01vdW50ZWQoY29tcG9uZW50KSB7XG4gIHtcbiAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIG93bmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgIHZhciBvd25lckZpYmVyID0gb3duZXI7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBvd25lckZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgaWYgKCFpbnN0YW5jZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIpIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIGFjY2Vzc2luZyBpc01vdW50ZWQgaW5zaWRlIGl0cyByZW5kZXIoKSBmdW5jdGlvbi4gJyArICdyZW5kZXIoKSBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4gSXQgc2hvdWxkICcgKyAnbmV2ZXIgYWNjZXNzIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIHN0YWxlIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgJyArICdyZW5kZXIsIHN1Y2ggYXMgcmVmcy4gTW92ZSB0aGlzIGxvZ2ljIHRvIGNvbXBvbmVudERpZE1vdW50IGFuZCAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZSBpbnN0ZWFkLicsIGdldENvbXBvbmVudE5hbWUob3duZXJGaWJlci50eXBlKSB8fCAnQSBjb21wb25lbnQnKTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmliZXIgPSBnZXQoY29tcG9uZW50KTtcblxuICBpZiAoIWZpYmVyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpID09PSBmaWJlcjtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SXNNb3VudGVkKGZpYmVyKSB7XG4gIGlmICghKGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpID09PSBmaWJlcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgoZmliZXIpIHtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoIWFsdGVybmF0ZSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIGFsdGVybmF0ZSwgdGhlbiB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgbW91bnRlZC5cbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKTtcblxuICAgIGlmICghKG5lYXJlc3RNb3VudGVkICE9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmVhcmVzdE1vdW50ZWQgIT09IGZpYmVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmliZXI7XG4gIH0gLy8gSWYgd2UgaGF2ZSB0d28gcG9zc2libGUgYnJhbmNoZXMsIHdlJ2xsIHdhbGsgYmFja3dhcmRzIHVwIHRvIHRoZSByb290XG4gIC8vIHRvIHNlZSB3aGF0IHBhdGggdGhlIHJvb3QgcG9pbnRzIHRvLiBPbiB0aGUgd2F5IHdlIG1heSBoaXQgb25lIG9mIHRoZVxuICAvLyBzcGVjaWFsIGNhc2VzIGFuZCB3ZSdsbCBkZWFsIHdpdGggdGhlbS5cblxuXG4gIHZhciBhID0gZmliZXI7XG4gIHZhciBiID0gYWx0ZXJuYXRlO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIHBhcmVudEEgPSBhLnJldHVybjtcblxuICAgIGlmIChwYXJlbnRBID09PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBhdCB0aGUgcm9vdC5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBwYXJlbnRCID0gcGFyZW50QS5hbHRlcm5hdGU7XG5cbiAgICBpZiAocGFyZW50QiA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhlcmUgaXMgbm8gYWx0ZXJuYXRlLiBUaGlzIGlzIGFuIHVudXN1YWwgY2FzZS4gQ3VycmVudGx5LCBpdCBvbmx5XG4gICAgICAvLyBoYXBwZW5zIHdoZW4gYSBTdXNwZW5zZSBjb21wb25lbnQgaXMgaGlkZGVuLiBBbiBleHRyYSBmcmFnbWVudCBmaWJlclxuICAgICAgLy8gaXMgaW5zZXJ0ZWQgaW4gYmV0d2VlbiB0aGUgU3VzcGVuc2UgZmliZXIgYW5kIGl0cyBjaGlsZHJlbi4gU2tpcFxuICAgICAgLy8gb3ZlciB0aGlzIGV4dHJhIGZyYWdtZW50IGZpYmVyIGFuZCBwcm9jZWVkIHRvIHRoZSBuZXh0IHBhcmVudC5cbiAgICAgIHZhciBuZXh0UGFyZW50ID0gcGFyZW50QS5yZXR1cm47XG5cbiAgICAgIGlmIChuZXh0UGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGEgPSBiID0gbmV4dFBhcmVudDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIElmIHRoZXJlJ3Mgbm8gcGFyZW50LCB3ZSdyZSBhdCB0aGUgcm9vdC5cblxuXG4gICAgICBicmVhaztcbiAgICB9IC8vIElmIGJvdGggY29waWVzIG9mIHRoZSBwYXJlbnQgZmliZXIgcG9pbnQgdG8gdGhlIHNhbWUgY2hpbGQsIHdlIGNhblxuICAgIC8vIGFzc3VtZSB0aGF0IHRoZSBjaGlsZCBpcyBjdXJyZW50LiBUaGlzIGhhcHBlbnMgd2hlbiB3ZSBiYWlsb3V0IG9uIGxvd1xuICAgIC8vIHByaW9yaXR5OiB0aGUgYmFpbGVkIG91dCBmaWJlcidzIGNoaWxkIHJldXNlcyB0aGUgY3VycmVudCBjaGlsZC5cblxuXG4gICAgaWYgKHBhcmVudEEuY2hpbGQgPT09IHBhcmVudEIuY2hpbGQpIHtcbiAgICAgIHZhciBjaGlsZCA9IHBhcmVudEEuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgICBpZiAoY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpO1xuICAgICAgICAgIHJldHVybiBmaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZCA9PT0gYikge1xuICAgICAgICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBCIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICAgICAgICBhc3NlcnRJc01vdW50ZWQocGFyZW50QSk7XG4gICAgICAgICAgcmV0dXJuIGFsdGVybmF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgIH0gLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgYW4gYWx0ZXJuYXRlIGZvciBhbnkgbW91bnRpbmcgbm9kZS4gU28gdGhlIG9ubHlcbiAgICAgIC8vIHdheSB0aGlzIGNvdWxkIHBvc3NpYmx5IGhhcHBlbiBpcyBpZiB0aGlzIHdhcyB1bm1vdW50ZWQsIGlmIGF0IGFsbC5cblxuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhLnJldHVybiAhPT0gYi5yZXR1cm4pIHtcbiAgICAgIC8vIFRoZSByZXR1cm4gcG9pbnRlciBvZiBBIGFuZCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgQiBwb2ludCB0byBkaWZmZXJlbnRcbiAgICAgIC8vIGZpYmVycy4gV2UgYXNzdW1lIHRoYXQgcmV0dXJuIHBvaW50ZXJzIG5ldmVyIGNyaXNzLWNyb3NzLCBzbyBBIG11c3RcbiAgICAgIC8vIGJlbG9uZyB0byB0aGUgY2hpbGQgc2V0IG9mIEEucmV0dXJuLCBhbmQgQiBtdXN0IGJlbG9uZyB0byB0aGUgY2hpbGRcbiAgICAgIC8vIHNldCBvZiBCLnJldHVybi5cbiAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgYiA9IHBhcmVudEI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSByZXR1cm4gcG9pbnRlcnMgcG9pbnQgdG8gdGhlIHNhbWUgZmliZXIuIFdlJ2xsIGhhdmUgdG8gdXNlIHRoZVxuICAgICAgLy8gZGVmYXVsdCwgc2xvdyBwYXRoOiBzY2FuIHRoZSBjaGlsZCBzZXRzIG9mIGVhY2ggcGFyZW50IGFsdGVybmF0ZSB0byBzZWVcbiAgICAgIC8vIHdoaWNoIGNoaWxkIGJlbG9uZ3MgdG8gd2hpY2ggc2V0LlxuICAgICAgLy9cbiAgICAgIC8vIFNlYXJjaCBwYXJlbnQgQSdzIGNoaWxkIHNldFxuICAgICAgdmFyIGRpZEZpbmRDaGlsZCA9IGZhbHNlO1xuICAgICAgdmFyIF9jaGlsZCA9IHBhcmVudEEuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChfY2hpbGQpIHtcbiAgICAgICAgaWYgKF9jaGlsZCA9PT0gYSkge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICAvLyBTZWFyY2ggcGFyZW50IEIncyBjaGlsZCBzZXRcbiAgICAgICAgX2NoaWxkID0gcGFyZW50Qi5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoX2NoaWxkKSB7XG4gICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYSkge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIGEgPSBwYXJlbnRCO1xuICAgICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJDaGlsZCB3YXMgbm90IGZvdW5kIGluIGVpdGhlciBwYXJlbnQgc2V0LiBUaGlzIGluZGljYXRlcyBhIGJ1ZyBpbiBSZWFjdCByZWxhdGVkIHRvIHRoZSByZXR1cm4gcG9pbnRlci4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIShhLmFsdGVybmF0ZSA9PT0gYikpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmV0dXJuIGZpYmVycyBzaG91bGQgYWx3YXlzIGJlIGVhY2ggb3RoZXJzJyBhbHRlcm5hdGVzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIElmIHRoZSByb290IGlzIG5vdCBhIGhvc3QgY29udGFpbmVyLCB3ZSdyZSBpbiBhIGRpc2Nvbm5lY3RlZCB0cmVlLiBJLmUuXG4gIC8vIHVubW91bnRlZC5cblxuXG4gIGlmICghKGEudGFnID09PSBIb3N0Um9vdCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoYS5zdGF0ZU5vZGUuY3VycmVudCA9PT0gYSkge1xuICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBBIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICByZXR1cm4gZmliZXI7XG4gIH0gLy8gT3RoZXJ3aXNlIEIgaGFzIHRvIGJlIGN1cnJlbnQgYnJhbmNoLlxuXG5cbiAgcmV0dXJuIGFsdGVybmF0ZTtcbn1cbmZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVyKHBhcmVudCkge1xuICB2YXIgY3VycmVudFBhcmVudCA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKHBhcmVudCk7XG5cbiAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTmV4dCB3ZSdsbCBkcmlsbCBkb3duIHRoaXMgY29tcG9uZW50IHRvIGZpbmQgdGhlIGZpcnN0IEhvc3RDb21wb25lbnQvVGV4dC5cblxuXG4gIHZhciBub2RlID0gY3VycmVudFBhcmVudDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKCFub2RlLnNpYmxpbmcpIHtcbiAgICAgIGlmICghbm9kZS5yZXR1cm4gfHwgbm9kZS5yZXR1cm4gPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfSAvLyBGbG93IG5lZWRzIHRoZSByZXR1cm4gbnVsbCBoZXJlLCBidXQgRVNMaW50IGNvbXBsYWlucyBhYm91dCBpdC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVucmVhY2hhYmxlXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVyV2l0aE5vUG9ydGFscyhwYXJlbnQpIHtcbiAgdmFyIGN1cnJlbnRQYXJlbnQgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChwYXJlbnQpO1xuXG4gIGlmICghY3VycmVudFBhcmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE5leHQgd2UnbGwgZHJpbGwgZG93biB0aGlzIGNvbXBvbmVudCB0byBmaW5kIHRoZSBmaXJzdCBIb3N0Q29tcG9uZW50L1RleHQuXG5cblxuICB2YXIgbm9kZSA9IGN1cnJlbnRQYXJlbnQ7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0IHx8IGVuYWJsZUZ1bmRhbWVudGFsQVBJICkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICYmIG5vZGUudGFnICE9PSBIb3N0UG9ydGFsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB3aGlsZSAoIW5vZGUuc2libGluZykge1xuICAgICAgaWYgKCFub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9IC8vIEZsb3cgbmVlZHMgdGhlIHJldHVybiBudWxsIGhlcmUsIGJ1dCBFU0xpbnQgY29tcGxhaW5zIGFib3V0IGl0LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5yZWFjaGFibGVcblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZG9lc0ZpYmVyQ29udGFpbihwYXJlbnRGaWJlciwgY2hpbGRGaWJlcikge1xuICB2YXIgbm9kZSA9IGNoaWxkRmliZXI7XG4gIHZhciBwYXJlbnRGaWJlckFsdGVybmF0ZSA9IHBhcmVudEZpYmVyLmFsdGVybmF0ZTtcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIGlmIChub2RlID09PSBwYXJlbnRGaWJlciB8fCBub2RlID09PSBwYXJlbnRGaWJlckFsdGVybmF0ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbjtcbmZ1bmN0aW9uIHNldEF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24oZm4pIHtcbiAgYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbiA9IGZuO1xufVxudmFyIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uO1xuZnVuY3Rpb24gc2V0QXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oZm4pIHtcbiAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24gPSBmbjtcbn1cbnZhciBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHk7XG5mdW5jdGlvbiBzZXRBdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkoZm4pIHtcbiAgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5ID0gZm47XG59XG52YXIgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHk7XG5mdW5jdGlvbiBzZXRBdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eShmbikge1xuICBhdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eSA9IGZuO1xufSAvLyBUT0RPOiBVcGdyYWRlIHRoaXMgZGVmaW5pdGlvbiBvbmNlIHdlJ3JlIG9uIGEgbmV3ZXIgdmVyc2lvbiBvZiBGbG93IHRoYXRcbnZhciBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gZmFsc2U7IC8vIFRoZSBxdWV1ZSBvZiBkaXNjcmV0ZSBldmVudHMgdG8gYmUgcmVwbGF5ZWQuXG5cbnZhciBxdWV1ZWREaXNjcmV0ZUV2ZW50cyA9IFtdOyAvLyBJbmRpY2F0ZXMgaWYgYW55IGNvbnRpbnVvdXMgZXZlbnQgdGFyZ2V0cyBhcmUgbm9uLW51bGwgZm9yIGVhcmx5IGJhaWxvdXQuXG4vLyBpZiB0aGUgbGFzdCB0YXJnZXQgd2FzIGRlaHlkcmF0ZWQuXG5cbnZhciBxdWV1ZWRGb2N1cyA9IG51bGw7XG52YXIgcXVldWVkRHJhZyA9IG51bGw7XG52YXIgcXVldWVkTW91c2UgPSBudWxsOyAvLyBGb3IgcG9pbnRlciBldmVudHMgdGhlcmUgY2FuIGJlIG9uZSBsYXRlc3QgZXZlbnQgcGVyIHBvaW50ZXJJZC5cblxudmFyIHF1ZXVlZFBvaW50ZXJzID0gbmV3IE1hcCgpO1xudmFyIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcyA9IG5ldyBNYXAoKTsgLy8gV2UgY291bGQgY29uc2lkZXIgcmVwbGF5aW5nIHNlbGVjdGlvbmNoYW5nZSBhbmQgdG91Y2htb3ZlcyB0b28uXG5cbnZhciBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMgPSBbXTtcbmZ1bmN0aW9uIGhhc1F1ZXVlZERpc2NyZXRlRXZlbnRzKCkge1xuICByZXR1cm4gcXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoID4gMDtcbn1cbnZhciBkaXNjcmV0ZVJlcGxheWFibGVFdmVudHMgPSBbJ21vdXNlZG93bicsICdtb3VzZXVwJywgJ3RvdWNoY2FuY2VsJywgJ3RvdWNoZW5kJywgJ3RvdWNoc3RhcnQnLCAnYXV4Y2xpY2snLCAnZGJsY2xpY2snLCAncG9pbnRlcmNhbmNlbCcsICdwb2ludGVyZG93bicsICdwb2ludGVydXAnLCAnZHJhZ2VuZCcsICdkcmFnc3RhcnQnLCAnZHJvcCcsICdjb21wb3NpdGlvbmVuZCcsICdjb21wb3NpdGlvbnN0YXJ0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnaW5wdXQnLCAndGV4dElucHV0JywgLy8gSW50ZW50aW9uYWxseSBjYW1lbENhc2Vcbidjb3B5JywgJ2N1dCcsICdwYXN0ZScsICdjbGljaycsICdjaGFuZ2UnLCAnY29udGV4dG1lbnUnLCAncmVzZXQnLCAnc3VibWl0J107XG5mdW5jdGlvbiBpc1JlcGxheWFibGVEaXNjcmV0ZUV2ZW50KGV2ZW50VHlwZSkge1xuICByZXR1cm4gZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzLmluZGV4T2YoZXZlbnRUeXBlKSA+IC0xO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBibG9ja2VkT246IGJsb2NrZWRPbixcbiAgICBkb21FdmVudE5hbWU6IGRvbUV2ZW50TmFtZSxcbiAgICBldmVudFN5c3RlbUZsYWdzOiBldmVudFN5c3RlbUZsYWdzIHwgSVNfUkVQTEFZRUQsXG4gICAgbmF0aXZlRXZlbnQ6IG5hdGl2ZUV2ZW50LFxuICAgIHRhcmdldENvbnRhaW5lcnM6IFt0YXJnZXRDb250YWluZXJdXG4gIH07XG59XG5cbmZ1bmN0aW9uIHF1ZXVlRGlzY3JldGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB2YXIgcXVldWVkRXZlbnQgPSBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5wdXNoKHF1ZXVlZEV2ZW50KTtcbn0gLy8gUmVzZXRzIHRoZSByZXBsYXlpbmcgZm9yIHRoaXMgdHlwZSBvZiBjb250aW51b3VzIGV2ZW50IHRvIG5vIGV2ZW50LlxuXG5mdW5jdGlvbiBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgY2FzZSAnZHJhZ2xlYXZlJzpcbiAgICAgIHF1ZXVlZERyYWcgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICAgIHF1ZXVlZE1vdXNlID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgIGNhc2UgJ3BvaW50ZXJvdXQnOlxuICAgICAge1xuICAgICAgICB2YXIgcG9pbnRlcklkID0gbmF0aXZlRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVycy5kZWxldGUocG9pbnRlcklkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAnbG9zdHBvaW50ZXJjYXB0dXJlJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5kZWxldGUoX3BvaW50ZXJJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoZXhpc3RpbmdRdWV1ZWRFdmVudCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKGV4aXN0aW5nUXVldWVkRXZlbnQgPT09IG51bGwgfHwgZXhpc3RpbmdRdWV1ZWRFdmVudC5uYXRpdmVFdmVudCAhPT0gbmF0aXZlRXZlbnQpIHtcbiAgICB2YXIgcXVldWVkRXZlbnQgPSBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuXG4gICAgaWYgKGJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgdmFyIF9maWJlcjIgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKGJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXIyICE9PSBudWxsKSB7XG4gICAgICAgIC8vIEF0dGVtcHQgdG8gaW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mIHRoaXMgdGFyZ2V0LlxuICAgICAgICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihfZmliZXIyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcXVldWVkRXZlbnQ7XG4gIH0gLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IHF1ZXVlZCB0aGlzIGV4YWN0IGV2ZW50LCB0aGVuIGl0J3MgYmVjYXVzZVxuICAvLyB0aGUgZGlmZmVyZW50IGV2ZW50IHN5c3RlbXMgaGF2ZSBkaWZmZXJlbnQgRE9NIGV2ZW50IGxpc3RlbmVycy5cbiAgLy8gV2UgY2FuIGFjY3VtdWxhdGUgdGhlIGZsYWdzLCBhbmQgdGhlIHRhcmdldENvbnRhaW5lcnMsIGFuZFxuICAvLyBzdG9yZSBhIHNpbmdsZSBldmVudCB0byBiZSByZXBsYXllZC5cblxuXG4gIGV4aXN0aW5nUXVldWVkRXZlbnQuZXZlbnRTeXN0ZW1GbGFncyB8PSBldmVudFN5c3RlbUZsYWdzO1xuICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IGV4aXN0aW5nUXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcblxuICBpZiAodGFyZ2V0Q29udGFpbmVyICE9PSBudWxsICYmIHRhcmdldENvbnRhaW5lcnMuaW5kZXhPZih0YXJnZXRDb250YWluZXIpID09PSAtMSkge1xuICAgIHRhcmdldENvbnRhaW5lcnMucHVzaCh0YXJnZXRDb250YWluZXIpO1xuICB9XG5cbiAgcmV0dXJuIGV4aXN0aW5nUXVldWVkRXZlbnQ7XG59XG5cbmZ1bmN0aW9uIHF1ZXVlSWZDb250aW51b3VzRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gVGhlc2Ugc2V0IHJlbGF0ZWRUYXJnZXQgdG8gbnVsbCBiZWNhdXNlIHRoZSByZXBsYXllZCBldmVudCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgd2VcbiAgLy8gbW92ZWQgZnJvbSBvdXRzaWRlIHRoZSB3aW5kb3cgKG5vIHRhcmdldCkgb250byB0aGUgdGFyZ2V0IG9uY2UgaXQgaHlkcmF0ZXMuXG4gIC8vIEluc3RlYWQgb2YgbXV0YXRpbmcgd2UgY291bGQgY2xvbmUgdGhlIGV2ZW50LlxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAge1xuICAgICAgICB2YXIgZm9jdXNFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWRGb2N1cyA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkRm9jdXMsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIGZvY3VzRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBkcmFnRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkRHJhZyA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkRHJhZywgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgZHJhZ0V2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgbW91c2VFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWRNb3VzZSA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkTW91c2UsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG1vdXNlRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBvaW50ZXJFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICB2YXIgcG9pbnRlcklkID0gcG9pbnRlckV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlcnMuc2V0KHBvaW50ZXJJZCwgYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRQb2ludGVycy5nZXQocG9pbnRlcklkKSB8fCBudWxsLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBwb2ludGVyRXZlbnQpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgICB7XG4gICAgICAgIHZhciBfcG9pbnRlckV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHZhciBfcG9pbnRlcklkMiA9IF9wb2ludGVyRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuc2V0KF9wb2ludGVySWQyLCBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5nZXQoX3BvaW50ZXJJZDIpIHx8IG51bGwsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIF9wb2ludGVyRXZlbnQpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59IC8vIENoZWNrIGlmIHRoaXMgdGFyZ2V0IGlzIHVuYmxvY2tlZC4gUmV0dXJucyB0cnVlIGlmIGl0J3MgdW5ibG9ja2VkLlxuXG5mdW5jdGlvbiBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQocXVldWVkVGFyZ2V0KSB7XG4gIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hhcmVzIGEgbG90IG9mIGxvZ2ljIHdpdGggYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudC5cbiAgLy8gVHJ5IHRvIHVuaWZ5IHRoZW0uIEl0J3MgYSBiaXQgdHJpY2t5IHNpbmNlIGl0IHdvdWxkIHJlcXVpcmUgdHdvIHJldHVyblxuICAvLyB2YWx1ZXMuXG4gIHZhciB0YXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocXVldWVkVGFyZ2V0LnRhcmdldCk7XG5cbiAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRhcmdldEluc3QpO1xuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBudWxsKSB7XG4gICAgICB2YXIgdGFnID0gbmVhcmVzdE1vdW50ZWQudGFnO1xuXG4gICAgICBpZiAodGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSdyZSBibG9ja2VkIG9uIGh5ZHJhdGluZyB0aGlzIGJvdW5kYXJ5LlxuICAgICAgICAgIC8vIEluY3JlYXNlIGl0cyBwcmlvcml0eS5cbiAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gaW5zdGFuY2U7XG4gICAgICAgICAgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkocXVldWVkVGFyZ2V0LmxhbmVQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgU2NoZWR1bGVyLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eShxdWV1ZWRUYXJnZXQucHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KG5lYXJlc3RNb3VudGVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIHZhciByb290ID0gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gZ2V0Q29udGFpbmVyRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTsgLy8gV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSB3YXkgdG8gaW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mXG4gICAgICAgICAgLy8gYSByb290IG90aGVyIHRoYW4gc3luYy5cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBudWxsO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEV2ZW50KSB7XG4gIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IHF1ZXVlZEV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgd2hpbGUgKHRhcmdldENvbnRhaW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciB0YXJnZXRDb250YWluZXIgPSB0YXJnZXRDb250YWluZXJzWzBdO1xuICAgIHZhciBuZXh0QmxvY2tlZE9uID0gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChxdWV1ZWRFdmVudC5kb21FdmVudE5hbWUsIHF1ZXVlZEV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgcXVldWVkRXZlbnQubmF0aXZlRXZlbnQpO1xuXG4gICAgaWYgKG5leHRCbG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuIFRyeSBhZ2FpbiBsYXRlci5cbiAgICAgIHZhciBfZmliZXIzID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShuZXh0QmxvY2tlZE9uKTtcblxuICAgICAgaWYgKF9maWJlcjMgIT09IG51bGwpIHtcbiAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oX2ZpYmVyMyk7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG5leHRCbG9ja2VkT247XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBUaGlzIHRhcmdldCBjb250YWluZXIgd2FzIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkLiBUcnkgdGhlIG5leHQuXG5cblxuICAgIHRhcmdldENvbnRhaW5lcnMuc2hpZnQoKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXAocXVldWVkRXZlbnQsIGtleSwgbWFwKSB7XG4gIGlmIChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEV2ZW50KSkge1xuICAgIG1hcC5kZWxldGUoa2V5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBsYXlVbmJsb2NrZWRFdmVudHMoKSB7XG4gIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSBmYWxzZTsgLy8gRmlyc3QgcmVwbGF5IGRpc2NyZXRlIGV2ZW50cy5cblxuICB3aGlsZSAocXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoID4gMCkge1xuICAgIHZhciBuZXh0RGlzY3JldGVFdmVudCA9IHF1ZXVlZERpc2NyZXRlRXZlbnRzWzBdO1xuXG4gICAgaWYgKG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC5cbiAgICAgIC8vIEluY3JlYXNlIHRoZSBwcmlvcml0eSBvZiB0aGlzIGJvdW5kYXJ5IHRvIHVuYmxvY2tcbiAgICAgIC8vIHRoZSBuZXh0IGRpc2NyZXRlIGV2ZW50LlxuICAgICAgdmFyIF9maWJlcjQgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXI0ICE9PSBudWxsKSB7XG4gICAgICAgIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24oX2ZpYmVyNCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRDb250YWluZXJzID0gbmV4dERpc2NyZXRlRXZlbnQudGFyZ2V0Q29udGFpbmVycztcblxuICAgIHdoaWxlICh0YXJnZXRDb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciB0YXJnZXRDb250YWluZXIgPSB0YXJnZXRDb250YWluZXJzWzBdO1xuICAgICAgdmFyIG5leHRCbG9ja2VkT24gPSBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KG5leHREaXNjcmV0ZUV2ZW50LmRvbUV2ZW50TmFtZSwgbmV4dERpc2NyZXRlRXZlbnQuZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuZXh0RGlzY3JldGVFdmVudC5uYXRpdmVFdmVudCk7XG5cbiAgICAgIGlmIChuZXh0QmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuIFRyeSBhZ2FpbiBsYXRlci5cbiAgICAgICAgbmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uID0gbmV4dEJsb2NrZWRPbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIFRoaXMgdGFyZ2V0IGNvbnRhaW5lciB3YXMgc3VjY2Vzc2Z1bGx5IGRpc3BhdGNoZWQuIFRyeSB0aGUgbmV4dC5cblxuXG4gICAgICB0YXJnZXRDb250YWluZXJzLnNoaWZ0KCk7XG4gICAgfVxuXG4gICAgaWYgKG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgICAgLy8gV2UndmUgc3VjY2Vzc2Z1bGx5IHJlcGxheWVkIHRoZSBmaXJzdCBldmVudC4gTGV0J3MgdHJ5IHRoZSBuZXh0IG9uZS5cbiAgICAgIHF1ZXVlZERpc2NyZXRlRXZlbnRzLnNoaWZ0KCk7XG4gICAgfVxuICB9IC8vIE5leHQgcmVwbGF5IGFueSBjb250aW51b3VzIGV2ZW50cy5cblxuXG4gIGlmIChxdWV1ZWRGb2N1cyAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEZvY3VzKSkge1xuICAgIHF1ZXVlZEZvY3VzID0gbnVsbDtcbiAgfVxuXG4gIGlmIChxdWV1ZWREcmFnICE9PSBudWxsICYmIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRHJhZykpIHtcbiAgICBxdWV1ZWREcmFnID0gbnVsbDtcbiAgfVxuXG4gIGlmIChxdWV1ZWRNb3VzZSAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZE1vdXNlKSkge1xuICAgIHF1ZXVlZE1vdXNlID0gbnVsbDtcbiAgfVxuXG4gIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2goYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKTtcbiAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmZvckVhY2goYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpIHtcbiAgaWYgKHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbnVsbDtcblxuICAgIGlmICghaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCkge1xuICAgICAgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IHRydWU7IC8vIFNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gYXR0ZW1wdCByZXBsYXlpbmcgYXMgbWFueSBldmVudHMgYXMgYXJlXG4gICAgICAvLyBub3cgdW5ibG9ja2VkLiBUaGlzIGZpcnN0IG1pZ2h0IG5vdCBhY3R1YWxseSBiZSB1bmJsb2NrZWQgeWV0LlxuICAgICAgLy8gV2UgY291bGQgY2hlY2sgaXQgZWFybHkgdG8gYXZvaWQgc2NoZWR1bGluZyBhbiB1bm5lY2Vzc2FyeSBjYWxsYmFjay5cblxuICAgICAgU2NoZWR1bGVyLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LCByZXBsYXlVbmJsb2NrZWRFdmVudHMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXRyeUlmQmxvY2tlZE9uKHVuYmxvY2tlZCkge1xuICAvLyBNYXJrIGFueXRoaW5nIHRoYXQgd2FzIGJsb2NrZWQgb24gdGhpcyBhcyBubyBsb25nZXIgYmxvY2tlZFxuICAvLyBhbmQgZWxpZ2libGUgZm9yIGEgcmVwbGF5LlxuICBpZiAocXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoID4gMCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWREaXNjcmV0ZUV2ZW50c1swXSwgdW5ibG9ja2VkKTsgLy8gVGhpcyBpcyBhIGV4cG9uZW50aWFsIHNlYXJjaCBmb3IgZWFjaCBib3VuZGFyeSB0aGF0IGNvbW1pdHMuIEkgdGhpbmsgaXQnc1xuICAgIC8vIHdvcnRoIGl0IGJlY2F1c2Ugd2UgZXhwZWN0IHZlcnkgZmV3IGRpc2NyZXRlIGV2ZW50cyB0byBxdWV1ZSB1cCBhbmQgb25jZVxuICAgIC8vIHdlIGFyZSBhY3R1YWxseSBmdWxseSB1bmJsb2NrZWQgaXQgd2lsbCBiZSBmYXN0IHRvIHJlcGxheSB0aGVtLlxuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXVlZEV2ZW50ID0gcXVldWVkRGlzY3JldGVFdmVudHNbaV07XG5cbiAgICAgIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgICAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChxdWV1ZWRGb2N1cyAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRGb2N1cywgdW5ibG9ja2VkKTtcbiAgfVxuXG4gIGlmIChxdWV1ZWREcmFnICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZERyYWcsIHVuYmxvY2tlZCk7XG4gIH1cblxuICBpZiAocXVldWVkTW91c2UgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkTW91c2UsIHVuYmxvY2tlZCk7XG4gIH1cblxuICB2YXIgdW5ibG9jayA9IGZ1bmN0aW9uIChxdWV1ZWRFdmVudCkge1xuICAgIHJldHVybiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRXZlbnQsIHVuYmxvY2tlZCk7XG4gIH07XG5cbiAgcXVldWVkUG9pbnRlcnMuZm9yRWFjaCh1bmJsb2NrKTtcbiAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmZvckVhY2godW5ibG9jayk7XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgcXVldWVkVGFyZ2V0ID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzW19pXTtcblxuICAgIGlmIChxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHdoaWxlIChxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoID4gMCkge1xuICAgIHZhciBuZXh0RXhwbGljaXRUYXJnZXQgPSBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbMF07XG5cbiAgICBpZiAobmV4dEV4cGxpY2l0VGFyZ2V0LmJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC5cbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQobmV4dEV4cGxpY2l0VGFyZ2V0KTtcblxuICAgICAgaWYgKG5leHRFeHBsaWNpdFRhcmdldC5ibG9ja2VkT24gPT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UncmUgdW5ibG9ja2VkLlxuICAgICAgICBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMuc2hpZnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIERpc2NyZXRlRXZlbnQgPSAwO1xudmFyIFVzZXJCbG9ja2luZ0V2ZW50ID0gMTtcbnZhciBDb250aW51b3VzRXZlbnQgPSAyO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgbWFwcGluZyBvZiBzdGFuZGFyZCB2ZW5kb3IgcHJlZml4ZXMgdXNpbmcgdGhlIGRlZmluZWQgc3R5bGUgcHJvcGVydHkgYW5kIGV2ZW50IG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlUHJvcFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBtYWtlUHJlZml4TWFwKHN0eWxlUHJvcCwgZXZlbnROYW1lKSB7XG4gIHZhciBwcmVmaXhlcyA9IHt9O1xuICBwcmVmaXhlc1tzdHlsZVByb3AudG9Mb3dlckNhc2UoKV0gPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcHJlZml4ZXNbJ1dlYmtpdCcgKyBzdHlsZVByb3BdID0gJ3dlYmtpdCcgKyBldmVudE5hbWU7XG4gIHByZWZpeGVzWydNb3onICsgc3R5bGVQcm9wXSA9ICdtb3onICsgZXZlbnROYW1lO1xuICByZXR1cm4gcHJlZml4ZXM7XG59XG4vKipcbiAqIEEgbGlzdCBvZiBldmVudCBuYW1lcyB0byBhIGNvbmZpZ3VyYWJsZSBsaXN0IG9mIHZlbmRvciBwcmVmaXhlcy5cbiAqL1xuXG5cbnZhciB2ZW5kb3JQcmVmaXhlcyA9IHtcbiAgYW5pbWF0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uRW5kJyksXG4gIGFuaW1hdGlvbml0ZXJhdGlvbjogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkl0ZXJhdGlvbicpLFxuICBhbmltYXRpb25zdGFydDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvblN0YXJ0JyksXG4gIHRyYW5zaXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ1RyYW5zaXRpb24nLCAnVHJhbnNpdGlvbkVuZCcpXG59O1xuLyoqXG4gKiBFdmVudCBuYW1lcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGRldGVjdGVkIGFuZCBwcmVmaXhlZCAoaWYgYXBwbGljYWJsZSkuXG4gKi9cblxudmFyIHByZWZpeGVkRXZlbnROYW1lcyA9IHt9O1xuLyoqXG4gKiBFbGVtZW50IHRvIGNoZWNrIGZvciBwcmVmaXhlcyBvbi5cbiAqL1xuXG52YXIgc3R5bGUgPSB7fTtcbi8qKlxuICogQm9vdHN0cmFwIGlmIGEgRE9NIGV4aXN0cy5cbiAqL1xuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7IC8vIE9uIHNvbWUgcGxhdGZvcm1zLCBpbiBwYXJ0aWN1bGFyIHNvbWUgcmVsZWFzZXMgb2YgQW5kcm9pZCA0LngsXG4gIC8vIHRoZSB1bi1wcmVmaXhlZCBcImFuaW1hdGlvblwiIGFuZCBcInRyYW5zaXRpb25cIiBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIG9uIHRoZVxuICAvLyBzdHlsZSBvYmplY3QgYnV0IHRoZSBldmVudHMgdGhhdCBmaXJlIHdpbGwgc3RpbGwgYmUgcHJlZml4ZWQsIHNvIHdlIG5lZWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlIHVuLXByZWZpeGVkIGV2ZW50cyBhcmUgdXNhYmxlLCBhbmQgaWYgbm90IHJlbW92ZSB0aGVtIGZyb20gdGhlIG1hcC5cblxuICBpZiAoISgnQW5pbWF0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uO1xuICB9IC8vIFNhbWUgYXMgYWJvdmVcblxuXG4gIGlmICghKCdUcmFuc2l0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uO1xuICB9XG59XG4vKipcbiAqIEF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCB2ZW5kb3IgcHJlZml4ZWQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoZXZlbnROYW1lKSB7XG4gIGlmIChwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSkge1xuICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXTtcbiAgfSBlbHNlIGlmICghdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXSkge1xuICAgIHJldHVybiBldmVudE5hbWU7XG4gIH1cblxuICB2YXIgcHJlZml4TWFwID0gdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXTtcblxuICBmb3IgKHZhciBzdHlsZVByb3AgaW4gcHJlZml4TWFwKSB7XG4gICAgaWYgKHByZWZpeE1hcC5oYXNPd25Qcm9wZXJ0eShzdHlsZVByb3ApICYmIHN0eWxlUHJvcCBpbiBzdHlsZSkge1xuICAgICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdID0gcHJlZml4TWFwW3N0eWxlUHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50TmFtZTtcbn1cblxudmFyIEFOSU1BVElPTl9FTkQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uZW5kJyk7XG52YXIgQU5JTUFUSU9OX0lURVJBVElPTiA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25pdGVyYXRpb24nKTtcbnZhciBBTklNQVRJT05fU1RBUlQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uc3RhcnQnKTtcbnZhciBUUkFOU0lUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCd0cmFuc2l0aW9uZW5kJyk7XG5cbnZhciB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcyA9IG5ldyBNYXAoKTtcbnZhciBldmVudFByaW9yaXRpZXMgPSBuZXcgTWFwKCk7IC8vIFdlIHN0b3JlIG1vc3Qgb2YgdGhlIGV2ZW50cyBpbiB0aGlzIG1vZHVsZSBpbiBwYWlycyBvZiB0d28gc3RyaW5ncyBzbyB3ZSBjYW4gcmUtdXNlXG4vLyB0aGUgY29kZSByZXF1aXJlZCB0byBhcHBseSB0aGUgc2FtZSBsb2dpYyBmb3IgZXZlbnQgcHJpb3JpdGl6YXRpb24gYW5kIHRoYXQgb2YgdGhlXG4vLyBTaW1wbGVFdmVudFBsdWdpbi4gVGhpcyBjb21wbGljYXRlcyB0aGluZ3Mgc2xpZ2h0bHksIGJ1dCB0aGUgYWltIGlzIHRvIHJlZHVjZSBjb2RlXG4vLyBkdXBsaWNhdGlvbiAoZm9yIHdoaWNoIHRoZXJlIHdvdWxkIGJlIHF1aXRlIGEgYml0KS4gRm9yIHRoZSBldmVudHMgdGhhdCBhcmUgbm90IG5lZWRlZFxuLy8gZm9yIHRoZSBTaW1wbGVFdmVudFBsdWdpbiAob3RoZXJEaXNjcmV0ZUV2ZW50cykgd2UgcHJvY2VzcyB0aGVtIHNlcGFyYXRlbHkgYXMgYW5cbi8vIGFycmF5IG9mIHRvcCBsZXZlbCBldmVudHMuXG4vLyBMYXN0bHksIHdlIGlnbm9yZSBwcmV0dGllciBzbyB3ZSBjYW4ga2VlcCB0aGUgZm9ybWF0dGluZyBzYW5lLlxuLy8gcHJldHRpZXItaWdub3JlXG5cbnZhciBkaXNjcmV0ZUV2ZW50UGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiA9IFsnY2FuY2VsJywgJ2NhbmNlbCcsICdjbGljaycsICdjbGljaycsICdjbG9zZScsICdjbG9zZScsICdjb250ZXh0bWVudScsICdjb250ZXh0TWVudScsICdjb3B5JywgJ2NvcHknLCAnY3V0JywgJ2N1dCcsICdhdXhjbGljaycsICdhdXhDbGljaycsICdkYmxjbGljaycsICdkb3VibGVDbGljaycsIC8vIENhcmVmdWwhXG4nZHJhZ2VuZCcsICdkcmFnRW5kJywgJ2RyYWdzdGFydCcsICdkcmFnU3RhcnQnLCAnZHJvcCcsICdkcm9wJywgJ2ZvY3VzaW4nLCAnZm9jdXMnLCAvLyBDYXJlZnVsIVxuJ2ZvY3Vzb3V0JywgJ2JsdXInLCAvLyBDYXJlZnVsIVxuJ2lucHV0JywgJ2lucHV0JywgJ2ludmFsaWQnLCAnaW52YWxpZCcsICdrZXlkb3duJywgJ2tleURvd24nLCAna2V5cHJlc3MnLCAna2V5UHJlc3MnLCAna2V5dXAnLCAna2V5VXAnLCAnbW91c2Vkb3duJywgJ21vdXNlRG93bicsICdtb3VzZXVwJywgJ21vdXNlVXAnLCAncGFzdGUnLCAncGFzdGUnLCAncGF1c2UnLCAncGF1c2UnLCAncGxheScsICdwbGF5JywgJ3BvaW50ZXJjYW5jZWwnLCAncG9pbnRlckNhbmNlbCcsICdwb2ludGVyZG93bicsICdwb2ludGVyRG93bicsICdwb2ludGVydXAnLCAncG9pbnRlclVwJywgJ3JhdGVjaGFuZ2UnLCAncmF0ZUNoYW5nZScsICdyZXNldCcsICdyZXNldCcsICdzZWVrZWQnLCAnc2Vla2VkJywgJ3N1Ym1pdCcsICdzdWJtaXQnLCAndG91Y2hjYW5jZWwnLCAndG91Y2hDYW5jZWwnLCAndG91Y2hlbmQnLCAndG91Y2hFbmQnLCAndG91Y2hzdGFydCcsICd0b3VjaFN0YXJ0JywgJ3ZvbHVtZWNoYW5nZScsICd2b2x1bWVDaGFuZ2UnXTtcbnZhciBvdGhlckRpc2NyZXRlRXZlbnRzID0gWydjaGFuZ2UnLCAnc2VsZWN0aW9uY2hhbmdlJywgJ3RleHRJbnB1dCcsICdjb21wb3NpdGlvbnN0YXJ0JywgJ2NvbXBvc2l0aW9uZW5kJywgJ2NvbXBvc2l0aW9udXBkYXRlJ107XG5cblxudmFyIHVzZXJCbG9ja2luZ1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4gPSBbJ2RyYWcnLCAnZHJhZycsICdkcmFnZW50ZXInLCAnZHJhZ0VudGVyJywgJ2RyYWdleGl0JywgJ2RyYWdFeGl0JywgJ2RyYWdsZWF2ZScsICdkcmFnTGVhdmUnLCAnZHJhZ292ZXInLCAnZHJhZ092ZXInLCAnbW91c2Vtb3ZlJywgJ21vdXNlTW92ZScsICdtb3VzZW91dCcsICdtb3VzZU91dCcsICdtb3VzZW92ZXInLCAnbW91c2VPdmVyJywgJ3BvaW50ZXJtb3ZlJywgJ3BvaW50ZXJNb3ZlJywgJ3BvaW50ZXJvdXQnLCAncG9pbnRlck91dCcsICdwb2ludGVyb3ZlcicsICdwb2ludGVyT3ZlcicsICdzY3JvbGwnLCAnc2Nyb2xsJywgJ3RvZ2dsZScsICd0b2dnbGUnLCAndG91Y2htb3ZlJywgJ3RvdWNoTW92ZScsICd3aGVlbCcsICd3aGVlbCddOyAvLyBwcmV0dGllci1pZ25vcmVcblxudmFyIGNvbnRpbnVvdXNQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luID0gWydhYm9ydCcsICdhYm9ydCcsIEFOSU1BVElPTl9FTkQsICdhbmltYXRpb25FbmQnLCBBTklNQVRJT05fSVRFUkFUSU9OLCAnYW5pbWF0aW9uSXRlcmF0aW9uJywgQU5JTUFUSU9OX1NUQVJULCAnYW5pbWF0aW9uU3RhcnQnLCAnY2FucGxheScsICdjYW5QbGF5JywgJ2NhbnBsYXl0aHJvdWdoJywgJ2NhblBsYXlUaHJvdWdoJywgJ2R1cmF0aW9uY2hhbmdlJywgJ2R1cmF0aW9uQ2hhbmdlJywgJ2VtcHRpZWQnLCAnZW1wdGllZCcsICdlbmNyeXB0ZWQnLCAnZW5jcnlwdGVkJywgJ2VuZGVkJywgJ2VuZGVkJywgJ2Vycm9yJywgJ2Vycm9yJywgJ2dvdHBvaW50ZXJjYXB0dXJlJywgJ2dvdFBvaW50ZXJDYXB0dXJlJywgJ2xvYWQnLCAnbG9hZCcsICdsb2FkZWRkYXRhJywgJ2xvYWRlZERhdGEnLCAnbG9hZGVkbWV0YWRhdGEnLCAnbG9hZGVkTWV0YWRhdGEnLCAnbG9hZHN0YXJ0JywgJ2xvYWRTdGFydCcsICdsb3N0cG9pbnRlcmNhcHR1cmUnLCAnbG9zdFBvaW50ZXJDYXB0dXJlJywgJ3BsYXlpbmcnLCAncGxheWluZycsICdwcm9ncmVzcycsICdwcm9ncmVzcycsICdzZWVraW5nJywgJ3NlZWtpbmcnLCAnc3RhbGxlZCcsICdzdGFsbGVkJywgJ3N1c3BlbmQnLCAnc3VzcGVuZCcsICd0aW1ldXBkYXRlJywgJ3RpbWVVcGRhdGUnLCBUUkFOU0lUSU9OX0VORCwgJ3RyYW5zaXRpb25FbmQnLCAnd2FpdGluZycsICd3YWl0aW5nJ107XG4vKipcbiAqIFR1cm5zXG4gKiBbJ2Fib3J0JywgLi4uXVxuICpcbiAqIGludG9cbiAqXG4gKiB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcyA9IG5ldyBNYXAoW1xuICogICBbJ2Fib3J0JywgJ29uQWJvcnQnXSxcbiAqIF0pO1xuICpcbiAqIGFuZCByZWdpc3RlcnMgdGhlbS5cbiAqL1xuXG5mdW5jdGlvbiByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyhldmVudFR5cGVzLCBwcmlvcml0eSkge1xuICAvLyBBcyB0aGUgZXZlbnQgdHlwZXMgYXJlIGluIHBhaXJzIG9mIHR3bywgd2UgbmVlZCB0byBpdGVyYXRlXG4gIC8vIHRocm91Z2ggaW4gdHdvcy4gVGhlIGV2ZW50cyBhcmUgaW4gcGFpcnMgb2YgdHdvIHRvIHNhdmUgY29kZVxuICAvLyBhbmQgaW1wcm92ZSBpbml0IHBlcmYgb2YgcHJvY2Vzc2luZyB0aGlzIGFycmF5LCBhcyBpdCB3aWxsXG4gIC8vIHJlc3VsdCBpbiBmYXIgZmV3ZXIgb2JqZWN0IGFsbG9jYXRpb25zIGFuZCBwcm9wZXJ0eSBhY2Nlc3Nlc1xuICAvLyBpZiB3ZSBvbmx5IHVzZSB0aHJlZSBhcnJheXMgdG8gcHJvY2VzcyBhbGwgdGhlIGNhdGVnb3JpZXMgb2ZcbiAgLy8gaW5zdGVhZCBvZiB0dXBsZXMuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRUeXBlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciB0b3BFdmVudCA9IGV2ZW50VHlwZXNbaV07XG4gICAgdmFyIGV2ZW50ID0gZXZlbnRUeXBlc1tpICsgMV07XG4gICAgdmFyIGNhcGl0YWxpemVkRXZlbnQgPSBldmVudFswXS50b1VwcGVyQ2FzZSgpICsgZXZlbnQuc2xpY2UoMSk7XG4gICAgdmFyIHJlYWN0TmFtZSA9ICdvbicgKyBjYXBpdGFsaXplZEV2ZW50O1xuICAgIGV2ZW50UHJpb3JpdGllcy5zZXQodG9wRXZlbnQsIHByaW9yaXR5KTtcbiAgICB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcy5zZXQodG9wRXZlbnQsIHJlYWN0TmFtZSk7XG4gICAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KHJlYWN0TmFtZSwgW3RvcEV2ZW50XSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0RXZlbnRQcmlvcml0aWVzKGV2ZW50VHlwZXMsIHByaW9yaXR5KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgIGV2ZW50UHJpb3JpdGllcy5zZXQoZXZlbnRUeXBlc1tpXSwgcHJpb3JpdHkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50UHJpb3JpdHlGb3JQbHVnaW5TeXN0ZW0oZG9tRXZlbnROYW1lKSB7XG4gIHZhciBwcmlvcml0eSA9IGV2ZW50UHJpb3JpdGllcy5nZXQoZG9tRXZlbnROYW1lKTsgLy8gRGVmYXVsdCB0byBhIENvbnRpbnVvdXNFdmVudC4gTm90ZTogd2UgbWlnaHRcbiAgLy8gd2FudCB0byB3YXJuIGlmIHdlIGNhbid0IGRldGVjdCB0aGUgcHJpb3JpdHlcbiAgLy8gZm9yIHRoZSBldmVudC5cblxuICByZXR1cm4gcHJpb3JpdHkgPT09IHVuZGVmaW5lZCA/IENvbnRpbnVvdXNFdmVudCA6IHByaW9yaXR5O1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJTaW1wbGVFdmVudHMoKSB7XG4gIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKGRpc2NyZXRlRXZlbnRQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luLCBEaXNjcmV0ZUV2ZW50KTtcbiAgcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXModXNlckJsb2NraW5nUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiwgVXNlckJsb2NraW5nRXZlbnQpO1xuICByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyhjb250aW51b3VzUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiwgQ29udGludW91c0V2ZW50KTtcbiAgc2V0RXZlbnRQcmlvcml0aWVzKG90aGVyRGlzY3JldGVFdmVudHMsIERpc2NyZXRlRXZlbnQpO1xufVxuXG52YXIgU2NoZWR1bGVyX25vdyA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3c7XG5cbntcbiAgLy8gUHJvdmlkZSBleHBsaWNpdCBlcnJvciBtZXNzYWdlIHdoZW4gcHJvZHVjdGlvbitwcm9maWxpbmcgYnVuZGxlIG9mIGUuZy5cbiAgLy8gcmVhY3QtZG9tIGlzIHVzZWQgd2l0aCBwcm9kdWN0aW9uIChub24tcHJvZmlsaW5nKSBidW5kbGUgb2ZcbiAgLy8gc2NoZWR1bGVyL3RyYWNpbmdcbiAgaWYgKCEodHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZiAhPSBudWxsICYmIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCAhPSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gcnVuIHRoZSBwcm9maWxpbmcgdmVyc2lvbiBvZiBhIHJlbmRlcmVyIChmb3IgZXhhbXBsZSwgYHJlYWN0LWRvbS9wcm9maWxpbmdgKSB3aXRob3V0IGFsc28gcmVwbGFjaW5nIHRoZSBgc2NoZWR1bGVyL3RyYWNpbmdgIG1vZHVsZSB3aXRoIGBzY2hlZHVsZXIvdHJhY2luZy1wcm9maWxpbmdgLiBZb3VyIGJ1bmRsZXIgbWlnaHQgaGF2ZSBhIHNldHRpbmcgZm9yIGFsaWFzaW5nIGJvdGggbW9kdWxlcy4gTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcHJvZmlsaW5nXCIgKTtcbiAgICB9XG4gIH1cbn1cbi8vIGFzY2VuZGluZyBudW1iZXJzIHNvIHdlIGNhbiBjb21wYXJlIHRoZW0gbGlrZSBudW1iZXJzLiBUaGV5IHN0YXJ0IGF0IDkwIHRvXG4vLyBhdm9pZCBjbGFzaGluZyB3aXRoIFNjaGVkdWxlcidzIHByaW9yaXRpZXMuXG5cbnZhciBJbW1lZGlhdGVQcmlvcml0eSA9IDk5O1xudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5ID0gOTg7XG52YXIgTm9ybWFsUHJpb3JpdHkgPSA5NztcbnZhciBMb3dQcmlvcml0eSA9IDk2O1xudmFyIElkbGVQcmlvcml0eSA9IDk1OyAvLyBOb1ByaW9yaXR5IGlzIHRoZSBhYnNlbmNlIG9mIHByaW9yaXR5LiBBbHNvIFJlYWN0LW9ubHkuXG5cbnZhciBOb1ByaW9yaXR5ID0gOTA7XG52YXIgaW5pdGlhbFRpbWVNcyA9IFNjaGVkdWxlcl9ub3coKTsgLy8gSWYgdGhlIGluaXRpYWwgdGltZXN0YW1wIGlzIHJlYXNvbmFibHkgc21hbGwsIHVzZSBTY2hlZHVsZXIncyBgbm93YCBkaXJlY3RseS5cblxudmFyIFN5bmNMYW5lUHJpb3JpdHkgPSAxNTtcbnZhciBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eSA9IDE0O1xudmFyIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSAxMztcbnZhciBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5ID0gMTI7XG52YXIgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMTE7XG52YXIgSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5ID0gMTA7XG52YXIgRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDk7XG52YXIgRGVmYXVsdExhbmVQcmlvcml0eSA9IDg7XG52YXIgVHJhbnNpdGlvbkh5ZHJhdGlvblByaW9yaXR5ID0gNztcbnZhciBUcmFuc2l0aW9uUHJpb3JpdHkgPSA2O1xudmFyIFJldHJ5TGFuZVByaW9yaXR5ID0gNTtcbnZhciBTZWxlY3RpdmVIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSA0O1xudmFyIElkbGVIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSAzO1xudmFyIElkbGVMYW5lUHJpb3JpdHkgPSAyO1xudmFyIE9mZnNjcmVlbkxhbmVQcmlvcml0eSA9IDE7XG52YXIgTm9MYW5lUHJpb3JpdHkgPSAwO1xudmFyIFRvdGFsTGFuZXMgPSAzMTtcbnZhciBOb0xhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgTm9MYW5lID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMDtcbnZhciBTeW5jTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4xO1xudmFyIFN5bmNCYXRjaGVkTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAqL1xuNDtcbnZhciBJbnB1dERpc2NyZXRlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4yNDtcbnZhciBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAqL1xuMzI7XG52YXIgSW5wdXRDb250aW51b3VzTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAqL1xuMTkyO1xudmFyIERlZmF1bHRIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgKi9cbjI1NjtcbnZhciBEZWZhdWx0TGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjM1ODQ7XG52YXIgVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICAgICAgKi9cbjQwOTY7XG52YXIgVHJhbnNpdGlvbkxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuNDE4NjExMjtcbnZhciBSZXRyeUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG42MjkxNDU2MDtcbnZhciBTb21lUmV0cnlMYW5lID1cbi8qICAgICAgICAgICAgICAgICAgKi9cbjMzNTU0NDMyO1xudmFyIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgKi9cbjY3MTA4ODY0O1xudmFyIE5vbklkbGVMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4xMzQyMTc3Mjc7XG52YXIgSWRsZUh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICAgICAqL1xuMTM0MjE3NzI4O1xudmFyIElkbGVMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjgwNTMwNjM2ODtcbnZhciBPZmZzY3JlZW5MYW5lID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4xMDczNzQxODI0O1xudmFyIE5vVGltZXN0YW1wID0gLTE7XG5mdW5jdGlvbiBzZXRDdXJyZW50VXBkYXRlTGFuZVByaW9yaXR5KG5ld0xhbmVQcmlvcml0eSkge1xufSAvLyBcIlJlZ2lzdGVyc1wiIHVzZWQgdG8gXCJyZXR1cm5cIiBtdWx0aXBsZSB2YWx1ZXNcbi8vIFVzZWQgYnkgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMgYW5kIGdldE5leHRMYW5lczpcblxudmFyIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdExhbmVQcmlvcml0eTtcblxuZnVuY3Rpb24gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobGFuZXMpIHtcbiAgaWYgKChTeW5jTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU3luY0xhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH1cblxuICBpZiAoKFN5bmNCYXRjaGVkTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU3luY0JhdGNoZWRMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIFN5bmNCYXRjaGVkTGFuZTtcbiAgfVxuXG4gIGlmICgoSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGlucHV0RGlzY3JldGVMYW5lcyA9IElucHV0RGlzY3JldGVMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChpbnB1dERpc2NyZXRlTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlucHV0RGlzY3JldGVMYW5lcztcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGlucHV0Q29udGludW91c0xhbmVzID0gSW5wdXRDb250aW51b3VzTGFuZXMgJiBsYW5lcztcblxuICBpZiAoaW5wdXRDb250aW51b3VzTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gaW5wdXRDb250aW51b3VzTGFuZXM7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgRGVmYXVsdEh5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0SHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBEZWZhdWx0SHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBkZWZhdWx0TGFuZXMgPSBEZWZhdWx0TGFuZXMgJiBsYW5lcztcblxuICBpZiAoZGVmYXVsdExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0TGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBkZWZhdWx0TGFuZXM7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBUcmFuc2l0aW9uSHlkcmF0aW9uUHJpb3JpdHk7XG4gICAgcmV0dXJuIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25MYW5lcyA9IFRyYW5zaXRpb25MYW5lcyAmIGxhbmVzO1xuXG4gIGlmICh0cmFuc2l0aW9uTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFRyYW5zaXRpb25Qcmlvcml0eTtcbiAgICByZXR1cm4gdHJhbnNpdGlvbkxhbmVzO1xuICB9XG5cbiAgdmFyIHJldHJ5TGFuZXMgPSBSZXRyeUxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKHJldHJ5TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFJldHJ5TGFuZVByaW9yaXR5O1xuICAgIHJldHVybiByZXRyeUxhbmVzO1xuICB9XG5cbiAgaWYgKGxhbmVzICYgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZSkge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU2VsZWN0aXZlSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBTZWxlY3RpdmVIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIElkbGVIeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSWRsZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gSWRsZUh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgaWRsZUxhbmVzID0gSWRsZUxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGlkbGVMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSWRsZUxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gaWRsZUxhbmVzO1xuICB9XG5cbiAgaWYgKChPZmZzY3JlZW5MYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBPZmZzY3JlZW5MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIE9mZnNjcmVlbkxhbmU7XG4gIH1cblxuICB7XG4gICAgZXJyb3IoJ1Nob3VsZCBoYXZlIGZvdW5kIG1hdGNoaW5nIGxhbmVzLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LicpO1xuICB9IC8vIFRoaXMgc2hvdWxkbid0IGJlIHJlYWNoYWJsZSwgYnV0IGFzIGEgZmFsbGJhY2ssIHJldHVybiB0aGUgZW50aXJlIGJpdG1hc2suXG5cblxuICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRMYW5lUHJpb3JpdHk7XG4gIHJldHVybiBsYW5lcztcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVyUHJpb3JpdHlUb0xhbmVQcmlvcml0eShzY2hlZHVsZXJQcmlvcml0eUxldmVsKSB7XG4gIHN3aXRjaCAoc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gU3luY0xhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5O1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgICAgLy8gVE9ETzogSGFuZGxlIExvd1NjaGVkdWxlclByaW9yaXR5LCBzb21laG93LiBNYXliZSB0aGUgc2FtZSBsYW5lIGFzIGh5ZHJhdGlvbi5cbiAgICAgIHJldHVybiBEZWZhdWx0TGFuZVByaW9yaXR5O1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSWRsZUxhbmVQcmlvcml0eTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gTm9MYW5lUHJpb3JpdHk7XG4gIH1cbn1cbmZ1bmN0aW9uIGxhbmVQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkobGFuZVByaW9yaXR5KSB7XG4gIHN3aXRjaCAobGFuZVByaW9yaXR5KSB7XG4gICAgY2FzZSBTeW5jTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgU3luY0JhdGNoZWRMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSW1tZWRpYXRlUHJpb3JpdHk7XG5cbiAgICBjYXNlIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuXG4gICAgY2FzZSBEZWZhdWx0SHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgRGVmYXVsdExhbmVQcmlvcml0eTpcbiAgICBjYXNlIFRyYW5zaXRpb25IeWRyYXRpb25Qcmlvcml0eTpcbiAgICBjYXNlIFRyYW5zaXRpb25Qcmlvcml0eTpcbiAgICBjYXNlIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIFJldHJ5TGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIE5vcm1hbFByaW9yaXR5O1xuXG4gICAgY2FzZSBJZGxlSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSWRsZUxhbmVQcmlvcml0eTpcbiAgICBjYXNlIE9mZnNjcmVlbkxhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJZGxlUHJpb3JpdHk7XG5cbiAgICBjYXNlIE5vTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIE5vUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCB1cGRhdGUgcHJpb3JpdHk6IFwiICsgbGFuZVByaW9yaXR5ICsgXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cbn1cbmZ1bmN0aW9uIGdldE5leHRMYW5lcyhyb290LCB3aXBMYW5lcykge1xuICAvLyBFYXJseSBiYWlsb3V0IGlmIHRoZXJlJ3Mgbm8gcGVuZGluZyB3b3JrIGxlZnQuXG4gIHZhciBwZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcblxuICBpZiAocGVuZGluZ0xhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gTm9MYW5lcztcbiAgfVxuXG4gIHZhciBuZXh0TGFuZXMgPSBOb0xhbmVzO1xuICB2YXIgbmV4dExhbmVQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICB2YXIgZXhwaXJlZExhbmVzID0gcm9vdC5leHBpcmVkTGFuZXM7XG4gIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG4gIHZhciBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7IC8vIENoZWNrIGlmIGFueSB3b3JrIGhhcyBleHBpcmVkLlxuXG4gIGlmIChleHBpcmVkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICBuZXh0TGFuZXMgPSBleHBpcmVkTGFuZXM7XG4gICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU3luY0xhbmVQcmlvcml0eTtcbiAgfSBlbHNlIHtcbiAgICAvLyBEbyBub3Qgd29yayBvbiBhbnkgaWRsZSB3b3JrIHVudGlsIGFsbCB0aGUgbm9uLWlkbGUgd29yayBoYXMgZmluaXNoZWQsXG4gICAgLy8gZXZlbiBpZiB0aGUgd29yayBpcyBzdXNwZW5kZWQuXG4gICAgdmFyIG5vbklkbGVQZW5kaW5nTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiBOb25JZGxlTGFuZXM7XG5cbiAgICBpZiAobm9uSWRsZVBlbmRpbmdMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgdmFyIG5vbklkbGVVbmJsb2NrZWRMYW5lcyA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgIGlmIChub25JZGxlVW5ibG9ja2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobm9uSWRsZVVuYmxvY2tlZExhbmVzKTtcbiAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG5vbklkbGVQaW5nZWRMYW5lcyA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiBwaW5nZWRMYW5lcztcblxuICAgICAgICBpZiAobm9uSWRsZVBpbmdlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobm9uSWRsZVBpbmdlZExhbmVzKTtcbiAgICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIG9ubHkgcmVtYWluaW5nIHdvcmsgaXMgSWRsZS5cbiAgICAgIHZhciB1bmJsb2NrZWRMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIH5zdXNwZW5kZWRMYW5lcztcblxuICAgICAgaWYgKHVuYmxvY2tlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHVuYmxvY2tlZExhbmVzKTtcbiAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHBpbmdlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGluZ2VkTGFuZXMpO1xuICAgICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChuZXh0TGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIHJlYWNoYWJsZSBpZiB3ZSdyZSBzdXNwZW5kZWRcbiAgICAvLyBUT0RPOiBDb25zaWRlciB3YXJuaW5nIGluIHRoaXMgcGF0aCBpZiBhIGZhbGxiYWNrIHRpbWVyIGlzIG5vdCBzY2hlZHVsZWQuXG4gICAgcmV0dXJuIE5vTGFuZXM7XG4gIH0gLy8gSWYgdGhlcmUgYXJlIGhpZ2hlciBwcmlvcml0eSBsYW5lcywgd2UnbGwgaW5jbHVkZSB0aGVtIGV2ZW4gaWYgdGhleVxuICAvLyBhcmUgc3VzcGVuZGVkLlxuXG5cbiAgbmV4dExhbmVzID0gcGVuZGluZ0xhbmVzICYgZ2V0RXF1YWxPckhpZ2hlclByaW9yaXR5TGFuZXMobmV4dExhbmVzKTsgLy8gSWYgd2UncmUgYWxyZWFkeSBpbiB0aGUgbWlkZGxlIG9mIGEgcmVuZGVyLCBzd2l0Y2hpbmcgbGFuZXMgd2lsbCBpbnRlcnJ1cHRcbiAgLy8gaXQgYW5kIHdlJ2xsIGxvc2Ugb3VyIHByb2dyZXNzLiBXZSBzaG91bGQgb25seSBkbyB0aGlzIGlmIHRoZSBuZXcgbGFuZXMgYXJlXG4gIC8vIGhpZ2hlciBwcmlvcml0eS5cblxuICBpZiAod2lwTGFuZXMgIT09IE5vTGFuZXMgJiYgd2lwTGFuZXMgIT09IG5leHRMYW5lcyAmJiAvLyBJZiB3ZSBhbHJlYWR5IHN1c3BlbmRlZCB3aXRoIGEgZGVsYXksIHRoZW4gaW50ZXJydXB0aW5nIGlzIGZpbmUuIERvbid0XG4gIC8vIGJvdGhlciB3YWl0aW5nIHVudGlsIHRoZSByb290IGlzIGNvbXBsZXRlLlxuICAod2lwTGFuZXMgJiBzdXNwZW5kZWRMYW5lcykgPT09IE5vTGFuZXMpIHtcbiAgICBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyh3aXBMYW5lcyk7XG4gICAgdmFyIHdpcExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuXG4gICAgaWYgKG5leHRMYW5lUHJpb3JpdHkgPD0gd2lwTGFuZVByaW9yaXR5KSB7XG4gICAgICByZXR1cm4gd2lwTGFuZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gbmV4dExhbmVQcmlvcml0eTtcbiAgICB9XG4gIH0gLy8gQ2hlY2sgZm9yIGVudGFuZ2xlZCBsYW5lcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGJhdGNoLlxuICAvL1xuICAvLyBBIGxhbmUgaXMgc2FpZCB0byBiZSBlbnRhbmdsZWQgd2l0aCBhbm90aGVyIHdoZW4gaXQncyBub3QgYWxsb3dlZCB0byByZW5kZXJcbiAgLy8gaW4gYSBiYXRjaCB0aGF0IGRvZXMgbm90IGFsc28gaW5jbHVkZSB0aGUgb3RoZXIgbGFuZS4gVHlwaWNhbGx5IHdlIGRvIHRoaXNcbiAgLy8gd2hlbiBtdWx0aXBsZSB1cGRhdGVzIGhhdmUgdGhlIHNhbWUgc291cmNlLCBhbmQgd2Ugb25seSB3YW50IHRvIHJlc3BvbmQgdG9cbiAgLy8gdGhlIG1vc3QgcmVjZW50IGV2ZW50IGZyb20gdGhhdCBzb3VyY2UuXG4gIC8vXG4gIC8vIE5vdGUgdGhhdCB3ZSBhcHBseSBlbnRhbmdsZW1lbnRzICphZnRlciogY2hlY2tpbmcgZm9yIHBhcnRpYWwgd29yayBhYm92ZS5cbiAgLy8gVGhpcyBtZWFucyB0aGF0IGlmIGEgbGFuZSBpcyBlbnRhbmdsZWQgZHVyaW5nIGFuIGludGVybGVhdmVkIGV2ZW50IHdoaWxlXG4gIC8vIGl0J3MgYWxyZWFkeSByZW5kZXJpbmcsIHdlIHdvbid0IGludGVycnVwdCBpdC4gVGhpcyBpcyBpbnRlbnRpb25hbCwgc2luY2VcbiAgLy8gZW50YW5nbGVtZW50IGlzIHVzdWFsbHkgXCJiZXN0IGVmZm9ydFwiOiB3ZSdsbCB0cnkgb3VyIGJlc3QgdG8gcmVuZGVyIHRoZVxuICAvLyBsYW5lcyBpbiB0aGUgc2FtZSBiYXRjaCwgYnV0IGl0J3Mgbm90IHdvcnRoIHRocm93aW5nIG91dCBwYXJ0aWFsbHlcbiAgLy8gY29tcGxldGVkIHdvcmsgaW4gb3JkZXIgdG8gZG8gaXQuXG4gIC8vXG4gIC8vIEZvciB0aG9zZSBleGNlcHRpb25zIHdoZXJlIGVudGFuZ2xlbWVudCBpcyBzZW1hbnRpY2FsbHkgaW1wb3J0YW50LCBsaWtlXG4gIC8vIHVzZU11dGFibGVTb3VyY2UsIHdlIHNob3VsZCBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubyBwYXJ0aWFsIHdvcmsgYXQgdGhlXG4gIC8vIHRpbWUgd2UgYXBwbHkgdGhlIGVudGFuZ2xlbWVudC5cblxuXG4gIHZhciBlbnRhbmdsZWRMYW5lcyA9IHJvb3QuZW50YW5nbGVkTGFuZXM7XG5cbiAgaWYgKGVudGFuZ2xlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gICAgdmFyIGxhbmVzID0gbmV4dExhbmVzICYgZW50YW5nbGVkTGFuZXM7XG5cbiAgICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgIG5leHRMYW5lcyB8PSBlbnRhbmdsZW1lbnRzW2luZGV4XTtcbiAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0TGFuZXM7XG59XG5mdW5jdGlvbiBnZXRNb3N0UmVjZW50RXZlbnRUaW1lKHJvb3QsIGxhbmVzKSB7XG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgbW9zdFJlY2VudEV2ZW50VGltZSA9IE5vVGltZXN0YW1wO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgdmFyIGV2ZW50VGltZSA9IGV2ZW50VGltZXNbaW5kZXhdO1xuXG4gICAgaWYgKGV2ZW50VGltZSA+IG1vc3RSZWNlbnRFdmVudFRpbWUpIHtcbiAgICAgIG1vc3RSZWNlbnRFdmVudFRpbWUgPSBldmVudFRpbWU7XG4gICAgfVxuXG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cblxuICByZXR1cm4gbW9zdFJlY2VudEV2ZW50VGltZTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUV4cGlyYXRpb25UaW1lKGxhbmUsIGN1cnJlbnRUaW1lKSB7XG4gIC8vIFRPRE86IEV4cGlyYXRpb24gaGV1cmlzdGljIGlzIGNvbnN0YW50IHBlciBsYW5lLCBzbyBjb3VsZCB1c2UgYSBtYXAuXG4gIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGxhbmUpO1xuICB2YXIgcHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcblxuICBpZiAocHJpb3JpdHkgPj0gSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5KSB7XG4gICAgLy8gVXNlciBpbnRlcmFjdGlvbnMgc2hvdWxkIGV4cGlyZSBzbGlnaHRseSBtb3JlIHF1aWNrbHkuXG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGlzIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyBjb25zdGFudCBhcyBpbiBTY2hlZHVsZXIuanMuIFdoZW5cbiAgICAvLyB3ZSBtYWRlIGl0IGxhcmdlciwgYSBwcm9kdWN0IG1ldHJpYyBpbiB3d3cgcmVncmVzc2VkLCBzdWdnZXN0aW5nIHRoZXJlJ3NcbiAgICAvLyBhIHVzZXIgaW50ZXJhY3Rpb24gdGhhdCdzIGJlaW5nIHN0YXJ2ZWQgYnkgYSBzZXJpZXMgb2Ygc3luY2hyb25vdXNcbiAgICAvLyB1cGRhdGVzLiBJZiB0aGF0IHRoZW9yeSBpcyBjb3JyZWN0LCB0aGUgcHJvcGVyIHNvbHV0aW9uIGlzIHRvIGZpeCB0aGVcbiAgICAvLyBzdGFydmF0aW9uLiBIb3dldmVyLCB0aGlzIHNjZW5hcmlvIHN1cHBvcnRzIHRoZSBpZGVhIHRoYXQgZXhwaXJhdGlvblxuICAgIC8vIHRpbWVzIGFyZSBhbiBpbXBvcnRhbnQgc2FmZWd1YXJkIHdoZW4gc3RhcnZhdGlvbiBkb2VzIGhhcHBlbi5cbiAgICAvL1xuICAgIC8vIEFsc28gbm90ZSB0aGF0LCBpbiB0aGUgY2FzZSBvZiB1c2VyIGlucHV0IHNwZWNpZmljYWxseSwgdGhpcyB3aWxsIHNvb24gbm9cbiAgICAvLyBsb25nZXIgYmUgYW4gaXNzdWUgYmVjYXVzZSB3ZSBwbGFuIHRvIG1ha2UgdXNlciBpbnB1dCBzeW5jaHJvbm91cyBieVxuICAgIC8vIGRlZmF1bHQgKHVudGlsIHlvdSBlbnRlciBgc3RhcnRUcmFuc2l0aW9uYCwgb2YgY291cnNlLilcbiAgICAvL1xuICAgIC8vIElmIHdlcmVuJ3QgcGxhbm5pbmcgdG8gbWFrZSB0aGVzZSB1cGRhdGVzIHN5bmNocm9ub3VzIHNvb24gYW55d2F5LCBJXG4gICAgLy8gd291bGQgcHJvYmFibHkgbWFrZSB0aGlzIG51bWJlciBhIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXIuXG4gICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgMjUwO1xuICB9IGVsc2UgaWYgKHByaW9yaXR5ID49IFRyYW5zaXRpb25Qcmlvcml0eSkge1xuICAgIHJldHVybiBjdXJyZW50VGltZSArIDUwMDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gQW55dGhpbmcgaWRsZSBwcmlvcml0eSBvciBsb3dlciBzaG91bGQgbmV2ZXIgZXhwaXJlLlxuICAgIHJldHVybiBOb1RpbWVzdGFtcDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrU3RhcnZlZExhbmVzQXNFeHBpcmVkKHJvb3QsIGN1cnJlbnRUaW1lKSB7XG4gIC8vIFRPRE86IFRoaXMgZ2V0cyBjYWxsZWQgZXZlcnkgdGltZSB3ZSB5aWVsZC4gV2UgY2FuIG9wdGltaXplIGJ5IHN0b3JpbmdcbiAgLy8gdGhlIGVhcmxpZXN0IGV4cGlyYXRpb24gdGltZSBvbiB0aGUgcm9vdC4gVGhlbiB1c2UgdGhhdCB0byBxdWlja2x5IGJhaWwgb3V0XG4gIC8vIG9mIHRoaXMgZnVuY3Rpb24uXG4gIHZhciBwZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcbiAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcbiAgdmFyIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lcztcbiAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzOyAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHBlbmRpbmcgbGFuZXMgYW5kIGNoZWNrIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlaXJcbiAgLy8gZXhwaXJhdGlvbiB0aW1lLiBJZiBzbywgd2UnbGwgYXNzdW1lIHRoZSB1cGRhdGUgaXMgYmVpbmcgc3RhcnZlZCBhbmQgbWFya1xuICAvLyBpdCBhcyBleHBpcmVkIHRvIGZvcmNlIGl0IHRvIGZpbmlzaC5cblxuICB2YXIgbGFuZXMgPSBwZW5kaW5nTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICB2YXIgZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZXNbaW5kZXhdO1xuXG4gICAgaWYgKGV4cGlyYXRpb25UaW1lID09PSBOb1RpbWVzdGFtcCkge1xuICAgICAgLy8gRm91bmQgYSBwZW5kaW5nIGxhbmUgd2l0aCBubyBleHBpcmF0aW9uIHRpbWUuIElmIGl0J3Mgbm90IHN1c3BlbmRlZCwgb3JcbiAgICAgIC8vIGlmIGl0J3MgcGluZ2VkLCBhc3N1bWUgaXQncyBDUFUtYm91bmQuIENvbXB1dGUgYSBuZXcgZXhwaXJhdGlvbiB0aW1lXG4gICAgICAvLyB1c2luZyB0aGUgY3VycmVudCB0aW1lLlxuICAgICAgaWYgKChsYW5lICYgc3VzcGVuZGVkTGFuZXMpID09PSBOb0xhbmVzIHx8IChsYW5lICYgcGluZ2VkTGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIC8vIEFzc3VtZXMgdGltZXN0YW1wcyBhcmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLlxuICAgICAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gY29tcHV0ZUV4cGlyYXRpb25UaW1lKGxhbmUsIGN1cnJlbnRUaW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lKSB7XG4gICAgICAvLyBUaGlzIGxhbmUgZXhwaXJlZFxuICAgICAgcm9vdC5leHBpcmVkTGFuZXMgfD0gbGFuZTtcbiAgICB9XG5cbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufSAvLyBUaGlzIHJldHVybnMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcGVuZGluZyBsYW5lcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleVxuZnVuY3Rpb24gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCkge1xuICB2YXIgZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiA9IHJvb3QucGVuZGluZ0xhbmVzICYgfk9mZnNjcmVlbkxhbmU7XG5cbiAgaWYgKGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm4gZXZlcnl0aGluZ0J1dE9mZnNjcmVlbjtcbiAgfVxuXG4gIGlmIChldmVyeXRoaW5nQnV0T2Zmc2NyZWVuICYgT2Zmc2NyZWVuTGFuZSkge1xuICAgIHJldHVybiBPZmZzY3JlZW5MYW5lO1xuICB9XG5cbiAgcmV0dXJuIE5vTGFuZXM7XG59XG5mdW5jdGlvbiByZXR1cm5OZXh0TGFuZXNQcmlvcml0eSgpIHtcbiAgcmV0dXJuIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xufVxuZnVuY3Rpb24gaW5jbHVkZXNOb25JZGxlV29yayhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgTm9uSWRsZUxhbmVzKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzT25seVJldHJpZXMobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIFJldHJ5TGFuZXMpID09PSBsYW5lcztcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzT25seVRyYW5zaXRpb25zKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBUcmFuc2l0aW9uTGFuZXMpID09PSBsYW5lcztcbn0gLy8gVG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyBtdWx0aXBsZSB1cGRhdGVzIGluIHRoZSBzYW1lIGV2ZW50LCB0aGlzIHNob3VsZFxuLy8gYmUgYSBwdXJlIGZ1bmN0aW9uLCBzbyB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIGxhbmUgZm9yIGdpdmVuIGlucHV0cy5cblxuZnVuY3Rpb24gZmluZFVwZGF0ZUxhbmUobGFuZVByaW9yaXR5LCB3aXBMYW5lcykge1xuICBzd2l0Y2ggKGxhbmVQcmlvcml0eSkge1xuICAgIGNhc2UgTm9MYW5lUHJpb3JpdHk6XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3luY0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBTeW5jTGFuZTtcblxuICAgIGNhc2UgU3luY0JhdGNoZWRMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gU3luY0JhdGNoZWRMYW5lO1xuXG4gICAgY2FzZSBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5OlxuICAgICAge1xuICAgICAgICB2YXIgX2xhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShJbnB1dERpc2NyZXRlTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgIGlmIChfbGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gU2hpZnQgdG8gdGhlIG5leHQgcHJpb3JpdHkgbGV2ZWxcbiAgICAgICAgICByZXR1cm4gZmluZFVwZGF0ZUxhbmUoSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5LCB3aXBMYW5lcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2xhbmU7XG4gICAgICB9XG5cbiAgICBjYXNlIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lMiA9IHBpY2tBcmJpdHJhcnlMYW5lKElucHV0Q29udGludW91c0xhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICBpZiAoX2xhbmUyID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAvLyBTaGlmdCB0byB0aGUgbmV4dCBwcmlvcml0eSBsZXZlbFxuICAgICAgICAgIHJldHVybiBmaW5kVXBkYXRlTGFuZShEZWZhdWx0TGFuZVByaW9yaXR5LCB3aXBMYW5lcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2xhbmUyO1xuICAgICAgfVxuXG4gICAgY2FzZSBEZWZhdWx0TGFuZVByaW9yaXR5OlxuICAgICAge1xuICAgICAgICB2YXIgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoRGVmYXVsdExhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICBpZiAoX2xhbmUzID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAvLyBJZiBhbGwgdGhlIGRlZmF1bHQgbGFuZXMgYXJlIGFscmVhZHkgYmVpbmcgd29ya2VkIG9uLCBsb29rIGZvciBhXG4gICAgICAgICAgLy8gbGFuZSBpbiB0aGUgdHJhbnNpdGlvbiByYW5nZS5cbiAgICAgICAgICBfbGFuZTMgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgICAgaWYgKF9sYW5lMyA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgICAvLyBBbGwgdGhlIHRyYW5zaXRpb24gbGFuZXMgYXJlIHRha2VuLCB0b28uIFRoaXMgc2hvdWxkIGJlIHZlcnlcbiAgICAgICAgICAgIC8vIHJhcmUsIGJ1dCBhcyBhIGxhc3QgcmVzb3J0LCBwaWNrIGEgZGVmYXVsdCBsYW5lLiBUaGlzIHdpbGwgaGF2ZVxuICAgICAgICAgICAgLy8gdGhlIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgd29yay1pbi1wcm9ncmVzcyByZW5kZXIuXG4gICAgICAgICAgICBfbGFuZTMgPSBwaWNrQXJiaXRyYXJ5TGFuZShEZWZhdWx0TGFuZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfbGFuZTM7XG4gICAgICB9XG5cbiAgICBjYXNlIFRyYW5zaXRpb25Qcmlvcml0eTogLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgZmluZFRyYW5zaXRpb25MYW5lIGluc3RlYWRcblxuICAgIGNhc2UgUmV0cnlMYW5lUHJpb3JpdHk6XG4gICAgICAvLyBTaG91bGQgYmUgaGFuZGxlZCBieSBmaW5kUmV0cnlMYW5lIGluc3RlYWRcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBJZGxlTGFuZVByaW9yaXR5OlxuICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShJZGxlTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShJZGxlTGFuZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFuZTtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIHVwZGF0ZSBwcmlvcml0eTogXCIgKyBsYW5lUHJpb3JpdHkgKyBcIi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIiApO1xuICAgIH1cbiAgfVxufSAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzIG11bHRpcGxlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgZXZlbnQsIHRoaXMgc2hvdWxkXG4vLyBiZSBwdXJlIGZ1bmN0aW9uLCBzbyB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIGxhbmUgZm9yIGdpdmVuIGlucHV0cy5cblxuZnVuY3Rpb24gZmluZFRyYW5zaXRpb25MYW5lKHdpcExhbmVzLCBwZW5kaW5nTGFuZXMpIHtcbiAgLy8gRmlyc3QgbG9vayBmb3IgbGFuZXMgdGhhdCBhcmUgY29tcGxldGVseSB1bmNsYWltZWQsIGkuZS4gaGF2ZSBub1xuICAvLyBwZW5kaW5nIHdvcmsuXG4gIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfnBlbmRpbmdMYW5lcyk7XG5cbiAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgIC8vIElmIGFsbCBsYW5lcyBoYXZlIHBlbmRpbmcgd29yaywgbG9vayBmb3IgYSBsYW5lIHRoYXQgaXNuJ3QgY3VycmVudGx5XG4gICAgLy8gYmVpbmcgd29ya2VkIG9uLlxuICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgICAgLy8gSWYgZXZlcnl0aGluZyBpcyBiZWluZyB3b3JrZWQgb24sIHBpY2sgYW55IGxhbmUuIFRoaXMgaGFzIHRoZVxuICAgICAgLy8gZWZmZWN0IG9mIGludGVycnVwdGluZyB0aGUgY3VycmVudCB3b3JrLWluLXByb2dyZXNzLlxuICAgICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59IC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgdXBkYXRlcyBpbiB0aGUgc2FtZSBldmVudCwgdGhpcyBzaG91bGRcbi8vIGJlIHB1cmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgbGFuZSBmb3IgZ2l2ZW4gaW5wdXRzLlxuXG5mdW5jdGlvbiBmaW5kUmV0cnlMYW5lKHdpcExhbmVzKSB7XG4gIC8vIFRoaXMgaXMgYSBmb3JrIG9mIGBmaW5kVXBkYXRlTGFuZWAgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBTdXNwZW5zZVxuICAvLyBcInJldHJpZXNcIiBcdTIwMTQgYSBzcGVjaWFsIHVwZGF0ZSB0aGF0IGF0dGVtcHRzIHRvIGZsaXAgYSBTdXNwZW5zZSBib3VuZGFyeVxuICAvLyBmcm9tIGl0cyBwbGFjZWhvbGRlciBzdGF0ZSB0byBpdHMgcHJpbWFyeS9yZXNvbHZlZCBzdGF0ZS5cbiAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShSZXRyeUxhbmVzICYgfndpcExhbmVzKTtcblxuICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFJldHJ5TGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59XG5cbmZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobGFuZXMpIHtcbiAgcmV0dXJuIGxhbmVzICYgLWxhbmVzO1xufVxuXG5mdW5jdGlvbiBnZXRMb3dlc3RQcmlvcml0eUxhbmUobGFuZXMpIHtcbiAgLy8gVGhpcyBmaW5kcyB0aGUgbW9zdCBzaWduaWZpY2FudCBub24temVybyBiaXQuXG4gIHZhciBpbmRleCA9IDMxIC0gY2x6MzIobGFuZXMpO1xuICByZXR1cm4gaW5kZXggPCAwID8gTm9MYW5lcyA6IDEgPDwgaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGdldEVxdWFsT3JIaWdoZXJQcmlvcml0eUxhbmVzKGxhbmVzKSB7XG4gIHJldHVybiAoZ2V0TG93ZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSA8PCAxKSAtIDE7XG59XG5cbmZ1bmN0aW9uIHBpY2tBcmJpdHJhcnlMYW5lKGxhbmVzKSB7XG4gIC8vIFRoaXMgd3JhcHBlciBmdW5jdGlvbiBnZXRzIGlubGluZWQuIE9ubHkgZXhpc3RzIHNvIHRvIGNvbW11bmljYXRlIHRoYXQgaXRcbiAgLy8gZG9lc24ndCBtYXR0ZXIgd2hpY2ggYml0IGlzIHNlbGVjdGVkOyB5b3UgY2FuIHBpY2sgYW55IGJpdCB3aXRob3V0XG4gIC8vIGFmZmVjdGluZyB0aGUgYWxnb3JpdGhtcyB3aGVyZSBpdHMgdXNlZC4gSGVyZSBJJ20gdXNpbmdcbiAgLy8gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZSBiZWNhdXNlIGl0IHJlcXVpcmVzIHRoZSBmZXdlc3Qgb3BlcmF0aW9ucy5cbiAgcmV0dXJuIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobGFuZXMpO1xufVxuXG5mdW5jdGlvbiBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKSB7XG4gIHJldHVybiAzMSAtIGNsejMyKGxhbmVzKTtcbn1cblxuZnVuY3Rpb24gbGFuZVRvSW5kZXgobGFuZSkge1xuICByZXR1cm4gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lKTtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXNTb21lTGFuZShhLCBiKSB7XG4gIHJldHVybiAoYSAmIGIpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gaXNTdWJzZXRPZkxhbmVzKHNldCwgc3Vic2V0KSB7XG4gIHJldHVybiAoc2V0ICYgc3Vic2V0KSA9PT0gc3Vic2V0O1xufVxuZnVuY3Rpb24gbWVyZ2VMYW5lcyhhLCBiKSB7XG4gIHJldHVybiBhIHwgYjtcbn1cbmZ1bmN0aW9uIHJlbW92ZUxhbmVzKHNldCwgc3Vic2V0KSB7XG4gIHJldHVybiBzZXQgJiB+c3Vic2V0O1xufSAvLyBTZWVtcyByZWR1bmRhbnQsIGJ1dCBpdCBjaGFuZ2VzIHRoZSB0eXBlIGZyb20gYSBzaW5nbGUgbGFuZSAodXNlZCBmb3Jcbi8vIHVwZGF0ZXMpIHRvIGEgZ3JvdXAgb2YgbGFuZXMgKHVzZWQgZm9yIGZsdXNoaW5nIHdvcmspLlxuXG5mdW5jdGlvbiBsYW5lVG9MYW5lcyhsYW5lKSB7XG4gIHJldHVybiBsYW5lO1xufVxuZnVuY3Rpb24gaGlnaGVyUHJpb3JpdHlMYW5lKGEsIGIpIHtcbiAgLy8gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBiaXQgcmFuZ2VzIGRlY3JlYXNlIGluIHByaW9yaXR5IGFzIHlvdSBnbyBsZWZ0LlxuICByZXR1cm4gYSAhPT0gTm9MYW5lICYmIGEgPCBiID8gYSA6IGI7XG59XG5mdW5jdGlvbiBjcmVhdGVMYW5lTWFwKGluaXRpYWwpIHtcbiAgLy8gSW50ZW50aW9uYWxseSBwdXNoaW5nIG9uZSBieSBvbmUuXG4gIC8vIGh0dHBzOi8vdjguZGV2L2Jsb2cvZWxlbWVudHMta2luZHMjYXZvaWQtY3JlYXRpbmctaG9sZXNcbiAgdmFyIGxhbmVNYXAgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IFRvdGFsTGFuZXM7IGkrKykge1xuICAgIGxhbmVNYXAucHVzaChpbml0aWFsKTtcbiAgfVxuXG4gIHJldHVybiBsYW5lTWFwO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RVcGRhdGVkKHJvb3QsIHVwZGF0ZUxhbmUsIGV2ZW50VGltZSkge1xuICByb290LnBlbmRpbmdMYW5lcyB8PSB1cGRhdGVMYW5lOyAvLyBUT0RPOiBUaGVvcmV0aWNhbGx5LCBhbnkgdXBkYXRlIHRvIGFueSBsYW5lIGNhbiB1bmJsb2NrIGFueSBvdGhlciBsYW5lLiBCdXRcbiAgLy8gaXQncyBub3QgcHJhY3RpY2FsIHRvIHRyeSBldmVyeSBzaW5nbGUgcG9zc2libGUgY29tYmluYXRpb24uIFdlIG5lZWQgYVxuICAvLyBoZXVyaXN0aWMgdG8gZGVjaWRlIHdoaWNoIGxhbmVzIHRvIGF0dGVtcHQgdG8gcmVuZGVyLCBhbmQgaW4gd2hpY2ggYmF0Y2hlcy5cbiAgLy8gRm9yIG5vdywgd2UgdXNlIHRoZSBzYW1lIGhldXJpc3RpYyBhcyBpbiB0aGUgb2xkIEV4cGlyYXRpb25UaW1lcyBtb2RlbDpcbiAgLy8gcmV0cnkgYW55IGxhbmUgYXQgZXF1YWwgb3IgbG93ZXIgcHJpb3JpdHksIGJ1dCBkb24ndCB0cnkgdXBkYXRlcyBhdCBoaWdoZXJcbiAgLy8gcHJpb3JpdHkgd2l0aG91dCBhbHNvIGluY2x1ZGluZyB0aGUgbG93ZXIgcHJpb3JpdHkgdXBkYXRlcy4gVGhpcyB3b3JrcyB3ZWxsXG4gIC8vIHdoZW4gY29uc2lkZXJpbmcgdXBkYXRlcyBhY3Jvc3MgZGlmZmVyZW50IHByaW9yaXR5IGxldmVscywgYnV0IGlzbid0XG4gIC8vIHN1ZmZpY2llbnQgZm9yIHVwZGF0ZXMgd2l0aGluIHRoZSBzYW1lIHByaW9yaXR5LCBzaW5jZSB3ZSB3YW50IHRvIHRyZWF0XG4gIC8vIHRob3NlIHVwZGF0ZXMgYXMgcGFyYWxsZWwuXG4gIC8vIFVuc3VzcGVuZCBhbnkgdXBkYXRlIGF0IGVxdWFsIG9yIGxvd2VyIHByaW9yaXR5LlxuXG4gIHZhciBoaWdoZXJQcmlvcml0eUxhbmVzID0gdXBkYXRlTGFuZSAtIDE7IC8vIFR1cm5zIDBiMTAwMCBpbnRvIDBiMDExMVxuXG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgJj0gaGlnaGVyUHJpb3JpdHlMYW5lcztcbiAgcm9vdC5waW5nZWRMYW5lcyAmPSBoaWdoZXJQcmlvcml0eUxhbmVzO1xuICB2YXIgZXZlbnRUaW1lcyA9IHJvb3QuZXZlbnRUaW1lcztcbiAgdmFyIGluZGV4ID0gbGFuZVRvSW5kZXgodXBkYXRlTGFuZSk7IC8vIFdlIGNhbiBhbHdheXMgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIHRpbWVzdGFtcCBiZWNhdXNlIHdlIHByZWZlciB0aGUgbW9zdFxuICAvLyByZWNlbnQgZXZlbnQsIGFuZCB3ZSBhc3N1bWUgdGltZSBpcyBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuXG5cbiAgZXZlbnRUaW1lc1tpbmRleF0gPSBldmVudFRpbWU7XG59XG5mdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBzdXNwZW5kZWRMYW5lcykge1xuICByb290LnN1c3BlbmRlZExhbmVzIHw9IHN1c3BlbmRlZExhbmVzO1xuICByb290LnBpbmdlZExhbmVzICY9IH5zdXNwZW5kZWRMYW5lczsgLy8gVGhlIHN1c3BlbmRlZCBsYW5lcyBhcmUgbm8gbG9uZ2VyIENQVS1ib3VuZC4gQ2xlYXIgdGhlaXIgZXhwaXJhdGlvbiB0aW1lcy5cblxuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7XG4gIHZhciBsYW5lcyA9IHN1c3BlbmRlZExhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrUm9vdFBpbmdlZChyb290LCBwaW5nZWRMYW5lcywgZXZlbnRUaW1lKSB7XG4gIHJvb3QucGluZ2VkTGFuZXMgfD0gcm9vdC5zdXNwZW5kZWRMYW5lcyAmIHBpbmdlZExhbmVzO1xufVxuZnVuY3Rpb24gbWFya0Rpc2NyZXRlVXBkYXRlc0V4cGlyZWQocm9vdCkge1xuICByb290LmV4cGlyZWRMYW5lcyB8PSBJbnB1dERpc2NyZXRlTGFuZXMgJiByb290LnBlbmRpbmdMYW5lcztcbn1cbmZ1bmN0aW9uIGhhc0Rpc2NyZXRlTGFuZXMobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIElucHV0RGlzY3JldGVMYW5lcykgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBtYXJrUm9vdE11dGFibGVSZWFkKHJvb3QsIHVwZGF0ZUxhbmUpIHtcbiAgcm9vdC5tdXRhYmxlUmVhZExhbmVzIHw9IHVwZGF0ZUxhbmUgJiByb290LnBlbmRpbmdMYW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtSb290RmluaXNoZWQocm9vdCwgcmVtYWluaW5nTGFuZXMpIHtcbiAgdmFyIG5vTG9uZ2VyUGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXMgJiB+cmVtYWluaW5nTGFuZXM7XG4gIHJvb3QucGVuZGluZ0xhbmVzID0gcmVtYWluaW5nTGFuZXM7IC8vIExldCdzIHRyeSBldmVyeXRoaW5nIGFnYWluXG5cbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyA9IDA7XG4gIHJvb3QucGluZ2VkTGFuZXMgPSAwO1xuICByb290LmV4cGlyZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5tdXRhYmxlUmVhZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICByb290LmVudGFuZ2xlZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgdmFyIGV2ZW50VGltZXMgPSByb290LmV2ZW50VGltZXM7XG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lczsgLy8gQ2xlYXIgdGhlIGxhbmVzIHRoYXQgbm8gbG9uZ2VyIGhhdmUgcGVuZGluZyB3b3JrXG5cbiAgdmFyIGxhbmVzID0gbm9Mb25nZXJQZW5kaW5nTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICBlbnRhbmdsZW1lbnRzW2luZGV4XSA9IE5vTGFuZXM7XG4gICAgZXZlbnRUaW1lc1tpbmRleF0gPSBOb1RpbWVzdGFtcDtcbiAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIGVudGFuZ2xlZExhbmVzKSB7XG4gIHJvb3QuZW50YW5nbGVkTGFuZXMgfD0gZW50YW5nbGVkTGFuZXM7XG4gIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICB2YXIgbGFuZXMgPSBlbnRhbmdsZWRMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIGVudGFuZ2xlbWVudHNbaW5kZXhdIHw9IGVudGFuZ2xlZExhbmVzO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG52YXIgY2x6MzIgPSBNYXRoLmNsejMyID8gTWF0aC5jbHozMiA6IGNsejMyRmFsbGJhY2s7IC8vIENvdW50IGxlYWRpbmcgemVyb3MuIE9ubHkgdXNlZCBvbiBsYW5lcywgc28gYXNzdW1lIGlucHV0IGlzIGFuIGludGVnZXIuXG4vLyBCYXNlZCBvbjpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvY2x6MzJcblxudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xuXG5mdW5jdGlvbiBjbHozMkZhbGxiYWNrKGxhbmVzKSB7XG4gIGlmIChsYW5lcyA9PT0gMCkge1xuICAgIHJldHVybiAzMjtcbiAgfVxuXG4gIHJldHVybiAzMSAtIChsb2cobGFuZXMpIC8gTE4yIHwgMCkgfCAwO1xufVxuXG4vLyBJbnRlbnRpb25hbGx5IG5vdCBuYW1lZCBpbXBvcnRzIGJlY2F1c2UgUm9sbHVwIHdvdWxkIHVzZSBkeW5hbWljIGRpc3BhdGNoIGZvclxudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksXG4gICAgcnVuV2l0aFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eTsgLy8gVE9ETzogY2FuIHdlIHN0b3AgZXhwb3J0aW5nIHRoZXNlP1xuXG52YXIgX2VuYWJsZWQgPSB0cnVlOyAvLyBUaGlzIGlzIGV4cG9ydGVkIGluIEZCIGJ1aWxkcyBmb3IgdXNlIGJ5IGxlZ2FjeSBGQiBsYXllciBpbmZyYS5cbi8vIFdlJ2QgbGlrZSB0byByZW1vdmUgdGhpcyBidXQgaXQncyBub3QgY2xlYXIgaWYgdGhpcyBpcyBzYWZlLlxuXG5mdW5jdGlvbiBzZXRFbmFibGVkKGVuYWJsZWQpIHtcbiAgX2VuYWJsZWQgPSAhIWVuYWJsZWQ7XG59XG5mdW5jdGlvbiBpc0VuYWJsZWQoKSB7XG4gIHJldHVybiBfZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyV2l0aFByaW9yaXR5KHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzKSB7XG4gIHZhciBldmVudFByaW9yaXR5ID0gZ2V0RXZlbnRQcmlvcml0eUZvclBsdWdpblN5c3RlbShkb21FdmVudE5hbWUpO1xuICB2YXIgbGlzdGVuZXJXcmFwcGVyO1xuXG4gIHN3aXRjaCAoZXZlbnRQcmlvcml0eSkge1xuICAgIGNhc2UgRGlzY3JldGVFdmVudDpcbiAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoRGlzY3JldGVFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdFdmVudDpcbiAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoVXNlckJsb2NraW5nVXBkYXRlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIENvbnRpbnVvdXNFdmVudDpcbiAgICBkZWZhdWx0OlxuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hFdmVudDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVyV3JhcHBlci5iaW5kKG51bGwsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB7XG4gICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJZk5lZWRlZChuYXRpdmVFdmVudC50aW1lU3RhbXApO1xuICB9XG5cbiAgZGlzY3JldGVVcGRhdGVzKGRpc3BhdGNoRXZlbnQsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoVXNlckJsb2NraW5nVXBkYXRlKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB7XG4gICAgcnVuV2l0aFByaW9yaXR5KFVzZXJCbG9ja2luZ1ByaW9yaXR5JDEsIGRpc3BhdGNoRXZlbnQuYmluZChudWxsLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICBpZiAoIV9lbmFibGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGFsbG93UmVwbGF5ID0gdHJ1ZTtcblxuICB7XG4gICAgLy8gVE9ETzogcmVwbGF5aW5nIGNhcHR1cmUgcGhhc2UgZXZlbnRzIGlzIGN1cnJlbnRseSBicm9rZW5cbiAgICAvLyBiZWNhdXNlIHdlIHVzZWQgdG8gZG8gaXQgZHVyaW5nIHRvcC1sZXZlbCBuYXRpdmUgYnViYmxlIGhhbmRsZXJzXG4gICAgLy8gYnV0IG5vdyB3ZSB1c2UgZGlmZmVyZW50IGJ1YmJsZSBhbmQgY2FwdHVyZSBoYW5kbGVycy5cbiAgICAvLyBJbiBlYWdlciBtb2RlLCB3ZSBhdHRhY2ggY2FwdHVyZSBsaXN0ZW5lcnMgZWFybHksIHNvIHdlIG5lZWRcbiAgICAvLyB0byBmaWx0ZXIgdGhlbSBvdXQgdW50aWwgd2UgZml4IHRoZSBsb2dpYyB0byBoYW5kbGUgdGhlbSBjb3JyZWN0bHkuXG4gICAgLy8gVGhpcyBjb3VsZCd2ZSBiZWVuIG91dHNpZGUgdGhlIGZsYWcgYnV0IEkgcHV0IGl0IGluc2lkZSB0byByZWR1Y2Ugcmlzay5cbiAgICBhbGxvd1JlcGxheSA9IChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSkgPT09IDA7XG4gIH1cblxuICBpZiAoYWxsb3dSZXBsYXkgJiYgaGFzUXVldWVkRGlzY3JldGVFdmVudHMoKSAmJiBpc1JlcGxheWFibGVEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSkpIHtcbiAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYSBxdWV1ZSBvZiBkaXNjcmV0ZSBldmVudHMsIGFuZCB0aGlzIGlzIGFub3RoZXIgZGlzY3JldGVcbiAgICAvLyBldmVudCwgdGhlbiB3ZSBjYW4ndCBkaXNwYXRjaCBpdCByZWdhcmRsZXNzIG9mIGl0cyB0YXJnZXQsIHNpbmNlIHRoZXlcbiAgICAvLyBuZWVkIHRvIGRpc3BhdGNoIGluIG9yZGVyLlxuICAgIHF1ZXVlRGlzY3JldGVFdmVudChudWxsLCAvLyBGbGFncyB0aGF0IHdlJ3JlIG5vdCBhY3R1YWxseSBibG9ja2VkIG9uIGFueXRoaW5nIGFzIGZhciBhcyB3ZSBrbm93LlxuICAgIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGJsb2NrZWRPbiA9IGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcblxuICBpZiAoYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgLy8gV2Ugc3VjY2Vzc2Z1bGx5IGRpc3BhdGNoZWQgdGhpcyBldmVudC5cbiAgICBpZiAoYWxsb3dSZXBsYXkpIHtcbiAgICAgIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFsbG93UmVwbGF5KSB7XG4gICAgaWYgKGlzUmVwbGF5YWJsZURpc2NyZXRlRXZlbnQoZG9tRXZlbnROYW1lKSkge1xuICAgICAgLy8gVGhpcyB0aGlzIHRvIGJlIHJlcGxheWVkIGxhdGVyIG9uY2UgdGhlIHRhcmdldCBpcyBhdmFpbGFibGUuXG4gICAgICBxdWV1ZURpc2NyZXRlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChxdWV1ZUlmQ29udGludW91c0V2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2UgbmVlZCB0byBjbGVhciBvbmx5IGlmIHdlIGRpZG4ndCBxdWV1ZSBiZWNhdXNlXG4gICAgLy8gcXVldWVpbmcgaXMgYWNjdW1tdWxhdGl2ZS5cblxuXG4gICAgY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgfSAvLyBUaGlzIGlzIG5vdCByZXBsYXlhYmxlIHNvIHdlJ2xsIGludm9rZSBpdCBidXQgd2l0aG91dCBhIHRhcmdldCxcbiAgLy8gaW4gY2FzZSB0aGUgZXZlbnQgc3lzdGVtIG5lZWRzIHRvIHRyYWNlIGl0LlxuXG5cbiAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIG51bGwsIHRhcmdldENvbnRhaW5lcik7XG59IC8vIEF0dGVtcHQgZGlzcGF0Y2hpbmcgYW4gZXZlbnQuIFJldHVybnMgYSBTdXNwZW5zZUluc3RhbmNlIG9yIENvbnRhaW5lciBpZiBpdCdzIGJsb2NrZWQuXG5cbmZ1bmN0aW9uIGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIFRPRE86IFdhcm4gaWYgX2VuYWJsZWQgaXMgZmFsc2UuXG4gIHZhciBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgdmFyIHRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRhcmdldEluc3QpO1xuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkID09PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIHRyZWUgaGFzIGJlZW4gdW5tb3VudGVkIGFscmVhZHkuIERpc3BhdGNoIHdpdGhvdXQgYSB0YXJnZXQuXG4gICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcblxuICAgICAgaWYgKHRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gUXVldWUgdGhlIGV2ZW50IHRvIGJlIHJlcGxheWVkIGxhdGVyLiBBYm9ydCBkaXNwYXRjaGluZyBzaW5jZSB3ZVxuICAgICAgICAgIC8vIGRvbid0IHdhbnQgdGhpcyBldmVudCBkaXNwYXRjaGVkIHR3aWNlIHRocm91Z2ggdGhlIGV2ZW50IHN5c3RlbS5cbiAgICAgICAgICAvLyBUT0RPOiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBkaXNjcmV0ZSBldmVudCBpbiB0aGUgcXVldWUuIFNjaGVkdWxlIGFuIGluY3JlYXNlZFxuICAgICAgICAgIC8vIHByaW9yaXR5IGZvciB0aGlzIGJvdW5kYXJ5LlxuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfSAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4sIHNvbWV0aGluZyB3ZW50IHdyb25nIGJ1dCB0byBhdm9pZCBibG9ja2luZ1xuICAgICAgICAvLyB0aGUgd2hvbGUgc3lzdGVtLCBkaXNwYXRjaCB0aGUgZXZlbnQgd2l0aG91dCBhIHRhcmdldC5cbiAgICAgICAgLy8gVE9ETzogV2Fybi5cblxuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIHZhciByb290ID0gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGhhcHBlbnMgZHVyaW5nIGEgcmVwbGF5IHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCBpdCBtaWdodCBibG9ja1xuICAgICAgICAgIC8vIHRoZSB3aG9sZSBzeXN0ZW0uXG4gICAgICAgICAgcmV0dXJuIGdldENvbnRhaW5lckZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAobmVhcmVzdE1vdW50ZWQgIT09IHRhcmdldEluc3QpIHtcbiAgICAgICAgLy8gSWYgd2UgZ2V0IGFuIGV2ZW50IChleDogaW1nIG9ubG9hZCkgYmVmb3JlIGNvbW1pdHRpbmcgdGhhdFxuICAgICAgICAvLyBjb21wb25lbnQncyBtb3VudCwgaWdub3JlIGl0IGZvciBub3cgKHRoYXQgaXMsIHRyZWF0IGl0IGFzIGlmIGl0IHdhcyBhblxuICAgICAgICAvLyBldmVudCBvbiBhIG5vbi1SZWFjdCB0cmVlKS4gV2UgbWlnaHQgYWxzbyBjb25zaWRlciBxdWV1ZWluZyBldmVudHMgYW5kXG4gICAgICAgIC8vIGRpc3BhdGNoaW5nIHRoZW0gYWZ0ZXIgdGhlIG1vdW50LlxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgdGFyZ2V0SW5zdCwgdGFyZ2V0Q29udGFpbmVyKTsgLy8gV2UncmUgbm90IGJsb2NrZWQgb24gYW55dGhpbmcuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGFkZEV2ZW50QnViYmxlTGlzdGVuZXIodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXIodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIHBhc3NpdmUpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwge1xuICAgIGNhcHR1cmU6IHRydWUsXG4gICAgcGFzc2l2ZTogcGFzc2l2ZVxuICB9KTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIHBhc3NpdmUpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwge1xuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cblxuLyoqXG4gKiBUaGVzZSB2YXJpYWJsZXMgc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGV4dCBjb250ZW50IG9mIGEgdGFyZ2V0IG5vZGUsXG4gKiBhbGxvd2luZyBjb21wYXJpc29uIG9mIGNvbnRlbnQgYmVmb3JlIGFuZCBhZnRlciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIElkZW50aWZ5IHRoZSBub2RlIHdoZXJlIHNlbGVjdGlvbiBjdXJyZW50bHkgYmVnaW5zLCB0aGVuIG9ic2VydmVcbiAqIGJvdGggaXRzIHRleHQgY29udGVudCBhbmQgaXRzIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIERPTS4gU2luY2UgdGhlXG4gKiBicm93c2VyIG1heSBuYXRpdmVseSByZXBsYWNlIHRoZSB0YXJnZXQgbm9kZSBkdXJpbmcgY29tcG9zaXRpb24sIHdlIGNhblxuICogdXNlIGl0cyBwb3NpdGlvbiB0byBmaW5kIGl0cyByZXBsYWNlbWVudC5cbiAqXG4gKlxuICovXG52YXIgcm9vdCA9IG51bGw7XG52YXIgc3RhcnRUZXh0ID0gbnVsbDtcbnZhciBmYWxsYmFja1RleHQgPSBudWxsO1xuZnVuY3Rpb24gaW5pdGlhbGl6ZShuYXRpdmVFdmVudFRhcmdldCkge1xuICByb290ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gIHN0YXJ0VGV4dCA9IGdldFRleHQoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiByZXNldCgpIHtcbiAgcm9vdCA9IG51bGw7XG4gIHN0YXJ0VGV4dCA9IG51bGw7XG4gIGZhbGxiYWNrVGV4dCA9IG51bGw7XG59XG5mdW5jdGlvbiBnZXREYXRhKCkge1xuICBpZiAoZmFsbGJhY2tUZXh0KSB7XG4gICAgcmV0dXJuIGZhbGxiYWNrVGV4dDtcbiAgfVxuXG4gIHZhciBzdGFydDtcbiAgdmFyIHN0YXJ0VmFsdWUgPSBzdGFydFRleHQ7XG4gIHZhciBzdGFydExlbmd0aCA9IHN0YXJ0VmFsdWUubGVuZ3RoO1xuICB2YXIgZW5kO1xuICB2YXIgZW5kVmFsdWUgPSBnZXRUZXh0KCk7XG4gIHZhciBlbmRMZW5ndGggPSBlbmRWYWx1ZS5sZW5ndGg7XG5cbiAgZm9yIChzdGFydCA9IDA7IHN0YXJ0IDwgc3RhcnRMZW5ndGg7IHN0YXJ0KyspIHtcbiAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydF0gIT09IGVuZFZhbHVlW3N0YXJ0XSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIG1pbkVuZCA9IHN0YXJ0TGVuZ3RoIC0gc3RhcnQ7XG5cbiAgZm9yIChlbmQgPSAxOyBlbmQgPD0gbWluRW5kOyBlbmQrKykge1xuICAgIGlmIChzdGFydFZhbHVlW3N0YXJ0TGVuZ3RoIC0gZW5kXSAhPT0gZW5kVmFsdWVbZW5kTGVuZ3RoIC0gZW5kXSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIHNsaWNlVGFpbCA9IGVuZCA+IDEgPyAxIC0gZW5kIDogdW5kZWZpbmVkO1xuICBmYWxsYmFja1RleHQgPSBlbmRWYWx1ZS5zbGljZShzdGFydCwgc2xpY2VUYWlsKTtcbiAgcmV0dXJuIGZhbGxiYWNrVGV4dDtcbn1cbmZ1bmN0aW9uIGdldFRleHQoKSB7XG4gIGlmICgndmFsdWUnIGluIHJvb3QpIHtcbiAgICByZXR1cm4gcm9vdC52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByb290LnRleHRDb250ZW50O1xufVxuXG4vKipcbiAqIGBjaGFyQ29kZWAgcmVwcmVzZW50cyB0aGUgYWN0dWFsIFwiY2hhcmFjdGVyIGNvZGVcIiBhbmQgaXMgc2FmZSB0byB1c2Ugd2l0aFxuICogYFN0cmluZy5mcm9tQ2hhckNvZGVgLiBBcyBzdWNoLCBvbmx5IGtleXMgdGhhdCBjb3JyZXNwb25kIHRvIHByaW50YWJsZVxuICogY2hhcmFjdGVycyBwcm9kdWNlIGEgdmFsaWQgYGNoYXJDb2RlYCwgdGhlIG9ubHkgZXhjZXB0aW9uIHRvIHRoaXMgaXMgRW50ZXIuXG4gKiBUaGUgVGFiLWtleSBpcyBjb25zaWRlcmVkIG5vbi1wcmludGFibGUgYW5kIGRvZXMgbm90IGhhdmUgYSBgY2hhckNvZGVgLFxuICogcHJlc3VtYWJseSBiZWNhdXNlIGl0IGRvZXMgbm90IHByb2R1Y2UgYSB0YWItY2hhcmFjdGVyIGluIGJyb3dzZXJzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge251bWJlcn0gTm9ybWFsaXplZCBgY2hhckNvZGVgIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBjaGFyQ29kZTtcbiAgdmFyIGtleUNvZGUgPSBuYXRpdmVFdmVudC5rZXlDb2RlO1xuXG4gIGlmICgnY2hhckNvZGUnIGluIG5hdGl2ZUV2ZW50KSB7XG4gICAgY2hhckNvZGUgPSBuYXRpdmVFdmVudC5jaGFyQ29kZTsgLy8gRkYgZG9lcyBub3Qgc2V0IGBjaGFyQ29kZWAgZm9yIHRoZSBFbnRlci1rZXksIGNoZWNrIGFnYWluc3QgYGtleUNvZGVgLlxuXG4gICAgaWYgKGNoYXJDb2RlID09PSAwICYmIGtleUNvZGUgPT09IDEzKSB7XG4gICAgICBjaGFyQ29kZSA9IDEzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJRTggZG9lcyBub3QgaW1wbGVtZW50IGBjaGFyQ29kZWAsIGJ1dCBga2V5Q29kZWAgaGFzIHRoZSBjb3JyZWN0IHZhbHVlLlxuICAgIGNoYXJDb2RlID0ga2V5Q29kZTtcbiAgfSAvLyBJRSBhbmQgRWRnZSAob24gV2luZG93cykgYW5kIENocm9tZSAvIFNhZmFyaSAob24gV2luZG93cyBhbmQgTGludXgpXG4gIC8vIHJlcG9ydCBFbnRlciBhcyBjaGFyQ29kZSAxMCB3aGVuIGN0cmwgaXMgcHJlc3NlZC5cblxuXG4gIGlmIChjaGFyQ29kZSA9PT0gMTApIHtcbiAgICBjaGFyQ29kZSA9IDEzO1xuICB9IC8vIFNvbWUgbm9uLXByaW50YWJsZSBrZXlzIGFyZSByZXBvcnRlZCBpbiBgY2hhckNvZGVgL2BrZXlDb2RlYCwgZGlzY2FyZCB0aGVtLlxuICAvLyBNdXN0IG5vdCBkaXNjYXJkIHRoZSAobm9uLSlwcmludGFibGUgRW50ZXIta2V5LlxuXG5cbiAgaWYgKGNoYXJDb2RlID49IDMyIHx8IGNoYXJDb2RlID09PSAxMykge1xuICAgIHJldHVybiBjaGFyQ29kZTtcbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSgpIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufSAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYSBmYWN0b3J5IHNvIHRoYXQgd2UgaGF2ZSBkaWZmZXJlbnQgcmV0dXJuZWQgY29uc3RydWN0b3JzLlxuLy8gSWYgd2UgaGFkIGEgc2luZ2xlIGNvbnN0cnVjdG9yLCBpdCB3b3VsZCBiZSBtZWdhbW9ycGhpYyBhbmQgZW5naW5lcyB3b3VsZCBkZW9wdC5cblxuXG5mdW5jdGlvbiBjcmVhdGVTeW50aGV0aWNFdmVudChJbnRlcmZhY2UpIHtcbiAgLyoqXG4gICAqIFN5bnRoZXRpYyBldmVudHMgYXJlIGRpc3BhdGNoZWQgYnkgZXZlbnQgcGx1Z2lucywgdHlwaWNhbGx5IGluIHJlc3BvbnNlIHRvIGFcbiAgICogdG9wLWxldmVsIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxlci5cbiAgICpcbiAgICogVGhlc2Ugc3lzdGVtcyBzaG91bGQgZ2VuZXJhbGx5IHVzZSBwb29saW5nIHRvIHJlZHVjZSB0aGUgZnJlcXVlbmN5IG9mIGdhcmJhZ2VcbiAgICogY29sbGVjdGlvbi4gVGhlIHN5c3RlbSBzaG91bGQgY2hlY2sgYGlzUGVyc2lzdGVudGAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gICAqIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBpbnRvIHRoZSBwb29sIGFmdGVyIGJlaW5nIGRpc3BhdGNoZWQuIFVzZXJzIHRoYXRcbiAgICogbmVlZCBhIHBlcnNpc3RlZCBldmVudCBzaG91bGQgaW52b2tlIGBwZXJzaXN0YC5cbiAgICpcbiAgICogU3ludGhldGljIGV2ZW50cyAoYW5kIHN1YmNsYXNzZXMpIGltcGxlbWVudCB0aGUgRE9NIExldmVsIDMgRXZlbnRzIEFQSSBieVxuICAgKiBub3JtYWxpemluZyBicm93c2VyIHF1aXJrcy4gU3ViY2xhc3NlcyBkbyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBpbXBsZW1lbnQgYVxuICAgKiBET00gaW50ZXJmYWNlOyBjdXN0b20gYXBwbGljYXRpb24tc3BlY2lmaWMgZXZlbnRzIGNhbiBhbHNvIHN1YmNsYXNzIHRoaXMuXG4gICAqL1xuICBmdW5jdGlvbiBTeW50aGV0aWNCYXNlRXZlbnQocmVhY3ROYW1lLCByZWFjdEV2ZW50VHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgdGhpcy5fcmVhY3ROYW1lID0gcmVhY3ROYW1lO1xuICAgIHRoaXMuX3RhcmdldEluc3QgPSB0YXJnZXRJbnN0O1xuICAgIHRoaXMudHlwZSA9IHJlYWN0RXZlbnRUeXBlO1xuICAgIHRoaXMubmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICB0aGlzLnRhcmdldCA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICAgIHRoaXMuY3VycmVudFRhcmdldCA9IG51bGw7XG5cbiAgICBmb3IgKHZhciBfcHJvcE5hbWUgaW4gSW50ZXJmYWNlKSB7XG4gICAgICBpZiAoIUludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShfcHJvcE5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbm9ybWFsaXplID0gSW50ZXJmYWNlW19wcm9wTmFtZV07XG5cbiAgICAgIGlmIChub3JtYWxpemUpIHtcbiAgICAgICAgdGhpc1tfcHJvcE5hbWVdID0gbm9ybWFsaXplKG5hdGl2ZUV2ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbX3Byb3BOYW1lXSA9IG5hdGl2ZUV2ZW50W19wcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkICE9IG51bGwgPyBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkIDogbmF0aXZlRXZlbnQucmV0dXJuVmFsdWUgPT09IGZhbHNlO1xuXG4gICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBfYXNzaWduKFN5bnRoZXRpY0Jhc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG5cbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gJEZsb3dGaXhNZSAtIGZsb3cgaXMgbm90IGF3YXJlIG9mIGB1bmtub3duYCBpbiBJRVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQucmV0dXJuVmFsdWUgIT09ICd1bmtub3duJykge1xuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0sXG4gICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gJEZsb3dGaXhNZSAtIGZsb3cgaXMgbm90IGF3YXJlIG9mIGB1bmtub3duYCBpbiBJRVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQuY2FuY2VsQnViYmxlICE9PSAndW5rbm93bicpIHtcbiAgICAgICAgLy8gVGhlIENoYW5nZUV2ZW50UGx1Z2luIHJlZ2lzdGVycyBhIFwicHJvcGVydHljaGFuZ2VcIiBldmVudCBmb3JcbiAgICAgICAgLy8gSUUuIFRoaXMgZXZlbnQgZG9lcyBub3Qgc3VwcG9ydCBidWJibGluZyBvciBjYW5jZWxsaW5nLCBhbmRcbiAgICAgICAgLy8gYW55IHJlZmVyZW5jZXMgdG8gY2FuY2VsQnViYmxlIHRocm93IFwiTWVtYmVyIG5vdCBmb3VuZFwiLiAgQVxuICAgICAgICAvLyB0eXBlb2YgY2hlY2sgb2YgXCJ1bmtub3duXCIgY2lyY3VtdmVudHMgdGhpcyBpc3N1ZSAoYW5kIGlzIGFsc29cbiAgICAgICAgLy8gSUUgc3BlY2lmaWMpLlxuICAgICAgICBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdlIHJlbGVhc2UgYWxsIGRpc3BhdGNoZWQgYFN5bnRoZXRpY0V2ZW50YHMgYWZ0ZXIgZWFjaCBldmVudCBsb29wLCBhZGRpbmdcbiAgICAgKiB0aGVtIGJhY2sgaW50byB0aGUgcG9vbC4gVGhpcyBhbGxvd3MgYSB3YXkgdG8gaG9sZCBvbnRvIGEgcmVmZXJlbmNlIHRoYXRcbiAgICAgKiB3b24ndCBiZSBhZGRlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAgICovXG4gICAgcGVyc2lzdDogZnVuY3Rpb24gKCkgey8vIE1vZGVybiBldmVudCBzeXN0ZW0gZG9lc24ndCB1c2UgcG9vbGluZy5cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoaXMgZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGJhY2sgaW50byB0aGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhpcyBzaG91bGQgbm90IGJlIHJlbGVhc2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaXNQZXJzaXN0ZW50OiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZVxuICB9KTtcblxuICByZXR1cm4gU3ludGhldGljQmFzZUV2ZW50O1xufVxuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG5cbnZhciBFdmVudEludGVyZmFjZSA9IHtcbiAgZXZlbnRQaGFzZTogMCxcbiAgYnViYmxlczogMCxcbiAgY2FuY2VsYWJsZTogMCxcbiAgdGltZVN0YW1wOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gIH0sXG4gIGRlZmF1bHRQcmV2ZW50ZWQ6IDAsXG4gIGlzVHJ1c3RlZDogMFxufTtcbnZhciBTeW50aGV0aWNFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEV2ZW50SW50ZXJmYWNlKTtcblxudmFyIFVJRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICB2aWV3OiAwLFxuICBkZXRhaWw6IDBcbn0pO1xuXG52YXIgU3ludGhldGljVUlFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFVJRXZlbnRJbnRlcmZhY2UpO1xudmFyIGxhc3RNb3ZlbWVudFg7XG52YXIgbGFzdE1vdmVtZW50WTtcbnZhciBsYXN0TW91c2VFdmVudDtcblxuZnVuY3Rpb24gdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoZXZlbnQpIHtcbiAgaWYgKGV2ZW50ICE9PSBsYXN0TW91c2VFdmVudCkge1xuICAgIGlmIChsYXN0TW91c2VFdmVudCAmJiBldmVudC50eXBlID09PSAnbW91c2Vtb3ZlJykge1xuICAgICAgbGFzdE1vdmVtZW50WCA9IGV2ZW50LnNjcmVlblggLSBsYXN0TW91c2VFdmVudC5zY3JlZW5YO1xuICAgICAgbGFzdE1vdmVtZW50WSA9IGV2ZW50LnNjcmVlblkgLSBsYXN0TW91c2VFdmVudC5zY3JlZW5ZO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0TW92ZW1lbnRYID0gMDtcbiAgICAgIGxhc3RNb3ZlbWVudFkgPSAwO1xuICAgIH1cblxuICAgIGxhc3RNb3VzZUV2ZW50ID0gZXZlbnQ7XG4gIH1cbn1cbi8qKlxuICogQGludGVyZmFjZSBNb3VzZUV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG5cbnZhciBNb3VzZUV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICBzY3JlZW5YOiAwLFxuICBzY3JlZW5ZOiAwLFxuICBjbGllbnRYOiAwLFxuICBjbGllbnRZOiAwLFxuICBwYWdlWDogMCxcbiAgcGFnZVk6IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgYnV0dG9uOiAwLFxuICBidXR0b25zOiAwLFxuICByZWxhdGVkVGFyZ2V0OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZXZlbnQuZnJvbUVsZW1lbnQgPT09IGV2ZW50LnNyY0VsZW1lbnQgPyBldmVudC50b0VsZW1lbnQgOiBldmVudC5mcm9tRWxlbWVudDtcbiAgICByZXR1cm4gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgfSxcbiAgbW92ZW1lbnRYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoJ21vdmVtZW50WCcgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBldmVudC5tb3ZlbWVudFg7XG4gICAgfVxuXG4gICAgdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoZXZlbnQpO1xuICAgIHJldHVybiBsYXN0TW92ZW1lbnRYO1xuICB9LFxuICBtb3ZlbWVudFk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmICgnbW92ZW1lbnRZJyBpbiBldmVudCkge1xuICAgICAgcmV0dXJuIGV2ZW50Lm1vdmVtZW50WTtcbiAgICB9IC8vIERvbid0IG5lZWQgdG8gY2FsbCB1cGRhdGVNb3VzZU1vdmVtZW50UG9seWZpbGxTdGF0ZSgpIGhlcmVcbiAgICAvLyBiZWNhdXNlIGl0J3MgZ3VhcmFudGVlZCB0byBoYXZlIGFscmVhZHkgcnVuIHdoZW4gbW92ZW1lbnRYXG4gICAgLy8gd2FzIGNvcGllZC5cblxuXG4gICAgcmV0dXJuIGxhc3RNb3ZlbWVudFk7XG4gIH1cbn0pO1xuXG52YXIgU3ludGhldGljTW91c2VFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KE1vdXNlRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIERyYWdFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIERyYWdFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGF0YVRyYW5zZmVyOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0RyYWdFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KERyYWdFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRm9jdXNFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIEZvY3VzRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHJlbGF0ZWRUYXJnZXQ6IDBcbn0pO1xuXG52YXIgU3ludGhldGljRm9jdXNFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEZvY3VzRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtYW5pbWF0aW9ucy8jQW5pbWF0aW9uRXZlbnQtaW50ZXJmYWNlXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9BbmltYXRpb25FdmVudFxuICovXG5cbnZhciBBbmltYXRpb25FdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIGFuaW1hdGlvbk5hbWU6IDAsXG4gIGVsYXBzZWRUaW1lOiAwLFxuICBwc2V1ZG9FbGVtZW50OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2NsaXBib2FyZC1hcGlzL1xuICovXG5cbnZhciBDbGlwYm9hcmRFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIGNsaXBib2FyZERhdGE6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnY2xpcGJvYXJkRGF0YScgaW4gZXZlbnQgPyBldmVudC5jbGlwYm9hcmREYXRhIDogd2luZG93LmNsaXBib2FyZERhdGE7XG4gIH1cbn0pO1xuXG52YXIgU3ludGhldGljQ2xpcGJvYXJkRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChDbGlwYm9hcmRFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtY29tcG9zaXRpb25ldmVudHNcbiAqL1xuXG52YXIgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIGRhdGE6IDBcbn0pO1xuXG52YXIgU3ludGhldGljQ29tcG9zaXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMTMxMTA1XG4gKiAgICAgIC8jZXZlbnRzLWlucHV0ZXZlbnRzXG4gKi9cbi8vIEhhcHBlbnMgdG8gc2hhcmUgdGhlIHNhbWUgbGlzdCBmb3Igbm93LlxuXG52YXIgU3ludGhldGljSW5wdXRFdmVudCA9IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQ7XG4vKipcbiAqIE5vcm1hbGl6YXRpb24gb2YgZGVwcmVjYXRlZCBIVE1MNSBga2V5YCB2YWx1ZXNcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQjS2V5X25hbWVzXG4gKi9cblxudmFyIG5vcm1hbGl6ZUtleSA9IHtcbiAgRXNjOiAnRXNjYXBlJyxcbiAgU3BhY2ViYXI6ICcgJyxcbiAgTGVmdDogJ0Fycm93TGVmdCcsXG4gIFVwOiAnQXJyb3dVcCcsXG4gIFJpZ2h0OiAnQXJyb3dSaWdodCcsXG4gIERvd246ICdBcnJvd0Rvd24nLFxuICBEZWw6ICdEZWxldGUnLFxuICBXaW46ICdPUycsXG4gIE1lbnU6ICdDb250ZXh0TWVudScsXG4gIEFwcHM6ICdDb250ZXh0TWVudScsXG4gIFNjcm9sbDogJ1Njcm9sbExvY2snLFxuICBNb3pQcmludGFibGVLZXk6ICdVbmlkZW50aWZpZWQnXG59O1xuLyoqXG4gKiBUcmFuc2xhdGlvbiBmcm9tIGxlZ2FjeSBga2V5Q29kZWAgdG8gSFRNTDUgYGtleWBcbiAqIE9ubHkgc3BlY2lhbCBrZXlzIHN1cHBvcnRlZCwgYWxsIG90aGVycyBkZXBlbmQgb24ga2V5Ym9hcmQgbGF5b3V0IG9yIGJyb3dzZXJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQjS2V5X25hbWVzXG4gKi9cblxudmFyIHRyYW5zbGF0ZVRvS2V5ID0ge1xuICAnOCc6ICdCYWNrc3BhY2UnLFxuICAnOSc6ICdUYWInLFxuICAnMTInOiAnQ2xlYXInLFxuICAnMTMnOiAnRW50ZXInLFxuICAnMTYnOiAnU2hpZnQnLFxuICAnMTcnOiAnQ29udHJvbCcsXG4gICcxOCc6ICdBbHQnLFxuICAnMTknOiAnUGF1c2UnLFxuICAnMjAnOiAnQ2Fwc0xvY2snLFxuICAnMjcnOiAnRXNjYXBlJyxcbiAgJzMyJzogJyAnLFxuICAnMzMnOiAnUGFnZVVwJyxcbiAgJzM0JzogJ1BhZ2VEb3duJyxcbiAgJzM1JzogJ0VuZCcsXG4gICczNic6ICdIb21lJyxcbiAgJzM3JzogJ0Fycm93TGVmdCcsXG4gICczOCc6ICdBcnJvd1VwJyxcbiAgJzM5JzogJ0Fycm93UmlnaHQnLFxuICAnNDAnOiAnQXJyb3dEb3duJyxcbiAgJzQ1JzogJ0luc2VydCcsXG4gICc0Nic6ICdEZWxldGUnLFxuICAnMTEyJzogJ0YxJyxcbiAgJzExMyc6ICdGMicsXG4gICcxMTQnOiAnRjMnLFxuICAnMTE1JzogJ0Y0JyxcbiAgJzExNic6ICdGNScsXG4gICcxMTcnOiAnRjYnLFxuICAnMTE4JzogJ0Y3JyxcbiAgJzExOSc6ICdGOCcsXG4gICcxMjAnOiAnRjknLFxuICAnMTIxJzogJ0YxMCcsXG4gICcxMjInOiAnRjExJyxcbiAgJzEyMyc6ICdGMTInLFxuICAnMTQ0JzogJ051bUxvY2snLFxuICAnMTQ1JzogJ1Njcm9sbExvY2snLFxuICAnMjI0JzogJ01ldGEnXG59O1xuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgYGtleWAgcHJvcGVydHkuXG4gKi9cblxuZnVuY3Rpb24gZ2V0RXZlbnRLZXkobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LmtleSkge1xuICAgIC8vIE5vcm1hbGl6ZSBpbmNvbnNpc3RlbnQgdmFsdWVzIHJlcG9ydGVkIGJ5IGJyb3dzZXJzIGR1ZSB0b1xuICAgIC8vIGltcGxlbWVudGF0aW9ucyBvZiBhIHdvcmtpbmcgZHJhZnQgc3BlY2lmaWNhdGlvbi5cbiAgICAvLyBGaXJlRm94IGltcGxlbWVudHMgYGtleWAgYnV0IHJldHVybnMgYE1velByaW50YWJsZUtleWAgZm9yIGFsbFxuICAgIC8vIHByaW50YWJsZSBjaGFyYWN0ZXJzIChub3JtYWxpemVkIHRvIGBVbmlkZW50aWZpZWRgKSwgaWdub3JlIGl0LlxuICAgIHZhciBrZXkgPSBub3JtYWxpemVLZXlbbmF0aXZlRXZlbnQua2V5XSB8fCBuYXRpdmVFdmVudC5rZXk7XG5cbiAgICBpZiAoa2V5ICE9PSAnVW5pZGVudGlmaWVkJykge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH0gLy8gQnJvd3NlciBkb2VzIG5vdCBpbXBsZW1lbnQgYGtleWAsIHBvbHlmaWxsIGFzIG11Y2ggb2YgaXQgYXMgd2UgY2FuLlxuXG5cbiAgaWYgKG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICB2YXIgY2hhckNvZGUgPSBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KTsgLy8gVGhlIGVudGVyLWtleSBpcyB0ZWNobmljYWxseSBib3RoIHByaW50YWJsZSBhbmQgbm9uLXByaW50YWJsZSBhbmQgY2FuXG4gICAgLy8gdGh1cyBiZSBjYXB0dXJlZCBieSBga2V5cHJlc3NgLCBubyBvdGhlciBub24tcHJpbnRhYmxlIGtleSBzaG91bGQuXG5cbiAgICByZXR1cm4gY2hhckNvZGUgPT09IDEzID8gJ0VudGVyJyA6IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpO1xuICB9XG5cbiAgaWYgKG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBuYXRpdmVFdmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgLy8gV2hpbGUgdXNlciBrZXlib2FyZCBsYXlvdXQgZGV0ZXJtaW5lcyB0aGUgYWN0dWFsIG1lYW5pbmcgb2YgZWFjaFxuICAgIC8vIGBrZXlDb2RlYCB2YWx1ZSwgYWxtb3N0IGFsbCBmdW5jdGlvbiBrZXlzIGhhdmUgYSB1bml2ZXJzYWwgdmFsdWUuXG4gICAgcmV0dXJuIHRyYW5zbGF0ZVRvS2V5W25hdGl2ZUV2ZW50LmtleUNvZGVdIHx8ICdVbmlkZW50aWZpZWQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuLyoqXG4gKiBUcmFuc2xhdGlvbiBmcm9tIG1vZGlmaWVyIGtleSB0byB0aGUgYXNzb2NpYXRlZCBwcm9wZXJ0eSBpbiB0aGUgZXZlbnQuXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8ja2V5cy1Nb2RpZmllcnNcbiAqL1xuXG5cbnZhciBtb2RpZmllcktleVRvUHJvcCA9IHtcbiAgQWx0OiAnYWx0S2V5JyxcbiAgQ29udHJvbDogJ2N0cmxLZXknLFxuICBNZXRhOiAnbWV0YUtleScsXG4gIFNoaWZ0OiAnc2hpZnRLZXknXG59OyAvLyBPbGRlciBicm93c2VycyAoU2FmYXJpIDw9IDEwLCBpT1MgU2FmYXJpIDw9IDEwLjIpIGRvIG5vdCBzdXBwb3J0XG4vLyBnZXRNb2RpZmllclN0YXRlLiBJZiBnZXRNb2RpZmllclN0YXRlIGlzIG5vdCBzdXBwb3J0ZWQsIHdlIG1hcCBpdCB0byBhIHNldCBvZlxuLy8gbW9kaWZpZXIga2V5cyBleHBvc2VkIGJ5IHRoZSBldmVudC4gSW4gdGhpcyBjYXNlLCBMb2NrLWtleXMgYXJlIG5vdCBzdXBwb3J0ZWQuXG5cbmZ1bmN0aW9uIG1vZGlmaWVyU3RhdGVHZXR0ZXIoa2V5QXJnKSB7XG4gIHZhciBzeW50aGV0aWNFdmVudCA9IHRoaXM7XG4gIHZhciBuYXRpdmVFdmVudCA9IHN5bnRoZXRpY0V2ZW50Lm5hdGl2ZUV2ZW50O1xuXG4gIGlmIChuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUoa2V5QXJnKTtcbiAgfVxuXG4gIHZhciBrZXlQcm9wID0gbW9kaWZpZXJLZXlUb1Byb3Bba2V5QXJnXTtcbiAgcmV0dXJuIGtleVByb3AgPyAhIW5hdGl2ZUV2ZW50W2tleVByb3BdIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50TW9kaWZpZXJTdGF0ZShuYXRpdmVFdmVudCkge1xuICByZXR1cm4gbW9kaWZpZXJTdGF0ZUdldHRlcjtcbn1cbi8qKlxuICogQGludGVyZmFjZSBLZXlib2FyZEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG5cbnZhciBLZXlib2FyZEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICBrZXk6IGdldEV2ZW50S2V5LFxuICBjb2RlOiAwLFxuICBsb2NhdGlvbjogMCxcbiAgY3RybEtleTogMCxcbiAgc2hpZnRLZXk6IDAsXG4gIGFsdEtleTogMCxcbiAgbWV0YUtleTogMCxcbiAgcmVwZWF0OiAwLFxuICBsb2NhbGU6IDAsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgLy8gTGVnYWN5IEludGVyZmFjZVxuICBjaGFyQ29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYGNoYXJDb2RlYCBpcyB0aGUgcmVzdWx0IG9mIGEgS2V5UHJlc3MgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gdGhlIGFjdHVhbCBwcmludGFibGUgY2hhcmFjdGVyLlxuICAgIC8vIEtleVByZXNzIGlzIGRlcHJlY2F0ZWQsIGJ1dCBpdHMgcmVwbGFjZW1lbnQgaXMgbm90IHlldCBmaW5hbCBhbmQgbm90XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gYW55IG1ham9yIGJyb3dzZXIuIE9ubHkgS2V5UHJlc3MgaGFzIGNoYXJDb2RlLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIGtleUNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGBrZXlDb2RlYCBpcyB0aGUgcmVzdWx0IG9mIGEgS2V5RG93bi9VcCBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyBwaHlzaWNhbCBrZXlib2FyZCBrZXkuXG4gICAgLy8gVGhlIGFjdHVhbCBtZWFuaW5nIG9mIHRoZSB2YWx1ZSBkZXBlbmRzIG9uIHRoZSB1c2Vycycga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gd2hpY2ggY2Fubm90IGJlIGRldGVjdGVkLiBBc3N1bWluZyB0aGF0IGl0IGlzIGEgVVMga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gcHJvdmlkZXMgYSBzdXJwcmlzaW5nbHkgYWNjdXJhdGUgbWFwcGluZyBmb3IgVVMgYW5kIEV1cm9wZWFuIHVzZXJzLlxuICAgIC8vIER1ZSB0byB0aGlzLCBpdCBpcyBsZWZ0IHRvIHRoZSB1c2VyIHRvIGltcGxlbWVudCBhdCB0aGlzIHRpbWUuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAgd2hpY2g6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGB3aGljaGAgaXMgYW4gYWxpYXMgZm9yIGVpdGhlciBga2V5Q29kZWAgb3IgYGNoYXJDb2RlYCBkZXBlbmRpbmcgb24gdGhlXG4gICAgLy8gdHlwZSBvZiB0aGUgZXZlbnQuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICAgIHJldHVybiBnZXRFdmVudENoYXJDb2RlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChLZXlib2FyZEV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBQb2ludGVyRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvcG9pbnRlcmV2ZW50cy9cbiAqL1xuXG52YXIgUG9pbnRlckV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICBwb2ludGVySWQ6IDAsXG4gIHdpZHRoOiAwLFxuICBoZWlnaHQ6IDAsXG4gIHByZXNzdXJlOiAwLFxuICB0YW5nZW50aWFsUHJlc3N1cmU6IDAsXG4gIHRpbHRYOiAwLFxuICB0aWx0WTogMCxcbiAgdHdpc3Q6IDAsXG4gIHBvaW50ZXJUeXBlOiAwLFxuICBpc1ByaW1hcnk6IDBcbn0pO1xuXG52YXIgU3ludGhldGljUG9pbnRlckV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoUG9pbnRlckV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBUb3VjaEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3RvdWNoLWV2ZW50cy9cbiAqL1xuXG52YXIgVG91Y2hFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgdG91Y2hlczogMCxcbiAgdGFyZ2V0VG91Y2hlczogMCxcbiAgY2hhbmdlZFRvdWNoZXM6IDAsXG4gIGFsdEtleTogMCxcbiAgbWV0YUtleTogMCxcbiAgY3RybEtleTogMCxcbiAgc2hpZnRLZXk6IDAsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZVxufSk7XG5cbnZhciBTeW50aGV0aWNUb3VjaEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVG91Y2hFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOS9XRC1jc3MzLXRyYW5zaXRpb25zLTIwMDkwMzIwLyN0cmFuc2l0aW9uLWV2ZW50cy1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RyYW5zaXRpb25FdmVudFxuICovXG5cbnZhciBUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBwcm9wZXJ0eU5hbWU6IDAsXG4gIGVsYXBzZWRUaW1lOiAwLFxuICBwc2V1ZG9FbGVtZW50OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRyYW5zaXRpb25FdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgV2hlZWxFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIFdoZWVsRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIGRlbHRhWDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdkZWx0YVgnIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFYIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFYYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKHJpZ2h0IGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YVgnIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGFYIDogMDtcbiAgfSxcbiAgZGVsdGFZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2RlbHRhWScgaW4gZXZlbnQgPyBldmVudC5kZWx0YVkgOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVlgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGFZJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhWSA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhYCBmb3IgSUU8OSBhbmQgbm9ybWFsaXplIChkb3duIGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YScgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YSA6IDA7XG4gIH0sXG4gIGRlbHRhWjogMCxcbiAgLy8gQnJvd3NlcnMgd2l0aG91dCBcImRlbHRhTW9kZVwiIGlzIHJlcG9ydGluZyBpbiByYXcgd2hlZWwgZGVsdGEgd2hlcmUgb25lXG4gIC8vIG5vdGNoIG9uIHRoZSBzY3JvbGwgaXMgYWx3YXlzICsvLSAxMjAsIHJvdWdobHkgZXF1aXZhbGVudCB0byBwaXhlbHMuXG4gIC8vIEEgZ29vZCBhcHByb3hpbWF0aW9uIG9mIERPTV9ERUxUQV9MSU5FICgxKSBpcyA1JSBvZiB2aWV3cG9ydCBzaXplIG9yXG4gIC8vIH40MCBwaXhlbHMsIGZvciBET01fREVMVEFfU0NSRUVOICgyKSBpdCBpcyA4Ny41JSBvZiB2aWV3cG9ydCBzaXplLlxuICBkZWx0YU1vZGU6IDBcbn0pO1xuXG52YXIgU3ludGhldGljV2hlZWxFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFdoZWVsRXZlbnRJbnRlcmZhY2UpO1xuXG52YXIgRU5EX0tFWUNPREVTID0gWzksIDEzLCAyNywgMzJdOyAvLyBUYWIsIFJldHVybiwgRXNjLCBTcGFjZVxuXG52YXIgU1RBUlRfS0VZQ09ERSA9IDIyOTtcbnZhciBjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ID0gY2FuVXNlRE9NICYmICdDb21wb3NpdGlvbkV2ZW50JyBpbiB3aW5kb3c7XG52YXIgZG9jdW1lbnRNb2RlID0gbnVsbDtcblxuaWYgKGNhblVzZURPTSAmJiAnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCkge1xuICBkb2N1bWVudE1vZGUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59IC8vIFdlYmtpdCBvZmZlcnMgYSB2ZXJ5IHVzZWZ1bCBgdGV4dElucHV0YCBldmVudCB0aGF0IGNhbiBiZSB1c2VkIHRvXG4vLyBkaXJlY3RseSByZXByZXNlbnQgYGJlZm9yZUlucHV0YC4gVGhlIElFIGB0ZXh0aW5wdXRgIGV2ZW50IGlzIG5vdCBhc1xuLy8gdXNlZnVsLCBzbyB3ZSBkb24ndCB1c2UgaXQuXG5cblxudmFyIGNhblVzZVRleHRJbnB1dEV2ZW50ID0gY2FuVXNlRE9NICYmICdUZXh0RXZlbnQnIGluIHdpbmRvdyAmJiAhZG9jdW1lbnRNb2RlOyAvLyBJbiBJRTkrLCB3ZSBoYXZlIGFjY2VzcyB0byBjb21wb3NpdGlvbiBldmVudHMsIGJ1dCB0aGUgZGF0YSBzdXBwbGllZFxuLy8gYnkgdGhlIG5hdGl2ZSBjb21wb3NpdGlvbmVuZCBldmVudCBtYXkgYmUgaW5jb3JyZWN0LiBKYXBhbmVzZSBpZGVvZ3JhcGhpY1xuLy8gc3BhY2VzLCBmb3IgaW5zdGFuY2UgKFxcdTMwMDApIGFyZSBub3QgcmVjb3JkZWQgY29ycmVjdGx5LlxuXG52YXIgdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgPSBjYW5Vc2VET00gJiYgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50IHx8IGRvY3VtZW50TW9kZSAmJiBkb2N1bWVudE1vZGUgPiA4ICYmIGRvY3VtZW50TW9kZSA8PSAxMSk7XG52YXIgU1BBQ0VCQVJfQ09ERSA9IDMyO1xudmFyIFNQQUNFQkFSX0NIQVIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFNQQUNFQkFSX0NPREUpO1xuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cygpIHtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkJlZm9yZUlucHV0JywgWydjb21wb3NpdGlvbmVuZCcsICdrZXlwcmVzcycsICd0ZXh0SW5wdXQnLCAncGFzdGUnXSk7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25Db21wb3NpdGlvbkVuZCcsIFsnY29tcG9zaXRpb25lbmQnLCAnZm9jdXNvdXQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdtb3VzZWRvd24nXSk7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25Db21wb3NpdGlvblN0YXJ0JywgWydjb21wb3NpdGlvbnN0YXJ0JywgJ2ZvY3Vzb3V0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnbW91c2Vkb3duJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25VcGRhdGUnLCBbJ2NvbXBvc2l0aW9udXBkYXRlJywgJ2ZvY3Vzb3V0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnbW91c2Vkb3duJ10pO1xufSAvLyBUcmFjayB3aGV0aGVyIHdlJ3ZlIGV2ZXIgaGFuZGxlZCBhIGtleXByZXNzIG9uIHRoZSBzcGFjZSBrZXkuXG5cblxudmFyIGhhc1NwYWNlS2V5cHJlc3MgPSBmYWxzZTtcbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYSBuYXRpdmUga2V5cHJlc3MgZXZlbnQgaXMgYXNzdW1lZCB0byBiZSBhIGNvbW1hbmQuXG4gKiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgRmlyZWZveCBmaXJlcyBga2V5cHJlc3NgIGV2ZW50cyBmb3Iga2V5IGNvbW1hbmRzXG4gKiAoY3V0LCBjb3B5LCBzZWxlY3QtYWxsLCBldGMuKSBldmVuIHRob3VnaCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQuXG4gKi9cblxuZnVuY3Rpb24gaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIChuYXRpdmVFdmVudC5jdHJsS2V5IHx8IG5hdGl2ZUV2ZW50LmFsdEtleSB8fCBuYXRpdmVFdmVudC5tZXRhS2V5KSAmJiAvLyBjdHJsS2V5ICYmIGFsdEtleSBpcyBlcXVpdmFsZW50IHRvIEFsdEdyLCBhbmQgaXMgbm90IGEgY29tbWFuZC5cbiAgIShuYXRpdmVFdmVudC5jdHJsS2V5ICYmIG5hdGl2ZUV2ZW50LmFsdEtleSk7XG59XG4vKipcbiAqIFRyYW5zbGF0ZSBuYXRpdmUgdG9wIGxldmVsIGV2ZW50cyBpbnRvIGV2ZW50IHR5cGVzLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUoZG9tRXZlbnROYW1lKSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnY29tcG9zaXRpb25zdGFydCc6XG4gICAgICByZXR1cm4gJ29uQ29tcG9zaXRpb25TdGFydCc7XG5cbiAgICBjYXNlICdjb21wb3NpdGlvbmVuZCc6XG4gICAgICByZXR1cm4gJ29uQ29tcG9zaXRpb25FbmQnO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb251cGRhdGUnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uVXBkYXRlJztcbiAgfVxufVxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBiZXN0LWd1ZXNzIG1vZGVsIHRoaW5rIHRoaXMgZXZlbnQgc2lnbmlmaWVzIHRoYXRcbiAqIGNvbXBvc2l0aW9uIGhhcyBiZWd1bj9cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wb3NpdGlvblN0YXJ0KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIGRvbUV2ZW50TmFtZSA9PT0gJ2tleWRvd24nICYmIG5hdGl2ZUV2ZW50LmtleUNvZGUgPT09IFNUQVJUX0tFWUNPREU7XG59XG4vKipcbiAqIERvZXMgb3VyIGZhbGxiYWNrIG1vZGUgdGhpbmsgdGhhdCB0aGlzIGV2ZW50IGlzIHRoZSBlbmQgb2YgY29tcG9zaXRpb24/XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIC8vIENvbW1hbmQga2V5cyBpbnNlcnQgb3IgY2xlYXIgSU1FIGlucHV0LlxuICAgICAgcmV0dXJuIEVORF9LRVlDT0RFUy5pbmRleE9mKG5hdGl2ZUV2ZW50LmtleUNvZGUpICE9PSAtMTtcblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgICAgLy8gRXhwZWN0IElNRSBrZXlDb2RlIG9uIGVhY2gga2V5ZG93bi4gSWYgd2UgZ2V0IGFueSBvdGhlclxuICAgICAgLy8gY29kZSB3ZSBtdXN0IGhhdmUgZXhpdGVkIGVhcmxpZXIuXG4gICAgICByZXR1cm4gbmF0aXZlRXZlbnQua2V5Q29kZSAhPT0gU1RBUlRfS0VZQ09ERTtcblxuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIC8vIEV2ZW50cyBhcmUgbm90IHBvc3NpYmxlIHdpdGhvdXQgY2FuY2VsbGluZyBJTUUuXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogR29vZ2xlIElucHV0IFRvb2xzIHByb3ZpZGVzIGNvbXBvc2l0aW9uIGRhdGEgdmlhIGEgQ3VzdG9tRXZlbnQsXG4gKiB3aXRoIHRoZSBgZGF0YWAgcHJvcGVydHkgcG9wdWxhdGVkIGluIHRoZSBgZGV0YWlsYCBvYmplY3QuIElmIHRoaXNcbiAqIGlzIGF2YWlsYWJsZSBvbiB0aGUgZXZlbnQgb2JqZWN0LCB1c2UgaXQuIElmIG5vdCwgdGhpcyBpcyBhIHBsYWluXG4gKiBjb21wb3NpdGlvbiBldmVudCBhbmQgd2UgaGF2ZSBub3RoaW5nIHNwZWNpYWwgdG8gZXh0cmFjdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4gez9zdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBkZXRhaWwgPSBuYXRpdmVFdmVudC5kZXRhaWw7XG5cbiAgaWYgKHR5cGVvZiBkZXRhaWwgPT09ICdvYmplY3QnICYmICdkYXRhJyBpbiBkZXRhaWwpIHtcbiAgICByZXR1cm4gZGV0YWlsLmRhdGE7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYSBjb21wb3NpdGlvbiBldmVudCB3YXMgdHJpZ2dlcmVkIGJ5IEtvcmVhbiBJTUUuXG4gKiBPdXIgZmFsbGJhY2sgbW9kZSBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBJRSdzIEtvcmVhbiBJTUUsXG4gKiBzbyBqdXN0IHVzZSBuYXRpdmUgY29tcG9zaXRpb24gZXZlbnRzIHdoZW4gS29yZWFuIElNRSBpcyB1c2VkLlxuICogQWx0aG91Z2ggQ29tcG9zaXRpb25FdmVudC5sb2NhbGUgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCxcbiAqIGl0IGlzIGF2YWlsYWJsZSBpbiBJRSwgd2hlcmUgb3VyIGZhbGxiYWNrIG1vZGUgaXMgZW5hYmxlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBuYXRpdmVFdmVudC5sb2NhbGUgPT09ICdrbyc7XG59IC8vIFRyYWNrIHRoZSBjdXJyZW50IElNRSBjb21wb3NpdGlvbiBzdGF0dXMsIGlmIGFueS5cblxuXG52YXIgaXNDb21wb3NpbmcgPSBmYWxzZTtcbi8qKlxuICogQHJldHVybiB7P29iamVjdH0gQSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LlxuICovXG5cbmZ1bmN0aW9uIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBldmVudFR5cGU7XG4gIHZhciBmYWxsYmFja0RhdGE7XG5cbiAgaWYgKGNhblVzZUNvbXBvc2l0aW9uRXZlbnQpIHtcbiAgICBldmVudFR5cGUgPSBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZShkb21FdmVudE5hbWUpO1xuICB9IGVsc2UgaWYgKCFpc0NvbXBvc2luZykge1xuICAgIGlmIChpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgZXZlbnRUeXBlID0gJ29uQ29tcG9zaXRpb25TdGFydCc7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSkge1xuICAgIGV2ZW50VHlwZSA9ICdvbkNvbXBvc2l0aW9uRW5kJztcbiAgfVxuXG4gIGlmICghZXZlbnRUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgJiYgIWlzVXNpbmdLb3JlYW5JTUUobmF0aXZlRXZlbnQpKSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgY29tcG9zaXRpb24gaXMgc3RvcmVkIHN0YXRpY2FsbHkgYW5kIG11c3Qgbm90IGJlXG4gICAgLy8gb3ZlcndyaXR0ZW4gd2hpbGUgY29tcG9zaXRpb24gY29udGludWVzLlxuICAgIGlmICghaXNDb21wb3NpbmcgJiYgZXZlbnRUeXBlID09PSAnb25Db21wb3NpdGlvblN0YXJ0Jykge1xuICAgICAgaXNDb21wb3NpbmcgPSBpbml0aWFsaXplKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ29uQ29tcG9zaXRpb25FbmQnKSB7XG4gICAgICBpZiAoaXNDb21wb3NpbmcpIHtcbiAgICAgICAgZmFsbGJhY2tEYXRhID0gZ2V0RGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0SW5zdCwgZXZlbnRUeXBlKTtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljQ29tcG9zaXRpb25FdmVudChldmVudFR5cGUsIGRvbUV2ZW50TmFtZSwgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcblxuICAgIGlmIChmYWxsYmFja0RhdGEpIHtcbiAgICAgIC8vIEluamVjdCBkYXRhIGdlbmVyYXRlZCBmcm9tIGZhbGxiYWNrIHBhdGggaW50byB0aGUgc3ludGhldGljIGV2ZW50LlxuICAgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBwcm9wZXJ0eSBvZiBuYXRpdmUgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZS5cbiAgICAgIGV2ZW50LmRhdGEgPSBmYWxsYmFja0RhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjdXN0b21EYXRhID0gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCk7XG5cbiAgICAgIGlmIChjdXN0b21EYXRhICE9PSBudWxsKSB7XG4gICAgICAgIGV2ZW50LmRhdGEgPSBjdXN0b21EYXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdjb21wb3NpdGlvbmVuZCc6XG4gICAgICByZXR1cm4gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCk7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvKipcbiAgICAgICAqIElmIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudHMgYXJlIGF2YWlsYWJsZSwgb3VyIGdvYWwgaXMgdG8gbWFrZVxuICAgICAgICogdXNlIG9mIHRoZW0uIEhvd2V2ZXIsIHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlOiB0aGUgc3BhY2ViYXIga2V5LlxuICAgICAgICogSW4gV2Via2l0LCBwcmV2ZW50aW5nIGRlZmF1bHQgb24gYSBzcGFjZWJhciBgdGV4dElucHV0YCBldmVudFxuICAgICAgICogY2FuY2VscyBjaGFyYWN0ZXIgaW5zZXJ0aW9uLCBidXQgaXQgKmFsc28qIGNhdXNlcyB0aGUgYnJvd3NlclxuICAgICAgICogdG8gZmFsbCBiYWNrIHRvIGl0cyBkZWZhdWx0IHNwYWNlYmFyIGJlaGF2aW9yIG9mIHNjcm9sbGluZyB0aGVcbiAgICAgICAqIHBhZ2UuXG4gICAgICAgKlxuICAgICAgICogVHJhY2tpbmcgYXQ6XG4gICAgICAgKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MzU1MTAzXG4gICAgICAgKlxuICAgICAgICogVG8gYXZvaWQgdGhpcyBpc3N1ZSwgdXNlIHRoZSBrZXlwcmVzcyBldmVudCBhcyBpZiBubyBgdGV4dElucHV0YFxuICAgICAgICogZXZlbnQgaXMgYXZhaWxhYmxlLlxuICAgICAgICovXG4gICAgICB2YXIgd2hpY2ggPSBuYXRpdmVFdmVudC53aGljaDtcblxuICAgICAgaWYgKHdoaWNoICE9PSBTUEFDRUJBUl9DT0RFKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBoYXNTcGFjZUtleXByZXNzID0gdHJ1ZTtcbiAgICAgIHJldHVybiBTUEFDRUJBUl9DSEFSO1xuXG4gICAgY2FzZSAndGV4dElucHV0JzpcbiAgICAgIC8vIFJlY29yZCB0aGUgY2hhcmFjdGVycyB0byBiZSBhZGRlZCB0byB0aGUgRE9NLlxuICAgICAgdmFyIGNoYXJzID0gbmF0aXZlRXZlbnQuZGF0YTsgLy8gSWYgaXQncyBhIHNwYWNlYmFyIGNoYXJhY3RlciwgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWRcbiAgICAgIC8vIGl0IGF0IHRoZSBrZXlwcmVzcyBsZXZlbCBhbmQgYmFpbCBpbW1lZGlhdGVseS4gQW5kcm9pZCBDaHJvbWVcbiAgICAgIC8vIGRvZXNuJ3QgZ2l2ZSB1cyBrZXljb2Rlcywgc28gd2UgbmVlZCB0byBpZ25vcmUgaXQuXG5cbiAgICAgIGlmIChjaGFycyA9PT0gU1BBQ0VCQVJfQ0hBUiAmJiBoYXNTcGFjZUtleXByZXNzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hhcnM7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gRm9yIG90aGVyIG5hdGl2ZSBldmVudCB0eXBlcywgZG8gbm90aGluZy5cbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG4vKipcbiAqIEZvciBicm93c2VycyB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZSBgdGV4dElucHV0YCBldmVudCwgZXh0cmFjdCB0aGVcbiAqIGFwcHJvcHJpYXRlIHN0cmluZyB0byB1c2UgZm9yIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGNvbXBvc2luZyAoSU1FKSBhbmQgdXNpbmcgYSBmYWxsYmFjayB0byBkbyBzbyxcbiAgLy8gdHJ5IHRvIGV4dHJhY3QgdGhlIGNvbXBvc2VkIGNoYXJhY3RlcnMgZnJvbSB0aGUgZmFsbGJhY2sgb2JqZWN0LlxuICAvLyBJZiBjb21wb3NpdGlvbiBldmVudCBpcyBhdmFpbGFibGUsIHdlIGV4dHJhY3QgYSBzdHJpbmcgb25seSBhdFxuICAvLyBjb21wb3NpdGlvbmV2ZW50LCBvdGhlcndpc2UgZXh0cmFjdCBpdCBhdCBmYWxsYmFjayBldmVudHMuXG4gIGlmIChpc0NvbXBvc2luZykge1xuICAgIGlmIChkb21FdmVudE5hbWUgPT09ICdjb21wb3NpdGlvbmVuZCcgfHwgIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgJiYgaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICB2YXIgY2hhcnMgPSBnZXREYXRhKCk7XG4gICAgICByZXNldCgpO1xuICAgICAgaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAncGFzdGUnOlxuICAgICAgLy8gSWYgYSBwYXN0ZSBldmVudCBvY2N1cnMgYWZ0ZXIgYSBrZXlwcmVzcywgdGhyb3cgb3V0IHRoZSBpbnB1dFxuICAgICAgLy8gY2hhcnMuIFBhc3RlIGV2ZW50cyBzaG91bGQgbm90IGxlYWQgdG8gQmVmb3JlSW5wdXQgZXZlbnRzLlxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvKipcbiAgICAgICAqIEFzIG9mIHYyNywgRmlyZWZveCBtYXkgZmlyZSBrZXlwcmVzcyBldmVudHMgZXZlbiB3aGVuIG5vIGNoYXJhY3RlclxuICAgICAgICogd2lsbCBiZSBpbnNlcnRlZC4gQSBmZXcgcG9zc2liaWxpdGllczpcbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgYDBgLiBBcnJvdyBrZXlzLCBFc2Mga2V5LCBldGMuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgbm8gY2hhciBpcyBhdmFpbGFibGUuXG4gICAgICAgKiAgIEV4OiAnQWx0R3IgKyBkYCBpbiBQb2xpc2guIFRoZXJlIGlzIG5vIG1vZGlmaWVkIGNoYXJhY3RlciBmb3JcbiAgICAgICAqICAgdGhpcyBrZXkgY29tYmluYXRpb24gYW5kIG5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZCBpbnRvIHRoZVxuICAgICAgICogICBkb2N1bWVudCwgYnV0IEZGIGZpcmVzIHRoZSBrZXlwcmVzcyBmb3IgY2hhciBjb2RlIGAxMDBgIGFueXdheS5cbiAgICAgICAqICAgTm8gYGlucHV0YCBldmVudCB3aWxsIG9jY3VyLlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IGEgY29tbWFuZCBjb21iaW5hdGlvbiBpc1xuICAgICAgICogICBiZWluZyB1c2VkLiBFeDogYENtZCtDYC4gTm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLCBhbmQgbm9cbiAgICAgICAqICAgYGlucHV0YCBldmVudCB3aWxsIG9jY3VyLlxuICAgICAgICovXG4gICAgICBpZiAoIWlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAvLyBJRSBmaXJlcyB0aGUgYGtleXByZXNzYCBldmVudCB3aGVuIGEgdXNlciB0eXBlcyBhbiBlbW9qaSB2aWFcbiAgICAgICAgLy8gVG91Y2gga2V5Ym9hcmQgb2YgV2luZG93cy4gIEluIHN1Y2ggYSBjYXNlLCB0aGUgYGNoYXJgIHByb3BlcnR5XG4gICAgICAgIC8vIGhvbGRzIGFuIGVtb2ppIGNoYXJhY3RlciBsaWtlIGBcXHVEODNEXFx1REUwQWAuICBCZWNhdXNlIGl0cyBsZW5ndGhcbiAgICAgICAgLy8gaXMgMiwgdGhlIHByb3BlcnR5IGB3aGljaGAgZG9lcyBub3QgcmVwcmVzZW50IGFuIGVtb2ppIGNvcnJlY3RseS5cbiAgICAgICAgLy8gSW4gc3VjaCBhIGNhc2UsIHdlIGRpcmVjdGx5IHJldHVybiB0aGUgYGNoYXJgIHByb3BlcnR5IGluc3RlYWQgb2ZcbiAgICAgICAgLy8gdXNpbmcgYHdoaWNoYC5cbiAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmNoYXIgJiYgbmF0aXZlRXZlbnQuY2hhci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmNoYXI7XG4gICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRXZlbnQud2hpY2gpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuYXRpdmVFdmVudC53aGljaCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlICdjb21wb3NpdGlvbmVuZCc6XG4gICAgICByZXR1cm4gdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgJiYgIWlzVXNpbmdLb3JlYW5JTUUobmF0aXZlRXZlbnQpID8gbnVsbCA6IG5hdGl2ZUV2ZW50LmRhdGE7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbi8qKlxuICogRXh0cmFjdCBhIFN5bnRoZXRpY0lucHV0RXZlbnQgZm9yIGBiZWZvcmVJbnB1dGAsIGJhc2VkIG9uIGVpdGhlciBuYXRpdmVcbiAqIGB0ZXh0SW5wdXRgIG9yIGZhbGxiYWNrIGJlaGF2aW9yLlxuICpcbiAqIEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljSW5wdXRFdmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBjaGFycztcblxuICBpZiAoY2FuVXNlVGV4dElucHV0RXZlbnQpIHtcbiAgICBjaGFycyA9IGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gZWxzZSB7XG4gICAgY2hhcnMgPSBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gLy8gSWYgbm8gY2hhcmFjdGVycyBhcmUgYmVpbmcgaW5zZXJ0ZWQsIG5vIEJlZm9yZUlucHV0IGV2ZW50IHNob3VsZFxuICAvLyBiZSBmaXJlZC5cblxuXG4gIGlmICghY2hhcnMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0SW5zdCwgJ29uQmVmb3JlSW5wdXQnKTtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljSW5wdXRFdmVudCgnb25CZWZvcmVJbnB1dCcsICdiZWZvcmVpbnB1dCcsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG4gICAgZXZlbnQuZGF0YSA9IGNoYXJzO1xuICB9XG59XG4vKipcbiAqIENyZWF0ZSBhbiBgb25CZWZvcmVJbnB1dGAgZXZlbnQgdG8gbWF0Y2hcbiAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMTMxMTA1LyNldmVudHMtaW5wdXRldmVudHMuXG4gKlxuICogVGhpcyBldmVudCBwbHVnaW4gaXMgYmFzZWQgb24gdGhlIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudFxuICogYXZhaWxhYmxlIGluIENocm9tZSwgU2FmYXJpLCBPcGVyYSwgYW5kIElFLiBUaGlzIGV2ZW50IGZpcmVzIGFmdGVyXG4gKiBgb25LZXlQcmVzc2AgYW5kIGBvbkNvbXBvc2l0aW9uRW5kYCwgYnV0IGJlZm9yZSBgb25JbnB1dGAuXG4gKlxuICogYGJlZm9yZUlucHV0YCBpcyBzcGVjJ2QgYnV0IG5vdCBpbXBsZW1lbnRlZCBpbiBhbnkgYnJvd3NlcnMsIGFuZFxuICogdGhlIGBpbnB1dGAgZXZlbnQgZG9lcyBub3QgcHJvdmlkZSBhbnkgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgaGFzXG4gKiBhY3R1YWxseSBiZWVuIGFkZGVkLCBjb250cmFyeSB0byB0aGUgc3BlYy4gVGh1cywgYHRleHRJbnB1dGAgaXMgdGhlIGJlc3RcbiAqIGF2YWlsYWJsZSBldmVudCB0byBpZGVudGlmeSB0aGUgY2hhcmFjdGVycyB0aGF0IGhhdmUgYWN0dWFsbHkgYmVlbiBpbnNlcnRlZFxuICogaW50byB0aGUgdGFyZ2V0IG5vZGUuXG4gKlxuICogVGhpcyBwbHVnaW4gaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgYGNvbXBvc2l0aW9uYCBldmVudHMsIHRodXNcbiAqIGFsbG93aW5nIHVzIHRvIHNoYXJlIGNvbXBvc2l0aW9uIGZhbGxiYWNrIGNvZGUgZm9yIGJvdGggYGJlZm9yZUlucHV0YCBhbmRcbiAqIGBjb21wb3NpdGlvbmAgZXZlbnQgdHlwZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICBleHRyYWN0QmVmb3JlSW5wdXRFdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cbi8qKlxuICogQHNlZSBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUtaW5wdXQtZWxlbWVudC5odG1sI2lucHV0LXR5cGUtYXR0ci1zdW1tYXJ5XG4gKi9cbnZhciBzdXBwb3J0ZWRJbnB1dFR5cGVzID0ge1xuICBjb2xvcjogdHJ1ZSxcbiAgZGF0ZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxuICBwYXNzd29yZDogdHJ1ZSxcbiAgcmFuZ2U6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdGVsOiB0cnVlLFxuICB0ZXh0OiB0cnVlLFxuICB0aW1lOiB0cnVlLFxuICB1cmw6IHRydWUsXG4gIHdlZWs6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGlzVGV4dElucHV0RWxlbWVudChlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKG5vZGVOYW1lID09PSAnaW5wdXQnKSB7XG4gICAgcmV0dXJuICEhc3VwcG9ydGVkSW5wdXRUeXBlc1tlbGVtLnR5cGVdO1xuICB9XG5cbiAgaWYgKG5vZGVOYW1lID09PSAndGV4dGFyZWEnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGFuIGV2ZW50IGlzIHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBleGVjdXRpb24gZW52aXJvbm1lbnQuXG4gKlxuICogTk9URTogVGhpcyB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseSBmb3Igbm9uLWdlbmVyaWMgZXZlbnRzIHN1Y2ggYXMgYGNoYW5nZWAsXG4gKiBgcmVzZXRgLCBgbG9hZGAsIGBlcnJvcmAsIGFuZCBgc2VsZWN0YC5cbiAqXG4gKiBCb3Jyb3dzIGZyb20gTW9kZXJuaXpyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVTdWZmaXggRXZlbnQgbmFtZSwgZS5nLiBcImNsaWNrXCIuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBldmVudCBpcyBzdXBwb3J0ZWQuXG4gKiBAaW50ZXJuYWxcbiAqIEBsaWNlbnNlIE1vZGVybml6ciAzLjAuMHByZSAoQ3VzdG9tIEJ1aWxkKSB8IE1JVFxuICovXG5cbmZ1bmN0aW9uIGlzRXZlbnRTdXBwb3J0ZWQoZXZlbnROYW1lU3VmZml4KSB7XG4gIGlmICghY2FuVXNlRE9NKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudE5hbWVTdWZmaXg7XG4gIHZhciBpc1N1cHBvcnRlZCA9IChldmVudE5hbWUgaW4gZG9jdW1lbnQpO1xuXG4gIGlmICghaXNTdXBwb3J0ZWQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGV2ZW50TmFtZSwgJ3JldHVybjsnKTtcbiAgICBpc1N1cHBvcnRlZCA9IHR5cGVvZiBlbGVtZW50W2V2ZW50TmFtZV0gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICByZXR1cm4gaXNTdXBwb3J0ZWQ7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDEoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25DaGFuZ2UnLCBbJ2NoYW5nZScsICdjbGljaycsICdmb2N1c2luJywgJ2ZvY3Vzb3V0JywgJ2lucHV0JywgJ2tleWRvd24nLCAna2V5dXAnLCAnc2VsZWN0aW9uY2hhbmdlJ10pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgaW5zdCwgbmF0aXZlRXZlbnQsIHRhcmdldCkge1xuICAvLyBGbGFnIHRoaXMgZXZlbnQgbG9vcCBhcyBuZWVkaW5nIHN0YXRlIHJlc3RvcmUuXG4gIGVucXVldWVTdGF0ZVJlc3RvcmUodGFyZ2V0KTtcbiAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyhpbnN0LCAnb25DaGFuZ2UnKTtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnQoJ29uQ2hhbmdlJywgJ2NoYW5nZScsIG51bGwsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICB9XG59XG4vKipcbiAqIEZvciBJRSBzaGltc1xuICovXG5cblxudmFyIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjaGFuZ2VgIGV2ZW50XG4gKi9cblxuZnVuY3Rpb24gc2hvdWxkVXNlQ2hhbmdlRXZlbnQoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIG5vZGVOYW1lID09PSAnc2VsZWN0JyB8fCBub2RlTmFtZSA9PT0gJ2lucHV0JyAmJiBlbGVtLnR5cGUgPT09ICdmaWxlJztcbn1cblxuZnVuY3Rpb24gbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCkge1xuICB2YXIgZGlzcGF0Y2hRdWV1ZSA9IFtdO1xuICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgYWN0aXZlRWxlbWVudEluc3QsIG5hdGl2ZUV2ZW50LCBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkpOyAvLyBJZiBjaGFuZ2UgYW5kIHByb3BlcnR5Y2hhbmdlIGJ1YmJsZWQsIHdlJ2QganVzdCBiaW5kIHRvIGl0IGxpa2UgYWxsIHRoZVxuICAvLyBvdGhlciBldmVudHMgYW5kIGhhdmUgaXQgZ28gdGhyb3VnaCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuIFNpbmNlIGl0XG4gIC8vIGRvZXNuJ3QsIHdlIG1hbnVhbGx5IGxpc3RlbiBmb3IgdGhlIGV2ZW50cyBhbmQgc28gd2UgaGF2ZSB0byBlbnF1ZXVlIGFuZFxuICAvLyBwcm9jZXNzIHRoZSBhYnN0cmFjdCBldmVudCBtYW51YWxseS5cbiAgLy9cbiAgLy8gQmF0Y2hpbmcgaXMgbmVjZXNzYXJ5IGhlcmUgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIGV2ZW50IGhhbmRsZXJzIHJ1blxuICAvLyBiZWZvcmUgdGhlIG5leHQgcmVyZW5kZXIgKGluY2x1ZGluZyBldmVudCBoYW5kbGVycyBhdHRhY2hlZCB0byBhbmNlc3RvclxuICAvLyBlbGVtZW50cyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG9uIHRoZSBpbnB1dCkuIFdpdGhvdXQgdGhpcywgY29udHJvbGxlZFxuICAvLyBjb21wb25lbnRzIGRvbid0IHdvcmsgcHJvcGVybHkgaW4gY29uanVuY3Rpb24gd2l0aCBldmVudCBidWJibGluZyBiZWNhdXNlXG4gIC8vIHRoZSBjb21wb25lbnQgaXMgcmVyZW5kZXJlZCBhbmQgdGhlIHZhbHVlIHJldmVydGVkIGJlZm9yZSBhbGwgdGhlIGV2ZW50XG4gIC8vIGhhbmRsZXJzIGNhbiBydW4uIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcwOC5cblxuICBiYXRjaGVkVXBkYXRlcyhydW5FdmVudEluQmF0Y2gsIGRpc3BhdGNoUXVldWUpO1xufVxuXG5mdW5jdGlvbiBydW5FdmVudEluQmF0Y2goZGlzcGF0Y2hRdWV1ZSkge1xuICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCAwKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpIHtcbiAgdmFyIHRhcmdldE5vZGUgPSBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpO1xuXG4gIGlmICh1cGRhdGVWYWx1ZUlmQ2hhbmdlZCh0YXJnZXROb2RlKSkge1xuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfVxufVxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGlucHV0YCBldmVudFxuICovXG5cblxudmFyIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGZhbHNlO1xuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIC8vIElFOSBjbGFpbXMgdG8gc3VwcG9ydCB0aGUgaW5wdXQgZXZlbnQgYnV0IGZhaWxzIHRvIHRyaWdnZXIgaXQgd2hlblxuICAvLyBkZWxldGluZyB0ZXh0LCBzbyB3ZSBpZ25vcmUgaXRzIGlucHV0IGV2ZW50cy5cbiAgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gaXNFdmVudFN1cHBvcnRlZCgnaW5wdXQnKSAmJiAoIWRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPiA5KTtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIFN0YXJ0cyB0cmFja2luZyBwcm9wZXJ0eWNoYW5nZSBldmVudHMgb24gdGhlIHBhc3NlZC1pbiBlbGVtZW50XG4gKiBhbmQgb3ZlcnJpZGUgdGhlIHZhbHVlIHByb3BlcnR5IHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHVzZXIgZXZlbnRzIGZyb21cbiAqIHZhbHVlIGNoYW5nZXMgaW4gSlMuXG4gKi9cblxuXG5mdW5jdGlvbiBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGFjdGl2ZUVsZW1lbnQgPSB0YXJnZXQ7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgYWN0aXZlRWxlbWVudC5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIFJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBmcm9tIHRoZSBjdXJyZW50bHktdHJhY2tlZCBlbGVtZW50LFxuICogaWYgYW55IGV4aXN0cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCkge1xuICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhY3RpdmVFbGVtZW50LmRldGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgaGFuZGxlUHJvcGVydHlDaGFuZ2UpO1xuICBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsO1xufVxuLyoqXG4gKiAoRm9yIElFIDw9OSkgSGFuZGxlcyBhIHByb3BlcnR5Y2hhbmdlIGV2ZW50LCBzZW5kaW5nIGEgYGNoYW5nZWAgZXZlbnQgaWZcbiAqIHRoZSB2YWx1ZSBvZiB0aGUgYWN0aXZlIGVsZW1lbnQgaGFzIGNoYW5nZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBoYW5kbGVQcm9wZXJ0eUNoYW5nZShuYXRpdmVFdmVudCkge1xuICBpZiAobmF0aXZlRXZlbnQucHJvcGVydHlOYW1lICE9PSAndmFsdWUnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCkpIHtcbiAgICBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGwoZG9tRXZlbnROYW1lLCB0YXJnZXQsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2ZvY3VzaW4nKSB7XG4gICAgLy8gSW4gSUU5LCBwcm9wZXJ0eWNoYW5nZSBmaXJlcyBmb3IgbW9zdCBpbnB1dCBldmVudHMgYnV0IGlzIGJ1Z2d5IGFuZFxuICAgIC8vIGRvZXNuJ3QgZmlyZSB3aGVuIHRleHQgaXMgZGVsZXRlZCwgYnV0IGNvbnZlbmllbnRseSwgc2VsZWN0aW9uY2hhbmdlXG4gICAgLy8gYXBwZWFycyB0byBmaXJlIGluIGFsbCBvZiB0aGUgcmVtYWluaW5nIGNhc2VzIHNvIHdlIGNhdGNoIHRob3NlIGFuZFxuICAgIC8vIGZvcndhcmQgdGhlIGV2ZW50IGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgIC8vIEluIGVpdGhlciBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgdGhlIGV2ZW50IGhhbmRsZXIgaWYgdGhlIHZhbHVlXG4gICAgLy8gaXMgY2hhbmdlZCBmcm9tIEpTIHNvIHdlIHJlZGVmaW5lIGEgc2V0dGVyIGZvciBgLnZhbHVlYCB0aGF0IHVwZGF0ZXNcbiAgICAvLyBvdXIgYWN0aXZlRWxlbWVudFZhbHVlIHZhcmlhYmxlLCBhbGxvd2luZyB1cyB0byBpZ25vcmUgdGhvc2UgY2hhbmdlc1xuICAgIC8vXG4gICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBoZXJlIGJ1dCB3ZSBjYWxsIGl0IGp1c3QgaW4gY2FzZSB3ZVxuICAgIC8vIG1pc3NlZCBhIGJsdXIgZXZlbnQgc29tZWhvdy5cbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICAgIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0YXJnZXQsIHRhcmdldEluc3QpO1xuICB9IGVsc2UgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2ZvY3Vzb3V0Jykge1xuICAgIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gIH1cbn0gLy8gRm9yIElFOCBhbmQgSUU5LlxuXG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGwoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdzZWxlY3Rpb25jaGFuZ2UnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ2tleXVwJyB8fCBkb21FdmVudE5hbWUgPT09ICdrZXlkb3duJykge1xuICAgIC8vIE9uIHRoZSBzZWxlY3Rpb25jaGFuZ2UgZXZlbnQsIHRoZSB0YXJnZXQgaXMganVzdCBkb2N1bWVudCB3aGljaCBpc24ndFxuICAgIC8vIGhlbHBmdWwgZm9yIHVzIHNvIGp1c3QgY2hlY2sgYWN0aXZlRWxlbWVudCBpbnN0ZWFkLlxuICAgIC8vXG4gICAgLy8gOTklIG9mIHRoZSB0aW1lLCBrZXlkb3duIGFuZCBrZXl1cCBhcmVuJ3QgbmVjZXNzYXJ5LiBJRTggZmFpbHMgdG8gZmlyZVxuICAgIC8vIHByb3BlcnR5Y2hhbmdlIG9uIHRoZSBmaXJzdCBpbnB1dCBldmVudCBhZnRlciBzZXR0aW5nIGB2YWx1ZWAgZnJvbSBhXG4gICAgLy8gc2NyaXB0IGFuZCBmaXJlcyBvbmx5IGtleWRvd24sIGtleXByZXNzLCBrZXl1cC4gQ2F0Y2hpbmcga2V5dXAgdXN1YWxseVxuICAgIC8vIGdldHMgaXQgYW5kIGNhdGNoaW5nIGtleWRvd24gbGV0cyB1cyBmaXJlIGFuIGV2ZW50IGZvciB0aGUgZmlyc3RcbiAgICAvLyBrZXlzdHJva2UgaWYgdXNlciBkb2VzIGEga2V5IHJlcGVhdCAoaXQnbGwgYmUgYSBsaXR0bGUgZGVsYXllZDogcmlnaHRcbiAgICAvLyBiZWZvcmUgdGhlIHNlY29uZCBrZXlzdHJva2UpLiBPdGhlciBpbnB1dCBtZXRob2RzIChlLmcuLCBwYXN0ZSkgc2VlbSB0b1xuICAgIC8vIGZpcmUgc2VsZWN0aW9uY2hhbmdlIG5vcm1hbGx5LlxuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QpO1xuICB9XG59XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2xpY2tgIGV2ZW50XG4gKi9cblxuXG5mdW5jdGlvbiBzaG91bGRVc2VDbGlja0V2ZW50KGVsZW0pIHtcbiAgLy8gVXNlIHRoZSBgY2xpY2tgIGV2ZW50IHRvIGRldGVjdCBjaGFuZ2VzIHRvIGNoZWNrYm94IGFuZCByYWRpbyBpbnB1dHMuXG4gIC8vIFRoaXMgYXBwcm9hY2ggd29ya3MgYWNyb3NzIGFsbCBicm93c2Vycywgd2hlcmVhcyBgY2hhbmdlYCBkb2VzIG5vdCBmaXJlXG4gIC8vIHVudGlsIGBibHVyYCBpbiBJRTguXG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmIChlbGVtLnR5cGUgPT09ICdjaGVja2JveCcgfHwgZWxlbS50eXBlID09PSAncmFkaW8nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdjbGljaycpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdpbnB1dCcgfHwgZG9tRXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlQ29udHJvbGxlZElucHV0Qmx1cihub2RlKSB7XG4gIHZhciBzdGF0ZSA9IG5vZGUuX3dyYXBwZXJTdGF0ZTtcblxuICBpZiAoIXN0YXRlIHx8ICFzdGF0ZS5jb250cm9sbGVkIHx8IG5vZGUudHlwZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgLy8gSWYgY29udHJvbGxlZCwgYXNzaWduIHRoZSB2YWx1ZSBhdHRyaWJ1dGUgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb24gYmx1clxuICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCAnbnVtYmVyJywgbm9kZS52YWx1ZSk7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBwbHVnaW4gY3JlYXRlcyBhbiBgb25DaGFuZ2VgIGV2ZW50IHRoYXQgbm9ybWFsaXplcyBjaGFuZ2UgZXZlbnRzXG4gKiBhY3Jvc3MgZm9ybSBlbGVtZW50cy4gVGhpcyBldmVudCBmaXJlcyBhdCBhIHRpbWUgd2hlbiBpdCdzIHBvc3NpYmxlIHRvXG4gKiBjaGFuZ2UgdGhlIGVsZW1lbnQncyB2YWx1ZSB3aXRob3V0IHNlZWluZyBhIGZsaWNrZXIuXG4gKlxuICogU3VwcG9ydGVkIGVsZW1lbnRzIGFyZTpcbiAqIC0gaW5wdXQgKHNlZSBgaXNUZXh0SW5wdXRFbGVtZW50YClcbiAqIC0gdGV4dGFyZWFcbiAqIC0gc2VsZWN0XG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDEoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgdGFyZ2V0Tm9kZSA9IHRhcmdldEluc3QgPyBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpIDogd2luZG93O1xuICB2YXIgZ2V0VGFyZ2V0SW5zdEZ1bmMsIGhhbmRsZUV2ZW50RnVuYztcblxuICBpZiAoc2hvdWxkVXNlQ2hhbmdlRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudDtcbiAgfSBlbHNlIGlmIChpc1RleHRJbnB1dEVsZW1lbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICBpZiAoaXNJbnB1dEV2ZW50U3VwcG9ydGVkKSB7XG4gICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZlbnRQb2x5ZmlsbDtcbiAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2hvdWxkVXNlQ2xpY2tFdmVudCh0YXJnZXROb2RlKSkge1xuICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQ7XG4gIH1cblxuICBpZiAoZ2V0VGFyZ2V0SW5zdEZ1bmMpIHtcbiAgICB2YXIgaW5zdCA9IGdldFRhcmdldEluc3RGdW5jKGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCk7XG5cbiAgICBpZiAoaW5zdCkge1xuICAgICAgY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGhhbmRsZUV2ZW50RnVuYykge1xuICAgIGhhbmRsZUV2ZW50RnVuYyhkb21FdmVudE5hbWUsIHRhcmdldE5vZGUsIHRhcmdldEluc3QpO1xuICB9IC8vIFdoZW4gYmx1cnJpbmcsIHNldCB0aGUgdmFsdWUgYXR0cmlidXRlIGZvciBudW1iZXIgaW5wdXRzXG5cblxuICBpZiAoZG9tRXZlbnROYW1lID09PSAnZm9jdXNvdXQnKSB7XG4gICAgaGFuZGxlQ29udHJvbGxlZElucHV0Qmx1cih0YXJnZXROb2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cyQyKCkge1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvbk1vdXNlRW50ZXInLCBbJ21vdXNlb3V0JywgJ21vdXNlb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Nb3VzZUxlYXZlJywgWydtb3VzZW91dCcsICdtb3VzZW92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uUG9pbnRlckVudGVyJywgWydwb2ludGVyb3V0JywgJ3BvaW50ZXJvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvblBvaW50ZXJMZWF2ZScsIFsncG9pbnRlcm91dCcsICdwb2ludGVyb3ZlciddKTtcbn1cbi8qKlxuICogRm9yIGFsbW9zdCBldmVyeSBpbnRlcmFjdGlvbiB3ZSBjYXJlIGFib3V0LCB0aGVyZSB3aWxsIGJlIGJvdGggYSB0b3AtbGV2ZWxcbiAqIGBtb3VzZW92ZXJgIGFuZCBgbW91c2VvdXRgIGV2ZW50IHRoYXQgb2NjdXJzLiBPbmx5IHVzZSBgbW91c2VvdXRgIHNvIHRoYXRcbiAqIHdlIGRvIG5vdCBleHRyYWN0IGR1cGxpY2F0ZSBldmVudHMuIEhvd2V2ZXIsIG1vdmluZyB0aGUgbW91c2UgaW50byB0aGVcbiAqIGJyb3dzZXIgZnJvbSBvdXRzaWRlIHdpbGwgbm90IGZpcmUgYSBgbW91c2VvdXRgIGV2ZW50LiBJbiB0aGlzIGNhc2UsIHdlIHVzZVxuICogdGhlIGBtb3VzZW92ZXJgIHRvcC1sZXZlbCBldmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkMihkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciBpc092ZXJFdmVudCA9IGRvbUV2ZW50TmFtZSA9PT0gJ21vdXNlb3ZlcicgfHwgZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm92ZXInO1xuICB2YXIgaXNPdXRFdmVudCA9IGRvbUV2ZW50TmFtZSA9PT0gJ21vdXNlb3V0JyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3V0JztcblxuICBpZiAoaXNPdmVyRXZlbnQgJiYgKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19SRVBMQVlFRCkgPT09IDApIHtcbiAgICAvLyBJZiB0aGlzIGlzIGFuIG92ZXIgZXZlbnQgd2l0aCBhIHRhcmdldCwgd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IGRpc3BhdGNoZWRcbiAgICAvLyB0aGUgZXZlbnQgaW4gdGhlIG91dCBldmVudCBvZiB0aGUgb3RoZXIgdGFyZ2V0LiBJZiB0aGlzIGlzIHJlcGxheWVkLFxuICAgIC8vIHRoZW4gaXQncyBiZWNhdXNlIHdlIGNvdWxkbid0IGRpc3BhdGNoIGFnYWluc3QgdGhpcyB0YXJnZXQgcHJldmlvdXNseVxuICAgIC8vIHNvIHdlIGhhdmUgdG8gZG8gaXQgbm93IGluc3RlYWQuXG4gICAgdmFyIHJlbGF0ZWQgPSBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LmZyb21FbGVtZW50O1xuXG4gICAgaWYgKHJlbGF0ZWQpIHtcbiAgICAgIC8vIElmIHRoZSByZWxhdGVkIG5vZGUgaXMgbWFuYWdlZCBieSBSZWFjdCwgd2UgY2FuIGFzc3VtZSB0aGF0IHdlIGhhdmVcbiAgICAgIC8vIGFscmVhZHkgZGlzcGF0Y2hlZCB0aGUgY29ycmVzcG9uZGluZyBldmVudHMgZHVyaW5nIGl0cyBtb3VzZW91dC5cbiAgICAgIGlmIChnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShyZWxhdGVkKSB8fCBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChyZWxhdGVkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFpc091dEV2ZW50ICYmICFpc092ZXJFdmVudCkge1xuICAgIC8vIE11c3Qgbm90IGJlIGEgbW91c2Ugb3IgcG9pbnRlciBpbiBvciBvdXQgLSBpZ25vcmluZy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgd2luOyAvLyBUT0RPOiB3aHkgaXMgdGhpcyBudWxsYWJsZSBpbiB0aGUgdHlwZXMgYnV0IHdlIHJlYWQgZnJvbSBpdD9cblxuICBpZiAobmF0aXZlRXZlbnRUYXJnZXQud2luZG93ID09PSBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIC8vIGBuYXRpdmVFdmVudFRhcmdldGAgaXMgcHJvYmFibHkgYSB3aW5kb3cgb2JqZWN0LlxuICAgIHdpbiA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICB9IGVsc2Uge1xuICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IGBvd25lckRvY3VtZW50YCBpcyBzb21ldGltZXMgdW5kZWZpbmVkIGluIElFOC5cbiAgICB2YXIgZG9jID0gbmF0aXZlRXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcblxuICAgIGlmIChkb2MpIHtcbiAgICAgIHdpbiA9IGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW4gPSB3aW5kb3c7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZyb207XG4gIHZhciB0bztcblxuICBpZiAoaXNPdXRFdmVudCkge1xuICAgIHZhciBfcmVsYXRlZCA9IG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQudG9FbGVtZW50O1xuXG4gICAgZnJvbSA9IHRhcmdldEluc3Q7XG4gICAgdG8gPSBfcmVsYXRlZCA/IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKF9yZWxhdGVkKSA6IG51bGw7XG5cbiAgICBpZiAodG8gIT09IG51bGwpIHtcbiAgICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodG8pO1xuXG4gICAgICBpZiAodG8gIT09IG5lYXJlc3RNb3VudGVkIHx8IHRvLnRhZyAhPT0gSG9zdENvbXBvbmVudCAmJiB0by50YWcgIT09IEhvc3RUZXh0KSB7XG4gICAgICAgIHRvID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTW92aW5nIHRvIGEgbm9kZSBmcm9tIG91dHNpZGUgdGhlIHdpbmRvdy5cbiAgICBmcm9tID0gbnVsbDtcbiAgICB0byA9IHRhcmdldEluc3Q7XG4gIH1cblxuICBpZiAoZnJvbSA9PT0gdG8pIHtcbiAgICAvLyBOb3RoaW5nIHBlcnRhaW5zIHRvIG91ciBtYW5hZ2VkIGNvbXBvbmVudHMuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gIHZhciBsZWF2ZUV2ZW50VHlwZSA9ICdvbk1vdXNlTGVhdmUnO1xuICB2YXIgZW50ZXJFdmVudFR5cGUgPSAnb25Nb3VzZUVudGVyJztcbiAgdmFyIGV2ZW50VHlwZVByZWZpeCA9ICdtb3VzZSc7XG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdmVyJykge1xuICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1BvaW50ZXJFdmVudDtcbiAgICBsZWF2ZUV2ZW50VHlwZSA9ICdvblBvaW50ZXJMZWF2ZSc7XG4gICAgZW50ZXJFdmVudFR5cGUgPSAnb25Qb2ludGVyRW50ZXInO1xuICAgIGV2ZW50VHlwZVByZWZpeCA9ICdwb2ludGVyJztcbiAgfVxuXG4gIHZhciBmcm9tTm9kZSA9IGZyb20gPT0gbnVsbCA/IHdpbiA6IGdldE5vZGVGcm9tSW5zdGFuY2UoZnJvbSk7XG4gIHZhciB0b05vZGUgPSB0byA9PSBudWxsID8gd2luIDogZ2V0Tm9kZUZyb21JbnN0YW5jZSh0byk7XG4gIHZhciBsZWF2ZSA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IobGVhdmVFdmVudFR5cGUsIGV2ZW50VHlwZVByZWZpeCArICdsZWF2ZScsIGZyb20sIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIGxlYXZlLnRhcmdldCA9IGZyb21Ob2RlO1xuICBsZWF2ZS5yZWxhdGVkVGFyZ2V0ID0gdG9Ob2RlO1xuICB2YXIgZW50ZXIgPSBudWxsOyAvLyBXZSBzaG91bGQgb25seSBwcm9jZXNzIHRoaXMgbmF0aXZlRXZlbnQgaWYgd2UgYXJlIHByb2Nlc3NpbmdcbiAgLy8gdGhlIGZpcnN0IGFuY2VzdG9yLiBOZXh0IHRpbWUsIHdlIHdpbGwgaWdub3JlIHRoZSBldmVudC5cblxuICB2YXIgbmF0aXZlVGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAobmF0aXZlVGFyZ2V0SW5zdCA9PT0gdGFyZ2V0SW5zdCkge1xuICAgIHZhciBlbnRlckV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihlbnRlckV2ZW50VHlwZSwgZXZlbnRUeXBlUHJlZml4ICsgJ2VudGVyJywgdG8sIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZW50ZXJFdmVudC50YXJnZXQgPSB0b05vZGU7XG4gICAgZW50ZXJFdmVudC5yZWxhdGVkVGFyZ2V0ID0gZnJvbU5vZGU7XG4gICAgZW50ZXIgPSBlbnRlckV2ZW50O1xuICB9XG5cbiAgYWNjdW11bGF0ZUVudGVyTGVhdmVUd29QaGFzZUxpc3RlbmVycyhkaXNwYXRjaFF1ZXVlLCBsZWF2ZSwgZW50ZXIsIGZyb20sIHRvKTtcbn1cblxuLyoqXG4gKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAqL1xuZnVuY3Rpb24gaXMoeCwgeSkge1xuICByZXR1cm4geCA9PT0geSAmJiAoeCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkpIHx8IHggIT09IHggJiYgeSAhPT0geSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxuICA7XG59XG5cbnZhciBvYmplY3RJcyA9IHR5cGVvZiBPYmplY3QuaXMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QuaXMgOiBpcztcblxudmFyIGhhc093blByb3BlcnR5JDIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuLyoqXG4gKiBQZXJmb3JtcyBlcXVhbGl0eSBieSBpdGVyYXRpbmcgdGhyb3VnaCBrZXlzIG9uIGFuIG9iamVjdCBhbmQgcmV0dXJuaW5nIGZhbHNlXG4gKiB3aGVuIGFueSBrZXkgaGFzIHZhbHVlcyB3aGljaCBhcmUgbm90IHN0cmljdGx5IGVxdWFsIGJldHdlZW4gdGhlIGFyZ3VtZW50cy5cbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZXMgb2YgYWxsIGtleXMgYXJlIHN0cmljdGx5IGVxdWFsLlxuICovXG5cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XG4gIGlmIChvYmplY3RJcyhvYmpBLCBvYmpCKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBUZXN0IGZvciBBJ3Mga2V5cyBkaWZmZXJlbnQgZnJvbSBCLlxuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzQS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghaGFzT3duUHJvcGVydHkkMi5jYWxsKG9iakIsIGtleXNBW2ldKSB8fCAhb2JqZWN0SXMob2JqQVtrZXlzQVtpXV0sIG9iakJba2V5c0FbaV1dKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEdpdmVuIGFueSBub2RlIHJldHVybiB0aGUgZmlyc3QgbGVhZiBub2RlIHdpdGhvdXQgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5cbmZ1bmN0aW9uIGdldExlYWZOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUgJiYgbm9kZS5maXJzdENoaWxkKSB7XG4gICAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuLyoqXG4gKiBHZXQgdGhlIG5leHQgc2libGluZyB3aXRoaW4gYSBjb250YWluZXIuIFRoaXMgd2lsbCB3YWxrIHVwIHRoZVxuICogRE9NIGlmIGEgbm9kZSdzIHNpYmxpbmdzIGhhdmUgYmVlbiBleGhhdXN0ZWQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHs/RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFNpYmxpbmdOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5uZXh0U2libGluZykge1xuICAgICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxufVxuLyoqXG4gKiBHZXQgb2JqZWN0IGRlc2NyaWJpbmcgdGhlIG5vZGVzIHdoaWNoIGNvbnRhaW4gY2hhcmFjdGVycyBhdCBvZmZzZXQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSByb290XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5cblxuZnVuY3Rpb24gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChyb290LCBvZmZzZXQpIHtcbiAgdmFyIG5vZGUgPSBnZXRMZWFmTm9kZShyb290KTtcbiAgdmFyIG5vZGVTdGFydCA9IDA7XG4gIHZhciBub2RlRW5kID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIG5vZGVFbmQgPSBub2RlU3RhcnQgKyBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcblxuICAgICAgaWYgKG5vZGVTdGFydCA8PSBvZmZzZXQgJiYgbm9kZUVuZCA+PSBvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIG9mZnNldDogb2Zmc2V0IC0gbm9kZVN0YXJ0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG5vZGVTdGFydCA9IG5vZGVFbmQ7XG4gICAgfVxuXG4gICAgbm9kZSA9IGdldExlYWZOb2RlKGdldFNpYmxpbmdOb2RlKG5vZGUpKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gb3V0ZXJOb2RlXG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGdldE9mZnNldHMob3V0ZXJOb2RlKSB7XG4gIHZhciBvd25lckRvY3VtZW50ID0gb3V0ZXJOb2RlLm93bmVyRG9jdW1lbnQ7XG4gIHZhciB3aW4gPSBvd25lckRvY3VtZW50ICYmIG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbiAmJiB3aW4uZ2V0U2VsZWN0aW9uKCk7XG5cbiAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBhbmNob3JOb2RlID0gc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICBhbmNob3JPZmZzZXQgPSBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlID0gc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0ID0gc2VsZWN0aW9uLmZvY3VzT2Zmc2V0OyAvLyBJbiBGaXJlZm94LCBhbmNob3JOb2RlIGFuZCBmb2N1c05vZGUgY2FuIGJlIFwiYW5vbnltb3VzIGRpdnNcIiwgZS5nLiB0aGVcbiAgLy8gdXAvZG93biBidXR0b25zIG9uIGFuIDxpbnB1dCB0eXBlPVwibnVtYmVyXCI+LiBBbm9ueW1vdXMgZGl2cyBkbyBub3Qgc2VlbSB0b1xuICAvLyBleHBvc2UgcHJvcGVydGllcywgdHJpZ2dlcmluZyBhIFwiUGVybWlzc2lvbiBkZW5pZWQgZXJyb3JcIiBpZiBhbnkgb2YgaXRzXG4gIC8vIHByb3BlcnRpZXMgYXJlIGFjY2Vzc2VkLiBUaGUgb25seSBzZWVtaW5nbHkgcG9zc2libGUgd2F5IHRvIGF2b2lkIGVycm9yaW5nXG4gIC8vIGlzIHRvIGFjY2VzcyBhIHByb3BlcnR5IHRoYXQgdHlwaWNhbGx5IHdvcmtzIGZvciBub24tYW5vbnltb3VzIGRpdnMgYW5kXG4gIC8vIGNhdGNoIGFueSBlcnJvciB0aGF0IG1heSBvdGhlcndpc2UgYXJpc2UuIFNlZVxuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0MjdcblxuICB0cnkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuICAgIGFuY2hvck5vZGUubm9kZVR5cGU7XG4gICAgZm9jdXNOb2RlLm5vZGVUeXBlO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBnZXRNb2Rlcm5PZmZzZXRzRnJvbVBvaW50cyhvdXRlck5vZGUsIGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCwgZm9jdXNOb2RlLCBmb2N1c09mZnNldCk7XG59XG4vKipcbiAqIFJldHVybnMge3N0YXJ0LCBlbmR9IHdoZXJlIGBzdGFydGAgaXMgdGhlIGNoYXJhY3Rlci9jb2RlcG9pbnQgaW5kZXggb2ZcbiAqIChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQpIHdpdGhpbiB0aGUgdGV4dENvbnRlbnQgb2YgYG91dGVyTm9kZWAsIGFuZFxuICogYGVuZGAgaXMgdGhlIGluZGV4IG9mIChmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KS5cbiAqXG4gKiBSZXR1cm5zIG51bGwgaWYgeW91IHBhc3MgaW4gZ2FyYmFnZSBpbnB1dCBidXQgd2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgY3Jhc2guXG4gKlxuICogRXhwb3J0ZWQgb25seSBmb3IgdGVzdGluZy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRNb2Rlcm5PZmZzZXRzRnJvbVBvaW50cyhvdXRlck5vZGUsIGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCwgZm9jdXNOb2RlLCBmb2N1c09mZnNldCkge1xuICB2YXIgbGVuZ3RoID0gMDtcbiAgdmFyIHN0YXJ0ID0gLTE7XG4gIHZhciBlbmQgPSAtMTtcbiAgdmFyIGluZGV4V2l0aGluQW5jaG9yID0gMDtcbiAgdmFyIGluZGV4V2l0aGluRm9jdXMgPSAwO1xuICB2YXIgbm9kZSA9IG91dGVyTm9kZTtcbiAgdmFyIHBhcmVudE5vZGUgPSBudWxsO1xuXG4gIG91dGVyOiB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBuZXh0ID0gbnVsbDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZSA9PT0gYW5jaG9yTm9kZSAmJiAoYW5jaG9yT2Zmc2V0ID09PSAwIHx8IG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkpIHtcbiAgICAgICAgc3RhcnQgPSBsZW5ndGggKyBhbmNob3JPZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmb2N1c05vZGUgJiYgKGZvY3VzT2Zmc2V0ID09PSAwIHx8IG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkpIHtcbiAgICAgICAgZW5kID0gbGVuZ3RoICsgZm9jdXNPZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgICAgbGVuZ3RoICs9IG5vZGUubm9kZVZhbHVlLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKChuZXh0ID0gbm9kZS5maXJzdENoaWxkKSA9PT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gTW92aW5nIGZyb20gYG5vZGVgIHRvIGl0cyBmaXJzdCBjaGlsZCBgbmV4dGAuXG5cblxuICAgICAgcGFyZW50Tm9kZSA9IG5vZGU7XG4gICAgICBub2RlID0gbmV4dDtcbiAgICB9XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUgPT09IG91dGVyTm9kZSkge1xuICAgICAgICAvLyBJZiBgb3V0ZXJOb2RlYCBoYXMgY2hpbGRyZW4sIHRoaXMgaXMgYWx3YXlzIHRoZSBzZWNvbmQgdGltZSB2aXNpdGluZ1xuICAgICAgICAvLyBpdC4gSWYgaXQgaGFzIG5vIGNoaWxkcmVuLCB0aGlzIGlzIHN0aWxsIHRoZSBmaXJzdCBsb29wLCBhbmQgdGhlIG9ubHlcbiAgICAgICAgLy8gdmFsaWQgc2VsZWN0aW9uIGlzIGFuY2hvck5vZGUgYW5kIGZvY3VzTm9kZSBib3RoIGVxdWFsIHRvIHRoaXMgbm9kZVxuICAgICAgICAvLyBhbmQgYm90aCBvZmZzZXRzIDAsIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBoYXZlIGhhbmRsZWQgYWJvdmUuXG4gICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50Tm9kZSA9PT0gYW5jaG9yTm9kZSAmJiArK2luZGV4V2l0aGluQW5jaG9yID09PSBhbmNob3JPZmZzZXQpIHtcbiAgICAgICAgc3RhcnQgPSBsZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnROb2RlID09PSBmb2N1c05vZGUgJiYgKytpbmRleFdpdGhpbkZvY3VzID09PSBmb2N1c09mZnNldCkge1xuICAgICAgICBlbmQgPSBsZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmICgobmV4dCA9IG5vZGUubmV4dFNpYmxpbmcpICE9PSBudWxsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gcGFyZW50Tm9kZTtcbiAgICAgIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfSAvLyBNb3ZpbmcgZnJvbSBgbm9kZWAgdG8gaXRzIG5leHQgc2libGluZyBgbmV4dGAuXG5cblxuICAgIG5vZGUgPSBuZXh0O1xuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSAtMSB8fCBlbmQgPT09IC0xKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAoV291bGQgaGFwcGVuIGlmIHRoZSBhbmNob3IvZm9jdXMgbm9kZXMgYXJlbid0XG4gICAgLy8gYWN0dWFsbHkgaW5zaWRlIHRoZSBwYXNzZWQtaW4gbm9kZS4pXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbmQ6IGVuZFxuICB9O1xufVxuLyoqXG4gKiBJbiBtb2Rlcm4gbm9uLUlFIGJyb3dzZXJzLCB3ZSBjYW4gc3VwcG9ydCBib3RoIGZvcndhcmQgYW5kIGJhY2t3YXJkXG4gKiBzZWxlY3Rpb25zLlxuICpcbiAqIE5vdGU6IElFMTArIHN1cHBvcnRzIHRoZSBTZWxlY3Rpb24gb2JqZWN0LCBidXQgaXQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhlIGBleHRlbmRgIG1ldGhvZCwgd2hpY2ggbWVhbnMgdGhhdCBldmVuIGluIG1vZGVybiBJRSwgaXQncyBub3QgcG9zc2libGVcbiAqIHRvIHByb2dyYW1tYXRpY2FsbHkgY3JlYXRlIGEgYmFja3dhcmQgc2VsZWN0aW9uLiBUaHVzLCBmb3IgYWxsIElFXG4gKiB2ZXJzaW9ucywgd2UgdXNlIHRoZSBvbGQgSUUgQVBJIHRvIGNyZWF0ZSBvdXIgc2VsZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvZmZzZXRzXG4gKi9cblxuZnVuY3Rpb24gc2V0T2Zmc2V0cyhub2RlLCBvZmZzZXRzKSB7XG4gIHZhciBkb2MgPSBub2RlLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XG4gIHZhciB3aW4gPSBkb2MgJiYgZG9jLmRlZmF1bHRWaWV3IHx8IHdpbmRvdzsgLy8gRWRnZSBmYWlscyB3aXRoIFwiT2JqZWN0IGV4cGVjdGVkXCIgaW4gc29tZSBzY2VuYXJpb3MuXG4gIC8vIChGb3IgaW5zdGFuY2U6IFRpbnlNQ0UgZWRpdG9yIHVzZWQgaW4gYSBsaXN0IGNvbXBvbmVudCB0aGF0IHN1cHBvcnRzIHBhc3RpbmcgdG8gYWRkIG1vcmUsXG4gIC8vIGZhaWxzIHdoZW4gcGFzdGluZyAxMDArIGl0ZW1zKVxuXG4gIGlmICghd2luLmdldFNlbGVjdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uKCk7XG4gIHZhciBsZW5ndGggPSBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgdmFyIHN0YXJ0ID0gTWF0aC5taW4ob2Zmc2V0cy5zdGFydCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IG9mZnNldHMuZW5kID09PSB1bmRlZmluZWQgPyBzdGFydCA6IE1hdGgubWluKG9mZnNldHMuZW5kLCBsZW5ndGgpOyAvLyBJRSAxMSB1c2VzIG1vZGVybiBzZWxlY3Rpb24sIGJ1dCBkb2Vzbid0IHN1cHBvcnQgdGhlIGV4dGVuZCBtZXRob2QuXG4gIC8vIEZsaXAgYmFja3dhcmQgc2VsZWN0aW9ucywgc28gd2UgY2FuIHNldCB3aXRoIGEgc2luZ2xlIHJhbmdlLlxuXG4gIGlmICghc2VsZWN0aW9uLmV4dGVuZCAmJiBzdGFydCA+IGVuZCkge1xuICAgIHZhciB0ZW1wID0gZW5kO1xuICAgIGVuZCA9IHN0YXJ0O1xuICAgIHN0YXJ0ID0gdGVtcDtcbiAgfVxuXG4gIHZhciBzdGFydE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgc3RhcnQpO1xuICB2YXIgZW5kTWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChub2RlLCBlbmQpO1xuXG4gIGlmIChzdGFydE1hcmtlciAmJiBlbmRNYXJrZXIpIHtcbiAgICBpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDEgJiYgc2VsZWN0aW9uLmFuY2hvck5vZGUgPT09IHN0YXJ0TWFya2VyLm5vZGUgJiYgc2VsZWN0aW9uLmFuY2hvck9mZnNldCA9PT0gc3RhcnRNYXJrZXIub2Zmc2V0ICYmIHNlbGVjdGlvbi5mb2N1c05vZGUgPT09IGVuZE1hcmtlci5ub2RlICYmIHNlbGVjdGlvbi5mb2N1c09mZnNldCA9PT0gZW5kTWFya2VyLm9mZnNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByYW5nZSA9IGRvYy5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0TWFya2VyLm5vZGUsIHN0YXJ0TWFya2VyLm9mZnNldCk7XG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSB7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgc2VsZWN0aW9uLmV4dGVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLnNldEVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCk7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1RleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUpIHtcbiAgaWYgKCFvdXRlck5vZGUgfHwgIWlubmVyTm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUgPT09IGlubmVyTm9kZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUob3V0ZXJOb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKGlubmVyTm9kZSkpIHtcbiAgICByZXR1cm4gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlLnBhcmVudE5vZGUpO1xuICB9IGVsc2UgaWYgKCdjb250YWlucycgaW4gb3V0ZXJOb2RlKSB7XG4gICAgcmV0dXJuIG91dGVyTm9kZS5jb250YWlucyhpbm5lck5vZGUpO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgIHJldHVybiAhIShvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaW5uZXJOb2RlKSAmIDE2KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNJbkRvY3VtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5vd25lckRvY3VtZW50ICYmIGNvbnRhaW5zTm9kZShub2RlLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBub2RlKTtcbn1cblxuZnVuY3Rpb24gaXNTYW1lT3JpZ2luRnJhbWUoaWZyYW1lKSB7XG4gIHRyeSB7XG4gICAgLy8gQWNjZXNzaW5nIHRoZSBjb250ZW50RG9jdW1lbnQgb2YgYSBIVE1MSWZyYW1lRWxlbWVudCBjYW4gY2F1c2UgdGhlIGJyb3dzZXJcbiAgICAvLyB0byB0aHJvdywgZS5nLiBpZiBpdCBoYXMgYSBjcm9zcy1vcmlnaW4gc3JjIGF0dHJpYnV0ZS5cbiAgICAvLyBTYWZhcmkgd2lsbCBzaG93IGFuIGVycm9yIGluIHRoZSBjb25zb2xlIHdoZW4gdGhlIGFjY2VzcyByZXN1bHRzIGluIFwiQmxvY2tlZCBhIGZyYW1lIHdpdGggb3JpZ2luXCIuIGUuZzpcbiAgICAvLyBpZnJhbWUuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgIC8vIEEgc2FmZXR5IHdheSBpcyB0byBhY2Nlc3Mgb25lIG9mIHRoZSBjcm9zcyBvcmlnaW4gcHJvcGVydGllczogV2luZG93IG9yIExvY2F0aW9uXG4gICAgLy8gV2hpY2ggbWlnaHQgcmVzdWx0IGluIFwiU2VjdXJpdHlFcnJvclwiIERPTSBFeGNlcHRpb24gYW5kIGl0IGlzIGNvbXBhdGlibGUgdG8gU2FmYXJpLlxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Jyb3dzZXJzLmh0bWwjaW50ZWdyYXRpb24td2l0aC1pZGxcbiAgICByZXR1cm4gdHlwZW9mIGlmcmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPT09ICdzdHJpbmcnO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudERlZXAoKSB7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG4gIHZhciBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudCgpO1xuXG4gIHdoaWxlIChlbGVtZW50IGluc3RhbmNlb2Ygd2luLkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgaWYgKGlzU2FtZU9yaWdpbkZyYW1lKGVsZW1lbnQpKSB7XG4gICAgICB3aW4gPSBlbGVtZW50LmNvbnRlbnRXaW5kb3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIGVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KHdpbi5kb2N1bWVudCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cbi8qKlxuICogQFJlYWN0SW5wdXRTZWxlY3Rpb246IFJlYWN0IGlucHV0IHNlbGVjdGlvbiBtb2R1bGUuIEJhc2VkIG9uIFNlbGVjdGlvbi5qcyxcbiAqIGJ1dCBtb2RpZmllZCB0byBiZSBzdWl0YWJsZSBmb3IgcmVhY3QgYW5kIGhhcyBhIGNvdXBsZSBvZiBidWcgZml4ZXMgKGRvZXNuJ3RcbiAqIGFzc3VtZSBidXR0b25zIGhhdmUgcmFuZ2Ugc2VsZWN0aW9ucyBhbGxvd2VkKS5cbiAqIElucHV0IHNlbGVjdGlvbiBtb2R1bGUgZm9yIFJlYWN0LlxuICovXG5cbi8qKlxuICogQGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllczogd2UgZ2V0IHRoZSBlbGVtZW50IHR5cGVzIHRoYXQgc3VwcG9ydCBzZWxlY3Rpb25cbiAqIGZyb20gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jZG8tbm90LWFwcGx5LCBsb29raW5nIGF0IGBzZWxlY3Rpb25TdGFydGBcbiAqIGFuZCBgc2VsZWN0aW9uRW5kYCByb3dzLlxuICovXG5cblxuZnVuY3Rpb24gaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIChub2RlTmFtZSA9PT0gJ2lucHV0JyAmJiAoZWxlbS50eXBlID09PSAndGV4dCcgfHwgZWxlbS50eXBlID09PSAnc2VhcmNoJyB8fCBlbGVtLnR5cGUgPT09ICd0ZWwnIHx8IGVsZW0udHlwZSA9PT0gJ3VybCcgfHwgZWxlbS50eXBlID09PSAncGFzc3dvcmQnKSB8fCBub2RlTmFtZSA9PT0gJ3RleHRhcmVhJyB8fCBlbGVtLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKTtcbn1cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbkluZm9ybWF0aW9uKCkge1xuICB2YXIgZm9jdXNlZEVsZW0gPSBnZXRBY3RpdmVFbGVtZW50RGVlcCgpO1xuICByZXR1cm4ge1xuICAgIGZvY3VzZWRFbGVtOiBmb2N1c2VkRWxlbSxcbiAgICBzZWxlY3Rpb25SYW5nZTogaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGZvY3VzZWRFbGVtKSA/IGdldFNlbGVjdGlvbihmb2N1c2VkRWxlbSkgOiBudWxsXG4gIH07XG59XG4vKipcbiAqIEByZXN0b3JlU2VsZWN0aW9uOiBJZiBhbnkgc2VsZWN0aW9uIGluZm9ybWF0aW9uIHdhcyBwb3RlbnRpYWxseSBsb3N0LFxuICogcmVzdG9yZSBpdC4gVGhpcyBpcyB1c2VmdWwgd2hlbiBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCByZW1vdmUgZG9tXG4gKiBub2RlcyBhbmQgcGxhY2UgdGhlbSBiYWNrIGluLCByZXN1bHRpbmcgaW4gZm9jdXMgYmVpbmcgbG9zdC5cbiAqL1xuXG5mdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24pIHtcbiAgdmFyIGN1ckZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoKTtcbiAgdmFyIHByaW9yRm9jdXNlZEVsZW0gPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLmZvY3VzZWRFbGVtO1xuICB2YXIgcHJpb3JTZWxlY3Rpb25SYW5nZSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uc2VsZWN0aW9uUmFuZ2U7XG5cbiAgaWYgKGN1ckZvY3VzZWRFbGVtICE9PSBwcmlvckZvY3VzZWRFbGVtICYmIGlzSW5Eb2N1bWVudChwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgIGlmIChwcmlvclNlbGVjdGlvblJhbmdlICE9PSBudWxsICYmIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgICAgc2V0U2VsZWN0aW9uKHByaW9yRm9jdXNlZEVsZW0sIHByaW9yU2VsZWN0aW9uUmFuZ2UpO1xuICAgIH0gLy8gRm9jdXNpbmcgYSBub2RlIGNhbiBjaGFuZ2UgdGhlIHNjcm9sbCBwb3NpdGlvbiwgd2hpY2ggaXMgdW5kZXNpcmFibGVcblxuXG4gICAgdmFyIGFuY2VzdG9ycyA9IFtdO1xuICAgIHZhciBhbmNlc3RvciA9IHByaW9yRm9jdXNlZEVsZW07XG5cbiAgICB3aGlsZSAoYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlKSB7XG4gICAgICBpZiAoYW5jZXN0b3Iubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICBhbmNlc3RvcnMucHVzaCh7XG4gICAgICAgICAgZWxlbWVudDogYW5jZXN0b3IsXG4gICAgICAgICAgbGVmdDogYW5jZXN0b3Iuc2Nyb2xsTGVmdCxcbiAgICAgICAgICB0b3A6IGFuY2VzdG9yLnNjcm9sbFRvcFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByaW9yRm9jdXNlZEVsZW0uZm9jdXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByaW9yRm9jdXNlZEVsZW0uZm9jdXMoKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFuY2VzdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGluZm8gPSBhbmNlc3RvcnNbaV07XG4gICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsTGVmdCA9IGluZm8ubGVmdDtcbiAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxUb3AgPSBpbmZvLnRvcDtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogQGdldFNlbGVjdGlvbjogR2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIGZvY3VzZWQgdGV4dGFyZWEsIGlucHV0IG9yXG4gKiBjb250ZW50RWRpdGFibGUgbm9kZS5cbiAqIC1AaW5wdXQ6IExvb2sgdXAgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0XG4gKiAtQHJldHVybiB7c3RhcnQ6IHNlbGVjdGlvblN0YXJ0LCBlbmQ6IHNlbGVjdGlvbkVuZH1cbiAqL1xuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24oaW5wdXQpIHtcbiAgdmFyIHNlbGVjdGlvbjtcblxuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgIC8vIE1vZGVybiBicm93c2VyIHdpdGggaW5wdXQgb3IgdGV4dGFyZWEuXG4gICAgc2VsZWN0aW9uID0ge1xuICAgICAgc3RhcnQ6IGlucHV0LnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBpbnB1dC5zZWxlY3Rpb25FbmRcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIENvbnRlbnQgZWRpdGFibGUgb3Igb2xkIElFIHRleHRhcmVhLlxuICAgIHNlbGVjdGlvbiA9IGdldE9mZnNldHMoaW5wdXQpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGVjdGlvbiB8fCB7XG4gICAgc3RhcnQ6IDAsXG4gICAgZW5kOiAwXG4gIH07XG59XG4vKipcbiAqIEBzZXRTZWxlY3Rpb246IFNldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSB0ZXh0YXJlYSBvciBpbnB1dCBhbmQgZm9jdXNlc1xuICogdGhlIGlucHV0LlxuICogLUBpbnB1dCAgICAgU2V0IHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dCBvciB0ZXh0YXJlYVxuICogLUBvZmZzZXRzICAgT2JqZWN0IG9mIHNhbWUgZm9ybSB0aGF0IGlzIHJldHVybmVkIGZyb20gZ2V0KlxuICovXG5cbmZ1bmN0aW9uIHNldFNlbGVjdGlvbihpbnB1dCwgb2Zmc2V0cykge1xuICB2YXIgc3RhcnQgPSBvZmZzZXRzLnN0YXJ0O1xuICB2YXIgZW5kID0gb2Zmc2V0cy5lbmQ7XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gc3RhcnQ7XG4gIH1cblxuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgIGlucHV0LnNlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7XG4gICAgaW5wdXQuc2VsZWN0aW9uRW5kID0gTWF0aC5taW4oZW5kLCBpbnB1dC52YWx1ZS5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHNldE9mZnNldHMoaW5wdXQsIG9mZnNldHMpO1xuICB9XG59XG5cbnZhciBza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQgPSBjYW5Vc2VET00gJiYgJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDw9IDExO1xuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cyQzKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uU2VsZWN0JywgWydmb2N1c291dCcsICdjb250ZXh0bWVudScsICdkcmFnZW5kJywgJ2ZvY3VzaW4nLCAna2V5ZG93bicsICdrZXl1cCcsICdtb3VzZWRvd24nLCAnbW91c2V1cCcsICdzZWxlY3Rpb25jaGFuZ2UnXSk7XG59XG5cbnZhciBhY3RpdmVFbGVtZW50JDEgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSBudWxsO1xudmFyIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xudmFyIG1vdXNlRG93biA9IGZhbHNlO1xuLyoqXG4gKiBHZXQgYW4gb2JqZWN0IHdoaWNoIGlzIGEgdW5pcXVlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbi5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgbm90IGJlIGNvbnNpc3RlbnQgYWNyb3NzIG5vZGVzIG9yIGJyb3dzZXJzLCBidXRcbiAqIHR3byBpZGVudGljYWwgc2VsZWN0aW9ucyBvbiB0aGUgc2FtZSBub2RlIHdpbGwgcmV0dXJuIGlkZW50aWNhbCBvYmplY3RzLlxuICovXG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbiQxKG5vZGUpIHtcbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gbm9kZSAmJiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMobm9kZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IG5vZGUuc2VsZWN0aW9uU3RhcnQsXG4gICAgICBlbmQ6IG5vZGUuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgd2luID0gbm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG4gICAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24oKTtcbiAgICByZXR1cm4ge1xuICAgICAgYW5jaG9yTm9kZTogc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICBhbmNob3JPZmZzZXQ6IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICBmb2N1c05vZGU6IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldDogc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgfTtcbiAgfVxufVxuLyoqXG4gKiBHZXQgZG9jdW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudCB0YXJnZXQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldERvY3VtZW50KGV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBldmVudFRhcmdldC53aW5kb3cgPT09IGV2ZW50VGFyZ2V0ID8gZXZlbnRUYXJnZXQuZG9jdW1lbnQgOiBldmVudFRhcmdldC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/IGV2ZW50VGFyZ2V0IDogZXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcbn1cbi8qKlxuICogUG9sbCBzZWxlY3Rpb24gdG8gc2VlIHdoZXRoZXIgaXQncyBjaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gKiBAcmV0dXJuIHs/U3ludGhldGljRXZlbnR9XG4gKi9cblxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgLy8gRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGVsZW1lbnQsIGFuZCB0aGF0IHRoZSB1c2VyIGlzIG5vdCBkcmFnZ2luZyBhXG4gIC8vIHNlbGVjdGlvbiAodGhpcyBtYXRjaGVzIG5hdGl2ZSBgc2VsZWN0YCBldmVudCBiZWhhdmlvcikuIEluIEhUTUw1LCBzZWxlY3RcbiAgLy8gZmlyZXMgb25seSBvbiBpbnB1dCBhbmQgdGV4dGFyZWEgdGh1cyBpZiB0aGVyZSdzIG5vIGZvY3VzZWQgZWxlbWVudCB3ZVxuICAvLyB3b24ndCBkaXNwYXRjaC5cbiAgdmFyIGRvYyA9IGdldEV2ZW50VGFyZ2V0RG9jdW1lbnQobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmIChtb3VzZURvd24gfHwgYWN0aXZlRWxlbWVudCQxID09IG51bGwgfHwgYWN0aXZlRWxlbWVudCQxICE9PSBnZXRBY3RpdmVFbGVtZW50KGRvYykpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gT25seSBmaXJlIHdoZW4gc2VsZWN0aW9uIGhhcyBhY3R1YWxseSBjaGFuZ2VkLlxuXG5cbiAgdmFyIGN1cnJlbnRTZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24kMShhY3RpdmVFbGVtZW50JDEpO1xuXG4gIGlmICghbGFzdFNlbGVjdGlvbiB8fCAhc2hhbGxvd0VxdWFsKGxhc3RTZWxlY3Rpb24sIGN1cnJlbnRTZWxlY3Rpb24pKSB7XG4gICAgbGFzdFNlbGVjdGlvbiA9IGN1cnJlbnRTZWxlY3Rpb247XG4gICAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyhhY3RpdmVFbGVtZW50SW5zdCQxLCAnb25TZWxlY3QnKTtcblxuICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KCdvblNlbGVjdCcsICdzZWxlY3QnLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgICAgfSk7XG4gICAgICBldmVudC50YXJnZXQgPSBhY3RpdmVFbGVtZW50JDE7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uU2VsZWN0YCBldmVudCB0aGF0IG5vcm1hbGl6ZXMgc2VsZWN0IGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuXG4gKlxuICogU3VwcG9ydGVkIGVsZW1lbnRzIGFyZTpcbiAqIC0gaW5wdXQgKHNlZSBgaXNUZXh0SW5wdXRFbGVtZW50YClcbiAqIC0gdGV4dGFyZWFcbiAqIC0gY29udGVudEVkaXRhYmxlXG4gKlxuICogVGhpcyBkaWZmZXJzIGZyb20gbmF0aXZlIGJyb3dzZXIgaW1wbGVtZW50YXRpb25zIGluIHRoZSBmb2xsb3dpbmcgd2F5czpcbiAqIC0gRmlyZXMgb24gY29udGVudEVkaXRhYmxlIGZpZWxkcyBhcyB3ZWxsIGFzIGlucHV0cy5cbiAqIC0gRmlyZXMgZm9yIGNvbGxhcHNlZCBzZWxlY3Rpb24uXG4gKiAtIEZpcmVzIGFmdGVyIHVzZXIgaW5wdXQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuXG4gIHZhciB0YXJnZXROb2RlID0gdGFyZ2V0SW5zdCA/IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAvLyBUcmFjayB0aGUgaW5wdXQgbm9kZSB0aGF0IGhhcyBmb2N1cy5cbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIGlmIChpc1RleHRJbnB1dEVsZW1lbnQodGFyZ2V0Tm9kZSkgfHwgdGFyZ2V0Tm9kZS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJykge1xuICAgICAgICBhY3RpdmVFbGVtZW50JDEgPSB0YXJnZXROb2RlO1xuICAgICAgICBhY3RpdmVFbGVtZW50SW5zdCQxID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgYWN0aXZlRWxlbWVudCQxID0gbnVsbDtcbiAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSBudWxsO1xuICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICBicmVhaztcbiAgICAvLyBEb24ndCBmaXJlIHRoZSBldmVudCB3aGlsZSB0aGUgdXNlciBpcyBkcmFnZ2luZy4gVGhpcyBtYXRjaGVzIHRoZVxuICAgIC8vIHNlbWFudGljcyBvZiB0aGUgbmF0aXZlIHNlbGVjdCBldmVudC5cblxuICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgICBtb3VzZURvd24gPSB0cnVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjb250ZXh0bWVudSc6XG4gICAgY2FzZSAnbW91c2V1cCc6XG4gICAgY2FzZSAnZHJhZ2VuZCc6XG4gICAgICBtb3VzZURvd24gPSBmYWxzZTtcbiAgICAgIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICBicmVhaztcbiAgICAvLyBDaHJvbWUgYW5kIElFIGZpcmUgbm9uLXN0YW5kYXJkIGV2ZW50IHdoZW4gc2VsZWN0aW9uIGlzIGNoYW5nZWQgKGFuZFxuICAgIC8vIHNvbWV0aW1lcyB3aGVuIGl0IGhhc24ndCkuIElFJ3MgZXZlbnQgZmlyZXMgb3V0IG9mIG9yZGVyIHdpdGggcmVzcGVjdFxuICAgIC8vIHRvIGtleSBhbmQgaW5wdXQgZXZlbnRzIG9uIGRlbGV0aW9uLCBzbyB3ZSBkaXNjYXJkIGl0LlxuICAgIC8vXG4gICAgLy8gRmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgc2VsZWN0aW9uY2hhbmdlLCBzbyBjaGVjayBzZWxlY3Rpb24gc3RhdHVzXG4gICAgLy8gYWZ0ZXIgZWFjaCBrZXkgZW50cnkuIFRoZSBzZWxlY3Rpb24gY2hhbmdlcyBhZnRlciBrZXlkb3duIGFuZCBiZWZvcmVcbiAgICAvLyBrZXl1cCwgYnV0IHdlIGNoZWNrIG9uIGtleWRvd24gYXMgd2VsbCBpbiB0aGUgY2FzZSBvZiBob2xkaW5nIGRvd24gYVxuICAgIC8vIGtleSwgd2hlbiBtdWx0aXBsZSBrZXlkb3duIGV2ZW50cyBhcmUgZmlyZWQgYnV0IG9ubHkgb25lIGtleXVwIGlzLlxuICAgIC8vIFRoaXMgaXMgYWxzbyBvdXIgYXBwcm9hY2ggZm9yIElFIGhhbmRsaW5nLCBmb3IgdGhlIHJlYXNvbiBhYm92ZS5cblxuICAgIGNhc2UgJ3NlbGVjdGlvbmNoYW5nZSc6XG4gICAgICBpZiAoc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgLy8gZmFsbHMgdGhyb3VnaFxuXG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgY2FzZSAna2V5dXAnOlxuICAgICAgY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgcmVhY3ROYW1lID0gdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuZ2V0KGRvbUV2ZW50TmFtZSk7XG5cbiAgaWYgKHJlYWN0TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0V2ZW50O1xuICB2YXIgcmVhY3RFdmVudFR5cGUgPSBkb21FdmVudE5hbWU7XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvLyBGaXJlZm94IGNyZWF0ZXMgYSBrZXlwcmVzcyBldmVudCBmb3IgZnVuY3Rpb24ga2V5cyB0b28uIFRoaXMgcmVtb3Zlc1xuICAgICAgLy8gdGhlIHVud2FudGVkIGtleXByZXNzIGV2ZW50cy4gRW50ZXIgaXMgaG93ZXZlciBib3RoIHByaW50YWJsZSBhbmRcbiAgICAgIC8vIG5vbi1wcmludGFibGUuIE9uZSB3b3VsZCBleHBlY3QgVGFiIHRvIGJlIGFzIHdlbGwgKGJ1dCBpdCBpc24ndCkuXG4gICAgICBpZiAoZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgY2FzZSAna2V5dXAnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljS2V5Ym9hcmRFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICByZWFjdEV2ZW50VHlwZSA9ICdmb2N1cyc7XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICByZWFjdEV2ZW50VHlwZSA9ICdibHVyJztcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2JlZm9yZWJsdXInOlxuICAgIGNhc2UgJ2FmdGVyYmx1cic6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjbGljayc6XG4gICAgICAvLyBGaXJlZm94IGNyZWF0ZXMgYSBjbGljayBldmVudCBvbiByaWdodCBtb3VzZSBjbGlja3MuIFRoaXMgcmVtb3ZlcyB0aGVcbiAgICAgIC8vIHVud2FudGVkIGNsaWNrIGV2ZW50cy5cbiAgICAgIGlmIChuYXRpdmVFdmVudC5idXR0b24gPT09IDIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgY2FzZSAnYXV4Y2xpY2snOlxuICAgIGNhc2UgJ2RibGNsaWNrJzpcbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgIGNhc2UgJ21vdXNlbW92ZSc6XG4gICAgY2FzZSAnbW91c2V1cCc6IC8vIFRPRE86IERpc2FibGVkIGVsZW1lbnRzIHNob3VsZCBub3QgcmVzcG9uZCB0byBtb3VzZSBldmVudHNcblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgIGNhc2UgJ2NvbnRleHRtZW51JzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RyYWcnOlxuICAgIGNhc2UgJ2RyYWdlbmQnOlxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgY2FzZSAnZHJhZ2V4aXQnOlxuICAgIGNhc2UgJ2RyYWdsZWF2ZSc6XG4gICAgY2FzZSAnZHJhZ292ZXInOlxuICAgIGNhc2UgJ2RyYWdzdGFydCc6XG4gICAgY2FzZSAnZHJvcCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNEcmFnRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RvdWNoY2FuY2VsJzpcbiAgICBjYXNlICd0b3VjaGVuZCc6XG4gICAgY2FzZSAndG91Y2htb3ZlJzpcbiAgICBjYXNlICd0b3VjaHN0YXJ0JzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQU5JTUFUSU9OX0VORDpcbiAgICBjYXNlIEFOSU1BVElPTl9JVEVSQVRJT046XG4gICAgY2FzZSBBTklNQVRJT05fU1RBUlQ6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNBbmltYXRpb25FdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBUUkFOU0lUSU9OX0VORDpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2Nyb2xsJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1VJRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3doZWVsJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1doZWVsRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NvcHknOlxuICAgIGNhc2UgJ2N1dCc6XG4gICAgY2FzZSAncGFzdGUnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQ2xpcGJvYXJkRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2dvdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdsb3N0cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ3BvaW50ZXJjYW5jZWwnOlxuICAgIGNhc2UgJ3BvaW50ZXJkb3duJzpcbiAgICBjYXNlICdwb2ludGVybW92ZSc6XG4gICAgY2FzZSAncG9pbnRlcm91dCc6XG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgIGNhc2UgJ3BvaW50ZXJ1cCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBpbkNhcHR1cmVQaGFzZSA9IChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSkgIT09IDA7XG5cbiAge1xuICAgIC8vIFNvbWUgZXZlbnRzIGRvbid0IGJ1YmJsZSBpbiB0aGUgYnJvd3Nlci5cbiAgICAvLyBJbiB0aGUgcGFzdCwgUmVhY3QgaGFzIGFsd2F5cyBidWJibGVkIHRoZW0sIGJ1dCB0aGlzIGNhbiBiZSBzdXJwcmlzaW5nLlxuICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHRyeSBhbGlnbmluZyBjbG9zZXIgdG8gdGhlIGJyb3dzZXIgYmVoYXZpb3IgYnkgbm90IGJ1YmJsaW5nXG4gICAgLy8gdGhlbSBpbiBSZWFjdCBlaXRoZXIuIFdlJ2xsIHN0YXJ0IGJ5IG5vdCBidWJibGluZyBvblNjcm9sbCwgYW5kIHRoZW4gZXhwYW5kLlxuICAgIHZhciBhY2N1bXVsYXRlVGFyZ2V0T25seSA9ICFpbkNhcHR1cmVQaGFzZSAmJiAvLyBUT0RPOiBpZGVhbGx5LCB3ZSdkIGV2ZW50dWFsbHkgYWRkIGFsbCBldmVudHMgZnJvbVxuICAgIC8vIG5vbkRlbGVnYXRlZEV2ZW50cyBsaXN0IGluIERPTVBsdWdpbkV2ZW50U3lzdGVtLlxuICAgIC8vIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGlzIHNwZWNpYWwgbGlzdC5cbiAgICAvLyBUaGlzIGlzIGEgYnJlYWtpbmcgY2hhbmdlIHRoYXQgY2FuIHdhaXQgdW50aWwgUmVhY3QgMTguXG4gICAgZG9tRXZlbnROYW1lID09PSAnc2Nyb2xsJztcblxuICAgIHZhciBfbGlzdGVuZXJzID0gYWNjdW11bGF0ZVNpbmdsZVBoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsIHJlYWN0TmFtZSwgbmF0aXZlRXZlbnQudHlwZSwgaW5DYXB0dXJlUGhhc2UsIGFjY3VtdWxhdGVUYXJnZXRPbmx5KTtcblxuICAgIGlmIChfbGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgY3JlYXRlIGV2ZW50IGxhemlseS5cbiAgICAgIHZhciBfZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKHJlYWN0TmFtZSwgcmVhY3RFdmVudFR5cGUsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgIGV2ZW50OiBfZXZlbnQsXG4gICAgICAgIGxpc3RlbmVyczogX2xpc3RlbmVyc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8vIFRPRE86IHJlbW92ZSB0b3AtbGV2ZWwgc2lkZSBlZmZlY3QuXG5yZWdpc3RlclNpbXBsZUV2ZW50cygpO1xucmVnaXN0ZXJFdmVudHMkMigpO1xucmVnaXN0ZXJFdmVudHMkMSgpO1xucmVnaXN0ZXJFdmVudHMkMygpO1xucmVnaXN0ZXJFdmVudHMoKTtcblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQ1KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgLy8gVE9ETzogd2Ugc2hvdWxkIHJlbW92ZSB0aGUgY29uY2VwdCBvZiBhIFwiU2ltcGxlRXZlbnRQbHVnaW5cIi5cbiAgLy8gVGhpcyBpcyB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZXZlbnQgc3lzdGVtLiBBbGxcbiAgLy8gdGhlIG90aGVyIHBsdWdpbnMgYXJlIGVzc2VudGlhbGx5IHBvbHlmaWxscy4gU28gdGhlIHBsdWdpblxuICAvLyBzaG91bGQgcHJvYmFibHkgYmUgaW5saW5lZCBzb21ld2hlcmUgYW5kIGhhdmUgaXRzIGxvZ2ljXG4gIC8vIGJlIGNvcmUgdGhlIHRvIGV2ZW50IHN5c3RlbS4gVGhpcyB3b3VsZCBwb3RlbnRpYWxseSBhbGxvd1xuICAvLyB1cyB0byBzaGlwIGJ1aWxkcyBvZiBSZWFjdCB3aXRob3V0IHRoZSBwb2x5ZmlsbGVkIHBsdWdpbnMgYmVsb3cuXG4gIGV4dHJhY3RFdmVudHMkNChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gIHZhciBzaG91bGRQcm9jZXNzUG9seWZpbGxQbHVnaW5zID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBTSE9VTERfTk9UX1BST0NFU1NfUE9MWUZJTExfRVZFTlRfUExVR0lOUykgPT09IDA7IC8vIFdlIGRvbid0IHByb2Nlc3MgdGhlc2UgZXZlbnRzIHVubGVzcyB3ZSBhcmUgaW4gdGhlXG4gIC8vIGV2ZW50J3MgbmF0aXZlIFwiYnViYmxlXCIgcGhhc2UsIHdoaWNoIG1lYW5zIHRoYXQgd2UncmVcbiAgLy8gbm90IGluIHRoZSBjYXB0dXJlIHBoYXNlLiBUaGF0J3MgYmVjYXVzZSB3ZSBlbXVsYXRlXG4gIC8vIHRoZSBjYXB0dXJlIHBoYXNlIGhlcmUgc3RpbGwuIFRoaXMgaXMgYSB0cmFkZS1vZmYsXG4gIC8vIGJlY2F1c2UgaW4gYW4gaWRlYWwgd29ybGQgd2Ugd291bGQgbm90IGVtdWxhdGUgYW5kIHVzZVxuICAvLyB0aGUgcGhhc2VzIHByb3Blcmx5LCBsaWtlIHdlIGRvIHdpdGggdGhlIFNpbXBsZUV2ZW50XG4gIC8vIHBsdWdpbi4gSG93ZXZlciwgdGhlIHBsdWdpbnMgYmVsb3cgZWl0aGVyIGV4cGVjdFxuICAvLyBlbXVsYXRpb24gKEVudGVyTGVhdmUpIG9yIHVzZSBzdGF0ZSBsb2NhbGl6ZWQgdG8gdGhhdFxuICAvLyBwbHVnaW4gKEJlZm9yZUlucHV0LCBDaGFuZ2UsIFNlbGVjdCkuIFRoZSBzdGF0ZSBpblxuICAvLyB0aGVzZSBtb2R1bGVzIGNvbXBsaWNhdGVzIHRoaW5ncywgYXMgeW91J2xsIGVzc2VudGlhbGx5XG4gIC8vIGdldCB0aGUgY2FzZSB3aGVyZSB0aGUgY2FwdHVyZSBwaGFzZSBldmVudCBtaWdodCBjaGFuZ2VcbiAgLy8gc3RhdGUsIG9ubHkgZm9yIHRoZSBmb2xsb3dpbmcgYnViYmxlIGV2ZW50IHRvIGNvbWUgaW5cbiAgLy8gbGF0ZXIgYW5kIG5vdCB0cmlnZ2VyIGFueXRoaW5nIGFzIHRoZSBzdGF0ZSBub3dcbiAgLy8gaW52YWxpZGF0ZXMgdGhlIGhldXJpc3RpY3Mgb2YgdGhlIGV2ZW50IHBsdWdpbi4gV2VcbiAgLy8gY291bGQgYWx0ZXIgYWxsIHRoZXNlIHBsdWdpbnMgdG8gd29yayBpbiBzdWNoIHdheXMsIGJ1dFxuICAvLyB0aGF0IG1pZ2h0IGNhdXNlIG90aGVyIHVua25vd24gc2lkZS1lZmZlY3RzIHRoYXQgd2VcbiAgLy8gY2FuJ3QgZm9yc2VlIHJpZ2h0IG5vdy5cblxuICBpZiAoc2hvdWxkUHJvY2Vzc1BvbHlmaWxsUGx1Z2lucykge1xuICAgIGV4dHJhY3RFdmVudHMkMihkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gICAgZXh0cmFjdEV2ZW50cyQxKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBleHRyYWN0RXZlbnRzJDMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGV4dHJhY3RFdmVudHMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICB9XG59IC8vIExpc3Qgb2YgZXZlbnRzIHRoYXQgbmVlZCB0byBiZSBpbmRpdmlkdWFsbHkgYXR0YWNoZWQgdG8gbWVkaWEgZWxlbWVudHMuXG5cblxudmFyIG1lZGlhRXZlbnRUeXBlcyA9IFsnYWJvcnQnLCAnY2FucGxheScsICdjYW5wbGF5dGhyb3VnaCcsICdkdXJhdGlvbmNoYW5nZScsICdlbXB0aWVkJywgJ2VuY3J5cHRlZCcsICdlbmRlZCcsICdlcnJvcicsICdsb2FkZWRkYXRhJywgJ2xvYWRlZG1ldGFkYXRhJywgJ2xvYWRzdGFydCcsICdwYXVzZScsICdwbGF5JywgJ3BsYXlpbmcnLCAncHJvZ3Jlc3MnLCAncmF0ZWNoYW5nZScsICdzZWVrZWQnLCAnc2Vla2luZycsICdzdGFsbGVkJywgJ3N1c3BlbmQnLCAndGltZXVwZGF0ZScsICd2b2x1bWVjaGFuZ2UnLCAnd2FpdGluZyddOyAvLyBXZSBzaG91bGQgbm90IGRlbGVnYXRlIHRoZXNlIGV2ZW50cyB0byB0aGUgY29udGFpbmVyLCBidXQgcmF0aGVyXG4vLyBzZXQgdGhlbSBvbiB0aGUgYWN0dWFsIHRhcmdldCBlbGVtZW50IGl0c2VsZi4gVGhpcyBpcyBwcmltYXJpbHlcbi8vIGJlY2F1c2UgdGhlc2UgZXZlbnRzIGRvIG5vdCBjb25zaXN0ZW50bHkgYnViYmxlIGluIHRoZSBET00uXG5cbnZhciBub25EZWxlZ2F0ZWRFdmVudHMgPSBuZXcgU2V0KFsnY2FuY2VsJywgJ2Nsb3NlJywgJ2ludmFsaWQnLCAnbG9hZCcsICdzY3JvbGwnLCAndG9nZ2xlJ10uY29uY2F0KG1lZGlhRXZlbnRUeXBlcykpO1xuXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSB7XG4gIHZhciB0eXBlID0gZXZlbnQudHlwZSB8fCAndW5rbm93bi1ldmVudCc7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0O1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2tBbmRDYXRjaEZpcnN0RXJyb3IodHlwZSwgbGlzdGVuZXIsIHVuZGVmaW5lZCwgZXZlbnQpO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0Rpc3BhdGNoUXVldWVJdGVtc0luT3JkZXIoZXZlbnQsIGRpc3BhdGNoTGlzdGVuZXJzLCBpbkNhcHR1cmVQaGFzZSkge1xuICB2YXIgcHJldmlvdXNJbnN0YW5jZTtcblxuICBpZiAoaW5DYXB0dXJlUGhhc2UpIHtcbiAgICBmb3IgKHZhciBpID0gZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBfZGlzcGF0Y2hMaXN0ZW5lcnMkaSA9IGRpc3BhdGNoTGlzdGVuZXJzW2ldLFxuICAgICAgICAgIGluc3RhbmNlID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuaW5zdGFuY2UsXG4gICAgICAgICAgY3VycmVudFRhcmdldCA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgbGlzdGVuZXIgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5saXN0ZW5lcjtcblxuICAgICAgaWYgKGluc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KTtcbiAgICAgIHByZXZpb3VzSW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9kaXNwYXRjaExpc3RlbmVycyRfaSA9IGRpc3BhdGNoTGlzdGVuZXJzW19pXSxcbiAgICAgICAgICBfaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kuaW5zdGFuY2UsXG4gICAgICAgICAgX2N1cnJlbnRUYXJnZXQgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kuY3VycmVudFRhcmdldCxcbiAgICAgICAgICBfbGlzdGVuZXIgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kubGlzdGVuZXI7XG5cbiAgICAgIGlmIChfaW5zdGFuY2UgIT09IHByZXZpb3VzSW5zdGFuY2UgJiYgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgX2xpc3RlbmVyLCBfY3VycmVudFRhcmdldCk7XG4gICAgICBwcmV2aW91c0luc3RhbmNlID0gX2luc3RhbmNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCBldmVudFN5c3RlbUZsYWdzKSB7XG4gIHZhciBpbkNhcHR1cmVQaGFzZSA9IChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSkgIT09IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaFF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIF9kaXNwYXRjaFF1ZXVlJGkgPSBkaXNwYXRjaFF1ZXVlW2ldLFxuICAgICAgICBldmVudCA9IF9kaXNwYXRjaFF1ZXVlJGkuZXZlbnQsXG4gICAgICAgIGxpc3RlbmVycyA9IF9kaXNwYXRjaFF1ZXVlJGkubGlzdGVuZXJzO1xuICAgIHByb2Nlc3NEaXNwYXRjaFF1ZXVlSXRlbXNJbk9yZGVyKGV2ZW50LCBsaXN0ZW5lcnMsIGluQ2FwdHVyZVBoYXNlKTsgLy8gIGV2ZW50IHN5c3RlbSBkb2Vzbid0IHVzZSBwb29saW5nLlxuICB9IC8vIFRoaXMgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcmV0aHJvdyBpZiBhbnkgb2YgdGhlIGV2ZW50IGhhbmRsZXJzIHRocmV3LlxuXG5cbiAgcmV0aHJvd0NhdWdodEVycm9yKCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRzRm9yUGx1Z2lucyhkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIG5hdGl2ZUV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpO1xuICB2YXIgZGlzcGF0Y2hRdWV1ZSA9IFtdO1xuICBleHRyYWN0RXZlbnRzJDUoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCBldmVudFN5c3RlbUZsYWdzKTtcbn1cblxuZnVuY3Rpb24gbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEVsZW1lbnQpIHtcbiAgdmFyIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIgPSBmYWxzZTtcbiAgdmFyIGxpc3RlbmVyU2V0ID0gZ2V0RXZlbnRMaXN0ZW5lclNldCh0YXJnZXRFbGVtZW50KTtcbiAgdmFyIGxpc3RlbmVyU2V0S2V5ID0gZ2V0TGlzdGVuZXJTZXRLZXkoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcblxuICBpZiAoIWxpc3RlbmVyU2V0LmhhcyhsaXN0ZW5lclNldEtleSkpIHtcbiAgICBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXRFbGVtZW50LCBkb21FdmVudE5hbWUsIElTX05PTl9ERUxFR0FURUQsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpO1xuICAgIGxpc3RlbmVyU2V0LmFkZChsaXN0ZW5lclNldEtleSk7XG4gIH1cbn1cbnZhciBsaXN0ZW5pbmdNYXJrZXIgPSAnX3JlYWN0TGlzdGVuaW5nJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xuZnVuY3Rpb24gbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChyb290Q29udGFpbmVyRWxlbWVudFtsaXN0ZW5pbmdNYXJrZXJdKSB7XG4gICAgICAvLyBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IGRvbid0IGl0ZXJhdGUgdGhyb3VnaCBldmVudHNcbiAgICAgIC8vIGZvciB0aGUgc2FtZSBwb3J0YWwgY29udGFpbmVyIG9yIHJvb3Qgbm9kZSBtb3JlIHRoYW4gb25jZS5cbiAgICAgIC8vIFRPRE86IG9uY2Ugd2UgcmVtb3ZlIHRoZSBmbGFnLCB3ZSBtYXkgYmUgYWJsZSB0byBhbHNvXG4gICAgICAvLyByZW1vdmUgc29tZSBvZiB0aGUgYm9va2tlZXBpbmcgbWFwcyB1c2VkIGZvciBsYXppbmVzcy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByb290Q29udGFpbmVyRWxlbWVudFtsaXN0ZW5pbmdNYXJrZXJdID0gdHJ1ZTtcbiAgICBhbGxOYXRpdmVFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZG9tRXZlbnROYW1lKSB7XG4gICAgICBpZiAoIW5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSkge1xuICAgICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgZmFsc2UsIHJvb3RDb250YWluZXJFbGVtZW50LCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIHRydWUsIHJvb3RDb250YWluZXJFbGVtZW50LCBudWxsKTtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIsIHJvb3RDb250YWluZXJFbGVtZW50LCB0YXJnZXRFbGVtZW50KSB7XG4gIHZhciBldmVudFN5c3RlbUZsYWdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiAwO1xuICB2YXIgdGFyZ2V0ID0gcm9vdENvbnRhaW5lckVsZW1lbnQ7IC8vIHNlbGVjdGlvbmNoYW5nZSBuZWVkcyB0byBiZSBhdHRhY2hlZCB0byB0aGUgZG9jdW1lbnRcbiAgLy8gb3RoZXJ3aXNlIGl0IHdvbid0IGNhcHR1cmUgaW5jb21pbmcgZXZlbnRzIHRoYXQgYXJlIG9ubHlcbiAgLy8gdHJpZ2dlcmVkIG9uIHRoZSBkb2N1bWVudCBkaXJlY3RseS5cblxuICBpZiAoZG9tRXZlbnROYW1lID09PSAnc2VsZWN0aW9uY2hhbmdlJyAmJiByb290Q29udGFpbmVyRWxlbWVudC5ub2RlVHlwZSAhPT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHRhcmdldCA9IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gIH0gLy8gSWYgdGhlIGV2ZW50IGNhbiBiZSBkZWxlZ2F0ZWQgKG9yIGlzIGNhcHR1cmUgcGhhc2UpLCB3ZSBjYW5cbiAgLy8gcmVnaXN0ZXIgaXQgdG8gdGhlIHJvb3QgY29udGFpbmVyLiBPdGhlcndpc2UsIHdlIHNob3VsZFxuICAvLyByZWdpc3RlciB0aGUgZXZlbnQgdG8gdGhlIHRhcmdldCBlbGVtZW50IGFuZCBtYXJrIGl0IGFzXG4gIC8vIGEgbm9uLWRlbGVnYXRlZCBldmVudC5cblxuXG4gIGlmICh0YXJnZXRFbGVtZW50ICE9PSBudWxsICYmICFpc0NhcHR1cmVQaGFzZUxpc3RlbmVyICYmIG5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSkge1xuICAgIC8vIEZvciBhbGwgbm9uLWRlbGVnYXRlZCBldmVudHMsIGFwYXJ0IGZyb20gc2Nyb2xsLCB3ZSBhdHRhY2hcbiAgICAvLyB0aGVpciBldmVudCBsaXN0ZW5lcnMgdG8gdGhlIHJlc3BlY3RpdmUgZWxlbWVudHMgdGhhdCB0aGVpclxuICAgIC8vIGV2ZW50cyBmaXJlIG9uLiBUaGF0IG1lYW5zIHdlIGNhbiBza2lwIHRoaXMgc3RlcCwgYXMgZXZlbnRcbiAgICAvLyBsaXN0ZW5lciBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHByZXZpb3VzbHkuIEhvd2V2ZXIsIHdlXG4gICAgLy8gc3BlY2lhbCBjYXNlIHRoZSBzY3JvbGwgZXZlbnQgYmVjYXVzZSB0aGUgcmVhbGl0eSBpcyB0aGF0IGFueVxuICAgIC8vIGVsZW1lbnQgY2FuIHNjcm9sbC5cbiAgICAvLyBUT0RPOiBpZGVhbGx5LCB3ZSdkIGV2ZW50dWFsbHkgYXBwbHkgdGhlIHNhbWUgbG9naWMgdG8gYWxsXG4gICAgLy8gZXZlbnRzIGZyb20gdGhlIG5vbkRlbGVnYXRlZEV2ZW50cyBsaXN0LiBUaGVuIHdlIGNhbiByZW1vdmVcbiAgICAvLyB0aGlzIHNwZWNpYWwgY2FzZSBhbmQgdXNlIHRoZSBzYW1lIGxvZ2ljIGZvciBhbGwgZXZlbnRzLlxuICAgIGlmIChkb21FdmVudE5hbWUgIT09ICdzY3JvbGwnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnRTeXN0ZW1GbGFncyB8PSBJU19OT05fREVMRUdBVEVEO1xuICAgIHRhcmdldCA9IHRhcmdldEVsZW1lbnQ7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJTZXQgPSBnZXRFdmVudExpc3RlbmVyU2V0KHRhcmdldCk7XG4gIHZhciBsaXN0ZW5lclNldEtleSA9IGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7IC8vIElmIHRoZSBsaXN0ZW5lciBlbnRyeSBpcyBlbXB0eSBvciB3ZSBzaG91bGQgdXBncmFkZSwgdGhlblxuICAvLyB3ZSBuZWVkIHRvIHRyYXAgYW4gZXZlbnQgbGlzdGVuZXIgb250byB0aGUgdGFyZ2V0LlxuXG4gIGlmICghbGlzdGVuZXJTZXQuaGFzKGxpc3RlbmVyU2V0S2V5KSkge1xuICAgIGlmIChpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKSB7XG4gICAgICBldmVudFN5c3RlbUZsYWdzIHw9IElTX0NBUFRVUkVfUEhBU0U7XG4gICAgfVxuXG4gICAgYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0LCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpO1xuICAgIGxpc3RlbmVyU2V0LmFkZChsaXN0ZW5lclNldEtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIsIGlzRGVmZXJyZWRMaXN0ZW5lckZvckxlZ2FjeUZCU3VwcG9ydCkge1xuICB2YXIgbGlzdGVuZXIgPSBjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcldpdGhQcmlvcml0eSh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncyk7IC8vIElmIHBhc3NpdmUgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZW4gdGhlIGV2ZW50IHdpbGwgYmVcbiAgLy8gYWN0aXZlIGFuZCBub3QgcGFzc2l2ZS5cblxuICB2YXIgaXNQYXNzaXZlTGlzdGVuZXIgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkKSB7XG4gICAgLy8gQnJvd3NlcnMgaW50cm9kdWNlZCBhbiBpbnRlcnZlbnRpb24sIG1ha2luZyB0aGVzZSBldmVudHNcbiAgICAvLyBwYXNzaXZlIGJ5IGRlZmF1bHQgb24gZG9jdW1lbnQuIFJlYWN0IGRvZXNuJ3QgYmluZCB0aGVtXG4gICAgLy8gdG8gZG9jdW1lbnQgYW55bW9yZSwgYnV0IGNoYW5naW5nIHRoaXMgbm93IHdvdWxkIHVuZG9cbiAgICAvLyB0aGUgcGVyZm9ybWFuY2Ugd2lucyBmcm9tIHRoZSBjaGFuZ2UuIFNvIHdlIGVtdWxhdGVcbiAgICAvLyB0aGUgZXhpc3RpbmcgYmVoYXZpb3IgbWFudWFsbHkgb24gdGhlIHJvb3RzIG5vdy5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5NjUxXG4gICAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3RvdWNoc3RhcnQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3RvdWNobW92ZScgfHwgZG9tRXZlbnROYW1lID09PSAnd2hlZWwnKSB7XG4gICAgICBpc1Bhc3NpdmVMaXN0ZW5lciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdGFyZ2V0Q29udGFpbmVyID0gIHRhcmdldENvbnRhaW5lcjtcbiAgdmFyIHVuc3Vic2NyaWJlTGlzdGVuZXI7IC8vIFdoZW4gbGVnYWN5RkJTdXBwb3J0IGlzIGVuYWJsZWQsIGl0J3MgZm9yIHdoZW4gd2VcblxuXG4gIGlmIChpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKSB7XG4gICAgaWYgKGlzUGFzc2l2ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIsIGlzUGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChpc1Bhc3NpdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIsIGlzUGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50QnViYmxlTGlzdGVuZXIodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoZ3JhbmRDb250YWluZXIsIHRhcmdldENvbnRhaW5lcikge1xuICByZXR1cm4gZ3JhbmRDb250YWluZXIgPT09IHRhcmdldENvbnRhaW5lciB8fCBncmFuZENvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFICYmIGdyYW5kQ29udGFpbmVyLnBhcmVudE5vZGUgPT09IHRhcmdldENvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgYW5jZXN0b3JJbnN0ID0gdGFyZ2V0SW5zdDtcblxuICBpZiAoKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19FVkVOVF9IQU5ETEVfTk9OX01BTkFHRURfTk9ERSkgPT09IDAgJiYgKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19OT05fREVMRUdBVEVEKSA9PT0gMCkge1xuICAgIHZhciB0YXJnZXRDb250YWluZXJOb2RlID0gdGFyZ2V0Q29udGFpbmVyOyAvLyBJZiB3ZSBhcmUgdXNpbmcgdGhlIGxlZ2FjeSBGQiBzdXBwb3J0IGZsYWcsIHdlXG5cbiAgICBpZiAodGFyZ2V0SW5zdCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhlIGJlbG93IGxvZ2ljIGF0dGVtcHRzIHRvIHdvcmsgb3V0IGlmIHdlIG5lZWQgdG8gY2hhbmdlXG4gICAgICAvLyB0aGUgdGFyZ2V0IGZpYmVyIHRvIGEgZGlmZmVyZW50IGFuY2VzdG9yLiBXZSBoYWQgc2ltaWxhciBsb2dpY1xuICAgICAgLy8gaW4gdGhlIGxlZ2FjeSBldmVudCBzeXN0ZW0sIGV4Y2VwdCB0aGUgYmlnIGRpZmZlcmVuY2UgYmV0d2VlblxuICAgICAgLy8gc3lzdGVtcyBpcyB0aGF0IHRoZSBtb2Rlcm4gZXZlbnQgc3lzdGVtIG5vdyBoYXMgYW4gZXZlbnQgbGlzdGVuZXJcbiAgICAgIC8vIGF0dGFjaGVkIHRvIGVhY2ggUmVhY3QgUm9vdCBhbmQgUmVhY3QgUG9ydGFsIFJvb3QuIFRvZ2V0aGVyLFxuICAgICAgLy8gdGhlIERPTSBub2RlcyByZXByZXNlbnRpbmcgdGhlc2Ugcm9vdHMgYXJlIHRoZSBcInJvb3RDb250YWluZXJcIi5cbiAgICAgIC8vIFRvIGZpZ3VyZSBvdXQgd2hpY2ggYW5jZXN0b3IgaW5zdGFuY2Ugd2Ugc2hvdWxkIHVzZSwgd2UgdHJhdmVyc2VcbiAgICAgIC8vIHVwIHRoZSBmaWJlciB0cmVlIGZyb20gdGhlIHRhcmdldCBpbnN0YW5jZSBhbmQgYXR0ZW1wdCB0byBmaW5kXG4gICAgICAvLyByb290IGJvdW5kYXJpZXMgdGhhdCBtYXRjaCB0aGF0IG9mIG91ciBjdXJyZW50IFwicm9vdENvbnRhaW5lclwiLlxuICAgICAgLy8gSWYgd2UgZmluZCB0aGF0IFwicm9vdENvbnRhaW5lclwiLCB3ZSBmaW5kIHRoZSBwYXJlbnQgZmliZXJcbiAgICAgIC8vIHN1Yi10cmVlIGZvciB0aGF0IHJvb3QgYW5kIG1ha2UgdGhhdCBvdXIgYW5jZXN0b3IgaW5zdGFuY2UuXG4gICAgICB2YXIgbm9kZSA9IHRhcmdldEluc3Q7XG5cbiAgICAgIG1haW5Mb29wOiB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBub2RlVGFnID0gbm9kZS50YWc7XG5cbiAgICAgICAgaWYgKG5vZGVUYWcgPT09IEhvc3RSb290IHx8IG5vZGVUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICB2YXIgY29udGFpbmVyID0gbm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgIGlmIChpc01hdGNoaW5nUm9vdENvbnRhaW5lcihjb250YWluZXIsIHRhcmdldENvbnRhaW5lck5vZGUpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobm9kZVRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgICAgLy8gVGhlIHRhcmdldCBpcyBhIHBvcnRhbCwgYnV0IGl0J3Mgbm90IHRoZSByb290Q29udGFpbmVyIHdlJ3JlIGxvb2tpbmcgZm9yLlxuICAgICAgICAgICAgLy8gTm9ybWFsbHkgcG9ydGFscyBoYW5kbGUgdGhlaXIgb3duIGV2ZW50cyBhbGwgdGhlIHdheSBkb3duIHRvIHRoZSByb290LlxuICAgICAgICAgICAgLy8gU28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gc3RvcCBub3cuIEhvd2V2ZXIsIHdlIGRvbid0IGtub3cgaWYgdGhpcyBwb3J0YWxcbiAgICAgICAgICAgIC8vIHdhcyBwYXJ0IG9mICpvdXIqIHJvb3QuXG4gICAgICAgICAgICB2YXIgZ3JhbmROb2RlID0gbm9kZS5yZXR1cm47XG5cbiAgICAgICAgICAgIHdoaWxlIChncmFuZE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFyIGdyYW5kVGFnID0gZ3JhbmROb2RlLnRhZztcblxuICAgICAgICAgICAgICBpZiAoZ3JhbmRUYWcgPT09IEhvc3RSb290IHx8IGdyYW5kVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGdyYW5kQ29udGFpbmVyID0gZ3JhbmROb2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGdyYW5kQ29udGFpbmVyLCB0YXJnZXRDb250YWluZXJOb2RlKSkge1xuICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcm9vdENvbnRhaW5lciB3ZSdyZSBsb29raW5nIGZvciBhbmQgd2UgZm91bmQgaXQgYXNcbiAgICAgICAgICAgICAgICAgIC8vIGEgcGFyZW50IG9mIHRoZSBQb3J0YWwuIFRoYXQgbWVhbnMgd2UgY2FuIGlnbm9yZSBpdCBiZWNhdXNlIHRoZVxuICAgICAgICAgICAgICAgICAgLy8gUG9ydGFsIHdpbGwgYnViYmxlIHRocm91Z2ggdG8gdXMuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZ3JhbmROb2RlID0gZ3JhbmROb2RlLnJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIE5vdyB3ZSBuZWVkIHRvIGZpbmQgaXQncyBjb3JyZXNwb25kaW5nIGhvc3QgZmliZXIgaW4gdGhlIG90aGVyXG4gICAgICAgICAgLy8gdHJlZS4gVG8gZG8gdGhpcyB3ZSBjYW4gdXNlIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlLCBidXQgd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGZpYmVyIGlzIGEgaG9zdCBpbnN0YW5jZSwgb3RoZXJ3aXNlXG4gICAgICAgICAgLy8gd2UgbmVlZCB0byB0cmF2ZXJzZSB1cCB0aHJvdWdoIHRoZSBET00gdGlsbCB3ZSBmaW5kIHRoZSBjb3JyZWN0XG4gICAgICAgICAgLy8gbm9kZSB0aGF0IGlzIGZyb20gdGhlIG90aGVyIHRyZWUuXG5cblxuICAgICAgICAgIHdoaWxlIChjb250YWluZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBwYXJlbnROb2RlID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoY29udGFpbmVyKTtcblxuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcGFyZW50VGFnID0gcGFyZW50Tm9kZS50YWc7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRUYWcgPT09IEhvc3RDb21wb25lbnQgfHwgcGFyZW50VGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICAgICAgICBub2RlID0gYW5jZXN0b3JJbnN0ID0gcGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgY29udGludWUgbWFpbkxvb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBiYXRjaGVkRXZlbnRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudHNGb3JQbHVnaW5zKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIGFuY2VzdG9ySW5zdCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCkge1xuICByZXR1cm4ge1xuICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICBsaXN0ZW5lcjogbGlzdGVuZXIsXG4gICAgY3VycmVudFRhcmdldDogY3VycmVudFRhcmdldFxuICB9O1xufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlU2luZ2xlUGhhc2VMaXN0ZW5lcnModGFyZ2V0RmliZXIsIHJlYWN0TmFtZSwgbmF0aXZlRXZlbnRUeXBlLCBpbkNhcHR1cmVQaGFzZSwgYWNjdW11bGF0ZVRhcmdldE9ubHkpIHtcbiAgdmFyIGNhcHR1cmVOYW1lID0gcmVhY3ROYW1lICE9PSBudWxsID8gcmVhY3ROYW1lICsgJ0NhcHR1cmUnIDogbnVsbDtcbiAgdmFyIHJlYWN0RXZlbnROYW1lID0gaW5DYXB0dXJlUGhhc2UgPyBjYXB0dXJlTmFtZSA6IHJlYWN0TmFtZTtcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXRGaWJlcjtcbiAgdmFyIGxhc3RIb3N0Q29tcG9uZW50ID0gbnVsbDsgLy8gQWNjdW11bGF0ZSBhbGwgaW5zdGFuY2VzIGFuZCBsaXN0ZW5lcnMgdmlhIHRoZSB0YXJnZXQgLT4gcm9vdCBwYXRoLlxuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIHZhciBfaW5zdGFuY2UyID0gaW5zdGFuY2UsXG4gICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTIuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBfaW5zdGFuY2UyLnRhZzsgLy8gSGFuZGxlIGxpc3RlbmVycyB0aGF0IGFyZSBvbiBIb3N0Q29tcG9uZW50cyAoaS5lLiA8ZGl2PilcblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICBsYXN0SG9zdENvbXBvbmVudCA9IHN0YXRlTm9kZTsgLy8gY3JlYXRlRXZlbnRIYW5kbGUgbGlzdGVuZXJzXG5cblxuICAgICAgaWYgKHJlYWN0RXZlbnROYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWFjdEV2ZW50TmFtZSk7XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBsaXN0ZW5lciwgbGFzdEhvc3RDb21wb25lbnQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gSWYgd2UgYXJlIG9ubHkgYWNjdW11bGF0aW5nIGV2ZW50cyBmb3IgdGhlIHRhcmdldCwgdGhlbiB3ZSBkb24ndFxuICAgIC8vIGNvbnRpbnVlIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIHRoZSBSZWFjdCBmaWJlciB0cmVlIHRvIGZpbmQgb3RoZXJcbiAgICAvLyBsaXN0ZW5lcnMuXG5cblxuICAgIGlmIChhY2N1bXVsYXRlVGFyZ2V0T25seSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXJzO1xufSAvLyBXZSBzaG91bGQgb25seSB1c2UgdGhpcyBmdW5jdGlvbiBmb3I6XG4vLyAtIEJlZm9yZUlucHV0RXZlbnRQbHVnaW5cbi8vIC0gQ2hhbmdlRXZlbnRQbHVnaW5cbi8vIC0gU2VsZWN0RXZlbnRQbHVnaW5cbi8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBvbmx5IHByb2Nlc3MgdGhlc2UgcGx1Z2luc1xuLy8gaW4gdGhlIGJ1YmJsZSBwaGFzZSwgc28gd2UgbmVlZCB0byBhY2N1bXVsYXRlIHR3b1xuLy8gcGhhc2UgZXZlbnQgbGlzdGVuZXJzICh2aWEgZW11bGF0aW9uKS5cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEZpYmVyLCByZWFjdE5hbWUpIHtcbiAgdmFyIGNhcHR1cmVOYW1lID0gcmVhY3ROYW1lICsgJ0NhcHR1cmUnO1xuICB2YXIgbGlzdGVuZXJzID0gW107XG4gIHZhciBpbnN0YW5jZSA9IHRhcmdldEZpYmVyOyAvLyBBY2N1bXVsYXRlIGFsbCBpbnN0YW5jZXMgYW5kIGxpc3RlbmVycyB2aWEgdGhlIHRhcmdldCAtPiByb290IHBhdGguXG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgdmFyIF9pbnN0YW5jZTMgPSBpbnN0YW5jZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlMy5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTMudGFnOyAvLyBIYW5kbGUgbGlzdGVuZXJzIHRoYXQgYXJlIG9uIEhvc3RDb21wb25lbnRzIChpLmUuIDxkaXY+KVxuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBzdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gc3RhdGVOb2RlO1xuICAgICAgdmFyIGNhcHR1cmVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTmFtZSk7XG5cbiAgICAgIGlmIChjYXB0dXJlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGJ1YmJsZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlYWN0TmFtZSk7XG5cbiAgICAgIGlmIChidWJibGVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGJ1YmJsZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXJzO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJlbnQoaW5zdCkge1xuICBpZiAoaW5zdCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZG8ge1xuICAgIGluc3QgPSBpbnN0LnJldHVybjsgLy8gVE9ETzogSWYgdGhpcyBpcyBhIEhvc3RSb290IHdlIG1pZ2h0IHdhbnQgdG8gYmFpbCBvdXQuXG4gICAgLy8gVGhhdCBpcyBkZXBlbmRpbmcgb24gaWYgd2Ugd2FudCBuZXN0ZWQgc3VidHJlZXMgKGxheWVycykgdG8gYnViYmxlXG4gICAgLy8gZXZlbnRzIHRvIHRoZWlyIHBhcmVudC4gV2UgY291bGQgYWxzbyBnbyB0aHJvdWdoIHBhcmVudE5vZGUgb24gdGhlXG4gICAgLy8gaG9zdCBub2RlIGJ1dCB0aGF0IHdvdWxkbid0IHdvcmsgZm9yIFJlYWN0IE5hdGl2ZSBhbmQgZG9lc24ndCBsZXQgdXNcbiAgICAvLyBkbyB0aGUgcG9ydGFsIGZlYXR1cmUuXG4gIH0gd2hpbGUgKGluc3QgJiYgaW5zdC50YWcgIT09IEhvc3RDb21wb25lbnQpO1xuXG4gIGlmIChpbnN0KSB7XG4gICAgcmV0dXJuIGluc3Q7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogUmV0dXJuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIEEgYW5kIEIsIG9yIG51bGwgaWYgdGhleSBhcmUgaW5cbiAqIGRpZmZlcmVudCB0cmVlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldExvd2VzdENvbW1vbkFuY2VzdG9yKGluc3RBLCBpbnN0Qikge1xuICB2YXIgbm9kZUEgPSBpbnN0QTtcbiAgdmFyIG5vZGVCID0gaW5zdEI7XG4gIHZhciBkZXB0aEEgPSAwO1xuXG4gIGZvciAodmFyIHRlbXBBID0gbm9kZUE7IHRlbXBBOyB0ZW1wQSA9IGdldFBhcmVudCh0ZW1wQSkpIHtcbiAgICBkZXB0aEErKztcbiAgfVxuXG4gIHZhciBkZXB0aEIgPSAwO1xuXG4gIGZvciAodmFyIHRlbXBCID0gbm9kZUI7IHRlbXBCOyB0ZW1wQiA9IGdldFBhcmVudCh0ZW1wQikpIHtcbiAgICBkZXB0aEIrKztcbiAgfSAvLyBJZiBBIGlzIGRlZXBlciwgY3Jhd2wgdXAuXG5cblxuICB3aGlsZSAoZGVwdGhBIC0gZGVwdGhCID4gMCkge1xuICAgIG5vZGVBID0gZ2V0UGFyZW50KG5vZGVBKTtcbiAgICBkZXB0aEEtLTtcbiAgfSAvLyBJZiBCIGlzIGRlZXBlciwgY3Jhd2wgdXAuXG5cblxuICB3aGlsZSAoZGVwdGhCIC0gZGVwdGhBID4gMCkge1xuICAgIG5vZGVCID0gZ2V0UGFyZW50KG5vZGVCKTtcbiAgICBkZXB0aEItLTtcbiAgfSAvLyBXYWxrIGluIGxvY2tzdGVwIHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cblxuXG4gIHZhciBkZXB0aCA9IGRlcHRoQTtcblxuICB3aGlsZSAoZGVwdGgtLSkge1xuICAgIGlmIChub2RlQSA9PT0gbm9kZUIgfHwgbm9kZUIgIT09IG51bGwgJiYgbm9kZUEgPT09IG5vZGVCLmFsdGVybmF0ZSkge1xuICAgICAgcmV0dXJuIG5vZGVBO1xuICAgIH1cblxuICAgIG5vZGVBID0gZ2V0UGFyZW50KG5vZGVBKTtcbiAgICBub2RlQiA9IGdldFBhcmVudChub2RlQik7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBldmVudCwgdGFyZ2V0LCBjb21tb24sIGluQ2FwdHVyZVBoYXNlKSB7XG4gIHZhciByZWdpc3RyYXRpb25OYW1lID0gZXZlbnQuX3JlYWN0TmFtZTtcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXQ7XG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgaWYgKGluc3RhbmNlID09PSBjb21tb24pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBfaW5zdGFuY2U0ID0gaW5zdGFuY2UsXG4gICAgICAgIGFsdGVybmF0ZSA9IF9pbnN0YW5jZTQuYWx0ZXJuYXRlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2U0LnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gX2luc3RhbmNlNC50YWc7XG5cbiAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZSA9PT0gY29tbW9uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50ICYmIHN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnRUYXJnZXQgPSBzdGF0ZU5vZGU7XG5cbiAgICAgIGlmIChpbkNhcHR1cmVQaGFzZSkge1xuICAgICAgICB2YXIgY2FwdHVyZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIGlmIChjYXB0dXJlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGNhcHR1cmVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFpbkNhcHR1cmVQaGFzZSkge1xuICAgICAgICB2YXIgYnViYmxlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgaWYgKGJ1YmJsZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBidWJibGVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICB9XG59IC8vIFdlIHNob3VsZCBvbmx5IHVzZSB0aGlzIGZ1bmN0aW9uIGZvcjpcbi8vIC0gRW50ZXJMZWF2ZUV2ZW50UGx1Z2luXG4vLyBUaGlzIGlzIGJlY2F1c2Ugd2Ugb25seSBwcm9jZXNzIHRoaXMgcGx1Z2luXG4vLyBpbiB0aGUgYnViYmxlIHBoYXNlLCBzbyB3ZSBuZWVkIHRvIGFjY3VtdWxhdGUgdHdvXG4vLyBwaGFzZSBldmVudCBsaXN0ZW5lcnMuXG5cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVUd29QaGFzZUxpc3RlbmVycyhkaXNwYXRjaFF1ZXVlLCBsZWF2ZUV2ZW50LCBlbnRlckV2ZW50LCBmcm9tLCB0bykge1xuICB2YXIgY29tbW9uID0gZnJvbSAmJiB0byA/IGdldExvd2VzdENvbW1vbkFuY2VzdG9yKGZyb20sIHRvKSA6IG51bGw7XG5cbiAgaWYgKGZyb20gIT09IG51bGwpIHtcbiAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KGRpc3BhdGNoUXVldWUsIGxlYXZlRXZlbnQsIGZyb20sIGNvbW1vbiwgZmFsc2UpO1xuICB9XG5cbiAgaWYgKHRvICE9PSBudWxsICYmIGVudGVyRXZlbnQgIT09IG51bGwpIHtcbiAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KGRpc3BhdGNoUXVldWUsIGVudGVyRXZlbnQsIHRvLCBjb21tb24sIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGNhcHR1cmUpIHtcbiAgcmV0dXJuIGRvbUV2ZW50TmFtZSArIFwiX19cIiArIChjYXB0dXJlID8gJ2NhcHR1cmUnIDogJ2J1YmJsZScpO1xufVxuXG52YXIgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSBmYWxzZTtcbnZhciBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCA9ICdkYW5nZXJvdXNseVNldElubmVySFRNTCc7XG52YXIgU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HID0gJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyc7XG52YXIgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcgPSAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJztcbnZhciBBVVRPRk9DVVMgPSAnYXV0b0ZvY3VzJztcbnZhciBDSElMRFJFTiA9ICdjaGlsZHJlbic7XG52YXIgU1RZTEUgPSAnc3R5bGUnO1xudmFyIEhUTUwkMSA9ICdfX2h0bWwnO1xudmFyIEhUTUxfTkFNRVNQQUNFJDEgPSBOYW1lc3BhY2VzLmh0bWw7XG52YXIgd2FybmVkVW5rbm93blRhZ3M7XG52YXIgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nO1xudmFyIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQ7XG52YXIgd2FybkZvclRleHREaWZmZXJlbmNlO1xudmFyIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZTtcbnZhciB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzO1xudmFyIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcjtcbnZhciBjYW5EaWZmU3R5bGVGb3JIeWRyYXRpb25XYXJuaW5nO1xudmFyIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZTtcbnZhciBub3JtYWxpemVIVE1MO1xuXG57XG4gIHdhcm5lZFVua25vd25UYWdzID0ge1xuICAgIC8vIFRoZXJlIGFyZSB3b3JraW5nIHBvbHlmaWxscyBmb3IgPGRpYWxvZz4uIExldCBwZW9wbGUgdXNlIGl0LlxuICAgIGRpYWxvZzogdHJ1ZSxcbiAgICAvLyBFbGVjdHJvbiBzaGlwcyBhIGN1c3RvbSA8d2Vidmlldz4gdGFnIHRvIGRpc3BsYXkgZXh0ZXJuYWwgd2ViIGNvbnRlbnQgaW5cbiAgICAvLyBhbiBpc29sYXRlZCBmcmFtZSBhbmQgcHJvY2Vzcy5cbiAgICAvLyBUaGlzIHRhZyBpcyBub3QgcHJlc2VudCBpbiBub24gRWxlY3Ryb24gZW52aXJvbm1lbnRzIHN1Y2ggYXMgSlNEb20gd2hpY2hcbiAgICAvLyBpcyBvZnRlbiB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgIC8vIEBzZWUgaHR0cHM6Ly9lbGVjdHJvbmpzLm9yZy9kb2NzL2FwaS93ZWJ2aWV3LXRhZ1xuICAgIHdlYnZpZXc6IHRydWVcbiAgfTtcblxuICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50ID0gZnVuY3Rpb24gKHR5cGUsIHByb3BzKSB7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHR5cGUsIHByb3BzKTtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXMkMSh0eXBlLCBwcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDIodHlwZSwgcHJvcHMsIHtcbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXM6IHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMsXG4gICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzOiBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzXG4gICAgfSk7XG4gIH07IC8vIElFIDExIHBhcnNlcyAmIG5vcm1hbGl6ZXMgdGhlIHN0eWxlIGF0dHJpYnV0ZSBhcyBvcHBvc2VkIHRvIG90aGVyXG4gIC8vIGJyb3dzZXJzLiBJdCBhZGRzIHNwYWNlcyBhbmQgc29ydHMgdGhlIHByb3BlcnRpZXMgaW4gc29tZVxuICAvLyBub24tYWxwaGFiZXRpY2FsIG9yZGVyLiBIYW5kbGluZyB0aGF0IHdvdWxkIHJlcXVpcmUgc29ydGluZyBDU1NcbiAgLy8gcHJvcGVydGllcyBpbiB0aGUgY2xpZW50ICYgc2VydmVyIHZlcnNpb25zIG9yIGFwcGx5aW5nXG4gIC8vIGBleHBlY3RlZFN0eWxlYCB0byBhIHRlbXBvcmFyeSBET00gbm9kZSB0byByZWFkIGl0cyBgc3R5bGVgIGF0dHJpYnV0ZVxuICAvLyBub3JtYWxpemVkLiBTaW5jZSBpdCBvbmx5IGFmZmVjdHMgSUUsIHdlJ3JlIHNraXBwaW5nIHN0eWxlIHdhcm5pbmdzXG4gIC8vIGluIHRoYXQgYnJvd3NlciBjb21wbGV0ZWx5IGluIGZhdm9yIG9mIGRvaW5nIGFsbCB0aGF0IHdvcmsuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExODA3XG5cblxuICBjYW5EaWZmU3R5bGVGb3JIeWRyYXRpb25XYXJuaW5nID0gY2FuVXNlRE9NICYmICFkb2N1bWVudC5kb2N1bWVudE1vZGU7IC8vIEhUTUwgcGFyc2luZyBub3JtYWxpemVzIENSIGFuZCBDUkxGIHRvIExGLlxuICAvLyBJdCBhbHNvIGNhbiB0dXJuIFxcdTAwMDAgaW50byBcXHVGRkZEIGluc2lkZSBhdHRyaWJ1dGVzLlxuICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvc2luZ2xlLXBhZ2UuaHRtbCNwcmVwcm9jZXNzaW5nLXRoZS1pbnB1dC1zdHJlYW1cbiAgLy8gSWYgd2UgaGF2ZSBhIG1pc21hdGNoLCBpdCBtaWdodCBiZSBjYXVzZWQgYnkgdGhhdC5cbiAgLy8gV2Ugd2lsbCBzdGlsbCBwYXRjaCB1cCBpbiB0aGlzIGNhc2UgYnV0IG5vdCBmaXJlIHRoZSB3YXJuaW5nLlxuXG4gIHZhciBOT1JNQUxJWkVfTkVXTElORVNfUkVHRVggPSAvXFxyXFxuPy9nO1xuICB2YXIgTk9STUFMSVpFX05VTExfQU5EX1JFUExBQ0VNRU5UX1JFR0VYID0gL1xcdTAwMDB8XFx1RkZGRC9nO1xuXG4gIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChtYXJrdXApIHtcbiAgICB2YXIgbWFya3VwU3RyaW5nID0gdHlwZW9mIG1hcmt1cCA9PT0gJ3N0cmluZycgPyBtYXJrdXAgOiAnJyArIG1hcmt1cDtcbiAgICByZXR1cm4gbWFya3VwU3RyaW5nLnJlcGxhY2UoTk9STUFMSVpFX05FV0xJTkVTX1JFR0VYLCAnXFxuJykucmVwbGFjZShOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVgsICcnKTtcbiAgfTtcblxuICB3YXJuRm9yVGV4dERpZmZlcmVuY2UgPSBmdW5jdGlvbiAoc2VydmVyVGV4dCwgY2xpZW50VGV4dCkge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBub3JtYWxpemVkQ2xpZW50VGV4dCA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRUZXh0KTtcbiAgICB2YXIgbm9ybWFsaXplZFNlcnZlclRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVGV4dCk7XG5cbiAgICBpZiAobm9ybWFsaXplZFNlcnZlclRleHQgPT09IG5vcm1hbGl6ZWRDbGllbnRUZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1RleHQgY29udGVudCBkaWQgbm90IG1hdGNoLiBTZXJ2ZXI6IFwiJXNcIiBDbGllbnQ6IFwiJXNcIicsIG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0LCBub3JtYWxpemVkQ2xpZW50VGV4dCk7XG4gIH07XG5cbiAgd2FybkZvclByb3BEaWZmZXJlbmNlID0gZnVuY3Rpb24gKHByb3BOYW1lLCBzZXJ2ZXJWYWx1ZSwgY2xpZW50VmFsdWUpIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm9ybWFsaXplZENsaWVudFZhbHVlID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFZhbHVlKTtcbiAgICB2YXIgbm9ybWFsaXplZFNlcnZlclZhbHVlID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHNlcnZlclZhbHVlKTtcblxuICAgIGlmIChub3JtYWxpemVkU2VydmVyVmFsdWUgPT09IG5vcm1hbGl6ZWRDbGllbnRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdQcm9wIGAlc2AgZGlkIG5vdCBtYXRjaC4gU2VydmVyOiAlcyBDbGllbnQ6ICVzJywgcHJvcE5hbWUsIEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSksIEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZWRDbGllbnRWYWx1ZSkpO1xuICB9O1xuXG4gIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoYXR0cmlidXRlTmFtZXMpIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgYXR0cmlidXRlTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgbmFtZXMucHVzaChuYW1lKTtcbiAgICB9KTtcblxuICAgIGVycm9yKCdFeHRyYSBhdHRyaWJ1dGVzIGZyb20gdGhlIHNlcnZlcjogJXMnLCBuYW1lcyk7XG4gIH07XG5cbiAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKHJlZ2lzdHJhdGlvbk5hbWUsIGxpc3RlbmVyKSB7XG4gICAgaWYgKGxpc3RlbmVyID09PSBmYWxzZSkge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYGZhbHNlYC5cXG5cXG4nICsgJ0lmIHlvdSB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgb21pdCBpdCB3aXRoICVzPXtjb25kaXRpb24gJiYgdmFsdWV9LCAnICsgJ3Bhc3MgJXM9e2NvbmRpdGlvbiA/IHZhbHVlIDogdW5kZWZpbmVkfSBpbnN0ZWFkLicsIHJlZ2lzdHJhdGlvbk5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgYCVzYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBhIHZhbHVlIG9mIGAlc2AgdHlwZS4nLCByZWdpc3RyYXRpb25OYW1lLCB0eXBlb2YgbGlzdGVuZXIpO1xuICAgIH1cbiAgfTsgLy8gUGFyc2UgdGhlIEhUTUwgYW5kIHJlYWQgaXQgYmFjayB0byBub3JtYWxpemUgdGhlIEhUTUwgc3RyaW5nIHNvIHRoYXQgaXRcbiAgLy8gY2FuIGJlIHVzZWQgZm9yIGNvbXBhcmlzb24uXG5cblxuICBub3JtYWxpemVIVE1MID0gZnVuY3Rpb24gKHBhcmVudCwgaHRtbCkge1xuICAgIC8vIFdlIGNvdWxkIGhhdmUgY3JlYXRlZCBhIHNlcGFyYXRlIGRvY3VtZW50IGhlcmUgdG8gYXZvaWRcbiAgICAvLyByZS1pbml0aWFsaXppbmcgY3VzdG9tIGVsZW1lbnRzIGlmIHRoZXkgZXhpc3QuIEJ1dCB0aGlzIGJyZWFrc1xuICAgIC8vIGhvdyA8bm9zY3JpcHQ+IGlzIGJlaW5nIGhhbmRsZWQuIFNvIHdlIHVzZSB0aGUgc2FtZSBkb2N1bWVudC5cbiAgICAvLyBTZWUgdGhlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTExNTcuXG4gICAgdmFyIHRlc3RFbGVtZW50ID0gcGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSA/IHBhcmVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocGFyZW50LnRhZ05hbWUpIDogcGFyZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHBhcmVudC5uYW1lc3BhY2VVUkksIHBhcmVudC50YWdOYW1lKTtcbiAgICB0ZXN0RWxlbWVudC5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybiB0ZXN0RWxlbWVudC5pbm5lckhUTUw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCkge1xuICByZXR1cm4gcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyByb290Q29udGFpbmVyRWxlbWVudCA6IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5mdW5jdGlvbiB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChub2RlKSB7XG4gIC8vIE1vYmlsZSBTYWZhcmkgZG9lcyBub3QgZmlyZSBwcm9wZXJseSBidWJibGUgY2xpY2sgZXZlbnRzIG9uXG4gIC8vIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cywgd2hpY2ggbWVhbnMgZGVsZWdhdGVkIGNsaWNrIGxpc3RlbmVycyBkbyBub3RcbiAgLy8gZmlyZS4gVGhlIHdvcmthcm91bmQgZm9yIHRoaXMgYnVnIGludm9sdmVzIGF0dGFjaGluZyBhbiBlbXB0eSBjbGlja1xuICAvLyBsaXN0ZW5lciBvbiB0aGUgdGFyZ2V0IG5vZGUuXG4gIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxMC8wOS9jbGlja19ldmVudF9kZWwuaHRtbFxuICAvLyBKdXN0IHNldCBpdCB1c2luZyB0aGUgb25jbGljayBwcm9wZXJ0eSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gbWFuYWdlIGFueVxuICAvLyBib29ra2VlcGluZyBmb3IgaXQuIE5vdCBzdXJlIGlmIHdlIG5lZWQgdG8gY2xlYXIgaXQgd2hlbiB0aGUgbGlzdGVuZXIgaXNcbiAgLy8gcmVtb3ZlZC5cbiAgLy8gVE9ETzogT25seSBkbyB0aGlzIGZvciB0aGUgcmVsZXZhbnQgU2FmYXJpcyBtYXliZT9cbiAgbm9kZS5vbmNsaWNrID0gbm9vcDtcbn1cblxuZnVuY3Rpb24gc2V0SW5pdGlhbERPTVByb3BlcnRpZXModGFnLCBkb21FbGVtZW50LCByb290Q29udGFpbmVyRWxlbWVudCwgbmV4dFByb3BzLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBmb3IgKHZhciBwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKG5leHRQcm9wKSB7XG4gICAgICAgICAgLy8gRnJlZXplIHRoZSBuZXh0IHN0eWxlIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBhc3N1bWUgaXQgd29uJ3QgYmVcbiAgICAgICAgICAvLyBtdXRhdGVkLiBXZSBoYXZlIGFscmVhZHkgd2FybmVkIGZvciB0aGlzIGluIHRoZSBwYXN0LlxuICAgICAgICAgIE9iamVjdC5mcmVlemUobmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IC8vIFJlbGllcyBvbiBgdXBkYXRlU3R5bGVzQnlJRGAgbm90IG11dGF0aW5nIGBzdHlsZVVwZGF0ZXNgLlxuXG5cbiAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIG5leHRQcm9wKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgIHNldElubmVySFRNTChkb21FbGVtZW50LCBuZXh0SHRtbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gQXZvaWQgc2V0dGluZyBpbml0aWFsIHRleHRDb250ZW50IHdoZW4gdGhlIHRleHQgaXMgZW1wdHkuIEluIElFMTEgc2V0dGluZ1xuICAgICAgICAvLyB0ZXh0Q29udGVudCBvbiBhIDx0ZXh0YXJlYT4gd2lsbCBjYXVzZSB0aGUgcGxhY2Vob2xkZXIgdG8gbm90XG4gICAgICAgIC8vIHNob3cgd2l0aGluIHRoZSA8dGV4dGFyZWE+IHVudGlsIGl0IGhhcyBiZWVuIGZvY3VzZWQgYW5kIGJsdXJyZWQgYWdhaW4uXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjczMSNpc3N1ZWNvbW1lbnQtMjU0ODc0NTUzXG4gICAgICAgIHZhciBjYW5TZXRUZXh0Q29udGVudCA9IHRhZyAhPT0gJ3RleHRhcmVhJyB8fCBuZXh0UHJvcCAhPT0gJyc7XG5cbiAgICAgICAgaWYgKGNhblNldFRleHRDb250ZW50KSB7XG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycgKyBuZXh0UHJvcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gQVVUT0ZPQ1VTKSA7IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIGlmICggdHlwZW9mIG5leHRQcm9wICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wS2V5ID09PSAnb25TY3JvbGwnKSB7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnc2Nyb2xsJywgZG9tRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgIHNldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3AsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlRE9NUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB3YXNDdXN0b21Db21wb25lbnRUYWcsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIC8vIFRPRE86IEhhbmRsZSB3YXNDdXN0b21Db21wb25lbnRUYWdcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVQYXlsb2FkLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIHByb3BLZXkgPSB1cGRhdGVQYXlsb2FkW2ldO1xuICAgIHZhciBwcm9wVmFsdWUgPSB1cGRhdGVQYXlsb2FkW2kgKyAxXTtcblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgc2V0VmFsdWVGb3JTdHlsZXMoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICBzZXRJbm5lckhUTUwoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIHByb3BWYWx1ZSwgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCByb290Q29udGFpbmVyRWxlbWVudCwgcGFyZW50TmFtZXNwYWNlKSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZzsgLy8gV2UgY3JlYXRlIHRhZ3MgaW4gdGhlIG5hbWVzcGFjZSBvZiB0aGVpciBwYXJlbnQgY29udGFpbmVyLCBleGNlcHQgSFRNTFxuICAvLyB0YWdzIGdldCBubyBuYW1lc3BhY2UuXG5cbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpO1xuICB2YXIgZG9tRWxlbWVudDtcbiAgdmFyIG5hbWVzcGFjZVVSSSA9IHBhcmVudE5hbWVzcGFjZTtcblxuICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgbmFtZXNwYWNlVVJJID0gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpO1xuICB9XG5cbiAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgIHtcbiAgICAgIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpOyAvLyBTaG91bGQgdGhpcyBjaGVjayBiZSBnYXRlZCBieSBwYXJlbnQgbmFtZXNwYWNlPyBOb3Qgc3VyZSB3ZSB3YW50IHRvXG4gICAgICAvLyBhbGxvdyA8U1ZHPiBvciA8bUFUSD4uXG5cbiAgICAgIGlmICghaXNDdXN0b21Db21wb25lbnRUYWcgJiYgdHlwZSAhPT0gdHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGVycm9yKCc8JXMgLz4gaXMgdXNpbmcgaW5jb3JyZWN0IGNhc2luZy4gJyArICdVc2UgUGFzY2FsQ2FzZSBmb3IgUmVhY3QgY29tcG9uZW50cywgJyArICdvciBsb3dlcmNhc2UgZm9yIEhUTUwgZWxlbWVudHMuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdzY3JpcHQnKSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIHNjcmlwdCB2aWEgLmlubmVySFRNTCBzbyBpdHMgXCJwYXJzZXItaW5zZXJ0ZWRcIiBmbGFnIGlzXG4gICAgICAvLyBzZXQgdG8gdHJ1ZSBhbmQgaXQgZG9lcyBub3QgZXhlY3V0ZVxuICAgICAgdmFyIGRpdiA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgIGRpdi5pbm5lckhUTUwgPSAnPHNjcmlwdD48JyArICcvc2NyaXB0Pic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVlZCB0byB5aWVsZCBhIHNjcmlwdCBlbGVtZW50LlxuXG4gICAgICB2YXIgZmlyc3RDaGlsZCA9IGRpdi5maXJzdENoaWxkO1xuICAgICAgZG9tRWxlbWVudCA9IGRpdi5yZW1vdmVDaGlsZChmaXJzdENoaWxkKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9wcy5pcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vICRGbG93SXNzdWUgYGNyZWF0ZUVsZW1lbnRgIHNob3VsZCBiZSB1cGRhdGVkIGZvciBXZWIgQ29tcG9uZW50c1xuICAgICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlLCB7XG4gICAgICAgIGlzOiBwcm9wcy5pc1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlcGFyYXRlIGVsc2UgYnJhbmNoIGluc3RlYWQgb2YgdXNpbmcgYHByb3BzLmlzIHx8IHVuZGVmaW5lZGAgYWJvdmUgYmVjYXVzZSBvZiBhIEZpcmVmb3ggYnVnLlxuICAgICAgLy8gU2VlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNjg5NlxuICAgICAgLy8gYW5kIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjI0MFxuICAgICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTsgLy8gTm9ybWFsbHkgYXR0cmlidXRlcyBhcmUgYXNzaWduZWQgaW4gYHNldEluaXRpYWxET01Qcm9wZXJ0aWVzYCwgaG93ZXZlciB0aGUgYG11bHRpcGxlYCBhbmQgYHNpemVgXG4gICAgICAvLyBhdHRyaWJ1dGVzIG9uIGBzZWxlY3RgcyBuZWVkcyB0byBiZSBhZGRlZCBiZWZvcmUgYG9wdGlvbmBzIGFyZSBpbnNlcnRlZC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHM6XG4gICAgICAvLyAtIGEgYnVnIHdoZXJlIHRoZSBgc2VsZWN0YCBkb2VzIG5vdCBzY3JvbGwgdG8gdGhlIGNvcnJlY3Qgb3B0aW9uIGJlY2F1c2Ugc2luZ3VsYXJcbiAgICAgIC8vICBgc2VsZWN0YCBlbGVtZW50cyBhdXRvbWF0aWNhbGx5IHBpY2sgdGhlIGZpcnN0IGl0ZW0gIzEzMjIyXG4gICAgICAvLyAtIGEgYnVnIHdoZXJlIHRoZSBgc2VsZWN0YCBzZXQgdGhlIGZpcnN0IGl0ZW0gYXMgc2VsZWN0ZWQgZGVzcGl0ZSB0aGUgYHNpemVgIGF0dHJpYnV0ZSAjMTQyMzlcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzMjIyXG4gICAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDIzOVxuXG4gICAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBkb21FbGVtZW50O1xuXG4gICAgICAgIGlmIChwcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICAgIG5vZGUubXVsdGlwbGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3BzLnNpemUpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGEgc2l6ZSBncmVhdGVyIHRoYW4gMSBjYXVzZXMgYSBzZWxlY3QgdG8gYmVoYXZlIGxpa2UgYG11bHRpcGxlPXRydWVgLCB3aGVyZVxuICAgICAgICAgIC8vIGl0IGlzIHBvc3NpYmxlIHRoYXQgbm8gb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSB3aGVuIGEgc2VsZWN0IGluIFwic2luZ2xlIHNlbGVjdGlvbiBtb2RlXCIuXG4gICAgICAgICAgbm9kZS5zaXplID0gcHJvcHMuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJLCB0eXBlKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgICBpZiAoIWlzQ3VzdG9tQ29tcG9uZW50VGFnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb21FbGVtZW50KSA9PT0gJ1tvYmplY3QgSFRNTFVua25vd25FbGVtZW50XScgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRVbmtub3duVGFncywgdHlwZSkpIHtcbiAgICAgICAgd2FybmVkVW5rbm93blRhZ3NbdHlwZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdUaGUgdGFnIDwlcz4gaXMgdW5yZWNvZ25pemVkIGluIHRoaXMgYnJvd3Nlci4gJyArICdJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgUmVhY3QgY29tcG9uZW50LCBzdGFydCBpdHMgbmFtZSB3aXRoICcgKyAnYW4gdXBwZXJjYXNlIGxldHRlci4nLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZG9tRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHROb2RlKHRleHQsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHJldHVybiBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpLmNyZWF0ZVRleHROb2RlKHRleHQpO1xufVxuZnVuY3Rpb24gc2V0SW5pdGlhbFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCByYXdQcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCByYXdQcm9wcyk7XG5cbiAge1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCByYXdQcm9wcyk7XG4gIH0gLy8gVE9ETzogTWFrZSBzdXJlIHRoYXQgd2UgY2hlY2sgaXNNb3VudGVkIGJlZm9yZSBmaXJpbmcgYW55IG9mIHRoZXNlIGV2ZW50cy5cblxuXG4gIHZhciBwcm9wcztcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjYW5jZWwnLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Nsb3NlJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpZnJhbWUnOlxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgY2FzZSAnZW1iZWQnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGxvYWQgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd2aWRlbyc6XG4gICAgY2FzZSAnYXVkaW8nOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBhbGwgdGhlIG1lZGlhIGV2ZW50cy5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2ldLCBkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc291cmNlJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBlcnJvciBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbWcnOlxuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgZXJyb3IgYW5kIGxvYWQgZXZlbnRzLlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIHRvZ2dsZSBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3RvZ2dsZScsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHZhbGlkYXRlUHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHByb3BzKTtcbiAgc2V0SW5pdGlhbERPTVByb3BlcnRpZXModGFnLCBkb21FbGVtZW50LCByb290Q29udGFpbmVyRWxlbWVudCwgcHJvcHMsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIoZG9tRWxlbWVudCwgcmF3UHJvcHMsIGZhbHNlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlciQzKGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgcG9zdE1vdW50V3JhcHBlciQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMihkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodHlwZW9mIHByb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG59IC8vIENhbGN1bGF0ZSB0aGUgZGlmZiBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cblxuZnVuY3Rpb24gZGlmZlByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCBsYXN0UmF3UHJvcHMsIG5leHRSYXdQcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAge1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCBuZXh0UmF3UHJvcHMpO1xuICB9XG5cbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBudWxsO1xuICB2YXIgbGFzdFByb3BzO1xuICB2YXIgbmV4dFByb3BzO1xuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQzKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgbGFzdFByb3BzID0gbGFzdFJhd1Byb3BzO1xuICAgICAgbmV4dFByb3BzID0gbmV4dFJhd1Byb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIGxhc3RQcm9wcy5vbkNsaWNrICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBuZXh0UHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH1cblxuICBhc3NlcnRWYWxpZFByb3BzKHRhZywgbmV4dFByb3BzKTtcbiAgdmFyIHByb3BLZXk7XG4gIHZhciBzdHlsZU5hbWU7XG4gIHZhciBzdHlsZVVwZGF0ZXMgPSBudWxsO1xuXG4gIGZvciAocHJvcEtleSBpbiBsYXN0UHJvcHMpIHtcbiAgICBpZiAobmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8ICFsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgbGFzdFByb3BzW3Byb3BLZXldID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgdmFyIGxhc3RTdHlsZSA9IGxhc3RQcm9wc1twcm9wS2V5XTtcblxuICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFN0eWxlKSB7XG4gICAgICAgIGlmIChsYXN0U3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCB8fCBwcm9wS2V5ID09PSBDSElMRFJFTikgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gQVVUT0ZPQ1VTKSA7IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UuIElmIGFueSBsaXN0ZW5lciB1cGRhdGVzIHdlIG5lZWQgdG8gZW5zdXJlXG4gICAgICAvLyB0aGF0IHRoZSBcImN1cnJlbnRcIiBmaWJlciBwb2ludGVyIGdldHMgdXBkYXRlZCBzbyB3ZSBuZWVkIGEgY29tbWl0XG4gICAgICAvLyB0byB1cGRhdGUgdGhpcyBlbGVtZW50LlxuICAgICAgaWYgKCF1cGRhdGVQYXlsb2FkKSB7XG4gICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIGFsbCBvdGhlciBkZWxldGVkIHByb3BlcnRpZXMgd2UgYWRkIGl0IHRvIHRoZSBxdWV1ZS4gV2UgdXNlXG4gICAgICAvLyB0aGUgYWxsb3dlZCBwcm9wZXJ0eSBsaXN0IGluIHRoZSBjb21taXQgcGhhc2UgaW5zdGVhZC5cbiAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHByb3BLZXkgaW4gbmV4dFByb3BzKSB7XG4gICAgdmFyIG5leHRQcm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuICAgIHZhciBsYXN0UHJvcCA9IGxhc3RQcm9wcyAhPSBudWxsID8gbGFzdFByb3BzW3Byb3BLZXldIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgbmV4dFByb3AgPT09IGxhc3RQcm9wIHx8IG5leHRQcm9wID09IG51bGwgJiYgbGFzdFByb3AgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIC8vIEZyZWV6ZSB0aGUgbmV4dCBzdHlsZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gYXNzdW1lIGl0IHdvbid0IGJlXG4gICAgICAgICAgLy8gbXV0YXRlZC4gV2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhpcyBpbiB0aGUgcGFzdC5cbiAgICAgICAgICBPYmplY3QuZnJlZXplKG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobGFzdFByb3ApIHtcbiAgICAgICAgLy8gVW5zZXQgc3R5bGVzIG9uIGBsYXN0UHJvcGAgYnV0IG5vdCBvbiBgbmV4dFByb3BgLlxuICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBsYXN0UHJvcCkge1xuICAgICAgICAgIGlmIChsYXN0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmICghbmV4dFByb3AgfHwgIW5leHRQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpKSB7XG4gICAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVXBkYXRlIHN0eWxlcyB0aGF0IGNoYW5nZWQgc2luY2UgYGxhc3RQcm9wYC5cblxuXG4gICAgICAgIGZvciAoc3R5bGVOYW1lIGluIG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKG5leHRQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgJiYgbGFzdFByb3Bbc3R5bGVOYW1lXSAhPT0gbmV4dFByb3Bbc3R5bGVOYW1lXSkge1xuICAgICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gbmV4dFByb3Bbc3R5bGVOYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbGllcyBvbiBgdXBkYXRlU3R5bGVzQnlJRGAgbm90IG11dGF0aW5nIGBzdHlsZVVwZGF0ZXNgLlxuICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgIGlmICghdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQucHVzaChwcm9wS2V5LCBzdHlsZVVwZGF0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3R5bGVVcGRhdGVzID0gbmV4dFByb3A7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgPyBuZXh0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIGxhc3RIdG1sID0gbGFzdFByb3AgPyBsYXN0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICBpZiAobGFzdEh0bWwgIT09IG5leHRIdG1sKSB7XG4gICAgICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksIG5leHRIdG1sKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksICcnICsgbmV4dFByb3ApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIC8vIFdlIGVhZ2VybHkgbGlzdGVuIHRvIHRoaXMgZXZlbiB0aG91Z2ggd2UgaGF2ZW4ndCBjb21taXR0ZWQgeWV0LlxuICAgICAgICBpZiAoIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcEtleSA9PT0gJ29uU2Nyb2xsJykge1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3Njcm9sbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdXBkYXRlUGF5bG9hZCAmJiBsYXN0UHJvcCAhPT0gbmV4dFByb3ApIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZS4gSWYgYW55IGxpc3RlbmVyIHVwZGF0ZXMgd2UgbmVlZCB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCB0aGUgXCJjdXJyZW50XCIgcHJvcHMgcG9pbnRlciBnZXRzIHVwZGF0ZWQgc28gd2UgbmVlZCBhIGNvbW1pdFxuICAgICAgICAvLyB0byB1cGRhdGUgdGhpcyBlbGVtZW50LlxuICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdvYmplY3QnICYmIG5leHRQcm9wICE9PSBudWxsICYmIG5leHRQcm9wLiQkdHlwZW9mID09PSBSRUFDVF9PUEFRVUVfSURfVFlQRSkge1xuICAgICAgLy8gSWYgd2UgZW5jb3VudGVyIHVzZU9wYXF1ZVJlZmVyZW5jZSdzIG9wYXF1ZSBvYmplY3QsIHRoaXMgbWVhbnMgd2UgYXJlIGh5ZHJhdGluZy5cbiAgICAgIC8vIEluIHRoaXMgY2FzZSwgY2FsbCB0aGUgb3BhcXVlIG9iamVjdCdzIHRvU3RyaW5nIGZ1bmN0aW9uIHdoaWNoIGdlbmVyYXRlcyBhIG5ldyBjbGllbnRcbiAgICAgIC8vIElEIHNvIGNsaWVudCBhbmQgc2VydmVyIElEcyBtYXRjaCBhbmQgdGhyb3dzIHRvIHJlcmVuZGVyLlxuICAgICAgbmV4dFByb3AudG9TdHJpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIGFueSBvdGhlciBwcm9wZXJ0eSB3ZSBhbHdheXMgYWRkIGl0IHRvIHRoZSBxdWV1ZSBhbmQgdGhlbiB3ZVxuICAgICAgLy8gZmlsdGVyIGl0IG91dCB1c2luZyB0aGUgYWxsb3dlZCBwcm9wZXJ0eSBsaXN0IGR1cmluZyB0aGUgY29tbWl0LlxuICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVVcGRhdGVzKSB7XG4gICAge1xuICAgICAgdmFsaWRhdGVTaG9ydGhhbmRQcm9wZXJ0eUNvbGxpc2lvbkluRGV2KHN0eWxlVXBkYXRlcywgbmV4dFByb3BzW1NUWUxFXSk7XG4gICAgfVxuXG4gICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKFNUWUxFLCBzdHlsZVVwZGF0ZXMpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG59IC8vIEFwcGx5IHRoZSBkaWZmLlxuXG5mdW5jdGlvbiB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHRhZywgbGFzdFJhd1Byb3BzLCBuZXh0UmF3UHJvcHMpIHtcbiAgLy8gVXBkYXRlIGNoZWNrZWQgKmJlZm9yZSogbmFtZS5cbiAgLy8gSW4gdGhlIG1pZGRsZSBvZiBhbiB1cGRhdGUsIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgY2hlY2tlZC5cbiAgLy8gV2hlbiBhIGNoZWNrZWQgcmFkaW8gdHJpZXMgdG8gY2hhbmdlIG5hbWUsIGJyb3dzZXIgbWFrZXMgYW5vdGhlciByYWRpbydzIGNoZWNrZWQgZmFsc2UuXG4gIGlmICh0YWcgPT09ICdpbnB1dCcgJiYgbmV4dFJhd1Byb3BzLnR5cGUgPT09ICdyYWRpbycgJiYgbmV4dFJhd1Byb3BzLm5hbWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZUNoZWNrZWQoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgfVxuXG4gIHZhciB3YXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIGxhc3RSYXdQcm9wcyk7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgbmV4dFJhd1Byb3BzKTsgLy8gQXBwbHkgdGhlIGRpZmYuXG5cbiAgdXBkYXRlRE9NUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB3YXNDdXN0b21Db21wb25lbnRUYWcsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTsgLy8gVE9ETzogRW5zdXJlIHRoYXQgYW4gdXBkYXRlIGdldHMgc2NoZWR1bGVkIGlmIGFueSBvZiB0aGUgc3BlY2lhbCBwcm9wc1xuICAvLyBjaGFuZ2VkLlxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgLy8gVXBkYXRlIHRoZSB3cmFwcGVyIGFyb3VuZCBpbnB1dHMgKmFmdGVyKiB1cGRhdGluZyBwcm9wcy4gVGhpcyBoYXMgdG9cbiAgICAgIC8vIGhhcHBlbiBhZnRlciBgdXBkYXRlRE9NUHJvcGVydGllc2AuIE90aGVyd2lzZSBIVE1MNSBpbnB1dCB2YWxpZGF0aW9uc1xuICAgICAgLy8gcmFpc2Ugd2FybmluZ3MgYW5kIHByZXZlbnQgdGhlIG5ldyB2YWx1ZSBmcm9tIGJlaW5nIGFzc2lnbmVkLlxuICAgICAgdXBkYXRlV3JhcHBlcihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICB1cGRhdGVXcmFwcGVyJDEoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIC8vIDxzZWxlY3Q+IHZhbHVlIHVwZGF0ZSBuZWVkcyB0byBvY2N1ciBhZnRlciA8b3B0aW9uPiBjaGlsZHJlblxuICAgICAgLy8gcmVjb25jaWxpYXRpb25cbiAgICAgIHBvc3RVcGRhdGVXcmFwcGVyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZShwcm9wTmFtZSkge1xuICB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICghcG9zc2libGVTdGFuZGFyZE5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc3NpYmxlU3RhbmRhcmROYW1lc1tsb3dlckNhc2VkTmFtZV0gfHwgbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcmF3UHJvcHMsIHBhcmVudE5hbWVzcGFjZSwgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnO1xuICB2YXIgZXh0cmFBdHRyaWJ1dGVOYW1lcztcblxuICB7XG4gICAgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gcmF3UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkddID09PSB0cnVlO1xuICAgIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCByYXdQcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIHJhd1Byb3BzKTtcbiAgfSAvLyBUT0RPOiBNYWtlIHN1cmUgdGhhdCB3ZSBjaGVjayBpc01vdW50ZWQgYmVmb3JlIGZpcmluZyBhbnkgb2YgdGhlc2UgZXZlbnRzLlxuXG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2FuY2VsJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjbG9zZScsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpZnJhbWUnOlxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgY2FzZSAnZW1iZWQnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGxvYWQgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICBjYXNlICdhdWRpbyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGFsbCB0aGUgbWVkaWEgZXZlbnRzLlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWRpYUV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChtZWRpYUV2ZW50VHlwZXNbaV0sIGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgZXJyb3IgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbWcnOlxuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgZXJyb3IgYW5kIGxvYWQgZXZlbnRzLlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgdG9nZ2xlIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgndG9nZ2xlJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICB2YWxpZGF0ZVByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMShkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG4gIH1cblxuICBhc3NlcnRWYWxpZFByb3BzKHRhZywgcmF3UHJvcHMpO1xuXG4gIHtcbiAgICBleHRyYUF0dHJpYnV0ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgIHZhciBhdHRyaWJ1dGVzID0gZG9tRWxlbWVudC5hdHRyaWJ1dGVzO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZXNbX2ldLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgIC8vIEJ1aWx0LWluIFNTUiBhdHRyaWJ1dGUgaXMgYWxsb3dlZFxuICAgICAgICBjYXNlICdkYXRhLXJlYWN0cm9vdCc6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vIENvbnRyb2xsZWQgYXR0cmlidXRlcyBhcmUgbm90IHZhbGlkYXRlZFxuICAgICAgICAvLyBUT0RPOiBPbmx5IGlnbm9yZSB0aGVtIG9uIGNvbnRyb2xsZWQgdGFncy5cblxuICAgICAgICBjYXNlICd2YWx1ZSc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY2hlY2tlZCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc2VsZWN0ZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gSW50ZW50aW9uYWxseSB1c2UgdGhlIG9yaWdpbmFsIG5hbWUuXG4gICAgICAgICAgLy8gU2VlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTA2NzYuXG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5hZGQoYXR0cmlidXRlc1tfaV0ubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBudWxsO1xuXG4gIGZvciAodmFyIHByb3BLZXkgaW4gcmF3UHJvcHMpIHtcbiAgICBpZiAoIXJhd1Byb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFByb3AgPSByYXdQcm9wc1twcm9wS2V5XTtcblxuICAgIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgLy8gRm9yIHRleHQgY29udGVudCBjaGlsZHJlbiB3ZSBjb21wYXJlIGFnYWluc3QgdGV4dENvbnRlbnQuIFRoaXNcbiAgICAgIC8vIG1pZ2h0IG1hdGNoIGFkZGl0aW9uYWwgSFRNTCB0aGF0IGlzIGhpZGRlbiB3aGVuIHdlIHJlYWQgaXQgdXNpbmdcbiAgICAgIC8vIHRleHRDb250ZW50LiBFLmcuIFwiZm9vXCIgd2lsbCBtYXRjaCBcImY8c3Bhbj5vbzwvc3Bhbj5cIiBidXQgdGhhdCBzdGlsbFxuICAgICAgLy8gc2F0aXNmaWVzIG91ciByZXF1aXJlbWVudC4gT3VyIHJlcXVpcmVtZW50IGlzIG5vdCB0byBwcm9kdWNlIHBlcmZlY3RcbiAgICAgIC8vIEhUTUwgYW5kIGF0dHJpYnV0ZXMuIElkZWFsbHkgd2Ugc2hvdWxkIHByZXNlcnZlIHN0cnVjdHVyZSBidXQgaXQnc1xuICAgICAgLy8gb2sgbm90IHRvIGlmIHRoZSB2aXNpYmxlIGNvbnRlbnQgaXMgc3RpbGwgZW5vdWdoIHRvIGluZGljYXRlIHdoYXRcbiAgICAgIC8vIGV2ZW4gbGlzdGVuZXJzIHRoZXNlIG5vZGVzIG1pZ2h0IGJlIHdpcmVkIHVwIHRvLlxuICAgICAgLy8gVE9ETzogV2FybiBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gYSBzaW5nbGUgdGV4dE5vZGUgYXMgYSBjaGlsZC5cbiAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSB1c2UgZG9tRWxlbWVudC5maXJzdENoaWxkLm5vZGVWYWx1ZSB0byBjb21wYXJlP1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGRvbUVsZW1lbnQudGV4dENvbnRlbnQgIT09IG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKCAhc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAgICAgICB3YXJuRm9yVGV4dERpZmZlcmVuY2UoZG9tRWxlbWVudC50ZXh0Q29udGVudCwgbmV4dFByb3ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbQ0hJTERSRU4sIG5leHRQcm9wXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50LnRleHRDb250ZW50ICE9PSAnJyArIG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKCAhc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAgICAgICB3YXJuRm9yVGV4dERpZmZlcmVuY2UoZG9tRWxlbWVudC50ZXh0Q29udGVudCwgbmV4dFByb3ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbQ0hJTERSRU4sICcnICsgbmV4dFByb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICBpZiAoIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcEtleSA9PT0gJ29uU2Nyb2xsJykge1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3Njcm9sbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICggLy8gQ29udmluY2UgRmxvdyB3ZSd2ZSBjYWxjdWxhdGVkIGl0IChpdCdzIERFVi1vbmx5IGluIHRoaXMgbWV0aG9kLilcbiAgICB0eXBlb2YgaXNDdXN0b21Db21wb25lbnRUYWcgPT09ICdib29sZWFuJykge1xuICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgcHJvcGVydGllcyBjb3JyZXNwb25kIHRvIHRoZWlyIGV4cGVjdGVkIHZhbHVlcy5cbiAgICAgIHZhciBzZXJ2ZXJWYWx1ZSA9IHZvaWQgMDtcbiAgICAgIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8ocHJvcEtleSk7XG5cbiAgICAgIGlmIChzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HIHx8IC8vIENvbnRyb2xsZWQgYXR0cmlidXRlcyBhcmUgbm90IHZhbGlkYXRlZFxuICAgICAgLy8gVE9ETzogT25seSBpZ25vcmUgdGhlbSBvbiBjb250cm9sbGVkIHRhZ3MuXG4gICAgICBwcm9wS2V5ID09PSAndmFsdWUnIHx8IHByb3BLZXkgPT09ICdjaGVja2VkJyB8fCBwcm9wS2V5ID09PSAnc2VsZWN0ZWQnKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICAgIHZhciBzZXJ2ZXJIVE1MID0gZG9tRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciBleHBlY3RlZEhUTUwgPSBub3JtYWxpemVIVE1MKGRvbUVsZW1lbnQsIG5leHRIdG1sKTtcblxuICAgICAgICAgIGlmIChleHBlY3RlZEhUTUwgIT09IHNlcnZlckhUTUwpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJIVE1MLCBleHBlY3RlZEhUTUwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkpO1xuXG4gICAgICAgIGlmIChjYW5EaWZmU3R5bGVGb3JIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAgICAgdmFyIGV4cGVjdGVkU3R5bGUgPSBjcmVhdGVEYW5nZXJvdXNTdHJpbmdGb3JTdHlsZXMobmV4dFByb3ApO1xuICAgICAgICAgIHNlcnZlclZhbHVlID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cbiAgICAgICAgICBpZiAoZXhwZWN0ZWRTdHlsZSAhPT0gc2VydmVyVmFsdWUpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJWYWx1ZSwgZXhwZWN0ZWRTdHlsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgc2VydmVyVmFsdWUgPSBnZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCk7XG5cbiAgICAgICAgaWYgKG5leHRQcm9wICE9PSBzZXJ2ZXJWYWx1ZSkge1xuICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJWYWx1ZSwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzaG91bGRJZ25vcmVBdHRyaWJ1dGUocHJvcEtleSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykgJiYgIXNob3VsZFJlbW92ZUF0dHJpYnV0ZShwcm9wS2V5LCBuZXh0UHJvcCwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICAgICAgdmFyIGlzTWlzbWF0Y2hEdWVUb0JhZENhc2luZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCwgcHJvcGVydHlJbmZvKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgb3duTmFtZXNwYWNlID0gcGFyZW50TmFtZXNwYWNlO1xuXG4gICAgICAgICAgaWYgKG93bk5hbWVzcGFjZSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgICAgICAgICAgb3duTmFtZXNwYWNlID0gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHRhZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG93bk5hbWVzcGFjZSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IGdldFBvc3NpYmxlU3RhbmRhcmROYW1lKHByb3BLZXkpO1xuXG4gICAgICAgICAgICBpZiAoc3RhbmRhcmROYW1lICE9PSBudWxsICYmIHN0YW5kYXJkTmFtZSAhPT0gcHJvcEtleSkge1xuICAgICAgICAgICAgICAvLyBJZiBhbiBTVkcgcHJvcCBpcyBzdXBwbGllZCB3aXRoIGJhZCBjYXNpbmcsIGl0IHdpbGxcbiAgICAgICAgICAgICAgLy8gYmUgc3VjY2Vzc2Z1bGx5IHBhcnNlZCBmcm9tIEhUTUwsIGJ1dCB3aWxsIHByb2R1Y2UgYSBtaXNtYXRjaFxuICAgICAgICAgICAgICAvLyAoYW5kIHdvdWxkIGJlIGluY29ycmVjdGx5IHJlbmRlcmVkIG9uIHRoZSBjbGllbnQpLlxuICAgICAgICAgICAgICAvLyBIb3dldmVyLCB3ZSBhbHJlYWR5IHdhcm4gYWJvdXQgYmFkIGNhc2luZyBlbHNld2hlcmUuXG4gICAgICAgICAgICAgIC8vIFNvIHdlJ2xsIHNraXAgdGhlIG1pc2xlYWRpbmcgZXh0cmEgbWlzbWF0Y2ggd2FybmluZyBpbiB0aGlzIGNhc2UuXG4gICAgICAgICAgICAgIGlzTWlzbWF0Y2hEdWVUb0JhZENhc2luZyA9IHRydWU7IC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cblxuICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShzdGFuZGFyZE5hbWUpO1xuICAgICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG5cblxuICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2VydmVyVmFsdWUgPSBnZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dFByb3AgIT09IHNlcnZlclZhbHVlICYmICFpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcpIHtcbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgaWYgKGV4dHJhQXR0cmlidXRlTmFtZXMuc2l6ZSA+IDAgJiYgIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgd2FybkZvckV4dHJhQXR0cmlidXRlcyhleHRyYUF0dHJpYnV0ZU5hbWVzKTtcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIoZG9tRWxlbWVudCwgcmF3UHJvcHMsIHRydWUpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDMoZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIC8vIEZvciBpbnB1dCBhbmQgdGV4dGFyZWEgd2UgY3VycmVudCBhbHdheXMgc2V0IHRoZSB2YWx1ZSBwcm9wZXJ0eSBhdFxuICAgICAgLy8gcG9zdCBtb3VudCB0byBmb3JjZSBpdCB0byBkaXZlcmdlIGZyb20gYXR0cmlidXRlcy4gSG93ZXZlciwgZm9yXG4gICAgICAvLyBvcHRpb24gYW5kIHNlbGVjdCB3ZSBkb24ndCBxdWl0ZSBkbyB0aGUgc2FtZSB0aGluZyBhbmQgc2VsZWN0XG4gICAgICAvLyBpcyBub3QgcmVzaWxpZW50IHRvIHRoZSBET00gc3RhdGUgY2hhbmdpbmcgc28gd2UgZG9uJ3QgZG8gdGhhdCBoZXJlLlxuICAgICAgLy8gVE9ETzogQ29uc2lkZXIgbm90IGRvaW5nIHRoaXMgZm9yIGlucHV0IGFuZCB0ZXh0YXJlYS5cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh0eXBlb2YgcmF3UHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbn1cbmZ1bmN0aW9uIGRpZmZIeWRyYXRlZFRleHQodGV4dE5vZGUsIHRleHQpIHtcbiAgdmFyIGlzRGlmZmVyZW50ID0gdGV4dE5vZGUubm9kZVZhbHVlICE9PSB0ZXh0O1xuICByZXR1cm4gaXNEaWZmZXJlbnQ7XG59XG5mdW5jdGlvbiB3YXJuRm9yVW5tYXRjaGVkVGV4dCh0ZXh0Tm9kZSwgdGV4dCkge1xuICB7XG4gICAgd2FybkZvclRleHREaWZmZXJlbmNlKHRleHROb2RlLm5vZGVWYWx1ZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50Tm9kZSwgY2hpbGQpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdEaWQgbm90IGV4cGVjdCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgPCVzPiBpbiA8JXM+LicsIGNoaWxkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50Tm9kZSwgY2hpbGQpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdEaWQgbm90IGV4cGVjdCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIHRoZSB0ZXh0IG5vZGUgXCIlc1wiIGluIDwlcz4uJywgY2hpbGQubm9kZVZhbHVlLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50Tm9kZSwgdGFnLCBwcm9wcykge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0V4cGVjdGVkIHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSBtYXRjaGluZyA8JXM+IGluIDwlcz4uJywgdGFnLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50Tm9kZSwgdGV4dCkge1xuICB7XG4gICAgaWYgKHRleHQgPT09ICcnKSB7XG4gICAgICAvLyBXZSBleHBlY3QgdG8gaW5zZXJ0IGVtcHR5IHRleHQgbm9kZXMgc2luY2UgdGhleSdyZSBub3QgcmVwcmVzZW50ZWQgaW5cbiAgICAgIC8vIHRoZSBIVE1MLlxuICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgc3BlY2lhbCBjYXNlIGlmIHdlIGNhbiBqdXN0IGF2b2lkIGluc2VydGluZyBlbXB0eVxuICAgICAgLy8gdGV4dCBub2Rlcy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIHRleHQgbm9kZSBmb3IgXCIlc1wiIGluIDwlcz4uJywgdGV4dCwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQzKGRvbUVsZW1lbnQsIHRhZywgcHJvcHMpIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMihkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQxKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcbiAgfVxufVxuXG52YXIgdmFsaWRhdGVET01OZXN0aW5nID0gZnVuY3Rpb24gKCkge307XG5cbnZhciB1cGRhdGVkQW5jZXN0b3JJbmZvID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgLy8gVGhpcyB2YWxpZGF0aW9uIGNvZGUgd2FzIHdyaXR0ZW4gYmFzZWQgb24gdGhlIEhUTUw1IHBhcnNpbmcgc3BlYzpcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tc2NvcGVcbiAgLy9cbiAgLy8gTm90ZTogdGhpcyBkb2VzIG5vdCBjYXRjaCBhbGwgaW52YWxpZCBuZXN0aW5nLCBub3IgZG9lcyBpdCB0cnkgdG8gKGFzIGl0J3NcbiAgLy8gbm90IGNsZWFyIHdoYXQgcHJhY3RpY2FsIGJlbmVmaXQgZG9pbmcgc28gcHJvdmlkZXMpOyBpbnN0ZWFkLCB3ZSB3YXJuIG9ubHlcbiAgLy8gZm9yIGNhc2VzIHdoZXJlIHRoZSBwYXJzZXIgd2lsbCBnaXZlIGEgcGFyc2UgdHJlZSBkaWZmZXJpbmcgZnJvbSB3aGF0IFJlYWN0XG4gIC8vIGludGVuZGVkLiBGb3IgZXhhbXBsZSwgPGI+PGRpdj48L2Rpdj48L2I+IGlzIGludmFsaWQgYnV0IHdlIGRvbid0IHdhcm5cbiAgLy8gYmVjYXVzZSBpdCBzdGlsbCBwYXJzZXMgY29ycmVjdGx5OyB3ZSBkbyB3YXJuIGZvciBvdGhlciBjYXNlcyBsaWtlIG5lc3RlZFxuICAvLyA8cD4gdGFncyB3aGVyZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBpbXBsaWNpdGx5IGNsb3NlcyB0aGVcbiAgLy8gZmlyc3QsIGNhdXNpbmcgYSBjb25mdXNpbmcgbWVzcy5cbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjc3BlY2lhbFxuICB2YXIgc3BlY2lhbFRhZ3MgPSBbJ2FkZHJlc3MnLCAnYXBwbGV0JywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdiYXNlJywgJ2Jhc2Vmb250JywgJ2Jnc291bmQnLCAnYmxvY2txdW90ZScsICdib2R5JywgJ2JyJywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ2NlbnRlcicsICdjb2wnLCAnY29sZ3JvdXAnLCAnZGQnLCAnZGV0YWlscycsICdkaXInLCAnZGl2JywgJ2RsJywgJ2R0JywgJ2VtYmVkJywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmlndXJlJywgJ2Zvb3RlcicsICdmb3JtJywgJ2ZyYW1lJywgJ2ZyYW1lc2V0JywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWQnLCAnaGVhZGVyJywgJ2hncm91cCcsICdocicsICdodG1sJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaXNpbmRleCcsICdsaScsICdsaW5rJywgJ2xpc3RpbmcnLCAnbWFpbicsICdtYXJxdWVlJywgJ21lbnUnLCAnbWVudWl0ZW0nLCAnbWV0YScsICduYXYnLCAnbm9lbWJlZCcsICdub2ZyYW1lcycsICdub3NjcmlwdCcsICdvYmplY3QnLCAnb2wnLCAncCcsICdwYXJhbScsICdwbGFpbnRleHQnLCAncHJlJywgJ3NjcmlwdCcsICdzZWN0aW9uJywgJ3NlbGVjdCcsICdzb3VyY2UnLCAnc3R5bGUnLCAnc3VtbWFyeScsICd0YWJsZScsICd0Ym9keScsICd0ZCcsICd0ZW1wbGF0ZScsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcsICd0aXRsZScsICd0cicsICd0cmFjaycsICd1bCcsICd3YnInLCAneG1wJ107IC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLXNjb3BlXG5cbiAgdmFyIGluU2NvcGVUYWdzID0gWydhcHBsZXQnLCAnY2FwdGlvbicsICdodG1sJywgJ3RhYmxlJywgJ3RkJywgJ3RoJywgJ21hcnF1ZWUnLCAnb2JqZWN0JywgJ3RlbXBsYXRlJywgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaHRtbC1pbnRlZ3JhdGlvbi1wb2ludFxuICAvLyBUT0RPOiBEaXN0aW5ndWlzaCBieSBuYW1lc3BhY2UgaGVyZSAtLSBmb3IgPHRpdGxlPiwgaW5jbHVkaW5nIGl0IGhlcmVcbiAgLy8gZXJycyBvbiB0aGUgc2lkZSBvZiBmZXdlciB3YXJuaW5nc1xuICAnZm9yZWlnbk9iamVjdCcsICdkZXNjJywgJ3RpdGxlJ107IC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLWJ1dHRvbi1zY29wZVxuXG4gIHZhciBidXR0b25TY29wZVRhZ3MgPSBpblNjb3BlVGFncy5jb25jYXQoWydidXR0b24nXSk7IC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2dlbmVyYXRlLWltcGxpZWQtZW5kLXRhZ3NcblxuICB2YXIgaW1wbGllZEVuZFRhZ3MgPSBbJ2RkJywgJ2R0JywgJ2xpJywgJ29wdGlvbicsICdvcHRncm91cCcsICdwJywgJ3JwJywgJ3J0J107XG4gIHZhciBlbXB0eUFuY2VzdG9ySW5mbyA9IHtcbiAgICBjdXJyZW50OiBudWxsLFxuICAgIGZvcm1UYWc6IG51bGwsXG4gICAgYVRhZ0luU2NvcGU6IG51bGwsXG4gICAgYnV0dG9uVGFnSW5TY29wZTogbnVsbCxcbiAgICBub2JyVGFnSW5TY29wZTogbnVsbCxcbiAgICBwVGFnSW5CdXR0b25TY29wZTogbnVsbCxcbiAgICBsaXN0SXRlbVRhZ0F1dG9jbG9zaW5nOiBudWxsLFxuICAgIGRsSXRlbVRhZ0F1dG9jbG9zaW5nOiBudWxsXG4gIH07XG5cbiAgdXBkYXRlZEFuY2VzdG9ySW5mbyA9IGZ1bmN0aW9uIChvbGRJbmZvLCB0YWcpIHtcbiAgICB2YXIgYW5jZXN0b3JJbmZvID0gX2Fzc2lnbih7fSwgb2xkSW5mbyB8fCBlbXB0eUFuY2VzdG9ySW5mbyk7XG5cbiAgICB2YXIgaW5mbyA9IHtcbiAgICAgIHRhZzogdGFnXG4gICAgfTtcblxuICAgIGlmIChpblNjb3BlVGFncy5pbmRleE9mKHRhZykgIT09IC0xKSB7XG4gICAgICBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBudWxsO1xuICAgICAgYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGUgPSBudWxsO1xuICAgICAgYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoYnV0dG9uU2NvcGVUYWdzLmluZGV4T2YodGFnKSAhPT0gLTEpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZSA9IG51bGw7XG4gICAgfSAvLyBTZWUgcnVsZXMgZm9yICdsaScsICdkZCcsICdkdCcgc3RhcnQgdGFncyBpblxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHlcblxuXG4gICAgaWYgKHNwZWNpYWxUYWdzLmluZGV4T2YodGFnKSAhPT0gLTEgJiYgdGFnICE9PSAnYWRkcmVzcycgJiYgdGFnICE9PSAnZGl2JyAmJiB0YWcgIT09ICdwJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsO1xuICAgICAgYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nID0gbnVsbDtcbiAgICB9XG5cbiAgICBhbmNlc3RvckluZm8uY3VycmVudCA9IGluZm87XG5cbiAgICBpZiAodGFnID09PSAnZm9ybScpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5mb3JtVGFnID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnYScpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2J1dHRvbicpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnbm9icicpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ3AnKSB7XG4gICAgICBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdsaScpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnZGQnIHx8IHRhZyA9PT0gJ2R0Jykge1xuICAgICAgYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nID0gaW5mbztcbiAgICB9XG5cbiAgICByZXR1cm4gYW5jZXN0b3JJbmZvO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuXG5cbiAgdmFyIGlzVGFnVmFsaWRXaXRoUGFyZW50ID0gZnVuY3Rpb24gKHRhZywgcGFyZW50VGFnKSB7XG4gICAgLy8gRmlyc3QsIGxldCdzIGNoZWNrIGlmIHdlJ3JlIGluIGFuIHVudXN1YWwgcGFyc2luZyBtb2RlLi4uXG4gICAgc3dpdGNoIChwYXJlbnRUYWcpIHtcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnNlbGVjdFxuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnb3B0Z3JvdXAnIHx8IHRhZyA9PT0gJyN0ZXh0JztcblxuICAgICAgY2FzZSAnb3B0Z3JvdXAnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnb3B0aW9uJyB8fCB0YWcgPT09ICcjdGV4dCc7XG4gICAgICAvLyBTdHJpY3RseSBzcGVha2luZywgc2VlaW5nIGFuIDxvcHRpb24+IGRvZXNuJ3QgbWVhbiB3ZSdyZSBpbiBhIDxzZWxlY3Q+XG4gICAgICAvLyBidXRcblxuICAgICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJyN0ZXh0JztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRkXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5jYXB0aW9uXG4gICAgICAvLyBObyBzcGVjaWFsIGJlaGF2aW9yIHNpbmNlIHRoZXNlIHJ1bGVzIGZhbGwgYmFjayB0byBcImluIGJvZHlcIiBtb2RlIGZvclxuICAgICAgLy8gYWxsIGV4Y2VwdCBzcGVjaWFsIHRhYmxlIG5vZGVzIHdoaWNoIGNhdXNlIGJhZCBwYXJzaW5nIGJlaGF2aW9yIGFueXdheS5cbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRyXG5cbiAgICAgIGNhc2UgJ3RyJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ3RoJyB8fCB0YWcgPT09ICd0ZCcgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGJvZHlcblxuICAgICAgY2FzZSAndGJvZHknOlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAndHInIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNvbGdyb3VwXG5cbiAgICAgIGNhc2UgJ2NvbGdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2NvbCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGFibGVcblxuICAgICAgY2FzZSAndGFibGUnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnY2FwdGlvbicgfHwgdGFnID09PSAnY29sZ3JvdXAnIHx8IHRhZyA9PT0gJ3Rib2R5JyB8fCB0YWcgPT09ICd0Zm9vdCcgfHwgdGFnID09PSAndGhlYWQnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmhlYWRcblxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdiYXNlJyB8fCB0YWcgPT09ICdiYXNlZm9udCcgfHwgdGFnID09PSAnYmdzb3VuZCcgfHwgdGFnID09PSAnbGluaycgfHwgdGFnID09PSAnbWV0YScgfHwgdGFnID09PSAndGl0bGUnIHx8IHRhZyA9PT0gJ25vc2NyaXB0JyB8fCB0YWcgPT09ICdub2ZyYW1lcycgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VtYW50aWNzLmh0bWwjdGhlLWh0bWwtZWxlbWVudFxuXG4gICAgICBjYXNlICdodG1sJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2hlYWQnIHx8IHRhZyA9PT0gJ2JvZHknIHx8IHRhZyA9PT0gJ2ZyYW1lc2V0JztcblxuICAgICAgY2FzZSAnZnJhbWVzZXQnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnZnJhbWUnO1xuXG4gICAgICBjYXNlICcjZG9jdW1lbnQnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnaHRtbCc7XG4gICAgfSAvLyBQcm9iYWJseSBpbiB0aGUgXCJpbiBib2R5XCIgcGFyc2luZyBtb2RlLCBzbyB3ZSBvdXRsYXcgb25seSB0YWcgY29tYm9zXG4gICAgLy8gd2hlcmUgdGhlIHBhcnNpbmcgcnVsZXMgY2F1c2UgaW1wbGljaXQgb3BlbnMgb3IgY2xvc2VzIHRvIGJlIGFkZGVkLlxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHlcblxuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgJ2gxJzpcbiAgICAgIGNhc2UgJ2gyJzpcbiAgICAgIGNhc2UgJ2gzJzpcbiAgICAgIGNhc2UgJ2g0JzpcbiAgICAgIGNhc2UgJ2g1JzpcbiAgICAgIGNhc2UgJ2g2JzpcbiAgICAgICAgcmV0dXJuIHBhcmVudFRhZyAhPT0gJ2gxJyAmJiBwYXJlbnRUYWcgIT09ICdoMicgJiYgcGFyZW50VGFnICE9PSAnaDMnICYmIHBhcmVudFRhZyAhPT0gJ2g0JyAmJiBwYXJlbnRUYWcgIT09ICdoNScgJiYgcGFyZW50VGFnICE9PSAnaDYnO1xuXG4gICAgICBjYXNlICdycCc6XG4gICAgICBjYXNlICdydCc6XG4gICAgICAgIHJldHVybiBpbXBsaWVkRW5kVGFncy5pbmRleE9mKHBhcmVudFRhZykgPT09IC0xO1xuXG4gICAgICBjYXNlICdib2R5JzpcbiAgICAgIGNhc2UgJ2NhcHRpb24nOlxuICAgICAgY2FzZSAnY29sJzpcbiAgICAgIGNhc2UgJ2NvbGdyb3VwJzpcbiAgICAgIGNhc2UgJ2ZyYW1lc2V0JzpcbiAgICAgIGNhc2UgJ2ZyYW1lJzpcbiAgICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICBjYXNlICd0Ym9keSc6XG4gICAgICBjYXNlICd0ZCc6XG4gICAgICBjYXNlICd0Zm9vdCc6XG4gICAgICBjYXNlICd0aCc6XG4gICAgICBjYXNlICd0aGVhZCc6XG4gICAgICBjYXNlICd0cic6XG4gICAgICAgIC8vIFRoZXNlIHRhZ3MgYXJlIG9ubHkgdmFsaWQgd2l0aCBhIGZldyBwYXJlbnRzIHRoYXQgaGF2ZSBzcGVjaWFsIGNoaWxkXG4gICAgICAgIC8vIHBhcnNpbmcgcnVsZXMgLS0gaWYgd2UncmUgZG93biBoZXJlLCB0aGVuIG5vbmUgb2YgdGhvc2UgbWF0Y2hlZCBhbmRcbiAgICAgICAgLy8gc28gd2UgYWxsb3cgaXQgb25seSBpZiB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHBhcmVudCBpcywgYXMgYWxsIG90aGVyXG4gICAgICAgIC8vIGNhc2VzIGFyZSBpbnZhbGlkLlxuICAgICAgICByZXR1cm4gcGFyZW50VGFnID09IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXJcbiAgICovXG5cblxuICB2YXIgZmluZEludmFsaWRBbmNlc3RvckZvclRhZyA9IGZ1bmN0aW9uICh0YWcsIGFuY2VzdG9ySW5mbykge1xuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ2FydGljbGUnOlxuICAgICAgY2FzZSAnYXNpZGUnOlxuICAgICAgY2FzZSAnYmxvY2txdW90ZSc6XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgY2FzZSAnZGlyJzpcbiAgICAgIGNhc2UgJ2Rpdic6XG4gICAgICBjYXNlICdkbCc6XG4gICAgICBjYXNlICdmaWVsZHNldCc6XG4gICAgICBjYXNlICdmaWdjYXB0aW9uJzpcbiAgICAgIGNhc2UgJ2ZpZ3VyZSc6XG4gICAgICBjYXNlICdmb290ZXInOlxuICAgICAgY2FzZSAnaGVhZGVyJzpcbiAgICAgIGNhc2UgJ2hncm91cCc6XG4gICAgICBjYXNlICdtYWluJzpcbiAgICAgIGNhc2UgJ21lbnUnOlxuICAgICAgY2FzZSAnbmF2JzpcbiAgICAgIGNhc2UgJ29sJzpcbiAgICAgIGNhc2UgJ3AnOlxuICAgICAgY2FzZSAnc2VjdGlvbic6XG4gICAgICBjYXNlICdzdW1tYXJ5JzpcbiAgICAgIGNhc2UgJ3VsJzpcbiAgICAgIGNhc2UgJ3ByZSc6XG4gICAgICBjYXNlICdsaXN0aW5nJzpcbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgIGNhc2UgJ2hyJzpcbiAgICAgIGNhc2UgJ3htcCc6XG4gICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4gICAgICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2Zvcm0nOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmZvcm1UYWcgfHwgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuXG4gICAgICBjYXNlICdsaSc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZztcblxuICAgICAgY2FzZSAnZGQnOlxuICAgICAgY2FzZSAnZHQnOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nO1xuXG4gICAgICBjYXNlICdidXR0b24nOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAvLyBTcGVjIHNheXMgc29tZXRoaW5nIGFib3V0IHN0b3JpbmcgYSBsaXN0IG9mIG1hcmtlcnMsIGJ1dCBpdCBzb3VuZHNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byB0aGlzIGNoZWNrLlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlO1xuXG4gICAgICBjYXNlICdub2JyJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICB2YXIgZGlkV2FybiQxID0ge307XG5cbiAgdmFsaWRhdGVET01OZXN0aW5nID0gZnVuY3Rpb24gKGNoaWxkVGFnLCBjaGlsZFRleHQsIGFuY2VzdG9ySW5mbykge1xuICAgIGFuY2VzdG9ySW5mbyA9IGFuY2VzdG9ySW5mbyB8fCBlbXB0eUFuY2VzdG9ySW5mbztcbiAgICB2YXIgcGFyZW50SW5mbyA9IGFuY2VzdG9ySW5mby5jdXJyZW50O1xuICAgIHZhciBwYXJlbnRUYWcgPSBwYXJlbnRJbmZvICYmIHBhcmVudEluZm8udGFnO1xuXG4gICAgaWYgKGNoaWxkVGV4dCAhPSBudWxsKSB7XG4gICAgICBpZiAoY2hpbGRUYWcgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcigndmFsaWRhdGVET01OZXN0aW5nOiB3aGVuIGNoaWxkVGV4dCBpcyBwYXNzZWQsIGNoaWxkVGFnIHNob3VsZCBiZSBudWxsJyk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkVGFnID0gJyN0ZXh0JztcbiAgICB9XG5cbiAgICB2YXIgaW52YWxpZFBhcmVudCA9IGlzVGFnVmFsaWRXaXRoUGFyZW50KGNoaWxkVGFnLCBwYXJlbnRUYWcpID8gbnVsbCA6IHBhcmVudEluZm87XG4gICAgdmFyIGludmFsaWRBbmNlc3RvciA9IGludmFsaWRQYXJlbnQgPyBudWxsIDogZmluZEludmFsaWRBbmNlc3RvckZvclRhZyhjaGlsZFRhZywgYW5jZXN0b3JJbmZvKTtcbiAgICB2YXIgaW52YWxpZFBhcmVudE9yQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50IHx8IGludmFsaWRBbmNlc3RvcjtcblxuICAgIGlmICghaW52YWxpZFBhcmVudE9yQW5jZXN0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYW5jZXN0b3JUYWcgPSBpbnZhbGlkUGFyZW50T3JBbmNlc3Rvci50YWc7XG4gICAgdmFyIHdhcm5LZXkgPSAhIWludmFsaWRQYXJlbnQgKyAnfCcgKyBjaGlsZFRhZyArICd8JyArIGFuY2VzdG9yVGFnO1xuXG4gICAgaWYgKGRpZFdhcm4kMVt3YXJuS2V5XSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm4kMVt3YXJuS2V5XSA9IHRydWU7XG4gICAgdmFyIHRhZ0Rpc3BsYXlOYW1lID0gY2hpbGRUYWc7XG4gICAgdmFyIHdoaXRlc3BhY2VJbmZvID0gJyc7XG5cbiAgICBpZiAoY2hpbGRUYWcgPT09ICcjdGV4dCcpIHtcbiAgICAgIGlmICgvXFxTLy50ZXN0KGNoaWxkVGV4dCkpIHtcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnVGV4dCBub2Rlcyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWdEaXNwbGF5TmFtZSA9ICdXaGl0ZXNwYWNlIHRleHQgbm9kZXMnO1xuICAgICAgICB3aGl0ZXNwYWNlSW5mbyA9IFwiIE1ha2Ugc3VyZSB5b3UgZG9uJ3QgaGF2ZSBhbnkgZXh0cmEgd2hpdGVzcGFjZSBiZXR3ZWVuIHRhZ3Mgb24gXCIgKyAnZWFjaCBsaW5lIG9mIHlvdXIgc291cmNlIGNvZGUuJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnRGlzcGxheU5hbWUgPSAnPCcgKyBjaGlsZFRhZyArICc+JztcbiAgICB9XG5cbiAgICBpZiAoaW52YWxpZFBhcmVudCkge1xuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKGFuY2VzdG9yVGFnID09PSAndGFibGUnICYmIGNoaWxkVGFnID09PSAndHInKSB7XG4gICAgICAgIGluZm8gKz0gJyBBZGQgYSA8dGJvZHk+LCA8dGhlYWQ+IG9yIDx0Zm9vdD4gdG8geW91ciBjb2RlIHRvIG1hdGNoIHRoZSBET00gdHJlZSBnZW5lcmF0ZWQgYnkgJyArICd0aGUgYnJvd3Nlci4nO1xuICAgICAgfVxuXG4gICAgICBlcnJvcigndmFsaWRhdGVET01OZXN0aW5nKC4uLik6ICVzIGNhbm5vdCBhcHBlYXIgYXMgYSBjaGlsZCBvZiA8JXM+LiVzJXMnLCB0YWdEaXNwbGF5TmFtZSwgYW5jZXN0b3JUYWcsIHdoaXRlc3BhY2VJbmZvLCBpbmZvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZyguLi4pOiAlcyBjYW5ub3QgYXBwZWFyIGFzIGEgZGVzY2VuZGFudCBvZiAnICsgJzwlcz4uJywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxO1xuXG57XG4gIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDEgPSAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJztcbn1cblxudmFyIFNVU1BFTlNFX1NUQVJUX0RBVEEgPSAnJCc7XG52YXIgU1VTUEVOU0VfRU5EX0RBVEEgPSAnLyQnO1xudmFyIFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSA9ICckPyc7XG52YXIgU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSA9ICckISc7XG52YXIgU1RZTEUkMSA9ICdzdHlsZSc7XG52YXIgZXZlbnRzRW5hYmxlZCA9IG51bGw7XG52YXIgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBudWxsO1xuXG5mdW5jdGlvbiBzaG91bGRBdXRvRm9jdXNIb3N0Q29tcG9uZW50KHR5cGUsIHByb3BzKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgcmV0dXJuICEhcHJvcHMuYXV0b0ZvY3VzO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0Um9vdEhvc3RDb250ZXh0KHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICB2YXIgdHlwZTtcbiAgdmFyIG5hbWVzcGFjZTtcbiAgdmFyIG5vZGVUeXBlID0gcm9vdENvbnRhaW5lckluc3RhbmNlLm5vZGVUeXBlO1xuXG4gIHN3aXRjaCAobm9kZVR5cGUpIHtcbiAgICBjYXNlIERPQ1VNRU5UX05PREU6XG4gICAgY2FzZSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOlxuICAgICAge1xuICAgICAgICB0eXBlID0gbm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyAnI2RvY3VtZW50JyA6ICcjZnJhZ21lbnQnO1xuICAgICAgICB2YXIgcm9vdCA9IHJvb3RDb250YWluZXJJbnN0YW5jZS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIG5hbWVzcGFjZSA9IHJvb3QgPyByb290Lm5hbWVzcGFjZVVSSSA6IGdldENoaWxkTmFtZXNwYWNlKG51bGwsICcnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB2YXIgY29udGFpbmVyID0gbm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSA/IHJvb3RDb250YWluZXJJbnN0YW5jZS5wYXJlbnROb2RlIDogcm9vdENvbnRhaW5lckluc3RhbmNlO1xuICAgICAgICB2YXIgb3duTmFtZXNwYWNlID0gY29udGFpbmVyLm5hbWVzcGFjZVVSSSB8fCBudWxsO1xuICAgICAgICB0eXBlID0gY29udGFpbmVyLnRhZ05hbWU7XG4gICAgICAgIG5hbWVzcGFjZSA9IGdldENoaWxkTmFtZXNwYWNlKG93bk5hbWVzcGFjZSwgdHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHZhciB2YWxpZGF0ZWRUYWcgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8obnVsbCwgdmFsaWRhdGVkVGFnKTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICBhbmNlc3RvckluZm86IGFuY2VzdG9ySW5mb1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGdldENoaWxkSG9zdENvbnRleHQocGFyZW50SG9zdENvbnRleHQsIHR5cGUsIHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICB7XG4gICAgdmFyIHBhcmVudEhvc3RDb250ZXh0RGV2ID0gcGFyZW50SG9zdENvbnRleHQ7XG4gICAgdmFyIG5hbWVzcGFjZSA9IGdldENoaWxkTmFtZXNwYWNlKHBhcmVudEhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZSwgdHlwZSk7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8ocGFyZW50SG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICBhbmNlc3RvckluZm86IGFuY2VzdG9ySW5mb1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFB1YmxpY0luc3RhbmNlKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVGb3JDb21taXQoY29udGFpbmVySW5mbykge1xuICBldmVudHNFbmFibGVkID0gaXNFbmFibGVkKCk7XG4gIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb24oKTtcbiAgdmFyIGFjdGl2ZUluc3RhbmNlID0gbnVsbDtcblxuICBzZXRFbmFibGVkKGZhbHNlKTtcbiAgcmV0dXJuIGFjdGl2ZUluc3RhbmNlO1xufVxuZnVuY3Rpb24gcmVzZXRBZnRlckNvbW1pdChjb250YWluZXJJbmZvKSB7XG4gIHJlc3RvcmVTZWxlY3Rpb24oc2VsZWN0aW9uSW5mb3JtYXRpb24pO1xuICBzZXRFbmFibGVkKGV2ZW50c0VuYWJsZWQpO1xuICBldmVudHNFbmFibGVkID0gbnVsbDtcbiAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBudWxsO1xufVxuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UodHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgdmFyIHBhcmVudE5hbWVzcGFjZTtcblxuICB7XG4gICAgLy8gVE9ETzogdGFrZSBuYW1lc3BhY2UgaW50byBhY2NvdW50IHdoZW4gdmFsaWRhdGluZy5cbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICB2YWxpZGF0ZURPTU5lc3RpbmcodHlwZSwgbnVsbCwgaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvKTtcblxuICAgIGlmICh0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHZhciBzdHJpbmcgPSAnJyArIHByb3BzLmNoaWxkcmVuO1xuICAgICAgdmFyIG93bkFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8oaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCBzdHJpbmcsIG93bkFuY2VzdG9ySW5mbyk7XG4gICAgfVxuXG4gICAgcGFyZW50TmFtZXNwYWNlID0gaG9zdENvbnRleHREZXYubmFtZXNwYWNlO1xuICB9XG5cbiAgdmFyIGRvbUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIHBhcmVudE5hbWVzcGFjZSk7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIGRvbUVsZW1lbnQpO1xuICB1cGRhdGVGaWJlclByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgcmV0dXJuIGRvbUVsZW1lbnQ7XG59XG5mdW5jdGlvbiBhcHBlbmRJbml0aWFsQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKGRvbUVsZW1lbnQsIHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG4gIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuICByZXR1cm4gc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBwcm9wcyk7XG59XG5mdW5jdGlvbiBwcmVwYXJlVXBkYXRlKGRvbUVsZW1lbnQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCkge1xuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG5cbiAgICBpZiAodHlwZW9mIG5ld1Byb3BzLmNoaWxkcmVuICE9PSB0eXBlb2Ygb2xkUHJvcHMuY2hpbGRyZW4gJiYgKHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld1Byb3BzLmNoaWxkcmVuID09PSAnbnVtYmVyJykpIHtcbiAgICAgIHZhciBzdHJpbmcgPSAnJyArIG5ld1Byb3BzLmNoaWxkcmVuO1xuICAgICAgdmFyIG93bkFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8oaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCBzdHJpbmcsIG93bkFuY2VzdG9ySW5mbyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpZmZQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG59XG5mdW5jdGlvbiBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBwcm9wcykge1xuICByZXR1cm4gdHlwZSA9PT0gJ3RleHRhcmVhJyB8fCB0eXBlID09PSAnb3B0aW9uJyB8fCB0eXBlID09PSAnbm9zY3JpcHQnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT09ICdvYmplY3QnICYmIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICE9PSBudWxsICYmIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCAhPSBudWxsO1xufVxuZnVuY3Rpb24gY3JlYXRlVGV4dEluc3RhbmNlKHRleHQsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCB0ZXh0LCBob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8pO1xuICB9XG5cbiAgdmFyIHRleHROb2RlID0gY3JlYXRlVGV4dE5vZGUodGV4dCwgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgdGV4dE5vZGUpO1xuICByZXR1cm4gdGV4dE5vZGU7XG59XG4vLyBpZiBhIGNvbXBvbmVudCBqdXN0IGltcG9ydHMgUmVhY3RET00gKGUuZy4gZm9yIGZpbmRET01Ob2RlKS5cbi8vIFNvbWUgZW52aXJvbm1lbnRzIG1pZ2h0IG5vdCBoYXZlIHNldFRpbWVvdXQgb3IgY2xlYXJUaW1lb3V0LlxuXG52YXIgc2NoZWR1bGVUaW1lb3V0ID0gdHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicgPyBzZXRUaW1lb3V0IDogdW5kZWZpbmVkO1xudmFyIGNhbmNlbFRpbWVvdXQgPSB0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gY2xlYXJUaW1lb3V0IDogdW5kZWZpbmVkO1xudmFyIG5vVGltZW91dCA9IC0xOyAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBjb21taXRNb3VudChkb21FbGVtZW50LCB0eXBlLCBuZXdQcm9wcywgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICAvLyBEZXNwaXRlIHRoZSBuYW1pbmcgdGhhdCBtaWdodCBpbXBseSBvdGhlcndpc2UsIHRoaXMgbWV0aG9kIG9ubHlcbiAgLy8gZmlyZXMgaWYgdGhlcmUgaXMgYW4gYFVwZGF0ZWAgZWZmZWN0IHNjaGVkdWxlZCBkdXJpbmcgbW91bnRpbmcuXG4gIC8vIFRoaXMgaGFwcGVucyBpZiBgZmluYWxpemVJbml0aWFsQ2hpbGRyZW5gIHJldHVybnMgYHRydWVgICh3aGljaCBpdFxuICAvLyBkb2VzIHRvIGltcGxlbWVudCB0aGUgYGF1dG9Gb2N1c2AgYXR0cmlidXRlIG9uIHRoZSBjbGllbnQpLiBCdXRcbiAgLy8gdGhlcmUgYXJlIGFsc28gb3RoZXIgY2FzZXMgd2hlbiB0aGlzIG1pZ2h0IGhhcHBlbiAoc3VjaCBhcyBwYXRjaGluZ1xuICAvLyB1cCB0ZXh0IGNvbnRlbnQgZHVyaW5nIGh5ZHJhdGlvbiBtaXNtYXRjaCkuIFNvIHdlJ2xsIGNoZWNrIHRoaXMgYWdhaW4uXG4gIGlmIChzaG91bGRBdXRvRm9jdXNIb3N0Q29tcG9uZW50KHR5cGUsIG5ld1Byb3BzKSkge1xuICAgIGRvbUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxufVxuZnVuY3Rpb24gY29tbWl0VXBkYXRlKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICAvLyBVcGRhdGUgdGhlIHByb3BzIGhhbmRsZSBzbyB0aGF0IHdlIGtub3cgd2hpY2ggcHJvcHMgYXJlIHRoZSBvbmVzIHdpdGhcbiAgLy8gd2l0aCBjdXJyZW50IGV2ZW50IGhhbmRsZXJzLlxuICB1cGRhdGVGaWJlclByb3BzKGRvbUVsZW1lbnQsIG5ld1Byb3BzKTsgLy8gQXBwbHkgdGhlIGRpZmYgdG8gdGhlIERPTSBub2RlLlxuXG4gIHVwZGF0ZVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKTtcbn1cbmZ1bmN0aW9uIHJlc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCkge1xuICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCAnJyk7XG59XG5mdW5jdGlvbiBjb21taXRUZXh0VXBkYXRlKHRleHRJbnN0YW5jZSwgb2xkVGV4dCwgbmV3VGV4dCkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gbmV3VGV4dDtcbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKGNvbnRhaW5lciwgY2hpbGQpIHtcbiAgdmFyIHBhcmVudE5vZGU7XG5cbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgcGFyZW50Tm9kZSA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkLCBjb250YWluZXIpO1xuICB9IGVsc2Uge1xuICAgIHBhcmVudE5vZGUgPSBjb250YWluZXI7XG4gICAgcGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjaGlsZCk7XG4gIH0gLy8gVGhpcyBjb250YWluZXIgbWlnaHQgYmUgdXNlZCBmb3IgYSBwb3J0YWwuXG4gIC8vIElmIHNvbWV0aGluZyBpbnNpZGUgYSBwb3J0YWwgaXMgY2xpY2tlZCwgdGhhdCBjbGljayBzaG91bGQgYnViYmxlXG4gIC8vIHRocm91Z2ggdGhlIFJlYWN0IHRyZWUuIEhvd2V2ZXIsIG9uIE1vYmlsZSBTYWZhcmkgdGhlIGNsaWNrIHdvdWxkXG4gIC8vIG5ldmVyIGJ1YmJsZSB0aHJvdWdoIHRoZSAqRE9NKiB0cmVlIHVubGVzcyBhbiBhbmNlc3RvciB3aXRoIG9uY2xpY2tcbiAgLy8gZXZlbnQgZXhpc3RzLiBTbyB3ZSB3b3VsZG4ndCBzZWUgaXQgYW5kIGRpc3BhdGNoIGl0LlxuICAvLyBUaGlzIGlzIHdoeSB3ZSBlbnN1cmUgdGhhdCBub24gUmVhY3Qgcm9vdCBjb250YWluZXJzIGhhdmUgaW5saW5lIG9uY2xpY2tcbiAgLy8gZGVmaW5lZC5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTkxOFxuXG5cbiAgdmFyIHJlYWN0Um9vdENvbnRhaW5lciA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuXG4gIGlmICgocmVhY3RSb290Q29udGFpbmVyID09PSBudWxsIHx8IHJlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSAmJiBwYXJlbnROb2RlLm9uY2xpY2sgPT09IG51bGwpIHtcbiAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KHBhcmVudE5vZGUpO1xuICB9XG59XG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUocGFyZW50SW5zdGFuY2UsIGNoaWxkLCBiZWZvcmVDaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbn1cbmZ1bmN0aW9uIGluc2VydEluQ29udGFpbmVyQmVmb3JlKGNvbnRhaW5lciwgY2hpbGQsIGJlZm9yZUNoaWxkKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZCwgYmVmb3JlQ2hpbGQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UucmVtb3ZlQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY2hpbGQpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChjaGlsZCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGhpZGVJbnN0YW5jZShpbnN0YW5jZSkge1xuICAvLyBUT0RPOiBEb2VzIHRoaXMgd29yayBmb3IgYWxsIGVsZW1lbnQgdHlwZXM/IFdoYXQgYWJvdXQgTWF0aE1MPyBTaG91bGQgd2VcbiAgLy8gcGFzcyBob3N0IGNvbnRleHQgdG8gdGhpcyBtZXRob2Q/XG4gIGluc3RhbmNlID0gaW5zdGFuY2U7XG4gIHZhciBzdHlsZSA9IGluc3RhbmNlLnN0eWxlO1xuXG4gIGlmICh0eXBlb2Ygc3R5bGUuc2V0UHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdub25lJywgJ2ltcG9ydGFudCcpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIH1cbn1cbmZ1bmN0aW9uIGhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlKSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSAnJztcbn1cbmZ1bmN0aW9uIHVuaGlkZUluc3RhbmNlKGluc3RhbmNlLCBwcm9wcykge1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICB2YXIgc3R5bGVQcm9wID0gcHJvcHNbU1RZTEUkMV07XG4gIHZhciBkaXNwbGF5ID0gc3R5bGVQcm9wICE9PSB1bmRlZmluZWQgJiYgc3R5bGVQcm9wICE9PSBudWxsICYmIHN0eWxlUHJvcC5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheScpID8gc3R5bGVQcm9wLmRpc3BsYXkgOiBudWxsO1xuICBpbnN0YW5jZS5zdHlsZS5kaXNwbGF5ID0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZSgnZGlzcGxheScsIGRpc3BsYXkpO1xufVxuZnVuY3Rpb24gdW5oaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gdGV4dDtcbn1cbmZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICBjb250YWluZXIudGV4dENvbnRlbnQgPSAnJztcbiAgfSBlbHNlIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUpIHtcbiAgICB2YXIgYm9keSA9IGNvbnRhaW5lci5ib2R5O1xuXG4gICAgaWYgKGJvZHkgIT0gbnVsbCkge1xuICAgICAgYm9keS50ZXh0Q29udGVudCA9ICcnO1xuICAgIH1cbiAgfVxufSAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBjYW5IeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzKSB7XG4gIGlmIChpbnN0YW5jZS5ub2RlVHlwZSAhPT0gRUxFTUVOVF9OT0RFIHx8IHR5cGUudG9Mb3dlckNhc2UoKSAhPT0gaW5zdGFuY2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIFRoaXMgaGFzIG5vdyBiZWVuIHJlZmluZWQgdG8gYW4gZWxlbWVudCBub2RlLlxuXG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShpbnN0YW5jZSwgdGV4dCkge1xuICBpZiAodGV4dCA9PT0gJycgfHwgaW5zdGFuY2Uubm9kZVR5cGUgIT09IFRFWFRfTk9ERSkge1xuICAgIC8vIEVtcHR5IHN0cmluZ3MgYXJlIG5vdCBwYXJzZWQgYnkgSFRNTCBzbyB0aGVyZSB3b24ndCBiZSBhIGNvcnJlY3QgbWF0Y2ggaGVyZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBUaGlzIGhhcyBub3cgYmVlbiByZWZpbmVkIHRvIGEgdGV4dCBub2RlLlxuXG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyhpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2UuZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEE7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlKG5vZGUpIHtcbiAgLy8gU2tpcCBub24taHlkcmF0YWJsZSBub2Rlcy5cbiAgZm9yICg7IG5vZGUgIT0gbnVsbDsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICB2YXIgbm9kZVR5cGUgPSBub2RlLm5vZGVUeXBlO1xuXG4gICAgaWYgKG5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlU2libGluZyhpbnN0YW5jZSkge1xuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGUoaW5zdGFuY2UubmV4dFNpYmxpbmcpO1xufVxuZnVuY3Rpb24gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQocGFyZW50SW5zdGFuY2UpIHtcbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlKHBhcmVudEluc3RhbmNlLmZpcnN0Q2hpbGQpO1xufVxuZnVuY3Rpb24gaHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBpbnN0YW5jZSk7IC8vIFRPRE86IFBvc3NpYmx5IGRlZmVyIHRoaXMgdW50aWwgdGhlIGNvbW1pdCBwaGFzZSB3aGVyZSBhbGwgdGhlIGV2ZW50c1xuICAvLyBnZXQgYXR0YWNoZWQuXG5cbiAgdXBkYXRlRmliZXJQcm9wcyhpbnN0YW5jZSwgcHJvcHMpO1xuICB2YXIgcGFyZW50TmFtZXNwYWNlO1xuXG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICBwYXJlbnROYW1lc3BhY2UgPSBob3N0Q29udGV4dERldi5uYW1lc3BhY2U7XG4gIH1cblxuICByZXR1cm4gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIHBhcmVudE5hbWVzcGFjZSk7XG59XG5mdW5jdGlvbiBoeWRyYXRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCB0ZXh0SW5zdGFuY2UpO1xuICByZXR1cm4gZGlmZkh5ZHJhdGVkVGV4dCh0ZXh0SW5zdGFuY2UsIHRleHQpO1xufVxuZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVyU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gIHZhciBub2RlID0gc3VzcGVuc2VJbnN0YW5jZS5uZXh0U2libGluZzsgLy8gU2tpcCBwYXN0IGFsbCBub2RlcyB3aXRoaW4gdGhpcyBzdXNwZW5zZSBib3VuZGFyeS5cbiAgLy8gVGhlcmUgbWlnaHQgYmUgbmVzdGVkIG5vZGVzIHNvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBob3dcbiAgLy8gZGVlcCB3ZSBhcmUgYW5kIG9ubHkgYnJlYWsgb3V0IHdoZW4gd2UncmUgYmFjayBvbiB0b3AuXG5cbiAgdmFyIGRlcHRoID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBkYXRhID0gbm9kZS5kYXRhO1xuXG4gICAgICBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHtcbiAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlU2libGluZyhub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgfSAvLyBUT0RPOiBXYXJuLCB3ZSBkaWRuJ3QgZmluZCB0aGUgZW5kIGNvbW1lbnQgYm91bmRhcnkuXG5cblxuICByZXR1cm4gbnVsbDtcbn0gLy8gUmV0dXJucyB0aGUgU3VzcGVuc2VJbnN0YW5jZSBpZiB0aGlzIG5vZGUgaXMgYSBkaXJlY3QgY2hpbGQgb2YgYVxuLy8gU3VzcGVuc2VJbnN0YW5jZS4gSS5lLiBpZiBpdHMgcHJldmlvdXMgc2libGluZyBpcyBhIENvbW1lbnQgd2l0aFxuLy8gU1VTUEVOU0VfeF9TVEFSVF9EQVRBLiBPdGhlcndpc2UsIG51bGwuXG5cbmZ1bmN0aW9uIGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0SW5zdGFuY2UpIHtcbiAgdmFyIG5vZGUgPSB0YXJnZXRJbnN0YW5jZS5wcmV2aW91c1NpYmxpbmc7IC8vIFNraXAgcGFzdCBhbGwgbm9kZXMgd2l0aGluIHRoaXMgc3VzcGVuc2UgYm91bmRhcnkuXG4gIC8vIFRoZXJlIG1pZ2h0IGJlIG5lc3RlZCBub2RlcyBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgaG93XG4gIC8vIGRlZXAgd2UgYXJlIGFuZCBvbmx5IGJyZWFrIG91dCB3aGVuIHdlJ3JlIGJhY2sgb24gdG9wLlxuXG4gIHZhciBkZXB0aCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgZGF0YSA9IG5vZGUuZGF0YTtcblxuICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEpIHtcbiAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIC8vIFJldHJ5IGlmIGFueSBldmVudCByZXBsYXlpbmcgd2FzIGJsb2NrZWQgb24gdGhpcy5cbiAgcmV0cnlJZkJsb2NrZWRPbihjb250YWluZXIpO1xufVxuZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgLy8gUmV0cnkgaWYgYW55IGV2ZW50IHJlcGxheWluZyB3YXMgYmxvY2tlZCBvbiB0aGlzLlxuICByZXRyeUlmQmxvY2tlZE9uKHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gZGlkTm90TWF0Y2hIeWRyYXRlZENvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICB7XG4gICAgd2FybkZvclVubWF0Y2hlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90TWF0Y2hIeWRyYXRlZFRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgd2FybkZvclVubWF0Y2hlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90SHlkcmF0ZUNvbnRhaW5lckluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpIHtcbiAge1xuICAgIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpO1xuICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkgOyBlbHNlIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaWROb3RIeWRyYXRlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKTtcbiAgICB9IGVsc2UgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIDsgZWxzZSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lckluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdHlwZSwgcHJvcHMpIHtcbiAge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnRDb250YWluZXIsIHR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnRDb250YWluZXIsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdHlwZSwgcHJvcHMpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnRJbnN0YW5jZSwgdHlwZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdGV4dCkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudEluc3RhbmNlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVTdXNwZW5zZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSA7XG59XG52YXIgY2xpZW50SWQgPSAwO1xuZnVuY3Rpb24gbWFrZUNsaWVudElkSW5ERVYod2Fybk9uQWNjZXNzSW5ERVYpIHtcbiAgdmFyIGlkID0gJ3I6JyArIChjbGllbnRJZCsrKS50b1N0cmluZygzNik7XG4gIHJldHVybiB7XG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm5PbkFjY2Vzc0luREVWKCk7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfSxcbiAgICB2YWx1ZU9mOiBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuT25BY2Nlc3NJbkRFVigpO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIGlzT3BhcXVlSHlkcmF0aW5nT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9PUEFRVUVfSURfVFlQRTtcbn1cbmZ1bmN0aW9uIG1ha2VPcGFxdWVIeWRyYXRpbmdPYmplY3QoYXR0ZW1wdFRvUmVhZFZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX09QQVFVRV9JRF9UWVBFLFxuICAgIHRvU3RyaW5nOiBhdHRlbXB0VG9SZWFkVmFsdWUsXG4gICAgdmFsdWVPZjogYXR0ZW1wdFRvUmVhZFZhbHVlXG4gIH07XG59XG5mdW5jdGlvbiBwcmVwYXJlUG9ydGFsTW91bnQocG9ydGFsSW5zdGFuY2UpIHtcbiAge1xuICAgIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHBvcnRhbEluc3RhbmNlKTtcbiAgfVxufVxuXG52YXIgcmFuZG9tS2V5ID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG52YXIgaW50ZXJuYWxJbnN0YW5jZUtleSA9ICdfX3JlYWN0RmliZXIkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbFByb3BzS2V5ID0gJ19fcmVhY3RQcm9wcyQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXkgPSAnX19yZWFjdENvbnRhaW5lciQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsRXZlbnRIYW5kbGVyc0tleSA9ICdfX3JlYWN0RXZlbnRzJCcgKyByYW5kb21LZXk7XG5mdW5jdGlvbiBwcmVjYWNoZUZpYmVyTm9kZShob3N0SW5zdCwgbm9kZSkge1xuICBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldID0gaG9zdEluc3Q7XG59XG5mdW5jdGlvbiBtYXJrQ29udGFpbmVyQXNSb290KGhvc3RSb290LCBub2RlKSB7XG4gIG5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gPSBob3N0Um9vdDtcbn1cbmZ1bmN0aW9uIHVubWFya0NvbnRhaW5lckFzUm9vdChub2RlKSB7XG4gIG5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gPSBudWxsO1xufVxuZnVuY3Rpb24gaXNDb250YWluZXJNYXJrZWRBc1Jvb3Qobm9kZSkge1xuICByZXR1cm4gISFub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldO1xufSAvLyBHaXZlbiBhIERPTSBub2RlLCByZXR1cm4gdGhlIGNsb3Nlc3QgSG9zdENvbXBvbmVudCBvciBIb3N0VGV4dCBmaWJlciBhbmNlc3Rvci5cbi8vIElmIHRoZSB0YXJnZXQgbm9kZSBpcyBwYXJ0IG9mIGEgaHlkcmF0ZWQgb3Igbm90IHlldCByZW5kZXJlZCBzdWJ0cmVlLCB0aGVuXG4vLyB0aGlzIG1heSBhbHNvIHJldHVybiBhIFN1c3BlbnNlQ29tcG9uZW50IG9yIEhvc3RSb290IHRvIGluZGljYXRlIHRoYXQuXG4vLyBDb25jZXB0dWFsbHkgdGhlIEhvc3RSb290IGZpYmVyIGlzIGEgY2hpbGQgb2YgdGhlIENvbnRhaW5lciBub2RlLiBTbyBpZiB5b3Vcbi8vIHBhc3MgdGhlIENvbnRhaW5lciBub2RlIGFzIHRoZSB0YXJnZXROb2RlLCB5b3Ugd2lsbCBub3QgYWN0dWFsbHkgZ2V0IHRoZVxuLy8gSG9zdFJvb3QgYmFjay4gVG8gZ2V0IHRvIHRoZSBIb3N0Um9vdCwgeW91IG5lZWQgdG8gcGFzcyBhIGNoaWxkIG9mIGl0LlxuLy8gVGhlIHNhbWUgdGhpbmcgYXBwbGllcyB0byBTdXNwZW5zZSBib3VuZGFyaWVzLlxuXG5mdW5jdGlvbiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSh0YXJnZXROb2RlKSB7XG4gIHZhciB0YXJnZXRJbnN0ID0gdGFyZ2V0Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICBpZiAodGFyZ2V0SW5zdCkge1xuICAgIC8vIERvbid0IHJldHVybiBIb3N0Um9vdCBvciBTdXNwZW5zZUNvbXBvbmVudCBoZXJlLlxuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9IC8vIElmIHRoZSBkaXJlY3QgZXZlbnQgdGFyZ2V0IGlzbid0IGEgUmVhY3Qgb3duZWQgRE9NIG5vZGUsIHdlIG5lZWQgdG8gbG9va1xuICAvLyB0byBzZWUgaWYgb25lIG9mIGl0cyBwYXJlbnRzIGlzIGEgUmVhY3Qgb3duZWQgRE9NIG5vZGUuXG5cblxuICB2YXIgcGFyZW50Tm9kZSA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTtcblxuICB3aGlsZSAocGFyZW50Tm9kZSkge1xuICAgIC8vIFdlJ2xsIGNoZWNrIGlmIHRoaXMgaXMgYSBjb250YWluZXIgcm9vdCB0aGF0IGNvdWxkIGluY2x1ZGVcbiAgICAvLyBSZWFjdCBub2RlcyBpbiB0aGUgZnV0dXJlLiBXZSBuZWVkIHRvIGNoZWNrIHRoaXMgZmlyc3QgYmVjYXVzZVxuICAgIC8vIGlmIHdlJ3JlIGEgY2hpbGQgb2YgYSBkZWh5ZHJhdGVkIGNvbnRhaW5lciwgd2UgbmVlZCB0byBmaXJzdFxuICAgIC8vIGZpbmQgdGhhdCBpbm5lciBjb250YWluZXIgYmVmb3JlIG1vdmluZyBvbiB0byBmaW5kaW5nIHRoZSBwYXJlbnRcbiAgICAvLyBpbnN0YW5jZS4gTm90ZSB0aGF0IHdlIGRvbid0IGNoZWNrIHRoaXMgZmllbGQgb24gIHRoZSB0YXJnZXROb2RlXG4gICAgLy8gaXRzZWxmIGJlY2F1c2UgdGhlIGZpYmVycyBhcmUgY29uY2VwdHVhbGx5IGJldHdlZW4gdGhlIGNvbnRhaW5lclxuICAgIC8vIG5vZGUgYW5kIHRoZSBmaXJzdCBjaGlsZC4gSXQgaXNuJ3Qgc3Vycm91bmRpbmcgdGhlIGNvbnRhaW5lciBub2RlLlxuICAgIC8vIElmIGl0J3Mgbm90IGEgY29udGFpbmVyLCB3ZSBjaGVjayBpZiBpdCdzIGFuIGluc3RhbmNlLlxuICAgIHRhcmdldEluc3QgPSBwYXJlbnROb2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldIHx8IHBhcmVudE5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG5cbiAgICBpZiAodGFyZ2V0SW5zdCkge1xuICAgICAgLy8gU2luY2UgdGhpcyB3YXNuJ3QgdGhlIGRpcmVjdCB0YXJnZXQgb2YgdGhlIGV2ZW50LCB3ZSBtaWdodCBoYXZlXG4gICAgICAvLyBzdGVwcGVkIHBhc3QgZGVoeWRyYXRlZCBET00gbm9kZXMgdG8gZ2V0IGhlcmUuIEhvd2V2ZXIgdGhleSBjb3VsZFxuICAgICAgLy8gYWxzbyBoYXZlIGJlZW4gbm9uLVJlYWN0IG5vZGVzLiBXZSBuZWVkIHRvIGFuc3dlciB3aGljaCBvbmUuXG4gICAgICAvLyBJZiB3ZSB0aGUgaW5zdGFuY2UgZG9lc24ndCBoYXZlIGFueSBjaGlsZHJlbiwgdGhlbiB0aGVyZSBjYW4ndCBiZVxuICAgICAgLy8gYSBuZXN0ZWQgc3VzcGVuc2UgYm91bmRhcnkgd2l0aGluIGl0LiBTbyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBmYXN0XG4gICAgICAvLyBiYWlsb3V0LiBNb3N0IG9mIHRoZSB0aW1lLCB3aGVuIHBlb3BsZSBhZGQgbm9uLVJlYWN0IGNoaWxkcmVuIHRvXG4gICAgICAvLyB0aGUgdHJlZSwgaXQgaXMgdXNpbmcgYSByZWYgdG8gYSBjaGlsZC1sZXNzIERPTSBub2RlLlxuICAgICAgLy8gTm9ybWFsbHkgd2UnZCBvbmx5IG5lZWQgdG8gY2hlY2sgb25lIG9mIHRoZSBmaWJlcnMgYmVjYXVzZSBpZiBpdFxuICAgICAgLy8gaGFzIGV2ZXIgZ29uZSBmcm9tIGhhdmluZyBjaGlsZHJlbiB0byBkZWxldGluZyB0aGVtIG9yIHZpY2UgdmVyc2FcbiAgICAgIC8vIGl0IHdvdWxkIGhhdmUgZGVsZXRlZCB0aGUgZGVoeWRyYXRlZCBib3VuZGFyeSBuZXN0ZWQgaW5zaWRlIGFscmVhZHkuXG4gICAgICAvLyBIb3dldmVyLCBzaW5jZSB0aGUgSG9zdFJvb3Qgc3RhcnRzIG91dCB3aXRoIGFuIGFsdGVybmF0ZSBpdCBtaWdodFxuICAgICAgLy8gaGF2ZSBvbmUgb24gdGhlIGFsdGVybmF0ZSBzbyB3ZSBuZWVkIHRvIGNoZWNrIGluIGNhc2UgdGhpcyB3YXMgYVxuICAgICAgLy8gcm9vdC5cbiAgICAgIHZhciBhbHRlcm5hdGUgPSB0YXJnZXRJbnN0LmFsdGVybmF0ZTtcblxuICAgICAgaWYgKHRhcmdldEluc3QuY2hpbGQgIT09IG51bGwgfHwgYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBOZXh0IHdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGUgbm9kZSB0aGF0IHNraXBwZWQgcGFzdCBpc1xuICAgICAgICAvLyBuZXN0ZWQgd2l0aGluIGEgZGVoeWRyYXRlZCBib3VuZGFyeSBhbmQgaWYgc28sIHdoaWNoIG9uZS5cbiAgICAgICAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHRhcmdldE5vZGUpO1xuXG4gICAgICAgIHdoaWxlIChzdXNwZW5zZUluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgZm91bmQgYSBzdXNwZW5zZSBpbnN0YW5jZS4gVGhhdCBtZWFucyB0aGF0IHdlIGhhdmVuJ3RcbiAgICAgICAgICAvLyBoeWRyYXRlZCBpdCB5ZXQuIEV2ZW4gdGhvdWdoIHdlIGxlYXZlIHRoZSBjb21tZW50cyBpbiB0aGVcbiAgICAgICAgICAvLyBET00gYWZ0ZXIgaHlkcmF0aW5nLCBhbmQgdGhlcmUgYXJlIGJvdW5kYXJpZXMgaW4gdGhlIERPTVxuICAgICAgICAgIC8vIHRoYXQgY291bGQgYWxyZWFkeSBiZSBoeWRyYXRlZCwgd2Ugd291bGRuJ3QgaGF2ZSBmb3VuZCB0aGVtXG4gICAgICAgICAgLy8gdGhyb3VnaCB0aGlzIHBhc3Mgc2luY2UgaWYgdGhlIHRhcmdldCBpcyBoeWRyYXRlZCBpdCB3b3VsZFxuICAgICAgICAgIC8vIGhhdmUgaGFkIGFuIGludGVybmFsSW5zdGFuY2VLZXkgb24gaXQuXG4gICAgICAgICAgLy8gTGV0J3MgZ2V0IHRoZSBmaWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIFN1c3BlbnNlQ29tcG9uZW50XG4gICAgICAgICAgLy8gYXMgdGhlIGRlZXBlc3QgaW5zdGFuY2UuXG4gICAgICAgICAgdmFyIHRhcmdldFN1c3BlbnNlSW5zdCA9IHN1c3BlbnNlSW5zdGFuY2VbaW50ZXJuYWxJbnN0YW5jZUtleV07XG5cbiAgICAgICAgICBpZiAodGFyZ2V0U3VzcGVuc2VJbnN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0U3VzcGVuc2VJbnN0O1xuICAgICAgICAgIH0gLy8gSWYgd2UgZG9uJ3QgZmluZCBhIEZpYmVyIG9uIHRoZSBjb21tZW50LCBpdCBtaWdodCBiZSBiZWNhdXNlXG4gICAgICAgICAgLy8gd2UgaGF2ZW4ndCBnb3R0ZW4gdG8gaHlkcmF0ZSBpdCB5ZXQuIFRoZXJlIG1pZ2h0IHN0aWxsIGJlIGFcbiAgICAgICAgICAvLyBwYXJlbnQgYm91bmRhcnkgdGhhdCBoYXNuJ3QgYWJvdmUgdGhpcyBvbmUgc28gd2UgbmVlZCB0byBmaW5kXG4gICAgICAgICAgLy8gdGhlIG91dGVyIG1vc3QgdGhhdCBpcyBrbm93bi5cblxuXG4gICAgICAgICAgc3VzcGVuc2VJbnN0YW5jZSA9IGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7IC8vIElmIHdlIGRvbid0IGZpbmQgb25lLCB0aGVuIHRoYXQgc2hvdWxkIG1lYW4gdGhhdCB0aGUgcGFyZW50XG4gICAgICAgICAgLy8gaG9zdCBjb21wb25lbnQgYWxzbyBoYXNuJ3QgaHlkcmF0ZWQgeWV0LiBXZSBjYW4gcmV0dXJuIGl0XG4gICAgICAgICAgLy8gYmVsb3cgc2luY2UgaXQgd2lsbCBiYWlsIG91dCBvbiB0aGUgaXNNb3VudGVkIGNoZWNrIGxhdGVyLlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICAgIH1cblxuICAgIHRhcmdldE5vZGUgPSBwYXJlbnROb2RlO1xuICAgIHBhcmVudE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogR2l2ZW4gYSBET00gbm9kZSwgcmV0dXJuIHRoZSBSZWFjdERPTUNvbXBvbmVudCBvciBSZWFjdERPTVRleHRDb21wb25lbnRcbiAqIGluc3RhbmNlLCBvciBudWxsIGlmIHRoZSBub2RlIHdhcyBub3QgcmVuZGVyZWQgYnkgdGhpcyBSZWFjdC5cbiAqL1xuXG5mdW5jdGlvbiBnZXRJbnN0YW5jZUZyb21Ob2RlKG5vZGUpIHtcbiAgdmFyIGluc3QgPSBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldIHx8IG5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV07XG5cbiAgaWYgKGluc3QpIHtcbiAgICBpZiAoaW5zdC50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RUZXh0IHx8IGluc3QudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgIHJldHVybiBpbnN0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogR2l2ZW4gYSBSZWFjdERPTUNvbXBvbmVudCBvciBSZWFjdERPTVRleHRDb21wb25lbnQsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZ1xuICogRE9NIG5vZGUuXG4gKi9cblxuZnVuY3Rpb24gZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KSB7XG4gIGlmIChpbnN0LnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAvLyBJbiBGaWJlciB0aGlzLCBpcyBqdXN0IHRoZSBzdGF0ZSBub2RlIHJpZ2h0IG5vdy4gV2UgYXNzdW1lIGl0IHdpbGwgYmVcbiAgICAvLyBhIGhvc3QgY29tcG9uZW50IG9yIGhvc3QgdGV4dC5cbiAgICByZXR1cm4gaW5zdC5zdGF0ZU5vZGU7XG4gIH0gLy8gV2l0aG91dCB0aGlzIGZpcnN0IGludmFyaWFudCwgcGFzc2luZyBhIG5vbi1ET00tY29tcG9uZW50IHRyaWdnZXJzIHRoZSBuZXh0XG4gIC8vIGludmFyaWFudCBmb3IgYSBtaXNzaW5nIHBhcmVudCwgd2hpY2ggaXMgc3VwZXIgY29uZnVzaW5nLlxuXG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcImdldE5vZGVGcm9tSW5zdGFuY2U6IEludmFsaWQgYXJndW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZVtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xufVxuZnVuY3Rpb24gdXBkYXRlRmliZXJQcm9wcyhub2RlLCBwcm9wcykge1xuICBub2RlW2ludGVybmFsUHJvcHNLZXldID0gcHJvcHM7XG59XG5mdW5jdGlvbiBnZXRFdmVudExpc3RlbmVyU2V0KG5vZGUpIHtcbiAgdmFyIGVsZW1lbnRMaXN0ZW5lclNldCA9IG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XTtcblxuICBpZiAoZWxlbWVudExpc3RlbmVyU2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbGVtZW50TGlzdGVuZXJTZXQgPSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV0gPSBuZXcgU2V0KCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudExpc3RlbmVyU2V0O1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgdmFsdWVTdGFjayA9IFtdO1xudmFyIGZpYmVyU3RhY2s7XG5cbntcbiAgZmliZXJTdGFjayA9IFtdO1xufVxuXG52YXIgaW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY3JlYXRlQ3Vyc29yKGRlZmF1bHRWYWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnQ6IGRlZmF1bHRWYWx1ZVxuICB9O1xufVxuXG5mdW5jdGlvbiBwb3AoY3Vyc29yLCBmaWJlcikge1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAge1xuICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgcG9wLicpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICBpZiAoZmliZXIgIT09IGZpYmVyU3RhY2tbaW5kZXhdKSB7XG4gICAgICBlcnJvcignVW5leHBlY3RlZCBGaWJlciBwb3BwZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZVN0YWNrW2luZGV4XTtcbiAgdmFsdWVTdGFja1tpbmRleF0gPSBudWxsO1xuXG4gIHtcbiAgICBmaWJlclN0YWNrW2luZGV4XSA9IG51bGw7XG4gIH1cblxuICBpbmRleC0tO1xufVxuXG5mdW5jdGlvbiBwdXNoKGN1cnNvciwgdmFsdWUsIGZpYmVyKSB7XG4gIGluZGV4Kys7XG4gIHZhbHVlU3RhY2tbaW5kZXhdID0gY3Vyc29yLmN1cnJlbnQ7XG5cbiAge1xuICAgIGZpYmVyU3RhY2tbaW5kZXhdID0gZmliZXI7XG4gIH1cblxuICBjdXJzb3IuY3VycmVudCA9IHZhbHVlO1xufVxuXG52YXIgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0O1xuXG57XG4gIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dCA9IHt9O1xufVxuXG52YXIgZW1wdHlDb250ZXh0T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eUNvbnRleHRPYmplY3QpO1xufSAvLyBBIGN1cnNvciB0byB0aGUgY3VycmVudCBtZXJnZWQgY29udGV4dCBvYmplY3Qgb24gdGhlIHN0YWNrLlxuXG5cbnZhciBjb250ZXh0U3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoZW1wdHlDb250ZXh0T2JqZWN0KTsgLy8gQSBjdXJzb3IgdG8gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udGV4dCBoYXMgY2hhbmdlZC5cblxudmFyIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoZmFsc2UpOyAvLyBLZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBjb250ZXh0IG9iamVjdCB0aGF0IHdhcyBvbiB0aGUgc3RhY2suXG4vLyBXZSB1c2UgdGhpcyB0byBnZXQgYWNjZXNzIHRvIHRoZSBwYXJlbnQgY29udGV4dCBhZnRlciB3ZSBoYXZlIGFscmVhZHlcbi8vIHB1c2hlZCB0aGUgbmV4dCBjb250ZXh0IHByb3ZpZGVyLCBhbmQgbm93IG5lZWQgdG8gbWVyZ2UgdGhlaXIgY29udGV4dHMuXG5cbnZhciBwcmV2aW91c0NvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbmZ1bmN0aW9uIGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBkaWRQdXNoT3duQ29udGV4dElmUHJvdmlkZXIpIHtcbiAge1xuICAgIGlmIChkaWRQdXNoT3duQ29udGV4dElmUHJvdmlkZXIgJiYgaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgLy8gSWYgdGhlIGZpYmVyIGlzIGEgY29udGV4dCBwcm92aWRlciBpdHNlbGYsIHdoZW4gd2UgcmVhZCBpdHMgY29udGV4dFxuICAgICAgLy8gd2UgbWF5IGhhdmUgYWxyZWFkeSBwdXNoZWQgaXRzIG93biBjaGlsZCBjb250ZXh0IG9uIHRoZSBzdGFjay4gQSBjb250ZXh0XG4gICAgICAvLyBwcm92aWRlciBzaG91bGQgbm90IFwic2VlXCIgaXRzIG93biBjaGlsZCBjb250ZXh0LiBUaGVyZWZvcmUgd2UgcmVhZCB0aGVcbiAgICAgIC8vIHByZXZpb3VzIChwYXJlbnQpIGNvbnRleHQgaW5zdGVhZCBmb3IgYSBjb250ZXh0IHByb3ZpZGVyLlxuICAgICAgcmV0dXJuIHByZXZpb3VzQ29udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIG1hc2tlZENvbnRleHQpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID0gdW5tYXNrZWRDb250ZXh0O1xuICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0ID0gbWFza2VkQ29udGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpIHtcbiAge1xuICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICB2YXIgY29udGV4dFR5cGVzID0gdHlwZS5jb250ZXh0VHlwZXM7XG5cbiAgICBpZiAoIWNvbnRleHRUeXBlcykge1xuICAgICAgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICB9IC8vIEF2b2lkIHJlY3JlYXRpbmcgbWFza2VkIGNvbnRleHQgdW5sZXNzIHVubWFza2VkIGNvbnRleHQgaGFzIGNoYW5nZWQuXG4gICAgLy8gRmFpbGluZyB0byBkbyB0aGlzIHdpbGwgcmVzdWx0IGluIHVubmVjZXNzYXJ5IGNhbGxzIHRvIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuXG4gICAgLy8gVGhpcyBtYXkgdHJpZ2dlciBpbmZpbml0ZSBsb29wcyBpZiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGNhbGxzIHNldFN0YXRlLlxuXG5cbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCA9PT0gdW5tYXNrZWRDb250ZXh0KSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiBjb250ZXh0VHlwZXMpIHtcbiAgICAgIGNvbnRleHRba2V5XSA9IHVubWFza2VkQ29udGV4dFtrZXldO1xuICAgIH1cblxuICAgIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG4gICAgICBjaGVja1Byb3BUeXBlcyhjb250ZXh0VHlwZXMsIGNvbnRleHQsICdjb250ZXh0JywgbmFtZSk7XG4gICAgfSAvLyBDYWNoZSB1bm1hc2tlZCBjb250ZXh0IHNvIHdlIGNhbiBhdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyBuZWNlc3NhcnkuXG4gICAgLy8gQ29udGV4dCBpcyBjcmVhdGVkIGJlZm9yZSB0aGUgY2xhc3MgY29tcG9uZW50IGlzIGluc3RhbnRpYXRlZCBzbyBjaGVjayBmb3IgaW5zdGFuY2UuXG5cblxuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhc0NvbnRleHRDaGFuZ2VkKCkge1xuICB7XG4gICAgcmV0dXJuIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcih0eXBlKSB7XG4gIHtcbiAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSB0eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuICAgIHJldHVybiBjaGlsZENvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjaGlsZENvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcENvbnRleHQoZmliZXIpIHtcbiAge1xuICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcFRvcExldmVsQ29udGV4dE9iamVjdChmaWJlcikge1xuICB7XG4gICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVzaFRvcExldmVsQ29udGV4dE9iamVjdChmaWJlciwgY29udGV4dCwgZGlkQ2hhbmdlKSB7XG4gIHtcbiAgICBpZiAoIShjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudCA9PT0gZW1wdHlDb250ZXh0T2JqZWN0KSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJVbmV4cGVjdGVkIGNvbnRleHQgZm91bmQgb24gc3RhY2suIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgY29udGV4dCwgZmliZXIpO1xuICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlLCBmaWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0NoaWxkQ29udGV4dChmaWJlciwgdHlwZSwgcGFyZW50Q29udGV4dCkge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IHR5cGUuY2hpbGRDb250ZXh0VHlwZXM7IC8vIFRPRE8gKGJ2YXVnaG4pIFJlcGxhY2UgdGhpcyBiZWhhdmlvciB3aXRoIGFuIGludmFyaWFudCgpIGluIHRoZSBmdXR1cmUuXG4gICAgLy8gSXQgaGFzIG9ubHkgYmVlbiBhZGRlZCBpbiBGaWJlciB0byBtYXRjaCB0aGUgKHVuaW50ZW50aW9uYWwpIGJlaGF2aW9yIGluIFN0YWNrLlxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJztcblxuICAgICAgICBpZiAoIXdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dFtjb21wb25lbnROYW1lXSkge1xuICAgICAgICAgIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dFtjb21wb25lbnROYW1lXSA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignJXMuY2hpbGRDb250ZXh0VHlwZXMgaXMgc3BlY2lmaWVkIGJ1dCB0aGVyZSBpcyBubyBnZXRDaGlsZENvbnRleHQoKSBtZXRob2QgJyArICdvbiB0aGUgaW5zdGFuY2UuIFlvdSBjYW4gZWl0aGVyIGRlZmluZSBnZXRDaGlsZENvbnRleHQoKSBvbiAlcyBvciByZW1vdmUgJyArICdjaGlsZENvbnRleHRUeXBlcyBmcm9tIGl0LicsIGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJlbnRDb250ZXh0O1xuICAgIH1cblxuICAgIHZhciBjaGlsZENvbnRleHQgPSBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQoKTtcblxuICAgIGZvciAodmFyIGNvbnRleHRLZXkgaW4gY2hpbGRDb250ZXh0KSB7XG4gICAgICBpZiAoIShjb250ZXh0S2V5IGluIGNoaWxkQ29udGV4dFR5cGVzKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIChnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJykgKyBcIi5nZXRDaGlsZENvbnRleHQoKToga2V5IFxcXCJcIiArIGNvbnRleHRLZXkgKyBcIlxcXCIgaXMgbm90IGRlZmluZWQgaW4gY2hpbGRDb250ZXh0VHlwZXMuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG4gICAgICBjaGVja1Byb3BUeXBlcyhjaGlsZENvbnRleHRUeXBlcywgY2hpbGRDb250ZXh0LCAnY2hpbGQgY29udGV4dCcsIG5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBfYXNzaWduKHt9LCBwYXJlbnRDb250ZXh0LCBjaGlsZENvbnRleHQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTsgLy8gV2UgcHVzaCB0aGUgY29udGV4dCBhcyBlYXJseSBhcyBwb3NzaWJsZSB0byBlbnN1cmUgc3RhY2sgaW50ZWdyaXR5LlxuICAgIC8vIElmIHRoZSBpbnN0YW5jZSBkb2VzIG5vdCBleGlzdCB5ZXQsIHdlIHdpbGwgcHVzaCBudWxsIGF0IGZpcnN0LFxuICAgIC8vIGFuZCByZXBsYWNlIGl0IG9uIHRoZSBzdGFjayBsYXRlciB3aGVuIGludmFsaWRhdGluZyB0aGUgY29udGV4dC5cblxuICAgIHZhciBtZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCA9IGluc3RhbmNlICYmIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0IHx8IGVtcHR5Q29udGV4dE9iamVjdDsgLy8gUmVtZW1iZXIgdGhlIHBhcmVudCBjb250ZXh0IHNvIHdlIGNhbiBtZXJnZSB3aXRoIGl0IGxhdGVyLlxuICAgIC8vIEluaGVyaXQgdGhlIHBhcmVudCdzIGRpZC1wZXJmb3JtLXdvcmsgdmFsdWUgdG8gYXZvaWQgaW5hZHZlcnRlbnRseSBibG9ja2luZyB1cGRhdGVzLlxuXG4gICAgcHJldmlvdXNDb250ZXh0ID0gY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCB0eXBlLCBkaWRDaGFuZ2UpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gaGF2ZSBhbiBpbnN0YW5jZSBieSB0aGlzIHBvaW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpZENoYW5nZSkge1xuICAgICAgLy8gTWVyZ2UgcGFyZW50IGFuZCBvd24gY29udGV4dC5cbiAgICAgIC8vIFNraXAgdGhpcyBpZiB3ZSdyZSBub3QgdXBkYXRpbmcgZHVlIHRvIHNDVS5cbiAgICAgIC8vIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJpbHkgcmVjb21wdXRpbmcgbWVtb2l6ZWQgdmFsdWVzLlxuICAgICAgdmFyIG1lcmdlZENvbnRleHQgPSBwcm9jZXNzQ2hpbGRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB0eXBlLCBwcmV2aW91c0NvbnRleHQpO1xuICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgPSBtZXJnZWRDb250ZXh0OyAvLyBSZXBsYWNlIHRoZSBvbGQgKG9yIGVtcHR5KSBjb250ZXh0IHdpdGggdGhlIG5ldyBvbmUuXG4gICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gdW53aW5kIHRoZSBjb250ZXh0IGluIHRoZSByZXZlcnNlIG9yZGVyLlxuXG4gICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpOyAvLyBOb3cgcHVzaCB0aGUgbmV3IGNvbnRleHQgYW5kIG1hcmsgdGhhdCBpdCBoYXMgY2hhbmdlZC5cblxuICAgICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG1lcmdlZENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ3VycmVudFVubWFza2VkQ29udGV4dChmaWJlcikge1xuICB7XG4gICAgLy8gQ3VycmVudGx5IHRoaXMgaXMgb25seSB1c2VkIHdpdGggcmVuZGVyU3VidHJlZUludG9Db250YWluZXI7IG5vdCBzdXJlIGlmIGl0XG4gICAgLy8gbWFrZXMgc2Vuc2UgZWxzZXdoZXJlXG4gICAgaWYgKCEoaXNGaWJlck1vdW50ZWQoZmliZXIpICYmIGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHN1YnRyZWUgcGFyZW50IHRvIGJlIGEgbW91bnRlZCBjbGFzcyBjb21wb25lbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gICAgZG8ge1xuICAgICAgc3dpdGNoIChub2RlLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZS5jb250ZXh0O1xuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIENvbXBvbmVudCA9IG5vZGUudHlwZTtcblxuICAgICAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChub2RlICE9PSBudWxsKTtcblxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiRm91bmQgdW5leHBlY3RlZCBkZXRhY2hlZCBzdWJ0cmVlIHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgTGVnYWN5Um9vdCA9IDA7XG52YXIgQmxvY2tpbmdSb290ID0gMTtcbnZhciBDb25jdXJyZW50Um9vdCA9IDI7XG5cbnZhciByZW5kZXJlcklEID0gbnVsbDtcbnZhciBpbmplY3RlZEhvb2sgPSBudWxsO1xudmFyIGhhc0xvZ2dlZEVycm9yID0gZmFsc2U7XG52YXIgaXNEZXZUb29sc1ByZXNlbnQgPSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGluamVjdEludGVybmFscyhpbnRlcm5hbHMpIHtcbiAgaWYgKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gTm8gRGV2VG9vbHNcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgaG9vayA9IF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuICBpZiAoaG9vay5pc0Rpc2FibGVkKSB7XG4gICAgLy8gVGhpcyBpc24ndCBhIHJlYWwgcHJvcGVydHkgb24gdGhlIGhvb2ssIGJ1dCBpdCBjYW4gYmUgc2V0IHRvIG9wdCBvdXRcbiAgICAvLyBvZiBEZXZUb29scyBpbnRlZ3JhdGlvbiBhbmQgYXNzb2NpYXRlZCB3YXJuaW5ncyBhbmQgbG9ncy5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzM4NzdcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghaG9vay5zdXBwb3J0c0ZpYmVyKSB7XG4gICAge1xuICAgICAgZXJyb3IoJ1RoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBSZWFjdCBEZXZUb29scyBpcyB0b28gb2xkIGFuZCB3aWxsIG5vdCB3b3JrICcgKyAnd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFJlYWN0LiBQbGVhc2UgdXBkYXRlIFJlYWN0IERldlRvb2xzLiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1kZXZ0b29scycpO1xuICAgIH0gLy8gRGV2VG9vbHMgZXhpc3RzLCBldmVuIHRob3VnaCBpdCBkb2Vzbid0IHN1cHBvcnQgRmliZXIuXG5cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZW5kZXJlcklEID0gaG9vay5pbmplY3QoaW50ZXJuYWxzKTsgLy8gV2UgaGF2ZSBzdWNjZXNzZnVsbHkgaW5qZWN0ZWQsIHNvIG5vdyBpdCBpcyBzYWZlIHRvIHNldCB1cCBob29rcy5cblxuICAgIGluamVjdGVkSG9vayA9IGhvb2s7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIENhdGNoIGFsbCBlcnJvcnMgYmVjYXVzZSBpdCBpcyB1bnNhZmUgdG8gdGhyb3cgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuICAgIHtcbiAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzLicsIGVycik7XG4gICAgfVxuICB9IC8vIERldlRvb2xzIGV4aXN0c1xuXG5cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBvblNjaGVkdWxlUm9vdChyb290LCBjaGlsZHJlbikge1xuICB7XG4gICAgaWYgKGluamVjdGVkSG9vayAmJiB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uU2NoZWR1bGVGaWJlclJvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGluamVjdGVkSG9vay5vblNjaGVkdWxlRmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QsIGNoaWxkcmVuKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoICFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gb25Db21taXRSb290KHJvb3QsIHByaW9yaXR5TGV2ZWwpIHtcbiAgaWYgKGluamVjdGVkSG9vayAmJiB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBkaWRFcnJvciA9IChyb290LmN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gRGlkQ2FwdHVyZTtcblxuICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QsIHByaW9yaXR5TGV2ZWwsIGRpZEVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCB1bmRlZmluZWQsIGRpZEVycm9yKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gb25Db21taXRVbm1vdW50KGZpYmVyKSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQocmVuZGVyZXJJRCwgZmliZXIpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAge1xuICAgICAgICBpZiAoIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBTY2hlZHVsZXJfcnVuV2l0aFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayA9IFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLFxuICAgIFNjaGVkdWxlcl9jYW5jZWxDYWxsYmFjayA9IFNjaGVkdWxlci51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayxcbiAgICBTY2hlZHVsZXJfc2hvdWxkWWllbGQgPSBTY2hlZHVsZXIudW5zdGFibGVfc2hvdWxkWWllbGQsXG4gICAgU2NoZWR1bGVyX3JlcXVlc3RQYWludCA9IFNjaGVkdWxlci51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsXG4gICAgU2NoZWR1bGVyX25vdyQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdyxcbiAgICBTY2hlZHVsZXJfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSBTY2hlZHVsZXIudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsXG4gICAgU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9Vc2VyQmxvY2tpbmdQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfTm9ybWFsUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX0xvd1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0xvd1ByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9JZGxlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSWRsZVByaW9yaXR5O1xuXG57XG4gIC8vIFByb3ZpZGUgZXhwbGljaXQgZXJyb3IgbWVzc2FnZSB3aGVuIHByb2R1Y3Rpb24rcHJvZmlsaW5nIGJ1bmRsZSBvZiBlLmcuXG4gIC8vIHJlYWN0LWRvbSBpcyB1c2VkIHdpdGggcHJvZHVjdGlvbiAobm9uLXByb2ZpbGluZykgYnVuZGxlIG9mXG4gIC8vIHNjaGVkdWxlci90cmFjaW5nXG4gIGlmICghKHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYgIT0gbnVsbCAmJiB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIHJ1biB0aGUgcHJvZmlsaW5nIHZlcnNpb24gb2YgYSByZW5kZXJlciAoZm9yIGV4YW1wbGUsIGByZWFjdC1kb20vcHJvZmlsaW5nYCkgd2l0aG91dCBhbHNvIHJlcGxhY2luZyB0aGUgYHNjaGVkdWxlci90cmFjaW5nYCBtb2R1bGUgd2l0aCBgc2NoZWR1bGVyL3RyYWNpbmctcHJvZmlsaW5nYC4gWW91ciBidW5kbGVyIG1pZ2h0IGhhdmUgYSBzZXR0aW5nIGZvciBhbGlhc2luZyBib3RoIG1vZHVsZXMuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Byb2ZpbGluZ1wiICk7XG4gICAgfVxuICB9XG59XG5cbnZhciBmYWtlQ2FsbGJhY2tOb2RlID0ge307IC8vIEV4Y2VwdCBmb3IgTm9Qcmlvcml0eSwgdGhlc2UgY29ycmVzcG9uZCB0byBTY2hlZHVsZXIgcHJpb3JpdGllcy4gV2UgdXNlXG4vLyBhc2NlbmRpbmcgbnVtYmVycyBzbyB3ZSBjYW4gY29tcGFyZSB0aGVtIGxpa2UgbnVtYmVycy4gVGhleSBzdGFydCBhdCA5MCB0b1xuLy8gYXZvaWQgY2xhc2hpbmcgd2l0aCBTY2hlZHVsZXIncyBwcmlvcml0aWVzLlxuXG52YXIgSW1tZWRpYXRlUHJpb3JpdHkkMSA9IDk5O1xudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgPSA5ODtcbnZhciBOb3JtYWxQcmlvcml0eSQxID0gOTc7XG52YXIgTG93UHJpb3JpdHkkMSA9IDk2O1xudmFyIElkbGVQcmlvcml0eSQxID0gOTU7IC8vIE5vUHJpb3JpdHkgaXMgdGhlIGFic2VuY2Ugb2YgcHJpb3JpdHkuIEFsc28gUmVhY3Qtb25seS5cblxudmFyIE5vUHJpb3JpdHkkMSA9IDkwO1xudmFyIHNob3VsZFlpZWxkID0gU2NoZWR1bGVyX3Nob3VsZFlpZWxkO1xudmFyIHJlcXVlc3RQYWludCA9IC8vIEZhbGwgYmFjayBncmFjZWZ1bGx5IGlmIHdlJ3JlIHJ1bm5pbmcgYW4gb2xkZXIgdmVyc2lvbiBvZiBTY2hlZHVsZXIuXG5TY2hlZHVsZXJfcmVxdWVzdFBhaW50ICE9PSB1bmRlZmluZWQgPyBTY2hlZHVsZXJfcmVxdWVzdFBhaW50IDogZnVuY3Rpb24gKCkge307XG52YXIgc3luY1F1ZXVlID0gbnVsbDtcbnZhciBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IG51bGw7XG52YXIgaXNGbHVzaGluZ1N5bmNRdWV1ZSA9IGZhbHNlO1xudmFyIGluaXRpYWxUaW1lTXMkMSA9IFNjaGVkdWxlcl9ub3ckMSgpOyAvLyBJZiB0aGUgaW5pdGlhbCB0aW1lc3RhbXAgaXMgcmVhc29uYWJseSBzbWFsbCwgdXNlIFNjaGVkdWxlcidzIGBub3dgIGRpcmVjdGx5LlxuLy8gVGhpcyB3aWxsIGJlIHRoZSBjYXNlIGZvciBtb2Rlcm4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGBwZXJmb3JtYW5jZS5ub3dgLiBJblxuLy8gb2xkZXIgYnJvd3NlcnMsIFNjaGVkdWxlciBmYWxscyBiYWNrIHRvIGBEYXRlLm5vd2AsIHdoaWNoIHJldHVybnMgYSBVbml4XG4vLyB0aW1lc3RhbXAuIEluIHRoYXQgY2FzZSwgc3VidHJhY3QgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiB0aW1lIHRvIHNpbXVsYXRlXG4vLyB0aGUgYmVoYXZpb3Igb2YgcGVyZm9ybWFuY2Uubm93IGFuZCBrZWVwIG91ciB0aW1lcyBzbWFsbCBlbm91Z2ggdG8gZml0XG4vLyB3aXRoaW4gMzIgYml0cy5cbi8vIFRPRE86IENvbnNpZGVyIGxpZnRpbmcgdGhpcyBpbnRvIFNjaGVkdWxlci5cblxudmFyIG5vdyA9IGluaXRpYWxUaW1lTXMkMSA8IDEwMDAwID8gU2NoZWR1bGVyX25vdyQxIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gU2NoZWR1bGVyX25vdyQxKCkgLSBpbml0aWFsVGltZU1zJDE7XG59O1xuZnVuY3Rpb24gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSB7XG4gIHN3aXRjaCAoU2NoZWR1bGVyX2dldEN1cnJlbnRQcmlvcml0eUxldmVsKCkpIHtcbiAgICBjYXNlIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJbW1lZGlhdGVQcmlvcml0eSQxO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICByZXR1cm4gVXNlckJsb2NraW5nUHJpb3JpdHkkMjtcblxuICAgIGNhc2UgU2NoZWR1bGVyX05vcm1hbFByaW9yaXR5OlxuICAgICAgcmV0dXJuIE5vcm1hbFByaW9yaXR5JDE7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9Mb3dQcmlvcml0eTpcbiAgICAgIHJldHVybiBMb3dQcmlvcml0eSQxO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfSWRsZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIElkbGVQcmlvcml0eSQxO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gcHJpb3JpdHkgbGV2ZWwuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKSB7XG4gIHN3aXRjaCAocmVhY3RQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eTtcblxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHkkMjpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfVXNlckJsb2NraW5nUHJpb3JpdHk7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX05vcm1hbFByaW9yaXR5O1xuXG4gICAgY2FzZSBMb3dQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9Mb3dQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX0lkbGVQcmlvcml0eTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHByaW9yaXR5IGxldmVsLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5cbmZ1bmN0aW9uIHJ1bldpdGhQcmlvcml0eSQxKHJlYWN0UHJpb3JpdHlMZXZlbCwgZm4pIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSByZWFjdFByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShyZWFjdFByaW9yaXR5TGV2ZWwpO1xuICByZXR1cm4gU2NoZWR1bGVyX3J1bldpdGhQcmlvcml0eShwcmlvcml0eUxldmVsLCBmbik7XG59XG5mdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrKHJlYWN0UHJpb3JpdHlMZXZlbCwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSByZWFjdFByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShyZWFjdFByaW9yaXR5TGV2ZWwpO1xuICByZXR1cm4gU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgY2FsbGJhY2ssIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gc2NoZWR1bGVTeW5jQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgLy8gUHVzaCB0aGlzIGNhbGxiYWNrIGludG8gYW4gaW50ZXJuYWwgcXVldWUuIFdlJ2xsIGZsdXNoIHRoZXNlIGVpdGhlciBpblxuICAvLyB0aGUgbmV4dCB0aWNrLCBvciBlYXJsaWVyIGlmIHNvbWV0aGluZyBjYWxscyBgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZWAuXG4gIGlmIChzeW5jUXVldWUgPT09IG51bGwpIHtcbiAgICBzeW5jUXVldWUgPSBbY2FsbGJhY2tdOyAvLyBGbHVzaCB0aGUgcXVldWUgaW4gdGhlIG5leHQgdGljaywgYXQgdGhlIGVhcmxpZXN0LlxuXG4gICAgaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgPSBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayhTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHksIGZsdXNoU3luY0NhbGxiYWNrUXVldWVJbXBsKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBQdXNoIG9udG8gZXhpc3RpbmcgcXVldWUuIERvbid0IG5lZWQgdG8gc2NoZWR1bGUgYSBjYWxsYmFjayBiZWNhdXNlXG4gICAgLy8gd2UgYWxyZWFkeSBzY2hlZHVsZWQgb25lIHdoZW4gd2UgY3JlYXRlZCB0aGUgcXVldWUuXG4gICAgc3luY1F1ZXVlLnB1c2goY2FsbGJhY2spO1xuICB9XG5cbiAgcmV0dXJuIGZha2VDYWxsYmFja05vZGU7XG59XG5mdW5jdGlvbiBjYW5jZWxDYWxsYmFjayhjYWxsYmFja05vZGUpIHtcbiAgaWYgKGNhbGxiYWNrTm9kZSAhPT0gZmFrZUNhbGxiYWNrTm9kZSkge1xuICAgIFNjaGVkdWxlcl9jYW5jZWxDYWxsYmFjayhjYWxsYmFja05vZGUpO1xuICB9XG59XG5mdW5jdGlvbiBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCkge1xuICBpZiAoaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgIT09IG51bGwpIHtcbiAgICB2YXIgbm9kZSA9IGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlO1xuICAgIGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2sobm9kZSk7XG4gIH1cblxuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlSW1wbCgpO1xufVxuXG5mdW5jdGlvbiBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlSW1wbCgpIHtcbiAgaWYgKCFpc0ZsdXNoaW5nU3luY1F1ZXVlICYmIHN5bmNRdWV1ZSAhPT0gbnVsbCkge1xuICAgIC8vIFByZXZlbnQgcmUtZW50cmFuY3kuXG4gICAgaXNGbHVzaGluZ1N5bmNRdWV1ZSA9IHRydWU7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIF9pc1N5bmMyID0gdHJ1ZTtcbiAgICAgICAgdmFyIF9xdWV1ZSA9IHN5bmNRdWV1ZTtcbiAgICAgICAgcnVuV2l0aFByaW9yaXR5JDEoSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZvciAoOyBpIDwgX3F1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBfcXVldWVbaV07XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayhfaXNTeW5jMik7XG4gICAgICAgICAgICB9IHdoaWxlIChjYWxsYmFjayAhPT0gbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3luY1F1ZXVlID0gbnVsbDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIHNvbWV0aGluZyB0aHJvd3MsIGxlYXZlIHRoZSByZW1haW5pbmcgY2FsbGJhY2tzIG9uIHRoZSBxdWV1ZS5cbiAgICAgICAgaWYgKHN5bmNRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN5bmNRdWV1ZSA9IHN5bmNRdWV1ZS5zbGljZShpICsgMSk7XG4gICAgICAgIH0gLy8gUmVzdW1lIGZsdXNoaW5nIGluIHRoZSBuZXh0IHRpY2tcblxuXG4gICAgICAgIFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eSwgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaXNGbHVzaGluZ1N5bmNRdWV1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBUT0RPOiB0aGlzIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBnZXRzIGltcG9ydGVkIGR1cmluZyBidWlsZC5cbnZhciBSZWFjdFZlcnNpb24gPSAnMTcuMC4yJztcblxudmFyIE5vTW9kZSA9IDA7XG52YXIgU3RyaWN0TW9kZSA9IDE7IC8vIFRPRE86IFJlbW92ZSBCbG9ja2luZ01vZGUgYW5kIENvbmN1cnJlbnRNb2RlIGJ5IHJlYWRpbmcgZnJvbSB0aGUgcm9vdFxuLy8gdGFnIGluc3RlYWRcblxudmFyIEJsb2NraW5nTW9kZSA9IDI7XG52YXIgQ29uY3VycmVudE1vZGUgPSA0O1xudmFyIFByb2ZpbGVNb2RlID0gODtcbnZhciBEZWJ1Z1RyYWNpbmdNb2RlID0gMTY7XG5cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO1xudmFyIE5vVHJhbnNpdGlvbiA9IDA7XG5mdW5jdGlvbiByZXF1ZXN0Q3VycmVudFRyYW5zaXRpb24oKSB7XG4gIHJldHVybiBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xufVxuXG52YXIgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MgPSB7XG4gIHJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7fSxcbiAgZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9LFxuICByZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZzogZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge30sXG4gIGZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uICgpIHt9LFxuICBkaXNjYXJkUGVuZGluZ1dhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fVxufTtcblxue1xuICB2YXIgZmluZFN0cmljdFJvb3QgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICB2YXIgbWF5YmVTdHJpY3RSb290ID0gbnVsbDtcbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIG1heWJlU3RyaWN0Um9vdCA9IG5vZGU7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF5YmVTdHJpY3RSb290O1xuICB9O1xuXG4gIHZhciBzZXRUb1NvcnRlZFN0cmluZyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICBzZXQuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGFycmF5LnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnJheS5zb3J0KCkuam9pbignLCAnKTtcbiAgfTtcblxuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTsgLy8gVHJhY2tzIGNvbXBvbmVudHMgd2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBhYm91dC5cblxuICB2YXIgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcyA9IG5ldyBTZXQoKTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyA9IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHtcbiAgICAvLyBEZWR1cCBzdHJhdGVneTogV2FybiBvbmNlIHBlciBjb21wb25lbnQuXG4gICAgaWYgKGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuaGFzKGZpYmVyLnR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgJiYgLy8gRG9uJ3Qgd2FybiBhYm91dCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMuXG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSAmJiB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXZSBkbyBhbiBpbml0aWFsIHBhc3MgdG8gZ2F0aGVyIGNvbXBvbmVudCBuYW1lc1xuICAgIHZhciBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgfSAvLyBGaW5hbGx5LCB3ZSBmbHVzaCBhbGwgdGhlIHdhcm5pbmdzXG4gICAgLy8gVU5TQUZFXyBvbmVzIGJlZm9yZSB0aGUgZGVwcmVjYXRlZCBvbmVzLCBzaW5jZSB0aGV5J2xsIGJlICdsb3VkZXInXG5cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCBhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBzb3J0ZWROYW1lcyk7XG4gICAgfVxuXG4gICAgaWYgKFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCAnICsgJ2FuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArIFwiKiBJZiB5b3UncmUgdXBkYXRpbmcgc3RhdGUgd2hlbmV2ZXIgcHJvcHMgY2hhbmdlLCBcIiArICdyZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIG1lbW9pemF0aW9uIHRlY2huaXF1ZXMgb3IgbW92ZSBpdCB0byAnICsgJ3N0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIExlYXJuIG1vcmUgYXQ6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kZXJpdmVkLXN0YXRlXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMpO1xuICAgIH1cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzMiA9IHNldFRvU29ydGVkU3RyaW5nKFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkICcgKyAnYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczIpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczMgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyk7XG5cbiAgICAgIHdhcm4oJ2NvbXBvbmVudFdpbGxNb3VudCBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRNb3VudCwgYW5kIHNldCBpbml0aWFsIHN0YXRlIGluIHRoZSBjb25zdHJ1Y3Rvci5cXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxNb3VudCB0byBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMzKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzNCA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyk7XG5cbiAgICAgIHdhcm4oJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyBcIiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgcmVmYWN0b3IgeW91ciBcIiArICdjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gJyArICdzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBMZWFybiBtb3JlIGF0OiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGVyaXZlZC1zdGF0ZVxcbicgKyAnKiBSZW5hbWUgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzNCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczUgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsVXBkYXRlIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxVcGRhdGUgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nID0gbmV3IE1hcCgpOyAvLyBUcmFja3MgY29tcG9uZW50cyB3ZSBoYXZlIGFscmVhZHkgd2FybmVkIGFib3V0LlxuXG4gIHZhciBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0ID0gbmV3IFNldCgpO1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge1xuICAgIHZhciBzdHJpY3RSb290ID0gZmluZFN0cmljdFJvb3QoZmliZXIpO1xuXG4gICAgaWYgKHN0cmljdFJvb3QgPT09IG51bGwpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB0byBmaW5kIGEgU3RyaWN0TW9kZSBjb21wb25lbnQgaW4gYSBzdHJpY3QgbW9kZSB0cmVlLiAnICsgJ1RoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIERlZHVwIHN0cmF0ZWd5OiBXYXJuIG9uY2UgcGVyIGNvbXBvbmVudC5cblxuXG4gICAgaWYgKGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQuaGFzKGZpYmVyLnR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHdhcm5pbmdzRm9yUm9vdCA9IHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5nZXQoc3RyaWN0Um9vdCk7XG5cbiAgICBpZiAoZmliZXIudHlwZS5jb250ZXh0VHlwZXMgIT0gbnVsbCB8fCBmaWJlci50eXBlLmNoaWxkQ29udGV4dFR5cGVzICE9IG51bGwgfHwgaW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHdhcm5pbmdzRm9yUm9vdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHdhcm5pbmdzRm9yUm9vdCA9IFtdO1xuICAgICAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuc2V0KHN0cmljdFJvb3QsIHdhcm5pbmdzRm9yUm9vdCk7XG4gICAgICB9XG5cbiAgICAgIHdhcm5pbmdzRm9yUm9vdC5wdXNoKGZpYmVyKTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZm9yRWFjaChmdW5jdGlvbiAoZmliZXJBcnJheSwgc3RyaWN0Um9vdCkge1xuICAgICAgaWYgKGZpYmVyQXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpcnN0RmliZXIgPSBmaWJlckFycmF5WzBdO1xuICAgICAgdmFyIHVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgZmliZXJBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICB1bmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyh1bmlxdWVOYW1lcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaXJzdEZpYmVyKTtcblxuICAgICAgICBlcnJvcignTGVnYWN5IGNvbnRleHQgQVBJIGhhcyBiZWVuIGRldGVjdGVkIHdpdGhpbiBhIHN0cmljdC1tb2RlIHRyZWUuJyArICdcXG5cXG5UaGUgb2xkIEFQSSB3aWxsIGJlIHN1cHBvcnRlZCBpbiBhbGwgMTYueCByZWxlYXNlcywgYnV0IGFwcGxpY2F0aW9ucyAnICsgJ3VzaW5nIGl0IHNob3VsZCBtaWdyYXRlIHRvIHRoZSBuZXcgdmVyc2lvbi4nICsgJ1xcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycgKyAnXFxuXFxuTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2xlZ2FjeS1jb250ZXh0Jywgc29ydGVkTmFtZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5kaXNjYXJkUGVuZGluZ1dhcm5pbmdzID0gZnVuY3Rpb24gKCkge1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBuZXcgTWFwKCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBiYXNlUHJvcHMpIHtcbiAgaWYgKENvbXBvbmVudCAmJiBDb21wb25lbnQuZGVmYXVsdFByb3BzKSB7XG4gICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzLiBUYWtlbiBmcm9tIFJlYWN0RWxlbWVudFxuICAgIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIGJhc2VQcm9wcyk7XG5cbiAgICB2YXIgZGVmYXVsdFByb3BzID0gQ29tcG9uZW50LmRlZmF1bHRQcm9wcztcblxuICAgIGZvciAodmFyIHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VQcm9wcztcbn1cblxuLy8gTWF4IDMxIGJpdCBpbnRlZ2VyLiBUaGUgbWF4IGludGVnZXIgc2l6ZSBpbiBWOCBmb3IgMzItYml0IHN5c3RlbXMuXG4vLyBNYXRoLnBvdygyLCAzMCkgLSAxXG4vLyAwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVxudmFyIE1BWF9TSUdORURfMzFfQklUX0lOVCA9IDEwNzM3NDE4MjM7XG5cbnZhciB2YWx1ZUN1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKTtcbnZhciByZW5kZXJlclNpZ2lsO1xuXG57XG4gIC8vIFVzZSB0aGlzIHRvIGRldGVjdCBtdWx0aXBsZSByZW5kZXJlcnMgdXNpbmcgdGhlIHNhbWUgY29udGV4dFxuICByZW5kZXJlclNpZ2lsID0ge307XG59XG5cbnZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGw7XG52YXIgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbnZhciBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xudmFyIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbmZ1bmN0aW9uIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpIHtcbiAgLy8gVGhpcyBpcyBjYWxsZWQgcmlnaHQgYmVmb3JlIFJlYWN0IHlpZWxkcyBleGVjdXRpb24sIHRvIGVuc3VyZSBgcmVhZENvbnRleHRgXG4gIC8vIGNhbm5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGUgcmVuZGVyIHBoYXNlLlxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGw7XG4gIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG4gIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IG51bGw7XG5cbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpIHtcbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSB0cnVlO1xuICB9XG59XG5mdW5jdGlvbiBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHB1c2hQcm92aWRlcihwcm92aWRlckZpYmVyLCBuZXh0VmFsdWUpIHtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlckZpYmVyLnR5cGUuX2NvbnRleHQ7XG5cbiAge1xuICAgIHB1c2godmFsdWVDdXJzb3IsIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSwgcHJvdmlkZXJGaWJlcik7XG4gICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gbmV4dFZhbHVlO1xuXG4gICAge1xuICAgICAgaWYgKGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAhPT0gdW5kZWZpbmVkICYmIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAhPT0gbnVsbCAmJiBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHJlbmRlcmVyU2lnaWwpIHtcbiAgICAgICAgZXJyb3IoJ0RldGVjdGVkIG11bHRpcGxlIHJlbmRlcmVycyBjb25jdXJyZW50bHkgcmVuZGVyaW5nIHRoZSAnICsgJ3NhbWUgY29udGV4dCBwcm92aWRlci4gVGhpcyBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IHJlbmRlcmVyU2lnaWw7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3BQcm92aWRlcihwcm92aWRlckZpYmVyKSB7XG4gIHZhciBjdXJyZW50VmFsdWUgPSB2YWx1ZUN1cnNvci5jdXJyZW50O1xuICBwb3AodmFsdWVDdXJzb3IsIHByb3ZpZGVyRmliZXIpO1xuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyRmliZXIudHlwZS5fY29udGV4dDtcblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlO1xuICB9XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVDaGFuZ2VkQml0cyhjb250ZXh0LCBuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgaWYgKG9iamVjdElzKG9sZFZhbHVlLCBuZXdWYWx1ZSkpIHtcbiAgICAvLyBObyBjaGFuZ2VcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgY2hhbmdlZEJpdHMgPSB0eXBlb2YgY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPT09ICdmdW5jdGlvbicgPyBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0cyhvbGRWYWx1ZSwgbmV3VmFsdWUpIDogTUFYX1NJR05FRF8zMV9CSVRfSU5UO1xuXG4gICAge1xuICAgICAgaWYgKChjaGFuZ2VkQml0cyAmIE1BWF9TSUdORURfMzFfQklUX0lOVCkgIT09IGNoYW5nZWRCaXRzKSB7XG4gICAgICAgIGVycm9yKCdjYWxjdWxhdGVDaGFuZ2VkQml0czogRXhwZWN0ZWQgdGhlIHJldHVybiB2YWx1ZSB0byBiZSBhICcgKyAnMzEtYml0IGludGVnZXIuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzJywgY2hhbmdlZEJpdHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGFuZ2VkQml0cyB8IDA7XG4gIH1cbn1cbmZ1bmN0aW9uIHNjaGVkdWxlV29ya09uUGFyZW50UGF0aChwYXJlbnQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFVwZGF0ZSB0aGUgY2hpbGQgbGFuZXMgb2YgYWxsIHRoZSBhbmNlc3RvcnMsIGluY2x1ZGluZyB0aGUgYWx0ZXJuYXRlcy5cbiAgdmFyIG5vZGUgPSBwYXJlbnQ7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICB2YXIgYWx0ZXJuYXRlID0gbm9kZS5hbHRlcm5hdGU7XG5cbiAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhub2RlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgICAgbm9kZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhub2RlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcblxuICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiAhaXNTdWJzZXRPZkxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgIGFsdGVybmF0ZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOZWl0aGVyIGFsdGVybmF0ZSB3YXMgdXBkYXRlZCwgd2hpY2ggbWVhbnMgdGhlIHJlc3Qgb2YgdGhlXG4gICAgICAvLyBhbmNlc3RvciBwYXRoIGFscmVhZHkgaGFzIHN1ZmZpY2llbnQgcHJpb3JpdHkuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gIH1cbn1cbmZ1bmN0aW9uIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIGNoYW5nZWRCaXRzLCByZW5kZXJMYW5lcykge1xuICB2YXIgZmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICBpZiAoZmliZXIgIT09IG51bGwpIHtcbiAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBjaGlsZCB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICBmaWJlci5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgfVxuXG4gIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgIHZhciBuZXh0RmliZXIgPSB2b2lkIDA7IC8vIFZpc2l0IHRoaXMgZmliZXIuXG5cbiAgICB2YXIgbGlzdCA9IGZpYmVyLmRlcGVuZGVuY2llcztcblxuICAgIGlmIChsaXN0ICE9PSBudWxsKSB7XG4gICAgICBuZXh0RmliZXIgPSBmaWJlci5jaGlsZDtcbiAgICAgIHZhciBkZXBlbmRlbmN5ID0gbGlzdC5maXJzdENvbnRleHQ7XG5cbiAgICAgIHdoaWxlIChkZXBlbmRlbmN5ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IG1hdGNoZXMuXG4gICAgICAgIGlmIChkZXBlbmRlbmN5LmNvbnRleHQgPT09IGNvbnRleHQgJiYgKGRlcGVuZGVuY3kub2JzZXJ2ZWRCaXRzICYgY2hhbmdlZEJpdHMpICE9PSAwKSB7XG4gICAgICAgICAgLy8gTWF0Y2ghIFNjaGVkdWxlIGFuIHVwZGF0ZSBvbiB0aGlzIGZpYmVyLlxuICAgICAgICAgIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAvLyBTY2hlZHVsZSBhIGZvcmNlIHVwZGF0ZSBvbiB0aGUgd29yay1pbi1wcm9ncmVzcy5cbiAgICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIHBpY2tBcmJpdHJhcnlMYW5lKHJlbmRlckxhbmVzKSk7XG4gICAgICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7IC8vIFRPRE86IEJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIHdvcmstaW4tcHJvZ3Jlc3MsIHRoaXMgd2lsbCBhZGQgdGhlXG4gICAgICAgICAgICAvLyB1cGRhdGUgdG8gdGhlIGN1cnJlbnQgZmliZXIsIHRvbywgd2hpY2ggbWVhbnMgaXQgd2lsbCBwZXJzaXN0IGV2ZW4gaWZcbiAgICAgICAgICAgIC8vIHRoaXMgcmVuZGVyIGlzIHRocm93biBhd2F5LiBTaW5jZSBpdCdzIGEgcmFjZSBjb25kaXRpb24sIG5vdCBzdXJlIGl0J3NcbiAgICAgICAgICAgIC8vIHdvcnRoIGZpeGluZy5cblxuICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoZmliZXIubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzY2hlZHVsZVdvcmtPblBhcmVudFBhdGgoZmliZXIucmV0dXJuLCByZW5kZXJMYW5lcyk7IC8vIE1hcmsgdGhlIHVwZGF0ZWQgbGFuZXMgb24gdGhlIGxpc3QsIHRvby5cblxuICAgICAgICAgIGxpc3QubGFuZXMgPSBtZXJnZUxhbmVzKGxpc3QubGFuZXMsIHJlbmRlckxhbmVzKTsgLy8gU2luY2Ugd2UgYWxyZWFkeSBmb3VuZCBhIG1hdGNoLCB3ZSBjYW4gc3RvcCB0cmF2ZXJzaW5nIHRoZVxuICAgICAgICAgIC8vIGRlcGVuZGVuY3kgbGlzdC5cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVwZW5kZW5jeSA9IGRlcGVuZGVuY3kubmV4dDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZpYmVyLnRhZyA9PT0gQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgICAvLyBEb24ndCBzY2FuIGRlZXBlciBpZiB0aGlzIGlzIGEgbWF0Y2hpbmcgcHJvdmlkZXJcbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLnR5cGUgPyBudWxsIDogZmliZXIuY2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRyYXZlcnNlIGRvd24uXG4gICAgICBuZXh0RmliZXIgPSBmaWJlci5jaGlsZDtcbiAgICB9XG5cbiAgICBpZiAobmV4dEZpYmVyICE9PSBudWxsKSB7XG4gICAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBjaGlsZCB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICAgIG5leHRGaWJlci5yZXR1cm4gPSBmaWJlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gY2hpbGQuIFRyYXZlcnNlIHRvIG5leHQgc2libGluZy5cbiAgICAgIG5leHRGaWJlciA9IGZpYmVyO1xuXG4gICAgICB3aGlsZSAobmV4dEZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChuZXh0RmliZXIgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgLy8gV2UncmUgYmFjayB0byB0aGUgcm9vdCBvZiB0aGlzIHN1YnRyZWUuIEV4aXQuXG4gICAgICAgICAgbmV4dEZpYmVyID0gbnVsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWJsaW5nID0gbmV4dEZpYmVyLnNpYmxpbmc7XG5cbiAgICAgICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBzaWJsaW5nIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgICAgICAgIHNpYmxpbmcucmV0dXJuID0gbmV4dEZpYmVyLnJldHVybjtcbiAgICAgICAgICBuZXh0RmliZXIgPSBzaWJsaW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IC8vIE5vIG1vcmUgc2libGluZ3MuIFRyYXZlcnNlIHVwLlxuXG5cbiAgICAgICAgbmV4dEZpYmVyID0gbmV4dEZpYmVyLnJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWJlciA9IG5leHRGaWJlcjtcbiAgfVxufVxuZnVuY3Rpb24gcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG4gIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IG51bGw7XG4gIHZhciBkZXBlbmRlbmNpZXMgPSB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXM7XG5cbiAgaWYgKGRlcGVuZGVuY2llcyAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdENvbnRleHQgPSBkZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0O1xuXG4gICAgaWYgKGZpcnN0Q29udGV4dCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGluY2x1ZGVzU29tZUxhbmUoZGVwZW5kZW5jaWVzLmxhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgICAgLy8gQ29udGV4dCBsaXN0IGhhcyBhIHBlbmRpbmcgdXBkYXRlLiBNYXJrIHRoYXQgdGhpcyBmaWJlciBwZXJmb3JtZWQgd29yay5cbiAgICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICAgIH0gLy8gUmVzZXQgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgbGlzdFxuXG5cbiAgICAgIGRlcGVuZGVuY2llcy5maXJzdENvbnRleHQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gIHtcbiAgICAvLyBUaGlzIHdhcm5pbmcgd291bGQgZmlyZSBpZiB5b3UgcmVhZCBjb250ZXh0IGluc2lkZSBhIEhvb2sgbGlrZSB1c2VNZW1vLlxuICAgIC8vIFVubGlrZSB0aGUgY2xhc3MgY2hlY2sgYmVsb3csIGl0J3Mgbm90IGVuZm9yY2VkIGluIHByb2R1Y3Rpb24gZm9yIHBlcmYuXG4gICAgaWYgKGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYpIHtcbiAgICAgIGVycm9yKCdDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiAnICsgJ0luIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuICcgKyAnSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90ICcgKyAnaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAobGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID09PSBjb250ZXh0KSA7IGVsc2UgaWYgKG9ic2VydmVkQml0cyA9PT0gZmFsc2UgfHwgb2JzZXJ2ZWRCaXRzID09PSAwKSA7IGVsc2Uge1xuICAgIHZhciByZXNvbHZlZE9ic2VydmVkQml0czsgLy8gQXZvaWQgZGVvcHRpbmcgb24gb2JzZXJ2YWJsZSBhcmd1bWVudHMgb3IgaGV0ZXJvZ2VuZW91cyB0eXBlcy5cblxuICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZWRCaXRzICE9PSAnbnVtYmVyJyB8fCBvYnNlcnZlZEJpdHMgPT09IE1BWF9TSUdORURfMzFfQklUX0lOVCkge1xuICAgICAgLy8gT2JzZXJ2ZSBhbGwgdXBkYXRlcy5cbiAgICAgIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IGNvbnRleHQ7XG4gICAgICByZXNvbHZlZE9ic2VydmVkQml0cyA9IE1BWF9TSUdORURfMzFfQklUX0lOVDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZWRPYnNlcnZlZEJpdHMgPSBvYnNlcnZlZEJpdHM7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHRJdGVtID0ge1xuICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgIG9ic2VydmVkQml0czogcmVzb2x2ZWRPYnNlcnZlZEJpdHMsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcblxuICAgIGlmIChsYXN0Q29udGV4dERlcGVuZGVuY3kgPT09IG51bGwpIHtcbiAgICAgIGlmICghKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyICE9PSBudWxsKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90IGluc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBUaGlzIGlzIHRoZSBmaXJzdCBkZXBlbmRlbmN5IGZvciB0aGlzIGNvbXBvbmVudC4gQ3JlYXRlIGEgbmV3IGxpc3QuXG5cblxuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gY29udGV4dEl0ZW07XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5kZXBlbmRlbmNpZXMgPSB7XG4gICAgICAgIGxhbmVzOiBOb0xhbmVzLFxuICAgICAgICBmaXJzdENvbnRleHQ6IGNvbnRleHRJdGVtLFxuICAgICAgICByZXNwb25kZXJzOiBudWxsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBcHBlbmQgYSBuZXcgY29udGV4dCBpdGVtLlxuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbGFzdENvbnRleHREZXBlbmRlbmN5Lm5leHQgPSBjb250ZXh0SXRlbTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA7XG59XG5cbnZhciBVcGRhdGVTdGF0ZSA9IDA7XG52YXIgUmVwbGFjZVN0YXRlID0gMTtcbnZhciBGb3JjZVVwZGF0ZSA9IDI7XG52YXIgQ2FwdHVyZVVwZGF0ZSA9IDM7IC8vIEdsb2JhbCBzdGF0ZSB0aGF0IGlzIHJlc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgY2FsbGluZyBgcHJvY2Vzc1VwZGF0ZVF1ZXVlYC5cbi8vIEl0IHNob3VsZCBvbmx5IGJlIHJlYWQgcmlnaHQgYWZ0ZXIgY2FsbGluZyBgcHJvY2Vzc1VwZGF0ZVF1ZXVlYCwgdmlhXG4vLyBgY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZ2AuXG5cbnZhciBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGU7XG52YXIgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlO1xuXG57XG4gIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSBmYWxzZTtcbiAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKGZpYmVyKSB7XG4gIHZhciBxdWV1ZSA9IHtcbiAgICBiYXNlU3RhdGU6IGZpYmVyLm1lbW9pemVkU3RhdGUsXG4gICAgZmlyc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgIGxhc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgIHNoYXJlZDoge1xuICAgICAgcGVuZGluZzogbnVsbFxuICAgIH0sXG4gICAgZWZmZWN0czogbnVsbFxuICB9O1xuICBmaWJlci51cGRhdGVRdWV1ZSA9IHF1ZXVlO1xufVxuZnVuY3Rpb24gY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICAvLyBDbG9uZSB0aGUgdXBkYXRlIHF1ZXVlIGZyb20gY3VycmVudC4gVW5sZXNzIGl0J3MgYWxyZWFkeSBhIGNsb25lLlxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgaWYgKHF1ZXVlID09PSBjdXJyZW50UXVldWUpIHtcbiAgICB2YXIgY2xvbmUgPSB7XG4gICAgICBiYXNlU3RhdGU6IGN1cnJlbnRRdWV1ZS5iYXNlU3RhdGUsXG4gICAgICBmaXJzdEJhc2VVcGRhdGU6IGN1cnJlbnRRdWV1ZS5maXJzdEJhc2VVcGRhdGUsXG4gICAgICBsYXN0QmFzZVVwZGF0ZTogY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlLFxuICAgICAgc2hhcmVkOiBjdXJyZW50UXVldWUuc2hhcmVkLFxuICAgICAgZWZmZWN0czogY3VycmVudFF1ZXVlLmVmZmVjdHNcbiAgICB9O1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY2xvbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IHtcbiAgICBldmVudFRpbWU6IGV2ZW50VGltZSxcbiAgICBsYW5lOiBsYW5lLFxuICAgIHRhZzogVXBkYXRlU3RhdGUsXG4gICAgcGF5bG9hZDogbnVsbCxcbiAgICBjYWxsYmFjazogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIHJldHVybiB1cGRhdGU7XG59XG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmliZXIudXBkYXRlUXVldWU7XG5cbiAgaWYgKHVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgLy8gT25seSBvY2N1cnMgaWYgdGhlIGZpYmVyIGhhcyBiZWVuIHVubW91bnRlZC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2hhcmVkUXVldWUgPSB1cGRhdGVRdWV1ZS5zaGFyZWQ7XG4gIHZhciBwZW5kaW5nID0gc2hhcmVkUXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZyA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZS4gQ3JlYXRlIGEgY2lyY3VsYXIgbGlzdC5cbiAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dDtcbiAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gIH1cblxuICBzaGFyZWRRdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuXG4gIHtcbiAgICBpZiAoY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID09PSBzaGFyZWRRdWV1ZSAmJiAhZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSkge1xuICAgICAgZXJyb3IoJ0FuIHVwZGF0ZSAoc2V0U3RhdGUsIHJlcGxhY2VTdGF0ZSwgb3IgZm9yY2VVcGRhdGUpIHdhcyBzY2hlZHVsZWQgJyArICdmcm9tIGluc2lkZSBhbiB1cGRhdGUgZnVuY3Rpb24uIFVwZGF0ZSBmdW5jdGlvbnMgc2hvdWxkIGJlIHB1cmUsICcgKyAnd2l0aCB6ZXJvIHNpZGUtZWZmZWN0cy4gQ29uc2lkZXIgdXNpbmcgY29tcG9uZW50RGlkVXBkYXRlIG9yIGEgJyArICdjYWxsYmFjay4nKTtcblxuICAgICAgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGNhcHR1cmVkVXBkYXRlKSB7XG4gIC8vIENhcHR1cmVkIHVwZGF0ZXMgYXJlIHVwZGF0ZXMgdGhhdCBhcmUgdGhyb3duIGJ5IGEgY2hpbGQgZHVyaW5nIHRoZSByZW5kZXJcbiAgLy8gcGhhc2UuIFRoZXkgc2hvdWxkIGJlIGRpc2NhcmRlZCBpZiB0aGUgcmVuZGVyIGlzIGFib3J0ZWQuIFRoZXJlZm9yZSxcbiAgLy8gd2Ugc2hvdWxkIG9ubHkgcHV0IHRoZW0gb24gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUsIG5vdCB0aGUgY3VycmVudCBvbmUuXG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlOyAvLyBDaGVjayBpZiB0aGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSBpcyBhIGNsb25lLlxuXG4gIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgICBpZiAocXVldWUgPT09IGN1cnJlbnRRdWV1ZSkge1xuICAgICAgLy8gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgaXMgdGhlIHNhbWUgYXMgY3VycmVudC4gVGhpcyBoYXBwZW5zIHdoZW5cbiAgICAgIC8vIHdlIGJhaWwgb3V0IG9uIGEgcGFyZW50IGZpYmVyIHRoYXQgdGhlbiBjYXB0dXJlcyBhbiBlcnJvciB0aHJvd24gYnlcbiAgICAgIC8vIGEgY2hpbGQuIFNpbmNlIHdlIHdhbnQgdG8gYXBwZW5kIHRoZSB1cGRhdGUgb25seSB0byB0aGUgd29yay1pblxuICAgICAgLy8gLXByb2dyZXNzIHF1ZXVlLCB3ZSBuZWVkIHRvIGNsb25lIHRoZSB1cGRhdGVzLiBXZSB1c3VhbGx5IGNsb25lIGR1cmluZ1xuICAgICAgLy8gcHJvY2Vzc1VwZGF0ZVF1ZXVlLCBidXQgdGhhdCBkaWRuJ3QgaGFwcGVuIGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlXG4gICAgICAvLyBza2lwcGVkIG92ZXIgdGhlIHBhcmVudCB3aGVuIHdlIGJhaWxlZCBvdXQuXG4gICAgICB2YXIgbmV3Rmlyc3QgPSBudWxsO1xuICAgICAgdmFyIG5ld0xhc3QgPSBudWxsO1xuICAgICAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZTtcblxuICAgICAgaWYgKGZpcnN0QmFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBMb29wIHRocm91Z2ggdGhlIHVwZGF0ZXMgYW5kIGNsb25lIHRoZW0uXG4gICAgICAgIHZhciB1cGRhdGUgPSBmaXJzdEJhc2VVcGRhdGU7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlLmV2ZW50VGltZSxcbiAgICAgICAgICAgIGxhbmU6IHVwZGF0ZS5sYW5lLFxuICAgICAgICAgICAgdGFnOiB1cGRhdGUudGFnLFxuICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAobmV3TGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xhc3QubmV4dCA9IGNsb25lO1xuICAgICAgICAgICAgbmV3TGFzdCA9IGNsb25lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgICAgICB9IHdoaWxlICh1cGRhdGUgIT09IG51bGwpOyAvLyBBcHBlbmQgdGhlIGNhcHR1cmVkIHVwZGF0ZSB0aGUgZW5kIG9mIHRoZSBjbG9uZWQgbGlzdC5cblxuXG4gICAgICAgIGlmIChuZXdMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3TGFzdC5uZXh0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgICAgbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGVyZSBhcmUgbm8gYmFzZSB1cGRhdGVzLlxuICAgICAgICBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgIH1cblxuICAgICAgcXVldWUgPSB7XG4gICAgICAgIGJhc2VTdGF0ZTogY3VycmVudFF1ZXVlLmJhc2VTdGF0ZSxcbiAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBuZXdGaXJzdCxcbiAgICAgICAgbGFzdEJhc2VVcGRhdGU6IG5ld0xhc3QsXG4gICAgICAgIHNoYXJlZDogY3VycmVudFF1ZXVlLnNoYXJlZCxcbiAgICAgICAgZWZmZWN0czogY3VycmVudFF1ZXVlLmVmZmVjdHNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHF1ZXVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuXG5cbiAgdmFyIGxhc3RCYXNlVXBkYXRlID0gcXVldWUubGFzdEJhc2VVcGRhdGU7XG5cbiAgaWYgKGxhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgcXVldWUuZmlyc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgbGFzdEJhc2VVcGRhdGUubmV4dCA9IGNhcHR1cmVkVXBkYXRlO1xuICB9XG5cbiAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBjYXB0dXJlZFVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdGVGcm9tVXBkYXRlKHdvcmtJblByb2dyZXNzLCBxdWV1ZSwgdXBkYXRlLCBwcmV2U3RhdGUsIG5leHRQcm9wcywgaW5zdGFuY2UpIHtcbiAgc3dpdGNoICh1cGRhdGUudGFnKSB7XG4gICAgY2FzZSBSZXBsYWNlU3RhdGU6XG4gICAgICB7XG4gICAgICAgIHZhciBwYXlsb2FkID0gdXBkYXRlLnBheWxvYWQ7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gVXBkYXRlciBmdW5jdGlvblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgbmV4dFN0YXRlID0gcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV4dFN0YXRlO1xuICAgICAgICB9IC8vIFN0YXRlIG9iamVjdFxuXG5cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICB9XG5cbiAgICBjYXNlIENhcHR1cmVVcGRhdGU6XG4gICAgICB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG4gICAgICB9XG4gICAgLy8gSW50ZW50aW9uYWwgZmFsbHRocm91Z2hcblxuICAgIGNhc2UgVXBkYXRlU3RhdGU6XG4gICAgICB7XG4gICAgICAgIHZhciBfcGF5bG9hZCA9IHVwZGF0ZS5wYXlsb2FkO1xuICAgICAgICB2YXIgcGFydGlhbFN0YXRlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgX3BheWxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IF9wYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIF9wYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUGFydGlhbCBzdGF0ZSBvYmplY3RcbiAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBfcGF5bG9hZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0aWFsU3RhdGUgPT09IG51bGwgfHwgcGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBOdWxsIGFuZCB1bmRlZmluZWQgYXJlIHRyZWF0ZWQgYXMgbm8tb3BzLlxuICAgICAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgICAgIH0gLy8gTWVyZ2UgdGhlIHBhcnRpYWwgc3RhdGUgYW5kIHRoZSBwcmV2aW91cyBzdGF0ZS5cblxuXG4gICAgICAgIHJldHVybiBfYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZvcmNlVXBkYXRlOlxuICAgICAge1xuICAgICAgICBoYXNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gcHJldlN0YXRlO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIHByb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyBpcyBhbHdheXMgbm9uLW51bGwgb24gYSBDbGFzc0NvbXBvbmVudCBvciBIb3N0Um9vdFxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcblxuICB7XG4gICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gcXVldWUuc2hhcmVkO1xuICB9XG5cbiAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZTtcbiAgdmFyIGxhc3RCYXNlVXBkYXRlID0gcXVldWUubGFzdEJhc2VVcGRhdGU7IC8vIENoZWNrIGlmIHRoZXJlIGFyZSBwZW5kaW5nIHVwZGF0ZXMuIElmIHNvLCB0cmFuc2ZlciB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuXG4gIHZhciBwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZztcblxuICBpZiAocGVuZGluZ1F1ZXVlICE9PSBudWxsKSB7XG4gICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsOyAvLyBUaGUgcGVuZGluZyBxdWV1ZSBpcyBjaXJjdWxhci4gRGlzY29ubmVjdCB0aGUgcG9pbnRlciBiZXR3ZWVuIGZpcnN0XG4gICAgLy8gYW5kIGxhc3Qgc28gdGhhdCBpdCdzIG5vbi1jaXJjdWxhci5cblxuICAgIHZhciBsYXN0UGVuZGluZ1VwZGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICB2YXIgZmlyc3RQZW5kaW5nVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICBsYXN0UGVuZGluZ1VwZGF0ZS5uZXh0ID0gbnVsbDsgLy8gQXBwZW5kIHBlbmRpbmcgdXBkYXRlcyB0byBiYXNlIHF1ZXVlXG5cbiAgICBpZiAobGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgIGZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdEJhc2VVcGRhdGUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICB9XG5cbiAgICBsYXN0QmFzZVVwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlOyAvLyBJZiB0aGVyZSdzIGEgY3VycmVudCBxdWV1ZSwgYW5kIGl0J3MgZGlmZmVyZW50IGZyb20gdGhlIGJhc2UgcXVldWUsIHRoZW5cbiAgICAvLyB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRoZSB1cGRhdGVzIHRvIHRoYXQgcXVldWUsIHRvby4gQmVjYXVzZSB0aGUgYmFzZVxuICAgIC8vIHF1ZXVlIGlzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IHdpdGggbm8gY3ljbGVzLCB3ZSBjYW4gYXBwZW5kIHRvIGJvdGhcbiAgICAvLyBsaXN0cyBhbmQgdGFrZSBhZHZhbnRhZ2Ugb2Ygc3RydWN0dXJhbCBzaGFyaW5nLlxuICAgIC8vIFRPRE86IFBhc3MgYGN1cnJlbnRgIGFzIGFyZ3VtZW50XG5cbiAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIGFsd2F5cyBub24tbnVsbCBvbiBhIENsYXNzQ29tcG9uZW50IG9yIEhvc3RSb290XG4gICAgICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgIHZhciBjdXJyZW50TGFzdEJhc2VVcGRhdGUgPSBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGU7XG5cbiAgICAgIGlmIChjdXJyZW50TGFzdEJhc2VVcGRhdGUgIT09IGxhc3RCYXNlVXBkYXRlKSB7XG4gICAgICAgIGlmIChjdXJyZW50TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICBjdXJyZW50UXVldWUuZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFRoZXNlIHZhbHVlcyBtYXkgY2hhbmdlIGFzIHdlIHByb2Nlc3MgdGhlIHF1ZXVlLlxuXG5cbiAgaWYgKGZpcnN0QmFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdCBvZiB1cGRhdGVzIHRvIGNvbXB1dGUgdGhlIHJlc3VsdC5cbiAgICB2YXIgbmV3U3RhdGUgPSBxdWV1ZS5iYXNlU3RhdGU7IC8vIFRPRE86IERvbid0IG5lZWQgdG8gYWNjdW11bGF0ZSB0aGlzLiBJbnN0ZWFkLCB3ZSBjYW4gcmVtb3ZlIHJlbmRlckxhbmVzXG4gICAgLy8gZnJvbSB0aGUgb3JpZ2luYWwgbGFuZXMuXG5cbiAgICB2YXIgbmV3TGFuZXMgPSBOb0xhbmVzO1xuICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgIHZhciBuZXdGaXJzdEJhc2VVcGRhdGUgPSBudWxsO1xuICAgIHZhciBuZXdMYXN0QmFzZVVwZGF0ZSA9IG51bGw7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcblxuICAgIGRvIHtcbiAgICAgIHZhciB1cGRhdGVMYW5lID0gdXBkYXRlLmxhbmU7XG4gICAgICB2YXIgdXBkYXRlRXZlbnRUaW1lID0gdXBkYXRlLmV2ZW50VGltZTtcblxuICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmUpKSB7XG4gICAgICAgIC8vIFByaW9yaXR5IGlzIGluc3VmZmljaWVudC4gU2tpcCB0aGlzIHVwZGF0ZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3RcbiAgICAgICAgLy8gc2tpcHBlZCB1cGRhdGUsIHRoZSBwcmV2aW91cyB1cGRhdGUvc3RhdGUgaXMgdGhlIG5ldyBiYXNlXG4gICAgICAgIC8vIHVwZGF0ZS9zdGF0ZS5cbiAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlRXZlbnRUaW1lLFxuICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgdGFnOiB1cGRhdGUudGFnLFxuICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgIGNhbGxiYWNrOiB1cGRhdGUuY2FsbGJhY2ssXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChuZXdMYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0ZpcnN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlID0gY2xvbmU7XG4gICAgICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3TGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gY2xvbmU7XG4gICAgICAgIH0gLy8gVXBkYXRlIHRoZSByZW1haW5pbmcgcHJpb3JpdHkgaW4gdGhlIHF1ZXVlLlxuXG5cbiAgICAgICAgbmV3TGFuZXMgPSBtZXJnZUxhbmVzKG5ld0xhbmVzLCB1cGRhdGVMYW5lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgdXBkYXRlIGRvZXMgaGF2ZSBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2Nsb25lID0ge1xuICAgICAgICAgICAgZXZlbnRUaW1lOiB1cGRhdGVFdmVudFRpbWUsXG4gICAgICAgICAgICAvLyBUaGlzIHVwZGF0ZSBpcyBnb2luZyB0byBiZSBjb21taXR0ZWQgc28gd2UgbmV2ZXIgd2FudCB1bmNvbW1pdFxuICAgICAgICAgICAgLy8gaXQuIFVzaW5nIE5vTGFuZSB3b3JrcyBiZWNhdXNlIDAgaXMgYSBzdWJzZXQgb2YgYWxsIGJpdG1hc2tzLCBzb1xuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIG5ldmVyIGJlIHNraXBwZWQgYnkgdGhlIGNoZWNrIGFib3ZlLlxuICAgICAgICAgICAgbGFuZTogTm9MYW5lLFxuICAgICAgICAgICAgdGFnOiB1cGRhdGUudGFnLFxuICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgbmV3TGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gX2Nsb25lO1xuICAgICAgICB9IC8vIFByb2Nlc3MgdGhpcyB1cGRhdGUuXG5cblxuICAgICAgICBuZXdTdGF0ZSA9IGdldFN0YXRlRnJvbVVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgcXVldWUsIHVwZGF0ZSwgbmV3U3RhdGUsIHByb3BzLCBpbnN0YW5jZSk7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHVwZGF0ZS5jYWxsYmFjaztcblxuICAgICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBDYWxsYmFjaztcbiAgICAgICAgICB2YXIgZWZmZWN0cyA9IHF1ZXVlLmVmZmVjdHM7XG5cbiAgICAgICAgICBpZiAoZWZmZWN0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcXVldWUuZWZmZWN0cyA9IFt1cGRhdGVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlZmZlY3RzLnB1c2godXBkYXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG5cbiAgICAgIGlmICh1cGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG5cbiAgICAgICAgaWYgKHBlbmRpbmdRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIGZyb20gaW5zaWRlIGEgcmVkdWNlci4gQWRkIHRoZSBuZXdcbiAgICAgICAgICAvLyBwZW5kaW5nIHVwZGF0ZXMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBhbmQga2VlcCBwcm9jZXNzaW5nLlxuICAgICAgICAgIHZhciBfbGFzdFBlbmRpbmdVcGRhdGUgPSBwZW5kaW5nUXVldWU7IC8vIEludGVudGlvbmFsbHkgdW5zb3VuZC4gUGVuZGluZyB1cGRhdGVzIGZvcm0gYSBjaXJjdWxhciBsaXN0LCBidXQgd2VcbiAgICAgICAgICAvLyB1bnJhdmVsIHRoZW0gd2hlbiB0cmFuc2ZlcnJpbmcgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cblxuICAgICAgICAgIHZhciBfZmlyc3RQZW5kaW5nVXBkYXRlID0gX2xhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgICAgICAgX2xhc3RQZW5kaW5nVXBkYXRlLm5leHQgPSBudWxsO1xuICAgICAgICAgIHVwZGF0ZSA9IF9maXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgICAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBfbGFzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH1cblxuICAgIHF1ZXVlLmJhc2VTdGF0ZSA9IG5ld0Jhc2VTdGF0ZTtcbiAgICBxdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBuZXdGaXJzdEJhc2VVcGRhdGU7XG4gICAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZTsgLy8gU2V0IHRoZSByZW1haW5pbmcgZXhwaXJhdGlvbiB0aW1lIHRvIGJlIHdoYXRldmVyIGlzIHJlbWFpbmluZyBpbiB0aGUgcXVldWUuXG4gICAgLy8gVGhpcyBzaG91bGQgYmUgZmluZSBiZWNhdXNlIHRoZSBvbmx5IHR3byBvdGhlciB0aGluZ3MgdGhhdCBjb250cmlidXRlIHRvXG4gICAgLy8gZXhwaXJhdGlvbiB0aW1lIGFyZSBwcm9wcyBhbmQgY29udGV4dC4gV2UncmUgYWxyZWFkeSBpbiB0aGUgbWlkZGxlIG9mIHRoZVxuICAgIC8vIGJlZ2luIHBoYXNlIGJ5IHRoZSB0aW1lIHdlIHN0YXJ0IHByb2Nlc3NpbmcgdGhlIHF1ZXVlLCBzbyB3ZSd2ZSBhbHJlYWR5XG4gICAgLy8gZGVhbHQgd2l0aCB0aGUgcHJvcHMuIENvbnRleHQgaW4gY29tcG9uZW50cyB0aGF0IHNwZWNpZnlcbiAgICAvLyBzaG91bGRDb21wb25lbnRVcGRhdGUgaXMgdHJpY2t5OyBidXQgd2UnbGwgaGF2ZSB0byBhY2NvdW50IGZvclxuICAgIC8vIHRoYXQgcmVnYXJkbGVzcy5cblxuICAgIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMobmV3TGFuZXMpO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbmV3TGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAge1xuICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gIGlmICghKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCBhcyBjYWxsYmFjay4gRXhwZWN0ZWQgYSBmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogXCIgKyBjYWxsYmFjayApO1xuICAgIH1cbiAgfVxuXG4gIGNhbGxiYWNrLmNhbGwoY29udGV4dCk7XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCkge1xuICBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xufVxuZnVuY3Rpb24gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHtcbiAgcmV0dXJuIGhhc0ZvcmNlVXBkYXRlO1xufVxuZnVuY3Rpb24gY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFF1ZXVlLCBpbnN0YW5jZSkge1xuICAvLyBDb21taXQgdGhlIGVmZmVjdHNcbiAgdmFyIGVmZmVjdHMgPSBmaW5pc2hlZFF1ZXVlLmVmZmVjdHM7XG4gIGZpbmlzaGVkUXVldWUuZWZmZWN0cyA9IG51bGw7XG5cbiAgaWYgKGVmZmVjdHMgIT09IG51bGwpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVmZmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlZmZlY3QgPSBlZmZlY3RzW2ldO1xuICAgICAgdmFyIGNhbGxiYWNrID0gZWZmZWN0LmNhbGxiYWNrO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgZWZmZWN0LmNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBpbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBmYWtlSW50ZXJuYWxJbnN0YW5jZSA9IHt9O1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5OyAvLyBSZWFjdC5Db21wb25lbnQgdXNlcyBhIHNoYXJlZCBmcm96ZW4gb2JqZWN0IGJ5IGRlZmF1bHQuXG4vLyBXZSdsbCB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBpbml0aWFsaXplIGxlZ2FjeSByZWZzLlxuXG52YXIgZW1wdHlSZWZzT2JqZWN0ID0gbmV3IFJlYWN0LkNvbXBvbmVudCgpLnJlZnM7XG52YXIgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGU7XG52YXIgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGU7XG52YXIgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlO1xudmFyIHdhcm5PbkludmFsaWRDYWxsYmFjaztcbnZhciBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcztcbnZhciBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGU7XG5cbntcbiAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50ID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZSA9IG5ldyBTZXQoKTtcbiAgdmFyIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjayA9IG5ldyBTZXQoKTtcblxuICB3YXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwgfHwgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGtleSA9IGNhbGxlck5hbWUgKyAnXycgKyBjYWxsYmFjaztcblxuICAgIGlmICghZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmhhcyhrZXkpKSB7XG4gICAgICBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suYWRkKGtleSk7XG5cbiAgICAgIGVycm9yKCclcyguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGVyTmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfTtcblxuICB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGUgPSBmdW5jdGlvbiAodHlwZSwgcGFydGlhbFN0YXRlKSB7XG4gICAgaWYgKHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclcy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKTogQSB2YWxpZCBzdGF0ZSBvYmplY3QgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQuICcgKyAnWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTsgLy8gVGhpcyBpcyBzbyBncm9zcyBidXQgaXQncyBhdCBsZWFzdCBub24tY3JpdGljYWwgYW5kIGNhbiBiZSByZW1vdmVkIGlmXG4gIC8vIGl0IGNhdXNlcyBwcm9ibGVtcy4gVGhpcyBpcyBtZWFudCB0byBnaXZlIGEgbmljZXIgZXJyb3IgbWVzc2FnZSBmb3JcbiAgLy8gUmVhY3RET00xNS51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihyZWFjdERPTTE2Q29tcG9uZW50LFxuICAvLyAuLi4pKSB3aGljaCBvdGhlcndpc2UgdGhyb3dzIGEgXCJfcHJvY2Vzc0NoaWxkQ29udGV4dCBpcyBub3QgYSBmdW5jdGlvblwiXG4gIC8vIGV4Y2VwdGlvbi5cblxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmYWtlSW50ZXJuYWxJbnN0YW5jZSwgJ19wcm9jZXNzQ2hpbGRDb250ZXh0Jywge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJfcHJvY2Vzc0NoaWxkQ29udGV4dCBpcyBub3QgYXZhaWxhYmxlIGluIFJlYWN0IDE2Ky4gVGhpcyBsaWtlbHkgbWVhbnMgeW91IGhhdmUgbXVsdGlwbGUgY29waWVzIG9mIFJlYWN0IGFuZCBhcmUgYXR0ZW1wdGluZyB0byBuZXN0IGEgUmVhY3QgMTUgdHJlZSBpbnNpZGUgYSBSZWFjdCAxNiB0cmVlIHVzaW5nIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyLCB3aGljaCBpc24ndCBzdXBwb3J0ZWQuIFRyeSB0byBtYWtlIHN1cmUgeW91IGhhdmUgb25seSBvbmUgY29weSBvZiBSZWFjdCAoYW5kIGlkZWFsbHksIHN3aXRjaCB0byBSZWFjdERPTS5jcmVhdGVQb3J0YWwpLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZnJlZXplKGZha2VJbnRlcm5hbEluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV4dFByb3BzKSB7XG4gIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIHtcbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBJbnZva2UgdGhlIGZ1bmN0aW9uIGFuIGV4dHJhIHRpbWUgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuICAgICAgICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHBhcnRpYWxTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG5cbiAge1xuICAgIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZShjdG9yLCBwYXJ0aWFsU3RhdGUpO1xuICB9IC8vIE1lcmdlIHRoZSBwYXJ0aWFsIHN0YXRlIGFuZCB0aGUgcHJldmlvdXMgc3RhdGUuXG5cblxuICB2YXIgbWVtb2l6ZWRTdGF0ZSA9IHBhcnRpYWxTdGF0ZSA9PT0gbnVsbCB8fCBwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCA/IHByZXZTdGF0ZSA6IF9hc3NpZ24oe30sIHByZXZTdGF0ZSwgcGFydGlhbFN0YXRlKTtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG1lbW9pemVkU3RhdGU7IC8vIE9uY2UgdGhlIHVwZGF0ZSBxdWV1ZSBpcyBlbXB0eSwgcGVyc2lzdCB0aGUgZGVyaXZlZCBzdGF0ZSBvbnRvIHRoZVxuICAvLyBiYXNlIHN0YXRlLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIFF1ZXVlIGlzIGFsd2F5cyBub24tbnVsbCBmb3IgY2xhc3Nlc1xuICAgIHZhciB1cGRhdGVRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICAgIHVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZSA9IG1lbW9pemVkU3RhdGU7XG4gIH1cbn1cbnZhciBjbGFzc0NvbXBvbmVudFVwZGF0ZXIgPSB7XG4gIGlzTW91bnRlZDogaXNNb3VudGVkLFxuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG5cbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfSxcbiAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpO1xuICAgIHVwZGF0ZS50YWcgPSBSZXBsYWNlU3RhdGU7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAncmVwbGFjZVN0YXRlJyk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9LFxuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChpbnN0LCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7XG5cbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCkge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJbnZva2UgdGhlIGZ1bmN0aW9uIGFuIGV4dHJhIHRpbWUgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuICAgICAgICAgIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaG91bGRVcGRhdGUgPSBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgICB7XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3IoJyVzLnNob3VsZENvbXBvbmVudFVwZGF0ZSgpOiBSZXR1cm5lZCB1bmRlZmluZWQgaW5zdGVhZCBvZiBhICcgKyAnYm9vbGVhbiB2YWx1ZS4gTWFrZSBzdXJlIHRvIHJldHVybiB0cnVlIG9yIGZhbHNlLicsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gIH1cblxuICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgY3Rvci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQpIHtcbiAgICByZXR1cm4gIXNoYWxsb3dFcXVhbChvbGRQcm9wcywgbmV3UHJvcHMpIHx8ICFzaGFsbG93RXF1YWwob2xkU3RhdGUsIG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuICAgIHZhciByZW5kZXJQcmVzZW50ID0gaW5zdGFuY2UucmVuZGVyO1xuXG4gICAgaWYgKCFyZW5kZXJQcmVzZW50KSB7XG4gICAgICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgdHlwZW9mIGN0b3IucHJvdG90eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArICdpbnN0YW5jZTogZGlkIHlvdSBhY2NpZGVudGFsbHkgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvcj8nLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCclcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCAnICsgJ2luc3RhbmNlOiB5b3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGRlZmluZSBgcmVuZGVyYC4nLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZ2V0SW5pdGlhbFN0YXRlICYmICFpbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUuaXNSZWFjdENsYXNzQXBwcm92ZWQgJiYgIWluc3RhbmNlLnN0YXRlKSB7XG4gICAgICBlcnJvcignZ2V0SW5pdGlhbFN0YXRlIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBkZWZpbmUgYSBzdGF0ZSBwcm9wZXJ0eSBpbnN0ZWFkPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMgJiYgIWluc3RhbmNlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCkge1xuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICsgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArICdVc2UgYSBzdGF0aWMgcHJvcGVydHkgdG8gZGVmaW5lIGRlZmF1bHRQcm9wcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5wcm9wVHlwZXMpIHtcbiAgICAgIGVycm9yKCdwcm9wVHlwZXMgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBwcm9wVHlwZXMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuY29udGV4dFR5cGUpIHtcbiAgICAgIGVycm9yKCdjb250ZXh0VHlwZSB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGluc3RhbmNlLmNvbnRleHRUeXBlcykge1xuICAgICAgICBlcnJvcignY29udGV4dFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgY29udGV4dFR5cGVzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdG9yLmNvbnRleHRUeXBlICYmIGN0b3IuY29udGV4dFR5cGVzICYmICFkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcy5oYXMoY3RvcikpIHtcbiAgICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMuYWRkKGN0b3IpO1xuXG4gICAgICAgIGVycm9yKCclcyBkZWNsYXJlcyBib3RoIGNvbnRleHRUeXBlcyBhbmQgY29udGV4dFR5cGUgc3RhdGljIHByb3BlcnRpZXMuICcgKyAnVGhlIGxlZ2FjeSBjb250ZXh0VHlwZXMgcHJvcGVydHkgd2lsbCBiZSBpZ25vcmVkLicsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50U2hvdWxkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgKyAnVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzICcgKyAnZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGN0b3IucHJvdG90eXBlICYmIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ICYmIHR5cGVvZiBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBzaG91bGRDb21wb25lbnRVcGRhdGUoKS4gJyArICdzaG91bGRDb21wb25lbnRVcGRhdGUgc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gZXh0ZW5kaW5nIFJlYWN0LlB1cmVDb21wb25lbnQuICcgKyAnUGxlYXNlIGV4dGVuZCBSZWFjdC5Db21wb25lbnQgaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIGlzIHVzZWQuJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQSBwdXJlIGNvbXBvbmVudCcpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnREaWRVbm1vdW50KCkuIEJ1dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuICcgKyAnRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxVbm1vdW50KCk/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzKCkuIEJ1dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuICcgKyAnSWYgeW91IG1lYW50IHRvIHVwZGF0ZSB0aGUgc3RhdGUgaW4gcmVzcG9uc2UgdG8gY2hhbmdpbmcgcHJvcHMsICcgKyAndXNlIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKS4gSWYgeW91IG1lYW50IHRvIGZldGNoIGRhdGEgb3IgJyArICdydW4gc2lkZS1lZmZlY3RzIG9yIG11dGF0aW9ucyBhZnRlciBSZWFjdCBoYXMgdXBkYXRlZCB0aGUgVUksIHVzZSBjb21wb25lbnREaWRVcGRhdGUoKS4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIGhhc011dGF0ZWRQcm9wcyA9IGluc3RhbmNlLnByb3BzICE9PSBuZXdQcm9wcztcblxuICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gdW5kZWZpbmVkICYmIGhhc011dGF0ZWRQcm9wcykge1xuICAgICAgZXJyb3IoJyVzKC4uLik6IFdoZW4gY2FsbGluZyBzdXBlcigpIGluIGAlc2AsIG1ha2Ugc3VyZSB0byBwYXNzICcgKyBcInVwIHRoZSBzYW1lIHByb3BzIHRoYXQgeW91ciBjb21wb25lbnQncyBjb25zdHJ1Y3RvciB3YXMgcGFzc2VkLlwiLCBuYW1lLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZGVmYXVsdFByb3BzKSB7XG4gICAgICBlcnJvcignU2V0dGluZyBkZWZhdWx0UHJvcHMgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSBpZ25vcmVkLicgKyAnIEluc3RlYWQsIGRlZmluZSBkZWZhdWx0UHJvcHMgYXMgYSBzdGF0aWMgcHJvcGVydHkgb24gJXMuJywgbmFtZSwgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlICE9PSAnZnVuY3Rpb24nICYmICFkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuaGFzKGN0b3IpKSB7XG4gICAgICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuYWRkKGN0b3IpO1xuXG4gICAgICBlcnJvcignJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgc2hvdWxkIGJlIHVzZWQgd2l0aCBjb21wb25lbnREaWRVcGRhdGUoKS4gJyArICdUaGlzIGNvbXBvbmVudCBkZWZpbmVzIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgb25seS4nLCBnZXRDb21wb25lbnROYW1lKGN0b3IpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYSBzdGF0aWMgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXM6IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdG9yLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGFuIGluc3RhbmNlIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgX3N0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG5cbiAgICBpZiAoX3N0YXRlICYmICh0eXBlb2YgX3N0YXRlICE9PSAnb2JqZWN0JyB8fCBpc0FycmF5KF9zdGF0ZSkpKSB7XG4gICAgICBlcnJvcignJXMuc3RhdGU6IG11c3QgYmUgc2V0IHRvIGFuIG9iamVjdCBvciBudWxsJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGN0b3IuY2hpbGRDb250ZXh0VHlwZXMgIT09ICdvYmplY3QnKSB7XG4gICAgICBlcnJvcignJXMuZ2V0Q2hpbGRDb250ZXh0KCk6IGNoaWxkQ29udGV4dFR5cGVzIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byAnICsgJ3VzZSBnZXRDaGlsZENvbnRleHQoKS4nLCBuYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSkge1xuICBpbnN0YW5jZS51cGRhdGVyID0gY2xhc3NDb21wb25lbnRVcGRhdGVyO1xuICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBpbnN0YW5jZTsgLy8gVGhlIGluc3RhbmNlIG5lZWRzIGFjY2VzcyB0byB0aGUgZmliZXIgc28gdGhhdCBpdCBjYW4gc2NoZWR1bGUgdXBkYXRlc1xuXG4gIHNldChpbnN0YW5jZSwgd29ya0luUHJvZ3Jlc3MpO1xuXG4gIHtcbiAgICBpbnN0YW5jZS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlID0gZmFrZUludGVybmFsSW5zdGFuY2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgcHJvcHMpIHtcbiAgdmFyIGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID0gZmFsc2U7XG4gIHZhciB1bm1hc2tlZENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIHZhciBjb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuXG4gIHtcbiAgICBpZiAoJ2NvbnRleHRUeXBlJyBpbiBjdG9yKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IC8vIEFsbG93IG51bGwgZm9yIGNvbmRpdGlvbmFsIGRlY2xhcmF0aW9uXG4gICAgICBjb250ZXh0VHlwZSA9PT0gbnVsbCB8fCBjb250ZXh0VHlwZSAhPT0gdW5kZWZpbmVkICYmIGNvbnRleHRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgJiYgY29udGV4dFR5cGUuX2NvbnRleHQgPT09IHVuZGVmaW5lZDsgLy8gTm90IGEgPENvbnRleHQuQ29uc3VtZXI+XG5cbiAgICAgIGlmICghaXNWYWxpZCAmJiAhZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmhhcyhjdG9yKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuYWRkKGN0b3IpO1xuICAgICAgICB2YXIgYWRkZW5kdW0gPSAnJztcblxuICAgICAgICBpZiAoY29udGV4dFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gdW5kZWZpbmVkLiAnICsgJ1RoaXMgY2FuIGJlIGNhdXNlZCBieSBhIHR5cG8gb3IgYnkgbWl4aW5nIHVwIG5hbWVkIGFuZCBkZWZhdWx0IGltcG9ydHMuICcgKyAnVGhpcyBjYW4gYWxzbyBoYXBwZW4gZHVlIHRvIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSwgc28gJyArICd0cnkgbW92aW5nIHRoZSBjcmVhdGVDb250ZXh0KCkgY2FsbCB0byBhIHNlcGFyYXRlIGZpbGUuJztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhICcgKyB0eXBlb2YgY29udGV4dFR5cGUgKyAnLic7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyB0aGUgQ29udGV4dC5Qcm92aWRlciBpbnN0ZWFkPyc7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFR5cGUuX2NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIDxDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgIGFkZGVuZHVtID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIHRoZSBDb250ZXh0LkNvbnN1bWVyIGluc3RlYWQ/JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGFuIG9iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhjb250ZXh0VHlwZSkuam9pbignLCAnKSArICd9Lic7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcignJXMgZGVmaW5lcyBhbiBpbnZhbGlkIGNvbnRleHRUeXBlLiAnICsgJ2NvbnRleHRUeXBlIHNob3VsZCBwb2ludCB0byB0aGUgQ29udGV4dCBvYmplY3QgcmV0dXJuZWQgYnkgUmVhY3QuY3JlYXRlQ29udGV4dCgpLiVzJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JywgYWRkZW5kdW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgY29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIHZhciBjb250ZXh0VHlwZXMgPSBjdG9yLmNvbnRleHRUeXBlcztcbiAgICBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA9IGNvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZDtcbiAgICBjb250ZXh0ID0gaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPyBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpIDogZW1wdHlDb250ZXh0T2JqZWN0O1xuICB9IC8vIEluc3RhbnRpYXRlIHR3aWNlIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cblxuXG4gIHtcbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBuZXcgY3Rvcihwcm9wcywgY29udGV4dCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSBuZXcgY3Rvcihwcm9wcywgY29udGV4dCk7XG4gIHZhciBzdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZSAhPT0gbnVsbCAmJiBpbnN0YW5jZS5zdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5zdGFuY2Uuc3RhdGUgOiBudWxsO1xuICBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcblxuICB7XG4gICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBzdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignYCVzYCB1c2VzIGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGJ1dCBpdHMgaW5pdGlhbCBzdGF0ZSBpcyAnICsgJyVzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZC4gSW5zdGVhZCwgZGVmaW5lIHRoZSBpbml0aWFsIHN0YXRlIGJ5ICcgKyAnYXNzaWduaW5nIGFuIG9iamVjdCB0byBgdGhpcy5zdGF0ZWAgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGAlc2AuICcgKyAnVGhpcyBlbnN1cmVzIHRoYXQgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYXJndW1lbnRzIGhhdmUgYSBjb25zaXN0ZW50IHNoYXBlLicsIGNvbXBvbmVudE5hbWUsIGluc3RhbmNlLnN0YXRlID09PSBudWxsID8gJ251bGwnIDogJ3VuZGVmaW5lZCcsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH0gLy8gSWYgbmV3IGNvbXBvbmVudCBBUElzIGFyZSBkZWZpbmVkLCBcInVuc2FmZVwiIGxpZmVjeWNsZXMgd29uJ3QgYmUgY2FsbGVkLlxuICAgIC8vIFdhcm4gYWJvdXQgdGhlc2UgbGlmZWN5Y2xlcyBpZiB0aGV5IGFyZSBwcmVzZW50LlxuICAgIC8vIERvbid0IHdhcm4gYWJvdXQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBtZXRob2RzIHRob3VnaC5cblxuXG4gICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBmb3VuZFdpbGxNb3VudE5hbWUgPSBudWxsO1xuICAgICAgdmFyIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSBudWxsO1xuICAgICAgdmFyIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSBudWxsO1xuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSAnY29tcG9uZW50V2lsbE1vdW50JztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsTW91bnQnO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSc7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgfHwgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSAhPT0gbnVsbCB8fCBmb3VuZFdpbGxVcGRhdGVOYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBfY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgICAgdmFyIG5ld0FwaU5hbWUgPSB0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgPyAnZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCknIDogJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlKCknO1xuXG4gICAgICAgIGlmICghZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5oYXMoX2NvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5hZGQoX2NvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgICAgZXJyb3IoJ1Vuc2FmZSBsZWdhY3kgbGlmZWN5Y2xlcyB3aWxsIG5vdCBiZSBjYWxsZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgbmV3IGNvbXBvbmVudCBBUElzLlxcblxcbicgKyAnJXMgdXNlcyAlcyBidXQgYWxzbyBjb250YWlucyB0aGUgZm9sbG93aW5nIGxlZ2FjeSBsaWZlY3ljbGVzOiVzJXMlc1xcblxcbicgKyAnVGhlIGFib3ZlIGxpZmVjeWNsZXMgc2hvdWxkIGJlIHJlbW92ZWQuIExlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6XFxuJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzJywgX2NvbXBvbmVudE5hbWUsIG5ld0FwaU5hbWUsIGZvdW5kV2lsbE1vdW50TmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbE1vdW50TmFtZSA6ICcnLCBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA6ICcnLCBmb3VuZFdpbGxVcGRhdGVOYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsVXBkYXRlTmFtZSA6ICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSAvLyBDYWNoZSB1bm1hc2tlZCBjb250ZXh0IHNvIHdlIGNhbiBhdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyBuZWNlc3NhcnkuXG4gIC8vIFJlYWN0RmliZXJDb250ZXh0IHVzdWFsbHkgdXBkYXRlcyB0aGlzIGNhY2hlIGJ1dCBjYW4ndCBmb3IgbmV3bHktY3JlYXRlZCBpbnN0YW5jZXMuXG5cblxuICBpZiAoaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIpIHtcbiAgICBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsTW91bnQod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gIHZhciBvbGRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCk7XG4gIH1cblxuICBpZiAob2xkU3RhdGUgIT09IGluc3RhbmNlLnN0YXRlKSB7XG4gICAge1xuICAgICAgZXJyb3IoJyVzLmNvbXBvbmVudFdpbGxNb3VudCgpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gdGhpcy5zdGF0ZSBpcyAnICsgXCJkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgKyAnY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICB9XG5cbiAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShpbnN0YW5jZSwgaW5zdGFuY2Uuc3RhdGUsIG51bGwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSwgbmV3UHJvcHMsIG5leHRDb250ZXh0KSB7XG4gIHZhciBvbGRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICB9XG5cbiAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBvbGRTdGF0ZSkge1xuICAgIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJyVzLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKTogQXNzaWduaW5nIGRpcmVjdGx5IHRvICcgKyBcInRoaXMuc3RhdGUgaXMgZGVwcmVjYXRlZCAoZXhjZXB0IGluc2lkZSBhIGNvbXBvbmVudCdzIFwiICsgJ2NvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoaW5zdGFuY2UsIGluc3RhbmNlLnN0YXRlLCBudWxsKTtcbiAgfVxufSAvLyBJbnZva2VzIHRoZSBtb3VudCBsaWZlLWN5Y2xlcyBvbiBhIHByZXZpb3VzbHkgbmV2ZXIgcmVuZGVyZWQgaW5zdGFuY2UuXG5cblxuZnVuY3Rpb24gbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIGNoZWNrQ2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMpO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICBpbnN0YW5jZS5wcm9wcyA9IG5ld1Byb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIGluc3RhbmNlLnJlZnMgPSBlbXB0eVJlZnNPYmplY3Q7XG4gIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBpbnN0YW5jZS5jb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIGluc3RhbmNlLmNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAge1xuICAgIGlmIChpbnN0YW5jZS5zdGF0ZSA9PT0gbmV3UHJvcHMpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclczogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFzc2lnbiBwcm9wcyBkaXJlY3RseSB0byBzdGF0ZSAnICsgXCJiZWNhdXNlIHVwZGF0ZXMgdG8gcHJvcHMgd29uJ3QgYmUgcmVmbGVjdGVkIGluIHN0YXRlLiBcIiArICdJbiBtb3N0IGNhc2VzLCBpdCBpcyBiZXR0ZXIgdG8gdXNlIHByb3BzIGRpcmVjdGx5LicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV3UHJvcHMpO1xuICAgIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfSAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuXG4gIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICE9PSAnZnVuY3Rpb24nICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGNhbGxDb21wb25lbnRXaWxsTW91bnQod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTsgLy8gSWYgd2UgaGFkIGFkZGl0aW9uYWwgc3RhdGUgdXBkYXRlcyBkdXJpbmcgdGhpcyBsaWZlLWN5Y2xlLCBsZXQnc1xuICAgIC8vIHByb2Nlc3MgdGhlbSBub3cuXG5cbiAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICAgIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lTW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICBpbnN0YW5jZS5wcm9wcyA9IG9sZFByb3BzO1xuICB2YXIgb2xkQ29udGV4dCA9IGluc3RhbmNlLmNvbnRleHQ7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG4gIHZhciBuZXh0Q29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIG5leHRDb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBuZXh0TGVnYWN5VW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBuZXh0Q29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIG5leHRMZWdhY3lVbm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICB2YXIgaGFzTmV3TGlmZWN5Y2xlcyA9IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nOyAvLyBOb3RlOiBEdXJpbmcgdGhlc2UgbGlmZS1jeWNsZXMsIGluc3RhbmNlLnByb3BzL2luc3RhbmNlLnN0YXRlIGFyZSB3aGF0XG4gIC8vIGV2ZXIgdGhlIHByZXZpb3VzbHkgYXR0ZW1wdGVkIHRvIHJlbmRlciAtIG5vdCB0aGUgXCJjdXJyZW50XCIuIEhvd2V2ZXIsXG4gIC8vIGR1cmluZyBjb21wb25lbnREaWRVcGRhdGUgd2UgcGFzcyB0aGUgXCJjdXJyZW50XCIgcHJvcHMuXG4gIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuXG4gIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGlmIChvbGRQcm9wcyAhPT0gbmV3UHJvcHMgfHwgb2xkQ29udGV4dCAhPT0gbmV4dENvbnRleHQpIHtcbiAgICAgIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSwgbmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpO1xuICB2YXIgb2xkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgbmV3U3RhdGUgPSBpbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlO1xuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG9sZFByb3BzID09PSBuZXdQcm9wcyAmJiBvbGRTdGF0ZSA9PT0gbmV3U3RhdGUgJiYgIWhhc0NvbnRleHRDaGFuZ2VkKCkgJiYgIWNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSkge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV3UHJvcHMpO1xuICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIHZhciBzaG91bGRVcGRhdGUgPSBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgfHwgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9IC8vIElmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5lZCBmYWxzZSwgd2Ugc2hvdWxkIHN0aWxsIHVwZGF0ZSB0aGVcbiAgICAvLyBtZW1vaXplZCBzdGF0ZSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgd29yayBjYW4gYmUgcmV1c2VkLlxuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV3UHJvcHM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9IC8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UncyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHBvaW50ZXJzIGV2ZW5cbiAgLy8gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2UuXG5cblxuICBpbnN0YW5jZS5wcm9wcyA9IG5ld1Byb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IG5ld1N0YXRlO1xuICBpbnN0YW5jZS5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG4gIHJldHVybiBzaG91bGRVcGRhdGU7XG59IC8vIEludm9rZXMgdGhlIHVwZGF0ZSBsaWZlLWN5Y2xlcyBhbmQgcmV0dXJucyBmYWxzZSBpZiBpdCBzaG91bGRuJ3QgcmVyZW5kZXIuXG5cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3NJbnN0YW5jZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciB1bnJlc29sdmVkT2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlID09PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA/IHVucmVzb2x2ZWRPbGRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMod29ya0luUHJvZ3Jlc3MudHlwZSwgdW5yZXNvbHZlZE9sZFByb3BzKTtcbiAgaW5zdGFuY2UucHJvcHMgPSBvbGRQcm9wcztcbiAgdmFyIHVucmVzb2x2ZWROZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuICB2YXIgbmV4dENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmV4dFVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgbmV4dENvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBuZXh0VW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgdmFyIGhhc05ld0xpZmVjeWNsZXMgPSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJzsgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAvLyBldmVyIHRoZSBwcmV2aW91c2x5IGF0dGVtcHRlZCB0byByZW5kZXIgLSBub3QgdGhlIFwiY3VycmVudFwiLiBIb3dldmVyLFxuICAvLyBkdXJpbmcgY29tcG9uZW50RGlkVXBkYXRlIHdlIHBhc3MgdGhlIFwiY3VycmVudFwiIHByb3BzLlxuICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSB1bnJlc29sdmVkTmV3UHJvcHMgfHwgb2xkQ29udGV4dCAhPT0gbmV4dENvbnRleHQpIHtcbiAgICAgIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSwgbmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpO1xuICB2YXIgb2xkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgbmV3U3RhdGUgPSBpbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlO1xuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyA9PT0gdW5yZXNvbHZlZE5ld1Byb3BzICYmIG9sZFN0YXRlID09PSBuZXdTdGF0ZSAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSAmJiAhY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpKSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV3UHJvcHMpO1xuICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIHZhciBzaG91bGRVcGRhdGUgPSBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgfHwgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICB9XG4gICAgfSAvLyBJZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJuZWQgZmFsc2UsIHdlIHNob3VsZCBzdGlsbCB1cGRhdGUgdGhlXG4gICAgLy8gbWVtb2l6ZWQgcHJvcHMvc3RhdGUgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHdvcmsgY2FuIGJlIHJldXNlZC5cblxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5ld1Byb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfSAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIGluc3RhbmNlJ3Mgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCBwb2ludGVycyBldmVuXG4gIC8vIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlLlxuXG5cbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgaW5zdGFuY2UuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG52YXIgZGlkV2FybkFib3V0TWFwcztcbnZhciBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nO1xudmFyIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZztcblxudmFyIHdhcm5Gb3JNaXNzaW5nS2V5ID0gZnVuY3Rpb24gKGNoaWxkLCByZXR1cm5GaWJlcikge307XG5cbntcbiAgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcbiAgLyoqXG4gICAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAgICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gICAqIHVwZGF0ZXMuXG4gICAqL1xuXG4gIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xuICBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmcgPSB7fTtcblxuICB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChjaGlsZCwgcmV0dXJuRmliZXIpIHtcbiAgICBpZiAoY2hpbGQgPT09IG51bGwgfHwgdHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghY2hpbGQuX3N0b3JlIHx8IGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgfHwgY2hpbGQua2V5ICE9IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoISh0eXBlb2YgY2hpbGQuX3N0b3JlID09PSAnb2JqZWN0JykpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QgQ29tcG9uZW50IGluIHdhcm5Gb3JNaXNzaW5nS2V5IHNob3VsZCBoYXZlIGEgX3N0b3JlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjb21wb25lbnROYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjb21wb25lbnROYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgJyArICdcImtleVwiIHByb3AuIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciAnICsgJ21vcmUgaW5mb3JtYXRpb24uJyk7XG4gIH07XG59XG5cbnZhciBpc0FycmF5JDEgPSBBcnJheS5pc0FycmF5O1xuXG5mdW5jdGlvbiBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQpIHtcbiAgdmFyIG1peGVkUmVmID0gZWxlbWVudC5yZWY7XG5cbiAgaWYgKG1peGVkUmVmICE9PSBudWxsICYmIHR5cGVvZiBtaXhlZFJlZiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbWl4ZWRSZWYgIT09ICdvYmplY3QnKSB7XG4gICAge1xuICAgICAgLy8gVE9ETzogQ2xlYW4gdGhpcyB1cCBvbmNlIHdlIHR1cm4gb24gdGhlIHN0cmluZyByZWYgd2FybmluZyBmb3JcbiAgICAgIC8vIGV2ZXJ5b25lLCBiZWNhdXNlIHRoZSBzdHJpY3QgbW9kZSBjYXNlIHdpbGwgbm8gbG9uZ2VyIGJlIHJlbGV2YW50XG4gICAgICBpZiAoKHJldHVybkZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlIHx8IHdhcm5BYm91dFN0cmluZ1JlZnMpICYmIC8vIFdlIHdhcm4gaW4gUmVhY3RFbGVtZW50LmpzIGlmIG93bmVyIGFuZCBzZWxmIGFyZSBlcXVhbCBmb3Igc3RyaW5nIHJlZnNcbiAgICAgIC8vIGJlY2F1c2UgdGhlc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uXG4gICAgICAvLyB1c2luZyBhIGNvZGVtb2QuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgaGF2ZSB0byB3YXJuIGFib3V0IHN0cmluZyByZWZzIGFnYWluLlxuICAgICAgIShlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9zZWxmICYmIGVsZW1lbnQuX293bmVyLnN0YXRlTm9kZSAhPT0gZWxlbWVudC5fc2VsZikpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVycm9yKCdBIHN0cmluZyByZWYsIFwiJXNcIiwgaGFzIGJlZW4gZm91bmQgd2l0aGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gJyArICdTdHJpbmcgcmVmcyBhcmUgYSBzb3VyY2Ugb2YgcG90ZW50aWFsIGJ1Z3MgYW5kIHNob3VsZCBiZSBhdm9pZGVkLiAnICsgJ1dlIHJlY29tbWVuZCB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIG1peGVkUmVmKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbGVtZW50Ll9vd25lcikge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgaW5zdDtcblxuICAgICAgaWYgKG93bmVyKSB7XG4gICAgICAgIHZhciBvd25lckZpYmVyID0gb3duZXI7XG5cbiAgICAgICAgaWYgKCEob3duZXJGaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkZ1bmN0aW9uIGNvbXBvbmVudHMgY2Fubm90IGhhdmUgc3RyaW5nIHJlZnMuIFdlIHJlY29tbWVuZCB1c2luZyB1c2VSZWYoKSBpbnN0ZWFkLiBMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpbnN0ID0gb3duZXJGaWJlci5zdGF0ZU5vZGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaW5zdCkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiTWlzc2luZyBvd25lciBmb3Igc3RyaW5nIHJlZiBcIiArIG1peGVkUmVmICsgXCIuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc3RyaW5nUmVmID0gJycgKyBtaXhlZFJlZjsgLy8gQ2hlY2sgaWYgcHJldmlvdXMgc3RyaW5nIHJlZiBtYXRjaGVzIG5ldyBzdHJpbmcgcmVmXG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQucmVmICE9PSBudWxsICYmIHR5cGVvZiBjdXJyZW50LnJlZiA9PT0gJ2Z1bmN0aW9uJyAmJiBjdXJyZW50LnJlZi5fc3RyaW5nUmVmID09PSBzdHJpbmdSZWYpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQucmVmO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVmID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciByZWZzID0gaW5zdC5yZWZzO1xuXG4gICAgICAgIGlmIChyZWZzID09PSBlbXB0eVJlZnNPYmplY3QpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgbGF6eSBwb29sZWQgZnJvemVuIG9iamVjdCwgc28gd2UgbmVlZCB0byBpbml0aWFsaXplLlxuICAgICAgICAgIHJlZnMgPSBpbnN0LnJlZnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGRlbGV0ZSByZWZzW3N0cmluZ1JlZl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmc1tzdHJpbmdSZWZdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJlZi5fc3RyaW5nUmVmID0gc3RyaW5nUmVmO1xuICAgICAgcmV0dXJuIHJlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEodHlwZW9mIG1peGVkUmVmID09PSAnc3RyaW5nJykpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHJlZiB0byBiZSBhIGZ1bmN0aW9uLCBhIHN0cmluZywgYW4gb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZVJlZigpLCBvciBudWxsLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFlbGVtZW50Ll9vd25lcikge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRWxlbWVudCByZWYgd2FzIHNwZWNpZmllZCBhcyBhIHN0cmluZyAoXCIgKyBtaXhlZFJlZiArIFwiKSBidXQgbm8gb3duZXIgd2FzIHNldC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1heSBiZSBhZGRpbmcgYSByZWYgdG8gYSBmdW5jdGlvbiBjb21wb25lbnRcXG4yLiBZb3UgbWF5IGJlIGFkZGluZyBhIHJlZiB0byBhIGNvbXBvbmVudCB0aGF0IHdhcyBub3QgY3JlYXRlZCBpbnNpZGUgYSBjb21wb25lbnQncyByZW5kZXIgbWV0aG9kXFxuMy4gWW91IGhhdmUgbXVsdGlwbGUgY29waWVzIG9mIFJlYWN0IGxvYWRlZFxcblNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVmcy1tdXN0LWhhdmUtb3duZXIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtaXhlZFJlZjtcbn1cblxuZnVuY3Rpb24gdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCkge1xuICBpZiAocmV0dXJuRmliZXIudHlwZSAhPT0gJ3RleHRhcmVhJykge1xuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIiArIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3Q2hpbGQpID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMobmV3Q2hpbGQpLmpvaW4oJywgJykgKyAnfScgOiBuZXdDaGlsZCkgKyBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpIHtcbiAge1xuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgIGlmIChvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmdbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmdbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0Z1bmN0aW9ucyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQuIFRoaXMgbWF5IGhhcHBlbiBpZiAnICsgJ3lvdSByZXR1cm4gYSBDb21wb25lbnQgaW5zdGVhZCBvZiA8Q29tcG9uZW50IC8+IGZyb20gcmVuZGVyLiAnICsgJ09yIG1heWJlIHlvdSBtZWFudCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gcmV0dXJuIGl0LicpO1xuICB9XG59IC8vIFdlIGF2b2lkIGlubGluaW5nIHRoaXMgdG8gYXZvaWQgcG90ZW50aWFsIGRlb3B0cyBmcm9tIHVzaW5nIHRyeS9jYXRjaC5cbi8vIHRvIGJlIGFibGUgdG8gb3B0aW1pemUgZWFjaCBwYXRoIGluZGl2aWR1YWxseSBieSBicmFuY2hpbmcgZWFybHkuIFRoaXMgbmVlZHNcbi8vIGEgY29tcGlsZXIgb3Igd2UgY2FuIGRvIGl0IG1hbnVhbGx5LiBIZWxwZXJzIHRoYXQgZG9uJ3QgbmVlZCB0aGlzIGJyYW5jaGluZ1xuLy8gbGl2ZSBvdXRzaWRlIG9mIHRoaXMgZnVuY3Rpb24uXG5cblxuZnVuY3Rpb24gQ2hpbGRSZWNvbmNpbGVyKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgZnVuY3Rpb24gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkVG9EZWxldGUpIHtcbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBEZWxldGlvbnMgYXJlIGFkZGVkIGluIHJldmVyc2VkIG9yZGVyIHNvIHdlIGFkZCBpdCB0byB0aGUgZnJvbnQuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIHJldHVybiBmaWJlcidzIGVmZmVjdCBsaXN0IGlzIGVtcHR5IGV4Y2VwdCBmb3JcbiAgICAvLyBkZWxldGlvbnMsIHNvIHdlIGNhbiBqdXN0IGFwcGVuZCB0aGUgZGVsZXRpb24gdG8gdGhlIGxpc3QuIFRoZSByZW1haW5pbmdcbiAgICAvLyBlZmZlY3RzIGFyZW4ndCBhZGRlZCB1bnRpbCB0aGUgY29tcGxldGUgcGhhc2UuIE9uY2Ugd2UgaW1wbGVtZW50XG4gICAgLy8gcmVzdW1pbmcsIHRoaXMgbWF5IG5vdCBiZSB0cnVlLlxuXG5cbiAgICB2YXIgbGFzdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdCAhPT0gbnVsbCkge1xuICAgICAgbGFzdC5uZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIH1cblxuICAgIGNoaWxkVG9EZWxldGUubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY2hpbGRUb0RlbGV0ZS5mbGFncyA9IERlbGV0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyBUT0RPOiBGb3IgdGhlIHNob3VsZENsb25lIGNhc2UsIHRoaXMgY291bGQgYmUgbWljcm8tb3B0aW1pemVkIGEgYml0IGJ5XG4gICAgLy8gYXNzdW1pbmcgdGhhdCBhZnRlciB0aGUgZmlyc3QgY2hpbGQgd2UndmUgYWxyZWFkeSBhZGRlZCBldmVyeXRoaW5nLlxuXG5cbiAgICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkVG9EZWxldGUgIT09IG51bGwpIHtcbiAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKTtcbiAgICAgIGNoaWxkVG9EZWxldGUgPSBjaGlsZFRvRGVsZXRlLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpIHtcbiAgICAvLyBBZGQgdGhlIHJlbWFpbmluZyBjaGlsZHJlbiB0byBhIHRlbXBvcmFyeSBtYXAgc28gdGhhdCB3ZSBjYW4gZmluZCB0aGVtIGJ5XG4gICAgLy8ga2V5cyBxdWlja2x5LiBJbXBsaWNpdCAobnVsbCkga2V5cyBnZXQgYWRkZWQgdG8gdGhpcyBzZXQgd2l0aCB0aGVpciBpbmRleFxuICAgIC8vIGluc3RlYWQuXG4gICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBuZXcgTWFwKCk7XG4gICAgdmFyIGV4aXN0aW5nQ2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChleGlzdGluZ0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBpZiAoZXhpc3RpbmdDaGlsZC5rZXkgIT09IG51bGwpIHtcbiAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5zZXQoZXhpc3RpbmdDaGlsZC5rZXksIGV4aXN0aW5nQ2hpbGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5zZXQoZXhpc3RpbmdDaGlsZC5pbmRleCwgZXhpc3RpbmdDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGV4aXN0aW5nQ2hpbGQgPSBleGlzdGluZ0NoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4aXN0aW5nQ2hpbGRyZW47XG4gIH1cblxuICBmdW5jdGlvbiB1c2VGaWJlcihmaWJlciwgcGVuZGluZ1Byb3BzKSB7XG4gICAgLy8gV2UgY3VycmVudGx5IHNldCBzaWJsaW5nIHRvIG51bGwgYW5kIGluZGV4IHRvIDAgaGVyZSBiZWNhdXNlIGl0IGlzIGVhc3lcbiAgICAvLyB0byBmb3JnZXQgdG8gZG8gYmVmb3JlIHJldHVybmluZyBpdC4gRS5nLiBmb3IgdGhlIHNpbmdsZSBjaGlsZCBjYXNlLlxuICAgIHZhciBjbG9uZSA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGZpYmVyLCBwZW5kaW5nUHJvcHMpO1xuICAgIGNsb25lLmluZGV4ID0gMDtcbiAgICBjbG9uZS5zaWJsaW5nID0gbnVsbDtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBmdW5jdGlvbiBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0luZGV4KSB7XG4gICAgbmV3RmliZXIuaW5kZXggPSBuZXdJbmRleDtcblxuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnQgPSBuZXdGaWJlci5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgdmFyIG9sZEluZGV4ID0gY3VycmVudC5pbmRleDtcblxuICAgICAgaWYgKG9sZEluZGV4IDwgbGFzdFBsYWNlZEluZGV4KSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBtb3ZlLlxuICAgICAgICBuZXdGaWJlci5mbGFncyA9IFBsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXRlbSBjYW4gc3RheSBpbiBwbGFjZS5cbiAgICAgICAgcmV0dXJuIG9sZEluZGV4O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIGluc2VydGlvbi5cbiAgICAgIG5ld0ZpYmVyLmZsYWdzID0gUGxhY2VtZW50O1xuICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwbGFjZVNpbmdsZUNoaWxkKG5ld0ZpYmVyKSB7XG4gICAgLy8gVGhpcyBpcyBzaW1wbGVyIGZvciB0aGUgc2luZ2xlIGNoaWxkIGNhc2UuIFdlIG9ubHkgbmVlZCB0byBkbyBhXG4gICAgLy8gcGxhY2VtZW50IGZvciBpbnNlcnRpbmcgbmV3IGNoaWxkcmVuLlxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgbmV3RmliZXIuZmxhZ3MgPSBQbGFjZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0ZpYmVyO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnQsIHRleHRDb250ZW50LCBsYW5lcykge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBIb3N0VGV4dCkge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQodGV4dENvbnRlbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCB0ZXh0Q29udGVudCk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50LCBsYW5lcykge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoY3VycmVudC5lbGVtZW50VHlwZSA9PT0gZWxlbWVudC50eXBlIHx8ICggLy8gS2VlcCB0aGlzIGNoZWNrIGlubGluZSBzbyBpdCBvbmx5IHJ1bnMgb24gdGhlIGZhbHNlIHBhdGg6XG4gICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGN1cnJlbnQsIGVsZW1lbnQpICkpIHtcbiAgICAgICAgLy8gTW92ZSBiYXNlZCBvbiBpbmRleFxuICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBlbGVtZW50LnByb3BzKTtcbiAgICAgICAgZXhpc3RpbmcucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KTtcbiAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG5cbiAgICAgICAge1xuICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICBleGlzdGluZy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgfVxuICAgIH0gLy8gSW5zZXJ0XG5cblxuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgY3JlYXRlZC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnQsIHBvcnRhbCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gSG9zdFBvcnRhbCB8fCBjdXJyZW50LnN0YXRlTm9kZS5jb250YWluZXJJbmZvICE9PSBwb3J0YWwuY29udGFpbmVySW5mbyB8fCBjdXJyZW50LnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiAhPT0gcG9ydGFsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIHBvcnRhbC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZnJhZ21lbnQsIGxhbmVzLCBrZXkpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gRnJhZ21lbnQpIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmcmFnbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMsIGtleSk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgZnJhZ21lbnQpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLiBJZiB0aGUgcHJldmlvdXMgbm9kZSBpcyBpbXBsaWNpdGx5IGtleWVkXG4gICAgICAvLyB3ZSBjYW4gY29udGludWUgdG8gcmVwbGFjZSBpdCB3aXRob3V0IGFib3J0aW5nIGV2ZW4gaWYgaXQgaXMgbm90IGEgdGV4dFxuICAgICAgLy8gbm9kZS5cbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCgnJyArIG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9jcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICAgICAgICBfY3JlYXRlZC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIG51bGwsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIF9jcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVkO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfY3JlYXRlZDIgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgICAgICAgX2NyZWF0ZWQyLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVkMjtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHZhciBfY3JlYXRlZDMgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMsIG51bGwpO1xuXG4gICAgICAgIF9jcmVhdGVkMy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVkMztcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIC8vIFVwZGF0ZSB0aGUgZmliZXIgaWYgdGhlIGtleXMgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gbnVsbC5cbiAgICB2YXIga2V5ID0gb2xkRmliZXIgIT09IG51bGwgPyBvbGRGaWJlci5rZXkgOiBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMuIElmIHRoZSBwcmV2aW91cyBub2RlIGlzIGltcGxpY2l0bHkga2V5ZWRcbiAgICAgIC8vIHdlIGNhbiBjb250aW51ZSB0byByZXBsYWNlIGl0IHdpdGhvdXQgYWJvcnRpbmcgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXh0XG4gICAgICAvLyBub2RlLlxuICAgICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBvbGRGaWJlciwgJycgKyBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuLCBsYW5lcywga2V5KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cywgc28gd2UgbmVpdGhlciBoYXZlIHRvIGNoZWNrIHRoZSBvbGQgbm9yXG4gICAgICAvLyBuZXcgbm9kZSBmb3IgdGhlIGtleS4gSWYgYm90aCBhcmUgdGV4dCBub2RlcywgdGhleSBtYXRjaC5cbiAgICAgIHZhciBtYXRjaGVkRmliZXIgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdJZHgpIHx8IG51bGw7XG4gICAgICByZXR1cm4gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIG1hdGNoZWRGaWJlciwgJycgKyBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3Q2hpbGQua2V5ID09PSBudWxsID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5KSB8fCBudWxsO1xuXG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIsIG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuLCBsYW5lcywgbmV3Q2hpbGQua2V5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3Q2hpbGQua2V5ID09PSBudWxsID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5KSB8fCBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyMiwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIzID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlcjMsIG5ld0NoaWxkLCBsYW5lcywgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogV2FybnMgaWYgdGhlcmUgaXMgYSBkdXBsaWNhdGUgb3IgbWlzc2luZyBrZXlcbiAgICovXG5cblxuICBmdW5jdGlvbiB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKSB7XG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcgfHwgY2hpbGQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGtub3duS2V5cztcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChjaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB3YXJuRm9yTWlzc2luZ0tleShjaGlsZCwgcmV0dXJuRmliZXIpO1xuICAgICAgICAgIHZhciBrZXkgPSBjaGlsZC5rZXk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChrbm93bktleXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGtub3duS2V5cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGtub3duS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgha25vd25LZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvcignRW5jb3VudGVyZWQgdHdvIGNoaWxkcmVuIHdpdGggdGhlIHNhbWUga2V5LCBgJXNgLiAnICsgJ0tleXMgc2hvdWxkIGJlIHVuaXF1ZSBzbyB0aGF0IGNvbXBvbmVudHMgbWFpbnRhaW4gdGhlaXIgaWRlbnRpdHkgJyArICdhY3Jvc3MgdXBkYXRlcy4gTm9uLXVuaXF1ZSBrZXlzIG1heSBjYXVzZSBjaGlsZHJlbiB0byBiZSAnICsgJ2R1cGxpY2F0ZWQgYW5kL29yIG9taXR0ZWQgXHUyMDE0IHRoZSBiZWhhdmlvciBpcyB1bnN1cHBvcnRlZCBhbmQgJyArICdjb3VsZCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbi4nLCBrZXkpO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGtub3duS2V5cztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZHJlbiwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGFsZ29yaXRobSBjYW4ndCBvcHRpbWl6ZSBieSBzZWFyY2hpbmcgZnJvbSBib3RoIGVuZHMgc2luY2Ugd2VcbiAgICAvLyBkb24ndCBoYXZlIGJhY2twb2ludGVycyBvbiBmaWJlcnMuIEknbSB0cnlpbmcgdG8gc2VlIGhvdyBmYXIgd2UgY2FuIGdldFxuICAgIC8vIHdpdGggdGhhdCBtb2RlbC4gSWYgaXQgZW5kcyB1cCBub3QgYmVpbmcgd29ydGggdGhlIHRyYWRlb2Zmcywgd2UgY2FuXG4gICAgLy8gYWRkIGl0IGxhdGVyLlxuICAgIC8vIEV2ZW4gd2l0aCBhIHR3byBlbmRlZCBvcHRpbWl6YXRpb24sIHdlJ2Qgd2FudCB0byBvcHRpbWl6ZSBmb3IgdGhlIGNhc2VcbiAgICAvLyB3aGVyZSB0aGVyZSBhcmUgZmV3IGNoYW5nZXMgYW5kIGJydXRlIGZvcmNlIHRoZSBjb21wYXJpc29uIGluc3RlYWQgb2ZcbiAgICAvLyBnb2luZyBmb3IgdGhlIE1hcC4gSXQnZCBsaWtlIHRvIGV4cGxvcmUgaGl0dGluZyB0aGF0IHBhdGggZmlyc3QgaW5cbiAgICAvLyBmb3J3YXJkLW9ubHkgbW9kZSBhbmQgb25seSBnbyBmb3IgdGhlIE1hcCBvbmNlIHdlIG5vdGljZSB0aGF0IHdlIG5lZWRcbiAgICAvLyBsb3RzIG9mIGxvb2sgYWhlYWQuIFRoaXMgZG9lc24ndCBoYW5kbGUgcmV2ZXJzYWwgYXMgd2VsbCBhcyB0d28gZW5kZWRcbiAgICAvLyBzZWFyY2ggYnV0IHRoYXQncyB1bnVzdWFsLiBCZXNpZGVzLCBmb3IgdGhlIHR3byBlbmRlZCBvcHRpbWl6YXRpb24gdG9cbiAgICAvLyB3b3JrIG9uIEl0ZXJhYmxlcywgd2UnZCBuZWVkIHRvIGNvcHkgdGhlIHdob2xlIHNldC5cbiAgICAvLyBJbiB0aGlzIGZpcnN0IGl0ZXJhdGlvbiwgd2UnbGwganVzdCBsaXZlIHdpdGggaGl0dGluZyB0aGUgYmFkIGNhc2VcbiAgICAvLyAoYWRkaW5nIGV2ZXJ5dGhpbmcgdG8gYSBNYXApIGluIGZvciBldmVyeSBpbnNlcnQvbW92ZS5cbiAgICAvLyBJZiB5b3UgY2hhbmdlIHRoaXMgY29kZSwgYWxzbyB1cGRhdGUgcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcigpIHdoaWNoXG4gICAgLy8gdXNlcyB0aGUgc2FtZSBhbGdvcml0aG0uXG4gICAge1xuICAgICAgLy8gRmlyc3QsIHZhbGlkYXRlIGtleXMuXG4gICAgICB2YXIga25vd25LZXlzID0gbnVsbDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGQgPSBuZXdDaGlsZHJlbltpXTtcbiAgICAgICAga25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBudWxsO1xuICAgIHZhciBwcmV2aW91c05ld0ZpYmVyID0gbnVsbDtcbiAgICB2YXIgb2xkRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZDtcbiAgICB2YXIgbGFzdFBsYWNlZEluZGV4ID0gMDtcbiAgICB2YXIgbmV3SWR4ID0gMDtcbiAgICB2YXIgbmV4dE9sZEZpYmVyID0gbnVsbDtcblxuICAgIGZvciAoOyBvbGRGaWJlciAhPT0gbnVsbCAmJiBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICBpZiAob2xkRmliZXIuaW5kZXggPiBuZXdJZHgpIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXI7XG4gICAgICAgIG9sZEZpYmVyID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZHJlbltuZXdJZHhdLCBsYW5lcyk7XG5cbiAgICAgIGlmIChuZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGJyZWFrcyBvbiBlbXB0eSBzbG90cyBsaWtlIG51bGwgY2hpbGRyZW4uIFRoYXQnc1xuICAgICAgICAvLyB1bmZvcnR1bmF0ZSBiZWNhdXNlIGl0IHRyaWdnZXJzIHRoZSBzbG93IHBhdGggYWxsIHRoZSB0aW1lLiBXZSBuZWVkXG4gICAgICAgIC8vIGEgYmV0dGVyIHdheSB0byBjb21tdW5pY2F0ZSB3aGV0aGVyIHRoaXMgd2FzIGEgbWlzcyBvciBudWxsLFxuICAgICAgICAvLyBib29sZWFuLCB1bmRlZmluZWQsIGV0Yy5cbiAgICAgICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgaWYgKG9sZEZpYmVyICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIHNsb3QsIGJ1dCB3ZSBkaWRuJ3QgcmV1c2UgdGhlIGV4aXN0aW5nIGZpYmVyLCBzbyB3ZVxuICAgICAgICAgIC8vIG5lZWQgdG8gZGVsZXRlIHRoZSBleGlzdGluZyBjaGlsZC5cbiAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gbmV3RmliZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBEZWZlciBzaWJsaW5ncyBpZiB3ZSdyZSBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IGZvciB0aGlzIHNsb3QuXG4gICAgICAgIC8vIEkuZS4gaWYgd2UgaGFkIG51bGwgdmFsdWVzIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIGRlZmVyIHRoaXNcbiAgICAgICAgLy8gZm9yIGVhY2ggbnVsbCB2YWx1ZS4gSG93ZXZlciwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgdXBkYXRlU2xvdFxuICAgICAgICAvLyB3aXRoIHRoZSBwcmV2aW91cyBvbmUuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICB9XG5cbiAgICBpZiAobmV3SWR4ID09PSBuZXdDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgbmV3IGNoaWxkcmVuLiBXZSBjYW4gZGVsZXRlIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH1cblxuICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAvLyBzaW5jZSB0aGUgcmVzdCB3aWxsIGFsbCBiZSBpbnNlcnRpb25zLlxuICAgICAgZm9yICg7IG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspIHtcbiAgICAgICAgdmFyIF9uZXdGaWJlciA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZHJlbltuZXdJZHhdLCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKF9uZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH0gLy8gQWRkIGFsbCBjaGlsZHJlbiB0byBhIGtleSBtYXAgZm9yIHF1aWNrIGxvb2t1cHMuXG5cblxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTsgLy8gS2VlcCBzY2FubmluZyBhbmQgdXNlIHRoZSBtYXAgdG8gcmVzdG9yZSBkZWxldGVkIGl0ZW1zIGFzIG1vdmVzLlxuXG4gICAgZm9yICg7IG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspIHtcbiAgICAgIHZhciBfbmV3RmliZXIyID0gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBuZXdDaGlsZHJlbltuZXdJZHhdLCBsYW5lcyk7XG5cbiAgICAgIGlmIChfbmV3RmliZXIyICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgICAgaWYgKF9uZXdGaWJlcjIuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmV3IGZpYmVyIGlzIGEgd29yayBpbiBwcm9ncmVzcywgYnV0IGlmIHRoZXJlIGV4aXN0cyBhXG4gICAgICAgICAgICAvLyBjdXJyZW50LCB0aGF0IG1lYW5zIHRoYXQgd2UgcmV1c2VkIHRoZSBmaWJlci4gV2UgbmVlZCB0byBkZWxldGVcbiAgICAgICAgICAgIC8vIGl0IGZyb20gdGhlIGNoaWxkIGxpc3Qgc28gdGhhdCB3ZSBkb24ndCBhZGQgaXQgdG8gdGhlIGRlbGV0aW9uXG4gICAgICAgICAgICAvLyBsaXN0LlxuICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5kZWxldGUoX25ld0ZpYmVyMi5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBfbmV3RmliZXIyLmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXIyO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIEFueSBleGlzdGluZyBjaGlsZHJlbiB0aGF0IHdlcmVuJ3QgY29uc3VtZWQgYWJvdmUgd2VyZSBkZWxldGVkLiBXZSBuZWVkXG4gICAgICAvLyB0byBhZGQgdGhlbSB0byB0aGUgZGVsZXRpb24gbGlzdC5cbiAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZHJlbkl0ZXJhYmxlLCBsYW5lcykge1xuICAgIC8vIFRoaXMgaXMgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gYXMgcmVjb25jaWxlQ2hpbGRyZW5BcnJheSgpLFxuICAgIC8vIGJ1dCB1c2luZyB0aGUgaXRlcmF0b3IgaW5zdGVhZC5cbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG5cbiAgICBpZiAoISh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQW4gb2JqZWN0IGlzIG5vdCBhbiBpdGVyYWJsZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgcmVuZGVyaW5nIEdlbmVyYXRvcnMgYmVjYXVzZSBpdCdzIGEgbXV0YXRpb24uXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjk5NVxuICAgICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgLy8gJEZsb3dGaXhNZSBGbG93IGRvZXNuJ3Qga25vdyBhYm91dCB0b1N0cmluZ1RhZ1xuICAgICAgbmV3Q2hpbGRyZW5JdGVyYWJsZVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnR2VuZXJhdG9yJykge1xuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dEdlbmVyYXRvcnMpIHtcbiAgICAgICAgICBlcnJvcignVXNpbmcgR2VuZXJhdG9ycyBhcyBjaGlsZHJlbiBpcyB1bnN1cHBvcnRlZCBhbmQgd2lsbCBsaWtlbHkgeWllbGQgJyArICd1bmV4cGVjdGVkIHJlc3VsdHMgYmVjYXVzZSBlbnVtZXJhdGluZyBhIGdlbmVyYXRvciBtdXRhdGVzIGl0LiAnICsgJ1lvdSBtYXkgY29udmVydCBpdCB0byBhbiBhcnJheSB3aXRoIGBBcnJheS5mcm9tKClgIG9yIHRoZSAnICsgJ2BbLi4uc3ByZWFkXWAgb3BlcmF0b3IgYmVmb3JlIHJlbmRlcmluZy4gS2VlcCBpbiBtaW5kICcgKyAneW91IG1pZ2h0IG5lZWQgdG8gcG9seWZpbGwgdGhlc2UgZmVhdHVyZXMgZm9yIG9sZGVyIGJyb3dzZXJzLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IHRydWU7XG4gICAgICB9IC8vIFdhcm4gYWJvdXQgdXNpbmcgTWFwcyBhcyBjaGlsZHJlblxuXG5cbiAgICAgIGlmIChuZXdDaGlsZHJlbkl0ZXJhYmxlLmVudHJpZXMgPT09IGl0ZXJhdG9yRm4pIHtcbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNYXBzKSB7XG4gICAgICAgICAgZXJyb3IoJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHN1cHBvcnRlZC4gJyArICdVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICB9IC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgLy8gV2UnbGwgZ2V0IGEgZGlmZmVyZW50IGl0ZXJhdG9yIGxhdGVyIGZvciB0aGUgbWFpbiBwYXNzLlxuXG5cbiAgICAgIHZhciBfbmV3Q2hpbGRyZW4gPSBpdGVyYXRvckZuLmNhbGwobmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG5cbiAgICAgIGlmIChfbmV3Q2hpbGRyZW4pIHtcbiAgICAgICAgdmFyIGtub3duS2V5cyA9IG51bGw7XG5cbiAgICAgICAgdmFyIF9zdGVwID0gX25ld0NoaWxkcmVuLm5leHQoKTtcblxuICAgICAgICBmb3IgKDsgIV9zdGVwLmRvbmU7IF9zdGVwID0gX25ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgICAgIHZhciBjaGlsZCA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5ld0NoaWxkcmVuID0gaXRlcmF0b3JGbi5jYWxsKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgaWYgKCEobmV3Q2hpbGRyZW4gIT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQW4gaXRlcmFibGUgb2JqZWN0IHByb3ZpZGVkIG5vIGl0ZXJhdG9yLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBudWxsO1xuICAgIHZhciBwcmV2aW91c05ld0ZpYmVyID0gbnVsbDtcbiAgICB2YXIgb2xkRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZDtcbiAgICB2YXIgbGFzdFBsYWNlZEluZGV4ID0gMDtcbiAgICB2YXIgbmV3SWR4ID0gMDtcbiAgICB2YXIgbmV4dE9sZEZpYmVyID0gbnVsbDtcbiAgICB2YXIgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKTtcblxuICAgIGZvciAoOyBvbGRGaWJlciAhPT0gbnVsbCAmJiAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICBvbGRGaWJlciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuXG4gICAgICBpZiAobmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBicmVha3Mgb24gZW1wdHkgc2xvdHMgbGlrZSBudWxsIGNoaWxkcmVuLiBUaGF0J3NcbiAgICAgICAgLy8gdW5mb3J0dW5hdGUgYmVjYXVzZSBpdCB0cmlnZ2VycyB0aGUgc2xvdyBwYXRoIGFsbCB0aGUgdGltZS4gV2UgbmVlZFxuICAgICAgICAvLyBhIGJldHRlciB3YXkgdG8gY29tbXVuaWNhdGUgd2hldGhlciB0aGlzIHdhcyBhIG1pc3Mgb3IgbnVsbCxcbiAgICAgICAgLy8gYm9vbGVhbiwgdW5kZWZpbmVkLCBldGMuXG4gICAgICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBzbG90LCBidXQgd2UgZGlkbid0IHJldXNlIHRoZSBleGlzdGluZyBmaWJlciwgc28gd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogRGVmZXIgc2libGluZ3MgaWYgd2UncmUgbm90IGF0IHRoZSByaWdodCBpbmRleCBmb3IgdGhpcyBzbG90LlxuICAgICAgICAvLyBJLmUuIGlmIHdlIGhhZCBudWxsIHZhbHVlcyBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byBkZWZlciB0aGlzXG4gICAgICAgIC8vIGZvciBlYWNoIG51bGwgdmFsdWUuIEhvd2V2ZXIsIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBjYWxsIHVwZGF0ZVNsb3RcbiAgICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXAuZG9uZSkge1xuICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBuZXcgY2hpbGRyZW4uIFdlIGNhbiBkZWxldGUgdGhlIHJlc3QuXG4gICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBtb3JlIGV4aXN0aW5nIGNoaWxkcmVuIHdlIGNhbiBjaG9vc2UgYSBmYXN0IHBhdGhcbiAgICAgIC8vIHNpbmNlIHRoZSByZXN0IHdpbGwgYWxsIGJlIGluc2VydGlvbnMuXG4gICAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgdmFyIF9uZXdGaWJlcjMgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChfbmV3RmliZXIzID09PSBudWxsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjMsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyMztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXIzO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH0gLy8gQWRkIGFsbCBjaGlsZHJlbiB0byBhIGtleSBtYXAgZm9yIHF1aWNrIGxvb2t1cHMuXG5cblxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTsgLy8gS2VlcCBzY2FubmluZyBhbmQgdXNlIHRoZSBtYXAgdG8gcmVzdG9yZSBkZWxldGVkIGl0ZW1zIGFzIG1vdmVzLlxuXG4gICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICB2YXIgX25ld0ZpYmVyNCA9IHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuXG4gICAgICBpZiAoX25ld0ZpYmVyNCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChfbmV3RmliZXI0LmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCBmcm9tIHRoZSBjaGlsZCBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWRkIGl0IHRvIHRoZSBkZWxldGlvblxuICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKF9uZXdGaWJlcjQua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyNC5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyNCwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyNDtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXI0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgLy8gdG8gYWRkIHRoZW0gdG8gdGhlIGRlbGV0aW9uIGxpc3QuXG4gICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIHRleHRDb250ZW50LCBsYW5lcykge1xuICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBjaGVjayBmb3Iga2V5cyBvbiB0ZXh0IG5vZGVzIHNpbmNlIHdlIGRvbid0IGhhdmUgYVxuICAgIC8vIHdheSB0byBkZWZpbmUgdGhlbS5cbiAgICBpZiAoY3VycmVudEZpcnN0Q2hpbGQgIT09IG51bGwgJiYgY3VycmVudEZpcnN0Q2hpbGQudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG5vZGUgc28gbGV0J3MganVzdCB1cGRhdGUgaXQgYW5kIGRlbGV0ZVxuICAgICAgLy8gdGhlIHJlc3QuXG4gICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQuc2libGluZyk7XG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50Rmlyc3RDaGlsZCwgdGV4dENvbnRlbnQpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfSAvLyBUaGUgZXhpc3RpbmcgZmlyc3QgY2hpbGQgaXMgbm90IGEgdGV4dCBub2RlIHNvIHdlIG5lZWQgdG8gY3JlYXRlIG9uZVxuICAgIC8vIGFuZCBkZWxldGUgdGhlIGV4aXN0aW5nIG9uZXMuXG5cblxuICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KHRleHRDb250ZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBlbGVtZW50LCBsYW5lcykge1xuICAgIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgICB2YXIgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgLy8gVE9ETzogSWYga2V5ID09PSBudWxsIGFuZCBjaGlsZC5rZXkgPT09IG51bGwsIHRoZW4gdGhpcyBvbmx5IGFwcGxpZXMgdG9cbiAgICAgIC8vIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LlxuICAgICAgaWYgKGNoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoY2hpbGQudGFnKSB7XG4gICAgICAgICAgY2FzZSBGcmFnbWVudDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjaGlsZCwgZWxlbWVudC5wcm9wcy5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBleGlzdGluZy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgICAgICAgICBleGlzdGluZy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBCbG9jazpcblxuICAgICAgICAgIC8vIFdlIGludGVudGlvbmFsbHkgZmFsbHRocm91Z2ggaGVyZSBpZiBlbmFibGVCbG9ja3NBUEkgaXMgbm90IG9uLlxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZWQgbm8tZmFsbHRocm91Z2hcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChjaGlsZC5lbGVtZW50VHlwZSA9PT0gZWxlbWVudC50eXBlIHx8ICggLy8gS2VlcCB0aGlzIGNoZWNrIGlubGluZSBzbyBpdCBvbmx5IHJ1bnMgb24gdGhlIGZhbHNlIHBhdGg6XG4gICAgICAgICAgICAgICBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoY2hpbGQsIGVsZW1lbnQpICkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2V4aXN0aW5nMyA9IHVzZUZpYmVyKGNoaWxkLCBlbGVtZW50LnByb3BzKTtcblxuICAgICAgICAgICAgICAgIF9leGlzdGluZzMucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjaGlsZCwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIF9leGlzdGluZzMuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZXhpc3RpbmczO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gLy8gRGlkbid0IG1hdGNoLlxuXG5cbiAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50LnByb3BzLmNoaWxkcmVuLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcywgZWxlbWVudC5rZXkpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2NyZWF0ZWQ0ID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgIF9jcmVhdGVkNC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBlbGVtZW50KTtcbiAgICAgIF9jcmVhdGVkNC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBfY3JlYXRlZDQ7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgcG9ydGFsLCBsYW5lcykge1xuICAgIHZhciBrZXkgPSBwb3J0YWwua2V5O1xuICAgIHZhciBjaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAvLyBUT0RPOiBJZiBrZXkgPT09IG51bGwgYW5kIGNoaWxkLmtleSA9PT0gbnVsbCwgdGhlbiB0aGlzIG9ubHkgYXBwbGllcyB0b1xuICAgICAgLy8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuXG4gICAgICBpZiAoY2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gSG9zdFBvcnRhbCAmJiBjaGlsZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA9PT0gcG9ydGFsLmNvbnRhaW5lckluZm8gJiYgY2hpbGQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uID09PSBwb3J0YWwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG4gICAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY2hpbGQsIHBvcnRhbC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9IC8vIFRoaXMgQVBJIHdpbGwgdGFnIHRoZSBjaGlsZHJlbiB3aXRoIHRoZSBzaWRlLWVmZmVjdCBvZiB0aGUgcmVjb25jaWxpYXRpb25cbiAgLy8gaXRzZWxmLiBUaGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHNpZGUtZWZmZWN0IGxpc3QgYXMgd2UgcGFzcyB0aHJvdWdoIHRoZVxuICAvLyBjaGlsZHJlbiBhbmQgdGhlIHBhcmVudC5cblxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkRmliZXJzKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBub3QgcmVjdXJzaXZlLlxuICAgIC8vIElmIHRoZSB0b3AgbGV2ZWwgaXRlbSBpcyBhbiBhcnJheSwgd2UgdHJlYXQgaXQgYXMgYSBzZXQgb2YgY2hpbGRyZW4sXG4gICAgLy8gbm90IGFzIGEgZnJhZ21lbnQuIE5lc3RlZCBhcnJheXMgb24gdGhlIG90aGVyIGhhbmQgd2lsbCBiZSB0cmVhdGVkIGFzXG4gICAgLy8gZnJhZ21lbnQgbm9kZXMuIFJlY3Vyc2lvbiBoYXBwZW5zIGF0IHRoZSBub3JtYWwgZmxvdy5cbiAgICAvLyBIYW5kbGUgdG9wIGxldmVsIHVua2V5ZWQgZnJhZ21lbnRzIGFzIGlmIHRoZXkgd2VyZSBhcnJheXMuXG4gICAgLy8gVGhpcyBsZWFkcyB0byBhbiBhbWJpZ3VpdHkgYmV0d2VlbiA8PntbLi4uXX08Lz4gYW5kIDw+Li4uPC8+LlxuICAgIC8vIFdlIHRyZWF0IHRoZSBhbWJpZ3VvdXMgY2FzZXMgYWJvdmUgdGhlIHNhbWUuXG4gICAgdmFyIGlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQgPSB0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsICYmIG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgJiYgbmV3Q2hpbGQua2V5ID09PSBudWxsO1xuXG4gICAgaWYgKGlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQpIHtcbiAgICAgIG5ld0NoaWxkID0gbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW47XG4gICAgfSAvLyBIYW5kbGUgb2JqZWN0IHR5cGVzXG5cblxuICAgIHZhciBpc09iamVjdCA9IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGw7XG5cbiAgICBpZiAoaXNPYmplY3QpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykpO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSk7XG5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsICcnICsgbmV3Q2hpbGQsIGxhbmVzKSk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkpIHtcbiAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QpIHtcbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAndW5kZWZpbmVkJyAmJiAhaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCkge1xuICAgICAgLy8gSWYgdGhlIG5ldyBjaGlsZCBpcyB1bmRlZmluZWQsIGFuZCB0aGUgcmV0dXJuIGZpYmVyIGlzIGEgY29tcG9zaXRlXG4gICAgICAvLyBjb21wb25lbnQsIHRocm93IGFuIGVycm9yLiBJZiBGaWJlciByZXR1cm4gdHlwZXMgYXJlIGRpc2FibGVkLFxuICAgICAgLy8gd2UgYWxyZWFkeSB0aHJldyBhYm92ZS5cbiAgICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnJlbmRlci5faXNNb2NrRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBhbGxvdyBhdXRvLW1vY2tzIHRvIHByb2NlZWQgYXMgaWYgdGhleSdyZSByZXR1cm5pbmcgbnVsbC5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgLy8gSW50ZW50aW9uYWxseSBmYWxsIHRocm91Z2ggdG8gdGhlIG5leHQgY2FzZSwgd2hpY2ggaGFuZGxlcyBib3RoXG4gICAgICAgIC8vIGZ1bmN0aW9ucyBhbmQgY2xhc3Nlc1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVkIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgICAgY2FzZSBCbG9jazpcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIChnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKSArIFwiKC4uLik6IE5vdGhpbmcgd2FzIHJldHVybmVkIGZyb20gcmVuZGVyLiBUaGlzIHVzdWFsbHkgbWVhbnMgYSByZXR1cm4gc3RhdGVtZW50IGlzIG1pc3NpbmcuIE9yLCB0byByZW5kZXIgbm90aGluZywgcmV0dXJuIG51bGwuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFJlbWFpbmluZyBjYXNlcyBhcmUgYWxsIHRyZWF0ZWQgYXMgZW1wdHkuXG5cblxuICAgIHJldHVybiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICB9XG5cbiAgcmV0dXJuIHJlY29uY2lsZUNoaWxkRmliZXJzO1xufVxuXG52YXIgcmVjb25jaWxlQ2hpbGRGaWJlcnMgPSBDaGlsZFJlY29uY2lsZXIodHJ1ZSk7XG52YXIgbW91bnRDaGlsZEZpYmVycyA9IENoaWxkUmVjb25jaWxlcihmYWxzZSk7XG5mdW5jdGlvbiBjbG9uZUNoaWxkRmliZXJzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIGlmICghKGN1cnJlbnQgPT09IG51bGwgfHwgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPT09IGN1cnJlbnQuY2hpbGQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVzdW1pbmcgd29yayBub3QgeWV0IGltcGxlbWVudGVkLlwiICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzLmNoaWxkID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRDaGlsZCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIGN1cnJlbnRDaGlsZC5wZW5kaW5nUHJvcHMpO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5ld0NoaWxkO1xuICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcblxuICB3aGlsZSAoY3VycmVudENoaWxkLnNpYmxpbmcgIT09IG51bGwpIHtcbiAgICBjdXJyZW50Q2hpbGQgPSBjdXJyZW50Q2hpbGQuc2libGluZztcbiAgICBuZXdDaGlsZCA9IG5ld0NoaWxkLnNpYmxpbmcgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIGN1cnJlbnRDaGlsZC5wZW5kaW5nUHJvcHMpO1xuICAgIG5ld0NoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB9XG5cbiAgbmV3Q2hpbGQuc2libGluZyA9IG51bGw7XG59IC8vIFJlc2V0IGEgd29ya0luUHJvZ3Jlc3MgY2hpbGQgc2V0IHRvIHByZXBhcmUgaXQgZm9yIGEgc2Vjb25kIHBhc3MuXG5cbmZ1bmN0aW9uIHJlc2V0Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gIHZhciBjaGlsZCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgIHJlc2V0V29ya0luUHJvZ3Jlc3MoY2hpbGQsIGxhbmVzKTtcbiAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gIH1cbn1cblxudmFyIE5PX0NPTlRFWFQgPSB7fTtcbnZhciBjb250ZXh0U3RhY2tDdXJzb3IkMSA9IGNyZWF0ZUN1cnNvcihOT19DT05URVhUKTtcbnZhciBjb250ZXh0RmliZXJTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihOT19DT05URVhUKTtcbnZhciByb290SW5zdGFuY2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihOT19DT05URVhUKTtcblxuZnVuY3Rpb24gcmVxdWlyZWRDb250ZXh0KGMpIHtcbiAgaWYgKCEoYyAhPT0gTk9fQ09OVEVYVCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBob3N0IGNvbnRleHQgdG8gZXhpc3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gZ2V0Um9vdEhvc3RDb250YWluZXIoKSB7XG4gIHZhciByb290SW5zdGFuY2UgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gIHJldHVybiByb290SW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Q29udGFpbmVyKGZpYmVyLCBuZXh0Um9vdEluc3RhbmNlKSB7XG4gIC8vIFB1c2ggY3VycmVudCByb290IGluc3RhbmNlIG9udG8gdGhlIHN0YWNrO1xuICAvLyBUaGlzIGFsbG93cyB1cyB0byByZXNldCByb290IHdoZW4gcG9ydGFscyBhcmUgcG9wcGVkLlxuICBwdXNoKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBuZXh0Um9vdEluc3RhbmNlLCBmaWJlcik7IC8vIFRyYWNrIHRoZSBjb250ZXh0IGFuZCB0aGUgRmliZXIgdGhhdCBwcm92aWRlZCBpdC5cbiAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHBvcCBvbmx5IEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuXG4gIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7IC8vIEZpbmFsbHksIHdlIG5lZWQgdG8gcHVzaCB0aGUgaG9zdCBjb250ZXh0IHRvIHRoZSBzdGFjay5cbiAgLy8gSG93ZXZlciwgd2UgY2FuJ3QganVzdCBjYWxsIGdldFJvb3RIb3N0Q29udGV4dCgpIGFuZCBwdXNoIGl0IGJlY2F1c2VcbiAgLy8gd2UnZCBoYXZlIGEgZGlmZmVyZW50IG51bWJlciBvZiBlbnRyaWVzIG9uIHRoZSBzdGFjayBkZXBlbmRpbmcgb25cbiAgLy8gd2hldGhlciBnZXRSb290SG9zdENvbnRleHQoKSB0aHJvd3Mgc29tZXdoZXJlIGluIHJlbmRlcmVyIGNvZGUgb3Igbm90LlxuICAvLyBTbyB3ZSBwdXNoIGFuIGVtcHR5IHZhbHVlIGZpcnN0LiBUaGlzIGxldHMgdXMgc2FmZWx5IHVud2luZCBvbiBlcnJvcnMuXG5cbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgTk9fQ09OVEVYVCwgZmliZXIpO1xuICB2YXIgbmV4dFJvb3RDb250ZXh0ID0gZ2V0Um9vdEhvc3RDb250ZXh0KG5leHRSb290SW5zdGFuY2UpOyAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoaXMgZnVuY3Rpb24gZG9lc24ndCB0aHJvdywgcmVwbGFjZSBpdC5cblxuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgbmV4dFJvb3RDb250ZXh0LCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHBvcEhvc3RDb250YWluZXIoZmliZXIpIHtcbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xuICBwb3Aocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdENvbnRleHQoKSB7XG4gIHZhciBjb250ZXh0ID0gcmVxdWlyZWRDb250ZXh0KGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQpO1xuICByZXR1cm4gY29udGV4dDtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gIHZhciByb290SW5zdGFuY2UgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gIHZhciBjb250ZXh0ID0gcmVxdWlyZWRDb250ZXh0KGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQpO1xuICB2YXIgbmV4dENvbnRleHQgPSBnZXRDaGlsZEhvc3RDb250ZXh0KGNvbnRleHQsIGZpYmVyLnR5cGUpOyAvLyBEb24ndCBwdXNoIHRoaXMgRmliZXIncyBjb250ZXh0IHVubGVzcyBpdCdzIHVuaXF1ZS5cblxuICBpZiAoY29udGV4dCA9PT0gbmV4dENvbnRleHQpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gVHJhY2sgdGhlIGNvbnRleHQgYW5kIHRoZSBGaWJlciB0aGF0IHByb3ZpZGVkIGl0LlxuICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcG9wIG9ubHkgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG5cblxuICBwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBuZXh0Q29udGV4dCwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwb3BIb3N0Q29udGV4dChmaWJlcikge1xuICAvLyBEbyBub3QgcG9wIHVubGVzcyB0aGlzIEZpYmVyIHByb3ZpZGVkIHRoZSBjdXJyZW50IGNvbnRleHQuXG4gIC8vIHB1c2hIb3N0Q29udGV4dCgpIG9ubHkgcHVzaGVzIEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuICBpZiAoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IuY3VycmVudCAhPT0gZmliZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcG9wKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG59XG5cbnZhciBEZWZhdWx0U3VzcGVuc2VDb250ZXh0ID0gMDsgLy8gVGhlIFN1c3BlbnNlIENvbnRleHQgaXMgc3BsaXQgaW50byB0d28gcGFydHMuIFRoZSBsb3dlciBiaXRzIGlzXG4vLyBpbmhlcml0ZWQgZGVlcGx5IGRvd24gdGhlIHN1YnRyZWUuIFRoZSB1cHBlciBiaXRzIG9ubHkgYWZmZWN0XG4vLyB0aGlzIGltbWVkaWF0ZSBzdXNwZW5zZSBib3VuZGFyeSBhbmQgZ2V0cyByZXNldCBlYWNoIG5ld1xuLy8gYm91bmRhcnkgb3Igc3VzcGVuc2UgbGlzdC5cblxudmFyIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrID0gMTsgLy8gU3VidHJlZSBGbGFnczpcbi8vIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCBpbmRpY2F0ZXMgdGhhdCBvbmUgb2Ygb3VyIHBhcmVudCBTdXNwZW5zZVxuLy8gYm91bmRhcmllcyBpcyBub3QgY3VycmVudGx5IHNob3dpbmcgdmlzaWJsZSBtYWluIGNvbnRlbnQuXG4vLyBFaXRoZXIgYmVjYXVzZSBpdCBpcyBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBvciBpcyBub3QgbW91bnRlZCBhdCBhbGwuXG4vLyBXZSBjYW4gdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGRlc2lyYWJsZSB0byB0cmlnZ2VyIGEgZmFsbGJhY2sgYXRcbi8vIHRoZSBwYXJlbnQuIElmIG5vdCwgdGhlbiB3ZSBtaWdodCBuZWVkIHRvIHRyaWdnZXIgdW5kZXNpcmFibGUgYm91bmRhcmllc1xuLy8gYW5kL29yIHN1c3BlbmQgdGhlIGNvbW1pdCB0byBhdm9pZCBoaWRpbmcgdGhlIHBhcmVudCBjb250ZW50LlxuXG52YXIgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0ID0gMTsgLy8gU2hhbGxvdyBGbGFnczpcbi8vIEZvcmNlU3VzcGVuc2VGYWxsYmFjayBjYW4gYmUgdXNlZCBieSBTdXNwZW5zZUxpc3QgdG8gZm9yY2UgbmV3bHkgYWRkZWRcbi8vIGl0ZW1zIGludG8gdGhlaXIgZmFsbGJhY2sgc3RhdGUgZHVyaW5nIG9uZSBvZiB0aGUgcmVuZGVyIHBhc3Nlcy5cblxudmFyIEZvcmNlU3VzcGVuc2VGYWxsYmFjayA9IDI7XG52YXIgc3VzcGVuc2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihEZWZhdWx0U3VzcGVuc2VDb250ZXh0KTtcbmZ1bmN0aW9uIGhhc1N1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0LCBmbGFnKSB7XG4gIHJldHVybiAocGFyZW50Q29udGV4dCAmIGZsYWcpICE9PSAwO1xufVxuZnVuY3Rpb24gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCkge1xuICByZXR1cm4gcGFyZW50Q29udGV4dCAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrO1xufVxuZnVuY3Rpb24gc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0LCBzaGFsbG93Q29udGV4dCkge1xuICByZXR1cm4gcGFyZW50Q29udGV4dCAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrIHwgc2hhbGxvd0NvbnRleHQ7XG59XG5mdW5jdGlvbiBhZGRTdWJ0cmVlU3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIHN1YnRyZWVDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0IHwgc3VidHJlZUNvbnRleHQ7XG59XG5mdW5jdGlvbiBwdXNoU3VzcGVuc2VDb250ZXh0KGZpYmVyLCBuZXdDb250ZXh0KSB7XG4gIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgbmV3Q29udGV4dCwgZmliZXIpO1xufVxuZnVuY3Rpb24gcG9wU3VzcGVuc2VDb250ZXh0KGZpYmVyKSB7XG4gIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHNob3VsZENhcHR1cmVTdXNwZW5zZSh3b3JrSW5Qcm9ncmVzcywgaGFzSW52aXNpYmxlUGFyZW50KSB7XG4gIC8vIElmIGl0IHdhcyB0aGUgcHJpbWFyeSBjaGlsZHJlbiB0aGF0IGp1c3Qgc3VzcGVuZGVkLCBjYXB0dXJlIGFuZCByZW5kZXIgdGhlXG4gIC8vIGZhbGxiYWNrLiBPdGhlcndpc2UsIGRvbid0IGNhcHR1cmUgYW5kIGJ1YmJsZSB0byB0aGUgbmV4dCBib3VuZGFyeS5cbiAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5leHRTdGF0ZSAhPT0gbnVsbCkge1xuICAgIGlmIChuZXh0U3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgICAgLy8gQSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IGFsd2F5cyBjYXB0dXJlcy5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7IC8vIEluIG9yZGVyIHRvIGNhcHR1cmUsIHRoZSBTdXNwZW5zZSBjb21wb25lbnQgbXVzdCBoYXZlIGEgZmFsbGJhY2sgcHJvcC5cblxuICBpZiAocHJvcHMuZmFsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBSZWd1bGFyIGJvdW5kYXJpZXMgYWx3YXlzIGNhcHR1cmUuXG5cblxuICBpZiAocHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBJZiBpdCdzIGEgYm91bmRhcnkgd2Ugc2hvdWxkIGF2b2lkLCB0aGVuIHdlIHByZWZlciB0byBidWJibGUgdXAgdG8gdGhlXG4gIC8vIHBhcmVudCBib3VuZGFyeSBpZiBpdCBpcyBjdXJyZW50bHkgaW52aXNpYmxlLlxuXG5cbiAgaWYgKGhhc0ludmlzaWJsZVBhcmVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiB0aGUgcGFyZW50IGlzIG5vdCBhYmxlIHRvIGhhbmRsZSBpdCwgd2UgbXVzdCBoYW5kbGUgaXQuXG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGZpbmRGaXJzdFN1c3BlbmRlZChyb3cpIHtcbiAgdmFyIG5vZGUgPSByb3c7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICB2YXIgc3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZGVoeWRyYXRlZCA9IHN0YXRlLmRlaHlkcmF0ZWQ7XG5cbiAgICAgICAgaWYgKGRlaHlkcmF0ZWQgPT09IG51bGwgfHwgaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyhkZWh5ZHJhdGVkKSB8fCBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhkZWh5ZHJhdGVkKSkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VMaXN0Q29tcG9uZW50ICYmIC8vIHJldmVhbE9yZGVyIHVuZGVmaW5lZCBjYW4ndCBiZSB0cnVzdGVkIGJlY2F1c2UgaXQgZG9uJ3RcbiAgICAvLyBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgaXQgc3VzcGVuZGVkIG9yIG5vdC5cbiAgICBub2RlLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGRpZFN1c3BlbmQgPSAobm9kZS5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gICAgICBpZiAoZGlkU3VzcGVuZCkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHJvdykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSByb3cpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgTm9GbGFncyQxID1cbi8qICAqL1xuMDsgLy8gUmVwcmVzZW50cyB3aGV0aGVyIGVmZmVjdCBzaG91bGQgZmlyZS5cblxudmFyIEhhc0VmZmVjdCA9XG4vKiAqL1xuMTsgLy8gUmVwcmVzZW50cyB0aGUgcGhhc2UgaW4gd2hpY2ggdGhlIGVmZmVjdCAobm90IHRoZSBjbGVhbi11cCkgZmlyZXMuXG5cbnZhciBMYXlvdXQgPVxuLyogICAgKi9cbjI7XG52YXIgUGFzc2l2ZSQxID1cbi8qICAgKi9cbjQ7XG5cbi8vIFRoaXMgbWF5IGhhdmUgYmVlbiBhbiBpbnNlcnRpb24gb3IgYSBoeWRyYXRpb24uXG5cbnZhciBoeWRyYXRpb25QYXJlbnRGaWJlciA9IG51bGw7XG52YXIgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGw7XG52YXIgaXNIeWRyYXRpbmcgPSBmYWxzZTtcblxuZnVuY3Rpb24gZW50ZXJIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuXG4gIHZhciBwYXJlbnRJbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQocGFyZW50SW5zdGFuY2UpO1xuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICBpc0h5ZHJhdGluZyA9IHRydWU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UocmV0dXJuRmliZXIsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgZGlkTm90SHlkcmF0ZUNvbnRhaW5lckluc3RhbmNlKHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLCBpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIGRpZE5vdEh5ZHJhdGVJbnN0YW5jZShyZXR1cm5GaWJlci50eXBlLCByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzLCByZXR1cm5GaWJlci5zdGF0ZU5vZGUsIGluc3RhbmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkVG9EZWxldGUgPSBjcmVhdGVGaWJlckZyb21Ib3N0SW5zdGFuY2VGb3JEZWxldGlvbigpO1xuICBjaGlsZFRvRGVsZXRlLnN0YXRlTm9kZSA9IGluc3RhbmNlO1xuICBjaGlsZFRvRGVsZXRlLnJldHVybiA9IHJldHVybkZpYmVyO1xuICBjaGlsZFRvRGVsZXRlLmZsYWdzID0gRGVsZXRpb247IC8vIFRoaXMgbWlnaHQgc2VlbSBsaWtlIGl0IGJlbG9uZ3Mgb24gcHJvZ3Jlc3NlZEZpcnN0RGVsZXRpb24uIEhvd2V2ZXIsXG4gIC8vIHRoZXNlIGNoaWxkcmVuIGFyZSBub3QgcGFydCBvZiB0aGUgcmVjb25jaWxpYXRpb24gbGlzdCBvZiBjaGlsZHJlbi5cbiAgLy8gRXZlbiBpZiB3ZSBhYm9ydCBhbmQgcmVyZWNvbmNpbGUgdGhlIGNoaWxkcmVuLCB0aGF0IHdpbGwgdHJ5IHRvIGh5ZHJhdGVcbiAgLy8gYWdhaW4gYW5kIHRoZSBub2RlcyBhcmUgc3RpbGwgaW4gdGhlIGhvc3QgdHJlZSBzbyB0aGVzZSB3aWxsIGJlXG4gIC8vIHJlY3JlYXRlZC5cblxuICBpZiAocmV0dXJuRmliZXIubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKHJldHVybkZpYmVyLCBmaWJlcikge1xuICBmaWJlci5mbGFncyA9IGZpYmVyLmZsYWdzICYgfkh5ZHJhdGluZyB8IFBsYWNlbWVudDtcblxuICB7XG4gICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50Q29udGFpbmVyID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBwcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHR5cGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgICAgICAgICAgdmFyIHRleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBwYXJlbnRUeXBlID0gcmV0dXJuRmliZXIudHlwZTtcbiAgICAgICAgICB2YXIgcGFyZW50UHJvcHMgPSByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIHZhciBwYXJlbnRJbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgIHZhciBfdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBfcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBfdHlwZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICAgICAgICB2YXIgX3RleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgX3RleHQpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVTdXNwZW5zZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpIHtcbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciB0eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgdmFyIHByb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBjYW5IeWRyYXRlSW5zdGFuY2UobmV4dEluc3RhbmNlLCB0eXBlKTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBmaWJlci5zdGF0ZU5vZGUgPSBpbnN0YW5jZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIHZhciB0ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgdGV4dEluc3RhbmNlID0gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShuZXh0SW5zdGFuY2UsIHRleHQpO1xuXG4gICAgICAgIGlmICh0ZXh0SW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBmaWJlci5zdGF0ZU5vZGUgPSB0ZXh0SW5zdGFuY2U7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2UoZmliZXIpIHtcbiAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuXG4gIGlmICghbmV4dEluc3RhbmNlKSB7XG4gICAgLy8gTm90aGluZyB0byBoeWRyYXRlLiBNYWtlIGl0IGFuIGluc2VydGlvbi5cbiAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmaXJzdEF0dGVtcHRlZEluc3RhbmNlID0gbmV4dEluc3RhbmNlO1xuXG4gIGlmICghdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSkge1xuICAgIC8vIElmIHdlIGNhbid0IGh5ZHJhdGUgdGhpcyBpbnN0YW5jZSBsZXQncyB0cnkgdGhlIG5leHQgb25lLlxuICAgIC8vIFdlIHVzZSB0aGlzIGFzIGEgaGV1cmlzdGljLiBJdCdzIGJhc2VkIG9uIGludHVpdGlvbiBhbmQgbm90IGRhdGEgc28gaXRcbiAgICAvLyBtaWdodCBiZSBmbGF3ZWQgb3IgdW5uZWNlc3NhcnkuXG4gICAgbmV4dEluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UpO1xuXG4gICAgaWYgKCFuZXh0SW5zdGFuY2UgfHwgIXRyeUh5ZHJhdGUoZmliZXIsIG5leHRJbnN0YW5jZSkpIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gaHlkcmF0ZS4gTWFrZSBpdCBhbiBpbnNlcnRpb24uXG4gICAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuICAgICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIG1hdGNoZWQgdGhlIG5leHQgb25lLCB3ZSdsbCBub3cgYXNzdW1lIHRoYXQgdGhlIGZpcnN0IG9uZSB3YXNcbiAgICAvLyBzdXBlcmZsdW91cyBhbmQgd2UnbGwgZGVsZXRlIGl0LiBTaW5jZSB3ZSBjYW4ndCBlYWdlcmx5IGRlbGV0ZSBpdFxuICAgIC8vIHdlJ2xsIGhhdmUgdG8gc2NoZWR1bGUgYSBkZWxldGlvbi4gVG8gZG8gdGhhdCwgdGhpcyBub2RlIG5lZWRzIGEgZHVtbXlcbiAgICAvLyBmaWJlciBhc3NvY2lhdGVkIHdpdGggaXQuXG5cblxuICAgIGRlbGV0ZUh5ZHJhdGFibGVJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSk7XG4gIH1cblxuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQobmV4dEluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZShmaWJlciwgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCkge1xuXG4gIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBoeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIGZpYmVyLnR5cGUsIGZpYmVyLm1lbW9pemVkUHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGZpYmVyKTsgLy8gVE9ETzogVHlwZSB0aGlzIHNwZWNpZmljIHRvIHRoaXMgdHlwZSBvZiBjb21wb25lbnQuXG5cbiAgZmliZXIudXBkYXRlUXVldWUgPSB1cGRhdGVQYXlsb2FkOyAvLyBJZiB0aGUgdXBkYXRlIHBheWxvYWQgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSBjaGFuZ2Ugb3IgaWYgdGhlcmVcbiAgLy8gaXMgYSBuZXcgcmVmIHdlIG1hcmsgdGhpcyBhcyBhbiB1cGRhdGUuXG5cbiAgaWYgKHVwZGF0ZVBheWxvYWQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2UoZmliZXIpIHtcblxuICB2YXIgdGV4dEluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICB2YXIgdGV4dENvbnRlbnQgPSBmaWJlci5tZW1vaXplZFByb3BzO1xuICB2YXIgc2hvdWxkVXBkYXRlID0gaHlkcmF0ZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50LCBmaWJlcik7XG5cbiAge1xuICAgIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlIGlzIGNhbGxlZCBpbiBhIGNvbnRleHQgd2hlcmUgdGhlXG4gICAgICAvLyBoeWRyYXRpb24gcGFyZW50IGlzIHRoZSBwYXJlbnQgaG9zdCBjb21wb25lbnQgb2YgdGhpcyBob3N0IHRleHQuXG4gICAgICB2YXIgcmV0dXJuRmliZXIgPSBoeWRyYXRpb25QYXJlbnRGaWJlcjtcblxuICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudENvbnRhaW5lciA9IHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgICBkaWROb3RNYXRjaEh5ZHJhdGVkQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRQcm9wcyA9IHJldHVybkZpYmVyLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRJbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgZGlkTm90TWF0Y2hIeWRyYXRlZFRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzaG91bGRVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIHNraXBQYXN0RGVoeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2UoZmliZXIpIHtcblxuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG4gIHZhciBzdXNwZW5zZUluc3RhbmNlID0gc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCA/IHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZCA6IG51bGw7XG5cbiAgaWYgKCFzdXNwZW5zZUluc3RhbmNlKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gaGF2ZSBhIGh5ZHJhdGVkIHN1c3BlbnNlIGluc3RhbmNlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpIHtcbiAgdmFyIHBhcmVudCA9IGZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsICYmIHBhcmVudC50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgcGFyZW50LnRhZyAhPT0gSG9zdFJvb3QgJiYgcGFyZW50LnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIHBvcEh5ZHJhdGlvblN0YXRlKGZpYmVyKSB7XG5cbiAgaWYgKGZpYmVyICE9PSBoeWRyYXRpb25QYXJlbnRGaWJlcikge1xuICAgIC8vIFdlJ3JlIGRlZXBlciB0aGFuIHRoZSBjdXJyZW50IGh5ZHJhdGlvbiBjb250ZXh0LCBpbnNpZGUgYW4gaW5zZXJ0ZWRcbiAgICAvLyB0cmVlLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICAvLyBJZiB3ZSdyZSBub3QgY3VycmVudGx5IGh5ZHJhdGluZyBidXQgd2UncmUgaW4gYSBoeWRyYXRpb24gY29udGV4dCwgdGhlblxuICAgIC8vIHdlIHdlcmUgYW4gaW5zZXJ0aW9uIGFuZCBub3cgbmVlZCB0byBwb3AgdXAgcmVlbnRlciBoeWRyYXRpb24gb2Ygb3VyXG4gICAgLy8gc2libGluZ3MuXG4gICAgcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcik7XG4gICAgaXNIeWRyYXRpbmcgPSB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0eXBlID0gZmliZXIudHlwZTsgLy8gSWYgd2UgaGF2ZSBhbnkgcmVtYWluaW5nIGh5ZHJhdGFibGUgbm9kZXMsIHdlIG5lZWQgdG8gZGVsZXRlIHRoZW0gbm93LlxuICAvLyBXZSBvbmx5IGRvIHRoaXMgZGVlcGVyIHRoYW4gaGVhZCBhbmQgYm9keSBzaW5jZSB0aGV5IHRlbmQgdG8gaGF2ZSByYW5kb21cbiAgLy8gb3RoZXIgbm9kZXMgaW4gdGhlbS4gV2UgYWxzbyBpZ25vcmUgY29tcG9uZW50cyB3aXRoIHB1cmUgdGV4dCBjb250ZW50IGluXG4gIC8vIHNpZGUgb2YgdGhlbS5cbiAgLy8gVE9ETzogQmV0dGVyIGhldXJpc3RpYy5cblxuICBpZiAoZmliZXIudGFnICE9PSBIb3N0Q29tcG9uZW50IHx8IHR5cGUgIT09ICdoZWFkJyAmJiB0eXBlICE9PSAnYm9keScgJiYgIXNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIGZpYmVyLm1lbW9pemVkUHJvcHMpKSB7XG4gICAgdmFyIG5leHRJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG5cbiAgICB3aGlsZSAobmV4dEluc3RhbmNlKSB7XG4gICAgICBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UoZmliZXIsIG5leHRJbnN0YW5jZSk7XG4gICAgICBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobmV4dEluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKTtcblxuICBpZiAoZmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBza2lwUGFzdERlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKGZpYmVyKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gaHlkcmF0aW9uUGFyZW50RmliZXIgPyBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoZmliZXIuc3RhdGVOb2RlKSA6IG51bGw7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVzZXRIeWRyYXRpb25TdGF0ZSgpIHtcblxuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IG51bGw7XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsO1xuICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRJc0h5ZHJhdGluZygpIHtcbiAgcmV0dXJuIGlzSHlkcmF0aW5nO1xufVxuXG4vLyBhbmQgc2hvdWxkIGJlIHJlc2V0IGJlZm9yZSBzdGFydGluZyBhIG5ldyByZW5kZXIuXG4vLyBUaGlzIHRyYWNrcyB3aGljaCBtdXRhYmxlIHNvdXJjZXMgbmVlZCB0byBiZSByZXNldCBhZnRlciBhIHJlbmRlci5cblxudmFyIHdvcmtJblByb2dyZXNzU291cmNlcyA9IFtdO1xudmFyIHJlbmRlcmVyU2lnaWwkMTtcblxue1xuICAvLyBVc2VkIHRvIGRldGVjdCBtdWx0aXBsZSByZW5kZXJlcnMgdXNpbmcgdGhlIHNhbWUgbXV0YWJsZSBzb3VyY2UuXG4gIHJlbmRlcmVyU2lnaWwkMSA9IHt9O1xufVxuXG5mdW5jdGlvbiBtYXJrU291cmNlQXNEaXJ0eShtdXRhYmxlU291cmNlKSB7XG4gIHdvcmtJblByb2dyZXNzU291cmNlcy5wdXNoKG11dGFibGVTb3VyY2UpO1xufVxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmtJblByb2dyZXNzU291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtdXRhYmxlU291cmNlID0gd29ya0luUHJvZ3Jlc3NTb3VyY2VzW2ldO1xuXG4gICAge1xuICAgICAgbXV0YWJsZVNvdXJjZS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLmxlbmd0aCA9IDA7XG59XG5mdW5jdGlvbiBnZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24obXV0YWJsZVNvdXJjZSkge1xuICB7XG4gICAgcmV0dXJuIG11dGFibGVTb3VyY2UuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihtdXRhYmxlU291cmNlLCB2ZXJzaW9uKSB7XG4gIHtcbiAgICBtdXRhYmxlU291cmNlLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5ID0gdmVyc2lvbjtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzU291cmNlcy5wdXNoKG11dGFibGVTb3VyY2UpO1xufVxuZnVuY3Rpb24gd2FybkFib3V0TXVsdGlwbGVSZW5kZXJlcnNERVYobXV0YWJsZVNvdXJjZSkge1xuICB7XG4gICAge1xuICAgICAgaWYgKG11dGFibGVTb3VyY2UuX2N1cnJlbnRQcmltYXJ5UmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgICBtdXRhYmxlU291cmNlLl9jdXJyZW50UHJpbWFyeVJlbmRlcmVyID0gcmVuZGVyZXJTaWdpbCQxO1xuICAgICAgfSBlbHNlIGlmIChtdXRhYmxlU291cmNlLl9jdXJyZW50UHJpbWFyeVJlbmRlcmVyICE9PSByZW5kZXJlclNpZ2lsJDEpIHtcbiAgICAgICAgZXJyb3IoJ0RldGVjdGVkIG11bHRpcGxlIHJlbmRlcmVycyBjb25jdXJyZW50bHkgcmVuZGVyaW5nIHRoZSAnICsgJ3NhbWUgbXV0YWJsZSBzb3VyY2UuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyBFYWdlciByZWFkcyB0aGUgdmVyc2lvbiBvZiBhIG11dGFibGUgc291cmNlIGFuZCBzdG9yZXMgaXQgb24gdGhlIHJvb3QuXG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztcbnZhciBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcjtcblxue1xuICBkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyID0ge307XG4gIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbn1cblxuLy8gVGhlc2UgYXJlIHNldCByaWdodCBiZWZvcmUgY2FsbGluZyB0aGUgY29tcG9uZW50LlxudmFyIHJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuIEkndmUgbmFtZWQgaXQgZGlmZmVyZW50bHkgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbVxuLy8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgaG9vay5cblxudmFyIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsOyAvLyBIb29rcyBhcmUgc3RvcmVkIGFzIGEgbGlua2VkIGxpc3Qgb24gdGhlIGZpYmVyJ3MgbWVtb2l6ZWRTdGF0ZSBmaWVsZC4gVGhlXG4vLyBjdXJyZW50IGhvb2sgbGlzdCBpcyB0aGUgbGlzdCB0aGF0IGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgZmliZXIuIFRoZVxuLy8gd29yay1pbi1wcm9ncmVzcyBob29rIGxpc3QgaXMgYSBuZXcgbGlzdCB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4vLyB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuXG52YXIgY3VycmVudEhvb2sgPSBudWxsO1xudmFyIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7IC8vIFdoZXRoZXIgYW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgYXQgYW55IHBvaW50IGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLiBUaGlzXG4vLyBkb2VzIG5vdCBnZXQgcmVzZXQgaWYgd2UgZG8gYW5vdGhlciByZW5kZXIgcGFzczsgb25seSB3aGVuIHdlJ3JlIGNvbXBsZXRlbHlcbi8vIGZpbmlzaGVkIGV2YWx1YXRpbmcgdGhpcyBjb21wb25lbnQuIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHNvIHdlIGtub3dcbi8vIHdoZXRoZXIgd2UgbmVlZCB0byBjbGVhciByZW5kZXIgcGhhc2UgdXBkYXRlcyBhZnRlciBhIHRocm93LlxuXG52YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlOyAvLyBXaGVyZSBhbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBvbmx5IGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgcGFzcy4gVGhpc1xuLy8gZ2V0cyByZXNldCBhZnRlciBlYWNoIGF0dGVtcHQuXG4vLyBUT0RPOiBNYXliZSB0aGVyZSdzIHNvbWUgd2F5IHRvIGNvbnNvbGlkYXRlIHRoaXMgd2l0aFxuLy8gYGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVgLiBPciB3aXRoIGBudW1iZXJPZlJlUmVuZGVyc2AuXG5cbnZhciBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBmYWxzZTtcbnZhciBSRV9SRU5ERVJfTElNSVQgPSAyNTsgLy8gSW4gREVWLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIHByaW1pdGl2ZSBob29rXG5cbnZhciBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7IC8vIEluIERFViwgdGhpcyBsaXN0IGVuc3VyZXMgdGhhdCBob29rcyBhcmUgY2FsbGVkIGluIHRoZSBzYW1lIG9yZGVyIGJldHdlZW4gcmVuZGVycy5cbi8vIFRoZSBsaXN0IHN0b3JlcyB0aGUgb3JkZXIgb2YgaG9va3MgdXNlZCBkdXJpbmcgdGhlIGluaXRpYWwgcmVuZGVyIChtb3VudCkuXG4vLyBTdWJzZXF1ZW50IHJlbmRlcnMgKHVwZGF0ZXMpIHJlZmVyZW5jZSB0aGlzIGxpc3QuXG5cbnZhciBob29rVHlwZXNEZXYgPSBudWxsO1xudmFyIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7IC8vIEluIERFViwgdGhpcyB0cmFja3Mgd2hldGhlciBjdXJyZW50bHkgcmVuZGVyaW5nIGNvbXBvbmVudCBuZWVkcyB0byBpZ25vcmVcbi8vIHRoZSBkZXBlbmRlbmNpZXMgZm9yIEhvb2tzIHRoYXQgbmVlZCB0aGVtIChlLmcuIHVzZUVmZmVjdCBvciB1c2VNZW1vKS5cbi8vIFdoZW4gdHJ1ZSwgc3VjaCBIb29rcyB3aWxsIGFsd2F5cyBiZSBcInJlbW91bnRlZFwiLiBPbmx5IHVzZWQgZHVyaW5nIGhvdCByZWxvYWQuXG5cbnZhciBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBtb3VudEhvb2tUeXBlc0RldigpIHtcbiAge1xuICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuXG4gICAgaWYgKGhvb2tUeXBlc0RldiA9PT0gbnVsbCkge1xuICAgICAgaG9va1R5cGVzRGV2ID0gW2hvb2tOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaG9va1R5cGVzRGV2LnB1c2goaG9va05hbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVIb29rVHlwZXNEZXYoKSB7XG4gIHtcbiAgICB2YXIgaG9va05hbWUgPSBjdXJyZW50SG9va05hbWVJbkRldjtcblxuICAgIGlmIChob29rVHlwZXNEZXYgIT09IG51bGwpIHtcbiAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2Kys7XG5cbiAgICAgIGlmIChob29rVHlwZXNEZXZbaG9va1R5cGVzVXBkYXRlSW5kZXhEZXZdICE9PSBob29rTmFtZSkge1xuICAgICAgICB3YXJuT25Ib29rTWlzbWF0Y2hJbkRldihob29rTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpIHtcbiAge1xuICAgIGlmIChkZXBzICE9PSB1bmRlZmluZWQgJiYgZGVwcyAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShkZXBzKSkge1xuICAgICAgLy8gVmVyaWZ5IGRlcHMsIGJ1dCBvbmx5IG9uIG1vdW50IHRvIGF2b2lkIGV4dHJhIGNoZWNrcy5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhlaXIgdHlwZSB3b3VsZCBjaGFuZ2UgYXMgdXN1YWxseSB5b3UgZGVmaW5lIHRoZW0gaW5saW5lLlxuICAgICAgZXJyb3IoJyVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgdGhhdCBpcyBub3QgYW4gYXJyYXkgKGluc3RlYWQsIHJlY2VpdmVkIGAlc2ApLiBXaGVuICcgKyAnc3BlY2lmaWVkLCB0aGUgZmluYWwgYXJndW1lbnQgbXVzdCBiZSBhbiBhcnJheS4nLCBjdXJyZW50SG9va05hbWVJbkRldiwgdHlwZW9mIGRlcHMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuT25Ib29rTWlzbWF0Y2hJbkRldihjdXJyZW50SG9va05hbWUpIHtcbiAge1xuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnR5cGUpO1xuXG4gICAgaWYgKCFkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciB0YWJsZSA9ICcnO1xuICAgICAgICB2YXIgc2Vjb25kQ29sdW1uU3RhcnQgPSAzMDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBob29rVHlwZXNVcGRhdGVJbmRleERldjsgaSsrKSB7XG4gICAgICAgICAgdmFyIG9sZEhvb2tOYW1lID0gaG9va1R5cGVzRGV2W2ldO1xuICAgICAgICAgIHZhciBuZXdIb29rTmFtZSA9IGkgPT09IGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID8gY3VycmVudEhvb2tOYW1lIDogb2xkSG9va05hbWU7XG4gICAgICAgICAgdmFyIHJvdyA9IGkgKyAxICsgXCIuIFwiICsgb2xkSG9va05hbWU7IC8vIEV4dHJhIHNwYWNlIHNvIHNlY29uZCBjb2x1bW4gbGluZXMgdXBcbiAgICAgICAgICAvLyBsb2wgQCBJRSBub3Qgc3VwcG9ydGluZyBTdHJpbmcjcmVwZWF0XG5cbiAgICAgICAgICB3aGlsZSAocm93Lmxlbmd0aCA8IHNlY29uZENvbHVtblN0YXJ0KSB7XG4gICAgICAgICAgICByb3cgKz0gJyAnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJvdyArPSBuZXdIb29rTmFtZSArICdcXG4nO1xuICAgICAgICAgIHRhYmxlICs9IHJvdztcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yKCdSZWFjdCBoYXMgZGV0ZWN0ZWQgYSBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIEhvb2tzIGNhbGxlZCBieSAlcy4gJyArICdUaGlzIHdpbGwgbGVhZCB0byBidWdzIGFuZCBlcnJvcnMgaWYgbm90IGZpeGVkLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkIHRoZSBSdWxlcyBvZiBIb29rczogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzXFxuXFxuJyArICcgICBQcmV2aW91cyByZW5kZXIgICAgICAgICAgICBOZXh0IHJlbmRlclxcbicgKyAnICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuJyArICclcycgKyAnICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXFxuJywgY29tcG9uZW50TmFtZSwgdGFibGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0ludmFsaWRIb29rRXJyb3IoKSB7XG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSB7XG4gIHtcbiAgICBpZiAoaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMpIHtcbiAgICAgIC8vIE9ubHkgdHJ1ZSB3aGVuIHRoaXMgY29tcG9uZW50IGlzIGJlaW5nIGhvdCByZWxvYWRlZC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAocHJldkRlcHMgPT09IG51bGwpIHtcbiAgICB7XG4gICAgICBlcnJvcignJXMgcmVjZWl2ZWQgYSBmaW5hbCBhcmd1bWVudCBkdXJpbmcgdGhpcyByZW5kZXIsIGJ1dCBub3QgZHVyaW5nICcgKyAndGhlIHByZXZpb3VzIHJlbmRlci4gRXZlbiB0aG91Z2ggdGhlIGZpbmFsIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCAnICsgJ2l0cyB0eXBlIGNhbm5vdCBjaGFuZ2UgYmV0d2VlbiByZW5kZXJzLicsIGN1cnJlbnRIb29rTmFtZUluRGV2KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB7XG4gICAgLy8gRG9uJ3QgYm90aGVyIGNvbXBhcmluZyBsZW5ndGhzIGluIHByb2QgYmVjYXVzZSB0aGVzZSBhcnJheXMgc2hvdWxkIGJlXG4gICAgLy8gcGFzc2VkIGlubGluZS5cbiAgICBpZiAobmV4dERlcHMubGVuZ3RoICE9PSBwcmV2RGVwcy5sZW5ndGgpIHtcbiAgICAgIGVycm9yKCdUaGUgZmluYWwgYXJndW1lbnQgcGFzc2VkIHRvICVzIGNoYW5nZWQgc2l6ZSBiZXR3ZWVuIHJlbmRlcnMuIFRoZSAnICsgJ29yZGVyIGFuZCBzaXplIG9mIHRoaXMgYXJyYXkgbXVzdCByZW1haW4gY29uc3RhbnQuXFxuXFxuJyArICdQcmV2aW91czogJXNcXG4nICsgJ0luY29taW5nOiAlcycsIGN1cnJlbnRIb29rTmFtZUluRGV2LCBcIltcIiArIHByZXZEZXBzLmpvaW4oJywgJykgKyBcIl1cIiwgXCJbXCIgKyBuZXh0RGVwcy5qb2luKCcsICcpICsgXCJdXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldkRlcHMubGVuZ3RoICYmIGkgPCBuZXh0RGVwcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChvYmplY3RJcyhuZXh0RGVwc1tpXSwgcHJldkRlcHNbaV0pKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcsIG5leHRSZW5kZXJMYW5lcykge1xuICByZW5kZXJMYW5lcyA9IG5leHRSZW5kZXJMYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IHdvcmtJblByb2dyZXNzO1xuXG4gIHtcbiAgICBob29rVHlwZXNEZXYgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5fZGVidWdIb29rVHlwZXMgOiBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7IC8vIFVzZWQgZm9yIGhvdCByZWxvYWRpbmc6XG5cbiAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzOyAvLyBUaGUgZm9sbG93aW5nIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZXNldFxuICAvLyBjdXJyZW50SG9vayA9IG51bGw7XG4gIC8vIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gIC8vIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcbiAgLy8gVE9ETyBXYXJuIGlmIG5vIGhvb2tzIGFyZSB1c2VkIGF0IGFsbCBkdXJpbmcgbW91bnQsIHRoZW4gc29tZSBhcmUgdXNlZCBkdXJpbmcgdXBkYXRlLlxuICAvLyBDdXJyZW50bHkgd2Ugd2lsbCBpZGVudGlmeSB0aGUgdXBkYXRlIHJlbmRlciBhcyBhIG1vdW50IGJlY2F1c2UgbWVtb2l6ZWRTdGF0ZSA9PT0gbnVsbC5cbiAgLy8gVGhpcyBpcyB0cmlja3kgYmVjYXVzZSBpdCdzIHZhbGlkIGZvciBjZXJ0YWluIHR5cGVzIG9mIGNvbXBvbmVudHMgKGUuZy4gUmVhY3QubGF6eSlcbiAgLy8gVXNpbmcgbWVtb2l6ZWRTdGF0ZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbW91bnQvdXBkYXRlIG9ubHkgd29ya3MgaWYgYXQgbGVhc3Qgb25lIHN0YXRlZnVsIGhvb2sgaXMgdXNlZC5cbiAgLy8gTm9uLXN0YXRlZnVsIGhvb2tzIChlLmcuIGNvbnRleHQpIGRvbid0IGdldCBhZGRlZCB0byBtZW1vaXplZFN0YXRlLFxuICAvLyBzbyBtZW1vaXplZFN0YXRlIHdvdWxkIGJlIG51bGwgZHVyaW5nIHVwZGF0ZXMgYW5kIG1vdW50cy5cblxuICB7XG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgfSBlbHNlIGlmIChob29rVHlwZXNEZXYgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgZGlzcGF0Y2hlciBoYW5kbGVzIGFuIGVkZ2UgY2FzZSB3aGVyZSBhIGNvbXBvbmVudCBpcyB1cGRhdGluZyxcbiAgICAgIC8vIGJ1dCBubyBzdGF0ZWZ1bCBob29rcyBoYXZlIGJlZW4gdXNlZC5cbiAgICAgIC8vIFdlIHdhbnQgdG8gbWF0Y2ggdGhlIHByb2R1Y3Rpb24gY29kZSBiZWhhdmlvciAod2hpY2ggd2lsbCB1c2UgSG9va3NEaXNwYXRjaGVyT25Nb3VudCksXG4gICAgICAvLyBidXQgd2l0aCB0aGUgZXh0cmEgREVWIHZhbGlkYXRpb24gdG8gZW5zdXJlIGhvb2tzIG9yZGVyaW5nIGhhc24ndCBjaGFuZ2VkLlxuICAgICAgLy8gVGhpcyBkaXNwYXRjaGVyIGRvZXMgdGhhdC5cbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVjtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkcmVuID0gQ29tcG9uZW50KHByb3BzLCBzZWNvbmRBcmcpOyAvLyBDaGVjayBpZiB0aGVyZSB3YXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlXG5cbiAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcykge1xuICAgIC8vIEtlZXAgcmVuZGVyaW5nIGluIGEgbG9vcCBmb3IgYXMgbG9uZyBhcyByZW5kZXIgcGhhc2UgdXBkYXRlcyBjb250aW51ZSB0b1xuICAgIC8vIGJlIHNjaGVkdWxlZC4gVXNlIGEgY291bnRlciB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlxuICAgIHZhciBudW1iZXJPZlJlUmVuZGVycyA9IDA7XG5cbiAgICBkbyB7XG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBmYWxzZTtcblxuICAgICAgaWYgKCEobnVtYmVyT2ZSZVJlbmRlcnMgPCBSRV9SRU5ERVJfTElNSVQpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJUb28gbWFueSByZS1yZW5kZXJzLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiByZW5kZXJzIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG51bWJlck9mUmVSZW5kZXJzICs9IDE7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gRXZlbiB3aGVuIGhvdCByZWxvYWRpbmcsIGFsbG93IGRlcGVuZGVuY2llcyB0byBzdGFiaWxpemVcbiAgICAgICAgLy8gYWZ0ZXIgZmlyc3QgcmVuZGVyIHRvIHByZXZlbnQgaW5maW5pdGUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMuXG4gICAgICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gZmFsc2U7XG4gICAgICB9IC8vIFN0YXJ0IG92ZXIgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cblxuICAgICAgY3VycmVudEhvb2sgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICAgICAge1xuICAgICAgICAvLyBBbHNvIHZhbGlkYXRlIGhvb2sgb3JkZXIgZm9yIGNhc2NhZGluZyB1cGRhdGVzLlxuICAgICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgICAgfVxuXG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9ICBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgO1xuICAgICAgY2hpbGRyZW4gPSBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7XG4gICAgfSB3aGlsZSAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzKTtcbiAgfSAvLyBXZSBjYW4gYXNzdW1lIHRoZSBwcmV2aW91cyBkaXNwYXRjaGVyIGlzIGFsd2F5cyB0aGlzIG9uZSwgc2luY2Ugd2Ugc2V0IGl0XG4gIC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbmRlciBwaGFzZSBhbmQgdGhlcmUncyBubyByZS1lbnRyYW5jeS5cblxuXG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBob29rVHlwZXNEZXY7XG4gIH0gLy8gVGhpcyBjaGVjayB1c2VzIGN1cnJlbnRIb29rIHNvIHRoYXQgaXQgd29ya3MgdGhlIHNhbWUgaW4gREVWIGFuZCBwcm9kIGJ1bmRsZXMuXG4gIC8vIGhvb2tUeXBlc0RldiBjb3VsZCBjYXRjaCBtb3JlIGNhc2VzIChlLmcuIGNvbnRleHQpIGJ1dCBvbmx5IGluIERFViBidW5kbGVzLlxuXG5cbiAgdmFyIGRpZFJlbmRlclRvb0Zld0hvb2tzID0gY3VycmVudEhvb2sgIT09IG51bGwgJiYgY3VycmVudEhvb2submV4dCAhPT0gbnVsbDtcbiAgcmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDtcbiAgY3VycmVudEhvb2sgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuXG4gIHtcbiAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgaG9va1R5cGVzRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICB9XG5cbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuXG4gIGlmICghIWRpZFJlbmRlclRvb0Zld0hvb2tzKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVuZGVyZWQgZmV3ZXIgaG9va3MgdGhhbiBleHBlY3RlZC4gVGhpcyBtYXkgYmUgY2F1c2VkIGJ5IGFuIGFjY2lkZW50YWwgZWFybHkgcmV0dXJuIHN0YXRlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cbmZ1bmN0aW9uIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbGFuZXMpIHtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+KFBhc3NpdmUgfCBVcGRhdGUpO1xuICBjdXJyZW50LmxhbmVzID0gcmVtb3ZlTGFuZXMoY3VycmVudC5sYW5lcywgbGFuZXMpO1xufVxuZnVuY3Rpb24gcmVzZXRIb29rc0FmdGVyVGhyb3coKSB7XG4gIC8vIFdlIGNhbiBhc3N1bWUgdGhlIHByZXZpb3VzIGRpc3BhdGNoZXIgaXMgYWx3YXlzIHRoaXMgb25lLCBzaW5jZSB3ZSBzZXQgaXRcbiAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVuZGVyIHBoYXNlIGFuZCB0aGVyZSdzIG5vIHJlLWVudHJhbmN5LlxuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSkge1xuICAgIC8vIFRoZXJlIHdlcmUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMuIFRoZXNlIGFyZSBvbmx5IHZhbGlkIGZvciB0aGlzIHJlbmRlclxuICAgIC8vIHBoYXNlLCB3aGljaCB3ZSBhcmUgbm93IGFib3J0aW5nLiBSZW1vdmUgdGhlIHVwZGF0ZXMgZnJvbSB0aGUgcXVldWVzIHNvXG4gICAgLy8gdGhleSBkbyBub3QgcGVyc2lzdCB0byB0aGUgbmV4dCByZW5kZXIuIERvIG5vdCByZW1vdmUgdXBkYXRlcyBmcm9tIGhvb2tzXG4gICAgLy8gdGhhdCB3ZXJlbid0IHByb2Nlc3NlZC5cbiAgICAvL1xuICAgIC8vIE9ubHkgcmVzZXQgdGhlIHVwZGF0ZXMgZnJvbSB0aGUgcXVldWUgaWYgaXQgaGFzIGEgY2xvbmUuIElmIGl0IGRvZXNcbiAgICAvLyBub3QgaGF2ZSBhIGNsb25lLCB0aGF0IG1lYW5zIGl0IHdhc24ndCBwcm9jZXNzZWQsIGFuZCB0aGUgdXBkYXRlcyB3ZXJlXG4gICAgLy8gc2NoZWR1bGVkIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgdmFyIGhvb2sgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGU7XG5cbiAgICB3aGlsZSAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcblxuICAgICAgaWYgKHF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBob29rID0gaG9vay5uZXh0O1xuICAgIH1cblxuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICB7XG4gICAgaG9va1R5cGVzRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDtcbiAgICBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gZmFsc2U7XG4gIH1cblxuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gIHZhciBob29rID0ge1xuICAgIG1lbW9pemVkU3RhdGU6IG51bGwsXG4gICAgYmFzZVN0YXRlOiBudWxsLFxuICAgIGJhc2VRdWV1ZTogbnVsbCxcbiAgICBxdWV1ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgaW4gdGhlIGxpc3RcbiAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBob29rO1xuICB9IGVsc2Uge1xuICAgIC8vIEFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgd29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBob29rO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbn1cblxuZnVuY3Rpb24gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkge1xuICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYm90aCBmb3IgdXBkYXRlcyBhbmQgZm9yIHJlLXJlbmRlcnMgdHJpZ2dlcmVkIGJ5IGFcbiAgLy8gcmVuZGVyIHBoYXNlIHVwZGF0ZS4gSXQgYXNzdW1lcyB0aGVyZSBpcyBlaXRoZXIgYSBjdXJyZW50IGhvb2sgd2UgY2FuXG4gIC8vIGNsb25lLCBvciBhIHdvcmstaW4tcHJvZ3Jlc3MgaG9vayBmcm9tIGEgcHJldmlvdXMgcmVuZGVyIHBhc3MgdGhhdCB3ZSBjYW5cbiAgLy8gdXNlIGFzIGEgYmFzZS4gV2hlbiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBiYXNlIGxpc3QsIHdlIG11c3Qgc3dpdGNoIHRvXG4gIC8vIHRoZSBkaXNwYXRjaGVyIHVzZWQgZm9yIG1vdW50cy5cbiAgdmFyIG5leHRDdXJyZW50SG9vaztcblxuICBpZiAoY3VycmVudEhvb2sgPT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dEN1cnJlbnRIb29rID0gbnVsbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgfVxuXG4gIHZhciBuZXh0V29ya0luUHJvZ3Jlc3NIb29rO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlO1xuICB9IGVsc2Uge1xuICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dDtcbiAgfVxuXG4gIGlmIChuZXh0V29ya0luUHJvZ3Jlc3NIb29rICE9PSBudWxsKSB7XG4gICAgLy8gVGhlcmUncyBhbHJlYWR5IGEgd29yay1pbi1wcm9ncmVzcy4gUmV1c2UgaXQuXG4gICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbmV4dFdvcmtJblByb2dyZXNzSG9vaztcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gICAgY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2s7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ2xvbmUgZnJvbSB0aGUgY3VycmVudCBob29rLlxuICAgIGlmICghKG5leHRDdXJyZW50SG9vayAhPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmVuZGVyZWQgbW9yZSBob29rcyB0aGFuIGR1cmluZyB0aGUgcHJldmlvdXMgcmVuZGVyLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2s7XG4gICAgdmFyIG5ld0hvb2sgPSB7XG4gICAgICBtZW1vaXplZFN0YXRlOiBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLFxuICAgICAgYmFzZVN0YXRlOiBjdXJyZW50SG9vay5iYXNlU3RhdGUsXG4gICAgICBiYXNlUXVldWU6IGN1cnJlbnRIb29rLmJhc2VRdWV1ZSxcbiAgICAgIHF1ZXVlOiBjdXJyZW50SG9vay5xdWV1ZSxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgaG9vayBpbiB0aGUgbGlzdC5cbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9IG5ld0hvb2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBuZXdIb29rO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKSB7XG4gIHJldHVybiB7XG4gICAgbGFzdEVmZmVjdDogbnVsbFxuICB9O1xufVxuXG5mdW5jdGlvbiBiYXNpY1N0YXRlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIC8vICRGbG93Rml4TWU6IEZsb3cgZG9lc24ndCBsaWtlIG1peGVkIHR5cGVzXG4gIHJldHVybiB0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nID8gYWN0aW9uKHN0YXRlKSA6IGFjdGlvbjtcbn1cblxuZnVuY3Rpb24gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgaW5pdGlhbFN0YXRlO1xuXG4gIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0KGluaXRpYWxBcmcpO1xuICB9IGVsc2Uge1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxBcmc7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZSA9IHtcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IHJlZHVjZXIsXG4gICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICB9O1xuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgcXVldWUpO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcblxuICBpZiAoIShxdWV1ZSAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgdmFyIGN1cnJlbnQgPSBjdXJyZW50SG9vazsgLy8gVGhlIGxhc3QgcmViYXNlIHVwZGF0ZSB0aGF0IGlzIE5PVCBwYXJ0IG9mIHRoZSBiYXNlIHN0YXRlLlxuXG4gIHZhciBiYXNlUXVldWUgPSBjdXJyZW50LmJhc2VRdWV1ZTsgLy8gVGhlIGxhc3QgcGVuZGluZyB1cGRhdGUgdGhhdCBoYXNuJ3QgYmVlbiBwcm9jZXNzZWQgeWV0LlxuXG4gIHZhciBwZW5kaW5nUXVldWUgPSBxdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBXZSBoYXZlIG5ldyB1cGRhdGVzIHRoYXQgaGF2ZW4ndCBiZWVuIHByb2Nlc3NlZCB5ZXQuXG4gICAgLy8gV2UnbGwgYWRkIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG4gICAgaWYgKGJhc2VRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgLy8gTWVyZ2UgdGhlIHBlbmRpbmcgcXVldWUgYW5kIHRoZSBiYXNlIHF1ZXVlLlxuICAgICAgdmFyIGJhc2VGaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgICAgdmFyIHBlbmRpbmdGaXJzdCA9IHBlbmRpbmdRdWV1ZS5uZXh0O1xuICAgICAgYmFzZVF1ZXVlLm5leHQgPSBwZW5kaW5nRmlyc3Q7XG4gICAgICBwZW5kaW5nUXVldWUubmV4dCA9IGJhc2VGaXJzdDtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoY3VycmVudC5iYXNlUXVldWUgIT09IGJhc2VRdWV1ZSkge1xuICAgICAgICAvLyBJbnRlcm5hbCBpbnZhcmlhbnQgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgZmVhc2libHkgY291bGQgaW5cbiAgICAgICAgLy8gdGhlIGZ1dHVyZSBpZiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcsIG9yIHNvbWUgZm9ybSBvZiB0aGF0LlxuICAgICAgICBlcnJvcignSW50ZXJuYWwgZXJyb3I6IEV4cGVjdGVkIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgdG8gYmUgYSBjbG9uZS4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnQuYmFzZVF1ZXVlID0gYmFzZVF1ZXVlID0gcGVuZGluZ1F1ZXVlO1xuICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGJhc2VRdWV1ZSAhPT0gbnVsbCkge1xuICAgIC8vIFdlIGhhdmUgYSBxdWV1ZSB0byBwcm9jZXNzLlxuICAgIHZhciBmaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgIHZhciBuZXdTdGF0ZSA9IGN1cnJlbnQuYmFzZVN0YXRlO1xuICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgIHZhciBuZXdCYXNlUXVldWVGaXJzdCA9IG51bGw7XG4gICAgdmFyIG5ld0Jhc2VRdWV1ZUxhc3QgPSBudWxsO1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdDtcblxuICAgIGRvIHtcbiAgICAgIHZhciB1cGRhdGVMYW5lID0gdXBkYXRlLmxhbmU7XG5cbiAgICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lKSkge1xuICAgICAgICAvLyBQcmlvcml0eSBpcyBpbnN1ZmZpY2llbnQuIFNraXAgdGhpcyB1cGRhdGUuIElmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgICAgIC8vIHNraXBwZWQgdXBkYXRlLCB0aGUgcHJldmlvdXMgdXBkYXRlL3N0YXRlIGlzIHRoZSBuZXcgYmFzZVxuICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICBlYWdlclJlZHVjZXI6IHVwZGF0ZS5lYWdlclJlZHVjZXIsXG4gICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlRmlyc3QgPSBuZXdCYXNlUXVldWVMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IGNsb25lO1xuICAgICAgICB9IC8vIFVwZGF0ZSB0aGUgcmVtYWluaW5nIHByaW9yaXR5IGluIHRoZSBxdWV1ZS5cbiAgICAgICAgLy8gVE9ETzogRG9uJ3QgbmVlZCB0byBhY2N1bXVsYXRlIHRoaXMuIEluc3RlYWQsIHdlIGNhbiByZW1vdmVcbiAgICAgICAgLy8gcmVuZGVyTGFuZXMgZnJvbSB0aGUgb3JpZ2luYWwgbGFuZXMuXG5cblxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzID0gbWVyZ2VMYW5lcyhjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzLCB1cGRhdGVMYW5lKTtcbiAgICAgICAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyh1cGRhdGVMYW5lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgdXBkYXRlIGRvZXMgaGF2ZSBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfY2xvbmUgPSB7XG4gICAgICAgICAgICAvLyBUaGlzIHVwZGF0ZSBpcyBnb2luZyB0byBiZSBjb21taXR0ZWQgc28gd2UgbmV2ZXIgd2FudCB1bmNvbW1pdFxuICAgICAgICAgICAgLy8gaXQuIFVzaW5nIE5vTGFuZSB3b3JrcyBiZWNhdXNlIDAgaXMgYSBzdWJzZXQgb2YgYWxsIGJpdG1hc2tzLCBzb1xuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIG5ldmVyIGJlIHNraXBwZWQgYnkgdGhlIGNoZWNrIGFib3ZlLlxuICAgICAgICAgICAgbGFuZTogTm9MYW5lLFxuICAgICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgICAgZWFnZXJSZWR1Y2VyOiB1cGRhdGUuZWFnZXJSZWR1Y2VyLFxuICAgICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gX2Nsb25lO1xuICAgICAgICB9IC8vIFByb2Nlc3MgdGhpcyB1cGRhdGUuXG5cblxuICAgICAgICBpZiAodXBkYXRlLmVhZ2VyUmVkdWNlciA9PT0gcmVkdWNlcikge1xuICAgICAgICAgIC8vIElmIHRoaXMgdXBkYXRlIHdhcyBwcm9jZXNzZWQgZWFnZXJseSwgYW5kIGl0cyByZWR1Y2VyIG1hdGNoZXMgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCByZWR1Y2VyLCB3ZSBjYW4gdXNlIHRoZSBlYWdlcmx5IGNvbXB1dGVkIHN0YXRlLlxuICAgICAgICAgIG5ld1N0YXRlID0gdXBkYXRlLmVhZ2VyU3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGFjdGlvbiA9IHVwZGF0ZS5hY3Rpb247XG4gICAgICAgICAgbmV3U3RhdGUgPSByZWR1Y2VyKG5ld1N0YXRlLCBhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgIH0gd2hpbGUgKHVwZGF0ZSAhPT0gbnVsbCAmJiB1cGRhdGUgIT09IGZpcnN0KTtcblxuICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ID09PSBudWxsKSB7XG4gICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gbmV3QmFzZVF1ZXVlRmlyc3Q7XG4gICAgfSAvLyBNYXJrIHRoYXQgdGhlIGZpYmVyIHBlcmZvcm1lZCB3b3JrLCBidXQgb25seSBpZiB0aGUgbmV3IHN0YXRlIGlzXG4gICAgLy8gZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc3RhdGUuXG5cblxuICAgIGlmICghb2JqZWN0SXMobmV3U3RhdGUsIGhvb2subWVtb2l6ZWRTdGF0ZSkpIHtcbiAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgaG9vay5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgaG9vay5iYXNlUXVldWUgPSBuZXdCYXNlUXVldWVMYXN0O1xuICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cblxuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaDtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcblxuICBpZiAoIShxdWV1ZSAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjsgLy8gVGhpcyBpcyBhIHJlLXJlbmRlci4gQXBwbHkgdGhlIG5ldyByZW5kZXIgcGhhc2UgdXBkYXRlcyB0byB0aGUgcHJldmlvdXNcbiAgLy8gd29yay1pbi1wcm9ncmVzcyBob29rLlxuXG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoO1xuICB2YXIgbGFzdFJlbmRlclBoYXNlVXBkYXRlID0gcXVldWUucGVuZGluZztcbiAgdmFyIG5ld1N0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChsYXN0UmVuZGVyUGhhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgcXVldWUgZG9lc24ndCBwZXJzaXN0IHBhc3QgdGhpcyByZW5kZXIgcGFzcy5cbiAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICB2YXIgZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IGxhc3RSZW5kZXJQaGFzZVVwZGF0ZS5uZXh0O1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdFJlbmRlclBoYXNlVXBkYXRlO1xuXG4gICAgZG8ge1xuICAgICAgLy8gUHJvY2VzcyB0aGlzIHJlbmRlciBwaGFzZSB1cGRhdGUuIFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgdGhlXG4gICAgICAvLyBwcmlvcml0eSBiZWNhdXNlIGl0IHdpbGwgYWx3YXlzIGJlIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50XG4gICAgICAvLyByZW5kZXIncy5cbiAgICAgIHZhciBhY3Rpb24gPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgbmV3U3RhdGUgPSByZWR1Y2VyKG5ld1N0YXRlLCBhY3Rpb24pO1xuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgfSB3aGlsZSAodXBkYXRlICE9PSBmaXJzdFJlbmRlclBoYXNlVXBkYXRlKTsgLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgIC8vIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLlxuXG5cbiAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlOyAvLyBEb24ndCBwZXJzaXN0IHRoZSBzdGF0ZSBhY2N1bXVsYXRlZCBmcm9tIHRoZSByZW5kZXIgcGhhc2UgdXBkYXRlcyB0b1xuICAgIC8vIHRoZSBiYXNlIHN0YXRlIHVubGVzcyB0aGUgcXVldWUgaXMgZW1wdHkuXG4gICAgLy8gVE9ETzogTm90IHN1cmUgaWYgdGhpcyBpcyB0aGUgZGVzaXJlZCBzZW1hbnRpY3MsIGJ1dCBpdCdzIHdoYXQgd2VcbiAgICAvLyBkbyBmb3IgZ0RTRlAuIEkgY2FuJ3QgcmVtZW1iZXIgd2h5LlxuXG4gICAgaWYgKGhvb2suYmFzZVF1ZXVlID09PSBudWxsKSB7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH1cblxuICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cblxuICByZXR1cm4gW25ld1N0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHJlYWRGcm9tVW5zdWJjcmliZWRNdXRhYmxlU291cmNlKHJvb3QsIHNvdXJjZSwgZ2V0U25hcHNob3QpIHtcbiAge1xuICAgIHdhcm5BYm91dE11bHRpcGxlUmVuZGVyZXJzREVWKHNvdXJjZSk7XG4gIH1cblxuICB2YXIgZ2V0VmVyc2lvbiA9IHNvdXJjZS5fZ2V0VmVyc2lvbjtcbiAgdmFyIHZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTsgLy8gSXMgaXQgc2FmZSBmb3IgdGhpcyBjb21wb25lbnQgdG8gcmVhZCBmcm9tIHRoaXMgc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXI/XG5cbiAgdmFyIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBmYWxzZTsgLy8gQ2hlY2sgdGhlIHZlcnNpb24gZmlyc3QuXG4gIC8vIElmIHRoaXMgcmVuZGVyIGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRlZCB3aXRoIGEgc3BlY2lmaWMgdmVyc2lvbixcbiAgLy8gd2UgY2FuIHVzZSBpdCBhbG9uZSB0byBkZXRlcm1pbmUgaWYgd2UgY2FuIHNhZmVseSByZWFkIGZyb20gdGhlIHNvdXJjZS5cblxuICB2YXIgY3VycmVudFJlbmRlclZlcnNpb24gPSBnZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24oc291cmNlKTtcblxuICBpZiAoY3VycmVudFJlbmRlclZlcnNpb24gIT09IG51bGwpIHtcbiAgICAvLyBJdCdzIHNhZmUgdG8gcmVhZCBpZiB0aGUgc3RvcmUgaGFzbid0IGJlZW4gbXV0YXRlZCBzaW5jZSB0aGUgbGFzdCB0aW1lXG4gICAgLy8gd2UgcmVhZCBzb21ldGhpbmcuXG4gICAgaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSA9IGN1cnJlbnRSZW5kZXJWZXJzaW9uID09PSB2ZXJzaW9uO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gdmVyc2lvbiwgdGhlbiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHJlYWQgZnJvbSB0aGVcbiAgICAvLyBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlciBwYXNzLCBzbyB3ZSBuZWVkIHRvIGRvIGEgYml0IG1vcmUgd29yay5cbiAgICAvLyBXaGF0IHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlzIGlmIHRoZXJlIGFyZSBhbnkgaG9va3MgdGhhdCBhbHJlYWR5XG4gICAgLy8gc3Vic2NyaWJlZCB0byB0aGUgc291cmNlLCBhbmQgaWYgc28sIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwZW5kaW5nXG4gICAgLy8gbXV0YXRpb25zIHRoYXQgaGF2ZW4ndCBiZWVuIHN5bmNocm9uaXplZCB5ZXQuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcGVuZGluZyBtdXRhdGlvbnMsIHRoZW4gYHJvb3QubXV0YWJsZVJlYWRMYW5lc2Agd2lsbCBiZVxuICAgIC8vIGVtcHR5LCBhbmQgd2Uga25vdyB3ZSBjYW4gc2FmZWx5IHJlYWQuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSAqYXJlKiBwZW5kaW5nIG11dGF0aW9ucywgd2UgbWF5IHN0aWxsIGJlIGFibGUgdG8gc2FmZWx5IHJlYWRcbiAgICAvLyBpZiB0aGUgY3VycmVudGx5IHJlbmRlcmluZyBsYW5lcyBhcmUgaW5jbHVzaXZlIG9mIHRoZSBwZW5kaW5nIG11dGF0aW9uXG4gICAgLy8gbGFuZXMsIHNpbmNlIHRoYXQgZ3VhcmFudGVlcyB0aGF0IHRoZSB2YWx1ZSB3ZSdyZSBhYm91dCB0byByZWFkIGZyb21cbiAgICAvLyB0aGUgc291cmNlIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgdmFsdWVzIHRoYXQgd2UgcmVhZCBkdXJpbmcgdGhlIG1vc3RcbiAgICAvLyByZWNlbnQgbXV0YXRpb24uXG4gICAgaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSA9IGlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgcm9vdC5tdXRhYmxlUmVhZExhbmVzKTtcblxuICAgIGlmIChpc1NhZmVUb1JlYWRGcm9tU291cmNlKSB7XG4gICAgICAvLyBJZiBpdCdzIHNhZmUgdG8gcmVhZCBmcm9tIHRoaXMgc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIsXG4gICAgICAvLyBzdG9yZSB0aGUgdmVyc2lvbiBpbiBjYXNlIG90aGVyIGNvbXBvbmVudHMgcmVhZCBmcm9tIGl0LlxuICAgICAgLy8gQSBjaGFuZ2VkIHZlcnNpb24gbnVtYmVyIHdpbGwgbGV0IHRob3NlIGNvbXBvbmVudHMga25vdyB0byB0aHJvdyBhbmQgcmVzdGFydCB0aGUgcmVuZGVyLlxuICAgICAgc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKHNvdXJjZSwgdmVyc2lvbik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UpIHtcbiAgICB2YXIgc25hcHNob3QgPSBnZXRTbmFwc2hvdChzb3VyY2UuX3NvdXJjZSk7XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHNuYXBzaG90ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdNdXRhYmxlIHNvdXJjZSBzaG91bGQgbm90IHJldHVybiBhIGZ1bmN0aW9uIGFzIHRoZSBzbmFwc2hvdCB2YWx1ZS4gJyArICdGdW5jdGlvbnMgbWF5IGNsb3NlIG92ZXIgbXV0YWJsZSB2YWx1ZXMgYW5kIGNhdXNlIHRlYXJpbmcuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNuYXBzaG90O1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgc3BlY2lhbCBjYXNlIG9mIGEgbXV0YWJsZSBzb3VyY2UgYmVpbmcgc2hhcmVkIGJldHdlZW4gcmVuZGVyZXJzLlxuICAgIC8vIEluIHRoYXQgY2FzZSwgaWYgdGhlIHNvdXJjZSBpcyBtdXRhdGVkIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgcmVuZGVyZXIsXG4gICAgLy8gVGhlIHNlY29uZCByZW5kZXJlciBkb24ndCBrbm93IHRoYXQgaXQgbmVlZHMgdG8gcmVzZXQgdGhlIFdJUCB2ZXJzaW9uIGR1cmluZyB1bndpbmQsXG4gICAgLy8gKGJlY2F1c2UgdGhlIGhvb2sgb25seSBtYXJrcyBzb3VyY2VzIGFzIGRpcnR5IGlmIGl0J3Mgd3JpdHRlbiB0byB0aGVpciBXSVAgdmVyc2lvbikuXG4gICAgLy8gVGhhdCB3b3VsZCBjYXVzZSB0aGlzIHRlYXIgY2hlY2sgdG8gdGhyb3cgYWdhaW4gYW5kIGV2ZW50dWFsbHkgYmUgdmlzaWJsZSB0byB0aGUgdXNlci5cbiAgICAvLyBXZSBjYW4gYXZvaWQgdGhpcyBpbmZpbml0ZSBsb29wIGJ5IGV4cGxpY2l0bHkgbWFya2luZyB0aGUgc291cmNlIGFzIGRpcnR5LlxuICAgIC8vXG4gICAgLy8gVGhpcyBjYW4gbGVhZCB0byB0ZWFyaW5nIGluIHRoZSBmaXJzdCByZW5kZXJlciB3aGVuIGl0IHJlc3VtZXMsXG4gICAgLy8gYnV0IHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgdGhhdCAoc2hvcnQgb2YgdGhyb3dpbmcgaGVyZSBhbmQgcmVmdXNpbmcgdG8gY29udGludWUgdGhlIHJlbmRlcikuXG4gICAgbWFya1NvdXJjZUFzRGlydHkoc291cmNlKTtcblxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IHJlYWQgZnJvbSBtdXRhYmxlIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIHdpdGhvdXQgdGVhcmluZy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlTXV0YWJsZVNvdXJjZShob29rLCBzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgdmFyIHJvb3QgPSBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3QoKTtcblxuICBpZiAoIShyb290ICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIGEgd29yay1pbi1wcm9ncmVzcyByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBnZXRWZXJzaW9uID0gc291cmNlLl9nZXRWZXJzaW9uO1xuICB2YXIgdmVyc2lvbiA9IGdldFZlcnNpb24oc291cmNlLl9zb3VyY2UpO1xuICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG5cbiAgdmFyIF9kaXNwYXRjaGVyJHVzZVN0YXRlID0gZGlzcGF0Y2hlci51c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJlYWRGcm9tVW5zdWJjcmliZWRNdXRhYmxlU291cmNlKHJvb3QsIHNvdXJjZSwgZ2V0U25hcHNob3QpO1xuICB9KSxcbiAgICAgIGN1cnJlbnRTbmFwc2hvdCA9IF9kaXNwYXRjaGVyJHVzZVN0YXRlWzBdLFxuICAgICAgc2V0U25hcHNob3QgPSBfZGlzcGF0Y2hlciR1c2VTdGF0ZVsxXTtcblxuICB2YXIgc25hcHNob3QgPSBjdXJyZW50U25hcHNob3Q7IC8vIEdyYWIgYSBoYW5kbGUgdG8gdGhlIHN0YXRlIGhvb2sgYXMgd2VsbC5cbiAgLy8gV2UgdXNlIGl0IHRvIGNsZWFyIHRoZSBwZW5kaW5nIHVwZGF0ZSBxdWV1ZSBpZiB3ZSBoYXZlIGEgbmV3IHNvdXJjZS5cblxuICB2YXIgc3RhdGVIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rO1xuICB2YXIgbWVtb2l6ZWRTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHJlZnMgPSBtZW1vaXplZFN0YXRlLnJlZnM7XG4gIHZhciBwcmV2R2V0U25hcHNob3QgPSByZWZzLmdldFNuYXBzaG90O1xuICB2YXIgcHJldlNvdXJjZSA9IG1lbW9pemVkU3RhdGUuc291cmNlO1xuICB2YXIgcHJldlN1YnNjcmliZSA9IG1lbW9pemVkU3RhdGUuc3Vic2NyaWJlO1xuICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgcmVmczogcmVmcyxcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICBzdWJzY3JpYmU6IHN1YnNjcmliZVxuICB9OyAvLyBTeW5jIHRoZSB2YWx1ZXMgbmVlZGVkIGJ5IG91ciBzdWJzY3JpcHRpb24gaGFuZGxlciBhZnRlciBlYWNoIGNvbW1pdC5cblxuICBkaXNwYXRjaGVyLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmVmcy5nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90OyAvLyBOb3JtYWxseSB0aGUgZGlzcGF0Y2ggZnVuY3Rpb24gZm9yIGEgc3RhdGUgaG9vayBuZXZlciBjaGFuZ2VzLFxuICAgIC8vIGJ1dCB0aGlzIGhvb2sgcmVjcmVhdGVzIHRoZSBxdWV1ZSBpbiBjZXJ0YWluIGNhc2VzICB0byBhdm9pZCB1cGRhdGVzIGZyb20gc3RhbGUgc291cmNlcy5cbiAgICAvLyBoYW5kbGVDaGFuZ2UoKSBiZWxvdyBuZWVkcyB0byByZWZlcmVuY2UgdGhlIGRpc3BhdGNoIGZ1bmN0aW9uIHdpdGhvdXQgcmUtc3Vic2NyaWJpbmcsXG4gICAgLy8gc28gd2UgdXNlIGEgcmVmIHRvIGVuc3VyZSB0aGF0IGl0IGFsd2F5cyBoYXMgdGhlIGxhdGVzdCB2ZXJzaW9uLlxuXG4gICAgcmVmcy5zZXRTbmFwc2hvdCA9IHNldFNuYXBzaG90OyAvLyBDaGVjayBmb3IgYSBwb3NzaWJsZSBjaGFuZ2UgYmV0d2VlbiB3aGVuIHdlIGxhc3QgcmVuZGVyZWQgbm93LlxuXG4gICAgdmFyIG1heWJlTmV3VmVyc2lvbiA9IGdldFZlcnNpb24oc291cmNlLl9zb3VyY2UpO1xuXG4gICAgaWYgKCFvYmplY3RJcyh2ZXJzaW9uLCBtYXliZU5ld1ZlcnNpb24pKSB7XG4gICAgICB2YXIgbWF5YmVOZXdTbmFwc2hvdCA9IGdldFNuYXBzaG90KHNvdXJjZS5fc291cmNlKTtcblxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIG1heWJlTmV3U25hcHNob3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBlcnJvcignTXV0YWJsZSBzb3VyY2Ugc2hvdWxkIG5vdCByZXR1cm4gYSBmdW5jdGlvbiBhcyB0aGUgc25hcHNob3QgdmFsdWUuICcgKyAnRnVuY3Rpb25zIG1heSBjbG9zZSBvdmVyIG11dGFibGUgdmFsdWVzIGFuZCBjYXVzZSB0ZWFyaW5nLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghb2JqZWN0SXMoc25hcHNob3QsIG1heWJlTmV3U25hcHNob3QpKSB7XG4gICAgICAgIHNldFNuYXBzaG90KG1heWJlTmV3U25hcHNob3QpO1xuICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICAgICAgbWFya1Jvb3RNdXRhYmxlUmVhZChyb290LCBsYW5lKTtcbiAgICAgIH0gLy8gSWYgdGhlIHNvdXJjZSBtdXRhdGVkIGJldHdlZW4gcmVuZGVyIGFuZCBub3csXG4gICAgICAvLyB0aGVyZSBtYXkgYmUgc3RhdGUgdXBkYXRlcyBhbHJlYWR5IHNjaGVkdWxlZCBmcm9tIHRoZSBvbGQgc291cmNlLlxuICAgICAgLy8gRW50YW5nbGUgdGhlIHVwZGF0ZXMgc28gdGhhdCB0aGV5IHJlbmRlciBpbiB0aGUgc2FtZSBiYXRjaC5cblxuXG4gICAgICBtYXJrUm9vdEVudGFuZ2xlZChyb290LCByb290Lm11dGFibGVSZWFkTGFuZXMpO1xuICAgIH1cbiAgfSwgW2dldFNuYXBzaG90LCBzb3VyY2UsIHN1YnNjcmliZV0pOyAvLyBJZiB3ZSBnb3QgYSBuZXcgc291cmNlIG9yIHN1YnNjcmliZSBmdW5jdGlvbiwgcmUtc3Vic2NyaWJlIGluIGEgcGFzc2l2ZSBlZmZlY3QuXG5cbiAgZGlzcGF0Y2hlci51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbGF0ZXN0R2V0U25hcHNob3QgPSByZWZzLmdldFNuYXBzaG90O1xuICAgICAgdmFyIGxhdGVzdFNldFNuYXBzaG90ID0gcmVmcy5zZXRTbmFwc2hvdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGF0ZXN0U2V0U25hcHNob3QobGF0ZXN0R2V0U25hcHNob3Qoc291cmNlLl9zb3VyY2UpKTsgLy8gUmVjb3JkIGEgcGVuZGluZyBtdXRhYmxlIHNvdXJjZSB1cGRhdGUgd2l0aCB0aGUgc2FtZSBleHBpcmF0aW9uIHRpbWUuXG5cbiAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICAgIG1hcmtSb290TXV0YWJsZVJlYWQocm9vdCwgbGFuZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBBIHNlbGVjdG9yIG1pZ2h0IHRocm93IGFmdGVyIGEgc291cmNlIG11dGF0aW9uLlxuICAgICAgICAvLyBlLmcuIGl0IG1pZ2h0IHRyeSB0byByZWFkIGZyb20gYSBwYXJ0IG9mIHRoZSBzdG9yZSB0aGF0IG5vIGxvbmdlciBleGlzdHMuXG4gICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgc3RpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIHdpdGggUmVhY3QuXG4gICAgICAgIC8vIFdvcnN0IGNhc2UgdGhlIHNlbGVjdG9yIHdpbGwgdGhyb3cgYWdhaW4gYW5kIHRoZW4gYW4gZXJyb3IgYm91bmRhcnkgd2lsbCBoYW5kbGUgaXQuXG4gICAgICAgIGxhdGVzdFNldFNuYXBzaG90KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciB1bnN1YnNjcmliZSA9IHN1YnNjcmliZShzb3VyY2UuX3NvdXJjZSwgaGFuZGxlQ2hhbmdlKTtcblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgdW5zdWJzY3JpYmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ011dGFibGUgc291cmNlIHN1YnNjcmliZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhbiB1bnN1YnNjcmliZSBmdW5jdGlvbi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gIH0sIFtzb3VyY2UsIHN1YnNjcmliZV0pOyAvLyBJZiBhbnkgb2YgdGhlIGlucHV0cyB0byB1c2VNdXRhYmxlU291cmNlIGNoYW5nZSwgcmVhZGluZyBpcyBwb3RlbnRpYWxseSB1bnNhZmUuXG4gIC8vXG4gIC8vIElmIGVpdGhlciB0aGUgc291cmNlIG9yIHRoZSBzdWJzY3JpcHRpb24gaGF2ZSBjaGFuZ2VkIHdlIGNhbid0IGNhbid0IHRydXN0IHRoZSB1cGRhdGUgcXVldWUuXG4gIC8vIE1heWJlIHRoZSBzb3VyY2UgY2hhbmdlZCBpbiBhIHdheSB0aGF0IHRoZSBvbGQgc3Vic2NyaXB0aW9uIGlnbm9yZWQgYnV0IHRoZSBuZXcgb25lIGRlcGVuZHMgb24uXG4gIC8vXG4gIC8vIElmIHRoZSBnZXRTbmFwc2hvdCBmdW5jdGlvbiBjaGFuZ2VkLCB3ZSBhbHNvIHNob3VsZG4ndCByZWx5IG9uIHRoZSB1cGRhdGUgcXVldWUuXG4gIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgdW5kZXJseWluZyBzb3VyY2Ugd2FzIG11dGF0ZWQgYmV0d2VlbiB0aGUgd2hlbiB0aGUgbGFzdCBcImNoYW5nZVwiIGV2ZW50IGZpcmVkLFxuICAvLyBhbmQgd2hlbiB0aGUgY3VycmVudCByZW5kZXIgKHdpdGggdGhlIG5ldyBnZXRTbmFwc2hvdCBmdW5jdGlvbikgaXMgcHJvY2Vzc2VkLlxuICAvL1xuICAvLyBJbiBib3RoIGNhc2VzLCB3ZSBuZWVkIHRvIHRocm93IGF3YXkgcGVuZGluZyB1cGRhdGVzIChzaW5jZSB0aGV5IGFyZSBubyBsb25nZXIgcmVsZXZhbnQpXG4gIC8vIGFuZCB0cmVhdCByZWFkaW5nIGZyb20gdGhlIHNvdXJjZSBhcyB3ZSBkbyBpbiB0aGUgbW91bnQgY2FzZS5cblxuICBpZiAoIW9iamVjdElzKHByZXZHZXRTbmFwc2hvdCwgZ2V0U25hcHNob3QpIHx8ICFvYmplY3RJcyhwcmV2U291cmNlLCBzb3VyY2UpIHx8ICFvYmplY3RJcyhwcmV2U3Vic2NyaWJlLCBzdWJzY3JpYmUpKSB7XG4gICAgLy8gQ3JlYXRlIGEgbmV3IHF1ZXVlIGFuZCBzZXRTdGF0ZSBtZXRob2QsXG4gICAgLy8gU28gaWYgdGhlcmUgYXJlIGludGVybGVhdmVkIHVwZGF0ZXMsIHRoZXkgZ2V0IHB1c2hlZCB0byB0aGUgb2xkZXIgcXVldWUuXG4gICAgLy8gV2hlbiB0aGlzIGJlY29tZXMgY3VycmVudCwgdGhlIHByZXZpb3VzIHF1ZXVlIGFuZCBkaXNwYXRjaCBtZXRob2Qgd2lsbCBiZSBkaXNjYXJkZWQsXG4gICAgLy8gaW5jbHVkaW5nIGFueSBpbnRlcmxlYXZpbmcgdXBkYXRlcyB0aGF0IG9jY3VyLlxuICAgIHZhciBuZXdRdWV1ZSA9IHtcbiAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgICAgbGFzdFJlbmRlcmVkU3RhdGU6IHNuYXBzaG90XG4gICAgfTtcbiAgICBuZXdRdWV1ZS5kaXNwYXRjaCA9IHNldFNuYXBzaG90ID0gZGlzcGF0Y2hBY3Rpb24uYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBuZXdRdWV1ZSk7XG4gICAgc3RhdGVIb29rLnF1ZXVlID0gbmV3UXVldWU7XG4gICAgc3RhdGVIb29rLmJhc2VRdWV1ZSA9IG51bGw7XG4gICAgc25hcHNob3QgPSByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KTtcbiAgICBzdGF0ZUhvb2subWVtb2l6ZWRTdGF0ZSA9IHN0YXRlSG9vay5iYXNlU3RhdGUgPSBzbmFwc2hvdDtcbiAgfVxuXG4gIHJldHVybiBzbmFwc2hvdDtcbn1cblxuZnVuY3Rpb24gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICByZWZzOiB7XG4gICAgICBnZXRTbmFwc2hvdDogZ2V0U25hcHNob3QsXG4gICAgICBzZXRTbmFwc2hvdDogbnVsbFxuICAgIH0sXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmVcbiAgfTtcbiAgcmV0dXJuIHVzZU11dGFibGVTb3VyY2UoaG9vaywgc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgcmV0dXJuIHVzZU11dGFibGVTb3VyY2UoaG9vaywgc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbn1cblxuZnVuY3Rpb24gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuXG4gIGlmICh0eXBlb2YgaW5pdGlhbFN0YXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gJEZsb3dGaXhNZTogRmxvdyBkb2Vzbid0IGxpa2UgbWl4ZWQgdHlwZXNcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsU3RhdGUoKTtcbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlID0ge1xuICAgIHBlbmRpbmc6IG51bGwsXG4gICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICB9O1xuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgcXVldWUpO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbn1cblxuZnVuY3Rpb24gcHVzaEVmZmVjdCh0YWcsIGNyZWF0ZSwgZGVzdHJveSwgZGVwcykge1xuICB2YXIgZWZmZWN0ID0ge1xuICAgIHRhZzogdGFnLFxuICAgIGNyZWF0ZTogY3JlYXRlLFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgZGVwczogZGVwcyxcbiAgICAvLyBDaXJjdWxhclxuICAgIG5leHQ6IG51bGxcbiAgfTtcbiAgdmFyIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZTtcblxuICBpZiAoY29tcG9uZW50VXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKTtcbiAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlID0gY29tcG9uZW50VXBkYXRlUXVldWU7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICB9IGVsc2Uge1xuICAgIHZhciBsYXN0RWZmZWN0ID0gY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgIGlmIChsYXN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgIGxhc3RFZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgICAgIGVmZmVjdC5uZXh0ID0gZmlyc3RFZmZlY3Q7XG4gICAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlZmZlY3Q7XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciByZWYgPSB7XG4gICAgY3VycmVudDogaW5pdGlhbFZhbHVlXG4gIH07XG5cbiAge1xuICAgIE9iamVjdC5zZWFsKHJlZik7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSByZWY7XG4gIHJldHVybiByZWY7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgcmV0dXJuIGhvb2subWVtb2l6ZWRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gbW91bnRFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gZmliZXJGbGFncztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBob29rRmxhZ3MsIGNyZWF0ZSwgdW5kZWZpbmVkLCBuZXh0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBkZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gIGlmIChjdXJyZW50SG9vayAhPT0gbnVsbCkge1xuICAgIHZhciBwcmV2RWZmZWN0ID0gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICBkZXN0cm95ID0gcHJldkVmZmVjdC5kZXN0cm95O1xuXG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2RWZmZWN0LmRlcHM7XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICBwdXNoRWZmZWN0KGhvb2tGbGFncywgY3JlYXRlLCBkZXN0cm95LCBuZXh0RGVwcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgaG9va0ZsYWdzLCBjcmVhdGUsIGRlc3Ryb3ksIG5leHREZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoVXBkYXRlIHwgUGFzc2l2ZSwgUGFzc2l2ZSQxLCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSB8IFBhc3NpdmUsIFBhc3NpdmUkMSwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QoY3JlYXRlLCByZWYpIHtcbiAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVmQ2FsbGJhY2sgPSByZWY7XG5cbiAgICB2YXIgX2luc3QgPSBjcmVhdGUoKTtcblxuICAgIHJlZkNhbGxiYWNrKF9pbnN0KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmVmQ2FsbGJhY2sobnVsbCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZWYgIT09IG51bGwgJiYgcmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVmT2JqZWN0ID0gcmVmO1xuXG4gICAge1xuICAgICAgaWYgKCFyZWZPYmplY3QuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICBlcnJvcignRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIGZpcnN0IGFyZ3VtZW50IHRvIGVpdGhlciBiZSBhICcgKyAncmVmIGNhbGxiYWNrIG9yIFJlYWN0LmNyZWF0ZVJlZigpIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgJ2FuIG9iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhyZWZPYmplY3QpLmpvaW4oJywgJykgKyAnfScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBfaW5zdDIgPSBjcmVhdGUoKTtcblxuICAgIHJlZk9iamVjdC5jdXJyZW50ID0gX2luc3QyO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZWZPYmplY3QuY3VycmVudCA9IG51bGw7XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uICcgKyAndGhhdCBjcmVhdGVzIGEgaGFuZGxlLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjcmVhdGUgIT09IG51bGwgPyB0eXBlb2YgY3JlYXRlIDogJ251bGwnKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogSWYgZGVwcyBhcmUgcHJvdmlkZWQsIHNob3VsZCB3ZSBza2lwIGNvbXBhcmluZyB0aGUgcmVmIGl0c2VsZj9cblxuXG4gIHZhciBlZmZlY3REZXBzID0gZGVwcyAhPT0gbnVsbCAmJiBkZXBzICE9PSB1bmRlZmluZWQgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLCBlZmZlY3REZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gJyArICd0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNyZWF0ZSAhPT0gbnVsbCA/IHR5cGVvZiBjcmVhdGUgOiAnbnVsbCcpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBJZiBkZXBzIGFyZSBwcm92aWRlZCwgc2hvdWxkIHdlIHNraXAgY29tcGFyaW5nIHRoZSByZWYgaXRzZWxmP1xuXG5cbiAgdmFyIGVmZmVjdERlcHMgPSBkZXBzICE9PSBudWxsICYmIGRlcHMgIT09IHVuZGVmaW5lZCA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLCBlZmZlY3REZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnREZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikgey8vIFRoaXMgaG9vayBpcyBub3JtYWxseSBhIG5vLW9wLlxuICAvLyBUaGUgcmVhY3QtZGVidWctaG9va3MgcGFja2FnZSBpbmplY3RzIGl0cyBvd24gaW1wbGVtZW50YXRpb25cbiAgLy8gc28gdGhhdCBlLmcuIERldlRvb2xzIGNhbiBkaXNwbGF5IGN1c3RvbSBob29rIHZhbHVlcy5cbn1cblxudmFyIHVwZGF0ZURlYnVnVmFsdWUgPSBtb3VudERlYnVnVmFsdWU7XG5cbmZ1bmN0aW9uIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBuZXh0RGVwc107XG4gIHJldHVybiBjYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldlN0YXRlWzFdO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBbY2FsbGJhY2ssIG5leHREZXBzXTtcbiAgcmV0dXJuIGNhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiBtb3VudE1lbW8obmV4dENyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgbmV4dFZhbHVlID0gbmV4dENyZWF0ZSgpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbbmV4dFZhbHVlLCBuZXh0RGVwc107XG4gIHJldHVybiBuZXh0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1lbW8obmV4dENyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIHByZXZTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgLy8gQXNzdW1lIHRoZXNlIGFyZSBkZWZpbmVkLiBJZiB0aGV5J3JlIG5vdCwgYXJlSG9va0lucHV0c0VxdWFsIHdpbGwgd2Fybi5cbiAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RGVwcyA9IHByZXZTdGF0ZVsxXTtcblxuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgbmV4dERlcHNdO1xuICByZXR1cm4gbmV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIF9tb3VudFN0YXRlID0gbW91bnRTdGF0ZSh2YWx1ZSksXG4gICAgICBwcmV2VmFsdWUgPSBfbW91bnRTdGF0ZVswXSxcbiAgICAgIHNldFZhbHVlID0gX21vdW50U3RhdGVbMV07XG5cbiAgbW91bnRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSkge1xuICB2YXIgX3VwZGF0ZVN0YXRlID0gdXBkYXRlU3RhdGUoKSxcbiAgICAgIHByZXZWYWx1ZSA9IF91cGRhdGVTdGF0ZVswXSxcbiAgICAgIHNldFZhbHVlID0gX3VwZGF0ZVN0YXRlWzFdO1xuXG4gIHVwZGF0ZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICB0cnkge1xuICAgICAgc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICB9XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4gcHJldlZhbHVlO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIF9yZXJlbmRlclN0YXRlID0gcmVyZW5kZXJTdGF0ZSgpLFxuICAgICAgcHJldlZhbHVlID0gX3JlcmVuZGVyU3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF9yZXJlbmRlclN0YXRlWzFdO1xuXG4gIHVwZGF0ZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICB0cnkge1xuICAgICAgc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICB9XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4gcHJldlZhbHVlO1xufVxuXG5mdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oc2V0UGVuZGluZywgY2FsbGJhY2spIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuXG4gIHtcbiAgICBydW5XaXRoUHJpb3JpdHkkMShwcmlvcml0eUxldmVsIDwgVXNlckJsb2NraW5nUHJpb3JpdHkkMiA/IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgOiBwcmlvcml0eUxldmVsLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRQZW5kaW5nKHRydWUpO1xuICAgIH0pO1xuICAgIHJ1bldpdGhQcmlvcml0eSQxKHByaW9yaXR5TGV2ZWwgPiBOb3JtYWxQcmlvcml0eSQxID8gTm9ybWFsUHJpb3JpdHkkMSA6IHByaW9yaXR5TGV2ZWwsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFBlbmRpbmcoZmFsc2UpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRUcmFuc2l0aW9uKCkge1xuICB2YXIgX21vdW50U3RhdGUyID0gbW91bnRTdGF0ZShmYWxzZSksXG4gICAgICBpc1BlbmRpbmcgPSBfbW91bnRTdGF0ZTJbMF0sXG4gICAgICBzZXRQZW5kaW5nID0gX21vdW50U3RhdGUyWzFdOyAvLyBUaGUgYHN0YXJ0YCBtZXRob2QgY2FuIGJlIHN0b3JlZCBvbiBhIHJlZiwgc2luY2UgYHNldFBlbmRpbmdgXG4gIC8vIG5ldmVyIGNoYW5nZXMuXG5cblxuICB2YXIgc3RhcnQgPSBzdGFydFRyYW5zaXRpb24uYmluZChudWxsLCBzZXRQZW5kaW5nKTtcbiAgbW91bnRSZWYoc3RhcnQpO1xuICByZXR1cm4gW3N0YXJ0LCBpc1BlbmRpbmddO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUcmFuc2l0aW9uKCkge1xuICB2YXIgX3VwZGF0ZVN0YXRlMiA9IHVwZGF0ZVN0YXRlKCksXG4gICAgICBpc1BlbmRpbmcgPSBfdXBkYXRlU3RhdGUyWzBdO1xuXG4gIHZhciBzdGFydFJlZiA9IHVwZGF0ZVJlZigpO1xuICB2YXIgc3RhcnQgPSBzdGFydFJlZi5jdXJyZW50O1xuICByZXR1cm4gW3N0YXJ0LCBpc1BlbmRpbmddO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclRyYW5zaXRpb24oKSB7XG4gIHZhciBfcmVyZW5kZXJTdGF0ZTIgPSByZXJlbmRlclN0YXRlKCksXG4gICAgICBpc1BlbmRpbmcgPSBfcmVyZW5kZXJTdGF0ZTJbMF07XG5cbiAgdmFyIHN0YXJ0UmVmID0gdXBkYXRlUmVmKCk7XG4gIHZhciBzdGFydCA9IHN0YXJ0UmVmLmN1cnJlbnQ7XG4gIHJldHVybiBbc3RhcnQsIGlzUGVuZGluZ107XG59XG5cbnZhciBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gZmFsc2U7XG5mdW5jdGlvbiBnZXRJc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlSW5ERVYoKSB7XG4gIHtcbiAgICByZXR1cm4gaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuT25PcGFxdWVJZGVudGlmaWVyQWNjZXNzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIC8vIFRPRE86IFNob3VsZCB3YXJuIGluIGVmZmVjdHMgYW5kIGNhbGxiYWNrcywgdG9vXG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdVbmtub3duJztcblxuICAgIGlmIChnZXRJc1JlbmRlcmluZygpICYmICFkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyW25hbWVdKSB7XG4gICAgICBlcnJvcignVGhlIG9iamVjdCBwYXNzZWQgYmFjayBmcm9tIHVzZU9wYXF1ZUlkZW50aWZpZXIgaXMgbWVhbnQgdG8gYmUgJyArICdwYXNzZWQgdGhyb3VnaCB0byBhdHRyaWJ1dGVzIG9ubHkuIERvIG5vdCByZWFkIHRoZSAnICsgJ3ZhbHVlIGRpcmVjdGx5LicpO1xuXG4gICAgICBkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyW25hbWVdID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRPcGFxdWVJZGVudGlmaWVyKCkge1xuICB2YXIgbWFrZUlkID0gIG1ha2VDbGllbnRJZEluREVWLmJpbmQobnVsbCwgd2Fybk9uT3BhcXVlSWRlbnRpZmllckFjY2Vzc0luREVWLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSkpIDtcblxuICBpZiAoZ2V0SXNIeWRyYXRpbmcoKSkge1xuICAgIHZhciBkaWRVcGdyYWRlID0gZmFsc2U7XG4gICAgdmFyIGZpYmVyID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMTtcblxuICAgIHZhciByZWFkVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWRpZFVwZ3JhZGUpIHtcbiAgICAgICAgLy8gT25seSB1cGdyYWRlIG9uY2UuIFRoaXMgd29ya3MgZXZlbiBpbnNpZGUgdGhlIHJlbmRlciBwaGFzZSBiZWNhdXNlXG4gICAgICAgIC8vIHRoZSB1cGRhdGUgaXMgYWRkZWQgdG8gYSBzaGFyZWQgcXVldWUsIHdoaWNoIG91dGxhc3RzIHRoZVxuICAgICAgICAvLyBpbi1wcm9ncmVzcyByZW5kZXIuXG4gICAgICAgIGRpZFVwZ3JhZGUgPSB0cnVlO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gdHJ1ZTtcbiAgICAgICAgICBzZXRJZChtYWtlSWQoKSk7XG4gICAgICAgICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuICAgICAgICAgIHdhcm5Pbk9wYXF1ZUlkZW50aWZpZXJBY2Nlc3NJbkRFVihmaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIG9iamVjdCBwYXNzZWQgYmFjayBmcm9tIHVzZU9wYXF1ZUlkZW50aWZpZXIgaXMgbWVhbnQgdG8gYmUgcGFzc2VkIHRocm91Z2ggdG8gYXR0cmlidXRlcyBvbmx5LiBEbyBub3QgcmVhZCB0aGUgdmFsdWUgZGlyZWN0bHkuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgaWQgPSBtYWtlT3BhcXVlSHlkcmF0aW5nT2JqZWN0KHJlYWRWYWx1ZSk7XG4gICAgdmFyIHNldElkID0gbW91bnRTdGF0ZShpZClbMV07XG5cbiAgICBpZiAoKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBVcGRhdGUgfCBQYXNzaXZlO1xuICAgICAgcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBQYXNzaXZlJDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0SWQobWFrZUlkKCkpO1xuICAgICAgfSwgdW5kZWZpbmVkLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaWQ7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9pZCA9IG1ha2VJZCgpO1xuXG4gICAgbW91bnRTdGF0ZShfaWQpO1xuICAgIHJldHVybiBfaWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlT3BhcXVlSWRlbnRpZmllcigpIHtcbiAgdmFyIGlkID0gdXBkYXRlU3RhdGUoKVswXTtcbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlck9wYXF1ZUlkZW50aWZpZXIoKSB7XG4gIHZhciBpZCA9IHJlcmVuZGVyU3RhdGUoKVswXTtcbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEFjdGlvbihmaWJlciwgcXVldWUsIGFjdGlvbikge1xuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbM10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKFwiU3RhdGUgdXBkYXRlcyBmcm9tIHRoZSB1c2VTdGF0ZSgpIGFuZCB1c2VSZWR1Y2VyKCkgSG9va3MgZG9uJ3Qgc3VwcG9ydCB0aGUgXCIgKyAnc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgJyArICdyZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gdGhlIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gIHZhciB1cGRhdGUgPSB7XG4gICAgbGFuZTogbGFuZSxcbiAgICBhY3Rpb246IGFjdGlvbixcbiAgICBlYWdlclJlZHVjZXI6IG51bGwsXG4gICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07IC8vIEFwcGVuZCB0aGUgdXBkYXRlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG5cbiAgdmFyIHBlbmRpbmcgPSBxdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgIHVwZGF0ZS5uZXh0ID0gdXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0O1xuICAgIHBlbmRpbmcubmV4dCA9IHVwZGF0ZTtcbiAgfVxuXG4gIHF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGZpYmVyID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpIHtcbiAgICAvLyBUaGlzIGlzIGEgcmVuZGVyIHBoYXNlIHVwZGF0ZS4gU3Rhc2ggaXQgaW4gYSBsYXppbHktY3JlYXRlZCBtYXAgb2ZcbiAgICAvLyBxdWV1ZSAtPiBsaW5rZWQgbGlzdCBvZiB1cGRhdGVzLiBBZnRlciB0aGlzIHJlbmRlciBwYXNzLCB3ZSdsbCByZXN0YXJ0XG4gICAgLy8gYW5kIGFwcGx5IHRoZSBzdGFzaGVkIHVwZGF0ZXMgb24gdG9wIG9mIHRoZSB3b3JrLWluLXByb2dyZXNzIGhvb2suXG4gICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGZpYmVyLmxhbmVzID09PSBOb0xhbmVzICYmIChhbHRlcm5hdGUgPT09IG51bGwgfHwgYWx0ZXJuYXRlLmxhbmVzID09PSBOb0xhbmVzKSkge1xuICAgICAgLy8gVGhlIHF1ZXVlIGlzIGN1cnJlbnRseSBlbXB0eSwgd2hpY2ggbWVhbnMgd2UgY2FuIGVhZ2VybHkgY29tcHV0ZSB0aGVcbiAgICAgIC8vIG5leHQgc3RhdGUgYmVmb3JlIGVudGVyaW5nIHRoZSByZW5kZXIgcGhhc2UuIElmIHRoZSBuZXcgc3RhdGUgaXMgdGhlXG4gICAgICAvLyBzYW1lIGFzIHRoZSBjdXJyZW50IHN0YXRlLCB3ZSBtYXkgYmUgYWJsZSB0byBiYWlsIG91dCBlbnRpcmVseS5cbiAgICAgIHZhciBsYXN0UmVuZGVyZWRSZWR1Y2VyID0gcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlcjtcblxuICAgICAgaWYgKGxhc3RSZW5kZXJlZFJlZHVjZXIgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgZWFnZXJTdGF0ZSA9IGxhc3RSZW5kZXJlZFJlZHVjZXIoY3VycmVudFN0YXRlLCBhY3Rpb24pOyAvLyBTdGFzaCB0aGUgZWFnZXJseSBjb21wdXRlZCBzdGF0ZSwgYW5kIHRoZSByZWR1Y2VyIHVzZWQgdG8gY29tcHV0ZVxuICAgICAgICAgIC8vIGl0LCBvbiB0aGUgdXBkYXRlIG9iamVjdC4gSWYgdGhlIHJlZHVjZXIgaGFzbid0IGNoYW5nZWQgYnkgdGhlXG4gICAgICAgICAgLy8gdGltZSB3ZSBlbnRlciB0aGUgcmVuZGVyIHBoYXNlLCB0aGVuIHRoZSBlYWdlciBzdGF0ZSBjYW4gYmUgdXNlZFxuICAgICAgICAgIC8vIHdpdGhvdXQgY2FsbGluZyB0aGUgcmVkdWNlciBhZ2Fpbi5cblxuICAgICAgICAgIHVwZGF0ZS5lYWdlclJlZHVjZXIgPSBsYXN0UmVuZGVyZWRSZWR1Y2VyO1xuICAgICAgICAgIHVwZGF0ZS5lYWdlclN0YXRlID0gZWFnZXJTdGF0ZTtcblxuICAgICAgICAgIGlmIChvYmplY3RJcyhlYWdlclN0YXRlLCBjdXJyZW50U3RhdGUpKSB7XG4gICAgICAgICAgICAvLyBGYXN0IHBhdGguIFdlIGNhbiBiYWlsIG91dCB3aXRob3V0IHNjaGVkdWxpbmcgUmVhY3QgdG8gcmUtcmVuZGVyLlxuICAgICAgICAgICAgLy8gSXQncyBzdGlsbCBwb3NzaWJsZSB0aGF0IHdlJ2xsIG5lZWQgdG8gcmViYXNlIHRoaXMgdXBkYXRlIGxhdGVyLFxuICAgICAgICAgICAgLy8gaWYgdGhlIGNvbXBvbmVudCByZS1yZW5kZXJzIGZvciBhIGRpZmZlcmVudCByZWFzb24gYW5kIGJ5IHRoYXRcbiAgICAgICAgICAgIC8vIHRpbWUgdGhlIHJlZHVjZXIgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikgey8vIFN1cHByZXNzIHRoZSBlcnJvci4gSXQgd2lsbCB0aHJvdyBhZ2FpbiBpbiB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgICB3YXJuSWZOb3RTY29wZWRXaXRoTWF0Y2hpbmdBY3QoZmliZXIpO1xuICAgICAgICB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5EZXYoZmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfVxufVxuXG52YXIgQ29udGV4dE9ubHlEaXNwYXRjaGVyID0ge1xuICByZWFkQ29udGV4dDogcmVhZENvbnRleHQsXG4gIHVzZUNhbGxiYWNrOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUNvbnRleHQ6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlTGF5b3V0RWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU1lbW86IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlUmVkdWNlcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VSZWY6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlU3RhdGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRGVidWdWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VEZWZlcnJlZFZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVRyYW5zaXRpb246IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlTXV0YWJsZVNvdXJjZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VPcGFxdWVJZGVudGlmaWVyOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxufTtcbnZhciBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSBudWxsO1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSBudWxsO1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSBudWxsO1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSBudWxsO1xuXG57XG4gIHZhciB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgZXJyb3IoJ0NvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuICcgKyAnSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gJyArICdJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgJyArICdpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLicpO1xuICB9O1xuXG4gIHZhciB3YXJuSW52YWxpZEhvb2tBY2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgZXJyb3IoJ0RvIG5vdCBjYWxsIEhvb2tzIGluc2lkZSB1c2VFZmZlY3QoLi4uKSwgdXNlTWVtbyguLi4pLCBvciBvdGhlciBidWlsdC1pbiBIb29rcy4gJyArICdZb3UgY2FuIG9ubHkgY2FsbCBIb29rcyBhdCB0aGUgdG9wIGxldmVsIG9mIHlvdXIgUmVhY3QgZnVuY3Rpb24uICcgKyAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ydWxlcy1vZi1ob29rcycpO1xuICB9O1xuXG4gIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlclRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbn1cblxudmFyIG5vdyQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdztcbnZhciBjb21taXRUaW1lID0gMDtcbnZhciBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuXG5mdW5jdGlvbiBnZXRDb21taXRUaW1lKCkge1xuICByZXR1cm4gY29tbWl0VGltZTtcbn1cblxuZnVuY3Rpb24gcmVjb3JkQ29tbWl0VGltZSgpIHtcblxuICBjb21taXRUaW1lID0gbm93JDEoKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRQcm9maWxlclRpbWVyKGZpYmVyKSB7XG5cbiAgcHJvZmlsZXJTdGFydFRpbWUgPSBub3ckMSgpO1xuXG4gIGlmIChmaWJlci5hY3R1YWxTdGFydFRpbWUgPCAwKSB7XG4gICAgZmliZXIuYWN0dWFsU3RhcnRUaW1lID0gbm93JDEoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZyhmaWJlcikge1xuXG4gIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG59XG5cbmZ1bmN0aW9uIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoZmliZXIsIG92ZXJyaWRlQmFzZVRpbWUpIHtcblxuICBpZiAocHJvZmlsZXJTdGFydFRpbWUgPj0gMCkge1xuICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdyQxKCkgLSBwcm9maWxlclN0YXJ0VGltZTtcbiAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcblxuICAgIGlmIChvdmVycmlkZUJhc2VUaW1lKSB7XG4gICAgICBmaWJlci5zZWxmQmFzZUR1cmF0aW9uID0gZWxhcHNlZFRpbWU7XG4gICAgfVxuXG4gICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKGZpYmVyKSB7XG4gIC8vIFRyYW5zZmVyIHRpbWUgc3BlbnQgcmVuZGVyaW5nIHRoZXNlIGNoaWxkcmVuIHNvIHdlIGRvbid0IGxvc2UgaXRcbiAgLy8gYWZ0ZXIgd2UgcmVyZW5kZXIuIFRoaXMgaXMgdXNlZCBhcyBhIGhlbHBlciBpbiBzcGVjaWFsIGNhc2VzXG4gIC8vIHdoZXJlIHdlIHNob3VsZCBjb3VudCB0aGUgd29yayBvZiBtdWx0aXBsZSBwYXNzZXMuXG4gIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkO1xuXG4gIHdoaWxlIChjaGlsZCkge1xuICAgIGZpYmVyLmFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbnZhciBkaWRXYXJuQWJvdXRCYWRDbGFzcztcbnZhciBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcztcbnZhciBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzO1xudmFyIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyO1xudmFyIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zO1xuXG57XG4gIGRpZFdhcm5BYm91dEJhZENsYXNzID0ge307XG4gIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnQgPSB7fTtcbiAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzID0ge307XG4gIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXIgPSB7fTtcbiAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnMgPSB7fTtcbn1cblxuZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJZiB0aGlzIGlzIGEgZnJlc2ggbmV3IGNvbXBvbmVudCB0aGF0IGhhc24ndCBiZWVuIHJlbmRlcmVkIHlldCwgd2VcbiAgICAvLyB3b24ndCB1cGRhdGUgaXRzIGNoaWxkIHNldCBieSBhcHBseWluZyBtaW5pbWFsIHNpZGUtZWZmZWN0cy4gSW5zdGVhZCxcbiAgICAvLyB3ZSB3aWxsIGFkZCB0aGVtIGFsbCB0byB0aGUgY2hpbGQgYmVmb3JlIGl0IGdldHMgcmVuZGVyZWQuIFRoYXQgbWVhbnNcbiAgICAvLyB3ZSBjYW4gb3B0aW1pemUgdGhpcyByZWNvbmNpbGlhdGlvbiBwYXNzIGJ5IG5vdCB0cmFja2luZyBzaWRlLWVmZmVjdHMuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBtb3VudENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGUgY3VycmVudCBjaGlsZCBpcyB0aGUgc2FtZSBhcyB0aGUgd29yayBpbiBwcm9ncmVzcywgaXQgbWVhbnMgdGhhdFxuICAgIC8vIHdlIGhhdmVuJ3QgeWV0IHN0YXJ0ZWQgYW55IHdvcmsgb24gdGhlc2UgY2hpbGRyZW4uIFRoZXJlZm9yZSwgd2UgdXNlXG4gICAgLy8gdGhlIGNsb25lIGFsZ29yaXRobSB0byBjcmVhdGUgYSBjb3B5IG9mIGFsbCB0aGUgY3VycmVudCBjaGlsZHJlbi5cbiAgICAvLyBJZiB3ZSBoYWQgYW55IHByb2dyZXNzZWQgd29yayBhbHJlYWR5LCB0aGF0IGlzIGludmFsaWQgYXQgdGhpcyBwb2ludCBzb1xuICAgIC8vIGxldCdzIHRocm93IGl0IG91dC5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50LmNoaWxkLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JjZVVubW91bnRDdXJyZW50QW5kUmVjb25jaWxlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgZm9yayBvZiByZWNvbmNpbGVDaGlsZHJlbi4gSXQncyB1c2VkIGluIGNhc2VzIHdoZXJlIHdlXG4gIC8vIHdhbnQgdG8gcmVjb25jaWxlIHdpdGhvdXQgbWF0Y2hpbmcgYWdhaW5zdCB0aGUgZXhpc3Rpbmcgc2V0LiBUaGlzIGhhcyB0aGVcbiAgLy8gZWZmZWN0IG9mIGFsbCBjdXJyZW50IGNoaWxkcmVuIGJlaW5nIHVubW91bnRlZDsgZXZlbiBpZiB0aGUgdHlwZSBhbmQga2V5XG4gIC8vIGFyZSB0aGUgc2FtZSwgdGhlIG9sZCBjaGlsZCBpcyB1bm1vdW50ZWQgYW5kIGEgbmV3IGNoaWxkIGlzIGNyZWF0ZWQuXG4gIC8vXG4gIC8vIFRvIGRvIHRoaXMsIHdlJ3JlIGdvaW5nIHRvIGdvIHRocm91Z2ggdGhlIHJlY29uY2lsZSBhbGdvcml0aG0gdHdpY2UuIEluXG4gIC8vIHRoZSBmaXJzdCBwYXNzLCB3ZSBzY2hlZHVsZSBhIGRlbGV0aW9uIGZvciBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4gYnlcbiAgLy8gcGFzc2luZyBudWxsLlxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50LmNoaWxkLCBudWxsLCByZW5kZXJMYW5lcyk7IC8vIEluIHRoZSBzZWNvbmQgcGFzcywgd2UgbW91bnQgdGhlIG5ldyBjaGlsZHJlbi4gVGhlIHRyaWNrIGhlcmUgaXMgdGhhdCB3ZVxuICAvLyBwYXNzIG51bGwgaW4gcGxhY2Ugb2Ygd2hlcmUgd2UgdXN1YWxseSBwYXNzIHRoZSBjdXJyZW50IGNoaWxkIHNldC4gVGhpcyBoYXNcbiAgLy8gdGhlIGVmZmVjdCBvZiByZW1vdW50aW5nIGFsbCBjaGlsZHJlbiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlaXJcbiAgLy8gaWRlbnRpdGllcyBtYXRjaC5cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRm9yd2FyZFJlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IGN1cnJlbnQgY2FuIGJlIG5vbi1udWxsIGhlcmUgZXZlbiBpZiB0aGUgY29tcG9uZW50XG4gIC8vIGhhc24ndCB5ZXQgbW91bnRlZC4gVGhpcyBoYXBwZW5zIGFmdGVyIHRoZSBmaXJzdCByZW5kZXIgc3VzcGVuZHMuXG4gIC8vIFdlJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZpbmUgb3IgY2FuIGNhdXNlIGlzc3Vlcy5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHJlbmRlciA9IENvbXBvbmVudC5yZW5kZXI7XG4gIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7IC8vIFRoZSByZXN0IGlzIGEgZm9yayBvZiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudFxuXG4gIHZhciBuZXh0Q2hpbGRyZW47XG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyLCBuZXh0UHJvcHMsIHJlZiwgcmVuZGVyTGFuZXMpO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXIsIG5leHRQcm9wcywgcmVmLCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSkge1xuICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB2YXIgdHlwZSA9IENvbXBvbmVudC50eXBlO1xuXG4gICAgaWYgKGlzU2ltcGxlRnVuY3Rpb25Db21wb25lbnQodHlwZSkgJiYgQ29tcG9uZW50LmNvbXBhcmUgPT09IG51bGwgJiYgLy8gU2ltcGxlTWVtb0NvbXBvbmVudCBjb2RlcGF0aCBkb2Vzbid0IHJlc29sdmUgb3V0ZXIgcHJvcHMgZWl0aGVyLlxuICAgIENvbXBvbmVudC5kZWZhdWx0UHJvcHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHJlc29sdmVkVHlwZSA9IHR5cGU7XG5cbiAgICAgIHtcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpO1xuICAgICAgfSAvLyBJZiB0aGlzIGlzIGEgcGxhaW4gZnVuY3Rpb24gY29tcG9uZW50IHdpdGhvdXQgZGVmYXVsdCBwcm9wcyxcbiAgICAgIC8vIGFuZCB3aXRoIG9ubHkgdGhlIGRlZmF1bHQgc2hhbGxvdyBjb21wYXJpc29uLCB3ZSB1cGdyYWRlIGl0XG4gICAgICAvLyB0byBhIFNpbXBsZU1lbW9Db21wb25lbnQgdG8gYWxsb3cgZmFzdCBwYXRoIHVwZGF0ZXMuXG5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MudGFnID0gU2ltcGxlTWVtb0NvbXBvbmVudDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlZFR5cGU7XG5cbiAgICAgIHtcbiAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCB0eXBlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlc29sdmVkVHlwZSwgbmV4dFByb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgLy8gSW5uZXIgbWVtbyBjb21wb25lbnQgcHJvcHMgYXJlbid0IGN1cnJlbnRseSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudC5cbiAgICAgICAgLy8gV2UgY291bGQgbW92ZSBpdCB0aGVyZSwgYnV0IHdlJ2Qgc3RpbGwgbmVlZCB0aGlzIGZvciBsYXp5IGNvZGUgcGF0aC5cbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKHR5cGUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hpbGQgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoQ29tcG9uZW50LnR5cGUsIG51bGwsIG5leHRQcm9wcywgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLm1vZGUsIHJlbmRlckxhbmVzKTtcbiAgICBjaGlsZC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgY2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjaGlsZDtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICB7XG4gICAgdmFyIF90eXBlID0gQ29tcG9uZW50LnR5cGU7XG4gICAgdmFyIF9pbm5lclByb3BUeXBlcyA9IF90eXBlLnByb3BUeXBlcztcblxuICAgIGlmIChfaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgIC8vIElubmVyIG1lbW8gY29tcG9uZW50IHByb3BzIGFyZW4ndCBjdXJyZW50bHkgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnQuXG4gICAgICAvLyBXZSBjb3VsZCBtb3ZlIGl0IHRoZXJlLCBidXQgd2UnZCBzdGlsbCBuZWVkIHRoaXMgZm9yIGxhenkgY29kZSBwYXRoLlxuICAgICAgY2hlY2tQcm9wVHlwZXMoX2lubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoX3R5cGUpKTtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudENoaWxkID0gY3VycmVudC5jaGlsZDsgLy8gVGhpcyBpcyBhbHdheXMgZXhhY3RseSBvbmUgY2hpbGRcblxuICBpZiAoIWluY2x1ZGVzU29tZUxhbmUodXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgIC8vIFRoaXMgd2lsbCBiZSB0aGUgcHJvcHMgd2l0aCByZXNvbHZlZCBkZWZhdWx0UHJvcHMsXG4gICAgLy8gdW5saWtlIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB3aGljaCB3aWxsIGJlIHRoZSB1bnJlc29sdmVkIG9uZXMuXG4gICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnRDaGlsZC5tZW1vaXplZFByb3BzOyAvLyBEZWZhdWx0IHRvIHNoYWxsb3cgY29tcGFyaXNvblxuXG4gICAgdmFyIGNvbXBhcmUgPSBDb21wb25lbnQuY29tcGFyZTtcbiAgICBjb21wYXJlID0gY29tcGFyZSAhPT0gbnVsbCA/IGNvbXBhcmUgOiBzaGFsbG93RXF1YWw7XG5cbiAgICBpZiAoY29tcGFyZShwcmV2UHJvcHMsIG5leHRQcm9wcykgJiYgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZikge1xuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgdmFyIG5ld0NoaWxkID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBuZXh0UHJvcHMpO1xuICBuZXdDaGlsZC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gIG5ld0NoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5ld0NoaWxkO1xuICByZXR1cm4gbmV3Q2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVE9ETzogY3VycmVudCBjYW4gYmUgbm9uLW51bGwgaGVyZSBldmVuIGlmIHRoZSBjb21wb25lbnRcbiAgLy8gaGFzbid0IHlldCBtb3VudGVkLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaW5uZXIgcmVuZGVyIHN1c3BlbmRzLlxuICAvLyBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmaW5lIG9yIGNhbiBjYXVzZSBpc3N1ZXMuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgb3V0ZXJNZW1vVHlwZSA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlO1xuXG4gICAgICBpZiAob3V0ZXJNZW1vVHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgIC8vIFdlIHdhcm4gd2hlbiB5b3UgZGVmaW5lIHByb3BUeXBlcyBvbiBsYXp5KClcbiAgICAgICAgLy8gc28gbGV0J3MganVzdCBza2lwIG92ZXIgaXQgdG8gZmluZCBtZW1vKCkgb3V0ZXIgd3JhcHBlci5cbiAgICAgICAgLy8gSW5uZXIgcHJvcHMgZm9yIG1lbW8gYXJlIHZhbGlkYXRlZCBsYXRlci5cbiAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSBvdXRlck1lbW9UeXBlO1xuICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIG91dGVyTWVtb1R5cGUgPSBpbml0KHBheWxvYWQpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgb3V0ZXJNZW1vVHlwZSA9IG51bGw7XG4gICAgICAgIH0gLy8gSW5uZXIgcHJvcFR5cGVzIHdpbGwgYmUgdmFsaWRhdGVkIGluIHRoZSBmdW5jdGlvbiBjb21wb25lbnQgcGF0aC5cblxuXG4gICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IG91dGVyTWVtb1R5cGUgJiYgb3V0ZXJNZW1vVHlwZS5wcm9wVHlwZXM7XG5cbiAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgKFNpbXBsZU1lbW9Db21wb25lbnQgaGFzIG5vIGRlZmF1bHRQcm9wcylcbiAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUob3V0ZXJNZW1vVHlwZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuXG4gICAgaWYgKHNoYWxsb3dFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykgJiYgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZiAmJiAoIC8vIFByZXZlbnQgYmFpbG91dCBpZiB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdlZCBkdWUgdG8gaG90IHJlbG9hZC5cbiAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9PT0gY3VycmVudC50eXBlICkpIHtcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcblxuICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lcykpIHtcbiAgICAgICAgLy8gVGhlIHBlbmRpbmcgbGFuZXMgd2VyZSBjbGVhcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYmVnaW5Xb3JrLiBXZSdyZVxuICAgICAgICAvLyBhYm91dCB0byBiYWlsIG91dCwgYnV0IHRoZXJlIG1pZ2h0IGJlIG90aGVyIGxhbmVzIHRoYXQgd2VyZW4ndFxuICAgICAgICAvLyBpbmNsdWRlZCBpbiB0aGUgY3VycmVudCByZW5kZXIuIFVzdWFsbHksIHRoZSBwcmlvcml0eSBsZXZlbCBvZiB0aGVcbiAgICAgICAgLy8gcmVtYWluaW5nIHVwZGF0ZXMgaXMgYWNjdW1sYXRlZCBkdXJpbmcgdGhlIGV2YWx1YXRpb24gb2YgdGhlXG4gICAgICAgIC8vIGNvbXBvbmVudCAoaS5lLiB3aGVuIHByb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZSkuIEJ1dCBzaW5jZSBzaW5jZVxuICAgICAgICAvLyB3ZSdyZSBiYWlsaW5nIG91dCBlYXJseSAqd2l0aG91dCogZXZhbHVhdGluZyB0aGUgY29tcG9uZW50LCB3ZSBuZWVkXG4gICAgICAgIC8vIHRvIGFjY291bnQgZm9yIGl0IGhlcmUsIHRvby4gUmVzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGZpYmVyLlxuICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgYXBwbGllcyB0byBTaW1wbGVNZW1vQ29tcG9uZW50LCBub3QgTWVtb0NvbXBvbmVudCxcbiAgICAgICAgLy8gYmVjYXVzZSBhIE1lbW9Db21wb25lbnQgZmliZXIgZG9lcyBub3QgaGF2ZSBob29rcyBvciBhbiB1cGRhdGUgcXVldWU7XG4gICAgICAgIC8vIHJhdGhlciwgaXQgd3JhcHMgYXJvdW5kIGFuIGlubmVyIGNvbXBvbmVudCwgd2hpY2ggbWF5IG9yIG1heSBub3RcbiAgICAgICAgLy8gY29udGFpbnMgaG9va3MuXG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhlIHJlc2V0IGF0IGluIGJlZ2luV29yayBvdXQgb2YgdGhlIGNvbW1vbiBwYXRoIHNvIHRoYXRcbiAgICAgICAgLy8gdGhpcyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gICAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKChjdXJyZW50LmZsYWdzICYgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IG9ubHkgZXhpc3RzIGZvciBsZWdhY3kgbW9kZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzE5MjE2LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkU3RhdGUgOiBudWxsO1xuXG4gIGlmIChuZXh0UHJvcHMubW9kZSA9PT0gJ2hpZGRlbicgfHwgbmV4dFByb3BzLm1vZGUgPT09ICd1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZycpIHtcbiAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgLy8gSW4gbGVnYWN5IHN5bmMgbW9kZSwgZG9uJ3QgZGVmZXIgdGhlIHN1YnRyZWUuIFJlbmRlciBpdCBub3cuXG4gICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoYXQgd2Ugc2hvdWxkIGRvIGluIEJsb2NraW5nIG1vZGUuXG4gICAgICB2YXIgbmV4dFN0YXRlID0ge1xuICAgICAgICBiYXNlTGFuZXM6IE5vTGFuZXNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgT2Zmc2NyZWVuTGFuZSkpIHtcbiAgICAgIHZhciBuZXh0QmFzZUxhbmVzO1xuXG4gICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBwcmV2QmFzZUxhbmVzID0gcHJldlN0YXRlLmJhc2VMYW5lcztcbiAgICAgICAgbmV4dEJhc2VMYW5lcyA9IG1lcmdlTGFuZXMocHJldkJhc2VMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dEJhc2VMYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgICAgfSAvLyBTY2hlZHVsZSB0aGlzIGZpYmVyIHRvIHJlLXJlbmRlciBhdCBvZmZzY3JlZW4gcHJpb3JpdHkuIFRoZW4gYmFpbG91dC5cblxuXG4gICAgICB7XG4gICAgICAgIG1hcmtTcGF3bmVkV29yayhPZmZzY3JlZW5MYW5lKTtcbiAgICAgIH1cblxuICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gbGFuZVRvTGFuZXMoT2Zmc2NyZWVuTGFuZSk7XG4gICAgICB2YXIgX25leHRTdGF0ZSA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBuZXh0QmFzZUxhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IF9uZXh0U3RhdGU7IC8vIFdlJ3JlIGFib3V0IHRvIGJhaWwgb3V0LCBidXQgd2UgbmVlZCB0byBwdXNoIHRoaXMgdG8gdGhlIHN0YWNrIGFueXdheVxuICAgICAgLy8gdG8gYXZvaWQgYSBwdXNoL3BvcCBtaXNhbGlnbm1lbnQuXG5cbiAgICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgbmV4dEJhc2VMYW5lcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVuZGVyaW5nIGF0IG9mZnNjcmVlbiwgc28gd2UgY2FuIGNsZWFyIHRoZSBiYXNlIGxhbmVzLlxuICAgICAgdmFyIF9uZXh0U3RhdGUyID0ge1xuICAgICAgICBiYXNlTGFuZXM6IE5vTGFuZXNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gX25leHRTdGF0ZTI7IC8vIFB1c2ggdGhlIGxhbmVzIHRoYXQgd2VyZSBza2lwcGVkIHdoZW4gd2UgYmFpbGVkIG91dC5cblxuICAgICAgdmFyIHN1YnRyZWVSZW5kZXJMYW5lcyA9IHByZXZTdGF0ZSAhPT0gbnVsbCA/IHByZXZTdGF0ZS5iYXNlTGFuZXMgOiByZW5kZXJMYW5lcztcbiAgICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9zdWJ0cmVlUmVuZGVyTGFuZXM7XG5cbiAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICBfc3VidHJlZVJlbmRlckxhbmVzID0gbWVyZ2VMYW5lcyhwcmV2U3RhdGUuYmFzZUxhbmVzLCByZW5kZXJMYW5lcyk7IC8vIFNpbmNlIHdlJ3JlIG5vdCBoaWRkZW4gYW55bW9yZSwgcmVzZXQgdGhlIHN0YXRlXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSB3ZXJlbid0IHByZXZpb3VzbHkgaGlkZGVuLCBhbmQgd2Ugc3RpbGwgYXJlbid0LCBzbyB0aGVyZSdzIG5vdGhpbmdcbiAgICAgIC8vIHNwZWNpYWwgdG8gZG8uIE5lZWQgdG8gcHVzaCB0byB0aGUgc3RhY2sgcmVnYXJkbGVzcywgdGhvdWdoLCB0byBhdm9pZFxuICAgICAgLy8gYSBwdXNoL3BvcCBtaXNhbGlnbm1lbnQuXG4gICAgICBfc3VidHJlZVJlbmRlckxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgfVxuXG4gICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCBfc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufSAvLyBOb3RlOiBUaGVzZSBoYXBwZW4gdG8gaGF2ZSBpZGVudGljYWwgYmVnaW4gcGhhc2VzLCBmb3Igbm93LiBXZSBzaG91bGRuJ3QgaG9sZFxuLy8gb3Vyc2VsdmVzIHRvIHRoaXMgY29uc3RyYWludCwgdGhvdWdoLiBJZiB0aGUgYmVoYXZpb3IgZGl2ZXJnZXMsIHdlIHNob3VsZFxuLy8gZm9yayB0aGUgZnVuY3Rpb24uXG5cblxudmFyIHVwZGF0ZUxlZ2FjeUhpZGRlbkNvbXBvbmVudCA9IHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudDtcblxuZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNb2RlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUHJvZmlsZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7IC8vIFJlc2V0IGVmZmVjdCBkdXJhdGlvbnMgZm9yIHRoZSBuZXh0IGV2ZW50dWFsIGVmZmVjdCBwaGFzZS5cbiAgICAvLyBUaGVzZSBhcmUgcmVzZXQgZHVyaW5nIHJlbmRlciB0byBhbGxvdyB0aGUgRGV2VG9vbHMgY29tbWl0IGhvb2sgYSBjaGFuY2UgdG8gcmVhZCB0aGVtLFxuXG4gICAgdmFyIHN0YXRlTm9kZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAwO1xuICAgIHN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAwO1xuICB9XG5cbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgdmFyIHJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCAmJiByZWYgIT09IG51bGwgfHwgY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnJlZiAhPT0gcmVmKSB7XG4gICAgLy8gU2NoZWR1bGUgYSBSZWYgZWZmZWN0XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUmVmO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRleHQ7XG5cbiAge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSk7XG4gICAgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgbmV4dENoaWxkcmVuO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSkge1xuICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG5cbiAgdmFyIGhhc0NvbnRleHQ7XG5cbiAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgfSBlbHNlIHtcbiAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIHZhciBzaG91bGRVcGRhdGU7XG5cbiAgaWYgKGluc3RhbmNlID09PSBudWxsKSB7XG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIEEgY2xhc3MgY29tcG9uZW50IHdpdGhvdXQgYW4gaW5zdGFuY2Ugb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkXG4gICAgICAvLyBpbnNpZGUgYSBub24tY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG9cbiAgICAgIC8vIHRyZWF0IGl0IGxpa2UgYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeVxuICAgICAgLy8gY29tbWl0dGVkLiBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgICBjdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgICB9IC8vIEluIHRoZSBpbml0aWFsIHBhc3Mgd2UgbWlnaHQgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGluc3RhbmNlLlxuXG5cbiAgICBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcyk7XG4gICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgIHNob3VsZFVwZGF0ZSA9IHRydWU7XG4gIH0gZWxzZSBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIEluIGEgcmVzdW1lLCB3ZSdsbCBhbHJlYWR5IGhhdmUgYW4gaW5zdGFuY2Ugd2UgY2FuIHJldXNlLlxuICAgIHNob3VsZFVwZGF0ZSA9IHJlc3VtZU1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRVcGRhdGUgPSB1cGRhdGVDbGFzc0luc3RhbmNlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIG5leHRVbml0T2ZXb3JrID0gZmluaXNoQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgc2hvdWxkVXBkYXRlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcyk7XG5cbiAge1xuICAgIHZhciBpbnN0ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKHNob3VsZFVwZGF0ZSAmJiBpbnN0LnByb3BzICE9PSBuZXh0UHJvcHMpIHtcbiAgICAgIGlmICghZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICBlcnJvcignSXQgbG9va3MgbGlrZSAlcyBpcyByZWFzc2lnbmluZyBpdHMgb3duIGB0aGlzLnByb3BzYCB3aGlsZSByZW5kZXJpbmcuICcgKyAnVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBjYW4gbGVhZCB0byBjb25mdXNpbmcgYnVncy4nLCBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdhIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFVuaXRPZldvcms7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaENsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHNob3VsZFVwZGF0ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gUmVmcyBzaG91bGQgdXBkYXRlIGV2ZW4gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2VcbiAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciBkaWRDYXB0dXJlRXJyb3IgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICBpZiAoIXNob3VsZFVwZGF0ZSAmJiAhZGlkQ2FwdHVyZUVycm9yKSB7XG4gICAgLy8gQ29udGV4dCBwcm92aWRlcnMgc2hvdWxkIGRlZmVyIHRvIHNDVSBmb3IgcmVuZGVyaW5nXG4gICAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICAgIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7IC8vIFJlcmVuZGVyXG5cbiAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gIHZhciBuZXh0Q2hpbGRyZW47XG5cbiAgaWYgKGRpZENhcHR1cmVFcnJvciAmJiB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIHdlIGNhcHR1cmVkIGFuIGVycm9yLCBidXQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIGlzIG5vdCBkZWZpbmVkLFxuICAgIC8vIHVubW91bnQgYWxsIHRoZSBjaGlsZHJlbi4gY29tcG9uZW50RGlkQ2F0Y2ggd2lsbCBzY2hlZHVsZSBhbiB1cGRhdGUgdG9cbiAgICAvLyByZS1yZW5kZXIgYSBmYWxsYmFjay4gVGhpcyBpcyB0ZW1wb3JhcnkgdW50aWwgd2UgbWlncmF0ZSBldmVyeW9uZSB0b1xuICAgIC8vIHRoZSBuZXcgQVBJLlxuICAgIC8vIFRPRE86IFdhcm4gaW4gYSBmdXR1cmUgcmVsZWFzZS5cbiAgICBuZXh0Q2hpbGRyZW4gPSBudWxsO1xuXG4gICAge1xuICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgICBuZXh0Q2hpbGRyZW4gPSBpbnN0YW5jZS5yZW5kZXIoKTtcblxuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaW5zdGFuY2UucmVuZGVyKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICAgIH1cbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGRpZENhcHR1cmVFcnJvcikge1xuICAgIC8vIElmIHdlJ3JlIHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVjb25jaWxlIHdpdGhvdXQgcmV1c2luZyBhbnkgb2ZcbiAgICAvLyB0aGUgZXhpc3RpbmcgY2hpbGRyZW4uIENvbmNlcHR1YWxseSwgdGhlIG5vcm1hbCBjaGlsZHJlbiBhbmQgdGhlIGNoaWxkcmVuXG4gICAgLy8gdGhhdCBhcmUgc2hvd24gb24gZXJyb3IgYXJlIHR3byBkaWZmZXJlbnQgc2V0cywgc28gd2Ugc2hvdWxkbid0IHJldXNlXG4gICAgLy8gbm9ybWFsIGNoaWxkcmVuIGV2ZW4gaWYgdGhlaXIgaWRlbnRpdGllcyBtYXRjaC5cbiAgICBmb3JjZVVubW91bnRDdXJyZW50QW5kUmVjb25jaWxlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gLy8gTWVtb2l6ZSBzdGF0ZSB1c2luZyB0aGUgdmFsdWVzIHdlIGp1c3QgdXNlZCB0byByZW5kZXIuXG4gIC8vIFRPRE86IFJlc3RydWN0dXJlIHNvIHdlIG5ldmVyIHJlYWQgdmFsdWVzIGZyb20gdGhlIGluc3RhbmNlLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlOyAvLyBUaGUgY29udGV4dCBtaWdodCBoYXZlIGNoYW5nZWQgc28gd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBpdC5cblxuICBpZiAoaGFzQ29udGV4dCkge1xuICAgIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpIHtcbiAgdmFyIHJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgaWYgKHJvb3QucGVuZGluZ0NvbnRleHQpIHtcbiAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzLCByb290LnBlbmRpbmdDb250ZXh0LCByb290LnBlbmRpbmdDb250ZXh0ICE9PSByb290LmNvbnRleHQpO1xuICB9IGVsc2UgaWYgKHJvb3QuY29udGV4dCkge1xuICAgIC8vIFNob3VsZCBhbHdheXMgYmUgc2V0XG4gICAgcHVzaFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcywgcm9vdC5jb250ZXh0LCBmYWxzZSk7XG4gIH1cblxuICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgcm9vdC5jb250YWluZXJJbmZvKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdFJvb3QoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgdXBkYXRlUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcblxuICBpZiAoIShjdXJyZW50ICE9PSBudWxsICYmIHVwZGF0ZVF1ZXVlICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIklmIHRoZSByb290IGRvZXMgbm90IGhhdmUgYW4gdXBkYXRlUXVldWUsIHdlIHNob3VsZCBoYXZlIGFscmVhZHkgYmFpbGVkIG91dC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgcHJldkNoaWxkcmVuID0gcHJldlN0YXRlICE9PSBudWxsID8gcHJldlN0YXRlLmVsZW1lbnQgOiBudWxsO1xuICBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0U3RhdGUuZWxlbWVudDtcblxuICBpZiAobmV4dENoaWxkcmVuID09PSBwcmV2Q2hpbGRyZW4pIHtcbiAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmIChyb290Lmh5ZHJhdGUgJiYgZW50ZXJIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBjdXJyZW50IGNoaWxkcmVuIHRoaXMgbWlnaHQgYmUgdGhlIGZpcnN0IHBhc3MuXG4gICAgLy8gV2UgYWx3YXlzIHRyeSB0byBoeWRyYXRlLiBJZiB0aGlzIGlzbid0IGEgaHlkcmF0aW9uIHBhc3MgdGhlcmUgd29uJ3RcbiAgICAvLyBiZSBhbnkgY2hpbGRyZW4gdG8gaHlkcmF0ZSB3aGljaCBpcyBlZmZlY3RpdmVseSB0aGUgc2FtZSB0aGluZyBhc1xuICAgIC8vIG5vdCBoeWRyYXRpbmcuXG4gICAge1xuICAgICAgdmFyIG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPSByb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE7XG5cbiAgICAgIGlmIChtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhICE9IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgdmFyIG11dGFibGVTb3VyY2UgPSBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhW2ldO1xuICAgICAgICAgIHZhciB2ZXJzaW9uID0gbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YVtpICsgMV07XG4gICAgICAgICAgc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKG11dGFibGVTb3VyY2UsIHZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkID0gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjaGlsZDtcbiAgICB2YXIgbm9kZSA9IGNoaWxkO1xuXG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgIC8vIE1hcmsgZWFjaCBjaGlsZCBhcyBoeWRyYXRpbmcuIFRoaXMgaXMgYSBmYXN0IHBhdGggdG8ga25vdyB3aGV0aGVyIHRoaXNcbiAgICAgIC8vIHRyZWUgaXMgcGFydCBvZiBhIGh5ZHJhdGluZyB0cmVlLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgY2hpbGRcbiAgICAgIC8vIG5vZGUgaGFzIGZ1bGx5IG1vdW50ZWQgeWV0LCBhbmQgZm9yIHNjaGVkdWxpbmcgZXZlbnQgcmVwbGF5aW5nLlxuICAgICAgLy8gQ29uY2VwdHVhbGx5IHRoaXMgaXMgc2ltaWxhciB0byBQbGFjZW1lbnQgaW4gdGhhdCBhIG5ldyBzdWJ0cmVlIGlzXG4gICAgICAvLyBpbnNlcnRlZCBpbnRvIHRoZSBSZWFjdCB0cmVlIGhlcmUuIEl0IGp1c3QgaGFwcGVucyB0byBub3QgbmVlZCBET01cbiAgICAgIC8vIG11dGF0aW9ucyBiZWNhdXNlIGl0IGFscmVhZHkgZXhpc3RzLlxuICAgICAgbm9kZS5mbGFncyA9IG5vZGUuZmxhZ3MgJiB+UGxhY2VtZW50IHwgSHlkcmF0aW5nO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlIHJlc2V0IGh5ZHJhdGlvbiBzdGF0ZSBpbiBjYXNlIHdlIGFib3J0ZWQgYW5kIHJlc3VtZWQgYW5vdGhlclxuICAgIC8vIHJvb3QuXG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTtcbiAgfVxuXG4gIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBudWxsO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YXIgaXNEaXJlY3RUZXh0Q2hpbGQgPSBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBuZXh0UHJvcHMpO1xuXG4gIGlmIChpc0RpcmVjdFRleHRDaGlsZCkge1xuICAgIC8vIFdlIHNwZWNpYWwgY2FzZSBhIGRpcmVjdCB0ZXh0IGNoaWxkIG9mIGEgaG9zdCBub2RlLiBUaGlzIGlzIGEgY29tbW9uXG4gICAgLy8gY2FzZS4gV2Ugd29uJ3QgaGFuZGxlIGl0IGFzIGEgcmVpZmllZCBjaGlsZC4gV2Ugd2lsbCBpbnN0ZWFkIGhhbmRsZVxuICAgIC8vIHRoaXMgaW4gdGhlIGhvc3QgZW52aXJvbm1lbnQgdGhhdCBhbHNvIGhhcyBhY2Nlc3MgdG8gdGhpcyBwcm9wLiBUaGF0XG4gICAgLy8gYXZvaWRzIGFsbG9jYXRpbmcgYW5vdGhlciBIb3N0VGV4dCBmaWJlciBhbmQgdHJhdmVyc2luZyBpdC5cbiAgICBuZXh0Q2hpbGRyZW4gPSBudWxsO1xuICB9IGVsc2UgaWYgKHByZXZQcm9wcyAhPT0gbnVsbCAmJiBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBwcmV2UHJvcHMpKSB7XG4gICAgLy8gSWYgd2UncmUgc3dpdGNoaW5nIGZyb20gYSBkaXJlY3QgdGV4dCBjaGlsZCB0byBhIG5vcm1hbCBjaGlsZCwgb3IgdG9cbiAgICAvLyBlbXB0eSwgd2UgbmVlZCB0byBzY2hlZHVsZSB0aGUgdGV4dCBjb250ZW50IHRvIGJlIHJlc2V0LlxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IENvbnRlbnRSZXNldDtcbiAgfVxuXG4gIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdFRleHQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gLy8gTm90aGluZyB0byBkbyBoZXJlLiBUaGlzIGlzIHRlcm1pbmFsLiBXZSdsbCBkbyB0aGUgY29tcGxldGlvbiBzdGVwXG4gIC8vIGltbWVkaWF0ZWx5IGFmdGVyLlxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG1vdW50TGF6eUNvbXBvbmVudChfY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGVsZW1lbnRUeXBlLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKF9jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gQSBsYXp5IGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBsYXp5Q29tcG9uZW50ID0gZWxlbWVudFR5cGU7XG4gIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuICB2YXIgQ29tcG9uZW50ID0gaW5pdChwYXlsb2FkKTsgLy8gU3RvcmUgdGhlIHVud3JhcHBlZCBjb21wb25lbnQgaW4gdGhlIHR5cGUuXG5cbiAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudDtcbiAgdmFyIHJlc29sdmVkVGFnID0gd29ya0luUHJvZ3Jlc3MudGFnID0gcmVzb2x2ZUxhenlDb21wb25lbnRUYWcoQ29tcG9uZW50KTtcbiAgdmFyIHJlc29sdmVkUHJvcHMgPSByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgcHJvcHMpO1xuICB2YXIgY2hpbGQ7XG5cbiAgc3dpdGNoIChyZXNvbHZlZFRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUNsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUZvcndhcmRSZWYobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgICAgICBjaGVja1Byb3BUeXBlcyhvdXRlclByb3BUeXBlcywgcmVzb2x2ZWRQcm9wcywgLy8gUmVzb2x2ZWQgZm9yIG91dGVyIG9ubHlcbiAgICAgICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlTWVtb0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudC50eXBlLCByZXNvbHZlZFByb3BzKSwgLy8gVGhlIGlubmVyIHR5cGUgY2FuIGhhdmUgZGVmYXVsdHMgdG9vXG4gICAgICAgIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgfVxuXG4gIHZhciBoaW50ID0gJyc7XG5cbiAge1xuICAgIGlmIChDb21wb25lbnQgIT09IG51bGwgJiYgdHlwZW9mIENvbXBvbmVudCA9PT0gJ29iamVjdCcgJiYgQ29tcG9uZW50LiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgIGhpbnQgPSAnIERpZCB5b3Ugd3JhcCBhIGNvbXBvbmVudCBpbiBSZWFjdC5sYXp5KCkgbW9yZSB0aGFuIG9uY2U/JztcbiAgICB9XG4gIH0gLy8gVGhpcyBtZXNzYWdlIGludGVudGlvbmFsbHkgZG9lc24ndCBtZW50aW9uIEZvcndhcmRSZWYgb3IgTWVtb0NvbXBvbmVudFxuICAvLyBiZWNhdXNlIHRoZSBmYWN0IHRoYXQgaXQncyBhIHNlcGFyYXRlIHR5cGUgb2Ygd29yayBpcyBhblxuICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuXG5cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQuIFJlY2VpdmVkIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvOiBcIiArIENvbXBvbmVudCArIFwiLiBMYXp5IGVsZW1lbnQgdHlwZSBtdXN0IHJlc29sdmUgdG8gYSBjbGFzcyBvciBmdW5jdGlvbi5cIiArIGhpbnQgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKF9jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gQW4gaW5jb21wbGV0ZSBjb21wb25lbnQgb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkIGluc2lkZSBhIG5vbi1cbiAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgLy8gYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeSBjb21taXR0ZWQuXG4gICAgLy8gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgIF9jdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9IC8vIFByb21vdGUgdGhlIGZpYmVyIHRvIGEgY2xhc3MgYW5kIHRyeSByZW5kZXJpbmcgYWdhaW4uXG5cblxuICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBDbGFzc0NvbXBvbmVudDsgLy8gVGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiBpcyBhIGZvcmsgb2YgYHVwZGF0ZUNsYXNzQ29tcG9uZW50YFxuICAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuICB2YXIgaGFzQ29udGV4dDtcblxuICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICB9IGVsc2Uge1xuICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzKTtcbiAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gZmluaXNoQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEFuIGluZGV0ZXJtaW5hdGUgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIGNvbnRleHQ7XG5cbiAge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZmFsc2UpO1xuICAgIGNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIHZhbHVlO1xuXG4gIHtcbiAgICBpZiAoQ29tcG9uZW50LnByb3RvdHlwZSAmJiB0eXBlb2YgQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRCYWRDbGFzc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcihcIlRoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gaGF2ZSBhIHJlbmRlciBtZXRob2QsIGJ1dCBkb2Vzbid0IGV4dGVuZCBSZWFjdC5Db21wb25lbnQuIFwiICsgJ1RoaXMgaXMgbGlrZWx5IHRvIGNhdXNlIGVycm9ycy4gQ2hhbmdlICVzIHRvIGV4dGVuZCBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4nLCBjb21wb25lbnROYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRCYWRDbGFzc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyh3b3JrSW5Qcm9ncmVzcywgbnVsbCk7XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgdmFsdWUgPSByZW5kZXJXaXRoSG9va3MobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcblxuICB7XG4gICAgLy8gU3VwcG9ydCBmb3IgbW9kdWxlIGNvbXBvbmVudHMgaXMgZGVwcmVjYXRlZCBhbmQgaXMgcmVtb3ZlZCBiZWhpbmQgYSBmbGFnLlxuICAgIC8vIFdoZXRoZXIgb3Igbm90IGl0IHdvdWxkIGNyYXNoIGxhdGVyLCB3ZSB3YW50IHRvIHNob3cgYSBnb29kIG1lc3NhZ2UgaW4gREVWIGZpcnN0LlxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZS5yZW5kZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUuJCR0eXBlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uIGNvbXBvbmVudCB0aGF0IHJldHVybnMgYSBjbGFzcyBpbnN0YW5jZS4gJyArICdDaGFuZ2UgJXMgdG8gYSBjbGFzcyB0aGF0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuICcgKyBcIklmIHlvdSBjYW4ndCB1c2UgYSBjbGFzcyB0cnkgYXNzaWduaW5nIHRoZSBwcm90b3R5cGUgb24gdGhlIGZ1bmN0aW9uIGFzIGEgd29ya2Fyb3VuZC4gXCIgKyBcImAlcy5wcm90b3R5cGUgPSBSZWFjdC5Db21wb25lbnQucHJvdG90eXBlYC4gRG9uJ3QgdXNlIGFuIGFycm93IGZ1bmN0aW9uIHNpbmNlIGl0IFwiICsgJ2Nhbm5vdCBiZSBjYWxsZWQgd2l0aCBgbmV3YCBieSBSZWFjdC4nLCBfY29tcG9uZW50TmFtZSwgX2NvbXBvbmVudE5hbWUsIF9jb21wb25lbnROYW1lKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCAvLyBSdW4gdGhlc2UgY2hlY2tzIGluIHByb2R1Y3Rpb24gb25seSBpZiB0aGUgZmxhZyBpcyBvZmYuXG4gIC8vIEV2ZW50dWFsbHkgd2UnbGwgZGVsZXRlIHRoaXMgYnJhbmNoIGFsdG9nZXRoZXIuXG4gICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZS5yZW5kZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUuJCR0eXBlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZTIgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWUyXSkge1xuICAgICAgICBlcnJvcignVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uIGNvbXBvbmVudCB0aGF0IHJldHVybnMgYSBjbGFzcyBpbnN0YW5jZS4gJyArICdDaGFuZ2UgJXMgdG8gYSBjbGFzcyB0aGF0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuICcgKyBcIklmIHlvdSBjYW4ndCB1c2UgYSBjbGFzcyB0cnkgYXNzaWduaW5nIHRoZSBwcm90b3R5cGUgb24gdGhlIGZ1bmN0aW9uIGFzIGEgd29ya2Fyb3VuZC4gXCIgKyBcImAlcy5wcm90b3R5cGUgPSBSZWFjdC5Db21wb25lbnQucHJvdG90eXBlYC4gRG9uJ3QgdXNlIGFuIGFycm93IGZ1bmN0aW9uIHNpbmNlIGl0IFwiICsgJ2Nhbm5vdCBiZSBjYWxsZWQgd2l0aCBgbmV3YCBieSBSZWFjdC4nLCBfY29tcG9uZW50TmFtZTIsIF9jb21wb25lbnROYW1lMiwgX2NvbXBvbmVudE5hbWUyKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lMl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gLy8gUHJvY2VlZCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgaXMgYSBjbGFzcyBpbnN0YW5jZVxuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBDbGFzc0NvbXBvbmVudDsgLy8gVGhyb3cgb3V0IGFueSBob29rcyB0aGF0IHdlcmUgdXNlZC5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDsgLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gICAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG4gICAgdmFyIGhhc0NvbnRleHQgPSBmYWxzZTtcblxuICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHZhbHVlLnN0YXRlICE9PSBudWxsICYmIHZhbHVlLnN0YXRlICE9PSB1bmRlZmluZWQgPyB2YWx1ZS5zdGF0ZSA6IG51bGw7XG4gICAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKTtcbiAgICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcblxuICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIHByb3BzKTtcbiAgICB9XG5cbiAgICBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIHZhbHVlKTtcbiAgICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gZmluaXNoQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb24gY29tcG9uZW50XG4gICAgd29ya0luUHJvZ3Jlc3MudGFnID0gRnVuY3Rpb25Db21wb25lbnQ7XG5cbiAgICB7XG5cbiAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhbHVlID0gcmVuZGVyV2l0aEhvb2tzKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZWNvbmNpbGVDaGlsZHJlbihudWxsLCB3b3JrSW5Qcm9ncmVzcywgdmFsdWUsIHJlbmRlckxhbmVzKTtcblxuICAgIHtcbiAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpIHtcbiAge1xuICAgIGlmIChDb21wb25lbnQpIHtcbiAgICAgIGlmIChDb21wb25lbnQuY2hpbGRDb250ZXh0VHlwZXMpIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IGNoaWxkQ29udGV4dFR5cGVzIGNhbm5vdCBiZSBkZWZpbmVkIG9uIGEgZnVuY3Rpb24gY29tcG9uZW50LicsIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnJlZiAhPT0gbnVsbCkge1xuICAgICAgdmFyIGluZm8gPSAnJztcbiAgICAgIHZhciBvd25lck5hbWUgPSBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpO1xuXG4gICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgIGluZm8gKz0gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgb3duZXJOYW1lICsgJ2AuJztcbiAgICAgIH1cblxuICAgICAgdmFyIHdhcm5pbmdLZXkgPSBvd25lck5hbWUgfHwgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSUQgfHwgJyc7XG4gICAgICB2YXIgZGVidWdTb3VyY2UgPSB3b3JrSW5Qcm9ncmVzcy5fZGVidWdTb3VyY2U7XG5cbiAgICAgIGlmIChkZWJ1Z1NvdXJjZSkge1xuICAgICAgICB3YXJuaW5nS2V5ID0gZGVidWdTb3VyY2UuZmlsZU5hbWUgKyAnOicgKyBkZWJ1Z1NvdXJjZS5saW5lTnVtYmVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmc1t3YXJuaW5nS2V5XSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnNbd2FybmluZ0tleV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBiZSBnaXZlbiByZWZzLiAnICsgJ0F0dGVtcHRzIHRvIGFjY2VzcyB0aGlzIHJlZiB3aWxsIGZhaWwuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHVzZSBSZWFjdC5mb3J3YXJkUmVmKCk/JXMnLCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZTMgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWUzXSkge1xuICAgICAgICBlcnJvcignJXM6IEZ1bmN0aW9uIGNvbXBvbmVudHMgZG8gbm90IHN1cHBvcnQgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLicsIF9jb21wb25lbnROYW1lMyk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTNdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIENvbXBvbmVudC5jb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgQ29tcG9uZW50LmNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWU0ID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWU0XSkge1xuICAgICAgICBlcnJvcignJXM6IEZ1bmN0aW9uIGNvbXBvbmVudHMgZG8gbm90IHN1cHBvcnQgY29udGV4dFR5cGUuJywgX2NvbXBvbmVudE5hbWU0KTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWU0XSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBTVVNQRU5ERURfTUFSS0VSID0ge1xuICBkZWh5ZHJhdGVkOiBudWxsLFxuICByZXRyeUxhbmU6IE5vTGFuZVxufTtcblxuZnVuY3Rpb24gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSB7XG4gIHJldHVybiB7XG4gICAgYmFzZUxhbmVzOiByZW5kZXJMYW5lc1xuICB9O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpIHtcbiAgcmV0dXJuIHtcbiAgICBiYXNlTGFuZXM6IG1lcmdlTGFuZXMocHJldk9mZnNjcmVlblN0YXRlLmJhc2VMYW5lcywgcmVuZGVyTGFuZXMpXG4gIH07XG59IC8vIFRPRE86IFByb2JhYmx5IHNob3VsZCBpbmxpbmUgdGhpcyBiYWNrXG5cblxuZnVuY3Rpb24gc2hvdWxkUmVtYWluT25GYWxsYmFjayhzdXNwZW5zZUNvbnRleHQsIGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjaywgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG9cbiAgLy8gcmVtYWluIG9uIHRoYXQgZmFsbGJhY2sgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBjb250ZW50IGhhcyByZXNvbHZlZC5cbiAgLy8gRm9yIGV4YW1wbGUsIFN1c3BlbnNlTGlzdCBjb29yZGluYXRlcyB3aGVuIG5lc3RlZCBjb250ZW50IGFwcGVhcnMuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIHN1c3BlbnNlU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgLy8gQ3VycmVudGx5IHNob3dpbmcgY29udGVudC4gRG9uJ3QgaGlkZSBpdCwgZXZlbiBpZiBGb3JjZVN1c3BlbnNlRmFsbGFja1xuICAgICAgLy8gaXMgdHJ1ZS4gTW9yZSBwcmVjaXNlIG5hbWUgbWlnaHQgYmUgXCJGb3JjZVJlbWFpblN1c3BlbnNlRmFsbGJhY2tcIi5cbiAgICAgIC8vIE5vdGU6IFRoaXMgaXMgYSBmYWN0b3Jpbmcgc21lbGwuIENhbid0IHJlbWFpbiBvbiBhIGZhbGxiYWNrIGlmIHRoZXJlJ3NcbiAgICAgIC8vIG5vIGZhbGxiYWNrIHRvIHJlbWFpbiBvbi5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gLy8gTm90IGN1cnJlbnRseSBzaG93aW5nIGNvbnRlbnQuIENvbnN1bHQgdGhlIFN1c3BlbnNlIGNvbnRleHQuXG5cblxuICByZXR1cm4gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoY3VycmVudCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVE9ETzogU2hvdWxkIG5vdCByZW1vdmUgcmVuZGVyIGxhbmVzIHRoYXQgd2VyZSBwaW5nZWQgZHVyaW5nIHRoaXMgcmVuZGVyXG4gIHJldHVybiByZW1vdmVMYW5lcyhjdXJyZW50LmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIFRoaXMgaXMgdXNlZCBieSBEZXZUb29scyB0byBmb3JjZSBhIGJvdW5kYXJ5IHRvIHN1c3BlbmQuXG5cbiAge1xuICAgIGlmIChzaG91bGRTdXNwZW5kKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuICB2YXIgc2hvd0ZhbGxiYWNrID0gZmFsc2U7XG4gIHZhciBkaWRTdXNwZW5kID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgaWYgKGRpZFN1c3BlbmQgfHwgc2hvdWxkUmVtYWluT25GYWxsYmFjayhzdXNwZW5zZUNvbnRleHQsIGN1cnJlbnQpKSB7XG4gICAgLy8gU29tZXRoaW5nIGluIHRoaXMgYm91bmRhcnkncyBzdWJ0cmVlIGFscmVhZHkgc3VzcGVuZGVkLiBTd2l0Y2ggdG9cbiAgICAvLyByZW5kZXJpbmcgdGhlIGZhbGxiYWNrIGNoaWxkcmVuLlxuICAgIHNob3dGYWxsYmFjayA9IHRydWU7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfkRpZENhcHR1cmU7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXR0ZW1wdGluZyB0aGUgbWFpbiBjb250ZW50XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgbmV3IG1vdW50IG9yIHRoaXMgYm91bmRhcnkgaXMgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgc3RhdGUuXG4gICAgICAvLyBNYXJrIHRoaXMgc3VidHJlZSBjb250ZXh0IGFzIGhhdmluZyBhdCBsZWFzdCBvbmUgaW52aXNpYmxlIHBhcmVudCB0aGF0IGNvdWxkXG4gICAgICAvLyBoYW5kbGUgdGhlIGZhbGxiYWNrIHN0YXRlLlxuICAgICAgLy8gQm91bmRhcmllcyB3aXRob3V0IGZhbGxiYWNrcyBvciBzaG91bGQgYmUgYXZvaWRlZCBhcmUgbm90IGNvbnNpZGVyZWQgc2luY2VcbiAgICAgIC8vIHRoZXkgY2Fubm90IGhhbmRsZSBwcmVmZXJyZWQgZmFsbGJhY2sgc3RhdGVzLlxuICAgICAgaWYgKG5leHRQcm9wcy5mYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIG5leHRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZSkge1xuICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBhZGRTdWJ0cmVlU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdXNwZW5zZUNvbnRleHQgPSBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQpO1xuICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpOyAvLyBPSywgdGhlIG5leHQgcGFydCBpcyBjb25mdXNpbmcuIFdlJ3JlIGFib3V0IHRvIHJlY29uY2lsZSB0aGUgU3VzcGVuc2VcbiAgLy8gYm91bmRhcnkncyBjaGlsZHJlbi4gVGhpcyBpbnZvbHZlcyBzb21lIGN1c3RvbSByZWNvbmNpbGF0aW9uIGxvZ2ljLiBUd29cbiAgLy8gbWFpbiByZWFzb25zIHRoaXMgaXMgc28gY29tcGxpY2F0ZWQuXG4gIC8vXG4gIC8vIEZpcnN0LCBMZWdhY3kgTW9kZSBoYXMgZGlmZmVyZW50IHNlbWFudGljcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFRoZVxuICAvLyBwcmltYXJ5IHRyZWUgd2lsbCBjb21taXQgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLCBzbyB3aGVuIHdlIGRvIHRoZVxuICAvLyBzZWNvbmQgcGFzcyB0byByZW5kZXIgdGhlIGZhbGxiYWNrLCB3ZSBkbyBzb21lIGV4Y2VlZGluZ2x5LCB1aCwgY2xldmVyXG4gIC8vIGhhY2tzIHRvIG1ha2UgdGhhdCBub3QgdG90YWxseSBicmVhay4gTGlrZSB0cmFuc2ZlcnJpbmcgZWZmZWN0cyBhbmRcbiAgLy8gZGVsZXRpb25zIGZyb20gaGlkZGVuIHRyZWUuIEluIENvbmN1cnJlbnQgTW9kZSwgaXQncyBtdWNoIHNpbXBsZXIsXG4gIC8vIGJlY2F1c2Ugd2UgYmFpbG91dCBvbiB0aGUgcHJpbWFyeSB0cmVlIGNvbXBsZXRlbHkgYW5kIGxlYXZlIGl0IGluIGl0cyBvbGRcbiAgLy8gc3RhdGUsIG5vIGVmZmVjdHMuIFNhbWUgYXMgd2hhdCB3ZSBkbyBmb3IgT2Zmc2NyZWVuIChleGNlcHQgdGhhdFxuICAvLyBPZmZzY3JlZW4gZG9lc24ndCBoYXZlIHRoZSBmaXJzdCByZW5kZXIgcGFzcykuXG4gIC8vXG4gIC8vIFNlY29uZCBpcyBoeWRyYXRpb24uIER1cmluZyBoeWRyYXRpb24sIHRoZSBTdXNwZW5zZSBmaWJlciBoYXMgYSBzbGlnaHRseVxuICAvLyBkaWZmZXJlbnQgbGF5b3V0LCB3aGVyZSB0aGUgY2hpbGQgcG9pbnRzIHRvIGEgZGVoeWRyYXRlZCBmcmFnbWVudCwgd2hpY2hcbiAgLy8gY29udGFpbnMgdGhlIERPTSByZW5kZXJlZCBieSB0aGUgc2VydmVyLlxuICAvL1xuICAvLyBUaGlyZCwgZXZlbiBpZiB5b3Ugc2V0IGFsbCB0aGF0IGFzaWRlLCBTdXNwZW5zZSBpcyBsaWtlIGVycm9yIGJvdW5kYXJpZXMgaW5cbiAgLy8gdGhhdCB3ZSBmaXJzdCB3ZSB0cnkgdG8gcmVuZGVyIG9uZSB0cmVlLCBhbmQgaWYgdGhhdCBmYWlscywgd2UgcmVuZGVyIGFnYWluXG4gIC8vIGFuZCBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgdHJlZS4gTGlrZSBhIHRyeS9jYXRjaCBibG9jay4gU28gd2UgaGF2ZSB0byB0cmFja1xuICAvLyB3aGljaCBicmFuY2ggd2UncmUgY3VycmVudGx5IHJlbmRlcmluZy4gSWRlYWxseSB3ZSB3b3VsZCBtb2RlbCB0aGlzIHVzaW5nXG4gIC8vIGEgc3RhY2suXG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJbml0aWFsIG1vdW50XG4gICAgLy8gSWYgd2UncmUgY3VycmVudGx5IGh5ZHJhdGluZywgdHJ5IHRvIGh5ZHJhdGUgdGhpcyBib3VuZGFyeS5cbiAgICAvLyBCdXQgb25seSBpZiB0aGlzIGhhcyBhIGZhbGxiYWNrLlxuICAgIGlmIChuZXh0UHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpOyAvLyBUaGlzIGNvdWxkJ3ZlIGJlZW4gYSBkZWh5ZHJhdGVkIHN1c3BlbnNlIGNvbXBvbmVudC5cbiAgICB9XG5cbiAgICB2YXIgbmV4dFByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgbmV4dEZhbGxiYWNrQ2hpbGRyZW4gPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG5cbiAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICB2YXIgZmFsbGJhY2tGcmFnbWVudCA9IG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBuZXh0UHJpbWFyeUNoaWxkcmVuLCBuZXh0RmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5tZW1vaXplZFN0YXRlID0gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgcmV0dXJuIGZhbGxiYWNrRnJhZ21lbnQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3BzLnVuc3RhYmxlX2V4cGVjdGVkTG9hZFRpbWUgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgQ1BVLWJvdW5kIHRyZWUuIFNraXAgdGhpcyB0cmVlIGFuZCBzaG93IGEgcGxhY2Vob2xkZXIgdG9cbiAgICAgIC8vIHVuYmxvY2sgdGhlIHN1cnJvdW5kaW5nIGNvbnRlbnQuIFRoZW4gaW1tZWRpYXRlbHkgcmV0cnkgYWZ0ZXIgdGhlXG4gICAgICAvLyBpbml0aWFsIGNvbW1pdC5cbiAgICAgIHZhciBfZmFsbGJhY2tGcmFnbWVudCA9IG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBuZXh0UHJpbWFyeUNoaWxkcmVuLCBuZXh0RmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQubWVtb2l6ZWRTdGF0ZSA9IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjsgLy8gU2luY2Ugbm90aGluZyBhY3R1YWxseSBzdXNwZW5kZWQsIHRoZXJlIHdpbGwgbm90aGluZyB0byBwaW5nIHRoaXMgdG9cbiAgICAgIC8vIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtcyBvZlxuICAgICAgLy8gcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLCBpdCdzXG4gICAgICAvLyBub3QgcGFydCBvZiB0aGUgc2FtZSB0cmFuc2l0aW9uIG9uY2UgdGhlIHRyYW5zaXRpb24gaGFzIGNvbW1pdHRlZC4gSWZcbiAgICAgIC8vIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZSBwYWludGVkLlxuICAgICAgLy8gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLiBXZSBjYW4gdXNlIGFueVxuICAgICAgLy8gUmV0cnlMYW5lIGV2ZW4gaWYgaXQncyB0aGUgb25lIGN1cnJlbnRseSByZW5kZXJpbmcgc2luY2Ugd2UncmUgbGVhdmluZ1xuICAgICAgLy8gaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuXG4gICAgICB7XG4gICAgICAgIG1hcmtTcGF3bmVkV29yayhTb21lUmV0cnlMYW5lKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9mYWxsYmFja0ZyYWdtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIGFuIHVwZGF0ZS5cbiAgICAvLyBJZiB0aGUgY3VycmVudCBmaWJlciBoYXMgYSBTdXNwZW5zZVN0YXRlLCB0aGF0IG1lYW5zIGl0J3MgYWxyZWFkeSBzaG93aW5nXG4gICAgLy8gYSBmYWxsYmFjay5cbiAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuXG4gICAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4yID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW4yID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gdXBkYXRlU3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjIsIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjIsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50MyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICB2YXIgcHJldk9mZnNjcmVlblN0YXRlID0gY3VycmVudC5jaGlsZC5tZW1vaXplZFN0YXRlO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzLm1lbW9pemVkU3RhdGUgPSBwcmV2T2Zmc2NyZWVuU3RhdGUgPT09IG51bGwgPyBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIDogdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShwcmV2T2Zmc2NyZWVuU3RhdGUsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50My5jaGlsZExhbmVzID0gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoY3VycmVudCwgcmVuZGVyTGFuZXMpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgICAgcmV0dXJuIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW4zID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0ID0gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuMywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3ByaW1hcnlDaGlsZEZyYWdtZW50NDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGN1cnJlbnQgdHJlZSBpcyBub3QgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2suXG4gICAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICAgIC8vIFRpbWVkIG91dC5cbiAgICAgICAgdmFyIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjMgPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjQgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQyID0gdXBkYXRlU3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjQsIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjMsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NSA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICB2YXIgX3ByZXZPZmZzY3JlZW5TdGF0ZSA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50NS5tZW1vaXplZFN0YXRlID0gX3ByZXZPZmZzY3JlZW5TdGF0ZSA9PT0gbnVsbCA/IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykgOiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKF9wcmV2T2Zmc2NyZWVuU3RhdGUsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50NS5jaGlsZExhbmVzID0gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoY3VycmVudCwgcmVuZGVyTGFuZXMpOyAvLyBTa2lwIHRoZSBwcmltYXJ5IGNoaWxkcmVuLCBhbmQgY29udGludWUgd29ya2luZyBvbiB0aGVcbiAgICAgICAgLy8gZmFsbGJhY2sgY2hpbGRyZW4uXG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICAgIHJldHVybiBfZmFsbGJhY2tDaGlsZEZyYWdtZW50MjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFN0aWxsIGhhdmVuJ3QgdGltZWQgb3V0LiBDb250aW51ZSByZW5kZXJpbmcgdGhlIGNoaWxkcmVuLCBsaWtlIHdlXG4gICAgICAgIC8vIG5vcm1hbGx5IGRvLlxuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW41ID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ2ID0gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuNSwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3ByaW1hcnlDaGlsZEZyYWdtZW50NjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICBtb2RlOiAndmlzaWJsZScsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9O1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocHJpbWFyeUNoaWxkUHJvcHMsIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gbW91bnRTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgZmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ2hpZGRlbicsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9O1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG5cbiAgaWYgKChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlICYmIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAvLyBJbiBsZWdhY3kgbW9kZSwgd2UgY29tbWl0IHRoZSBwcmltYXJ5IHRyZWUgYXMgaWYgaXQgc3VjY2Vzc2Z1bGx5XG4gICAgLy8gY29tcGxldGVkLCBldmVuIHRob3VnaCBpdCdzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS5cbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHM7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIGR1cmF0aW9ucyBmcm9tIHRoZSBmaXJzdCBwYXNzIHNvIHRoZXkgYXJlbid0IGluY2x1ZGVkIGluIHRoZVxuICAgICAgLy8gZmluYWwgYW1vdW50cy4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlLCBzaW5jZSB3ZSdyZSBpbnRlbnRpb25hbGx5XG4gICAgICAvLyBub3QgbWVhc3VyaW5nIHBhcnQgb2YgdGhlIHJlbmRlciBwaGFzZSwgYnV0IHRoaXMgbWFrZXMgaXQgbWF0Y2ggd2hhdCB3ZVxuICAgICAgLy8gZG8gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgIH1cblxuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwcmltYXJ5Q2hpbGRQcm9wcywgbW9kZSwgTm9MYW5lcywgbnVsbCk7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpO1xuICB9XG5cbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcykge1xuICAvLyBUaGUgcHJvcHMgYXJndW1lbnQgdG8gYGNyZWF0ZVdvcmtJblByb2dyZXNzYCBpcyBgYW55YCB0eXBlZCwgc28gd2UgdXNlIHRoaXNcbiAgLy8gd3JhcHBlciBmdW5jdGlvbiB0byBjb25zdHJhaW4gaXQuXG4gIHJldHVybiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjdXJyZW50LmNoaWxkO1xuICB2YXIgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nO1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCwge1xuICAgIG1vZGU6ICd2aXNpYmxlJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH0pO1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmxhbmVzID0gcmVuZGVyTGFuZXM7XG4gIH1cblxuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IG51bGw7XG5cbiAgaWYgKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAvLyBEZWxldGUgdGhlIGZhbGxiYWNrIGNoaWxkIGZyYWdtZW50XG4gICAgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50LmZsYWdzID0gRGVsZXRpb247XG4gICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIGZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGN1cnJlbnQuY2hpbGQ7XG4gIHZhciBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmc7XG4gIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICBtb2RlOiAnaGlkZGVuJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH07XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcblxuICBpZiAoIC8vIEluIGxlZ2FjeSBtb2RlLCB3ZSBjb21taXQgdGhlIHByaW1hcnkgdHJlZSBhcyBpZiBpdCBzdWNjZXNzZnVsbHlcbiAgLy8gY29tcGxldGVkLCBldmVuIHRob3VnaCBpdCdzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS5cbiAgKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUgJiYgLy8gTWFrZSBzdXJlIHdlJ3JlIG9uIHRoZSBzZWNvbmQgcGFzcywgaS5lLiB0aGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCB3YXNcbiAgLy8gYWxyZWFkeSBjbG9uZWQuIEluIGxlZ2FjeSBtb2RlLCB0aGUgb25seSBjYXNlIHdoZXJlIHRoaXMgaXNuJ3QgdHJ1ZSBpc1xuICAvLyB3aGVuIERldlRvb2xzIGZvcmNlcyB1cyB0byBkaXNwbGF5IGEgZmFsbGJhY2s7IHdlIHNraXAgdGhlIGZpcnN0IHJlbmRlclxuICAvLyBwYXNzIGVudGlyZWx5IGFuZCBnbyBzdHJhaWdodCB0byByZW5kZXJpbmcgdGhlIGZhbGxiYWNrLiAoSW4gQ29uY3VycmVudFxuICAvLyBNb2RlLCBTdXNwZW5zZUxpc3QgY2FuIGFsc28gdHJpZ2dlciB0aGlzIHNjZW5hcmlvLCBidXQgdGhpcyBpcyBhIGxlZ2FjeS1cbiAgLy8gb25seSBjb2RlcGF0aC4pXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkICE9PSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQpIHtcbiAgICB2YXIgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5wZW5kaW5nUHJvcHMgPSBwcmltYXJ5Q2hpbGRQcm9wcztcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAvLyBSZXNldCB0aGUgZHVyYXRpb25zIGZyb20gdGhlIGZpcnN0IHBhc3Mgc28gdGhleSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlXG4gICAgICAvLyBmaW5hbCBhbW91bnRzLiBUaGlzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUsIHNpbmNlIHdlJ3JlIGludGVudGlvbmFsbHlcbiAgICAgIC8vIG5vdCBtZWFzdXJpbmcgcGFydCBvZiB0aGUgcmVuZGVyIHBoYXNlLCBidXQgdGhpcyBtYWtlcyBpdCBtYXRjaCB3aGF0IHdlXG4gICAgICAvLyBkbyBpbiBDb25jdXJyZW50IE1vZGUuXG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICB9IC8vIFRoZSBmYWxsYmFjayBmaWJlciB3YXMgYWRkZWQgYXMgYSBkZWxldGlvbiBlZmZlY3QgZHVyaW5nIHRoZSBmaXJzdCBwYXNzLlxuICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHdlJ3JlIGdvaW5nIHRvIHJlbWFpbiBvbiB0aGUgZmFsbGJhY2ssIHdlIG5vIGxvbmdlciB3YW50XG4gICAgLy8gdG8gZGVsZXRlIGl0LiBTbyB3ZSBuZWVkIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0LiBEZWxldGlvbnMgYXJlIHN0b3JlZFxuICAgIC8vIG9uIHRoZSBzYW1lIGxpc3QgYXMgZWZmZWN0cy4gV2Ugd2FudCB0byBrZWVwIHRoZSBlZmZlY3RzIGZyb20gdGhlIHByaW1hcnlcbiAgICAvLyB0cmVlLiBTbyB3ZSBjb3B5IHRoZSBwcmltYXJ5IGNoaWxkIGZyYWdtZW50J3MgZWZmZWN0IGxpc3QsIHdoaWNoIGRvZXMgbm90XG4gICAgLy8gaW5jbHVkZSB0aGUgZmFsbGJhY2sgZGVsZXRpb24gZWZmZWN0LlxuXG5cbiAgICB2YXIgcHJvZ3Jlc3NlZExhc3RFZmZlY3QgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKHByb2dyZXNzZWRMYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IHByaW1hcnlDaGlsZEZyYWdtZW50LmZpcnN0RWZmZWN0O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IHByb2dyZXNzZWRMYXN0RWZmZWN0O1xuICAgICAgcHJvZ3Jlc3NlZExhc3RFZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IFJlc2V0IHRoaXMgc29tZXdoZXJlIGVsc2U/IExvbCBsZWdhY3kgbW9kZSBpcyBzbyB3ZWlyZC5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IG51bGw7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQsIHByaW1hcnlDaGlsZFByb3BzKTtcbiAgfVxuXG4gIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG5cbiAgaWYgKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50LCBmYWxsYmFja0NoaWxkcmVuKTtcbiAgfSBlbHNlIHtcbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7IC8vIE5lZWRzIGEgcGxhY2VtZW50IGVmZmVjdCBiZWNhdXNlIHRoZSBwYXJlbnQgKHRoZSBTdXNwZW5zZSBib3VuZGFyeSkgYWxyZWFkeVxuICAgIC8vIG1vdW50ZWQgYnV0IHRoaXMgaXMgYSBuZXcgZmliZXIuXG5cbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVXb3JrT25GaWJlcihmaWJlciwgcmVuZGVyTGFuZXMpIHtcbiAgZmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKGZpYmVyLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICBzY2hlZHVsZVdvcmtPblBhcmVudFBhdGgoZmliZXIucmV0dXJuLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHByb3BhZ2F0ZVN1c3BlbnNlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgZmlyc3RDaGlsZCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gTWFyayBhbnkgU3VzcGVuc2UgYm91bmRhcmllcyB3aXRoIGZhbGxiYWNrcyBhcyBoYXZpbmcgd29yayB0byBkby5cbiAgLy8gSWYgdGhleSB3ZXJlIHByZXZpb3VzbHkgZm9yY2VkIGludG8gZmFsbGJhY2tzLCB0aGV5IG1heSBub3cgYmUgYWJsZVxuICAvLyB0byB1bmJsb2NrLlxuICB2YXIgbm9kZSA9IGZpcnN0Q2hpbGQ7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICB2YXIgc3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBzY2hlZHVsZVdvcmtPbkZpYmVyKG5vZGUsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUxpc3RDb21wb25lbnQpIHtcbiAgICAgIC8vIElmIHRoZSB0YWlsIGlzIGhpZGRlbiB0aGVyZSBtaWdodCBub3QgYmUgYW4gU3VzcGVuc2UgYm91bmRhcmllc1xuICAgICAgLy8gdG8gc2NoZWR1bGUgd29yayBvbi4gSW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gc2NoZWR1bGUgaXQgb24gdGhlXG4gICAgICAvLyBsaXN0IGl0c2VsZi5cbiAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gdHJhdmVyc2UgdG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBsaXN0IHNpbmNlXG4gICAgICAvLyB0aGUgbGlzdCB3aWxsIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHdoZW4gaXQgcmVyZW5kZXJzLlxuICAgICAgc2NoZWR1bGVXb3JrT25GaWJlcihub2RlLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZExhc3RDb250ZW50Um93KGZpcnN0Q2hpbGQpIHtcbiAgLy8gVGhpcyBpcyBnb2luZyB0byBmaW5kIHRoZSBsYXN0IHJvdyBhbW9uZyB0aGVzZSBjaGlsZHJlbiB0aGF0IGlzIGFscmVhZHlcbiAgLy8gc2hvd2luZyBjb250ZW50IG9uIHRoZSBzY3JlZW4sIGFzIG9wcG9zZWQgdG8gYmVpbmcgaW4gZmFsbGJhY2sgc3RhdGUgb3JcbiAgLy8gbmV3LiBJZiBhIHJvdyBoYXMgbXVsdGlwbGUgU3VzcGVuc2UgYm91bmRhcmllcywgYW55IG9mIHRoZW0gYmVpbmcgaW4gdGhlXG4gIC8vIGZhbGxiYWNrIHN0YXRlLCBjb3VudHMgYXMgdGhlIHdob2xlIHJvdyBiZWluZyBpbiBhIGZhbGxiYWNrIHN0YXRlLlxuICAvLyBOb3RlIHRoYXQgdGhlIFwicm93c1wiIHdpbGwgYmUgd29ya0luUHJvZ3Jlc3MsIGJ1dCBhbnkgbmVzdGVkIGNoaWxkcmVuXG4gIC8vIHdpbGwgc3RpbGwgYmUgY3VycmVudCBzaW5jZSB3ZSBoYXZlbid0IHJlbmRlcmVkIHRoZW0geWV0LiBUaGUgbW91bnRlZFxuICAvLyBvcmRlciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBuZXcgb3JkZXIuIFdlIHVzZSB0aGUgbmV3IG9yZGVyLlxuICB2YXIgcm93ID0gZmlyc3RDaGlsZDtcbiAgdmFyIGxhc3RDb250ZW50Um93ID0gbnVsbDtcblxuICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnRSb3cgPSByb3cuYWx0ZXJuYXRlOyAvLyBOZXcgcm93cyBjYW4ndCBiZSBjb250ZW50IHJvd3MuXG5cbiAgICBpZiAoY3VycmVudFJvdyAhPT0gbnVsbCAmJiBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudFJvdykgPT09IG51bGwpIHtcbiAgICAgIGxhc3RDb250ZW50Um93ID0gcm93O1xuICAgIH1cblxuICAgIHJvdyA9IHJvdy5zaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIGxhc3RDb250ZW50Um93O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVJldmVhbE9yZGVyKHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAocmV2ZWFsT3JkZXIgIT09IHVuZGVmaW5lZCAmJiByZXZlYWxPcmRlciAhPT0gJ2ZvcndhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ2JhY2t3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICd0b2dldGhlcicgJiYgIWRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSkge1xuICAgICAgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXJbcmV2ZWFsT3JkZXJdID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiByZXZlYWxPcmRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc3dpdGNoIChyZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAndG9nZXRoZXInOlxuICAgICAgICAgIGNhc2UgJ2ZvcndhcmRzJzpcbiAgICAgICAgICBjYXNlICdiYWNrd2FyZHMnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ1VzZSBsb3dlcmNhc2UgXCIlc1wiIGluc3RlYWQuJywgcmV2ZWFsT3JkZXIsIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAnZm9yd2FyZCc6XG4gICAgICAgICAgY2FzZSAnYmFja3dhcmQnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ1JlYWN0IHVzZXMgdGhlIC1zIHN1ZmZpeCBpbiB0aGUgc3BlbGxpbmcuIFVzZSBcIiVzc1wiIGluc3RlYWQuJywgcmV2ZWFsT3JkZXIsIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JywgcmV2ZWFsT3JkZXIpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdEaWQgeW91IG1lYW4gXCJ0b2dldGhlclwiLCBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIj8nLCByZXZlYWxPcmRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGFpbE9wdGlvbnModGFpbE1vZGUsIHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAodGFpbE1vZGUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdKSB7XG4gICAgICBpZiAodGFpbE1vZGUgIT09ICdjb2xsYXBzZWQnICYmIHRhaWxNb2RlICE9PSAnaGlkZGVuJykge1xuICAgICAgICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciB0YWlsIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwiY29sbGFwc2VkXCIgb3IgXCJoaWRkZW5cIj8nLCB0YWlsTW9kZSk7XG4gICAgICB9IGVsc2UgaWYgKHJldmVhbE9yZGVyICE9PSAnZm9yd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAnYmFja3dhcmRzJykge1xuICAgICAgICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCc8U3VzcGVuc2VMaXN0IHRhaWw9XCIlc1wiIC8+IGlzIG9ubHkgdmFsaWQgaWYgcmV2ZWFsT3JkZXIgaXMgJyArICdcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIi4gJyArICdEaWQgeW91IG1lYW4gdG8gc3BlY2lmeSByZXZlYWxPcmRlcj1cImZvcndhcmRzXCI/JywgdGFpbE1vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKGNoaWxkU2xvdCwgaW5kZXgpIHtcbiAge1xuICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShjaGlsZFNsb3QpO1xuICAgIHZhciBpc0l0ZXJhYmxlID0gIWlzQXJyYXkgJiYgdHlwZW9mIGdldEl0ZXJhdG9yRm4oY2hpbGRTbG90KSA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIGlmIChpc0FycmF5IHx8IGlzSXRlcmFibGUpIHtcbiAgICAgIHZhciB0eXBlID0gaXNBcnJheSA/ICdhcnJheScgOiAnaXRlcmFibGUnO1xuXG4gICAgICBlcnJvcignQSBuZXN0ZWQgJXMgd2FzIHBhc3NlZCB0byByb3cgIyVzIGluIDxTdXNwZW5zZUxpc3QgLz4uIFdyYXAgaXQgaW4gJyArICdhbiBhZGRpdGlvbmFsIFN1c3BlbnNlTGlzdCB0byBjb25maWd1cmUgaXRzIHJldmVhbE9yZGVyOiAnICsgJzxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPiAuLi4gJyArICc8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj57JXN9PC9TdXNwZW5zZUxpc3Q+IC4uLiAnICsgJzwvU3VzcGVuc2VMaXN0PicsIHR5cGUsIGluZGV4LCB0eXBlKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN1c3BlbnNlTGlzdENoaWxkcmVuKGNoaWxkcmVuLCByZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKChyZXZlYWxPcmRlciA9PT0gJ2ZvcndhcmRzJyB8fCByZXZlYWxPcmRlciA9PT0gJ2JhY2t3YXJkcycpICYmIGNoaWxkcmVuICE9PSB1bmRlZmluZWQgJiYgY2hpbGRyZW4gIT09IG51bGwgJiYgY2hpbGRyZW4gIT09IGZhbHNlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChjaGlsZHJlbltpXSwgaSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNoaWxkcmVuSXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwoY2hpbGRyZW4pO1xuXG4gICAgICAgICAgaWYgKGNoaWxkcmVuSXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHZhciBzdGVwID0gY2hpbGRyZW5JdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICB2YXIgX2kgPSAwO1xuXG4gICAgICAgICAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgc3RlcCA9IGNoaWxkcmVuSXRlcmF0b3IubmV4dCgpKSB7XG4gICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChzdGVwLnZhbHVlLCBfaSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBfaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvcignQSBzaW5nbGUgcm93IHdhcyBwYXNzZWQgdG8gYSA8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPVwiJXNcIiAvPi4gJyArICdUaGlzIGlzIG5vdCB1c2VmdWwgc2luY2UgaXQgbmVlZHMgbXVsdGlwbGUgcm93cy4gJyArICdEaWQgeW91IG1lYW4gdG8gcGFzcyBtdWx0aXBsZSBjaGlsZHJlbiBvciBhbiBhcnJheT8nLCByZXZlYWxPcmRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBpc0JhY2t3YXJkcywgdGFpbCwgbGFzdENvbnRlbnRSb3csIHRhaWxNb2RlLCBsYXN0RWZmZWN0QmVmb3JlUmVuZGVyaW5nKSB7XG4gIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHJlbmRlclN0YXRlID09PSBudWxsKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICAgIGlzQmFja3dhcmRzOiBpc0JhY2t3YXJkcyxcbiAgICAgIHJlbmRlcmluZzogbnVsbCxcbiAgICAgIHJlbmRlcmluZ1N0YXJ0VGltZTogMCxcbiAgICAgIGxhc3Q6IGxhc3RDb250ZW50Um93LFxuICAgICAgdGFpbDogdGFpbCxcbiAgICAgIHRhaWxNb2RlOiB0YWlsTW9kZSxcbiAgICAgIGxhc3RFZmZlY3Q6IGxhc3RFZmZlY3RCZWZvcmVSZW5kZXJpbmdcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIFdlIGNhbiByZXVzZSB0aGUgZXhpc3Rpbmcgb2JqZWN0IGZyb20gcHJldmlvdXMgcmVuZGVycy5cbiAgICByZW5kZXJTdGF0ZS5pc0JhY2t3YXJkcyA9IGlzQmFja3dhcmRzO1xuICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGw7XG4gICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID0gMDtcbiAgICByZW5kZXJTdGF0ZS5sYXN0ID0gbGFzdENvbnRlbnRSb3c7XG4gICAgcmVuZGVyU3RhdGUudGFpbCA9IHRhaWw7XG4gICAgcmVuZGVyU3RhdGUudGFpbE1vZGUgPSB0YWlsTW9kZTtcbiAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gbGFzdEVmZmVjdEJlZm9yZVJlbmRlcmluZztcbiAgfVxufSAvLyBUaGlzIGNhbiBlbmQgdXAgcmVuZGVyaW5nIHRoaXMgY29tcG9uZW50IG11bHRpcGxlIHBhc3Nlcy5cbi8vIFRoZSBmaXJzdCBwYXNzIHNwbGl0cyB0aGUgY2hpbGRyZW4gZmliZXJzIGludG8gdHdvIHNldHMuIEEgaGVhZCBhbmQgdGFpbC5cbi8vIFdlIGZpcnN0IHJlbmRlciB0aGUgaGVhZC4gSWYgYW55dGhpbmcgaXMgaW4gZmFsbGJhY2sgc3RhdGUsIHdlIGRvIGFub3RoZXJcbi8vIHBhc3MgdGhyb3VnaCBiZWdpbldvcmsgdG8gcmVyZW5kZXIgYWxsIGNoaWxkcmVuIChpbmNsdWRpbmcgdGhlIHRhaWwpIHdpdGhcbi8vIHRoZSBmb3JjZSBzdXNwZW5kIGNvbnRleHQuIElmIHRoZSBmaXJzdCByZW5kZXIgZGlkbid0IGhhdmUgYW55dGhpbmcgaW5cbi8vIGluIGZhbGxiYWNrIHN0YXRlLiBUaGVuIHdlIHJlbmRlciBlYWNoIHJvdyBpbiB0aGUgdGFpbCBvbmUtYnktb25lLlxuLy8gVGhhdCBoYXBwZW5zIGluIHRoZSBjb21wbGV0ZVdvcmsgcGhhc2Ugd2l0aG91dCBnb2luZyBiYWNrIHRvIGJlZ2luV29yay5cblxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciByZXZlYWxPcmRlciA9IG5leHRQcm9wcy5yZXZlYWxPcmRlcjtcbiAgdmFyIHRhaWxNb2RlID0gbmV4dFByb3BzLnRhaWw7XG4gIHZhciBuZXdDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgdmFsaWRhdGVSZXZlYWxPcmRlcihyZXZlYWxPcmRlcik7XG4gIHZhbGlkYXRlVGFpbE9wdGlvbnModGFpbE1vZGUsIHJldmVhbE9yZGVyKTtcbiAgdmFsaWRhdGVTdXNwZW5zZUxpc3RDaGlsZHJlbihuZXdDaGlsZHJlbiwgcmV2ZWFsT3JkZXIpO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgdmFyIHNob3VsZEZvcmNlRmFsbGJhY2sgPSBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuXG4gIGlmIChzaG91bGRGb3JjZUZhbGxiYWNrKSB7XG4gICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZGlkU3VzcGVuZEJlZm9yZSA9IGN1cnJlbnQgIT09IG51bGwgJiYgKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgIGlmIChkaWRTdXNwZW5kQmVmb3JlKSB7XG4gICAgICAvLyBJZiB3ZSBwcmV2aW91c2x5IGZvcmNlZCBhIGZhbGxiYWNrLCB3ZSBuZWVkIHRvIHNjaGVkdWxlIHdvcmtcbiAgICAgIC8vIG9uIGFueSBuZXN0ZWQgYm91bmRhcmllcyB0byBsZXQgdGhlbSBrbm93IHRvIHRyeSB0byByZW5kZXJcbiAgICAgIC8vIGFnYWluLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNvbnRleHQgdXBkYXRpbmcuXG4gICAgICBwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLmNoaWxkLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuXG4gICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgfVxuXG4gIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlQ29udGV4dCk7XG5cbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgLy8gSW4gbGVnYWN5IG1vZGUsIFN1c3BlbnNlTGlzdCBkb2Vzbid0IHdvcmsgc28gd2UganVzdFxuICAgIC8vIHVzZSBtYWtlIGl0IGEgbm9vcCBieSB0cmVhdGluZyBpdCBhcyB0aGUgZGVmYXVsdCByZXZlYWxPcmRlci5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHJldmVhbE9yZGVyKSB7XG4gICAgICBjYXNlICdmb3J3YXJkcyc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGFzdENvbnRlbnRSb3cgPSBmaW5kTGFzdENvbnRlbnRSb3cod29ya0luUHJvZ3Jlc3MuY2hpbGQpO1xuICAgICAgICAgIHZhciB0YWlsO1xuXG4gICAgICAgICAgaWYgKGxhc3RDb250ZW50Um93ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgd2hvbGUgbGlzdCBpcyBwYXJ0IG9mIHRoZSB0YWlsLlxuICAgICAgICAgICAgLy8gVE9ETzogV2UgY291bGQgZmFzdCBwYXRoIGJ5IGp1c3QgcmVuZGVyaW5nIHRoZSB0YWlsIG5vdy5cbiAgICAgICAgICAgIHRhaWwgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRGlzY29ubmVjdCB0aGUgdGFpbCByb3dzIGFmdGVyIHRoZSBjb250ZW50IHJvdy5cbiAgICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHJlbmRlciB0aGVtIHNlcGFyYXRlbHkgbGF0ZXIuXG4gICAgICAgICAgICB0YWlsID0gbGFzdENvbnRlbnRSb3cuc2libGluZztcbiAgICAgICAgICAgIGxhc3RDb250ZW50Um93LnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgdGFpbCwgbGFzdENvbnRlbnRSb3csIHRhaWxNb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdiYWNrd2FyZHMnOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gZmluZCB0aGUgZmlyc3Qgcm93IHRoYXQgaGFzIGV4aXN0aW5nIGNvbnRlbnQuXG4gICAgICAgICAgLy8gQXQgdGhlIHNhbWUgdGltZSB3ZSdyZSBnb2luZyB0byByZXZlcnNlIHRoZSBsaXN0IG9mIGV2ZXJ5dGhpbmdcbiAgICAgICAgICAvLyB3ZSBwYXNzIGluIHRoZSBtZWFudGltZS4gVGhhdCdzIGdvaW5nIHRvIGJlIG91ciB0YWlsIGluIHJldmVyc2VcbiAgICAgICAgICAvLyBvcmRlci5cbiAgICAgICAgICB2YXIgX3RhaWwgPSBudWxsO1xuICAgICAgICAgIHZhciByb3cgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG5cbiAgICAgICAgICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFJvdyA9IHJvdy5hbHRlcm5hdGU7IC8vIE5ldyByb3dzIGNhbid0IGJlIGNvbnRlbnQgcm93cy5cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRSb3cgIT09IG51bGwgJiYgZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnRSb3cpID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgbWFpbiBjb250ZW50LlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJvdztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuZXh0Um93ID0gcm93LnNpYmxpbmc7XG4gICAgICAgICAgICByb3cuc2libGluZyA9IF90YWlsO1xuICAgICAgICAgICAgX3RhaWwgPSByb3c7XG4gICAgICAgICAgICByb3cgPSBuZXh0Um93O1xuICAgICAgICAgIH0gLy8gVE9ETzogSWYgd29ya0luUHJvZ3Jlc3MuY2hpbGQgaXMgbnVsbCwgd2UgY2FuIGNvbnRpbnVlIG9uIHRoZSB0YWlsIGltbWVkaWF0ZWx5LlxuXG5cbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIHRydWUsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgX3RhaWwsIG51bGwsIC8vIGxhc3RcbiAgICAgICAgICB0YWlsTW9kZSwgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAndG9nZXRoZXInOlxuICAgICAgICB7XG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBmYWxzZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICBudWxsLCAvLyB0YWlsXG4gICAgICAgICAgbnVsbCwgLy8gbGFzdFxuICAgICAgICAgIHVuZGVmaW5lZCwgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IHJldmVhbCBvcmRlciBpcyB0aGUgc2FtZSBhcyBub3QgaGF2aW5nXG4gICAgICAgICAgLy8gYSBib3VuZGFyeS5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUG9ydGFsQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gUG9ydGFscyBhcmUgc3BlY2lhbCBiZWNhdXNlIHdlIGRvbid0IGFwcGVuZCB0aGUgY2hpbGRyZW4gZHVyaW5nIG1vdW50XG4gICAgLy8gYnV0IGF0IGNvbW1pdC4gVGhlcmVmb3JlIHdlIG5lZWQgdG8gdHJhY2sgaW5zZXJ0aW9ucyB3aGljaCB0aGUgbm9ybWFsXG4gICAgLy8gZmxvdyBkb2Vzbid0IGRvIGR1cmluZyBtb3VudC4gVGhpcyBkb2Vzbid0IGhhcHBlbiBhdCB0aGUgcm9vdCBiZWNhdXNlXG4gICAgLy8gdGhlIHJvb3QgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgXCJjdXJyZW50XCIgd2l0aCBhIG51bGwgY2hpbGQuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgdW5pZnlpbmcgdGhpcyB3aXRoIGhvdyB0aGUgcm9vdCB3b3Jrcy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbnZhciBoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9IGZhbHNlO1xuXG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0UHJvdmlkZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBwcm92aWRlclR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyVHlwZS5fY29udGV4dDtcbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICB2YXIgbmV3VmFsdWUgPSBuZXdQcm9wcy52YWx1ZTtcblxuICB7XG4gICAgaWYgKCEoJ3ZhbHVlJyBpbiBuZXdQcm9wcykpIHtcbiAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIpIHtcbiAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdUaGUgYHZhbHVlYCBwcm9wIGlzIHJlcXVpcmVkIGZvciB0aGUgYDxDb250ZXh0LlByb3ZpZGVyPmAuIERpZCB5b3UgbWlzc3BlbGwgaXQgb3IgZm9yZ2V0IHRvIHBhc3MgaXQ/Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByb3ZpZGVyUHJvcFR5cGVzID0gd29ya0luUHJvZ3Jlc3MudHlwZS5wcm9wVHlwZXM7XG5cbiAgICBpZiAocHJvdmlkZXJQcm9wVHlwZXMpIHtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3ZpZGVyUHJvcFR5cGVzLCBuZXdQcm9wcywgJ3Byb3AnLCAnQ29udGV4dC5Qcm92aWRlcicpO1xuICAgIH1cbiAgfVxuXG4gIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgbmV3VmFsdWUpO1xuXG4gIGlmIChvbGRQcm9wcyAhPT0gbnVsbCkge1xuICAgIHZhciBvbGRWYWx1ZSA9IG9sZFByb3BzLnZhbHVlO1xuICAgIHZhciBjaGFuZ2VkQml0cyA9IGNhbGN1bGF0ZUNoYW5nZWRCaXRzKGNvbnRleHQsIG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG5cbiAgICBpZiAoY2hhbmdlZEJpdHMgPT09IDApIHtcbiAgICAgIC8vIE5vIGNoYW5nZS4gQmFpbG91dCBlYXJseSBpZiBjaGlsZHJlbiBhcmUgdGhlIHNhbWUuXG4gICAgICBpZiAob2xkUHJvcHMuY2hpbGRyZW4gPT09IG5ld1Byb3BzLmNoaWxkcmVuICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpKSB7XG4gICAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBjb250ZXh0IHZhbHVlIGNoYW5nZWQuIFNlYXJjaCBmb3IgbWF0Y2hpbmcgY29uc3VtZXJzIGFuZCBzY2hlZHVsZVxuICAgICAgLy8gdGhlbSB0byB1cGRhdGUuXG4gICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCBjaGFuZ2VkQml0cywgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXdDaGlsZHJlbiA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG52YXIgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRleHRDb25zdW1lcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlOyAvLyBUaGUgbG9naWMgYmVsb3cgZm9yIENvbnRleHQgZGlmZmVycyBkZXBlbmRpbmcgb24gUFJPRCBvciBERVYgbW9kZS4gSW5cbiAgLy8gREVWIG1vZGUsIHdlIGNyZWF0ZSBhIHNlcGFyYXRlIG9iamVjdCBmb3IgQ29udGV4dC5Db25zdW1lciB0aGF0IGFjdHNcbiAgLy8gbGlrZSBhIHByb3h5IHRvIENvbnRleHQuIFRoaXMgcHJveHkgb2JqZWN0IGFkZHMgdW5uZWNlc3NhcnkgY29kZSBpbiBQUk9EXG4gIC8vIHNvIHdlIHVzZSB0aGUgb2xkIGJlaGF2aW91ciAoQ29udGV4dC5Db25zdW1lciByZWZlcmVuY2VzIENvbnRleHQpIHRvXG4gIC8vIHJlZHVjZSBzaXplIGFuZCBvdmVyaGVhZC4gVGhlIHNlcGFyYXRlIG9iamVjdCByZWZlcmVuY2VzIGNvbnRleHQgdmlhXG4gIC8vIGEgcHJvcGVydHkgY2FsbGVkIFwiX2NvbnRleHRcIiwgd2hpY2ggYWxzbyBnaXZlcyB1cyB0aGUgYWJpbGl0eSB0byBjaGVja1xuICAvLyBpbiBERVYgbW9kZSBpZiB0aGlzIHByb3BlcnR5IGV4aXN0cyBvciBub3QgYW5kIHdhcm4gaWYgaXQgZG9lcyBub3QuXG5cbiAge1xuICAgIGlmIChjb250ZXh0Ll9jb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFRoaXMgbWF5IGJlIGJlY2F1c2UgaXQncyBhIENvbnRleHQgKHJhdGhlciB0aGFuIGEgQ29uc3VtZXIpLlxuICAgICAgLy8gT3IgaXQgbWF5IGJlIGJlY2F1c2UgaXQncyBvbGRlciBSZWFjdCB3aGVyZSB0aGV5J3JlIHRoZSBzYW1lIHRoaW5nLlxuICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHdhcm4gaWYgd2UncmUgc3VyZSBpdCdzIGEgbmV3IFJlYWN0LlxuICAgICAgaWYgKGNvbnRleHQgIT09IGNvbnRleHQuQ29uc3VtZXIpIHtcbiAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nQ29udGV4dEFzQ29uc3VtZXIpIHtcbiAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nQ29udGV4dEFzQ29uc3VtZXIgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlbmRlcmluZyA8Q29udGV4dD4gZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Db25zdW1lcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5fY29udGV4dDtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciByZW5kZXIgPSBuZXdQcm9wcy5jaGlsZHJlbjtcblxuICB7XG4gICAgaWYgKHR5cGVvZiByZW5kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdBIGNvbnRleHQgY29uc3VtZXIgd2FzIHJlbmRlcmVkIHdpdGggbXVsdGlwbGUgY2hpbGRyZW4sIG9yIGEgY2hpbGQgJyArIFwidGhhdCBpc24ndCBhIGZ1bmN0aW9uLiBBIGNvbnRleHQgY29uc3VtZXIgZXhwZWN0cyBhIHNpbmdsZSBjaGlsZCBcIiArICd0aGF0IGlzIGEgZnVuY3Rpb24uIElmIHlvdSBkaWQgcGFzcyBhIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdGhlcmUgJyArICdpcyBubyB0cmFpbGluZyBvciBsZWFkaW5nIHdoaXRlc3BhY2UgYXJvdW5kIGl0LicpO1xuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIHZhciBuZXdWYWx1ZSA9IHJlYWRDb250ZXh0KGNvbnRleHQsIG5ld1Byb3BzLnVuc3RhYmxlX29ic2VydmVkQml0cyk7XG4gIHZhciBuZXdDaGlsZHJlbjtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV3Q2hpbGRyZW4gPSByZW5kZXIobmV3VmFsdWUpO1xuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpIHtcbiAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gUmV1c2UgcHJldmlvdXMgZGVwZW5kZW5jaWVzXG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gIH1cblxuICB7XG4gICAgLy8gRG9uJ3QgdXBkYXRlIFwiYmFzZVwiIHJlbmRlciB0aW1lcyBmb3IgYmFpbG91dHMuXG4gICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoKTtcbiAgfVxuXG4gIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMod29ya0luUHJvZ3Jlc3MubGFuZXMpOyAvLyBDaGVjayBpZiB0aGUgY2hpbGRyZW4gaGF2ZSBhbnkgcGVuZGluZyB3b3JrLlxuXG4gIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcykpIHtcbiAgICAvLyBUaGUgY2hpbGRyZW4gZG9uJ3QgaGF2ZSBhbnkgd29yayBlaXRoZXIuIFdlIGNhbiBza2lwIHRoZW0uXG4gICAgLy8gVE9ETzogT25jZSB3ZSBhZGQgYmFjayByZXN1bWluZywgd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBjaGlsZHJlbiBhcmVcbiAgICAvLyBhIHdvcmstaW4tcHJvZ3Jlc3Mgc2V0LiBJZiBzbywgd2UgbmVlZCB0byB0cmFuc2ZlciB0aGVpciBlZmZlY3RzLlxuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgZmliZXIgZG9lc24ndCBoYXZlIHdvcmssIGJ1dCBpdHMgc3VidHJlZSBkb2VzLiBDbG9uZSB0aGUgY2hpbGRcbiAgICAvLyBmaWJlcnMgYW5kIGNvbnRpbnVlLlxuICAgIGNsb25lQ2hpbGRGaWJlcnMoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdW50RmliZXIoY3VycmVudCwgb2xkV29ya0luUHJvZ3Jlc3MsIG5ld1dvcmtJblByb2dyZXNzKSB7XG4gIHtcbiAgICB2YXIgcmV0dXJuRmliZXIgPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZXR1cm47XG5cbiAgICBpZiAocmV0dXJuRmliZXIgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHN3YXAgdGhlIHJvb3QgZmliZXIuJyk7XG4gICAgfSAvLyBEaXNjb25uZWN0IGZyb20gdGhlIG9sZCBjdXJyZW50LlxuICAgIC8vIEl0IHdpbGwgZ2V0IGRlbGV0ZWQuXG5cblxuICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICBvbGRXb3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBDb25uZWN0IHRvIHRoZSBuZXcgdHJlZS5cblxuICAgIG5ld1dvcmtJblByb2dyZXNzLmluZGV4ID0gb2xkV29ya0luUHJvZ3Jlc3MuaW5kZXg7XG4gICAgbmV3V29ya0luUHJvZ3Jlc3Muc2libGluZyA9IG9sZFdvcmtJblByb2dyZXNzLnNpYmxpbmc7XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MucmV0dXJuID0gb2xkV29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnJlZiA9IG9sZFdvcmtJblByb2dyZXNzLnJlZjsgLy8gUmVwbGFjZSB0aGUgY2hpbGQvc2libGluZyBwb2ludGVycyBhYm92ZSBpdC5cblxuICAgIGlmIChvbGRXb3JrSW5Qcm9ncmVzcyA9PT0gcmV0dXJuRmliZXIuY2hpbGQpIHtcbiAgICAgIHJldHVybkZpYmVyLmNoaWxkID0gbmV3V29ya0luUHJvZ3Jlc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcmV2U2libGluZyA9IHJldHVybkZpYmVyLmNoaWxkO1xuXG4gICAgICBpZiAocHJldlNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBwYXJlbnQgdG8gaGF2ZSBhIGNoaWxkLicpO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAocHJldlNpYmxpbmcuc2libGluZyAhPT0gb2xkV29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcHJldlNpYmxpbmcgPSBwcmV2U2libGluZy5zaWJsaW5nO1xuXG4gICAgICAgIGlmIChwcmV2U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gZmluZCB0aGUgcHJldmlvdXMgc2libGluZy4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcmV2U2libGluZy5zaWJsaW5nID0gbmV3V29ya0luUHJvZ3Jlc3M7XG4gICAgfSAvLyBEZWxldGUgdGhlIG9sZCBmaWJlciBhbmQgcGxhY2UgdGhlIG5ldyBvbmUuXG4gICAgLy8gU2luY2UgdGhlIG9sZCBmaWJlciBpcyBkaXNjb25uZWN0ZWQsIHdlIGhhdmUgdG8gc2NoZWR1bGUgaXQgbWFudWFsbHkuXG5cblxuICAgIHZhciBsYXN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdDtcblxuICAgIGlmIChsYXN0ICE9PSBudWxsKSB7XG4gICAgICBsYXN0Lm5leHRFZmZlY3QgPSBjdXJyZW50O1xuICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGN1cnJlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGN1cnJlbnQ7XG4gICAgfVxuXG4gICAgY3VycmVudC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICBjdXJyZW50LmZsYWdzID0gRGVsZXRpb247XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50OyAvLyBSZXN0YXJ0IHdvcmsgZnJvbSB0aGUgbmV3IGZpYmVyLlxuXG4gICAgcmV0dXJuIG5ld1dvcmtJblByb2dyZXNzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJlZ2luV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIHVwZGF0ZUxhbmVzID0gd29ya0luUHJvZ3Jlc3MubGFuZXM7XG5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgJiYgY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyB3aWxsIHJlc3RhcnQgdGhlIGJlZ2luIHBoYXNlIHdpdGggYSBuZXcgZmliZXIuXG4gICAgICByZXR1cm4gcmVtb3VudEZpYmVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMod29ya0luUHJvZ3Jlc3MudHlwZSwgd29ya0luUHJvZ3Jlc3Mua2V5LCB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyIHx8IG51bGwsIHdvcmtJblByb2dyZXNzLm1vZGUsIHdvcmtJblByb2dyZXNzLmxhbmVzKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgaWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyB8fCBoYXNDb250ZXh0Q2hhbmdlZCgpIHx8ICggLy8gRm9yY2UgYSByZS1yZW5kZXIgaWYgdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZWQgZHVlIHRvIGhvdCByZWxvYWQ6XG4gICAgIHdvcmtJblByb2dyZXNzLnR5cGUgIT09IGN1cnJlbnQudHlwZSApKSB7XG4gICAgICAvLyBJZiBwcm9wcyBvciBjb250ZXh0IGNoYW5nZWQsIG1hcmsgdGhlIGZpYmVyIGFzIGhhdmluZyBwZXJmb3JtZWQgd29yay5cbiAgICAgIC8vIFRoaXMgbWF5IGJlIHVuc2V0IGlmIHRoZSBwcm9wcyBhcmUgZGV0ZXJtaW5lZCB0byBiZSBlcXVhbCBsYXRlciAobWVtbykuXG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lcykpIHtcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTsgLy8gVGhpcyBmaWJlciBkb2VzIG5vdCBoYXZlIGFueSBwZW5kaW5nIHdvcmsuIEJhaWxvdXQgd2l0aG91dCBlbnRlcmluZ1xuICAgICAgLy8gdGhlIGJlZ2luIHBoYXNlLiBUaGVyZSdzIHN0aWxsIHNvbWUgYm9va2tlZXBpbmcgd2UgdGhhdCBuZWVkcyB0byBiZSBkb25lXG4gICAgICAvLyBpbiB0aGlzIG9wdGltaXplZCBwYXRoLCBtb3N0bHkgcHVzaGluZyBzdHVmZiBvbnRvIHRoZSBzdGFjay5cblxuICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLnZhbHVlO1xuICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBQcm9maWxlcjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBQcm9maWxlciBzaG91bGQgb25seSBjYWxsIG9uUmVuZGVyIHdoZW4gb25lIG9mIGl0cyBkZXNjZW5kYW50cyBhY3R1YWxseSByZW5kZXJlZC5cbiAgICAgICAgICAgIHZhciBoYXNDaGlsZFdvcmsgPSBpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKTtcblxuICAgICAgICAgICAgaWYgKGhhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICB9IC8vIFJlc2V0IGVmZmVjdCBkdXJhdGlvbnMgZm9yIHRoZSBuZXh0IGV2ZW50dWFsIGVmZmVjdCBwaGFzZS5cbiAgICAgICAgICAgIC8vIFRoZXNlIGFyZSByZXNldCBkdXJpbmcgcmVuZGVyIHRvIGFsbG93IHRoZSBEZXZUb29scyBjb21taXQgaG9vayBhIGNoYW5jZSB0byByZWFkIHRoZW0sXG5cblxuICAgICAgICAgICAgdmFyIHN0YXRlTm9kZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgICAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyB3aGV0aGVyIHRvIHJldHJ5IHRoZSBwcmltYXJ5IGNoaWxkcmVuLCBvciB0byBza2lwIG92ZXIgaXQgYW5kXG4gICAgICAgICAgICAgIC8vIGdvIHN0cmFpZ2h0IHRvIHRoZSBmYWxsYmFjay4gQ2hlY2sgdGhlIHByaW9yaXR5IG9mIHRoZSBwcmltYXJ5XG4gICAgICAgICAgICAgIC8vIGNoaWxkIGZyYWdtZW50LlxuXG5cbiAgICAgICAgICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRMYW5lcyA9IHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXM7XG5cbiAgICAgICAgICAgICAgaWYgKGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHByaW1hcnlDaGlsZExhbmVzKSkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcmltYXJ5IGNoaWxkcmVuIGhhdmUgcGVuZGluZyB3b3JrLiBVc2UgdGhlIG5vcm1hbCBwYXRoXG4gICAgICAgICAgICAgICAgLy8gdG8gYXR0ZW1wdCB0byByZW5kZXIgdGhlIHByaW1hcnkgY2hpbGRyZW4gYWdhaW4uXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQgZG9lcyBub3QgaGF2ZSBwZW5kaW5nIHdvcmsgbWFya2VkXG4gICAgICAgICAgICAgICAgLy8gb24gaXRcbiAgICAgICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpKTsgLy8gVGhlIHByaW1hcnkgY2hpbGRyZW4gZG8gbm90IGhhdmUgcGVuZGluZyB3b3JrIHdpdGggc3VmZmljaWVudFxuICAgICAgICAgICAgICAgIC8vIHByaW9yaXR5LiBCYWlsb3V0LlxuXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyBUaGUgZmFsbGJhY2sgY2hpbGRyZW4gaGF2ZSBwZW5kaW5nIHdvcmsuIFNraXAgb3ZlciB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIHByaW1hcnkgY2hpbGRyZW4gYW5kIHdvcmsgb24gdGhlIGZhbGxiYWNrLlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGlkU3VzcGVuZEJlZm9yZSA9IChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgICAgICAgICAgIHZhciBfaGFzQ2hpbGRXb3JrID0gaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChkaWRTdXNwZW5kQmVmb3JlKSB7XG4gICAgICAgICAgICAgIGlmIChfaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgc29tZXRoaW5nIHdhcyBpbiBmYWxsYmFjayBzdGF0ZSBsYXN0IHRpbWUsIGFuZCB3ZSBoYXZlIGFsbCB0aGVcbiAgICAgICAgICAgICAgICAvLyBzYW1lIGNoaWxkcmVuIHRoZW4gd2UncmUgc3RpbGwgaW4gcHJvZ3Jlc3NpdmUgbG9hZGluZyBzdGF0ZS5cbiAgICAgICAgICAgICAgICAvLyBTb21ldGhpbmcgbWlnaHQgZ2V0IHVuYmxvY2tlZCBieSBzdGF0ZSB1cGRhdGVzIG9yIHJldHJpZXMgaW4gdGhlXG4gICAgICAgICAgICAgICAgLy8gdHJlZSB3aGljaCB3aWxsIGFmZmVjdCB0aGUgdGFpbC4gU28gd2UgbmVlZCB0byB1c2UgdGhlIG5vcm1hbFxuICAgICAgICAgICAgICAgIC8vIHBhdGggdG8gY29tcHV0ZSB0aGUgY29ycmVjdCB0YWlsLlxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgfSAvLyBJZiBub25lIG9mIHRoZSBjaGlsZHJlbiBoYWQgYW55IHdvcmssIHRoYXQgbWVhbnMgdGhhdCBub25lIG9mXG4gICAgICAgICAgICAgIC8vIHRoZW0gZ290IHJldHJpZWQgc28gdGhleSdsbCBzdGlsbCBiZSBibG9ja2VkIGluIHRoZSBzYW1lIHdheVxuICAgICAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgIH0gLy8gSWYgbm90aGluZyBzdXNwZW5kZWQgYmVmb3JlIGFuZCB3ZSdyZSByZW5kZXJpbmcgdGhlIHNhbWUgY2hpbGRyZW4sXG4gICAgICAgICAgICAvLyB0aGVuIHRoZSB0YWlsIGRvZXNuJ3QgbWF0dGVyLiBBbnl0aGluZyBuZXcgdGhhdCBzdXNwZW5kcyB3aWxsIHdvcmtcbiAgICAgICAgICAgIC8vIGluIHRoZSBcInRvZ2V0aGVyXCIgbW9kZSwgc28gd2UgY2FuIGNvbnRpbnVlIGZyb20gdGhlIHN0YXRlIHdlIGhhZC5cblxuXG4gICAgICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gUmVzZXQgdG8gdGhlIFwidG9nZXRoZXJcIiBtb2RlIGluIGNhc2Ugd2UndmUgc3RhcnRlZCBhIGRpZmZlcmVudFxuICAgICAgICAgICAgICAvLyB1cGRhdGUgaW4gdGhlIHBhc3QgYnV0IGRpZG4ndCBjb21wbGV0ZSBpdC5cbiAgICAgICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuXG4gICAgICAgICAgICBpZiAoX2hhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIGNoaWxkcmVuIGhhZCBhbnkgd29yaywgdGhhdCBtZWFucyB0aGF0IG5vbmUgb2ZcbiAgICAgICAgICAgICAgLy8gdGhlbSBnb3QgcmV0cmllZCBzbyB0aGV5J2xsIHN0aWxsIGJlIGJsb2NrZWQgaW4gdGhlIHNhbWUgd2F5XG4gICAgICAgICAgICAgIC8vIGFzIGJlZm9yZS4gV2UgY2FuIGZhc3QgYmFpbCBvdXQuXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gTmVlZCB0byBjaGVjayBpZiB0aGUgdHJlZSBzdGlsbCBuZWVkcyB0byBiZSBkZWZlcnJlZC4gVGhpcyBpc1xuICAgICAgICAgICAgLy8gYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgbG9naWMgdXNlZCBpbiB0aGUgbm9ybWFsIHVwZGF0ZSBwYXRoLFxuICAgICAgICAgICAgLy8gc28gd2UnbGwganVzdCBlbnRlciB0aGF0LiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHdlJ2xsIGJhaWwgb3V0XG4gICAgICAgICAgICAvLyBhdCB0aGUgbmV4dCBsZXZlbCBpbnN0ZWFkIG9mIHRoaXMgb25lLCBiZWNhdXNlIHRoZSBjaGlsZCBwcm9wc1xuICAgICAgICAgICAgLy8gaGF2ZSBub3QgY2hhbmdlZC4gV2hpY2ggaXMgZmluZS5cbiAgICAgICAgICAgIC8vIFRPRE86IFByb2JhYmx5IHNob3VsZCByZWZhY3RvciBgYmVnaW5Xb3JrYCB0byBzcGxpdCB0aGUgYmFpbG91dFxuICAgICAgICAgICAgLy8gcGF0aCBmcm9tIHRoZSBub3JtYWwgcGF0aC4gSSdtIHRlbXB0ZWQgdG8gZG8gYSBsYWJlbGVkIGJyZWFrIGhlcmVcbiAgICAgICAgICAgIC8vIGJ1dCBJIHdvbid0IDopXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoKGN1cnJlbnQuZmxhZ3MgJiBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgb25seSBleGlzdHMgZm9yIGxlZ2FjeSBtb2RlLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkyMTYuXG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgb24gdGhpcyBmaWJlciwgYnV0IHRoZXJlIGFyZSBubyBuZXcgcHJvcHNcbiAgICAgICAgLy8gbm9yIGxlZ2FjeSBjb250ZXh0LiBTZXQgdGhpcyB0byBmYWxzZS4gSWYgYW4gdXBkYXRlIHF1ZXVlIG9yIGNvbnRleHRcbiAgICAgICAgLy8gY29uc3VtZXIgcHJvZHVjZXMgYSBjaGFuZ2VkIHZhbHVlLCBpdCB3aWxsIHNldCB0aGlzIHRvIHRydWUuIE90aGVyd2lzZSxcbiAgICAgICAgLy8gdGhlIGNvbXBvbmVudCB3aWxsIGFzc3VtZSB0aGUgY2hpbGRyZW4gaGF2ZSBub3QgY2hhbmdlZCBhbmQgYmFpbCBvdXQuXG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xuICB9IC8vIEJlZm9yZSBlbnRlcmluZyB0aGUgYmVnaW4gcGhhc2UsIGNsZWFyIHBlbmRpbmcgdXBkYXRlIHByaW9yaXR5LlxuICAvLyBUT0RPOiBUaGlzIGFzc3VtZXMgdGhhdCB3ZSdyZSBhYm91dCB0byBldmFsdWF0ZSB0aGUgY29tcG9uZW50IGFuZCBwcm9jZXNzXG4gIC8vIHRoZSB1cGRhdGUgcXVldWUuIEhvd2V2ZXIsIHRoZXJlJ3MgYW4gZXhjZXB0aW9uOiBTaW1wbGVNZW1vQ29tcG9uZW50XG4gIC8vIHNvbWV0aW1lcyBiYWlscyBvdXQgbGF0ZXIgaW4gdGhlIGJlZ2luIHBoYXNlLiBUaGlzIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZFxuICAvLyBtb3ZlIHRoaXMgYXNzaWdubWVudCBvdXQgb2YgdGhlIGNvbW1vbiBwYXRoIGFuZCBpbnRvIGVhY2ggYnJhbmNoLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzO1xuXG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gbW91bnRJbmRldGVybWluYXRlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy50eXBlLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBlbGVtZW50VHlwZSA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlO1xuICAgICAgICByZXR1cm4gbW91bnRMYXp5Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBlbGVtZW50VHlwZSwgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIHVucmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIHJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudCA/IHVucmVzb2x2ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudCwgdW5yZXNvbHZlZFByb3BzKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudDIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudDIgPyBfdW5yZXNvbHZlZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50MiwgX3VucmVzb2x2ZWRQcm9wcyk7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUNsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfQ29tcG9uZW50MiwgX3Jlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdFJvb3QoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RUZXh0KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHJldHVybiB1cGRhdGVQb3J0YWxDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHtcbiAgICAgICAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczIgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzMiA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSB0eXBlID8gX3VucmVzb2x2ZWRQcm9wczIgOiByZXNvbHZlRGVmYXVsdFByb3BzKHR5cGUsIF91bnJlc29sdmVkUHJvcHMyKTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlRm9yd2FyZFJlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgX3Jlc29sdmVkUHJvcHMyLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIE1vZGU6XG4gICAgICByZXR1cm4gdXBkYXRlTW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHJldHVybiB1cGRhdGVQcm9maWxlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICByZXR1cm4gdXBkYXRlQ29udGV4dFByb3ZpZGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIENvbnRleHRDb25zdW1lcjpcbiAgICAgIHJldHVybiB1cGRhdGVDb250ZXh0Q29uc3VtZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF90eXBlMiA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzMyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wczsgLy8gUmVzb2x2ZSBvdXRlciBwcm9wcyBmaXJzdCwgdGhlbiByZXNvbHZlIGlubmVyIHByb3BzLlxuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczMgPSByZXNvbHZlRGVmYXVsdFByb3BzKF90eXBlMiwgX3VucmVzb2x2ZWRQcm9wczMpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IF90eXBlMi5wcm9wVHlwZXM7XG5cbiAgICAgICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgICAgICBjaGVja1Byb3BUeXBlcyhvdXRlclByb3BUeXBlcywgX3Jlc29sdmVkUHJvcHMzLCAvLyBSZXNvbHZlZCBmb3Igb3V0ZXIgb25seVxuICAgICAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoX3R5cGUyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3Jlc29sdmVkUHJvcHMzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhfdHlwZTIudHlwZSwgX3Jlc29sdmVkUHJvcHMzKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF90eXBlMiwgX3Jlc29sdmVkUHJvcHMzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSwgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50MyA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzNCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHM0ID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQzID8gX3VucmVzb2x2ZWRQcm9wczQgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQzLCBfdW5yZXNvbHZlZFByb3BzNCk7XG5cbiAgICAgICAgcmV0dXJuIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfQ29tcG9uZW50MywgX3Jlc29sdmVkUHJvcHM0LCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlTGVnYWN5SGlkZGVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArIHdvcmtJblByb2dyZXNzLnRhZyArIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSB7XG4gIC8vIFRhZyB0aGUgZmliZXIgd2l0aCBhbiB1cGRhdGUgZWZmZWN0LiBUaGlzIHR1cm5zIGEgUGxhY2VtZW50IGludG9cbiAgLy8gYSBQbGFjZW1lbnRBbmRVcGRhdGUuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKSB7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFJlZjtcbn1cblxudmFyIGFwcGVuZEFsbENoaWxkcmVuO1xudmFyIHVwZGF0ZUhvc3RDb250YWluZXI7XG52YXIgdXBkYXRlSG9zdENvbXBvbmVudCQxO1xudmFyIHVwZGF0ZUhvc3RUZXh0JDE7XG5cbntcbiAgLy8gTXV0YXRpb24gbW9kZVxuICBhcHBlbmRBbGxDaGlsZHJlbiA9IGZ1bmN0aW9uIChwYXJlbnQsIHdvcmtJblByb2dyZXNzLCBuZWVkc1Zpc2liaWxpdHlUb2dnbGUsIGlzSGlkZGVuKSB7XG4gICAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgY3JlYXRlZCBidXQgd2UgbmVlZCByZWN1cnNlIGRvd24gaXRzXG4gICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgIHZhciBub2RlID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICBhcHBlbmRJbml0aWFsQ2hpbGQocGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSA7IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlSG9zdENvbnRhaW5lciA9IGZ1bmN0aW9uICh3b3JrSW5Qcm9ncmVzcykgey8vIE5vb3BcbiAgfTtcblxuICB1cGRhdGVIb3N0Q29tcG9uZW50JDEgPSBmdW5jdGlvbiAoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGFuIGFsdGVybmF0ZSwgdGhhdCBtZWFucyB0aGlzIGlzIGFuIHVwZGF0ZSBhbmQgd2UgbmVlZCB0b1xuICAgIC8vIHNjaGVkdWxlIGEgc2lkZS1lZmZlY3QgdG8gZG8gdGhlIHVwZGF0ZXMuXG4gICAgdmFyIG9sZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuXG4gICAgaWYgKG9sZFByb3BzID09PSBuZXdQcm9wcykge1xuICAgICAgLy8gSW4gbXV0YXRpb24gbW9kZSwgdGhpcyBpcyBzdWZmaWNpZW50IGZvciBhIGJhaWxvdXQgYmVjYXVzZVxuICAgICAgLy8gd2Ugd29uJ3QgdG91Y2ggdGhpcyBub2RlIGV2ZW4gaWYgY2hpbGRyZW4gY2hhbmdlZC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHdlIGdldCB1cGRhdGVkIGJlY2F1c2Ugb25lIG9mIG91ciBjaGlsZHJlbiB1cGRhdGVkLCB3ZSBkb24ndFxuICAgIC8vIGhhdmUgbmV3UHJvcHMgc28gd2UnbGwgaGF2ZSB0byByZXVzZSB0aGVtLlxuICAgIC8vIFRPRE86IFNwbGl0IHRoZSB1cGRhdGUgQVBJIGFzIHNlcGFyYXRlIGZvciB0aGUgcHJvcHMgdnMuIGNoaWxkcmVuLlxuICAgIC8vIEV2ZW4gYmV0dGVyIHdvdWxkIGJlIGlmIGNoaWxkcmVuIHdlcmVuJ3Qgc3BlY2lhbCBjYXNlZCBhdCBhbGwgdGhvLlxuXG5cbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgdmFyIGN1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7IC8vIFRPRE86IEV4cGVyaWVuY2luZyBhbiBlcnJvciB3aGVyZSBvbGRQcm9wcyBpcyBudWxsLiBTdWdnZXN0cyBhIGhvc3RcbiAgICAvLyBjb21wb25lbnQgaXMgaGl0dGluZyB0aGUgcmVzdW1lIHBhdGguIEZpZ3VyZSBvdXQgd2h5LiBQb3NzaWJseVxuICAgIC8vIHJlbGF0ZWQgdG8gYGhpZGRlbmAuXG5cbiAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IHByZXBhcmVVcGRhdGUoaW5zdGFuY2UsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQpOyAvLyBUT0RPOiBUeXBlIHRoaXMgc3BlY2lmaWMgdG8gdGhpcyB0eXBlIG9mIGNvbXBvbmVudC5cblxuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUGF5bG9hZDsgLy8gSWYgdGhlIHVwZGF0ZSBwYXlsb2FkIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgY2hhbmdlIG9yIGlmIHRoZXJlXG4gICAgLy8gaXMgYSBuZXcgcmVmIHdlIG1hcmsgdGhpcyBhcyBhbiB1cGRhdGUuIEFsbCB0aGUgd29yayBpcyBkb25lIGluIGNvbW1pdFdvcmsuXG5cbiAgICBpZiAodXBkYXRlUGF5bG9hZCkge1xuICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZUhvc3RUZXh0JDEgPSBmdW5jdGlvbiAoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgICAvLyBJZiB0aGUgdGV4dCBkaWZmZXJzLCBtYXJrIGl0IGFzIGFuIHVwZGF0ZS4gQWxsIHRoZSB3b3JrIGluIGRvbmUgaW4gY29tbWl0V29yay5cbiAgICBpZiAob2xkVGV4dCAhPT0gbmV3VGV4dCkge1xuICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjaykge1xuICBpZiAoZ2V0SXNIeWRyYXRpbmcoKSkge1xuICAgIC8vIElmIHdlJ3JlIGh5ZHJhdGluZywgd2Ugc2hvdWxkIGNvbnN1bWUgYXMgbWFueSBpdGVtcyBhcyB3ZSBjYW5cbiAgICAvLyBzbyB3ZSBkb24ndCBsZWF2ZSBhbnkgYmVoaW5kLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN3aXRjaCAocmVuZGVyU3RhdGUudGFpbE1vZGUpIHtcbiAgICBjYXNlICdoaWRkZW4nOlxuICAgICAge1xuICAgICAgICAvLyBBbnkgaW5zZXJ0aW9ucyBhdCB0aGUgZW5kIG9mIHRoZSB0YWlsIGxpc3QgYWZ0ZXIgdGhpcyBwb2ludFxuICAgICAgICAvLyBzaG91bGQgYmUgaW52aXNpYmxlLiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBtb3VudGVkIGJvdW5kYXJpZXNcbiAgICAgICAgLy8gYW55dGhpbmcgYmVmb3JlIHRoZW0gYXJlIG5vdCBjb25zaWRlcmVkIGZvciBjb2xsYXBzaW5nLlxuICAgICAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSB3aG9sZSB0YWlsIHRvIGZpbmQgaWZcbiAgICAgICAgLy8gdGhlcmUgYXJlIGFueS5cbiAgICAgICAgdmFyIHRhaWxOb2RlID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgdmFyIGxhc3RUYWlsTm9kZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKHRhaWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHRhaWxOb2RlLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGFzdFRhaWxOb2RlID0gdGFpbE5vZGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGFpbE5vZGUgPSB0YWlsTm9kZS5zaWJsaW5nO1xuICAgICAgICB9IC8vIE5leHQgd2UncmUgc2ltcGx5IGdvaW5nIHRvIGRlbGV0ZSBhbGwgaW5zZXJ0aW9ucyBhZnRlciB0aGVcbiAgICAgICAgLy8gbGFzdCByZW5kZXJlZCBpdGVtLlxuXG5cbiAgICAgICAgaWYgKGxhc3RUYWlsTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEFsbCByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHRhaWwgYXJlIGluc2VydGlvbnMuXG4gICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRGV0YWNoIHRoZSBpbnNlcnRpb24gYWZ0ZXIgdGhlIGxhc3Qgbm9kZSB0aGF0IHdhcyBhbHJlYWR5XG4gICAgICAgICAgLy8gaW5zZXJ0ZWQuXG4gICAgICAgICAgbGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdjb2xsYXBzZWQnOlxuICAgICAge1xuICAgICAgICAvLyBBbnkgaW5zZXJ0aW9ucyBhdCB0aGUgZW5kIG9mIHRoZSB0YWlsIGxpc3QgYWZ0ZXIgdGhpcyBwb2ludFxuICAgICAgICAvLyBzaG91bGQgYmUgaW52aXNpYmxlLiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBtb3VudGVkIGJvdW5kYXJpZXNcbiAgICAgICAgLy8gYW55dGhpbmcgYmVmb3JlIHRoZW0gYXJlIG5vdCBjb25zaWRlcmVkIGZvciBjb2xsYXBzaW5nLlxuICAgICAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSB3aG9sZSB0YWlsIHRvIGZpbmQgaWZcbiAgICAgICAgLy8gdGhlcmUgYXJlIGFueS5cbiAgICAgICAgdmFyIF90YWlsTm9kZSA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgIHZhciBfbGFzdFRhaWxOb2RlID0gbnVsbDtcblxuICAgICAgICB3aGlsZSAoX3RhaWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKF90YWlsTm9kZS5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIF9sYXN0VGFpbE5vZGUgPSBfdGFpbE5vZGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RhaWxOb2RlID0gX3RhaWxOb2RlLnNpYmxpbmc7XG4gICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBzaW1wbHkgZ29pbmcgdG8gZGVsZXRlIGFsbCBpbnNlcnRpb25zIGFmdGVyIHRoZVxuICAgICAgICAvLyBsYXN0IHJlbmRlcmVkIGl0ZW0uXG5cblxuICAgICAgICBpZiAoX2xhc3RUYWlsTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEFsbCByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHRhaWwgYXJlIGluc2VydGlvbnMuXG4gICAgICAgICAgaWYgKCFoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2sgJiYgcmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gV2Ugc3VzcGVuZGVkIGR1cmluZyB0aGUgaGVhZC4gV2Ugd2FudCB0byBzaG93IGF0IGxlYXN0IG9uZVxuICAgICAgICAgICAgLy8gcm93IGF0IHRoZSB0YWlsLiBTbyB3ZSdsbCBrZWVwIG9uIGFuZCBjdXQgb2ZmIHRoZSByZXN0LlxuICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbC5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERldGFjaCB0aGUgaW5zZXJ0aW9uIGFmdGVyIHRoZSBsYXN0IG5vZGUgdGhhdCB3YXMgYWxyZWFkeVxuICAgICAgICAgIC8vIGluc2VydGVkLlxuICAgICAgICAgIF9sYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wbGV0ZVdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgY2FzZSBNb2RlOlxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCk7XG4gICAgICAgIHZhciBmaWJlclJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dCkge1xuICAgICAgICAgIGZpYmVyUm9vdC5jb250ZXh0ID0gZmliZXJSb290LnBlbmRpbmdDb250ZXh0O1xuICAgICAgICAgIGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LmNoaWxkID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaHlkcmF0ZWQsIHBvcCBzbyB0aGF0IHdlIGNhbiBkZWxldGUgYW55IHJlbWFpbmluZyBjaGlsZHJlblxuICAgICAgICAgIC8vIHRoYXQgd2VyZW4ndCBoeWRyYXRlZC5cbiAgICAgICAgICB2YXIgd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAod2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGh5ZHJhdGVkLCB0aGVuIHdlJ2xsIG5lZWQgdG8gc2NoZWR1bGUgYW4gdXBkYXRlIGZvclxuICAgICAgICAgICAgLy8gdGhlIGNvbW1pdCBzaWRlLWVmZmVjdHMgb24gdGhlIHJvb3QuXG4gICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFmaWJlclJvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgICAgLy8gU2NoZWR1bGUgYW4gZWZmZWN0IHRvIGNsZWFyIHRoaXMgY29udGFpbmVyIGF0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjb21taXQuXG4gICAgICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugb2YgUmVhY3QgcmVuZGVyaW5nIGludG8gYSBjb250YWluZXIgd2l0aCBwcmV2aW91cyBjaGlsZHJlbi5cbiAgICAgICAgICAgIC8vIEl0J3MgYWxzbyBzYWZlIHRvIGRvIGZvciB1cGRhdGVzIHRvbywgYmVjYXVzZSBjdXJyZW50LmNoaWxkIHdvdWxkIG9ubHkgYmUgbnVsbFxuICAgICAgICAgICAgLy8gaWYgdGhlIHByZXZpb3VzIHJlbmRlciB3YXMgbnVsbCAoc28gdGhlIHRoZSBjb250YWluZXIgd291bGQgYWxyZWFkeSBiZSBlbXB0eSkuXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIHJvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgIHVwZGF0ZUhvc3RDb21wb25lbnQkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG5cbiAgICAgICAgICBpZiAoY3VycmVudC5yZWYgIT09IHdvcmtJblByb2dyZXNzLnJlZikge1xuICAgICAgICAgICAgbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFuZXdQcm9wcykge1xuICAgICAgICAgICAgaWYgKCEod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHdlIGFib3J0IHdvcmsuXG5cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGN1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7IC8vIFRPRE86IE1vdmUgY3JlYXRlSW5zdGFuY2UgdG8gYmVnaW5Xb3JrIGFuZCBrZWVwIGl0IG9uIGEgY29udGV4dFxuICAgICAgICAgIC8vIFwic3RhY2tcIiBhcyB0aGUgcGFyZW50LiBUaGVuIGFwcGVuZCBjaGlsZHJlbiBhcyB3ZSBnbyBpbiBiZWdpbldvcmtcbiAgICAgICAgICAvLyBvciBjb21wbGV0ZVdvcmsgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Ugd2FudCB0byBhZGQgdGhlbSB0b3AtPmRvd24gb3JcbiAgICAgICAgICAvLyBib3R0b20tPnVwLiBUb3AtPmRvd24gaXMgZmFzdGVyIGluIElFMTEuXG5cbiAgICAgICAgICB2YXIgX3dhc0h5ZHJhdGVkID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKF93YXNIeWRyYXRlZCkge1xuICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIGFuZCBjcmVhdGVJbnN0YW5jZSBzdGVwIGludG8gdGhlIGJlZ2luUGhhc2VcbiAgICAgICAgICAgIC8vIHRvIGNvbnNvbGlkYXRlLlxuICAgICAgICAgICAgaWYgKHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0KSkge1xuICAgICAgICAgICAgICAvLyBJZiBjaGFuZ2VzIHRvIHRoZSBoeWRyYXRlZCBub2RlIG5lZWQgdG8gYmUgYXBwbGllZCBhdCB0aGVcbiAgICAgICAgICAgICAgLy8gY29tbWl0LXBoYXNlIHdlIG1hcmsgdGhpcyBhcyBzdWNoLlxuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gY3JlYXRlSW5zdGFuY2UodHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICBhcHBlbmRBbGxDaGlsZHJlbihpbnN0YW5jZSwgd29ya0luUHJvZ3Jlc3MsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBpbnN0YW5jZTsgLy8gQ2VydGFpbiByZW5kZXJlcnMgcmVxdWlyZSBjb21taXQtdGltZSBlZmZlY3RzIGZvciBpbml0aWFsIG1vdW50LlxuICAgICAgICAgICAgLy8gKGVnIERPTSByZW5kZXJlciBzdXBwb3J0cyBhdXRvLWZvY3VzIGZvciBjZXJ0YWluIGVsZW1lbnRzKS5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBzdWNoIHJlbmRlcmVycyBnZXQgc2NoZWR1bGVkIGZvciBsYXRlciB3b3JrLlxuXG4gICAgICAgICAgICBpZiAoZmluYWxpemVJbml0aWFsQ2hpbGRyZW4oaW5zdGFuY2UsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5yZWYgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcmVmIG9uIGEgaG9zdCBub2RlIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBjYWxsYmFja1xuICAgICAgICAgICAgbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIHZhciBuZXdUZXh0ID0gbmV3UHJvcHM7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgJiYgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9IG51bGwpIHtcbiAgICAgICAgICB2YXIgb2xkVGV4dCA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wczsgLy8gSWYgd2UgaGF2ZSBhbiBhbHRlcm5hdGUsIHRoYXQgbWVhbnMgdGhpcyBpcyBhbiB1cGRhdGUgYW5kIHdlIG5lZWRcbiAgICAgICAgICAvLyB0byBzY2hlZHVsZSBhIHNpZGUtZWZmZWN0IHRvIGRvIHRoZSB1cGRhdGVzLlxuXG4gICAgICAgICAgdXBkYXRlSG9zdFRleHQkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgb2xkVGV4dCwgbmV3VGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXdUZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKCEod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHdlIGFib3J0IHdvcmsuXG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3Jvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG5cbiAgICAgICAgICB2YXIgX2N1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7XG5cbiAgICAgICAgICB2YXIgX3dhc0h5ZHJhdGVkMiA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmIChfd2FzSHlkcmF0ZWQyKSB7XG4gICAgICAgICAgICBpZiAocHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjcmVhdGVUZXh0SW5zdGFuY2UobmV3VGV4dCwgX3Jvb3RDb250YWluZXJJbnN0YW5jZSwgX2N1cnJlbnRIb3N0Q29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgLy8gU29tZXRoaW5nIHN1c3BlbmRlZC4gUmUtcmVuZGVyIHdpdGggdGhlIGZhbGxiYWNrIGNoaWxkcmVuLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXM7IC8vIERvIG5vdCByZXNldCB0aGUgZWZmZWN0IGxpc3QuXG5cbiAgICAgICAgICBpZiAoICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuZXh0RGlkVGltZW91dCA9IG5leHRTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgdmFyIHByZXZEaWRUaW1lb3V0ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy5mYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgcHJldkRpZFRpbWVvdXQgPSBwcmV2U3RhdGUgIT09IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dERpZFRpbWVvdXQgJiYgIXByZXZEaWRUaW1lb3V0KSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBzdWJ0cmVlZSBpcyBydW5uaW5nIGluIGJsb2NraW5nIG1vZGUgd2UgY2FuIHN1c3BlbmQsXG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIHdvbid0IHN1c3BlbmQuXG4gICAgICAgICAgLy8gVE9ETzogVGhpcyB3aWxsIHN0aWxsIHN1c3BlbmQgYSBzeW5jaHJvbm91cyB0cmVlIGlmIGFueXRoaW5nXG4gICAgICAgICAgLy8gaW4gdGhlIGNvbmN1cnJlbnQgdHJlZSBhbHJlYWR5IHN1c3BlbmRlZCBkdXJpbmcgdGhpcyByZW5kZXIuXG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGtub3duIGJ1Zy5cbiAgICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBiYWNrIHRvIHRocm93RXhjZXB0aW9uIGJlY2F1c2UgdGhpcyBpcyB0b28gbGF0ZVxuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIGxhcmdlIHRyZWUgd2hpY2ggaXMgY29tbW9uIGZvciBpbml0aWFsIGxvYWRzLiBXZVxuICAgICAgICAgICAgLy8gZG9uJ3Qga25vdyBpZiB3ZSBzaG91bGQgcmVzdGFydCBhIHJlbmRlciBvciBub3QgdW50aWwgd2UgZ2V0XG4gICAgICAgICAgICAvLyB0aGlzIG1hcmtlciwgYW5kIHRoaXMgaXMgdG9vIGxhdGUuXG4gICAgICAgICAgICAvLyBJZiB0aGlzIHJlbmRlciBhbHJlYWR5IGhhZCBhIHBpbmcgb3IgbG93ZXIgcHJpIHVwZGF0ZXMsXG4gICAgICAgICAgICAvLyBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSBrbm93IHdlJ3JlIGdvaW5nIHRvIHN1c3BlbmQgd2VcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSBhYmxlIHRvIGltbWVkaWF0ZWx5IHJlc3RhcnQgZnJvbSB3aXRoaW4gdGhyb3dFeGNlcHRpb24uXG4gICAgICAgICAgICB2YXIgaGFzSW52aXNpYmxlQ2hpbGRDb250ZXh0ID0gY3VycmVudCA9PT0gbnVsbCAmJiB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrICE9PSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoaGFzSW52aXNpYmxlQ2hpbGRDb250ZXh0IHx8IGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhpcyB3YXMgaW4gYW4gaW52aXNpYmxlIHRyZWUgb3IgYSBuZXcgcmVuZGVyLCB0aGVuIHNob3dpbmdcbiAgICAgICAgICAgICAgLy8gdGhpcyBib3VuZGFyeSBpcyBvay5cbiAgICAgICAgICAgICAgcmVuZGVyRGlkU3VzcGVuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSdyZSBnb2luZyB0byBoYXZlIHRvIGhpZGUgY29udGVudCBzbyB3ZSBzaG91bGRcbiAgICAgICAgICAgICAgLy8gc3VzcGVuZCBmb3IgbG9uZ2VyIGlmIHBvc3NpYmxlLlxuICAgICAgICAgICAgICByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIC8vIFRPRE86IE9ubHkgc2NoZWR1bGUgdXBkYXRlcyBpZiB0aGVzZSB2YWx1ZXMgYXJlIG5vbiBlcXVhbCwgaS5lLiBpdCBjaGFuZ2VkLlxuICAgICAgICAgIGlmIChuZXh0RGlkVGltZW91dCB8fCBwcmV2RGlkVGltZW91dCkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBib3VuZGFyeSBqdXN0IHRpbWVkIG91dCwgc2NoZWR1bGUgYW4gZWZmZWN0IHRvIGF0dGFjaCBhXG4gICAgICAgICAgICAvLyByZXRyeSBsaXN0ZW5lciB0byB0aGUgcHJvbWlzZS4gVGhpcyBmbGFnIGlzIGFsc28gdXNlZCB0byBoaWRlIHRoZVxuICAgICAgICAgICAgLy8gcHJpbWFyeSBjaGlsZHJlbi4gSW4gbXV0YXRpb24gbW9kZSwgd2UgYWxzbyBuZWVkIHRoZSBmbGFnIHRvXG4gICAgICAgICAgICAvLyAqdW5oaWRlKiBjaGlsZHJlbiB0aGF0IHdlcmUgcHJldmlvdXNseSBoaWRkZW4sIHNvIGNoZWNrIGlmIHRoaXNcbiAgICAgICAgICAgIC8vIGlzIGN1cnJlbnRseSB0aW1lZCBvdXQsIHRvby5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgdXBkYXRlSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIHByZXBhcmVQb3J0YWxNb3VudCh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICAvLyBQb3AgcHJvdmlkZXIgZmliZXJcbiAgICAgIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIFNhbWUgYXMgY2xhc3MgY29tcG9uZW50IGNhc2UuIEkgcHV0IGl0IGRvd24gaGVyZSBzbyB0aGF0IHRoZSB0YWdzIGFyZVxuICAgICAgICAvLyBzZXF1ZW50aWFsIHRvIGVuc3VyZSB0aGlzIHN3aXRjaCBpcyBjb21waWxlZCB0byBhIGp1bXAgdGFibGUuXG4gICAgICAgIHZhciBfQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoX0NvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgaWYgKHJlbmRlclN0YXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UncmUgcnVubmluZyBpbiB0aGUgZGVmYXVsdCwgXCJpbmRlcGVuZGVudFwiIG1vZGUuXG4gICAgICAgICAgLy8gV2UgZG9uJ3QgZG8gYW55dGhpbmcgaW4gdGhpcyBtb2RlLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRpZFN1c3BlbmRBbHJlYWR5ID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG4gICAgICAgIHZhciByZW5kZXJlZFRhaWwgPSByZW5kZXJTdGF0ZS5yZW5kZXJpbmc7XG5cbiAgICAgICAgaWYgKHJlbmRlcmVkVGFpbCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIGp1c3QgcmVuZGVyZWQgdGhlIGhlYWQuXG4gICAgICAgICAgaWYgKCFkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgcGFzcy4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGFueXRoaW5nIGlzIHN0aWxsXG4gICAgICAgICAgICAvLyBzdXNwZW5kZWQgaW4gdGhlIHJlbmRlcmVkIHNldC5cbiAgICAgICAgICAgIC8vIElmIG5ldyBjb250ZW50IHVuc3VzcGVuZGVkLCBidXQgdGhlcmUncyBzdGlsbCBzb21lIGNvbnRlbnQgdGhhdFxuICAgICAgICAgICAgLy8gZGlkbid0LiBUaGVuIHdlIG5lZWQgdG8gZG8gYSBzZWNvbmQgcGFzcyB0aGF0IGZvcmNlcyBldmVyeXRoaW5nXG4gICAgICAgICAgICAvLyB0byBrZWVwIHNob3dpbmcgdGhlaXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgLy8gV2UgbWlnaHQgYmUgc3VzcGVuZGVkIGlmIHNvbWV0aGluZyBpbiB0aGlzIHJlbmRlciBwYXNzIHN1c3BlbmRlZCwgb3JcbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBpbiB0aGUgcHJldmlvdXMgY29tbWl0dGVkIHBhc3Mgc3VzcGVuZGVkLiBPdGhlcndpc2UsXG4gICAgICAgICAgICAvLyB0aGVyZSdzIG5vIGNoYW5jZSBzbyB3ZSBjYW4gc2tpcCB0aGUgZXhwZW5zaXZlIGNhbGwgdG9cbiAgICAgICAgICAgIC8vIGZpbmRGaXJzdFN1c3BlbmRlZC5cbiAgICAgICAgICAgIHZhciBjYW5ub3RCZVN1c3BlbmRlZCA9IHJlbmRlckhhc05vdFN1c3BlbmRlZFlldCgpICYmIChjdXJyZW50ID09PSBudWxsIHx8IChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MpO1xuXG4gICAgICAgICAgICBpZiAoIWNhbm5vdEJlU3VzcGVuZGVkKSB7XG4gICAgICAgICAgICAgIHZhciByb3cgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgICAgICAgICAgICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN1c3BlbmRlZCA9IGZpbmRGaXJzdFN1c3BlbmRlZChyb3cpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN1c3BlbmRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBJZiB0aGlzIGlzIGEgbmV3bHkgc3VzcGVuZGVkIHRyZWUsIGl0IG1pZ2h0IG5vdCBnZXQgY29tbWl0dGVkIGFzXG4gICAgICAgICAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSBzZWNvbmQgcGFzcy4gSW4gdGhhdCBjYXNlIG5vdGhpbmcgd2lsbCBzdWJzY3JpYmUgdG9cbiAgICAgICAgICAgICAgICAgIC8vIGl0cyB0aGVubmFibGVzLiBJbnN0ZWFkLCB3ZSdsbCB0cmFuc2ZlciBpdHMgdGhlbm5hYmxlcyB0byB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIFN1c3BlbnNlTGlzdCBzbyB0aGF0IGl0IGNhbiByZXRyeSBpZiB0aGV5IHJlc29sdmUuXG4gICAgICAgICAgICAgICAgICAvLyBUaGVyZSBtaWdodCBiZSBtdWx0aXBsZSBvZiB0aGVzZSBpbiB0aGUgbGlzdCBidXQgc2luY2Ugd2UncmVcbiAgICAgICAgICAgICAgICAgIC8vIGdvaW5nIHRvIHdhaXQgZm9yIGFsbCBvZiB0aGVtIGFueXdheSwgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyXG4gICAgICAgICAgICAgICAgICAvLyB3aGljaCBvbmVzIGdldHMgdG8gcGluZy4gSW4gdGhlb3J5IHdlIGNvdWxkIGdldCBjbGV2ZXIgYW5kIGtlZXBcbiAgICAgICAgICAgICAgICAgIC8vIHRyYWNrIG9mIGhvdyBtYW55IGRlcGVuZGVuY2llcyByZW1haW4gYnV0IGl0IGdldHMgdHJpY2t5IGJlY2F1c2VcbiAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBtZWFudGltZSwgd2UgY2FuIGFkZC9yZW1vdmUvY2hhbmdlIGl0ZW1zIGFuZCBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICAgICAgICAvLyBXZSBtaWdodCBiYWlsIG91dCBvZiB0aGUgbG9vcCBiZWZvcmUgZmluZGluZyBhbnkgYnV0IHRoYXRcbiAgICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3QgbWF0dGVyIHNpbmNlIHRoYXQgbWVhbnMgdGhhdCB0aGUgb3RoZXIgYm91bmRhcmllcyB0aGF0XG4gICAgICAgICAgICAgICAgICAvLyB3ZSBkaWQgZmluZCBhbHJlYWR5IGhhcyB0aGVpciBsaXN0ZW5lcnMgYXR0YWNoZWQuXG5cbiAgICAgICAgICAgICAgICAgIHZhciBuZXdUaGVubmFibGVzID0gc3VzcGVuZGVkLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICAgICAgICBpZiAobmV3VGhlbm5hYmxlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG5ld1RoZW5uYWJsZXM7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICAgICAgICAgIH0gLy8gUmVyZW5kZXIgdGhlIHdob2xlIGxpc3QsIGJ1dCB0aGlzIHRpbWUsIHdlJ2xsIGZvcmNlIGZhbGxiYWNrc1xuICAgICAgICAgICAgICAgICAgLy8gdG8gc3RheSBpbiBwbGFjZS5cbiAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgbGlzdCBiZWZvcmUgZG9pbmcgdGhlIHNlY29uZCBwYXNzIHNpbmNlIHRoYXQncyBub3cgaW52YWxpZC5cblxuXG4gICAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0OyAvLyBSZXNldCB0aGUgY2hpbGQgZmliZXJzIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlLlxuXG4gICAgICAgICAgICAgICAgICByZXNldENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7IC8vIFNldCB1cCB0aGUgU3VzcGVuc2UgQ29udGV4dCB0byBmb3JjZSBzdXNwZW5zZSBhbmQgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgICAgICAgIC8vIHJlcmVuZGVyIHRoZSBjaGlsZHJlbi5cblxuICAgICAgICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjaykpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJvdyA9IHJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsICYmIG5vdygpID4gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBwYXNzZWQgb3VyIENQVSBkZWFkbGluZSBidXQgd2Ugc3RpbGwgaGF2ZSByb3dzXG4gICAgICAgICAgICAgIC8vIGxlZnQgaW4gdGhlIHRhaWwuIFdlJ2xsIGp1c3QgZ2l2ZSB1cCBmdXJ0aGVyIGF0dGVtcHRzIHRvIHJlbmRlclxuICAgICAgICAgICAgICAvLyB0aGUgbWFpbiBjb250ZW50IGFuZCBvbmx5IHJlbmRlciBmYWxsYmFja3MuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzXG4gICAgICAgICAgICAgIC8vIHRvIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtc1xuICAgICAgICAgICAgICAvLyBvZiBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsXG4gICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhc1xuICAgICAgICAgICAgICAvLyBjb21taXR0ZWQuIElmIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZVxuICAgICAgICAgICAgICAvLyBwYWludGVkLiBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuXG4gICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW55IFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nXG4gICAgICAgICAgICAgIC8vIHNpbmNlIHdlJ3JlIGxlYXZpbmcgaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcmtTcGF3bmVkV29yayhTb21lUmV0cnlMYW5lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTtcbiAgICAgICAgICB9IC8vIE5leHQgd2UncmUgZ29pbmcgdG8gcmVuZGVyIHRoZSB0YWlsLlxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQXBwZW5kIHRoZSByZW5kZXJlZCByb3cgdG8gdGhlIGNoaWxkIGxpc3QuXG4gICAgICAgICAgaWYgKCFkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgdmFyIF9zdXNwZW5kZWQgPSBmaW5kRmlyc3RTdXNwZW5kZWQocmVuZGVyZWRUYWlsKTtcblxuICAgICAgICAgICAgaWYgKF9zdXNwZW5kZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlOyAvLyBFbnN1cmUgd2UgdHJhbnNmZXIgdGhlIHVwZGF0ZSBxdWV1ZSB0byB0aGUgcGFyZW50IHNvIHRoYXQgaXQgZG9lc24ndFxuICAgICAgICAgICAgICAvLyBnZXQgbG9zdCBpZiB0aGlzIHJvdyBlbmRzIHVwIGRyb3BwZWQgZHVyaW5nIGEgc2Vjb25kIHBhc3MuXG5cbiAgICAgICAgICAgICAgdmFyIF9uZXdUaGVubmFibGVzID0gX3N1c3BlbmRlZC51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgICBpZiAoX25ld1RoZW5uYWJsZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IF9uZXdUaGVubmFibGVzO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgdHJ1ZSk7IC8vIFRoaXMgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkLlxuXG4gICAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsID09PSBudWxsICYmIHJlbmRlclN0YXRlLnRhaWxNb2RlID09PSAnaGlkZGVuJyAmJiAhcmVuZGVyZWRUYWlsLmFsdGVybmF0ZSAmJiAhZ2V0SXNIeWRyYXRpbmcoKSAvLyBXZSBkb24ndCBjdXQgaXQgaWYgd2UncmUgaHlkcmF0aW5nLlxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZGVsZXRlIHRoZSByb3cgd2UganVzdCByZW5kZXJlZC5cbiAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgbGlzdCB0byB3aGF0IGl0IHdhcyBiZWZvcmUgd2UgcmVuZGVyZWQgdGhpc1xuICAgICAgICAgICAgICAgICAgLy8gY2hpbGQuIFRoZSBuZXN0ZWQgY2hpbGRyZW4gaGF2ZSBhbHJlYWR5IGFwcGVuZGVkIHRoZW1zZWx2ZXMuXG4gICAgICAgICAgICAgICAgICB2YXIgbGFzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0OyAvLyBSZW1vdmUgYW55IGVmZmVjdHMgdGhhdCB3ZXJlIGFwcGVuZGVkIGFmdGVyIHRoaXMgcG9pbnQuXG5cbiAgICAgICAgICAgICAgICAgIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICB9IC8vIFdlJ3JlIGRvbmUuXG5cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICggLy8gVGhlIHRpbWUgaXQgdG9vayB0byByZW5kZXIgbGFzdCByb3cgaXMgZ3JlYXRlciB0aGFuIHRoZSByZW1haW5pbmdcbiAgICAgICAgICAgIC8vIHRpbWUgd2UgaGF2ZSB0byByZW5kZXIuIFNvIHJlbmRlcmluZyBvbmUgbW9yZSByb3cgd291bGQgbGlrZWx5XG4gICAgICAgICAgICAvLyBleGNlZWQgaXQuXG4gICAgICAgICAgICBub3coKSAqIDIgLSByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkgJiYgcmVuZGVyTGFuZXMgIT09IE9mZnNjcmVlbkxhbmUpIHtcbiAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBub3cgcGFzc2VkIG91ciBDUFUgZGVhZGxpbmUgYW5kIHdlJ2xsIGp1c3QgZ2l2ZSB1cCBmdXJ0aGVyXG4gICAgICAgICAgICAgIC8vIGF0dGVtcHRzIHRvIHJlbmRlciB0aGUgbWFpbiBjb250ZW50IGFuZCBvbmx5IHJlbmRlciBmYWxsYmFja3MuXG4gICAgICAgICAgICAgIC8vIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpcyB1c3VhbGx5IGZhc3Rlci5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gU2luY2Ugbm90aGluZyBhY3R1YWxseSBzdXNwZW5kZWQsIHRoZXJlIHdpbGwgbm90aGluZyB0byBwaW5nIHRoaXNcbiAgICAgICAgICAgICAgLy8gdG8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zXG4gICAgICAgICAgICAgIC8vIG9mIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlcixcbiAgICAgICAgICAgICAgLy8gaXQncyBub3QgcGFydCBvZiB0aGUgc2FtZSB0cmFuc2l0aW9uIG9uY2UgdGhlIHRyYW5zaXRpb24gaGFzXG4gICAgICAgICAgICAgIC8vIGNvbW1pdHRlZC4gSWYgaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlXG4gICAgICAgICAgICAgIC8vIHBhaW50ZWQuIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy5cbiAgICAgICAgICAgICAgLy8gV2UgY2FuIHVzZSBhbnkgUmV0cnlMYW5lIGV2ZW4gaWYgaXQncyB0aGUgb25lIGN1cnJlbnRseSByZW5kZXJpbmdcbiAgICAgICAgICAgICAgLy8gc2luY2Ugd2UncmUgbGVhdmluZyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcblxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFya1NwYXduZWRXb3JrKFNvbWVSZXRyeUxhbmUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlbmRlclN0YXRlLmlzQmFja3dhcmRzKSB7XG4gICAgICAgICAgICAvLyBUaGUgZWZmZWN0IGxpc3Qgb2YgdGhlIGJhY2t3YXJkcyB0YWlsIHdpbGwgaGF2ZSBiZWVuIGFkZGVkXG4gICAgICAgICAgICAvLyB0byB0aGUgZW5kLiBUaGlzIGJyZWFrcyB0aGUgZ3VhcmFudGVlIHRoYXQgbGlmZS1jeWNsZXMgZmlyZSBpblxuICAgICAgICAgICAgLy8gc2libGluZyBvcmRlciBidXQgdGhhdCBpc24ndCBhIHN0cm9uZyBndWFyYW50ZWUgcHJvbWlzZWQgYnkgUmVhY3QuXG4gICAgICAgICAgICAvLyBFc3BlY2lhbGx5IHNpbmNlIHRoZXNlIG1pZ2h0IGFsc28ganVzdCBwb3AgaW4gZHVyaW5nIGZ1dHVyZSBjb21taXRzLlxuICAgICAgICAgICAgLy8gQXBwZW5kIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QuXG4gICAgICAgICAgICByZW5kZXJlZFRhaWwuc2libGluZyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwcmV2aW91c1NpYmxpbmcgPSByZW5kZXJTdGF0ZS5sYXN0O1xuXG4gICAgICAgICAgICBpZiAocHJldmlvdXNTaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHByZXZpb3VzU2libGluZy5zaWJsaW5nID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlclN0YXRlLmxhc3QgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBzdGlsbCBoYXZlIHRhaWwgcm93cyB0byByZW5kZXIuXG4gICAgICAgICAgLy8gUG9wIGEgcm93LlxuICAgICAgICAgIHZhciBuZXh0ID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBuZXh0O1xuICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBuZXh0LnNpYmxpbmc7XG4gICAgICAgICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3Q7XG4gICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID0gbm93KCk7XG4gICAgICAgICAgbmV4dC5zaWJsaW5nID0gbnVsbDsgLy8gUmVzdG9yZSB0aGUgY29udGV4dC5cbiAgICAgICAgICAvLyBUT0RPOiBXZSBjYW4gcHJvYmFibHkganVzdCBhdm9pZCBwb3BwaW5nIGl0IGluc3RlYWQgYW5kIG9ubHlcbiAgICAgICAgICAvLyBzZXR0aW5nIGl0IHRoZSBmaXJzdCB0aW1lIHdlIGdvIGZyb20gbm90IHN1c3BlbmRlZCB0byBzdXNwZW5kZWQuXG5cbiAgICAgICAgICB2YXIgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuXG4gICAgICAgICAgaWYgKGRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpOyAvLyBEbyBhIHBhc3Mgb3ZlciB0aGUgbmV4dCByb3cuXG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEJsb2NrOlxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX25leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIF9wcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIHByZXZJc0hpZGRlbiA9IF9wcmV2U3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgdmFyIG5leHRJc0hpZGRlbiA9IF9uZXh0U3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICBpZiAocHJldklzSGlkZGVuICE9PSBuZXh0SXNIaWRkZW4gJiYgbmV3UHJvcHMubW9kZSAhPT0gJ3Vuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nJykge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gdW5pdCBvZiB3b3JrIHRhZyAoXCIgKyB3b3JrSW5Qcm9ncmVzcy50YWcgKyBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW53aW5kV29yayh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZsYWdzID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG5cbiAgICAgICAgaWYgKGZsYWdzICYgU2hvdWxkQ2FwdHVyZSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG5cbiAgICAgICAgICBpZiAoICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpO1xuICAgICAgICB2YXIgX2ZsYWdzID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG5cbiAgICAgICAgaWYgKCEoKF9mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoZSByb290IGZhaWxlZCB0byB1bm1vdW50IGFmdGVyIGFuIGVycm9yLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IF9mbGFncyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcbiAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiBwb3BIeWRyYXRpb25TdGF0ZVxuICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICB2YXIgX2ZsYWdzMiA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmIChfZmxhZ3MyICYgU2hvdWxkQ2FwdHVyZSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gX2ZsYWdzMiAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTsgLy8gQ2FwdHVyZWQgYSBzdXNwZW5zZSBlZmZlY3QuIFJlLXJlbmRlciB0aGUgYm91bmRhcnkuXG5cbiAgICAgICAgICBpZiAoICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7IC8vIFN1c3BlbnNlTGlzdCBkb2Vzbid0IGFjdHVhbGx5IGNhdGNoIGFueXRoaW5nLiBJdCBzaG91bGQndmUgYmVlblxuICAgICAgICAvLyBjYXVnaHQgYnkgYSBuZXN0ZWQgYm91bmRhcnkuIElmIG5vdCwgaXQgc2hvdWxkIGJ1YmJsZSB0aHJvdWdoLlxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcG9wUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHBvcFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVud2luZEludGVycnVwdGVkV29yayhpbnRlcnJ1cHRlZFdvcmspIHtcbiAgc3dpdGNoIChpbnRlcnJ1cHRlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gaW50ZXJydXB0ZWRXb3JrLnR5cGUuY2hpbGRDb250ZXh0VHlwZXM7XG5cbiAgICAgICAgaWYgKGNoaWxkQ29udGV4dFR5cGVzICE9PSBudWxsICYmIGNoaWxkQ29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICBwb3BTdXNwZW5zZUNvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICBwb3BTdXNwZW5zZUNvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICBwb3BQcm92aWRlcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHBvcFJlbmRlckxhbmVzKGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDYXB0dXJlZFZhbHVlKHZhbHVlLCBzb3VyY2UpIHtcbiAgLy8gSWYgdGhlIHZhbHVlIGlzIGFuIGVycm9yLCBjYWxsIHRoaXMgZnVuY3Rpb24gaW1tZWRpYXRlbHkgYWZ0ZXIgaXQgaXMgdGhyb3duXG4gIC8vIHNvIHRoZSBzdGFjayBpcyBhY2N1cmF0ZS5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3RhY2s6IGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChzb3VyY2UpXG4gIH07XG59XG5cbi8vIFRoaXMgbW9kdWxlIGlzIGZvcmtlZCBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLlxuLy8gQnkgZGVmYXVsdCwgcmV0dXJuIGB0cnVlYCB0byBsb2cgZXJyb3JzIHRvIHRoZSBjb25zb2xlLlxuLy8gRm9ya3MgY2FuIHJldHVybiBgZmFsc2VgIGlmIHRoaXMgaXNuJ3QgZGVzaXJhYmxlLlxuZnVuY3Rpb24gc2hvd0Vycm9yRGlhbG9nKGJvdW5kYXJ5LCBlcnJvckluZm8pIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGxvZ0NhcHR1cmVkRXJyb3IoYm91bmRhcnksIGVycm9ySW5mbykge1xuICB0cnkge1xuICAgIHZhciBsb2dFcnJvciA9IHNob3dFcnJvckRpYWxvZyhib3VuZGFyeSwgZXJyb3JJbmZvKTsgLy8gQWxsb3cgaW5qZWN0ZWQgc2hvd0Vycm9yRGlhbG9nKCkgdG8gcHJldmVudCBkZWZhdWx0IGNvbnNvbGUuZXJyb3IgbG9nZ2luZy5cbiAgICAvLyBUaGlzIGVuYWJsZXMgcmVuZGVyZXJzIGxpa2UgUmVhY3ROYXRpdmUgdG8gYmV0dGVyIG1hbmFnZSByZWRib3ggYmVoYXZpb3IuXG5cbiAgICBpZiAobG9nRXJyb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgaWYgKHRydWUpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBlcnJvckluZm8uc291cmNlO1xuICAgICAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICAgICAgdmFyIGNvbXBvbmVudFN0YWNrID0gc3RhY2sgIT09IG51bGwgPyBzdGFjayA6ICcnOyAvLyBCcm93c2VycyBzdXBwb3J0IHNpbGVuY2luZyB1bmNhdWdodCBlcnJvcnMgYnkgY2FsbGluZ1xuICAgICAgLy8gYHByZXZlbnREZWZhdWx0KClgIGluIHdpbmRvdyBgZXJyb3JgIGhhbmRsZXIuXG4gICAgICAvLyBXZSByZWNvcmQgdGhpcyBpbmZvcm1hdGlvbiBhcyBhbiBleHBhbmRvIG9uIHRoZSBlcnJvci5cblxuICAgICAgaWYgKGVycm9yICE9IG51bGwgJiYgZXJyb3IuX3N1cHByZXNzTG9nZ2luZykge1xuICAgICAgICBpZiAoYm91bmRhcnkudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgIC8vIFRoZSBlcnJvciBpcyByZWNvdmVyYWJsZSBhbmQgd2FzIHNpbGVuY2VkLlxuICAgICAgICAgIC8vIElnbm9yZSBpdCBhbmQgZG9uJ3QgcHJpbnQgdGhlIHN0YWNrIGFkZGVuZHVtLlxuICAgICAgICAgIC8vIFRoaXMgaXMgaGFuZHkgZm9yIHRlc3RpbmcgZXJyb3IgYm91bmRhcmllcyB3aXRob3V0IG5vaXNlLlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBUaGUgZXJyb3IgaXMgZmF0YWwuIFNpbmNlIHRoZSBzaWxlbmNpbmcgbWlnaHQgaGF2ZVxuICAgICAgICAvLyBiZWVuIGFjY2lkZW50YWwsIHdlJ2xsIHN1cmZhY2UgaXQgYW55d2F5LlxuICAgICAgICAvLyBIb3dldmVyLCB0aGUgYnJvd3NlciB3b3VsZCBoYXZlIHNpbGVuY2VkIHRoZSBvcmlnaW5hbCBlcnJvclxuICAgICAgICAvLyBzbyB3ZSdsbCBwcmludCBpdCBmaXJzdCwgYW5kIHRoZW4gcHJpbnQgdGhlIHN0YWNrIGFkZGVuZHVtLlxuXG5cbiAgICAgICAgY29uc29sZVsnZXJyb3InXShlcnJvcik7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgICAgICAvLyBGb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoaXMgYmxvY2ssIHNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTMzODRcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBzb3VyY2UgPyBnZXRDb21wb25lbnROYW1lKHNvdXJjZS50eXBlKSA6IG51bGw7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZU1lc3NhZ2UgPSBjb21wb25lbnROYW1lID8gXCJUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gdGhlIDxcIiArIGNvbXBvbmVudE5hbWUgKyBcIj4gY29tcG9uZW50OlwiIDogJ1RoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiBvbmUgb2YgeW91ciBSZWFjdCBjb21wb25lbnRzOic7XG4gICAgICB2YXIgZXJyb3JCb3VuZGFyeU1lc3NhZ2U7XG4gICAgICB2YXIgZXJyb3JCb3VuZGFyeU5hbWUgPSBnZXRDb21wb25lbnROYW1lKGJvdW5kYXJ5LnR5cGUpO1xuXG4gICAgICBpZiAoZXJyb3JCb3VuZGFyeU5hbWUpIHtcbiAgICAgICAgZXJyb3JCb3VuZGFyeU1lc3NhZ2UgPSBcIlJlYWN0IHdpbGwgdHJ5IHRvIHJlY3JlYXRlIHRoaXMgY29tcG9uZW50IHRyZWUgZnJvbSBzY3JhdGNoIFwiICsgKFwidXNpbmcgdGhlIGVycm9yIGJvdW5kYXJ5IHlvdSBwcm92aWRlZCwgXCIgKyBlcnJvckJvdW5kYXJ5TmFtZSArIFwiLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yQm91bmRhcnlNZXNzYWdlID0gJ0NvbnNpZGVyIGFkZGluZyBhbiBlcnJvciBib3VuZGFyeSB0byB5b3VyIHRyZWUgdG8gY3VzdG9taXplIGVycm9yIGhhbmRsaW5nIGJlaGF2aW9yLlxcbicgKyAnVmlzaXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Vycm9yLWJvdW5kYXJpZXMgdG8gbGVhcm4gbW9yZSBhYm91dCBlcnJvciBib3VuZGFyaWVzLic7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21iaW5lZE1lc3NhZ2UgPSBjb21wb25lbnROYW1lTWVzc2FnZSArIFwiXFxuXCIgKyBjb21wb25lbnRTdGFjayArIFwiXFxuXFxuXCIgKyAoXCJcIiArIGVycm9yQm91bmRhcnlNZXNzYWdlKTsgLy8gSW4gZGV2ZWxvcG1lbnQsIHdlIHByb3ZpZGUgb3VyIG93biBtZXNzYWdlIHdpdGgganVzdCB0aGUgY29tcG9uZW50IHN0YWNrLlxuICAgICAgLy8gV2UgZG9uJ3QgaW5jbHVkZSB0aGUgb3JpZ2luYWwgZXJyb3IgbWVzc2FnZSBhbmQgSlMgc3RhY2sgYmVjYXVzZSB0aGUgYnJvd3NlclxuICAgICAgLy8gaGFzIGFscmVhZHkgcHJpbnRlZCBpdC4gRXZlbiBpZiB0aGUgYXBwbGljYXRpb24gc3dhbGxvd3MgdGhlIGVycm9yLCBpdCBpcyBzdGlsbFxuICAgICAgLy8gZGlzcGxheWVkIGJ5IHRoZSBicm93c2VyIHRoYW5rcyB0byB0aGUgREVWLW9ubHkgZmFrZSBldmVudCB0cmljayBpbiBSZWFjdEVycm9yVXRpbHMuXG5cbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oY29tYmluZWRNZXNzYWdlKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluIHByb2R1Y3Rpb24sIHdlIHByaW50IHRoZSBlcnJvciBkaXJlY3RseS5cbiAgICAgIC8vIFRoaXMgd2lsbCBpbmNsdWRlIHRoZSBtZXNzYWdlLCB0aGUgSlMgc3RhY2ssIGFuZCBhbnl0aGluZyB0aGUgYnJvd3NlciB3YW50cyB0byBzaG93LlxuICAgICAgLy8gV2UgcGFzcyB0aGUgZXJyb3Igb2JqZWN0IGluc3RlYWQgb2YgY3VzdG9tIG1lc3NhZ2Ugc28gdGhhdCB0aGUgYnJvd3NlciBkaXNwbGF5cyB0aGUgZXJyb3IgbmF0aXZlbHkuXG4gICAgICBjb25zb2xlWydlcnJvciddKGVycm9yKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVGhpcyBtZXRob2QgbXVzdCBub3QgdGhyb3csIG9yIFJlYWN0IGludGVybmFsIHN0YXRlIHdpbGwgZ2V0IG1lc3NlZCB1cC5cbiAgICAvLyBJZiBjb25zb2xlLmVycm9yIGlzIG92ZXJyaWRkZW4sIG9yIGxvZ0NhcHR1cmVkRXJyb3IoKSBzaG93cyBhIGRpYWxvZyB0aGF0IHRocm93cyxcbiAgICAvLyB3ZSB3YW50IHRvIHJlcG9ydCB0aGlzIGVycm9yIG91dHNpZGUgb2YgdGhlIG5vcm1hbCBzdGFjayBhcyBhIGxhc3QgcmVzb3J0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTMxODhcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIFBvc3NpYmx5V2Vha01hcCQxID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuXG5mdW5jdGlvbiBjcmVhdGVSb290RXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgbGFuZSkge1xuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBsYW5lKTsgLy8gVW5tb3VudCB0aGUgcm9vdCBieSByZW5kZXJpbmcgbnVsbC5cblxuICB1cGRhdGUudGFnID0gQ2FwdHVyZVVwZGF0ZTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgdXBkYXRlLnBheWxvYWQgPSB7XG4gICAgZWxlbWVudDogbnVsbFxuICB9O1xuICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIG9uVW5jYXVnaHRFcnJvcihlcnJvcik7XG4gICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgbGFuZSk7XG4gIHVwZGF0ZS50YWcgPSBDYXB0dXJlVXBkYXRlO1xuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID0gZmliZXIudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZXJyb3IkMSA9IGVycm9ySW5mby52YWx1ZTtcblxuICAgIHVwZGF0ZS5wYXlsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgICAgIHJldHVybiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IkMSk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBpbnN0ID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gIGlmIChpbnN0ICE9PSBudWxsICYmIHR5cGVvZiBpbnN0LmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICB7XG4gICAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVG8gcHJlc2VydmUgdGhlIHByZWV4aXN0aW5nIHJldHJ5IGJlaGF2aW9yIG9mIGVycm9yIGJvdW5kYXJpZXMsXG4gICAgICAgIC8vIHdlIGtlZXAgdHJhY2sgb2Ygd2hpY2ggb25lcyBhbHJlYWR5IGZhaWxlZCBkdXJpbmcgdGhpcyBiYXRjaC5cbiAgICAgICAgLy8gVGhpcyBnZXRzIHJlc2V0IGJlZm9yZSB3ZSB5aWVsZCBiYWNrIHRvIHRoZSBicm93c2VyLlxuICAgICAgICAvLyBUT0RPOiBXYXJuIGluIHN0cmljdCBtb2RlIGlmIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciBpc1xuICAgICAgICAvLyBub3QgZGVmaW5lZC5cbiAgICAgICAgbWFya0xlZ2FjeUVycm9yQm91bmRhcnlBc0ZhaWxlZCh0aGlzKTsgLy8gT25seSBsb2cgaGVyZSBpZiBjb21wb25lbnREaWRDYXRjaCBpcyB0aGUgb25seSBlcnJvciBib3VuZGFyeSBtZXRob2QgZGVmaW5lZFxuXG4gICAgICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlcnJvciQxID0gZXJyb3JJbmZvLnZhbHVlO1xuICAgICAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICAgICAgdGhpcy5jb21wb25lbnREaWRDYXRjaChlcnJvciQxLCB7XG4gICAgICAgIGNvbXBvbmVudFN0YWNrOiBzdGFjayAhPT0gbnVsbCA/IHN0YWNrIDogJydcbiAgICAgIH0pO1xuXG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gSWYgY29tcG9uZW50RGlkQ2F0Y2ggaXMgdGhlIG9ubHkgZXJyb3IgYm91bmRhcnkgbWV0aG9kIGRlZmluZWQsXG4gICAgICAgICAgLy8gdGhlbiBpdCBuZWVkcyB0byBjYWxsIHNldFN0YXRlIHRvIHJlY292ZXIgZnJvbSBlcnJvcnMuXG4gICAgICAgICAgLy8gSWYgbm8gc3RhdGUgdXBkYXRlIGlzIHNjaGVkdWxlZCB0aGVuIHRoZSBib3VuZGFyeSB3aWxsIHN3YWxsb3cgdGhlIGVycm9yLlxuICAgICAgICAgIGlmICghaW5jbHVkZXNTb21lTGFuZShmaWJlci5sYW5lcywgU3luY0xhbmUpKSB7XG4gICAgICAgICAgICBlcnJvcignJXM6IEVycm9yIGJvdW5kYXJpZXMgc2hvdWxkIGltcGxlbWVudCBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoKS4gJyArICdJbiB0aGF0IG1ldGhvZCwgcmV0dXJuIGEgc3RhdGUgdXBkYXRlIHRvIGRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBvciBmYWxsYmFjayBVSS4nLCBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdVbmtub3duJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGU7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB3YWtlYWJsZSwgbGFuZXMpIHtcbiAgLy8gQXR0YWNoIGEgbGlzdGVuZXIgdG8gdGhlIHByb21pc2UgdG8gXCJwaW5nXCIgdGhlIHJvb3QgYW5kIHJldHJ5LiBCdXQgb25seSBpZlxuICAvLyBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCBmb3IgdGhlIGxhbmVzIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcgKHdoaWNoXG4gIC8vIGFjdHMgbGlrZSBhIFwidGhyZWFkIElEXCIgaGVyZSkuXG4gIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcbiAgdmFyIHRocmVhZElEcztcblxuICBpZiAocGluZ0NhY2hlID09PSBudWxsKSB7XG4gICAgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwJDEoKTtcbiAgICB0aHJlYWRJRHMgPSBuZXcgU2V0KCk7XG4gICAgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJlYWRJRHMgPSBwaW5nQ2FjaGUuZ2V0KHdha2VhYmxlKTtcblxuICAgIGlmICh0aHJlYWRJRHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyZWFkSURzID0gbmV3IFNldCgpO1xuICAgICAgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIXRocmVhZElEcy5oYXMobGFuZXMpKSB7XG4gICAgLy8gTWVtb2l6ZSB1c2luZyB0aGUgdGhyZWFkIElEIHRvIHByZXZlbnQgcmVkdW5kYW50IGxpc3RlbmVycy5cbiAgICB0aHJlYWRJRHMuYWRkKGxhbmVzKTtcbiAgICB2YXIgcGluZyA9IHBpbmdTdXNwZW5kZWRSb290LmJpbmQobnVsbCwgcm9vdCwgd2FrZWFibGUsIGxhbmVzKTtcbiAgICB3YWtlYWJsZS50aGVuKHBpbmcsIHBpbmcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKHJvb3QsIHJldHVybkZpYmVyLCBzb3VyY2VGaWJlciwgdmFsdWUsIHJvb3RSZW5kZXJMYW5lcykge1xuICAvLyBUaGUgc291cmNlIGZpYmVyIGRpZCBub3QgY29tcGxldGUuXG4gIHNvdXJjZUZpYmVyLmZsYWdzIHw9IEluY29tcGxldGU7IC8vIEl0cyBlZmZlY3QgbGlzdCBpcyBubyBsb25nZXIgdmFsaWQuXG5cbiAgc291cmNlRmliZXIuZmlyc3RFZmZlY3QgPSBzb3VyY2VGaWJlci5sYXN0RWZmZWN0ID0gbnVsbDtcblxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRoaXMgaXMgYSB3YWtlYWJsZS5cbiAgICB2YXIgd2FrZWFibGUgPSB2YWx1ZTtcblxuICAgIGlmICgoc291cmNlRmliZXIubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIG1lbW9pemVkU3RhdGUgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHdlIGF0dGVtcHRlZFxuICAgICAgLy8gdG8gcmVuZGVyIGl0LlxuICAgICAgdmFyIGN1cnJlbnRTb3VyY2UgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChjdXJyZW50U291cmNlKSB7XG4gICAgICAgIHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gY3VycmVudFNvdXJjZS51cGRhdGVRdWV1ZTtcbiAgICAgICAgc291cmNlRmliZXIubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnRTb3VyY2UubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgc291cmNlRmliZXIubGFuZXMgPSBjdXJyZW50U291cmNlLmxhbmVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc291cmNlRmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xuICAgICAgICBzb3VyY2VGaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaGFzSW52aXNpYmxlUGFyZW50Qm91bmRhcnkgPSBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQpOyAvLyBTY2hlZHVsZSB0aGUgbmVhcmVzdCBTdXNwZW5zZSB0byByZS1yZW5kZXIgdGhlIHRpbWVkIG91dCB2aWV3LlxuXG4gICAgdmFyIF93b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyO1xuXG4gICAgZG8ge1xuICAgICAgaWYgKF93b3JrSW5Qcm9ncmVzcy50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIHNob3VsZENhcHR1cmVTdXNwZW5zZShfd29ya0luUHJvZ3Jlc3MsIGhhc0ludmlzaWJsZVBhcmVudEJvdW5kYXJ5KSkge1xuICAgICAgICAvLyBGb3VuZCB0aGUgbmVhcmVzdCBib3VuZGFyeS5cbiAgICAgICAgLy8gU3Rhc2ggdGhlIHByb21pc2Ugb24gdGhlIGJvdW5kYXJ5IGZpYmVyLiBJZiB0aGUgYm91bmRhcnkgdGltZXMgb3V0LCB3ZSdsbFxuICAgICAgICAvLyBhdHRhY2ggYW5vdGhlciBsaXN0ZW5lciB0byBmbGlwIHRoZSBib3VuZGFyeSBiYWNrIHRvIGl0cyBub3JtYWwgc3RhdGUuXG4gICAgICAgIHZhciB3YWtlYWJsZXMgPSBfd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHdha2VhYmxlcyA9PT0gbnVsbCkge1xuICAgICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB1cGRhdGVRdWV1ZS5hZGQod2FrZWFibGUpO1xuICAgICAgICAgIF93b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdha2VhYmxlcy5hZGQod2FrZWFibGUpO1xuICAgICAgICB9IC8vIElmIHRoZSBib3VuZGFyeSBpcyBvdXRzaWRlIG9mIGJsb2NraW5nIG1vZGUsIHdlIHNob3VsZCAqbm90KlxuICAgICAgICAvLyBzdXNwZW5kIHRoZSBjb21taXQuIFByZXRlbmQgYXMgaWYgdGhlIHN1c3BlbmRlZCBjb21wb25lbnQgcmVuZGVyZWRcbiAgICAgICAgLy8gbnVsbCBhbmQga2VlcCByZW5kZXJpbmcuIEluIHRoZSBjb21taXQgcGhhc2UsIHdlJ2xsIHNjaGVkdWxlIGFcbiAgICAgICAgLy8gc3Vic2VxdWVudCBzeW5jaHJvbm91cyB1cGRhdGUgdG8gcmUtcmVuZGVyIHRoZSBTdXNwZW5zZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gTm90ZTogSXQgZG9lc24ndCBtYXR0ZXIgd2hldGhlciB0aGUgY29tcG9uZW50IHRoYXQgc3VzcGVuZGVkIHdhc1xuICAgICAgICAvLyBpbnNpZGUgYSBibG9ja2luZyBtb2RlIHRyZWUuIElmIHRoZSBTdXNwZW5zZSBpcyBvdXRzaWRlIG9mIGl0LCB3ZVxuICAgICAgICAvLyBzaG91bGQgKm5vdCogc3VzcGVuZCB0aGUgY29tbWl0LlxuXG5cbiAgICAgICAgaWYgKChfd29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICAgIF93b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgIHNvdXJjZUZpYmVyLmZsYWdzIHw9IEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2U7IC8vIFdlJ3JlIGdvaW5nIHRvIGNvbW1pdCB0aGlzIGZpYmVyIGV2ZW4gdGhvdWdoIGl0IGRpZG4ndCBjb21wbGV0ZS5cbiAgICAgICAgICAvLyBCdXQgd2Ugc2hvdWxkbid0IGNhbGwgYW55IGxpZmVjeWNsZSBtZXRob2RzIG9yIGNhbGxiYWNrcy4gUmVtb3ZlXG4gICAgICAgICAgLy8gYWxsIGxpZmVjeWNsZSBlZmZlY3QgdGFncy5cblxuICAgICAgICAgIHNvdXJjZUZpYmVyLmZsYWdzICY9IH4oTGlmZWN5Y2xlRWZmZWN0TWFzayB8IEluY29tcGxldGUpO1xuXG4gICAgICAgICAgaWYgKHNvdXJjZUZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50U291cmNlRmliZXIgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50U291cmNlRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBtb3VudC4gQ2hhbmdlIHRoZSB0YWcgc28gaXQncyBub3QgbWlzdGFrZW4gZm9yIGFcbiAgICAgICAgICAgICAgLy8gY29tcGxldGVkIGNsYXNzIGNvbXBvbmVudC4gRm9yIGV4YW1wbGUsIHdlIHNob3VsZCBub3QgY2FsbFxuICAgICAgICAgICAgICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCBpZiBpdCBpcyBkZWxldGVkLlxuICAgICAgICAgICAgICBzb3VyY2VGaWJlci50YWcgPSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBXaGVuIHdlIHRyeSByZW5kZXJpbmcgYWdhaW4sIHdlIHNob3VsZCBub3QgcmV1c2UgdGhlIGN1cnJlbnQgZmliZXIsXG4gICAgICAgICAgICAgIC8vIHNpbmNlIGl0J3Mga25vd24gdG8gYmUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBVc2UgYSBmb3JjZSB1cGRhdGUgdG9cbiAgICAgICAgICAgICAgLy8gcHJldmVudCBhIGJhaWwgb3V0LlxuICAgICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBTeW5jTGFuZSk7XG4gICAgICAgICAgICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcbiAgICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZShzb3VyY2VGaWJlciwgdXBkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFRoZSBzb3VyY2UgZmliZXIgZGlkIG5vdCBjb21wbGV0ZS4gTWFyayBpdCB3aXRoIFN5bmMgcHJpb3JpdHkgdG9cbiAgICAgICAgICAvLyBpbmRpY2F0ZSB0aGF0IGl0IHN0aWxsIGhhcyBwZW5kaW5nIHdvcmsuXG5cblxuICAgICAgICAgIHNvdXJjZUZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhzb3VyY2VGaWJlci5sYW5lcywgU3luY0xhbmUpOyAvLyBFeGl0IHdpdGhvdXQgc3VzcGVuZGluZy5cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBDb25maXJtZWQgdGhhdCB0aGUgYm91bmRhcnkgaXMgaW4gYSBjb25jdXJyZW50IG1vZGUgdHJlZS4gQ29udGludWVcbiAgICAgICAgLy8gd2l0aCB0aGUgbm9ybWFsIHN1c3BlbmQgcGF0aC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gQWZ0ZXIgdGhpcyB3ZSdsbCB1c2UgYSBzZXQgb2YgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzXG4gICAgICAgIC8vIHJlbmRlciBwYXNzIHdpbGwgcnVuIHRvIGNvbXBsZXRpb24gb3IgcmVzdGFydCBvciBcInN1c3BlbmRcIiB0aGUgY29tbWl0LlxuICAgICAgICAvLyBUaGUgYWN0dWFsIGxvZ2ljIGZvciB0aGlzIGlzIHNwcmVhZCBvdXQgaW4gZGlmZmVyZW50IHBsYWNlcy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhpcyBmaXJzdCBwcmluY2lwbGUgaXMgdGhhdCBpZiB3ZSdyZSBnb2luZyB0byBzdXNwZW5kIHdoZW4gd2UgY29tcGxldGVcbiAgICAgICAgLy8gYSByb290LCB0aGVuIHdlIHNob3VsZCBhbHNvIHJlc3RhcnQgaWYgd2UgZ2V0IGFuIHVwZGF0ZSBvciBwaW5nIHRoYXRcbiAgICAgICAgLy8gbWlnaHQgdW5zdXNwZW5kIGl0LCBhbmQgdmljZSB2ZXJzYS4gVGhlIG9ubHkgcmVhc29uIHRvIHN1c3BlbmQgaXNcbiAgICAgICAgLy8gYmVjYXVzZSB5b3UgdGhpbmsgeW91IG1pZ2h0IHdhbnQgdG8gcmVzdGFydCBiZWZvcmUgY29tbWl0dGluZy4gSG93ZXZlcixcbiAgICAgICAgLy8gaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHJlc3RhcnQgb25seSB3aGlsZSBpbiB0aGUgcGVyaW9kIHdlJ3JlIHN1c3BlbmRlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gUmVzdGFydGluZyB0b28gYWdncmVzc2l2ZWx5IGlzIGFsc28gbm90IGdvb2QgYmVjYXVzZSBpdCBzdGFydmVzIG91dCBhbnlcbiAgICAgICAgLy8gaW50ZXJtZWRpYXRlIGxvYWRpbmcgc3RhdGUuIFNvIHdlIHVzZSBoZXVyaXN0aWNzIHRvIGRldGVybWluZSB3aGVuLlxuICAgICAgICAvLyBTdXNwZW5zZSBIZXVyaXN0aWNzXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIG5vdGhpbmcgdGhyZXcgYSBQcm9taXNlIG9yIGFsbCB0aGUgc2FtZSBmYWxsYmFja3MgYXJlIGFscmVhZHkgc2hvd2luZyxcbiAgICAgICAgLy8gdGhlbiBkb24ndCBzdXNwZW5kL3Jlc3RhcnQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHRoaXMgaXMgYW4gaW5pdGlhbCByZW5kZXIgb2YgYSBuZXcgdHJlZSBvZiBTdXNwZW5zZSBib3VuZGFyaWVzIGFuZFxuICAgICAgICAvLyB0aG9zZSB0cmlnZ2VyIGEgZmFsbGJhY2ssIHRoZW4gZG9uJ3Qgc3VzcGVuZC9yZXN0YXJ0LiBXZSB3YW50IHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IHdlIGNhbiBzaG93IHRoZSBpbml0aWFsIGxvYWRpbmcgc3RhdGUgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgd2UgaGl0IGEgXCJEZWxheWVkXCIgY2FzZSwgc3VjaCBhcyB3aGVuIHdlJ2Qgc3dpdGNoIGZyb20gY29udGVudCBiYWNrIGludG9cbiAgICAgICAgLy8gYSBmYWxsYmFjaywgdGhlbiB3ZSBzaG91bGQgYWx3YXlzIHN1c3BlbmQvcmVzdGFydC4gVHJhbnNpdGlvbnMgYXBwbHlcbiAgICAgICAgLy8gdG8gdGhpcyBjYXNlLiBJZiBub25lIGlzIGRlZmluZWQsIEpORCBpcyB1c2VkIGluc3RlYWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIGFuZCBpdCBnZXRzIFwicmV0cmllZFwiLCBhbGxvd2luZyB1cyB0byBzaG93XG4gICAgICAgIC8vIGFub3RoZXIgbGV2ZWwsIGJ1dCB0aGVyZSdzIHN0aWxsIGFuIGlubmVyIGJvdW5kYXJ5IHRoYXQgd291bGQgc2hvdyBhIGZhbGxiYWNrLFxuICAgICAgICAvLyB0aGVuIHdlIHN1c3BlbmQvcmVzdGFydCBmb3IgNTAwbXMgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBzaG93ZWQgYSBmYWxsYmFja1xuICAgICAgICAvLyBhbnl3aGVyZSBpbiB0aGUgdHJlZS4gVGhpcyBlZmZlY3RpdmVseSB0aHJvdHRsZXMgcHJvZ3Jlc3NpdmUgbG9hZGluZyBpbnRvIGFcbiAgICAgICAgLy8gY29uc2lzdGVudCB0cmFpbiBvZiBjb21taXRzLiBUaGlzIGFsc28gZ2l2ZXMgdXMgYW4gb3Bwb3J0dW5pdHkgdG8gcmVzdGFydCB0b1xuICAgICAgICAvLyBnZXQgdG8gdGhlIGNvbXBsZXRlZCBzdGF0ZSBzbGlnaHRseSBlYXJsaWVyLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB0aGVyZSdzIGFtYmlndWl0eSBkdWUgdG8gYmF0Y2hpbmcgaXQncyByZXNvbHZlZCBpbiBwcmVmZXJlbmNlIG9mOlxuICAgICAgICAvLyAxKSBcImRlbGF5ZWRcIiwgMikgXCJpbml0aWFsIHJlbmRlclwiLCAzKSBcInJldHJ5XCIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgYSBcImJ1c3lcIiBzdGF0ZSBkb2Vzbid0IGdldCBmb3JjZSBjb21taXR0ZWQuIFdlIHdhbnQgdG9cbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgbmV3IGluaXRpYWwgbG9hZGluZyBzdGF0ZXMgY2FuIGNvbW1pdCBhcyBzb29uIGFzIHBvc3NpYmxlLlxuXG5cbiAgICAgICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHdha2VhYmxlLCByb290UmVuZGVyTGFuZXMpO1xuICAgICAgICBfd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcbiAgICAgICAgX3dvcmtJblByb2dyZXNzLmxhbmVzID0gcm9vdFJlbmRlckxhbmVzO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIFRoaXMgYm91bmRhcnkgYWxyZWFkeSBjYXB0dXJlZCBkdXJpbmcgdGhpcyByZW5kZXIuIENvbnRpbnVlIHRvIHRoZSBuZXh0XG4gICAgICAvLyBib3VuZGFyeS5cblxuXG4gICAgICBfd29ya0luUHJvZ3Jlc3MgPSBfd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgIH0gd2hpbGUgKF93b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCk7IC8vIE5vIGJvdW5kYXJ5IHdhcyBmb3VuZC4gRmFsbHRocm91Z2ggdG8gZXJyb3IgbW9kZS5cbiAgICAvLyBUT0RPOiBVc2UgaW52YXJpYW50IHNvIHRoZSBtZXNzYWdlIGlzIHN0cmlwcGVkIGluIHByb2Q/XG5cblxuICAgIHZhbHVlID0gbmV3IEVycm9yKChnZXRDb21wb25lbnROYW1lKHNvdXJjZUZpYmVyLnR5cGUpIHx8ICdBIFJlYWN0IGNvbXBvbmVudCcpICsgJyBzdXNwZW5kZWQgd2hpbGUgcmVuZGVyaW5nLCBidXQgbm8gZmFsbGJhY2sgVUkgd2FzIHNwZWNpZmllZC5cXG4nICsgJ1xcbicgKyAnQWRkIGEgPFN1c3BlbnNlIGZhbGxiYWNrPS4uLj4gY29tcG9uZW50IGhpZ2hlciBpbiB0aGUgdHJlZSB0byAnICsgJ3Byb3ZpZGUgYSBsb2FkaW5nIGluZGljYXRvciBvciBwbGFjZWhvbGRlciB0byBkaXNwbGF5LicpO1xuICB9IC8vIFdlIGRpZG4ndCBmaW5kIGEgYm91bmRhcnkgdGhhdCBjb3VsZCBoYW5kbGUgdGhpcyB0eXBlIG9mIGV4Y2VwdGlvbi4gU3RhcnRcbiAgLy8gb3ZlciBhbmQgdHJhdmVyc2UgcGFyZW50IHBhdGggYWdhaW4sIHRoaXMgdGltZSB0cmVhdGluZyB0aGUgZXhjZXB0aW9uXG4gIC8vIGFzIGFuIGVycm9yLlxuXG5cbiAgcmVuZGVyRGlkRXJyb3IoKTtcbiAgdmFsdWUgPSBjcmVhdGVDYXB0dXJlZFZhbHVlKHZhbHVlLCBzb3VyY2VGaWJlcik7XG4gIHZhciB3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyO1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfZXJyb3JJbmZvID0gdmFsdWU7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcbiAgICAgICAgICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzLCBsYW5lKTtcblxuICAgICAgICAgIHZhciBfdXBkYXRlID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfZXJyb3JJbmZvLCBsYW5lKTtcblxuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX3VwZGF0ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIC8vIENhcHR1cmUgYW5kIHJldHJ5XG4gICAgICAgIHZhciBlcnJvckluZm8gPSB2YWx1ZTtcbiAgICAgICAgdmFyIGN0b3IgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzICYmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicgfHwgaW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuXG4gICAgICAgICAgdmFyIF9sYW5lID0gcGlja0FyYml0cmFyeUxhbmUocm9vdFJlbmRlckxhbmVzKTtcblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgX2xhbmUpOyAvLyBTY2hlZHVsZSB0aGUgZXJyb3IgYm91bmRhcnkgdG8gcmUtcmVuZGVyIHVzaW5nIHVwZGF0ZWQgc3RhdGVcblxuICAgICAgICAgIHZhciBfdXBkYXRlMiA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGVycm9ySW5mbywgX2xhbmUpO1xuXG4gICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfdXBkYXRlMik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gIH0gd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKTtcbn1cblxudmFyIGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlID0gbnVsbDtcblxue1xuICBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG5ldyBTZXQoKTtcbn1cblxudmFyIFBvc3NpYmx5V2Vha1NldCA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nID8gV2Vha1NldCA6IFNldDtcblxudmFyIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFdpdGhUaW1lciA9IGZ1bmN0aW9uIChjdXJyZW50LCBpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5wcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbn07IC8vIENhcHR1cmUgZXJyb3JzIHNvIHRoZXkgZG9uJ3QgaW50ZXJydXB0IHVubW91bnRpbmcuXG5cblxuZnVuY3Rpb24gc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KGN1cnJlbnQsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50V2l0aFRpbWVyLCBudWxsLCBjdXJyZW50LCBpbnN0YW5jZSk7XG5cbiAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgdmFyIHVubW91bnRFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIHVubW91bnRFcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNhZmVseURldGFjaFJlZihjdXJyZW50KSB7XG4gIHZhciByZWYgPSBjdXJyZW50LnJlZjtcblxuICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIHJlZiwgbnVsbCwgbnVsbCk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICB2YXIgcmVmRXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgcmVmRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5Q2FsbERlc3Ryb3koY3VycmVudCwgZGVzdHJveSkge1xuICB7XG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGRlc3Ryb3ksIG51bGwpO1xuXG4gICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25MaWZlQ3ljbGVzKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFNuYXBzaG90KSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTsgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHNuYXBzaG90ID0gaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZSA/IHByZXZQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoZmluaXNoZWRXb3JrLnR5cGUsIHByZXZQcm9wcyksIHByZXZTdGF0ZSk7XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGRpZFdhcm5TZXQgPSBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtcblxuICAgICAgICAgICAgICBpZiAoc25hcHNob3QgPT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblNldC5oYXMoZmluaXNoZWRXb3JrLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgZGlkV2FyblNldC5hZGQoZmluaXNoZWRXb3JrLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgZXJyb3IoJyVzLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCk6IEEgc25hcHNob3QgdmFsdWUgKG9yIG51bGwpICcgKyAnbXVzdCBiZSByZXR1cm5lZC4gWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IHNuYXBzaG90O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgU25hcHNob3QpIHtcbiAgICAgICAgICAgIHZhciByb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIGNsZWFyQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAgLy8gTm90aGluZyB0byBkbyBmb3IgdGhlc2UgY29tcG9uZW50IHR5cGVzXG4gICAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KHRhZywgZmluaXNoZWRXb3JrKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZSAhPT0gbnVsbCA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuXG4gIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIGlmICgoZWZmZWN0LnRhZyAmIHRhZykgPT09IHRhZykge1xuICAgICAgICAvLyBVbm1vdW50XG4gICAgICAgIHZhciBkZXN0cm95ID0gZWZmZWN0LmRlc3Ryb3k7XG4gICAgICAgIGVmZmVjdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RNb3VudCh0YWcsIGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoKGVmZmVjdC50YWcgJiB0YWcpID09PSB0YWcpIHtcbiAgICAgICAgLy8gTW91bnRcbiAgICAgICAgdmFyIGNyZWF0ZSA9IGVmZmVjdC5jcmVhdGU7XG4gICAgICAgIGVmZmVjdC5kZXN0cm95ID0gY3JlYXRlKCk7XG5cbiAgICAgICAge1xuICAgICAgICAgIHZhciBkZXN0cm95ID0gZWZmZWN0LmRlc3Ryb3k7XG5cbiAgICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBkZXN0cm95ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgYWRkZW5kdW0gPSB2b2lkIDA7XG5cbiAgICAgICAgICAgIGlmIChkZXN0cm95ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gJyBZb3UgcmV0dXJuZWQgbnVsbC4gSWYgeW91ciBlZmZlY3QgZG9lcyBub3QgcmVxdWlyZSBjbGVhbiAnICsgJ3VwLCByZXR1cm4gdW5kZWZpbmVkIChvciBub3RoaW5nKS4nO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGVzdHJveS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gJ1xcblxcbkl0IGxvb2tzIGxpa2UgeW91IHdyb3RlIHVzZUVmZmVjdChhc3luYyAoKSA9PiAuLi4pIG9yIHJldHVybmVkIGEgUHJvbWlzZS4gJyArICdJbnN0ZWFkLCB3cml0ZSB0aGUgYXN5bmMgZnVuY3Rpb24gaW5zaWRlIHlvdXIgZWZmZWN0ICcgKyAnYW5kIGNhbGwgaXQgaW1tZWRpYXRlbHk6XFxuXFxuJyArICd1c2VFZmZlY3QoKCkgPT4ge1xcbicgKyAnICBhc3luYyBmdW5jdGlvbiBmZXRjaERhdGEoKSB7XFxuJyArICcgICAgLy8gWW91IGNhbiBhd2FpdCBoZXJlXFxuJyArICcgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBNeUFQSS5nZXREYXRhKHNvbWVJZCk7XFxuJyArICcgICAgLy8gLi4uXFxuJyArICcgIH1cXG4nICsgJyAgZmV0Y2hEYXRhKCk7XFxuJyArIFwifSwgW3NvbWVJZF0pOyAvLyBPciBbXSBpZiBlZmZlY3QgZG9lc24ndCBuZWVkIHByb3BzIG9yIHN0YXRlXFxuXFxuXCIgKyAnTGVhcm4gbW9yZSBhYm91dCBkYXRhIGZldGNoaW5nIHdpdGggSG9va3M6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ob29rcy1kYXRhLWZldGNoaW5nJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gJyBZb3UgcmV0dXJuZWQ6ICcgKyBkZXN0cm95O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvcignQW4gZWZmZWN0IGZ1bmN0aW9uIG11c3Qgbm90IHJldHVybiBhbnl0aGluZyBiZXNpZGVzIGEgZnVuY3Rpb24sICcgKyAnd2hpY2ggaXMgdXNlZCBmb3IgY2xlYW4tdXAuJXMnLCBhZGRlbmR1bSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlUGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZSAhPT0gbnVsbCA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuXG4gIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHZhciBfZWZmZWN0ID0gZWZmZWN0LFxuICAgICAgICAgIG5leHQgPSBfZWZmZWN0Lm5leHQsXG4gICAgICAgICAgdGFnID0gX2VmZmVjdC50YWc7XG5cbiAgICAgIGlmICgodGFnICYgUGFzc2l2ZSQxKSAhPT0gTm9GbGFncyQxICYmICh0YWcgJiBIYXNFZmZlY3QpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdFVubW91bnQoZmluaXNoZWRXb3JrLCBlZmZlY3QpO1xuICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0TW91bnQoZmluaXNoZWRXb3JrLCBlZmZlY3QpO1xuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBuZXh0O1xuICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdExpZmVDeWNsZXMoZmluaXNoZWRSb290LCBjdXJyZW50LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzKSB7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGxheW91dCBlZmZlY3RzIGhhdmUgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCAoZHVyaW5nIG11dGF0aW9uIHBoYXNlKS5cbiAgICAgICAgLy8gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc2libGluZyBjb21wb25lbnQgZWZmZWN0cyBmcm9tIGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlcixcbiAgICAgICAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBzaG91bGQgbmV2ZXIgb3ZlcnJpZGUgYSByZWYgc2V0XG4gICAgICAgIC8vIGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50IGR1cmluZyB0aGUgc2FtZSBjb21taXQuXG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KExheW91dCB8IEhhc0VmZmVjdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjaGVkdWxlUGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdjb21wb25lbnREaWRNb3VudC4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdjb21wb25lbnREaWRNb3VudC4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwcmV2UHJvcHMgPSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgPT09IGZpbmlzaGVkV29yay50eXBlID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhmaW5pc2hlZFdvcmsudHlwZSwgY3VycmVudC5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdjb21wb25lbnREaWRVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVE9ETzogSSB0aGluayB0aGlzIGlzIG5vdyBhbHdheXMgbm9uLW51bGwgYnkgdGhlIHRpbWUgaXQgcmVhY2hlcyB0aGVcbiAgICAgICAgLy8gY29tbWl0IHBoYXNlLiBDb25zaWRlciByZW1vdmluZyB0aGUgdHlwZSBjaGVjay5cblxuXG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ3Byb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuXG4gICAgICAgICAgY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCB1cGRhdGVRdWV1ZSwgaW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogSSB0aGluayB0aGlzIGlzIG5vdyBhbHdheXMgbm9uLW51bGwgYnkgdGhlIHRpbWUgaXQgcmVhY2hlcyB0aGVcbiAgICAgICAgLy8gY29tbWl0IHBoYXNlLiBDb25zaWRlciByZW1vdmluZyB0aGUgdHlwZSBjaGVjay5cbiAgICAgICAgdmFyIF91cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAoX3VwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9pbnN0YW5jZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay5jaGlsZC50YWcpIHtcbiAgICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZSA9IGdldFB1YmxpY0luc3RhbmNlKGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAgICAgICAgX2luc3RhbmNlID0gZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb21taXRVcGRhdGVRdWV1ZShmaW5pc2hlZFdvcmssIF91cGRhdGVRdWV1ZSwgX2luc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTIgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlOyAvLyBSZW5kZXJlcnMgbWF5IHNjaGVkdWxlIHdvcmsgdG8gYmUgZG9uZSBhZnRlciBob3N0IGNvbXBvbmVudHMgYXJlIG1vdW50ZWRcbiAgICAgICAgLy8gKGVnIERPTSByZW5kZXJlciBtYXkgc2NoZWR1bGUgYXV0by1mb2N1cyBmb3IgaW5wdXRzIGFuZCBmb3JtIGNvbnRyb2xzKS5cbiAgICAgICAgLy8gVGhlc2UgZWZmZWN0cyBzaG91bGQgb25seSBiZSBjb21taXR0ZWQgd2hlbiBjb21wb25lbnRzIGFyZSBmaXJzdCBtb3VudGVkLFxuICAgICAgICAvLyBha2Egd2hlbiB0aGVyZSBpcyBubyBjdXJyZW50L2FsdGVybmF0ZS5cblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCAmJiBmaW5pc2hlZFdvcmsuZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlO1xuICAgICAgICAgIHZhciBwcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIGNvbW1pdE1vdW50KF9pbnN0YW5jZTIsIHR5cGUsIHByb3BzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGhhdmUgbm8gbGlmZS1jeWNsZXMgYXNzb2NpYXRlZCB3aXRoIHRleHQuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBubyBsaWZlLWN5Y2xlcyBhc3NvY2lhdGVkIHdpdGggcG9ydGFscy5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfZmluaXNoZWRXb3JrJG1lbW9pemUyID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgICAgIG9uQ29tbWl0ID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5vbkNvbW1pdCxcbiAgICAgICAgICAgICAgb25SZW5kZXIgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLm9uUmVuZGVyO1xuICAgICAgICAgIHZhciBlZmZlY3REdXJhdGlvbiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb247XG4gICAgICAgICAgdmFyIGNvbW1pdFRpbWUgPSBnZXRDb21taXRUaW1lKCk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9uUmVuZGVyKGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLmlkLCBjdXJyZW50ID09PSBudWxsID8gJ21vdW50JyA6ICd1cGRhdGUnLCBmaW5pc2hlZFdvcmsuYWN0dWFsRHVyYXRpb24sIGZpbmlzaGVkV29yay50cmVlQmFzZUR1cmF0aW9uLCBmaW5pc2hlZFdvcmsuYWN0dWFsU3RhcnRUaW1lLCBjb21taXRUaW1lLCBmaW5pc2hlZFJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKGZpbmlzaGVkV29yaywgaXNIaWRkZW4pIHtcbiAge1xuICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGluc2VydGVkIGJ1dCB3ZSBuZWVkIHRvIHJlY3Vyc2UgZG93biBpdHNcbiAgICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gICAgdmFyIG5vZGUgPSBmaW5pc2hlZFdvcms7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgIGhpZGVJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5oaWRlSW5zdGFuY2Uobm9kZS5zdGF0ZU5vZGUsIG5vZGUubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgIHZhciBfaW5zdGFuY2UzID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgaGlkZVRleHRJbnN0YW5jZShfaW5zdGFuY2UzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bmhpZGVUZXh0SW5zdGFuY2UoX2luc3RhbmNlMywgbm9kZS5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgobm9kZS50YWcgPT09IE9mZnNjcmVlbkNvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gTGVnYWN5SGlkZGVuQ29tcG9uZW50KSAmJiBub2RlLm1lbW9pemVkU3RhdGUgIT09IG51bGwgJiYgbm9kZSAhPT0gZmluaXNoZWRXb3JrKSA7IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmaW5pc2hlZFdvcmspIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRBdHRhY2hSZWYoZmluaXNoZWRXb3JrKSB7XG4gIHZhciByZWYgPSBmaW5pc2hlZFdvcmsucmVmO1xuXG4gIGlmIChyZWYgIT09IG51bGwpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgIHZhciBpbnN0YW5jZVRvVXNlO1xuXG4gICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIGluc3RhbmNlVG9Vc2UgPSBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpbnN0YW5jZVRvVXNlID0gaW5zdGFuY2U7XG4gICAgfSAvLyBNb3ZlZCBvdXRzaWRlIHRvIGVuc3VyZSBEQ0Ugd29ya3Mgd2l0aCB0aGlzIGZsYWdcblxuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZWYoaW5zdGFuY2VUb1VzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFyZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICAgIGVycm9yKCdVbmV4cGVjdGVkIHJlZiBvYmplY3QgcHJvdmlkZWQgZm9yICVzLiAnICsgJ1VzZSBlaXRoZXIgYSByZWYtc2V0dGVyIGZ1bmN0aW9uIG9yIFJlYWN0LmNyZWF0ZVJlZigpLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZWYuY3VycmVudCA9IGluc3RhbmNlVG9Vc2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdERldGFjaFJlZihjdXJyZW50KSB7XG4gIHZhciBjdXJyZW50UmVmID0gY3VycmVudC5yZWY7XG5cbiAgaWYgKGN1cnJlbnRSZWYgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGN1cnJlbnRSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1cnJlbnRSZWYobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59IC8vIFVzZXItb3JpZ2luYXRpbmcgZXJyb3JzIChsaWZlY3ljbGVzIGFuZCByZWZzKSBzaG91bGQgbm90IGludGVycnVwdFxuLy8gZGVsZXRpb24sIHNvIGRvbid0IGxldCB0aGVtIHRocm93LiBIb3N0LW9yaWdpbmF0aW5nIGVycm9ycyBzaG91bGRcbi8vIGludGVycnVwdCBkZWxldGlvbiwgc28gaXQncyBva2F5XG5cblxuZnVuY3Rpb24gY29tbWl0VW5tb3VudChmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgb25Db21taXRVbm1vdW50KGN1cnJlbnQpO1xuXG4gIHN3aXRjaCAoY3VycmVudC50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0O1xuXG4gICAgICAgICAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgICAgICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICB2YXIgX2VmZmVjdDIgPSBlZmZlY3QsXG4gICAgICAgICAgICAgICAgICBkZXN0cm95ID0gX2VmZmVjdDIuZGVzdHJveSxcbiAgICAgICAgICAgICAgICAgIHRhZyA9IF9lZmZlY3QyLnRhZztcblxuICAgICAgICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCh0YWcgJiBQYXNzaXZlJDEpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgICAgICAgIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RVbm1vdW50KGN1cnJlbnQsIGVmZmVjdCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc2FmZWx5Q2FsbERlc3Ryb3koY3VycmVudCwgZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgICAgICAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCk7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGN1cnJlbnQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoY3VycmVudCwgaW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogdGhpcyBpcyByZWN1cnNpdmUuXG4gICAgICAgIC8vIFdlIGFyZSBhbHNvIG5vdCB1c2luZyB0aGlzIHBhcmVudCBiZWNhdXNlXG4gICAgICAgIC8vIHRoZSBwb3J0YWwgd2lsbCBnZXQgcHVzaGVkIGltbWVkaWF0ZWx5LlxuICAgICAgICB7XG4gICAgICAgICAgdW5tb3VudEhvc3RDb21wb25lbnRzKGZpbmlzaGVkUm9vdCwgY3VycmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgRGVoeWRyYXRlZEZyYWdtZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdE5lc3RlZFVubW91bnRzKGZpbmlzaGVkUm9vdCwgcm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICAvLyBXaGlsZSB3ZSdyZSBpbnNpZGUgYSByZW1vdmVkIGhvc3Qgbm9kZSB3ZSBkb24ndCB3YW50IHRvIGNhbGxcbiAgLy8gcmVtb3ZlQ2hpbGQgb24gdGhlIGlubmVyIG5vZGVzIGJlY2F1c2UgdGhleSdyZSByZW1vdmVkIGJ5IHRoZSB0b3BcbiAgLy8gY2FsbCBhbnl3YXkuIFdlIGFsc28gd2FudCB0byBjYWxsIGNvbXBvbmVudFdpbGxVbm1vdW50IG9uIGFsbFxuICAvLyBjb21wb3NpdGVzIGJlZm9yZSB0aGlzIGhvc3Qgbm9kZSBpcyByZW1vdmVkIGZyb20gdGhlIHRyZWUuIFRoZXJlZm9yZVxuICAvLyB3ZSBkbyBhbiBpbm5lciBsb29wIHdoaWxlIHdlJ3JlIHN0aWxsIGluc2lkZSB0aGUgaG9zdCBub2RlLlxuICB2YXIgbm9kZSA9IHJvb3Q7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb21taXRVbm1vdW50KGZpbmlzaGVkUm9vdCwgbm9kZSk7IC8vIFZpc2l0IGNoaWxkcmVuIGJlY2F1c2UgdGhleSBtYXkgY29udGFpbiBtb3JlIGNvbXBvc2l0ZSBvciBob3N0IG5vZGVzLlxuICAgIC8vIFNraXAgcG9ydGFscyBiZWNhdXNlIGNvbW1pdFVubW91bnQoKSBjdXJyZW50bHkgdmlzaXRzIHRoZW0gcmVjdXJzaXZlbHkuXG5cbiAgICBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCAmJiAoIC8vIElmIHdlIHVzZSBtdXRhdGlvbiB3ZSBkcmlsbCBkb3duIGludG8gcG9ydGFscyB1c2luZyBjb21taXRVbm1vdW50IGFib3ZlLlxuICAgIC8vIElmIHdlIGRvbid0IHVzZSBtdXRhdGlvbiB3ZSBkcmlsbCBkb3duIGludG8gcG9ydGFscyBoZXJlIGluc3RlYWQuXG4gICAgIG5vZGUudGFnICE9PSBIb3N0UG9ydGFsKSkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gcm9vdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gcm9vdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRhY2hGaWJlck11dGF0aW9uKGZpYmVyKSB7XG4gIC8vIEN1dCBvZmYgdGhlIHJldHVybiBwb2ludGVycyB0byBkaXNjb25uZWN0IGl0IGZyb20gdGhlIHRyZWUuIElkZWFsbHksIHdlXG4gIC8vIHNob3VsZCBjbGVhciB0aGUgY2hpbGQgcG9pbnRlciBvZiB0aGUgcGFyZW50IGFsdGVybmF0ZSB0byBsZXQgdGhpc1xuICAvLyBnZXQgR0M6ZWQgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggZm9yIHN1cmUgd2hpY2ggcGFyZW50IGlzIHRoZSBjdXJyZW50XG4gIC8vIG9uZSBzbyB3ZSdsbCBzZXR0bGUgZm9yIEdDOmluZyB0aGUgc3VidHJlZSBvZiB0aGlzIGNoaWxkLiBUaGlzIGNoaWxkXG4gIC8vIGl0c2VsZiB3aWxsIGJlIEdDOmVkIHdoZW4gdGhlIHBhcmVudCB1cGRhdGVzIHRoZSBuZXh0IHRpbWUuXG4gIC8vIE5vdGU6IHdlIGNhbm5vdCBudWxsIG91dCBzaWJsaW5nIGhlcmUsIG90aGVyd2lzZSBpdCBjYW4gY2F1c2UgaXNzdWVzXG4gIC8vIHdpdGggZmluZERPTU5vZGUgYW5kIGhvdyBpdCByZXF1aXJlcyB0aGUgc2libGluZyBmaWVsZCB0byBjYXJyeSBvdXRcbiAgLy8gdHJhdmVyc2FsIGluIGEgbGF0ZXIgZWZmZWN0LiBTZWUgUFIgIzE2ODIwLiBXZSBub3cgY2xlYXIgdGhlIHNpYmxpbmdcbiAgLy8gZmllbGQgYWZ0ZXIgZWZmZWN0cywgc2VlOiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cy5cbiAgLy9cbiAgLy8gRG9uJ3QgZGlzY29ubmVjdCBzdGF0ZU5vZGUgbm93OyBpdCB3aWxsIGJlIGRldGFjaGVkIGluIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzLlxuICAvLyBJdCBtYXkgYmUgcmVxdWlyZWQgaWYgdGhlIGN1cnJlbnQgY29tcG9uZW50IGlzIGFuIGVycm9yIGJvdW5kYXJ5LFxuICAvLyBhbmQgb25lIG9mIGl0cyBkZXNjZW5kYW50cyB0aHJvd3Mgd2hpbGUgdW5tb3VudGluZyBhIHBhc3NpdmUgZWZmZWN0LlxuICBmaWJlci5hbHRlcm5hdGUgPSBudWxsO1xuICBmaWJlci5jaGlsZCA9IG51bGw7XG4gIGZpYmVyLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gIGZpYmVyLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgZmliZXIubGFzdEVmZmVjdCA9IG51bGw7XG4gIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICBmaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgZmliZXIucGVuZGluZ1Byb3BzID0gbnVsbDtcbiAgZmliZXIucmV0dXJuID0gbnVsbDtcbiAgZmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SG9zdFBhcmVudEZpYmVyKGZpYmVyKSB7XG4gIHZhciBwYXJlbnQgPSBmaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgIGlmIChpc0hvc3RQYXJlbnQocGFyZW50KSkge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG5cbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGZpbmQgYSBob3N0IHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0hvc3RQYXJlbnQoZmliZXIpIHtcbiAgcmV0dXJuIGZpYmVyLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBmaWJlci50YWcgPT09IEhvc3RSb290IHx8IGZpYmVyLnRhZyA9PT0gSG9zdFBvcnRhbDtcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdFNpYmxpbmcoZmliZXIpIHtcbiAgLy8gV2UncmUgZ29pbmcgdG8gc2VhcmNoIGZvcndhcmQgaW50byB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIGEgc2libGluZyBob3N0XG4gIC8vIG5vZGUuIFVuZm9ydHVuYXRlbHksIGlmIG11bHRpcGxlIGluc2VydGlvbnMgYXJlIGRvbmUgaW4gYSByb3cgd2UgaGF2ZSB0b1xuICAvLyBzZWFyY2ggcGFzdCB0aGVtLiBUaGlzIGxlYWRzIHRvIGV4cG9uZW50aWFsIHNlYXJjaCBmb3IgdGhlIG5leHQgc2libGluZy5cbiAgLy8gVE9ETzogRmluZCBhIG1vcmUgZWZmaWNpZW50IHdheSB0byBkbyB0aGlzLlxuICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gIHNpYmxpbmdzOiB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLCBsZXQncyB0cnkgdGhlIG5leHQgc2libGluZy5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgaXNIb3N0UGFyZW50KG5vZGUucmV0dXJuKSkge1xuICAgICAgICAvLyBJZiB3ZSBwb3Agb3V0IG9mIHRoZSByb290IG9yIGhpdCB0aGUgcGFyZW50IHRoZSBmaWJlciB3ZSBhcmUgdGhlXG4gICAgICAgIC8vIGxhc3Qgc2libGluZy5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcblxuICAgIHdoaWxlIChub2RlLnRhZyAhPT0gSG9zdENvbXBvbmVudCAmJiBub2RlLnRhZyAhPT0gSG9zdFRleHQgJiYgbm9kZS50YWcgIT09IERlaHlkcmF0ZWRGcmFnbWVudCkge1xuICAgICAgLy8gSWYgaXQgaXMgbm90IGhvc3Qgbm9kZSBhbmQsIHdlIG1pZ2h0IGhhdmUgYSBob3N0IG5vZGUgaW5zaWRlIGl0LlxuICAgICAgLy8gVHJ5IHRvIHNlYXJjaCBkb3duIHVudGlsIHdlIGZpbmQgb25lLlxuICAgICAgaWYgKG5vZGUuZmxhZ3MgJiBQbGFjZW1lbnQpIHtcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAgIGNvbnRpbnVlIHNpYmxpbmdzO1xuICAgICAgfSAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgY2hpbGQsIHRyeSB0aGUgc2libGluZ3MgaW5zdGVhZC5cbiAgICAgIC8vIFdlIGFsc28gc2tpcCBwb3J0YWxzIGJlY2F1c2UgdGhleSBhcmUgbm90IHBhcnQgb2YgdGhpcyBob3N0IHRyZWUuXG5cblxuICAgICAgaWYgKG5vZGUuY2hpbGQgPT09IG51bGwgfHwgbm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgY29udGludWUgc2libGluZ3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgfVxuICAgIH0gLy8gQ2hlY2sgaWYgdGhpcyBob3N0IG5vZGUgaXMgc3RhYmxlIG9yIGFib3V0IHRvIGJlIHBsYWNlZC5cblxuXG4gICAgaWYgKCEobm9kZS5mbGFncyAmIFBsYWNlbWVudCkpIHtcbiAgICAgIC8vIEZvdW5kIGl0IVxuICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQbGFjZW1lbnQoZmluaXNoZWRXb3JrKSB7XG5cblxuICB2YXIgcGFyZW50RmliZXIgPSBnZXRIb3N0UGFyZW50RmliZXIoZmluaXNoZWRXb3JrKTsgLy8gTm90ZTogdGhlc2UgdHdvIHZhcmlhYmxlcyAqbXVzdCogYWx3YXlzIGJlIHVwZGF0ZWQgdG9nZXRoZXIuXG5cbiAgdmFyIHBhcmVudDtcbiAgdmFyIGlzQ29udGFpbmVyO1xuICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuXG4gIHN3aXRjaCAocGFyZW50RmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcGFyZW50ID0gcGFyZW50U3RhdGVOb2RlO1xuICAgICAgaXNDb250YWluZXIgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgaXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgIGlzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZS1uby1mYWxsdGhyb3VnaFxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgaG9zdCBwYXJlbnQgZmliZXIuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cblxuICBpZiAocGFyZW50RmliZXIuZmxhZ3MgJiBDb250ZW50UmVzZXQpIHtcbiAgICAvLyBSZXNldCB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBwYXJlbnQgYmVmb3JlIGRvaW5nIGFueSBpbnNlcnRpb25zXG4gICAgcmVzZXRUZXh0Q29udGVudChwYXJlbnQpOyAvLyBDbGVhciBDb250ZW50UmVzZXQgZnJvbSB0aGUgZWZmZWN0IHRhZ1xuXG4gICAgcGFyZW50RmliZXIuZmxhZ3MgJj0gfkNvbnRlbnRSZXNldDtcbiAgfVxuXG4gIHZhciBiZWZvcmUgPSBnZXRIb3N0U2libGluZyhmaW5pc2hlZFdvcmspOyAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBpbnNlcnRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cblxuICBpZiAoaXNDb250YWluZXIpIHtcbiAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKGZpbmlzaGVkV29yaywgYmVmb3JlLCBwYXJlbnQpO1xuICB9IGVsc2Uge1xuICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShmaW5pc2hlZFdvcmssIGJlZm9yZSwgcGFyZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKG5vZGUsIGJlZm9yZSwgcGFyZW50KSB7XG4gIHZhciB0YWcgPSBub2RlLnRhZztcbiAgdmFyIGlzSG9zdCA9IHRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCB0YWcgPT09IEhvc3RUZXh0O1xuXG4gIGlmIChpc0hvc3QgfHwgZW5hYmxlRnVuZGFtZW50YWxBUEkgKSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IGlzSG9zdCA/IG5vZGUuc3RhdGVOb2RlIDogbm9kZS5zdGF0ZU5vZGUuaW5zdGFuY2U7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICBpbnNlcnRJbkNvbnRhaW5lckJlZm9yZShwYXJlbnQsIHN0YXRlTm9kZSwgYmVmb3JlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcihwYXJlbnQsIHN0YXRlTm9kZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFBvcnRhbCkgOyBlbHNlIHtcbiAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkO1xuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKGNoaWxkLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICB2YXIgc2libGluZyA9IGNoaWxkLnNpYmxpbmc7XG5cbiAgICAgIHdoaWxlIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoc2libGluZywgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgICBzaWJsaW5nID0gc2libGluZy5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUobm9kZSwgYmVmb3JlLCBwYXJlbnQpIHtcbiAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICB2YXIgaXNIb3N0ID0gdGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHRhZyA9PT0gSG9zdFRleHQ7XG5cbiAgaWYgKGlzSG9zdCB8fCBlbmFibGVGdW5kYW1lbnRhbEFQSSApIHtcbiAgICB2YXIgc3RhdGVOb2RlID0gaXNIb3N0ID8gbm9kZS5zdGF0ZU5vZGUgOiBub2RlLnN0YXRlTm9kZS5pbnN0YW5jZTtcblxuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgIGluc2VydEJlZm9yZShwYXJlbnQsIHN0YXRlTm9kZSwgYmVmb3JlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kQ2hpbGQocGFyZW50LCBzdGF0ZU5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RQb3J0YWwpIDsgZWxzZSB7XG4gICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKGNoaWxkLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICB2YXIgc2libGluZyA9IGNoaWxkLnNpYmxpbmc7XG5cbiAgICAgIHdoaWxlIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShzaWJsaW5nLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVubW91bnRIb3N0Q29tcG9uZW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgZGVsZXRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgdmFyIG5vZGUgPSBjdXJyZW50OyAvLyBFYWNoIGl0ZXJhdGlvbiwgY3VycmVudFBhcmVudCBpcyBwb3B1bGF0ZWQgd2l0aCBub2RlJ3MgaG9zdCBwYXJlbnQgaWYgbm90XG4gIC8vIGN1cnJlbnRQYXJlbnRJc1ZhbGlkLlxuXG4gIHZhciBjdXJyZW50UGFyZW50SXNWYWxpZCA9IGZhbHNlOyAvLyBOb3RlOiB0aGVzZSB0d28gdmFyaWFibGVzICptdXN0KiBhbHdheXMgYmUgdXBkYXRlZCB0b2dldGhlci5cblxuICB2YXIgY3VycmVudFBhcmVudDtcbiAgdmFyIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lcjtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmICghY3VycmVudFBhcmVudElzVmFsaWQpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBub2RlLnJldHVybjtcblxuICAgICAgZmluZFBhcmVudDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKCEocGFyZW50ICE9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGZpbmQgYSBob3N0IHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXJlbnRTdGF0ZU5vZGUgPSBwYXJlbnQuc3RhdGVOb2RlO1xuXG4gICAgICAgIHN3aXRjaCAocGFyZW50LnRhZykge1xuICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGU7XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG5cbiAgICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG5cbiAgICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWsgZmluZFBhcmVudDtcblxuICAgICAgICB9XG5cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICAgIH1cblxuICAgICAgY3VycmVudFBhcmVudElzVmFsaWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIGNvbW1pdE5lc3RlZFVubW91bnRzKGZpbmlzaGVkUm9vdCwgbm9kZSk7IC8vIEFmdGVyIGFsbCB0aGUgY2hpbGRyZW4gaGF2ZSB1bm1vdW50ZWQsIGl0IGlzIG5vdyBzYWZlIHRvIHJlbW92ZSB0aGVcbiAgICAgIC8vIG5vZGUgZnJvbSB0aGUgdHJlZS5cblxuICAgICAgaWYgKGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lcikge1xuICAgICAgICByZW1vdmVDaGlsZEZyb21Db250YWluZXIoY3VycmVudFBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlQ2hpbGQoY3VycmVudFBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSAvLyBEb24ndCB2aXNpdCBjaGlsZHJlbiBiZWNhdXNlIHdlIGFscmVhZHkgdmlzaXRlZCB0aGVtLlxuXG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2hlbiB3ZSBnbyBpbnRvIGEgcG9ydGFsLCBpdCBiZWNvbWVzIHRoZSBwYXJlbnQgdG8gcmVtb3ZlIGZyb20uXG4gICAgICAgIC8vIFdlIHdpbGwgcmVhc3NpZ24gaXQgYmFjayB3aGVuIHdlIHBvcCB0aGUgcG9ydGFsIG9uIHRoZSB3YXkgdXAuXG4gICAgICAgIGN1cnJlbnRQYXJlbnQgPSBub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSB0cnVlOyAvLyBWaXNpdCBjaGlsZHJlbiBiZWNhdXNlIHBvcnRhbHMgbWlnaHQgY29udGFpbiBob3N0IGNvbXBvbmVudHMuXG5cbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBub2RlKTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB3ZSBtYXkgZmluZCBtb3JlIGhvc3QgY29tcG9uZW50cyBiZWxvdy5cblxuICAgICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG5cbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAvLyBXaGVuIHdlIGdvIG91dCBvZiB0aGUgcG9ydGFsLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIHBhcmVudC5cbiAgICAgICAgLy8gU2luY2Ugd2UgZG9uJ3Qga2VlcCBhIHN0YWNrIG9mIHRoZW0sIHdlIHdpbGwgc2VhcmNoIGZvciBpdC5cbiAgICAgICAgY3VycmVudFBhcmVudElzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXREZWxldGlvbihmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGRlbGV0ZSBhbGwgaG9zdCBub2RlcyBmcm9tIHRoZSBwYXJlbnQuXG4gICAgLy8gRGV0YWNoIHJlZnMgYW5kIGNhbGwgY29tcG9uZW50V2lsbFVubW91bnQoKSBvbiB0aGUgd2hvbGUgc3VidHJlZS5cbiAgICB1bm1vdW50SG9zdENvbXBvbmVudHMoZmluaXNoZWRSb290LCBjdXJyZW50KTtcbiAgfVxuXG4gIHZhciBhbHRlcm5hdGUgPSBjdXJyZW50LmFsdGVybmF0ZTtcbiAgZGV0YWNoRmliZXJNdXRhdGlvbihjdXJyZW50KTtcblxuICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgZGV0YWNoRmliZXJNdXRhdGlvbihhbHRlcm5hdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFdvcmsoY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG5cbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICAvLyBMYXlvdXQgZWZmZWN0cyBhcmUgZGVzdHJveWVkIGR1cmluZyB0aGUgbXV0YXRpb24gcGhhc2Ugc28gdGhhdCBhbGxcbiAgICAgICAgLy8gZGVzdHJveSBmdW5jdGlvbnMgZm9yIGFsbCBmaWJlcnMgYXJlIGNhbGxlZCBiZWZvcmUgYW55IGNyZWF0ZSBmdW5jdGlvbnMuXG4gICAgICAgIC8vIFRoaXMgcHJldmVudHMgc2libGluZyBjb21wb25lbnQgZWZmZWN0cyBmcm9tIGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlcixcbiAgICAgICAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBzaG91bGQgbmV2ZXIgb3ZlcnJpZGUgYSByZWYgc2V0XG4gICAgICAgIC8vIGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50IGR1cmluZyB0aGUgc2FtZSBjb21taXQuXG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoTGF5b3V0IHwgSGFzRWZmZWN0LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gQ29tbWl0IHRoZSB3b3JrIHByZXBhcmVkIGVhcmxpZXIuXG4gICAgICAgICAgdmFyIG5ld1Byb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7IC8vIEZvciBoeWRyYXRpb24gd2UgcmV1c2UgdGhlIHVwZGF0ZSBwYXRoIGJ1dCB3ZSB0cmVhdCB0aGUgb2xkUHJvcHNcbiAgICAgICAgICAvLyBhcyB0aGUgbmV3UHJvcHMuIFRoZSB1cGRhdGVQYXlsb2FkIHdpbGwgY29udGFpbiB0aGUgcmVhbCBjaGFuZ2UgaW5cbiAgICAgICAgICAvLyB0aGlzIGNhc2UuXG5cbiAgICAgICAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbmV3UHJvcHM7XG4gICAgICAgICAgdmFyIHR5cGUgPSBmaW5pc2hlZFdvcmsudHlwZTsgLy8gVE9ETzogVHlwZSB0aGUgdXBkYXRlUXVldWUgdG8gYmUgc3BlY2lmaWMgdG8gaG9zdCBjb21wb25lbnRzLlxuXG4gICAgICAgICAgdmFyIHVwZGF0ZVBheWxvYWQgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gICAgICAgICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICAgICAgICAgIGlmICh1cGRhdGVQYXlsb2FkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb21taXRVcGRhdGUoaW5zdGFuY2UsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgaWYgKCEoZmluaXNoZWRXb3JrLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHNob3VsZCBoYXZlIGEgdGV4dCBub2RlIGluaXRpYWxpemVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRleHRJbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIHZhciBuZXdUZXh0ID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7IC8vIEZvciBoeWRyYXRpb24gd2UgcmV1c2UgdGhlIHVwZGF0ZSBwYXRoIGJ1dCB3ZSB0cmVhdCB0aGUgb2xkUHJvcHNcbiAgICAgICAgLy8gYXMgdGhlIG5ld1Byb3BzLiBUaGUgdXBkYXRlUGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhlIHJlYWwgY2hhbmdlIGluXG4gICAgICAgIC8vIHRoaXMgY2FzZS5cblxuICAgICAgICB2YXIgb2xkVGV4dCA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBuZXdUZXh0O1xuICAgICAgICBjb21taXRUZXh0VXBkYXRlKHRleHRJbnN0YW5jZSwgb2xkVGV4dCwgbmV3VGV4dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX3Jvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgaWYgKF9yb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAgIC8vIFdlJ3ZlIGp1c3QgaHlkcmF0ZWQuIE5vIG5lZWQgdG8gaHlkcmF0ZSBhZ2Fpbi5cbiAgICAgICAgICAgIF9yb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkQ29udGFpbmVyKF9yb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGNvbW1pdFN1c3BlbnNlQ29tcG9uZW50KGZpbmlzaGVkV29yayk7XG4gICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgICB2YXIgaXNIaWRkZW4gPSBuZXdTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4oZmluaXNoZWRXb3JrLCBpc0hpZGRlbik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRTdXNwZW5zZUNvbXBvbmVudChmaW5pc2hlZFdvcmspIHtcbiAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5ld1N0YXRlICE9PSBudWxsKSB7XG4gICAgbWFya0NvbW1pdFRpbWVPZkZhbGxiYWNrKCk7XG5cbiAgICB7XG4gICAgICAvLyBIaWRlIHRoZSBPZmZzY3JlZW4gY29tcG9uZW50IHRoYXQgY29udGFpbnMgdGhlIHByaW1hcnkgY2hpbGRyZW4uIFRPRE86XG4gICAgICAvLyBJZGVhbGx5LCB0aGlzIGVmZmVjdCB3b3VsZCBoYXZlIGJlZW4gc2NoZWR1bGVkIG9uIHRoZSBPZmZzY3JlZW4gZmliZXJcbiAgICAgIC8vIGl0c2VsZi4gVGhhdCdzIGhvdyB1bmhpZGluZyB3b3JrczogdGhlIE9mZnNjcmVlbiBjb21wb25lbnQgc2NoZWR1bGVzIGFuXG4gICAgICAvLyBlZmZlY3Qgb24gaXRzZWxmLiBIb3dldmVyLCBpbiB0aGlzIGNhc2UsIHRoZSBjb21wb25lbnQgZGlkbid0IGNvbXBsZXRlLFxuICAgICAgLy8gc28gdGhlIGZpYmVyIHdhcyBuZXZlciBhZGRlZCB0byB0aGUgZWZmZWN0IGxpc3QgaW4gdGhlIG5vcm1hbCBwYXRoLiBXZVxuICAgICAgLy8gY291bGQgaGF2ZSBhcHBlbmRlZCBpdCB0byB0aGUgZWZmZWN0IGxpc3QgaW4gdGhlIFN1c3BlbnNlIGNvbXBvbmVudCdzXG4gICAgICAvLyBzZWNvbmQgcGFzcywgYnV0IGRvaW5nIGl0IHRoaXMgd2F5IGlzIGxlc3MgY29tcGxpY2F0ZWQuIFRoaXMgd291bGQgYmVcbiAgICAgIC8vIHNpbXBsZXIgaWYgd2UgZ290IHJpZCBvZiB0aGUgZWZmZWN0IGxpc3QgYW5kIHRyYXZlcnNlZCB0aGUgdHJlZSwgbGlrZVxuICAgICAgLy8gd2UncmUgcGxhbm5pbmcgdG8gZG8uXG4gICAgICB2YXIgcHJpbWFyeUNoaWxkUGFyZW50ID0gZmluaXNoZWRXb3JrLmNoaWxkO1xuICAgICAgaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4ocHJpbWFyeUNoaWxkUGFyZW50LCB0cnVlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0U3VzcGVuc2VIeWRyYXRpb25DYWxsYmFja3MoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspIHtcblxuICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobmV3U3RhdGUgPT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IHByZXZTdGF0ZS5kZWh5ZHJhdGVkO1xuXG4gICAgICAgIGlmIChzdXNwZW5zZUluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgY29tbWl0SHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrKSB7XG4gIC8vIElmIHRoaXMgYm91bmRhcnkganVzdCB0aW1lZCBvdXQsIHRoZW4gaXQgd2lsbCBoYXZlIGEgc2V0IG9mIHdha2VhYmxlcy5cbiAgLy8gRm9yIGVhY2ggd2FrZWFibGUsIGF0dGFjaCBhIGxpc3RlbmVyIHNvIHRoYXQgd2hlbiBpdCByZXNvbHZlcywgUmVhY3RcbiAgLy8gYXR0ZW1wdHMgdG8gcmUtcmVuZGVyIHRoZSBib3VuZGFyeSBpbiB0aGUgcHJpbWFyeSAocHJlLXRpbWVvdXQpIHN0YXRlLlxuICB2YXIgd2FrZWFibGVzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICh3YWtlYWJsZXMgIT09IG51bGwpIHtcbiAgICBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsO1xuICAgIHZhciByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgIGlmIChyZXRyeUNhY2hlID09PSBudWxsKSB7XG4gICAgICByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSA9IG5ldyBQb3NzaWJseVdlYWtTZXQoKTtcbiAgICB9XG5cbiAgICB3YWtlYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAod2FrZWFibGUpIHtcbiAgICAgIC8vIE1lbW9pemUgdXNpbmcgdGhlIGJvdW5kYXJ5IGZpYmVyIHRvIHByZXZlbnQgcmVkdW5kYW50IGxpc3RlbmVycy5cbiAgICAgIHZhciByZXRyeSA9IHJlc29sdmVSZXRyeVdha2VhYmxlLmJpbmQobnVsbCwgZmluaXNoZWRXb3JrLCB3YWtlYWJsZSk7XG5cbiAgICAgIGlmICghcmV0cnlDYWNoZS5oYXMod2FrZWFibGUpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAod2FrZWFibGUuX19yZWFjdERvTm90VHJhY2VJbnRlcmFjdGlvbnMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHJ5ID0gdHJhY2luZy51bnN0YWJsZV93cmFwKHJldHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXRyeUNhY2hlLmFkZCh3YWtlYWJsZSk7XG4gICAgICAgIHdha2VhYmxlLnRoZW4ocmV0cnksIHJldHJ5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSAvLyBUaGlzIGZ1bmN0aW9uIGRldGVjdHMgd2hlbiBhIFN1c3BlbnNlIGJvdW5kYXJ5IGdvZXMgZnJvbSB2aXNpYmxlIHRvIGhpZGRlbi5cbi8vIEl0IHJldHVybnMgZmFsc2UgaWYgdGhlIGJvdW5kYXJ5IGlzIGFscmVhZHkgaGlkZGVuLlxuLy8gVE9ETzogVXNlIGFuIGVmZmVjdCB0YWcuXG5cblxuZnVuY3Rpb24gaXNTdXNwZW5zZUJvdW5kYXJ5QmVpbmdIaWRkZW4oY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKG9sZFN0YXRlID09PSBudWxsIHx8IG9sZFN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgcmV0dXJuIG5ld1N0YXRlICE9PSBudWxsICYmIG5ld1N0YXRlLmRlaHlkcmF0ZWQgPT09IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb21taXRSZXNldFRleHRDb250ZW50KGN1cnJlbnQpIHtcblxuICByZXNldFRleHRDb250ZW50KGN1cnJlbnQuc3RhdGVOb2RlKTtcbn1cblxudmFyIENPTVBPTkVOVF9UWVBFID0gMDtcbnZhciBIQVNfUFNFVURPX0NMQVNTX1RZUEUgPSAxO1xudmFyIFJPTEVfVFlQRSA9IDI7XG52YXIgVEVTVF9OQU1FX1RZUEUgPSAzO1xudmFyIFRFWFRfVFlQRSA9IDQ7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciQxID0gU3ltYm9sLmZvcjtcbiAgQ09NUE9ORU5UX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IuY29tcG9uZW50Jyk7XG4gIEhBU19QU0VVRE9fQ0xBU1NfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci5oYXNfcHNldWRvX2NsYXNzJyk7XG4gIFJPTEVfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci5yb2xlJyk7XG4gIFRFU1RfTkFNRV9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLnRlc3RfaWQnKTtcbiAgVEVYVF9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLnRleHQnKTtcbn1cbnZhciBjb21taXRIb29rcyA9IFtdO1xuZnVuY3Rpb24gb25Db21taXRSb290JDEoKSB7XG4gIHtcbiAgICBjb21taXRIb29rcy5mb3JFYWNoKGZ1bmN0aW9uIChjb21taXRIb29rKSB7XG4gICAgICByZXR1cm4gY29tbWl0SG9vaygpO1xuICAgIH0pO1xuICB9XG59XG5cbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgUmVhY3RDdXJyZW50T3duZXIkMiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyLFxuICAgIElzU29tZVJlbmRlcmVyQWN0aW5nID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSXNTb21lUmVuZGVyZXJBY3Rpbmc7XG52YXIgTm9Db250ZXh0ID1cbi8qICAgICAgICAgICAgICovXG4wO1xudmFyIEJhdGNoZWRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgKi9cbjE7XG52YXIgRXZlbnRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgICAqL1xuMjtcbnZhciBEaXNjcmV0ZUV2ZW50Q29udGV4dCA9XG4vKiAgICAgICAgICovXG40O1xudmFyIExlZ2FjeVVuYmF0Y2hlZENvbnRleHQgPVxuLyogICAgICAgKi9cbjg7XG52YXIgUmVuZGVyQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMTY7XG52YXIgQ29tbWl0Q29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMzI7XG52YXIgUmV0cnlBZnRlckVycm9yID1cbi8qICAgICAgICovXG42NDtcbnZhciBSb290SW5jb21wbGV0ZSA9IDA7XG52YXIgUm9vdEZhdGFsRXJyb3JlZCA9IDE7XG52YXIgUm9vdEVycm9yZWQgPSAyO1xudmFyIFJvb3RTdXNwZW5kZWQgPSAzO1xudmFyIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgPSA0O1xudmFyIFJvb3RDb21wbGV0ZWQgPSA1OyAvLyBEZXNjcmliZXMgd2hlcmUgd2UgYXJlIGluIHRoZSBSZWFjdCBleGVjdXRpb24gc3RhY2tcblxudmFyIGV4ZWN1dGlvbkNvbnRleHQgPSBOb0NvbnRleHQ7IC8vIFRoZSByb290IHdlJ3JlIHdvcmtpbmcgb25cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7IC8vIFRoZSBmaWJlciB3ZSdyZSB3b3JraW5nIG9uXG5cbnZhciB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7IC8vIFRoZSBsYW5lcyB3ZSdyZSByZW5kZXJpbmdcblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gU3RhY2sgdGhhdCBhbGxvd3MgY29tcG9uZW50cyB0byBjaGFuZ2UgdGhlIHJlbmRlciBsYW5lcyBmb3IgaXRzIHN1YnRyZWVcbi8vIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgbGFuZXMgd2Ugc3RhcnRlZCB3b3JraW5nIG9uIGF0IHRoZSByb290LiBUaGUgb25seVxuLy8gY2FzZSB3aGVyZSBpdCdzIGRpZmZlcmVudCBmcm9tIGB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc2AgaXMgd2hlbiB3ZVxuLy8gZW50ZXIgYSBzdWJ0cmVlIHRoYXQgaXMgaGlkZGVuIGFuZCBuZWVkcyB0byBiZSB1bmhpZGRlbjogU3VzcGVuc2UgYW5kXG4vLyBPZmZzY3JlZW4gY29tcG9uZW50LlxuLy9cbi8vIE1vc3QgdGhpbmdzIGluIHRoZSB3b3JrIGxvb3Agc2hvdWxkIGRlYWwgd2l0aCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcy5cbi8vIE1vc3QgdGhpbmdzIGluIGJlZ2luL2NvbXBsZXRlIHBoYXNlcyBzaG91bGQgZGVhbCB3aXRoIHN1YnRyZWVSZW5kZXJMYW5lcy5cblxudmFyIHN1YnRyZWVSZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG52YXIgc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5vTGFuZXMpOyAvLyBXaGV0aGVyIHRvIHJvb3QgY29tcGxldGVkLCBlcnJvcmVkLCBzdXNwZW5kZWQsIGV0Yy5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5jb21wbGV0ZTsgLy8gQSBmYXRhbCBlcnJvciwgaWYgb25lIGlzIHRocm93blxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IG51bGw7IC8vIFwiSW5jbHVkZWRcIiBsYW5lcyByZWZlciB0byBsYW5lcyB0aGF0IHdlcmUgd29ya2VkIG9uIGR1cmluZyB0aGlzIHJlbmRlci4gSXQnc1xuLy8gc2xpZ2h0bHkgZGlmZmVyZW50IHRoYW4gYHJlbmRlckxhbmVzYCBiZWNhdXNlIGByZW5kZXJMYW5lc2AgY2FuIGNoYW5nZSBhcyB5b3Vcbi8vIGVudGVyIGFuZCBleGl0IGFuIE9mZnNjcmVlbiB0cmVlLiBUaGlzIHZhbHVlIGlzIHRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVuZGVyXG4vLyBsYW5lcyBmb3IgdGhlIGVudGlyZSByZW5kZXIgcGhhc2UuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzID0gTm9MYW5lczsgLy8gVGhlIHdvcmsgbGVmdCBvdmVyIGJ5IGNvbXBvbmVudHMgdGhhdCB3ZXJlIHZpc2l0ZWQgZHVyaW5nIHRoaXMgcmVuZGVyLiBPbmx5XG4vLyBpbmNsdWRlcyB1bnByb2Nlc3NlZCB1cGRhdGVzLCBub3Qgd29yayBpbiBiYWlsZWQgb3V0IGNoaWxkcmVuLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gTm9MYW5lczsgLy8gTGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgKGluIGFuIGludGVybGVhdmVkIGV2ZW50KSBkdXJpbmcgdGhpcyByZW5kZXIuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMgPSBOb0xhbmVzOyAvLyBMYW5lcyB0aGF0IHdlcmUgcGluZ2VkIChpbiBhbiBpbnRlcmxlYXZlZCBldmVudCkgZHVyaW5nIHRoaXMgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xudmFyIG1vc3RSZWNlbnRseVVwZGF0ZWRSb290ID0gbnVsbDsgLy8gVGhlIG1vc3QgcmVjZW50IHRpbWUgd2UgY29tbWl0dGVkIGEgZmFsbGJhY2suIFRoaXMgbGV0cyB1cyBlbnN1cmUgYSB0cmFpblxuLy8gbW9kZWwgd2hlcmUgd2UgZG9uJ3QgY29tbWl0IG5ldyBsb2FkaW5nIHN0YXRlcyBpbiB0b28gcXVpY2sgc3VjY2Vzc2lvbi5cblxudmFyIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPSAwO1xudmFyIEZBTExCQUNLX1RIUk9UVExFX01TID0gNTAwOyAvLyBUaGUgYWJzb2x1dGUgdGltZSBmb3Igd2hlbiB3ZSBzaG91bGQgc3RhcnQgZ2l2aW5nIHVwIG9uIHJlbmRlcmluZ1xuLy8gbW9yZSBhbmQgcHJlZmVyIENQVSBzdXNwZW5zZSBoZXVyaXN0aWNzIGluc3RlYWQuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID0gSW5maW5pdHk7IC8vIEhvdyBsb25nIGEgcmVuZGVyIGlzIHN1cHBvc2VkIHRvIHRha2UgYmVmb3JlIHdlIHN0YXJ0IGZvbGxvd2luZyBDUFVcbi8vIHN1c3BlbnNlIGhldXJpc3RpY3MgYW5kIG9wdCBvdXQgb2YgcmVuZGVyaW5nIG1vcmUgY29udGVudC5cblxudmFyIFJFTkRFUl9USU1FT1VUX01TID0gNTAwO1xuXG5mdW5jdGlvbiByZXNldFJlbmRlclRpbWVyKCkge1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID0gbm93KCkgKyBSRU5ERVJfVElNRU9VVF9NUztcbn1cblxuZnVuY3Rpb24gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpIHtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWU7XG59XG52YXIgbmV4dEVmZmVjdCA9IG51bGw7XG52YXIgaGFzVW5jYXVnaHRFcnJvciA9IGZhbHNlO1xudmFyIGZpcnN0VW5jYXVnaHRFcnJvciA9IG51bGw7XG52YXIgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsO1xudmFyIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG52YXIgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsO1xudmFyIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID0gTm9Qcmlvcml0eSQxO1xudmFyIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gTm9MYW5lcztcbnZhciBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQgPSBbXTtcbnZhciBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudCA9IFtdO1xudmFyIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBudWxsOyAvLyBVc2UgdGhlc2UgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIG5lc3RlZCB1cGRhdGVzXG5cbnZhciBORVNURURfVVBEQVRFX0xJTUlUID0gNTA7XG52YXIgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xudmFyIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGw7XG52YXIgTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUID0gNTA7XG52YXIgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDsgLy8gTWFya3MgdGhlIG5lZWQgdG8gcmVzY2hlZHVsZSBwZW5kaW5nIGludGVyYWN0aW9ucyBhdCB0aGVzZSBsYW5lc1xuLy8gZHVyaW5nIHRoZSBjb21taXQgcGhhc2UuIFRoaXMgZW5hYmxlcyB0aGVtIHRvIGJlIHRyYWNlZCBhY3Jvc3MgY29tcG9uZW50c1xuLy8gdGhhdCBzcGF3biBuZXcgd29yayBkdXJpbmcgcmVuZGVyLiBFLmcuIGhpZGRlbiBib3VuZGFyaWVzLCBzdXNwZW5kZWQgU1NSXG4vLyBoeWRyYXRpb24gb3IgU3VzcGVuc2VMaXN0LlxuLy8gVE9ETzogQ2FuIHVzZSBhIGJpdG1hc2sgaW5zdGVhZCBvZiBhbiBhcnJheVxuXG52YXIgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBudWxsOyAvLyBJZiB0d28gdXBkYXRlcyBhcmUgc2NoZWR1bGVkIHdpdGhpbiB0aGUgc2FtZSBldmVudCwgd2Ugc2hvdWxkIHRyZWF0IHRoZWlyXG4vLyBldmVudCB0aW1lcyBhcyBzaW11bHRhbmVvdXMsIGV2ZW4gaWYgdGhlIGFjdHVhbCBjbG9jayB0aW1lIGhhcyBhZHZhbmNlZFxuLy8gYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxsLlxuXG52YXIgY3VycmVudEV2ZW50VGltZSA9IE5vVGltZXN0YW1wO1xudmFyIGN1cnJlbnRFdmVudFdpcExhbmVzID0gTm9MYW5lcztcbnZhciBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgPSBOb0xhbmVzOyAvLyBEZXYgb25seSBmbGFnIHRoYXQgdHJhY2tzIGlmIHBhc3NpdmUgZWZmZWN0cyBhcmUgY3VycmVudGx5IGJlaW5nIGZsdXNoZWQuXG4vLyBXZSB3YXJuIGFib3V0IHN0YXRlIHVwZGF0ZXMgZm9yIHVubW91bnRlZCBjb21wb25lbnRzIGRpZmZlcmVudGx5IGluIHRoaXMgY2FzZS5cblxudmFyIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xudmFyIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSA9IG51bGw7XG52YXIgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gZmFsc2U7XG5mdW5jdGlvbiBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3QoKSB7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3Q7XG59XG5mdW5jdGlvbiByZXF1ZXN0RXZlbnRUaW1lKCkge1xuICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KSB7XG4gICAgLy8gV2UncmUgaW5zaWRlIFJlYWN0LCBzbyBpdCdzIGZpbmUgdG8gcmVhZCB0aGUgYWN0dWFsIHRpbWUuXG4gICAgcmV0dXJuIG5vdygpO1xuICB9IC8vIFdlJ3JlIG5vdCBpbnNpZGUgUmVhY3QsIHNvIHdlIG1heSBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgYnJvd3NlciBldmVudC5cblxuXG4gIGlmIChjdXJyZW50RXZlbnRUaW1lICE9PSBOb1RpbWVzdGFtcCkge1xuICAgIC8vIFVzZSB0aGUgc2FtZSBzdGFydCB0aW1lIGZvciBhbGwgdXBkYXRlcyB1bnRpbCB3ZSBlbnRlciBSZWFjdCBhZ2Fpbi5cbiAgICByZXR1cm4gY3VycmVudEV2ZW50VGltZTtcbiAgfSAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUgc2luY2UgUmVhY3QgeWllbGRlZC4gQ29tcHV0ZSBhIG5ldyBzdGFydCB0aW1lLlxuXG5cbiAgY3VycmVudEV2ZW50VGltZSA9IG5vdygpO1xuICByZXR1cm4gY3VycmVudEV2ZW50VGltZTtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKSB7XG4gIC8vIFNwZWNpYWwgY2FzZXNcbiAgdmFyIG1vZGUgPSBmaWJlci5tb2RlO1xuXG4gIGlmICgobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBTeW5jTGFuZTtcbiAgfSBlbHNlIGlmICgobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCkgPT09IEltbWVkaWF0ZVByaW9yaXR5JDEgPyBTeW5jTGFuZSA6IFN5bmNCYXRjaGVkTGFuZTtcbiAgfSAvLyBUaGUgYWxnb3JpdGhtIGZvciBhc3NpZ25pbmcgYW4gdXBkYXRlIHRvIGEgbGFuZSBzaG91bGQgYmUgc3RhYmxlIGZvciBhbGxcbiAgLy8gdXBkYXRlcyBhdCB0aGUgc2FtZSBwcmlvcml0eSB3aXRoaW4gdGhlIHNhbWUgZXZlbnQuIFRvIGRvIHRoaXMsIHRoZSBpbnB1dHNcbiAgLy8gdG8gdGhlIGFsZ29yaXRobSBtdXN0IGJlIHRoZSBzYW1lLiBGb3IgZXhhbXBsZSwgd2UgdXNlIHRoZSBgcmVuZGVyTGFuZXNgXG4gIC8vIHRvIGF2b2lkIGNob29zaW5nIGEgbGFuZSB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiByZW5kZXJpbmcuXG4gIC8vXG4gIC8vIEhvd2V2ZXIsIHRoZSBcImluY2x1ZGVkXCIgbGFuZXMgY291bGQgYmUgbXV0YXRlZCBpbiBiZXR3ZWVuIHVwZGF0ZXMgaW4gdGhlXG4gIC8vIHNhbWUgZXZlbnQsIGxpa2UgaWYgeW91IHBlcmZvcm0gYW4gdXBkYXRlIGluc2lkZSBgZmx1c2hTeW5jYC4gT3IgYW55IG90aGVyXG4gIC8vIGNvZGUgcGF0aCB0aGF0IG1pZ2h0IGNhbGwgYHByZXBhcmVGcmVzaFN0YWNrYC5cbiAgLy9cbiAgLy8gVGhlIHRyaWNrIHdlIHVzZSBpcyB0byBjYWNoZSB0aGUgZmlyc3Qgb2YgZWFjaCBvZiB0aGVzZSBpbnB1dHMgd2l0aGluIGFuXG4gIC8vIGV2ZW50LiBUaGVuIHJlc2V0IHRoZSBjYWNoZWQgdmFsdWVzIG9uY2Ugd2UgY2FuIGJlIHN1cmUgdGhlIGV2ZW50IGlzIG92ZXIuXG4gIC8vIE91ciBoZXVyaXN0aWMgZm9yIHRoYXQgaXMgd2hlbmV2ZXIgd2UgZW50ZXIgYSBjb25jdXJyZW50IHdvcmsgbG9vcC5cbiAgLy9cbiAgLy8gV2UnbGwgZG8gdGhlIHNhbWUgZm9yIGBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXNgIGJlbG93LlxuXG5cbiAgaWYgKGN1cnJlbnRFdmVudFdpcExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgY3VycmVudEV2ZW50V2lwTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzO1xuICB9XG5cbiAgdmFyIGlzVHJhbnNpdGlvbiA9IHJlcXVlc3RDdXJyZW50VHJhbnNpdGlvbigpICE9PSBOb1RyYW5zaXRpb247XG5cbiAgaWYgKGlzVHJhbnNpdGlvbikge1xuICAgIGlmIChjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyA9IG1vc3RSZWNlbnRseVVwZGF0ZWRSb290ICE9PSBudWxsID8gbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QucGVuZGluZ0xhbmVzIDogTm9MYW5lcztcbiAgICB9XG5cbiAgICByZXR1cm4gZmluZFRyYW5zaXRpb25MYW5lKGN1cnJlbnRFdmVudFdpcExhbmVzLCBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMpO1xuICB9IC8vIFRPRE86IFJlbW92ZSB0aGlzIGRlcGVuZGVuY3kgb24gdGhlIFNjaGVkdWxlciBwcmlvcml0eS5cbiAgLy8gVG8gZG8gdGhhdCwgd2UncmUgcmVwbGFjaW5nIGl0IHdpdGggYW4gdXBkYXRlIGxhbmUgcHJpb3JpdHkuXG5cblxuICB2YXIgc2NoZWR1bGVyUHJpb3JpdHkgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpOyAvLyBUaGUgb2xkIGJlaGF2aW9yIHdhcyB1c2luZyB0aGUgcHJpb3JpdHkgbGV2ZWwgb2YgdGhlIFNjaGVkdWxlci5cbiAgLy8gVGhpcyBjb3VwbGVzIFJlYWN0IHRvIHRoZSBTY2hlZHVsZXIgaW50ZXJuYWxzLCBzbyB3ZSdyZSByZXBsYWNpbmcgaXRcbiAgLy8gd2l0aCB0aGUgY3VycmVudFVwZGF0ZUxhbmVQcmlvcml0eSBhYm92ZS4gQXMgYW4gZXhhbXBsZSBvZiBob3cgdGhpc1xuICAvLyBjb3VsZCBiZSBwcm9ibGVtYXRpYywgaWYgd2UncmUgbm90IGluc2lkZSBgU2NoZWR1bGVyLnJ1bldpdGhQcmlvcml0eWAsXG4gIC8vIHRoZW4gd2UnbGwgZ2V0IHRoZSBwcmlvcml0eSBvZiB0aGUgY3VycmVudCBydW5uaW5nIFNjaGVkdWxlciB0YXNrLFxuICAvLyB3aGljaCBpcyBwcm9iYWJseSBub3Qgd2hhdCB3ZSB3YW50LlxuXG4gIHZhciBsYW5lO1xuXG4gIGlmICggLy8gVE9ETzogVGVtcG9yYXJ5LiBXZSdyZSByZW1vdmluZyB0aGUgY29uY2VwdCBvZiBkaXNjcmV0ZSB1cGRhdGVzLlxuICAoZXhlY3V0aW9uQ29udGV4dCAmIERpc2NyZXRlRXZlbnRDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmIHNjaGVkdWxlclByaW9yaXR5ID09PSBVc2VyQmxvY2tpbmdQcmlvcml0eSQyKSB7XG4gICAgbGFuZSA9IGZpbmRVcGRhdGVMYW5lKElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHksIGN1cnJlbnRFdmVudFdpcExhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2NoZWR1bGVyTGFuZVByaW9yaXR5ID0gc2NoZWR1bGVyUHJpb3JpdHlUb0xhbmVQcmlvcml0eShzY2hlZHVsZXJQcmlvcml0eSk7XG5cbiAgICBsYW5lID0gZmluZFVwZGF0ZUxhbmUoc2NoZWR1bGVyTGFuZVByaW9yaXR5LCBjdXJyZW50RXZlbnRXaXBMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gbGFuZTtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdFJldHJ5TGFuZShmaWJlcikge1xuICAvLyBUaGlzIGlzIGEgZm9yayBvZiBgcmVxdWVzdFVwZGF0ZUxhbmVgIGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgU3VzcGVuc2VcbiAgLy8gXCJyZXRyaWVzXCIgXHUyMDE0IGEgc3BlY2lhbCB1cGRhdGUgdGhhdCBhdHRlbXB0cyB0byBmbGlwIGEgU3VzcGVuc2UgYm91bmRhcnlcbiAgLy8gZnJvbSBpdHMgcGxhY2Vob2xkZXIgc3RhdGUgdG8gaXRzIHByaW1hcnkvcmVzb2x2ZWQgc3RhdGUuXG4gIC8vIFNwZWNpYWwgY2FzZXNcbiAgdmFyIG1vZGUgPSBmaWJlci5tb2RlO1xuXG4gIGlmICgobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBTeW5jTGFuZTtcbiAgfSBlbHNlIGlmICgobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCkgPT09IEltbWVkaWF0ZVByaW9yaXR5JDEgPyBTeW5jTGFuZSA6IFN5bmNCYXRjaGVkTGFuZTtcbiAgfSAvLyBTZWUgYHJlcXVlc3RVcGRhdGVMYW5lYCBmb3IgZXhwbGFuYXRpb24gb2YgYGN1cnJlbnRFdmVudFdpcExhbmVzYFxuXG5cbiAgaWYgKGN1cnJlbnRFdmVudFdpcExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgY3VycmVudEV2ZW50V2lwTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzO1xuICB9XG5cbiAgcmV0dXJuIGZpbmRSZXRyeUxhbmUoY3VycmVudEV2ZW50V2lwTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSkge1xuICBjaGVja0Zvck5lc3RlZFVwZGF0ZXMoKTtcbiAgd2FybkFib3V0UmVuZGVyUGhhc2VVcGRhdGVzSW5ERVYoZmliZXIpO1xuICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCBsYW5lKTtcblxuICBpZiAocm9vdCA9PT0gbnVsbCkge1xuICAgIHdhcm5BYm91dFVwZGF0ZU9uVW5tb3VudGVkRmliZXJJbkRFVihmaWJlcik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTWFyayB0aGF0IHRoZSByb290IGhhcyBhIHBlbmRpbmcgdXBkYXRlLlxuXG5cbiAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIGxhbmUsIGV2ZW50VGltZSk7XG5cbiAgaWYgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCkge1xuICAgIC8vIFJlY2VpdmVkIGFuIHVwZGF0ZSB0byBhIHRyZWUgdGhhdCdzIGluIHRoZSBtaWRkbGUgb2YgcmVuZGVyaW5nLiBNYXJrXG4gICAgLy8gdGhhdCB0aGVyZSB3YXMgYW4gaW50ZXJsZWF2ZWQgdXBkYXRlIHdvcmsgb24gdGhpcyByb290LiBVbmxlc3MgdGhlXG4gICAgLy8gYGRlZmVyUmVuZGVyUGhhc2VVcGRhdGVUb05leHRCYXRjaGAgZmxhZyBpcyBvZmYgYW5kIHRoaXMgaXMgYSByZW5kZXJcbiAgICAvLyBwaGFzZSB1cGRhdGUuIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3QgdHJlYXQgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgYXMgaWZcbiAgICAvLyB0aGV5IHdlcmUgaW50ZXJsZWF2ZWQsIGZvciBiYWNrd2FyZHMgY29tcGF0IHJlYXNvbnMuXG4gICAge1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMsIGxhbmUpO1xuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5KSB7XG4gICAgICAvLyBUaGUgcm9vdCBhbHJlYWR5IHN1c3BlbmRlZCB3aXRoIGEgZGVsYXksIHdoaWNoIG1lYW5zIHRoaXMgcmVuZGVyXG4gICAgICAvLyBkZWZpbml0ZWx5IHdvbid0IGZpbmlzaC4gU2luY2Ugd2UgaGF2ZSBhIG5ldyB1cGRhdGUsIGxldCdzIG1hcmsgaXQgYXNcbiAgICAgIC8vIHN1c3BlbmRlZCBub3csIHJpZ2h0IGJlZm9yZSBtYXJraW5nIHRoZSBpbmNvbWluZyB1cGRhdGUuIFRoaXMgaGFzIHRoZVxuICAgICAgLy8gZWZmZWN0IG9mIGludGVycnVwdGluZyB0aGUgY3VycmVudCByZW5kZXIgYW5kIHN3aXRjaGluZyB0byB0aGUgdXBkYXRlLlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHRoaXMgZG9lc24ndCBvdmVycmlkZSBwaW5ncyB0aGF0IGhhcHBlbiB3aGlsZSB3ZSd2ZVxuICAgICAgLy8gYWxyZWFkeSBzdGFydGVkIHJlbmRlcmluZy5cbiAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiByZXF1ZXN0VXBkYXRlTGFuZVByaW9yaXR5IGFsc28gcmVhZHMgdGhlIHByaW9yaXR5LiBQYXNzIHRoZVxuICAvLyBwcmlvcml0eSBhcyBhbiBhcmd1bWVudCB0byB0aGF0IGZ1bmN0aW9uIGFuZCB0aGlzIG9uZS5cblxuXG4gIHZhciBwcmlvcml0eUxldmVsID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcblxuICBpZiAobGFuZSA9PT0gU3luY0xhbmUpIHtcbiAgICBpZiAoIC8vIENoZWNrIGlmIHdlJ3JlIGluc2lkZSB1bmJhdGNoZWRVcGRhdGVzXG4gICAgKGV4ZWN1dGlvbkNvbnRleHQgJiBMZWdhY3lVbmJhdGNoZWRDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IHJlbmRlcmluZ1xuICAgIChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gUmVnaXN0ZXIgcGVuZGluZyBpbnRlcmFjdGlvbnMgb24gdGhlIHJvb3QgdG8gYXZvaWQgbG9zaW5nIHRyYWNlZCBpbnRlcmFjdGlvbiBkYXRhLlxuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpOyAvLyBUaGlzIGlzIGEgbGVnYWN5IGVkZ2UgY2FzZS4gVGhlIGluaXRpYWwgbW91bnQgb2YgYSBSZWFjdERPTS5yZW5kZXItZWRcbiAgICAgIC8vIHJvb3QgaW5zaWRlIG9mIGJhdGNoZWRVcGRhdGVzIHNob3VsZCBiZSBzeW5jaHJvbm91cywgYnV0IGxheW91dCB1cGRhdGVzXG4gICAgICAvLyBzaG91bGQgYmUgZGVmZXJyZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUgYmF0Y2guXG5cbiAgICAgIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSk7XG5cbiAgICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgLy8gRmx1c2ggdGhlIHN5bmNocm9ub3VzIHdvcmsgbm93LCB1bmxlc3Mgd2UncmUgYWxyZWFkeSB3b3JraW5nIG9yIGluc2lkZVxuICAgICAgICAvLyBhIGJhdGNoLiBUaGlzIGlzIGludGVudGlvbmFsbHkgaW5zaWRlIHNjaGVkdWxlVXBkYXRlT25GaWJlciBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHNjaGVkdWxlQ2FsbGJhY2tGb3JGaWJlciB0byBwcmVzZXJ2ZSB0aGUgYWJpbGl0eSB0byBzY2hlZHVsZSBhIGNhbGxiYWNrXG4gICAgICAgIC8vIHdpdGhvdXQgaW1tZWRpYXRlbHkgZmx1c2hpbmcgaXQuIFdlIG9ubHkgZG8gdGhpcyBmb3IgdXNlci1pbml0aWF0ZWRcbiAgICAgICAgLy8gdXBkYXRlcywgdG8gcHJlc2VydmUgaGlzdG9yaWNhbCBiZWhhdmlvciBvZiBsZWdhY3kgbW9kZS5cbiAgICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFNjaGVkdWxlIGEgZGlzY3JldGUgdXBkYXRlIGJ1dCBvbmx5IGlmIGl0J3Mgbm90IFN5bmMuXG4gICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgRGlzY3JldGVFdmVudENvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgKCAvLyBPbmx5IHVwZGF0ZXMgYXQgdXNlci1ibG9ja2luZyBwcmlvcml0eSBvciBncmVhdGVyIGFyZSBjb25zaWRlcmVkXG4gICAgLy8gZGlzY3JldGUsIGV2ZW4gaW5zaWRlIGEgZGlzY3JldGUgZXZlbnQuXG4gICAgcHJpb3JpdHlMZXZlbCA9PT0gVXNlckJsb2NraW5nUHJpb3JpdHkkMiB8fCBwcmlvcml0eUxldmVsID09PSBJbW1lZGlhdGVQcmlvcml0eSQxKSkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGEgZGlzY3JldGUgZXZlbnQuIFRyYWNrIHRoZSBsb3dlc3QgcHJpb3JpdHlcbiAgICAgIC8vIGRpc2NyZXRlIHVwZGF0ZSBwZXIgcm9vdCBzbyB3ZSBjYW4gZmx1c2ggdGhlbSBlYXJseSwgaWYgbmVlZGVkLlxuICAgICAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPT09IG51bGwpIHtcbiAgICAgICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9IG5ldyBTZXQoW3Jvb3RdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMuYWRkKHJvb3QpO1xuICAgICAgfVxuICAgIH0gLy8gU2NoZWR1bGUgb3RoZXIgdXBkYXRlcyBhZnRlciBpbiBjYXNlIHRoZSBjYWxsYmFjayBpcyBzeW5jLlxuXG5cbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSk7XG4gIH0gLy8gV2UgdXNlIHRoaXMgd2hlbiBhc3NpZ25pbmcgYSBsYW5lIGZvciBhIHRyYW5zaXRpb24gaW5zaWRlXG4gIC8vIGByZXF1ZXN0VXBkYXRlTGFuZWAuIFdlIGFzc3VtZSBpdCdzIHRoZSBzYW1lIGFzIHRoZSByb290IGJlaW5nIHVwZGF0ZWQsXG4gIC8vIHNpbmNlIGluIHRoZSBjb21tb24gY2FzZSBvZiBhIHNpbmdsZSByb290IGFwcCBpdCBwcm9iYWJseSBpcy4gSWYgaXQncyBub3RcbiAgLy8gdGhlIHNhbWUgcm9vdCwgdGhlbiBpdCdzIG5vdCBhIGh1Z2UgZGVhbCwgd2UganVzdCBtaWdodCBiYXRjaCBtb3JlIHN0dWZmXG4gIC8vIHRvZ2V0aGVyIG1vcmUgdGhhbiBuZWNlc3NhcnkuXG5cblxuICBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCA9IHJvb3Q7XG59IC8vIFRoaXMgaXMgc3BsaXQgaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIHdlIGNhbiBtYXJrIGEgZmliZXIgd2l0aCBwZW5kaW5nXG4vLyB3b3JrIHdpdGhvdXQgdHJlYXRpbmcgaXQgYXMgYSB0eXBpY2FsIHVwZGF0ZSB0aGF0IG9yaWdpbmF0ZXMgZnJvbSBhbiBldmVudDtcbi8vIGUuZy4gcmV0cnlpbmcgYSBTdXNwZW5zZSBib3VuZGFyeSBpc24ndCBhbiB1cGRhdGUsIGJ1dCBpdCBkb2VzIHNjaGVkdWxlIHdvcmtcbi8vIG9uIGEgZmliZXIuXG5cbmZ1bmN0aW9uIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHNvdXJjZUZpYmVyLCBsYW5lKSB7XG4gIC8vIFVwZGF0ZSB0aGUgc291cmNlIGZpYmVyJ3MgbGFuZXNcbiAgc291cmNlRmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKHNvdXJjZUZpYmVyLmxhbmVzLCBsYW5lKTtcbiAgdmFyIGFsdGVybmF0ZSA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIGxhbmUpO1xuICB9XG5cbiAge1xuICAgIGlmIChhbHRlcm5hdGUgPT09IG51bGwgJiYgKHNvdXJjZUZpYmVyLmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzKSB7XG4gICAgICB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKHNvdXJjZUZpYmVyKTtcbiAgICB9XG4gIH0gLy8gV2FsayB0aGUgcGFyZW50IHBhdGggdG8gdGhlIHJvb3QgYW5kIHVwZGF0ZSB0aGUgY2hpbGQgZXhwaXJhdGlvbiB0aW1lLlxuXG5cbiAgdmFyIG5vZGUgPSBzb3VyY2VGaWJlcjtcbiAgdmFyIHBhcmVudCA9IHNvdXJjZUZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgcGFyZW50LmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKHBhcmVudC5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICBhbHRlcm5hdGUgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICBpZiAoKHBhcmVudC5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoc291cmNlRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IHBhcmVudDtcbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG5cbiAgaWYgKG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgIHZhciByb290ID0gbm9kZS5zdGF0ZU5vZGU7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0gLy8gVXNlIHRoaXMgZnVuY3Rpb24gdG8gc2NoZWR1bGUgYSB0YXNrIGZvciBhIHJvb3QuIFRoZXJlJ3Mgb25seSBvbmUgdGFzayBwZXJcbi8vIHJvb3Q7IGlmIGEgdGFzayB3YXMgYWxyZWFkeSBzY2hlZHVsZWQsIHdlJ2xsIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgcHJpb3JpdHlcbi8vIG9mIHRoZSBleGlzdGluZyB0YXNrIGlzIHRoZSBzYW1lIGFzIHRoZSBwcmlvcml0eSBvZiB0aGUgbmV4dCBsZXZlbCB0aGF0IHRoZVxuLy8gcm9vdCBoYXMgd29yayBvbi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb24gZXZlcnkgdXBkYXRlLCBhbmQgcmlnaHQgYmVmb3JlXG4vLyBleGl0aW5nIGEgdGFzay5cblxuXG5mdW5jdGlvbiBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgY3VycmVudFRpbWUpIHtcbiAgdmFyIGV4aXN0aW5nQ2FsbGJhY2tOb2RlID0gcm9vdC5jYWxsYmFja05vZGU7IC8vIENoZWNrIGlmIGFueSBsYW5lcyBhcmUgYmVpbmcgc3RhcnZlZCBieSBvdGhlciB3b3JrLiBJZiBzbywgbWFyayB0aGVtIGFzXG4gIC8vIGV4cGlyZWQgc28gd2Uga25vdyB0byB3b3JrIG9uIHRob3NlIG5leHQuXG5cbiAgbWFya1N0YXJ2ZWRMYW5lc0FzRXhwaXJlZChyb290LCBjdXJyZW50VGltZSk7IC8vIERldGVybWluZSB0aGUgbmV4dCBsYW5lcyB0byB3b3JrIG9uLCBhbmQgdGhlaXIgcHJpb3JpdHkuXG5cbiAgdmFyIG5leHRMYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgPyB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA6IE5vTGFuZXMpOyAvLyBUaGlzIHJldHVybnMgdGhlIHByaW9yaXR5IGxldmVsIGNvbXB1dGVkIGR1cmluZyB0aGUgYGdldE5leHRMYW5lc2AgY2FsbC5cblxuICB2YXIgbmV3Q2FsbGJhY2tQcmlvcml0eSA9IHJldHVybk5leHRMYW5lc1ByaW9yaXR5KCk7XG5cbiAgaWYgKG5leHRMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogVGhlcmUncyBub3RoaW5nIHRvIHdvcmsgb24uXG4gICAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxDYWxsYmFjayhleGlzdGluZ0NhbGxiYWNrTm9kZSk7XG4gICAgICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgICByb290LmNhbGxiYWNrUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH0gLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBleGlzdGluZyB0YXNrLiBXZSBtYXkgYmUgYWJsZSB0byByZXVzZSBpdC5cblxuXG4gIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhciBleGlzdGluZ0NhbGxiYWNrUHJpb3JpdHkgPSByb290LmNhbGxiYWNrUHJpb3JpdHk7XG5cbiAgICBpZiAoZXhpc3RpbmdDYWxsYmFja1ByaW9yaXR5ID09PSBuZXdDYWxsYmFja1ByaW9yaXR5KSB7XG4gICAgICAvLyBUaGUgcHJpb3JpdHkgaGFzbid0IGNoYW5nZWQuIFdlIGNhbiByZXVzZSB0aGUgZXhpc3RpbmcgdGFzay4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFRoZSBwcmlvcml0eSBjaGFuZ2VkLiBDYW5jZWwgdGhlIGV4aXN0aW5nIGNhbGxiYWNrLiBXZSdsbCBzY2hlZHVsZSBhIG5ld1xuICAgIC8vIG9uZSBiZWxvdy5cblxuXG4gICAgY2FuY2VsQ2FsbGJhY2soZXhpc3RpbmdDYWxsYmFja05vZGUpO1xuICB9IC8vIFNjaGVkdWxlIGEgbmV3IGNhbGxiYWNrLlxuXG5cbiAgdmFyIG5ld0NhbGxiYWNrTm9kZTtcblxuICBpZiAobmV3Q2FsbGJhY2tQcmlvcml0eSA9PT0gU3luY0xhbmVQcmlvcml0eSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogU3luYyBSZWFjdCBjYWxsYmFja3MgYXJlIHNjaGVkdWxlZCBvbiBhIHNwZWNpYWxcbiAgICAvLyBpbnRlcm5hbCBxdWV1ZVxuICAgIG5ld0NhbGxiYWNrTm9kZSA9IHNjaGVkdWxlU3luY0NhbGxiYWNrKHBlcmZvcm1TeW5jV29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpKTtcbiAgfSBlbHNlIGlmIChuZXdDYWxsYmFja1ByaW9yaXR5ID09PSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eSkge1xuICAgIG5ld0NhbGxiYWNrTm9kZSA9IHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgcGVyZm9ybVN5bmNXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCkpO1xuICB9IGVsc2Uge1xuICAgIHZhciBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gbGFuZVByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShuZXdDYWxsYmFja1ByaW9yaXR5KTtcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZUNhbGxiYWNrKHNjaGVkdWxlclByaW9yaXR5TGV2ZWwsIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpKTtcbiAgfVxuXG4gIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IG5ld0NhbGxiYWNrUHJpb3JpdHk7XG4gIHJvb3QuY2FsbGJhY2tOb2RlID0gbmV3Q2FsbGJhY2tOb2RlO1xufSAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgZXZlcnkgY29uY3VycmVudCB0YXNrLCBpLmUuIGFueXRoaW5nIHRoYXRcbi8vIGdvZXMgdGhyb3VnaCBTY2hlZHVsZXIuXG5cblxuZnVuY3Rpb24gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290KHJvb3QpIHtcbiAgLy8gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBhIFJlYWN0IGV2ZW50LCB3ZSBjYW4gY2xlYXIgdGhlIGN1cnJlbnRcbiAgLy8gZXZlbnQgdGltZS4gVGhlIG5leHQgdXBkYXRlIHdpbGwgY29tcHV0ZSBhIG5ldyBldmVudCB0aW1lLlxuICBjdXJyZW50RXZlbnRUaW1lID0gTm9UaW1lc3RhbXA7XG4gIGN1cnJlbnRFdmVudFdpcExhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzID0gTm9MYW5lcztcblxuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIgKTtcbiAgICB9XG4gIH0gLy8gRmx1c2ggYW55IHBlbmRpbmcgcGFzc2l2ZSBlZmZlY3RzIGJlZm9yZSBkZWNpZGluZyB3aGljaCBsYW5lcyB0byB3b3JrIG9uLFxuICAvLyBpbiBjYXNlIHRoZXkgc2NoZWR1bGUgYWRkaXRpb25hbCB3b3JrLlxuXG5cbiAgdmFyIG9yaWdpbmFsQ2FsbGJhY2tOb2RlID0gcm9vdC5jYWxsYmFja05vZGU7XG4gIHZhciBkaWRGbHVzaFBhc3NpdmVFZmZlY3RzID0gZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuXG4gIGlmIChkaWRGbHVzaFBhc3NpdmVFZmZlY3RzKSB7XG4gICAgLy8gU29tZXRoaW5nIGluIHRoZSBwYXNzaXZlIGVmZmVjdCBwaGFzZSBtYXkgaGF2ZSBjYW5jZWxlZCB0aGUgY3VycmVudCB0YXNrLlxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXNrIG5vZGUgZm9yIHRoaXMgcm9vdCB3YXMgY2hhbmdlZC5cbiAgICBpZiAocm9vdC5jYWxsYmFja05vZGUgIT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlKSB7XG4gICAgICAvLyBUaGUgY3VycmVudCB0YXNrIHdhcyBjYW5jZWxlZC4gRXhpdC4gV2UgZG9uJ3QgbmVlZCB0byBjYWxsXG4gICAgICAvLyBgZW5zdXJlUm9vdElzU2NoZWR1bGVkYCBiZWNhdXNlIHRoZSBjaGVjayBhYm92ZSBpbXBsaWVzIGVpdGhlciB0aGF0XG4gICAgICAvLyB0aGVyZSdzIGEgbmV3IHRhc2ssIG9yIHRoYXQgdGhlcmUncyBubyByZW1haW5pbmcgd29yayBvbiB0aGlzIHJvb3QuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gLy8gRGV0ZXJtaW5lIHRoZSBuZXh0IGV4cGlyYXRpb24gdGltZSB0byB3b3JrIG9uLCB1c2luZyB0aGUgZmllbGRzIHN0b3JlZFxuICAvLyBvbiB0aGUgcm9vdC5cblxuXG4gIHZhciBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgPyB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA6IE5vTGFuZXMpO1xuXG4gIGlmIChsYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIERlZmVuc2l2ZSBjb2RpbmcuIFRoaXMgaXMgbmV2ZXIgZXhwZWN0ZWQgdG8gaGFwcGVuLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGV4aXRTdGF0dXMgPSByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcyk7XG5cbiAgaWYgKGluY2x1ZGVzU29tZUxhbmUod29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKSkge1xuICAgIC8vIFRoZSByZW5kZXIgaW5jbHVkZWQgbGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgLy8gRm9yIGV4YW1wbGUsIHdoZW4gdW5oaWRpbmcgYSBoaWRkZW4gdHJlZSwgd2UgaW5jbHVkZSBhbGwgdGhlIGxhbmVzXG4gICAgLy8gdGhhdCB3ZXJlIHByZXZpb3VzbHkgc2tpcHBlZCB3aGVuIHRoZSB0cmVlIHdhcyBoaWRkZW4uIFRoYXQgc2V0IG9mXG4gICAgLy8gbGFuZXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgbGFuZXMgd2Ugc3RhcnRlZCByZW5kZXJpbmcgd2l0aC5cbiAgICAvL1xuICAgIC8vIFNvIHdlJ2xsIHRocm93IG91dCB0aGUgY3VycmVudCB3b3JrIGFuZCByZXN0YXJ0LlxuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICB9IGVsc2UgaWYgKGV4aXRTdGF0dXMgIT09IFJvb3RJbmNvbXBsZXRlKSB7XG4gICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RFcnJvcmVkKSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0IHw9IFJldHJ5QWZ0ZXJFcnJvcjsgLy8gSWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGh5ZHJhdGlvbixcbiAgICAgIC8vIGRpc2NhcmQgc2VydmVyIHJlc3BvbnNlIGFuZCBmYWxsIGJhY2sgdG8gY2xpZW50IHNpZGUgcmVuZGVyLlxuXG4gICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgIHJvb3QuaHlkcmF0ZSA9IGZhbHNlO1xuICAgICAgICBjbGVhckNvbnRhaW5lcihyb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgfSAvLyBJZiBzb21ldGhpbmcgdGhyZXcgYW4gZXJyb3IsIHRyeSByZW5kZXJpbmcgb25lIG1vcmUgdGltZS4gV2UnbGwgcmVuZGVyXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRvIGJsb2NrIGNvbmN1cnJlbnQgZGF0YSBtdXRhdGlvbnMsIGFuZCB3ZSdsbCBpbmNsdWRlc1xuICAgICAgLy8gYWxsIHBlbmRpbmcgdXBkYXRlcyBhcmUgaW5jbHVkZWQuIElmIGl0IHN0aWxsIGZhaWxzIGFmdGVyIHRoZSBzZWNvbmRcbiAgICAgIC8vIGF0dGVtcHQsIHdlJ2xsIGdpdmUgdXAgYW5kIGNvbW1pdCB0aGUgcmVzdWx0aW5nIHRyZWUuXG5cblxuICAgICAgbGFuZXMgPSBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihyb290KTtcblxuICAgICAgaWYgKGxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICAgIHZhciBmYXRhbEVycm9yID0gd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvcjtcbiAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICAgICAgdGhyb3cgZmF0YWxFcnJvcjtcbiAgICB9IC8vIFdlIG5vdyBoYXZlIGEgY29uc2lzdGVudCB0cmVlLiBUaGUgbmV4dCBzdGVwIGlzIGVpdGhlciB0byBjb21taXQgaXQsXG4gICAgLy8gb3IsIGlmIHNvbWV0aGluZyBzdXNwZW5kZWQsIHdhaXQgdG8gY29tbWl0IGl0IGFmdGVyIGEgdGltZW91dC5cblxuXG4gICAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGU7XG4gICAgcm9vdC5maW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcms7XG4gICAgcm9vdC5maW5pc2hlZExhbmVzID0gbGFuZXM7XG4gICAgZmluaXNoQ29uY3VycmVudFJlbmRlcihyb290LCBleGl0U3RhdHVzLCBsYW5lcyk7XG4gIH1cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuXG4gIGlmIChyb290LmNhbGxiYWNrTm9kZSA9PT0gb3JpZ2luYWxDYWxsYmFja05vZGUpIHtcbiAgICAvLyBUaGUgdGFzayBub2RlIHNjaGVkdWxlZCBmb3IgdGhpcyByb290IGlzIHRoZSBzYW1lIG9uZSB0aGF0J3NcbiAgICAvLyBjdXJyZW50bHkgZXhlY3V0ZWQuIE5lZWQgdG8gcmV0dXJuIGEgY29udGludWF0aW9uLlxuICAgIHJldHVybiBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QuYmluZChudWxsLCByb290KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hDb25jdXJyZW50UmVuZGVyKHJvb3QsIGV4aXRTdGF0dXMsIGxhbmVzKSB7XG4gIHN3aXRjaCAoZXhpdFN0YXR1cykge1xuICAgIGNhc2UgUm9vdEluY29tcGxldGU6XG4gICAgY2FzZSBSb290RmF0YWxFcnJvcmVkOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiUm9vdCBkaWQgbm90IGNvbXBsZXRlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgLy8gRmxvdyBrbm93cyBhYm91dCBpbnZhcmlhbnQsIHNvIGl0IGNvbXBsYWlucyBpZiBJIGFkZCBhIGJyZWFrXG4gICAgLy8gc3RhdGVtZW50LCBidXQgZXNsaW50IGRvZXNuJ3Qga25vdyBhYm91dCBpbnZhcmlhbnQsIHNvIGl0IGNvbXBsYWluc1xuICAgIC8vIGlmIEkgZG8uIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuXG4gICAgY2FzZSBSb290RXJyb3JlZDpcbiAgICAgIHtcbiAgICAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBhdHRlbXB0ZWQgdG8gcmV0cnkgdGhpcyB0cmVlLiBJZiB3ZSByZWFjaGVkXG4gICAgICAgIC8vIHRoaXMgcG9pbnQsIGl0IGVycm9yZWQgYWdhaW4uIENvbW1pdCBpdC5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RTdXNwZW5kZWQ6XG4gICAgICB7XG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpOyAvLyBXZSBoYXZlIGFuIGFjY2VwdGFibGUgbG9hZGluZyBzdGF0ZS4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlXG4gICAgICAgIC8vIHNob3VsZCBpbW1lZGlhdGVseSBjb21taXQgaXQgb3Igd2FpdCBhIGJpdC5cblxuICAgICAgICBpZiAoaW5jbHVkZXNPbmx5UmV0cmllcyhsYW5lcykgJiYgLy8gZG8gbm90IGRlbGF5IGlmIHdlJ3JlIGluc2lkZSBhbiBhY3QoKSBzY29wZVxuICAgICAgICAhc2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWKCkpIHtcbiAgICAgICAgICAvLyBUaGlzIHJlbmRlciBvbmx5IGluY2x1ZGVkIHJldHJpZXMsIG5vIHVwZGF0ZXMuIFRocm90dGxlIGNvbW1pdHRpbmdcbiAgICAgICAgICAvLyByZXRyaWVzIHNvIHRoYXQgd2UgZG9uJ3Qgc2hvdyB0b28gbWFueSBsb2FkaW5nIHN0YXRlcyB0b28gcXVpY2tseS5cbiAgICAgICAgICB2YXIgbXNVbnRpbFRpbWVvdXQgPSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lICsgRkFMTEJBQ0tfVEhST1RUTEVfTVMgLSBub3coKTsgLy8gRG9uJ3QgYm90aGVyIHdpdGggYSB2ZXJ5IHNob3J0IHN1c3BlbnNlIHRpbWUuXG5cbiAgICAgICAgICBpZiAobXNVbnRpbFRpbWVvdXQgPiAxMCkge1xuICAgICAgICAgICAgdmFyIG5leHRMYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBOb0xhbmVzKTtcblxuICAgICAgICAgICAgaWYgKG5leHRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgICAgICAvLyBUaGVyZSdzIGFkZGl0aW9uYWwgd29yayBvbiB0aGlzIHJvb3QuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICAgICAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhzdXNwZW5kZWRMYW5lcywgbGFuZXMpKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBwcmVmZXIgdG8gcmVuZGVyIHRoZSBmYWxsYmFjayBvZiBhdCB0aGUgbGFzdFxuICAgICAgICAgICAgICAvLyBzdXNwZW5kZWQgbGV2ZWwuIFBpbmcgdGhlIGxhc3Qgc3VzcGVuZGVkIGxldmVsIHRvIHRyeVxuICAgICAgICAgICAgICAvLyByZW5kZXJpbmcgaXQgYWdhaW4uXG4gICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHRoZSBzdXNwZW5kZWQgbGFuZXMgYXJlIElkbGU/IFNob3VsZCBub3QgcmVzdGFydC5cbiAgICAgICAgICAgICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICAgICAgICAgICAgbWFya1Jvb3RQaW5nZWQocm9vdCwgc3VzcGVuZGVkTGFuZXMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gLy8gVGhlIHJlbmRlciBpcyBzdXNwZW5kZWQsIGl0IGhhc24ndCB0aW1lZCBvdXQsIGFuZCB0aGVyZSdzIG5vXG4gICAgICAgICAgICAvLyBsb3dlciBwcmlvcml0eSB3b3JrIHRvIGRvLiBJbnN0ZWFkIG9mIGNvbW1pdHRpbmcgdGhlIGZhbGxiYWNrXG4gICAgICAgICAgICAvLyBpbW1lZGlhdGVseSwgd2FpdCBmb3IgbW9yZSBkYXRhIHRvIGFycml2ZS5cblxuXG4gICAgICAgICAgICByb290LnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoY29tbWl0Um9vdC5iaW5kKG51bGwsIHJvb3QpLCBtc1VudGlsVGltZW91dCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVGhlIHdvcmsgZXhwaXJlZC4gQ29tbWl0IGltbWVkaWF0ZWx5LlxuXG5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk6XG4gICAgICB7XG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyhsYW5lcykpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgdHJhbnNpdGlvbiwgc28gd2Ugc2hvdWxkIGV4aXQgd2l0aG91dCBjb21taXR0aW5nIGFcbiAgICAgICAgICAvLyBwbGFjZWhvbGRlciBhbmQgd2l0aG91dCBzY2hlZHVsaW5nIGEgdGltZW91dC4gRGVsYXkgaW5kZWZpbml0ZWx5XG4gICAgICAgICAgLy8gdW50aWwgd2UgcmVjZWl2ZSBtb3JlIGRhdGEuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB0cmFuc2l0aW9uLCBidXQgd2UgZGlkIHRyaWdnZXIgYW4gYXZvaWRlZCBzdGF0ZS5cbiAgICAgICAgICAvLyBTY2hlZHVsZSBhIHBsYWNlaG9sZGVyIHRvIGRpc3BsYXkgYWZ0ZXIgYSBzaG9ydCBkZWxheSwgdXNpbmcgdGhlIEp1c3RcbiAgICAgICAgICAvLyBOb3RpY2VhYmxlIERpZmZlcmVuY2UuXG4gICAgICAgICAgLy8gVE9ETzogSXMgdGhlIEpORCBvcHRpbWl6YXRpb24gd29ydGggdGhlIGFkZGVkIGNvbXBsZXhpdHk/IElmIHRoaXMgaXNcbiAgICAgICAgICAvLyB0aGUgb25seSByZWFzb24gd2UgdHJhY2sgdGhlIGV2ZW50IHRpbWUsIHRoZW4gcHJvYmFibHkgbm90LlxuICAgICAgICAgIC8vIENvbnNpZGVyIHJlbW92aW5nLlxuICAgICAgICAgIHZhciBtb3N0UmVjZW50RXZlbnRUaW1lID0gZ2V0TW9zdFJlY2VudEV2ZW50VGltZShyb290LCBsYW5lcyk7XG4gICAgICAgICAgdmFyIGV2ZW50VGltZU1zID0gbW9zdFJlY2VudEV2ZW50VGltZTtcbiAgICAgICAgICB2YXIgdGltZUVsYXBzZWRNcyA9IG5vdygpIC0gZXZlbnRUaW1lTXM7XG5cbiAgICAgICAgICB2YXIgX21zVW50aWxUaW1lb3V0ID0gam5kKHRpbWVFbGFwc2VkTXMpIC0gdGltZUVsYXBzZWRNczsgLy8gRG9uJ3QgYm90aGVyIHdpdGggYSB2ZXJ5IHNob3J0IHN1c3BlbnNlIHRpbWUuXG5cblxuICAgICAgICAgIGlmIChfbXNVbnRpbFRpbWVvdXQgPiAxMCkge1xuICAgICAgICAgICAgLy8gSW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSBmYWxsYmFjayBpbW1lZGlhdGVseSwgd2FpdCBmb3IgbW9yZSBkYXRhXG4gICAgICAgICAgICAvLyB0byBhcnJpdmUuXG4gICAgICAgICAgICByb290LnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoY29tbWl0Um9vdC5iaW5kKG51bGwsIHJvb3QpLCBfbXNVbnRpbFRpbWVvdXQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIENvbW1pdCB0aGUgcGxhY2Vob2xkZXIuXG5cblxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgUm9vdENvbXBsZXRlZDpcbiAgICAgIHtcbiAgICAgICAgLy8gVGhlIHdvcmsgY29tcGxldGVkLiBSZWFkeSB0byBjb21taXQuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gcm9vdCBleGl0IHN0YXR1cy5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgc3VzcGVuZGVkTGFuZXMpIHtcbiAgLy8gV2hlbiBzdXNwZW5kaW5nLCB3ZSBzaG91bGQgYWx3YXlzIGV4Y2x1ZGUgbGFuZXMgdGhhdCB3ZXJlIHBpbmdlZCBvciAobW9yZVxuICAvLyByYXJlbHksIHNpbmNlIHdlIHRyeSB0byBhdm9pZCBpdCkgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgLy8gVE9ETzogTG9sIG1heWJlIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvIGZhY3RvciB0aGlzIGJlc2lkZXMgdGhpc1xuICAvLyBvYm5veGlvdXNseSBuYW1lZCBmdW5jdGlvbiA6KVxuICBzdXNwZW5kZWRMYW5lcyA9IHJlbW92ZUxhbmVzKHN1c3BlbmRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyk7XG4gIHN1c3BlbmRlZExhbmVzID0gcmVtb3ZlTGFuZXMoc3VzcGVuZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyk7XG4gIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIHN1c3BlbmRlZExhbmVzKTtcbn0gLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHN5bmNocm9ub3VzIHRhc2tzIHRoYXQgZG9uJ3QgZ29cbi8vIHRocm91Z2ggU2NoZWR1bGVyXG5cblxuZnVuY3Rpb24gcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QpIHtcbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICB2YXIgbGFuZXM7XG4gIHZhciBleGl0U3RhdHVzO1xuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiYgaW5jbHVkZXNTb21lTGFuZShyb290LmV4cGlyZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpKSB7XG4gICAgLy8gVGhlcmUncyBhIHBhcnRpYWwgdHJlZSwgYW5kIGF0IGxlYXN0IG9uZSBvZiBpdHMgbGFuZXMgaGFzIGV4cGlyZWQuIEZpbmlzaFxuICAgIC8vIHJlbmRlcmluZyBpdCBiZWZvcmUgcmVuZGVyaW5nIHRoZSByZXN0IG9mIHRoZSBleHBpcmVkIHdvcmsuXG4gICAgbGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcztcbiAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuXG4gICAgaWYgKGluY2x1ZGVzU29tZUxhbmUod29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKSkge1xuICAgICAgLy8gVGhlIHJlbmRlciBpbmNsdWRlZCBsYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgIC8vIEZvciBleGFtcGxlLCB3aGVuIHVuaGlkaW5nIGEgaGlkZGVuIHRyZWUsIHdlIGluY2x1ZGUgYWxsIHRoZSBsYW5lc1xuICAgICAgLy8gdGhhdCB3ZXJlIHByZXZpb3VzbHkgc2tpcHBlZCB3aGVuIHRoZSB0cmVlIHdhcyBoaWRkZW4uIFRoYXQgc2V0IG9mXG4gICAgICAvLyBsYW5lcyBpcyBhIHN1cGVyc2V0IG9mIHRoZSBsYW5lcyB3ZSBzdGFydGVkIHJlbmRlcmluZyB3aXRoLlxuICAgICAgLy9cbiAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIG9ubHkgaGFwcGVucyB3aGVuIHBhcnQgb2YgdGhlIHRyZWUgaXMgcmVuZGVyZWRcbiAgICAgIC8vIGNvbmN1cnJlbnRseS4gSWYgdGhlIHdob2xlIHRyZWUgaXMgcmVuZGVyZWQgc3luY2hyb25vdXNseSwgdGhlbiB0aGVyZVxuICAgICAgLy8gYXJlIG5vIGludGVybGVhdmVkIGV2ZW50cy5cbiAgICAgIGxhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIGxhbmVzKTtcbiAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIE5vTGFuZXMpO1xuICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gIH1cblxuICBpZiAocm9vdC50YWcgIT09IExlZ2FjeVJvb3QgJiYgZXhpdFN0YXR1cyA9PT0gUm9vdEVycm9yZWQpIHtcbiAgICBleGVjdXRpb25Db250ZXh0IHw9IFJldHJ5QWZ0ZXJFcnJvcjsgLy8gSWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGh5ZHJhdGlvbixcbiAgICAvLyBkaXNjYXJkIHNlcnZlciByZXNwb25zZSBhbmQgZmFsbCBiYWNrIHRvIGNsaWVudCBzaWRlIHJlbmRlci5cblxuICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgIHJvb3QuaHlkcmF0ZSA9IGZhbHNlO1xuICAgICAgY2xlYXJDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICB9IC8vIElmIHNvbWV0aGluZyB0aHJldyBhbiBlcnJvciwgdHJ5IHJlbmRlcmluZyBvbmUgbW9yZSB0aW1lLiBXZSdsbCByZW5kZXJcbiAgICAvLyBzeW5jaHJvbm91c2x5IHRvIGJsb2NrIGNvbmN1cnJlbnQgZGF0YSBtdXRhdGlvbnMsIGFuZCB3ZSdsbCBpbmNsdWRlc1xuICAgIC8vIGFsbCBwZW5kaW5nIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLiBJZiBpdCBzdGlsbCBmYWlscyBhZnRlciB0aGUgc2Vjb25kXG4gICAgLy8gYXR0ZW1wdCwgd2UnbGwgZ2l2ZSB1cCBhbmQgY29tbWl0IHRoZSByZXN1bHRpbmcgdHJlZS5cblxuXG4gICAgbGFuZXMgPSBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihyb290KTtcblxuICAgIGlmIChsYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEZhdGFsRXJyb3JlZCkge1xuICAgIHZhciBmYXRhbEVycm9yID0gd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvcjtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICAgIHRocm93IGZhdGFsRXJyb3I7XG4gIH0gLy8gV2Ugbm93IGhhdmUgYSBjb25zaXN0ZW50IHRyZWUuIEJlY2F1c2UgdGhpcyBpcyBhIHN5bmMgcmVuZGVyLCB3ZVxuICAvLyB3aWxsIGNvbW1pdCBpdCBldmVuIGlmIHNvbWV0aGluZyBzdXNwZW5kZWQuXG5cblxuICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcms7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICBjb21taXRSb290KHJvb3QpOyAvLyBCZWZvcmUgZXhpdGluZywgbWFrZSBzdXJlIHRoZXJlJ3MgYSBjYWxsYmFjayBzY2hlZHVsZWQgZm9yIHRoZSBuZXh0XG4gIC8vIHBlbmRpbmcgbGV2ZWwuXG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBmbHVzaERpc2NyZXRlVXBkYXRlcygpIHtcbiAgLy8gVE9ETzogU2hvdWxkIGJlIGFibGUgdG8gZmx1c2ggaW5zaWRlIGJhdGNoZWRVcGRhdGVzLCBidXQgbm90IGluc2lkZSBgYWN0YC5cbiAgLy8gSG93ZXZlciwgYGFjdGAgdXNlcyBgYmF0Y2hlZFVwZGF0ZXNgLCBzbyB0aGVyZSdzIG5vIHdheSB0byBkaXN0aW5ndWlzaFxuICAvLyB0aG9zZSB0d28gY2FzZXMuIE5lZWQgdG8gZml4IHRoaXMgYmVmb3JlIGV4cG9zaW5nIGZsdXNoRGlzY3JldGVVcGRhdGVzXG4gIC8vIGFzIGEgcHVibGljIEFQSS5cbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKEJhdGNoZWRDb250ZXh0IHwgUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KSB7XG4gICAge1xuICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCkge1xuICAgICAgICBlcnJvcigndW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgJyArICdhbHJlYWR5IHJlbmRlcmluZy4nKTtcbiAgICAgIH1cbiAgICB9IC8vIFdlJ3JlIGFscmVhZHkgcmVuZGVyaW5nLCBzbyB3ZSBjYW4ndCBzeW5jaHJvbm91c2x5IGZsdXNoIHBlbmRpbmcgd29yay5cbiAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGEgbmVzdGVkIGV2ZW50IGRpc3BhdGNoIHRyaWdnZXJlZCBieSBhIGxpZmVjeWNsZS9lZmZlY3QsXG4gICAgLy8gbGlrZSBgZWwuZm9jdXMoKWAuIEV4aXQuXG5cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGZsdXNoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcygpOyAvLyBJZiB0aGUgZGlzY3JldGUgdXBkYXRlcyBzY2hlZHVsZWQgcGFzc2l2ZSBlZmZlY3RzLCBmbHVzaCB0aGVtIG5vdyBzbyB0aGF0XG4gIC8vIHRoZXkgZmlyZSBiZWZvcmUgdGhlIG5leHQgc2VyaWFsIGV2ZW50LlxuXG4gIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hQZW5kaW5nRGlzY3JldGVVcGRhdGVzKCkge1xuICBpZiAocm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyAhPT0gbnVsbCkge1xuICAgIC8vIEZvciBlYWNoIHJvb3Qgd2l0aCBwZW5kaW5nIGRpc2NyZXRlIHVwZGF0ZXMsIHNjaGVkdWxlIGEgY2FsbGJhY2sgdG9cbiAgICAvLyBpbW1lZGlhdGVseSBmbHVzaCB0aGVtLlxuICAgIHZhciByb290cyA9IHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXM7XG4gICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9IG51bGw7XG4gICAgcm9vdHMuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkge1xuICAgICAgbWFya0Rpc2NyZXRlVXBkYXRlc0V4cGlyZWQocm9vdCk7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICAgIH0pO1xuICB9IC8vIE5vdyBmbHVzaCB0aGUgaW1tZWRpYXRlIHF1ZXVlLlxuXG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xufVxuXG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyQxKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQmF0Y2hlZENvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oYSk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gYmF0Y2hlZEV2ZW50VXBkYXRlcyQxKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gRXZlbnRDb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpc2NyZXRlVXBkYXRlcyQxKGZuLCBhLCBiLCBjLCBkKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gRGlzY3JldGVFdmVudENvbnRleHQ7XG5cbiAge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEoVXNlckJsb2NraW5nUHJpb3JpdHkkMiwgZm4uYmluZChudWxsLCBhLCBiLCBjLCBkKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdW5iYXRjaGVkVXBkYXRlcyhmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0ICY9IH5CYXRjaGVkQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBMZWdhY3lVbmJhdGNoZWRDb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGZsdXNoU3luYyhmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuXG4gIGlmICgocHJldkV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KSB7XG4gICAge1xuICAgICAgZXJyb3IoJ2ZsdXNoU3luYyB3YXMgY2FsbGVkIGZyb20gaW5zaWRlIGEgbGlmZWN5Y2xlIG1ldGhvZC4gUmVhY3QgY2Fubm90ICcgKyAnZmx1c2ggd2hlbiBSZWFjdCBpcyBhbHJlYWR5IHJlbmRlcmluZy4gQ29uc2lkZXIgbW92aW5nIHRoaXMgY2FsbCB0byAnICsgJ2Egc2NoZWR1bGVyIHRhc2sgb3IgbWljcm8gdGFzay4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oYSk7XG4gIH1cblxuICBleGVjdXRpb25Db250ZXh0IHw9IEJhdGNoZWRDb250ZXh0O1xuXG4gIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHJldHVybiBydW5XaXRoUHJpb3JpdHkkMShJbW1lZGlhdGVQcmlvcml0eSQxLCBmbi5iaW5kKG51bGwsIGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDsgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaC5cbiAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHdpbGwgaGFwcGVuIGV2ZW4gaWYgYmF0Y2hlZFVwZGF0ZXMgaXMgaGlnaGVyIHVwXG4gICAgICAvLyB0aGUgc3RhY2suXG5cbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHB1c2hSZW5kZXJMYW5lcyhmaWJlciwgbGFuZXMpIHtcbiAgcHVzaChzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IsIHN1YnRyZWVSZW5kZXJMYW5lcywgZmliZXIpO1xuICBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBtZXJnZUxhbmVzKHN1YnRyZWVSZW5kZXJMYW5lcywgbGFuZXMpO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzLCBsYW5lcyk7XG59XG5mdW5jdGlvbiBwb3BSZW5kZXJMYW5lcyhmaWJlcikge1xuICBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IuY3VycmVudDtcbiAgcG9wKHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcykge1xuICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHZhciB0aW1lb3V0SGFuZGxlID0gcm9vdC50aW1lb3V0SGFuZGxlO1xuXG4gIGlmICh0aW1lb3V0SGFuZGxlICE9PSBub1RpbWVvdXQpIHtcbiAgICAvLyBUaGUgcm9vdCBwcmV2aW91cyBzdXNwZW5kZWQgYW5kIHNjaGVkdWxlZCBhIHRpbWVvdXQgdG8gY29tbWl0IGEgZmFsbGJhY2tcbiAgICAvLyBzdGF0ZS4gTm93IHRoYXQgd2UgaGF2ZSBhZGRpdGlvbmFsIHdvcmssIGNhbmNlbCB0aGUgdGltZW91dC5cbiAgICByb290LnRpbWVvdXRIYW5kbGUgPSBub1RpbWVvdXQ7IC8vICRGbG93Rml4TWUgQ29tcGxhaW5zIG5vVGltZW91dCBpcyBub3QgYSBUaW1lb3V0SUQsIGRlc3BpdGUgdGhlIGNoZWNrIGFib3ZlXG5cbiAgICBjYW5jZWxUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICB9XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgdmFyIGludGVycnVwdGVkV29yayA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcblxuICAgIHdoaWxlIChpbnRlcnJ1cHRlZFdvcmsgIT09IG51bGwpIHtcbiAgICAgIHVud2luZEludGVycnVwdGVkV29yayhpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgaW50ZXJydXB0ZWRXb3JrID0gaW50ZXJydXB0ZWRXb3JrLnJldHVybjtcbiAgICB9XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSByb290O1xuICB3b3JrSW5Qcm9ncmVzcyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKHJvb3QuY3VycmVudCwgbnVsbCk7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gc3VidHJlZVJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IGxhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluY29tcGxldGU7XG4gIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBOb0xhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMgPSBOb0xhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IE5vTGFuZXM7XG5cbiAge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5kaXNjYXJkUGVuZGluZ1dhcm5pbmdzKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpIHtcbiAgZG8ge1xuICAgIHZhciBlcnJvcmVkV29yayA9IHdvcmtJblByb2dyZXNzO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlc2V0IG1vZHVsZS1sZXZlbCBzdGF0ZSB0aGF0IHdhcyBzZXQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIHJlc2V0SG9va3NBZnRlclRocm93KCk7XG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpOyAvLyBUT0RPOiBJIGZvdW5kIGFuZCBhZGRlZCB0aGlzIG1pc3NpbmcgbGluZSB3aGlsZSBpbnZlc3RpZ2F0aW5nIGFcbiAgICAgIC8vIHNlcGFyYXRlIGlzc3VlLiBXcml0ZSBhIHJlZ3Jlc3Npb24gdGVzdCB1c2luZyBzdHJpbmcgcmVmcy5cblxuICAgICAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDtcblxuICAgICAgaWYgKGVycm9yZWRXb3JrID09PSBudWxsIHx8IGVycm9yZWRXb3JrLnJldHVybiA9PT0gbnVsbCkge1xuICAgICAgICAvLyBFeHBlY3RlZCB0byBiZSB3b3JraW5nIG9uIGEgbm9uLXJvb3QgZmliZXIuIFRoaXMgaXMgYSBmYXRhbCBlcnJvclxuICAgICAgICAvLyBiZWNhdXNlIHRoZXJlJ3Mgbm8gYW5jZXN0b3IgdGhhdCBjYW4gaGFuZGxlIGl0OyB0aGUgcm9vdCBpc1xuICAgICAgICAvLyBzdXBwb3NlZCB0byBjYXB0dXJlIGFsbCBlcnJvcnMgdGhhdCB3ZXJlbid0IGNhdWdodCBieSBhbiBlcnJvclxuICAgICAgICAvLyBib3VuZGFyeS5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RGYXRhbEVycm9yZWQ7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSB0aHJvd25WYWx1ZTsgLy8gU2V0IGB3b3JrSW5Qcm9ncmVzc2AgdG8gbnVsbC4gVGhpcyByZXByZXNlbnRzIGFkdmFuY2luZyB0byB0aGUgbmV4dFxuICAgICAgICAvLyBzaWJsaW5nLCBvciB0aGUgcGFyZW50IGlmIHRoZXJlIGFyZSBubyBzaWJsaW5ncy4gQnV0IHNpbmNlIHRoZSByb290XG4gICAgICAgIC8vIGhhcyBubyBzaWJsaW5ncyBub3IgYSBwYXJlbnQsIHdlIHNldCBpdCB0byBudWxsLiBVc3VhbGx5IHRoaXMgaXNcbiAgICAgICAgLy8gaGFuZGxlZCBieSBgY29tcGxldGVVbml0T2ZXb3JrYCBvciBgdW53aW5kV29ya2AsIGJ1dCBzaW5jZSB3ZSdyZVxuICAgICAgICAvLyBpbnRlbnRpb25hbGx5IG5vdCBjYWxsaW5nIHRob3NlLCB3ZSBuZWVkIHNldCBpdCBoZXJlLlxuICAgICAgICAvLyBUT0RPOiBDb25zaWRlciBjYWxsaW5nIGB1bndpbmRXb3JrYCB0byBwb3AgdGhlIGNvbnRleHRzLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lciAmJiBlcnJvcmVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgLy8gUmVjb3JkIHRoZSB0aW1lIHNwZW50IHJlbmRlcmluZyBiZWZvcmUgYW4gZXJyb3Igd2FzIHRocm93bi4gVGhpc1xuICAgICAgICAvLyBhdm9pZHMgaW5hY2N1cmF0ZSBQcm9maWxlciBkdXJhdGlvbnMgaW4gdGhlIGNhc2Ugb2YgYVxuICAgICAgICAvLyBzdXNwZW5kZWQgcmVuZGVyLlxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGVycm9yZWRXb3JrLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dFeGNlcHRpb24ocm9vdCwgZXJyb3JlZFdvcmsucmV0dXJuLCBlcnJvcmVkV29yaywgdGhyb3duVmFsdWUsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICAgIGNvbXBsZXRlVW5pdE9mV29yayhlcnJvcmVkV29yayk7XG4gICAgfSBjYXRjaCAoeWV0QW5vdGhlclRocm93blZhbHVlKSB7XG4gICAgICAvLyBTb21ldGhpbmcgaW4gdGhlIHJldHVybiBwYXRoIGFsc28gdGhyZXcuXG4gICAgICB0aHJvd25WYWx1ZSA9IHlldEFub3RoZXJUaHJvd25WYWx1ZTtcblxuICAgICAgaWYgKHdvcmtJblByb2dyZXNzID09PSBlcnJvcmVkV29yayAmJiBlcnJvcmVkV29yayAhPT0gbnVsbCkge1xuICAgICAgICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGhhcyBhbHJlYWR5IGVycm9yZWQsIHRoZW4gd2UgaGFkIHRyb3VibGUgcHJvY2Vzc2luZ1xuICAgICAgICAvLyB0aGUgZXJyb3IuIEJ1YmJsZSBpdCB0byB0aGUgbmV4dCBib3VuZGFyeS5cbiAgICAgICAgZXJyb3JlZFdvcmsgPSBlcnJvcmVkV29yay5yZXR1cm47XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gZXJyb3JlZFdvcms7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcmVkV29yayA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgfVxuXG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIFJldHVybiB0byB0aGUgbm9ybWFsIHdvcmsgbG9vcC5cblxuXG4gICAgcmV0dXJuO1xuICB9IHdoaWxlICh0cnVlKTtcbn1cblxuZnVuY3Rpb24gcHVzaERpc3BhdGNoZXIoKSB7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMi5jdXJyZW50O1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICBpZiAocHJldkRpc3BhdGNoZXIgPT09IG51bGwpIHtcbiAgICAvLyBUaGUgUmVhY3QgaXNvbW9ycGhpYyBwYWNrYWdlIGRvZXMgbm90IGluY2x1ZGUgYSBkZWZhdWx0IGRpc3BhdGNoZXIuXG4gICAgLy8gSW5zdGVhZCB0aGUgZmlyc3QgcmVuZGVyZXIgd2lsbCBsYXppbHkgYXR0YWNoIG9uZSwgaW4gb3JkZXIgdG8gZ2l2ZVxuICAgIC8vIG5pY2VyIGVycm9yIG1lc3NhZ2VzLlxuICAgIHJldHVybiBDb250ZXh0T25seURpc3BhdGNoZXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHByZXZEaXNwYXRjaGVyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpIHtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gcHVzaEludGVyYWN0aW9ucyhyb290KSB7XG4gIHtcbiAgICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgICB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zO1xuICAgIHJldHVybiBwcmV2SW50ZXJhY3Rpb25zO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKSB7XG4gIHtcbiAgICB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtDb21taXRUaW1lT2ZGYWxsYmFjaygpIHtcbiAgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IG5vdygpO1xufVxuZnVuY3Rpb24gbWFya1NraXBwZWRVcGRhdGVMYW5lcyhsYW5lKSB7XG4gIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IG1lcmdlTGFuZXMobGFuZSwgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzKTtcbn1cbmZ1bmN0aW9uIHJlbmRlckRpZFN1c3BlbmQoKSB7XG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZSkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkO1xuICB9XG59XG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGUgfHwgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZCkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkV2l0aERlbGF5O1xuICB9IC8vIENoZWNrIGlmIHRoZXJlIGFyZSB1cGRhdGVzIHRoYXQgd2Ugc2tpcHBlZCB0cmVlIHRoYXQgbWlnaHQgaGF2ZSB1bmJsb2NrZWRcbiAgLy8gdGhpcyByZW5kZXIuXG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSBudWxsICYmIChpbmNsdWRlc05vbklkbGVXb3JrKHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcykgfHwgaW5jbHVkZXNOb25JZGxlV29yayh3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpKSkge1xuICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgcmVuZGVyIGFzIHN1c3BlbmRlZCBzbyB0aGF0IHdlIHN3aXRjaCB0byB3b3JraW5nIG9uXG4gICAgLy8gdGhlIHVwZGF0ZXMgdGhhdCB3ZXJlIHNraXBwZWQuIFVzdWFsbHkgd2Ugb25seSBzdXNwZW5kIGF0IHRoZSBlbmQgb2ZcbiAgICAvLyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIC8vIFRPRE86IFdlIHNob3VsZCBwcm9iYWJseSBhbHdheXMgbWFyayB0aGUgcm9vdCBhcyBzdXNwZW5kZWQgaW1tZWRpYXRlbHlcbiAgICAvLyAoaW5zaWRlIHRoaXMgZnVuY3Rpb24pLCBzaW5jZSBieSBzdXNwZW5kaW5nIGF0IHRoZSBlbmQgb2YgdGhlIHJlbmRlclxuICAgIC8vIHBoYXNlIGludHJvZHVjZXMgYSBwb3RlbnRpYWwgbWlzdGFrZSB3aGVyZSB3ZSBzdXNwZW5kIGxhbmVzIHRoYXQgd2VyZVxuICAgIC8vIHBpbmdlZCBvciB1cGRhdGVkIHdoaWxlIHdlIHdlcmUgcmVuZGVyaW5nLlxuICAgIG1hcmtSb290U3VzcGVuZGVkJDEod29ya0luUHJvZ3Jlc3NSb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbmRlckRpZEVycm9yKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAhPT0gUm9vdENvbXBsZXRlZCkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RXJyb3JlZDtcbiAgfVxufSAvLyBDYWxsZWQgZHVyaW5nIHJlbmRlciB0byBkZXRlcm1pbmUgaWYgYW55dGhpbmcgaGFzIHN1c3BlbmRlZC5cbi8vIFJldHVybnMgZmFsc2UgaWYgd2UncmUgbm90IHN1cmUuXG5cbmZ1bmN0aW9uIHJlbmRlckhhc05vdFN1c3BlbmRlZFlldCgpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGVycm9yZWQgb3IgY29tcGxldGVkLCB3ZSBjYW4ndCByZWFsbHkgYmUgc3VyZSxcbiAgLy8gc28gdGhvc2UgYXJlIGZhbHNlLlxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGU7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKTsgLy8gSWYgdGhlIHJvb3Qgb3IgbGFuZXMgaGF2ZSBjaGFuZ2VkLCB0aHJvdyBvdXQgdGhlIGV4aXN0aW5nIHN0YWNrXG4gIC8vIGFuZCBwcmVwYXJlIGEgZnJlc2ggb25lLiBPdGhlcndpc2Ugd2UnbGwgY29udGludWUgd2hlcmUgd2UgbGVmdCBvZmYuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXMpIHtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gICAgc3RhcnRXb3JrT25QZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTtcblxuICBkbyB7XG4gICAgdHJ5IHtcbiAgICAgIHdvcmtMb29wU3luYygpO1xuICAgICAgYnJlYWs7XG4gICAgfSBjYXRjaCAodGhyb3duVmFsdWUpIHtcbiAgICAgIGhhbmRsZUVycm9yKHJvb3QsIHRocm93blZhbHVlKTtcbiAgICB9XG4gIH0gd2hpbGUgKHRydWUpO1xuXG4gIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuXG4gIHtcbiAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gIH1cblxuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgYSBzeW5jIHJlbmRlciwgc28gd2Ugc2hvdWxkIGhhdmUgZmluaXNoZWQgdGhlIHdob2xlIHRyZWUuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgY29tbWl0IGFuIGluY29tcGxldGUgcm9vdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbn0gLy8gVGhlIHdvcmsgbG9vcCBpcyBhbiBleHRyZW1lbHkgaG90IHBhdGguIFRlbGwgQ2xvc3VyZSBub3QgdG8gaW5saW5lIGl0LlxuXG4vKiogQG5vaW5saW5lICovXG5cblxuZnVuY3Rpb24gd29ya0xvb3BTeW5jKCkge1xuICAvLyBBbHJlYWR5IHRpbWVkIG91dCwgc28gcGVyZm9ybSB3b3JrIHdpdGhvdXQgY2hlY2tpbmcgaWYgd2UgbmVlZCB0byB5aWVsZC5cbiAgd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgcGVyZm9ybVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKTsgLy8gSWYgdGhlIHJvb3Qgb3IgbGFuZXMgaGF2ZSBjaGFuZ2VkLCB0aHJvdyBvdXQgdGhlIGV4aXN0aW5nIHN0YWNrXG4gIC8vIGFuZCBwcmVwYXJlIGEgZnJlc2ggb25lLiBPdGhlcndpc2Ugd2UnbGwgY29udGludWUgd2hlcmUgd2UgbGVmdCBvZmYuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXMpIHtcbiAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICAgIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gIH1cblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7XG5cbiAgZG8ge1xuICAgIHRyeSB7XG4gICAgICB3b3JrTG9vcENvbmN1cnJlbnQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKHRocm93blZhbHVlKSB7XG4gICAgICBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSk7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICB9XG5cbiAgcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcik7XG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuXG4gICAgcmV0dXJuIFJvb3RJbmNvbXBsZXRlO1xuICB9IGVsc2Uge1xuXG5cbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gUmV0dXJuIHRoZSBmaW5hbCBleGl0IHN0YXR1cy5cblxuICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xuICB9XG59XG4vKiogQG5vaW5saW5lICovXG5cblxuZnVuY3Rpb24gd29ya0xvb3BDb25jdXJyZW50KCkge1xuICAvLyBQZXJmb3JtIHdvcmsgdW50aWwgU2NoZWR1bGVyIGFza3MgdXMgdG8geWllbGRcbiAgd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsICYmICFzaG91bGRZaWVsZCgpKSB7XG4gICAgcGVyZm9ybVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBlcmZvcm1Vbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS4gSWRlYWxseVxuICAvLyBub3RoaW5nIHNob3VsZCByZWx5IG9uIHRoaXMsIGJ1dCByZWx5aW5nIG9uIGl0IGhlcmUgbWVhbnMgdGhhdCB3ZSBkb24ndFxuICAvLyBuZWVkIGFuIGFkZGl0aW9uYWwgZmllbGQgb24gdGhlIHdvcmsgaW4gcHJvZ3Jlc3MuXG4gIHZhciBjdXJyZW50ID0gdW5pdE9mV29yay5hbHRlcm5hdGU7XG4gIHNldEN1cnJlbnRGaWJlcih1bml0T2ZXb3JrKTtcbiAgdmFyIG5leHQ7XG5cbiAgaWYgKCAodW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICBzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayk7XG4gICAgbmV4dCA9IGJlZ2luV29yayQxKGN1cnJlbnQsIHVuaXRPZldvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YSh1bml0T2ZXb3JrLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0ID0gYmVnaW5Xb3JrJDEoY3VycmVudCwgdW5pdE9mV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gIHVuaXRPZldvcmsubWVtb2l6ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuXG4gIGlmIChuZXh0ID09PSBudWxsKSB7XG4gICAgLy8gSWYgdGhpcyBkb2Vzbid0IHNwYXduIG5ldyB3b3JrLCBjb21wbGV0ZSB0aGUgY3VycmVudCB3b3JrLlxuICAgIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKTtcbiAgfSBlbHNlIHtcbiAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gIH1cblxuICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAvLyBBdHRlbXB0IHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50IHVuaXQgb2Ygd29yaywgdGhlbiBtb3ZlIHRvIHRoZSBuZXh0XG4gIC8vIHNpYmxpbmcuIElmIHRoZXJlIGFyZSBubyBtb3JlIHNpYmxpbmdzLCByZXR1cm4gdG8gdGhlIHBhcmVudCBmaWJlci5cbiAgdmFyIGNvbXBsZXRlZFdvcmsgPSB1bml0T2ZXb3JrO1xuXG4gIGRvIHtcbiAgICAvLyBUaGUgY3VycmVudCwgZmx1c2hlZCwgc3RhdGUgb2YgdGhpcyBmaWJlciBpcyB0aGUgYWx0ZXJuYXRlLiBJZGVhbGx5XG4gICAgLy8gbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGlzLCBidXQgcmVseWluZyBvbiBpdCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3RcbiAgICAvLyBuZWVkIGFuIGFkZGl0aW9uYWwgZmllbGQgb24gdGhlIHdvcmsgaW4gcHJvZ3Jlc3MuXG4gICAgdmFyIGN1cnJlbnQgPSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZTtcbiAgICB2YXIgcmV0dXJuRmliZXIgPSBjb21wbGV0ZWRXb3JrLnJldHVybjsgLy8gQ2hlY2sgaWYgdGhlIHdvcmsgY29tcGxldGVkIG9yIGlmIHNvbWV0aGluZyB0aHJldy5cblxuICAgIGlmICgoY29tcGxldGVkV29yay5mbGFncyAmIEluY29tcGxldGUpID09PSBOb0ZsYWdzKSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoY29tcGxldGVkV29yayk7XG4gICAgICB2YXIgbmV4dCA9IHZvaWQgMDtcblxuICAgICAgaWYgKCAoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgbmV4dCA9IGNvbXBsZXRlV29yayhjdXJyZW50LCBjb21wbGV0ZWRXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRQcm9maWxlclRpbWVyKGNvbXBsZXRlZFdvcmspO1xuICAgICAgICBuZXh0ID0gY29tcGxldGVXb3JrKGN1cnJlbnQsIGNvbXBsZXRlZFdvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7IC8vIFVwZGF0ZSByZW5kZXIgZHVyYXRpb24gYXNzdW1pbmcgd2UgZGlkbid0IGVycm9yLlxuXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoY29tcGxldGVkV29yaywgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuXG4gICAgICBpZiAobmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBDb21wbGV0aW5nIHRoaXMgZmliZXIgc3Bhd25lZCBuZXcgd29yay4gV29yayBvbiB0aGF0IG5leHQuXG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbmV4dDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXNldENoaWxkTGFuZXMoY29tcGxldGVkV29yayk7XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCAmJiAvLyBEbyBub3QgYXBwZW5kIGVmZmVjdHMgdG8gcGFyZW50cyBpZiBhIHNpYmxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlXG4gICAgICAocmV0dXJuRmliZXIuZmxhZ3MgJiBJbmNvbXBsZXRlKSA9PT0gTm9GbGFncykge1xuICAgICAgICAvLyBBcHBlbmQgYWxsIHRoZSBlZmZlY3RzIG9mIHRoZSBzdWJ0cmVlIGFuZCB0aGlzIGZpYmVyIG9udG8gdGhlIGVmZmVjdFxuICAgICAgICAvLyBsaXN0IG9mIHRoZSBwYXJlbnQuIFRoZSBjb21wbGV0aW9uIG9yZGVyIG9mIHRoZSBjaGlsZHJlbiBhZmZlY3RzIHRoZVxuICAgICAgICAvLyBzaWRlLWVmZmVjdCBvcmRlci5cbiAgICAgICAgaWYgKHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrLmZpcnN0RWZmZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZFdvcmsubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjb21wbGV0ZWRXb3JrLmZpcnN0RWZmZWN0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrLmxhc3RFZmZlY3Q7XG4gICAgICAgIH0gLy8gSWYgdGhpcyBmaWJlciBoYWQgc2lkZS1lZmZlY3RzLCB3ZSBhcHBlbmQgaXQgQUZURVIgdGhlIGNoaWxkcmVuJ3NcbiAgICAgICAgLy8gc2lkZS1lZmZlY3RzLiBXZSBjYW4gcGVyZm9ybSBjZXJ0YWluIHNpZGUtZWZmZWN0cyBlYXJsaWVyIGlmIG5lZWRlZCxcbiAgICAgICAgLy8gYnkgZG9pbmcgbXVsdGlwbGUgcGFzc2VzIG92ZXIgdGhlIGVmZmVjdCBsaXN0LiBXZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIHNjaGVkdWxlIG91ciBvd24gc2lkZS1lZmZlY3Qgb24gb3VyIG93biBsaXN0IGJlY2F1c2UgaWYgZW5kIHVwXG4gICAgICAgIC8vIHJldXNpbmcgY2hpbGRyZW4gd2UnbGwgc2NoZWR1bGUgdGhpcyBlZmZlY3Qgb250byBpdHNlbGYgc2luY2Ugd2UncmVcbiAgICAgICAgLy8gYXQgdGhlIGVuZC5cblxuXG4gICAgICAgIHZhciBmbGFncyA9IGNvbXBsZXRlZFdvcmsuZmxhZ3M7IC8vIFNraXAgYm90aCBOb1dvcmsgYW5kIFBlcmZvcm1lZFdvcmsgdGFncyB3aGVuIGNyZWF0aW5nIHRoZSBlZmZlY3RcbiAgICAgICAgLy8gbGlzdC4gUGVyZm9ybWVkV29yayBlZmZlY3QgaXMgcmVhZCBieSBSZWFjdCBEZXZUb29scyBidXQgc2hvdWxkbid0IGJlXG4gICAgICAgIC8vIGNvbW1pdHRlZC5cblxuICAgICAgICBpZiAoZmxhZ3MgPiBQZXJmb3JtZWRXb3JrKSB7XG4gICAgICAgICAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gY29tcGxldGVkV29yaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY29tcGxldGVkV29yaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGZpYmVyIGRpZCBub3QgY29tcGxldGUgYmVjYXVzZSBzb21ldGhpbmcgdGhyZXcuIFBvcCB2YWx1ZXMgb2ZmXG4gICAgICAvLyB0aGUgc3RhY2sgd2l0aG91dCBlbnRlcmluZyB0aGUgY29tcGxldGUgcGhhc2UuIElmIHRoaXMgaXMgYSBib3VuZGFyeSxcbiAgICAgIC8vIGNhcHR1cmUgdmFsdWVzIGlmIHBvc3NpYmxlLlxuICAgICAgdmFyIF9uZXh0ID0gdW53aW5kV29yayhjb21wbGV0ZWRXb3JrKTsgLy8gQmVjYXVzZSB0aGlzIGZpYmVyIGRpZCBub3QgY29tcGxldGUsIGRvbid0IHJlc2V0IGl0cyBleHBpcmF0aW9uIHRpbWUuXG5cblxuICAgICAgaWYgKF9uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIElmIGNvbXBsZXRpbmcgdGhpcyB3b3JrIHNwYXduZWQgbmV3IHdvcmssIGRvIHRoYXQgbmV4dC4gV2UnbGwgY29tZVxuICAgICAgICAvLyBiYWNrIGhlcmUgYWdhaW4uXG4gICAgICAgIC8vIFNpbmNlIHdlJ3JlIHJlc3RhcnRpbmcsIHJlbW92ZSBhbnl0aGluZyB0aGF0IGlzIG5vdCBhIGhvc3QgZWZmZWN0XG4gICAgICAgIC8vIGZyb20gdGhlIGVmZmVjdCB0YWcuXG4gICAgICAgIF9uZXh0LmZsYWdzICY9IEhvc3RFZmZlY3RNYXNrO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IF9uZXh0O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIC8vIFJlY29yZCB0aGUgcmVuZGVyIGR1cmF0aW9uIGZvciB0aGUgZmliZXIgdGhhdCBlcnJvcmVkLlxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGNvbXBsZXRlZFdvcmssIGZhbHNlKTsgLy8gSW5jbHVkZSB0aGUgdGltZSBzcGVudCB3b3JraW5nIG9uIGZhaWxlZCBjaGlsZHJlbiBiZWZvcmUgY29udGludWluZy5cblxuICAgICAgICB2YXIgYWN0dWFsRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICB2YXIgY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb24gPSBhY3R1YWxEdXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIC8vIE1hcmsgdGhlIHBhcmVudCBmaWJlciBhcyBpbmNvbXBsZXRlIGFuZCBjbGVhciBpdHMgZWZmZWN0IGxpc3QuXG4gICAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IG51bGw7XG4gICAgICAgIHJldHVybkZpYmVyLmZsYWdzIHw9IEluY29tcGxldGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNpYmxpbmdGaWJlciA9IGNvbXBsZXRlZFdvcmsuc2libGluZztcblxuICAgIGlmIChzaWJsaW5nRmliZXIgIT09IG51bGwpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgd29yayB0byBkbyBpbiB0aGlzIHJldHVybkZpYmVyLCBkbyB0aGF0IG5leHQuXG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHNpYmxpbmdGaWJlcjtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIE90aGVyd2lzZSwgcmV0dXJuIHRvIHRoZSBwYXJlbnRcblxuXG4gICAgY29tcGxldGVkV29yayA9IHJldHVybkZpYmVyOyAvLyBVcGRhdGUgdGhlIG5leHQgdGhpbmcgd2UncmUgd29ya2luZyBvbiBpbiBjYXNlIHNvbWV0aGluZyB0aHJvd3MuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IGNvbXBsZXRlZFdvcms7XG4gIH0gd2hpbGUgKGNvbXBsZXRlZFdvcmsgIT09IG51bGwpOyAvLyBXZSd2ZSByZWFjaGVkIHRoZSByb290LlxuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RDb21wbGV0ZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRDaGlsZExhbmVzKGNvbXBsZXRlZFdvcmspIHtcbiAgaWYgKCAvLyBUT0RPOiBNb3ZlIHRoaXMgY2hlY2sgb3V0IG9mIHRoZSBob3QgcGF0aCBieSBtb3ZpbmcgYHJlc2V0Q2hpbGRMYW5lc2BcbiAgLy8gdG8gc3dpdGNoIHN0YXRlbWVudCBpbiBgY29tcGxldGVXb3JrYC5cbiAgKGNvbXBsZXRlZFdvcmsudGFnID09PSBMZWdhY3lIaWRkZW5Db21wb25lbnQgfHwgY29tcGxldGVkV29yay50YWcgPT09IE9mZnNjcmVlbkNvbXBvbmVudCkgJiYgY29tcGxldGVkV29yay5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmICFpbmNsdWRlc1NvbWVMYW5lKHN1YnRyZWVSZW5kZXJMYW5lcywgT2Zmc2NyZWVuTGFuZSkgJiYgKGNvbXBsZXRlZFdvcmsubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9MYW5lcykge1xuICAgIC8vIFRoZSBjaGlsZHJlbiBvZiB0aGlzIGNvbXBvbmVudCBhcmUgaGlkZGVuLiBEb24ndCBidWJibGUgdGhlaXJcbiAgICAvLyBleHBpcmF0aW9uIHRpbWVzLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBuZXdDaGlsZExhbmVzID0gTm9MYW5lczsgLy8gQnViYmxlIHVwIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUuXG5cbiAgaWYgKCAoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAvLyBJbiBwcm9maWxpbmcgbW9kZSwgcmVzZXRDaGlsZEV4cGlyYXRpb25UaW1lIGlzIGFsc28gdXNlZCB0byByZXNldFxuICAgIC8vIHByb2ZpbGVyIGR1cmF0aW9ucy5cbiAgICB2YXIgYWN0dWFsRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uO1xuICAgIHZhciB0cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5zZWxmQmFzZUR1cmF0aW9uOyAvLyBXaGVuIGEgZmliZXIgaXMgY2xvbmVkLCBpdHMgYWN0dWFsRHVyYXRpb24gaXMgcmVzZXQgdG8gMC4gVGhpcyB2YWx1ZSB3aWxsXG4gICAgLy8gb25seSBiZSB1cGRhdGVkIGlmIHdvcmsgaXMgZG9uZSBvbiB0aGUgZmliZXIgKGkuZS4gaXQgZG9lc24ndCBiYWlsb3V0KS5cbiAgICAvLyBXaGVuIHdvcmsgaXMgZG9uZSwgaXQgc2hvdWxkIGJ1YmJsZSB0byB0aGUgcGFyZW50J3MgYWN0dWFsRHVyYXRpb24uIElmXG4gICAgLy8gdGhlIGZpYmVyIGhhcyBub3QgYmVlbiBjbG9uZWQgdGhvdWdoLCAobWVhbmluZyBubyB3b3JrIHdhcyBkb25lKSwgdGhlblxuICAgIC8vIHRoaXMgdmFsdWUgd2lsbCByZWZsZWN0IHRoZSBhbW91bnQgb2YgdGltZSBzcGVudCB3b3JraW5nIG9uIGEgcHJldmlvdXNcbiAgICAvLyByZW5kZXIuIEluIHRoYXQgY2FzZSBpdCBzaG91bGQgbm90IGJ1YmJsZS4gV2UgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgd2FzXG4gICAgLy8gY2xvbmVkIGJ5IGNvbXBhcmluZyB0aGUgY2hpbGQgcG9pbnRlci5cblxuICAgIHZhciBzaG91bGRCdWJibGVBY3R1YWxEdXJhdGlvbnMgPSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZSA9PT0gbnVsbCB8fCBjb21wbGV0ZWRXb3JrLmNoaWxkICE9PSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZS5jaGlsZDtcbiAgICB2YXIgY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBuZXdDaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhuZXdDaGlsZExhbmVzLCBtZXJnZUxhbmVzKGNoaWxkLmxhbmVzLCBjaGlsZC5jaGlsZExhbmVzKSk7XG5cbiAgICAgIGlmIChzaG91bGRCdWJibGVBY3R1YWxEdXJhdGlvbnMpIHtcbiAgICAgICAgYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIHRyZWVCYXNlRHVyYXRpb24gKz0gY2hpbGQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICB2YXIgaXNUaW1lZE91dFN1c3BlbnNlID0gY29tcGxldGVkV29yay50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIGNvbXBsZXRlZFdvcmsubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcblxuICAgIGlmIChpc1RpbWVkT3V0U3VzcGVuc2UpIHtcbiAgICAgIC8vIERvbid0IGNvdW50IHRpbWUgc3BlbnQgaW4gYSB0aW1lZCBvdXQgU3VzcGVuc2Ugc3VidHJlZSBhcyBwYXJ0IG9mIHRoZSBiYXNlIGR1cmF0aW9uLlxuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgaWYgKHByaW1hcnlDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHRyZWVCYXNlRHVyYXRpb24gLT0gcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uID0gYWN0dWFsRHVyYXRpb247XG4gICAgY29tcGxldGVkV29yay50cmVlQmFzZUR1cmF0aW9uID0gdHJlZUJhc2VEdXJhdGlvbjtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX2NoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgIHdoaWxlIChfY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5ld0NoaWxkTGFuZXMsIG1lcmdlTGFuZXMoX2NoaWxkLmxhbmVzLCBfY2hpbGQuY2hpbGRMYW5lcykpO1xuICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgfVxuICB9XG5cbiAgY29tcGxldGVkV29yay5jaGlsZExhbmVzID0gbmV3Q2hpbGRMYW5lcztcbn1cblxuZnVuY3Rpb24gY29tbWl0Um9vdChyb290KSB7XG4gIHZhciByZW5kZXJQcmlvcml0eUxldmVsID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcbiAgcnVuV2l0aFByaW9yaXR5JDEoSW1tZWRpYXRlUHJpb3JpdHkkMSwgY29tbWl0Um9vdEltcGwuYmluZChudWxsLCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKSk7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRSb290SW1wbChyb290LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIGRvIHtcbiAgICAvLyBgZmx1c2hQYXNzaXZlRWZmZWN0c2Agd2lsbCBjYWxsIGBmbHVzaFN5bmNVcGRhdGVRdWV1ZWAgYXQgdGhlIGVuZCwgd2hpY2hcbiAgICAvLyBtZWFucyBgZmx1c2hQYXNzaXZlRWZmZWN0c2Agd2lsbCBzb21ldGltZXMgcmVzdWx0IGluIGFkZGl0aW9uYWxcbiAgICAvLyBwYXNzaXZlIGVmZmVjdHMuIFNvIHdlIG5lZWQgdG8ga2VlcCBmbHVzaGluZyBpbiBhIGxvb3AgdW50aWwgdGhlcmUgYXJlXG4gICAgLy8gbm8gbW9yZSBwZW5kaW5nIGVmZmVjdHMuXG4gICAgLy8gVE9ETzogTWlnaHQgYmUgYmV0dGVyIGlmIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCBkaWQgbm90IGF1dG9tYXRpY2FsbHlcbiAgICAvLyBmbHVzaCBzeW5jaHJvbm91cyB3b3JrIGF0IHRoZSBlbmQsIHRvIGF2b2lkIGZhY3RvcmluZyBoYXphcmRzIGxpa2UgdGhpcy5cbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIH0gd2hpbGUgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzICE9PSBudWxsKTtcblxuICBmbHVzaFJlbmRlclBoYXNlU3RyaWN0TW9kZVdhcm5pbmdzSW5ERVYoKTtcblxuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5maW5pc2hlZFdvcms7XG4gIHZhciBsYW5lcyA9IHJvb3QuZmluaXNoZWRMYW5lcztcblxuICBpZiAoZmluaXNoZWRXb3JrID09PSBudWxsKSB7XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgcm9vdC5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcblxuICBpZiAoIShmaW5pc2hlZFdvcmsgIT09IHJvb3QuY3VycmVudCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgY29tbWl0IHRoZSBzYW1lIHRyZWUgYXMgYmVmb3JlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9IC8vIGNvbW1pdFJvb3QgbmV2ZXIgcmV0dXJucyBhIGNvbnRpbnVhdGlvbjsgaXQgYWx3YXlzIGZpbmlzaGVzIHN5bmNocm9ub3VzbHkuXG4gIC8vIFNvIHdlIGNhbiBjbGVhciB0aGVzZSBub3cgdG8gYWxsb3cgYSBuZXcgY2FsbGJhY2sgdG8gYmUgc2NoZWR1bGVkLlxuXG5cbiAgcm9vdC5jYWxsYmFja05vZGUgPSBudWxsOyAvLyBVcGRhdGUgdGhlIGZpcnN0IGFuZCBsYXN0IHBlbmRpbmcgdGltZXMgb24gdGhpcyByb290LiBUaGUgbmV3IGZpcnN0XG4gIC8vIHBlbmRpbmcgdGltZSBpcyB3aGF0ZXZlciBpcyBsZWZ0IG9uIHRoZSByb290IGZpYmVyLlxuXG4gIHZhciByZW1haW5pbmdMYW5lcyA9IG1lcmdlTGFuZXMoZmluaXNoZWRXb3JrLmxhbmVzLCBmaW5pc2hlZFdvcmsuY2hpbGRMYW5lcyk7XG4gIG1hcmtSb290RmluaXNoZWQocm9vdCwgcmVtYWluaW5nTGFuZXMpOyAvLyBDbGVhciBhbHJlYWR5IGZpbmlzaGVkIGRpc2NyZXRlIHVwZGF0ZXMgaW4gY2FzZSB0aGF0IGEgbGF0ZXIgY2FsbCBvZlxuICAvLyBgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNgIHN0YXJ0cyBhIHVzZWxlc3MgcmVuZGVyIHBhc3Mgd2hpY2ggbWF5IGNhbmNlbHNcbiAgLy8gYSBzY2hlZHVsZWQgdGltZW91dC5cblxuICBpZiAocm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyAhPT0gbnVsbCkge1xuICAgIGlmICghaGFzRGlzY3JldGVMYW5lcyhyZW1haW5pbmdMYW5lcykgJiYgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcy5oYXMocm9vdCkpIHtcbiAgICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMuZGVsZXRlKHJvb3QpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpIHtcbiAgICAvLyBXZSBjYW4gcmVzZXQgdGhlc2Ugbm93IHRoYXQgdGhleSBhcmUgZmluaXNoZWQuXG4gICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICB9IC8vIEdldCB0aGUgbGlzdCBvZiBlZmZlY3RzLlxuXG5cbiAgdmFyIGZpcnN0RWZmZWN0O1xuXG4gIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgPiBQZXJmb3JtZWRXb3JrKSB7XG4gICAgLy8gQSBmaWJlcidzIGVmZmVjdCBsaXN0IGNvbnNpc3RzIG9ubHkgb2YgaXRzIGNoaWxkcmVuLCBub3QgaXRzZWxmLiBTbyBpZlxuICAgIC8vIHRoZSByb290IGhhcyBhbiBlZmZlY3QsIHdlIG5lZWQgdG8gYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuIFRoZVxuICAgIC8vIHJlc3VsdGluZyBsaXN0IGlzIHRoZSBzZXQgdGhhdCB3b3VsZCBiZWxvbmcgdG8gdGhlIHJvb3QncyBwYXJlbnQsIGlmIGl0XG4gICAgLy8gaGFkIG9uZTsgdGhhdCBpcywgYWxsIHRoZSBlZmZlY3RzIGluIHRoZSB0cmVlIGluY2x1ZGluZyB0aGUgcm9vdC5cbiAgICBpZiAoZmluaXNoZWRXb3JrLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgIGZpbmlzaGVkV29yay5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBmaW5pc2hlZFdvcms7XG4gICAgICBmaXJzdEVmZmVjdCA9IGZpbmlzaGVkV29yay5maXJzdEVmZmVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcms7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoZXJlIGlzIG5vIGVmZmVjdCBvbiB0aGUgcm9vdC5cbiAgICBmaXJzdEVmZmVjdCA9IGZpbmlzaGVkV29yay5maXJzdEVmZmVjdDtcbiAgfVxuXG4gIGlmIChmaXJzdEVmZmVjdCAhPT0gbnVsbCkge1xuXG4gICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpOyAvLyBSZXNldCB0aGlzIHRvIG51bGwgYmVmb3JlIGNhbGxpbmcgbGlmZWN5Y2xlc1xuXG4gICAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDsgLy8gVGhlIGNvbW1pdCBwaGFzZSBpcyBicm9rZW4gaW50byBzZXZlcmFsIHN1Yi1waGFzZXMuIFdlIGRvIGEgc2VwYXJhdGUgcGFzc1xuICAgIC8vIG9mIHRoZSBlZmZlY3QgbGlzdCBmb3IgZWFjaCBwaGFzZTogYWxsIG11dGF0aW9uIGVmZmVjdHMgY29tZSBiZWZvcmUgYWxsXG4gICAgLy8gbGF5b3V0IGVmZmVjdHMsIGFuZCBzbyBvbi5cbiAgICAvLyBUaGUgZmlyc3QgcGhhc2UgYSBcImJlZm9yZSBtdXRhdGlvblwiIHBoYXNlLiBXZSB1c2UgdGhpcyBwaGFzZSB0byByZWFkIHRoZVxuICAgIC8vIHN0YXRlIG9mIHRoZSBob3N0IHRyZWUgcmlnaHQgYmVmb3JlIHdlIG11dGF0ZSBpdC4gVGhpcyBpcyB3aGVyZVxuICAgIC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlIGlzIGNhbGxlZC5cblxuICAgIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSA9IHByZXBhcmVGb3JDb21taXQocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSBmYWxzZTtcbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMsIG51bGwpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEobmV4dEVmZmVjdCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKG5leHRFZmZlY3QsIGVycm9yKTtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCk7IC8vIFdlIG5vIGxvbmdlciBuZWVkIHRvIHRyYWNrIHRoZSBhY3RpdmUgaW5zdGFuY2UgZmliZXJcblxuXG4gICAgZm9jdXNlZEluc3RhbmNlSGFuZGxlID0gbnVsbDtcblxuICAgIHtcbiAgICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgY29tbWl0IHRpbWUgdG8gYmUgc2hhcmVkIGJ5IGFsbCBQcm9maWxlcnMgaW4gdGhpc1xuICAgICAgLy8gYmF0Y2guIFRoaXMgZW5hYmxlcyB0aGVtIHRvIGJlIGdyb3VwZWQgbGF0ZXIuXG4gICAgICByZWNvcmRDb21taXRUaW1lKCk7XG4gICAgfSAvLyBUaGUgbmV4dCBwaGFzZSBpcyB0aGUgbXV0YXRpb24gcGhhc2UsIHdoZXJlIHdlIG11dGF0ZSB0aGUgaG9zdCB0cmVlLlxuXG5cbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRNdXRhdGlvbkVmZmVjdHMsIG51bGwsIHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEobmV4dEVmZmVjdCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9lcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKG5leHRFZmZlY3QsIF9lcnJvcik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpO1xuXG4gICAgcmVzZXRBZnRlckNvbW1pdChyb290LmNvbnRhaW5lckluZm8pOyAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyB0cmVlIGlzIG5vdyB0aGUgY3VycmVudCB0cmVlLiBUaGlzIG11c3QgY29tZSBhZnRlclxuICAgIC8vIHRoZSBtdXRhdGlvbiBwaGFzZSwgc28gdGhhdCB0aGUgcHJldmlvdXMgdHJlZSBpcyBzdGlsbCBjdXJyZW50IGR1cmluZ1xuICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50LCBidXQgYmVmb3JlIHRoZSBsYXlvdXQgcGhhc2UsIHNvIHRoYXQgdGhlIGZpbmlzaGVkXG4gICAgLy8gd29yayBpcyBjdXJyZW50IGR1cmluZyBjb21wb25lbnREaWRNb3VudC9VcGRhdGUuXG5cbiAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7IC8vIFRoZSBuZXh0IHBoYXNlIGlzIHRoZSBsYXlvdXQgcGhhc2UsIHdoZXJlIHdlIGNhbGwgZWZmZWN0cyB0aGF0IHJlYWRcbiAgICAvLyB0aGUgaG9zdCB0cmVlIGFmdGVyIGl0J3MgYmVlbiBtdXRhdGVkLiBUaGUgaWRpb21hdGljIHVzZSBjYXNlIGZvciB0aGlzIGlzXG4gICAgLy8gbGF5b3V0LCBidXQgY2xhc3MgY29tcG9uZW50IGxpZmVjeWNsZXMgYWxzbyBmaXJlIGhlcmUgZm9yIGxlZ2FjeSByZWFzb25zLlxuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0TGF5b3V0RWZmZWN0cywgbnVsbCwgcm9vdCwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEobmV4dEVmZmVjdCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9lcnJvcjIgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBfZXJyb3IyKTtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCk7XG5cbiAgICBuZXh0RWZmZWN0ID0gbnVsbDsgLy8gVGVsbCBTY2hlZHVsZXIgdG8geWllbGQgYXQgdGhlIGVuZCBvZiB0aGUgZnJhbWUsIHNvIHRoZSBicm93c2VyIGhhcyBhblxuICAgIC8vIG9wcG9ydHVuaXR5IHRvIHBhaW50LlxuXG4gICAgcmVxdWVzdFBhaW50KCk7XG5cbiAgICB7XG4gICAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gICAgfVxuXG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICB9IGVsc2Uge1xuICAgIC8vIE5vIGVmZmVjdHMuXG4gICAgcm9vdC5jdXJyZW50ID0gZmluaXNoZWRXb3JrOyAvLyBNZWFzdXJlIHRoZXNlIGFueXdheSBzbyB0aGUgZmxhbWVncmFwaCBleHBsaWNpdGx5IHNob3dzIHRoYXQgdGhlcmUgd2VyZVxuICAgIC8vIG5vIGVmZmVjdHMuXG4gICAgLy8gVE9ETzogTWF5YmUgdGhlcmUncyBhIGJldHRlciB3YXkgdG8gcmVwb3J0IHRoaXMuXG5cbiAgICB7XG4gICAgICByZWNvcmRDb21taXRUaW1lKCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMgPSByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cztcblxuICBpZiAocm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAvLyBUaGlzIGNvbW1pdCBoYXMgcGFzc2l2ZSBlZmZlY3RzLiBTdGFzaCBhIHJlZmVyZW5jZSB0byB0aGVtLiBCdXQgZG9uJ3RcbiAgICAvLyBzY2hlZHVsZSBhIGNhbGxiYWNrIHVudGlsIGFmdGVyIGZsdXNoaW5nIGxheW91dCB3b3JrLlxuICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG4gICAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSByb290O1xuICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gbGFuZXM7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSByZW5kZXJQcmlvcml0eUxldmVsO1xuICB9IGVsc2Uge1xuICAgIC8vIFdlIGFyZSBkb25lIHdpdGggdGhlIGVmZmVjdCBjaGFpbiBhdCB0aGlzIHBvaW50IHNvIGxldCdzIGNsZWFyIHRoZVxuICAgIC8vIG5leHRFZmZlY3QgcG9pbnRlcnMgdG8gYXNzaXN0IHdpdGggR0MuIElmIHdlIGhhdmUgcGFzc2l2ZSBlZmZlY3RzLCB3ZSdsbFxuICAgIC8vIGNsZWFyIHRoaXMgaW4gZmx1c2hQYXNzaXZlRWZmZWN0cy5cbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5leHROZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgbmV4dEVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcblxuICAgICAgaWYgKG5leHRFZmZlY3QuZmxhZ3MgJiBEZWxldGlvbikge1xuICAgICAgICBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhuZXh0RWZmZWN0KTtcbiAgICAgIH1cblxuICAgICAgbmV4dEVmZmVjdCA9IG5leHROZXh0RWZmZWN0O1xuICAgIH1cbiAgfSAvLyBSZWFkIHRoaXMgYWdhaW4sIHNpbmNlIGFuIGVmZmVjdCBtaWdodCBoYXZlIHVwZGF0ZWQgaXRcblxuXG4gIHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7IC8vIENoZWNrIGlmIHRoZXJlJ3MgcmVtYWluaW5nIHdvcmsgb24gdGhpcyByb290XG5cbiAgaWYgKHJlbWFpbmluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAge1xuICAgICAgaWYgKHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBleHBpcmF0aW9uVGltZXMgPSBzcGF3bmVkV29ya0R1cmluZ1JlbmRlcjtcbiAgICAgICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBudWxsO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwaXJhdGlvblRpbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgc2NoZWR1bGVJbnRlcmFjdGlvbnMocm9vdCwgZXhwaXJhdGlvblRpbWVzW2ldLCByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgcmVtYWluaW5nTGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIHJlbWFpbmluZyB3b3JrLCB3ZSBjYW4gY2xlYXIgdGhlIHNldCBvZiBhbHJlYWR5IGZhaWxlZFxuICAgIC8vIGVycm9yIGJvdW5kYXJpZXMuXG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICghcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBhc3NpdmUgZWZmZWN0cywgdGhlbiB3ZSBjYW4gY29tcGxldGUgdGhlIHBlbmRpbmcgaW50ZXJhY3Rpb25zLlxuICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSdsbCB3YWl0IHVudGlsIGFmdGVyIHRoZSBwYXNzaXZlIGVmZmVjdHMgYXJlIGZsdXNoZWQuXG4gICAgICAvLyBXYWl0IHRvIGRvIHRoaXMgdW50aWwgYWZ0ZXIgcmVtYWluaW5nIHdvcmsgaGFzIGJlZW4gc2NoZWR1bGVkLFxuICAgICAgLy8gc28gdGhhdCB3ZSBkb24ndCBwcmVtYXR1cmVseSBzaWduYWwgY29tcGxldGUgZm9yIGludGVyYWN0aW9ucyB3aGVuIHRoZXJlJ3MgZS5nLiBoaWRkZW4gd29yay5cbiAgICAgIGZpbmlzaFBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZW1haW5pbmdMYW5lcyA9PT0gU3luY0xhbmUpIHtcbiAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSByb290IHN5bmNocm9ub3VzbHkgcmUtcmVuZGVycyB3aXRob3V0XG4gICAgLy8gZmluaXNoaW5nLiBJZiB0aGVyZSBhcmUgdG9vIG1hbnksIGl0IGluZGljYXRlcyBhbiBpbmZpbml0ZSB1cGRhdGUgbG9vcC5cbiAgICBpZiAocm9vdCA9PT0gcm9vdFdpdGhOZXN0ZWRVcGRhdGVzKSB7XG4gICAgICBuZXN0ZWRVcGRhdGVDb3VudCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgICByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSByb290O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gIH1cblxuICBvbkNvbW1pdFJvb3QoZmluaXNoZWRXb3JrLnN0YXRlTm9kZSwgcmVuZGVyUHJpb3JpdHlMZXZlbCk7XG5cbiAge1xuICAgIG9uQ29tbWl0Um9vdCQxKCk7XG4gIH0gLy8gQWx3YXlzIGNhbGwgdGhpcyBiZWZvcmUgZXhpdGluZyBgY29tbWl0Um9vdGAsIHRvIGVuc3VyZSB0aGF0IGFueVxuICAvLyBhZGRpdGlvbmFsIHdvcmsgb24gdGhpcyByb290IGlzIHNjaGVkdWxlZC5cblxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG5cbiAgaWYgKGhhc1VuY2F1Z2h0RXJyb3IpIHtcbiAgICBoYXNVbmNhdWdodEVycm9yID0gZmFsc2U7XG4gICAgdmFyIF9lcnJvcjMgPSBmaXJzdFVuY2F1Z2h0RXJyb3I7XG4gICAgZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbDtcbiAgICB0aHJvdyBfZXJyb3IzO1xuICB9XG5cbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCkgIT09IE5vQ29udGV4dCkge1xuICAgIC8vIGEgUmVhY3RET00ucmVuZGVyLWVkIHJvb3QgaW5zaWRlIG9mIGJhdGNoZWRVcGRhdGVzLiBUaGUgY29tbWl0IGZpcmVkXG4gICAgLy8gc3luY2hyb25vdXNseSwgYnV0IGxheW91dCB1cGRhdGVzIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCB0aGUgZW5kXG4gICAgLy8gb2YgdGhlIGJhdGNoLlxuXG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBJZiBsYXlvdXQgd29yayB3YXMgc2NoZWR1bGVkLCBmbHVzaCBpdCBub3cuXG5cblxuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cygpIHtcbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKCFzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgJiYgZm9jdXNlZEluc3RhbmNlSGFuZGxlICE9PSBudWxsKSB7XG4gICAgICBpZiAoKG5leHRFZmZlY3QuZmxhZ3MgJiBEZWxldGlvbikgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgaWYgKGRvZXNGaWJlckNvbnRhaW4obmV4dEVmZmVjdCwgZm9jdXNlZEluc3RhbmNlSGFuZGxlKSkge1xuICAgICAgICAgIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBvdXQgb2YgdGhlIGhvdCBwYXRoIHVzaW5nIGEgZGVkaWNhdGVkIGVmZmVjdCB0YWcuXG4gICAgICAgIGlmIChuZXh0RWZmZWN0LnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgaXNTdXNwZW5zZUJvdW5kYXJ5QmVpbmdIaWRkZW4oY3VycmVudCwgbmV4dEVmZmVjdCkgJiYgZG9lc0ZpYmVyQ29udGFpbihuZXh0RWZmZWN0LCBmb2N1c2VkSW5zdGFuY2VIYW5kbGUpKSB7XG4gICAgICAgICAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmbGFncyA9IG5leHRFZmZlY3QuZmxhZ3M7XG5cbiAgICBpZiAoKGZsYWdzICYgU25hcHNob3QpICE9PSBOb0ZsYWdzKSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIobmV4dEVmZmVjdCk7XG4gICAgICBjb21taXRCZWZvcmVNdXRhdGlvbkxpZmVDeWNsZXMoY3VycmVudCwgbmV4dEVmZmVjdCk7XG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIH1cblxuICAgIGlmICgoZmxhZ3MgJiBQYXNzaXZlKSAhPT0gTm9GbGFncykge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIHBhc3NpdmUgZWZmZWN0cywgc2NoZWR1bGUgYSBjYWxsYmFjayB0byBmbHVzaCBhdFxuICAgICAgLy8gdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5LlxuICAgICAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgICAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgICAgIHNjaGVkdWxlQ2FsbGJhY2soTm9ybWFsUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRNdXRhdGlvbkVmZmVjdHMocm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICAvLyBUT0RPOiBTaG91bGQgcHJvYmFibHkgbW92ZSB0aGUgYnVsayBvZiB0aGlzIGZ1bmN0aW9uIHRvIGNvbW1pdFdvcmsuXG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgc2V0Q3VycmVudEZpYmVyKG5leHRFZmZlY3QpO1xuICAgIHZhciBmbGFncyA9IG5leHRFZmZlY3QuZmxhZ3M7XG5cbiAgICBpZiAoZmxhZ3MgJiBDb250ZW50UmVzZXQpIHtcbiAgICAgIGNvbW1pdFJlc2V0VGV4dENvbnRlbnQobmV4dEVmZmVjdCk7XG4gICAgfVxuXG4gICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICB2YXIgY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjb21taXREZXRhY2hSZWYoY3VycmVudCk7XG4gICAgICB9XG4gICAgfSAvLyBUaGUgZm9sbG93aW5nIHN3aXRjaCBzdGF0ZW1lbnQgaXMgb25seSBjb25jZXJuZWQgYWJvdXQgcGxhY2VtZW50LFxuICAgIC8vIHVwZGF0ZXMsIGFuZCBkZWxldGlvbnMuIFRvIGF2b2lkIG5lZWRpbmcgdG8gYWRkIGEgY2FzZSBmb3IgZXZlcnkgcG9zc2libGVcbiAgICAvLyBiaXRtYXAgdmFsdWUsIHdlIHJlbW92ZSB0aGUgc2Vjb25kYXJ5IGVmZmVjdHMgZnJvbSB0aGUgZWZmZWN0IHRhZyBhbmRcbiAgICAvLyBzd2l0Y2ggb24gdGhhdCB2YWx1ZS5cblxuXG4gICAgdmFyIHByaW1hcnlGbGFncyA9IGZsYWdzICYgKFBsYWNlbWVudCB8IFVwZGF0ZSB8IERlbGV0aW9uIHwgSHlkcmF0aW5nKTtcblxuICAgIHN3aXRjaCAocHJpbWFyeUZsYWdzKSB7XG4gICAgICBjYXNlIFBsYWNlbWVudDpcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdFBsYWNlbWVudChuZXh0RWZmZWN0KTsgLy8gQ2xlYXIgdGhlIFwicGxhY2VtZW50XCIgZnJvbSBlZmZlY3QgdGFnIHNvIHRoYXQgd2Uga25vdyB0aGF0IHRoaXMgaXNcbiAgICAgICAgICAvLyBpbnNlcnRlZCwgYmVmb3JlIGFueSBsaWZlLWN5Y2xlcyBsaWtlIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkLlxuICAgICAgICAgIC8vIFRPRE86IGZpbmRET01Ob2RlIGRvZXNuJ3QgcmVseSBvbiB0aGlzIGFueSBtb3JlIGJ1dCBpc01vdW50ZWQgZG9lc1xuICAgICAgICAgIC8vIGFuZCBpc01vdW50ZWQgaXMgZGVwcmVjYXRlZCBhbnl3YXkgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8ga2lsbCB0aGlzLlxuXG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+UGxhY2VtZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUGxhY2VtZW50QW5kVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gUGxhY2VtZW50XG4gICAgICAgICAgY29tbWl0UGxhY2VtZW50KG5leHRFZmZlY3QpOyAvLyBDbGVhciB0aGUgXCJwbGFjZW1lbnRcIiBmcm9tIGVmZmVjdCB0YWcgc28gdGhhdCB3ZSBrbm93IHRoYXQgdGhpcyBpc1xuICAgICAgICAgIC8vIGluc2VydGVkLCBiZWZvcmUgYW55IGxpZmUtY3ljbGVzIGxpa2UgY29tcG9uZW50RGlkTW91bnQgZ2V0cyBjYWxsZWQuXG5cbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5QbGFjZW1lbnQ7IC8vIFVwZGF0ZVxuXG4gICAgICAgICAgdmFyIF9jdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudCwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIeWRyYXRpbmc6XG4gICAgICAgIHtcbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5IeWRyYXRpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIeWRyYXRpbmdBbmRVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5IeWRyYXRpbmc7IC8vIFVwZGF0ZVxuXG4gICAgICAgICAgdmFyIF9jdXJyZW50MiA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdFdvcmsoX2N1cnJlbnQyLCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFVwZGF0ZTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfY3VycmVudDMgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50MywgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBEZWxldGlvbjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdERlbGV0aW9uKHJvb3QsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdExheW91dEVmZmVjdHMocm9vdCwgY29tbWl0dGVkTGFuZXMpIHtcblxuXG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgc2V0Q3VycmVudEZpYmVyKG5leHRFZmZlY3QpO1xuICAgIHZhciBmbGFncyA9IG5leHRFZmZlY3QuZmxhZ3M7XG5cbiAgICBpZiAoZmxhZ3MgJiAoVXBkYXRlIHwgQ2FsbGJhY2spKSB7XG4gICAgICB2YXIgY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgY29tbWl0TGlmZUN5Y2xlcyhyb290LCBjdXJyZW50LCBuZXh0RWZmZWN0KTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoZmxhZ3MgJiBSZWYpIHtcbiAgICAgICAgY29tbWl0QXR0YWNoUmVmKG5leHRFZmZlY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzKCkge1xuICAvLyBSZXR1cm5zIHdoZXRoZXIgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgZmx1c2hlZC5cbiAgaWYgKHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ICE9PSBOb1ByaW9yaXR5JDEpIHtcbiAgICB2YXIgcHJpb3JpdHlMZXZlbCA9IHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID4gTm9ybWFsUHJpb3JpdHkkMSA/IE5vcm1hbFByaW9yaXR5JDEgOiBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eTtcbiAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA9IE5vUHJpb3JpdHkkMTtcblxuICAgIHtcbiAgICAgIHJldHVybiBydW5XaXRoUHJpb3JpdHkkMShwcmlvcml0eUxldmVsLCBmbHVzaFBhc3NpdmVFZmZlY3RzSW1wbCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdE1vdW50KGZpYmVyLCBlZmZlY3QpIHtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50LnB1c2goZWZmZWN0LCBmaWJlcik7XG5cbiAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0VW5tb3VudChmaWJlciwgZWZmZWN0KSB7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50LnB1c2goZWZmZWN0LCBmaWJlcik7XG5cbiAge1xuICAgIGZpYmVyLmZsYWdzIHw9IFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgYWx0ZXJuYXRlLmZsYWdzIHw9IFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICB9XG4gIH1cblxuICBpZiAoIXJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgIHNjaGVkdWxlQ2FsbGJhY2soTm9ybWFsUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlUGFzc2l2ZUVmZmVjdENyZWF0ZShlZmZlY3QpIHtcbiAgdmFyIGNyZWF0ZSA9IGVmZmVjdC5jcmVhdGU7XG4gIGVmZmVjdC5kZXN0cm95ID0gY3JlYXRlKCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHNJbXBsKCkge1xuICBpZiAocm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcm9vdCA9IHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzO1xuICB2YXIgbGFuZXMgPSBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcztcbiAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsO1xuICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCBmbHVzaCBwYXNzaXZlIGVmZmVjdHMgd2hpbGUgYWxyZWFkeSByZW5kZXJpbmcuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpOyAvLyBJdCdzIGltcG9ydGFudCB0aGF0IEFMTCBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0IGRlc3Ryb3kgZnVuY3Rpb25zIGFyZSBjYWxsZWRcbiAgLy8gYmVmb3JlIEFOWSBwYXNzaXZlIGVmZmVjdCBjcmVhdGUgZnVuY3Rpb25zIGFyZSBjYWxsZWQuXG4gIC8vIE90aGVyd2lzZSBlZmZlY3RzIGluIHNpYmxpbmcgY29tcG9uZW50cyBtaWdodCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyLlxuICAvLyBlLmcuIGEgZGVzdHJveSBmdW5jdGlvbiBpbiBvbmUgY29tcG9uZW50IG1heSB1bmludGVudGlvbmFsbHkgb3ZlcnJpZGUgYSByZWZcbiAgLy8gdmFsdWUgc2V0IGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50LlxuICAvLyBMYXlvdXQgZWZmZWN0cyBoYXZlIHRoZSBzYW1lIGNvbnN0cmFpbnQuXG4gIC8vIEZpcnN0IHBhc3M6IERlc3Ryb3kgc3RhbGUgcGFzc2l2ZSBlZmZlY3RzLlxuXG4gIHZhciB1bm1vdW50RWZmZWN0cyA9IHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50O1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdW5tb3VudEVmZmVjdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgX2VmZmVjdCA9IHVubW91bnRFZmZlY3RzW2ldO1xuICAgIHZhciBmaWJlciA9IHVubW91bnRFZmZlY3RzW2kgKyAxXTtcbiAgICB2YXIgZGVzdHJveSA9IF9lZmZlY3QuZGVzdHJveTtcbiAgICBfZWZmZWN0LmRlc3Ryb3kgPSB1bmRlZmluZWQ7XG5cbiAgICB7XG4gICAgICBmaWJlci5mbGFncyAmPSB+UGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBhbHRlcm5hdGUuZmxhZ3MgJj0gflBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGRlc3Ryb3ksIG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShmaWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpYmVyLCBlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBTZWNvbmQgcGFzczogQ3JlYXRlIG5ldyBwYXNzaXZlIGVmZmVjdHMuXG5cblxuICB2YXIgbW91bnRFZmZlY3RzID0gcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50O1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQgPSBbXTtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbW91bnRFZmZlY3RzLmxlbmd0aDsgX2kgKz0gMikge1xuICAgIHZhciBfZWZmZWN0MiA9IG1vdW50RWZmZWN0c1tfaV07XG4gICAgdmFyIF9maWJlciA9IG1vdW50RWZmZWN0c1tfaSArIDFdO1xuXG4gICAge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKF9maWJlcik7XG5cbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGludm9rZVBhc3NpdmVFZmZlY3RDcmVhdGUsIG51bGwsIF9lZmZlY3QyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgaWYgKCEoX2ZpYmVyICE9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfZXJyb3I0ID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKF9maWJlciwgX2Vycm9yNCk7XG4gICAgICB9XG5cbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgfVxuICB9IC8vIE5vdGU6IFRoaXMgY3VycmVudGx5IGFzc3VtZXMgdGhlcmUgYXJlIG5vIHBhc3NpdmUgZWZmZWN0cyBvbiB0aGUgcm9vdCBmaWJlclxuICAvLyBiZWNhdXNlIHRoZSByb290IGlzIG5vdCBwYXJ0IG9mIGl0cyBvd24gZWZmZWN0IGxpc3QuXG4gIC8vIFRoaXMgY291bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cblxuICB2YXIgZWZmZWN0ID0gcm9vdC5jdXJyZW50LmZpcnN0RWZmZWN0O1xuXG4gIHdoaWxlIChlZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmV4dE5leHRFZmZlY3QgPSBlZmZlY3QubmV4dEVmZmVjdDsgLy8gUmVtb3ZlIG5leHRFZmZlY3QgcG9pbnRlciB0byBhc3Npc3QgR0NcblxuICAgIGVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcblxuICAgIGlmIChlZmZlY3QuZmxhZ3MgJiBEZWxldGlvbikge1xuICAgICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZWZmZWN0KTtcbiAgICB9XG5cbiAgICBlZmZlY3QgPSBuZXh0TmV4dEVmZmVjdDtcbiAgfVxuXG4gIHtcbiAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gICAgZmluaXNoUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gIH1cblxuICB7XG4gICAgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG4gIH1cblxuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTsgLy8gSWYgYWRkaXRpb25hbCBwYXNzaXZlIGVmZmVjdHMgd2VyZSBzY2hlZHVsZWQsIGluY3JlbWVudCBhIGNvdW50ZXIuIElmIHRoaXNcbiAgLy8gZXhjZWVkcyB0aGUgbGltaXQsIHdlJ2xsIGZpcmUgYSB3YXJuaW5nLlxuXG4gIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID09PSBudWxsID8gMCA6IG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCArIDE7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSB7XG4gIHJldHVybiBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCAhPT0gbnVsbCAmJiBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5oYXMoaW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gbWFya0xlZ2FjeUVycm9yQm91bmRhcnlBc0ZhaWxlZChpbnN0YW5jZSkge1xuICBpZiAobGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPT09IG51bGwpIHtcbiAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG5ldyBTZXQoW2luc3RhbmNlXSk7XG4gIH0gZWxzZSB7XG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuYWRkKGluc3RhbmNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9UaHJvd1VuY2F1Z2h0RXJyb3IoZXJyb3IpIHtcbiAgaWYgKCFoYXNVbmNhdWdodEVycm9yKSB7XG4gICAgaGFzVW5jYXVnaHRFcnJvciA9IHRydWU7XG4gICAgZmlyc3RVbmNhdWdodEVycm9yID0gZXJyb3I7XG4gIH1cbn1cblxudmFyIG9uVW5jYXVnaHRFcnJvciA9IHByZXBhcmVUb1Rocm93VW5jYXVnaHRFcnJvcjtcblxuZnVuY3Rpb24gY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qocm9vdEZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpIHtcbiAgdmFyIGVycm9ySW5mbyA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUoZXJyb3IsIHNvdXJjZUZpYmVyKTtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShyb290RmliZXIsIGVycm9ySW5mbywgU3luY0xhbmUpO1xuICBlbnF1ZXVlVXBkYXRlKHJvb3RGaWJlciwgdXBkYXRlKTtcbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChyb290RmliZXIsIFN5bmNMYW5lKTtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIG1hcmtSb290VXBkYXRlZChyb290LCBTeW5jTGFuZSwgZXZlbnRUaW1lKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgU3luY0xhbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKHNvdXJjZUZpYmVyLCBlcnJvcikge1xuICBpZiAoc291cmNlRmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgIC8vIEVycm9yIHdhcyB0aHJvd24gYXQgdGhlIHJvb3QuIFRoZXJlIGlzIG5vIHBhcmVudCwgc28gdGhlIHJvb3RcbiAgICAvLyBpdHNlbGYgc2hvdWxkIGNhcHR1cmUgaXQuXG4gICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qoc291cmNlRmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGZpYmVyID0gc291cmNlRmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgIGlmIChmaWJlci50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChmaWJlciwgc291cmNlRmliZXIsIGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgIHZhciBjdG9yID0gZmliZXIudHlwZTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSB7XG4gICAgICAgIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIFN5bmNMYW5lKTtcbiAgICAgICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICAgICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICAgICAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIFN5bmNMYW5lLCBldmVudFRpbWUpO1xuICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgICAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBTeW5jTGFuZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhpcyBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiB1bm1vdW50ZWQuXG4gICAgICAgICAgLy8gV2UgY2FuJ3Qgc2NoZWR1bGUgYW55IGZvbGxvdyB1cCB3b3JrIGZvciB0aGUgcm9vdCBiZWNhdXNlIHRoZSBmaWJlciBpcyBhbHJlYWR5IHVubW91bnRlZCxcbiAgICAgICAgICAvLyBidXQgd2UgY2FuIHN0aWxsIGNhbGwgdGhlIGxvZy1vbmx5IGJvdW5kYXJ5IHNvIHRoZSBlcnJvciBpc24ndCBzd2FsbG93ZWQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUT0RPIFRoaXMgaXMgb25seSBhIHRlbXBvcmFyeSBiYW5kYWlkIGZvciB0aGUgb2xkIHJlY29uY2lsZXIgZm9yay5cbiAgICAgICAgICAvLyBXZSBjYW4gZGVsZXRlIHRoaXMgc3BlY2lhbCBjYXNlIG9uY2UgdGhlIG5ldyBmb3JrIGlzIG1lcmdlZC5cbiAgICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IsIGVycm9ySW5mbyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvclRvSWdub3JlKSB7Ly8gVE9ETyBJZ25vcmUgdGhpcyBlcnJvcj8gUmV0aHJvdyBpdD9cbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBraW5kIG9mIGFuIGVkZ2UgY2FzZS5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmliZXIgPSBmaWJlci5yZXR1cm47XG4gIH1cbn1cbmZ1bmN0aW9uIHBpbmdTdXNwZW5kZWRSb290KHJvb3QsIHdha2VhYmxlLCBwaW5nZWRMYW5lcykge1xuICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG5cbiAgaWYgKHBpbmdDYWNoZSAhPT0gbnVsbCkge1xuICAgIC8vIFRoZSB3YWtlYWJsZSByZXNvbHZlZCwgc28gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gbWVtb2l6ZSwgYmVjYXVzZSBpdCB3aWxsXG4gICAgLy8gbmV2ZXIgYmUgdGhyb3duIGFnYWluLlxuICAgIHBpbmdDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgbWFya1Jvb3RQaW5nZWQocm9vdCwgcGluZ2VkTGFuZXMpO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgPT09IHJvb3QgJiYgaXNTdWJzZXRPZkxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLCBwaW5nZWRMYW5lcykpIHtcbiAgICAvLyBSZWNlaXZlZCBhIHBpbmcgYXQgdGhlIHNhbWUgcHJpb3JpdHkgbGV2ZWwgYXQgd2hpY2ggd2UncmUgY3VycmVudGx5XG4gICAgLy8gcmVuZGVyaW5nLiBXZSBtaWdodCB3YW50IHRvIHJlc3RhcnQgdGhpcyByZW5kZXIuIFRoaXMgc2hvdWxkIG1pcnJvclxuICAgIC8vIHRoZSBsb2dpYyBvZiB3aGV0aGVyIG9yIG5vdCBhIHJvb3Qgc3VzcGVuZHMgb25jZSBpdCBjb21wbGV0ZXMuXG4gICAgLy8gVE9ETzogSWYgd2UncmUgcmVuZGVyaW5nIHN5bmMgZWl0aGVyIGR1ZSB0byBTeW5jLCBCYXRjaGVkIG9yIGV4cGlyZWQsXG4gICAgLy8gd2Ugc2hvdWxkIHByb2JhYmx5IG5ldmVyIHJlc3RhcnQuXG4gICAgLy8gSWYgd2UncmUgc3VzcGVuZGVkIHdpdGggZGVsYXksIG9yIGlmIGl0J3MgYSByZXRyeSwgd2UnbGwgYWx3YXlzIHN1c3BlbmRcbiAgICAvLyBzbyB3ZSBjYW4gYWx3YXlzIHJlc3RhcnQuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgfHwgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZCAmJiBpbmNsdWRlc09ubHlSZXRyaWVzKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSAmJiBub3coKSAtIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPCBGQUxMQkFDS19USFJPVFRMRV9NUykge1xuICAgICAgLy8gUmVzdGFydCBmcm9tIHRoZSByb290LlxuICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGNhbid0IHJlc3RhcnQgcmlnaHQgbm93LCB3ZSBtaWdodCBnZXQgYW5cbiAgICAgIC8vIG9wcG9ydHVuaXR5IGxhdGVyLiBTbyB3ZSBtYXJrIHRoaXMgcmVuZGVyIGFzIGhhdmluZyBhIHBpbmcuXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMsIHBpbmdlZExhbmVzKTtcbiAgICB9XG4gIH1cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIHBpbmdlZExhbmVzKTtcbn1cblxuZnVuY3Rpb24gcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSkge1xuICAvLyBUaGUgYm91bmRhcnkgZmliZXIgKGEgU3VzcGVuc2UgY29tcG9uZW50IG9yIFN1c3BlbnNlTGlzdCBjb21wb25lbnQpXG4gIC8vIHByZXZpb3VzbHkgd2FzIHJlbmRlcmVkIGluIGl0cyBmYWxsYmFjayBzdGF0ZS4gT25lIG9mIHRoZSBwcm9taXNlcyB0aGF0XG4gIC8vIHN1c3BlbmRlZCBpdCBoYXMgcmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGF0IGxlYXN0IHBhcnQgb2YgdGhlIHRyZWUgd2FzXG4gIC8vIGxpa2VseSB1bmJsb2NrZWQuIFRyeSByZW5kZXJpbmcgYWdhaW4sIGF0IGEgbmV3IGV4cGlyYXRpb24gdGltZS5cbiAgaWYgKHJldHJ5TGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgcmV0cnlMYW5lID0gcmVxdWVzdFJldHJ5TGFuZShib3VuZGFyeUZpYmVyKTtcbiAgfSAvLyBUT0RPOiBTcGVjaWFsIGNhc2UgaWRsZSBwcmlvcml0eT9cblxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKTtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIG1hcmtSb290VXBkYXRlZChyb290LCByZXRyeUxhbmUsIGV2ZW50VGltZSk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIHJldHJ5TGFuZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVSZXRyeVdha2VhYmxlKGJvdW5kYXJ5RmliZXIsIHdha2VhYmxlKSB7XG4gIHZhciByZXRyeUxhbmUgPSBOb0xhbmU7IC8vIERlZmF1bHRcblxuICB2YXIgcmV0cnlDYWNoZTtcblxuICB7XG4gICAgcmV0cnlDYWNoZSA9IGJvdW5kYXJ5RmliZXIuc3RhdGVOb2RlO1xuICB9XG5cbiAgaWYgKHJldHJ5Q2FjaGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgd2FrZWFibGUgcmVzb2x2ZWQsIHNvIHdlIG5vIGxvbmdlciBuZWVkIHRvIG1lbW9pemUsIGJlY2F1c2UgaXQgd2lsbFxuICAgIC8vIG5ldmVyIGJlIHRocm93biBhZ2Fpbi5cbiAgICByZXRyeUNhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gIH1cblxuICByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKTtcbn0gLy8gQ29tcHV0ZXMgdGhlIG5leHQgSnVzdCBOb3RpY2VhYmxlIERpZmZlcmVuY2UgKEpORCkgYm91bmRhcnkuXG4vLyBUaGUgdGhlb3J5IGlzIHRoYXQgYSBwZXJzb24gY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHNtYWxsIGRpZmZlcmVuY2VzIGluIHRpbWUuXG4vLyBUaGVyZWZvcmUsIGlmIHdlIHdhaXQgYSBiaXQgbG9uZ2VyIHRoYW4gbmVjZXNzYXJ5IHRoYXQgd29uJ3QgdHJhbnNsYXRlIHRvIGEgbm90aWNlYWJsZVxuLy8gZGlmZmVyZW5jZSBpbiB0aGUgZXhwZXJpZW5jZS4gSG93ZXZlciwgd2FpdGluZyBmb3IgbG9uZ2VyIG1pZ2h0IG1lYW4gdGhhdCB3ZSBjYW4gYXZvaWRcbi8vIHNob3dpbmcgYW4gaW50ZXJtZWRpYXRlIGxvYWRpbmcgc3RhdGUuIFRoZSBsb25nZXIgd2UgaGF2ZSBhbHJlYWR5IHdhaXRlZCwgdGhlIGhhcmRlciBpdFxuLy8gaXMgdG8gdGVsbCBzbWFsbCBkaWZmZXJlbmNlcyBpbiB0aW1lLiBUaGVyZWZvcmUsIHRoZSBsb25nZXIgd2UndmUgYWxyZWFkeSB3YWl0ZWQsXG4vLyB0aGUgbG9uZ2VyIHdlIGNhbiB3YWl0IGFkZGl0aW9uYWxseS4gQXQgc29tZSBwb2ludCB3ZSBoYXZlIHRvIGdpdmUgdXAgdGhvdWdoLlxuLy8gV2UgcGljayBhIHRyYWluIG1vZGVsIHdoZXJlIHRoZSBuZXh0IGJvdW5kYXJ5IGNvbW1pdHMgYXQgYSBjb25zaXN0ZW50IHNjaGVkdWxlLlxuLy8gVGhlc2UgcGFydGljdWxhciBudW1iZXJzIGFyZSB2YWd1ZSBlc3RpbWF0ZXMuIFdlIGV4cGVjdCB0byBhZGp1c3QgdGhlbSBiYXNlZCBvbiByZXNlYXJjaC5cblxuZnVuY3Rpb24gam5kKHRpbWVFbGFwc2VkKSB7XG4gIHJldHVybiB0aW1lRWxhcHNlZCA8IDEyMCA/IDEyMCA6IHRpbWVFbGFwc2VkIDwgNDgwID8gNDgwIDogdGltZUVsYXBzZWQgPCAxMDgwID8gMTA4MCA6IHRpbWVFbGFwc2VkIDwgMTkyMCA/IDE5MjAgOiB0aW1lRWxhcHNlZCA8IDMwMDAgPyAzMDAwIDogdGltZUVsYXBzZWQgPCA0MzIwID8gNDMyMCA6IGNlaWwodGltZUVsYXBzZWQgLyAxOTYwKSAqIDE5NjA7XG59XG5cbmZ1bmN0aW9uIGNoZWNrRm9yTmVzdGVkVXBkYXRlcygpIHtcbiAgaWYgKG5lc3RlZFVwZGF0ZUNvdW50ID4gTkVTVEVEX1VQREFURV9MSU1JVCkge1xuICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgICByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsO1xuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgcmVwZWF0ZWRseSBjYWxscyBzZXRTdGF0ZSBpbnNpZGUgY29tcG9uZW50V2lsbFVwZGF0ZSBvciBjb21wb25lbnREaWRVcGRhdGUuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIG5lc3RlZCB1cGRhdGVzIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA+IE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCkge1xuICAgICAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDtcblxuICAgICAgZXJyb3IoJ01heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGNvbXBvbmVudCAnICsgXCJjYWxscyBzZXRTdGF0ZSBpbnNpZGUgdXNlRWZmZWN0LCBidXQgdXNlRWZmZWN0IGVpdGhlciBkb2Vzbid0IFwiICsgJ2hhdmUgYSBkZXBlbmRlbmN5IGFycmF5LCBvciBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VzIG9uICcgKyAnZXZlcnkgcmVuZGVyLicpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaFJlbmRlclBoYXNlU3RyaWN0TW9kZVdhcm5pbmdzSW5ERVYoKSB7XG4gIHtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nKCk7XG5cbiAgICB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncygpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG51bGw7XG5cbmZ1bmN0aW9uIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIFdlIGxldCB0aGUgb3RoZXIgd2FybmluZyBhYm91dCByZW5kZXIgcGhhc2UgdXBkYXRlcyBkZWFsIHdpdGggdGhpcyBvbmUuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoZmliZXIubW9kZSAmIChCbG9ja2luZ01vZGUgfCBDb25jdXJyZW50TW9kZSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRhZyA9IGZpYmVyLnRhZztcblxuICAgIGlmICh0YWcgIT09IEluZGV0ZXJtaW5hdGVDb21wb25lbnQgJiYgdGFnICE9PSBIb3N0Um9vdCAmJiB0YWcgIT09IENsYXNzQ29tcG9uZW50ICYmIHRhZyAhPT0gRnVuY3Rpb25Db21wb25lbnQgJiYgdGFnICE9PSBGb3J3YXJkUmVmICYmIHRhZyAhPT0gTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IFNpbXBsZU1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBCbG9jaykge1xuICAgICAgLy8gT25seSB3YXJuIGZvciB1c2VyLWRlZmluZWQgY29tcG9uZW50cywgbm90IGludGVybmFsIG9uZXMgbGlrZSBTdXNwZW5zZS5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIHNob3cgdGhlIHdob2xlIHN0YWNrIGJ1dCBkZWR1cGUgb24gdGhlIHRvcCBjb21wb25lbnQncyBuYW1lIGJlY2F1c2VcbiAgICAvLyB0aGUgcHJvYmxlbWF0aWMgY29kZSBhbG1vc3QgYWx3YXlzIGxpZXMgaW5zaWRlIHRoYXQgY29tcG9uZW50LlxuXG5cbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1JlYWN0Q29tcG9uZW50JztcblxuICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG5ldyBTZXQoW2NvbXBvbmVudE5hbWVdKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgZXJyb3IoXCJDYW4ndCBwZXJmb3JtIGEgUmVhY3Qgc3RhdGUgdXBkYXRlIG9uIGEgY29tcG9uZW50IHRoYXQgaGFzbid0IG1vdW50ZWQgeWV0LiBcIiArICdUaGlzIGluZGljYXRlcyB0aGF0IHlvdSBoYXZlIGEgc2lkZS1lZmZlY3QgaW4geW91ciByZW5kZXIgZnVuY3Rpb24gdGhhdCAnICsgJ2FzeW5jaHJvbm91c2x5IGxhdGVyIGNhbGxzIHRyaWVzIHRvIHVwZGF0ZSB0aGUgY29tcG9uZW50LiBNb3ZlIHRoaXMgd29yayB0byAnICsgJ3VzZUVmZmVjdCBpbnN0ZWFkLicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IG51bGw7XG5cbmZ1bmN0aW9uIHdhcm5BYm91dFVwZGF0ZU9uVW5tb3VudGVkRmliZXJJbkRFVihmaWJlcikge1xuICB7XG4gICAgdmFyIHRhZyA9IGZpYmVyLnRhZztcblxuICAgIGlmICh0YWcgIT09IEhvc3RSb290ICYmIHRhZyAhPT0gQ2xhc3NDb21wb25lbnQgJiYgdGFnICE9PSBGdW5jdGlvbkNvbXBvbmVudCAmJiB0YWcgIT09IEZvcndhcmRSZWYgJiYgdGFnICE9PSBNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gU2ltcGxlTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IEJsb2NrKSB7XG4gICAgICAvLyBPbmx5IHdhcm4gZm9yIHVzZXItZGVmaW5lZCBjb21wb25lbnRzLCBub3QgaW50ZXJuYWwgb25lcyBsaWtlIFN1c3BlbnNlLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgdGhlcmUgYXJlIHBlbmRpbmcgcGFzc2l2ZSBlZmZlY3RzIHVubW91bnRzIGZvciB0aGlzIEZpYmVyLFxuICAgIC8vIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGV5IHdvdWxkIGhhdmUgcHJldmVudGVkIHRoaXMgdXBkYXRlLlxuXG5cbiAgICBpZiAoKGZpYmVyLmZsYWdzICYgUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2KSAhPT0gTm9GbGFncykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2Ugc2hvdyB0aGUgd2hvbGUgc3RhY2sgYnV0IGRlZHVwZSBvbiB0aGUgdG9wIGNvbXBvbmVudCdzIG5hbWUgYmVjYXVzZVxuICAgIC8vIHRoZSBwcm9ibGVtYXRpYyBjb2RlIGFsbW9zdCBhbHdheXMgbGllcyBpbnNpZGUgdGhhdCBjb21wb25lbnQuXG5cblxuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnUmVhY3RDb21wb25lbnQnO1xuXG4gICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSBuZXcgU2V0KFtjb21wb25lbnROYW1lXSk7XG4gICAgfVxuXG4gICAgaWYgKGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cykgOyBlbHNlIHtcbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICBlcnJvcihcIkNhbid0IHBlcmZvcm0gYSBSZWFjdCBzdGF0ZSB1cGRhdGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC4gVGhpcyBcIiArICdpcyBhIG5vLW9wLCBidXQgaXQgaW5kaWNhdGVzIGEgbWVtb3J5IGxlYWsgaW4geW91ciBhcHBsaWNhdGlvbi4gVG8gJyArICdmaXgsIGNhbmNlbCBhbGwgc3Vic2NyaXB0aW9ucyBhbmQgYXN5bmNocm9ub3VzIHRhc2tzIGluICVzLicsIHRhZyA9PT0gQ2xhc3NDb21wb25lbnQgPyAndGhlIGNvbXBvbmVudFdpbGxVbm1vdW50IG1ldGhvZCcgOiAnYSB1c2VFZmZlY3QgY2xlYW51cCBmdW5jdGlvbicpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGJlZ2luV29yayQxO1xuXG57XG4gIHZhciBkdW1teUZpYmVyID0gbnVsbDtcblxuICBiZWdpbldvcmskMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcykge1xuICAgIC8vIElmIGEgY29tcG9uZW50IHRocm93cyBhbiBlcnJvciwgd2UgcmVwbGF5IGl0IGFnYWluIGluIGEgc3luY2hyb25vdXNseVxuICAgIC8vIGRpc3BhdGNoZWQgZXZlbnQsIHNvIHRoYXQgdGhlIGRlYnVnZ2VyIHdpbGwgdHJlYXQgaXQgYXMgYW4gdW5jYXVnaHRcbiAgICAvLyBlcnJvciBTZWUgUmVhY3RFcnJvclV0aWxzIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgIC8vIEJlZm9yZSBlbnRlcmluZyB0aGUgYmVnaW4gcGhhc2UsIGNvcHkgdGhlIHdvcmstaW4tcHJvZ3Jlc3Mgb250byBhIGR1bW15XG4gICAgLy8gZmliZXIuIElmIGJlZ2luV29yayB0aHJvd3MsIHdlJ2xsIHVzZSB0aGlzIHRvIHJlc2V0IHRoZSBzdGF0ZS5cbiAgICB2YXIgb3JpZ2luYWxXb3JrSW5Qcm9ncmVzc0NvcHkgPSBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVihkdW1teUZpYmVyLCB1bml0T2ZXb3JrKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYmVnaW5Xb3JrKGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKTtcbiAgICB9IGNhdGNoIChvcmlnaW5hbEVycm9yKSB7XG4gICAgICBpZiAob3JpZ2luYWxFcnJvciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3JpZ2luYWxFcnJvciA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9yaWdpbmFsRXJyb3IudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBEb24ndCByZXBsYXkgcHJvbWlzZXMuIFRyZWF0IGV2ZXJ5dGhpbmcgZWxzZSBsaWtlIGFuIGVycm9yLlxuICAgICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgICAgfSAvLyBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIHdpdGggaGFuZGxlRXJyb3I7IGFueSBjaGFuZ2VzIGhlcmUgbXVzdCBoYXZlXG4gICAgICAvLyBjb3JyZXNwb25kaW5nIGNoYW5nZXMgdGhlcmUuXG5cblxuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICByZXNldEhvb2tzQWZ0ZXJUaHJvdygpOyAvLyBEb24ndCByZXNldCBjdXJyZW50IGRlYnVnIGZpYmVyLCBzaW5jZSB3ZSdyZSBhYm91dCB0byB3b3JrIG9uIHRoZVxuICAgICAgLy8gc2FtZSBmaWJlciBhZ2Fpbi5cbiAgICAgIC8vIFVud2luZCB0aGUgZmFpbGVkIHN0YWNrIGZyYW1lXG5cbiAgICAgIHVud2luZEludGVycnVwdGVkV29yayh1bml0T2ZXb3JrKTsgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgcHJvcGVydGllcyBvZiB0aGUgZmliZXIuXG5cbiAgICAgIGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKHVuaXRPZldvcmssIG9yaWdpbmFsV29ya0luUHJvZ3Jlc3NDb3B5KTtcblxuICAgICAgaWYgKCB1bml0T2ZXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAvLyBSZXNldCB0aGUgcHJvZmlsZXIgdGltZXIuXG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKTtcbiAgICAgIH0gLy8gUnVuIGJlZ2luV29yayBhZ2Fpbi5cblxuXG4gICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgYmVnaW5Xb3JrLCBudWxsLCBjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcyk7XG5cbiAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgIHZhciByZXBsYXlFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTsgLy8gYGludm9rZUd1YXJkZWRDYWxsYmFja2Agc29tZXRpbWVzIHNldHMgYW4gZXhwYW5kbyBgX3N1cHByZXNzTG9nZ2luZ2AuXG4gICAgICAgIC8vIFJldGhyb3cgdGhpcyBlcnJvciBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBvbmUuXG5cbiAgICAgICAgdGhyb3cgcmVwbGF5RXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGJyYW5jaCBpcyByZWFjaGFibGUgaWYgdGhlIHJlbmRlciBwaGFzZSBpcyBpbXB1cmUuXG4gICAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG52YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSBmYWxzZTtcbnZhciBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQ7XG5cbntcbiAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50ID0gbmV3IFNldCgpO1xufVxuXG5mdW5jdGlvbiB3YXJuQWJvdXRSZW5kZXJQaGFzZVVwZGF0ZXNJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKGlzUmVuZGVyaW5nICYmIChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAhZ2V0SXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZUluREVWKCkpIHtcbiAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZW5kZXJpbmdDb21wb25lbnROYW1lID0gd29ya0luUHJvZ3Jlc3MgJiYgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnVW5rbm93bic7IC8vIERlZHVwZSBieSB0aGUgcmVuZGVyaW5nIGNvbXBvbmVudCBiZWNhdXNlIGl0J3MgdGhlIG9uZSB0aGF0IG5lZWRzIHRvIGJlIGZpeGVkLlxuXG4gICAgICAgICAgICB2YXIgZGVkdXBlS2V5ID0gcmVuZGVyaW5nQ29tcG9uZW50TmFtZTtcblxuICAgICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQuaGFzKGRlZHVwZUtleSkpIHtcbiAgICAgICAgICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50LmFkZChkZWR1cGVLZXkpO1xuICAgICAgICAgICAgICB2YXIgc2V0U3RhdGVDb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCB1cGRhdGUgYSBjb21wb25lbnQgKGAlc2ApIHdoaWxlIHJlbmRlcmluZyBhICcgKyAnZGlmZmVyZW50IGNvbXBvbmVudCAoYCVzYCkuIFRvIGxvY2F0ZSB0aGUgYmFkIHNldFN0YXRlKCkgY2FsbCBpbnNpZGUgYCVzYCwgJyArICdmb2xsb3cgdGhlIHN0YWNrIHRyYWNlIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc2V0c3RhdGUtaW4tcmVuZGVyJywgc2V0U3RhdGVDb21wb25lbnROYW1lLCByZW5kZXJpbmdDb21wb25lbnROYW1lLCByZW5kZXJpbmdDb21wb25lbnROYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlcikge1xuICAgICAgICAgICAgICBlcnJvcignQ2Fubm90IHVwZGF0ZSBkdXJpbmcgYW4gZXhpc3Rpbmcgc3RhdGUgdHJhbnNpdGlvbiAoc3VjaCBhcyAnICsgJ3dpdGhpbiBgcmVuZGVyYCkuIFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgJyArICdmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuJyk7XG5cbiAgICAgICAgICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIGEgJ3NoYXJlZCcgdmFyaWFibGUgdGhhdCBjaGFuZ2VzIHdoZW4gYWN0KCkgb3BlbnMvY2xvc2VzIGluIHRlc3RzLlxuXG5cbnZhciBJc1RoaXNSZW5kZXJlckFjdGluZyA9IHtcbiAgY3VycmVudDogZmFsc2Vcbn07XG5mdW5jdGlvbiB3YXJuSWZOb3RTY29wZWRXaXRoTWF0Y2hpbmdBY3QoZmliZXIpIHtcbiAge1xuICAgIGlmICggSXNTb21lUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gdHJ1ZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ICE9PSB0cnVlKSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgZXJyb3IoXCJJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyB0aGUgd3JvbmcgYWN0KCkgYXJvdW5kIHlvdXIgdGVzdCBpbnRlcmFjdGlvbnMuXFxuXCIgKyAnQmUgc3VyZSB0byB1c2UgdGhlIG1hdGNoaW5nIHZlcnNpb24gb2YgYWN0KCkgY29ycmVzcG9uZGluZyB0byB5b3VyIHJlbmRlcmVyOlxcblxcbicgKyAnLy8gZm9yIHJlYWN0LWRvbTpcXG4nICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgJ2ltcG9ydCB7YWN0fSBmcicgKyBcIm9tICdyZWFjdC1kb20vdGVzdC11dGlscyc7XFxuXCIgKyAnLy8gLi4uXFxuJyArICdhY3QoKCkgPT4gLi4uKTtcXG5cXG4nICsgJy8vIGZvciByZWFjdC10ZXN0LXJlbmRlcmVyOlxcbicgKyAvLyBCcmVhayB1cCBpbXBvcnRzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICAnaW1wb3J0IFRlc3RSZW5kZXJlciBmcicgKyBcIm9tIHJlYWN0LXRlc3QtcmVuZGVyZXInO1xcblwiICsgJ2NvbnN0IHthY3R9ID0gVGVzdFJlbmRlcmVyO1xcbicgKyAnLy8gLi4uXFxuJyArICdhY3QoKCkgPT4gLi4uKTsnKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdFZmZlY3RzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmICggKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSAhPT0gTm9Nb2RlICYmIElzU29tZVJlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlICYmIElzVGhpc1JlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICBlcnJvcignQW4gdXBkYXRlIHRvICVzIHJhbiBhbiBlZmZlY3QsIGJ1dCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuJyArICdXaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCBjYXVzZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBzaG91bGQgYmUgJyArICd3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuJyArICdhY3QoKCkgPT4ge1xcbicgKyAnICAvKiBmaXJlIGV2ZW50cyB0aGF0IHVwZGF0ZSBzdGF0ZSAqL1xcbicgKyAnfSk7XFxuJyArICcvKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcbicgKyBcIlRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgXCIgKyAnaW4gdGhlIGJyb3dzZXIuJyArICcgTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdCcsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmICggZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0ICYmIElzU29tZVJlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlICYmIElzVGhpc1JlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgZXJyb3IoJ0FuIHVwZGF0ZSB0byAlcyBpbnNpZGUgYSB0ZXN0IHdhcyBub3Qgd3JhcHBlZCBpbiBhY3QoLi4uKS5cXG5cXG4nICsgJ1doZW4gdGVzdGluZywgY29kZSB0aGF0IGNhdXNlcyBSZWFjdCBzdGF0ZSB1cGRhdGVzIHNob3VsZCBiZSAnICsgJ3dyYXBwZWQgaW50byBhY3QoLi4uKTpcXG5cXG4nICsgJ2FjdCgoKSA9PiB7XFxuJyArICcgIC8qIGZpcmUgZXZlbnRzIHRoYXQgdXBkYXRlIHN0YXRlICovXFxuJyArICd9KTtcXG4nICsgJy8qIGFzc2VydCBvbiB0aGUgb3V0cHV0ICovXFxuXFxuJyArIFwiVGhpcyBlbnN1cmVzIHRoYXQgeW91J3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIHdvdWxkIHNlZSBcIiArICdpbiB0aGUgYnJvd3Nlci4nICsgJyBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93cmFwLXRlc3RzLXdpdGgtYWN0JywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luRGV2ID0gd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luREVWOyAvLyBJbiB0ZXN0cywgd2Ugd2FudCB0byBlbmZvcmNlIGEgbW9ja2VkIHNjaGVkdWxlci5cblxudmFyIGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID0gZmFsc2U7IC8vIFRPRE8gQmVmb3JlIHdlIHJlbGVhc2UgY29uY3VycmVudCBtb2RlLCByZXZpc2l0IHRoaXMgYW5kIGRlY2lkZSB3aGV0aGVyIGEgbW9ja2VkXG4vLyBzY2hlZHVsZXIgaXMgdGhlIGFjdHVhbCByZWNvbW1lbmRhdGlvbi4gVGhlIGFsdGVybmF0aXZlIGNvdWxkIGJlIGEgdGVzdGluZyBidWlsZCxcbi8vIGEgbmV3IGxpYiwgb3Igd2hhdGV2ZXI7IHdlIGR1bm5vIGp1c3QgeWV0LiBUaGlzIG1lc3NhZ2UgaXMgZm9yIGVhcmx5IGFkb3B0ZXJzXG4vLyB0byBnZXQgdGhlaXIgdGVzdHMgcmlnaHQuXG5cbmZ1bmN0aW9uIHdhcm5JZlVubW9ja2VkU2NoZWR1bGVyKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkFib3V0VW5tb2NrZWRTY2hlZHVsZXIgPT09IGZhbHNlICYmIFNjaGVkdWxlci51bnN0YWJsZV9mbHVzaEFsbFdpdGhvdXRBc3NlcnRpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGZpYmVyLm1vZGUgJiBCbG9ja2luZ01vZGUgfHwgZmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignSW4gQ29uY3VycmVudCBvciBTeW5jIG1vZGVzLCB0aGUgXCJzY2hlZHVsZXJcIiBtb2R1bGUgbmVlZHMgdG8gYmUgbW9ja2VkICcgKyAndG8gZ3VhcmFudGVlIGNvbnNpc3RlbnQgYmVoYXZpb3VyIGFjcm9zcyB0ZXN0cyBhbmQgYnJvd3NlcnMuICcgKyAnRm9yIGV4YW1wbGUsIHdpdGggamVzdDogXFxuJyArIC8vIEJyZWFrIHVwIHJlcXVpcmVzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICBcImplc3QubW9jaygnc2NoZWR1bGVyJywgKCkgPT4gcmVxdWlyZVwiICsgXCIoJ3NjaGVkdWxlci91bnN0YWJsZV9tb2NrJykpO1xcblxcblwiICsgJ0ZvciBtb3JlIGluZm8sIHZpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9tb2NrLXNjaGVkdWxlcicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wdXRlVGhyZWFkSUQocm9vdCwgbGFuZSkge1xuICAvLyBJbnRlcmFjdGlvbiB0aHJlYWRzIGFyZSB1bmlxdWUgcGVyIHJvb3QgYW5kIGV4cGlyYXRpb24gdGltZS5cbiAgLy8gTk9URTogSW50ZW50aW9uYWxseSB1bnNvdW5kIGNhc3QuIEFsbCB0aGF0IG1hdHRlcnMgaXMgdGhhdCBpdCdzIGEgbnVtYmVyXG4gIC8vIGFuZCBpdCByZXByZXNlbnRzIGEgYmF0Y2ggb2Ygd29yay4gQ291bGQgbWFrZSBhIGhlbHBlciBmdW5jdGlvbiBpbnN0ZWFkLFxuICAvLyBidXQgbWVoIHRoaXMgaXMgZmluZSBmb3Igbm93LlxuICByZXR1cm4gbGFuZSAqIDEwMDAgKyByb290LmludGVyYWN0aW9uVGhyZWFkSUQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtTcGF3bmVkV29yayhsYW5lKSB7XG5cbiAgaWYgKHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID09PSBudWxsKSB7XG4gICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBbbGFuZV07XG4gIH0gZWxzZSB7XG4gICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIucHVzaChsYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZUludGVyYWN0aW9ucyhyb290LCBsYW5lLCBpbnRlcmFjdGlvbnMpIHtcblxuICBpZiAoaW50ZXJhY3Rpb25zLnNpemUgPiAwKSB7XG4gICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwO1xuICAgIHZhciBwZW5kaW5nSW50ZXJhY3Rpb25zID0gcGVuZGluZ0ludGVyYWN0aW9uTWFwLmdldChsYW5lKTtcblxuICAgIGlmIChwZW5kaW5nSW50ZXJhY3Rpb25zICE9IG51bGwpIHtcbiAgICAgIGludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICBpZiAoIXBlbmRpbmdJbnRlcmFjdGlvbnMuaGFzKGludGVyYWN0aW9uKSkge1xuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBhc3luYyB3b3JrIGNvdW50IGZvciBwcmV2aW91c2x5IHVuc2NoZWR1bGVkIGludGVyYWN0aW9uLlxuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbnMuYWRkKGludGVyYWN0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuc2V0KGxhbmUsIG5ldyBTZXQoaW50ZXJhY3Rpb25zKSk7IC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBhc3luYyB3b3JrIGNvdW50IGZvciB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG5cbiAgICAgIGludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgc3Vic2NyaWJlciA9IHRyYWNpbmcuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRocmVhZElEID0gY29tcHV0ZVRocmVhZElEKHJvb3QsIGxhbmUpO1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTY2hlZHVsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKSB7XG5cbiAgc2NoZWR1bGVJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSwgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50KTtcbn1cblxuZnVuY3Rpb24gc3RhcnRXb3JrT25QZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKSB7XG4gIC8vIHdlIGNhbiBhY2N1cmF0ZWx5IGF0dHJpYnV0ZSB0aW1lIHNwZW50IHdvcmtpbmcgb24gaXQsIEFuZCBzbyB0aGF0IGNhc2NhZGluZ1xuICAvLyB3b3JrIHRyaWdnZXJlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aCBpdC5cblxuXG4gIHZhciBpbnRlcmFjdGlvbnMgPSBuZXcgU2V0KCk7XG4gIHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwLmZvckVhY2goZnVuY3Rpb24gKHNjaGVkdWxlZEludGVyYWN0aW9ucywgc2NoZWR1bGVkTGFuZSkge1xuICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKGxhbmVzLCBzY2hlZHVsZWRMYW5lKSkge1xuICAgICAgc2NoZWR1bGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBpbnRlcmFjdGlvbnMuYWRkKGludGVyYWN0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7IC8vIFN0b3JlIHRoZSBjdXJyZW50IHNldCBvZiBpbnRlcmFjdGlvbnMgb24gdGhlIEZpYmVyUm9vdCBmb3IgYSBmZXcgcmVhc29uczpcbiAgLy8gV2UgY2FuIHJlLXVzZSBpdCBpbiBob3QgZnVuY3Rpb25zIGxpa2UgcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290KClcbiAgLy8gd2l0aG91dCBoYXZpbmcgdG8gcmVjYWxjdWxhdGUgaXQuIFdlIHdpbGwgYWxzbyB1c2UgaXQgaW4gY29tbWl0V29yaygpIHRvXG4gIC8vIHBhc3MgdG8gYW55IFByb2ZpbGVyIG9uUmVuZGVyKCkgaG9va3MuIFRoaXMgYWxzbyBwcm92aWRlcyBEZXZUb29scyB3aXRoIGFcbiAgLy8gd2F5IHRvIGFjY2VzcyBpdCB3aGVuIHRoZSBvbkNvbW1pdFJvb3QoKSBob29rIGlzIGNhbGxlZC5cblxuICByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zID0gaW50ZXJhY3Rpb25zO1xuXG4gIGlmIChpbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICB2YXIgc3Vic2NyaWJlciA9IHRyYWNpbmcuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRocmVhZElEID0gY29tcHV0ZVRocmVhZElEKHJvb3QsIGxhbmVzKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaFBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgY29tbWl0dGVkTGFuZXMpIHtcblxuICB2YXIgcmVtYWluaW5nTGFuZXNBZnRlckNvbW1pdCA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICB2YXIgc3Vic2NyaWJlcjtcblxuICB0cnkge1xuICAgIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgICAgLy8gRklYTUU6IE1vcmUgdGhhbiBvbmUgbGFuZSBjYW4gZmluaXNoIGluIGEgc2luZ2xlIGNvbW1pdC5cbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBjb21taXR0ZWRMYW5lcyk7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQocm9vdC5tZW1vaXplZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBJZiB0aGUgc3Vic2NyaWJlciB0aHJvd3MsIHJldGhyb3cgaXQgaW4gYSBzZXBhcmF0ZSB0YXNrXG4gICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBDbGVhciBjb21wbGV0ZWQgaW50ZXJhY3Rpb25zIGZyb20gdGhlIHBlbmRpbmcgTWFwLlxuICAgIC8vIFVubGVzcyB0aGUgcmVuZGVyIHdhcyBzdXNwZW5kZWQgb3IgY2FzY2FkaW5nIHdvcmsgd2FzIHNjaGVkdWxlZCxcbiAgICAvLyBJbiB3aGljaCBjYXNlXHUyMDEzIGxlYXZlIHBlbmRpbmcgaW50ZXJhY3Rpb25zIHVudGlsIHRoZSBzdWJzZXF1ZW50IHJlbmRlci5cbiAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9uTWFwID0gcm9vdC5wZW5kaW5nSW50ZXJhY3Rpb25NYXA7XG4gICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLmZvckVhY2goZnVuY3Rpb24gKHNjaGVkdWxlZEludGVyYWN0aW9ucywgbGFuZSkge1xuICAgICAgLy8gT25seSBkZWNyZW1lbnQgdGhlIHBlbmRpbmcgaW50ZXJhY3Rpb24gY291bnQgaWYgd2UncmUgZG9uZS5cbiAgICAgIC8vIElmIHRoZXJlJ3Mgc3RpbGwgd29yayBhdCB0aGUgY3VycmVudCBwcmlvcml0eSxcbiAgICAgIC8vIFRoYXQgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIHdhaXRpbmcgZm9yIHN1c3BlbnNlIGRhdGEuXG4gICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVtYWluaW5nTGFuZXNBZnRlckNvbW1pdCwgbGFuZSkpIHtcbiAgICAgICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLmRlbGV0ZShsYW5lKTtcbiAgICAgICAgc2NoZWR1bGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tO1xuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyBJZiB0aGUgc3Vic2NyaWJlciB0aHJvd3MsIHJldGhyb3cgaXQgaW4gYSBzZXBhcmF0ZSB0YXNrXG4gICAgICAgICAgICAgIHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59IC8vIGBhY3RgIHRlc3RpbmcgQVBJXG5cbmZ1bmN0aW9uIHNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpIHtcbiAgLy8gTmV2ZXIgZm9yY2UgZmx1c2ggaW4gcHJvZHVjdGlvbi4gVGhpcyBmdW5jdGlvbiBzaG91bGQgZ2V0IHN0cmlwcGVkIG91dC5cbiAgcmV0dXJuICBhY3RpbmdVcGRhdGVzU2NvcGVEZXB0aCA+IDA7XG59XG4vLyBzbyB3ZSBjYW4gdGVsbCBpZiBhbnkgYXN5bmMgYWN0KCkgY2FsbHMgdHJ5IHRvIHJ1biBpbiBwYXJhbGxlbC5cblxuXG52YXIgYWN0aW5nVXBkYXRlc1Njb3BlRGVwdGggPSAwO1xuXG5mdW5jdGlvbiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhmaWJlcikge1xuICBmaWJlci5zaWJsaW5nID0gbnVsbDtcbiAgZmliZXIuc3RhdGVOb2RlID0gbnVsbDtcbn1cblxudmFyIHJlc29sdmVGYW1pbHkgPSBudWxsOyAvLyAkRmxvd0ZpeE1lIEZsb3cgZ2V0cyBjb25mdXNlZCBieSBhIFdlYWtTZXQgZmVhdHVyZSBjaGVjayBiZWxvdy5cblxudmFyIGZhaWxlZEJvdW5kYXJpZXMgPSBudWxsO1xudmFyIHNldFJlZnJlc2hIYW5kbGVyID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAge1xuICAgIHJlc29sdmVGYW1pbHkgPSBoYW5kbGVyO1xuICB9XG59O1xuZnVuY3Rpb24gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG5cbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH0gLy8gVXNlIHRoZSBsYXRlc3Qga25vd24gaW1wbGVtZW50YXRpb24uXG5cblxuICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAgLy8gTm8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMuXG4gIHJldHVybiByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSk7XG59XG5mdW5jdGlvbiByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuXG4gICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSByZWFsIGZvcndhcmRSZWYuIERvbid0IHdhbnQgdG8gY3Jhc2ggZWFybHkuXG4gICAgICBpZiAodHlwZSAhPT0gbnVsbCAmJiB0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHR5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIEZvcndhcmRSZWYgaXMgc3BlY2lhbCBiZWNhdXNlIGl0cyByZXNvbHZlZCAudHlwZSBpcyBhbiBvYmplY3QsXG4gICAgICAgIC8vIGJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQgd2Ugb25seSBoYXZlIGl0cyBpbm5lciByZW5kZXIgZnVuY3Rpb24gaW4gdGhlIG1hcC5cbiAgICAgICAgLy8gSWYgdGhhdCBpbm5lciByZW5kZXIgZnVuY3Rpb24gaXMgZGlmZmVyZW50LCB3ZSdsbCBidWlsZCBhIG5ldyBmb3J3YXJkUmVmIHR5cGUuXG4gICAgICAgIHZhciBjdXJyZW50UmVuZGVyID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUucmVuZGVyKTtcblxuICAgICAgICBpZiAodHlwZS5yZW5kZXIgIT09IGN1cnJlbnRSZW5kZXIpIHtcbiAgICAgICAgICB2YXIgc3ludGhldGljVHlwZSA9IHtcbiAgICAgICAgICAgICQkdHlwZW9mOiBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFLFxuICAgICAgICAgICAgcmVuZGVyOiBjdXJyZW50UmVuZGVyXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmICh0eXBlLmRpc3BsYXlOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN5bnRoZXRpY1R5cGUuZGlzcGxheU5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzeW50aGV0aWNUeXBlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH0gLy8gVXNlIHRoZSBsYXRlc3Qga25vd24gaW1wbGVtZW50YXRpb24uXG5cblxuICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgfVxufVxuZnVuY3Rpb24gaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGZpYmVyLCBlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgcHJldlR5cGUgPSBmaWJlci5lbGVtZW50VHlwZTtcbiAgICB2YXIgbmV4dFR5cGUgPSBlbGVtZW50LnR5cGU7IC8vIElmIHdlIGdvdCBoZXJlLCB3ZSBrbm93IHR5cGVzIGFyZW4ndCA9PT0gZXF1YWwuXG5cbiAgICB2YXIgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSBmYWxzZTtcbiAgICB2YXIgJCR0eXBlb2ZOZXh0VHlwZSA9IHR5cGVvZiBuZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgbmV4dFR5cGUgIT09IG51bGwgPyBuZXh0VHlwZS4kJHR5cGVvZiA6IG51bGw7XG5cbiAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV4dFR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXh0VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICAvLyBXZSBkb24ndCBrbm93IHRoZSBpbm5lciB0eXBlIHlldC5cbiAgICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGF0IHRoZSBsYXp5IGlubmVyIHR5cGUgaXMgc3RhYmxlLFxuICAgICAgICAgICAgLy8gYW5kIHNvIGl0IGlzIHN1ZmZpY2llbnQgdG8gYXZvaWQgcmVjb25jaWxpbmcgaXQgYXdheS5cbiAgICAgICAgICAgIC8vIFdlJ3JlIG5vdCBnb2luZyB0byB1bndyYXAgb3IgYWN0dWFsbHkgdXNlIHRoZSBuZXcgbGF6eSB0eXBlLlxuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAge1xuICAgICAgICAgIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBpZiBpdCB3YXMgYnV0IGNhbiBubyBsb25nZXIgYmUgc2ltcGxlLFxuICAgICAgICAgICAgLy8gd2Ugc2hvdWxkbid0IHNldCB0aGlzLlxuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gQ2hlY2sgaWYgYm90aCB0eXBlcyBoYXZlIGEgZmFtaWx5IGFuZCBpdCdzIHRoZSBzYW1lIG9uZS5cblxuXG4gICAgaWYgKG5lZWRzQ29tcGFyZUZhbWlsaWVzKSB7XG4gICAgICAvLyBOb3RlOiBtZW1vKCkgYW5kIGZvcndhcmRSZWYoKSB3ZSdsbCBjb21wYXJlIG91dGVyIHJhdGhlciB0aGFuIGlubmVyIHR5cGUuXG4gICAgICAvLyBUaGlzIG1lYW5zIGJvdGggb2YgdGhlbSBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgdG8gcHJlc2VydmUgc3RhdGUuXG4gICAgICAvLyBJZiB3ZSB1bndyYXBwZWQgYW5kIGNvbXBhcmVkIHRoZSBpbm5lciB0eXBlcyBmb3Igd3JhcHBlcnMgaW5zdGVhZCxcbiAgICAgIC8vIHRoZW4gd2Ugd291bGQgcmlzayBmYWxzZWx5IHNheWluZyB0d28gc2VwYXJhdGUgbWVtbyhGb28pXG4gICAgICAvLyBjYWxscyBhcmUgZXF1aXZhbGVudCBiZWNhdXNlIHRoZXkgd3JhcCB0aGUgc2FtZSBGb28gZnVuY3Rpb24uXG4gICAgICB2YXIgcHJldkZhbWlseSA9IHJlc29sdmVGYW1pbHkocHJldlR5cGUpO1xuXG4gICAgICBpZiAocHJldkZhbWlseSAhPT0gdW5kZWZpbmVkICYmIHByZXZGYW1pbHkgPT09IHJlc29sdmVGYW1pbHkobmV4dFR5cGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgV2Vha1NldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzID09PSBudWxsKSB7XG4gICAgICBmYWlsZWRCb3VuZGFyaWVzID0gbmV3IFdlYWtTZXQoKTtcbiAgICB9XG5cbiAgICBmYWlsZWRCb3VuZGFyaWVzLmFkZChmaWJlcik7XG4gIH1cbn1cbnZhciBzY2hlZHVsZVJlZnJlc2ggPSBmdW5jdGlvbiAocm9vdCwgdXBkYXRlKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc3RhbGVGYW1pbGllcyA9IHVwZGF0ZS5zdGFsZUZhbWlsaWVzLFxuICAgICAgICB1cGRhdGVkRmFtaWxpZXMgPSB1cGRhdGUudXBkYXRlZEZhbWlsaWVzO1xuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICBmbHVzaFN5bmMoZnVuY3Rpb24gKCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShyb290LmN1cnJlbnQsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcyk7XG4gICAgfSk7XG4gIH1cbn07XG52YXIgc2NoZWR1bGVSb290ID0gZnVuY3Rpb24gKHJvb3QsIGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChyb290LmNvbnRleHQgIT09IGVtcHR5Q29udGV4dE9iamVjdCkge1xuICAgICAgLy8gU3VwZXIgZWRnZSBjYXNlOiByb290IGhhcyBhIGxlZ2FjeSBfcmVuZGVyU3VidHJlZSBjb250ZXh0XG4gICAgICAvLyBidXQgd2UgZG9uJ3Qga25vdyB0aGUgcGFyZW50Q29tcG9uZW50IHNvIHdlIGNhbid0IHBhc3MgaXQuXG4gICAgICAvLyBKdXN0IGlnbm9yZS4gV2UnbGwgZGVsZXRlIHRoaXMgd2l0aCBfcmVuZGVyU3VidHJlZSBjb2RlIHBhdGggbGF0ZXIuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgIGZsdXNoU3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVDb250YWluZXIoZWxlbWVudCwgcm9vdCwgbnVsbCwgbnVsbCk7XG4gICAgfSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoZmliZXIsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcykge1xuICB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZSxcbiAgICAgICAgY2hpbGQgPSBmaWJlci5jaGlsZCxcbiAgICAgICAgc2libGluZyA9IGZpYmVyLnNpYmxpbmcsXG4gICAgICAgIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgdmFyIGNhbmRpZGF0ZVR5cGUgPSBudWxsO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCByZXNvbHZlRmFtaWx5IHRvIGJlIHNldCBkdXJpbmcgaG90IHJlbG9hZC4nKTtcbiAgICB9XG5cbiAgICB2YXIgbmVlZHNSZW5kZXIgPSBmYWxzZTtcbiAgICB2YXIgbmVlZHNSZW1vdW50ID0gZmFsc2U7XG5cbiAgICBpZiAoY2FuZGlkYXRlVHlwZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkoY2FuZGlkYXRlVHlwZSk7XG5cbiAgICAgIGlmIChmYW1pbHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc3RhbGVGYW1pbGllcy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodXBkYXRlZEZhbWlsaWVzLmhhcyhmYW1pbHkpKSB7XG4gICAgICAgICAgaWYgKHRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5lZWRzUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmFpbGVkQm91bmRhcmllcyAhPT0gbnVsbCkge1xuICAgICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMuaGFzKGZpYmVyKSB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgZmFpbGVkQm91bmRhcmllcy5oYXMoYWx0ZXJuYXRlKSkge1xuICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWVkc1JlbW91bnQpIHtcbiAgICAgIGZpYmVyLl9kZWJ1Z05lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5lZWRzUmVtb3VudCB8fCBuZWVkc1JlbmRlcikge1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCAmJiAhbmVlZHNSZW1vdW50KSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KGNoaWxkLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH1cblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KHNpYmxpbmcsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2ggPSBmdW5jdGlvbiAocm9vdCwgZmFtaWxpZXMpIHtcbiAge1xuICAgIHZhciBob3N0SW5zdGFuY2VzID0gbmV3IFNldCgpO1xuICAgIHZhciB0eXBlcyA9IG5ldyBTZXQoZmFtaWxpZXMubWFwKGZ1bmN0aW9uIChmYW1pbHkpIHtcbiAgICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgICB9KSk7XG4gICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KHJvb3QuY3VycmVudCwgdHlwZXMsIGhvc3RJbnN0YW5jZXMpO1xuICAgIHJldHVybiBob3N0SW5zdGFuY2VzO1xuICB9XG59O1xuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoZmliZXIsIHR5cGVzLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZCxcbiAgICAgICAgc2libGluZyA9IGZpYmVyLnNpYmxpbmcsXG4gICAgICAgIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgdmFyIGNhbmRpZGF0ZVR5cGUgPSBudWxsO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZGlkTWF0Y2ggPSBmYWxzZTtcblxuICAgIGlmIChjYW5kaWRhdGVUeXBlICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZXMuaGFzKGNhbmRpZGF0ZVR5cGUpKSB7XG4gICAgICAgIGRpZE1hdGNoID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlkTWF0Y2gpIHtcbiAgICAgIC8vIFdlIGhhdmUgYSBtYXRjaC4gVGhpcyBvbmx5IGRyaWxscyBkb3duIHRvIHRoZSBjbG9zZXN0IGhvc3QgY29tcG9uZW50cy5cbiAgICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBzZWFyY2ggZGVlcGVyIGJlY2F1c2UgZm9yIHRoZSBwdXJwb3NlIG9mIGdpdmluZ1xuICAgICAgLy8gdmlzdWFsIGZlZWRiYWNrLCBcImZsYXNoaW5nXCIgb3V0ZXJtb3N0IHBhcmVudCByZWN0YW5nbGVzIGlzIHN1ZmZpY2llbnQuXG4gICAgICBmaW5kSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUncyBubyBtYXRjaCwgbWF5YmUgdGhlcmUgd2lsbCBiZSBvbmUgZnVydGhlciBkb3duIGluIHRoZSBjaGlsZCB0cmVlLlxuICAgICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShjaGlsZCwgdHlwZXMsIGhvc3RJbnN0YW5jZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoc2libGluZywgdHlwZXMsIGhvc3RJbnN0YW5jZXMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgZm91bmRIb3N0SW5zdGFuY2VzID0gZmluZENoaWxkSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKTtcblxuICAgIGlmIChmb3VuZEhvc3RJbnN0YW5jZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueSBob3N0IGNoaWxkcmVuLCBmYWxsYmFjayB0byBjbG9zZXN0IGhvc3QgcGFyZW50LlxuXG5cbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHN3aXRjaCAobm9kZS50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gcmVhY2ggcm9vdCBmaXJzdC4nKTtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ2hpbGRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpIHtcbiAge1xuICAgIHZhciBub2RlID0gZmliZXI7XG4gICAgdmFyIGZvdW5kSG9zdEluc3RhbmNlcyA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgICAvLyBXZSBnb3QgYSBtYXRjaC5cbiAgICAgICAgZm91bmRIb3N0SW5zdGFuY2VzID0gdHJ1ZTtcbiAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUpOyAvLyBUaGVyZSBtYXkgc3RpbGwgYmUgbW9yZSwgc28ga2VlcCBzZWFyY2hpbmcuXG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmaWJlcikge1xuICAgICAgICByZXR1cm4gZm91bmRIb3N0SW5zdGFuY2VzO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gZmliZXIpIHtcbiAgICAgICAgICByZXR1cm4gZm91bmRIb3N0SW5zdGFuY2VzO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGhhc0JhZE1hcFBvbHlmaWxsO1xuXG57XG4gIGhhc0JhZE1hcFBvbHlmaWxsID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICB2YXIgbm9uRXh0ZW5zaWJsZU9iamVjdCA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovXG5cbiAgICBuZXcgTWFwKFtbbm9uRXh0ZW5zaWJsZU9iamVjdCwgbnVsbF1dKTtcbiAgICBuZXcgU2V0KFtub25FeHRlbnNpYmxlT2JqZWN0XSk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1uZXcgKi9cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRPRE86IENvbnNpZGVyIHdhcm5pbmcgYWJvdXQgYmFkIHBvbHlmaWxsc1xuICAgIGhhc0JhZE1hcFBvbHlmaWxsID0gdHJ1ZTtcbiAgfVxufVxuXG52YXIgZGVidWdDb3VudGVyID0gMTtcblxuZnVuY3Rpb24gRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgLy8gSW5zdGFuY2VcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMua2V5ID0ga2V5O1xuICB0aGlzLmVsZW1lbnRUeXBlID0gbnVsbDtcbiAgdGhpcy50eXBlID0gbnVsbDtcbiAgdGhpcy5zdGF0ZU5vZGUgPSBudWxsOyAvLyBGaWJlclxuXG4gIHRoaXMucmV0dXJuID0gbnVsbDtcbiAgdGhpcy5jaGlsZCA9IG51bGw7XG4gIHRoaXMuc2libGluZyA9IG51bGw7XG4gIHRoaXMuaW5kZXggPSAwO1xuICB0aGlzLnJlZiA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzO1xuICB0aGlzLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICB0aGlzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgdGhpcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgdGhpcy5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICB0aGlzLm1vZGUgPSBtb2RlOyAvLyBFZmZlY3RzXG5cbiAgdGhpcy5mbGFncyA9IE5vRmxhZ3M7XG4gIHRoaXMubmV4dEVmZmVjdCA9IG51bGw7XG4gIHRoaXMuZmlyc3RFZmZlY3QgPSBudWxsO1xuICB0aGlzLmxhc3RFZmZlY3QgPSBudWxsO1xuICB0aGlzLmxhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5hbHRlcm5hdGUgPSBudWxsO1xuXG4gIHtcbiAgICAvLyBOb3RlOiBUaGUgZm9sbG93aW5nIGlzIGRvbmUgdG8gYXZvaWQgYSB2OCBwZXJmb3JtYW5jZSBjbGlmZi5cbiAgICAvL1xuICAgIC8vIEluaXRpYWxpemluZyB0aGUgZmllbGRzIGJlbG93IHRvIHNtaXMgYW5kIGxhdGVyIHVwZGF0aW5nIHRoZW0gd2l0aFxuICAgIC8vIGRvdWJsZSB2YWx1ZXMgd2lsbCBjYXVzZSBGaWJlcnMgdG8gZW5kIHVwIGhhdmluZyBzZXBhcmF0ZSBzaGFwZXMuXG4gICAgLy8gVGhpcyBiZWhhdmlvci9idWcgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9uKCkuXG4gICAgLy8gRm9ydHVuYXRlbHkgdGhpcyBvbmx5IGltcGFjdHMgREVWIGJ1aWxkcy5cbiAgICAvLyBVbmZvcnR1bmF0ZWx5IGl0IG1ha2VzIFJlYWN0IHVudXNhYmx5IHNsb3cgZm9yIHNvbWUgYXBwbGljYXRpb25zLlxuICAgIC8vIFRvIHdvcmsgYXJvdW5kIHRoaXMsIGluaXRpYWxpemUgdGhlIGZpZWxkcyBiZWxvdyB3aXRoIGRvdWJsZXMuXG4gICAgLy9cbiAgICAvLyBMZWFybiBtb3JlIGFib3V0IHRoaXMgaGVyZTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE0MzY1XG4gICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9ODUzOFxuICAgIHRoaXMuYWN0dWFsRHVyYXRpb24gPSBOdW1iZXIuTmFOO1xuICAgIHRoaXMuYWN0dWFsU3RhcnRUaW1lID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLnNlbGZCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOO1xuICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IE51bWJlci5OYU47IC8vIEl0J3Mgb2theSB0byByZXBsYWNlIHRoZSBpbml0aWFsIGRvdWJsZXMgd2l0aCBzbWlzIGFmdGVyIGluaXRpYWxpemF0aW9uLlxuICAgIC8vIFRoaXMgd29uJ3QgdHJpZ2dlciB0aGUgcGVyZm9ybWFuY2UgY2xpZmYgbWVudGlvbmVkIGFib3ZlLFxuICAgIC8vIGFuZCBpdCBzaW1wbGlmaWVzIG90aGVyIHByb2ZpbGVyIGNvZGUgKGluY2x1ZGluZyBEZXZUb29scykuXG5cbiAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgIHRoaXMuc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgdGhpcy50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgfVxuXG4gIHtcbiAgICAvLyBUaGlzIGlzbid0IGRpcmVjdGx5IHVzZWQgYnV0IGlzIGhhbmR5IGZvciBkZWJ1Z2dpbmcgaW50ZXJuYWxzOlxuICAgIHRoaXMuX2RlYnVnSUQgPSBkZWJ1Z0NvdW50ZXIrKztcbiAgICB0aGlzLl9kZWJ1Z1NvdXJjZSA9IG51bGw7XG4gICAgdGhpcy5fZGVidWdPd25lciA9IG51bGw7XG4gICAgdGhpcy5fZGVidWdOZWVkc1JlbW91bnQgPSBmYWxzZTtcbiAgICB0aGlzLl9kZWJ1Z0hvb2tUeXBlcyA9IG51bGw7XG5cbiAgICBpZiAoIWhhc0JhZE1hcFBvbHlmaWxsICYmIHR5cGVvZiBPYmplY3QucHJldmVudEV4dGVuc2lvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzKTtcbiAgICB9XG4gIH1cbn0gLy8gVGhpcyBpcyBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLCByYXRoZXIgdGhhbiBhIFBPSk8gY29uc3RydWN0b3IsIHN0aWxsXG4vLyBwbGVhc2UgZW5zdXJlIHdlIGRvIHRoZSBmb2xsb3dpbmc6XG4vLyAxKSBOb2JvZHkgc2hvdWxkIGFkZCBhbnkgaW5zdGFuY2UgbWV0aG9kcyBvbiB0aGlzLiBJbnN0YW5jZSBtZXRob2RzIGNhbiBiZVxuLy8gICAgbW9yZSBkaWZmaWN1bHQgdG8gcHJlZGljdCB3aGVuIHRoZXkgZ2V0IG9wdGltaXplZCBhbmQgdGhleSBhcmUgYWxtb3N0XG4vLyAgICBuZXZlciBpbmxpbmVkIHByb3Blcmx5IGluIHN0YXRpYyBjb21waWxlcnMuXG4vLyAyKSBOb2JvZHkgc2hvdWxkIHJlbHkgb24gYGluc3RhbmNlb2YgRmliZXJgIGZvciB0eXBlIHRlc3RpbmcuIFdlIHNob3VsZFxuLy8gICAgYWx3YXlzIGtub3cgd2hlbiBpdCBpcyBhIGZpYmVyLlxuLy8gMykgV2UgbWlnaHQgd2FudCB0byBleHBlcmltZW50IHdpdGggdXNpbmcgbnVtZXJpYyBrZXlzIHNpbmNlIHRoZXkgYXJlIGVhc2llclxuLy8gICAgdG8gb3B0aW1pemUgaW4gYSBub24tSklUIGVudmlyb25tZW50LlxuLy8gNCkgV2UgY2FuIGVhc2lseSBnbyBmcm9tIGEgY29uc3RydWN0b3IgdG8gYSBjcmVhdGVGaWJlciBvYmplY3QgbGl0ZXJhbCBpZiB0aGF0XG4vLyAgICBpcyBmYXN0ZXIuXG4vLyA1KSBJdCBzaG91bGQgYmUgZWFzeSB0byBwb3J0IHRoaXMgdG8gYSBDIHN0cnVjdCBhbmQga2VlcCBhIEMgaW1wbGVtZW50YXRpb25cbi8vICAgIGNvbXBhdGlibGUuXG5cblxudmFyIGNyZWF0ZUZpYmVyID0gZnVuY3Rpb24gKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgLy8gJEZsb3dGaXhNZTogdGhlIHNoYXBlcyBhcmUgZXhhY3QgaGVyZSBidXQgRmxvdyBkb2Vzbid0IGxpa2UgY29uc3RydWN0b3JzXG4gIHJldHVybiBuZXcgRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xufTtcblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0JDEoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gaXNTaW1wbGVGdW5jdGlvbkNvbXBvbmVudCh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhc2hvdWxkQ29uc3RydWN0JDEodHlwZSkgJiYgdHlwZS5kZWZhdWx0UHJvcHMgPT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHJlc29sdmVMYXp5Q29tcG9uZW50VGFnKENvbXBvbmVudCkge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzaG91bGRDb25zdHJ1Y3QkMShDb21wb25lbnQpID8gQ2xhc3NDb21wb25lbnQgOiBGdW5jdGlvbkNvbXBvbmVudDtcbiAgfSBlbHNlIGlmIChDb21wb25lbnQgIT09IHVuZGVmaW5lZCAmJiBDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBDb21wb25lbnQuJCR0eXBlb2Y7XG5cbiAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHtcbiAgICAgIHJldHVybiBGb3J3YXJkUmVmO1xuICAgIH1cblxuICAgIGlmICgkJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICByZXR1cm4gTWVtb0NvbXBvbmVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDtcbn0gLy8gVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBhbHRlcm5hdGUgZmliZXIgdG8gZG8gd29yayBvbi5cblxuZnVuY3Rpb24gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgcGVuZGluZ1Byb3BzKSB7XG4gIHZhciB3b3JrSW5Qcm9ncmVzcyA9IGN1cnJlbnQuYWx0ZXJuYXRlO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gbnVsbCkge1xuICAgIC8vIFdlIHVzZSBhIGRvdWJsZSBidWZmZXJpbmcgcG9vbGluZyB0ZWNobmlxdWUgYmVjYXVzZSB3ZSBrbm93IHRoYXQgd2UnbGxcbiAgICAvLyBvbmx5IGV2ZXIgbmVlZCBhdCBtb3N0IHR3byB2ZXJzaW9ucyBvZiBhIHRyZWUuIFdlIHBvb2wgdGhlIFwib3RoZXJcIiB1bnVzZWRcbiAgICAvLyBub2RlIHRoYXQgd2UncmUgZnJlZSB0byByZXVzZS4gVGhpcyBpcyBsYXppbHkgY3JlYXRlZCB0byBhdm9pZCBhbGxvY2F0aW5nXG4gICAgLy8gZXh0cmEgb2JqZWN0cyBmb3IgdGhpbmdzIHRoYXQgYXJlIG5ldmVyIHVwZGF0ZWQuIEl0IGFsc28gYWxsb3cgdXMgdG9cbiAgICAvLyByZWNsYWltIHRoZSBleHRyYSBtZW1vcnkgaWYgbmVlZGVkLlxuICAgIHdvcmtJblByb2dyZXNzID0gY3JlYXRlRmliZXIoY3VycmVudC50YWcsIHBlbmRpbmdQcm9wcywgY3VycmVudC5rZXksIGN1cnJlbnQubW9kZSk7XG4gICAgd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPSBjdXJyZW50LmVsZW1lbnRUeXBlO1xuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7XG4gICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudC5zdGF0ZU5vZGU7XG5cbiAgICB7XG4gICAgICAvLyBERVYtb25seSBmaWVsZHNcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0lEID0gY3VycmVudC5fZGVidWdJRDtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z1NvdXJjZSA9IGN1cnJlbnQuX2RlYnVnU291cmNlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnT3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gY3VycmVudC5fZGVidWdIb29rVHlwZXM7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gY3VycmVudDtcbiAgICBjdXJyZW50LmFsdGVybmF0ZSA9IHdvcmtJblByb2dyZXNzO1xuICB9IGVsc2Uge1xuICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wczsgLy8gTmVlZGVkIGJlY2F1c2UgQmxvY2tzIHN0b3JlIGRhdGEgb24gdHlwZS5cblxuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7IC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBhbHRlcm5hdGUuXG4gICAgLy8gUmVzZXQgdGhlIGVmZmVjdCB0YWcuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IE5vRmxhZ3M7IC8vIFRoZSBlZmZlY3QgbGlzdCBpcyBubyBsb25nZXIgdmFsaWQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IHJlc2V0LCByYXRoZXIgdGhhbiBjb3B5LCBhY3R1YWxEdXJhdGlvbiAmIGFjdHVhbFN0YXJ0VGltZS5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGltZSBmcm9tIGVuZGxlc3NseSBhY2N1bXVsYXRpbmcgaW4gbmV3IGNvbW1pdHMuXG4gICAgICAvLyBUaGlzIGhhcyB0aGUgZG93bnNpZGUgb2YgcmVzZXR0aW5nIHZhbHVlcyBmb3IgZGlmZmVyZW50IHByaW9yaXR5IHJlbmRlcnMsXG4gICAgICAvLyBCdXQgd29ya3MgZm9yIHlpZWxkaW5nICh0aGUgY29tbW9uIGNhc2UpIGFuZCBzaG91bGQgc3VwcG9ydCByZXN1bWluZy5cbiAgICAgIHdvcmtJblByb2dyZXNzLmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXM7XG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7IC8vIENsb25lIHRoZSBkZXBlbmRlbmNpZXMgb2JqZWN0LiBUaGlzIGlzIG11dGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UsIHNvXG4gIC8vIGl0IGNhbm5vdCBiZSBzaGFyZWQgd2l0aCB0aGUgY3VycmVudCBmaWJlci5cblxuICB2YXIgY3VycmVudERlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50RGVwZW5kZW5jaWVzID09PSBudWxsID8gbnVsbCA6IHtcbiAgICBsYW5lczogY3VycmVudERlcGVuZGVuY2llcy5sYW5lcyxcbiAgICBmaXJzdENvbnRleHQ6IGN1cnJlbnREZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0XG4gIH07IC8vIFRoZXNlIHdpbGwgYmUgb3ZlcnJpZGRlbiBkdXJpbmcgdGhlIHBhcmVudCdzIHJlY29uY2lsaWF0aW9uXG5cbiAgd29ya0luUHJvZ3Jlc3Muc2libGluZyA9IGN1cnJlbnQuc2libGluZztcbiAgd29ya0luUHJvZ3Jlc3MuaW5kZXggPSBjdXJyZW50LmluZGV4O1xuICB3b3JrSW5Qcm9ncmVzcy5yZWYgPSBjdXJyZW50LnJlZjtcblxuICB7XG4gICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uO1xuICB9XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z05lZWRzUmVtb3VudCA9IGN1cnJlbnQuX2RlYnVnTmVlZHNSZW1vdW50O1xuXG4gICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbn0gLy8gVXNlZCB0byByZXVzZSBhIEZpYmVyIGZvciBhIHNlY29uZCBwYXNzLlxuXG5mdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGlzIHJlc2V0cyB0aGUgRmliZXIgdG8gd2hhdCBjcmVhdGVGaWJlciBvciBjcmVhdGVXb3JrSW5Qcm9ncmVzcyB3b3VsZFxuICAvLyBoYXZlIHNldCB0aGUgdmFsdWVzIHRvIGJlZm9yZSBkdXJpbmcgdGhlIGZpcnN0IHBhc3MuIElkZWFsbHkgdGhpcyB3b3VsZG4ndFxuICAvLyBiZSBuZWNlc3NhcnkgYnV0IHVuZm9ydHVuYXRlbHkgbWFueSBjb2RlIHBhdGhzIHJlYWRzIGZyb20gdGhlIHdvcmtJblByb2dyZXNzXG4gIC8vIHdoZW4gdGhleSBzaG91bGQgYmUgcmVhZGluZyBmcm9tIGN1cnJlbnQgYW5kIHdyaXRpbmcgdG8gd29ya0luUHJvZ3Jlc3MuXG4gIC8vIFdlIGFzc3VtZSBwZW5kaW5nUHJvcHMsIGluZGV4LCBrZXksIHJlZiwgcmV0dXJuIGFyZSBzdGlsbCB1bnRvdWNoZWQgdG9cbiAgLy8gYXZvaWQgZG9pbmcgYW5vdGhlciByZWNvbmNpbGlhdGlvbi5cbiAgLy8gUmVzZXQgdGhlIGVmZmVjdCB0YWcgYnV0IGtlZXAgYW55IFBsYWNlbWVudCB0YWdzLCBzaW5jZSB0aGF0J3Mgc29tZXRoaW5nXG4gIC8vIHRoYXQgY2hpbGQgZmliZXIgaXMgc2V0dGluZywgbm90IHRoZSByZWNvbmNpbGlhdGlvbi5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gUGxhY2VtZW50OyAvLyBUaGUgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gIHdvcmtJblByb2dyZXNzLm5leHRFZmZlY3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIFJlc2V0IHRvIGNyZWF0ZUZpYmVyJ3MgaW5pdGlhbCB2YWx1ZXMuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gbnVsbDtcblxuICAgIHtcbiAgICAgIC8vIE5vdGU6IFdlIGRvbid0IHJlc2V0IHRoZSBhY3R1YWxUaW1lIGNvdW50cy4gSXQncyB1c2VmdWwgdG8gYWNjdW11bGF0ZVxuICAgICAgLy8gYWN0dWFsIHRpbWUgYWNyb3NzIG11bHRpcGxlIHJlbmRlciBwYXNzZXMuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBSZXNldCB0byB0aGUgY2xvbmVkIHZhbHVlcyB0aGF0IGNyZWF0ZVdvcmtJblByb2dyZXNzIHdvdWxkJ3ZlLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBOZWVkZWQgYmVjYXVzZSBCbG9ja3Mgc3RvcmUgZGF0YSBvbiB0eXBlLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTsgLy8gQ2xvbmUgdGhlIGRlcGVuZGVuY2llcyBvYmplY3QuIFRoaXMgaXMgbXV0YXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSwgc29cbiAgICAvLyBpdCBjYW5ub3QgYmUgc2hhcmVkIHdpdGggdGhlIGN1cnJlbnQgZmliZXIuXG5cbiAgICB2YXIgY3VycmVudERlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMgPT09IG51bGwgPyBudWxsIDoge1xuICAgICAgbGFuZXM6IGN1cnJlbnREZXBlbmRlbmNpZXMubGFuZXMsXG4gICAgICBmaXJzdENvbnRleHQ6IGN1cnJlbnREZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0XG4gICAgfTtcblxuICAgIHtcbiAgICAgIC8vIE5vdGU6IFdlIGRvbid0IHJlc2V0IHRoZSBhY3R1YWxUaW1lIGNvdW50cy4gSXQncyB1c2VmdWwgdG8gYWNjdW11bGF0ZVxuICAgICAgLy8gYWN0dWFsIHRpbWUgYWNyb3NzIG11bHRpcGxlIHJlbmRlciBwYXNzZXMuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59XG5mdW5jdGlvbiBjcmVhdGVIb3N0Um9vdEZpYmVyKHRhZykge1xuICB2YXIgbW9kZTtcblxuICBpZiAodGFnID09PSBDb25jdXJyZW50Um9vdCkge1xuICAgIG1vZGUgPSBDb25jdXJyZW50TW9kZSB8IEJsb2NraW5nTW9kZSB8IFN0cmljdE1vZGU7XG4gIH0gZWxzZSBpZiAodGFnID09PSBCbG9ja2luZ1Jvb3QpIHtcbiAgICBtb2RlID0gQmxvY2tpbmdNb2RlIHwgU3RyaWN0TW9kZTtcbiAgfSBlbHNlIHtcbiAgICBtb2RlID0gTm9Nb2RlO1xuICB9XG5cbiAgaWYgKCBpc0RldlRvb2xzUHJlc2VudCkge1xuICAgIC8vIEFsd2F5cyBjb2xsZWN0IHByb2ZpbGUgdGltaW5ncyB3aGVuIERldlRvb2xzIGFyZSBwcmVzZW50LlxuICAgIC8vIFRoaXMgZW5hYmxlcyBEZXZUb29scyB0byBzdGFydCBjYXB0dXJpbmcgdGltaW5nIGF0IGFueSBwb2ludFx1MjAxM1xuICAgIC8vIFdpdGhvdXQgc29tZSBub2RlcyBpbiB0aGUgdHJlZSBoYXZpbmcgZW1wdHkgYmFzZSB0aW1lcy5cbiAgICBtb2RlIHw9IFByb2ZpbGVNb2RlO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUZpYmVyKEhvc3RSb290LCBudWxsLCBudWxsLCBtb2RlKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh0eXBlLCAvLyBSZWFjdCRFbGVtZW50VHlwZVxua2V5LCBwZW5kaW5nUHJvcHMsIG93bmVyLCBtb2RlLCBsYW5lcykge1xuICB2YXIgZmliZXJUYWcgPSBJbmRldGVybWluYXRlQ29tcG9uZW50OyAvLyBUaGUgcmVzb2x2ZWQgdHlwZSBpcyBzZXQgaWYgd2Uga25vdyB3aGF0IHRoZSBmaW5hbCB0eXBlIHdpbGwgYmUuIEkuZS4gaXQncyBub3QgbGF6eS5cblxuICB2YXIgcmVzb2x2ZWRUeXBlID0gdHlwZTtcblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoc2hvdWxkQ29uc3RydWN0JDEodHlwZSkpIHtcbiAgICAgIGZpYmVyVGFnID0gQ2xhc3NDb21wb25lbnQ7XG5cbiAgICAgIHtcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIGZpYmVyVGFnID0gSG9zdENvbXBvbmVudDtcbiAgfSBlbHNlIHtcbiAgICBnZXRUYWc6IHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQocGVuZGluZ1Byb3BzLmNoaWxkcmVuLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRTpcbiAgICAgICAgZmliZXJUYWcgPSBNb2RlO1xuICAgICAgICBtb2RlIHw9IERlYnVnVHJhY2luZ01vZGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgIGZpYmVyVGFnID0gTW9kZTtcbiAgICAgICAgbW9kZSB8PSBTdHJpY3RNb2RlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tUHJvZmlsZXIocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZUxpc3QocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUxlZ2FjeUhpZGRlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NDT1BFX1RZUEU6XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQ29udGV4dFByb3ZpZGVyO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgY29uc3VtZXJcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IENvbnRleHRDb25zdW1lcjtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gRm9yd2FyZFJlZjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gTWVtb0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBMYXp5Q29tcG9uZW50O1xuICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IEJsb2NrO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgXCIgKyAnbmFtZWQgaW1wb3J0cy4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgb3duZXJOYW1lID0gb3duZXIgPyBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgICAgICAgICBpbmZvICs9ICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZDogZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciBidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlIGNvbXBvbmVudHMpIGJ1dCBnb3Q6IFwiICsgKHR5cGUgPT0gbnVsbCA/IHR5cGUgOiB0eXBlb2YgdHlwZSkgKyBcIi5cIiArIGluZm8gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihmaWJlclRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuICBmaWJlci5lbGVtZW50VHlwZSA9IHR5cGU7XG4gIGZpYmVyLnR5cGUgPSByZXNvbHZlZFR5cGU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG5cbiAge1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gb3duZXI7XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBvd25lciA9IG51bGw7XG5cbiAge1xuICAgIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gIH1cblxuICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICB2YXIgcGVuZGluZ1Byb3BzID0gZWxlbWVudC5wcm9wcztcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHR5cGUsIGtleSwgcGVuZGluZ1Byb3BzLCBvd25lciwgbW9kZSwgbGFuZXMpO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgZmliZXIuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnRzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEZyYWdtZW50LCBlbGVtZW50cywga2V5LCBtb2RlKTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Qcm9maWxlcihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgcGVuZGluZ1Byb3BzLmlkICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3IoJ1Byb2ZpbGVyIG11c3Qgc3BlY2lmeSBhbiBcImlkXCIgYXMgYSBwcm9wJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoUHJvZmlsZXIsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlIHwgUHJvZmlsZU1vZGUpOyAvLyBUT0RPOiBUaGUgUHJvZmlsZXIgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuICBmaWJlci50eXBlID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcblxuICB7XG4gICAgZmliZXIuc3RhdGVOb2RlID0ge1xuICAgICAgZWZmZWN0RHVyYXRpb246IDAsXG4gICAgICBwYXNzaXZlRWZmZWN0RHVyYXRpb246IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZpYmVyO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZShwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoU3VzcGVuc2VDb21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTsgLy8gVE9ETzogVGhlIFN1c3BlbnNlQ29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAvLyBpbnN0ZWFkLlxuXG4gIGZpYmVyLnR5cGUgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlTGlzdChwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoU3VzcGVuc2VMaXN0Q29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG5cbiAge1xuICAgIC8vIFRPRE86IFRoZSBTdXNwZW5zZUxpc3RDb21wb25lbnQgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgICAvLyBpbnN0ZWFkLlxuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gIH1cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihPZmZzY3JlZW5Db21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTsgLy8gVE9ETzogVGhlIE9mZnNjcmVlbkNvbXBvbmVudCBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgLy8gaW5zdGVhZC5cblxuICB7XG4gICAgZmliZXIudHlwZSA9IFJFQUNUX09GRlNDUkVFTl9UWVBFO1xuICB9XG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tTGVnYWN5SGlkZGVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihMZWdhY3lIaWRkZW5Db21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTsgLy8gVE9ETzogVGhlIExlZ2FjeUhpZGRlbiBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgLy8gaW5zdGVhZC5cblxuICB7XG4gICAgZmliZXIudHlwZSA9IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRTtcbiAgfVxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UZXh0KGNvbnRlbnQsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RUZXh0LCBjb250ZW50LCBudWxsLCBtb2RlKTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tSG9zdEluc3RhbmNlRm9yRGVsZXRpb24oKSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RDb21wb25lbnQsIG51bGwsIG51bGwsIE5vTW9kZSk7IC8vIFRPRE86IFRoZXNlIHNob3VsZCBub3QgbmVlZCBhIHR5cGUuXG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSAnREVMRVRFRCc7XG4gIGZpYmVyLnR5cGUgPSAnREVMRVRFRCc7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBwZW5kaW5nUHJvcHMgPSBwb3J0YWwuY2hpbGRyZW4gIT09IG51bGwgPyBwb3J0YWwuY2hpbGRyZW4gOiBbXTtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdFBvcnRhbCwgcGVuZGluZ1Byb3BzLCBwb3J0YWwua2V5LCBtb2RlKTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgZmliZXIuc3RhdGVOb2RlID0ge1xuICAgIGNvbnRhaW5lckluZm86IHBvcnRhbC5jb250YWluZXJJbmZvLFxuICAgIHBlbmRpbmdDaGlsZHJlbjogbnVsbCxcbiAgICAvLyBVc2VkIGJ5IHBlcnNpc3RlbnQgdXBkYXRlc1xuICAgIGltcGxlbWVudGF0aW9uOiBwb3J0YWwuaW1wbGVtZW50YXRpb25cbiAgfTtcbiAgcmV0dXJuIGZpYmVyO1xufSAvLyBVc2VkIGZvciBzdGFzaGluZyBXSVAgcHJvcGVydGllcyB0byByZXBsYXkgZmFpbGVkIHdvcmsgaW4gREVWLlxuXG5mdW5jdGlvbiBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVih0YXJnZXQsIHNvdXJjZSkge1xuICBpZiAodGFyZ2V0ID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBGaWJlcidzIGluaXRpYWwgcHJvcGVydGllcyB3aWxsIGFsd2F5cyBiZSBvdmVyd3JpdHRlbi5cbiAgICAvLyBXZSBvbmx5IHVzZSBhIEZpYmVyIHRvIGVuc3VyZSB0aGUgc2FtZSBoaWRkZW4gY2xhc3Mgc28gREVWIGlzbid0IHNsb3cuXG4gICAgdGFyZ2V0ID0gY3JlYXRlRmliZXIoSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCwgbnVsbCwgbnVsbCwgTm9Nb2RlKTtcbiAgfSAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgd3JpdHRlbiBhcyBhIGxpc3Qgb2YgYWxsIHByb3BlcnRpZXMuXG4gIC8vIFdlIHRyaWVkIHRvIHVzZSBPYmplY3QuYXNzaWduKCkgaW5zdGVhZCBidXQgdGhpcyBpcyBjYWxsZWQgaW5cbiAgLy8gdGhlIGhvdHRlc3QgcGF0aCwgYW5kIE9iamVjdC5hc3NpZ24oKSB3YXMgdG9vIHNsb3c6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI1MDJcbiAgLy8gVGhpcyBjb2RlIGlzIERFVi1vbmx5IHNvIHNpemUgaXMgbm90IGEgY29uY2Vybi5cblxuXG4gIHRhcmdldC50YWcgPSBzb3VyY2UudGFnO1xuICB0YXJnZXQua2V5ID0gc291cmNlLmtleTtcbiAgdGFyZ2V0LmVsZW1lbnRUeXBlID0gc291cmNlLmVsZW1lbnRUeXBlO1xuICB0YXJnZXQudHlwZSA9IHNvdXJjZS50eXBlO1xuICB0YXJnZXQuc3RhdGVOb2RlID0gc291cmNlLnN0YXRlTm9kZTtcbiAgdGFyZ2V0LnJldHVybiA9IHNvdXJjZS5yZXR1cm47XG4gIHRhcmdldC5jaGlsZCA9IHNvdXJjZS5jaGlsZDtcbiAgdGFyZ2V0LnNpYmxpbmcgPSBzb3VyY2Uuc2libGluZztcbiAgdGFyZ2V0LmluZGV4ID0gc291cmNlLmluZGV4O1xuICB0YXJnZXQucmVmID0gc291cmNlLnJlZjtcbiAgdGFyZ2V0LnBlbmRpbmdQcm9wcyA9IHNvdXJjZS5wZW5kaW5nUHJvcHM7XG4gIHRhcmdldC5tZW1vaXplZFByb3BzID0gc291cmNlLm1lbW9pemVkUHJvcHM7XG4gIHRhcmdldC51cGRhdGVRdWV1ZSA9IHNvdXJjZS51cGRhdGVRdWV1ZTtcbiAgdGFyZ2V0Lm1lbW9pemVkU3RhdGUgPSBzb3VyY2UubWVtb2l6ZWRTdGF0ZTtcbiAgdGFyZ2V0LmRlcGVuZGVuY2llcyA9IHNvdXJjZS5kZXBlbmRlbmNpZXM7XG4gIHRhcmdldC5tb2RlID0gc291cmNlLm1vZGU7XG4gIHRhcmdldC5mbGFncyA9IHNvdXJjZS5mbGFncztcbiAgdGFyZ2V0Lm5leHRFZmZlY3QgPSBzb3VyY2UubmV4dEVmZmVjdDtcbiAgdGFyZ2V0LmZpcnN0RWZmZWN0ID0gc291cmNlLmZpcnN0RWZmZWN0O1xuICB0YXJnZXQubGFzdEVmZmVjdCA9IHNvdXJjZS5sYXN0RWZmZWN0O1xuICB0YXJnZXQubGFuZXMgPSBzb3VyY2UubGFuZXM7XG4gIHRhcmdldC5jaGlsZExhbmVzID0gc291cmNlLmNoaWxkTGFuZXM7XG4gIHRhcmdldC5hbHRlcm5hdGUgPSBzb3VyY2UuYWx0ZXJuYXRlO1xuXG4gIHtcbiAgICB0YXJnZXQuYWN0dWFsRHVyYXRpb24gPSBzb3VyY2UuYWN0dWFsRHVyYXRpb247XG4gICAgdGFyZ2V0LmFjdHVhbFN0YXJ0VGltZSA9IHNvdXJjZS5hY3R1YWxTdGFydFRpbWU7XG4gICAgdGFyZ2V0LnNlbGZCYXNlRHVyYXRpb24gPSBzb3VyY2Uuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICB0YXJnZXQudHJlZUJhc2VEdXJhdGlvbiA9IHNvdXJjZS50cmVlQmFzZUR1cmF0aW9uO1xuICB9XG5cbiAgdGFyZ2V0Ll9kZWJ1Z0lEID0gc291cmNlLl9kZWJ1Z0lEO1xuICB0YXJnZXQuX2RlYnVnU291cmNlID0gc291cmNlLl9kZWJ1Z1NvdXJjZTtcbiAgdGFyZ2V0Ll9kZWJ1Z093bmVyID0gc291cmNlLl9kZWJ1Z093bmVyO1xuICB0YXJnZXQuX2RlYnVnTmVlZHNSZW1vdW50ID0gc291cmNlLl9kZWJ1Z05lZWRzUmVtb3VudDtcbiAgdGFyZ2V0Ll9kZWJ1Z0hvb2tUeXBlcyA9IHNvdXJjZS5fZGVidWdIb29rVHlwZXM7XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIEZpYmVyUm9vdE5vZGUoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlKSB7XG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmNvbnRhaW5lckluZm8gPSBjb250YWluZXJJbmZvO1xuICB0aGlzLnBlbmRpbmdDaGlsZHJlbiA9IG51bGw7XG4gIHRoaXMuY3VycmVudCA9IG51bGw7XG4gIHRoaXMucGluZ0NhY2hlID0gbnVsbDtcbiAgdGhpcy5maW5pc2hlZFdvcmsgPSBudWxsO1xuICB0aGlzLnRpbWVvdXRIYW5kbGUgPSBub1RpbWVvdXQ7XG4gIHRoaXMuY29udGV4dCA9IG51bGw7XG4gIHRoaXMucGVuZGluZ0NvbnRleHQgPSBudWxsO1xuICB0aGlzLmh5ZHJhdGUgPSBoeWRyYXRlO1xuICB0aGlzLmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gIHRoaXMuY2FsbGJhY2tQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICB0aGlzLmV2ZW50VGltZXMgPSBjcmVhdGVMYW5lTWFwKE5vTGFuZXMpO1xuICB0aGlzLmV4cGlyYXRpb25UaW1lcyA9IGNyZWF0ZUxhbmVNYXAoTm9UaW1lc3RhbXApO1xuICB0aGlzLnBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuc3VzcGVuZGVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLnBpbmdlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5leHBpcmVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLm11dGFibGVSZWFkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmVudGFuZ2xlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5lbnRhbmdsZW1lbnRzID0gY3JlYXRlTGFuZU1hcChOb0xhbmVzKTtcblxuICB7XG4gICAgdGhpcy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICB0aGlzLmludGVyYWN0aW9uVGhyZWFkSUQgPSB0cmFjaW5nLnVuc3RhYmxlX2dldFRocmVhZElEKCk7XG4gICAgdGhpcy5tZW1vaXplZEludGVyYWN0aW9ucyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLnBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIHtcbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBCbG9ja2luZ1Jvb3Q6XG4gICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSAnY3JlYXRlQmxvY2tpbmdSb290KCknO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBDb25jdXJyZW50Um9vdDpcbiAgICAgICAgdGhpcy5fZGVidWdSb290VHlwZSA9ICdjcmVhdGVSb290KCknO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBMZWdhY3lSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gJ2NyZWF0ZUxlZ2FjeVJvb3QoKSc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlclJvb3QoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlLCBoeWRyYXRpb25DYWxsYmFja3MpIHtcbiAgdmFyIHJvb3QgPSBuZXcgRmliZXJSb290Tm9kZShjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUpO1xuICAvLyBzdGF0ZU5vZGUgaXMgYW55LlxuXG5cbiAgdmFyIHVuaW5pdGlhbGl6ZWRGaWJlciA9IGNyZWF0ZUhvc3RSb290RmliZXIodGFnKTtcbiAgcm9vdC5jdXJyZW50ID0gdW5pbml0aWFsaXplZEZpYmVyO1xuICB1bmluaXRpYWxpemVkRmliZXIuc3RhdGVOb2RlID0gcm9vdDtcbiAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHVuaW5pdGlhbGl6ZWRGaWJlcik7XG4gIHJldHVybiByb290O1xufVxuXG4vLyBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgdmVyc2lvbiB1c2VkIGZvciBzZXJ2ZXIgcmVuZGVyaW5nIG1hdGNoZXMgdGhlIG9uZVxuLy8gdGhhdCBpcyBldmVudHVhbGx5IHJlYWQgZHVyaW5nIGh5ZHJhdGlvbi5cbi8vIElmIHRoZXkgZG9uJ3QgbWF0Y2ggdGhlcmUncyBhIHBvdGVudGlhbCB0ZWFyIGFuZCBhIGZ1bGwgZGVvcHQgcmVuZGVyIGlzIHJlcXVpcmVkLlxuXG5mdW5jdGlvbiByZWdpc3Rlck11dGFibGVTb3VyY2VGb3JIeWRyYXRpb24ocm9vdCwgbXV0YWJsZVNvdXJjZSkge1xuICB2YXIgZ2V0VmVyc2lvbiA9IG11dGFibGVTb3VyY2UuX2dldFZlcnNpb247XG4gIHZhciB2ZXJzaW9uID0gZ2V0VmVyc2lvbihtdXRhYmxlU291cmNlLl9zb3VyY2UpOyAvLyBUT0RPIENsZWFyIHRoaXMgZGF0YSBvbmNlIGFsbCBwZW5kaW5nIGh5ZHJhdGlvbiB3b3JrIGlzIGZpbmlzaGVkLlxuICAvLyBSZXRhaW5pbmcgaXQgZm9yZXZlciBtYXkgaW50ZXJmZXJlIHdpdGggR0MuXG5cbiAgaWYgKHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9PSBudWxsKSB7XG4gICAgcm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gW211dGFibGVTb3VyY2UsIHZlcnNpb25dO1xuICB9IGVsc2Uge1xuICAgIHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5wdXNoKG11dGFibGVTb3VyY2UsIHZlcnNpb24pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvcnRhbChjaGlsZHJlbiwgY29udGFpbmVySW5mbywgLy8gVE9ETzogZmlndXJlIG91dCB0aGUgQVBJIGZvciBjcm9zcy1yZW5kZXJlciBpbXBsZW1lbnRhdGlvbi5cbmltcGxlbWVudGF0aW9uKSB7XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IG51bGw7XG4gIHJldHVybiB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3cgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IFBvcnRhbFxuICAgICQkdHlwZW9mOiBSRUFDVF9QT1JUQUxfVFlQRSxcbiAgICBrZXk6IGtleSA9PSBudWxsID8gbnVsbCA6ICcnICsga2V5LFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBjb250YWluZXJJbmZvOiBjb250YWluZXJJbmZvLFxuICAgIGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvblxuICB9O1xufVxuXG52YXIgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcztcbnZhciBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZTtcblxue1xuICBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlID0ge307XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCkge1xuICBpZiAoIXBhcmVudENvbXBvbmVudCkge1xuICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIH1cblxuICB2YXIgZmliZXIgPSBnZXQocGFyZW50Q29tcG9uZW50KTtcbiAgdmFyIHBhcmVudENvbnRleHQgPSBmaW5kQ3VycmVudFVubWFza2VkQ29udGV4dChmaWJlcik7XG5cbiAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICB2YXIgQ29tcG9uZW50ID0gZmliZXIudHlwZTtcblxuICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0NoaWxkQ29udGV4dChmaWJlciwgQ29tcG9uZW50LCBwYXJlbnRDb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyZW50Q29udGV4dDtcbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZVdpdGhXYXJuaW5nKGNvbXBvbmVudCwgbWV0aG9kTmFtZSkge1xuICB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGNvbXBvbmVudCk7XG5cbiAgICBpZiAoZmliZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJBcmd1bWVudCBhcHBlYXJzIHRvIG5vdCBiZSBhIFJlYWN0Q29tcG9uZW50LiBLZXlzOiBcIiArIE9iamVjdC5rZXlzKGNvbXBvbmVudCkgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuXG4gICAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGhvc3RGaWJlci5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGhvc3RGaWJlcik7XG5cbiAgICAgICAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgIGVycm9yKCclcyBpcyBkZXByZWNhdGVkIGluIFN0cmljdE1vZGUuICcgKyAnJXMgd2FzIHBhc3NlZCBhbiBpbnN0YW5jZSBvZiAlcyB3aGljaCBpcyBpbnNpZGUgU3RyaWN0TW9kZS4gJyArICdJbnN0ZWFkLCBhZGQgYSByZWYgZGlyZWN0bHkgdG8gdGhlIGVsZW1lbnQgeW91IHdhbnQgdG8gcmVmZXJlbmNlLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtZmluZC1ub2RlJywgbWV0aG9kTmFtZSwgbWV0aG9kTmFtZSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yKCclcyBpcyBkZXByZWNhdGVkIGluIFN0cmljdE1vZGUuICcgKyAnJXMgd2FzIHBhc3NlZCBhbiBpbnN0YW5jZSBvZiAlcyB3aGljaCByZW5kZXJzIFN0cmljdE1vZGUgY2hpbGRyZW4uICcgKyAnSW5zdGVhZCwgYWRkIGEgcmVmIGRpcmVjdGx5IHRvIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvIHJlZmVyZW5jZS4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLWZpbmQtbm9kZScsIG1ldGhvZE5hbWUsIG1ldGhvZE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAvLyBJZGVhbGx5IHRoaXMgc2hvdWxkIHJlc2V0IHRvIHByZXZpb3VzIGJ1dCB0aGlzIHNob3VsZG4ndCBiZSBjYWxsZWQgaW5cbiAgICAgICAgICAvLyByZW5kZXIgYW5kIHRoZXJlJ3MgYW5vdGhlciB3YXJuaW5nIGZvciB0aGF0IGFueXdheS5cbiAgICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgICAgc2V0Q3VycmVudEZpYmVyKHByZXZpb3VzRmliZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUsIGh5ZHJhdGlvbkNhbGxiYWNrcykge1xuICByZXR1cm4gY3JlYXRlRmliZXJSb290KGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSk7XG59XG5mdW5jdGlvbiB1cGRhdGVDb250YWluZXIoZWxlbWVudCwgY29udGFpbmVyLCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKSB7XG4gIHtcbiAgICBvblNjaGVkdWxlUm9vdChjb250YWluZXIsIGVsZW1lbnQpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnQkMSA9IGNvbnRhaW5lci5jdXJyZW50O1xuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuXG4gIHtcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgd2FybklmVW5tb2NrZWRTY2hlZHVsZXIoY3VycmVudCQxKTtcbiAgICAgIHdhcm5JZk5vdFNjb3BlZFdpdGhNYXRjaGluZ0FjdChjdXJyZW50JDEpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoY3VycmVudCQxKTtcblxuICB2YXIgY29udGV4dCA9IGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCk7XG5cbiAgaWYgKGNvbnRhaW5lci5jb250ZXh0ID09PSBudWxsKSB7XG4gICAgY29udGFpbmVyLmNvbnRleHQgPSBjb250ZXh0O1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5wZW5kaW5nQ29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICB7XG4gICAgaWYgKGlzUmVuZGVyaW5nICYmIGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMpIHtcbiAgICAgIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgPSB0cnVlO1xuXG4gICAgICBlcnJvcignUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGU7ICcgKyAndHJpZ2dlcmluZyBuZXN0ZWQgY29tcG9uZW50IHVwZGF0ZXMgZnJvbSByZW5kZXIgaXMgbm90IGFsbG93ZWQuICcgKyAnSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluIGNvbXBvbmVudERpZFVwZGF0ZS5cXG5cXG4nICsgJ0NoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mICVzLicsIGdldENvbXBvbmVudE5hbWUoY3VycmVudC50eXBlKSB8fCAnVW5rbm93bicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgdXBkYXRlLnBheWxvYWQgPSB7XG4gICAgZWxlbWVudDogZWxlbWVudFxuICB9O1xuICBjYWxsYmFjayA9IGNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogY2FsbGJhY2s7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcigncmVuZGVyKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH1cblxuICBlbnF1ZXVlVXBkYXRlKGN1cnJlbnQkMSwgdXBkYXRlKTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGN1cnJlbnQkMSwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBnZXRQdWJsaWNSb290SW5zdGFuY2UoY29udGFpbmVyKSB7XG4gIHZhciBjb250YWluZXJGaWJlciA9IGNvbnRhaW5lci5jdXJyZW50O1xuXG4gIGlmICghY29udGFpbmVyRmliZXIuY2hpbGQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoY29udGFpbmVyRmliZXIuY2hpbGQudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGdldFB1YmxpY0luc3RhbmNlKGNvbnRhaW5lckZpYmVyLmNoaWxkLnN0YXRlTm9kZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvbnRhaW5lckZpYmVyLmNoaWxkLnN0YXRlTm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrUmV0cnlMYW5lSW1wbChmaWJlciwgcmV0cnlMYW5lKSB7XG4gIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCAmJiBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSA9IGhpZ2hlclByaW9yaXR5TGFuZShzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSwgcmV0cnlMYW5lKTtcbiAgfVxufSAvLyBJbmNyZWFzZXMgdGhlIHByaW9yaXR5IG9mIHRoZW5uYWJsZXMgd2hlbiB0aGV5IHJlc29sdmUgd2l0aGluIHRoaXMgYm91bmRhcnkuXG5cblxuZnVuY3Rpb24gbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIHJldHJ5TGFuZSkge1xuICBtYXJrUmV0cnlMYW5lSW1wbChmaWJlciwgcmV0cnlMYW5lKTtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoYWx0ZXJuYXRlKSB7XG4gICAgbWFya1JldHJ5TGFuZUltcGwoYWx0ZXJuYXRlLCByZXRyeUxhbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24kMShmaWJlcikge1xuICBpZiAoZmliZXIudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIC8vIFdlIGlnbm9yZSBIb3N0Um9vdHMgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGluY3JlYXNlXG4gICAgLy8gdGhlaXIgcHJpb3JpdHkgYW5kIHRoZXkgc2hvdWxkIG5vdCBzdXNwZW5kIG9uIEkvTyxcbiAgICAvLyBzaW5jZSB5b3UgaGF2ZSB0byB3cmFwIGFueXRoaW5nIHRoYXQgbWlnaHQgc3VzcGVuZCBpblxuICAgIC8vIFN1c3BlbnNlLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmU7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIGxhbmUpO1xufVxuZnVuY3Rpb24gYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24kMShmaWJlcikge1xuICBpZiAoZmliZXIudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIC8vIFdlIGlnbm9yZSBIb3N0Um9vdHMgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGluY3JlYXNlXG4gICAgLy8gdGhlaXIgcHJpb3JpdHkgYW5kIHRoZXkgc2hvdWxkIG5vdCBzdXNwZW5kIG9uIEkvTyxcbiAgICAvLyBzaW5jZSB5b3UgaGF2ZSB0byB3cmFwIGFueXRoaW5nIHRoYXQgbWlnaHQgc3VzcGVuZCBpblxuICAgIC8vIFN1c3BlbnNlLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gU2VsZWN0aXZlSHlkcmF0aW9uTGFuZTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkkMShmaWJlcikge1xuICBpZiAoZmliZXIudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIC8vIFdlIGlnbm9yZSBIb3N0Um9vdHMgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGluY3JlYXNlXG4gICAgLy8gdGhlaXIgcHJpb3JpdHkgb3RoZXIgdGhhbiBzeW5jaHJvbm91c2x5IGZsdXNoIGl0LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIHJ1bldpdGhQcmlvcml0eSQyKHByaW9yaXR5LCBmbikge1xuXG4gIHRyeSB7XG4gICAgc2V0Q3VycmVudFVwZGF0ZUxhbmVQcmlvcml0eShwcmlvcml0eSk7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH0gZmluYWxseSB7XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKGZpYmVyKSB7XG4gIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcldpdGhOb1BvcnRhbHMoZmliZXIpO1xuXG4gIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChob3N0RmliZXIudGFnID09PSBGdW5kYW1lbnRhbENvbXBvbmVudCkge1xuICAgIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlLmluc3RhbmNlO1xuICB9XG5cbiAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG59XG5cbnZhciBzaG91bGRTdXNwZW5kSW1wbCA9IGZ1bmN0aW9uIChmaWJlcikge1xuICByZXR1cm4gZmFsc2U7XG59O1xuXG5mdW5jdGlvbiBzaG91bGRTdXNwZW5kKGZpYmVyKSB7XG4gIHJldHVybiBzaG91bGRTdXNwZW5kSW1wbChmaWJlcik7XG59XG52YXIgb3ZlcnJpZGVIb29rU3RhdGUgPSBudWxsO1xudmFyIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCA9IG51bGw7XG52YXIgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gbnVsbDtcbnZhciBvdmVycmlkZVByb3BzID0gbnVsbDtcbnZhciBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBudWxsO1xudmFyIHNjaGVkdWxlVXBkYXRlID0gbnVsbDtcbnZhciBzZXRTdXNwZW5zZUhhbmRsZXIgPSBudWxsO1xuXG57XG4gIHZhciBjb3B5V2l0aERlbGV0ZUltcGwgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCBpbmRleCkge1xuICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogX2Fzc2lnbih7fSwgb2JqKTtcblxuICAgIGlmIChpbmRleCArIDEgPT09IHBhdGgubGVuZ3RoKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh1cGRhdGVkKSkge1xuICAgICAgICB1cGRhdGVkLnNwbGljZShrZXksIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHVwZGF0ZWRba2V5XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfSAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cblxuICAgIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoRGVsZXRlSW1wbChvYmpba2V5XSwgcGF0aCwgaW5kZXggKyAxKTtcbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhEZWxldGUgPSBmdW5jdGlvbiAob2JqLCBwYXRoKSB7XG4gICAgcmV0dXJuIGNvcHlXaXRoRGVsZXRlSW1wbChvYmosIHBhdGgsIDApO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFJlbmFtZUltcGwgPSBmdW5jdGlvbiAob2JqLCBvbGRQYXRoLCBuZXdQYXRoLCBpbmRleCkge1xuICAgIHZhciBvbGRLZXkgPSBvbGRQYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogX2Fzc2lnbih7fSwgb2JqKTtcblxuICAgIGlmIChpbmRleCArIDEgPT09IG9sZFBhdGgubGVuZ3RoKSB7XG4gICAgICB2YXIgbmV3S2V5ID0gbmV3UGF0aFtpbmRleF07IC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuICAgICAgdXBkYXRlZFtuZXdLZXldID0gdXBkYXRlZFtvbGRLZXldO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh1cGRhdGVkKSkge1xuICAgICAgICB1cGRhdGVkLnNwbGljZShvbGRLZXksIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHVwZGF0ZWRbb2xkS2V5XTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuICAgICAgdXBkYXRlZFtvbGRLZXldID0gY29weVdpdGhSZW5hbWVJbXBsKCAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG4gICAgICBvYmpbb2xkS2V5XSwgb2xkUGF0aCwgbmV3UGF0aCwgaW5kZXggKyAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhSZW5hbWUgPSBmdW5jdGlvbiAob2JqLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgaWYgKG9sZFBhdGgubGVuZ3RoICE9PSBuZXdQYXRoLmxlbmd0aCkge1xuICAgICAgd2FybignY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIG9mIHRoZSBzYW1lIGxlbmd0aCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3UGF0aC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgaWYgKG9sZFBhdGhbaV0gIT09IG5ld1BhdGhbaV0pIHtcbiAgICAgICAgICB3YXJuKCdjb3B5V2l0aFJlbmFtZSgpIGV4cGVjdHMgcGF0aHMgdG8gYmUgdGhlIHNhbWUgZXhjZXB0IGZvciB0aGUgZGVlcGVzdCBrZXknKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb3B5V2l0aFJlbmFtZUltcGwob2JqLCBvbGRQYXRoLCBuZXdQYXRoLCAwKTtcbiAgfTtcblxuICB2YXIgY29weVdpdGhTZXRJbXBsID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgaWYgKGluZGV4ID49IHBhdGgubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIGtleSA9IHBhdGhbaW5kZXhdO1xuICAgIHZhciB1cGRhdGVkID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfYXNzaWduKHt9LCBvYmopOyAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cbiAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aFNldEltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSwgdmFsdWUpO1xuICAgIHJldHVybiB1cGRhdGVkO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFNldCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGNvcHlXaXRoU2V0SW1wbChvYmosIHBhdGgsIDAsIHZhbHVlKTtcbiAgfTtcblxuICB2YXIgZmluZEhvb2sgPSBmdW5jdGlvbiAoZmliZXIsIGlkKSB7XG4gICAgLy8gRm9yIG5vdywgdGhlIFwiaWRcIiBvZiBzdGF0ZWZ1bCBob29rcyBpcyBqdXN0IHRoZSBzdGF0ZWZ1bCBob29rIGluZGV4LlxuICAgIC8vIFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlIHdpdGggZS5nLiBuZXN0ZWQgaG9va3MuXG4gICAgdmFyIGN1cnJlbnRIb29rID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICAgIHdoaWxlIChjdXJyZW50SG9vayAhPT0gbnVsbCAmJiBpZCA+IDApIHtcbiAgICAgIGN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgICAgIGlkLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRIb29rO1xuICB9OyAvLyBTdXBwb3J0IERldlRvb2xzIGVkaXRhYmxlIHZhbHVlcyBmb3IgdXNlU3RhdGUgYW5kIHVzZVJlZHVjZXIuXG5cblxuICBvdmVycmlkZUhvb2tTdGF0ZSA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIHBhdGgsIHZhbHVlKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoU2V0KGhvb2subWVtb2l6ZWRTdGF0ZSwgcGF0aCwgdmFsdWUpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gX2Fzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuICB9O1xuXG4gIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIHBhdGgpIHtcbiAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhEZWxldGUoaG9vay5tZW1vaXplZFN0YXRlLCBwYXRoKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IF9hc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoUmVuYW1lKGhvb2subWVtb2l6ZWRTdGF0ZSwgb2xkUGF0aCwgbmV3UGF0aCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBfYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG4gIH07IC8vIFN1cHBvcnQgRGV2VG9vbHMgcHJvcHMgZm9yIGZ1bmN0aW9uIGNvbXBvbmVudHMsIGZvcndhcmRSZWYsIG1lbW8sIGhvc3QgY29tcG9uZW50cywgZXRjLlxuXG5cbiAgb3ZlcnJpZGVQcm9wcyA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCwgdmFsdWUpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFNldChmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoLCB2YWx1ZSk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCkge1xuICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoRGVsZXRlKGZpYmVyLm1lbW9pemVkUHJvcHMsIHBhdGgpO1xuXG4gICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFJlbmFtZShmaWJlci5tZW1vaXplZFByb3BzLCBvbGRQYXRoLCBuZXdQYXRoKTtcblxuICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIHNjaGVkdWxlVXBkYXRlID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIHNldFN1c3BlbnNlSGFuZGxlciA9IGZ1bmN0aW9uIChuZXdTaG91bGRTdXNwZW5kSW1wbCkge1xuICAgIHNob3VsZFN1c3BlbmRJbXBsID0gbmV3U2hvdWxkU3VzcGVuZEltcGw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyKGZpYmVyKSB7XG4gIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG5cbiAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG59XG5cbmZ1bmN0aW9uIGVtcHR5RmluZEZpYmVyQnlIb3N0SW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlckZvckRldlRvb2xzKCkge1xuICByZXR1cm4gY3VycmVudDtcbn1cblxuZnVuY3Rpb24gaW5qZWN0SW50b0RldlRvb2xzKGRldlRvb2xzQ29uZmlnKSB7XG4gIHZhciBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSA9IGRldlRvb2xzQ29uZmlnLmZpbmRGaWJlckJ5SG9zdEluc3RhbmNlO1xuICB2YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG4gIHJldHVybiBpbmplY3RJbnRlcm5hbHMoe1xuICAgIGJ1bmRsZVR5cGU6IGRldlRvb2xzQ29uZmlnLmJ1bmRsZVR5cGUsXG4gICAgdmVyc2lvbjogZGV2VG9vbHNDb25maWcudmVyc2lvbixcbiAgICByZW5kZXJlclBhY2thZ2VOYW1lOiBkZXZUb29sc0NvbmZpZy5yZW5kZXJlclBhY2thZ2VOYW1lLFxuICAgIHJlbmRlcmVyQ29uZmlnOiBkZXZUb29sc0NvbmZpZy5yZW5kZXJlckNvbmZpZyxcbiAgICBvdmVycmlkZUhvb2tTdGF0ZTogb3ZlcnJpZGVIb29rU3RhdGUsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOiBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGgsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOiBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGgsXG4gICAgb3ZlcnJpZGVQcm9wczogb3ZlcnJpZGVQcm9wcyxcbiAgICBvdmVycmlkZVByb3BzRGVsZXRlUGF0aDogb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGgsXG4gICAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6IG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoLFxuICAgIHNldFN1c3BlbnNlSGFuZGxlcjogc2V0U3VzcGVuc2VIYW5kbGVyLFxuICAgIHNjaGVkdWxlVXBkYXRlOiBzY2hlZHVsZVVwZGF0ZSxcbiAgICBjdXJyZW50RGlzcGF0Y2hlclJlZjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcjogZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIsXG4gICAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6IGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlIHx8IGVtcHR5RmluZEZpYmVyQnlIb3N0SW5zdGFuY2UsXG4gICAgLy8gUmVhY3QgUmVmcmVzaFxuICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaDogIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaCAsXG4gICAgc2NoZWR1bGVSZWZyZXNoOiAgc2NoZWR1bGVSZWZyZXNoICxcbiAgICBzY2hlZHVsZVJvb3Q6ICBzY2hlZHVsZVJvb3QgLFxuICAgIHNldFJlZnJlc2hIYW5kbGVyOiAgc2V0UmVmcmVzaEhhbmRsZXIgLFxuICAgIC8vIEVuYWJsZXMgRGV2VG9vbHMgdG8gYXBwZW5kIG93bmVyIHN0YWNrcyB0byBlcnJvciBtZXNzYWdlcyBpbiBERVYgbW9kZS5cbiAgICBnZXRDdXJyZW50RmliZXI6ICBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scyBcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFJlYWN0RE9NUm9vdChjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgdGhpcy5faW50ZXJuYWxSb290ID0gY3JlYXRlUm9vdEltcGwoY29udGFpbmVyLCBDb25jdXJyZW50Um9vdCwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIFJlYWN0RE9NQmxvY2tpbmdSb290KGNvbnRhaW5lciwgdGFnLCBvcHRpb25zKSB7XG4gIHRoaXMuX2ludGVybmFsUm9vdCA9IGNyZWF0ZVJvb3RJbXBsKGNvbnRhaW5lciwgdGFnLCBvcHRpb25zKTtcbn1cblxuUmVhY3RET01Sb290LnByb3RvdHlwZS5yZW5kZXIgPSBSZWFjdERPTUJsb2NraW5nUm9vdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gIHZhciByb290ID0gdGhpcy5faW50ZXJuYWxSb290O1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuICcgKyAnVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiBhIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRhaW5lciA9IHJvb3QuY29udGFpbmVySW5mbztcblxuICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgIT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGhvc3RJbnN0YW5jZSA9IGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKHJvb3QuY3VycmVudCk7XG5cbiAgICAgIGlmIChob3N0SW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKGhvc3RJbnN0YW5jZS5wYXJlbnROb2RlICE9PSBjb250YWluZXIpIHtcbiAgICAgICAgICBlcnJvcigncmVuZGVyKC4uLik6IEl0IGxvb2tzIGxpa2UgdGhlIFJlYWN0LXJlbmRlcmVkIGNvbnRlbnQgb2YgdGhlICcgKyAncm9vdCBjb250YWluZXIgd2FzIHJlbW92ZWQgd2l0aG91dCB1c2luZyBSZWFjdC4gVGhpcyBpcyBub3QgJyArICdzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgZXJyb3JzLiBJbnN0ZWFkLCBjYWxsICcgKyBcInJvb3QudW5tb3VudCgpIHRvIGVtcHR5IGEgcm9vdCdzIGNvbnRhaW5lci5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIHJvb3QsIG51bGwsIG51bGwpO1xufTtcblxuUmVhY3RET01Sb290LnByb3RvdHlwZS51bm1vdW50ID0gUmVhY3RET01CbG9ja2luZ1Jvb3QucHJvdG90eXBlLnVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ3VubW91bnQoLi4uKTogZG9lcyBub3Qgc3VwcG9ydCBhIGNhbGxiYWNrIGFyZ3VtZW50LiAnICsgJ1RvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciByb290ID0gdGhpcy5faW50ZXJuYWxSb290O1xuICB2YXIgY29udGFpbmVyID0gcm9vdC5jb250YWluZXJJbmZvO1xuICB1cGRhdGVDb250YWluZXIobnVsbCwgcm9vdCwgbnVsbCwgZnVuY3Rpb24gKCkge1xuICAgIHVubWFya0NvbnRhaW5lckFzUm9vdChjb250YWluZXIpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3RJbXBsKGNvbnRhaW5lciwgdGFnLCBvcHRpb25zKSB7XG4gIC8vIFRhZyBpcyBlaXRoZXIgTGVnYWN5Um9vdCBvciBDb25jdXJyZW50IFJvb3RcbiAgdmFyIGh5ZHJhdGUgPSBvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRlID09PSB0cnVlO1xuICB2YXIgaHlkcmF0aW9uQ2FsbGJhY2tzID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucyB8fCBudWxsO1xuICB2YXIgbXV0YWJsZVNvdXJjZXMgPSBvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRpb25PcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRpb25PcHRpb25zLm11dGFibGVTb3VyY2VzIHx8IG51bGw7XG4gIHZhciByb290ID0gY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lciwgdGFnLCBoeWRyYXRlKTtcbiAgbWFya0NvbnRhaW5lckFzUm9vdChyb290LmN1cnJlbnQsIGNvbnRhaW5lcik7XG4gIHZhciBjb250YWluZXJOb2RlVHlwZSA9IGNvbnRhaW5lci5ub2RlVHlwZTtcblxuICB7XG4gICAgdmFyIHJvb3RDb250YWluZXJFbGVtZW50ID0gY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUgPyBjb250YWluZXIucGFyZW50Tm9kZSA6IGNvbnRhaW5lcjtcbiAgICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhyb290Q29udGFpbmVyRWxlbWVudCk7XG4gIH1cblxuICBpZiAobXV0YWJsZVNvdXJjZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG11dGFibGVTb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbXV0YWJsZVNvdXJjZSA9IG11dGFibGVTb3VyY2VzW2ldO1xuICAgICAgcmVnaXN0ZXJNdXRhYmxlU291cmNlRm9ySHlkcmF0aW9uKHJvb3QsIG11dGFibGVTb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByb290O1xufVxuZnVuY3Rpb24gY3JlYXRlTGVnYWN5Um9vdChjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBSZWFjdERPTUJsb2NraW5nUm9vdChjb250YWluZXIsIExlZ2FjeVJvb3QsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gaXNWYWxpZENvbnRhaW5lcihub2RlKSB7XG4gIHJldHVybiAhIShub2RlICYmIChub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBub2RlLm5vZGVWYWx1ZSA9PT0gJyByZWFjdC1tb3VudC1wb2ludC11bnN0YWJsZSAnKSk7XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQzID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncztcbnZhciB3YXJuZWRBYm91dEh5ZHJhdGVBUEkgPSBmYWxzZTtcblxue1xuICB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgIGlmIChjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciAmJiBjb250YWluZXIubm9kZVR5cGUgIT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGhvc3RJbnN0YW5jZSA9IGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyLl9pbnRlcm5hbFJvb3QuY3VycmVudCk7XG5cbiAgICAgIGlmIChob3N0SW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKGhvc3RJbnN0YW5jZS5wYXJlbnROb2RlICE9PSBjb250YWluZXIpIHtcbiAgICAgICAgICBlcnJvcigncmVuZGVyKC4uLik6IEl0IGxvb2tzIGxpa2UgdGhlIFJlYWN0LXJlbmRlcmVkIGNvbnRlbnQgb2YgdGhpcyAnICsgJ2NvbnRhaW5lciB3YXMgcmVtb3ZlZCB3aXRob3V0IHVzaW5nIFJlYWN0LiBUaGlzIGlzIG5vdCAnICsgJ3N1cHBvcnRlZCBhbmQgd2lsbCBjYXVzZSBlcnJvcnMuIEluc3RlYWQsIGNhbGwgJyArICdSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlIHRvIGVtcHR5IGEgY29udGFpbmVyLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzUm9vdFJlbmRlcmVkQnlTb21lUmVhY3QgPSAhIWNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuICAgIHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICB2YXIgaGFzTm9uUm9vdFJlYWN0Q2hpbGQgPSAhIShyb290RWwgJiYgZ2V0SW5zdGFuY2VGcm9tTm9kZShyb290RWwpKTtcblxuICAgIGlmIChoYXNOb25Sb290UmVhY3RDaGlsZCAmJiAhaXNSb290UmVuZGVyZWRCeVNvbWVSZWFjdCkge1xuICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBSZXBsYWNpbmcgUmVhY3QtcmVuZGVyZWQgY2hpbGRyZW4gd2l0aCBhIG5ldyByb290ICcgKyAnY29tcG9uZW50LiBJZiB5b3UgaW50ZW5kZWQgdG8gdXBkYXRlIHRoZSBjaGlsZHJlbiBvZiB0aGlzIG5vZGUsICcgKyAneW91IHNob3VsZCBpbnN0ZWFkIGhhdmUgdGhlIGV4aXN0aW5nIGNoaWxkcmVuIHVwZGF0ZSB0aGVpciBzdGF0ZSAnICsgJ2FuZCByZW5kZXIgdGhlIG5ldyBjb21wb25lbnRzIGluc3RlYWQgb2YgY2FsbGluZyBSZWFjdERPTS5yZW5kZXIuJyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIGNvbnRhaW5lci50YWdOYW1lICYmIGNvbnRhaW5lci50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdCT0RZJykge1xuICAgICAgZXJyb3IoJ3JlbmRlcigpOiBSZW5kZXJpbmcgY29tcG9uZW50cyBkaXJlY3RseSBpbnRvIGRvY3VtZW50LmJvZHkgaXMgJyArICdkaXNjb3VyYWdlZCwgc2luY2UgaXRzIGNoaWxkcmVuIGFyZSBvZnRlbiBtYW5pcHVsYXRlZCBieSB0aGlyZC1wYXJ0eSAnICsgJ3NjcmlwdHMgYW5kIGJyb3dzZXIgZXh0ZW5zaW9ucy4gVGhpcyBtYXkgbGVhZCB0byBzdWJ0bGUgJyArICdyZWNvbmNpbGlhdGlvbiBpc3N1ZXMuIFRyeSByZW5kZXJpbmcgaW50byBhIGNvbnRhaW5lciBlbGVtZW50IGNyZWF0ZWQgJyArICdmb3IgeW91ciBhcHAuJyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKSB7XG4gIGlmICghY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5kb2N1bWVudEVsZW1lbnQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5maXJzdENoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZEh5ZHJhdGVEdWVUb0xlZ2FjeUhldXJpc3RpYyhjb250YWluZXIpIHtcbiAgdmFyIHJvb3RFbGVtZW50ID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gIHJldHVybiAhIShyb290RWxlbWVudCAmJiByb290RWxlbWVudC5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIHJvb3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShST09UX0FUVFJJQlVURV9OQU1FKSk7XG59XG5cbmZ1bmN0aW9uIGxlZ2FjeUNyZWF0ZVJvb3RGcm9tRE9NQ29udGFpbmVyKGNvbnRhaW5lciwgZm9yY2VIeWRyYXRlKSB7XG4gIHZhciBzaG91bGRIeWRyYXRlID0gZm9yY2VIeWRyYXRlIHx8IHNob3VsZEh5ZHJhdGVEdWVUb0xlZ2FjeUhldXJpc3RpYyhjb250YWluZXIpOyAvLyBGaXJzdCBjbGVhciBhbnkgZXhpc3RpbmcgY29udGVudC5cblxuICBpZiAoIXNob3VsZEh5ZHJhdGUpIHtcbiAgICB2YXIgd2FybmVkID0gZmFsc2U7XG4gICAgdmFyIHJvb3RTaWJsaW5nO1xuXG4gICAgd2hpbGUgKHJvb3RTaWJsaW5nID0gY29udGFpbmVyLmxhc3RDaGlsZCkge1xuICAgICAge1xuICAgICAgICBpZiAoIXdhcm5lZCAmJiByb290U2libGluZy5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIHJvb3RTaWJsaW5nLmhhc0F0dHJpYnV0ZShST09UX0FUVFJJQlVURV9OQU1FKSkge1xuICAgICAgICAgIHdhcm5lZCA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcigncmVuZGVyKCk6IFRhcmdldCBub2RlIGhhcyBtYXJrdXAgcmVuZGVyZWQgYnkgUmVhY3QsIGJ1dCB0aGVyZSAnICsgJ2FyZSB1bnJlbGF0ZWQgbm9kZXMgYXMgd2VsbC4gVGhpcyBpcyBtb3N0IGNvbW1vbmx5IGNhdXNlZCBieSAnICsgJ3doaXRlLXNwYWNlIGluc2VydGVkIGFyb3VuZCBzZXJ2ZXItcmVuZGVyZWQgbWFya3VwLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChyb290U2libGluZyk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChzaG91bGRIeWRyYXRlICYmICFmb3JjZUh5ZHJhdGUgJiYgIXdhcm5lZEFib3V0SHlkcmF0ZUFQSSkge1xuICAgICAgd2FybmVkQWJvdXRIeWRyYXRlQVBJID0gdHJ1ZTtcblxuICAgICAgd2FybigncmVuZGVyKCk6IENhbGxpbmcgUmVhY3RET00ucmVuZGVyKCkgdG8gaHlkcmF0ZSBzZXJ2ZXItcmVuZGVyZWQgbWFya3VwICcgKyAnd2lsbCBzdG9wIHdvcmtpbmcgaW4gUmVhY3QgdjE4LiBSZXBsYWNlIHRoZSBSZWFjdERPTS5yZW5kZXIoKSBjYWxsICcgKyAnd2l0aCBSZWFjdERPTS5oeWRyYXRlKCkgaWYgeW91IHdhbnQgUmVhY3QgdG8gYXR0YWNoIHRvIHRoZSBzZXJ2ZXIgSFRNTC4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlTGVnYWN5Um9vdChjb250YWluZXIsIHNob3VsZEh5ZHJhdGUgPyB7XG4gICAgaHlkcmF0ZTogdHJ1ZVxuICB9IDogdW5kZWZpbmVkKTtcbn1cblxuZnVuY3Rpb24gd2Fybk9uSW52YWxpZENhbGxiYWNrJDEoY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAge1xuICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGVyTmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGNoaWxkcmVuLCBjb250YWluZXIsIGZvcmNlSHlkcmF0ZSwgY2FsbGJhY2spIHtcbiAge1xuICAgIHRvcExldmVsVXBkYXRlV2FybmluZ3MoY29udGFpbmVyKTtcbiAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2skMShjYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNhbGxiYWNrLCAncmVuZGVyJyk7XG4gIH0gLy8gVE9ETzogV2l0aG91dCBgYW55YCB0eXBlLCBGbG93IHNheXMgXCJQcm9wZXJ0eSBjYW5ub3QgYmUgYWNjZXNzZWQgb24gYW55XG4gIC8vIG1lbWJlciBvZiBpbnRlcnNlY3Rpb24gdHlwZS5cIiBXaHl5eXl5eS5cblxuXG4gIHZhciByb290ID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXI7XG4gIHZhciBmaWJlclJvb3Q7XG5cbiAgaWYgKCFyb290KSB7XG4gICAgLy8gSW5pdGlhbCBtb3VudFxuICAgIHJvb3QgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9IGxlZ2FjeUNyZWF0ZVJvb3RGcm9tRE9NQ29udGFpbmVyKGNvbnRhaW5lciwgZm9yY2VIeWRyYXRlKTtcbiAgICBmaWJlclJvb3QgPSByb290Ll9pbnRlcm5hbFJvb3Q7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgb3JpZ2luYWxDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0UHVibGljUm9vdEluc3RhbmNlKGZpYmVyUm9vdCk7XG4gICAgICAgIG9yaWdpbmFsQ2FsbGJhY2suY2FsbChpbnN0YW5jZSk7XG4gICAgICB9O1xuICAgIH0gLy8gSW5pdGlhbCBtb3VudCBzaG91bGQgbm90IGJlIGJhdGNoZWQuXG5cblxuICAgIHVuYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCBmaWJlclJvb3QsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGZpYmVyUm9vdCA9IHJvb3QuX2ludGVybmFsUm9vdDtcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBfb3JpZ2luYWxDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0UHVibGljUm9vdEluc3RhbmNlKGZpYmVyUm9vdCk7XG5cbiAgICAgICAgX29yaWdpbmFsQ2FsbGJhY2suY2FsbChpbnN0YW5jZSk7XG4gICAgICB9O1xuICAgIH0gLy8gVXBkYXRlXG5cblxuICAgIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgZmliZXJSb290LCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBnZXRQdWJsaWNSb290SW5zdGFuY2UoZmliZXJSb290KTtcbn1cblxuZnVuY3Rpb24gZmluZERPTU5vZGUoY29tcG9uZW50T3JFbGVtZW50KSB7XG4gIHtcbiAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lciQzLmN1cnJlbnQ7XG5cbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgb3duZXIuc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSBvd25lci5zdGF0ZU5vZGUuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyO1xuXG4gICAgICBpZiAoIXdhcm5lZEFib3V0UmVmc0luUmVuZGVyKSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBhY2Nlc3NpbmcgZmluZERPTU5vZGUgaW5zaWRlIGl0cyByZW5kZXIoKS4gJyArICdyZW5kZXIoKSBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4gSXQgc2hvdWxkICcgKyAnbmV2ZXIgYWNjZXNzIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIHN0YWxlIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgJyArICdyZW5kZXIsIHN1Y2ggYXMgcmVmcy4gTW92ZSB0aGlzIGxvZ2ljIHRvIGNvbXBvbmVudERpZE1vdW50IGFuZCAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZSBpbnN0ZWFkLicsIGdldENvbXBvbmVudE5hbWUob3duZXIudHlwZSkgfHwgJ0EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIG93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb21wb25lbnRPckVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvbXBvbmVudE9yRWxlbWVudC5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudE9yRWxlbWVudDtcbiAgfVxuXG4gIHtcbiAgICByZXR1cm4gZmluZEhvc3RJbnN0YW5jZVdpdGhXYXJuaW5nKGNvbXBvbmVudE9yRWxlbWVudCwgJ2ZpbmRET01Ob2RlJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGh5ZHJhdGUoZWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00uaHlkcmF0ZSgpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgY3JlYXRlUm9vdChjb250YWluZXIsIHtoeWRyYXRlOiB0cnVlfSkucmVuZGVyKGVsZW1lbnQpPycpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiB0aHJvdyBvciB3YXJuIGlmIHdlIGNvdWxkbid0IGh5ZHJhdGU/XG5cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgZWxlbWVudCwgY29udGFpbmVyLCB0cnVlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiByZW5kZXIoZWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyKCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSAnICsgJ3Bhc3NlZCB0byBSZWFjdERPTS5jcmVhdGVSb290KCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCByb290LnJlbmRlcihlbGVtZW50KT8nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgZWxlbWVudCwgY29udGFpbmVyLCBmYWxzZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBjYWxsYmFjaykge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyTm9kZSkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCEocGFyZW50Q29tcG9uZW50ICE9IG51bGwgJiYgaGFzKHBhcmVudENvbXBvbmVudCkpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwicGFyZW50Q29tcG9uZW50IG11c3QgYmUgYSB2YWxpZCBSZWFjdCBDb21wb25lbnRcIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGZhbHNlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiB1bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lcikge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInVubW91bnRDb21wb25lbnRBdE5vZGUoLi4uKTogVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgaXNNb2Rlcm5Sb290ID0gaXNDb250YWluZXJNYXJrZWRBc1Jvb3QoY29udGFpbmVyKSAmJiBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzTW9kZXJuUm9vdCkge1xuICAgICAgZXJyb3IoJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSAnICsgJ3Bhc3NlZCB0byBSZWFjdERPTS5jcmVhdGVSb290KCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgcm9vdC51bm1vdW50KCk/Jyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyKSB7XG4gICAge1xuICAgICAgdmFyIHJvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICAgICAgdmFyIHJlbmRlcmVkQnlEaWZmZXJlbnRSZWFjdCA9IHJvb3RFbCAmJiAhZ2V0SW5zdGFuY2VGcm9tTm9kZShyb290RWwpO1xuXG4gICAgICBpZiAocmVuZGVyZWRCeURpZmZlcmVudFJlYWN0KSB7XG4gICAgICAgIGVycm9yKFwidW5tb3VudENvbXBvbmVudEF0Tm9kZSgpOiBUaGUgbm9kZSB5b3UncmUgYXR0ZW1wdGluZyB0byB1bm1vdW50IFwiICsgJ3dhcyByZW5kZXJlZCBieSBhbm90aGVyIGNvcHkgb2YgUmVhY3QuJyk7XG4gICAgICB9XG4gICAgfSAvLyBVbm1vdW50IHNob3VsZCBub3QgYmUgYmF0Y2hlZC5cblxuXG4gICAgdW5iYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgICBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBudWxsLCBjb250YWluZXIsIGZhbHNlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWUgVGhpcyBzaG91bGQgcHJvYmFibHkgdXNlIGBkZWxldGUgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXJgXG4gICAgICAgIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID0gbnVsbDtcbiAgICAgICAgdW5tYXJrQ29udGFpbmVyQXNSb290KGNvbnRhaW5lcik7XG4gICAgICB9KTtcbiAgICB9KTsgLy8gSWYgeW91IGNhbGwgdW5tb3VudENvbXBvbmVudEF0Tm9kZSB0d2ljZSBpbiBxdWljayBzdWNjZXNzaW9uLCB5b3UnbGxcbiAgICAvLyBnZXQgYHRydWVgIHR3aWNlLiBUaGF0J3MgcHJvYmFibHkgZmluZT9cblxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHZhciBfcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG5cbiAgICAgIHZhciBoYXNOb25Sb290UmVhY3RDaGlsZCA9ICEhKF9yb290RWwgJiYgZ2V0SW5zdGFuY2VGcm9tTm9kZShfcm9vdEVsKSk7IC8vIENoZWNrIGlmIHRoZSBjb250YWluZXIgaXRzZWxmIGlzIGEgUmVhY3Qgcm9vdCBub2RlLlxuXG4gICAgICB2YXIgaXNDb250YWluZXJSZWFjdFJvb3QgPSBjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiBpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lci5wYXJlbnROb2RlKSAmJiAhIWNvbnRhaW5lci5wYXJlbnROb2RlLl9yZWFjdFJvb3RDb250YWluZXI7XG5cbiAgICAgIGlmIChoYXNOb25Sb290UmVhY3RDaGlsZCkge1xuICAgICAgICBlcnJvcihcInVubW91bnRDb21wb25lbnRBdE5vZGUoKTogVGhlIG5vZGUgeW91J3JlIGF0dGVtcHRpbmcgdG8gdW5tb3VudCBcIiArICd3YXMgcmVuZGVyZWQgYnkgUmVhY3QgYW5kIGlzIG5vdCBhIHRvcC1sZXZlbCBjb250YWluZXIuICVzJywgaXNDb250YWluZXJSZWFjdFJvb3QgPyAnWW91IG1heSBoYXZlIGFjY2lkZW50YWxseSBwYXNzZWQgaW4gYSBSZWFjdCByb290IG5vZGUgaW5zdGVhZCAnICsgJ29mIGl0cyBjb250YWluZXIuJyA6ICdJbnN0ZWFkLCBoYXZlIHRoZSBwYXJlbnQgY29tcG9uZW50IHVwZGF0ZSBpdHMgc3RhdGUgYW5kICcgKyAncmVyZW5kZXIgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoaXMgY29tcG9uZW50LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5zZXRBdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24kMSk7XG5zZXRBdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiQxKTtcbnNldEF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkkMSk7XG5zZXRBdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eShydW5XaXRoUHJpb3JpdHkkMik7XG52YXIgZGlkV2FybkFib3V0VW5zdGFibGVDcmVhdGVQb3J0YWwgPSBmYWxzZTtcblxue1xuICBpZiAodHlwZW9mIE1hcCAhPT0gJ2Z1bmN0aW9uJyB8fCAvLyAkRmxvd0lzc3VlIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIE1hcCBoYXMgbm8gcHJvdG90eXBlXG4gIE1hcC5wcm90b3R5cGUgPT0gbnVsbCB8fCB0eXBlb2YgTWFwLnByb3RvdHlwZS5mb3JFYWNoICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBTZXQgIT09ICdmdW5jdGlvbicgfHwgLy8gJEZsb3dJc3N1ZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBTZXQgaGFzIG5vIHByb3RvdHlwZVxuICBTZXQucHJvdG90eXBlID09IG51bGwgfHwgdHlwZW9mIFNldC5wcm90b3R5cGUuY2xlYXIgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIFNldC5wcm90b3R5cGUuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGVycm9yKCdSZWFjdCBkZXBlbmRzIG9uIE1hcCBhbmQgU2V0IGJ1aWx0LWluIHR5cGVzLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgfVxufVxuXG5zZXRSZXN0b3JlSW1wbGVtZW50YXRpb24ocmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQzKTtcbnNldEJhdGNoaW5nSW1wbGVtZW50YXRpb24oYmF0Y2hlZFVwZGF0ZXMkMSwgZGlzY3JldGVVcGRhdGVzJDEsIGZsdXNoRGlzY3JldGVVcGRhdGVzLCBiYXRjaGVkRXZlbnRVcGRhdGVzJDEpO1xuXG5mdW5jdGlvbiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVyKSB7XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9IC8vIFRPRE86IHBhc3MgUmVhY3RET00gcG9ydGFsIGltcGxlbWVudGF0aW9uIGFzIHRoaXJkIGFyZ3VtZW50XG4gIC8vICRGbG93Rml4TWUgVGhlIEZsb3cgdHlwZSBpcyBvcGFxdWUgYnV0IHRoZXJlJ3Mgbm8gd2F5IHRvIGFjdHVhbGx5IGNyZWF0ZSBpdC5cblxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoY2hpbGRyZW4sIGNvbnRhaW5lciwgbnVsbCwga2V5KTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBjYWxsYmFjaykge1xuXG4gIHJldHVybiB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXIpIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcblxuICB7XG4gICAgaWYgKCFkaWRXYXJuQWJvdXRVbnN0YWJsZUNyZWF0ZVBvcnRhbCkge1xuICAgICAgZGlkV2FybkFib3V0VW5zdGFibGVDcmVhdGVQb3J0YWwgPSB0cnVlO1xuXG4gICAgICB3YXJuKCdUaGUgUmVhY3RET00udW5zdGFibGVfY3JlYXRlUG9ydGFsKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdERPTS5jcmVhdGVQb3J0YWwoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLCAnICsgJ2J1dCB3aXRob3V0IHRoZSBcInVuc3RhYmxlX1wiIHByZWZpeC4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lciwga2V5KTtcbn1cblxudmFyIEludGVybmFscyA9IHtcbiAgLy8gS2VlcCBpbiBzeW5jIHdpdGggUmVhY3RUZXN0VXRpbHMuanMsIGFuZCBSZWFjdFRlc3RVdGlsc0FjdC5qcy5cbiAgLy8gVGhpcyBpcyBhbiBhcnJheSBmb3IgYmV0dGVyIG1pbmlmaWNhdGlvbi5cbiAgRXZlbnRzOiBbZ2V0SW5zdGFuY2VGcm9tTm9kZSwgZ2V0Tm9kZUZyb21JbnN0YW5jZSwgZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSwgZW5xdWV1ZVN0YXRlUmVzdG9yZSwgcmVzdG9yZVN0YXRlSWZOZWVkZWQsIGZsdXNoUGFzc2l2ZUVmZmVjdHMsIC8vIFRPRE86IFRoaXMgaXMgcmVsYXRlZCB0byBgYWN0YCwgbm90IGV2ZW50cy4gTW92ZSB0byBzZXBhcmF0ZSBrZXk/XG4gIElzVGhpc1JlbmRlcmVyQWN0aW5nXVxufTtcbnZhciBmb3VuZERldlRvb2xzID0gaW5qZWN0SW50b0RldlRvb2xzKHtcbiAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlLFxuICBidW5kbGVUeXBlOiAgMSAsXG4gIHZlcnNpb246IFJlYWN0VmVyc2lvbixcbiAgcmVuZGVyZXJQYWNrYWdlTmFtZTogJ3JlYWN0LWRvbSdcbn0pO1xuXG57XG4gIGlmICghZm91bmREZXZUb29scyAmJiBjYW5Vc2VET00gJiYgd2luZG93LnRvcCA9PT0gd2luZG93LnNlbGYpIHtcbiAgICAvLyBJZiB3ZSdyZSBpbiBDaHJvbWUgb3IgRmlyZWZveCwgcHJvdmlkZSBhIGRvd25sb2FkIGxpbmsgaWYgbm90IGluc3RhbGxlZC5cbiAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUnKSA+IC0xICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRWRnZScpID09PSAtMSB8fCBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0ZpcmVmb3gnKSA+IC0xKSB7XG4gICAgICB2YXIgcHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2w7IC8vIERvbid0IHdhcm4gaW4gZXhvdGljIGNhc2VzIGxpa2UgY2hyb21lLWV4dGVuc2lvbjovLy5cblxuICAgICAgaWYgKC9eKGh0dHBzP3xmaWxlKTokLy50ZXN0KHByb3RvY29sKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG4gICAgICAgIGNvbnNvbGUuaW5mbygnJWNEb3dubG9hZCB0aGUgUmVhY3QgRGV2VG9vbHMgJyArICdmb3IgYSBiZXR0ZXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMnICsgKHByb3RvY29sID09PSAnZmlsZTonID8gJ1xcbllvdSBtaWdodCBuZWVkIHRvIHVzZSBhIGxvY2FsIEhUVFAgc2VydmVyIChpbnN0ZWFkIG9mIGZpbGU6Ly8pOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1kZXZ0b29scy1mYXEnIDogJycpLCAnZm9udC13ZWlnaHQ6Ym9sZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gSW50ZXJuYWxzO1xuZXhwb3J0cy5jcmVhdGVQb3J0YWwgPSBjcmVhdGVQb3J0YWwkMTtcbmV4cG9ydHMuZmluZERPTU5vZGUgPSBmaW5kRE9NTm9kZTtcbmV4cG9ydHMuZmx1c2hTeW5jID0gZmx1c2hTeW5jO1xuZXhwb3J0cy5oeWRyYXRlID0gaHlkcmF0ZTtcbmV4cG9ydHMucmVuZGVyID0gcmVuZGVyO1xuZXhwb3J0cy51bm1vdW50Q29tcG9uZW50QXROb2RlID0gdW5tb3VudENvbXBvbmVudEF0Tm9kZTtcbmV4cG9ydHMudW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgPSBiYXRjaGVkVXBkYXRlcyQxO1xuZXhwb3J0cy51bnN0YWJsZV9jcmVhdGVQb3J0YWwgPSB1bnN0YWJsZV9jcmVhdGVQb3J0YWw7XG5leHBvcnRzLnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyID0gcmVuZGVyU3VidHJlZUludG9Db250YWluZXI7XG5leHBvcnRzLnZlcnNpb24gPSBSZWFjdFZlcnNpb247XG4gIH0pKCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBjaGVja0RDRSgpIHtcbiAgLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuICBpZiAoXG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFICE9PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIFRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZFxuICAgIC8vIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgY29uZGl0aW9uIGlzIHRydWUgb25seSBpbiBkZXZlbG9wbWVudC5cbiAgICAvLyBUaGVyZWZvcmUgaWYgdGhlIGJyYW5jaCBpcyBzdGlsbCBoZXJlLCBkZWFkIGNvZGUgZWxpbWluYXRpb24gd2Fzbid0XG4gICAgLy8gcHJvcGVybHkgYXBwbGllZC5cbiAgICAvLyBEb24ndCBjaGFuZ2UgdGhlIG1lc3NhZ2UuIFJlYWN0IERldlRvb2xzIHJlbGllcyBvbiBpdC4gQWxzbyBtYWtlIHN1cmVcbiAgICAvLyB0aGlzIG1lc3NhZ2UgZG9lc24ndCBvY2N1ciBlbHNld2hlcmUgaW4gdGhpcyBmdW5jdGlvbiwgb3IgaXQgd2lsbCBjYXVzZVxuICAgIC8vIGEgZmFsc2UgcG9zaXRpdmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdeX14nKTtcbiAgfVxuICB0cnkge1xuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjb2RlIGFib3ZlIGhhcyBiZWVuIGRlYWQgY29kZSBlbGltaW5hdGVkIChEQ0UnZCkuXG4gICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGNoZWNrRENFKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRGV2VG9vbHMgc2hvdWxkbid0IGNyYXNoIFJlYWN0LCBubyBtYXR0ZXIgd2hhdC5cbiAgICAvLyBXZSBzaG91bGQgc3RpbGwgcmVwb3J0IGluIGNhc2Ugd2UgYnJlYWsgdGhpcyBjb2RlLlxuICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgfVxufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBEQ0UgY2hlY2sgc2hvdWxkIGhhcHBlbiBiZWZvcmUgUmVhY3RET00gYnVuZGxlIGV4ZWN1dGVzIHNvIHRoYXRcbiAgLy8gRGV2VG9vbHMgY2FuIHJlcG9ydCBiYWQgbWluaWZpY2F0aW9uIGR1cmluZyBpbmplY3Rpb24uXG4gIGNoZWNrRENFKCk7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlOyAvLyBUT0RPOiBXZSBkb24ndCB1c2UgQXN5bmNNb2RlIG9yIENvbmN1cnJlbnRNb2RlIGFueW1vcmUuIFRoZXkgd2VyZSB0ZW1wb3Jhcnlcbi8vICh1bnN0YWJsZSkgQVBJcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLiBDYW4gd2UgcmVtb3ZlIHRoZSBzeW1ib2xzP1xuXG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpIDogMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmJsb2NrJykgOiAweGVhZDk7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJykgOiAweGVhZDU7XG52YXIgUkVBQ1RfUkVTUE9OREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5yZXNwb25kZXInKSA6IDB4ZWFkNjtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc2NvcGUnKSA6IDB4ZWFkNztcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUkVTUE9OREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfU0NPUEVfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IC8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcblxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbiAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG5cbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHsgLyoqLyB9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICtcbiAgICAgICAgICAgICAgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICcgKyB0eXBlb2YgZXJyb3IgKyAnLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xuICAgICAgICAgICAgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldHMgd2FybmluZyBjYWNoZSB3aGVuIHRlc3RpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vbGliL2hhcycpO1xudmFyIGNoZWNrUHJvcFR5cGVzID0gcmVxdWlyZSgnLi9jaGVja1Byb3BUeXBlcycpO1xuXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gIC8qIGdsb2JhbCBTeW1ib2wgKi9cbiAgdmFyIElURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xuICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0LlxuICAgKlxuICAgKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDpcbiAgICpcbiAgICogICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihteUl0ZXJhYmxlKTtcbiAgICogICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTtcbiAgICogICAgICAgLi4uXG4gICAqICAgICB9XG4gICAqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbWF5YmVJdGVyYWJsZVxuICAgKiBAcmV0dXJuIHs/ZnVuY3Rpb259XG4gICAqL1xuICBmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yRm47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlXG4gICAqIHN1cHBsaWVkIHRvIFJlYWN0IGNvbXBvbmVudHMuIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTtcbiAgICogICB2YXIgTXlBcnRpY2xlID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICAgcHJvcFR5cGVzOiB7XG4gICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkIFwiZGVzY3JpcHRpb25cIi5cbiAgICogICAgICAgZGVzY3JpcHRpb246IFByb3BzLnN0cmluZyxcbiAgICpcbiAgICogICAgICAgLy8gQSByZXF1aXJlZCBlbnVtIHByb3AgbmFtZWQgXCJjYXRlZ29yeVwiLlxuICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcHJvcCBuYW1lZCBcImRpYWxvZ1wiIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLlxuICAgKiAgICAgICBkaWFsb2c6IFByb3BzLmluc3RhbmNlT2YoRGlhbG9nKS5pc1JlcXVpcmVkXG4gICAqICAgICB9LFxuICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH1cbiAgICogICB9KTtcbiAgICpcbiAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOlxuICAgKlxuICAgKiAgIHR5cGUgOj0gYXJyYXl8Ym9vbHxmdW5jfG9iamVjdHxudW1iZXJ8c3RyaW5nfG9uZU9mKFsuLi5dKXxpbnN0YW5jZU9mKC4uLilcbiAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1aXJlZCk/XG4gICAqXG4gICAqIEVhY2ggYW5kIGV2ZXJ5IGRlY2xhcmF0aW9uIHByb2R1Y2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUuIFRoaXNcbiAgICogYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiAgdmFyIE15TGluayA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgcHJvcFR5cGVzOiB7XG4gICAqICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIG9yIFVSSSBwcm9wIG5hbWVkIFwiaHJlZlwiLlxuICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgKiAgICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICogICAgICAgIGlmIChwcm9wVmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgcHJvcFZhbHVlICE9PSAnc3RyaW5nJyAmJlxuICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xuICAgKiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgKiAgICAgICAgICAgICdFeHBlY3RlZCBhIHN0cmluZyBvciBhbiBVUkkgZm9yICcgKyBwcm9wTmFtZSArICcgaW4gJyArXG4gICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgKiAgICAgICAgICApO1xuICAgKiAgICAgICAgfVxuICAgKiAgICAgIH1cbiAgICogICAgfSxcbiAgICogICAgcmVuZGVyOiBmdW5jdGlvbigpIHsuLi59XG4gICAqICB9KTtcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuXG4gIHZhciBBTk9OWU1PVVMgPSAnPDxhbm9ueW1vdXM+Pic7XG5cbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2FycmF5JyksXG4gICAgYmlnaW50OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYmlnaW50JyksXG4gICAgYm9vbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Jvb2xlYW4nKSxcbiAgICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcbiAgICBudW1iZXI6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdudW1iZXInKSxcbiAgICBvYmplY3Q6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdvYmplY3QnKSxcbiAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcbiAgICBzeW1ib2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzeW1ib2wnKSxcblxuICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcbiAgICBhcnJheU9mOiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIsXG4gICAgZWxlbWVudDogY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCksXG4gICAgZWxlbWVudFR5cGU6IGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSxcbiAgICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyLFxuICAgIG5vZGU6IGNyZWF0ZU5vZGVDaGVja2VyKCksXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXG4gICAgb25lT2Y6IGNyZWF0ZUVudW1UeXBlQ2hlY2tlcixcbiAgICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIsXG4gICAgZXhhY3Q6IGNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIsXG4gIH07XG5cbiAgLyoqXG4gICAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gICAqL1xuICAvKmVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSovXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgICAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtXG4gICAgaWYgKHggPT09IHkpIHtcbiAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxuICAgICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTBcbiAgICAgIHJldHVybiB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RlcCA2LmE6IE5hTiA9PSBOYU5cbiAgICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG4gICAgfVxuICB9XG4gIC8qZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuXG4gIC8qKlxuICAgKiBXZSB1c2UgYW4gRXJyb3ItbGlrZSBvYmplY3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgcGVvcGxlIG1heSBjYWxsXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXG4gICAqIEVycm9ycyBhbnltb3JlLiBXZSBkb24ndCBpbnNwZWN0IHRoZWlyIHN0YWNrIGFueXdheSwgYW5kIGNyZWF0aW5nIHRoZW1cbiAgICogaXMgcHJvaGliaXRpdmVseSBleHBlbnNpdmUgaWYgdGhleSBhcmUgY3JlYXRlZCB0b28gb2Z0ZW4sIHN1Y2ggYXMgd2hhdFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXG4gICAqL1xuICBmdW5jdGlvbiBQcm9wVHlwZUVycm9yKG1lc3NhZ2UsIGRhdGEpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuZGF0YSA9IGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YToge307XG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG4gIC8vIE1ha2UgYGluc3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdvcmsgZm9yIHJldHVybmVkIGVycm9ycy5cbiAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPSAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcblxuICAgICAgaWYgKHNlY3JldCAhPT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgICAgaWYgKHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAgICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICAgICAgICApO1xuICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xuICAgICAgICAgIHZhciBjYWNoZUtleSA9IGNvbXBvbmVudE5hbWUgKyAnOicgKyBwcm9wTmFtZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXG4gICAgICAgICAgICAvLyBBdm9pZCBzcGFtbWluZyB0aGUgY29uc29sZSBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG5vdCBhY3Rpb25hYmxlIGV4Y2VwdCBmb3IgbGliIGF1dGhvcnNcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50IDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgICAnWW91IGFyZSBtYW51YWxseSBjYWxsaW5nIGEgUmVhY3QuUHJvcFR5cGVzIHZhbGlkYXRpb24gJyArXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4gVGhpcyBpcyBkZXByZWNhdGVkICcgK1xuICAgICAgICAgICAgICAnYW5kIHdpbGwgdGhyb3cgaW4gdGhlIHN0YW5kYWxvbmUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcbiAgICAgICAgICAgICAgJ2xpYnJhcnkuIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmctZG9udC1jYWxsLXByb3B0eXBlcyAnICsgJ2ZvciBkZXRhaWxzLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxuICAgICAgICAvLyAnb2YgdHlwZSBgb2JqZWN0YCcuXG4gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBlICsgJ2AuJyksXG4gICAgICAgICAge2V4cGVjdGVkVHlwZTogZXhwZWN0ZWRUeXBlfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHtcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBhcnJheS4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnWycgKyBpICsgJ10nLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBpZiAoIVJlYWN0SXMuaXNWYWxpZEVsZW1lbnRUeXBlKHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50IHR5cGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyKGV4cGVjdGVkQ2xhc3MpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XG4gICAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudHMgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LCBnb3QgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIGFyZ3VtZW50cy4gJyArXG4gICAgICAgICAgICAnQSBjb21tb24gbWlzdGFrZSBpcyB0byB3cml0ZSBvbmVPZih4LCB5LCB6KSBpbnN0ZWFkIG9mIG9uZU9mKFt4LCB5LCB6XSkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMsIGZ1bmN0aW9uIHJlcGxhY2VyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0eXBlID09PSAnc3ltYm9sJykge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIFN0cmluZyhwcm9wVmFsdWUpICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVjdE9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIG9iamVjdC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XG4gICAgICAgIGlmIChoYXMocHJvcFZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xuICAgICAgICAgICdyZWNlaXZlZCAnICsgZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKGNoZWNrZXIpICsgJyBhdCBpbmRleCAnICsgaSArICcuJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBleHBlY3RlZFR5cGVzID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgICB2YXIgY2hlY2tlclJlc3VsdCA9IGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChjaGVja2VyUmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tlclJlc3VsdC5kYXRhICYmIGhhcyhjaGVja2VyUmVzdWx0LmRhdGEsICdleHBlY3RlZFR5cGUnKSkge1xuICAgICAgICAgIGV4cGVjdGVkVHlwZXMucHVzaChjaGVja2VyUmVzdWx0LmRhdGEuZXhwZWN0ZWRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGV4cGVjdGVkVHlwZXNNZXNzYWdlID0gKGV4cGVjdGVkVHlwZXMubGVuZ3RoID4gMCkgPyAnLCBleHBlY3RlZCBvbmUgb2YgdHlwZSBbJyArIGV4cGVjdGVkVHlwZXMuam9pbignLCAnKSArICddJzogJyc7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgJyArIGV4cGVjdGVkVHlwZXNNZXNzYWdlICsgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCB0eXBlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXkgKyAnYCBpcyBpbnZhbGlkOyAnICtcbiAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGUgKyAnYC4nXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzaGFwZVR5cGVzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgZ2V0UHJlY2lzZVR5cGUoY2hlY2tlcikpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWxsIGtleXMgaW4gY2FzZSBzb21lIGFyZSByZXF1aXJlZCBidXQgbWlzc2luZyBmcm9tIHByb3BzLlxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gYWxsS2V5cykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKGhhcyhzaGFwZVR5cGVzLCBrZXkpICYmIHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIGdldFByZWNpc2VUeXBlKGNoZWNrZXIpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXG4gICAgICAgICAgICAnXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xuICAgICAgICAgICAgJ1xcblZhbGlkIGtleXM6ICcgKyBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhzaGFwZVR5cGVzKSwgbnVsbCwgJyAgJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xuICAgIHN3aXRjaCAodHlwZW9mIHByb3BWYWx1ZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gIXByb3BWYWx1ZTtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFZhbHVlLmV2ZXJ5KGlzTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4ocHJvcFZhbHVlKTtcbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtcbiAgICAgICAgICB2YXIgc3RlcDtcbiAgICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gcHJvcFZhbHVlLmVudHJpZXMpIHtcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgaWYgKCFpc05vZGUoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNOb2RlKGVudHJ5WzFdKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSB7XG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cbiAgICBpZiAocHJvcFR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBmYWxzeSB2YWx1ZSBjYW4ndCBiZSBhIFN5bWJvbFxuICAgIGlmICghcHJvcFZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSA9PT0gJ1N5bWJvbCdcbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgcHJvcFZhbHVlIGluc3RhbmNlb2YgU3ltYm9sKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfVxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cbiAgICAgIC8vICdvYmplY3QnIGZvciB0eXBlb2YgYSBSZWdFeHAuIFdlJ2xsIG5vcm1hbGl6ZSB0aGlzIGhlcmUgc28gdGhhdCAvYmxhL1xuICAgICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXG4gICAgICByZXR1cm4gJ29iamVjdCc7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdzeW1ib2wnO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxuICBmdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XG4gICAgfVxuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHBvc3RmaXhlZCB0byBhIHdhcm5pbmcgYWJvdXQgYW4gaW52YWxpZCB0eXBlLlxuICAvLyBGb3IgZXhhbXBsZSwgXCJ1bmRlZmluZWRcIiBvciBcIm9mIHR5cGUgYXJyYXlcIlxuICBmdW5jdGlvbiBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcodmFsdWUpIHtcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiAnYW4gJyArIHR5cGU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgcmV0dXJuICdhICcgKyB0eXBlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xuICAgIGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkge1xuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBjaGVja1Byb3BUeXBlcztcbiAgUmVhY3RQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBjaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZTtcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCAiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmIChhcmcpIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIHBhcnNlVmFsdWUoYXJnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZVZhbHVlIChhcmcpIHtcblx0XHRpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiBhcmc7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmcgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHR9XG5cblx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRyZXR1cm4gYXJnLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIGtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmRDbGFzcyAodmFsdWUsIG5ld0NsYXNzKSB7XG5cdFx0aWYgKCFuZXdDbGFzcykge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyAnICcgKyBuZXdDbGFzcztcblx0XHR9XG5cdFxuXHRcdHJldHVybiB2YWx1ZSArIG5ld0NsYXNzO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlOyAvLyBUT0RPOiBXZSBkb24ndCB1c2UgQXN5bmNNb2RlIG9yIENvbmN1cnJlbnRNb2RlIGFueW1vcmUuIFRoZXkgd2VyZSB0ZW1wb3Jhcnlcbi8vICh1bnN0YWJsZSkgQVBJcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLiBDYW4gd2UgcmVtb3ZlIHRoZSBzeW1ib2xzP1xuXG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpIDogMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmJsb2NrJykgOiAweGVhZDk7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJykgOiAweGVhZDU7XG52YXIgUkVBQ1RfUkVTUE9OREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5yZXNwb25kZXInKSA6IDB4ZWFkNjtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc2NvcGUnKSA6IDB4ZWFkNztcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUkVTUE9OREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfU0NPUEVfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IC8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcblxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgY2hpbGRDb250ZXh0VHlwZXM6IHRydWUsXG4gIGNvbnRleHRUeXBlOiB0cnVlLFxuICBjb250ZXh0VHlwZXM6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IHRydWUsXG4gIG1peGluczogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XG4gIG5hbWU6IHRydWUsXG4gIGxlbmd0aDogdHJ1ZSxcbiAgcHJvdG90eXBlOiB0cnVlLFxuICBjYWxsZXI6IHRydWUsXG4gIGNhbGxlZTogdHJ1ZSxcbiAgYXJndW1lbnRzOiB0cnVlLFxuICBhcml0eTogdHJ1ZVxufTtcbnZhciBGT1JXQVJEX1JFRl9TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICByZW5kZXI6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZVxufTtcbnZhciBNRU1PX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIGNvbXBhcmU6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBUWVBFX1NUQVRJQ1MgPSB7fTtcblRZUEVfU1RBVElDU1tyZWFjdElzLkZvcndhcmRSZWZdID0gRk9SV0FSRF9SRUZfU1RBVElDUztcblRZUEVfU1RBVElDU1tyZWFjdElzLk1lbW9dID0gTUVNT19TVEFUSUNTO1xuXG5mdW5jdGlvbiBnZXRTdGF0aWNzKGNvbXBvbmVudCkge1xuICAvLyBSZWFjdCB2MTYuMTEgYW5kIGJlbG93XG4gIGlmIChyZWFjdElzLmlzTWVtbyhjb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIE1FTU9fU1RBVElDUztcbiAgfSAvLyBSZWFjdCB2MTYuMTIgYW5kIGFib3ZlXG5cblxuICByZXR1cm4gVFlQRV9TVEFUSUNTW2NvbXBvbmVudFsnJCR0eXBlb2YnXV0gfHwgUkVBQ1RfU1RBVElDUztcbn1cblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzO1xuIiwgIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsICIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsICJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlSGFzO1xuIiwgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsICJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwgInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBTdGFja1xuICovXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0NsZWFyO1xuIiwgIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsICIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0hhcztcbiIsICIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCAidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlSnNEYXRhO1xuIiwgInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsICJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwgIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwgInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsICIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiIsICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsICJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiIsICJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5YWJsZTtcbiIsICJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlR2V0O1xuIiwgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCAidmFyIG1hcENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19tYXBDYWNoZUNsZWFyJyksXG4gICAgbWFwQ2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19tYXBDYWNoZURlbGV0ZScpLFxuICAgIG1hcENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVHZXQnKSxcbiAgICBtYXBDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX21hcENhY2hlSGFzJyksXG4gICAgbWFwQ2FjaGVTZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXBDYWNoZTtcbiIsICJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsICJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcbiIsICIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLCAidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iLCAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVNvbWU7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCAidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheVNvbWUgPSByZXF1aXJlKCcuL19hcnJheVNvbWUnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIGFyclN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChhcnJTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gYXJyU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IGFycmF5O1xuICB9XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gdHJ1ZSxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gIHN0YWNrLnNldChhcnJheSwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIGFycmF5KTtcblxuICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghY2FjaGVIYXMoc2Vlbiwgb3RoSW5kZXgpICYmXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEFycmF5cztcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwgIi8qKlxuICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwVG9BcnJheTtcbiIsICIvKipcbiAqIENvbnZlcnRzIGBzZXRgIHRvIGFuIGFycmF5IG9mIGl0cyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvQXJyYXk7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5JyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEJ5VGFnO1xuIiwgIi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVB1c2g7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsICJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldEFsbEtleXM7XG4iLCAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RmlsdGVyO1xuIiwgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkFycmF5O1xuIiwgInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHM7XG4iLCAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVGltZXM7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3RMaWtlO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwgInZhciBiYXNlSXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL19iYXNlSXNBcmd1bWVudHMnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FyZ3VtZW50cztcbiIsICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsICIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsICIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsICJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsICJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsICJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvdG90eXBlO1xuIiwgIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJBcmc7XG4iLCAidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzO1xuIiwgInZhciBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXMnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzO1xuIiwgInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwgInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5cztcbiIsICJ2YXIgYmFzZUdldEFsbEtleXMgPSByZXF1aXJlKCcuL19iYXNlR2V0QWxsS2V5cycpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMsIGdldFN5bWJvbHMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEFsbEtleXM7XG4iLCAidmFyIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsT2JqZWN0cztcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFWaWV3O1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBTZXQgPSBnZXROYXRpdmUocm9vdCwgJ1NldCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldDtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFdlYWtNYXAgPSBnZXROYXRpdmUocm9vdCwgJ1dlYWtNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXZWFrTWFwO1xuIiwgInZhciBEYXRhVmlldyA9IHJlcXVpcmUoJy4vX0RhdGFWaWV3JyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgUHJvbWlzZSA9IHJlcXVpcmUoJy4vX1Byb21pc2UnKSxcbiAgICBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpLFxuICAgIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFRhZztcbiIsICJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBlcXVhbEJ5VGFnID0gcmVxdWlyZSgnLi9fZXF1YWxCeVRhZycpLFxuICAgIGVxdWFsT2JqZWN0cyA9IHJlcXVpcmUoJy4vX2VxdWFsT2JqZWN0cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbERlZXA7XG4iLCAidmFyIGJhc2VJc0VxdWFsRGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsRGVlcCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNFcXVhbGAgd2hpY2ggc3VwcG9ydHMgcGFydGlhbCBjb21wYXJpc29uc1xuICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFpc09iamVjdExpa2UodmFsdWUpICYmICFpc09iamVjdExpa2Uob3RoZXIpKSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xuICB9XG4gIHJldHVybiBiYXNlSXNFcXVhbERlZXAodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsO1xuIiwgInZhciBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyk7XG5cbi8qKlxuICogUGVyZm9ybXMgYSBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZVxuICogZXF1aXZhbGVudC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2Qgc3VwcG9ydHMgY29tcGFyaW5nIGFycmF5cywgYXJyYXkgYnVmZmVycywgYm9vbGVhbnMsXG4gKiBkYXRlIG9iamVjdHMsIGVycm9yIG9iamVjdHMsIG1hcHMsIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsXG4gKiBzZXRzLCBzdHJpbmdzLCBzeW1ib2xzLCBhbmQgdHlwZWQgYXJyYXlzLiBgT2JqZWN0YCBvYmplY3RzIGFyZSBjb21wYXJlZFxuICogYnkgdGhlaXIgb3duLCBub3QgaW5oZXJpdGVkLCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuIEZ1bmN0aW9ucyBhbmQgRE9NXG4gKiBub2RlcyBhcmUgY29tcGFyZWQgYnkgc3RyaWN0IGVxdWFsaXR5LCBpLmUuIGA9PT1gLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmlzRXF1YWwob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogb2JqZWN0ID09PSBvdGhlcjtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRXF1YWwodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRXF1YWw7XG4iLCAiLy8hIG1vbWVudC5qc1xuLy8hIHZlcnNpb24gOiAyLjMwLjFcbi8vISBhdXRob3JzIDogVGltIFdvb2QsIElza3JlbiBDaGVybmV2LCBNb21lbnQuanMgY29udHJpYnV0b3JzXG4vLyEgbGljZW5zZSA6IE1JVFxuLy8hIG1vbWVudGpzLmNvbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICBnbG9iYWwubW9tZW50ID0gZmFjdG9yeSgpXG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBob29rQ2FsbGJhY2s7XG5cbiAgICBmdW5jdGlvbiBob29rcygpIHtcbiAgICAgICAgcmV0dXJuIGhvb2tDYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgZG9uZSB0byByZWdpc3RlciB0aGUgbWV0aG9kIGNhbGxlZCB3aXRoIG1vbWVudCgpXG4gICAgLy8gd2l0aG91dCBjcmVhdGluZyBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG4gICAgZnVuY3Rpb24gc2V0SG9va0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICAgIGhvb2tDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXJyYXkoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgQXJyYXkgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEFycmF5XSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09iamVjdChpbnB1dCkge1xuICAgICAgICAvLyBJRTggd2lsbCB0cmVhdCB1bmRlZmluZWQgYW5kIG51bGwgYXMgb2JqZWN0IGlmIGl0IHdhc24ndCBmb3JcbiAgICAgICAgLy8gaW5wdXQgIT0gbnVsbFxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgIT0gbnVsbCAmJlxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNPd25Qcm9wKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCBiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrO1xuICAgICAgICAgICAgZm9yIChrIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVbmRlZmluZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09PSB2b2lkIDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE51bWJlcl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXRlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IERhdGVdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcChhcnIsIGZuKSB7XG4gICAgICAgIHZhciByZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBhcnJMZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJyTGVuOyArK2kpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKGZuKGFycltpXSwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZW5kKGEsIGIpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBiKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChiLCBpKSkge1xuICAgICAgICAgICAgICAgIGFbaV0gPSBiW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3RvU3RyaW5nJykpIHtcbiAgICAgICAgICAgIGEudG9TdHJpbmcgPSBiLnRvU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3ZhbHVlT2YnKSkge1xuICAgICAgICAgICAgYS52YWx1ZU9mID0gYi52YWx1ZU9mO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCB0cnVlKS51dGMoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZhdWx0UGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGRlZXAgY2xvbmUgdGhpcyBvYmplY3QuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbXB0eTogZmFsc2UsXG4gICAgICAgICAgICB1bnVzZWRUb2tlbnM6IFtdLFxuICAgICAgICAgICAgdW51c2VkSW5wdXQ6IFtdLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IC0yLFxuICAgICAgICAgICAgY2hhcnNMZWZ0T3ZlcjogMCxcbiAgICAgICAgICAgIG51bGxJbnB1dDogZmFsc2UsXG4gICAgICAgICAgICBpbnZhbGlkRXJhOiBudWxsLFxuICAgICAgICAgICAgaW52YWxpZE1vbnRoOiBudWxsLFxuICAgICAgICAgICAgaW52YWxpZEZvcm1hdDogZmFsc2UsXG4gICAgICAgICAgICB1c2VySW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNvOiBmYWxzZSxcbiAgICAgICAgICAgIHBhcnNlZERhdGVQYXJ0czogW10sXG4gICAgICAgICAgICBlcmE6IG51bGwsXG4gICAgICAgICAgICBtZXJpZGllbTogbnVsbCxcbiAgICAgICAgICAgIHJmYzI4MjI6IGZhbHNlLFxuICAgICAgICAgICAgd2Vla2RheU1pc21hdGNoOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzaW5nRmxhZ3MobSkge1xuICAgICAgICBpZiAobS5fcGYgPT0gbnVsbCkge1xuICAgICAgICAgICAgbS5fcGYgPSBkZWZhdWx0UGFyc2luZ0ZsYWdzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX3BmO1xuICAgIH1cblxuICAgIHZhciBzb21lO1xuICAgIGlmIChBcnJheS5wcm90b3R5cGUuc29tZSkge1xuICAgICAgICBzb21lID0gQXJyYXkucHJvdG90eXBlLnNvbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc29tZSA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICAgICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpLFxuICAgICAgICAgICAgICAgIGxlbiA9IHQubGVuZ3RoID4+PiAwLFxuICAgICAgICAgICAgICAgIGk7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpIGluIHQgJiYgZnVuLmNhbGwodGhpcywgdFtpXSwgaSwgdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZChtKSB7XG4gICAgICAgIHZhciBmbGFncyA9IG51bGwsXG4gICAgICAgICAgICBwYXJzZWRQYXJ0cyA9IGZhbHNlLFxuICAgICAgICAgICAgaXNOb3dWYWxpZCA9IG0uX2QgJiYgIWlzTmFOKG0uX2QuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKGlzTm93VmFsaWQpIHtcbiAgICAgICAgICAgIGZsYWdzID0gZ2V0UGFyc2luZ0ZsYWdzKG0pO1xuICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBzb21lLmNhbGwoZmxhZ3MucGFyc2VkRGF0ZVBhcnRzLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpICE9IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlzTm93VmFsaWQgPVxuICAgICAgICAgICAgICAgIGZsYWdzLm92ZXJmbG93IDwgMCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5lbXB0eSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRXJhICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRNb250aCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkV2Vla2RheSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy53ZWVrZGF5TWlzbWF0Y2ggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MubnVsbElucHV0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRGb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MudXNlckludmFsaWRhdGVkICYmXG4gICAgICAgICAgICAgICAgKCFmbGFncy5tZXJpZGllbSB8fCAoZmxhZ3MubWVyaWRpZW0gJiYgcGFyc2VkUGFydHMpKTtcbiAgICAgICAgICAgIGlmIChtLl9zdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICAgICAgaXNOb3dWYWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5jaGFyc0xlZnRPdmVyID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLnVudXNlZFRva2Vucy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYmlnSG91ciA9PT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QuaXNGcm96ZW4gPT0gbnVsbCB8fCAhT2JqZWN0LmlzRnJvemVuKG0pKSB7XG4gICAgICAgICAgICBtLl9pc1ZhbGlkID0gaXNOb3dWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc05vd1ZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmFsaWQoZmxhZ3MpIHtcbiAgICAgICAgdmFyIG0gPSBjcmVhdGVVVEMoTmFOKTtcbiAgICAgICAgaWYgKGZsYWdzICE9IG51bGwpIHtcbiAgICAgICAgICAgIGV4dGVuZChnZXRQYXJzaW5nRmxhZ3MobSksIGZsYWdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS51c2VySW52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gUGx1Z2lucyB0aGF0IGFkZCBwcm9wZXJ0aWVzIHNob3VsZCBhbHNvIGFkZCB0aGUga2V5IGhlcmUgKG51bGwgdmFsdWUpLFxuICAgIC8vIHNvIHdlIGNhbiBwcm9wZXJseSBjbG9uZSBvdXJzZWx2ZXMuXG4gICAgdmFyIG1vbWVudFByb3BlcnRpZXMgPSAoaG9va3MubW9tZW50UHJvcGVydGllcyA9IFtdKSxcbiAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gY29weUNvbmZpZyh0bywgZnJvbSkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIHByb3AsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBtb21lbnRQcm9wZXJ0aWVzTGVuID0gbW9tZW50UHJvcGVydGllcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pc0FNb21lbnRPYmplY3QpKSB7XG4gICAgICAgICAgICB0by5faXNBTW9tZW50T2JqZWN0ID0gZnJvbS5faXNBTW9tZW50T2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faSkpIHtcbiAgICAgICAgICAgIHRvLl9pID0gZnJvbS5faTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2YpKSB7XG4gICAgICAgICAgICB0by5fZiA9IGZyb20uX2Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sKSkge1xuICAgICAgICAgICAgdG8uX2wgPSBmcm9tLl9sO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fc3RyaWN0KSkge1xuICAgICAgICAgICAgdG8uX3N0cmljdCA9IGZyb20uX3N0cmljdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3R6bSkpIHtcbiAgICAgICAgICAgIHRvLl90em0gPSBmcm9tLl90em07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pc1VUQykpIHtcbiAgICAgICAgICAgIHRvLl9pc1VUQyA9IGZyb20uX2lzVVRDO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fb2Zmc2V0KSkge1xuICAgICAgICAgICAgdG8uX29mZnNldCA9IGZyb20uX29mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3BmKSkge1xuICAgICAgICAgICAgdG8uX3BmID0gZ2V0UGFyc2luZ0ZsYWdzKGZyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbG9jYWxlKSkge1xuICAgICAgICAgICAgdG8uX2xvY2FsZSA9IGZyb20uX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb21lbnRQcm9wZXJ0aWVzTGVuID4gMCkge1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1vbWVudFByb3BlcnRpZXNMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHByb3AgPSBtb21lbnRQcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgICAgIHZhbCA9IGZyb21bcHJvcF07XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0bztcbiAgICB9XG5cbiAgICAvLyBNb21lbnQgcHJvdG90eXBlIG9iamVjdFxuICAgIGZ1bmN0aW9uIE1vbWVudChjb25maWcpIHtcbiAgICAgICAgY29weUNvbmZpZyh0aGlzLCBjb25maWcpO1xuICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoY29uZmlnLl9kICE9IG51bGwgPyBjb25maWcuX2QuZ2V0VGltZSgpIDogTmFOKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wIGluIGNhc2UgdXBkYXRlT2Zmc2V0IGNyZWF0ZXMgbmV3IG1vbWVudFxuICAgICAgICAvLyBvYmplY3RzLlxuICAgICAgICBpZiAodXBkYXRlSW5Qcm9ncmVzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNNb21lbnQob2JqKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBvYmogaW5zdGFuY2VvZiBNb21lbnQgfHwgKG9iaiAhPSBudWxsICYmIG9iai5faXNBTW9tZW50T2JqZWN0ICE9IG51bGwpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Fybihtc2cpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25zb2xlLndhcm5cbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RlcHJlY2F0aW9uIHdhcm5pbmc6ICcgKyBtc2cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlKG1zZywgZm4pIHtcbiAgICAgICAgdmFyIGZpcnN0VGltZSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobnVsbCwgbXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICAgICAgICAgICAgICBhcmcsXG4gICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgYXJnTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJndW1lbnRzW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9ICdcXG5bJyArIGkgKyAnXSAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gYXJndW1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc093blByb3AoYXJndW1lbnRzWzBdLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSBrZXkgKyAnOiAnICsgYXJndW1lbnRzWzBdW2tleV0gKyAnLCAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5zbGljZSgwLCAtMik7IC8vIFJlbW92ZSB0cmFpbGluZyBjb21tYSBhbmQgc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgICAgICAgbXNnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG5Bcmd1bWVudHM6ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykuam9pbignJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKCkuc3RhY2tcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGZuKTtcbiAgICB9XG5cbiAgICB2YXIgZGVwcmVjYXRpb25zID0ge307XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGVTaW1wbGUobmFtZSwgbXNnKSB7XG4gICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG5hbWUsIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZXByZWNhdGlvbnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHdhcm4obXNnKTtcbiAgICAgICAgICAgIGRlcHJlY2F0aW9uc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPSBmYWxzZTtcbiAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHR5cGVvZiBGdW5jdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgaW5wdXQgaW5zdGFuY2VvZiBGdW5jdGlvbikgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQoY29uZmlnKSB7XG4gICAgICAgIHZhciBwcm9wLCBpO1xuICAgICAgICBmb3IgKGkgaW4gY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChjb25maWcsIGkpKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IGNvbmZpZ1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW2ldID0gcHJvcDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzWydfJyArIGldID0gcHJvcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICAgICAgICAvLyBMZW5pZW50IG9yZGluYWwgcGFyc2luZyBhY2NlcHRzIGp1c3QgYSBudW1iZXIgaW4gYWRkaXRpb24gdG9cbiAgICAgICAgLy8gbnVtYmVyICsgKHBvc3NpYmx5KSBzdHVmZiBjb21pbmcgZnJvbSBfZGF5T2ZNb250aE9yZGluYWxQYXJzZS5cbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICB0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2UgfHwgdGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSkgK1xuICAgICAgICAgICAgICAgICd8JyArXG4gICAgICAgICAgICAgICAgL1xcZHsxLDJ9Ly5zb3VyY2VcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjaGlsZENvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gZXh0ZW5kKHt9LCBwYXJlbnRDb25maWcpLFxuICAgICAgICAgICAgcHJvcDtcbiAgICAgICAgZm9yIChwcm9wIGluIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKSAmJiBpc09iamVjdChjaGlsZENvbmZpZ1twcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW3Byb3BdID0ge307XG4gICAgICAgICAgICAgICAgICAgIGV4dGVuZChyZXNbcHJvcF0sIHBhcmVudENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgICAgIGV4dGVuZChyZXNbcHJvcF0sIGNoaWxkQ29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkQ29uZmlnW3Byb3BdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gY2hpbGRDb25maWdbcHJvcF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlc1twcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChwcm9wIGluIHBhcmVudENvbmZpZykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AocGFyZW50Q29uZmlnLCBwcm9wKSAmJlxuICAgICAgICAgICAgICAgICFoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSAmJlxuICAgICAgICAgICAgICAgIGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBjaGFuZ2VzIHRvIHByb3BlcnRpZXMgZG9uJ3QgbW9kaWZ5IHBhcmVudCBjb25maWdcbiAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBleHRlbmQoe30sIHJlc1twcm9wXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBMb2NhbGUoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZXQoY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKSB7XG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cztcbiAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAgcmVzID0gW107XG4gICAgICAgICAgICBmb3IgKGkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0Q2FsZW5kYXIgPSB7XG4gICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyKGtleSwgbW9tLCBub3cpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX2NhbGVuZGFyW2tleV0gfHwgdGhpcy5fY2FsZW5kYXJbJ3NhbWVFbHNlJ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dCkgPyBvdXRwdXQuY2FsbChtb20sIG5vdykgOiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gemVyb0ZpbGwobnVtYmVyLCB0YXJnZXRMZW5ndGgsIGZvcmNlU2lnbikge1xuICAgICAgICB2YXIgYWJzTnVtYmVyID0gJycgKyBNYXRoLmFicyhudW1iZXIpLFxuICAgICAgICAgICAgemVyb3NUb0ZpbGwgPSB0YXJnZXRMZW5ndGggLSBhYnNOdW1iZXIubGVuZ3RoLFxuICAgICAgICAgICAgc2lnbiA9IG51bWJlciA+PSAwO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHNpZ24gPyAoZm9yY2VTaWduID8gJysnIDogJycpIDogJy0nKSArXG4gICAgICAgICAgICBNYXRoLnBvdygxMCwgTWF0aC5tYXgoMCwgemVyb3NUb0ZpbGwpKS50b1N0cmluZygpLnN1YnN0cigxKSArXG4gICAgICAgICAgICBhYnNOdW1iZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgZm9ybWF0dGluZ1Rva2VucyA9XG4gICAgICAgICAgICAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fE57MSw1fXxZWVlZWVl8WVlZWVl8WVlZWXxZWXx5ezIsNH18eW8/fGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nLFxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLFxuICAgICAgICBmb3JtYXRGdW5jdGlvbnMgPSB7fSxcbiAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnMgPSB7fTtcblxuICAgIC8vIHRva2VuOiAgICAnTSdcbiAgICAvLyBwYWRkZWQ6ICAgWydNTScsIDJdXG4gICAgLy8gb3JkaW5hbDogICdNbydcbiAgICAvLyBjYWxsYmFjazogZnVuY3Rpb24gKCkgeyB0aGlzLm1vbnRoKCkgKyAxIH1cbiAgICBmdW5jdGlvbiBhZGRGb3JtYXRUb2tlbih0b2tlbiwgcGFkZGVkLCBvcmRpbmFsLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZnVuYyA9IGNhbGxiYWNrO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tjYWxsYmFja10oKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWRkZWQpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3BhZGRlZFswXV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHplcm9GaWxsKGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgcGFkZGVkWzFdLCBwYWRkZWRbMl0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3JkaW5hbCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbb3JkaW5hbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwoXG4gICAgICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0Lm1hdGNoKC9cXFtbXFxzXFxTXS8pKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXlxcW3xcXF0kL2csICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXFxcXC9nLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICB2YXIgYXJyYXkgPSBmb3JtYXQubWF0Y2goZm9ybWF0dGluZ1Rva2VucyksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhhcnJheVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG1vbSkge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9ICcnLFxuICAgICAgICAgICAgICAgIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gaXNGdW5jdGlvbihhcnJheVtpXSlcbiAgICAgICAgICAgICAgICAgICAgPyBhcnJheVtpXS5jYWxsKG1vbSwgZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICA6IGFycmF5W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBmb3JtYXQgZGF0ZSB1c2luZyBuYXRpdmUgZGF0ZSBvYmplY3RcbiAgICBmdW5jdGlvbiBmb3JtYXRNb21lbnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbS5sb2NhbGVEYXRhKCkpO1xuICAgICAgICBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XSA9XG4gICAgICAgICAgICBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XSB8fCBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KTtcblxuICAgICAgICByZXR1cm4gZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0obSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbG9jYWxlKSB7XG4gICAgICAgIHZhciBpID0gNTtcblxuICAgICAgICBmdW5jdGlvbiByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnMoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubG9uZ0RhdGVGb3JtYXQoaW5wdXQpIHx8IGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChpID49IDAgJiYgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2Vuc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvbmdEYXRlRm9ybWF0ID0ge1xuICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgIEw6ICdNTS9ERC9ZWVlZJyxcbiAgICAgICAgTEw6ICdNTU1NIEQsIFlZWVknLFxuICAgICAgICBMTEw6ICdNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb25nRGF0ZUZvcm1hdChrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0sXG4gICAgICAgICAgICBmb3JtYXRVcHBlciA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleS50b1VwcGVyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoZm9ybWF0IHx8ICFmb3JtYXRVcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0gPSBmb3JtYXRVcHBlclxuICAgICAgICAgICAgLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh0b2spIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ01NTU0nIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ01NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdERCcgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnZGRkZCdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvay5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvaztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignJyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRJbnZhbGlkRGF0ZSA9ICdJbnZhbGlkIGRhdGUnO1xuXG4gICAgZnVuY3Rpb24gaW52YWxpZERhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZhbGlkRGF0ZTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdE9yZGluYWwgPSAnJWQnLFxuICAgICAgICBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSA9IC9cXGR7MSwyfS87XG5cbiAgICBmdW5jdGlvbiBvcmRpbmFsKG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCclZCcsIG51bWJlcik7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRSZWxhdGl2ZVRpbWUgPSB7XG4gICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgdzogJ2Egd2VlaycsXG4gICAgICAgIHd3OiAnJWQgd2Vla3MnLFxuICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgeTogJ2EgeWVhcicsXG4gICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbc3RyaW5nXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KVxuICAgICAgICAgICAgPyBvdXRwdXQobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKVxuICAgICAgICAgICAgOiBvdXRwdXQucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXN0RnV0dXJlKGRpZmYsIG91dHB1dCkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW2RpZmYgPiAwID8gJ2Z1dHVyZScgOiAncGFzdCddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihmb3JtYXQpID8gZm9ybWF0KG91dHB1dCkgOiBmb3JtYXQucmVwbGFjZSgvJXMvaSwgb3V0cHV0KTtcbiAgICB9XG5cbiAgICB2YXIgYWxpYXNlcyA9IHtcbiAgICAgICAgRDogJ2RhdGUnLFxuICAgICAgICBkYXRlczogJ2RhdGUnLFxuICAgICAgICBkYXRlOiAnZGF0ZScsXG4gICAgICAgIGQ6ICdkYXknLFxuICAgICAgICBkYXlzOiAnZGF5JyxcbiAgICAgICAgZGF5OiAnZGF5JyxcbiAgICAgICAgZTogJ3dlZWtkYXknLFxuICAgICAgICB3ZWVrZGF5czogJ3dlZWtkYXknLFxuICAgICAgICB3ZWVrZGF5OiAnd2Vla2RheScsXG4gICAgICAgIEU6ICdpc29XZWVrZGF5JyxcbiAgICAgICAgaXNvd2Vla2RheXM6ICdpc29XZWVrZGF5JyxcbiAgICAgICAgaXNvd2Vla2RheTogJ2lzb1dlZWtkYXknLFxuICAgICAgICBEREQ6ICdkYXlPZlllYXInLFxuICAgICAgICBkYXlvZnllYXJzOiAnZGF5T2ZZZWFyJyxcbiAgICAgICAgZGF5b2Z5ZWFyOiAnZGF5T2ZZZWFyJyxcbiAgICAgICAgaDogJ2hvdXInLFxuICAgICAgICBob3VyczogJ2hvdXInLFxuICAgICAgICBob3VyOiAnaG91cicsXG4gICAgICAgIG1zOiAnbWlsbGlzZWNvbmQnLFxuICAgICAgICBtaWxsaXNlY29uZHM6ICdtaWxsaXNlY29uZCcsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAnbWlsbGlzZWNvbmQnLFxuICAgICAgICBtOiAnbWludXRlJyxcbiAgICAgICAgbWludXRlczogJ21pbnV0ZScsXG4gICAgICAgIG1pbnV0ZTogJ21pbnV0ZScsXG4gICAgICAgIE06ICdtb250aCcsXG4gICAgICAgIG1vbnRoczogJ21vbnRoJyxcbiAgICAgICAgbW9udGg6ICdtb250aCcsXG4gICAgICAgIFE6ICdxdWFydGVyJyxcbiAgICAgICAgcXVhcnRlcnM6ICdxdWFydGVyJyxcbiAgICAgICAgcXVhcnRlcjogJ3F1YXJ0ZXInLFxuICAgICAgICBzOiAnc2Vjb25kJyxcbiAgICAgICAgc2Vjb25kczogJ3NlY29uZCcsXG4gICAgICAgIHNlY29uZDogJ3NlY29uZCcsXG4gICAgICAgIGdnOiAnd2Vla1llYXInLFxuICAgICAgICB3ZWVreWVhcnM6ICd3ZWVrWWVhcicsXG4gICAgICAgIHdlZWt5ZWFyOiAnd2Vla1llYXInLFxuICAgICAgICBHRzogJ2lzb1dlZWtZZWFyJyxcbiAgICAgICAgaXNvd2Vla3llYXJzOiAnaXNvV2Vla1llYXInLFxuICAgICAgICBpc293ZWVreWVhcjogJ2lzb1dlZWtZZWFyJyxcbiAgICAgICAgdzogJ3dlZWsnLFxuICAgICAgICB3ZWVrczogJ3dlZWsnLFxuICAgICAgICB3ZWVrOiAnd2VlaycsXG4gICAgICAgIFc6ICdpc29XZWVrJyxcbiAgICAgICAgaXNvd2Vla3M6ICdpc29XZWVrJyxcbiAgICAgICAgaXNvd2VlazogJ2lzb1dlZWsnLFxuICAgICAgICB5OiAneWVhcicsXG4gICAgICAgIHllYXJzOiAneWVhcicsXG4gICAgICAgIHllYXI6ICd5ZWFyJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplVW5pdHModW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB1bml0cyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gYWxpYXNlc1t1bml0c10gfHwgYWxpYXNlc1t1bml0cy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplT2JqZWN0VW5pdHMoaW5wdXRPYmplY3QpIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IHt9LFxuICAgICAgICAgICAgbm9ybWFsaXplZFByb3AsXG4gICAgICAgICAgICBwcm9wO1xuXG4gICAgICAgIGZvciAocHJvcCBpbiBpbnB1dE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoaW5wdXRPYmplY3QsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFByb3AgPSBub3JtYWxpemVVbml0cyhwcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZElucHV0W25vcm1hbGl6ZWRQcm9wXSA9IGlucHV0T2JqZWN0W3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub3JtYWxpemVkSW5wdXQ7XG4gICAgfVxuXG4gICAgdmFyIHByaW9yaXRpZXMgPSB7XG4gICAgICAgIGRhdGU6IDksXG4gICAgICAgIGRheTogMTEsXG4gICAgICAgIHdlZWtkYXk6IDExLFxuICAgICAgICBpc29XZWVrZGF5OiAxMSxcbiAgICAgICAgZGF5T2ZZZWFyOiA0LFxuICAgICAgICBob3VyOiAxMyxcbiAgICAgICAgbWlsbGlzZWNvbmQ6IDE2LFxuICAgICAgICBtaW51dGU6IDE0LFxuICAgICAgICBtb250aDogOCxcbiAgICAgICAgcXVhcnRlcjogNyxcbiAgICAgICAgc2Vjb25kOiAxNSxcbiAgICAgICAgd2Vla1llYXI6IDEsXG4gICAgICAgIGlzb1dlZWtZZWFyOiAxLFxuICAgICAgICB3ZWVrOiA1LFxuICAgICAgICBpc29XZWVrOiA1LFxuICAgICAgICB5ZWFyOiAxLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzT2JqKSB7XG4gICAgICAgIHZhciB1bml0cyA9IFtdLFxuICAgICAgICAgICAgdTtcbiAgICAgICAgZm9yICh1IGluIHVuaXRzT2JqKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcCh1bml0c09iaiwgdSkpIHtcbiAgICAgICAgICAgICAgICB1bml0cy5wdXNoKHsgdW5pdDogdSwgcHJpb3JpdHk6IHByaW9yaXRpZXNbdV0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVuaXRzO1xuICAgIH1cblxuICAgIHZhciBtYXRjaDEgPSAvXFxkLywgLy8gICAgICAgMCAtIDlcbiAgICAgICAgbWF0Y2gyID0gL1xcZFxcZC8sIC8vICAgICAgMDAgLSA5OVxuICAgICAgICBtYXRjaDMgPSAvXFxkezN9LywgLy8gICAgIDAwMCAtIDk5OVxuICAgICAgICBtYXRjaDQgPSAvXFxkezR9LywgLy8gICAgMDAwMCAtIDk5OTlcbiAgICAgICAgbWF0Y2g2ID0gL1srLV0/XFxkezZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzIgPSAvXFxkXFxkPy8sIC8vICAgICAgIDAgLSA5OVxuICAgICAgICBtYXRjaDN0bzQgPSAvXFxkXFxkXFxkXFxkPy8sIC8vICAgICA5OTkgLSA5OTk5XG4gICAgICAgIG1hdGNoNXRvNiA9IC9cXGRcXGRcXGRcXGRcXGRcXGQ/LywgLy8gICA5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzMgPSAvXFxkezEsM30vLCAvLyAgICAgICAwIC0gOTk5XG4gICAgICAgIG1hdGNoMXRvNCA9IC9cXGR7MSw0fS8sIC8vICAgICAgIDAgLSA5OTk5XG4gICAgICAgIG1hdGNoMXRvNiA9IC9bKy1dP1xcZHsxLDZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaFVuc2lnbmVkID0gL1xcZCsvLCAvLyAgICAgICAwIC0gaW5mXG4gICAgICAgIG1hdGNoU2lnbmVkID0gL1srLV0/XFxkKy8sIC8vICAgIC1pbmYgLSBpbmZcbiAgICAgICAgbWF0Y2hPZmZzZXQgPSAvWnxbKy1dXFxkXFxkOj9cXGRcXGQvZ2ksIC8vICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFNob3J0T2Zmc2V0ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vZ2ksIC8vICswMCAtMDAgKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoVGltZXN0YW1wID0gL1srLV0/XFxkKyhcXC5cXGR7MSwzfSk/LywgLy8gMTIzNDU2Nzg5IDEyMzQ1Njc4OS4xMjNcbiAgICAgICAgLy8gYW55IHdvcmQgKG9yIHR3bykgY2hhcmFjdGVycyBvciBudW1iZXJzIGluY2x1ZGluZyB0d28vdGhyZWUgd29yZCBtb250aCBpbiBhcmFiaWMuXG4gICAgICAgIC8vIGluY2x1ZGVzIHNjb3R0aXNoIGdhZWxpYyB0d28gd29yZCBhbmQgaHlwaGVuYXRlZCBtb250aHNcbiAgICAgICAgbWF0Y2hXb3JkID1cbiAgICAgICAgICAgIC9bMC05XXswLDI1Nn1bJ2EtelxcdTAwQTAtXFx1MDVGRlxcdTA3MDAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkYwN1xcdUZGMTAtXFx1RkZFRl17MSwyNTZ9fFtcXHUwNjAwLVxcdTA2RkZcXC9dezEsMjU2fShcXHMqP1tcXHUwNjAwLVxcdTA2RkZdezEsMjU2fSl7MSwyfS9pLFxuICAgICAgICBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvID0gL15bMS05XVxcZD8vLCAvLyAgICAgICAgIDEtOTlcbiAgICAgICAgbWF0Y2gxdG8ySGFzWmVybyA9IC9eKFsxLTldXFxkfFxcZCkvLCAvLyAgICAgICAgICAgMC05OVxuICAgICAgICByZWdleGVzO1xuXG4gICAgcmVnZXhlcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUmVnZXhUb2tlbih0b2tlbiwgcmVnZXgsIHN0cmljdFJlZ2V4KSB7XG4gICAgICAgIHJlZ2V4ZXNbdG9rZW5dID0gaXNGdW5jdGlvbihyZWdleClcbiAgICAgICAgICAgID8gcmVnZXhcbiAgICAgICAgICAgIDogZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXNTdHJpY3QgJiYgc3RyaWN0UmVnZXggPyBzdHJpY3RSZWdleCA6IHJlZ2V4O1xuICAgICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcChyZWdleGVzLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHVuZXNjYXBlRm9ybWF0KHRva2VuKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVnZXhlc1t0b2tlbl0oY29uZmlnLl9zdHJpY3QsIGNvbmZpZy5fbG9jYWxlKTtcbiAgICB9XG5cbiAgICAvLyBDb2RlIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTYxNDkzL2lzLXRoZXJlLWEtcmVnZXhwLWVzY2FwZS1mdW5jdGlvbi1pbi1qYXZhc2NyaXB0XG4gICAgZnVuY3Rpb24gdW5lc2NhcGVGb3JtYXQocykge1xuICAgICAgICByZXR1cm4gcmVnZXhFc2NhcGUoXG4gICAgICAgICAgICBzXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xcXFwnLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgL1xcXFwoXFxbKXxcXFxcKFxcXSl8XFxbKFteXFxdXFxbXSopXFxdfFxcXFwoLikvZyxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKG1hdGNoZWQsIHAxLCBwMiwgcDMsIHA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcDEgfHwgcDIgfHwgcDMgfHwgcDQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVnZXhFc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNGbG9vcihudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIC8vIC0wIC0+IDBcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKSB8fCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSW50KGFyZ3VtZW50Rm9yQ29lcmNpb24pIHtcbiAgICAgICAgdmFyIGNvZXJjZWROdW1iZXIgPSArYXJndW1lbnRGb3JDb2VyY2lvbixcbiAgICAgICAgICAgIHZhbHVlID0gMDtcblxuICAgICAgICBpZiAoY29lcmNlZE51bWJlciAhPT0gMCAmJiBpc0Zpbml0ZShjb2VyY2VkTnVtYmVyKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBhYnNGbG9vcihjb2VyY2VkTnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5zID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGZ1bmMgPSBjYWxsYmFjayxcbiAgICAgICAgICAgIHRva2VuTGVuO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdG9rZW4gPSBbdG9rZW5dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc051bWJlcihjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbY2FsbGJhY2tdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0b2tlbkxlbiA9IHRva2VuLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2VuTGVuOyBpKyspIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbltpXV0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1BhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGFkZFBhcnNlVG9rZW4odG9rZW4sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIGNvbmZpZy5fdyA9IGNvbmZpZy5fdyB8fCB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGlucHV0LCBjb25maWcuX3csIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgaW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBoYXNPd25Qcm9wKHRva2VucywgdG9rZW4pKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5dKGlucHV0LCBjb25maWcuX2EsIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCkgfHwgeWVhciAlIDQwMCA9PT0gMDtcbiAgICB9XG5cbiAgICB2YXIgWUVBUiA9IDAsXG4gICAgICAgIE1PTlRIID0gMSxcbiAgICAgICAgREFURSA9IDIsXG4gICAgICAgIEhPVVIgPSAzLFxuICAgICAgICBNSU5VVEUgPSA0LFxuICAgICAgICBTRUNPTkQgPSA1LFxuICAgICAgICBNSUxMSVNFQ09ORCA9IDYsXG4gICAgICAgIFdFRUsgPSA3LFxuICAgICAgICBXRUVLREFZID0gODtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdZJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgeSA9IHRoaXMueWVhcigpO1xuICAgICAgICByZXR1cm4geSA8PSA5OTk5ID8gemVyb0ZpbGwoeSwgNCkgOiAnKycgKyB5O1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWScsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWScsIDRdLCAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVknLCA1XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZWScsIDYsIHRydWVdLCAwLCAneWVhcicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWScsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdZWScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydZWVlZWScsICdZWVlZWVknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbignWVlZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPVxuICAgICAgICAgICAgaW5wdXQubGVuZ3RoID09PSAyID8gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpIDogdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBkYXlzSW5ZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIoeWVhcikgPyAzNjYgOiAzNjU7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0b0ludChpbnB1dCkgKyAodG9JbnQoaW5wdXQpID4gNjggPyAxOTAwIDogMjAwMCk7XG4gICAgfTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRZZWFyID0gbWFrZUdldFNldCgnRnVsbFllYXInLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGdldElzTGVhcFllYXIoKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHRoaXMueWVhcigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0U2V0KHVuaXQsIGtlZXBUaW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2V0JDEodGhpcywgdW5pdCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0KG1vbSwgdW5pdCkge1xuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZCA9IG1vbS5fZCxcbiAgICAgICAgICAgIGlzVVRDID0gbW9tLl9pc1VUQztcblxuICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgICAgICAgIGNhc2UgJ01pbGxpc2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENNaWxsaXNlY29uZHMoKSA6IGQuZ2V0TWlsbGlzZWNvbmRzKCk7XG4gICAgICAgICAgICBjYXNlICdTZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ1NlY29uZHMoKSA6IGQuZ2V0U2Vjb25kcygpO1xuICAgICAgICAgICAgY2FzZSAnTWludXRlcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENNaW51dGVzKCkgOiBkLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgICAgIGNhc2UgJ0hvdXJzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ0hvdXJzKCkgOiBkLmdldEhvdXJzKCk7XG4gICAgICAgICAgICBjYXNlICdEYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ0RhdGUoKSA6IGQuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgY2FzZSAnRGF5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ0RheSgpIDogZC5nZXREYXkoKTtcbiAgICAgICAgICAgIGNhc2UgJ01vbnRoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ01vbnRoKCkgOiBkLmdldE1vbnRoKCk7XG4gICAgICAgICAgICBjYXNlICdGdWxsWWVhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENGdWxsWWVhcigpIDogZC5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gTmFOOyAvLyBKdXN0IGluIGNhc2VcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldCQxKG1vbSwgdW5pdCwgdmFsdWUpIHtcbiAgICAgICAgdmFyIGQsIGlzVVRDLCB5ZWFyLCBtb250aCwgZGF0ZTtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkgfHwgaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBkID0gbW9tLl9kO1xuICAgICAgICBpc1VUQyA9IG1vbS5faXNVVEM7XG5cbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdNaWxsaXNlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQ1xuICAgICAgICAgICAgICAgICAgICA/IGQuc2V0VVRDTWlsbGlzZWNvbmRzKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA6IGQuc2V0TWlsbGlzZWNvbmRzKHZhbHVlKSk7XG4gICAgICAgICAgICBjYXNlICdTZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ1NlY29uZHModmFsdWUpIDogZC5zZXRTZWNvbmRzKHZhbHVlKSk7XG4gICAgICAgICAgICBjYXNlICdNaW51dGVzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ01pbnV0ZXModmFsdWUpIDogZC5zZXRNaW51dGVzKHZhbHVlKSk7XG4gICAgICAgICAgICBjYXNlICdIb3Vycyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENIb3Vycyh2YWx1ZSkgOiBkLnNldEhvdXJzKHZhbHVlKSk7XG4gICAgICAgICAgICBjYXNlICdEYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ0RhdGUodmFsdWUpIDogZC5zZXREYXRlKHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBjYXNlICdEYXknOiAvLyBOb3QgcmVhbFxuICAgICAgICAgICAgLy8gICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENEYXkodmFsdWUpIDogZC5zZXREYXkodmFsdWUpKTtcbiAgICAgICAgICAgIC8vIGNhc2UgJ01vbnRoJzogLy8gTm90IHVzZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHBhc3MgdHdvIHZhcmlhYmxlc1xuICAgICAgICAgICAgLy8gICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDTW9udGgodmFsdWUpIDogZC5zZXRNb250aCh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnRnVsbFllYXInOlxuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBTZWUgYmVsb3cgLi4uXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gSnVzdCBpbiBjYXNlXG4gICAgICAgIH1cblxuICAgICAgICB5ZWFyID0gdmFsdWU7XG4gICAgICAgIG1vbnRoID0gbW9tLm1vbnRoKCk7XG4gICAgICAgIGRhdGUgPSBtb20uZGF0ZSgpO1xuICAgICAgICBkYXRlID0gZGF0ZSA9PT0gMjkgJiYgbW9udGggPT09IDEgJiYgIWlzTGVhcFllYXIoeWVhcikgPyAyOCA6IGRhdGU7XG4gICAgICAgIHZvaWQgKGlzVVRDXG4gICAgICAgICAgICA/IGQuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgsIGRhdGUpXG4gICAgICAgICAgICA6IGQuc2V0RnVsbFllYXIoeWVhciwgbW9udGgsIGRhdGUpKTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzdHJpbmdHZXQodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RyaW5nU2V0KHVuaXRzLCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHVuaXRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVPYmplY3RVbml0cyh1bml0cyk7XG4gICAgICAgICAgICB2YXIgcHJpb3JpdGl6ZWQgPSBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzKSxcbiAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgIHByaW9yaXRpemVkTGVuID0gcHJpb3JpdGl6ZWQubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHByaW9yaXRpemVkTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzW3ByaW9yaXRpemVkW2ldLnVuaXRdKHVuaXRzW3ByaW9yaXRpemVkW2ldLnVuaXRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb2QobiwgeCkge1xuICAgICAgICByZXR1cm4gKChuICUgeCkgKyB4KSAlIHg7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4T2Y7XG5cbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIHtcbiAgICAgICAgaW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGluZGV4T2YgPSBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgLy8gSSBrbm93XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbaV0gPT09IG8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICAgIGlmIChpc05hTih5ZWFyKSB8fCBpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1vZE1vbnRoID0gbW9kKG1vbnRoLCAxMik7XG4gICAgICAgIHllYXIgKz0gKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG4gICAgICAgIHJldHVybiBtb2RNb250aCA9PT0gMVxuICAgICAgICAgICAgPyBpc0xlYXBZZWFyKHllYXIpXG4gICAgICAgICAgICAgICAgPyAyOVxuICAgICAgICAgICAgICAgIDogMjhcbiAgICAgICAgICAgIDogMzEgLSAoKG1vZE1vbnRoICUgNykgJSAyKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignTScsIFsnTU0nLCAyXSwgJ01vJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aCgpICsgMTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ00nLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ00nLCAnTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSB0b0ludChpbnB1dCkgLSAxO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ01NTScsICdNTU1NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1vbnRoID0gY29uZmlnLl9sb2NhbGUubW9udGhzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGEgbW9udGggbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkLlxuICAgICAgICBpZiAobW9udGggIT0gbnVsbCkge1xuICAgICAgICAgICAgYXJyYXlbTU9OVEhdID0gbW9udGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkTW9udGggPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNb250aHMgPVxuICAgICAgICAgICAgJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0ID1cbiAgICAgICAgICAgICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVCA9IC9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/LyxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRNb250aHNSZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRocyhtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1snc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzW20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzW1xuICAgICAgICAgICAgICAgICAgKHRoaXMuX21vbnRocy5pc0Zvcm1hdCB8fCBNT05USFNfSU5fRk9STUFUKS50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1Nob3J0KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0WydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0W20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbXG4gICAgICAgICAgICAgICAgICBNT05USFNfSU5fRk9STUFULnRlc3QoZm9ybWF0KSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSBtb250aE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZFxuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRocyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UuY2FsbCh0aGlzLCBtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IGFkZCBzb3J0aW5nXG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXJcbiAgICAgICAgLy8gc2VlIHNvcnRpbmcgaW4gY29tcHV0ZU1vbnRoc1BhcnNlXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgIXRoaXMuX21vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKSArICd8XicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX21vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc2V0TW9udGgobW9tLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IEFub3RoZXIgc2lsZW50IGZhaWx1cmU/XG4gICAgICAgICAgICAgICAgaWYgKCFpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbW9udGggPSB2YWx1ZSxcbiAgICAgICAgICAgIGRhdGUgPSBtb20uZGF0ZSgpO1xuXG4gICAgICAgIGRhdGUgPSBkYXRlIDwgMjkgPyBkYXRlIDogTWF0aC5taW4oZGF0ZSwgZGF5c0luTW9udGgobW9tLnllYXIoKSwgbW9udGgpKTtcbiAgICAgICAgdm9pZCAobW9tLl9pc1VUQ1xuICAgICAgICAgICAgPyBtb20uX2Quc2V0VVRDTW9udGgobW9udGgsIGRhdGUpXG4gICAgICAgICAgICA6IG1vbS5fZC5zZXRNb250aChtb250aCwgZGF0ZSkpO1xuICAgICAgICByZXR1cm4gbW9tO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldE1vbnRoKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBzZXRNb250aCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgJ01vbnRoJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXlzSW5Nb250aCgpIHtcbiAgICAgICAgcmV0dXJuIGRheXNJbk1vbnRoKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSBkZWZhdWx0TW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gZGVmYXVsdE1vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlTW9udGhzUGFyc2UoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaG9ydFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbG9uZ1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBzaG9ydFAsXG4gICAgICAgICAgICBsb25nUDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBzaG9ydFAgPSByZWdleEVzY2FwZSh0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgICAgIGxvbmdQID0gcmVnZXhFc2NhcGUodGhpcy5tb250aHMobW9tLCAnJykpO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaChzaG9ydFApO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKGxvbmdQKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ1ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChzaG9ydFApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG5cbiAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIGxvbmdQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpIHtcbiAgICAgICAgLy8gY2FuJ3QganVzdCBhcHBseSgpIHRvIGNyZWF0ZSBhIGRhdGU6XG4gICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xODEzNDhcbiAgICAgICAgdmFyIGRhdGU7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSArIDQwMCwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0RnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQ0RhdGUoeSkge1xuICAgICAgICB2YXIgZGF0ZSwgYXJncztcbiAgICAgICAgLy8gdGhlIERhdGUuVVRDIGZ1bmN0aW9uIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSB5ICsgNDAwO1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3MpKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0LW9mLWZpcnN0LXdlZWsgLSBzdGFydC1vZi15ZWFyXG4gICAgZnVuY3Rpb24gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciAvLyBmaXJzdC13ZWVrIGRheSAtLSB3aGljaCBqYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayAoNCBmb3IgaXNvLCAxIGZvciBvdGhlcilcbiAgICAgICAgICAgIGZ3ZCA9IDcgKyBkb3cgLSBkb3ksXG4gICAgICAgICAgICAvLyBmaXJzdC13ZWVrIGRheSBsb2NhbCB3ZWVrZGF5IC0tIHdoaWNoIGxvY2FsIHdlZWtkYXkgaXMgZndkXG4gICAgICAgICAgICBmd2RsdyA9ICg3ICsgY3JlYXRlVVRDRGF0ZSh5ZWFyLCAwLCBmd2QpLmdldFVUQ0RheSgpIC0gZG93KSAlIDc7XG5cbiAgICAgICAgcmV0dXJuIC1md2RsdyArIGZ3ZCAtIDE7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZSNDYWxjdWxhdGluZ19hX2RhdGVfZ2l2ZW5fdGhlX3llYXIuMkNfd2Vla19udW1iZXJfYW5kX3dlZWtkYXlcbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla3MoeWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGxvY2FsV2Vla2RheSA9ICg3ICsgd2Vla2RheSAtIGRvdykgJSA3LFxuICAgICAgICAgICAgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXlPZlllYXIgPSAxICsgNyAqICh3ZWVrIC0gMSkgKyBsb2NhbFdlZWtkYXkgKyB3ZWVrT2Zmc2V0LFxuICAgICAgICAgICAgcmVzWWVhcixcbiAgICAgICAgICAgIHJlc0RheU9mWWVhcjtcblxuICAgICAgICBpZiAoZGF5T2ZZZWFyIDw9IDApIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyIC0gMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheXNJblllYXIocmVzWWVhcikgKyBkYXlPZlllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyKSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgKyAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyIC0gZGF5c0luWWVhcih5ZWFyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgICAgICBkYXlPZlllYXI6IHJlc0RheU9mWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrT2ZZZWFyKG1vbSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQobW9tLnllYXIoKSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2VlayA9IE1hdGguZmxvb3IoKG1vbS5kYXlPZlllYXIoKSAtIHdlZWtPZmZzZXQgLSAxKSAvIDcpICsgMSxcbiAgICAgICAgICAgIHJlc1dlZWssXG4gICAgICAgICAgICByZXNZZWFyO1xuXG4gICAgICAgIGlmICh3ZWVrIDwgMSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgLSAxO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgKyB3ZWVrc0luWWVhcihyZXNZZWFyLCBkb3csIGRveSk7XG4gICAgICAgIH0gZWxzZSBpZiAod2VlayA+IHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KSkge1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgLSB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSk7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdlZWs6IHJlc1dlZWssXG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtzSW5ZZWFyKHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWtPZmZzZXROZXh0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIgKyAxLCBkb3csIGRveSk7XG4gICAgICAgIHJldHVybiAoZGF5c0luWWVhcih5ZWFyKSAtIHdlZWtPZmZzZXQgKyB3ZWVrT2Zmc2V0TmV4dCkgLyA3O1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd3JywgWyd3dycsIDJdLCAnd28nLCAnd2VlaycpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdXJywgWydXVycsIDJdLCAnV28nLCAnaXNvV2VlaycpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigndycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignd3cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignVycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignV1cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihcbiAgICAgICAgWyd3JywgJ3d3JywgJ1cnLCAnV1cnXSxcbiAgICAgICAgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAxKV0gPSB0b0ludChpbnB1dCk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vlayhtb20pIHtcbiAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIobW9tLCB0aGlzLl93ZWVrLmRvdywgdGhpcy5fd2Vlay5kb3kpLndlZWs7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrID0ge1xuICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZldlZWsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG95O1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB0aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHdlZWtPZlllYXIodGhpcywgMSwgNCkud2VlaztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkJywgMCwgJ2RvJywgJ2RheScpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZScsIDAsIDAsICd3ZWVrZGF5Jyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ0UnLCAwLCAwLCAnaXNvV2Vla2RheScpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignZCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignRScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZGQnLCAnZGRkJywgJ2RkZGQnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gY29uZmlnLl9sb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGdldCBhIHdlZWtkYXkgbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkXG4gICAgICAgIGlmICh3ZWVrZGF5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHdlZWsuZCA9IHdlZWtkYXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkV2Vla2RheSA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2QnLCAnZScsICdFJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmFOKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCA9IGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpICUgNyB8fCA3O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc05hTihpbnB1dCkgPyBudWxsIDogaW5wdXQ7XG4gICAgfVxuXG4gICAgLy8gTE9DQUxFU1xuICAgIGZ1bmN0aW9uIHNoaWZ0V2Vla2RheXMod3MsIG4pIHtcbiAgICAgICAgcmV0dXJuIHdzLnNsaWNlKG4sIDcpLmNvbmNhdCh3cy5zbGljZSgwLCBuKSk7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrZGF5cyA9XG4gICAgICAgICAgICAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0ID0gJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluID0gJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzTWluUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5cyhtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIHdlZWtkYXlzID0gaXNBcnJheSh0aGlzLl93ZWVrZGF5cylcbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNcbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNbXG4gICAgICAgICAgICAgICAgICBtICYmIG0gIT09IHRydWUgJiYgdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF07XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXMod2Vla2RheXMsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gd2Vla2RheXNbbS5kYXkoKV1cbiAgICAgICAgICAgICAgOiB3ZWVrZGF5cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1Nob3J0KG0pIHtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c1Nob3J0LCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRbbS5kYXkoKV1cbiAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1Nob3J0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzTWluKG0pIHtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c01pbiwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c01pblttLmRheSgpXVxuICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlJDEod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSB3ZWVrZGF5TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzTWluKFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5cyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNQYXJzZSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlJDEuY2FsbCh0aGlzLCB3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcblxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzKG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fd2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkYXkgPSBnZXQodGhpcywgJ0RheScpO1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW5wdXQgPSBwYXJzZVdlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChpbnB1dCAtIGRheSwgJ2QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRMb2NhbGVEYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gKHRoaXMuZGF5KCkgKyA3IC0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSAlIDc7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2Vla2RheSA6IHRoaXMuYWRkKGlucHV0IC0gd2Vla2RheSwgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09EYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmVoYXZlcyB0aGUgc2FtZSBhcyBtb21lbnQjZGF5IGV4Y2VwdFxuICAgICAgICAvLyBhcyBhIGdldHRlciwgcmV0dXJucyA3IGluc3RlYWQgb2YgMCAoMS03IHJhbmdlIGluc3RlYWQgb2YgMC02KVxuICAgICAgICAvLyBhcyBhIHNldHRlciwgc3VuZGF5IHNob3VsZCBiZWxvbmcgdG8gdGhlIHByZXZpb3VzIHdlZWsuXG5cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciB3ZWVrZGF5ID0gcGFyc2VJc29XZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkodGhpcy5kYXkoKSAlIDcgPyB3ZWVrZGF5IDogd2Vla2RheSAtIDcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KCkgfHwgNztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBkZWZhdWx0V2Vla2RheXNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c01pblJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVXZWVrZGF5c1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluUGllY2VzID0gW10sXG4gICAgICAgICAgICBzaG9ydFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbG9uZ1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBtaW5wLFxuICAgICAgICAgICAgc2hvcnRwLFxuICAgICAgICAgICAgbG9uZ3A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgbWlucCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykpO1xuICAgICAgICAgICAgc2hvcnRwID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgICAgIGxvbmdwID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5cyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaW5QaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSB3ZWVrZGF5IChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgbWluUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIGxvbmdQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIG1pblBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBoRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpICUgMTIgfHwgMTI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga0Zvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSB8fCAyNDtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSCcsIFsnSEgnLCAyXSwgMCwgJ2hvdXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignaCcsIFsnaGgnLCAyXSwgMCwgaEZvcm1hdCk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2snLCBbJ2trJywgMl0sIDAsIGtGb3JtYXQpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgaEZvcm1hdC5hcHBseSh0aGlzKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIGhGb3JtYXQuYXBwbHkodGhpcykgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0htbScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgdGhpcy5ob3VycygpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJycgK1xuICAgICAgICAgICAgdGhpcy5ob3VycygpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtKHRva2VuLCBsb3dlcmNhc2UpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbShcbiAgICAgICAgICAgICAgICB0aGlzLmhvdXJzKCksXG4gICAgICAgICAgICAgICAgdGhpcy5taW51dGVzKCksXG4gICAgICAgICAgICAgICAgbG93ZXJjYXNlXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBtZXJpZGllbSgnYScsIHRydWUpO1xuICAgIG1lcmlkaWVtKCdBJywgZmFsc2UpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgZnVuY3Rpb24gbWF0Y2hNZXJpZGllbShpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX21lcmlkaWVtUGFyc2U7XG4gICAgfVxuXG4gICAgYWRkUmVnZXhUb2tlbignYScsIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdIJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJIYXNaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdoJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdrJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdISCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdoaCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdraycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbScsIG1hdGNoM3RvNCk7XG4gICAgYWRkUmVnZXhUb2tlbignaG1tc3MnLCBtYXRjaDV0bzYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbScsIG1hdGNoM3RvNCk7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tc3MnLCBtYXRjaDV0bzYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0gnLCAnSEgnXSwgSE9VUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2snLCAna2snXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBrSW5wdXQgPSB0b0ludChpbnB1dCk7XG4gICAgICAgIGFycmF5W0hPVVJdID0ga0lucHV0ID09PSAyNCA/IDAgOiBrSW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2EnLCAnQSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9pc1BtID0gY29uZmlnLl9sb2NhbGUuaXNQTShpbnB1dCk7XG4gICAgICAgIGNvbmZpZy5fbWVyaWRpZW0gPSBpbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaCcsICdoaCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ2htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ2htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNCxcbiAgICAgICAgICAgIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVJc1BNKGlucHV0KSB7XG4gICAgICAgIC8vIElFOCBRdWlya3MgTW9kZSAmIElFNyBTdGFuZGFyZHMgTW9kZSBkbyBub3QgYWxsb3cgYWNjZXNzaW5nIHN0cmluZ3MgbGlrZSBhcnJheXNcbiAgICAgICAgLy8gVXNpbmcgY2hhckF0IHNob3VsZCBiZSBtb3JlIGNvbXBhdGlibGUuXG4gICAgICAgIHJldHVybiAoaW5wdXQgKyAnJykudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkgPT09ICdwJztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UgPSAvW2FwXVxcLj9tP1xcLj8vaSxcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgaG91ciBzaG91bGQga2VlcCB0aGUgdGltZSwgYmVjYXVzZSB0aGUgdXNlciBleHBsaWNpdGx5XG4gICAgICAgIC8vIHNwZWNpZmllZCB3aGljaCBob3VyIHRoZXkgd2FudC4gU28gdHJ5aW5nIHRvIG1haW50YWluIHRoZSBzYW1lIGhvdXIgKGluXG4gICAgICAgIC8vIGEgbmV3IHRpbWV6b25lKSBtYWtlcyBzZW5zZS4gQWRkaW5nL3N1YnRyYWN0aW5nIGhvdXJzIGRvZXMgbm90IGZvbGxvd1xuICAgICAgICAvLyB0aGlzIHJ1bGUuXG4gICAgICAgIGdldFNldEhvdXIgPSBtYWtlR2V0U2V0KCdIb3VycycsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlTWVyaWRpZW0oaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3BtJyA6ICdQTSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdhbScgOiAnQU0nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJhc2VDb25maWcgPSB7XG4gICAgICAgIGNhbGVuZGFyOiBkZWZhdWx0Q2FsZW5kYXIsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQsXG4gICAgICAgIGludmFsaWREYXRlOiBkZWZhdWx0SW52YWxpZERhdGUsXG4gICAgICAgIG9yZGluYWw6IGRlZmF1bHRPcmRpbmFsLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiBkZWZhdWx0UmVsYXRpdmVUaW1lLFxuXG4gICAgICAgIG1vbnRoczogZGVmYXVsdExvY2FsZU1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCxcblxuICAgICAgICB3ZWVrOiBkZWZhdWx0TG9jYWxlV2VlayxcblxuICAgICAgICB3ZWVrZGF5czogZGVmYXVsdExvY2FsZVdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCxcblxuICAgICAgICBtZXJpZGllbVBhcnNlOiBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSxcbiAgICB9O1xuXG4gICAgLy8gaW50ZXJuYWwgc3RvcmFnZSBmb3IgbG9jYWxlIGNvbmZpZyBmaWxlc1xuICAgIHZhciBsb2NhbGVzID0ge30sXG4gICAgICAgIGxvY2FsZUZhbWlsaWVzID0ge30sXG4gICAgICAgIGdsb2JhbExvY2FsZTtcblxuICAgIGZ1bmN0aW9uIGNvbW1vblByZWZpeChhcnIxLCBhcnIyKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbWlubCA9IE1hdGgubWluKGFycjEubGVuZ3RoLCBhcnIyLmxlbmd0aCk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtaW5sOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChhcnIxW2ldICE9PSBhcnIyW2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbmw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ID8ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnXycsICctJykgOiBrZXk7XG4gICAgfVxuXG4gICAgLy8gcGljayB0aGUgbG9jYWxlIGZyb20gdGhlIGFycmF5XG4gICAgLy8gdHJ5IFsnZW4tYXUnLCAnZW4tZ2InXSBhcyAnZW4tYXUnLCAnZW4tZ2InLCAnZW4nLCBhcyBpbiBtb3ZlIHRocm91Z2ggdGhlIGxpc3QgdHJ5aW5nIGVhY2hcbiAgICAvLyBzdWJzdHJpbmcgZnJvbSBtb3N0IHNwZWNpZmljIHRvIGxlYXN0LCBidXQgbW92ZSB0byB0aGUgbmV4dCBhcnJheSBpdGVtIGlmIGl0J3MgYSBtb3JlIHNwZWNpZmljIHZhcmlhbnQgdGhhbiB0aGUgY3VycmVudCByb290XG4gICAgZnVuY3Rpb24gY2hvb3NlTG9jYWxlKG5hbWVzKSB7XG4gICAgICAgIHZhciBpID0gMCxcbiAgICAgICAgICAgIGosXG4gICAgICAgICAgICBuZXh0LFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgc3BsaXQ7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBuYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNwbGl0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2ldKS5zcGxpdCgnLScpO1xuICAgICAgICAgICAgaiA9IHNwbGl0Lmxlbmd0aDtcbiAgICAgICAgICAgIG5leHQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaSArIDFdKTtcbiAgICAgICAgICAgIG5leHQgPSBuZXh0ID8gbmV4dC5zcGxpdCgnLScpIDogbnVsbDtcbiAgICAgICAgICAgIHdoaWxlIChqID4gMCkge1xuICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoc3BsaXQuc2xpY2UoMCwgaikuam9pbignLScpKTtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbmV4dCAmJlxuICAgICAgICAgICAgICAgICAgICBuZXh0Lmxlbmd0aCA+PSBqICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vblByZWZpeChzcGxpdCwgbmV4dCkgPj0gaiAtIDFcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgLy90aGUgbmV4dCBhcnJheSBpdGVtIGlzIGJldHRlciB0aGFuIGEgc2hhbGxvd2VyIHN1YnN0cmluZyBvZiB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbGVOYW1lU2FuZShuYW1lKSB7XG4gICAgICAgIC8vIFByZXZlbnQgbmFtZXMgdGhhdCBsb29rIGxpa2UgZmlsZXN5c3RlbSBwYXRocywgaS5lIGNvbnRhaW4gJy8nIG9yICdcXCdcbiAgICAgICAgLy8gRW5zdXJlIG5hbWUgaXMgYXZhaWxhYmxlIGFuZCBmdW5jdGlvbiByZXR1cm5zIGJvb2xlYW5cbiAgICAgICAgcmV0dXJuICEhKG5hbWUgJiYgbmFtZS5tYXRjaCgnXlteL1xcXFxcXFxcXSokJykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWRMb2NhbGUobmFtZSkge1xuICAgICAgICB2YXIgb2xkTG9jYWxlID0gbnVsbCxcbiAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlO1xuICAgICAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byByZWdpc3RlciBhbmQgbG9hZCBhbGwgdGhlIGxvY2FsZXMgaW4gTm9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBtb2R1bGUgJiZcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzICYmXG4gICAgICAgICAgICBpc0xvY2FsZU5hbWVTYW5lKG5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvbGRMb2NhbGUgPSBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUgPSByZXF1aXJlO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlKCcuL2xvY2FsZS8nICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG9sZExvY2FsZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFyayBhcyBub3QgZm91bmQgdG8gYXZvaWQgcmVwZWF0aW5nIGV4cGVuc2l2ZSBmaWxlIHJlcXVpcmUgY2FsbCBjYXVzaW5nIGhpZ2ggQ1BVXG4gICAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gZmluZCBlbi1VUywgZW5fVVMsIGVuLXVzIGZvciBldmVyeSBmb3JtYXQgY2FsbFxuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBudWxsOyAvLyBudWxsIG1lYW5zIG5vdCBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2FkIGxvY2FsZSBhbmQgdGhlbiBzZXQgdGhlIGdsb2JhbCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBmdW5jdGlvbiBnZXRTZXRHbG9iYWxMb2NhbGUoa2V5LCB2YWx1ZXMpIHtcbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGVmaW5lTG9jYWxlKGtleSwgdmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBtb21lbnQuZHVyYXRpb24uX2xvY2FsZSA9IG1vbWVudC5fbG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgICAgICBnbG9iYWxMb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgICAgICAvL3dhcm4gdXNlciBpZiBhcmd1bWVudHMgYXJlIHBhc3NlZCBidXQgdGhlIGxvY2FsZSBjb3VsZCBub3QgYmUgc2V0XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgICAgICdMb2NhbGUgJyArIGtleSArICcgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PydcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmluZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgJ2RlZmluZUxvY2FsZU92ZXJyaWRlJyxcbiAgICAgICAgICAgICAgICAgICAgJ3VzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2FuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbbmFtZV0uX2NvbmZpZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShjb25maWcucGFyZW50TG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbmV3IExvY2FsZShtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpKTtcblxuICAgICAgICAgICAgaWYgKGxvY2FsZUZhbWlsaWVzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbbmFtZV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBkZWZpbmVMb2NhbGUoeC5uYW1lLCB4LmNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgbG9jYWxlIEFGVEVSIGFsbCBjaGlsZCBsb2NhbGVzIGhhdmUgYmVlblxuICAgICAgICAgICAgLy8gY3JlYXRlZCwgc28gd2Ugd29uJ3QgZW5kIHVwIHdpdGggdGhlIGNoaWxkIGxvY2FsZSBzZXQuXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdXNlZnVsIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwgJiYgbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBjaGlsZCBsb2NhbGUgaW4tcGxhY2UgdG8gYXZvaWQgbWVtb3J5LWxlYWtzXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXS5zZXQobWVyZ2VDb25maWdzKGxvY2FsZXNbbmFtZV0uX2NvbmZpZywgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE1FUkdFXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlID0gbG9hZExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gdG1wTG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZUxvY2FsZSBpcyBjYWxsZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgYWJiciBzbyBpdCB3aWxsIGhhdmUgYSBuYW1lIChnZXR0ZXJzIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAvLyB1bmRlZmluZWQgb3RoZXJ3aXNlKS5cbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBuZXcgTG9jYWxlKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgbG9jYWxlLnBhcmVudExvY2FsZSA9IGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBwYXNzIG51bGwgZm9yIGNvbmZpZyB0byB1bnVwZGF0ZSwgdXNlZnVsIGZvciB0ZXN0c1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGdldFNldEdsb2JhbExvY2FsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBsb2NhbGUgZGF0YVxuICAgIGZ1bmN0aW9uIGdldExvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIGxvY2FsZTtcblxuICAgICAgICBpZiAoa2V5ICYmIGtleS5fbG9jYWxlICYmIGtleS5fbG9jYWxlLl9hYmJyKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIC8vc2hvcnQtY2lyY3VpdCBldmVyeXRoaW5nIGVsc2VcbiAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5ID0gW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hvb3NlTG9jYWxlKGtleSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdExvY2FsZXMoKSB7XG4gICAgICAgIHJldHVybiBrZXlzKGxvY2FsZXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrT3ZlcmZsb3cobSkge1xuICAgICAgICB2YXIgb3ZlcmZsb3csXG4gICAgICAgICAgICBhID0gbS5fYTtcblxuICAgICAgICBpZiAoYSAmJiBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPT09IC0yKSB7XG4gICAgICAgICAgICBvdmVyZmxvdyA9XG4gICAgICAgICAgICAgICAgYVtNT05USF0gPCAwIHx8IGFbTU9OVEhdID4gMTFcbiAgICAgICAgICAgICAgICAgICAgPyBNT05USFxuICAgICAgICAgICAgICAgICAgICA6IGFbREFURV0gPCAxIHx8IGFbREFURV0gPiBkYXlzSW5Nb250aChhW1lFQVJdLCBhW01PTlRIXSlcbiAgICAgICAgICAgICAgICAgICAgICA/IERBVEVcbiAgICAgICAgICAgICAgICAgICAgICA6IGFbSE9VUl0gPCAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFbSE9VUl0gPiAyNCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhW01JTlVURV0gIT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW1NFQ09ORF0gIT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW01JTExJU0VDT05EXSAhPT0gMCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IEhPVVJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYVtNSU5VVEVdIDwgMCB8fCBhW01JTlVURV0gPiA1OVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1JTlVURVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFbU0VDT05EXSA8IDAgfHwgYVtTRUNPTkRdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFNFQ09ORFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYVtNSUxMSVNFQ09ORF0gPCAwIHx8IGFbTUlMTElTRUNPTkRdID4gOTk5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1JTExJU0VDT05EXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC0xO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd0RheU9mWWVhciAmJlxuICAgICAgICAgICAgICAgIChvdmVyZmxvdyA8IFlFQVIgfHwgb3ZlcmZsb3cgPiBEQVRFKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBEQVRFO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrcyAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtkYXkgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLREFZO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPSBvdmVyZmxvdztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIGlzbyA4NjAxIHJlZ2V4XG4gICAgLy8gMDAwMC0wMC0wMCAwMDAwLVcwMCBvciAwMDAwLVcwMC0wICsgVCArIDAwIG9yIDAwOjAwIG9yIDAwOjAwOjAwIG9yIDAwOjAwOjAwLjAwMCArICswMDowMCBvciArMDAwMCBvciArMDApXG4gICAgdmFyIGV4dGVuZGVkSXNvUmVnZXggPVxuICAgICAgICAgICAgL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KS0oPzpcXGRcXGQtXFxkXFxkfFdcXGRcXGQtXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZCkpKD86KFR8ICkoXFxkXFxkKD86OlxcZFxcZCg/OjpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIGJhc2ljSXNvUmVnZXggPVxuICAgICAgICAgICAgL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KSg/OlxcZFxcZFxcZFxcZHxXXFxkXFxkXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZHwpKSg/OihUfCApKFxcZFxcZCg/OlxcZFxcZCg/OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxcbiAgICAgICAgdHpSZWdleCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/LyxcbiAgICAgICAgaXNvRGF0ZXMgPSBbXG4gICAgICAgICAgICBbJ1lZWVlZWS1NTS1ERCcsIC9bKy1dXFxkezZ9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnWVlZWS1NTS1ERCcsIC9cXGR7NH0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXLUUnLCAvXFxkezR9LVdcXGRcXGQtXFxkL10sXG4gICAgICAgICAgICBbJ0dHR0ctW1ddV1cnLCAvXFxkezR9LVdcXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVktREREJywgL1xcZHs0fS1cXGR7M30vXSxcbiAgICAgICAgICAgIFsnWVlZWS1NTScsIC9cXGR7NH0tXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZWVlNTUREJywgL1srLV1cXGR7MTB9L10sXG4gICAgICAgICAgICBbJ1lZWVlNTUREJywgL1xcZHs4fS9dLFxuICAgICAgICAgICAgWydHR0dHW1ddV1dFJywgL1xcZHs0fVdcXGR7M30vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXJywgL1xcZHs0fVdcXGR7Mn0vLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVlEREQnLCAvXFxkezd9L10sXG4gICAgICAgICAgICBbJ1lZWVlNTScsIC9cXGR7Nn0vLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVknLCAvXFxkezR9LywgZmFsc2VdLFxuICAgICAgICBdLFxuICAgICAgICAvLyBpc28gdGltZSBmb3JtYXRzIGFuZCByZWdleGVzXG4gICAgICAgIGlzb1RpbWVzID0gW1xuICAgICAgICAgICAgWydISDptbTpzcy5TU1NTJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISDptbTpzcyxTU1NTJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkLFxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEg6bW0nLCAvXFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICAgICAgWydISG1tc3MuU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgICAgICBbJ0hIbW1zcyxTU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIbW1zcycsIC9cXGRcXGRcXGRcXGRcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbScsIC9cXGRcXGRcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEgnLCAvXFxkXFxkL10sXG4gICAgICAgIF0sXG4gICAgICAgIGFzcE5ldEpzb25SZWdleCA9IC9eXFwvP0RhdGVcXCgoLT9cXGQrKS9pLFxuICAgICAgICAvLyBSRkMgMjgyMiByZWdleDogRm9yIGRldGFpbHMgc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyODIyI3NlY3Rpb24tMy4zXG4gICAgICAgIHJmYzI4MjIgPVxuICAgICAgICAgICAgL14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXFxkezR9KSkkLyxcbiAgICAgICAgb2JzT2Zmc2V0cyA9IHtcbiAgICAgICAgICAgIFVUOiAwLFxuICAgICAgICAgICAgR01UOiAwLFxuICAgICAgICAgICAgRURUOiAtNCAqIDYwLFxuICAgICAgICAgICAgRVNUOiAtNSAqIDYwLFxuICAgICAgICAgICAgQ0RUOiAtNSAqIDYwLFxuICAgICAgICAgICAgQ1NUOiAtNiAqIDYwLFxuICAgICAgICAgICAgTURUOiAtNiAqIDYwLFxuICAgICAgICAgICAgTVNUOiAtNyAqIDYwLFxuICAgICAgICAgICAgUERUOiAtNyAqIDYwLFxuICAgICAgICAgICAgUFNUOiAtOCAqIDYwLFxuICAgICAgICB9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSVNPKGNvbmZpZykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBzdHJpbmcgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBtYXRjaCA9IGV4dGVuZGVkSXNvUmVnZXguZXhlYyhzdHJpbmcpIHx8IGJhc2ljSXNvUmVnZXguZXhlYyhzdHJpbmcpLFxuICAgICAgICAgICAgYWxsb3dUaW1lLFxuICAgICAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgICAgIHRpbWVGb3JtYXQsXG4gICAgICAgICAgICB0ekZvcm1hdCxcbiAgICAgICAgICAgIGlzb0RhdGVzTGVuID0gaXNvRGF0ZXMubGVuZ3RoLFxuICAgICAgICAgICAgaXNvVGltZXNMZW4gPSBpc29UaW1lcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pc28gPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb0RhdGVzTGVuOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzb0RhdGVzW2ldWzFdLmV4ZWMobWF0Y2hbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQgPSBpc29EYXRlc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dUaW1lID0gaXNvRGF0ZXNbaV1bMl0gIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb1RpbWVzTGVuOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc29UaW1lc1tpXVsxXS5leGVjKG1hdGNoWzNdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hbMl0gc2hvdWxkIGJlICdUJyBvciBzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUZvcm1hdCA9IChtYXRjaFsyXSB8fCAnICcpICsgaXNvVGltZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGltZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFhbGxvd1RpbWUgJiYgdGltZUZvcm1hdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzRdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR6UmVnZXguZXhlYyhtYXRjaFs0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHpGb3JtYXQgPSAnWic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcuX2YgPSBkYXRlRm9ybWF0ICsgKHRpbWVGb3JtYXQgfHwgJycpICsgKHR6Rm9ybWF0IHx8ICcnKTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICAgICAgeWVhclN0cixcbiAgICAgICAgbW9udGhTdHIsXG4gICAgICAgIGRheVN0cixcbiAgICAgICAgaG91clN0cixcbiAgICAgICAgbWludXRlU3RyLFxuICAgICAgICBzZWNvbmRTdHJcbiAgICApIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtcbiAgICAgICAgICAgIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpLFxuICAgICAgICAgICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpLFxuICAgICAgICAgICAgcGFyc2VJbnQoZGF5U3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChob3VyU3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChtaW51dGVTdHIsIDEwKSxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoc2Vjb25kU3RyKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChwYXJzZUludChzZWNvbmRTdHIsIDEwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpIHtcbiAgICAgICAgdmFyIHllYXIgPSBwYXJzZUludCh5ZWFyU3RyLCAxMCk7XG4gICAgICAgIGlmICh5ZWFyIDw9IDQ5KSB7XG4gICAgICAgICAgICByZXR1cm4gMjAwMCArIHllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoeWVhciA8PSA5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiAxOTAwICsgeWVhcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwcm9jZXNzUkZDMjgyMihzKSB7XG4gICAgICAgIC8vIFJlbW92ZSBjb21tZW50cyBhbmQgZm9sZGluZyB3aGl0ZXNwYWNlIGFuZCByZXBsYWNlIG11bHRpcGxlLXNwYWNlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG4gICAgICAgIHJldHVybiBzXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwoW14oKV0qXFwpfFtcXG5cXHRdL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxzXFxzKykvZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL15cXHNcXHMqLywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzXFxzKiQvLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tXZWVrZGF5KHdlZWtkYXlTdHIsIHBhcnNlZElucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKHdlZWtkYXlTdHIpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFJlcGxhY2UgdGhlIHZhbmlsbGEgSlMgRGF0ZSBvYmplY3Qgd2l0aCBhbiBpbmRlcGVuZGVudCBkYXktb2Ytd2VlayBjaGVjay5cbiAgICAgICAgICAgIHZhciB3ZWVrZGF5UHJvdmlkZWQgPSBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydC5pbmRleE9mKHdlZWtkYXlTdHIpLFxuICAgICAgICAgICAgICAgIHdlZWtkYXlBY3R1YWwgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMF0sXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzFdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsyXVxuICAgICAgICAgICAgICAgICkuZ2V0RGF5KCk7XG4gICAgICAgICAgICBpZiAod2Vla2RheVByb3ZpZGVkICE9PSB3ZWVrZGF5QWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlT2Zmc2V0KG9ic09mZnNldCwgbWlsaXRhcnlPZmZzZXQsIG51bU9mZnNldCkge1xuICAgICAgICBpZiAob2JzT2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbGl0YXJ5T2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyB0aGUgb25seSBhbGxvd2VkIG1pbGl0YXJ5IHR6IGlzIFpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGhtID0gcGFyc2VJbnQobnVtT2Zmc2V0LCAxMCksXG4gICAgICAgICAgICAgICAgbSA9IGhtICUgMTAwLFxuICAgICAgICAgICAgICAgIGggPSAoaG0gLSBtKSAvIDEwMDtcbiAgICAgICAgICAgIHJldHVybiBoICogNjAgKyBtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBhbmQgdGltZSBmcm9tIHJlZiAyODIyIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2ggPSByZmMyODIyLmV4ZWMocHJlcHJvY2Vzc1JGQzI4MjIoY29uZmlnLl9pKSksXG4gICAgICAgICAgICBwYXJzZWRBcnJheTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBwYXJzZWRBcnJheSA9IGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgICAgICAgICAgbWF0Y2hbNF0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbM10sXG4gICAgICAgICAgICAgICAgbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbNV0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbNl0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbN11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIWNoZWNrV2Vla2RheShtYXRjaFsxXSwgcGFyc2VkQXJyYXksIGNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IHBhcnNlZEFycmF5O1xuICAgICAgICAgICAgY29uZmlnLl90em0gPSBjYWxjdWxhdGVPZmZzZXQobWF0Y2hbOF0sIG1hdGNoWzldLCBtYXRjaFsxMF0pO1xuXG4gICAgICAgICAgICBjb25maWcuX2QgPSBjcmVhdGVVVENEYXRlLmFwcGx5KG51bGwsIGNvbmZpZy5fYSk7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5yZmMyODIyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIDEpIEFTUC5ORVQsIDIpIElTTywgMykgUkZDIDI4MjIgZm9ybWF0cywgb3IgNCkgb3B0aW9uYWwgZmFsbGJhY2sgaWYgcGFyc2luZyBpc24ndCBzdHJpY3RcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IGFzcE5ldEpzb25SZWdleC5leGVjKGNvbmZpZy5faSk7XG4gICAgICAgIGlmIChtYXRjaGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSgrbWF0Y2hlZFsxXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9zdHJpY3QpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmluYWwgYXR0ZW1wdCwgdXNlIElucHV0IEZhbGxiYWNrXG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2sgPSBkZXByZWNhdGUoXG4gICAgICAgICd2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgJyArXG4gICAgICAgICAgICAnd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSAnICtcbiAgICAgICAgICAgICdkaXNjb3VyYWdlZC4gUGxlYXNlIHJlZmVyIHRvIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvanMtZGF0ZS8gZm9yIG1vcmUgaW5mby4nLFxuICAgICAgICBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShjb25maWcuX2kgKyAoY29uZmlnLl91c2VVVEMgPyAnIFVUQycgOiAnJykpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFBpY2sgdGhlIGZpcnN0IGRlZmluZWQgb2YgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy5cbiAgICBmdW5jdGlvbiBkZWZhdWx0cyhhLCBiLCBjKSB7XG4gICAgICAgIGlmIChhICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIC8vIGhvb2tzIGlzIGFjdHVhbGx5IHRoZSBleHBvcnRlZCBtb21lbnQgb2JqZWN0XG4gICAgICAgIHZhciBub3dWYWx1ZSA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDTW9udGgoKSxcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENEYXRlKCksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbbm93VmFsdWUuZ2V0RnVsbFllYXIoKSwgbm93VmFsdWUuZ2V0TW9udGgoKSwgbm93VmFsdWUuZ2V0RGF0ZSgpXTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFuIGFycmF5IHRvIGEgZGF0ZS5cbiAgICAvLyB0aGUgYXJyYXkgc2hvdWxkIG1pcnJvciB0aGUgcGFyYW1ldGVycyBiZWxvd1xuICAgIC8vIG5vdGU6IGFsbCB2YWx1ZXMgcGFzdCB0aGUgeWVhciBhcmUgb3B0aW9uYWwgYW5kIHdpbGwgZGVmYXVsdCB0byB0aGUgbG93ZXN0IHBvc3NpYmxlIHZhbHVlLlxuICAgIC8vIFt5ZWFyLCBtb250aCwgZGF5ICwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXVxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21BcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgaW5wdXQgPSBbXSxcbiAgICAgICAgICAgIGN1cnJlbnREYXRlLFxuICAgICAgICAgICAgZXhwZWN0ZWRXZWVrZGF5LFxuICAgICAgICAgICAgeWVhclRvVXNlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnREYXRlID0gY3VycmVudERhdGVBcnJheShjb25maWcpO1xuXG4gICAgICAgIC8vY29tcHV0ZSBkYXkgb2YgdGhlIHllYXIgZnJvbSB3ZWVrcyBhbmQgd2Vla2RheXNcbiAgICAgICAgaWYgKGNvbmZpZy5fdyAmJiBjb25maWcuX2FbREFURV0gPT0gbnVsbCAmJiBjb25maWcuX2FbTU9OVEhdID09IG51bGwpIHtcbiAgICAgICAgICAgIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9pZiB0aGUgZGF5IG9mIHRoZSB5ZWFyIGlzIHNldCwgZmlndXJlIG91dCB3aGF0IGl0IGlzXG4gICAgICAgIGlmIChjb25maWcuX2RheU9mWWVhciAhPSBudWxsKSB7XG4gICAgICAgICAgICB5ZWFyVG9Vc2UgPSBkZWZhdWx0cyhjb25maWcuX2FbWUVBUl0sIGN1cnJlbnREYXRlW1lFQVJdKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyVG9Vc2UpIHx8XG4gICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPT09IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd0RheU9mWWVhciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKHllYXJUb1VzZSwgMCwgY29uZmlnLl9kYXlPZlllYXIpO1xuICAgICAgICAgICAgY29uZmlnLl9hW01PTlRIXSA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtEQVRFXSA9IGRhdGUuZ2V0VVRDRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IGRhdGUuXG4gICAgICAgIC8vICogaWYgbm8geWVhciwgbW9udGgsIGRheSBvZiBtb250aCBhcmUgZ2l2ZW4sIGRlZmF1bHQgdG8gdG9kYXlcbiAgICAgICAgLy8gKiBpZiBkYXkgb2YgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgbW9udGggYW5kIHllYXJcbiAgICAgICAgLy8gKiBpZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBvbmx5IHllYXJcbiAgICAgICAgLy8gKiBpZiB5ZWFyIGlzIGdpdmVuLCBkb24ndCBkZWZhdWx0IGFueXRoaW5nXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzICYmIGNvbmZpZy5fYVtpXSA9PSBudWxsOyArK2kpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID0gY3VycmVudERhdGVbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBaZXJvIG91dCB3aGF0ZXZlciB3YXMgbm90IGRlZmF1bHRlZCwgaW5jbHVkaW5nIHRpbWVcbiAgICAgICAgZm9yICg7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID1cbiAgICAgICAgICAgICAgICBjb25maWcuX2FbaV0gPT0gbnVsbCA/IChpID09PSAyID8gMSA6IDApIDogY29uZmlnLl9hW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIDI0OjAwOjAwLjAwMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlOVVRFXSA9PT0gMCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW1NFQ09ORF0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNSUxMSVNFQ09ORF0gPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25maWcuX25leHREYXkgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy5fZCA9IChjb25maWcuX3VzZVVUQyA/IGNyZWF0ZVVUQ0RhdGUgOiBjcmVhdGVEYXRlKS5hcHBseShcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICApO1xuICAgICAgICBleHBlY3RlZFdlZWtkYXkgPSBjb25maWcuX3VzZVVUQ1xuICAgICAgICAgICAgPyBjb25maWcuX2QuZ2V0VVRDRGF5KClcbiAgICAgICAgICAgIDogY29uZmlnLl9kLmdldERheSgpO1xuXG4gICAgICAgIC8vIEFwcGx5IHRpbWV6b25lIG9mZnNldCBmcm9tIGlucHV0LiBUaGUgYWN0dWFsIHV0Y09mZnNldCBjYW4gYmUgY2hhbmdlZFxuICAgICAgICAvLyB3aXRoIHBhcnNlWm9uZS5cbiAgICAgICAgaWYgKGNvbmZpZy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAyNDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIGZvciBtaXNtYXRjaGluZyBkYXkgb2Ygd2Vla1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX3cgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25maWcuX3cuZCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fdy5kICE9PSBleHBlY3RlZFdlZWtkYXlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZykge1xuICAgICAgICB2YXIgdywgd2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95LCB0ZW1wLCB3ZWVrZGF5T3ZlcmZsb3csIGN1cldlZWs7XG5cbiAgICAgICAgdyA9IGNvbmZpZy5fdztcbiAgICAgICAgaWYgKHcuR0cgIT0gbnVsbCB8fCB3LlcgIT0gbnVsbCB8fCB3LkUgIT0gbnVsbCkge1xuICAgICAgICAgICAgZG93ID0gMTtcbiAgICAgICAgICAgIGRveSA9IDQ7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gdGFrZSB0aGUgY3VycmVudCBpc29XZWVrWWVhciwgYnV0IHRoYXQgZGVwZW5kcyBvblxuICAgICAgICAgICAgLy8gaG93IHdlIGludGVycHJldCBub3cgKGxvY2FsLCB1dGMsIGZpeGVkIG9mZnNldCkuIFNvIGNyZWF0ZVxuICAgICAgICAgICAgLy8gYSBub3cgdmVyc2lvbiBvZiBjdXJyZW50IGNvbmZpZyAodGFrZSBsb2NhbC91dGMvb2Zmc2V0IGZsYWdzLCBhbmRcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBub3cpLlxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyhcbiAgICAgICAgICAgICAgICB3LkdHLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSxcbiAgICAgICAgICAgICAgICB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIDEsIDQpLnllYXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody5XLCAxKTtcbiAgICAgICAgICAgIHdlZWtkYXkgPSBkZWZhdWx0cyh3LkUsIDEpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAxIHx8IHdlZWtkYXkgPiA3KSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvdyA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRvdztcbiAgICAgICAgICAgIGRveSA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRveTtcblxuICAgICAgICAgICAgY3VyV2VlayA9IHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgZG93LCBkb3kpO1xuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKHcuZ2csIGNvbmZpZy5fYVtZRUFSXSwgY3VyV2Vlay55ZWFyKTtcblxuICAgICAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IHdlZWsuXG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody53LCBjdXJXZWVrLndlZWspO1xuXG4gICAgICAgICAgICBpZiAody5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZWVrZGF5IC0tIGxvdyBkYXkgbnVtYmVycyBhcmUgY29uc2lkZXJlZCBuZXh0IHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5kO1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMCB8fCB3ZWVrZGF5ID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAody5lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBsb2NhbCB3ZWVrZGF5IC0tIGNvdW50aW5nIHN0YXJ0cyBmcm9tIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZSArIGRvdztcbiAgICAgICAgICAgICAgICBpZiAody5lIDwgMCB8fCB3LmUgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHRvIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IGRvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod2VlayA8IDEgfHwgd2VlayA+IHdlZWtzSW5ZZWFyKHdlZWtZZWFyLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrZGF5T3ZlcmZsb3cgIT0gbnVsbCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla2RheSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1wID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSB0ZW1wLnllYXI7XG4gICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRlbXAuZGF5T2ZZZWFyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIElTTyBzdGFuZGFyZFxuICAgIGhvb2tzLklTT184NjAxID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgUkZDIDI4MjIgZm9ybVxuICAgIGhvb2tzLlJGQ18yODIyID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBmb3JtYXQgc3RyaW5nXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgY3JlYXRpb24gZmxvdyB0byBwcmV2ZW50IGNpcmN1bGFyIGRlcHNcbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuSVNPXzg2MDEpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5SRkNfMjgyMikge1xuICAgICAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25maWcuX2EgPSBbXTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIFRoaXMgYXJyYXkgaXMgdXNlZCB0byBtYWtlIGEgRGF0ZSwgZWl0aGVyIHdpdGggYG5ldyBEYXRlYCBvciBgRGF0ZS5VVENgXG4gICAgICAgIHZhciBzdHJpbmcgPSAnJyArIGNvbmZpZy5faSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwYXJzZWRJbnB1dCxcbiAgICAgICAgICAgIHRva2VucyxcbiAgICAgICAgICAgIHRva2VuLFxuICAgICAgICAgICAgc2tpcHBlZCxcbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoID0gMCxcbiAgICAgICAgICAgIGVyYSxcbiAgICAgICAgICAgIHRva2VuTGVuO1xuXG4gICAgICAgIHRva2VucyA9XG4gICAgICAgICAgICBleHBhbmRGb3JtYXQoY29uZmlnLl9mLCBjb25maWcuX2xvY2FsZSkubWF0Y2goZm9ybWF0dGluZ1Rva2VucykgfHwgW107XG4gICAgICAgIHRva2VuTGVuID0gdG9rZW5zLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2VuTGVuOyBpKyspIHtcbiAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgcGFyc2VkSW5wdXQgPSAoc3RyaW5nLm1hdGNoKGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSkgfHxcbiAgICAgICAgICAgICAgICBbXSlbMF07XG4gICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBza2lwcGVkID0gc3RyaW5nLnN1YnN0cigwLCBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkpO1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChza2lwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkgKyBwYXJzZWRJbnB1dC5sZW5ndGhcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggKz0gcGFyc2VkSW5wdXQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgaWYgaXQncyBub3QgYSBrbm93biB0b2tlblxuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIHBhcnNlZElucHV0LCBjb25maWcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcuX3N0cmljdCAmJiAhcGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgcmVtYWluaW5nIHVucGFyc2VkIGlucHV0IGxlbmd0aCB0byB0aGUgc3RyaW5nXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmNoYXJzTGVmdE92ZXIgPVxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoIC0gdG90YWxQYXJzZWRJbnB1dExlbmd0aDtcbiAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciBfMTJoIGZsYWcgaWYgaG91ciBpcyA8PSAxMlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPD0gMTIgJiZcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPT09IHRydWUgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucGFyc2VkRGF0ZVBhcnRzID0gY29uZmlnLl9hLnNsaWNlKDApO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5tZXJpZGllbSA9IGNvbmZpZy5fbWVyaWRpZW07XG4gICAgICAgIC8vIGhhbmRsZSBtZXJpZGllbVxuICAgICAgICBjb25maWcuX2FbSE9VUl0gPSBtZXJpZGllbUZpeFdyYXAoXG4gICAgICAgICAgICBjb25maWcuX2xvY2FsZSxcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSxcbiAgICAgICAgICAgIGNvbmZpZy5fbWVyaWRpZW1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBoYW5kbGUgZXJhXG4gICAgICAgIGVyYSA9IGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYTtcbiAgICAgICAgaWYgKGVyYSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhc0NvbnZlcnRZZWFyKGVyYSwgY29uZmlnLl9hW1lFQVJdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICBjaGVja092ZXJmbG93KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW1GaXhXcmFwKGxvY2FsZSwgaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgdmFyIGlzUG07XG5cbiAgICAgICAgaWYgKG1lcmlkaWVtID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbGUubWVyaWRpZW1Ib3VyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubWVyaWRpZW1Ib3VyKGhvdXIsIG1lcmlkaWVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhbGUuaXNQTSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFja1xuICAgICAgICAgICAgaXNQbSA9IGxvY2FsZS5pc1BNKG1lcmlkaWVtKTtcbiAgICAgICAgICAgIGlmIChpc1BtICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzUG0gJiYgaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGFycmF5IG9mIGZvcm1hdCBzdHJpbmdzXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgdGVtcENvbmZpZyxcbiAgICAgICAgICAgIGJlc3RNb21lbnQsXG4gICAgICAgICAgICBzY29yZVRvQmVhdCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBjdXJyZW50U2NvcmUsXG4gICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kLFxuICAgICAgICAgICAgYmVzdEZvcm1hdElzVmFsaWQgPSBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ2ZMZW4gPSBjb25maWcuX2YubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjb25maWdmTGVuID09PSAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlnZkxlbjsgaSsrKSB7XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgPSAwO1xuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGVtcENvbmZpZyA9IGNvcHlDb25maWcoe30sIGNvbmZpZyk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRlbXBDb25maWcuX3VzZVVUQyA9IGNvbmZpZy5fdXNlVVRDO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENvbmZpZy5fZiA9IGNvbmZpZy5fZltpXTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQodGVtcENvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKHRlbXBDb25maWcpKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGFueSBpbnB1dCB0aGF0IHdhcyBub3QgcGFyc2VkIGFkZCBhIHBlbmFsdHkgZm9yIHRoYXQgZm9ybWF0XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgKz0gZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLmNoYXJzTGVmdE92ZXI7XG5cbiAgICAgICAgICAgIC8vb3IgdG9rZW5zXG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgKz0gZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLnVudXNlZFRva2Vucy5sZW5ndGggKiAxMDtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLnNjb3JlID0gY3VycmVudFNjb3JlO1xuXG4gICAgICAgICAgICBpZiAoIWJlc3RGb3JtYXRJc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0IHx8XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb21lbnQgPSB0ZW1wQ29uZmlnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRGb3JtYXRGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVzdEZvcm1hdElzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb21lbnQgPSB0ZW1wQ29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4dGVuZChjb25maWcsIGJlc3RNb21lbnQgfHwgdGVtcENvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbU9iamVjdChjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGkgPSBub3JtYWxpemVPYmplY3RVbml0cyhjb25maWcuX2kpLFxuICAgICAgICAgICAgZGF5T3JEYXRlID0gaS5kYXkgPT09IHVuZGVmaW5lZCA/IGkuZGF0ZSA6IGkuZGF5O1xuICAgICAgICBjb25maWcuX2EgPSBtYXAoXG4gICAgICAgICAgICBbaS55ZWFyLCBpLm1vbnRoLCBkYXlPckRhdGUsIGkuaG91ciwgaS5taW51dGUsIGkuc2Vjb25kLCBpLm1pbGxpc2Vjb25kXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZyb21Db25maWcoY29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3cocHJlcGFyZUNvbmZpZyhjb25maWcpKSk7XG4gICAgICAgIGlmIChyZXMuX25leHREYXkpIHtcbiAgICAgICAgICAgIC8vIEFkZGluZyBpcyBzbWFydCBlbm91Z2ggYXJvdW5kIERTVFxuICAgICAgICAgICAgcmVzLmFkZCgxLCAnZCcpO1xuICAgICAgICAgICAgcmVzLl9uZXh0RGF5ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwYXJlQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBmb3JtYXQgPSBjb25maWcuX2Y7XG5cbiAgICAgICAgY29uZmlnLl9sb2NhbGUgPSBjb25maWcuX2xvY2FsZSB8fCBnZXRMb2NhbGUoY29uZmlnLl9sKTtcblxuICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwgfHwgKGZvcm1hdCA9PT0gdW5kZWZpbmVkICYmIGlucHV0ID09PSAnJykpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKHsgbnVsbElucHV0OiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faSA9IGlucHV0ID0gY29uZmlnLl9sb2NhbGUucHJlcGFyc2UoaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTW9tZW50KGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhpbnB1dCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGlucHV0O1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZm9ybWF0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSW5wdXQoY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNWYWxpZChjb25maWcpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSW5wdXQoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0LnZhbHVlT2YoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZyhjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2EgPSBtYXAoaW5wdXQuc2xpY2UoMCksIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbU9iamVjdChjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSkge1xuICAgICAgICAgICAgLy8gZnJvbSBtaWxsaXNlY29uZHNcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBpc1VUQykge1xuICAgICAgICB2YXIgYyA9IHt9O1xuXG4gICAgICAgIGlmIChmb3JtYXQgPT09IHRydWUgfHwgZm9ybWF0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvY2FsZSA9PT0gdHJ1ZSB8fCBsb2NhbGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBsb2NhbGU7XG4gICAgICAgICAgICBsb2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoaXNPYmplY3QoaW5wdXQpICYmIGlzT2JqZWN0RW1wdHkoaW5wdXQpKSB8fFxuICAgICAgICAgICAgKGlzQXJyYXkoaW5wdXQpICYmIGlucHV0Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBvYmplY3QgY29uc3RydWN0aW9uIG11c3QgYmUgZG9uZSB0aGlzIHdheS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzE0MjNcbiAgICAgICAgYy5faXNBTW9tZW50T2JqZWN0ID0gdHJ1ZTtcbiAgICAgICAgYy5fdXNlVVRDID0gYy5faXNVVEMgPSBpc1VUQztcbiAgICAgICAgYy5fbCA9IGxvY2FsZTtcbiAgICAgICAgYy5faSA9IGlucHV0O1xuICAgICAgICBjLl9mID0gZm9ybWF0O1xuICAgICAgICBjLl9zdHJpY3QgPSBzdHJpY3Q7XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21Db25maWcoYyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWwoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG90eXBlTWluID0gZGVwcmVjYXRlKFxuICAgICAgICAgICAgJ21vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyIDwgdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgcHJvdG90eXBlTWF4ID0gZGVwcmVjYXRlKFxuICAgICAgICAgICAgJ21vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyID4gdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgIC8vIFBpY2sgYSBtb21lbnQgbSBmcm9tIG1vbWVudHMgc28gdGhhdCBtW2ZuXShvdGhlcikgaXMgdHJ1ZSBmb3IgYWxsXG4gICAgLy8gb3RoZXIuIFRoaXMgcmVsaWVzIG9uIHRoZSBmdW5jdGlvbiBmbiB0byBiZSB0cmFuc2l0aXZlLlxuICAgIC8vXG4gICAgLy8gbW9tZW50cyBzaG91bGQgZWl0aGVyIGJlIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzIG9yIGFuIGFycmF5LCB3aG9zZVxuICAgIC8vIGZpcnN0IGVsZW1lbnQgaXMgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMuXG4gICAgZnVuY3Rpb24gcGlja0J5KGZuLCBtb21lbnRzKSB7XG4gICAgICAgIHZhciByZXMsIGk7XG4gICAgICAgIGlmIChtb21lbnRzLmxlbmd0aCA9PT0gMSAmJiBpc0FycmF5KG1vbWVudHNbMF0pKSB7XG4gICAgICAgICAgICBtb21lbnRzID0gbW9tZW50c1swXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1vbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSBtb21lbnRzWzBdO1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbW9tZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKCFtb21lbnRzW2ldLmlzVmFsaWQoKSB8fCBtb21lbnRzW2ldW2ZuXShyZXMpKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gbW9tZW50c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSBbXS5zb3J0IGluc3RlYWQ/XG4gICAgZnVuY3Rpb24gbWluKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0JlZm9yZScsIGFyZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1heCgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNBZnRlcicsIGFyZ3MpO1xuICAgIH1cblxuICAgIHZhciBub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdyA/IERhdGUubm93KCkgOiArbmV3IERhdGUoKTtcbiAgICB9O1xuXG4gICAgdmFyIG9yZGVyaW5nID0gW1xuICAgICAgICAneWVhcicsXG4gICAgICAgICdxdWFydGVyJyxcbiAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgJ3dlZWsnLFxuICAgICAgICAnZGF5JyxcbiAgICAgICAgJ2hvdXInLFxuICAgICAgICAnbWludXRlJyxcbiAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgXTtcblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb25WYWxpZChtKSB7XG4gICAgICAgIHZhciBrZXksXG4gICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IGZhbHNlLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG9yZGVyTGVuID0gb3JkZXJpbmcubGVuZ3RoO1xuICAgICAgICBmb3IgKGtleSBpbiBtKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChtLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhPZi5jYWxsKG9yZGVyaW5nLCBrZXkpICE9PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAobVtrZXldID09IG51bGwgfHwgIWlzTmFOKG1ba2V5XSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG9yZGVyTGVuOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChtW29yZGVyaW5nW2ldXSkge1xuICAgICAgICAgICAgICAgIGlmICh1bml0SGFzRGVjaW1hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIG9ubHkgYWxsb3cgbm9uLWludGVnZXJzIGZvciBzbWFsbGVzdCB1bml0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJzZUZsb2F0KG1bb3JkZXJpbmdbaV1dKSAhPT0gdG9JbnQobVtvcmRlcmluZ1tpXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuaXRIYXNEZWNpbWFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKE5hTik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gRHVyYXRpb24oZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGR1cmF0aW9uKSxcbiAgICAgICAgICAgIHllYXJzID0gbm9ybWFsaXplZElucHV0LnllYXIgfHwgMCxcbiAgICAgICAgICAgIHF1YXJ0ZXJzID0gbm9ybWFsaXplZElucHV0LnF1YXJ0ZXIgfHwgMCxcbiAgICAgICAgICAgIG1vbnRocyA9IG5vcm1hbGl6ZWRJbnB1dC5tb250aCB8fCAwLFxuICAgICAgICAgICAgd2Vla3MgPSBub3JtYWxpemVkSW5wdXQud2VlayB8fCBub3JtYWxpemVkSW5wdXQuaXNvV2VlayB8fCAwLFxuICAgICAgICAgICAgZGF5cyA9IG5vcm1hbGl6ZWRJbnB1dC5kYXkgfHwgMCxcbiAgICAgICAgICAgIGhvdXJzID0gbm9ybWFsaXplZElucHV0LmhvdXIgfHwgMCxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBub3JtYWxpemVkSW5wdXQubWludXRlIHx8IDAsXG4gICAgICAgICAgICBzZWNvbmRzID0gbm9ybWFsaXplZElucHV0LnNlY29uZCB8fCAwLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gbm9ybWFsaXplZElucHV0Lm1pbGxpc2Vjb25kIHx8IDA7XG5cbiAgICAgICAgdGhpcy5faXNWYWxpZCA9IGlzRHVyYXRpb25WYWxpZChub3JtYWxpemVkSW5wdXQpO1xuXG4gICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciBkYXRlQWRkUmVtb3ZlXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9XG4gICAgICAgICAgICArbWlsbGlzZWNvbmRzICtcbiAgICAgICAgICAgIHNlY29uZHMgKiAxZTMgKyAvLyAxMDAwXG4gICAgICAgICAgICBtaW51dGVzICogNmU0ICsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBob3VycyAqIDEwMDAgKiA2MCAqIDYwOyAvL3VzaW5nIDEwMDAgKiA2MCAqIDYwIGluc3RlYWQgb2YgMzZlNSB0byBhdm9pZCBmbG9hdGluZyBwb2ludCByb3VuZGluZyBlcnJvcnMgaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzI5NzhcbiAgICAgICAgLy8gQmVjYXVzZSBvZiBkYXRlQWRkUmVtb3ZlIHRyZWF0cyAyNCBob3VycyBhcyBkaWZmZXJlbnQgZnJvbSBhXG4gICAgICAgIC8vIGRheSB3aGVuIHdvcmtpbmcgYXJvdW5kIERTVCwgd2UgbmVlZCB0byBzdG9yZSB0aGVtIHNlcGFyYXRlbHlcbiAgICAgICAgdGhpcy5fZGF5cyA9ICtkYXlzICsgd2Vla3MgKiA3O1xuICAgICAgICAvLyBJdCBpcyBpbXBvc3NpYmxlIHRvIHRyYW5zbGF0ZSBtb250aHMgaW50byBkYXlzIHdpdGhvdXQga25vd2luZ1xuICAgICAgICAvLyB3aGljaCBtb250aHMgeW91IGFyZSBhcmUgdGFsa2luZyBhYm91dCwgc28gd2UgaGF2ZSB0byBzdG9yZVxuICAgICAgICAvLyBpdCBzZXBhcmF0ZWx5LlxuICAgICAgICB0aGlzLl9tb250aHMgPSArbW9udGhzICsgcXVhcnRlcnMgKiAzICsgeWVhcnMgKiAxMjtcblxuICAgICAgICB0aGlzLl9kYXRhID0ge307XG5cbiAgICAgICAgdGhpcy5fbG9jYWxlID0gZ2V0TG9jYWxlKCk7XG5cbiAgICAgICAgdGhpcy5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIER1cmF0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic1JvdW5kKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoLTEgKiBudW1iZXIpICogLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29tcGFyZSB0d28gYXJyYXlzLCByZXR1cm4gdGhlIG51bWJlciBvZiBkaWZmZXJlbmNlc1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVBcnJheXMoYXJyYXkxLCBhcnJheTIsIGRvbnRDb252ZXJ0KSB7XG4gICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcnJheTEubGVuZ3RoLCBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGxlbmd0aERpZmYgPSBNYXRoLmFicyhhcnJheTEubGVuZ3RoIC0gYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBkaWZmcyA9IDAsXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZG9udENvbnZlcnQgJiYgYXJyYXkxW2ldICE9PSBhcnJheTJbaV0pIHx8XG4gICAgICAgICAgICAgICAgKCFkb250Q29udmVydCAmJiB0b0ludChhcnJheTFbaV0pICE9PSB0b0ludChhcnJheTJbaV0pKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGlmZnMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlmZnMgKyBsZW5ndGhEaWZmO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIG9mZnNldCh0b2tlbiwgc2VwYXJhdG9yKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy51dGNPZmZzZXQoKSxcbiAgICAgICAgICAgICAgICBzaWduID0gJysnO1xuICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHNpZ24gPSAnLSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHNpZ24gK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+KG9mZnNldCAvIDYwKSwgMikgK1xuICAgICAgICAgICAgICAgIHNlcGFyYXRvciArXG4gICAgICAgICAgICAgICAgemVyb0ZpbGwofn5vZmZzZXQgJSA2MCwgMilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9mZnNldCgnWicsICc6Jyk7XG4gICAgb2Zmc2V0KCdaWicsICcnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1onLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRSZWdleFRva2VuKCdaWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydaJywgJ1paJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX3VzZVVUQyA9IHRydWU7XG4gICAgICAgIGNvbmZpZy5fdHptID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyB0aW1lem9uZSBjaHVua2VyXG4gICAgLy8gJysxMDowMCcgPiBbJzEwJywgICcwMCddXG4gICAgLy8gJy0xNTMwJyAgPiBbJy0xNScsICczMCddXG4gICAgdmFyIGNodW5rT2Zmc2V0ID0gLyhbXFwrXFwtXXxcXGRcXGQpL2dpO1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaGVyLCBzdHJpbmcpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSAoc3RyaW5nIHx8ICcnKS5tYXRjaChtYXRjaGVyKSxcbiAgICAgICAgICAgIGNodW5rLFxuICAgICAgICAgICAgcGFydHMsXG4gICAgICAgICAgICBtaW51dGVzO1xuXG4gICAgICAgIGlmIChtYXRjaGVzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNodW5rID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdIHx8IFtdO1xuICAgICAgICBwYXJ0cyA9IChjaHVuayArICcnKS5tYXRjaChjaHVua09mZnNldCkgfHwgWyctJywgMCwgMF07XG4gICAgICAgIG1pbnV0ZXMgPSArKHBhcnRzWzFdICogNjApICsgdG9JbnQocGFydHNbMl0pO1xuXG4gICAgICAgIHJldHVybiBtaW51dGVzID09PSAwID8gMCA6IHBhcnRzWzBdID09PSAnKycgPyBtaW51dGVzIDogLW1pbnV0ZXM7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGEgbW9tZW50IGZyb20gaW5wdXQsIHRoYXQgaXMgbG9jYWwvdXRjL3pvbmUgZXF1aXZhbGVudCB0byBtb2RlbC5cbiAgICBmdW5jdGlvbiBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIG1vZGVsKSB7XG4gICAgICAgIHZhciByZXMsIGRpZmY7XG4gICAgICAgIGlmIChtb2RlbC5faXNVVEMpIHtcbiAgICAgICAgICAgIHJlcyA9IG1vZGVsLmNsb25lKCk7XG4gICAgICAgICAgICBkaWZmID1cbiAgICAgICAgICAgICAgICAoaXNNb21lbnQoaW5wdXQpIHx8IGlzRGF0ZShpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dC52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgOiBjcmVhdGVMb2NhbChpbnB1dCkudmFsdWVPZigpKSAtIHJlcy52YWx1ZU9mKCk7XG4gICAgICAgICAgICAvLyBVc2UgbG93LWxldmVsIGFwaSwgYmVjYXVzZSB0aGlzIGZuIGlzIGxvdy1sZXZlbCBhcGkuXG4gICAgICAgICAgICByZXMuX2Quc2V0VGltZShyZXMuX2QudmFsdWVPZigpICsgZGlmZik7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQocmVzLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0KS5sb2NhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF0ZU9mZnNldChtKSB7XG4gICAgICAgIC8vIE9uIEZpcmVmb3guMjQgRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIGEgZmxvYXRpbmcgcG9pbnQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L3B1bGwvMTg3MVxuICAgICAgICByZXR1cm4gLU1hdGgucm91bmQobS5fZC5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBhIG1vbWVudCBpcyBtdXRhdGVkLlxuICAgIC8vIEl0IGlzIGludGVuZGVkIHRvIGtlZXAgdGhlIG9mZnNldCBpbiBzeW5jIHdpdGggdGhlIHRpbWV6b25lLlxuICAgIGhvb2tzLnVwZGF0ZU9mZnNldCA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgLy8ga2VlcExvY2FsVGltZSA9IHRydWUgbWVhbnMgb25seSBjaGFuZ2UgdGhlIHRpbWV6b25lLCB3aXRob3V0XG4gICAgLy8gYWZmZWN0aW5nIHRoZSBsb2NhbCBob3VyLiBTbyA1OjMxOjI2ICswMzAwIC0tW3V0Y09mZnNldCgyLCB0cnVlKV0tLT5cbiAgICAvLyA1OjMxOjI2ICswMjAwIEl0IGlzIHBvc3NpYmxlIHRoYXQgNTozMToyNiBkb2Vzbid0IGV4aXN0IHdpdGggb2Zmc2V0XG4gICAgLy8gKzAyMDAsIHNvIHdlIGFkanVzdCB0aGUgdGltZSBhcyBuZWVkZWQsIHRvIGJlIHZhbGlkLlxuICAgIC8vXG4gICAgLy8gS2VlcGluZyB0aGUgdGltZSBhY3R1YWxseSBhZGRzL3N1YnRyYWN0cyAob25lIGhvdXIpXG4gICAgLy8gZnJvbSB0aGUgYWN0dWFsIHJlcHJlc2VudGVkIHRpbWUuIFRoYXQgaXMgd2h5IHdlIGNhbGwgdXBkYXRlT2Zmc2V0XG4gICAgLy8gYSBzZWNvbmQgdGltZS4gSW4gY2FzZSBpdCB3YW50cyB1cyB0byBjaGFuZ2UgdGhlIG9mZnNldCBhZ2FpblxuICAgIC8vIF9jaGFuZ2VJblByb2dyZXNzID09IHRydWUgY2FzZSwgdGhlbiB3ZSBoYXZlIHRvIGFkanVzdCwgYmVjYXVzZVxuICAgIC8vIHRoZXJlIGlzIG5vIHN1Y2ggdGltZSBpbiB0aGUgZ2l2ZW4gdGltZXpvbmUuXG4gICAgZnVuY3Rpb24gZ2V0U2V0T2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lLCBrZWVwTWludXRlcykge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0IHx8IDAsXG4gICAgICAgICAgICBsb2NhbEFkanVzdDtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoaW5wdXQpIDwgMTYgJiYgIWtlZXBNaW51dGVzKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dCAqIDYwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1VUQyAmJiBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxBZGp1c3QgPSBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gaW5wdXQ7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IHRydWU7XG4gICAgICAgICAgICBpZiAobG9jYWxBZGp1c3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGxvY2FsQWRqdXN0LCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWtlZXBMb2NhbFRpbWUgfHwgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICBhZGRTdWJ0cmFjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEdXJhdGlvbihpbnB1dCAtIG9mZnNldCwgJ20nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyBvZmZzZXQgOiBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0Wm9uZShpbnB1dCwga2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IC1pbnB1dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAtdGhpcy51dGNPZmZzZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvVVRDKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvTG9jYWwoa2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAodGhpcy5faXNVVEMpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnRyYWN0KGdldERhdGVPZmZzZXQodGhpcyksICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2kgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YXIgdFpvbmUgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoT2Zmc2V0LCB0aGlzLl9pKTtcbiAgICAgICAgICAgIGlmICh0Wm9uZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodFpvbmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNBbGlnbmVkSG91ck9mZnNldChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQgPSBpbnB1dCA/IGNyZWF0ZUxvY2FsKGlucHV0KS51dGNPZmZzZXQoKSA6IDA7XG5cbiAgICAgICAgcmV0dXJuICh0aGlzLnV0Y09mZnNldCgpIC0gaW5wdXQpICUgNjAgPT09IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpIHx8XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkKCkge1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX2lzRFNUU2hpZnRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYyA9IHt9LFxuICAgICAgICAgICAgb3RoZXI7XG5cbiAgICAgICAgY29weUNvbmZpZyhjLCB0aGlzKTtcbiAgICAgICAgYyA9IHByZXBhcmVDb25maWcoYyk7XG5cbiAgICAgICAgaWYgKGMuX2EpIHtcbiAgICAgICAgICAgIG90aGVyID0gYy5faXNVVEMgPyBjcmVhdGVVVEMoYy5fYSkgOiBjcmVhdGVMb2NhbChjLl9hKTtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9XG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiYgY29tcGFyZUFycmF5cyhjLl9hLCBvdGhlci50b0FycmF5KCkpID4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xvY2FsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyAhdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0Y09mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0YygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgJiYgdGhpcy5fb2Zmc2V0ID09PSAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQVNQLk5FVCBqc29uIGRhdGUgZm9ybWF0IHJlZ2V4XG4gICAgdmFyIGFzcE5ldFJlZ2V4ID0gL14oLXxcXCspPyg/OihcXGQqKVsuIF0pPyhcXGQrKTooXFxkKykoPzo6KFxcZCspKFxcLlxcZCopPyk/JC8sXG4gICAgICAgIC8vIGZyb20gaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9jbG9zdXJlX2dvb2dfZGF0ZV9kYXRlLmpzLnNvdXJjZS5odG1sXG4gICAgICAgIC8vIHNvbWV3aGF0IG1vcmUgaW4gbGluZSB3aXRoIDQuNC4zLjIgMjAwNCBzcGVjLCBidXQgYWxsb3dzIGRlY2ltYWwgYW55d2hlcmVcbiAgICAgICAgLy8gYW5kIGZ1cnRoZXIgbW9kaWZpZWQgdG8gYWxsb3cgZm9yIHN0cmluZ3MgY29udGFpbmluZyBib3RoIHdlZWsgYW5kIGRheVxuICAgICAgICBpc29SZWdleCA9XG4gICAgICAgICAgICAvXigtfFxcKyk/UCg/OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRHVyYXRpb24oaW5wdXQsIGtleSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBpbnB1dCxcbiAgICAgICAgICAgIC8vIG1hdGNoaW5nIGFnYWluc3QgcmVnZXhwIGlzIGV4cGVuc2l2ZSwgZG8gaXQgb24gZGVtYW5kXG4gICAgICAgICAgICBtYXRjaCA9IG51bGwsXG4gICAgICAgICAgICBzaWduLFxuICAgICAgICAgICAgcmV0LFxuICAgICAgICAgICAgZGlmZlJlcztcblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIG1zOiBpbnB1dC5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgICAgIGQ6IGlucHV0Ll9kYXlzLFxuICAgICAgICAgICAgICAgIE06IGlucHV0Ll9tb250aHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSB8fCAhaXNOYU4oK2lucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbltrZXldID0gK2lucHV0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi5taWxsaXNlY29uZHMgPSAraW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gYXNwTmV0UmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICAgICAgZDogdG9JbnQobWF0Y2hbREFURV0pICogc2lnbixcbiAgICAgICAgICAgICAgICBoOiB0b0ludChtYXRjaFtIT1VSXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG06IHRvSW50KG1hdGNoW01JTlVURV0pICogc2lnbixcbiAgICAgICAgICAgICAgICBzOiB0b0ludChtYXRjaFtTRUNPTkRdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbXM6IHRvSW50KGFic1JvdW5kKG1hdGNoW01JTExJU0VDT05EXSAqIDEwMDApKSAqIHNpZ24sIC8vIHRoZSBtaWxsaXNlY29uZCBkZWNpbWFsIHBvaW50IGlzIGluY2x1ZGVkIGluIHRoZSBtYXRjaFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBpc29SZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSBtYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeTogcGFyc2VJc28obWF0Y2hbMl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIE06IHBhcnNlSXNvKG1hdGNoWzNdLCBzaWduKSxcbiAgICAgICAgICAgICAgICB3OiBwYXJzZUlzbyhtYXRjaFs0XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgZDogcGFyc2VJc28obWF0Y2hbNV0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGg6IHBhcnNlSXNvKG1hdGNoWzZdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBtOiBwYXJzZUlzbyhtYXRjaFs3XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgczogcGFyc2VJc28obWF0Y2hbOF0sIHNpZ24pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChkdXJhdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGR1cmF0aW9uID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgKCdmcm9tJyBpbiBkdXJhdGlvbiB8fCAndG8nIGluIGR1cmF0aW9uKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGRpZmZSZXMgPSBtb21lbnRzRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbChkdXJhdGlvbi5mcm9tKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbChkdXJhdGlvbi50bylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBkdXJhdGlvbi5tcyA9IGRpZmZSZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgZHVyYXRpb24uTSA9IGRpZmZSZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0ID0gbmV3IER1cmF0aW9uKGR1cmF0aW9uKTtcblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19sb2NhbGUnKSkge1xuICAgICAgICAgICAgcmV0Ll9sb2NhbGUgPSBpbnB1dC5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfaXNWYWxpZCcpKSB7XG4gICAgICAgICAgICByZXQuX2lzVmFsaWQgPSBpbnB1dC5faXNWYWxpZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgY3JlYXRlRHVyYXRpb24uZm4gPSBEdXJhdGlvbi5wcm90b3R5cGU7XG4gICAgY3JlYXRlRHVyYXRpb24uaW52YWxpZCA9IGNyZWF0ZUludmFsaWQkMTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvKGlucCwgc2lnbikge1xuICAgICAgICAvLyBXZSdkIG5vcm1hbGx5IHVzZSB+fmlucCBmb3IgdGhpcywgYnV0IHVuZm9ydHVuYXRlbHkgaXQgYWxzb1xuICAgICAgICAvLyBjb252ZXJ0cyBmbG9hdHMgdG8gaW50cy5cbiAgICAgICAgLy8gaW5wIG1heSBiZSB1bmRlZmluZWQsIHNvIGNhcmVmdWwgY2FsbGluZyByZXBsYWNlIG9uIGl0LlxuICAgICAgICB2YXIgcmVzID0gaW5wICYmIHBhcnNlRmxvYXQoaW5wLnJlcGxhY2UoJywnLCAnLicpKTtcbiAgICAgICAgLy8gYXBwbHkgc2lnbiB3aGlsZSB3ZSdyZSBhdCBpdFxuICAgICAgICByZXR1cm4gKGlzTmFOKHJlcykgPyAwIDogcmVzKSAqIHNpZ247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzID0ge307XG5cbiAgICAgICAgcmVzLm1vbnRocyA9XG4gICAgICAgICAgICBvdGhlci5tb250aCgpIC0gYmFzZS5tb250aCgpICsgKG90aGVyLnllYXIoKSAtIGJhc2UueWVhcigpKSAqIDEyO1xuICAgICAgICBpZiAoYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpLmlzQWZ0ZXIob3RoZXIpKSB7XG4gICAgICAgICAgICAtLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gK290aGVyIC0gK2Jhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIGlmICghKGJhc2UuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG1pbGxpc2Vjb25kczogMCwgbW9udGhzOiAwIH07XG4gICAgICAgIH1cblxuICAgICAgICBvdGhlciA9IGNsb25lV2l0aE9mZnNldChvdGhlciwgYmFzZSk7XG4gICAgICAgIGlmIChiYXNlLmlzQmVmb3JlKG90aGVyKSkge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKG90aGVyLCBiYXNlKTtcbiAgICAgICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSAtcmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIHJlcy5tb250aHMgPSAtcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogcmVtb3ZlICduYW1lJyBhcmcgYWZ0ZXIgZGVwcmVjYXRpb24gaXMgcmVtb3ZlZFxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFkZGVyKGRpcmVjdGlvbiwgbmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgZHVyLCB0bXA7XG4gICAgICAgICAgICAvL2ludmVydCB0aGUgYXJndW1lbnRzLCBidXQgY29tcGxhaW4gYWJvdXQgaXRcbiAgICAgICAgICAgIGlmIChwZXJpb2QgIT09IG51bGwgJiYgIWlzTmFOKCtwZXJpb2QpKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAnbW9tZW50KCkuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcocGVyaW9kLCBudW1iZXIpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbW9tZW50KCkuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcobnVtYmVyLCBwZXJpb2QpLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdG1wID0gdmFsO1xuICAgICAgICAgICAgICAgIHZhbCA9IHBlcmlvZDtcbiAgICAgICAgICAgICAgICBwZXJpb2QgPSB0bXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGR1ciA9IGNyZWF0ZUR1cmF0aW9uKHZhbCwgcGVyaW9kKTtcbiAgICAgICAgICAgIGFkZFN1YnRyYWN0KHRoaXMsIGR1ciwgZGlyZWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0KG1vbSwgZHVyYXRpb24sIGlzQWRkaW5nLCB1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gYWJzUm91bmQoZHVyYXRpb24uX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzUm91bmQoZHVyYXRpb24uX21vbnRocyk7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0ID09IG51bGwgPyB0cnVlIDogdXBkYXRlT2Zmc2V0O1xuXG4gICAgICAgIGlmIChtb250aHMpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKG1vbSwgZ2V0KG1vbSwgJ01vbnRoJykgKyBtb250aHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRheXMpIHtcbiAgICAgICAgICAgIHNldCQxKG1vbSwgJ0RhdGUnLCBnZXQobW9tLCAnRGF0ZScpICsgZGF5cyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgICAgICBtb20uX2Quc2V0VGltZShtb20uX2QudmFsdWVPZigpICsgbWlsbGlzZWNvbmRzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChtb20sIGRheXMgfHwgbW9udGhzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBhZGQgPSBjcmVhdGVBZGRlcigxLCAnYWRkJyksXG4gICAgICAgIHN1YnRyYWN0ID0gY3JlYXRlQWRkZXIoLTEsICdzdWJ0cmFjdCcpO1xuXG4gICAgZnVuY3Rpb24gaXNTdHJpbmcoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gdHlwZSBNb21lbnRJbnB1dCA9IE1vbWVudCB8IERhdGUgfCBzdHJpbmcgfCBudW1iZXIgfCAobnVtYmVyIHwgc3RyaW5nKVtdIHwgTW9tZW50SW5wdXRPYmplY3QgfCB2b2lkOyAvLyBudWxsIHwgdW5kZWZpbmVkXG4gICAgZnVuY3Rpb24gaXNNb21lbnRJbnB1dChpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaXNNb21lbnQoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc0RhdGUoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc1N0cmluZyhpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNOdW1iZXJPclN0cmluZ0FycmF5KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNNb21lbnRJbnB1dE9iamVjdChpbnB1dCkgfHxcbiAgICAgICAgICAgIGlucHV0ID09PSBudWxsIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNNb21lbnRJbnB1dE9iamVjdChpbnB1dCkge1xuICAgICAgICB2YXIgb2JqZWN0VGVzdCA9IGlzT2JqZWN0KGlucHV0KSAmJiAhaXNPYmplY3RFbXB0eShpbnB1dCksXG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgICAgICAgJ3llYXJzJyxcbiAgICAgICAgICAgICAgICAneWVhcicsXG4gICAgICAgICAgICAgICAgJ3knLFxuICAgICAgICAgICAgICAgICdtb250aHMnLFxuICAgICAgICAgICAgICAgICdtb250aCcsXG4gICAgICAgICAgICAgICAgJ00nLFxuICAgICAgICAgICAgICAgICdkYXlzJyxcbiAgICAgICAgICAgICAgICAnZGF5JyxcbiAgICAgICAgICAgICAgICAnZCcsXG4gICAgICAgICAgICAgICAgJ2RhdGVzJyxcbiAgICAgICAgICAgICAgICAnZGF0ZScsXG4gICAgICAgICAgICAgICAgJ0QnLFxuICAgICAgICAgICAgICAgICdob3VycycsXG4gICAgICAgICAgICAgICAgJ2hvdXInLFxuICAgICAgICAgICAgICAgICdoJyxcbiAgICAgICAgICAgICAgICAnbWludXRlcycsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICAgICAgICAgJ20nLFxuICAgICAgICAgICAgICAgICdzZWNvbmRzJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kJyxcbiAgICAgICAgICAgICAgICAncycsXG4gICAgICAgICAgICAgICAgJ21pbGxpc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgICAgICAgICAnbXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIHByb3BlcnR5TGVuID0gcHJvcGVydGllcy5sZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnR5TGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXJPclN0cmluZ0FycmF5KGlucHV0KSB7XG4gICAgICAgIHZhciBhcnJheVRlc3QgPSBpc0FycmF5KGlucHV0KSxcbiAgICAgICAgICAgIGRhdGFUeXBlVGVzdCA9IGZhbHNlO1xuICAgICAgICBpZiAoYXJyYXlUZXN0KSB7XG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPVxuICAgICAgICAgICAgICAgIGlucHV0LmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWlzTnVtYmVyKGl0ZW0pICYmIGlzU3RyaW5nKGlucHV0KTtcbiAgICAgICAgICAgICAgICB9KS5sZW5ndGggPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5VGVzdCAmJiBkYXRhVHlwZVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNDYWxlbmRhclNwZWMoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICdzYW1lRGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dERheScsXG4gICAgICAgICAgICAgICAgJ2xhc3REYXknLFxuICAgICAgICAgICAgICAgICduZXh0V2VlaycsXG4gICAgICAgICAgICAgICAgJ2xhc3RXZWVrJyxcbiAgICAgICAgICAgICAgICAnc2FtZUVsc2UnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwcm9wZXJ0eTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gcHJvcGVydHlUZXN0IHx8IGhhc093blByb3AoaW5wdXQsIHByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmplY3RUZXN0ICYmIHByb3BlcnR5VGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDYWxlbmRhckZvcm1hdChteU1vbWVudCwgbm93KSB7XG4gICAgICAgIHZhciBkaWZmID0gbXlNb21lbnQuZGlmZihub3csICdkYXlzJywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBkaWZmIDwgLTZcbiAgICAgICAgICAgID8gJ3NhbWVFbHNlJ1xuICAgICAgICAgICAgOiBkaWZmIDwgLTFcbiAgICAgICAgICAgICAgPyAnbGFzdFdlZWsnXG4gICAgICAgICAgICAgIDogZGlmZiA8IDBcbiAgICAgICAgICAgICAgICA/ICdsYXN0RGF5J1xuICAgICAgICAgICAgICAgIDogZGlmZiA8IDFcbiAgICAgICAgICAgICAgICAgID8gJ3NhbWVEYXknXG4gICAgICAgICAgICAgICAgICA6IGRpZmYgPCAyXG4gICAgICAgICAgICAgICAgICAgID8gJ25leHREYXknXG4gICAgICAgICAgICAgICAgICAgIDogZGlmZiA8IDdcbiAgICAgICAgICAgICAgICAgICAgICA/ICduZXh0V2VlaydcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzYW1lRWxzZSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIkMSh0aW1lLCBmb3JtYXRzKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgZm9yIHNpbmdsZSBwYXJhbWV0ZXIsIGZvcm1hdHMgb25seSBvdmVybG9hZCB0byB0aGUgY2FsZW5kYXIgZnVuY3Rpb25cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmICghYXJndW1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc01vbWVudElucHV0KGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgICAgICAgICB0aW1lID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQ2FsZW5kYXJTcGVjKGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2Ugd2FudCB0byBjb21wYXJlIHRoZSBzdGFydCBvZiB0b2RheSwgdnMgdGhpcy5cbiAgICAgICAgLy8gR2V0dGluZyBzdGFydC1vZi10b2RheSBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgbG9jYWwvdXRjL29mZnNldCBvciBub3QuXG4gICAgICAgIHZhciBub3cgPSB0aW1lIHx8IGNyZWF0ZUxvY2FsKCksXG4gICAgICAgICAgICBzb2QgPSBjbG9uZVdpdGhPZmZzZXQobm93LCB0aGlzKS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGhvb2tzLmNhbGVuZGFyRm9ybWF0KHRoaXMsIHNvZCkgfHwgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgZm9ybWF0cyAmJlxuICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGZvcm1hdHNbZm9ybWF0XSlcbiAgICAgICAgICAgICAgICAgICAgPyBmb3JtYXRzW2Zvcm1hdF0uY2FsbCh0aGlzLCBub3cpXG4gICAgICAgICAgICAgICAgICAgIDogZm9ybWF0c1tmb3JtYXRdKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQoXG4gICAgICAgICAgICBvdXRwdXQgfHwgdGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoZm9ybWF0LCB0aGlzLCBjcmVhdGVMb2NhbChub3cpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IE1vbWVudCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA+IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsSW5wdXQudmFsdWVPZigpIDwgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmVmb3JlKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JldHdlZW4oZnJvbSwgdG8sIHVuaXRzLCBpbmNsdXNpdml0eSkge1xuICAgICAgICB2YXIgbG9jYWxGcm9tID0gaXNNb21lbnQoZnJvbSkgPyBmcm9tIDogY3JlYXRlTG9jYWwoZnJvbSksXG4gICAgICAgICAgICBsb2NhbFRvID0gaXNNb21lbnQodG8pID8gdG8gOiBjcmVhdGVMb2NhbCh0byk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsRnJvbS5pc1ZhbGlkKCkgJiYgbG9jYWxUby5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5jbHVzaXZpdHkgPSBpbmNsdXNpdml0eSB8fCAnKCknO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzBdID09PSAnKCdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNBZnRlcihsb2NhbEZyb20sIHVuaXRzKVxuICAgICAgICAgICAgICAgIDogIXRoaXMuaXNCZWZvcmUobG9jYWxGcm9tLCB1bml0cykpICYmXG4gICAgICAgICAgICAoaW5jbHVzaXZpdHlbMV0gPT09ICcpJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5pc0JlZm9yZShsb2NhbFRvLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQWZ0ZXIobG9jYWxUbywgdW5pdHMpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KSxcbiAgICAgICAgICAgIGlucHV0TXM7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID09PSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0TXMgPSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKSA8PSBpbnB1dE1zICYmXG4gICAgICAgICAgICAgICAgaW5wdXRNcyA8PSB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQWZ0ZXIoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNBZnRlcihpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQmVmb3JlKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQmVmb3JlKGlucHV0LCB1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlmZihpbnB1dCwgdW5pdHMsIGFzRmxvYXQpIHtcbiAgICAgICAgdmFyIHRoYXQsIHpvbmVEZWx0YSwgb3V0cHV0O1xuXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB0aGF0ID0gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCB0aGlzKTtcblxuICAgICAgICBpZiAoIXRoYXQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgem9uZURlbHRhID0gKHRoYXQudXRjT2Zmc2V0KCkgLSB0aGlzLnV0Y09mZnNldCgpKSAqIDZlNDtcblxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAxMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMWUzO1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwXG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyA2ZTQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwXG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCwgbmVnYXRlIGRzdFxuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDYwNDhlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCAqIDcsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gdGhpcyAtIHRoYXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXNGbG9hdCA/IG91dHB1dCA6IGFic0Zsb29yKG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhEaWZmKGEsIGIpIHtcbiAgICAgICAgaWYgKGEuZGF0ZSgpIDwgYi5kYXRlKCkpIHtcbiAgICAgICAgICAgIC8vIGVuZC1vZi1tb250aCBjYWxjdWxhdGlvbnMgd29yayBjb3JyZWN0IHdoZW4gdGhlIHN0YXJ0IG1vbnRoIGhhcyBtb3JlXG4gICAgICAgICAgICAvLyBkYXlzIHRoYW4gdGhlIGVuZCBtb250aC5cbiAgICAgICAgICAgIHJldHVybiAtbW9udGhEaWZmKGIsIGEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRpZmZlcmVuY2UgaW4gbW9udGhzXG4gICAgICAgIHZhciB3aG9sZU1vbnRoRGlmZiA9IChiLnllYXIoKSAtIGEueWVhcigpKSAqIDEyICsgKGIubW9udGgoKSAtIGEubW9udGgoKSksXG4gICAgICAgICAgICAvLyBiIGlzIGluIChhbmNob3IgLSAxIG1vbnRoLCBhbmNob3IgKyAxIG1vbnRoKVxuICAgICAgICAgICAgYW5jaG9yID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiwgJ21vbnRocycpLFxuICAgICAgICAgICAgYW5jaG9yMixcbiAgICAgICAgICAgIGFkanVzdDtcblxuICAgICAgICBpZiAoYiAtIGFuY2hvciA8IDApIHtcbiAgICAgICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmIC0gMSwgJ21vbnRocycpO1xuICAgICAgICAgICAgLy8gbGluZWFyIGFjcm9zcyB0aGUgbW9udGhcbiAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IgLSBhbmNob3IyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmICsgMSwgJ21vbnRocycpO1xuICAgICAgICAgICAgLy8gbGluZWFyIGFjcm9zcyB0aGUgbW9udGhcbiAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IyIC0gYW5jaG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8sIHJldHVybiB6ZXJvIGlmIG5lZ2F0aXZlIHplcm9cbiAgICAgICAgcmV0dXJuIC0od2hvbGVNb250aERpZmYgKyBhZGp1c3QpIHx8IDA7XG4gICAgfVxuXG4gICAgaG9va3MuZGVmYXVsdEZvcm1hdCA9ICdZWVlZLU1NLUREVEhIOm1tOnNzWic7XG4gICAgaG9va3MuZGVmYXVsdEZvcm1hdFV0YyA9ICdZWVlZLU1NLUREVEhIOm1tOnNzW1pdJztcblxuICAgIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmxvY2FsZSgnZW4nKS5mb3JtYXQoJ2RkZCBNTU0gREQgWVlZWSBISDptbTpzcyBbR01UXVpaJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmcoa2VlcE9mZnNldCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXRjID0ga2VlcE9mZnNldCAhPT0gdHJ1ZSxcbiAgICAgICAgICAgIG0gPSB1dGMgPyB0aGlzLmNsb25lKCkudXRjKCkgOiB0aGlzO1xuICAgICAgICBpZiAobS55ZWFyKCkgPCAwIHx8IG0ueWVhcigpID4gOTk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgICAgICBtLFxuICAgICAgICAgICAgICAgIHV0Y1xuICAgICAgICAgICAgICAgICAgICA/ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nXG4gICAgICAgICAgICAgICAgICAgIDogJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKSkge1xuICAgICAgICAgICAgLy8gbmF0aXZlIGltcGxlbWVudGF0aW9uIGlzIH41MHggZmFzdGVyLCB1c2UgaXQgd2hlbiB3ZSBjYW5cbiAgICAgICAgICAgIGlmICh1dGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkgKyB0aGlzLnV0Y09mZnNldCgpICogNjAgKiAxMDAwKVxuICAgICAgICAgICAgICAgICAgICAudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnWicsIGZvcm1hdE1vbWVudChtLCAnWicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KFxuICAgICAgICAgICAgbSxcbiAgICAgICAgICAgIHV0YyA/ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWidcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBodW1hbiByZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIG1vbWVudCB0aGF0IGNhblxuICAgICAqIGFsc28gYmUgZXZhbHVhdGVkIHRvIGdldCBhIG5ldyBtb21lbnQgd2hpY2ggaXMgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEBsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9kaXN0L2xhdGVzdC9kb2NzL2FwaS91dGlsLmh0bWwjdXRpbF9jdXN0b21faW5zcGVjdF9mdW5jdGlvbl9vbl9vYmplY3RzXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdtb21lbnQuaW52YWxpZCgvKiAnICsgdGhpcy5faSArICcgKi8pJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZnVuYyA9ICdtb21lbnQnLFxuICAgICAgICAgICAgem9uZSA9ICcnLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgIGRhdGV0aW1lLFxuICAgICAgICAgICAgc3VmZml4O1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2NhbCgpKSB7XG4gICAgICAgICAgICBmdW5jID0gdGhpcy51dGNPZmZzZXQoKSA9PT0gMCA/ICdtb21lbnQudXRjJyA6ICdtb21lbnQucGFyc2Vab25lJztcbiAgICAgICAgICAgIHpvbmUgPSAnWic7XG4gICAgICAgIH1cbiAgICAgICAgcHJlZml4ID0gJ1snICsgZnVuYyArICcoXCJdJztcbiAgICAgICAgeWVhciA9IDAgPD0gdGhpcy55ZWFyKCkgJiYgdGhpcy55ZWFyKCkgPD0gOTk5OSA/ICdZWVlZJyA6ICdZWVlZWVknO1xuICAgICAgICBkYXRldGltZSA9ICctTU0tRERbVF1ISDptbTpzcy5TU1MnO1xuICAgICAgICBzdWZmaXggPSB6b25lICsgJ1tcIildJztcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQocHJlZml4ICsgeWVhciArIGRhdGV0aW1lICsgc3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQoaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgaWYgKCFpbnB1dFN0cmluZykge1xuICAgICAgICAgICAgaW5wdXRTdHJpbmcgPSB0aGlzLmlzVXRjKClcbiAgICAgICAgICAgICAgICA/IGhvb2tzLmRlZmF1bHRGb3JtYXRVdGNcbiAgICAgICAgICAgICAgICA6IGhvb2tzLmRlZmF1bHRGb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdE1vbWVudCh0aGlzLCBpbnB1dFN0cmluZyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbSh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fCBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHsgdG86IHRoaXMsIGZyb206IHRpbWUgfSlcbiAgICAgICAgICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKCkpXG4gICAgICAgICAgICAgICAgLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbU5vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZyb20oY3JlYXRlTG9jYWwoKSwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG8odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IGZyb206IHRoaXMsIHRvOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvTm93KHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG8oY3JlYXRlTG9jYWwoKSwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgLy8gSWYgcGFzc2VkIGEgbG9jYWxlIGtleSwgaXQgd2lsbCBzZXQgdGhlIGxvY2FsZSBmb3IgdGhpc1xuICAgIC8vIGluc3RhbmNlLiAgT3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiB0aGUgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbiAgICAvLyB2YXJpYWJsZXMgZm9yIHRoaXMgaW5zdGFuY2UuXG4gICAgZnVuY3Rpb24gbG9jYWxlKGtleSkge1xuICAgICAgICB2YXIgbmV3TG9jYWxlRGF0YTtcblxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMb2NhbGVEYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobmV3TG9jYWxlRGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9jYWxlID0gbmV3TG9jYWxlRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLicsXG4gICAgICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICB2YXIgTVNfUEVSX1NFQ09ORCA9IDEwMDAsXG4gICAgICAgIE1TX1BFUl9NSU5VVEUgPSA2MCAqIE1TX1BFUl9TRUNPTkQsXG4gICAgICAgIE1TX1BFUl9IT1VSID0gNjAgKiBNU19QRVJfTUlOVVRFLFxuICAgICAgICBNU19QRVJfNDAwX1lFQVJTID0gKDM2NSAqIDQwMCArIDk3KSAqIDI0ICogTVNfUEVSX0hPVVI7XG5cbiAgICAvLyBhY3R1YWwgbW9kdWxvIC0gaGFuZGxlcyBuZWdhdGl2ZSBudW1iZXJzIChmb3IgZGF0ZXMgYmVmb3JlIDE5NzApOlxuICAgIGZ1bmN0aW9uIG1vZCQxKGRpdmlkZW5kLCBkaXZpc29yKSB7XG4gICAgICAgIHJldHVybiAoKGRpdmlkZW5kICUgZGl2aXNvcikgKyBkaXZpc29yKSAlIGRpdmlzb3I7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHksIG0sIGQpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHV0Y1N0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gRGF0ZS5VVEMgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSwgbSwgZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGFydE9mKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lLCBzdGFydE9mRGF0ZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgMCwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCkgLSAodGhpcy5tb250aCgpICUgMyksXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc29XZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgdGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksXG4gICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZE9mKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lLCBzdGFydE9mRGF0ZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSArIDEsIDAsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpICsgMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkgKyAxLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KCkgKyA3XG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkgKyAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPVxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUiAtXG4gICAgICAgICAgICAgICAgICAgIG1vZCQxKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksXG4gICAgICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICAgICApIC1cbiAgICAgICAgICAgICAgICAgICAgMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz0gTVNfUEVSX01JTlVURSAtIG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz0gTVNfUEVSX1NFQ09ORCAtIG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWx1ZU9mKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCkgLSAodGhpcy5fb2Zmc2V0IHx8IDApICogNjAwMDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5peCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkgLyAxMDAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0RhdGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9BcnJheSgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbS55ZWFyKCksXG4gICAgICAgICAgICBtLm1vbnRoKCksXG4gICAgICAgICAgICBtLmRhdGUoKSxcbiAgICAgICAgICAgIG0uaG91cigpLFxuICAgICAgICAgICAgbS5taW51dGUoKSxcbiAgICAgICAgICAgIG0uc2Vjb25kKCksXG4gICAgICAgICAgICBtLm1pbGxpc2Vjb25kKCksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9PYmplY3QoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXJzOiBtLnllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoczogbS5tb250aCgpLFxuICAgICAgICAgICAgZGF0ZTogbS5kYXRlKCksXG4gICAgICAgICAgICBob3VyczogbS5ob3VycygpLFxuICAgICAgICAgICAgbWludXRlczogbS5taW51dGVzKCksXG4gICAgICAgICAgICBzZWNvbmRzOiBtLnNlY29uZHMoKSxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogbS5taWxsaXNlY29uZHMoKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgIC8vIG5ldyBEYXRlKE5hTikudG9KU09OKCkgPT09IG51bGxcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy50b0lTT1N0cmluZygpIDogbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDIoKSB7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZCh7fSwgZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkQXQoKSB7XG4gICAgICAgIHJldHVybiBnZXRQYXJzaW5nRmxhZ3ModGhpcykub3ZlcmZsb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRpb25EYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5wdXQ6IHRoaXMuX2ksXG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMuX2YsXG4gICAgICAgICAgICBsb2NhbGU6IHRoaXMuX2xvY2FsZSxcbiAgICAgICAgICAgIGlzVVRDOiB0aGlzLl9pc1VUQyxcbiAgICAgICAgICAgIHN0cmljdDogdGhpcy5fc3RyaWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdOJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk4nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk4nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk5OJywgMCwgMCwgJ2VyYU5hbWUnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTk4nLCAwLCAwLCAnZXJhTmFycm93Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneScsIDFdLCAneW8nLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eScsIDJdLCAwLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eXknLCAzXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5eScsIDRdLCAwLCAnZXJhWWVhcicpO1xuXG4gICAgYWRkUmVnZXhUb2tlbignTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OTicsIG1hdGNoRXJhTmFtZSk7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OTk4nLCBtYXRjaEVyYU5hcnJvdyk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFxuICAgICAgICBbJ04nLCAnTk4nLCAnTk5OJywgJ05OTk4nLCAnTk5OTk4nXSxcbiAgICAgICAgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgdmFyIGVyYSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgICAgIGlmIChlcmEpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmEgPSBlcmE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRFcmEgPSBpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBhZGRSZWdleFRva2VuKCd5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneW8nLCBtYXRjaEVyYVllYXJPcmRpbmFsKTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWyd5JywgJ3l5JywgJ3l5eScsICd5eXl5J10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWyd5byddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtYXRjaDtcbiAgICAgICAgaWYgKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KSB7XG4gICAgICAgICAgICBtYXRjaCA9IGlucHV0Lm1hdGNoKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UoaW5wdXQsIG1hdGNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhcyhtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLl9lcmFzIHx8IGdldExvY2FsZSgnZW4nKS5fZXJhcztcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS5zaW5jZSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0uc2luY2UgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gK0luZmluaXR5O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBob29rcyhlcmFzW2ldLnVudGlsKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0udW50aWwgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVyYXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhc1BhcnNlKGVyYU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBhYmJyLFxuICAgICAgICAgICAgbmFycm93O1xuICAgICAgICBlcmFOYW1lID0gZXJhTmFtZS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgbmFtZSA9IGVyYXNbaV0ubmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgYWJiciA9IGVyYXNbaV0uYWJici50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgbmFycm93ID0gZXJhc1tpXS5uYXJyb3cudG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ04nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJiciA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hcnJvdyA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChbbmFtZSwgYWJiciwgbmFycm93XS5pbmRleE9mKGVyYU5hbWUpID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNDb252ZXJ0WWVhcihlcmEsIHllYXIpIHtcbiAgICAgICAgdmFyIGRpciA9IGVyYS5zaW5jZSA8PSBlcmEudW50aWwgPyArMSA6IC0xO1xuICAgICAgICBpZiAoeWVhciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaG9va3MoZXJhLnNpbmNlKS55ZWFyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaG9va3MoZXJhLnNpbmNlKS55ZWFyKCkgKyAoeWVhciAtIGVyYS5vZmZzZXQpICogZGlyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFtZSgpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFOYXJyb3coKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFycm93O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFycm93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYUFiYnIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhWWVhcigpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZGlyLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBkaXIgPSBlcmFzW2ldLnNpbmNlIDw9IGVyYXNbaV0udW50aWwgPyArMSA6IC0xO1xuXG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB8fFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnllYXIoKSAtIGhvb2tzKGVyYXNbaV0uc2luY2UpLnllYXIoKSkgKiBkaXIgK1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLm9mZnNldFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hbWVSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFtZVJlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzTmFtZVJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc0FiYnJSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc0FiYnJSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hcnJvd1JlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzTmFycm93UmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFBYmJyKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzQWJiclJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hbWUoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhTmFycm93KGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhWWVhck9yZGluYWwoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4IHx8IG1hdGNoVW5zaWduZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZUVyYXNQYXJzZSgpIHtcbiAgICAgICAgdmFyIGFiYnJQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG5hbWVQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG5hcnJvd1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZXJhc05hbWUsXG4gICAgICAgICAgICBlcmFzQWJicixcbiAgICAgICAgICAgIGVyYXNOYXJyb3csXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCk7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBlcmFzTmFtZSA9IHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFtZSk7XG4gICAgICAgICAgICBlcmFzQWJiciA9IHJlZ2V4RXNjYXBlKGVyYXNbaV0uYWJicik7XG4gICAgICAgICAgICBlcmFzTmFycm93ID0gcmVnZXhFc2NhcGUoZXJhc1tpXS5uYXJyb3cpO1xuXG4gICAgICAgICAgICBuYW1lUGllY2VzLnB1c2goZXJhc05hbWUpO1xuICAgICAgICAgICAgYWJiclBpZWNlcy5wdXNoKGVyYXNBYmJyKTtcbiAgICAgICAgICAgIG5hcnJvd1BpZWNlcy5wdXNoKGVyYXNOYXJyb3cpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzTmFtZSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNBYmJyKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc05hcnJvdyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lcmFzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNOYW1lUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBuYW1lUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc0FiYnJSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIGFiYnJQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFycm93UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIG5hcnJvd1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ2dnJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnR0cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1llYXJGb3JtYXRUb2tlbih0b2tlbiwgZ2V0dGVyKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKDAsIFt0b2tlbiwgdG9rZW4ubGVuZ3RoXSwgMCwgZ2V0dGVyKTtcbiAgICB9XG5cbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZ2cnLCAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHR0cnLCAnaXNvV2Vla1llYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignZycsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdHRycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdnZycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHR0cnLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZ2cnLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihcbiAgICAgICAgWydnZ2dnJywgJ2dnZ2dnJywgJ0dHR0cnLCAnR0dHR0cnXSxcbiAgICAgICAgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAyKV0gPSB0b0ludChpbnB1dCk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZycsICdHRyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0U2V0V2Vla1llYXJIZWxwZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIHRoaXMud2VlaygpLFxuICAgICAgICAgICAgdGhpcy53ZWVrZGF5KCkgKyB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csXG4gICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csXG4gICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3lcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrWWVhcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0U2V0V2Vla1llYXJIZWxwZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIHRoaXMuaXNvV2VlaygpLFxuICAgICAgICAgICAgdGhpcy5pc29XZWVrZGF5KCksXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgNFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldElTT1dlZWtzSW5ZZWFyKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldElTT1dlZWtzSW5JU09XZWVrWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMuaXNvV2Vla1llYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJblllYXIoKSB7XG4gICAgICAgIHZhciB3ZWVrSW5mbyA9IHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIHdlZWtJbmZvLmRvdywgd2Vla0luZm8uZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXZWVrc0luV2Vla1llYXIoKSB7XG4gICAgICAgIHZhciB3ZWVrSW5mbyA9IHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy53ZWVrWWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXJIZWxwZXIoaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrc1RhcmdldDtcbiAgICAgICAgaWYgKGlucHV0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKHRoaXMsIGRvdywgZG95KS55ZWFyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2Vla3NUYXJnZXQgPSB3ZWVrc0luWWVhcihpbnB1dCwgZG93LCBkb3kpO1xuICAgICAgICAgICAgaWYgKHdlZWsgPiB3ZWVrc1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHdlZWsgPSB3ZWVrc1RhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZXRXZWVrQWxsLmNhbGwodGhpcywgaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFdlZWtBbGwod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXJEYXRhID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZShkYXlPZlllYXJEYXRhLnllYXIsIDAsIGRheU9mWWVhckRhdGEuZGF5T2ZZZWFyKTtcblxuICAgICAgICB0aGlzLnllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpKTtcbiAgICAgICAgdGhpcy5tb250aChkYXRlLmdldFVUQ01vbnRoKCkpO1xuICAgICAgICB0aGlzLmRhdGUoZGF0ZS5nZXRVVENEYXRlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUScsIDAsICdRbycsICdxdWFydGVyJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdRJywgbWF0Y2gxKTtcbiAgICBhZGRQYXJzZVRva2VuKCdRJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSAodG9JbnQoaW5wdXQpIC0gMSkgKiAzO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0UXVhcnRlcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbFxuICAgICAgICAgICAgPyBNYXRoLmNlaWwoKHRoaXMubW9udGgoKSArIDEpIC8gMylcbiAgICAgICAgICAgIDogdGhpcy5tb250aCgoaW5wdXQgLSAxKSAqIDMgKyAodGhpcy5tb250aCgpICUgMykpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdEJywgWydERCcsIDJdLCAnRG8nLCAnZGF0ZScpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignREQnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignRG8nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHJldHVybiBpc1N0cmljdFxuICAgICAgICAgICAgPyBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2UgfHwgbG9jYWxlLl9vcmRpbmFsUGFyc2VcbiAgICAgICAgICAgIDogbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudDtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydEJywgJ0REJ10sIERBVEUpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtEQVRFXSA9IHRvSW50KGlucHV0Lm1hdGNoKG1hdGNoMXRvMilbMF0pO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldERheU9mTW9udGggPSBtYWtlR2V0U2V0KCdEYXRlJywgdHJ1ZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignREREJywgWydEREREJywgM10sICdERERvJywgJ2RheU9mWWVhcicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignREREJywgbWF0Y2gxdG8zKTtcbiAgICBhZGRSZWdleFRva2VuKCdEREREJywgbWF0Y2gzKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnREREJywgJ0REREQnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZZZWFyKGlucHV0KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXIgPVxuICAgICAgICAgICAgTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgICAodGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpIC0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ3llYXInKSkgLyA4NjRlNVxuICAgICAgICAgICAgKSArIDE7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gZGF5T2ZZZWFyIDogdGhpcy5hZGQoaW5wdXQgLSBkYXlPZlllYXIsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ20nLCBbJ21tJywgMl0sIDAsICdtaW51dGUnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ20nLCBtYXRjaDF0bzIsIG1hdGNoMXRvMkhhc1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ21tJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydtJywgJ21tJ10sIE1JTlVURSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0TWludXRlID0gbWFrZUdldFNldCgnTWludXRlcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdzJywgWydzcycsIDJdLCAwLCAnc2Vjb25kJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdzJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJIYXNaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdzcycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsncycsICdzcyddLCBTRUNPTkQpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFNlY29uZCA9IG1ha2VHZXRTZXQoJ1NlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTJywgM10sIDAsICdtaWxsaXNlY29uZCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTUycsIDRdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTJywgNV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTUycsIDZdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTUycsIDddLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTJywgOF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTUycsIDldLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDAwO1xuICAgIH0pO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUycsIG1hdGNoMXRvMywgbWF0Y2gxKTtcbiAgICBhZGRSZWdleFRva2VuKCdTUycsIG1hdGNoMXRvMywgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdTU1MnLCBtYXRjaDF0bzMsIG1hdGNoMyk7XG5cbiAgICB2YXIgdG9rZW4sIGdldFNldE1pbGxpc2Vjb25kO1xuICAgIGZvciAodG9rZW4gPSAnU1NTUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUmVnZXhUb2tlbih0b2tlbiwgbWF0Y2hVbnNpZ25lZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VNcyhpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTUlMTElTRUNPTkRdID0gdG9JbnQoKCcwLicgKyBpbnB1dCkgKiAxMDAwKTtcbiAgICB9XG5cbiAgICBmb3IgKHRva2VuID0gJ1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFBhcnNlVG9rZW4odG9rZW4sIHBhcnNlTXMpO1xuICAgIH1cblxuICAgIGdldFNldE1pbGxpc2Vjb25kID0gbWFrZUdldFNldCgnTWlsbGlzZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3onLCAwLCAwLCAnem9uZUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignenonLCAwLCAwLCAnem9uZU5hbWUnKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFpvbmVBYmJyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnVVRDJyA6ICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFpvbmVOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUnIDogJyc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvID0gTW9tZW50LnByb3RvdHlwZTtcblxuICAgIHByb3RvLmFkZCA9IGFkZDtcbiAgICBwcm90by5jYWxlbmRhciA9IGNhbGVuZGFyJDE7XG4gICAgcHJvdG8uY2xvbmUgPSBjbG9uZTtcbiAgICBwcm90by5kaWZmID0gZGlmZjtcbiAgICBwcm90by5lbmRPZiA9IGVuZE9mO1xuICAgIHByb3RvLmZvcm1hdCA9IGZvcm1hdDtcbiAgICBwcm90by5mcm9tID0gZnJvbTtcbiAgICBwcm90by5mcm9tTm93ID0gZnJvbU5vdztcbiAgICBwcm90by50byA9IHRvO1xuICAgIHByb3RvLnRvTm93ID0gdG9Ob3c7XG4gICAgcHJvdG8uZ2V0ID0gc3RyaW5nR2V0O1xuICAgIHByb3RvLmludmFsaWRBdCA9IGludmFsaWRBdDtcbiAgICBwcm90by5pc0FmdGVyID0gaXNBZnRlcjtcbiAgICBwcm90by5pc0JlZm9yZSA9IGlzQmVmb3JlO1xuICAgIHByb3RvLmlzQmV0d2VlbiA9IGlzQmV0d2VlbjtcbiAgICBwcm90by5pc1NhbWUgPSBpc1NhbWU7XG4gICAgcHJvdG8uaXNTYW1lT3JBZnRlciA9IGlzU2FtZU9yQWZ0ZXI7XG4gICAgcHJvdG8uaXNTYW1lT3JCZWZvcmUgPSBpc1NhbWVPckJlZm9yZTtcbiAgICBwcm90by5pc1ZhbGlkID0gaXNWYWxpZCQyO1xuICAgIHByb3RvLmxhbmcgPSBsYW5nO1xuICAgIHByb3RvLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBwcm90by5sb2NhbGVEYXRhID0gbG9jYWxlRGF0YTtcbiAgICBwcm90by5tYXggPSBwcm90b3R5cGVNYXg7XG4gICAgcHJvdG8ubWluID0gcHJvdG90eXBlTWluO1xuICAgIHByb3RvLnBhcnNpbmdGbGFncyA9IHBhcnNpbmdGbGFncztcbiAgICBwcm90by5zZXQgPSBzdHJpbmdTZXQ7XG4gICAgcHJvdG8uc3RhcnRPZiA9IHN0YXJ0T2Y7XG4gICAgcHJvdG8uc3VidHJhY3QgPSBzdWJ0cmFjdDtcbiAgICBwcm90by50b0FycmF5ID0gdG9BcnJheTtcbiAgICBwcm90by50b09iamVjdCA9IHRvT2JqZWN0O1xuICAgIHByb3RvLnRvRGF0ZSA9IHRvRGF0ZTtcbiAgICBwcm90by50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nO1xuICAgIHByb3RvLmluc3BlY3QgPSBpbnNwZWN0O1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuZm9yICE9IG51bGwpIHtcbiAgICAgICAgcHJvdG9bU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJ01vbWVudDwnICsgdGhpcy5mb3JtYXQoKSArICc+JztcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcHJvdG8udG9KU09OID0gdG9KU09OO1xuICAgIHByb3RvLnRvU3RyaW5nID0gdG9TdHJpbmc7XG4gICAgcHJvdG8udW5peCA9IHVuaXg7XG4gICAgcHJvdG8udmFsdWVPZiA9IHZhbHVlT2Y7XG4gICAgcHJvdG8uY3JlYXRpb25EYXRhID0gY3JlYXRpb25EYXRhO1xuICAgIHByb3RvLmVyYU5hbWUgPSBnZXRFcmFOYW1lO1xuICAgIHByb3RvLmVyYU5hcnJvdyA9IGdldEVyYU5hcnJvdztcbiAgICBwcm90by5lcmFBYmJyID0gZ2V0RXJhQWJicjtcbiAgICBwcm90by5lcmFZZWFyID0gZ2V0RXJhWWVhcjtcbiAgICBwcm90by55ZWFyID0gZ2V0U2V0WWVhcjtcbiAgICBwcm90by5pc0xlYXBZZWFyID0gZ2V0SXNMZWFwWWVhcjtcbiAgICBwcm90by53ZWVrWWVhciA9IGdldFNldFdlZWtZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtZZWFyID0gZ2V0U2V0SVNPV2Vla1llYXI7XG4gICAgcHJvdG8ucXVhcnRlciA9IHByb3RvLnF1YXJ0ZXJzID0gZ2V0U2V0UXVhcnRlcjtcbiAgICBwcm90by5tb250aCA9IGdldFNldE1vbnRoO1xuICAgIHByb3RvLmRheXNJbk1vbnRoID0gZ2V0RGF5c0luTW9udGg7XG4gICAgcHJvdG8ud2VlayA9IHByb3RvLndlZWtzID0gZ2V0U2V0V2VlaztcbiAgICBwcm90by5pc29XZWVrID0gcHJvdG8uaXNvV2Vla3MgPSBnZXRTZXRJU09XZWVrO1xuICAgIHByb3RvLndlZWtzSW5ZZWFyID0gZ2V0V2Vla3NJblllYXI7XG4gICAgcHJvdG8ud2Vla3NJbldlZWtZZWFyID0gZ2V0V2Vla3NJbldlZWtZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5ZZWFyID0gZ2V0SVNPV2Vla3NJblllYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJbklTT1dlZWtZZWFyID0gZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyO1xuICAgIHByb3RvLmRhdGUgPSBnZXRTZXREYXlPZk1vbnRoO1xuICAgIHByb3RvLmRheSA9IHByb3RvLmRheXMgPSBnZXRTZXREYXlPZldlZWs7XG4gICAgcHJvdG8ud2Vla2RheSA9IGdldFNldExvY2FsZURheU9mV2VlaztcbiAgICBwcm90by5pc29XZWVrZGF5ID0gZ2V0U2V0SVNPRGF5T2ZXZWVrO1xuICAgIHByb3RvLmRheU9mWWVhciA9IGdldFNldERheU9mWWVhcjtcbiAgICBwcm90by5ob3VyID0gcHJvdG8uaG91cnMgPSBnZXRTZXRIb3VyO1xuICAgIHByb3RvLm1pbnV0ZSA9IHByb3RvLm1pbnV0ZXMgPSBnZXRTZXRNaW51dGU7XG4gICAgcHJvdG8uc2Vjb25kID0gcHJvdG8uc2Vjb25kcyA9IGdldFNldFNlY29uZDtcbiAgICBwcm90by5taWxsaXNlY29uZCA9IHByb3RvLm1pbGxpc2Vjb25kcyA9IGdldFNldE1pbGxpc2Vjb25kO1xuICAgIHByb3RvLnV0Y09mZnNldCA9IGdldFNldE9mZnNldDtcbiAgICBwcm90by51dGMgPSBzZXRPZmZzZXRUb1VUQztcbiAgICBwcm90by5sb2NhbCA9IHNldE9mZnNldFRvTG9jYWw7XG4gICAgcHJvdG8ucGFyc2Vab25lID0gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQ7XG4gICAgcHJvdG8uaGFzQWxpZ25lZEhvdXJPZmZzZXQgPSBoYXNBbGlnbmVkSG91ck9mZnNldDtcbiAgICBwcm90by5pc0RTVCA9IGlzRGF5bGlnaHRTYXZpbmdUaW1lO1xuICAgIHByb3RvLmlzTG9jYWwgPSBpc0xvY2FsO1xuICAgIHByb3RvLmlzVXRjT2Zmc2V0ID0gaXNVdGNPZmZzZXQ7XG4gICAgcHJvdG8uaXNVdGMgPSBpc1V0YztcbiAgICBwcm90by5pc1VUQyA9IGlzVXRjO1xuICAgIHByb3RvLnpvbmVBYmJyID0gZ2V0Wm9uZUFiYnI7XG4gICAgcHJvdG8uem9uZU5hbWUgPSBnZXRab25lTmFtZTtcbiAgICBwcm90by5kYXRlcyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ2RhdGVzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYXRlIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0U2V0RGF5T2ZNb250aFxuICAgICk7XG4gICAgcHJvdG8ubW9udGhzID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkJyxcbiAgICAgICAgZ2V0U2V0TW9udGhcbiAgICApO1xuICAgIHByb3RvLnllYXJzID0gZGVwcmVjYXRlKFxuICAgICAgICAneWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCcsXG4gICAgICAgIGdldFNldFllYXJcbiAgICApO1xuICAgIHByb3RvLnpvbmUgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy96b25lLycsXG4gICAgICAgIGdldFNldFpvbmVcbiAgICApO1xuICAgIHByb3RvLmlzRFNUU2hpZnRlZCA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ2lzRFNUU2hpZnRlZCBpcyBkZXByZWNhdGVkLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kc3Qtc2hpZnRlZC8gZm9yIG1vcmUgaW5mb3JtYXRpb24nLFxuICAgICAgICBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWRcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlVW5peChpbnB1dCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoaW5wdXQgKiAxMDAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJblpvbmUoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpLnBhcnNlWm9uZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZVBhcnNlUG9zdEZvcm1hdChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8kMSA9IExvY2FsZS5wcm90b3R5cGU7XG5cbiAgICBwcm90byQxLmNhbGVuZGFyID0gY2FsZW5kYXI7XG4gICAgcHJvdG8kMS5sb25nRGF0ZUZvcm1hdCA9IGxvbmdEYXRlRm9ybWF0O1xuICAgIHByb3RvJDEuaW52YWxpZERhdGUgPSBpbnZhbGlkRGF0ZTtcbiAgICBwcm90byQxLm9yZGluYWwgPSBvcmRpbmFsO1xuICAgIHByb3RvJDEucHJlcGFyc2UgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5wb3N0Zm9ybWF0ID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucmVsYXRpdmVUaW1lID0gcmVsYXRpdmVUaW1lO1xuICAgIHByb3RvJDEucGFzdEZ1dHVyZSA9IHBhc3RGdXR1cmU7XG4gICAgcHJvdG8kMS5zZXQgPSBzZXQ7XG4gICAgcHJvdG8kMS5lcmFzID0gbG9jYWxlRXJhcztcbiAgICBwcm90byQxLmVyYXNQYXJzZSA9IGxvY2FsZUVyYXNQYXJzZTtcbiAgICBwcm90byQxLmVyYXNDb252ZXJ0WWVhciA9IGxvY2FsZUVyYXNDb252ZXJ0WWVhcjtcbiAgICBwcm90byQxLmVyYXNBYmJyUmVnZXggPSBlcmFzQWJiclJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hbWVSZWdleCA9IGVyYXNOYW1lUmVnZXg7XG4gICAgcHJvdG8kMS5lcmFzTmFycm93UmVnZXggPSBlcmFzTmFycm93UmVnZXg7XG5cbiAgICBwcm90byQxLm1vbnRocyA9IGxvY2FsZU1vbnRocztcbiAgICBwcm90byQxLm1vbnRoc1Nob3J0ID0gbG9jYWxlTW9udGhzU2hvcnQ7XG4gICAgcHJvdG8kMS5tb250aHNQYXJzZSA9IGxvY2FsZU1vbnRoc1BhcnNlO1xuICAgIHByb3RvJDEubW9udGhzUmVnZXggPSBtb250aHNSZWdleDtcbiAgICBwcm90byQxLm1vbnRoc1Nob3J0UmVnZXggPSBtb250aHNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2VlayA9IGxvY2FsZVdlZWs7XG4gICAgcHJvdG8kMS5maXJzdERheU9mWWVhciA9IGxvY2FsZUZpcnN0RGF5T2ZZZWFyO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZldlZWsgPSBsb2NhbGVGaXJzdERheU9mV2VlaztcblxuICAgIHByb3RvJDEud2Vla2RheXMgPSBsb2NhbGVXZWVrZGF5cztcbiAgICBwcm90byQxLndlZWtkYXlzTWluID0gbG9jYWxlV2Vla2RheXNNaW47XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0ID0gbG9jYWxlV2Vla2RheXNTaG9ydDtcbiAgICBwcm90byQxLndlZWtkYXlzUGFyc2UgPSBsb2NhbGVXZWVrZGF5c1BhcnNlO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5c1JlZ2V4ID0gd2Vla2RheXNSZWdleDtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnRSZWdleCA9IHdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWtkYXlzTWluUmVnZXggPSB3ZWVrZGF5c01pblJlZ2V4O1xuXG4gICAgcHJvdG8kMS5pc1BNID0gbG9jYWxlSXNQTTtcbiAgICBwcm90byQxLm1lcmlkaWVtID0gbG9jYWxlTWVyaWRpZW07XG5cbiAgICBmdW5jdGlvbiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgc2V0dGVyKSB7XG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHV0YyA9IGNyZWF0ZVVUQygpLnNldChzZXR0ZXIsIGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGxvY2FsZVtmaWVsZF0odXRjLCBmb3JtYXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCAnbW9udGgnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgb3V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIGksIGZpZWxkLCAnbW9udGgnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIC8vICgpXG4gICAgLy8gKDUpXG4gICAgLy8gKGZtdCwgNSlcbiAgICAvLyAoZm10KVxuICAgIC8vICh0cnVlKVxuICAgIC8vICh0cnVlLCA1KVxuICAgIC8vICh0cnVlLCBmbXQsIDUpXG4gICAgLy8gKHRydWUsIGZtdClcbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhbGVTb3J0ZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGxvY2FsZVNvcnRlZDtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgbG9jYWxlU29ydGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICBzaGlmdCA9IGxvY2FsZVNvcnRlZCA/IGxvY2FsZS5fd2Vlay5kb3cgOiAwLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCAoaW5kZXggKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCAoaSArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzKGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzU2hvcnQoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRoc1Nob3J0Jyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5cycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c1Nob3J0KGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5c1Nob3J0Jyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzTWluKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5c01pbicpO1xuICAgIH1cblxuICAgIGdldFNldEdsb2JhbExvY2FsZSgnZW4nLCB7XG4gICAgICAgIGVyYXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDEtMDEtMDEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiArSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdBbm5vIERvbWluaScsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQUQnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdBRCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMC0xMi0zMScsXG4gICAgICAgICAgICAgICAgdW50aWw6IC1JbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0JlZm9yZSBDaHJpc3QnLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0JDJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQkMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHRofHN0fG5kfHJkKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgdG9JbnQoKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFNpZGUgZWZmZWN0IGltcG9ydHNcblxuICAgIGhvb2tzLmxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldEdsb2JhbExvY2FsZVxuICAgICk7XG4gICAgaG9va3MubGFuZ0RhdGEgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQubGFuZ0RhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGVEYXRhIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0TG9jYWxlXG4gICAgKTtcblxuICAgIHZhciBtYXRoQWJzID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBhYnMoKSB7XG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPSBtYXRoQWJzKHRoaXMuX21pbGxpc2Vjb25kcyk7XG4gICAgICAgIHRoaXMuX2RheXMgPSBtYXRoQWJzKHRoaXMuX2RheXMpO1xuICAgICAgICB0aGlzLl9tb250aHMgPSBtYXRoQWJzKHRoaXMuX21vbnRocyk7XG5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtYXRoQWJzKGRhdGEubWlsbGlzZWNvbmRzKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gbWF0aEFicyhkYXRhLnNlY29uZHMpO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtYXRoQWJzKGRhdGEubWludXRlcyk7XG4gICAgICAgIGRhdGEuaG91cnMgPSBtYXRoQWJzKGRhdGEuaG91cnMpO1xuICAgICAgICBkYXRhLm1vbnRocyA9IG1hdGhBYnMoZGF0YS5tb250aHMpO1xuICAgICAgICBkYXRhLnllYXJzID0gbWF0aEFicyhkYXRhLnllYXJzKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdCQxKGR1cmF0aW9uLCBpbnB1dCwgdmFsdWUsIGRpcmVjdGlvbikge1xuICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVEdXJhdGlvbihpbnB1dCwgdmFsdWUpO1xuXG4gICAgICAgIGR1cmF0aW9uLl9taWxsaXNlY29uZHMgKz0gZGlyZWN0aW9uICogb3RoZXIuX21pbGxpc2Vjb25kcztcbiAgICAgICAgZHVyYXRpb24uX2RheXMgKz0gZGlyZWN0aW9uICogb3RoZXIuX2RheXM7XG4gICAgICAgIGR1cmF0aW9uLl9tb250aHMgKz0gZGlyZWN0aW9uICogb3RoZXIuX21vbnRocztcblxuICAgICAgICByZXR1cm4gZHVyYXRpb24uX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIGFkZCgxLCAncycpIG9yIGFkZChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBhZGQkMShpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAxKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBzdWJ0cmFjdCgxLCAncycpIG9yIHN1YnRyYWN0KGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIHN1YnRyYWN0JDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgLTEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0NlaWwobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnViYmxlKCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMsXG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMsXG4gICAgICAgICAgICBkYXRhID0gdGhpcy5fZGF0YSxcbiAgICAgICAgICAgIHNlY29uZHMsXG4gICAgICAgICAgICBtaW51dGVzLFxuICAgICAgICAgICAgaG91cnMsXG4gICAgICAgICAgICB5ZWFycyxcbiAgICAgICAgICAgIG1vbnRoc0Zyb21EYXlzO1xuXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBtaXggb2YgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcywgYnViYmxlIGRvd24gZmlyc3RcbiAgICAgICAgLy8gY2hlY2s6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yMTY2XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA+PSAwICYmIGRheXMgPj0gMCAmJiBtb250aHMgPj0gMCkgfHxcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzIDw9IDAgJiYgZGF5cyA8PSAwICYmIG1vbnRocyA8PSAwKVxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyArPSBhYnNDZWlsKG1vbnRoc1RvRGF5cyhtb250aHMpICsgZGF5cykgKiA4NjRlNTtcbiAgICAgICAgICAgIGRheXMgPSAwO1xuICAgICAgICAgICAgbW9udGhzID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBidWJibGVzIHVwIHZhbHVlcywgc2VlIHRoZSB0ZXN0cyBmb3JcbiAgICAgICAgLy8gZXhhbXBsZXMgb2Ygd2hhdCB0aGF0IG1lYW5zLlxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcyAlIDEwMDA7XG5cbiAgICAgICAgc2Vjb25kcyA9IGFic0Zsb29yKG1pbGxpc2Vjb25kcyAvIDEwMDApO1xuICAgICAgICBkYXRhLnNlY29uZHMgPSBzZWNvbmRzICUgNjA7XG5cbiAgICAgICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGRhdGEubWludXRlcyA9IG1pbnV0ZXMgJSA2MDtcblxuICAgICAgICBob3VycyA9IGFic0Zsb29yKG1pbnV0ZXMgLyA2MCk7XG4gICAgICAgIGRhdGEuaG91cnMgPSBob3VycyAlIDI0O1xuXG4gICAgICAgIGRheXMgKz0gYWJzRmxvb3IoaG91cnMgLyAyNCk7XG5cbiAgICAgICAgLy8gY29udmVydCBkYXlzIHRvIG1vbnRoc1xuICAgICAgICBtb250aHNGcm9tRGF5cyA9IGFic0Zsb29yKGRheXNUb01vbnRocyhkYXlzKSk7XG4gICAgICAgIG1vbnRocyArPSBtb250aHNGcm9tRGF5cztcbiAgICAgICAgZGF5cyAtPSBhYnNDZWlsKG1vbnRoc1RvRGF5cyhtb250aHNGcm9tRGF5cykpO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICBkYXRhLmRheXMgPSBkYXlzO1xuICAgICAgICBkYXRhLm1vbnRocyA9IG1vbnRocztcbiAgICAgICAgZGF0YS55ZWFycyA9IHllYXJzO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNUb01vbnRocyhkYXlzKSB7XG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDE0NjA5NyBkYXlzICh0YWtpbmcgaW50byBhY2NvdW50IGxlYXAgeWVhciBydWxlcylcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTIgbW9udGhzID09PSA0ODAwXG4gICAgICAgIHJldHVybiAoZGF5cyAqIDQ4MDApIC8gMTQ2MDk3O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1RvRGF5cyhtb250aHMpIHtcbiAgICAgICAgLy8gdGhlIHJldmVyc2Ugb2YgZGF5c1RvTW9udGhzXG4gICAgICAgIHJldHVybiAobW9udGhzICogMTQ2MDk3KSAvIDQ4MDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXModW5pdHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF5cyxcbiAgICAgICAgICAgIG1vbnRocyxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcztcblxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcblxuICAgICAgICBpZiAodW5pdHMgPT09ICdtb250aCcgfHwgdW5pdHMgPT09ICdxdWFydGVyJyB8fCB1bml0cyA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIG1pbGxpc2Vjb25kcyAvIDg2NGU1O1xuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzICsgZGF5c1RvTW9udGhzKGRheXMpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocztcbiAgICAgICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDM7XG4gICAgICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBtaWxsaXNlY29uZHMgc2VwYXJhdGVseSBiZWNhdXNlIG9mIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIChpc3N1ZSAjMTg2NylcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgTWF0aC5yb3VuZChtb250aHNUb0RheXModGhpcy5fbW9udGhzKSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzIC8gNyArIG1pbGxpc2Vjb25kcyAvIDYwNDhlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyArIG1pbGxpc2Vjb25kcyAvIDg2NGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDI0ICsgbWlsbGlzZWNvbmRzIC8gMzZlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDE0NDAgKyBtaWxsaXNlY29uZHMgLyA2ZTQ7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiA4NjQwMCArIG1pbGxpc2Vjb25kcyAvIDEwMDA7XG4gICAgICAgICAgICAgICAgLy8gTWF0aC5mbG9vciBwcmV2ZW50cyBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyBoZXJlXG4gICAgICAgICAgICAgICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihkYXlzICogODY0ZTUpICsgbWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biB1bml0ICcgKyB1bml0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlQXMoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzKGFsaWFzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgYXNNaWxsaXNlY29uZHMgPSBtYWtlQXMoJ21zJyksXG4gICAgICAgIGFzU2Vjb25kcyA9IG1ha2VBcygncycpLFxuICAgICAgICBhc01pbnV0ZXMgPSBtYWtlQXMoJ20nKSxcbiAgICAgICAgYXNIb3VycyA9IG1ha2VBcygnaCcpLFxuICAgICAgICBhc0RheXMgPSBtYWtlQXMoJ2QnKSxcbiAgICAgICAgYXNXZWVrcyA9IG1ha2VBcygndycpLFxuICAgICAgICBhc01vbnRocyA9IG1ha2VBcygnTScpLFxuICAgICAgICBhc1F1YXJ0ZXJzID0gbWFrZUFzKCdRJyksXG4gICAgICAgIGFzWWVhcnMgPSBtYWtlQXMoJ3knKSxcbiAgICAgICAgdmFsdWVPZiQxID0gYXNNaWxsaXNlY29uZHM7XG5cbiAgICBmdW5jdGlvbiBjbG9uZSQxKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24odGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0JDIodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXNbdW5pdHMgKyAncyddKCkgOiBOYU47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldHRlcihuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9kYXRhW25hbWVdIDogTmFOO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBtaWxsaXNlY29uZHMgPSBtYWtlR2V0dGVyKCdtaWxsaXNlY29uZHMnKSxcbiAgICAgICAgc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ3NlY29uZHMnKSxcbiAgICAgICAgbWludXRlcyA9IG1ha2VHZXR0ZXIoJ21pbnV0ZXMnKSxcbiAgICAgICAgaG91cnMgPSBtYWtlR2V0dGVyKCdob3VycycpLFxuICAgICAgICBkYXlzID0gbWFrZUdldHRlcignZGF5cycpLFxuICAgICAgICBtb250aHMgPSBtYWtlR2V0dGVyKCdtb250aHMnKSxcbiAgICAgICAgeWVhcnMgPSBtYWtlR2V0dGVyKCd5ZWFycycpO1xuXG4gICAgZnVuY3Rpb24gd2Vla3MoKSB7XG4gICAgICAgIHJldHVybiBhYnNGbG9vcih0aGlzLmRheXMoKSAvIDcpO1xuICAgIH1cblxuICAgIHZhciByb3VuZCA9IE1hdGgucm91bmQsXG4gICAgICAgIHRocmVzaG9sZHMgPSB7XG4gICAgICAgICAgICBzczogNDQsIC8vIGEgZmV3IHNlY29uZHMgdG8gc2Vjb25kc1xuICAgICAgICAgICAgczogNDUsIC8vIHNlY29uZHMgdG8gbWludXRlXG4gICAgICAgICAgICBtOiA0NSwgLy8gbWludXRlcyB0byBob3VyXG4gICAgICAgICAgICBoOiAyMiwgLy8gaG91cnMgdG8gZGF5XG4gICAgICAgICAgICBkOiAyNiwgLy8gZGF5cyB0byBtb250aC93ZWVrXG4gICAgICAgICAgICB3OiBudWxsLCAvLyB3ZWVrcyB0byBtb250aFxuICAgICAgICAgICAgTTogMTEsIC8vIG1vbnRocyB0byB5ZWFyXG4gICAgICAgIH07XG5cbiAgICAvLyBoZWxwZXIgZnVuY3Rpb24gZm9yIG1vbWVudC5mbi5mcm9tLCBtb21lbnQuZm4uZnJvbU5vdywgYW5kIG1vbWVudC5kdXJhdGlvbi5mbi5odW1hbml6ZVxuICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGVUaW1lQWdvKHN0cmluZywgbnVtYmVyLCB3aXRob3V0U3VmZml4LCBpc0Z1dHVyZSwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUucmVsYXRpdmVUaW1lKG51bWJlciB8fCAxLCAhIXdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZSQxKHBvc05lZ0R1cmF0aW9uLCB3aXRob3V0U3VmZml4LCB0aHJlc2hvbGRzLCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gY3JlYXRlRHVyYXRpb24ocG9zTmVnRHVyYXRpb24pLmFicygpLFxuICAgICAgICAgICAgc2Vjb25kcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdzJykpLFxuICAgICAgICAgICAgbWludXRlcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdtJykpLFxuICAgICAgICAgICAgaG91cnMgPSByb3VuZChkdXJhdGlvbi5hcygnaCcpKSxcbiAgICAgICAgICAgIGRheXMgPSByb3VuZChkdXJhdGlvbi5hcygnZCcpKSxcbiAgICAgICAgICAgIG1vbnRocyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdNJykpLFxuICAgICAgICAgICAgd2Vla3MgPSByb3VuZChkdXJhdGlvbi5hcygndycpKSxcbiAgICAgICAgICAgIHllYXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ3knKSksXG4gICAgICAgICAgICBhID1cbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8PSB0aHJlc2hvbGRzLnNzICYmIFsncycsIHNlY29uZHNdKSB8fFxuICAgICAgICAgICAgICAgIChzZWNvbmRzIDwgdGhyZXNob2xkcy5zICYmIFsnc3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8PSAxICYmIFsnbSddKSB8fFxuICAgICAgICAgICAgICAgIChtaW51dGVzIDwgdGhyZXNob2xkcy5tICYmIFsnbW0nLCBtaW51dGVzXSkgfHxcbiAgICAgICAgICAgICAgICAoaG91cnMgPD0gMSAmJiBbJ2gnXSkgfHxcbiAgICAgICAgICAgICAgICAoaG91cnMgPCB0aHJlc2hvbGRzLmggJiYgWydoaCcsIGhvdXJzXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8PSAxICYmIFsnZCddKSB8fFxuICAgICAgICAgICAgICAgIChkYXlzIDwgdGhyZXNob2xkcy5kICYmIFsnZGQnLCBkYXlzXSk7XG5cbiAgICAgICAgaWYgKHRocmVzaG9sZHMudyAhPSBudWxsKSB7XG4gICAgICAgICAgICBhID1cbiAgICAgICAgICAgICAgICBhIHx8XG4gICAgICAgICAgICAgICAgKHdlZWtzIDw9IDEgJiYgWyd3J10pIHx8XG4gICAgICAgICAgICAgICAgKHdlZWtzIDwgdGhyZXNob2xkcy53ICYmIFsnd3cnLCB3ZWVrc10pO1xuICAgICAgICB9XG4gICAgICAgIGEgPSBhIHx8XG4gICAgICAgICAgICAobW9udGhzIDw9IDEgJiYgWydNJ10pIHx8XG4gICAgICAgICAgICAobW9udGhzIDwgdGhyZXNob2xkcy5NICYmIFsnTU0nLCBtb250aHNdKSB8fFxuICAgICAgICAgICAgKHllYXJzIDw9IDEgJiYgWyd5J10pIHx8IFsneXknLCB5ZWFyc107XG5cbiAgICAgICAgYVsyXSA9IHdpdGhvdXRTdWZmaXg7XG4gICAgICAgIGFbM10gPSArcG9zTmVnRHVyYXRpb24gPiAwO1xuICAgICAgICBhWzRdID0gbG9jYWxlO1xuICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZVRpbWVBZ28uYXBwbHkobnVsbCwgYSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCB0aGUgcm91bmRpbmcgZnVuY3Rpb24gZm9yIHJlbGF0aXZlIHRpbWUgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nKHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKHJvdW5kaW5nRnVuY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygcm91bmRpbmdGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcm91bmQgPSByb3VuZGluZ0Z1bmN0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgYSB0aHJlc2hvbGQgZm9yIHJlbGF0aXZlIHRpbWUgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZCh0aHJlc2hvbGQsIGxpbWl0KSB7XG4gICAgICAgIGlmICh0aHJlc2hvbGRzW3RocmVzaG9sZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW1pdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyZXNob2xkc1t0aHJlc2hvbGRdO1xuICAgICAgICB9XG4gICAgICAgIHRocmVzaG9sZHNbdGhyZXNob2xkXSA9IGxpbWl0O1xuICAgICAgICBpZiAodGhyZXNob2xkID09PSAncycpIHtcbiAgICAgICAgICAgIHRocmVzaG9sZHMuc3MgPSBsaW1pdCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaHVtYW5pemUoYXJnV2l0aFN1ZmZpeCwgYXJnVGhyZXNob2xkcykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3aXRoU3VmZml4ID0gZmFsc2UsXG4gICAgICAgICAgICB0aCA9IHRocmVzaG9sZHMsXG4gICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdXaXRoU3VmZml4ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgYXJnVGhyZXNob2xkcyA9IGFyZ1dpdGhTdWZmaXg7XG4gICAgICAgICAgICBhcmdXaXRoU3VmZml4ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdXaXRoU3VmZml4ID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHdpdGhTdWZmaXggPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnVGhyZXNob2xkcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoID0gT2JqZWN0LmFzc2lnbih7fSwgdGhyZXNob2xkcywgYXJnVGhyZXNob2xkcyk7XG4gICAgICAgICAgICBpZiAoYXJnVGhyZXNob2xkcy5zICE9IG51bGwgJiYgYXJnVGhyZXNob2xkcy5zcyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGguc3MgPSBhcmdUaHJlc2hvbGRzLnMgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxlID0gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgIG91dHB1dCA9IHJlbGF0aXZlVGltZSQxKHRoaXMsICF3aXRoU3VmZml4LCB0aCwgbG9jYWxlKTtcblxuICAgICAgICBpZiAod2l0aFN1ZmZpeCkge1xuICAgICAgICAgICAgb3V0cHV0ID0gbG9jYWxlLnBhc3RGdXR1cmUoK3RoaXMsIG91dHB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbG9jYWxlLnBvc3Rmb3JtYXQob3V0cHV0KTtcbiAgICB9XG5cbiAgICB2YXIgYWJzJDEgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIHNpZ24oeCkge1xuICAgICAgICByZXR1cm4gKHggPiAwKSAtICh4IDwgMCkgfHwgK3g7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmckMSgpIHtcbiAgICAgICAgLy8gZm9yIElTTyBzdHJpbmdzIHdlIGRvIG5vdCB1c2UgdGhlIG5vcm1hbCBidWJibGluZyBydWxlczpcbiAgICAgICAgLy8gICogbWlsbGlzZWNvbmRzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSBob3Vyc1xuICAgICAgICAvLyAgKiBkYXlzIGRvIG5vdCBidWJibGUgYXQgYWxsXG4gICAgICAgIC8vICAqIG1vbnRocyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgeWVhcnNcbiAgICAgICAgLy8gVGhpcyBpcyBiZWNhdXNlIHRoZXJlIGlzIG5vIGNvbnRleHQtZnJlZSBjb252ZXJzaW9uIGJldHdlZW4gaG91cnMgYW5kIGRheXNcbiAgICAgICAgLy8gKHRoaW5rIG9mIGNsb2NrIGNoYW5nZXMpXG4gICAgICAgIC8vIGFuZCBhbHNvIG5vdCBiZXR3ZWVuIGRheXMgYW5kIG1vbnRocyAoMjgtMzEgZGF5cyBwZXIgbW9udGgpXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlY29uZHMgPSBhYnMkMSh0aGlzLl9taWxsaXNlY29uZHMpIC8gMTAwMCxcbiAgICAgICAgICAgIGRheXMgPSBhYnMkMSh0aGlzLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFicyQxKHRoaXMuX21vbnRocyksXG4gICAgICAgICAgICBtaW51dGVzLFxuICAgICAgICAgICAgaG91cnMsXG4gICAgICAgICAgICB5ZWFycyxcbiAgICAgICAgICAgIHMsXG4gICAgICAgICAgICB0b3RhbCA9IHRoaXMuYXNTZWNvbmRzKCksXG4gICAgICAgICAgICB0b3RhbFNpZ24sXG4gICAgICAgICAgICB5bVNpZ24sXG4gICAgICAgICAgICBkYXlzU2lnbixcbiAgICAgICAgICAgIGhtc1NpZ247XG5cbiAgICAgICAgaWYgKCF0b3RhbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBhcyBDIydzIChOb2RhKSBhbmQgcHl0aG9uIChpc29kYXRlKS4uLlxuICAgICAgICAgICAgLy8gYnV0IG5vdCBvdGhlciBKUyAoZ29vZy5kYXRlKVxuICAgICAgICAgICAgcmV0dXJuICdQMEQnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMzYwMCBzZWNvbmRzIC0+IDYwIG1pbnV0ZXMgLT4gMSBob3VyXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBob3VycyA9IGFic0Zsb29yKG1pbnV0ZXMgLyA2MCk7XG4gICAgICAgIHNlY29uZHMgJT0gNjA7XG4gICAgICAgIG1pbnV0ZXMgJT0gNjA7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIC8vIGluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9kb3JkaWxsZS9tb21lbnQtaXNvZHVyYXRpb24vYmxvYi9tYXN0ZXIvbW9tZW50Lmlzb2R1cmF0aW9uLmpzXG4gICAgICAgIHMgPSBzZWNvbmRzID8gc2Vjb25kcy50b0ZpeGVkKDMpLnJlcGxhY2UoL1xcLj8wKyQvLCAnJykgOiAnJztcblxuICAgICAgICB0b3RhbFNpZ24gPSB0b3RhbCA8IDAgPyAnLScgOiAnJztcbiAgICAgICAgeW1TaWduID0gc2lnbih0aGlzLl9tb250aHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBkYXlzU2lnbiA9IHNpZ24odGhpcy5fZGF5cykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIGhtc1NpZ24gPSBzaWduKHRoaXMuX21pbGxpc2Vjb25kcykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRvdGFsU2lnbiArXG4gICAgICAgICAgICAnUCcgK1xuICAgICAgICAgICAgKHllYXJzID8geW1TaWduICsgeWVhcnMgKyAnWScgOiAnJykgK1xuICAgICAgICAgICAgKG1vbnRocyA/IHltU2lnbiArIG1vbnRocyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoZGF5cyA/IGRheXNTaWduICsgZGF5cyArICdEJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgfHwgbWludXRlcyB8fCBzZWNvbmRzID8gJ1QnIDogJycpICtcbiAgICAgICAgICAgIChob3VycyA/IGhtc1NpZ24gKyBob3VycyArICdIJyA6ICcnKSArXG4gICAgICAgICAgICAobWludXRlcyA/IGhtc1NpZ24gKyBtaW51dGVzICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChzZWNvbmRzID8gaG1zU2lnbiArIHMgKyAnUycgOiAnJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8kMiA9IER1cmF0aW9uLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDIuaXNWYWxpZCA9IGlzVmFsaWQkMTtcbiAgICBwcm90byQyLmFicyA9IGFicztcbiAgICBwcm90byQyLmFkZCA9IGFkZCQxO1xuICAgIHByb3RvJDIuc3VidHJhY3QgPSBzdWJ0cmFjdCQxO1xuICAgIHByb3RvJDIuYXMgPSBhcztcbiAgICBwcm90byQyLmFzTWlsbGlzZWNvbmRzID0gYXNNaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5hc1NlY29uZHMgPSBhc1NlY29uZHM7XG4gICAgcHJvdG8kMi5hc01pbnV0ZXMgPSBhc01pbnV0ZXM7XG4gICAgcHJvdG8kMi5hc0hvdXJzID0gYXNIb3VycztcbiAgICBwcm90byQyLmFzRGF5cyA9IGFzRGF5cztcbiAgICBwcm90byQyLmFzV2Vla3MgPSBhc1dlZWtzO1xuICAgIHByb3RvJDIuYXNNb250aHMgPSBhc01vbnRocztcbiAgICBwcm90byQyLmFzUXVhcnRlcnMgPSBhc1F1YXJ0ZXJzO1xuICAgIHByb3RvJDIuYXNZZWFycyA9IGFzWWVhcnM7XG4gICAgcHJvdG8kMi52YWx1ZU9mID0gdmFsdWVPZiQxO1xuICAgIHByb3RvJDIuX2J1YmJsZSA9IGJ1YmJsZTtcbiAgICBwcm90byQyLmNsb25lID0gY2xvbmUkMTtcbiAgICBwcm90byQyLmdldCA9IGdldCQyO1xuICAgIHByb3RvJDIubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuc2Vjb25kcyA9IHNlY29uZHM7XG4gICAgcHJvdG8kMi5taW51dGVzID0gbWludXRlcztcbiAgICBwcm90byQyLmhvdXJzID0gaG91cnM7XG4gICAgcHJvdG8kMi5kYXlzID0gZGF5cztcbiAgICBwcm90byQyLndlZWtzID0gd2Vla3M7XG4gICAgcHJvdG8kMi5tb250aHMgPSBtb250aHM7XG4gICAgcHJvdG8kMi55ZWFycyA9IHllYXJzO1xuICAgIHByb3RvJDIuaHVtYW5pemUgPSBodW1hbml6ZTtcbiAgICBwcm90byQyLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvU3RyaW5nID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvSlNPTiA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8kMi5sb2NhbGVEYXRhID0gbG9jYWxlRGF0YTtcblxuICAgIHByb3RvJDIudG9Jc29TdHJpbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICd0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdG9JU09TdHJpbmcoKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKScsXG4gICAgICAgIHRvSVNPU3RyaW5nJDFcbiAgICApO1xuICAgIHByb3RvJDIubGFuZyA9IGxhbmc7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWCcsIDAsIDAsICd1bml4Jyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3gnLCAwLCAwLCAndmFsdWVPZicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigneCcsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdYJywgbWF0Y2hUaW1lc3RhbXApO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUocGFyc2VGbG9hdChpbnB1dCkgKiAxMDAwKTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCd4JywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHRvSW50KGlucHV0KSk7XG4gICAgfSk7XG5cbiAgICAvLyEgbW9tZW50LmpzXG5cbiAgICBob29rcy52ZXJzaW9uID0gJzIuMzAuMSc7XG5cbiAgICBzZXRIb29rQ2FsbGJhY2soY3JlYXRlTG9jYWwpO1xuXG4gICAgaG9va3MuZm4gPSBwcm90bztcbiAgICBob29rcy5taW4gPSBtaW47XG4gICAgaG9va3MubWF4ID0gbWF4O1xuICAgIGhvb2tzLm5vdyA9IG5vdztcbiAgICBob29rcy51dGMgPSBjcmVhdGVVVEM7XG4gICAgaG9va3MudW5peCA9IGNyZWF0ZVVuaXg7XG4gICAgaG9va3MubW9udGhzID0gbGlzdE1vbnRocztcbiAgICBob29rcy5pc0RhdGUgPSBpc0RhdGU7XG4gICAgaG9va3MubG9jYWxlID0gZ2V0U2V0R2xvYmFsTG9jYWxlO1xuICAgIGhvb2tzLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkO1xuICAgIGhvb2tzLmR1cmF0aW9uID0gY3JlYXRlRHVyYXRpb247XG4gICAgaG9va3MuaXNNb21lbnQgPSBpc01vbWVudDtcbiAgICBob29rcy53ZWVrZGF5cyA9IGxpc3RXZWVrZGF5cztcbiAgICBob29rcy5wYXJzZVpvbmUgPSBjcmVhdGVJblpvbmU7XG4gICAgaG9va3MubG9jYWxlRGF0YSA9IGdldExvY2FsZTtcbiAgICBob29rcy5pc0R1cmF0aW9uID0gaXNEdXJhdGlvbjtcbiAgICBob29rcy5tb250aHNTaG9ydCA9IGxpc3RNb250aHNTaG9ydDtcbiAgICBob29rcy53ZWVrZGF5c01pbiA9IGxpc3RXZWVrZGF5c01pbjtcbiAgICBob29rcy5kZWZpbmVMb2NhbGUgPSBkZWZpbmVMb2NhbGU7XG4gICAgaG9va3MudXBkYXRlTG9jYWxlID0gdXBkYXRlTG9jYWxlO1xuICAgIGhvb2tzLmxvY2FsZXMgPSBsaXN0TG9jYWxlcztcbiAgICBob29rcy53ZWVrZGF5c1Nob3J0ID0gbGlzdFdlZWtkYXlzU2hvcnQ7XG4gICAgaG9va3Mubm9ybWFsaXplVW5pdHMgPSBub3JtYWxpemVVbml0cztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVSb3VuZGluZyA9IGdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVRocmVzaG9sZCA9IGdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZDtcbiAgICBob29rcy5jYWxlbmRhckZvcm1hdCA9IGdldENhbGVuZGFyRm9ybWF0O1xuICAgIGhvb2tzLnByb3RvdHlwZSA9IHByb3RvO1xuXG4gICAgLy8gY3VycmVudGx5IEhUTUw1IGlucHV0IHR5cGUgb25seSBzdXBwb3J0cyAyNC1ob3VyIGZvcm1hdHNcbiAgICBob29rcy5IVE1MNV9GTVQgPSB7XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMOiAnWVlZWS1NTS1ERFRISDptbScsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiAnWVlZWS1NTS1ERFRISDptbTpzcycsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX01TOiAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgREFURTogJ1lZWVktTU0tREQnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGVcIiAvPlxuICAgICAgICBUSU1FOiAnSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiAvPlxuICAgICAgICBUSU1FX1NFQ09ORFM6ICdISDptbTpzcycsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgVElNRV9NUzogJ0hIOm1tOnNzLlNTUycsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIFdFRUs6ICdHR0dHLVtXXVdXJywgLy8gPGlucHV0IHR5cGU9XCJ3ZWVrXCIgLz5cbiAgICAgICAgTU9OVEg6ICdZWVlZLU1NJywgLy8gPGlucHV0IHR5cGU9XCJtb250aFwiIC8+XG4gICAgfTtcblxuICAgIHJldHVybiBob29rcztcblxufSkpKTtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3RyaW5nYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3RyaW5nLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTdHJpbmcoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTdHJpbmcoMSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8XG4gICAgKCFpc0FycmF5KHZhbHVlKSAmJiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN0cmluZ1RhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTdHJpbmc7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGJvb2xlYW4gcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJvb2xlYW4sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Jvb2xlYW4oZmFsc2UpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCb29sZWFuKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2UgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBib29sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Jvb2xlYW47XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTnVtYmVyYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqICoqTm90ZToqKiBUbyBleGNsdWRlIGBJbmZpbml0eWAsIGAtSW5maW5pdHlgLCBhbmQgYE5hTmAsIHdoaWNoIGFyZVxuICogY2xhc3NpZmllZCBhcyBudW1iZXJzLCB1c2UgdGhlIGBfLmlzRmluaXRlYCBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBudW1iZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc051bWJlcigzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOdW1iZXIoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBudW1iZXJUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTnVtYmVyO1xuIiwgInZhciBpc051bWJlciA9IHJlcXVpcmUoJy4vaXNOdW1iZXInKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgTmFOYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAqIFtgTnVtYmVyLmlzTmFOYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzTmFOKSBhbmQgaXMgbm90IHRoZSBzYW1lIGFzXG4gKiBnbG9iYWwgW2Bpc05hTmBdKGh0dHBzOi8vbWRuLmlvL2lzTmFOKSB3aGljaCByZXR1cm5zIGB0cnVlYCBmb3JcbiAqIGB1bmRlZmluZWRgIGFuZCBvdGhlciBub24tbnVtYmVyIHZhbHVlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTmFOKE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05hTihuZXcgTnVtYmVyKE5hTikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzTmFOKHVuZGVmaW5lZCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05hTih1bmRlZmluZWQpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOYU4odmFsdWUpIHtcbiAgLy8gQW4gYE5hTmAgcHJpbWl0aXZlIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi5cbiAgLy8gUGVyZm9ybSB0aGUgYHRvU3RyaW5nVGFnYCBjaGVjayBmaXJzdCB0byBhdm9pZCBlcnJvcnMgd2l0aCBzb21lXG4gIC8vIEFjdGl2ZVggb2JqZWN0cyBpbiBJRS5cbiAgcmV0dXJuIGlzTnVtYmVyKHZhbHVlKSAmJiB2YWx1ZSAhPSArdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNOYU47XG4iLCAiLyohIEBwcmVzZXJ2ZVxuICogbnVtZXJhbC5qc1xuICogdmVyc2lvbiA6IDIuMC42XG4gKiBhdXRob3IgOiBBZGFtIERyYXBlclxuICogbGljZW5zZSA6IE1JVFxuICogaHR0cDovL2FkYW13ZHJhcGVyLmdpdGh1Yi5jb20vTnVtZXJhbC1qcy9cbiAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ2xvYmFsLm51bWVyYWwgPSBmYWN0b3J5KCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICBWYXJpYWJsZXNcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICB2YXIgbnVtZXJhbCxcbiAgICAgICAgXyxcbiAgICAgICAgVkVSU0lPTiA9ICcyLjAuNicsXG4gICAgICAgIGZvcm1hdHMgPSB7fSxcbiAgICAgICAgbG9jYWxlcyA9IHt9LFxuICAgICAgICBkZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIGN1cnJlbnRMb2NhbGU6ICdlbicsXG4gICAgICAgICAgICB6ZXJvRm9ybWF0OiBudWxsLFxuICAgICAgICAgICAgbnVsbEZvcm1hdDogbnVsbCxcbiAgICAgICAgICAgIGRlZmF1bHRGb3JtYXQ6ICcwLDAnLFxuICAgICAgICAgICAgc2NhbGVQZXJjZW50QnkxMDA6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGN1cnJlbnRMb2NhbGU6IGRlZmF1bHRzLmN1cnJlbnRMb2NhbGUsXG4gICAgICAgICAgICB6ZXJvRm9ybWF0OiBkZWZhdWx0cy56ZXJvRm9ybWF0LFxuICAgICAgICAgICAgbnVsbEZvcm1hdDogZGVmYXVsdHMubnVsbEZvcm1hdCxcbiAgICAgICAgICAgIGRlZmF1bHRGb3JtYXQ6IGRlZmF1bHRzLmRlZmF1bHRGb3JtYXQsXG4gICAgICAgICAgICBzY2FsZVBlcmNlbnRCeTEwMDogZGVmYXVsdHMuc2NhbGVQZXJjZW50QnkxMDBcbiAgICAgICAgfTtcblxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICBDb25zdHJ1Y3RvcnNcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICAvLyBOdW1lcmFsIHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBOdW1lcmFsKGlucHV0LCBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcblxuICAgICAgICB0aGlzLl92YWx1ZSA9IG51bWJlcjtcbiAgICB9XG5cbiAgICBudW1lcmFsID0gZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIHZhbHVlLFxuICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgIHVuZm9ybWF0RnVuY3Rpb24sXG4gICAgICAgICAgICByZWdleHA7XG5cbiAgICAgICAgaWYgKG51bWVyYWwuaXNOdW1lcmFsKGlucHV0KSkge1xuICAgICAgICAgICAgdmFsdWUgPSBpbnB1dC52YWx1ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSAwIHx8IHR5cGVvZiBpbnB1dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gbnVsbCB8fCBfLmlzTmFOKGlucHV0KSkge1xuICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnplcm9Gb3JtYXQgJiYgaW5wdXQgPT09IG9wdGlvbnMuemVyb0Zvcm1hdCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5udWxsRm9ybWF0ICYmIGlucHV0ID09PSBvcHRpb25zLm51bGxGb3JtYXQgfHwgIWlucHV0LnJlcGxhY2UoL1teMC05XSsvZywgJycpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChraW5kIGluIGZvcm1hdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnZXhwID0gdHlwZW9mIGZvcm1hdHNba2luZF0ucmVnZXhwcy51bmZvcm1hdCA9PT0gJ2Z1bmN0aW9uJyA/IGZvcm1hdHNba2luZF0ucmVnZXhwcy51bmZvcm1hdCgpIDogZm9ybWF0c1traW5kXS5yZWdleHBzLnVuZm9ybWF0O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWdleHAgJiYgaW5wdXQubWF0Y2gocmVnZXhwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5mb3JtYXRGdW5jdGlvbiA9IGZvcm1hdHNba2luZF0udW5mb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdW5mb3JtYXRGdW5jdGlvbiA9IHVuZm9ybWF0RnVuY3Rpb24gfHwgbnVtZXJhbC5fLnN0cmluZ1RvTnVtYmVyO1xuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1bmZvcm1hdEZ1bmN0aW9uKGlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKGlucHV0KXx8IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE51bWVyYWwoaW5wdXQsIHZhbHVlKTtcbiAgICB9O1xuXG4gICAgLy8gdmVyc2lvbiBudW1iZXJcbiAgICBudW1lcmFsLnZlcnNpb24gPSBWRVJTSU9OO1xuXG4gICAgLy8gY29tcGFyZSBudW1lcmFsIG9iamVjdFxuICAgIG51bWVyYWwuaXNOdW1lcmFsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBOdW1lcmFsO1xuICAgIH07XG5cbiAgICAvLyBoZWxwZXIgZnVuY3Rpb25zXG4gICAgbnVtZXJhbC5fID0gXyA9IHtcbiAgICAgICAgLy8gZm9ybWF0cyBudW1iZXJzIHNlcGFyYXRvcnMsIGRlY2ltYWxzIHBsYWNlcywgc2lnbnMsIGFiYnJldmlhdGlvbnNcbiAgICAgICAgbnVtYmVyVG9Gb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBsb2NhbGVzW251bWVyYWwub3B0aW9ucy5jdXJyZW50TG9jYWxlXSxcbiAgICAgICAgICAgICAgICBuZWdQID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgb3B0RGVjID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgbGVhZGluZ0NvdW50ID0gMCxcbiAgICAgICAgICAgICAgICBhYmJyID0gJycsXG4gICAgICAgICAgICAgICAgdHJpbGxpb24gPSAxMDAwMDAwMDAwMDAwLFxuICAgICAgICAgICAgICAgIGJpbGxpb24gPSAxMDAwMDAwMDAwLFxuICAgICAgICAgICAgICAgIG1pbGxpb24gPSAxMDAwMDAwLFxuICAgICAgICAgICAgICAgIHRob3VzYW5kID0gMTAwMCxcbiAgICAgICAgICAgICAgICBkZWNpbWFsID0gJycsXG4gICAgICAgICAgICAgICAgbmVnID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgYWJickZvcmNlLCAvLyBmb3JjZSBhYmJyZXZpYXRpb25cbiAgICAgICAgICAgICAgICBhYnMsXG4gICAgICAgICAgICAgICAgbWluLFxuICAgICAgICAgICAgICAgIG1heCxcbiAgICAgICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgICAgICBpbnQsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uLFxuICAgICAgICAgICAgICAgIHNpZ25lZCxcbiAgICAgICAgICAgICAgICB0aG91c2FuZHMsXG4gICAgICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgbmV2ZXIgZm9ybWF0IGEgbnVsbCB2YWx1ZVxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSB8fCAwO1xuXG4gICAgICAgICAgICBhYnMgPSBNYXRoLmFicyh2YWx1ZSk7XG5cbiAgICAgICAgICAgIC8vIHNlZSBpZiB3ZSBzaG91bGQgdXNlIHBhcmVudGhlc2VzIGZvciBuZWdhdGl2ZSBudW1iZXIgb3IgaWYgd2Ugc2hvdWxkIHByZWZpeCB3aXRoIGEgc2lnblxuICAgICAgICAgICAgLy8gaWYgYm90aCBhcmUgcHJlc2VudCB3ZSBkZWZhdWx0IHRvIHBhcmVudGhlc2VzXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJygnKSkge1xuICAgICAgICAgICAgICAgIG5lZ1AgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9bXFwofFxcKV0vZywgJycpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnKycpIHx8IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICctJykpIHtcbiAgICAgICAgICAgICAgICBzaWduZWQgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnKycpID8gZm9ybWF0LmluZGV4T2YoJysnKSA6IHZhbHVlIDwgMCA/IGZvcm1hdC5pbmRleE9mKCctJykgOiAtMTtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvW1xcK3xcXC1dL2csICcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc2VlIGlmIGFiYnJldmlhdGlvbiBpcyB3YW50ZWRcbiAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnYScpKSB7XG4gICAgICAgICAgICAgICAgYWJickZvcmNlID0gZm9ybWF0Lm1hdGNoKC9hKGt8bXxifHQpPy8pO1xuXG4gICAgICAgICAgICAgICAgYWJickZvcmNlID0gYWJickZvcmNlID8gYWJickZvcmNlWzFdIDogZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlIGFiYnJldmlhdGlvblxuICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIGEnKSkge1xuICAgICAgICAgICAgICAgICAgICBhYmJyID0gJyAnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKG5ldyBSZWdFeHAoYWJiciArICdhW2ttYnRdPycpLCAnJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYWJzID49IHRyaWxsaW9uICYmICFhYmJyRm9yY2UgfHwgYWJickZvcmNlID09PSAndCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJpbGxpb25cbiAgICAgICAgICAgICAgICAgICAgYWJiciArPSBsb2NhbGUuYWJicmV2aWF0aW9ucy50cmlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIHRyaWxsaW9uO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWJzIDwgdHJpbGxpb24gJiYgYWJzID49IGJpbGxpb24gJiYgIWFiYnJGb3JjZSB8fCBhYmJyRm9yY2UgPT09ICdiJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBiaWxsaW9uXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMuYmlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIGJpbGxpb247XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhYnMgPCBiaWxsaW9uICYmIGFicyA+PSBtaWxsaW9uICYmICFhYmJyRm9yY2UgfHwgYWJickZvcmNlID09PSAnbScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbWlsbGlvblxuICAgICAgICAgICAgICAgICAgICBhYmJyICs9IGxvY2FsZS5hYmJyZXZpYXRpb25zLm1pbGxpb247XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyBtaWxsaW9uO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWJzIDwgbWlsbGlvbiAmJiBhYnMgPj0gdGhvdXNhbmQgJiYgIWFiYnJGb3JjZSB8fCBhYmJyRm9yY2UgPT09ICdrJykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aG91c2FuZFxuICAgICAgICAgICAgICAgICAgICBhYmJyICs9IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRob3VzYW5kO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gdGhvdXNhbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igb3B0aW9uYWwgZGVjaW1hbHNcbiAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnWy5dJykpIHtcbiAgICAgICAgICAgICAgICBvcHREZWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKCdbLl0nLCAnLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBicmVhayBudW1iZXIgYW5kIGZvcm1hdFxuICAgICAgICAgICAgaW50ID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpWzBdO1xuICAgICAgICAgICAgcHJlY2lzaW9uID0gZm9ybWF0LnNwbGl0KCcuJylbMV07XG4gICAgICAgICAgICB0aG91c2FuZHMgPSBmb3JtYXQuaW5kZXhPZignLCcpO1xuICAgICAgICAgICAgbGVhZGluZ0NvdW50ID0gKGZvcm1hdC5zcGxpdCgnLicpWzBdLnNwbGl0KCcsJylbMF0ubWF0Y2goLzAvZykgfHwgW10pLmxlbmd0aDtcblxuICAgICAgICAgICAgaWYgKHByZWNpc2lvbikge1xuICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMocHJlY2lzaW9uLCAnWycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbi5yZXBsYWNlKCddJywgJycpO1xuICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24uc3BsaXQoJ1snKTtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9IG51bWVyYWwuXy50b0ZpeGVkKHZhbHVlLCAocHJlY2lzaW9uWzBdLmxlbmd0aCArIHByZWNpc2lvblsxXS5sZW5ndGgpLCByb3VuZGluZ0Z1bmN0aW9uLCBwcmVjaXNpb25bMV0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gbnVtZXJhbC5fLnRvRml4ZWQodmFsdWUsIHByZWNpc2lvbi5sZW5ndGgsIHJvdW5kaW5nRnVuY3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGludCA9IGRlY2ltYWwuc3BsaXQoJy4nKVswXTtcblxuICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoZGVjaW1hbCwgJy4nKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gbG9jYWxlLmRlbGltaXRlcnMuZGVjaW1hbCArIGRlY2ltYWwuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG9wdERlYyAmJiBOdW1iZXIoZGVjaW1hbC5zbGljZSgxKSkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW50ID0gbnVtZXJhbC5fLnRvRml4ZWQodmFsdWUsIDAsIHJvdW5kaW5nRnVuY3Rpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjaGVjayBhYmJyZXZpYXRpb24gYWdhaW4gYWZ0ZXIgcm91bmRpbmdcbiAgICAgICAgICAgIGlmIChhYmJyICYmICFhYmJyRm9yY2UgJiYgTnVtYmVyKGludCkgPj0gMTAwMCAmJiBhYmJyICE9PSBsb2NhbGUuYWJicmV2aWF0aW9ucy50cmlsbGlvbikge1xuICAgICAgICAgICAgICAgIGludCA9IFN0cmluZyhOdW1iZXIoaW50KSAvIDEwMDApO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChhYmJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgbG9jYWxlLmFiYnJldmlhdGlvbnMudGhvdXNhbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBhYmJyID0gbG9jYWxlLmFiYnJldmlhdGlvbnMubWlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIGxvY2FsZS5hYmJyZXZpYXRpb25zLm1pbGxpb246XG4gICAgICAgICAgICAgICAgICAgICAgICBhYmJyID0gbG9jYWxlLmFiYnJldmlhdGlvbnMuYmlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIGxvY2FsZS5hYmJyZXZpYXRpb25zLmJpbGxpb246XG4gICAgICAgICAgICAgICAgICAgICAgICBhYmJyID0gbG9jYWxlLmFiYnJldmlhdGlvbnMudHJpbGxpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgLy8gZm9ybWF0IG51bWJlclxuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhpbnQsICctJykpIHtcbiAgICAgICAgICAgICAgICBpbnQgPSBpbnQuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgbmVnID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGludC5sZW5ndGggPCBsZWFkaW5nQ291bnQpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gbGVhZGluZ0NvdW50IC0gaW50Lmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBpbnQgPSAnMCcgKyBpbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhvdXNhbmRzID4gLTEpIHtcbiAgICAgICAgICAgICAgICBpbnQgPSBpbnQudG9TdHJpbmcoKS5yZXBsYWNlKC8oXFxkKSg/PShcXGR7M30pKyg/IVxcZCkpL2csICckMScgKyBsb2NhbGUuZGVsaW1pdGVycy50aG91c2FuZHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZm9ybWF0LmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGludCA9ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXRwdXQgPSBpbnQgKyBkZWNpbWFsICsgKGFiYnIgPyBhYmJyIDogJycpO1xuXG4gICAgICAgICAgICBpZiAobmVnUCkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IChuZWdQICYmIG5lZyA/ICcoJyA6ICcnKSArIG91dHB1dCArIChuZWdQICYmIG5lZyA/ICcpJyA6ICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHNpZ25lZCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHNpZ25lZCA9PT0gMCA/IChuZWcgPyAnLScgOiAnKycpICsgb3V0cHV0IDogb3V0cHV0ICsgKG5lZyA/ICctJyA6ICcrJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZWcpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJy0nICsgb3V0cHV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdW5mb3JtYXRzIG51bWJlcnMgc2VwYXJhdG9ycywgZGVjaW1hbHMgcGxhY2VzLCBzaWducywgYWJicmV2aWF0aW9uc1xuICAgICAgICBzdHJpbmdUb051bWJlcjogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gbG9jYWxlc1tvcHRpb25zLmN1cnJlbnRMb2NhbGVdLFxuICAgICAgICAgICAgICAgIHN0cmluZ09yaWdpbmFsID0gc3RyaW5nLFxuICAgICAgICAgICAgICAgIGFiYnJldmlhdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRob3VzYW5kOiAzLFxuICAgICAgICAgICAgICAgICAgICBtaWxsaW9uOiA2LFxuICAgICAgICAgICAgICAgICAgICBiaWxsaW9uOiA5LFxuICAgICAgICAgICAgICAgICAgICB0cmlsbGlvbjogMTJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFiYnJldmlhdGlvbixcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuemVyb0Zvcm1hdCAmJiBzdHJpbmcgPT09IG9wdGlvbnMuemVyb0Zvcm1hdCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5udWxsRm9ybWF0ICYmIHN0cmluZyA9PT0gb3B0aW9ucy5udWxsRm9ybWF0IHx8ICFzdHJpbmcucmVwbGFjZSgvW14wLTldKy9nLCAnJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IDE7XG5cbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlLmRlbGltaXRlcnMuZGVjaW1hbCAhPT0gJy4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXC4vZywgJycpLnJlcGxhY2UobG9jYWxlLmRlbGltaXRlcnMuZGVjaW1hbCwgJy4nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGFiYnJldmlhdGlvbiBpbiBhYmJyZXZpYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2V4cCA9IG5ldyBSZWdFeHAoJ1teYS16QS1aXScgKyBsb2NhbGUuYWJicmV2aWF0aW9uc1thYmJyZXZpYXRpb25dICsgJyg/OlxcXFwpfChcXFxcJyArIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wgKyAnKT8oPzpcXFxcKSk/KT8kJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ09yaWdpbmFsLm1hdGNoKHJlZ2V4cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICo9IE1hdGgucG93KDEwLCBhYmJyZXZpYXRpb25zW2FiYnJldmlhdGlvbl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgbmVnYXRpdmUgbnVtYmVyXG4gICAgICAgICAgICAgICAgdmFsdWUgKj0gKHN0cmluZy5zcGxpdCgnLScpLmxlbmd0aCArIE1hdGgubWluKHN0cmluZy5zcGxpdCgnKCcpLmxlbmd0aCAtIDEsIHN0cmluZy5zcGxpdCgnKScpLmxlbmd0aCAtIDEpKSAlIDIgPyAxIDogLTE7XG5cbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgbm9uIG51bWJlcnNcbiAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvW14wLTlcXC5dKy9nLCAnJyk7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSAqPSBOdW1iZXIoc3RyaW5nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBpc05hTjogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5jbHVkZXM6IGZ1bmN0aW9uKHN0cmluZywgc2VhcmNoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLmluZGV4T2Yoc2VhcmNoKSAhPT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydDogZnVuY3Rpb24oc3RyaW5nLCBzdWJTdHJpbmcsIHN0YXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnNsaWNlKDAsIHN0YXJ0KSArIHN1YlN0cmluZyArIHN0cmluZy5zbGljZShzdGFydCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZHVjZTogZnVuY3Rpb24oYXJyYXksIGNhbGxiYWNrIC8qLCBpbml0aWFsVmFsdWUqLykge1xuICAgICAgICAgICAgaWYgKHRoaXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheS5wcm90b3R5cGUucmVkdWNlIGNhbGxlZCBvbiBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHQgPSBPYmplY3QoYXJyYXkpLFxuICAgICAgICAgICAgICAgIGxlbiA9IHQubGVuZ3RoID4+PiAwLFxuICAgICAgICAgICAgICAgIGsgPSAwLFxuICAgICAgICAgICAgICAgIHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gYXJndW1lbnRzWzJdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAoayA8IGxlbiAmJiAhKGsgaW4gdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChrID49IGxlbikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0W2srK107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKDsgayA8IGxlbjsgaysrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGsgaW4gdCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrKHZhbHVlLCB0W2tdLCBrLCB0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb21wdXRlcyB0aGUgbXVsdGlwbGllciBuZWNlc3NhcnkgdG8gbWFrZSB4ID49IDEsXG4gICAgICAgICAqIGVmZmVjdGl2ZWx5IGVsaW1pbmF0aW5nIG1pc2NhbGN1bGF0aW9ucyBjYXVzZWQgYnlcbiAgICAgICAgICogZmluaXRlIHByZWNpc2lvbi5cbiAgICAgICAgICovXG4gICAgICAgIG11bHRpcGxpZXI6IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICB2YXIgcGFydHMgPSB4LnRvU3RyaW5nKCkuc3BsaXQoJy4nKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzLmxlbmd0aCA8IDIgPyAxIDogTWF0aC5wb3coMTAsIHBhcnRzWzFdLmxlbmd0aCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMsIHJldHVybnMgdGhlIG1heGltdW1cbiAgICAgICAgICogbXVsdGlwbGllciB0aGF0IG11c3QgYmUgdXNlZCB0byBub3JtYWxpemUgYW4gb3BlcmF0aW9uIGludm9sdmluZ1xuICAgICAgICAgKiBhbGwgb2YgdGhlbS5cbiAgICAgICAgICovXG4gICAgICAgIGNvcnJlY3Rpb25GYWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGFyZ3MucmVkdWNlKGZ1bmN0aW9uKGFjY3VtLCBuZXh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIG1uID0gXy5tdWx0aXBsaWVyKG5leHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2N1bSA+IG1uID8gYWNjdW0gOiBtbjtcbiAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogSW1wbGVtZW50YXRpb24gb2YgdG9GaXhlZCgpIHRoYXQgdHJlYXRzIGZsb2F0cyBtb3JlIGxpa2UgZGVjaW1hbHNcbiAgICAgICAgICpcbiAgICAgICAgICogRml4ZXMgYmluYXJ5IHJvdW5kaW5nIGlzc3VlcyAoZWcuICgwLjYxNSkudG9GaXhlZCgyKSA9PT0gJzAuNjEnKSB0aGF0IHByZXNlbnRcbiAgICAgICAgICogcHJvYmxlbXMgZm9yIGFjY291bnRpbmctIGFuZCBmaW5hbmNlLXJlbGF0ZWQgc29mdHdhcmUuXG4gICAgICAgICAqL1xuICAgICAgICB0b0ZpeGVkOiBmdW5jdGlvbih2YWx1ZSwgbWF4RGVjaW1hbHMsIHJvdW5kaW5nRnVuY3Rpb24sIG9wdGlvbmFscykge1xuICAgICAgICAgICAgdmFyIHNwbGl0VmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJyksXG4gICAgICAgICAgICAgICAgbWluRGVjaW1hbHMgPSBtYXhEZWNpbWFscyAtIChvcHRpb25hbHMgfHwgMCksXG4gICAgICAgICAgICAgICAgYm91bmRlZFByZWNpc2lvbixcbiAgICAgICAgICAgICAgICBvcHRpb25hbHNSZWdFeHAsXG4gICAgICAgICAgICAgICAgcG93ZXIsXG4gICAgICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgICAgICAvLyBVc2UgdGhlIHNtYWxsZXN0IHByZWNpc2lvbiB2YWx1ZSBwb3NzaWJsZSB0byBhdm9pZCBlcnJvcnMgZnJvbSBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvblxuICAgICAgICAgICAgaWYgKHNwbGl0VmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgIGJvdW5kZWRQcmVjaXNpb24gPSBNYXRoLm1pbihNYXRoLm1heChzcGxpdFZhbHVlWzFdLmxlbmd0aCwgbWluRGVjaW1hbHMpLCBtYXhEZWNpbWFscyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBib3VuZGVkUHJlY2lzaW9uID0gbWluRGVjaW1hbHM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvd2VyID0gTWF0aC5wb3coMTAsIGJvdW5kZWRQcmVjaXNpb24pO1xuXG4gICAgICAgICAgICAvLyBNdWx0aXBseSB1cCBieSBwcmVjaXNpb24sIHJvdW5kIGFjY3VyYXRlbHksIHRoZW4gZGl2aWRlIGFuZCB1c2UgbmF0aXZlIHRvRml4ZWQoKTpcbiAgICAgICAgICAgIG91dHB1dCA9IChyb3VuZGluZ0Z1bmN0aW9uKHZhbHVlICsgJ2UrJyArIGJvdW5kZWRQcmVjaXNpb24pIC8gcG93ZXIpLnRvRml4ZWQoYm91bmRlZFByZWNpc2lvbik7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25hbHMgPiBtYXhEZWNpbWFscyAtIGJvdW5kZWRQcmVjaXNpb24pIHtcbiAgICAgICAgICAgICAgICBvcHRpb25hbHNSZWdFeHAgPSBuZXcgUmVnRXhwKCdcXFxcLj8wezEsJyArIChvcHRpb25hbHMgLSAobWF4RGVjaW1hbHMgLSBib3VuZGVkUHJlY2lzaW9uKSkgKyAnfSQnKTtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZShvcHRpb25hbHNSZWdFeHAsICcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBhdmFsaWFibGUgb3B0aW9uc1xuICAgIG51bWVyYWwub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAvLyBhdmFsaWFibGUgZm9ybWF0c1xuICAgIG51bWVyYWwuZm9ybWF0cyA9IGZvcm1hdHM7XG5cbiAgICAvLyBhdmFsaWFibGUgZm9ybWF0c1xuICAgIG51bWVyYWwubG9jYWxlcyA9IGxvY2FsZXM7XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGN1cnJlbnQgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgbnVtZXJhbC5sb2NhbGUgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgb3B0aW9ucy5jdXJyZW50TG9jYWxlID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9ucy5jdXJyZW50TG9jYWxlO1xuICAgIH07XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgbG9hZGVkIGxvY2FsZSBkYXRhLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50XG4gICAgLy8gZ2xvYmFsIGxvY2FsZSBvYmplY3QuXG4gICAgbnVtZXJhbC5sb2NhbGVEYXRhID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tvcHRpb25zLmN1cnJlbnRMb2NhbGVdO1xuICAgICAgICB9XG5cbiAgICAgICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgaWYgKCFsb2NhbGVzW2tleV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBsb2NhbGUgOiAnICsga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGVzW2tleV07XG4gICAgfTtcblxuICAgIG51bWVyYWwucmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGVmYXVsdHMpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbcHJvcGVydHldID0gZGVmYXVsdHNbcHJvcGVydHldO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIG51bWVyYWwuemVyb0Zvcm1hdCA9IGZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICBvcHRpb25zLnplcm9Gb3JtYXQgPSB0eXBlb2YoZm9ybWF0KSA9PT0gJ3N0cmluZycgPyBmb3JtYXQgOiBudWxsO1xuICAgIH07XG5cbiAgICBudW1lcmFsLm51bGxGb3JtYXQgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIG9wdGlvbnMubnVsbEZvcm1hdCA9IHR5cGVvZihmb3JtYXQpID09PSAnc3RyaW5nJyA/IGZvcm1hdCA6IG51bGw7XG4gICAgfTtcblxuICAgIG51bWVyYWwuZGVmYXVsdEZvcm1hdCA9IGZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICBvcHRpb25zLmRlZmF1bHRGb3JtYXQgPSB0eXBlb2YoZm9ybWF0KSA9PT0gJ3N0cmluZycgPyBmb3JtYXQgOiAnMC4wJztcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5yZWdpc3RlciA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIGZvcm1hdCkge1xuICAgICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmICh0aGlzW3R5cGUgKyAncyddW25hbWVdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKG5hbWUgKyAnICcgKyB0eXBlICsgJyBhbHJlYWR5IHJlZ2lzdGVyZWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzW3R5cGUgKyAncyddW25hbWVdID0gZm9ybWF0O1xuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfTtcblxuXG4gICAgbnVtZXJhbC52YWxpZGF0ZSA9IGZ1bmN0aW9uKHZhbCwgY3VsdHVyZSkge1xuICAgICAgICB2YXIgX2RlY2ltYWxTZXAsXG4gICAgICAgICAgICBfdGhvdXNhbmRTZXAsXG4gICAgICAgICAgICBfY3VyclN5bWJvbCxcbiAgICAgICAgICAgIF92YWxBcnJheSxcbiAgICAgICAgICAgIF9hYmJyT2JqLFxuICAgICAgICAgICAgX3Rob3VzYW5kUmVnRXgsXG4gICAgICAgICAgICBsb2NhbGVEYXRhLFxuICAgICAgICAgICAgdGVtcDtcblxuICAgICAgICAvL2NvZXJjZSB2YWwgdG8gc3RyaW5nXG4gICAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFsICs9ICcnO1xuXG4gICAgICAgICAgICBpZiAoY29uc29sZS53YXJuKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdOdW1lcmFsLmpzOiBWYWx1ZSBpcyBub3Qgc3RyaW5nLiBJdCBoYXMgYmVlbiBjby1lcmNlZCB0bzogJywgdmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vdHJpbSB3aGl0ZXNwYWNlcyBmcm9tIGVpdGhlciBzaWRlc1xuICAgICAgICB2YWwgPSB2YWwudHJpbSgpO1xuXG4gICAgICAgIC8vaWYgdmFsIGlzIGp1c3QgZGlnaXRzIHJldHVybiB0cnVlXG4gICAgICAgIGlmICghIXZhbC5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9pZiB2YWwgaXMgZW1wdHkgcmV0dXJuIGZhbHNlXG4gICAgICAgIGlmICh2YWwgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvL2dldCB0aGUgZGVjaW1hbCBhbmQgdGhvdXNhbmRzIHNlcGFyYXRvciBmcm9tIG51bWVyYWwubG9jYWxlRGF0YVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy9jaGVjayBpZiB0aGUgY3VsdHVyZSBpcyB1bmRlcnN0b29kIGJ5IG51bWVyYWwuIGlmIG5vdCwgZGVmYXVsdCBpdCB0byBjdXJyZW50IGxvY2FsZVxuICAgICAgICAgICAgbG9jYWxlRGF0YSA9IG51bWVyYWwubG9jYWxlRGF0YShjdWx0dXJlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9jYWxlRGF0YSA9IG51bWVyYWwubG9jYWxlRGF0YShudW1lcmFsLmxvY2FsZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vc2V0dXAgdGhlIGRlbGltaXRlcnMgYW5kIGN1cnJlbmN5IHN5bWJvbCBiYXNlZCBvbiBjdWx0dXJlL2xvY2FsZVxuICAgICAgICBfY3VyclN5bWJvbCA9IGxvY2FsZURhdGEuY3VycmVuY3kuc3ltYm9sO1xuICAgICAgICBfYWJick9iaiA9IGxvY2FsZURhdGEuYWJicmV2aWF0aW9ucztcbiAgICAgICAgX2RlY2ltYWxTZXAgPSBsb2NhbGVEYXRhLmRlbGltaXRlcnMuZGVjaW1hbDtcbiAgICAgICAgaWYgKGxvY2FsZURhdGEuZGVsaW1pdGVycy50aG91c2FuZHMgPT09ICcuJykge1xuICAgICAgICAgICAgX3Rob3VzYW5kU2VwID0gJ1xcXFwuJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aG91c2FuZFNlcCA9IGxvY2FsZURhdGEuZGVsaW1pdGVycy50aG91c2FuZHM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZGF0aW5nIGN1cnJlbmN5IHN5bWJvbFxuICAgICAgICB0ZW1wID0gdmFsLm1hdGNoKC9eW15cXGRdKy8pO1xuICAgICAgICBpZiAodGVtcCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsID0gdmFsLnN1YnN0cigxKTtcbiAgICAgICAgICAgIGlmICh0ZW1wWzBdICE9PSBfY3VyclN5bWJvbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vdmFsaWRhdGluZyBhYmJyZXZpYXRpb24gc3ltYm9sXG4gICAgICAgIHRlbXAgPSB2YWwubWF0Y2goL1teXFxkXSskLyk7XG4gICAgICAgIGlmICh0ZW1wICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YWwgPSB2YWwuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgaWYgKHRlbXBbMF0gIT09IF9hYmJyT2JqLnRob3VzYW5kICYmIHRlbXBbMF0gIT09IF9hYmJyT2JqLm1pbGxpb24gJiYgdGVtcFswXSAhPT0gX2FiYnJPYmouYmlsbGlvbiAmJiB0ZW1wWzBdICE9PSBfYWJick9iai50cmlsbGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF90aG91c2FuZFJlZ0V4ID0gbmV3IFJlZ0V4cChfdGhvdXNhbmRTZXAgKyAnezJ9Jyk7XG5cbiAgICAgICAgaWYgKCF2YWwubWF0Y2goL1teXFxkLixdL2cpKSB7XG4gICAgICAgICAgICBfdmFsQXJyYXkgPSB2YWwuc3BsaXQoX2RlY2ltYWxTZXApO1xuICAgICAgICAgICAgaWYgKF92YWxBcnJheS5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoX3ZhbEFycmF5Lmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggISEgX3ZhbEFycmF5WzBdLm1hdGNoKC9eXFxkKy4qXFxkJC8pICYmICFfdmFsQXJyYXlbMF0ubWF0Y2goX3Rob3VzYW5kUmVnRXgpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX3ZhbEFycmF5WzBdLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggISEgX3ZhbEFycmF5WzBdLm1hdGNoKC9eXFxkKyQvKSAmJiAhX3ZhbEFycmF5WzBdLm1hdGNoKF90aG91c2FuZFJlZ0V4KSAmJiAhISBfdmFsQXJyYXlbMV0ubWF0Y2goL15cXGQrJC8pKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoICEhIF92YWxBcnJheVswXS5tYXRjaCgvXlxcZCsuKlxcZCQvKSAmJiAhX3ZhbEFycmF5WzBdLm1hdGNoKF90aG91c2FuZFJlZ0V4KSAmJiAhISBfdmFsQXJyYXlbMV0ubWF0Y2goL15cXGQrJC8pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIE51bWVyYWwgUHJvdG90eXBlXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgbnVtZXJhbC5mbiA9IE51bWVyYWwucHJvdG90eXBlID0ge1xuICAgICAgICBjbG9uZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtZXJhbCh0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbihpbnB1dFN0cmluZywgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fdmFsdWUsXG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gaW5wdXRTdHJpbmcgfHwgb3B0aW9ucy5kZWZhdWx0Rm9ybWF0LFxuICAgICAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uO1xuXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhIHJvdW5kaW5nRnVuY3Rpb25cbiAgICAgICAgICAgIHJvdW5kaW5nRnVuY3Rpb24gPSByb3VuZGluZ0Z1bmN0aW9uIHx8IE1hdGgucm91bmQ7XG5cbiAgICAgICAgICAgIC8vIGZvcm1hdCBiYXNlZCBvbiB2YWx1ZVxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwICYmIG9wdGlvbnMuemVyb0Zvcm1hdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG9wdGlvbnMuemVyb0Zvcm1hdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IG51bGwgJiYgb3B0aW9ucy5udWxsRm9ybWF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3B0aW9ucy5udWxsRm9ybWF0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGtpbmQgaW4gZm9ybWF0cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0Lm1hdGNoKGZvcm1hdHNba2luZF0ucmVnZXhwcy5mb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRGdW5jdGlvbiA9IGZvcm1hdHNba2luZF0uZm9ybWF0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uID0gZm9ybWF0RnVuY3Rpb24gfHwgbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0O1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gZm9ybWF0RnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBhZGQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgY29yckZhY3RvciA9IF8uY29ycmVjdGlvbkZhY3Rvci5jYWxsKG51bGwsIHRoaXMuX3ZhbHVlLCB2YWx1ZSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2N1bSArIE1hdGgucm91bmQoY29yckZhY3RvciAqIGN1cnIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IF8ucmVkdWNlKFt0aGlzLl92YWx1ZSwgdmFsdWVdLCBjYmFjaywgMCkgLyBjb3JyRmFjdG9yO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgc3VidHJhY3Q6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgY29yckZhY3RvciA9IF8uY29ycmVjdGlvbkZhY3Rvci5jYWxsKG51bGwsIHRoaXMuX3ZhbHVlLCB2YWx1ZSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2N1bSAtIE1hdGgucm91bmQoY29yckZhY3RvciAqIGN1cnIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IF8ucmVkdWNlKFt2YWx1ZV0sIGNiYWNrLCBNYXRoLnJvdW5kKHRoaXMuX3ZhbHVlICogY29yckZhY3RvcikpIC8gY29yckZhY3RvcjtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIG11bHRpcGx5OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBfLmNvcnJlY3Rpb25GYWN0b3IoYWNjdW0sIGN1cnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGFjY3VtICogY29yckZhY3RvcikgKiBNYXRoLnJvdW5kKGN1cnIgKiBjb3JyRmFjdG9yKSAvIE1hdGgucm91bmQoY29yckZhY3RvciAqIGNvcnJGYWN0b3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IF8ucmVkdWNlKFt0aGlzLl92YWx1ZSwgdmFsdWVdLCBjYmFjaywgMSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBkaXZpZGU6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICB2YXIgY29yckZhY3RvciA9IF8uY29ycmVjdGlvbkZhY3RvcihhY2N1bSwgY3Vycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoYWNjdW0gKiBjb3JyRmFjdG9yKSAvIE1hdGgucm91bmQoY3VyciAqIGNvcnJGYWN0b3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IF8ucmVkdWNlKFt0aGlzLl92YWx1ZSwgdmFsdWVdLCBjYmFjayk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBkaWZmZXJlbmNlOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKG51bWVyYWwodGhpcy5fdmFsdWUpLnN1YnRyYWN0KHZhbHVlKS52YWx1ZSgpKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIERlZmF1bHQgTG9jYWxlICYmIEZvcm1hdFxuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIG51bWVyYWwucmVnaXN0ZXIoJ2xvY2FsZScsICdlbicsIHtcbiAgICAgICAgZGVsaW1pdGVyczoge1xuICAgICAgICAgICAgdGhvdXNhbmRzOiAnLCcsXG4gICAgICAgICAgICBkZWNpbWFsOiAnLidcbiAgICAgICAgfSxcbiAgICAgICAgYWJicmV2aWF0aW9uczoge1xuICAgICAgICAgICAgdGhvdXNhbmQ6ICdrJyxcbiAgICAgICAgICAgIG1pbGxpb246ICdtJyxcbiAgICAgICAgICAgIGJpbGxpb246ICdiJyxcbiAgICAgICAgICAgIHRyaWxsaW9uOiAndCdcbiAgICAgICAgfSxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24obnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwO1xuICAgICAgICAgICAgcmV0dXJuICh+fihudW1iZXIgJSAxMDAgLyAxMCkgPT09IDEpID8gJ3RoJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDEpID8gJ3N0JyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDIpID8gJ25kJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDMpID8gJ3JkJyA6ICd0aCc7XG4gICAgICAgIH0sXG4gICAgICAgIGN1cnJlbmN5OiB7XG4gICAgICAgICAgICBzeW1ib2w6ICckJ1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBcblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnYnBzJywge1xuICAgICAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogLyhCUFMpLyxcbiAgICAgICAgICAgICAgICB1bmZvcm1hdDogLyhCUFMpL1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIHZhciBzcGFjZSA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgQlBTJykgPyAnICcgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDEwMDAwO1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHNwYWNlIGJlZm9yZSBCUFNcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP0JQUy8sICcnKTtcblxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMob3V0cHV0LCAnKScpKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5zcGxpdCgnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnNwbGljZSgtMSwgMCwgc3BhY2UgKyAnQlBTJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmpvaW4oJycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dCArIHNwYWNlICsgJ0JQUyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICsobnVtZXJhbC5fLnN0cmluZ1RvTnVtYmVyKHN0cmluZykgKiAwLjAwMDEpLnRvRml4ZWQoMTUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZGVjaW1hbCA9IHtcbiAgICAgICAgICAgIGJhc2U6IDEwMDAsXG4gICAgICAgICAgICBzdWZmaXhlczogWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ11cbiAgICAgICAgfSxcbiAgICAgICAgYmluYXJ5ID0ge1xuICAgICAgICAgICAgYmFzZTogMTAyNCxcbiAgICAgICAgICAgIHN1ZmZpeGVzOiBbJ0InLCAnS2lCJywgJ01pQicsICdHaUInLCAnVGlCJywgJ1BpQicsICdFaUInLCAnWmlCJywgJ1lpQiddXG4gICAgICAgIH07XG5cbiAgICB2YXIgYWxsU3VmZml4ZXMgPSAgZGVjaW1hbC5zdWZmaXhlcy5jb25jYXQoYmluYXJ5LnN1ZmZpeGVzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlY2ltYWwuc3VmZml4ZXMuaW5kZXhPZihpdGVtKSA8IDA7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdmFyIHVuZm9ybWF0UmVnZXggPSBhbGxTdWZmaXhlcy5qb2luKCd8Jyk7XG4gICAgICAgIC8vIEFsbG93IHN1cHBvcnQgZm9yIEJQUyAoaHR0cDovL3d3dy5pbnZlc3RvcGVkaWEuY29tL3Rlcm1zL2IvYmFzaXNwb2ludC5hc3ApXG4gICAgICAgIHVuZm9ybWF0UmVnZXggPSAnKCcgKyB1bmZvcm1hdFJlZ2V4LnJlcGxhY2UoJ0InLCAnQig/IVBTKScpICsgJyknO1xuXG4gICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ2J5dGVzJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oWzBcXHNdaT9iKS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogbmV3IFJlZ0V4cCh1bmZvcm1hdFJlZ2V4KVxuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQsXG4gICAgICAgICAgICAgICAgYnl0ZXMgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnaWInKSA/IGJpbmFyeSA6IGRlY2ltYWwsXG4gICAgICAgICAgICAgICAgc3VmZml4ID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyBiJykgfHwgbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyBpYicpID8gJyAnIDogJycsXG4gICAgICAgICAgICAgICAgcG93ZXIsXG4gICAgICAgICAgICAgICAgbWluLFxuICAgICAgICAgICAgICAgIG1heDtcblxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHNwYWNlIGJlZm9yZVxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9pP2IvLCAnJyk7XG5cbiAgICAgICAgICAgIGZvciAocG93ZXIgPSAwOyBwb3dlciA8PSBieXRlcy5zdWZmaXhlcy5sZW5ndGg7IHBvd2VyKyspIHtcbiAgICAgICAgICAgICAgICBtaW4gPSBNYXRoLnBvdyhieXRlcy5iYXNlLCBwb3dlcik7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5wb3coYnl0ZXMuYmFzZSwgcG93ZXIgKyAxKTtcblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gMCB8fCB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPCBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VmZml4ICs9IGJ5dGVzLnN1ZmZpeGVzW3Bvd2VyXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobWluID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIG1pbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0ICsgc3VmZml4O1xuICAgICAgICB9LFxuICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBudW1lcmFsLl8uc3RyaW5nVG9OdW1iZXIoc3RyaW5nKSxcbiAgICAgICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgICAgICBieXRlc011bHRpcGxpZXI7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGZvciAocG93ZXIgPSBkZWNpbWFsLnN1ZmZpeGVzLmxlbmd0aCAtIDE7IHBvd2VyID49IDA7IHBvd2VyLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhzdHJpbmcsIGRlY2ltYWwuc3VmZml4ZXNbcG93ZXJdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNNdWx0aXBsaWVyID0gTWF0aC5wb3coZGVjaW1hbC5iYXNlLCBwb3dlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhzdHJpbmcsIGJpbmFyeS5zdWZmaXhlc1twb3dlcl0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBieXRlc011bHRpcGxpZXIgPSBNYXRoLnBvdyhiaW5hcnkuYmFzZSwgcG93ZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhbHVlICo9IChieXRlc011bHRpcGxpZXIgfHwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdjdXJyZW5jeScsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKFxcJCkvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IG51bWVyYWwubG9jYWxlc1tudW1lcmFsLm9wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgc3ltYm9scyA9IHtcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlOiBmb3JtYXQubWF0Y2goL14oW1xcK3xcXC18XFwofFxcc3xcXCRdKikvKVswXSxcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXI6IGZvcm1hdC5tYXRjaCgvKFtcXCt8XFwtfFxcKXxcXHN8XFwkXSopJC8pWzBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgc3ltYm9sLFxuICAgICAgICAgICAgICAgIGk7XG5cbiAgICAgICAgICAgIC8vIHN0cmlwIGZvcm1hdCBvZiBzcGFjZXMgYW5kICRcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/XFwkXFxzPy8sICcnKTtcblxuICAgICAgICAgICAgLy8gZm9ybWF0IHRoZSBudW1iZXJcbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBiZWZvcmUgYW5kIGFmdGVyIGJhc2VkIG9uIHZhbHVlXG4gICAgICAgICAgICBpZiAodmFsdWUgPj0gMCkge1xuICAgICAgICAgICAgICAgIHN5bWJvbHMuYmVmb3JlID0gc3ltYm9scy5iZWZvcmUucmVwbGFjZSgvW1xcLVxcKF0vLCAnJyk7XG4gICAgICAgICAgICAgICAgc3ltYm9scy5hZnRlciA9IHN5bWJvbHMuYWZ0ZXIucmVwbGFjZSgvW1xcLVxcKV0vLCAnJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMCAmJiAoIW51bWVyYWwuXy5pbmNsdWRlcyhzeW1ib2xzLmJlZm9yZSwgJy0nKSAmJiAhbnVtZXJhbC5fLmluY2x1ZGVzKHN5bWJvbHMuYmVmb3JlLCAnKCcpKSkge1xuICAgICAgICAgICAgICAgIHN5bWJvbHMuYmVmb3JlID0gJy0nICsgc3ltYm9scy5iZWZvcmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCBlYWNoIGJlZm9yZSBzeW1ib2xcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzeW1ib2xzLmJlZm9yZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IHN5bWJvbHMuYmVmb3JlW2ldO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnJCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8uaW5zZXJ0KG91dHB1dCwgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbCwgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8uaW5zZXJ0KG91dHB1dCwgJyAnLCBpICsgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGVhY2ggYWZ0ZXIgc3ltYm9sXG4gICAgICAgICAgICBmb3IgKGkgPSBzeW1ib2xzLmFmdGVyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gc3ltYm9scy5hZnRlcltpXTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoc3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gaSA9PT0gc3ltYm9scy5hZnRlci5sZW5ndGggLSAxID8gb3V0cHV0ICsgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbCA6IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCBsb2NhbGUuY3VycmVuY3kuc3ltYm9sLCAtKHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gKDEgKyBpKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gaSA9PT0gc3ltYm9scy5hZnRlci5sZW5ndGggLSAxID8gb3V0cHV0ICsgJyAnIDogbnVtZXJhbC5fLmluc2VydChvdXRwdXQsICcgJywgLShzeW1ib2xzLmFmdGVyLmxlbmd0aCAtICgxICsgaSkgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ2V4cG9uZW50aWFsJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oZVxcK3xlLSkvLFxuICAgICAgICAgICAgdW5mb3JtYXQ6IC8oZVxcK3xlLSkvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIG91dHB1dCxcbiAgICAgICAgICAgICAgICBleHBvbmVudGlhbCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIW51bWVyYWwuXy5pc05hTih2YWx1ZSkgPyB2YWx1ZS50b0V4cG9uZW50aWFsKCkgOiAnMGUrMCcsXG4gICAgICAgICAgICAgICAgcGFydHMgPSBleHBvbmVudGlhbC5zcGxpdCgnZScpO1xuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvZVtcXCt8XFwtXXsxfTAvLCAnJyk7XG5cbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdChOdW1iZXIocGFydHNbMF0pLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0ICsgJ2UnICsgcGFydHNbMV07XG4gICAgICAgIH0sXG4gICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IG51bWVyYWwuXy5pbmNsdWRlcyhzdHJpbmcsICdlKycpID8gc3RyaW5nLnNwbGl0KCdlKycpIDogc3RyaW5nLnNwbGl0KCdlLScpLFxuICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHBhcnRzWzBdKSxcbiAgICAgICAgICAgICAgICBwb3dlciA9IE51bWJlcihwYXJ0c1sxXSk7XG5cbiAgICAgICAgICAgIHBvd2VyID0gbnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgJ2UtJykgPyBwb3dlciAqPSAtMSA6IHBvd2VyO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICB2YXIgY29yckZhY3RvciA9IG51bWVyYWwuXy5jb3JyZWN0aW9uRmFjdG9yKGFjY3VtLCBjdXJyKSxcbiAgICAgICAgICAgICAgICAgICAgbnVtID0gKGFjY3VtICogY29yckZhY3RvcikgKiAoY3VyciAqIGNvcnJGYWN0b3IpIC8gKGNvcnJGYWN0b3IgKiBjb3JyRmFjdG9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVtZXJhbC5fLnJlZHVjZShbdmFsdWUsIE1hdGgucG93KDEwLCBwb3dlcildLCBjYmFjaywgMSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnb3JkaW5hbCcsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKG8pL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBudW1lcmFsLmxvY2FsZXNbbnVtZXJhbC5vcHRpb25zLmN1cnJlbnRMb2NhbGVdLFxuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBvcmRpbmFsID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyBvJykgPyAnICcgOiAnJztcblxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHNwYWNlIGJlZm9yZVxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9vLywgJycpO1xuXG4gICAgICAgICAgICBvcmRpbmFsICs9IGxvY2FsZS5vcmRpbmFsKHZhbHVlKTtcblxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0ICsgb3JkaW5hbDtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdwZXJjZW50YWdlJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oJSkvLFxuICAgICAgICAgICAgdW5mb3JtYXQ6IC8oJSkvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIHNwYWNlID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyAlJykgPyAnICcgOiAnJyxcbiAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgIGlmIChudW1lcmFsLm9wdGlvbnMuc2NhbGVQZXJjZW50QnkxMDApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICogMTAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlICVcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/XFwlLywgJycpO1xuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMob3V0cHV0LCAnKScpKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNwbGl0KCcnKTtcblxuICAgICAgICAgICAgICAgIG91dHB1dC5zcGxpY2UoLTEsIDAsIHNwYWNlICsgJyUnKTtcblxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5qb2luKCcnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0ICsgc3BhY2UgKyAnJSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciBudW1iZXIgPSBudW1lcmFsLl8uc3RyaW5nVG9OdW1iZXIoc3RyaW5nKTtcbiAgICAgICAgICAgIGlmIChudW1lcmFsLm9wdGlvbnMuc2NhbGVQZXJjZW50QnkxMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICogMC4wMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAndGltZScsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKDopLyxcbiAgICAgICAgICAgIHVuZm9ybWF0OiAvKDopL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBob3VycyA9IE1hdGguZmxvb3IodmFsdWUgLyA2MCAvIDYwKSxcbiAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5mbG9vcigodmFsdWUgLSAoaG91cnMgKiA2MCAqIDYwKSkgLyA2MCksXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IE1hdGgucm91bmQodmFsdWUgLSAoaG91cnMgKiA2MCAqIDYwKSAtIChtaW51dGVzICogNjApKTtcblxuICAgICAgICAgICAgcmV0dXJuIGhvdXJzICsgJzonICsgKG1pbnV0ZXMgPCAxMCA/ICcwJyArIG1pbnV0ZXMgOiBtaW51dGVzKSArICc6JyArIChzZWNvbmRzIDwgMTAgPyAnMCcgKyBzZWNvbmRzIDogc2Vjb25kcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciB0aW1lQXJyYXkgPSBzdHJpbmcuc3BsaXQoJzonKSxcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gMDtcblxuICAgICAgICAgICAgLy8gdHVybiBob3VycyBhbmQgbWludXRlcyBpbnRvIHNlY29uZHMgYW5kIGFkZCB0aGVtIGFsbCB1cFxuICAgICAgICAgICAgaWYgKHRpbWVBcnJheS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICAvLyBob3Vyc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgKE51bWJlcih0aW1lQXJyYXlbMF0pICogNjAgKiA2MCk7XG4gICAgICAgICAgICAgICAgLy8gbWludXRlc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgKE51bWJlcih0aW1lQXJyYXlbMV0pICogNjApO1xuICAgICAgICAgICAgICAgIC8vIHNlY29uZHNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIE51bWJlcih0aW1lQXJyYXlbMl0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lQXJyYXkubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgLy8gbWludXRlc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgKE51bWJlcih0aW1lQXJyYXlbMF0pICogNjApO1xuICAgICAgICAgICAgICAgIC8vIHNlY29uZHNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIE51bWJlcih0aW1lQXJyYXlbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcihzZWNvbmRzKTtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxucmV0dXJuIG51bWVyYWw7XG59KSk7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3ltYm9sO1xuIiwgInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUlzRGVlcFByb3AgPSAvXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcdyokLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxuICAgICAgdmFsdWUgPT0gbnVsbCB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gcmVJc1BsYWluUHJvcC50ZXN0KHZhbHVlKSB8fCAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpIHx8XG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleTtcbiIsICJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZTtcbiIsICJ2YXIgbWVtb2l6ZSA9IHJlcXVpcmUoJy4vbWVtb2l6ZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZUNhcHBlZDtcbiIsICJ2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmUoJy4vX21lbW9pemVDYXBwZWQnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvUGF0aDtcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUb1N0cmluZztcbiIsICJ2YXIgYmFzZVRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVRvU3RyaW5nJyk7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1N0cmluZztcbiIsICJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsICJ2YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvS2V5O1xuIiwgInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCAidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RWFjaDtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnR5O1xuIiwgInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnblZhbHVlO1xuIiwgInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25WYWx1ZTtcbiIsICJ2YXIgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpO1xuXG4vKipcbiAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3VmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5T2JqZWN0O1xuIiwgInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hc3NpZ25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ247XG4iLCAiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcbiAqIFtgT2JqZWN0LmtleXNgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGV4Y2VwdCB0aGF0IGl0IGluY2x1ZGVzIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIG5hdGl2ZUtleXNJbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5c0luO1xuIiwgInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5c0luID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5c0luJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgfVxuICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXNJbjtcbiIsICJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLCAidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hc3NpZ25JbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbkluKG9iamVjdCwgc291cmNlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25JbjtcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUJ1ZmZlcjtcbiIsICIvKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5QXJyYXk7XG4iLCAidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKTtcblxuLyoqXG4gKiBDb3BpZXMgb3duIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlTeW1ib2xzKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9scyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW1ib2xzO1xuIiwgInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRQcm90b3R5cGU7XG4iLCAidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9sc0luID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB3aGlsZSAob2JqZWN0KSB7XG4gICAgYXJyYXlQdXNoKHJlc3VsdCwgZ2V0U3ltYm9scyhvYmplY3QpKTtcbiAgICBvYmplY3QgPSBnZXRQcm90b3R5cGUob2JqZWN0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzSW47XG4iLCAidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgZ2V0U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9sc0luJyk7XG5cbi8qKlxuICogQ29waWVzIG93biBhbmQgaW5oZXJpdGVkIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlTeW1ib2xzSW4oc291cmNlLCBvYmplY3QpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3ltYm9sc0luO1xuIiwgInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9sc0luJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNJbiwgZ2V0U3ltYm9sc0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzSW47XG4iLCAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVBcnJheTtcbiIsICJ2YXIgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGFycmF5IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xuICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICBuZXcgVWludDhBcnJheShyZXN1bHQpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQXJyYXlCdWZmZXI7XG4iLCAidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBkYXRhVmlld2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhVmlldyBUaGUgZGF0YSB2aWV3IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBkYXRhIHZpZXcuXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGF0YVZpZXcoZGF0YVZpZXcsIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcihkYXRhVmlldy5idWZmZXIpIDogZGF0YVZpZXcuYnVmZmVyO1xuICByZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlciwgZGF0YVZpZXcuYnl0ZU9mZnNldCwgZGF0YVZpZXcuYnl0ZUxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVEYXRhVmlldztcbiIsICIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lUmVnRXhwO1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBgc3ltYm9sYCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzeW1ib2wgVGhlIHN5bWJvbCBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgc3ltYm9sIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVTeW1ib2woc3ltYm9sKSB7XG4gIHJldHVybiBzeW1ib2xWYWx1ZU9mID8gT2JqZWN0KHN5bWJvbFZhbHVlT2YuY2FsbChzeW1ib2wpKSA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lU3ltYm9sO1xuIiwgInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lVHlwZWRBcnJheTtcbiIsICJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKSxcbiAgICBjbG9uZURhdGFWaWV3ID0gcmVxdWlyZSgnLi9fY2xvbmVEYXRhVmlldycpLFxuICAgIGNsb25lUmVnRXhwID0gcmVxdWlyZSgnLi9fY2xvbmVSZWdFeHAnKSxcbiAgICBjbG9uZVN5bWJvbCA9IHJlcXVpcmUoJy4vX2Nsb25lU3ltYm9sJyksXG4gICAgY2xvbmVUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fY2xvbmVUeXBlZEFycmF5Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZSBiYXNlZCBvbiBpdHMgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBNYXBgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIGBTZXRgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsIHRhZywgaXNEZWVwKSB7XG4gIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTtcblxuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIGZsb2F0MzJUYWc6IGNhc2UgZmxvYXQ2NFRhZzpcbiAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6XG4gICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgIHJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZUJ5VGFnO1xuIiwgInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwgInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZU9iamVjdDtcbiIsICJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBtYXBUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWFwO1xuIiwgInZhciBiYXNlSXNNYXAgPSByZXF1aXJlKCcuL19iYXNlSXNNYXAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTWFwKG5ldyBNYXApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNNYXAobmV3IFdlYWtNYXApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzTWFwID0gbm9kZUlzTWFwID8gYmFzZVVuYXJ5KG5vZGVJc01hcCkgOiBiYXNlSXNNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXA7XG4iLCAidmFyIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1NldGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzU2V0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gc2V0VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1NldDtcbiIsICJ2YXIgYmFzZUlzU2V0ID0gcmVxdWlyZSgnLi9fYmFzZUlzU2V0JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1NldCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzU2V0O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU2V0YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1NldChuZXcgU2V0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU2V0KG5ldyBXZWFrU2V0KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1NldCA9IG5vZGVJc1NldCA/IGJhc2VVbmFyeShub2RlSXNTZXQpIDogYmFzZUlzU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU2V0O1xuIiwgInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ24gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduJyksXG4gICAgYmFzZUFzc2lnbkluID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbkluJyksXG4gICAgY2xvbmVCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUJ1ZmZlcicpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGNvcHlTeW1ib2xzID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHMnKSxcbiAgICBjb3B5U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHNJbicpLFxuICAgIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaW5pdENsb25lQXJyYXkgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVBcnJheScpLFxuICAgIGluaXRDbG9uZUJ5VGFnID0gcmVxdWlyZSgnLi9faW5pdENsb25lQnlUYWcnKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNNYXAgPSByZXF1aXJlKCcuL2lzTWFwJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTZXQgPSByZXF1aXJlKCcuL2lzU2V0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgc3VwcG9ydGVkIGJ5IGBfLmNsb25lYC4gKi9cbnZhciBjbG9uZWFibGVUYWdzID0ge307XG5jbG9uZWFibGVUYWdzW2FyZ3NUYWddID0gY2xvbmVhYmxlVGFnc1thcnJheVRhZ10gPVxuY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGFWaWV3VGFnXSA9XG5jbG9uZWFibGVUYWdzW2Jvb2xUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRlVGFnXSA9XG5jbG9uZWFibGVUYWdzW2Zsb2F0MzJUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDY0VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDhUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQxNlRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW21hcFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tudW1iZXJUYWddID0gY2xvbmVhYmxlVGFnc1tvYmplY3RUYWddID1cbmNsb25lYWJsZVRhZ3NbcmVnZXhwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3N0cmluZ1RhZ10gPSBjbG9uZWFibGVUYWdzW3N5bWJvbFRhZ10gPVxuY2xvbmVhYmxlVGFnc1t1aW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPVxuY2xvbmVhYmxlVGFnc1t1aW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbmNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9XG5jbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xvbmVgIGFuZCBgXy5jbG9uZURlZXBgIHdoaWNoIHRyYWNrc1xuICogdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBEZWVwIGNsb25lXG4gKiAgMiAtIEZsYXR0ZW4gaW5oZXJpdGVkIHByb3BlcnRpZXNcbiAqICA0IC0gQ2xvbmUgc3ltYm9sc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBUaGUga2V5IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIHBhcmVudCBvYmplY3Qgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBhbmQgdGhlaXIgY2xvbmUgY291bnRlcnBhcnRzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUNsb25lKHZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIG9iamVjdCwgc3RhY2spIHtcbiAgdmFyIHJlc3VsdCxcbiAgICAgIGlzRGVlcCA9IGJpdG1hc2sgJiBDTE9ORV9ERUVQX0ZMQUcsXG4gICAgICBpc0ZsYXQgPSBiaXRtYXNrICYgQ0xPTkVfRkxBVF9GTEFHLFxuICAgICAgaXNGdWxsID0gYml0bWFzayAmIENMT05FX1NZTUJPTFNfRkxBRztcblxuICBpZiAoY3VzdG9taXplcikge1xuICAgIHJlc3VsdCA9IG9iamVjdCA/IGN1c3RvbWl6ZXIodmFsdWUsIGtleSwgb2JqZWN0LCBzdGFjaykgOiBjdXN0b21pemVyKHZhbHVlKTtcbiAgfVxuICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpO1xuICBpZiAoaXNBcnIpIHtcbiAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZSk7XG4gICAgaWYgKCFpc0RlZXApIHtcbiAgICAgIHJldHVybiBjb3B5QXJyYXkodmFsdWUsIHJlc3VsdCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpLFxuICAgICAgICBpc0Z1bmMgPSB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xuXG4gICAgaWYgKGlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGNsb25lQnVmZmVyKHZhbHVlLCBpc0RlZXApO1xuICAgIH1cbiAgICBpZiAodGFnID09IG9iamVjdFRhZyB8fCB0YWcgPT0gYXJnc1RhZyB8fCAoaXNGdW5jICYmICFvYmplY3QpKSB7XG4gICAgICByZXN1bHQgPSAoaXNGbGF0IHx8IGlzRnVuYykgPyB7fSA6IGluaXRDbG9uZU9iamVjdCh2YWx1ZSk7XG4gICAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgICByZXR1cm4gaXNGbGF0XG4gICAgICAgICAgPyBjb3B5U3ltYm9sc0luKHZhbHVlLCBiYXNlQXNzaWduSW4ocmVzdWx0LCB2YWx1ZSkpXG4gICAgICAgICAgOiBjb3B5U3ltYm9scyh2YWx1ZSwgYmFzZUFzc2lnbihyZXN1bHQsIHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY2xvbmVhYmxlVGFnc1t0YWddKSB7XG4gICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZSA6IHt9O1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIHJldHVybiBpdHMgY29ycmVzcG9uZGluZyBjbG9uZS5cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQodmFsdWUpO1xuICBpZiAoc3RhY2tlZCkge1xuICAgIHJldHVybiBzdGFja2VkO1xuICB9XG4gIHN0YWNrLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICBpZiAoaXNTZXQodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSkge1xuICAgICAgcmVzdWx0LmFkZChiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN1YlZhbHVlLCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc01hcCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdC5zZXQoa2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIga2V5c0Z1bmMgPSBpc0Z1bGxcbiAgICA/IChpc0ZsYXQgPyBnZXRBbGxLZXlzSW4gOiBnZXRBbGxLZXlzKVxuICAgIDogKGlzRmxhdCA/IGtleXNJbiA6IGtleXMpO1xuXG4gIHZhciBwcm9wcyA9IGlzQXJyID8gdW5kZWZpbmVkIDoga2V5c0Z1bmModmFsdWUpO1xuICBhcnJheUVhY2gocHJvcHMgfHwgdmFsdWUsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGtleSA9IHN1YlZhbHVlO1xuICAgICAgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBwb3B1bGF0ZSBjbG9uZSAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDbG9uZTtcbiIsICIvKipcbiAqIEdldHMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmxhc3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gbGFzdChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBhcnJheVtsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsYXN0O1xuIiwgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2xpY2VgIHdpdGhvdXQgYW4gaXRlcmF0ZWUgY2FsbCBndWFyZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAtc3RhcnQgPiBsZW5ndGggPyAwIDogKGxlbmd0aCArIHN0YXJ0KTtcbiAgfVxuICBlbmQgPSBlbmQgPiBsZW5ndGggPyBsZW5ndGggOiBlbmQ7XG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlbmd0aDtcbiAgfVxuICBsZW5ndGggPSBzdGFydCA+IGVuZCA/IDAgOiAoKGVuZCAtIHN0YXJ0KSA+Pj4gMCk7XG4gIHN0YXJ0ID4+Pj0gMDtcblxuICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gYXJyYXlbaW5kZXggKyBzdGFydF07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2xpY2U7XG4iLCAidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0JyksXG4gICAgYmFzZVNsaWNlID0gcmVxdWlyZSgnLi9fYmFzZVNsaWNlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgcGFyZW50IHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheX0gcGF0aCBUaGUgcGF0aCB0byBnZXQgdGhlIHBhcmVudCB2YWx1ZSBvZi5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwYXJlbnQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHBhcmVudChvYmplY3QsIHBhdGgpIHtcbiAgcmV0dXJuIHBhdGgubGVuZ3RoIDwgMiA/IG9iamVjdCA6IGJhc2VHZXQob2JqZWN0LCBiYXNlU2xpY2UocGF0aCwgMCwgLTEpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBsYXN0ID0gcmVxdWlyZSgnLi9sYXN0JyksXG4gICAgcGFyZW50ID0gcmVxdWlyZSgnLi9fcGFyZW50JyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuc2V0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwcm9wZXJ0eSBwYXRoIHRvIHVuc2V0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbnNldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gIG9iamVjdCA9IHBhcmVudChvYmplY3QsIHBhdGgpO1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgfHwgZGVsZXRlIG9iamVjdFt0b0tleShsYXN0KHBhdGgpKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuc2V0O1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1BsYWluT2JqZWN0O1xuIiwgInZhciBpc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi9pc1BsYWluT2JqZWN0Jyk7XG5cbi8qKlxuICogVXNlZCBieSBgXy5vbWl0YCB0byBjdXN0b21pemUgaXRzIGBfLmNsb25lRGVlcGAgdXNlIHRvIG9ubHkgY2xvbmUgcGxhaW5cbiAqIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdW5jbG9uZWQgdmFsdWUgb3IgYHVuZGVmaW5lZGAgdG8gZGVmZXIgY2xvbmluZyB0byBgXy5jbG9uZURlZXBgLlxuICovXG5mdW5jdGlvbiBjdXN0b21PbWl0Q2xvbmUodmFsdWUpIHtcbiAgcmV0dXJuIGlzUGxhaW5PYmplY3QodmFsdWUpID8gdW5kZWZpbmVkIDogdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3VzdG9tT21pdENsb25lO1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRmxhdHRlbmFibGU7XG4iLCAidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzRmxhdHRlbmFibGUgPSByZXF1aXJlKCcuL19pc0ZsYXR0ZW5hYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGbGF0dGVuO1xuIiwgInZhciBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyk7XG5cbi8qKlxuICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW47XG4iLCAiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwgInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgIH1cbiAgICBpbmRleCA9IC0xO1xuICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICB9XG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlclJlc3Q7XG4iLCAiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLCAiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpZGVudGl0eTtcbiIsICJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCAiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwgInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLCAidmFyIGZsYXR0ZW4gPSByZXF1aXJlKCcuL2ZsYXR0ZW4nKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIGZsYXR0ZW5zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHVuZGVmaW5lZCwgZmxhdHRlbiksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdFJlc3Q7XG4iLCAidmFyIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBiYXNlQ2xvbmUgPSByZXF1aXJlKCcuL19iYXNlQ2xvbmUnKSxcbiAgICBiYXNlVW5zZXQgPSByZXF1aXJlKCcuL19iYXNlVW5zZXQnKSxcbiAgICBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBjdXN0b21PbWl0Q2xvbmUgPSByZXF1aXJlKCcuL19jdXN0b21PbWl0Q2xvbmUnKSxcbiAgICBmbGF0UmVzdCA9IHJlcXVpcmUoJy4vX2ZsYXRSZXN0JyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGVcbiAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBgXy5waWNrYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYic6ICcyJyB9XG4gKi9cbnZhciBvbWl0ID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgdmFyIGlzRGVlcCA9IGZhbHNlO1xuICBwYXRocyA9IGFycmF5TWFwKHBhdGhzLCBmdW5jdGlvbihwYXRoKSB7XG4gICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgaXNEZWVwIHx8IChpc0RlZXAgPSBwYXRoLmxlbmd0aCA+IDEpO1xuICAgIHJldHVybiBwYXRoO1xuICB9KTtcbiAgY29weU9iamVjdChvYmplY3QsIGdldEFsbEtleXNJbihvYmplY3QpLCByZXN1bHQpO1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmVzdWx0ID0gYmFzZUNsb25lKHJlc3VsdCwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfRkxBVF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21PbWl0Q2xvbmUpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGJhc2VVbnNldChyZXN1bHQsIHBhdGhzW2xlbmd0aF0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBvbWl0O1xuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSAweGVhZDk7XG52YXIgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSAweGVhZGE7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IDB4ZWFkNTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gMHhlYWQ3O1xudmFyIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gMHhlYWUwO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gMHhlYWUxO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gMHhlYWUyO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IDB4ZWFlMztcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5lbGVtZW50Jyk7XG4gIFJFQUNUX1BPUlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wb3J0YWwnKTtcbiAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnJhZ21lbnQnKTtcbiAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbiAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvZmlsZXInKTtcbiAgUkVBQ1RfUFJPVklERVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvdmlkZXInKTtcbiAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5jb250ZXh0Jyk7XG4gIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG4gIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG4gIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xuICBSRUFDVF9NRU1PX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm1lbW8nKTtcbiAgUkVBQ1RfTEFaWV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sYXp5Jyk7XG4gIFJFQUNUX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmJsb2NrJyk7XG4gIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zZXJ2ZXIuYmxvY2snKTtcbiAgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnVuZGFtZW50YWwnKTtcbiAgUkVBQ1RfU0NPUEVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2NvcGUnKTtcbiAgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9wYXF1ZS5pZCcpO1xuICBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZGVidWdfdHJhY2VfbW9kZScpO1xuICBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG4gIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGVnYWN5X2hpZGRlbicpO1xufVxuXG4vLyBGaWx0ZXIgY2VydGFpbiBET00gYXR0cmlidXRlcyAoZS5nLiBzcmMsIGhyZWYpIGlmIHRoZWlyIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5ncy5cblxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBDcmVhdGUgRXZlbnQgSGFuZGxlIEFQSS5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUgfHwgdHlwZVswXSA9PT0gUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENoZWNrIGlmIHdlJ3JlIHJlcXVpcmVkIHRvIGFkZCBhIHBvcnQgbnVtYmVyLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkZWZhdWx0LXBvcnRcbiAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gcG9ydCBQb3J0IG51bWJlciB3ZSBuZWVkIHRvIGNoZWNrXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvdG9jb2wgUHJvdG9jb2wgd2UgbmVlZCB0byBjaGVjayBhZ2FpbnN0LlxuICogQHJldHVybnMge0Jvb2xlYW59IElzIGl0IGEgZGVmYXVsdCBwb3J0IGZvciB0aGUgZ2l2ZW4gcHJvdG9jb2xcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcXVpcmVkKHBvcnQsIHByb3RvY29sKSB7XG4gIHByb3RvY29sID0gcHJvdG9jb2wuc3BsaXQoJzonKVswXTtcbiAgcG9ydCA9ICtwb3J0O1xuXG4gIGlmICghcG9ydCkgcmV0dXJuIGZhbHNlO1xuXG4gIHN3aXRjaCAocHJvdG9jb2wpIHtcbiAgICBjYXNlICdodHRwJzpcbiAgICBjYXNlICd3cyc6XG4gICAgcmV0dXJuIHBvcnQgIT09IDgwO1xuXG4gICAgY2FzZSAnaHR0cHMnOlxuICAgIGNhc2UgJ3dzcyc6XG4gICAgcmV0dXJuIHBvcnQgIT09IDQ0MztcblxuICAgIGNhc2UgJ2Z0cCc6XG4gICAgcmV0dXJuIHBvcnQgIT09IDIxO1xuXG4gICAgY2FzZSAnZ29waGVyJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gNzA7XG5cbiAgICBjYXNlICdmaWxlJzpcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gcG9ydCAhPT0gMDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIHVuZGVmO1xuXG4vKipcbiAqIERlY29kZSBhIFVSSSBlbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFVSSSBlbmNvZGVkIHN0cmluZy5cbiAqIEByZXR1cm5zIHtTdHJpbmd8TnVsbH0gVGhlIGRlY29kZWQgc3RyaW5nLlxuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoaW5wdXQucmVwbGFjZSgvXFwrL2csICcgJykpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRlbXB0cyB0byBlbmNvZGUgYSBnaXZlbiBpbnB1dC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyB0aGF0IG5lZWRzIHRvIGJlIGVuY29kZWQuXG4gKiBAcmV0dXJucyB7U3RyaW5nfE51bGx9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBlbmNvZGUoaW5wdXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogU2ltcGxlIHF1ZXJ5IHN0cmluZyBwYXJzZXIuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBxdWVyeSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBwYXJzZWQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gcXVlcnlzdHJpbmcocXVlcnkpIHtcbiAgdmFyIHBhcnNlciA9IC8oW149PyMmXSspPT8oW14mXSopL2dcbiAgICAsIHJlc3VsdCA9IHt9XG4gICAgLCBwYXJ0O1xuXG4gIHdoaWxlIChwYXJ0ID0gcGFyc2VyLmV4ZWMocXVlcnkpKSB7XG4gICAgdmFyIGtleSA9IGRlY29kZShwYXJ0WzFdKVxuICAgICAgLCB2YWx1ZSA9IGRlY29kZShwYXJ0WzJdKTtcblxuICAgIC8vXG4gICAgLy8gUHJldmVudCBvdmVycmlkaW5nIG9mIGV4aXN0aW5nIHByb3BlcnRpZXMuIFRoaXMgZW5zdXJlcyB0aGF0IGJ1aWxkLWluXG4gICAgLy8gbWV0aG9kcyBsaWtlIGB0b1N0cmluZ2Agb3IgX19wcm90b19fIGFyZSBub3Qgb3ZlcnJpZGVuIGJ5IG1hbGljaW91c1xuICAgIC8vIHF1ZXJ5c3RyaW5ncy5cbiAgICAvL1xuICAgIC8vIEluIHRoZSBjYXNlIGlmIGZhaWxlZCBkZWNvZGluZywgd2Ugd2FudCB0byBvbWl0IHRoZSBrZXkvdmFsdWUgcGFpcnNcbiAgICAvLyBmcm9tIHRoZSByZXN1bHQuXG4gICAgLy9cbiAgICBpZiAoa2V5ID09PSBudWxsIHx8IHZhbHVlID09PSBudWxsIHx8IGtleSBpbiByZXN1bHQpIGNvbnRpbnVlO1xuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhIHF1ZXJ5IHN0cmluZyB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdGhhdCBzaG91bGQgYmUgdHJhbnNmb3JtZWQuXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJlZml4IE9wdGlvbmFsIHByZWZpeC5cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBxdWVyeXN0cmluZ2lmeShvYmosIHByZWZpeCkge1xuICBwcmVmaXggPSBwcmVmaXggfHwgJyc7XG5cbiAgdmFyIHBhaXJzID0gW11cbiAgICAsIHZhbHVlXG4gICAgLCBrZXk7XG5cbiAgLy9cbiAgLy8gT3B0aW9uYWxseSBwcmVmaXggd2l0aCBhICc/JyBpZiBuZWVkZWRcbiAgLy9cbiAgaWYgKCdzdHJpbmcnICE9PSB0eXBlb2YgcHJlZml4KSBwcmVmaXggPSAnPyc7XG5cbiAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgLy9cbiAgICAgIC8vIEVkZ2UgY2FzZXMgd2hlcmUgd2UgYWN0dWFsbHkgd2FudCB0byBlbmNvZGUgdGhlIHZhbHVlIHRvIGFuIGVtcHR5XG4gICAgICAvLyBzdHJpbmcgaW5zdGVhZCBvZiB0aGUgc3RyaW5naWZpZWQgdmFsdWUuXG4gICAgICAvL1xuICAgICAgaWYgKCF2YWx1ZSAmJiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmIHx8IGlzTmFOKHZhbHVlKSkpIHtcbiAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgIH1cblxuICAgICAga2V5ID0gZW5jb2RlKGtleSk7XG4gICAgICB2YWx1ZSA9IGVuY29kZSh2YWx1ZSk7XG5cbiAgICAgIC8vXG4gICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gZW5jb2RlIHRoZSBzdHJpbmdzLCB3ZSBzaG91bGQgYmFpbCBvdXQgYXMgd2UgZG9uJ3RcbiAgICAgIC8vIHdhbnQgdG8gYWRkIGludmFsaWQgc3RyaW5ncyB0byB0aGUgcXVlcnkuXG4gICAgICAvL1xuICAgICAgaWYgKGtleSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gbnVsbCkgY29udGludWU7XG4gICAgICBwYWlycy5wdXNoKGtleSArJz0nKyB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhaXJzLmxlbmd0aCA/IHByZWZpeCArIHBhaXJzLmpvaW4oJyYnKSA6ICcnO1xufVxuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuZXhwb3J0cy5zdHJpbmdpZnkgPSBxdWVyeXN0cmluZ2lmeTtcbmV4cG9ydHMucGFyc2UgPSBxdWVyeXN0cmluZztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciByZXF1aXJlZCA9IHJlcXVpcmUoJ3JlcXVpcmVzLXBvcnQnKVxuICAsIHFzID0gcmVxdWlyZSgncXVlcnlzdHJpbmdpZnknKVxuICAsIGNvbnRyb2xPcldoaXRlc3BhY2UgPSAvXltcXHgwMC1cXHgyMFxcdTAwYTBcXHUxNjgwXFx1MjAwMC1cXHUyMDBhXFx1MjAyOFxcdTIwMjlcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHVmZWZmXSsvXG4gICwgQ1JIVExGID0gL1tcXG5cXHJcXHRdL2dcbiAgLCBzbGFzaGVzID0gL15bQS1aYS16XVtBLVphLXowLTkrLS5dKjpcXC9cXC8vXG4gICwgcG9ydCA9IC86XFxkKyQvXG4gICwgcHJvdG9jb2xyZSA9IC9eKFthLXpdW2EtejAtOS4rLV0qOik/KFxcL1xcLyk/KFtcXFxcL10rKT8oW1xcU1xcc10qKS9pXG4gICwgd2luZG93c0RyaXZlTGV0dGVyID0gL15bYS16QS1aXTovO1xuXG4vKipcbiAqIFJlbW92ZSBjb250cm9sIGNoYXJhY3RlcnMgYW5kIHdoaXRlc3BhY2UgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gc3RyIFN0cmluZyB0byB0cmltLlxuICogQHJldHVybnMge1N0cmluZ30gQSBuZXcgc3RyaW5nIHJlcHJlc2VudGluZyBgc3RyYCBzdHJpcHBlZCBvZiBjb250cm9sXG4gKiAgICAgY2hhcmFjdGVycyBhbmQgd2hpdGVzcGFjZSBmcm9tIGl0cyBiZWdpbm5pbmcuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHRyaW1MZWZ0KHN0cikge1xuICByZXR1cm4gKHN0ciA/IHN0ciA6ICcnKS50b1N0cmluZygpLnJlcGxhY2UoY29udHJvbE9yV2hpdGVzcGFjZSwgJycpO1xufVxuXG4vKipcbiAqIFRoZXNlIGFyZSB0aGUgcGFyc2UgcnVsZXMgZm9yIHRoZSBVUkwgcGFyc2VyLCBpdCBpbmZvcm1zIHRoZSBwYXJzZXJcbiAqIGFib3V0OlxuICpcbiAqIDAuIFRoZSBjaGFyIGl0IE5lZWRzIHRvIHBhcnNlLCBpZiBpdCdzIGEgc3RyaW5nIGl0IHNob3VsZCBiZSBkb25lIHVzaW5nXG4gKiAgICBpbmRleE9mLCBSZWdFeHAgdXNpbmcgZXhlYyBhbmQgTmFOIG1lYW5zIHNldCBhcyBjdXJyZW50IHZhbHVlLlxuICogMS4gVGhlIHByb3BlcnR5IHdlIHNob3VsZCBzZXQgd2hlbiBwYXJzaW5nIHRoaXMgdmFsdWUuXG4gKiAyLiBJbmRpY2F0aW9uIGlmIGl0J3MgYmFja3dhcmRzIG9yIGZvcndhcmQgcGFyc2luZywgd2hlbiBzZXQgYXMgbnVtYmVyIGl0J3NcbiAqICAgIHRoZSB2YWx1ZSBvZiBleHRyYSBjaGFycyB0aGF0IHNob3VsZCBiZSBzcGxpdCBvZmYuXG4gKiAzLiBJbmhlcml0IGZyb20gbG9jYXRpb24gaWYgbm9uIGV4aXN0aW5nIGluIHRoZSBwYXJzZXIuXG4gKiA0LiBgdG9Mb3dlckNhc2VgIHRoZSByZXN1bHRpbmcgdmFsdWUuXG4gKi9cbnZhciBydWxlcyA9IFtcbiAgWycjJywgJ2hhc2gnXSwgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGJhY2suXG4gIFsnPycsICdxdWVyeSddLCAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBiYWNrLlxuICBmdW5jdGlvbiBzYW5pdGl6ZShhZGRyZXNzLCB1cmwpIHsgICAgIC8vIFNhbml0aXplIHdoYXQgaXMgbGVmdCBvZiB0aGUgYWRkcmVzc1xuICAgIHJldHVybiBpc1NwZWNpYWwodXJsLnByb3RvY29sKSA/IGFkZHJlc3MucmVwbGFjZSgvXFxcXC9nLCAnLycpIDogYWRkcmVzcztcbiAgfSxcbiAgWycvJywgJ3BhdGhuYW1lJ10sICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGJhY2suXG4gIFsnQCcsICdhdXRoJywgMV0sICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBmcm9udC5cbiAgW05hTiwgJ2hvc3QnLCB1bmRlZmluZWQsIDEsIDFdLCAgICAgICAvLyBTZXQgbGVmdCBvdmVyIHZhbHVlLlxuICBbLzooXFxkKikkLywgJ3BvcnQnLCB1bmRlZmluZWQsIDFdLCAgICAvLyBSZWdFeHAgdGhlIGJhY2suXG4gIFtOYU4sICdob3N0bmFtZScsIHVuZGVmaW5lZCwgMSwgMV0gICAgLy8gU2V0IGxlZnQgb3Zlci5cbl07XG5cbi8qKlxuICogVGhlc2UgcHJvcGVydGllcyBzaG91bGQgbm90IGJlIGNvcGllZCBvciBpbmhlcml0ZWQgZnJvbS4gVGhpcyBpcyBvbmx5IG5lZWRlZFxuICogZm9yIGFsbCBub24gYmxvYiBVUkwncyBhcyBhIGJsb2IgVVJMIGRvZXMgbm90IGluY2x1ZGUgYSBoYXNoLCBvbmx5IHRoZVxuICogb3JpZ2luLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG52YXIgaWdub3JlID0geyBoYXNoOiAxLCBxdWVyeTogMSB9O1xuXG4vKipcbiAqIFRoZSBsb2NhdGlvbiBvYmplY3QgZGlmZmVycyB3aGVuIHlvdXIgY29kZSBpcyBsb2FkZWQgdGhyb3VnaCBhIG5vcm1hbCBwYWdlLFxuICogV29ya2VyIG9yIHRocm91Z2ggYSB3b3JrZXIgdXNpbmcgYSBibG9iLiBBbmQgd2l0aCB0aGUgYmxvYmJsZSBiZWdpbnMgdGhlXG4gKiB0cm91YmxlIGFzIHRoZSBsb2NhdGlvbiBvYmplY3Qgd2lsbCBjb250YWluIHRoZSBVUkwgb2YgdGhlIGJsb2IsIG5vdCB0aGVcbiAqIGxvY2F0aW9uIG9mIHRoZSBwYWdlIHdoZXJlIG91ciBjb2RlIGlzIGxvYWRlZCBpbi4gVGhlIGFjdHVhbCBvcmlnaW4gaXNcbiAqIGVuY29kZWQgaW4gdGhlIGBwYXRobmFtZWAgc28gd2UgY2FuIHRoYW5rZnVsbHkgZ2VuZXJhdGUgYSBnb29kIFwiZGVmYXVsdFwiXG4gKiBsb2NhdGlvbiBmcm9tIGl0IHNvIHdlIGNhbiBnZW5lcmF0ZSBwcm9wZXIgcmVsYXRpdmUgVVJMJ3MgYWdhaW4uXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBsb2MgT3B0aW9uYWwgZGVmYXVsdCBsb2NhdGlvbiBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBsb2xjYXRpb24gb2JqZWN0LlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBsb2xjYXRpb24obG9jKSB7XG4gIHZhciBnbG9iYWxWYXI7XG5cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSBnbG9iYWxWYXIgPSB3aW5kb3c7XG4gIGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSBnbG9iYWxWYXIgPSBnbG9iYWw7XG4gIGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgZ2xvYmFsVmFyID0gc2VsZjtcbiAgZWxzZSBnbG9iYWxWYXIgPSB7fTtcblxuICB2YXIgbG9jYXRpb24gPSBnbG9iYWxWYXIubG9jYXRpb24gfHwge307XG4gIGxvYyA9IGxvYyB8fCBsb2NhdGlvbjtcblxuICB2YXIgZmluYWxkZXN0aW5hdGlvbiA9IHt9XG4gICAgLCB0eXBlID0gdHlwZW9mIGxvY1xuICAgICwga2V5O1xuXG4gIGlmICgnYmxvYjonID09PSBsb2MucHJvdG9jb2wpIHtcbiAgICBmaW5hbGRlc3RpbmF0aW9uID0gbmV3IFVybCh1bmVzY2FwZShsb2MucGF0aG5hbWUpLCB7fSk7XG4gIH0gZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGUpIHtcbiAgICBmaW5hbGRlc3RpbmF0aW9uID0gbmV3IFVybChsb2MsIHt9KTtcbiAgICBmb3IgKGtleSBpbiBpZ25vcmUpIGRlbGV0ZSBmaW5hbGRlc3RpbmF0aW9uW2tleV07XG4gIH0gZWxzZSBpZiAoJ29iamVjdCcgPT09IHR5cGUpIHtcbiAgICBmb3IgKGtleSBpbiBsb2MpIHtcbiAgICAgIGlmIChrZXkgaW4gaWdub3JlKSBjb250aW51ZTtcbiAgICAgIGZpbmFsZGVzdGluYXRpb25ba2V5XSA9IGxvY1trZXldO1xuICAgIH1cblxuICAgIGlmIChmaW5hbGRlc3RpbmF0aW9uLnNsYXNoZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmluYWxkZXN0aW5hdGlvbi5zbGFzaGVzID0gc2xhc2hlcy50ZXN0KGxvYy5ocmVmKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmluYWxkZXN0aW5hdGlvbjtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgcHJvdG9jb2wgc2NoZW1lIGlzIHNwZWNpYWwuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IFRoZSBwcm90b2NvbCBzY2hlbWUgb2YgdGhlIFVSTFxuICogQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBwcm90b2NvbCBzY2hlbWUgaXMgc3BlY2lhbCwgZWxzZSBgZmFsc2VgXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpc1NwZWNpYWwoc2NoZW1lKSB7XG4gIHJldHVybiAoXG4gICAgc2NoZW1lID09PSAnZmlsZTonIHx8XG4gICAgc2NoZW1lID09PSAnZnRwOicgfHxcbiAgICBzY2hlbWUgPT09ICdodHRwOicgfHxcbiAgICBzY2hlbWUgPT09ICdodHRwczonIHx8XG4gICAgc2NoZW1lID09PSAnd3M6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ3dzczonXG4gICk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUHJvdG9jb2xFeHRyYWN0XG4gKiBAdHlwZSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBwcm90b2NvbCBQcm90b2NvbCBtYXRjaGVkIGluIHRoZSBVUkwsIGluIGxvd2VyY2FzZS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc2xhc2hlcyBgdHJ1ZWAgaWYgcHJvdG9jb2wgaXMgZm9sbG93ZWQgYnkgXCIvL1wiLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcmVzdCBSZXN0IG9mIHRoZSBVUkwgdGhhdCBpcyBub3QgcGFydCBvZiB0aGUgcHJvdG9jb2wuXG4gKi9cblxuLyoqXG4gKiBFeHRyYWN0IHByb3RvY29sIGluZm9ybWF0aW9uIGZyb20gYSBVUkwgd2l0aC93aXRob3V0IGRvdWJsZSBzbGFzaCAoXCIvL1wiKS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyBVUkwgd2Ugd2FudCB0byBleHRyYWN0IGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gbG9jYXRpb25cbiAqIEByZXR1cm4ge1Byb3RvY29sRXh0cmFjdH0gRXh0cmFjdGVkIGluZm9ybWF0aW9uLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFByb3RvY29sKGFkZHJlc3MsIGxvY2F0aW9uKSB7XG4gIGFkZHJlc3MgPSB0cmltTGVmdChhZGRyZXNzKTtcbiAgYWRkcmVzcyA9IGFkZHJlc3MucmVwbGFjZShDUkhUTEYsICcnKTtcbiAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCB7fTtcblxuICB2YXIgbWF0Y2ggPSBwcm90b2NvbHJlLmV4ZWMoYWRkcmVzcyk7XG4gIHZhciBwcm90b2NvbCA9IG1hdGNoWzFdID8gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKSA6ICcnO1xuICB2YXIgZm9yd2FyZFNsYXNoZXMgPSAhIW1hdGNoWzJdO1xuICB2YXIgb3RoZXJTbGFzaGVzID0gISFtYXRjaFszXTtcbiAgdmFyIHNsYXNoZXNDb3VudCA9IDA7XG4gIHZhciByZXN0O1xuXG4gIGlmIChmb3J3YXJkU2xhc2hlcykge1xuICAgIGlmIChvdGhlclNsYXNoZXMpIHtcbiAgICAgIHJlc3QgPSBtYXRjaFsyXSArIG1hdGNoWzNdICsgbWF0Y2hbNF07XG4gICAgICBzbGFzaGVzQ291bnQgPSBtYXRjaFsyXS5sZW5ndGggKyBtYXRjaFszXS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3QgPSBtYXRjaFsyXSArIG1hdGNoWzRdO1xuICAgICAgc2xhc2hlc0NvdW50ID0gbWF0Y2hbMl0ubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAob3RoZXJTbGFzaGVzKSB7XG4gICAgICByZXN0ID0gbWF0Y2hbM10gKyBtYXRjaFs0XTtcbiAgICAgIHNsYXNoZXNDb3VudCA9IG1hdGNoWzNdLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdCA9IG1hdGNoWzRdXG4gICAgfVxuICB9XG5cbiAgaWYgKHByb3RvY29sID09PSAnZmlsZTonKSB7XG4gICAgaWYgKHNsYXNoZXNDb3VudCA+PSAyKSB7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZSgyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNTcGVjaWFsKHByb3RvY29sKSkge1xuICAgIHJlc3QgPSBtYXRjaFs0XTtcbiAgfSBlbHNlIGlmIChwcm90b2NvbCkge1xuICAgIGlmIChmb3J3YXJkU2xhc2hlcykge1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoMik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHNsYXNoZXNDb3VudCA+PSAyICYmIGlzU3BlY2lhbChsb2NhdGlvbi5wcm90b2NvbCkpIHtcbiAgICByZXN0ID0gbWF0Y2hbNF07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHByb3RvY29sOiBwcm90b2NvbCxcbiAgICBzbGFzaGVzOiBmb3J3YXJkU2xhc2hlcyB8fCBpc1NwZWNpYWwocHJvdG9jb2wpLFxuICAgIHNsYXNoZXNDb3VudDogc2xhc2hlc0NvdW50LFxuICAgIHJlc3Q6IHJlc3RcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgcmVsYXRpdmUgVVJMIHBhdGhuYW1lIGFnYWluc3QgYSBiYXNlIFVSTCBwYXRobmFtZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVsYXRpdmUgUGF0aG5hbWUgb2YgdGhlIHJlbGF0aXZlIFVSTC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBiYXNlIFBhdGhuYW1lIG9mIHRoZSBiYXNlIFVSTC5cbiAqIEByZXR1cm4ge1N0cmluZ30gUmVzb2x2ZWQgcGF0aG5hbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXNvbHZlKHJlbGF0aXZlLCBiYXNlKSB7XG4gIGlmIChyZWxhdGl2ZSA9PT0gJycpIHJldHVybiBiYXNlO1xuXG4gIHZhciBwYXRoID0gKGJhc2UgfHwgJy8nKS5zcGxpdCgnLycpLnNsaWNlKDAsIC0xKS5jb25jYXQocmVsYXRpdmUuc3BsaXQoJy8nKSlcbiAgICAsIGkgPSBwYXRoLmxlbmd0aFxuICAgICwgbGFzdCA9IHBhdGhbaSAtIDFdXG4gICAgLCB1bnNoaWZ0ID0gZmFsc2VcbiAgICAsIHVwID0gMDtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgaWYgKHBhdGhbaV0gPT09ICcuJykge1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXRoW2ldID09PSAnLi4nKSB7XG4gICAgICBwYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgaWYgKGkgPT09IDApIHVuc2hpZnQgPSB0cnVlO1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1bnNoaWZ0KSBwYXRoLnVuc2hpZnQoJycpO1xuICBpZiAobGFzdCA9PT0gJy4nIHx8IGxhc3QgPT09ICcuLicpIHBhdGgucHVzaCgnJyk7XG5cbiAgcmV0dXJuIHBhdGguam9pbignLycpO1xufVxuXG4vKipcbiAqIFRoZSBhY3R1YWwgVVJMIGluc3RhbmNlLiBJbnN0ZWFkIG9mIHJldHVybmluZyBhbiBvYmplY3Qgd2UndmUgb3B0ZWQtaW4gdG9cbiAqIGNyZWF0ZSBhbiBhY3R1YWwgY29uc3RydWN0b3IgYXMgaXQncyBtdWNoIG1vcmUgbWVtb3J5IGVmZmljaWVudCBhbmRcbiAqIGZhc3RlciBhbmQgaXQgcGxlYXNlcyBteSBPQ0QuXG4gKlxuICogSXQgaXMgd29ydGggbm90aW5nIHRoYXQgd2Ugc2hvdWxkIG5vdCB1c2UgYFVSTGAgYXMgY2xhc3MgbmFtZSB0byBwcmV2ZW50XG4gKiBjbGFzaGVzIHdpdGggdGhlIGdsb2JhbCBVUkwgaW5zdGFuY2UgdGhhdCBnb3QgaW50cm9kdWNlZCBpbiBicm93c2Vycy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIFVSTCB3ZSB3YW50IHRvIHBhcnNlLlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBbbG9jYXRpb25dIExvY2F0aW9uIGRlZmF1bHRzIGZvciByZWxhdGl2ZSBwYXRocy5cbiAqIEBwYXJhbSB7Qm9vbGVhbnxGdW5jdGlvbn0gW3BhcnNlcl0gUGFyc2VyIGZvciB0aGUgcXVlcnkgc3RyaW5nLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gVXJsKGFkZHJlc3MsIGxvY2F0aW9uLCBwYXJzZXIpIHtcbiAgYWRkcmVzcyA9IHRyaW1MZWZ0KGFkZHJlc3MpO1xuICBhZGRyZXNzID0gYWRkcmVzcy5yZXBsYWNlKENSSFRMRiwgJycpO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBVcmwpKSB7XG4gICAgcmV0dXJuIG5ldyBVcmwoYWRkcmVzcywgbG9jYXRpb24sIHBhcnNlcik7XG4gIH1cblxuICB2YXIgcmVsYXRpdmUsIGV4dHJhY3RlZCwgcGFyc2UsIGluc3RydWN0aW9uLCBpbmRleCwga2V5XG4gICAgLCBpbnN0cnVjdGlvbnMgPSBydWxlcy5zbGljZSgpXG4gICAgLCB0eXBlID0gdHlwZW9mIGxvY2F0aW9uXG4gICAgLCB1cmwgPSB0aGlzXG4gICAgLCBpID0gMDtcblxuICAvL1xuICAvLyBUaGUgZm9sbG93aW5nIGlmIHN0YXRlbWVudHMgYWxsb3dzIHRoaXMgbW9kdWxlIHR3byBoYXZlIGNvbXBhdGliaWxpdHkgd2l0aFxuICAvLyAyIGRpZmZlcmVudCBBUEk6XG4gIC8vXG4gIC8vIDEuIE5vZGUuanMncyBgdXJsLnBhcnNlYCBhcGkgd2hpY2ggYWNjZXB0cyBhIFVSTCwgYm9vbGVhbiBhcyBhcmd1bWVudHNcbiAgLy8gICAgd2hlcmUgdGhlIGJvb2xlYW4gaW5kaWNhdGVzIHRoYXQgdGhlIHF1ZXJ5IHN0cmluZyBzaG91bGQgYWxzbyBiZSBwYXJzZWQuXG4gIC8vXG4gIC8vIDIuIFRoZSBgVVJMYCBpbnRlcmZhY2Ugb2YgdGhlIGJyb3dzZXIgd2hpY2ggYWNjZXB0cyBhIFVSTCwgb2JqZWN0IGFzXG4gIC8vICAgIGFyZ3VtZW50cy4gVGhlIHN1cHBsaWVkIG9iamVjdCB3aWxsIGJlIHVzZWQgYXMgZGVmYXVsdCB2YWx1ZXMgLyBmYWxsLWJhY2tcbiAgLy8gICAgZm9yIHJlbGF0aXZlIHBhdGhzLlxuICAvL1xuICBpZiAoJ29iamVjdCcgIT09IHR5cGUgJiYgJ3N0cmluZycgIT09IHR5cGUpIHtcbiAgICBwYXJzZXIgPSBsb2NhdGlvbjtcbiAgICBsb2NhdGlvbiA9IG51bGw7XG4gIH1cblxuICBpZiAocGFyc2VyICYmICdmdW5jdGlvbicgIT09IHR5cGVvZiBwYXJzZXIpIHBhcnNlciA9IHFzLnBhcnNlO1xuXG4gIGxvY2F0aW9uID0gbG9sY2F0aW9uKGxvY2F0aW9uKTtcblxuICAvL1xuICAvLyBFeHRyYWN0IHByb3RvY29sIGluZm9ybWF0aW9uIGJlZm9yZSBydW5uaW5nIHRoZSBpbnN0cnVjdGlvbnMuXG4gIC8vXG4gIGV4dHJhY3RlZCA9IGV4dHJhY3RQcm90b2NvbChhZGRyZXNzIHx8ICcnLCBsb2NhdGlvbik7XG4gIHJlbGF0aXZlID0gIWV4dHJhY3RlZC5wcm90b2NvbCAmJiAhZXh0cmFjdGVkLnNsYXNoZXM7XG4gIHVybC5zbGFzaGVzID0gZXh0cmFjdGVkLnNsYXNoZXMgfHwgcmVsYXRpdmUgJiYgbG9jYXRpb24uc2xhc2hlcztcbiAgdXJsLnByb3RvY29sID0gZXh0cmFjdGVkLnByb3RvY29sIHx8IGxvY2F0aW9uLnByb3RvY29sIHx8ICcnO1xuICBhZGRyZXNzID0gZXh0cmFjdGVkLnJlc3Q7XG5cbiAgLy9cbiAgLy8gV2hlbiB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudCBpcyBhYnNlbnQgdGhlIFVSTCBzdGFydHMgd2l0aCBhIHBhdGhcbiAgLy8gY29tcG9uZW50LlxuICAvL1xuICBpZiAoXG4gICAgZXh0cmFjdGVkLnByb3RvY29sID09PSAnZmlsZTonICYmIChcbiAgICAgIGV4dHJhY3RlZC5zbGFzaGVzQ291bnQgIT09IDIgfHwgd2luZG93c0RyaXZlTGV0dGVyLnRlc3QoYWRkcmVzcykpIHx8XG4gICAgKCFleHRyYWN0ZWQuc2xhc2hlcyAmJlxuICAgICAgKGV4dHJhY3RlZC5wcm90b2NvbCB8fFxuICAgICAgICBleHRyYWN0ZWQuc2xhc2hlc0NvdW50IDwgMiB8fFxuICAgICAgICAhaXNTcGVjaWFsKHVybC5wcm90b2NvbCkpKVxuICApIHtcbiAgICBpbnN0cnVjdGlvbnNbM10gPSBbLyguKikvLCAncGF0aG5hbWUnXTtcbiAgfVxuXG4gIGZvciAoOyBpIDwgaW5zdHJ1Y3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNbaV07XG5cbiAgICBpZiAodHlwZW9mIGluc3RydWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhZGRyZXNzID0gaW5zdHJ1Y3Rpb24oYWRkcmVzcywgdXJsKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHBhcnNlID0gaW5zdHJ1Y3Rpb25bMF07XG4gICAga2V5ID0gaW5zdHJ1Y3Rpb25bMV07XG5cbiAgICBpZiAocGFyc2UgIT09IHBhcnNlKSB7XG4gICAgICB1cmxba2V5XSA9IGFkZHJlc3M7XG4gICAgfSBlbHNlIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHBhcnNlKSB7XG4gICAgICBpbmRleCA9IHBhcnNlID09PSAnQCdcbiAgICAgICAgPyBhZGRyZXNzLmxhc3RJbmRleE9mKHBhcnNlKVxuICAgICAgICA6IGFkZHJlc3MuaW5kZXhPZihwYXJzZSk7XG5cbiAgICAgIGlmICh+aW5kZXgpIHtcbiAgICAgICAgaWYgKCdudW1iZXInID09PSB0eXBlb2YgaW5zdHJ1Y3Rpb25bMl0pIHtcbiAgICAgICAgICB1cmxba2V5XSA9IGFkZHJlc3Muc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLnNsaWNlKGluZGV4ICsgaW5zdHJ1Y3Rpb25bMl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVybFtrZXldID0gYWRkcmVzcy5zbGljZShpbmRleCk7XG4gICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoaW5kZXggPSBwYXJzZS5leGVjKGFkZHJlc3MpKSkge1xuICAgICAgdXJsW2tleV0gPSBpbmRleFsxXTtcbiAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLnNsaWNlKDAsIGluZGV4LmluZGV4KTtcbiAgICB9XG5cbiAgICB1cmxba2V5XSA9IHVybFtrZXldIHx8IChcbiAgICAgIHJlbGF0aXZlICYmIGluc3RydWN0aW9uWzNdID8gbG9jYXRpb25ba2V5XSB8fCAnJyA6ICcnXG4gICAgKTtcblxuICAgIC8vXG4gICAgLy8gSG9zdG5hbWUsIGhvc3QgYW5kIHByb3RvY29sIHNob3VsZCBiZSBsb3dlcmNhc2VkIHNvIHRoZXkgY2FuIGJlIHVzZWQgdG9cbiAgICAvLyBjcmVhdGUgYSBwcm9wZXIgYG9yaWdpbmAuXG4gICAgLy9cbiAgICBpZiAoaW5zdHJ1Y3Rpb25bNF0pIHVybFtrZXldID0gdXJsW2tleV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8vXG4gIC8vIEFsc28gcGFyc2UgdGhlIHN1cHBsaWVkIHF1ZXJ5IHN0cmluZyBpbiB0byBhbiBvYmplY3QuIElmIHdlJ3JlIHN1cHBsaWVkXG4gIC8vIHdpdGggYSBjdXN0b20gcGFyc2VyIGFzIGZ1bmN0aW9uIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYnVpbGQtaW5cbiAgLy8gcGFyc2VyLlxuICAvL1xuICBpZiAocGFyc2VyKSB1cmwucXVlcnkgPSBwYXJzZXIodXJsLnF1ZXJ5KTtcblxuICAvL1xuICAvLyBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlLCByZXNvbHZlIHRoZSBwYXRobmFtZSBhZ2FpbnN0IHRoZSBiYXNlIFVSTC5cbiAgLy9cbiAgaWYgKFxuICAgICAgcmVsYXRpdmVcbiAgICAmJiBsb2NhdGlvbi5zbGFzaGVzXG4gICAgJiYgdXJsLnBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgJiYgKHVybC5wYXRobmFtZSAhPT0gJycgfHwgbG9jYXRpb24ucGF0aG5hbWUgIT09ICcnKVxuICApIHtcbiAgICB1cmwucGF0aG5hbWUgPSByZXNvbHZlKHVybC5wYXRobmFtZSwgbG9jYXRpb24ucGF0aG5hbWUpO1xuICB9XG5cbiAgLy9cbiAgLy8gRGVmYXVsdCB0byBhIC8gZm9yIHBhdGhuYW1lIGlmIG5vbmUgZXhpc3RzLiBUaGlzIG5vcm1hbGl6ZXMgdGhlIFVSTFxuICAvLyB0byBhbHdheXMgaGF2ZSBhIC9cbiAgLy9cbiAgaWYgKHVybC5wYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJyAmJiBpc1NwZWNpYWwodXJsLnByb3RvY29sKSkge1xuICAgIHVybC5wYXRobmFtZSA9ICcvJyArIHVybC5wYXRobmFtZTtcbiAgfVxuXG4gIC8vXG4gIC8vIFdlIHNob3VsZCBub3QgYWRkIHBvcnQgbnVtYmVycyBpZiB0aGV5IGFyZSBhbHJlYWR5IHRoZSBkZWZhdWx0IHBvcnQgbnVtYmVyXG4gIC8vIGZvciBhIGdpdmVuIHByb3RvY29sLiBBcyB0aGUgaG9zdCBhbHNvIGNvbnRhaW5zIHRoZSBwb3J0IG51bWJlciB3ZSdyZSBnb2luZ1xuICAvLyBvdmVycmlkZSBpdCB3aXRoIHRoZSBob3N0bmFtZSB3aGljaCBjb250YWlucyBubyBwb3J0IG51bWJlci5cbiAgLy9cbiAgaWYgKCFyZXF1aXJlZCh1cmwucG9ydCwgdXJsLnByb3RvY29sKSkge1xuICAgIHVybC5ob3N0ID0gdXJsLmhvc3RuYW1lO1xuICAgIHVybC5wb3J0ID0gJyc7XG4gIH1cblxuICAvL1xuICAvLyBQYXJzZSBkb3duIHRoZSBgYXV0aGAgZm9yIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQuXG4gIC8vXG4gIHVybC51c2VybmFtZSA9IHVybC5wYXNzd29yZCA9ICcnO1xuXG4gIGlmICh1cmwuYXV0aCkge1xuICAgIGluZGV4ID0gdXJsLmF1dGguaW5kZXhPZignOicpO1xuXG4gICAgaWYgKH5pbmRleCkge1xuICAgICAgdXJsLnVzZXJuYW1lID0gdXJsLmF1dGguc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgdXJsLnVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh1cmwudXNlcm5hbWUpKTtcblxuICAgICAgdXJsLnBhc3N3b3JkID0gdXJsLmF1dGguc2xpY2UoaW5kZXggKyAxKTtcbiAgICAgIHVybC5wYXNzd29yZCA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLnBhc3N3b3JkKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsLnVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh1cmwuYXV0aCkpO1xuICAgIH1cblxuICAgIHVybC5hdXRoID0gdXJsLnBhc3N3b3JkID8gdXJsLnVzZXJuYW1lICsnOicrIHVybC5wYXNzd29yZCA6IHVybC51c2VybmFtZTtcbiAgfVxuXG4gIHVybC5vcmlnaW4gPSB1cmwucHJvdG9jb2wgIT09ICdmaWxlOicgJiYgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgJiYgdXJsLmhvc3RcbiAgICA/IHVybC5wcm90b2NvbCArJy8vJysgdXJsLmhvc3RcbiAgICA6ICdudWxsJztcblxuICAvL1xuICAvLyBUaGUgaHJlZiBpcyBqdXN0IHRoZSBjb21waWxlZCByZXN1bHQuXG4gIC8vXG4gIHVybC5ocmVmID0gdXJsLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogVGhpcyBpcyBjb252ZW5pZW5jZSBtZXRob2QgZm9yIGNoYW5naW5nIHByb3BlcnRpZXMgaW4gdGhlIFVSTCBpbnN0YW5jZSB0b1xuICogaW5zdXJlIHRoYXQgdGhleSBhbGwgcHJvcGFnYXRlIGNvcnJlY3RseS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFydCAgICAgICAgICBQcm9wZXJ0eSB3ZSBuZWVkIHRvIGFkanVzdC5cbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlICAgICAgICAgIFRoZSBuZXdseSBhc3NpZ25lZCB2YWx1ZS5cbiAqIEBwYXJhbSB7Qm9vbGVhbnxGdW5jdGlvbn0gZm4gIFdoZW4gc2V0dGluZyB0aGUgcXVlcnksIGl0IHdpbGwgYmUgdGhlIGZ1bmN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIHBhcnNlIHRoZSBxdWVyeS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0dGluZyB0aGUgcHJvdG9jb2wsIGRvdWJsZSBzbGFzaCB3aWxsIGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHVybCBpZiBpdCBpcyB0cnVlLlxuICogQHJldHVybnMge1VSTH0gVVJMIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gc2V0KHBhcnQsIHZhbHVlLCBmbikge1xuICB2YXIgdXJsID0gdGhpcztcblxuICBzd2l0Y2ggKHBhcnQpIHtcbiAgICBjYXNlICdxdWVyeSc6XG4gICAgICBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgdmFsdWUgPSAoZm4gfHwgcXMucGFyc2UpKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3BvcnQnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICghcmVxdWlyZWQodmFsdWUsIHVybC5wcm90b2NvbCkpIHtcbiAgICAgICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWU7XG4gICAgICAgIHVybFtwYXJ0XSA9ICcnO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgICB1cmwuaG9zdCA9IHVybC5ob3N0bmFtZSArJzonKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdob3N0bmFtZSc6XG4gICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcblxuICAgICAgaWYgKHVybC5wb3J0KSB2YWx1ZSArPSAnOicrIHVybC5wb3J0O1xuICAgICAgdXJsLmhvc3QgPSB2YWx1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaG9zdCc6XG4gICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcblxuICAgICAgaWYgKHBvcnQudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnOicpO1xuICAgICAgICB1cmwucG9ydCA9IHZhbHVlLnBvcCgpO1xuICAgICAgICB1cmwuaG9zdG5hbWUgPSB2YWx1ZS5qb2luKCc6Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmwuaG9zdG5hbWUgPSB2YWx1ZTtcbiAgICAgICAgdXJsLnBvcnQgPSAnJztcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwcm90b2NvbCc6XG4gICAgICB1cmwucHJvdG9jb2wgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdXJsLnNsYXNoZXMgPSAhZm47XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3BhdGhuYW1lJzpcbiAgICBjYXNlICdoYXNoJzpcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YXIgY2hhciA9IHBhcnQgPT09ICdwYXRobmFtZScgPyAnLycgOiAnIyc7XG4gICAgICAgIHVybFtwYXJ0XSA9IHZhbHVlLmNoYXJBdCgwKSAhPT0gY2hhciA/IGNoYXIgKyB2YWx1ZSA6IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3VzZXJuYW1lJzpcbiAgICBjYXNlICdwYXNzd29yZCc6XG4gICAgICB1cmxbcGFydF0gPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdhdXRoJzpcbiAgICAgIHZhciBpbmRleCA9IHZhbHVlLmluZGV4T2YoJzonKTtcblxuICAgICAgaWYgKH5pbmRleCkge1xuICAgICAgICB1cmwudXNlcm5hbWUgPSB2YWx1ZS5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgIHVybC51c2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLnVzZXJuYW1lKSk7XG5cbiAgICAgICAgdXJsLnBhc3N3b3JkID0gdmFsdWUuc2xpY2UoaW5kZXggKyAxKTtcbiAgICAgICAgdXJsLnBhc3N3b3JkID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh1cmwucGFzc3dvcmQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybC51c2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcbiAgICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaW5zID0gcnVsZXNbaV07XG5cbiAgICBpZiAoaW5zWzRdKSB1cmxbaW5zWzFdXSA9IHVybFtpbnNbMV1dLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICB1cmwuYXV0aCA9IHVybC5wYXNzd29yZCA/IHVybC51c2VybmFtZSArJzonKyB1cmwucGFzc3dvcmQgOiB1cmwudXNlcm5hbWU7XG5cbiAgdXJsLm9yaWdpbiA9IHVybC5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJiBpc1NwZWNpYWwodXJsLnByb3RvY29sKSAmJiB1cmwuaG9zdFxuICAgID8gdXJsLnByb3RvY29sICsnLy8nKyB1cmwuaG9zdFxuICAgIDogJ251bGwnO1xuXG4gIHVybC5ocmVmID0gdXJsLnRvU3RyaW5nKCk7XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIHByb3BlcnRpZXMgYmFjayBpbiB0byBhIHZhbGlkIGFuZCBmdWxsIFVSTCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5naWZ5IE9wdGlvbmFsIHF1ZXJ5IHN0cmluZ2lmeSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IENvbXBpbGVkIHZlcnNpb24gb2YgdGhlIFVSTC5cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcoc3RyaW5naWZ5KSB7XG4gIGlmICghc3RyaW5naWZ5IHx8ICdmdW5jdGlvbicgIT09IHR5cGVvZiBzdHJpbmdpZnkpIHN0cmluZ2lmeSA9IHFzLnN0cmluZ2lmeTtcblxuICB2YXIgcXVlcnlcbiAgICAsIHVybCA9IHRoaXNcbiAgICAsIGhvc3QgPSB1cmwuaG9zdFxuICAgICwgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2w7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLmNoYXJBdChwcm90b2NvbC5sZW5ndGggLSAxKSAhPT0gJzonKSBwcm90b2NvbCArPSAnOic7XG5cbiAgdmFyIHJlc3VsdCA9XG4gICAgcHJvdG9jb2wgK1xuICAgICgodXJsLnByb3RvY29sICYmIHVybC5zbGFzaGVzKSB8fCBpc1NwZWNpYWwodXJsLnByb3RvY29sKSA/ICcvLycgOiAnJyk7XG5cbiAgaWYgKHVybC51c2VybmFtZSkge1xuICAgIHJlc3VsdCArPSB1cmwudXNlcm5hbWU7XG4gICAgaWYgKHVybC5wYXNzd29yZCkgcmVzdWx0ICs9ICc6JysgdXJsLnBhc3N3b3JkO1xuICAgIHJlc3VsdCArPSAnQCc7XG4gIH0gZWxzZSBpZiAodXJsLnBhc3N3b3JkKSB7XG4gICAgcmVzdWx0ICs9ICc6JysgdXJsLnBhc3N3b3JkO1xuICAgIHJlc3VsdCArPSAnQCc7XG4gIH0gZWxzZSBpZiAoXG4gICAgdXJsLnByb3RvY29sICE9PSAnZmlsZTonICYmXG4gICAgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgJiZcbiAgICAhaG9zdCAmJlxuICAgIHVybC5wYXRobmFtZSAhPT0gJy8nXG4gICkge1xuICAgIC8vXG4gICAgLy8gQWRkIGJhY2sgdGhlIGVtcHR5IHVzZXJpbmZvLCBvdGhlcndpc2UgdGhlIG9yaWdpbmFsIGludmFsaWQgVVJMXG4gICAgLy8gbWlnaHQgYmUgdHJhbnNmb3JtZWQgaW50byBhIHZhbGlkIG9uZSB3aXRoIGB1cmwucGF0aG5hbWVgIGFzIGhvc3QuXG4gICAgLy9cbiAgICByZXN1bHQgKz0gJ0AnO1xuICB9XG5cbiAgLy9cbiAgLy8gVHJhaWxpbmcgY29sb24gaXMgcmVtb3ZlZCBmcm9tIGB1cmwuaG9zdGAgd2hlbiBpdCBpcyBwYXJzZWQuIElmIGl0IHN0aWxsXG4gIC8vIGVuZHMgd2l0aCBhIGNvbG9uLCB0aGVuIGFkZCBiYWNrIHRoZSB0cmFpbGluZyBjb2xvbiB0aGF0IHdhcyByZW1vdmVkLiBUaGlzXG4gIC8vIHByZXZlbnRzIGFuIGludmFsaWQgVVJMIGZyb20gYmVpbmcgdHJhbnNmb3JtZWQgaW50byBhIHZhbGlkIG9uZS5cbiAgLy9cbiAgaWYgKGhvc3RbaG9zdC5sZW5ndGggLSAxXSA9PT0gJzonIHx8IChwb3J0LnRlc3QodXJsLmhvc3RuYW1lKSAmJiAhdXJsLnBvcnQpKSB7XG4gICAgaG9zdCArPSAnOic7XG4gIH1cblxuICByZXN1bHQgKz0gaG9zdCArIHVybC5wYXRobmFtZTtcblxuICBxdWVyeSA9ICdvYmplY3QnID09PSB0eXBlb2YgdXJsLnF1ZXJ5ID8gc3RyaW5naWZ5KHVybC5xdWVyeSkgOiB1cmwucXVlcnk7XG4gIGlmIChxdWVyeSkgcmVzdWx0ICs9ICc/JyAhPT0gcXVlcnkuY2hhckF0KDApID8gJz8nKyBxdWVyeSA6IHF1ZXJ5O1xuXG4gIGlmICh1cmwuaGFzaCkgcmVzdWx0ICs9IHVybC5oYXNoO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cblVybC5wcm90b3R5cGUgPSB7IHNldDogc2V0LCB0b1N0cmluZzogdG9TdHJpbmcgfTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgVVJMIHBhcnNlciBhbmQgc29tZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdGhhdCBtaWdodCBiZSB1c2VmdWwgZm9yXG4vLyBvdGhlcnMgb3IgdGVzdGluZy5cbi8vXG5VcmwuZXh0cmFjdFByb3RvY29sID0gZXh0cmFjdFByb3RvY29sO1xuVXJsLmxvY2F0aW9uID0gbG9sY2F0aW9uO1xuVXJsLnRyaW1MZWZ0ID0gdHJpbUxlZnQ7XG5VcmwucXMgPSBxcztcblxubW9kdWxlLmV4cG9ydHMgPSBVcmw7XG4iLCAidmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nLFxuICAgIHJlSGFzUmVnRXhwQ2hhciA9IFJlZ0V4cChyZVJlZ0V4cENoYXIuc291cmNlKTtcblxuLyoqXG4gKiBFc2NhcGVzIHRoZSBgUmVnRXhwYCBzcGVjaWFsIGNoYXJhY3RlcnMgXCJeXCIsIFwiJFwiLCBcIlxcXCIsIFwiLlwiLCBcIipcIiwgXCIrXCIsXG4gKiBcIj9cIiwgXCIoXCIsIFwiKVwiLCBcIltcIiwgXCJdXCIsIFwie1wiLCBcIn1cIiwgYW5kIFwifFwiIGluIGBzdHJpbmdgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVzY2FwZVJlZ0V4cCgnW2xvZGFzaF0oaHR0cHM6Ly9sb2Rhc2guY29tLyknKTtcbiAqIC8vID0+ICdcXFtsb2Rhc2hcXF1cXChodHRwczovL2xvZGFzaFxcLmNvbS9cXCknXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNSZWdFeHBDaGFyLnRlc3Qoc3RyaW5nKSlcbiAgICA/IHN0cmluZy5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gICAgOiBzdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXNjYXBlUmVnRXhwO1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCB0aGlzIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG4gIC8vIE5hc2hvcm4gYnVnOlxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTI4XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMzBcbiAgaWYgKGNsYXNzb2ZSYXcoZm4pID09PSAnRnVuY3Rpb24nKSByZXR1cm4gdW5jdXJyeVRoaXMoZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgSVNfSFRNTEREQSA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWxsOiBkb2N1bWVudEFsbCxcbiAgSVNfSFRNTEREQTogSVNfSFRNTEREQVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJGRvY3VtZW50QWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCcpO1xuXG52YXIgZG9jdW1lbnRBbGwgPSAkZG9jdW1lbnRBbGwuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbm1vZHVsZS5leHBvcnRzID0gJGRvY3VtZW50QWxsLklTX0hUTUxEREEgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgJGRvY3VtZW50QWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCcpO1xuXG52YXIgZG9jdW1lbnRBbGwgPSAkZG9jdW1lbnRBbGwuYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRkb2N1bWVudEFsbC5JU19IVE1MRERBID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpIHx8IGl0ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodmFyaWFibGUpID8gdmFyaWFibGUgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24ocGF0aFtuYW1lc3BhY2VdKSB8fCBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pXG4gICAgOiBwYXRoW25hbWVzcGFjZV0gJiYgcGF0aFtuYW1lc3BhY2VdW21ldGhvZF0gfHwgZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIG5hdmlnYXRvciAhPSAndW5kZWZpbmVkJyAmJiBTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjMzLjInLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyMyBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjMzLjIvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyYXBwZXIpIHtcbiAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYik7XG4gICAgICB9IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYiwgYyk7XG4gICAgfSByZXR1cm4gYXBwbHkoTmF0aXZlQ29uc3RydWN0b3IsIHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBQUk9UTyA9IG9wdGlvbnMucHJvdG87XG5cbiAgdmFyIG5hdGl2ZVNvdXJjZSA9IEdMT0JBTCA/IGdsb2JhbCA6IFNUQVRJQyA/IGdsb2JhbFtUQVJHRVRdIDogKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG5cbiAgdmFyIHRhcmdldCA9IEdMT0JBTCA/IHBhdGggOiBwYXRoW1RBUkdFVF0gfHwgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFRBUkdFVCwge30pW1RBUkdFVF07XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXNPd24obmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT0gdHlwZW9mIHNvdXJjZVByb3BlcnR5KSBjb250aW51ZTtcblxuICAgIC8vIGJpbmQgbWV0aG9kcyB0byBnbG9iYWwgZm9yIGNhbGxpbmcgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWwpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2VzIGluIHRoaXMgdmVyc2lvblxuICAgIGVsc2UgaWYgKG9wdGlvbnMud3JhcCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IHdyYXBDb25zdHJ1Y3Rvcihzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgZWxzZSBpZiAoUFJPVE8gJiYgaXNDYWxsYWJsZShzb3VyY2VQcm9wZXJ0eSkpIHJlc3VsdFByb3BlcnR5ID0gdW5jdXJyeVRoaXMoc291cmNlUHJvcGVydHkpO1xuICAgIC8vIGRlZmF1bHQgY2FzZVxuICAgIGVsc2UgcmVzdWx0UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eTtcblxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8IChzb3VyY2VQcm9wZXJ0eSAmJiBzb3VyY2VQcm9wZXJ0eS5zaGFtKSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShyZXN1bHRQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHJlc3VsdFByb3BlcnR5KTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzT3duKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aFtWSVJUVUFMX1BST1RPVFlQRV0sIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgLy8gZXhwb3J0IHJlYWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIGlmIChvcHRpb25zLnJlYWwgJiYgdGFyZ2V0UHJvdG90eXBlICYmIChGT1JDRUQgfHwgIXRhcmdldFByb3RvdHlwZVtrZXldKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0UHJvdG90eXBlLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eS5zaGFtKSBkZWZpbmVQcm9wZXJ0eS5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KSwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKHByb3BlcnR5S2V5IGluIG9iamVjdCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIHByb3BlcnR5S2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbcHJvcGVydHlLZXldID0gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgZW1wdHkgPSBbXTtcbnZhciBjb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIGNvbnN0cnVjdG9yUmVnRXhwID0gL15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLztcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoY29uc3RydWN0b3JSZWdFeHAuZXhlYyk7XG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9ICFjb25zdHJ1Y3RvclJlZ0V4cC50ZXN0KG5vb3ApO1xuXG52YXIgaXNDb25zdHJ1Y3Rvck1vZGVybiA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0cnVjdChub29wLCBlbXB0eSwgYXJndW1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzQ29uc3RydWN0b3JMZWdhY3kgPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChjbGFzc29mKGFyZ3VtZW50KSkge1xuICAgIGNhc2UgJ0FzeW5jRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0dlbmVyYXRvckZ1bmN0aW9uJzpcbiAgICBjYXNlICdBc3luY0dlbmVyYXRvckZ1bmN0aW9uJzogcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gd2UgY2FuJ3QgY2hlY2sgLnByb3RvdHlwZSBzaW5jZSBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgLmJpbmQgaGF2ZW4ndCBpdFxuICAgIC8vIGBGdW5jdGlvbiN0b1N0cmluZ2AgdGhyb3dzIG9uIHNvbWUgYnVpbHQtaXQgZnVuY3Rpb24gaW4gc29tZSBsZWdhY3kgZW5naW5lc1xuICAgIC8vIChmb3IgZXhhbXBsZSwgYERPTVF1YWRgIGFuZCBzaW1pbGFyIGluIEZGNDEtKVxuICAgIHJldHVybiBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8ICEhZXhlYyhjb25zdHJ1Y3RvclJlZ0V4cCwgaW5zcGVjdFNvdXJjZShhcmd1bWVudCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5pc0NvbnN0cnVjdG9yTGVnYWN5LnNoYW0gPSB0cnVlO1xuXG4vLyBgSXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gIWNvbnN0cnVjdCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsZWQ7XG4gIHJldHVybiBpc0NvbnN0cnVjdG9yTW9kZXJuKGlzQ29uc3RydWN0b3JNb2Rlcm4uY2FsbClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihPYmplY3QpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlOyB9KVxuICAgIHx8IGNhbGxlZDtcbn0pID8gaXNDb25zdHJ1Y3RvckxlZ2FjeSA6IGlzQ29uc3RydWN0b3JNb2Rlcm47XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4vLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIGxlbik7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgMSk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gIHZhciByZXN1bHQgPSAkQXJyYXkobWF4KGZpbiAtIGssIDApKTtcbiAgdmFyIG4gPSAwO1xuICBmb3IgKDsgayA8IGZpbjsgaysrLCBuKyspIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gIHJlc3VsdC5sZW5ndGggPSBuO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW51bWVyYWJsZSkgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eS5mKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHZhciBTeW1ib2wgPSBwYXRoLlN5bWJvbCB8fCAocGF0aC5TeW1ib2wgPSB7fSk7XG4gIGlmICghaGFzT3duKFN5bWJvbCwgTkFNRSkpIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgTkFNRSwge1xuICAgIHZhbHVlOiB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoTkFNRSlcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHZhciBTeW1ib2xQcm90b3R5cGUgPSBTeW1ib2wgJiYgU3ltYm9sLnByb3RvdHlwZTtcbiAgdmFyIHZhbHVlT2YgPSBTeW1ib2xQcm90b3R5cGUgJiYgU3ltYm9sUHJvdG90eXBlLnZhbHVlT2Y7XG4gIHZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbiAgaWYgKFN5bWJvbFByb3RvdHlwZSAmJiAhU3ltYm9sUHJvdG90eXBlW1RPX1BSSU1JVElWRV0pIHtcbiAgICAvLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIC5sZW5ndGhcbiAgICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBmdW5jdGlvbiAoaGludCkge1xuICAgICAgcmV0dXJuIGNhbGwodmFsdWVPZiwgdGhpcyk7XG4gICAgfSwgeyBhcml0eTogMSB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICBpZiAoaXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGU7XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJSZWplY3QgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBuYXRpdmVPYmplY3RDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG52YXIgSElEREVOID0gc2hhcmVkS2V5KCdoaWRkZW4nKTtcbnZhciBTWU1CT0wgPSAnU3ltYm9sJztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1lNQk9MKTtcblxudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2wgJiYgJFN5bWJvbFtQUk9UT1RZUEVdO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mO1xudmFyIG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIFVTRV9TRVRURVIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBmYWxsYmFja0RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgdmFyIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCBQKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpIGRlbGV0ZSBPYmplY3RQcm90b3R5cGVbUF07XG4gIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciAmJiBPICE9PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGUsIFAsIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpO1xuICB9XG59O1xuXG52YXIgc2V0U3ltYm9sRGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdENyZWF0ZShuYXRpdmVEZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPT0gNztcbn0pID8gZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA6IG5hdGl2ZURlZmluZVByb3BlcnR5O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcsIGRlc2NyaXB0aW9uKSB7XG4gIHZhciBzeW1ib2wgPSBBbGxTeW1ib2xzW3RhZ10gPSBuYXRpdmVPYmplY3RDcmVhdGUoU3ltYm9sUHJvdG90eXBlKTtcbiAgc2V0SW50ZXJuYWxTdGF0ZShzeW1ib2wsIHtcbiAgICB0eXBlOiBTWU1CT0wsXG4gICAgdGFnOiB0YWcsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gIH0pO1xuICBpZiAoIURFU0NSSVBUT1JTKSBzeW1ib2wuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgcmV0dXJuIHN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGlmIChPID09PSBPYmplY3RQcm90b3R5cGUpICRkZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQLCBBdHRyaWJ1dGVzKTtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFBdHRyaWJ1dGVzLmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzT3duKE8sIEhJRERFTikpIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIEhJRERFTiwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHt9KSk7XG4gICAgICBPW0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNPd24oTywgSElEREVOKSAmJiBPW0hJRERFTl1ba2V5XSkgT1tISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSBuYXRpdmVPYmplY3RDcmVhdGUoQXR0cmlidXRlcywgeyBlbnVtZXJhYmxlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2NyaXB0b3IoTywga2V5LCBBdHRyaWJ1dGVzKTtcbiAgfSByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywga2V5LCBBdHRyaWJ1dGVzKTtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BlcnRpZXMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhwcm9wZXJ0aWVzKS5jb25jYXQoJGdldE93blByb3BlcnR5U3ltYm9scyhwcm9wZXJ0aWVzKSk7XG4gICRmb3JFYWNoKGtleXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwoJHByb3BlcnR5SXNFbnVtZXJhYmxlLCBwcm9wZXJ0aWVzLCBrZXkpKSAkZGVmaW5lUHJvcGVydHkoTywga2V5LCBwcm9wZXJ0aWVzW2tleV0pO1xuICB9KTtcbiAgcmV0dXJuIE87XG59O1xuXG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyBuYXRpdmVPYmplY3RDcmVhdGUoTykgOiAkZGVmaW5lUHJvcGVydGllcyhuYXRpdmVPYmplY3RDcmVhdGUoTyksIFByb3BlcnRpZXMpO1xufTtcblxudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIFAgPSB0b1Byb3BlcnR5S2V5KFYpO1xuICB2YXIgZW51bWVyYWJsZSA9IGNhbGwobmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUsIHRoaXMsIFApO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBQKSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBlbnVtZXJhYmxlIHx8ICFoYXNPd24odGhpcywgUCkgfHwgIWhhc093bihBbGxTeW1ib2xzLCBQKSB8fCBoYXNPd24odGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1bUF1cbiAgICA/IGVudW1lcmFibGUgOiB0cnVlO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICB2YXIgaXQgPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG4gIGlmIChkZXNjcmlwdG9yICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzT3duKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIHtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpKSBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBJU19PQkpFQ1RfUFJPVE9UWVBFID0gTyA9PT0gT2JqZWN0UHJvdG90eXBlO1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKElTX09CSkVDVF9QUk9UT1RZUEUgPyBPYmplY3RQcm90b3R5cGVTeW1ib2xzIDogdG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAoIUlTX09CSkVDVF9QUk9UT1RZUEUgfHwgaGFzT3duKE9iamVjdFByb3RvdHlwZSwga2V5KSkpIHtcbiAgICAgIHB1c2gocmVzdWx0LCBBbGxTeW1ib2xzW2tleV0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBgU3ltYm9sYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wtY29uc3RydWN0b3JcbmlmICghTkFUSVZFX1NZTUJPTCkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmIChpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgIHZhciBkZXNjcmlwdGlvbiA9ICFhcmd1bWVudHMubGVuZ3RoIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogJHRvU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHRhZyA9IHVpZChkZXNjcmlwdGlvbik7XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyICR0aGlzID0gdGhpcyA9PT0gdW5kZWZpbmVkID8gZ2xvYmFsIDogdGhpcztcbiAgICAgIGlmICgkdGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBjYWxsKHNldHRlciwgT2JqZWN0UHJvdG90eXBlU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhc093bigkdGhpcywgSElEREVOKSAmJiBoYXNPd24oJHRoaXNbSElEREVOXSwgdGFnKSkgJHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRTeW1ib2xEZXNjcmlwdG9yKCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBkZWZpbmVCdWlsdEluKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydGllcztcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3ZWxsS25vd25TeW1ib2wobmFtZSksIG5hbWUpO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLVN5bWJvbC1kZXNjcmlwdGlvblxuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihPYmplY3RQcm90b3R5cGUsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wuZm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyhbXS5zbGljZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZXBsYWNlcikge1xuICBpZiAoaXNDYWxsYWJsZShyZXBsYWNlcikpIHJldHVybiByZXBsYWNlcjtcbiAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmV0dXJuO1xuICB2YXIgcmF3TGVuZ3RoID0gcmVwbGFjZXIubGVuZ3RoO1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd0xlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZW1lbnQgPSByZXBsYWNlcltpXTtcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ3N0cmluZycpIHB1c2goa2V5cywgZWxlbWVudCk7XG4gICAgZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ251bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ051bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ1N0cmluZycpIHB1c2goa2V5cywgdG9TdHJpbmcoZWxlbWVudCkpO1xuICB9XG4gIHZhciBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciByb290ID0gdHJ1ZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHJvb3QpIHtcbiAgICAgIHJvb3QgPSBmYWxzZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHJldHVybiB2YWx1ZTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXNMZW5ndGg7IGorKykgaWYgKGtleXNbal0gPT09IGtleSkgcmV0dXJuIHZhbHVlO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGdldFJlcGxhY2VyRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24nKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJHN0cmluZ2lmeSA9IGdldEJ1aWx0SW4oJ0pTT04nLCAnc3RyaW5naWZ5Jyk7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKC8uLy5leGVjKTtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbnVtYmVyVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG52YXIgdGVzdGVyID0gL1tcXHVEODAwLVxcdURGRkZdL2c7XG52YXIgbG93ID0gL15bXFx1RDgwMC1cXHVEQkZGXSQvO1xudmFyIGhpID0gL15bXFx1REMwMC1cXHVERkZGXSQvO1xuXG52YXIgV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoJ3N0cmluZ2lmeSBkZXRlY3Rpb24nKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgcmV0dXJuICRzdHJpbmdpZnkoW3N5bWJvbF0pICE9PSAnW251bGxdJ1xuICAgIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAgIHx8ICRzdHJpbmdpZnkoeyBhOiBzeW1ib2wgfSkgIT09ICd7fSdcbiAgICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICAgIHx8ICRzdHJpbmdpZnkoT2JqZWN0KHN5bWJvbCkpICE9PSAne30nO1xufSk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXdlbGwtZm9ybWVkLXN0cmluZ2lmeVxudmFyIElMTF9GT1JNRURfVU5JQ09ERSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRzdHJpbmdpZnkoJ1xcdURGMDZcXHVEODM0JykgIT09ICdcIlxcXFx1ZGYwNlxcXFx1ZDgzNFwiJ1xuICAgIHx8ICRzdHJpbmdpZnkoJ1xcdURFQUQnKSAhPT0gJ1wiXFxcXHVkZWFkXCInO1xufSk7XG5cbnZhciBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA9IGZ1bmN0aW9uIChpdCwgcmVwbGFjZXIpIHtcbiAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gIHZhciAkcmVwbGFjZXIgPSBnZXRSZXBsYWNlckZ1bmN0aW9uKHJlcGxhY2VyKTtcbiAgaWYgKCFpc0NhbGxhYmxlKCRyZXBsYWNlcikgJiYgKGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gIGFyZ3NbMV0gPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIC8vIHNvbWUgb2xkIGltcGxlbWVudGF0aW9ucyAobGlrZSBXZWJLaXQpIGNvdWxkIHBhc3MgbnVtYmVycyBhcyBrZXlzXG4gICAgaWYgKGlzQ2FsbGFibGUoJHJlcGxhY2VyKSkgdmFsdWUgPSBjYWxsKCRyZXBsYWNlciwgdGhpcywgJFN0cmluZyhrZXkpLCB2YWx1ZSk7XG4gICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbiAgcmV0dXJuIGFwcGx5KCRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xufTtcblxudmFyIGZpeElsbEZvcm1lZCA9IGZ1bmN0aW9uIChtYXRjaCwgb2Zmc2V0LCBzdHJpbmcpIHtcbiAgdmFyIHByZXYgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgLSAxKTtcbiAgdmFyIG5leHQgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgKyAxKTtcbiAgaWYgKChleGVjKGxvdywgbWF0Y2gpICYmICFleGVjKGhpLCBuZXh0KSkgfHwgKGV4ZWMoaGksIG1hdGNoKSAmJiAhZXhlYyhsb3csIHByZXYpKSkge1xuICAgIHJldHVybiAnXFxcXHUnICsgbnVtYmVyVG9TdHJpbmcoY2hhckNvZGVBdChtYXRjaCwgMCksIDE2KTtcbiAgfSByZXR1cm4gbWF0Y2g7XG59O1xuXG5pZiAoJHN0cmluZ2lmeSkge1xuICAvLyBgSlNPTi5zdHJpbmdpZnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24uc3RyaW5naWZ5XG4gICQoeyB0YXJnZXQ6ICdKU09OJywgc3RhdDogdHJ1ZSwgYXJpdHk6IDMsIGZvcmNlZDogV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OIHx8IElMTF9GT1JNRURfVU5JQ09ERSB9LCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gICAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgICAgIHZhciByZXN1bHQgPSBhcHBseShXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPyBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA6ICRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xuICAgICAgcmV0dXJuIElMTF9GT1JNRURfVU5JQ09ERSAmJiB0eXBlb2YgcmVzdWx0ID09ICdzdHJpbmcnID8gcmVwbGFjZShyZXN1bHQsIHRlc3RlciwgZml4SWxsRm9ybWVkKSA6IHJlc3VsdDtcbiAgICB9XG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxuLy8gVjggfiBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRk9SQ0VEID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5c3ltYm9sc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgICB2YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gJGdldE93blByb3BlcnR5U3ltYm9scyh0b09iamVjdChpdCkpIDogW107XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNJdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmFzeW5jaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNJdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaGFzSW5zdGFuY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5oYXNpbnN0YW5jZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdoYXNJbnN0YW5jZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXNjb25jYXRzcHJlYWRhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hBbGxgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaGFsbFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaEFsbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucmVwbGFjZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnJlcGxhY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc2VhcmNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc2VhcmNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NlYXJjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BlY2llc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwZWNpZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BsaXRgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGxpdFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGxpdCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC50b1ByaW1pdGl2ZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvcHJpbWl0aXZlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9zdHJpbmd0YWdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2V0QnVpbHRJbignU3ltYm9sJyksICdTeW1ib2wnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnVuc2NvcGFibGVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudW5zY29wYWJsZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIEpTT05bQEB0b1N0cmluZ1RhZ10gcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wucmVwbGFjZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc2VhcmNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGxpdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC51bnNjb3BhYmxlcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QudG8tc3RyaW5nLXRhZycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIE9iamVjdFByb3RvdHlwZSA9ICRPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gJE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBvYmplY3QgPSB0b09iamVjdChPKTtcbiAgaWYgKGhhc093bihvYmplY3QsIElFX1BST1RPKSkgcmV0dXJuIG9iamVjdFtJRV9QUk9UT107XG4gIHZhciBjb25zdHJ1Y3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgaWYgKGlzQ2FsbGFibGUoY29uc3RydWN0b3IpICYmIG9iamVjdCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgJE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1rZXlzIC0tIHNhZmUgKi9cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxudmFyIE5FV19JVEVSQVRPUl9QUk9UT1RZUEUgPSAhaXNPYmplY3QoSXRlcmF0b3JQcm90b3R5cGUpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgLy8gRkY0NC0gbGVnYWN5IGl0ZXJhdG9ycyBjYXNlXG4gIHJldHVybiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0uY2FsbCh0ZXN0KSAhPT0gdGVzdDtcbn0pO1xuXG5pZiAoTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbmVsc2UgaWYgKElTX1BVUkUpIEl0ZXJhdG9yUHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtQEBpdGVyYXRvclxuaWYgKCFpc0NhbGxhYmxlKEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgZGVmaW5lQnVpbHRJbihJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0LCBFTlVNRVJBQkxFX05FWFQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigrIUVOVU1FUkFCTEVfTkVYVCwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmICh0eXBlb2YgYXJndW1lbnQgPT0gJ29iamVjdCcgfHwgaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSXRlcmF0b3JzQ29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpO1xuXG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuUFJPUEVSO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLkNPTkZJR1VSQUJMRTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcblxuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIGlmICghSVNfUFVSRSAmJiBnZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUpICE9PSBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICBzZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNDYWxsYWJsZShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICAgICAgICAgIGRlZmluZUJ1aWx0SW4oQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkucHJvdG90eXBlLnsgdmFsdWVzLCBAQGl0ZXJhdG9yIH0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBERUZBVUxUID09PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgaWYgKCFJU19QVVJFICYmIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsICduYW1lJywgVkFMVUVTKTtcbiAgICB9IGVsc2Uge1xuICAgICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIGNhbGwobmF0aXZlSXRlcmF0b3IsIHRoaXMpOyB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cG9ydCBhZGRpdGlvbmFsIG1ldGhvZHNcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBnZXRJdGVyYXRpb25NZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/IGRlZmF1bHRJdGVyYXRvciA6IGdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKVxuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChLRVkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIHx8ICEoS0VZIGluIEl0ZXJhYmxlUHJvdG90eXBlKSkge1xuICAgICAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IsIHsgbmFtZTogREVGQVVMVCB9KTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodGFyZ2V0W2luZGV4XSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uUHJvdG90eXBlID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUgJiYgY2xhc3NvZihDb2xsZWN0aW9uUHJvdG90eXBlKSAhPT0gVE9fU1RSSU5HX1RBRykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCBDT0xMRUNUSU9OX05BTUUpO1xuICB9XG4gIEl0ZXJhdG9yc1tDT0xMRUNUSU9OX05BTUVdID0gSXRlcmF0b3JzLkFycmF5O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbnZhciBNRVRBREFUQSA9IHdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLy8gRnVuY3Rpb24ucHJvdG90eXBlW0BAbWV0YWRhdGFdXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3ItbWV0YWRhdGFcbmlmIChGdW5jdGlvblByb3RvdHlwZVtNRVRBREFUQV0gPT09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eShGdW5jdGlvblByb3RvdHlwZSwgTUVUQURBVEEsIHtcbiAgICB2YWx1ZTogbnVsbFxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFzeW5jLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNEaXNwb3NlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5kaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZXhwbGljaXQtcmVzb3VyY2UtbWFuYWdlbWVudFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdkaXNwb3NlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvcnNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3N5bWJvbCcpO1xuXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5mdW5jdGlvbi5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciBrZXlGb3IgPSBTeW1ib2wua2V5Rm9yO1xudmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbCB8fCBmdW5jdGlvbiBpc1JlZ2lzdGVyZWRTeW1ib2wodmFsdWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4ga2V5Rm9yKHRoaXNTeW1ib2xWYWx1ZSh2YWx1ZSkpICE9PSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUmVnaXN0ZXJlZFN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZCcpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzUmVnaXN0ZXJlZFN5bWJvbDogaXNSZWdpc3RlcmVkU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciAkaXNXZWxsS25vd25TeW1ib2wgPSBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2w7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldEJ1aWx0SW4oJ09iamVjdCcsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyk7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG5mb3IgKHZhciBpID0gMCwgc3ltYm9sS2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKSwgc3ltYm9sS2V5c0xlbmd0aCA9IHN5bWJvbEtleXMubGVuZ3RoOyBpIDwgc3ltYm9sS2V5c0xlbmd0aDsgaSsrKSB7XG4gIC8vIHNvbWUgb2xkIGVuZ2luZXMgdGhyb3dzIG9uIGFjY2VzcyB0byBzb21lIGtleXMgbGlrZSBgYXJndW1lbnRzYCBvciBgY2FsbGVyYFxuICB0cnkge1xuICAgIHZhciBzeW1ib2xLZXkgPSBzeW1ib2xLZXlzW2ldO1xuICAgIGlmIChpc1N5bWJvbChTeW1ib2xbc3ltYm9sS2V5XSkpIHdlbGxLbm93blN5bWJvbChzeW1ib2xLZXkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNXZWxsS25vd25TeW1ib2wodmFsdWUpIHtcbiAgaWYgKCRpc1dlbGxLbm93blN5bWJvbCAmJiAkaXNXZWxsS25vd25TeW1ib2wodmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICB2YXIgc3ltYm9sID0gdGhpc1N5bWJvbFZhbHVlKHZhbHVlKTtcbiAgICBmb3IgKHZhciBqID0gMCwga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoOyBqIDwga2V5c0xlbmd0aDsgaisrKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxIC0tIHBvbHlmaWxsZWQgc3ltYm9scyBjYXNlXG4gICAgICBpZiAoV2VsbEtub3duU3ltYm9sc1N0b3JlW2tleXNbal1dID09IHN5bWJvbCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duU3ltYm9sOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGVyYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaGVyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5vYnNlcnZhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdvYnNlcnZhYmxlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkYCBtZXRob2Rcbi8vIG9ic29sZXRlIHZlcnNpb24gb2YgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1JlZ2lzdGVyZWRTeW1ib2wnIH0sIHtcbiAgaXNSZWdpc3RlcmVkOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duJyk7XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25gIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1dlbGxLbm93blN5bWJvbCcsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWV0YWRhdGFLZXlgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3ItbWV0YWRhdGFcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGFLZXknKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5wYXR0ZXJuTWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3BhdHRlcm5NYXRjaCcpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2VBbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL3N5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQtc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bi1zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZScpO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLWtleScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogdG9TdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHBvaW50LCBmYWxzZSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZignaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc3ltYm9sL2l0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9zeW1ib2wvaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbC9pdGVyYXRvcicpO1xuIiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX1N5bWJvbCRpdGVyYXRvciBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBfU3ltYm9sJGl0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBfU3ltYm9sICYmIG8gIT09IF9TeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufSIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ3RvUHJpbWl0aXZlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbC90by1wcmltaXRpdmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvdG8tcHJpbWl0aXZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuIiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IF9TeW1ib2wkdG9QcmltaXRpdmUgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbX1N5bWJvbCR0b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufSIsICJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIjtcbmltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodGFyZ2V0LCB0b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsICJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIjtcbmltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEMsIGFyZ3NMZW5ndGgsIGFyZ3MpIHtcbiAgaWYgKCFoYXNPd24oZmFjdG9yaWVzLCBhcmdzTGVuZ3RoKSkge1xuICAgIHZhciBsaXN0ID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSBsaXN0W2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgZmFjdG9yaWVzW2FyZ3NMZW5ndGhdID0gJEZ1bmN0aW9uKCdDLGEnLCAncmV0dXJuIG5ldyBDKCcgKyBqb2luKGxpc3QsICcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbYXJnc0xlbmd0aF0oQywgYXJncyk7XG59O1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/ICRGdW5jdGlvbi5iaW5kIDogZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgRiA9IGFDYWxsYWJsZSh0aGlzKTtcbiAgdmFyIFByb3RvdHlwZSA9IEYucHJvdG90eXBlO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gZnVuY3Rpb24gYm91bmQoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gY29uY2F0KHBhcnRBcmdzLCBhcnJheVNsaWNlKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmRGdW5jdGlvbiA/IGNvbnN0cnVjdChGLCBhcmdzLmxlbmd0aCwgYXJncykgOiBGLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoUHJvdG90eXBlKSkgYm91bmRGdW5jdGlvbi5wcm90b3R5cGUgPSBQcm90b3R5cGU7XG4gIHJldHVybiBib3VuZEZ1bmN0aW9uO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gZGV0ZWN0aW9uXG4kKHsgdGFyZ2V0OiAnRnVuY3Rpb24nLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGdW5jdGlvbi5iaW5kICE9PSBiaW5kIH0sIHtcbiAgYmluZDogYmluZFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1IsIE1FVEhPRCkge1xuICB2YXIgTmFtZXNwYWNlID0gcGF0aFtDT05TVFJVQ1RPUiArICdQcm90b3R5cGUnXTtcbiAgdmFyIHB1cmVNZXRob2QgPSBOYW1lc3BhY2UgJiYgTmFtZXNwYWNlW01FVEhPRF07XG4gIGlmIChwdXJlTWV0aG9kKSByZXR1cm4gcHVyZU1ldGhvZDtcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIE5hdGl2ZVByb3RvdHlwZSAmJiBOYXRpdmVQcm90b3R5cGVbTUVUSE9EXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0Z1bmN0aW9uJywgJ2JpbmQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vZnVuY3Rpb24vdmlydHVhbC9iaW5kJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmJpbmQ7XG4gIHJldHVybiBpdCA9PT0gRnVuY3Rpb25Qcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoRnVuY3Rpb25Qcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmRcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IHJlZHVjZSwgcmVkdWNlUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19SSUdIVCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c0xlbmd0aCwgbWVtbykge1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gSVNfUklHSFQgPyBsZW5ndGggLSAxIDogMDtcbiAgICB2YXIgaSA9IElTX1JJR0hUID8gLTEgOiAxO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPCAyKSB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBpZiAoSVNfUklHSFQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7SVNfUklHSFQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICAgIH1cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuICBsZWZ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbiAgcmlnaHQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3NvZihnbG9iYWwucHJvY2VzcykgPT09ICdwcm9jZXNzJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLmxlZnQ7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgQ0hST01FX1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbi8vIENocm9tZSA4MC04MiBoYXMgYSBjcml0aWNhbCBidWdcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNDk5ODJcbnZhciBDSFJPTUVfQlVHID0gIUlTX05PREUgJiYgQ0hST01FX1ZFUlNJT04gPiA3OSAmJiBDSFJPTUVfVkVSU0lPTiA8IDgzO1xudmFyIEZPUkNFRCA9IENIUk9NRV9CVUcgfHwgIWFycmF5TWV0aG9kSXNTdHJpY3QoJ3JlZHVjZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBsZW5ndGgsIGxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdyZWR1Y2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9yZWR1Y2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmVkdWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5yZWR1Y2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmVkdWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcmVkdWNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZpbHRlcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbHRlcikgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maWx0ZXJcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdtYXAnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5tYXAnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnbWFwJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvbWFwJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0Lm1hcDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUubWFwKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL21hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL21hcFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcblxuLy8gYEZsYXR0ZW5JbnRvQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBiaW5kKG1hcHBlciwgdGhpc0FyZykgOiBmYWxzZTtcbiAgdmFyIGVsZW1lbnQsIGVsZW1lbnRMZW47XG5cbiAgd2hpbGUgKHNvdXJjZUluZGV4IDwgc291cmNlTGVuKSB7XG4gICAgaWYgKHNvdXJjZUluZGV4IGluIHNvdXJjZSkge1xuICAgICAgZWxlbWVudCA9IG1hcEZuID8gbWFwRm4oc291cmNlW3NvdXJjZUluZGV4XSwgc291cmNlSW5kZXgsIG9yaWdpbmFsKSA6IHNvdXJjZVtzb3VyY2VJbmRleF07XG5cbiAgICAgIGlmIChkZXB0aCA+IDAgJiYgaXNBcnJheShlbGVtZW50KSkge1xuICAgICAgICBlbGVtZW50TGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoZWxlbWVudCk7XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBlbGVtZW50LCBlbGVtZW50TGVuLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIodGFyZ2V0SW5kZXggKyAxKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZsYXRNYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmxhdG1hcFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICBmbGF0TWFwOiBmdW5jdGlvbiBmbGF0TWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIEE7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgQS5sZW5ndGggPSBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgMSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnVuc2NvcGFibGVzLmZsYXQtbWFwJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZsYXRNYXAnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mbGF0LW1hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5mbGF0TWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5mbGF0TWFwKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZsYXQtbWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmxhdC1tYXBcIik7IiwgImltcG9ydCB7IERhdGFJbnRlcmZhY2UsIEV2ZW50Q2FsbGJhY2tzLCBQYXJ0SXRlbSB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcblxuLyoqXG4gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVBpcGUge1xuICAvKipcbiAgICogVGFrZSBhbGwgaXRlbXMgZnJvbSB0aGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldywgdHJhbnNmb3JtIHRoZW0gYXNcbiAgICogY29uZmlndXJlZCBhbmQgdXBkYXRlIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBhbGwoKTogdGhpcztcblxuICAvKipcbiAgICogU3RhcnQgb2JzZXJ2aW5nIHRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LCB0cmFuc2Zvcm1pbmcgdGhlIGl0ZW1zXG4gICAqIGFuZCB1cGRhdGluZyB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgY3VycmVudCBjb250ZW50IG9mIHRoZSBzb3VyY2UgZGF0YSBzZXQgd2lsbCBiZSBpZ25vcmVkLiBJZiB5b3UgZm9yXG4gICAqIGV4YW1wbGUgd2FudCB0byBwcm9jZXNzIGFsbCB0aGUgaXRlbXMgdGhhdCBhcmUgYWxyZWFkeSB0aGVyZSB1c2U6XG4gICAqIGBwaXBlLmFsbCgpLnN0YXJ0KClgLlxuICAgKi9cbiAgc3RhcnQoKTogdGhpcztcblxuICAvKipcbiAgICogU3RvcCBvYnNlcnZpbmcgdGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcsIHRyYW5zZm9ybWluZyB0aGUgaXRlbXNcbiAgICogYW5kIHVwZGF0aW5nIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBzdG9wKCk6IHRoaXM7XG59XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFQaXBlRmFjdG9yeSA9IEluc3RhbmNlVHlwZTx0eXBlb2YgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbj47XG5cbi8qKlxuICogQ3JlYXRlIG5ldyBkYXRhIHBpcGUuXG4gKlxuICogQHBhcmFtIGZyb20gLSBUaGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldy5cbiAqIEByZW1hcmtzXG4gKiBFeGFtcGxlIHVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIEFwcEl0ZW0ge1xuICogICB3aG9hbWk6IHN0cmluZztcbiAqICAgYXBwRGF0YTogdW5rbm93bjtcbiAqICAgdmlzRGF0YTogVmlzSXRlbTtcbiAqIH1cbiAqIGludGVyZmFjZSBWaXNJdGVtIHtcbiAqICAgaWQ6IG51bWJlcjtcbiAqICAgbGFiZWw6IHN0cmluZztcbiAqICAgY29sb3I6IHN0cmluZztcbiAqICAgeDogbnVtYmVyO1xuICogICB5OiBudW1iZXI7XG4gKiB9XG4gKlxuICogY29uc3QgZHMxID0gbmV3IERhdGFTZXQ8QXBwSXRlbSwgXCJ3aG9hbWlcIj4oW10sIHsgZmllbGRJZDogXCJ3aG9hbWlcIiB9KTtcbiAqIGNvbnN0IGRzMiA9IG5ldyBEYXRhU2V0PFZpc0l0ZW0sIFwiaWRcIj4oKTtcbiAqXG4gKiBjb25zdCBwaXBlID0gY3JlYXRlTmV3RGF0YVBpcGVGcm9tKGRzMSlcbiAqICAgLmZpbHRlcigoaXRlbSk6IGJvb2xlYW4gPT4gaXRlbS5lbmFibGVkID09PSB0cnVlKVxuICogICAubWFwPFZpc0l0ZW0sIFwiaWRcIj4oKGl0ZW0pOiBWaXNJdGVtID0+IGl0ZW0udmlzRGF0YSlcbiAqICAgLnRvKGRzMik7XG4gKlxuICogcGlwZS5zdGFydCgpO1xuICogYGBgXG4gKiBAcmV0dXJucyBBIGZhY3Rvcnkgd2hvc2UgbWV0aG9kcyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdEYXRhUGlwZUZyb208XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPihmcm9tOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFNJLCBTUD4ge1xuICByZXR1cm4gbmV3IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb24oZnJvbSk7XG59XG5cbnR5cGUgVHJhbnNmb3JtZXI8VD4gPSAoaW5wdXQ6IFRbXSkgPT4gVFtdO1xuXG4vKipcbiAqIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwaXBlLiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlIG9ubHkgdGhyb3VnaFxuICogYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFNJIC0gU291cmNlIGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gU1AgLSBTb3VyY2UgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICogQHR5cGVQYXJhbSBUUCAtIFRhcmdldCBpdGVtIHR5cGUncyBpZCBwcm9wZXJ0eSBuYW1lLlxuICovXG5jbGFzcyBTaW1wbGVEYXRhUGlwZTxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nLFxuICBUSSBleHRlbmRzIFBhcnRJdGVtPFRQPixcbiAgVFAgZXh0ZW5kcyBzdHJpbmdcbj4gaW1wbGVtZW50cyBEYXRhUGlwZVxue1xuICAvKipcbiAgICogQm91bmQgbGlzdGVuZXJzIGZvciB1c2Ugd2l0aCBgRGF0YUludGVyZmFjZVsnb24nIHwgJ29mZiddYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogRXZlbnRDYWxsYmFja3M8U0ksIFNQPiA9IHtcbiAgICBhZGQ6IHRoaXMuX2FkZC5iaW5kKHRoaXMpLFxuICAgIHJlbW92ZTogdGhpcy5fcmVtb3ZlLmJpbmQodGhpcyksXG4gICAgdXBkYXRlOiB0aGlzLl91cGRhdGUuYmluZCh0aGlzKSxcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZS5cbiAgICpcbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IHRoYXQgd2lsbCBiZSBvYnNlcnZlZC5cbiAgICogQHBhcmFtIF90cmFuc2Zvcm1lcnMgLSBBbiBhcnJheSBvZiB0cmFuc2Zvcm1pbmcgZnVuY3Rpb25zIHRvIGJlIHVzZWQgdG9cbiAgICogZmlsdGVyIG9yIHRyYW5zZm9ybSB0aGUgaXRlbXMgaW4gdGhlIHBpcGUuXG4gICAqIEBwYXJhbSBfdGFyZ2V0IC0gVGhlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiByZWFkb25seSBUcmFuc2Zvcm1lcjx1bmtub3duPltdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhcmdldDogRGF0YVNldDxUSSwgVFA+XG4gICkge31cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGFsbCgpOiB0aGlzIHtcbiAgICB0aGlzLl90YXJnZXQudXBkYXRlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQoKSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdGFydCgpOiB0aGlzIHtcbiAgICB0aGlzLl9zb3VyY2Uub24oXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9uKFwicmVtb3ZlXCIsIHRoaXMuX2xpc3RlbmVycy5yZW1vdmUpO1xuICAgIHRoaXMuX3NvdXJjZS5vbihcInVwZGF0ZVwiLCB0aGlzLl9saXN0ZW5lcnMudXBkYXRlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdG9wKCk6IHRoaXMge1xuICAgIHRoaXMuX3NvdXJjZS5vZmYoXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9mZihcInJlbW92ZVwiLCB0aGlzLl9saXN0ZW5lcnMucmVtb3ZlKTtcbiAgICB0aGlzLl9zb3VyY2Uub2ZmKFwidXBkYXRlXCIsIHRoaXMuX2xpc3RlbmVycy51cGRhdGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdGhlIHRyYW5zZm9ybWVycyB0byB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIFRoZSBpdGVtcyB0byBiZSB0cmFuc2Zvcm1lZC5cbiAgICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdHJhbnNmb3JtSXRlbXMoaXRlbXM6IHVua25vd25bXSk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3JtZXJzLnJlZHVjZSgoaXRlbXMsIHRyYW5zZm9ybSk6IHVua25vd25bXSA9PiB7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtKGl0ZW1zKTtcbiAgICB9LCBpdGVtcyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFuIGFkZCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBpZHMgb2YgdGhlIGFkZGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJhZGRcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcImFkZFwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5hZGQodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhbiB1cGRhdGUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgaWRzIG9mIHRoZSB1cGRhdGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJ1cGRhdGVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInVwZGF0ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC51cGRhdGUodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHJlbW92ZSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBkYXRhIG9mIHRoZSByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVtb3ZlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJyZW1vdmVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInJlbW92ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5yZW1vdmUodGhpcy5fdHJhbnNmb3JtSXRlbXMocGF5bG9hZC5vbGREYXRhKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGlwZSBmYWN0b3J5LiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlXG4gKiBvbmx5IHRocm91Z2ggYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqL1xuY2xhc3MgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+IHtcbiAgLyoqXG4gICAqIEFycmF5IHRyYW5zZm9ybWVycyB1c2VkIHRvIHRyYW5zZm9ybSBpdGVtcyB3aXRoaW4gdGhlIHBpcGUuIFRoaXMgaXMgdHlwZWRcbiAgICogYXMgYW55IGZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiBUcmFuc2Zvcm1lcjxhbnk+W10gPSBbXTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZSBmYWN0b3J5LiBUaGlzIGlzIGFuIGludGVybmFsIGNvbnN0cnVjdG9yIHRoYXRcbiAgICogc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhpcyBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gX3NvdXJjZSAtIFRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IGZvciB0aGlzIHBpcGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pIHt9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgZmlsdGVyaW5nIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIGdpdmVuIGl0ZW1cbiAgICogc2hvdWxkIGJlIHBpcGVkIGFuZCBmYWxzZSBpZiBub3QuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZpbHRlcihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBib29sZWFuXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248U0ksIFNQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZpbHRlcihjYWxsYmFjaykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBlYWNoIHNvdXJjZSBpdGVtIHRvIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbS5cbiAgICogQHR5cGVQYXJhbSBUSSAtIFRhcmdldCBpdGVtIHR5cGUuXG4gICAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAgICogQHJldHVybnMgVGhpcyBmYWN0b3J5IGZvciBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgbWFwPFRJIGV4dGVuZHMgUGFydEl0ZW08VFA+LCBUUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIj4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gVElcbiAgKTogRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxUSSwgVFA+IHtcbiAgICB0aGlzLl90cmFuc2Zvcm1lcnMucHVzaCgoaW5wdXQpOiB1bmtub3duW10gPT4gaW5wdXQubWFwKGNhbGxiYWNrKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD47XG4gIH1cblxuICAvKipcbiAgICogTWFwIGVhY2ggc291cmNlIGl0ZW0gdG8gemVybyBvciBtb3JlIGl0ZW1zIG9mIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogYW4gYXJyYXkgb2YgY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbXMuXG4gICAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICAgKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZsYXRNYXA8VEkgZXh0ZW5kcyBQYXJ0SXRlbTxUUD4sIFRQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiPihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBUSVtdXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZsYXRNYXAoY2FsbGJhY2spKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IHRoaXMgcGlwZSB0byBnaXZlbiBkYXRhIHNldC5cbiAgICpcbiAgICogQHBhcmFtIHRhcmdldCAtIFRoZSBkYXRhIHNldCB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMgZnJvbSB0aGlzIHBpcGUuXG4gICAqIEByZXR1cm5zIFRoZSBwaXBlIGNvbm5lY3RlZCBiZXR3ZWVuIGdpdmVuIGRhdGEgc2V0cyBhbmQgcGVyZm9ybWluZ1xuICAgKiBjb25maWd1cmVkIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBwcm9jZXNzZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgdG8odGFyZ2V0OiBEYXRhU2V0PFNJLCBTUD4pOiBEYXRhUGlwZSB7XG4gICAgcmV0dXJuIG5ldyBTaW1wbGVEYXRhUGlwZSh0aGlzLl9zb3VyY2UsIHRoaXMuX3RyYW5zZm9ybWVycywgdGFyZ2V0KTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZyb20nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkFycmF5LmZyb207XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvck1ldGhvZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi9zdGFibGUvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vYWN0dWFsL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9mdWxsL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG4vLyBgQXJyYXkuaXNBcnJheWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmlzYXJyYXlcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUgfSwge1xuICBpc0FycmF5OiBpc0FycmF5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5pc0FycmF5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvYXJyYXkvaXMtYXJyYXknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2FycmF5L2lzLWFycmF5Jyk7XG4iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggYW5kIFNhZmFyaSA8PSAxNS40LCBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5wdXNoJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3B1c2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9wdXNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnB1c2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnB1c2gpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcHVzaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3B1c2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9pbnN0YW5jZS9wdXNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9wdXNoJyk7XG4iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfZ2V0SXRlcmF0b3JNZXRob2QgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXCI7XG5pbXBvcnQgX3B1c2hJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcHVzaC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgX1N5bWJvbCAmJiBfZ2V0SXRlcmF0b3JNZXRob2QocikgfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChfcHVzaEluc3RhbmNlUHJvcGVydHkoYSkuY2FsbChhLCBlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufSIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIG5hdGl2ZVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKGlzQ29uc3RydWN0b3IoQ29uc3RydWN0b3IpICYmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQ29uc3RydWN0b3IucHJvdG90eXBlKSkpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KENvbnN0cnVjdG9yKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yW1NQRUNJRVNdO1xuICAgICAgICBpZiAoQ29uc3RydWN0b3IgPT09IG51bGwpIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU2xpY2UoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQ29uc3RydWN0b3IpKG1heChmaW4gLSBrLCAwKSk7XG4gICAgZm9yIChuID0gMDsgayA8IGZpbjsgaysrLCBuKyspIGlmIChrIGluIE8pIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zbGljZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdzbGljZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNsaWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3NsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL3NsaWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9hcnJheS9mcm9tJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvYXJyYXkvZnJvbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvYXJyYXkvZnJvbScpO1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufSIsICJpbXBvcnQgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzXCI7XG5pbXBvcnQgX0FycmF5JGZyb20gZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzXCI7XG5pbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIHZhciBfY29udGV4dDtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBfc2xpY2VJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pKS5jYWxsKF9jb250ZXh0LCA4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBfQXJyYXkkZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsICJpbXBvcnQgX0FycmF5JGlzQXJyYXkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9pcy1hcnJheS5qc1wiO1xuaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoX0FycmF5JGlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn0iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfZ2V0SXRlcmF0b3JNZXRob2QgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXCI7XG5pbXBvcnQgX0FycmF5JGZyb20gZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBfU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIF9nZXRJdGVyYXRvck1ldGhvZChpdGVyKSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBfQXJyYXkkZnJvbShpdGVyKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCAiaW1wb3J0IGFycmF5V2l0aG91dEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVTcHJlYWQgZnJvbSBcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufSIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnY29uY2F0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvY29uY2F0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmNvbmNhdDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuY29uY2F0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2NvbmNhdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2NvbmNhdFwiKTsiLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zbGljZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xuXG4vLyBgUmVmbGVjdC5vd25LZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5vd25rZXlzXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBvd25LZXlzOiBvd25LZXlzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3Qub3duLWtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlJlZmxlY3Qub3duS2V5cztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcmVmbGVjdC9vd24ta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3JlZmxlY3Qvb3duLWtleXNcIik7IiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvaXMtYXJyYXlcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5rZXlzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3Qva2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9rZXlzXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICFTVFJJQ1RfTUVUSE9EID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbn0gOiBbXS5mb3JFYWNoO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9PSBmb3JFYWNoIH0sIHtcbiAgZm9yRWFjaDogZm9yRWFjaFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmb3JFYWNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZvckVhY2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZvckVhY2gpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciBuYXRpdmVSZXZlcnNlID0gdW5jdXJyeVRoaXMoW10ucmV2ZXJzZSk7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJldmVyc2Vcbi8vIGZpeCBmb3IgU2FmYXJpIDEyLjAgYnVnXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4Nzk0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTdHJpbmcodGVzdCkgPT09IFN0cmluZyh0ZXN0LnJldmVyc2UoKSkgfSwge1xuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnbiAtLSBkaXJ0eSBoYWNrXG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgcmV0dXJuIG5hdGl2ZVJldmVyc2UodGhpcyk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdyZXZlcnNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZXZlcnNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5yZXZlcnNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JldmVyc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgUCkge1xuICBpZiAoIWRlbGV0ZSBPW1BdKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAnICsgdHJ5VG9TdHJpbmcoUCkgKyAnIG9mICcgKyB0cnlUb1N0cmluZyhPKSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzcGxpY2UnKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNwbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zcGxpY2Vcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNwbGljZTogZnVuY3Rpb24gc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCAvKiAsIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFjdHVhbFN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpbnNlcnRDb3VudCwgYWN0dWFsRGVsZXRlQ291bnQsIEEsIGssIGZyb20sIHRvO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDApIHtcbiAgICAgIGluc2VydENvdW50ID0gYWN0dWFsRGVsZXRlQ291bnQgPSAwO1xuICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgICBpbnNlcnRDb3VudCA9IDA7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IGxlbiAtIGFjdHVhbFN0YXJ0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnNlcnRDb3VudCA9IGFyZ3VtZW50c0xlbmd0aCAtIDI7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IG1pbihtYXgodG9JbnRlZ2VyT3JJbmZpbml0eShkZWxldGVDb3VudCksIDApLCBsZW4gLSBhY3R1YWxTdGFydCk7XG4gICAgfVxuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBpbnNlcnRDb3VudCAtIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBmb3IgKGsgPSAwOyBrIDwgYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgZnJvbSA9IGFjdHVhbFN0YXJ0ICsgaztcbiAgICAgIGlmIChmcm9tIGluIE8pIGNyZWF0ZVByb3BlcnR5KEEsIGssIE9bZnJvbV0pO1xuICAgIH1cbiAgICBBLmxlbmd0aCA9IGFjdHVhbERlbGV0ZUNvdW50O1xuICAgIGlmIChpbnNlcnRDb3VudCA8IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBhY3R1YWxTdGFydDsgayA8IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50OyBrKyspIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudDtcbiAgICAgICAgdG8gPSBrICsgaW5zZXJ0Q291bnQ7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgICAgZm9yIChrID0gbGVuOyBrID4gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudDsgay0tKSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgayAtIDEpO1xuICAgIH0gZWxzZSBpZiAoaW5zZXJ0Q291bnQgPiBhY3R1YWxEZWxldGVDb3VudCkge1xuICAgICAgZm9yIChrID0gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsgPiBhY3R1YWxTdGFydDsgay0tKSB7XG4gICAgICAgIGZyb20gPSBrICsgYWN0dWFsRGVsZXRlQ291bnQgLSAxO1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudCAtIDE7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGsgPSAwOyBrIDwgaW5zZXJ0Q291bnQ7IGsrKykge1xuICAgICAgT1trICsgYWN0dWFsU3RhcnRdID0gYXJndW1lbnRzW2sgKyAyXTtcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudCk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NwbGljZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NwbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zcGxpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNwbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zcGxpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zcGxpY2VcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBzaG91bGQgaGF2ZSBjb3JyZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgKEVkZ2UgYnVnKVxuICBpZiAoREVTQ1JJUFRPUlMgJiYgJGFzc2lnbih7IGI6IDEgfSwgJGFzc2lnbihkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsICdiJywge1xuICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfSksIHsgYjogMiB9KSkuYiAhPT0gMSkgcmV0dXJuIHRydWU7XG4gIC8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3ltYm9sIC0tIHNhZmVcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnYXNzaWduIGRldGVjdGlvbicpO1xuICB2YXIgYWxwaGFiZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW3N5bWJvbF0gPSA3O1xuICBhbHBoYWJldC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoY2hyKSB7IEJbY2hyXSA9IGNocjsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtzeW1ib2xdICE9PSA3IHx8IG9iamVjdEtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9PSBhbHBoYWJldDtcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG4gIHdoaWxlIChhcmd1bWVudHNMZW5ndGggPiBpbmRleCkge1xuICAgIHZhciBTID0gSW5kZXhlZE9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KG9iamVjdEtleXMoUyksIGdldE93blByb3BlcnR5U3ltYm9scyhTKSkgOiBvYmplY3RLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlLCBTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24nKTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGFyaXR5OiAyLCBmb3JjZWQ6IE9iamVjdC5hc3NpZ24gIT09IGFzc2lnbiB9LCB7XG4gIGFzc2lnbjogYXNzaWduXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5hc3NpZ247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9hc3NpZ24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvYXNzaWduXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0UHJvdG90eXBlT2YoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIH0sIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBjcmVhdGU6IGNyZWF0ZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuY3JlYXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShQLCBEKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWpzb24gLS0gc2FmZVxuaWYgKCFwYXRoLkpTT04pIHBhdGguSlNPTiA9IHsgc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeSB9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICByZXR1cm4gYXBwbHkocGF0aC5KU09OLnN0cmluZ2lmeSwgbnVsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2pzb24vc3RyaW5naWZ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvanNvbi9zdHJpbmdpZnlcIik7IiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBCdW4gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBCdW4gPT0gJ2Z1bmN0aW9uJyAmJiBCdW4gJiYgdHlwZW9mIEJ1bi52ZXJzaW9uID09ICdzdHJpbmcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG4gIHJldHVybiBwYXNzZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgRU5HSU5FX0lTX0JVTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnVuJyk7XG52YXIgVVNFUl9BR0VOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG5cbnZhciBGdW5jdGlvbiA9IGdsb2JhbC5GdW5jdGlvbjtcbi8vIGRpcnR5IElFOS0gYW5kIEJ1biAwLjMuMC0gY2hlY2tzXG52YXIgV1JBUCA9IC9NU0lFIC5cXC4vLnRlc3QoVVNFUl9BR0VOVCkgfHwgRU5HSU5FX0lTX0JVTiAmJiAoZnVuY3Rpb24gKCkge1xuICB2YXIgdmVyc2lvbiA9IGdsb2JhbC5CdW4udmVyc2lvbi5zcGxpdCgnLicpO1xuICByZXR1cm4gdmVyc2lvbi5sZW5ndGggPCAzIHx8IHZlcnNpb25bMF0gPT09ICcwJyAmJiAodmVyc2lvblsxXSA8IDMgfHwgdmVyc2lvblsxXSA9PT0gJzMnICYmIHZlcnNpb25bMl0gPT09ICcwJyk7XG59KSgpO1xuXG4vLyBJRTktIC8gQnVuIDAuMy4wLSBzZXRUaW1lb3V0IC8gc2V0SW50ZXJ2YWwgLyBzZXRJbW1lZGlhdGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCN0aW1lcnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9pc3N1ZXMvMTYzM1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBoYXNUaW1lQXJnKSB7XG4gIHZhciBmaXJzdFBhcmFtSW5kZXggPSBoYXNUaW1lQXJnID8gMiA6IDE7XG4gIHJldHVybiBXUkFQID8gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSkgPiBmaXJzdFBhcmFtSW5kZXg7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgcGFyYW1zID0gYm91bmRBcmdzID8gYXJyYXlTbGljZShhcmd1bWVudHMsIGZpcnN0UGFyYW1JbmRleCkgOiBbXTtcbiAgICB2YXIgY2FsbGJhY2sgPSBib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdGhpcywgcGFyYW1zKTtcbiAgICB9IDogZm47XG4gICAgcmV0dXJuIGhhc1RpbWVBcmcgPyBzY2hlZHVsZXIoY2FsbGJhY2ssIHRpbWVvdXQpIDogc2NoZWR1bGVyKGNhbGxiYWNrKTtcbiAgfSA6IHNjaGVkdWxlcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNjaGVkdWxlcnNGaXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXgnKTtcblxudmFyIHNldEludGVydmFsID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0SW50ZXJ2YWwsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldGludGVydmFsXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRJbnRlcnZhbCAhPT0gc2V0SW50ZXJ2YWwgfSwge1xuICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWxcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRUaW1lb3V0ID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0VGltZW91dCwgdHJ1ZSk7XG5cbi8vIEJ1biAvIElFOS0gc2V0VGltZW91dCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRUaW1lb3V0ICE9PSBzZXRUaW1lb3V0IH0sIHtcbiAgc2V0VGltZW91dDogc2V0VGltZW91dFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRUaW1lb3V0O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXRcIik7IiwgImZ1bmN0aW9uIEVtaXR0ZXIob2JqZWN0KSB7XG5cdGlmIChvYmplY3QpIHtcblx0XHRyZXR1cm4gbWl4aW4ob2JqZWN0KTtcblx0fVxuXG5cdHRoaXMuX2NhbGxiYWNrcyA9IG5ldyBNYXAoKTtcbn1cblxuZnVuY3Rpb24gbWl4aW4ob2JqZWN0KSB7XG5cdE9iamVjdC5hc3NpZ24ob2JqZWN0LCBFbWl0dGVyLnByb3RvdHlwZSk7XG5cdG9iamVjdC5fY2FsbGJhY2tzID0gbmV3IE1hcCgpO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5FbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCkgPz8gW107XG5cdGNhbGxiYWNrcy5wdXNoKGxpc3RlbmVyKTtcblx0dGhpcy5fY2FsbGJhY2tzLnNldChldmVudCwgY2FsbGJhY2tzKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRjb25zdCBvbiA9ICguLi5hcmd1bWVudHNfKSA9PiB7XG5cdFx0dGhpcy5vZmYoZXZlbnQsIG9uKTtcblx0XHRsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHNfKTtcblx0fTtcblxuXHRvbi5mbiA9IGxpc3RlbmVyO1xuXHR0aGlzLm9uKGV2ZW50LCBvbik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRpZiAoZXZlbnQgPT09IHVuZGVmaW5lZCAmJiBsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5fY2FsbGJhY2tzLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpZiAobGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX2NhbGxiYWNrcy5kZWxldGUoZXZlbnQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCk7XG5cdGlmIChjYWxsYmFja3MpIHtcblx0XHRmb3IgKGNvbnN0IFtpbmRleCwgY2FsbGJhY2tdIG9mIGNhbGxiYWNrcy5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChjYWxsYmFjayA9PT0gbGlzdGVuZXIgfHwgY2FsbGJhY2suZm4gPT09IGxpc3RlbmVyKSB7XG5cdFx0XHRcdGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoY2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5fY2FsbGJhY2tzLmRlbGV0ZShldmVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2NhbGxiYWNrcy5zZXQoZXZlbnQsIGNhbGxiYWNrcyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50LCAuLi5hcmd1bWVudHNfKSB7XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpO1xuXHRpZiAoY2FsbGJhY2tzKSB7XG5cdFx0Ly8gQ3JlYXRlIGEgY29weSBvZiB0aGUgY2FsbGJhY2tzIGFycmF5IHRvIGF2b2lkIGlzc3VlcyBpZiBpdCdzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb25cblx0XHRjb25zdCBjYWxsYmFja3NDb3B5ID0gWy4uLmNhbGxiYWNrc107XG5cblx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrc0NvcHkpIHtcblx0XHRcdGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50c18pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLl9jYWxsYmFja3MuZ2V0KGV2ZW50KSA/PyBbXTtcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0aWYgKGV2ZW50KSB7XG5cdFx0cmV0dXJuIHRoaXMubGlzdGVuZXJzKGV2ZW50KS5sZW5ndGg7XG5cdH1cblxuXHRsZXQgdG90YWxDb3VudCA9IDA7XG5cdGZvciAoY29uc3QgY2FsbGJhY2tzIG9mIHRoaXMuX2NhbGxiYWNrcy52YWx1ZXMoKSkge1xuXHRcdHRvdGFsQ291bnQgKz0gY2FsbGJhY2tzLmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiB0b3RhbENvdW50O1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUuaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLmxpc3RlbmVyQ291bnQoZXZlbnQpID4gMDtcbn07XG5cbi8vIEFsaWFzZXNcbkVtaXR0ZXIucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5vbjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub2ZmO1xuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gRW1pdHRlcjtcbn1cbiIsICIvKiEgSGFtbWVyLkpTIC0gdjIuMC4xNy1yYyAtIDIwMTktMTItMTZcbiAqIGh0dHA6Ly9uYXZlci5naXRodWIuaW8vZWdqc1xuICpcbiAqIEZvcmtlZCBCeSBOYXZlciBlZ2pzXG4gKiBDb3B5cmlnaHQgKGMpIGhhbW1lcmpzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKi9cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHsuLi5PYmplY3R9IG9iamVjdHNfdG9fYXNzaWduXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB0YXJnZXRcbiAqL1xudmFyIGFzc2lnbjtcblxuaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQpIHtcbiAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gT2JqZWN0KHRhcmdldCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF07XG5cbiAgICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgbmV4dEtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSB7XG4gICAgICAgICAgICBvdXRwdXRbbmV4dEtleV0gPSBzb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcbn0gZWxzZSB7XG4gIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG59XG5cbnZhciBhc3NpZ24kMSA9IGFzc2lnbjtcblxudmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xudmFyIFRFU1RfRUxFTUVOVCA9IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IHtcbiAgc3R5bGU6IHt9XG59IDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgVFlQRV9GVU5DVElPTiA9ICdmdW5jdGlvbic7XG52YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgIGFicyA9IE1hdGguYWJzO1xudmFyIG5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIHByZWZpeGVkIHByb3BlcnR5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAqIEByZXR1cm5zIHtTdHJpbmd8VW5kZWZpbmVkfSBwcmVmaXhlZFxuICovXG5cbmZ1bmN0aW9uIHByZWZpeGVkKG9iaiwgcHJvcGVydHkpIHtcbiAgdmFyIHByZWZpeDtcbiAgdmFyIHByb3A7XG4gIHZhciBjYW1lbFByb3AgPSBwcm9wZXJ0eVswXS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICBwcmVmaXggPSBWRU5ET1JfUFJFRklYRVNbaV07XG4gICAgcHJvcCA9IHByZWZpeCA/IHByZWZpeCArIGNhbWVsUHJvcCA6IHByb3BlcnR5O1xuXG4gICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICByZXR1cm4gcHJvcDtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXctZnVuYywgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbnZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gIC8vIHdpbmRvdyBpcyB1bmRlZmluZWQgaW4gbm9kZS5qc1xuICB3aW4gPSB7fTtcbn0gZWxzZSB7XG4gIHdpbiA9IHdpbmRvdztcbn1cblxudmFyIFBSRUZJWEVEX1RPVUNIX0FDVElPTiA9IHByZWZpeGVkKFRFU1RfRUxFTUVOVC5zdHlsZSwgJ3RvdWNoQWN0aW9uJyk7XG52YXIgTkFUSVZFX1RPVUNIX0FDVElPTiA9IFBSRUZJWEVEX1RPVUNIX0FDVElPTiAhPT0gdW5kZWZpbmVkO1xuZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb25Qcm9wcygpIHtcbiAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRvdWNoTWFwID0ge307XG4gIHZhciBjc3NTdXBwb3J0cyA9IHdpbi5DU1MgJiYgd2luLkNTUy5zdXBwb3J0cztcbiAgWydhdXRvJywgJ21hbmlwdWxhdGlvbicsICdwYW4teScsICdwYW4teCcsICdwYW4teCBwYW4teScsICdub25lJ10uZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7XG4gICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgLy8gYWxsIHZhbHVlcy4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgSUUgMTAgYW5kIDExLlxuICAgIHJldHVybiB0b3VjaE1hcFt2YWxdID0gY3NzU3VwcG9ydHMgPyB3aW4uQ1NTLnN1cHBvcnRzKCd0b3VjaC1hY3Rpb24nLCB2YWwpIDogdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiB0b3VjaE1hcDtcbn1cblxudmFyIFRPVUNIX0FDVElPTl9DT01QVVRFID0gJ2NvbXB1dGUnO1xudmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xudmFyIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04gPSAnbWFuaXB1bGF0aW9uJzsgLy8gbm90IGltcGxlbWVudGVkXG5cbnZhciBUT1VDSF9BQ1RJT05fTk9ORSA9ICdub25lJztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1ggPSAncGFuLXgnO1xudmFyIFRPVUNIX0FDVElPTl9QQU5fWSA9ICdwYW4teSc7XG52YXIgVE9VQ0hfQUNUSU9OX01BUCA9IGdldFRvdWNoQWN0aW9uUHJvcHMoKTtcblxudmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcbnZhciBTVVBQT1JUX1RPVUNIID0gJ29udG91Y2hzdGFydCcgaW4gd2luO1xudmFyIFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMgPSBwcmVmaXhlZCh3aW4sICdQb2ludGVyRXZlbnQnKSAhPT0gdW5kZWZpbmVkO1xudmFyIFNVUFBPUlRfT05MWV9UT1VDSCA9IFNVUFBPUlRfVE9VQ0ggJiYgTU9CSUxFX1JFR0VYLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSU5QVVRfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG52YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbnZhciBJTlBVVF9UWVBFX01PVVNFID0gJ21vdXNlJztcbnZhciBJTlBVVF9UWVBFX0tJTkVDVCA9ICdraW5lY3QnO1xudmFyIENPTVBVVEVfSU5URVJWQUwgPSAyNTtcbnZhciBJTlBVVF9TVEFSVCA9IDE7XG52YXIgSU5QVVRfTU9WRSA9IDI7XG52YXIgSU5QVVRfRU5EID0gNDtcbnZhciBJTlBVVF9DQU5DRUwgPSA4O1xudmFyIERJUkVDVElPTl9OT05FID0gMTtcbnZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG52YXIgRElSRUNUSU9OX1JJR0hUID0gNDtcbnZhciBESVJFQ1RJT05fVVAgPSA4O1xudmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG52YXIgRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fTEVGVCB8IERJUkVDVElPTl9SSUdIVDtcbnZhciBESVJFQ1RJT05fVkVSVElDQUwgPSBESVJFQ1RJT05fVVAgfCBESVJFQ1RJT05fRE9XTjtcbnZhciBESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUw7XG52YXIgUFJPUFNfWFkgPSBbJ3gnLCAneSddO1xudmFyIFBST1BTX0NMSUVOVF9YWSA9IFsnY2xpZW50WCcsICdjbGllbnRZJ107XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdhbGsgb2JqZWN0cyBhbmQgYXJyYXlzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvclxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gIHZhciBpO1xuXG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9iai5mb3JFYWNoKSB7XG4gICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICB9IGVsc2UgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBvYmoubGVuZ3RoKSB7XG4gICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpIGluIG9iaikge1xuICAgICAgb2JqLmhhc093blByb3BlcnR5KGkpICYmIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBsZXQgYSBib29sZWFuIHZhbHVlIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IG11c3QgcmV0dXJuIGEgYm9vbGVhblxuICogdGhpcyBmaXJzdCBpdGVtIGluIGFyZ3Mgd2lsbCBiZSB1c2VkIGFzIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IHZhbFxuICogQHBhcmFtIHtBcnJheX0gW2FyZ3NdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBib29sT3JGbih2YWwsIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFRZUEVfRlVOQ1RJT04pIHtcbiAgICByZXR1cm4gdmFsLmFwcGx5KGFyZ3MgPyBhcmdzWzBdIHx8IHVuZGVmaW5lZCA6IHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzbWFsbCBpbmRleE9mIHdyYXBwZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gZm91bmRcbiAqL1xuZnVuY3Rpb24gaW5TdHIoc3RyLCBmaW5kKSB7XG4gIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3aGVuIHRoZSB0b3VjaEFjdGlvbnMgYXJlIGNvbGxlY3RlZCB0aGV5IGFyZSBub3QgYSB2YWxpZCB2YWx1ZSwgc28gd2UgbmVlZCB0byBjbGVhbiB0aGluZ3MgdXAuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuXG5mdW5jdGlvbiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zKSB7XG4gIC8vIG5vbmVcbiAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTk9ORTtcbiAgfVxuXG4gIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpOyAvLyBpZiBib3RoIHBhbi14IGFuZCBwYW4teSBhcmUgc2V0IChkaWZmZXJlbnQgcmVjb2duaXplcnNcbiAgLy8gZm9yIGRpZmZlcmVudCBkaXJlY3Rpb25zLCBlLmcuIGhvcml6b250YWwgcGFuIGJ1dCB2ZXJ0aWNhbCBzd2lwZT8pXG4gIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAvLyByZWNvZ25pemVycyB3aWxsIHdvcmssIHNpbmNlIHRoZSBicm93c2VyIHdvdWxkIGhhbmRsZSBhbGwgcGFubmluZ1xuXG4gIGlmIChoYXNQYW5YICYmIGhhc1BhblkpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gIH0gLy8gcGFuLXggT1IgcGFuLXlcblxuXG4gIGlmIChoYXNQYW5YIHx8IGhhc1BhblkpIHtcbiAgICByZXR1cm4gaGFzUGFuWCA/IFRPVUNIX0FDVElPTl9QQU5fWCA6IFRPVUNIX0FDVElPTl9QQU5fWTtcbiAgfSAvLyBtYW5pcHVsYXRpb25cblxuXG4gIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OO1xuICB9XG5cbiAgcmV0dXJuIFRPVUNIX0FDVElPTl9BVVRPO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUb3VjaCBBY3Rpb25cbiAqIHNldHMgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IG9yIHVzZXMgdGhlIGpzIGFsdGVybmF0aXZlXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIFRvdWNoQWN0aW9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG91Y2hBY3Rpb24obWFuYWdlciwgdmFsdWUpIHtcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuc2V0KHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZSBvbiB0aGUgZWxlbWVudCBvciBlbmFibGUgdGhlIHBvbHlmaWxsXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBUb3VjaEFjdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIGZpbmQgb3V0IHRoZSB0b3VjaC1hY3Rpb24gYnkgdGhlIGV2ZW50IGhhbmRsZXJzXG4gICAgaWYgKHZhbHVlID09PSBUT1VDSF9BQ1RJT05fQ09NUFVURSkge1xuICAgICAgdmFsdWUgPSB0aGlzLmNvbXB1dGUoKTtcbiAgICB9XG5cbiAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGVbUFJFRklYRURfVE9VQ0hfQUNUSU9OXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICoganVzdCByZS1zZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlXG4gICAqL1xuXG5cbiAgX3Byb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB0aGlzLnNldCh0aGlzLm1hbmFnZXIub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjb21wdXRlIHRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IGJhc2VkIG9uIHRoZSByZWNvZ25pemVyJ3Mgc2V0dGluZ3NcbiAgICogQHJldHVybnMge1N0cmluZ30gdmFsdWVcbiAgICovXG5cblxuICBfcHJvdG8uY29tcHV0ZSA9IGZ1bmN0aW9uIGNvbXB1dGUoKSB7XG4gICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICBlYWNoKHRoaXMubWFuYWdlci5yZWNvZ25pemVycywgZnVuY3Rpb24gKHJlY29nbml6ZXIpIHtcbiAgICAgIGlmIChib29sT3JGbihyZWNvZ25pemVyLm9wdGlvbnMuZW5hYmxlLCBbcmVjb2duaXplcl0pKSB7XG4gICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zLmpvaW4oJyAnKSk7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gZWFjaCBpbnB1dCBjeWNsZSBhbmQgcHJvdmlkZXMgdGhlIHByZXZlbnRpbmcgb2YgdGhlIGJyb3dzZXIgYmVoYXZpb3JcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLnByZXZlbnREZWZhdWx0cyA9IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0cyhpbnB1dCkge1xuICAgIHZhciBzcmNFdmVudCA9IGlucHV0LnNyY0V2ZW50O1xuICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5vZmZzZXREaXJlY3Rpb247IC8vIGlmIHRoZSB0b3VjaCBhY3Rpb24gZGlkIHByZXZlbnRlZCBvbmNlIHRoaXMgc2Vzc2lvblxuXG4gICAgaWYgKHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCkge1xuICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWV07XG4gICAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWF07XG5cbiAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgLy8gZG8gbm90IHByZXZlbnQgZGVmYXVsdHMgaWYgdGhpcyBpcyBhIHRhcCBnZXN0dXJlXG4gICAgICB2YXIgaXNUYXBQb2ludGVyID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSAxO1xuICAgICAgdmFyIGlzVGFwTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IDI7XG4gICAgICB2YXIgaXNUYXBUb3VjaFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPCAyNTA7XG5cbiAgICAgIGlmIChpc1RhcFBvaW50ZXIgJiYgaXNUYXBNb3ZlbWVudCAmJiBpc1RhcFRvdWNoVGltZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgICAgLy8gYHBhbi14IHBhbi15YCBtZWFucyBicm93c2VyIGhhbmRsZXMgYWxsIHNjcm9sbGluZy9wYW5uaW5nLCBkbyBub3QgcHJldmVudFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChoYXNOb25lIHx8IGhhc1BhblkgJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwgfHwgaGFzUGFuWCAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZlbnRTcmMoc3JjRXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbGwgcHJldmVudERlZmF1bHQgdG8gcHJldmVudCB0aGUgYnJvd3NlcidzIGRlZmF1bHQgYmVoYXZpb3IgKHNjcm9sbGluZyBpbiBtb3N0IGNhc2VzKVxuICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICovXG5cblxuICBfcHJvdG8ucHJldmVudFNyYyA9IGZ1bmN0aW9uIHByZXZlbnRTcmMoc3JjRXZlbnQpIHtcbiAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoQWN0aW9uO1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBmaW5kIGlmIGEgbm9kZSBpcyBpbiB0aGUgZ2l2ZW4gcGFyZW50XG4gKiBAbWV0aG9kIGhhc1BhcmVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBjZW50ZXIgb2YgYWxsIHRoZSBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gcG9pbnRlcnNcbiAqIEByZXR1cm4ge09iamVjdH0gY2VudGVyIGNvbnRhaW5zIGB4YCBhbmQgYHlgIHByb3BlcnRpZXNcbiAqL1xuXG5mdW5jdGlvbiBnZXRDZW50ZXIocG9pbnRlcnMpIHtcbiAgdmFyIHBvaW50ZXJzTGVuZ3RoID0gcG9pbnRlcnMubGVuZ3RoOyAvLyBubyBuZWVkIHRvIGxvb3Agd2hlbiBvbmx5IG9uZSB0b3VjaFxuXG4gIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRYKSxcbiAgICAgIHk6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFkpXG4gICAgfTtcbiAgfVxuXG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBwb2ludGVyc0xlbmd0aCkge1xuICAgIHggKz0gcG9pbnRlcnNbaV0uY2xpZW50WDtcbiAgICB5ICs9IHBvaW50ZXJzW2ldLmNsaWVudFk7XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4IC8gcG9pbnRlcnNMZW5ndGgpLFxuICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIGEgc2ltcGxlIGNsb25lIGZyb20gdGhlIGlucHV0IHVzZWQgZm9yIHN0b3JhZ2Ugb2YgZmlyc3RJbnB1dCBhbmQgZmlyc3RNdWx0aXBsZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBjbG9uZWRJbnB1dERhdGFcbiAqL1xuXG5mdW5jdGlvbiBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCkge1xuICAvLyBtYWtlIGEgc2ltcGxlIGNvcHkgb2YgdGhlIHBvaW50ZXJzIGJlY2F1c2Ugd2Ugd2lsbCBnZXQgYSByZWZlcmVuY2UgaWYgd2UgZG9uJ3RcbiAgLy8gd2Ugb25seSBuZWVkIGNsaWVudFhZIGZvciB0aGUgY2FsY3VsYXRpb25zXG4gIHZhciBwb2ludGVycyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBpbnB1dC5wb2ludGVycy5sZW5ndGgpIHtcbiAgICBwb2ludGVyc1tpXSA9IHtcbiAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgY2xpZW50WTogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WSlcbiAgICB9O1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGltZVN0YW1wOiBub3coKSxcbiAgICBwb2ludGVyczogcG9pbnRlcnMsXG4gICAgY2VudGVyOiBnZXRDZW50ZXIocG9pbnRlcnMpLFxuICAgIGRlbHRhWDogaW5wdXQuZGVsdGFYLFxuICAgIGRlbHRhWTogaW5wdXQuZGVsdGFZXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gcDEge3gsIHl9XG4gKiBAcGFyYW0ge09iamVjdH0gcDIge3gsIHl9XG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gKi9cblxuZnVuY3Rpb24gZ2V0RGlzdGFuY2UocDEsIHAyLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcHJvcHMgPSBQUk9QU19YWTtcbiAgfVxuXG4gIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dO1xuICB2YXIgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBhbmdsZSBiZXR3ZWVuIHR3byBjb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IHAxXG4gKiBAcGFyYW0ge09iamVjdH0gcDJcbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAqIEByZXR1cm4ge051bWJlcn0gYW5nbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRBbmdsZShwMSwgcDIsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICBwcm9wcyA9IFBST1BTX1hZO1xuICB9XG5cbiAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV07XG4gIHZhciB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KSAqIDE4MCAvIE1hdGguUEk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgZGlyZWN0aW9uIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpcmVjdGlvblxuICovXG5cbmZ1bmN0aW9uIGdldERpcmVjdGlvbih4LCB5KSB7XG4gIGlmICh4ID09PSB5KSB7XG4gICAgcmV0dXJuIERJUkVDVElPTl9OT05FO1xuICB9XG5cbiAgaWYgKGFicyh4KSA+PSBhYnMoeSkpIHtcbiAgICByZXR1cm4geCA8IDAgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgfVxuXG4gIHJldHVybiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyOyAvLyBsZXQgeyBvZmZzZXREZWx0YTpvZmZzZXQgPSB7fSwgcHJldkRlbHRhID0ge30sIHByZXZJbnB1dCA9IHt9IH0gPSBzZXNzaW9uO1xuICAvLyBqc2NzIHRocm93aW5nIGVycm9yIG9uIGRlZmFsdXQgZGVzdHJ1Y3R1cmVkIHZhbHVlcyBhbmQgd2l0aG91dCBkZWZhdWx0cyB0ZXN0cyBmYWlsXG5cbiAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gIHZhciBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSB8fCB7fTtcbiAgdmFyIHByZXZJbnB1dCA9IHNlc3Npb24ucHJldklucHV0IHx8IHt9O1xuXG4gIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhID0ge1xuICAgICAgeDogcHJldklucHV0LmRlbHRhWCB8fCAwLFxuICAgICAgeTogcHJldklucHV0LmRlbHRhWSB8fCAwXG4gICAgfTtcbiAgICBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhID0ge1xuICAgICAgeDogY2VudGVyLngsXG4gICAgICB5OiBjZW50ZXIueVxuICAgIH07XG4gIH1cblxuICBpbnB1dC5kZWx0YVggPSBwcmV2RGVsdGEueCArIChjZW50ZXIueCAtIG9mZnNldC54KTtcbiAgaW5wdXQuZGVsdGFZID0gcHJldkRlbHRhLnkgKyAoY2VudGVyLnkgLSBvZmZzZXQueSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgdmVsb2NpdHkgYmV0d2VlbiB0d28gcG9pbnRzLiB1bml0IGlzIGluIHB4IHBlciBtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIHgsIHkpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgeTogeSAvIGRlbHRhVGltZSB8fCAwXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgc2NhbGUgZmFjdG9yIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBubyBzY2FsZSBpcyAxLCBhbmQgZ29lcyBkb3duIHRvIDAgd2hlbiBwaW5jaGVkIHRvZ2V0aGVyLCBhbmQgYmlnZ2VyIHdoZW4gcGluY2hlZCBvdXRcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gc2NhbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRTY2FsZShzdGFydCwgZW5kKSB7XG4gIHJldHVybiBnZXREaXN0YW5jZShlbmRbMF0sIGVuZFsxXSwgUFJPUFNfQ0xJRU5UX1hZKSAvIGdldERpc3RhbmNlKHN0YXJ0WzBdLCBzdGFydFsxXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSByb3RhdGlvbiBkZWdyZWVzIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHJvdGF0aW9uXG4gKi9cblxuZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZ2V0QW5nbGUoZW5kWzFdLCBlbmRbMF0sIFBST1BTX0NMSUVOVF9YWSkgKyBnZXRBbmdsZShzdGFydFsxXSwgc3RhcnRbMF0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHZlbG9jaXR5IGlzIGNhbGN1bGF0ZWQgZXZlcnkgeCBtc1xuICogQHBhcmFtIHtPYmplY3R9IHNlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgbGFzdCA9IHNlc3Npb24ubGFzdEludGVydmFsIHx8IGlucHV0O1xuICB2YXIgZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gbGFzdC50aW1lU3RhbXA7XG4gIHZhciB2ZWxvY2l0eTtcbiAgdmFyIHZlbG9jaXR5WDtcbiAgdmFyIHZlbG9jaXR5WTtcbiAgdmFyIGRpcmVjdGlvbjtcblxuICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9PSBJTlBVVF9DQU5DRUwgJiYgKGRlbHRhVGltZSA+IENPTVBVVEVfSU5URVJWQUwgfHwgbGFzdC52ZWxvY2l0eSA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHZhciBkZWx0YVggPSBpbnB1dC5kZWx0YVggLSBsYXN0LmRlbHRhWDtcbiAgICB2YXIgZGVsdGFZID0gaW5wdXQuZGVsdGFZIC0gbGFzdC5kZWx0YVk7XG4gICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICB2ZWxvY2l0eVggPSB2Lng7XG4gICAgdmVsb2NpdHlZID0gdi55O1xuICAgIHZlbG9jaXR5ID0gYWJzKHYueCkgPiBhYnModi55KSA/IHYueCA6IHYueTtcbiAgICBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oZGVsdGFYLCBkZWx0YVkpO1xuICAgIHNlc3Npb24ubGFzdEludGVydmFsID0gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIGxhdGVzdCB2ZWxvY2l0eSBpbmZvIGlmIGl0IGRvZXNuJ3Qgb3ZlcnRha2UgYSBtaW5pbXVtIHBlcmlvZFxuICAgIHZlbG9jaXR5ID0gbGFzdC52ZWxvY2l0eTtcbiAgICB2ZWxvY2l0eVggPSBsYXN0LnZlbG9jaXR5WDtcbiAgICB2ZWxvY2l0eVkgPSBsYXN0LnZlbG9jaXR5WTtcbiAgICBkaXJlY3Rpb24gPSBsYXN0LmRpcmVjdGlvbjtcbiAgfVxuXG4gIGlucHV0LnZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gIGlucHV0LnZlbG9jaXR5WCA9IHZlbG9jaXR5WDtcbiAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG59XG5cbi8qKlxuKiBAcHJpdmF0ZVxuICogZXh0ZW5kIHRoZSBkYXRhIHdpdGggc29tZSB1c2FibGUgcHJvcGVydGllcyBsaWtlIHNjYWxlLCByb3RhdGUsIHZlbG9jaXR5IGV0Y1xuICogQHBhcmFtIHtPYmplY3R9IG1hbmFnZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnB1dERhdGEobWFuYWdlciwgaW5wdXQpIHtcbiAgdmFyIHNlc3Npb24gPSBtYW5hZ2VyLnNlc3Npb247XG4gIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIHN0b3JlIHRoZSBmaXJzdCBpbnB1dCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGFuZCBkaXJlY3Rpb25cblxuICBpZiAoIXNlc3Npb24uZmlyc3RJbnB1dCkge1xuICAgIHNlc3Npb24uZmlyc3RJbnB1dCA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgfSAvLyB0byBjb21wdXRlIHNjYWxlIGFuZCByb3RhdGlvbiB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBtdWx0aXBsZSB0b3VjaGVzXG5cblxuICBpZiAocG9pbnRlcnNMZW5ndGggPiAxICYmICFzZXNzaW9uLmZpcnN0TXVsdGlwbGUpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gIH0gZWxzZSBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBmaXJzdElucHV0ID0gc2Vzc2lvbi5maXJzdElucHV0LFxuICAgICAgZmlyc3RNdWx0aXBsZSA9IHNlc3Npb24uZmlyc3RNdWx0aXBsZTtcbiAgdmFyIG9mZnNldENlbnRlciA9IGZpcnN0TXVsdGlwbGUgPyBmaXJzdE11bHRpcGxlLmNlbnRlciA6IGZpcnN0SW5wdXQuY2VudGVyO1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyID0gZ2V0Q2VudGVyKHBvaW50ZXJzKTtcbiAgaW5wdXQudGltZVN0YW1wID0gbm93KCk7XG4gIGlucHV0LmRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGZpcnN0SW5wdXQudGltZVN0YW1wO1xuICBpbnB1dC5hbmdsZSA9IGdldEFuZ2xlKG9mZnNldENlbnRlciwgY2VudGVyKTtcbiAgaW5wdXQuZGlzdGFuY2UgPSBnZXREaXN0YW5jZShvZmZzZXRDZW50ZXIsIGNlbnRlcik7XG4gIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KTtcbiAgaW5wdXQub2Zmc2V0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgdmFyIG92ZXJhbGxWZWxvY2l0eSA9IGdldFZlbG9jaXR5KGlucHV0LmRlbHRhVGltZSwgaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYID0gb3ZlcmFsbFZlbG9jaXR5Lng7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVkgPSBvdmVyYWxsVmVsb2NpdHkueTtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5ID0gYWJzKG92ZXJhbGxWZWxvY2l0eS54KSA+IGFicyhvdmVyYWxsVmVsb2NpdHkueSkgPyBvdmVyYWxsVmVsb2NpdHkueCA6IG92ZXJhbGxWZWxvY2l0eS55O1xuICBpbnB1dC5zY2FsZSA9IGZpcnN0TXVsdGlwbGUgPyBnZXRTY2FsZShmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAxO1xuICBpbnB1dC5yb3RhdGlvbiA9IGZpcnN0TXVsdGlwbGUgPyBnZXRSb3RhdGlvbihmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAwO1xuICBpbnB1dC5tYXhQb2ludGVycyA9ICFzZXNzaW9uLnByZXZJbnB1dCA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA+IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnM7XG4gIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCk7IC8vIGZpbmQgdGhlIGNvcnJlY3QgdGFyZ2V0XG5cbiAgdmFyIHRhcmdldCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgdmFyIHNyY0V2ZW50ID0gaW5wdXQuc3JjRXZlbnQ7XG4gIHZhciBzcmNFdmVudFRhcmdldDtcblxuICBpZiAoc3JjRXZlbnQuY29tcG9zZWRQYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5jb21wb3NlZFBhdGgoKVswXTtcbiAgfSBlbHNlIGlmIChzcmNFdmVudC5wYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5wYXRoWzBdO1xuICB9IGVsc2Uge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQudGFyZ2V0O1xuICB9XG5cbiAgaWYgKGhhc1BhcmVudChzcmNFdmVudFRhcmdldCwgdGFyZ2V0KSkge1xuICAgIHRhcmdldCA9IHNyY0V2ZW50VGFyZ2V0O1xuICB9XG5cbiAgaW5wdXQudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBoYW5kbGUgaW5wdXQgZXZlbnRzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGlucHV0SGFuZGxlcihtYW5hZ2VyLCBldmVudFR5cGUsIGlucHV0KSB7XG4gIHZhciBwb2ludGVyc0xlbiA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aDtcbiAgdmFyIGNoYW5nZWRQb2ludGVyc0xlbiA9IGlucHV0LmNoYW5nZWRQb2ludGVycy5sZW5ndGg7XG4gIHZhciBpc0ZpcnN0ID0gZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIHZhciBpc0ZpbmFsID0gZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIGlucHV0LmlzRmlyc3QgPSAhIWlzRmlyc3Q7XG4gIGlucHV0LmlzRmluYWwgPSAhIWlzRmluYWw7XG5cbiAgaWYgKGlzRmlyc3QpIHtcbiAgICBtYW5hZ2VyLnNlc3Npb24gPSB7fTtcbiAgfSAvLyBzb3VyY2UgZXZlbnQgaXMgdGhlIG5vcm1hbGl6ZWQgdmFsdWUgb2YgdGhlIGRvbUV2ZW50c1xuICAvLyBsaWtlICd0b3VjaHN0YXJ0LCBtb3VzZXVwLCBwb2ludGVyZG93bidcblxuXG4gIGlucHV0LmV2ZW50VHlwZSA9IGV2ZW50VHlwZTsgLy8gY29tcHV0ZSBzY2FsZSwgcm90YXRpb24gZXRjXG5cbiAgY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCk7IC8vIGVtaXQgc2VjcmV0IGV2ZW50XG5cbiAgbWFuYWdlci5lbWl0KCdoYW1tZXIuaW5wdXQnLCBpbnB1dCk7XG4gIG1hbmFnZXIucmVjb2duaXplKGlucHV0KTtcbiAgbWFuYWdlci5zZXNzaW9uLnByZXZJbnB1dCA9IGlucHV0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzcGxpdCBzdHJpbmcgb24gd2hpdGVzcGFjZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge0FycmF5fSB3b3Jkc1xuICovXG5mdW5jdGlvbiBzcGxpdFN0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltKCkuc3BsaXQoL1xccysvZyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZEV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgd2luZG93IG9iamVjdCBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RG9jdW1lbnRWaWV3fFdpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93Rm9yRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZWxlbWVudDtcbiAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93IHx8IHdpbmRvdztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIElucHV0KG1hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgICB0aGlzLnRhcmdldCA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dFRhcmdldDsgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuXG4gICAgdGhpcy5kb21IYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICBpZiAoYm9vbE9yRm4obWFuYWdlci5vcHRpb25zLmVuYWJsZSwgW21hbmFnZXJdKSkge1xuICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2hvdWxkIGhhbmRsZSB0aGUgaW5wdXRFdmVudCBkYXRhIGFuZCB0cmlnZ2VyIHRoZSBjYWxsYmFja1xuICAgKiBAdmlydHVhbFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBiaW5kIHRoZSBldmVudHNcbiAgICovXG5cblxuICBfcHJvdG8uaW5pdCA9IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdGhpcy5ldkVsICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZUYXJnZXQgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldldpbiAmJiBhZGRFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgKi9cblxuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldlRhcmdldCAmJiByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2V2luICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4gSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGZpbmQgaWYgYSBhcnJheSBjb250YWlucyB0aGUgb2JqZWN0IHVzaW5nIGluZGV4T2Ygb3IgYSBzaW1wbGUgcG9seUZpbGxcbiAqIEBwYXJhbSB7QXJyYXl9IHNyY1xuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmluZEJ5S2V5XVxuICogQHJldHVybiB7Qm9vbGVhbnxOdW1iZXJ9IGZhbHNlIHdoZW4gbm90IGZvdW5kLCBvciB0aGUgaW5kZXhcbiAqL1xuZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICBpZiAoc3JjLmluZGV4T2YgJiYgIWZpbmRCeUtleSkge1xuICAgIHJldHVybiBzcmMuaW5kZXhPZihmaW5kKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICAgIGlmIChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCB8fCAhZmluZEJ5S2V5ICYmIHNyY1tpXSA9PT0gZmluZCkge1xuICAgICAgICAvLyBkbyBub3QgdXNlID09PSBoZXJlLCB0ZXN0IGZhaWxzXG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG5cbnZhciBQT0lOVEVSX0lOUFVUX01BUCA9IHtcbiAgcG9pbnRlcmRvd246IElOUFVUX1NUQVJULFxuICBwb2ludGVybW92ZTogSU5QVVRfTU9WRSxcbiAgcG9pbnRlcnVwOiBJTlBVVF9FTkQsXG4gIHBvaW50ZXJjYW5jZWw6IElOUFVUX0NBTkNFTCxcbiAgcG9pbnRlcm91dDogSU5QVVRfQ0FOQ0VMXG59OyAvLyBpbiBJRTEwIHRoZSBwb2ludGVyIHR5cGVzIGlzIGRlZmluZWQgYXMgYW4gZW51bVxuXG52YXIgSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSA9IHtcbiAgMjogSU5QVVRfVFlQRV9UT1VDSCxcbiAgMzogSU5QVVRfVFlQRV9QRU4sXG4gIDQ6IElOUFVUX1RZUEVfTU9VU0UsXG4gIDU6IElOUFVUX1RZUEVfS0lORUNUIC8vIHNlZSBodHRwczovL3R3aXR0ZXIuY29tL2phY29icm9zc2kvc3RhdHVzLzQ4MDU5NjQzODQ4OTg5MDgxNlxuXG59O1xudmFyIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAncG9pbnRlcmRvd24nO1xudmFyIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdwb2ludGVybW92ZSBwb2ludGVydXAgcG9pbnRlcmNhbmNlbCc7IC8vIElFMTAgaGFzIHByZWZpeGVkIHN1cHBvcnQsIGFuZCBjYXNlLXNlbnNpdGl2ZVxuXG5pZiAod2luLk1TUG9pbnRlckV2ZW50ICYmICF3aW4uUG9pbnRlckV2ZW50KSB7XG4gIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAnTVNQb2ludGVyRG93bic7XG4gIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCc7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBQb2ludGVyIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cblxudmFyIFBvaW50ZXJFdmVudElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUG9pbnRlckV2ZW50SW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2RWwgPSBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5zdG9yZSA9IF90aGlzLm1hbmFnZXIuc2Vzc2lvbi5wb2ludGVyRXZlbnRzID0gW107XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBQb2ludGVyRXZlbnRJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICB2YXIgcmVtb3ZlUG9pbnRlciA9IGZhbHNlO1xuICAgIHZhciBldmVudFR5cGVOb3JtYWxpemVkID0gZXYudHlwZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ21zJywgJycpO1xuICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICB2YXIgcG9pbnRlclR5cGUgPSBJRTEwX1BPSU5URVJfVFlQRV9FTlVNW2V2LnBvaW50ZXJUeXBlXSB8fCBldi5wb2ludGVyVHlwZTtcbiAgICB2YXIgaXNUb3VjaCA9IHBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIOyAvLyBnZXQgaW5kZXggb2YgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG4gICAgdmFyIHN0b3JlSW5kZXggPSBpbkFycmF5KHN0b3JlLCBldi5wb2ludGVySWQsICdwb2ludGVySWQnKTsgLy8gc3RhcnQgYW5kIG1vdXNlIG11c3QgYmUgZG93blxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIChldi5idXR0b24gPT09IDAgfHwgaXNUb3VjaCkpIHtcbiAgICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgICBzdG9yZS5wdXNoKGV2KTtcbiAgICAgICAgc3RvcmVJbmRleCA9IHN0b3JlLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgcmVtb3ZlUG9pbnRlciA9IHRydWU7XG4gICAgfSAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcblxuXG4gICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG5cbiAgICBzdG9yZVtzdG9yZUluZGV4XSA9IGV2O1xuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiBwb2ludGVyVHlwZSxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuXG4gICAgaWYgKHJlbW92ZVBvaW50ZXIpIHtcbiAgICAgIC8vIHJlbW92ZSBmcm9tIHRoZSBzdG9yZVxuICAgICAgc3RvcmUuc3BsaWNlKHN0b3JlSW5kZXgsIDEpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUG9pbnRlckV2ZW50SW5wdXQ7XG59KElucHV0KTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY29udmVydCBhcnJheS1saWtlIG9iamVjdHMgdG8gcmVhbCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaiwgMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHVuaXF1ZSBhcnJheSB3aXRoIG9iamVjdHMgYmFzZWQgb24gYSBrZXkgKGxpa2UgJ2lkJykgb3IganVzdCBieSB0aGUgYXJyYXkncyB2YWx1ZVxuICogQHBhcmFtIHtBcnJheX0gc3JjIFt7aWQ6MX0se2lkOjJ9LHtpZDoxfV1cbiAqIEBwYXJhbSB7U3RyaW5nfSBba2V5XVxuICogQHBhcmFtIHtCb29sZWFufSBbc29ydD1GYWxzZV1cbiAqIEByZXR1cm5zIHtBcnJheX0gW3tpZDoxfSx7aWQ6Mn1dXG4gKi9cblxuZnVuY3Rpb24gdW5pcXVlQXJyYXkoc3JjLCBrZXksIHNvcnQpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgdmFyIHZhbCA9IGtleSA/IHNyY1tpXVtrZXldIDogc3JjW2ldO1xuXG4gICAgaWYgKGluQXJyYXkodmFsdWVzLCB2YWwpIDwgMCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHNyY1tpXSk7XG4gICAgfVxuXG4gICAgdmFsdWVzW2ldID0gdmFsO1xuICAgIGkrKztcbiAgfVxuXG4gIGlmIChzb3J0KSB7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYVtrZXldID4gYltrZXldO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbnZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICB0b3VjaG1vdmU6IElOUFVUX01PVkUsXG4gIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG52YXIgVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNdWx0aS11c2VyIHRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIFRvdWNoSW5wdXQucHJvdG90eXBlLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMudGFyZ2V0SWRzID0ge307IC8vIHRoaXMuZXZUYXJnZXQgPSBUT1VDSF9UQVJHRVRfRVZFTlRTO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRvdWNoSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciB0eXBlID0gVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdO1xuICAgIHZhciB0b3VjaGVzID0gZ2V0VG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTtcblxuICAgIGlmICghdG91Y2hlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoSW5wdXQ7XG59KElucHV0KTtcblxuZnVuY3Rpb24gZ2V0VG91Y2hlcyhldiwgdHlwZSkge1xuICB2YXIgYWxsVG91Y2hlcyA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciB0YXJnZXRJZHMgPSB0aGlzLnRhcmdldElkczsgLy8gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSB0b3VjaCwgdGhlIHByb2Nlc3MgY2FuIGJlIHNpbXBsaWZpZWRcblxuICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgdGFyZ2V0SWRzW2FsbFRvdWNoZXNbMF0uaWRlbnRpZmllcl0gPSB0cnVlO1xuICAgIHJldHVybiBbYWxsVG91Y2hlcywgYWxsVG91Y2hlc107XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIHRhcmdldFRvdWNoZXM7XG4gIHZhciBjaGFuZ2VkVG91Y2hlcyA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpO1xuICB2YXIgY2hhbmdlZFRhcmdldFRvdWNoZXMgPSBbXTtcbiAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0OyAvLyBnZXQgdGFyZ2V0IHRvdWNoZXMgZnJvbSB0b3VjaGVzXG5cbiAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uICh0b3VjaCkge1xuICAgIHJldHVybiBoYXNQYXJlbnQodG91Y2gudGFyZ2V0LCB0YXJnZXQpO1xuICB9KTsgLy8gY29sbGVjdCB0b3VjaGVzXG5cbiAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICBpKys7XG4gICAgfVxuICB9IC8vIGZpbHRlciBjaGFuZ2VkIHRvdWNoZXMgdG8gb25seSBjb250YWluIHRvdWNoZXMgdGhhdCBleGlzdCBpbiB0aGUgY29sbGVjdGVkIHRhcmdldCBpZHNcblxuXG4gIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgY2hhbmdlZFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMucHVzaChjaGFuZ2VkVG91Y2hlc1tpXSk7XG4gICAgfSAvLyBjbGVhbnVwIHJlbW92ZWQgdG91Y2hlc1xuXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIGlmICghY2hhbmdlZFRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIFsvLyBtZXJnZSB0YXJnZXRUb3VjaGVzIHdpdGggY2hhbmdlZFRhcmdldFRvdWNoZXMgc28gaXQgY29udGFpbnMgQUxMIHRvdWNoZXMsIGluY2x1ZGluZyAnZW5kJyBhbmQgJ2NhbmNlbCdcbiAgdW5pcXVlQXJyYXkodGFyZ2V0VG91Y2hlcy5jb25jYXQoY2hhbmdlZFRhcmdldFRvdWNoZXMpLCAnaWRlbnRpZmllcicsIHRydWUpLCBjaGFuZ2VkVGFyZ2V0VG91Y2hlc107XG59XG5cbnZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gIG1vdXNlZG93bjogSU5QVVRfU1RBUlQsXG4gIG1vdXNlbW92ZTogSU5QVVRfTU9WRSxcbiAgbW91c2V1cDogSU5QVVRfRU5EXG59O1xudmFyIE1PVVNFX0VMRU1FTlRfRVZFTlRTID0gJ21vdXNlZG93bic7XG52YXIgTU9VU0VfV0lORE9XX0VWRU5UUyA9ICdtb3VzZW1vdmUgbW91c2V1cCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNb3VzZSBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgTW91c2VJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKE1vdXNlSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gTW91c2VJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldkVsID0gTU9VU0VfRUxFTUVOVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBNT1VTRV9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5wcmVzc2VkID0gZmFsc2U7IC8vIG1vdXNlZG93biBzdGF0ZVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgZXZlbnRUeXBlID0gTU9VU0VfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBvbiBzdGFydCB3ZSB3YW50IHRvIGhhdmUgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGRvd25cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBldi5idXR0b24gPT09IDApIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX01PVkUgJiYgZXYud2hpY2ggIT09IDEpIHtcbiAgICAgIGV2ZW50VHlwZSA9IElOUFVUX0VORDtcbiAgICB9IC8vIG1vdXNlIG11c3QgYmUgZG93blxuXG5cbiAgICBpZiAoIXRoaXMucHJlc3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBbZXZdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTW91c2VJbnB1dDtcbn0oSW5wdXQpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDb21iaW5lZCB0b3VjaCBhbmQgbW91c2UgaW5wdXRcbiAqXG4gKiBUb3VjaCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhlbiBtb3VzZSwgYW5kIHdoaWxlIHRvdWNoaW5nIG5vIG1vdXNlIGV2ZW50cyBhcmUgYWxsb3dlZC5cbiAqIFRoaXMgYmVjYXVzZSB0b3VjaCBkZXZpY2VzIGFsc28gZW1pdCBtb3VzZSBldmVudHMgd2hpbGUgZG9pbmcgYSB0b3VjaC5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIERFRFVQX1RJTUVPVVQgPSAyNTAwO1xudmFyIERFRFVQX0RJU1RBTkNFID0gMjU7XG5cbmZ1bmN0aW9uIHNldExhc3RUb3VjaChldmVudERhdGEpIHtcbiAgdmFyIF9ldmVudERhdGEkY2hhbmdlZFBvaSA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnMsXG4gICAgICB0b3VjaCA9IF9ldmVudERhdGEkY2hhbmdlZFBvaVswXTtcblxuICBpZiAodG91Y2guaWRlbnRpZmllciA9PT0gdGhpcy5wcmltYXJ5VG91Y2gpIHtcbiAgICB2YXIgbGFzdFRvdWNoID0ge1xuICAgICAgeDogdG91Y2guY2xpZW50WCxcbiAgICAgIHk6IHRvdWNoLmNsaWVudFlcbiAgICB9O1xuICAgIHZhciBsdHMgPSB0aGlzLmxhc3RUb3VjaGVzO1xuICAgIHRoaXMubGFzdFRvdWNoZXMucHVzaChsYXN0VG91Y2gpO1xuXG4gICAgdmFyIHJlbW92ZUxhc3RUb3VjaCA9IGZ1bmN0aW9uIHJlbW92ZUxhc3RUb3VjaCgpIHtcbiAgICAgIHZhciBpID0gbHRzLmluZGV4T2YobGFzdFRvdWNoKTtcblxuICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkVG91Y2hlcyhldmVudFR5cGUsIGV2ZW50RGF0YSkge1xuICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICB0aGlzLnByaW1hcnlUb3VjaCA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnNbMF0uaWRlbnRpZmllcjtcbiAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KGV2ZW50RGF0YSkge1xuICB2YXIgeCA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRYO1xuICB2YXIgeSA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRZO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sYXN0VG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0ID0gdGhpcy5sYXN0VG91Y2hlc1tpXTtcbiAgICB2YXIgZHggPSBNYXRoLmFicyh4IC0gdC54KTtcbiAgICB2YXIgZHkgPSBNYXRoLmFicyh5IC0gdC55KTtcblxuICAgIGlmIChkeCA8PSBERURVUF9ESVNUQU5DRSAmJiBkeSA8PSBERURVUF9ESVNUQU5DRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgVG91Y2hNb3VzZUlucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIFRvdWNoTW91c2VJbnB1dCA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9JbnB1dCkge1xuICAgIF9pbmhlcml0c0xvb3NlKFRvdWNoTW91c2VJbnB1dCwgX0lucHV0KTtcblxuICAgIGZ1bmN0aW9uIFRvdWNoTW91c2VJbnB1dChfbWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfSW5wdXQuY2FsbCh0aGlzLCBfbWFuYWdlciwgY2FsbGJhY2spIHx8IHRoaXM7XG5cbiAgICAgIF90aGlzLmhhbmRsZXIgPSBmdW5jdGlvbiAobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKSB7XG4gICAgICAgIHZhciBpc1RvdWNoID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIO1xuICAgICAgICB2YXIgaXNNb3VzZSA9IGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9NT1VTRTtcblxuICAgICAgICBpZiAoaXNNb3VzZSAmJiBpbnB1dERhdGEuc291cmNlQ2FwYWJpbGl0aWVzICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyB3aGVuIHdlJ3JlIGluIGEgdG91Y2ggZXZlbnQsIHJlY29yZCB0b3VjaGVzIHRvICBkZS1kdXBlIHN5bnRoZXRpYyBtb3VzZSBldmVudFxuXG5cbiAgICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgICByZWNvcmRUb3VjaGVzLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RGF0YSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5jYWxsYmFjayhtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMudG91Y2ggPSBuZXcgVG91Y2hJbnB1dChfdGhpcy5tYW5hZ2VyLCBfdGhpcy5oYW5kbGVyKTtcbiAgICAgIF90aGlzLm1vdXNlID0gbmV3IE1vdXNlSW5wdXQoX3RoaXMubWFuYWdlciwgX3RoaXMuaGFuZGxlcik7XG4gICAgICBfdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgICAgX3RoaXMubGFzdFRvdWNoZXMgPSBbXTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBoYW5kbGUgbW91c2UgYW5kIHRvdWNoIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGlucHV0RXZlbnRcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG5cblxuICAgIHZhciBfcHJvdG8gPSBUb3VjaE1vdXNlSW5wdXQucHJvdG90eXBlO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyc1xuICAgICAqL1xuICAgIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHRoaXMudG91Y2guZGVzdHJveSgpO1xuICAgICAgdGhpcy5tb3VzZS5kZXN0cm95KCk7XG4gICAgfTtcblxuICAgIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG4gIH0oSW5wdXQpO1xuXG4gIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBjYWxsZWQgYnkgdGhlIE1hbmFnZXIgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gIHZhciBUeXBlOyAvLyBsZXQgaW5wdXRDbGFzcyA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dENsYXNzO1xuXG4gIHZhciBpbnB1dENsYXNzID0gbWFuYWdlci5vcHRpb25zLmlucHV0Q2xhc3M7XG5cbiAgaWYgKGlucHV0Q2xhc3MpIHtcbiAgICBUeXBlID0gaW5wdXRDbGFzcztcbiAgfSBlbHNlIGlmIChTVVBQT1JUX1BPSU5URVJfRVZFTlRTKSB7XG4gICAgVHlwZSA9IFBvaW50ZXJFdmVudElucHV0O1xuICB9IGVsc2UgaWYgKFNVUFBPUlRfT05MWV9UT1VDSCkge1xuICAgIFR5cGUgPSBUb3VjaElucHV0O1xuICB9IGVsc2UgaWYgKCFTVVBQT1JUX1RPVUNIKSB7XG4gICAgVHlwZSA9IE1vdXNlSW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgVHlwZSA9IFRvdWNoTW91c2VJbnB1dDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZShtYW5hZ2VyLCBpbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZm4gb24gZWFjaCBlbnRyeVxuICogaWYgaXQgYWludCBhbiBhcnJheSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGhpbmcuXG4gKiB0aGlzIGlzIHVzZWQgYnkgYWxsIHRoZSBtZXRob2RzIHRoYXQgYWNjZXB0IGEgc2luZ2xlIGFuZCBhcnJheSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7KnxBcnJheX0gYXJnXG4gKiBAcGFyYW0ge1N0cmluZ30gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF1cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGludm9rZUFycmF5QXJnKGFyZywgZm4sIGNvbnRleHQpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIGVhY2goYXJnLCBjb250ZXh0W2ZuXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBTVEFURV9QT1NTSUJMRSA9IDE7XG52YXIgU1RBVEVfQkVHQU4gPSAyO1xudmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xudmFyIFNUQVRFX0VOREVEID0gODtcbnZhciBTVEFURV9SRUNPR05JWkVEID0gU1RBVEVfRU5ERUQ7XG52YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG52YXIgU1RBVEVfRkFJTEVEID0gMzI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHVuaXF1ZSBpZFxuICogQHJldHVybnMge251bWJlcn0gdW5pcXVlSWRcbiAqL1xudmFyIF91bmlxdWVJZCA9IDE7XG5mdW5jdGlvbiB1bmlxdWVJZCgpIHtcbiAgcmV0dXJuIF91bmlxdWVJZCsrO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSByZWNvZ25pemVyIGJ5IG5hbWUgaWYgaXQgaXMgYm91bmQgdG8gYSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSBvdGhlclJlY29nbml6ZXJcbiAqIEBwYXJhbSB7UmVjb2duaXplcn0gcmVjb2duaXplclxuICogQHJldHVybnMge1JlY29nbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCByZWNvZ25pemVyKSB7XG4gIHZhciBtYW5hZ2VyID0gcmVjb2duaXplci5tYW5hZ2VyO1xuXG4gIGlmIChtYW5hZ2VyKSB7XG4gICAgcmV0dXJuIG1hbmFnZXIuZ2V0KG90aGVyUmVjb2duaXplcik7XG4gIH1cblxuICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSB1c2FibGUgc3RyaW5nLCB1c2VkIGFzIGV2ZW50IHBvc3RmaXhcbiAqIEBwYXJhbSB7Y29uc3RhbnR9IHN0YXRlXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdGF0ZVxuICovXG5cbmZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gIGlmIChzdGF0ZSAmIFNUQVRFX0NBTkNFTExFRCkge1xuICAgIHJldHVybiAnY2FuY2VsJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0VOREVEKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfQ0hBTkdFRCkge1xuICAgIHJldHVybiAnbW92ZSc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9CRUdBTikge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSZWNvZ25pemVyIGZsb3cgZXhwbGFpbmVkOyAqXG4gKiBBbGwgcmVjb2duaXplcnMgaGF2ZSB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBQT1NTSUJMRSB3aGVuIGEgaW5wdXQgc2Vzc2lvbiBzdGFydHMuXG4gKiBUaGUgZGVmaW5pdGlvbiBvZiBhIGlucHV0IHNlc3Npb24gaXMgZnJvbSB0aGUgZmlyc3QgaW5wdXQgdW50aWwgdGhlIGxhc3QgaW5wdXQsIHdpdGggYWxsIGl0J3MgbW92ZW1lbnQgaW4gaXQuICpcbiAqIEV4YW1wbGUgc2Vzc2lvbiBmb3IgbW91c2UtaW5wdXQ6IG1vdXNlZG93biAtPiBtb3VzZW1vdmUgLT4gbW91c2V1cFxuICpcbiAqIE9uIGVhY2ggcmVjb2duaXppbmcgY3ljbGUgKHNlZSBNYW5hZ2VyLnJlY29nbml6ZSkgdGhlIC5yZWNvZ25pemUoKSBtZXRob2QgaXMgZXhlY3V0ZWRcbiAqIHdoaWNoIGRldGVybWluZXMgd2l0aCBzdGF0ZSBpdCBzaG91bGQgYmUuXG4gKlxuICogSWYgdGhlIHJlY29nbml6ZXIgaGFzIHRoZSBzdGF0ZSBGQUlMRUQsIENBTkNFTExFRCBvciBSRUNPR05JWkVEIChlcXVhbHMgRU5ERUQpLCBpdCBpcyByZXNldCB0b1xuICogUE9TU0lCTEUgdG8gZ2l2ZSBpdCBhbm90aGVyIGNoYW5nZSBvbiB0aGUgbmV4dCBjeWNsZS5cbiAqXG4gKiAgICAgICAgICAgICAgIFBvc3NpYmxlXG4gKiAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgKy0tLS0tKy0tLS0tLS0tLS0tLS0tLStcbiAqICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgKy0tLS0tKy0tLS0tKyAgICAgICAgICAgICAgIHxcbiAqICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgIHxcbiAqICAgRmFpbGVkICAgICAgQ2FuY2VsbGVkICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSstLS0tLS0rXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgUmVjb2duaXplZCAgICAgICBCZWdhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kZWQvUmVjb2duaXplZFxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJlY29nbml6ZXJcbiAqIEV2ZXJ5IHJlY29nbml6ZXIgbmVlZHMgdG8gZXh0ZW5kIGZyb20gdGhpcyBjbGFzcy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuXG52YXIgUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7XG4gICAgICBlbmFibGU6IHRydWVcbiAgICB9LCBvcHRpb25zKTtcbiAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsOyAvLyBkZWZhdWx0IGlzIGVuYWJsZSB0cnVlXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG4gICAgdGhpcy5zaW11bHRhbmVvdXMgPSB7fTtcbiAgICB0aGlzLnJlcXVpcmVGYWlsID0gW107XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge1JlY29nbml6ZXJ9XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQob3B0aW9ucykge1xuICAgIGFzc2lnbiQxKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7IC8vIGFsc28gdXBkYXRlIHRoZSB0b3VjaEFjdGlvbiwgaW4gY2FzZSBzb21ldGhpbmcgY2hhbmdlZCBhYm91dCB0aGUgZGlyZWN0aW9ucy9lbmFibGVkIHN0YXRlXG5cbiAgICB0aGlzLm1hbmFnZXIgJiYgdGhpcy5tYW5hZ2VyLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiByZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzaW11bHRhbmVvdXMgPSB0aGlzLnNpbXVsdGFuZW91cztcbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG5cbiAgICBpZiAoIXNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdKSB7XG4gICAgICBzaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXSA9IG90aGVyUmVjb2duaXplcjtcbiAgICAgIG90aGVyUmVjb2duaXplci5yZWNvZ25pemVXaXRoKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgc2ltdWx0YW5lb3VzIGxpbmsuIGl0IGRvZXNudCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRyb3BSZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gZHJvcFJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICBkZWxldGUgdGhpcy5zaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlY29nbml6ZXIgY2FuIG9ubHkgcnVuIHdoZW4gYW4gb3RoZXIgaXMgZmFpbGluZ1xuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5yZXF1aXJlRmFpbHVyZSA9IGZ1bmN0aW9uIHJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcblxuICAgIGlmIChpbkFycmF5KHJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpID09PSAtMSkge1xuICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgb3RoZXJSZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgcmVxdWlyZUZhaWx1cmUgbGluay4gaXQgZG9lcyBub3QgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5kcm9wUmVxdWlyZUZhaWx1cmUgPSBmdW5jdGlvbiBkcm9wUmVxdWlyZUZhaWx1cmUob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgdmFyIGluZGV4ID0gaW5BcnJheSh0aGlzLnJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhcyByZXF1aXJlIGZhaWx1cmVzIGJvb2xlYW5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmhhc1JlcXVpcmVGYWlsdXJlcyA9IGZ1bmN0aW9uIGhhc1JlcXVpcmVGYWlsdXJlcygpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGggPiAwO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaWYgdGhlIHJlY29nbml6ZXIgY2FuIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5SZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gY2FuUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gISF0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogWW91IHNob3VsZCB1c2UgYHRyeUVtaXRgIGluc3RlYWQgb2YgYGVtaXRgIGRpcmVjdGx5IHRvIGNoZWNrXG4gICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgc2VsZi5tYW5hZ2VyLmVtaXQoZXZlbnQsIGlucHV0KTtcbiAgICB9IC8vICdwYW5zdGFydCcgYW5kICdwYW5tb3ZlJ1xuXG5cbiAgICBpZiAoc3RhdGUgPCBTVEFURV9FTkRFRCkge1xuICAgICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQgKyBzdGF0ZVN0cihzdGF0ZSkpO1xuICAgIH1cblxuICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgaWYgKGlucHV0LmFkZGl0aW9uYWxFdmVudCkge1xuICAgICAgLy8gYWRkaXRpb25hbCBldmVudChwYW5sZWZ0LCBwYW5yaWdodCwgcGluY2hpbiwgcGluY2hvdXQuLi4pXG4gICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgfSAvLyBwYW5lbmQgYW5kIHBhbmNhbmNlbFxuXG5cbiAgICBpZiAoc3RhdGUgPj0gU1RBVEVfRU5ERUQpIHtcbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgcmVxdWlyZSBmYWlsdXJlIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQsXG4gICAqIGlmIHRydWUsIGl0IGVtaXRzIGEgZ2VzdHVyZSBldmVudCxcbiAgICogb3RoZXJ3aXNlLCBzZXR1cCB0aGUgc3RhdGUgdG8gRkFJTEVELlxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8udHJ5RW1pdCA9IGZ1bmN0aW9uIHRyeUVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5jYW5FbWl0KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgIH0gLy8gaXQncyBmYWlsaW5nIGFueXdheVxuXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FuIHdlIGVtaXQ/XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5FbWl0ID0gZnVuY3Rpb24gY2FuRW1pdCgpIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoKSB7XG4gICAgICBpZiAoISh0aGlzLnJlcXVpcmVGYWlsW2ldLnN0YXRlICYgKFNUQVRFX0ZBSUxFRCB8IFNUQVRFX1BPU1NJQkxFKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemUgPSBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgLy8gbWFrZSBhIG5ldyBjb3B5IG9mIHRoZSBpbnB1dERhdGFcbiAgICAvLyBzbyB3ZSBjYW4gY2hhbmdlIHRoZSBpbnB1dERhdGEgd2l0aG91dCBtZXNzaW5nIHVwIHRoZSBvdGhlciByZWNvZ25pemVyc1xuICAgIHZhciBpbnB1dERhdGFDbG9uZSA9IGFzc2lnbiQxKHt9LCBpbnB1dERhdGEpOyAvLyBpcyBpcyBlbmFibGVkIGFuZCBhbGxvdyByZWNvZ25pemluZz9cblxuICAgIGlmICghYm9vbE9yRm4odGhpcy5vcHRpb25zLmVuYWJsZSwgW3RoaXMsIGlucHV0RGF0YUNsb25lXSkpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyByZXNldCB3aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZFxuXG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9SRUNPR05JWkVEIHwgU1RBVEVfQ0FOQ0VMTEVEIHwgU1RBVEVfRkFJTEVEKSkge1xuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnByb2Nlc3MoaW5wdXREYXRhQ2xvbmUpOyAvLyB0aGUgcmVjb2duaXplciBoYXMgcmVjb2duaXplZCBhIGdlc3R1cmVcbiAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCB8IFNUQVRFX0NBTkNFTExFRCkpIHtcbiAgICAgIHRoaXMudHJ5RW1pdChpbnB1dERhdGFDbG9uZSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgcmVjb2duaXplclxuICAgKiB0aGUgYWN0dWFsIHJlY29nbml6aW5nIGhhcHBlbnMgaW4gdGhpcyBtZXRob2RcbiAgICogQHZpcnR1YWxcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKiBAcmV0dXJucyB7Y29uc3RhbnR9IFNUQVRFXG4gICAqL1xuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cblxuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dERhdGEpIHt9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZXR1cm4gdGhlIHByZWZlcnJlZCB0b3VjaC1hY3Rpb25cbiAgICogQHZpcnR1YWxcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cblxuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYWxsZWQgd2hlbiB0aGUgZ2VzdHVyZSBpc24ndCBhbGxvd2VkIHRvIHJlY29nbml6ZVxuICAgKiBsaWtlIHdoZW4gYW5vdGhlciBpcyBiZWluZyByZWNvZ25pemVkIG9yIGl0IGlzIGRpc2FibGVkXG4gICAqIEB2aXJ0dWFsXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7fTtcblxuICByZXR1cm4gUmVjb2duaXplcjtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQSB0YXAgaXMgcmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvaW5nIGEgc21hbGwgdGFwL2NsaWNrLiBNdWx0aXBsZSB0YXBzIGFyZSByZWNvZ25pemVkIGlmIHRoZXkgb2NjdXJcbiAqIGJldHdlZW4gdGhlIGdpdmVuIGludGVydmFsIGFuZCBwb3NpdGlvbi4gVGhlIGRlbGF5IG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvZ25pemUgbXVsdGktdGFwcyB3aXRob3V0IGZpcmluZ1xuICogYSBzaW5nbGUgdGFwLlxuICpcbiAqIFRoZSBldmVudERhdGEgZnJvbSB0aGUgZW1pdHRlZCBldmVudCBjb250YWlucyB0aGUgcHJvcGVydHkgYHRhcENvdW50YCwgd2hpY2ggY29udGFpbnMgdGhlIGFtb3VudCBvZlxuICogbXVsdGktdGFwcyBiZWluZyByZWNvZ25pemVkLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFRhcFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFRhcFJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBUYXBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAndGFwJyxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgdGFwczogMSxcbiAgICAgIGludGVydmFsOiAzMDAsXG4gICAgICAvLyBtYXggdGltZSBiZXR3ZWVuIHRoZSBtdWx0aS10YXAgdGFwc1xuICAgICAgdGltZTogMjUwLFxuICAgICAgLy8gbWF4IHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgZG93biAobGlrZSBmaW5nZXIgb24gdGhlIHNjcmVlbilcbiAgICAgIHRocmVzaG9sZDogOSxcbiAgICAgIC8vIGEgbWluaW1hbCBtb3ZlbWVudCBpcyBvaywgYnV0IGtlZXAgaXQgbG93XG4gICAgICBwb3NUaHJlc2hvbGQ6IDEwXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7IC8vIHByZXZpb3VzIHRpbWUgYW5kIGNlbnRlcixcbiAgICAvLyB1c2VkIGZvciB0YXAgY291bnRpbmdcblxuICAgIF90aGlzLnBUaW1lID0gZmFsc2U7XG4gICAgX3RoaXMucENlbnRlciA9IGZhbHNlO1xuICAgIF90aGlzLl90aW1lciA9IG51bGw7XG4gICAgX3RoaXMuX2lucHV0ID0gbnVsbDtcbiAgICBfdGhpcy5jb3VudCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRhcFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTl07XG4gIH07XG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgdmFyIHZhbGlkVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgb3B0aW9ucy50aW1lO1xuICAgIHRoaXMucmVzZXQoKTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiB0aGlzLmNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgIH0gLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cblxuICAgIGlmICh2YWxpZE1vdmVtZW50ICYmIHZhbGlkVG91Y2hUaW1lICYmIHZhbGlkUG9pbnRlcnMpIHtcbiAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT09IElOUFVUX0VORCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmFsaWRJbnRlcnZhbCA9IHRoaXMucFRpbWUgPyBpbnB1dC50aW1lU3RhbXAgLSB0aGlzLnBUaW1lIDwgb3B0aW9ucy5pbnRlcnZhbCA6IHRydWU7XG4gICAgICB2YXIgdmFsaWRNdWx0aVRhcCA9ICF0aGlzLnBDZW50ZXIgfHwgZ2V0RGlzdGFuY2UodGhpcy5wQ2VudGVyLCBpbnB1dC5jZW50ZXIpIDwgb3B0aW9ucy5wb3NUaHJlc2hvbGQ7XG4gICAgICB0aGlzLnBUaW1lID0gaW5wdXQudGltZVN0YW1wO1xuICAgICAgdGhpcy5wQ2VudGVyID0gaW5wdXQuY2VudGVyO1xuXG4gICAgICBpZiAoIXZhbGlkTXVsdGlUYXAgfHwgIXZhbGlkSW50ZXJ2YWwpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIGlmIHRhcCBjb3VudCBtYXRjaGVzIHdlIGhhdmUgcmVjb2duaXplZCBpdCxcbiAgICAgIC8vIGVsc2UgaXQgaGFzIGJlZ2FuIHJlY29nbml6aW5nLi4uXG5cbiAgICAgIHZhciB0YXBDb3VudCA9IHRoaXMuY291bnQgJSBvcHRpb25zLnRhcHM7XG5cbiAgICAgIGlmICh0YXBDb3VudCA9PT0gMCkge1xuICAgICAgICAvLyBubyBmYWlsaW5nIHJlcXVpcmVtZW50cywgaW1tZWRpYXRlbHkgdHJpZ2dlciB0aGUgdGFwIGV2ZW50XG4gICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZUZhaWx1cmVzKCkpIHtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcblxuICAgICAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgICAgICB9LCBvcHRpb25zLmludGVydmFsKTtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5mYWlsVGltZW91dCA9IGZ1bmN0aW9uIGZhaWxUaW1lb3V0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LCB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHRoaXMuX2lucHV0LnRhcENvdW50ID0gdGhpcy5jb3VudDtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gVGFwUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFRoaXMgcmVjb2duaXplciBpcyBqdXN0IHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgc2ltcGxlIGF0dHJpYnV0ZSByZWNvZ25pemVycy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBBdHRyUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoQXR0clJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBBdHRyUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFVzZWQgdG8gY2hlY2sgaWYgaXQgdGhlIHJlY29nbml6ZXIgcmVjZWl2ZXMgdmFsaWQgaW5wdXQsIGxpa2UgaW5wdXQuZGlzdGFuY2UgPiAxMC5cbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gcmVjb2duaXplZFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBBdHRyUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICB2YXIgb3B0aW9uUG9pbnRlcnMgPSB0aGlzLm9wdGlvbnMucG9pbnRlcnM7XG4gICAgcmV0dXJuIG9wdGlvblBvaW50ZXJzID09PSAwIHx8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9uUG9pbnRlcnM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICovXG5cblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIHZhciBldmVudFR5cGUgPSBpbnB1dC5ldmVudFR5cGU7XG4gICAgdmFyIGlzUmVjb2duaXplZCA9IHN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCk7XG4gICAgdmFyIGlzVmFsaWQgPSB0aGlzLmF0dHJUZXN0KGlucHV0KTsgLy8gb24gY2FuY2VsIGlucHV0IGFuZCB3ZSd2ZSByZWNvZ25pemVkIGJlZm9yZSwgcmV0dXJuIFNUQVRFX0NBTkNFTExFRFxuXG4gICAgaWYgKGlzUmVjb2duaXplZCAmJiAoZXZlbnRUeXBlICYgSU5QVVRfQ0FOQ0VMIHx8ICFpc1ZhbGlkKSkge1xuICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0FOQ0VMTEVEO1xuICAgIH0gZWxzZSBpZiAoaXNSZWNvZ25pemVkIHx8IGlzVmFsaWQpIHtcbiAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfRU5ERUQ7XG4gICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgcmV0dXJuIFNUQVRFX0JFR0FOO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgcmV0dXJuIEF0dHJSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZGlyZWN0aW9uIGNvbnMgdG8gc3RyaW5nXG4gKiBAcGFyYW0ge2NvbnN0YW50fSBkaXJlY3Rpb25cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZGlyZWN0aW9uU3RyKGRpcmVjdGlvbikge1xuICBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fRE9XTikge1xuICAgIHJldHVybiAnZG93bic7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fVVApIHtcbiAgICByZXR1cm4gJ3VwJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgcmV0dXJuICdsZWZ0JztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9SSUdIVCkge1xuICAgIHJldHVybiAncmlnaHQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQYW5cbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGFuZCBtb3ZlZCBpbiB0aGUgYWxsb3dlZCBkaXJlY3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFBhblJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQYW5SZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFBhblJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGFuJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0FMTFxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICAgIF90aGlzLnBYID0gbnVsbDtcbiAgICBfdGhpcy5wWSA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFBhblJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciBhY3Rpb25zID0gW107XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1kpO1xuICAgIH1cblxuICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9O1xuXG4gIF9wcm90by5kaXJlY3Rpb25UZXN0ID0gZnVuY3Rpb24gZGlyZWN0aW9uVGVzdChpbnB1dCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBoYXNNb3ZlZCA9IHRydWU7XG4gICAgdmFyIGRpc3RhbmNlID0gaW5wdXQuZGlzdGFuY2U7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0LmRpcmVjdGlvbjtcbiAgICB2YXIgeCA9IGlucHV0LmRlbHRhWDtcbiAgICB2YXIgeSA9IGlucHV0LmRlbHRhWTsgLy8gbG9jayB0byBheGlzP1xuXG4gICAgaWYgKCEoZGlyZWN0aW9uICYgb3B0aW9ucy5kaXJlY3Rpb24pKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICBkaXJlY3Rpb24gPSB4ID09PSAwID8gRElSRUNUSU9OX05PTkUgOiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgICAgICBoYXNNb3ZlZCA9IHggIT09IHRoaXMucFg7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFYKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IHkgPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG4gICAgICAgIGhhc01vdmVkID0geSAhPT0gdGhpcy5wWTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gaGFzTW92ZWQgJiYgZGlzdGFuY2UgPiBvcHRpb25zLnRocmVzaG9sZCAmJiBkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBBdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKCAvLyByZXBsYWNlIHdpdGggYSBzdXBlciBjYWxsXG4gICAgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOIHx8ICEodGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKSAmJiB0aGlzLmRpcmVjdGlvblRlc3QoaW5wdXQpKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB0aGlzLnBYID0gaW5wdXQuZGVsdGFYO1xuICAgIHRoaXMucFkgPSBpbnB1dC5kZWx0YVk7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5kaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gUGFuUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTd2lwZVxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIG1vdmluZyBmYXN0ICh2ZWxvY2l0eSksIHdpdGggZW5vdWdoIGRpc3RhbmNlIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgU3dpcGVSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoU3dpcGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFN3aXBlUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICB2ZWxvY2l0eTogMC4zLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3dpcGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciB2ZWxvY2l0eTtcblxuICAgIGlmIChkaXJlY3Rpb24gJiAoRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5WTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiBkaXJlY3Rpb24gJiBpbnB1dC5vZmZzZXREaXJlY3Rpb24gJiYgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmIGlucHV0Lm1heFBvaW50ZXJzID09PSB0aGlzLm9wdGlvbnMucG9pbnRlcnMgJiYgYWJzKHZlbG9jaXR5KSA+IHRoaXMub3B0aW9ucy52ZWxvY2l0eSAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQ7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5vZmZzZXREaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uLCBpbnB1dCk7XG4gICAgfVxuXG4gICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFN3aXBlUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQaW5jaFxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXJzIGFyZSBtb3ZpbmcgdG93YXJkICh6b29tLWluKSBvciBhd2F5IGZyb20gZWFjaCBvdGhlciAoem9vbS1vdXQpLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBQaW5jaFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQaW5jaFJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUGluY2hSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGluY2gnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQaW5jaFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnNjYWxlIC0gMSkgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnNjYWxlICE9PSAxKSB7XG4gICAgICB2YXIgaW5PdXQgPSBpbnB1dC5zY2FsZSA8IDEgPyAnaW4nIDogJ291dCc7XG4gICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICB9XG5cbiAgICBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmVtaXQuY2FsbCh0aGlzLCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFBpbmNoUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSb3RhdGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVyIGFyZSBtb3ZpbmcgaW4gYSBjaXJjdWxhciBtb3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFJvdGF0ZVJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShSb3RhdGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFJvdGF0ZVJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdyb3RhdGUnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSb3RhdGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIChNYXRoLmFicyhpbnB1dC5yb3RhdGlvbikgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgcmV0dXJuIFJvdGF0ZVJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUHJlc3NcbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGZvciB4IG1zIHdpdGhvdXQgYW55IG1vdmVtZW50LlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFByZXNzUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUHJlc3NSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUHJlc3NSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncHJlc3MnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0aW1lOiAyNTEsXG4gICAgICAvLyBtaW5pbWFsIHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgcHJlc3NlZFxuICAgICAgdGhyZXNob2xkOiA5XG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gICAgX3RoaXMuX3RpbWVyID0gbnVsbDtcbiAgICBfdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQcmVzc1JlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX0FVVE9dO1xuICB9O1xuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgIHZhciB2YWxpZFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPiBvcHRpb25zLnRpbWU7XG4gICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cbiAgICBpZiAoIXZhbGlkTW92ZW1lbnQgfHwgIXZhbGlkUG9pbnRlcnMgfHwgaW5wdXQuZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgIXZhbGlkVGltZSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG5cbiAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgIH0sIG9wdGlvbnMudGltZSk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpbnB1dCAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIFwidXBcIiwgaW5wdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUHJlc3NSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IGlmIERPTSBldmVudHMgYXJlIGJlaW5nIHRyaWdnZXJlZC5cbiAgICogQnV0IHRoaXMgaXMgc2xvd2VyIGFuZCB1bnVzZWQgYnkgc2ltcGxlIGltcGxlbWVudGF0aW9ucywgc28gZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkb21FdmVudHM6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eS9mYWxsYmFjay5cbiAgICogV2hlbiBzZXQgdG8gYGNvbXB1dGVgIGl0IHdpbGwgbWFnaWNhbGx5IHNldCB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgYWRkZWQgcmVjb2duaXplcnMuXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqIEBkZWZhdWx0IGNvbXB1dGVcbiAgICovXG4gIHRvdWNoQWN0aW9uOiBUT1VDSF9BQ1RJT05fQ09NUFVURSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGVuYWJsZTogdHJ1ZSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogRVhQRVJJTUVOVEFMIEZFQVRVUkUgLS0gY2FuIGJlIHJlbW92ZWQvY2hhbmdlZFxuICAgKiBDaGFuZ2UgdGhlIHBhcmVudCBpbnB1dCB0YXJnZXQgZWxlbWVudC5cbiAgICogSWYgTnVsbCwgdGhlbiBpdCBpcyBiZWluZyBzZXQgdGhlIHRvIG1haW4gZWxlbWVudC5cbiAgICogQHR5cGUge051bGx8RXZlbnRUYXJnZXR9XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGlucHV0VGFyZ2V0OiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBmb3JjZSBhbiBpbnB1dCBjbGFzc1xuICAgKiBAdHlwZSB7TnVsbHxGdW5jdGlvbn1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5wdXRDbGFzczogbnVsbCxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogU29tZSBDU1MgcHJvcGVydGllcyBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB3b3JraW5nIG9mIEhhbW1lci5cbiAgICogQWRkIHRoZW0gdG8gdGhpcyBtZXRob2QgYW5kIHRoZXkgd2lsbCBiZSBzZXQgd2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyLlxuICAgKiBAbmFtZXNwYWNlXG4gICAqL1xuICBjc3NQcm9wczoge1xuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZXMgdGV4dCBzZWxlY3Rpb24gdG8gaW1wcm92ZSB0aGUgZHJhZ2dpbmcgZ2VzdHVyZS4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlclNlbGVjdDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGUgdGhlIFdpbmRvd3MgUGhvbmUgZ3JpcHBlcnMgd2hlbiBwcmVzc2luZyBhbiBlbGVtZW50LlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdG91Y2hTZWxlY3Q6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlcyB0aGUgZGVmYXVsdCBjYWxsb3V0IHNob3duIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0LlxuICAgICAqIE9uIGlPUywgd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQgc3VjaCBhcyBhIGxpbmssIFNhZmFyaSBkaXNwbGF5c1xuICAgICAqIGEgY2FsbG91dCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rLiBUaGlzIHByb3BlcnR5IGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGF0IGNhbGxvdXQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB0b3VjaENhbGxvdXQ6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB6b29taW5nIGlzIGVuYWJsZWQuIFVzZWQgYnkgSUUxMD5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIGNvbnRlbnRab29taW5nOiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlckRyYWc6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBPdmVycmlkZXMgdGhlIGhpZ2hsaWdodCBjb2xvciBzaG93biB3aGVuIHRoZSB1c2VyIHRhcHMgYSBsaW5rIG9yIGEgSmF2YVNjcmlwdFxuICAgICAqIGNsaWNrYWJsZSBlbGVtZW50IGluIGlPUy4gVGhpcyBwcm9wZXJ0eSBvYmV5cyB0aGUgYWxwaGEgdmFsdWUsIGlmIHNwZWNpZmllZC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdyZ2JhKDAsMCwwLDApJ1xuICAgICAqL1xuICAgIHRhcEhpZ2hsaWdodENvbG9yOiBcInJnYmEoMCwwLDAsMClcIlxuICB9XG59O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogRGVmYXVsdCByZWNvZ25pemVyIHNldHVwIHdoZW4gY2FsbGluZyBgSGFtbWVyKClgXG4gKiBXaGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIgdGhlc2Ugd2lsbCBiZSBza2lwcGVkLlxuICogVGhpcyBpcyBzZXBhcmF0ZWQgd2l0aCBvdGhlciBkZWZhdWx0cyBiZWNhdXNlIG9mIHRyZWUtc2hha2luZy5cbiAqIEB0eXBlIHtBcnJheX1cbiAqL1xuXG52YXIgcHJlc2V0ID0gW1tSb3RhdGVSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn1dLCBbUGluY2hSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn0sIFsncm90YXRlJ11dLCBbU3dpcGVSZWNvZ25pemVyLCB7XG4gIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUxcbn1dLCBbUGFuUmVjb2duaXplciwge1xuICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG59LCBbJ3N3aXBlJ11dLCBbVGFwUmVjb2duaXplcl0sIFtUYXBSZWNvZ25pemVyLCB7XG4gIGV2ZW50OiAnZG91YmxldGFwJyxcbiAgdGFwczogMlxufSwgWyd0YXAnXV0sIFtQcmVzc1JlY29nbml6ZXJdXTtcblxudmFyIFNUT1AgPSAxO1xudmFyIEZPUkNFRF9TVE9QID0gMjtcbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZC9yZW1vdmUgdGhlIGNzcyBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gbWFuYWdlci5vcHRpb25zLmNzc1Byb3BzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYWRkXG4gKi9cblxuZnVuY3Rpb24gdG9nZ2xlQ3NzUHJvcHMobWFuYWdlciwgYWRkKSB7XG4gIHZhciBlbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuXG4gIGlmICghZWxlbWVudC5zdHlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwcm9wO1xuICBlYWNoKG1hbmFnZXIub3B0aW9ucy5jc3NQcm9wcywgZnVuY3Rpb24gKHZhbHVlLCBuYW1lKSB7XG4gICAgcHJvcCA9IHByZWZpeGVkKGVsZW1lbnQuc3R5bGUsIG5hbWUpO1xuXG4gICAgaWYgKGFkZCkge1xuICAgICAgbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSA9IGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSBtYW5hZ2VyLm9sZENzc1Byb3BzW3Byb3BdIHx8IFwiXCI7XG4gICAgfVxuICB9KTtcblxuICBpZiAoIWFkZCkge1xuICAgIG1hbmFnZXIub2xkQ3NzUHJvcHMgPSB7fTtcbiAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdHJpZ2dlciBkb20gZXZlbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqL1xuXG5cbmZ1bmN0aW9uIHRyaWdnZXJEb21FdmVudChldmVudCwgZGF0YSkge1xuICB2YXIgZ2VzdHVyZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgZ2VzdHVyZUV2ZW50LmluaXRFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gIGdlc3R1cmVFdmVudC5nZXN0dXJlID0gZGF0YTtcbiAgZGF0YS50YXJnZXQuZGlzcGF0Y2hFdmVudChnZXN0dXJlRXZlbnQpO1xufVxuLyoqXG4qIEBwcml2YXRlXG4gKiBNYW5hZ2VyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG5cbnZhciBNYW5hZ2VyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMub3B0aW9ucyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMucmVjb2duaXplcnMgPSBbXTtcbiAgICB0aGlzLm9sZENzc1Byb3BzID0ge307XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmlucHV0ID0gY3JlYXRlSW5wdXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnRvdWNoQWN0aW9uID0gbmV3IFRvdWNoQWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG4gICAgZWFjaCh0aGlzLm9wdGlvbnMucmVjb2duaXplcnMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgcmVjb2duaXplciA9IF90aGlzLmFkZChuZXcgaXRlbVswXShpdGVtWzFdKSk7XG5cbiAgICAgIGl0ZW1bMl0gJiYgcmVjb2duaXplci5yZWNvZ25pemVXaXRoKGl0ZW1bMl0pO1xuICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7TWFuYWdlcn1cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgYXNzaWduJDEodGhpcy5vcHRpb25zLCBvcHRpb25zKTsgLy8gT3B0aW9ucyB0aGF0IG5lZWQgYSBsaXR0bGUgbW9yZSBzZXR1cFxuXG4gICAgaWYgKG9wdGlvbnMudG91Y2hBY3Rpb24pIHtcbiAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaW5wdXRUYXJnZXQpIHtcbiAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaW5wdXQudGFyZ2V0ID0gb3B0aW9ucy5pbnB1dFRhcmdldDtcbiAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc3RvcCByZWNvZ25pemluZyBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBUaGlzIHNlc3Npb24gd2lsbCBiZSBkaXNjYXJkZWQsIHdoZW4gYSBuZXcgW2lucHV0XXN0YXJ0IGV2ZW50IGlzIGZpcmVkLlxuICAgKiBXaGVuIGZvcmNlZCwgdGhlIHJlY29nbml6ZXIgY3ljbGUgaXMgc3RvcHBlZCBpbW1lZGlhdGVseS5cbiAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VdXG4gICAqL1xuXG5cbiAgX3Byb3RvLnN0b3AgPSBmdW5jdGlvbiBzdG9wKGZvcmNlKSB7XG4gICAgdGhpcy5zZXNzaW9uLnN0b3BwZWQgPSBmb3JjZSA/IEZPUkNFRF9TVE9QIDogU1RPUDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJ1biB0aGUgcmVjb2duaXplcnMhXG4gICAqIGNhbGxlZCBieSB0aGUgaW5wdXRIYW5kbGVyIGZ1bmN0aW9uIG9uIGV2ZXJ5IG1vdmVtZW50IG9mIHRoZSBwb2ludGVycyAodG91Y2hlcylcbiAgICogaXQgd2Fsa3MgdGhyb3VnaCBhbGwgdGhlIHJlY29nbml6ZXJzIGFuZCB0cmllcyB0byBkZXRlY3QgdGhlIGdlc3R1cmUgdGhhdCBpcyBiZWluZyBtYWRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xuXG4gICAgaWYgKHNlc3Npb24uc3RvcHBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gcnVuIHRoZSB0b3VjaC1hY3Rpb24gcG9seWZpbGxcblxuXG4gICAgdGhpcy50b3VjaEFjdGlvbi5wcmV2ZW50RGVmYXVsdHMoaW5wdXREYXRhKTtcbiAgICB2YXIgcmVjb2duaXplcjtcbiAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzOyAvLyB0aGlzIGhvbGRzIHRoZSByZWNvZ25pemVyIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAvLyBzbyB0aGUgcmVjb2duaXplcidzIHN0YXRlIG5lZWRzIHRvIGJlIEJFR0FOLCBDSEFOR0VELCBFTkRFRCBvciBSRUNPR05JWkVEXG4gICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuXG4gICAgdmFyIGN1clJlY29nbml6ZXIgPSBzZXNzaW9uLmN1clJlY29nbml6ZXI7IC8vIHJlc2V0IHdoZW4gdGhlIGxhc3QgcmVjb2duaXplciBpcyByZWNvZ25pemVkXG4gICAgLy8gb3Igd2hlbiB3ZSdyZSBpbiBhIG5ldyBzZXNzaW9uXG5cbiAgICBpZiAoIWN1clJlY29nbml6ZXIgfHwgY3VyUmVjb2duaXplciAmJiBjdXJSZWNvZ25pemVyLnN0YXRlICYgU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICAgIGN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgcmVjb2duaXplcnMubGVuZ3RoKSB7XG4gICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07IC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgIC8vIDEuICAgYWxsb3cgaWYgdGhlIHNlc3Npb24gaXMgTk9UIGZvcmNlZCBzdG9wcGVkIChzZWUgdGhlIC5zdG9wKCkgbWV0aG9kKVxuICAgICAgLy8gMi4gICBhbGxvdyBpZiB3ZSBzdGlsbCBoYXZlbid0IHJlY29nbml6ZWQgYSBnZXN0dXJlIGluIHRoaXMgc2Vzc2lvbiwgb3IgdGhlIHRoaXMgcmVjb2duaXplciBpcyB0aGUgb25lXG4gICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgIC8vIDMuICAgYWxsb3cgaWYgdGhlIHJlY29nbml6ZXIgaXMgYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzIHdpdGggdGhlIGN1cnJlbnQgcmVjb2duaXplZCByZWNvZ25pemVyLlxuICAgICAgLy8gICAgICB0aGlzIGNhbiBiZSBzZXR1cCB3aXRoIHRoZSBgcmVjb2duaXplV2l0aCgpYCBtZXRob2Qgb24gdGhlIHJlY29nbml6ZXIuXG5cbiAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQgIT09IEZPUkNFRF9TVE9QICYmICggLy8gMVxuICAgICAgIWN1clJlY29nbml6ZXIgfHwgcmVjb2duaXplciA9PT0gY3VyUmVjb2duaXplciB8fCAvLyAyXG4gICAgICByZWNvZ25pemVyLmNhblJlY29nbml6ZVdpdGgoY3VyUmVjb2duaXplcikpKSB7XG4gICAgICAgIC8vIDNcbiAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemUoaW5wdXREYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29nbml6ZXIucmVzZXQoKTtcbiAgICAgIH0gLy8gaWYgdGhlIHJlY29nbml6ZXIgaGFzIGJlZW4gcmVjb2duaXppbmcgdGhlIGlucHV0IGFzIGEgdmFsaWQgZ2VzdHVyZSwgd2Ugd2FudCB0byBzdG9yZSB0aGlzIG9uZSBhcyB0aGVcbiAgICAgIC8vIGN1cnJlbnQgYWN0aXZlIHJlY29nbml6ZXIuIGJ1dCBvbmx5IGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBhY3RpdmUgcmVjb2duaXplclxuXG5cbiAgICAgIGlmICghY3VyUmVjb2duaXplciAmJiByZWNvZ25pemVyLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEKSkge1xuICAgICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSByZWNvZ25pemVyO1xuICAgICAgICBjdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGdldCBhIHJlY29nbml6ZXIgYnkgaXRzIGV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TnVsbH1cbiAgICovXG5cblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHJlY29nbml6ZXIpIHtcbiAgICBpZiAocmVjb2duaXplciBpbnN0YW5jZW9mIFJlY29nbml6ZXIpIHtcbiAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgIH1cblxuICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVjb2duaXplcnNbaV0ub3B0aW9ucy5ldmVudCA9PT0gcmVjb2duaXplcikge1xuICAgICAgICByZXR1cm4gcmVjb2duaXplcnNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSBhZGQgYSByZWNvZ25pemVyIHRvIHRoZSBtYW5hZ2VyXG4gICAqIGV4aXN0aW5nIHJlY29nbml6ZXJzIHdpdGggdGhlIHNhbWUgZXZlbnQgbmFtZSB3aWxsIGJlIHJlbW92ZWRcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE1hbmFnZXJ9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChyZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsIFwiYWRkXCIsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IC8vIHJlbW92ZSBleGlzdGluZ1xuXG5cbiAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aGlzLnJlbW92ZShleGlzdGluZyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWNvZ25pemVycy5wdXNoKHJlY29nbml6ZXIpO1xuICAgIHJlY29nbml6ZXIubWFuYWdlciA9IHRoaXM7XG4gICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlbW92ZSBhIHJlY29nbml6ZXIgYnkgbmFtZSBvciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgKi9cblxuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhyZWNvZ25pemVyLCBcInJlbW92ZVwiLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFJlY29nbml6ZXIgPSB0aGlzLmdldChyZWNvZ25pemVyKTsgLy8gbGV0J3MgbWFrZSBzdXJlIHRoaXMgcmVjb2duaXplciBleGlzdHNcblxuICAgIGlmIChyZWNvZ25pemVyKSB7XG4gICAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuICAgICAgdmFyIGluZGV4ID0gaW5BcnJheShyZWNvZ25pemVycywgdGFyZ2V0UmVjb2duaXplcik7XG5cbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGJpbmQgZXZlbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub24gPSBmdW5jdGlvbiBvbihldmVudHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQgfHwgaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBoYW5kbGVyc1tldmVudF0gPSBoYW5kbGVyc1tldmVudF0gfHwgW107XG4gICAgICBoYW5kbGVyc1tldmVudF0ucHVzaChoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIHVuYmluZCBldmVudCwgbGVhdmUgZW1pdCBibGFuayB0byByZW1vdmUgYWxsIGhhbmRsZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2hhbmRsZXJdXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub2ZmID0gZnVuY3Rpb24gb2ZmKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVyc1tldmVudF0gJiYgaGFuZGxlcnNbZXZlbnRdLnNwbGljZShpbkFycmF5KGhhbmRsZXJzW2V2ZW50XSwgaGFuZGxlciksIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgZGF0YSkge1xuICAgIC8vIHdlIGFsc28gd2FudCB0byB0cmlnZ2VyIGRvbSBldmVudHNcbiAgICBpZiAodGhpcy5vcHRpb25zLmRvbUV2ZW50cykge1xuICAgICAgdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKTtcbiAgICB9IC8vIG5vIGhhbmRsZXJzLCBzbyBza2lwIGl0IGFsbFxuXG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzW2V2ZW50XSAmJiB0aGlzLmhhbmRsZXJzW2V2ZW50XS5zbGljZSgpO1xuXG4gICAgaWYgKCFoYW5kbGVycyB8fCAhaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGF0YS50eXBlID0gZXZlbnQ7XG5cbiAgICBkYXRhLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGF0YS5zcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgaGFuZGxlcnNbaV0oZGF0YSk7XG4gICAgICBpKys7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZGVzdHJveSB0aGUgbWFuYWdlciBhbmQgdW5iaW5kcyBhbGwgZXZlbnRzXG4gICAqIGl0IGRvZXNuJ3QgdW5iaW5kIGRvbSBldmVudHMsIHRoYXQgaXMgdGhlIHVzZXIgb3duIHJlc3BvbnNpYmlsaXR5XG4gICAqL1xuXG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuZWxlbWVudCAmJiB0b2dnbGVDc3NQcm9wcyh0aGlzLCBmYWxzZSk7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIE1hbmFnZXI7XG59KCk7XG5cbnZhciBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQID0ge1xuICB0b3VjaHN0YXJ0OiBJTlBVVF9TVEFSVCxcbiAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICB0b3VjaGNhbmNlbDogSU5QVVRfQ0FOQ0VMXG59O1xudmFyIFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQnO1xudmFyIFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcbi8qKlxuICogQHByaXZhdGVcbiAqIFRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBTaW5nbGVUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoU2luZ2xlVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBTaW5nbGVUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IFNpbmdsZVRvdWNoSW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2VGFyZ2V0ID0gU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTaW5nbGVUb3VjaElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgdHlwZSA9IFNJTkdMRV9UT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07IC8vIHNob3VsZCB3ZSBoYW5kbGUgdGhlIHRvdWNoIGV2ZW50cz9cblxuICAgIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3VjaGVzID0gbm9ybWFsaXplU2luZ2xlVG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTsgLy8gd2hlbiBkb25lLCByZXNldCB0aGUgc3RhcnRlZCBzdGF0ZVxuXG4gICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiB0b3VjaGVzWzBdLmxlbmd0aCAtIHRvdWNoZXNbMV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgdHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHRvdWNoZXNbMF0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBTaW5nbGVUb3VjaElucHV0O1xufShJbnB1dCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgdmFyIGFsbCA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciBjaGFuZ2VkID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG5cbiAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgIGFsbCA9IHVuaXF1ZUFycmF5KGFsbC5jb25jYXQoY2hhbmdlZCksICdpZGVudGlmaWVyJywgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gW2FsbCwgY2hhbmdlZF07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdyYXAgYSBtZXRob2Qgd2l0aCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgYW5kIHN0YWNrIHRyYWNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB3cmFwcGluZyB0aGUgc3VwcGxpZWQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBkZXByZWNhdGUobWV0aG9kLCBuYW1lLCBtZXNzYWdlKSB7XG4gIHZhciBkZXByZWNhdGlvbk1lc3NhZ2UgPSBcIkRFUFJFQ0FURUQgTUVUSE9EOiBcIiArIG5hbWUgKyBcIlxcblwiICsgbWVzc2FnZSArIFwiIEFUIFxcblwiO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICB2YXIgc3RhY2sgPSBlICYmIGUuc3RhY2sgPyBlLnN0YWNrLnJlcGxhY2UoL15bXlxcKF0rP1tcXG4kXS9nbSwgJycpLnJlcGxhY2UoL15cXHMrYXRcXHMrL2dtLCAnJykucmVwbGFjZSgvXk9iamVjdC48YW5vbnltb3VzPlxccypcXCgvZ20sICd7YW5vbnltb3VzfSgpQCcpIDogJ1Vua25vd24gU3RhY2sgVHJhY2UnO1xuICAgIHZhciBsb2cgPSB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUud2FybiB8fCB3aW5kb3cuY29uc29sZS5sb2cpO1xuXG4gICAgaWYgKGxvZykge1xuICAgICAgbG9nLmNhbGwod2luZG93LmNvbnNvbGUsIGRlcHJlY2F0aW9uTWVzc2FnZSwgc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW21lcmdlPWZhbHNlXVxuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG5cbnZhciBleHRlbmQgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYywgbWVyZ2UpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBrZXlzLmxlbmd0aCkge1xuICAgIGlmICghbWVyZ2UgfHwgbWVyZ2UgJiYgZGVzdFtrZXlzW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXN0W2tleXNbaV1dID0gc3JjW2tleXNbaV1dO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufSwgJ2V4dGVuZCcsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgdGhhdCBleGlzdCBpbiBkZXN0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuIGJ5IHNyY1xuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xuXG52YXIgbWVyZ2UgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYykge1xuICByZXR1cm4gZXh0ZW5kKGRlc3QsIHNyYywgdHJ1ZSk7XG59LCAnbWVyZ2UnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzaW1wbGUgY2xhc3MgaW5oZXJpdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoaWxkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBiYXNlXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXNdXG4gKi9cblxuZnVuY3Rpb24gaW5oZXJpdChjaGlsZCwgYmFzZSwgcHJvcGVydGllcykge1xuICB2YXIgYmFzZVAgPSBiYXNlLnByb3RvdHlwZTtcbiAgdmFyIGNoaWxkUDtcbiAgY2hpbGRQID0gY2hpbGQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShiYXNlUCk7XG4gIGNoaWxkUC5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuICBjaGlsZFAuX3N1cGVyID0gYmFzZVA7XG5cbiAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICBhc3NpZ24kMShjaGlsZFAsIHByb3BlcnRpZXMpO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNpbXBsZSBmdW5jdGlvbiBiaW5kXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gYmluZEZuKGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBib3VuZEZuKCkge1xuICAgIHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIG1hbmFnZXIgd2l0aCBhIGRlZmF1bHQgc2V0IG9mIHJlY29nbml6ZXJzLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIEhhbW1lciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIHZhciBIYW1tZXIgPVxuICAvKipcbiAgICAqIEBwcml2YXRlXG4gICAgKiBAY29uc3Qge3N0cmluZ31cbiAgICAqL1xuICBmdW5jdGlvbiBIYW1tZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1hbmFnZXIoZWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgcmVjb2duaXplcnM6IHByZXNldC5jb25jYXQoKVxuICAgIH0sIG9wdGlvbnMpKTtcbiAgfTtcblxuICBIYW1tZXIuVkVSU0lPTiA9IFwiMi4wLjE3LXJjXCI7XG4gIEhhbW1lci5ESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0FMTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9ET1dOID0gRElSRUNUSU9OX0RPV047XG4gIEhhbW1lci5ESVJFQ1RJT05fTEVGVCA9IERJUkVDVElPTl9MRUZUO1xuICBIYW1tZXIuRElSRUNUSU9OX1JJR0hUID0gRElSRUNUSU9OX1JJR0hUO1xuICBIYW1tZXIuRElSRUNUSU9OX1VQID0gRElSRUNUSU9OX1VQO1xuICBIYW1tZXIuRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9WRVJUSUNBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9OT05FID0gRElSRUNUSU9OX05PTkU7XG4gIEhhbW1lci5ESVJFQ1RJT05fRE9XTiA9IERJUkVDVElPTl9ET1dOO1xuICBIYW1tZXIuSU5QVVRfU1RBUlQgPSBJTlBVVF9TVEFSVDtcbiAgSGFtbWVyLklOUFVUX01PVkUgPSBJTlBVVF9NT1ZFO1xuICBIYW1tZXIuSU5QVVRfRU5EID0gSU5QVVRfRU5EO1xuICBIYW1tZXIuSU5QVVRfQ0FOQ0VMID0gSU5QVVRfQ0FOQ0VMO1xuICBIYW1tZXIuU1RBVEVfUE9TU0lCTEUgPSBTVEFURV9QT1NTSUJMRTtcbiAgSGFtbWVyLlNUQVRFX0JFR0FOID0gU1RBVEVfQkVHQU47XG4gIEhhbW1lci5TVEFURV9DSEFOR0VEID0gU1RBVEVfQ0hBTkdFRDtcbiAgSGFtbWVyLlNUQVRFX0VOREVEID0gU1RBVEVfRU5ERUQ7XG4gIEhhbW1lci5TVEFURV9SRUNPR05JWkVEID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgSGFtbWVyLlNUQVRFX0NBTkNFTExFRCA9IFNUQVRFX0NBTkNFTExFRDtcbiAgSGFtbWVyLlNUQVRFX0ZBSUxFRCA9IFNUQVRFX0ZBSUxFRDtcbiAgSGFtbWVyLk1hbmFnZXIgPSBNYW5hZ2VyO1xuICBIYW1tZXIuSW5wdXQgPSBJbnB1dDtcbiAgSGFtbWVyLlRvdWNoQWN0aW9uID0gVG91Y2hBY3Rpb247XG4gIEhhbW1lci5Ub3VjaElucHV0ID0gVG91Y2hJbnB1dDtcbiAgSGFtbWVyLk1vdXNlSW5wdXQgPSBNb3VzZUlucHV0O1xuICBIYW1tZXIuUG9pbnRlckV2ZW50SW5wdXQgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgSGFtbWVyLlRvdWNoTW91c2VJbnB1dCA9IFRvdWNoTW91c2VJbnB1dDtcbiAgSGFtbWVyLlNpbmdsZVRvdWNoSW5wdXQgPSBTaW5nbGVUb3VjaElucHV0O1xuICBIYW1tZXIuUmVjb2duaXplciA9IFJlY29nbml6ZXI7XG4gIEhhbW1lci5BdHRyUmVjb2duaXplciA9IEF0dHJSZWNvZ25pemVyO1xuICBIYW1tZXIuVGFwID0gVGFwUmVjb2duaXplcjtcbiAgSGFtbWVyLlBhbiA9IFBhblJlY29nbml6ZXI7XG4gIEhhbW1lci5Td2lwZSA9IFN3aXBlUmVjb2duaXplcjtcbiAgSGFtbWVyLlBpbmNoID0gUGluY2hSZWNvZ25pemVyO1xuICBIYW1tZXIuUm90YXRlID0gUm90YXRlUmVjb2duaXplcjtcbiAgSGFtbWVyLlByZXNzID0gUHJlc3NSZWNvZ25pemVyO1xuICBIYW1tZXIub24gPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLm9mZiA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIuZWFjaCA9IGVhY2g7XG4gIEhhbW1lci5tZXJnZSA9IG1lcmdlO1xuICBIYW1tZXIuZXh0ZW5kID0gZXh0ZW5kO1xuICBIYW1tZXIuYmluZEZuID0gYmluZEZuO1xuICBIYW1tZXIuYXNzaWduID0gYXNzaWduJDE7XG4gIEhhbW1lci5pbmhlcml0ID0gaW5oZXJpdDtcbiAgSGFtbWVyLmJpbmRGbiA9IGJpbmRGbjtcbiAgSGFtbWVyLnByZWZpeGVkID0gcHJlZml4ZWQ7XG4gIEhhbW1lci50b0FycmF5ID0gdG9BcnJheTtcbiAgSGFtbWVyLmluQXJyYXkgPSBpbkFycmF5O1xuICBIYW1tZXIudW5pcXVlQXJyYXkgPSB1bmlxdWVBcnJheTtcbiAgSGFtbWVyLnNwbGl0U3RyID0gc3BsaXRTdHI7XG4gIEhhbW1lci5ib29sT3JGbiA9IGJvb2xPckZuO1xuICBIYW1tZXIuaGFzUGFyZW50ID0gaGFzUGFyZW50O1xuICBIYW1tZXIuYWRkRXZlbnRMaXN0ZW5lcnMgPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLnJlbW92ZUV2ZW50TGlzdGVuZXJzID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5kZWZhdWx0cyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywge1xuICAgIHByZXNldDogcHJlc2V0XG4gIH0pO1xuICByZXR1cm4gSGFtbWVyO1xufSgpO1xuXG4vLyAgc3R5bGUgbG9hZGVyIGJ1dCBieSBzY3JpcHQgdGFnLCBub3QgYnkgdGhlIGxvYWRlci5cblxudmFyIGRlZmF1bHRzJDEgPSBIYW1tZXIuZGVmYXVsdHM7XG5cbmV4cG9ydCBkZWZhdWx0IEhhbW1lcjtcbmV4cG9ydCB7IElOUFVUX1NUQVJULCBJTlBVVF9NT1ZFLCBJTlBVVF9FTkQsIElOUFVUX0NBTkNFTCwgU1RBVEVfUE9TU0lCTEUsIFNUQVRFX0JFR0FOLCBTVEFURV9DSEFOR0VELCBTVEFURV9FTkRFRCwgU1RBVEVfUkVDT0dOSVpFRCwgU1RBVEVfQ0FOQ0VMTEVELCBTVEFURV9GQUlMRUQsIERJUkVDVElPTl9OT05FLCBESVJFQ1RJT05fTEVGVCwgRElSRUNUSU9OX1JJR0hULCBESVJFQ1RJT05fVVAsIERJUkVDVElPTl9ET1dOLCBESVJFQ1RJT05fSE9SSVpPTlRBTCwgRElSRUNUSU9OX1ZFUlRJQ0FMLCBESVJFQ1RJT05fQUxMLCBNYW5hZ2VyLCBJbnB1dCwgVG91Y2hBY3Rpb24sIFRvdWNoSW5wdXQsIE1vdXNlSW5wdXQsIFBvaW50ZXJFdmVudElucHV0LCBUb3VjaE1vdXNlSW5wdXQsIFNpbmdsZVRvdWNoSW5wdXQsIFJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCBUYXBSZWNvZ25pemVyIGFzIFRhcCwgUGFuUmVjb2duaXplciBhcyBQYW4sIFN3aXBlUmVjb2duaXplciBhcyBTd2lwZSwgUGluY2hSZWNvZ25pemVyIGFzIFBpbmNoLCBSb3RhdGVSZWNvZ25pemVyIGFzIFJvdGF0ZSwgUHJlc3NSZWNvZ25pemVyIGFzIFByZXNzLCBhZGRFdmVudExpc3RlbmVycyBhcyBvbiwgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMgYXMgb2ZmLCBlYWNoLCBtZXJnZSwgZXh0ZW5kLCBhc3NpZ24kMSBhcyBhc3NpZ24sIGluaGVyaXQsIGJpbmRGbiwgcHJlZml4ZWQsIHRvQXJyYXksIGluQXJyYXksIHVuaXF1ZUFycmF5LCBzcGxpdFN0ciwgYm9vbE9yRm4sIGhhc1BhcmVudCwgYWRkRXZlbnRMaXN0ZW5lcnMsIHJlbW92ZUV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0cyQxIGFzIGRlZmF1bHRzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW1tZXIuZXNtLmpzLm1hcFxuIiwgIi8qKlxuICogdmlzLXV0aWxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqcy92aXMtdXRpbFxuICpcbiAqIHV0aWxpdGllIGNvbGxlY3Rpb24gZm9yIHZpc2pzXG4gKlxuICogQHZlcnNpb24gNS4wLjdcbiAqIEBkYXRlICAgIDIwMjMtMTEtMjBUMDk6MDY6NTEuMDY3WlxuICpcbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTEtMjAxNyBBbG1lbmRlIEIuViwgaHR0cDovL2FsbWVuZGUuY29tXG4gKiBAY29weXJpZ2h0IChjKSAyMDE3LTIwMTkgdmlzanMgY29udHJpYnV0b3JzLCBodHRwczovL2dpdGh1Yi5jb20vdmlzanNcbiAqXG4gKiBAbGljZW5zZVxuICogdmlzLmpzIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aFxuICpcbiAqICAgMS4gVGhlIEFwYWNoZSAyLjAgTGljZW5zZVxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgIGFuZFxuICpcbiAqICAgMi4gVGhlIE1JVCBMaWNlbnNlXG4gKiAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiB2aXMuanMgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGVpdGhlciBsaWNlbnNlLlxuICovXG5cbmltcG9ydCBFbWl0dGVyIGZyb20gJ2NvbXBvbmVudC1lbWl0dGVyJztcbmltcG9ydCBSZWFsSGFtbWVyIGZyb20gJ0BlZ2pzL2hhbW1lcmpzJztcblxuLyoqXHJcbiAqIFVzZSB0aGlzIHN5bWJvbCB0byBkZWxldGUgcHJvcGVyaWVzIGluIGRlZXBPYmplY3RBc3NpZ24uXHJcbiAqL1xyXG5jb25zdCBERUxFVEUgPSBTeW1ib2woXCJERUxFVEVcIik7XHJcbi8qKlxyXG4gKiBQdXJlIHZlcnNpb24gb2YgZGVlcE9iamVjdEFzc2lnbiwgaXQgZG9lc24ndCBtb2RpZnkgYW55IG9mIGl0J3MgYXJndW1lbnRzLlxyXG4gKlxyXG4gKiBAcGFyYW0gYmFzZSAtIFRoZSBiYXNlIG9iamVjdCB0aGF0IGZ1bGxmaWxzIHRoZSB3aG9sZSBpbnRlcmZhY2UgVC5cclxuICogQHBhcmFtIHVwZGF0ZXMgLSBVcGRhdGVzIHRoYXQgbWF5IGNoYW5nZSBvciBkZWxldGUgcHJvcHMuXHJcbiAqIEByZXR1cm5zIEEgYnJhbmQgbmV3IGluc3RhbmNlIHdpdGggYWxsIHRoZSBzdXBwbGllZCBvYmplY3RzIGRlZXBseSBtZXJnZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwdXJlRGVlcE9iamVjdEFzc2lnbihiYXNlLCAuLi51cGRhdGVzKSB7XHJcbiAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbih7fSwgYmFzZSwgLi4udXBkYXRlcyk7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgdmVyc2lvbiBvZiBvYmplY3QgYXNzaWduIHdpdGggYWRkaXRpb25hbCBkZWxldGluZyBieSB0aGUgREVMRVRFIHN5bWJvbC5cclxuICpcclxuICogQHBhcmFtIHZhbHVlcyAtIE9iamVjdHMgdG8gYmUgZGVlcGx5IG1lcmdlZC5cclxuICogQHJldHVybnMgVGhlIGZpcnN0IG9iamVjdCBmcm9tIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBPYmplY3RBc3NpZ24oLi4udmFsdWVzKSB7XHJcbiAgICBjb25zdCBtZXJnZWQgPSBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKTtcclxuICAgIHN0cmlwRGVsZXRlKG1lcmdlZCk7XHJcbiAgICByZXR1cm4gbWVyZ2VkO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIHZlcnNpb24gb2Ygb2JqZWN0IGFzc2lnbiB3aXRoIGFkZGl0aW9uYWwgZGVsZXRpbmcgYnkgdGhlIERFTEVURSBzeW1ib2wuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoaXMgZG9lc24ndCBzdHJpcCB0aGUgREVMRVRFIHN5bWJvbHMgc28gdGhleSBtYXkgZW5kIHVwIGluIHRoZSBmaW5hbCBvYmplY3QuXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBPYmplY3RzIHRvIGJlIGRlZXBseSBtZXJnZWQuXHJcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBvYmplY3QgZnJvbSB2YWx1ZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKSB7XHJcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KGRlZXBPYmplY3RBc3NpZ24odmFsdWVzWzBdLCB2YWx1ZXNbMV0pLCAuLi52YWx1ZXMuc2xpY2UoMikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYSA9IHZhbHVlc1swXTtcclxuICAgIGNvbnN0IGIgPSB2YWx1ZXNbMV07XHJcbiAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICBhLnNldFRpbWUoYi5nZXRUaW1lKCkpO1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIFJlZmxlY3Qub3duS2V5cyhiKSkge1xyXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGIsIHByb3ApKSA7XHJcbiAgICAgICAgZWxzZSBpZiAoYltwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIGJbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGJbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYVtwcm9wXSkgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeShhW3Byb3BdLCBiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBjbG9uZShiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRGVlcCBjbG9uZSBnaXZlbiBvYmplY3Qgb3IgYXJyYXkuIEluIGNhc2Ugb2YgcHJpbWl0aXZlIHNpbXBseSByZXR1cm4uXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gQW55dGhpbmcuXHJcbiAqIEByZXR1cm5zIERlZXAgY2xvbmVkIG9iamVjdC9hcnJheSBvciB1bmNoYW5nZWQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGNsb25lKGEpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XHJcbiAgICAgICAgcmV0dXJuIGEubWFwKCh2YWx1ZSkgPT4gY2xvbmUodmFsdWUpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBhID09PSBcIm9iamVjdFwiICYmIGEgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGEuZ2V0VGltZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSh7fSwgYSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogU3RyaXAgREVMRVRFIGZyb20gZ2l2ZW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIE9iamVjdCB3aGljaCBtYXkgY29udGFpbiBERUxFVEUgYnV0IHdvbid0IGFmdGVyIHRoaXMgaXMgZXhlY3V0ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBzdHJpcERlbGV0ZShhKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoYSkpIHtcclxuICAgICAgICBpZiAoYVtwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJiBhW3Byb3BdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHN0cmlwRGVsZXRlKGFbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG4vKipcclxuICogU2VlZGFibGUsIGZhc3QgYW5kIHJlYXNvbmFibHkgZ29vZCAobm90IGNyeXB0byBidXQgbW9yZSB0aGFuIG9rYXkgZm9yIG91clxyXG4gKiBuZWVkcykgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIEFkYXB0ZWQgZnJvbSB7QGxpbmsgaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTEwNDI5MTAwNzM2L2h0dHA6Ly9iYWFnb2UuY29tOjgwL2VuL1JhbmRvbU11c2luZ3MvamF2YXNjcmlwdH0uXHJcbiAqIE9yaWdpbmFsIGFsZ29yaXRobSBjcmVhdGVkIGJ5IEpvaGFubmVzIEJhYWfDuGUgXFw8YmFhZ29lXFxAYmFhZ29lLmNvbVxcPiBpbiAyMDEwLlxyXG4gKi9cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIGdlbmVyYXRvciBiYXNlZCBvbiBBbGVhIGJ5IEpvaGFubmVzIEJhYWfDuGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gQWxsIHN1cHBsaWVkIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWQgYXMgYSBzZWVkLiBJbiBjYXNlIG5vdGhpbmdcclxuICogaXMgc3VwcGxpZWQgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWQgdG8gc2VlZCB0aGUgZ2VuZXJhdG9yLlxyXG4gKiBAcmV0dXJucyBBIHJlYWR5IHRvIHVzZSBzZWVkZWQgZ2VuZXJhdG9yLlxyXG4gKi9cclxuZnVuY3Rpb24gQWxlYSguLi5zZWVkKSB7XHJcbiAgICByZXR1cm4gQWxlYUltcGxlbWVudGF0aW9uKHNlZWQubGVuZ3RoID8gc2VlZCA6IFtEYXRlLm5vdygpXSk7XHJcbn1cclxuLyoqXHJcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIFtbQWxlYV1dIHdpdGhvdXQgdXNlciBpbnB1dCB2YWxpZGF0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIFRoZSBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNlZWQgdGhlIGdlbmVyYXRvci5cclxuICogQHJldHVybnMgQSByZWFkeSB0byB1c2Ugc2VlZGVkIGdlbmVyYXRvci5cclxuICovXHJcbmZ1bmN0aW9uIEFsZWFJbXBsZW1lbnRhdGlvbihzZWVkKSB7XHJcbiAgICBsZXQgW3MwLCBzMSwgczJdID0gbWFzaFNlZWQoc2VlZCk7XHJcbiAgICBsZXQgYyA9IDE7XHJcbiAgICBjb25zdCByYW5kb20gPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdCA9IDIwOTE2MzkgKiBzMCArIGMgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxyXG4gICAgICAgIHMwID0gczE7XHJcbiAgICAgICAgczEgPSBzMjtcclxuICAgICAgICByZXR1cm4gKHMyID0gdCAtIChjID0gdCB8IDApKTtcclxuICAgIH07XHJcbiAgICByYW5kb20udWludDMyID0gKCkgPT4gcmFuZG9tKCkgKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgcmFuZG9tLmZyYWN0NTMgPSAoKSA9PiByYW5kb20oKSArICgocmFuZG9tKCkgKiAweDIwMDAwMCkgfCAwKSAqIDEuMTEwMjIzMDI0NjI1MTU2NWUtMTY7IC8vIDJeLTUzXHJcbiAgICByYW5kb20uYWxnb3JpdGhtID0gXCJBbGVhXCI7XHJcbiAgICByYW5kb20uc2VlZCA9IHNlZWQ7XHJcbiAgICByYW5kb20udmVyc2lvbiA9IFwiMC45XCI7XHJcbiAgICByZXR1cm4gcmFuZG9tO1xyXG59XHJcbi8qKlxyXG4gKiBUdXJuIGFyYml0cmFyeSBkYXRhIGludG8gdmFsdWVzIFtbQWxlYUltcGxlbWVudGF0aW9uXV0gY2FuIHVzZSB0byBnZW5lcmF0ZVxyXG4gKiByYW5kb20gbnVtYmVycy5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBBcmJpdHJhcnkgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgc2VlZC5cclxuICogQHJldHVybnMgVGhyZWUgbnVtYmVycyB0byB1c2UgYXMgaW5pdGlhbCB2YWx1ZXMgZm9yIFtbQWxlYUltcGxlbWVudGF0aW9uXV0uXHJcbiAqL1xyXG5mdW5jdGlvbiBtYXNoU2VlZCguLi5zZWVkKSB7XHJcbiAgICBjb25zdCBtYXNoID0gTWFzaCgpO1xyXG4gICAgbGV0IHMwID0gbWFzaChcIiBcIik7XHJcbiAgICBsZXQgczEgPSBtYXNoKFwiIFwiKTtcclxuICAgIGxldCBzMiA9IG1hc2goXCIgXCIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgczAgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczAgPCAwKSB7XHJcbiAgICAgICAgICAgIHMwICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMxIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMxIDwgMCkge1xyXG4gICAgICAgICAgICBzMSArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzMiAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMiA8IDApIHtcclxuICAgICAgICAgICAgczIgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW3MwLCBzMSwgczJdO1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWFzaCBmdW5jdGlvbi5cclxuICpcclxuICogQHJldHVybnMgQSBub25wdXJlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYXJiaXRyYXJ5IFtbTWFzaGFibGVdXSBkYXRhIGFuZCB0dXJuc1xyXG4gKiB0aGVtIGludG8gbnVtYmVycy5cclxuICovXHJcbmZ1bmN0aW9uIE1hc2goKSB7XHJcbiAgICBsZXQgbiA9IDB4ZWZjODI0OWQ7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICBjb25zdCBzdHJpbmcgPSBkYXRhLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbiArPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgbGV0IGggPSAwLjAyNTE5NjAzMjgyNDE2OTM4ICogbjtcclxuICAgICAgICAgICAgbiA9IGggPj4+IDA7XHJcbiAgICAgICAgICAgIGggLT0gbjtcclxuICAgICAgICAgICAgaCAqPSBuO1xyXG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcclxuICAgICAgICAgICAgaCAtPSBuO1xyXG4gICAgICAgICAgICBuICs9IGggKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcclxuICAgIH07XHJcbn1cblxuLyoqXG4gKiBTZXR1cCBhIG1vY2sgaGFtbWVyLmpzIG9iamVjdCwgZm9yIHVuaXQgdGVzdGluZy5cbiAqXG4gKiBJbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3ViZXIvZGVjay5nbC9wdWxsLzY1OFxuICpcbiAqIEByZXR1cm5zIHt7b246IG5vb3AsIG9mZjogbm9vcCwgZGVzdHJveTogbm9vcCwgZW1pdDogbm9vcCwgZ2V0OiBnZXR9fVxuICovXG5mdW5jdGlvbiBoYW1tZXJNb2NrKCkge1xuICBjb25zdCBub29wID0gKCkgPT4ge307XG5cbiAgcmV0dXJuIHtcbiAgICBvbjogbm9vcCxcbiAgICBvZmY6IG5vb3AsXG4gICAgZGVzdHJveTogbm9vcCxcbiAgICBlbWl0OiBub29wLFxuXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0OiBub29wLFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBIYW1tZXIkMSA9XG4gIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IHdpbmRvdy5IYW1tZXIgfHwgUmVhbEhhbW1lclxuICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBoYW1tZXIuanMgaXMgb25seSBhdmFpbGFibGUgaW4gYSBicm93c2VyLCBub3QgaW4gbm9kZS5qcy4gUmVwbGFjaW5nIGl0IHdpdGggYSBtb2NrIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIGhhbW1lck1vY2soKTtcbiAgICAgIH07XG5cbi8qKlxuICogVHVybiBhbiBlbGVtZW50IGludG8gYW4gY2xpY2tUb1VzZSBlbGVtZW50LlxuICogV2hlbiBub3QgYWN0aXZlLCB0aGUgZWxlbWVudCBoYXMgYSB0cmFuc3BhcmVudCBvdmVybGF5LiBXaGVuIHRoZSBvdmVybGF5IGlzXG4gKiBjbGlja2VkLCB0aGUgbW9kZSBpcyBjaGFuZ2VkIHRvIGFjdGl2ZS5cbiAqIFdoZW4gYWN0aXZlLCB0aGUgZWxlbWVudCBpcyBkaXNwbGF5ZWQgd2l0aCBhIGJsdWUgYm9yZGVyIGFyb3VuZCBpdCwgYW5kXG4gKiB0aGUgaW50ZXJhY3RpdmUgY29udGVudHMgb2YgdGhlIGVsZW1lbnQgY2FuIGJlIHVzZWQuIFdoZW4gY2xpY2tlZCBvdXRzaWRlXG4gKiB0aGUgZWxlbWVudCwgdGhlIGVsZW1lbnRzIG1vZGUgaXMgY2hhbmdlZCB0byBpbmFjdGl2ZS5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lclxuICogQGNsYXNzIEFjdGl2YXRvclxuICovXG5mdW5jdGlvbiBBY3RpdmF0b3IkMShjb250YWluZXIpIHtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlID0gW107XG5cbiAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcblxuICB0aGlzLl9kb20gPSB7XG4gICAgY29udGFpbmVyLFxuICAgIG92ZXJsYXk6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gIH07XG5cbiAgdGhpcy5fZG9tLm92ZXJsYXkuY2xhc3NMaXN0LmFkZChcInZpcy1vdmVybGF5XCIpO1xuXG4gIHRoaXMuX2RvbS5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZG9tLm92ZXJsYXkpO1xuICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgdGhpcy5fZG9tLm92ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIH0pO1xuXG4gIGNvbnN0IGhhbW1lciA9IEhhbW1lciQxKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgaGFtbWVyLm9uKFwidGFwXCIsIHRoaXMuX29uVGFwT3ZlcmxheS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgIGhhbW1lci5kZXN0cm95KCk7XG4gICAgLy8gRklYTUU6IGNsZWFuaW5nIHVwIGhhbW1lciBpbnN0YW5jZXMgZG9lc24ndCB3b3JrIChUaW1lbGluZSBub3QgcmVtb3ZlZFxuICAgIC8vIGZyb20gbWVtb3J5KVxuICB9KTtcblxuICAvLyBibG9jayBhbGwgdG91Y2ggZXZlbnRzIChleGNlcHQgdGFwKVxuICBjb25zdCBldmVudHMgPSBbXG4gICAgXCJ0YXBcIixcbiAgICBcImRvdWJsZXRhcFwiLFxuICAgIFwicHJlc3NcIixcbiAgICBcInBpbmNoXCIsXG4gICAgXCJwYW5cIixcbiAgICBcInBhbnN0YXJ0XCIsXG4gICAgXCJwYW5tb3ZlXCIsXG4gICAgXCJwYW5lbmRcIixcbiAgXTtcbiAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgaGFtbWVyLm9uKGV2ZW50LCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBhdHRhY2ggYSBjbGljayBldmVudCB0byB0aGUgd2luZG93LCBpbiBvcmRlciB0byBkZWFjdGl2YXRlIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSB0aGUgdGltZWxpbmVcbiAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LmJvZHkpIHtcbiAgICB0aGlzLl9vbkNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIV9oYXNQYXJlbnQoZXZlbnQudGFyZ2V0LCBjb250YWluZXIpKSB7XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBwcmVwYXJlIGVzY2FwZSBrZXkgbGlzdGVuZXIgZm9yIGRlYWN0aXZhdGluZyB3aGVuIGFjdGl2ZVxuICB0aGlzLl9lc2NMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIFwia2V5XCIgaW4gZXZlbnRcbiAgICAgICAgPyBldmVudC5rZXkgPT09IFwiRXNjYXBlXCJcbiAgICAgICAgOiBldmVudC5rZXlDb2RlID09PSAyNyAvKiB0aGUga2V5Q29kZSBpcyBmb3IgSUUxMSAqL1xuICAgICkge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgfVxuICB9O1xufVxuXG4vLyB0dXJuIGludG8gYW4gZXZlbnQgZW1pdHRlclxuRW1pdHRlcihBY3RpdmF0b3IkMS5wcm90b3R5cGUpO1xuXG4vLyBUaGUgY3VycmVudGx5IGFjdGl2ZSBhY3RpdmF0b3JcbkFjdGl2YXRvciQxLmN1cnJlbnQgPSBudWxsO1xuXG4vKipcbiAqIERlc3Ryb3kgdGhlIGFjdGl2YXRvci4gQ2xlYW5zIHVwIGFsbCBjcmVhdGVkIERPTSBhbmQgZXZlbnQgbGlzdGVuZXJzXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmRlYWN0aXZhdGUoKTtcblxuICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2NsZWFudXBRdWV1ZS5zcGxpY2UoMCkucmV2ZXJzZSgpKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBoaWRkZW4sIGVsZW1lbnQgaXMgZGVjb3JhdGVkIHdpdGggYSBibHVlIHNoYWRvdyBib3JkZXJcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICAvLyB3ZSBhbGxvdyBvbmx5IG9uZSBhY3RpdmUgYWN0aXZhdG9yIGF0IGEgdGltZVxuICBpZiAoQWN0aXZhdG9yJDEuY3VycmVudCkge1xuICAgIEFjdGl2YXRvciQxLmN1cnJlbnQuZGVhY3RpdmF0ZSgpO1xuICB9XG4gIEFjdGl2YXRvciQxLmN1cnJlbnQgPSB0aGlzO1xuXG4gIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgdGhpcy5fZG9tLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ2aXMtYWN0aXZlXCIpO1xuXG4gIHRoaXMuZW1pdChcImNoYW5nZVwiKTtcbiAgdGhpcy5lbWl0KFwiYWN0aXZhdGVcIik7XG5cbiAgLy8gdWdseSBoYWNrOiBiaW5kIEVTQyBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnRzLCBhcyB0aGUgTmV0d29yayByZWJpbmRzIGFsbFxuICAvLyBrZXlib2FyZCBldmVudHMgb24gYSAnY2hhbmdlJyBldmVudFxuICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBkaXNwbGF5ZWQgb24gdG9wIG9mIHRoZSBlbGVtZW50XG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB0aGlzLl9kb20ub3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJ2aXMtYWN0aXZlXCIpO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcblxuICB0aGlzLmVtaXQoXCJjaGFuZ2VcIik7XG4gIHRoaXMuZW1pdChcImRlYWN0aXZhdGVcIik7XG59O1xuXG4vKipcbiAqIEhhbmRsZSBhIHRhcCBldmVudDogYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLl9vblRhcE92ZXJsYXkgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICB0aGlzLmFjdGl2YXRlKCk7XG4gIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIHRoZSByZXF1ZXN0ZWQgcGFyZW50IGVsZW1lbnQgc29tZXdoZXJlIGluXG4gKiBpdHMgY2hhaW4gb2YgcGFyZW50IG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwYXJlbnQgaXMgZm91bmQgc29tZXdoZXJlIGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgIGNoYWluIG9mIHBhcmVudCBub2Rlcy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9oYXNQYXJlbnQoZWxlbWVudCwgcGFyZW50KSB7XG4gIHdoaWxlIChlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyB1dGlsaXR5IGZ1bmN0aW9uc1xyXG4vLyBwYXJzZSBBU1AuTmV0IERhdGUgcGF0dGVybixcclxuLy8gZm9yIGV4YW1wbGUgJy9EYXRlKDExOTg5MDg3MTcwNTYpLycgb3IgJy9EYXRlKDExOTg5MDg3MTcwNTYtMDcwMCkvJ1xyXG4vLyBjb2RlIGZyb20gaHR0cDovL21vbWVudGpzLmNvbS9cclxuY29uc3QgQVNQRGF0ZVJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2k7XHJcbi8vIENvbG9yIFJFc1xyXG5jb25zdCBmdWxsSGV4UkUgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pO1xyXG5jb25zdCBzaG9ydEhleFJFID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcclxuY29uc3QgcmdiUkUgPSAvXnJnYlxcKCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqXFwpJC9pO1xyXG5jb25zdCByZ2JhUkUgPSAvXnJnYmFcXCggKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKihbMDFdfDA/XFwuXFxkKykgKlxcKSQvaTtcclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBudW1iZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBudW1iZXIsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgZXZlcnl0aGluZyBpbiB0aGUgRE9NIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIERPTW9iamVjdCAtIE5vZGUgd2hvc2UgY2hpbGQgbm9kZXMgd2lsbCBiZSByZWN1cnNpdmVseSBkZWxldGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVjdXJzaXZlRE9NRGVsZXRlKERPTW9iamVjdCkge1xyXG4gICAgaWYgKERPTW9iamVjdCkge1xyXG4gICAgICAgIHdoaWxlIChET01vYmplY3QuaGFzQ2hpbGROb2RlcygpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gRE9Nb2JqZWN0LmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlRE9NRGVsZXRlKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIERPTW9iamVjdC5yZW1vdmVDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgb2JqZWN0IChub3QgcHJpbWl0aXZlIG9yIG51bGwpLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgbm90IG51bGwgb2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIERhdGUsIG9yIGEgU3RyaW5nIGNvbnRhaW5pbmcgYSBEYXRlLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgRGF0ZSBpbnN0YW5jZSBvciBzdHJpbmcgZGF0ZSByZXByZXNlbnRhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAvLyB0ZXN0IHdoZXRoZXIgdGhpcyBzdHJpbmcgY29udGFpbnMgYSBkYXRlXHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBBU1BEYXRlUmVnZXguZXhlYyh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG4vKipcclxuICogQ29weSBwcm9wZXJ0eSBmcm9tIGIgdG8gYSBpZiBwcm9wZXJ0eSBwcmVzZW50IGluIGEuXHJcbiAqIElmIHByb3BlcnR5IGluIGIgZXhwbGljaXRseSBzZXQgdG8gbnVsbCwgZGVsZXRlIGl0IGlmIGBhbGxvd0RlbGV0aW9uYCBzZXQuXHJcbiAqXHJcbiAqIEludGVybmFsIGhlbHBlciByb3V0aW5lLCBzaG91bGQgbm90IGJlIGV4cG9ydGVkLiBOb3QgYWRkZWQgdG8gYGV4cG9ydHNgIGZvciB0aGF0IHJlYXNvbi5cclxuICpcclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBwcm9wIC0gTmFtZSBvZiBwcm9wZXJ0eSB0byBjb3B5IGZyb20gYiB0byBhLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKSB7XHJcbiAgICBsZXQgZG9EZWxldGlvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUpIHtcclxuICAgICAgICBkb0RlbGV0aW9uID0gYltwcm9wXSA9PT0gbnVsbCAmJiBhW3Byb3BdICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoZG9EZWxldGlvbikge1xyXG4gICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF07IC8vIFJlbWVtYmVyLCB0aGlzIGlzIGEgcmVmZXJlbmNlIGNvcHkhXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEZpbGwgYW4gb2JqZWN0IHdpdGggYSBwb3NzaWJseSBwYXJ0aWFsbHkgZGVmaW5lZCBvdGhlciBvYmplY3QuXHJcbiAqXHJcbiAqIE9ubHkgY29waWVzIHZhbHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgYWxyZWFkeSBwcmVzZW50IGluIGEuXHJcbiAqIFRoYXQgbWVhbnMgYW4gb2JqZWN0IGlzIG5vdCBjcmVhdGVkIG9uIGEgcHJvcGVydHkgaWYgb25seSB0aGUgYiBvYmplY3QgaGFzIGl0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBvYmplY3QgdGhhdCB3aWxsIGhhdmUgaXQncyBwcm9wZXJ0aWVzIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSBiIC0gVGhlIG9iamVjdCB3aXRoIHByb3BlcnR5IHVwZGF0ZXMuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnRpZXMgaW4gYSB0aGF0IGFyZSBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqL1xyXG5mdW5jdGlvbiBmaWxsSWZEZWZpbmVkKGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gTk9URTogaXRlcmF0aW9uIG9mIHByb3BlcnRpZXMgb2YgYVxyXG4gICAgLy8gTk9URTogcHJvdG90eXBlIHByb3BlcnRpZXMgaXRlcmF0ZWQgb3ZlciBhcyB3ZWxsXHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYSkge1xyXG4gICAgICAgIGlmIChiW3Byb3BdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGJbcHJvcF0gPT09IG51bGwgfHwgdHlwZW9mIGJbcHJvcF0gIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIE5vdGU6IHR5cGVvZiBudWxsID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYVByb3AgPSBhW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYlByb3AgPSBiW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGFQcm9wKSAmJiBpc09iamVjdChiUHJvcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsSWZEZWZpbmVkKGFQcm9wLCBiUHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhXHJcbiAqIHRhcmdldCBvYmplY3QuIFJldHVybnMgdGhlIHRhcmdldCBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBjb3B5IHRvLlxyXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXHJcbiAqIEByZXR1cm5zIFRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gKi9cclxuY29uc3QgZXh0ZW5kID0gT2JqZWN0LmFzc2lnbjtcclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIgb3IgYSBzZXJpZXMgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHJlbWFya3NcclxuICogT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZCB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICogQHBhcmFtIHByb3BzIC0gUHJvcGVydGllcyB0byBiZSBjb3BpZWQgdG8gYS5cclxuICogQHBhcmFtIGEgLSBUaGUgdGFyZ2V0LlxyXG4gKiBAcGFyYW0gb3RoZXJzIC0gVGhlIHNvdXJjZXMuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVFeHRlbmQocHJvcHMsIGEsIC4uLm90aGVycykge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFycmF5IHdpdGggcHJvcGVydHkgbmFtZXMgZXhwZWN0ZWQgYXMgZmlyc3QgYXJndW1lbnRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG90aGVyIG9mIG90aGVycykge1xyXG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW3BdO1xyXG4gICAgICAgICAgICBpZiAob3RoZXIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBwcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IG90aGVyW3Byb3BdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWQgdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyByb3V0aW5lIGltcGxpZWQgdGhhdCBtdWx0aXBsZSBzb3VyY2Ugb2JqZWN0cyBjb3VsZFxyXG4gKiBiZSB1c2VkOyBob3dldmVyLCB0aGUgaW1wbGVtZW50YXRpb24gd2FzICoqd3JvbmcqKi4gU2luY2UgbXVsdGlwbGUgKFxcPjEpXHJcbiAqIHNvdXJjZXMgd2VyZW4ndCB1c2VkIGFueXdoZXJlIGluIHRoZSBgdmlzLmpzYCBjb2RlLCB0aGlzIGhhcyBiZWVuIHJlbW92ZWRcclxuICogQHBhcmFtIHByb3BzIC0gTmFtZXMgb2YgZmlyc3QtbGV2ZWwgcHJvcGVydGllcyB0byBjb3B5IG92ZXIuXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZURlZXBFeHRlbmQocHJvcHMsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbcF07XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSkge1xyXG4gICAgICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBmYWxzZSwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYGFgIHdpdGggcHJvcGVydGllcyBvZiBvYmplY3QgYGJgLCBpZ25vcmluZyBwcm9wZXJ0aWVzIHdoaWNoXHJcbiAqIGFyZSBleHBsaWNpdGx5IHNwZWNpZmllZCB0byBiZSBleGNsdWRlZC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhlIHByb3BlcnRpZXMgb2YgYGJgIGFyZSBjb25zaWRlcmVkIGZvciBjb3B5aW5nLiBQcm9wZXJ0aWVzIHdoaWNoIGFyZVxyXG4gKiB0aGVtc2VsdmVzIG9iamVjdHMgYXJlIGFyZSBhbHNvIGV4dGVuZGVkLiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkXHJcbiAqIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKiBAcGFyYW0gcHJvcHNUb0V4Y2x1ZGUgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHdoaWNoIHNob3VsZCAqbm90KiBiZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBhIC0gT2JqZWN0IHRvIGV4dGVuZC5cclxuICogQHBhcmFtIGIgLSBPYmplY3QgdG8gdGFrZSBwcm9wZXJ0aWVzIGZyb20gZm9yIGV4dGVuc2lvbi5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydGllcyBpbiBhIHRoYXQgYXJlIGV4cGxpY2l0bHlcclxuICogc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQocHJvcHNUb0V4Y2x1ZGUsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICAvLyBOT1RFOiBhcnJheSBwcm9wZXJ0aWVzIGhhdmUgYW4gZWxzZS1iZWxvdzsgYXBwYXJlbnRseSwgdGhlcmUgaXMgYSBwcm9ibGVtIGhlcmUuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBiKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSAvLyBIYW5kbGUgbG9jYWwgcHJvcGVydGllcyBvbmx5XHJcbiAgICAgICAgaWYgKHByb3BzVG9FeGNsdWRlLmluY2x1ZGVzKHByb3ApKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH0gLy8gSW4gZXhjbHVzaW9uIGxpc3QsIHNraXBcclxuICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYltwcm9wXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXS5wdXNoKGJbcHJvcF1baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgZXh0ZW5kIGFuIG9iamVjdCBhIHdpdGggdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gcHJvdG9FeHRlbmQgLSBJZiB0cnVlLCB0aGUgcHJvdG90eXBlIHZhbHVlcyB3aWxsIGFsc28gYmUgZXh0ZW5kZWQuXHJcbiAqIChUaGF0IGlzIHRoZSBvcHRpb25zIG9iamVjdHMgdGhhdCBpbmhlcml0IGZyb20gb3RoZXJzIHdpbGwgYWxzbyBnZXQgdGhlXHJcbiAqIGluaGVyaXRlZCBvcHRpb25zKS5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCB0aGUgdmFsdWVzIG9mIGZpZWxkcyB0aGF0IGFyZSBudWxsIHdpbGwgYmUgZGVsZXRlZC5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBFeHRlbmQoYSwgYiwgcHJvdG9FeHRlbmQgPSBmYWxzZSwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYikge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkgfHwgcHJvdG9FeHRlbmQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICAgICBiW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYltwcm9wXSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0gZGVlcEV4dGVuZCh7fSwgYltwcm9wXSwgcHJvdG9FeHRlbmQpOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFbcHJvcF0pID09PSBPYmplY3QucHJvdG90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBwcm90b0V4dGVuZCk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF0uc2xpY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgYWxsIGVsZW1lbnRzIGluIHR3byBhcnJheXMgYXJlIGVxdWFsLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIEZpcnN0IGFycmF5LlxyXG4gKiBAcGFyYW0gYiAtIFNlY29uZCBhcnJheS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBib3RoIGFycmF5cyBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2FtZSBlbGVtZW50cyAoMSA9ICcxJykuXHJcbiAqL1xyXG5mdW5jdGlvbiBlcXVhbEFycmF5KGEsIGIpIHtcclxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBHZXQgdGhlIHR5cGUgb2YgYW4gb2JqZWN0LCBmb3IgZXhhbXBsZSBleHBvcnRzLmdldFR5cGUoW10pIHJldHVybnMgJ0FycmF5Jy5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgRGV0ZWN0ZWQgdHlwZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFR5cGUob2JqZWN0KSB7XHJcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcclxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJTdHJpbmdcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJBcnJheVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJEYXRlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIk9iamVjdFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiU3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZTtcclxufVxyXG4vKipcclxuICogVXNlZCB0byBleHRlbmQgYW4gYXJyYXkgYW5kIGNvcHkgaXQuIFRoaXMgaXMgdXNlZCB0byBwcm9wYWdhdGUgcGF0aHMgcmVjdXJzaXZlbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcnIgLSBGaXJzdCBwYXJ0LlxyXG4gKiBAcGFyYW0gbmV3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgYWFkZGVkIGludG8gdGhlIGFycmF5LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBhcnJheSB3aXRoIGFsbCBpdGVtcyBmcm9tIGFyciBhbmQgbmV3VmFsdWUgKHdoaWNoIGlzIGxhc3QpLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weUFuZEV4dGVuZEFycmF5KGFyciwgbmV3VmFsdWUpIHtcclxuICAgIHJldHVybiBbLi4uYXJyLCBuZXdWYWx1ZV07XHJcbn1cclxuLyoqXHJcbiAqIFVzZWQgdG8gZXh0ZW5kIGFuIGFycmF5IGFuZCBjb3B5IGl0LiBUaGlzIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHBhdGhzIHJlY3Vyc2l2ZWx5LlxyXG4gKlxyXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIGJlIGNvcGllZC5cclxuICogQHJldHVybnMgU2hhbGxvdyBjb3B5IG9mIGFyci5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlBcnJheShhcnIpIHtcclxuICAgIHJldHVybiBhcnIuc2xpY2UoKTtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIGxlZnQgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIGxlZnQgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZUxlZnQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIHJpZ2h0IHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSByaWdodCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlUmlnaHQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSB0b3AgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHRvcCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlVG9wKGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxufVxyXG4vKipcclxuICogQWRkIGEgY2xhc3NOYW1lIHRvIHRoZSBnaXZlbiBlbGVtZW50cyBzdHlsZS5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIGFkZGVkLlxyXG4gKiBAcGFyYW0gY2xhc3NOYW1lcyAtIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lcykge1xyXG4gICAgbGV0IGNsYXNzZXMgPSBlbGVtLmNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBuZXdDbGFzc2VzID0gY2xhc3NOYW1lcy5zcGxpdChcIiBcIik7XHJcbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5jb25jYXQobmV3Q2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhY2xhc3Nlcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xyXG4gICAgfSkpO1xyXG4gICAgZWxlbS5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oXCIgXCIpO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgYSBjbGFzc05hbWUgZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudHMgc3R5bGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjbGFzc05hbWVzIC0gU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNsYXNzTmFtZShlbGVtLCBjbGFzc05hbWVzKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9IGVsZW0uY2xhc3NOYW1lLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IG9sZENsYXNzZXMgPSBjbGFzc05hbWVzLnNwbGl0KFwiIFwiKTtcclxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICFvbGRDbGFzc2VzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XHJcbiAgICB9KTtcclxuICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcclxufVxyXG4vKipcclxuICogRm9yIGVhY2ggbWV0aG9kIGZvciBib3RoIGFycmF5cyBhbmQgb2JqZWN0cy5cclxuICogSW4gY2FzZSBvZiBhbiBhcnJheSwgdGhlIGJ1aWx0LWluIEFycmF5LmZvckVhY2goKSBpcyBhcHBsaWVkICgqKk5vLCBpdCdzIG5vdCEqKikuXHJcbiAqIEluIGNhc2Ugb2YgYW4gT2JqZWN0LCB0aGUgbWV0aG9kIGxvb3BzIG92ZXIgYWxsIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIEFuIE9iamVjdCBvciBBcnJheSB0byBiZSBpdGVyYXRlZCBvdmVyLlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBBcnJheS5mb3JFYWNoLWxpa2UgY2FsbGJhY2suXHJcbiAqL1xyXG5mdW5jdGlvbiBmb3JFYWNoKG9iamVjdCwgY2FsbGJhY2spIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcclxuICAgICAgICAvLyBhcnJheVxyXG4gICAgICAgIGNvbnN0IGxlbiA9IG9iamVjdC5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhvYmplY3RbaV0sIGksIG9iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gb2JqZWN0XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGFuIGFycmF5OiBhbGwgb2JqZWN0cyBwcm9wZXJ0aWVzIGFyZSBwdXQgaW50byB0aGUgYXJyYXkuIFRoZSByZXN1bHRpbmcgYXJyYXkgaXMgdW5vcmRlcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbyAtIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxyXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bm9yZGVyZWQgdmFsdWVzLlxyXG4gKi9cclxuY29uc3QgdG9BcnJheSA9IE9iamVjdC52YWx1ZXM7XHJcbi8qKlxyXG4gKiBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IHdpbGwgYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIGtleSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUgdG8gYmUgYXNzaWduZWQuXHJcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIHdhcyB1cGRhdGVkICh0cnVlKSBvciBhbHJlYWR5IHN0cmljdGx5IHRoZSBzYW1lIGluIHRoZSBvcmlnaW5hbCBvYmplY3QgKGZhbHNlKS5cclxuICovXHJcbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5KG9iamVjdCwga2V5LCB2YWx1ZSkge1xyXG4gICAgaWYgKG9iamVjdFtrZXldICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRocm90dGxlIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBiZSBvbmx5IGV4ZWN1dGVkIG9uY2UgcGVyIGFuaW1hdGlvbiBmcmFtZS5cclxuICpcclxuICogQHBhcmFtIGZuIC0gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxyXG4gKiBAcmV0dXJucyBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uLlxyXG4gKi9cclxuZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcclxuICAgIGxldCBzY2hlZHVsZWQgPSBmYWxzZTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzY2hlZHVsZWQpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm4oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ2FuY2VscyB0aGUgZXZlbnQncyBkZWZhdWx0IGFjdGlvbiBpZiBpdCBpcyBjYW5jZWxhYmxlLCB3aXRob3V0IHN0b3BwaW5nIGZ1cnRoZXIgcHJvcGFnYXRpb24gb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgd2hvc2UgZGVmYXVsdCBhY3Rpb24gc2hvdWxkIGJlIHByZXZlbnRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7XHJcbiAgICB9XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIG5vbi1JRSBicm93c2Vyc1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEdldCBIVE1MIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudC5cclxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgb3IgbnVsbCBpZiBub3Qgb2J0YWluYWJsZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFRhcmdldChldmVudCA9IHdpbmRvdy5ldmVudCkge1xyXG4gICAgLy8gY29kZSBmcm9tIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxyXG4gICAgLy8gQFRPRE86IEV2ZW50VGFyZ2V0IGNhbiBiZSBhbG1vc3QgYW55dGhpbmcsIGlzIGl0IG9rYXkgdG8gcmV0dXJuIG9ubHkgRWxlbWVudHM/XHJcbiAgICBsZXQgdGFyZ2V0ID0gbnVsbDtcclxuICAgIGlmICghZXZlbnQpIDtcclxuICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LnNyY0VsZW1lbnQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC5zcmNFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQubm9kZVR5cGUgIT0gbnVsbCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykge1xyXG4gICAgICAgIC8vIGRlZmVhdCBTYWZhcmkgYnVnXHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG4vKipcclxuICogQ2hlY2sgaWYgZ2l2ZW4gZWxlbWVudCBjb250YWlucyBnaXZlbiBwYXJlbnQgc29tZXdoZXJlIGluIHRoZSBET00gdHJlZS5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiZSB0ZXN0ZWQuXHJcbiAqIEBwYXJhbSBwYXJlbnQgLSBUaGUgYW5jZXN0b3IgKG5vdCBuZWNlc3NhcmlseSBwYXJlbnQpIG9mIHRoZSBlbGVtZW50LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHBhcmVudCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgZWxlbWVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xyXG4gICAgbGV0IGVsZW0gPSBlbGVtZW50O1xyXG4gICAgd2hpbGUgKGVsZW0pIHtcclxuICAgICAgICBpZiAoZWxlbSA9PT0gcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgZWxlbSA9IGVsZW0ucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9ib29sZWFuLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nIGJvb2xlYW4gdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzQm9vbGVhbih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgbnVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvbnVtYmVyLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nICoqYm94ZWQqKiBudW1iZXIgdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzTnVtYmVyKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIHN0cmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3N0cmluZywgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogc3RyaW5nIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1N0cmluZyh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvc2l6ZSwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUgKG51bWJlciArICdweCcpLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1NpemUodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBET00gRWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50byBET00gRWxlbWVudCwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIERPTSBFbGVtZW50LCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0VsZW1lbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxufTtcclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MjM4MzgvcmdiLXRvLWhleC1hbmQtaGV4LXRvLXJnYn1cclxuICogQHBhcmFtIGhleCAtIEhleCBjb2xvciBzdHJpbmcgKDMgb3IgNiBkaWdpdHMsIHdpdGggb3Igd2l0aG91dCAjKS5cclxuICogQHJldHVybnMgUkdCIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvUkdCKGhleCkge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIHN3aXRjaCAoaGV4Lmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHNob3J0SGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0gKyByZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0gKyByZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10gKyByZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBmdWxsSGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBzdHJpbmcgY29sb3IgaW4gaGV4IG9yIFJHQiBmb3JtYXQgYW5kIGFkZHMgdGhlIG9wYWNpdHksIFJHQkEgaXMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLlxyXG4gKlxyXG4gKiBAcGFyYW0gY29sb3IgLSBUaGUgY29sb3Igc3RyaW5nIChoZXgsIFJHQiwgUkdCQSkuXHJcbiAqIEBwYXJhbSBvcGFjaXR5IC0gVGhlIG5ldyBvcGFjaXR5LlxyXG4gKiBAcmV0dXJucyBSR0JBIHN0cmluZywgZm9yIGV4YW1wbGUgJ3JnYmEoMjU1LCAwLCAxMjcsIDAuMyknLlxyXG4gKi9cclxuZnVuY3Rpb24gb3ZlcnJpZGVPcGFjaXR5KGNvbG9yLCBvcGFjaXR5KSB7XHJcbiAgICBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JhXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JcIikpIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBjb2xvclxyXG4gICAgICAgICAgICAuc3Vic3RyKGNvbG9yLmluZGV4T2YoXCIoXCIpICsgMSlcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgICAgIC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYlswXSArIFwiLFwiICsgcmdiWzFdICsgXCIsXCIgKyByZ2JbMl0gKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJnYiA9IGhleFRvUkdCKGNvbG9yKTtcclxuICAgICAgICBpZiAocmdiID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYi5yICsgXCIsXCIgKyByZ2IuZyArIFwiLFwiICsgcmdiLmIgKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcgKGZvciBleGFtcGxlOiAnIzBhY2RjMCcpLlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IZXgocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmV0dXJuIChcIiNcIiArICgoMSA8PCAyNCkgKyAocmVkIDw8IDE2KSArIChncmVlbiA8PCA4KSArIGJsdWUpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XHJcbn1cclxuLyoqXHJcbiAqIFBhcnNlIGEgY29sb3IgcHJvcGVydHkgaW50byBhbiBvYmplY3Qgd2l0aCBib3JkZXIsIGJhY2tncm91bmQsIGFuZCBoaWdobGlnaHQgY29sb3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5wdXRDb2xvciAtIFNob3J0aGFuZCBjb2xvciBzdHJpbmcgb3IgaW5wdXQgY29sb3Igb2JqZWN0LlxyXG4gKiBAcGFyYW0gZGVmYXVsdENvbG9yIC0gRnVsbCBjb2xvciBvYmplY3QgdG8gZmlsbCBpbiBtaXNzaW5nIHZhbHVlcyBpbiBpbnB1dENvbG9yLlxyXG4gKiBAcmV0dXJucyBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0Q29sb3IsIGRlZmF1bHRDb2xvcikge1xyXG4gICAgaWYgKGlzU3RyaW5nKGlucHV0Q29sb3IpKSB7XHJcbiAgICAgICAgbGV0IGNvbG9yU3RyID0gaW5wdXRDb2xvcjtcclxuICAgICAgICBpZiAoaXNWYWxpZFJHQihjb2xvclN0cikpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiID0gY29sb3JTdHJcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoNClcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3JTdHIubGVuZ3RoIC0gNSlcclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIixcIilcclxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29sb3JTdHIgPSBSR0JUb0hleChyZ2JbMF0sIHJnYlsxXSwgcmdiWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVmFsaWRIZXgoY29sb3JTdHIpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzdiA9IGhleFRvSFNWKGNvbG9yU3RyKTtcclxuICAgICAgICAgICAgY29uc3QgbGlnaHRlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBoc3YucyAqIDAuOCxcclxuICAgICAgICAgICAgICAgIHY6IE1hdGgubWluKDEsIGhzdi52ICogMS4wMiksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBNYXRoLm1pbigxLCBoc3YucyAqIDEuMjUpLFxyXG4gICAgICAgICAgICAgICAgdjogaHN2LnYgKiAwLjgsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySGV4ID0gSFNWVG9IZXgoZGFya2VyQ29sb3JIU1YuaCwgZGFya2VyQ29sb3JIU1YucywgZGFya2VyQ29sb3JIU1Yudik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhleCA9IEhTVlRvSGV4KGxpZ2h0ZXJDb2xvckhTVi5oLCBsaWdodGVyQ29sb3JIU1YucywgbGlnaHRlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBob3Zlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChkZWZhdWx0Q29sb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgZGVmYXVsdENvbG9yLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IGRlZmF1bHRDb2xvci5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5ob3ZlciAmJiBpbnB1dENvbG9yLmhvdmVyLmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuYmFja2dyb3VuZCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogaXNTdHJpbmcoaW5wdXRDb2xvci5oaWdobGlnaHQpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcikgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBSR0IgXFw8MCwgMjU1XFw+IGludG8gSFNWIG9iamVjdC5cclxuICpcclxuICogQHJlbWFya3NcclxuICoge0BsaW5rIGh0dHA6Ly93d3cuamF2YXNjcmlwdGVyLm5ldC9mYXEvcmdiMmhzdi5odG19XHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhTViBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBSR0JUb0hTVihyZWQsIGdyZWVuLCBibHVlKSB7XHJcbiAgICByZWQgPSByZWQgLyAyNTU7XHJcbiAgICBncmVlbiA9IGdyZWVuIC8gMjU1O1xyXG4gICAgYmx1ZSA9IGJsdWUgLyAyNTU7XHJcbiAgICBjb25zdCBtaW5SR0IgPSBNYXRoLm1pbihyZWQsIE1hdGgubWluKGdyZWVuLCBibHVlKSk7XHJcbiAgICBjb25zdCBtYXhSR0IgPSBNYXRoLm1heChyZWQsIE1hdGgubWF4KGdyZWVuLCBibHVlKSk7XHJcbiAgICAvLyBCbGFjay1ncmF5LXdoaXRlXHJcbiAgICBpZiAobWluUkdCID09PSBtYXhSR0IpIHtcclxuICAgICAgICByZXR1cm4geyBoOiAwLCBzOiAwLCB2OiBtaW5SR0IgfTtcclxuICAgIH1cclxuICAgIC8vIENvbG9ycyBvdGhlciB0aGFuIGJsYWNrLWdyYXktd2hpdGU6XHJcbiAgICBjb25zdCBkID0gcmVkID09PSBtaW5SR0IgPyBncmVlbiAtIGJsdWUgOiBibHVlID09PSBtaW5SR0IgPyByZWQgLSBncmVlbiA6IGJsdWUgLSByZWQ7XHJcbiAgICBjb25zdCBoID0gcmVkID09PSBtaW5SR0IgPyAzIDogYmx1ZSA9PT0gbWluUkdCID8gMSA6IDU7XHJcbiAgICBjb25zdCBodWUgPSAoNjAgKiAoaCAtIGQgLyAobWF4UkdCIC0gbWluUkdCKSkpIC8gMzYwO1xyXG4gICAgY29uc3Qgc2F0dXJhdGlvbiA9IChtYXhSR0IgLSBtaW5SR0IpIC8gbWF4UkdCO1xyXG4gICAgY29uc3QgdmFsdWUgPSBtYXhSR0I7XHJcbiAgICByZXR1cm4geyBoOiBodWUsIHM6IHNhdHVyYXRpb24sIHY6IHZhbHVlIH07XHJcbn1cclxuLyoqXHJcbiAqIFNwbGl0IGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBpbnRvIGFuIG9iamVjdCB3aXRoIGtleS92YWx1ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gQ1NTIHNvdXJjZSBjb2RlIHRvIHNwbGl0IGludG8ga2V5L3ZhbHVlIG9iamVjdC5cclxuICogQHJldHVybnMgS2V5L3ZhbHVlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHtAbGluayBjc3NUZXh0fS5cclxuICovXHJcbmZ1bmN0aW9uIHNwbGl0Q1NTVGV4dChjc3NUZXh0KSB7XHJcbiAgICBjb25zdCB0bXBFbGxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBjb25zdCBzdHlsZXMgPSB7fTtcclxuICAgIHRtcEVsbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bXBFbGxlbWVudC5zdHlsZS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIHN0eWxlc1t0bXBFbGxlbWVudC5zdHlsZVtpXV0gPSB0bXBFbGxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRtcEVsbGVtZW50LnN0eWxlW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZXM7XHJcbn1cclxuLyoqXHJcbiAqIEFwcGVuZCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgdG8gYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0aGF0IHdpbGwgcmVjZWl2ZSBuZXcgc3R5bGVzLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgYXBwZW5kZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDc3NUZXh0KGVsZW1lbnQsIGNzc1RleHQpIHtcclxuICAgIGNvbnN0IGNzc1N0eWxlID0gc3BsaXRDU1NUZXh0KGNzc1RleHQpO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3NzU3R5bGUpKSB7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCBzdHlsZXMgc2hvdWxkIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gVGhlIHN0eWxlcyB0byBiZSByZW1vdmVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tamlqYWNrc29uLzUzMTEyNTZ9XHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb1JHQihoLCBzLCB2KSB7XHJcbiAgICBsZXQgcjtcclxuICAgIGxldCBnO1xyXG4gICAgbGV0IGI7XHJcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihoICogNik7XHJcbiAgICBjb25zdCBmID0gaCAqIDYgLSBpO1xyXG4gICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xyXG4gICAgY29uc3QgcSA9IHYgKiAoMSAtIGYgKiBzKTtcclxuICAgIGNvbnN0IHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyk7XHJcbiAgICBzd2l0Y2ggKGkgJSA2KSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAociA9IHYpLCAoZyA9IHQpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIChyID0gcSksIChnID0gdiksIChiID0gcCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSB2KSwgKGIgPSB0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAociA9IHApLCAoZyA9IHEpLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIChyID0gdCksIChnID0gcCksIChiID0gdik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSBwKSwgKGIgPSBxKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHI6IE1hdGguZmxvb3IociAqIDI1NSksXHJcbiAgICAgICAgZzogTWF0aC5mbG9vcihnICogMjU1KSxcclxuICAgICAgICBiOiBNYXRoLmZsb29yKGIgKiAyNTUpLFxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb0hleChoLCBzLCB2KSB7XHJcbiAgICBjb25zdCByZ2IgPSBIU1ZUb1JHQihoLCBzLCB2KTtcclxuICAgIHJldHVybiBSR0JUb0hleChyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBoZXggY29sb3Igc3RyaW5nIGludG8gSFNWIFxcPDAsIDFcXD4uXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gaGV4VG9IU1YoaGV4KSB7XHJcbiAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihoZXgpO1xyXG4gICAgaWYgKCFyZ2IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHtoZXh9JyBpcyBub3QgYSB2YWxpZCBjb2xvci5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSR0JUb0hTVihyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgaGV4IGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIGhleCAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkSGV4KGhleCkge1xyXG4gICAgY29uc3QgaXNPayA9IC8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KGhleCk7XHJcbiAgICByZXR1cm4gaXNPaztcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCIGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHJnYiAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCKHJnYikge1xyXG4gICAgcmV0dXJuIHJnYlJFLnRlc3QocmdiKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCQSBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2JhIC0gVW5rbm93biBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiBhIGNvbG9yLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzVmFsaWRSR0JBKHJnYmEpIHtcclxuICAgIHJldHVybiByZ2JhUkUudGVzdChyZ2JhKTtcclxufVxyXG4vKipcclxuICogVGhpcyByZWN1cnNpdmVseSByZWRpcmVjdHMgdGhlIHByb3RvdHlwZSBvZiBKU09OIG9iamVjdHMgdG8gdGhlIHJlZmVyZW5jZU9iamVjdC5cclxuICogVGhpcyBpcyB1c2VkIGZvciBkZWZhdWx0IG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWVsZHMgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHRvIGJlIGJyaWRnZWQuXHJcbiAqIEBwYXJhbSByZWZlcmVuY2VPYmplY3QgLSBUaGUgb3JpZ2luYWwgb2JqZWN0LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVCcmlkZ2VPYmplY3QoZmllbGRzLCByZWZlcmVuY2VPYmplY3QpIHtcclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIHJlZmVyZW5jZU9iamVjdCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIC8vICEhISB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICBjb25zdCBvYmplY3RUbyA9IE9iamVjdC5jcmVhdGUocmVmZXJlbmNlT2JqZWN0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZmVyZW5jZU9iamVjdCwgZmllbGRzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0VG9bZmllbGRzW2ldXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFRvO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgVGhlIEVsZW1lbnQgaWYgdGhlIHJlZmVyZW5jZU9iamVjdCBpcyBhbiBFbGVtZW50LCBvciBhIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiByZWZlcmVuY2VPYmplY3QgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KSB7XHJcbiAgICAgICAgLy8gQXZvaWQgYnJpZGdpbmcgRE9NIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlT2JqZWN0O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGkpKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ldID09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFRvW2ldID0gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0VG87XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgc3RhYmxlIHNvcnQgaW1wbGVtZW50YXRpb24sIHZlcnkgZmFzdCBmb3IgcHJlc29ydGVkIGRhdGEuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIGFycmF5IHRvIGJlIHNvcnRlZCAoaW4tcGxhY2UpLlxyXG4gKiBAcGFyYW0gY29tcGFyZSAtIEFuIG9yZGVyIGNvbXBhcmF0b3IuXHJcbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gaW5zZXJ0U29ydChhLCBjb21wYXJlKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBrID0gYVtpXTtcclxuICAgICAgICBsZXQgajtcclxuICAgICAgICBmb3IgKGogPSBpOyBqID4gMCAmJiBjb21wYXJlKGssIGFbaiAtIDFdKSA8IDA7IGotLSkge1xyXG4gICAgICAgICAgICBhW2pdID0gYVtqIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFbal0gPSBrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIG9wdGlvbnMgb2Ygc3Vib2JqZWN0cyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXHJcbiAqXHJcbiAqIEEgcmVxdWlyZW1lbnQgb2YgdGhlc2Ugc3Vib2JqZWN0cyBpcyB0aGF0IHRoZXkgaGF2ZSBhbiAnZW5hYmxlZCcgZWxlbWVudFxyXG4gKiB3aGljaCBpcyBvcHRpb25hbCBmb3IgdGhlIHVzZXIgYnV0IG1hbmRhdG9yeSBmb3IgdGhlIHByb2dyYW0uXHJcbiAqXHJcbiAqIFRoZSBhZGRlZCB2YWx1ZSBoZXJlIG9mIHRoZSBtZXJnZSBpcyB0aGF0IG9wdGlvbiAnZW5hYmxlZCcgaXMgc2V0IGFzIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWVyZ2VUYXJnZXQgLSBFaXRoZXIgdGhpcy5vcHRpb25zIG9yIHRoZSBvcHRpb25zIHVzZWQgZm9yIHRoZSBncm91cHMuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICogQHBhcmFtIG9wdGlvbiAtIE9wdGlvbiBrZXkgaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQuXHJcbiAqIEBwYXJhbSBnbG9iYWxPcHRpb25zIC0gR2xvYmFsIG9wdGlvbnMsIHBhc3NlZCBpbiB0byBkZXRlcm1pbmUgdmFsdWUgb2Ygb3B0aW9uICdlbmFibGVkJy5cclxuICovXHJcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhtZXJnZVRhcmdldCwgb3B0aW9ucywgb3B0aW9uLCBnbG9iYWxPcHRpb25zID0ge30pIHtcclxuICAgIC8vIExvY2FsIGhlbHBlcnNcclxuICAgIGNvbnN0IGlzUHJlc2VudCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIG9iaiAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIjtcclxuICAgIH07XHJcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzQ0OTEyODcvMTIyMzUzMVxyXG4gICAgY29uc3QgaXNFbXB0eSA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHggaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCB4KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8vIEd1YXJkc1xyXG4gICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgbWVyZ2VUYXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzUHJlc2VudChvcHRpb24pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbiBtdXN0IGhhdmUgYSB2YWx1ZVwiKTtcclxuICAgIH1cclxuICAgIGlmICghaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgZ2xvYmFsT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdFwiKTtcclxuICAgIH1cclxuICAgIC8vXHJcbiAgICAvLyBBY3R1YWwgbWVyZ2Ugcm91dGluZSwgc2VwYXJhdGVkIGZyb20gbWFpbiBsb2dpY1xyXG4gICAgLy8gT25seSBhIHNpbmdsZSBsZXZlbCBvZiBvcHRpb25zIGlzIG1lcmdlZC4gRGVlcGVyIGxldmVscyBhcmUgcmVmJ2QuIFRoaXMgbWF5IGFjdHVhbGx5IGJlIGFuIGlzc3VlLlxyXG4gICAgLy9cclxuICAgIGNvbnN0IGRvTWVyZ2UgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KHRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbb3B0aW9uXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzcmMgPSBvcHRpb25zW29wdGlvbl07XHJcbiAgICAgICAgY29uc3QgZHN0ID0gdGFyZ2V0W29wdGlvbl07XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHNyYykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNyYywgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRzdFtwcm9wXSA9IHNyY1twcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBMb2NhbCBpbml0aWFsaXphdGlvblxyXG4gICAgY29uc3Qgc3JjT3B0aW9uID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgY29uc3QgZ2xvYmFsUGFzc2VkID0gaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykgJiYgIWlzRW1wdHkoZ2xvYmFsT3B0aW9ucyk7XHJcbiAgICBjb25zdCBnbG9iYWxPcHRpb24gPSBnbG9iYWxQYXNzZWQgPyBnbG9iYWxPcHRpb25zW29wdGlvbl0gOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBnbG9iYWxFbmFibGVkID0gZ2xvYmFsT3B0aW9uID8gZ2xvYmFsT3B0aW9uLmVuYWJsZWQgOiB1bmRlZmluZWQ7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTWFpbiByb3V0aW5lXHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgaWYgKHNyY09wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNyY09wdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gc3JjT3B0aW9uO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChzcmNPcHRpb24gPT09IG51bGwgJiYgIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgLy8gSWYgcG9zc2libGUsIGV4cGxpY2l0IGNvcHkgZnJvbSBnbG9iYWxzXHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChnbG9iYWxPcHRpb24pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KHNyY09wdGlvbikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gRW5zdXJlIHRoYXQgJ2VuYWJsZWQnIGlzIHByb3Blcmx5IHNldC4gSXQgaXMgcmVxdWlyZWQgaW50ZXJuYWxseVxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB2YWx1ZSBmcm9tIG9wdGlvbnMgd2lsbCBhbHdheXMgb3ZlcndyaXRlIHRoZSBleGlzdGluZyB2YWx1ZVxyXG4gICAgLy9cclxuICAgIGxldCBlbmFibGVkID0gdHJ1ZTsgLy8gZGVmYXVsdCB2YWx1ZVxyXG4gICAgaWYgKHNyY09wdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBlbmFibGVkID0gc3JjT3B0aW9uLmVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBUYWtlIGZyb20gZ2xvYmFscywgaWYgcHJlc2VudFxyXG4gICAgICAgIGlmIChnbG9iYWxFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZCA9IGdsb2JhbE9wdGlvbi5lbmFibGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRvTWVyZ2UobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbik7XHJcbiAgICBtZXJnZVRhcmdldFtvcHRpb25dLmVuYWJsZWQgPSBlbmFibGVkO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBiaW5hcnkgc2VhcmNoIGZvciBhIHZpc2libGUgaXRlbSBpbiBhIHNvcnRlZCBsaXN0LiBJZiB3ZSBmaW5kIGEgdmlzaWJsZSBpdGVtLCB0aGUgY29kZSB0aGF0IHVzZXNcclxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHRoZW4gaXRlcmF0ZSBpbiBib3RoIGRpcmVjdGlvbnMgb3ZlciB0aGlzIHNvcnRlZCBsaXN0IHRvIGZpbmQgYWxsIHZpc2libGUgaXRlbXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBJdGVtcyBvcmRlcmVkIGJ5IHN0YXJ0LlxyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIC0xIGlzIGxvd2VyLCAwIGlzIGVxdWFsLCAxIGlzIGhpZ2hlci5cclxuICogQHBhcmFtIGZpZWxkIC0gUHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdKS5cclxuICogQHBhcmFtIGZpZWxkMiAtIFNlY29uZCBwcm9wZXJ0eSBuYW1lIG9uIGFuIGl0ZW0gKFRoYXQgaXMgaXRlbVtmaWVsZF1bZmllbGQyXSkuXHJcbiAqIEByZXR1cm5zIEluZGV4IG9mIHRoZSBmb3VuZCBpdGVtIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoQ3VzdG9tKG9yZGVyZWRJdGVtcywgY29tcGFyYXRvciwgZmllbGQsIGZpZWxkMikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQyID09PSB1bmRlZmluZWQgPyBpdGVtW2ZpZWxkXSA6IGl0ZW1bZmllbGRdW2ZpZWxkMl07XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGppaGFhLCBmb3VuZCBhIHZpc2libGUgaXRlbSFcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2VhcmNoUmVzdWx0ID09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBzbWFsbCAtLT4gaW5jcmVhc2UgbG93XHJcbiAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSBzcGVjaWZpYyB2YWx1ZSBpbiBhIHNvcnRlZCBhcnJheS5cclxuICogSWYgaXQgZG9lcyBub3QgZXhpc3QgYnV0IGlzIGluIGJldHdlZW4gb2YgdHdvIHZhbHVlcywgd2UgcmV0dXJuIGVpdGhlciB0aGVcclxuICogb25lIGJlZm9yZSBvciB0aGUgb25lIGFmdGVyLCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dCBJZiBpdCBpcyBmb3VuZCwgd2VcclxuICogcmV0dXJuIHRoZSBpbmRleCwgZWxzZSAtMS5cclxuICpcclxuICogQHBhcmFtIG9yZGVyZWRJdGVtcyAtIFNvcnRlZCBhcnJheS5cclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSBzZWFyY2hlZCB2YWx1ZS5cclxuICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgaW4gaXRlbXMgdG8gYmUgc2VhcmNoZWQuXHJcbiAqIEBwYXJhbSBzaWRlUHJlZmVyZW5jZSAtIElmIHRoZSB0YXJnZXQgaXMgYmV0d2VlbiB0d28gdmFsdWVzLCBzaG91bGQgdGhlIGluZGV4IG9mIHRoZSBiZWZvcmUgb3IgdGhlIGFmdGVyIGJlIHJldHVybmVkP1xyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIEFuIG9wdGlvbmFsIGNvbXBhcmF0b3IsIHJldHVybmluZyAtMSwgMCwgMSBmb3IgXFw8LCA9PT0sIFxcPi5cclxuICogQHJldHVybnMgVGhlIGluZGV4IG9mIGZvdW5kIHZhbHVlIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoVmFsdWUob3JkZXJlZEl0ZW1zLCB0YXJnZXQsIGZpZWxkLCBzaWRlUHJlZmVyZW5jZSwgY29tcGFyYXRvcikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgcHJldlZhbHVlO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IG5leHRWYWx1ZTtcclxuICAgIGxldCBtaWRkbGU7XHJcbiAgICBjb21wYXJhdG9yID1cclxuICAgICAgICBjb21wYXJhdG9yICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGNvbXBhcmF0b3JcclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYiA/IDAgOiBhIDwgYiA/IC0xIDogMTtcclxuICAgICAgICAgICAgfTtcclxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKSB7XHJcbiAgICAgICAgLy8gZ2V0IGEgbmV3IGd1ZXNzXHJcbiAgICAgICAgbWlkZGxlID0gTWF0aC5mbG9vcigwLjUgKiAoaGlnaCArIGxvdykpO1xyXG4gICAgICAgIHByZXZWYWx1ZSA9IG9yZGVyZWRJdGVtc1tNYXRoLm1heCgwLCBtaWRkbGUgLSAxKV1bZmllbGRdO1xyXG4gICAgICAgIHZhbHVlID0gb3JkZXJlZEl0ZW1zW21pZGRsZV1bZmllbGRdO1xyXG4gICAgICAgIG5leHRWYWx1ZSA9XHJcbiAgICAgICAgICAgIG9yZGVyZWRJdGVtc1tNYXRoLm1pbihvcmRlcmVkSXRlbXMubGVuZ3RoIC0gMSwgbWlkZGxlICsgMSldW2ZpZWxkXTtcclxuICAgICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIHRoZSB0YXJnZXRcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcihwcmV2VmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBwcmV2aW91cyBhbmQgdGhlIGN1cnJlbnRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCIgPyBNYXRoLm1heCgwLCBtaWRkbGUgLSAxKSA6IG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA8IDAgJiZcclxuICAgICAgICAgICAgY29tcGFyYXRvcihuZXh0VmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dFxyXG4gICAgICAgICAgICByZXR1cm4gc2lkZVByZWZlcmVuY2UgPT0gXCJiZWZvcmVcIlxyXG4gICAgICAgICAgICAgICAgPyBtaWRkbGVcclxuICAgICAgICAgICAgICAgIDogTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGlkbnQgZmluZCB0aGUgdGFyZ2V0LCB3ZSBuZWVkIHRvIGNoYW5nZSBvdXIgYm91bmRhcmllcy5cclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICAgICAgbG93ID0gbWlkZGxlICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBiaWcgLS0+IGRlY3JlYXNlIGhpZ2hcclxuICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgfVxyXG4gICAgLy8gZGlkbnQgZmluZCBhbnl0aGluZy4gUmV0dXJuIC0xLlxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbi8qXHJcbiAqIEVhc2luZyBGdW5jdGlvbnMuXHJcbiAqIE9ubHkgY29uc2lkZXJpbmcgdGhlIHQgdmFsdWUgZm9yIHRoZSByYW5nZSBbMCwgMV0gPT4gWzAsIDFdLlxyXG4gKlxyXG4gKiBJbnNwaXJhdGlvbjogZnJvbSBodHRwOi8vZ2l6bWEuY29tL2Vhc2luZy9cclxuICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ3JlLzE2NTAyOTRcclxuICovXHJcbmNvbnN0IGVhc2luZ0Z1bmN0aW9ucyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgbm8gZWFzaW5nIGFuZCBubyBhY2NlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBsaW5lYXIodCkge1xyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5RdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiAoMiAtIHQpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDIgKiB0ICogdCA6IC0xICsgKDQgLSAyICogdCkgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5DdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRDdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gNCAqIHQgKiB0ICogdCA6ICh0IC0gMSkgKiAoMiAqIHQgLSAyKSAqICgyICogdCAtIDIpICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gMSAtIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gOCAqIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgKyAtLXQgKiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAxNiAqIHQgKiB0ICogdCAqIHQgKiB0IDogMSArIDE2ICogLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBFeHBlcmltZW50YWx5IGNvbXB1dGUgdGhlIHdpZHRoIG9mIHRoZSBzY3JvbGxiYXIgZm9yIHRoaXMgYnJvd3Nlci5cclxuICpcclxuICogQHJldHVybnMgVGhlIHdpZHRoIGluIHBpeGVscy5cclxuICovXHJcbmZ1bmN0aW9uIGdldFNjcm9sbEJhcldpZHRoKCkge1xyXG4gICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgIGlubmVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSBcIjIwMHB4XCI7XHJcbiAgICBjb25zdCBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBvdXRlci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgIG91dGVyLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuc3R5bGUud2lkdGggPSBcIjIwMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5oZWlnaHQgPSBcIjE1MHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcbiAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcclxuICAgIGNvbnN0IHcxID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwic2Nyb2xsXCI7XHJcbiAgICBsZXQgdzIgPSBpbm5lci5vZmZzZXRXaWR0aDtcclxuICAgIGlmICh3MSA9PSB3Mikge1xyXG4gICAgICAgIHcyID0gb3V0ZXIuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyKTtcclxuICAgIHJldHVybiB3MSAtIHcyO1xyXG59XHJcbi8vIEBUT0RPOiBUaGlzIGRvZXNuJ3Qgd29yayBwcm9wZXJseS5cclxuLy8gSXQgd29ya3Mgb25seSBmb3Igc2luZ2xlIHByb3BlcnR5IG9iamVjdHMsXHJcbi8vIG90aGVyd2lzZSBpdCBjb21iaW5lcyBhbGwgb2YgdGhlIHR5cGVzIGluIGEgdW5pb24uXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBWMT4gKFxyXG4vLyAgIHBpbGU6IFJlY29yZDxLMSwgdW5kZWZpbmVkIHwgVjE+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBLMSB8IFtLMV1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjFcclxuLy8gZXhwb3J0IGZ1bmN0aW9uIHRvcE1vc3Q8SzEgZXh0ZW5kcyBzdHJpbmcsIEsyIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjI+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgSzMgZXh0ZW5kcyBzdHJpbmcsIFYxLCBWMiwgVjM+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMiB8IFJlY29yZDxLMywgdW5kZWZpbmVkIHwgVjM+Pj5bXSxcclxuLy8gICBhY2Nlc3NvcnM6IFtLMSwgSzIsIEszXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyIHwgVjNcclxuLyoqXHJcbiAqIEdldCB0aGUgdG9wIG1vc3QgcHJvcGVydHkgdmFsdWUgZnJvbSBhIHBpbGUgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHBhcmFtIHBpbGUgLSBBcnJheSBvZiBvYmplY3RzLCBubyByZXF1aXJlZCBmb3JtYXQuXHJcbiAqIEBwYXJhbSBhY2Nlc3NvcnMgLSBBcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cclxuICogRm9yIGV4YW1wbGUgYG9iamVjdFsnZm9vJ11bJ2JhciddYCDihpIgYFsnZm9vJywgJ2JhciddYC5cclxuICogQHJldHVybnMgVmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpdGggZ2l2ZW4gYWNjZXNzb3JzIHBhdGggZnJvbSB0aGUgZmlyc3QgcGlsZSBpdGVtIHdoZXJlIGl0J3Mgbm90IHVuZGVmaW5lZC5cclxuICovXHJcbmZ1bmN0aW9uIHRvcE1vc3QocGlsZSwgYWNjZXNzb3JzKSB7XHJcbiAgICBsZXQgY2FuZGlkYXRlO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjY2Vzc29ycykpIHtcclxuICAgICAgICBhY2Nlc3NvcnMgPSBbYWNjZXNzb3JzXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHBpbGUpIHtcclxuICAgICAgICBpZiAobWVtYmVyKSB7XHJcbiAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG1lbWJlclthY2Nlc3NvcnNbMF1dO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFjY2Vzc29ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZVthY2Nlc3NvcnNbaV1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjYW5kaWRhdGU7XHJcbn1cblxuY29uc3QgaHRtbENvbG9ycyA9IHtcbiAgYmxhY2s6IFwiIzAwMDAwMFwiLFxuICBuYXZ5OiBcIiMwMDAwODBcIixcbiAgZGFya2JsdWU6IFwiIzAwMDA4QlwiLFxuICBtZWRpdW1ibHVlOiBcIiMwMDAwQ0RcIixcbiAgYmx1ZTogXCIjMDAwMEZGXCIsXG4gIGRhcmtncmVlbjogXCIjMDA2NDAwXCIsXG4gIGdyZWVuOiBcIiMwMDgwMDBcIixcbiAgdGVhbDogXCIjMDA4MDgwXCIsXG4gIGRhcmtjeWFuOiBcIiMwMDhCOEJcIixcbiAgZGVlcHNreWJsdWU6IFwiIzAwQkZGRlwiLFxuICBkYXJrdHVycXVvaXNlOiBcIiMwMENFRDFcIixcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IFwiIzAwRkE5QVwiLFxuICBsaW1lOiBcIiMwMEZGMDBcIixcbiAgc3ByaW5nZ3JlZW46IFwiIzAwRkY3RlwiLFxuICBhcXVhOiBcIiMwMEZGRkZcIixcbiAgY3lhbjogXCIjMDBGRkZGXCIsXG4gIG1pZG5pZ2h0Ymx1ZTogXCIjMTkxOTcwXCIsXG4gIGRvZGdlcmJsdWU6IFwiIzFFOTBGRlwiLFxuICBsaWdodHNlYWdyZWVuOiBcIiMyMEIyQUFcIixcbiAgZm9yZXN0Z3JlZW46IFwiIzIyOEIyMlwiLFxuICBzZWFncmVlbjogXCIjMkU4QjU3XCIsXG4gIGRhcmtzbGF0ZWdyYXk6IFwiIzJGNEY0RlwiLFxuICBsaW1lZ3JlZW46IFwiIzMyQ0QzMlwiLFxuICBtZWRpdW1zZWFncmVlbjogXCIjM0NCMzcxXCIsXG4gIHR1cnF1b2lzZTogXCIjNDBFMEQwXCIsXG4gIHJveWFsYmx1ZTogXCIjNDE2OUUxXCIsXG4gIHN0ZWVsYmx1ZTogXCIjNDY4MkI0XCIsXG4gIGRhcmtzbGF0ZWJsdWU6IFwiIzQ4M0Q4QlwiLFxuICBtZWRpdW10dXJxdW9pc2U6IFwiIzQ4RDFDQ1wiLFxuICBpbmRpZ286IFwiIzRCMDA4MlwiLFxuICBkYXJrb2xpdmVncmVlbjogXCIjNTU2QjJGXCIsXG4gIGNhZGV0Ymx1ZTogXCIjNUY5RUEwXCIsXG4gIGNvcm5mbG93ZXJibHVlOiBcIiM2NDk1RURcIixcbiAgbWVkaXVtYXF1YW1hcmluZTogXCIjNjZDREFBXCIsXG4gIGRpbWdyYXk6IFwiIzY5Njk2OVwiLFxuICBzbGF0ZWJsdWU6IFwiIzZBNUFDRFwiLFxuICBvbGl2ZWRyYWI6IFwiIzZCOEUyM1wiLFxuICBzbGF0ZWdyYXk6IFwiIzcwODA5MFwiLFxuICBsaWdodHNsYXRlZ3JheTogXCIjNzc4ODk5XCIsXG4gIG1lZGl1bXNsYXRlYmx1ZTogXCIjN0I2OEVFXCIsXG4gIGxhd25ncmVlbjogXCIjN0NGQzAwXCIsXG4gIGNoYXJ0cmV1c2U6IFwiIzdGRkYwMFwiLFxuICBhcXVhbWFyaW5lOiBcIiM3RkZGRDRcIixcbiAgbWFyb29uOiBcIiM4MDAwMDBcIixcbiAgcHVycGxlOiBcIiM4MDAwODBcIixcbiAgb2xpdmU6IFwiIzgwODAwMFwiLFxuICBncmF5OiBcIiM4MDgwODBcIixcbiAgc2t5Ymx1ZTogXCIjODdDRUVCXCIsXG4gIGxpZ2h0c2t5Ymx1ZTogXCIjODdDRUZBXCIsXG4gIGJsdWV2aW9sZXQ6IFwiIzhBMkJFMlwiLFxuICBkYXJrcmVkOiBcIiM4QjAwMDBcIixcbiAgZGFya21hZ2VudGE6IFwiIzhCMDA4QlwiLFxuICBzYWRkbGVicm93bjogXCIjOEI0NTEzXCIsXG4gIGRhcmtzZWFncmVlbjogXCIjOEZCQzhGXCIsXG4gIGxpZ2h0Z3JlZW46IFwiIzkwRUU5MFwiLFxuICBtZWRpdW1wdXJwbGU6IFwiIzkzNzBEOFwiLFxuICBkYXJrdmlvbGV0OiBcIiM5NDAwRDNcIixcbiAgcGFsZWdyZWVuOiBcIiM5OEZCOThcIixcbiAgZGFya29yY2hpZDogXCIjOTkzMkNDXCIsXG4gIHllbGxvd2dyZWVuOiBcIiM5QUNEMzJcIixcbiAgc2llbm5hOiBcIiNBMDUyMkRcIixcbiAgYnJvd246IFwiI0E1MkEyQVwiLFxuICBkYXJrZ3JheTogXCIjQTlBOUE5XCIsXG4gIGxpZ2h0Ymx1ZTogXCIjQUREOEU2XCIsXG4gIGdyZWVueWVsbG93OiBcIiNBREZGMkZcIixcbiAgcGFsZXR1cnF1b2lzZTogXCIjQUZFRUVFXCIsXG4gIGxpZ2h0c3RlZWxibHVlOiBcIiNCMEM0REVcIixcbiAgcG93ZGVyYmx1ZTogXCIjQjBFMEU2XCIsXG4gIGZpcmVicmljazogXCIjQjIyMjIyXCIsXG4gIGRhcmtnb2xkZW5yb2Q6IFwiI0I4ODYwQlwiLFxuICBtZWRpdW1vcmNoaWQ6IFwiI0JBNTVEM1wiLFxuICByb3N5YnJvd246IFwiI0JDOEY4RlwiLFxuICBkYXJra2hha2k6IFwiI0JEQjc2QlwiLFxuICBzaWx2ZXI6IFwiI0MwQzBDMFwiLFxuICBtZWRpdW12aW9sZXRyZWQ6IFwiI0M3MTU4NVwiLFxuICBpbmRpYW5yZWQ6IFwiI0NENUM1Q1wiLFxuICBwZXJ1OiBcIiNDRDg1M0ZcIixcbiAgY2hvY29sYXRlOiBcIiNEMjY5MUVcIixcbiAgdGFuOiBcIiNEMkI0OENcIixcbiAgbGlnaHRncmV5OiBcIiNEM0QzRDNcIixcbiAgcGFsZXZpb2xldHJlZDogXCIjRDg3MDkzXCIsXG4gIHRoaXN0bGU6IFwiI0Q4QkZEOFwiLFxuICBvcmNoaWQ6IFwiI0RBNzBENlwiLFxuICBnb2xkZW5yb2Q6IFwiI0RBQTUyMFwiLFxuICBjcmltc29uOiBcIiNEQzE0M0NcIixcbiAgZ2FpbnNib3JvOiBcIiNEQ0RDRENcIixcbiAgcGx1bTogXCIjRERBMEREXCIsXG4gIGJ1cmx5d29vZDogXCIjREVCODg3XCIsXG4gIGxpZ2h0Y3lhbjogXCIjRTBGRkZGXCIsXG4gIGxhdmVuZGVyOiBcIiNFNkU2RkFcIixcbiAgZGFya3NhbG1vbjogXCIjRTk5NjdBXCIsXG4gIHZpb2xldDogXCIjRUU4MkVFXCIsXG4gIHBhbGVnb2xkZW5yb2Q6IFwiI0VFRThBQVwiLFxuICBsaWdodGNvcmFsOiBcIiNGMDgwODBcIixcbiAga2hha2k6IFwiI0YwRTY4Q1wiLFxuICBhbGljZWJsdWU6IFwiI0YwRjhGRlwiLFxuICBob25leWRldzogXCIjRjBGRkYwXCIsXG4gIGF6dXJlOiBcIiNGMEZGRkZcIixcbiAgc2FuZHlicm93bjogXCIjRjRBNDYwXCIsXG4gIHdoZWF0OiBcIiNGNURFQjNcIixcbiAgYmVpZ2U6IFwiI0Y1RjVEQ1wiLFxuICB3aGl0ZXNtb2tlOiBcIiNGNUY1RjVcIixcbiAgbWludGNyZWFtOiBcIiNGNUZGRkFcIixcbiAgZ2hvc3R3aGl0ZTogXCIjRjhGOEZGXCIsXG4gIHNhbG1vbjogXCIjRkE4MDcyXCIsXG4gIGFudGlxdWV3aGl0ZTogXCIjRkFFQkQ3XCIsXG4gIGxpbmVuOiBcIiNGQUYwRTZcIixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiI0ZBRkFEMlwiLFxuICBvbGRsYWNlOiBcIiNGREY1RTZcIixcbiAgcmVkOiBcIiNGRjAwMDBcIixcbiAgZnVjaHNpYTogXCIjRkYwMEZGXCIsXG4gIG1hZ2VudGE6IFwiI0ZGMDBGRlwiLFxuICBkZWVwcGluazogXCIjRkYxNDkzXCIsXG4gIG9yYW5nZXJlZDogXCIjRkY0NTAwXCIsXG4gIHRvbWF0bzogXCIjRkY2MzQ3XCIsXG4gIGhvdHBpbms6IFwiI0ZGNjlCNFwiLFxuICBjb3JhbDogXCIjRkY3RjUwXCIsXG4gIGRhcmtvcmFuZ2U6IFwiI0ZGOEMwMFwiLFxuICBsaWdodHNhbG1vbjogXCIjRkZBMDdBXCIsXG4gIG9yYW5nZTogXCIjRkZBNTAwXCIsXG4gIGxpZ2h0cGluazogXCIjRkZCNkMxXCIsXG4gIHBpbms6IFwiI0ZGQzBDQlwiLFxuICBnb2xkOiBcIiNGRkQ3MDBcIixcbiAgcGVhY2hwdWZmOiBcIiNGRkRBQjlcIixcbiAgbmF2YWpvd2hpdGU6IFwiI0ZGREVBRFwiLFxuICBtb2NjYXNpbjogXCIjRkZFNEI1XCIsXG4gIGJpc3F1ZTogXCIjRkZFNEM0XCIsXG4gIG1pc3R5cm9zZTogXCIjRkZFNEUxXCIsXG4gIGJsYW5jaGVkYWxtb25kOiBcIiNGRkVCQ0RcIixcbiAgcGFwYXlhd2hpcDogXCIjRkZFRkQ1XCIsXG4gIGxhdmVuZGVyYmx1c2g6IFwiI0ZGRjBGNVwiLFxuICBzZWFzaGVsbDogXCIjRkZGNUVFXCIsXG4gIGNvcm5zaWxrOiBcIiNGRkY4RENcIixcbiAgbGVtb25jaGlmZm9uOiBcIiNGRkZBQ0RcIixcbiAgZmxvcmFsd2hpdGU6IFwiI0ZGRkFGMFwiLFxuICBzbm93OiBcIiNGRkZBRkFcIixcbiAgeWVsbG93OiBcIiNGRkZGMDBcIixcbiAgbGlnaHR5ZWxsb3c6IFwiI0ZGRkZFMFwiLFxuICBpdm9yeTogXCIjRkZGRkYwXCIsXG4gIHdoaXRlOiBcIiNGRkZGRkZcIixcbn07XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gKi9cbmxldCBDb2xvclBpY2tlciQxID0gY2xhc3MgQ29sb3JQaWNrZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwaXhlbFJhdGlvID0gMSkge1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiAyODkgLyAyLCB5OiAyODkgLyAyIH07XG4gICAgdGhpcy5yID0gMjg5ICogMC40OTtcbiAgICB0aGlzLmNvbG9yID0geyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhOiAxLjAgfTtcbiAgICB0aGlzLmh1ZUNpcmNsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmluaXRpYWxDb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5wcmV2aW91c0NvbG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuXG4gICAgLy8gYm91bmQgYnlcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gKCkgPT4ge307XG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gKCkgPT4ge307XG5cbiAgICAvLyBjcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgIHRoaXMuX2NyZWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgaW5zZXJ0cyB0aGUgY29sb3JQaWNrZXIgaW50byBhIGRpdiBmcm9tIHRoZSBET01cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAgICovXG4gIGluc2VydFRvKGNvbnRhaW5lcikge1xuICAgIGlmICh0aGlzLmhhbW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhhbW1lci5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhhbW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuXG4gICAgdGhpcy5fc2V0U2l6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldFVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIG9uIGFwcGx5IGFuZCBzYXZlLiBCaW5kIGl0IHRvIHRoZSBhcHBsaWNhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgc2V0Q2xvc2VDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIGNsb3NpbmcgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lzQ29sb3JTdHJpbmcoY29sb3IpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gaHRtbENvbG9yc1tjb2xvcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29sb3Igb2YgdGhlIGNvbG9yUGlja2VyXG4gICAqIFN1cHBvcnRlZCBmb3JtYXRzOlxuICAgKiAncmVkJyAgICAgICAgICAgICAgICAgICAtLT4gSFRNTCBjb2xvciBzdHJpbmdcbiAgICogJyNmZmZmZmYnICAgICAgICAgICAgICAgLS0+IGhleCBzdHJpbmdcbiAgICogJ3JnYigyNTUsMjU1LDI1NSknICAgICAgLS0+IHJnYiBzdHJpbmdcbiAgICogJ3JnYmEoMjU1LDI1NSwyNTUsMS4wKScgLS0+IHJnYmEgc3RyaW5nXG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NX0gICAgIC0tPiByZ2Igb2JqZWN0XG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NSxhOjEuMH0gLS0+IHJnYmEgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgb2JqZWN0fSBjb2xvclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqL1xuICBzZXRDb2xvcihjb2xvciwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICBpZiAoY29sb3IgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJnYmE7XG5cbiAgICAvLyBpZiBhIGh0bWwgY29sb3Igc2hvcnRoYW5kIGlzIHVzZWQsIGNvbnZlcnQgdG8gaGV4XG4gICAgY29uc3QgaHRtbENvbG9yID0gdGhpcy5faXNDb2xvclN0cmluZyhjb2xvcik7XG4gICAgaWYgKGh0bWxDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IGh0bWxDb2xvcjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3JtYXRcbiAgICBpZiAoaXNTdHJpbmcoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICBpZiAoaXNWYWxpZFJHQihjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDQpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA1KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYmFBcnJheVswXSwgZzogcmdiYUFycmF5WzFdLCBiOiByZ2JhQXJyYXlbMl0sIGE6IDEuMCB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkUkdCQShjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDUpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA2KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7XG4gICAgICAgICAgcjogcmdiYUFycmF5WzBdLFxuICAgICAgICAgIGc6IHJnYmFBcnJheVsxXSxcbiAgICAgICAgICBiOiByZ2JhQXJyYXlbMl0sXG4gICAgICAgICAgYTogcmdiYUFycmF5WzNdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkSGV4KGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZ2JPYmogPSBoZXhUb1JHQihjb2xvcik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYk9iai5yLCBnOiByZ2JPYmouZywgYjogcmdiT2JqLmIsIGE6IDEuMCB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29sb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbG9yLnIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmIgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBhbHBoYSA9IGNvbG9yLmEgIT09IHVuZGVmaW5lZCA/IGNvbG9yLmEgOiBcIjEuMFwiO1xuICAgICAgICAgIHJnYmEgPSB7IHI6IGNvbG9yLnIsIGc6IGNvbG9yLmcsIGI6IGNvbG9yLmIsIGE6IGFscGhhIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBpZiAocmdiYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biBjb2xvciBwYXNzZWQgdG8gdGhlIGNvbG9yUGlja2VyLiBTdXBwb3J0ZWQgYXJlIHN0cmluZ3M6IHJnYiwgaGV4LCByZ2JhLiBPYmplY3Q6IHJnYiAoe3I6cixnOmcsYjpiLFthOmFdfSkuIFN1cHBsaWVkOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29sb3IpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzaG93cyB0aGUgY29sb3IgcGlja2VyLlxuICAgKiBUaGUgaHVlIGNpcmNsZSBpcyBjb25zdHJ1Y3RlZCBvbmNlIGFuZCBzdG9yZWQuXG4gICAqL1xuICBzaG93KCkge1xuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrKCk7XG4gICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIHRoaXMuX2dlbmVyYXRlSHVlQ2lyY2xlKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFJJVkFURSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwaWNrZXIuIElzIGNhbGxlZCBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogT3B0aW9uYWwgYm9vbGVhbiB0byBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIGVhc3kgYWNjZXNzIGxhdGVyIG9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdG9yZVByZXZpb3VzPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGlkZShzdG9yZVByZXZpb3VzID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBwcmV2aW91cyBjb2xvciBmb3IgbmV4dCB0aW1lO1xuICAgIGlmIChzdG9yZVByZXZpb3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnByZXZpb3VzQ29sb3IgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbG9yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHBsaWVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuaW5pdGlhbENvbG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblxuICAgIC8vIGNhbGwgdGhlIGNsb3NpbmcgY2FsbGJhY2ssIHJlc3RvcmluZyB0aGUgb25jbGljayBtZXRob2QuXG4gICAgLy8gdGhpcyBpcyBpbiBhIHNldFRpbWVvdXQgYmVjYXVzZSBpdCB3aWxsIHRyaWdnZXIgdGhlIHNob3cgYWdhaW4gYmVmb3JlIHRoZSBjbGljayBpcyBkb25lLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2xvc2VDYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gdGhlIHNhdmUgYnV0dG9uLiBTYXZlcyBhbmQgaGlkZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2F2ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuY29sb3IpO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuX2hpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCb3VuZCB0byBhcHBseSBidXR0b24uIFNhdmVzIGJ1dCBkb2VzIG5vdCBjbG9zZS4gSXMgdW5kb25lIGJ5IHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FwcGx5KCkge1xuICAgIHRoaXMuYXBwbGllZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogbG9hZCB0aGUgY29sb3IgZnJvbSB0aGUgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkTGFzdCgpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c0NvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0Q29sb3IodGhpcy5wcmV2aW91c0NvbG9yLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsZXJ0KFwiVGhlcmUgaXMgbm8gbGFzdCBjb2xvciB0byBsb2FkLi4uXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGNvbG9yLCBwbGFjZSB0aGUgcGlja2VyXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZ2JhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NldEluaXRpYWw9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBpbml0aWFsIGNvbG9yXG4gICAgaWYgKHNldEluaXRpYWwgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgcmdiYSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvciA9IHJnYmE7XG4gICAgY29uc3QgaHN2ID0gUkdCVG9IU1YocmdiYS5yLCByZ2JhLmcsIHJnYmEuYik7XG5cbiAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAyICogTWF0aC5QSTtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLnIgKiBoc3YucztcbiAgICBjb25zdCB4ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcbiAgICBjb25zdCB5ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIHggLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICB5IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudEhlaWdodCArIFwicHhcIjtcblxuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcihyZ2JhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBvcGFjaXR5IGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0T3BhY2l0eSh2YWx1ZSkge1xuICAgIHRoaXMuY29sb3IuYSA9IHZhbHVlIC8gMTAwO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcih0aGlzLmNvbG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBicmlnaHRuZXNzIGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QnJpZ2h0bmVzcyh2YWx1ZSkge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi52ID0gdmFsdWUgLyAxMDA7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgY29sb3IgcGlja2VyLiBBIGJsYWNrIGNpcmNsZSBvdmVybGF5cyB0aGUgaHVlIGNpcmNsZSB0byBtaW1pYyB0aGUgYnJpZ2h0bmVzcyBkZWNyZWFzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZVBpY2tlcihyZ2JhID0gdGhpcy5jb2xvcikge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgfVxuICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuXG4gICAgY3R4LnB1dEltYWdlRGF0YSh0aGlzLmh1ZUNpcmNsZSwgMCwgMCk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgwLDAsMCxcIiArICgxIC0gaHN2LnYpICsgXCIpXCI7XG4gICAgY3R4LmNpcmNsZSh0aGlzLmNlbnRlckNvb3JkaW5hdGVzLngsIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSwgdGhpcy5yKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudmFsdWUgPSAxMDAgKiBoc3YudjtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IDEwMCAqIHJnYmEuYTtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgY3JlYXRlIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFNpemUoKSB7XG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLndpZHRoID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuaGVpZ2h0ID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhbGwgZG9tIGVsZW1lbnRzXG4gICAqIFRPRE86IGNsZWFudXAsIGxvdHMgb2Ygc2ltaWxhciBkb20gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5mcmFtZS5jbGFzc05hbWUgPSBcInZpcy1jb2xvci1waWNrZXJcIjtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsYXNzTmFtZSA9IFwidmlzLXNlbGVjdG9yXCI7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcblxuICAgIGlmICghdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KSB7XG4gICAgICBjb25zdCBub0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIik7XG4gICAgICBub0NhbnZhcy5zdHlsZS5jb2xvciA9IFwicmVkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5wYWRkaW5nID0gXCIxMHB4XCI7XG4gICAgICBub0NhbnZhcy5pbm5lclRleHQgPSBcIkVycm9yOiB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBIVE1MIGNhbnZhc1wiO1xuICAgICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5hcHBlbmRDaGlsZChub0NhbnZhcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgKGN0eC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAxKTtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXNcbiAgICAgICAgLmdldENvbnRleHQoXCIyZFwiKVxuICAgICAgICAuc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbG9yXCI7XG5cbiAgICB0aGlzLm9wYWNpdHlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eURpdi5jbGFzc05hbWUgPSBcInZpcy1vcGFjaXR5XCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0Rpdi5jbGFzc05hbWUgPSBcInZpcy1icmlnaHRuZXNzXCI7XG5cbiAgICB0aGlzLmFycm93RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmFycm93RGl2LmNsYXNzTmFtZSA9IFwidmlzLWFycm93XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS50eXBlID0gXCJyYW5nZVwiOyAvLyBOb3Qgc3VwcG9ydGVkIG9uIElFOVxuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWluID0gXCIwXCI7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5tYXggPSBcIjEwMFwiO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVE9ETzogQWRkIHNvbWUgZXJyb3IgaGFuZGxpbmcuXG4gICAgfVxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gXCIxMDBcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5jbGFzc05hbWUgPSBcInZpcy1yYW5nZVwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2LmFwcGVuZENoaWxkKHRoaXMub3BhY2l0eVJhbmdlKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuYXBwZW5kQ2hpbGQodGhpcy5icmlnaHRuZXNzUmFuZ2UpO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmlucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLWJyaWdodG5lc3NcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbC5pbm5lclRleHQgPSBcImJyaWdodG5lc3M6XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLW9wYWNpdHlcIjtcbiAgICB0aGlzLm9wYWNpdHlMYWJlbC5pbm5lclRleHQgPSBcIm9wYWNpdHk6XCI7XG5cbiAgICB0aGlzLm5ld0NvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmNsYXNzTmFtZSA9IFwidmlzLW5ldy1jb2xvclwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuaW5uZXJUZXh0ID0gXCJuZXdcIjtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1pbml0aWFsLWNvbG9yXCI7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuaW5uZXJUZXh0ID0gXCJpbml0aWFsXCI7XG5cbiAgICB0aGlzLmNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1jYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5pbm5lclRleHQgPSBcImNhbmNlbFwiO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9oaWRlLmJpbmQodGhpcywgZmFsc2UpO1xuXG4gICAgdGhpcy5hcHBseUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5pbm5lclRleHQgPSBcImFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fYXBwbHkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2F2ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5zYXZlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtc2F2ZVwiO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5pbm5lclRleHQgPSBcInNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24ub25jbGljayA9IHRoaXMuX3NhdmUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubG9hZEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5sb2FkQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtbG9hZFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5pbm5lclRleHQgPSBcImxvYWQgbGFzdFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fbG9hZExhc3QuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFycm93RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0xhYmVsKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uZXdDb2xvckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmluaXRpYWxDb2xvckRpdik7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY2FuY2VsQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYXBwbHlCdXR0b24pO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5zYXZlQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubG9hZEJ1dHRvbik7XG4gIH1cblxuICAvKipcbiAgICogYmluZCBoYW1tZXIgdG8gdGhlIGNvbG9yIHBpY2tlclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JpbmRIYW1tZXIoKSB7XG4gICAgdGhpcy5kcmFnID0ge307XG4gICAgdGhpcy5waW5jaCA9IHt9O1xuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lciQxKHRoaXMuY29sb3JQaWNrZXJDYW52YXMpO1xuICAgIHRoaXMuaGFtbWVyLmdldChcInBpbmNoXCIpLnNldCh7IGVuYWJsZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuaGFtbWVyLm9uKFwiaGFtbWVyLmlucHV0XCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmlzRmlyc3QpIHtcbiAgICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5zdGFydFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5tb3ZlXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbmVuZFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2VuZXJhdGUgdGhlIGh1ZSBjaXJjbGUuIFRoaXMgaXMgcmVsYXRpdmVseSBoZWF2eSAoMjAwbXMpIGFuZCBpcyBkb25lIG9ubHkgb25jZSBvbiB0aGUgZmlyc3QgdGltZSBpdCBpcyBzaG93bi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZW5lcmF0ZUh1ZUNpcmNsZSgpIHtcbiAgICBpZiAodGhpcy5nZW5lcmF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIDEpO1xuICAgICAgfVxuICAgICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG5cbiAgICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgaCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gZHJhdyBodWUgY2lyY2xlXG4gICAgICBsZXQgeCwgeSwgaHVlLCBzYXQ7XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiB3ICogMC41LCB5OiBoICogMC41IH07XG4gICAgICB0aGlzLnIgPSAwLjQ5ICogdztcbiAgICAgIGNvbnN0IGFuZ2xlQ29udmVydCA9ICgyICogTWF0aC5QSSkgLyAzNjA7XG4gICAgICBjb25zdCBoZmFjID0gMSAvIDM2MDtcbiAgICAgIGNvbnN0IHNmYWMgPSAxIC8gdGhpcy5yO1xuICAgICAgbGV0IHJnYjtcbiAgICAgIGZvciAoaHVlID0gMDsgaHVlIDwgMzYwOyBodWUrKykge1xuICAgICAgICBmb3IgKHNhdCA9IDA7IHNhdCA8IHRoaXMucjsgc2F0KyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy54ICsgc2F0ICogTWF0aC5zaW4oYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICB5ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy55ICsgc2F0ICogTWF0aC5jb3MoYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICByZ2IgPSBIU1ZUb1JHQihodWUgKiBoZmFjLCBzYXQgKiBzZmFjLCAxKTtcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2IoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIpXCI7XG4gICAgICAgICAgY3R4LmZpbGxSZWN0KHggLSAwLjUsIHkgLSAwLjUsIDIsIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsMSlcIjtcbiAgICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIHRoaXMuaHVlQ2lyY2xlID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIHNlbGVjdG9yLiBUaGlzIGlzIGNhbGxlZCBieSBoYW1tZXIgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlU2VsZWN0b3IoZXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jb2xvclBpY2tlckRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBsZWZ0ID0gZXZlbnQuY2VudGVyLnggLSByZWN0LmxlZnQ7XG4gICAgY29uc3QgdG9wID0gZXZlbnQuY2VudGVyLnkgLSByZWN0LnRvcDtcblxuICAgIGNvbnN0IGNlbnRlclkgPSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyRGl2LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBjZW50ZXJYID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRXaWR0aDtcblxuICAgIGNvbnN0IHggPSBsZWZ0IC0gY2VudGVyWDtcbiAgICBjb25zdCB5ID0gdG9wIC0gY2VudGVyWTtcblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMih4LCB5KTtcbiAgICBjb25zdCByYWRpdXMgPSAwLjk4ICogTWF0aC5taW4oTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpLCBjZW50ZXJYKTtcblxuICAgIGNvbnN0IG5ld1RvcCA9IE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclk7XG4gICAgY29uc3QgbmV3TGVmdCA9IE1hdGguc2luKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclg7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUudG9wID1cbiAgICAgIG5ld1RvcCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLmxlZnQgPVxuICAgICAgbmV3TGVmdCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRXaWR0aCArIFwicHhcIjtcblxuICAgIC8vIHNldCBjb2xvclxuICAgIGxldCBoID0gYW5nbGUgLyAoMiAqIE1hdGguUEkpO1xuICAgIGggPSBoIDwgMCA/IGggKyAxIDogaDtcbiAgICBjb25zdCBzID0gcmFkaXVzIC8gdGhpcy5yO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi5oID0gaDtcbiAgICBoc3YucyA9IHM7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuXG4gICAgLy8gdXBkYXRlIHByZXZpZXdzXG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmNvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gIH1cbn07XG5cbi8qKlxuICogV3JhcCBnaXZlbiB0ZXh0IChsYXN0IGFyZ3VtZW50KSBpbiBIVE1MIGVsZW1lbnRzIChhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cykuXG4gKlxuICogQHBhcmFtIHsuLi5hbnl9IHJlc3QgLSBMaXN0IG9mIHRhZyBuYW1lcyBmb2xsb3dlZCBieSBpbm5lciB0ZXh0LlxuICogQHJldHVybnMgQW4gZWxlbWVudCBvciBhIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gd3JhcEluVGFnKC4uLnJlc3QpIHtcbiAgaWYgKHJlc3QubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cy5cIik7XG4gIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVzdFswXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmVzdFswXSk7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoLi4ucmVzdC5zbGljZSgxKSkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHdheSB0aGlzIHdvcmtzIGlzIGZvciBhbGwgcHJvcGVydGllcyBvZiB0aGlzLnBvc3NpYmxlIG9wdGlvbnMsIHlvdSBjYW4gc3VwcGx5IHRoZSBwcm9wZXJ0eSBuYW1lIGluIGFueSBmb3JtIHRvIGxpc3QgdGhlIG9wdGlvbnMuXG4gKiBCb29sZWFuIG9wdGlvbnMgYXJlIHJlY29nbmlzZWQgYXMgQm9vbGVhblxuICogTnVtYmVyIG9wdGlvbnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtkZWZhdWx0IHZhbHVlLCBtaW4gdmFsdWUsIG1heCB2YWx1ZSwgc3RlcHNpemVdXG4gKiBDb2xvcnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFsnY29sb3InLCAnI2ZmZmZmZiddXG4gKiBTdHJpbmdzIHdpdGggc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtvcHRpb24xLCBvcHRpb24yLCBvcHRpb24zLCAuLl1cbiAqXG4gKiBUaGUgb3B0aW9ucyBhcmUgbWF0Y2hlZCB3aXRoIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiBlYWNoIG9mIHRoZSBtb2R1bGVzIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYXJlXG4gKi9cbmxldCBDb25maWd1cmF0b3IkMSA9IGNsYXNzIENvbmZpZ3VyYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50TW9kdWxlICAgICAgICB8IHRoZSBsb2NhdGlvbiB3aGVyZSBwYXJlbnRNb2R1bGUuc2V0T3B0aW9ucygpIGNhbiBiZSBjYWxsZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRDb250YWluZXIgICAgfCB0aGUgZGVmYXVsdCBjb250YWluZXIgb2YgdGhlIG1vZHVsZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlndXJlT3B0aW9ucyAgICB8IHRoZSBmdWxseSBjb25maWd1cmVkIGFuZCBwcmVkZWZpbmVkIG9wdGlvbnMgc2V0IGZvdW5kIGluIGFsbE9wdGlvbnMuanNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBpeGVsUmF0aW8gICAgICAgICAgfCBjYW52YXMgcGl4ZWwgcmF0aW9cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGlkZU9wdGlvbiAgICAgICAgfCBjdXN0b20gbG9naWMgdG8gZHluYW1pY2FsbHkgaGlkZSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnRNb2R1bGUsXG4gICAgZGVmYXVsdENvbnRhaW5lcixcbiAgICBjb25maWd1cmVPcHRpb25zLFxuICAgIHBpeGVsUmF0aW8gPSAxLFxuICAgIGhpZGVPcHRpb24gPSAoKSA9PiBmYWxzZVxuICApIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudE1vZHVsZTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG4gICAgdGhpcy5jb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyO1xuICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaGlkZU9wdGlvbiA9IGhpZGVPcHRpb247XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5wb3B1cENvdW50ZXIgPSAwO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgIGNvbnRhaW5lcjogdW5kZWZpbmVkLFxuICAgICAgc2hvd0J1dHRvbjogdHJ1ZSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuY29uZmlndXJlT3B0aW9ucyA9IGNvbmZpZ3VyZU9wdGlvbnM7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0ge307XG4gICAgdGhpcy5kb21FbGVtZW50cyA9IFtdO1xuICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB0aGlzLnBvcHVwTGltaXQgPSA1O1xuICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgdGhpcy5jb2xvclBpY2tlciA9IG5ldyBDb2xvclBpY2tlciQxKHBpeGVsUmF0aW8pO1xuICAgIHRoaXMud3JhcHBlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoIGFsbCBvcHRpb25zLlxuICAgKiBCZWNhdXNlIGFsbCBtb2R1bGVzIHBhcnNlIHRoZWlyIG9wdGlvbnMgYnkgdGhlbXNlbHZlcywgd2UganVzdCB1c2UgdGhlaXIgb3B0aW9ucy4gV2UgY29weSB0aGVtIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXNldCB0aGUgcG9wdXAgaGlzdG9yeSBiZWNhdXNlIHRoZSBpbmRpY2VzIG1heSBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuXG4gICAgICBsZXQgZW5hYmxlZCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuam9pbigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbnMgY2Fubm90IGJlIG51bGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0J1dHRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3dCdXR0b24gPSBvcHRpb25zLnNob3dCdXR0b247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgIGVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICBlbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICB9XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kdWxlT3B0aW9uc1xuICAgKi9cbiAgc2V0TW9kdWxlT3B0aW9ucyhtb2R1bGVPcHRpb25zKSB7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0gbW9kdWxlT3B0aW9ucztcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NyZWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMgPSBbXTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMub3B0aW9ucy5maWx0ZXI7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gdGhpcy5jb25maWd1cmVPcHRpb25zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlndXJlT3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICAgICAgc2hvdyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc2hvdyA9IGZpbHRlcihvcHRpb24sIFtdKTtcbiAgICAgICAgICBzaG93ID1cbiAgICAgICAgICAgIHNob3cgfHxcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnNbb3B0aW9uXSwgW29wdGlvbl0sIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIuaW5kZXhPZihvcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIGxpbmVicmVhayBiZXR3ZWVuIGNhdGVnb3JpZXNcbiAgICAgICAgICBpZiAoY291bnRlciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VJdGVtKFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYSBoZWFkZXIgZm9yIHRoZSBjYXRlZ29yeVxuICAgICAgICAgIHRoaXMuX21ha2VIZWFkZXIob3B0aW9uKTtcblxuICAgICAgICAgIC8vIGdldCB0aGUgc3ViIG9wdGlvbnNcbiAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dKTtcbiAgICAgICAgfVxuICAgICAgICBjb3VudGVyKys7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX21ha2VCdXR0b24oKTtcbiAgICB0aGlzLl9wdXNoKCk7XG4gICAgLy9+IHRoaXMuY29sb3JQaWNrZXIuaW5zZXJ0VG8odGhpcy5jb250YWluZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRyYXcgYWxsIERPTSBlbGVtZW50cyBvbiB0aGUgc2NyZWVuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHVzaCgpIHtcbiAgICB0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMud3JhcHBlci5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uLXdyYXBwZXJcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuZG9tRWxlbWVudHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX3Nob3dQb3B1cElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogZGVsZXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5yZW1vdmVDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53cmFwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcblxuICAgIHRoaXMuX3JlbW92ZVBvcHVwKCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBhY3R1YWxPcHRpb25zIGlmIGl0IGV4aXN0c1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0VmFsdWUocGF0aCkge1xuICAgIGxldCBiYXNlID0gdGhpcy5tb2R1bGVPcHRpb25zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJhc2VbcGF0aFtpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBiYXNlID0gYmFzZVtwYXRoW2ldXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGwgb3B0aW9uIGVsZW1lbnRzIGFyZSB3cmFwcGVkIGluIGFuIGl0ZW1cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnQ+fSBkb21FbGVtZW50c1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VJdGVtKHBhdGgsIC4uLmRvbUVsZW1lbnRzKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBpdGVtLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1pdGVtIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgICBkb21FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogaGVhZGVyIGZvciBtYWpvciBzdWJqZWN0c1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VIZWFkZXIobmFtZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1oZWFkZXJcIjtcbiAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZTtcbiAgICB0aGlzLl9tYWtlSXRlbShbXSwgZGl2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgbGFiZWwsIGlmIGl0IGlzIGFuIG9iamVjdCBsYWJlbCwgaXQgZ2V0cyBkaWZmZXJlbnQgc3R5bGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RMYWJlbFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUxhYmVsKG5hbWUsIHBhdGgsIG9iamVjdExhYmVsID0gZmFsc2UpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWxhYmVsIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgaWYgKG9iamVjdExhYmVsID09PSB0cnVlKSB7XG4gICAgICB3aGlsZSAoZGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIGRpdi5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoXCJpXCIsIFwiYlwiLCBuYW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBuYW1lICsgXCI6XCI7XG4gICAgfVxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGRyb3Bkb3duIGxpc3QgZm9yIG11bHRpcGxlIHBvc3NpYmxlIHN0cmluZyBvcHRvaW5zXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgIHNlbGVjdC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctc2VsZWN0XCI7XG4gICAgbGV0IHNlbGVjdGVkVmFsdWUgPSAwO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYXJyLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gYXJyLmluZGV4T2YodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgb3B0aW9uLnZhbHVlID0gYXJyW2ldO1xuICAgICAgaWYgKGkgPT09IHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gXCJzZWxlY3RlZFwiO1xuICAgICAgfVxuICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IGFycltpXTtcbiAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBzZWxlY3Qub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBzZWxlY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSByYW5nZSBvYmplY3QgZm9yIG51bWVyaWMgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VSYW5nZShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXJyWzBdO1xuICAgIGNvbnN0IG1pbiA9IGFyclsxXTtcbiAgICBjb25zdCBtYXggPSBhcnJbMl07XG4gICAgY29uc3Qgc3RlcCA9IGFyclszXTtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICByYW5nZS5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctcmFuZ2VcIjtcbiAgICB0cnkge1xuICAgICAgcmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gbm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHJhbmdlLm1pbiA9IG1pbjtcbiAgICAgIHJhbmdlLm1heCA9IG1heDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICByYW5nZS5zdGVwID0gc3RlcDtcblxuICAgIC8vIHNldCB1cCB0aGUgcG9wdXAgc2V0dGluZ3MgaW4gY2FzZSB0aGV5IGFyZSBuZWVkZWQuXG4gICAgbGV0IHBvcHVwU3RyaW5nID0gXCJcIjtcbiAgICBsZXQgcG9wdXBWYWx1ZSA9IDA7XG5cbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmFjdG9yID0gMS4yO1xuICAgICAgaWYgKHZhbHVlIDwgMCAmJiB2YWx1ZSAqIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgKiBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIC8gZmFjdG9yIDwgbWluKSB7XG4gICAgICAgIHJhbmdlLm1pbiA9IE1hdGguY2VpbCh2YWx1ZSAvIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5taW47XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAqIGZhY3RvciA+IG1heCAmJiBtYXggIT09IDEpIHtcbiAgICAgICAgcmFuZ2UubWF4ID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1heDtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfVxuICAgICAgcmFuZ2UudmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgaW5wdXQuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlaW5wdXRcIjtcbiAgICBpbnB1dC52YWx1ZSA9IHJhbmdlLnZhbHVlO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgbWUuX3VwZGF0ZShOdW1iZXIodGhpcy52YWx1ZSksIHBhdGgpO1xuICAgIH07XG4gICAgcmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgcmFuZ2UsIGlucHV0KTtcblxuICAgIC8vIGlmIGEgcG9wdXAgaXMgbmVlZGVkIEFORCBpdCBoYXMgbm90IGJlZW4gc2hvd24gZm9yIHRoaXMgdmFsdWUsIHNob3cgaXQuXG4gICAgaWYgKHBvcHVwU3RyaW5nICE9PSBcIlwiICYmIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gIT09IHBvcHVwVmFsdWUpIHtcbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gPSBwb3B1cFZhbHVlO1xuICAgICAgdGhpcy5fc2V0dXBQb3B1cChwb3B1cFN0cmluZywgaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGJ1dHRvbiBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0J1dHRvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZ2VuZXJhdGVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvblwiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uaW5uZXJUZXh0ID0gXCJnZW5lcmF0ZSBvcHRpb25zXCI7XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9wcmludE9wdGlvbnMoKTtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3ZlciA9ICgpID0+IHtcbiAgICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiBob3ZlclwiO1xuICAgICAgfTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLm9ubW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLW9wdGlvbi1jb250YWluZXJcIjtcblxuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKHRoaXMub3B0aW9uc0NvbnRhaW5lcik7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goZ2VuZXJhdGVCdXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwcmVwYXJlIHRoZSBwb3B1cFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldHVwUG9wdXAoc3RyaW5nLCBpbmRleCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5wb3B1cENvdW50ZXIgPCB0aGlzLnBvcHVwTGltaXRcbiAgICApIHtcbiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBkaXYuaWQgPSBcInZpcy1jb25maWd1cmF0aW9uLXBvcHVwXCI7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmlubmVyVGV4dCA9IHN0cmluZztcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyICs9IDE7XG4gICAgICB0aGlzLnBvcHVwRGl2ID0geyBodG1sOiBkaXYsIGluZGV4OiBpbmRleCB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmUgdGhlIHBvcHVwIGZyb20gdGhlIGRvbVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZVBvcHVwKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmhpZGVUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBwb3B1cCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd1BvcHVwSWZOZWVkZWQoKSB7XG4gICAgaWYgKHRoaXMucG9wdXBEaXYuaHRtbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudHNbdGhpcy5wb3B1cERpdi5pbmRleF07XG4gICAgICBjb25zdCByZWN0ID0gY29ycmVzcG9uZGluZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5zdHlsZS50b3AgPSByZWN0LnRvcCAtIDMwICsgXCJweFwiOyAvLyAzMCBpcyB0aGUgaGVpZ2h0O1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwRGl2Lmh0bWwpO1xuICAgICAgdGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICB9LCAxNTAwKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuZGVsZXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfSwgMTgwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBjaGVja2JveCBmb3IgYm9vbGVhbiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQ2hlY2tib3goZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy5jaGVja2VkLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgY2hlY2tib3gpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSB0ZXh0IGlucHV0IGZpZWxkIGZvciBzdHJpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZVRleHRJbnB1dChkZWZhdWx0VmFsdWUsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgY2hlY2tib3gudHlwZSA9IFwidGV4dFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy10ZXh0XCI7XG4gICAgY2hlY2tib3gudmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy52YWx1ZSwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY29sb3IgZmllbGQgd2l0aCBhIGNvbG9yIHBpY2tlciBmb3IgY29sb3IgZmllbGRzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRDb2xvciA9IGFyclsxXTtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICE9PSBcIm5vbmVcIikge1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jb2xvckJsb2NrXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9jayBub25lXCI7XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbG9yIDogdmFsdWU7XG4gICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogdXNlZCBieSB0aGUgY29sb3IgYnV0dG9ucyB0byBjYWxsIHRoZSBjb2xvciBwaWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBkaXZcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpIHtcbiAgICAvLyBjbGVhciB0aGUgY2FsbGJhY2sgZnJvbSB0aGlzIGRpdlxuICAgIGRpdi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKGRpdik7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zaG93KCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENvbG9yKHZhbHVlKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldFVwZGF0ZUNhbGxiYWNrKChjb2xvcikgPT4ge1xuICAgICAgY29uc3QgY29sb3JTdHJpbmcgPVxuICAgICAgICBcInJnYmEoXCIgKyBjb2xvci5yICsgXCIsXCIgKyBjb2xvci5nICsgXCIsXCIgKyBjb2xvci5iICsgXCIsXCIgKyBjb2xvci5hICsgXCIpXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JTdHJpbmc7XG4gICAgICB0aGlzLl91cGRhdGUoY29sb3JTdHJpbmcsIHBhdGgpO1xuICAgIH0pO1xuXG4gICAgLy8gb24gY2xvc2Ugb2YgdGhlIGNvbG9ycGlja2VyLCByZXN0b3JlIHRoZSBjYWxsYmFjay5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENsb3NlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogcGFyc2UgYW4gb2JqZWN0IGFuZCBkcmF3IHRoZSBjb3JyZWN0IGl0ZW1zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtBcnJheX0gW3BhdGg9W11dICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tPbmx5PWZhbHNlXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVPYmplY3Qob2JqLCBwYXRoID0gW10sIGNoZWNrT25seSA9IGZhbHNlKSB7XG4gICAgbGV0IHNob3cgPSBmYWxzZTtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCB2aXNpYmxlSW5TZXQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHN1Yk9iaiBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBzdWJPYmopKSB7XG4gICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICBjb25zdCBpdGVtID0gb2JqW3N1Yk9ial07XG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgc3ViT2JqKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIoc3ViT2JqLCBwYXRoKTtcblxuICAgICAgICAgIC8vIGlmIG5lZWRlZCB3ZSBtdXN0IGdvIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICAgICAgaWYgKHNob3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGl0ZW0pICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICAgICAgICBpdGVtIGluc3RhbmNlb2YgT2JqZWN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgIHNob3cgPSB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGNoZWNrT25seSA9PT0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdmlzaWJsZUluU2V0ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKG5ld1BhdGgpO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycmF5KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlVGV4dElucHV0KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIHNraXAgdGhlIG9wdGlvbnMgdGhhdCBhcmUgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5oaWRlT3B0aW9uKHBhdGgsIHN1Yk9iaiwgdGhpcy5tb2R1bGVPcHRpb25zKSkge1xuICAgICAgICAgICAgICAvLyBpbml0aWFsbHkgY29sbGFwc2Ugb3B0aW9ucyB3aXRoIGFuIGRpc2FibGVkIGVuYWJsZWQgb3B0aW9uLlxuICAgICAgICAgICAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmFibGVkUGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShuZXdQYXRoLCBcImVuYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoZW5hYmxlZFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChlbmFibGVkVmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgICB2aXNpYmxlSW5TZXQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlQ2hlY2tib3goaXRlbSwgZW5hYmxlZFZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwoc3ViT2JqLCBuZXdQYXRoLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdChpdGVtLCBuZXdQYXRoKSB8fCB2aXNpYmxlSW5TZXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImRvbnQga25vdyBob3cgdG8gaGFuZGxlXCIsIGl0ZW0sIHN1Yk9iaiwgbmV3UGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlSW5TZXQ7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSBhcnJheSB0eXBlIG9mIG9wdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUFycmF5KGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIiAmJiBhcnJbMF0gPT09IFwiY29sb3JcIikge1xuICAgICAgdGhpcy5fbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzFdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9tYWtlRHJvcGRvd24oYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogTnVtYmVyKHZhbHVlKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGVkIHRvIHVwZGF0ZSB0aGUgbmV0d29yayB3aXRoIHRoZSBuZXcgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGUodmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBhcmVudC5ib2R5ICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIgJiZcbiAgICAgIHRoaXMucGFyZW50LmJvZHkuZW1pdHRlci5lbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdChcImNvbmZpZ0NoYW5nZVwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5wYXJlbnQuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IGJvb2xlYW59IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHt7fX0gb3B0aW9uc09ialxuICAgKiBAcmV0dXJucyB7e319XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCwgb3B0aW9uc09iaiA9IHt9KSB7XG4gICAgbGV0IHBvaW50ZXIgPSBvcHRpb25zT2JqO1xuXG4gICAgLy8gd2hlbiBkcm9wZG93biBib3hlcyBjYW4gYmUgc3RyaW5nIG9yIGJvb2xlYW4sIHdlIHR5cGVjYXN0IGl0IGludG8gY29ycmVjdCB0eXBlc1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdmFsdWU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXRoW2ldICE9PSBcImdsb2JhbFwiKSB7XG4gICAgICAgIGlmIChwb2ludGVyW3BhdGhbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBhdGgubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHBvaW50ZXIgPSBwb2ludGVyW3BhdGhbaV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvaW50ZXJbcGF0aFtpXV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc09iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByaW50T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG5cbiAgICB3aGlsZSAodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm9wdGlvbnNDb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChcbiAgICAgIHdyYXBJblRhZyhcInByZVwiLCBcImNvbnN0IG9wdGlvbnMgPSBcIiArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMsIG51bGwsIDIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge3t9fSBvcHRpb25zXG4gICAqL1xuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hhbmdlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2NvbnN0cnVjdE9wdGlvbnMoXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0udmFsdWUsXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0ucGF0aCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn07XG5cbi8qKlxuICogUG9wdXAgaXMgYSBjbGFzcyB0byBjcmVhdGUgYSBwb3B1cCB3aW5kb3cgd2l0aCBzb21lIHRleHRcbiAqL1xubGV0IFBvcHVwJDEgPSBjbGFzcyBQb3B1cCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgICAgICBUaGUgY29udGFpbmVyIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvdmVyZmxvd01ldGhvZCAgSG93IHRoZSBwb3B1cCBzaG91bGQgYWN0IHRvIG92ZXJmbG93aW5nICgnZmxpcCcgb3IgJ2NhcCcpXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIG92ZXJmbG93TWV0aG9kKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5vdmVyZmxvd01ldGhvZCA9IG92ZXJmbG93TWV0aG9kIHx8IFwiY2FwXCI7XG5cbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5wYWRkaW5nID0gNTtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBmcmFtZVxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtdG9vbHRpcFwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4ICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcG9wdXAgd2luZG93XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgc2V0UG9zaXRpb24oeCwgeSkge1xuICAgIHRoaXMueCA9IHBhcnNlSW50KHgpO1xuICAgIHRoaXMueSA9IHBhcnNlSW50KHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29udGVudCBmb3IgdGhlIHBvcHVwIHdpbmRvdy4gVGhpcyBjYW4gYmUgSFRNTCBjb2RlIG9yIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgRWxlbWVudH0gY29udGVudFxuICAgKi9cbiAgc2V0VGV4dChjb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICB3aGlsZSAodGhpcy5mcmFtZS5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0cmluZyBjb250YWluaW5nIGxpdGVyYWwgdGV4dCwgZWxlbWVudCBoYXMgdG8gYmUgdXNlZCBmb3IgSFRNTCBkdWUgdG9cbiAgICAgIC8vIFhTUyByaXNrcyBhc3NvY2lhdGVkIHdpdGggaW5uZXJIVE1MIChpLmUuIHByZXZlbnQgWFNTIGJ5IGFjY2lkZW50KS5cbiAgICAgIHRoaXMuZnJhbWUuaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgd2luZG93XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvU2hvd10gICAgU2hvdyBvciBoaWRlIHRoZSB3aW5kb3dcbiAgICovXG4gIHNob3coZG9TaG93KSB7XG4gICAgaWYgKGRvU2hvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb1Nob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkb1Nob3cgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmZyYW1lLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudFdpZHRoO1xuXG4gICAgICBsZXQgbGVmdCA9IDAsXG4gICAgICAgIHRvcCA9IDA7XG5cbiAgICAgIGlmICh0aGlzLm92ZXJmbG93TWV0aG9kID09IFwiZmxpcFwiKSB7XG4gICAgICAgIGxldCBpc0xlZnQgPSBmYWxzZSxcbiAgICAgICAgICBpc1RvcCA9IHRydWU7IC8vIFdoZXJlIGFyb3VuZCB0aGUgcG9zaXRpb24gaXQncyBsb2NhdGVkXG5cbiAgICAgICAgaWYgKHRoaXMueSAtIGhlaWdodCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzVG9wID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy54ICsgd2lkdGggPiBtYXhXaWR0aCAtIHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzTGVmdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMZWZ0KSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMueCAtIHdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUb3ApIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIGlmICh0b3AgKyBoZWlnaHQgKyB0aGlzLnBhZGRpbmcgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICB0b3AgPSBtYXhIZWlnaHQgLSBoZWlnaHQgLSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvcCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIHRvcCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIGlmIChsZWZ0ICsgd2lkdGggKyB0aGlzLnBhZGRpbmcgPiBtYXhXaWR0aCkge1xuICAgICAgICAgIGxlZnQgPSBtYXhXaWR0aCAtIHdpZHRoIC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWZ0IDwgdGhpcy5wYWRkaW5nKSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcbiAgICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZSk7IC8vIFJlbW92ZSBlbGVtZW50IGZyb20gRE9NXG4gIH1cbn07XG5cbmxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5sZXQgYWxsT3B0aW9ucztcblxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDEgPSBcImJhY2tncm91bmQ6ICNGRmVlZWU7IGNvbG9yOiAjZGQwMDAwXCI7XG5cbi8qKlxuICogIFVzZWQgdG8gdmFsaWRhdGUgb3B0aW9ucy5cbiAqL1xubGV0IFZhbGlkYXRvciQxID0gY2xhc3MgVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWJPYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBzdWJPYmplY3QpIHtcbiAgICBlcnJvckZvdW5kID0gZmFsc2U7XG4gICAgYWxsT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgbGV0IHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9ucztcbiAgICBpZiAoc3ViT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9uc1tzdWJPYmplY3RdO1xuICAgIH1cbiAgICBWYWxpZGF0b3IucGFyc2Uob3B0aW9ucywgdXNlZE9wdGlvbnMsIFtdKTtcbiAgICByZXR1cm4gZXJyb3JGb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIHRyYXZlcnNlIGFuIG9iamVjdCByZWN1cnNpdmVseSBhbmQgY2hlY2sgZXZlcnkgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICAgIFZhbGlkYXRvci5jaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBldmVyeSB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbCB0aGUgcGFyc2UgZnVuY3Rpb24gb24gdGhhdCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpIHtcbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIFZhbGlkYXRvci5nZXRTdWdnZXN0aW9uKG9wdGlvbiwgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlZmVyZW5jZU9wdGlvbiA9IG9wdGlvbjtcbiAgICBsZXQgaXNfb2JqZWN0ID0gdHJ1ZTtcblxuICAgIGlmIChcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnNbb3B0aW9uXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICByZWZlcmVuY2VPcHRpb25zLl9fYW55X18gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTk9URTogVGhpcyBvbmx5IHRyaWdnZXJzIGlmIHRoZSBfX2FueV9fIGlzIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgLy8gICAgICAgVEhBVCdTIEEgUkVBTExZIEJBRCBQTEFDRSBUTyBBTExPVyBJVCEhISFcbiAgICAgIC8vIFRPRE86IEV4YW1pbmUgaWYgbmVlZGVkLCByZW1vdmUgaWYgcG9zc2libGVcblxuICAgICAgLy8gX19hbnlfXyBpcyBhIHdpbGRjYXJkLiBBbnkgdmFsdWUgaXMgYWNjZXB0ZWQgYW5kIHdpbGwgYmUgZnVydGhlciBhbmFseXNlZCBieSByZWZlcmVuY2UuXG4gICAgICByZWZlcmVuY2VPcHRpb24gPSBcIl9fYW55X19cIjtcblxuICAgICAgLy8gaWYgdGhlIGFueS1zdWJncm91cCBpcyBub3QgYSBwcmVkZWZpbmVkIG9iamVjdCBpbiB0aGUgY29uZmlndXJhdG9yLFxuICAgICAgLy8gd2UgZG8gbm90IGxvb2sgZGVlcGVyIGludG8gdGhlIG9iamVjdC5cbiAgICAgIGlzX29iamVjdCA9IFZhbGlkYXRvci5nZXRUeXBlKG9wdGlvbnNbb3B0aW9uXSkgPT09IFwib2JqZWN0XCI7XG4gICAgfVxuXG4gICAgbGV0IHJlZk9wdGlvbk9iaiA9IHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXTtcbiAgICBpZiAoaXNfb2JqZWN0ICYmIHJlZk9wdGlvbk9iai5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWZPcHRpb25PYmogPSByZWZPcHRpb25PYmouX190eXBlX187XG4gICAgfVxuXG4gICAgVmFsaWRhdG9yLmNoZWNrRmllbGRzKFxuICAgICAgb3B0aW9uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb24sXG4gICAgICByZWZPcHRpb25PYmosXG4gICAgICBwYXRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIG9wdGlvbiAgICAgICAgICAgfCB0aGUgb3B0aW9uIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgb3B0aW9ucyAgICAgICAgICB8IFRoZSBzdXBwbGllZCBvcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge29iamVjdH0gIHJlZmVyZW5jZU9wdGlvbnMgfCBUaGUgcmVmZXJlbmNlIG9wdGlvbnMgY29udGFpbmluZyBhbGwgb3B0aW9ucyBhbmQgdGhlaXIgYWxsb3dlZCBmb3JtYXRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgcmVmZXJlbmNlT3B0aW9uICB8IFVzdWFsbHkgdGhpcyBpcyB0aGUgc2FtZSBhcyBvcHRpb24sIGV4Y2VwdCB3aGVuIGhhbmRsaW5nIGFuIF9fYW55X18gdGFnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZk9wdGlvbk9iaiAgICAgfCBUaGlzIGlzIHRoZSB0eXBlIG9iamVjdCBmcm9tIHRoZSByZWZlcmVuY2Ugb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSAgIHBhdGggICAgICAgICAgICAgfCB3aGVyZSBpbiB0aGUgb2JqZWN0IGlzIHRoZSBvcHRpb25cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNoZWNrRmllbGRzKFxuICAgIG9wdGlvbixcbiAgICBvcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgIHJlZk9wdGlvbk9iaixcbiAgICBwYXRoXG4gICkge1xuICAgIGNvbnN0IGxvZyA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjXCIgKyBtZXNzYWdlICsgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKSxcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvblR5cGUgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pO1xuICAgIGNvbnN0IHJlZk9wdGlvblR5cGUgPSByZWZPcHRpb25PYmpbb3B0aW9uVHlwZV07XG5cbiAgICBpZiAocmVmT3B0aW9uVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpZiB0aGUgdHlwZSBpcyBjb3JyZWN0LCB3ZSBjaGVjayBpZiBpdCBpcyBzdXBwb3NlZCB0byBiZSBvbmUgb2YgYSBmZXcgc2VsZWN0IHZhbHVlc1xuICAgICAgaWYgKFxuICAgICAgICBWYWxpZGF0b3IuZ2V0VHlwZShyZWZPcHRpb25UeXBlKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgIHJlZk9wdGlvblR5cGUuaW5kZXhPZihvcHRpb25zW29wdGlvbl0pID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICAnSW52YWxpZCBvcHRpb24gZGV0ZWN0ZWQgaW4gXCInICtcbiAgICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgICAnXCIuJyArXG4gICAgICAgICAgICBcIiBBbGxvd2VkIHZhbHVlcyBhcmU6XCIgK1xuICAgICAgICAgICAgVmFsaWRhdG9yLnByaW50KHJlZk9wdGlvblR5cGUpICtcbiAgICAgICAgICAgICcgbm90IFwiJyArXG4gICAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICAgJ1wiLiAnXG4gICAgICAgICk7XG4gICAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25UeXBlID09PSBcIm9iamVjdFwiICYmIHJlZmVyZW5jZU9wdGlvbiAhPT0gXCJfX2FueV9fXCIpIHtcbiAgICAgICAgcGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcHRpb24pO1xuICAgICAgICBWYWxpZGF0b3IucGFyc2UoXG4gICAgICAgICAgb3B0aW9uc1tvcHRpb25dLFxuICAgICAgICAgIHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWZPcHRpb25PYmpbXCJhbnlcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdHlwZSBvZiB0aGUgZmllbGQgaXMgaW5jb3JyZWN0IGFuZCB0aGUgZmllbGQgY2Fubm90IGJlIGFueVxuICAgICAgbG9nKFxuICAgICAgICAnSW52YWxpZCB0eXBlIHJlY2VpdmVkIGZvciBcIicgK1xuICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgJ1wiLiBFeHBlY3RlZDogJyArXG4gICAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKHJlZk9wdGlvbk9iaikpICtcbiAgICAgICAgICBcIi4gUmVjZWl2ZWQgW1wiICtcbiAgICAgICAgICBvcHRpb25UeXBlICtcbiAgICAgICAgICAnXSBcIicgK1xuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSArXG4gICAgICAgICAgJ1wiJ1xuICAgICAgKTtcbiAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcgfCBBcnJheS48bnVtYmVyPiB8IERhdGUgfCBOb2RlIHwgTW9tZW50IHwgdW5kZWZpbmVkIHwgbnVsbH0gb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRUeXBlKG9iamVjdCkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xuXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Lm5vZGVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFwiZG9tXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Ll9pc0FNb21lbnRPYmplY3QgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIFwibW9tZW50XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRTdWdnZXN0aW9uKG9wdGlvbiwgb3B0aW9ucywgcGF0aCkge1xuICAgIGNvbnN0IGxvY2FsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCBmYWxzZSk7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBhbGxPcHRpb25zLCBbXSwgdHJ1ZSk7XG5cbiAgICBjb25zdCBsb2NhbFNlYXJjaFRocmVzaG9sZCA9IDg7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoVGhyZXNob2xkID0gNDtcblxuICAgIGxldCBtc2c7XG4gICAgaWYgKGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgJ1BlcmhhcHMgaXQgd2FzIGluY29tcGxldGU/IERpZCB5b3UgbWVhbjogXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guaW5kZXhNYXRjaCArXG4gICAgICAgICdcIj9cXG5cXG4nO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBnbG9iYWxTZWFyY2guZGlzdGFuY2UgPD0gZ2xvYmFsU2VhcmNoVGhyZXNob2xkICYmXG4gICAgICBsb2NhbFNlYXJjaC5kaXN0YW5jZSA+IGdsb2JhbFNlYXJjaC5kaXN0YW5jZVxuICAgICkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgXCJQZXJoYXBzIGl0IHdhcyBtaXNwbGFjZWQ/IE1hdGNoaW5nIG9wdGlvbiBmb3VuZCBhdDogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihcbiAgICAgICAgICBnbG9iYWxTZWFyY2gucGF0aCxcbiAgICAgICAgICBnbG9iYWxTZWFyY2guY2xvc2VzdE1hdGNoLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxvY2FsU2VhcmNoLmRpc3RhbmNlIDw9IGxvY2FsU2VhcmNoVGhyZXNob2xkKSB7XG4gICAgICBtc2cgPVxuICAgICAgICAnLiBEaWQgeW91IG1lYW4gXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guY2xvc2VzdE1hdGNoICtcbiAgICAgICAgJ1wiPycgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPVxuICAgICAgICBcIi4gRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZTogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnQoT2JqZWN0LmtleXMob3B0aW9ucykpICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6IFwiJyArIG9wdGlvbiArICdcIicgKyBtc2csXG4gICAgICBWQUxJREFUT1JfUFJJTlRfU1RZTEUkMVxuICAgICk7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2UgdGhlIG9wdGlvbnMgaW4gc2VhcmNoIGZvciBhIG1hdGNoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWN1cnNpdmU9ZmFsc2VdXG4gICAqIEByZXR1cm5zIHt7Y2xvc2VzdE1hdGNoOiBzdHJpbmcsIHBhdGg6IEFycmF5LCBkaXN0YW5jZTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCByZWN1cnNpdmUgPSBmYWxzZSkge1xuICAgIGxldCBtaW4gPSAxZTk7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaCA9IFwiXCI7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaFBhdGggPSBbXTtcbiAgICBjb25zdCBsb3dlckNhc2VPcHRpb24gPSBvcHRpb24udG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgaW5kZXhNYXRjaCA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IG9wIGluIG9wdGlvbnMpIHtcbiAgICAgIGxldCBkaXN0YW5jZTtcbiAgICAgIGlmIChvcHRpb25zW29wXS5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkICYmIHJlY3Vyc2l2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBWYWxpZGF0b3IuZmluZEluT3B0aW9ucyhcbiAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgb3B0aW9uc1tvcF0sXG4gICAgICAgICAgY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIG9wKVxuICAgICAgICApO1xuICAgICAgICBpZiAobWluID4gcmVzdWx0LmRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gcmVzdWx0LmNsb3Nlc3RNYXRjaDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gcmVzdWx0LnBhdGg7XG4gICAgICAgICAgbWluID0gcmVzdWx0LmRpc3RhbmNlO1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSByZXN1bHQuaW5kZXhNYXRjaDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihsb3dlckNhc2VPcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSBvcDtcbiAgICAgICAgfVxuICAgICAgICBkaXN0YW5jZSA9IFZhbGlkYXRvci5sZXZlbnNodGVpbkRpc3RhbmNlKG9wdGlvbiwgb3ApO1xuICAgICAgICBpZiAobWluID4gZGlzdGFuY2UpIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2ggPSBvcDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gY29weUFycmF5KHBhdGgpO1xuICAgICAgICAgIG1pbiA9IGRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZXN0TWF0Y2g6IGNsb3Nlc3RNYXRjaCxcbiAgICAgIHBhdGg6IGNsb3Nlc3RNYXRjaFBhdGgsXG4gICAgICBkaXN0YW5jZTogbWluLFxuICAgICAgaW5kZXhNYXRjaDogaW5kZXhNYXRjaCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiwgcHJlZml4ID0gXCJQcm9ibGVtIHZhbHVlIGZvdW5kIGF0OiBcXG5cIikge1xuICAgIGxldCBzdHIgPSBcIlxcblxcblwiICsgcHJlZml4ICsgXCJvcHRpb25zID0ge1xcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpICsgMTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gcGF0aFtpXSArIFwiOiB7XFxuXCI7XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggKyAxOyBqKyspIHtcbiAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgfVxuICAgIHN0ciArPSBvcHRpb24gKyBcIlxcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggLSBpOyBqKyspIHtcbiAgICAgICAgc3RyICs9IFwiICBcIjtcbiAgICAgIH1cbiAgICAgIHN0ciArPSBcIn1cXG5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0ciArIFwiXFxuXFxuXCI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHByaW50KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3B0aW9ucylcbiAgICAgIC5yZXBsYWNlKC8oXCIpfChcXFspfChcXF0pfCgsXCJfX3R5cGVfX1wiKS9nLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoLygsKS9nLCBcIiwgXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqICBDb21wdXRlIHRoZSBlZGl0IGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBnaXZlbiBzdHJpbmdzXG4gICAqIGh0dHA6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL1N0cmluZ3MvTGV2ZW5zaHRlaW5fZGlzdGFuY2UjSmF2YVNjcmlwdFxuICAgKlxuICAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQW5kcmVpIE1hY2tlbnppZVxuICAgKlxuICAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgKlxuICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgICpcbiAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGxldmVuc2h0ZWluRGlzdGFuY2UoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGEubGVuZ3RoO1xuXG4gICAgY29uc3QgbWF0cml4ID0gW107XG5cbiAgICAvLyBpbmNyZW1lbnQgYWxvbmcgdGhlIGZpcnN0IGNvbHVtbiBvZiBlYWNoIHJvd1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4W2ldID0gW2ldO1xuICAgIH1cblxuICAgIC8vIGluY3JlbWVudCBlYWNoIGNvbHVtbiBpbiB0aGUgZmlyc3Qgcm93XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cblxuICAgIC8vIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIG1hdHJpeFxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT0gYS5jaGFyQXQoaiAtIDEpKSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2kgLSAxXVtqIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgICAgICBtYXRyaXhbaSAtIDFdW2ogLSAxXSArIDEsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgIG1hdHJpeFtpXVtqIC0gMV0gKyAxLCAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqXSArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApOyAvLyBkZWxldGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xuICB9XG59O1xuXG5jb25zdCBBY3RpdmF0b3IgPSBBY3RpdmF0b3IkMTtcclxuY29uc3QgQ29sb3JQaWNrZXIgPSBDb2xvclBpY2tlciQxO1xyXG5jb25zdCBDb25maWd1cmF0b3IgPSBDb25maWd1cmF0b3IkMTtcclxuY29uc3QgSGFtbWVyID0gSGFtbWVyJDE7XHJcbmNvbnN0IFBvcHVwID0gUG9wdXAkMTtcclxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFID0gVkFMSURBVE9SX1BSSU5UX1NUWUxFJDE7XHJcbmNvbnN0IFZhbGlkYXRvciA9IFZhbGlkYXRvciQxO1xuXG5leHBvcnQgeyBBY3RpdmF0b3IsIEFsZWEsIENvbG9yUGlja2VyLCBDb25maWd1cmF0b3IsIERFTEVURSwgSFNWVG9IZXgsIEhTVlRvUkdCLCBIYW1tZXIsIFBvcHVwLCBSR0JUb0hTViwgUkdCVG9IZXgsIFZBTElEQVRPUl9QUklOVF9TVFlMRSwgVmFsaWRhdG9yLCBhZGRDbGFzc05hbWUsIGFkZENzc1RleHQsIGJpbmFyeVNlYXJjaEN1c3RvbSwgYmluYXJ5U2VhcmNoVmFsdWUsIGJyaWRnZU9iamVjdCwgY29weUFuZEV4dGVuZEFycmF5LCBjb3B5QXJyYXksIGRlZXBFeHRlbmQsIGRlZXBPYmplY3RBc3NpZ24sIGVhc2luZ0Z1bmN0aW9ucywgZXF1YWxBcnJheSwgZXh0ZW5kLCBmaWxsSWZEZWZpbmVkLCBmb3JFYWNoLCBnZXRBYnNvbHV0ZUxlZnQsIGdldEFic29sdXRlUmlnaHQsIGdldEFic29sdXRlVG9wLCBnZXRTY3JvbGxCYXJXaWR0aCwgZ2V0VGFyZ2V0LCBnZXRUeXBlLCBoYXNQYXJlbnQsIGhleFRvSFNWLCBoZXhUb1JHQiwgaW5zZXJ0U29ydCwgaXNEYXRlLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1ZhbGlkSGV4LCBpc1ZhbGlkUkdCLCBpc1ZhbGlkUkdCQSwgbWVyZ2VPcHRpb25zLCBvcHRpb24sIG92ZXJyaWRlT3BhY2l0eSwgcGFyc2VDb2xvciwgcHJldmVudERlZmF1bHQsIHB1cmVEZWVwT2JqZWN0QXNzaWduLCByZWN1cnNpdmVET01EZWxldGUsIHJlbW92ZUNsYXNzTmFtZSwgcmVtb3ZlQ3NzVGV4dCwgc2VsZWN0aXZlQnJpZGdlT2JqZWN0LCBzZWxlY3RpdmVEZWVwRXh0ZW5kLCBzZWxlY3RpdmVFeHRlbmQsIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsIHRocm90dGxlLCB0b0FycmF5LCB0b3BNb3N0LCB1cGRhdGVQcm9wZXJ0eSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmlzLXV0aWwuanMubWFwXG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ29uc3RydWN0b3IoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xudmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgbmF0aXZlQ29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgUmVmbGVjdC5jb25zdHJ1Y3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmNvbnN0cnVjdFxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEobmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcblxudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxudmFyIEZPUkNFRCA9IE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHO1xuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiBGT1JDRUQgfSwge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhQ29uc3RydWN0b3IoVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhQ29uc3RydWN0b3IoYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gbmF0aXZlQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICBhcHBseShwdXNoLCAkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChhcHBseShiaW5kLCBUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3RQcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBhcHBseShUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5SZWZsZWN0LmNvbnN0cnVjdDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcmVmbGVjdC9jb25zdHJ1Y3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9yZWZsZWN0L2NvbnN0cnVjdFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xufTtcblxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSkgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIga2V5LCBkZXNjcmlwdG9yO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSA9IGtleXNbaW5kZXgrK10pO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yc1wiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgIT09IGRlZmluZVByb3BlcnRpZXMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnRpZXM6IGRlZmluZVByb3BlcnRpZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoVCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVCwgRCk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMuc2hhbSkgZGVmaW5lUHJvcGVydGllcy5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzXCIpOyIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3QvY3JlYXRlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBzZXRQcm90b3R5cGVPZjogc2V0UHJvdG90eXBlT2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL29iamVjdC9zZXQtcHJvdG90eXBlLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL2JpbmQnKTtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfc2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRzZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkY3JlYXRlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZ2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfZ2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRnZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBfT2JqZWN0JGdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsICJ2YXIgX1N5bWJvbCA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCIpO1xudmFyIF9TeW1ib2wkaXRlcmF0b3IgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qc1wiKTtcbmZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgX1N5bWJvbCRpdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gX1N5bWJvbCAmJiBvICE9PSBfU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzKSwgX3R5cGVvZihvKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvaW5zdGFuY2UvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL2Zvci1lYWNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZID0gL1xcblxccyphdCBbXjpdKjpbXlxcbl0qLztcbnZhciBJU19WOF9PUl9DSEFLUkFfU1RBQ0sgPSBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkudGVzdChURVNUKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChJU19WOF9PUl9DSEFLUkFfU1RBQ0sgJiYgdHlwZW9mIHN0YWNrID09ICdzdHJpbmcnICYmICEkRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcbiAgICB3aGlsZSAoZHJvcEVudHJpZXMtLSkgc3RhY2sgPSByZXBsYWNlKHN0YWNrLCBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlksICcnKTtcbiAgfSByZXR1cm4gc3RhY2s7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY2xlYXJFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyJyk7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUnKTtcblxuLy8gbm9uLXN0YW5kYXJkIFY4XG52YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXJyb3IsIEMsIHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIHtcbiAgICBpZiAoY2FwdHVyZVN0YWNrVHJhY2UpIGNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBDKTtcbiAgICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY2xlYXJFcnJvclN0YWNrKHN0YWNrLCBkcm9wRW50cmllcykpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgUmVzdWx0UHJvdG90eXBlID0gUmVzdWx0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIHVuYm91bmRGdW5jdGlvbiwgb3B0aW9ucykge1xuICB2YXIgdGhhdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGF0O1xuICB2YXIgQVNfRU5UUklFUyA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5BU19FTlRSSUVTKTtcbiAgdmFyIElTX1JFQ09SRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19SRUNPUkQpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX1JFQ09SRCkge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGUuaXRlcmF0b3I7XG4gIH0gZWxzZSBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAoIWl0ZXJGbikgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoaXRlcmFibGUpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZXJhYmxlKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbEZuKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSwgaXRlckZuKTtcbiAgfVxuXG4gIG5leHQgPSBJU19SRUNPUkQgPyBpdGVyYWJsZS5uZXh0IDogaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxGbihzdGVwLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCAkZGVmYXVsdCkge1xuICByZXR1cm4gYXJndW1lbnQgPT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gJycgOiAkZGVmYXVsdCA6IHRvU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgaW5zdGFsbEVycm9yQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZScpO1xudmFyIGluc3RhbGxFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBub3JtYWxpemVTdHJpbmdBcmd1bWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG52YXIgJEFnZ3JlZ2F0ZUVycm9yID0gZnVuY3Rpb24gQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBtZXNzYWdlIC8qICwgb3B0aW9ucyAqLykge1xuICB2YXIgaXNJbnN0YW5jZSA9IGlzUHJvdG90eXBlT2YoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIHRoaXMpO1xuICB2YXIgdGhhdDtcbiAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgdGhhdCA9IHNldFByb3RvdHlwZU9mKG5ldyAkRXJyb3IoKSwgaXNJbnN0YW5jZSA/IGdldFByb3RvdHlwZU9mKHRoaXMpIDogQWdncmVnYXRlRXJyb3JQcm90b3R5cGUpO1xuICB9IGVsc2Uge1xuICAgIHRoYXQgPSBpc0luc3RhbmNlID8gdGhpcyA6IGNyZWF0ZShBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsIFRPX1NUUklOR19UQUcsICdFcnJvcicpO1xuICB9XG4gIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnbWVzc2FnZScsIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KG1lc3NhZ2UpKTtcbiAgaW5zdGFsbEVycm9yU3RhY2sodGhhdCwgJEFnZ3JlZ2F0ZUVycm9yLCB0aGF0LnN0YWNrLCAxKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSBpbnN0YWxsRXJyb3JDYXVzZSh0aGF0LCBhcmd1bWVudHNbMl0pO1xuICB2YXIgZXJyb3JzQXJyYXkgPSBbXTtcbiAgaXRlcmF0ZShlcnJvcnMsIHB1c2gsIHsgdGhhdDogZXJyb3JzQXJyYXkgfSk7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnZXJyb3JzJywgZXJyb3JzQXJyYXkpO1xuICByZXR1cm4gdGhhdDtcbn07XG5cbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoJEFnZ3JlZ2F0ZUVycm9yLCAkRXJyb3IpO1xuZWxzZSBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKCRBZ2dyZWdhdGVFcnJvciwgJEVycm9yLCB7IG5hbWU6IHRydWUgfSk7XG5cbnZhciBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSA9ICRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUgPSBjcmVhdGUoJEVycm9yLnByb3RvdHlwZSwge1xuICBjb25zdHJ1Y3RvcjogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICRBZ2dyZWdhdGVFcnJvciksXG4gIG1lc3NhZ2U6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnJyksXG4gIG5hbWU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnQWdncmVnYXRlRXJyb3InKVxufSk7XG5cbi8vIGBBZ2dyZWdhdGVFcnJvcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWdncmVnYXRlLWVycm9yLWNvbnN0cnVjdG9yXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDIgfSwge1xuICBBZ2dyZWdhdGVFcnJvcjogJEFnZ3JlZ2F0ZUVycm9yXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoQ29uc3RydWN0b3IsIFNQRUNJRVMsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICAgIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCBpc051bGxPclVuZGVmaW5lZChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUNvbnN0cnVjdG9yKFMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gLyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgc2V0ID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyICRsb2NhdGlvbiwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbmZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gRGVubyB0aHJvd3MgYSBSZWZlcmVuY2VFcnJvciBvbiBgbG9jYXRpb25gIGFjY2VzcyB3aXRob3V0IGAtLWxvY2F0aW9uYCBmbGFnXG4gICRsb2NhdGlvbiA9IGdsb2JhbC5sb2NhdGlvbjtcbn0pO1xuXG52YXIgcnVuID0gZnVuY3Rpb24gKGlkKSB7XG4gIGlmIChoYXNPd24ocXVldWUsIGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG5cbnZhciBydW5uZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBydW4oaWQpO1xuICB9O1xufTtcblxudmFyIGV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuKGV2ZW50LmRhdGEpO1xufTtcblxudmFyIGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gb2xkIGVuZ2luZXMgaGF2ZSBub3QgbG9jYXRpb24ub3JpZ2luXG4gIGdsb2JhbC5wb3N0TWVzc2FnZShTdHJpbmcoaWQpLCAkbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgJGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShoYW5kbGVyKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXIgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAoSVNfTk9ERSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3cocnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICAvLyBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzYyNFxuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsICYmICFJU19JT1MpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBldmVudExpc3RlbmVyO1xuICAgIGRlZmVyID0gYmluZChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0KTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoXG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiZcbiAgICBpc0NhbGxhYmxlKGdsb2JhbC5wb3N0TWVzc2FnZSkgJiZcbiAgICAhZ2xvYmFsLmltcG9ydFNjcmlwdHMgJiZcbiAgICAkbG9jYXRpb24gJiYgJGxvY2F0aW9uLnByb3RvY29sICE9PSAnZmlsZTonICYmXG4gICAgIWZhaWxzKGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIpXG4gICkge1xuICAgIGRlZmVyID0gZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlcjtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhlYWQgPSBudWxsO1xuICB0aGlzLnRhaWwgPSBudWxsO1xufTtcblxuUXVldWUucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdmFyIGVudHJ5ID0geyBpdGVtOiBpdGVtLCBuZXh0OiBudWxsIH07XG4gICAgdmFyIHRhaWwgPSB0aGlzLnRhaWw7XG4gICAgaWYgKHRhaWwpIHRhaWwubmV4dCA9IGVudHJ5O1xuICAgIGVsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgdGhpcy50YWlsID0gZW50cnk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbnRyeSA9IHRoaXMuaGVhZDtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHZhciBuZXh0ID0gdGhpcy5oZWFkID0gZW50cnkubmV4dDtcbiAgICAgIGlmIChuZXh0ID09PSBudWxsKSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgcmV0dXJuIGVudHJ5Lml0ZW07XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1ZXVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvaXBhZHxpcGhvbmV8aXBvZC9pLnRlc3QodXNlckFnZW50KSAmJiB0eXBlb2YgUGViYmxlICE9ICd1bmRlZmluZWQnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfSU9TX1BFQkJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZScpO1xudmFyIElTX1dFQk9TX1dFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0Jyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG4vLyBOb2RlLmpzIDExIHNob3dzIEV4cGVyaW1lbnRhbFdhcm5pbmcgb24gZ2V0dGluZyBgcXVldWVNaWNyb3Rhc2tgXG52YXIgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgbWljcm90YXNrID0gcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yICYmIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvci52YWx1ZTtcbnZhciBub3RpZnksIHRvZ2dsZSwgbm9kZSwgcHJvbWlzZSwgdGhlbjtcblxuLy8gbW9kZXJuIGVuZ2luZXMgaGF2ZSBxdWV1ZU1pY3JvdGFzayBtZXRob2RcbmlmICghbWljcm90YXNrKSB7XG4gIHZhciBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChmbiA9IHF1ZXVlLmdldCgpKSB0cnkge1xuICAgICAgZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHF1ZXVlLmhlYWQpIG5vdGlmeSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgLy8gYWxzbyBleGNlcHQgV2ViT1MgV2Via2l0IGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84OThcbiAgaWYgKCFJU19JT1MgJiYgIUlTX05PREUgJiYgIUlTX1dFQk9TX1dFQktJVCAmJiBNdXRhdGlvbk9ic2VydmVyICYmIGRvY3VtZW50KSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoIUlTX0lPU19QRUJCTEUgJiYgUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAvLyB3b3JrYXJvdW5kIG9mIFdlYktpdCB+IGlPUyBTYWZhcmkgMTAuMSBidWdcbiAgICBwcm9taXNlLmNvbnN0cnVjdG9yID0gUHJvbWlzZTtcbiAgICB0aGVuID0gYmluZChwcm9taXNlLnRoZW4sIHByb21pc2UpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIE5vZGUuanMgd2l0aG91dCBwcm9taXNlc1xuICB9IGVsc2UgaWYgKElTX05PREUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdlXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIC8vIGB3ZWJwYWNrYCBkZXYgc2VydmVyIGJ1ZyBvbiBJRSBnbG9iYWwgbWV0aG9kcyAtIHVzZSBiaW5kKGZuLCBnbG9iYWwpXG4gICAgbWFjcm90YXNrID0gYmluZChtYWNyb3Rhc2ssIGdsb2JhbCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFjcm90YXNrKGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgbWljcm90YXNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgaWYgKCFxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICBxdWV1ZS5hZGQoZm4pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1pY3JvdGFzaztcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gc2FmZVxuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjb25zb2xlLmVycm9yKGEpIDogY29uc29sZS5lcnJvcihhLCBiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLlByb21pc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIERlbm8gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBEZW5vID09ICdvYmplY3QnICYmIERlbm8gJiYgdHlwZW9mIERlbm8udmVyc2lvbiA9PSAnb2JqZWN0JztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfREVOTyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtZGVubycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhSVNfREVOTyAmJiAhSVNfTk9ERVxuICAmJiB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnXG4gICYmIHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfQlJPV1NFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3NlcicpO1xudmFyIElTX0RFTk8gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8nKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFNVQkNMQVNTSU5HID0gZmFsc2U7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gaXNDYWxsYWJsZShnbG9iYWwuUHJvbWlzZVJlamVjdGlvbkV2ZW50KTtcblxudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gaXNGb3JjZWQoJ1Byb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSA9IGluc3BlY3RTb3VyY2UoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSAhPT0gU3RyaW5nKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gIC8vIFdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiBWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSN7IGNhdGNoLCBmaW5hbGx5IH0gaW4gdGhlIHB1cmUgdmVyc2lvbiBmb3IgcHJldmVudGluZyBwcm90b3R5cGUgcG9sbHV0aW9uXG4gIGlmIChJU19QVVJFICYmICEoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10pKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKCFWOF9WRVJTSU9OIHx8IFY4X1ZFUlNJT04gPCA1MSB8fCAhL25hdGl2ZSBjb2RlLy50ZXN0KFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFKSkge1xuICAgIC8vIERldGVjdCBjb3JyZWN0bmVzcyBvZiBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSBuZXcgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUoMSk7IH0pO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgICB9O1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICAgIFNVQkNMQVNTSU5HID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZTtcbiAgICBpZiAoIVNVQkNMQVNTSU5HKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICB9IHJldHVybiAhR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiAoSVNfQlJPV1NFUiB8fCBJU19ERU5PKSAmJiAhTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDT05TVFJVQ1RPUjogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsXG4gIFJFSkVDVElPTl9FVkVOVDogTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5ULFxuICBTVUJDTEFTU0lORzogU1VCQ0xBU1NJTkdcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhQ2FsbGFibGUocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUNhbGxhYmxlKHJlamVjdCk7XG59O1xuXG4vLyBgTmV3UHJvbWlzZUNhcGFiaWxpdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uZXdwcm9taXNlY2FwYWJpbGl0eVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLkNPTlNUUlVDVE9SO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5SRUpFQ1RJT05fRVZFTlQ7XG52YXIgTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uU1VCQ0xBU1NJTkc7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvciA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcjtcbnZhciBQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG52YXIgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHk7XG5cbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcblxudmFyIEludGVybmFsLCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgUHJvbWlzZVdyYXBwZXIsIG5hdGl2ZVRoZW47XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIGlzQ2FsbGFibGUodGhlbiA9IGl0LnRoZW4pID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIGNhbGxSZWFjdGlvbiA9IGZ1bmN0aW9uIChyZWFjdGlvbiwgc3RhdGUpIHtcbiAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gIHZhciBvayA9IHN0YXRlLnN0YXRlID09PSBGVUxGSUxMRUQ7XG4gIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICB0cnkge1xuICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIGlmIChzdGF0ZS5yZWplY3Rpb24gPT09IFVOSEFORExFRCkgb25IYW5kbGVVbmhhbmRsZWQoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgfVxuICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTsgLy8gY2FuIHRocm93XG4gICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgY2FsbCh0aGVuLCByZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICByZWplY3QoZXJyb3IpO1xuICB9XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciByZWFjdGlvbnMgPSBzdGF0ZS5yZWFjdGlvbnM7XG4gICAgdmFyIHJlYWN0aW9uO1xuICAgIHdoaWxlIChyZWFjdGlvbiA9IHJlYWN0aW9ucy5nZXQoKSkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfVxuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCAmJiAoaGFuZGxlciA9IGdsb2JhbFsnb24nICsgbmFtZV0pKSBoYW5kbGVyKGV2ZW50KTtcbiAgZWxzZSBpZiAobmFtZSA9PT0gVU5IQU5ETEVEX1JFSkVDVElPTikgaG9zdFJlcG9ydEVycm9ycygnVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgcmVhc29uKTtcbn07XG5cbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgaWYgKElTX05PREUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFJFSkVDVElPTl9IQU5ETEVELCBwcm9taXNlLCBzdGF0ZS52YWx1ZSk7XG4gIH0pO1xufTtcblxudmFyIGJpbmQgPSBmdW5jdGlvbiAoZm4sIHN0YXRlLCB1bndyYXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGZuKHN0YXRlLCB2YWx1ZSwgdW53cmFwKTtcbiAgfTtcbn07XG5cbnZhciBpbnRlcm5hbFJlamVjdCA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlLnN0YXRlID0gUkVKRUNURUQ7XG4gIG5vdGlmeShzdGF0ZSwgdHJ1ZSk7XG59O1xuXG52YXIgaW50ZXJuYWxSZXNvbHZlID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgdHJ5IHtcbiAgICBpZiAoc3RhdGUuZmFjYWRlID09PSB2YWx1ZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGwodGhlbiwgdmFsdWUsXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVzb2x2ZSwgd3JhcHBlciwgc3RhdGUpLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlamVjdCwgd3JhcHBlciwgc3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpbnRlcm5hbFJlamVjdCh3cmFwcGVyLCBlcnJvciwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHN0YXRlLnN0YXRlID0gRlVMRklMTEVEO1xuICAgICAgbm90aWZ5KHN0YXRlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGludGVybmFsUmVqZWN0KHsgZG9uZTogZmFsc2UgfSwgZXJyb3IsIHN0YXRlKTtcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmIChGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUikge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICBhQ2FsbGFibGUoZXhlY3V0b3IpO1xuICAgIGNhbGwoSW50ZXJuYWwsIHRoaXMpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdChzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBQcm9taXNlUHJvdG90eXBlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIHR5cGU6IFBST01JU0UsXG4gICAgICBkb25lOiBmYWxzZSxcbiAgICAgIG5vdGlmaWVkOiBmYWxzZSxcbiAgICAgIHBhcmVudDogZmFsc2UsXG4gICAgICByZWFjdGlvbnM6IG5ldyBRdWV1ZSgpLFxuICAgICAgcmVqZWN0aW9uOiBmYWxzZSxcbiAgICAgIHN0YXRlOiBQRU5ESU5HLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9O1xuXG4gIC8vIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gIEludGVybmFsLnByb3RvdHlwZSA9IGRlZmluZUJ1aWx0SW4oUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgIHN0YXRlLnBhcmVudCA9IHRydWU7XG4gICAgcmVhY3Rpb24ub2sgPSBpc0NhbGxhYmxlKG9uRnVsZmlsbGVkKSA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICByZWFjdGlvbi5mYWlsID0gaXNDYWxsYWJsZShvblJlamVjdGVkKSAmJiBvblJlamVjdGVkO1xuICAgIHJlYWN0aW9uLmRvbWFpbiA9IElTX05PREUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc3RhdGUuc3RhdGUgPT09IFBFTkRJTkcpIHN0YXRlLnJlYWN0aW9ucy5hZGQocmVhY3Rpb24pO1xuICAgIGVsc2UgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxSZWFjdGlvbihyZWFjdGlvbiwgc3RhdGUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICB9KTtcblxuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHByb21pc2UpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKTtcbiAgICB0aGlzLnJlamVjdCA9IGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKTtcbiAgfTtcblxuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSBQcm9taXNlQ29uc3RydWN0b3IgfHwgQyA9PT0gUHJvbWlzZVdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcblxuICBpZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBuYXRpdmVUaGVuID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZS50aGVuO1xuXG4gICAgaWYgKCFOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORykge1xuICAgICAgLy8gbWFrZSBgUHJvbWlzZSN0aGVuYCByZXR1cm4gYSBwb2x5ZmlsbGVkIGBQcm9taXNlYCBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgY2FsbChuYXRpdmVUaGVuLCB0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NDBcbiAgICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8vIG1ha2UgYC5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIHRyeSB7XG4gICAgICBkZWxldGUgTmF0aXZlUHJvbWlzZVByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgICAvLyBtYWtlIGBpbnN0YW5jZW9mIFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIHNldFByb3RvdHlwZU9mKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIFByb21pc2U6IFByb21pc2VDb25zdHJ1Y3RvclxufSk7XG5cbnNldFRvU3RyaW5nVGFnKFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSwgZmFsc2UsIHRydWUpO1xuc2V0U3BlY2llcyhQUk9NSVNFKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbm1vZHVsZS5leHBvcnRzID0gRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfHwgIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLmFsbChpdGVyYWJsZSkudGhlbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5hbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwoJHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuLy8gYFByb21pc2UucHJvdG90eXBlLmNhdGNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsIHJlYWw6IHRydWUgfSwge1xuICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgfVxufSk7XG5cbi8vIG1ha2VzIHN1cmUgdGhhdCBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzIGBQcm9taXNlI2NhdGNoYCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2NhdGNoJ107XG4gIGlmIChOYXRpdmVQcm9taXNlUHJvdG90eXBlWydjYXRjaCddICE9PSBtZXRob2QpIHtcbiAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICdjYXRjaCcsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5yYWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlamVjdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVqZWN0XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKHRoaXMpO1xuICAgIGNhbGwoY2FwYWJpbGl0eS5yZWplY3QsIHVuZGVmaW5lZCwgcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG5cbnZhciBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID0gZ2V0QnVpbHRJbignUHJvbWlzZScpO1xudmFyIENIRUNLX1dSQVBQRVIgPSBJU19QVVJFICYmICFGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVzb2x2ZVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQ0hFQ0tfV1JBUFBFUiAmJiB0aGlzID09PSBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID8gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbFNldHRsZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbHNldHRsZWRcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFsbFNldHRsZWQ6IGZ1bmN0aW9uIGFsbFNldHRsZWQoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbChwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ2Z1bGZpbGxlZCcsIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdyZWplY3RlZCcsIHJlYXNvbjogZXJyb3IgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG52YXIgUFJPTUlTRV9BTllfRVJST1IgPSAnTm8gb25lIHByb21pc2UgcmVzb2x2ZWQnO1xuXG4vLyBgUHJvbWlzZS5hbnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFueVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYW55OiBmdW5jdGlvbiBhbnkoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIEFnZ3JlZ2F0ZUVycm9yID0gZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKTtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICB2YXIgYWxyZWFkeVJlc29sdmVkID0gZmFsc2U7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5UmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3JzW2luZGV4XSA9IGVycm9yO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbi8vIFNhZmFyaSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgyOVxudmFyIE5PTl9HRU5FUklDID0gISFOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10aGVuYWJsZSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10uY2FsbCh7IHRoZW46IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuZmluYWxseVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBOT05fR0VORVJJQyB9LCB7XG4gICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKSk7XG4gICAgdmFyIGlzRnVuY3Rpb24gPSBpc0NhbGxhYmxlKG9uRmluYWxseSk7XG4gICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5LFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseVxuICAgICk7XG4gIH1cbn0pO1xuXG4vLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNmaW5hbGx5YCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2ZpbmFsbHknXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSAhPT0gbWV0aG9kKSB7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnZmluYWxseScsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFueScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5Qcm9taXNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG4vLyBgUHJvbWlzZS53aXRoUmVzb2x2ZXJzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2Utd2l0aC1yZXNvbHZlcnNcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHdpdGhSZXNvbHZlcnM6IGZ1bmN0aW9uIHdpdGhSZXNvbHZlcnMoKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvbWlzZTogcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZSxcbiAgICAgIHJlc29sdmU6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUsXG4gICAgICByZWplY3Q6IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdFxuICAgIH07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvcHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS53aXRoLXJlc29sdmVycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xuXG4vLyBgUHJvbWlzZS50cnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgICAocmVzdWx0LmVycm9yID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9wcm9taXNlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuYWdncmVnYXRlLWVycm9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLmFsbC1zZXR0bGVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS5hbnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3Byb21pc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3JldmVyc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9pbnN0YW5jZS9yZXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9yZXZlcnNlJyk7XG4iLCAidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIF9PYmplY3QkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIik7XG52YXIgX1N5bWJvbCA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCIpO1xudmFyIF9PYmplY3QkY3JlYXRlID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzXCIpO1xudmFyIF9PYmplY3QkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvZm9yLWVhY2guanNcIik7XG52YXIgX3B1c2hJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9wdXNoLmpzXCIpO1xudmFyIF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIF9Qcm9taXNlID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9wcm9taXNlL2luZGV4LmpzXCIpO1xudmFyIF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZS5qc1wiKTtcbnZhciBfc2xpY2VJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZS5qc1wiKTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBfT2JqZWN0JGRlZmluZVByb3BlcnR5IHx8IGZ1bmN0aW9uICh0LCBlLCByKSB7XG4gICAgICB0W2VdID0gci52YWx1ZTtcbiAgICB9LFxuICAgIGkgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgPyBfU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHQsIGUsIHtcbiAgICAgIHZhbHVlOiByLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIHRbZV07XG4gIH1cbiAgdHJ5IHtcbiAgICBkZWZpbmUoe30sIFwiXCIpO1xuICB9IGNhdGNoICh0KSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICAgIHJldHVybiB0W2VdID0gcjtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdyYXAodCwgZSwgciwgbikge1xuICAgIHZhciBpID0gZSAmJiBlLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IGUgOiBHZW5lcmF0b3IsXG4gICAgICBhID0gX09iamVjdCRjcmVhdGUoaS5wcm90b3R5cGUpLFxuICAgICAgYyA9IG5ldyBDb250ZXh0KG4gfHwgW10pO1xuICAgIHJldHVybiBvKGEsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogbWFrZUludm9rZU1ldGhvZCh0LCByLCBjKVxuICAgIH0pLCBhO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKHQsIGUsIHIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICAgICAgYXJnOiB0LmNhbGwoZSwgcilcbiAgICAgIH07XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IHRcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGUud3JhcCA9IHdyYXA7XG4gIHZhciBoID0gXCJzdXNwZW5kZWRTdGFydFwiLFxuICAgIGwgPSBcInN1c3BlbmRlZFlpZWxkXCIsXG4gICAgZiA9IFwiZXhlY3V0aW5nXCIsXG4gICAgcyA9IFwiY29tcGxldGVkXCIsXG4gICAgeSA9IHt9O1xuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cbiAgdmFyIHAgPSB7fTtcbiAgZGVmaW5lKHAsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG4gIHZhciBkID0gX09iamVjdCRnZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHApO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHModCkge1xuICAgIHZhciBfY29udGV4dDtcbiAgICBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0pLmNhbGwoX2NvbnRleHQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkZWZpbmUodCwgZSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShlLCB0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IodCwgZSkge1xuICAgIGZ1bmN0aW9uIGludm9rZShyLCBvLCBpLCBhKSB7XG4gICAgICB2YXIgYyA9IHRyeUNhdGNoKHRbcl0sIHQsIG8pO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gYy50eXBlKSB7XG4gICAgICAgIHZhciB1ID0gYy5hcmcsXG4gICAgICAgICAgaCA9IHUudmFsdWU7XG4gICAgICAgIHJldHVybiBoICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZihoKSAmJiBuLmNhbGwoaCwgXCJfX2F3YWl0XCIpID8gZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pIDogZS5yZXNvbHZlKGgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICB1LnZhbHVlID0gdCwgaSh1KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYShjLmFyZyk7XG4gICAgfVxuICAgIHZhciByO1xuICAgIG8odGhpcywgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh0LCBuKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgZShmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgaW52b2tlKHQsIG4sIGUsIHIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByID0gciA/IHIudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGUsIHIsIG4pIHtcbiAgICB2YXIgbyA9IGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpLCBhKSB7XG4gICAgICBpZiAobyA9PT0gZikgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIGlmIChvID09PSBzKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IGkpIHRocm93IGE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IHQsXG4gICAgICAgICAgZG9uZTogITBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZvciAobi5tZXRob2QgPSBpLCBuLmFyZyA9IGE7Oykge1xuICAgICAgICB2YXIgYyA9IG4uZGVsZWdhdGU7XG4gICAgICAgIGlmIChjKSB7XG4gICAgICAgICAgdmFyIHUgPSBtYXliZUludm9rZURlbGVnYXRlKGMsIG4pO1xuICAgICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgICBpZiAodSA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gdTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwibmV4dFwiID09PSBuLm1ldGhvZCkgbi5zZW50ID0gbi5fc2VudCA9IG4uYXJnO2Vsc2UgaWYgKFwidGhyb3dcIiA9PT0gbi5tZXRob2QpIHtcbiAgICAgICAgICBpZiAobyA9PT0gaCkgdGhyb3cgbyA9IHMsIG4uYXJnO1xuICAgICAgICAgIG4uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpO1xuICAgICAgICB9IGVsc2UgXCJyZXR1cm5cIiA9PT0gbi5tZXRob2QgJiYgbi5hYnJ1cHQoXCJyZXR1cm5cIiwgbi5hcmcpO1xuICAgICAgICBvID0gZjtcbiAgICAgICAgdmFyIHAgPSB0cnlDYXRjaChlLCByLCBuKTtcbiAgICAgICAgaWYgKFwibm9ybWFsXCIgPT09IHAudHlwZSkge1xuICAgICAgICAgIGlmIChvID0gbi5kb25lID8gcyA6IGwsIHAuYXJnID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHAuYXJnLFxuICAgICAgICAgICAgZG9uZTogbi5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcInRocm93XCIgPT09IHAudHlwZSAmJiAobyA9IHMsIG4ubWV0aG9kID0gXCJ0aHJvd1wiLCBuLmFyZyA9IHAuYXJnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgcikge1xuICAgIHZhciBuID0gci5tZXRob2QsXG4gICAgICBvID0gZS5pdGVyYXRvcltuXTtcbiAgICBpZiAobyA9PT0gdCkgcmV0dXJuIHIuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG4gJiYgZS5pdGVyYXRvcltcInJldHVyblwiXSAmJiAoci5tZXRob2QgPSBcInJldHVyblwiLCByLmFyZyA9IHQsIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgciksIFwidGhyb3dcIiA9PT0gci5tZXRob2QpIHx8IFwicmV0dXJuXCIgIT09IG4gJiYgKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG4gKyBcIicgbWV0aG9kXCIpKSwgeTtcbiAgICB2YXIgaSA9IHRyeUNhdGNoKG8sIGUuaXRlcmF0b3IsIHIuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSBpLnR5cGUpIHJldHVybiByLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBpLmFyZywgci5kZWxlZ2F0ZSA9IG51bGwsIHk7XG4gICAgdmFyIGEgPSBpLmFyZztcbiAgICByZXR1cm4gYSA/IGEuZG9uZSA/IChyW2UucmVzdWx0TmFtZV0gPSBhLnZhbHVlLCByLm5leHQgPSBlLm5leHRMb2MsIFwicmV0dXJuXCIgIT09IHIubWV0aG9kICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCByLmRlbGVnYXRlID0gbnVsbCwgeSkgOiBhIDogKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeSh0KSB7XG4gICAgdmFyIF9jb250ZXh0MjtcbiAgICB2YXIgZSA9IHtcbiAgICAgIHRyeUxvYzogdFswXVxuICAgIH07XG4gICAgMSBpbiB0ICYmIChlLmNhdGNoTG9jID0gdFsxXSksIDIgaW4gdCAmJiAoZS5maW5hbGx5TG9jID0gdFsyXSwgZS5hZnRlckxvYyA9IHRbM10pLCBfcHVzaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQyID0gdGhpcy50cnlFbnRyaWVzKS5jYWxsKF9jb250ZXh0MiwgZSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeSh0KSB7XG4gICAgdmFyIGUgPSB0LmNvbXBsZXRpb24gfHwge307XG4gICAgZS50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIGUuYXJnLCB0LmNvbXBsZXRpb24gPSBlO1xuICB9XG4gIGZ1bmN0aW9uIENvbnRleHQodCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSh0KS5jYWxsKHQsIHB1c2hUcnlFbnRyeSwgdGhpcyksIHRoaXMucmVzZXQoITApO1xuICB9XG4gIGZ1bmN0aW9uIHZhbHVlcyhlKSB7XG4gICAgaWYgKGUgfHwgXCJcIiA9PT0gZSkge1xuICAgICAgdmFyIHIgPSBlW2FdO1xuICAgICAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLm5leHQpIHJldHVybiBlO1xuICAgICAgaWYgKCFpc05hTihlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIG8gPSAtMSxcbiAgICAgICAgICBpID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIGZvciAoOyArK28gPCBlLmxlbmd0aDspIGlmIChuLmNhbGwoZSwgbykpIHJldHVybiBuZXh0LnZhbHVlID0gZVtvXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBpLm5leHQgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF90eXBlb2YoZSkgKyBcIiBpcyBub3QgaXRlcmFibGVcIik7XG4gIH1cbiAgcmV0dXJuIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBvKGcsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBvKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb24sXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHQgJiYgdC5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFlICYmIChlID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChlLmRpc3BsYXlOYW1lIHx8IGUubmFtZSkpO1xuICB9LCBlLm1hcmsgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX09iamVjdCRzZXRQcm90b3R5cGVPZih0LCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAodC5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKHQsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCB0LnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKGcpLCB0O1xuICB9LCBlLmF3cmFwID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogdFxuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYywgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZS5hc3luYyA9IGZ1bmN0aW9uICh0LCByLCBuLCBvLCBpKSB7XG4gICAgdm9pZCAwID09PSBpICYmIChpID0gX1Byb21pc2UpO1xuICAgIHZhciBhID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcCh0LCByLCBuLCBvKSwgaSk7XG4gICAgcmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKSA/IGEgOiBhLm5leHQoKS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5kb25lID8gdC52YWx1ZSA6IGEubmV4dCgpO1xuICAgIH0pO1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoZyksIGRlZmluZShnLCB1LCBcIkdlbmVyYXRvclwiKSwgZGVmaW5lKGcsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGRlZmluZShnLCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfSksIGUua2V5cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBPYmplY3QodCksXG4gICAgICByID0gW107XG4gICAgZm9yICh2YXIgbiBpbiBlKSBfcHVzaEluc3RhbmNlUHJvcGVydHkocikuY2FsbChyLCBuKTtcbiAgICByZXR1cm4gX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5KHIpLmNhbGwociksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsgci5sZW5ndGg7KSB7XG4gICAgICAgIHZhciB0ID0gci5wb3AoKTtcbiAgICAgICAgaWYgKHQgaW4gZSkgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICB9O1xuICB9LCBlLnZhbHVlcyA9IHZhbHVlcywgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGUpIHtcbiAgICAgIHZhciBfY29udGV4dDM7XG4gICAgICBpZiAodGhpcy5wcmV2ID0gMCwgdGhpcy5uZXh0ID0gMCwgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB0LCBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQzID0gdGhpcy50cnlFbnRyaWVzKS5jYWxsKF9jb250ZXh0MywgcmVzZXRUcnlFbnRyeSksICFlKSBmb3IgKHZhciByIGluIHRoaXMpIFwidFwiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtfc2xpY2VJbnN0YW5jZVByb3BlcnR5KHIpLmNhbGwociwgMSkpICYmICh0aGlzW3JdID0gdCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgdCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZSkge1xuICAgICAgaWYgKHRoaXMuZG9uZSkgdGhyb3cgZTtcbiAgICAgIHZhciByID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShuLCBvKSB7XG4gICAgICAgIHJldHVybiBhLnR5cGUgPSBcInRocm93XCIsIGEuYXJnID0gZSwgci5uZXh0ID0gbiwgbyAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgISFvO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgbyA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBvID49IDA7IC0tbykge1xuICAgICAgICB2YXIgaSA9IHRoaXMudHJ5RW50cmllc1tvXSxcbiAgICAgICAgICBhID0gaS5jb21wbGV0aW9uO1xuICAgICAgICBpZiAoXCJyb290XCIgPT09IGkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoaS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGMgPSBuLmNhbGwoaSwgXCJjYXRjaExvY1wiKSxcbiAgICAgICAgICAgIHUgPSBuLmNhbGwoaSwgXCJmaW5hbGx5TG9jXCIpO1xuICAgICAgICAgIGlmIChjICYmIHUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF1KSB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChlLCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcixcbiAgICAgICAgbmV4dExvYzogblxuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHQpLCB5O1xuICAgIH1cbiAgfSwgZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gRkYyNi0gYnVnOiBBcnJheUJ1ZmZlcnMgYXJlIG5vbi1leHRlbnNpYmxlLCBidXQgT2JqZWN0LmlzRXh0ZW5zaWJsZSBkb2VzIG5vdCByZXBvcnQgaXRcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShidWZmZXIpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoYnVmZmVyLCAnYScsIHsgdmFsdWU6IDggfSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkaXNFeHRlbnNpYmxlKDEpOyB9KTtcblxuLy8gYE9iamVjdC5pc0V4dGVuc2libGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuaXNleHRlbnNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IChGQUlMU19PTl9QUklNSVRJVkVTIHx8IEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSkgPyBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBmYWxzZTtcbiAgaWYgKEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSAmJiBjbGFzc29mKGl0KSA9PT0gJ0FycmF5QnVmZmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZTtcbn0gOiAkaXNFeHRlbnNpYmxlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtcHJldmVudGV4dGVuc2lvbnMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgaXNFeHRlbnNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG5cbnZhciBSRVFVSVJFRCA9IGZhbHNlO1xudmFyIE1FVEFEQVRBID0gdWlkKCdtZXRhJyk7XG52YXIgaWQgPSAwO1xuXG52YXIgc2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgZGVmaW5lUHJvcGVydHkoaXQsIE1FVEFEQVRBLCB7IHZhbHVlOiB7XG4gICAgb2JqZWN0SUQ6ICdPJyArIGlkKyssIC8vIG9iamVjdCBJRFxuICAgIHdlYWtEYXRhOiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcblxudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gYSBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS5vYmplY3RJRDtcbn07XG5cbnZhciBnZXRXZWFrRGF0YSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gdGhlIHN0b3JlIG9mIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS53ZWFrRGF0YTtcbn07XG5cbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWklORyAmJiBSRVFVSVJFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXNPd24oaXQsIE1FVEFEQVRBKSkgc2V0TWV0YWRhdGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuXG52YXIgZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICBtZXRhLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiAgUkVRVUlSRUQgPSB0cnVlO1xuICB2YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZjtcbiAgdmFyIHNwbGljZSA9IHVuY3VycnlUaGlzKFtdLnNwbGljZSk7XG4gIHZhciB0ZXN0ID0ge307XG4gIHRlc3RbTUVUQURBVEFdID0gMTtcblxuICAvLyBwcmV2ZW50IGV4cG9zaW5nIG9mIG1ldGFkYXRhIGtleVxuICBpZiAoZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0KS5sZW5ndGgpIHtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdFtpXSA9PT0gTUVUQURBVEEpIHtcbiAgICAgICAgICBzcGxpY2UocmVzdWx0LCBpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAkKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZS5mXG4gICAgfSk7XG4gIH1cbn07XG5cbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuYWJsZTogZW5hYmxlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrRGF0YTogZ2V0V2Vha0RhdGEsXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcblxuaGlkZGVuS2V5c1tNRVRBREFUQV0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSwgd3JhcHBlciwgY29tbW9uKSB7XG4gIHZhciBJU19NQVAgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ01hcCcpICE9PSAtMTtcbiAgdmFyIElTX1dFQUsgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ1dlYWsnKSAhPT0gLTE7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl9OQU1FXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgdmFyIGV4cG9ydGVkID0ge307XG4gIHZhciBDb25zdHJ1Y3RvcjtcblxuICBpZiAoIURFU0NSSVBUT1JTIHx8ICFpc0NhbGxhYmxlKE5hdGl2ZUNvbnN0cnVjdG9yKVxuICAgIHx8ICEoSVNfV0VBSyB8fCBOYXRpdmVQcm90b3R5cGUuZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKS5lbnRyaWVzKCkubmV4dCgpOyB9KSlcbiAgKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDb25zdHJ1Y3RvciA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB9IGVsc2Uge1xuICAgIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZShhbkluc3RhbmNlKHRhcmdldCwgUHJvdG90eXBlKSwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBjb2xsZWN0aW9uOiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGFyZ2V0W0FEREVSXSwgeyB0aGF0OiB0YXJnZXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICBmb3JFYWNoKFsnYWRkJywgJ2NsZWFyJywgJ2RlbGV0ZScsICdmb3JFYWNoJywgJ2dldCcsICdoYXMnLCAnc2V0JywgJ2tleXMnLCAndmFsdWVzJywgJ2VudHJpZXMnXSwgZnVuY3Rpb24gKEtFWSkge1xuICAgICAgdmFyIElTX0FEREVSID0gS0VZID09PSAnYWRkJyB8fCBLRVkgPT09ICdzZXQnO1xuICAgICAgaWYgKEtFWSBpbiBOYXRpdmVQcm90b3R5cGUgJiYgIShJU19XRUFLICYmIEtFWSA9PT0gJ2NsZWFyJykpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFByb3RvdHlwZSwgS0VZLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5jb2xsZWN0aW9uO1xuICAgICAgICAgIGlmICghSVNfQURERVIgJiYgSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkpIHJldHVybiBLRVkgPT09ICdnZXQnID8gdW5kZWZpbmVkIDogZmFsc2U7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGNvbGxlY3Rpb25bS0VZXShhID09PSAwID8gMCA6IGEsIGIpO1xuICAgICAgICAgIHJldHVybiBJU19BRERFUiA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgSVNfV0VBSyB8fCBkZWZpbmVQcm9wZXJ0eShQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb24uc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgZXhwb3J0ZWRbQ09OU1RSVUNUT1JfTkFNRV0gPSBDb25zdHJ1Y3RvcjtcbiAgJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIGV4cG9ydGVkKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudW5zYWZlICYmIHRhcmdldFtrZXldKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICB9IHJldHVybiB0YXJnZXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBkZWZpbmVCdWlsdElucyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZmFzdEtleTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgUHJvdG90eXBlKTtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBpbmRleDogY3JlYXRlKG51bGwpLFxuICAgICAgICBmaXJzdDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWQsXG4gICAgICAgIHNpemU6IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCFERVNDUklQVE9SUykgdGhhdC5zaXplID0gMDtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0aGF0W0FEREVSXSwgeyB0aGF0OiB0aGF0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgUHJvdG90eXBlID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgdmFyIGdldEludGVybmFsU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gICAgdmFyIGRlZmluZSA9IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgIHZhciBwcmV2aW91cywgaW5kZXg7XG4gICAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUubGFzdCA9IGVudHJ5ID0ge1xuICAgICAgICAgIGluZGV4OiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSxcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgcHJldmlvdXM6IHByZXZpb3VzID0gc3RhdGUubGFzdCxcbiAgICAgICAgICBuZXh0OiB1bmRlZmluZWQsXG4gICAgICAgICAgcmVtb3ZlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdGF0ZS5maXJzdCkgc3RhdGUuZmlyc3QgPSBlbnRyeTtcbiAgICAgICAgaWYgKHByZXZpb3VzKSBwcmV2aW91cy5uZXh0ID0gZW50cnk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSsrO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSsrO1xuICAgICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHN0YXRlLmluZGV4W2luZGV4XSA9IGVudHJ5O1xuICAgICAgfSByZXR1cm4gdGhhdDtcbiAgICB9O1xuXG4gICAgdmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIC8vIGZhc3QgY2FzZVxuICAgICAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICAgICAgdmFyIGVudHJ5O1xuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiBzdGF0ZS5pbmRleFtpbmRleF07XG4gICAgICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgICAgIGZvciAoZW50cnkgPSBzdGF0ZS5maXJzdDsgZW50cnk7IGVudHJ5ID0gZW50cnkubmV4dCkge1xuICAgICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCB7XG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5jbGVhcigpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5jbGVhclxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBkYXRhID0gc3RhdGUuaW5kZXg7XG4gICAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmZpcnN0O1xuICAgICAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucHJldmlvdXMpIGVudHJ5LnByZXZpb3VzID0gZW50cnkucHJldmlvdXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmZpcnN0ID0gc3RhdGUubGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplID0gMDtcbiAgICAgICAgZWxzZSB0aGF0LnNpemUgPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmRlbGV0ZShrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubmV4dDtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5pbmRleFtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubmV4dCA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucHJldmlvdXMgPSBwcmV2O1xuICAgICAgICAgIGlmIChzdGF0ZS5maXJzdCA9PT0gZW50cnkpIHN0YXRlLmZpcnN0ID0gbmV4dDtcbiAgICAgICAgICBpZiAoc3RhdGUubGFzdCA9PT0gZW50cnkpIHN0YXRlLmxhc3QgPSBwcmV2O1xuICAgICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZS0tO1xuICAgICAgICAgIGVsc2UgdGhhdC5zaXplLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuZmlyc3QpIHtcbiAgICAgICAgICBib3VuZEZ1bmN0aW9uKGVudHJ5LnZhbHVlLCBlbnRyeS5rZXksIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXR9LnByb3RvdHlwZS5oYXMoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmhhc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmhhc1xuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIElTX01BUCA/IHtcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLmdldChrZXkpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5nZXRcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudmFsdWU7XG4gICAgICB9LFxuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5zZXRcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSA6IHtcbiAgICAgIC8vIGBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmFkZFxuICAgICAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCkge1xuICAgIHZhciBJVEVSQVRPUl9OQU1FID0gQ09OU1RSVUNUT1JfTkFNRSArICcgSXRlcmF0b3InO1xuICAgIHZhciBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG4gICAgdmFyIGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoSVRFUkFUT1JfTkFNRSk7XG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUueyBrZXlzLCB2YWx1ZXMsIGVudHJpZXMsIEBAaXRlcmF0b3IgfSgpYCBtZXRob2RzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICBkZWZpbmVJdGVyYXRvcihDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgICAgdHlwZTogSVRFUkFUT1JfTkFNRSxcbiAgICAgICAgdGFyZ2V0OiBpdGVyYXRlZCxcbiAgICAgICAgc3RhdGU6IGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlKGl0ZXJhdGVkKSxcbiAgICAgICAga2luZDoga2luZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUodGhpcyk7XG4gICAgICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gICAgICB2YXIgZW50cnkgPSBzdGF0ZS5sYXN0O1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXN0YXRlLnRhcmdldCB8fCAhKHN0YXRlLmxhc3QgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLnN0YXRlLmZpcnN0KSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PT0gJ2tleXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS5rZXksIGZhbHNlKTtcbiAgICAgIGlmIChraW5kID09PSAndmFsdWVzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkudmFsdWUsIGZhbHNlKTtcbiAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSwgZmFsc2UpO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlW0BAc3BlY2llc11gIGFjY2Vzc29yc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LW1hcC1AQHNwZWNpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1zZXQtQEBzcGVjaWVzXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAtb2JqZWN0c1xuY29sbGVjdGlvbignTWFwJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hcCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguTWFwO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9tYXAnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL21hcFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb21lJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvbWUnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc29tZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvbWUnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29tZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29tZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zb21lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29tZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2tleXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC9rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9rZXlzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmtleXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmtleXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXNcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgbWVyZ2VTb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICByZXR1cm4gbGVuZ3RoIDwgOCA/IGluc2VydGlvblNvcnQoYXJyYXksIGNvbXBhcmVmbikgOiBtZXJnZShcbiAgICBhcnJheSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgMCwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBjb21wYXJlZm5cbiAgKTtcbn07XG5cbnZhciBpbnNlcnRpb25Tb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIGkgPSAxO1xuICB2YXIgZWxlbWVudCwgajtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGogPSBpO1xuICAgIGVsZW1lbnQgPSBhcnJheVtpXTtcbiAgICB3aGlsZSAoaiAmJiBjb21wYXJlZm4oYXJyYXlbaiAtIDFdLCBlbGVtZW50KSA+IDApIHtcbiAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXTtcbiAgICB9XG4gICAgaWYgKGogIT09IGkrKykgYXJyYXlbal0gPSBlbGVtZW50O1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIChhcnJheSwgbGVmdCwgcmlnaHQsIGNvbXBhcmVmbikge1xuICB2YXIgbGxlbmd0aCA9IGxlZnQubGVuZ3RoO1xuICB2YXIgcmxlbmd0aCA9IHJpZ2h0Lmxlbmd0aDtcbiAgdmFyIGxpbmRleCA9IDA7XG4gIHZhciByaW5kZXggPSAwO1xuXG4gIHdoaWxlIChsaW5kZXggPCBsbGVuZ3RoIHx8IHJpbmRleCA8IHJsZW5ndGgpIHtcbiAgICBhcnJheVtsaW5kZXggKyByaW5kZXhdID0gKGxpbmRleCA8IGxsZW5ndGggJiYgcmluZGV4IDwgcmxlbmd0aClcbiAgICAgID8gY29tcGFyZWZuKGxlZnRbbGluZGV4XSwgcmlnaHRbcmluZGV4XSkgPD0gMCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdXG4gICAgICA6IGxpbmRleCA8IGxsZW5ndGggPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXTtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlU29ydDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBmaXJlZm94ID0gdXNlckFnZW50Lm1hdGNoKC9maXJlZm94XFwvKFxcZCspL2kpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhZmlyZWZveCAmJiArZmlyZWZveFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVUEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciB3ZWJraXQgPSB1c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvKFxcZCspXFwuLyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISF3ZWJraXQgJiYgK3dlYmtpdFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJuYWxTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBGRiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtZmYtdmVyc2lvbicpO1xudmFyIElFX09SX0VER0UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWllLW9yLWVkZ2UnKTtcbnZhciBWOCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIFdFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24nKTtcblxudmFyIHRlc3QgPSBbXTtcbnZhciBuYXRpdmVTb3J0ID0gdW5jdXJyeVRoaXModGVzdC5zb3J0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXModGVzdC5wdXNoKTtcblxuLy8gSUU4LVxudmFyIEZBSUxTX09OX1VOREVGSU5FRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KTtcbi8vIFY4IGJ1Z1xudmFyIEZBSUxTX09OX05VTEwgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydChudWxsKTtcbn0pO1xuLy8gT2xkIFdlYktpdFxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb3J0Jyk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGZlYXR1cmUgZGV0ZWN0aW9uIGNhbiBiZSB0b28gc2xvdywgc28gY2hlY2sgZW5naW5lcyB2ZXJzaW9uc1xuICBpZiAoVjgpIHJldHVybiBWOCA8IDcwO1xuICBpZiAoRkYgJiYgRkYgPiAzKSByZXR1cm47XG4gIGlmIChJRV9PUl9FREdFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFdFQktJVCkgcmV0dXJuIFdFQktJVCA8IDYwMztcblxuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBjb2RlLCBjaHIsIHZhbHVlLCBpbmRleDtcblxuICAvLyBnZW5lcmF0ZSBhbiBhcnJheSB3aXRoIG1vcmUgNTEyIGVsZW1lbnRzIChDaGFrcmEgYW5kIG9sZCBWOCBmYWlscyBvbmx5IGluIHRoaXMgY2FzZSlcbiAgZm9yIChjb2RlID0gNjU7IGNvZGUgPCA3NjsgY29kZSsrKSB7XG4gICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSA2NjogY2FzZSA2OTogY2FzZSA3MDogY2FzZSA3MjogdmFsdWUgPSAzOyBicmVhaztcbiAgICAgIGNhc2UgNjg6IGNhc2UgNzE6IHZhbHVlID0gNDsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB2YWx1ZSA9IDI7XG4gICAgfVxuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDc7IGluZGV4KyspIHtcbiAgICAgIHRlc3QucHVzaCh7IGs6IGNociArIGluZGV4LCB2OiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0ZXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudiAtIGEudjsgfSk7XG5cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGVzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSB0ZXN0W2luZGV4XS5rLmNoYXJBdCgwKTtcbiAgICBpZiAocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IGNocikgcmVzdWx0ICs9IGNocjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgIT09ICdER0JFRkhBQ0lKSyc7XG59KTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCAhU1RSSUNUX01FVEhPRCB8fCAhU1RBQkxFX1NPUlQ7XG5cbnZhciBnZXRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uIChjb21wYXJlZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICByZXR1cm4gdG9TdHJpbmcoeCkgPiB0b1N0cmluZyh5KSA/IDEgOiAtMTtcbiAgfTtcbn07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb3J0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG5cbiAgICB2YXIgYXJyYXkgPSB0b09iamVjdCh0aGlzKTtcblxuICAgIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkID8gbmF0aXZlU29ydChhcnJheSkgOiBuYXRpdmVTb3J0KGFycmF5LCBjb21wYXJlZm4pO1xuXG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGFycmF5TGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoYXJyYXkpO1xuICAgIHZhciBpdGVtc0xlbmd0aCwgaW5kZXg7XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGluZGV4IGluIGFycmF5KSBwdXNoKGl0ZW1zLCBhcnJheVtpbmRleF0pO1xuICAgIH1cblxuICAgIGludGVybmFsU29ydChpdGVtcywgZ2V0U29ydENvbXBhcmUoY29tcGFyZWZuKSk7XG5cbiAgICBpdGVtc0xlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZW1zKTtcbiAgICBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBpdGVtc0xlbmd0aCkgYXJyYXlbaW5kZXhdID0gaXRlbXNbaW5kZXgrK107XG4gICAgd2hpbGUgKGluZGV4IDwgYXJyYXlMZW5ndGgpIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhhcnJheSwgaW5kZXgrKyk7XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc29ydCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdzb3J0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc29ydCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zb3J0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb3J0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb3J0XCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAndmFsdWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudmFsdWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS52YWx1ZXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlc1wiKTsiLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3JcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdlbnRyaWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5lbnRyaWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5lbnRyaWVzKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9lbnRyaWVzXCIpOyIsICIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbmxldCBnZXRSYW5kb21WYWx1ZXM7XG5jb25zdCBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byk7XG5cbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xufSIsICJpbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cblxuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHJldHVybiBieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghdmFsaWRhdGUodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCcpO1xuICB9XG5cbiAgcmV0dXJuIHV1aWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmluZ2lmeTsiLCAiY29uc3QgcmFuZG9tVVVJRCA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5yYW5kb21VVUlEICYmIGNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmFuZG9tVVVJRFxufTsiLCAiaW1wb3J0IG5hdGl2ZSBmcm9tICcuL25hdGl2ZS5qcyc7XG5pbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCB7IHVuc2FmZVN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgaWYgKG5hdGl2ZS5yYW5kb21VVUlEICYmICFidWYgJiYgIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmF0aXZlLnJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG4gIHJuZHNbNl0gPSBybmRzWzZdICYgMHgwZiB8IDB4NDA7XG4gIHJuZHNbOF0gPSBybmRzWzhdICYgMHgzZiB8IDB4ODA7IC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuXG4gIGlmIChidWYpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgYnVmW29mZnNldCArIGldID0gcm5kc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmO1xuICB9XG5cbiAgcmV0dXJuIHVuc2FmZVN0cmluZ2lmeShybmRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdjQ7IiwgImltcG9ydCB7IEFzc2lnbmFibGUgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcbmltcG9ydCB7IERhdGFTdHJlYW0gfSBmcm9tIFwiLi9kYXRhLXN0cmVhbVwiO1xuXG50eXBlIFZhbHVlT2Y8VD4gPSBUW2tleW9mIFRdO1xuXG4vKiogVmFsaWQgaWQgdHlwZS4gKi9cbmV4cG9ydCB0eXBlIElkID0gbnVtYmVyIHwgc3RyaW5nO1xuLyoqIE51bGxhYmxlIGlkIHR5cGUuICovXG5leHBvcnQgdHlwZSBPcHRJZCA9IHVuZGVmaW5lZCB8IG51bGwgfCBJZDtcbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgYSB2YWx1ZSBjYW4gYmUgdXNlZCBhcyBhbiBpZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZCBpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIElkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XG59XG5cbi8qKlxuICogTWFrZSBhbiBvYmplY3QgZGVlcGx5IHBhcnRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIGFueVtdIHwgRnVuY3Rpb24gfCBOb2RlXG4gID8gVFxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgPyB7IFtrZXkgaW4ga2V5b2YgVF0/OiBEZWVwUGFydGlhbDxUW2tleV0+IH1cbiAgOiBUO1xuXG4vKipcbiAqIEFuIGl0ZW0gdGhhdCBtYXkgKHtAbGluayBJZH0pIG9yIG1heSBub3QgKGFic2VudCwgdW5kZWZpbmVkIG9yIG51bGwpIGhhdmUgYW4gaWQgcHJvcGVydHkuXG4gKlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgUGFydEl0ZW08SWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IFBhcnRpYWw8UmVjb3JkPElkUHJvcCwgT3B0SWQ+Pjtcbi8qKlxuICogQW4gaXRlbSB0aGF0IGhhcyBhIHByb3BlcnR5IGNvbnRhaW5pbmcgYW4gaWQgYW5kIGFsbCBvdGhlciByZXF1aXJlZCBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRnVsbEl0ZW08XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gPSBJdGVtICYgUmVjb3JkPElkUHJvcCwgSWQ+O1xuLyoqXG4gKiBBbiBpdGVtIHRoYXQgaGFzIGEgcHJvcGVydHkgY29udGFpbmluZyBhbiBpZCBhbmQgb3B0aW9uYWxseSBvdGhlciBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgVXBkYXRlSXRlbTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiA9IEFzc2lnbmFibGU8RnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4gJiBSZWNvcmQ8SWRQcm9wLCBJZD47XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGFuIGl0ZW0gaGFzIGFuIGlkIChpcyBhIHtAbGluayBGdWxsSXRlbX0pLlxuICpcbiAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIGlkUHJvcCAtIE5hbWUgb2YgdGhlIGlkIHByb3BlcnR5LlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoaXMgdmFsdWUgaXMgYSB7QGxpbmsgRnVsbEl0ZW19LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGxJdGVtPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+KGl0ZW06IEl0ZW0sIGlkUHJvcDogSWRQcm9wKTogaXRlbSBpcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIGl0ZW1baWRQcm9wXSAhPSBudWxsO1xufVxuXG4vKiogQWRkIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEV2ZW50UGF5bG9hZCB7XG4gIC8qKiBJZHMgb2YgYWRkZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xufVxuLyoqIFVwZGF0ZSBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVFdmVudFBheWxvYWQ8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKiogSWRzIG9mIHVwZGF0ZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xuICAvKiogSXRlbXMgYXMgdGhleSB3ZXJlIGJlZm9yZSB0aGlzIHVwZGF0ZS4gKi9cbiAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogSXRlbXMgYXMgdGhleSBhcmUgbm93LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBKdXN0IGdldCB0aGUgZGF0YSBmcm9tIHRoZSBkYXRhIHNldCBvciBkYXRhIHZpZXcuXG4gICAqL1xuICBkYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG59XG4vKiogUmVtb3ZlIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbW92ZUV2ZW50UGF5bG9hZDxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIC8qKiBJZHMgb2YgcmVtb3ZlZCBpdGVtcy4gKi9cbiAgaXRlbXM6IElkW107XG4gIC8qKiBJdGVtcyBhcyB0aGV5IHdlcmUgYmVmb3JlIHRoZWlyIHJlbW92YWwuICovXG4gIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbn1cblxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyAoZXZlbnQgbmFtZSDihpIgcGF5bG9hZCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQYXlsb2FkczxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIGFkZDogQWRkRXZlbnRQYXlsb2FkO1xuICB1cGRhdGU6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xuICByZW1vdmU6IFJlbW92ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xufVxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBwYXlsb2FkKS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFBheWxvYWRzV2l0aEFueTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBleHRlbmRzIEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPiB7XG4gIFwiKlwiOiBWYWx1ZU9mPEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPj47XG59XG5cbi8qKlxuICogTWFwIG9mIGV2ZW50IGNhbGxiYWNrIHR5cGVzIChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3M8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgYWRkKG5hbWU6IFwiYWRkXCIsIHBheWxvYWQ6IEFkZEV2ZW50UGF5bG9hZCB8IG51bGwsIHNlbmRlcklkPzogSWQgfCBudWxsKTogdm9pZDtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIHVwZGF0ZShcbiAgICBuYW1lOiBcInVwZGF0ZVwiLFxuICAgIHBheWxvYWQ6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+IHwgbnVsbCxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgcmVtb3ZlKFxuICAgIG5hbWU6IFwicmVtb3ZlXCIsXG4gICAgcGF5bG9hZDogUmVtb3ZlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4gfCBudWxsLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG59XG4vKipcbiAqIE1hcCBvZiBldmVudCBjYWxsYmFjayB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3NXaXRoQW55PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGV4dGVuZHMgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCAoe0BsaW5rIEV2ZW50TmFtZX0pLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIERhdGEgYWJvdXQgdGhlIGl0ZW1zIGFmZmVjdGVkIGJ5IHRoaXMgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIEEgc2VuZGVySWQsIG9wdGlvbmFsbHkgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2hpY2ggdHJpZ2dlcmVkIHRoZSBldmVudC4gSWYgc2VuZGVySWQgaXMgbm90IHByb3ZpZGVkLCB0aGUgYXJndW1lbnQgd2lsbCBiZSBgbnVsbGAuXG4gICAqL1xuICBcIipcIjxOIGV4dGVuZHMga2V5b2YgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPj4oXG4gICAgbmFtZTogTixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bTl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbn1cblxuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcy4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50TmFtZSA9IGtleW9mIEV2ZW50UGF5bG9hZHM8bmV2ZXIsIFwiXCI+O1xuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcyBhbmQgJyonIHRvIGxpc3RlbiBmb3IgYWxsLiAqL1xuZXhwb3J0IHR5cGUgRXZlbnROYW1lV2l0aEFueSA9IGtleW9mIEV2ZW50UGF5bG9hZHNXaXRoQW55PG5ldmVyLCBcIlwiPjtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBvcmRlciBwYXJhbWV0ZXIuXG4gKiAtIEEgc3RyaW5nIHZhbHVlIGRldGVybWluZXMgd2hpY2ggcHJvcGVydHkgd2lsbCBiZSB1c2VkIGZvciBzb3J0aW5nICh1c2luZyA8IGFuZCA+IG9wZXJhdG9ycyBmb3IgbnVtZXJpYyBjb21wYXJpc29uKS5cbiAqIC0gQSBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdGhlIHNhbWUgd2F5IGFzIGluIEFycmF5LnNvcnQuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YUludGVyZmFjZU9yZGVyPEl0ZW0+ID1cbiAgfCBrZXlvZiBJdGVtXG4gIHwgKChhOiBJdGVtLCBiOiBJdGVtKSA9PiBudW1iZXIpO1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm4gdHlwZSBpbmRlcGVuZGVudCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0Jhc2U8SXRlbT4ge1xuICAvKipcbiAgICogQW4gYXJyYXkgd2l0aCBmaWVsZCBuYW1lcywgb3IgYW4gb2JqZWN0IHdpdGggY3VycmVudCBmaWVsZCBuYW1lIGFuZCBuZXcgZmllbGQgbmFtZSB0aGF0IHRoZSBmaWVsZCBpcyByZXR1cm5lZCBhcy4gQnkgZGVmYXVsdCwgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW1zIGFyZSBlbWl0dGVkLiBXaGVuIGZpZWxkcyBpcyBkZWZpbmVkLCBvbmx5IHRoZSBwcm9wZXJ0aWVzIHdob3NlIG5hbWUgaXMgc3BlY2lmaWVkIGluIGZpZWxkcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogV2FybmluZyoqOiBUaGVyZSBpcyBubyBUeXBlU2NyaXB0IHN1cHBvcnQgZm9yIHRoaXMuXG4gICAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZ2V0IG9wdGlvbnMgKHJldHVybnMgYSBzaW5nbGUgaXRlbSBvciBhbiBhcnJheSkuXG4gKlxuICogQHJlbWFya3NcbiAqIFdoZXRoZXIgYW4gaXRlbSBvciBhbmQgYXJyYXkgb2YgaXRlbXMgaXMgcmV0dXJuZWQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdHlwZSBvZiB0aGUgaWQocykgYXJndW1lbnQuXG4gKiBJZiBhbiBhcnJheSBvZiBpZHMgaXMgcmVxdWVzdGVkIGFuIGFycmF5IG9mIGl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiBhIHNpbmdsZSBpZCBpcyByZXF1ZXN0ZWQgYSBzaW5nbGUgaXRlbSAob3IgbnVsbCBpZiB0aGUgaWQgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBpdGVtKSB3aWxsIGJlIHJldHVybmVkLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzaW5nbGUgaXRlbSAoaWYgaW52b2tlZCB3aXRoIGFuIGlkKSBvciBhbiBhcnJheSBvZiBpdGVtcyAoaWYgaW52b2tlZCB3aXRoIGFuIGFycmF5IG9mIGlkcykuICovXG4gIHJldHVyblR5cGU/OiB1bmRlZmluZWQgfCBcIkFycmF5XCI7XG59XG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm5zIGFuIG9iamVjdCkuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSByZXR1cm5lZCBvYmplY3QgaGFzIGlkcyBhcyBrZXlzIGFuZCBpdGVtcyBhcyB2YWx1ZXMgb2YgY29ycmVzcG9uZGluZyBpZHMuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG1hcCAoaWQg4oaSIGl0ZW0pLiAqL1xuICByZXR1cm5UeXBlOiBcIk9iamVjdFwiO1xufVxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJucyBzaW5nbGUgaXRlbSwgYW4gYXJyYXkgb3Igb2JqZWN0KS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgdHlwZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiA9XG4gIHwgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICB8IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+O1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBpZHMgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBmb3IgZWFjaCBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEFuIGFycmF5IHdpdGggZmllbGQgbmFtZXMsIG9yIGFuIG9iamVjdCB3aXRoIGN1cnJlbnQgZmllbGQgbmFtZSBhbmQgbmV3IGZpZWxkIG5hbWUgdGhhdCB0aGUgZmllbGQgaXMgcmV0dXJuZWQgYXMuIEJ5IGRlZmF1bHQsIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBpdGVtcyBhcmUgZW1pdHRlZC4gV2hlbiBmaWVsZHMgaXMgZGVmaW5lZCwgb25seSB0aGUgcHJvcGVydGllcyB3aG9zZSBuYW1lIGlzIHNwZWNpZmllZCBpbiBmaWVsZHMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgaXRlbXMuICovXG4gIGZpZWxkcz86IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBtYXAgb3ByaW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIE9yaWdpbmFsIC0gVGhlIG9yaWdpbmFsIGl0ZW0gdHlwZSBpbiB0aGUgZGF0YS5cbiAqIEB0eXBlUGFyYW0gTWFwcGVkIC0gVGhlIHR5cGUgYWZ0ZXIgbWFwcGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxPcmlnaW5hbCwgTWFwcGVkPiB7XG4gIC8qKiBBbiBhcnJheSB3aXRoIGZpZWxkIG5hbWVzLCBvciBhbiBvYmplY3Qgd2l0aCBjdXJyZW50IGZpZWxkIG5hbWUgYW5kIG5ldyBmaWVsZCBuYW1lIHRoYXQgdGhlIGZpZWxkIGlzIHJldHVybmVkIGFzLiBCeSBkZWZhdWx0LCBhbGwgcHJvcGVydGllcyBvZiB0aGUgaXRlbXMgYXJlIGVtaXR0ZWQuIFdoZW4gZmllbGRzIGlzIGRlZmluZWQsIG9ubHkgdGhlIHByb3BlcnRpZXMgd2hvc2UgbmFtZSBpcyBzcGVjaWZpZWQgaW4gZmllbGRzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIGl0ZW1zLiAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBPcmlnaW5hbCkgPT4gYm9vbGVhbjtcbiAgLyoqIE9yZGVyIHRoZSBpdGVtcyBieSBhIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uICovXG4gIG9yZGVyPzogRGF0YUludGVyZmFjZU9yZGVyPE1hcHBlZD47XG59XG5cbi8qKlxuICogQ29tbW9uIGludGVyZmFjZSBmb3IgZGF0YSBzZXRzIGFuZCBkYXRhIHZpZXcuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZCAobWlzc2luZyBpZHMgd2lsbCBiZSBnZW5lcmF0ZWQgdXBvbiBpbnNlcnRpb24pLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgSXRlbSB0eXBlIHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2U8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4ge1xuICAvKiogVGhlIG51bWJlciBvZiBpdGVtcy4gKi9cbiAgbGVuZ3RoOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBrZXkgb2YgaWQgcHJvcGVydHkuICovXG4gIGlkUHJvcDogSWRQcm9wO1xuXG4gIC8qKlxuICAgKiBBZGQgYSB1bml2ZXJzYWwgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgKmAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW55IG9mIHRoZSBldmVudHMgYGFkZGAsIGB1cGRhdGVgLCBhbmQgYHJlbW92ZWAgb2NjdXJzLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcIipcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYGFkZGAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgYWRkYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIGFkZGVkLCBvciB3aGVuIGFuIGl0ZW0gaXMgdXBkYXRlZCB3aGlsZSBub3QgeWV0IGV4aXN0aW5nLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcImFkZFwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl0pOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGEgYHJlbW92ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgcmVtb3ZlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgdXBkYXRlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBleGlzdGluZyBpdGVtIG9yIGEgc2V0IG9mIGV4aXN0aW5nIGl0ZW1zIGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHVuaXZlcnNhbCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiKlwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdKTogdm9pZDtcbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBgYWRkYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiYWRkXCIsIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYSBgcmVtb3ZlYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zLlxuICAgKi9cbiAgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyByZXF1ZXN0ZWQgaXRlbXMuXG4gICAqL1xuICBnZXQob3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPik6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBhcmUgbm8gaXRlbXMpLlxuICAgKi9cbiAgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgcmVxdWVzdGVkIGl0ZW1zIG9yIGlmIHJlcXVlc3RlZCBhbiBvYmplY3QgbWFwIG9mIGl0ZW1zIChtYXkgYmUgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGFyZSBubyBpdGVtcykuXG4gICAqL1xuICBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBvciBudWxsIGlmIHRoZSBpZCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGl0ZW0uXG4gICAqL1xuICBnZXQoaWQ6IElkKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIG9yIG51bGwgaWYgdGhlIGlkIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbS5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIGlmIGZvdW5kIG9yIG51bGwgb3RoZXJ3aXNlLiBJZiByZXF1ZXN0ZWQgYW4gb2JqZWN0IG1hcCB3aXRoIDAgdG8gMSBpdGVtcy5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChpZHM6IElkW10pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICogSWYgcmVxdWVzdGVkIGFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gSWQgb3IgaWRzIHRvIGJlIHJldHVybmVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIGl0ZW1zIChmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSBpZHMgKHNpbmdsZSBvciBhcnJheSkgYW5kIHRoZSBvcHRpb25zLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIERhdGFTZXQgdG8gd2hpY2ggdGhlIGluc3RhbmNlIGltcGxlbWVudGluZyB0aGlzIGludGVyZmFjZSBpcyBjb25uZWN0ZWQuXG4gICAqIEluIGNhc2UgdGhlcmUgaXMgYSBjaGFpbiBvZiBtdWx0aXBsZSBEYXRhVmlld3MsIHRoZSByb290IERhdGFTZXQgb2YgdGhpcyBjaGFpbiBpcyByZXR1cm5lZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRhdGEgc2V0IHRoYXQgYWN0dWFsbHkgY29udGFpbnMgdGhlIGRhdGEuXG4gICAqL1xuICBnZXREYXRhU2V0KCk6IERhdGFTZXQ8SXRlbSwgSWRQcm9wPjtcblxuICAvKipcbiAgICogR2V0IGlkcyBvZiBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiByZXR1cm5lZCBpZHMgdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICovXG4gIGdldElkcyhvcHRpb25zPzogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT4pOiBJZFtdO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiBpdGVyYXRpb24gdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBFeGVjdXRlZCBpbiBzaW1pbGFyIGZhc2hpb24gdG8gQXJyYXkuZm9yRWFjaCBjYWxsYmFjaywgYnV0IGluc3RlYWQgb2YgaXRlbSwgaW5kZXgsIGFycmF5IHJlY2VpdmVzIGl0ZW0sIGlkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICovXG4gIGZvckVhY2goXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPlxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBNYXAgZWFjaCBpdGVtIGludG8gZGlmZmVyZW50IGl0ZW0gYW5kIHJldHVybiB0aGVtIGFzIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBObyBndWFyYW50ZWUgaXMgZ2l2ZW4gYWJvdXQgdGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBldmVuIGlmIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkICh0aGUgaXRlbXMgYXJlIHNvcnRlZCBhZnRlciB0aGUgbWFwcGluZykuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEFycmF5Lm1hcC1saWtlIGNhbGxiYWNrLCBidXQgb25seSB3aXRoIHRoZSBmaXJzdCB0d28gcGFyYW1zLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIG1hcHBlZCBpdGVtcy5cbiAgICovXG4gIG1hcDxUPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5cbiAgKTogVFtdO1xuXG4gIC8qKlxuICAgKiBTdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBJZHMgb2YgdGhlIGl0ZW1zIHRvIGJlIGluY2x1ZGVkIGluIHRoaXMgc3RyZWFtIChtaXNzaW5nIGFyZSBpZ25vcmVkKSwgYWxsIGlmIG9taXR0ZWQuXG4gICAqIEByZXR1cm5zIFRoZSBkYXRhIHN0cmVhbSBmb3IgdGhpcyBkYXRhIHNldC5cbiAgICovXG4gIHN0cmVhbShpZHM/OiBJdGVyYWJsZTxJZD4pOiBEYXRhU3RyZWFtPEl0ZW0+O1xufVxuIiwgIi8qKiBRdWV1ZSBjb25maWd1cmF0aW9uIG9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVPcHRpb25zIHtcbiAgLyoqIFRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBCeSBkZWZhdWx0IHRoZXJlIGlzIG5vIGF1dG9tYXRpYyBmbHVzaGluZyAoYG51bGxgKS4gKi9cbiAgZGVsYXk/OiBudWxsIHwgbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBpcyBgSW5maW5pdHlgLiAqL1xuICBtYXg/OiBudW1iZXI7XG59XG4vKipcbiAqIFF1ZXVlIGV4dGVuZGluZyBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIG1ldGhvZCBuYW1lcyB0byBiZSByZXBsYWNlZCBieSBxdWV1ZWQgdmVyc2lvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVFeHRlbmRPcHRpb25zPFQ+IHtcbiAgLyoqIEEgbGlzdCB3aXRoIG1ldGhvZCBuYW1lcyBvZiB0aGUgbWV0aG9kcyBvbiB0aGUgb2JqZWN0IHRvIGJlIHJlcGxhY2VkIHdpdGggcXVldWVkIG9uZXMuICovXG4gIHJlcGxhY2U6IFRbXTtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0IHZhbHVlIGlzIG51bGwuICovXG4gIGRlbGF5PzogbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBvZiBtYXggaXMgSW5maW5pdHkuICovXG4gIG1heD86IG51bWJlcjtcbn1cbi8qKlxuICogUXVldWUgY2FsbCBlbnRyeS5cbiAqIC0gQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZC5cbiAqIC0gQW4gb2JqZWN0IHdpdGggZnVuY3Rpb24sIGFyZ3MsIGNvbnRleHQgKGxpa2UgZnVuY3Rpb24uYmluZChjb250ZXh0LCAuLi5hcmdzKSkuXG4gKi9cbnR5cGUgUXVldWVDYWxsRW50cnkgPVxuICB8IEZ1bmN0aW9uXG4gIHwge1xuICAgICAgZm46IEZ1bmN0aW9uO1xuICAgICAgYXJnczogdW5rbm93bltdO1xuICAgIH1cbiAgfCB7XG4gICAgICBmbjogRnVuY3Rpb247XG4gICAgICBhcmdzOiB1bmtub3duW107XG4gICAgICBjb250ZXh0OiB1bmtub3duO1xuICAgIH07XG5cbmludGVyZmFjZSBRdWV1ZUV4dGVuZGVkPE8+IHtcbiAgb2JqZWN0OiBPO1xuICBtZXRob2RzOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG9yaWdpbmFsOiB1bmtub3duO1xuICB9W107XG59XG5cbi8qKlxuICogQSBxdWV1ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBtZXRob2QgbmFtZXMgdG8gYmUgcmVwbGFjZWQgYnkgcXVldWVkIHZlcnNpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUXVldWU8VCA9IG5ldmVyPiB7XG4gIC8qKiBEZWxheSBpbiBtaWxsaXNlY29uZHMuIElmIGRlZmluZWQgdGhlIHF1ZXVlIHdpbGwgYmUgcGVyaW9kaWNhbGx5IGZsdXNoZWQuICovXG4gIHB1YmxpYyBkZWxheTogbnVsbCB8IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHF1ZXVlIGJlZm9yZSBpdCB3aWxsIGJlIGZsdXNoZWQuICovXG4gIHB1YmxpYyBtYXg6IG51bWJlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9xdWV1ZToge1xuICAgIGZuOiBGdW5jdGlvbjtcbiAgICBhcmdzPzogdW5rbm93bltdO1xuICAgIGNvbnRleHQ/OiB1bmtub3duO1xuICB9W10gPSBbXTtcblxuICBwcml2YXRlIF90aW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9leHRlbmRlZDogbnVsbCB8IFF1ZXVlRXh0ZW5kZWQ8VD4gPSBudWxsO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgUXVldWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUXVldWUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zPzogUXVldWVPcHRpb25zKSB7XG4gICAgLy8gb3B0aW9uc1xuICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgIHRoaXMubWF4ID0gSW5maW5pdHk7XG5cbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBRdWV1ZSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHNldE9wdGlvbnMob3B0aW9ucz86IFF1ZXVlT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmRlbGF5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLmRlbGF5ID0gb3B0aW9ucy5kZWxheTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLm1heCA9IG9wdGlvbnMubWF4O1xuICAgIH1cblxuICAgIHRoaXMuX2ZsdXNoSWZOZWVkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmQgYW4gb2JqZWN0IHdpdGggcXVldWluZyBmdW5jdGlvbmFsaXR5LlxuICAgKiBUaGUgb2JqZWN0IHdpbGwgYmUgZXh0ZW5kZWQgd2l0aCBhIGZ1bmN0aW9uIGZsdXNoLCBhbmQgdGhlIG1ldGhvZHMgcHJvdmlkZWQgaW4gb3B0aW9ucy5yZXBsYWNlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBxdWV1ZWQgb25lcy5cbiAgICpcbiAgICogQHBhcmFtIG9iamVjdCAtIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBxdWV1ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZXh0ZW5kPE8gZXh0ZW5kcyB7IGZsdXNoPzogKCkgPT4gdm9pZCB9LCBLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IE8sXG4gICAgb3B0aW9uczogUXVldWVFeHRlbmRPcHRpb25zPEs+XG4gICk6IFF1ZXVlPE8+IHtcbiAgICBjb25zdCBxdWV1ZSA9IG5ldyBRdWV1ZTxPPihvcHRpb25zKTtcblxuICAgIGlmIChvYmplY3QuZmx1c2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFyZ2V0IG9iamVjdCBhbHJlYWR5IGhhcyBhIHByb3BlcnR5IGZsdXNoXCIpO1xuICAgIH1cbiAgICBvYmplY3QuZmx1c2ggPSAoKTogdm9pZCA9PiB7XG4gICAgICBxdWV1ZS5mbHVzaCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBtZXRob2RzOiBRdWV1ZUV4dGVuZGVkPE8+W1wibWV0aG9kc1wiXSA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJmbHVzaFwiLFxuICAgICAgICBvcmlnaW5hbDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXBsYWNlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMucmVwbGFjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBuYW1lID0gb3B0aW9ucy5yZXBsYWNlW2ldO1xuICAgICAgICBtZXRob2RzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBvcmlnaW5hbDogKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPilbbmFtZV0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICBxdWV1ZS5yZXBsYWNlKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPiwgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVldWUuX2V4dGVuZGVkID0ge1xuICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICBtZXRob2RzOiBtZXRob2RzLFxuICAgIH07XG5cbiAgICByZXR1cm4gcXVldWU7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSB0aGUgcXVldWUuIFRoZSBxdWV1ZSB3aWxsIGZpcnN0IGZsdXNoIGFsbCBxdWV1ZWQgYWN0aW9ucywgYW5kIGluIGNhc2UgaXQgaGFzIGV4dGVuZGVkIGFuIG9iamVjdCwgd2lsbCByZXN0b3JlIHRoZSBvcmlnaW5hbCBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsdXNoKCk7XG5cbiAgICBpZiAodGhpcy5fZXh0ZW5kZWQpIHtcbiAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuX2V4dGVuZGVkLm9iamVjdDtcbiAgICAgIGNvbnN0IG1ldGhvZHMgPSB0aGlzLl9leHRlbmRlZC5tZXRob2RzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IG1ldGhvZHNbaV07XG4gICAgICAgIGlmIChtZXRob2Qub3JpZ2luYWwpIHtcbiAgICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICAgIChvYmplY3QgYXMgYW55KVttZXRob2QubmFtZV0gPSBtZXRob2Qub3JpZ2luYWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBkZWxldGUgKG9iamVjdCBhcyBhbnkpW21ldGhvZC5uYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fZXh0ZW5kZWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgbWV0aG9kIG9uIGFuIG9iamVjdCB3aXRoIGEgcXVldWVkIHZlcnNpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgLSBPYmplY3QgaGF2aW5nIHRoZSBtZXRob2QuXG4gICAqIEBwYXJhbSBtZXRob2QgLSBUaGUgbWV0aG9kIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgcmVwbGFjZTxNIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IFJlY29yZDxNLCAoKSA9PiB2b2lkPixcbiAgICBtZXRob2Q6IE1cbiAgKTogdm9pZCB7XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzIC0tIEZ1bmN0aW9uIHRoaXMgaXMgbmVjZXNzYXJ5IGluIHRoZSBmdW5jdGlvbiBiZWxsb3csIHNvIGNsYXNzIHRoaXMgaGFzIHRvIGJlIHNhdmVkIGludG8gYSB2YXJpYWJsZSBoZXJlLiAqL1xuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjb25zdCBvcmlnaW5hbCA9IG9iamVjdFttZXRob2RdO1xuICAgIGlmICghb3JpZ2luYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBcIiArIG1ldGhvZCArIFwiIHVuZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBvYmplY3RbbWV0aG9kXSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICAgIC8vIGFkZCB0aGlzIGNhbGwgdG8gdGhlIHF1ZXVlXG4gICAgICBtZS5xdWV1ZSh7XG4gICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgIGZuOiBvcmlnaW5hbCxcbiAgICAgICAgY29udGV4dDogdGhpcyxcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUXVldWUgYSBjYWxsLlxuICAgKlxuICAgKiBAcGFyYW0gZW50cnkgLSBUaGUgZnVuY3Rpb24gb3IgZW50cnkgdG8gYmUgcXVldWVkLlxuICAgKi9cbiAgcHVibGljIHF1ZXVlKGVudHJ5OiBRdWV1ZUNhbGxFbnRyeSk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7IGZuOiBlbnRyeSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWUucHVzaChlbnRyeSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmx1c2hJZk5lZWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHF1ZXVlIG5lZWRzIHRvIGJlIGZsdXNoZWQuXG4gICAqL1xuICBwcml2YXRlIF9mbHVzaElmTmVlZGVkKCk6IHZvaWQge1xuICAgIC8vIGZsdXNoIHdoZW4gdGhlIG1heGltdW0gaXMgZXhjZWVkZWQuXG4gICAgaWYgKHRoaXMuX3F1ZXVlLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gICAgLy8gZmx1c2ggYWZ0ZXIgYSBwZXJpb2Qgb2YgaW5hY3Rpdml0eSB3aGVuIGEgZGVsYXkgaXMgY29uZmlndXJlZFxuICAgIGlmICh0aGlzLl90aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHR5cGVvZiB0aGlzLmRlbGF5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH0sIHRoaXMuZGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaCBhbGwgcXVldWVkIGNhbGxzXG4gICAqL1xuICBwdWJsaWMgZmx1c2goKTogdm9pZCB7XG4gICAgdGhpcy5fcXVldWUuc3BsaWNlKDApLmZvckVhY2goKGVudHJ5KTogdm9pZCA9PiB7XG4gICAgICBlbnRyeS5mbi5hcHBseShlbnRyeS5jb250ZXh0IHx8IGVudHJ5LmZuLCBlbnRyeS5hcmdzIHx8IFtdKTtcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIERhdGFJbnRlcmZhY2UsXG4gIEV2ZW50Q2FsbGJhY2tzV2l0aEFueSxcbiAgRXZlbnROYW1lLFxuICBFdmVudE5hbWVXaXRoQW55LFxuICBFdmVudFBheWxvYWRzLFxuICBJZCxcbiAgUGFydEl0ZW0sXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbnR5cGUgRXZlbnRTdWJzY3JpYmVyczxJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPiwgSWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgW05hbWUgaW4ga2V5b2YgRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5dOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG59O1xuXG4vKipcbiAqIHtAbGluayBEYXRhU2V0fSBjb2RlIHRoYXQgY2FuIGJlIHJldXNlZCBpbiB7QGxpbmsgRGF0YVZpZXd9IG9yIG90aGVyIHNpbWlsYXIgaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBEYXRhSW50ZXJmYWNlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFTZXRQYXJ0PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGltcGxlbWVudHMgUGljazxEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4sIFwib25cIiB8IFwib2ZmXCI+XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmliZXJzOiB7XG4gICAgW05hbWUgaW4gRXZlbnROYW1lV2l0aEFueV06IEV2ZW50U3Vic2NyaWJlcnM8SXRlbSwgSWRQcm9wPltOYW1lXVtdO1xuICB9ID0ge1xuICAgIFwiKlwiOiBbXSxcbiAgICBhZGQ6IFtdLFxuICAgIHJlbW92ZTogW10sXG4gICAgdXBkYXRlOiBbXSxcbiAgfTtcblxuICBwcm90ZWN0ZWQgX3RyaWdnZXIoXG4gICAgZXZlbnQ6IFwiYWRkXCIsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1wiYWRkXCJdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG4gIHByb3RlY3RlZCBfdHJpZ2dlcihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgcHJvdGVjdGVkIF90cmlnZ2VyKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogVHJpZ2dlciBhbiBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIEV2ZW50IHBheWxvYWQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIElkIG9mIHRoZSBzZW5kZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3RyaWdnZXI8TmFtZSBleHRlbmRzIEV2ZW50TmFtZT4oXG4gICAgZXZlbnQ6IE5hbWUsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W05hbWVdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIGlmICgoZXZlbnQgYXMgc3RyaW5nKSA9PT0gXCIqXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB0cmlnZ2VyIGV2ZW50ICpcIik7XG4gICAgfVxuXG4gICAgWy4uLnRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XSwgLi4udGhpcy5fc3Vic2NyaWJlcnNbXCIqXCJdXS5mb3JFYWNoKFxuICAgICAgKHN1YnNjcmliZXIpOiB2b2lkID0+IHtcbiAgICAgICAgc3Vic2NyaWJlcihldmVudCwgcGF5bG9hZCwgc2VuZGVySWQgIT0gbnVsbCA/IHNlbmRlcklkIDogbnVsbCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwiKlwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJhZGRcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl1cbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBhbiBldmVudCwgYWRkIGFuIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBOb24tZnVuY3Rpb24gY2FsbGJhY2tzIGFyZSBpZ25vcmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgb248TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XS5wdXNoKGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLy8gQFRPRE86IE1heWJlIHRocm93IGZvciBpbnZhbGlkIGNhbGxiYWNrcz9cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcIipcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcImFkZFwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXVxuICApOiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvZmYoXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIGFuIGV2ZW50LCByZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIElmIHRoZSBzYW1lIGNhbGxiYWNrIHdhcyBzdWJzY3JpYmVkIG1vcmUgdGhhbiBvbmNlICoqYWxsKiogb2NjdXJlbmNlcyB3aWxsIGJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIG1ldGhvZC5cbiAgICovXG4gIHB1YmxpYyBvZmY8TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0gPSB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0uZmlsdGVyKFxuICAgICAgKHN1YnNjcmliZXIpOiBib29sZWFuID0+IHN1YnNjcmliZXIgIT09IGNhbGxiYWNrXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb24gaW5zdGVhZCAoUFM6IERhdGFWaWV3LnN1YnNjcmliZSA9PT0gRGF0YVZpZXcub24pLlxuICAgKi9cbiAgcHVibGljIHN1YnNjcmliZTogRGF0YVNldFBhcnQ8SXRlbSwgSWRQcm9wPltcIm9uXCJdID0gRGF0YVNldFBhcnQucHJvdG90eXBlLm9uO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9mZiBpbnN0ZWFkIChQUzogRGF0YVZpZXcudW5zdWJzY3JpYmUgPT09IERhdGFWaWV3Lm9mZikuXG4gICAqL1xuICBwdWJsaWMgdW5zdWJzY3JpYmU6IERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5bXCJvZmZcIl0gPVxuICAgIERhdGFTZXRQYXJ0LnByb3RvdHlwZS5vZmY7XG5cbiAgLyogZGV2ZWxibG9jazpzdGFydCAqL1xuICBwdWJsaWMgZ2V0IHRlc3RMZWFrU3Vic2NyaWJlcnMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlcnM7XG4gIH1cbiAgLyogZGV2ZWxibG9jazplbmQgKi9cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgU2V0YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQtb2JqZWN0c1xuY29sbGVjdGlvbignU2V0JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU2V0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zZXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3NldFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vZXMvZ2V0LWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL3N0YWJsZS9nZXQtaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL2FjdHVhbC9nZXQtaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9mdWxsL2dldC1pdGVyYXRvcicpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3JcIik7IiwgImltcG9ydCB7IElkIH0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcblxuLyoqXG4gKiBEYXRhIHN0cmVhbVxuICpcbiAqIEByZW1hcmtzXG4gKiB7QGxpbmsgRGF0YVN0cmVhbX0gb2ZmZXJzIGFuIGFsd2F5cyB1cCB0byBkYXRlIHN0cmVhbSBvZiBpdGVtcyBmcm9tIGEge0BsaW5rIERhdGFTZXR9IG9yIHtAbGluayBEYXRhVmlld30uXG4gKiBUaGF0IG1lYW5zIHRoYXQgdGhlIHN0cmVhbSBpcyBldmFsdWF0ZWQgYXQgdGhlIHRpbWUgb2YgaXRlcmF0aW9uLCBjb252ZXJzaW9uIHRvIGFub3RoZXIgZGF0YSB0eXBlIG9yIHdoZW4ge0BsaW5rIGNhY2hlfSBpcyBjYWxsZWQsIG5vdCB3aGVuIHRoZSB7QGxpbmsgRGF0YVN0cmVhbX0gd2FzIGNyZWF0ZWQuXG4gKiBNdWx0aXBsZSBpbnZvY2F0aW9ucyBvZiBmb3IgZXhhbXBsZSB7QGxpbmsgdG9JdGVtQXJyYXl9IG1heSB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cyAoaWYgdGhlIGRhdGEgc291cmNlIGxpa2UgZm9yIGV4YW1wbGUge0BsaW5rIERhdGFTZXR9IGdldHMgbW9kaWZpZWQpLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gVGhlIGl0ZW0gdHlwZSB0aGlzIHN0cmVhbSBpcyBnb2luZyB0byB3b3JrIHdpdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU3RyZWFtPEl0ZW0+IGltcGxlbWVudHMgSXRlcmFibGU8W0lkLCBJdGVtXT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWlyczogSXRlcmFibGU8W0lkLCBJdGVtXT47XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBkYXRhIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIHBhaXJzIC0gVGhlIGlkLCBpdGVtIHBhaXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhaXJzOiBJdGVyYWJsZTxbSWQsIEl0ZW1dPikge1xuICAgIHRoaXMuX3BhaXJzID0gcGFpcnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGl0ZXJhYmxlIG9mIGtleSwgdmFsdWUgcGFpcnMgZm9yIGV2ZXJ5IGVudHJ5IGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBJdGVtXT4ge1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgeWllbGQgW2lkLCBpdGVtXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGl0ZXJhYmxlIG9mIGtleSwgdmFsdWUgcGFpcnMgZm9yIGV2ZXJ5IGVudHJ5IGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKmVudHJpZXMoKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiB7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICB5aWVsZCBbaWQsIGl0ZW1dO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2Yga2V5cyBpbiB0aGUgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljICprZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8SWQ+IHtcbiAgICBmb3IgKGNvbnN0IFtpZF0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHlpZWxkIGlkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2YgdmFsdWVzIGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKnZhbHVlcygpOiBJdGVyYWJsZUl0ZXJhdG9yPEl0ZW0+IHtcbiAgICBmb3IgKGNvbnN0IFssIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICB5aWVsZCBpdGVtO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGlkcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFycmF5IG1heSBjb250YWluIGR1cGxpY2l0aWVzLlxuICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCBhbGwgaWRzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9JZEFycmF5KCk6IElkW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcGFpcnNdLm1hcCgocGFpcik6IElkID0+IHBhaXJbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgaXRlbXMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBhcnJheSBtYXkgY29udGFpbiBkdXBsaWNpdGllcy5cbiAgICogQHJldHVybnMgVGhlIGFycmF5IHdpdGggYWxsIGl0ZW1zIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9JdGVtQXJyYXkoKTogSXRlbVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3BhaXJzXS5tYXAoKHBhaXIpOiBJdGVtID0+IHBhaXJbMV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgZW50cmllcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFycmF5IG1heSBjb250YWluIGR1cGxpY2l0aWVzLlxuICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCBhbGwgZW50cmllcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvRW50cnlBcnJheSgpOiBbSWQsIEl0ZW1dW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcGFpcnNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvYmplY3QgbWFwIGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBpbiB0aGlzIHN0cmVhbSBhY2Nlc3NpYmxlIGJ5IGlkcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSW4gY2FzZSBvZiBkdXBsaWNhdGUgaWRzIChjb2VyY2VkIHRvIHN0cmluZyBzbyBgNyA9PSAnNydgKSB0aGUgbGFzdCBlbmNvdXRlcmVkIGFwcGVhcnMgaW4gdGhlIHJldHVybmVkIG9iamVjdC5cbiAgICogQHJldHVybnMgVGhlIG9iamVjdCBtYXAgb2YgYWxsIGlkIOKGkiBpdGVtIHBhaXJzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9PYmplY3RNYXAoKTogUmVjb3JkPElkLCBJdGVtPiB7XG4gICAgY29uc3QgbWFwOiBSZWNvcmQ8SWQsIEl0ZW0+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIG1hcFtpZF0gPSBpdGVtO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hcCBjb250YWluaW5nIGFsbCB0aGUgaXRlbXMgaW4gdGhpcyBzdHJlYW0gYWNjZXNzaWJsZSBieSBpZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBtYXAgb2YgYWxsIGlkIOKGkiBpdGVtIHBhaXJzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9NYXAoKTogTWFwPElkLCBJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBNYXAodGhpcy5fcGFpcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHNldCBjb250YWluaW5nIGFsbCB0aGUgKHVuaXF1ZSkgaWRzIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2V0IG9mIGFsbCBpZHMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0lkU2V0KCk6IFNldDxJZD4ge1xuICAgIHJldHVybiBuZXcgU2V0KHRoaXMudG9JZEFycmF5KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHNldCBjb250YWluaW5nIGFsbCB0aGUgKHVuaXF1ZSkgaXRlbXMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBzZXQgb2YgYWxsIGl0ZW1zIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9JdGVtU2V0KCk6IFNldDxJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBTZXQodGhpcy50b0l0ZW1BcnJheSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWNoZSB0aGUgaXRlbXMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBtZXRob2QgYWxsb3dzIGZvciBpdGVtcyB0byBiZSBmZXRjaGVkIGltbWVkaWF0ZWxseSBhbmQgdXNlZCAocG9zc2libHkgbXVsdGlwbGUgdGltZXMpIGxhdGVyLlxuICAgKiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIG9wdGltaXplIHBlcmZvcm1hbmNlIGFzIHtAbGluayBEYXRhU3RyZWFtfSB3b3VsZCBvdGhlcndpc2UgcmVldmFsdWF0ZSBldmVyeXRoaW5nIHVwb24gZWFjaCBpdGVyYXRpb24uXG4gICAqXG4gICAqICMjIEV4YW1wbGVcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiBjb25zdCBkcyA9IG5ldyBEYXRhU2V0KFvigKZdKVxuICAgKlxuICAgKiBjb25zdCBjYWNoZWRTdHJlYW0gPSBkcy5zdHJlYW0oKVxuICAgKiAgIC5maWx0ZXIo4oCmKVxuICAgKiAgIC5zb3J0KOKApilcbiAgICogICAubWFwKOKApilcbiAgICogICAuY2FjaGVkKOKApikgLy8gRGF0YSBhcmUgZmV0Y2hlZCwgcHJvY2Vzc2VkIGFuZCBjYWNoZWQgaGVyZS5cbiAgICpcbiAgICogZHMuY2xlYXIoKVxuICAgKiBjaGFjaGVkU3RyZWFtIC8vIFN0aWxsIGhhcyBhbGwgdGhlIGl0ZW1zLlxuICAgKiBgYGBcbiAgICogQHJldHVybnMgQSBuZXcge0BsaW5rIERhdGFTdHJlYW19IHdpdGggY2FjaGVkIGl0ZW1zIChkZXRhY2hlZCBmcm9tIHRoZSBvcmlnaW5hbCB7QGxpbmsgRGF0YVNldH0pLlxuICAgKi9cbiAgcHVibGljIGNhY2hlKCk6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbShbLi4udGhpcy5fcGFpcnNdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRpc3RpbmN0IHZhbHVlcyBvZiBnaXZlbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcGlja3MgYW5kIHBvc3NpYmx5IGNvbnZlcnRzIHRoZSBwcm9wZXJ0eS5cbiAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGRpc3RpbmN0IHZhbHVlLlxuICAgKiBAcmV0dXJucyBBIHNldCBvZiBhbGwgZGlzdGluY3QgcHJvcGVydGllcy5cbiAgICovXG4gIHB1YmxpYyBkaXN0aW5jdDxUPihjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCk6IFNldDxUPiB7XG4gICAgY29uc3Qgc2V0ID0gbmV3IFNldDxUPigpO1xuXG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICBzZXQuYWRkKGNhbGxiYWNrKGl0ZW0sIGlkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIGl0ZW1zIG9mIHRoZSBzdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IGRlY2lkZXMgd2hldGhlciBhbiBpdGVtIHdpbGwgYmUgaW5jbHVkZWQuXG4gICAqIEByZXR1cm5zIEEgbmV3IGRhdGEgc3RyZWFtIHdpdGggdGhlIGZpbHRlcmVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIGZpbHRlcihjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gYm9vbGVhbik6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIGNvbnN0IHBhaXJzID0gdGhpcy5fcGFpcnM7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtPEl0ZW0+KHtcbiAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+IHtcbiAgICAgICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHBhaXJzKSB7XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKGl0ZW0sIGlkKSkge1xuICAgICAgICAgICAgeWllbGQgW2lkLCBpdGVtXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIGl0ZW0gb2YgdGhlIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnZva2VkIGZvciBlYWNoIGl0ZW0uXG4gICAqL1xuICBwdWJsaWMgZm9yRWFjaChjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gYm9vbGVhbik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgdGhlIGl0ZW1zIGludG8gYSBkaWZmZXJlbnQgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgY29udmVyc2lvbi5cbiAgICogQHR5cGVQYXJhbSBNYXBwZWQgLSBUaGUgdHlwZSBvZiB0aGUgaXRlbSBhZnRlciBtYXBwaW5nLlxuICAgKiBAcmV0dXJucyBBIG5ldyBkYXRhIHN0cmVhbSB3aXRoIHRoZSBtYXBwZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgbWFwPE1hcHBlZD4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IE1hcHBlZFxuICApOiBEYXRhU3RyZWFtPE1hcHBlZD4ge1xuICAgIGNvbnN0IHBhaXJzID0gdGhpcy5fcGFpcnM7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtPE1hcHBlZD4oe1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBNYXBwZWRdPiB7XG4gICAgICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiBwYWlycykge1xuICAgICAgICAgIHlpZWxkIFtpZCwgY2FsbGJhY2soaXRlbSwgaWQpXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGl0ZW0gd2l0aCB0aGUgbWF4aW11bSB2YWx1ZSBvZiBnaXZlbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcGlja3MgYW5kIHBvc3NpYmx5IGNvbnZlcnRzIHRoZSBwcm9wZXJ0eS5cbiAgICogQHJldHVybnMgVGhlIGl0ZW0gd2l0aCB0aGUgbWF4aW11bSBpZiBmb3VuZCBvdGhlcndpc2UgbnVsbC5cbiAgICovXG4gIHB1YmxpYyBtYXgoY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IG51bWJlcik6IEl0ZW0gfCBudWxsIHtcbiAgICBjb25zdCBpdGVyID0gdGhpcy5fcGFpcnNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIGxldCBjdXJyID0gaXRlci5uZXh0KCk7XG4gICAgaWYgKGN1cnIuZG9uZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IG1heEl0ZW06IEl0ZW0gPSBjdXJyLnZhbHVlWzFdO1xuICAgIGxldCBtYXhWYWx1ZTogbnVtYmVyID0gY2FsbGJhY2soY3Vyci52YWx1ZVsxXSwgY3Vyci52YWx1ZVswXSk7XG4gICAgd2hpbGUgKCEoY3VyciA9IGl0ZXIubmV4dCgpKS5kb25lKSB7XG4gICAgICBjb25zdCBbaWQsIGl0ZW1dID0gY3Vyci52YWx1ZTtcbiAgICAgIGNvbnN0IHZhbHVlID0gY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgaWYgKHZhbHVlID4gbWF4VmFsdWUpIHtcbiAgICAgICAgbWF4VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgbWF4SXRlbSA9IGl0ZW07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heEl0ZW07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpdGVtIHdpdGggdGhlIG1pbmltdW0gdmFsdWUgb2YgZ2l2ZW4gcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IHBpY2tzIGFuZCBwb3NzaWJseSBjb252ZXJ0cyB0aGUgcHJvcGVydHkuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIHdpdGggdGhlIG1pbmltdW0gaWYgZm91bmQgb3RoZXJ3aXNlIG51bGwuXG4gICAqL1xuICBwdWJsaWMgbWluKGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBudW1iZXIpOiBJdGVtIHwgbnVsbCB7XG4gICAgY29uc3QgaXRlciA9IHRoaXMuX3BhaXJzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICBsZXQgY3VyciA9IGl0ZXIubmV4dCgpO1xuICAgIGlmIChjdXJyLmRvbmUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBtaW5JdGVtOiBJdGVtID0gY3Vyci52YWx1ZVsxXTtcbiAgICBsZXQgbWluVmFsdWU6IG51bWJlciA9IGNhbGxiYWNrKGN1cnIudmFsdWVbMV0sIGN1cnIudmFsdWVbMF0pO1xuICAgIHdoaWxlICghKGN1cnIgPSBpdGVyLm5leHQoKSkuZG9uZSkge1xuICAgICAgY29uc3QgW2lkLCBpdGVtXSA9IGN1cnIudmFsdWU7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICAgIGlmICh2YWx1ZSA8IG1pblZhbHVlKSB7XG4gICAgICAgIG1pblZhbHVlID0gdmFsdWU7XG4gICAgICAgIG1pbkl0ZW0gPSBpdGVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtaW5JdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHVjZSB0aGUgaXRlbXMgaW50byBhIHNpbmdsZSB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgcmVkdWN0aW9uLlxuICAgKiBAcGFyYW0gYWNjdW11bGF0b3IgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYWNjdW11bGF0b3IuXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhlIHJlZHVjZWQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgcmVkdWNlPFQ+KFxuICAgIGNhbGxiYWNrOiAoYWNjdW11bGF0b3I6IFQsIGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBhY2N1bXVsYXRvcjogVFxuICApOiBUIHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gY2FsbGJhY2soYWNjdW11bGF0b3IsIGl0ZW0sIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnQgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBJdGVtIGNvbXBhcmF0b3IuXG4gICAqIEByZXR1cm5zIEEgbmV3IHN0cmVhbSB3aXRoIHNvcnRlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBzb3J0KFxuICAgIGNhbGxiYWNrOiAoaXRlbUE6IEl0ZW0sIGl0ZW1COiBJdGVtLCBpZEE6IElkLCBpZEI6IElkKSA9PiBudW1iZXJcbiAgKTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtKHtcbiAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiAoKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiA9PlxuICAgICAgICBbLi4udGhpcy5fcGFpcnNdXG4gICAgICAgICAgLnNvcnQoKFtpZEEsIGl0ZW1BXSwgW2lkQiwgaXRlbUJdKTogbnVtYmVyID0+XG4gICAgICAgICAgICBjYWxsYmFjayhpdGVtQSwgaXRlbUIsIGlkQSwgaWRCKVxuICAgICAgICAgIClcbiAgICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpLFxuICAgIH0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgdjQgYXMgdXVpZDQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgcHVyZURlZXBPYmplY3RBc3NpZ24gfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbmltcG9ydCB7XG4gIERhdGFJbnRlcmZhY2UsXG4gIERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldElkc09wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5LFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdCxcbiAgRGF0YUludGVyZmFjZU1hcE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VPcmRlcixcbiAgRGVlcFBhcnRpYWwsXG4gIEV2ZW50UGF5bG9hZHMsXG4gIEZ1bGxJdGVtLFxuICBJZCxcbiAgT3B0SWQsXG4gIFBhcnRJdGVtLFxuICBVcGRhdGVJdGVtLFxuICBpc0lkLFxufSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG5pbXBvcnQgeyBRdWV1ZSwgUXVldWVPcHRpb25zIH0gZnJvbSBcIi4vcXVldWVcIjtcbmltcG9ydCB7IERhdGFTZXRQYXJ0IH0gZnJvbSBcIi4vZGF0YS1zZXQtcGFydFwiO1xuaW1wb3J0IHsgRGF0YVN0cmVhbSB9IGZyb20gXCIuL2RhdGEtc3RyZWFtXCI7XG5cbi8qKlxuICogSW5pdGlhbCBEYXRhU2V0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICpcbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcCBleHRlbmRzIHN0cmluZz4ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZpZWxkIGNvbnRhaW5pbmcgdGhlIGlkIG9mIHRoZSBpdGVtcy4gV2hlbiBkYXRhIGlzIGZldGNoZWQgZnJvbSBhIHNlcnZlciB3aGljaCB1c2VzIHNvbWUgc3BlY2lmaWMgZmllbGQgdG8gaWRlbnRpZnkgaXRlbXMsIHRoaXMgZmllbGQgbmFtZSBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBEYXRhU2V0IHVzaW5nIHRoZSBvcHRpb24gYGZpZWxkSWRgLiBGb3IgZXhhbXBsZSBbQ291Y2hEQl0oaHR0cDovL2NvdWNoZGIuYXBhY2hlLm9yZy8pIHVzZXMgdGhlIGZpZWxkIGAnX2lkJ2AgdG8gaWRlbnRpZnkgZG9jdW1lbnRzLlxuICAgKi9cbiAgZmllbGRJZD86IElkUHJvcDtcbiAgLyoqXG4gICAqIFF1ZXVlIGRhdGEgY2hhbmdlcyAoJ2FkZCcsICd1cGRhdGUnLCAncmVtb3ZlJykgYW5kIGZsdXNoIHRoZW0gYXQgb25jZS4gVGhlIHF1ZXVlIGNhbiBiZSBmbHVzaGVkIG1hbnVhbGx5IGJ5IGNhbGxpbmcgYERhdGFTZXQuZmx1c2goKWAsIG9yIGNhbiBiZSBmbHVzaGVkIGFmdGVyIGEgY29uZmlndXJlZCBkZWxheSBvciBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzLlxuICAgKlxuICAgKiBXaGVuIHF1ZXVlIGlzIHRydWUsIGEgcXVldWUgaXMgY3JlYXRlZCB3aXRoIGRlZmF1bHQgb3B0aW9ucy4gT3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHByb3ZpZGluZyBhbiBvYmplY3QuXG4gICAqL1xuICBxdWV1ZT86IFF1ZXVlT3B0aW9ucyB8IGZhbHNlO1xufVxuLyoqIERhdGFTZXQgY29uZmlndXJhdGlvbiBvYmplY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFF1ZXVlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IG9yIGZhbHNlIGlmIG5vIHF1ZXVlIHNob3VsZCBiZSB1c2VkLlxuICAgKlxuICAgKiAtIElmIGZhbHNlIGFuZCB0aGVyZSB3YXMgYSBxdWV1ZSBiZWZvcmUgaXQgd2lsbCBiZSBmbHVzaGVkIGFuZCB0aGVuIHJlbW92ZWQuXG4gICAqIC0gSWYge0BsaW5rIFF1ZXVlT3B0aW9uc30gdGhlIGV4aXN0aW5nIHF1ZXVlIHdpbGwgYmUgcmVjb25maWd1cmVkIG9yIGEgbmV3IHF1ZXVlIHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIHF1ZXVlPzogUXVldWUgfCBRdWV1ZU9wdGlvbnMgfCBmYWxzZTtcbn1cblxuLyoqXG4gKiBBZGQgYW4gaWQgdG8gZ2l2ZW4gaXRlbSBpZiBpdCBkb2Vzbid0IGhhdmUgb25lIGFscmVhZHkuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBpdGVtIHdpbGwgYmUgbW9kaWZpZWQuXG4gKiBAcGFyYW0gaXRlbSAtIFRoZSBpdGVtIHRoYXQgd2lsbCBoYXZlIGFuIGlkIGFmdGVyIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIGlkUHJvcCAtIFRoZSBrZXkgb2YgdGhlIGlkIHByb3BlcnR5LlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKiBAcmV0dXJucyB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVuc3VyZUZ1bGxJdGVtPEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LCBJZFByb3AgZXh0ZW5kcyBzdHJpbmc+KFxuICBpdGVtOiBJdGVtLFxuICBpZFByb3A6IElkUHJvcFxuKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB7XG4gIGlmIChpdGVtW2lkUHJvcF0gPT0gbnVsbCkge1xuICAgIC8vIGdlbmVyYXRlIGFuIGlkXG4gICAgaXRlbVtpZFByb3BdID0gdXVpZDQoKSBhcyBhbnk7XG4gIH1cblxuICByZXR1cm4gaXRlbSBhcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xufVxuXG4vKipcbiAqICMgRGF0YVNldFxuICpcbiAqIFZpcy5qcyBjb21lcyB3aXRoIGEgZmxleGlibGUgRGF0YVNldCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gaG9sZCBhbmRcbiAqIG1hbmlwdWxhdGUgdW5zdHJ1Y3R1cmVkIGRhdGEgYW5kIGxpc3RlbiBmb3IgY2hhbmdlcyBpbiB0aGUgZGF0YS4gVGhlIERhdGFTZXRcbiAqIGlzIGtleS92YWx1ZSBiYXNlZC4gRGF0YSBpdGVtcyBjYW4gYmUgYWRkZWQsIHVwZGF0ZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGVcbiAqIERhdGFTZXQsIGFuZCBvbmUgY2FuIHN1YnNjcmliZSB0byBjaGFuZ2VzIGluIHRoZSBEYXRhU2V0LiBUaGUgZGF0YSBpbiB0aGVcbiAqIERhdGFTZXQgY2FuIGJlIGZpbHRlcmVkIGFuZCBvcmRlcmVkLiBEYXRhIGNhbiBiZSBub3JtYWxpemVkIHdoZW4gYXBwZW5kaW5nIGl0XG4gKiB0byB0aGUgRGF0YVNldCBhcyB3ZWxsLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHVzZSBhIERhdGFTZXQuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICogdmFyIG9wdGlvbnMgPSB7fTtcbiAqIHZhciBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KG9wdGlvbnMpO1xuICpcbiAqIC8vIGFkZCBpdGVtc1xuICogLy8gbm90ZSB0aGF0IHRoZSBkYXRhIGl0ZW1zIGNhbiBjb250YWluIGRpZmZlcmVudCBwcm9wZXJ0aWVzIGFuZCBkYXRhIGZvcm1hdHNcbiAqIGRhdGEuYWRkKFtcbiAqICAge2lkOiAxLCB0ZXh0OiAnaXRlbSAxJywgZGF0ZTogbmV3IERhdGUoMjAxMywgNiwgMjApLCBncm91cDogMSwgZmlyc3Q6IHRydWV9LFxuICogICB7aWQ6IDIsIHRleHQ6ICdpdGVtIDInLCBkYXRlOiAnMjAxMy0wNi0yMycsIGdyb3VwOiAyfSxcbiAqICAge2lkOiAzLCB0ZXh0OiAnaXRlbSAzJywgZGF0ZTogJzIwMTMtMDYtMjUnLCBncm91cDogMn0sXG4gKiAgIHtpZDogNCwgdGV4dDogJ2l0ZW0gNCd9XG4gKiBdKTtcbiAqXG4gKiAvLyBzdWJzY3JpYmUgdG8gYW55IGNoYW5nZSBpbiB0aGUgRGF0YVNldFxuICogZGF0YS5vbignKicsIGZ1bmN0aW9uIChldmVudCwgcHJvcGVydGllcywgc2VuZGVySWQpIHtcbiAqICAgY29uc29sZS5sb2coJ2V2ZW50JywgZXZlbnQsIHByb3BlcnRpZXMpO1xuICogfSk7XG4gKlxuICogLy8gdXBkYXRlIGFuIGV4aXN0aW5nIGl0ZW1cbiAqIGRhdGEudXBkYXRlKHtpZDogMiwgZ3JvdXA6IDF9KTtcbiAqXG4gKiAvLyByZW1vdmUgYW4gaXRlbVxuICogZGF0YS5yZW1vdmUoNCk7XG4gKlxuICogLy8gZ2V0IGFsbCBpZHNcbiAqIHZhciBpZHMgPSBkYXRhLmdldElkcygpO1xuICogY29uc29sZS5sb2coJ2lkcycsIGlkcyk7XG4gKlxuICogLy8gZ2V0IGEgc3BlY2lmaWMgaXRlbVxuICogdmFyIGl0ZW0xID0gZGF0YS5nZXQoMSk7XG4gKiBjb25zb2xlLmxvZygnaXRlbTEnLCBpdGVtMSk7XG4gKlxuICogLy8gcmV0cmlldmUgYSBmaWx0ZXJlZCBzdWJzZXQgb2YgdGhlIGRhdGFcbiAqIHZhciBpdGVtcyA9IGRhdGEuZ2V0KHtcbiAqICAgZmlsdGVyOiBmdW5jdGlvbiAoaXRlbSkge1xuICogICAgIHJldHVybiBpdGVtLmdyb3VwID09IDE7XG4gKiAgIH1cbiAqIH0pO1xuICogY29uc29sZS5sb2coJ2ZpbHRlcmVkIGl0ZW1zJywgaXRlbXMpO1xuICogYGBgXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU2V0PFxuICAgIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICAgIElkUHJvcCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuICA+XG4gIGV4dGVuZHMgRGF0YVNldFBhcnQ8SXRlbSwgSWRQcm9wPlxuICBpbXBsZW1lbnRzIERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPlxue1xuICAvKiogRmx1c2ggYWxsIHF1ZXVlZCBjYWxscy4gKi9cbiAgcHVibGljIGZsdXNoPzogKCkgPT4gdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBsZW5ndGg6IG51bWJlcjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQgaWRQcm9wKCk6IElkUHJvcCB7XG4gICAgcmV0dXJuIHRoaXMuX2lkUHJvcDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhOiBNYXA8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pZFByb3A6IElkUHJvcDtcbiAgcHJpdmF0ZSBfcXVldWU6IFF1ZXVlPHRoaXM+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRGF0YVNldCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPik7XG4gIC8qKlxuICAgKiBAcGFyYW0gZGF0YSAtIEFuIGluaXRpYWwgc2V0IG9mIGl0ZW1zIGZvciB0aGUgbmV3IGluc3RhbmNlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIERhdGFTZXQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihkYXRhOiBJdGVtW10sIG9wdGlvbnM/OiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPik7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgRGF0YVNldC5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBJbml0aWFsIGRhdGEgb3Igb3B0aW9ucy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zICh0eXBlIGVycm9yIGlmIGRhdGEgaXMgYWxzbyBvcHRpb25zKS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBkYXRhPzogSXRlbVtdIHwgRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD4sXG4gICAgb3B0aW9ucz86IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+XG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBjb3JyZWN0bHkgcmVhZCBvcHRpb25hbCBhcmd1bWVudHNcbiAgICBpZiAoZGF0YSAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgb3B0aW9ucyA9IGRhdGE7XG4gICAgICBkYXRhID0gW107XG4gICAgfVxuXG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5fZGF0YSA9IG5ldyBNYXAoKTsgLy8gbWFwIHdpdGggZGF0YSBpbmRleGVkIGJ5IGlkXG4gICAgdGhpcy5sZW5ndGggPSAwOyAvLyBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIERhdGFTZXRcbiAgICB0aGlzLl9pZFByb3AgPSB0aGlzLl9vcHRpb25zLmZpZWxkSWQgfHwgKFwiaWRcIiBhcyBJZFByb3ApOyAvLyBuYW1lIG9mIHRoZSBmaWVsZCBjb250YWluaW5nIGlkXG5cbiAgICAvLyBhZGQgaW5pdGlhbCBkYXRhIHdoZW4gcHJvdmlkZWRcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCkge1xuICAgICAgdGhpcy5hZGQoZGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBuZXcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgbmV3IG9wdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zPzogRGF0YVNldE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLnF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICAvLyBkZWxldGUgcXVldWUgaWYgbG9hZGVkXG4gICAgICAgIGlmICh0aGlzLl9xdWV1ZSkge1xuICAgICAgICAgIHRoaXMuX3F1ZXVlLmRlc3Ryb3koKTtcbiAgICAgICAgICB0aGlzLl9xdWV1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNyZWF0ZSBxdWV1ZSBhbmQgdXBkYXRlIGl0cyBvcHRpb25zXG4gICAgICAgIGlmICghdGhpcy5fcXVldWUpIHtcbiAgICAgICAgICB0aGlzLl9xdWV1ZSA9IFF1ZXVlLmV4dGVuZCh0aGlzLCB7XG4gICAgICAgICAgICByZXBsYWNlOiBbXCJhZGRcIiwgXCJ1cGRhdGVcIiwgXCJyZW1vdmVcIl0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5xdWV1ZSAmJiB0eXBlb2Ygb3B0aW9ucy5xdWV1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHRoaXMuX3F1ZXVlLnNldE9wdGlvbnMob3B0aW9ucy5xdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZGF0YSBpdGVtIG9yIGFuIGFycmF5IHdpdGggaXRlbXMuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgYWRkZWQgdG8gdGhlIERhdGFTZXQsIHRoZSBEYXRhU2V0IHdpbGwgdHJpZ2dlciBhbiBldmVudCBgYWRkYC4gV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAgICogY29uc3QgZGF0YSA9IG5ldyB2aXMuRGF0YVNldCgpXG4gICAqXG4gICAqIC8vIGFkZCBpdGVtc1xuICAgKiBjb25zdCBpZHMgPSBkYXRhLmFkZChbXG4gICAqICAgeyBpZDogMSwgdGV4dDogJ2l0ZW0gMScgfSxcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyJyB9LFxuICAgKiAgIHsgdGV4dDogJ2l0ZW0gd2l0aG91dCBhbiBpZCcgfVxuICAgKiBdKVxuICAgKlxuICAgKiBjb25zb2xlLmxvZyhpZHMpIC8vIFsxLCAyLCAnPFVVSUR2ND4nXVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBJdGVtcyB0byBiZSBhZGRlZCAoaWRzIHdpbGwgYmUgZ2VuZXJhdGVkIGlmIG1pc3NpbmcpLlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIGFkZGVkSWRzIC0gQXJyYXkgd2l0aCB0aGUgaWRzIChnZW5lcmF0ZWQgaWYgbm90IHByZXNlbnQpIG9mIHRoZSBhZGRlZCBpdGVtcy5cbiAgICogQHRocm93cyBXaGVuIGFuIGl0ZW0gd2l0aCB0aGUgc2FtZSBpZCBhcyBhbnkgb2YgdGhlIGFkZGVkIGl0ZW1zIGFscmVhZHkgZXhpc3RzLlxuICAgKi9cbiAgcHVibGljIGFkZChkYXRhOiBJdGVtIHwgSXRlbVtdLCBzZW5kZXJJZD86IElkIHwgbnVsbCk6IChzdHJpbmcgfCBudW1iZXIpW10ge1xuICAgIGNvbnN0IGFkZGVkSWRzOiBJZFtdID0gW107XG4gICAgbGV0IGlkOiBJZDtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAvLyBBcnJheVxuICAgICAgY29uc3QgaWRzVG9BZGQ6IElkW10gPSBkYXRhLm1hcCgoZCkgPT4gZFt0aGlzLl9pZFByb3BdIGFzIElkKTtcbiAgICAgIGlmIChpZHNUb0FkZC5zb21lKChpZCkgPT4gdGhpcy5fZGF0YS5oYXMoaWQpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGR1cGxpY2F0ZSBpZCB3YXMgZm91bmQgaW4gdGhlIHBhcmFtZXRlciBhcnJheS5cIik7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZGF0YS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZCA9IHRoaXMuX2FkZEl0ZW0oZGF0YVtpXSk7XG4gICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgLy8gU2luZ2xlIGl0ZW1cbiAgICAgIGlkID0gdGhpcy5fYWRkSXRlbShkYXRhKTtcbiAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlXCIpO1xuICAgIH1cblxuICAgIGlmIChhZGRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogYWRkZWRJZHMgfSwgc2VuZGVySWQpO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRlZElkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZXhpc3RpbmcgaXRlbXMuIFdoZW4gYW4gaXRlbSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgcHJvdmlkZWQgcHJvcGVydGllcyB3aWxsIGJlIG1lcmdlZCBpbiB0aGUgZXhpc3RpbmcgaXRlbS4gV2hlbiBhbiBpdGVtIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgdXBkYXRlZCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGBhZGRgIGZvciB0aGUgYWRkZWQgaXRlbXMsIGFuZCBhbiBldmVudCBgdXBkYXRlYC4gV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAgICogY29uc3QgZGF0YSA9IG5ldyB2aXMuRGF0YVNldChbXG4gICAqICAgeyBpZDogMSwgdGV4dDogJ2l0ZW0gMScgfSxcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyJyB9LFxuICAgKiAgIHsgaWQ6IDMsIHRleHQ6ICdpdGVtIDMnIH1cbiAgICogXSlcbiAgICpcbiAgICogLy8gdXBkYXRlIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEudXBkYXRlKFtcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyICh1cGRhdGVkKScgfSxcbiAgICogICB7IGlkOiA0LCB0ZXh0OiAnaXRlbSA0IChuZXcpJyB9XG4gICAqIF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzIsIDRdXG4gICAqIGBgYFxuICAgKlxuICAgKiAjIyBXYXJuaW5nIGZvciBUeXBlU2NyaXB0IHVzZXJzXG4gICAqIFRoaXMgbWV0aG9kIG1heSBpbnRyb2R1Y2UgcGFydGlhbCBpdGVtcyBpbnRvIHRoZSBkYXRhIHNldC4gVXNlIGFkZCBvciB1cGRhdGVPbmx5IGluc3RlYWQgZm9yIGJldHRlciB0eXBlIHNhZmV0eS5cbiAgICogQHBhcmFtIGRhdGEgLSBJdGVtcyB0byBiZSB1cGRhdGVkIChpZiB0aGUgaWQgaXMgYWxyZWFkeSBwcmVzZW50KSBvciBhZGRlZCAoaWYgdGhlIGlkIGlzIG1pc3NpbmcpLlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIHVwZGF0ZWRJZHMgLSBUaGUgaWRzIG9mIHRoZSBhZGRlZCAodGhlc2UgbWF5IGJlIG5ld2x5IGdlbmVyYXRlZCBpZiB0aGVyZSB3YXMgbm8gaWQgaW4gdGhlIGl0ZW0gZnJvbSB0aGUgZGF0YSkgb3IgdXBkYXRlZCBpdGVtcy5cbiAgICogQHRocm93cyBXaGVuIHRoZSBzdXBwbGllZCBkYXRhIGlzIG5laXRoZXIgYW4gaXRlbSBub3IgYW4gYXJyYXkgb2YgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlKFxuICAgIGRhdGE6IERlZXBQYXJ0aWFsPEl0ZW0+IHwgRGVlcFBhcnRpYWw8SXRlbT5bXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiBJZFtdIHtcbiAgICBjb25zdCBhZGRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCBvbGREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBjb25zdCB1cGRhdGVkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG4gICAgY29uc3QgaWRQcm9wID0gdGhpcy5faWRQcm9wO1xuXG4gICAgY29uc3QgYWRkT3JVcGRhdGUgPSAoaXRlbTogRGVlcFBhcnRpYWw8SXRlbT4pOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IG9yaWdJZDogT3B0SWQgPSBpdGVtW2lkUHJvcF07XG4gICAgICBpZiAob3JpZ0lkICE9IG51bGwgJiYgdGhpcy5fZGF0YS5oYXMob3JpZ0lkKSkge1xuICAgICAgICBjb25zdCBmdWxsSXRlbSA9IGl0ZW0gYXMgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjsgLy8gaXQgaGFzIGFuIGlkLCB0aGVyZWZvcmUgaXQgaXMgYSBmdWxsaXRlbVxuICAgICAgICBjb25zdCBvbGRJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZGF0YS5nZXQob3JpZ0lkKSk7XG4gICAgICAgIC8vIHVwZGF0ZSBpdGVtXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5fdXBkYXRlSXRlbShmdWxsSXRlbSk7XG4gICAgICAgIHVwZGF0ZWRJZHMucHVzaChpZCk7XG4gICAgICAgIHVwZGF0ZWREYXRhLnB1c2goZnVsbEl0ZW0pO1xuICAgICAgICBvbGREYXRhLnB1c2gob2xkSXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhZGQgbmV3IGl0ZW1cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLl9hZGRJdGVtKGl0ZW0gYXMgYW55KTtcbiAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAvLyBBcnJheVxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGRhdGFbaV0gJiYgdHlwZW9mIGRhdGFbaV0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBhZGRPclVwZGF0ZShkYXRhW2ldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIklnbm9yaW5nIGlucHV0IGl0ZW0sIHdoaWNoIGlzIG5vdCBhbiBvYmplY3QgYXQgaW5kZXggXCIgKyBpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgLy8gU2luZ2xlIGl0ZW1cbiAgICAgIGFkZE9yVXBkYXRlKGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlXCIpO1xuICAgIH1cblxuICAgIGlmIChhZGRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogYWRkZWRJZHMgfSwgc2VuZGVySWQpO1xuICAgIH1cbiAgICBpZiAodXBkYXRlZElkcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByb3BzID0geyBpdGVtczogdXBkYXRlZElkcywgb2xkRGF0YTogb2xkRGF0YSwgZGF0YTogdXBkYXRlZERhdGEgfTtcbiAgICAgIC8vIFRPRE86IHJlbW92ZSBkZXByZWNhdGVkIHByb3BlcnR5ICdkYXRhJyBzb21lIGRheVxuICAgICAgLy9PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdkYXRhJywge1xuICAgICAgLy8gICdnZXQnOiAoZnVuY3Rpb24oKSB7XG4gICAgICAvLyAgICBjb25zb2xlLndhcm4oJ1Byb3BlcnR5IGRhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIERhdGFTZXQuZ2V0KGlkcykgdG8gcmV0cmlldmUgdGhlIG5ldyBkYXRhLCB1c2UgdGhlIG9sZERhdGEgcHJvcGVydHkgb24gdGhpcyBvYmplY3QgdG8gZ2V0IHRoZSBvbGQgZGF0YScpO1xuICAgICAgLy8gICAgcmV0dXJuIHVwZGF0ZWREYXRhO1xuICAgICAgLy8gIH0pLmJpbmQodGhpcylcbiAgICAgIC8vfSk7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwidXBkYXRlXCIsIHByb3BzLCBzZW5kZXJJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZGVkSWRzLmNvbmNhdCh1cGRhdGVkSWRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZXhpc3RpbmcgaXRlbXMuIFdoZW4gYW4gaXRlbSBkb2VzIG5vdCBleGlzdCwgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBwcm92aWRlZCBwcm9wZXJ0aWVzIHdpbGwgYmUgZGVlcGx5IG1lcmdlZCBpbnRvIHRoZSBleGlzdGluZyBpdGVtLlxuICAgKiBXaGVuIGFuIGl0ZW0gZG9lcyBub3QgZXhpc3QgKGlkIG5vdCBwcmVzZW50IGluIHRoZSBkYXRhIHNldCBvciBhYnNlbnQpLCBhbiBlcnJvciB3aWxsIGJlIHRocm93biBhbmQgbm90aGluZyB3aWxsIGJlIGNoYW5nZWQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgdXBkYXRlZCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGB1cGRhdGVgLlxuICAgKiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyBpZDogMywgdGV4dDogJ2l0ZW0gMycgfSxcbiAgICogXSlcbiAgICpcbiAgICogLy8gdXBkYXRlIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEudXBkYXRlKFtcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyICh1cGRhdGVkKScgfSwgLy8gd29ya3NcbiAgICogICAvLyB7IGlkOiA0LCB0ZXh0OiAnaXRlbSA0IChuZXcpJyB9LCAvLyB3b3VsZCB0aHJvd1xuICAgKiAgIC8vIHsgdGV4dDogJ2l0ZW0gNCAobmV3KScgfSwgLy8gd291bGQgYWxzbyB0aHJvd1xuICAgKiBdKVxuICAgKlxuICAgKiBjb25zb2xlLmxvZyhpZHMpIC8vIFsyXVxuICAgKiBgYGBcbiAgICogQHBhcmFtIGRhdGEgLSBVcGRhdGVzICh0aGUgaWQgYW5kIG9wdGlvbmFsbHkgb3RoZXIgcHJvcHMpIHRvIHRoZSBpdGVtcyBpbiB0aGlzIGRhdGEgc2V0LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIHVwZGF0ZWRJZHMgLSBUaGUgaWRzIG9mIHRoZSB1cGRhdGVkIGl0ZW1zLlxuICAgKiBAdGhyb3dzIFdoZW4gdGhlIHN1cHBsaWVkIGRhdGEgaXMgbmVpdGhlciBhbiBpdGVtIG5vciBhbiBhcnJheSBvZiBpdGVtcywgd2hlbiB0aGUgaWRzIGFyZSBtaXNzaW5nLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZU9ubHkoXG4gICAgZGF0YTogVXBkYXRlSXRlbTxJdGVtLCBJZFByb3A+IHwgVXBkYXRlSXRlbTxJdGVtLCBJZFByb3A+W10sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogSWRbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBkYXRhID0gW2RhdGFdO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZUV2ZW50RGF0YSA9IGRhdGFcbiAgICAgIC5tYXAoXG4gICAgICAgIChcbiAgICAgICAgICB1cGRhdGVcbiAgICAgICAgKToge1xuICAgICAgICAgIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgICAgdXBkYXRlOiBVcGRhdGVJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgIH0gPT4ge1xuICAgICAgICAgIGNvbnN0IG9sZERhdGEgPSB0aGlzLl9kYXRhLmdldCh1cGRhdGVbdGhpcy5faWRQcm9wXSk7XG4gICAgICAgICAgaWYgKG9sZERhdGEgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVXBkYXRpbmcgbm9uLWV4aXN0ZW50IGl0ZW1zIGlzIG5vdCBhbGxvd2VkLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgb2xkRGF0YSwgdXBkYXRlIH07XG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC5tYXAoXG4gICAgICAgICh7XG4gICAgICAgICAgb2xkRGF0YSxcbiAgICAgICAgICB1cGRhdGUsXG4gICAgICAgIH0pOiB7XG4gICAgICAgICAgaWQ6IElkO1xuICAgICAgICAgIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgICAgdXBkYXRlZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgIH0gPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gb2xkRGF0YVt0aGlzLl9pZFByb3BdO1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gcHVyZURlZXBPYmplY3RBc3NpZ24ob2xkRGF0YSwgdXBkYXRlKTtcblxuICAgICAgICAgIHRoaXMuX2RhdGEuc2V0KGlkLCB1cGRhdGVkRGF0YSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBvbGREYXRhOiBvbGREYXRhLFxuICAgICAgICAgICAgdXBkYXRlZERhdGEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgIGlmICh1cGRhdGVFdmVudERhdGEubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwcm9wczogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdID0ge1xuICAgICAgICBpdGVtczogdXBkYXRlRXZlbnREYXRhLm1hcCgodmFsdWUpOiBJZCA9PiB2YWx1ZS5pZCksXG4gICAgICAgIG9sZERhdGE6IHVwZGF0ZUV2ZW50RGF0YS5tYXAoXG4gICAgICAgICAgKHZhbHVlKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiA9PiB2YWx1ZS5vbGREYXRhXG4gICAgICAgICksXG4gICAgICAgIGRhdGE6IHVwZGF0ZUV2ZW50RGF0YS5tYXAoXG4gICAgICAgICAgKHZhbHVlKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiA9PiB2YWx1ZS51cGRhdGVkRGF0YVxuICAgICAgICApLFxuICAgICAgfTtcbiAgICAgIC8vIFRPRE86IHJlbW92ZSBkZXByZWNhdGVkIHByb3BlcnR5ICdkYXRhJyBzb21lIGRheVxuICAgICAgLy9PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdkYXRhJywge1xuICAgICAgLy8gICdnZXQnOiAoZnVuY3Rpb24oKSB7XG4gICAgICAvLyAgICBjb25zb2xlLndhcm4oJ1Byb3BlcnR5IGRhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIERhdGFTZXQuZ2V0KGlkcykgdG8gcmV0cmlldmUgdGhlIG5ldyBkYXRhLCB1c2UgdGhlIG9sZERhdGEgcHJvcGVydHkgb24gdGhpcyBvYmplY3QgdG8gZ2V0IHRoZSBvbGQgZGF0YScpO1xuICAgICAgLy8gICAgcmV0dXJuIHVwZGF0ZWREYXRhO1xuICAgICAgLy8gIH0pLmJpbmQodGhpcylcbiAgICAgIC8vfSk7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwidXBkYXRlXCIsIHByb3BzLCBzZW5kZXJJZCk7XG5cbiAgICAgIHJldHVybiBwcm9wcy5pdGVtcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkOiBJZCk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkczogSWRbXSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGZpcnN0PzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gfCBJZCB8IElkW10sXG4gICAgc2Vjb25kPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PiB7XG4gICAgLy8gQFRPRE86IFdvdWRuJ3QgaXQgYmUgYmV0dGVyIHRvIHNwbGl0IHRoaXMgaW50byBtdWx0aXBsZSBtZXRob2RzP1xuXG4gICAgLy8gcGFyc2UgdGhlIGFyZ3VtZW50c1xuICAgIGxldCBpZDogSWQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGlkczogSWRbXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzSWQoZmlyc3QpKSB7XG4gICAgICAvLyBnZXQoaWQgWywgb3B0aW9uc10pXG4gICAgICBpZCA9IGZpcnN0O1xuICAgICAgb3B0aW9ucyA9IHNlY29uZDtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmlyc3QpKSB7XG4gICAgICAvLyBnZXQoaWRzIFssIG9wdGlvbnNdKVxuICAgICAgaWRzID0gZmlyc3Q7XG4gICAgICBvcHRpb25zID0gc2Vjb25kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBnZXQoWywgb3B0aW9uc10pXG4gICAgICBvcHRpb25zID0gZmlyc3Q7XG4gICAgfVxuXG4gICAgLy8gZGV0ZXJtaW5lIHRoZSByZXR1cm4gdHlwZVxuICAgIGNvbnN0IHJldHVyblR5cGUgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnJldHVyblR5cGUgPT09IFwiT2JqZWN0XCIgPyBcIk9iamVjdFwiIDogXCJBcnJheVwiO1xuICAgIC8vIEBUT0RPOiBXVEYgaXMgdGhpcz8gT3IgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz9cbiAgICAvLyB2YXIgcmV0dXJuVHlwZVxuICAgIC8vIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmV0dXJuVHlwZSkge1xuICAgIC8vICAgdmFyIGFsbG93ZWRWYWx1ZXMgPSBbJ0FycmF5JywgJ09iamVjdCddXG4gICAgLy8gICByZXR1cm5UeXBlID1cbiAgICAvLyAgICAgYWxsb3dlZFZhbHVlcy5pbmRleE9mKG9wdGlvbnMucmV0dXJuVHlwZSkgPT0gLTFcbiAgICAvLyAgICAgICA/ICdBcnJheSdcbiAgICAvLyAgICAgICA6IG9wdGlvbnMucmV0dXJuVHlwZVxuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICByZXR1cm5UeXBlID0gJ0FycmF5J1xuICAgIC8vIH1cblxuICAgIC8vIGJ1aWxkIG9wdGlvbnNcbiAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IGl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBsZXQgaXRlbTogdW5kZWZpbmVkIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaXRlbUlkczogdW5kZWZpbmVkIHwgSWRbXSA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaXRlbUlkOiB1bmRlZmluZWQgfCBJZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIGNvbnZlcnQgaXRlbXNcbiAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgLy8gcmV0dXJuIGEgc2luZ2xlIGl0ZW1cbiAgICAgIGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICBpZiAoaXRlbSAmJiBmaWx0ZXIgJiYgIWZpbHRlcihpdGVtKSkge1xuICAgICAgICBpdGVtID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaWRzICE9IG51bGwpIHtcbiAgICAgIC8vIHJldHVybiBhIHN1YnNldCBvZiBpdGVtc1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWRzW2ldKTtcbiAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoaXRlbSkpKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXR1cm4gYWxsIGl0ZW1zXG4gICAgICBpdGVtSWRzID0gWy4uLnRoaXMuX2RhdGEua2V5cygpXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGl0ZW1JZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgIGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpdGVtSWQpO1xuICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmICghZmlsdGVyIHx8IGZpbHRlcihpdGVtKSkpIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gb3JkZXIgdGhlIHJlc3VsdHNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyICYmIGlkID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fc29ydChpdGVtcywgb3B0aW9ucy5vcmRlcik7XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIGZpZWxkcyBvZiB0aGUgaXRlbXNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmZpZWxkcykge1xuICAgICAgY29uc3QgZmllbGRzID0gb3B0aW9ucy5maWVsZHM7XG4gICAgICBpZiAoaWQgIT0gdW5kZWZpbmVkICYmIGl0ZW0gIT0gbnVsbCkge1xuICAgICAgICBpdGVtID0gdGhpcy5fZmlsdGVyRmllbGRzKGl0ZW0sIGZpZWxkcykgYXMgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGl0ZW1zW2ldID0gdGhpcy5fZmlsdGVyRmllbGRzKGl0ZW1zW2ldLCBmaWVsZHMpIGFzIEZ1bGxJdGVtPFxuICAgICAgICAgICAgSXRlbSxcbiAgICAgICAgICAgIElkUHJvcFxuICAgICAgICAgID47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZXR1cm4gdGhlIHJlc3VsdHNcbiAgICBpZiAocmV0dXJuVHlwZSA9PSBcIk9iamVjdFwiKSB7XG4gICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+ID0ge307XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVzdWx0YW50ID0gaXRlbXNbaV07XG4gICAgICAgIC8vIEBUT0RPOiBTaG91ZG4ndCB0aGlzIGJlIHRoaXMuX2ZpZWxkSWQ/XG4gICAgICAgIC8vIHJlc3VsdFtyZXN1bHRhbnQuaWRdID0gcmVzdWx0YW50XG4gICAgICAgIGNvbnN0IGlkOiBJZCA9IHJlc3VsdGFudFt0aGlzLl9pZFByb3BdO1xuICAgICAgICByZXN1bHRbaWRdID0gcmVzdWx0YW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgLy8gYSBzaW5nbGUgaXRlbVxuICAgICAgICByZXR1cm4gaXRlbSA/PyBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8ganVzdCByZXR1cm4gb3VyIGFycmF5XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldElkcyhvcHRpb25zPzogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT4pOiBJZFtdIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IG9yZGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuICAgIGNvbnN0IGlkczogSWRbXSA9IFtdO1xuXG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgLy8gZ2V0IGZpbHRlcmVkIGl0ZW1zXG4gICAgICBpZiAob3JkZXIpIHtcbiAgICAgICAgLy8gY3JlYXRlIG9yZGVyZWQgbGlzdFxuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgZmlsdGVyKGl0ZW0pKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NvcnQoaXRlbXMsIG9yZGVyKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZHMucHVzaChpdGVtc1tpXVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIHVub3JkZXJlZCBsaXN0XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiBmaWx0ZXIoaXRlbSkpIHtcbiAgICAgICAgICAgIGlkcy5wdXNoKGl0ZW1bdGhpcy5faWRQcm9wXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldCBhbGwgaXRlbXNcbiAgICAgIGlmIChvcmRlcikge1xuICAgICAgICAvLyBjcmVhdGUgYW4gb3JkZXJlZCBsaXN0XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGl0ZW1zLnB1c2goZGF0YS5nZXQoaWQpISk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zb3J0KGl0ZW1zLCBvcmRlcik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaWRzLnB1c2goaXRlbXNbaV1bdGhpcy5faWRQcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNyZWF0ZSB1bm9yZGVyZWQgbGlzdFxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YS5nZXQoaWQpO1xuICAgICAgICAgIGlmIChpdGVtICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlkcy5wdXNoKGl0ZW1bdGhpcy5faWRQcm9wXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0RGF0YVNldCgpOiBEYXRhU2V0PEl0ZW0sIElkUHJvcD4ge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBmb3JFYWNoKFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiB2b2lkLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnM8SXRlbT5cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICBjb25zdCBpdGVtSWRzID0gWy4uLmRhdGEua2V5cygpXTtcblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMub3JkZXIpIHtcbiAgICAgIC8vIGV4ZWN1dGUgZm9yRWFjaCBvbiBvcmRlcmVkIGxpc3RcbiAgICAgIGNvbnN0IGl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSB0aGlzLmdldChvcHRpb25zKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgY29uc3QgaWQgPSBpdGVtW3RoaXMuX2lkUHJvcF07XG4gICAgICAgIGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5vcmRlcmVkXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGl0ZW0pKSkge1xuICAgICAgICAgIGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgbWFwPFQ+KFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBULFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxJdGVtLCBUPlxuICApOiBUW10ge1xuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3QgbWFwcGVkSXRlbXM6IFRbXSA9IFtdO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuXG4gICAgLy8gY29udmVydCBhbmQgZmlsdGVyIGl0ZW1zXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICBpZiAoaXRlbSAhPSBudWxsICYmICghZmlsdGVyIHx8IGZpbHRlcihpdGVtKSkpIHtcbiAgICAgICAgbWFwcGVkSXRlbXMucHVzaChjYWxsYmFjayhpdGVtLCBpZCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9yZGVyIGl0ZW1zXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcikge1xuICAgICAgdGhpcy5fc29ydChtYXBwZWRJdGVtcywgb3B0aW9ucy5vcmRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBlZEl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KGl0ZW06IG51bGwsIGZpZWxkczogS1tdKTogbnVsbDtcbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGl0ZW06IFJlY29yZDxLLCB1bmtub3duPixcbiAgICBmaWVsZHM6IEtbXVxuICApOiBSZWNvcmQ8SywgdW5rbm93bj47XG4gIHByaXZhdGUgX2ZpbHRlckZpZWxkczxLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpdGVtOiBSZWNvcmQ8SywgdW5rbm93bj4sXG4gICAgZmllbGRzOiBLW10gfCBSZWNvcmQ8Sywgc3RyaW5nPlxuICApOiBhbnk7XG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIGZpZWxkcyBvZiBhbiBpdGVtLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSAtIFRoZSBpdGVtIHdob3NlIGZpZWxkcyBzaG91bGQgYmUgZmlsdGVyZWQuXG4gICAqIEBwYXJhbSBmaWVsZHMgLSBUaGUgbmFtZXMgb2YgdGhlIGZpZWxkcyB0aGF0IHdpbGwgYmUga2VwdC5cbiAgICogQHR5cGVQYXJhbSBLIC0gRmllbGQgbmFtZSB0eXBlLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGZpZWxkcy5cbiAgICovXG4gIHByaXZhdGUgX2ZpbHRlckZpZWxkczxLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpdGVtOiBSZWNvcmQ8SywgdW5rbm93bj4gfCBudWxsLFxuICAgIGZpZWxkczogS1tdIHwgUmVjb3JkPEssIHVua25vd24+XG4gICk6IFJlY29yZDxLLCB1bmtub3duPiB8IG51bGwge1xuICAgIGlmICghaXRlbSkge1xuICAgICAgLy8gaXRlbSBpcyBudWxsXG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgQXJyYXkuaXNBcnJheShmaWVsZHMpXG4gICAgICAgID8gLy8gVXNlIHRoZSBzdXBwbGllZCBhcnJheVxuICAgICAgICAgIGZpZWxkc1xuICAgICAgICA6IC8vIFVzZSB0aGUga2V5cyBvZiB0aGUgc3VwcGxpZWQgb2JqZWN0XG4gICAgICAgICAgKE9iamVjdC5rZXlzKGZpZWxkcykgYXMgS1tdKVxuICAgICkucmVkdWNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICAgIChmaWx0ZXJlZEl0ZW0sIGZpZWxkKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICAgICAgICBmaWx0ZXJlZEl0ZW1bZmllbGRdID0gaXRlbVtmaWVsZF07XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZEl0ZW07XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnQgdGhlIHByb3ZpZGVkIGFycmF5IHdpdGggaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIEl0ZW1zIHRvIGJlIHNvcnRlZCBpbiBwbGFjZS5cbiAgICogQHBhcmFtIG9yZGVyIC0gQSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgaXRlbXMgaW4gdGhlIGl0ZW1zIGFycmF5LlxuICAgKi9cbiAgcHJpdmF0ZSBfc29ydDxUPihpdGVtczogVFtdLCBvcmRlcjogRGF0YUludGVyZmFjZU9yZGVyPFQ+KTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBvcmRlciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gb3JkZXIgYnkgcHJvdmlkZWQgZmllbGQgbmFtZVxuICAgICAgY29uc3QgbmFtZSA9IG9yZGVyOyAvLyBmaWVsZCBuYW1lXG4gICAgICBpdGVtcy5zb3J0KChhLCBiKTogLTEgfCAwIHwgMSA9PiB7XG4gICAgICAgIC8vIEBUT0RPOiBIb3cgdG8gdHJlYXQgbWlzc2luZyBwcm9wZXJ0aWVzP1xuICAgICAgICBjb25zdCBhdiA9IChhIGFzIGFueSlbbmFtZV07XG4gICAgICAgIGNvbnN0IGJ2ID0gKGIgYXMgYW55KVtuYW1lXTtcbiAgICAgICAgcmV0dXJuIGF2ID4gYnYgPyAxIDogYXYgPCBidiA/IC0xIDogMDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9yZGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIG9yZGVyIGJ5IHNvcnQgZnVuY3Rpb25cbiAgICAgIGl0ZW1zLnNvcnQob3JkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBleHRlbmQgb3JkZXIgYnkgYW4gT2JqZWN0IHtmaWVsZDpzdHJpbmcsIGRpcmVjdGlvbjpzdHJpbmd9XG4gICAgICAvLyAgICAgICB3aGVyZSBkaXJlY3Rpb24gY2FuIGJlICdhc2MnIG9yICdkZXNjJ1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9yZGVyIG11c3QgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1wiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGl0ZW0gb3IgbXVsdGlwbGUgaXRlbXMgYnkg4oCccmVmZXJlbmNl4oCdIChvbmx5IHRoZSBpZCBpcyB1c2VkKSBvciBieSBpZC5cbiAgICpcbiAgICogVGhlIG1ldGhvZCBpZ25vcmVzIHJlbW92YWwgb2Ygbm9uLWV4aXN0aW5nIGl0ZW1zLCBhbmQgcmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBpZHMgb2YgdGhlIGl0ZW1zIHdoaWNoIGFyZSBhY3R1YWxseSByZW1vdmVkIGZyb20gdGhlIERhdGFTZXQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgcmVtb3ZlZCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGByZW1vdmVgIGZvciB0aGUgcmVtb3ZlZCBpdGVtcy4gV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAgICogY29uc3QgZGF0YSA9IG5ldyB2aXMuRGF0YVNldChbXG4gICAqICAgeyBpZDogMSwgdGV4dDogJ2l0ZW0gMScgfSxcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyJyB9LFxuICAgKiAgIHsgaWQ6IDMsIHRleHQ6ICdpdGVtIDMnIH1cbiAgICogXSlcbiAgICpcbiAgICogLy8gcmVtb3ZlIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEucmVtb3ZlKFsyLCB7IGlkOiAzIH0sIDRdKVxuICAgKlxuICAgKiBjb25zb2xlLmxvZyhpZHMpIC8vIFsyLCAzXVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGlkIC0gT25lIG9yIG1vcmUgaXRlbXMgb3IgaWRzIG9mIGl0ZW1zIHRvIGJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgVGhlIGlkcyBvZiB0aGUgcmVtb3ZlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyByZW1vdmUoaWQ6IElkIHwgSXRlbSB8IChJZCB8IEl0ZW0pW10sIHNlbmRlcklkPzogSWQgfCBudWxsKTogSWRbXSB7XG4gICAgY29uc3QgcmVtb3ZlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICAvLyBmb3JjZSBldmVyeXRoaW5nIHRvIGJlIGFuIGFycmF5IGZvciBzaW1wbGljaXR5XG4gICAgY29uc3QgaWRzID0gQXJyYXkuaXNBcnJheShpZCkgPyBpZCA6IFtpZF07XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fcmVtb3ZlKGlkc1tpXSk7XG4gICAgICBpZiAoaXRlbSkge1xuICAgICAgICBjb25zdCBpdGVtSWQ6IE9wdElkID0gaXRlbVt0aGlzLl9pZFByb3BdO1xuICAgICAgICBpZiAoaXRlbUlkICE9IG51bGwpIHtcbiAgICAgICAgICByZW1vdmVkSWRzLnB1c2goaXRlbUlkKTtcbiAgICAgICAgICByZW1vdmVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZW1vdmVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgXCJyZW1vdmVcIixcbiAgICAgICAgeyBpdGVtczogcmVtb3ZlZElkcywgb2xkRGF0YTogcmVtb3ZlZEl0ZW1zIH0sXG4gICAgICAgIHNlbmRlcklkXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZW1vdmVkSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpdGVtIGJ5IGl0cyBpZCBvciByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIElkIG9mIGFuIGl0ZW0gb3IgdGhlIGl0ZW0gaXRzZWxmLlxuICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBpdGVtIGlmIHJlbW92ZWQsIG51bGwgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVtb3ZlKGlkOiBJZCB8IEl0ZW0pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHwgbnVsbCB7XG4gICAgLy8gQFRPRE86IEl0IG9yaWdpYW5sbHkgcmV0dXJuZWQgdGhlIGl0ZW0gYWx0aG91Z2ggdGhlIGRvY3Mgc2F5IGlkLlxuICAgIC8vIFRoZSBjb2RlIGV4cGVjdHMgdGhlIGl0ZW0sIHNvIHByb2JhYmx5IGFuIGVycm9yIGluIHRoZSBkb2NzLlxuICAgIGxldCBpZGVudDogT3B0SWQ7XG5cbiAgICAvLyBjb25maXJtIHRoZSBpZCB0byB1c2UgYmFzZWQgb24gdGhlIGFyZ3MgdHlwZVxuICAgIGlmIChpc0lkKGlkKSkge1xuICAgICAgaWRlbnQgPSBpZDtcbiAgICB9IGVsc2UgaWYgKGlkICYmIHR5cGVvZiBpZCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgaWRlbnQgPSBpZFt0aGlzLl9pZFByb3BdOyAvLyBsb29rIGZvciB0aGUgaWRlbnRpZmllciBmaWVsZCB1c2luZyAuX2lkUHJvcFxuICAgIH1cblxuICAgIC8vIGRvIHRoZSByZW1vdmluZyBpZiB0aGUgaXRlbSBpcyBmb3VuZFxuICAgIGlmIChpZGVudCAhPSBudWxsICYmIHRoaXMuX2RhdGEuaGFzKGlkZW50KSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkZW50KSB8fCBudWxsO1xuICAgICAgdGhpcy5fZGF0YS5kZWxldGUoaWRlbnQpO1xuICAgICAgLS10aGlzLmxlbmd0aDtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBlbnRpcmUgZGF0YSBzZXQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgcmVtb3ZlZCwgdGhlIHtAbGluayBEYXRhU2V0fSB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYHJlbW92ZWAgZm9yIGFsbCByZW1vdmVkIGl0ZW1zLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIHJlbW92ZWRJZHMgLSBUaGUgaWRzIG9mIGFsbCByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIGNsZWFyKHNlbmRlcklkPzogSWQgfCBudWxsKTogSWRbXSB7XG4gICAgY29uc3QgaWRzID0gWy4uLnRoaXMuX2RhdGEua2V5cygpXTtcbiAgICBjb25zdCBpdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpdGVtcy5wdXNoKHRoaXMuX2RhdGEuZ2V0KGlkc1tpXSkhKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhLmNsZWFyKCk7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fdHJpZ2dlcihcInJlbW92ZVwiLCB7IGl0ZW1zOiBpZHMsIG9sZERhdGE6IGl0ZW1zIH0sIHNlbmRlcklkKTtcblxuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaXRlbSB3aXRoIG1heGltdW0gdmFsdWUgb2YgYSBzcGVjaWZpZWQgZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkIGZvciBtYXggdmFsdWUuXG4gICAqIEByZXR1cm5zIEl0ZW0gY29udGFpbmluZyBtYXggdmFsdWUsIG9yIG51bGwgaWYgbm8gaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgbWF4KGZpZWxkOiBrZXlvZiBJdGVtKTogSXRlbSB8IG51bGwge1xuICAgIGxldCBtYXggPSBudWxsO1xuICAgIGxldCBtYXhGaWVsZCA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fZGF0YS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgaXRlbUZpZWxkID0gaXRlbVtmaWVsZF07XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBpdGVtRmllbGQgPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgKG1heEZpZWxkID09IG51bGwgfHwgaXRlbUZpZWxkID4gbWF4RmllbGQpXG4gICAgICApIHtcbiAgICAgICAgbWF4ID0gaXRlbTtcbiAgICAgICAgbWF4RmllbGQgPSBpdGVtRmllbGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heCB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGl0ZW0gd2l0aCBtaW5pbXVtIHZhbHVlIG9mIGEgc3BlY2lmaWVkIGZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZmllbGQgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHNob3VsZCBiZSBzZWFyY2hlZCBmb3IgbWluIHZhbHVlLlxuICAgKiBAcmV0dXJucyBJdGVtIGNvbnRhaW5pbmcgbWluIHZhbHVlLCBvciBudWxsIGlmIG5vIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIG1pbihmaWVsZDoga2V5b2YgSXRlbSk6IEl0ZW0gfCBudWxsIHtcbiAgICBsZXQgbWluID0gbnVsbDtcbiAgICBsZXQgbWluRmllbGQgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuX2RhdGEudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGl0ZW1GaWVsZCA9IGl0ZW1bZmllbGRdO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgaXRlbUZpZWxkID09PSBcIm51bWJlclwiICYmXG4gICAgICAgIChtaW5GaWVsZCA9PSBudWxsIHx8IGl0ZW1GaWVsZCA8IG1pbkZpZWxkKVxuICAgICAgKSB7XG4gICAgICAgIG1pbiA9IGl0ZW07XG4gICAgICAgIG1pbkZpZWxkID0gaXRlbUZpZWxkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtaW4gfHwgbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBkaXN0aW5jdDxUIGV4dGVuZHMga2V5b2YgSXRlbT4ocHJvcDogVCk6IEl0ZW1bVF1bXTtcbiAgcHVibGljIGRpc3RpbmN0KHByb3A6IHN0cmluZyk6IHVua25vd25bXTtcbiAgLyoqXG4gICAqIEZpbmQgYWxsIGRpc3RpbmN0IHZhbHVlcyBvZiBhIHNwZWNpZmllZCBmaWVsZFxuICAgKlxuICAgKiBAcGFyYW0gcHJvcCAtIFRoZSBwcm9wZXJ0eSBuYW1lIHdob3NlIGRpc3RpbmN0IHZhbHVlcyBzaG91bGQgYmUgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIFVub3JkZXJlZCBhcnJheSBjb250YWluaW5nIGFsbCBkaXN0aW5jdCB2YWx1ZXMuIEl0ZW1zIHdpdGhvdXQgc3BlY2lmaWVkIHByb3BlcnR5IGFyZSBpZ25vcmVkLlxuICAgKi9cbiAgcHVibGljIGRpc3RpbmN0PFQgZXh0ZW5kcyBzdHJpbmc+KHByb3A6IFQpOiB1bmtub3duW10ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuICAgIGNvbnN0IHZhbHVlczogdW5rbm93bltdID0gW107XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICBjb25zdCBpdGVtID0gZGF0YS5nZXQoaWQpO1xuICAgICAgY29uc3QgdmFsdWUgPSAoaXRlbSBhcyBhbnkpW3Byb3BdO1xuICAgICAgbGV0IGV4aXN0cyA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbal0gPT0gdmFsdWUpIHtcbiAgICAgICAgICBleGlzdHMgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWV4aXN0cyAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlc1tjb3VudF0gPSB2YWx1ZTtcbiAgICAgICAgY291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpbmdsZSBpdGVtLiBXaWxsIGZhaWwgd2hlbiBhbiBpdGVtIHdpdGggdGhlIHNhbWUgaWQgYWxyZWFkeSBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtIC0gQSBuZXcgaXRlbSB0byBiZSBhZGRlZC5cbiAgICogQHJldHVybnMgQWRkZWQgaXRlbSdzIGlkLiBBbiBpZCBpcyBnZW5lcmF0ZWQgd2hlbiBpdCBpcyBub3QgcHJlc2VudCBpbiB0aGUgaXRlbS5cbiAgICovXG4gIHByaXZhdGUgX2FkZEl0ZW0oaXRlbTogSXRlbSk6IElkIHtcbiAgICBjb25zdCBmdWxsSXRlbSA9IGVuc3VyZUZ1bGxJdGVtKGl0ZW0sIHRoaXMuX2lkUHJvcCk7XG4gICAgY29uc3QgaWQgPSBmdWxsSXRlbVt0aGlzLl9pZFByb3BdO1xuXG4gICAgLy8gY2hlY2sgd2hldGhlciB0aGlzIGlkIGlzIGFscmVhZHkgdGFrZW5cbiAgICBpZiAodGhpcy5fZGF0YS5oYXMoaWQpKSB7XG4gICAgICAvLyBpdGVtIGFscmVhZHkgZXhpc3RzXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IGFkZCBpdGVtOiBpdGVtIHdpdGggaWQgXCIgKyBpZCArIFwiIGFscmVhZHkgZXhpc3RzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YS5zZXQoaWQsIGZ1bGxJdGVtKTtcbiAgICArK3RoaXMubGVuZ3RoO1xuXG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhIHNpbmdsZSBpdGVtOiBtZXJnZSB3aXRoIGV4aXN0aW5nIGl0ZW0uXG4gICAqIFdpbGwgZmFpbCB3aGVuIHRoZSBpdGVtIGhhcyBubyBpZCwgb3Igd2hlbiB0aGVyZSBkb2VzIG5vdCBleGlzdCBhbiBpdGVtIHdpdGggdGhlIHNhbWUgaWQuXG4gICAqXG4gICAqIEBwYXJhbSB1cGRhdGUgLSBUaGUgbmV3IGl0ZW1cbiAgICogQHJldHVybnMgVGhlIGlkIG9mIHRoZSB1cGRhdGVkIGl0ZW0uXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVJdGVtKHVwZGF0ZTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPik6IElkIHtcbiAgICBjb25zdCBpZDogT3B0SWQgPSB1cGRhdGVbdGhpcy5faWRQcm9wXTtcbiAgICBpZiAoaWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCB1cGRhdGUgaXRlbTogaXRlbSBoYXMgbm8gaWQgKGl0ZW06IFwiICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh1cGRhdGUpICtcbiAgICAgICAgICBcIilcIlxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIC8vIGl0ZW0gZG9lc24ndCBleGlzdFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHVwZGF0ZSBpdGVtOiBubyBpdGVtIHdpdGggaWQgXCIgKyBpZCArIFwiIGZvdW5kXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGEuc2V0KGlkLCB7IC4uLml0ZW0sIC4uLnVwZGF0ZSB9KTtcblxuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RyZWFtKGlkcz86IEl0ZXJhYmxlPElkPik6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIGlmIChpZHMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgICByZXR1cm4gbmV3IERhdGFTdHJlYW08SXRlbT4oe1xuICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiB7XG4gICAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmdldChpZCk7XG4gICAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHlpZWxkIFtpZCwgaXRlbV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbSh7XG4gICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiB0aGlzLl9kYXRhLmVudHJpZXMuYmluZCh0aGlzLl9kYXRhKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qIGRldmVsYmxvY2s6c3RhcnQgKi9cbiAgcHVibGljIGdldCB0ZXN0TGVha0RhdGEoKTogTWFwPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cbiAgcHVibGljIGdldCB0ZXN0TGVha0lkUHJvcCgpOiBJZFByb3Age1xuICAgIHJldHVybiB0aGlzLl9pZFByb3A7XG4gIH1cbiAgcHVibGljIGdldCB0ZXN0TGVha09wdGlvbnMoKTogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD4ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG4gIHB1YmxpYyBnZXQgdGVzdExlYWtRdWV1ZSgpOiBRdWV1ZTx0aGlzPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHRlc3RMZWFrUXVldWUodjogUXVldWU8dGhpcz4gfCBudWxsKSB7XG4gICAgdGhpcy5fcXVldWUgPSB2O1xuICB9XG4gIC8qIGRldmVsYmxvY2s6ZW5kICovXG59XG4iLCAiaW1wb3J0IHtcbiAgRGF0YUludGVyZmFjZSxcbiAgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXksXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0LFxuICBEYXRhSW50ZXJmYWNlTWFwT3B0aW9ucyxcbiAgRXZlbnRDYWxsYmFja3NXaXRoQW55LFxuICBFdmVudE5hbWUsXG4gIEV2ZW50UGF5bG9hZHMsXG4gIEZ1bGxJdGVtLFxuICBJZCxcbiAgUGFydEl0ZW0sXG4gIFJlbW92ZUV2ZW50UGF5bG9hZCxcbiAgVXBkYXRlRXZlbnRQYXlsb2FkLFxuICBpc0lkLFxufSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcbmltcG9ydCB7IERhdGFTZXRQYXJ0IH0gZnJvbSBcIi4vZGF0YS1zZXQtcGFydFwiO1xuaW1wb3J0IHsgRGF0YVN0cmVhbSB9IGZyb20gXCIuL2RhdGEtc3RyZWFtXCI7XG5cbi8qKlxuICogRGF0YSB2aWV3IG9wdGlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVZpZXdPcHRpb25zPEl0ZW0sIElkUHJvcCBleHRlbmRzIHN0cmluZz4ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZpZWxkIGNvbnRhaW5pbmcgdGhlIGlkIG9mIHRoZSBpdGVtcy4gV2hlbiBkYXRhIGlzIGZldGNoZWQgZnJvbSBhIHNlcnZlciB3aGljaCB1c2VzIHNvbWUgc3BlY2lmaWMgZmllbGQgdG8gaWRlbnRpZnkgaXRlbXMsIHRoaXMgZmllbGQgbmFtZSBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBEYXRhU2V0IHVzaW5nIHRoZSBvcHRpb24gYGZpZWxkSWRgLiBGb3IgZXhhbXBsZSBbQ291Y2hEQl0oaHR0cDovL2NvdWNoZGIuYXBhY2hlLm9yZy8pIHVzZXMgdGhlIGZpZWxkIGAnX2lkJ2AgdG8gaWRlbnRpZnkgZG9jdW1lbnRzLlxuICAgKi9cbiAgZmllbGRJZD86IElkUHJvcDtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGF0YVZpZXdcbiAqXG4gKiBBIERhdGFWaWV3IG9mZmVycyBhIGZpbHRlcmVkIGFuZC9vciBmb3JtYXR0ZWQgdmlldyBvbiBhIERhdGFTZXQuIE9uZSBjYW4gc3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gYSBEYXRhVmlldywgYW5kIGVhc2lseSBnZXQgZmlsdGVyZWQgb3IgZm9ybWF0dGVkIGRhdGEgd2l0aG91dCBoYXZpbmcgdG8gc3BlY2lmeSBmaWx0ZXJzIGFuZCBmaWVsZCB0eXBlcyBhbGwgdGhlIHRpbWUuXG4gKlxuICogIyMgRXhhbXBsZVxuICogYGBgamF2YXNjcmlwdFxuICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICogdmFyIGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQoKTtcbiAqIGRhdGEuYWRkKFtcbiAqICAge2lkOiAxLCB0ZXh0OiAnaXRlbSAxJywgZGF0ZTogbmV3IERhdGUoMjAxMywgNiwgMjApLCBncm91cDogMSwgZmlyc3Q6IHRydWV9LFxuICogICB7aWQ6IDIsIHRleHQ6ICdpdGVtIDInLCBkYXRlOiAnMjAxMy0wNi0yMycsIGdyb3VwOiAyfSxcbiAqICAge2lkOiAzLCB0ZXh0OiAnaXRlbSAzJywgZGF0ZTogJzIwMTMtMDYtMjUnLCBncm91cDogMn0sXG4gKiAgIHtpZDogNCwgdGV4dDogJ2l0ZW0gNCd9XG4gKiBdKTtcbiAqXG4gKiAvLyBjcmVhdGUgYSBEYXRhVmlld1xuICogLy8gdGhlIHZpZXcgd2lsbCBvbmx5IGNvbnRhaW4gaXRlbXMgaGF2aW5nIGEgcHJvcGVydHkgZ3JvdXAgd2l0aCB2YWx1ZSAxLFxuICogLy8gYW5kIHdpbGwgb25seSBvdXRwdXQgZmllbGRzIGlkLCB0ZXh0LCBhbmQgZGF0ZS5cbiAqIHZhciB2aWV3ID0gbmV3IHZpcy5EYXRhVmlldyhkYXRhLCB7XG4gKiAgIGZpbHRlcjogZnVuY3Rpb24gKGl0ZW0pIHtcbiAqICAgICByZXR1cm4gKGl0ZW0uZ3JvdXAgPT0gMSk7XG4gKiAgIH0sXG4gKiAgIGZpZWxkczogWydpZCcsICd0ZXh0JywgJ2RhdGUnXVxuICogfSk7XG4gKlxuICogLy8gc3Vic2NyaWJlIHRvIGFueSBjaGFuZ2UgaW4gdGhlIERhdGFWaWV3XG4gKiB2aWV3Lm9uKCcqJywgZnVuY3Rpb24gKGV2ZW50LCBwcm9wZXJ0aWVzLCBzZW5kZXJJZCkge1xuICogICBjb25zb2xlLmxvZygnZXZlbnQnLCBldmVudCwgcHJvcGVydGllcyk7XG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGUgYW4gaXRlbSBpbiB0aGUgZGF0YSBzZXRcbiAqIGRhdGEudXBkYXRlKHtpZDogMiwgZ3JvdXA6IDF9KTtcbiAqXG4gKiAvLyBnZXQgYWxsIGlkcyBpbiB0aGUgdmlld1xuICogdmFyIGlkcyA9IHZpZXcuZ2V0SWRzKCk7XG4gKiBjb25zb2xlLmxvZygnaWRzJywgaWRzKTsgLy8gd2lsbCBvdXRwdXQgWzEsIDJdXG4gKlxuICogLy8gZ2V0IGFsbCBpdGVtcyBpbiB0aGUgdmlld1xuICogdmFyIGl0ZW1zID0gdmlldy5nZXQoKTtcbiAqIGBgYFxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVZpZXc8XG4gICAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gICAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4gID5cbiAgZXh0ZW5kcyBEYXRhU2V0UGFydDxJdGVtLCBJZFByb3A+XG4gIGltcGxlbWVudHMgRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+XG57XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgbGVuZ3RoID0gMDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQgaWRQcm9wKCk6IElkUHJvcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVNldCgpLmlkUHJvcDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl07XG4gIHByaXZhdGUgX2RhdGEhOiBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD47IC8vIGNvbnN0cnVjdG9yIOKGkiBzZXREYXRhXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lkczogU2V0PElkPiA9IG5ldyBTZXQoKTsgLy8gaWRzIG9mIHRoZSBpdGVtcyBjdXJyZW50bHkgaW4gbWVtb3J5IChqdXN0IGNvbnRhaW5zIGEgYm9vbGVhbiB0cnVlKVxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBEYXRhVmlld09wdGlvbnM8SXRlbSwgSWRQcm9wPjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0YVZpZXcuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGluc3RhbmNlIGNvbnRhaW5pbmcgZGF0YSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgdGhpcyBkYXRhIHZpZXcuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgZGF0YTogRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+LFxuICAgIG9wdGlvbnM/OiBEYXRhVmlld09wdGlvbnM8SXRlbSwgSWRQcm9wPlxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICB0aGlzLl9saXN0ZW5lciA9IHRoaXMuX29uRXZlbnQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2V0RGF0YShkYXRhKTtcbiAgfVxuXG4gIC8vIFRPRE86IGltcGxlbWVudCBhIGZ1bmN0aW9uIC5jb25maWcoKSB0byBkeW5hbWljYWxseSB1cGRhdGUgdGhpbmdzIGxpa2UgY29uZmlndXJlZCBmaWx0ZXJcbiAgLy8gYW5kIHRyaWdnZXIgY2hhbmdlcyBhY2NvcmRpbmdseVxuXG4gIC8qKlxuICAgKiBTZXQgYSBkYXRhIHNvdXJjZSBmb3IgdGhlIHZpZXcuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGluc3RhbmNlIGNvbnRhaW5pbmcgZGF0YSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkuXG4gICAqIEByZW1hcmtzXG4gICAqIE5vdGUgdGhhdCB3aGVuIHRoZSBkYXRhIHZpZXcgaXMgYm91bmQgdG8gYSBkYXRhIHNldCBpdCB3b24ndCBiZSBnYXJiYWdlXG4gICAqIGNvbGxlY3RlZCB1bmxlc3MgdGhlIGRhdGEgc2V0IGlzIHRvby4gVXNlIGBkYXRhVmlldy5zZXREYXRhKG51bGwpYCBvclxuICAgKiBgZGF0YVZpZXcuZGlzcG9zZSgpYCB0byBlbmFibGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGJlZm9yZSB5b3UgbG9zZSB0aGUgbGFzdFxuICAgKiByZWZlcmVuY2UuXG4gICAqL1xuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgLy8gdW5zdWJzY3JpYmUgZnJvbSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGlmICh0aGlzLl9kYXRhLm9mZikge1xuICAgICAgICB0aGlzLl9kYXRhLm9mZihcIipcIiwgdGhpcy5fbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICAvLyB0cmlnZ2VyIGEgcmVtb3ZlIG9mIGFsbCBpdGVtcyBpbiBtZW1vcnlcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuX2RhdGEuZ2V0SWRzKHsgZmlsdGVyOiB0aGlzLl9vcHRpb25zLmZpbHRlciB9KTtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fZGF0YS5nZXQoaWRzKTtcblxuICAgICAgdGhpcy5faWRzLmNsZWFyKCk7XG4gICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwicmVtb3ZlXCIsIHsgaXRlbXM6IGlkcywgb2xkRGF0YTogaXRlbXMgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG5cbiAgICAgIC8vIHRyaWdnZXIgYW4gYWRkIG9mIGFsbCBhZGRlZCBpdGVtc1xuICAgICAgY29uc3QgaWRzID0gdGhpcy5fZGF0YS5nZXRJZHMoeyBmaWx0ZXI6IHRoaXMuX29wdGlvbnMuZmlsdGVyIH0pO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgICAgdGhpcy5faWRzLmFkZChpZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmxlbmd0aCA9IGlkcy5sZW5ndGg7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGlkcyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGF0YSA9IG5ldyBEYXRhU2V0PEl0ZW0sIElkUHJvcD4oKTtcbiAgICB9XG5cbiAgICAvLyBzdWJzY3JpYmUgdG8gbmV3IGRhdGFzZXRcbiAgICBpZiAodGhpcy5fZGF0YS5vbikge1xuICAgICAgdGhpcy5fZGF0YS5vbihcIipcIiwgdGhpcy5fbGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBEYXRhVmlldy5cbiAgICogVXNlZnVsIHdoZW4gdGhlIERhdGFWaWV3IGhhcyBhIGZpbHRlciBmdW5jdGlvbiBjb250YWluaW5nIGEgdmFyaWFibGUgcGFyYW1ldGVyLlxuICAgKi9cbiAgcHVibGljIHJlZnJlc2goKTogdm9pZCB7XG4gICAgY29uc3QgaWRzID0gdGhpcy5fZGF0YS5nZXRJZHMoe1xuICAgICAgZmlsdGVyOiB0aGlzLl9vcHRpb25zLmZpbHRlcixcbiAgICB9KTtcbiAgICBjb25zdCBvbGRJZHMgPSBbLi4udGhpcy5faWRzXTtcbiAgICBjb25zdCBuZXdJZHM6IFJlY29yZDxJZCwgYm9vbGVhbj4gPSB7fTtcbiAgICBjb25zdCBhZGRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCByZW1vdmVkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuXG4gICAgLy8gY2hlY2sgZm9yIGFkZGl0aW9uc1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgbmV3SWRzW2lkXSA9IHRydWU7XG4gICAgICBpZiAoIXRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgcmVtb3ZhbHNcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gb2xkSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IG9sZElkc1tpXTtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICBpZiAoaXRlbSA9PSBudWxsKSB7XG4gICAgICAgIC8vIEBUT0RPOiBJbnZlc3RpZ2F0ZS5cbiAgICAgICAgLy8gRG9lc24ndCBoYXBwZW4gZHVyaW5nIHRlc3RzIG9yIGV4YW1wbGVzLlxuICAgICAgICAvLyBJcyBpdCByZWFsbHkgaW1wb3NzaWJsZSBvciBjb3VsZCBpdCBldmVudHVhbGx5IGhhcHBlbj9cbiAgICAgICAgLy8gSG93IHRvIGhhbmRsZSBpdCBpZiBpdCBkb2VzPyBUaGUgdHlwZXMgZ3VhcmFudGVlIG5vbi1udWxsYWJsZSBpdGVtcy5cbiAgICAgICAgY29uc29sZS5lcnJvcihcIklmIHlvdSBzZWUgdGhpcywgcmVwb3J0IGl0IHBsZWFzZS5cIik7XG4gICAgICB9IGVsc2UgaWYgKCFuZXdJZHNbaWRdKSB7XG4gICAgICAgIHJlbW92ZWRJZHMucHVzaChpZCk7XG4gICAgICAgIHJlbW92ZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB0aGlzLl9pZHMuZGVsZXRlKGlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCArPSBhZGRlZElkcy5sZW5ndGggLSByZW1vdmVkSWRzLmxlbmd0aDtcblxuICAgIC8vIHRyaWdnZXIgZXZlbnRzXG4gICAgaWYgKGFkZGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBhZGRlZElkcyB9KTtcbiAgICB9XG4gICAgaWYgKHJlbW92ZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwicmVtb3ZlXCIsIHsgaXRlbXM6IHJlbW92ZWRJZHMsIG9sZERhdGE6IHJlbW92ZWRJdGVtcyB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCgpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChpZDogSWQpOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChpZHM6IElkW10pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkIHwgSWRbXSxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBmaXJzdD86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+IHwgSWQgfCBJZFtdLFxuICAgIHNlY29uZD86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6XG4gICAgfCBudWxsXG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+XG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W11cbiAgICB8IFJlY29yZDxzdHJpbmcsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+IHtcbiAgICBpZiAodGhpcy5fZGF0YSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBwYXJzZSB0aGUgYXJndW1lbnRzXG4gICAgbGV0IGlkczogSWQgfCBJZFtdIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IG9wdGlvbnM6IGFueTtcbiAgICBpZiAoaXNJZChmaXJzdCkgfHwgQXJyYXkuaXNBcnJheShmaXJzdCkpIHtcbiAgICAgIGlkcyA9IGZpcnN0O1xuICAgICAgb3B0aW9ucyA9IHNlY29uZDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucyA9IGZpcnN0O1xuICAgIH1cblxuICAgIC8vIGV4dGVuZCB0aGUgb3B0aW9ucyB3aXRoIHRoZSBkZWZhdWx0IG9wdGlvbnMgYW5kIHByb3ZpZGVkIG9wdGlvbnNcbiAgICBjb25zdCB2aWV3T3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICB0aGlzLl9vcHRpb25zLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG5cbiAgICAvLyBjcmVhdGUgYSBjb21iaW5lZCBmaWx0ZXIgbWV0aG9kIHdoZW4gbmVlZGVkXG4gICAgY29uc3QgdGhpc0ZpbHRlciA9IHRoaXMuX29wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IG9wdGlvbnNGaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGlmICh0aGlzRmlsdGVyICYmIG9wdGlvbnNGaWx0ZXIpIHtcbiAgICAgIHZpZXdPcHRpb25zLmZpbHRlciA9IChpdGVtKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzRmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpZHMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0KHZpZXdPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0KGlkcywgdmlld09wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0SWRzKG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9uczxJdGVtPik6IElkW10ge1xuICAgIGlmICh0aGlzLl9kYXRhLmxlbmd0aCkge1xuICAgICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IHRoaXMuX29wdGlvbnMuZmlsdGVyO1xuICAgICAgY29uc3Qgb3B0aW9uc0ZpbHRlciA9IG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMuZmlsdGVyIDogbnVsbDtcbiAgICAgIGxldCBmaWx0ZXI6IERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+W1wiZmlsdGVyXCJdO1xuXG4gICAgICBpZiAob3B0aW9uc0ZpbHRlcikge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgIGZpbHRlciA9IChpdGVtKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZpbHRlcihpdGVtKSAmJiBvcHRpb25zRmlsdGVyKGl0ZW0pO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVyID0gb3B0aW9uc0ZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0SWRzKHtcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIG9yZGVyOiBvcHRpb25zICYmIG9wdGlvbnMub3JkZXIsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZm9yRWFjaChcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gdm9pZCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zPEl0ZW0+XG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgICBjb25zdCBvcHRpb25zRmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICAgIGxldCBmaWx0ZXI6IHVuZGVmaW5lZCB8ICgoaXRlbTogSXRlbSkgPT4gYm9vbGVhbik7XG5cbiAgICAgIGlmIChvcHRpb25zRmlsdGVyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgZmlsdGVyID0gZnVuY3Rpb24gKGl0ZW06IEl0ZW0pOiBib29sZWFuIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXIgPSBvcHRpb25zRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9kYXRhLmZvckVhY2goY2FsbGJhY2ssIHtcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIG9yZGVyOiBvcHRpb25zICYmIG9wdGlvbnMub3JkZXIsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG1hcDxUPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5cbiAgKTogVFtdIHtcbiAgICB0eXBlIEZpbHRlciA9IE5vbk51bGxhYmxlPERhdGFJbnRlcmZhY2VNYXBPcHRpb25zPEl0ZW0sIFQ+W1wiZmlsdGVyXCJdPjtcblxuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgICBjb25zdCBvcHRpb25zRmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICAgIGxldCBmaWx0ZXI6IHVuZGVmaW5lZCB8IEZpbHRlcjtcblxuICAgICAgaWYgKG9wdGlvbnNGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXIpIHtcbiAgICAgICAgICBmaWx0ZXIgPSAoaXRlbSk6IFJldHVyblR5cGU8RmlsdGVyPiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZpbHRlcihpdGVtKSAmJiBvcHRpb25zRmlsdGVyKGl0ZW0pO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVyID0gb3B0aW9uc0ZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEubWFwKGNhbGxiYWNrLCB7XG4gICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICBvcmRlcjogb3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldERhdGFTZXQoKTogRGF0YVNldDxJdGVtLCBJZFByb3A+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXREYXRhU2V0KCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIHN0cmVhbShpZHM/OiBJdGVyYWJsZTxJZD4pOiBEYXRhU3RyZWFtPEl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5zdHJlYW0oXG4gICAgICBpZHMgfHwge1xuICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXTogdGhpcy5faWRzLmtleXMuYmluZCh0aGlzLl9pZHMpLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBpbnN0YW5jZSB1bnVzYWJsZSBwcmlvciB0byBnYXJiYWdlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBpbnRlbnRpb24gb2YgdGhpcyBtZXRob2QgaXMgdG8gaGVscCBkaXNjb3ZlciBzY2VuYXJpb3Mgd2hlcmUgdGhlIGRhdGFcbiAgICogdmlldyBpcyBiZWluZyB1c2VkIHdoZW4gdGhlIHByb2dyYW1tZXIgdGhpbmtzIGl0IGhhcyBiZWVuIGdhcmJhZ2UgY29sbGVjdGVkXG4gICAqIGFscmVhZHkuIEl0J3Mgc3RyaWN0ZXIgdmVyc2lvbiBvZiBgZGF0YVZpZXcuc2V0RGF0YShudWxsKWAuXG4gICAqL1xuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGF0YT8ub2ZmKSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZihcIipcIiwgdGhpcy5fbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBcIlRoaXMgZGF0YSB2aWV3IGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQgb2YuXCI7XG4gICAgY29uc3QgcmVwbGFjZW1lbnQgPSB7XG4gICAgICBnZXQ6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICAgIHNldDogKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9LFxuXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKERhdGFWaWV3LnByb3RvdHlwZSkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHJlcGxhY2VtZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgbGlzdGVuZXIuIFdpbGwgcHJvcGFnYXRlIGFsbCBldmVudHMgZnJvbSB0aGUgY29ubmVjdGVkIGRhdGEgc2V0IHRvIHRoZSBzdWJzY3JpYmVycyBvZiB0aGUgRGF0YVZpZXcsIGJ1dCB3aWxsIGZpbHRlciB0aGUgaXRlbXMgYW5kIG9ubHkgdHJpZ2dlciB3aGVuIHRoZXJlIGFyZSBjaGFuZ2VzIGluIHRoZSBmaWx0ZXJlZCBkYXRhIHNldC5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIElkIHN1cHBsaWVkIGJ5IHRoZSBzZW5kZXIuXG4gICAqL1xuICBwcml2YXRlIF9vbkV2ZW50PEVOIGV4dGVuZHMgRXZlbnROYW1lPihcbiAgICBldmVudDogRU4sXG4gICAgcGFyYW1zOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bRU5dLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMuaXRlbXMgfHwgIXRoaXMuX2RhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpZHMgPSBwYXJhbXMuaXRlbXM7XG4gICAgY29uc3QgYWRkZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCB1cGRhdGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IG9sZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICBjYXNlIFwiYWRkXCI6XG4gICAgICAgIC8vIGZpbHRlciB0aGUgaWRzIG9mIHRoZSBhZGRlZCBpdGVtc1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5faWRzLmFkZChpZCk7XG4gICAgICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgICAvLyBkZXRlcm1pbmUgdGhlIGV2ZW50IGZyb20gdGhlIHZpZXdzIHZpZXdwb2ludDogYW4gdXBkYXRlZFxuICAgICAgICAvLyBpdGVtIGNhbiBiZSBhZGRlZCwgdXBkYXRlZCwgb3IgcmVtb3ZlZCBmcm9tIHRoaXMgdmlldy5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldChpZCk7XG5cbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgICAgIHVwZGF0ZWRJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAgIChwYXJhbXMgYXMgVXBkYXRlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4pLmRhdGFbaV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgb2xkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAocGFyYW1zIGFzIFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+KS5vbGREYXRhW2ldXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgICAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgICB0aGlzLl9pZHMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgcmVtb3ZlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgKHBhcmFtcyBhcyBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPikub2xkRGF0YVtpXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gbm90aGluZyBpbnRlcmVzdGluZyBmb3IgbWUgOi0oXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJyZW1vdmVcIjpcbiAgICAgICAgLy8gZmlsdGVyIHRoZSBpZHMgb2YgdGhlIHJlbW92ZWQgaXRlbXNcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgICAgIGlmICh0aGlzLl9pZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgdGhpcy5faWRzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICByZW1vdmVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgIChwYXJhbXMgYXMgUmVtb3ZlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4pLm9sZERhdGFbaV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggKz0gYWRkZWRJZHMubGVuZ3RoIC0gcmVtb3ZlZElkcy5sZW5ndGg7XG5cbiAgICBpZiAoYWRkZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGFkZGVkSWRzIH0sIHNlbmRlcklkKTtcbiAgICB9XG4gICAgaWYgKHVwZGF0ZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICBcInVwZGF0ZVwiLFxuICAgICAgICB7IGl0ZW1zOiB1cGRhdGVkSWRzLCBvbGREYXRhOiBvbGRJdGVtcywgZGF0YTogdXBkYXRlZEl0ZW1zIH0sXG4gICAgICAgIHNlbmRlcklkXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocmVtb3ZlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXG4gICAgICAgIFwicmVtb3ZlXCIsXG4gICAgICAgIHsgaXRlbXM6IHJlbW92ZWRJZHMsIG9sZERhdGE6IHJlbW92ZWRJdGVtcyB9LFxuICAgICAgICBzZW5kZXJJZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBQYXJ0SXRlbSB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcblxuLyoqXG4gKiBDaGVjayB0aGF0IGdpdmVuIHZhbHVlIGlzIGNvbXBhdGlibGUgd2l0aCBWaXMgRGF0YSBTZXQgaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBpZFByb3AgLSBUaGUgZXhwZWN0ZWQgcHJvcGVydHkgdG8gY29udGFpbiBpdGVtIGlkLlxuICogQHBhcmFtIHYgLSBUaGUgdmFsdWUgdG8gYmUgdGVzdGVkLlxuICogQHJldHVybnMgVHJ1ZSBpZiBhbGwgZXhwZWN0ZWQgdmFsdWVzIGFuZCBtZXRob2RzIG1hdGNoLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFTZXRMaWtlPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+KGlkUHJvcDogSWRQcm9wLCB2OiBhbnkpOiB2IGlzIERhdGFTZXQ8SXRlbSwgSWRQcm9wPiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiZcbiAgICB2ICE9PSBudWxsICYmXG4gICAgaWRQcm9wID09PSB2LmlkUHJvcCAmJlxuICAgIHR5cGVvZiB2LmFkZCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuY2xlYXIgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmRpc3RpbmN0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5mb3JFYWNoID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldERhdGFTZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldElkcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgdHlwZW9mIHYubWFwID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5tYXggPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm1pbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYub2ZmID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYucmVtb3ZlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5zZXRPcHRpb25zID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5zdHJlYW0gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYudXBkYXRlT25seSA9PT0gXCJmdW5jdGlvblwiXG4gICk7XG59XG4iLCAiaW1wb3J0IHsgRGF0YVZpZXcgfSBmcm9tIFwiLi9kYXRhLXZpZXdcIjtcbmltcG9ydCB7IFBhcnRJdGVtIH0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcbmltcG9ydCB7IGlzRGF0YVNldExpa2UgfSBmcm9tIFwiLi9kYXRhLXNldC1jaGVja1wiO1xuXG4vKipcbiAqIENoZWNrIHRoYXQgZ2l2ZW4gdmFsdWUgaXMgY29tcGF0aWJsZSB3aXRoIFZpcyBEYXRhIFZpZXcgaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBpZFByb3AgLSBUaGUgZXhwZWN0ZWQgcHJvcGVydHkgdG8gY29udGFpbiBpdGVtIGlkLlxuICogQHBhcmFtIHYgLSBUaGUgdmFsdWUgdG8gYmUgdGVzdGVkLlxuICogQHJldHVybnMgVHJ1ZSBpZiBhbGwgZXhwZWN0ZWQgdmFsdWVzIGFuZCBtZXRob2RzIG1hdGNoLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFWaWV3TGlrZTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPihpZFByb3A6IElkUHJvcCwgdjogYW55KTogdiBpcyBEYXRhVmlldzxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHYgIT09IG51bGwgJiZcbiAgICBpZFByb3AgPT09IHYuaWRQcm9wICYmXG4gICAgdHlwZW9mIHYuZm9yRWFjaCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXREYXRhU2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXRJZHMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiB2Lm1hcCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYub2ZmID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuc3RyZWFtID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICBpc0RhdGFTZXRMaWtlKGlkUHJvcCwgdi5nZXREYXRhU2V0KCkpXG4gICk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IHRoaXMgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1yZWZsZWN0IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgPT0gJ29iamVjdCcgJiYgUmVmbGVjdC5hcHBseSB8fCAoTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgLy8gTmFzaG9ybiBidWc6XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMjhcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEzMFxuICBpZiAoY2xhc3NvZlJhdyhmbikgPT09ICdGdW5jdGlvbicpIHJldHVybiB1bmN1cnJ5VGhpcyhmbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3Rcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBJU19IVE1MRERBID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhbGw6IGRvY3VtZW50QWxsLFxuICBJU19IVE1MRERBOiBJU19IVE1MRERBXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkZG9jdW1lbnRBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsJyk7XG5cbnZhciBkb2N1bWVudEFsbCA9ICRkb2N1bWVudEFsbC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxubW9kdWxlLmV4cG9ydHMgPSAkZG9jdW1lbnRBbGwuSVNfSFRNTEREQSA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciAkZG9jdW1lbnRBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsJyk7XG5cbnZhciBkb2N1bWVudEFsbCA9ICRkb2N1bWVudEFsbC5hbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gJGRvY3VtZW50QWxsLklTX0hUTUxEREEgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCkgfHwgaXQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh2YXJpYWJsZSkgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgbmF2aWdhdG9yICE9ICd1bmRlZmluZWQnICYmIFN0cmluZyhuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAnJztcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWwsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zMy4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjMgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zMy4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBiaW5kID0gdW5jdXJyeVRoaXModW5jdXJyeVRoaXMuYmluZCk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQpIHtcbiAgYUNhbGxhYmxlKGZuKTtcbiAgcmV0dXJuIHRoYXQgPT09IHVuZGVmaW5lZCA/IGZuIDogTkFUSVZFX0JJTkQgPyBiaW5kKGZuLCB0aGF0KSA6IGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIHdyYXBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChOYXRpdmVDb25zdHJ1Y3Rvcikge1xuICB2YXIgV3JhcHBlciA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcmFwcGVyKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIGFwcGx5KE5hdGl2ZUNvbnN0cnVjdG9yLCB0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICBXcmFwcGVyLnByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIFdyYXBwZXI7XG59O1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWwgOiBTVEFUSUMgPyBnbG9iYWxbVEFSR0VUXSA6IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBUQVJHRVQsIHt9KVtUQVJHRVRdO1xuICB2YXIgdGFyZ2V0UHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcblxuICB2YXIgRk9SQ0VELCBVU0VfTkFUSVZFLCBWSVJUVUFMX1BST1RPVFlQRTtcbiAgdmFyIGtleSwgc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5LCBuYXRpdmVQcm9wZXJ0eSwgcmVzdWx0UHJvcGVydHksIGRlc2NyaXB0b3I7XG5cbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBVU0VfTkFUSVZFID0gIUZPUkNFRCAmJiBuYXRpdmVTb3VyY2UgJiYgaGFzT3duKG5hdGl2ZVNvdXJjZSwga2V5KTtcblxuICAgIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSkgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmF0aXZlU291cmNlLCBrZXkpO1xuICAgICAgbmF0aXZlUHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIG5hdGl2ZVByb3BlcnR5ID0gbmF0aXZlU291cmNlW2tleV07XG5cbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIGltcGxlbWVudGF0aW9uXG4gICAgc291cmNlUHJvcGVydHkgPSAoVVNFX05BVElWRSAmJiBuYXRpdmVQcm9wZXJ0eSkgPyBuYXRpdmVQcm9wZXJ0eSA6IHNvdXJjZVtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUgJiYgdHlwZW9mIHRhcmdldFByb3BlcnR5ID09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIG1ldGhvZHMgdG8gZ2xvYmFsIGZvciBjYWxsaW5nIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBpZiAob3B0aW9ucy5iaW5kICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gYmluZChzb3VyY2VQcm9wZXJ0eSwgZ2xvYmFsKTtcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlcyBpbiB0aGlzIHZlcnNpb25cbiAgICBlbHNlIGlmIChvcHRpb25zLndyYXAgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSB3cmFwQ29uc3RydWN0b3Ioc291cmNlUHJvcGVydHkpO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIGVsc2UgaWYgKFBST1RPICYmIGlzQ2FsbGFibGUoc291cmNlUHJvcGVydHkpKSByZXN1bHRQcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCByZXN1bHRQcm9wZXJ0eSk7XG5cbiAgICBpZiAoUFJPVE8pIHtcbiAgICAgIFZJUlRVQUxfUFJPVE9UWVBFID0gVEFSR0VUICsgJ1Byb3RvdHlwZSc7XG4gICAgICBpZiAoIWhhc093bihwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFLCB7fSk7XG4gICAgICB9XG4gICAgICAvLyBleHBvcnQgdmlydHVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGhbVklSVFVBTF9QUk9UT1RZUEVdLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIC8vIGV4cG9ydCByZWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBpZiAob3B0aW9ucy5yZWFsICYmIHRhcmdldFByb3RvdHlwZSAmJiAoRk9SQ0VEIHx8ICF0YXJnZXRQcm90b3R5cGVba2V5XSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldFByb3RvdHlwZSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBhcmd1bWVudCA+IDAgPyBtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSBzYWZlXG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gc2hvdWxkIGhhdmUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIChFZGdlIGJ1ZylcbiAgaWYgKERFU0NSSVBUT1JTICYmICRhc3NpZ24oeyBiOiAxIH0sICRhc3NpZ24oZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYicsIHtcbiAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pLCB7IGI6IDIgfSkpLmIgIT09IDEpIHJldHVybiB0cnVlO1xuICAvLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1ZylcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN5bWJvbCAtLSBzYWZlXG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ2Fzc2lnbiBkZXRlY3Rpb24nKTtcbiAgdmFyIGFscGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtzeW1ib2xdID0gNztcbiAgYWxwaGFiZXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGNocikgeyBCW2Nocl0gPSBjaHI7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbc3ltYm9sXSAhPT0gNyB8fCBvYmplY3RLZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPT0gYWxwaGFiZXQ7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICB2YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xuICB3aGlsZSAoYXJndW1lbnRzTGVuZ3RoID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IEluZGV4ZWRPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChvYmplY3RLZXlzKFMpLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZSwgUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtYXNzaWduJyk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBhcml0eTogMiwgZm9yY2VkOiBPYmplY3QuYXNzaWduICE9PSBhc3NpZ24gfSwge1xuICBhc3NpZ246IGFzc2lnblxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuYXNzaWduO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyhbXS5zbGljZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEMsIGFyZ3NMZW5ndGgsIGFyZ3MpIHtcbiAgaWYgKCFoYXNPd24oZmFjdG9yaWVzLCBhcmdzTGVuZ3RoKSkge1xuICAgIHZhciBsaXN0ID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSBsaXN0W2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgZmFjdG9yaWVzW2FyZ3NMZW5ndGhdID0gJEZ1bmN0aW9uKCdDLGEnLCAncmV0dXJuIG5ldyBDKCcgKyBqb2luKGxpc3QsICcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbYXJnc0xlbmd0aF0oQywgYXJncyk7XG59O1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/ICRGdW5jdGlvbi5iaW5kIDogZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgRiA9IGFDYWxsYWJsZSh0aGlzKTtcbiAgdmFyIFByb3RvdHlwZSA9IEYucHJvdG90eXBlO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gZnVuY3Rpb24gYm91bmQoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gY29uY2F0KHBhcnRBcmdzLCBhcnJheVNsaWNlKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmRGdW5jdGlvbiA/IGNvbnN0cnVjdChGLCBhcmdzLmxlbmd0aCwgYXJncykgOiBGLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoUHJvdG90eXBlKSkgYm91bmRGdW5jdGlvbi5wcm90b3R5cGUgPSBQcm90b3R5cGU7XG4gIHJldHVybiBib3VuZEZ1bmN0aW9uO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gZGV0ZWN0aW9uXG4kKHsgdGFyZ2V0OiAnRnVuY3Rpb24nLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGdW5jdGlvbi5iaW5kICE9PSBiaW5kIH0sIHtcbiAgYmluZDogYmluZFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUikge1xuICByZXR1cm4gcGF0aFtDT05TVFJVQ1RPUiArICdQcm90b3R5cGUnXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0Z1bmN0aW9uJykuYmluZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vZnVuY3Rpb24vdmlydHVhbC9iaW5kJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmJpbmQ7XG4gIHJldHVybiBpdCA9PT0gRnVuY3Rpb25Qcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoRnVuY3Rpb25Qcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmRcIik7IiwgIi8qKlxuICogRHJhdyBhIGNpcmNsZS5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3Q2lyY2xlKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4LmFyYyh4LCB5LCByLCAwLCAyICogTWF0aC5QSSwgZmFsc2UpO1xuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhIHNxdWFyZS5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBIYWxmIG9mIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBzcXVhcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3U3F1YXJlKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4LnJlY3QoeCAtIHIsIHkgLSByLCByICogMiwgciAqIDIpO1xuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhbiBlcXVpbGF0ZXJhbCB0cmlhbmdsZSBzdGFuZGluZyBvbiBhIHNpZGUuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gSGFsZiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBzaWRlcy5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VxdWlsYXRlcmFsX3RyaWFuZ2xlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3VHJpYW5nbGUoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY3R4LmJlZ2luUGF0aCgpO1xuXG4gIC8vIHRoZSBjaGFuZ2UgaW4gcmFkaXVzIGFuZCB0aGUgb2Zmc2V0IGlzIGhlcmUgdG8gY2VudGVyIHRoZSBzaGFwZVxuICByICo9IDEuMTU7XG4gIHkgKz0gMC4yNzUgKiByO1xuXG4gIGNvbnN0IHMgPSByICogMjtcbiAgY29uc3QgczIgPSBzIC8gMjtcbiAgY29uc3QgaXIgPSAoTWF0aC5zcXJ0KDMpIC8gNikgKiBzOyAvLyByYWRpdXMgb2YgaW5uZXIgY2lyY2xlXG4gIGNvbnN0IGggPSBNYXRoLnNxcnQocyAqIHMgLSBzMiAqIHMyKTsgLy8gaGVpZ2h0XG5cbiAgY3R4Lm1vdmVUbyh4LCB5IC0gKGggLSBpcikpO1xuICBjdHgubGluZVRvKHggKyBzMiwgeSArIGlyKTtcbiAgY3R4LmxpbmVUbyh4IC0gczIsIHkgKyBpcik7XG4gIGN0eC5saW5lVG8oeCwgeSAtIChoIC0gaXIpKTtcbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG4vKipcbiAqIERyYXcgYW4gZXF1aWxhdGVyYWwgdHJpYW5nbGUgc3RhbmRpbmcgb24gYSB2ZXJ0ZXguXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gSGFsZiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBzaWRlcy5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VxdWlsYXRlcmFsX3RyaWFuZ2xlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3VHJpYW5nbGVEb3duKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcblxuICAvLyB0aGUgY2hhbmdlIGluIHJhZGl1cyBhbmQgdGhlIG9mZnNldCBpcyBoZXJlIHRvIGNlbnRlciB0aGUgc2hhcGVcbiAgciAqPSAxLjE1O1xuICB5IC09IDAuMjc1ICogcjtcblxuICBjb25zdCBzID0gciAqIDI7XG4gIGNvbnN0IHMyID0gcyAvIDI7XG4gIGNvbnN0IGlyID0gKE1hdGguc3FydCgzKSAvIDYpICogczsgLy8gcmFkaXVzIG9mIGlubmVyIGNpcmNsZVxuICBjb25zdCBoID0gTWF0aC5zcXJ0KHMgKiBzIC0gczIgKiBzMik7IC8vIGhlaWdodFxuXG4gIGN0eC5tb3ZlVG8oeCwgeSArIChoIC0gaXIpKTtcbiAgY3R4LmxpbmVUbyh4ICsgczIsIHkgLSBpcik7XG4gIGN0eC5saW5lVG8oeCAtIHMyLCB5IC0gaXIpO1xuICBjdHgubGluZVRvKHgsIHkgKyAoaCAtIGlyKSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGEgc3Rhci5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBUaGUgb3V0ZXIgcmFkaXVzIG9mIHRoZSBzdGFyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd1N0YXIoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgLy8gaHR0cDovL3d3dy5odG1sNWNhbnZhc3R1dG9yaWFscy5jb20vbGFicy9odG1sNS1jYW52YXMtc3Rhci1zcGlubmVyL1xuICBjdHguYmVnaW5QYXRoKCk7XG5cbiAgLy8gdGhlIGNoYW5nZSBpbiByYWRpdXMgYW5kIHRoZSBvZmZzZXQgaXMgaGVyZSB0byBjZW50ZXIgdGhlIHNoYXBlXG4gIHIgKj0gMC44MjtcbiAgeSArPSAwLjEgKiByO1xuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgMTA7IG4rKykge1xuICAgIGNvbnN0IHJhZGl1cyA9IG4gJSAyID09PSAwID8gciAqIDEuMyA6IHIgKiAwLjU7XG4gICAgY3R4LmxpbmVUbyhcbiAgICAgIHggKyByYWRpdXMgKiBNYXRoLnNpbigobiAqIDIgKiBNYXRoLlBJKSAvIDEwKSxcbiAgICAgIHkgLSByYWRpdXMgKiBNYXRoLmNvcygobiAqIDIgKiBNYXRoLlBJKSAvIDEwKVxuICAgICk7XG4gIH1cblxuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhIGRpYW1vbmQuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gSGFsZiBvZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZGlhbW9uZC5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vd3d3Lmh0bWw1Y2FudmFzdHV0b3JpYWxzLmNvbS9sYWJzL2h0bWw1LWNhbnZhcy1zdGFyLXNwaW5uZXIvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3RGlhbW9uZChcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICByOiBudW1iZXJcbik6IHZvaWQge1xuICBjdHguYmVnaW5QYXRoKCk7XG5cbiAgY3R4LmxpbmVUbyh4LCB5ICsgcik7XG4gIGN0eC5saW5lVG8oeCArIHIsIHkpO1xuICBjdHgubGluZVRvKHgsIHkgLSByKTtcbiAgY3R4LmxpbmVUbyh4IC0gciwgeSk7XG5cbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG4vKipcbiAqIERyYXcgYSByZWN0YW5nbGUgd2l0aCByb3VuZGVkIGNvcm5lcnMuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSB3IC0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuXG4gKiBAcGFyYW0gaCAtIFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS5cbiAqIEBwYXJhbSByIC0gVGhlIHJhZGl1cyBvZiB0aGUgY29ybmVycy5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEyNTU1MTIvaG93LXRvLWRyYXctYS1yb3VuZGVkLXJlY3RhbmdsZS1vbi1odG1sLWNhbnZhc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd1JvdW5kUmVjdChcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB3OiBudW1iZXIsXG4gIGg6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY29uc3QgcjJkID0gTWF0aC5QSSAvIDE4MDtcbiAgaWYgKHcgLSAyICogciA8IDApIHtcbiAgICByID0gdyAvIDI7XG4gIH0gLy9lbnN1cmUgdGhhdCB0aGUgcmFkaXVzIGlzbid0IHRvbyBsYXJnZSBmb3IgeFxuICBpZiAoaCAtIDIgKiByIDwgMCkge1xuICAgIHIgPSBoIC8gMjtcbiAgfSAvL2Vuc3VyZSB0aGF0IHRoZSByYWRpdXMgaXNuJ3QgdG9vIGxhcmdlIGZvciB5XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4Lm1vdmVUbyh4ICsgciwgeSk7XG4gIGN0eC5saW5lVG8oeCArIHcgLSByLCB5KTtcbiAgY3R4LmFyYyh4ICsgdyAtIHIsIHkgKyByLCByLCByMmQgKiAyNzAsIHIyZCAqIDM2MCwgZmFsc2UpO1xuICBjdHgubGluZVRvKHggKyB3LCB5ICsgaCAtIHIpO1xuICBjdHguYXJjKHggKyB3IC0gciwgeSArIGggLSByLCByLCAwLCByMmQgKiA5MCwgZmFsc2UpO1xuICBjdHgubGluZVRvKHggKyByLCB5ICsgaCk7XG4gIGN0eC5hcmMoeCArIHIsIHkgKyBoIC0gciwgciwgcjJkICogOTAsIHIyZCAqIDE4MCwgZmFsc2UpO1xuICBjdHgubGluZVRvKHgsIHkgKyByKTtcbiAgY3R4LmFyYyh4ICsgciwgeSArIHIsIHIsIHIyZCAqIDE4MCwgcjJkICogMjcwLCBmYWxzZSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSB3IC0gVGhlIHdpZHRoIG9mIHRoZSBlbGxpcHNlLlxuICogQHBhcmFtIGggLSBUaGUgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlLlxuICogQHJlbWFya3NcbiAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuICpcbiAqIFBvc3RmaXggJ192aXMnIGFkZGVkIHRvIGRpc2Nlcm4gaXQgZnJvbSBzdGFuZGFyZCBtZXRob2QgZWxsaXBzZSgpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0VsbGlwc2UoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgdzogbnVtYmVyLFxuICBoOiBudW1iZXJcbik6IHZvaWQge1xuICBjb25zdCBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgIHhlID0geCArIHcsIC8vIHgtZW5kXG4gICAgeWUgPSB5ICsgaCwgLy8geS1lbmRcbiAgICB4bSA9IHggKyB3IC8gMiwgLy8geC1taWRkbGVcbiAgICB5bSA9IHkgKyBoIC8gMjsgLy8geS1taWRkbGVcblxuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5tb3ZlVG8oeCwgeW0pO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGFuIGlzb21ldHJpYyBjeWxpbmRlci5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHcgLSBUaGUgd2lkdGggb2YgdGhlIGRhdGFiYXNlLlxuICogQHBhcmFtIGggLSBUaGUgaGVpZ2h0IG9mIHRoZSBkYXRhYmFzZS5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYXdEYXRhYmFzZShcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB3OiBudW1iZXIsXG4gIGg6IG51bWJlclxuKTogdm9pZCB7XG4gIGNvbnN0IGYgPSAxIC8gMztcbiAgY29uc3Qgd0VsbGlwc2UgPSB3O1xuICBjb25zdCBoRWxsaXBzZSA9IGggKiBmO1xuXG4gIGNvbnN0IGthcHBhID0gMC41NTIyODQ4LFxuICAgIG94ID0gKHdFbGxpcHNlIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgIG95ID0gKGhFbGxpcHNlIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICB4ZSA9IHggKyB3RWxsaXBzZSwgLy8geC1lbmRcbiAgICB5ZSA9IHkgKyBoRWxsaXBzZSwgLy8geS1lbmRcbiAgICB4bSA9IHggKyB3RWxsaXBzZSAvIDIsIC8vIHgtbWlkZGxlXG4gICAgeW0gPSB5ICsgaEVsbGlwc2UgLyAyLCAvLyB5LW1pZGRsZVxuICAgIHltYiA9IHkgKyAoaCAtIGhFbGxpcHNlIC8gMiksIC8vIHktbWlkbGxlLCBib3R0b20gZWxsaXBzZVxuICAgIHllYiA9IHkgKyBoOyAvLyB5LWVuZCwgYm90dG9tIGVsbGlwc2VcblxuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5tb3ZlVG8oeGUsIHltKTtcblxuICBjdHguYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgY3R4LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcblxuICBjdHgubGluZVRvKHhlLCB5bWIpO1xuXG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhlLCB5bWIgKyBveSwgeG0gKyBveCwgeWViLCB4bSwgeWViKTtcbiAgY3R4LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWViLCB4LCB5bWIgKyBveSwgeCwgeW1iKTtcblxuICBjdHgubGluZVRvKHgsIHltKTtcbn1cblxuLyoqXG4gKiBEcmF3IGEgZGFzaGVkIGxpbmUuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9uIHRoZSB4IGF4aXMuXG4gKiBAcGFyYW0geSAtIFRoZSBzdGFydCBwb3NpdGlvbiBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHgyIC0gVGhlIGVuZCBwb3NpdGlvbiBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkyIC0gVGhlIGVuZCBwb3NpdGlvbiBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHBhdHRlcm4gLSBMaXN0IG9mIGxlbmd0aHMgc3RhcnRpbmcgd2l0aCBsaW5lIGFuZCB0aGVuIGFsdGVybmF0aW5nIGJldHdlZW4gc3BhY2UgYW5kIGxpbmUuXG4gKiBAYXV0aG9yIERhdmlkIEpvcmRhblxuICogQHJlbWFya3NcbiAqIGRhdGUgMjAxMi0wOC0wOFxuICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NTc2NzI0L2RvdHRlZC1zdHJva2UtaW4tY2FudmFzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3RGFzaGVkTGluZShcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB4MjogbnVtYmVyLFxuICB5MjogbnVtYmVyLFxuICBwYXR0ZXJuOiBudW1iZXJbXVxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4Lm1vdmVUbyh4LCB5KTtcblxuICBjb25zdCBwYXR0ZXJuTGVuZ3RoID0gcGF0dGVybi5sZW5ndGg7XG4gIGNvbnN0IGR4ID0geDIgLSB4O1xuICBjb25zdCBkeSA9IHkyIC0geTtcbiAgY29uc3Qgc2xvcGUgPSBkeSAvIGR4O1xuICBsZXQgZGlzdFJlbWFpbmluZyA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gIGxldCBwYXR0ZXJuSW5kZXggPSAwO1xuICBsZXQgZHJhdyA9IHRydWU7XG4gIGxldCB4U3RlcCA9IDA7XG4gIGxldCBkYXNoTGVuZ3RoID0gK3BhdHRlcm5bMF07XG5cbiAgd2hpbGUgKGRpc3RSZW1haW5pbmcgPj0gMC4xKSB7XG4gICAgZGFzaExlbmd0aCA9ICtwYXR0ZXJuW3BhdHRlcm5JbmRleCsrICUgcGF0dGVybkxlbmd0aF07XG4gICAgaWYgKGRhc2hMZW5ndGggPiBkaXN0UmVtYWluaW5nKSB7XG4gICAgICBkYXNoTGVuZ3RoID0gZGlzdFJlbWFpbmluZztcbiAgICB9XG5cbiAgICB4U3RlcCA9IE1hdGguc3FydCgoZGFzaExlbmd0aCAqIGRhc2hMZW5ndGgpIC8gKDEgKyBzbG9wZSAqIHNsb3BlKSk7XG4gICAgeFN0ZXAgPSBkeCA8IDAgPyAteFN0ZXAgOiB4U3RlcDtcbiAgICB4ICs9IHhTdGVwO1xuICAgIHkgKz0gc2xvcGUgKiB4U3RlcDtcblxuICAgIGlmIChkcmF3ID09PSB0cnVlKSB7XG4gICAgICBjdHgubGluZVRvKHgsIHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdHgubW92ZVRvKHgsIHkpO1xuICAgIH1cblxuICAgIGRpc3RSZW1haW5pbmcgLT0gZGFzaExlbmd0aDtcbiAgICBkcmF3ID0gIWRyYXc7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3IGEgaGV4YWdvbi5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBUaGUgcmFkaXVzIG9mIHRoZSBoZXhhZ29uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0hleGFnb24oXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBjb25zdCBzaWRlcyA9IDY7XG4gIGNvbnN0IGEgPSAoTWF0aC5QSSAqIDIpIC8gc2lkZXM7XG4gIGN0eC5tb3ZlVG8oeCArIHIsIHkpO1xuICBmb3IgKGxldCBpID0gMTsgaSA8IHNpZGVzOyBpKyspIHtcbiAgICBjdHgubGluZVRvKHggKyByICogTWF0aC5jb3MoYSAqIGkpLCB5ICsgciAqIE1hdGguc2luKGEgKiBpKSk7XG4gIH1cbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG5jb25zdCBzaGFwZU1hcCA9IHtcbiAgY2lyY2xlOiBkcmF3Q2lyY2xlLFxuICBkYXNoZWRMaW5lOiBkcmF3RGFzaGVkTGluZSxcbiAgZGF0YWJhc2U6IGRyYXdEYXRhYmFzZSxcbiAgZGlhbW9uZDogZHJhd0RpYW1vbmQsXG4gIGVsbGlwc2U6IGRyYXdFbGxpcHNlLFxuICBlbGxpcHNlX3ZpczogZHJhd0VsbGlwc2UsXG4gIGhleGFnb246IGRyYXdIZXhhZ29uLFxuICByb3VuZFJlY3Q6IGRyYXdSb3VuZFJlY3QsXG4gIHNxdWFyZTogZHJhd1NxdWFyZSxcbiAgc3RhcjogZHJhd1N0YXIsXG4gIHRyaWFuZ2xlOiBkcmF3VHJpYW5nbGUsXG4gIHRyaWFuZ2xlRG93bjogZHJhd1RyaWFuZ2xlRG93bixcbn07XG5cbi8qKlxuICogUmV0dXJucyBlaXRoZXIgY3VzdG9tIG9yIG5hdGl2ZSBkcmF3aW5nIGZ1bmN0aW9uIGJhc2Ugb24gc3VwcGxpZWQgbmFtZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4gRWl0aGVyIHRoZSBuYW1lIG9mIGFcbiAqIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBwcm9wZXJ0eSBvciBhbiBleHBvcnQgZnJvbSBzaGFwZXMudHMgd2l0aG91dCB0aGVcbiAqIGRyYXcgcHJlZml4LlxuICogQHJldHVybnMgVGhlIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHJlbmRlcmluZy4gSW4gY2FzZSBvZiBuYXRpdmVcbiAqIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBmdW5jdGlvbiB0aGUgQVBJIGlzIG5vcm1hbGl6ZWQgdG9cbiAqIGAoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIC4uLm9yaWdpbmFsQXJncykgPT4gdm9pZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaGFwZShcbiAgbmFtZToga2V5b2YgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwga2V5b2YgdHlwZW9mIHNoYXBlTWFwXG4pOiBhbnkge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNoYXBlTWFwLCBuYW1lKSkge1xuICAgIHJldHVybiAoc2hhcGVNYXAgYXMgYW55KVtuYW1lXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5wcm90b3R5cGUgYXMgYW55KVtuYW1lXS5jYWxsKGN0eCwgYXJncyk7XG4gICAgfTtcbiAgfVxufVxuIiwgIlxyXG4vKipcclxuICogRXhwb3NlIGBFbWl0dGVyYC5cclxuICovXHJcblxyXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICBtb2R1bGUuZXhwb3J0cyA9IEVtaXR0ZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXplIGEgbmV3IGBFbWl0dGVyYC5cclxuICpcclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5mdW5jdGlvbiBFbWl0dGVyKG9iaikge1xyXG4gIGlmIChvYmopIHJldHVybiBtaXhpbihvYmopO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE1peGluIHRoZSBlbWl0dGVyIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKiBAYXBpIHByaXZhdGVcclxuICovXHJcblxyXG5mdW5jdGlvbiBtaXhpbihvYmopIHtcclxuICBmb3IgKHZhciBrZXkgaW4gRW1pdHRlci5wcm90b3R5cGUpIHtcclxuICAgIG9ialtrZXldID0gRW1pdHRlci5wcm90b3R5cGVba2V5XTtcclxuICB9XHJcbiAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuLyoqXHJcbiAqIExpc3RlbiBvbiB0aGUgZ2l2ZW4gYGV2ZW50YCB3aXRoIGBmbmAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxyXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLm9uID1cclxuRW1pdHRlci5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XHJcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xyXG4gICh0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdID0gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XSB8fCBbXSlcclxuICAgIC5wdXNoKGZuKTtcclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGFuIGBldmVudGAgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgYSBzaW5nbGVcclxuICogdGltZSB0aGVuIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZC5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXHJcbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuRW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XHJcbiAgZnVuY3Rpb24gb24oKSB7XHJcbiAgICB0aGlzLm9mZihldmVudCwgb24pO1xyXG4gICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICB9XHJcblxyXG4gIG9uLmZuID0gZm47XHJcbiAgdGhpcy5vbihldmVudCwgb24pO1xyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSB0aGUgZ2l2ZW4gY2FsbGJhY2sgZm9yIGBldmVudGAgb3IgYWxsXHJcbiAqIHJlZ2lzdGVyZWQgY2FsbGJhY2tzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cclxuICogQHJldHVybiB7RW1pdHRlcn1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5FbWl0dGVyLnByb3RvdHlwZS5vZmYgPVxyXG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XHJcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XHJcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgZm4pe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuXHJcbiAgLy8gYWxsXHJcbiAgaWYgKDAgPT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgdGhpcy5fY2FsbGJhY2tzID0ge307XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIHNwZWNpZmljIGV2ZW50XHJcbiAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcbiAgaWYgKCFjYWxsYmFja3MpIHJldHVybiB0aGlzO1xyXG5cclxuICAvLyByZW1vdmUgYWxsIGhhbmRsZXJzXHJcbiAgaWYgKDEgPT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBzcGVjaWZpYyBoYW5kbGVyXHJcbiAgdmFyIGNiO1xyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBjYiA9IGNhbGxiYWNrc1tpXTtcclxuICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XHJcbiAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gUmVtb3ZlIGV2ZW50IHNwZWNpZmljIGFycmF5cyBmb3IgZXZlbnQgdHlwZXMgdGhhdCBub1xyXG4gIC8vIG9uZSBpcyBzdWJzY3JpYmVkIGZvciB0byBhdm9pZCBtZW1vcnkgbGVhay5cclxuICBpZiAoY2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBFbWl0IGBldmVudGAgd2l0aCB0aGUgZ2l2ZW4gYXJncy5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEBwYXJhbSB7TWl4ZWR9IC4uLlxyXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbihldmVudCl7XHJcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xyXG5cclxuICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSlcclxuICAgICwgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XTtcclxuXHJcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNhbGxiYWNrcykge1xyXG4gICAgY2FsbGJhY2tzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xyXG4gICAgICBjYWxsYmFja3NbaV0uYXBwbHkodGhpcywgYXJncyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gYXJyYXkgb2YgY2FsbGJhY2tzIGZvciBgZXZlbnRgLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHJldHVybiB7QXJyYXl9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuRW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24oZXZlbnQpe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuICByZXR1cm4gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XSB8fCBbXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiB0aGlzIGVtaXR0ZXIgaGFzIGBldmVudGAgaGFuZGxlcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcmV0dXJuIHtCb29sZWFufVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLmhhc0xpc3RlbmVycyA9IGZ1bmN0aW9uKGV2ZW50KXtcclxuICByZXR1cm4gISEgdGhpcy5saXN0ZW5lcnMoZXZlbnQpLmxlbmd0aDtcclxufTtcclxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyT3JJbmZpbml0eShwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBjaGFyQXQoUywgcG9zaXRpb24pXG4gICAgICAgICAgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBzdHJpbmdTbGljZShTLCBwb3NpdGlvbiwgcG9zaXRpb24gKyAyKVxuICAgICAgICAgIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgJiYgIVY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBwcm9wc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnVtZXJhYmxlKSB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgdmFsdWUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICBpZiAoaXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGU7XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAodHlwZW9mIGFyZ3VtZW50ID09ICdvYmplY3QnIHx8IGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgJFN0cmluZyhhcmd1bWVudCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nLCAnc2V0Jyk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICBhbk9iamVjdChPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG5cbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICBkZWZpbmVCdWlsdEluKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBgQ3JlYXRlSXRlclJlc3VsdE9iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWl0ZXJyZXN1bHRvYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBkb25lKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogZG9uZSB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHRvU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICBwb2ludCA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgc3RhdGUuaW5kZXggKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChwb2ludCwgZmFsc2UpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG90eXBlW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIGVtcHR5ID0gW107XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAudGVzdChub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgZW1wdHksIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgICAvLyBgRnVuY3Rpb24jdG9TdHJpbmdgIHRocm93cyBvbiBzb21lIGJ1aWx0LWl0IGZ1bmN0aW9uIGluIHNvbWUgbGVnYWN5IGVuZ2luZXNcbiAgICAvLyAoZm9yIGV4YW1wbGUsIGBET01RdWFkYCBhbmQgc2ltaWxhciBpbiBGRjQxLSlcbiAgICByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuaXNDb25zdHJ1Y3RvckxlZ2FjeS5zaGFtID0gdHJ1ZTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKHByb3BlcnR5S2V5IGluIG9iamVjdCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIHByb3BlcnR5S2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbcHJvcGVydHlLZXldID0gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXQpKSByZXR1cm4gZ2V0TWV0aG9kKGl0LCBJVEVSQVRPUilcbiAgICB8fCBnZXRNZXRob2QoaXQsICdAQGl0ZXJhdG9yJylcbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRJdGVyYXRvck1ldGhvZChhcmd1bWVudCkgOiB1c2luZ0l0ZXJhdG9yO1xuICBpZiAoYUNhbGxhYmxlKGl0ZXJhdG9yTWV0aG9kKSkgcmV0dXJuIGFuT2JqZWN0KGNhbGwoaXRlcmF0b3JNZXRob2QsIGFyZ3VtZW50KSk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgdmFyIElTX0NPTlNUUlVDVE9SID0gaXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgaWYgKG1hcHBpbmcpIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0LCB2YWx1ZTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICYmICEodGhpcyA9PT0gJEFycmF5ICYmIGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpKSB7XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcygpIDogW107XG4gICAgZm9yICg7IShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6ICRBcnJheShsZW5ndGgpO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIG5vLXRocm93LWxpdGVyYWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICB0cnkge1xuICAgIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIHdvcmthcm91bmQgb2Ygb2xkIFdlYktpdCArIGBldmFsYCBidWdcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20nKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG5cbnZhciBJTkNPUlJFQ1RfSVRFUkFUSU9OID0gIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYWJsZSk7XG59KTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBmcm9tOiBmcm9tXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mcm9tJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5mcm9tO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9mcm9tJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvZnJvbVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICB9XG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgJ2tleXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChpbmRleCwgZmFsc2UpO1xuICAgIGNhc2UgJ3ZhbHVlcyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHRhcmdldFtpbmRleF0sIGZhbHNlKTtcbiAgfSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbaW5kZXgsIHRhcmdldFtpbmRleF1dLCBmYWxzZSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVtYXBwZWRhcmd1bWVudHNvYmplY3RcbnZhciB2YWx1ZXMgPSBJdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcblxuLy8gVjggfiBDaHJvbWUgNDUtIGJ1Z1xuaWYgKCFJU19QVVJFICYmIERFU0NSSVBUT1JTICYmIHZhbHVlcy5uYW1lICE9PSAndmFsdWVzJykgdHJ5IHtcbiAgZGVmaW5lUHJvcGVydHkodmFsdWVzLCAnbmFtZScsIHsgdmFsdWU6ICd2YWx1ZXMnIH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yTWV0aG9kO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdO1xuICB2YXIgQ29sbGVjdGlvblByb3RvdHlwZSA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlICYmIGNsYXNzb2YoQ29sbGVjdGlvblByb3RvdHlwZSkgIT09IFRPX1NUUklOR19UQUcpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgfVxuICBJdGVyYXRvcnNbQ09MTEVDVElPTl9OQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG4vLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vZnVsbC9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2RcIik7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSBkZWZpbmVQcm9wZXJ0eSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IGRlZmluZVByb3BlcnR5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkuc2hhbSkgZGVmaW5lUHJvcGVydHkuc2hhbSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYSBwYXJ0IG9mIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXkpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAoaXNDb25zdHJ1Y3RvcihDKSAmJiAoQyA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IEM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuXG4vLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbi8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCA9IFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycmF5ID0gW107XG4gIGFycmF5W0lTX0NPTkNBVF9TUFJFQURBQkxFXSA9IGZhbHNlO1xuICByZXR1cm4gYXJyYXkuY29uY2F0KClbMF0gIT09IGFycmF5O1xufSk7XG5cbnZhciBpc0NvbmNhdFNwcmVhZGFibGUgPSBmdW5jdGlvbiAoTykge1xuICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzcHJlYWRhYmxlID0gT1tJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gIHJldHVybiBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KE8pO1xufTtcblxudmFyIEZPUkNFRCA9ICFJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUIHx8ICFhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdjb25jYXQnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb25jYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBjb25jYXQ6IGZ1bmN0aW9uIGNvbmNhdChhcmcpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgaSwgaywgbGVuZ3RoLCBsZW4sIEU7XG4gICAgZm9yIChpID0gLTEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgRSA9IGkgPT09IC0xID8gTyA6IGFyZ3VtZW50c1tpXTtcbiAgICAgIGlmIChpc0NvbmNhdFNwcmVhZGFibGUoRSkpIHtcbiAgICAgICAgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoRSk7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgbGVuKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKG4gKyAxKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gIHZhciByZXN1bHQgPSAkQXJyYXkobWF4KGZpbiAtIGssIDApKTtcbiAgdmFyIG4gPSAwO1xuICBmb3IgKDsgayA8IGZpbjsgaysrLCBuKyspIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gIHJlc3VsdC5sZW5ndGggPSBuO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcikge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbmV4cG9ydHMuZiA9IHdlbGxLbm93blN5bWJvbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICB2YXIgU3ltYm9sID0gcGF0aC5TeW1ib2wgfHwgKHBhdGguU3ltYm9sID0ge30pO1xuICBpZiAoIWhhc093bihTeW1ib2wsIE5BTUUpKSBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsIE5BTUUsIHtcbiAgICB2YWx1ZTogd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKE5BTUUpXG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShzZWxmKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG5cbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sICYmICRTeW1ib2xbUFJPVE9UWVBFXTtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBVU0VfU0VUVEVSID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufTtcblxudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT09IDc7XG59KSA/IGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgOiBuYXRpdmVEZWZpbmVQcm9wZXJ0eTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnLCBkZXNjcmlwdGlvbikge1xuICB2YXIgc3ltYm9sID0gQWxsU3ltYm9sc1t0YWddID0gbmF0aXZlT2JqZWN0Q3JlYXRlKFN5bWJvbFByb3RvdHlwZSk7XG4gIHNldEludGVybmFsU3RhdGUoc3ltYm9sLCB7XG4gICAgdHlwZTogU1lNQk9MLFxuICAgIHRhZzogdGFnLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgc3ltYm9sLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIHJldHVybiBzeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhc093bihPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB7fSkpO1xuICAgICAgT1tISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzT3duKE8sIEhJRERFTikgJiYgT1tISURERU5dW2tleV0pIE9bSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBBdHRyaWJ1dGVzID0gbmF0aXZlT2JqZWN0Q3JlYXRlKEF0dHJpYnV0ZXMsIHsgZW51bWVyYWJsZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjcmlwdG9yKE8sIGtleSwgQXR0cmlidXRlcyk7XG4gIH0gcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIGtleSwgQXR0cmlidXRlcyk7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wZXJ0aWVzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMocHJvcGVydGllcykuY29uY2F0KCRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMocHJvcGVydGllcykpO1xuICAkZm9yRWFjaChrZXlzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKCRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgcHJvcGVydGllcywga2V5KSkgJGRlZmluZVByb3BlcnR5KE8sIGtleSwgcHJvcGVydGllc1trZXldKTtcbiAgfSk7XG4gIHJldHVybiBPO1xufTtcblxudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gbmF0aXZlT2JqZWN0Q3JlYXRlKE8pIDogJGRlZmluZVByb3BlcnRpZXMobmF0aXZlT2JqZWN0Q3JlYXRlKE8pLCBQcm9wZXJ0aWVzKTtcbn07XG5cbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBQID0gdG9Qcm9wZXJ0eUtleShWKTtcbiAgdmFyIGVudW1lcmFibGUgPSBjYWxsKG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlLCB0aGlzLCBQKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywgUCkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZW51bWVyYWJsZSB8fCAhaGFzT3duKHRoaXMsIFApIHx8ICFoYXNPd24oQWxsU3ltYm9scywgUCkgfHwgaGFzT3duKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW1BdXG4gICAgPyBlbnVtZXJhYmxlIDogdHJ1ZTtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgdmFyIGl0ID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBkZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xuICBpZiAoZGVzY3JpcHRvciAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhKGhhc093bihpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSB7XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIWhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSkgcHVzaChyZXN1bHQsIGtleSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiAoTykge1xuICB2YXIgSVNfT0JKRUNUX1BST1RPVFlQRSA9IE8gPT09IE9iamVjdFByb3RvdHlwZTtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyhJU19PQkpFQ1RfUFJPVE9UWVBFID8gT2JqZWN0UHJvdG90eXBlU3ltYm9scyA6IHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgKCFJU19PQkpFQ1RfUFJPVE9UWVBFIHx8IGhhc093bihPYmplY3RQcm90b3R5cGUsIGtleSkpKSB7XG4gICAgICBwdXNoKHJlc3VsdCwgQWxsU3ltYm9sc1trZXldKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gYFN5bWJvbGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLWNvbnN0cnVjdG9yXG5pZiAoIU5BVElWRV9TWU1CT0wpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAoaXNQcm90b3R5cGVPZihTeW1ib2xQcm90b3R5cGUsIHRoaXMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSAhYXJndW1lbnRzLmxlbmd0aCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICR0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciB0YWcgPSB1aWQoZGVzY3JpcHRpb24pO1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIGNhbGwoc2V0dGVyLCBPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKHRoaXMsIEhJRERFTikgJiYgaGFzT3duKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IodGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikpIHRocm93IGVycm9yO1xuICAgICAgICBmYWxsYmFja0RlZmluZVByb3BlcnR5KHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBkZWZpbmVCdWlsdEluKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydGllcztcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3ZWxsS25vd25TeW1ib2wobmFtZSksIG5hbWUpO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLVN5bWJvbC1kZXNjcmlwdGlvblxuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihPYmplY3RQcm90b3R5cGUsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wuZm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVwbGFjZXIpIHtcbiAgaWYgKGlzQ2FsbGFibGUocmVwbGFjZXIpKSByZXR1cm4gcmVwbGFjZXI7XG4gIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJldHVybjtcbiAgdmFyIHJhd0xlbmd0aCA9IHJlcGxhY2VyLmxlbmd0aDtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdMZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGVtZW50ID0gcmVwbGFjZXJbaV07XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdzdHJpbmcnKSBwdXNoKGtleXMsIGVsZW1lbnQpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdudW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdOdW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdTdHJpbmcnKSBwdXNoKGtleXMsIHRvU3RyaW5nKGVsZW1lbnQpKTtcbiAgfVxuICB2YXIga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgcm9vdCA9IHRydWU7XG4gIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChyb290KSB7XG4gICAgICByb290ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHRoaXMpKSByZXR1cm4gdmFsdWU7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzTGVuZ3RoOyBqKyspIGlmIChrZXlzW2pdID09PSBrZXkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBnZXRSZXBsYWNlckZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxudmFyIHRlc3RlciA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKCdzdHJpbmdpZnkgZGV0ZWN0aW9uJyk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPT0gJ1tudWxsXSdcbiAgICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9PSAne30nXG4gICAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPT0gJ3t9Jztcbn0pO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbnZhciBJTExfRk9STUVEX1VOSUNPREUgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkc3RyaW5naWZ5KCdcXHVERjA2XFx1RDgzNCcpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIidcbiAgICB8fCAkc3RyaW5naWZ5KCdcXHVERUFEJykgIT09ICdcIlxcXFx1ZGVhZFwiJztcbn0pO1xuXG52YXIgc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggPSBmdW5jdGlvbiAoaXQsIHJlcGxhY2VyKSB7XG4gIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICB2YXIgJHJlcGxhY2VyID0gZ2V0UmVwbGFjZXJGdW5jdGlvbihyZXBsYWNlcik7XG4gIGlmICghaXNDYWxsYWJsZSgkcmVwbGFjZXIpICYmIChpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICBhcmdzWzFdID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBzb21lIG9sZCBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgV2ViS2l0KSBjb3VsZCBwYXNzIG51bWJlcnMgYXMga2V5c1xuICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gY2FsbCgkcmVwbGFjZXIsIHRoaXMsICRTdHJpbmcoa2V5KSwgdmFsdWUpO1xuICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHJldHVybiBhcHBseSgkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbn07XG5cbnZhciBmaXhJbGxGb3JtZWQgPSBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCwgc3RyaW5nKSB7XG4gIHZhciBwcmV2ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0IC0gMSk7XG4gIHZhciBuZXh0ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0ICsgMSk7XG4gIGlmICgoZXhlYyhsb3csIG1hdGNoKSAmJiAhZXhlYyhoaSwgbmV4dCkpIHx8IChleGVjKGhpLCBtYXRjaCkgJiYgIWV4ZWMobG93LCBwcmV2KSkpIHtcbiAgICByZXR1cm4gJ1xcXFx1JyArIG51bWJlclRvU3RyaW5nKGNoYXJDb2RlQXQobWF0Y2gsIDApLCAxNik7XG4gIH0gcmV0dXJuIG1hdGNoO1xufTtcblxuaWYgKCRzdHJpbmdpZnkpIHtcbiAgLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLnN0cmluZ2lmeVxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGFyaXR5OiAzLCBmb3JjZWQ6IFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiB8fCBJTExfRk9STUVEX1VOSUNPREUgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICB2YXIgcmVzdWx0ID0gYXBwbHkoV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID8gc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggOiAkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbiAgICAgIHJldHVybiBJTExfRk9STUVEX1VOSUNPREUgJiYgdHlwZW9mIHJlc3VsdCA9PSAnc3RyaW5nJyA/IHJlcGxhY2UocmVzdWx0LCB0ZXN0ZXIsIGZpeElsbEZvcm1lZCkgOiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZPUkNFRCA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eXN5bWJvbHNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgdmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5U3ltYm9scyA/ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHModG9PYmplY3QoaXQpKSA6IFtdO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmFzeW5jSXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5hc3luY2l0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jSXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmhhc0luc3RhbmNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaGFzaW5zdGFuY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaGFzSW5zdGFuY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmlzY29uY2F0c3ByZWFkYWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLml0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoQWxsYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hhbGxcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2hBbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnJlcGxhY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5yZXBsYWNlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNlYXJjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNlYXJjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzZWFyY2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNwZWNpZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGVjaWVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNwbGl0YCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BsaXRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BsaXQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wudG9QcmltaXRpdmVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3ByaW1pdGl2ZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gYFN5bWJvbC50b1N0cmluZ1RhZ2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvc3RyaW5ndGFnXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdldEJ1aWx0SW4oJ1N5bWJvbCcpLCAnU3ltYm9sJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC51bnNjb3BhYmxlc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnVuc2NvcGFibGVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBKU09OW0BAdG9TdHJpbmdUYWddIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24tQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pcy1jb25jYXQtc3ByZWFkYWJsZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnJlcGxhY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc3BlY2llcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc3BsaXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudW5zY29wYWJsZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hdGgudG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0LnRvLXN0cmluZy10YWcnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlN5bWJvbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgTUVUQURBVEEgPSB3ZWxsS25vd25TeW1ib2woJ21ldGFkYXRhJyk7XG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8vIEZ1bmN0aW9uLnByb3RvdHlwZVtAQG1ldGFkYXRhXVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yLW1ldGFkYXRhXG5pZiAoRnVuY3Rpb25Qcm90b3R5cGVbTUVUQURBVEFdID09PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHkoRnVuY3Rpb25Qcm90b3R5cGUsIE1FVEFEQVRBLCB7XG4gICAgdmFsdWU6IG51bGxcbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hc3luYy1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jRGlzcG9zZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuZGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnZGlzcG9zZScpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sJyk7XG5cbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuYXN5bmMtZGlzcG9zZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyIGtleUZvciA9IFN5bWJvbC5rZXlGb3I7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sIHx8IGZ1bmN0aW9uIGlzUmVnaXN0ZXJlZFN5bWJvbCh2YWx1ZSkge1xuICB0cnkge1xuICAgIHJldHVybiBrZXlGb3IodGhpc1N5bWJvbFZhbHVlKHZhbHVlKSkgIT09IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNSZWdpc3RlcmVkU3ltYm9sOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyICRpc1dlbGxLbm93blN5bWJvbCA9IFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbDtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0QnVpbHRJbignT2JqZWN0JywgJ2dldE93blByb3BlcnR5TmFtZXMnKTtcbnZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbmZvciAodmFyIGkgPSAwLCBzeW1ib2xLZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhTeW1ib2wpLCBzeW1ib2xLZXlzTGVuZ3RoID0gc3ltYm9sS2V5cy5sZW5ndGg7IGkgPCBzeW1ib2xLZXlzTGVuZ3RoOyBpKyspIHtcbiAgLy8gc29tZSBvbGQgZW5naW5lcyB0aHJvd3Mgb24gYWNjZXNzIHRvIHNvbWUga2V5cyBsaWtlIGBhcmd1bWVudHNgIG9yIGBjYWxsZXJgXG4gIHRyeSB7XG4gICAgdmFyIHN5bWJvbEtleSA9IHN5bWJvbEtleXNbaV07XG4gICAgaWYgKGlzU3ltYm9sKFN5bWJvbFtzeW1ib2xLZXldKSkgd2VsbEtub3duU3ltYm9sKHN5bWJvbEtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn1cblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkge1xuICBpZiAoJGlzV2VsbEtub3duU3ltYm9sICYmICRpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIHZhciBzeW1ib2wgPSB0aGlzU3ltYm9sVmFsdWUodmFsdWUpO1xuICAgIGZvciAodmFyIGogPSAwLCBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7IGogPCBrZXlzTGVuZ3RoOyBqKyspIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXEgLS0gcG9seWZpbGxlZCBzeW1ib2xzIGNhc2VcbiAgICAgIGlmIChXZWxsS25vd25TeW1ib2xzU3RvcmVba2V5c1tqXV0gPT0gc3ltYm9sKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1dlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtd2VsbC1rbm93bicpO1xuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd25TeW1ib2w6IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoZXJgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoZXInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm9ic2VydmFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ29ic2VydmFibGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1JlZ2lzdGVyZWRTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXJlZ2lzdGVyZWQnKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRgIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzUmVnaXN0ZXJlZFN5bWJvbCcgfSwge1xuICBpc1JlZ2lzdGVyZWQ6IGlzUmVnaXN0ZXJlZFN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93bmAgbWV0aG9kXG4vLyBvYnNvbGV0ZSB2ZXJzaW9uIG9mIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzV2VsbEtub3duU3ltYm9sJywgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd246IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhS2V5YCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yLW1ldGFkYXRhXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21ldGFkYXRhS2V5Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucGF0dGVybk1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdwYXR0ZXJuTWF0Y2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlQWxsJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWF0Y2hlcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm9ic2VydmFibGUnKTtcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucmVwbGFjZS1hbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3InKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ2l0ZXJhdG9yJyk7XG4iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfU3ltYm9sJGl0ZXJhdG9yIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IF9TeW1ib2wgJiYgbyAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuZGF0ZS50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZigndG9QcmltaXRpdmUnKTtcbiIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IF9TeW1ib2wkdG9QcmltaXRpdmUgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbX1N5bWJvbCR0b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIF9PYmplY3QkZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG4vLyBgQXJyYXkuaXNBcnJheWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmlzYXJyYXlcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUgfSwge1xuICBpc0FycmF5OiBpc0FycmF5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5pc0FycmF5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggYW5kIFNhZmFyaSA8PSAxNS40LCBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5wdXNoJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykucHVzaDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9wdXNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnB1c2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnB1c2gpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcHVzaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIG5hdGl2ZVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKGlzQ29uc3RydWN0b3IoQ29uc3RydWN0b3IpICYmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQ29uc3RydWN0b3IucHJvdG90eXBlKSkpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KENvbnN0cnVjdG9yKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yW1NQRUNJRVNdO1xuICAgICAgICBpZiAoQ29uc3RydWN0b3IgPT09IG51bGwpIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU2xpY2UoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQ29uc3RydWN0b3IpKG1heChmaW4gLSBrLCAwKSk7XG4gICAgZm9yIChuID0gMDsgayA8IGZpbjsgaysrLCBuKyspIGlmIChrIGluIE8pIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zbGljZScpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnNsaWNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNsaWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3NsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvYXJyYXkvZnJvbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuICByZXR1cm4gYXJyMjtcbn0iLCAiaW1wb3J0IF9zbGljZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZS5qc1wiO1xuaW1wb3J0IF9BcnJheSRmcm9tIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvZnJvbS5qc1wiO1xuaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICB2YXIgX2NvbnRleHQ7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSkuY2FsbChfY29udGV4dCwgOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gX0FycmF5JGZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsICJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn0iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59IiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX2dldEl0ZXJhdG9yTWV0aG9kIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiO1xuaW1wb3J0IF9wdXNoSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIF9TeW1ib2wgJiYgX2dldEl0ZXJhdG9yTWV0aG9kKHIpIHx8IHJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSB0KSB7XG4gICAgdmFyIGUsXG4gICAgICBuLFxuICAgICAgaSxcbiAgICAgIHUsXG4gICAgICBhID0gW10sXG4gICAgICBmID0gITAsXG4gICAgICBvID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHtcbiAgICAgICAgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuO1xuICAgICAgICBmID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoX3B1c2hJbnN0YW5jZVByb3BlcnR5KGEpLmNhbGwoYSwgZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCAiaW1wb3J0IGFycmF5V2l0aG91dEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVTcHJlYWQgZnJvbSBcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufSIsICJpbXBvcnQgX0FycmF5JGlzQXJyYXkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9pcy1hcnJheS5qc1wiO1xuaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoX0FycmF5JGlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn0iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfZ2V0SXRlcmF0b3JNZXRob2QgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXCI7XG5pbXBvcnQgX0FycmF5JGZyb20gZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBfU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIF9nZXRJdGVyYXRvck1ldGhvZChpdGVyKSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBfQXJyYXkkZnJvbShpdGVyKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2xcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuY29uY2F0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2NvbmNhdCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5jb25jYXQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmNvbmNhdCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9jb25jYXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zbGljZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5tYXA7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ21hcCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lm1hcCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLm1hcDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQubWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5tYXApID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvbWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5rZXlzO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyICREYXRlID0gRGF0ZTtcbnZhciB0aGlzVGltZVZhbHVlID0gdW5jdXJyeVRoaXMoJERhdGUucHJvdG90eXBlLmdldFRpbWUpO1xuXG4vLyBgRGF0ZS5ub3dgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLm5vd1xuJCh7IHRhcmdldDogJ0RhdGUnLCBzdGF0OiB0cnVlIH0sIHtcbiAgbm93OiBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuIHRoaXNUaW1lVmFsdWUobmV3ICREYXRlKCkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUubm93Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5EYXRlLm5vdztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAhU1RSSUNUX01FVEhPRCA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG59IDogW10uZm9yRWFjaDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogW10uZm9yRWFjaCAhPT0gZm9yRWFjaCB9LCB7XG4gIGZvckVhY2g6IGZvckVhY2hcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2gnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5mb3JFYWNoO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5mb3JFYWNoO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5mb3JFYWNoKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IHVuY3VycnlUaGlzKFtdLnJldmVyc2UpO1xudmFyIHRlc3QgPSBbMSwgMl07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmV2ZXJzZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZXZlcnNlXG4vLyBmaXggZm9yIFNhZmFyaSAxMi4wIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODc5NFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU3RyaW5nKHRlc3QpID09PSBTdHJpbmcodGVzdC5yZXZlcnNlKCkpIH0sIHtcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ24gLS0gZGlydHkgaGFja1xuICAgIGlmIChpc0FycmF5KHRoaXMpKSB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHJldHVybiBuYXRpdmVSZXZlcnNlKHRoaXMpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZXZlcnNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JldmVyc2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmV2ZXJzZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmV2ZXJzZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9yZXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIGlmICghZGVsZXRlIE9bUF0pIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICcgKyB0cnlUb1N0cmluZyhQKSArICcgb2YgJyArIHRyeVRvU3RyaW5nKE8pKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NwbGljZScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc3BsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNwbGljZVxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc3BsaWNlOiBmdW5jdGlvbiBzcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50IC8qICwgLi4uaXRlbXMgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYWN0dWFsU3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGluc2VydENvdW50LCBhY3R1YWxEZWxldGVDb3VudCwgQSwgaywgZnJvbSwgdG87XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMCkge1xuICAgICAgaW5zZXJ0Q291bnQgPSBhY3R1YWxEZWxldGVDb3VudCA9IDA7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDEpIHtcbiAgICAgIGluc2VydENvdW50ID0gMDtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbGVuIC0gYWN0dWFsU3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc2VydENvdW50ID0gYXJndW1lbnRzTGVuZ3RoIC0gMjtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbWluKG1heCh0b0ludGVnZXJPckluZmluaXR5KGRlbGV0ZUNvdW50KSwgMCksIGxlbiAtIGFjdHVhbFN0YXJ0KTtcbiAgICB9XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGluc2VydENvdW50IC0gYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIGZvciAoayA9IDA7IGsgPCBhY3R1YWxEZWxldGVDb3VudDsgaysrKSB7XG4gICAgICBmcm9tID0gYWN0dWFsU3RhcnQgKyBrO1xuICAgICAgaWYgKGZyb20gaW4gTykgY3JlYXRlUHJvcGVydHkoQSwgaywgT1tmcm9tXSk7XG4gICAgfVxuICAgIEEubGVuZ3RoID0gYWN0dWFsRGVsZXRlQ291bnQ7XG4gICAgaWYgKGluc2VydENvdW50IDwgYWN0dWFsRGVsZXRlQ291bnQpIHtcbiAgICAgIGZvciAoayA9IGFjdHVhbFN0YXJ0OyBrIDwgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgICBmcm9tID0gayArIGFjdHVhbERlbGV0ZUNvdW50O1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudDtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgICBmb3IgKGsgPSBsZW47IGsgPiBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50OyBrLS0pIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCBrIC0gMSk7XG4gICAgfSBlbHNlIGlmIChpbnNlcnRDb3VudCA+IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBsZW4gLSBhY3R1YWxEZWxldGVDb3VudDsgayA+IGFjdHVhbFN0YXJ0OyBrLS0pIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudCAtIDE7XG4gICAgICAgIHRvID0gayArIGluc2VydENvdW50IC0gMTtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoayA9IDA7IGsgPCBpbnNlcnRDb3VudDsgaysrKSB7XG4gICAgICBPW2sgKyBhY3R1YWxTdGFydF0gPSBhcmd1bWVudHNbayArIDJdO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50KTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zcGxpY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc3BsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNwbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc3BsaWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NwbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmNsdWRlcztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIEZGOTkrIGJ1Z1xudmFyIEJST0tFTl9PTl9TUEFSU0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtaW5jbHVkZXMgLS0gZGV0ZWN0aW9uXG4gIHJldHVybiAhQXJyYXkoMSkuaW5jbHVkZXMoKTtcbn0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCUk9LRU5fT05fU1BBUlNFIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2luY2x1ZGVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcycpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmluY2x1ZGVzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09PSAnUmVnRXhwJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc1JlZ0V4cChpdCkpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICB2YXIgcmVnZXhwID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICB0cnkge1xuICAgICAgcmVnZXhwW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICAgIH0gY2F0Y2ggKGVycm9yMikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBub3RBUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vdC1hLXJlZ2V4cCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMnKTtcblxudmFyIHN0cmluZ0luZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIWNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdpbmNsdWRlcycpIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5zdHJpbmdJbmRleE9mKFxuICAgICAgdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSksXG4gICAgICB0b1N0cmluZyhub3RBUmVnRXhwKHNlYXJjaFN0cmluZykpLFxuICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcycpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdTdHJpbmcnKS5pbmNsdWRlcztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYXJyYXlNZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2luY2x1ZGVzJyk7XG52YXIgc3RyaW5nTWV0aG9kID0gcmVxdWlyZSgnLi4vc3RyaW5nL3ZpcnR1YWwvaW5jbHVkZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xudmFyIFN0cmluZ1Byb3RvdHlwZSA9IFN0cmluZy5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5pbmNsdWRlcztcbiAgaWYgKGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuaW5jbHVkZXMpKSByZXR1cm4gYXJyYXlNZXRob2Q7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgfHwgaXQgPT09IFN0cmluZ1Byb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihTdHJpbmdQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IFN0cmluZ1Byb3RvdHlwZS5pbmNsdWRlcykpIHtcbiAgICByZXR1cm4gc3RyaW5nTWV0aG9kO1xuICB9IHJldHVybiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9pbmNsdWRlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0UHJvdG90eXBlT2YoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIH0sIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmlsdGVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbHRlcikgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbm1vZHVsZS5leHBvcnRzID0gJ1xcdTAwMDlcXHUwMDBBXFx1MDAwQlxcdTAwMENcXHUwMDBEXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MjAwMFxcdTIwMDFcXHUyMDAyJyArXG4gICdcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXlsnICsgd2hpdGVzcGFjZXMgKyAnXSsnKTtcbnZhciBydHJpbSA9IFJlZ0V4cCgnKF58W14nICsgd2hpdGVzcGFjZXMgKyAnXSlbJyArIHdoaXRlc3BhY2VzICsgJ10rJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgbHRyaW0sICcnKTtcbiAgICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBydHJpbSwgJyQxJyk7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1MZWZ0LCB0cmltU3RhcnQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbXN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbVJpZ2h0LCB0cmltRW5kIH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuICB0cmltOiBjcmVhdGVNZXRob2QoMylcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciAkcGFyc2VJbnQgPSBnbG9iYWwucGFyc2VJbnQ7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBJVEVSQVRPUiA9IFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgaGV4ID0gL15bKy1dPzB4L2k7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGhleC5leGVjKTtcbnZhciBGT1JDRUQgPSAkcGFyc2VJbnQod2hpdGVzcGFjZXMgKyAnMDgnKSAhPT0gOCB8fCAkcGFyc2VJbnQod2hpdGVzcGFjZXMgKyAnMHgxNicpICE9PSAyMlxuICAvLyBNUyBFZGdlIDE4LSBicm9rZW4gd2l0aCBib3hlZCBzeW1ib2xzXG4gIHx8IChJVEVSQVRPUiAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyAkcGFyc2VJbnQoT2JqZWN0KElURVJBVE9SKSk7IH0pKTtcblxuLy8gYHBhcnNlSW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VpbnQtc3RyaW5nLXJhZGl4XG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIHBhcnNlSW50KHN0cmluZywgcmFkaXgpIHtcbiAgdmFyIFMgPSB0cmltKHRvU3RyaW5nKHN0cmluZykpO1xuICByZXR1cm4gJHBhcnNlSW50KFMsIChyYWRpeCA+Pj4gMCkgfHwgKGV4ZWMoaGV4LCBTKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1wYXJzZS1pbnQnKTtcblxuLy8gYHBhcnNlSW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VpbnQtc3RyaW5nLXJhZGl4XG4kKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHBhcnNlSW50ICE9PSAkcGFyc2VJbnQgfSwge1xuICBwYXJzZUludDogJHBhcnNlSW50XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnBhcnNlLWludCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGgucGFyc2VJbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWluZGV4b2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciAkaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBuYXRpdmVJbmRleE9mID0gdW5jdXJyeVRoaXMoW10uaW5kZXhPZik7XG5cbnZhciBORUdBVElWRV9aRVJPID0gISFuYXRpdmVJbmRleE9mICYmIDEgLyBuYXRpdmVJbmRleE9mKFsxXSwgMSwgLTApIDwgMDtcbnZhciBGT1JDRUQgPSBORUdBVElWRV9aRVJPIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdpbmRleE9mJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgdmFyIGZyb21JbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/IG5hdGl2ZUluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4KSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaW5kZXgtb2YnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5pbmRleE9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2luZGV4LW9mJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmluZGV4T2Y7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmluZGV4T2YpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvaW5kZXgtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgY3JlYXRlOiBjcmVhdGVcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlKFAsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoUCwgRCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2NyZWF0ZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1qc29uIC0tIHNhZmVcbmlmICghcGF0aC5KU09OKSBwYXRoLkpTT04gPSB7IHN0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnkgfTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgcmV0dXJuIGFwcGx5KHBhdGguSlNPTi5zdHJpbmdpZnksIG51bGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9qc29uL3N0cmluZ2lmeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQnVuIC0tIERlbm8gY2FzZSAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgQnVuID09ICdmdW5jdGlvbicgJiYgQnVuICYmIHR5cGVvZiBCdW4udmVyc2lvbiA9PSAnc3RyaW5nJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFzc2VkLCByZXF1aXJlZCkge1xuICBpZiAocGFzc2VkIDwgcmVxdWlyZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuICByZXR1cm4gcGFzc2VkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIEVOR0lORV9JU19CVU4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bicpO1xudmFyIFVTRVJfQUdFTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xuXG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG4vLyBkaXJ0eSBJRTktIGFuZCBCdW4gMC4zLjAtIGNoZWNrc1xudmFyIFdSQVAgPSAvTVNJRSAuXFwuLy50ZXN0KFVTRVJfQUdFTlQpIHx8IEVOR0lORV9JU19CVU4gJiYgKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlcnNpb24gPSBnbG9iYWwuQnVuLnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoIDwgMyB8fCB2ZXJzaW9uWzBdID09PSAnMCcgJiYgKHZlcnNpb25bMV0gPCAzIHx8IHZlcnNpb25bMV0gPT09ICczJyAmJiB2ZXJzaW9uWzJdID09PSAnMCcpO1xufSkoKTtcblxuLy8gSUU5LSAvIEJ1biAwLjMuMC0gc2V0VGltZW91dCAvIHNldEludGVydmFsIC8gc2V0SW1tZWRpYXRlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjdGltZXJzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzE2MzNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaGFzVGltZUFyZykge1xuICB2YXIgZmlyc3RQYXJhbUluZGV4ID0gaGFzVGltZUFyZyA/IDIgOiAxO1xuICByZXR1cm4gV1JBUCA/IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0IC8qICwgLi4uYXJndW1lbnRzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpID4gZmlyc3RQYXJhbUluZGV4O1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIHBhcmFtcyA9IGJvdW5kQXJncyA/IGFycmF5U2xpY2UoYXJndW1lbnRzLCBmaXJzdFBhcmFtSW5kZXgpIDogW107XG4gICAgdmFyIGNhbGxiYWNrID0gYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHRoaXMsIHBhcmFtcyk7XG4gICAgfSA6IGZuO1xuICAgIHJldHVybiBoYXNUaW1lQXJnID8gc2NoZWR1bGVyKGNhbGxiYWNrLCB0aW1lb3V0KSA6IHNjaGVkdWxlcihjYWxsYmFjayk7XG4gIH0gOiBzY2hlZHVsZXI7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRJbnRlcnZhbCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldEludGVydmFsLCB0cnVlKTtcblxuLy8gQnVuIC8gSUU5LSBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0SW50ZXJ2YWwgIT09IHNldEludGVydmFsIH0sIHtcbiAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG52YXIgc2V0VGltZW91dCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldFRpbWVvdXQsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldFRpbWVvdXQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0dGltZW91dFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0VGltZW91dCAhPT0gc2V0VGltZW91dCB9LCB7XG4gIHNldFRpbWVvdXQ6IHNldFRpbWVvdXRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnRpbWVycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguc2V0VGltZW91dDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWxsYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbGxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50c0xlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmlsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1maWxsJyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbGxcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmlsbDogZmlsbFxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2ZpbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbGwnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5maWxsO1xuIiwgIi8qISBIYW1tZXIuSlMgLSB2Mi4wLjE3LXJjIC0gMjAxOS0xMi0xNlxuICogaHR0cDovL25hdmVyLmdpdGh1Yi5pby9lZ2pzXG4gKlxuICogRm9ya2VkIEJ5IE5hdmVyIGVnanNcbiAqIENvcHlyaWdodCAoYykgaGFtbWVyanNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAqL1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBleHRlbmQgb2JqZWN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIGluIGRlc3Qgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgb25lcyBpbiBzcmMuXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gey4uLk9iamVjdH0gb2JqZWN0c190b19hc3NpZ25cbiAqIEByZXR1cm5zIHtPYmplY3R9IHRhcmdldFxuICovXG52YXIgYXNzaWduO1xuXG5pZiAodHlwZW9mIE9iamVjdC5hc3NpZ24gIT09ICdmdW5jdGlvbicpIHtcbiAgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCkge1xuICAgIGlmICh0YXJnZXQgPT09IHVuZGVmaW5lZCB8fCB0YXJnZXQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHZhciBvdXRwdXQgPSBPYmplY3QodGFyZ2V0KTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBhcmd1bWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2luZGV4XTtcblxuICAgICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkICYmIHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBuZXh0S2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIHtcbiAgICAgICAgICAgIG91dHB1dFtuZXh0S2V5XSA9IHNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9O1xufSBlbHNlIHtcbiAgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbn1cblxudmFyIGFzc2lnbiQxID0gYXNzaWduO1xuXG52YXIgVkVORE9SX1BSRUZJWEVTID0gWycnLCAnd2Via2l0JywgJ01veicsICdNUycsICdtcycsICdvJ107XG52YXIgVEVTVF9FTEVNRU5UID0gdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiID8ge1xuICBzdHlsZToge31cbn0gOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbnZhciBUWVBFX0ZVTkNUSU9OID0gJ2Z1bmN0aW9uJztcbnZhciByb3VuZCA9IE1hdGgucm91bmQsXG4gICAgYWJzID0gTWF0aC5hYnM7XG52YXIgbm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgcHJlZml4ZWQgcHJvcGVydHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICogQHJldHVybnMge1N0cmluZ3xVbmRlZmluZWR9IHByZWZpeGVkXG4gKi9cblxuZnVuY3Rpb24gcHJlZml4ZWQob2JqLCBwcm9wZXJ0eSkge1xuICB2YXIgcHJlZml4O1xuICB2YXIgcHJvcDtcbiAgdmFyIGNhbWVsUHJvcCA9IHByb3BlcnR5WzBdLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zbGljZSgxKTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgVkVORE9SX1BSRUZJWEVTLmxlbmd0aCkge1xuICAgIHByZWZpeCA9IFZFTkRPUl9QUkVGSVhFU1tpXTtcbiAgICBwcm9wID0gcHJlZml4ID8gcHJlZml4ICsgY2FtZWxQcm9wIDogcHJvcGVydHk7XG5cbiAgICBpZiAocHJvcCBpbiBvYmopIHtcbiAgICAgIHJldHVybiBwcm9wO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldy1mdW5jLCBuby1uZXN0ZWQtdGVybmFyeSAqL1xudmFyIHdpbjtcblxuaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgLy8gd2luZG93IGlzIHVuZGVmaW5lZCBpbiBub2RlLmpzXG4gIHdpbiA9IHt9O1xufSBlbHNlIHtcbiAgd2luID0gd2luZG93O1xufVxuXG52YXIgUFJFRklYRURfVE9VQ0hfQUNUSU9OID0gcHJlZml4ZWQoVEVTVF9FTEVNRU5ULnN0eWxlLCAndG91Y2hBY3Rpb24nKTtcbnZhciBOQVRJVkVfVE9VQ0hfQUNUSU9OID0gUFJFRklYRURfVE9VQ0hfQUNUSU9OICE9PSB1bmRlZmluZWQ7XG5mdW5jdGlvbiBnZXRUb3VjaEFjdGlvblByb3BzKCkge1xuICBpZiAoIU5BVElWRV9UT1VDSF9BQ1RJT04pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdG91Y2hNYXAgPSB7fTtcbiAgdmFyIGNzc1N1cHBvcnRzID0gd2luLkNTUyAmJiB3aW4uQ1NTLnN1cHBvcnRzO1xuICBbJ2F1dG8nLCAnbWFuaXB1bGF0aW9uJywgJ3Bhbi15JywgJ3Bhbi14JywgJ3Bhbi14IHBhbi15JywgJ25vbmUnXS5mb3JFYWNoKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAvLyBJZiBjc3Muc3VwcG9ydHMgaXMgbm90IHN1cHBvcnRlZCBidXQgdGhlcmUgaXMgbmF0aXZlIHRvdWNoLWFjdGlvbiBhc3N1bWUgaXQgc3VwcG9ydHNcbiAgICAvLyBhbGwgdmFsdWVzLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBJRSAxMCBhbmQgMTEuXG4gICAgcmV0dXJuIHRvdWNoTWFwW3ZhbF0gPSBjc3NTdXBwb3J0cyA/IHdpbi5DU1Muc3VwcG9ydHMoJ3RvdWNoLWFjdGlvbicsIHZhbCkgOiB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIHRvdWNoTWFwO1xufVxuXG52YXIgVE9VQ0hfQUNUSU9OX0NPTVBVVEUgPSAnY29tcHV0ZSc7XG52YXIgVE9VQ0hfQUNUSU9OX0FVVE8gPSAnYXV0byc7XG52YXIgVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTiA9ICdtYW5pcHVsYXRpb24nOyAvLyBub3QgaW1wbGVtZW50ZWRcblxudmFyIFRPVUNIX0FDVElPTl9OT05FID0gJ25vbmUnO1xudmFyIFRPVUNIX0FDVElPTl9QQU5fWCA9ICdwYW4teCc7XG52YXIgVE9VQ0hfQUNUSU9OX1BBTl9ZID0gJ3Bhbi15JztcbnZhciBUT1VDSF9BQ1RJT05fTUFQID0gZ2V0VG91Y2hBY3Rpb25Qcm9wcygpO1xuXG52YXIgTU9CSUxFX1JFR0VYID0gL21vYmlsZXx0YWJsZXR8aXAoYWR8aG9uZXxvZCl8YW5kcm9pZC9pO1xudmFyIFNVUFBPUlRfVE9VQ0ggPSAnb250b3VjaHN0YXJ0JyBpbiB3aW47XG52YXIgU1VQUE9SVF9QT0lOVEVSX0VWRU5UUyA9IHByZWZpeGVkKHdpbiwgJ1BvaW50ZXJFdmVudCcpICE9PSB1bmRlZmluZWQ7XG52YXIgU1VQUE9SVF9PTkxZX1RPVUNIID0gU1VQUE9SVF9UT1VDSCAmJiBNT0JJTEVfUkVHRVgudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJTlBVVF9UWVBFX1RPVUNIID0gJ3RvdWNoJztcbnZhciBJTlBVVF9UWVBFX1BFTiA9ICdwZW4nO1xudmFyIElOUFVUX1RZUEVfTU9VU0UgPSAnbW91c2UnO1xudmFyIElOUFVUX1RZUEVfS0lORUNUID0gJ2tpbmVjdCc7XG52YXIgQ09NUFVURV9JTlRFUlZBTCA9IDI1O1xudmFyIElOUFVUX1NUQVJUID0gMTtcbnZhciBJTlBVVF9NT1ZFID0gMjtcbnZhciBJTlBVVF9FTkQgPSA0O1xudmFyIElOUFVUX0NBTkNFTCA9IDg7XG52YXIgRElSRUNUSU9OX05PTkUgPSAxO1xudmFyIERJUkVDVElPTl9MRUZUID0gMjtcbnZhciBESVJFQ1RJT05fUklHSFQgPSA0O1xudmFyIERJUkVDVElPTl9VUCA9IDg7XG52YXIgRElSRUNUSU9OX0RPV04gPSAxNjtcbnZhciBESVJFQ1RJT05fSE9SSVpPTlRBTCA9IERJUkVDVElPTl9MRUZUIHwgRElSRUNUSU9OX1JJR0hUO1xudmFyIERJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9VUCB8IERJUkVDVElPTl9ET1dOO1xudmFyIERJUkVDVElPTl9BTEwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTDtcbnZhciBQUk9QU19YWSA9IFsneCcsICd5J107XG52YXIgUFJPUFNfQ0xJRU5UX1hZID0gWydjbGllbnRYJywgJ2NsaWVudFknXTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogd2FsayBvYmplY3RzIGFuZCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICovXG5mdW5jdGlvbiBlYWNoKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgdmFyIGk7XG5cbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAob2JqLmZvckVhY2gpIHtcbiAgICBvYmouZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCk7XG4gIH0gZWxzZSBpZiAob2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IG9iai5sZW5ndGgpIHtcbiAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgICAgaSsrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgaW4gb2JqKSB7XG4gICAgICBvYmouaGFzT3duUHJvcGVydHkoaSkgJiYgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGxldCBhIGJvb2xlYW4gdmFsdWUgYWxzbyBiZSBhIGZ1bmN0aW9uIHRoYXQgbXVzdCByZXR1cm4gYSBib29sZWFuXG4gKiB0aGlzIGZpcnN0IGl0ZW0gaW4gYXJncyB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSB7Qm9vbGVhbnxGdW5jdGlvbn0gdmFsXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnc11cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGJvb2xPckZuKHZhbCwgYXJncykge1xuICBpZiAodHlwZW9mIHZhbCA9PT0gVFlQRV9GVU5DVElPTikge1xuICAgIHJldHVybiB2YWwuYXBwbHkoYXJncyA/IGFyZ3NbMF0gfHwgdW5kZWZpbmVkIDogdW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB2YWw7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNtYWxsIGluZGV4T2Ygd3JhcHBlclxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEByZXR1cm5zIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBpblN0cihzdHIsIGZpbmQpIHtcbiAgcmV0dXJuIHN0ci5pbmRleE9mKGZpbmQpID4gLTE7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdoZW4gdGhlIHRvdWNoQWN0aW9ucyBhcmUgY29sbGVjdGVkIHRoZXkgYXJlIG5vdCBhIHZhbGlkIHZhbHVlLCBzbyB3ZSBuZWVkIHRvIGNsZWFuIHRoaW5ncyB1cC4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFjdGlvbnNcbiAqIEByZXR1cm5zIHsqfVxuICovXG5cbmZ1bmN0aW9uIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMpIHtcbiAgLy8gbm9uZVxuICBpZiAoaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX05PTkUpKSB7XG4gICAgcmV0dXJuIFRPVUNIX0FDVElPTl9OT05FO1xuICB9XG5cbiAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICB2YXIgaGFzUGFuWSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWSk7IC8vIGlmIGJvdGggcGFuLXggYW5kIHBhbi15IGFyZSBzZXQgKGRpZmZlcmVudCByZWNvZ25pemVyc1xuICAvLyBmb3IgZGlmZmVyZW50IGRpcmVjdGlvbnMsIGUuZy4gaG9yaXpvbnRhbCBwYW4gYnV0IHZlcnRpY2FsIHN3aXBlPylcbiAgLy8gd2UgbmVlZCBub25lIChhcyBvdGhlcndpc2Ugd2l0aCBwYW4teCBwYW4teSBjb21iaW5lZCBub25lIG9mIHRoZXNlXG4gIC8vIHJlY29nbml6ZXJzIHdpbGwgd29yaywgc2luY2UgdGhlIGJyb3dzZXIgd291bGQgaGFuZGxlIGFsbCBwYW5uaW5nXG5cbiAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTk9ORTtcbiAgfSAvLyBwYW4teCBPUiBwYW4teVxuXG5cbiAgaWYgKGhhc1BhblggfHwgaGFzUGFuWSkge1xuICAgIHJldHVybiBoYXNQYW5YID8gVE9VQ0hfQUNUSU9OX1BBTl9YIDogVE9VQ0hfQUNUSU9OX1BBTl9ZO1xuICB9IC8vIG1hbmlwdWxhdGlvblxuXG5cbiAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04pKSB7XG4gICAgcmV0dXJuIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT047XG4gIH1cblxuICByZXR1cm4gVE9VQ0hfQUNUSU9OX0FVVE87XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFRvdWNoIEFjdGlvblxuICogc2V0cyB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkgb3IgdXNlcyB0aGUganMgYWx0ZXJuYXRpdmVcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG52YXIgVG91Y2hBY3Rpb24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUb3VjaEFjdGlvbihtYW5hZ2VyLCB2YWx1ZSkge1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5zZXQodmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlIG9uIHRoZSBlbGVtZW50IG9yIGVuYWJsZSB0aGUgcG9seWZpbGxcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFRvdWNoQWN0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gZmluZCBvdXQgdGhlIHRvdWNoLWFjdGlvbiBieSB0aGUgZXZlbnQgaGFuZGxlcnNcbiAgICBpZiAodmFsdWUgPT09IFRPVUNIX0FDVElPTl9DT01QVVRFKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuY29tcHV0ZSgpO1xuICAgIH1cblxuICAgIGlmIChOQVRJVkVfVE9VQ0hfQUNUSU9OICYmIHRoaXMubWFuYWdlci5lbGVtZW50LnN0eWxlICYmIFRPVUNIX0FDVElPTl9NQVBbdmFsdWVdKSB7XG4gICAgICB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZVtQUkVGSVhFRF9UT1VDSF9BQ1RJT05dID0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25zID0gdmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBqdXN0IHJlLXNldCB0aGUgdG91Y2hBY3Rpb24gdmFsdWVcbiAgICovXG5cblxuICBfcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHRoaXMuc2V0KHRoaXMubWFuYWdlci5vcHRpb25zLnRvdWNoQWN0aW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNvbXB1dGUgdGhlIHZhbHVlIGZvciB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkgYmFzZWQgb24gdGhlIHJlY29nbml6ZXIncyBzZXR0aW5nc1xuICAgKiBAcmV0dXJucyB7U3RyaW5nfSB2YWx1ZVxuICAgKi9cblxuXG4gIF9wcm90by5jb21wdXRlID0gZnVuY3Rpb24gY29tcHV0ZSgpIHtcbiAgICB2YXIgYWN0aW9ucyA9IFtdO1xuICAgIGVhY2godGhpcy5tYW5hZ2VyLnJlY29nbml6ZXJzLCBmdW5jdGlvbiAocmVjb2duaXplcikge1xuICAgICAgaWYgKGJvb2xPckZuKHJlY29nbml6ZXIub3B0aW9ucy5lbmFibGUsIFtyZWNvZ25pemVyXSkpIHtcbiAgICAgICAgYWN0aW9ucyA9IGFjdGlvbnMuY29uY2F0KHJlY29nbml6ZXIuZ2V0VG91Y2hBY3Rpb24oKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMuam9pbignICcpKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiBlYWNoIGlucHV0IGN5Y2xlIGFuZCBwcm92aWRlcyB0aGUgcHJldmVudGluZyBvZiB0aGUgYnJvd3NlciBiZWhhdmlvclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8ucHJldmVudERlZmF1bHRzID0gZnVuY3Rpb24gcHJldmVudERlZmF1bHRzKGlucHV0KSB7XG4gICAgdmFyIHNyY0V2ZW50ID0gaW5wdXQuc3JjRXZlbnQ7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0Lm9mZnNldERpcmVjdGlvbjsgLy8gaWYgdGhlIHRvdWNoIGFjdGlvbiBkaWQgcHJldmVudGVkIG9uY2UgdGhpcyBzZXNzaW9uXG5cbiAgICBpZiAodGhpcy5tYW5hZ2VyLnNlc3Npb24ucHJldmVudGVkKSB7XG4gICAgICBzcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgIHZhciBoYXNOb25lID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX05PTkUpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgICB2YXIgaGFzUGFuWSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWSkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX1BBTl9ZXTtcbiAgICB2YXIgaGFzUGFuWCA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWCkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX1BBTl9YXTtcblxuICAgIGlmIChoYXNOb25lKSB7XG4gICAgICAvLyBkbyBub3QgcHJldmVudCBkZWZhdWx0cyBpZiB0aGlzIGlzIGEgdGFwIGdlc3R1cmVcbiAgICAgIHZhciBpc1RhcFBvaW50ZXIgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IDE7XG4gICAgICB2YXIgaXNUYXBNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgMjtcbiAgICAgIHZhciBpc1RhcFRvdWNoVGltZSA9IGlucHV0LmRlbHRhVGltZSA8IDI1MDtcblxuICAgICAgaWYgKGlzVGFwUG9pbnRlciAmJiBpc1RhcE1vdmVtZW50ICYmIGlzVGFwVG91Y2hUaW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgICAvLyBgcGFuLXggcGFuLXlgIG1lYW5zIGJyb3dzZXIgaGFuZGxlcyBhbGwgc2Nyb2xsaW5nL3Bhbm5pbmcsIGRvIG5vdCBwcmV2ZW50XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGhhc05vbmUgfHwgaGFzUGFuWSAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8fCBoYXNQYW5YICYmIGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJldmVudFNyYyhzcmNFdmVudCk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FsbCBwcmV2ZW50RGVmYXVsdCB0byBwcmV2ZW50IHRoZSBicm93c2VyJ3MgZGVmYXVsdCBiZWhhdmlvciAoc2Nyb2xsaW5nIGluIG1vc3QgY2FzZXMpXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzcmNFdmVudFxuICAgKi9cblxuXG4gIF9wcm90by5wcmV2ZW50U3JjID0gZnVuY3Rpb24gcHJldmVudFNyYyhzcmNFdmVudCkge1xuICAgIHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCA9IHRydWU7XG4gICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfTtcblxuICByZXR1cm4gVG91Y2hBY3Rpb247XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGZpbmQgaWYgYSBub2RlIGlzIGluIHRoZSBnaXZlbiBwYXJlbnRcbiAqIEBtZXRob2QgaGFzUGFyZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYXJlbnRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGhhc1BhcmVudChub2RlLCBwYXJlbnQpIHtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZSA9PT0gcGFyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIGNlbnRlciBvZiBhbGwgdGhlIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBwb2ludGVyc1xuICogQHJldHVybiB7T2JqZWN0fSBjZW50ZXIgY29udGFpbnMgYHhgIGFuZCBgeWAgcHJvcGVydGllc1xuICovXG5cbmZ1bmN0aW9uIGdldENlbnRlcihwb2ludGVycykge1xuICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIG5vIG5lZWQgdG8gbG9vcCB3aGVuIG9ubHkgb25lIHRvdWNoXG5cbiAgaWYgKHBvaW50ZXJzTGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFgpLFxuICAgICAgeTogcm91bmQocG9pbnRlcnNbMF0uY2xpZW50WSlcbiAgICB9O1xuICB9XG5cbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IHBvaW50ZXJzTGVuZ3RoKSB7XG4gICAgeCArPSBwb2ludGVyc1tpXS5jbGllbnRYO1xuICAgIHkgKz0gcG9pbnRlcnNbaV0uY2xpZW50WTtcbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKHggLyBwb2ludGVyc0xlbmd0aCksXG4gICAgeTogcm91bmQoeSAvIHBvaW50ZXJzTGVuZ3RoKVxuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjcmVhdGUgYSBzaW1wbGUgY2xvbmUgZnJvbSB0aGUgaW5wdXQgdXNlZCBmb3Igc3RvcmFnZSBvZiBmaXJzdElucHV0IGFuZCBmaXJzdE11bHRpcGxlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IGNsb25lZElucHV0RGF0YVxuICovXG5cbmZ1bmN0aW9uIHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KSB7XG4gIC8vIG1ha2UgYSBzaW1wbGUgY29weSBvZiB0aGUgcG9pbnRlcnMgYmVjYXVzZSB3ZSB3aWxsIGdldCBhIHJlZmVyZW5jZSBpZiB3ZSBkb24ndFxuICAvLyB3ZSBvbmx5IG5lZWQgY2xpZW50WFkgZm9yIHRoZSBjYWxjdWxhdGlvbnNcbiAgdmFyIHBvaW50ZXJzID0gW107XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgIHBvaW50ZXJzW2ldID0ge1xuICAgICAgY2xpZW50WDogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WCksXG4gICAgICBjbGllbnRZOiByb3VuZChpbnB1dC5wb2ludGVyc1tpXS5jbGllbnRZKVxuICAgIH07XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0aW1lU3RhbXA6IG5vdygpLFxuICAgIHBvaW50ZXJzOiBwb2ludGVycyxcbiAgICBjZW50ZXI6IGdldENlbnRlcihwb2ludGVycyksXG4gICAgZGVsdGFYOiBpbnB1dC5kZWx0YVgsXG4gICAgZGVsdGFZOiBpbnB1dC5kZWx0YVlcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBhYnNvbHV0ZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMSB7eCwgeX1cbiAqIEBwYXJhbSB7T2JqZWN0fSBwMiB7eCwgeX1cbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAqIEByZXR1cm4ge051bWJlcn0gZGlzdGFuY2VcbiAqL1xuXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICBwcm9wcyA9IFBST1BTX1hZO1xuICB9XG5cbiAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV07XG4gIHZhciB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICByZXR1cm4gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIGFuZ2xlIGJldHdlZW4gdHdvIGNvb3JkaW5hdGVzXG4gKiBAcGFyYW0ge09iamVjdH0gcDFcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMlxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzXSBjb250YWluaW5nIHggYW5kIHkga2V5c1xuICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICovXG5cbmZ1bmN0aW9uIGdldEFuZ2xlKHAxLCBwMiwgcHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHByb3BzID0gUFJPUFNfWFk7XG4gIH1cblxuICB2YXIgeCA9IHAyW3Byb3BzWzBdXSAtIHAxW3Byb3BzWzBdXTtcbiAgdmFyIHkgPSBwMltwcm9wc1sxXV0gLSBwMVtwcm9wc1sxXV07XG4gIHJldHVybiBNYXRoLmF0YW4yKHksIHgpICogMTgwIC8gTWF0aC5QSTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBkaXJlY3Rpb24gYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge051bWJlcn0gZGlyZWN0aW9uXG4gKi9cblxuZnVuY3Rpb24gZ2V0RGlyZWN0aW9uKHgsIHkpIHtcbiAgaWYgKHggPT09IHkpIHtcbiAgICByZXR1cm4gRElSRUNUSU9OX05PTkU7XG4gIH1cblxuICBpZiAoYWJzKHgpID49IGFicyh5KSkge1xuICAgIHJldHVybiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICB9XG5cbiAgcmV0dXJuIHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KSB7XG4gIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXI7IC8vIGxldCB7IG9mZnNldERlbHRhOm9mZnNldCA9IHt9LCBwcmV2RGVsdGEgPSB7fSwgcHJldklucHV0ID0ge30gfSA9IHNlc3Npb247XG4gIC8vIGpzY3MgdGhyb3dpbmcgZXJyb3Igb24gZGVmYWx1dCBkZXN0cnVjdHVyZWQgdmFsdWVzIGFuZCB3aXRob3V0IGRlZmF1bHRzIHRlc3RzIGZhaWxcblxuICB2YXIgb2Zmc2V0ID0gc2Vzc2lvbi5vZmZzZXREZWx0YSB8fCB7fTtcbiAgdmFyIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhIHx8IHt9O1xuICB2YXIgcHJldklucHV0ID0gc2Vzc2lvbi5wcmV2SW5wdXQgfHwge307XG5cbiAgaWYgKGlucHV0LmV2ZW50VHlwZSA9PT0gSU5QVVRfU1RBUlQgfHwgcHJldklucHV0LmV2ZW50VHlwZSA9PT0gSU5QVVRfRU5EKSB7XG4gICAgcHJldkRlbHRhID0gc2Vzc2lvbi5wcmV2RGVsdGEgPSB7XG4gICAgICB4OiBwcmV2SW5wdXQuZGVsdGFYIHx8IDAsXG4gICAgICB5OiBwcmV2SW5wdXQuZGVsdGFZIHx8IDBcbiAgICB9O1xuICAgIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgPSB7XG4gICAgICB4OiBjZW50ZXIueCxcbiAgICAgIHk6IGNlbnRlci55XG4gICAgfTtcbiAgfVxuXG4gIGlucHV0LmRlbHRhWCA9IHByZXZEZWx0YS54ICsgKGNlbnRlci54IC0gb2Zmc2V0LngpO1xuICBpbnB1dC5kZWx0YVkgPSBwcmV2RGVsdGEueSArIChjZW50ZXIueSAtIG9mZnNldC55KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSB2ZWxvY2l0eSBiZXR3ZWVuIHR3byBwb2ludHMuIHVuaXQgaXMgaW4gcHggcGVyIG1zLlxuICogQHBhcmFtIHtOdW1iZXJ9IGRlbHRhVGltZVxuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtPYmplY3R9IHZlbG9jaXR5IGB4YCBhbmQgYHlgXG4gKi9cbmZ1bmN0aW9uIGdldFZlbG9jaXR5KGRlbHRhVGltZSwgeCwgeSkge1xuICByZXR1cm4ge1xuICAgIHg6IHggLyBkZWx0YVRpbWUgfHwgMCxcbiAgICB5OiB5IC8gZGVsdGFUaW1lIHx8IDBcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBzY2FsZSBmYWN0b3IgYmV0d2VlbiB0d28gcG9pbnRlcnNldHNcbiAqIG5vIHNjYWxlIGlzIDEsIGFuZCBnb2VzIGRvd24gdG8gMCB3aGVuIHBpbmNoZWQgdG9nZXRoZXIsIGFuZCBiaWdnZXIgd2hlbiBwaW5jaGVkIG91dFxuICogQHBhcmFtIHtBcnJheX0gc3RhcnQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IGVuZCBhcnJheSBvZiBwb2ludGVyc1xuICogQHJldHVybiB7TnVtYmVyfSBzY2FsZVxuICovXG5cbmZ1bmN0aW9uIGdldFNjYWxlKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGdldERpc3RhbmNlKGVuZFswXSwgZW5kWzFdLCBQUk9QU19DTElFTlRfWFkpIC8gZ2V0RGlzdGFuY2Uoc3RhcnRbMF0sIHN0YXJ0WzFdLCBQUk9QU19DTElFTlRfWFkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIHJvdGF0aW9uIGRlZ3JlZXMgYmV0d2VlbiB0d28gcG9pbnRlcnNldHNcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gcm90YXRpb25cbiAqL1xuXG5mdW5jdGlvbiBnZXRSb3RhdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBnZXRBbmdsZShlbmRbMV0sIGVuZFswXSwgUFJPUFNfQ0xJRU5UX1hZKSArIGdldEFuZ2xlKHN0YXJ0WzFdLCBzdGFydFswXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdmVsb2NpdHkgaXMgY2FsY3VsYXRlZCBldmVyeSB4IG1zXG4gKiBAcGFyYW0ge09iamVjdH0gc2Vzc2lvblxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cblxuZnVuY3Rpb24gY29tcHV0ZUludGVydmFsSW5wdXREYXRhKHNlc3Npb24sIGlucHV0KSB7XG4gIHZhciBsYXN0ID0gc2Vzc2lvbi5sYXN0SW50ZXJ2YWwgfHwgaW5wdXQ7XG4gIHZhciBkZWx0YVRpbWUgPSBpbnB1dC50aW1lU3RhbXAgLSBsYXN0LnRpbWVTdGFtcDtcbiAgdmFyIHZlbG9jaXR5O1xuICB2YXIgdmVsb2NpdHlYO1xuICB2YXIgdmVsb2NpdHlZO1xuICB2YXIgZGlyZWN0aW9uO1xuXG4gIGlmIChpbnB1dC5ldmVudFR5cGUgIT09IElOUFVUX0NBTkNFTCAmJiAoZGVsdGFUaW1lID4gQ09NUFVURV9JTlRFUlZBTCB8fCBsYXN0LnZlbG9jaXR5ID09PSB1bmRlZmluZWQpKSB7XG4gICAgdmFyIGRlbHRhWCA9IGlucHV0LmRlbHRhWCAtIGxhc3QuZGVsdGFYO1xuICAgIHZhciBkZWx0YVkgPSBpbnB1dC5kZWx0YVkgLSBsYXN0LmRlbHRhWTtcbiAgICB2YXIgdiA9IGdldFZlbG9jaXR5KGRlbHRhVGltZSwgZGVsdGFYLCBkZWx0YVkpO1xuICAgIHZlbG9jaXR5WCA9IHYueDtcbiAgICB2ZWxvY2l0eVkgPSB2Lnk7XG4gICAgdmVsb2NpdHkgPSBhYnModi54KSA+IGFicyh2LnkpID8gdi54IDogdi55O1xuICAgIGRpcmVjdGlvbiA9IGdldERpcmVjdGlvbihkZWx0YVgsIGRlbHRhWSk7XG4gICAgc2Vzc2lvbi5sYXN0SW50ZXJ2YWwgPSBpbnB1dDtcbiAgfSBlbHNlIHtcbiAgICAvLyB1c2UgbGF0ZXN0IHZlbG9jaXR5IGluZm8gaWYgaXQgZG9lc24ndCBvdmVydGFrZSBhIG1pbmltdW0gcGVyaW9kXG4gICAgdmVsb2NpdHkgPSBsYXN0LnZlbG9jaXR5O1xuICAgIHZlbG9jaXR5WCA9IGxhc3QudmVsb2NpdHlYO1xuICAgIHZlbG9jaXR5WSA9IGxhc3QudmVsb2NpdHlZO1xuICAgIGRpcmVjdGlvbiA9IGxhc3QuZGlyZWN0aW9uO1xuICB9XG5cbiAgaW5wdXQudmVsb2NpdHkgPSB2ZWxvY2l0eTtcbiAgaW5wdXQudmVsb2NpdHlYID0gdmVsb2NpdHlYO1xuICBpbnB1dC52ZWxvY2l0eVkgPSB2ZWxvY2l0eVk7XG4gIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbn1cblxuLyoqXG4qIEBwcml2YXRlXG4gKiBleHRlbmQgdGhlIGRhdGEgd2l0aCBzb21lIHVzYWJsZSBwcm9wZXJ0aWVzIGxpa2Ugc2NhbGUsIHJvdGF0ZSwgdmVsb2NpdHkgZXRjXG4gKiBAcGFyYW0ge09iamVjdH0gbWFuYWdlclxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cblxuZnVuY3Rpb24gY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCkge1xuICB2YXIgc2Vzc2lvbiA9IG1hbmFnZXIuc2Vzc2lvbjtcbiAgdmFyIHBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnM7XG4gIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDsgLy8gc3RvcmUgdGhlIGZpcnN0IGlucHV0IHRvIGNhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYW5kIGRpcmVjdGlvblxuXG4gIGlmICghc2Vzc2lvbi5maXJzdElucHV0KSB7XG4gICAgc2Vzc2lvbi5maXJzdElucHV0ID0gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpO1xuICB9IC8vIHRvIGNvbXB1dGUgc2NhbGUgYW5kIHJvdGF0aW9uIHdlIG5lZWQgdG8gc3RvcmUgdGhlIG11bHRpcGxlIHRvdWNoZXNcblxuXG4gIGlmIChwb2ludGVyc0xlbmd0aCA+IDEgJiYgIXNlc3Npb24uZmlyc3RNdWx0aXBsZSkge1xuICAgIHNlc3Npb24uZmlyc3RNdWx0aXBsZSA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgfSBlbHNlIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgIHNlc3Npb24uZmlyc3RNdWx0aXBsZSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGZpcnN0SW5wdXQgPSBzZXNzaW9uLmZpcnN0SW5wdXQsXG4gICAgICBmaXJzdE11bHRpcGxlID0gc2Vzc2lvbi5maXJzdE11bHRpcGxlO1xuICB2YXIgb2Zmc2V0Q2VudGVyID0gZmlyc3RNdWx0aXBsZSA/IGZpcnN0TXVsdGlwbGUuY2VudGVyIDogZmlyc3RJbnB1dC5jZW50ZXI7XG4gIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXIgPSBnZXRDZW50ZXIocG9pbnRlcnMpO1xuICBpbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgaW5wdXQuZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gZmlyc3RJbnB1dC50aW1lU3RhbXA7XG4gIGlucHV0LmFuZ2xlID0gZ2V0QW5nbGUob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICBpbnB1dC5kaXN0YW5jZSA9IGdldERpc3RhbmNlKG9mZnNldENlbnRlciwgY2VudGVyKTtcbiAgY29tcHV0ZURlbHRhWFkoc2Vzc2lvbiwgaW5wdXQpO1xuICBpbnB1dC5vZmZzZXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICB2YXIgb3ZlcmFsbFZlbG9jaXR5ID0gZ2V0VmVsb2NpdHkoaW5wdXQuZGVsdGFUaW1lLCBpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVggPSBvdmVyYWxsVmVsb2NpdHkueDtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5WSA9IG92ZXJhbGxWZWxvY2l0eS55O1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHkgPSBhYnMob3ZlcmFsbFZlbG9jaXR5LngpID4gYWJzKG92ZXJhbGxWZWxvY2l0eS55KSA/IG92ZXJhbGxWZWxvY2l0eS54IDogb3ZlcmFsbFZlbG9jaXR5Lnk7XG4gIGlucHV0LnNjYWxlID0gZmlyc3RNdWx0aXBsZSA/IGdldFNjYWxlKGZpcnN0TXVsdGlwbGUucG9pbnRlcnMsIHBvaW50ZXJzKSA6IDE7XG4gIGlucHV0LnJvdGF0aW9uID0gZmlyc3RNdWx0aXBsZSA/IGdldFJvdGF0aW9uKGZpcnN0TXVsdGlwbGUucG9pbnRlcnMsIHBvaW50ZXJzKSA6IDA7XG4gIGlucHV0Lm1heFBvaW50ZXJzID0gIXNlc3Npb24ucHJldklucHV0ID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogaW5wdXQucG9pbnRlcnMubGVuZ3RoID4gc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnMgPyBpbnB1dC5wb2ludGVycy5sZW5ndGggOiBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycztcbiAgY29tcHV0ZUludGVydmFsSW5wdXREYXRhKHNlc3Npb24sIGlucHV0KTsgLy8gZmluZCB0aGUgY29ycmVjdCB0YXJnZXRcblxuICB2YXIgdGFyZ2V0ID0gbWFuYWdlci5lbGVtZW50O1xuICB2YXIgc3JjRXZlbnQgPSBpbnB1dC5zcmNFdmVudDtcbiAgdmFyIHNyY0V2ZW50VGFyZ2V0O1xuXG4gIGlmIChzcmNFdmVudC5jb21wb3NlZFBhdGgpIHtcbiAgICBzcmNFdmVudFRhcmdldCA9IHNyY0V2ZW50LmNvbXBvc2VkUGF0aCgpWzBdO1xuICB9IGVsc2UgaWYgKHNyY0V2ZW50LnBhdGgpIHtcbiAgICBzcmNFdmVudFRhcmdldCA9IHNyY0V2ZW50LnBhdGhbMF07XG4gIH0gZWxzZSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC50YXJnZXQ7XG4gIH1cblxuICBpZiAoaGFzUGFyZW50KHNyY0V2ZW50VGFyZ2V0LCB0YXJnZXQpKSB7XG4gICAgdGFyZ2V0ID0gc3JjRXZlbnRUYXJnZXQ7XG4gIH1cblxuICBpbnB1dC50YXJnZXQgPSB0YXJnZXQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGhhbmRsZSBpbnB1dCBldmVudHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50VHlwZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cblxuZnVuY3Rpb24gaW5wdXRIYW5kbGVyKG1hbmFnZXIsIGV2ZW50VHlwZSwgaW5wdXQpIHtcbiAgdmFyIHBvaW50ZXJzTGVuID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoO1xuICB2YXIgY2hhbmdlZFBvaW50ZXJzTGVuID0gaW5wdXQuY2hhbmdlZFBvaW50ZXJzLmxlbmd0aDtcbiAgdmFyIGlzRmlyc3QgPSBldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMDtcbiAgdmFyIGlzRmluYWwgPSBldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiBwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMDtcbiAgaW5wdXQuaXNGaXJzdCA9ICEhaXNGaXJzdDtcbiAgaW5wdXQuaXNGaW5hbCA9ICEhaXNGaW5hbDtcblxuICBpZiAoaXNGaXJzdCkge1xuICAgIG1hbmFnZXIuc2Vzc2lvbiA9IHt9O1xuICB9IC8vIHNvdXJjZSBldmVudCBpcyB0aGUgbm9ybWFsaXplZCB2YWx1ZSBvZiB0aGUgZG9tRXZlbnRzXG4gIC8vIGxpa2UgJ3RvdWNoc3RhcnQsIG1vdXNldXAsIHBvaW50ZXJkb3duJ1xuXG5cbiAgaW5wdXQuZXZlbnRUeXBlID0gZXZlbnRUeXBlOyAvLyBjb21wdXRlIHNjYWxlLCByb3RhdGlvbiBldGNcblxuICBjb21wdXRlSW5wdXREYXRhKG1hbmFnZXIsIGlucHV0KTsgLy8gZW1pdCBzZWNyZXQgZXZlbnRcblxuICBtYW5hZ2VyLmVtaXQoJ2hhbW1lci5pbnB1dCcsIGlucHV0KTtcbiAgbWFuYWdlci5yZWNvZ25pemUoaW5wdXQpO1xuICBtYW5hZ2VyLnNlc3Npb24ucHJldklucHV0ID0gaW5wdXQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNwbGl0IHN0cmluZyBvbiB3aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7QXJyYXl9IHdvcmRzXG4gKi9cbmZ1bmN0aW9uIHNwbGl0U3RyKHN0cikge1xuICByZXR1cm4gc3RyLnRyaW0oKS5zcGxpdCgvXFxzKy9nKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogYWRkRXZlbnRMaXN0ZW5lciB3aXRoIG11bHRpcGxlIGV2ZW50cyBhdCBvbmNlXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICovXG5cbmZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXJzKHRhcmdldCwgdHlwZXMsIGhhbmRsZXIpIHtcbiAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogcmVtb3ZlRXZlbnRMaXN0ZW5lciB3aXRoIG11bHRpcGxlIGV2ZW50cyBhdCBvbmNlXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICovXG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRhcmdldCwgdHlwZXMsIGhhbmRsZXIpIHtcbiAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSB3aW5kb3cgb2JqZWN0IG9mIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtEb2N1bWVudFZpZXd8V2luZG93fVxuICovXG5mdW5jdGlvbiBnZXRXaW5kb3dGb3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGRvYyA9IGVsZW1lbnQub3duZXJEb2N1bWVudCB8fCBlbGVtZW50O1xuICByZXR1cm4gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3cgfHwgd2luZG93O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjcmVhdGUgbmV3IGlucHV0IHR5cGUgbWFuYWdlclxuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0lucHV0fVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gSW5wdXQobWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5lbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuICAgIHRoaXMudGFyZ2V0ID0gbWFuYWdlci5vcHRpb25zLmlucHV0VGFyZ2V0OyAvLyBzbWFsbGVyIHdyYXBwZXIgYXJvdW5kIHRoZSBoYW5kbGVyLCBmb3IgdGhlIHNjb3BlIGFuZCB0aGUgZW5hYmxlZCBzdGF0ZSBvZiB0aGUgbWFuYWdlcixcbiAgICAvLyBzbyB3aGVuIGRpc2FibGVkIHRoZSBpbnB1dCBldmVudHMgYXJlIGNvbXBsZXRlbHkgYnlwYXNzZWQuXG5cbiAgICB0aGlzLmRvbUhhbmRsZXIgPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgIGlmIChib29sT3JGbihtYW5hZ2VyLm9wdGlvbnMuZW5hYmxlLCBbbWFuYWdlcl0pKSB7XG4gICAgICAgIHNlbGYuaGFuZGxlcihldik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuaW5pdCgpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzaG91bGQgaGFuZGxlIHRoZSBpbnB1dEV2ZW50IGRhdGEgYW5kIHRyaWdnZXIgdGhlIGNhbGxiYWNrXG4gICAqIEB2aXJ0dWFsXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoKSB7fTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGJpbmQgdGhlIGV2ZW50c1xuICAgKi9cblxuXG4gIF9wcm90by5pbml0ID0gZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB0aGlzLmV2RWwgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldlRhcmdldCAmJiBhZGRFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2V2luICYmIGFkZEV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHVuYmluZCB0aGUgZXZlbnRzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuZXZFbCAmJiByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLmVsZW1lbnQsIHRoaXMuZXZFbCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2VGFyZ2V0ICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRoaXMudGFyZ2V0LCB0aGlzLmV2VGFyZ2V0LCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZXaW4gJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICB9O1xuXG4gIHJldHVybiBJbnB1dDtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZmluZCBpZiBhIGFycmF5IGNvbnRhaW5zIHRoZSBvYmplY3QgdXNpbmcgaW5kZXhPZiBvciBhIHNpbXBsZSBwb2x5RmlsbFxuICogQHBhcmFtIHtBcnJheX0gc3JjXG4gKiBAcGFyYW0ge1N0cmluZ30gZmluZFxuICogQHBhcmFtIHtTdHJpbmd9IFtmaW5kQnlLZXldXG4gKiBAcmV0dXJuIHtCb29sZWFufE51bWJlcn0gZmFsc2Ugd2hlbiBub3QgZm91bmQsIG9yIHRoZSBpbmRleFxuICovXG5mdW5jdGlvbiBpbkFycmF5KHNyYywgZmluZCwgZmluZEJ5S2V5KSB7XG4gIGlmIChzcmMuaW5kZXhPZiAmJiAhZmluZEJ5S2V5KSB7XG4gICAgcmV0dXJuIHNyYy5pbmRleE9mKGZpbmQpO1xuICB9IGVsc2Uge1xuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgICAgaWYgKGZpbmRCeUtleSAmJiBzcmNbaV1bZmluZEJ5S2V5XSA9PSBmaW5kIHx8ICFmaW5kQnlLZXkgJiYgc3JjW2ldID09PSBmaW5kKSB7XG4gICAgICAgIC8vIGRvIG5vdCB1c2UgPT09IGhlcmUsIHRlc3QgZmFpbHNcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG4gIH1cbn1cblxudmFyIFBPSU5URVJfSU5QVVRfTUFQID0ge1xuICBwb2ludGVyZG93bjogSU5QVVRfU1RBUlQsXG4gIHBvaW50ZXJtb3ZlOiBJTlBVVF9NT1ZFLFxuICBwb2ludGVydXA6IElOUFVUX0VORCxcbiAgcG9pbnRlcmNhbmNlbDogSU5QVVRfQ0FOQ0VMLFxuICBwb2ludGVyb3V0OiBJTlBVVF9DQU5DRUxcbn07IC8vIGluIElFMTAgdGhlIHBvaW50ZXIgdHlwZXMgaXMgZGVmaW5lZCBhcyBhbiBlbnVtXG5cbnZhciBJRTEwX1BPSU5URVJfVFlQRV9FTlVNID0ge1xuICAyOiBJTlBVVF9UWVBFX1RPVUNILFxuICAzOiBJTlBVVF9UWVBFX1BFTixcbiAgNDogSU5QVVRfVFlQRV9NT1VTRSxcbiAgNTogSU5QVVRfVFlQRV9LSU5FQ1QgLy8gc2VlIGh0dHBzOi8vdHdpdHRlci5jb20vamFjb2Jyb3NzaS9zdGF0dXMvNDgwNTk2NDM4NDg5ODkwODE2XG5cbn07XG52YXIgUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyA9ICdwb2ludGVyZG93bic7XG52YXIgUE9JTlRFUl9XSU5ET1dfRVZFTlRTID0gJ3BvaW50ZXJtb3ZlIHBvaW50ZXJ1cCBwb2ludGVyY2FuY2VsJzsgLy8gSUUxMCBoYXMgcHJlZml4ZWQgc3VwcG9ydCwgYW5kIGNhc2Utc2Vuc2l0aXZlXG5cbmlmICh3aW4uTVNQb2ludGVyRXZlbnQgJiYgIXdpbi5Qb2ludGVyRXZlbnQpIHtcbiAgUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyA9ICdNU1BvaW50ZXJEb3duJztcbiAgUE9JTlRFUl9XSU5ET1dfRVZFTlRTID0gJ01TUG9pbnRlck1vdmUgTVNQb2ludGVyVXAgTVNQb2ludGVyQ2FuY2VsJztcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqIFBvaW50ZXIgZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxuXG52YXIgUG9pbnRlckV2ZW50SW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShQb2ludGVyRXZlbnRJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBQb2ludGVyRXZlbnRJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBQb2ludGVyRXZlbnRJbnB1dC5wcm90b3R5cGU7XG4gICAgcHJvdG8uZXZFbCA9IFBPSU5URVJfRUxFTUVOVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBQT0lOVEVSX1dJTkRPV19FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0b3JlID0gX3RoaXMubWFuYWdlci5zZXNzaW9uLnBvaW50ZXJFdmVudHMgPSBbXTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhbmRsZSBtb3VzZSBldmVudHNcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFBvaW50ZXJFdmVudElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgc3RvcmUgPSB0aGlzLnN0b3JlO1xuICAgIHZhciByZW1vdmVQb2ludGVyID0gZmFsc2U7XG4gICAgdmFyIGV2ZW50VHlwZU5vcm1hbGl6ZWQgPSBldi50eXBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnbXMnLCAnJyk7XG4gICAgdmFyIGV2ZW50VHlwZSA9IFBPSU5URVJfSU5QVVRfTUFQW2V2ZW50VHlwZU5vcm1hbGl6ZWRdO1xuICAgIHZhciBwb2ludGVyVHlwZSA9IElFMTBfUE9JTlRFUl9UWVBFX0VOVU1bZXYucG9pbnRlclR5cGVdIHx8IGV2LnBvaW50ZXJUeXBlO1xuICAgIHZhciBpc1RvdWNoID0gcG9pbnRlclR5cGUgPT09IElOUFVUX1RZUEVfVE9VQ0g7IC8vIGdldCBpbmRleCBvZiB0aGUgZXZlbnQgaW4gdGhlIHN0b3JlXG5cbiAgICB2YXIgc3RvcmVJbmRleCA9IGluQXJyYXkoc3RvcmUsIGV2LnBvaW50ZXJJZCwgJ3BvaW50ZXJJZCcpOyAvLyBzdGFydCBhbmQgbW91c2UgbXVzdCBiZSBkb3duXG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgKGV2LmJ1dHRvbiA9PT0gMCB8fCBpc1RvdWNoKSkge1xuICAgICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICAgIHN0b3JlLnB1c2goZXYpO1xuICAgICAgICBzdG9yZUluZGV4ID0gc3RvcmUubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICByZW1vdmVQb2ludGVyID0gdHJ1ZTtcbiAgICB9IC8vIGl0IG5vdCBmb3VuZCwgc28gdGhlIHBvaW50ZXIgaGFzbid0IGJlZW4gZG93biAoc28gaXQncyBwcm9iYWJseSBhIGhvdmVyKVxuXG5cbiAgICBpZiAoc3RvcmVJbmRleCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHVwZGF0ZSB0aGUgZXZlbnQgaW4gdGhlIHN0b3JlXG5cblxuICAgIHN0b3JlW3N0b3JlSW5kZXhdID0gZXY7XG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIGV2ZW50VHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHN0b3JlLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgcG9pbnRlclR5cGU6IHBvaW50ZXJUeXBlLFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG5cbiAgICBpZiAocmVtb3ZlUG9pbnRlcikge1xuICAgICAgLy8gcmVtb3ZlIGZyb20gdGhlIHN0b3JlXG4gICAgICBzdG9yZS5zcGxpY2Uoc3RvcmVJbmRleCwgMSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBQb2ludGVyRXZlbnRJbnB1dDtcbn0oSW5wdXQpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjb252ZXJ0IGFycmF5LWxpa2Ugb2JqZWN0cyB0byByZWFsIGFycmF5c1xuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiB0b0FycmF5KG9iaikge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwob2JqLCAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdW5pcXVlIGFycmF5IHdpdGggb2JqZWN0cyBiYXNlZCBvbiBhIGtleSAobGlrZSAnaWQnKSBvciBqdXN0IGJ5IHRoZSBhcnJheSdzIHZhbHVlXG4gKiBAcGFyYW0ge0FycmF5fSBzcmMgW3tpZDoxfSx7aWQ6Mn0se2lkOjF9XVxuICogQHBhcmFtIHtTdHJpbmd9IFtrZXldXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtzb3J0PUZhbHNlXVxuICogQHJldHVybnMge0FycmF5fSBbe2lkOjF9LHtpZDoyfV1cbiAqL1xuXG5mdW5jdGlvbiB1bmlxdWVBcnJheShzcmMsIGtleSwgc29ydCkge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICB2YXIgdmFsdWVzID0gW107XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICB2YXIgdmFsID0ga2V5ID8gc3JjW2ldW2tleV0gOiBzcmNbaV07XG5cbiAgICBpZiAoaW5BcnJheSh2YWx1ZXMsIHZhbCkgPCAwKSB7XG4gICAgICByZXN1bHRzLnB1c2goc3JjW2ldKTtcbiAgICB9XG5cbiAgICB2YWx1ZXNbaV0gPSB2YWw7XG4gICAgaSsrO1xuICB9XG5cbiAgaWYgKHNvcnQpIHtcbiAgICBpZiAoIWtleSkge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhW2tleV0gPiBiW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxudmFyIFRPVUNIX0lOUFVUX01BUCA9IHtcbiAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gIHRvdWNobW92ZTogSU5QVVRfTU9WRSxcbiAgdG91Y2hlbmQ6IElOUFVUX0VORCxcbiAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcbnZhciBUT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcbi8qKlxuICogQHByaXZhdGVcbiAqIE11bHRpLXVzZXIgdG91Y2ggZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIFRvdWNoSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShUb3VjaElucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIFRvdWNoSW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgVG91Y2hJbnB1dC5wcm90b3R5cGUuZXZUYXJnZXQgPSBUT1VDSF9UQVJHRVRfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy50YXJnZXRJZHMgPSB7fTsgLy8gdGhpcy5ldlRhcmdldCA9IFRPVUNIX1RBUkdFVF9FVkVOVFM7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVG91Y2hJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHR5cGUgPSBUT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07XG4gICAgdmFyIHRvdWNoZXMgPSBnZXRUb3VjaGVzLmNhbGwodGhpcywgZXYsIHR5cGUpO1xuXG4gICAgaWYgKCF0b3VjaGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIHR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiB0b3VjaGVzWzFdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gVG91Y2hJbnB1dDtcbn0oSW5wdXQpO1xuXG5mdW5jdGlvbiBnZXRUb3VjaGVzKGV2LCB0eXBlKSB7XG4gIHZhciBhbGxUb3VjaGVzID0gdG9BcnJheShldi50b3VjaGVzKTtcbiAgdmFyIHRhcmdldElkcyA9IHRoaXMudGFyZ2V0SWRzOyAvLyB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIHRvdWNoLCB0aGUgcHJvY2VzcyBjYW4gYmUgc2ltcGxpZmllZFxuXG4gIGlmICh0eXBlICYgKElOUFVUX1NUQVJUIHwgSU5QVVRfTU9WRSkgJiYgYWxsVG91Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICB0YXJnZXRJZHNbYWxsVG91Y2hlc1swXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgcmV0dXJuIFthbGxUb3VjaGVzLCBhbGxUb3VjaGVzXTtcbiAgfVxuXG4gIHZhciBpO1xuICB2YXIgdGFyZ2V0VG91Y2hlcztcbiAgdmFyIGNoYW5nZWRUb3VjaGVzID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG4gIHZhciBjaGFuZ2VkVGFyZ2V0VG91Y2hlcyA9IFtdO1xuICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7IC8vIGdldCB0YXJnZXQgdG91Y2hlcyBmcm9tIHRvdWNoZXNcblxuICB0YXJnZXRUb3VjaGVzID0gYWxsVG91Y2hlcy5maWx0ZXIoZnVuY3Rpb24gKHRvdWNoKSB7XG4gICAgcmV0dXJuIGhhc1BhcmVudCh0b3VjaC50YXJnZXQsIHRhcmdldCk7XG4gIH0pOyAvLyBjb2xsZWN0IHRvdWNoZXNcblxuICBpZiAodHlwZSA9PT0gSU5QVVRfU1RBUlQpIHtcbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgdGFyZ2V0VG91Y2hlcy5sZW5ndGgpIHtcbiAgICAgIHRhcmdldElkc1t0YXJnZXRUb3VjaGVzW2ldLmlkZW50aWZpZXJdID0gdHJ1ZTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH0gLy8gZmlsdGVyIGNoYW5nZWQgdG91Y2hlcyB0byBvbmx5IGNvbnRhaW4gdG91Y2hlcyB0aGF0IGV4aXN0IGluIHRoZSBjb2xsZWN0ZWQgdGFyZ2V0IGlkc1xuXG5cbiAgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBjaGFuZ2VkVG91Y2hlcy5sZW5ndGgpIHtcbiAgICBpZiAodGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdKSB7XG4gICAgICBjaGFuZ2VkVGFyZ2V0VG91Y2hlcy5wdXNoKGNoYW5nZWRUb3VjaGVzW2ldKTtcbiAgICB9IC8vIGNsZWFudXAgcmVtb3ZlZCB0b3VjaGVzXG5cblxuICAgIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXRJZHNbY2hhbmdlZFRvdWNoZXNbaV0uaWRlbnRpZmllcl07XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgaWYgKCFjaGFuZ2VkVGFyZ2V0VG91Y2hlcy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gWy8vIG1lcmdlIHRhcmdldFRvdWNoZXMgd2l0aCBjaGFuZ2VkVGFyZ2V0VG91Y2hlcyBzbyBpdCBjb250YWlucyBBTEwgdG91Y2hlcywgaW5jbHVkaW5nICdlbmQnIGFuZCAnY2FuY2VsJ1xuICB1bmlxdWVBcnJheSh0YXJnZXRUb3VjaGVzLmNvbmNhdChjaGFuZ2VkVGFyZ2V0VG91Y2hlcyksICdpZGVudGlmaWVyJywgdHJ1ZSksIGNoYW5nZWRUYXJnZXRUb3VjaGVzXTtcbn1cblxudmFyIE1PVVNFX0lOUFVUX01BUCA9IHtcbiAgbW91c2Vkb3duOiBJTlBVVF9TVEFSVCxcbiAgbW91c2Vtb3ZlOiBJTlBVVF9NT1ZFLFxuICBtb3VzZXVwOiBJTlBVVF9FTkRcbn07XG52YXIgTU9VU0VfRUxFTUVOVF9FVkVOVFMgPSAnbW91c2Vkb3duJztcbnZhciBNT1VTRV9XSU5ET1dfRVZFTlRTID0gJ21vdXNlbW92ZSBtb3VzZXVwJztcbi8qKlxuICogQHByaXZhdGVcbiAqIE1vdXNlIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBNb3VzZUlucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoTW91c2VJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBNb3VzZUlucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IE1vdXNlSW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2RWwgPSBNT1VTRV9FTEVNRU5UX0VWRU5UUztcbiAgICBwcm90by5ldldpbiA9IE1PVVNFX1dJTkRPV19FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnByZXNzZWQgPSBmYWxzZTsgLy8gbW91c2Vkb3duIHN0YXRlXG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhbmRsZSBtb3VzZSBldmVudHNcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IE1vdXNlSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciBldmVudFR5cGUgPSBNT1VTRV9JTlBVVF9NQVBbZXYudHlwZV07IC8vIG9uIHN0YXJ0IHdlIHdhbnQgdG8gaGF2ZSB0aGUgbGVmdCBtb3VzZSBidXR0b24gZG93blxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIGV2LmJ1dHRvbiA9PT0gMCkge1xuICAgICAgdGhpcy5wcmVzc2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfTU9WRSAmJiBldi53aGljaCAhPT0gMSkge1xuICAgICAgZXZlbnRUeXBlID0gSU5QVVRfRU5EO1xuICAgIH0gLy8gbW91c2UgbXVzdCBiZSBkb3duXG5cblxuICAgIGlmICghdGhpcy5wcmVzc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgdGhpcy5wcmVzc2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIGV2ZW50VHlwZSwge1xuICAgICAgcG9pbnRlcnM6IFtldl0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IFtldl0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9NT1VTRSxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNb3VzZUlucHV0O1xufShJbnB1dCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIENvbWJpbmVkIHRvdWNoIGFuZCBtb3VzZSBpbnB1dFxuICpcbiAqIFRvdWNoIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGVuIG1vdXNlLCBhbmQgd2hpbGUgdG91Y2hpbmcgbm8gbW91c2UgZXZlbnRzIGFyZSBhbGxvd2VkLlxuICogVGhpcyBiZWNhdXNlIHRvdWNoIGRldmljZXMgYWxzbyBlbWl0IG1vdXNlIGV2ZW50cyB3aGlsZSBkb2luZyBhIHRvdWNoLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgREVEVVBfVElNRU9VVCA9IDI1MDA7XG52YXIgREVEVVBfRElTVEFOQ0UgPSAyNTtcblxuZnVuY3Rpb24gc2V0TGFzdFRvdWNoKGV2ZW50RGF0YSkge1xuICB2YXIgX2V2ZW50RGF0YSRjaGFuZ2VkUG9pID0gZXZlbnREYXRhLmNoYW5nZWRQb2ludGVycyxcbiAgICAgIHRvdWNoID0gX2V2ZW50RGF0YSRjaGFuZ2VkUG9pWzBdO1xuXG4gIGlmICh0b3VjaC5pZGVudGlmaWVyID09PSB0aGlzLnByaW1hcnlUb3VjaCkge1xuICAgIHZhciBsYXN0VG91Y2ggPSB7XG4gICAgICB4OiB0b3VjaC5jbGllbnRYLFxuICAgICAgeTogdG91Y2guY2xpZW50WVxuICAgIH07XG4gICAgdmFyIGx0cyA9IHRoaXMubGFzdFRvdWNoZXM7XG4gICAgdGhpcy5sYXN0VG91Y2hlcy5wdXNoKGxhc3RUb3VjaCk7XG5cbiAgICB2YXIgcmVtb3ZlTGFzdFRvdWNoID0gZnVuY3Rpb24gcmVtb3ZlTGFzdFRvdWNoKCkge1xuICAgICAgdmFyIGkgPSBsdHMuaW5kZXhPZihsYXN0VG91Y2gpO1xuXG4gICAgICBpZiAoaSA+IC0xKSB7XG4gICAgICAgIGx0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNldFRpbWVvdXQocmVtb3ZlTGFzdFRvdWNoLCBERURVUF9USU1FT1VUKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvcmRUb3VjaGVzKGV2ZW50VHlwZSwgZXZlbnREYXRhKSB7XG4gIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgIHRoaXMucHJpbWFyeVRvdWNoID0gZXZlbnREYXRhLmNoYW5nZWRQb2ludGVyc1swXS5pZGVudGlmaWVyO1xuICAgIHNldExhc3RUb3VjaC5jYWxsKHRoaXMsIGV2ZW50RGF0YSk7XG4gIH0gZWxzZSBpZiAoZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU3ludGhldGljRXZlbnQoZXZlbnREYXRhKSB7XG4gIHZhciB4ID0gZXZlbnREYXRhLnNyY0V2ZW50LmNsaWVudFg7XG4gIHZhciB5ID0gZXZlbnREYXRhLnNyY0V2ZW50LmNsaWVudFk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxhc3RUb3VjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHQgPSB0aGlzLmxhc3RUb3VjaGVzW2ldO1xuICAgIHZhciBkeCA9IE1hdGguYWJzKHggLSB0LngpO1xuICAgIHZhciBkeSA9IE1hdGguYWJzKHkgLSB0LnkpO1xuXG4gICAgaWYgKGR4IDw9IERFRFVQX0RJU1RBTkNFICYmIGR5IDw9IERFRFVQX0RJU1RBTkNFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBUb3VjaE1vdXNlSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICB2YXIgVG91Y2hNb3VzZUlucHV0ID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoX0lucHV0KSB7XG4gICAgX2luaGVyaXRzTG9vc2UoVG91Y2hNb3VzZUlucHV0LCBfSW5wdXQpO1xuXG4gICAgZnVuY3Rpb24gVG91Y2hNb3VzZUlucHV0KF9tYW5hZ2VyLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9JbnB1dC5jYWxsKHRoaXMsIF9tYW5hZ2VyLCBjYWxsYmFjaykgfHwgdGhpcztcblxuICAgICAgX3RoaXMuaGFuZGxlciA9IGZ1bmN0aW9uIChtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpIHtcbiAgICAgICAgdmFyIGlzVG91Y2ggPSBpbnB1dERhdGEucG9pbnRlclR5cGUgPT09IElOUFVUX1RZUEVfVE9VQ0g7XG4gICAgICAgIHZhciBpc01vdXNlID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX01PVVNFO1xuXG4gICAgICAgIGlmIChpc01vdXNlICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMgJiYgaW5wdXREYXRhLnNvdXJjZUNhcGFiaWxpdGllcy5maXJlc1RvdWNoRXZlbnRzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIHdoZW4gd2UncmUgaW4gYSB0b3VjaCBldmVudCwgcmVjb3JkIHRvdWNoZXMgdG8gIGRlLWR1cGUgc3ludGhldGljIG1vdXNlIGV2ZW50XG5cblxuICAgICAgICBpZiAoaXNUb3VjaCkge1xuICAgICAgICAgIHJlY29yZFRvdWNoZXMuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgaW5wdXRFdmVudCwgaW5wdXREYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01vdXNlICYmIGlzU3ludGhldGljRXZlbnQuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgaW5wdXREYXRhKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLmNhbGxiYWNrKG1hbmFnZXIsIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy50b3VjaCA9IG5ldyBUb3VjaElucHV0KF90aGlzLm1hbmFnZXIsIF90aGlzLmhhbmRsZXIpO1xuICAgICAgX3RoaXMubW91c2UgPSBuZXcgTW91c2VJbnB1dChfdGhpcy5tYW5hZ2VyLCBfdGhpcy5oYW5kbGVyKTtcbiAgICAgIF90aGlzLnByaW1hcnlUb3VjaCA9IG51bGw7XG4gICAgICBfdGhpcy5sYXN0VG91Y2hlcyA9IFtdO1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIGhhbmRsZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzXG4gICAgICogQHBhcmFtIHtIYW1tZXJ9IG1hbmFnZXJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXRFdmVudFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICAgKi9cblxuXG4gICAgdmFyIF9wcm90byA9IFRvdWNoTW91c2VJbnB1dC5wcm90b3R5cGU7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIHJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXJzXG4gICAgICovXG4gICAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdGhpcy50b3VjaC5kZXN0cm95KCk7XG4gICAgICB0aGlzLm1vdXNlLmRlc3Ryb3koKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFRvdWNoTW91c2VJbnB1dDtcbiAgfShJbnB1dCk7XG5cbiAgcmV0dXJuIFRvdWNoTW91c2VJbnB1dDtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIGNhbGxlZCBieSB0aGUgTWFuYWdlciBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtIYW1tZXJ9IG1hbmFnZXJcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVJbnB1dEluc3RhbmNlKG1hbmFnZXIpIHtcbiAgdmFyIFR5cGU7IC8vIGxldCBpbnB1dENsYXNzID0gbWFuYWdlci5vcHRpb25zLmlucHV0Q2xhc3M7XG5cbiAgdmFyIGlucHV0Q2xhc3MgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRDbGFzcztcblxuICBpZiAoaW5wdXRDbGFzcykge1xuICAgIFR5cGUgPSBpbnB1dENsYXNzO1xuICB9IGVsc2UgaWYgKFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMpIHtcbiAgICBUeXBlID0gUG9pbnRlckV2ZW50SW5wdXQ7XG4gIH0gZWxzZSBpZiAoU1VQUE9SVF9PTkxZX1RPVUNIKSB7XG4gICAgVHlwZSA9IFRvdWNoSW5wdXQ7XG4gIH0gZWxzZSBpZiAoIVNVUFBPUlRfVE9VQ0gpIHtcbiAgICBUeXBlID0gTW91c2VJbnB1dDtcbiAgfSBlbHNlIHtcbiAgICBUeXBlID0gVG91Y2hNb3VzZUlucHV0O1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUeXBlKG1hbmFnZXIsIGlucHV0SGFuZGxlcik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGlmIHRoZSBhcmd1bWVudCBpcyBhbiBhcnJheSwgd2Ugd2FudCB0byBleGVjdXRlIHRoZSBmbiBvbiBlYWNoIGVudHJ5XG4gKiBpZiBpdCBhaW50IGFuIGFycmF5IHdlIGRvbid0IHdhbnQgdG8gZG8gYSB0aGluZy5cbiAqIHRoaXMgaXMgdXNlZCBieSBhbGwgdGhlIG1ldGhvZHMgdGhhdCBhY2NlcHQgYSBzaW5nbGUgYW5kIGFycmF5IGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfEFycmF5fSBhcmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBmblxuICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0XVxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cblxuZnVuY3Rpb24gaW52b2tlQXJyYXlBcmcoYXJnLCBmbiwgY29udGV4dCkge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgZWFjaChhcmcsIGNvbnRleHRbZm5dLCBjb250ZXh0KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIFNUQVRFX1BPU1NJQkxFID0gMTtcbnZhciBTVEFURV9CRUdBTiA9IDI7XG52YXIgU1RBVEVfQ0hBTkdFRCA9IDQ7XG52YXIgU1RBVEVfRU5ERUQgPSA4O1xudmFyIFNUQVRFX1JFQ09HTklaRUQgPSBTVEFURV9FTkRFRDtcbnZhciBTVEFURV9DQU5DRUxMRUQgPSAxNjtcbnZhciBTVEFURV9GQUlMRUQgPSAzMjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IGEgdW5pcXVlIGlkXG4gKiBAcmV0dXJucyB7bnVtYmVyfSB1bmlxdWVJZFxuICovXG52YXIgX3VuaXF1ZUlkID0gMTtcbmZ1bmN0aW9uIHVuaXF1ZUlkKCkge1xuICByZXR1cm4gX3VuaXF1ZUlkKys7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHJlY29nbml6ZXIgYnkgbmFtZSBpZiBpdCBpcyBib3VuZCB0byBhIG1hbmFnZXJcbiAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IG90aGVyUmVjb2duaXplclxuICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gKiBAcmV0dXJucyB7UmVjb2duaXplcn1cbiAqL1xuZnVuY3Rpb24gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHJlY29nbml6ZXIpIHtcbiAgdmFyIG1hbmFnZXIgPSByZWNvZ25pemVyLm1hbmFnZXI7XG5cbiAgaWYgKG1hbmFnZXIpIHtcbiAgICByZXR1cm4gbWFuYWdlci5nZXQob3RoZXJSZWNvZ25pemVyKTtcbiAgfVxuXG4gIHJldHVybiBvdGhlclJlY29nbml6ZXI7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHVzYWJsZSBzdHJpbmcsIHVzZWQgYXMgZXZlbnQgcG9zdGZpeFxuICogQHBhcmFtIHtjb25zdGFudH0gc3RhdGVcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0YXRlXG4gKi9cblxuZnVuY3Rpb24gc3RhdGVTdHIoc3RhdGUpIHtcbiAgaWYgKHN0YXRlICYgU1RBVEVfQ0FOQ0VMTEVEKSB7XG4gICAgcmV0dXJuICdjYW5jZWwnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfRU5ERUQpIHtcbiAgICByZXR1cm4gJ2VuZCc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9DSEFOR0VEKSB7XG4gICAgcmV0dXJuICdtb3ZlJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0JFR0FOKSB7XG4gICAgcmV0dXJuICdzdGFydCc7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJlY29nbml6ZXIgZmxvdyBleHBsYWluZWQ7ICpcbiAqIEFsbCByZWNvZ25pemVycyBoYXZlIHRoZSBpbml0aWFsIHN0YXRlIG9mIFBPU1NJQkxFIHdoZW4gYSBpbnB1dCBzZXNzaW9uIHN0YXJ0cy5cbiAqIFRoZSBkZWZpbml0aW9uIG9mIGEgaW5wdXQgc2Vzc2lvbiBpcyBmcm9tIHRoZSBmaXJzdCBpbnB1dCB1bnRpbCB0aGUgbGFzdCBpbnB1dCwgd2l0aCBhbGwgaXQncyBtb3ZlbWVudCBpbiBpdC4gKlxuICogRXhhbXBsZSBzZXNzaW9uIGZvciBtb3VzZS1pbnB1dDogbW91c2Vkb3duIC0+IG1vdXNlbW92ZSAtPiBtb3VzZXVwXG4gKlxuICogT24gZWFjaCByZWNvZ25pemluZyBjeWNsZSAoc2VlIE1hbmFnZXIucmVjb2duaXplKSB0aGUgLnJlY29nbml6ZSgpIG1ldGhvZCBpcyBleGVjdXRlZFxuICogd2hpY2ggZGV0ZXJtaW5lcyB3aXRoIHN0YXRlIGl0IHNob3VsZCBiZS5cbiAqXG4gKiBJZiB0aGUgcmVjb2duaXplciBoYXMgdGhlIHN0YXRlIEZBSUxFRCwgQ0FOQ0VMTEVEIG9yIFJFQ09HTklaRUQgKGVxdWFscyBFTkRFRCksIGl0IGlzIHJlc2V0IHRvXG4gKiBQT1NTSUJMRSB0byBnaXZlIGl0IGFub3RoZXIgY2hhbmdlIG9uIHRoZSBuZXh0IGN5Y2xlLlxuICpcbiAqICAgICAgICAgICAgICAgUG9zc2libGVcbiAqICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICArLS0tLS0rLS0tLS0tLS0tLS0tLS0tK1xuICogICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICArLS0tLS0rLS0tLS0rICAgICAgICAgICAgICAgfFxuICogICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfFxuICogICBGYWlsZWQgICAgICBDYW5jZWxsZWQgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLStcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICBSZWNvZ25pemVkICAgICAgIEJlZ2FuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRlZC9SZWNvZ25pemVkXG4gKi9cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUmVjb2duaXplclxuICogRXZlcnkgcmVjb2duaXplciBuZWVkcyB0byBleHRlbmQgZnJvbSB0aGlzIGNsYXNzLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5cbnZhciBSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHtcbiAgICAgIGVuYWJsZTogdHJ1ZVxuICAgIH0sIG9wdGlvbnMpO1xuICAgIHRoaXMuaWQgPSB1bmlxdWVJZCgpO1xuICAgIHRoaXMubWFuYWdlciA9IG51bGw7IC8vIGRlZmF1bHQgaXMgZW5hYmxlIHRydWVcblxuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcbiAgICB0aGlzLnNpbXVsdGFuZW91cyA9IHt9O1xuICAgIHRoaXMucmVxdWlyZUZhaWwgPSBbXTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7UmVjb2duaXplcn1cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgYXNzaWduJDEodGhpcy5vcHRpb25zLCBvcHRpb25zKTsgLy8gYWxzbyB1cGRhdGUgdGhlIHRvdWNoQWN0aW9uLCBpbiBjYXNlIHNvbWV0aGluZyBjaGFuZ2VkIGFib3V0IHRoZSBkaXJlY3Rpb25zL2VuYWJsZWQgc3RhdGVcblxuICAgIHRoaXMubWFuYWdlciAmJiB0aGlzLm1hbmFnZXIudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplci5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplV2l0aCA9IGZ1bmN0aW9uIHJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ3JlY29nbml6ZVdpdGgnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHNpbXVsdGFuZW91cyA9IHRoaXMuc2ltdWx0YW5lb3VzO1xuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcblxuICAgIGlmICghc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF0pIHtcbiAgICAgIHNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdID0gb3RoZXJSZWNvZ25pemVyO1xuICAgICAgb3RoZXJSZWNvZ25pemVyLnJlY29nbml6ZVdpdGgodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBkcm9wIHRoZSBzaW11bHRhbmVvdXMgbGluay4gaXQgZG9lc250IHJlbW92ZSB0aGUgbGluayBvbiB0aGUgb3RoZXIgcmVjb2duaXplci5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8uZHJvcFJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiBkcm9wUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAnZHJvcFJlY29nbml6ZVdpdGgnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuICAgIGRlbGV0ZSB0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVjb2duaXplciBjYW4gb25seSBydW4gd2hlbiBhbiBvdGhlciBpcyBmYWlsaW5nXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlcXVpcmVGYWlsdXJlID0gZnVuY3Rpb24gcmVxdWlyZUZhaWx1cmUob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ3JlcXVpcmVGYWlsdXJlJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciByZXF1aXJlRmFpbCA9IHRoaXMucmVxdWlyZUZhaWw7XG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuXG4gICAgaWYgKGluQXJyYXkocmVxdWlyZUZhaWwsIG90aGVyUmVjb2duaXplcikgPT09IC0xKSB7XG4gICAgICByZXF1aXJlRmFpbC5wdXNoKG90aGVyUmVjb2duaXplcik7XG4gICAgICBvdGhlclJlY29nbml6ZXIucmVxdWlyZUZhaWx1cmUodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBkcm9wIHRoZSByZXF1aXJlRmFpbHVyZSBsaW5rLiBpdCBkb2VzIG5vdCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRyb3BSZXF1aXJlRmFpbHVyZSA9IGZ1bmN0aW9uIGRyb3BSZXF1aXJlRmFpbHVyZShvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAnZHJvcFJlcXVpcmVGYWlsdXJlJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICB2YXIgaW5kZXggPSBpbkFycmF5KHRoaXMucmVxdWlyZUZhaWwsIG90aGVyUmVjb2duaXplcik7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5yZXF1aXJlRmFpbC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaGFzIHJlcXVpcmUgZmFpbHVyZXMgYm9vbGVhblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBfcHJvdG8uaGFzUmVxdWlyZUZhaWx1cmVzID0gZnVuY3Rpb24gaGFzUmVxdWlyZUZhaWx1cmVzKCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCA+IDA7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBpZiB0aGUgcmVjb2duaXplciBjYW4gcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmNhblJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiBjYW5SZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIHJldHVybiAhIXRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBZb3Ugc2hvdWxkIHVzZSBgdHJ5RW1pdGAgaW5zdGVhZCBvZiBgZW1pdGAgZGlyZWN0bHkgdG8gY2hlY2tcbiAgICogdGhhdCBhbGwgdGhlIG5lZWRlZCByZWNvZ25pemVycyBoYXMgZmFpbGVkIGJlZm9yZSBlbWl0dGluZy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGU7XG5cbiAgICBmdW5jdGlvbiBlbWl0KGV2ZW50KSB7XG4gICAgICBzZWxmLm1hbmFnZXIuZW1pdChldmVudCwgaW5wdXQpO1xuICAgIH0gLy8gJ3BhbnN0YXJ0JyBhbmQgJ3Bhbm1vdmUnXG5cblxuICAgIGlmIChzdGF0ZSA8IFNUQVRFX0VOREVEKSB7XG4gICAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCArIHN0YXRlU3RyKHN0YXRlKSk7XG4gICAgfVxuXG4gICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQpOyAvLyBzaW1wbGUgJ2V2ZW50TmFtZScgZXZlbnRzXG5cbiAgICBpZiAoaW5wdXQuYWRkaXRpb25hbEV2ZW50KSB7XG4gICAgICAvLyBhZGRpdGlvbmFsIGV2ZW50KHBhbmxlZnQsIHBhbnJpZ2h0LCBwaW5jaGluLCBwaW5jaG91dC4uLilcbiAgICAgIGVtaXQoaW5wdXQuYWRkaXRpb25hbEV2ZW50KTtcbiAgICB9IC8vIHBhbmVuZCBhbmQgcGFuY2FuY2VsXG5cblxuICAgIGlmIChzdGF0ZSA+PSBTVEFURV9FTkRFRCkge1xuICAgICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQgKyBzdGF0ZVN0cihzdGF0ZSkpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIENoZWNrIHRoYXQgYWxsIHRoZSByZXF1aXJlIGZhaWx1cmUgcmVjb2duaXplcnMgaGFzIGZhaWxlZCxcbiAgICogaWYgdHJ1ZSwgaXQgZW1pdHMgYSBnZXN0dXJlIGV2ZW50LFxuICAgKiBvdGhlcndpc2UsIHNldHVwIHRoZSBzdGF0ZSB0byBGQUlMRUQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by50cnlFbWl0ID0gZnVuY3Rpb24gdHJ5RW1pdChpbnB1dCkge1xuICAgIGlmICh0aGlzLmNhbkVtaXQoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW1pdChpbnB1dCk7XG4gICAgfSAvLyBpdCdzIGZhaWxpbmcgYW55d2F5XG5cblxuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYW4gd2UgZW1pdD9cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmNhbkVtaXQgPSBmdW5jdGlvbiBjYW5FbWl0KCkge1xuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGgpIHtcbiAgICAgIGlmICghKHRoaXMucmVxdWlyZUZhaWxbaV0uc3RhdGUgJiAoU1RBVEVfRkFJTEVEIHwgU1RBVEVfUE9TU0lCTEUpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHVwZGF0ZSB0aGUgcmVjb2duaXplclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZSA9IGZ1bmN0aW9uIHJlY29nbml6ZShpbnB1dERhdGEpIHtcbiAgICAvLyBtYWtlIGEgbmV3IGNvcHkgb2YgdGhlIGlucHV0RGF0YVxuICAgIC8vIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIGlucHV0RGF0YSB3aXRob3V0IG1lc3NpbmcgdXAgdGhlIG90aGVyIHJlY29nbml6ZXJzXG4gICAgdmFyIGlucHV0RGF0YUNsb25lID0gYXNzaWduJDEoe30sIGlucHV0RGF0YSk7IC8vIGlzIGlzIGVuYWJsZWQgYW5kIGFsbG93IHJlY29nbml6aW5nP1xuXG4gICAgaWYgKCFib29sT3JGbih0aGlzLm9wdGlvbnMuZW5hYmxlLCBbdGhpcywgaW5wdXREYXRhQ2xvbmVdKSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHJlc2V0IHdoZW4gd2UndmUgcmVhY2hlZCB0aGUgZW5kXG5cblxuICAgIGlmICh0aGlzLnN0YXRlICYgKFNUQVRFX1JFQ09HTklaRUQgfCBTVEFURV9DQU5DRUxMRUQgfCBTVEFURV9GQUlMRUQpKSB7XG4gICAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMucHJvY2VzcyhpbnB1dERhdGFDbG9uZSk7IC8vIHRoZSByZWNvZ25pemVyIGhhcyByZWNvZ25pemVkIGEgZ2VzdHVyZVxuICAgIC8vIHNvIHRyaWdnZXIgYW4gZXZlbnRcblxuICAgIGlmICh0aGlzLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEIHwgU1RBVEVfQ0FOQ0VMTEVEKSkge1xuICAgICAgdGhpcy50cnlFbWl0KGlucHV0RGF0YUNsb25lKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZXR1cm4gdGhlIHN0YXRlIG9mIHRoZSByZWNvZ25pemVyXG4gICAqIHRoZSBhY3R1YWwgcmVjb2duaXppbmcgaGFwcGVucyBpbiB0aGlzIG1ldGhvZFxuICAgKiBAdmlydHVhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAqIEByZXR1cm5zIHtjb25zdGFudH0gU1RBVEVcbiAgICovXG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuXG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0RGF0YSkge307XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJldHVybiB0aGUgcHJlZmVycmVkIHRvdWNoLWFjdGlvblxuICAgKiBAdmlydHVhbFxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7fTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbGxlZCB3aGVuIHRoZSBnZXN0dXJlIGlzbid0IGFsbG93ZWQgdG8gcmVjb2duaXplXG4gICAqIGxpa2Ugd2hlbiBhbm90aGVyIGlzIGJlaW5nIHJlY29nbml6ZWQgb3IgaXQgaXMgZGlzYWJsZWRcbiAgICogQHZpcnR1YWxcbiAgICovXG5cblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHt9O1xuXG4gIHJldHVybiBSZWNvZ25pemVyO1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBBIHRhcCBpcyByZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG9pbmcgYSBzbWFsbCB0YXAvY2xpY2suIE11bHRpcGxlIHRhcHMgYXJlIHJlY29nbml6ZWQgaWYgdGhleSBvY2N1clxuICogYmV0d2VlbiB0aGUgZ2l2ZW4gaW50ZXJ2YWwgYW5kIHBvc2l0aW9uLiBUaGUgZGVsYXkgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlY29nbml6ZSBtdWx0aS10YXBzIHdpdGhvdXQgZmlyaW5nXG4gKiBhIHNpbmdsZSB0YXAuXG4gKlxuICogVGhlIGV2ZW50RGF0YSBmcm9tIHRoZSBlbWl0dGVkIGV2ZW50IGNvbnRhaW5zIHRoZSBwcm9wZXJ0eSBgdGFwQ291bnRgLCB3aGljaCBjb250YWlucyB0aGUgYW1vdW50IG9mXG4gKiBtdWx0aS10YXBzIGJlaW5nIHJlY29nbml6ZWQuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuXG52YXIgVGFwUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoVGFwUmVjb2duaXplciwgX1JlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFRhcFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICd0YXAnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0YXBzOiAxLFxuICAgICAgaW50ZXJ2YWw6IDMwMCxcbiAgICAgIC8vIG1heCB0aW1lIGJldHdlZW4gdGhlIG11bHRpLXRhcCB0YXBzXG4gICAgICB0aW1lOiAyNTAsXG4gICAgICAvLyBtYXggdGltZSBvZiB0aGUgcG9pbnRlciB0byBiZSBkb3duIChsaWtlIGZpbmdlciBvbiB0aGUgc2NyZWVuKVxuICAgICAgdGhyZXNob2xkOiA5LFxuICAgICAgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcbiAgICAgIHBvc1RocmVzaG9sZDogMTBcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpczsgLy8gcHJldmlvdXMgdGltZSBhbmQgY2VudGVyLFxuICAgIC8vIHVzZWQgZm9yIHRhcCBjb3VudGluZ1xuXG4gICAgX3RoaXMucFRpbWUgPSBmYWxzZTtcbiAgICBfdGhpcy5wQ2VudGVyID0gZmFsc2U7XG4gICAgX3RoaXMuX3RpbWVyID0gbnVsbDtcbiAgICBfdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIF90aGlzLmNvdW50ID0gMDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVGFwUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OXTtcbiAgfTtcblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciB2YWxpZFBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25zLnBvaW50ZXJzO1xuICAgIHZhciB2YWxpZE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCBvcHRpb25zLnRocmVzaG9sZDtcbiAgICB2YXIgdmFsaWRUb3VjaFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPCBvcHRpb25zLnRpbWU7XG4gICAgdGhpcy5yZXNldCgpO1xuXG4gICAgaWYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIHRoaXMuY291bnQgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmZhaWxUaW1lb3V0KCk7XG4gICAgfSAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgIC8vIGFuZCB3ZSd2ZSByZWFjaGVkIGFuIGVuZCBldmVudCwgc28gYSB0YXAgaXMgcG9zc2libGVcblxuXG4gICAgaWYgKHZhbGlkTW92ZW1lbnQgJiYgdmFsaWRUb3VjaFRpbWUgJiYgdmFsaWRQb2ludGVycykge1xuICAgICAgaWYgKGlucHV0LmV2ZW50VHlwZSAhPT0gSU5QVVRfRU5EKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZhaWxUaW1lb3V0KCk7XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWxpZEludGVydmFsID0gdGhpcy5wVGltZSA/IGlucHV0LnRpbWVTdGFtcCAtIHRoaXMucFRpbWUgPCBvcHRpb25zLmludGVydmFsIDogdHJ1ZTtcbiAgICAgIHZhciB2YWxpZE11bHRpVGFwID0gIXRoaXMucENlbnRlciB8fCBnZXREaXN0YW5jZSh0aGlzLnBDZW50ZXIsIGlucHV0LmNlbnRlcikgPCBvcHRpb25zLnBvc1RocmVzaG9sZDtcbiAgICAgIHRoaXMucFRpbWUgPSBpbnB1dC50aW1lU3RhbXA7XG4gICAgICB0aGlzLnBDZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG5cbiAgICAgIGlmICghdmFsaWRNdWx0aVRhcCB8fCAhdmFsaWRJbnRlcnZhbCkge1xuICAgICAgICB0aGlzLmNvdW50ID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY291bnQgKz0gMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gaWYgdGFwIGNvdW50IG1hdGNoZXMgd2UgaGF2ZSByZWNvZ25pemVkIGl0LFxuICAgICAgLy8gZWxzZSBpdCBoYXMgYmVnYW4gcmVjb2duaXppbmcuLi5cblxuICAgICAgdmFyIHRhcENvdW50ID0gdGhpcy5jb3VudCAlIG9wdGlvbnMudGFwcztcblxuICAgICAgaWYgKHRhcENvdW50ID09PSAwKSB7XG4gICAgICAgIC8vIG5vIGZhaWxpbmcgcmVxdWlyZW1lbnRzLCBpbW1lZGlhdGVseSB0cmlnZ2VyIHRoZSB0YXAgZXZlbnRcbiAgICAgICAgLy8gb3Igd2FpdCBhcyBsb25nIGFzIHRoZSBtdWx0aXRhcCBpbnRlcnZhbCB0byB0cmlnZ2VyXG4gICAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlRmFpbHVyZXMoKSkge1xuICAgICAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpczIuc3RhdGUgPSBTVEFURV9SRUNPR05JWkVEO1xuXG4gICAgICAgICAgICBfdGhpczIudHJ5RW1pdCgpO1xuICAgICAgICAgIH0sIG9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgICAgICAgIHJldHVybiBTVEFURV9CRUdBTjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLmZhaWxUaW1lb3V0ID0gZnVuY3Rpb24gZmFpbFRpbWVvdXQoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgIH0sIHRoaXMub3B0aW9ucy5pbnRlcnZhbCk7XG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdCgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgdGhpcy5faW5wdXQudGFwQ291bnQgPSB0aGlzLmNvdW50O1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBUYXBSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogVGhpcyByZWNvZ25pemVyIGlzIGp1c3QgdXNlZCBhcyBhIGJhc2UgZm9yIHRoZSBzaW1wbGUgYXR0cmlidXRlIHJlY29nbml6ZXJzLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIEF0dHJSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShBdHRyUmVjb2duaXplciwgX1JlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIEF0dHJSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9SZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgcG9pbnRlcnM6IDFcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogVXNlZCB0byBjaGVjayBpZiBpdCB0aGUgcmVjb2duaXplciByZWNlaXZlcyB2YWxpZCBpbnB1dCwgbGlrZSBpbnB1dC5kaXN0YW5jZSA+IDEwLlxuICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqIEByZXR1cm5zIHtCb29sZWFufSByZWNvZ25pemVkXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IEF0dHJSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHZhciBvcHRpb25Qb2ludGVycyA9IHRoaXMub3B0aW9ucy5wb2ludGVycztcbiAgICByZXR1cm4gb3B0aW9uUG9pbnRlcnMgPT09IDAgfHwgaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25Qb2ludGVycztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFByb2Nlc3MgdGhlIGlucHV0IGFuZCByZXR1cm4gdGhlIHN0YXRlIGZvciB0aGUgcmVjb2duaXplclxuICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqIEByZXR1cm5zIHsqfSBTdGF0ZVxuICAgKi9cblxuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgdmFyIGV2ZW50VHlwZSA9IGlucHV0LmV2ZW50VHlwZTtcbiAgICB2YXIgaXNSZWNvZ25pemVkID0gc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEKTtcbiAgICB2YXIgaXNWYWxpZCA9IHRoaXMuYXR0clRlc3QoaW5wdXQpOyAvLyBvbiBjYW5jZWwgaW5wdXQgYW5kIHdlJ3ZlIHJlY29nbml6ZWQgYmVmb3JlLCByZXR1cm4gU1RBVEVfQ0FOQ0VMTEVEXG5cbiAgICBpZiAoaXNSZWNvZ25pemVkICYmIChldmVudFR5cGUgJiBJTlBVVF9DQU5DRUwgfHwgIWlzVmFsaWQpKSB7XG4gICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DQU5DRUxMRUQ7XG4gICAgfSBlbHNlIGlmIChpc1JlY29nbml6ZWQgfHwgaXNWYWxpZCkge1xuICAgICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9FTkRFRDtcbiAgICAgIH0gZWxzZSBpZiAoIShzdGF0ZSAmIFNUQVRFX0JFR0FOKSkge1xuICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0NIQU5HRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICByZXR1cm4gQXR0clJlY29nbml6ZXI7XG59KFJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBkaXJlY3Rpb24gY29ucyB0byBzdHJpbmdcbiAqIEBwYXJhbSB7Y29uc3RhbnR9IGRpcmVjdGlvblxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBkaXJlY3Rpb25TdHIoZGlyZWN0aW9uKSB7XG4gIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9ET1dOKSB7XG4gICAgcmV0dXJuICdkb3duJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9VUCkge1xuICAgIHJldHVybiAndXAnO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQpIHtcbiAgICByZXR1cm4gJ2xlZnQnO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX1JJR0hUKSB7XG4gICAgcmV0dXJuICdyaWdodCc7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFBhblxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvd24gYW5kIG1vdmVkIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgUGFuUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFBhblJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUGFuUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIF90aGlzID0gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdwYW4nLFxuICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fQUxMXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gICAgX3RoaXMucFggPSBudWxsO1xuICAgIF90aGlzLnBZID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUGFuUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5kaXJlY3Rpb247XG4gICAgdmFyIGFjdGlvbnMgPSBbXTtcblxuICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgYWN0aW9ucy5wdXNoKFRPVUNIX0FDVElPTl9QQU5fWSk7XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgYWN0aW9ucy5wdXNoKFRPVUNIX0FDVElPTl9QQU5fWCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLmRpcmVjdGlvblRlc3QgPSBmdW5jdGlvbiBkaXJlY3Rpb25UZXN0KGlucHV0KSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIGhhc01vdmVkID0gdHJ1ZTtcbiAgICB2YXIgZGlzdGFuY2UgPSBpbnB1dC5kaXN0YW5jZTtcbiAgICB2YXIgZGlyZWN0aW9uID0gaW5wdXQuZGlyZWN0aW9uO1xuICAgIHZhciB4ID0gaW5wdXQuZGVsdGFYO1xuICAgIHZhciB5ID0gaW5wdXQuZGVsdGFZOyAvLyBsb2NrIHRvIGF4aXM/XG5cbiAgICBpZiAoIShkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbikpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IHggPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHggPCAwID8gRElSRUNUSU9OX0xFRlQgOiBESVJFQ1RJT05fUklHSFQ7XG4gICAgICAgIGhhc01vdmVkID0geCAhPT0gdGhpcy5wWDtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlyZWN0aW9uID0geSA9PT0gMCA/IERJUkVDVElPTl9OT05FIDogeSA8IDAgPyBESVJFQ1RJT05fVVAgOiBESVJFQ1RJT05fRE9XTjtcbiAgICAgICAgaGFzTW92ZWQgPSB5ICE9PSB0aGlzLnBZO1xuICAgICAgICBkaXN0YW5jZSA9IE1hdGguYWJzKGlucHV0LmRlbHRhWSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5wdXQuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgIHJldHVybiBoYXNNb3ZlZCAmJiBkaXN0YW5jZSA+IG9wdGlvbnMudGhyZXNob2xkICYmIGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIEF0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiAoIC8vIHJlcGxhY2Ugd2l0aCBhIHN1cGVyIGNhbGxcbiAgICB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4gfHwgISh0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pICYmIHRoaXMuZGlyZWN0aW9uVGVzdChpbnB1dCkpO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHRoaXMucFggPSBpbnB1dC5kZWx0YVg7XG4gICAgdGhpcy5wWSA9IGlucHV0LmRlbHRhWTtcbiAgICB2YXIgZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyKGlucHV0LmRpcmVjdGlvbik7XG5cbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBkaXJlY3Rpb247XG4gICAgfVxuXG4gICAgX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5lbWl0LmNhbGwodGhpcywgaW5wdXQpO1xuICB9O1xuXG4gIHJldHVybiBQYW5SZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFN3aXBlXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgbW92aW5nIGZhc3QgKHZlbG9jaXR5KSwgd2l0aCBlbm91Z2ggZGlzdGFuY2UgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBTd2lwZVJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShTd2lwZVJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gU3dpcGVSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAnc3dpcGUnLFxuICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgIHZlbG9jaXR5OiAwLjMsXG4gICAgICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMIHwgRElSRUNUSU9OX1ZFUlRJQ0FMLFxuICAgICAgcG9pbnRlcnM6IDFcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTd2lwZVJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBQYW5SZWNvZ25pemVyLnByb3RvdHlwZS5nZXRUb3VjaEFjdGlvbi5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5kaXJlY3Rpb247XG4gICAgdmFyIHZlbG9jaXR5O1xuXG4gICAgaWYgKGRpcmVjdGlvbiAmIChESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCkpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5O1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5WDtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgdmVsb2NpdHkgPSBpbnB1dC5vdmVyYWxsVmVsb2NpdHlZO1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIGRpcmVjdGlvbiAmIGlucHV0Lm9mZnNldERpcmVjdGlvbiAmJiBpbnB1dC5kaXN0YW5jZSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgJiYgaW5wdXQubWF4UG9pbnRlcnMgPT09IHRoaXMub3B0aW9ucy5wb2ludGVycyAmJiBhYnModmVsb2NpdHkpID4gdGhpcy5vcHRpb25zLnZlbG9jaXR5ICYmIGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORDtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyKGlucHV0Lm9mZnNldERpcmVjdGlvbik7XG5cbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQgKyBkaXJlY3Rpb24sIGlucHV0KTtcbiAgICB9XG5cbiAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gU3dpcGVSZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFBpbmNoXG4gKiBSZWNvZ25pemVkIHdoZW4gdHdvIG9yIG1vcmUgcG9pbnRlcnMgYXJlIG1vdmluZyB0b3dhcmQgKHpvb20taW4pIG9yIGF3YXkgZnJvbSBlYWNoIG90aGVyICh6b29tLW91dCkuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFBpbmNoUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFBpbmNoUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBQaW5jaFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdwaW5jaCcsXG4gICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICBwb2ludGVyczogMlxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFBpbmNoUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiAoTWF0aC5hYnMoaW5wdXQuc2NhbGUgLSAxKSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgfHwgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQuc2NhbGUgIT09IDEpIHtcbiAgICAgIHZhciBpbk91dCA9IGlucHV0LnNjYWxlIDwgMSA/ICdpbicgOiAnb3V0JztcbiAgICAgIGlucHV0LmFkZGl0aW9uYWxFdmVudCA9IHRoaXMub3B0aW9ucy5ldmVudCArIGluT3V0O1xuICAgIH1cblxuICAgIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gUGluY2hSZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJvdGF0ZVxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXIgYXJlIG1vdmluZyBpbiBhIGNpcmN1bGFyIG1vdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgUm90YXRlUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFJvdGF0ZVJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUm90YXRlUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3JvdGF0ZScsXG4gICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICBwb2ludGVyczogMlxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFJvdGF0ZVJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnJvdGF0aW9uKSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgfHwgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKTtcbiAgfTtcblxuICByZXR1cm4gUm90YXRlUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQcmVzc1xuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvd24gZm9yIHggbXMgd2l0aG91dCBhbnkgbW92ZW1lbnQuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuXG52YXIgUHJlc3NSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQcmVzc1JlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBQcmVzc1JlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdwcmVzcycsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIHRpbWU6IDI1MSxcbiAgICAgIC8vIG1pbmltYWwgdGltZSBvZiB0aGUgcG9pbnRlciB0byBiZSBwcmVzc2VkXG4gICAgICB0aHJlc2hvbGQ6IDlcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgICBfdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIF90aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFByZXNzUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fQVVUT107XG4gIH07XG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgdmFyIHZhbGlkVGltZSA9IGlucHV0LmRlbHRhVGltZSA+IG9wdGlvbnMudGltZTtcbiAgICB0aGlzLl9pbnB1dCA9IGlucHV0OyAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgIC8vIGFuZCB3ZSd2ZSByZWFjaGVkIGFuIGVuZCBldmVudCwgc28gYSB0YXAgaXMgcG9zc2libGVcblxuICAgIGlmICghdmFsaWRNb3ZlbWVudCB8fCAhdmFsaWRQb2ludGVycyB8fCBpbnB1dC5ldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiAhdmFsaWRUaW1lKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcblxuICAgICAgICBfdGhpczIudHJ5RW1pdCgpO1xuICAgICAgfSwgb3B0aW9ucy50aW1lKTtcbiAgICB9IGVsc2UgaWYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgcmV0dXJuIFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlucHV0ICYmIGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50ICsgXCJ1cFwiLCBpbnB1dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lucHV0LnRpbWVTdGFtcCA9IG5vdygpO1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBQcmVzc1JlY29nbml6ZXI7XG59KFJlY29nbml6ZXIpO1xuXG52YXIgZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgaWYgRE9NIGV2ZW50cyBhcmUgYmVpbmcgdHJpZ2dlcmVkLlxuICAgKiBCdXQgdGhpcyBpcyBzbG93ZXIgYW5kIHVudXNlZCBieSBzaW1wbGUgaW1wbGVtZW50YXRpb25zLCBzbyBkaXNhYmxlZCBieSBkZWZhdWx0LlxuICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRvbUV2ZW50czogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5L2ZhbGxiYWNrLlxuICAgKiBXaGVuIHNldCB0byBgY29tcHV0ZWAgaXQgd2lsbCBtYWdpY2FsbHkgc2V0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBhZGRlZCByZWNvZ25pemVycy5cbiAgICogQHR5cGUge1N0cmluZ31cbiAgICogQGRlZmF1bHQgY29tcHV0ZVxuICAgKi9cbiAgdG91Y2hBY3Rpb246IFRPVUNIX0FDVElPTl9DT01QVVRFLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgZW5hYmxlOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBFWFBFUklNRU5UQUwgRkVBVFVSRSAtLSBjYW4gYmUgcmVtb3ZlZC9jaGFuZ2VkXG4gICAqIENoYW5nZSB0aGUgcGFyZW50IGlucHV0IHRhcmdldCBlbGVtZW50LlxuICAgKiBJZiBOdWxsLCB0aGVuIGl0IGlzIGJlaW5nIHNldCB0aGUgdG8gbWFpbiBlbGVtZW50LlxuICAgKiBAdHlwZSB7TnVsbHxFdmVudFRhcmdldH1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5wdXRUYXJnZXQ6IG51bGwsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGZvcmNlIGFuIGlucHV0IGNsYXNzXG4gICAqIEB0eXBlIHtOdWxsfEZ1bmN0aW9ufVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBpbnB1dENsYXNzOiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBTb21lIENTUyBwcm9wZXJ0aWVzIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgdGhlIHdvcmtpbmcgb2YgSGFtbWVyLlxuICAgKiBBZGQgdGhlbSB0byB0aGlzIG1ldGhvZCBhbmQgdGhleSB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIuXG4gICAqIEBuYW1lc3BhY2VcbiAgICovXG4gIGNzc1Byb3BzOiB7XG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlcyB0ZXh0IHNlbGVjdGlvbiB0byBpbXByb3ZlIHRoZSBkcmFnZ2luZyBnZXN0dXJlLiBNYWlubHkgZm9yIGRlc2t0b3AgYnJvd3NlcnMuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZSB0aGUgV2luZG93cyBQaG9uZSBncmlwcGVycyB3aGVuIHByZXNzaW5nIGFuIGVsZW1lbnQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB0b3VjaFNlbGVjdDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGVzIHRoZSBkZWZhdWx0IGNhbGxvdXQgc2hvd24gd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQuXG4gICAgICogT24gaU9TLCB3aGVuIHlvdSB0b3VjaCBhbmQgaG9sZCBhIHRvdWNoIHRhcmdldCBzdWNoIGFzIGEgbGluaywgU2FmYXJpIGRpc3BsYXlzXG4gICAgICogYSBjYWxsb3V0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmsuIFRoaXMgcHJvcGVydHkgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoYXQgY2FsbG91dC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHRvdWNoQ2FsbG91dDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHpvb21pbmcgaXMgZW5hYmxlZC4gVXNlZCBieSBJRTEwPlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgY29udGVudFpvb21pbmc6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBTcGVjaWZpZXMgdGhhdCBhbiBlbnRpcmUgZWxlbWVudCBzaG91bGQgYmUgZHJhZ2dhYmxlIGluc3RlYWQgb2YgaXRzIGNvbnRlbnRzLiBNYWlubHkgZm9yIGRlc2t0b3AgYnJvd3NlcnMuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB1c2VyRHJhZzogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIE92ZXJyaWRlcyB0aGUgaGlnaGxpZ2h0IGNvbG9yIHNob3duIHdoZW4gdGhlIHVzZXIgdGFwcyBhIGxpbmsgb3IgYSBKYXZhU2NyaXB0XG4gICAgICogY2xpY2thYmxlIGVsZW1lbnQgaW4gaU9TLiBUaGlzIHByb3BlcnR5IG9iZXlzIHRoZSBhbHBoYSB2YWx1ZSwgaWYgc3BlY2lmaWVkLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ3JnYmEoMCwwLDAsMCknXG4gICAgICovXG4gICAgdGFwSGlnaGxpZ2h0Q29sb3I6IFwicmdiYSgwLDAsMCwwKVwiXG4gIH1cbn07XG4vKipcbiAqIEBwcml2YXRlXG4gKiBEZWZhdWx0IHJlY29nbml6ZXIgc2V0dXAgd2hlbiBjYWxsaW5nIGBIYW1tZXIoKWBcbiAqIFdoZW4gY3JlYXRpbmcgYSBuZXcgTWFuYWdlciB0aGVzZSB3aWxsIGJlIHNraXBwZWQuXG4gKiBUaGlzIGlzIHNlcGFyYXRlZCB3aXRoIG90aGVyIGRlZmF1bHRzIGJlY2F1c2Ugb2YgdHJlZS1zaGFraW5nLlxuICogQHR5cGUge0FycmF5fVxuICovXG5cbnZhciBwcmVzZXQgPSBbW1JvdGF0ZVJlY29nbml6ZXIsIHtcbiAgZW5hYmxlOiBmYWxzZVxufV0sIFtQaW5jaFJlY29nbml6ZXIsIHtcbiAgZW5hYmxlOiBmYWxzZVxufSwgWydyb3RhdGUnXV0sIFtTd2lwZVJlY29nbml6ZXIsIHtcbiAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTFxufV0sIFtQYW5SZWNvZ25pemVyLCB7XG4gIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUxcbn0sIFsnc3dpcGUnXV0sIFtUYXBSZWNvZ25pemVyXSwgW1RhcFJlY29nbml6ZXIsIHtcbiAgZXZlbnQ6ICdkb3VibGV0YXAnLFxuICB0YXBzOiAyXG59LCBbJ3RhcCddXSwgW1ByZXNzUmVjb2duaXplcl1dO1xuXG52YXIgU1RPUCA9IDE7XG52YXIgRk9SQ0VEX1NUT1AgPSAyO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogYWRkL3JlbW92ZSB0aGUgY3NzIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBpbiBtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtCb29sZWFufSBhZGRcbiAqL1xuXG5mdW5jdGlvbiB0b2dnbGVDc3NQcm9wcyhtYW5hZ2VyLCBhZGQpIHtcbiAgdmFyIGVsZW1lbnQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG5cbiAgaWYgKCFlbGVtZW50LnN0eWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHByb3A7XG4gIGVhY2gobWFuYWdlci5vcHRpb25zLmNzc1Byb3BzLCBmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICBwcm9wID0gcHJlZml4ZWQoZWxlbWVudC5zdHlsZSwgbmFtZSk7XG5cbiAgICBpZiAoYWRkKSB7XG4gICAgICBtYW5hZ2VyLm9sZENzc1Byb3BzW3Byb3BdID0gZWxlbWVudC5zdHlsZVtwcm9wXTtcbiAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IG1hbmFnZXIub2xkQ3NzUHJvcHNbcHJvcF0gfHwgXCJcIjtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICghYWRkKSB7XG4gICAgbWFuYWdlci5vbGRDc3NQcm9wcyA9IHt9O1xuICB9XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiB0cmlnZ2VyIGRvbSBldmVudFxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICovXG5cblxuZnVuY3Rpb24gdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKSB7XG4gIHZhciBnZXN0dXJlRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICBnZXN0dXJlRXZlbnQuaW5pdEV2ZW50KGV2ZW50LCB0cnVlLCB0cnVlKTtcbiAgZ2VzdHVyZUV2ZW50Lmdlc3R1cmUgPSBkYXRhO1xuICBkYXRhLnRhcmdldC5kaXNwYXRjaEV2ZW50KGdlc3R1cmVFdmVudCk7XG59XG4vKipcbiogQHByaXZhdGVcbiAqIE1hbmFnZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cblxudmFyIE1hbmFnZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNYW5hZ2VyKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5vcHRpb25zID0gYXNzaWduJDEoe30sIGRlZmF1bHRzLCBvcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLm9wdGlvbnMuaW5wdXRUYXJnZXQgPSB0aGlzLm9wdGlvbnMuaW5wdXRUYXJnZXQgfHwgZWxlbWVudDtcbiAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgdGhpcy5yZWNvZ25pemVycyA9IFtdO1xuICAgIHRoaXMub2xkQ3NzUHJvcHMgPSB7fTtcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuaW5wdXQgPSBjcmVhdGVJbnB1dEluc3RhbmNlKHRoaXMpO1xuICAgIHRoaXMudG91Y2hBY3Rpb24gPSBuZXcgVG91Y2hBY3Rpb24odGhpcywgdGhpcy5vcHRpb25zLnRvdWNoQWN0aW9uKTtcbiAgICB0b2dnbGVDc3NQcm9wcyh0aGlzLCB0cnVlKTtcbiAgICBlYWNoKHRoaXMub3B0aW9ucy5yZWNvZ25pemVycywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciByZWNvZ25pemVyID0gX3RoaXMuYWRkKG5ldyBpdGVtWzBdKGl0ZW1bMV0pKTtcblxuICAgICAgaXRlbVsyXSAmJiByZWNvZ25pemVyLnJlY29nbml6ZVdpdGgoaXRlbVsyXSk7XG4gICAgICBpdGVtWzNdICYmIHJlY29nbml6ZXIucmVxdWlyZUZhaWx1cmUoaXRlbVszXSk7XG4gICAgfSwgdGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICBhc3NpZ24kMSh0aGlzLm9wdGlvbnMsIG9wdGlvbnMpOyAvLyBPcHRpb25zIHRoYXQgbmVlZCBhIGxpdHRsZSBtb3JlIHNldHVwXG5cbiAgICBpZiAob3B0aW9ucy50b3VjaEFjdGlvbikge1xuICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5pbnB1dFRhcmdldCkge1xuICAgICAgLy8gQ2xlYW4gdXAgZXhpc3RpbmcgZXZlbnQgbGlzdGVuZXJzIGFuZCByZWluaXRpYWxpemVcbiAgICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgICAgdGhpcy5pbnB1dC50YXJnZXQgPSBvcHRpb25zLmlucHV0VGFyZ2V0O1xuICAgICAgdGhpcy5pbnB1dC5pbml0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzdG9wIHJlY29nbml6aW5nIGZvciB0aGlzIHNlc3Npb24uXG4gICAqIFRoaXMgc2Vzc2lvbiB3aWxsIGJlIGRpc2NhcmRlZCwgd2hlbiBhIG5ldyBbaW5wdXRdc3RhcnQgZXZlbnQgaXMgZmlyZWQuXG4gICAqIFdoZW4gZm9yY2VkLCB0aGUgcmVjb2duaXplciBjeWNsZSBpcyBzdG9wcGVkIGltbWVkaWF0ZWx5LlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZV1cbiAgICovXG5cblxuICBfcHJvdG8uc3RvcCA9IGZ1bmN0aW9uIHN0b3AoZm9yY2UpIHtcbiAgICB0aGlzLnNlc3Npb24uc3RvcHBlZCA9IGZvcmNlID8gRk9SQ0VEX1NUT1AgOiBTVE9QO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcnVuIHRoZSByZWNvZ25pemVycyFcbiAgICogY2FsbGVkIGJ5IHRoZSBpbnB1dEhhbmRsZXIgZnVuY3Rpb24gb24gZXZlcnkgbW92ZW1lbnQgb2YgdGhlIHBvaW50ZXJzICh0b3VjaGVzKVxuICAgKiBpdCB3YWxrcyB0aHJvdWdoIGFsbCB0aGUgcmVjb2duaXplcnMgYW5kIHRyaWVzIHRvIGRldGVjdCB0aGUgZ2VzdHVyZSB0aGF0IGlzIGJlaW5nIG1hZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemUgPSBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG5cbiAgICBpZiAoc2Vzc2lvbi5zdG9wcGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBydW4gdGhlIHRvdWNoLWFjdGlvbiBwb2x5ZmlsbFxuXG5cbiAgICB0aGlzLnRvdWNoQWN0aW9uLnByZXZlbnREZWZhdWx0cyhpbnB1dERhdGEpO1xuICAgIHZhciByZWNvZ25pemVyO1xuICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7IC8vIHRoaXMgaG9sZHMgdGhlIHJlY29nbml6ZXIgdGhhdCBpcyBiZWluZyByZWNvZ25pemVkLlxuICAgIC8vIHNvIHRoZSByZWNvZ25pemVyJ3Mgc3RhdGUgbmVlZHMgdG8gYmUgQkVHQU4sIENIQU5HRUQsIEVOREVEIG9yIFJFQ09HTklaRURcbiAgICAvLyBpZiBubyByZWNvZ25pemVyIGlzIGRldGVjdGluZyBhIHRoaW5nLCBpdCBpcyBzZXQgdG8gYG51bGxgXG5cbiAgICB2YXIgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplcjsgLy8gcmVzZXQgd2hlbiB0aGUgbGFzdCByZWNvZ25pemVyIGlzIHJlY29nbml6ZWRcbiAgICAvLyBvciB3aGVuIHdlJ3JlIGluIGEgbmV3IHNlc3Npb25cblxuICAgIGlmICghY3VyUmVjb2duaXplciB8fCBjdXJSZWNvZ25pemVyICYmIGN1clJlY29nbml6ZXIuc3RhdGUgJiBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgICAgY3VyUmVjb2duaXplciA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCByZWNvZ25pemVycy5sZW5ndGgpIHtcbiAgICAgIHJlY29nbml6ZXIgPSByZWNvZ25pemVyc1tpXTsgLy8gZmluZCBvdXQgaWYgd2UgYXJlIGFsbG93ZWQgdHJ5IHRvIHJlY29nbml6ZSB0aGUgaW5wdXQgZm9yIHRoaXMgb25lLlxuICAgICAgLy8gMS4gICBhbGxvdyBpZiB0aGUgc2Vzc2lvbiBpcyBOT1QgZm9yY2VkIHN0b3BwZWQgKHNlZSB0aGUgLnN0b3AoKSBtZXRob2QpXG4gICAgICAvLyAyLiAgIGFsbG93IGlmIHdlIHN0aWxsIGhhdmVuJ3QgcmVjb2duaXplZCBhIGdlc3R1cmUgaW4gdGhpcyBzZXNzaW9uLCBvciB0aGUgdGhpcyByZWNvZ25pemVyIGlzIHRoZSBvbmVcbiAgICAgIC8vICAgICAgdGhhdCBpcyBiZWluZyByZWNvZ25pemVkLlxuICAgICAgLy8gMy4gICBhbGxvdyBpZiB0aGUgcmVjb2duaXplciBpcyBhbGxvd2VkIHRvIHJ1biBzaW11bHRhbmVvdXMgd2l0aCB0aGUgY3VycmVudCByZWNvZ25pemVkIHJlY29nbml6ZXIuXG4gICAgICAvLyAgICAgIHRoaXMgY2FuIGJlIHNldHVwIHdpdGggdGhlIGByZWNvZ25pemVXaXRoKClgIG1ldGhvZCBvbiB0aGUgcmVjb2duaXplci5cblxuICAgICAgaWYgKHNlc3Npb24uc3RvcHBlZCAhPT0gRk9SQ0VEX1NUT1AgJiYgKCAvLyAxXG4gICAgICAhY3VyUmVjb2duaXplciB8fCByZWNvZ25pemVyID09PSBjdXJSZWNvZ25pemVyIHx8IC8vIDJcbiAgICAgIHJlY29nbml6ZXIuY2FuUmVjb2duaXplV2l0aChjdXJSZWNvZ25pemVyKSkpIHtcbiAgICAgICAgLy8gM1xuICAgICAgICByZWNvZ25pemVyLnJlY29nbml6ZShpbnB1dERhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjb2duaXplci5yZXNldCgpO1xuICAgICAgfSAvLyBpZiB0aGUgcmVjb2duaXplciBoYXMgYmVlbiByZWNvZ25pemluZyB0aGUgaW5wdXQgYXMgYSB2YWxpZCBnZXN0dXJlLCB3ZSB3YW50IHRvIHN0b3JlIHRoaXMgb25lIGFzIHRoZVxuICAgICAgLy8gY3VycmVudCBhY3RpdmUgcmVjb2duaXplci4gYnV0IG9ubHkgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGFjdGl2ZSByZWNvZ25pemVyXG5cblxuICAgICAgaWYgKCFjdXJSZWNvZ25pemVyICYmIHJlY29nbml6ZXIuc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEIHwgU1RBVEVfRU5ERUQpKSB7XG4gICAgICAgIHNlc3Npb24uY3VyUmVjb2duaXplciA9IHJlY29nbml6ZXI7XG4gICAgICAgIGN1clJlY29nbml6ZXIgPSByZWNvZ25pemVyO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZ2V0IGEgcmVjb2duaXplciBieSBpdHMgZXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gcmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxOdWxsfVxuICAgKi9cblxuXG4gIF9wcm90by5nZXQgPSBmdW5jdGlvbiBnZXQocmVjb2duaXplcikge1xuICAgIGlmIChyZWNvZ25pemVyIGluc3RhbmNlb2YgUmVjb2duaXplcikge1xuICAgICAgcmV0dXJuIHJlY29nbml6ZXI7XG4gICAgfVxuXG4gICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjb2duaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWNvZ25pemVyc1tpXS5vcHRpb25zLmV2ZW50ID09PSByZWNvZ25pemVyKSB7XG4gICAgICAgIHJldHVybiByZWNvZ25pemVyc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIGFkZCBhIHJlY29nbml6ZXIgdG8gdGhlIG1hbmFnZXJcbiAgICogZXhpc3RpbmcgcmVjb2duaXplcnMgd2l0aCB0aGUgc2FtZSBldmVudCBuYW1lIHdpbGwgYmUgcmVtb3ZlZFxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TWFuYWdlcn1cbiAgICovXG5cblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKHJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgXCJhZGRcIiwgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gLy8gcmVtb3ZlIGV4aXN0aW5nXG5cblxuICAgIHZhciBleGlzdGluZyA9IHRoaXMuZ2V0KHJlY29nbml6ZXIub3B0aW9ucy5ldmVudCk7XG5cbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHRoaXMucmVtb3ZlKGV4aXN0aW5nKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlY29nbml6ZXJzLnB1c2gocmVjb2duaXplcik7XG4gICAgcmVjb2duaXplci5tYW5hZ2VyID0gdGhpcztcbiAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIHJldHVybiByZWNvZ25pemVyO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVtb3ZlIGEgcmVjb2duaXplciBieSBuYW1lIG9yIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge01hbmFnZXJ9XG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShyZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsIFwicmVtb3ZlXCIsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0UmVjb2duaXplciA9IHRoaXMuZ2V0KHJlY29nbml6ZXIpOyAvLyBsZXQncyBtYWtlIHN1cmUgdGhpcyByZWNvZ25pemVyIGV4aXN0c1xuXG4gICAgaWYgKHJlY29nbml6ZXIpIHtcbiAgICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG4gICAgICB2YXIgaW5kZXggPSBpbkFycmF5KHJlY29nbml6ZXJzLCB0YXJnZXRSZWNvZ25pemVyKTtcblxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICByZWNvZ25pemVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogYmluZCBldmVudFxuICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAgICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCB8fCBoYW5kbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgZWFjaChzcGxpdFN0cihldmVudHMpLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGhhbmRsZXJzW2V2ZW50XSA9IGhhbmRsZXJzW2V2ZW50XSB8fCBbXTtcbiAgICAgIGhhbmRsZXJzW2V2ZW50XS5wdXNoKGhhbmRsZXIpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgdW5iaW5kIGV2ZW50LCBsZWF2ZSBlbWl0IGJsYW5rIHRvIHJlbW92ZSBhbGwgaGFuZGxlcnNcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaGFuZGxlcl1cbiAgICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5vZmYgPSBmdW5jdGlvbiBvZmYoZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgZGVsZXRlIGhhbmRsZXJzW2V2ZW50XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZXJzW2V2ZW50XSAmJiBoYW5kbGVyc1tldmVudF0uc3BsaWNlKGluQXJyYXkoaGFuZGxlcnNbZXZlbnRdLCBoYW5kbGVyKSwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSBlbWl0IGV2ZW50IHRvIHRoZSBsaXN0ZW5lcnNcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAqL1xuXG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBkYXRhKSB7XG4gICAgLy8gd2UgYWxzbyB3YW50IHRvIHRyaWdnZXIgZG9tIGV2ZW50c1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZG9tRXZlbnRzKSB7XG4gICAgICB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpO1xuICAgIH0gLy8gbm8gaGFuZGxlcnMsIHNvIHNraXAgaXQgYWxsXG5cblxuICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNbZXZlbnRdICYmIHRoaXMuaGFuZGxlcnNbZXZlbnRdLnNsaWNlKCk7XG5cbiAgICBpZiAoIWhhbmRsZXJzIHx8ICFoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLnR5cGUgPSBldmVudDtcblxuICAgIGRhdGEucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBkYXRhLnNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfTtcblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICBoYW5kbGVyc1tpXShkYXRhKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBkZXN0cm95IHRoZSBtYW5hZ2VyIGFuZCB1bmJpbmRzIGFsbCBldmVudHNcbiAgICogaXQgZG9lc24ndCB1bmJpbmQgZG9tIGV2ZW50cywgdGhhdCBpcyB0aGUgdXNlciBvd24gcmVzcG9uc2liaWxpdHlcbiAgICovXG5cblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5lbGVtZW50ICYmIHRvZ2dsZUNzc1Byb3BzKHRoaXMsIGZhbHNlKTtcbiAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgdGhpcy5pbnB1dC5kZXN0cm95KCk7XG4gICAgdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gTWFuYWdlcjtcbn0oKTtcblxudmFyIFNJTkdMRV9UT1VDSF9JTlBVVF9NQVAgPSB7XG4gIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICB0b3VjaG1vdmU6IElOUFVUX01PVkUsXG4gIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG52YXIgU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFMgPSAndG91Y2hzdGFydCc7XG52YXIgU0lOR0xFX1RPVUNIX1dJTkRPV19FVkVOVFMgPSAndG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWwnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogVG91Y2ggZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIFNpbmdsZVRvdWNoSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShTaW5nbGVUb3VjaElucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIFNpbmdsZVRvdWNoSW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gU2luZ2xlVG91Y2hJbnB1dC5wcm90b3R5cGU7XG4gICAgcHJvdG8uZXZUYXJnZXQgPSBTSU5HTEVfVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICBwcm90by5ldldpbiA9IFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFNpbmdsZVRvdWNoSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciB0eXBlID0gU0lOR0xFX1RPVUNIX0lOUFVUX01BUFtldi50eXBlXTsgLy8gc2hvdWxkIHdlIGhhbmRsZSB0aGUgdG91Y2ggZXZlbnRzP1xuXG4gICAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRvdWNoZXMgPSBub3JtYWxpemVTaW5nbGVUb3VjaGVzLmNhbGwodGhpcywgZXYsIHR5cGUpOyAvLyB3aGVuIGRvbmUsIHJlc2V0IHRoZSBzdGFydGVkIHN0YXRlXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIHRvdWNoZXNbMF0ubGVuZ3RoIC0gdG91Y2hlc1sxXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFNpbmdsZVRvdWNoSW5wdXQ7XG59KElucHV0KTtcblxuZnVuY3Rpb24gbm9ybWFsaXplU2luZ2xlVG91Y2hlcyhldiwgdHlwZSkge1xuICB2YXIgYWxsID0gdG9BcnJheShldi50b3VjaGVzKTtcbiAgdmFyIGNoYW5nZWQgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKTtcblxuICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgYWxsID0gdW5pcXVlQXJyYXkoYWxsLmNvbmNhdChjaGFuZ2VkKSwgJ2lkZW50aWZpZXInLCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiBbYWxsLCBjaGFuZ2VkXTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogd3JhcCBhIG1ldGhvZCB3aXRoIGEgZGVwcmVjYXRpb24gd2FybmluZyBhbmQgc3RhY2sgdHJhY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgbmV3IGZ1bmN0aW9uIHdyYXBwaW5nIHRoZSBzdXBwbGllZCBtZXRob2QuXG4gKi9cbmZ1bmN0aW9uIGRlcHJlY2F0ZShtZXRob2QsIG5hbWUsIG1lc3NhZ2UpIHtcbiAgdmFyIGRlcHJlY2F0aW9uTWVzc2FnZSA9IFwiREVQUkVDQVRFRCBNRVRIT0Q6IFwiICsgbmFtZSArIFwiXFxuXCIgKyBtZXNzYWdlICsgXCIgQVQgXFxuXCI7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGUgPSBuZXcgRXJyb3IoJ2dldC1zdGFjay10cmFjZScpO1xuICAgIHZhciBzdGFjayA9IGUgJiYgZS5zdGFjayA/IGUuc3RhY2sucmVwbGFjZSgvXlteXFwoXSs/W1xcbiRdL2dtLCAnJykucmVwbGFjZSgvXlxccythdFxccysvZ20sICcnKS5yZXBsYWNlKC9eT2JqZWN0Ljxhbm9ueW1vdXM+XFxzKlxcKC9nbSwgJ3thbm9ueW1vdXN9KClAJykgOiAnVW5rbm93biBTdGFjayBUcmFjZSc7XG4gICAgdmFyIGxvZyA9IHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS53YXJuIHx8IHdpbmRvdy5jb25zb2xlLmxvZyk7XG5cbiAgICBpZiAobG9nKSB7XG4gICAgICBsb2cuY2FsbCh3aW5kb3cuY29uc29sZSwgZGVwcmVjYXRpb25NZXNzYWdlLCBzdGFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBleHRlbmQgb2JqZWN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIGluIGRlc3Qgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgb25lcyBpbiBzcmMuXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzdFxuICogQHBhcmFtIHtPYmplY3R9IHNyY1xuICogQHBhcmFtIHtCb29sZWFufSBbbWVyZ2U9ZmFsc2VdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBkZXN0XG4gKi9cblxudmFyIGV4dGVuZCA9IGRlcHJlY2F0ZShmdW5jdGlvbiAoZGVzdCwgc3JjLCBtZXJnZSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHNyYyk7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IGtleXMubGVuZ3RoKSB7XG4gICAgaWYgKCFtZXJnZSB8fCBtZXJnZSAmJiBkZXN0W2tleXNbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc3Rba2V5c1tpXV0gPSBzcmNba2V5c1tpXV07XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIGRlc3Q7XG59LCAnZXh0ZW5kJywgJ1VzZSBgYXNzaWduYC4nKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogbWVyZ2UgdGhlIHZhbHVlcyBmcm9tIHNyYyBpbiB0aGUgZGVzdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyB0aGF0IGV4aXN0IGluIGRlc3Qgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW4gYnkgc3JjXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzdFxuICogQHBhcmFtIHtPYmplY3R9IHNyY1xuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG5cbnZhciBtZXJnZSA9IGRlcHJlY2F0ZShmdW5jdGlvbiAoZGVzdCwgc3JjKSB7XG4gIHJldHVybiBleHRlbmQoZGVzdCwgc3JjLCB0cnVlKTtcbn0sICdtZXJnZScsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNpbXBsZSBjbGFzcyBpbmhlcml0YW5jZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2hpbGRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGJhc2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllc11cbiAqL1xuXG5mdW5jdGlvbiBpbmhlcml0KGNoaWxkLCBiYXNlLCBwcm9wZXJ0aWVzKSB7XG4gIHZhciBiYXNlUCA9IGJhc2UucHJvdG90eXBlO1xuICB2YXIgY2hpbGRQO1xuICBjaGlsZFAgPSBjaGlsZC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGJhc2VQKTtcbiAgY2hpbGRQLmNvbnN0cnVjdG9yID0gY2hpbGQ7XG4gIGNoaWxkUC5fc3VwZXIgPSBiYXNlUDtcblxuICBpZiAocHJvcGVydGllcykge1xuICAgIGFzc2lnbiQxKGNoaWxkUCwgcHJvcGVydGllcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc2ltcGxlIGZ1bmN0aW9uIGJpbmRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBiaW5kRm4oZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvdW5kRm4oKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFNpbXBsZSB3YXkgdG8gY3JlYXRlIGEgbWFuYWdlciB3aXRoIGEgZGVmYXVsdCBzZXQgb2YgcmVjb2duaXplcnMuXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG52YXIgSGFtbWVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIEhhbW1lciA9XG4gIC8qKlxuICAgICogQHByaXZhdGVcbiAgICAqIEBjb25zdCB7c3RyaW5nfVxuICAgICovXG4gIGZ1bmN0aW9uIEhhbW1lcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTWFuYWdlcihlbGVtZW50LCBfZXh0ZW5kcyh7XG4gICAgICByZWNvZ25pemVyczogcHJlc2V0LmNvbmNhdCgpXG4gICAgfSwgb3B0aW9ucykpO1xuICB9O1xuXG4gIEhhbW1lci5WRVJTSU9OID0gXCIyLjAuMTctcmNcIjtcbiAgSGFtbWVyLkRJUkVDVElPTl9BTEwgPSBESVJFQ1RJT05fQUxMO1xuICBIYW1tZXIuRElSRUNUSU9OX0RPV04gPSBESVJFQ1RJT05fRE9XTjtcbiAgSGFtbWVyLkRJUkVDVElPTl9MRUZUID0gRElSRUNUSU9OX0xFRlQ7XG4gIEhhbW1lci5ESVJFQ1RJT05fUklHSFQgPSBESVJFQ1RJT05fUklHSFQ7XG4gIEhhbW1lci5ESVJFQ1RJT05fVVAgPSBESVJFQ1RJT05fVVA7XG4gIEhhbW1lci5ESVJFQ1RJT05fSE9SSVpPTlRBTCA9IERJUkVDVElPTl9IT1JJWk9OVEFMO1xuICBIYW1tZXIuRElSRUNUSU9OX1ZFUlRJQ0FMID0gRElSRUNUSU9OX1ZFUlRJQ0FMO1xuICBIYW1tZXIuRElSRUNUSU9OX05PTkUgPSBESVJFQ1RJT05fTk9ORTtcbiAgSGFtbWVyLkRJUkVDVElPTl9ET1dOID0gRElSRUNUSU9OX0RPV047XG4gIEhhbW1lci5JTlBVVF9TVEFSVCA9IElOUFVUX1NUQVJUO1xuICBIYW1tZXIuSU5QVVRfTU9WRSA9IElOUFVUX01PVkU7XG4gIEhhbW1lci5JTlBVVF9FTkQgPSBJTlBVVF9FTkQ7XG4gIEhhbW1lci5JTlBVVF9DQU5DRUwgPSBJTlBVVF9DQU5DRUw7XG4gIEhhbW1lci5TVEFURV9QT1NTSUJMRSA9IFNUQVRFX1BPU1NJQkxFO1xuICBIYW1tZXIuU1RBVEVfQkVHQU4gPSBTVEFURV9CRUdBTjtcbiAgSGFtbWVyLlNUQVRFX0NIQU5HRUQgPSBTVEFURV9DSEFOR0VEO1xuICBIYW1tZXIuU1RBVEVfRU5ERUQgPSBTVEFURV9FTkRFRDtcbiAgSGFtbWVyLlNUQVRFX1JFQ09HTklaRUQgPSBTVEFURV9SRUNPR05JWkVEO1xuICBIYW1tZXIuU1RBVEVfQ0FOQ0VMTEVEID0gU1RBVEVfQ0FOQ0VMTEVEO1xuICBIYW1tZXIuU1RBVEVfRkFJTEVEID0gU1RBVEVfRkFJTEVEO1xuICBIYW1tZXIuTWFuYWdlciA9IE1hbmFnZXI7XG4gIEhhbW1lci5JbnB1dCA9IElucHV0O1xuICBIYW1tZXIuVG91Y2hBY3Rpb24gPSBUb3VjaEFjdGlvbjtcbiAgSGFtbWVyLlRvdWNoSW5wdXQgPSBUb3VjaElucHV0O1xuICBIYW1tZXIuTW91c2VJbnB1dCA9IE1vdXNlSW5wdXQ7XG4gIEhhbW1lci5Qb2ludGVyRXZlbnRJbnB1dCA9IFBvaW50ZXJFdmVudElucHV0O1xuICBIYW1tZXIuVG91Y2hNb3VzZUlucHV0ID0gVG91Y2hNb3VzZUlucHV0O1xuICBIYW1tZXIuU2luZ2xlVG91Y2hJbnB1dCA9IFNpbmdsZVRvdWNoSW5wdXQ7XG4gIEhhbW1lci5SZWNvZ25pemVyID0gUmVjb2duaXplcjtcbiAgSGFtbWVyLkF0dHJSZWNvZ25pemVyID0gQXR0clJlY29nbml6ZXI7XG4gIEhhbW1lci5UYXAgPSBUYXBSZWNvZ25pemVyO1xuICBIYW1tZXIuUGFuID0gUGFuUmVjb2duaXplcjtcbiAgSGFtbWVyLlN3aXBlID0gU3dpcGVSZWNvZ25pemVyO1xuICBIYW1tZXIuUGluY2ggPSBQaW5jaFJlY29nbml6ZXI7XG4gIEhhbW1lci5Sb3RhdGUgPSBSb3RhdGVSZWNvZ25pemVyO1xuICBIYW1tZXIuUHJlc3MgPSBQcmVzc1JlY29nbml6ZXI7XG4gIEhhbW1lci5vbiA9IGFkZEV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIub2ZmID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5lYWNoID0gZWFjaDtcbiAgSGFtbWVyLm1lcmdlID0gbWVyZ2U7XG4gIEhhbW1lci5leHRlbmQgPSBleHRlbmQ7XG4gIEhhbW1lci5iaW5kRm4gPSBiaW5kRm47XG4gIEhhbW1lci5hc3NpZ24gPSBhc3NpZ24kMTtcbiAgSGFtbWVyLmluaGVyaXQgPSBpbmhlcml0O1xuICBIYW1tZXIuYmluZEZuID0gYmluZEZuO1xuICBIYW1tZXIucHJlZml4ZWQgPSBwcmVmaXhlZDtcbiAgSGFtbWVyLnRvQXJyYXkgPSB0b0FycmF5O1xuICBIYW1tZXIuaW5BcnJheSA9IGluQXJyYXk7XG4gIEhhbW1lci51bmlxdWVBcnJheSA9IHVuaXF1ZUFycmF5O1xuICBIYW1tZXIuc3BsaXRTdHIgPSBzcGxpdFN0cjtcbiAgSGFtbWVyLmJvb2xPckZuID0gYm9vbE9yRm47XG4gIEhhbW1lci5oYXNQYXJlbnQgPSBoYXNQYXJlbnQ7XG4gIEhhbW1lci5hZGRFdmVudExpc3RlbmVycyA9IGFkZEV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcnMgPSByZW1vdmVFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLmRlZmF1bHRzID0gYXNzaWduJDEoe30sIGRlZmF1bHRzLCB7XG4gICAgcHJlc2V0OiBwcmVzZXRcbiAgfSk7XG4gIHJldHVybiBIYW1tZXI7XG59KCk7XG5cbi8vICBzdHlsZSBsb2FkZXIgYnV0IGJ5IHNjcmlwdCB0YWcsIG5vdCBieSB0aGUgbG9hZGVyLlxuXG52YXIgZGVmYXVsdHMkMSA9IEhhbW1lci5kZWZhdWx0cztcblxuZXhwb3J0IGRlZmF1bHQgSGFtbWVyO1xuZXhwb3J0IHsgSU5QVVRfU1RBUlQsIElOUFVUX01PVkUsIElOUFVUX0VORCwgSU5QVVRfQ0FOQ0VMLCBTVEFURV9QT1NTSUJMRSwgU1RBVEVfQkVHQU4sIFNUQVRFX0NIQU5HRUQsIFNUQVRFX0VOREVELCBTVEFURV9SRUNPR05JWkVELCBTVEFURV9DQU5DRUxMRUQsIFNUQVRFX0ZBSUxFRCwgRElSRUNUSU9OX05PTkUsIERJUkVDVElPTl9MRUZULCBESVJFQ1RJT05fUklHSFQsIERJUkVDVElPTl9VUCwgRElSRUNUSU9OX0RPV04sIERJUkVDVElPTl9IT1JJWk9OVEFMLCBESVJFQ1RJT05fVkVSVElDQUwsIERJUkVDVElPTl9BTEwsIE1hbmFnZXIsIElucHV0LCBUb3VjaEFjdGlvbiwgVG91Y2hJbnB1dCwgTW91c2VJbnB1dCwgUG9pbnRlckV2ZW50SW5wdXQsIFRvdWNoTW91c2VJbnB1dCwgU2luZ2xlVG91Y2hJbnB1dCwgUmVjb2duaXplciwgQXR0clJlY29nbml6ZXIsIFRhcFJlY29nbml6ZXIgYXMgVGFwLCBQYW5SZWNvZ25pemVyIGFzIFBhbiwgU3dpcGVSZWNvZ25pemVyIGFzIFN3aXBlLCBQaW5jaFJlY29nbml6ZXIgYXMgUGluY2gsIFJvdGF0ZVJlY29nbml6ZXIgYXMgUm90YXRlLCBQcmVzc1JlY29nbml6ZXIgYXMgUHJlc3MsIGFkZEV2ZW50TGlzdGVuZXJzIGFzIG9uLCByZW1vdmVFdmVudExpc3RlbmVycyBhcyBvZmYsIGVhY2gsIG1lcmdlLCBleHRlbmQsIGFzc2lnbiQxIGFzIGFzc2lnbiwgaW5oZXJpdCwgYmluZEZuLCBwcmVmaXhlZCwgdG9BcnJheSwgaW5BcnJheSwgdW5pcXVlQXJyYXksIHNwbGl0U3RyLCBib29sT3JGbiwgaGFzUGFyZW50LCBhZGRFdmVudExpc3RlbmVycywgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMsIGRlZmF1bHRzJDEgYXMgZGVmYXVsdHMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhbW1lci5lc20uanMubWFwXG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmlsbCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWxsO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWxsKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZpbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiLyoqXG4gKiB2aXMtdXRpbFxuICogaHR0cHM6Ly9naXRodWIuY29tL3Zpc2pzL3Zpcy11dGlsXG4gKlxuICogdXRpbGl0aWUgY29sbGVjdGlvbiBmb3IgdmlzanNcbiAqXG4gKiBAdmVyc2lvbiA1LjAuNVxuICogQGRhdGUgICAgMjAyMy0xMC0wM1QxODo0Nzo1OC4wNjFaXG4gKlxuICogQGNvcHlyaWdodCAoYykgMjAxMS0yMDE3IEFsbWVuZGUgQi5WLCBodHRwOi8vYWxtZW5kZS5jb21cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTctMjAxOSB2aXNqcyBjb250cmlidXRvcnMsIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqc1xuICpcbiAqIEBsaWNlbnNlXG4gKiB2aXMuanMgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciBib3RoXG4gKlxuICogICAxLiBUaGUgQXBhY2hlIDIuMCBMaWNlbnNlXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICAgYW5kXG4gKlxuICogICAyLiBUaGUgTUlUIExpY2Vuc2VcbiAqICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICpcbiAqIHZpcy5qcyBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IEVtaXR0ZXIgZnJvbSAnY29tcG9uZW50LWVtaXR0ZXInO1xuaW1wb3J0IFJlYWxIYW1tZXIgZnJvbSAnQGVnanMvaGFtbWVyanMnO1xuXG4vKipcclxuICogVXNlIHRoaXMgc3ltYm9sIHRvIGRlbGV0ZSBwcm9wZXJpZXMgaW4gZGVlcE9iamVjdEFzc2lnbi5cclxuICovXHJcbmNvbnN0IERFTEVURSA9IFN5bWJvbChcIkRFTEVURVwiKTtcclxuLyoqXHJcbiAqIFB1cmUgdmVyc2lvbiBvZiBkZWVwT2JqZWN0QXNzaWduLCBpdCBkb2Vzbid0IG1vZGlmeSBhbnkgb2YgaXQncyBhcmd1bWVudHMuXHJcbiAqXHJcbiAqIEBwYXJhbSBiYXNlIC0gVGhlIGJhc2Ugb2JqZWN0IHRoYXQgZnVsbGZpbHMgdGhlIHdob2xlIGludGVyZmFjZSBULlxyXG4gKiBAcGFyYW0gdXBkYXRlcyAtIFVwZGF0ZXMgdGhhdCBtYXkgY2hhbmdlIG9yIGRlbGV0ZSBwcm9wcy5cclxuICogQHJldHVybnMgQSBicmFuZCBuZXcgaW5zdGFuY2Ugd2l0aCBhbGwgdGhlIHN1cHBsaWVkIG9iamVjdHMgZGVlcGx5IG1lcmdlZC5cclxuICovXHJcbmZ1bmN0aW9uIHB1cmVEZWVwT2JqZWN0QXNzaWduKGJhc2UsIC4uLnVwZGF0ZXMpIHtcclxuICAgIHJldHVybiBkZWVwT2JqZWN0QXNzaWduKHt9LCBiYXNlLCAuLi51cGRhdGVzKTtcclxufVxyXG4vKipcclxuICogRGVlcCB2ZXJzaW9uIG9mIG9iamVjdCBhc3NpZ24gd2l0aCBhZGRpdGlvbmFsIGRlbGV0aW5nIGJ5IHRoZSBERUxFVEUgc3ltYm9sLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWVzIC0gT2JqZWN0cyB0byBiZSBkZWVwbHkgbWVyZ2VkLlxyXG4gKiBAcmV0dXJucyBUaGUgZmlyc3Qgb2JqZWN0IGZyb20gdmFsdWVzLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVlcE9iamVjdEFzc2lnbiguLi52YWx1ZXMpIHtcclxuICAgIGNvbnN0IG1lcmdlZCA9IGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSguLi52YWx1ZXMpO1xyXG4gICAgc3RyaXBEZWxldGUobWVyZ2VkKTtcclxuICAgIHJldHVybiBtZXJnZWQ7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgdmVyc2lvbiBvZiBvYmplY3QgYXNzaWduIHdpdGggYWRkaXRpb25hbCBkZWxldGluZyBieSB0aGUgREVMRVRFIHN5bWJvbC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhpcyBkb2Vzbid0IHN0cmlwIHRoZSBERUxFVEUgc3ltYm9scyBzbyB0aGV5IG1heSBlbmQgdXAgaW4gdGhlIGZpbmFsIG9iamVjdC5cclxuICogQHBhcmFtIHZhbHVlcyAtIE9iamVjdHMgdG8gYmUgZGVlcGx5IG1lcmdlZC5cclxuICogQHJldHVybnMgVGhlIGZpcnN0IG9iamVjdCBmcm9tIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSguLi52YWx1ZXMpIHtcclxuICAgIGlmICh2YWx1ZXMubGVuZ3RoIDwgMikge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZXNbMF07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID4gMikge1xyXG4gICAgICAgIHJldHVybiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoZGVlcE9iamVjdEFzc2lnbih2YWx1ZXNbMF0sIHZhbHVlc1sxXSksIC4uLnZhbHVlcy5zbGljZSgyKSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhID0gdmFsdWVzWzBdO1xyXG4gICAgY29uc3QgYiA9IHZhbHVlc1sxXTtcclxuICAgIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgIGEuc2V0VGltZShiLmdldFRpbWUoKSk7XHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgUmVmbGVjdC5vd25LZXlzKGIpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoYiwgcHJvcCkpIDtcclxuICAgICAgICBlbHNlIGlmIChiW3Byb3BdID09PSBERUxFVEUpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGFbcHJvcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgYltwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgYltwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShhW3Byb3BdKSAmJlxyXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KGFbcHJvcF0sIGJbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IGNsb25lKGJbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIGNsb25lIGdpdmVuIG9iamVjdCBvciBhcnJheS4gSW4gY2FzZSBvZiBwcmltaXRpdmUgc2ltcGx5IHJldHVybi5cclxuICpcclxuICogQHBhcmFtIGEgLSBBbnl0aGluZy5cclxuICogQHJldHVybnMgRGVlcCBjbG9uZWQgb2JqZWN0L2FycmF5IG9yIHVuY2hhbmdlZCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gY2xvbmUoYSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcclxuICAgICAgICByZXR1cm4gYS5tYXAoKHZhbHVlKSA9PiBjbG9uZSh2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGEgPT09IFwib2JqZWN0XCIgJiYgYSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChhIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoYS5nZXRUaW1lKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KHt9LCBhKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBTdHJpcCBERUxFVEUgZnJvbSBnaXZlbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gT2JqZWN0IHdoaWNoIG1heSBjb250YWluIERFTEVURSBidXQgd29uJ3QgYWZ0ZXIgdGhpcyBpcyBleGVjdXRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHN0cmlwRGVsZXRlKGEpIHtcclxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhhKSkge1xyXG4gICAgICAgIGlmIChhW3Byb3BdID09PSBERUxFVEUpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGFbcHJvcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBhW3Byb3BdID09PSBcIm9iamVjdFwiICYmIGFbcHJvcF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgc3RyaXBEZWxldGUoYVtwcm9wXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbi8qKlxyXG4gKiBTZWVkYWJsZSwgZmFzdCBhbmQgcmVhc29uYWJseSBnb29kIChub3QgY3J5cHRvIGJ1dCBtb3JlIHRoYW4gb2theSBmb3Igb3VyXHJcbiAqIG5lZWRzKSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci5cclxuICpcclxuICogQHJlbWFya3NcclxuICogQWRhcHRlZCBmcm9tIHtAbGluayBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMTA0MjkxMDA3MzYvaHR0cDovL2JhYWdvZS5jb206ODAvZW4vUmFuZG9tTXVzaW5ncy9qYXZhc2NyaXB0fS5cclxuICogT3JpZ2luYWwgYWxnb3JpdGhtIGNyZWF0ZWQgYnkgSm9oYW5uZXMgQmFhZ8O4ZSBcXDxiYWFnb2VcXEBiYWFnb2UuY29tXFw+IGluIDIwMTAuXHJcbiAqL1xyXG4vKipcclxuICogQ3JlYXRlIGEgc2VlZGVkIHBzZXVkbyByYW5kb20gZ2VuZXJhdG9yIGJhc2VkIG9uIEFsZWEgYnkgSm9oYW5uZXMgQmFhZ8O4ZS5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBBbGwgc3VwcGxpZWQgYXJndW1lbnRzIHdpbGwgYmUgdXNlZCBhcyBhIHNlZWQuIEluIGNhc2Ugbm90aGluZ1xyXG4gKiBpcyBzdXBwbGllZCB0aGUgY3VycmVudCB0aW1lIHdpbGwgYmUgdXNlZCB0byBzZWVkIHRoZSBnZW5lcmF0b3IuXHJcbiAqIEByZXR1cm5zIEEgcmVhZHkgdG8gdXNlIHNlZWRlZCBnZW5lcmF0b3IuXHJcbiAqL1xyXG5mdW5jdGlvbiBBbGVhKC4uLnNlZWQpIHtcclxuICAgIHJldHVybiBBbGVhSW1wbGVtZW50YXRpb24oc2VlZC5sZW5ndGggPyBzZWVkIDogW0RhdGUubm93KCldKTtcclxufVxyXG4vKipcclxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgW1tBbGVhXV0gd2l0aG91dCB1c2VyIGlucHV0IHZhbGlkYXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gVGhlIGRhdGEgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc2VlZCB0aGUgZ2VuZXJhdG9yLlxyXG4gKiBAcmV0dXJucyBBIHJlYWR5IHRvIHVzZSBzZWVkZWQgZ2VuZXJhdG9yLlxyXG4gKi9cclxuZnVuY3Rpb24gQWxlYUltcGxlbWVudGF0aW9uKHNlZWQpIHtcclxuICAgIGxldCBbczAsIHMxLCBzMl0gPSBtYXNoU2VlZChzZWVkKTtcclxuICAgIGxldCBjID0gMTtcclxuICAgIGNvbnN0IHJhbmRvbSA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCB0ID0gMjA5MTYzOSAqIHMwICsgYyAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXHJcbiAgICAgICAgczAgPSBzMTtcclxuICAgICAgICBzMSA9IHMyO1xyXG4gICAgICAgIHJldHVybiAoczIgPSB0IC0gKGMgPSB0IHwgMCkpO1xyXG4gICAgfTtcclxuICAgIHJhbmRvbS51aW50MzIgPSAoKSA9PiByYW5kb20oKSAqIDB4MTAwMDAwMDAwOyAvLyAyXjMyXHJcbiAgICByYW5kb20uZnJhY3Q1MyA9ICgpID0+IHJhbmRvbSgpICsgKChyYW5kb20oKSAqIDB4MjAwMDAwKSB8IDApICogMS4xMTAyMjMwMjQ2MjUxNTY1ZS0xNjsgLy8gMl4tNTNcclxuICAgIHJhbmRvbS5hbGdvcml0aG0gPSBcIkFsZWFcIjtcclxuICAgIHJhbmRvbS5zZWVkID0gc2VlZDtcclxuICAgIHJhbmRvbS52ZXJzaW9uID0gXCIwLjlcIjtcclxuICAgIHJldHVybiByYW5kb207XHJcbn1cclxuLyoqXHJcbiAqIFR1cm4gYXJiaXRyYXJ5IGRhdGEgaW50byB2YWx1ZXMgW1tBbGVhSW1wbGVtZW50YXRpb25dXSBjYW4gdXNlIHRvIGdlbmVyYXRlXHJcbiAqIHJhbmRvbSBudW1iZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIEFyYml0cmFyeSBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWVkLlxyXG4gKiBAcmV0dXJucyBUaHJlZSBudW1iZXJzIHRvIHVzZSBhcyBpbml0aWFsIHZhbHVlcyBmb3IgW1tBbGVhSW1wbGVtZW50YXRpb25dXS5cclxuICovXHJcbmZ1bmN0aW9uIG1hc2hTZWVkKC4uLnNlZWQpIHtcclxuICAgIGNvbnN0IG1hc2ggPSBNYXNoKCk7XHJcbiAgICBsZXQgczAgPSBtYXNoKFwiIFwiKTtcclxuICAgIGxldCBzMSA9IG1hc2goXCIgXCIpO1xyXG4gICAgbGV0IHMyID0gbWFzaChcIiBcIik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZWQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBzMCAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMCA8IDApIHtcclxuICAgICAgICAgICAgczAgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgczEgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczEgPCAwKSB7XHJcbiAgICAgICAgICAgIHMxICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMyIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMyIDwgMCkge1xyXG4gICAgICAgICAgICBzMiArPSAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbczAsIHMxLCBzMl07XHJcbn1cclxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyBtYXNoIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJucyBBIG5vbnB1cmUgZnVuY3Rpb24gdGhhdCB0YWtlcyBhcmJpdHJhcnkgW1tNYXNoYWJsZV1dIGRhdGEgYW5kIHR1cm5zXHJcbiAqIHRoZW0gaW50byBudW1iZXJzLlxyXG4gKi9cclxuZnVuY3Rpb24gTWFzaCgpIHtcclxuICAgIGxldCBuID0gMHhlZmM4MjQ5ZDtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHN0cmluZyA9IGRhdGEudG9TdHJpbmcoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBuICs9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgICAgICBsZXQgaCA9IDAuMDI1MTk2MDMyODI0MTY5MzggKiBuO1xyXG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcclxuICAgICAgICAgICAgaCAtPSBuO1xyXG4gICAgICAgICAgICBoICo9IG47XHJcbiAgICAgICAgICAgIG4gPSBoID4+PiAwO1xyXG4gICAgICAgICAgICBoIC09IG47XHJcbiAgICAgICAgICAgIG4gKz0gaCAqIDB4MTAwMDAwMDAwOyAvLyAyXjMyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAobiA+Pj4gMCkgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxyXG4gICAgfTtcclxufVxuXG4vKipcbiAqIFNldHVwIGEgbW9jayBoYW1tZXIuanMgb2JqZWN0LCBmb3IgdW5pdCB0ZXN0aW5nLlxuICpcbiAqIEluc3BpcmF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20vdWJlci9kZWNrLmdsL3B1bGwvNjU4XG4gKlxuICogQHJldHVybnMge3tvbjogbm9vcCwgb2ZmOiBub29wLCBkZXN0cm95OiBub29wLCBlbWl0OiBub29wLCBnZXQ6IGdldH19XG4gKi9cbmZ1bmN0aW9uIGhhbW1lck1vY2soKSB7XG4gIGNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuICByZXR1cm4ge1xuICAgIG9uOiBub29wLFxuICAgIG9mZjogbm9vcCxcbiAgICBkZXN0cm95OiBub29wLFxuICAgIGVtaXQ6IG5vb3AsXG5cbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXQ6IG5vb3AsXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59XG5cbmNvbnN0IEhhbW1lciQxID1cbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIlxuICAgID8gd2luZG93LkhhbW1lciB8fCBSZWFsSGFtbWVyXG4gICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGhhbW1lci5qcyBpcyBvbmx5IGF2YWlsYWJsZSBpbiBhIGJyb3dzZXIsIG5vdCBpbiBub2RlLmpzLiBSZXBsYWNpbmcgaXQgd2l0aCBhIG1vY2sgb2JqZWN0LlxuICAgICAgICByZXR1cm4gaGFtbWVyTW9jaygpO1xuICAgICAgfTtcblxuLyoqXG4gKiBUdXJuIGFuIGVsZW1lbnQgaW50byBhbiBjbGlja1RvVXNlIGVsZW1lbnQuXG4gKiBXaGVuIG5vdCBhY3RpdmUsIHRoZSBlbGVtZW50IGhhcyBhIHRyYW5zcGFyZW50IG92ZXJsYXkuIFdoZW4gdGhlIG92ZXJsYXkgaXNcbiAqIGNsaWNrZWQsIHRoZSBtb2RlIGlzIGNoYW5nZWQgdG8gYWN0aXZlLlxuICogV2hlbiBhY3RpdmUsIHRoZSBlbGVtZW50IGlzIGRpc3BsYXllZCB3aXRoIGEgYmx1ZSBib3JkZXIgYXJvdW5kIGl0LCBhbmRcbiAqIHRoZSBpbnRlcmFjdGl2ZSBjb250ZW50cyBvZiB0aGUgZWxlbWVudCBjYW4gYmUgdXNlZC4gV2hlbiBjbGlja2VkIG91dHNpZGVcbiAqIHRoZSBlbGVtZW50LCB0aGUgZWxlbWVudHMgbW9kZSBpcyBjaGFuZ2VkIHRvIGluYWN0aXZlLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyXG4gKiBAY2xhc3MgQWN0aXZhdG9yXG4gKi9cbmZ1bmN0aW9uIEFjdGl2YXRvciQxKGNvbnRhaW5lcikge1xuICB0aGlzLl9jbGVhbnVwUXVldWUgPSBbXTtcblxuICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuXG4gIHRoaXMuX2RvbSA9IHtcbiAgICBjb250YWluZXIsXG4gICAgb3ZlcmxheTogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxcbiAgfTtcblxuICB0aGlzLl9kb20ub3ZlcmxheS5jbGFzc0xpc3QuYWRkKFwidmlzLW92ZXJsYXlcIik7XG5cbiAgdGhpcy5fZG9tLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIHRoaXMuX2NsZWFudXBRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICB0aGlzLl9kb20ub3ZlcmxheS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgfSk7XG5cbiAgY29uc3QgaGFtbWVyID0gSGFtbWVyJDEodGhpcy5fZG9tLm92ZXJsYXkpO1xuICBoYW1tZXIub24oXCJ0YXBcIiwgdGhpcy5fb25UYXBPdmVybGF5LmJpbmQodGhpcykpO1xuICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgaGFtbWVyLmRlc3Ryb3koKTtcbiAgICAvLyBGSVhNRTogY2xlYW5pbmcgdXAgaGFtbWVyIGluc3RhbmNlcyBkb2Vzbid0IHdvcmsgKFRpbWVsaW5lIG5vdCByZW1vdmVkXG4gICAgLy8gZnJvbSBtZW1vcnkpXG4gIH0pO1xuXG4gIC8vIGJsb2NrIGFsbCB0b3VjaCBldmVudHMgKGV4Y2VwdCB0YXApXG4gIGNvbnN0IGV2ZW50cyA9IFtcbiAgICBcInRhcFwiLFxuICAgIFwiZG91YmxldGFwXCIsXG4gICAgXCJwcmVzc1wiLFxuICAgIFwicGluY2hcIixcbiAgICBcInBhblwiLFxuICAgIFwicGFuc3RhcnRcIixcbiAgICBcInBhbm1vdmVcIixcbiAgICBcInBhbmVuZFwiLFxuICBdO1xuICBldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICBoYW1tZXIub24oZXZlbnQsIChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuc3JjRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGF0dGFjaCBhIGNsaWNrIGV2ZW50IHRvIHRoZSB3aW5kb3csIGluIG9yZGVyIHRvIGRlYWN0aXZhdGUgd2hlbiBjbGlja2luZyBvdXRzaWRlIHRoZSB0aW1lbGluZVxuICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQuYm9keSkge1xuICAgIHRoaXMuX29uQ2xpY2sgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmICghX2hhc1BhcmVudChldmVudC50YXJnZXQsIGNvbnRhaW5lcikpIHtcbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9vbkNsaWNrKTtcbiAgICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9vbkNsaWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHByZXBhcmUgZXNjYXBlIGtleSBsaXN0ZW5lciBmb3IgZGVhY3RpdmF0aW5nIHdoZW4gYWN0aXZlXG4gIHRoaXMuX2VzY0xpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKFxuICAgICAgXCJrZXlcIiBpbiBldmVudFxuICAgICAgICA/IGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIlxuICAgICAgICA6IGV2ZW50LmtleUNvZGUgPT09IDI3IC8qIHRoZSBrZXlDb2RlIGlzIGZvciBJRTExICovXG4gICAgKSB7XG4gICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgICB9XG4gIH07XG59XG5cbi8vIHR1cm4gaW50byBhbiBldmVudCBlbWl0dGVyXG5FbWl0dGVyKEFjdGl2YXRvciQxLnByb3RvdHlwZSk7XG5cbi8vIFRoZSBjdXJyZW50bHkgYWN0aXZlIGFjdGl2YXRvclxuQWN0aXZhdG9yJDEuY3VycmVudCA9IG51bGw7XG5cbi8qKlxuICogRGVzdHJveSB0aGUgYWN0aXZhdG9yLiBDbGVhbnMgdXAgYWxsIGNyZWF0ZWQgRE9NIGFuZCBldmVudCBsaXN0ZW5lcnNcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZGVhY3RpdmF0ZSgpO1xuXG4gIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgdGhpcy5fY2xlYW51cFF1ZXVlLnNwbGljZSgwKS5yZXZlcnNlKCkpIHtcbiAgICBjYWxsYmFjaygpO1xuICB9XG59O1xuXG4vKipcbiAqIEFjdGl2YXRlIHRoZSBlbGVtZW50XG4gKiBPdmVybGF5IGlzIGhpZGRlbiwgZWxlbWVudCBpcyBkZWNvcmF0ZWQgd2l0aCBhIGJsdWUgc2hhZG93IGJvcmRlclxuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIHdlIGFsbG93IG9ubHkgb25lIGFjdGl2ZSBhY3RpdmF0b3IgYXQgYSB0aW1lXG4gIGlmIChBY3RpdmF0b3IkMS5jdXJyZW50KSB7XG4gICAgQWN0aXZhdG9yJDEuY3VycmVudC5kZWFjdGl2YXRlKCk7XG4gIH1cbiAgQWN0aXZhdG9yJDEuY3VycmVudCA9IHRoaXM7XG5cbiAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICB0aGlzLl9kb20ub3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gIHRoaXMuX2RvbS5jb250YWluZXIuY2xhc3NMaXN0LmFkZChcInZpcy1hY3RpdmVcIik7XG5cbiAgdGhpcy5lbWl0KFwiY2hhbmdlXCIpO1xuICB0aGlzLmVtaXQoXCJhY3RpdmF0ZVwiKTtcblxuICAvLyB1Z2x5IGhhY2s6IGJpbmQgRVNDIGFmdGVyIGVtaXR0aW5nIHRoZSBldmVudHMsIGFzIHRoZSBOZXR3b3JrIHJlYmluZHMgYWxsXG4gIC8vIGtleWJvYXJkIGV2ZW50cyBvbiBhICdjaGFuZ2UnIGV2ZW50XG4gIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5fZXNjTGlzdGVuZXIpO1xufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRlIHRoZSBlbGVtZW50XG4gKiBPdmVybGF5IGlzIGRpc3BsYXllZCBvbiB0b3Agb2YgdGhlIGVsZW1lbnRcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gIHRoaXMuX2RvbS5vdmVybGF5LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gIHRoaXMuX2RvbS5jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcInZpcy1hY3RpdmVcIik7XG4gIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5fZXNjTGlzdGVuZXIpO1xuXG4gIHRoaXMuZW1pdChcImNoYW5nZVwiKTtcbiAgdGhpcy5lbWl0KFwiZGVhY3RpdmF0ZVwiKTtcbn07XG5cbi8qKlxuICogSGFuZGxlIGEgdGFwIGV2ZW50OiBhY3RpdmF0ZSB0aGUgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuX29uVGFwT3ZlcmxheSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAvLyBhY3RpdmF0ZSB0aGUgY29udGFpbmVyXG4gIHRoaXMuYWN0aXZhdGUoKTtcbiAgZXZlbnQuc3JjRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59O1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgZWxlbWVudCBoYXMgdGhlIHJlcXVlc3RlZCBwYXJlbnQgZWxlbWVudCBzb21ld2hlcmUgaW5cbiAqIGl0cyBjaGFpbiBvZiBwYXJlbnQgbm9kZXMuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHBhcmVudCBpcyBmb3VuZCBzb21ld2hlcmUgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgY2hhaW4gb2YgcGFyZW50IG5vZGVzLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2hhc1BhcmVudChlbGVtZW50LCBwYXJlbnQpIHtcbiAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudCA9PT0gcGFyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIHV0aWxpdHkgZnVuY3Rpb25zXHJcbi8vIHBhcnNlIEFTUC5OZXQgRGF0ZSBwYXR0ZXJuLFxyXG4vLyBmb3IgZXhhbXBsZSAnL0RhdGUoMTE5ODkwODcxNzA1NikvJyBvciAnL0RhdGUoMTE5ODkwODcxNzA1Ni0wNzAwKS8nXHJcbi8vIGNvZGUgZnJvbSBodHRwOi8vbW9tZW50anMuY29tL1xyXG5jb25zdCBBU1BEYXRlUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaTtcclxuLy8gQ29sb3IgUkVzXHJcbmNvbnN0IGZ1bGxIZXhSRSA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2k7XHJcbmNvbnN0IHNob3J0SGV4UkUgPSAvXiM/KFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pJC9pO1xyXG5jb25zdCByZ2JSRSA9IC9ecmdiXFwoICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICpcXCkkL2k7XHJcbmNvbnN0IHJnYmFSRSA9IC9ecmdiYVxcKCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKFswMV18MD9cXC5cXGQrKSAqXFwpJC9pO1xyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIG51bWJlci5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIG51bWJlciwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE51bWJlciB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBldmVyeXRoaW5nIGluIHRoZSBET00gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gRE9Nb2JqZWN0IC0gTm9kZSB3aG9zZSBjaGlsZCBub2RlcyB3aWxsIGJlIHJlY3Vyc2l2ZWx5IGRlbGV0ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiByZWN1cnNpdmVET01EZWxldGUoRE9Nb2JqZWN0KSB7XHJcbiAgICBpZiAoRE9Nb2JqZWN0KSB7XHJcbiAgICAgICAgd2hpbGUgKERPTW9iamVjdC5oYXNDaGlsZE5vZGVzKCkgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBET01vYmplY3QuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgaWYgKGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVET01EZWxldGUoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgRE9Nb2JqZWN0LnJlbW92ZUNoaWxkKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHN0cmluZywgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBvYmplY3QgKG5vdCBwcmltaXRpdmUgb3IgbnVsbCkuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBub3QgbnVsbCBvYmplY3QsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgRGF0ZSwgb3IgYSBTdHJpbmcgY29udGFpbmluZyBhIERhdGUuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBEYXRlIGluc3RhbmNlIG9yIHN0cmluZyBkYXRlIHJlcHJlc2VudGF0aW9uLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgIC8vIHRlc3Qgd2hldGhlciB0aGlzIHN0cmluZyBjb250YWlucyBhIGRhdGVcclxuICAgICAgICBjb25zdCBtYXRjaCA9IEFTUERhdGVSZWdleC5leGVjKHZhbHVlKTtcclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFpc05hTihEYXRlLnBhcnNlKHZhbHVlKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbi8qKlxyXG4gKiBDb3B5IHByb3BlcnR5IGZyb20gYiB0byBhIGlmIHByb3BlcnR5IHByZXNlbnQgaW4gYS5cclxuICogSWYgcHJvcGVydHkgaW4gYiBleHBsaWNpdGx5IHNldCB0byBudWxsLCBkZWxldGUgaXQgaWYgYGFsbG93RGVsZXRpb25gIHNldC5cclxuICpcclxuICogSW50ZXJuYWwgaGVscGVyIHJvdXRpbmUsIHNob3VsZCBub3QgYmUgZXhwb3J0ZWQuIE5vdCBhZGRlZCB0byBgZXhwb3J0c2AgZm9yIHRoYXQgcmVhc29uLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRhcmdldCBvYmplY3QuXHJcbiAqIEBwYXJhbSBiIC0gU291cmNlIG9iamVjdC5cclxuICogQHBhcmFtIHByb3AgLSBOYW1lIG9mIHByb3BlcnR5IHRvIGNvcHkgZnJvbSBiIHRvIGEuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnR5IGluIGEgaWYgZXhwbGljaXRseSBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pIHtcclxuICAgIGxldCBkb0RlbGV0aW9uID0gZmFsc2U7XHJcbiAgICBpZiAoYWxsb3dEZWxldGlvbiA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGRvRGVsZXRpb24gPSBiW3Byb3BdID09PSBudWxsICYmIGFbcHJvcF0gIT09IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGlmIChkb0RlbGV0aW9uKSB7XHJcbiAgICAgICAgZGVsZXRlIGFbcHJvcF07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBhW3Byb3BdID0gYltwcm9wXTsgLy8gUmVtZW1iZXIsIHRoaXMgaXMgYSByZWZlcmVuY2UgY29weSFcclxuICAgIH1cclxufVxyXG4vKipcclxuICogRmlsbCBhbiBvYmplY3Qgd2l0aCBhIHBvc3NpYmx5IHBhcnRpYWxseSBkZWZpbmVkIG90aGVyIG9iamVjdC5cclxuICpcclxuICogT25seSBjb3BpZXMgdmFsdWVzIGZvciB0aGUgcHJvcGVydGllcyBhbHJlYWR5IHByZXNlbnQgaW4gYS5cclxuICogVGhhdCBtZWFucyBhbiBvYmplY3QgaXMgbm90IGNyZWF0ZWQgb24gYSBwcm9wZXJ0eSBpZiBvbmx5IHRoZSBiIG9iamVjdCBoYXMgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIG9iamVjdCB0aGF0IHdpbGwgaGF2ZSBpdCdzIHByb3BlcnRpZXMgdXBkYXRlZC5cclxuICogQHBhcmFtIGIgLSBUaGUgb2JqZWN0IHdpdGggcHJvcGVydHkgdXBkYXRlcy5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydGllcyBpbiBhIHRoYXQgYXJlIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICovXHJcbmZ1bmN0aW9uIGZpbGxJZkRlZmluZWQoYSwgYiwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICAvLyBOT1RFOiBpdGVyYXRpb24gb2YgcHJvcGVydGllcyBvZiBhXHJcbiAgICAvLyBOT1RFOiBwcm90b3R5cGUgcHJvcGVydGllcyBpdGVyYXRlZCBvdmVyIGFzIHdlbGxcclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBhKSB7XHJcbiAgICAgICAgaWYgKGJbcHJvcF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAoYltwcm9wXSA9PT0gbnVsbCB8fCB0eXBlb2YgYltwcm9wXSAhPT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gTm90ZTogdHlwZW9mIG51bGwgPT09ICdvYmplY3QnXHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhUHJvcCA9IGFbcHJvcF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBiUHJvcCA9IGJbcHJvcF07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QoYVByb3ApICYmIGlzT2JqZWN0KGJQcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGxJZkRlZmluZWQoYVByb3AsIGJQcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIG9mIGFsbCBvZiB0aGUgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGFcclxuICogdGFyZ2V0IG9iamVjdC4gUmV0dXJucyB0aGUgdGFyZ2V0IG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIGNvcHkgdG8uXHJcbiAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCBmcm9tIHdoaWNoIHRvIGNvcHkgcHJvcGVydGllcy5cclxuICogQHJldHVybnMgVGhlIHRhcmdldCBvYmplY3QuXHJcbiAqL1xyXG5jb25zdCBleHRlbmQgPSBPYmplY3QuYXNzaWduO1xyXG4vKipcclxuICogRXh0ZW5kIG9iamVjdCBhIHdpdGggc2VsZWN0ZWQgcHJvcGVydGllcyBvZiBvYmplY3QgYiBvciBhIHNlcmllcyBvZiBvYmplY3RzLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKiBAcGFyYW0gcHJvcHMgLSBQcm9wZXJ0aWVzIHRvIGJlIGNvcGllZCB0byBhLlxyXG4gKiBAcGFyYW0gYSAtIFRoZSB0YXJnZXQuXHJcbiAqIEBwYXJhbSBvdGhlcnMgLSBUaGUgc291cmNlcy5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZUV4dGVuZChwcm9wcywgYSwgLi4ub3RoZXJzKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcHMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXJyYXkgd2l0aCBwcm9wZXJ0eSBuYW1lcyBleHBlY3RlZCBhcyBmaXJzdCBhcmd1bWVudFwiKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgb3RoZXIgb2Ygb3RoZXJzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBwcm9wcy5sZW5ndGg7IHArKykge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbcF07XHJcbiAgICAgICAgICAgIGlmIChvdGhlciAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdID0gb3RoZXJbcHJvcF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRXh0ZW5kIG9iamVjdCBhIHdpdGggc2VsZWN0ZWQgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cclxuICogT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZCB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogUHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIHJvdXRpbmUgaW1wbGllZCB0aGF0IG11bHRpcGxlIHNvdXJjZSBvYmplY3RzIGNvdWxkXHJcbiAqIGJlIHVzZWQ7IGhvd2V2ZXIsIHRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgKip3cm9uZyoqLiBTaW5jZSBtdWx0aXBsZSAoXFw+MSlcclxuICogc291cmNlcyB3ZXJlbid0IHVzZWQgYW55d2hlcmUgaW4gdGhlIGB2aXMuanNgIGNvZGUsIHRoaXMgaGFzIGJlZW4gcmVtb3ZlZFxyXG4gKiBAcGFyYW0gcHJvcHMgLSBOYW1lcyBvZiBmaXJzdC1sZXZlbCBwcm9wZXJ0aWVzIHRvIGNvcHkgb3Zlci5cclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnR5IGluIGEgaWYgZXhwbGljaXRseSBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlRGVlcEV4dGVuZChwcm9wcywgYSwgYiwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgQXJyYXlzIHRvIGRlZXBFeHRlbmRcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgcCA9IDA7IHAgPCBwcm9wcy5sZW5ndGg7IHArKykge1xyXG4gICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1twXTtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHByb3ApKSB7XHJcbiAgICAgICAgICAgIGlmIChiW3Byb3BdICYmIGJbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFbcHJvcF0gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0sIGZhbHNlLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRXh0ZW5kIG9iamVjdCBgYWAgd2l0aCBwcm9wZXJ0aWVzIG9mIG9iamVjdCBgYmAsIGlnbm9yaW5nIHByb3BlcnRpZXMgd2hpY2hcclxuICogYXJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHRvIGJlIGV4Y2x1ZGVkLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBUaGUgcHJvcGVydGllcyBvZiBgYmAgYXJlIGNvbnNpZGVyZWQgZm9yIGNvcHlpbmcuIFByb3BlcnRpZXMgd2hpY2ggYXJlXHJcbiAqIHRoZW1zZWx2ZXMgb2JqZWN0cyBhcmUgYXJlIGFsc28gZXh0ZW5kZWQuIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWRcclxuICogdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBwcm9wc1RvRXhjbHVkZSAtIE5hbWVzIG9mIHByb3BlcnRpZXMgd2hpY2ggc2hvdWxkICpub3QqIGJlIGNvcGllZC5cclxuICogQHBhcmFtIGEgLSBPYmplY3QgdG8gZXh0ZW5kLlxyXG4gKiBAcGFyYW0gYiAtIE9iamVjdCB0byB0YWtlIHByb3BlcnRpZXMgZnJvbSBmb3IgZXh0ZW5zaW9uLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0aWVzIGluIGEgdGhhdCBhcmUgZXhwbGljaXRseVxyXG4gKiBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlTm90RGVlcEV4dGVuZChwcm9wc1RvRXhjbHVkZSwgYSwgYiwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgQXJyYXlzIHRvIGRlZXBFeHRlbmRcclxuICAgIC8vIE5PVEU6IGFycmF5IHByb3BlcnRpZXMgaGF2ZSBhbiBlbHNlLWJlbG93OyBhcHBhcmVudGx5LCB0aGVyZSBpcyBhIHByb2JsZW0gaGVyZS5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwcm9wIGluIGIpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9IC8vIEhhbmRsZSBsb2NhbCBwcm9wZXJ0aWVzIG9ubHlcclxuICAgICAgICBpZiAocHJvcHNUb0V4Y2x1ZGUuaW5jbHVkZXMocHJvcCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSAvLyBJbiBleGNsdXNpb24gbGlzdCwgc2tpcFxyXG4gICAgICAgIGlmIChiW3Byb3BdICYmIGJbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoYVtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGFbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdKTsgLy8gTk9URTogYWxsb3dEZWxldGlvbiBub3QgcHJvcGFnYXRlZCFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiW3Byb3BdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdLnB1c2goYltwcm9wXVtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRGVlcCBleHRlbmQgYW4gb2JqZWN0IGEgd2l0aCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cclxuICpcclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBwcm90b0V4dGVuZCAtIElmIHRydWUsIHRoZSBwcm90b3R5cGUgdmFsdWVzIHdpbGwgYWxzbyBiZSBleHRlbmRlZC5cclxuICogKFRoYXQgaXMgdGhlIG9wdGlvbnMgb2JqZWN0cyB0aGF0IGluaGVyaXQgZnJvbSBvdGhlcnMgd2lsbCBhbHNvIGdldCB0aGVcclxuICogaW5oZXJpdGVkIG9wdGlvbnMpLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIHRoZSB2YWx1ZXMgb2YgZmllbGRzIHRoYXQgYXJlIG51bGwgd2lsbCBiZSBkZWxldGVkLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVlcEV4dGVuZChhLCBiLCBwcm90b0V4dGVuZCA9IGZhbHNlLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBiKSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSB8fCBwcm90b0V4dGVuZCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGJbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgICAgIGJbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihiW3Byb3BdKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFbcHJvcF0gPSBkZWVwRXh0ZW5kKHt9LCBiW3Byb3BdLCBwcm90b0V4dGVuZCk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGFbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYVtwcm9wXSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0sIHByb3RvRXh0ZW5kKTsgLy8gTk9URTogYWxsb3dEZWxldGlvbiBub3QgcHJvcGFnYXRlZCFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdID0gYltwcm9wXS5zbGljZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBhbGwgZWxlbWVudHMgaW4gdHdvIGFycmF5cyBhcmUgZXF1YWwuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gRmlyc3QgYXJyYXkuXHJcbiAqIEBwYXJhbSBiIC0gU2Vjb25kIGFycmF5LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIGJvdGggYXJyYXlzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzYW1lIGVsZW1lbnRzICgxID0gJzEnKS5cclxuICovXHJcbmZ1bmN0aW9uIGVxdWFsQXJyYXkoYSwgYikge1xyXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuLyoqXHJcbiAqIEdldCB0aGUgdHlwZSBvZiBhbiBvYmplY3QsIGZvciBleGFtcGxlIGV4cG9ydHMuZ2V0VHlwZShbXSkgcmV0dXJucyAnQXJyYXknLlxyXG4gKlxyXG4gKiBAcGFyYW0gb2JqZWN0IC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBEZXRlY3RlZCB0eXBlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0VHlwZShvYmplY3QpIHtcclxuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xyXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiQm9vbGVhblwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIk51bWJlclwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlN0cmluZ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkFycmF5XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkRhdGVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiT2JqZWN0XCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIHJldHVybiBcIk51bWJlclwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiQm9vbGVhblwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJTdHJpbmdcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcclxuICAgIH1cclxuICAgIHJldHVybiB0eXBlO1xyXG59XHJcbi8qKlxyXG4gKiBVc2VkIHRvIGV4dGVuZCBhbiBhcnJheSBhbmQgY29weSBpdC4gVGhpcyBpcyB1c2VkIHRvIHByb3BhZ2F0ZSBwYXRocyByZWN1cnNpdmVseS5cclxuICpcclxuICogQHBhcmFtIGFyciAtIEZpcnN0IHBhcnQuXHJcbiAqIEBwYXJhbSBuZXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBhYWRkZWQgaW50byB0aGUgYXJyYXkuXHJcbiAqIEByZXR1cm5zIEEgbmV3IGFycmF5IHdpdGggYWxsIGl0ZW1zIGZyb20gYXJyIGFuZCBuZXdWYWx1ZSAod2hpY2ggaXMgbGFzdCkuXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3B5QW5kRXh0ZW5kQXJyYXkoYXJyLCBuZXdWYWx1ZSkge1xyXG4gICAgcmV0dXJuIFsuLi5hcnIsIG5ld1ZhbHVlXTtcclxufVxyXG4vKipcclxuICogVXNlZCB0byBleHRlbmQgYW4gYXJyYXkgYW5kIGNvcHkgaXQuIFRoaXMgaXMgdXNlZCB0byBwcm9wYWdhdGUgcGF0aHMgcmVjdXJzaXZlbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcnIgLSBUaGUgYXJyYXkgdG8gYmUgY29waWVkLlxyXG4gKiBAcmV0dXJucyBTaGFsbG93IGNvcHkgb2YgYXJyLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weUFycmF5KGFycikge1xyXG4gICAgcmV0dXJuIGFyci5zbGljZSgpO1xyXG59XHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgYWJzb2x1dGUgbGVmdCB2YWx1ZSBvZiBhIERPTSBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIEEgZG9tIGVsZW1lbnQsIGZvciBleGFtcGxlIGEgZGl2LlxyXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgbGVmdCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlTGVmdChlbGVtKSB7XHJcbiAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xyXG59XHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgYWJzb2x1dGUgcmlnaHQgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHJpZ2h0IHBvc2l0aW9uIG9mIHRoaXMgZWxlbWVudCBpbiB0aGUgYnJvd3NlciBwYWdlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWJzb2x1dGVSaWdodChlbGVtKSB7XHJcbiAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIHRvcCB2YWx1ZSBvZiBhIERPTSBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIEEgZG9tIGVsZW1lbnQsIGZvciBleGFtcGxlIGEgZGl2LlxyXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgdG9wIHBvc2l0aW9uIG9mIHRoaXMgZWxlbWVudCBpbiB0aGUgYnJvd3NlciBwYWdlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWJzb2x1dGVUb3AoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xyXG59XHJcbi8qKlxyXG4gKiBBZGQgYSBjbGFzc05hbWUgdG8gdGhlIGdpdmVuIGVsZW1lbnRzIHN0eWxlLlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIFRoZSBlbGVtZW50IHRvIHdoaWNoIHRoZSBjbGFzc2VzIHdpbGwgYmUgYWRkZWQuXHJcbiAqIEBwYXJhbSBjbGFzc05hbWVzIC0gU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy5cclxuICovXHJcbmZ1bmN0aW9uIGFkZENsYXNzTmFtZShlbGVtLCBjbGFzc05hbWVzKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9IGVsZW0uY2xhc3NOYW1lLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IG5ld0NsYXNzZXMgPSBjbGFzc05hbWVzLnNwbGl0KFwiIFwiKTtcclxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLmNvbmNhdChuZXdDbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICFjbGFzc2VzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XHJcbiAgICB9KSk7XHJcbiAgICBlbGVtLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbihcIiBcIik7XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBhIGNsYXNzTmFtZSBmcm9tIHRoZSBnaXZlbiBlbGVtZW50cyBzdHlsZS5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCBmcm9tIHdoaWNoIHRoZSBjbGFzc2VzIHdpbGwgYmUgcmVtb3ZlZC5cclxuICogQHBhcmFtIGNsYXNzTmFtZXMgLSBTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc2VzLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ2xhc3NOYW1lKGVsZW0sIGNsYXNzTmFtZXMpIHtcclxuICAgIGxldCBjbGFzc2VzID0gZWxlbS5jbGFzc05hbWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgY29uc3Qgb2xkQ2xhc3NlcyA9IGNsYXNzTmFtZXMuc3BsaXQoXCIgXCIpO1xyXG4gICAgY2xhc3NlcyA9IGNsYXNzZXMuZmlsdGVyKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcclxuICAgICAgICByZXR1cm4gIW9sZENsYXNzZXMuaW5jbHVkZXMoY2xhc3NOYW1lKTtcclxuICAgIH0pO1xyXG4gICAgZWxlbS5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oXCIgXCIpO1xyXG59XHJcbi8qKlxyXG4gKiBGb3IgZWFjaCBtZXRob2QgZm9yIGJvdGggYXJyYXlzIGFuZCBvYmplY3RzLlxyXG4gKiBJbiBjYXNlIG9mIGFuIGFycmF5LCB0aGUgYnVpbHQtaW4gQXJyYXkuZm9yRWFjaCgpIGlzIGFwcGxpZWQgKCoqTm8sIGl0J3Mgbm90ISoqKS5cclxuICogSW4gY2FzZSBvZiBhbiBPYmplY3QsIHRoZSBtZXRob2QgbG9vcHMgb3ZlciBhbGwgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gb2JqZWN0IC0gQW4gT2JqZWN0IG9yIEFycmF5IHRvIGJlIGl0ZXJhdGVkIG92ZXIuXHJcbiAqIEBwYXJhbSBjYWxsYmFjayAtIEFycmF5LmZvckVhY2gtbGlrZSBjYWxsYmFjay5cclxuICovXHJcbmZ1bmN0aW9uIGZvckVhY2gob2JqZWN0LCBjYWxsYmFjaykge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xyXG4gICAgICAgIC8vIGFycmF5XHJcbiAgICAgICAgY29uc3QgbGVuID0gb2JqZWN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG9iamVjdFtpXSwgaSwgb2JqZWN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBvYmplY3RcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgYW4gb2JqZWN0IGludG8gYW4gYXJyYXk6IGFsbCBvYmplY3RzIHByb3BlcnRpZXMgYXJlIHB1dCBpbnRvIHRoZSBhcnJheS4gVGhlIHJlc3VsdGluZyBhcnJheSBpcyB1bm9yZGVyZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSBvIC0gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuXHJcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHVub3JkZXJlZCB2YWx1ZXMuXHJcbiAqL1xyXG5jb25zdCB0b0FycmF5ID0gT2JqZWN0LnZhbHVlcztcclxuLyoqXHJcbiAqIFVwZGF0ZSBhIHByb3BlcnR5IGluIGFuIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIFRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydHkgd2lsbCBiZSB1cGRhdGVkLlxyXG4gKiBAcGFyYW0ga2V5IC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIHZhbHVlIC0gVGhlIG5ldyB2YWx1ZSB0byBiZSBhc3NpZ25lZC5cclxuICogQHJldHVybnMgV2hldGhlciB0aGUgdmFsdWUgd2FzIHVwZGF0ZWQgKHRydWUpIG9yIGFscmVhZHkgc3RyaWN0bHkgdGhlIHNhbWUgaW4gdGhlIG9yaWdpbmFsIG9iamVjdCAoZmFsc2UpLlxyXG4gKi9cclxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydHkob2JqZWN0LCBrZXksIHZhbHVlKSB7XHJcbiAgICBpZiAob2JqZWN0W2tleV0gIT09IHZhbHVlKSB7XHJcbiAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhyb3R0bGUgdGhlIGdpdmVuIGZ1bmN0aW9uIHRvIGJlIG9ubHkgZXhlY3V0ZWQgb25jZSBwZXIgYW5pbWF0aW9uIGZyYW1lLlxyXG4gKlxyXG4gKiBAcGFyYW0gZm4gLSBUaGUgb3JpZ2luYWwgZnVuY3Rpb24uXHJcbiAqIEByZXR1cm5zIFRoZSB0aHJvdHRsZWQgZnVuY3Rpb24uXHJcbiAqL1xyXG5mdW5jdGlvbiB0aHJvdHRsZShmbikge1xyXG4gICAgbGV0IHNjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICBpZiAoIXNjaGVkdWxlZCkge1xyXG4gICAgICAgICAgICBzY2hlZHVsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmbigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbi8qKlxyXG4gKiBBZGQgYW5kIGV2ZW50IGxpc3RlbmVyLiBXb3JrcyBmb3IgYWxsIGJyb3dzZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGJpbmQgdGhlIGV2ZW50IGxpc3RlbmVyIHRvLlxyXG4gKiBAcGFyYW0gYWN0aW9uIC0gU2FtZSBhcyBFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYWN0aW9uLCDigJQsIOKAlCkuXHJcbiAqIEBwYXJhbSBsaXN0ZW5lciAtIFNhbWUgYXMgRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKOKAlCwgbGlzdGVuZXIsIOKAlCkuXHJcbiAqIEBwYXJhbSB1c2VDYXB0dXJlIC0gU2FtZSBhcyBFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo4oCULCDigJQsIHVzZUNhcHR1cmUpLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihlbGVtZW50LCBhY3Rpb24sIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSB7XHJcbiAgICBpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKSB7XHJcbiAgICAgICAgaWYgKHVzZUNhcHR1cmUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB1c2VDYXB0dXJlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhY3Rpb24gPT09IFwibW91c2V3aGVlbFwiICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoXCJGaXJlZm94XCIpKSB7XHJcbiAgICAgICAgICAgIGFjdGlvbiA9IFwiRE9NTW91c2VTY3JvbGxcIjsgLy8gRm9yIEZpcmVmb3hcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGFjdGlvbiwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoXCJvblwiICsgYWN0aW9uLCBsaXN0ZW5lcik7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBhbiBldmVudCBsaXN0ZW5lciBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gYmluZCB0aGUgZXZlbnQgbGlzdGVuZXIgdG8uXHJcbiAqIEBwYXJhbSBhY3Rpb24gLSBTYW1lIGFzIEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhY3Rpb24sIOKAlCwg4oCUKS5cclxuICogQHBhcmFtIGxpc3RlbmVyIC0gU2FtZSBhcyBFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIo4oCULCBsaXN0ZW5lciwg4oCUKS5cclxuICogQHBhcmFtIHVzZUNhcHR1cmUgLSBTYW1lIGFzIEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcijigJQsIOKAlCwgdXNlQ2FwdHVyZSkuXHJcbiAqL1xyXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKGVsZW1lbnQsIGFjdGlvbiwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpIHtcclxuICAgIGlmIChlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcclxuICAgICAgICAvLyBub24tSUUgYnJvd3NlcnNcclxuICAgICAgICBpZiAodXNlQ2FwdHVyZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHVzZUNhcHR1cmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJtb3VzZXdoZWVsXCIgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmNsdWRlcyhcIkZpcmVmb3hcIikpIHtcclxuICAgICAgICAgICAgYWN0aW9uID0gXCJET01Nb3VzZVNjcm9sbFwiOyAvLyBGb3IgRmlyZWZveFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYWN0aW9uLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBAVE9ETzogSUUgdHlwZXM/IERvZXMgYW55b25lIGNhcmU/XHJcbiAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudChcIm9uXCIgKyBhY3Rpb24sIGxpc3RlbmVyKTsgLy8gSUUgYnJvd3NlcnNcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ2FuY2VscyB0aGUgZXZlbnQncyBkZWZhdWx0IGFjdGlvbiBpZiBpdCBpcyBjYW5jZWxhYmxlLCB3aXRob3V0IHN0b3BwaW5nIGZ1cnRoZXIgcHJvcGFnYXRpb24gb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgd2hvc2UgZGVmYXVsdCBhY3Rpb24gc2hvdWxkIGJlIHByZXZlbnRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7XHJcbiAgICB9XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIG5vbi1JRSBicm93c2Vyc1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEdldCBIVE1MIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudC5cclxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgb3IgbnVsbCBpZiBub3Qgb2J0YWluYWJsZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFRhcmdldChldmVudCA9IHdpbmRvdy5ldmVudCkge1xyXG4gICAgLy8gY29kZSBmcm9tIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxyXG4gICAgLy8gQFRPRE86IEV2ZW50VGFyZ2V0IGNhbiBiZSBhbG1vc3QgYW55dGhpbmcsIGlzIGl0IG9rYXkgdG8gcmV0dXJuIG9ubHkgRWxlbWVudHM/XHJcbiAgICBsZXQgdGFyZ2V0ID0gbnVsbDtcclxuICAgIGlmICghZXZlbnQpIDtcclxuICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LnNyY0VsZW1lbnQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC5zcmNFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQubm9kZVR5cGUgIT0gbnVsbCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykge1xyXG4gICAgICAgIC8vIGRlZmVhdCBTYWZhcmkgYnVnXHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG4vKipcclxuICogQ2hlY2sgaWYgZ2l2ZW4gZWxlbWVudCBjb250YWlucyBnaXZlbiBwYXJlbnQgc29tZXdoZXJlIGluIHRoZSBET00gdHJlZS5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiZSB0ZXN0ZWQuXHJcbiAqIEBwYXJhbSBwYXJlbnQgLSBUaGUgYW5jZXN0b3IgKG5vdCBuZWNlc3NhcmlseSBwYXJlbnQpIG9mIHRoZSBlbGVtZW50LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHBhcmVudCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgZWxlbWVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xyXG4gICAgbGV0IGVsZW0gPSBlbGVtZW50O1xyXG4gICAgd2hpbGUgKGVsZW0pIHtcclxuICAgICAgICBpZiAoZWxlbSA9PT0gcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgZWxlbSA9IGVsZW0ucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9ib29sZWFuLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nIGJvb2xlYW4gdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzQm9vbGVhbih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgbnVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvbnVtYmVyLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nICoqYm94ZWQqKiBudW1iZXIgdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzTnVtYmVyKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIHN0cmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3N0cmluZywgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogc3RyaW5nIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1N0cmluZyh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvc2l6ZSwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUgKG51bWJlciArICdweCcpLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1NpemUodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBET00gRWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50byBET00gRWxlbWVudCwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIERPTSBFbGVtZW50LCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0VsZW1lbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxufTtcclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MjM4MzgvcmdiLXRvLWhleC1hbmQtaGV4LXRvLXJnYn1cclxuICogQHBhcmFtIGhleCAtIEhleCBjb2xvciBzdHJpbmcgKDMgb3IgNiBkaWdpdHMsIHdpdGggb3Igd2l0aG91dCAjKS5cclxuICogQHJldHVybnMgUkdCIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvUkdCKGhleCkge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIHN3aXRjaCAoaGV4Lmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHNob3J0SGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0gKyByZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0gKyByZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10gKyByZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBmdWxsSGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBzdHJpbmcgY29sb3IgaW4gaGV4IG9yIFJHQiBmb3JtYXQgYW5kIGFkZHMgdGhlIG9wYWNpdHksIFJHQkEgaXMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLlxyXG4gKlxyXG4gKiBAcGFyYW0gY29sb3IgLSBUaGUgY29sb3Igc3RyaW5nIChoZXgsIFJHQiwgUkdCQSkuXHJcbiAqIEBwYXJhbSBvcGFjaXR5IC0gVGhlIG5ldyBvcGFjaXR5LlxyXG4gKiBAcmV0dXJucyBSR0JBIHN0cmluZywgZm9yIGV4YW1wbGUgJ3JnYmEoMjU1LCAwLCAxMjcsIDAuMyknLlxyXG4gKi9cclxuZnVuY3Rpb24gb3ZlcnJpZGVPcGFjaXR5KGNvbG9yLCBvcGFjaXR5KSB7XHJcbiAgICBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JhXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JcIikpIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBjb2xvclxyXG4gICAgICAgICAgICAuc3Vic3RyKGNvbG9yLmluZGV4T2YoXCIoXCIpICsgMSlcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgICAgIC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYlswXSArIFwiLFwiICsgcmdiWzFdICsgXCIsXCIgKyByZ2JbMl0gKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJnYiA9IGhleFRvUkdCKGNvbG9yKTtcclxuICAgICAgICBpZiAocmdiID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYi5yICsgXCIsXCIgKyByZ2IuZyArIFwiLFwiICsgcmdiLmIgKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcgKGZvciBleGFtcGxlOiAnIzBhY2RjMCcpLlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IZXgocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmV0dXJuIChcIiNcIiArICgoMSA8PCAyNCkgKyAocmVkIDw8IDE2KSArIChncmVlbiA8PCA4KSArIGJsdWUpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XHJcbn1cclxuLyoqXHJcbiAqIFBhcnNlIGEgY29sb3IgcHJvcGVydHkgaW50byBhbiBvYmplY3Qgd2l0aCBib3JkZXIsIGJhY2tncm91bmQsIGFuZCBoaWdobGlnaHQgY29sb3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5wdXRDb2xvciAtIFNob3J0aGFuZCBjb2xvciBzdHJpbmcgb3IgaW5wdXQgY29sb3Igb2JqZWN0LlxyXG4gKiBAcGFyYW0gZGVmYXVsdENvbG9yIC0gRnVsbCBjb2xvciBvYmplY3QgdG8gZmlsbCBpbiBtaXNzaW5nIHZhbHVlcyBpbiBpbnB1dENvbG9yLlxyXG4gKiBAcmV0dXJucyBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0Q29sb3IsIGRlZmF1bHRDb2xvcikge1xyXG4gICAgaWYgKGlzU3RyaW5nKGlucHV0Q29sb3IpKSB7XHJcbiAgICAgICAgbGV0IGNvbG9yU3RyID0gaW5wdXRDb2xvcjtcclxuICAgICAgICBpZiAoaXNWYWxpZFJHQihjb2xvclN0cikpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiID0gY29sb3JTdHJcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoNClcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3JTdHIubGVuZ3RoIC0gNSlcclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIixcIilcclxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29sb3JTdHIgPSBSR0JUb0hleChyZ2JbMF0sIHJnYlsxXSwgcmdiWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVmFsaWRIZXgoY29sb3JTdHIpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzdiA9IGhleFRvSFNWKGNvbG9yU3RyKTtcclxuICAgICAgICAgICAgY29uc3QgbGlnaHRlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBoc3YucyAqIDAuOCxcclxuICAgICAgICAgICAgICAgIHY6IE1hdGgubWluKDEsIGhzdi52ICogMS4wMiksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBNYXRoLm1pbigxLCBoc3YucyAqIDEuMjUpLFxyXG4gICAgICAgICAgICAgICAgdjogaHN2LnYgKiAwLjgsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySGV4ID0gSFNWVG9IZXgoZGFya2VyQ29sb3JIU1YuaCwgZGFya2VyQ29sb3JIU1YucywgZGFya2VyQ29sb3JIU1Yudik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhleCA9IEhTVlRvSGV4KGxpZ2h0ZXJDb2xvckhTVi5oLCBsaWdodGVyQ29sb3JIU1YucywgbGlnaHRlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBob3Zlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChkZWZhdWx0Q29sb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgZGVmYXVsdENvbG9yLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IGRlZmF1bHRDb2xvci5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5ob3ZlciAmJiBpbnB1dENvbG9yLmhvdmVyLmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuYmFja2dyb3VuZCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogaXNTdHJpbmcoaW5wdXRDb2xvci5oaWdobGlnaHQpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcikgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBSR0IgXFw8MCwgMjU1XFw+IGludG8gSFNWIG9iamVjdC5cclxuICpcclxuICogQHJlbWFya3NcclxuICoge0BsaW5rIGh0dHA6Ly93d3cuamF2YXNjcmlwdGVyLm5ldC9mYXEvcmdiMmhzdi5odG19XHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhTViBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBSR0JUb0hTVihyZWQsIGdyZWVuLCBibHVlKSB7XHJcbiAgICByZWQgPSByZWQgLyAyNTU7XHJcbiAgICBncmVlbiA9IGdyZWVuIC8gMjU1O1xyXG4gICAgYmx1ZSA9IGJsdWUgLyAyNTU7XHJcbiAgICBjb25zdCBtaW5SR0IgPSBNYXRoLm1pbihyZWQsIE1hdGgubWluKGdyZWVuLCBibHVlKSk7XHJcbiAgICBjb25zdCBtYXhSR0IgPSBNYXRoLm1heChyZWQsIE1hdGgubWF4KGdyZWVuLCBibHVlKSk7XHJcbiAgICAvLyBCbGFjay1ncmF5LXdoaXRlXHJcbiAgICBpZiAobWluUkdCID09PSBtYXhSR0IpIHtcclxuICAgICAgICByZXR1cm4geyBoOiAwLCBzOiAwLCB2OiBtaW5SR0IgfTtcclxuICAgIH1cclxuICAgIC8vIENvbG9ycyBvdGhlciB0aGFuIGJsYWNrLWdyYXktd2hpdGU6XHJcbiAgICBjb25zdCBkID0gcmVkID09PSBtaW5SR0IgPyBncmVlbiAtIGJsdWUgOiBibHVlID09PSBtaW5SR0IgPyByZWQgLSBncmVlbiA6IGJsdWUgLSByZWQ7XHJcbiAgICBjb25zdCBoID0gcmVkID09PSBtaW5SR0IgPyAzIDogYmx1ZSA9PT0gbWluUkdCID8gMSA6IDU7XHJcbiAgICBjb25zdCBodWUgPSAoNjAgKiAoaCAtIGQgLyAobWF4UkdCIC0gbWluUkdCKSkpIC8gMzYwO1xyXG4gICAgY29uc3Qgc2F0dXJhdGlvbiA9IChtYXhSR0IgLSBtaW5SR0IpIC8gbWF4UkdCO1xyXG4gICAgY29uc3QgdmFsdWUgPSBtYXhSR0I7XHJcbiAgICByZXR1cm4geyBoOiBodWUsIHM6IHNhdHVyYXRpb24sIHY6IHZhbHVlIH07XHJcbn1cclxuLyoqXHJcbiAqIFNwbGl0IGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBpbnRvIGFuIG9iamVjdCB3aXRoIGtleS92YWx1ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gQ1NTIHNvdXJjZSBjb2RlIHRvIHNwbGl0IGludG8ga2V5L3ZhbHVlIG9iamVjdC5cclxuICogQHJldHVybnMgS2V5L3ZhbHVlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHtAbGluayBjc3NUZXh0fS5cclxuICovXHJcbmZ1bmN0aW9uIHNwbGl0Q1NTVGV4dChjc3NUZXh0KSB7XHJcbiAgICBjb25zdCB0bXBFbGxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBjb25zdCBzdHlsZXMgPSB7fTtcclxuICAgIHRtcEVsbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bXBFbGxlbWVudC5zdHlsZS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIHN0eWxlc1t0bXBFbGxlbWVudC5zdHlsZVtpXV0gPSB0bXBFbGxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRtcEVsbGVtZW50LnN0eWxlW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZXM7XHJcbn1cclxuLyoqXHJcbiAqIEFwcGVuZCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgdG8gYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0aGF0IHdpbGwgcmVjZWl2ZSBuZXcgc3R5bGVzLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgYXBwZW5kZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDc3NUZXh0KGVsZW1lbnQsIGNzc1RleHQpIHtcclxuICAgIGNvbnN0IGNzc1N0eWxlID0gc3BsaXRDU1NUZXh0KGNzc1RleHQpO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3NzU3R5bGUpKSB7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCBzdHlsZXMgc2hvdWxkIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gVGhlIHN0eWxlcyB0byBiZSByZW1vdmVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tamlqYWNrc29uLzUzMTEyNTZ9XHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb1JHQihoLCBzLCB2KSB7XHJcbiAgICBsZXQgcjtcclxuICAgIGxldCBnO1xyXG4gICAgbGV0IGI7XHJcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihoICogNik7XHJcbiAgICBjb25zdCBmID0gaCAqIDYgLSBpO1xyXG4gICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xyXG4gICAgY29uc3QgcSA9IHYgKiAoMSAtIGYgKiBzKTtcclxuICAgIGNvbnN0IHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyk7XHJcbiAgICBzd2l0Y2ggKGkgJSA2KSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAociA9IHYpLCAoZyA9IHQpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIChyID0gcSksIChnID0gdiksIChiID0gcCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSB2KSwgKGIgPSB0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAociA9IHApLCAoZyA9IHEpLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIChyID0gdCksIChnID0gcCksIChiID0gdik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSBwKSwgKGIgPSBxKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHI6IE1hdGguZmxvb3IociAqIDI1NSksXHJcbiAgICAgICAgZzogTWF0aC5mbG9vcihnICogMjU1KSxcclxuICAgICAgICBiOiBNYXRoLmZsb29yKGIgKiAyNTUpLFxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb0hleChoLCBzLCB2KSB7XHJcbiAgICBjb25zdCByZ2IgPSBIU1ZUb1JHQihoLCBzLCB2KTtcclxuICAgIHJldHVybiBSR0JUb0hleChyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBoZXggY29sb3Igc3RyaW5nIGludG8gSFNWIFxcPDAsIDFcXD4uXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gaGV4VG9IU1YoaGV4KSB7XHJcbiAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihoZXgpO1xyXG4gICAgaWYgKCFyZ2IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHtoZXh9JyBpcyBub3QgYSB2YWxpZCBjb2xvci5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSR0JUb0hTVihyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgaGV4IGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIGhleCAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkSGV4KGhleCkge1xyXG4gICAgY29uc3QgaXNPayA9IC8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KGhleCk7XHJcbiAgICByZXR1cm4gaXNPaztcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCIGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHJnYiAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCKHJnYikge1xyXG4gICAgcmV0dXJuIHJnYlJFLnRlc3QocmdiKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCQSBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2JhIC0gVW5rbm93biBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiBhIGNvbG9yLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzVmFsaWRSR0JBKHJnYmEpIHtcclxuICAgIHJldHVybiByZ2JhUkUudGVzdChyZ2JhKTtcclxufVxyXG4vKipcclxuICogVGhpcyByZWN1cnNpdmVseSByZWRpcmVjdHMgdGhlIHByb3RvdHlwZSBvZiBKU09OIG9iamVjdHMgdG8gdGhlIHJlZmVyZW5jZU9iamVjdC5cclxuICogVGhpcyBpcyB1c2VkIGZvciBkZWZhdWx0IG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWVsZHMgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHRvIGJlIGJyaWRnZWQuXHJcbiAqIEBwYXJhbSByZWZlcmVuY2VPYmplY3QgLSBUaGUgb3JpZ2luYWwgb2JqZWN0LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVCcmlkZ2VPYmplY3QoZmllbGRzLCByZWZlcmVuY2VPYmplY3QpIHtcclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIHJlZmVyZW5jZU9iamVjdCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIC8vICEhISB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICBjb25zdCBvYmplY3RUbyA9IE9iamVjdC5jcmVhdGUocmVmZXJlbmNlT2JqZWN0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZmVyZW5jZU9iamVjdCwgZmllbGRzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0VG9bZmllbGRzW2ldXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFRvO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgVGhlIEVsZW1lbnQgaWYgdGhlIHJlZmVyZW5jZU9iamVjdCBpcyBhbiBFbGVtZW50LCBvciBhIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiByZWZlcmVuY2VPYmplY3QgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KSB7XHJcbiAgICAgICAgLy8gQXZvaWQgYnJpZGdpbmcgRE9NIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlT2JqZWN0O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGkpKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ldID09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFRvW2ldID0gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0VG87XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgc3RhYmxlIHNvcnQgaW1wbGVtZW50YXRpb24sIHZlcnkgZmFzdCBmb3IgcHJlc29ydGVkIGRhdGEuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIGFycmF5IHRvIGJlIHNvcnRlZCAoaW4tcGxhY2UpLlxyXG4gKiBAcGFyYW0gY29tcGFyZSAtIEFuIG9yZGVyIGNvbXBhcmF0b3IuXHJcbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gaW5zZXJ0U29ydChhLCBjb21wYXJlKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBrID0gYVtpXTtcclxuICAgICAgICBsZXQgajtcclxuICAgICAgICBmb3IgKGogPSBpOyBqID4gMCAmJiBjb21wYXJlKGssIGFbaiAtIDFdKSA8IDA7IGotLSkge1xyXG4gICAgICAgICAgICBhW2pdID0gYVtqIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFbal0gPSBrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIG9wdGlvbnMgb2Ygc3Vib2JqZWN0cyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXHJcbiAqXHJcbiAqIEEgcmVxdWlyZW1lbnQgb2YgdGhlc2Ugc3Vib2JqZWN0cyBpcyB0aGF0IHRoZXkgaGF2ZSBhbiAnZW5hYmxlZCcgZWxlbWVudFxyXG4gKiB3aGljaCBpcyBvcHRpb25hbCBmb3IgdGhlIHVzZXIgYnV0IG1hbmRhdG9yeSBmb3IgdGhlIHByb2dyYW0uXHJcbiAqXHJcbiAqIFRoZSBhZGRlZCB2YWx1ZSBoZXJlIG9mIHRoZSBtZXJnZSBpcyB0aGF0IG9wdGlvbiAnZW5hYmxlZCcgaXMgc2V0IGFzIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWVyZ2VUYXJnZXQgLSBFaXRoZXIgdGhpcy5vcHRpb25zIG9yIHRoZSBvcHRpb25zIHVzZWQgZm9yIHRoZSBncm91cHMuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICogQHBhcmFtIG9wdGlvbiAtIE9wdGlvbiBrZXkgaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQuXHJcbiAqIEBwYXJhbSBnbG9iYWxPcHRpb25zIC0gR2xvYmFsIG9wdGlvbnMsIHBhc3NlZCBpbiB0byBkZXRlcm1pbmUgdmFsdWUgb2Ygb3B0aW9uICdlbmFibGVkJy5cclxuICovXHJcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhtZXJnZVRhcmdldCwgb3B0aW9ucywgb3B0aW9uLCBnbG9iYWxPcHRpb25zID0ge30pIHtcclxuICAgIC8vIExvY2FsIGhlbHBlcnNcclxuICAgIGNvbnN0IGlzUHJlc2VudCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIG9iaiAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIjtcclxuICAgIH07XHJcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzQ0OTEyODcvMTIyMzUzMVxyXG4gICAgY29uc3QgaXNFbXB0eSA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHggaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCB4KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8vIEd1YXJkc1xyXG4gICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgbWVyZ2VUYXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzUHJlc2VudChvcHRpb24pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbiBtdXN0IGhhdmUgYSB2YWx1ZVwiKTtcclxuICAgIH1cclxuICAgIGlmICghaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgZ2xvYmFsT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdFwiKTtcclxuICAgIH1cclxuICAgIC8vXHJcbiAgICAvLyBBY3R1YWwgbWVyZ2Ugcm91dGluZSwgc2VwYXJhdGVkIGZyb20gbWFpbiBsb2dpY1xyXG4gICAgLy8gT25seSBhIHNpbmdsZSBsZXZlbCBvZiBvcHRpb25zIGlzIG1lcmdlZC4gRGVlcGVyIGxldmVscyBhcmUgcmVmJ2QuIFRoaXMgbWF5IGFjdHVhbGx5IGJlIGFuIGlzc3VlLlxyXG4gICAgLy9cclxuICAgIGNvbnN0IGRvTWVyZ2UgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KHRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbb3B0aW9uXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzcmMgPSBvcHRpb25zW29wdGlvbl07XHJcbiAgICAgICAgY29uc3QgZHN0ID0gdGFyZ2V0W29wdGlvbl07XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHNyYykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNyYywgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRzdFtwcm9wXSA9IHNyY1twcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBMb2NhbCBpbml0aWFsaXphdGlvblxyXG4gICAgY29uc3Qgc3JjT3B0aW9uID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgY29uc3QgZ2xvYmFsUGFzc2VkID0gaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykgJiYgIWlzRW1wdHkoZ2xvYmFsT3B0aW9ucyk7XHJcbiAgICBjb25zdCBnbG9iYWxPcHRpb24gPSBnbG9iYWxQYXNzZWQgPyBnbG9iYWxPcHRpb25zW29wdGlvbl0gOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBnbG9iYWxFbmFibGVkID0gZ2xvYmFsT3B0aW9uID8gZ2xvYmFsT3B0aW9uLmVuYWJsZWQgOiB1bmRlZmluZWQ7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTWFpbiByb3V0aW5lXHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgaWYgKHNyY09wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNyY09wdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gc3JjT3B0aW9uO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChzcmNPcHRpb24gPT09IG51bGwgJiYgIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgLy8gSWYgcG9zc2libGUsIGV4cGxpY2l0IGNvcHkgZnJvbSBnbG9iYWxzXHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChnbG9iYWxPcHRpb24pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KHNyY09wdGlvbikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gRW5zdXJlIHRoYXQgJ2VuYWJsZWQnIGlzIHByb3Blcmx5IHNldC4gSXQgaXMgcmVxdWlyZWQgaW50ZXJuYWxseVxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB2YWx1ZSBmcm9tIG9wdGlvbnMgd2lsbCBhbHdheXMgb3ZlcndyaXRlIHRoZSBleGlzdGluZyB2YWx1ZVxyXG4gICAgLy9cclxuICAgIGxldCBlbmFibGVkID0gdHJ1ZTsgLy8gZGVmYXVsdCB2YWx1ZVxyXG4gICAgaWYgKHNyY09wdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBlbmFibGVkID0gc3JjT3B0aW9uLmVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBUYWtlIGZyb20gZ2xvYmFscywgaWYgcHJlc2VudFxyXG4gICAgICAgIGlmIChnbG9iYWxFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZCA9IGdsb2JhbE9wdGlvbi5lbmFibGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRvTWVyZ2UobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbik7XHJcbiAgICBtZXJnZVRhcmdldFtvcHRpb25dLmVuYWJsZWQgPSBlbmFibGVkO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBiaW5hcnkgc2VhcmNoIGZvciBhIHZpc2libGUgaXRlbSBpbiBhIHNvcnRlZCBsaXN0LiBJZiB3ZSBmaW5kIGEgdmlzaWJsZSBpdGVtLCB0aGUgY29kZSB0aGF0IHVzZXNcclxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHRoZW4gaXRlcmF0ZSBpbiBib3RoIGRpcmVjdGlvbnMgb3ZlciB0aGlzIHNvcnRlZCBsaXN0IHRvIGZpbmQgYWxsIHZpc2libGUgaXRlbXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBJdGVtcyBvcmRlcmVkIGJ5IHN0YXJ0LlxyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIC0xIGlzIGxvd2VyLCAwIGlzIGVxdWFsLCAxIGlzIGhpZ2hlci5cclxuICogQHBhcmFtIGZpZWxkIC0gUHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdKS5cclxuICogQHBhcmFtIGZpZWxkMiAtIFNlY29uZCBwcm9wZXJ0eSBuYW1lIG9uIGFuIGl0ZW0gKFRoYXQgaXMgaXRlbVtmaWVsZF1bZmllbGQyXSkuXHJcbiAqIEByZXR1cm5zIEluZGV4IG9mIHRoZSBmb3VuZCBpdGVtIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoQ3VzdG9tKG9yZGVyZWRJdGVtcywgY29tcGFyYXRvciwgZmllbGQsIGZpZWxkMikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQyID09PSB1bmRlZmluZWQgPyBpdGVtW2ZpZWxkXSA6IGl0ZW1bZmllbGRdW2ZpZWxkMl07XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGppaGFhLCBmb3VuZCBhIHZpc2libGUgaXRlbSFcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2VhcmNoUmVzdWx0ID09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBzbWFsbCAtLT4gaW5jcmVhc2UgbG93XHJcbiAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSBzcGVjaWZpYyB2YWx1ZSBpbiBhIHNvcnRlZCBhcnJheS5cclxuICogSWYgaXQgZG9lcyBub3QgZXhpc3QgYnV0IGlzIGluIGJldHdlZW4gb2YgdHdvIHZhbHVlcywgd2UgcmV0dXJuIGVpdGhlciB0aGVcclxuICogb25lIGJlZm9yZSBvciB0aGUgb25lIGFmdGVyLCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dCBJZiBpdCBpcyBmb3VuZCwgd2VcclxuICogcmV0dXJuIHRoZSBpbmRleCwgZWxzZSAtMS5cclxuICpcclxuICogQHBhcmFtIG9yZGVyZWRJdGVtcyAtIFNvcnRlZCBhcnJheS5cclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSBzZWFyY2hlZCB2YWx1ZS5cclxuICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgaW4gaXRlbXMgdG8gYmUgc2VhcmNoZWQuXHJcbiAqIEBwYXJhbSBzaWRlUHJlZmVyZW5jZSAtIElmIHRoZSB0YXJnZXQgaXMgYmV0d2VlbiB0d28gdmFsdWVzLCBzaG91bGQgdGhlIGluZGV4IG9mIHRoZSBiZWZvcmUgb3IgdGhlIGFmdGVyIGJlIHJldHVybmVkP1xyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIEFuIG9wdGlvbmFsIGNvbXBhcmF0b3IsIHJldHVybmluZyAtMSwgMCwgMSBmb3IgXFw8LCA9PT0sIFxcPi5cclxuICogQHJldHVybnMgVGhlIGluZGV4IG9mIGZvdW5kIHZhbHVlIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoVmFsdWUob3JkZXJlZEl0ZW1zLCB0YXJnZXQsIGZpZWxkLCBzaWRlUHJlZmVyZW5jZSwgY29tcGFyYXRvcikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgcHJldlZhbHVlO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IG5leHRWYWx1ZTtcclxuICAgIGxldCBtaWRkbGU7XHJcbiAgICBjb21wYXJhdG9yID1cclxuICAgICAgICBjb21wYXJhdG9yICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGNvbXBhcmF0b3JcclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYiA/IDAgOiBhIDwgYiA/IC0xIDogMTtcclxuICAgICAgICAgICAgfTtcclxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKSB7XHJcbiAgICAgICAgLy8gZ2V0IGEgbmV3IGd1ZXNzXHJcbiAgICAgICAgbWlkZGxlID0gTWF0aC5mbG9vcigwLjUgKiAoaGlnaCArIGxvdykpO1xyXG4gICAgICAgIHByZXZWYWx1ZSA9IG9yZGVyZWRJdGVtc1tNYXRoLm1heCgwLCBtaWRkbGUgLSAxKV1bZmllbGRdO1xyXG4gICAgICAgIHZhbHVlID0gb3JkZXJlZEl0ZW1zW21pZGRsZV1bZmllbGRdO1xyXG4gICAgICAgIG5leHRWYWx1ZSA9XHJcbiAgICAgICAgICAgIG9yZGVyZWRJdGVtc1tNYXRoLm1pbihvcmRlcmVkSXRlbXMubGVuZ3RoIC0gMSwgbWlkZGxlICsgMSldW2ZpZWxkXTtcclxuICAgICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIHRoZSB0YXJnZXRcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcihwcmV2VmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBwcmV2aW91cyBhbmQgdGhlIGN1cnJlbnRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCIgPyBNYXRoLm1heCgwLCBtaWRkbGUgLSAxKSA6IG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA8IDAgJiZcclxuICAgICAgICAgICAgY29tcGFyYXRvcihuZXh0VmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dFxyXG4gICAgICAgICAgICByZXR1cm4gc2lkZVByZWZlcmVuY2UgPT0gXCJiZWZvcmVcIlxyXG4gICAgICAgICAgICAgICAgPyBtaWRkbGVcclxuICAgICAgICAgICAgICAgIDogTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGlkbnQgZmluZCB0aGUgdGFyZ2V0LCB3ZSBuZWVkIHRvIGNoYW5nZSBvdXIgYm91bmRhcmllcy5cclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICAgICAgbG93ID0gbWlkZGxlICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBiaWcgLS0+IGRlY3JlYXNlIGhpZ2hcclxuICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgfVxyXG4gICAgLy8gZGlkbnQgZmluZCBhbnl0aGluZy4gUmV0dXJuIC0xLlxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbi8qXHJcbiAqIEVhc2luZyBGdW5jdGlvbnMuXHJcbiAqIE9ubHkgY29uc2lkZXJpbmcgdGhlIHQgdmFsdWUgZm9yIHRoZSByYW5nZSBbMCwgMV0gPT4gWzAsIDFdLlxyXG4gKlxyXG4gKiBJbnNwaXJhdGlvbjogZnJvbSBodHRwOi8vZ2l6bWEuY29tL2Vhc2luZy9cclxuICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ3JlLzE2NTAyOTRcclxuICovXHJcbmNvbnN0IGVhc2luZ0Z1bmN0aW9ucyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgbm8gZWFzaW5nIGFuZCBubyBhY2NlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBsaW5lYXIodCkge1xyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5RdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiAoMiAtIHQpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDIgKiB0ICogdCA6IC0xICsgKDQgLSAyICogdCkgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5DdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRDdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gNCAqIHQgKiB0ICogdCA6ICh0IC0gMSkgKiAoMiAqIHQgLSAyKSAqICgyICogdCAtIDIpICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gMSAtIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gOCAqIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgKyAtLXQgKiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAxNiAqIHQgKiB0ICogdCAqIHQgKiB0IDogMSArIDE2ICogLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBFeHBlcmltZW50YWx5IGNvbXB1dGUgdGhlIHdpZHRoIG9mIHRoZSBzY3JvbGxiYXIgZm9yIHRoaXMgYnJvd3Nlci5cclxuICpcclxuICogQHJldHVybnMgVGhlIHdpZHRoIGluIHBpeGVscy5cclxuICovXHJcbmZ1bmN0aW9uIGdldFNjcm9sbEJhcldpZHRoKCkge1xyXG4gICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgIGlubmVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSBcIjIwMHB4XCI7XHJcbiAgICBjb25zdCBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBvdXRlci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgIG91dGVyLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuc3R5bGUud2lkdGggPSBcIjIwMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5oZWlnaHQgPSBcIjE1MHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcbiAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcclxuICAgIGNvbnN0IHcxID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwic2Nyb2xsXCI7XHJcbiAgICBsZXQgdzIgPSBpbm5lci5vZmZzZXRXaWR0aDtcclxuICAgIGlmICh3MSA9PSB3Mikge1xyXG4gICAgICAgIHcyID0gb3V0ZXIuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyKTtcclxuICAgIHJldHVybiB3MSAtIHcyO1xyXG59XHJcbi8vIEBUT0RPOiBUaGlzIGRvZXNuJ3Qgd29yayBwcm9wZXJseS5cclxuLy8gSXQgd29ya3Mgb25seSBmb3Igc2luZ2xlIHByb3BlcnR5IG9iamVjdHMsXHJcbi8vIG90aGVyd2lzZSBpdCBjb21iaW5lcyBhbGwgb2YgdGhlIHR5cGVzIGluIGEgdW5pb24uXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBWMT4gKFxyXG4vLyAgIHBpbGU6IFJlY29yZDxLMSwgdW5kZWZpbmVkIHwgVjE+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBLMSB8IFtLMV1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjFcclxuLy8gZXhwb3J0IGZ1bmN0aW9uIHRvcE1vc3Q8SzEgZXh0ZW5kcyBzdHJpbmcsIEsyIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjI+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgSzMgZXh0ZW5kcyBzdHJpbmcsIFYxLCBWMiwgVjM+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMiB8IFJlY29yZDxLMywgdW5kZWZpbmVkIHwgVjM+Pj5bXSxcclxuLy8gICBhY2Nlc3NvcnM6IFtLMSwgSzIsIEszXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyIHwgVjNcclxuLyoqXHJcbiAqIEdldCB0aGUgdG9wIG1vc3QgcHJvcGVydHkgdmFsdWUgZnJvbSBhIHBpbGUgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHBhcmFtIHBpbGUgLSBBcnJheSBvZiBvYmplY3RzLCBubyByZXF1aXJlZCBmb3JtYXQuXHJcbiAqIEBwYXJhbSBhY2Nlc3NvcnMgLSBBcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cclxuICogRm9yIGV4YW1wbGUgYG9iamVjdFsnZm9vJ11bJ2JhciddYCDihpIgYFsnZm9vJywgJ2JhciddYC5cclxuICogQHJldHVybnMgVmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpdGggZ2l2ZW4gYWNjZXNzb3JzIHBhdGggZnJvbSB0aGUgZmlyc3QgcGlsZSBpdGVtIHdoZXJlIGl0J3Mgbm90IHVuZGVmaW5lZC5cclxuICovXHJcbmZ1bmN0aW9uIHRvcE1vc3QocGlsZSwgYWNjZXNzb3JzKSB7XHJcbiAgICBsZXQgY2FuZGlkYXRlO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjY2Vzc29ycykpIHtcclxuICAgICAgICBhY2Nlc3NvcnMgPSBbYWNjZXNzb3JzXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHBpbGUpIHtcclxuICAgICAgICBpZiAobWVtYmVyKSB7XHJcbiAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG1lbWJlclthY2Nlc3NvcnNbMF1dO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFjY2Vzc29ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZVthY2Nlc3NvcnNbaV1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjYW5kaWRhdGU7XHJcbn1cblxuY29uc3QgaHRtbENvbG9ycyA9IHtcbiAgYmxhY2s6IFwiIzAwMDAwMFwiLFxuICBuYXZ5OiBcIiMwMDAwODBcIixcbiAgZGFya2JsdWU6IFwiIzAwMDA4QlwiLFxuICBtZWRpdW1ibHVlOiBcIiMwMDAwQ0RcIixcbiAgYmx1ZTogXCIjMDAwMEZGXCIsXG4gIGRhcmtncmVlbjogXCIjMDA2NDAwXCIsXG4gIGdyZWVuOiBcIiMwMDgwMDBcIixcbiAgdGVhbDogXCIjMDA4MDgwXCIsXG4gIGRhcmtjeWFuOiBcIiMwMDhCOEJcIixcbiAgZGVlcHNreWJsdWU6IFwiIzAwQkZGRlwiLFxuICBkYXJrdHVycXVvaXNlOiBcIiMwMENFRDFcIixcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IFwiIzAwRkE5QVwiLFxuICBsaW1lOiBcIiMwMEZGMDBcIixcbiAgc3ByaW5nZ3JlZW46IFwiIzAwRkY3RlwiLFxuICBhcXVhOiBcIiMwMEZGRkZcIixcbiAgY3lhbjogXCIjMDBGRkZGXCIsXG4gIG1pZG5pZ2h0Ymx1ZTogXCIjMTkxOTcwXCIsXG4gIGRvZGdlcmJsdWU6IFwiIzFFOTBGRlwiLFxuICBsaWdodHNlYWdyZWVuOiBcIiMyMEIyQUFcIixcbiAgZm9yZXN0Z3JlZW46IFwiIzIyOEIyMlwiLFxuICBzZWFncmVlbjogXCIjMkU4QjU3XCIsXG4gIGRhcmtzbGF0ZWdyYXk6IFwiIzJGNEY0RlwiLFxuICBsaW1lZ3JlZW46IFwiIzMyQ0QzMlwiLFxuICBtZWRpdW1zZWFncmVlbjogXCIjM0NCMzcxXCIsXG4gIHR1cnF1b2lzZTogXCIjNDBFMEQwXCIsXG4gIHJveWFsYmx1ZTogXCIjNDE2OUUxXCIsXG4gIHN0ZWVsYmx1ZTogXCIjNDY4MkI0XCIsXG4gIGRhcmtzbGF0ZWJsdWU6IFwiIzQ4M0Q4QlwiLFxuICBtZWRpdW10dXJxdW9pc2U6IFwiIzQ4RDFDQ1wiLFxuICBpbmRpZ286IFwiIzRCMDA4MlwiLFxuICBkYXJrb2xpdmVncmVlbjogXCIjNTU2QjJGXCIsXG4gIGNhZGV0Ymx1ZTogXCIjNUY5RUEwXCIsXG4gIGNvcm5mbG93ZXJibHVlOiBcIiM2NDk1RURcIixcbiAgbWVkaXVtYXF1YW1hcmluZTogXCIjNjZDREFBXCIsXG4gIGRpbWdyYXk6IFwiIzY5Njk2OVwiLFxuICBzbGF0ZWJsdWU6IFwiIzZBNUFDRFwiLFxuICBvbGl2ZWRyYWI6IFwiIzZCOEUyM1wiLFxuICBzbGF0ZWdyYXk6IFwiIzcwODA5MFwiLFxuICBsaWdodHNsYXRlZ3JheTogXCIjNzc4ODk5XCIsXG4gIG1lZGl1bXNsYXRlYmx1ZTogXCIjN0I2OEVFXCIsXG4gIGxhd25ncmVlbjogXCIjN0NGQzAwXCIsXG4gIGNoYXJ0cmV1c2U6IFwiIzdGRkYwMFwiLFxuICBhcXVhbWFyaW5lOiBcIiM3RkZGRDRcIixcbiAgbWFyb29uOiBcIiM4MDAwMDBcIixcbiAgcHVycGxlOiBcIiM4MDAwODBcIixcbiAgb2xpdmU6IFwiIzgwODAwMFwiLFxuICBncmF5OiBcIiM4MDgwODBcIixcbiAgc2t5Ymx1ZTogXCIjODdDRUVCXCIsXG4gIGxpZ2h0c2t5Ymx1ZTogXCIjODdDRUZBXCIsXG4gIGJsdWV2aW9sZXQ6IFwiIzhBMkJFMlwiLFxuICBkYXJrcmVkOiBcIiM4QjAwMDBcIixcbiAgZGFya21hZ2VudGE6IFwiIzhCMDA4QlwiLFxuICBzYWRkbGVicm93bjogXCIjOEI0NTEzXCIsXG4gIGRhcmtzZWFncmVlbjogXCIjOEZCQzhGXCIsXG4gIGxpZ2h0Z3JlZW46IFwiIzkwRUU5MFwiLFxuICBtZWRpdW1wdXJwbGU6IFwiIzkzNzBEOFwiLFxuICBkYXJrdmlvbGV0OiBcIiM5NDAwRDNcIixcbiAgcGFsZWdyZWVuOiBcIiM5OEZCOThcIixcbiAgZGFya29yY2hpZDogXCIjOTkzMkNDXCIsXG4gIHllbGxvd2dyZWVuOiBcIiM5QUNEMzJcIixcbiAgc2llbm5hOiBcIiNBMDUyMkRcIixcbiAgYnJvd246IFwiI0E1MkEyQVwiLFxuICBkYXJrZ3JheTogXCIjQTlBOUE5XCIsXG4gIGxpZ2h0Ymx1ZTogXCIjQUREOEU2XCIsXG4gIGdyZWVueWVsbG93OiBcIiNBREZGMkZcIixcbiAgcGFsZXR1cnF1b2lzZTogXCIjQUZFRUVFXCIsXG4gIGxpZ2h0c3RlZWxibHVlOiBcIiNCMEM0REVcIixcbiAgcG93ZGVyYmx1ZTogXCIjQjBFMEU2XCIsXG4gIGZpcmVicmljazogXCIjQjIyMjIyXCIsXG4gIGRhcmtnb2xkZW5yb2Q6IFwiI0I4ODYwQlwiLFxuICBtZWRpdW1vcmNoaWQ6IFwiI0JBNTVEM1wiLFxuICByb3N5YnJvd246IFwiI0JDOEY4RlwiLFxuICBkYXJra2hha2k6IFwiI0JEQjc2QlwiLFxuICBzaWx2ZXI6IFwiI0MwQzBDMFwiLFxuICBtZWRpdW12aW9sZXRyZWQ6IFwiI0M3MTU4NVwiLFxuICBpbmRpYW5yZWQ6IFwiI0NENUM1Q1wiLFxuICBwZXJ1OiBcIiNDRDg1M0ZcIixcbiAgY2hvY29sYXRlOiBcIiNEMjY5MUVcIixcbiAgdGFuOiBcIiNEMkI0OENcIixcbiAgbGlnaHRncmV5OiBcIiNEM0QzRDNcIixcbiAgcGFsZXZpb2xldHJlZDogXCIjRDg3MDkzXCIsXG4gIHRoaXN0bGU6IFwiI0Q4QkZEOFwiLFxuICBvcmNoaWQ6IFwiI0RBNzBENlwiLFxuICBnb2xkZW5yb2Q6IFwiI0RBQTUyMFwiLFxuICBjcmltc29uOiBcIiNEQzE0M0NcIixcbiAgZ2FpbnNib3JvOiBcIiNEQ0RDRENcIixcbiAgcGx1bTogXCIjRERBMEREXCIsXG4gIGJ1cmx5d29vZDogXCIjREVCODg3XCIsXG4gIGxpZ2h0Y3lhbjogXCIjRTBGRkZGXCIsXG4gIGxhdmVuZGVyOiBcIiNFNkU2RkFcIixcbiAgZGFya3NhbG1vbjogXCIjRTk5NjdBXCIsXG4gIHZpb2xldDogXCIjRUU4MkVFXCIsXG4gIHBhbGVnb2xkZW5yb2Q6IFwiI0VFRThBQVwiLFxuICBsaWdodGNvcmFsOiBcIiNGMDgwODBcIixcbiAga2hha2k6IFwiI0YwRTY4Q1wiLFxuICBhbGljZWJsdWU6IFwiI0YwRjhGRlwiLFxuICBob25leWRldzogXCIjRjBGRkYwXCIsXG4gIGF6dXJlOiBcIiNGMEZGRkZcIixcbiAgc2FuZHlicm93bjogXCIjRjRBNDYwXCIsXG4gIHdoZWF0OiBcIiNGNURFQjNcIixcbiAgYmVpZ2U6IFwiI0Y1RjVEQ1wiLFxuICB3aGl0ZXNtb2tlOiBcIiNGNUY1RjVcIixcbiAgbWludGNyZWFtOiBcIiNGNUZGRkFcIixcbiAgZ2hvc3R3aGl0ZTogXCIjRjhGOEZGXCIsXG4gIHNhbG1vbjogXCIjRkE4MDcyXCIsXG4gIGFudGlxdWV3aGl0ZTogXCIjRkFFQkQ3XCIsXG4gIGxpbmVuOiBcIiNGQUYwRTZcIixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiI0ZBRkFEMlwiLFxuICBvbGRsYWNlOiBcIiNGREY1RTZcIixcbiAgcmVkOiBcIiNGRjAwMDBcIixcbiAgZnVjaHNpYTogXCIjRkYwMEZGXCIsXG4gIG1hZ2VudGE6IFwiI0ZGMDBGRlwiLFxuICBkZWVwcGluazogXCIjRkYxNDkzXCIsXG4gIG9yYW5nZXJlZDogXCIjRkY0NTAwXCIsXG4gIHRvbWF0bzogXCIjRkY2MzQ3XCIsXG4gIGhvdHBpbms6IFwiI0ZGNjlCNFwiLFxuICBjb3JhbDogXCIjRkY3RjUwXCIsXG4gIGRhcmtvcmFuZ2U6IFwiI0ZGOEMwMFwiLFxuICBsaWdodHNhbG1vbjogXCIjRkZBMDdBXCIsXG4gIG9yYW5nZTogXCIjRkZBNTAwXCIsXG4gIGxpZ2h0cGluazogXCIjRkZCNkMxXCIsXG4gIHBpbms6IFwiI0ZGQzBDQlwiLFxuICBnb2xkOiBcIiNGRkQ3MDBcIixcbiAgcGVhY2hwdWZmOiBcIiNGRkRBQjlcIixcbiAgbmF2YWpvd2hpdGU6IFwiI0ZGREVBRFwiLFxuICBtb2NjYXNpbjogXCIjRkZFNEI1XCIsXG4gIGJpc3F1ZTogXCIjRkZFNEM0XCIsXG4gIG1pc3R5cm9zZTogXCIjRkZFNEUxXCIsXG4gIGJsYW5jaGVkYWxtb25kOiBcIiNGRkVCQ0RcIixcbiAgcGFwYXlhd2hpcDogXCIjRkZFRkQ1XCIsXG4gIGxhdmVuZGVyYmx1c2g6IFwiI0ZGRjBGNVwiLFxuICBzZWFzaGVsbDogXCIjRkZGNUVFXCIsXG4gIGNvcm5zaWxrOiBcIiNGRkY4RENcIixcbiAgbGVtb25jaGlmZm9uOiBcIiNGRkZBQ0RcIixcbiAgZmxvcmFsd2hpdGU6IFwiI0ZGRkFGMFwiLFxuICBzbm93OiBcIiNGRkZBRkFcIixcbiAgeWVsbG93OiBcIiNGRkZGMDBcIixcbiAgbGlnaHR5ZWxsb3c6IFwiI0ZGRkZFMFwiLFxuICBpdm9yeTogXCIjRkZGRkYwXCIsXG4gIHdoaXRlOiBcIiNGRkZGRkZcIixcbn07XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gKi9cbmxldCBDb2xvclBpY2tlciQxID0gY2xhc3MgQ29sb3JQaWNrZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwaXhlbFJhdGlvID0gMSkge1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiAyODkgLyAyLCB5OiAyODkgLyAyIH07XG4gICAgdGhpcy5yID0gMjg5ICogMC40OTtcbiAgICB0aGlzLmNvbG9yID0geyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhOiAxLjAgfTtcbiAgICB0aGlzLmh1ZUNpcmNsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmluaXRpYWxDb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5wcmV2aW91c0NvbG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuXG4gICAgLy8gYm91bmQgYnlcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gKCkgPT4ge307XG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gKCkgPT4ge307XG5cbiAgICAvLyBjcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgIHRoaXMuX2NyZWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgaW5zZXJ0cyB0aGUgY29sb3JQaWNrZXIgaW50byBhIGRpdiBmcm9tIHRoZSBET01cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAgICovXG4gIGluc2VydFRvKGNvbnRhaW5lcikge1xuICAgIGlmICh0aGlzLmhhbW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhhbW1lci5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhhbW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuXG4gICAgdGhpcy5fc2V0U2l6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldFVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIG9uIGFwcGx5IGFuZCBzYXZlLiBCaW5kIGl0IHRvIHRoZSBhcHBsaWNhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgc2V0Q2xvc2VDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIGNsb3NpbmcgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lzQ29sb3JTdHJpbmcoY29sb3IpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gaHRtbENvbG9yc1tjb2xvcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29sb3Igb2YgdGhlIGNvbG9yUGlja2VyXG4gICAqIFN1cHBvcnRlZCBmb3JtYXRzOlxuICAgKiAncmVkJyAgICAgICAgICAgICAgICAgICAtLT4gSFRNTCBjb2xvciBzdHJpbmdcbiAgICogJyNmZmZmZmYnICAgICAgICAgICAgICAgLS0+IGhleCBzdHJpbmdcbiAgICogJ3JnYigyNTUsMjU1LDI1NSknICAgICAgLS0+IHJnYiBzdHJpbmdcbiAgICogJ3JnYmEoMjU1LDI1NSwyNTUsMS4wKScgLS0+IHJnYmEgc3RyaW5nXG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NX0gICAgIC0tPiByZ2Igb2JqZWN0XG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NSxhOjEuMH0gLS0+IHJnYmEgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgb2JqZWN0fSBjb2xvclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqL1xuICBzZXRDb2xvcihjb2xvciwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICBpZiAoY29sb3IgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJnYmE7XG5cbiAgICAvLyBpZiBhIGh0bWwgY29sb3Igc2hvcnRoYW5kIGlzIHVzZWQsIGNvbnZlcnQgdG8gaGV4XG4gICAgY29uc3QgaHRtbENvbG9yID0gdGhpcy5faXNDb2xvclN0cmluZyhjb2xvcik7XG4gICAgaWYgKGh0bWxDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IGh0bWxDb2xvcjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3JtYXRcbiAgICBpZiAoaXNTdHJpbmcoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICBpZiAoaXNWYWxpZFJHQihjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDQpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA1KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYmFBcnJheVswXSwgZzogcmdiYUFycmF5WzFdLCBiOiByZ2JhQXJyYXlbMl0sIGE6IDEuMCB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkUkdCQShjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDUpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA2KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7XG4gICAgICAgICAgcjogcmdiYUFycmF5WzBdLFxuICAgICAgICAgIGc6IHJnYmFBcnJheVsxXSxcbiAgICAgICAgICBiOiByZ2JhQXJyYXlbMl0sXG4gICAgICAgICAgYTogcmdiYUFycmF5WzNdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkSGV4KGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZ2JPYmogPSBoZXhUb1JHQihjb2xvcik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYk9iai5yLCBnOiByZ2JPYmouZywgYjogcmdiT2JqLmIsIGE6IDEuMCB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29sb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbG9yLnIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmIgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBhbHBoYSA9IGNvbG9yLmEgIT09IHVuZGVmaW5lZCA/IGNvbG9yLmEgOiBcIjEuMFwiO1xuICAgICAgICAgIHJnYmEgPSB7IHI6IGNvbG9yLnIsIGc6IGNvbG9yLmcsIGI6IGNvbG9yLmIsIGE6IGFscGhhIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBpZiAocmdiYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biBjb2xvciBwYXNzZWQgdG8gdGhlIGNvbG9yUGlja2VyLiBTdXBwb3J0ZWQgYXJlIHN0cmluZ3M6IHJnYiwgaGV4LCByZ2JhLiBPYmplY3Q6IHJnYiAoe3I6cixnOmcsYjpiLFthOmFdfSkuIFN1cHBsaWVkOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29sb3IpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzaG93cyB0aGUgY29sb3IgcGlja2VyLlxuICAgKiBUaGUgaHVlIGNpcmNsZSBpcyBjb25zdHJ1Y3RlZCBvbmNlIGFuZCBzdG9yZWQuXG4gICAqL1xuICBzaG93KCkge1xuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrKCk7XG4gICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIHRoaXMuX2dlbmVyYXRlSHVlQ2lyY2xlKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFJJVkFURSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwaWNrZXIuIElzIGNhbGxlZCBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogT3B0aW9uYWwgYm9vbGVhbiB0byBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIGVhc3kgYWNjZXNzIGxhdGVyIG9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdG9yZVByZXZpb3VzPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGlkZShzdG9yZVByZXZpb3VzID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBwcmV2aW91cyBjb2xvciBmb3IgbmV4dCB0aW1lO1xuICAgIGlmIChzdG9yZVByZXZpb3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnByZXZpb3VzQ29sb3IgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbG9yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHBsaWVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuaW5pdGlhbENvbG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblxuICAgIC8vIGNhbGwgdGhlIGNsb3NpbmcgY2FsbGJhY2ssIHJlc3RvcmluZyB0aGUgb25jbGljayBtZXRob2QuXG4gICAgLy8gdGhpcyBpcyBpbiBhIHNldFRpbWVvdXQgYmVjYXVzZSBpdCB3aWxsIHRyaWdnZXIgdGhlIHNob3cgYWdhaW4gYmVmb3JlIHRoZSBjbGljayBpcyBkb25lLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2xvc2VDYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gdGhlIHNhdmUgYnV0dG9uLiBTYXZlcyBhbmQgaGlkZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2F2ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuY29sb3IpO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuX2hpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCb3VuZCB0byBhcHBseSBidXR0b24uIFNhdmVzIGJ1dCBkb2VzIG5vdCBjbG9zZS4gSXMgdW5kb25lIGJ5IHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FwcGx5KCkge1xuICAgIHRoaXMuYXBwbGllZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogbG9hZCB0aGUgY29sb3IgZnJvbSB0aGUgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkTGFzdCgpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c0NvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0Q29sb3IodGhpcy5wcmV2aW91c0NvbG9yLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsZXJ0KFwiVGhlcmUgaXMgbm8gbGFzdCBjb2xvciB0byBsb2FkLi4uXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGNvbG9yLCBwbGFjZSB0aGUgcGlja2VyXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZ2JhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NldEluaXRpYWw9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBpbml0aWFsIGNvbG9yXG4gICAgaWYgKHNldEluaXRpYWwgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgcmdiYSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvciA9IHJnYmE7XG4gICAgY29uc3QgaHN2ID0gUkdCVG9IU1YocmdiYS5yLCByZ2JhLmcsIHJnYmEuYik7XG5cbiAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAyICogTWF0aC5QSTtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLnIgKiBoc3YucztcbiAgICBjb25zdCB4ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcbiAgICBjb25zdCB5ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIHggLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICB5IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudEhlaWdodCArIFwicHhcIjtcblxuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcihyZ2JhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBvcGFjaXR5IGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0T3BhY2l0eSh2YWx1ZSkge1xuICAgIHRoaXMuY29sb3IuYSA9IHZhbHVlIC8gMTAwO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcih0aGlzLmNvbG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBicmlnaHRuZXNzIGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QnJpZ2h0bmVzcyh2YWx1ZSkge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi52ID0gdmFsdWUgLyAxMDA7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgY29sb3IgcGlja2VyLiBBIGJsYWNrIGNpcmNsZSBvdmVybGF5cyB0aGUgaHVlIGNpcmNsZSB0byBtaW1pYyB0aGUgYnJpZ2h0bmVzcyBkZWNyZWFzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZVBpY2tlcihyZ2JhID0gdGhpcy5jb2xvcikge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgfVxuICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuXG4gICAgY3R4LnB1dEltYWdlRGF0YSh0aGlzLmh1ZUNpcmNsZSwgMCwgMCk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgwLDAsMCxcIiArICgxIC0gaHN2LnYpICsgXCIpXCI7XG4gICAgY3R4LmNpcmNsZSh0aGlzLmNlbnRlckNvb3JkaW5hdGVzLngsIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSwgdGhpcy5yKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudmFsdWUgPSAxMDAgKiBoc3YudjtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IDEwMCAqIHJnYmEuYTtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgY3JlYXRlIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFNpemUoKSB7XG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLndpZHRoID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuaGVpZ2h0ID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhbGwgZG9tIGVsZW1lbnRzXG4gICAqIFRPRE86IGNsZWFudXAsIGxvdHMgb2Ygc2ltaWxhciBkb20gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5mcmFtZS5jbGFzc05hbWUgPSBcInZpcy1jb2xvci1waWNrZXJcIjtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsYXNzTmFtZSA9IFwidmlzLXNlbGVjdG9yXCI7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcblxuICAgIGlmICghdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KSB7XG4gICAgICBjb25zdCBub0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIik7XG4gICAgICBub0NhbnZhcy5zdHlsZS5jb2xvciA9IFwicmVkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5wYWRkaW5nID0gXCIxMHB4XCI7XG4gICAgICBub0NhbnZhcy5pbm5lclRleHQgPSBcIkVycm9yOiB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBIVE1MIGNhbnZhc1wiO1xuICAgICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5hcHBlbmRDaGlsZChub0NhbnZhcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgKGN0eC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAxKTtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXNcbiAgICAgICAgLmdldENvbnRleHQoXCIyZFwiKVxuICAgICAgICAuc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbG9yXCI7XG5cbiAgICB0aGlzLm9wYWNpdHlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eURpdi5jbGFzc05hbWUgPSBcInZpcy1vcGFjaXR5XCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0Rpdi5jbGFzc05hbWUgPSBcInZpcy1icmlnaHRuZXNzXCI7XG5cbiAgICB0aGlzLmFycm93RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmFycm93RGl2LmNsYXNzTmFtZSA9IFwidmlzLWFycm93XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS50eXBlID0gXCJyYW5nZVwiOyAvLyBOb3Qgc3VwcG9ydGVkIG9uIElFOVxuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWluID0gXCIwXCI7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5tYXggPSBcIjEwMFwiO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVE9ETzogQWRkIHNvbWUgZXJyb3IgaGFuZGxpbmcuXG4gICAgfVxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gXCIxMDBcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5jbGFzc05hbWUgPSBcInZpcy1yYW5nZVwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2LmFwcGVuZENoaWxkKHRoaXMub3BhY2l0eVJhbmdlKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuYXBwZW5kQ2hpbGQodGhpcy5icmlnaHRuZXNzUmFuZ2UpO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmlucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLWJyaWdodG5lc3NcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbC5pbm5lclRleHQgPSBcImJyaWdodG5lc3M6XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLW9wYWNpdHlcIjtcbiAgICB0aGlzLm9wYWNpdHlMYWJlbC5pbm5lclRleHQgPSBcIm9wYWNpdHk6XCI7XG5cbiAgICB0aGlzLm5ld0NvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmNsYXNzTmFtZSA9IFwidmlzLW5ldy1jb2xvclwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuaW5uZXJUZXh0ID0gXCJuZXdcIjtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1pbml0aWFsLWNvbG9yXCI7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuaW5uZXJUZXh0ID0gXCJpbml0aWFsXCI7XG5cbiAgICB0aGlzLmNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1jYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5pbm5lclRleHQgPSBcImNhbmNlbFwiO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9oaWRlLmJpbmQodGhpcywgZmFsc2UpO1xuXG4gICAgdGhpcy5hcHBseUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5pbm5lclRleHQgPSBcImFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fYXBwbHkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2F2ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5zYXZlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtc2F2ZVwiO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5pbm5lclRleHQgPSBcInNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24ub25jbGljayA9IHRoaXMuX3NhdmUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubG9hZEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5sb2FkQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtbG9hZFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5pbm5lclRleHQgPSBcImxvYWQgbGFzdFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fbG9hZExhc3QuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFycm93RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0xhYmVsKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uZXdDb2xvckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmluaXRpYWxDb2xvckRpdik7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY2FuY2VsQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYXBwbHlCdXR0b24pO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5zYXZlQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubG9hZEJ1dHRvbik7XG4gIH1cblxuICAvKipcbiAgICogYmluZCBoYW1tZXIgdG8gdGhlIGNvbG9yIHBpY2tlclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JpbmRIYW1tZXIoKSB7XG4gICAgdGhpcy5kcmFnID0ge307XG4gICAgdGhpcy5waW5jaCA9IHt9O1xuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lciQxKHRoaXMuY29sb3JQaWNrZXJDYW52YXMpO1xuICAgIHRoaXMuaGFtbWVyLmdldChcInBpbmNoXCIpLnNldCh7IGVuYWJsZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuaGFtbWVyLm9uKFwiaGFtbWVyLmlucHV0XCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmlzRmlyc3QpIHtcbiAgICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5zdGFydFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5tb3ZlXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbmVuZFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2VuZXJhdGUgdGhlIGh1ZSBjaXJjbGUuIFRoaXMgaXMgcmVsYXRpdmVseSBoZWF2eSAoMjAwbXMpIGFuZCBpcyBkb25lIG9ubHkgb25jZSBvbiB0aGUgZmlyc3QgdGltZSBpdCBpcyBzaG93bi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZW5lcmF0ZUh1ZUNpcmNsZSgpIHtcbiAgICBpZiAodGhpcy5nZW5lcmF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIDEpO1xuICAgICAgfVxuICAgICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG5cbiAgICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgaCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gZHJhdyBodWUgY2lyY2xlXG4gICAgICBsZXQgeCwgeSwgaHVlLCBzYXQ7XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiB3ICogMC41LCB5OiBoICogMC41IH07XG4gICAgICB0aGlzLnIgPSAwLjQ5ICogdztcbiAgICAgIGNvbnN0IGFuZ2xlQ29udmVydCA9ICgyICogTWF0aC5QSSkgLyAzNjA7XG4gICAgICBjb25zdCBoZmFjID0gMSAvIDM2MDtcbiAgICAgIGNvbnN0IHNmYWMgPSAxIC8gdGhpcy5yO1xuICAgICAgbGV0IHJnYjtcbiAgICAgIGZvciAoaHVlID0gMDsgaHVlIDwgMzYwOyBodWUrKykge1xuICAgICAgICBmb3IgKHNhdCA9IDA7IHNhdCA8IHRoaXMucjsgc2F0KyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy54ICsgc2F0ICogTWF0aC5zaW4oYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICB5ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy55ICsgc2F0ICogTWF0aC5jb3MoYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICByZ2IgPSBIU1ZUb1JHQihodWUgKiBoZmFjLCBzYXQgKiBzZmFjLCAxKTtcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2IoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIpXCI7XG4gICAgICAgICAgY3R4LmZpbGxSZWN0KHggLSAwLjUsIHkgLSAwLjUsIDIsIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsMSlcIjtcbiAgICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIHRoaXMuaHVlQ2lyY2xlID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIHNlbGVjdG9yLiBUaGlzIGlzIGNhbGxlZCBieSBoYW1tZXIgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlU2VsZWN0b3IoZXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jb2xvclBpY2tlckRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBsZWZ0ID0gZXZlbnQuY2VudGVyLnggLSByZWN0LmxlZnQ7XG4gICAgY29uc3QgdG9wID0gZXZlbnQuY2VudGVyLnkgLSByZWN0LnRvcDtcblxuICAgIGNvbnN0IGNlbnRlclkgPSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyRGl2LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBjZW50ZXJYID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRXaWR0aDtcblxuICAgIGNvbnN0IHggPSBsZWZ0IC0gY2VudGVyWDtcbiAgICBjb25zdCB5ID0gdG9wIC0gY2VudGVyWTtcblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMih4LCB5KTtcbiAgICBjb25zdCByYWRpdXMgPSAwLjk4ICogTWF0aC5taW4oTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpLCBjZW50ZXJYKTtcblxuICAgIGNvbnN0IG5ld1RvcCA9IE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclk7XG4gICAgY29uc3QgbmV3TGVmdCA9IE1hdGguc2luKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclg7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUudG9wID1cbiAgICAgIG5ld1RvcCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLmxlZnQgPVxuICAgICAgbmV3TGVmdCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRXaWR0aCArIFwicHhcIjtcblxuICAgIC8vIHNldCBjb2xvclxuICAgIGxldCBoID0gYW5nbGUgLyAoMiAqIE1hdGguUEkpO1xuICAgIGggPSBoIDwgMCA/IGggKyAxIDogaDtcbiAgICBjb25zdCBzID0gcmFkaXVzIC8gdGhpcy5yO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi5oID0gaDtcbiAgICBoc3YucyA9IHM7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuXG4gICAgLy8gdXBkYXRlIHByZXZpZXdzXG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmNvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gIH1cbn07XG5cbi8qKlxuICogV3JhcCBnaXZlbiB0ZXh0IChsYXN0IGFyZ3VtZW50KSBpbiBIVE1MIGVsZW1lbnRzIChhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cykuXG4gKlxuICogQHBhcmFtIHsuLi5hbnl9IHJlc3QgLSBMaXN0IG9mIHRhZyBuYW1lcyBmb2xsb3dlZCBieSBpbm5lciB0ZXh0LlxuICogQHJldHVybnMgQW4gZWxlbWVudCBvciBhIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gd3JhcEluVGFnKC4uLnJlc3QpIHtcbiAgaWYgKHJlc3QubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cy5cIik7XG4gIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVzdFswXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmVzdFswXSk7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoLi4ucmVzdC5zbGljZSgxKSkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHdheSB0aGlzIHdvcmtzIGlzIGZvciBhbGwgcHJvcGVydGllcyBvZiB0aGlzLnBvc3NpYmxlIG9wdGlvbnMsIHlvdSBjYW4gc3VwcGx5IHRoZSBwcm9wZXJ0eSBuYW1lIGluIGFueSBmb3JtIHRvIGxpc3QgdGhlIG9wdGlvbnMuXG4gKiBCb29sZWFuIG9wdGlvbnMgYXJlIHJlY29nbmlzZWQgYXMgQm9vbGVhblxuICogTnVtYmVyIG9wdGlvbnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtkZWZhdWx0IHZhbHVlLCBtaW4gdmFsdWUsIG1heCB2YWx1ZSwgc3RlcHNpemVdXG4gKiBDb2xvcnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFsnY29sb3InLCAnI2ZmZmZmZiddXG4gKiBTdHJpbmdzIHdpdGggc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtvcHRpb24xLCBvcHRpb24yLCBvcHRpb24zLCAuLl1cbiAqXG4gKiBUaGUgb3B0aW9ucyBhcmUgbWF0Y2hlZCB3aXRoIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiBlYWNoIG9mIHRoZSBtb2R1bGVzIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYXJlXG4gKi9cbmxldCBDb25maWd1cmF0b3IkMSA9IGNsYXNzIENvbmZpZ3VyYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50TW9kdWxlICAgICAgICB8IHRoZSBsb2NhdGlvbiB3aGVyZSBwYXJlbnRNb2R1bGUuc2V0T3B0aW9ucygpIGNhbiBiZSBjYWxsZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRDb250YWluZXIgICAgfCB0aGUgZGVmYXVsdCBjb250YWluZXIgb2YgdGhlIG1vZHVsZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlndXJlT3B0aW9ucyAgICB8IHRoZSBmdWxseSBjb25maWd1cmVkIGFuZCBwcmVkZWZpbmVkIG9wdGlvbnMgc2V0IGZvdW5kIGluIGFsbE9wdGlvbnMuanNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBpeGVsUmF0aW8gICAgICAgICAgfCBjYW52YXMgcGl4ZWwgcmF0aW9cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGlkZU9wdGlvbiAgICAgICAgfCBjdXN0b20gbG9naWMgdG8gZHluYW1pY2FsbHkgaGlkZSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnRNb2R1bGUsXG4gICAgZGVmYXVsdENvbnRhaW5lcixcbiAgICBjb25maWd1cmVPcHRpb25zLFxuICAgIHBpeGVsUmF0aW8gPSAxLFxuICAgIGhpZGVPcHRpb24gPSAoKSA9PiBmYWxzZVxuICApIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudE1vZHVsZTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG4gICAgdGhpcy5jb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyO1xuICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaGlkZU9wdGlvbiA9IGhpZGVPcHRpb247XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5wb3B1cENvdW50ZXIgPSAwO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgIGNvbnRhaW5lcjogdW5kZWZpbmVkLFxuICAgICAgc2hvd0J1dHRvbjogdHJ1ZSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuY29uZmlndXJlT3B0aW9ucyA9IGNvbmZpZ3VyZU9wdGlvbnM7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0ge307XG4gICAgdGhpcy5kb21FbGVtZW50cyA9IFtdO1xuICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB0aGlzLnBvcHVwTGltaXQgPSA1O1xuICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgdGhpcy5jb2xvclBpY2tlciA9IG5ldyBDb2xvclBpY2tlciQxKHBpeGVsUmF0aW8pO1xuICAgIHRoaXMud3JhcHBlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoIGFsbCBvcHRpb25zLlxuICAgKiBCZWNhdXNlIGFsbCBtb2R1bGVzIHBhcnNlIHRoZWlyIG9wdGlvbnMgYnkgdGhlbXNlbHZlcywgd2UganVzdCB1c2UgdGhlaXIgb3B0aW9ucy4gV2UgY29weSB0aGVtIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXNldCB0aGUgcG9wdXAgaGlzdG9yeSBiZWNhdXNlIHRoZSBpbmRpY2VzIG1heSBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuXG4gICAgICBsZXQgZW5hYmxlZCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuam9pbigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbnMgY2Fubm90IGJlIG51bGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0J1dHRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3dCdXR0b24gPSBvcHRpb25zLnNob3dCdXR0b247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgIGVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICBlbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICB9XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kdWxlT3B0aW9uc1xuICAgKi9cbiAgc2V0TW9kdWxlT3B0aW9ucyhtb2R1bGVPcHRpb25zKSB7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0gbW9kdWxlT3B0aW9ucztcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NyZWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMgPSBbXTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMub3B0aW9ucy5maWx0ZXI7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gdGhpcy5jb25maWd1cmVPcHRpb25zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlndXJlT3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICAgICAgc2hvdyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc2hvdyA9IGZpbHRlcihvcHRpb24sIFtdKTtcbiAgICAgICAgICBzaG93ID1cbiAgICAgICAgICAgIHNob3cgfHxcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnNbb3B0aW9uXSwgW29wdGlvbl0sIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIuaW5kZXhPZihvcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIGxpbmVicmVhayBiZXR3ZWVuIGNhdGVnb3JpZXNcbiAgICAgICAgICBpZiAoY291bnRlciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VJdGVtKFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYSBoZWFkZXIgZm9yIHRoZSBjYXRlZ29yeVxuICAgICAgICAgIHRoaXMuX21ha2VIZWFkZXIob3B0aW9uKTtcblxuICAgICAgICAgIC8vIGdldCB0aGUgc3ViIG9wdGlvbnNcbiAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dKTtcbiAgICAgICAgfVxuICAgICAgICBjb3VudGVyKys7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX21ha2VCdXR0b24oKTtcbiAgICB0aGlzLl9wdXNoKCk7XG4gICAgLy9+IHRoaXMuY29sb3JQaWNrZXIuaW5zZXJ0VG8odGhpcy5jb250YWluZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRyYXcgYWxsIERPTSBlbGVtZW50cyBvbiB0aGUgc2NyZWVuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHVzaCgpIHtcbiAgICB0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMud3JhcHBlci5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uLXdyYXBwZXJcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuZG9tRWxlbWVudHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX3Nob3dQb3B1cElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogZGVsZXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5yZW1vdmVDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53cmFwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcblxuICAgIHRoaXMuX3JlbW92ZVBvcHVwKCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBhY3R1YWxPcHRpb25zIGlmIGl0IGV4aXN0c1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0VmFsdWUocGF0aCkge1xuICAgIGxldCBiYXNlID0gdGhpcy5tb2R1bGVPcHRpb25zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJhc2VbcGF0aFtpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBiYXNlID0gYmFzZVtwYXRoW2ldXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGwgb3B0aW9uIGVsZW1lbnRzIGFyZSB3cmFwcGVkIGluIGFuIGl0ZW1cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnQ+fSBkb21FbGVtZW50c1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VJdGVtKHBhdGgsIC4uLmRvbUVsZW1lbnRzKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBpdGVtLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1pdGVtIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgICBkb21FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogaGVhZGVyIGZvciBtYWpvciBzdWJqZWN0c1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VIZWFkZXIobmFtZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1oZWFkZXJcIjtcbiAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZTtcbiAgICB0aGlzLl9tYWtlSXRlbShbXSwgZGl2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgbGFiZWwsIGlmIGl0IGlzIGFuIG9iamVjdCBsYWJlbCwgaXQgZ2V0cyBkaWZmZXJlbnQgc3R5bGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RMYWJlbFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUxhYmVsKG5hbWUsIHBhdGgsIG9iamVjdExhYmVsID0gZmFsc2UpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWxhYmVsIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgaWYgKG9iamVjdExhYmVsID09PSB0cnVlKSB7XG4gICAgICB3aGlsZSAoZGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIGRpdi5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoXCJpXCIsIFwiYlwiLCBuYW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBuYW1lICsgXCI6XCI7XG4gICAgfVxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGRyb3Bkb3duIGxpc3QgZm9yIG11bHRpcGxlIHBvc3NpYmxlIHN0cmluZyBvcHRvaW5zXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgIHNlbGVjdC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctc2VsZWN0XCI7XG4gICAgbGV0IHNlbGVjdGVkVmFsdWUgPSAwO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYXJyLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gYXJyLmluZGV4T2YodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgb3B0aW9uLnZhbHVlID0gYXJyW2ldO1xuICAgICAgaWYgKGkgPT09IHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gXCJzZWxlY3RlZFwiO1xuICAgICAgfVxuICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IGFycltpXTtcbiAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBzZWxlY3Qub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBzZWxlY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSByYW5nZSBvYmplY3QgZm9yIG51bWVyaWMgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VSYW5nZShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXJyWzBdO1xuICAgIGNvbnN0IG1pbiA9IGFyclsxXTtcbiAgICBjb25zdCBtYXggPSBhcnJbMl07XG4gICAgY29uc3Qgc3RlcCA9IGFyclszXTtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICByYW5nZS5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctcmFuZ2VcIjtcbiAgICB0cnkge1xuICAgICAgcmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gbm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHJhbmdlLm1pbiA9IG1pbjtcbiAgICAgIHJhbmdlLm1heCA9IG1heDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICByYW5nZS5zdGVwID0gc3RlcDtcblxuICAgIC8vIHNldCB1cCB0aGUgcG9wdXAgc2V0dGluZ3MgaW4gY2FzZSB0aGV5IGFyZSBuZWVkZWQuXG4gICAgbGV0IHBvcHVwU3RyaW5nID0gXCJcIjtcbiAgICBsZXQgcG9wdXBWYWx1ZSA9IDA7XG5cbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmFjdG9yID0gMS4yO1xuICAgICAgaWYgKHZhbHVlIDwgMCAmJiB2YWx1ZSAqIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgKiBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIC8gZmFjdG9yIDwgbWluKSB7XG4gICAgICAgIHJhbmdlLm1pbiA9IE1hdGguY2VpbCh2YWx1ZSAvIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5taW47XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAqIGZhY3RvciA+IG1heCAmJiBtYXggIT09IDEpIHtcbiAgICAgICAgcmFuZ2UubWF4ID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1heDtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfVxuICAgICAgcmFuZ2UudmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgaW5wdXQuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlaW5wdXRcIjtcbiAgICBpbnB1dC52YWx1ZSA9IHJhbmdlLnZhbHVlO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgbWUuX3VwZGF0ZShOdW1iZXIodGhpcy52YWx1ZSksIHBhdGgpO1xuICAgIH07XG4gICAgcmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgcmFuZ2UsIGlucHV0KTtcblxuICAgIC8vIGlmIGEgcG9wdXAgaXMgbmVlZGVkIEFORCBpdCBoYXMgbm90IGJlZW4gc2hvd24gZm9yIHRoaXMgdmFsdWUsIHNob3cgaXQuXG4gICAgaWYgKHBvcHVwU3RyaW5nICE9PSBcIlwiICYmIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gIT09IHBvcHVwVmFsdWUpIHtcbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gPSBwb3B1cFZhbHVlO1xuICAgICAgdGhpcy5fc2V0dXBQb3B1cChwb3B1cFN0cmluZywgaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGJ1dHRvbiBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0J1dHRvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZ2VuZXJhdGVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvblwiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uaW5uZXJUZXh0ID0gXCJnZW5lcmF0ZSBvcHRpb25zXCI7XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9wcmludE9wdGlvbnMoKTtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3ZlciA9ICgpID0+IHtcbiAgICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiBob3ZlclwiO1xuICAgICAgfTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLm9ubW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLW9wdGlvbi1jb250YWluZXJcIjtcblxuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKHRoaXMub3B0aW9uc0NvbnRhaW5lcik7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goZ2VuZXJhdGVCdXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwcmVwYXJlIHRoZSBwb3B1cFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldHVwUG9wdXAoc3RyaW5nLCBpbmRleCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5wb3B1cENvdW50ZXIgPCB0aGlzLnBvcHVwTGltaXRcbiAgICApIHtcbiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBkaXYuaWQgPSBcInZpcy1jb25maWd1cmF0aW9uLXBvcHVwXCI7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmlubmVyVGV4dCA9IHN0cmluZztcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyICs9IDE7XG4gICAgICB0aGlzLnBvcHVwRGl2ID0geyBodG1sOiBkaXYsIGluZGV4OiBpbmRleCB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmUgdGhlIHBvcHVwIGZyb20gdGhlIGRvbVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZVBvcHVwKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmhpZGVUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBwb3B1cCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd1BvcHVwSWZOZWVkZWQoKSB7XG4gICAgaWYgKHRoaXMucG9wdXBEaXYuaHRtbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudHNbdGhpcy5wb3B1cERpdi5pbmRleF07XG4gICAgICBjb25zdCByZWN0ID0gY29ycmVzcG9uZGluZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5zdHlsZS50b3AgPSByZWN0LnRvcCAtIDMwICsgXCJweFwiOyAvLyAzMCBpcyB0aGUgaGVpZ2h0O1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwRGl2Lmh0bWwpO1xuICAgICAgdGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICB9LCAxNTAwKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuZGVsZXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfSwgMTgwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBjaGVja2JveCBmb3IgYm9vbGVhbiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQ2hlY2tib3goZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy5jaGVja2VkLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgY2hlY2tib3gpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSB0ZXh0IGlucHV0IGZpZWxkIGZvciBzdHJpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZVRleHRJbnB1dChkZWZhdWx0VmFsdWUsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgY2hlY2tib3gudHlwZSA9IFwidGV4dFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy10ZXh0XCI7XG4gICAgY2hlY2tib3gudmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy52YWx1ZSwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY29sb3IgZmllbGQgd2l0aCBhIGNvbG9yIHBpY2tlciBmb3IgY29sb3IgZmllbGRzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRDb2xvciA9IGFyclsxXTtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICE9PSBcIm5vbmVcIikge1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jb2xvckJsb2NrXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9jayBub25lXCI7XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbG9yIDogdmFsdWU7XG4gICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogdXNlZCBieSB0aGUgY29sb3IgYnV0dG9ucyB0byBjYWxsIHRoZSBjb2xvciBwaWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBkaXZcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpIHtcbiAgICAvLyBjbGVhciB0aGUgY2FsbGJhY2sgZnJvbSB0aGlzIGRpdlxuICAgIGRpdi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKGRpdik7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zaG93KCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENvbG9yKHZhbHVlKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldFVwZGF0ZUNhbGxiYWNrKChjb2xvcikgPT4ge1xuICAgICAgY29uc3QgY29sb3JTdHJpbmcgPVxuICAgICAgICBcInJnYmEoXCIgKyBjb2xvci5yICsgXCIsXCIgKyBjb2xvci5nICsgXCIsXCIgKyBjb2xvci5iICsgXCIsXCIgKyBjb2xvci5hICsgXCIpXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JTdHJpbmc7XG4gICAgICB0aGlzLl91cGRhdGUoY29sb3JTdHJpbmcsIHBhdGgpO1xuICAgIH0pO1xuXG4gICAgLy8gb24gY2xvc2Ugb2YgdGhlIGNvbG9ycGlja2VyLCByZXN0b3JlIHRoZSBjYWxsYmFjay5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENsb3NlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogcGFyc2UgYW4gb2JqZWN0IGFuZCBkcmF3IHRoZSBjb3JyZWN0IGl0ZW1zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtBcnJheX0gW3BhdGg9W11dICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tPbmx5PWZhbHNlXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVPYmplY3Qob2JqLCBwYXRoID0gW10sIGNoZWNrT25seSA9IGZhbHNlKSB7XG4gICAgbGV0IHNob3cgPSBmYWxzZTtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCB2aXNpYmxlSW5TZXQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHN1Yk9iaiBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBzdWJPYmopKSB7XG4gICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICBjb25zdCBpdGVtID0gb2JqW3N1Yk9ial07XG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgc3ViT2JqKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIoc3ViT2JqLCBwYXRoKTtcblxuICAgICAgICAgIC8vIGlmIG5lZWRlZCB3ZSBtdXN0IGdvIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICAgICAgaWYgKHNob3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGl0ZW0pICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICAgICAgICBpdGVtIGluc3RhbmNlb2YgT2JqZWN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgIHNob3cgPSB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGNoZWNrT25seSA9PT0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdmlzaWJsZUluU2V0ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKG5ld1BhdGgpO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycmF5KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlVGV4dElucHV0KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIHNraXAgdGhlIG9wdGlvbnMgdGhhdCBhcmUgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5oaWRlT3B0aW9uKHBhdGgsIHN1Yk9iaiwgdGhpcy5tb2R1bGVPcHRpb25zKSkge1xuICAgICAgICAgICAgICAvLyBpbml0aWFsbHkgY29sbGFwc2Ugb3B0aW9ucyB3aXRoIGFuIGRpc2FibGVkIGVuYWJsZWQgb3B0aW9uLlxuICAgICAgICAgICAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmFibGVkUGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShuZXdQYXRoLCBcImVuYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoZW5hYmxlZFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChlbmFibGVkVmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgICB2aXNpYmxlSW5TZXQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlQ2hlY2tib3goaXRlbSwgZW5hYmxlZFZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwoc3ViT2JqLCBuZXdQYXRoLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdChpdGVtLCBuZXdQYXRoKSB8fCB2aXNpYmxlSW5TZXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImRvbnQga25vdyBob3cgdG8gaGFuZGxlXCIsIGl0ZW0sIHN1Yk9iaiwgbmV3UGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlSW5TZXQ7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSBhcnJheSB0eXBlIG9mIG9wdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUFycmF5KGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIiAmJiBhcnJbMF0gPT09IFwiY29sb3JcIikge1xuICAgICAgdGhpcy5fbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzFdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9tYWtlRHJvcGRvd24oYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogTnVtYmVyKHZhbHVlKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGVkIHRvIHVwZGF0ZSB0aGUgbmV0d29yayB3aXRoIHRoZSBuZXcgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGUodmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBhcmVudC5ib2R5ICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIgJiZcbiAgICAgIHRoaXMucGFyZW50LmJvZHkuZW1pdHRlci5lbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdChcImNvbmZpZ0NoYW5nZVwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5wYXJlbnQuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IGJvb2xlYW59IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHt7fX0gb3B0aW9uc09ialxuICAgKiBAcmV0dXJucyB7e319XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCwgb3B0aW9uc09iaiA9IHt9KSB7XG4gICAgbGV0IHBvaW50ZXIgPSBvcHRpb25zT2JqO1xuXG4gICAgLy8gd2hlbiBkcm9wZG93biBib3hlcyBjYW4gYmUgc3RyaW5nIG9yIGJvb2xlYW4sIHdlIHR5cGVjYXN0IGl0IGludG8gY29ycmVjdCB0eXBlc1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdmFsdWU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXRoW2ldICE9PSBcImdsb2JhbFwiKSB7XG4gICAgICAgIGlmIChwb2ludGVyW3BhdGhbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBhdGgubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHBvaW50ZXIgPSBwb2ludGVyW3BhdGhbaV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvaW50ZXJbcGF0aFtpXV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc09iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByaW50T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG5cbiAgICB3aGlsZSAodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm9wdGlvbnNDb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChcbiAgICAgIHdyYXBJblRhZyhcInByZVwiLCBcImNvbnN0IG9wdGlvbnMgPSBcIiArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMsIG51bGwsIDIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge3t9fSBvcHRpb25zXG4gICAqL1xuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hhbmdlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2NvbnN0cnVjdE9wdGlvbnMoXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0udmFsdWUsXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0ucGF0aCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn07XG5cbi8qKlxuICogUG9wdXAgaXMgYSBjbGFzcyB0byBjcmVhdGUgYSBwb3B1cCB3aW5kb3cgd2l0aCBzb21lIHRleHRcbiAqL1xubGV0IFBvcHVwJDEgPSBjbGFzcyBQb3B1cCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgICAgICBUaGUgY29udGFpbmVyIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvdmVyZmxvd01ldGhvZCAgSG93IHRoZSBwb3B1cCBzaG91bGQgYWN0IHRvIG92ZXJmbG93aW5nICgnZmxpcCcgb3IgJ2NhcCcpXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIG92ZXJmbG93TWV0aG9kKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5vdmVyZmxvd01ldGhvZCA9IG92ZXJmbG93TWV0aG9kIHx8IFwiY2FwXCI7XG5cbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5wYWRkaW5nID0gNTtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBmcmFtZVxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtdG9vbHRpcFwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4ICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcG9wdXAgd2luZG93XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgc2V0UG9zaXRpb24oeCwgeSkge1xuICAgIHRoaXMueCA9IHBhcnNlSW50KHgpO1xuICAgIHRoaXMueSA9IHBhcnNlSW50KHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29udGVudCBmb3IgdGhlIHBvcHVwIHdpbmRvdy4gVGhpcyBjYW4gYmUgSFRNTCBjb2RlIG9yIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgRWxlbWVudH0gY29udGVudFxuICAgKi9cbiAgc2V0VGV4dChjb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICB3aGlsZSAodGhpcy5mcmFtZS5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0cmluZyBjb250YWluaW5nIGxpdGVyYWwgdGV4dCwgZWxlbWVudCBoYXMgdG8gYmUgdXNlZCBmb3IgSFRNTCBkdWUgdG9cbiAgICAgIC8vIFhTUyByaXNrcyBhc3NvY2lhdGVkIHdpdGggaW5uZXJIVE1MIChpLmUuIHByZXZlbnQgWFNTIGJ5IGFjY2lkZW50KS5cbiAgICAgIHRoaXMuZnJhbWUuaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgd2luZG93XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvU2hvd10gICAgU2hvdyBvciBoaWRlIHRoZSB3aW5kb3dcbiAgICovXG4gIHNob3coZG9TaG93KSB7XG4gICAgaWYgKGRvU2hvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb1Nob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkb1Nob3cgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmZyYW1lLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudFdpZHRoO1xuXG4gICAgICBsZXQgbGVmdCA9IDAsXG4gICAgICAgIHRvcCA9IDA7XG5cbiAgICAgIGlmICh0aGlzLm92ZXJmbG93TWV0aG9kID09IFwiZmxpcFwiKSB7XG4gICAgICAgIGxldCBpc0xlZnQgPSBmYWxzZSxcbiAgICAgICAgICBpc1RvcCA9IHRydWU7IC8vIFdoZXJlIGFyb3VuZCB0aGUgcG9zaXRpb24gaXQncyBsb2NhdGVkXG5cbiAgICAgICAgaWYgKHRoaXMueSAtIGhlaWdodCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzVG9wID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy54ICsgd2lkdGggPiBtYXhXaWR0aCAtIHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzTGVmdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMZWZ0KSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMueCAtIHdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUb3ApIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIGlmICh0b3AgKyBoZWlnaHQgKyB0aGlzLnBhZGRpbmcgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICB0b3AgPSBtYXhIZWlnaHQgLSBoZWlnaHQgLSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvcCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIHRvcCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIGlmIChsZWZ0ICsgd2lkdGggKyB0aGlzLnBhZGRpbmcgPiBtYXhXaWR0aCkge1xuICAgICAgICAgIGxlZnQgPSBtYXhXaWR0aCAtIHdpZHRoIC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWZ0IDwgdGhpcy5wYWRkaW5nKSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcbiAgICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZSk7IC8vIFJlbW92ZSBlbGVtZW50IGZyb20gRE9NXG4gIH1cbn07XG5cbmxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5sZXQgYWxsT3B0aW9ucztcblxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDEgPSBcImJhY2tncm91bmQ6ICNGRmVlZWU7IGNvbG9yOiAjZGQwMDAwXCI7XG5cbi8qKlxuICogIFVzZWQgdG8gdmFsaWRhdGUgb3B0aW9ucy5cbiAqL1xubGV0IFZhbGlkYXRvciQxID0gY2xhc3MgVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWJPYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBzdWJPYmplY3QpIHtcbiAgICBlcnJvckZvdW5kID0gZmFsc2U7XG4gICAgYWxsT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgbGV0IHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9ucztcbiAgICBpZiAoc3ViT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9uc1tzdWJPYmplY3RdO1xuICAgIH1cbiAgICBWYWxpZGF0b3IucGFyc2Uob3B0aW9ucywgdXNlZE9wdGlvbnMsIFtdKTtcbiAgICByZXR1cm4gZXJyb3JGb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIHRyYXZlcnNlIGFuIG9iamVjdCByZWN1cnNpdmVseSBhbmQgY2hlY2sgZXZlcnkgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICAgIFZhbGlkYXRvci5jaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBldmVyeSB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbCB0aGUgcGFyc2UgZnVuY3Rpb24gb24gdGhhdCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpIHtcbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIFZhbGlkYXRvci5nZXRTdWdnZXN0aW9uKG9wdGlvbiwgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlZmVyZW5jZU9wdGlvbiA9IG9wdGlvbjtcbiAgICBsZXQgaXNfb2JqZWN0ID0gdHJ1ZTtcblxuICAgIGlmIChcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnNbb3B0aW9uXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICByZWZlcmVuY2VPcHRpb25zLl9fYW55X18gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTk9URTogVGhpcyBvbmx5IHRyaWdnZXJzIGlmIHRoZSBfX2FueV9fIGlzIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgLy8gICAgICAgVEhBVCdTIEEgUkVBTExZIEJBRCBQTEFDRSBUTyBBTExPVyBJVCEhISFcbiAgICAgIC8vIFRPRE86IEV4YW1pbmUgaWYgbmVlZGVkLCByZW1vdmUgaWYgcG9zc2libGVcblxuICAgICAgLy8gX19hbnlfXyBpcyBhIHdpbGRjYXJkLiBBbnkgdmFsdWUgaXMgYWNjZXB0ZWQgYW5kIHdpbGwgYmUgZnVydGhlciBhbmFseXNlZCBieSByZWZlcmVuY2UuXG4gICAgICByZWZlcmVuY2VPcHRpb24gPSBcIl9fYW55X19cIjtcblxuICAgICAgLy8gaWYgdGhlIGFueS1zdWJncm91cCBpcyBub3QgYSBwcmVkZWZpbmVkIG9iamVjdCBpbiB0aGUgY29uZmlndXJhdG9yLFxuICAgICAgLy8gd2UgZG8gbm90IGxvb2sgZGVlcGVyIGludG8gdGhlIG9iamVjdC5cbiAgICAgIGlzX29iamVjdCA9IFZhbGlkYXRvci5nZXRUeXBlKG9wdGlvbnNbb3B0aW9uXSkgPT09IFwib2JqZWN0XCI7XG4gICAgfVxuXG4gICAgbGV0IHJlZk9wdGlvbk9iaiA9IHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXTtcbiAgICBpZiAoaXNfb2JqZWN0ICYmIHJlZk9wdGlvbk9iai5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWZPcHRpb25PYmogPSByZWZPcHRpb25PYmouX190eXBlX187XG4gICAgfVxuXG4gICAgVmFsaWRhdG9yLmNoZWNrRmllbGRzKFxuICAgICAgb3B0aW9uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb24sXG4gICAgICByZWZPcHRpb25PYmosXG4gICAgICBwYXRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIG9wdGlvbiAgICAgICAgICAgfCB0aGUgb3B0aW9uIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgb3B0aW9ucyAgICAgICAgICB8IFRoZSBzdXBwbGllZCBvcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge29iamVjdH0gIHJlZmVyZW5jZU9wdGlvbnMgfCBUaGUgcmVmZXJlbmNlIG9wdGlvbnMgY29udGFpbmluZyBhbGwgb3B0aW9ucyBhbmQgdGhlaXIgYWxsb3dlZCBmb3JtYXRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgcmVmZXJlbmNlT3B0aW9uICB8IFVzdWFsbHkgdGhpcyBpcyB0aGUgc2FtZSBhcyBvcHRpb24sIGV4Y2VwdCB3aGVuIGhhbmRsaW5nIGFuIF9fYW55X18gdGFnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZk9wdGlvbk9iaiAgICAgfCBUaGlzIGlzIHRoZSB0eXBlIG9iamVjdCBmcm9tIHRoZSByZWZlcmVuY2Ugb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSAgIHBhdGggICAgICAgICAgICAgfCB3aGVyZSBpbiB0aGUgb2JqZWN0IGlzIHRoZSBvcHRpb25cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNoZWNrRmllbGRzKFxuICAgIG9wdGlvbixcbiAgICBvcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgIHJlZk9wdGlvbk9iaixcbiAgICBwYXRoXG4gICkge1xuICAgIGNvbnN0IGxvZyA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjXCIgKyBtZXNzYWdlICsgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKSxcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvblR5cGUgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pO1xuICAgIGNvbnN0IHJlZk9wdGlvblR5cGUgPSByZWZPcHRpb25PYmpbb3B0aW9uVHlwZV07XG5cbiAgICBpZiAocmVmT3B0aW9uVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpZiB0aGUgdHlwZSBpcyBjb3JyZWN0LCB3ZSBjaGVjayBpZiBpdCBpcyBzdXBwb3NlZCB0byBiZSBvbmUgb2YgYSBmZXcgc2VsZWN0IHZhbHVlc1xuICAgICAgaWYgKFxuICAgICAgICBWYWxpZGF0b3IuZ2V0VHlwZShyZWZPcHRpb25UeXBlKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgIHJlZk9wdGlvblR5cGUuaW5kZXhPZihvcHRpb25zW29wdGlvbl0pID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICAnSW52YWxpZCBvcHRpb24gZGV0ZWN0ZWQgaW4gXCInICtcbiAgICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgICAnXCIuJyArXG4gICAgICAgICAgICBcIiBBbGxvd2VkIHZhbHVlcyBhcmU6XCIgK1xuICAgICAgICAgICAgVmFsaWRhdG9yLnByaW50KHJlZk9wdGlvblR5cGUpICtcbiAgICAgICAgICAgICcgbm90IFwiJyArXG4gICAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICAgJ1wiLiAnXG4gICAgICAgICk7XG4gICAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25UeXBlID09PSBcIm9iamVjdFwiICYmIHJlZmVyZW5jZU9wdGlvbiAhPT0gXCJfX2FueV9fXCIpIHtcbiAgICAgICAgcGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcHRpb24pO1xuICAgICAgICBWYWxpZGF0b3IucGFyc2UoXG4gICAgICAgICAgb3B0aW9uc1tvcHRpb25dLFxuICAgICAgICAgIHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWZPcHRpb25PYmpbXCJhbnlcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdHlwZSBvZiB0aGUgZmllbGQgaXMgaW5jb3JyZWN0IGFuZCB0aGUgZmllbGQgY2Fubm90IGJlIGFueVxuICAgICAgbG9nKFxuICAgICAgICAnSW52YWxpZCB0eXBlIHJlY2VpdmVkIGZvciBcIicgK1xuICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgJ1wiLiBFeHBlY3RlZDogJyArXG4gICAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKHJlZk9wdGlvbk9iaikpICtcbiAgICAgICAgICBcIi4gUmVjZWl2ZWQgW1wiICtcbiAgICAgICAgICBvcHRpb25UeXBlICtcbiAgICAgICAgICAnXSBcIicgK1xuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSArXG4gICAgICAgICAgJ1wiJ1xuICAgICAgKTtcbiAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcgfCBBcnJheS48bnVtYmVyPiB8IERhdGUgfCBOb2RlIHwgTW9tZW50IHwgdW5kZWZpbmVkIHwgbnVsbH0gb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRUeXBlKG9iamVjdCkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xuXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Lm5vZGVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFwiZG9tXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Ll9pc0FNb21lbnRPYmplY3QgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIFwibW9tZW50XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRTdWdnZXN0aW9uKG9wdGlvbiwgb3B0aW9ucywgcGF0aCkge1xuICAgIGNvbnN0IGxvY2FsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCBmYWxzZSk7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBhbGxPcHRpb25zLCBbXSwgdHJ1ZSk7XG5cbiAgICBjb25zdCBsb2NhbFNlYXJjaFRocmVzaG9sZCA9IDg7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoVGhyZXNob2xkID0gNDtcblxuICAgIGxldCBtc2c7XG4gICAgaWYgKGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgJ1BlcmhhcHMgaXQgd2FzIGluY29tcGxldGU/IERpZCB5b3UgbWVhbjogXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guaW5kZXhNYXRjaCArXG4gICAgICAgICdcIj9cXG5cXG4nO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBnbG9iYWxTZWFyY2guZGlzdGFuY2UgPD0gZ2xvYmFsU2VhcmNoVGhyZXNob2xkICYmXG4gICAgICBsb2NhbFNlYXJjaC5kaXN0YW5jZSA+IGdsb2JhbFNlYXJjaC5kaXN0YW5jZVxuICAgICkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgXCJQZXJoYXBzIGl0IHdhcyBtaXNwbGFjZWQ/IE1hdGNoaW5nIG9wdGlvbiBmb3VuZCBhdDogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihcbiAgICAgICAgICBnbG9iYWxTZWFyY2gucGF0aCxcbiAgICAgICAgICBnbG9iYWxTZWFyY2guY2xvc2VzdE1hdGNoLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxvY2FsU2VhcmNoLmRpc3RhbmNlIDw9IGxvY2FsU2VhcmNoVGhyZXNob2xkKSB7XG4gICAgICBtc2cgPVxuICAgICAgICAnLiBEaWQgeW91IG1lYW4gXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guY2xvc2VzdE1hdGNoICtcbiAgICAgICAgJ1wiPycgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPVxuICAgICAgICBcIi4gRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZTogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnQoT2JqZWN0LmtleXMob3B0aW9ucykpICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6IFwiJyArIG9wdGlvbiArICdcIicgKyBtc2csXG4gICAgICBWQUxJREFUT1JfUFJJTlRfU1RZTEUkMVxuICAgICk7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2UgdGhlIG9wdGlvbnMgaW4gc2VhcmNoIGZvciBhIG1hdGNoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWN1cnNpdmU9ZmFsc2VdXG4gICAqIEByZXR1cm5zIHt7Y2xvc2VzdE1hdGNoOiBzdHJpbmcsIHBhdGg6IEFycmF5LCBkaXN0YW5jZTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCByZWN1cnNpdmUgPSBmYWxzZSkge1xuICAgIGxldCBtaW4gPSAxZTk7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaCA9IFwiXCI7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaFBhdGggPSBbXTtcbiAgICBjb25zdCBsb3dlckNhc2VPcHRpb24gPSBvcHRpb24udG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgaW5kZXhNYXRjaCA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IG9wIGluIG9wdGlvbnMpIHtcbiAgICAgIGxldCBkaXN0YW5jZTtcbiAgICAgIGlmIChvcHRpb25zW29wXS5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkICYmIHJlY3Vyc2l2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBWYWxpZGF0b3IuZmluZEluT3B0aW9ucyhcbiAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgb3B0aW9uc1tvcF0sXG4gICAgICAgICAgY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIG9wKVxuICAgICAgICApO1xuICAgICAgICBpZiAobWluID4gcmVzdWx0LmRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gcmVzdWx0LmNsb3Nlc3RNYXRjaDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gcmVzdWx0LnBhdGg7XG4gICAgICAgICAgbWluID0gcmVzdWx0LmRpc3RhbmNlO1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSByZXN1bHQuaW5kZXhNYXRjaDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihsb3dlckNhc2VPcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSBvcDtcbiAgICAgICAgfVxuICAgICAgICBkaXN0YW5jZSA9IFZhbGlkYXRvci5sZXZlbnNodGVpbkRpc3RhbmNlKG9wdGlvbiwgb3ApO1xuICAgICAgICBpZiAobWluID4gZGlzdGFuY2UpIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2ggPSBvcDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gY29weUFycmF5KHBhdGgpO1xuICAgICAgICAgIG1pbiA9IGRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZXN0TWF0Y2g6IGNsb3Nlc3RNYXRjaCxcbiAgICAgIHBhdGg6IGNsb3Nlc3RNYXRjaFBhdGgsXG4gICAgICBkaXN0YW5jZTogbWluLFxuICAgICAgaW5kZXhNYXRjaDogaW5kZXhNYXRjaCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiwgcHJlZml4ID0gXCJQcm9ibGVtIHZhbHVlIGZvdW5kIGF0OiBcXG5cIikge1xuICAgIGxldCBzdHIgPSBcIlxcblxcblwiICsgcHJlZml4ICsgXCJvcHRpb25zID0ge1xcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpICsgMTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gcGF0aFtpXSArIFwiOiB7XFxuXCI7XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggKyAxOyBqKyspIHtcbiAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgfVxuICAgIHN0ciArPSBvcHRpb24gKyBcIlxcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggLSBpOyBqKyspIHtcbiAgICAgICAgc3RyICs9IFwiICBcIjtcbiAgICAgIH1cbiAgICAgIHN0ciArPSBcIn1cXG5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0ciArIFwiXFxuXFxuXCI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHByaW50KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3B0aW9ucylcbiAgICAgIC5yZXBsYWNlKC8oXCIpfChcXFspfChcXF0pfCgsXCJfX3R5cGVfX1wiKS9nLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoLygsKS9nLCBcIiwgXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqICBDb21wdXRlIHRoZSBlZGl0IGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBnaXZlbiBzdHJpbmdzXG4gICAqIGh0dHA6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL1N0cmluZ3MvTGV2ZW5zaHRlaW5fZGlzdGFuY2UjSmF2YVNjcmlwdFxuICAgKlxuICAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQW5kcmVpIE1hY2tlbnppZVxuICAgKlxuICAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgKlxuICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgICpcbiAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGxldmVuc2h0ZWluRGlzdGFuY2UoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGEubGVuZ3RoO1xuXG4gICAgY29uc3QgbWF0cml4ID0gW107XG5cbiAgICAvLyBpbmNyZW1lbnQgYWxvbmcgdGhlIGZpcnN0IGNvbHVtbiBvZiBlYWNoIHJvd1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4W2ldID0gW2ldO1xuICAgIH1cblxuICAgIC8vIGluY3JlbWVudCBlYWNoIGNvbHVtbiBpbiB0aGUgZmlyc3Qgcm93XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cblxuICAgIC8vIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIG1hdHJpeFxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT0gYS5jaGFyQXQoaiAtIDEpKSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2kgLSAxXVtqIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgICAgICBtYXRyaXhbaSAtIDFdW2ogLSAxXSArIDEsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgIG1hdHJpeFtpXVtqIC0gMV0gKyAxLCAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqXSArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApOyAvLyBkZWxldGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xuICB9XG59O1xuXG5jb25zdCBBY3RpdmF0b3IgPSBBY3RpdmF0b3IkMTtcclxuY29uc3QgQ29sb3JQaWNrZXIgPSBDb2xvclBpY2tlciQxO1xyXG5jb25zdCBDb25maWd1cmF0b3IgPSBDb25maWd1cmF0b3IkMTtcclxuY29uc3QgSGFtbWVyID0gSGFtbWVyJDE7XHJcbmNvbnN0IFBvcHVwID0gUG9wdXAkMTtcclxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFID0gVkFMSURBVE9SX1BSSU5UX1NUWUxFJDE7XHJcbmNvbnN0IFZhbGlkYXRvciA9IFZhbGlkYXRvciQxO1xuXG5leHBvcnQgeyBBY3RpdmF0b3IsIEFsZWEsIENvbG9yUGlja2VyLCBDb25maWd1cmF0b3IsIERFTEVURSwgSFNWVG9IZXgsIEhTVlRvUkdCLCBIYW1tZXIsIFBvcHVwLCBSR0JUb0hTViwgUkdCVG9IZXgsIFZBTElEQVRPUl9QUklOVF9TVFlMRSwgVmFsaWRhdG9yLCBhZGRDbGFzc05hbWUsIGFkZENzc1RleHQsIGFkZEV2ZW50TGlzdGVuZXIsIGJpbmFyeVNlYXJjaEN1c3RvbSwgYmluYXJ5U2VhcmNoVmFsdWUsIGJyaWRnZU9iamVjdCwgY29weUFuZEV4dGVuZEFycmF5LCBjb3B5QXJyYXksIGRlZXBFeHRlbmQsIGRlZXBPYmplY3RBc3NpZ24sIGVhc2luZ0Z1bmN0aW9ucywgZXF1YWxBcnJheSwgZXh0ZW5kLCBmaWxsSWZEZWZpbmVkLCBmb3JFYWNoLCBnZXRBYnNvbHV0ZUxlZnQsIGdldEFic29sdXRlUmlnaHQsIGdldEFic29sdXRlVG9wLCBnZXRTY3JvbGxCYXJXaWR0aCwgZ2V0VGFyZ2V0LCBnZXRUeXBlLCBoYXNQYXJlbnQsIGhleFRvSFNWLCBoZXhUb1JHQiwgaW5zZXJ0U29ydCwgaXNEYXRlLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1ZhbGlkSGV4LCBpc1ZhbGlkUkdCLCBpc1ZhbGlkUkdCQSwgbWVyZ2VPcHRpb25zLCBvcHRpb24sIG92ZXJyaWRlT3BhY2l0eSwgcGFyc2VDb2xvciwgcHJldmVudERlZmF1bHQsIHB1cmVEZWVwT2JqZWN0QXNzaWduLCByZWN1cnNpdmVET01EZWxldGUsIHJlbW92ZUNsYXNzTmFtZSwgcmVtb3ZlQ3NzVGV4dCwgcmVtb3ZlRXZlbnRMaXN0ZW5lciwgc2VsZWN0aXZlQnJpZGdlT2JqZWN0LCBzZWxlY3RpdmVEZWVwRXh0ZW5kLCBzZWxlY3RpdmVFeHRlbmQsIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsIHRocm90dGxlLCB0b0FycmF5LCB0b3BNb3N0LCB1cGRhdGVQcm9wZXJ0eSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmlzLXV0aWwuanMubWFwXG4iLCAiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG5cbi8qKlxuICogUGFyc2UgYSB0ZXh0IHNvdXJjZSBjb250YWluaW5nIGRhdGEgaW4gRE9UIGxhbmd1YWdlIGludG8gYSBKU09OIG9iamVjdC5cbiAqIFRoZSBvYmplY3QgY29udGFpbnMgdHdvIGxpc3RzOiBvbmUgd2l0aCBub2RlcyBhbmQgb25lIHdpdGggZWRnZXMuXG4gKlxuICogRE9UIGxhbmd1YWdlIHJlZmVyZW5jZTogaHR0cDovL3d3dy5ncmFwaHZpei5vcmcvZG9jL2luZm8vbGFuZy5odG1sXG4gKlxuICogRE9UIGxhbmd1YWdlIGF0dHJpYnV0ZXM6IGh0dHA6Ly9ncmFwaHZpei5vcmcvY29udGVudC9hdHRyc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhICAgICBUZXh0IGNvbnRhaW5pbmcgYSBncmFwaCBpbiBET1Qtbm90YXRpb25cbiAqIEByZXR1cm5zIHtvYmplY3R9IGdyYXBoICAgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdHdvIHBhcmFtZXRlcnM6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAge09iamVjdFtdfSBub2Rlc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIHtPYmplY3RbXX0gZWRnZXNcbiAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBUT0RPXG4gKiA9PT09XG4gKlxuICogRm9yIGxhYmVsIGhhbmRsaW5nLCB0aGlzIGlzIGFuIGluY29tcGxldGUgaW1wbGVtZW50YXRpb24uIEZyb20gZG9jcyAocXVvdGUgIzMwMTUpOlxuICpcbiAqID4gdGhlIGVzY2FwZSBzZXF1ZW5jZXMgXCJcXG5cIiwgXCJcXGxcIiBhbmQgXCJcXHJcIiBkaXZpZGUgdGhlIGxhYmVsIGludG8gbGluZXMsIGNlbnRlcmVkLFxuICogPiBsZWZ0LWp1c3RpZmllZCwgYW5kIHJpZ2h0LWp1c3RpZmllZCwgcmVzcGVjdGl2ZWx5LlxuICpcbiAqIFNvdXJjZTogaHR0cDovL3d3dy5ncmFwaHZpei5vcmcvY29udGVudC9hdHRycyNrZXNjU3RyaW5nXG4gKlxuICogPiBBcyBhbm90aGVyIGFpZCBmb3IgcmVhZGFiaWxpdHksIGRvdCBhbGxvd3MgZG91YmxlLXF1b3RlZCBzdHJpbmdzIHRvIHNwYW4gbXVsdGlwbGUgcGh5c2ljYWxcbiAqID4gbGluZXMgdXNpbmcgdGhlIHN0YW5kYXJkIEMgY29udmVudGlvbiBvZiBhIGJhY2tzbGFzaCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYSBuZXdsaW5lXG4gKiA+IGNoYXJhY3RlclxuICogPiBJbiBhZGRpdGlvbiwgZG91YmxlLXF1b3RlZCBzdHJpbmdzIGNhbiBiZSBjb25jYXRlbmF0ZWQgdXNpbmcgYSAnKycgb3BlcmF0b3IuXG4gKiA+IEFzIEhUTUwgc3RyaW5ncyBjYW4gY29udGFpbiBuZXdsaW5lIGNoYXJhY3RlcnMsIHdoaWNoIGFyZSB1c2VkIHNvbGVseSBmb3IgZm9ybWF0dGluZyxcbiAqID4gdGhlIGxhbmd1YWdlIGRvZXMgbm90IGFsbG93IGVzY2FwZWQgbmV3bGluZXMgb3IgY29uY2F0ZW5hdGlvbiBvcGVyYXRvcnMgdG8gYmUgdXNlZFxuICogPiB3aXRoaW4gdGhlbS5cbiAqXG4gKiAtIEN1cnJlbnRseSwgb25seSAnXFxcXG4nIGlzIGhhbmRsZWRcbiAqIC0gTm90ZSB0aGF0IHRleHQgZXhwbGljaXRseSBzYXlzICdsYWJlbHMnOyB0aGUgZG90IHBhcnNlciBjdXJyZW50bHkgaGFuZGxlcyBlc2NhcGVcbiAqICAgc2VxdWVuY2VzIGluICoqYWxsKiogc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRE9UKGRhdGEpIHtcbiAgZG90ID0gZGF0YTtcbiAgcmV0dXJuIHBhcnNlR3JhcGgoKTtcbn1cblxuLy8gbWFwcGluZyBvZiBhdHRyaWJ1dGVzIGZyb20gRE9UICh0aGUga2V5cykgdG8gdmlzLmpzICh0aGUgdmFsdWVzKVxudmFyIE5PREVfQVRUUl9NQVBQSU5HID0ge1xuICBmb250c2l6ZTogXCJmb250LnNpemVcIixcbiAgZm9udGNvbG9yOiBcImZvbnQuY29sb3JcIixcbiAgbGFiZWxmb250Y29sb3I6IFwiZm9udC5jb2xvclwiLFxuICBmb250bmFtZTogXCJmb250LmZhY2VcIixcbiAgY29sb3I6IFtcImNvbG9yLmJvcmRlclwiLCBcImNvbG9yLmJhY2tncm91bmRcIl0sXG4gIGZpbGxjb2xvcjogXCJjb2xvci5iYWNrZ3JvdW5kXCIsXG4gIHRvb2x0aXA6IFwidGl0bGVcIixcbiAgbGFiZWx0b29sdGlwOiBcInRpdGxlXCIsXG59O1xudmFyIEVER0VfQVRUUl9NQVBQSU5HID0gT2JqZWN0LmNyZWF0ZShOT0RFX0FUVFJfTUFQUElORyk7XG5FREdFX0FUVFJfTUFQUElORy5jb2xvciA9IFwiY29sb3IuY29sb3JcIjtcbkVER0VfQVRUUl9NQVBQSU5HLnN0eWxlID0gXCJkYXNoZXNcIjtcblxuLy8gdG9rZW4gdHlwZXMgZW51bWVyYXRpb25cbnZhciBUT0tFTlRZUEUgPSB7XG4gIE5VTEw6IDAsXG4gIERFTElNSVRFUjogMSxcbiAgSURFTlRJRklFUjogMixcbiAgVU5LTk9XTjogMyxcbn07XG5cbi8vIG1hcCB3aXRoIGFsbCBkZWxpbWl0ZXJzXG52YXIgREVMSU1JVEVSUyA9IHtcbiAgXCJ7XCI6IHRydWUsXG4gIFwifVwiOiB0cnVlLFxuICBcIltcIjogdHJ1ZSxcbiAgXCJdXCI6IHRydWUsXG4gIFwiO1wiOiB0cnVlLFxuICBcIj1cIjogdHJ1ZSxcbiAgXCIsXCI6IHRydWUsXG5cbiAgXCItPlwiOiB0cnVlLFxuICBcIi0tXCI6IHRydWUsXG59O1xuXG52YXIgZG90ID0gXCJcIjsgLy8gY3VycmVudCBkb3QgZmlsZVxudmFyIGluZGV4ID0gMDsgLy8gY3VycmVudCBpbmRleCBpbiBkb3QgZmlsZVxudmFyIGMgPSBcIlwiOyAvLyBjdXJyZW50IHRva2VuIGNoYXJhY3RlciBpbiBleHByXG52YXIgdG9rZW4gPSBcIlwiOyAvLyBjdXJyZW50IHRva2VuXG52YXIgdG9rZW5UeXBlID0gVE9LRU5UWVBFLk5VTEw7IC8vIHR5cGUgb2YgdGhlIHRva2VuXG5cbi8qKlxuICogR2V0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgZnJvbSB0aGUgZG90IGZpbGUuXG4gKiBUaGUgY2hhcmFjdGVyIGlzIHN0b3JlZCBpbnRvIHRoZSBjaGFyIGMuIElmIHRoZSBlbmQgb2YgdGhlIGRvdCBmaWxlIGlzXG4gKiByZWFjaGVkLCB0aGUgZnVuY3Rpb24gcHV0cyBhbiBlbXB0eSBzdHJpbmcgaW4gYy5cbiAqL1xuZnVuY3Rpb24gZmlyc3QoKSB7XG4gIGluZGV4ID0gMDtcbiAgYyA9IGRvdC5jaGFyQXQoMCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBkb3QgZmlsZS5cbiAqIFRoZSBjaGFyYWN0ZXIgaXMgc3RvcmVkIGludG8gdGhlIGNoYXIgYy4gSWYgdGhlIGVuZCBvZiB0aGUgZG90IGZpbGUgaXNcbiAqIHJlYWNoZWQsIHRoZSBmdW5jdGlvbiBwdXRzIGFuIGVtcHR5IHN0cmluZyBpbiBjLlxuICovXG5mdW5jdGlvbiBuZXh0KCkge1xuICBpbmRleCsrO1xuICBjID0gZG90LmNoYXJBdChpbmRleCk7XG59XG5cbi8qKlxuICogUHJldmlldyB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgZG90IGZpbGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY05leHRcbiAqL1xuZnVuY3Rpb24gbmV4dFByZXZpZXcoKSB7XG4gIHJldHVybiBkb3QuY2hhckF0KGluZGV4ICsgMSk7XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGdpdmVuIGNoYXJhY3RlciBpcyBhbHBoYWJldGljIG9yIG51bWVyaWMgKCBhLXpBLVpfMC05LjojIClcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY1xuICogQHJldHVybnMge2Jvb2xlYW59IGlzQWxwaGFOdW1lcmljXG4gKi9cbmZ1bmN0aW9uIGlzQWxwaGFOdW1lcmljKGMpIHtcbiAgdmFyIGNoYXJDb2RlID0gYy5jaGFyQ29kZUF0KDApO1xuXG4gIGlmIChjaGFyQ29kZSA8IDQ3KSB7XG4gICAgLy8gIy5cbiAgICByZXR1cm4gY2hhckNvZGUgPT09IDM1IHx8IGNoYXJDb2RlID09PSA0NjtcbiAgfVxuICBpZiAoY2hhckNvZGUgPCA1OSkge1xuICAgIC8vIDAtOSBhbmQgOlxuICAgIHJldHVybiBjaGFyQ29kZSA+IDQ3O1xuICB9XG4gIGlmIChjaGFyQ29kZSA8IDkxKSB7XG4gICAgLy8gQS1aXG4gICAgcmV0dXJuIGNoYXJDb2RlID4gNjQ7XG4gIH1cbiAgaWYgKGNoYXJDb2RlIDwgOTYpIHtcbiAgICAvLyBfXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSA5NTtcbiAgfVxuICBpZiAoY2hhckNvZGUgPCAxMjMpIHtcbiAgICAvLyBhLXpcbiAgICByZXR1cm4gY2hhckNvZGUgPiA5NjtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbGwgb3B0aW9ucyBvZiBvYmplY3QgYiBpbnRvIG9iamVjdCBiXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGFcbiAqIEBwYXJhbSB7b2JqZWN0fSBiXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBhXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKGEsIGIpIHtcbiAgaWYgKCFhKSB7XG4gICAgYSA9IHt9O1xuICB9XG5cbiAgaWYgKGIpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIGIpIHtcbiAgICAgIGlmIChiLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGFbbmFtZV0gPSBiW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBTZXQgYSB2YWx1ZSBpbiBhbiBvYmplY3QsIHdoZXJlIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXIgbmFtZSBjYW4gYmUgYVxuICogcGF0aCB3aXRoIG5lc3RlZCBwYXJhbWV0ZXJzLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgdmFyIG9iaiA9IHthOiAyfTtcbiAqICAgICBzZXRWYWx1ZShvYmosICdiLmMnLCAzKTsgICAgIC8vIG9iaiA9IHthOiAyLCBiOiB7YzogM319XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9ialxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggIEEgcGFyYW1ldGVyIG5hbWUgb3IgZG90LXNlcGFyYXRlZCBwYXJhbWV0ZXIgcGF0aCxcbiAqICAgICAgICAgICAgICAgICAgICAgIGxpa2UgXCJjb2xvci5oaWdobGlnaHQuYm9yZGVyXCIuXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHNldFZhbHVlKG9iaiwgcGF0aCwgdmFsdWUpIHtcbiAgdmFyIGtleXMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgdmFyIG8gPSBvYmo7XG4gIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBrZXlzLnNoaWZ0KCk7XG4gICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgICAvLyB0aGlzIGlzbid0IHRoZSBlbmQgcG9pbnRcbiAgICAgIGlmICghb1trZXldKSB7XG4gICAgICAgIG9ba2V5XSA9IHt9O1xuICAgICAgfVxuICAgICAgbyA9IG9ba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyBpcyB0aGUgZW5kIHBvaW50XG4gICAgICBvW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYSBub2RlIHRvIGEgZ3JhcGggb2JqZWN0LiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgbm9kZSB3aXRoXG4gKiB0aGUgc2FtZSBpZCwgdGhlaXIgYXR0cmlidXRlcyB3aWxsIGJlIG1lcmdlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEBwYXJhbSB7b2JqZWN0fSBub2RlXG4gKi9cbmZ1bmN0aW9uIGFkZE5vZGUoZ3JhcGgsIG5vZGUpIHtcbiAgdmFyIGksIGxlbjtcbiAgdmFyIGN1cnJlbnQgPSBudWxsO1xuXG4gIC8vIGZpbmQgcm9vdCBncmFwaCAoaW4gY2FzZSBvZiBzdWJncmFwaClcbiAgdmFyIGdyYXBocyA9IFtncmFwaF07IC8vIGxpc3Qgd2l0aCBhbGwgZ3JhcGhzIGZyb20gY3VycmVudCBncmFwaCB0byByb290IGdyYXBoXG4gIHZhciByb290ID0gZ3JhcGg7XG4gIHdoaWxlIChyb290LnBhcmVudCkge1xuICAgIGdyYXBocy5wdXNoKHJvb3QucGFyZW50KTtcbiAgICByb290ID0gcm9vdC5wYXJlbnQ7XG4gIH1cblxuICAvLyBmaW5kIGV4aXN0aW5nIG5vZGUgKGF0IHJvb3QgbGV2ZWwpIGJ5IGl0cyBpZFxuICBpZiAocm9vdC5ub2Rlcykge1xuICAgIGZvciAoaSA9IDAsIGxlbiA9IHJvb3Qubm9kZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChub2RlLmlkID09PSByb290Lm5vZGVzW2ldLmlkKSB7XG4gICAgICAgIGN1cnJlbnQgPSByb290Lm5vZGVzW2ldO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWN1cnJlbnQpIHtcbiAgICAvLyB0aGlzIGlzIGEgbmV3IG5vZGVcbiAgICBjdXJyZW50ID0ge1xuICAgICAgaWQ6IG5vZGUuaWQsXG4gICAgfTtcbiAgICBpZiAoZ3JhcGgubm9kZSkge1xuICAgICAgLy8gY2xvbmUgZGVmYXVsdCBhdHRyaWJ1dGVzXG4gICAgICBjdXJyZW50LmF0dHIgPSBtZXJnZShjdXJyZW50LmF0dHIsIGdyYXBoLm5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCBub2RlIHRvIHRoaXMgKHN1YilncmFwaCBhbmQgYWxsIGl0cyBwYXJlbnQgZ3JhcGhzXG4gIGZvciAoaSA9IGdyYXBocy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBnID0gZ3JhcGhzW2ldO1xuXG4gICAgaWYgKCFnLm5vZGVzKSB7XG4gICAgICBnLm5vZGVzID0gW107XG4gICAgfVxuICAgIGlmIChnLm5vZGVzLmluZGV4T2YoY3VycmVudCkgPT09IC0xKSB7XG4gICAgICBnLm5vZGVzLnB1c2goY3VycmVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2UgYXR0cmlidXRlc1xuICBpZiAobm9kZS5hdHRyKSB7XG4gICAgY3VycmVudC5hdHRyID0gbWVyZ2UoY3VycmVudC5hdHRyLCBub2RlLmF0dHIpO1xuICB9XG59XG5cbi8qKlxuICogQWRkIGFuIGVkZ2UgdG8gYSBncmFwaCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEBwYXJhbSB7b2JqZWN0fSBlZGdlXG4gKi9cbmZ1bmN0aW9uIGFkZEVkZ2UoZ3JhcGgsIGVkZ2UpIHtcbiAgaWYgKCFncmFwaC5lZGdlcykge1xuICAgIGdyYXBoLmVkZ2VzID0gW107XG4gIH1cbiAgZ3JhcGguZWRnZXMucHVzaChlZGdlKTtcbiAgaWYgKGdyYXBoLmVkZ2UpIHtcbiAgICB2YXIgYXR0ciA9IG1lcmdlKHt9LCBncmFwaC5lZGdlKTsgLy8gY2xvbmUgZGVmYXVsdCBhdHRyaWJ1dGVzXG4gICAgZWRnZS5hdHRyID0gbWVyZ2UoYXR0ciwgZWRnZS5hdHRyKTsgLy8gbWVyZ2UgYXR0cmlidXRlc1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGVkZ2UgdG8gYSBncmFwaCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgb2JqZWN0fSBmcm9tXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IG9iamVjdH0gdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IGF0dHJcbiAqIEByZXR1cm5zIHtvYmplY3R9IGVkZ2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWRnZShncmFwaCwgZnJvbSwgdG8sIHR5cGUsIGF0dHIpIHtcbiAgdmFyIGVkZ2UgPSB7XG4gICAgZnJvbTogZnJvbSxcbiAgICB0bzogdG8sXG4gICAgdHlwZTogdHlwZSxcbiAgfTtcblxuICBpZiAoZ3JhcGguZWRnZSkge1xuICAgIGVkZ2UuYXR0ciA9IG1lcmdlKHt9LCBncmFwaC5lZGdlKTsgLy8gY2xvbmUgZGVmYXVsdCBhdHRyaWJ1dGVzXG4gIH1cbiAgZWRnZS5hdHRyID0gbWVyZ2UoZWRnZS5hdHRyIHx8IHt9LCBhdHRyKTsgLy8gbWVyZ2UgYXR0cmlidXRlc1xuXG4gIC8vIE1vdmUgYXJyb3dzIGF0dHJpYnV0ZSBmcm9tIGF0dHIgdG8gZWRnZSB0ZW1wb3JhbGx5IGNyZWF0ZWQgaW5cbiAgLy8gcGFyc2VBdHRyaWJ1dGVMaXN0KCkuXG4gIGlmIChhdHRyICE9IG51bGwpIHtcbiAgICBpZiAoYXR0ci5oYXNPd25Qcm9wZXJ0eShcImFycm93c1wiKSAmJiBhdHRyW1wiYXJyb3dzXCJdICE9IG51bGwpIHtcbiAgICAgIGVkZ2VbXCJhcnJvd3NcIl0gPSB7IHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGF0dHIuYXJyb3dzLnR5cGUgfSB9O1xuICAgICAgYXR0cltcImFycm93c1wiXSA9IG51bGw7XG4gICAgfVxuICB9XG4gIHJldHVybiBlZGdlO1xufVxuXG4vKipcbiAqIEdldCBuZXh0IHRva2VuIGluIHRoZSBjdXJyZW50IGRvdCBmaWxlLlxuICogVGhlIHRva2VuIGFuZCB0b2tlbiB0eXBlIGFyZSBhdmFpbGFibGUgYXMgdG9rZW4gYW5kIHRva2VuVHlwZVxuICovXG5mdW5jdGlvbiBnZXRUb2tlbigpIHtcbiAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLk5VTEw7XG4gIHRva2VuID0gXCJcIjtcblxuICAvLyBza2lwIG92ZXIgd2hpdGVzcGFjZXNcbiAgd2hpbGUgKGMgPT09IFwiIFwiIHx8IGMgPT09IFwiXFx0XCIgfHwgYyA9PT0gXCJcXG5cIiB8fCBjID09PSBcIlxcclwiKSB7XG4gICAgLy8gc3BhY2UsIHRhYiwgZW50ZXJcbiAgICBuZXh0KCk7XG4gIH1cblxuICBkbyB7XG4gICAgdmFyIGlzQ29tbWVudCA9IGZhbHNlO1xuXG4gICAgLy8gc2tpcCBjb21tZW50XG4gICAgaWYgKGMgPT09IFwiI1wiKSB7XG4gICAgICAvLyBmaW5kIHRoZSBwcmV2aW91cyBub24tc3BhY2UgY2hhcmFjdGVyXG4gICAgICB2YXIgaSA9IGluZGV4IC0gMTtcbiAgICAgIHdoaWxlIChkb3QuY2hhckF0KGkpID09PSBcIiBcIiB8fCBkb3QuY2hhckF0KGkpID09PSBcIlxcdFwiKSB7XG4gICAgICAgIGktLTtcbiAgICAgIH1cbiAgICAgIGlmIChkb3QuY2hhckF0KGkpID09PSBcIlxcblwiIHx8IGRvdC5jaGFyQXQoaSkgPT09IFwiXCIpIHtcbiAgICAgICAgLy8gdGhlICMgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSwgdGhpcyBpcyBpbmRlZWQgYSBsaW5lIGNvbW1lbnRcbiAgICAgICAgd2hpbGUgKGMgIT0gXCJcIiAmJiBjICE9IFwiXFxuXCIpIHtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaXNDb21tZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGMgPT09IFwiL1wiICYmIG5leHRQcmV2aWV3KCkgPT09IFwiL1wiKSB7XG4gICAgICAvLyBza2lwIGxpbmUgY29tbWVudFxuICAgICAgd2hpbGUgKGMgIT0gXCJcIiAmJiBjICE9IFwiXFxuXCIpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgICAgaXNDb21tZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGMgPT09IFwiL1wiICYmIG5leHRQcmV2aWV3KCkgPT09IFwiKlwiKSB7XG4gICAgICAvLyBza2lwIGJsb2NrIGNvbW1lbnRcbiAgICAgIHdoaWxlIChjICE9IFwiXCIpIHtcbiAgICAgICAgaWYgKGMgPT09IFwiKlwiICYmIG5leHRQcmV2aWV3KCkgPT09IFwiL1wiKSB7XG4gICAgICAgICAgLy8gZW5kIG9mIGJsb2NrIGNvbW1lbnQgZm91bmQuIHNraXAgdGhlc2UgbGFzdCB0d28gY2hhcmFjdGVyc1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc0NvbW1lbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHNraXAgb3ZlciB3aGl0ZXNwYWNlc1xuICAgIHdoaWxlIChjID09PSBcIiBcIiB8fCBjID09PSBcIlxcdFwiIHx8IGMgPT09IFwiXFxuXCIgfHwgYyA9PT0gXCJcXHJcIikge1xuICAgICAgLy8gc3BhY2UsIHRhYiwgZW50ZXJcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH0gd2hpbGUgKGlzQ29tbWVudCk7XG5cbiAgLy8gY2hlY2sgZm9yIGVuZCBvZiBkb3QgZmlsZVxuICBpZiAoYyA9PT0gXCJcIikge1xuICAgIC8vIHRva2VuIGlzIHN0aWxsIGVtcHR5XG4gICAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBjaGVjayBmb3IgZGVsaW1pdGVycyBjb25zaXN0aW5nIG9mIDIgY2hhcmFjdGVyc1xuICB2YXIgYzIgPSBjICsgbmV4dFByZXZpZXcoKTtcbiAgaWYgKERFTElNSVRFUlNbYzJdKSB7XG4gICAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICB0b2tlbiA9IGMyO1xuICAgIG5leHQoKTtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gY2hlY2sgZm9yIGRlbGltaXRlcnMgY29uc2lzdGluZyBvZiAxIGNoYXJhY3RlclxuICBpZiAoREVMSU1JVEVSU1tjXSkge1xuICAgIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgdG9rZW4gPSBjO1xuICAgIG5leHQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBjaGVjayBmb3IgYW4gaWRlbnRpZmllciAobnVtYmVyIG9yIHN0cmluZylcbiAgLy8gVE9ETzogbW9yZSBwcmVjaXNlIHBhcnNpbmcgb2YgbnVtYmVycy9zdHJpbmdzIChhbmQgdGhlIHBvcnQgc2VwYXJhdG9yICc6JylcbiAgaWYgKGlzQWxwaGFOdW1lcmljKGMpIHx8IGMgPT09IFwiLVwiKSB7XG4gICAgdG9rZW4gKz0gYztcbiAgICBuZXh0KCk7XG5cbiAgICB3aGlsZSAoaXNBbHBoYU51bWVyaWMoYykpIHtcbiAgICAgIHRva2VuICs9IGM7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICAgIGlmICh0b2tlbiA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICB0b2tlbiA9IGZhbHNlOyAvLyBjb252ZXJ0IHRvIGJvb2xlYW5cbiAgICB9IGVsc2UgaWYgKHRva2VuID09PSBcInRydWVcIikge1xuICAgICAgdG9rZW4gPSB0cnVlOyAvLyBjb252ZXJ0IHRvIGJvb2xlYW5cbiAgICB9IGVsc2UgaWYgKCFpc05hTihOdW1iZXIodG9rZW4pKSkge1xuICAgICAgdG9rZW4gPSBOdW1iZXIodG9rZW4pOyAvLyBjb252ZXJ0IHRvIG51bWJlclxuICAgIH1cbiAgICB0b2tlblR5cGUgPSBUT0tFTlRZUEUuSURFTlRJRklFUjtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBjaGVjayBmb3IgYSBzdHJpbmcgZW5jbG9zZWQgYnkgZG91YmxlIHF1b3Rlc1xuICBpZiAoYyA9PT0gJ1wiJykge1xuICAgIG5leHQoKTtcbiAgICB3aGlsZSAoYyAhPSBcIlwiICYmIChjICE9ICdcIicgfHwgKGMgPT09ICdcIicgJiYgbmV4dFByZXZpZXcoKSA9PT0gJ1wiJykpKSB7XG4gICAgICBpZiAoYyA9PT0gJ1wiJykge1xuICAgICAgICAvLyBza2lwIHRoZSBlc2NhcGUgY2hhcmFjdGVyXG4gICAgICAgIHRva2VuICs9IGM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0gZWxzZSBpZiAoYyA9PT0gXCJcXFxcXCIgJiYgbmV4dFByZXZpZXcoKSA9PT0gXCJuXCIpIHtcbiAgICAgICAgLy8gSG9ub3IgYSBuZXdsaW5lIGVzY2FwZSBzZXF1ZW5jZVxuICAgICAgICB0b2tlbiArPSBcIlxcblwiO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlbiArPSBjO1xuICAgICAgfVxuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICBpZiAoYyAhPSAnXCInKSB7XG4gICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcignRW5kIG9mIHN0cmluZyBcIiBleHBlY3RlZCcpO1xuICAgIH1cbiAgICBuZXh0KCk7XG4gICAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLklERU5USUZJRVI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gc29tZXRoaW5nIHVua25vd24gaXMgZm91bmQsIHdyb25nIGNoYXJhY3RlcnMsIGEgc3ludGF4IGVycm9yXG4gIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5VTktOT1dOO1xuICB3aGlsZSAoYyAhPSBcIlwiKSB7XG4gICAgdG9rZW4gKz0gYztcbiAgICBuZXh0KCk7XG4gIH1cbiAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdTeW50YXggZXJyb3IgaW4gcGFydCBcIicgKyBjaG9wKHRva2VuLCAzMCkgKyAnXCInKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIGdyYXBoLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IGdyYXBoXG4gKi9cbmZ1bmN0aW9uIHBhcnNlR3JhcGgoKSB7XG4gIHZhciBncmFwaCA9IHt9O1xuXG4gIGZpcnN0KCk7XG4gIGdldFRva2VuKCk7XG5cbiAgLy8gb3B0aW9uYWwgc3RyaWN0IGtleXdvcmRcbiAgaWYgKHRva2VuID09PSBcInN0cmljdFwiKSB7XG4gICAgZ3JhcGguc3RyaWN0ID0gdHJ1ZTtcbiAgICBnZXRUb2tlbigpO1xuICB9XG5cbiAgLy8gZ3JhcGggb3IgZGlncmFwaCBrZXl3b3JkXG4gIGlmICh0b2tlbiA9PT0gXCJncmFwaFwiIHx8IHRva2VuID09PSBcImRpZ3JhcGhcIikge1xuICAgIGdyYXBoLnR5cGUgPSB0b2tlbjtcbiAgICBnZXRUb2tlbigpO1xuICB9XG5cbiAgLy8gb3B0aW9uYWwgZ3JhcGggaWRcbiAgaWYgKHRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICBncmFwaC5pZCA9IHRva2VuO1xuICAgIGdldFRva2VuKCk7XG4gIH1cblxuICAvLyBvcGVuIGFuZ2xlIGJyYWNrZXRcbiAgaWYgKHRva2VuICE9IFwie1wiKSB7XG4gICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJBbmdsZSBicmFja2V0IHsgZXhwZWN0ZWRcIik7XG4gIH1cbiAgZ2V0VG9rZW4oKTtcblxuICAvLyBzdGF0ZW1lbnRzXG4gIHBhcnNlU3RhdGVtZW50cyhncmFwaCk7XG5cbiAgLy8gY2xvc2UgYW5nbGUgYnJhY2tldFxuICBpZiAodG9rZW4gIT0gXCJ9XCIpIHtcbiAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkFuZ2xlIGJyYWNrZXQgfSBleHBlY3RlZFwiKTtcbiAgfVxuICBnZXRUb2tlbigpO1xuXG4gIC8vIGVuZCBvZiBmaWxlXG4gIGlmICh0b2tlbiAhPT0gXCJcIikge1xuICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiRW5kIG9mIGZpbGUgZXhwZWN0ZWRcIik7XG4gIH1cbiAgZ2V0VG9rZW4oKTtcblxuICAvLyByZW1vdmUgdGVtcG9yYXJ5IGRlZmF1bHQgb3B0aW9uc1xuICBkZWxldGUgZ3JhcGgubm9kZTtcbiAgZGVsZXRlIGdyYXBoLmVkZ2U7XG4gIGRlbGV0ZSBncmFwaC5ncmFwaDtcblxuICByZXR1cm4gZ3JhcGg7XG59XG5cbi8qKlxuICogUGFyc2UgYSBsaXN0IHdpdGggc3RhdGVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqL1xuZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnRzKGdyYXBoKSB7XG4gIHdoaWxlICh0b2tlbiAhPT0gXCJcIiAmJiB0b2tlbiAhPSBcIn1cIikge1xuICAgIHBhcnNlU3RhdGVtZW50KGdyYXBoKTtcbiAgICBpZiAodG9rZW4gPT09IFwiO1wiKSB7XG4gICAgICBnZXRUb2tlbigpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGEgc2luZ2xlIHN0YXRlbWVudC4gQ2FuIGJlIGEgYW4gYXR0cmlidXRlIHN0YXRlbWVudCwgbm9kZVxuICogc3RhdGVtZW50LCBhIHNlcmllcyBvZiBub2RlIHN0YXRlbWVudHMgYW5kIGVkZ2Ugc3RhdGVtZW50cywgb3IgYVxuICogcGFyYW1ldGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaFxuICovXG5mdW5jdGlvbiBwYXJzZVN0YXRlbWVudChncmFwaCkge1xuICAvLyBwYXJzZSBzdWJncmFwaFxuICB2YXIgc3ViZ3JhcGggPSBwYXJzZVN1YmdyYXBoKGdyYXBoKTtcbiAgaWYgKHN1YmdyYXBoKSB7XG4gICAgLy8gZWRnZSBzdGF0ZW1lbnRzXG4gICAgcGFyc2VFZGdlKGdyYXBoLCBzdWJncmFwaCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBwYXJzZSBhbiBhdHRyaWJ1dGUgc3RhdGVtZW50XG4gIHZhciBhdHRyID0gcGFyc2VBdHRyaWJ1dGVTdGF0ZW1lbnQoZ3JhcGgpO1xuICBpZiAoYXR0cikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHBhcnNlIG5vZGVcbiAgaWYgKHRva2VuVHlwZSAhPSBUT0tFTlRZUEUuSURFTlRJRklFUikge1xuICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiSWRlbnRpZmllciBleHBlY3RlZFwiKTtcbiAgfVxuICB2YXIgaWQgPSB0b2tlbjsgLy8gaWQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyXG4gIGdldFRva2VuKCk7XG5cbiAgaWYgKHRva2VuID09PSBcIj1cIikge1xuICAgIC8vIGlkIHN0YXRlbWVudFxuICAgIGdldFRva2VuKCk7XG4gICAgaWYgKHRva2VuVHlwZSAhPSBUT0tFTlRZUEUuSURFTlRJRklFUikge1xuICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJJZGVudGlmaWVyIGV4cGVjdGVkXCIpO1xuICAgIH1cbiAgICBncmFwaFtpZF0gPSB0b2tlbjtcbiAgICBnZXRUb2tlbigpO1xuICAgIC8vIFRPRE86IGltcGxlbWVudCBjb21tYSBzZXBhcmF0ZWQgbGlzdCB3aXRoIFwiYV9saXN0OiBJRD1JRCBbJywnXSBbYV9saXN0XSBcIlxuICB9IGVsc2Uge1xuICAgIHBhcnNlTm9kZVN0YXRlbWVudChncmFwaCwgaWQpO1xuICB9XG59XG5cbi8qKlxuICogUGFyc2UgYSBzdWJncmFwaFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaCAgICBwYXJlbnQgZ3JhcGggb2JqZWN0XG4gKiBAcmV0dXJucyB7b2JqZWN0IHwgbnVsbH0gc3ViZ3JhcGhcbiAqL1xuZnVuY3Rpb24gcGFyc2VTdWJncmFwaChncmFwaCkge1xuICB2YXIgc3ViZ3JhcGggPSBudWxsO1xuXG4gIC8vIG9wdGlvbmFsIHN1YmdyYXBoIGtleXdvcmRcbiAgaWYgKHRva2VuID09PSBcInN1YmdyYXBoXCIpIHtcbiAgICBzdWJncmFwaCA9IHt9O1xuICAgIHN1YmdyYXBoLnR5cGUgPSBcInN1YmdyYXBoXCI7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIC8vIG9wdGlvbmFsIGdyYXBoIGlkXG4gICAgaWYgKHRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICAgIHN1YmdyYXBoLmlkID0gdG9rZW47XG4gICAgICBnZXRUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG9wZW4gYW5nbGUgYnJhY2tldFxuICBpZiAodG9rZW4gPT09IFwie1wiKSB7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIGlmICghc3ViZ3JhcGgpIHtcbiAgICAgIHN1YmdyYXBoID0ge307XG4gICAgfVxuICAgIHN1YmdyYXBoLnBhcmVudCA9IGdyYXBoO1xuICAgIHN1YmdyYXBoLm5vZGUgPSBncmFwaC5ub2RlO1xuICAgIHN1YmdyYXBoLmVkZ2UgPSBncmFwaC5lZGdlO1xuICAgIHN1YmdyYXBoLmdyYXBoID0gZ3JhcGguZ3JhcGg7XG5cbiAgICAvLyBzdGF0ZW1lbnRzXG4gICAgcGFyc2VTdGF0ZW1lbnRzKHN1YmdyYXBoKTtcblxuICAgIC8vIGNsb3NlIGFuZ2xlIGJyYWNrZXRcbiAgICBpZiAodG9rZW4gIT0gXCJ9XCIpIHtcbiAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiQW5nbGUgYnJhY2tldCB9IGV4cGVjdGVkXCIpO1xuICAgIH1cbiAgICBnZXRUb2tlbigpO1xuXG4gICAgLy8gcmVtb3ZlIHRlbXBvcmFyeSBkZWZhdWx0IG9wdGlvbnNcbiAgICBkZWxldGUgc3ViZ3JhcGgubm9kZTtcbiAgICBkZWxldGUgc3ViZ3JhcGguZWRnZTtcbiAgICBkZWxldGUgc3ViZ3JhcGguZ3JhcGg7XG4gICAgZGVsZXRlIHN1YmdyYXBoLnBhcmVudDtcblxuICAgIC8vIHJlZ2lzdGVyIGF0IHRoZSBwYXJlbnQgZ3JhcGhcbiAgICBpZiAoIWdyYXBoLnN1YmdyYXBocykge1xuICAgICAgZ3JhcGguc3ViZ3JhcGhzID0gW107XG4gICAgfVxuICAgIGdyYXBoLnN1YmdyYXBocy5wdXNoKHN1YmdyYXBoKTtcbiAgfVxuXG4gIHJldHVybiBzdWJncmFwaDtcbn1cblxuLyoqXG4gKiBwYXJzZSBhbiBhdHRyaWJ1dGUgc3RhdGVtZW50IGxpa2UgXCJub2RlIFtzaGFwZT1jaXJjbGUgZm9udFNpemU9MTZdXCIuXG4gKiBBdmFpbGFibGUga2V5d29yZHMgYXJlICdub2RlJywgJ2VkZ2UnLCAnZ3JhcGgnLlxuICogVGhlIHByZXZpb3VzIGxpc3Qgd2l0aCBkZWZhdWx0IGF0dHJpYnV0ZXMgd2lsbCBiZSByZXBsYWNlZFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaFxuICogQHJldHVybnMge3N0cmluZyB8IG51bGx9IGtleXdvcmQgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcGFyc2VkIGF0dHJpYnV0ZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vZGUsIGVkZ2UsIGdyYXBoKSwgb3IgbnVsbCBpZiBub3RoaW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBwYXJzZWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlU3RhdGVtZW50KGdyYXBoKSB7XG4gIC8vIGF0dHJpYnV0ZSBzdGF0ZW1lbnRzXG4gIGlmICh0b2tlbiA9PT0gXCJub2RlXCIpIHtcbiAgICBnZXRUb2tlbigpO1xuXG4gICAgLy8gbm9kZSBhdHRyaWJ1dGVzXG4gICAgZ3JhcGgubm9kZSA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuICAgIHJldHVybiBcIm5vZGVcIjtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gXCJlZGdlXCIpIHtcbiAgICBnZXRUb2tlbigpO1xuXG4gICAgLy8gZWRnZSBhdHRyaWJ1dGVzXG4gICAgZ3JhcGguZWRnZSA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuICAgIHJldHVybiBcImVkZ2VcIjtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gXCJncmFwaFwiKSB7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIC8vIGdyYXBoIGF0dHJpYnV0ZXNcbiAgICBncmFwaC5ncmFwaCA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuICAgIHJldHVybiBcImdyYXBoXCI7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBwYXJzZSBhIG5vZGUgc3RhdGVtZW50XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGdyYXBoXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gaWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VOb2RlU3RhdGVtZW50KGdyYXBoLCBpZCkge1xuICAvLyBub2RlIHN0YXRlbWVudFxuICB2YXIgbm9kZSA9IHtcbiAgICBpZDogaWQsXG4gIH07XG4gIHZhciBhdHRyID0gcGFyc2VBdHRyaWJ1dGVMaXN0KCk7XG4gIGlmIChhdHRyKSB7XG4gICAgbm9kZS5hdHRyID0gYXR0cjtcbiAgfVxuICBhZGROb2RlKGdyYXBoLCBub2RlKTtcblxuICAvLyBlZGdlIHN0YXRlbWVudHNcbiAgcGFyc2VFZGdlKGdyYXBoLCBpZCk7XG59XG5cbi8qKlxuICogUGFyc2UgYW4gZWRnZSBvciBhIHNlcmllcyBvZiBlZGdlc1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaFxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGZyb20gICAgICAgIElkIG9mIHRoZSBmcm9tIG5vZGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VFZGdlKGdyYXBoLCBmcm9tKSB7XG4gIHdoaWxlICh0b2tlbiA9PT0gXCItPlwiIHx8IHRva2VuID09PSBcIi0tXCIpIHtcbiAgICB2YXIgdG87XG4gICAgdmFyIHR5cGUgPSB0b2tlbjtcbiAgICBnZXRUb2tlbigpO1xuXG4gICAgdmFyIHN1YmdyYXBoID0gcGFyc2VTdWJncmFwaChncmFwaCk7XG4gICAgaWYgKHN1YmdyYXBoKSB7XG4gICAgICB0byA9IHN1YmdyYXBoO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodG9rZW5UeXBlICE9IFRPS0VOVFlQRS5JREVOVElGSUVSKSB7XG4gICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiSWRlbnRpZmllciBvciBzdWJncmFwaCBleHBlY3RlZFwiKTtcbiAgICAgIH1cbiAgICAgIHRvID0gdG9rZW47XG4gICAgICBhZGROb2RlKGdyYXBoLCB7XG4gICAgICAgIGlkOiB0byxcbiAgICAgIH0pO1xuICAgICAgZ2V0VG9rZW4oKTtcbiAgICB9XG5cbiAgICAvLyBwYXJzZSBlZGdlIGF0dHJpYnV0ZXNcbiAgICB2YXIgYXR0ciA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuXG4gICAgLy8gY3JlYXRlIGVkZ2VcbiAgICB2YXIgZWRnZSA9IGNyZWF0ZUVkZ2UoZ3JhcGgsIGZyb20sIHRvLCB0eXBlLCBhdHRyKTtcbiAgICBhZGRFZGdlKGdyYXBoLCBlZGdlKTtcblxuICAgIGZyb20gPSB0bztcbiAgfVxufVxuXG4vKipcbiAqIEFzIGV4cGxhaW5lZCBpbiBbMV0sIGdyYXBodml6IGhhcyBsaW1pdGF0aW9ucyBmb3IgY29tYmluYXRpb24gb2ZcbiAqIGFycm93W2hlYWR8dGFpbF0gYW5kIGRpci4gSWYgYXR0cmlidXRlIGxpc3QgaW5jbHVkZXMgJ2RpcicsXG4gKiBmb2xsb3dpbmcgY2FzZXMganVzdCBiZSBzdXBwb3J0ZWQuXG4gKiAgIDEuIGJvdGggb3Igbm9uZSArIGFycm93aGVhZCwgYXJyb3d0YWlsXG4gKiAgIDIuIGZvcndhcmQgKyBhcnJvd2hlYWQgKGFycm93dGFpbCBpcyBub3QgYWZmZWR0ZWQpXG4gKiAgIDMuIGJhY2sgKyBhcnJvd3RhaWwgKGFycm93aGVhZCBpcyBub3QgYWZmZWN0ZWQpXG4gKiBbMV0gaHR0cHM6Ly93d3cuZ3JhcGh2aXoub3JnL2RvYy9pbmZvL2F0dHJzLmh0bWwjaDp1bmRpcl9ub3RlXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwYXJzZUF0dHJpYnV0ZUxpc3QoKSB0byBwYXJzZSAnZGlyJ1xuICogYXR0cmlidXRlIHdpdGggZ2l2ZW4gJ2F0dHJfbmFtZXMnIGFuZCAnYXR0cl9saXN0Jy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gYXR0cl9uYW1lcyAgQXJyYXkgb2YgYXR0cmlidXRlIG5hbWVzXG4gKiBAcGFyYW0ge29iamVjdH0gYXR0cl9saXN0ICBBcnJheSBvZiBvYmplY3RzIG9mIGF0dHJpYnV0ZSBzZXRcbiAqIEByZXR1cm5zIHtvYmplY3R9IGF0dHJfbGlzdCAgVXBkYXRlZCBhdHRyX2xpc3RcbiAqL1xuZnVuY3Rpb24gcGFyc2VEaXJBdHRyaWJ1dGUoYXR0cl9uYW1lcywgYXR0cl9saXN0KSB7XG4gIHZhciBpO1xuICBpZiAoYXR0cl9uYW1lcy5pbmNsdWRlcyhcImRpclwiKSkge1xuICAgIHZhciBpZHggPSB7fTsgLy8gZ2V0IGluZGV4IG9mICdhcnJvd3MnIGFuZCAnZGlyJ1xuICAgIGlkeC5hcnJvd3MgPSB7fTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cl9saXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwiYXJyb3dzXCIpIHtcbiAgICAgICAgaWYgKGF0dHJfbGlzdFtpXS52YWx1ZS50byAhPSBudWxsKSB7XG4gICAgICAgICAgaWR4LmFycm93cy50byA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXR0cl9saXN0W2ldLnZhbHVlLmZyb20gIT0gbnVsbCkge1xuICAgICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJJbnZhbGlkIHZhbHVlIG9mIGFycm93c1wiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChhdHRyX2xpc3RbaV0ubmFtZSA9PT0gXCJkaXJcIikge1xuICAgICAgICBpZHguZGlyID0gaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaXJzdCwgYWRkIGRlZmF1bHQgYXJyb3cgc2hhcGUgaWYgaXQgaXMgbm90IGFzc2lnbmVkIHRvIGF2b2lkIGVycm9yXG4gICAgdmFyIGRpcl90eXBlID0gYXR0cl9saXN0W2lkeC5kaXJdLnZhbHVlO1xuICAgIGlmICghYXR0cl9uYW1lcy5pbmNsdWRlcyhcImFycm93c1wiKSkge1xuICAgICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyB0bzogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgZnJvbTogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgdG86IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcImJhY2tcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyBmcm9tOiB7IGVuYWJsZWQ6IHRydWUgfSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWR4LmFycm93cy5mcm9tID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKCdJbnZhbGlkIGRpciB0eXBlIFwiJyArIGRpcl90eXBlICsgJ1wiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZyb21fdHlwZTtcbiAgICB2YXIgdG9fdHlwZTtcbiAgICAvLyB1cGRhdGUgJ2Fycm93cycgYXR0cmlidXRlIGZyb20gJ2RpcicuXG4gICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgLy8gYm90aCBvZiBzaGFwZXMgb2YgJ2Zyb20nIGFuZCAndG8nIGFyZSBnaXZlblxuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0udmFsdWUuZnJvbS50eXBlO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYXR0cl9saXN0LnNwbGljZShpZHguYXJyb3dzLmZyb20sIDEpO1xuXG4gICAgICAgIC8vIHNoYXBlIG9mICd0bycgaXMgYXNzaWduZWQgYW5kIHVzZSBkZWZhdWx0IHRvICdmcm9tJ1xuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBvbmx5IHNoYXBlIG9mICdmcm9tJyBpcyBhc3NpZ25lZCBhbmQgdXNlIGRlZmF1bHQgZm9yICd0bydcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJiYWNrXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ2Zyb20nXG4gICAgICBpZiAoaWR4LmFycm93cy50byAmJiBpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiXCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gZ2l2ZW4gc2hhcGUgb2YgJ3RvJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGlkeC5hcnJvd3MudG87XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFzc2lnbiBnaXZlbiAnZnJvbScgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZnJvbToge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgdmFyIGlkeF9hcnJvdztcbiAgICAgIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIGlkeF9hcnJvdyA9IGlkeC5hcnJvd3MudG87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZHhfYXJyb3cgPSBpZHguYXJyb3dzLmZyb207XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHhfYXJyb3ddID0ge1xuICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5uYW1lLFxuICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ3RvJ1xuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYXNzaWduIGdpdmVuICd0bycgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGdpdmVuIHNoYXBlIG9mICdmcm9tJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiYXJyb3dcIjtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgaWR4LmFycm93cy50byA9IGlkeC5hcnJvd3MuZnJvbTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHRvOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKCdJbnZhbGlkIGRpciB0eXBlIFwiJyArIGRpcl90eXBlICsgJ1wiJyk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlICdkaXInIGF0dHJpYnV0ZSBubyBuZWVkIGFueW1vcmVcbiAgICBhdHRyX2xpc3Quc3BsaWNlKGlkeC5kaXIsIDEpO1xuICB9XG4gIHJldHVybiBhdHRyX2xpc3Q7XG59XG5cbi8qKlxuICogUGFyc2UgYSBzZXQgd2l0aCBhdHRyaWJ1dGVzLFxuICogZm9yIGV4YW1wbGUgW2xhYmVsPVwiMS4wMDBcIiwgc2hhcGU9c29saWRdXG4gKlxuICogQHJldHVybnMge29iamVjdCB8IG51bGx9IGF0dHJcbiAqL1xuZnVuY3Rpb24gcGFyc2VBdHRyaWJ1dGVMaXN0KCkge1xuICB2YXIgaTtcbiAgdmFyIGF0dHIgPSBudWxsO1xuXG4gIC8vIGVkZ2Ugc3R5bGVzIG9mIGRvdCBhbmQgdmlzXG4gIHZhciBlZGdlU3R5bGVzID0ge1xuICAgIGRhc2hlZDogdHJ1ZSxcbiAgICBzb2xpZDogZmFsc2UsXG4gICAgZG90dGVkOiBbMSwgNV0sXG4gIH07XG5cbiAgLyoqXG4gICAqIERlZmluZSBhcnJvdyB0eXBlcy5cbiAgICogdmlzIGN1cnJlbnRseSBzdXBwb3J0cyB0eXBlcyBkZWZpbmVkIGluICdhcnJvd1R5cGVzJy5cbiAgICogRGV0YWlscyBvZiBhcnJvdyBzaGFwZXMgYXJlIGRlc2NyaWJlZCBpblxuICAgKiBodHRwOi8vd3d3LmdyYXBodml6Lm9yZy9jb250ZW50L2Fycm93LXNoYXBlc1xuICAgKi9cbiAgdmFyIGFycm93VHlwZXMgPSB7XG4gICAgZG90OiBcImNpcmNsZVwiLFxuICAgIGJveDogXCJib3hcIixcbiAgICBjcm93OiBcImNyb3dcIixcbiAgICBjdXJ2ZTogXCJjdXJ2ZVwiLFxuICAgIGljdXJ2ZTogXCJpbnZfY3VydmVcIixcbiAgICBub3JtYWw6IFwidHJpYW5nbGVcIixcbiAgICBpbnY6IFwiaW52X3RyaWFuZ2xlXCIsXG4gICAgZGlhbW9uZDogXCJkaWFtb25kXCIsXG4gICAgdGVlOiBcImJhclwiLFxuICAgIHZlZTogXCJ2ZWVcIixcbiAgfTtcblxuICAvKipcbiAgICogJ2F0dHJfbGlzdCcgY29udGFpbnMgYXR0cmlidXRlcyBmb3IgY2hlY2tpbmcgaWYgc29tZSBvZiB0aGVtIGFyZSBhZmZlY3RlZFxuICAgKiBsYXRlci4gRm9yIGluc3RhbmNlLCBib3RoIG9mICdhcnJvd2hlYWQnIGFuZCAnZGlyJyAoZWRnZSBzdHlsZSBkZWZpbmVkXG4gICAqIGluIERPVCkgbWFrZSBjaGFuZ2VzIHRvICdhcnJvd3MnIGF0dHJpYnV0ZSBpbiB2aXMuXG4gICAqL1xuICB2YXIgYXR0cl9saXN0ID0gbmV3IEFycmF5KCk7XG4gIHZhciBhdHRyX25hbWVzID0gbmV3IEFycmF5KCk7IC8vIHVzZWQgZm9yIGNoZWNraW5nIHRoZSBjYXNlLlxuXG4gIC8vIHBhcnNlIGF0dHJpYnV0ZXNcbiAgd2hpbGUgKHRva2VuID09PSBcIltcIikge1xuICAgIGdldFRva2VuKCk7XG4gICAgYXR0ciA9IHt9O1xuICAgIHdoaWxlICh0b2tlbiAhPT0gXCJcIiAmJiB0b2tlbiAhPSBcIl1cIikge1xuICAgICAgaWYgKHRva2VuVHlwZSAhPSBUT0tFTlRZUEUuSURFTlRJRklFUikge1xuICAgICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkF0dHJpYnV0ZSBuYW1lIGV4cGVjdGVkXCIpO1xuICAgICAgfVxuICAgICAgdmFyIG5hbWUgPSB0b2tlbjtcblxuICAgICAgZ2V0VG9rZW4oKTtcbiAgICAgIGlmICh0b2tlbiAhPSBcIj1cIikge1xuICAgICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkVxdWFsIHNpZ24gPSBleHBlY3RlZFwiKTtcbiAgICAgIH1cbiAgICAgIGdldFRva2VuKCk7XG5cbiAgICAgIGlmICh0b2tlblR5cGUgIT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJBdHRyaWJ1dGUgdmFsdWUgZXhwZWN0ZWRcIik7XG4gICAgICB9XG4gICAgICB2YXIgdmFsdWUgPSB0b2tlbjtcblxuICAgICAgLy8gY29udmVydCBmcm9tIGRvdCBzdHlsZSB0byB2aXNcbiAgICAgIGlmIChuYW1lID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgdmFsdWUgPSBlZGdlU3R5bGVzW3ZhbHVlXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFycm93VHlwZTtcbiAgICAgIGlmIChuYW1lID09PSBcImFycm93aGVhZFwiKSB7XG4gICAgICAgIGFycm93VHlwZSA9IGFycm93VHlwZXNbdmFsdWVdO1xuICAgICAgICBuYW1lID0gXCJhcnJvd3NcIjtcbiAgICAgICAgdmFsdWUgPSB7IHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGFycm93VHlwZSB9IH07XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lID09PSBcImFycm93dGFpbFwiKSB7XG4gICAgICAgIGFycm93VHlwZSA9IGFycm93VHlwZXNbdmFsdWVdO1xuICAgICAgICBuYW1lID0gXCJhcnJvd3NcIjtcbiAgICAgICAgdmFsdWUgPSB7IGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogYXJyb3dUeXBlIH0gfTtcbiAgICAgIH1cblxuICAgICAgYXR0cl9saXN0LnB1c2goeyBhdHRyOiBhdHRyLCBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICBhdHRyX25hbWVzLnB1c2gobmFtZSk7XG5cbiAgICAgIGdldFRva2VuKCk7XG4gICAgICBpZiAodG9rZW4gPT0gXCIsXCIpIHtcbiAgICAgICAgZ2V0VG9rZW4oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG9rZW4gIT0gXCJdXCIpIHtcbiAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiQnJhY2tldCBdIGV4cGVjdGVkXCIpO1xuICAgIH1cbiAgICBnZXRUb2tlbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzIGV4cGxhaW5lZCBpbiBbMV0sIGdyYXBodml6IGhhcyBsaW1pdGF0aW9ucyBmb3IgY29tYmluYXRpb24gb2ZcbiAgICogYXJyb3dbaGVhZHx0YWlsXSBhbmQgZGlyLiBJZiBhdHRyaWJ1dGUgbGlzdCBpbmNsdWRlcyAnZGlyJyxcbiAgICogZm9sbG93aW5nIGNhc2VzIGp1c3QgYmUgc3VwcG9ydGVkLlxuICAgKiAgIDEuIGJvdGggb3Igbm9uZSArIGFycm93aGVhZCwgYXJyb3d0YWlsXG4gICAqICAgMi4gZm9yd2FyZCArIGFycm93aGVhZCAoYXJyb3d0YWlsIGlzIG5vdCBhZmZlZHRlZClcbiAgICogICAzLiBiYWNrICsgYXJyb3d0YWlsIChhcnJvd2hlYWQgaXMgbm90IGFmZmVjdGVkKVxuICAgKiBbMV0gaHR0cHM6Ly93d3cuZ3JhcGh2aXoub3JnL2RvYy9pbmZvL2F0dHJzLmh0bWwjaDp1bmRpcl9ub3RlXG4gICAqL1xuICBpZiAoYXR0cl9uYW1lcy5pbmNsdWRlcyhcImRpclwiKSkge1xuICAgIHZhciBpZHggPSB7fTsgLy8gZ2V0IGluZGV4IG9mICdhcnJvd3MnIGFuZCAnZGlyJ1xuICAgIGlkeC5hcnJvd3MgPSB7fTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cl9saXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwiYXJyb3dzXCIpIHtcbiAgICAgICAgaWYgKGF0dHJfbGlzdFtpXS52YWx1ZS50byAhPSBudWxsKSB7XG4gICAgICAgICAgaWR4LmFycm93cy50byA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXR0cl9saXN0W2ldLnZhbHVlLmZyb20gIT0gbnVsbCkge1xuICAgICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJJbnZhbGlkIHZhbHVlIG9mIGFycm93c1wiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChhdHRyX2xpc3RbaV0ubmFtZSA9PT0gXCJkaXJcIikge1xuICAgICAgICBpZHguZGlyID0gaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaXJzdCwgYWRkIGRlZmF1bHQgYXJyb3cgc2hhcGUgaWYgaXQgaXMgbm90IGFzc2lnbmVkIHRvIGF2b2lkIGVycm9yXG4gICAgdmFyIGRpcl90eXBlID0gYXR0cl9saXN0W2lkeC5kaXJdLnZhbHVlO1xuICAgIGlmICghYXR0cl9uYW1lcy5pbmNsdWRlcyhcImFycm93c1wiKSkge1xuICAgICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyB0bzogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgZnJvbTogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgdG86IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcImJhY2tcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyBmcm9tOiB7IGVuYWJsZWQ6IHRydWUgfSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWR4LmFycm93cy5mcm9tID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKCdJbnZhbGlkIGRpciB0eXBlIFwiJyArIGRpcl90eXBlICsgJ1wiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZyb21fdHlwZTtcbiAgICB2YXIgdG9fdHlwZTtcbiAgICAvLyB1cGRhdGUgJ2Fycm93cycgYXR0cmlidXRlIGZyb20gJ2RpcicuXG4gICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgLy8gYm90aCBvZiBzaGFwZXMgb2YgJ2Zyb20nIGFuZCAndG8nIGFyZSBnaXZlblxuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0udmFsdWUuZnJvbS50eXBlO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYXR0cl9saXN0LnNwbGljZShpZHguYXJyb3dzLmZyb20sIDEpO1xuXG4gICAgICAgIC8vIHNoYXBlIG9mICd0bycgaXMgYXNzaWduZWQgYW5kIHVzZSBkZWZhdWx0IHRvICdmcm9tJ1xuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBvbmx5IHNoYXBlIG9mICdmcm9tJyBpcyBhc3NpZ25lZCBhbmQgdXNlIGRlZmF1bHQgZm9yICd0bydcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJiYWNrXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ2Zyb20nXG4gICAgICBpZiAoaWR4LmFycm93cy50byAmJiBpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiXCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gZ2l2ZW4gc2hhcGUgb2YgJ3RvJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGlkeC5hcnJvd3MudG87XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFzc2lnbiBnaXZlbiAnZnJvbScgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZnJvbToge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgdmFyIGlkeF9hcnJvdztcbiAgICAgIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIGlkeF9hcnJvdyA9IGlkeC5hcnJvd3MudG87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZHhfYXJyb3cgPSBpZHguYXJyb3dzLmZyb207XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHhfYXJyb3ddID0ge1xuICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5uYW1lLFxuICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ3RvJ1xuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYXNzaWduIGdpdmVuICd0bycgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGdpdmVuIHNoYXBlIG9mICdmcm9tJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiYXJyb3dcIjtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgaWR4LmFycm93cy50byA9IGlkeC5hcnJvd3MuZnJvbTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS52YWx1ZS50by50eXBlIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcignSW52YWxpZCBkaXIgdHlwZSBcIicgKyBkaXJfdHlwZSArICdcIicpO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSAnZGlyJyBhdHRyaWJ1dGUgbm8gbmVlZCBhbnltb3JlXG4gICAgYXR0cl9saXN0LnNwbGljZShpZHguZGlyLCAxKTtcbiAgfVxuXG4gIC8vIHBhcnNlICdwZW53aWR0aCdcbiAgdmFyIG5vZl9hdHRyX2xpc3Q7XG4gIGlmIChhdHRyX25hbWVzLmluY2x1ZGVzKFwicGVud2lkdGhcIikpIHtcbiAgICB2YXIgdG1wX2F0dHJfbGlzdCA9IFtdO1xuXG4gICAgbm9mX2F0dHJfbGlzdCA9IGF0dHJfbGlzdC5sZW5ndGg7XG4gICAgZm9yIChpID0gMDsgaSA8IG5vZl9hdHRyX2xpc3Q7IGkrKykge1xuICAgICAgLy8gZXhjbHVkZSAnd2lkdGgnIGZyb20gYXR0cl9saXN0IGlmICdwZW53aWR0aCcgZXhpc3RzXG4gICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgIT09IFwid2lkdGhcIikge1xuICAgICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwicGVud2lkdGhcIikge1xuICAgICAgICAgIGF0dHJfbGlzdFtpXS5uYW1lID0gXCJ3aWR0aFwiO1xuICAgICAgICB9XG4gICAgICAgIHRtcF9hdHRyX2xpc3QucHVzaChhdHRyX2xpc3RbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBhdHRyX2xpc3QgPSB0bXBfYXR0cl9saXN0O1xuICB9XG5cbiAgbm9mX2F0dHJfbGlzdCA9IGF0dHJfbGlzdC5sZW5ndGg7XG4gIGZvciAoaSA9IDA7IGkgPCBub2ZfYXR0cl9saXN0OyBpKyspIHtcbiAgICBzZXRWYWx1ZShhdHRyX2xpc3RbaV0uYXR0ciwgYXR0cl9saXN0W2ldLm5hbWUsIGF0dHJfbGlzdFtpXS52YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gYXR0cjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzeW50YXggZXJyb3Igd2l0aCBleHRyYSBpbmZvcm1hdGlvbiBvbiBjdXJyZW50IHRva2VuIGFuZCBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge1N5bnRheEVycm9yfSBlcnJcbiAqL1xuZnVuY3Rpb24gbmV3U3ludGF4RXJyb3IobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IFN5bnRheEVycm9yKFxuICAgIG1lc3NhZ2UgKyAnLCBnb3QgXCInICsgY2hvcCh0b2tlbiwgMzApICsgJ1wiIChjaGFyICcgKyBpbmRleCArIFwiKVwiXG4gICk7XG59XG5cbi8qKlxuICogQ2hvcCBvZmYgdGV4dCBhZnRlciBhIG1heGltdW0gbGVuZ3RoXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhMZW5ndGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNob3AodGV4dCwgbWF4TGVuZ3RoKSB7XG4gIHJldHVybiB0ZXh0Lmxlbmd0aCA8PSBtYXhMZW5ndGggPyB0ZXh0IDogdGV4dC5zdWJzdHIoMCwgMjcpICsgXCIuLi5cIjtcbn1cblxuLyoqXG4gKiBFeGVjdXRlIGEgZnVuY3Rpb24gZm4gZm9yIGVhY2ggcGFpciBvZiBlbGVtZW50cyBpbiB0d28gYXJyYXlzXG4gKlxuICogQHBhcmFtIHtBcnJheSB8ICp9IGFycmF5MVxuICogQHBhcmFtIHtBcnJheSB8ICp9IGFycmF5MlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaDIoYXJyYXkxLCBhcnJheTIsIGZuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycmF5MSkpIHtcbiAgICBhcnJheTEuZm9yRWFjaChmdW5jdGlvbiAoZWxlbTEpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5MikpIHtcbiAgICAgICAgYXJyYXkyLmZvckVhY2goZnVuY3Rpb24gKGVsZW0yKSB7XG4gICAgICAgICAgZm4oZWxlbTEsIGVsZW0yKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbihlbGVtMSwgYXJyYXkyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheTIpKSB7XG4gICAgICBhcnJheTIuZm9yRWFjaChmdW5jdGlvbiAoZWxlbTIpIHtcbiAgICAgICAgZm4oYXJyYXkxLCBlbGVtMik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm4oYXJyYXkxLCBhcnJheTIpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNldCBhIG5lc3RlZCBwcm9wZXJ0eSBvbiBhbiBvYmplY3RcbiAqIFdoZW4gbmVzdGVkIG9iamVjdHMgYXJlIG1pc3NpbmcsIHRoZXkgd2lsbCBiZSBjcmVhdGVkLlxuICogRm9yIGV4YW1wbGUgc2V0UHJvcCh7fSwgJ2ZvbnQuY29sb3InLCAncmVkJykgd2lsbCByZXR1cm4ge2ZvbnQ6IHtjb2xvcjogJ3JlZCd9fVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoICAgQSBkb3Qgc2VwYXJhdGVkIHN0cmluZyBsaWtlICdmb250LmNvbG9yJ1xuICogQHBhcmFtIHsqfSB2YWx1ZSAgICAgICBWYWx1ZSBmb3IgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIHRoZSBvcmlnaW5hbCBvYmplY3QsIGFsbG93cyBmb3IgY2hhaW5pbmcuXG4gKi9cbmZ1bmN0aW9uIHNldFByb3Aob2JqZWN0LCBwYXRoLCB2YWx1ZSkge1xuICB2YXIgbmFtZXMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgdmFyIHByb3AgPSBuYW1lcy5wb3AoKTtcblxuICAvLyB0cmF2ZXJzZSBvdmVyIHRoZSBuZXN0ZWQgb2JqZWN0c1xuICB2YXIgb2JqID0gb2JqZWN0O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5hbWUgPSBuYW1lc1tpXTtcbiAgICBpZiAoIShuYW1lIGluIG9iaikpIHtcbiAgICAgIG9ialtuYW1lXSA9IHt9O1xuICAgIH1cbiAgICBvYmogPSBvYmpbbmFtZV07XG4gIH1cblxuICAvLyBzZXQgdGhlIHByb3BlcnR5IHZhbHVlXG4gIG9ialtwcm9wXSA9IHZhbHVlO1xuXG4gIHJldHVybiBvYmplY3Q7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBvYmplY3Qgd2l0aCBET1QgYXR0cmlidXRlcyB0byB0aGVpciB2aXMuanMgZXF1aXZhbGVudHMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGF0dHIgICAgIE9iamVjdCB3aXRoIERPVCBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge29iamVjdH0gbWFwcGluZ1xuICogQHJldHVybnMge29iamVjdH0gICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHZpcy5qcyBhdHRyaWJ1dGVzXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBdHRyKGF0dHIsIG1hcHBpbmcpIHtcbiAgdmFyIGNvbnZlcnRlZCA9IHt9O1xuXG4gIGZvciAodmFyIHByb3AgaW4gYXR0cikge1xuICAgIGlmIChhdHRyLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICB2YXIgdmlzUHJvcCA9IG1hcHBpbmdbcHJvcF07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2aXNQcm9wKSkge1xuICAgICAgICB2aXNQcm9wLmZvckVhY2goZnVuY3Rpb24gKHZpc1Byb3BJKSB7XG4gICAgICAgICAgc2V0UHJvcChjb252ZXJ0ZWQsIHZpc1Byb3BJLCBhdHRyW3Byb3BdKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2aXNQcm9wID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHNldFByb3AoY29udmVydGVkLCB2aXNQcm9wLCBhdHRyW3Byb3BdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFByb3AoY29udmVydGVkLCBwcm9wLCBhdHRyW3Byb3BdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29udmVydGVkO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBzdHJpbmcgY29udGFpbmluZyBhIGdyYXBoIGluIERPVCBsYW5ndWFnZSBpbnRvIGEgbWFwIGNvbnRhaW5pbmdcbiAqIHdpdGggbm9kZXMgYW5kIGVkZ2VzIGluIHRoZSBmb3JtYXQgb2YgZ3JhcGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgICAgICAgICBUZXh0IGNvbnRhaW5pbmcgYSBncmFwaCBpbiBET1Qtbm90YXRpb25cbiAqIEByZXR1cm5zIHtvYmplY3R9IGdyYXBoRGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gRE9UVG9HcmFwaChkYXRhKSB7XG4gIC8vIHBhcnNlIHRoZSBET1QgZmlsZVxuICB2YXIgZG90RGF0YSA9IHBhcnNlRE9UKGRhdGEpO1xuICB2YXIgZ3JhcGhEYXRhID0ge1xuICAgIG5vZGVzOiBbXSxcbiAgICBlZGdlczogW10sXG4gICAgb3B0aW9uczoge30sXG4gIH07XG5cbiAgLy8gY29weSB0aGUgbm9kZXNcbiAgaWYgKGRvdERhdGEubm9kZXMpIHtcbiAgICBkb3REYXRhLm5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGRvdE5vZGUpIHtcbiAgICAgIHZhciBncmFwaE5vZGUgPSB7XG4gICAgICAgIGlkOiBkb3ROb2RlLmlkLFxuICAgICAgICBsYWJlbDogU3RyaW5nKGRvdE5vZGUubGFiZWwgfHwgZG90Tm9kZS5pZCksXG4gICAgICB9O1xuICAgICAgbWVyZ2UoZ3JhcGhOb2RlLCBjb252ZXJ0QXR0cihkb3ROb2RlLmF0dHIsIE5PREVfQVRUUl9NQVBQSU5HKSk7XG4gICAgICBpZiAoZ3JhcGhOb2RlLmltYWdlKSB7XG4gICAgICAgIGdyYXBoTm9kZS5zaGFwZSA9IFwiaW1hZ2VcIjtcbiAgICAgIH1cbiAgICAgIGdyYXBoRGF0YS5ub2Rlcy5wdXNoKGdyYXBoTm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBjb3B5IHRoZSBlZGdlc1xuICBpZiAoZG90RGF0YS5lZGdlcykge1xuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYW4gZWRnZSBpbiBET1QgZm9ybWF0IHRvIGFuIGVkZ2Ugd2l0aCBWaXNHcmFwaCBmb3JtYXRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkb3RFZGdlXG4gICAgICogQHJldHVybnMge29iamVjdH0gZ3JhcGhFZGdlXG4gICAgICovXG4gICAgdmFyIGNvbnZlcnRFZGdlID0gZnVuY3Rpb24gKGRvdEVkZ2UpIHtcbiAgICAgIHZhciBncmFwaEVkZ2UgPSB7XG4gICAgICAgIGZyb206IGRvdEVkZ2UuZnJvbSxcbiAgICAgICAgdG86IGRvdEVkZ2UudG8sXG4gICAgICB9O1xuICAgICAgbWVyZ2UoZ3JhcGhFZGdlLCBjb252ZXJ0QXR0cihkb3RFZGdlLmF0dHIsIEVER0VfQVRUUl9NQVBQSU5HKSk7XG5cbiAgICAgIC8vIEFkZCBhcnJvd3MgYXR0cmlidXRlIHRvIGRlZmF1bHQgc3R5bGVkIGFycm93LlxuICAgICAgLy8gVGhlIHJlYXNvbiB3aHkgZGVmYXVsdCBzdHlsZSBpcyBub3QgYWRkZWQgaW4gcGFyc2VBdHRyaWJ1dGVMaXN0KCkgaXNcbiAgICAgIC8vIGJlY2F1c2Ugb25seSBkZWZhdWx0IGlzIGNsZWFyZWQgYmVmb3JlIGhlcmUuXG4gICAgICBpZiAoZ3JhcGhFZGdlLmFycm93cyA9PSBudWxsICYmIGRvdEVkZ2UudHlwZSA9PT0gXCItPlwiKSB7XG4gICAgICAgIGdyYXBoRWRnZS5hcnJvd3MgPSBcInRvXCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBncmFwaEVkZ2U7XG4gICAgfTtcblxuICAgIGRvdERhdGEuZWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoZG90RWRnZSkge1xuICAgICAgdmFyIGZyb20sIHRvO1xuICAgICAgaWYgKGRvdEVkZ2UuZnJvbSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICBmcm9tID0gZG90RWRnZS5mcm9tLm5vZGVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnJvbSA9IHtcbiAgICAgICAgICBpZDogZG90RWRnZS5mcm9tLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZG90RWRnZS50byBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0byA9IGRvdEVkZ2UudG8ubm9kZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0byA9IHtcbiAgICAgICAgICBpZDogZG90RWRnZS50byxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRvdEVkZ2UuZnJvbSBpbnN0YW5jZW9mIE9iamVjdCAmJiBkb3RFZGdlLmZyb20uZWRnZXMpIHtcbiAgICAgICAgZG90RWRnZS5mcm9tLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKHN1YkVkZ2UpIHtcbiAgICAgICAgICB2YXIgZ3JhcGhFZGdlID0gY29udmVydEVkZ2Uoc3ViRWRnZSk7XG4gICAgICAgICAgZ3JhcGhEYXRhLmVkZ2VzLnB1c2goZ3JhcGhFZGdlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZvckVhY2gyKGZyb20sIHRvLCBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcbiAgICAgICAgdmFyIHN1YkVkZ2UgPSBjcmVhdGVFZGdlKFxuICAgICAgICAgIGdyYXBoRGF0YSxcbiAgICAgICAgICBmcm9tLmlkLFxuICAgICAgICAgIHRvLmlkLFxuICAgICAgICAgIGRvdEVkZ2UudHlwZSxcbiAgICAgICAgICBkb3RFZGdlLmF0dHJcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIGdyYXBoRWRnZSA9IGNvbnZlcnRFZGdlKHN1YkVkZ2UpO1xuICAgICAgICBncmFwaERhdGEuZWRnZXMucHVzaChncmFwaEVkZ2UpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChkb3RFZGdlLnRvIGluc3RhbmNlb2YgT2JqZWN0ICYmIGRvdEVkZ2UudG8uZWRnZXMpIHtcbiAgICAgICAgZG90RWRnZS50by5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJFZGdlKSB7XG4gICAgICAgICAgdmFyIGdyYXBoRWRnZSA9IGNvbnZlcnRFZGdlKHN1YkVkZ2UpO1xuICAgICAgICAgIGdyYXBoRGF0YS5lZGdlcy5wdXNoKGdyYXBoRWRnZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gY29weSB0aGUgb3B0aW9uc1xuICBpZiAoZG90RGF0YS5hdHRyKSB7XG4gICAgZ3JhcGhEYXRhLm9wdGlvbnMgPSBkb3REYXRhLmF0dHI7XG4gIH1cblxuICByZXR1cm4gZ3JhcGhEYXRhO1xufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXZhciAqL1xuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWVuYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbiIsICJleHBvcnQgdHlwZSBJZCA9IG51bWJlciB8IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBDb2xvck9iamVjdCB7XG4gIGJhY2tncm91bmQ6IHN0cmluZztcbiAgYm9yZGVyOiBzdHJpbmc7XG4gIGhpZ2hsaWdodDoge1xuICAgIGJhY2tncm91bmQ6IHN0cmluZztcbiAgICBib3JkZXI6IHN0cmluZztcbiAgfTtcbiAgaG92ZXI6IHtcbiAgICBiYWNrZ3JvdW5kOiBzdHJpbmc7XG4gICAgYm9yZGVyOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VwaGlEYXRhIHtcbiAgbm9kZXM6IEdlcGhpTm9kZVtdO1xuICBlZGdlczogR2VwaGlFZGdlW107XG59XG5leHBvcnQgaW50ZXJmYWNlIEdlcGhpUGFyc2VPcHRpb25zIHtcbiAgZml4ZWQ/OiBib29sZWFuO1xuICBpbmhlcml0Q29sb3I/OiBib29sZWFuO1xuICBwYXJzZUNvbG9yPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXBoaU5vZGUge1xuICBpZDogSWQ7XG5cbiAgYXR0cmlidXRlcz86IHsgdGl0bGU/OiBzdHJpbmcgfTtcbiAgY29sb3I/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBzaXplPzogbnVtYmVyO1xuICB0aXRsZT86IHN0cmluZztcbiAgeD86IG51bWJlcjtcbiAgeT86IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2VwaGlFZGdlIHtcbiAgaWQ6IElkO1xuICBzb3VyY2U6IElkO1xuICB0YXJnZXQ6IElkO1xuXG4gIGF0dHJpYnV0ZXM/OiB7IHRpdGxlPzogc3RyaW5nIH07XG4gIGNvbG9yPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaXNEYXRhIHtcbiAgbm9kZXM6IFZpc05vZGVbXTtcbiAgZWRnZXM6IFZpc0VkZ2VbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaXNOb2RlIHtcbiAgaWQ6IElkO1xuICBmaXhlZDogYm9vbGVhbjtcblxuICBjb2xvcj86IHN0cmluZyB8IENvbG9yT2JqZWN0O1xuICBsYWJlbD86IHN0cmluZztcbiAgc2l6ZT86IG51bWJlcjtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG5cbiAgYXR0cmlidXRlcz86IHVua25vd247XG59XG5leHBvcnQgaW50ZXJmYWNlIFZpc0VkZ2Uge1xuICBpZDogSWQ7XG4gIGZyb206IElkO1xuICB0bzogSWQ7XG5cbiAgYXJyb3dzPzogXCJ0b1wiO1xuICBjb2xvcj86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIGF0dHJpYnV0ZXM/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIENvbnZlcnQgR2VwaGkgdG8gVmlzLlxuICpcbiAqIEBwYXJhbSBnZXBoaUpTT04gLSBUaGUgcGFyc2VkIEpTT04gZGF0YSBpbiBHZXBoaSBmb3JtYXQuXG4gKiBAcGFyYW0gb3B0aW9uc09iaiAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgZGF0YSByZWFkeSB0byBiZSB1c2VkIGluIFZpcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlR2VwaGkoXG4gIGdlcGhpSlNPTjogR2VwaGlEYXRhLFxuICBvcHRpb25zT2JqPzogR2VwaGlQYXJzZU9wdGlvbnNcbik6IFZpc0RhdGEge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIGVkZ2VzOiB7XG4gICAgICBpbmhlcml0Q29sb3I6IGZhbHNlLFxuICAgIH0sXG4gICAgbm9kZXM6IHtcbiAgICAgIGZpeGVkOiBmYWxzZSxcbiAgICAgIHBhcnNlQ29sb3I6IGZhbHNlLFxuICAgIH0sXG4gIH07XG5cbiAgaWYgKG9wdGlvbnNPYmogIT0gbnVsbCkge1xuICAgIGlmIChvcHRpb25zT2JqLmZpeGVkICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMubm9kZXMuZml4ZWQgPSBvcHRpb25zT2JqLmZpeGVkO1xuICAgIH1cbiAgICBpZiAob3B0aW9uc09iai5wYXJzZUNvbG9yICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMubm9kZXMucGFyc2VDb2xvciA9IG9wdGlvbnNPYmoucGFyc2VDb2xvcjtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnNPYmouaW5oZXJpdENvbG9yICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZWRnZXMuaW5oZXJpdENvbG9yID0gb3B0aW9uc09iai5pbmhlcml0Q29sb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ0VkZ2VzID0gZ2VwaGlKU09OLmVkZ2VzO1xuICBjb25zdCB2RWRnZXMgPSBnRWRnZXMubWFwKChnRWRnZSk6IFZpc0VkZ2UgPT4ge1xuICAgIGNvbnN0IHZFZGdlOiBWaXNFZGdlID0ge1xuICAgICAgZnJvbTogZ0VkZ2Uuc291cmNlLFxuICAgICAgaWQ6IGdFZGdlLmlkLFxuICAgICAgdG86IGdFZGdlLnRhcmdldCxcbiAgICB9O1xuXG4gICAgaWYgKGdFZGdlLmF0dHJpYnV0ZXMgIT0gbnVsbCkge1xuICAgICAgdkVkZ2UuYXR0cmlidXRlcyA9IGdFZGdlLmF0dHJpYnV0ZXM7XG4gICAgfVxuICAgIGlmIChnRWRnZS5sYWJlbCAhPSBudWxsKSB7XG4gICAgICB2RWRnZS5sYWJlbCA9IGdFZGdlLmxhYmVsO1xuICAgIH1cbiAgICBpZiAoZ0VkZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIGdFZGdlLmF0dHJpYnV0ZXMudGl0bGUgIT0gbnVsbCkge1xuICAgICAgdkVkZ2UudGl0bGUgPSBnRWRnZS5hdHRyaWJ1dGVzLnRpdGxlO1xuICAgIH1cbiAgICBpZiAoZ0VkZ2UudHlwZSA9PT0gXCJEaXJlY3RlZFwiKSB7XG4gICAgICB2RWRnZS5hcnJvd3MgPSBcInRvXCI7XG4gICAgfVxuICAgIC8vIGVkZ2VbJ3ZhbHVlJ10gPSBnRWRnZS5hdHRyaWJ1dGVzICE9IG51bGwgPyBnRWRnZS5hdHRyaWJ1dGVzLldlaWdodCA6IHVuZGVmaW5lZDtcbiAgICAvLyBlZGdlWyd3aWR0aCddID0gZWRnZVsndmFsdWUnXSAhPSBudWxsID8gdW5kZWZpbmVkIDogZWRnZWdFZGdlLnNpemU7XG4gICAgaWYgKGdFZGdlLmNvbG9yICYmIG9wdGlvbnMuZWRnZXMuaW5oZXJpdENvbG9yID09PSBmYWxzZSkge1xuICAgICAgdkVkZ2UuY29sb3IgPSBnRWRnZS5jb2xvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdkVkZ2U7XG4gIH0pO1xuXG4gIGNvbnN0IHZOb2RlcyA9IGdlcGhpSlNPTi5ub2Rlcy5tYXAoKGdOb2RlKTogVmlzTm9kZSA9PiB7XG4gICAgY29uc3Qgdk5vZGU6IFZpc05vZGUgPSB7XG4gICAgICBpZDogZ05vZGUuaWQsXG4gICAgICBmaXhlZDogb3B0aW9ucy5ub2Rlcy5maXhlZCAmJiBnTm9kZS54ICE9IG51bGwgJiYgZ05vZGUueSAhPSBudWxsLFxuICAgIH07XG5cbiAgICBpZiAoZ05vZGUuYXR0cmlidXRlcyAhPSBudWxsKSB7XG4gICAgICB2Tm9kZS5hdHRyaWJ1dGVzID0gZ05vZGUuYXR0cmlidXRlcztcbiAgICB9XG4gICAgaWYgKGdOb2RlLmxhYmVsICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLmxhYmVsID0gZ05vZGUubGFiZWw7XG4gICAgfVxuICAgIGlmIChnTm9kZS5zaXplICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLnNpemUgPSBnTm9kZS5zaXplO1xuICAgIH1cbiAgICBpZiAoZ05vZGUuYXR0cmlidXRlcyAhPSBudWxsICYmIGdOb2RlLmF0dHJpYnV0ZXMudGl0bGUgIT0gbnVsbCkge1xuICAgICAgdk5vZGUudGl0bGUgPSBnTm9kZS5hdHRyaWJ1dGVzLnRpdGxlO1xuICAgIH1cbiAgICBpZiAoZ05vZGUudGl0bGUgIT0gbnVsbCkge1xuICAgICAgdk5vZGUudGl0bGUgPSBnTm9kZS50aXRsZTtcbiAgICB9XG4gICAgaWYgKGdOb2RlLnggIT0gbnVsbCkge1xuICAgICAgdk5vZGUueCA9IGdOb2RlLng7XG4gICAgfVxuICAgIGlmIChnTm9kZS55ICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLnkgPSBnTm9kZS55O1xuICAgIH1cbiAgICBpZiAoZ05vZGUuY29sb3IgIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMubm9kZXMucGFyc2VDb2xvciA9PT0gdHJ1ZSkge1xuICAgICAgICB2Tm9kZS5jb2xvciA9IGdOb2RlLmNvbG9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdk5vZGUuY29sb3IgPSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogZ05vZGUuY29sb3IsXG4gICAgICAgICAgYm9yZGVyOiBnTm9kZS5jb2xvcixcbiAgICAgICAgICBoaWdobGlnaHQ6IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGdOb2RlLmNvbG9yLFxuICAgICAgICAgICAgYm9yZGVyOiBnTm9kZS5jb2xvcixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBnTm9kZS5jb2xvcixcbiAgICAgICAgICAgIGJvcmRlcjogZ05vZGUuY29sb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdk5vZGU7XG4gIH0pO1xuXG4gIHJldHVybiB7IG5vZGVzOiB2Tm9kZXMsIGVkZ2VzOiB2RWRnZXMgfTtcbn1cbiIsICJleHBvcnQgaW50ZXJmYWNlIExvY2FsZSB7XG4gIGFkZERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGFkZEVkZ2U6IHN0cmluZztcbiAgYWRkTm9kZTogc3RyaW5nO1xuICBiYWNrOiBzdHJpbmc7XG4gIGNsb3NlOiBzdHJpbmc7XG4gIGNyZWF0ZUVkZ2VFcnJvcjogc3RyaW5nO1xuICBkZWw6IHN0cmluZztcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBzdHJpbmc7XG4gIGVkZ2VEZXNjcmlwdGlvbjogc3RyaW5nO1xuICBlZGl0OiBzdHJpbmc7XG4gIGVkaXRDbHVzdGVyRXJyb3I6IHN0cmluZztcbiAgZWRpdEVkZ2U6IHN0cmluZztcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjogc3RyaW5nO1xuICBlZGl0Tm9kZTogc3RyaW5nO1xufVxuZXhwb3J0IHR5cGUgTG9jYWxlcyA9IFJlY29yZDxzdHJpbmcsIExvY2FsZT47XG5cbi8vIEVuZ2xpc2hcbmV4cG9ydCBjb25zdCBlbjogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJDbGljayBpbiBhbiBlbXB0eSBzcGFjZSB0byBwbGFjZSBhIG5ldyBub2RlLlwiLFxuICBhZGRFZGdlOiBcIkFkZCBFZGdlXCIsXG4gIGFkZE5vZGU6IFwiQWRkIE5vZGVcIixcbiAgYmFjazogXCJCYWNrXCIsXG4gIGNsb3NlOiBcIkNsb3NlXCIsXG4gIGNyZWF0ZUVkZ2VFcnJvcjogXCJDYW5ub3QgbGluayBlZGdlcyB0byBhIGNsdXN0ZXIuXCIsXG4gIGRlbDogXCJEZWxldGUgc2VsZWN0ZWRcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIkNsdXN0ZXJzIGNhbm5vdCBiZSBkZWxldGVkLlwiLFxuICBlZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGljayBvbiBhIG5vZGUgYW5kIGRyYWcgdGhlIGVkZ2UgdG8gYW5vdGhlciBub2RlIHRvIGNvbm5lY3QgdGhlbS5cIixcbiAgZWRpdDogXCJFZGl0XCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwiQ2x1c3RlcnMgY2Fubm90IGJlIGVkaXRlZC5cIixcbiAgZWRpdEVkZ2U6IFwiRWRpdCBFZGdlXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGljayBvbiB0aGUgY29udHJvbCBwb2ludHMgYW5kIGRyYWcgdGhlbSB0byBhIG5vZGUgdG8gY29ubmVjdCB0byBpdC5cIixcbiAgZWRpdE5vZGU6IFwiRWRpdCBOb2RlXCIsXG59O1xuXG4vLyBHZXJtYW5cbmV4cG9ydCBjb25zdCBkZTogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjpcbiAgICBcIktsaWNrZSBhdWYgZWluZSBmcmVpZSBTdGVsbGUsIHVtIGVpbmVuIG5ldWVuIEtub3RlbiB6dSBwbGF6aWVyZW4uXCIsXG4gIGFkZEVkZ2U6IFwiS2FudGUgaGluenVmXFx1MDBmY2dlblwiLFxuICBhZGROb2RlOiBcIktub3RlbiBoaW56dWZcXHUwMGZjZ2VuXCIsXG4gIGJhY2s6IFwiWnVyXFx1MDBmY2NrXCIsXG4gIGNsb3NlOiBcIlNjaGxpZcOfZW5cIixcbiAgY3JlYXRlRWRnZUVycm9yOlxuICAgIFwiRXMgaXN0IG5pY2h0IG1cXHUwMGY2Z2xpY2gsIEthbnRlbiBtaXQgQ2x1c3Rlcm4genUgdmVyYmluZGVuLlwiLFxuICBkZWw6IFwiTFxcdTAwZjZzY2hlIEF1c3dhaGxcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIkNsdXN0ZXIga1xcdTAwZjZubmVuIG5pY2h0IGdlbFxcdTAwZjZzY2h0IHdlcmRlbi5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiS2xpY2tlIGF1ZiBlaW5lbiBLbm90ZW4gdW5kIHppZWhlIGRpZSBLYW50ZSB6dSBlaW5lbSBhbmRlcmVuIEtub3RlbiwgdW0gZGllc2UgenUgdmVyYmluZGVuLlwiLFxuICBlZGl0OiBcIkVkaXRpZXJlblwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIkNsdXN0ZXIga1xcdTAwZjZubmVuIG5pY2h0IGVkaXRpZXJ0IHdlcmRlbi5cIixcbiAgZWRpdEVkZ2U6IFwiS2FudGUgZWRpdGllcmVuXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJLbGlja2UgYXVmIGRpZSBWZXJiaW5kdW5nc3B1bmt0ZSB1bmQgemllaGUgZGllc2UgYXVmIGVpbmVuIEtub3RlbiwgdW0gc2llIHp1IHZlcmJpbmRlbi5cIixcbiAgZWRpdE5vZGU6IFwiS25vdGVuIGVkaXRpZXJlblwiLFxufTtcblxuLy8gU3BhbmlzaFxuZXhwb3J0IGNvbnN0IGVzOiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOlxuICAgIFwiSGFnYSBjbGljIGVuIHVuIGx1Z2FyIHZhY1xcdTAwZWRvIHBhcmEgY29sb2NhciB1biBudWV2byBub2RvLlwiLFxuICBhZGRFZGdlOiBcIkFcXHUwMGYxYWRpciBhcmlzdGFcIixcbiAgYWRkTm9kZTogXCJBXFx1MDBmMWFkaXIgbm9kb1wiLFxuICBiYWNrOiBcIkF0clxcdTAwZTFzXCIsXG4gIGNsb3NlOiBcIkNlcnJhclwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwiTm8gc2UgcHVlZGUgY29uZWN0YXIgdW5hIGFyaXN0YSBhIHVuIGdydXBvLlwiLFxuICBkZWw6IFwiRWxpbWluYXIgc2VsZWNjaVxcdTAwZjNuXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJObyBlcyBwb3NpYmxlIGVsaW1pbmFyIGdydXBvcy5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiSGFnYSBjbGljIGVuIHVuIG5vZG8geSBhcnJhc3RyZSBsYSBhcmlzdGEgaGFjaWEgb3RybyBub2RvIHBhcmEgY29uZWN0YXJsb3MuXCIsXG4gIGVkaXQ6IFwiRWRpdGFyXCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwiTm8gZXMgcG9zaWJsZSBlZGl0YXIgZ3J1cG9zLlwiLFxuICBlZGl0RWRnZTogXCJFZGl0YXIgYXJpc3RhXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJIYWdhIGNsaWMgZW4gdW4gcHVudG8gZGUgY29udHJvbCB5IGFycmFzdHJlbG8gYSB1biBub2RvIHBhcmEgY29uZWN0YXJsby5cIixcbiAgZWRpdE5vZGU6IFwiRWRpdGFyIG5vZG9cIixcbn07XG5cbi8vSXRhbGlhbm9cbmV4cG9ydCBjb25zdCBpdDogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJDbGljY2EgcGVyIGFnZ2l1bmdlcmUgdW4gbnVvdm8gbm9kb1wiLFxuICBhZGRFZGdlOiBcIkFnZ2l1bmdpIHVuIHZlcnRpY2VcIixcbiAgYWRkTm9kZTogXCJBZ2dpdW5naSB1biBub2RvXCIsXG4gIGJhY2s6IFwiSW5kaWV0cm9cIixcbiAgY2xvc2U6IFwiQ2hpdWRlcmVcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIk5vbiBzaSBwb3Nzb25vIGNvbGxlZ2FyZSB2ZXJ0aWNpIGFkIHVuIGNsdXN0ZXJcIixcbiAgZGVsOiBcIkNhbmNlbGxhIGxhIHNlbGV6aW9uZVwiLFxuICBkZWxldGVDbHVzdGVyRXJyb3I6IFwiSSBjbHVzdGVyIG5vbiBwb3Nzb25vIGVzc2VyZSBjYW5jZWxsYXRpXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkNsaWNjYSBzdSB1biBub2RvIGUgdHJhc2NpbmFsbyBhZCB1biBhbHRybyBub2RvIHBlciBjb25uZXR0ZXJsaS5cIixcbiAgZWRpdDogXCJNb2RpZmljYVwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIkkgY2x1c3RlcnMgbm9uIHBvc3Nvbm8gZXNzZXJlIG1vZGlmaWNhdGkuXCIsXG4gIGVkaXRFZGdlOiBcIk1vZGlmaWNhIGlsIHZlcnRpY2VcIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkNsaWNjYSBzdWkgUHVudGkgZGkgY29udHJvbGxvIGUgdHJhc2NpbmFsaSBhZCB1biBub2RvIHBlciBjb25uZXR0ZXJsaS5cIixcbiAgZWRpdE5vZGU6IFwiTW9kaWZpY2EgaWwgbm9kb1wiLFxufTtcblxuLy8gRHV0Y2hcbmV4cG9ydCBjb25zdCBubDogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJLbGlrIG9wIGVlbiBsZWVnIGdlYmllZCBvbSBlZW4gbmlldXdlIG5vZGUgdGUgbWFrZW4uXCIsXG4gIGFkZEVkZ2U6IFwiTGluayB0b2V2b2VnZW5cIixcbiAgYWRkTm9kZTogXCJOb2RlIHRvZXZvZWdlblwiLFxuICBiYWNrOiBcIlRlcnVnXCIsXG4gIGNsb3NlOiBcIlNsdWl0ZW5cIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIkthbiBnZWVuIGxpbmsgbWFrZW4gbmFhciBlZW4gY2x1c3Rlci5cIixcbiAgZGVsOiBcIlNlbGVjdGllIHZlcndpamRlcmVuXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBrdW5uZW4gbmlldCB3b3JkZW4gdmVyd2lqZGVyZC5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiS2xpayBvcCBlZW4gbm9kZSBlbiBzbGVlcCBkZSBsaW5rIG5hYXIgZWVuIGFuZGVyZSBub2RlIG9tIHplIHRlIHZlcmJpbmRlbi5cIixcbiAgZWRpdDogXCJXaWp6aWdlblwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIkNsdXN0ZXJzIGt1bm5lbiBuaWV0IHdvcmRlbiBhYW5nZXBhc3QuXCIsXG4gIGVkaXRFZGdlOiBcIkxpbmsgd2lqemlnZW5cIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIktsaWsgb3AgZGUgdmVyYmluZGluZ3NwdW50ZW4gZW4gc2xlZXAgemUgbmFhciBlZW4gbm9kZSBvbSBkYWFybWVlIHRlIHZlcmJpbmRlbi5cIixcbiAgZWRpdE5vZGU6IFwiTm9kZSB3aWp6aWdlblwiLFxufTtcblxuLy8gUG9ydHVndWVzZSBCcmF6aWxcbmV4cG9ydCBjb25zdCBwdDogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJDbGlxdWUgZW0gdW0gZXNwYcOnbyBlbSBicmFuY28gcGFyYSBhZGljaW9uYXIgdW0gbm92byBuw7NcIixcbiAgYWRkRWRnZTogXCJBZGljaW9uYXIgYXJlc3RhXCIsXG4gIGFkZE5vZGU6IFwiQWRpY2lvbmFyIG7Ds1wiLFxuICBiYWNrOiBcIlZvbHRhclwiLFxuICBjbG9zZTogXCJGZWNoYXJcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIk7Do28gZm9pIHBvc3PDrXZlbCBsaW5rYXIgYXJlc3RhcyBhIHVtIGNsdXN0ZXIuXCIsXG4gIGRlbDogXCJSZW1vdmVyIHNlbGVjaW9uYWRvXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBuw6NvIHB1ZGVyYW0gc2VyIHJlbW92aWRvcy5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpcXVlIGVtIHVtIG7DsyBlIGFycmFzdGUgYSBhcmVzdGEgYXTDqSBvdXRybyBuw7MgcGFyYSBjb25lY3TDoS1sb3NcIixcbiAgZWRpdDogXCJFZGl0YXJcIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBuw6NvIHB1ZGVyYW0gc2VyIGVkaXRhZG9zLlwiLFxuICBlZGl0RWRnZTogXCJFZGl0YXIgYXJlc3RhXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGlxdWUgbm9zIHBvbnRvcyBkZSBjb250cm9sZSBlIG9zIGFycmFzdGUgcGFyYSB1bSBuw7MgcGFyYSBjb25lY3TDoS1sb3NcIixcbiAgZWRpdE5vZGU6IFwiRWRpdGFyIG7Ds1wiLFxufTtcblxuLy8gUnVzc2lhblxuZXhwb3J0IGNvbnN0IHJ1OiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOiBcItCa0LvQuNC60L3QuNGC0LUg0LIg0YHQstC+0LHQvtC00L3QvtC1INC80LXRgdGC0L4sINGH0YLQvtCx0Ysg0LTQvtCx0LDQstC40YLRjCDQvdC+0LLRi9C5INGD0LfQtdC7LlwiLFxuICBhZGRFZGdlOiBcItCU0L7QsdCw0LLQuNGC0Ywg0YDQtdCx0YDQvlwiLFxuICBhZGROb2RlOiBcItCU0L7QsdCw0LLQuNGC0Ywg0YPQt9C10LtcIixcbiAgYmFjazogXCLQndCw0LfQsNC0XCIsXG4gIGNsb3NlOiBcItCX0LDQutGA0YvQstCw0YLRjFwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwi0J3QtdCy0L7Qt9C80L7QttC90L4g0YHQvtC10LTQuNC90LjRgtGMINGA0LXQsdGA0LAg0LIg0LrQu9Cw0YHRgtC10YAuXCIsXG4gIGRlbDogXCLQo9C00LDQu9C40YLRjCDQstGL0LHRgNCw0L3QvdC+0LVcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcItCa0LvQsNGB0YLQtdGA0Ysg0L3QtSDQvNC+0LPRg9GCINCx0YvRgtGMINGD0LTQsNC70LXQvdGLXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvQuNC60L3QuNGC0LUg0L3QsCDRg9C30LXQuyDQuCDQv9GA0L7RgtGP0L3QuNGC0LUg0YDQtdCx0YDQviDQuiDQtNGA0YPQs9C+0LzRgyDRg9C30LvRgywg0YfRgtC+0LHRiyDRgdC+0LXQtNC40L3QuNGC0Ywg0LjRhS5cIixcbiAgZWRpdDogXCLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjFwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcItCa0LvQsNGB0YLQtdGA0Ysg0L3QtdC00L7RgdGC0YPQv9C90Ysg0LTQu9GPINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8uXCIsXG4gIGVkaXRFZGdlOiBcItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGA0LXQsdGA0L5cIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvQuNC60L3QuNGC0LUg0L3QsCDQutC+0L3RgtGA0L7Qu9GM0L3Ri9C1INGC0L7Rh9C60Lgg0Lgg0L/QtdGA0LXRgtCw0YnQuNGC0LUg0LjRhSDQsiDRg9C30LXQuywg0YfRgtC+0LHRiyDQv9C+0LTQutC70Y7Rh9C40YLRjNGB0Y8g0Log0L3QtdC80YMuXCIsXG4gIGVkaXROb2RlOiBcItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGD0LfQtdC7XCIsXG59O1xuXG4vLyBDaGluZXNlXG5leHBvcnQgY29uc3QgY246IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwi5Y2V5Ye756m655m95aSE5pS+572u5paw6IqC54K544CCXCIsXG4gIGFkZEVkZ2U6IFwi5re75Yqg6L+e5o6l57q/XCIsXG4gIGFkZE5vZGU6IFwi5re75Yqg6IqC54K5XCIsXG4gIGJhY2s6IFwi6L+U5ZueXCIsXG4gIGNsb3NlOiBcIumXnOmWiVwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwi5peg5rOV5bCG6L+e5o6l57q/6L+e5o6l5Yiw576k6ZuG44CCXCIsXG4gIGRlbDogXCLliKDpmaTpgInlrppcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIuaXoOazleWIoOmZpOe+pOmbhuOAglwiLFxuICBlZGdlRGVzY3JpcHRpb246IFwi5Y2V5Ye75p+Q5Liq6IqC54K55bm25bCG6K+l6L+e5o6l57q/5ouW5Yqo5Yiw5Y+m5LiA5Liq6IqC54K55Lul6L+e5o6l5a6D5Lus44CCXCIsXG4gIGVkaXQ6IFwi57yW6L6RXCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwi5peg5rOV57yW6L6R576k6ZuG44CCXCIsXG4gIGVkaXRFZGdlOiBcIue8lui+kei/nuaOpee6v1wiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOiBcIuWNleWHu+aOp+WItuiKgueCueW5tuWwhuWug+S7rOaLluWIsOiKgueCueS4iui/nuaOpeOAglwiLFxuICBlZGl0Tm9kZTogXCLnvJbovpHoioLngrlcIixcbn07XG5cbi8vIFVrcmFpbmlhblxuZXhwb3J0IGNvbnN0IHVrOiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOiBcIkvQu9GW0LrQvdGW0YLRjCDQvdCwINCy0ZbQu9GM0L3QtSDQvNGW0YHRhtC1LCDRidC+0LEg0LTQvtC00LDRgtC4INC90L7QstC40Lkg0LLRg9C30L7Quy5cIixcbiAgYWRkRWRnZTogXCLQlNC+0LTQsNGC0Lgg0LrRgNCw0LlcIixcbiAgYWRkTm9kZTogXCLQlNC+0LTQsNGC0Lgg0LLRg9C30L7Qu1wiLFxuICBiYWNrOiBcItCd0LDQt9Cw0LRcIixcbiAgY2xvc2U6IFwi0JfQsNC60YDQuNGC0LhcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcItCd0LUg0LzQvtC20LvQuNCy0L4g0L7QsSfRlNC00L3QsNGC0Lgg0LrRgNCw0Zcg0LIg0LPRgNGD0L/Rgy5cIixcbiAgZGVsOiBcItCS0LjQtNCw0LvQuNGC0Lgg0L7QsdGA0LDQvdC1XCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCLQk9GA0YPQv9C4INC90LUg0LzQvtC20YPRgtGMINCx0YPRgtC4INCy0LjQtNCw0LvQtdC90ZYuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvRltC60L3RltGC0Ywg0L3QsCDQstGD0LfQvtC7INGWINC/0LXRgNC10YLRj9Cz0L3RltGC0Ywg0LrRgNCw0Lkg0LTQviDRltC90YjQvtCz0L4g0LLRg9C30LvQsCwg0YnQvtCxINGX0YUg0Lcn0ZTQtNC90LDRgtC4LlwiLFxuICBlZGl0OiBcItCg0LXQtNCw0LPRg9Cy0LDRgtC4XCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwi0JPRgNGD0L/QuCDQvdC10LTQvtGB0YLRg9C/0L3RliDQtNC70Y8g0YDQtdC00LDQs9GD0LLQsNC90L3Rjy5cIixcbiAgZWRpdEVkZ2U6IFwi0KDQtdC00LDQs9GD0LLQsNGC0Lgg0LrRgNCw0LlcIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvRltC60L3RltGC0Ywg0L3QsCDQutC+0L3RgtGA0L7Qu9GM0L3RliDRgtC+0YfQutC4INGWINC/0LXRgNC10YLRj9Cz0L3RltGC0Ywg0ZfRhSDRgyDQstGD0LfQvtC7LCDRidC+0LEg0L/RltC00LrQu9GO0YfQuNGC0LjRgdGPINC00L4g0L3RjNC+0LPQvi5cIixcbiAgZWRpdE5vZGU6IFwi0KDQtdC00LDQs9GD0LLQsNGC0Lgg0LLRg9C30L7Qu1wiLFxufTtcblxuLy8gRnJlbmNoXG5leHBvcnQgY29uc3QgZnI6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiQ2xpcXVleiBkYW5zIHVuIGVuZHJvaXQgdmlkZSBwb3VyIHBsYWNlciB1biBuxZN1ZC5cIixcbiAgYWRkRWRnZTogXCJBam91dGVyIHVuIGxpZW5cIixcbiAgYWRkTm9kZTogXCJBam91dGVyIHVuIG7Fk3VkXCIsXG4gIGJhY2s6IFwiUmV0b3VyXCIsXG4gIGNsb3NlOiBcIkZlcm1lclwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwiSW1wb3NzaWJsZSBkZSBjcsOpZXIgdW4gbGllbiB2ZXJzIHVuIGNsdXN0ZXIuXCIsXG4gIGRlbDogXCJFZmZhY2VyIGxhIHPDqWxlY3Rpb25cIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIkxlcyBjbHVzdGVycyBuZSBwZXV2ZW50IHBhcyDDqnRyZSBlZmZhY8Opcy5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpcXVleiBzdXIgdW4gbsWTdWQgZXQgZ2xpc3NleiBsZSBsaWVuIHZlcnMgdW4gYXV0cmUgbsWTdWQgcG91ciBsZXMgY29ubmVjdGVyLlwiLFxuICBlZGl0OiBcIsOJZGl0ZXJcIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJMZXMgY2x1c3RlcnMgbmUgcGV1dmVudCBwYXMgw6p0cmUgw6lkaXTDqXMuXCIsXG4gIGVkaXRFZGdlOiBcIsOJZGl0ZXIgbGUgbGllblwiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpcXVleiBzdXIgbGVzIHBvaW50cyBkZSBjb250csO0bGUgZXQgZ2xpc3Nlei1sZXMgcG91ciBjb25uZWN0ZXIgdW4gbsWTdWQuXCIsXG4gIGVkaXROb2RlOiBcIsOJZGl0ZXIgbGUgbsWTdWRcIixcbn07XG5cbi8vIEN6ZWNoXG5leHBvcnQgY29uc3QgY3M6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiS2x1a251dMOtbSBkbyBwcsOhemRuw6lobyBwcm9zdG9ydSBtxa/FvmV0ZSBwxZlpZGF0IG5vdsO9IHZyY2hvbC5cIixcbiAgYWRkRWRnZTogXCJQxZlpZGF0IGhyYW51XCIsXG4gIGFkZE5vZGU6IFwiUMWZaWRhdCB2cmNob2xcIixcbiAgYmFjazogXCJacMSbdFwiLFxuICBjbG9zZTogXCJaYXbFmcOtdFwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwiTmVsemUgcMWZaXBvaml0IGhyYW51IGtlIHNobHVrdS5cIixcbiAgZGVsOiBcIlNtYXphdCB2w71ixJtyXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJOZWx6ZSBtYXphdCBzaGx1a3kuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIlDFmWV0YcW+ZW7DrW0geiBqZWRub2hvIHZyY2hvbHUgZG8gZHJ1aMOpaG8gbcWvxb5ldGUgc3Bvaml0IHR5dG8gdnJjaG9seSBub3ZvdSBocmFub3UuXCIsXG4gIGVkaXQ6IFwiVXByYXZpdFwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIk5lbHplIHVwcmF2b3ZhdCBzaGx1a3kuXCIsXG4gIGVkaXRFZGdlOiBcIlVwcmF2aXQgaHJhbnVcIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIlDFmWV0YcW+ZW7DrW0ga29udHJvbG7DrWhvIHZyY2hvbHUgaHJhbnkgamkgbcWvxb5ldGUgcMWZaXBvaml0IGsgamluw6ltdSB2cmNob2x1LlwiLFxuICBlZGl0Tm9kZTogXCJVcHJhdml0IHZyY2hvbFwiLFxufTtcbiIsICIvKipcbiAqIEFzc29jaWF0ZXMgYSBjYW52YXMgdG8gYSBnaXZlbiBpbWFnZSwgY29udGFpbmluZyBhIG51bWJlciBvZiByZW5kZXJpbmdzXG4gKiBvZiB0aGUgaW1hZ2UgYXQgdmFyaW91cyBzaXplcy5cbiAqXG4gKiBUaGlzIHRlY2huaXF1ZSBpcyBrbm93biBhcyAnbWlwbWFwcGluZycuXG4gKlxuICogTk9URTogSW1hZ2VzIGNhbiBhbHNvIGJlIG9mIHR5cGUgJ2RhdGE6c3ZnK3htbGAuIFRoaXMgY29kZSBhbHNvIHdvcmtzXG4gKiAgICAgICBmb3Igc3ZnLCBidXQgdGhlIG1pcG1hcHBpbmcgbWF5IG5vdCBiZSBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHtJbWFnZX0gaW1hZ2VcbiAqL1xuY2xhc3MgQ2FjaGVkSW1hZ2Uge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5OVU1fSVRFUkFUSU9OUyA9IDQ7IC8vIE51bWJlciBvZiBpdGVtcyBpbiB0aGUgY29vcmRpbmF0ZXMgYXJyYXlcblxuICAgIHRoaXMuaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGltYWdlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAqL1xuICBpbml0KCkge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKCkpIHJldHVybjtcblxuICAgIHRoaXMuc3JjID0gdGhpcy5pbWFnZS5zcmM7IC8vIEZvciBzYW1lIGludGVyZmFjZSB3aXRoIEltYWdlXG4gICAgY29uc3QgdyA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgY29uc3QgaCA9IHRoaXMuaW1hZ2UuaGVpZ2h0O1xuXG4gICAgLy8gRWFzZSBleHRlcm5hbCBhY2Nlc3NcbiAgICB0aGlzLndpZHRoID0gdztcbiAgICB0aGlzLmhlaWdodCA9IGg7XG5cbiAgICBjb25zdCBoMiA9IE1hdGguZmxvb3IoaCAvIDIpO1xuICAgIGNvbnN0IGg0ID0gTWF0aC5mbG9vcihoIC8gNCk7XG4gICAgY29uc3QgaDggPSBNYXRoLmZsb29yKGggLyA4KTtcbiAgICBjb25zdCBoMTYgPSBNYXRoLmZsb29yKGggLyAxNik7XG5cbiAgICBjb25zdCB3MiA9IE1hdGguZmxvb3IodyAvIDIpO1xuICAgIGNvbnN0IHc0ID0gTWF0aC5mbG9vcih3IC8gNCk7XG4gICAgY29uc3QgdzggPSBNYXRoLmZsb29yKHcgLyA4KTtcbiAgICBjb25zdCB3MTYgPSBNYXRoLmZsb29yKHcgLyAxNik7XG5cbiAgICAvLyBNYWtlIGNhbnZhcyBhcyBzbWFsbCBhcyBwb3NzaWJsZVxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gMyAqIHc0O1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGgyO1xuXG4gICAgLy8gQ29vcmRpbmF0ZXMgYW5kIHNpemVzIG9mIGltYWdlcyBjb250YWluZWQgaW4gdGhlIGNhbnZhc1xuICAgIC8vIFZhbHVlcyBwZXIgcm93OiAgW3RvcCB4LCBsZWZ0IHksIHdpZHRoLCBoZWlnaHRdXG5cbiAgICB0aGlzLmNvb3JkaW5hdGVzID0gW1xuICAgICAgWzAsIDAsIHcyLCBoMl0sXG4gICAgICBbdzIsIDAsIHc0LCBoNF0sXG4gICAgICBbdzIsIGg0LCB3OCwgaDhdLFxuICAgICAgWzUgKiB3OCwgaDQsIHcxNiwgaDE2XSxcbiAgICBdO1xuXG4gICAgdGhpcy5fZmlsbE1pcE1hcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGluaXQoKSBoYXMgYmVlbiBjYWxsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGluaXRpYWxpemVkKCkge1xuICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGVzICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IG1haW4gaW1hZ2UgaW4gdmFyaW91cyBzaXplcyB0byB0aGUgY29udGV4dC5cbiAgICpcbiAgICogVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBpcyB0byByZWR1Y2UgYXJ0ZWZhY3RzIGR1ZSB0byBpbnRlcnBvbGF0aW9uXG4gICAqIGF0IGRpZmZlcmluZyB6b29tIGxldmVscy5cbiAgICpcbiAgICogU291cmNlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xODc2MTQwNC8xMjIzNTMxXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kcyB0YWtlcyB0aGUgcmVzaXppbmcgb3V0IG9mIHRoZSBkcmF3aW5nIGxvb3AsIGluIG9yZGVyIHRvXG4gICAqIHJlZHVjZSBwZXJmb3JtYW5jZSBvdmVyaGVhZC5cbiAgICpcbiAgICogVE9ETzogVGhlIGNvZGUgYXNzdW1lcyB0aGF0IGEgMkQgY29udGV4dCBjYW4gYWx3YXlzIGJlIGdvdHRlbi4gVGhpcyBpc1xuICAgKiAgICAgICBub3QgbmVjZXNzYXJpbHkgdHJ1ZSEgT1RPSCwgaWYgbm90IHRydWUgdGhlbiB1c2FnZSBvZiB0aGlzIGNsYXNzXG4gICAqICAgICAgIGlzIHNlbnNlbGVzcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9maWxsTWlwTWFwKCkge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcblxuICAgIC8vIEZpcnN0IHpvb20tbGV2ZWwgY29tZXMgZnJvbSB0aGUgaW1hZ2VcbiAgICBjb25zdCB0byA9IHRoaXMuY29vcmRpbmF0ZXNbMF07XG4gICAgY3R4LmRyYXdJbWFnZSh0aGlzLmltYWdlLCB0b1swXSwgdG9bMV0sIHRvWzJdLCB0b1szXSk7XG5cbiAgICAvLyBUaGUgcmVzdCBhcmUgY29weSBhY3Rpb25zIGludGVybmFsIHRvIHRoZSBjYW52YXMvY29udGV4dFxuICAgIGZvciAobGV0IGl0ZXJhdGlvbnMgPSAxOyBpdGVyYXRpb25zIDwgdGhpcy5OVU1fSVRFUkFUSU9OUzsgaXRlcmF0aW9ucysrKSB7XG4gICAgICBjb25zdCBmcm9tID0gdGhpcy5jb29yZGluYXRlc1tpdGVyYXRpb25zIC0gMV07XG4gICAgICBjb25zdCB0byA9IHRoaXMuY29vcmRpbmF0ZXNbaXRlcmF0aW9uc107XG5cbiAgICAgIGN0eC5kcmF3SW1hZ2UoXG4gICAgICAgIHRoaXMuY2FudmFzLFxuICAgICAgICBmcm9tWzBdLFxuICAgICAgICBmcm9tWzFdLFxuICAgICAgICBmcm9tWzJdLFxuICAgICAgICBmcm9tWzNdLFxuICAgICAgICB0b1swXSxcbiAgICAgICAgdG9bMV0sXG4gICAgICAgIHRvWzJdLFxuICAgICAgICB0b1szXVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHJhdyB0aGUgaW1hZ2UsIHVzaW5nIHRoZSBtaXBtYXAgaWYgbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBNaXBNYXAgaXMgb25seSB1c2VkIGlmIHBhcmFtIGZhY3RvciA+IDI7IG90aGVyd2lzZSwgb3JpZ2luYWwgYml0bWFwXG4gICAqIGlzIHJlc2l6ZWQuIFRoaXMgaXMgYWxzbyB1c2VkIHRvIHNraXAgbWlwbWFwIHVzYWdlLCBlLmcuIGJ5IHNldHRpbmcgZmFjdG9yID0gMVxuICAgKlxuICAgKiBDcmVkaXRzIHRvICdBbGV4IGRlIE11bGRlcicgZm9yIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4ICBjb250ZXh0IG9uIHdoaWNoIHRvIGRyYXcgem9vbWVkIGltYWdlXG4gICAqIEBwYXJhbSB7RmxvYXR9IGZhY3RvciBzY2FsZSBmYWN0b3IgYXQgd2hpY2ggdG8gZHJhd1xuICAgKiBAcGFyYW0ge251bWJlcn0gbGVmdFxuICAgKiBAcGFyYW0ge251bWJlcn0gdG9wXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XG4gICAqL1xuICBkcmF3SW1hZ2VBdFBvc2l0aW9uKGN0eCwgZmFjdG9yLCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQoKSkgcmV0dXJuOyAvL2Nhbid0IGRyYXcgaW1hZ2UgeWV0IG5vdCBpbnRpYWxpemVkXG5cbiAgICBpZiAoZmFjdG9yID4gMikge1xuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHpvb21lZCBpbWFnZSB0byB1c2VcbiAgICAgIGZhY3RvciAqPSAwLjU7XG4gICAgICBsZXQgaXRlcmF0aW9ucyA9IDA7XG4gICAgICB3aGlsZSAoZmFjdG9yID4gMiAmJiBpdGVyYXRpb25zIDwgdGhpcy5OVU1fSVRFUkFUSU9OUykge1xuICAgICAgICBmYWN0b3IgKj0gMC41O1xuICAgICAgICBpdGVyYXRpb25zICs9IDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVyYXRpb25zID49IHRoaXMuTlVNX0lURVJBVElPTlMpIHtcbiAgICAgICAgaXRlcmF0aW9ucyA9IHRoaXMuTlVNX0lURVJBVElPTlMgLSAxO1xuICAgICAgfVxuICAgICAgLy9jb25zb2xlLmxvZyhcIml0ZXJhdGlvbnM6IFwiICsgaXRlcmF0aW9ucyk7XG5cbiAgICAgIGNvbnN0IGZyb20gPSB0aGlzLmNvb3JkaW5hdGVzW2l0ZXJhdGlvbnNdO1xuICAgICAgY3R4LmRyYXdJbWFnZShcbiAgICAgICAgdGhpcy5jYW52YXMsXG4gICAgICAgIGZyb21bMF0sXG4gICAgICAgIGZyb21bMV0sXG4gICAgICAgIGZyb21bMl0sXG4gICAgICAgIGZyb21bM10sXG4gICAgICAgIGxlZnQsXG4gICAgICAgIHRvcCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRHJhdyBpbWFnZSBkaXJlY3RseVxuICAgICAgY3R4LmRyYXdJbWFnZSh0aGlzLmltYWdlLCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYWNoZWRJbWFnZTtcbiIsICJpbXBvcnQgQ2FjaGVkSW1hZ2UgZnJvbSBcIi4vQ2FjaGVkSW1hZ2VcIjtcblxuLyoqXG4gKiBUaGlzIGNhbGxiYWNrIGlzIGEgY2FsbGJhY2sgdGhhdCBhY2NlcHRzIGFuIEltYWdlLlxuICpcbiAqIEBjYWxsYmFjayBJbWFnZUNhbGxiYWNrXG4gKiBAcGFyYW0ge0ltYWdlfSBpbWFnZVxuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyBsb2FkcyBpbWFnZXMgYW5kIGtlZXBzIHRoZW0gc3RvcmVkLlxuICpcbiAqIEBwYXJhbSB7SW1hZ2VDYWxsYmFja30gY2FsbGJhY2tcbiAqL1xuY2xhc3MgSW1hZ2VzIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7SW1hZ2VDYWxsYmFja30gY2FsbGJhY2tcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5pbWFnZXMgPSB7fTtcbiAgICB0aGlzLmltYWdlQnJva2VuID0ge307XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgICAgICAgICAgICAgICAgICAgICAgVGhlIG9yaWdpbmFsIFVybCB0aGF0IGZhaWxlZCB0byBsb2FkLCBpZiB0aGUgYnJva2VuIGltYWdlIGlzIHN1Y2Nlc3NmdWxseSBsb2FkZWQgaXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgY2FjaGUgdXNpbmcgdGhpcyBVcmwgYXMgdGhlIGtleSBzbyB0aGF0IHN1YnNlcXVlbnQgcmVxdWVzdHMgZm9yIHRoaXMgVXJsIHdpbGwgcmV0dXJuIHRoZSBicm9rZW4gaW1hZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJyb2tlblVybCAgICAgICAgICAgICAgICBVcmwgdGhlIGJyb2tlbiBpbWFnZSB0byB0cnkgYW5kIGxvYWRcbiAgICogQHBhcmFtIHtJbWFnZX0gaW1hZ2VUb0xvYWRCcm9rZW5VcmxPbiAgIFRoZSBpbWFnZSBvYmplY3RcbiAgICovXG4gIF90cnlsb2FkQnJva2VuVXJsKHVybCwgYnJva2VuVXJsLCBpbWFnZVRvTG9hZEJyb2tlblVybE9uKSB7XG4gICAgLy9JZiB0aGVzZSBwYXJhbWV0ZXJzIGFyZW4ndCBzcGVjaWZpZWQgdGhlbiBleGl0IHRoZSBmdW5jdGlvbiBiZWNhdXNlIG5vdGhpbmcgY29uc3RydWN0aXZlIGNhbiBiZSBkb25lXG4gICAgaWYgKHVybCA9PT0gdW5kZWZpbmVkIHx8IGltYWdlVG9Mb2FkQnJva2VuVXJsT24gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIGlmIChicm9rZW5VcmwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFwiTm8gYnJva2VuIHVybCBpbWFnZSBkZWZpbmVkXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vQ2xlYXIgdGhlIG9sZCBzdWJzY3JpcHRpb24gdG8gdGhlIGVycm9yIGV2ZW50IGFuZCBwdXQgYSBuZXcgaW4gcGxhY2UgdGhhdCBvbmx5IGhhbmRsZSBlcnJvcnMgaW4gbG9hZGluZyB0aGUgYnJva2VuSW1hZ2VVcmxcbiAgICBpbWFnZVRvTG9hZEJyb2tlblVybE9uLmltYWdlLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgYnJva2VuSW1hZ2U6XCIsIGJyb2tlblVybCk7XG4gICAgICAvLyBjYWNoZSBpdGVtIHdpbGwgY29udGFpbiBlbXB0eSBpbWFnZSwgdGhpcyBzaG91bGQgYmUgT0sgZm9yIGRlZmF1bHRcbiAgICB9O1xuXG4gICAgLy9TZXQgdGhlIHNvdXJjZSBvZiB0aGUgaW1hZ2UgdG8gdGhlIGJyb2tlblVybCwgdGhpcyBpcyBhY3R1YWxseSB3aGF0IGtpY2tzIG9mZiB0aGUgbG9hZGluZyBvZiB0aGUgYnJva2VuIGltYWdlXG4gICAgaW1hZ2VUb0xvYWRCcm9rZW5VcmxPbi5pbWFnZS5zcmMgPSBicm9rZW5Vcmw7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHt2aXMuSW1hZ2V9IGltYWdlVG9SZWRyYXdXaXRoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVkcmF3V2l0aEltYWdlKGltYWdlVG9SZWRyYXdXaXRoKSB7XG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2soaW1hZ2VUb1JlZHJhd1dpdGgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsICAgICAgICAgIFVybCBvZiB0aGUgaW1hZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJyb2tlblVybCAgICBVcmwgb2YgYW4gaW1hZ2UgdG8gdXNlIGlmIHRoZSB1cmwgaW1hZ2UgaXMgbm90IGZvdW5kXG4gICAqIEByZXR1cm5zIHtJbWFnZX0gaW1nICAgICAgICAgIFRoZSBpbWFnZSBvYmplY3RcbiAgICovXG4gIGxvYWQodXJsLCBicm9rZW5VcmwpIHtcbiAgICAvL1RyeSBhbmQgZ2V0IHRoZSBpbWFnZSBmcm9tIHRoZSBjYWNoZSwgaWYgc3VjY2Vzc2Z1bCB0aGVuIHJldHVybiB0aGUgY2FjaGVkIGltYWdlXG4gICAgY29uc3QgY2FjaGVkSW1hZ2UgPSB0aGlzLmltYWdlc1t1cmxdO1xuICAgIGlmIChjYWNoZWRJbWFnZSkgcmV0dXJuIGNhY2hlZEltYWdlO1xuXG4gICAgLy9DcmVhdGUgYSBuZXcgaW1hZ2VcbiAgICBjb25zdCBpbWcgPSBuZXcgQ2FjaGVkSW1hZ2UoKTtcblxuICAgIC8vIE5lZWQgdG8gYWRkIHRvIGNhY2hlIGhlcmUsIG90aGVyd2lzZSBmaW5hbCByZXR1cm4gd2lsbCBzcGF3biBkaWZmZXJlbnQgY29waWVzIG9mIHRoZSBzYW1lIGltYWdlLFxuICAgIC8vIEFsc28sIHRoZXJlIHdpbGwgYmUgbXVsdGlwbGUgbG9hZHMgb2YgdGhlIHNhbWUgaW1hZ2UuXG4gICAgdGhpcy5pbWFnZXNbdXJsXSA9IGltZztcblxuICAgIC8vU3Vic2NyaWJlIHRvIHRoZSBldmVudCB0aGF0IGlzIHJhaXNlZCBpZiB0aGUgaW1hZ2UgbG9hZHMgc3VjY2Vzc2Z1bGx5XG4gICAgaW1nLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIC8vIFByb3Blcmx5IGluaXQgdGhlIGNhY2hlZCBpdGVtIGFuZCB0aGVuIHJlcXVlc3QgYSByZWRyYXdcbiAgICAgIHRoaXMuX2ZpeEltYWdlQ29vcmRpbmF0ZXMoaW1nLmltYWdlKTtcbiAgICAgIGltZy5pbml0KCk7XG4gICAgICB0aGlzLl9yZWRyYXdXaXRoSW1hZ2UoaW1nKTtcbiAgICB9O1xuXG4gICAgLy9TdWJzY3JpYmUgdG8gdGhlIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGlmIHRoZSBpbWFnZSBmYWlscyB0byBsb2FkXG4gICAgaW1nLmltYWdlLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgaW1hZ2U6XCIsIHVybCk7XG4gICAgICAvL1RyeSBhbmQgbG9hZCB0aGUgaW1hZ2Ugc3BlY2lmaWVkIGJ5IHRoZSBicm9rZW5VcmwgdXNpbmdcbiAgICAgIHRoaXMuX3RyeWxvYWRCcm9rZW5VcmwodXJsLCBicm9rZW5VcmwsIGltZyk7XG4gICAgfTtcblxuICAgIC8vU2V0IHRoZSBzb3VyY2Ugb2YgdGhlIGltYWdlIHRvIHRoZSB1cmwsIHRoaXMgaXMgd2hhdCBhY3R1YWxseSBraWNrcyBvZmYgdGhlIGxvYWRpbmcgb2YgdGhlIGltYWdlXG4gICAgaW1nLmltYWdlLnNyYyA9IHVybDtcblxuICAgIC8vUmV0dXJuIHRoZSBuZXcgaW1hZ2VcbiAgICByZXR1cm4gaW1nO1xuICB9XG5cbiAgLyoqXG4gICAqIElFMTEgZml4IC0tIHRoYW5rcyBkcG9uY2ghXG4gICAqXG4gICAqIExvY2FsIGhlbHBlciBmdW5jdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5JbWFnZX0gaW1hZ2VUb0NhY2hlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZml4SW1hZ2VDb29yZGluYXRlcyhpbWFnZVRvQ2FjaGUpIHtcbiAgICBpZiAoaW1hZ2VUb0NhY2hlLndpZHRoID09PSAwKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGltYWdlVG9DYWNoZSk7XG4gICAgICBpbWFnZVRvQ2FjaGUud2lkdGggPSBpbWFnZVRvQ2FjaGUub2Zmc2V0V2lkdGg7XG4gICAgICBpbWFnZVRvQ2FjaGUuaGVpZ2h0ID0gaW1hZ2VUb0NhY2hlLm9mZnNldEhlaWdodDtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW1hZ2VUb0NhY2hlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VzO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIEZGMjYtIGJ1ZzogQXJyYXlCdWZmZXJzIGFyZSBub24tZXh0ZW5zaWJsZSwgYnV0IE9iamVjdC5pc0V4dGVuc2libGUgZG9lcyBub3QgcmVwb3J0IGl0XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoYnVmZmVyKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1ZmZlciwgJ2EnLCB7IHZhbHVlOiA4IH0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSAtLSBzYWZlXG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgJGlzRXh0ZW5zaWJsZSgxKTsgfSk7XG5cbi8vIGBPYmplY3QuaXNFeHRlbnNpYmxlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmlzZXh0ZW5zaWJsZVxubW9kdWxlLmV4cG9ydHMgPSAoRkFJTFNfT05fUFJJTUlUSVZFUyB8fCBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUpID8gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgJiYgY2xhc3NvZihpdCkgPT09ICdBcnJheUJ1ZmZlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWU7XG59IDogJGlzRXh0ZW5zaWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LXByZXZlbnRleHRlbnNpb25zIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGlzRXh0ZW5zaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xuXG52YXIgUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBNRVRBREFUQSA9IHVpZCgnbWV0YScpO1xudmFyIGlkID0gMDtcblxudmFyIHNldE1ldGFkYXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIGRlZmluZVByb3BlcnR5KGl0LCBNRVRBREFUQSwgeyB2YWx1ZToge1xuICAgIG9iamVjdElEOiAnTycgKyBpZCsrLCAvLyBvYmplY3QgSURcbiAgICB3ZWFrRGF0YToge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG5cbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIGEgcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBREFUQV0ub2JqZWN0SUQ7XG59O1xuXG52YXIgZ2V0V2Vha0RhdGEgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIHRoZSBzdG9yZSBvZiB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBREFUQV0ud2Vha0RhdGE7XG59O1xuXG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpJTkcgJiYgUkVRVUlSRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzT3duKGl0LCBNRVRBREFUQSkpIHNldE1ldGFkYXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxudmFyIGVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgbWV0YS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4gIFJFUVVJUkVEID0gdHJ1ZTtcbiAgdmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmY7XG4gIHZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xuICB2YXIgdGVzdCA9IHt9O1xuICB0ZXN0W01FVEFEQVRBXSA9IDE7XG5cbiAgLy8gcHJldmVudCBleHBvc2luZyBvZiBtZXRhZGF0YSBrZXlcbiAgaWYgKGdldE93blByb3BlcnR5TmFtZXModGVzdCkubGVuZ3RoKSB7XG4gICAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZXN1bHRbaV0gPT09IE1FVEFEQVRBKSB7XG4gICAgICAgICAgc3BsaWNlKHJlc3VsdCwgaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUuZlxuICAgIH0pO1xuICB9XG59O1xuXG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBlbmFibGU6IGVuYWJsZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2Vha0RhdGE6IGdldFdlYWtEYXRhLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG5cbmhpZGRlbktleXNbTUVUQURBVEFdID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIFJlc3VsdFByb3RvdHlwZSA9IFJlc3VsdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19SRUNPUkQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfUkVDT1JEKTtcbiAgdmFyIElTX0lURVJBVE9SID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX0lURVJBVE9SKTtcbiAgdmFyIElOVEVSUlVQVEVEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklOVEVSUlVQVEVEKTtcbiAgdmFyIGZuID0gYmluZCh1bmJvdW5kRnVuY3Rpb24sIHRoYXQpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIHZhciBzdG9wID0gZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuICAgIGlmIChpdGVyYXRvcikgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgY29uZGl0aW9uKTtcbiAgfTtcblxuICB2YXIgY2FsbEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKEFTX0VOVFJJRVMpIHtcbiAgICAgIGFuT2JqZWN0KHZhbHVlKTtcbiAgICAgIHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSwgc3RvcCkgOiBmbih2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgIH0gcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWUsIHN0b3ApIDogZm4odmFsdWUpO1xuICB9O1xuXG4gIGlmIChJU19SRUNPUkQpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlLml0ZXJhdG9yO1xuICB9IGVsc2UgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKCFpdGVyRm4pIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0ZXJhYmxlKSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVyYWJsZSk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUsIGl0ZXJGbik7XG4gIH1cblxuICBuZXh0ID0gSVNfUkVDT1JEID8gaXRlcmFibGUubmV4dCA6IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsRm4oc3RlcC52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFByb3RvdHlwZSkge1xuICBpZiAoaXNQcm90b3R5cGVPZihQcm90b3R5cGUsIGl0KSkgcmV0dXJuIGl0O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcignSW5jb3JyZWN0IGludm9jYXRpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SX05BTUVdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICB2YXIgZXhwb3J0ZWQgPSB7fTtcbiAgdmFyIENvbnN0cnVjdG9yO1xuXG4gIGlmICghREVTQ1JJUFRPUlMgfHwgIWlzQ2FsbGFibGUoTmF0aXZlQ29uc3RydWN0b3IpXG4gICAgfHwgIShJU19XRUFLIHx8IE5hdGl2ZVByb3RvdHlwZS5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLmVudHJpZXMoKS5uZXh0KCk7IH0pKVxuICApIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIENvbnN0cnVjdG9yID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpO1xuICAgIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIH0gZWxzZSB7XG4gICAgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKGFuSW5zdGFuY2UodGFyZ2V0LCBQcm90b3R5cGUpLCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGNvbGxlY3Rpb246IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0YXJnZXRbQURERVJdLCB7IHRoYXQ6IHRhcmdldCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIGZvckVhY2goWydhZGQnLCAnY2xlYXInLCAnZGVsZXRlJywgJ2ZvckVhY2gnLCAnZ2V0JywgJ2hhcycsICdzZXQnLCAna2V5cycsICd2YWx1ZXMnLCAnZW50cmllcyddLCBmdW5jdGlvbiAoS0VZKSB7XG4gICAgICB2YXIgSVNfQURERVIgPSBLRVkgPT09ICdhZGQnIHx8IEtFWSA9PT0gJ3NldCc7XG4gICAgICBpZiAoS0VZIGluIE5hdGl2ZVByb3RvdHlwZSAmJiAhKElTX1dFQUsgJiYgS0VZID09PSAnY2xlYXInKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUHJvdG90eXBlLCBLRVksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb247XG4gICAgICAgICAgaWYgKCFJU19BRERFUiAmJiBJU19XRUFLICYmICFpc09iamVjdChhKSkgcmV0dXJuIEtFWSA9PT0gJ2dldCcgPyB1bmRlZmluZWQgOiBmYWxzZTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gY29sbGVjdGlvbltLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgICAgcmV0dXJuIElTX0FEREVSID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBJU19XRUFLIHx8IGRlZmluZVByb3BlcnR5KFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuY29sbGVjdGlvbi5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZhbHNlLCB0cnVlKTtcblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwgZXhwb3J0ZWQpO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgb3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bnNhZmUgJiYgdGFyZ2V0W2tleV0pIHRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgZWxzZSBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLmZhc3RLZXk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIFByb3RvdHlwZSk7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgaW5kZXg6IGNyZWF0ZShudWxsKSxcbiAgICAgICAgZmlyc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMpIHRoYXQuc2l6ZSA9IDA7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlbW92ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RhdGUuZmlyc3QpIHN0YXRlLmZpcnN0ID0gZW50cnk7XG4gICAgICAgIGlmIChwcmV2aW91cykgcHJldmlvdXMubmV4dCA9IGVudHJ5O1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUrKztcbiAgICAgICAgZWxzZSB0aGF0LnNpemUrKztcbiAgICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSBzdGF0ZS5pbmRleFtpbmRleF0gPSBlbnRyeTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIHZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAvLyBmYXN0IGNhc2VcbiAgICAgIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgICAgIHZhciBlbnRyeTtcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gc3RhdGUuaW5kZXhbaW5kZXhdO1xuICAgICAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gICAgICBmb3IgKGVudHJ5ID0gc3RhdGUuZmlyc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm5leHQpIHtcbiAgICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5KSByZXR1cm4gZW50cnk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwge1xuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuY2xlYXIoKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmNsZWFyXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZGF0YSA9IHN0YXRlLmluZGV4O1xuICAgICAgICB2YXIgZW50cnkgPSBzdGF0ZS5maXJzdDtcbiAgICAgICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnByZXZpb3VzKSBlbnRyeS5wcmV2aW91cyA9IGVudHJ5LnByZXZpb3VzLm5leHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5maXJzdCA9IHN0YXRlLmxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSA9IDA7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgICBkZWxldGUgc3RhdGUuaW5kZXhbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnByZXZpb3VzID0gcHJldjtcbiAgICAgICAgICBpZiAoc3RhdGUuZmlyc3QgPT09IGVudHJ5KSBzdGF0ZS5maXJzdCA9IG5leHQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApIHtcbiAgICB2YXIgSVRFUkFUT1JfTkFNRSA9IENPTlNUUlVDVE9SX05BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICB2YXIgZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuICAgIHZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKElURVJBVE9SX05BTUUpO1xuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLnsga2V5cywgdmFsdWVzLCBlbnRyaWVzLCBAQGl0ZXJhdG9yIH0oKWAgbWV0aG9kc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgZGVmaW5lSXRlcmF0b3IoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICAgIHR5cGU6IElURVJBVE9SX05BTUUsXG4gICAgICAgIHRhcmdldDogaXRlcmF0ZWQsXG4gICAgICAgIHN0YXRlOiBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZShpdGVyYXRlZCksXG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICAgICAgdmFyIGVudHJ5ID0gc3RhdGUubGFzdDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCFzdGF0ZS50YXJnZXQgfHwgIShzdGF0ZS5sYXN0ID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5zdGF0ZS5maXJzdCkpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT09ICdrZXlzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkua2V5LCBmYWxzZSk7XG4gICAgICBpZiAoa2luZCA9PT0gJ3ZhbHVlcycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LnZhbHVlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbZW50cnkua2V5LCBlbnRyeS52YWx1ZV0sIGZhbHNlKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZVtAQHNwZWNpZXNdYCBhY2Nlc3NvcnNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1tYXAtQEBzcGVjaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtc2V0LUBAc3BlY2llc1xuICAgIHNldFNwZWNpZXMoQ09OU1RSVUNUT1JfTkFNRSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYE1hcGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLW9iamVjdHNcbmNvbGxlY3Rpb24oJ01hcCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXAnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk1hcDtcbiIsICIvKipcbiAqIFRoaXMgY2xhc3MgY2FuIHN0b3JlIGdyb3VwcyBhbmQgb3B0aW9ucyBzcGVjaWZpYyBmb3IgZ3JvdXBzLlxuICovXG5leHBvcnQgY2xhc3MgR3JvdXBzIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLl9kZWZhdWx0SW5kZXggPSAwO1xuICAgIHRoaXMuX2dyb3VwSW5kZXggPSAwO1xuXG4gICAgdGhpcy5fZGVmYXVsdEdyb3VwcyA9IFtcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiMyQjdDRTlcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjOTdDMkZDXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiIzJCN0NFOVwiLCBiYWNrZ3JvdW5kOiBcIiNEMkU1RkZcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiIzJCN0NFOVwiLCBiYWNrZ3JvdW5kOiBcIiNEMkU1RkZcIiB9LFxuICAgICAgfSwgLy8gMDogYmx1ZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0ZGQTUwMFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRkZGMDBcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRkZBNTAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGRkZBM1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRkZBNTAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGRkZBM1wiIH0sXG4gICAgICB9LCAvLyAxOiB5ZWxsb3dcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNGQTBBMTBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkI3RTgxXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0ZBMEExMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRkFGQjFcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0ZBMEExMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRkFGQjFcIiB9LFxuICAgICAgfSwgLy8gMjogcmVkXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjNDFBOTA2XCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzdCRTE0MVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiM0MUE5MDZcIiwgYmFja2dyb3VuZDogXCIjQTFFQzc2XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiM0MUE5MDZcIiwgYmFja2dyb3VuZDogXCIjQTFFQzc2XCIgfSxcbiAgICAgIH0sIC8vIDM6IGdyZWVuXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjRTEyOUYwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0VCN0RGNFwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNFMTI5RjBcIiwgYmFja2dyb3VuZDogXCIjRjBCM0Y1XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNFMTI5RjBcIiwgYmFja2dyb3VuZDogXCIjRjBCM0Y1XCIgfSxcbiAgICAgIH0sIC8vIDQ6IG1hZ2VudGFcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiM3QzI5RjBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjQUQ4NUU0XCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiIzdDMjlGMFwiLCBiYWNrZ3JvdW5kOiBcIiNEM0JERjBcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiIzdDMjlGMFwiLCBiYWNrZ3JvdW5kOiBcIiNEM0JERjBcIiB9LFxuICAgICAgfSwgLy8gNTogcHVycGxlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjQzM3RjAwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0ZGQTgwN1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNDMzdGMDBcIiwgYmFja2dyb3VuZDogXCIjRkZDQTY2XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNDMzdGMDBcIiwgYmFja2dyb3VuZDogXCIjRkZDQTY2XCIgfSxcbiAgICAgIH0sIC8vIDY6IG9yYW5nZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzQyMjBGQlwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM2RTZFRkRcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjNDIyMEZCXCIsIGJhY2tncm91bmQ6IFwiIzlCOUJGRFwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjNDIyMEZCXCIsIGJhY2tncm91bmQ6IFwiIzlCOUJGRFwiIH0sXG4gICAgICB9LCAvLyA3OiBkYXJrYmx1ZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0ZENUE3N1wiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRkMwQ0JcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRkQ1QTc3XCIsIGJhY2tncm91bmQ6IFwiI0ZGRDFEOVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRkQ1QTc3XCIsIGJhY2tncm91bmQ6IFwiI0ZGRDFEOVwiIH0sXG4gICAgICB9LCAvLyA4OiBwaW5rXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjNEFENjNBXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0MyRkFCQ1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiM0QUQ2M0FcIiwgYmFja2dyb3VuZDogXCIjRTZGRkUzXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiM0QUQ2M0FcIiwgYmFja2dyb3VuZDogXCIjRTZGRkUzXCIgfSxcbiAgICAgIH0sIC8vIDk6IG1pbnRcblxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzk5MDAwMFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNFRTAwMDBcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjQkIwMDAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGMzMzM1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjQkIwMDAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGMzMzM1wiIH0sXG4gICAgICB9LCAvLyAxMDpicmlnaHQgcmVkXG5cbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNGRjYwMDBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkY2MDAwXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0ZGNjAwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjYwMDBcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0ZGNjAwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjYwMDBcIiB9LFxuICAgICAgfSwgLy8gMTI6IHJlYWwgb3JhbmdlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjOTdDMkZDXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzJCN0NFOVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNEMkU1RkZcIiwgYmFja2dyb3VuZDogXCIjMkI3Q0U5XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNEMkU1RkZcIiwgYmFja2dyb3VuZDogXCIjMkI3Q0U5XCIgfSxcbiAgICAgIH0sIC8vIDEzOiBibHVlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjMzk5NjA1XCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzI1NUMwM1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiMzOTk2MDVcIiwgYmFja2dyb3VuZDogXCIjMjU1QzAzXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiMzOTk2MDVcIiwgYmFja2dyb3VuZDogXCIjMjU1QzAzXCIgfSxcbiAgICAgIH0sIC8vIDE0OiBncmVlblxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0I3MDA1NFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRjAwN0VcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjQjcwMDU0XCIsIGJhY2tncm91bmQ6IFwiI0ZGMDA3RVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjQjcwMDU0XCIsIGJhY2tncm91bmQ6IFwiI0ZGMDA3RVwiIH0sXG4gICAgICB9LCAvLyAxNTogbWFnZW50YVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0FEODVFNFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM3QzI5RjBcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRDNCREYwXCIsIGJhY2tncm91bmQ6IFwiIzdDMjlGMFwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRDNCREYwXCIsIGJhY2tncm91bmQ6IFwiIzdDMjlGMFwiIH0sXG4gICAgICB9LCAvLyAxNjogcHVycGxlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjNDU1N0ZBXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzAwMEVBMVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiM2RTZFRkRcIiwgYmFja2dyb3VuZDogXCIjMDAwRUExXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiM2RTZFRkRcIiwgYmFja2dyb3VuZDogXCIjMDAwRUExXCIgfSxcbiAgICAgIH0sIC8vIDE3OiBkYXJrYmx1ZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0ZGQzBDQlwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRDVBNzdcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRkZEMUQ5XCIsIGJhY2tncm91bmQ6IFwiI0ZENUE3N1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRkZEMUQ5XCIsIGJhY2tncm91bmQ6IFwiI0ZENUE3N1wiIH0sXG4gICAgICB9LCAvLyAxODogcGlua1xuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0MyRkFCQ1wiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM3NEQ2NkFcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRTZGRkUzXCIsIGJhY2tncm91bmQ6IFwiIzc0RDY2QVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRTZGRkUzXCIsIGJhY2tncm91bmQ6IFwiIzc0RDY2QVwiIH0sXG4gICAgICB9LCAvLyAxOTogbWludFxuXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjRUUwMDAwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzk5MDAwMFwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNGRjMzMzNcIiwgYmFja2dyb3VuZDogXCIjQkIwMDAwXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNGRjMzMzNcIiwgYmFja2dyb3VuZDogXCIjQkIwMDAwXCIgfSxcbiAgICAgIH0sIC8vIDIwOmJyaWdodCByZWRcbiAgICBdO1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIHVzZURlZmF1bHRHcm91cHM6IHRydWUsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGNvbnN0IG9wdGlvbkZpZWxkcyA9IFtcInVzZURlZmF1bHRHcm91cHNcIl07XG5cbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IGdyb3VwTmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgZ3JvdXBOYW1lKSkge1xuICAgICAgICAgIGlmIChvcHRpb25GaWVsZHMuaW5kZXhPZihncm91cE5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25zW2dyb3VwTmFtZV07XG4gICAgICAgICAgICB0aGlzLmFkZChncm91cE5hbWUsIGdyb3VwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGdyb3Vwc1xuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5fZ3JvdXBzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX2dyb3VwTmFtZXMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZ3JvdXAgb3B0aW9ucyBvZiBhIGdyb3VwbmFtZS5cbiAgICogSWYgZ3JvdXBuYW1lIGlzIG5vdCBmb3VuZCwgYSBuZXcgZ3JvdXAgbWF5IGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gICAgICAgZ3JvdXBuYW1lICAgICBDYW4gYmUgYSBudW1iZXIsIHN0cmluZywgRGF0ZSwgZXRjLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaG91bGRDcmVhdGU9dHJ1ZV0gSWYgdHJ1ZSwgY3JlYXRlIGEgbmV3IGdyb3VwXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBmb3VuZCBvciBjcmVhdGVkIGdyb3VwXG4gICAqL1xuICBnZXQoZ3JvdXBuYW1lLCBzaG91bGRDcmVhdGUgPSB0cnVlKSB7XG4gICAgbGV0IGdyb3VwID0gdGhpcy5fZ3JvdXBzLmdldChncm91cG5hbWUpO1xuXG4gICAgaWYgKGdyb3VwID09PSB1bmRlZmluZWQgJiYgc2hvdWxkQ3JlYXRlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMub3B0aW9ucy51c2VEZWZhdWx0R3JvdXBzID09PSBmYWxzZSAmJlxuICAgICAgICB0aGlzLl9ncm91cE5hbWVzLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICAvLyBjcmVhdGUgbmV3IGdyb3VwXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZ3JvdXBJbmRleCAlIHRoaXMuX2dyb3VwTmFtZXMubGVuZ3RoO1xuICAgICAgICArK3RoaXMuX2dyb3VwSW5kZXg7XG4gICAgICAgIGdyb3VwID0ge307XG4gICAgICAgIGdyb3VwLmNvbG9yID0gdGhpcy5fZ3JvdXBzLmdldCh0aGlzLl9ncm91cE5hbWVzW2luZGV4XSk7XG4gICAgICAgIHRoaXMuX2dyb3Vwcy5zZXQoZ3JvdXBuYW1lLCBncm91cCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgbmV3IGdyb3VwXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZGVmYXVsdEluZGV4ICUgdGhpcy5fZGVmYXVsdEdyb3Vwcy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRJbmRleCsrO1xuICAgICAgICBncm91cCA9IHt9O1xuICAgICAgICBncm91cC5jb2xvciA9IHRoaXMuX2RlZmF1bHRHcm91cHNbaW5kZXhdO1xuICAgICAgICB0aGlzLl9ncm91cHMuc2V0KGdyb3VwbmFtZSwgZ3JvdXApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgY3VzdG9tIGdyb3VwIHN0eWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXBOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGdyb3VwLCBhIG5ldyBncm91cCB3aWxsIGJlXG4gICAqIGNyZWF0ZWQgaWYgYSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgZG9lc24ndCBleGlzdCwgb3RoZXJ3aXNlIHRoZSBvbGRcbiAgICogZ3JvdXBzIHN0eWxlIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZSAtIEFuIG9iamVjdCBjb250YWluaW5nIGJvcmRlckNvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsXG4gICAqIGV0Yy5cbiAgICogQHJldHVybnMge29iamVjdH0gVGhlIGNyZWF0ZWQgZ3JvdXAgb2JqZWN0LlxuICAgKi9cbiAgYWRkKGdyb3VwTmFtZSwgc3R5bGUpIHtcbiAgICAvLyBPbmx5IHB1c2ggZ3JvdXAgbmFtZSBvbmNlIHRvIHByZXZlbnQgZHVwbGljYXRlcyB3aGljaCB3b3VsZCBjb25zdW1lIG1vcmVcbiAgICAvLyBSQU0gYW5kIGFsc28gc2tldyB0aGUgZGlzdHJpYnV0aW9uIHRvd2FyZHMgbW9yZSBvZnRlbiB1cGRhdGVkIGdyb3VwcyxcbiAgICAvLyBuZWl0aGVyIG9mIHdoaWNoIGlzIGRlc2lyYWJsZS5cbiAgICBpZiAoIXRoaXMuX2dyb3Vwcy5oYXMoZ3JvdXBOYW1lKSkge1xuICAgICAgdGhpcy5fZ3JvdXBOYW1lcy5wdXNoKGdyb3VwTmFtZSk7XG4gICAgfVxuICAgIHRoaXMuX2dyb3Vwcy5zZXQoZ3JvdXBOYW1lLCBzdHlsZSk7XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBOdW1iZXIuaXNOYU5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNuYW5cbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm51bWJlci5pcy1uYW4nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk51bWJlci5pc05hTjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgZ2xvYmFsSXNGaW5pdGUgPSBnbG9iYWwuaXNGaW5pdGU7XG5cbi8vIGBOdW1iZXIuaXNGaW5pdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNmaW5pdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1udW1iZXItaXNmaW5pdGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gaXNGaW5pdGUoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBnbG9iYWxJc0Zpbml0ZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG51bWJlcklzRmluaXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1pcy1maW5pdGUnKTtcblxuLy8gYE51bWJlci5pc0Zpbml0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci5pc2Zpbml0ZVxuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUgfSwgeyBpc0Zpbml0ZTogbnVtYmVySXNGaW5pdGUgfSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5udW1iZXIuaXMtZmluaXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5OdW1iZXIuaXNGaW5pdGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb21lJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvbWUnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zb21lO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvbWUnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29tZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29tZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zb21lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG59O1xuXG5pZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtKSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBrZXksIGRlc2NyaXB0b3I7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywga2V5ID0ga2V5c1tpbmRleCsrXSk7XG4gICAgICBpZiAoZGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKS5mO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzICE9PSBkZWZpbmVQcm9wZXJ0aWVzLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0aWVzOiBkZWZpbmVQcm9wZXJ0aWVzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKFQsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQsIEQpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLnNoYW0pIGRlZmluZVByb3BlcnRpZXMuc2hhbSA9IHRydWU7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpOyIsICJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIjtcbmltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyICRwYXJzZUZsb2F0ID0gZ2xvYmFsLnBhcnNlRmxvYXQ7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBJVEVSQVRPUiA9IFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRk9SQ0VEID0gMSAvICRwYXJzZUZsb2F0KHdoaXRlc3BhY2VzICsgJy0wJykgIT09IC1JbmZpbml0eVxuICAvLyBNUyBFZGdlIDE4LSBicm9rZW4gd2l0aCBib3hlZCBzeW1ib2xzXG4gIHx8IChJVEVSQVRPUiAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyAkcGFyc2VGbG9hdChPYmplY3QoSVRFUkFUT1IpKTsgfSkpO1xuXG4vLyBgcGFyc2VGbG9hdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlZmxvYXQtc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyaW5nKSB7XG4gIHZhciB0cmltbWVkU3RyaW5nID0gdHJpbSh0b1N0cmluZyhzdHJpbmcpKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHRyaW1tZWRTdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIGNoYXJBdCh0cmltbWVkU3RyaW5nLCAwKSA9PT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWZsb2F0Jyk7XG5cbi8vIGBwYXJzZUZsb2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VmbG9hdC1zdHJpbmdcbiQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogcGFyc2VGbG9hdCAhPT0gJHBhcnNlRmxvYXQgfSwge1xuICBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wYXJzZS1mbG9hdCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGgucGFyc2VGbG9hdDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKS5mO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyByZXR1cm4gIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgeyB0b3BNb3N0IH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIGNvbXBvbmVudHNcbiAqL1xuXG4vKipcbiAqIERldGVybWluZSB2YWx1ZXMgdG8gdXNlIGZvciAoc3ViKW9wdGlvbnMgb2YgJ2Nob3NlbicuXG4gKlxuICogVGhpcyBvcHRpb24gaXMgZWl0aGVyIGEgYm9vbGVhbiBvciBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBleGFtaW5lZCBmdXJ0aGVyLlxuICogVGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYXJlOlxuICpcbiAqIC0gY2hvc2VuOiA8Ym9vbGVhbiB2YWx1ZT5cbiAqIC0gY2hvc2VuOiB7IHN1Yk9wdGlvbjogPGJvb2xlYW4gb3IgZnVuY3Rpb24+IH1cbiAqXG4gKiBXaGVyZSBzdWJPcHRpb24gaXMgJ25vZGUnLCAnZWRnZScgb3IgJ2xhYmVsJy5cbiAqXG4gKiBUaGUgaW50ZW50aW9uIG9mIHRoaXMgbWV0aG9kIGFwcGVhcnMgdG8gYmUgdG8gc2V0IGEgc3BlY2lmaWMgcHJpb3JpdHkgdG8gdGhlIG9wdGlvbnM7XG4gKiBTaW5jZSBtb3N0IHByb3BlcnRpZXMgYXJlIGVpdGhlciBicmlkZ2VkIG9yIG1lcmdlZCBpbnRvIHRoZSBsb2NhbCBvcHRpb25zIG9iamVjdHMsIHRoZXJlXG4gKiBpcyBub3QgbXVjaCBwb2ludCBpbiBoYW5kbGluZyB0aGVtIHNlcGFyYXRlbHkuXG4gKiBUT0RPOiBleGFtaW5lIGlmICdtb3N0JyBpbiBwcmV2aW91cyBzZW50ZW5jZSBjYW4gYmUgcmVwbGFjZWQgd2l0aCAnYWxsJy4gSW4gdGhhdCBjYXNlLCB3ZVxuICogICAgICAgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHJpZCBvZiB0aGlzIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gIHN1Yk9wdGlvbiAgb3B0aW9uIHdpdGhpbiBvYmplY3QgJ2Nob3NlbicgdG8gY29uc2lkZXI7IGVpdGhlciAnbm9kZScsICdlZGdlJyBvciAnbGFiZWwnXG4gKiBAcGFyYW0ge29iamVjdH0gIHBpbGUgICAgICAgYXJyYXkgb2Ygb3B0aW9ucyBvYmplY3RzIHRvIGNvbnNpZGVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbiB8IEZ1bmN0aW9ufSAgdmFsdWUgZm9yIHBhc3NlZCBzdWJPcHRpb24gb2YgJ2Nob3NlbicgdG8gdXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaG9vc2lmeShzdWJPcHRpb24sIHBpbGUpIHtcbiAgLy8gYWxsb3dlZCB2YWx1ZXMgZm9yIHN1Yk9wdGlvblxuICBjb25zdCBhbGxvd2VkID0gW1wibm9kZVwiLCBcImVkZ2VcIiwgXCJsYWJlbFwiXTtcbiAgbGV0IHZhbHVlID0gdHJ1ZTtcblxuICBjb25zdCBjaG9zZW4gPSB0b3BNb3N0KHBpbGUsIFwiY2hvc2VuXCIpO1xuICBpZiAodHlwZW9mIGNob3NlbiA9PT0gXCJib29sZWFuXCIpIHtcbiAgICB2YWx1ZSA9IGNob3NlbjtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2hvc2VuID09PSBcIm9iamVjdFwiKSB7XG4gICAgaWYgKGFsbG93ZWQuaW5kZXhPZihzdWJPcHRpb24pID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImNob29zaWZ5OiBzdWJPcHRpb24gJ1wiICtcbiAgICAgICAgICBzdWJPcHRpb24gK1xuICAgICAgICAgIFwiJyBzaG91bGQgYmUgb25lIG9mIFwiICtcbiAgICAgICAgICBcIidcIiArXG4gICAgICAgICAgYWxsb3dlZC5qb2luKFwiJywgJ1wiKSArXG4gICAgICAgICAgXCInXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hvc2VuRWRnZSA9IHRvcE1vc3QocGlsZSwgW1wiY2hvc2VuXCIsIHN1Yk9wdGlvbl0pO1xuICAgIGlmICh0eXBlb2YgY2hvc2VuRWRnZSA9PT0gXCJib29sZWFuXCIgfHwgdHlwZW9mIGNob3NlbkVkZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdmFsdWUgPSBjaG9zZW5FZGdlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcG9pbnQgZmFsbHMgd2l0aGluIHRoZSBnaXZlbiByZWN0YW5nbGUuXG4gKlxuICogQHBhcmFtIHtyZWN0fSByZWN0XG4gKiBAcGFyYW0ge3BvaW50fSBwb2ludFxuICogQHBhcmFtIHtyb3RhdGlvblBvaW50fSBbcm90YXRpb25Qb2ludF0gaWYgc3BlY2lmaWVkLCB0aGUgcm90YXRpb24gdGhhdCBhcHBsaWVzIHRvIHRoZSByZWN0YW5nbGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gIHRydWUgaWYgcG9pbnQgd2l0aGluIHJlY3RhbmdsZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb2ludEluUmVjdChyZWN0LCBwb2ludCwgcm90YXRpb25Qb2ludCkge1xuICBpZiAocmVjdC53aWR0aCA8PSAwIHx8IHJlY3QuaGVpZ2h0IDw9IDApIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIGVhcmx5IG91dFxuICB9XG5cbiAgaWYgKHJvdGF0aW9uUG9pbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFJvdGF0ZSB0aGUgcG9pbnQgdGhlIHNhbWUgYW1vdW50IGFzIHRoZSByZWN0YW5nbGVcbiAgICBjb25zdCB0bXAgPSB7XG4gICAgICB4OiBwb2ludC54IC0gcm90YXRpb25Qb2ludC54LFxuICAgICAgeTogcG9pbnQueSAtIHJvdGF0aW9uUG9pbnQueSxcbiAgICB9O1xuXG4gICAgaWYgKHJvdGF0aW9uUG9pbnQuYW5nbGUgIT09IDApIHtcbiAgICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgY29vcmRpbmF0ZXMgdGhlIHNhbWUsIHlvdSBuZWVkIHRvXG4gICAgICAvLyByb3RhdGUgaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uXG4gICAgICBjb25zdCBhbmdsZSA9IC1yb3RhdGlvblBvaW50LmFuZ2xlO1xuXG4gICAgICBjb25zdCB0bXAyID0ge1xuICAgICAgICB4OiBNYXRoLmNvcyhhbmdsZSkgKiB0bXAueCAtIE1hdGguc2luKGFuZ2xlKSAqIHRtcC55LFxuICAgICAgICB5OiBNYXRoLnNpbihhbmdsZSkgKiB0bXAueCArIE1hdGguY29zKGFuZ2xlKSAqIHRtcC55LFxuICAgICAgfTtcbiAgICAgIHBvaW50ID0gdG1wMjtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9pbnQgPSB0bXA7XG4gICAgfVxuXG4gICAgLy8gTm90ZSB0aGF0IGlmIGEgcm90YXRpb24gaXMgc3BlY2lmaWVkLCB0aGUgcmVjdGFuZ2xlIGNvb3JkaW5hdGVzXG4gICAgLy8gYXJlICoqbm90KiB0aGUgZnVsbCBjYW52YXMgY29vcmRpbmF0ZXMuIFRoZXkgYXJlIHJlbGF0aXZlIHRvIHRoZVxuICAgIC8vIHJvdGF0aW9uUG9pbnQuIEhlbmNlLCB0aGUgcG9pbnQgY29vcmRpbmF0ZXMgbmVlZCBub3QgYmUgdHJhbnNsYXRlZFxuICAgIC8vIGJhY2sgaW4gdGhpcyBjYXNlLlxuICB9XG5cbiAgY29uc3QgcmlnaHQgPSByZWN0LnggKyByZWN0LndpZHRoO1xuICBjb25zdCBib3R0b20gPSByZWN0LnkgKyByZWN0LndpZHRoO1xuXG4gIHJldHVybiAoXG4gICAgcmVjdC5sZWZ0IDwgcG9pbnQueCAmJlxuICAgIHJpZ2h0ID4gcG9pbnQueCAmJlxuICAgIHJlY3QudG9wIDwgcG9pbnQueSAmJlxuICAgIGJvdHRvbSA+IHBvaW50LnlcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBnaXZlbiB2YWx1ZSBpcyBhY2NlcHRhYmxlIGFzIGEgbGFiZWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0geyp9IHRleHQgdmFsdWUgdG8gY2hlY2s7IGNhbiBiZSBhbnl0aGluZyBhdCB0aGlzIHBvaW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB2YWxpZCBsYWJlbCB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTGFiZWwodGV4dCkge1xuICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBxdWl0ZSBzdHJpY3Q6IHR5cGVzIHRoYXQgKm1pZ2h0KiBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIGFyZSBkaXNhbGxvd2VkXG4gIHJldHVybiB0eXBlb2YgdGV4dCA9PT0gXCJzdHJpbmdcIiAmJiB0ZXh0ICE9PSBcIlwiO1xufVxuXG4vKipcbiAqIFJldHVybnMgeCwgeSBvZiBzZWxmIHJlZmVyZW5jZSBjaXJjbGUgYmFzZWQgb24gcHJvdmlkZWQgYW5nbGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY3R4XG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXNcbiAqIEBwYXJhbSB7VmlzTm9kZX0gbm9kZVxuICogQHJldHVybnMge29iamVjdH0geCBhbmQgeSBjb29yZGluYXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZlJlZkNvb3JkaW5hdGVzKGN0eCwgYW5nbGUsIHJhZGl1cywgbm9kZSkge1xuICBsZXQgeCA9IG5vZGUueDtcbiAgbGV0IHkgPSBub2RlLnk7XG5cbiAgaWYgKHR5cGVvZiBub2RlLmRpc3RhbmNlVG9Cb3JkZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIC8vY2FsY3VsYXRpbmcgb3Bwb3NpdGUgYW5kIGFkamFjZW50XG4gICAgLy9kaXN0YW5lVG9Cb3JkZXIgYmVjb21lcyBIeXBvdGVudXNlLlxuICAgIC8vRm9ybXVsYXMgc2luKGEpID0gT3Bwb3NpdGUgLyBIeXBvdGVudXNlIGFuZCBjb3MoYSkgPSBBZGphY2VudCAvIEh5cG90ZW51c2VcbiAgICBjb25zdCB0b0JvcmRlckRpc3QgPSBub2RlLmRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gICAgY29uc3QgeUZyb21Ob2RlQ2VudGVyID0gTWF0aC5zaW4oYW5nbGUpICogdG9Cb3JkZXJEaXN0O1xuICAgIGNvbnN0IHhGcm9tTm9kZUNlbnRlciA9IE1hdGguY29zKGFuZ2xlKSAqIHRvQm9yZGVyRGlzdDtcbiAgICAvL3hGcm9tTm9kZUNlbnRlciBpcyBiYXNpY2FsbHkgeCBhbmQgaWYgeEZyb21Ob2RlQ2VudGVyIGVxdWFscyB0byB0aGUgZGlzdGFuY2UgdG8gYm9yZGVyIHRoZW4gaXQgbWVhbnNcbiAgICAvL3RoYXQgeSBkb2VzIG5vdCBuZWVkIGNhbGN1bGF0aW9uIGJlY2F1c2UgaXQgaXMgZXF1YWwgbm9kZS5oZWlnaHQgLyAyIG9yIG5vZGUueVxuICAgIC8vc2FtZSB0aGluZyB3aXRoIHlGcm9tTm9kZUNlbnRlciBhbmQgaWYgeUZyb21Ob2RlQ2VudGVyIGVxdWFscyB0byB0aGUgZGlzdGFuY2UgdG8gYm9yZGVyIHRoZW4gaXQgbWVhbnNcbiAgICAvL3RoYXQgeCBpcyBlcXVhbCBub2RlLndpZHRoIC8gMiBvciBub2RlLnhcbiAgICBpZiAoeEZyb21Ob2RlQ2VudGVyID09PSB0b0JvcmRlckRpc3QpIHtcbiAgICAgIHggKz0gdG9Cb3JkZXJEaXN0O1xuICAgICAgeSA9IG5vZGUueTtcbiAgICB9IGVsc2UgaWYgKHlGcm9tTm9kZUNlbnRlciA9PT0gdG9Cb3JkZXJEaXN0KSB7XG4gICAgICB4ID0gbm9kZS54O1xuICAgICAgeSAtPSB0b0JvcmRlckRpc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHggKz0geEZyb21Ob2RlQ2VudGVyO1xuICAgICAgeSAtPSB5RnJvbU5vZGVDZW50ZXI7XG4gICAgfVxuICB9IGVsc2UgaWYgKG5vZGUuc2hhcGUud2lkdGggPiBub2RlLnNoYXBlLmhlaWdodCkge1xuICAgIHggPSBub2RlLnggKyBub2RlLnNoYXBlLndpZHRoICogMC41O1xuICAgIHkgPSBub2RlLnkgLSByYWRpdXM7XG4gIH0gZWxzZSB7XG4gICAgeCA9IG5vZGUueCArIHJhZGl1cztcbiAgICB5ID0gbm9kZS55IC0gbm9kZS5zaGFwZS5oZWlnaHQgKiAwLjU7XG4gIH1cblxuICByZXR1cm4geyB4LCB5IH07XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykudmFsdWVzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudmFsdWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS52YWx1ZXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXNcIik7IiwgIi8qKlxuICogQ2FsbGJhY2sgdG8gZGV0ZXJtaW5lIHRleHQgZGltZW5zaW9ucywgdXNpbmcgdGhlIHBhcmVudCBsYWJlbCBzZXR0aW5ncy5cbiAqXG4gKiBAY2FsbGJhY2sgTWVhc3VyZVRleHRcbiAqIEBwYXJhbSB7dGV4dH0gdGV4dFxuICogQHBhcmFtIHt0ZXh0fSBtb2RcbiAqIEByZXR1cm5zIHtvYmplY3R9IHsgd2lkdGgsIHZhbHVlc30gd2lkdGggaW4gcGl4ZWxzIGFuZCBmb250IGF0dHJpYnV0ZXNcbiAqL1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgTGFiZWwgd2hpY2ggY29sbGVjdHMgcmVzdWx0cyBvZiBzcGxpdHRpbmcgbGFiZWxzIGludG8gbGluZXMgYW5kIGJsb2Nrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBMYWJlbEFjY3VtdWxhdG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7TWVhc3VyZVRleHR9IG1lYXN1cmVUZXh0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZWFzdXJlVGV4dCkge1xuICAgIHRoaXMubWVhc3VyZVRleHQgPSBtZWFzdXJlVGV4dDtcbiAgICB0aGlzLmN1cnJlbnQgPSAwO1xuICAgIHRoaXMud2lkdGggPSAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kIGdpdmVuIHRleHQgdG8gdGhlIGdpdmVuIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSAgbCAgICBpbmRleCBvZiBsaW5lIHRvIGFkZCB0b1xuICAgKiBAcGFyYW0ge3N0cmluZ30gIHRleHQgc3RyaW5nIHRvIGFwcGVuZCB0byBsaW5lXG4gICAqIEBwYXJhbSB7J2JvbGQnfCdpdGFsJ3wnYm9sZGl0YWwnfCdtb25vJ3wnbm9ybWFsJ30gW21vZD0nbm9ybWFsJ11cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGQobCwgdGV4dCwgbW9kID0gXCJub3JtYWxcIikge1xuICAgIGlmICh0aGlzLmxpbmVzW2xdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubGluZXNbbF0gPSB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGJsb2NrczogW10sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFdlIHN0aWxsIG5lZWQgdG8gc2V0IGEgYmxvY2sgZm9yIHVuZGVmaW5lZCBhbmQgZW1wdHkgdGV4dHMsIGhlbmNlIHJldHVybiBhdCB0aGlzIHBvaW50XG4gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQgaWYgd2UncmUgYXQgdGhlXG4gICAgLy8gc3RhcnQgb2YgYW4gZW1wdHkgbGluZSBvciBub3QuXG4gICAgLy8gVG8gY29tcGVuc2F0ZSwgZW1wdHkgYmxvY2tzIGFyZSByZW1vdmVkIGluIGBmaW5hbGl6ZSgpYC5cbiAgICAvL1xuICAgIC8vIEVtcHR5IHN0cmluZ3Mgc2hvdWxkIHN0aWxsIGhhdmUgYSBoZWlnaHRcbiAgICBsZXQgdG1wVGV4dCA9IHRleHQ7XG4gICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCB8fCB0ZXh0ID09PSBcIlwiKSB0bXBUZXh0ID0gXCIgXCI7XG5cbiAgICAvLyBEZXRlcm1pbmUgd2lkdGggYW5kIGdldCB0aGUgZm9udCBwcm9wZXJ0aWVzXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tZWFzdXJlVGV4dCh0bXBUZXh0LCBtb2QpO1xuICAgIGNvbnN0IGJsb2NrID0gT2JqZWN0LmFzc2lnbih7fSwgcmVzdWx0LnZhbHVlcyk7XG4gICAgYmxvY2sudGV4dCA9IHRleHQ7XG4gICAgYmxvY2sud2lkdGggPSByZXN1bHQud2lkdGg7XG4gICAgYmxvY2subW9kID0gbW9kO1xuXG4gICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCB8fCB0ZXh0ID09PSBcIlwiKSB7XG4gICAgICBibG9jay53aWR0aCA9IDA7XG4gICAgfVxuXG4gICAgdGhpcy5saW5lc1tsXS5ibG9ja3MucHVzaChibG9jayk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGxpbmUgd2lkdGguIFdlIG5lZWQgdGhpcyBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBzdHJpbmcgZ29lcyBvdmVyIG1heCB3aWR0aFxuICAgIHRoaXMubGluZXNbbF0ud2lkdGggKz0gYmxvY2sud2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2lkdGggaW4gcGl4ZWxzIG9mIHRoZSBjdXJyZW50IGxpbmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBjdXJXaWR0aCgpIHtcbiAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1t0aGlzLmN1cnJlbnRdO1xuICAgIGlmIChsaW5lID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuXG4gICAgcmV0dXJuIGxpbmUud2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRleHQgaW4gYmxvY2sgdG8gY3VycmVudCBsaW5lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEBwYXJhbSB7J2JvbGQnfCdpdGFsJ3wnYm9sZGl0YWwnfCdtb25vJ3wnbm9ybWFsJ30gW21vZD0nbm9ybWFsJ11cbiAgICovXG4gIGFwcGVuZCh0ZXh0LCBtb2QgPSBcIm5vcm1hbFwiKSB7XG4gICAgdGhpcy5fYWRkKHRoaXMuY3VycmVudCwgdGV4dCwgbW9kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGV4dCBpbiBibG9jayB0byBjdXJyZW50IGxpbmUgYW5kIHN0YXJ0IGEgbmV3IGxpbmVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICogQHBhcmFtIHsnYm9sZCd8J2l0YWwnfCdib2xkaXRhbCd8J21vbm8nfCdub3JtYWwnfSBbbW9kPSdub3JtYWwnXVxuICAgKi9cbiAgbmV3TGluZSh0ZXh0LCBtb2QgPSBcIm5vcm1hbFwiKSB7XG4gICAgdGhpcy5fYWRkKHRoaXMuY3VycmVudCwgdGV4dCwgbW9kKTtcbiAgICB0aGlzLmN1cnJlbnQrKztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgYW5kIHNldCB0aGUgaGVpZ2h0cyBvZiBhbGwgdGhlIGxpbmVzIGN1cnJlbnRseSBjb250YWluZWQgaW4gdGhpcyBpbnN0YW5jZVxuICAgKlxuICAgKiBOb3RlIHRoYXQgd2lkdGggaGFzIGFscmVhZHkgYmVlbiBzZXQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZXRlcm1pbmVMaW5lSGVpZ2h0cygpIHtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMubGluZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmxpbmVzW2tdO1xuXG4gICAgICAvLyBMb29raW5nIGZvciBtYXggaGVpZ2h0IG9mIGJsb2NrcyBpbiBsaW5lXG4gICAgICBsZXQgaGVpZ2h0ID0gMDtcblxuICAgICAgaWYgKGxpbmUuYmxvY2tzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gQ2FuIGhhcHBlbiBpZiB0ZXh0IGNvbnRhaW5zIGUuZy4gJ1xcbiAnXG4gICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZS5ibG9ja3MubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgICBjb25zdCBibG9jayA9IGxpbmUuYmxvY2tzW2xdO1xuXG4gICAgICAgICAgaWYgKGhlaWdodCA8IGJsb2NrLmhlaWdodCkge1xuICAgICAgICAgICAgaGVpZ2h0ID0gYmxvY2suaGVpZ2h0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaW5lLmhlaWdodCA9IGhlaWdodDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBmdWxsIHNpemUgb2YgdGhlIGxhYmVsIHRleHQsIGFzIGRldGVybWluZWQgYnkgY3VycmVudCBsaW5lcyBhbmQgYmxvY2tzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZXRlcm1pbmVMYWJlbFNpemUoKSB7XG4gICAgbGV0IHdpZHRoID0gMDtcbiAgICBsZXQgaGVpZ2h0ID0gMDtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMubGluZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmxpbmVzW2tdO1xuXG4gICAgICBpZiAobGluZS53aWR0aCA+IHdpZHRoKSB7XG4gICAgICAgIHdpZHRoID0gbGluZS53aWR0aDtcbiAgICAgIH1cbiAgICAgIGhlaWdodCArPSBsaW5lLmhlaWdodDtcbiAgICB9XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBlbXB0eSBibG9ja3MgYW5kIGVtcHR5IGxpbmVzIHdlIGRvbid0IG5lZWRcbiAgICpcbiAgICogVGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIHdpZHRoL2hlaWdodCBkZXRlcm1pbmF0aW9uLFxuICAgKiBzbyB0aGF0IHRoZXNlIGFyZSBzZXQgcHJvcGVybHkgZm9yIHByb2Nlc3NpbmcgaGVyZS5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5PExpbmU+fSBMaW5lcyB3aXRoIGVtcHR5IGJsb2NrcyAoYW5kIHNvbWUgZW1wdHkgbGluZXMpIHJlbW92ZWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlbW92ZUVtcHR5QmxvY2tzKCkge1xuICAgIGNvbnN0IHRtcExpbmVzID0gW107XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaysrKSB7XG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1trXTtcblxuICAgICAgLy8gTm90ZTogYW4gZW1wdHkgbGluZSBpbiBiZXR3ZWVuIHRleHQgaGFzIHdpZHRoIHplcm8gYnV0IGlzIHN0aWxsIHJlbGV2YW50IHRvIGxheW91dC5cbiAgICAgIC8vIFNvIHdlIGNhbid0IHVzZSB3aWR0aCBmb3IgdGVzdGluZyBlbXB0eSBsaW5lIGhlcmVcbiAgICAgIGlmIChsaW5lLmJsb2Nrcy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAvLyBEaXNjYXJkIGZpbmFsIGVtcHR5IGxpbmUgYWx3YXlzXG4gICAgICBpZiAoayA9PT0gdGhpcy5saW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGlmIChsaW5lLndpZHRoID09PSAwKSBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG1wTGluZSA9IHt9O1xuICAgICAgT2JqZWN0LmFzc2lnbih0bXBMaW5lLCBsaW5lKTtcbiAgICAgIHRtcExpbmUuYmxvY2tzID0gW107XG5cbiAgICAgIGxldCBmaXJzdEVtcHR5QmxvY2s7XG4gICAgICBjb25zdCB0bXBCbG9ja3MgPSBbXTtcbiAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZS5ibG9ja3MubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgY29uc3QgYmxvY2sgPSBsaW5lLmJsb2Nrc1tsXTtcbiAgICAgICAgaWYgKGJsb2NrLndpZHRoICE9PSAwKSB7XG4gICAgICAgICAgdG1wQmxvY2tzLnB1c2goYmxvY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmaXJzdEVtcHR5QmxvY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlyc3RFbXB0eUJsb2NrID0gYmxvY2s7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZXJlIGlzICpzb21lKiB0ZXh0IHByZXNlbnRcbiAgICAgIGlmICh0bXBCbG9ja3MubGVuZ3RoID09PSAwICYmIGZpcnN0RW1wdHlCbG9jayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRtcEJsb2Nrcy5wdXNoKGZpcnN0RW1wdHlCbG9jayk7XG4gICAgICB9XG5cbiAgICAgIHRtcExpbmUuYmxvY2tzID0gdG1wQmxvY2tzO1xuXG4gICAgICB0bXBMaW5lcy5wdXNoKHRtcExpbmUpO1xuICAgIH1cblxuICAgIHJldHVybiB0bXBMaW5lcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHNpemVzIGZvciBhbGwgbGluZXMgYW5kIHRoZSB3aG9sZSB0aGluZy5cbiAgICpcbiAgICogQHJldHVybnMge3t3aWR0aDogKG51bWJlcnwqKSwgaGVpZ2h0OiAobnVtYmVyfCopLCBsaW5lczogQXJyYXl9fVxuICAgKi9cbiAgZmluYWxpemUoKSB7XG4gICAgLy9jb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLmxpbmVzLCBudWxsLCAyKSk7XG5cbiAgICB0aGlzLmRldGVybWluZUxpbmVIZWlnaHRzKCk7XG4gICAgdGhpcy5kZXRlcm1pbmVMYWJlbFNpemUoKTtcbiAgICBjb25zdCB0bXBMaW5lcyA9IHRoaXMucmVtb3ZlRW1wdHlCbG9ja3MoKTtcblxuICAgIC8vIFJldHVybiBhIHNpbXBsZSBoYXNoIG9iamVjdCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICBsaW5lczogdG1wTGluZXMsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYWJlbEFjY3VtdWxhdG9yO1xuIiwgImltcG9ydCBMYWJlbEFjY3VtdWxhdG9yIGZyb20gXCIuL0xhYmVsQWNjdW11bGF0b3JcIjtcbmltcG9ydCB7IGlzVmFsaWRMYWJlbCB9IGZyb20gXCIuL0NvbXBvbmVudFV0aWxcIjtcblxuLy8gSGFzaCBvZiBwcmVwYXJlZCByZWdleHAncyBmb3IgdGFnc1xuY29uc3QgdGFnUGF0dGVybiA9IHtcbiAgLy8gSFRNTFxuICBcIjxiPlwiOiAvPGI+LyxcbiAgXCI8aT5cIjogLzxpPi8sXG4gIFwiPGNvZGU+XCI6IC88Y29kZT4vLFxuICBcIjwvYj5cIjogLzxcXC9iPi8sXG4gIFwiPC9pPlwiOiAvPFxcL2k+LyxcbiAgXCI8L2NvZGU+XCI6IC88XFwvY29kZT4vLFxuICAvLyBNYXJrZG93blxuICBcIipcIjogL1xcKi8sIC8vIGJvbGRcbiAgXzogL18vLCAvLyBpdGFsXG4gIFwiYFwiOiAvYC8sIC8vIG1vbm9cbiAgYWZ0ZXJCb2xkOiAvW14qXS8sXG4gIGFmdGVySXRhbDogL1teX10vLFxuICBhZnRlck1vbm86IC9bXmBdLyxcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgaGVscGVyIGNsYXNzIGZvciBwYXJzaW5nIHRoZSBtYXJrdXAgdGFncyBmb3IgSFRNTCBhbmQgTWFya2Rvd24uXG4gKlxuICogTk9URTogU2VxdWVuY2VzIG9mIHRhYnMgYW5kIHNwYWNlcyBhcmUgcmVkdWNlZCB0byBzaW5nbGUgc3BhY2UuXG4gKiAgICAgICBTY2FuIHVzYWdlIG9mIGB0aGlzLnNwYWNpbmdgIHdpdGhpbiBtZXRob2RcbiAqL1xuY2xhc3MgTWFya3VwQWNjdW11bGF0b3Ige1xuICAvKipcbiAgICogQ3JlYXRlIGFuIGluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0ICB0ZXh0IHRvIHBhcnNlIGZvciBtYXJrdXBcbiAgICovXG4gIGNvbnN0cnVjdG9yKHRleHQpIHtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuYm9sZCA9IGZhbHNlO1xuICAgIHRoaXMuaXRhbCA9IGZhbHNlO1xuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xuICAgIHRoaXMuc3BhY2luZyA9IGZhbHNlO1xuICAgIHRoaXMucG9zaXRpb24gPSAwO1xuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcbiAgICB0aGlzLm1vZFN0YWNrID0gW107XG5cbiAgICB0aGlzLmJsb2NrcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbW9kIGxhYmVsIGN1cnJlbnRseSBvbiB0aGUgdG9wIG9mIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAgbGFiZWwgb2YgdG9wbW9zdCBtb2RcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG1vZCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RTdGFjay5sZW5ndGggPT09IDAgPyBcIm5vcm1hbFwiIDogdGhpcy5tb2RTdGFja1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1vZCBsYWJlbCBjdXJyZW50bHkgYWN0aXZlXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9ICBsYWJlbCBvZiBhY3RpdmUgbW9kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtb2ROYW1lKCkge1xuICAgIGlmICh0aGlzLm1vZFN0YWNrLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwibm9ybWFsXCI7XG4gICAgZWxzZSBpZiAodGhpcy5tb2RTdGFja1swXSA9PT0gXCJtb25vXCIpIHJldHVybiBcIm1vbm9cIjtcbiAgICBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmJvbGQgJiYgdGhpcy5pdGFsKSB7XG4gICAgICAgIHJldHVybiBcImJvbGRpdGFsXCI7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYm9sZCkge1xuICAgICAgICByZXR1cm4gXCJib2xkXCI7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXRhbCkge1xuICAgICAgICByZXR1cm4gXCJpdGFsXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0QmxvY2soKSB7XG4gICAgaWYgKHRoaXMuc3BhY2luZykge1xuICAgICAgdGhpcy5hZGQoXCIgXCIpO1xuICAgICAgdGhpcy5zcGFjaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmJsb2Nrcy5wdXNoKHsgdGV4dDogdGhpcy5idWZmZXIsIG1vZDogdGhpcy5tb2ROYW1lKCkgfSk7XG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dCB0ZXh0IHRvIGJ1ZmZlclxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAgdGV4dCB0byBhZGRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFkZCh0ZXh0KSB7XG4gICAgaWYgKHRleHQgPT09IFwiIFwiKSB7XG4gICAgICB0aGlzLnNwYWNpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcGFjaW5nKSB7XG4gICAgICB0aGlzLmJ1ZmZlciArPSBcIiBcIjtcbiAgICAgIHRoaXMuc3BhY2luZyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGV4dCAhPSBcIiBcIikge1xuICAgICAgdGhpcy5idWZmZXIgKz0gdGV4dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHBhcnNpbmcgb2Ygd2hpdGVzcGFjZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2ggIHRoZSBjaGFyYWN0ZXIgdG8gY2hlY2tcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGNoYXJhY3RlciB3YXMgcHJvY2Vzc2VkIGFzIHdoaXRlc3BhY2UsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcGFyc2VXUyhjaCkge1xuICAgIGlmICgvWyBcXHRdLy50ZXN0KGNoKSkge1xuICAgICAgaWYgKCF0aGlzLm1vbm8pIHtcbiAgICAgICAgdGhpcy5zcGFjaW5nID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWRkKGNoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSAgbGFiZWwgZm9yIGJsb2NrIHR5cGUgdG8gc2V0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXRUYWcodGFnTmFtZSkge1xuICAgIHRoaXMuZW1pdEJsb2NrKCk7XG4gICAgdGhpc1t0YWdOYW1lXSA9IHRydWU7XG4gICAgdGhpcy5tb2RTdGFjay51bnNoaWZ0KHRhZ05hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lICBsYWJlbCBmb3IgYmxvY2sgdHlwZSB0byB1bnNldFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdW5zZXRUYWcodGFnTmFtZSkge1xuICAgIHRoaXMuZW1pdEJsb2NrKCk7XG4gICAgdGhpc1t0YWdOYW1lXSA9IGZhbHNlO1xuICAgIHRoaXMubW9kU3RhY2suc2hpZnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSBsYWJlbCBmb3IgYmxvY2sgdHlwZSB3ZSBhcmUgY3VycmVudGx5IHByb2Nlc3NpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB0YWcgc3RyaW5nIHRvIG1hdGNoIGluIHRleHRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHRhZyB3YXMgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHBhcnNlU3RhcnRUYWcodGFnTmFtZSwgdGFnKSB7XG4gICAgLy8gTm90ZTogaWYgJ21vbm8nIHBhc3NlZCBhcyB0YWdOYW1lLCB0aGVyZSBpcyBhIGRvdWJsZSBjaGVjayBoZXJlLiBUaGlzIGlzIE9LXG4gICAgaWYgKCF0aGlzLm1vbm8gJiYgIXRoaXNbdGFnTmFtZV0gJiYgdGhpcy5tYXRjaCh0YWcpKSB7XG4gICAgICB0aGlzLnNldFRhZyh0YWdOYW1lKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHRhZ1xuICAgKiBAcGFyYW0ge251bWJlcn0gW2FkdmFuY2U9dHJ1ZV0gaWYgc2V0LCBhZHZhbmNlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGV4dFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBtYXRjaCBhdCBnaXZlbiBwb3NpdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtYXRjaCh0YWcsIGFkdmFuY2UgPSB0cnVlKSB7XG4gICAgY29uc3QgW3JlZ0V4cCwgbGVuZ3RoXSA9IHRoaXMucHJlcGFyZVJlZ0V4cCh0YWcpO1xuICAgIGNvbnN0IG1hdGNoZWQgPSByZWdFeHAudGVzdCh0aGlzLnRleHQuc3Vic3RyKHRoaXMucG9zaXRpb24sIGxlbmd0aCkpO1xuXG4gICAgaWYgKG1hdGNoZWQgJiYgYWR2YW5jZSkge1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIGxhYmVsIGZvciBibG9jayB0eXBlIHdlIGFyZSBjdXJyZW50bHkgcHJvY2Vzc2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHRhZyBzdHJpbmcgdG8gbWF0Y2ggaW4gdGV4dFxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gW25leHRUYWddIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBmb3IgY2hhcmFjdGVycyAqZm9sbG93aW5nKiB0aGUgY3VycmVudCB0YWdcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHRhZyB3YXMgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHBhcnNlRW5kVGFnKHRhZ05hbWUsIHRhZywgbmV4dFRhZykge1xuICAgIGxldCBjaGVja1RhZyA9IHRoaXMubW9kKCkgPT09IHRhZ05hbWU7XG4gICAgaWYgKHRhZ05hbWUgPT09IFwibW9ub1wiKSB7XG4gICAgICAvLyBzcGVjaWFsIGhhbmRsaW5nIGZvciAnbW9ubydcbiAgICAgIGNoZWNrVGFnID0gY2hlY2tUYWcgJiYgdGhpcy5tb25vO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVja1RhZyA9IGNoZWNrVGFnICYmICF0aGlzLm1vbm87XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrVGFnICYmIHRoaXMubWF0Y2godGFnKSkge1xuICAgICAgaWYgKG5leHRUYWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBQdXJwb3NlIG9mIHRoZSBmb2xsb3dpbmcgbWF0Y2ggaXMgdG8gcHJldmVudCBhIGRpcmVjdCB1bnNldC9zZXQgb2YgYSBnaXZlbiB0YWdcbiAgICAgICAgLy8gRS5nLiAnKmJvbGQgKipzdGlsbCBib2xkKicgPT4gJypib2xkIHN0aWxsIGJvbGQqJ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbiA9PT0gdGhpcy50ZXh0Lmxlbmd0aCAtIDEgfHxcbiAgICAgICAgICB0aGlzLm1hdGNoKG5leHRUYWcsIGZhbHNlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVuc2V0VGFnKHRhZ05hbWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVuc2V0VGFnKHRhZ05hbWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB0YWcgIHN0cmluZyB0byBtYXRjaCBpbiB0ZXh0XG4gICAqIEBwYXJhbSB7dmFsdWV9IHZhbHVlICBzdHJpbmcgdG8gcmVwbGFjZSB0YWcgd2l0aCwgaWYgZm91bmQgYXQgY3VycmVudCBwb3NpdGlvblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgdGFnIHdhcyBwcm9jZXNzZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcmVwbGFjZSh0YWcsIHZhbHVlKSB7XG4gICAgaWYgKHRoaXMubWF0Y2godGFnKSkge1xuICAgICAgdGhpcy5hZGQodmFsdWUpO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGggLSAxO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdGhlIHRhZyBpZiBpdCBpc24ndCBhbHJlYWR5IG9uZS5cbiAgICpcbiAgICogVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBhcnJheSBgW1JlZ0V4cCwgbnVtYmVyXWAsIHdpdGggZXhhY3RseSB0d28gdmFsdWUsIHdoZXJlOlxuICAgKiAgLSBSZWdFeHAgaXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB1c2VcbiAgICogIC0gbnVtYmVyIGlzIHRoZSBsZW50aCBvZiB0aGUgaW5wdXQgc3RyaW5nIHRvIG1hdGNoXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdGFnICBzdHJpbmcgdG8gbWF0Y2ggaW4gdGV4dFxuICAgKiBAcmV0dXJucyB7QXJyYXl9ICByZWd1bGFyIGV4cHJlc3Npb24gdG8gdXNlIGFuZCBsZW5ndGggb2YgaW5wdXQgc3RyaW5nIHRvIG1hdGNoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcmVwYXJlUmVnRXhwKHRhZykge1xuICAgIGxldCBsZW5ndGg7XG4gICAgbGV0IHJlZ0V4cDtcbiAgICBpZiAodGFnIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICByZWdFeHAgPSB0YWc7XG4gICAgICBsZW5ndGggPSAxOyAvLyBBU1NVTVBUSU9OOiByZWdleHAgb25seSB0ZXN0cyBvbmUgY2hhcmFjdGVyXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVzZSBwcmVwYXJlZCByZWdleHAgaWYgcHJlc2VudFxuICAgICAgY29uc3QgcHJlcGFyZWQgPSB0YWdQYXR0ZXJuW3RhZ107XG4gICAgICBpZiAocHJlcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZWdFeHAgPSBwcmVwYXJlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZ0V4cCA9IG5ldyBSZWdFeHAodGFnKTtcbiAgICAgIH1cblxuICAgICAgbGVuZ3RoID0gdGFnLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gW3JlZ0V4cCwgbGVuZ3RoXTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgTGFiZWwgd2hpY2ggZXhwbG9kZXMgdGhlIGxhYmVsIHRleHQgaW50byBsaW5lcyBhbmQgYmxvY2tzIHdpdGhpbiBsaW5lc1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIExhYmVsU3BsaXR0ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCBDYW52YXMgcmVuZGVyaW5nIGNvbnRleHRcbiAgICogQHBhcmFtIHtMYWJlbH0gcGFyZW50IHJlZmVyZW5jZSB0byB0aGUgTGFiZWwgaW5zdGFuY2UgdXNpbmcgY3VycmVudCBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKGN0eCwgcGFyZW50LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICB0aGlzLmN0eCA9IGN0eDtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgdGhpcy5ob3ZlciA9IGhvdmVyO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gZGV0ZXJtaW5lIHRleHQgd2lkdGg7IHBhc3NlZCB0byBMYWJlbEFjY3VtdWxhdG9yIGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRleHQgc3RyaW5nIHRvIGRldGVybWluZSB3aWR0aCBvZlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbW9kICBmb250IHR5cGUgdG8gdXNlIGZvciB0aGlzIHRleHRcbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSB7IHdpZHRoLCB2YWx1ZXN9IHdpZHRoIGluIHBpeGVscyBhbmQgZm9udCBhdHRyaWJ1dGVzXG4gICAgICovXG4gICAgY29uc3QgdGV4dFdpZHRoID0gKHRleHQsIG1vZCkgPT4ge1xuICAgICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG5cbiAgICAgIC8vIFRPRE86IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBlZmZpY2llbnRseSB3aXRoIGNhY2hpbmdcbiAgICAgIC8vIFRoaXMgd2lsbCBzZXQgdGhlIGN0eC5mb250IGNvcnJlY3RseSwgZGVwZW5kaW5nIG9uIHNlbGVjdGVkL2hvdmVyIGFuZCBtb2QgLSBzbyB0aGF0IGN0eC5tZWFzdXJlVGV4dCgpIHdpbGwgYmUgYWNjdXJhdGUuXG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnBhcmVudC5nZXRGb3JtYXR0aW5nVmFsdWVzKGN0eCwgc2VsZWN0ZWQsIGhvdmVyLCBtb2QpO1xuXG4gICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgaWYgKHRleHQgIT09IFwiXCIpIHtcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KHRleHQpO1xuICAgICAgICB3aWR0aCA9IG1lYXN1cmUud2lkdGg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHdpZHRoLCB2YWx1ZXM6IHZhbHVlcyB9O1xuICAgIH07XG5cbiAgICB0aGlzLmxpbmVzID0gbmV3IExhYmVsQWNjdW11bGF0b3IodGV4dFdpZHRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCBwYXNzZWQgdGV4dCBvZiBhIGxhYmVsIGludG8gbGluZXMgYW5kIGJsb2Nrcy5cbiAgICpcbiAgICogIyBOT1RFXG4gICAqXG4gICAqIFRoZSBoYW5kbGluZyBvZiBzcGFjaW5nIGlzIG9wdGlvbiBkZXBlbmRlbnQ6XG4gICAqXG4gICAqIC0gaWYgYGZvbnQubXVsdGkgOiBmYWxzZWAsIGFsbCBzcGFjZXMgYXJlIHJldGFpbmVkXG4gICAqIC0gaWYgYGZvbnQubXVsdGkgOiB0cnVlYCwgZXZlcnkgc2VxdWVuY2Ugb2Ygc3BhY2VzIGlzIGNvbXByZXNzZWQgdG8gYSBzaW5nbGUgc3BhY2VcbiAgICpcbiAgICogVGhpcyBtaWdodCBub3QgYmUgdGhlIGJlc3Qgd2F5IHRvIGRvIGl0LCBidXQgdGhpcyBpcyBhcyBpdCBoYXMgYmVlbiB3b3JraW5nIHRpbGwgbm93LlxuICAgKiBJbiBvcmRlciBub3QgdG8gYnJlYWsgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSwgZm9yIHRoZSB0aW1lIGJlaW5nIHRoaXMgYmVoYXZpb3VyIHdpbGxcbiAgICogYmUgcmV0YWluZWQgaW4gYW55IGNvZGUgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgIHRleHQgdG8gc3BsaXRcbiAgICogQHJldHVybnMge0FycmF5PGxpbmU+fVxuICAgKi9cbiAgcHJvY2Vzcyh0ZXh0KSB7XG4gICAgaWYgKCFpc1ZhbGlkTGFiZWwodGV4dCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpbmVzLmZpbmFsaXplKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZm9udCA9IHRoaXMucGFyZW50LmZvbnRPcHRpb25zO1xuXG4gICAgLy8gTm9ybWFsaXplIHRoZSBlbmQtb2YtbGluZSdzIHRvIGEgc2luZ2xlIHJlcHJlc2VudGF0aW9uIC0gb3JkZXIgaW1wb3J0YW50XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxyXFxuL2csIFwiXFxuXCIpOyAvLyBEb3MgRU9MJ3NcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXHIvZywgXCJcXG5cIik7IC8vIE1hYyBFT0wnc1xuXG4gICAgLy8gTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQsIHRoZXJlIGNhbiBiZSBubyBcXHIncyBpbiB0aGUgdGV4dC5cbiAgICAvLyBUaGlzIGlzIHVzZWQgbGF0ZXIgb24gc3BsaXRTdHJpbmdJbnRvTGluZXMoKSB0byBzcGxpdCBtdWx0aWZvbnQgdGV4dHMuXG5cbiAgICBjb25zdCBubExpbmVzID0gU3RyaW5nKHRleHQpLnNwbGl0KFwiXFxuXCIpO1xuICAgIGNvbnN0IGxpbmVDb3VudCA9IG5sTGluZXMubGVuZ3RoO1xuXG4gICAgaWYgKGZvbnQubXVsdGkpIHtcbiAgICAgIC8vIE11bHRpLWZvbnQgY2FzZTogc3R5bGluZyB0YWdzIGFjdGl2ZVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lQ291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBibG9ja3MgPSB0aGlzLnNwbGl0QmxvY2tzKG5sTGluZXNbaV0sIGZvbnQubXVsdGkpO1xuICAgICAgICAvLyBQb3N0OiBTZXF1ZW5jZXMgb2YgdGFicyBhbmQgc3BhY2VzIGFyZSByZWR1Y2VkIHRvIHNpbmdsZSBzcGFjZVxuXG4gICAgICAgIGlmIChibG9ja3MgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgICAgaWYgKGJsb2Nrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmxpbmVzLm5ld0xpbmUoXCJcIik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9udC5tYXhXZHQgPiAwKSB7XG4gICAgICAgICAgLy8gd2lkdGhDb25zdHJhaW50Lm1heGltdW0gZGVmaW5lZFxuICAgICAgICAgIC8vY29uc29sZS5sb2coJ1J1bm5pbmcgd2lkdGhDb25zdHJhaW50IG11bHRpLCBtYXg6ICcgKyB0aGlzLmZvbnRPcHRpb25zLm1heFdkdCk7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBibG9ja3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IGJsb2Nrc1tqXS5tb2Q7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gYmxvY2tzW2pdLnRleHQ7XG4gICAgICAgICAgICB0aGlzLnNwbGl0U3RyaW5nSW50b0xpbmVzKHRleHQsIG1vZCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHdpZHRoQ29uc3RyYWludC5tYXhpbXVtIE5PVCBkZWZpbmVkXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBibG9ja3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IGJsb2Nrc1tqXS5tb2Q7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gYmxvY2tzW2pdLnRleHQ7XG4gICAgICAgICAgICB0aGlzLmxpbmVzLmFwcGVuZCh0ZXh0LCBtb2QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGluZXMubmV3TGluZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTaW5nbGUtZm9udCBjYXNlXG4gICAgICBpZiAoZm9udC5tYXhXZHQgPiAwKSB7XG4gICAgICAgIC8vIHdpZHRoQ29uc3RyYWludC5tYXhpbXVtIGRlZmluZWRcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1J1bm5pbmcgd2lkdGhDb25zdHJhaW50IG5vcm1hbCwgbWF4OiAnICsgdGhpcy5mb250T3B0aW9ucy5tYXhXZHQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVDb3VudDsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5zcGxpdFN0cmluZ0ludG9MaW5lcyhubExpbmVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gd2lkdGhDb25zdHJhaW50Lm1heGltdW0gTk9UIGRlZmluZWRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lQ291bnQ7IGkrKykge1xuICAgICAgICAgIHRoaXMubGluZXMubmV3TGluZShubExpbmVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxpbmVzLmZpbmFsaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogbm9ybWFsaXplIHRoZSBtYXJrdXAgc3lzdGVtXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbnwnbWQnfCdtYXJrZG93bid8J2h0bWwnfSBtYXJrdXBTeXN0ZW1cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGRlY29kZU1hcmt1cFN5c3RlbShtYXJrdXBTeXN0ZW0pIHtcbiAgICBsZXQgc3lzdGVtID0gXCJub25lXCI7XG4gICAgaWYgKG1hcmt1cFN5c3RlbSA9PT0gXCJtYXJrZG93blwiIHx8IG1hcmt1cFN5c3RlbSA9PT0gXCJtZFwiKSB7XG4gICAgICBzeXN0ZW0gPSBcIm1hcmtkb3duXCI7XG4gICAgfSBlbHNlIGlmIChtYXJrdXBTeXN0ZW0gPT09IHRydWUgfHwgbWFya3VwU3lzdGVtID09PSBcImh0bWxcIikge1xuICAgICAgc3lzdGVtID0gXCJodG1sXCI7XG4gICAgfVxuICAgIHJldHVybiBzeXN0ZW07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgc3BsaXRIdG1sQmxvY2tzKHRleHQpIHtcbiAgICBjb25zdCBzID0gbmV3IE1hcmt1cEFjY3VtdWxhdG9yKHRleHQpO1xuXG4gICAgY29uc3QgcGFyc2VFbnRpdGllcyA9IChjaCkgPT4ge1xuICAgICAgaWYgKC8mLy50ZXN0KGNoKSkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPVxuICAgICAgICAgIHMucmVwbGFjZShzLnRleHQsIFwiJmx0O1wiLCBcIjxcIikgfHwgcy5yZXBsYWNlKHMudGV4dCwgXCImYW1wO1wiLCBcIiZcIik7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBzLmFkZChcIiZcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB3aGlsZSAocy5wb3NpdGlvbiA8IHMudGV4dC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNoID0gcy50ZXh0LmNoYXJBdChzLnBvc2l0aW9uKTtcblxuICAgICAgY29uc3QgcGFyc2VkID1cbiAgICAgICAgcy5wYXJzZVdTKGNoKSB8fFxuICAgICAgICAoLzwvLnRlc3QoY2gpICYmXG4gICAgICAgICAgKHMucGFyc2VTdGFydFRhZyhcImJvbGRcIiwgXCI8Yj5cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VTdGFydFRhZyhcIml0YWxcIiwgXCI8aT5cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VTdGFydFRhZyhcIm1vbm9cIiwgXCI8Y29kZT5cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VFbmRUYWcoXCJib2xkXCIsIFwiPC9iPlwiKSB8fFxuICAgICAgICAgICAgcy5wYXJzZUVuZFRhZyhcIml0YWxcIiwgXCI8L2k+XCIpIHx8XG4gICAgICAgICAgICBzLnBhcnNlRW5kVGFnKFwibW9ub1wiLCBcIjwvY29kZT5cIikpKSB8fFxuICAgICAgICBwYXJzZUVudGl0aWVzKGNoKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgcy5hZGQoY2gpO1xuICAgICAgfVxuICAgICAgcy5wb3NpdGlvbisrO1xuICAgIH1cbiAgICBzLmVtaXRCbG9jaygpO1xuICAgIHJldHVybiBzLmJsb2NrcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBzcGxpdE1hcmtkb3duQmxvY2tzKHRleHQpIHtcbiAgICBjb25zdCBzID0gbmV3IE1hcmt1cEFjY3VtdWxhdG9yKHRleHQpO1xuICAgIGxldCBiZWdpbmFibGUgPSB0cnVlO1xuXG4gICAgY29uc3QgcGFyc2VPdmVycmlkZSA9IChjaCkgPT4ge1xuICAgICAgaWYgKC9cXFxcLy50ZXN0KGNoKSkge1xuICAgICAgICBpZiAocy5wb3NpdGlvbiA8IHRoaXMudGV4dC5sZW5ndGggKyAxKSB7XG4gICAgICAgICAgcy5wb3NpdGlvbisrO1xuICAgICAgICAgIGNoID0gdGhpcy50ZXh0LmNoYXJBdChzLnBvc2l0aW9uKTtcbiAgICAgICAgICBpZiAoLyBcXHQvLnRlc3QoY2gpKSB7XG4gICAgICAgICAgICBzLnNwYWNpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzLmFkZChjaCk7XG4gICAgICAgICAgICBiZWdpbmFibGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB3aGlsZSAocy5wb3NpdGlvbiA8IHMudGV4dC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNoID0gcy50ZXh0LmNoYXJBdChzLnBvc2l0aW9uKTtcblxuICAgICAgY29uc3QgcGFyc2VkID1cbiAgICAgICAgcy5wYXJzZVdTKGNoKSB8fFxuICAgICAgICBwYXJzZU92ZXJyaWRlKGNoKSB8fFxuICAgICAgICAoKGJlZ2luYWJsZSB8fCBzLnNwYWNpbmcpICYmXG4gICAgICAgICAgKHMucGFyc2VTdGFydFRhZyhcImJvbGRcIiwgXCIqXCIpIHx8XG4gICAgICAgICAgICBzLnBhcnNlU3RhcnRUYWcoXCJpdGFsXCIsIFwiX1wiKSB8fFxuICAgICAgICAgICAgcy5wYXJzZVN0YXJ0VGFnKFwibW9ub1wiLCBcImBcIikpKSB8fFxuICAgICAgICBzLnBhcnNlRW5kVGFnKFwiYm9sZFwiLCBcIipcIiwgXCJhZnRlckJvbGRcIikgfHxcbiAgICAgICAgcy5wYXJzZUVuZFRhZyhcIml0YWxcIiwgXCJfXCIsIFwiYWZ0ZXJJdGFsXCIpIHx8XG4gICAgICAgIHMucGFyc2VFbmRUYWcoXCJtb25vXCIsIFwiYFwiLCBcImFmdGVyTW9ub1wiKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgcy5hZGQoY2gpO1xuICAgICAgICBiZWdpbmFibGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHMucG9zaXRpb24rKztcbiAgICB9XG4gICAgcy5lbWl0QmxvY2soKTtcbiAgICByZXR1cm4gcy5ibG9ja3M7XG4gIH1cblxuICAvKipcbiAgICogRXhwbG9kZXMgYSBwaWVjZSBvZiB0ZXh0IGludG8gc2luZ2xlLWZvbnQgYmxvY2tzIHVzaW5nIGEgZ2l2ZW4gbWFya3VwXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbnwnbWQnfCdtYXJrZG93bid8J2h0bWwnfSBtYXJrdXBTeXN0ZW1cbiAgICogQHJldHVybnMge0FycmF5Ljx7dGV4dDogc3RyaW5nLCBtb2Q6IHN0cmluZ30+fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3BsaXRCbG9ja3ModGV4dCwgbWFya3VwU3lzdGVtKSB7XG4gICAgY29uc3Qgc3lzdGVtID0gdGhpcy5kZWNvZGVNYXJrdXBTeXN0ZW0obWFya3VwU3lzdGVtKTtcbiAgICBpZiAoc3lzdGVtID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgbW9kOiBcIm5vcm1hbFwiLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9IGVsc2UgaWYgKHN5c3RlbSA9PT0gXCJtYXJrZG93blwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcGxpdE1hcmtkb3duQmxvY2tzKHRleHQpO1xuICAgIH0gZWxzZSBpZiAoc3lzdGVtID09PSBcImh0bWxcIikge1xuICAgICAgcmV0dXJuIHRoaXMuc3BsaXRIdG1sQmxvY2tzKHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0ZXh0IGxlbmd0aCBvdmVyIHRoZSBjdXJyZW50IG1heCB3aXRoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvdmVyTWF4V2lkdGgodGV4dCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5jdHgubWVhc3VyZVRleHQodGV4dCkud2lkdGg7XG4gICAgcmV0dXJuIHRoaXMubGluZXMuY3VyV2lkdGgoKSArIHdpZHRoID4gdGhpcy5wYXJlbnQuZm9udE9wdGlvbnMubWF4V2R0O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgbG9uZ2VzdCBwYXJ0IG9mIHRoZSBzZW50ZW5jZSB3aGljaCBzdGlsbCBmaXRzIGluIHRoZVxuICAgKiBjdXJyZW50IG1heCB3aWR0aC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgIEFycmF5IG9mIHN0cmluZ3Mgc2lnbmlmeWluZyBhIHRleHQgbGluZXNcbiAgICogQHJldHVybnMge251bWJlcn0gICAgICBpbmRleCBvZiBmaXJzdCBpdGVtIGluIHN0cmluZyBtYWtpbmcgc3RyaW5nIGdvIG92ZXIgbWF4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRMb25nZXN0Rml0KHdvcmRzKSB7XG4gICAgbGV0IHRleHQgPSBcIlwiO1xuICAgIGxldCB3ID0gMDtcblxuICAgIHdoaWxlICh3IDwgd29yZHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwcmUgPSB0ZXh0ID09PSBcIlwiID8gXCJcIiA6IFwiIFwiO1xuICAgICAgY29uc3QgbmV3VGV4dCA9IHRleHQgKyBwcmUgKyB3b3Jkc1t3XTtcblxuICAgICAgaWYgKHRoaXMub3Zlck1heFdpZHRoKG5ld1RleHQpKSBicmVhaztcbiAgICAgIHRleHQgPSBuZXdUZXh0O1xuICAgICAgdysrO1xuICAgIH1cblxuICAgIHJldHVybiB3O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgbG9uZ2VzdCBwYXJ0IG9mIHRoZSBzdHJpbmcgd2hpY2ggc3RpbGwgZml0cyBpbiB0aGVcbiAgICogY3VycmVudCBtYXggd2lkdGguXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIEFycmF5IG9mIHN0cmluZ3Mgc2lnbmlmeWluZyBhIHRleHQgbGluZXNcbiAgICogQHJldHVybnMge251bWJlcn0gaW5kZXggb2YgZmlyc3QgaXRlbSBpbiBzdHJpbmcgbWFraW5nIHN0cmluZyBnbyBvdmVyIG1heFxuICAgKi9cbiAgZ2V0TG9uZ2VzdEZpdFdvcmQod29yZHMpIHtcbiAgICBsZXQgdyA9IDA7XG5cbiAgICB3aGlsZSAodyA8IHdvcmRzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMub3Zlck1heFdpZHRoKHdvcmRzLnNsaWNlKDAsIHcpKSkgYnJlYWs7XG4gICAgICB3Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHc7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgdGhlIHBhc3NlZCB0ZXh0IGludG8gbGluZXMsIGFjY29yZGluZyB0byB3aWR0aCBjb25zdHJhaW50IChpZiBhbnkpLlxuICAgKlxuICAgKiBUaGUgbWV0aG9kIGFzc3VtZXMgdGhhdCB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgc2luZ2xlIGxpbmUsIGkuZS4gd2l0aG91dCBsaW5lcyBicmVhay5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgcmV0YWlucyBzcGFjZXMsIGlmIHN0aWxsIHByZXNlbnQgKGNhc2UgYGZvbnQubXVsdGk6IGZhbHNlYCkuXG4gICAqIEEgc3BhY2Ugd2hpY2ggZmFsbHMgb24gYW4gaW50ZXJuYWwgbGluZSBicmVhaywgd2lsbCBiZSByZXBsYWNlZCBieSBhIG5ld2xpbmUuXG4gICAqIFRoZXJlIGlzIG5vIHNwZWNpYWwgaGFuZGxpbmcgb2YgdGFiczsgdGhlc2UgZ28gYWxvbmcgd2l0aCB0aGUgZmxvdy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gW21vZD0nbm9ybWFsJ11cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXBwZW5kTGFzdD1mYWxzZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNwbGl0U3RyaW5nSW50b0xpbmVzKHN0ciwgbW9kID0gXCJub3JtYWxcIiwgYXBwZW5kTGFzdCA9IGZhbHNlKSB7XG4gICAgLy8gU2V0IHRoZSBjYW52YXMgY29udGV4dCBmb250LCBiYXNlZCB1cG9uIHRoZSBjdXJyZW50IHNlbGVjdGVkL2hvdmVyIHN0YXRlXG4gICAgLy8gYW5kIHRoZSBwcm92aWRlZCBtb2QsIHNvIHRoZSB0ZXh0IG1lYXN1cmVtZW50IHBlcmZvcm1lZCBieSBnZXRMb25nZXN0Rml0XG4gICAgLy8gd2lsbCBiZSBhY2N1cmF0ZSAtIGFuZCBub3QganVzdCB1c2UgdGhlIGZvbnQgb2Ygd2hvZXZlciBsYXN0IHVzZWQgdGhlIGNhbnZhcy5cbiAgICB0aGlzLnBhcmVudC5nZXRGb3JtYXR0aW5nVmFsdWVzKHRoaXMuY3R4LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyLCBtb2QpO1xuXG4gICAgLy8gU3RpbGwtcHJlc2VudCBzcGFjZXMgYXJlIHJlbGV2YW50LCByZXRhaW4gdGhlbVxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9eKCArKS9nLCBcIiQxXFxyXCIpO1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8oW15cXHJdW14gXSopKCArKS9nLCBcIiQxXFxyJDJcXHJcIik7XG4gICAgbGV0IHdvcmRzID0gc3RyLnNwbGl0KFwiXFxyXCIpO1xuXG4gICAgd2hpbGUgKHdvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCB3ID0gdGhpcy5nZXRMb25nZXN0Rml0KHdvcmRzKTtcblxuICAgICAgaWYgKHcgPT09IDApIHtcbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlOiB0aGUgZmlyc3Qgd29yZCBpcyBhbHJlYWR5IGxhcmdlciB0aGFuIHRoZSBtYXggd2lkdGguXG4gICAgICAgIGNvbnN0IHdvcmQgPSB3b3Jkc1swXTtcblxuICAgICAgICAvLyBCcmVhayB0aGUgd29yZCB0byB0aGUgbGFyZ2VzdCBwYXJ0IHRoYXQgZml0cyB0aGUgbGluZVxuICAgICAgICBjb25zdCB4ID0gdGhpcy5nZXRMb25nZXN0Rml0V29yZCh3b3JkKTtcbiAgICAgICAgdGhpcy5saW5lcy5uZXdMaW5lKHdvcmQuc2xpY2UoMCwgeCksIG1vZCk7XG5cbiAgICAgICAgLy8gQWRqdXN0IHRoZSB3b3JkLCBzbyB0aGF0IHRoZSByZXN0IHdpbGwgYmUgZG9uZSBuZXh0IGl0ZXJhdGlvblxuICAgICAgICB3b3Jkc1swXSA9IHdvcmQuc2xpY2UoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBza2lwIGFueSBzcGFjZSB0aGF0IGlzIHJlcGxhY2VkIGJ5IGEgbmV3bGluZVxuICAgICAgICBsZXQgbmV3VyA9IHc7XG4gICAgICAgIGlmICh3b3Jkc1t3IC0gMV0gPT09IFwiIFwiKSB7XG4gICAgICAgICAgdy0tO1xuICAgICAgICB9IGVsc2UgaWYgKHdvcmRzW25ld1ddID09PSBcIiBcIikge1xuICAgICAgICAgIG5ld1crKztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRleHQgPSB3b3Jkcy5zbGljZSgwLCB3KS5qb2luKFwiXCIpO1xuXG4gICAgICAgIGlmICh3ID09IHdvcmRzLmxlbmd0aCAmJiBhcHBlbmRMYXN0KSB7XG4gICAgICAgICAgdGhpcy5saW5lcy5hcHBlbmQodGV4dCwgbW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxpbmVzLm5ld0xpbmUodGV4dCwgbW9kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkanVzdCB0aGUgd29yZCwgc28gdGhhdCB0aGUgcmVzdCB3aWxsIGJlIGRvbmUgbmV4dCBpdGVyYXRpb25cbiAgICAgICAgd29yZHMgPSB3b3Jkcy5zbGljZShuZXdXKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGFiZWxTcGxpdHRlcjtcbiIsICJpbXBvcnQgeyBkZWVwRXh0ZW5kLCBmb3JFYWNoLCBvdmVycmlkZU9wYWNpdHksIHRvcE1vc3QgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBjaG9vc2lmeSwgaXNWYWxpZExhYmVsIH0gZnJvbSBcIi4vQ29tcG9uZW50VXRpbFwiO1xuaW1wb3J0IExhYmVsU3BsaXR0ZXIgZnJvbSBcIi4vTGFiZWxTcGxpdHRlclwiO1xuXG4vKipcbiAqIExpc3Qgb2Ygc3BlY2lhbCBzdHlsZXMgZm9yIG11bHRpLWZvbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgbXVsdGlGb250U3R5bGUgPSBbXCJib2xkXCIsIFwiaXRhbFwiLCBcImJvbGRpdGFsXCIsIFwibW9ub1wiXTtcblxuLyoqXG4gKiBBIExhYmVsIHRvIGJlIHVzZWQgZm9yIE5vZGVzIG9yIEVkZ2VzLlxuICovXG5jbGFzcyBMYWJlbCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtlZGdlbGFiZWw9ZmFsc2VdXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBvcHRpb25zLCBlZGdlbGFiZWwgPSBmYWxzZSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5wb2ludFRvU2VsZiA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZVNpemUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mb250T3B0aW9ucyA9IHt9OyAvLyBpbnN0YW5jZSB2YXJpYWJsZSBjb250YWluaW5nIHRoZSAqaW5zdGFuY2UtbG9jYWwqIGZvbnQgb3B0aW9uc1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB0aGlzLnNpemUgPSB7IHRvcDogMCwgbGVmdDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCwgeUxpbmU6IDAgfTtcbiAgICB0aGlzLmlzRWRnZUxhYmVsID0gZWRnZWxhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIHRoZSBvcHRpb25zIG9mIHRoZSBwYXJlbnQgTm9kZS1pbnN0YW5jZVxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5lbGVtZW50T3B0aW9ucyA9IG9wdGlvbnM7IC8vIFJlZmVyZW5jZSB0byB0aGUgb3B0aW9ucyBvZiB0aGUgcGFyZW50IE5vZGUtaW5zdGFuY2VcblxuICAgIHRoaXMuaW5pdEZvbnRPcHRpb25zKG9wdGlvbnMuZm9udCk7XG5cbiAgICBpZiAoaXNWYWxpZExhYmVsKG9wdGlvbnMubGFiZWwpKSB7XG4gICAgICB0aGlzLmxhYmVsRGlydHkgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCYWQgbGFiZWwhIENoYW5nZSB0aGUgb3B0aW9uIHZhbHVlIHRvIHByZXZlbnQgYmFkIHN0dWZmIGhhcHBlbmluZ1xuICAgICAgb3B0aW9ucy5sYWJlbCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5mb250ICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5mb250ICE9PSBudWxsKSB7XG4gICAgICAvLyBmb250IG9wdGlvbnMgY2FuIGJlIGRlbGV0ZWQgYXQgdmFyaW91cyBsZXZlbHNcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mb250ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMuYmFzZVNpemUgPSB0aGlzLmZvbnRPcHRpb25zLnNpemU7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmZvbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IG9wdGlvbnMuZm9udC5zaXplO1xuXG4gICAgICAgIGlmIChzaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmJhc2VTaXplID0gc2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0IHRoZSBmb250IE9wdGlvbnMgc3RydWN0dXJlLlxuICAgKlxuICAgKiBNZW1iZXIgZm9udE9wdGlvbnMgc2VydmVzIGFzIGFuIGFjY3VtdWxhdG9yIGZvciB0aGUgY3VycmVudCBmb250IG9wdGlvbnMuXG4gICAqIEFzIHN1Y2gsIGl0IG5lZWRzIHRvIGJlIGNvbXBsZXRlbHkgc2VwYXJhdGVkIGZyb20gdGhlIG5vZGUgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld0ZvbnRPcHRpb25zIHRoZSBuZXcgZm9udCBvcHRpb25zIHRvIHByb2Nlc3NcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluaXRGb250T3B0aW9ucyhuZXdGb250T3B0aW9ucykge1xuICAgIC8vIFByZXBhcmUgdGhlIG11bHRpLWZvbnQgb3B0aW9uIG9iamVjdHMuXG4gICAgLy8gVGhlc2Ugd2lsbCBiZSBmaWxsZWQgaW4gcHJvcGFnYXRlRm9udHMoKSwgaWYgcmVxdWlyZWRcbiAgICBmb3JFYWNoKG11bHRpRm9udFN0eWxlLCAoc3R5bGUpID0+IHtcbiAgICAgIHRoaXMuZm9udE9wdGlvbnNbc3R5bGVdID0ge307XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgc2hvcnRoYW5kIG9wdGlvbiwgaWYgcHJlc2VudFxuICAgIGlmIChMYWJlbC5wYXJzZUZvbnRTdHJpbmcodGhpcy5mb250T3B0aW9ucywgbmV3Rm9udE9wdGlvbnMpKSB7XG4gICAgICB0aGlzLmZvbnRPcHRpb25zLnZhZGp1c3QgPSAwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENvcHkgb3ZlciB0aGUgbm9uLW11bHRpZm9udCBvcHRpb25zLCBpZiBzcGVjaWZpZWRcbiAgICBmb3JFYWNoKG5ld0ZvbnRPcHRpb25zLCAocHJvcCwgbikgPT4ge1xuICAgICAgaWYgKHByb3AgIT09IHVuZGVmaW5lZCAmJiBwcm9wICE9PSBudWxsICYmIHR5cGVvZiBwcm9wICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRoaXMuZm9udE9wdGlvbnNbbl0gPSBwcm9wO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGluLXZhcmlhYmxlIGlzIGEgc3RyaW5nLCBwYXJzZSBpdCBhcyBhIGZvbnQgc3BlY2lmaWVyLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgZm9sbG93aW5nIGlzIG5vdCBkb25lIGhlcmUgYW5kIGhhdmUgdG8gYmUgZG9uZSBhZnRlciB0aGUgY2FsbDpcbiAgICogLSBOb3QgYWxsIGZvbnQgb3B0aW9ucyBhcmUgc2V0ICh2YWRqdXN0LCBtb2QpXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvdXRPcHRpb25zICBvdXQtcGFyYW1ldGVyLCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHBhcnNlIHJlc3VsdHMgKGlmIGFueSlcbiAgICogQHBhcmFtIHtvYmplY3R9IGluT3B0aW9ucyAgZm9udCBvcHRpb25zIHRvIHBhcnNlXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGZvbnQgcGFyc2VkIGFzIHN0cmluZywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZUZvbnRTdHJpbmcob3V0T3B0aW9ucywgaW5PcHRpb25zKSB7XG4gICAgaWYgKCFpbk9wdGlvbnMgfHwgdHlwZW9mIGluT3B0aW9ucyAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgbmV3T3B0aW9uc0FycmF5ID0gaW5PcHRpb25zLnNwbGl0KFwiIFwiKTtcblxuICAgIG91dE9wdGlvbnMuc2l6ZSA9ICtuZXdPcHRpb25zQXJyYXlbMF0ucmVwbGFjZShcInB4XCIsIFwiXCIpO1xuICAgIG91dE9wdGlvbnMuZmFjZSA9IG5ld09wdGlvbnNBcnJheVsxXTtcbiAgICBvdXRPcHRpb25zLmNvbG9yID0gbmV3T3B0aW9uc0FycmF5WzJdO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGNvbnN0cmFpbnRzIGJhc2VkIG9uICduZWFyZXN0JyB2YWx1ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwaWxlIGFycmF5IG9mIG9wdGlvbiBvYmplY3RzIHRvIGNvbnNpZGVyXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IHRoZSBhY3R1YWwgY29uc3RyYWludCB2YWx1ZXMgdG8gdXNlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJhaW4ocGlsZSkge1xuICAgIC8vIE5PVEU6IGNvbnN0cmFpbldpZHRoIGFuZCAgY29uc3RyYWluSGVpZ2h0IG5ldmVyIHNldCFcbiAgICAvLyBOT1RFOiBmb3IgZWRnZSBsYWJlbHMsIG9ubHkgJ21heFdkdCcgc2V0XG4gICAgLy8gTm9kZSBsYWJlbHMgY2FuIHNldCBhbGwgdGhlIGZpZWxkc1xuICAgIGNvbnN0IGZvbnRPcHRpb25zID0ge1xuICAgICAgY29uc3RyYWluV2lkdGg6IGZhbHNlLFxuICAgICAgbWF4V2R0OiAtMSxcbiAgICAgIG1pbldkdDogLTEsXG4gICAgICBjb25zdHJhaW5IZWlnaHQ6IGZhbHNlLFxuICAgICAgbWluSGd0OiAtMSxcbiAgICAgIHZhbGlnbjogXCJtaWRkbGVcIixcbiAgICB9O1xuXG4gICAgY29uc3Qgd2lkdGhDb25zdHJhaW50ID0gdG9wTW9zdChwaWxlLCBcIndpZHRoQ29uc3RyYWludFwiKTtcbiAgICBpZiAodHlwZW9mIHdpZHRoQ29uc3RyYWludCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZm9udE9wdGlvbnMubWF4V2R0ID0gTnVtYmVyKHdpZHRoQ29uc3RyYWludCk7XG4gICAgICBmb250T3B0aW9ucy5taW5XZHQgPSBOdW1iZXIod2lkdGhDb25zdHJhaW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aWR0aENvbnN0cmFpbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGNvbnN0IHdpZHRoQ29uc3RyYWludE1heGltdW0gPSB0b3BNb3N0KHBpbGUsIFtcbiAgICAgICAgXCJ3aWR0aENvbnN0cmFpbnRcIixcbiAgICAgICAgXCJtYXhpbXVtXCIsXG4gICAgICBdKTtcbiAgICAgIGlmICh0eXBlb2Ygd2lkdGhDb25zdHJhaW50TWF4aW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBmb250T3B0aW9ucy5tYXhXZHQgPSBOdW1iZXIod2lkdGhDb25zdHJhaW50TWF4aW11bSk7XG4gICAgICB9XG4gICAgICBjb25zdCB3aWR0aENvbnN0cmFpbnRNaW5pbXVtID0gdG9wTW9zdChwaWxlLCBbXG4gICAgICAgIFwid2lkdGhDb25zdHJhaW50XCIsXG4gICAgICAgIFwibWluaW11bVwiLFxuICAgICAgXSk7XG4gICAgICBpZiAodHlwZW9mIHdpZHRoQ29uc3RyYWludE1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgZm9udE9wdGlvbnMubWluV2R0ID0gTnVtYmVyKHdpZHRoQ29uc3RyYWludE1pbmltdW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhlaWdodENvbnN0cmFpbnQgPSB0b3BNb3N0KHBpbGUsIFwiaGVpZ2h0Q29uc3RyYWludFwiKTtcbiAgICBpZiAodHlwZW9mIGhlaWdodENvbnN0cmFpbnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGZvbnRPcHRpb25zLm1pbkhndCA9IE51bWJlcihoZWlnaHRDb25zdHJhaW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBoZWlnaHRDb25zdHJhaW50ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBjb25zdCBoZWlnaHRDb25zdHJhaW50TWluaW11bSA9IHRvcE1vc3QocGlsZSwgW1xuICAgICAgICBcImhlaWdodENvbnN0cmFpbnRcIixcbiAgICAgICAgXCJtaW5pbXVtXCIsXG4gICAgICBdKTtcbiAgICAgIGlmICh0eXBlb2YgaGVpZ2h0Q29uc3RyYWludE1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgZm9udE9wdGlvbnMubWluSGd0ID0gTnVtYmVyKGhlaWdodENvbnN0cmFpbnRNaW5pbXVtKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhlaWdodENvbnN0cmFpbnRWYWxpZ24gPSB0b3BNb3N0KHBpbGUsIFtcbiAgICAgICAgXCJoZWlnaHRDb25zdHJhaW50XCIsXG4gICAgICAgIFwidmFsaWduXCIsXG4gICAgICBdKTtcbiAgICAgIGlmICh0eXBlb2YgaGVpZ2h0Q29uc3RyYWludFZhbGlnbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaGVpZ2h0Q29uc3RyYWludFZhbGlnbiA9PT0gXCJ0b3BcIiB8fFxuICAgICAgICAgIGhlaWdodENvbnN0cmFpbnRWYWxpZ24gPT09IFwiYm90dG9tXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9udE9wdGlvbnMudmFsaWduID0gaGVpZ2h0Q29uc3RyYWludFZhbGlnbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb250T3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgb3B0aW9ucyBhbmQgdXBkYXRlIGludGVybmFsIHN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICBvcHRpb25zIHRvIHNldFxuICAgKiBAcGFyYW0ge0FycmF5fSAgcGlsZSAgICAgYXJyYXkgb2Ygb3B0aW9uIG9iamVjdHMgdG8gY29uc2lkZXIgZm9yIG9wdGlvbiAnY2hvc2VuJ1xuICAgKi9cbiAgdXBkYXRlKG9wdGlvbnMsIHBpbGUpIHtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucywgdHJ1ZSk7XG4gICAgdGhpcy5wcm9wYWdhdGVGb250cyhwaWxlKTtcbiAgICBkZWVwRXh0ZW5kKHRoaXMuZm9udE9wdGlvbnMsIHRoaXMuY29uc3RyYWluKHBpbGUpKTtcbiAgICB0aGlzLmZvbnRPcHRpb25zLmNob29zZXIgPSBjaG9vc2lmeShcImxhYmVsXCIsIHBpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gbWFyZ2lucyBhcmUgc2V0IGluIGFuIGVsZW1lbnQsIGFkanVzdCBzaXplcyBpcyBjYWxsZWQgdG8gcmVtb3ZlIHRoZW1cbiAgICogZnJvbSB0aGUgd2lkdGgvaGVpZ2h0IGNvbnN0cmFpbnRzLiBUaGlzIG11c3QgYmUgZG9uZSBwcmlvciB0byBsYWJlbCBzaXppbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7e3RvcDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBib3R0b206IG51bWJlciwgbGVmdDogbnVtYmVyfX0gbWFyZ2luc1xuICAgKi9cbiAgYWRqdXN0U2l6ZXMobWFyZ2lucykge1xuICAgIGNvbnN0IHdpZHRoQmlhcyA9IG1hcmdpbnMgPyBtYXJnaW5zLnJpZ2h0ICsgbWFyZ2lucy5sZWZ0IDogMDtcbiAgICBpZiAodGhpcy5mb250T3B0aW9ucy5jb25zdHJhaW5XaWR0aCkge1xuICAgICAgdGhpcy5mb250T3B0aW9ucy5tYXhXZHQgLT0gd2lkdGhCaWFzO1xuICAgICAgdGhpcy5mb250T3B0aW9ucy5taW5XZHQgLT0gd2lkdGhCaWFzO1xuICAgIH1cbiAgICBjb25zdCBoZWlnaHRCaWFzID0gbWFyZ2lucyA/IG1hcmdpbnMudG9wICsgbWFyZ2lucy5ib3R0b20gOiAwO1xuICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLmNvbnN0cmFpbkhlaWdodCkge1xuICAgICAgdGhpcy5mb250T3B0aW9ucy5taW5IZ3QgLT0gaGVpZ2h0QmlhcztcbiAgICB9XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gTWV0aG9kcyBmb3IgaGFuZGxpbmcgb3B0aW9ucyBwaWxlc1xuICAvLyBFdmVudHVhbGx5LCB0aGVzZSB3aWxsIGJlIG1vdmVkIHRvIGEgc2VwYXJhdGUgY2xhc3NcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZm9udCBtZW1iZXJzIG9mIHRoZSBwYXNzZWQgbGlzdCBvZiBvcHRpb24gb2JqZWN0cyB0byB0aGUgcGlsZS5cbiAgICpcbiAgICogQHBhcmFtIHtQaWxlfSBkc3RQaWxlICBwaWxlIG9mIG9wdGlvbiBvYmplY3RzIGFkZCB0b1xuICAgKiBAcGFyYW0ge1BpbGV9IHNyY1BpbGUgIHBpbGUgb2Ygb3B0aW9uIG9iamVjdHMgdG8gdGFrZSBmb250IG9wdGlvbnMgZnJvbVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkRm9udE9wdGlvbnNUb1BpbGUoZHN0UGlsZSwgc3JjUGlsZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3JjUGlsZS5sZW5ndGg7ICsraSkge1xuICAgICAgdGhpcy5hZGRGb250VG9QaWxlKGRzdFBpbGUsIHNyY1BpbGVbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZ2l2ZW4gZm9udCBvcHRpb24gb2JqZWN0IHRvIHRoZSBsaXN0IG9mIG9iamVjdHMgKHRoZSAncGlsZScpIHRvIGNvbnNpZGVyIGZvciBkZXRlcm1pbmluZ1xuICAgKiBtdWx0aS1mb250IG9wdGlvbiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UGlsZX0gcGlsZSAgcGlsZSBvZiBvcHRpb24gb2JqZWN0cyB0byB1c2VcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgIGluc3RhbmNlIHRvIGFkZCB0byBwaWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhZGRGb250VG9QaWxlKHBpbGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgaWYgKG9wdGlvbnMuZm9udCA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuZm9udCA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgaXRlbSA9IG9wdGlvbnMuZm9udDtcbiAgICBwaWxlLnB1c2goaXRlbSk7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdCBhbGwgb3duLXByb3BlcnR5IHZhbHVlcyBmcm9tIHRoZSBmb250IHBpbGUgdGhhdCBhcmVuJ3QgbXVsdGktZm9udCBvcHRpb24gb2JqZWN0c3MuXG4gICAqXG4gICAqIEBwYXJhbSB7UGlsZX0gcGlsZSAgcGlsZSBvZiBvcHRpb24gb2JqZWN0cyB0byB1c2VcbiAgICogQHJldHVybnMge29iamVjdH0gb2JqZWN0IHdpdGggYWxsIGN1cnJlbnQgb3duIGJhc2ljIGZvbnQgcHJvcGVydGllc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0QmFzaWNPcHRpb25zKHBpbGUpIHtcbiAgICBjb25zdCByZXQgPSB7fTtcblxuICAgIC8vIFNjYW5zIHRoZSB3aG9sZSBwaWxlIHRvIGdldCBhbGwgb3B0aW9ucyBwcmVzZW50XG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCBwaWxlLmxlbmd0aDsgKytuKSB7XG4gICAgICBsZXQgZm9udE9wdGlvbnMgPSBwaWxlW25dO1xuXG4gICAgICAvLyBDb252ZXJ0IHNob3J0aGFuZCBpZiBuZWNlc3NhcnlcbiAgICAgIGNvbnN0IHRtcFNob3J0aGFuZCA9IHt9O1xuICAgICAgaWYgKExhYmVsLnBhcnNlRm9udFN0cmluZyh0bXBTaG9ydGhhbmQsIGZvbnRPcHRpb25zKSkge1xuICAgICAgICBmb250T3B0aW9ucyA9IHRtcFNob3J0aGFuZDtcbiAgICAgIH1cblxuICAgICAgZm9yRWFjaChmb250T3B0aW9ucywgKG9wdCwgbmFtZSkgPT4ge1xuICAgICAgICBpZiAob3B0ID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gbXVsdGktZm9udCBvcHRpb24gbmVlZCBub3QgYmUgcHJlc2VudFxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJldCwgbmFtZSkpIHJldHVybjsgLy8gS2VlcCBmaXJzdCB2YWx1ZSB3ZSBlbmNvdW50ZXJcblxuICAgICAgICBpZiAobXVsdGlGb250U3R5bGUuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAvLyBTa2lwIG11bHRpLWZvbnQgcHJvcGVydGllcyBidXQgd2UgZG8gbmVlZCB0aGUgc3RydWN0dXJlXG4gICAgICAgICAgcmV0W25hbWVdID0ge307XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0W25hbWVdID0gb3B0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdmFsdWUgZm9yIGdpdmVuIG9wdGlvbiBmb3IgdGhlIGdpdmVuIG11bHRpLWZvbnQuXG4gICAqXG4gICAqIEFsbCBhdmFpbGFibGUgb3B0aW9uIG9iamVjdHMgYXJlIHRyYXdsZWQgaW4gdGhlIHNldCBvcmRlciB0byBjb25zdHJ1Y3QgdGhlIG9wdGlvbiB2YWx1ZXMuXG4gICAqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiAjIyBUcmF2ZXJzYWwgb2YgcGlsZSBmb3IgbXVsdGktZm9udHNcbiAgICpcbiAgICogVGhlIGRldGVybWluYXRpb24gb2YgbXVsdGktZm9udCBvcHRpb24gdmFsdWVzIGlzIGEgc3BlY2lhbCBjYXNlLCBiZWNhdXNlIGFueSB2YWx1ZXMgbm90XG4gICAqIHByZXNlbnQgaW4gdGhlIG11bHRpLWZvbnQgb3B0aW9ucyBzaG91bGQgYnkgZGVmaW5pdGlvbiBiZSB0YWtlbiBmcm9tIHRoZSBtYWluIGZvbnQgb3B0aW9ucyxcbiAgICogaS5lLiBmcm9tIHRoZSBjdXJyZW50ICdwYXJlbnQnIG9iamVjdCBvZiB0aGUgbXVsdGktZm9udCBvcHRpb24uXG4gICAqXG4gICAqICMjIyBTZWFyY2ggb3JkZXIgZm9yIG11bHRpLWZvbnRzXG4gICAqXG4gICAqICdib2xkJyB1c2VkIGFzIGV4YW1wbGU6XG4gICAqXG4gICAqICAgLSBzZWFyY2ggaW4gb3B0aW9uIGdyb3VwICdib2xkJyBpbiBsb2NhbCBwcm9wZXJ0aWVzXG4gICAqICAgLSBzZWFyY2ggaW4gbWFpbiBmb250IG9wdGlvbiBncm91cCBpbiBsb2NhbCBwcm9wZXJ0aWVzXG4gICAqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKlxuICAgKiBAcGFyYW0ge1BpbGV9IHBpbGUgIHBpbGUgb2Ygb3B0aW9uIG9iamVjdHMgdG8gdXNlXG4gICAqIEBwYXJhbSB7TXVsdGlGb250U3R5bGV9IG11bHRpTmFtZSBzdWIgcGF0aCBmb3IgdGhlIG11bHRpLWZvbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbiAgdGhlIG9wdGlvbiB0byBzZWFyY2ggZm9yLCBmb3IgdGhlIGdpdmVuIG11bHRpLWZvbnRcbiAgICogQHJldHVybnMge3N0cmluZ3xudW1iZXJ9IHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0Rm9udE9wdGlvbihwaWxlLCBtdWx0aU5hbWUsIG9wdGlvbikge1xuICAgIGxldCBtdWx0aUZvbnQ7XG5cbiAgICAvLyBTZWFyY2ggbXVsdGkgZm9udCBpbiBsb2NhbCBwcm9wZXJ0aWVzXG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCBwaWxlLmxlbmd0aDsgKytuKSB7XG4gICAgICBjb25zdCBmb250T3B0aW9ucyA9IHBpbGVbbl07XG5cbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9udE9wdGlvbnMsIG11bHRpTmFtZSkpIHtcbiAgICAgICAgbXVsdGlGb250ID0gZm9udE9wdGlvbnNbbXVsdGlOYW1lXTtcbiAgICAgICAgaWYgKG11bHRpRm9udCA9PT0gdW5kZWZpbmVkIHx8IG11bHRpRm9udCA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgICAgLy8gQ29udmVydCBzaG9ydGhhbmQgaWYgbmVjZXNzYXJ5XG4gICAgICAgIC8vIFRPRE86IGluZWZmaWNpZW50IHRvIGRvIHRoaXMgY29udmVyc2lvbiBldmVyeSB0aW1lOyBmaW5kIGEgYmV0dGVyIHdheS5cbiAgICAgICAgY29uc3QgdG1wU2hvcnRoYW5kID0ge307XG4gICAgICAgIGlmIChMYWJlbC5wYXJzZUZvbnRTdHJpbmcodG1wU2hvcnRoYW5kLCBtdWx0aUZvbnQpKSB7XG4gICAgICAgICAgbXVsdGlGb250ID0gdG1wU2hvcnRoYW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtdWx0aUZvbnQsIG9wdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gbXVsdGlGb250W29wdGlvbl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPcHRpb24gaXMgbm90IG1lbnRpb25lZCBpbiB0aGUgbXVsdGkgZm9udCBvcHRpb25zOyB0YWtlIGl0IGZyb20gdGhlIHBhcmVudCBmb250IG9wdGlvbnMuXG4gICAgLy8gVGhlc2UgaGF2ZSBhbHJlYWR5IGJlZW4gY29udmVydGVkIHdpdGggZ2V0QmFzaWNPcHRpb25zKCksIHNvIHVzZSB0aGUgY29udmVydGVkIHZhbHVlcy5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZm9udE9wdGlvbnMsIG9wdGlvbikpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvbnRPcHRpb25zW29wdGlvbl07XG4gICAgfVxuXG4gICAgLy8gQSB2YWx1ZSAqKm11c3QqKiBiZSBmb3VuZDsgeW91IHNob3VsZCBuZXZlciBnZXQgaGVyZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkRpZCBub3QgZmluZCB2YWx1ZSBmb3IgbXVsdGktZm9udCBmb3IgcHJvcGVydHk6ICdcIiArIG9wdGlvbiArIFwiJ1wiXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIG9wdGlvbnMgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gbXVsdGktZm9udC5cbiAgICpcbiAgICogQWxsIGF2YWlsYWJsZSBvcHRpb24gb2JqZWN0cyBhcmUgdHJhd2xlZCBpbiB0aGUgc2V0IG9yZGVyIHRvIGNvbnN0cnVjdCB0aGUgb3B0aW9uIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtQaWxlfSBwaWxlICBwaWxlIG9mIG9wdGlvbiBvYmplY3RzIHRvIHVzZVxuICAgKiBAcGFyYW0ge011bHRpRm9udFN0eWxlfSBtdWx0aU5hbWUgc3ViIHBhdGggZm9yIHRoZSBtb2QtZm9udFxuICAgKiBAcmV0dXJucyB7TXVsdGlGb250T3B0aW9uc31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldEZvbnRPcHRpb25zKHBpbGUsIG11bHRpTmFtZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IG9wdGlvbk5hbWVzID0gW1wiY29sb3JcIiwgXCJzaXplXCIsIFwiZmFjZVwiLCBcIm1vZFwiLCBcInZhZGp1c3RcIl07IC8vIExpc3Qgb2YgYWxsb3dlZCBvcHRpb25zIHBlciBtdWx0aS1mb250XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbk5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBtb2QgPSBvcHRpb25OYW1lc1tpXTtcbiAgICAgIHJlc3VsdFttb2RdID0gdGhpcy5nZXRGb250T3B0aW9uKHBpbGUsIG11bHRpTmFtZSwgbW9kKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIEVuZCBtZXRob2RzIGZvciBoYW5kbGluZyBvcHRpb25zIHBpbGVzXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBDb2xsYXBzZSB0aGUgZm9udCBvcHRpb25zIGZvciB0aGUgbXVsdGktZm9udCB0byBzaW5nbGUgb2JqZWN0cywgZnJvbVxuICAgKiB0aGUgY2hhaW4gb2Ygb3B0aW9uIG9iamVjdHMgcGFzc2VkICh0aGUgJ3BpbGUnKS5cbiAgICpcbiAgICogQHBhcmFtIHtQaWxlfSBwaWxlICBzZXF1ZW5jZSBvZiBvcHRpb24gb2JqZWN0cyB0byBjb25zaWRlci5cbiAgICogICAgICAgICAgICAgICAgICAgICBGaXJzdCBpdGVtIGluIGxpc3QgYXNzdW1lZCB0byBiZSB0aGUgbmV3bHkgc2V0IG9wdGlvbnMuXG4gICAqL1xuICBwcm9wYWdhdGVGb250cyhwaWxlKSB7XG4gICAgY29uc3QgZm9udFBpbGUgPSBbXTsgLy8gc2VxdWVuY2Ugb2YgZm9udCBvYmplY3RzIHRvIGNvbnNpZGVyLCBvcmRlciBpbXBvcnRhbnRcblxuICAgIC8vIE5vdGUgdGhhdCB0aGlzLmVsZW1lbnRPcHRpb25zIGlzIG5vdCB1c2VkIGhlcmUuXG4gICAgdGhpcy5hZGRGb250T3B0aW9uc1RvUGlsZShmb250UGlsZSwgcGlsZSk7XG4gICAgdGhpcy5mb250T3B0aW9ucyA9IHRoaXMuZ2V0QmFzaWNPcHRpb25zKGZvbnRQaWxlKTtcblxuICAgIC8vIFdlIHNldCBtdWx0aWZvbnQgdmFsdWVzIGV2ZW4gaWYgbXVsdGkgPT09IGZhbHNlLCBmb3IgY29uc2lzdGVuY3kgKHRoaW5ncyBicmVhayBvdGhlcndpc2UpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtdWx0aUZvbnRTdHlsZS5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgbW9kID0gbXVsdGlGb250U3R5bGVbaV07XG4gICAgICBjb25zdCBtb2RPcHRpb25zID0gdGhpcy5mb250T3B0aW9uc1ttb2RdO1xuICAgICAgY29uc3QgdG1wTXVsdGlGb250T3B0aW9ucyA9IHRoaXMuZ2V0Rm9udE9wdGlvbnMoZm9udFBpbGUsIG1vZCk7XG5cbiAgICAgIC8vIENvcHkgb3ZlciBmb3VuZCB2YWx1ZXNcbiAgICAgIGZvckVhY2godG1wTXVsdGlGb250T3B0aW9ucywgKG9wdGlvbiwgbikgPT4ge1xuICAgICAgICBtb2RPcHRpb25zW25dID0gb3B0aW9uO1xuICAgICAgfSk7XG5cbiAgICAgIG1vZE9wdGlvbnMuc2l6ZSA9IE51bWJlcihtb2RPcHRpb25zLnNpemUpO1xuICAgICAgbW9kT3B0aW9ucy52YWRqdXN0ID0gTnVtYmVyKG1vZE9wdGlvbnMudmFkanVzdCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24uIFRoaXMgaXMgY2FsbGVkIGZyb20gYW55dGhpbmcgdGhhdCB3YW50cyB0byBkcmF3IGEgbGFiZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZWxpbmU9J21pZGRsZSddXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCBiYXNlbGluZSA9IFwibWlkZGxlXCIpIHtcbiAgICAvLyBpZiBubyBsYWJlbCwgcmV0dXJuXG4gICAgaWYgKHRoaXMuZWxlbWVudE9wdGlvbnMubGFiZWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG4gICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byByZW5kZXIgdGhlIGxhYmVsXG4gICAgbGV0IHZpZXdGb250U2l6ZSA9IHRoaXMuZm9udE9wdGlvbnMuc2l6ZSAqIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZWxlbWVudE9wdGlvbnMubGFiZWwgJiZcbiAgICAgIHZpZXdGb250U2l6ZSA8IHRoaXMuZWxlbWVudE9wdGlvbnMuc2NhbGluZy5sYWJlbC5kcmF3VGhyZXNob2xkIC0gMVxuICAgIClcbiAgICAgIHJldHVybjtcblxuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZXJlIHdpbGwgbm90IGJlIEhVR0UgbGV0dGVycyBvbiBzY3JlZW5cbiAgICAvLyBieSBzZXR0aW5nIGFuIHVwcGVyIGxpbWl0IG9uIHRoZSB2aXNpYmxlIHRleHQgc2l6ZSAocmVnYXJkbGVzcyBvZiB6b29tTGV2ZWwpXG4gICAgaWYgKHZpZXdGb250U2l6ZSA+PSB0aGlzLmVsZW1lbnRPcHRpb25zLnNjYWxpbmcubGFiZWwubWF4VmlzaWJsZSkge1xuICAgICAgdmlld0ZvbnRTaXplID1cbiAgICAgICAgTnVtYmVyKHRoaXMuZWxlbWVudE9wdGlvbnMuc2NhbGluZy5sYWJlbC5tYXhWaXNpYmxlKSAvXG4gICAgICAgIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSB0aGUgc2l6ZSBjYWNoZSBpZiByZXF1aXJlZFxuICAgIHRoaXMuY2FsY3VsYXRlTGFiZWxTaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyLCB4LCB5LCBiYXNlbGluZSk7XG4gICAgdGhpcy5fZHJhd0JhY2tncm91bmQoY3R4KTtcbiAgICB0aGlzLl9kcmF3VGV4dChjdHgsIHgsIHRoaXMuc2l6ZS55TGluZSwgYmFzZWxpbmUsIHZpZXdGb250U2l6ZSk7XG4gIH1cblxuICAvKipcbiAgICogRHJhd3MgdGhlIGxhYmVsIGJhY2tncm91bmRcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdCYWNrZ3JvdW5kKGN0eCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9udE9wdGlvbnMuYmFja2dyb3VuZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmZvbnRPcHRpb25zLmJhY2tncm91bmQgIT09IFwibm9uZVwiXG4gICAgKSB7XG4gICAgICBjdHguZmlsbFN0eWxlID0gdGhpcy5mb250T3B0aW9ucy5iYWNrZ3JvdW5kO1xuICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuICAgICAgY3R4LmZpbGxSZWN0KHNpemUubGVmdCwgc2l6ZS50b3AsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Jhc2VsaW5lPSdtaWRkbGUnXVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmlld0ZvbnRTaXplXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd1RleHQoY3R4LCB4LCB5LCBiYXNlbGluZSA9IFwibWlkZGxlXCIsIHZpZXdGb250U2l6ZSkge1xuICAgIFt4LCB5XSA9IHRoaXMuX3NldEFsaWdubWVudChjdHgsIHgsIHksIGJhc2VsaW5lKTtcblxuICAgIGN0eC50ZXh0QWxpZ24gPSBcImxlZnRcIjtcbiAgICB4ID0geCAtIHRoaXMuc2l6ZS53aWR0aCAvIDI7IC8vIFNoaWZ0IGxhYmVsIDEvMi1kaXN0YW5jZSB0byB0aGUgbGVmdFxuICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLnZhbGlnbiAmJiB0aGlzLnNpemUuaGVpZ2h0ID4gdGhpcy5zaXplLmxhYmVsSGVpZ2h0KSB7XG4gICAgICBpZiAodGhpcy5mb250T3B0aW9ucy52YWxpZ24gPT09IFwidG9wXCIpIHtcbiAgICAgICAgeSAtPSAodGhpcy5zaXplLmhlaWdodCAtIHRoaXMuc2l6ZS5sYWJlbEhlaWdodCkgLyAyO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZm9udE9wdGlvbnMudmFsaWduID09PSBcImJvdHRvbVwiKSB7XG4gICAgICAgIHkgKz0gKHRoaXMuc2l6ZS5oZWlnaHQgLSB0aGlzLnNpemUubGFiZWxIZWlnaHQpIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkcmF3IHRoZSB0ZXh0XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1tpXTtcbiAgICAgIGlmIChsaW5lICYmIGxpbmUuYmxvY2tzKSB7XG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgIGlmICh0aGlzLmlzRWRnZUxhYmVsIHx8IHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwiY2VudGVyXCIpIHtcbiAgICAgICAgICB3aWR0aCArPSAodGhpcy5zaXplLndpZHRoIC0gbGluZS53aWR0aCkgLyAyO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwicmlnaHRcIikge1xuICAgICAgICAgIHdpZHRoICs9IHRoaXMuc2l6ZS53aWR0aCAtIGxpbmUud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lLmJsb2Nrcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGNvbnN0IGJsb2NrID0gbGluZS5ibG9ja3Nbal07XG4gICAgICAgICAgY3R4LmZvbnQgPSBibG9jay5mb250O1xuICAgICAgICAgIGNvbnN0IFtmb250Q29sb3IsIHN0cm9rZUNvbG9yXSA9IHRoaXMuX2dldENvbG9yKFxuICAgICAgICAgICAgYmxvY2suY29sb3IsXG4gICAgICAgICAgICB2aWV3Rm9udFNpemUsXG4gICAgICAgICAgICBibG9jay5zdHJva2VDb2xvclxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGJsb2NrLnN0cm9rZVdpZHRoID4gMCkge1xuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGJsb2NrLnN0cm9rZVdpZHRoO1xuICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlQ29sb3I7XG4gICAgICAgICAgICBjdHgubGluZUpvaW4gPSBcInJvdW5kXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBmb250Q29sb3I7XG5cbiAgICAgICAgICBpZiAoYmxvY2suc3Ryb2tlV2lkdGggPiAwKSB7XG4gICAgICAgICAgICBjdHguc3Ryb2tlVGV4dChibG9jay50ZXh0LCB4ICsgd2lkdGgsIHkgKyBibG9jay52YWRqdXN0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3R4LmZpbGxUZXh0KGJsb2NrLnRleHQsIHggKyB3aWR0aCwgeSArIGJsb2NrLnZhZGp1c3QpO1xuICAgICAgICAgIHdpZHRoICs9IGJsb2NrLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHkgKz0gbGluZS5oZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VsaW5lXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRBbGlnbm1lbnQoY3R4LCB4LCB5LCBiYXNlbGluZSkge1xuICAgIC8vIGNoZWNrIGZvciBsYWJlbCBhbGlnbm1lbnQgKGZvciBlZGdlcylcbiAgICAvLyBUT0RPOiBtYWtlIGFsaWdubWVudCBmb3Igbm9kZXNcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzRWRnZUxhYmVsICYmXG4gICAgICB0aGlzLmZvbnRPcHRpb25zLmFsaWduICE9PSBcImhvcml6b250YWxcIiAmJlxuICAgICAgdGhpcy5wb2ludFRvU2VsZiA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIHggPSAwO1xuICAgICAgeSA9IDA7XG5cbiAgICAgIGNvbnN0IGxpbmVNYXJnaW4gPSAyO1xuICAgICAgaWYgKHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwidG9wXCIpIHtcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9IFwiYWxwaGFiZXRpY1wiO1xuICAgICAgICB5IC09IDIgKiBsaW5lTWFyZ2luOyAvLyBkaXN0YW5jZSBmcm9tIGVkZ2UsIHJlcXVpcmVkIGJlY2F1c2Ugd2UgdXNlIGFscGhhYmV0aWMuIEFscGhhYmV0aWMgaGFzIGxlc3MgZGlmZmVyZW5jZSBiZXR3ZWVuIGJyb3dzZXJzXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwiYm90dG9tXCIpIHtcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9IFwiaGFuZ2luZ1wiO1xuICAgICAgICB5ICs9IDIgKiBsaW5lTWFyZ2luOyAvLyBkaXN0YW5jZSBmcm9tIGVkZ2UsIHJlcXVpcmVkIGJlY2F1c2Ugd2UgdXNlIGhhbmdpbmcuIEhhbmdpbmcgaGFzIGxlc3MgZGlmZmVyZW5jZSBiZXR3ZWVuIGJyb3dzZXJzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY3R4LnRleHRCYXNlbGluZSA9IGJhc2VsaW5lO1xuICAgIH1cbiAgICByZXR1cm4gW3gsIHldO1xuICB9XG5cbiAgLyoqXG4gICAqIGZhZGUgaW4gd2hlbiByZWxhdGl2ZSBzY2FsZSBpcyBiZXR3ZWVuIHRocmVzaG9sZCBhbmQgdGhyZXNob2xkIC0gMS5cbiAgICogSWYgdGhlIHJlbGF0aXZlIHNjYWxlIHdvdWxkIGJlIHNtYWxsZXIgdGhhbiB0aHJlc2hvbGQgLTEgdGhlIGRyYXcgZnVuY3Rpb24gd291bGQgaGF2ZSByZXR1cm5lZCBiZWZvcmUgY29taW5nIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAgVGhlIGZvbnQgY29sb3IgdG8gdXNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2aWV3Rm9udFNpemVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGluaXRpYWxTdHJva2VDb2xvclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGZvbnQgY29sb3IgYW5kIHN0cm9rZSBjb2xvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldENvbG9yKGNvbG9yLCB2aWV3Rm9udFNpemUsIGluaXRpYWxTdHJva2VDb2xvcikge1xuICAgIGxldCBmb250Q29sb3IgPSBjb2xvciB8fCBcIiMwMDAwMDBcIjtcbiAgICBsZXQgc3Ryb2tlQ29sb3IgPSBpbml0aWFsU3Ryb2tlQ29sb3IgfHwgXCIjZmZmZmZmXCI7XG4gICAgaWYgKHZpZXdGb250U2l6ZSA8PSB0aGlzLmVsZW1lbnRPcHRpb25zLnNjYWxpbmcubGFiZWwuZHJhd1RocmVzaG9sZCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IE1hdGgubWF4KFxuICAgICAgICAwLFxuICAgICAgICBNYXRoLm1pbihcbiAgICAgICAgICAxLFxuICAgICAgICAgIDEgLSAodGhpcy5lbGVtZW50T3B0aW9ucy5zY2FsaW5nLmxhYmVsLmRyYXdUaHJlc2hvbGQgLSB2aWV3Rm9udFNpemUpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBmb250Q29sb3IgPSBvdmVycmlkZU9wYWNpdHkoZm9udENvbG9yLCBvcGFjaXR5KTtcbiAgICAgIHN0cm9rZUNvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KHN0cm9rZUNvbG9yLCBvcGFjaXR5KTtcbiAgICB9XG4gICAgcmV0dXJuIFtmb250Q29sb3IsIHN0cm9rZUNvbG9yXTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcmV0dXJucyB7e3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyfX1cbiAgICovXG4gIGdldFRleHRTaXplKGN0eCwgc2VsZWN0ZWQgPSBmYWxzZSwgaG92ZXIgPSBmYWxzZSkge1xuICAgIHRoaXMuX3Byb2Nlc3NMYWJlbChjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB0aGlzLnNpemUud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuc2l6ZS5oZWlnaHQsXG4gICAgICBsaW5lQ291bnQ6IHRoaXMubGluZUNvdW50LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGRpbWVuc2lvbnMgb2YgdGhlIGxhYmVsXG4gICAqXG4gICAqIEByZXR1cm5zIHtyZWN0fVxuICAgKi9cbiAgZ2V0U2l6ZSgpIHtcbiAgICBjb25zdCBsaW5lTWFyZ2luID0gMjtcbiAgICBsZXQgeCA9IHRoaXMuc2l6ZS5sZWZ0OyAvLyBkZWZhdWx0IHZhbHVlcyB3aGljaCBtaWdodCBiZSBvdmVycmlkZGVuIGJlbG93XG4gICAgbGV0IHkgPSB0aGlzLnNpemUudG9wIC0gMC41ICogbGluZU1hcmdpbjsgLy8gaWRlbVxuXG4gICAgaWYgKHRoaXMuaXNFZGdlTGFiZWwpIHtcbiAgICAgIGNvbnN0IHgyID0gLXRoaXMuc2l6ZS53aWR0aCAqIDAuNTtcblxuICAgICAgc3dpdGNoICh0aGlzLmZvbnRPcHRpb25zLmFsaWduKSB7XG4gICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcbiAgICAgICAgICB4ID0geDI7XG4gICAgICAgICAgeSA9IC10aGlzLnNpemUuaGVpZ2h0ICogMC41O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidG9wXCI6XG4gICAgICAgICAgeCA9IHgyO1xuICAgICAgICAgIHkgPSAtKHRoaXMuc2l6ZS5oZWlnaHQgKyBsaW5lTWFyZ2luKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxuICAgICAgICAgIHggPSB4MjtcbiAgICAgICAgICB5ID0gbGluZU1hcmdpbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSB7XG4gICAgICBsZWZ0OiB4LFxuICAgICAgdG9wOiB5LFxuICAgICAgd2lkdGg6IHRoaXMuc2l6ZS53aWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5zaXplLmhlaWdodCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MF1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdXG4gICAqIEBwYXJhbSB7J21pZGRsZSd8J2hhbmdpbmcnfSBbYmFzZWxpbmU9J21pZGRsZSddXG4gICAqL1xuICBjYWxjdWxhdGVMYWJlbFNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIsIHggPSAwLCB5ID0gMCwgYmFzZWxpbmUgPSBcIm1pZGRsZVwiKSB7XG4gICAgdGhpcy5fcHJvY2Vzc0xhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLnNpemUubGVmdCA9IHggLSB0aGlzLnNpemUud2lkdGggKiAwLjU7XG4gICAgdGhpcy5zaXplLnRvcCA9IHkgLSB0aGlzLnNpemUuaGVpZ2h0ICogMC41O1xuICAgIHRoaXMuc2l6ZS55TGluZSA9IHkgKyAoMSAtIHRoaXMubGluZUNvdW50KSAqIDAuNSAqIHRoaXMuZm9udE9wdGlvbnMuc2l6ZTtcbiAgICBpZiAoYmFzZWxpbmUgPT09IFwiaGFuZ2luZ1wiKSB7XG4gICAgICB0aGlzLnNpemUudG9wICs9IDAuNSAqIHRoaXMuZm9udE9wdGlvbnMuc2l6ZTtcbiAgICAgIHRoaXMuc2l6ZS50b3AgKz0gNDsgLy8gZGlzdGFuY2UgZnJvbSBub2RlLCByZXF1aXJlZCBiZWNhdXNlIHdlIHVzZSBoYW5naW5nLiBIYW5naW5nIGhhcyBsZXNzIGRpZmZlcmVuY2UgYmV0d2VlbiBicm93c2Vyc1xuICAgICAgdGhpcy5zaXplLnlMaW5lICs9IDQ7IC8vIGRpc3RhbmNlIGZyb20gbm9kZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kXG4gICAqIEByZXR1cm5zIHt7Y29sb3IsIHNpemUsIGZhY2UsIG1vZCwgdmFkanVzdCwgc3Ryb2tlV2lkdGg6ICosIHN0cm9rZUNvbG9yOiAoKnxzdHJpbmd8YWxsT3B0aW9ucy5lZGdlcy5mb250LnN0cm9rZUNvbG9yfHtzdHJpbmd9fGFsbE9wdGlvbnMubm9kZXMuZm9udC5zdHJva2VDb2xvcnxBcnJheSl9fVxuICAgKi9cbiAgZ2V0Rm9ybWF0dGluZ1ZhbHVlcyhjdHgsIHNlbGVjdGVkLCBob3ZlciwgbW9kKSB7XG4gICAgY29uc3QgZ2V0VmFsdWUgPSBmdW5jdGlvbiAoZm9udE9wdGlvbnMsIG1vZCwgb3B0aW9uKSB7XG4gICAgICBpZiAobW9kID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgIGlmIChvcHRpb24gPT09IFwibW9kXCIpIHJldHVybiBcIlwiO1xuICAgICAgICByZXR1cm4gZm9udE9wdGlvbnNbb3B0aW9uXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvbnRPcHRpb25zW21vZF1bb3B0aW9uXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIEdydW1ibCBsZWF2aW5nIG91dCB0ZXN0IG9uIHVuZGVmaW5lZCBlcXVhbHMgZmFsc2UgZm9yIFwiXCJcbiAgICAgICAgcmV0dXJuIGZvbnRPcHRpb25zW21vZF1bb3B0aW9uXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRha2UgZnJvbSBwYXJlbnQgZm9udCBvcHRpb25cbiAgICAgICAgcmV0dXJuIGZvbnRPcHRpb25zW29wdGlvbl07XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbHVlcyA9IHtcbiAgICAgIGNvbG9yOiBnZXRWYWx1ZSh0aGlzLmZvbnRPcHRpb25zLCBtb2QsIFwiY29sb3JcIiksXG4gICAgICBzaXplOiBnZXRWYWx1ZSh0aGlzLmZvbnRPcHRpb25zLCBtb2QsIFwic2l6ZVwiKSxcbiAgICAgIGZhY2U6IGdldFZhbHVlKHRoaXMuZm9udE9wdGlvbnMsIG1vZCwgXCJmYWNlXCIpLFxuICAgICAgbW9kOiBnZXRWYWx1ZSh0aGlzLmZvbnRPcHRpb25zLCBtb2QsIFwibW9kXCIpLFxuICAgICAgdmFkanVzdDogZ2V0VmFsdWUodGhpcy5mb250T3B0aW9ucywgbW9kLCBcInZhZGp1c3RcIiksXG4gICAgICBzdHJva2VXaWR0aDogdGhpcy5mb250T3B0aW9ucy5zdHJva2VXaWR0aCxcbiAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLmZvbnRPcHRpb25zLnN0cm9rZUNvbG9yLFxuICAgIH07XG4gICAgaWYgKHNlbGVjdGVkIHx8IGhvdmVyKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG1vZCA9PT0gXCJub3JtYWxcIiAmJlxuICAgICAgICB0aGlzLmZvbnRPcHRpb25zLmNob29zZXIgPT09IHRydWUgJiZcbiAgICAgICAgdGhpcy5lbGVtZW50T3B0aW9ucy5sYWJlbEhpZ2hsaWdodEJvbGRcbiAgICAgICkge1xuICAgICAgICB2YWx1ZXMubW9kID0gXCJib2xkXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZm9udE9wdGlvbnMuY2hvb3NlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgdGhpcy5mb250T3B0aW9ucy5jaG9vc2VyKFxuICAgICAgICAgICAgdmFsdWVzLFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50T3B0aW9ucy5pZCxcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgaG92ZXJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZvbnRTdHJpbmcgPSBcIlwiO1xuICAgIGlmICh2YWx1ZXMubW9kICE9PSB1bmRlZmluZWQgJiYgdmFsdWVzLm1vZCAhPT0gXCJcIikge1xuICAgICAgLy8gc2FmZWd1YXJkIGZvciB1bmRlZmluZWQgLSB0aGlzIGhhcHBlbmVkXG4gICAgICBmb250U3RyaW5nICs9IHZhbHVlcy5tb2QgKyBcIiBcIjtcbiAgICB9XG4gICAgZm9udFN0cmluZyArPSB2YWx1ZXMuc2l6ZSArIFwicHggXCIgKyB2YWx1ZXMuZmFjZTtcblxuICAgIGN0eC5mb250ID0gZm9udFN0cmluZy5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICB2YWx1ZXMuZm9udCA9IGN0eC5mb250O1xuICAgIHZhbHVlcy5oZWlnaHQgPSB2YWx1ZXMuc2l6ZTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGRpZmZlcmVudFN0YXRlKHNlbGVjdGVkLCBob3Zlcikge1xuICAgIHJldHVybiBzZWxlY3RlZCAhPT0gdGhpcy5zZWxlY3RlZFN0YXRlIHx8IGhvdmVyICE9PSB0aGlzLmhvdmVyU3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBleHBsb2RlcyB0aGUgcGFzc2VkIHRleHQgaW50byBsaW5lcyBhbmQgZGV0ZXJtaW5lcyB0aGUgd2lkdGgsIGhlaWdodCBhbmQgbnVtYmVyIG9mIGxpbmVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaW5UZXh0ICB0aGUgdGV4dCB0byBleHBsb2RlXG4gICAqIEByZXR1cm5zIHt7d2lkdGgsIGhlaWdodCwgbGluZXN9fCp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHJvY2Vzc0xhYmVsVGV4dChjdHgsIHNlbGVjdGVkLCBob3ZlciwgaW5UZXh0KSB7XG4gICAgY29uc3Qgc3BsaXR0ZXIgPSBuZXcgTGFiZWxTcGxpdHRlcihjdHgsIHRoaXMsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgcmV0dXJuIHNwbGl0dGVyLnByb2Nlc3MoaW5UZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGV4cGxvZGVzIHRoZSBsYWJlbCBzdHJpbmcgaW50byBsaW5lcyBhbmQgc2V0cyB0aGUgd2lkdGgsIGhlaWdodCBhbmQgbnVtYmVyIG9mIGxpbmVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Byb2Nlc3NMYWJlbChjdHgsIHNlbGVjdGVkLCBob3Zlcikge1xuICAgIGlmICh0aGlzLmxhYmVsRGlydHkgPT09IGZhbHNlICYmICF0aGlzLmRpZmZlcmVudFN0YXRlKHNlbGVjdGVkLCBob3ZlcikpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3Byb2Nlc3NMYWJlbFRleHQoXG4gICAgICBjdHgsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyLFxuICAgICAgdGhpcy5lbGVtZW50T3B0aW9ucy5sYWJlbFxuICAgICk7XG5cbiAgICBpZiAodGhpcy5mb250T3B0aW9ucy5taW5XZHQgPiAwICYmIHN0YXRlLndpZHRoIDwgdGhpcy5mb250T3B0aW9ucy5taW5XZHQpIHtcbiAgICAgIHN0YXRlLndpZHRoID0gdGhpcy5mb250T3B0aW9ucy5taW5XZHQ7XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLmxhYmVsSGVpZ2h0ID0gc3RhdGUuaGVpZ2h0O1xuICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLm1pbkhndCA+IDAgJiYgc3RhdGUuaGVpZ2h0IDwgdGhpcy5mb250T3B0aW9ucy5taW5IZ3QpIHtcbiAgICAgIHN0YXRlLmhlaWdodCA9IHRoaXMuZm9udE9wdGlvbnMubWluSGd0O1xuICAgIH1cblxuICAgIHRoaXMubGluZXMgPSBzdGF0ZS5saW5lcztcbiAgICB0aGlzLmxpbmVDb3VudCA9IHN0YXRlLmxpbmVzLmxlbmd0aDtcbiAgICB0aGlzLnNpemUud2lkdGggPSBzdGF0ZS53aWR0aDtcbiAgICB0aGlzLnNpemUuaGVpZ2h0ID0gc3RhdGUuaGVpZ2h0O1xuICAgIHRoaXMuc2VsZWN0ZWRTdGF0ZSA9IHNlbGVjdGVkO1xuICAgIHRoaXMuaG92ZXJTdGF0ZSA9IGhvdmVyO1xuXG4gICAgdGhpcy5sYWJlbERpcnR5ID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBsYWJlbCBpcyB2aXNpYmxlXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoaXMgbGFiZWwgd2lsbCBiZSBzaG93LCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHZpc2libGUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zaXplLndpZHRoID09PSAwIHx8XG4gICAgICB0aGlzLnNpemUuaGVpZ2h0ID09PSAwIHx8XG4gICAgICB0aGlzLmVsZW1lbnRPcHRpb25zLmxhYmVsID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gbm90aGluZyB0byBkaXNwbGF5XG4gICAgfVxuXG4gICAgY29uc3Qgdmlld0ZvbnRTaXplID0gdGhpcy5mb250T3B0aW9ucy5zaXplICogdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgaWYgKHZpZXdGb250U2l6ZSA8IHRoaXMuZWxlbWVudE9wdGlvbnMuc2NhbGluZy5sYWJlbC5kcmF3VGhyZXNob2xkIC0gMSkge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUb28gc21hbGwgb3IgdG9vIGZhciBhd2F5IHRvIHNob3dcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYWJlbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ29uc3RydWN0b3IoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBuYXRpdmVDb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbi8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3QuY29uc3RydWN0XG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShuYXRpdmVDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xuXG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBuYXRpdmVDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG52YXIgRk9SQ0VEID0gTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUc7XG5cbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06IEZPUkNFRCB9LCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFDb25zdHJ1Y3RvcihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFDb25zdHJ1Y3Rvcihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiBuYXRpdmVDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgIGFwcGx5KHB1c2gsICRhcmdzLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGFwcGx5KGJpbmQsIFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdFByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IGFwcGx5KFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC5jb25zdHJ1Y3QnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlJlZmxlY3QuY29uc3RydWN0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIHNldFByb3RvdHlwZU9mOiBzZXRQcm90b3R5cGVPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfc2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRzZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkY3JlYXRlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgImltcG9ydCBfT2JqZWN0JHNldFByb3RvdHlwZU9mIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanNcIjtcbmltcG9ydCBfYmluZEluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9iaW5kLmpzXCI7XG5pbXBvcnQgX09iamVjdCRnZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICB2YXIgX2NvbnRleHQ7XG4gIF9nZXRQcm90b3R5cGVPZiA9IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPyBfYmluZEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBfT2JqZWN0JGdldFByb3RvdHlwZU9mKS5jYWxsKF9jb250ZXh0KSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IF9PYmplY3QkZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59IiwgIi8qKlxuICogVGhlIEJhc2UgY2xhc3MgZm9yIGFsbCBOb2Rlcy5cbiAqL1xuY2xhc3MgTm9kZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlID0gbGFiZWxNb2R1bGU7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIHRoaXMudG9wID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubGVmdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLndpZHRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmFkaXVzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubWFyZ2luID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVmcmVzaE5lZWRlZCA9IHRydWU7XG4gICAgdGhpcy5ib3VuZGluZ0JveCA9IHsgdG9wOiAwLCBsZWZ0OiAwLCByaWdodDogMCwgYm90dG9tOiAwIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKSB7XG4gICAgdGhpcy5tYXJnaW4gPSB7fTtcbiAgICBpZiAodGhpcy5vcHRpb25zLm1hcmdpbikge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMubWFyZ2luID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhpcy5tYXJnaW4udG9wID0gdGhpcy5vcHRpb25zLm1hcmdpbi50b3A7XG4gICAgICAgIHRoaXMubWFyZ2luLnJpZ2h0ID0gdGhpcy5vcHRpb25zLm1hcmdpbi5yaWdodDtcbiAgICAgICAgdGhpcy5tYXJnaW4uYm90dG9tID0gdGhpcy5vcHRpb25zLm1hcmdpbi5ib3R0b207XG4gICAgICAgIHRoaXMubWFyZ2luLmxlZnQgPSB0aGlzLm9wdGlvbnMubWFyZ2luLmxlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1hcmdpbi50b3AgPSB0aGlzLm9wdGlvbnMubWFyZ2luO1xuICAgICAgICB0aGlzLm1hcmdpbi5yaWdodCA9IHRoaXMub3B0aW9ucy5tYXJnaW47XG4gICAgICAgIHRoaXMubWFyZ2luLmJvdHRvbSA9IHRoaXMub3B0aW9ucy5tYXJnaW47XG4gICAgICAgIHRoaXMubWFyZ2luLmxlZnQgPSB0aGlzLm9wdGlvbnMubWFyZ2luO1xuICAgICAgfVxuICAgIH1cbiAgICBsYWJlbE1vZHVsZS5hZGp1c3RTaXplcyh0aGlzLm1hcmdpbik7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICBjb25zdCBib3JkZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIE1hdGguYWJzKHRoaXMud2lkdGggLyAyIC8gTWF0aC5jb3MoYW5nbGUpKSxcbiAgICAgICAgTWF0aC5hYnModGhpcy5oZWlnaHQgLyAyIC8gTWF0aC5zaW4oYW5nbGUpKVxuICAgICAgKSArIGJvcmRlcldpZHRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcykge1xuICAgIGlmICh2YWx1ZXMuc2hhZG93KSB7XG4gICAgICBjdHguc2hhZG93Q29sb3IgPSB2YWx1ZXMuc2hhZG93Q29sb3I7XG4gICAgICBjdHguc2hhZG93Qmx1ciA9IHZhbHVlcy5zaGFkb3dTaXplO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFggPSB2YWx1ZXMuc2hhZG93WDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gdmFsdWVzLnNoYWRvd1k7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcykge1xuICAgIGlmICh2YWx1ZXMuc2hhZG93KSB7XG4gICAgICBjdHguc2hhZG93Q29sb3IgPSBcInJnYmEoMCwwLDAsMClcIjtcbiAgICAgIGN0eC5zaGFkb3dCbHVyID0gMDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRYID0gMDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBlbmFibGVCb3JkZXJEYXNoZXMoY3R4LCB2YWx1ZXMpIHtcbiAgICBpZiAodmFsdWVzLmJvcmRlckRhc2hlcyAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChjdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgZGFzaGVzID0gdmFsdWVzLmJvcmRlckRhc2hlcztcbiAgICAgICAgaWYgKGRhc2hlcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGRhc2hlcyA9IFs1LCAxNV07XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnNldExpbmVEYXNoKGRhc2hlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJzZXRMaW5lRGFzaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci4gVGhlIGRhc2hlZCBib3JkZXJzIGNhbm5vdCBiZSB1c2VkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyRGFzaGVzID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5ib3JkZXJEYXNoZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBkaXNhYmxlQm9yZGVyRGFzaGVzKGN0eCwgdmFsdWVzKSB7XG4gICAgaWYgKHZhbHVlcy5ib3JkZXJEYXNoZXMgIT09IGZhbHNlKSB7XG4gICAgICBpZiAoY3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3R4LnNldExpbmVEYXNoKFswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJzZXRMaW5lRGFzaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci4gVGhlIGRhc2hlZCBib3JkZXJzIGNhbm5vdCBiZSB1c2VkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyRGFzaGVzID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5ib3JkZXJEYXNoZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBzaGFwZSBvZiBhIG5vZGUgbmVlZHMgdG8gYmUgcmVjYWxjdWxhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIG5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAodGhpcy5yZWZyZXNoTmVlZGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IG5vdCB0aGUgYmVzdCBsb2NhdGlvbiB0byByZXNldCB0aGlzIG1lbWJlci5cbiAgICAgIC8vIEhvd2V2ZXIsIGluIHRoZSBjdXJyZW50IGxvZ2ljLCBpdCBpcyB0aGUgbW9zdCBjb252ZW5pZW50IG9uZS5cbiAgICAgIHRoaXMucmVmcmVzaE5lZWRlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMud2lkdGggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5kaWZmZXJlbnRTdGF0ZShzZWxlY3RlZCwgaG92ZXIpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcykge1xuICAgIGNvbnN0IGJvcmRlcldpZHRoID0gdmFsdWVzLmJvcmRlcldpZHRoIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG5cbiAgICBjdHgubGluZVdpZHRoID0gTWF0aC5taW4odGhpcy53aWR0aCwgYm9yZGVyV2lkdGgpO1xuICAgIGN0eC5zdHJva2VTdHlsZSA9IHZhbHVlcy5ib3JkZXJDb2xvcjtcbiAgICBjdHguZmlsbFN0eWxlID0gdmFsdWVzLmNvbG9yO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgcGVyZm9ybVN0cm9rZShjdHgsIHZhbHVlcykge1xuICAgIGNvbnN0IGJvcmRlcldpZHRoID0gdmFsdWVzLmJvcmRlcldpZHRoIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG5cbiAgICAvL2RyYXcgZGFzaGVkIGJvcmRlciBpZiBlbmFibGVkLCBzYXZlIGFuZCByZXN0b3JlIGlzIHJlcXVpcmVkIGZvciBmaXJlZm94IG5vdCB0byBjcmFzaCBvbiB1bml4LlxuICAgIGN0eC5zYXZlKCk7XG4gICAgLy8gaWYgYm9yZGVycyBhcmUgemVybyB3aWR0aCwgdGhleSB3aWxsIGJlIGRyYXduIHdpdGggd2lkdGggMSBieSBkZWZhdWx0LiBUaGlzIHByZXZlbnRzIHRoYXRcbiAgICBpZiAoYm9yZGVyV2lkdGggPiAwKSB7XG4gICAgICB0aGlzLmVuYWJsZUJvcmRlckRhc2hlcyhjdHgsIHZhbHVlcyk7XG4gICAgICAvL2RyYXcgdGhlIGJvcmRlclxuICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgLy9kaXNhYmxlIGRhc2hlZCBib3JkZXIgZm9yIG90aGVyIGVsZW1lbnRzXG4gICAgICB0aGlzLmRpc2FibGVCb3JkZXJEYXNoZXMoY3R4LCB2YWx1ZXMpO1xuICAgIH1cbiAgICBjdHgucmVzdG9yZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgcGVyZm9ybUZpbGwoY3R4LCB2YWx1ZXMpIHtcbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC5maWxsU3R5bGUgPSB2YWx1ZXMuY29sb3I7XG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICAvLyBkcmF3IHRoZSBiYWNrZ3JvdW5kXG4gICAgY3R4LmZpbGwoKTtcbiAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG5cbiAgICBjdHgucmVzdG9yZSgpO1xuICAgIHRoaXMucGVyZm9ybVN0cm9rZShjdHgsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1hcmdpblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZEJvdW5kaW5nQm94TWFyZ2luKG1hcmdpbikge1xuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCAtPSBtYXJnaW47XG4gICAgdGhpcy5ib3VuZGluZ0JveC50b3AgLT0gbWFyZ2luO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICs9IG1hcmdpbjtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ICs9IG1hcmdpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgY2FsbC5cbiAgICpcbiAgICogRG9pbmcgaXQgbGlrZSB0aGlzIG1ha2VzIGl0IGVhc2llciB0byBvdmVycmlkZVxuICAgKiBpbiB0aGUgY2hpbGQgY2xhc3Nlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlQm91bmRpbmdCb3goeCwgeSwgY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAoY3R4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0gdGhpcy5sZWZ0O1xuICAgIHRoaXMuYm91bmRpbmdCb3gudG9wID0gdGhpcy50b3A7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSB0aGlzLnRvcCArIHRoaXMuaGVpZ2h0O1xuICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB0aGlzLmxlZnQgKyB0aGlzLndpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgY2FsbC5cbiAgICogVGhpcyBhY3RzIGFzIGEgc3R1YiB3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcikge1xuICAgIHRoaXMuX3VwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGRpbWVuc2lvbnMgdG8gdXNlIGZvciBub2RlcyB3aXRoIGFuIGludGVybmFsIGxhYmVsXG4gICAqXG4gICAqIEN1cnJlbnRseSwgdGhlc2UgYXJlOiBDaXJjbGUsIEVsbGlwc2UsIERhdGFiYXNlLCBCb3hcbiAgICogVGhlIG90aGVyIG5vZGVzIGhhdmUgZXh0ZXJuYWwgbGFiZWxzLCBhbmQgd2lsbCBub3QgY2FsbCB0aGlzIG1ldGhvZFxuICAgKlxuICAgKiBJZiB0aGVyZSBpcyBubyBsYWJlbCwgZGVjZW50IGRlZmF1bHQgdmFsdWVzIGFyZSBzdXBwbGllZC5cbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqIEByZXR1cm5zIHt7d2lkdGg6bnVtYmVyLCBoZWlnaHQ6bnVtYmVyfX1cbiAgICovXG4gIGdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICAvLyBOT1RFOiBwcmV2aW91c2x5ICd0ZXh0U2l6ZScgd2FzIG5vdCBwdXQgaW4gJ3RoaXMnIGZvciBFbGxpcHNlXG4gICAgLy8gVE9ETzogZXhhbWluZSB0aGUgY29uc2VxdWVuY2VzLlxuICAgIHRoaXMudGV4dFNpemUgPSB0aGlzLmxhYmVsTW9kdWxlLmdldFRleHRTaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICBsZXQgd2lkdGggPSB0aGlzLnRleHRTaXplLndpZHRoO1xuICAgIGxldCBoZWlnaHQgPSB0aGlzLnRleHRTaXplLmhlaWdodDtcblxuICAgIGNvbnN0IERFRkFVTFRfU0laRSA9IDE0O1xuICAgIGlmICh3aWR0aCA9PT0gMCkge1xuICAgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gdGhlcmUgaXMgbm8gbGFiZWwgdGV4dCBzZXRcbiAgICAgIHdpZHRoID0gREVGQVVMVF9TSVpFOyAvLyB1c2UgYSBkZWNlbnQgZGVmYXVsdFxuICAgICAgaGVpZ2h0ID0gREVGQVVMVF9TSVpFOyAvLyBpZiB3aWR0aCB6ZXJvLCB0aGVuIGhlaWdodCBhbHNvIGFsd2F5cyB6ZXJvXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5vZGVCYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9kZUJhc2UgZnJvbSBcIi4uL3V0aWwvTm9kZUJhc2VcIjtcbmltcG9ydCB7IGRyYXdSb3VuZFJlY3QgfSBmcm9tIFwiLi4vdXRpbC9zaGFwZXNcIjtcblxuLyoqXG4gKiBBIEJveCBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIE5vZGVCYXNlXG4gKi9cbmNsYXNzIEJveCBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgICB0aGlzLl9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlbGVjdGVkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3Zlcl1cbiAgICovXG4gIHJlc2l6ZShjdHgsIHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZCwgaG92ZXIgPSB0aGlzLmhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgICB0aGlzLndpZHRoID0gZGltZW5zaW9ucy53aWR0aCArIHRoaXMubWFyZ2luLnJpZ2h0ICsgdGhpcy5tYXJnaW4ubGVmdDtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gZGltZW5zaW9ucy5oZWlnaHQgKyB0aGlzLm1hcmdpbi50b3AgKyB0aGlzLm1hcmdpbi5ib3R0b207XG4gICAgICB0aGlzLnJhZGl1cyA9IHRoaXMud2lkdGggLyAyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICB0aGlzLmluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcyk7XG4gICAgZHJhd1JvdW5kUmVjdChcbiAgICAgIGN0eCxcbiAgICAgIHRoaXMubGVmdCxcbiAgICAgIHRoaXMudG9wLFxuICAgICAgdGhpcy53aWR0aCxcbiAgICAgIHRoaXMuaGVpZ2h0LFxuICAgICAgdmFsdWVzLmJvcmRlclJhZGl1c1xuICAgICk7XG4gICAgdGhpcy5wZXJmb3JtRmlsbChjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoXG4gICAgICBjdHgsXG4gICAgICB0aGlzLmxlZnQgKyB0aGlzLnRleHRTaXplLndpZHRoIC8gMiArIHRoaXMubWFyZ2luLmxlZnQsXG4gICAgICB0aGlzLnRvcCArIHRoaXMudGV4dFNpemUuaGVpZ2h0IC8gMiArIHRoaXMubWFyZ2luLnRvcCxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgaG92ZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSwgY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICB0aGlzLl91cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG5cbiAgICBjb25zdCBib3JkZXJSYWRpdXMgPSB0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmJvcmRlclJhZGl1czsgLy8gb25seSBlZmZlY3RpdmUgZm9yIGJveFxuICAgIHRoaXMuX2FkZEJvdW5kaW5nQm94TWFyZ2luKGJvcmRlclJhZGl1cyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIGlmIChjdHgpIHtcbiAgICAgIHRoaXMucmVzaXplKGN0eCk7XG4gICAgfVxuICAgIGNvbnN0IGJvcmRlcldpZHRoID0gdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIE1hdGgubWluKFxuICAgICAgICBNYXRoLmFicyh0aGlzLndpZHRoIC8gMiAvIE1hdGguY29zKGFuZ2xlKSksXG4gICAgICAgIE1hdGguYWJzKHRoaXMuaGVpZ2h0IC8gMiAvIE1hdGguc2luKGFuZ2xlKSlcbiAgICAgICkgKyBib3JkZXJXaWR0aFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm94O1xuIiwgImltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi9Ob2RlQmFzZVwiO1xuaW1wb3J0IHsgZHJhd0NpcmNsZSB9IGZyb20gXCIuL3NoYXBlc1wiO1xuXG4vKipcbiAqIE5PVEU6IFRoaXMgaXMgYSBiYWQgYmFzZSBjbGFzc1xuICpcbiAqIENoaWxkIGNsYXNzZXMgYXJlOlxuICpcbiAqICAgSW1hZ2UgICAgICAgLSB1c2VzICpvbmx5KiBpbWFnZSBtZXRob2RzXG4gKiAgIENpcmNsZSAgICAgIC0gdXNlcyAqb25seSogX2RyYXdSYXdDaXJjbGVcbiAqICAgQ2lyY2xlSW1hZ2UgLSB1c2VzIGFsbFxuICpcbiAqIFRPRE86IFJlZmFjdG9yLCBtb3ZlIF9kcmF3UmF3Q2lyY2xlIHRvIGRpZmZlcmVudCBtb2R1bGUsIGRlcml2ZSBDaXJjbGUgZnJvbSBOb2RlQmFzZVxuICogICAgICAgUmVuYW1lIHRoaXMgdG8gSW1hZ2VCYXNlXG4gKiAgICAgICBDb25zb2xpZGF0ZSBjb21tb24gY29kZSBpbiBJbWFnZSBhbmQgQ2lyY2xlSW1hZ2UgdG8gYmFzZSBjbGFzc1xuICpcbiAqIEBhdWdtZW50cyBOb2RlQmFzZVxuICovXG5jbGFzcyBDaXJjbGVJbWFnZUJhc2UgZXh0ZW5kcyBOb2RlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gICAgdGhpcy5sYWJlbE9mZnNldCA9IDA7XG4gICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbaW1hZ2VPYmpdXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbaW1hZ2VPYmpBbHRdXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMsIGltYWdlT2JqLCBpbWFnZU9iakFsdCkge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAoIShpbWFnZU9iaiA9PT0gdW5kZWZpbmVkICYmIGltYWdlT2JqQWx0ID09PSB1bmRlZmluZWQpKSB7XG4gICAgICB0aGlzLnNldEltYWdlcyhpbWFnZU9iaiwgaW1hZ2VPYmpBbHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGltYWdlcyBmb3IgdGhpcyBub2RlLlxuICAgKlxuICAgKiBUaGUgaW1hZ2VzIGNhbiBiZSB1cGRhdGVkIGFmdGVyIHRoZSBpbml0aWFsIHNldHRpbmcgb2Ygb3B0aW9ucztcbiAgICogdGhlcmVmb3JlLCB0aGlzIG1ldGhvZCBuZWVkcyB0byBiZSByZWVudHJhbnQuXG4gICAqXG4gICAqIEZvciBjb3JyZWN0IHdvcmtpbmcgaW4gZXJyb3IgY2FzZXMsIGl0IGlzIG5lY2Vzc2FyeSB0byBwcm9wZXJseSBzZXRcbiAgICogZmllbGQgJ25vZGVzLmJyb2tlbkltYWdlJyBpbiB0aGUgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtJbWFnZX0gaW1hZ2VPYmogIHJlcXVpcmVkOyBtYWluIGltYWdlIHRvIHNob3cgZm9yIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge0ltYWdlfHVuZGVmaW5lZH0gaW1hZ2VPYmpBbHQgb3B0aW9uYWw7IGltYWdlIHRvIHNob3cgd2hlbiBub2RlIGlzIHNlbGVjdGVkXG4gICAqL1xuICBzZXRJbWFnZXMoaW1hZ2VPYmosIGltYWdlT2JqQWx0KSB7XG4gICAgaWYgKGltYWdlT2JqQWx0ICYmIHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuaW1hZ2VPYmogPSBpbWFnZU9iakFsdDtcbiAgICAgIHRoaXMuaW1hZ2VPYmpBbHQgPSBpbWFnZU9iajtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbWFnZU9iaiA9IGltYWdlT2JqO1xuICAgICAgdGhpcy5pbWFnZU9iakFsdCA9IGltYWdlT2JqQWx0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgc2VsZWN0aW9uIGFuZCBzd2l0Y2ggYmV0d2VlbiB0aGUgYmFzZSBhbmQgdGhlIHNlbGVjdGVkIGltYWdlLlxuICAgKlxuICAgKiBEbyB0aGUgc3dpdGNoIG9ubHkgaWYgaW1hZ2VPYmpBbHQgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkIHZhbHVlIG9mIG5ldyBzZWxlY3RlZCBzdGF0ZSBmb3IgY3VycmVudCBub2RlXG4gICAqL1xuICBzd2l0Y2hJbWFnZXMoc2VsZWN0ZWQpIHtcbiAgICBjb25zdCBzZWxlY3Rpb25fY2hhbmdlZCA9XG4gICAgICAoc2VsZWN0ZWQgJiYgIXRoaXMuc2VsZWN0ZWQpIHx8ICghc2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3RlZCk7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkOyAvLyBSZW1lbWJlciBuZXcgc2VsZWN0aW9uXG5cbiAgICBpZiAodGhpcy5pbWFnZU9iakFsdCAhPT0gdW5kZWZpbmVkICYmIHNlbGVjdGlvbl9jaGFuZ2VkKSB7XG4gICAgICBjb25zdCBpbWFnZVRtcCA9IHRoaXMuaW1hZ2VPYmo7XG4gICAgICB0aGlzLmltYWdlT2JqID0gdGhpcy5pbWFnZU9iakFsdDtcbiAgICAgIHRoaXMuaW1hZ2VPYmpBbHQgPSBpbWFnZVRtcDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBJbWFnZSBQYWRkaW5nIGZyb20gbm9kZSBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsbGVmdDogbnVtYmVyLGJvdHRvbTogbnVtYmVyLHJpZ2h0OiBudW1iZXJ9fSBpbWFnZSBwYWRkaW5nIGluc2lkZSB0aGlzIHNoYXBlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0SW1hZ2VQYWRkaW5nKCkge1xuICAgIGNvbnN0IGltZ1BhZGRpbmcgPSB7IHRvcDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCwgbGVmdDogMCB9O1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaW1hZ2VQYWRkaW5nKSB7XG4gICAgICBjb25zdCBvcHRJbWdQYWRkaW5nID0gdGhpcy5vcHRpb25zLmltYWdlUGFkZGluZztcbiAgICAgIGlmICh0eXBlb2Ygb3B0SW1nUGFkZGluZyA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGltZ1BhZGRpbmcudG9wID0gb3B0SW1nUGFkZGluZy50b3A7XG4gICAgICAgIGltZ1BhZGRpbmcucmlnaHQgPSBvcHRJbWdQYWRkaW5nLnJpZ2h0O1xuICAgICAgICBpbWdQYWRkaW5nLmJvdHRvbSA9IG9wdEltZ1BhZGRpbmcuYm90dG9tO1xuICAgICAgICBpbWdQYWRkaW5nLmxlZnQgPSBvcHRJbWdQYWRkaW5nLmxlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbWdQYWRkaW5nLnRvcCA9IG9wdEltZ1BhZGRpbmc7XG4gICAgICAgIGltZ1BhZGRpbmcucmlnaHQgPSBvcHRJbWdQYWRkaW5nO1xuICAgICAgICBpbWdQYWRkaW5nLmJvdHRvbSA9IG9wdEltZ1BhZGRpbmc7XG4gICAgICAgIGltZ1BhZGRpbmcubGVmdCA9IG9wdEltZ1BhZGRpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGltZ1BhZGRpbmc7XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0IHRoZSBub2RlIGRpbWVuc2lvbnMgZm9yIGEgbG9hZGVkIGltYWdlLlxuICAgKlxuICAgKiBQcmU6IHRoaXMuaW1hZ2VPYmogaXMgdmFsaWRcbiAgICovXG4gIF9yZXNpemVJbWFnZSgpIHtcbiAgICBsZXQgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLnVzZUltYWdlU2l6ZSA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIFVzZSB0aGUgc2l6ZSBwcm9wZXJ0eVxuICAgICAgbGV0IHJhdGlvX3dpZHRoID0gMTtcbiAgICAgIGxldCByYXRpb19oZWlnaHQgPSAxO1xuXG4gICAgICAvLyBPbmx5IGNhbGN1bGF0ZSB0aGUgcHJvcGVyIHJhdGlvIGlmIGJvdGggd2lkdGggYW5kIGhlaWdodCBub3QgemVyb1xuICAgICAgaWYgKHRoaXMuaW1hZ2VPYmoud2lkdGggJiYgdGhpcy5pbWFnZU9iai5oZWlnaHQpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VPYmoud2lkdGggPiB0aGlzLmltYWdlT2JqLmhlaWdodCkge1xuICAgICAgICAgIHJhdGlvX3dpZHRoID0gdGhpcy5pbWFnZU9iai53aWR0aCAvIHRoaXMuaW1hZ2VPYmouaGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJhdGlvX2hlaWdodCA9IHRoaXMuaW1hZ2VPYmouaGVpZ2h0IC8gdGhpcy5pbWFnZU9iai53aWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3aWR0aCA9IHRoaXMub3B0aW9ucy5zaXplICogMiAqIHJhdGlvX3dpZHRoO1xuICAgICAgaGVpZ2h0ID0gdGhpcy5vcHRpb25zLnNpemUgKiAyICogcmF0aW9faGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVc2UgdGhlIGltYWdlIHNpemUgd2l0aCBpbWFnZSBwYWRkaW5nXG4gICAgICBjb25zdCBpbWdQYWRkaW5nID0gdGhpcy5fZ2V0SW1hZ2VQYWRkaW5nKCk7XG4gICAgICB3aWR0aCA9IHRoaXMuaW1hZ2VPYmoud2lkdGggKyBpbWdQYWRkaW5nLmxlZnQgKyBpbWdQYWRkaW5nLnJpZ2h0O1xuICAgICAgaGVpZ2h0ID0gdGhpcy5pbWFnZU9iai5oZWlnaHQgKyBpbWdQYWRkaW5nLnRvcCArIGltZ1BhZGRpbmcuYm90dG9tO1xuICAgIH1cblxuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICB0aGlzLnJhZGl1cyA9IDAuNSAqIHRoaXMud2lkdGg7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdSYXdDaXJjbGUoY3R4LCB4LCB5LCB2YWx1ZXMpIHtcbiAgICB0aGlzLmluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcyk7XG4gICAgZHJhd0NpcmNsZShjdHgsIHgsIHksIHZhbHVlcy5zaXplKTtcbiAgICB0aGlzLnBlcmZvcm1GaWxsKGN0eCwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3SW1hZ2VBdFBvc2l0aW9uKGN0eCwgdmFsdWVzKSB7XG4gICAgaWYgKHRoaXMuaW1hZ2VPYmoud2lkdGggIT0gMCkge1xuICAgICAgLy8gZHJhdyB0aGUgaW1hZ2VcbiAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IHZhbHVlcy5vcGFjaXR5ICE9PSB1bmRlZmluZWQgPyB2YWx1ZXMub3BhY2l0eSA6IDE7XG5cbiAgICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcblxuICAgICAgbGV0IGZhY3RvciA9IDE7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5pbnRlcnBvbGF0aW9uID09PSB0cnVlKSB7XG4gICAgICAgIGZhY3RvciA9IHRoaXMuaW1hZ2VPYmoud2lkdGggLyB0aGlzLndpZHRoIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGltZ1BhZGRpbmcgPSB0aGlzLl9nZXRJbWFnZVBhZGRpbmcoKTtcblxuICAgICAgY29uc3QgaW1nUG9zTGVmdCA9IHRoaXMubGVmdCArIGltZ1BhZGRpbmcubGVmdDtcbiAgICAgIGNvbnN0IGltZ1Bvc1RvcCA9IHRoaXMudG9wICsgaW1nUGFkZGluZy50b3A7XG4gICAgICBjb25zdCBpbWdXaWR0aCA9IHRoaXMud2lkdGggLSBpbWdQYWRkaW5nLmxlZnQgLSBpbWdQYWRkaW5nLnJpZ2h0O1xuICAgICAgY29uc3QgaW1nSGVpZ2h0ID0gdGhpcy5oZWlnaHQgLSBpbWdQYWRkaW5nLnRvcCAtIGltZ1BhZGRpbmcuYm90dG9tO1xuICAgICAgdGhpcy5pbWFnZU9iai5kcmF3SW1hZ2VBdFBvc2l0aW9uKFxuICAgICAgICBjdHgsXG4gICAgICAgIGZhY3RvcixcbiAgICAgICAgaW1nUG9zTGVmdCxcbiAgICAgICAgaW1nUG9zVG9wLFxuICAgICAgICBpbWdXaWR0aCxcbiAgICAgICAgaW1nSGVpZ2h0XG4gICAgICApO1xuXG4gICAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd0ltYWdlTGFiZWwoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcblxuICAgIGlmICh0aGlzLmhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvZmZzZXQgPSB0aGlzLmhlaWdodCAqIDAuNTtcbiAgICAgIGNvbnN0IGxhYmVsRGltZW5zaW9ucyA9IHRoaXMubGFiZWxNb2R1bGUuZ2V0VGV4dFNpemUoXG4gICAgICAgIGN0eCxcbiAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgIGhvdmVyXG4gICAgICApO1xuICAgICAgaWYgKGxhYmVsRGltZW5zaW9ucy5saW5lQ291bnQgPj0gMSkge1xuICAgICAgICBvZmZzZXQgKz0gbGFiZWxEaW1lbnNpb25zLmhlaWdodCAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeUxhYmVsID0geSArIG9mZnNldDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwpIHtcbiAgICAgIHRoaXMubGFiZWxPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHgsIHlMYWJlbCwgc2VsZWN0ZWQsIGhvdmVyLCBcImhhbmdpbmdcIik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlSW1hZ2VCYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgQ2lyY2xlSW1hZ2VCYXNlIGZyb20gXCIuLi91dGlsL0NpcmNsZUltYWdlQmFzZVwiO1xuXG4vKipcbiAqIEEgQ2lyY2xlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgQ2lyY2xlSW1hZ2VCYXNlXG4gKi9cbmNsYXNzIENpcmNsZSBleHRlbmRzIENpcmNsZUltYWdlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gICAgdGhpcy5fc2V0TWFyZ2lucyhsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsIGhvdmVyID0gdGhpcy5ob3Zlcikge1xuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5nZXREaW1lbnNpb25zRnJvbUxhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcblxuICAgICAgY29uc3QgZGlhbWV0ZXIgPSBNYXRoLm1heChcbiAgICAgICAgZGltZW5zaW9ucy53aWR0aCArIHRoaXMubWFyZ2luLnJpZ2h0ICsgdGhpcy5tYXJnaW4ubGVmdCxcbiAgICAgICAgZGltZW5zaW9ucy5oZWlnaHQgKyB0aGlzLm1hcmdpbi50b3AgKyB0aGlzLm1hcmdpbi5ib3R0b21cbiAgICAgICk7XG5cbiAgICAgIHRoaXMub3B0aW9ucy5zaXplID0gZGlhbWV0ZXIgLyAyOyAvLyBOT1RFOiB0aGlzIHNpemUgZmllbGQgb25seSBzZXQgaGVyZSwgbm90IGluIEVsbGlwc2UsIERhdGFiYXNlLCBCb3hcbiAgICAgIHRoaXMud2lkdGggPSBkaWFtZXRlcjtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gZGlhbWV0ZXI7XG4gICAgICB0aGlzLnJhZGl1cyA9IHRoaXMud2lkdGggLyAyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICB0aGlzLl9kcmF3UmF3Q2lyY2xlKGN0eCwgeCwgeSwgdmFsdWVzKTtcblxuICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goeCwgeSk7XG4gICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KFxuICAgICAgY3R4LFxuICAgICAgdGhpcy5sZWZ0ICsgdGhpcy50ZXh0U2l6ZS53aWR0aCAvIDIgKyB0aGlzLm1hcmdpbi5sZWZ0LFxuICAgICAgeSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgaG92ZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSkge1xuICAgIHRoaXMuYm91bmRpbmdCb3gudG9wID0geSAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHggLSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0geCArIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0geSArIHRoaXMub3B0aW9ucy5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4KSB7XG4gICAgaWYgKGN0eCkge1xuICAgICAgdGhpcy5yZXNpemUoY3R4KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMud2lkdGggKiAwLjU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgQ2lyY2xlSW1hZ2VCYXNlIGZyb20gXCIuLi91dGlsL0NpcmNsZUltYWdlQmFzZVwiO1xuXG4vKipcbiAqIEEgQ2lyY3VsYXJJbWFnZSBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIENpcmNsZUltYWdlQmFzZVxuICovXG5jbGFzcyBDaXJjdWxhckltYWdlIGV4dGVuZHMgQ2lyY2xlSW1hZ2VCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqQWx0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSwgaW1hZ2VPYmosIGltYWdlT2JqQWx0KSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuXG4gICAgdGhpcy5zZXRJbWFnZXMoaW1hZ2VPYmosIGltYWdlT2JqQWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlbGVjdGVkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3Zlcl1cbiAgICovXG4gIHJlc2l6ZShjdHgsIHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZCwgaG92ZXIgPSB0aGlzLmhvdmVyKSB7XG4gICAgY29uc3QgaW1hZ2VBYnNlbnQgPVxuICAgICAgdGhpcy5pbWFnZU9iai5zcmMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5pbWFnZU9iai53aWR0aCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLmltYWdlT2JqLmhlaWdodCA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGltYWdlQWJzZW50KSB7XG4gICAgICBjb25zdCBkaWFtZXRlciA9IHRoaXMub3B0aW9ucy5zaXplICogMjtcbiAgICAgIHRoaXMud2lkdGggPSBkaWFtZXRlcjtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gZGlhbWV0ZXI7XG4gICAgICB0aGlzLnJhZGl1cyA9IDAuNSAqIHRoaXMud2lkdGg7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgYW4gaW1hZ2UgaXMgcHJlc2VudCwgaS5lLiB0aGlzLmltYWdlT2JqIGlzIHZhbGlkLlxuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICB0aGlzLl9yZXNpemVJbWFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5zd2l0Y2hJbWFnZXMoc2VsZWN0ZWQpO1xuICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICBsZXQgbGFiZWxYID0geCxcbiAgICAgIGxhYmVsWSA9IHk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5jb29yZGluYXRlT3JpZ2luID09PSBcInRvcC1sZWZ0XCIpIHtcbiAgICAgIHRoaXMubGVmdCA9IHg7XG4gICAgICB0aGlzLnRvcCA9IHk7XG4gICAgICBsYWJlbFggKz0gdGhpcy53aWR0aCAvIDI7XG4gICAgICBsYWJlbFkgKz0gdGhpcy5oZWlnaHQgLyAyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG4gICAgfVxuXG4gICAgLy8gZHJhdyB0aGUgYmFja2dyb3VuZCBjaXJjbGUuIElNUE9SVEFOVDogdGhlIHN0cm9rZSBpbiB0aGlzIG1ldGhvZCBpcyB1c2VkIGJ5IHRoZSBjbGlwIG1ldGhvZCBiZWxvdy5cbiAgICB0aGlzLl9kcmF3UmF3Q2lyY2xlKGN0eCwgbGFiZWxYLCBsYWJlbFksIHZhbHVlcyk7XG5cbiAgICAvLyBub3cgd2UgZHJhdyBpbiB0aGUgY2lyY2xlLCB3ZSBzYXZlIHNvIHdlIGNhbiByZXZlcnQgdGhlIGNsaXAgb3BlcmF0aW9uIGFmdGVyIGRyYXdpbmcuXG4gICAgY3R4LnNhdmUoKTtcbiAgICAvLyBjbGlwIGlzIHVzZWQgdG8gdXNlIHRoZSBzdHJva2UgaW4gZHJhd1Jhd0NpcmNsZSBhcyBhbiBhcmVhIHRoYXQgd2UgY2FuIGRyYXcgaW4uXG4gICAgY3R4LmNsaXAoKTtcbiAgICAvLyBkcmF3IHRoZSBpbWFnZVxuICAgIHRoaXMuX2RyYXdJbWFnZUF0UG9zaXRpb24oY3R4LCB2YWx1ZXMpO1xuICAgIC8vIHJlc3RvcmUgc28gd2UgY2FuIGFnYWluIGRyYXcgb24gdGhlIGZ1bGwgY2FudmFzXG4gICAgY3R4LnJlc3RvcmUoKTtcblxuICAgIHRoaXMuX2RyYXdJbWFnZUxhYmVsKGN0eCwgbGFiZWxYLCBsYWJlbFksIHNlbGVjdGVkLCBob3Zlcik7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpO1xuICB9XG5cbiAgLy8gVE9ETzogY29tcGFyZSB3aXRoIENpcmNsZS51cGRhdGVCb3VuZGluZ0JveCgpLCBjb25zb2xpZGF0ZT8gTW9yZSBzdHVmZiBpcyBoYXBwZW5pbmcgaGVyZVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5KSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuY29vcmRpbmF0ZU9yaWdpbiA9PT0gXCJ0b3AtbGVmdFwiKSB7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSB4O1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IHggKyB0aGlzLm9wdGlvbnMuc2l6ZSAqIDI7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IHkgKyB0aGlzLm9wdGlvbnMuc2l6ZSAqIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gudG9wID0geSAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0geCAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IHggKyB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0geSArIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGNvbXBhcmUgd2l0aCBJbWFnZS51cGRhdGVCb3VuZGluZ0JveCgpLCBjb25zb2xpZGF0ZT9cbiAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSBNYXRoLm1pbihcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCxcbiAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0XG4gICAgKTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0LFxuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQgKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGhcbiAgICApO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0gTWF0aC5tYXgoXG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSxcbiAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICsgdGhpcy5sYWJlbE9mZnNldFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgpIHtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53aWR0aCAqIDAuNTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDaXJjdWxhckltYWdlO1xuIiwgImltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi4vdXRpbC9Ob2RlQmFzZVwiO1xuaW1wb3J0IHsgZ2V0U2hhcGUgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjb25zdHJ1Y3RpbmcgTm9kZS9DbHVzdGVyIFNoYXBlcy5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgU2hhcGVCYXNlIGV4dGVuZHMgTm9kZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2VsZWN0ZWRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hvdmVyXVxuICAgKiBAcGFyYW0ge29iamVjdH0gW3ZhbHVlcz17c2l6ZTogdGhpcy5vcHRpb25zLnNpemV9XVxuICAgKi9cbiAgcmVzaXplKFxuICAgIGN0eCxcbiAgICBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsXG4gICAgaG92ZXIgPSB0aGlzLmhvdmVyLFxuICAgIHZhbHVlcyA9IHsgc2l6ZTogdGhpcy5vcHRpb25zLnNpemUgfVxuICApIHtcbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5nZXRUZXh0U2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgICBjb25zdCBzaXplID0gMiAqIHZhbHVlcy5zaXplO1xuICAgICAgdGhpcy53aWR0aCA9IHRoaXMuY3VzdG9tU2l6ZVdpZHRoID8/IHNpemU7XG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMuY3VzdG9tU2l6ZUhlaWdodCA/PyBzaXplO1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaGFwZVxuICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZU11bHRpcGxpZXIgLSBVbnVzZWQhIFRPRE86IFJlbW92ZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIF9kcmF3U2hhcGUoY3R4LCBzaGFwZSwgc2l6ZU11bHRpcGxpZXIsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcblxuICAgIHRoaXMuaW5pdENvbnRleHRGb3JEcmF3KGN0eCwgdmFsdWVzKTtcbiAgICBnZXRTaGFwZShzaGFwZSkoY3R4LCB4LCB5LCB2YWx1ZXMuc2l6ZSk7XG4gICAgdGhpcy5wZXJmb3JtRmlsbChjdHgsIHZhbHVlcyk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmljb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pY29uLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjdHguZm9udCA9XG4gICAgICAgICAgKHNlbGVjdGVkID8gXCJib2xkIFwiIDogXCJcIikgK1xuICAgICAgICAgIHRoaXMuaGVpZ2h0IC8gMiArXG4gICAgICAgICAgXCJweCBcIiArXG4gICAgICAgICAgKHRoaXMub3B0aW9ucy5pY29uLmZhY2UgfHwgXCJGb250QXdlc29tZVwiKTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMub3B0aW9ucy5pY29uLmNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICAgICAgY3R4LnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XG4gICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuICAgICAgICBjdHguZmlsbFRleHQodGhpcy5vcHRpb25zLmljb24uY29kZSwgeCwgeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYXdFeHRlcm5hbExhYmVsOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIE5lZWQgdG8gY2FsbCBmb2xsb3dpbmcgaGVyZSBpbiBvcmRlciB0byBlbnN1cmUgdmFsdWUgZm9yXG4gICAgICAgICAgLy8gYHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5oZWlnaHRgLlxuICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGUuY2FsY3VsYXRlTGFiZWxTaXplKFxuICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICBob3ZlcixcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5LFxuICAgICAgICAgICAgXCJoYW5naW5nXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHlMYWJlbCA9XG4gICAgICAgICAgICB5ICsgMC41ICogdGhpcy5oZWlnaHQgKyAwLjUgKiB0aGlzLmxhYmVsTW9kdWxlLnNpemUuaGVpZ2h0O1xuICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHgsIHlMYWJlbCwgc2VsZWN0ZWQsIGhvdmVyLCBcImhhbmdpbmdcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5KSB7XG4gICAgdGhpcy5ib3VuZGluZ0JveC50b3AgPSB5IC0gdGhpcy5vcHRpb25zLnNpemU7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0geCAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB4ICsgdGhpcy5vcHRpb25zLnNpemU7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSB5ICsgdGhpcy5vcHRpb25zLnNpemU7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoID4gMCkge1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0gTWF0aC5taW4oXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnRcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQsXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0ICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoXG4gICAgICApO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20sXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmhlaWdodFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2hhcGVCYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgQ3VzdG9tU2hhcGUgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgQ3VzdG9tU2hhcGUgZXh0ZW5kcyBTaGFwZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3R4UmVuZGVyZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlLCBjdHhSZW5kZXJlcikge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlLCBjdHhSZW5kZXJlcik7XG4gICAgdGhpcy5jdHhSZW5kZXJlciA9IGN0eFJlbmRlcmVyO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGRpZmZlcmVudCBsYXllcnMuXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICB0aGlzLnJlc2l6ZShjdHgsIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgLy8gR3VhcmQgcmlnaHQgYXdheSBiZWNhdXNlIHNvbWVvbmUgbWF5IGp1c3QgZHJhdyBpbiB0aGUgZnVuY3Rpb24gaXRzZWxmLlxuICAgIGN0eC5zYXZlKCk7XG4gICAgY29uc3QgZHJhd0xhdGVyID0gdGhpcy5jdHhSZW5kZXJlcih7XG4gICAgICBjdHgsXG4gICAgICBpZDogdGhpcy5vcHRpb25zLmlkLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBzdGF0ZTogeyBzZWxlY3RlZCwgaG92ZXIgfSxcbiAgICAgIHN0eWxlOiB7IC4uLnZhbHVlcyB9LFxuICAgICAgbGFiZWw6IHRoaXMub3B0aW9ucy5sYWJlbCxcbiAgICB9KTtcbiAgICAvLyBSZW5kZXIgdGhlIG5vZGUgc2hhcGUgYmVsbG93IGFycm93cy5cbiAgICBpZiAoZHJhd0xhdGVyLmRyYXdOb2RlICE9IG51bGwpIHtcbiAgICAgIGRyYXdMYXRlci5kcmF3Tm9kZSgpO1xuICAgIH1cbiAgICBjdHgucmVzdG9yZSgpO1xuXG4gICAgaWYgKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCkge1xuICAgICAgLy8gR3VhcmQgdGhlIGV4dGVybmFsIGxhYmVsIChhYm92ZSBhcnJvd3MpIGRyYXdpbmcgZnVuY3Rpb24uXG4gICAgICBjb25zdCBkcmF3RXh0ZXJuYWxMYWJlbCA9IGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbDtcbiAgICAgIGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCA9ICgpID0+IHtcbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgZHJhd0V4dGVybmFsTGFiZWwoKTtcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGRyYXdMYXRlci5ub2RlRGltZW5zaW9ucykge1xuICAgICAgdGhpcy5jdXN0b21TaXplV2lkdGggPSBkcmF3TGF0ZXIubm9kZURpbWVuc2lvbnMud2lkdGg7XG4gICAgICB0aGlzLmN1c3RvbVNpemVIZWlnaHQgPSBkcmF3TGF0ZXIubm9kZURpbWVuc2lvbnMuaGVpZ2h0O1xuICAgIH1cblxuICAgIHJldHVybiBkcmF3TGF0ZXI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEN1c3RvbVNoYXBlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9kZUJhc2UgZnJvbSBcIi4uL3V0aWwvTm9kZUJhc2VcIjtcbmltcG9ydCB7IGRyYXdEYXRhYmFzZSB9IGZyb20gXCIuLi91dGlsL3NoYXBlc1wiO1xuXG4vKipcbiAqIEEgRGF0YWJhc2UgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBOb2RlQmFzZVxuICovXG5jbGFzcyBEYXRhYmFzZSBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgICB0aGlzLl9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKi9cbiAgcmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgICAgY29uc3Qgc2l6ZSA9IGRpbWVuc2lvbnMud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQ7XG5cbiAgICAgIHRoaXMud2lkdGggPSBzaXplO1xuICAgICAgdGhpcy5oZWlnaHQgPSBzaXplO1xuICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLndpZHRoIC8gMjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgdGhpcy5pbml0Q29udGV4dEZvckRyYXcoY3R4LCB2YWx1ZXMpO1xuICAgIGRyYXdEYXRhYmFzZShcbiAgICAgIGN0eCxcbiAgICAgIHggLSB0aGlzLndpZHRoIC8gMixcbiAgICAgIHkgLSB0aGlzLmhlaWdodCAvIDIsXG4gICAgICB0aGlzLndpZHRoLFxuICAgICAgdGhpcy5oZWlnaHRcbiAgICApO1xuICAgIHRoaXMucGVyZm9ybUZpbGwoY3R4LCB2YWx1ZXMpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KFxuICAgICAgY3R4LFxuICAgICAgdGhpcy5sZWZ0ICsgdGhpcy50ZXh0U2l6ZS53aWR0aCAvIDIgKyB0aGlzLm1hcmdpbi5sZWZ0LFxuICAgICAgdGhpcy50b3AgKyB0aGlzLnRleHRTaXplLmhlaWdodCAvIDIgKyB0aGlzLm1hcmdpbi50b3AsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGFiYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgRGlhbW9uZCBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIFNoYXBlQmFzZVxuICovXG5jbGFzcyBEaWFtb25kIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwiZGlhbW9uZFwiLCA0LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpYW1vbmQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaGFwZUJhc2UgZnJvbSBcIi4uL3V0aWwvU2hhcGVCYXNlXCI7XG5cbi8qKlxuICogQSBEb3QgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgRG90IGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwiY2lyY2xlXCIsIDIsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCkge1xuICAgIGlmIChjdHgpIHtcbiAgICAgIHRoaXMucmVzaXplKGN0eCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEb3Q7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi4vdXRpbC9Ob2RlQmFzZVwiO1xuaW1wb3J0IHsgZHJhd0VsbGlwc2UgfSBmcm9tIFwiLi4vdXRpbC9zaGFwZXNcIjtcblxuLyoqXG4gKiBBbSBFbGxpcHNlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgRWxsaXBzZSBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlbGVjdGVkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3Zlcl1cbiAgICovXG4gIHJlc2l6ZShjdHgsIHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZCwgaG92ZXIgPSB0aGlzLmhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgICB0aGlzLmhlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0ICogMjtcbiAgICAgIHRoaXMud2lkdGggPSBkaW1lbnNpb25zLndpZHRoICsgZGltZW5zaW9ucy5oZWlnaHQ7XG4gICAgICB0aGlzLnJhZGl1cyA9IDAuNSAqIHRoaXMud2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICB0aGlzLnJlc2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggKiAwLjU7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgKiAwLjU7XG5cbiAgICB0aGlzLmluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcyk7XG4gICAgZHJhd0VsbGlwc2UoY3R4LCB0aGlzLmxlZnQsIHRoaXMudG9wLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgdGhpcy5wZXJmb3JtRmlsbChjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICBjb25zdCBhID0gdGhpcy53aWR0aCAqIDAuNTtcbiAgICBjb25zdCBiID0gdGhpcy5oZWlnaHQgKiAwLjU7XG4gICAgY29uc3QgdyA9IE1hdGguc2luKGFuZ2xlKSAqIGE7XG4gICAgY29uc3QgaCA9IE1hdGguY29zKGFuZ2xlKSAqIGI7XG4gICAgcmV0dXJuIChhICogYikgLyBNYXRoLnNxcnQodyAqIHcgKyBoICogaCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRWxsaXBzZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vZGVCYXNlIGZyb20gXCIuLi91dGlsL05vZGVCYXNlXCI7XG5cbi8qKlxuICogQW4gaWNvbiByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgTm9kZSBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgSWNvbiBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgICB0aGlzLl9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4IC0gVW51c2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy5pY29uU2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IE51bWJlcih0aGlzLm9wdGlvbnMuaWNvbi5zaXplKSxcbiAgICAgICAgaGVpZ2h0OiBOdW1iZXIodGhpcy5vcHRpb25zLmljb24uc2l6ZSksXG4gICAgICB9O1xuICAgICAgdGhpcy53aWR0aCA9IHRoaXMuaWNvblNpemUud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQ7XG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMuaWNvblNpemUuaGVpZ2h0ICsgdGhpcy5tYXJnaW4udG9wICsgdGhpcy5tYXJnaW4uYm90dG9tO1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMub3B0aW9ucy5pY29uLnNpemUgPSB0aGlzLm9wdGlvbnMuaWNvbi5zaXplIHx8IDUwO1xuXG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcbiAgICB0aGlzLl9pY29uKGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYXdFeHRlcm5hbExhYmVsOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGljb25UZXh0U3BhY2luZyA9IDU7XG4gICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KFxuICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgdGhpcy5sZWZ0ICsgdGhpcy5pY29uU2l6ZS53aWR0aCAvIDIgKyB0aGlzLm1hcmdpbi5sZWZ0LFxuICAgICAgICAgICAgeSArIHRoaXMuaGVpZ2h0IC8gMiArIGljb25UZXh0U3BhY2luZyxcbiAgICAgICAgICAgIHNlbGVjdGVkXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goeCwgeSk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICovXG4gIHVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpIHtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHkgLSB0aGlzLm9wdGlvbnMuaWNvbi5zaXplICogMC41O1xuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHggLSB0aGlzLm9wdGlvbnMuaWNvbi5zaXplICogMC41O1xuICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB4ICsgdGhpcy5vcHRpb25zLmljb24uc2l6ZSAqIDAuNTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IHkgKyB0aGlzLm9wdGlvbnMuaWNvbi5zaXplICogMC41O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS53aWR0aCA+IDApIHtcbiAgICAgIGNvbnN0IGljb25UZXh0U3BhY2luZyA9IDU7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0LFxuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdFxuICAgICAgKTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQgKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGhcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IE1hdGgubWF4KFxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSxcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUuaGVpZ2h0ICsgaWNvblRleHRTcGFjaW5nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXIgLSBVbnVzZWRcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgX2ljb24oY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIGNvbnN0IGljb25TaXplID0gTnVtYmVyKHRoaXMub3B0aW9ucy5pY29uLnNpemUpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pY29uLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3R4LmZvbnQgPSBbXG4gICAgICAgIHRoaXMub3B0aW9ucy5pY29uLndlaWdodCAhPSBudWxsXG4gICAgICAgICAgPyB0aGlzLm9wdGlvbnMuaWNvbi53ZWlnaHRcbiAgICAgICAgICA6IHNlbGVjdGVkXG4gICAgICAgICAgPyBcImJvbGRcIlxuICAgICAgICAgIDogXCJcIixcbiAgICAgICAgLy8gSWYgdGhlIHdlaWdodCBpcyBmb3JjZWQgKGZvciBleGFtcGxlIHRvIG1ha2UgRm9udCBBd2Vzb21lIDUgd29ya1xuICAgICAgICAvLyBwcm9wZXJseSkgc3Vic3RpdHV0ZSBzbGlnaHRseSBiaWdnZXIgc2l6ZSBmb3IgYm9sZCBmb250IGZhY2UuXG4gICAgICAgICh0aGlzLm9wdGlvbnMuaWNvbi53ZWlnaHQgIT0gbnVsbCAmJiBzZWxlY3RlZCA/IDUgOiAwKSArXG4gICAgICAgICAgaWNvblNpemUgK1xuICAgICAgICAgIFwicHhcIixcbiAgICAgICAgdGhpcy5vcHRpb25zLmljb24uZmFjZSxcbiAgICAgIF0uam9pbihcIiBcIik7XG5cbiAgICAgIC8vIGRyYXcgaWNvblxuICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMub3B0aW9ucy5pY29uLmNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICAgIGN0eC50ZXh0QWxpZ24gPSBcImNlbnRlclwiO1xuICAgICAgY3R4LnRleHRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG5cbiAgICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICAgIGN0eC5maWxsVGV4dCh0aGlzLm9wdGlvbnMuaWNvbi5jb2RlLCB4LCB5KTtcblxuICAgICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiV2hlbiB1c2luZyB0aGUgaWNvbiBzaGFwZSwgeW91IG5lZWQgdG8gZGVmaW5lIHRoZSBjb2RlIGluIHRoZSBpY29uIG9wdGlvbnMgb2JqZWN0LiBUaGlzIGNhbiBiZSBkb25lIHBlciBub2RlIG9yIGdsb2JhbGx5LlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IENpcmNsZUltYWdlQmFzZSBmcm9tIFwiLi4vdXRpbC9DaXJjbGVJbWFnZUJhc2VcIjtcbmltcG9ydCB7IG92ZXJyaWRlT3BhY2l0eSB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBBbiBpbWFnZS1iYXNlZCByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgTm9kZSBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgQ2lyY2xlSW1hZ2VCYXNlXG4gKi9cbmNsYXNzIEltYWdlIGV4dGVuZHMgQ2lyY2xlSW1hZ2VCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqQWx0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSwgaW1hZ2VPYmosIGltYWdlT2JqQWx0KSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuXG4gICAgdGhpcy5zZXRJbWFnZXMoaW1hZ2VPYmosIGltYWdlT2JqQWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4IC0gVW51c2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsIGhvdmVyID0gdGhpcy5ob3Zlcikge1xuICAgIGNvbnN0IGltYWdlQWJzZW50ID1cbiAgICAgIHRoaXMuaW1hZ2VPYmouc3JjID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuaW1hZ2VPYmoud2lkdGggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5pbWFnZU9iai5oZWlnaHQgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpbWFnZUFic2VudCkge1xuICAgICAgY29uc3Qgc2lkZSA9IHRoaXMub3B0aW9ucy5zaXplICogMjtcbiAgICAgIHRoaXMud2lkdGggPSBzaWRlO1xuICAgICAgdGhpcy5oZWlnaHQgPSBzaWRlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICB0aGlzLl9yZXNpemVJbWFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgY3R4LnNhdmUoKTtcbiAgICB0aGlzLnN3aXRjaEltYWdlcyhzZWxlY3RlZCk7XG4gICAgdGhpcy5yZXNpemUoKTtcblxuICAgIGxldCBsYWJlbFggPSB4LFxuICAgICAgbGFiZWxZID0geTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW4gPT09IFwidG9wLWxlZnRcIikge1xuICAgICAgdGhpcy5sZWZ0ID0geDtcbiAgICAgIHRoaXMudG9wID0geTtcbiAgICAgIGxhYmVsWCArPSB0aGlzLndpZHRoIC8gMjtcbiAgICAgIGxhYmVsWSArPSB0aGlzLmhlaWdodCAvIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy51c2VCb3JkZXJXaXRoSW1hZ2UgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IG5ldXRyYWxib3JkZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbkxpbmVXaWR0aCA9XG4gICAgICAgIHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aFNlbGVjdGVkIHx8IDIgKiB0aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGg7XG4gICAgICBjb25zdCBib3JkZXJXaWR0aCA9XG4gICAgICAgIChzZWxlY3RlZCA/IHNlbGVjdGlvbkxpbmVXaWR0aCA6IG5ldXRyYWxib3JkZXJXaWR0aCkgL1xuICAgICAgICB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIGN0eC5saW5lV2lkdGggPSBNYXRoLm1pbih0aGlzLndpZHRoLCBib3JkZXJXaWR0aCk7XG5cbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGxldCBzdHJva2VTdHlsZSA9IHNlbGVjdGVkXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodC5ib3JkZXJcbiAgICAgICAgOiBob3ZlclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5jb2xvci5ob3Zlci5ib3JkZXJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuY29sb3IuYm9yZGVyO1xuICAgICAgbGV0IGZpbGxTdHlsZSA9IHNlbGVjdGVkXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kXG4gICAgICAgIDogaG92ZXJcbiAgICAgICAgPyB0aGlzLm9wdGlvbnMuY29sb3IuaG92ZXIuYmFja2dyb3VuZFxuICAgICAgICA6IHRoaXMub3B0aW9ucy5jb2xvci5iYWNrZ3JvdW5kO1xuXG4gICAgICBpZiAodmFsdWVzLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdHJva2VTdHlsZSA9IG92ZXJyaWRlT3BhY2l0eShzdHJva2VTdHlsZSwgdmFsdWVzLm9wYWNpdHkpO1xuICAgICAgICBmaWxsU3R5bGUgPSBvdmVycmlkZU9wYWNpdHkoZmlsbFN0eWxlLCB2YWx1ZXMub3BhY2l0eSk7XG4gICAgICB9XG4gICAgICAvLyBzZXR1cCB0aGUgbGluZSBwcm9wZXJ0aWVzLlxuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGU7XG5cbiAgICAgIC8vIHNldCBhIGZpbGxzdHlsZVxuICAgICAgY3R4LmZpbGxTdHlsZSA9IGZpbGxTdHlsZTtcblxuICAgICAgLy8gZHJhdyBhIHJlY3RhbmdsZSB0byBmb3JtIHRoZSBib3JkZXIgYXJvdW5kLiBUaGlzIHJlY3RhbmdsZSBpcyBmaWxsZWQgc28gdGhlIG9wYWNpdHkgb2YgYSBwaWN0dXJlIChpbiBmdXR1cmUgdmlzIHJlbGVhc2VzPykgY2FuIGJlIHVzZWQgdG8gdGludCB0aGUgaW1hZ2VcbiAgICAgIGN0eC5yZWN0KFxuICAgICAgICB0aGlzLmxlZnQgLSAwLjUgKiBjdHgubGluZVdpZHRoLFxuICAgICAgICB0aGlzLnRvcCAtIDAuNSAqIGN0eC5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMud2lkdGggKyBjdHgubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmhlaWdodCArIGN0eC5saW5lV2lkdGhcbiAgICAgICk7XG4gICAgICBjdHguZmlsbCgpO1xuXG4gICAgICB0aGlzLnBlcmZvcm1TdHJva2UoY3R4LCB2YWx1ZXMpO1xuXG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZHJhd0ltYWdlQXRQb3NpdGlvbihjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLl9kcmF3SW1hZ2VMYWJlbChjdHgsIGxhYmVsWCwgbGFiZWxZLCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5KTtcbiAgICBjdHgucmVzdG9yZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5KSB7XG4gICAgdGhpcy5yZXNpemUoKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW4gPT09IFwidG9wLWxlZnRcIikge1xuICAgICAgdGhpcy5sZWZ0ID0geDtcbiAgICAgIHRoaXMudG9wID0geTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuICAgIH1cblxuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHRoaXMubGVmdDtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHRoaXMudG9wO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0gdGhpcy50b3AgKyB0aGlzLmhlaWdodDtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gdGhpcy5sZWZ0ICsgdGhpcy53aWR0aDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGggPiAwKSB7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0LFxuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdFxuICAgICAgKTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQgKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGhcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IE1hdGgubWF4KFxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSxcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gKyB0aGlzLmxhYmVsT2Zmc2V0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2U7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaGFwZUJhc2UgZnJvbSBcIi4uL3V0aWwvU2hhcGVCYXNlXCI7XG5cbi8qKlxuICogQSBTcXVhcmUgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgU3F1YXJlIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwic3F1YXJlXCIsIDIsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3F1YXJlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgSGV4YWdvbiBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIFNoYXBlQmFzZVxuICovXG5jbGFzcyBIZXhhZ29uIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwiaGV4YWdvblwiLCA0LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhleGFnb247XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaGFwZUJhc2UgZnJvbSBcIi4uL3V0aWwvU2hhcGVCYXNlXCI7XG5cbi8qKlxuICogQSBTdGFyIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIFN0YXIgZXh0ZW5kcyBTaGFwZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGhpZ2hlciBsYXllcnMuXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhd1NoYXBlKGN0eCwgXCJzdGFyXCIsIDQsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RhcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vZGVCYXNlIGZyb20gXCIuLi91dGlsL05vZGVCYXNlXCI7XG5cbi8qKlxuICogQSB0ZXh0LWJhc2VkIHJlcGxhY2VtZW50IGZvciB0aGUgZGVmYXVsdCBOb2RlIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBOb2RlQmFzZVxuICovXG5jbGFzcyBUZXh0IGV4dGVuZHMgTm9kZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICAgIHRoaXMuX3NldE1hcmdpbnMobGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy50ZXh0U2l6ZSA9IHRoaXMubGFiZWxNb2R1bGUuZ2V0VGV4dFNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgICAgdGhpcy53aWR0aCA9IHRoaXMudGV4dFNpemUud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQ7XG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMudGV4dFNpemUuaGVpZ2h0ICsgdGhpcy5tYXJnaW4udG9wICsgdGhpcy5tYXJnaW4uYm90dG9tO1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICAvLyBkcmF3IHNoYWRvdyBpZiBlbmFibGVkXG4gICAgdGhpcy5lbmFibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhcbiAgICAgIGN0eCxcbiAgICAgIHRoaXMubGVmdCArIHRoaXMudGV4dFNpemUud2lkdGggLyAyICsgdGhpcy5tYXJnaW4ubGVmdCxcbiAgICAgIHRoaXMudG9wICsgdGhpcy50ZXh0U2l6ZS5oZWlnaHQgLyAyICsgdGhpcy5tYXJnaW4udG9wLFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBob3ZlclxuICAgICk7XG5cbiAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNoYXBlQmFzZSBmcm9tIFwiLi4vdXRpbC9TaGFwZUJhc2VcIjtcblxuLyoqXG4gKiBBIFRyaWFuZ2xlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIFRyaWFuZ2xlIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGhpZ2hlciBsYXllcnMuXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhd1NoYXBlKGN0eCwgXCJ0cmlhbmdsZVwiLCAzLCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyaWFuZ2xlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgZG93bndhcmQgZmFjaW5nIFRyaWFuZ2xlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIFRyaWFuZ2xlRG93biBleHRlbmRzIFNoYXBlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShcbiAgICAgIGN0eCxcbiAgICAgIFwidHJpYW5nbGVEb3duXCIsXG4gICAgICAzLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyLFxuICAgICAgdmFsdWVzXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVHJpYW5nbGVEb3duO1xuIiwgImltcG9ydCB7XG4gIFZBTElEQVRPUl9QUklOVF9TVFlMRSxcbiAgYnJpZGdlT2JqZWN0LFxuICBmaWxsSWZEZWZpbmVkLFxuICBtZXJnZU9wdGlvbnMsXG4gIG92ZXJyaWRlT3BhY2l0eSxcbiAgcGFyc2VDb2xvcixcbiAgc2VsZWN0aXZlTm90RGVlcEV4dGVuZCxcbn0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG5pbXBvcnQgTGFiZWwgZnJvbSBcIi4vc2hhcmVkL0xhYmVsXCI7XG5pbXBvcnQgeyBjaG9vc2lmeSwgcG9pbnRJblJlY3QgfSBmcm9tIFwiLi9zaGFyZWQvQ29tcG9uZW50VXRpbFwiO1xuaW1wb3J0IEJveCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvQm94XCI7XG5pbXBvcnQgQ2lyY2xlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9DaXJjbGVcIjtcbmltcG9ydCBDaXJjdWxhckltYWdlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9DaXJjdWxhckltYWdlXCI7XG5pbXBvcnQgQ3VzdG9tU2hhcGUgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0N1c3RvbVNoYXBlXCI7XG5pbXBvcnQgRGF0YWJhc2UgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0RhdGFiYXNlXCI7XG5pbXBvcnQgRGlhbW9uZCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvRGlhbW9uZFwiO1xuaW1wb3J0IERvdCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvRG90XCI7XG5pbXBvcnQgRWxsaXBzZSBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvRWxsaXBzZVwiO1xuaW1wb3J0IEljb24gZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0ljb25cIjtcbmltcG9ydCBJbWFnZSBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvSW1hZ2VcIjtcbmltcG9ydCBTcXVhcmUgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL1NxdWFyZVwiO1xuaW1wb3J0IEhleGFnb24gZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0hleGFnb25cIjtcbmltcG9ydCBTdGFyIGZyb20gXCIuL25vZGVzL3NoYXBlcy9TdGFyXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvVGV4dFwiO1xuaW1wb3J0IFRyaWFuZ2xlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9UcmlhbmdsZVwiO1xuaW1wb3J0IFRyaWFuZ2xlRG93biBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvVHJpYW5nbGVEb3duXCI7XG5cbi8qKlxuICogQSBub2RlLiBBIG5vZGUgY2FuIGJlIGNvbm5lY3RlZCB0byBvdGhlciBub2RlcyB2aWEgb25lIG9yIG11bHRpcGxlIGVkZ2VzLlxuICovXG5jbGFzcyBOb2RlIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIEFuIG9iamVjdCBjb250YWluaW5nIG9wdGlvbnMgZm9yIHRoZSBub2RlLiBBbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyBhcmUgb3B0aW9uYWwsIGV4Y2VwdCBmb3IgdGhlIGlkLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGlkICAgICBJZCBvZiB0aGUgbm9kZS4gUmVxdWlyZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBsYWJlbCAgVGV4dCBsYWJlbCBmb3IgdGhlIG5vZGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSB4ICAgICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgbm9kZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IHkgICAgICBWZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgbm9kZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IHNoYXBlICBOb2RlIHNoYXBlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gaW1hZ2UgIEFuIGltYWdlIHVybFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IHRpdGxlICBBIHRpdGxlIHRleHQsIGNhbiBiZSBIVE1MXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FueXR5cGV9IGdyb3VwIEEgZ3JvdXAgbmFtZSBvciBudW1iZXJcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHkgICAgICAgICAgICAgICBTaGFyZWQgc3RhdGUgb2YgY3VycmVudCBuZXR3b3JrIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7TmV0d29yay5JbWFnZXN9IGltYWdlbGlzdCAgQSBsaXN0IHdpdGggaW1hZ2VzLiBPbmx5IG5lZWRlZCB3aGVuIHRoZSBub2RlIGhhcyBhbiBpbWFnZVxuICAgKiBAcGFyYW0ge0dyb3Vwc30gZ3JvdXBsaXN0ICAgICAgICAgIEEgbGlzdCB3aXRoIGdyb3Vwcy4gTmVlZGVkIGZvciByZXRyaWV2aW5nIGdyb3VwIG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbE9wdGlvbnMgICAgICBDdXJyZW50IGdsb2JhbCBub2RlIG9wdGlvbnM7IHRoZXNlIHNlcnZlIGFzIGRlZmF1bHRzIGZvciB0aGUgbm9kZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdE9wdGlvbnMgICAgIEdsb2JhbCBkZWZhdWx0IG9wdGlvbnMgZm9yIG5vZGVzOyBub3RlIHRoYXQgdGhpcyBpcyBhbHNvIHRoZSBwcm90b3R5cGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGBnbG9iYWxPcHRpb25zYC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnMsXG4gICAgYm9keSxcbiAgICBpbWFnZWxpc3QsXG4gICAgZ3JvdXBsaXN0LFxuICAgIGdsb2JhbE9wdGlvbnMsXG4gICAgZGVmYXVsdE9wdGlvbnNcbiAgKSB7XG4gICAgdGhpcy5vcHRpb25zID0gYnJpZGdlT2JqZWN0KGdsb2JhbE9wdGlvbnMpO1xuICAgIHRoaXMuZ2xvYmFsT3B0aW9ucyA9IGdsb2JhbE9wdGlvbnM7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG5cbiAgICB0aGlzLmVkZ2VzID0gW107IC8vIGFsbCBlZGdlcyBjb25uZWN0ZWQgdG8gdGhpcyBub2RlXG5cbiAgICAvLyBzZXQgZGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zXG4gICAgdGhpcy5pZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmltYWdlbGlzdCA9IGltYWdlbGlzdDtcbiAgICB0aGlzLmdyb3VwbGlzdCA9IGdyb3VwbGlzdDtcblxuICAgIC8vIHN0YXRlIG9wdGlvbnNcbiAgICB0aGlzLnggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy55ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYmFzZVNpemUgPSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB0aGlzLmJhc2VGb250U2l6ZSA9IHRoaXMub3B0aW9ucy5mb250LnNpemU7XG4gICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSBmYWxzZTsgLy8gdXNlZCB0byBjaGVjayBpZiBpbml0aWFsIGZpdCBzaG91bGQganVzdCB0YWtlIHRoZSByYW5nZSBvciBhcHByb3hpbWF0ZVxuICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhvdmVyID0gZmFsc2U7XG5cbiAgICB0aGlzLmxhYmVsTW9kdWxlID0gbmV3IExhYmVsKFxuICAgICAgdGhpcy5ib2R5LFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgZmFsc2UgLyogTm90IGVkZ2UgbGFiZWwgKi9cbiAgICApO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSBlZGdlIHRvIHRoZSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZX0gZWRnZVxuICAgKi9cbiAgYXR0YWNoRWRnZShlZGdlKSB7XG4gICAgaWYgKHRoaXMuZWRnZXMuaW5kZXhPZihlZGdlKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuZWRnZXMucHVzaChlZGdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0YWNoIGEgZWRnZSBmcm9tIHRoZSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZX0gZWRnZVxuICAgKi9cbiAgZGV0YWNoRWRnZShlZGdlKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmVkZ2VzLmluZGV4T2YoZWRnZSk7XG4gICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICB0aGlzLmVkZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBvciBvdmVyd3JpdGUgb3B0aW9ucyBmb3IgdGhlIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgYW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7bnVsbHxib29sZWFufVxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgY29uc3QgY3VycmVudFNoYXBlID0gdGhpcy5vcHRpb25zLnNoYXBlO1xuXG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm47IC8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgJ3VuZGVmaW5lZCchIFRoaXMgaXMgT0suXG4gICAgfVxuXG4gICAgLy8gU2F2ZSB0aGUgY29sb3IgZm9yIGxhdGVyLlxuICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHByZXZlbnQgbG9jYWwgY29sb3IgZnJvbSBiZWluZyBvdmVyd3JpdHRlbiBieSBncm91cCBjb2xvci5cbiAgICAvLyBUT0RPOiBUbyBwcmV2ZW50IHN1Y2ggd29ya2Fyb3VuZHMgdGhlIHdheSBvcHRpb25zIGFyZSBoYW5kbGVkIHNob3VsZCBiZSByZXdyaXR0ZW4gZnJvbSBzY3JhdGNoLlxuICAgIC8vIFRoaXMgaXMgbm90IHRoZSBvbmx5IHByb2JsZW0gd2l0aCBjdXJyZW50IG9wdGlvbnMgaGFuZGxpbmcuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbG9yICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLl9sb2NhbENvbG9yID0gb3B0aW9ucy5jb2xvcjtcbiAgICB9XG5cbiAgICAvLyBiYXNpYyBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pZCA9IG9wdGlvbnMuaWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm9kZSBtdXN0IGhhdmUgYW4gaWRcIik7XG4gICAgfVxuXG4gICAgTm9kZS5jaGVja01hc3Mob3B0aW9ucywgdGhpcy5pZCk7XG5cbiAgICAvLyBzZXQgdGhlc2Ugb3B0aW9ucyBsb2NhbGx5XG4gICAgLy8gY2xlYXIgeCBhbmQgeSBwb3NpdGlvbnNcbiAgICBpZiAob3B0aW9ucy54ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLnggPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy54ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnByZWRlZmluZWRQb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy54ID0gcGFyc2VJbnQob3B0aW9ucy54KTtcbiAgICAgICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy55ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLnkgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy55ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnByZWRlZmluZWRQb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy55ID0gcGFyc2VJbnQob3B0aW9ucy55KTtcbiAgICAgICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYmFzZVNpemUgPSBvcHRpb25zLnNpemU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMudmFsdWUgPSBwYXJzZUZsb2F0KG9wdGlvbnMudmFsdWUpO1xuICAgIH1cblxuICAgIC8vIHRoaXMgdHJhbnNmb3JtcyBhbGwgc2hvcnRoYW5kcyBpbnRvIGZ1bGx5IGRlZmluZWQgb3B0aW9uc1xuICAgIE5vZGUucGFyc2VPcHRpb25zKFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHRydWUsXG4gICAgICB0aGlzLmdsb2JhbE9wdGlvbnMsXG4gICAgICB0aGlzLmdyb3VwbGlzdFxuICAgICk7XG5cbiAgICBjb25zdCBwaWxlID0gW29wdGlvbnMsIHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9uc107XG4gICAgdGhpcy5jaG9vc2VyID0gY2hvb3NpZnkoXCJub2RlXCIsIHBpbGUpO1xuXG4gICAgdGhpcy5fbG9hZF9pbWFnZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKG9wdGlvbnMpO1xuXG4gICAgLy8gTmVlZCB0byBzZXQgbG9jYWwgb3BhY2l0eSBhZnRlciBgdGhpcy51cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKTtgIGJlY2F1c2UgYHRoaXMudXBkYXRlTGFiZWxNb2R1bGUob3B0aW9ucyk7YCBvdmVycml0ZXMgbG9jYWwgb3BhY2l0eSB3aXRoIGdyb3VwIG9wYWNpdHlcbiAgICBpZiAob3B0aW9ucy5vcGFjaXR5ICE9PSB1bmRlZmluZWQgJiYgTm9kZS5jaGVja09wYWNpdHkob3B0aW9ucy5vcGFjaXR5KSkge1xuICAgICAgdGhpcy5vcHRpb25zLm9wYWNpdHkgPSBvcHRpb25zLm9wYWNpdHk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTaGFwZShjdXJyZW50U2hhcGUpO1xuXG4gICAgcmV0dXJuIG9wdGlvbnMuaGlkZGVuICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5waHlzaWNzICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgaW1hZ2VzIGZyb20gdGhlIG9wdGlvbnMsIGZvciB0aGUgbm9kZXMgdGhhdCBuZWVkIHRoZW0uXG4gICAqXG4gICAqIEltYWdlcyBhcmUgYWx3YXlzIGxvYWRlZCwgZXZlbiBpZiB0aGV5IGFyZSBub3QgdXNlZCBpbiB0aGUgY3VycmVudCBzaGFwZS5cbiAgICogVGhlIHVzZXIgbWF5IHN3aXRjaCB0byBhbiBpbWFnZSBzaGFwZSBsYXRlciBvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkX2ltYWdlcygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnMuc2hhcGUgPT09IFwiY2lyY3VsYXJJbWFnZVwiIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuc2hhcGUgPT09IFwiaW1hZ2VcIlxuICAgICkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbWFnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIk9wdGlvbiBpbWFnZSBtdXN0IGJlIGRlZmluZWQgZm9yIG5vZGUgdHlwZSAnXCIgK1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNoYXBlICtcbiAgICAgICAgICAgIFwiJ1wiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pbWFnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW1hZ2VsaXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludGVybmFsIEVycm9yOiBObyBpbWFnZXMgcHJvdmlkZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuaW1hZ2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuaW1hZ2VPYmogPSB0aGlzLmltYWdlbGlzdC5sb2FkKFxuICAgICAgICB0aGlzLm9wdGlvbnMuaW1hZ2UsXG4gICAgICAgIHRoaXMub3B0aW9ucy5icm9rZW5JbWFnZSxcbiAgICAgICAgdGhpcy5pZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbWFnZS51bnNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdW5zZWxlY3RlZCBpbWFnZSBwcm92aWRlZFwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbWFnZU9iaiA9IHRoaXMuaW1hZ2VsaXN0LmxvYWQoXG4gICAgICAgIHRoaXMub3B0aW9ucy5pbWFnZS51bnNlbGVjdGVkLFxuICAgICAgICB0aGlzLm9wdGlvbnMuYnJva2VuSW1hZ2UsXG4gICAgICAgIHRoaXMuaWRcbiAgICAgICk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW1hZ2Uuc2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmltYWdlT2JqQWx0ID0gdGhpcy5pbWFnZWxpc3QubG9hZChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuaW1hZ2Uuc2VsZWN0ZWQsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmJyb2tlbkltYWdlLFxuICAgICAgICAgIHRoaXMuaWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW1hZ2VPYmpBbHQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgb3BhY2l0eSBpcyBvbmx5IGJldHdlZW4gMCBhbmQgMVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gb3BhY2l0eVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBjaGVja09wYWNpdHkob3BhY2l0eSkge1xuICAgIHJldHVybiAwIDw9IG9wYWNpdHkgJiYgb3BhY2l0eSA8PSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgb3JpZ2luIGlzICdjZW50ZXInIG9yICd0b3AtbGVmdCdcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9yaWdpblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBjaGVja0Nvb3JkaW5hdGVPcmlnaW4ob3JpZ2luKSB7XG4gICAgcmV0dXJuIG9yaWdpbiA9PT0gdW5kZWZpbmVkIHx8IG9yaWdpbiA9PT0gXCJjZW50ZXJcIiB8fCBvcmlnaW4gPT09IFwidG9wLWxlZnRcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IGdyb3VwIG9wdGlvbiB2YWx1ZXMgaW50byB0aGUgbm9kZSBvcHRpb25zLlxuICAgKlxuICAgKiBUaGUgZ3JvdXAgb3B0aW9ucyBvdmVycmlkZSB0aGUgZ2xvYmFsIG5vZGUgb3B0aW9ucywgc28gdGhlIGNvcHkgb2YgZ3JvdXAgb3B0aW9uc1xuICAgKiAgbXVzdCBoYXBwZW4gKmFmdGVyKiB0aGUgZ2xvYmFsIG5vZGUgb3B0aW9ucyBoYXZlIGJlZW4gc2V0LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBtdXN0IGFsc28gYmUgY2FsbGVkIGFsc28gaWYgdGhlIGdsb2JhbCBub2RlIG9wdGlvbnMgaGF2ZSBjaGFuZ2VkIGFuZCB0aGUgZ3JvdXAgb3B0aW9ucyBkaWQgbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50T3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3T3B0aW9ucyAgbmV3IHZhbHVlcyBmb3IgdGhlIG9wdGlvbnMsIGN1cnJlbnRseSBvbmx5IHBhc3NlZCBpbiBmb3IgY2hlY2tcbiAgICogQHBhcmFtIHtvYmplY3R9IGdyb3VwTGlzdFxuICAgKi9cbiAgc3RhdGljIHVwZGF0ZUdyb3VwT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBncm91cExpc3QpIHtcbiAgICBpZiAoZ3JvdXBMaXN0ID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gTm8gZ3JvdXBzLCBub3RoaW5nIHRvIGRvXG5cbiAgICBjb25zdCBncm91cCA9IHBhcmVudE9wdGlvbnMuZ3JvdXA7XG5cbiAgICAvLyBwYXJhbm9pYTogdGhlIHNlbGVjdGVkIGdyb3VwIGlzIGFscmVhZHkgbWVyZ2VkIGludG8gbm9kZSBvcHRpb25zLCBjaGVjay5cbiAgICBpZiAoXG4gICAgICBuZXdPcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG5ld09wdGlvbnMuZ3JvdXAgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgZ3JvdXAgIT09IG5ld09wdGlvbnMuZ3JvdXBcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJ1cGRhdGVHcm91cE9wdGlvbnM6IGdyb3VwIHZhbHVlcyBpbiBvcHRpb25zIGRvbid0IG1hdGNoLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0dyb3VwID1cbiAgICAgIHR5cGVvZiBncm91cCA9PT0gXCJudW1iZXJcIiB8fCAodHlwZW9mIGdyb3VwID09PSBcInN0cmluZ1wiICYmIGdyb3VwICE9IFwiXCIpO1xuICAgIGlmICghaGFzR3JvdXApIHJldHVybjsgLy8gY3VycmVudCBub2RlIGhhcyBubyBncm91cCwgbm8gbmVlZCB0byBtZXJnZVxuXG4gICAgY29uc3QgZ3JvdXBPYmogPSBncm91cExpc3QuZ2V0KGdyb3VwKTtcblxuICAgIGlmIChncm91cE9iai5vcGFjaXR5ICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5vcGFjaXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghTm9kZS5jaGVja09wYWNpdHkoZ3JvdXBPYmoub3BhY2l0eSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIG9wYWNpdHkuIFZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBmb3VuZDogXCIgK1xuICAgICAgICAgICAgZ3JvdXBPYmoub3BhY2l0eVxuICAgICAgICApO1xuICAgICAgICBncm91cE9iai5vcGFjaXR5ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNraXAgYW55IG5ldyBvcHRpb24gdG8gYXZvaWQgdGhlbSBiZWluZyBvdmVycmlkZGVuIGJ5IHRoZSBncm91cCBvcHRpb25zLlxuICAgIGNvbnN0IHNraXBQcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobmV3T3B0aW9ucykuZmlsdGVyKFxuICAgICAgKHApID0+IG5ld09wdGlvbnNbcF0gIT0gbnVsbFxuICAgICk7XG4gICAgLy8gQWx3YXlzIHNraXAgbWVyZ2luZyBncm91cCBmb250IG9wdGlvbnMgaW50byBwYXJlbnQ7IHRoZXNlIGFyZSByZXF1aXJlZCB0byBiZSBkaXN0aW5jdCBmb3IgbGFiZWxzXG4gICAgc2tpcFByb3BlcnRpZXMucHVzaChcImZvbnRcIik7XG4gICAgc2VsZWN0aXZlTm90RGVlcEV4dGVuZChza2lwUHJvcGVydGllcywgcGFyZW50T3B0aW9ucywgZ3JvdXBPYmopO1xuXG4gICAgLy8gdGhlIGNvbG9yIG9iamVjdCBuZWVkcyB0byBiZSBjb21wbGV0ZWx5IGRlZmluZWQuXG4gICAgLy8gU2luY2UgZ3JvdXBzIGNhbiBwYXJ0aWFsbHkgb3ZlcndyaXRlIHRoZSBjb2xvcnMsIHdlIHBhcnNlIGl0IGFnYWluLCBqdXN0IGluIGNhc2UuXG4gICAgcGFyZW50T3B0aW9ucy5jb2xvciA9IHBhcnNlQ29sb3IocGFyZW50T3B0aW9ucy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwcm9jZXNzIGFsbCBwb3NzaWJsZSBzaG9ydGhhbmRzIGluIHRoZSBuZXcgb3B0aW9ucyBhbmQgbWFrZXMgc3VyZSB0aGF0IHRoZSBwYXJlbnRPcHRpb25zIGFyZSBmdWxseSBkZWZpbmVkLlxuICAgKiBTdGF0aWMgc28gaXQgY2FuIGFsc28gYmUgdXNlZCBieSB0aGUgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudE9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld09wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dEZWxldGlvbj1mYWxzZV1cbiAgICogQHBhcmFtIHtvYmplY3R9IFtnbG9iYWxPcHRpb25zPXt9XVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2dyb3VwTGlzdF1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHBhcnNlT3B0aW9ucyhcbiAgICBwYXJlbnRPcHRpb25zLFxuICAgIG5ld09wdGlvbnMsXG4gICAgYWxsb3dEZWxldGlvbiA9IGZhbHNlLFxuICAgIGdsb2JhbE9wdGlvbnMgPSB7fSxcbiAgICBncm91cExpc3RcbiAgKSB7XG4gICAgY29uc3QgZmllbGRzID0gW1wiY29sb3JcIiwgXCJmaXhlZFwiLCBcInNoYWRvd1wiXTtcbiAgICBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kKGZpZWxkcywgcGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgYWxsb3dEZWxldGlvbik7XG5cbiAgICBOb2RlLmNoZWNrTWFzcyhuZXdPcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnRPcHRpb25zLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFOb2RlLmNoZWNrT3BhY2l0eShwYXJlbnRPcHRpb25zLm9wYWNpdHkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIG9wdGlvbiBmb3Igbm9kZSBvcGFjaXR5LiBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZm91bmQ6IFwiICtcbiAgICAgICAgICAgIHBhcmVudE9wdGlvbnMub3BhY2l0eVxuICAgICAgICApO1xuICAgICAgICBwYXJlbnRPcHRpb25zLm9wYWNpdHkgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5ld09wdGlvbnMub3BhY2l0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIU5vZGUuY2hlY2tPcGFjaXR5KG5ld09wdGlvbnMub3BhY2l0eSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIG9wYWNpdHkuIFZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBmb3VuZDogXCIgK1xuICAgICAgICAgICAgbmV3T3B0aW9ucy5vcGFjaXR5XG4gICAgICAgICk7XG4gICAgICAgIG5ld09wdGlvbnMub3BhY2l0eSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBuZXdPcHRpb25zLnNoYXBlUHJvcGVydGllcyAmJlxuICAgICAgIU5vZGUuY2hlY2tDb29yZGluYXRlT3JpZ2luKG5ld09wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW4pXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIGNvb3JkaW5hdGVPcmlnaW4sIGZvdW5kOiBcIiArXG4gICAgICAgICAgbmV3T3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuY29vcmRpbmF0ZU9yaWdpblxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBtZXJnZSB0aGUgc2hhZG93IG9wdGlvbnMgaW50byB0aGUgcGFyZW50LlxuICAgIG1lcmdlT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBcInNoYWRvd1wiLCBnbG9iYWxPcHRpb25zKTtcblxuICAgIC8vIGluZGl2aWR1YWwgc2hhcGUgbmV3T3B0aW9uc1xuICAgIGlmIChuZXdPcHRpb25zLmNvbG9yICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5jb2xvciAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcGFyc2VkQ29sb3IgPSBwYXJzZUNvbG9yKG5ld09wdGlvbnMuY29sb3IpO1xuICAgICAgZmlsbElmRGVmaW5lZChwYXJlbnRPcHRpb25zLmNvbG9yLCBwYXJzZWRDb2xvcik7XG4gICAgfSBlbHNlIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuY29sb3IgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuY29sb3IgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5jb2xvcik7IC8vIHNldCB0aGUgb2JqZWN0IGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb25zXG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHRoZSBmaXhlZCBvcHRpb25zXG4gICAgaWYgKG5ld09wdGlvbnMuZml4ZWQgIT09IHVuZGVmaW5lZCAmJiBuZXdPcHRpb25zLmZpeGVkICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG5ld09wdGlvbnMuZml4ZWQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZml4ZWQueCA9IG5ld09wdGlvbnMuZml4ZWQ7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZml4ZWQueSA9IG5ld09wdGlvbnMuZml4ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbmV3T3B0aW9ucy5maXhlZC54ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICB0eXBlb2YgbmV3T3B0aW9ucy5maXhlZC54ID09PSBcImJvb2xlYW5cIlxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJlbnRPcHRpb25zLmZpeGVkLnggPSBuZXdPcHRpb25zLmZpeGVkLng7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5ld09wdGlvbnMuZml4ZWQueSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdHlwZW9mIG5ld09wdGlvbnMuZml4ZWQueSA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcGFyZW50T3B0aW9ucy5maXhlZC55ID0gbmV3T3B0aW9ucy5maXhlZC55O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUgJiYgbmV3T3B0aW9ucy5mb250ID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmZvbnQgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5mb250KTsgLy8gc2V0IHRoZSBvYmplY3QgYmFjayB0byB0aGUgZ2xvYmFsIG9wdGlvbnNcbiAgICB9XG5cbiAgICBOb2RlLnVwZGF0ZUdyb3VwT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBncm91cExpc3QpO1xuXG4gICAgLy8gaGFuZGxlIHRoZSBzY2FsaW5nIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgbGFiZWwgcGFydFxuICAgIGlmIChuZXdPcHRpb25zLnNjYWxpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbWVyZ2VPcHRpb25zKFxuICAgICAgICBwYXJlbnRPcHRpb25zLnNjYWxpbmcsXG4gICAgICAgIG5ld09wdGlvbnMuc2NhbGluZyxcbiAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICBnbG9iYWxPcHRpb25zLnNjYWxpbmdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHt7Y29sb3I6ICosIGJvcmRlcldpZHRoOiAqLCBib3JkZXJDb2xvcjogKiwgc2l6ZTogKiwgYm9yZGVyRGFzaGVzOiAoYm9vbGVhbnxBcnJheXxhbGxPcHRpb25zLm5vZGVzLnNoYXBlUHJvcGVydGllcy5ib3JkZXJEYXNoZXN8e2Jvb2xlYW4sIGFycmF5fSksIGJvcmRlclJhZGl1czogKG51bWJlcnxhbGxPcHRpb25zLm5vZGVzLnNoYXBlUHJvcGVydGllcy5ib3JkZXJSYWRpdXN8e251bWJlcn18QXJyYXkpLCBzaGFkb3c6ICosIHNoYWRvd0NvbG9yOiAqLCBzaGFkb3dTaXplOiAqLCBzaGFkb3dYOiAqLCBzaGFkb3dZOiAqfX1cbiAgICovXG4gIGdldEZvcm1hdHRpbmdWYWx1ZXMoKSB7XG4gICAgY29uc3QgdmFsdWVzID0ge1xuICAgICAgY29sb3I6IHRoaXMub3B0aW9ucy5jb2xvci5iYWNrZ3JvdW5kLFxuICAgICAgb3BhY2l0eTogdGhpcy5vcHRpb25zLm9wYWNpdHksXG4gICAgICBib3JkZXJXaWR0aDogdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoLFxuICAgICAgYm9yZGVyQ29sb3I6IHRoaXMub3B0aW9ucy5jb2xvci5ib3JkZXIsXG4gICAgICBzaXplOiB0aGlzLm9wdGlvbnMuc2l6ZSxcbiAgICAgIGJvcmRlckRhc2hlczogdGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5ib3JkZXJEYXNoZXMsXG4gICAgICBib3JkZXJSYWRpdXM6IHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzLFxuICAgICAgc2hhZG93OiB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQsXG4gICAgICBzaGFkb3dDb2xvcjogdGhpcy5vcHRpb25zLnNoYWRvdy5jb2xvcixcbiAgICAgIHNoYWRvd1NpemU6IHRoaXMub3B0aW9ucy5zaGFkb3cuc2l6ZSxcbiAgICAgIHNoYWRvd1g6IHRoaXMub3B0aW9ucy5zaGFkb3cueCxcbiAgICAgIHNoYWRvd1k6IHRoaXMub3B0aW9ucy5zaGFkb3cueSxcbiAgICB9O1xuICAgIGlmICh0aGlzLnNlbGVjdGVkIHx8IHRoaXMuaG92ZXIpIHtcbiAgICAgIGlmICh0aGlzLmNob29zZXIgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJvcmRlcldpZHRoU2VsZWN0ZWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsdWVzLmJvcmRlcldpZHRoID0gdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoU2VsZWN0ZWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlcy5ib3JkZXJXaWR0aCAqPSAyO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZXMuY29sb3IgPSB0aGlzLm9wdGlvbnMuY29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQ7XG4gICAgICAgICAgdmFsdWVzLmJvcmRlckNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodC5ib3JkZXI7XG4gICAgICAgICAgdmFsdWVzLnNoYWRvdyA9IHRoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhvdmVyKSB7XG4gICAgICAgICAgdmFsdWVzLmNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyLmJhY2tncm91bmQ7XG4gICAgICAgICAgdmFsdWVzLmJvcmRlckNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyLmJvcmRlcjtcbiAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNob29zZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLmNob29zZXIodmFsdWVzLCB0aGlzLm9wdGlvbnMuaWQsIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuICAgICAgICBpZiAodmFsdWVzLnNoYWRvdyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93Q29sb3IgIT09IHRoaXMub3B0aW9ucy5zaGFkb3cuY29sb3IgfHxcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3dTaXplICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LnNpemUgfHxcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3dYICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LnggfHxcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3dZICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LnlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3cgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZXMuc2hhZG93ID0gdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IHRoaXMub3B0aW9ucy5vcGFjaXR5O1xuICAgICAgdmFsdWVzLmJvcmRlckNvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KHZhbHVlcy5ib3JkZXJDb2xvciwgb3BhY2l0eSk7XG4gICAgICB2YWx1ZXMuY29sb3IgPSBvdmVycmlkZU9wYWNpdHkodmFsdWVzLmNvbG9yLCBvcGFjaXR5KTtcbiAgICAgIHZhbHVlcy5zaGFkb3dDb2xvciA9IG92ZXJyaWRlT3BhY2l0eSh2YWx1ZXMuc2hhZG93Q29sb3IsIG9wYWNpdHkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICB1cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMub3B0aW9ucy5sYWJlbCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5vcHRpb25zLmxhYmVsID0gXCJcIjtcbiAgICB9XG5cbiAgICBOb2RlLnVwZGF0ZUdyb3VwT3B0aW9ucyhcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgY29sb3I6IChvcHRpb25zICYmIG9wdGlvbnMuY29sb3IpIHx8IHRoaXMuX2xvY2FsQ29sb3IgfHwgdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHRoaXMuZ3JvdXBsaXN0XG4gICAgKTtcblxuICAgIC8vXG4gICAgLy8gTm90ZTpUaGUgcHJvdG90eXBlIGNoYWluIGZvciB0aGlzLm9wdGlvbnMgaXM6XG4gICAgLy9cbiAgICAvLyB0aGlzLm9wdGlvbnMgLT4gICAgTm9kZXNIYW5kbGVyLm9wdGlvbnMgICAgLT4gTm9kZXNIYW5kbGVyLmRlZmF1bHRPcHRpb25zXG4gICAgLy8gICAgICAgICAgICAgICAgIChhbHNvOiB0aGlzLmdsb2JhbE9wdGlvbnMpXG4gICAgLy9cbiAgICAvLyBOb3RlIHRoYXQgdGhlIHByb3RvdHlwZXMgYXJlIG1lbnRpb25lZCBleHBsaWNpdGx5IGluIHRoZSBwaWxlIGxpc3QgYmVsb3c7XG4gICAgLy8gV0UgRE9OJ1QgV0FOVCBUSEUgT1JERVIgT0YgVEhFIFBST1RPVFlQRVMhISEhIEF0IGxlYXN0LCBub3QgZm9yIGZvbnQgaGFuZGxpbmcgb2YgbGFiZWxzLlxuICAgIC8vIFRoaXMgaXMgYSBnb29kIGluZGljYXRpb24gdGhhdCB0aGUgcHJvdG90eXBlIHVzYWdlIG9mIG9wdGlvbnMgaXMgZGVmaWNpZW50LlxuICAgIC8vXG4gICAgY29uc3QgY3VycmVudEdyb3VwID0gdGhpcy5ncm91cGxpc3QuZ2V0KHRoaXMub3B0aW9ucy5ncm91cCwgZmFsc2UpO1xuICAgIGNvbnN0IHBpbGUgPSBbXG4gICAgICBvcHRpb25zLCAvLyBuZXcgb3B0aW9uc1xuICAgICAgdGhpcy5vcHRpb25zLCAvLyBjdXJyZW50IG5vZGUgb3B0aW9ucywgc2VlIGNvbW1lbnQgYWJvdmUgZm9yIHByb3RvdHlwZVxuICAgICAgY3VycmVudEdyb3VwLCAvLyBncm91cCBvcHRpb25zLCBpZiBhbnlcbiAgICAgIHRoaXMuZ2xvYmFsT3B0aW9ucywgLy8gQ3VycmVudGx5IHNldCBnbG9iYWwgbm9kZSBvcHRpb25zXG4gICAgICB0aGlzLmRlZmF1bHRPcHRpb25zLCAvLyBEZWZhdWx0IGdsb2JhbCBub2RlIG9wdGlvbnNcbiAgICBdO1xuICAgIHRoaXMubGFiZWxNb2R1bGUudXBkYXRlKHRoaXMub3B0aW9ucywgcGlsZSk7XG5cbiAgICBpZiAodGhpcy5sYWJlbE1vZHVsZS5iYXNlU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJhc2VGb250U2l6ZSA9IHRoaXMubGFiZWxNb2R1bGUuYmFzZVNpemU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50U2hhcGVcbiAgICovXG4gIHVwZGF0ZVNoYXBlKGN1cnJlbnRTaGFwZSkge1xuICAgIGlmIChjdXJyZW50U2hhcGUgPT09IHRoaXMub3B0aW9ucy5zaGFwZSAmJiB0aGlzLnNoYXBlKSB7XG4gICAgICB0aGlzLnNoYXBlLnNldE9wdGlvbnModGhpcy5vcHRpb25zLCB0aGlzLmltYWdlT2JqLCB0aGlzLmltYWdlT2JqQWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2hvb3NlIGRyYXcgbWV0aG9kIGRlcGVuZGluZyBvbiB0aGUgc2hhcGVcbiAgICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLnNoYXBlKSB7XG4gICAgICAgIGNhc2UgXCJib3hcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEJveCh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjaXJjbGVcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IENpcmNsZSh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjaXJjdWxhckltYWdlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBDaXJjdWxhckltYWdlKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZSxcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VPYmosXG4gICAgICAgICAgICB0aGlzLmltYWdlT2JqQWx0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImN1c3RvbVwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgQ3VzdG9tU2hhcGUoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmN0eFJlbmRlcmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRhdGFiYXNlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBEYXRhYmFzZSh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkaWFtb25kXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBEaWFtb25kKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRvdFwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgRG90KHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImVsbGlwc2VcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEVsbGlwc2UodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaWNvblwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgSWNvbih0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbWFnZVwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgSW1hZ2UoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLFxuICAgICAgICAgICAgdGhpcy5pbWFnZU9iaixcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VPYmpBbHRcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3F1YXJlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBTcXVhcmUodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaGV4YWdvblwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgSGV4YWdvbih0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzdGFyXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBTdGFyKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IFRleHQodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidHJpYW5nbGVcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IFRyaWFuZ2xlKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRyaWFuZ2xlRG93blwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgVHJpYW5nbGVEb3duKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBFbGxpcHNlKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5uZWVkc1JlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZWxlY3QgdGhpcyBub2RlXG4gICAqL1xuICBzZWxlY3QoKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5uZWVkc1JlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB1bnNlbGVjdCB0aGlzIG5vZGVcbiAgICovXG4gIHVuc2VsZWN0KCkge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLm5lZWRzUmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBjYWxjdWxhdGVkIHNpemUgb2YgdGhlIG5vZGUsIGZvcmNlcyBpdCB0byByZWNhbGN1bGF0ZSBpdHMgc2l6ZVxuICAgKi9cbiAgbmVlZHNSZWZyZXNoKCkge1xuICAgIHRoaXMuc2hhcGUucmVmcmVzaE5lZWRlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB0aXRsZSBvZiB0aGlzIG5vZGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRpdGxlICAgIFRoZSB0aXRsZSBvZiB0aGUgbm9kZSwgb3IgdW5kZWZpbmVkIHdoZW4gbm8gdGl0bGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiBzZXQuXG4gICAqL1xuICBnZXRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRpdGxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgdG8gdGhlIGJvcmRlciBvZiB0aGUgTm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gICBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlICAgICAgICBBbmdsZSBpbiByYWRpYW5zXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IGRpc3RhbmNlICAgRGlzdGFuY2UgdG8gdGhlIGJvcmRlciBpbiBwaXhlbHNcbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLnNoYXBlLmRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBub2RlIGhhcyBhIGZpeGVkIHggYW5kIHkgcG9zaXRpb25cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59ICAgICAgdHJ1ZSBpZiBmaXhlZCwgZmFsc2UgaWYgbm90XG4gICAqL1xuICBpc0ZpeGVkKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZml4ZWQueCAmJiB0aGlzLm9wdGlvbnMuZml4ZWQueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBpZiB0aGlzIG5vZGUgaXMgc2VsZWN0ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gc2VsZWN0ZWQgICBUcnVlIGlmIG5vZGUgaXMgc2VsZWN0ZWQsIGVsc2UgZmFsc2VcbiAgICovXG4gIGlzU2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHZhbHVlIG9mIHRoZSBub2RlLiBDYW4gYmUgdW5kZWZpbmVkXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IHZhbHVlXG4gICAqL1xuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBkaW1lbnNpb25zIG9mIHRoZSBsYWJlbFxuICAgKlxuICAgKiBAcmV0dXJucyB7cmVjdH1cbiAgICovXG4gIGdldExhYmVsU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbE1vZHVsZS5zaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0IHRoZSB2YWx1ZSByYW5nZSBvZiB0aGUgbm9kZS4gVGhlIG5vZGUgd2lsbCBhZGp1c3QgaXQncyBzaXplXG4gICAqIGJhc2VkIG9uIGl0cyB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pblxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFxuICAgKi9cbiAgc2V0VmFsdWVSYW5nZShtaW4sIG1heCwgdG90YWwpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5vcHRpb25zLnNjYWxpbmcuY3VzdG9tU2NhbGluZ0Z1bmN0aW9uKFxuICAgICAgICBtaW4sXG4gICAgICAgIG1heCxcbiAgICAgICAgdG90YWwsXG4gICAgICAgIHRoaXMub3B0aW9ucy52YWx1ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNpemVEaWZmID0gdGhpcy5vcHRpb25zLnNjYWxpbmcubWF4IC0gdGhpcy5vcHRpb25zLnNjYWxpbmcubWluO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgZm9udERpZmYgPVxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1heCAtIHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1pbjtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvbnQuc2l6ZSA9XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwubWluICsgc2NhbGUgKiBmb250RGlmZjtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0aW9ucy5zaXplID0gdGhpcy5vcHRpb25zLnNjYWxpbmcubWluICsgc2NhbGUgKiBzaXplRGlmZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zLnNpemUgPSB0aGlzLmJhc2VTaXplO1xuICAgICAgdGhpcy5vcHRpb25zLmZvbnQuc2l6ZSA9IHRoaXMuYmFzZUZvbnRTaXplO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTGFiZWxNb2R1bGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgbm9kZSBpbiB0aGUgZ2l2ZW4gY2FudmFzXG4gICAqIFRoZSAyZCBjb250ZXh0IG9mIGEgSFRNTCBjYW52YXMgY2FuIGJlIHJldHJpZXZlZCBieSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gICBjdHhcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4KSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRGb3JtYXR0aW5nVmFsdWVzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hhcGUuZHJhdyhjdHgsIHRoaXMueCwgdGhpcy55LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyLCB2YWx1ZXMpIHx8XG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIHNoYXBlXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSAgIGN0eFxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goY3R4KSB7XG4gICAgdGhpcy5zaGFwZS51cGRhdGVCb3VuZGluZ0JveCh0aGlzLngsIHRoaXMueSwgY3R4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGlzIG5vZGUgaW4gdGhlIGdpdmVuIGNhbnZhc1xuICAgKiBUaGUgMmQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqL1xuICByZXNpemUoY3R4KSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRGb3JtYXR0aW5nVmFsdWVzKCk7XG4gICAgdGhpcy5zaGFwZS5yZXNpemUoY3R4LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyLCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBhbGwgdmlzdWFsIGVsZW1lbnRzIG9mIHRoaXMgbm9kZSBpbnN0YW5jZSwgaW4gd2hpY2ggdGhlIGdpdmVuXG4gICAqIHBvaW50IGZhbGxzIHdpdGhpbiB0aGUgYm91bmRpbmcgc2hhcGUuXG4gICAqXG4gICAqIEBwYXJhbSB7cG9pbnR9IHBvaW50XG4gICAqIEByZXR1cm5zIHtBcnJheS48bm9kZUNsaWNrSXRlbXxub2RlTGFiZWxDbGlja0l0ZW0+fSBsaXN0IHdpdGggdGhlIGl0ZW1zIHdoaWNoIGFyZSBvbiB0aGUgcG9pbnRcbiAgICovXG4gIGdldEl0ZW1zT25Qb2ludChwb2ludCkge1xuICAgIGNvbnN0IHJldCA9IFtdO1xuXG4gICAgaWYgKHRoaXMubGFiZWxNb2R1bGUudmlzaWJsZSgpKSB7XG4gICAgICBpZiAocG9pbnRJblJlY3QodGhpcy5sYWJlbE1vZHVsZS5nZXRTaXplKCksIHBvaW50KSkge1xuICAgICAgICByZXQucHVzaCh7IG5vZGVJZDogdGhpcy5pZCwgbGFiZWxJZDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9pbnRJblJlY3QodGhpcy5zaGFwZS5ib3VuZGluZ0JveCwgcG9pbnQpKSB7XG4gICAgICByZXQucHVzaCh7IG5vZGVJZDogdGhpcy5pZCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgb2JqZWN0IGlzIG92ZXJsYXBwaW5nIHdpdGggdGhlIHByb3ZpZGVkIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqICAgYW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b21cbiAgICogQHJldHVybnMge2Jvb2xlYW59ICAgICBUcnVlIGlmIGxvY2F0aW9uIGlzIGxvY2F0ZWQgb24gbm9kZVxuICAgKi9cbiAgaXNPdmVybGFwcGluZ1dpdGgob2JqKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hhcGUubGVmdCA8IG9iai5yaWdodCAmJlxuICAgICAgdGhpcy5zaGFwZS5sZWZ0ICsgdGhpcy5zaGFwZS53aWR0aCA+IG9iai5sZWZ0ICYmXG4gICAgICB0aGlzLnNoYXBlLnRvcCA8IG9iai5ib3R0b20gJiZcbiAgICAgIHRoaXMuc2hhcGUudG9wICsgdGhpcy5zaGFwZS5oZWlnaHQgPiBvYmoudG9wXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIG9iamVjdCBpcyBvdmVybGFwcGluZyB3aXRoIHRoZSBwcm92aWRlZCBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iaiAgIGFuIG9iamVjdCB3aXRoIHBhcmFtZXRlcnMgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAgICAgVHJ1ZSBpZiBsb2NhdGlvbiBpcyBsb2NhdGVkIG9uIG5vZGVcbiAgICovXG4gIGlzQm91bmRpbmdCb3hPdmVybGFwcGluZ1dpdGgob2JqKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hhcGUuYm91bmRpbmdCb3gubGVmdCA8IG9iai5yaWdodCAmJlxuICAgICAgdGhpcy5zaGFwZS5ib3VuZGluZ0JveC5yaWdodCA+IG9iai5sZWZ0ICYmXG4gICAgICB0aGlzLnNoYXBlLmJvdW5kaW5nQm94LnRvcCA8IG9iai5ib3R0b20gJiZcbiAgICAgIHRoaXMuc2hhcGUuYm91bmRpbmdCb3guYm90dG9tID4gb2JqLnRvcFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdmFsaWQgdmFsdWVzIGZvciBtYXNzXG4gICAqXG4gICAqIFRoZSBtYXNzIG1heSBub3QgYmUgbmVnYXRpdmUgb3IgemVyby4gSWYgaXQgaXMsIHJlc2V0IHRvIDFcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBpZFxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgY2hlY2tNYXNzKG9wdGlvbnMsIGlkKSB7XG4gICAgaWYgKG9wdGlvbnMubWFzcyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMubWFzcyA8PSAwKSB7XG4gICAgICBsZXQgc3RySWQgPSBcIlwiO1xuICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3RySWQgPSBcIiBpbiBub2RlIGlkOiBcIiArIGlkO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCIlY05lZ2F0aXZlIG9yIHplcm8gbWFzcyBkaXNhbGxvd2VkXCIgKyBzdHJJZCArIFwiLCBzZXR0aW5nIG1hc3MgdG8gMS5cIixcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFXG4gICAgICApO1xuICAgICAgb3B0aW9ucy5tYXNzID0gMTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTm9kZTtcbiIsICJpbXBvcnQgeyBicmlkZ2VPYmplY3QsIGZvckVhY2ggfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBEYXRhU2V0LCBpc0RhdGFWaWV3TGlrZSB9IGZyb20gXCJ2aXMtZGF0YS9lc25leHRcIjtcbmltcG9ydCBOb2RlIGZyb20gXCIuL2NvbXBvbmVudHMvTm9kZVwiO1xuXG4vKipcbiAqIEhhbmRsZXIgZm9yIE5vZGVzXG4gKi9cbmNsYXNzIE5vZGVzSGFuZGxlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0ltYWdlc30gaW1hZ2VzXG4gICAqIEBwYXJhbSB7QXJyYXkuPEdyb3VwPn0gZ3JvdXBzXG4gICAqIEBwYXJhbSB7TGF5b3V0RW5naW5lfSBsYXlvdXRFbmdpbmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGltYWdlcywgZ3JvdXBzLCBsYXlvdXRFbmdpbmUpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuaW1hZ2VzID0gaW1hZ2VzO1xuICAgIHRoaXMuZ3JvdXBzID0gZ3JvdXBzO1xuICAgIHRoaXMubGF5b3V0RW5naW5lID0gbGF5b3V0RW5naW5lO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBub2RlIEFQSSBpbiB0aGUgYm9keSBjb250YWluZXJcbiAgICB0aGlzLmJvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGUgPSB0aGlzLmNyZWF0ZS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5ub2Rlc0xpc3RlbmVycyA9IHtcbiAgICAgIGFkZDogKGV2ZW50LCBwYXJhbXMpID0+IHtcbiAgICAgICAgdGhpcy5hZGQocGFyYW1zLml0ZW1zKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlKHBhcmFtcy5pdGVtcywgcGFyYW1zLmRhdGEsIHBhcmFtcy5vbGREYXRhKTtcbiAgICAgIH0sXG4gICAgICByZW1vdmU6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlKHBhcmFtcy5pdGVtcyk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICBib3JkZXJXaWR0aFNlbGVjdGVkOiB1bmRlZmluZWQsXG4gICAgICBicm9rZW5JbWFnZTogdW5kZWZpbmVkLFxuICAgICAgY29sb3I6IHtcbiAgICAgICAgYm9yZGVyOiBcIiMyQjdDRTlcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjOTdDMkZDXCIsXG4gICAgICAgIGhpZ2hsaWdodDoge1xuICAgICAgICAgIGJvcmRlcjogXCIjMkI3Q0U5XCIsXG4gICAgICAgICAgYmFja2dyb3VuZDogXCIjRDJFNUZGXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgYm9yZGVyOiBcIiMyQjdDRTlcIixcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBcIiNEMkU1RkZcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBvcGFjaXR5OiB1bmRlZmluZWQsIC8vIG51bWJlciBiZXR3ZWVuIDAgYW5kIDFcbiAgICAgIGZpeGVkOiB7XG4gICAgICAgIHg6IGZhbHNlLFxuICAgICAgICB5OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBmb250OiB7XG4gICAgICAgIGNvbG9yOiBcIiMzNDM0MzRcIixcbiAgICAgICAgc2l6ZTogMTQsIC8vIHB4XG4gICAgICAgIGZhY2U6IFwiYXJpYWxcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCJub25lXCIsXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLCAvLyBweFxuICAgICAgICBzdHJva2VDb2xvcjogXCIjZmZmZmZmXCIsXG4gICAgICAgIGFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICB2YWRqdXN0OiAwLFxuICAgICAgICBtdWx0aTogZmFsc2UsXG4gICAgICAgIGJvbGQ6IHtcbiAgICAgICAgICBtb2Q6IFwiYm9sZFwiLFxuICAgICAgICB9LFxuICAgICAgICBib2xkaXRhbDoge1xuICAgICAgICAgIG1vZDogXCJib2xkIGl0YWxpY1wiLFxuICAgICAgICB9LFxuICAgICAgICBpdGFsOiB7XG4gICAgICAgICAgbW9kOiBcIml0YWxpY1wiLFxuICAgICAgICB9LFxuICAgICAgICBtb25vOiB7XG4gICAgICAgICAgbW9kOiBcIlwiLFxuICAgICAgICAgIHNpemU6IDE1LCAvLyBweFxuICAgICAgICAgIGZhY2U6IFwibW9ub3NwYWNlXCIsXG4gICAgICAgICAgdmFkanVzdDogMixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBncm91cDogdW5kZWZpbmVkLFxuICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgIGljb246IHtcbiAgICAgICAgZmFjZTogXCJGb250QXdlc29tZVwiLCAvLydGb250QXdlc29tZScsXG4gICAgICAgIGNvZGU6IHVuZGVmaW5lZCwgLy8nXFx1ZjAwNycsXG4gICAgICAgIHNpemU6IDUwLCAvLzUwLFxuICAgICAgICBjb2xvcjogXCIjMkI3Q0U5XCIsIC8vJyNhYTAwZmYnXG4gICAgICB9LFxuICAgICAgaW1hZ2U6IHVuZGVmaW5lZCwgLy8gLS0+IFVSTFxuICAgICAgaW1hZ2VQYWRkaW5nOiB7XG4gICAgICAgIC8vIG9ubHkgZm9yIGltYWdlIHNoYXBlXG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgIH0sXG4gICAgICBsYWJlbDogdW5kZWZpbmVkLFxuICAgICAgbGFiZWxIaWdobGlnaHRCb2xkOiB0cnVlLFxuICAgICAgbGV2ZWw6IHVuZGVmaW5lZCxcbiAgICAgIG1hcmdpbjoge1xuICAgICAgICB0b3A6IDUsXG4gICAgICAgIHJpZ2h0OiA1LFxuICAgICAgICBib3R0b206IDUsXG4gICAgICAgIGxlZnQ6IDUsXG4gICAgICB9LFxuICAgICAgbWFzczogMSxcbiAgICAgIHBoeXNpY3M6IHRydWUsXG4gICAgICBzY2FsaW5nOiB7XG4gICAgICAgIG1pbjogMTAsXG4gICAgICAgIG1heDogMzAsXG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgbWluOiAxNCxcbiAgICAgICAgICBtYXg6IDMwLFxuICAgICAgICAgIG1heFZpc2libGU6IDMwLFxuICAgICAgICAgIGRyYXdUaHJlc2hvbGQ6IDUsXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbVNjYWxpbmdGdW5jdGlvbjogZnVuY3Rpb24gKG1pbiwgbWF4LCB0b3RhbCwgdmFsdWUpIHtcbiAgICAgICAgICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICAgICAgICAgIHJldHVybiAwLjU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gMSAvIChtYXggLSBtaW4pO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsICh2YWx1ZSAtIG1pbikgKiBzY2FsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNoYWRvdzoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgY29sb3I6IFwicmdiYSgwLDAsMCwwLjUpXCIsXG4gICAgICAgIHNpemU6IDEwLFxuICAgICAgICB4OiA1LFxuICAgICAgICB5OiA1LFxuICAgICAgfSxcbiAgICAgIHNoYXBlOiBcImVsbGlwc2VcIixcbiAgICAgIHNoYXBlUHJvcGVydGllczoge1xuICAgICAgICBib3JkZXJEYXNoZXM6IGZhbHNlLCAvLyBvbmx5IGZvciBib3JkZXJzXG4gICAgICAgIGJvcmRlclJhZGl1czogNiwgLy8gb25seSBmb3IgYm94IHNoYXBlXG4gICAgICAgIGludGVycG9sYXRpb246IHRydWUsIC8vIG9ubHkgZm9yIGltYWdlIGFuZCBjaXJjdWxhckltYWdlIHNoYXBlc1xuICAgICAgICB1c2VJbWFnZVNpemU6IGZhbHNlLCAvLyBvbmx5IGZvciBpbWFnZSBhbmQgY2lyY3VsYXJJbWFnZSBzaGFwZXNcbiAgICAgICAgdXNlQm9yZGVyV2l0aEltYWdlOiBmYWxzZSwgLy8gb25seSBmb3IgaW1hZ2Ugc2hhcGVcbiAgICAgICAgY29vcmRpbmF0ZU9yaWdpbjogXCJjZW50ZXJcIiwgLy8gb25seSBmb3IgaW1hZ2UgYW5kIGNpcmN1bGFySW1hZ2Ugc2hhcGVzXG4gICAgICB9LFxuICAgICAgc2l6ZTogMjUsXG4gICAgICB0aXRsZTogdW5kZWZpbmVkLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIHg6IHVuZGVmaW5lZCxcbiAgICAgIHk6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgLy8gUHJvdGVjdCBmcm9tIGlkaW9jeVxuICAgIGlmICh0aGlzLmRlZmF1bHRPcHRpb25zLm1hc3MgPD0gMCkge1xuICAgICAgdGhyb3cgXCJJbnRlcm5hbCBlcnJvcjogbWFzcyBpbiBkZWZhdWx0T3B0aW9ucyBvZiBOb2Rlc0hhbmRsZXIgbWF5IG5vdCBiZSB6ZXJvIG9yIG5lZ2F0aXZlXCI7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gYnJpZGdlT2JqZWN0KHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICAvLyByZWZyZXNoIHRoZSBub2Rlcy4gVXNlZCB3aGVuIHJldmVydGluZyBmcm9tIGhpZXJhcmNoaWNhbCBsYXlvdXRcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInJlZnJlc2hOb2Rlc1wiLCB0aGlzLnJlZnJlc2guYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJyZWZyZXNoXCIsIHRoaXMucmVmcmVzaC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgZm9yRWFjaCh0aGlzLm5vZGVzTGlzdGVuZXJzLCAoY2FsbGJhY2ssIGV2ZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmJvZHkuZGF0YS5ub2RlcykgdGhpcy5ib2R5LmRhdGEubm9kZXMub2ZmKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGU7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycy5hZGQ7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycy51cGRhdGU7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycy5yZW1vdmU7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgTm9kZS5wYXJzZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgLy8gTmVlZCB0byBzZXQgb3BhY2l0eSBoZXJlIGJlY2F1c2UgTm9kZS5wYXJzZU9wdGlvbnMgaXMgYWxzbyB1c2VkIGZvciBncm91cHMsXG4gICAgICAvLyBpZiB5b3Ugc2V0IG9wYWNpdHkgaW4gTm9kZS5wYXJzZU9wdGlvbnMgaXQgb3ZlcndyaXRlcyBncm91cCBvcGFjaXR5LlxuICAgICAgaWYgKG9wdGlvbnMub3BhY2l0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBOdW1iZXIuaXNOYU4ob3B0aW9ucy5vcGFjaXR5KSB8fFxuICAgICAgICAgICFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5vcGFjaXR5KSB8fFxuICAgICAgICAgIG9wdGlvbnMub3BhY2l0eSA8IDAgfHxcbiAgICAgICAgICBvcHRpb25zLm9wYWNpdHkgPiAxXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIG9wYWNpdHkuIFZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBmb3VuZDogXCIgK1xuICAgICAgICAgICAgICBvcHRpb25zLm9wYWNpdHlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5vcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgc2hhcGUgaW4gYWxsIG5vZGVzXG4gICAgICBpZiAob3B0aW9ucy5zaGFwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS51cGRhdGVTaGFwZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgdGhlIGxhYmVscyBvZiBub2RlcyBpZiBhbnkgcmVsZXZhbnQgb3B0aW9ucyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5mb250ICE9PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAgIHR5cGVvZiBvcHRpb25zLndpZHRoQ29uc3RyYWludCAhPT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5oZWlnaHRDb25zdHJhaW50ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBub2RlSWQgb2YgT2JqZWN0LmtleXModGhpcy5ib2R5Lm5vZGVzKSkge1xuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLnVwZGF0ZUxhYmVsTW9kdWxlKCk7XG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0ubmVlZHNSZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIHRoZSBzaGFwZSBzaXplIGluIGFsbCBub2Rlc1xuICAgICAgaWYgKG9wdGlvbnMuc2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS5uZWVkc1JlZnJlc2goKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgdmFyaWFibGVzIGlmIG5lZWRlZFxuICAgICAgaWYgKG9wdGlvbnMuaGlkZGVuICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5waHlzaWNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgZGF0YSBzZXQgd2l0aCBub2RlcyBmb3IgdGhlIG5ldHdvcmtcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IERhdGFTZXQgfCBEYXRhVmlld30gbm9kZXMgICAgICAgICBUaGUgZGF0YSBjb250YWluaW5nIHRoZSBub2Rlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9Ob3RFbWl0PWZhbHNlXSAtIFN1cHByZXNzIGRhdGEgY2hhbmdlZCBldmVudC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNldERhdGEobm9kZXMsIGRvTm90RW1pdCA9IGZhbHNlKSB7XG4gICAgY29uc3Qgb2xkTm9kZXNEYXRhID0gdGhpcy5ib2R5LmRhdGEubm9kZXM7XG5cbiAgICBpZiAoaXNEYXRhVmlld0xpa2UoXCJpZFwiLCBub2RlcykpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzID0gbm9kZXM7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5vZGVzKSkge1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMgPSBuZXcgRGF0YVNldCgpO1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuYWRkKG5vZGVzKTtcbiAgICB9IGVsc2UgaWYgKCFub2Rlcykge1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMgPSBuZXcgRGF0YVNldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXkgb3IgRGF0YVNldCBleHBlY3RlZFwiKTtcbiAgICB9XG5cbiAgICBpZiAob2xkTm9kZXNEYXRhKSB7XG4gICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIG9sZCBkYXRhc2V0XG4gICAgICBmb3JFYWNoKHRoaXMubm9kZXNMaXN0ZW5lcnMsIGZ1bmN0aW9uIChjYWxsYmFjaywgZXZlbnQpIHtcbiAgICAgICAgb2xkTm9kZXNEYXRhLm9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGRyYXduIG5vZGVzXG4gICAgdGhpcy5ib2R5Lm5vZGVzID0ge307XG5cbiAgICBpZiAodGhpcy5ib2R5LmRhdGEubm9kZXMpIHtcbiAgICAgIC8vIHN1YnNjcmliZSB0byBuZXcgZGF0YXNldFxuICAgICAgY29uc3QgbWUgPSB0aGlzO1xuICAgICAgZm9yRWFjaCh0aGlzLm5vZGVzTGlzdGVuZXJzLCBmdW5jdGlvbiAoY2FsbGJhY2ssIGV2ZW50KSB7XG4gICAgICAgIG1lLmJvZHkuZGF0YS5ub2Rlcy5vbihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGRyYXcgYWxsIG5ldyBub2Rlc1xuICAgICAgY29uc3QgaWRzID0gdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0SWRzKCk7XG4gICAgICB0aGlzLmFkZChpZHMsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChkb05vdEVtaXQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbm9kZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXSB8IHN0cmluZ1tdfSBpZHNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9Ob3RFbWl0PWZhbHNlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkKGlkcywgZG9Ob3RFbWl0ID0gZmFsc2UpIHtcbiAgICBsZXQgaWQ7XG4gICAgY29uc3QgbmV3Tm9kZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWQgPSBpZHNbaV07XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0KGlkKTtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZShwcm9wZXJ0aWVzKTtcbiAgICAgIG5ld05vZGVzLnB1c2gobm9kZSk7XG4gICAgICB0aGlzLmJvZHkubm9kZXNbaWRdID0gbm9kZTsgLy8gbm90ZTogdGhpcyBtYXkgcmVwbGFjZSBhbiBleGlzdGluZyBub2RlXG4gICAgfVxuXG4gICAgdGhpcy5sYXlvdXRFbmdpbmUucG9zaXRpb25Jbml0aWFsbHkobmV3Tm9kZXMpO1xuXG4gICAgaWYgKGRvTm90RW1pdCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBub2Rlcywgb3IgY3JlYXRlIHRoZW0gd2hlbiBub3QgeWV0IGV4aXN0aW5nXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzIGlkJ3Mgb2YgY2hhbmdlZCBub2Rlc1xuICAgKiBAcGFyYW0ge0FycmF5fSBjaGFuZ2VkRGF0YSBhcnJheSB3aXRoIGNoYW5nZWQgZGF0YVxuICAgKiBAcGFyYW0ge0FycmF5fHVuZGVmaW5lZH0gb2xkRGF0YSBvcHRpb25hbDsgYXJyYXkgd2l0aCBwcmV2aW91cyBkYXRhXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1cGRhdGUoaWRzLCBjaGFuZ2VkRGF0YSwgb2xkRGF0YSkge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgIGxldCBub2RlID0gbm9kZXNbaWRdO1xuICAgICAgY29uc3QgZGF0YSA9IGNoYW5nZWREYXRhW2ldO1xuICAgICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyB1cGRhdGUgbm9kZVxuICAgICAgICBpZiAobm9kZS5zZXRPcHRpb25zKGRhdGEpKSB7XG4gICAgICAgICAgZGF0YUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIC8vIGNyZWF0ZSBub2RlXG4gICAgICAgIG5vZGUgPSB0aGlzLmNyZWF0ZShkYXRhKTtcbiAgICAgICAgbm9kZXNbaWRdID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWRhdGFDaGFuZ2VkICYmIG9sZERhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ2hlY2sgZm9yIGFueSBjaGFuZ2VzIHdoaWNoIHNob3VsZCB0cmlnZ2VyIGEgbGF5b3V0IHJlY2FsY3VsYXRpb25cbiAgICAgIC8vIEZvciBub3csIHRoaXMgaXMganVzdCAnbGV2ZWwnIGZvciBoaWVyYXJjaGljYWwgbGF5b3V0XG4gICAgICAvLyBBc3N1bXB0aW9uOiBvbGQgYW5kIG5ldyBkYXRhIGFycmFuZ2VkIGluIHNhbWUgb3JkZXI7IGF0IHRpbWUgb2Ygd3JpdGluZywgdGhpcyBob2xkcy5cbiAgICAgIGRhdGFDaGFuZ2VkID0gY2hhbmdlZERhdGEuc29tZShmdW5jdGlvbiAobmV3VmFsdWUsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gb2xkRGF0YVtpbmRleF07XG4gICAgICAgIHJldHVybiBvbGRWYWx1ZSAmJiBvbGRWYWx1ZS5sZXZlbCAhPT0gbmV3VmFsdWUubGV2ZWw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YUNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YVVwZGF0ZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBleGlzdGluZyBub2Rlcy4gSWYgbm9kZXMgZG8gbm90IGV4aXN0LCB0aGUgbWV0aG9kIHdpbGwganVzdCBpZ25vcmUgaXQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZW1vdmUoaWRzKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICBkZWxldGUgbm9kZXNbaWRdO1xuICAgIH1cblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIGEgbm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcGVydGllc1xuICAgKiBAcGFyYW0ge2NsYXNzfSBbY29uc3RydWN0b3JDbGFzcz1Ob2RlLmRlZmF1bHRdXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgY3JlYXRlKHByb3BlcnRpZXMsIGNvbnN0cnVjdG9yQ2xhc3MgPSBOb2RlKSB7XG4gICAgcmV0dXJuIG5ldyBjb25zdHJ1Y3RvckNsYXNzKFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHRoaXMuYm9keSxcbiAgICAgIHRoaXMuaW1hZ2VzLFxuICAgICAgdGhpcy5ncm91cHMsXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0aGlzLmRlZmF1bHRPcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjbGVhclBvc2l0aW9ucz1mYWxzZV1cbiAgICovXG4gIHJlZnJlc2goY2xlYXJQb3NpdGlvbnMgPSBmYWxzZSkge1xuICAgIGZvckVhY2godGhpcy5ib2R5Lm5vZGVzLCAobm9kZSwgbm9kZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0KG5vZGVJZCk7XG4gICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjbGVhclBvc2l0aW9ucyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIG5vZGUuc2V0T3B0aW9ucyh7IHg6IG51bGwsIHk6IG51bGwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5zZXRPcHRpb25zKHsgZml4ZWQ6IGZhbHNlIH0pO1xuICAgICAgICBub2RlLnNldE9wdGlvbnMoZGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcG9zaXRpb25zIG9mIHRoZSBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZS5pZD4gfCBzdHJpbmd9IFtpZHNdICAtLT4gb3B0aW9uYWwsIGNhbiBiZSBhcnJheSBvZiBub2RlSWRzLCBjYW4gYmUgc3RyaW5nXG4gICAqIEByZXR1cm5zIHt7fX1cbiAgICovXG4gIGdldFBvc2l0aW9ucyhpZHMpIHtcbiAgICBjb25zdCBkYXRhQXJyYXkgPSB7fTtcbiAgICBpZiAoaWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGlkcykgPT09IHRydWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW2lkc1tpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpZHNbaV1dO1xuICAgICAgICAgICAgZGF0YUFycmF5W2lkc1tpXV0gPSB7XG4gICAgICAgICAgICAgIHg6IE1hdGgucm91bmQobm9kZS54KSxcbiAgICAgICAgICAgICAgeTogTWF0aC5yb3VuZChub2RlLnkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmJvZHkubm9kZXNbaWRzXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpZHNdO1xuICAgICAgICAgIGRhdGFBcnJheVtpZHNdID0geyB4OiBNYXRoLnJvdW5kKG5vZGUueCksIHk6IE1hdGgucm91bmQobm9kZS55KSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldXTtcbiAgICAgICAgZGF0YUFycmF5W3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV0gPSB7XG4gICAgICAgICAgeDogTWF0aC5yb3VuZChub2RlLngpLFxuICAgICAgICAgIHk6IE1hdGgucm91bmQobm9kZS55KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFBcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHggeSBwb3NpdGlvbiBvZiBhIHNwZWNpZmljIGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIGlkIHRvIHJldHJpZXZlLlxuICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIG5vIGlkIGlzIGluY2x1ZGVkLlxuICAgKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gSWYgYW4gaW52YWxpZCBpZCBpcyBwcm92aWRlZC5cbiAgICogQHJldHVybnMge3sgeDogbnVtYmVyLCB5OiBudW1iZXIgfX0gUmV0dXJucyBYLCBZIGNhbnZhcyBwb3NpdGlvbiBvZiB0aGUgbm9kZSB3aXRoIGdpdmVuIGlkLlxuICAgKi9cbiAgZ2V0UG9zaXRpb24oaWQpIHtcbiAgICBpZiAoaWQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gaWQgd2FzIHNwZWNpZmllZCBmb3IgZ2V0UG9zaXRpb24gbWV0aG9kLlwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYm9keS5ub2Rlc1tpZF0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXG4gICAgICAgIGBOb2RlSWQgcHJvdmlkZWQgZm9yIGdldFBvc2l0aW9uIGRvZXMgbm90IGV4aXN0LiBQcm92aWRlZDogJHtpZH1gXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBNYXRoLnJvdW5kKHRoaXMuYm9keS5ub2Rlc1tpZF0ueCksXG4gICAgICAgIHk6IE1hdGgucm91bmQodGhpcy5ib2R5Lm5vZGVzW2lkXS55KSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIFhZIHBvc2l0aW9ucyBvZiB0aGUgbm9kZXMgaW50byB0aGUgZGF0YXNldC5cbiAgICovXG4gIHN0b3JlUG9zaXRpb25zKCkge1xuICAgIC8vIHRvZG86IGFkZCBzdXBwb3J0IGZvciBjbHVzdGVycyBhbmQgaGllcmFyY2hpY2FsLlxuICAgIGNvbnN0IGRhdGFBcnJheSA9IFtdO1xuICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmJvZHkuZGF0YS5ub2Rlcy5nZXREYXRhU2V0KCk7XG5cbiAgICBmb3IgKGNvbnN0IGRzTm9kZSBvZiBkYXRhc2V0LmdldCgpKSB7XG4gICAgICBjb25zdCBpZCA9IGRzTm9kZS5pZDtcbiAgICAgIGNvbnN0IGJvZHlOb2RlID0gdGhpcy5ib2R5Lm5vZGVzW2lkXTtcbiAgICAgIGNvbnN0IHggPSBNYXRoLnJvdW5kKGJvZHlOb2RlLngpO1xuICAgICAgY29uc3QgeSA9IE1hdGgucm91bmQoYm9keU5vZGUueSk7XG5cbiAgICAgIGlmIChkc05vZGUueCAhPT0geCB8fCBkc05vZGUueSAhPT0geSkge1xuICAgICAgICBkYXRhQXJyYXkucHVzaCh7IGlkLCB4LCB5IH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRhdGFzZXQudXBkYXRlKGRhdGFBcnJheSk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBib3VuZGluZyBib3ggb2YgYSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKiBAcmV0dXJucyB7anwqfVxuICAgKi9cbiAgZ2V0Qm91bmRpbmdCb3gobm9kZUlkKSB7XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS5zaGFwZS5ib3VuZGluZ0JveDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBJZHMgb2Ygbm9kZXMgY29ubmVjdGVkIHRvIHRoaXMgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHBhcmFtIHsndG8nfCdmcm9tJ3x1bmRlZmluZWR9IGRpcmVjdGlvbiB2YWx1ZXMgJ2Zyb20nIGFuZCAndG8nIHNlbGVjdCByZXNwZWN0aXZlbHkgcGFyZW50IGFuZCBjaGlsZCBub2RlcyBvbmx5LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFueSBvdGhlciB2YWx1ZSByZXR1cm5zIGJvdGggcGFyZW50IGFuZCBjaGlsZCBub2Rlcy5cbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0Q29ubmVjdGVkTm9kZXMobm9kZUlkLCBkaXJlY3Rpb24pIHtcbiAgICBjb25zdCBub2RlTGlzdCA9IFtdO1xuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICBjb25zdCBub2RlT2JqID0ge307IC8vIHVzZWQgdG8gcXVpY2tseSBjaGVjayBpZiBub2RlIGFscmVhZHkgZXhpc3RzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZWRnZSA9IG5vZGUuZWRnZXNbaV07XG4gICAgICAgIGlmIChkaXJlY3Rpb24gIT09IFwidG9cIiAmJiBlZGdlLnRvSWQgPT0gbm9kZS5pZCkge1xuICAgICAgICAgIC8vIHRoZXNlIGFyZSBkb3VibGUgZXF1YWxzIHNpbmNlIGlkcyBjYW4gYmUgbnVtZXJpYyBvciBzdHJpbmdcbiAgICAgICAgICBpZiAobm9kZU9ialtlZGdlLmZyb21JZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbm9kZUxpc3QucHVzaChlZGdlLmZyb21JZCk7XG4gICAgICAgICAgICBub2RlT2JqW2VkZ2UuZnJvbUlkXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAhPT0gXCJmcm9tXCIgJiYgZWRnZS5mcm9tSWQgPT0gbm9kZS5pZCkge1xuICAgICAgICAgIC8vIHRoZXNlIGFyZSBkb3VibGUgZXF1YWxzIHNpbmNlIGlkcyBjYW4gYmUgbnVtZXJpYyBvciBzdHJpbmdcbiAgICAgICAgICBpZiAobm9kZU9ialtlZGdlLnRvSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5vZGVMaXN0LnB1c2goZWRnZS50b0lkKTtcbiAgICAgICAgICAgIG5vZGVPYmpbZWRnZS50b0lkXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2RlTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGlkcyBvZiB0aGUgZWRnZXMgY29ubmVjdGVkIHRvIHRoaXMgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBnZXRDb25uZWN0ZWRFZGdlcyhub2RlSWQpIHtcbiAgICBjb25zdCBlZGdlTGlzdCA9IFtdO1xuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWRnZUxpc3QucHVzaChub2RlLmVkZ2VzW2ldLmlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJOb2RlSWQgcHJvdmlkZWQgZm9yIGdldENvbm5lY3RlZEVkZ2VzIGRvZXMgbm90IGV4aXN0LiBQcm92aWRlZDogXCIsXG4gICAgICAgIG5vZGVJZFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGVkZ2VMaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgYSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKi9cbiAgbW92ZU5vZGUobm9kZUlkLCB4LCB5KSB7XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLnggPSBOdW1iZXIoeCk7XG4gICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS55ID0gTnVtYmVyKHkpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJOb2RlIGlkIHN1cHBsaWVkIHRvIG1vdmVOb2RlIGRvZXMgbm90IGV4aXN0LiBQcm92aWRlZDogXCIsXG4gICAgICAgIG5vZGVJZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTm9kZXNIYW5kbGVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkZXNjcmlwdG9yKSB7XG4gIHJldHVybiBkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQgJiYgKGhhc093bihkZXNjcmlwdG9yLCAndmFsdWUnKSB8fCBoYXNPd24oZGVzY3JpcHRvciwgJ3dyaXRhYmxlJykpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWRhdGEtZGVzY3JpcHRvcicpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYFJlZmxlY3QuZ2V0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5nZXRcbmZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3BlcnR5S2V5IC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiBhcmd1bWVudHNbMl07XG4gIHZhciBkZXNjcmlwdG9yLCBwcm90b3R5cGU7XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZih0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IpIHJldHVybiBpc0RhdGFEZXNjcmlwdG9yKGRlc2NyaXB0b3IpXG4gICAgPyBkZXNjcmlwdG9yLnZhbHVlXG4gICAgOiBkZXNjcmlwdG9yLmdldCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogY2FsbChkZXNjcmlwdG9yLmdldCwgcmVjZWl2ZXIpO1xuICBpZiAoaXNPYmplY3QocHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG90eXBlLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBnZXQ6IGdldFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0LmdldCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUmVmbGVjdC5nZXQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgImltcG9ydCBfUmVmbGVjdCRnZXQgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9yZWZsZWN0L2dldC5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmltcG9ydCBfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvciBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanNcIjtcbmltcG9ydCBzdXBlclByb3BCYXNlIGZyb20gXCIuL3N1cGVyUHJvcEJhc2UuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXQoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBfUmVmbGVjdCRnZXQpIHtcbiAgICB2YXIgX2NvbnRleHQ7XG4gICAgX2dldCA9IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9SZWZsZWN0JGdldCkuY2FsbChfY29udGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgX2dldCA9IGZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICAgIHZhciBiYXNlID0gc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgdmFyIGRlc2MgPSBfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7XG4gICAgICBpZiAoZGVzYy5nZXQpIHtcbiAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiByZWNlaXZlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVzYy52YWx1ZTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBfZ2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwgImltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkge1xuICB3aGlsZSAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSkge1xuICAgIG9iamVjdCA9IGdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLWh5cG90IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgJGh5cG90ID0gTWF0aC5oeXBvdDtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xuXG4vLyBDaHJvbWUgNzcgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD05NTQ2XG52YXIgRk9SQ0VEID0gISEkaHlwb3QgJiYgJGh5cG90KEluZmluaXR5LCBOYU4pICE9PSBJbmZpbml0eTtcblxuLy8gYE1hdGguaHlwb3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmh5cG90XG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGFyaXR5OiAyLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikge1xuICAgIHZhciBzdW0gPSAwO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGxhcmcgPSAwO1xuICAgIHZhciBhcmcsIGRpdjtcbiAgICB3aGlsZSAoaSA8IGFMZW4pIHtcbiAgICAgIGFyZyA9IGFicyhhcmd1bWVudHNbaSsrXSk7XG4gICAgICBpZiAobGFyZyA8IGFyZykge1xuICAgICAgICBkaXYgPSBsYXJnIC8gYXJnO1xuICAgICAgICBzdW0gPSBzdW0gKiBkaXYgKiBkaXYgKyAxO1xuICAgICAgICBsYXJnID0gYXJnO1xuICAgICAgfSBlbHNlIGlmIChhcmcgPiAwKSB7XG4gICAgICAgIGRpdiA9IGFyZyAvIGxhcmc7XG4gICAgICAgIHN1bSArPSBkaXYgKiBkaXY7XG4gICAgICB9IGVsc2Ugc3VtICs9IGFyZztcbiAgICB9XG4gICAgcmV0dXJuIGxhcmcgPT09IEluZmluaXR5ID8gSW5maW5pdHkgOiBsYXJnICogc3FydChzdW0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hdGguaHlwb3QnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk1hdGguaHlwb3Q7XG4iLCAiLyoqXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBMb2NhdGlvbiBvZiBhbGwgdGhlIGVuZHBvaW50IGRyYXdpbmcgcm91dGluZXMuXG4gKlxuICogRXZlcnkgZW5kcG9pbnQgaGFzIGl0cyBvd24gZHJhd2luZyByb3V0aW5lLCB3aGljaCBjb250YWlucyBhbiBlbmRwb2ludCBkZWZpbml0aW9uLlxuICpcbiAqIFRoZSBlbmRwb2ludCBkZWZpbml0aW9ucyBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJpZXM6XG4gKlxuICogLSAoMCwwKSBpcyB0aGUgY29ubmVjdGlvbiBwb2ludCB0byB0aGUgbm9kZSBpdCBhdHRhY2hlcyB0b1xuICogLSBUaGUgZW5kcG9pbnRzIGFyZSBvcmllbnRhdGVkIHRvIHRoZSBwb3NpdGl2ZSB4LWRpcmVjdGlvblxuICogLSBUaGUgbGVuZ3RoIG9mIHRoZSBlbmRwb2ludCBpcyBhdCBtb3N0IDFcbiAqXG4gKiBBcyBsb25nIGFzIHRoZSBlbmRwb2ludCBjbGFzc2VzIHJlbWFpbiBzaW1wbGUgYW5kIG5vdCB0b28gbnVtZXJvdXMsIHRoZXkgd2lsbFxuICogYmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIG1vZHVsZS5cbiAqIEFsbCBjbGFzc2VzIGhlcmUgZXhjZXB0IGBFbmRQb2ludHNgIHNob3VsZCBiZSBjb25zaWRlcmVkIGFzIHByaXZhdGUgdG8gdGhpcyBtb2R1bGUuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqICMjIyBGdXJ0aGVyIEFjdGlvbnNcbiAqXG4gKiBBZnRlciBhZGRpbmcgYSBuZXcgZW5kcG9pbnQgaGVyZSwgeW91IGFsc28gbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nIHRoaW5nczpcbiAqXG4gKiAtIEFkZCB0aGUgbmV3IGVuZHBvaW50IG5hbWUgdG8gYG5ldHdvcmsvb3B0aW9ucy5qc2AgaW4gYXJyYXkgYGVuZFBvaW50c2AuXG4gKiAtIEFkZCB0aGUgbmV3IGVuZHBvaW50IG5hbWUgdG8gdGhlIGRvY3VtZW50YXRpb24uXG4gKiAgIFNjYW4gZm9yICdhcnJvd3MudG8udHlwZWAgYW5kIGFkZCBpdCB0byB0aGUgZGVzY3JpcHRpb24uXG4gKiAtIEFkZCB0aGUgZW5kcG9pbnQgdG8gdGhlIGV4YW1wbGVzLiBBdCB0aGUgdmVyeSBsZWFzdCwgYWRkIGl0IHRvIGV4YW1wbGVcbiAqICAgYGVkZ2VTdHlsZXMvYXJyb3dUeXBlc2AuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7IEFycm93RGF0YSwgUG9pbnQgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgZHJhd0NpcmNsZSB9IGZyb20gXCIuL3NoYXBlc1wiO1xuXG4vKipcbiAqIENvbW1vbiBtZXRob2RzIGZvciBlbmRwb2ludHNcbiAqXG4gKiBAY2xhc3NcbiAqL1xuY2xhc3MgRW5kUG9pbnQge1xuICAvKipcbiAgICogQXBwbHkgdHJhbnNmb3JtYXRpb24gb24gcG9pbnRzIGZvciBkaXNwbGF5LlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGlzIGRvbmU6XG4gICAqIC0gcm90YXRlIGJ5IHRoZSBzcGVjaWZpZWQgYW5nbGVcbiAgICogLSBtdWx0aXBseSB0aGUgKG5vcm1hbGl6ZWQpIGNvb3JkaW5hdGVzIGJ5IHRoZSBwYXNzZWQgbGVuZ3RoXG4gICAqIC0gb2Zmc2V0IGJ5IHRoZSB0YXJnZXQgY29vcmRpbmF0ZXNcbiAgICpcbiAgICogQHBhcmFtIHBvaW50cyAtIFRoZSBwb2ludChzKSB0byBiZSB0cmFuc2Zvcm1lZC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIHRyYW5zZm9ybWF0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0cmFuc2Zvcm0ocG9pbnRzOiBQb2ludCB8IFBvaW50W10sIGFycm93RGF0YTogQXJyb3dEYXRhKTogdm9pZCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpIHtcbiAgICAgIHBvaW50cyA9IFtwb2ludHNdO1xuICAgIH1cblxuICAgIGNvbnN0IHggPSBhcnJvd0RhdGEucG9pbnQueDtcbiAgICBjb25zdCB5ID0gYXJyb3dEYXRhLnBvaW50Lnk7XG4gICAgY29uc3QgYW5nbGUgPSBhcnJvd0RhdGEuYW5nbGU7XG4gICAgY29uc3QgbGVuZ3RoID0gYXJyb3dEYXRhLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBwID0gcG9pbnRzW2ldO1xuICAgICAgY29uc3QgeHQgPSBwLnggKiBNYXRoLmNvcyhhbmdsZSkgLSBwLnkgKiBNYXRoLnNpbihhbmdsZSk7XG4gICAgICBjb25zdCB5dCA9IHAueCAqIE1hdGguc2luKGFuZ2xlKSArIHAueSAqIE1hdGguY29zKGFuZ2xlKTtcblxuICAgICAgcC54ID0geCArIGxlbmd0aCAqIHh0O1xuICAgICAgcC55ID0geSArIGxlbmd0aCAqIHl0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGEgY2xvc2VkIHBhdGggdXNpbmcgdGhlIGdpdmVuIHJlYWwgY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgcGF0aCB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gcG9pbnRzIC0gVGhlIHBvaW50cyBvZiB0aGUgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhd1BhdGgoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHBvaW50czogUG9pbnRbXSk6IHZvaWQge1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGN0eC5saW5lVG8ocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICB9XG4gICAgY3R4LmNsb3NlUGF0aCgpO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgYXJyb3cgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIEltYWdlIGV4dGVuZHMgRW5kUG9pbnQge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIEZhbHNlIGFzIHRoZXJlIGlzIG5vIHdheSB0byBmaWxsIGFuIGltYWdlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IGZhbHNlIHtcbiAgICBpZiAoYXJyb3dEYXRhLmltYWdlKSB7XG4gICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICBjdHgudHJhbnNsYXRlKGFycm93RGF0YS5wb2ludC54LCBhcnJvd0RhdGEucG9pbnQueSk7XG4gICAgICBjdHgucm90YXRlKE1hdGguUEkgLyAyICsgYXJyb3dEYXRhLmFuZ2xlKTtcblxuICAgICAgY29uc3Qgd2lkdGggPVxuICAgICAgICBhcnJvd0RhdGEuaW1hZ2VXaWR0aCAhPSBudWxsXG4gICAgICAgICAgPyBhcnJvd0RhdGEuaW1hZ2VXaWR0aFxuICAgICAgICAgIDogYXJyb3dEYXRhLmltYWdlLndpZHRoO1xuICAgICAgY29uc3QgaGVpZ2h0ID1cbiAgICAgICAgYXJyb3dEYXRhLmltYWdlSGVpZ2h0ICE9IG51bGxcbiAgICAgICAgICA/IGFycm93RGF0YS5pbWFnZUhlaWdodFxuICAgICAgICAgIDogYXJyb3dEYXRhLmltYWdlLmhlaWdodDtcblxuICAgICAgYXJyb3dEYXRhLmltYWdlLmRyYXdJbWFnZUF0UG9zaXRpb24oXG4gICAgICAgIGN0eCxcbiAgICAgICAgMSwgLy8gc2NhbGVcbiAgICAgICAgLXdpZHRoIC8gMiwgLy8geFxuICAgICAgICAwLCAvLyB5XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgICk7XG5cbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgYXJyb3cgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIEFycm93IGV4dGVuZHMgRW5kUG9pbnQge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIC8vIE5vcm1hbGl6ZWQgcG9pbnRzIG9mIGNsb3NlZCBwYXRoLCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkcmF3bi5cbiAgICAvLyAoMCwgMCkgaXMgdGhlIGF0dGFjaG1lbnQgcG9pbnQsIGFuZCB0aGUgcG9pbnQgYXJvdW5kIHdoaWNoIHNob3VsZCBiZSByb3RhdGVkXG4gICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgeyB4OiAwLCB5OiAwIH0sXG4gICAgICB7IHg6IC0xLCB5OiAwLjMgfSxcbiAgICAgIHsgeDogLTAuOSwgeTogMCB9LFxuICAgICAgeyB4OiAtMSwgeTogLTAuMyB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgY3JvdyBlbmRwb2ludC5cbiAqL1xuY2xhc3MgQ3JvdyB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IC0xLCB5OiAwIH0sXG4gICAgICB7IHg6IDAsIHk6IDAuMyB9LFxuICAgICAgeyB4OiAtMC40LCB5OiAwIH0sXG4gICAgICB7IHg6IDAsIHk6IC0wLjMgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGN1cnZlIGVuZHBvaW50LlxuICovXG5jbGFzcyBDdXJ2ZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludCA9IHsgeDogLTAuNCwgeTogMCB9O1xuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludCwgYXJyb3dEYXRhKTtcblxuICAgIC8vIFVwZGF0ZSBlbmRwb2ludCBzdHlsZSBmb3IgZHJhd2luZyB0cmFuc3BhcmVudCBhcmMuXG4gICAgY3R4LnN0cm9rZVN0eWxlID0gY3R4LmZpbGxTdHlsZTtcbiAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2JhKDAsIDAsIDAsIDApXCI7XG5cbiAgICAvLyBEZWZpbmUgY3VydmUgZW5kcG9pbnQgYXMgc2VtaWNpcmNsZS5cbiAgICBjb25zdCBwaSA9IE1hdGguUEk7XG4gICAgY29uc3Qgc3RhcnRBbmdsZSA9IGFycm93RGF0YS5hbmdsZSAtIHBpIC8gMjtcbiAgICBjb25zdCBlbmRBbmdsZSA9IGFycm93RGF0YS5hbmdsZSArIHBpIC8gMjtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyhcbiAgICAgIHBvaW50LngsXG4gICAgICBwb2ludC55LFxuICAgICAgYXJyb3dEYXRhLmxlbmd0aCAqIDAuNCxcbiAgICAgIHN0YXJ0QW5nbGUsXG4gICAgICBlbmRBbmdsZSxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGludmVydGVkIGN1cnZlIGVuZHBvaW50LlxuICovXG5jbGFzcyBJbnZlcnRlZEN1cnZlIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvLyBOb3JtYWxpemVkIHBvaW50cyBvZiBjbG9zZWQgcGF0aCwgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgZHJhd24uXG4gICAgLy8gKDAsIDApIGlzIHRoZSBhdHRhY2htZW50IHBvaW50LCBhbmQgdGhlIHBvaW50IGFyb3VuZCB3aGljaCBzaG91bGQgYmUgcm90YXRlZFxuICAgIGNvbnN0IHBvaW50ID0geyB4OiAtMC4zLCB5OiAwIH07XG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50LCBhcnJvd0RhdGEpO1xuXG4gICAgLy8gVXBkYXRlIGVuZHBvaW50IHN0eWxlIGZvciBkcmF3aW5nIHRyYW5zcGFyZW50IGFyYy5cbiAgICBjdHguc3Ryb2tlU3R5bGUgPSBjdHguZmlsbFN0eWxlO1xuICAgIGN0eC5maWxsU3R5bGUgPSBcInJnYmEoMCwgMCwgMCwgMClcIjtcblxuICAgIC8vIERlZmluZSBpbnZlcnRlZCBjdXJ2ZSBlbmRwb2ludCBhcyBzZW1pY2lyY2xlLlxuICAgIGNvbnN0IHBpID0gTWF0aC5QSTtcbiAgICBjb25zdCBzdGFydEFuZ2xlID0gYXJyb3dEYXRhLmFuZ2xlICsgcGkgLyAyO1xuICAgIGNvbnN0IGVuZEFuZ2xlID0gYXJyb3dEYXRhLmFuZ2xlICsgKDMgKiBwaSkgLyAyO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHguYXJjKFxuICAgICAgcG9pbnQueCxcbiAgICAgIHBvaW50LnksXG4gICAgICBhcnJvd0RhdGEubGVuZ3RoICogMC40LFxuICAgICAgc3RhcnRBbmdsZSxcbiAgICAgIGVuZEFuZ2xlLFxuICAgICAgZmFsc2VcbiAgICApO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgdHJpbmFnbGUgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIFRyaWFuZ2xlIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvLyBOb3JtYWxpemVkIHBvaW50cyBvZiBjbG9zZWQgcGF0aCwgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgZHJhd24uXG4gICAgLy8gKDAsIDApIGlzIHRoZSBhdHRhY2htZW50IHBvaW50LCBhbmQgdGhlIHBvaW50IGFyb3VuZCB3aGljaCBzaG91bGQgYmUgcm90YXRlZFxuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMC4wMiwgeTogMCB9LFxuICAgICAgeyB4OiAtMSwgeTogMC4zIH0sXG4gICAgICB7IHg6IC0xLCB5OiAtMC4zIH0sXG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgRW5kUG9pbnQuZHJhd1BhdGgoY3R4LCBwb2ludHMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBpbnZlcnRlZCB0cmluYWdsZSBlbmRwb2ludC5cbiAqL1xuY2xhc3MgSW52ZXJ0ZWRUcmlhbmdsZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IDAsIHk6IDAuMyB9LFxuICAgICAgeyB4OiAwLCB5OiAtMC4zIH0sXG4gICAgICB7IHg6IC0xLCB5OiAwIH0sXG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgRW5kUG9pbnQuZHJhd1BhdGgoY3R4LCBwb2ludHMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBjaXJjbGUgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIENpcmNsZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgY29uc3QgcG9pbnQgPSB7IHg6IC0wLjQsIHk6IDAgfTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludCwgYXJyb3dEYXRhKTtcbiAgICBkcmF3Q2lyY2xlKGN0eCwgcG9pbnQueCwgcG9pbnQueSwgYXJyb3dEYXRhLmxlbmd0aCAqIDAuNCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGJhciBlbmRwb2ludC5cbiAqL1xuY2xhc3MgQmFyIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvKlxuICAgIHZhciBwb2ludHMgPSBbXG4gICAgICB7eDowLCB5OjAuNX0sXG4gICAgICB7eDowLCB5Oi0wLjV9XG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5tb3ZlVG8ocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTtcbiAgICBjdHgubGluZVRvKHBvaW50c1sxXS54LCBwb2ludHNbMV0ueSk7XG4gICAgY3R4LnN0cm9rZSgpO1xuKi9cblxuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMCwgeTogMC41IH0sXG4gICAgICB7IHg6IDAsIHk6IC0wLjUgfSxcbiAgICAgIHsgeDogLTAuMTUsIHk6IC0wLjUgfSxcbiAgICAgIHsgeDogLTAuMTUsIHk6IDAuNSB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgYm94IGVuZHBvaW50LlxuICovXG5jbGFzcyBCb3gge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMCwgeTogMC4zIH0sXG4gICAgICB7IHg6IDAsIHk6IC0wLjMgfSxcbiAgICAgIHsgeDogLTAuNiwgeTogLTAuMyB9LFxuICAgICAgeyB4OiAtMC42LCB5OiAwLjMgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGRpYW1vbmQgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIERpYW1vbmQge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgICAgeyB4OiAtMC41LCB5OiAtMC4zIH0sXG4gICAgICB7IHg6IC0xLCB5OiAwIH0sXG4gICAgICB7IHg6IC0wLjUsIHk6IDAuMyB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgdmVlIGVuZHBvaW50LlxuICovXG5jbGFzcyBWZWUge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIC8vIE5vcm1hbGl6ZWQgcG9pbnRzIG9mIGNsb3NlZCBwYXRoLCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkcmF3bi5cbiAgICAvLyAoMCwgMCkgaXMgdGhlIGF0dGFjaG1lbnQgcG9pbnQsIGFuZCB0aGUgcG9pbnQgYXJvdW5kIHdoaWNoIHNob3VsZCBiZSByb3RhdGVkXG4gICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgeyB4OiAtMSwgeTogMC4zIH0sXG4gICAgICB7IHg6IC0wLjUsIHk6IDAgfSxcbiAgICAgIHsgeDogLTEsIHk6IC0wLjMgfSxcbiAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgZW5kcG9pbnRzLlxuICovXG5leHBvcnQgY2xhc3MgRW5kUG9pbnRzIHtcbiAgLyoqXG4gICAqIERyYXcgYW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogYm9vbGVhbiB7XG4gICAgbGV0IHR5cGU7XG4gICAgaWYgKGFycm93RGF0YS50eXBlKSB7XG4gICAgICB0eXBlID0gYXJyb3dEYXRhLnR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJpbWFnZVwiOlxuICAgICAgICByZXR1cm4gSW1hZ2UuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiY2lyY2xlXCI6XG4gICAgICAgIHJldHVybiBDaXJjbGUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiYm94XCI6XG4gICAgICAgIHJldHVybiBCb3guZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiY3Jvd1wiOlxuICAgICAgICByZXR1cm4gQ3Jvdy5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJjdXJ2ZVwiOlxuICAgICAgICByZXR1cm4gQ3VydmUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiZGlhbW9uZFwiOlxuICAgICAgICByZXR1cm4gRGlhbW9uZC5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJpbnZfY3VydmVcIjpcbiAgICAgICAgcmV0dXJuIEludmVydGVkQ3VydmUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwidHJpYW5nbGVcIjpcbiAgICAgICAgcmV0dXJuIFRyaWFuZ2xlLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuICAgICAgY2FzZSBcImludl90cmlhbmdsZVwiOlxuICAgICAgICByZXR1cm4gSW52ZXJ0ZWRUcmlhbmdsZS5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJiYXJcIjpcbiAgICAgICAgcmV0dXJuIEJhci5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJ2ZWVcIjpcbiAgICAgICAgcmV0dXJuIFZlZS5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJhcnJvd1wiOiAvLyBmYWxsLXRocm91Z2hcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBBcnJvdy5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBvdmVycmlkZU9wYWNpdHkgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBFbmRQb2ludHMgfSBmcm9tIFwiLi9lbmQtcG9pbnRzXCI7XG5pbXBvcnQge1xuICBBcnJvd0RhdGEsXG4gIEFycm93RGF0YVdpdGhDb3JlLFxuICBBcnJvd1R5cGUsXG4gIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICBFZGdlVHlwZSxcbiAgSWQsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGRyYXdEYXNoZWRMaW5lIH0gZnJvbSBcIi4vc2hhcGVzXCI7XG5pbXBvcnQgeyBnZXRTZWxmUmVmQ29vcmRpbmF0ZXMgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL0NvbXBvbmVudFV0aWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGaW5kQm9yZGVyUG9zaXRpb25PcHRpb25zPFZpYT4ge1xuICB2aWE6IFZpYTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlT3B0aW9ucyB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICBsb3c6IG51bWJlcjtcbiAgaGlnaDogbnVtYmVyO1xuICBkaXJlY3Rpb246IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgQmFzZSBDbGFzcyBmb3IgYWxsIGVkZ2VzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWRnZUJhc2U8VmlhID0gdW5kZWZpbmVkPiBpbXBsZW1lbnRzIEVkZ2VUeXBlIHtcbiAgcHVibGljIGZyb20hOiBWTm9kZTsgLy8gSW5pdGlhbGl6ZWQgaW4gc2V0T3B0aW9uc1xuICBwdWJsaWMgZnJvbVBvaW50OiBQb2ludDtcbiAgcHVibGljIHRvITogVk5vZGU7IC8vIEluaXRpYWxpemVkIGluIHNldE9wdGlvbnNcbiAgcHVibGljIHRvUG9pbnQ6IFBvaW50O1xuICBwdWJsaWMgdmlhPzogVk5vZGU7XG5cbiAgcHVibGljIGNvbG9yOiB1bmtub3duID0ge307XG4gIHB1YmxpYyBjb2xvckRpcnR5ID0gdHJ1ZTtcbiAgcHVibGljIGlkITogSWQ7IC8vIEluaXRpYWxpemVkIGluIHNldE9wdGlvbnNcbiAgcHVibGljIG9wdGlvbnMhOiBFZGdlT3B0aW9uczsgLy8gSW5pdGlhbGl6ZWQgaW4gc2V0T3B0aW9uc1xuICBwdWJsaWMgaG92ZXJXaWR0aCA9IDEuNTtcbiAgcHVibGljIHNlbGVjdGlvbldpZHRoID0gMjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBvZiBnaXZlbiBlZGdlLlxuICAgKiBAcGFyYW0gX2JvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIF9sYWJlbE1vZHVsZSAtIExhYmVsIG1vZHVsZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zOiBFZGdlT3B0aW9ucyxcbiAgICBwcm90ZWN0ZWQgX2JvZHk6IFZCb2R5LFxuICAgIHByb3RlY3RlZCBfbGFiZWxNb2R1bGU6IExhYmVsXG4gICkge1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgIHRoaXMuZnJvbVBvaW50ID0gdGhpcy5mcm9tO1xuICAgIHRoaXMudG9Qb2ludCA9IHRoaXMudG87XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgKGVpdGhlciBmcm9tIG9yIHRvIG5vZGUgb2YgdGhlIGVkZ2UpLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2ZpbmRCb3JkZXJQb3NpdGlvbihcbiAgICBub2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBvcHRpb25zPzogRmluZEJvcmRlclBvc2l0aW9uT3B0aW9uczxWaWE+XG4gICk6IFBvaW50VDtcblxuICAvKipcbiAgICogUmV0dXJuIGFkZGl0aW9uYWwgcG9pbnQocykgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQocykgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZ2V0VmlhTm9kZSgpOiBWaWE7XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBhYnN0cmFjdCBnZXRQb2ludChwb3NpdGlvbjogbnVtYmVyLCB2aWFOb2RlPzogVmlhKTogUG9pbnQ7XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBjb25uZWN0KCk6IHZvaWQge1xuICAgIHRoaXMuZnJvbSA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLmZyb21dO1xuICAgIHRoaXMudG8gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy50b107XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGNsZWFudXAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBuZXcgZWRnZSBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBuZXcgZWRnZSBvcHRpb25zIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM6IEVkZ2VPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIHRoaXMuZnJvbSA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLmZyb21dO1xuICAgIHRoaXMudG8gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy50b107XG4gICAgdGhpcy5pZCA9IHRoaXMub3B0aW9ucy5pZDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZHJhd0xpbmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImNvbG9yXCJcbiAgICAgIHwgXCJvcGFjaXR5XCJcbiAgICAgIHwgXCJzaGFkb3dDb2xvclwiXG4gICAgICB8IFwic2hhZG93U2l6ZVwiXG4gICAgICB8IFwic2hhZG93WFwiXG4gICAgICB8IFwic2hhZG93WVwiXG4gICAgICB8IFwid2lkdGhcIlxuICAgID4sXG4gICAgX3NlbGVjdGVkPzogYm9vbGVhbixcbiAgICBfaG92ZXI/OiBib29sZWFuLFxuICAgIHZpYU5vZGU6IFZpYSA9IHRoaXMuZ2V0VmlhTm9kZSgpXG4gICk6IHZvaWQge1xuICAgIC8vIHNldCBzdHlsZVxuICAgIGN0eC5zdHJva2VTdHlsZSA9IHRoaXMuZ2V0Q29sb3IoY3R4LCB2YWx1ZXMpO1xuICAgIGN0eC5saW5lV2lkdGggPSB2YWx1ZXMud2lkdGg7XG5cbiAgICBpZiAodmFsdWVzLmRhc2hlcyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX2RyYXdEYXNoZWRMaW5lKGN0eCwgdmFsdWVzLCB2aWFOb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZHJhd0xpbmUoY3R4LCB2YWx1ZXMsIHZpYU5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGEgbGluZSB3aXRoIGdpdmVuIHN0eWxlIGJldHdlZW4gdHdvIG5vZGVzIHRocm91Z2ggc3VwcGxpZWQgbm9kZShzKS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHZpYU5vZGUgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcGFyYW0gZnJvbVBvaW50IC0gVE9ETzogU2VlbXMgaWdub3JlZCwgcmVtb3ZlP1xuICAgKiBAcGFyYW0gdG9Qb2ludCAtIFRPRE86IFNlZW1zIGlnbm9yZWQsIHJlbW92ZT9cbiAgICovXG4gIHByaXZhdGUgX2RyYXdMaW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwic2hhZG93Q29sb3JcIiB8IFwic2hhZG93U2l6ZVwiIHwgXCJzaGFkb3dYXCIgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZTogVmlhLFxuICAgIGZyb21Qb2ludD86IFBvaW50LFxuICAgIHRvUG9pbnQ/OiBQb2ludFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mcm9tICE9IHRoaXMudG8pIHtcbiAgICAgIC8vIGRyYXcgbGluZVxuICAgICAgdGhpcy5fbGluZShjdHgsIHZhbHVlcywgdmlhTm9kZSwgZnJvbVBvaW50LCB0b1BvaW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3gsIHksIHJhZGl1c10gPSB0aGlzLl9nZXRDaXJjbGVEYXRhKGN0eCk7XG4gICAgICB0aGlzLl9jaXJjbGUoY3R4LCB2YWx1ZXMsIHgsIHksIHJhZGl1cyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERyYXcgYSBkYXNoZWQgbGluZSB3aXRoIGdpdmVuIHN0eWxlIGJldHdlZW4gdHdvIG5vZGVzIHRocm91Z2ggc3VwcGxpZWQgbm9kZShzKS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHZpYU5vZGUgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcGFyYW0gX2Zyb21Qb2ludCAtIElnbm9yZWQgKFRPRE86IHJlbW92ZSBpbiB0aGUgZnV0dXJlKS5cbiAgICogQHBhcmFtIF90b1BvaW50IC0gSWdub3JlZCAoVE9ETzogcmVtb3ZlIGluIHRoZSBmdXR1cmUpLlxuICAgKi9cbiAgcHJpdmF0ZSBfZHJhd0Rhc2hlZExpbmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJzaGFkb3dDb2xvclwiIHwgXCJzaGFkb3dTaXplXCIgfCBcInNoYWRvd1hcIiB8IFwic2hhZG93WVwiXG4gICAgPixcbiAgICB2aWFOb2RlOiBWaWEsXG4gICAgX2Zyb21Qb2ludD86IFBvaW50LFxuICAgIF90b1BvaW50PzogUG9pbnRcbiAgKTogdm9pZCB7XG4gICAgY3R4LmxpbmVDYXAgPSBcInJvdW5kXCI7XG4gICAgY29uc3QgcGF0dGVybiA9IEFycmF5LmlzQXJyYXkodmFsdWVzLmRhc2hlcykgPyB2YWx1ZXMuZGFzaGVzIDogWzUsIDVdO1xuXG4gICAgLy8gb25seSBmaXJlZm94IGFuZCBjaHJvbWUgc3VwcG9ydCB0aGlzIG1ldGhvZCwgZWxzZSB3ZSB1c2UgdGhlIGxlZ2FjeSBvbmUuXG4gICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICAvLyBzZXQgZGFzaCBzZXR0aW5ncyBmb3IgY2hyb21lIG9yIGZpcmVmb3hcbiAgICAgIGN0eC5zZXRMaW5lRGFzaChwYXR0ZXJuKTtcbiAgICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IDA7XG5cbiAgICAgIC8vIGRyYXcgdGhlIGxpbmVcbiAgICAgIGlmICh0aGlzLmZyb20gIT0gdGhpcy50bykge1xuICAgICAgICAvLyBkcmF3IGxpbmVcbiAgICAgICAgdGhpcy5fbGluZShjdHgsIHZhbHVlcywgdmlhTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbeCwgeSwgcmFkaXVzXSA9IHRoaXMuX2dldENpcmNsZURhdGEoY3R4KTtcbiAgICAgICAgdGhpcy5fY2lyY2xlKGN0eCwgdmFsdWVzLCB4LCB5LCByYWRpdXMpO1xuICAgICAgfVxuXG4gICAgICAvLyByZXN0b3JlIHRoZSBkYXNoIHNldHRpbmdzLlxuICAgICAgY3R4LnNldExpbmVEYXNoKFswXSk7XG4gICAgICBjdHgubGluZURhc2hPZmZzZXQgPSAwO1xuICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5zdXBwb3J0aW5nIHNtb290aCBsaW5lc1xuICAgICAgaWYgKHRoaXMuZnJvbSAhPSB0aGlzLnRvKSB7XG4gICAgICAgIC8vIGRyYXcgbGluZVxuICAgICAgICBkcmF3RGFzaGVkTGluZShcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgdGhpcy5mcm9tLngsXG4gICAgICAgICAgdGhpcy5mcm9tLnksXG4gICAgICAgICAgdGhpcy50by54LFxuICAgICAgICAgIHRoaXMudG8ueSxcbiAgICAgICAgICBwYXR0ZXJuXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbeCwgeSwgcmFkaXVzXSA9IHRoaXMuX2dldENpcmNsZURhdGEoY3R4KTtcbiAgICAgICAgdGhpcy5fY2lyY2xlKGN0eCwgdmFsdWVzLCB4LCB5LCByYWRpdXMpO1xuICAgICAgfVxuICAgICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgICAgdGhpcy5lbmFibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuXG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIC8vIGRpc2FibGUgc2hhZG93cyBmb3Igb3RoZXIgZWxlbWVudHMuXG4gICAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGEgbGluZSB3aXRoIGdpdmVuIHN0eWxlIGJldHdlZW4gdHdvIG5vZGVzIHRocm91Z2ggc3VwcGxpZWQgbm9kZShzKS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHZpYU5vZGUgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcGFyYW0gZnJvbVBvaW50IC0gVE9ETzogU2VlbXMgaWdub3JlZCwgcmVtb3ZlP1xuICAgKiBAcGFyYW0gdG9Qb2ludCAtIFRPRE86IFNlZW1zIGlnbm9yZWQsIHJlbW92ZT9cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgIHZpYU5vZGU6IFZpYSxcbiAgICBmcm9tUG9pbnQ/OiBQb2ludCxcbiAgICB0b1BvaW50PzogUG9pbnRcbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogRmluZCB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgKGVpdGhlciBmcm9tIG9yIHRvIG5vZGUgb2YgdGhlIGVkZ2UpLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqL1xuICBwdWJsaWMgZmluZEJvcmRlclBvc2l0aW9uKFxuICAgIG5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIG9wdGlvbnM/OiBGaW5kQm9yZGVyUG9zaXRpb25PcHRpb25zPFZpYT4gfCBGaW5kQm9yZGVyUG9zaXRpb25DaXJjbGVPcHRpb25zXG4gICk6IFBvaW50VCB7XG4gICAgaWYgKHRoaXMuZnJvbSAhPSB0aGlzLnRvKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uKG5vZGUsIGN0eCwgb3B0aW9ucyBhcyBhbnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlKG5vZGUsIGN0eCwgb3B0aW9ucyBhcyBhbnkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZmluZEJvcmRlclBvc2l0aW9ucyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHtcbiAgICBmcm9tOiBQb2ludDtcbiAgICB0bzogUG9pbnQ7XG4gIH0ge1xuICAgIGlmICh0aGlzLmZyb20gIT0gdGhpcy50bykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbTogdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uKHRoaXMuZnJvbSwgY3R4KSxcbiAgICAgICAgdG86IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbih0aGlzLnRvLCBjdHgpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3gsIHldID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YShjdHgpLnNsaWNlKDAsIDIpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmcm9tOiB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgICAgbG93OiAwLjI1LFxuICAgICAgICAgIGhpZ2g6IDAuNixcbiAgICAgICAgICBkaXJlY3Rpb246IC0xLFxuICAgICAgICB9KSxcbiAgICAgICAgdG86IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICBsb3c6IDAuNixcbiAgICAgICAgICBoaWdoOiAwLjgsXG4gICAgICAgICAgZGlyZWN0aW9uOiAxLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGNlbnRlciBwb2ludCBhbmQgcmFkaXVzIG9mIGFuIGVkZ2UgY29ubmVjdGVkIHRvIHRoZSBzYW1lIG5vZGUgYXQgYm90aCBlbmRzLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHJldHVybnMgYFt4LCB5LCByYWRpdXNdYFxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXRDaXJjbGVEYXRhKFxuICAgIGN0eD86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFxuICApOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgIGNvbnN0IHJhZGl1cyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLnNpemU7XG5cbiAgICBpZiAoY3R4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLmZyb20uc2hhcGUud2lkdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmZyb20uc2hhcGUucmVzaXplKGN0eCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IGNpcmNsZSBjb29yZGluYXRlc1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gZ2V0U2VsZlJlZkNvb3JkaW5hdGVzKFxuICAgICAgY3R4LFxuICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUsXG4gICAgICByYWRpdXMsXG4gICAgICB0aGlzLmZyb21cbiAgICApO1xuXG4gICAgcmV0dXJuIFtjb29yZGluYXRlcy54LCBjb29yZGluYXRlcy55LCByYWRpdXNdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHBvaW50IG9uIGEgY2lyY2xlLlxuICAgKlxuICAgKiBAcGFyYW0geCAtIENlbnRlciBvZiB0aGUgY2lyY2xlIG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5IC0gQ2VudGVyIG9mIHRoZSBjaXJjbGUgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHJhZGl1cyAtIFJhZGl1cyBvZiB0aGUgY2lyY2xlLlxuICAgKiBAcGFyYW0gcG9zaXRpb24gLSBWYWx1ZSBiZXR3ZWVuIDAgKGxpbmUgc3RhcnQpIGFuZCAxIChsaW5lIGVuZCkuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiByZXF1ZXN0ZWQgcG9pbnQgb24gdGhlIGNpcmNsZS5cbiAgICovXG4gIHByaXZhdGUgX3BvaW50T25DaXJjbGUoXG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICByYWRpdXM6IG51bWJlcixcbiAgICBwb3NpdGlvbjogbnVtYmVyXG4gICk6IFBvaW50IHtcbiAgICBjb25zdCBhbmdsZSA9IHBvc2l0aW9uICogMiAqIE1hdGguUEk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHggKyByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSksXG4gICAgICB5OiB5IC0gcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgZnVuY3Rpb24gdXNlcyBiaW5hcnkgc2VhcmNoIHRvIGxvb2sgZm9yIHRoZSBwb2ludCB3aGVyZSB0aGUgY2lyY2xlIGNyb3NzZXMgdGhlIGJvcmRlciBvZiB0aGUgbm9kZS5cbiAgICogQHBhcmFtIG5lYXJOb2RlIC0gVGhlIG5vZGUgKGVpdGhlciBmcm9tIG9yIHRvIG5vZGUgb2YgdGhlIGVkZ2UpLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqL1xuICBwcml2YXRlIF9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUoXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIG9wdGlvbnM6IEZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZU9wdGlvbnNcbiAgKTogUG9pbnRUIHtcbiAgICBjb25zdCB4ID0gb3B0aW9ucy54O1xuICAgIGNvbnN0IHkgPSBvcHRpb25zLnk7XG4gICAgbGV0IGxvdyA9IG9wdGlvbnMubG93O1xuICAgIGxldCBoaWdoID0gb3B0aW9ucy5oaWdoO1xuICAgIGNvbnN0IGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZWN0aW9uO1xuXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwO1xuICAgIGNvbnN0IHJhZGl1cyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLnNpemU7XG4gICAgY29uc3QgdGhyZXNob2xkID0gMC4wNTtcbiAgICBsZXQgcG9zOiBQb2ludDtcblxuICAgIGxldCBtaWRkbGUgPSAobG93ICsgaGlnaCkgKiAwLjU7XG5cbiAgICBsZXQgZW5kUG9pbnRPZmZzZXQgPSAwO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuYXJyb3dTdHJpa2V0aHJvdWdoID09PSB0cnVlKSB7XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAtMSkge1xuICAgICAgICBlbmRQb2ludE9mZnNldCA9IHRoaXMub3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IDEpIHtcbiAgICAgICAgZW5kUG9pbnRPZmZzZXQgPSB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gICAgZG8ge1xuICAgICAgbWlkZGxlID0gKGxvdyArIGhpZ2gpICogMC41O1xuXG4gICAgICBwb3MgPSB0aGlzLl9wb2ludE9uQ2lyY2xlKHgsIHksIHJhZGl1cywgbWlkZGxlKTtcbiAgICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMihuZWFyTm9kZS55IC0gcG9zLnksIG5lYXJOb2RlLnggLSBwb3MueCk7XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9Cb3JkZXIgPVxuICAgICAgICBuZWFyTm9kZS5kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpICsgZW5kUG9pbnRPZmZzZXQ7XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9Qb2ludCA9IE1hdGguc3FydChcbiAgICAgICAgTWF0aC5wb3cocG9zLnggLSBuZWFyTm9kZS54LCAyKSArIE1hdGgucG93KHBvcy55IC0gbmVhck5vZGUueSwgMilcbiAgICAgICk7XG4gICAgICBjb25zdCBkaWZmZXJlbmNlID0gZGlzdGFuY2VUb0JvcmRlciAtIGRpc3RhbmNlVG9Qb2ludDtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmZXJlbmNlKSA8IHRocmVzaG9sZCkge1xuICAgICAgICBicmVhazsgLy8gZm91bmRcbiAgICAgIH0gZWxzZSBpZiAoZGlmZmVyZW5jZSA+IDApIHtcbiAgICAgICAgLy8gZGlzdGFuY2UgdG8gbm9kZXMgaXMgbGFyZ2VyIHRoYW4gZGlzdGFuY2UgdG8gYm9yZGVyIC0tPiB0IG5lZWRzIHRvIGJlIGJpZ2dlciBpZiB3ZSdyZSBsb29raW5nIGF0IHRoZSB0byBub2RlLlxuICAgICAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgICAgIGhpZ2ggPSBtaWRkbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG93ID0gbWlkZGxlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICsraXRlcmF0aW9uO1xuICAgIH0gd2hpbGUgKGxvdyA8PSBoaWdoICYmIGl0ZXJhdGlvbiA8IG1heEl0ZXJhdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBvcyxcbiAgICAgIHQ6IG1pZGRsZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGluZSB3aWR0aCBvZiB0aGUgZWRnZS4gRGVwZW5kcyBvbiB3aWR0aCBhbmQgd2hldGhlciBvbmUgb2YgdGhlIGNvbm5lY3RlZCBub2RlcyBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHNlbGVjdGVkIC0gRGV0ZXJtaW5lcyB3aGV0ZXIgdGhlIGxpbmUgaXMgc2VsZWN0ZWQuXG4gICAqIEBwYXJhbSBob3ZlciAtIERldGVybWluZXMgd2hldGVyIHRoZSBsaW5lIGlzIGJlaW5nIGhvdmVyZWQsIG9ubHkgYXBwbGllcyBpZiBzZWxlY3RlZCBpcyBmYWxzZS5cbiAgICogQHJldHVybnMgVGhlIHdpZHRoIG9mIHRoZSBsaW5lLlxuICAgKi9cbiAgcHVibGljIGdldExpbmVXaWR0aChzZWxlY3RlZDogYm9vbGVhbiwgaG92ZXI6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGlmIChzZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuc2VsZWN0aW9uV2lkdGgsIDAuMyAvIHRoaXMuX2JvZHkudmlldy5zY2FsZSk7XG4gICAgfSBlbHNlIGlmIChob3ZlciA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuaG92ZXJXaWR0aCwgMC4zIC8gdGhpcy5fYm9keS52aWV3LnNjYWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMub3B0aW9ucy53aWR0aCwgMC4zIC8gdGhpcy5fYm9keS52aWV3LnNjYWxlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgY29sb3Igb3IgZ3JhZGllbnQgZm9yIGdpdmVuIGVkZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgbGlrZSBjb2xvciwgb3BhY2l0eSBvciBzaGFkb3cuXG4gICAqIEBwYXJhbSBfc2VsZWN0ZWQgLSBJZ25vcmVkIChUT0RPOiByZW1vdmUgaW4gdGhlIGZ1dHVyZSkuXG4gICAqIEBwYXJhbSBfaG92ZXIgLSBJZ25vcmVkIChUT0RPOiByZW1vdmUgaW4gdGhlIGZ1dHVyZSkuXG4gICAqIEByZXR1cm5zIENvbG9yIHN0cmluZyBpZiBzaW5nbGUgY29sb3IgaXMgaW5oZXJpdGVkIG9yIGdyYWRpZW50IGlmIHR3by5cbiAgICovXG4gIHB1YmxpYyBnZXRDb2xvcihcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPEVkZ2VGb3JtYXR0aW5nVmFsdWVzLCBcImNvbG9yXCIgfCBcIm9wYWNpdHlcIj5cbiAgKTogc3RyaW5nIHwgQ2FudmFzR3JhZGllbnQge1xuICAgIGlmICh2YWx1ZXMuaW5oZXJpdHNDb2xvciAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIHdoZW4gdGhpcyBpcyBhIGxvb3AgZWRnZSwganVzdCB1c2UgdGhlICdmcm9tJyBtZXRob2RcbiAgICAgIGlmICh2YWx1ZXMuaW5oZXJpdHNDb2xvciA9PT0gXCJib3RoXCIgJiYgdGhpcy5mcm9tLmlkICE9PSB0aGlzLnRvLmlkKSB7XG4gICAgICAgIGNvbnN0IGdyZCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudChcbiAgICAgICAgICB0aGlzLmZyb20ueCxcbiAgICAgICAgICB0aGlzLmZyb20ueSxcbiAgICAgICAgICB0aGlzLnRvLngsXG4gICAgICAgICAgdGhpcy50by55XG4gICAgICAgICk7XG4gICAgICAgIGxldCBmcm9tQ29sb3IgPSB0aGlzLmZyb20ub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyO1xuICAgICAgICBsZXQgdG9Db2xvciA9IHRoaXMudG8ub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyO1xuXG4gICAgICAgIGlmICh0aGlzLmZyb20uc2VsZWN0ZWQgPT09IGZhbHNlICYmIHRoaXMudG8uc2VsZWN0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgZnJvbUNvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KFxuICAgICAgICAgICAgdGhpcy5mcm9tLm9wdGlvbnMuY29sb3IuYm9yZGVyLFxuICAgICAgICAgICAgdmFsdWVzLm9wYWNpdHlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRvQ29sb3IgPSBvdmVycmlkZU9wYWNpdHkoXG4gICAgICAgICAgICB0aGlzLnRvLm9wdGlvbnMuY29sb3IuYm9yZGVyLFxuICAgICAgICAgICAgdmFsdWVzLm9wYWNpdHlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZnJvbS5zZWxlY3RlZCA9PT0gdHJ1ZSAmJiB0aGlzLnRvLnNlbGVjdGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIHRvQ29sb3IgPSB0aGlzLnRvLm9wdGlvbnMuY29sb3IuYm9yZGVyO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZnJvbS5zZWxlY3RlZCA9PT0gZmFsc2UgJiYgdGhpcy50by5zZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGZyb21Db2xvciA9IHRoaXMuZnJvbS5vcHRpb25zLmNvbG9yLmJvcmRlcjtcbiAgICAgICAgfVxuICAgICAgICBncmQuYWRkQ29sb3JTdG9wKDAsIGZyb21Db2xvcik7XG4gICAgICAgIGdyZC5hZGRDb2xvclN0b3AoMSwgdG9Db2xvcik7XG5cbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGhpcyByZXR1cm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG4gICAgICAgIHJldHVybiBncmQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZXMuaW5oZXJpdHNDb2xvciA9PT0gXCJ0b1wiKSB7XG4gICAgICAgIHJldHVybiBvdmVycmlkZU9wYWNpdHkodGhpcy50by5vcHRpb25zLmNvbG9yLmJvcmRlciwgdmFsdWVzLm9wYWNpdHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gXCJmcm9tXCJcbiAgICAgICAgcmV0dXJuIG92ZXJyaWRlT3BhY2l0eSh0aGlzLmZyb20ub3B0aW9ucy5jb2xvci5ib3JkZXIsIHZhbHVlcy5vcGFjaXR5KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG92ZXJyaWRlT3BhY2l0eSh2YWx1ZXMuY29sb3IsIHZhbHVlcy5vcGFjaXR5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHJhdyBhIGxpbmUgZnJvbSBhIG5vZGUgdG8gaXRzZWxmLCBhIGNpcmNsZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHggLSBDZW50ZXIgb2YgdGhlIGNpcmNsZSBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geSAtIENlbnRlciBvZiB0aGUgY2lyY2xlIG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSByYWRpdXMgLSBSYWRpdXMgb2YgdGhlIGNpcmNsZS5cbiAgICovXG4gIHByaXZhdGUgX2NpcmNsZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcInNoYWRvd0NvbG9yXCIgfCBcInNoYWRvd1NpemVcIiB8IFwic2hhZG93WFwiIHwgXCJzaGFkb3dZXCJcbiAgICA+LFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgcmFkaXVzOiBudW1iZXJcbiAgKTogdm9pZCB7XG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcblxuICAgIC8vZnVsbCBjaXJjbGVcbiAgICBsZXQgYW5nbGVGcm9tID0gMDtcbiAgICBsZXQgYW5nbGVUbyA9IE1hdGguUEkgKiAyO1xuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5yZW5kZXJCZWhpbmRUaGVOb2RlKSB7XG4gICAgICAvL3JlbmRlciBvbmx5IHBhcnRzIHdoaWNoIGFyZSBub3Qgb3ZlcmxhcGluZyB3aXRoIHBhcmVudCBub2RlXG4gICAgICAvL25lZWQgdG8gZmluZCB4LHkgb2YgZnJvbSBwb2ludCBhbmQgeCx5IHRvIHBvaW50XG4gICAgICAvL2NhbGN1bGF0aW5nIHJhZGlhbnNcbiAgICAgIGNvbnN0IGxvdyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlO1xuICAgICAgY29uc3QgaGlnaCA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlICsgTWF0aC5QSTtcbiAgICAgIGNvbnN0IHBvaW50VEZyb20gPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbG93LFxuICAgICAgICBoaWdoLFxuICAgICAgICBkaXJlY3Rpb246IC0xLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwb2ludFRUbyA9IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBsb3csXG4gICAgICAgIGhpZ2gsXG4gICAgICAgIGRpcmVjdGlvbjogMSxcbiAgICAgIH0pO1xuICAgICAgYW5nbGVGcm9tID0gTWF0aC5hdGFuMihwb2ludFRGcm9tLnkgLSB5LCBwb2ludFRGcm9tLnggLSB4KTtcbiAgICAgIGFuZ2xlVG8gPSBNYXRoLmF0YW4yKHBvaW50VFRvLnkgLSB5LCBwb2ludFRUby54IC0geCk7XG4gICAgfVxuXG4gICAgLy8gZHJhdyBhIGNpcmNsZVxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHguYXJjKHgsIHksIHJhZGl1cywgYW5nbGVGcm9tLCBhbmdsZVRvLCBmYWxzZSk7XG4gICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqIEByZW1hcmtzXG4gICAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODQ5MjExL3Nob3J0ZXN0LWRpc3RhbmNhZS1iZXR3ZWVuLWEtcG9pbnQtYW5kLWEtbGluZS1zZWdtZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXJcbiAgKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5mcm9tICE9IHRoaXMudG8pIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXREaXN0YW5jZVRvRWRnZSh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3gsIHksIHJhZGl1c10gPSB0aGlzLl9nZXRDaXJjbGVEYXRhKHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBkeCA9IHggLSB4MztcbiAgICAgIGNvbnN0IGR5ID0geSAtIHkzO1xuICAgICAgcmV0dXJuIE1hdGguYWJzKE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSkgLSByYWRpdXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBwb2ludCAoeDMsIHkzKSBhbmQgYSBsaW5lIHNlZ21lbnQgZnJvbSAoeDEsIHkxKSB0byAoeDIsIHkyKS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84NDkyMTEvc2hvcnRlc3QtZGlzdGFuY2FlLWJldHdlZW4tYS1wb2ludC1hbmQtYS1saW5lLXNlZ21lbnRcbiAgICogQHBhcmFtIHgxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB2aWEgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbGluZSBzZWdtZW50IGFuZCB0aGUgcG9pbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2dldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyLFxuICAgIHZpYT86IFZpYVxuICApOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBhIHBvaW50ICh4MywgeTMpIGFuZCBhIGxpbmUgc2VnbWVudCBmcm9tICh4MSwgeTEpIHRvICh4MiwgeTIpLlxuICAgKlxuICAgKiBAcGFyYW0geDEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDIgLSBTZWNvbmQgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB4MyAtIFBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHJldHVybnMgVGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGxpbmUgc2VnbWVudCBhbmQgdGhlIHBvaW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXREaXN0YW5jZVRvTGluZShcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlclxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IHB4ID0geDIgLSB4MTtcbiAgICBjb25zdCBweSA9IHkyIC0geTE7XG4gICAgY29uc3Qgc29tZXRoaW5nID0gcHggKiBweCArIHB5ICogcHk7XG4gICAgbGV0IHUgPSAoKHgzIC0geDEpICogcHggKyAoeTMgLSB5MSkgKiBweSkgLyBzb21ldGhpbmc7XG5cbiAgICBpZiAodSA+IDEpIHtcbiAgICAgIHUgPSAxO1xuICAgIH0gZWxzZSBpZiAodSA8IDApIHtcbiAgICAgIHUgPSAwO1xuICAgIH1cblxuICAgIGNvbnN0IHggPSB4MSArIHUgKiBweDtcbiAgICBjb25zdCB5ID0geTEgKyB1ICogcHk7XG4gICAgY29uc3QgZHggPSB4IC0geDM7XG4gICAgY29uc3QgZHkgPSB5IC0geTM7XG5cbiAgICAvLyMgTm90ZTogSWYgdGhlIGFjdHVhbCBkaXN0YW5jZSBkb2VzIG5vdCBtYXR0ZXIsXG4gICAgLy8jIGlmIHlvdSBvbmx5IHdhbnQgdG8gY29tcGFyZSB3aGF0IHRoaXMgZnVuY3Rpb25cbiAgICAvLyMgcmV0dXJucyB0byBvdGhlciByZXN1bHRzIG9mIHRoaXMgZnVuY3Rpb24sIHlvdVxuICAgIC8vIyBjYW4ganVzdCByZXR1cm4gdGhlIHNxdWFyZWQgZGlzdGFuY2UgaW5zdGVhZFxuICAgIC8vIyAoaS5lLiByZW1vdmUgdGhlIHNxcnQpIHRvIGdhaW4gYSBsaXR0bGUgcGVyZm9ybWFuY2VcblxuICAgIHJldHVybiBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwibWlkZGxlXCIsXG4gICAgdmlhTm9kZTogVk5vZGUsXG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgaG92ZXI6IGJvb2xlYW4sXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJtaWRkbGVBcnJvd1R5cGVcIiB8IFwibWlkZGxlQXJyb3dTY2FsZVwiIHwgXCJ3aWR0aFwiXG4gICAgPlxuICApOiBBcnJvd0RhdGFXaXRoQ29yZTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwidG9cIixcbiAgICB2aWFOb2RlOiBWTm9kZSxcbiAgICBzZWxlY3RlZDogYm9vbGVhbixcbiAgICBob3ZlcjogYm9vbGVhbixcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcInRvQXJyb3dUeXBlXCIgfCBcInRvQXJyb3dTY2FsZVwiIHwgXCJ3aWR0aFwiXG4gICAgPlxuICApOiBBcnJvd0RhdGFXaXRoQ29yZTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwiZnJvbVwiLFxuICAgIHZpYU5vZGU6IFZOb2RlLFxuICAgIHNlbGVjdGVkOiBib29sZWFuLFxuICAgIGhvdmVyOiBib29sZWFuLFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwiZnJvbUFycm93VHlwZVwiIHwgXCJmcm9tQXJyb3dTY2FsZVwiIHwgXCJ3aWR0aFwiXG4gICAgPlxuICApOiBBcnJvd0RhdGFXaXRoQ29yZTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwiZnJvbVwiIHwgXCJ0b1wiIHwgXCJtaWRkbGVcIixcbiAgICB2aWFOb2RlOiBWTm9kZSxcbiAgICBfc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgX2hvdmVyOiBib29sZWFuLFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8RWRnZUZvcm1hdHRpbmdWYWx1ZXMsIFwid2lkdGhcIj5cbiAgKTogQXJyb3dEYXRhV2l0aENvcmUge1xuICAgIC8vIHNldCBsZXRzXG4gICAgbGV0IGFuZ2xlOiBudW1iZXI7XG4gICAgbGV0IGFycm93UG9pbnQ6IFBvaW50O1xuICAgIGxldCBub2RlMTogVk5vZGU7XG4gICAgbGV0IG5vZGUyOiBWTm9kZTtcbiAgICBsZXQgcmV2ZXJzZWQ6IGJvb2xlYW47XG4gICAgbGV0IHNjYWxlRmFjdG9yOiBudW1iZXI7XG4gICAgbGV0IHR5cGU6IEFycm93VHlwZTtcbiAgICBjb25zdCBsaW5lV2lkdGg6IG51bWJlciA9IHZhbHVlcy53aWR0aDtcblxuICAgIGlmIChwb3NpdGlvbiA9PT0gXCJmcm9tXCIpIHtcbiAgICAgIG5vZGUxID0gdGhpcy5mcm9tO1xuICAgICAgbm9kZTIgPSB0aGlzLnRvO1xuICAgICAgcmV2ZXJzZWQgPSB2YWx1ZXMuZnJvbUFycm93U2NhbGUhIDwgMDtcbiAgICAgIHNjYWxlRmFjdG9yID0gTWF0aC5hYnModmFsdWVzLmZyb21BcnJvd1NjYWxlISk7XG4gICAgICB0eXBlID0gdmFsdWVzLmZyb21BcnJvd1R5cGUhO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09IFwidG9cIikge1xuICAgICAgbm9kZTEgPSB0aGlzLnRvO1xuICAgICAgbm9kZTIgPSB0aGlzLmZyb207XG4gICAgICByZXZlcnNlZCA9IHZhbHVlcy50b0Fycm93U2NhbGUhIDwgMDtcbiAgICAgIHNjYWxlRmFjdG9yID0gTWF0aC5hYnModmFsdWVzLnRvQXJyb3dTY2FsZSEpO1xuICAgICAgdHlwZSA9IHZhbHVlcy50b0Fycm93VHlwZSE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUxID0gdGhpcy50bztcbiAgICAgIG5vZGUyID0gdGhpcy5mcm9tO1xuICAgICAgcmV2ZXJzZWQgPSB2YWx1ZXMubWlkZGxlQXJyb3dTY2FsZSEgPCAwO1xuICAgICAgc2NhbGVGYWN0b3IgPSBNYXRoLmFicyh2YWx1ZXMubWlkZGxlQXJyb3dTY2FsZSEpO1xuICAgICAgdHlwZSA9IHZhbHVlcy5taWRkbGVBcnJvd1R5cGUhO1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IDE1ICogc2NhbGVGYWN0b3IgKyAzICogbGluZVdpZHRoOyAvLyAzKiBsaW5lV2lkdGggaXMgdGhlIHdpZHRoIG9mIHRoZSBlZGdlLlxuXG4gICAgLy8gaWYgbm90IGNvbm5lY3RlZCB0byBpdHNlbGZcbiAgICBpZiAobm9kZTEgIT0gbm9kZTIpIHtcbiAgICAgIGNvbnN0IGFwcHJveGltYXRlRWRnZUxlbmd0aCA9IE1hdGguaHlwb3QoXG4gICAgICAgIG5vZGUxLnggLSBub2RlMi54LFxuICAgICAgICBub2RlMS55IC0gbm9kZTIueVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlbGF0aXZlTGVuZ3RoID0gbGVuZ3RoIC8gYXBwcm94aW1hdGVFZGdlTGVuZ3RoO1xuXG4gICAgICBpZiAocG9zaXRpb24gIT09IFwibWlkZGxlXCIpIHtcbiAgICAgICAgLy8gZHJhdyBhcnJvdyBoZWFkXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc21vb3RoLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBwb2ludFQgPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb24obm9kZTEsIGN0eCwgeyB2aWE6IHZpYU5vZGUgfSk7XG4gICAgICAgICAgY29uc3QgZ3VpZGVQb3MgPSB0aGlzLmdldFBvaW50KFxuICAgICAgICAgICAgcG9pbnRULnQgKyByZWxhdGl2ZUxlbmd0aCAqIChwb3NpdGlvbiA9PT0gXCJmcm9tXCIgPyAxIDogLTEpLFxuICAgICAgICAgICAgdmlhTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYW5nbGUgPSBNYXRoLmF0YW4yKHBvaW50VC55IC0gZ3VpZGVQb3MueSwgcG9pbnRULnggLSBndWlkZVBvcy54KTtcbiAgICAgICAgICBhcnJvd1BvaW50ID0gcG9pbnRUO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFuZ2xlID0gTWF0aC5hdGFuMihub2RlMS55IC0gbm9kZTIueSwgbm9kZTEueCAtIG5vZGUyLngpO1xuICAgICAgICAgIGFycm93UG9pbnQgPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb24obm9kZTEsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5lZ2F0aXZlIGhhbGYgbGVuZ3RoIHJldmVyc2VzIGFycm93IGRpcmVjdGlvbi5cbiAgICAgICAgY29uc3QgaGFsZkxlbmd0aCA9IChyZXZlcnNlZCA/IC1yZWxhdGl2ZUxlbmd0aCA6IHJlbGF0aXZlTGVuZ3RoKSAvIDI7XG4gICAgICAgIGNvbnN0IGd1aWRlUG9zMSA9IHRoaXMuZ2V0UG9pbnQoMC41ICsgaGFsZkxlbmd0aCwgdmlhTm9kZSk7XG4gICAgICAgIGNvbnN0IGd1aWRlUG9zMiA9IHRoaXMuZ2V0UG9pbnQoMC41IC0gaGFsZkxlbmd0aCwgdmlhTm9kZSk7XG4gICAgICAgIGFuZ2xlID0gTWF0aC5hdGFuMihcbiAgICAgICAgICBndWlkZVBvczEueSAtIGd1aWRlUG9zMi55LFxuICAgICAgICAgIGd1aWRlUG9zMS54IC0gZ3VpZGVQb3MyLnhcbiAgICAgICAgKTtcbiAgICAgICAgYXJyb3dQb2ludCA9IHRoaXMuZ2V0UG9pbnQoMC41LCB2aWFOb2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZHJhdyBjaXJjbGVcbiAgICAgIGNvbnN0IFt4LCB5LCByYWRpdXNdID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YShjdHgpO1xuXG4gICAgICBpZiAocG9zaXRpb24gPT09IFwiZnJvbVwiKSB7XG4gICAgICAgIGNvbnN0IGxvdyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlO1xuICAgICAgICBjb25zdCBoaWdoID0gdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUgKyBNYXRoLlBJO1xuXG4gICAgICAgIGNvbnN0IHBvaW50VCA9IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICBsb3csXG4gICAgICAgICAgaGlnaCxcbiAgICAgICAgICBkaXJlY3Rpb246IC0xLFxuICAgICAgICB9KTtcbiAgICAgICAgYW5nbGUgPSBwb2ludFQudCAqIC0yICogTWF0aC5QSSArIDEuNSAqIE1hdGguUEkgKyAwLjEgKiBNYXRoLlBJO1xuICAgICAgICBhcnJvd1BvaW50ID0gcG9pbnRUO1xuICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gXCJ0b1wiKSB7XG4gICAgICAgIGNvbnN0IGxvdyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlO1xuICAgICAgICBjb25zdCBoaWdoID0gdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUgKyBNYXRoLlBJO1xuXG4gICAgICAgIGNvbnN0IHBvaW50VCA9IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICBsb3csXG4gICAgICAgICAgaGlnaCxcbiAgICAgICAgICBkaXJlY3Rpb246IDEsXG4gICAgICAgIH0pO1xuICAgICAgICBhbmdsZSA9IHBvaW50VC50ICogLTIgKiBNYXRoLlBJICsgMS41ICogTWF0aC5QSSAtIDEuMSAqIE1hdGguUEk7XG4gICAgICAgIGFycm93UG9pbnQgPSBwb2ludFQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZSAvICgyICogTWF0aC5QSSk7XG4gICAgICAgIGFycm93UG9pbnQgPSB0aGlzLl9wb2ludE9uQ2lyY2xlKHgsIHksIHJhZGl1cywgcG9zKTtcbiAgICAgICAgYW5nbGUgPSBwb3MgKiAtMiAqIE1hdGguUEkgKyAxLjUgKiBNYXRoLlBJICsgMC4xICogTWF0aC5QSTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB4aSA9IGFycm93UG9pbnQueCAtIGxlbmd0aCAqIDAuOSAqIE1hdGguY29zKGFuZ2xlKTtcbiAgICBjb25zdCB5aSA9IGFycm93UG9pbnQueSAtIGxlbmd0aCAqIDAuOSAqIE1hdGguc2luKGFuZ2xlKTtcbiAgICBjb25zdCBhcnJvd0NvcmUgPSB7IHg6IHhpLCB5OiB5aSB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBvaW50OiBhcnJvd1BvaW50LFxuICAgICAgY29yZTogYXJyb3dDb3JlLFxuICAgICAgYW5nbGU6IGFuZ2xlLFxuICAgICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGRyYXdBcnJvd0hlYWQoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImNvbG9yXCJcbiAgICAgIHwgXCJvcGFjaXR5XCJcbiAgICAgIHwgXCJzaGFkb3dDb2xvclwiXG4gICAgICB8IFwic2hhZG93U2l6ZVwiXG4gICAgICB8IFwic2hhZG93WFwiXG4gICAgICB8IFwic2hhZG93WVwiXG4gICAgICB8IFwid2lkdGhcIlxuICAgID4sXG4gICAgX3NlbGVjdGVkOiBib29sZWFuLFxuICAgIF9ob3ZlcjogYm9vbGVhbixcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB2b2lkIHtcbiAgICAvLyBzZXQgc3R5bGVcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmdldENvbG9yKGN0eCwgdmFsdWVzKTtcbiAgICBjdHguZmlsbFN0eWxlID0gY3R4LnN0cm9rZVN0eWxlO1xuICAgIGN0eC5saW5lV2lkdGggPSB2YWx1ZXMud2lkdGg7XG5cbiAgICBjb25zdCBjYW5GaWxsID0gRW5kUG9pbnRzLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuXG4gICAgaWYgKGNhbkZpbGwpIHtcbiAgICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICAgIGN0eC5maWxsKCk7XG4gICAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzaGFkb3cgZm9ybWF0dGluZyB2YWx1ZXMgaW4gdGhlIGNvbnRleHQgaWYgZW5hYmxlZCwgZG8gbm90aGluZyBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgZm9yIHRoZSBzaGFkb3cuXG4gICAqL1xuICBwdWJsaWMgZW5hYmxlU2hhZG93KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwic2hhZG93Q29sb3JcIiB8IFwic2hhZG93U2l6ZVwiIHwgXCJzaGFkb3dYXCIgfCBcInNoYWRvd1lcIlxuICAgID5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlcy5zaGFkb3cgPT09IHRydWUpIHtcbiAgICAgIGN0eC5zaGFkb3dDb2xvciA9IHZhbHVlcy5zaGFkb3dDb2xvcjtcbiAgICAgIGN0eC5zaGFkb3dCbHVyID0gdmFsdWVzLnNoYWRvd1NpemU7XG4gICAgICBjdHguc2hhZG93T2Zmc2V0WCA9IHZhbHVlcy5zaGFkb3dYO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSB2YWx1ZXMuc2hhZG93WTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHNoYWRvdyBmb3JtYXR0aW5nIHZhbHVlcyBpbiB0aGUgY29udGV4dCBpZiBlbmFibGVkLCBkbyBub3RoaW5nIG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBmb3IgdGhlIHNoYWRvdy5cbiAgICovXG4gIHB1YmxpYyBkaXNhYmxlU2hhZG93KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogRWRnZUZvcm1hdHRpbmdWYWx1ZXNcbiAgKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlcy5zaGFkb3cgPT09IHRydWUpIHtcbiAgICAgIGN0eC5zaGFkb3dDb2xvciA9IFwicmdiYSgwLDAsMCwwKVwiO1xuICAgICAgY3R4LnNoYWRvd0JsdXIgPSAwO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFggPSAwO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSAwO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGJhY2tncm91bmQgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXR0aW5nIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBmb3IgdGhlIGJhY2tncm91bmQuXG4gICAqL1xuICBwdWJsaWMgZHJhd0JhY2tncm91bmQoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJiYWNrZ3JvdW5kQ29sb3JcIiB8IFwiYmFja2dyb3VuZFNpemVcIlxuICAgID5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlcy5iYWNrZ3JvdW5kICE9PSBmYWxzZSkge1xuICAgICAgLy8gc2F2ZSBvcmlnaW5hbCBsaW5lIGF0dHJzXG4gICAgICBjb25zdCBvcmlnQ3R4QXR0ciA9IHtcbiAgICAgICAgc3Ryb2tlU3R5bGU6IGN0eC5zdHJva2VTdHlsZSxcbiAgICAgICAgbGluZVdpZHRoOiBjdHgubGluZVdpZHRoLFxuICAgICAgICBkYXNoZXM6IChjdHggYXMgYW55KS5kYXNoZXMsXG4gICAgICB9O1xuXG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSB2YWx1ZXMuYmFja2dyb3VuZENvbG9yO1xuICAgICAgY3R4LmxpbmVXaWR0aCA9IHZhbHVlcy5iYWNrZ3JvdW5kU2l6ZTtcbiAgICAgIHRoaXMuc2V0U3Ryb2tlRGFzaGVkKGN0eCwgdmFsdWVzLmJhY2tncm91bmREYXNoZXMpO1xuXG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgbGluZSBhdHRyc1xuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gb3JpZ0N0eEF0dHIuc3Ryb2tlU3R5bGU7XG4gICAgICBjdHgubGluZVdpZHRoID0gb3JpZ0N0eEF0dHIubGluZVdpZHRoO1xuICAgICAgKGN0eCBhcyBhbnkpLmRhc2hlcyA9IG9yaWdDdHhBdHRyLmRhc2hlcztcbiAgICAgIHRoaXMuc2V0U3Ryb2tlRGFzaGVkKGN0eCwgdmFsdWVzLmRhc2hlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbGluZSBkYXNoIHBhdHRlcm4gaWYgc3VwcG9ydGVkLiBMb2dzIGEgd2FybmluZyB0byB0aGUgY29uc29sZSBpZiBpdCBpc24ndCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gZGFzaGVzIC0gVGhlIHBhdHRlcm4gW2xpbmUsIHNwYWNlLCBsaW5l4oCmXSwgdHJ1ZSBmb3IgZGVmYXVsdCBkYXNoZWQgbGluZSBvciBmYWxzZSBmb3Igbm9ybWFsIGxpbmUuXG4gICAqL1xuICBwdWJsaWMgc2V0U3Ryb2tlRGFzaGVkKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGRhc2hlcz86IGJvb2xlYW4gfCBudW1iZXJbXVxuICApOiB2b2lkIHtcbiAgICBpZiAoZGFzaGVzICE9PSBmYWxzZSkge1xuICAgICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBBcnJheS5pc0FycmF5KGRhc2hlcykgPyBkYXNoZXMgOiBbNSwgNV07XG4gICAgICAgIGN0eC5zZXRMaW5lRGFzaChwYXR0ZXJuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcInNldExpbmVEYXNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLiBUaGUgZGFzaGVkIHN0cm9rZSBjYW5ub3QgYmUgdXNlZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3R4LnNldExpbmVEYXNoKFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcInNldExpbmVEYXNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLiBUaGUgZGFzaGVkIHN0cm9rZSBjYW5ub3QgYmUgdXNlZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IEVkZ2VCYXNlIH0gZnJvbSBcIi4vZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIFRoZSBCYXNlIENsYXNzIGZvciBhbGwgQmV6aWVyIGVkZ2VzLlxuICogQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbCBzbW9vdGggZ3JhZHVhbCBjdXJ2ZXMgaW4gcGF0aHMgYmV0d2VlbiBub2Rlcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJlemllckVkZ2VCYXNlPFZpYT4gZXh0ZW5kcyBFZGdlQmFzZTxWaWE+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgYWRkaXRpb25hbCBwb2ludChzKSB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICpcbiAgICogQHJldHVybnMgQ2FydGVzaWFuIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludChzKSB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBfZ2V0VmlhQ29vcmRpbmF0ZXMoKTogVmlhO1xuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgYm9yZGVyIG9mIHRoZSBub2RlIGFuZCB0aGUgZWRnZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBmdW5jdGlvbiB1c2VzIGJpbmFyeSBzZWFyY2ggdG8gbG9vayBmb3IgdGhlIHBvaW50IHdoZXJlIHRoZSBiZXppZXIgY3VydmUgY3Jvc3NlcyB0aGUgYm9yZGVyIG9mIHRoZSBub2RlLlxuICAgKiBAcGFyYW0gbmVhck5vZGUgLSBUaGUgbm9kZSAoZWl0aGVyIGZyb20gb3IgdG8gbm9kZSBvZiB0aGUgZWRnZSkuXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmlhTm9kZSAtIEFkZGl0aW9uYWwgbm9kZShzKSB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICogQHJldHVybnMgQ2FydGVzaWFuIGNvb3JkaW5hdGVzIG9mIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgYm9yZGVyIG9mIHRoZSBub2RlIGFuZCB0aGUgZWRnZS5cbiAgICovXG4gIHByb3RlY3RlZCBfZmluZEJvcmRlclBvc2l0aW9uQmV6aWVyKFxuICAgIG5lYXJOb2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2aWFOb2RlOiBWaWEgPSB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpXG4gICk6IFBvaW50VCB7XG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwO1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IDAuMjtcbiAgICBsZXQgZnJvbSA9IGZhbHNlO1xuICAgIGxldCBoaWdoID0gMTtcbiAgICBsZXQgbG93ID0gMDtcbiAgICBsZXQgbm9kZSA9IHRoaXMudG87XG4gICAgbGV0IHBvczogUG9pbnQ7XG4gICAgbGV0IG1pZGRsZTogbnVtYmVyO1xuXG4gICAgbGV0IGVuZFBvaW50T2Zmc2V0ID0gdGhpcy5vcHRpb25zLmVuZFBvaW50T2Zmc2V0XG4gICAgICA/IHRoaXMub3B0aW9ucy5lbmRQb2ludE9mZnNldC50b1xuICAgICAgOiAwO1xuXG4gICAgaWYgKG5lYXJOb2RlLmlkID09PSB0aGlzLmZyb20uaWQpIHtcbiAgICAgIG5vZGUgPSB0aGlzLmZyb207XG4gICAgICBmcm9tID0gdHJ1ZTtcblxuICAgICAgZW5kUG9pbnRPZmZzZXQgPSB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXRcbiAgICAgICAgPyB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbVxuICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcnJvd1N0cmlrZXRocm91Z2ggPT09IGZhbHNlKSB7XG4gICAgICBlbmRQb2ludE9mZnNldCA9IDA7XG4gICAgfVxuXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gICAgZG8ge1xuICAgICAgbWlkZGxlID0gKGxvdyArIGhpZ2gpICogMC41O1xuXG4gICAgICBwb3MgPSB0aGlzLmdldFBvaW50KG1pZGRsZSwgdmlhTm9kZSk7XG4gICAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIobm9kZS55IC0gcG9zLnksIG5vZGUueCAtIHBvcy54KTtcblxuICAgICAgY29uc3QgZGlzdGFuY2VUb0JvcmRlciA9XG4gICAgICAgIG5vZGUuZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSArIGVuZFBvaW50T2Zmc2V0O1xuXG4gICAgICBjb25zdCBkaXN0YW5jZVRvUG9pbnQgPSBNYXRoLnNxcnQoXG4gICAgICAgIE1hdGgucG93KHBvcy54IC0gbm9kZS54LCAyKSArIE1hdGgucG93KHBvcy55IC0gbm9kZS55LCAyKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBkaXN0YW5jZVRvQm9yZGVyIC0gZGlzdGFuY2VUb1BvaW50O1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZlcmVuY2UpIDwgdGhyZXNob2xkKSB7XG4gICAgICAgIGJyZWFrOyAvLyBmb3VuZFxuICAgICAgfSBlbHNlIGlmIChkaWZmZXJlbmNlIDwgMCkge1xuICAgICAgICAvLyBkaXN0YW5jZSB0byBub2RlcyBpcyBsYXJnZXIgdGhhbiBkaXN0YW5jZSB0byBib3JkZXIgLS0+IHQgbmVlZHMgdG8gYmUgYmlnZ2VyIGlmIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIHRvIG5vZGUuXG4gICAgICAgIGlmIChmcm9tID09PSBmYWxzZSkge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZnJvbSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICArK2l0ZXJhdGlvbjtcbiAgICB9IHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wb3MsXG4gICAgICB0OiBtaWRkbGUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBwb2ludCAoeDMseTMpIGFuZCBhIGxpbmUgc2VnbWVudCBmcm9tICh4MSx5MSkgdG8gKHgyLHkyKS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84NDkyMTEvc2hvcnRlc3QtZGlzdGFuY2FlLWJldHdlZW4tYS1wb2ludC1hbmQtYS1saW5lLXNlZ21lbnRcbiAgICogQHBhcmFtIHgxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB2aWEgLSBUaGUgY29udHJvbCBwb2ludCBmb3IgdGhlIGVkZ2UuXG4gICAqIEByZXR1cm5zIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBsaW5lIHNlZ21lbnQgYW5kIHRoZSBwb2ludC5cbiAgICovXG4gIHByb3RlY3RlZCBfZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXIsXG4gICAgdmlhOiBQb2ludFxuICApOiBudW1iZXIge1xuICAgIC8vIHgzLHkzIGlzIHRoZSBwb2ludFxuICAgIGxldCBtaW5EaXN0YW5jZSA9IDFlOTtcbiAgICBsZXQgZGlzdGFuY2U7XG4gICAgbGV0IGksIHQsIHgsIHk7XG4gICAgbGV0IGxhc3RYID0geDE7XG4gICAgbGV0IGxhc3RZID0geTE7XG4gICAgZm9yIChpID0gMTsgaSA8IDEwOyBpKyspIHtcbiAgICAgIHQgPSAwLjEgKiBpO1xuICAgICAgeCA9XG4gICAgICAgIE1hdGgucG93KDEgLSB0LCAyKSAqIHgxICsgMiAqIHQgKiAoMSAtIHQpICogdmlhLnggKyBNYXRoLnBvdyh0LCAyKSAqIHgyO1xuICAgICAgeSA9XG4gICAgICAgIE1hdGgucG93KDEgLSB0LCAyKSAqIHkxICsgMiAqIHQgKiAoMSAtIHQpICogdmlhLnkgKyBNYXRoLnBvdyh0LCAyKSAqIHkyO1xuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIGRpc3RhbmNlID0gdGhpcy5fZ2V0RGlzdGFuY2VUb0xpbmUobGFzdFgsIGxhc3RZLCB4LCB5LCB4MywgeTMpO1xuICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlIDwgbWluRGlzdGFuY2UgPyBkaXN0YW5jZSA6IG1pbkRpc3RhbmNlO1xuICAgICAgfVxuICAgICAgbGFzdFggPSB4O1xuICAgICAgbGFzdFkgPSB5O1xuICAgIH1cblxuICAgIHJldHVybiBtaW5EaXN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgYSBiZXppZXIgY3VydmUgYmV0d2VlbiB0d28gbm9kZXMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBtZXRob2QgYWNjZXB0cyB6ZXJvLCBvbmUgb3IgdHdvIGNvbnRyb2wgcG9pbnRzLlxuICAgKiBQYXNzaW5nIHplcm8gY29udHJvbCBwb2ludHMganVzdCBkcmF3cyBhIHN0cmFpZ2h0IGxpbmUuXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gU3R5bGUgb3B0aW9ucyBmb3IgZWRnZSBkcmF3aW5nLlxuICAgKiBAcGFyYW0gdmlhTm9kZTEgLSBGaXJzdCBjb250cm9sIHBvaW50IGZvciBjdXJ2ZSBkcmF3aW5nLlxuICAgKiBAcGFyYW0gdmlhTm9kZTIgLSBTZWNvbmQgY29udHJvbCBwb2ludCBmb3IgY3VydmUgZHJhd2luZy5cbiAgICovXG4gIHByb3RlY3RlZCBfYmV6aWVyQ3VydmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImJhY2tncm91bmRDb2xvclwiXG4gICAgICB8IFwiYmFja2dyb3VuZFNpemVcIlxuICAgICAgfCBcInNoYWRvd0NvbG9yXCJcbiAgICAgIHwgXCJzaGFkb3dTaXplXCJcbiAgICAgIHwgXCJzaGFkb3dYXCJcbiAgICAgIHwgXCJzaGFkb3dZXCJcbiAgICA+LFxuICAgIHZpYU5vZGUxPzogUG9pbnQsXG4gICAgdmlhTm9kZTI/OiBQb2ludFxuICApOiB2b2lkIHtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyh0aGlzLmZyb21Qb2ludC54LCB0aGlzLmZyb21Qb2ludC55KTtcblxuICAgIGlmICh2aWFOb2RlMSAhPSBudWxsICYmIHZpYU5vZGUxLnggIT0gbnVsbCkge1xuICAgICAgaWYgKHZpYU5vZGUyICE9IG51bGwgJiYgdmlhTm9kZTIueCAhPSBudWxsKSB7XG4gICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKFxuICAgICAgICAgIHZpYU5vZGUxLngsXG4gICAgICAgICAgdmlhTm9kZTEueSxcbiAgICAgICAgICB2aWFOb2RlMi54LFxuICAgICAgICAgIHZpYU5vZGUyLnksXG4gICAgICAgICAgdGhpcy50b1BvaW50LngsXG4gICAgICAgICAgdGhpcy50b1BvaW50LnlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKFxuICAgICAgICAgIHZpYU5vZGUxLngsXG4gICAgICAgICAgdmlhTm9kZTEueSxcbiAgICAgICAgICB0aGlzLnRvUG9pbnQueCxcbiAgICAgICAgICB0aGlzLnRvUG9pbnQueVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmYWxsYmFjayB0byBub3JtYWwgc3RyYWlnaHQgZWRnZVxuICAgICAgY3R4LmxpbmVUbyh0aGlzLnRvUG9pbnQueCwgdGhpcy50b1BvaW50LnkpO1xuICAgIH1cblxuICAgIC8vIGRyYXcgYSBiYWNrZ3JvdW5kXG4gICAgdGhpcy5kcmF3QmFja2dyb3VuZChjdHgsIHZhbHVlcyk7XG5cbiAgICAvLyBkcmF3IHNoYWRvdyBpZiBlbmFibGVkXG4gICAgdGhpcy5lbmFibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICAgIGN0eC5zdHJva2UoKTtcbiAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFZpYSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFZpYUNvb3JkaW5hdGVzKCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCZXppZXJFZGdlQmFzZSB9IGZyb20gXCIuL3V0aWwvYmV6aWVyLWVkZ2UtYmFzZVwiO1xuaW1wb3J0IHtcbiAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdXRpbC90eXBlc1wiO1xuXG4vKipcbiAqIEEgRHluYW1pYyBCZXppZXIgRWRnZS4gQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbCBzbW9vdGggZ3JhZHVhbFxuICogY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuIFRoZSBEeW5hbWljIHBpZWNlIHJlZmVycyB0byBob3cgdGhlIGN1cnZlXG4gKiByZWFjdHMgdG8gcGh5c2ljcyBjaGFuZ2VzLlxuICpcbiAqIEBhdWdtZW50cyBCZXppZXJFZGdlQmFzZVxuICovXG5leHBvcnQgY2xhc3MgQmV6aWVyRWRnZUR5bmFtaWMgZXh0ZW5kcyBCZXppZXJFZGdlQmFzZTxQb2ludD4ge1xuICBwdWJsaWMgdmlhOiBWTm9kZSA9IHRoaXMudmlhOyAvLyBjb25zdHJ1Y3RvciDihpIgc3VwZXIg4oaSIHN1cGVyIOKGkiBzZXRPcHRpb25zIOKGkiBzZXR1cFN1cHBvcnROb2RlXG4gIHByaXZhdGUgcmVhZG9ubHkgX2JvdW5kRnVuY3Rpb246ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgLy90aGlzLnZpYSA9IHVuZGVmaW5lZDsgLy8gSGVyZSBmb3IgY29tcGxldGVuZXNzIGJ1dCBub3QgYWxsb3dlZCB0byBkZWZpbmVkIGJlZm9yZSBzdXBlcigpIGlzIGludm9rZWQuXG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpOyAvLyAtLT4gdGhpcyBjYWxscyB0aGUgc2V0T3B0aW9ucyBiZWxvd1xuICAgIHRoaXMuX2JvdW5kRnVuY3Rpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnBvc2l0aW9uQmV6aWVyTm9kZSgpO1xuICAgIH07XG4gICAgdGhpcy5fYm9keS5lbWl0dGVyLm9uKFwiX3JlcG9zaXRpb25CZXppZXJOb2Rlc1wiLCB0aGlzLl9ib3VuZEZ1bmN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zOiBFZGdlT3B0aW9ucyk6IHZvaWQge1xuICAgIHN1cGVyLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgcGh5c2ljcyBoYXMgY2hhbmdlZC5cbiAgICBsZXQgcGh5c2ljc0NoYW5nZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm9wdGlvbnMucGh5c2ljcyAhPT0gb3B0aW9ucy5waHlzaWNzKSB7XG4gICAgICBwaHlzaWNzQ2hhbmdlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG9wdGlvbnMgYW5kIHRoZSB0byBhbmQgZnJvbSBub2Rlc1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5pZCA9IHRoaXMub3B0aW9ucy5pZDtcbiAgICB0aGlzLmZyb20gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy5mcm9tXTtcbiAgICB0aGlzLnRvID0gdGhpcy5fYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMudG9dO1xuXG4gICAgLy8gc2V0dXAgdGhlIHN1cHBvcnQgbm9kZSBhbmQgY29ubmVjdFxuICAgIHRoaXMuc2V0dXBTdXBwb3J0Tm9kZSgpO1xuICAgIHRoaXMuY29ubmVjdCgpO1xuXG4gICAgLy8gd2hlbiB3ZSBjaGFuZ2UgdGhlIHBoeXNpY3Mgc3RhdGUgb2YgdGhlIGVkZ2UsIHdlIHJlcG9zaXRpb24gdGhlIHN1cHBvcnQgbm9kZS5cbiAgICBpZiAocGh5c2ljc0NoYW5nZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy52aWEuc2V0T3B0aW9ucyh7IHBoeXNpY3M6IHRoaXMub3B0aW9ucy5waHlzaWNzIH0pO1xuICAgICAgdGhpcy5wb3NpdGlvbkJlemllck5vZGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGNvbm5lY3QoKTogdm9pZCB7XG4gICAgdGhpcy5mcm9tID0gdGhpcy5fYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMuZnJvbV07XG4gICAgdGhpcy50byA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLnRvXTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZyb20gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy50byA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLm9wdGlvbnMucGh5c2ljcyA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIHRoaXMudmlhLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZml4IHdlaXJkIGJlaGF2aW91ciB3aGVyZSBhIHNlbGYgcmVmZXJlbmNpbmcgbm9kZSBoYXMgcGh5c2ljcyBlbmFibGVkXG4gICAgICBpZiAodGhpcy5mcm9tLmlkID09PSB0aGlzLnRvLmlkKSB7XG4gICAgICAgIHRoaXMudmlhLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmlhLnNldE9wdGlvbnMoeyBwaHlzaWNzOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgY2xlYW51cCgpOiBib29sZWFuIHtcbiAgICB0aGlzLl9ib2R5LmVtaXR0ZXIub2ZmKFwiX3JlcG9zaXRpb25CZXppZXJOb2Rlc1wiLCB0aGlzLl9ib3VuZEZ1bmN0aW9uKTtcbiAgICBpZiAodGhpcy52aWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIHRoaXMuX2JvZHkubm9kZXNbdGhpcy52aWEuaWRdO1xuICAgICAgdGhpcy52aWEgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbmQgYWRkIGEgc3VwcG9ydCBub2RlIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEJlemllciBjdXJ2ZXMgcmVxdWlyZSBhbiBhbmNob3IgcG9pbnQgdG8gY2FsY3VsYXRlIHRoZSBzbW9vdGggZmxvdy5cbiAgICogVGhlc2UgcG9pbnRzIGFyZSBub2Rlcy5cbiAgICogVGhlc2Ugbm9kZXMgYXJlIGludmlzaWJsZSBidXQgYXJlIHVzZWQgZm9yIHRoZSBmb3JjZSBjYWxjdWxhdGlvbi5cbiAgICpcbiAgICogVGhlIGNoYW5nZWQgZGF0YSBpcyBub3QgY2FsbGVkLCBpZiBuZWVkZWQsIGl0IGlzIHJldHVybmVkIGJ5IHRoZSBtYWluIGVkZ2UgY29uc3RydWN0b3IuXG4gICAqL1xuICBwdWJsaWMgc2V0dXBTdXBwb3J0Tm9kZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgbm9kZUlkID0gXCJlZGdlSWQ6XCIgKyB0aGlzLmlkO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuX2JvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGUoe1xuICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcGh5c2ljczogdHJ1ZSxcbiAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ib2R5Lm5vZGVzW25vZGVJZF0gPSBub2RlO1xuICAgICAgdGhpcy52aWEgPSBub2RlO1xuICAgICAgdGhpcy52aWEucGFyZW50RWRnZUlkID0gdGhpcy5pZDtcbiAgICAgIHRoaXMucG9zaXRpb25CZXppZXJOb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9uIGJlemllciBub2RlLlxuICAgKi9cbiAgcHVibGljIHBvc2l0aW9uQmV6aWVyTm9kZSgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnZpYSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmZyb20gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy50byAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLnZpYS54ID0gMC41ICogKHRoaXMuZnJvbS54ICsgdGhpcy50by54KTtcbiAgICAgIHRoaXMudmlhLnkgPSAwLjUgKiAodGhpcy5mcm9tLnkgKyB0aGlzLnRvLnkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy52aWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy52aWEueCA9IDA7XG4gICAgICB0aGlzLnZpYS55ID0gMDtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9saW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIHwgXCJiYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgfCBcImJhY2tncm91bmRTaXplXCJcbiAgICAgIHwgXCJzaGFkb3dDb2xvclwiXG4gICAgICB8IFwic2hhZG93U2l6ZVwiXG4gICAgICB8IFwic2hhZG93WFwiXG4gICAgICB8IFwic2hhZG93WVwiXG4gICAgPixcbiAgICB2aWFOb2RlOiBWTm9kZVxuICApOiB2b2lkIHtcbiAgICB0aGlzLl9iZXppZXJDdXJ2ZShjdHgsIHZhbHVlcywgdmlhTm9kZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9nZXRWaWFDb29yZGluYXRlcygpOiBQb2ludCB7XG4gICAgcmV0dXJuIHRoaXMudmlhO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFBvaW50IHtcbiAgICByZXR1cm4gdGhpcy52aWE7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldFBvaW50KHBvc2l0aW9uOiBudW1iZXIsIHZpYU5vZGU6IFBvaW50ID0gdGhpcy52aWEpOiBQb2ludCB7XG4gICAgaWYgKHRoaXMuZnJvbSA9PT0gdGhpcy50bykge1xuICAgICAgY29uc3QgW2N4LCBjeSwgY3JdID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YSgpO1xuICAgICAgY29uc3QgYSA9IDIgKiBNYXRoLlBJICogKDEgLSBwb3NpdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBjeCArIGNyICogTWF0aC5zaW4oYSksXG4gICAgICAgIHk6IGN5ICsgY3IgLSBjciAqICgxIC0gTWF0aC5jb3MoYSkpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDpcbiAgICAgICAgICBNYXRoLnBvdygxIC0gcG9zaXRpb24sIDIpICogdGhpcy5mcm9tUG9pbnQueCArXG4gICAgICAgICAgMiAqIHBvc2l0aW9uICogKDEgLSBwb3NpdGlvbikgKiB2aWFOb2RlLnggK1xuICAgICAgICAgIE1hdGgucG93KHBvc2l0aW9uLCAyKSAqIHRoaXMudG9Qb2ludC54LFxuICAgICAgICB5OlxuICAgICAgICAgIE1hdGgucG93KDEgLSBwb3NpdGlvbiwgMikgKiB0aGlzLmZyb21Qb2ludC55ICtcbiAgICAgICAgICAyICogcG9zaXRpb24gKiAoMSAtIHBvc2l0aW9uKSAqIHZpYU5vZGUueSArXG4gICAgICAgICAgTWF0aC5wb3cocG9zaXRpb24sIDIpICogdGhpcy50b1BvaW50LnksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2ZpbmRCb3JkZXJQb3NpdGlvbihcbiAgICBuZWFyTm9kZTogVk5vZGUsXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcbiAgKTogUG9pbnRUIHtcbiAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQmV6aWVyKG5lYXJOb2RlLCBjdHgsIHRoaXMudmlhKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyXG4gICk6IG51bWJlciB7XG4gICAgLy8geDMseTMgaXMgdGhlIHBvaW50XG4gICAgcmV0dXJuIHRoaXMuX2dldERpc3RhbmNlVG9CZXppZXJFZGdlKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHRoaXMudmlhKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJlemllckVkZ2VCYXNlIH0gZnJvbSBcIi4vdXRpbC9iZXppZXItZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi91dGlsL3R5cGVzXCI7XG5cbi8qKlxuICogQSBTdGF0aWMgQmV6aWVyIEVkZ2UuIEJlemllciBjdXJ2ZXMgYXJlIHVzZWQgdG8gbW9kZWwgc21vb3RoIGdyYWR1YWwgY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCZXppZXJFZGdlU3RhdGljIGV4dGVuZHMgQmV6aWVyRWRnZUJhc2U8UG9pbnQ+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICB8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAgICAgIHwgXCJiYWNrZ3JvdW5kU2l6ZVwiXG4gICAgICB8IFwic2hhZG93Q29sb3JcIlxuICAgICAgfCBcInNoYWRvd1NpemVcIlxuICAgICAgfCBcInNoYWRvd1hcIlxuICAgICAgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZTogUG9pbnRcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fYmV6aWVyQ3VydmUoY3R4LCB2YWx1ZXMsIHZpYU5vZGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFBvaW50IHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdmlhIG5vZGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFdlIGRvIG5vdCB1c2UgdGhlIHRvIGFuZCBmcm9tUG9pbnRzIGhlcmUgdG8gbWFrZSB0aGUgdmlhIG5vZGVzIHRoZSBzYW1lIGFzIGVkZ2VzIHdpdGhvdXQgYXJyb3dzLlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIHZpYSBub2RlLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXRWaWFDb29yZGluYXRlcygpOiBQb2ludCB7XG4gICAgLy8gQXNzdW1wdGlvbjogeC95IGNvb3JkaW5hdGVzIGluIGZyb20vdG8gYWx3YXlzIGRlZmluZWRcbiAgICBjb25zdCBmYWN0b3IgPSB0aGlzLm9wdGlvbnMuc21vb3RoLnJvdW5kbmVzcztcbiAgICBjb25zdCB0eXBlID0gdGhpcy5vcHRpb25zLnNtb290aC50eXBlO1xuICAgIGxldCBkeCA9IE1hdGguYWJzKHRoaXMuZnJvbS54IC0gdGhpcy50by54KTtcbiAgICBsZXQgZHkgPSBNYXRoLmFicyh0aGlzLmZyb20ueSAtIHRoaXMudG8ueSk7XG4gICAgaWYgKHR5cGUgPT09IFwiZGlzY3JldGVcIiB8fCB0eXBlID09PSBcImRpYWdvbmFsQ3Jvc3NcIikge1xuICAgICAgbGV0IHN0ZXBYO1xuICAgICAgbGV0IHN0ZXBZO1xuXG4gICAgICBpZiAoZHggPD0gZHkpIHtcbiAgICAgICAgc3RlcFggPSBzdGVwWSA9IGZhY3RvciAqIGR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RlcFggPSBzdGVwWSA9IGZhY3RvciAqIGR4O1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5mcm9tLnggPiB0aGlzLnRvLngpIHtcbiAgICAgICAgc3RlcFggPSAtc3RlcFg7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5mcm9tLnkgPj0gdGhpcy50by55KSB7XG4gICAgICAgIHN0ZXBZID0gLXN0ZXBZO1xuICAgICAgfVxuXG4gICAgICBsZXQgeFZpYSA9IHRoaXMuZnJvbS54ICsgc3RlcFg7XG4gICAgICBsZXQgeVZpYSA9IHRoaXMuZnJvbS55ICsgc3RlcFk7XG5cbiAgICAgIGlmICh0eXBlID09PSBcImRpc2NyZXRlXCIpIHtcbiAgICAgICAgaWYgKGR4IDw9IGR5KSB7XG4gICAgICAgICAgeFZpYSA9IGR4IDwgZmFjdG9yICogZHkgPyB0aGlzLmZyb20ueCA6IHhWaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeVZpYSA9IGR5IDwgZmFjdG9yICogZHggPyB0aGlzLmZyb20ueSA6IHlWaWE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgeDogeFZpYSwgeTogeVZpYSB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJzdHJhaWdodENyb3NzXCIpIHtcbiAgICAgIGxldCBzdGVwWCA9ICgxIC0gZmFjdG9yKSAqIGR4O1xuICAgICAgbGV0IHN0ZXBZID0gKDEgLSBmYWN0b3IpICogZHk7XG5cbiAgICAgIGlmIChkeCA8PSBkeSkge1xuICAgICAgICAvLyB1cCAtIGRvd25cbiAgICAgICAgc3RlcFggPSAwO1xuICAgICAgICBpZiAodGhpcy5mcm9tLnkgPCB0aGlzLnRvLnkpIHtcbiAgICAgICAgICBzdGVwWSA9IC1zdGVwWTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGVmdCAtIHJpZ2h0XG4gICAgICAgIGlmICh0aGlzLmZyb20ueCA8IHRoaXMudG8ueCkge1xuICAgICAgICAgIHN0ZXBYID0gLXN0ZXBYO1xuICAgICAgICB9XG4gICAgICAgIHN0ZXBZID0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogdGhpcy50by54ICsgc3RlcFgsXG4gICAgICAgIHk6IHRoaXMudG8ueSArIHN0ZXBZLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICBsZXQgc3RlcFggPSAoMSAtIGZhY3RvcikgKiBkeDtcbiAgICAgIGlmICh0aGlzLmZyb20ueCA8IHRoaXMudG8ueCkge1xuICAgICAgICBzdGVwWCA9IC1zdGVwWDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogdGhpcy50by54ICsgc3RlcFgsXG4gICAgICAgIHk6IHRoaXMuZnJvbS55LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwidmVydGljYWxcIikge1xuICAgICAgbGV0IHN0ZXBZID0gKDEgLSBmYWN0b3IpICogZHk7XG4gICAgICBpZiAodGhpcy5mcm9tLnkgPCB0aGlzLnRvLnkpIHtcbiAgICAgICAgc3RlcFkgPSAtc3RlcFk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHRoaXMuZnJvbS54LFxuICAgICAgICB5OiB0aGlzLnRvLnkgKyBzdGVwWSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcImN1cnZlZENXXCIpIHtcbiAgICAgIGR4ID0gdGhpcy50by54IC0gdGhpcy5mcm9tLng7XG4gICAgICBkeSA9IHRoaXMuZnJvbS55IC0gdGhpcy50by55O1xuICAgICAgY29uc3QgcmFkaXVzID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgICAgIGNvbnN0IHBpID0gTWF0aC5QSTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxBbmdsZSA9IE1hdGguYXRhbjIoZHksIGR4KTtcbiAgICAgIGNvbnN0IG15QW5nbGUgPSAob3JpZ2luYWxBbmdsZSArIChmYWN0b3IgKiAwLjUgKyAwLjUpICogcGkpICUgKDIgKiBwaSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHRoaXMuZnJvbS54ICsgKGZhY3RvciAqIDAuNSArIDAuNSkgKiByYWRpdXMgKiBNYXRoLnNpbihteUFuZ2xlKSxcbiAgICAgICAgeTogdGhpcy5mcm9tLnkgKyAoZmFjdG9yICogMC41ICsgMC41KSAqIHJhZGl1cyAqIE1hdGguY29zKG15QW5nbGUpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiY3VydmVkQ0NXXCIpIHtcbiAgICAgIGR4ID0gdGhpcy50by54IC0gdGhpcy5mcm9tLng7XG4gICAgICBkeSA9IHRoaXMuZnJvbS55IC0gdGhpcy50by55O1xuICAgICAgY29uc3QgcmFkaXVzID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgICAgIGNvbnN0IHBpID0gTWF0aC5QSTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxBbmdsZSA9IE1hdGguYXRhbjIoZHksIGR4KTtcbiAgICAgIGNvbnN0IG15QW5nbGUgPSAob3JpZ2luYWxBbmdsZSArICgtZmFjdG9yICogMC41ICsgMC41KSAqIHBpKSAlICgyICogcGkpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiB0aGlzLmZyb20ueCArIChmYWN0b3IgKiAwLjUgKyAwLjUpICogcmFkaXVzICogTWF0aC5zaW4obXlBbmdsZSksXG4gICAgICAgIHk6IHRoaXMuZnJvbS55ICsgKGZhY3RvciAqIDAuNSArIDAuNSkgKiByYWRpdXMgKiBNYXRoLmNvcyhteUFuZ2xlKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbnRpbnVvdXNcbiAgICAgIGxldCBzdGVwWDtcbiAgICAgIGxldCBzdGVwWTtcblxuICAgICAgaWYgKGR4IDw9IGR5KSB7XG4gICAgICAgIHN0ZXBYID0gc3RlcFkgPSBmYWN0b3IgKiBkeTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZXBYID0gc3RlcFkgPSBmYWN0b3IgKiBkeDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZnJvbS54ID4gdGhpcy50by54KSB7XG4gICAgICAgIHN0ZXBYID0gLXN0ZXBYO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZnJvbS55ID49IHRoaXMudG8ueSkge1xuICAgICAgICBzdGVwWSA9IC1zdGVwWTtcbiAgICAgIH1cblxuICAgICAgbGV0IHhWaWEgPSB0aGlzLmZyb20ueCArIHN0ZXBYO1xuICAgICAgbGV0IHlWaWEgPSB0aGlzLmZyb20ueSArIHN0ZXBZO1xuXG4gICAgICBpZiAoZHggPD0gZHkpIHtcbiAgICAgICAgaWYgKHRoaXMuZnJvbS54IDw9IHRoaXMudG8ueCkge1xuICAgICAgICAgIHhWaWEgPSB0aGlzLnRvLnggPCB4VmlhID8gdGhpcy50by54IDogeFZpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB4VmlhID0gdGhpcy50by54ID4geFZpYSA/IHRoaXMudG8ueCA6IHhWaWE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmZyb20ueSA+PSB0aGlzLnRvLnkpIHtcbiAgICAgICAgICB5VmlhID0gdGhpcy50by55ID4geVZpYSA/IHRoaXMudG8ueSA6IHlWaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeVZpYSA9IHRoaXMudG8ueSA8IHlWaWEgPyB0aGlzLnRvLnkgOiB5VmlhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHg6IHhWaWEsIHk6IHlWaWEgfTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9maW5kQm9yZGVyUG9zaXRpb24oXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIG9wdGlvbnM6IHsgdmlhPzogUG9pbnQgfSA9IHt9XG4gICk6IFBvaW50VCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkJlemllcihuZWFyTm9kZSwgY3R4LCBvcHRpb25zLnZpYSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9nZXREaXN0YW5jZVRvRWRnZShcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlcixcbiAgICB2aWFOb2RlID0gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKVxuICApIHtcbiAgICAvLyB4Myx5MyBpcyB0aGUgcG9pbnRcbiAgICByZXR1cm4gdGhpcy5fZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgdmlhTm9kZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldFBvaW50KFxuICAgIHBvc2l0aW9uOiBudW1iZXIsXG4gICAgdmlhTm9kZTogUG9pbnQgPSB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpXG4gICk6IFBvaW50IHtcbiAgICBjb25zdCB0ID0gcG9zaXRpb247XG4gICAgY29uc3QgeCA9XG4gICAgICBNYXRoLnBvdygxIC0gdCwgMikgKiB0aGlzLmZyb21Qb2ludC54ICtcbiAgICAgIDIgKiB0ICogKDEgLSB0KSAqIHZpYU5vZGUueCArXG4gICAgICBNYXRoLnBvdyh0LCAyKSAqIHRoaXMudG9Qb2ludC54O1xuICAgIGNvbnN0IHkgPVxuICAgICAgTWF0aC5wb3coMSAtIHQsIDIpICogdGhpcy5mcm9tUG9pbnQueSArXG4gICAgICAyICogdCAqICgxIC0gdCkgKiB2aWFOb2RlLnkgK1xuICAgICAgTWF0aC5wb3codCwgMikgKiB0aGlzLnRvUG9pbnQueTtcblxuICAgIHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJlemllckVkZ2VCYXNlIH0gZnJvbSBcIi4vYmV6aWVyLWVkZ2UtYmFzZVwiO1xuaW1wb3J0IHsgTGFiZWwsIEVkZ2VPcHRpb25zLCBQb2ludCwgVkJvZHkgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEEgQmFzZSBDbGFzcyBmb3IgYWxsIEN1YmljIEJlemllciBFZGdlcy4gQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbFxuICogc21vb3RoIGdyYWR1YWwgY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuXG4gKlxuICogQGF1Z21lbnRzIEJlemllckVkZ2VCYXNlXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDdWJpY0JlemllckVkZ2VCYXNlPFZpYT4gZXh0ZW5kcyBCZXppZXJFZGdlQmFzZTxWaWE+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBhIHBvaW50ICh4Myx5MykgYW5kIGEgbGluZSBzZWdtZW50IGZyb20gKHgxLHkxKSB0byAoeDIseTIpLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzg0OTIxMS9zaG9ydGVzdC1kaXN0YW5jYWUtYmV0d2Vlbi1hLXBvaW50LWFuZC1hLWxpbmUtc2VnbWVudFxuICAgKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CJUMzJUE5emllcl9jdXJ2ZVxuICAgKiBAcGFyYW0geDEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDIgLSBTZWNvbmQgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB4MyAtIFBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHZpYTEgLSBUaGUgZmlyc3QgcG9pbnQgdGhpcyBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKiBAcGFyYW0gdmlhMiAtIFRoZSBzZWNvbmQgcG9pbnQgdGhpcyBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbGluZSBzZWdtZW50IGFuZCB0aGUgcG9pbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9CZXppZXJFZGdlMihcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlcixcbiAgICB2aWExOiBQb2ludCxcbiAgICB2aWEyOiBQb2ludFxuICApOiBudW1iZXIge1xuICAgIC8vIHgzLHkzIGlzIHRoZSBwb2ludFxuICAgIGxldCBtaW5EaXN0YW5jZSA9IDFlOTtcbiAgICBsZXQgbGFzdFggPSB4MTtcbiAgICBsZXQgbGFzdFkgPSB5MTtcbiAgICBjb25zdCB2ZWMgPSBbMCwgMCwgMCwgMF07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxMDsgaSsrKSB7XG4gICAgICBjb25zdCB0ID0gMC4xICogaTtcbiAgICAgIHZlY1swXSA9IE1hdGgucG93KDEgLSB0LCAzKTtcbiAgICAgIHZlY1sxXSA9IDMgKiB0ICogTWF0aC5wb3coMSAtIHQsIDIpO1xuICAgICAgdmVjWzJdID0gMyAqIE1hdGgucG93KHQsIDIpICogKDEgLSB0KTtcbiAgICAgIHZlY1szXSA9IE1hdGgucG93KHQsIDMpO1xuICAgICAgY29uc3QgeCA9IHZlY1swXSAqIHgxICsgdmVjWzFdICogdmlhMS54ICsgdmVjWzJdICogdmlhMi54ICsgdmVjWzNdICogeDI7XG4gICAgICBjb25zdCB5ID0gdmVjWzBdICogeTEgKyB2ZWNbMV0gKiB2aWExLnkgKyB2ZWNbMl0gKiB2aWEyLnkgKyB2ZWNbM10gKiB5MjtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IHRoaXMuX2dldERpc3RhbmNlVG9MaW5lKGxhc3RYLCBsYXN0WSwgeCwgeSwgeDMsIHkzKTtcbiAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZSA8IG1pbkRpc3RhbmNlID8gZGlzdGFuY2UgOiBtaW5EaXN0YW5jZTtcbiAgICAgIH1cbiAgICAgIGxhc3RYID0geDtcbiAgICAgIGxhc3RZID0geTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWluRGlzdGFuY2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBDdWJpY0JlemllckVkZ2VCYXNlIH0gZnJvbSBcIi4vdXRpbC9jdWJpYy1iZXppZXItZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi91dGlsL3R5cGVzXCI7XG5cbi8qKlxuICogQSBDdWJpYyBCZXppZXIgRWRnZS4gQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbCBzbW9vdGggZ3JhZHVhbCBjdXJ2ZXMgaW4gcGF0aHMgYmV0d2VlbiBub2Rlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEN1YmljQmV6aWVyRWRnZSBleHRlbmRzIEN1YmljQmV6aWVyRWRnZUJhc2U8W1BvaW50LCBQb2ludF0+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICB8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAgICAgIHwgXCJiYWNrZ3JvdW5kU2l6ZVwiXG4gICAgICB8IFwic2hhZG93Q29sb3JcIlxuICAgICAgfCBcInNoYWRvd1NpemVcIlxuICAgICAgfCBcInNoYWRvd1hcIlxuICAgICAgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZXM6IFtQb2ludCwgUG9pbnRdXG4gICk6IHZvaWQge1xuICAgIC8vIGdldCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHN1cHBvcnQgcG9pbnRzLlxuICAgIGNvbnN0IHZpYTEgPSB2aWFOb2Rlc1swXTtcbiAgICBjb25zdCB2aWEyID0gdmlhTm9kZXNbMV07XG4gICAgdGhpcy5fYmV6aWVyQ3VydmUoY3R4LCB2YWx1ZXMsIHZpYTEsIHZpYTIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGFkZGl0aW9uYWwgcG9pbnRzIHRoZSBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50cyB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICovXG4gIHByb3RlY3RlZCBfZ2V0VmlhQ29vcmRpbmF0ZXMoKTogW1BvaW50LCBQb2ludF0ge1xuICAgIGNvbnN0IGR4ID0gdGhpcy5mcm9tLnggLSB0aGlzLnRvLng7XG4gICAgY29uc3QgZHkgPSB0aGlzLmZyb20ueSAtIHRoaXMudG8ueTtcblxuICAgIGxldCB4MTogbnVtYmVyO1xuICAgIGxldCB5MTogbnVtYmVyO1xuICAgIGxldCB4MjogbnVtYmVyO1xuICAgIGxldCB5MjogbnVtYmVyO1xuICAgIGNvbnN0IHJvdW5kbmVzcyA9IHRoaXMub3B0aW9ucy5zbW9vdGgucm91bmRuZXNzO1xuXG4gICAgLy8gaG9yaXpvbnRhbCBpZiB4ID4geSBvciBpZiBkaXJlY3Rpb24gaXMgZm9yY2VkIG9yIGlmIGRpcmVjdGlvbiBpcyBob3Jpem9udGFsXG4gICAgaWYgKFxuICAgICAgKE1hdGguYWJzKGR4KSA+IE1hdGguYWJzKGR5KSB8fFxuICAgICAgICB0aGlzLm9wdGlvbnMuc21vb3RoLmZvcmNlRGlyZWN0aW9uID09PSB0cnVlIHx8XG4gICAgICAgIHRoaXMub3B0aW9ucy5zbW9vdGguZm9yY2VEaXJlY3Rpb24gPT09IFwiaG9yaXpvbnRhbFwiKSAmJlxuICAgICAgdGhpcy5vcHRpb25zLnNtb290aC5mb3JjZURpcmVjdGlvbiAhPT0gXCJ2ZXJ0aWNhbFwiXG4gICAgKSB7XG4gICAgICB5MSA9IHRoaXMuZnJvbS55O1xuICAgICAgeTIgPSB0aGlzLnRvLnk7XG4gICAgICB4MSA9IHRoaXMuZnJvbS54IC0gcm91bmRuZXNzICogZHg7XG4gICAgICB4MiA9IHRoaXMudG8ueCArIHJvdW5kbmVzcyAqIGR4O1xuICAgIH0gZWxzZSB7XG4gICAgICB5MSA9IHRoaXMuZnJvbS55IC0gcm91bmRuZXNzICogZHk7XG4gICAgICB5MiA9IHRoaXMudG8ueSArIHJvdW5kbmVzcyAqIGR5O1xuICAgICAgeDEgPSB0aGlzLmZyb20ueDtcbiAgICAgIHgyID0gdGhpcy50by54O1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICB7IHg6IHgxLCB5OiB5MSB9LFxuICAgICAgeyB4OiB4MiwgeTogeTIgfSxcbiAgICBdO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFtQb2ludCwgUG9pbnRdIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2ZpbmRCb3JkZXJQb3NpdGlvbihcbiAgICBuZWFyTm9kZTogVk5vZGUsXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcbiAgKTogUG9pbnRUIHtcbiAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQmV6aWVyKG5lYXJOb2RlLCBjdHgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXIsXG4gICAgW3ZpYTEsIHZpYTJdOiBbUG9pbnQsIFBvaW50XSA9IHRoaXMuX2dldFZpYUNvb3JkaW5hdGVzKClcbiAgKTogbnVtYmVyIHtcbiAgICAvLyB4Myx5MyBpcyB0aGUgcG9pbnRcbiAgICByZXR1cm4gdGhpcy5fZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UyKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHZpYTEsIHZpYTIpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRQb2ludChcbiAgICBwb3NpdGlvbjogbnVtYmVyLFxuICAgIFt2aWExLCB2aWEyXTogW1BvaW50LCBQb2ludF0gPSB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpXG4gICk6IFBvaW50IHtcbiAgICBjb25zdCB0ID0gcG9zaXRpb247XG4gICAgY29uc3QgdmVjOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFtcbiAgICAgIE1hdGgucG93KDEgLSB0LCAzKSxcbiAgICAgIDMgKiB0ICogTWF0aC5wb3coMSAtIHQsIDIpLFxuICAgICAgMyAqIE1hdGgucG93KHQsIDIpICogKDEgLSB0KSxcbiAgICAgIE1hdGgucG93KHQsIDMpLFxuICAgIF07XG4gICAgY29uc3QgeCA9XG4gICAgICB2ZWNbMF0gKiB0aGlzLmZyb21Qb2ludC54ICtcbiAgICAgIHZlY1sxXSAqIHZpYTEueCArXG4gICAgICB2ZWNbMl0gKiB2aWEyLnggK1xuICAgICAgdmVjWzNdICogdGhpcy50b1BvaW50Lng7XG4gICAgY29uc3QgeSA9XG4gICAgICB2ZWNbMF0gKiB0aGlzLmZyb21Qb2ludC55ICtcbiAgICAgIHZlY1sxXSAqIHZpYTEueSArXG4gICAgICB2ZWNbMl0gKiB2aWEyLnkgK1xuICAgICAgdmVjWzNdICogdGhpcy50b1BvaW50Lnk7XG5cbiAgICByZXR1cm4geyB4OiB4LCB5OiB5IH07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFZGdlQmFzZSB9IGZyb20gXCIuL3V0aWwvZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi91dGlsL3R5cGVzXCI7XG5cbi8qKlxuICogQSBTdHJhaWdodCBFZGdlLlxuICovXG5leHBvcnQgY2xhc3MgU3RyYWlnaHRFZGdlIGV4dGVuZHMgRWRnZUJhc2Uge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBvZiBnaXZlbiBlZGdlLlxuICAgKiBAcGFyYW0gYm9keSAtIFRoZSBib2R5IG9mIHRoZSBuZXR3b3JrLlxuICAgKiBAcGFyYW0gbGFiZWxNb2R1bGUgLSBMYWJlbCBtb2R1bGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogRWRnZU9wdGlvbnMsIGJvZHk6IFZCb2R5LCBsYWJlbE1vZHVsZTogTGFiZWwpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9saW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwic2hhZG93Q29sb3JcIiB8IFwic2hhZG93U2l6ZVwiIHwgXCJzaGFkb3dYXCIgfCBcInNoYWRvd1lcIlxuICAgID5cbiAgKTogdm9pZCB7XG4gICAgLy8gZHJhdyBhIHN0cmFpZ2h0IGxpbmVcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyh0aGlzLmZyb21Qb2ludC54LCB0aGlzLmZyb21Qb2ludC55KTtcbiAgICBjdHgubGluZVRvKHRoaXMudG9Qb2ludC54LCB0aGlzLnRvUG9pbnQueSk7XG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICBjdHguc3Ryb2tlKCk7XG4gICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0VmlhTm9kZSgpOiB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldFBvaW50KHBvc2l0aW9uOiBudW1iZXIpOiBQb2ludCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6ICgxIC0gcG9zaXRpb24pICogdGhpcy5mcm9tUG9pbnQueCArIHBvc2l0aW9uICogdGhpcy50b1BvaW50LngsXG4gICAgICB5OiAoMSAtIHBvc2l0aW9uKSAqIHRoaXMuZnJvbVBvaW50LnkgKyBwb3NpdGlvbiAqIHRoaXMudG9Qb2ludC55LFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9maW5kQm9yZGVyUG9zaXRpb24oXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXG4gICk6IFBvaW50VCB7XG4gICAgbGV0IG5vZGUxID0gdGhpcy50bztcbiAgICBsZXQgbm9kZTIgPSB0aGlzLmZyb207XG4gICAgaWYgKG5lYXJOb2RlLmlkID09PSB0aGlzLmZyb20uaWQpIHtcbiAgICAgIG5vZGUxID0gdGhpcy5mcm9tO1xuICAgICAgbm9kZTIgPSB0aGlzLnRvO1xuICAgIH1cblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMihub2RlMS55IC0gbm9kZTIueSwgbm9kZTEueCAtIG5vZGUyLngpO1xuICAgIGNvbnN0IGR4ID0gbm9kZTEueCAtIG5vZGUyLng7XG4gICAgY29uc3QgZHkgPSBub2RlMS55IC0gbm9kZTIueTtcbiAgICBjb25zdCBlZGdlU2VnbWVudExlbmd0aCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgY29uc3QgdG9Cb3JkZXJEaXN0ID0gbmVhck5vZGUuZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKTtcbiAgICBjb25zdCB0b0JvcmRlclBvaW50ID1cbiAgICAgIChlZGdlU2VnbWVudExlbmd0aCAtIHRvQm9yZGVyRGlzdCkgLyBlZGdlU2VnbWVudExlbmd0aDtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiAoMSAtIHRvQm9yZGVyUG9pbnQpICogbm9kZTIueCArIHRvQm9yZGVyUG9pbnQgKiBub2RlMS54LFxuICAgICAgeTogKDEgLSB0b0JvcmRlclBvaW50KSAqIG5vZGUyLnkgKyB0b0JvcmRlclBvaW50ICogbm9kZTEueSxcbiAgICAgIHQ6IDAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyXG4gICk6IG51bWJlciB7XG4gICAgLy8geDMseTMgaXMgdGhlIHBvaW50XG4gICAgcmV0dXJuIHRoaXMuX2dldERpc3RhbmNlVG9MaW5lKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpO1xuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgYnJpZGdlT2JqZWN0LFxuICBkZWVwRXh0ZW5kLFxuICBpc1N0cmluZyxcbiAgbWVyZ2VPcHRpb25zLFxuICBzZWxlY3RpdmVEZWVwRXh0ZW5kLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcIi4vc2hhcmVkL0xhYmVsXCI7XG5pbXBvcnQge1xuICBjaG9vc2lmeSxcbiAgZ2V0U2VsZlJlZkNvb3JkaW5hdGVzLFxuICBpc1ZhbGlkTGFiZWwsXG4gIHBvaW50SW5SZWN0LFxufSBmcm9tIFwiLi9zaGFyZWQvQ29tcG9uZW50VXRpbFwiO1xuaW1wb3J0IHtcbiAgQmV6aWVyRWRnZUR5bmFtaWMsXG4gIEJlemllckVkZ2VTdGF0aWMsXG4gIEN1YmljQmV6aWVyRWRnZSxcbiAgU3RyYWlnaHRFZGdlLFxufSBmcm9tIFwiLi9lZGdlc1wiO1xuXG4vKipcbiAqIEFuIGVkZ2UgY29ubmVjdHMgdHdvIG5vZGVzIGFuZCBoYXMgYSBzcGVjaWZpYyBkaXJlY3Rpb24uXG4gKi9cbmNsYXNzIEVkZ2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgICAgICAgIHZhbHVlcyBzcGVjaWZpYyB0byB0aGlzIGVkZ2UsIG11c3QgY29udGFpbiBhdCBsZWFzdCAnZnJvbScgYW5kICd0bydcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHkgICAgICAgICAgIHNoYXJlZCBzdGF0ZSBmcm9tIE5ldHdvcmsgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtOZXR3b3JrLkltYWdlc30gaW1hZ2VsaXN0ICBBIGxpc3Qgd2l0aCBpbWFnZXMuIE9ubHkgbmVlZGVkIHdoZW4gdGhlIGVkZ2UgaGFzIGltYWdlIGFycm93cy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbE9wdGlvbnMgIG9wdGlvbnMgZnJvbSB0aGUgRWRnZXNIYW5kbGVyIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0T3B0aW9ucyBkZWZhdWx0IG9wdGlvbnMgZnJvbSB0aGUgRWRnZUhhbmRsZXIgaW5zdGFuY2UuIFZhbHVlIGFuZCByZWZlcmVuY2UgYXJlIGNvbnN0YW50XG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBpbWFnZWxpc3QsIGdsb2JhbE9wdGlvbnMsIGRlZmF1bHRPcHRpb25zKSB7XG4gICAgaWYgKGJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYm9keSBwcm92aWRlZFwiKTtcbiAgICB9XG5cbiAgICAvLyBTaW5jZSBnbG9iYWxPcHRpb25zIGlzIGNvbnN0YW50IGluIHZhbHVlcyBhcyB3ZWxsIGFzIHJlZmVyZW5jZSxcbiAgICAvLyBGb2xsb3dpbmcgbmVlZHMgdG8gYmUgZG9uZSBvbmx5IG9uY2UuXG5cbiAgICB0aGlzLm9wdGlvbnMgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucyk7XG4gICAgdGhpcy5nbG9iYWxPcHRpb25zID0gZ2xvYmFsT3B0aW9ucztcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmltYWdlbGlzdCA9IGltYWdlbGlzdDtcblxuICAgIC8vIGluaXRpYWxpemUgdmFyaWFibGVzXG4gICAgdGhpcy5pZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZyb21JZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRvSWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuaG92ZXIgPSBmYWxzZTtcbiAgICB0aGlzLmxhYmVsRGlydHkgPSB0cnVlO1xuXG4gICAgdGhpcy5iYXNlV2lkdGggPSB0aGlzLm9wdGlvbnMud2lkdGg7XG4gICAgdGhpcy5iYXNlRm9udFNpemUgPSB0aGlzLm9wdGlvbnMuZm9udC5zaXplO1xuXG4gICAgdGhpcy5mcm9tID0gdW5kZWZpbmVkOyAvLyBhIG5vZGVcbiAgICB0aGlzLnRvID0gdW5kZWZpbmVkOyAvLyBhIG5vZGVcblxuICAgIHRoaXMuZWRnZVR5cGUgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5sYWJlbE1vZHVsZSA9IG5ldyBMYWJlbChcbiAgICAgIHRoaXMuYm9keSxcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIHRydWUgLyogSXQncyBhbiBlZGdlIGxhYmVsICovXG4gICAgKTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG9yIG92ZXJ3cml0ZSBvcHRpb25zIGZvciB0aGUgZWRnZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAgYW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfGJvb2xlYW59IHVuZGVmaW5lZCBpZiBubyBvcHRpb25zLCB0cnVlIGlmIGxheW91dCBhZmZlY3RpbmcgZGF0YSBjaGFuZ2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGb2xsb3dpbmcgb3B0aW9ucyBpZiBjaGFuZ2VkIGFmZmVjdCB0aGUgbGF5b3V0LlxuICAgIGxldCBhZmZlY3RzTGF5b3V0ID1cbiAgICAgICh0eXBlb2Ygb3B0aW9ucy5waHlzaWNzICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHRoaXMub3B0aW9ucy5waHlzaWNzICE9PSBvcHRpb25zLnBoeXNpY3MpIHx8XG4gICAgICAodHlwZW9mIG9wdGlvbnMuaGlkZGVuICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICh0aGlzLm9wdGlvbnMuaGlkZGVuIHx8IGZhbHNlKSAhPT0gKG9wdGlvbnMuaGlkZGVuIHx8IGZhbHNlKSkgfHxcbiAgICAgICh0eXBlb2Ygb3B0aW9ucy5mcm9tICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHRoaXMub3B0aW9ucy5mcm9tICE9PSBvcHRpb25zLmZyb20pIHx8XG4gICAgICAodHlwZW9mIG9wdGlvbnMudG8gIT09IFwidW5kZWZpbmVkXCIgJiYgdGhpcy5vcHRpb25zLnRvICE9PSBvcHRpb25zLnRvKTtcblxuICAgIEVkZ2UucGFyc2VPcHRpb25zKHRoaXMub3B0aW9ucywgb3B0aW9ucywgdHJ1ZSwgdGhpcy5nbG9iYWxPcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5mcm9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZnJvbUlkID0gb3B0aW9ucy5mcm9tO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50byAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRvSWQgPSBvcHRpb25zLnRvO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50aXRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRpdGxlID0gb3B0aW9ucy50aXRsZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy52YWx1ZSA9IHBhcnNlRmxvYXQob3B0aW9ucy52YWx1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGlsZSA9IFtvcHRpb25zLCB0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnNdO1xuICAgIHRoaXMuY2hvb3NlciA9IGNob29zaWZ5KFwiZWRnZVwiLCBwaWxlKTtcblxuICAgIC8vIHVwZGF0ZSBsYWJlbCBNb2R1bGVcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKG9wdGlvbnMpO1xuXG4gICAgLy8gVXBkYXRlIGVkZ2UgdHlwZSwgdGhpcyBpZiBjaGFuZ2VkIGFmZmVjdHMgdGhlIGxheW91dC5cbiAgICBhZmZlY3RzTGF5b3V0ID0gdGhpcy51cGRhdGVFZGdlVHlwZSgpIHx8IGFmZmVjdHNMYXlvdXQ7XG5cbiAgICAvLyBpZiBhbnl0aGluZyBoYXMgYmVlbiB1cGRhdGVzLCByZXNldCB0aGUgc2VsZWN0aW9uIHdpZHRoIGFuZCB0aGUgaG92ZXIgd2lkdGhcbiAgICB0aGlzLl9zZXRJbnRlcmFjdGlvbldpZHRocygpO1xuXG4gICAgLy8gQSBub2RlIGlzIGNvbm5lY3RlZCB3aGVuIGl0IGhhcyBhIGZyb20gYW5kIHRvIG5vZGUgdGhhdCBib3RoIGV4aXN0IGluIHRoZSBuZXR3b3JrLmJvZHkubm9kZXMuXG4gICAgdGhpcy5jb25uZWN0KCk7XG5cbiAgICByZXR1cm4gYWZmZWN0c0xheW91dDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50T3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3T3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd0RlbGV0aW9uPWZhbHNlXVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2dsb2JhbE9wdGlvbnM9e31dXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHlGcm9tR2xvYmFscz1mYWxzZV1cbiAgICovXG4gIHN0YXRpYyBwYXJzZU9wdGlvbnMoXG4gICAgcGFyZW50T3B0aW9ucyxcbiAgICBuZXdPcHRpb25zLFxuICAgIGFsbG93RGVsZXRpb24gPSBmYWxzZSxcbiAgICBnbG9iYWxPcHRpb25zID0ge30sXG4gICAgY29weUZyb21HbG9iYWxzID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgZmllbGRzID0gW1xuICAgICAgXCJlbmRQb2ludE9mZnNldFwiLFxuICAgICAgXCJhcnJvd1N0cmlrZXRocm91Z2hcIixcbiAgICAgIFwiaWRcIixcbiAgICAgIFwiZnJvbVwiLFxuICAgICAgXCJoaWRkZW5cIixcbiAgICAgIFwiaG92ZXJXaWR0aFwiLFxuICAgICAgXCJsYWJlbEhpZ2hsaWdodEJvbGRcIixcbiAgICAgIFwibGVuZ3RoXCIsXG4gICAgICBcImxpbmVcIixcbiAgICAgIFwib3BhY2l0eVwiLFxuICAgICAgXCJwaHlzaWNzXCIsXG4gICAgICBcInNjYWxpbmdcIixcbiAgICAgIFwic2VsZWN0aW9uV2lkdGhcIixcbiAgICAgIFwic2VsZlJlZmVyZW5jZVNpemVcIixcbiAgICAgIFwic2VsZlJlZmVyZW5jZVwiLFxuICAgICAgXCJ0b1wiLFxuICAgICAgXCJ0aXRsZVwiLFxuICAgICAgXCJ2YWx1ZVwiLFxuICAgICAgXCJ3aWR0aFwiLFxuICAgICAgXCJmb250XCIsXG4gICAgICBcImNob3NlblwiLFxuICAgICAgXCJ3aWR0aENvbnN0cmFpbnRcIixcbiAgICBdO1xuXG4gICAgLy8gb25seSBkZWVwIGV4dGVuZCB0aGUgaXRlbXMgaW4gdGhlIGZpZWxkIGFycmF5LiBUaGVzZSBkbyBub3QgaGF2ZSBzaG9ydGhhbmQuXG4gICAgc2VsZWN0aXZlRGVlcEV4dGVuZChmaWVsZHMsIHBhcmVudE9wdGlvbnMsIG5ld09wdGlvbnMsIGFsbG93RGVsZXRpb24pO1xuXG4gICAgLy8gT25seSB1c2UgZW5kUG9pbnRPZmZzZXQgdmFsdWVzIChmcm9tIGFuZCB0bykgaWYgaXQncyB2YWxpZCB2YWx1ZXNcbiAgICBpZiAoXG4gICAgICBuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbSAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbSkpIHtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tID0gbmV3T3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tID1cbiAgICAgICAgICBnbG9iYWxPcHRpb25zLmVuZFBvaW50T2Zmc2V0LmZyb20gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBnbG9iYWxPcHRpb25zLmVuZFBvaW50T2Zmc2V0LmZyb21cbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc29sZS5lcnJvcihcImVuZFBvaW50T2Zmc2V0LmZyb20gaXMgbm90IGEgdmFsaWQgbnVtYmVyXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgbmV3T3B0aW9ucy5lbmRQb2ludE9mZnNldC50byAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG8pKSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG8gPSBuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0LnRvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5lbmRQb2ludE9mZnNldC50byA9XG4gICAgICAgICAgZ2xvYmFsT3B0aW9ucy5lbmRQb2ludE9mZnNldC50byAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGdsb2JhbE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG9cbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc29sZS5lcnJvcihcImVuZFBvaW50T2Zmc2V0LnRvIGlzIG5vdCBhIHZhbGlkIG51bWJlclwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPbmx5IGNvcHkgbGFiZWwgaWYgaXQncyBhIGxlZ2FsIHZhbHVlLlxuICAgIGlmIChpc1ZhbGlkTGFiZWwobmV3T3B0aW9ucy5sYWJlbCkpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMubGFiZWwgPSBuZXdPcHRpb25zLmxhYmVsO1xuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRMYWJlbChwYXJlbnRPcHRpb25zLmxhYmVsKSkge1xuICAgICAgcGFyZW50T3B0aW9ucy5sYWJlbCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBtZXJnZU9wdGlvbnMocGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgXCJzbW9vdGhcIiwgZ2xvYmFsT3B0aW9ucyk7XG4gICAgbWVyZ2VPcHRpb25zKHBhcmVudE9wdGlvbnMsIG5ld09wdGlvbnMsIFwic2hhZG93XCIsIGdsb2JhbE9wdGlvbnMpO1xuICAgIG1lcmdlT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBcImJhY2tncm91bmRcIiwgZ2xvYmFsT3B0aW9ucyk7XG5cbiAgICBpZiAobmV3T3B0aW9ucy5kYXNoZXMgIT09IHVuZGVmaW5lZCAmJiBuZXdPcHRpb25zLmRhc2hlcyAhPT0gbnVsbCkge1xuICAgICAgcGFyZW50T3B0aW9ucy5kYXNoZXMgPSBuZXdPcHRpb25zLmRhc2hlcztcbiAgICB9IGVsc2UgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUgJiYgbmV3T3B0aW9ucy5kYXNoZXMgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuZGFzaGVzID0gT2JqZWN0LmNyZWF0ZShnbG9iYWxPcHRpb25zLmRhc2hlcyk7IC8vIHRoaXMgc2V0cyB0aGUgcG9pbnRlciBvZiB0aGUgb3B0aW9uIGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb24uXG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBzY2FsaW5nIG5ld09wdGlvbnNcbiAgICBpZiAobmV3T3B0aW9ucy5zY2FsaW5nICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5zY2FsaW5nICE9PSBudWxsKSB7XG4gICAgICBpZiAobmV3T3B0aW9ucy5zY2FsaW5nLm1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuc2NhbGluZy5taW4gPSBuZXdPcHRpb25zLnNjYWxpbmcubWluO1xuICAgICAgfVxuICAgICAgaWYgKG5ld09wdGlvbnMuc2NhbGluZy5tYXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYXJlbnRPcHRpb25zLnNjYWxpbmcubWF4ID0gbmV3T3B0aW9ucy5zY2FsaW5nLm1heDtcbiAgICAgIH1cbiAgICAgIG1lcmdlT3B0aW9ucyhcbiAgICAgICAgcGFyZW50T3B0aW9ucy5zY2FsaW5nLFxuICAgICAgICBuZXdPcHRpb25zLnNjYWxpbmcsXG4gICAgICAgIFwibGFiZWxcIixcbiAgICAgICAgZ2xvYmFsT3B0aW9ucy5zY2FsaW5nXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoYWxsb3dEZWxldGlvbiA9PT0gdHJ1ZSAmJiBuZXdPcHRpb25zLnNjYWxpbmcgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuc2NhbGluZyA9IE9iamVjdC5jcmVhdGUoZ2xvYmFsT3B0aW9ucy5zY2FsaW5nKTsgLy8gdGhpcyBzZXRzIHRoZSBwb2ludGVyIG9mIHRoZSBvcHRpb24gYmFjayB0byB0aGUgZ2xvYmFsIG9wdGlvbi5cbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgbXVsdGlwbGUgaW5wdXQgY2FzZXMgZm9yIGFycm93c1xuICAgIGlmIChuZXdPcHRpb25zLmFycm93cyAhPT0gdW5kZWZpbmVkICYmIG5ld09wdGlvbnMuYXJyb3dzICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG5ld09wdGlvbnMuYXJyb3dzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IGFycm93cyA9IG5ld09wdGlvbnMuYXJyb3dzLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuYXJyb3dzLnRvLmVuYWJsZWQgPSBhcnJvd3MuaW5kZXhPZihcInRvXCIpICE9IC0xO1xuICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cy5taWRkbGUuZW5hYmxlZCA9IGFycm93cy5pbmRleE9mKFwibWlkZGxlXCIpICE9IC0xO1xuICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cy5mcm9tLmVuYWJsZWQgPSBhcnJvd3MuaW5kZXhPZihcImZyb21cIikgIT0gLTE7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXdPcHRpb25zLmFycm93cyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBtZXJnZU9wdGlvbnMoXG4gICAgICAgICAgcGFyZW50T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgbmV3T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgXCJ0b1wiLFxuICAgICAgICAgIGdsb2JhbE9wdGlvbnMuYXJyb3dzXG4gICAgICAgICk7XG4gICAgICAgIG1lcmdlT3B0aW9ucyhcbiAgICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBuZXdPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBcIm1pZGRsZVwiLFxuICAgICAgICAgIGdsb2JhbE9wdGlvbnMuYXJyb3dzXG4gICAgICAgICk7XG4gICAgICAgIG1lcmdlT3B0aW9ucyhcbiAgICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBuZXdPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBcImZyb21cIixcbiAgICAgICAgICBnbG9iYWxPcHRpb25zLmFycm93c1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGFycm93IG5ld09wdGlvbnMgY2FuIG9ubHkgYmUgYW4gb2JqZWN0IG9yIGEgc3RyaW5nLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbi4gWW91IHVzZWQ6XCIgK1xuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobmV3T3B0aW9ucy5hcnJvd3MpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuYXJyb3dzID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmFycm93cyA9IE9iamVjdC5jcmVhdGUoZ2xvYmFsT3B0aW9ucy5hcnJvd3MpOyAvLyB0aGlzIHNldHMgdGhlIHBvaW50ZXIgb2YgdGhlIG9wdGlvbiBiYWNrIHRvIHRoZSBnbG9iYWwgb3B0aW9uLlxuICAgIH1cblxuICAgIC8vIGhhbmRsZSBtdWx0aXBsZSBpbnB1dCBjYXNlcyBmb3IgY29sb3JcbiAgICBpZiAobmV3T3B0aW9ucy5jb2xvciAhPT0gdW5kZWZpbmVkICYmIG5ld09wdGlvbnMuY29sb3IgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZyb21Db2xvciA9IGlzU3RyaW5nKG5ld09wdGlvbnMuY29sb3IpXG4gICAgICAgID8ge1xuICAgICAgICAgICAgY29sb3I6IG5ld09wdGlvbnMuY29sb3IsXG4gICAgICAgICAgICBoaWdobGlnaHQ6IG5ld09wdGlvbnMuY29sb3IsXG4gICAgICAgICAgICBob3ZlcjogbmV3T3B0aW9ucy5jb2xvcixcbiAgICAgICAgICAgIGluaGVyaXQ6IGZhbHNlLFxuICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICB9XG4gICAgICAgIDogbmV3T3B0aW9ucy5jb2xvcjtcbiAgICAgIGNvbnN0IHRvQ29sb3IgPSBwYXJlbnRPcHRpb25zLmNvbG9yO1xuXG4gICAgICAvLyBJZiBwYXNzZWQsIGZpbGwgaW4gdmFsdWVzIGZyb20gZGVmYXVsdCBvcHRpb25zIC0gcmVxdWlyZWQgaW4gdGhlIGNhc2Ugb2Ygbm8gcHJvdG90eXBlIGJyaWRnaW5nXG4gICAgICBpZiAoY29weUZyb21HbG9iYWxzKSB7XG4gICAgICAgIGRlZXBFeHRlbmQodG9Db2xvciwgZ2xvYmFsT3B0aW9ucy5jb2xvciwgZmFsc2UsIGFsbG93RGVsZXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2xlYXIgbG9jYWwgcHJvcGVydGllcyAtIG5lZWQgdG8gZG8gaXQgbGlrZSB0aGlzIGluIG9yZGVyIHRvIHJldGFpbiBwcm90b3R5cGUgYnJpZGdlc1xuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gdG9Db2xvcikge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodG9Db2xvciwgaSkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0b0NvbG9yW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNTdHJpbmcodG9Db2xvcikpIHtcbiAgICAgICAgdG9Db2xvci5jb2xvciA9IHRvQ29sb3I7XG4gICAgICAgIHRvQ29sb3IuaGlnaGxpZ2h0ID0gdG9Db2xvcjtcbiAgICAgICAgdG9Db2xvci5ob3ZlciA9IHRvQ29sb3I7XG4gICAgICAgIHRvQ29sb3IuaW5oZXJpdCA9IGZhbHNlO1xuICAgICAgICBpZiAoZnJvbUNvbG9yLm9wYWNpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3Iub3BhY2l0eSA9IDEuMDsgLy8gc2V0IGRlZmF1bHRcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNvbG9yc0RlZmluZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGZyb21Db2xvci5jb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdG9Db2xvci5jb2xvciA9IGZyb21Db2xvci5jb2xvcjtcbiAgICAgICAgICBjb2xvcnNEZWZpbmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZnJvbUNvbG9yLmhpZ2hsaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdG9Db2xvci5oaWdobGlnaHQgPSBmcm9tQ29sb3IuaGlnaGxpZ2h0O1xuICAgICAgICAgIGNvbG9yc0RlZmluZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tQ29sb3IuaG92ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3IuaG92ZXIgPSBmcm9tQ29sb3IuaG92ZXI7XG4gICAgICAgICAgY29sb3JzRGVmaW5lZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZyb21Db2xvci5pbmhlcml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0b0NvbG9yLmluaGVyaXQgPSBmcm9tQ29sb3IuaW5oZXJpdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZnJvbUNvbG9yLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3Iub3BhY2l0eSA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIGZyb21Db2xvci5vcGFjaXR5KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sb3JzRGVmaW5lZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRvQ29sb3IuaW5oZXJpdCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0b0NvbG9yLmluaGVyaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdG9Db2xvci5pbmhlcml0ID0gXCJmcm9tXCI7IC8vIFNldCBkZWZhdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuY29sb3IgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuY29sb3IgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5jb2xvcik7IC8vIHNldCB0aGUgb2JqZWN0IGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb25zXG4gICAgfVxuXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUgJiYgbmV3T3B0aW9ucy5mb250ID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmZvbnQgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5mb250KTsgLy8gc2V0IHRoZSBvYmplY3QgYmFjayB0byB0aGUgZ2xvYmFsIG9wdGlvbnNcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld09wdGlvbnMsIFwic2VsZlJlZmVyZW5jZVNpemVcIikpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJUaGUgc2VsZlJlZmVyZW5jZVNpemUgcHJvcGVydHkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBzZWxmUmVmZXJlbmNlIHByb3BlcnR5IGluc3RlYWQuIFRoZSBzZWxmUmVmZXJlbmNlIGNhbiBiZSBzZXQgbGlrZSB0aGlzZSBzZWxmUmVmZXJlbmNlOntzaXplOjMwLCBhbmdsZTpNYXRoLlBJIC8gNH1cIlxuICAgICAgKTtcbiAgICAgIHBhcmVudE9wdGlvbnMuc2VsZlJlZmVyZW5jZS5zaXplID0gbmV3T3B0aW9ucy5zZWxmUmVmZXJlbmNlU2l6ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge0Fycm93T3B0aW9uc31cbiAgICovXG4gIGdldEZvcm1hdHRpbmdWYWx1ZXMoKSB7XG4gICAgY29uc3QgdG9BcnJvdyA9XG4gICAgICB0aGlzLm9wdGlvbnMuYXJyb3dzLnRvID09PSB0cnVlIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuYXJyb3dzLnRvLmVuYWJsZWQgPT09IHRydWU7XG4gICAgY29uc3QgZnJvbUFycm93ID1cbiAgICAgIHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbSA9PT0gdHJ1ZSB8fFxuICAgICAgdGhpcy5vcHRpb25zLmFycm93cy5mcm9tLmVuYWJsZWQgPT09IHRydWU7XG4gICAgY29uc3QgbWlkZGxlQXJyb3cgPVxuICAgICAgdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUgPT09IHRydWUgfHxcbiAgICAgIHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLmVuYWJsZWQgPT09IHRydWU7XG4gICAgY29uc3QgaW5oZXJpdHNDb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvci5pbmhlcml0O1xuICAgIGNvbnN0IHZhbHVlcyA9IHtcbiAgICAgIHRvQXJyb3c6IHRvQXJyb3csXG4gICAgICB0b0Fycm93U2NhbGU6IHRoaXMub3B0aW9ucy5hcnJvd3MudG8uc2NhbGVGYWN0b3IsXG4gICAgICB0b0Fycm93VHlwZTogdGhpcy5vcHRpb25zLmFycm93cy50by50eXBlLFxuICAgICAgdG9BcnJvd1NyYzogdGhpcy5vcHRpb25zLmFycm93cy50by5zcmMsXG4gICAgICB0b0Fycm93SW1hZ2VXaWR0aDogdGhpcy5vcHRpb25zLmFycm93cy50by5pbWFnZVdpZHRoLFxuICAgICAgdG9BcnJvd0ltYWdlSGVpZ2h0OiB0aGlzLm9wdGlvbnMuYXJyb3dzLnRvLmltYWdlSGVpZ2h0LFxuICAgICAgbWlkZGxlQXJyb3c6IG1pZGRsZUFycm93LFxuICAgICAgbWlkZGxlQXJyb3dTY2FsZTogdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUuc2NhbGVGYWN0b3IsXG4gICAgICBtaWRkbGVBcnJvd1R5cGU6IHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLnR5cGUsXG4gICAgICBtaWRkbGVBcnJvd1NyYzogdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUuc3JjLFxuICAgICAgbWlkZGxlQXJyb3dJbWFnZVdpZHRoOiB0aGlzLm9wdGlvbnMuYXJyb3dzLm1pZGRsZS5pbWFnZVdpZHRoLFxuICAgICAgbWlkZGxlQXJyb3dJbWFnZUhlaWdodDogdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUuaW1hZ2VIZWlnaHQsXG4gICAgICBmcm9tQXJyb3c6IGZyb21BcnJvdyxcbiAgICAgIGZyb21BcnJvd1NjYWxlOiB0aGlzLm9wdGlvbnMuYXJyb3dzLmZyb20uc2NhbGVGYWN0b3IsXG4gICAgICBmcm9tQXJyb3dUeXBlOiB0aGlzLm9wdGlvbnMuYXJyb3dzLmZyb20udHlwZSxcbiAgICAgIGZyb21BcnJvd1NyYzogdGhpcy5vcHRpb25zLmFycm93cy5mcm9tLnNyYyxcbiAgICAgIGZyb21BcnJvd0ltYWdlV2lkdGg6IHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbS5pbWFnZVdpZHRoLFxuICAgICAgZnJvbUFycm93SW1hZ2VIZWlnaHQ6IHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbS5pbWFnZUhlaWdodCxcbiAgICAgIGFycm93U3RyaWtldGhyb3VnaDogdGhpcy5vcHRpb25zLmFycm93U3RyaWtldGhyb3VnaCxcbiAgICAgIGNvbG9yOiBpbmhlcml0c0NvbG9yID8gdW5kZWZpbmVkIDogdGhpcy5vcHRpb25zLmNvbG9yLmNvbG9yLFxuICAgICAgaW5oZXJpdHNDb2xvcjogaW5oZXJpdHNDb2xvcixcbiAgICAgIG9wYWNpdHk6IHRoaXMub3B0aW9ucy5jb2xvci5vcGFjaXR5LFxuICAgICAgaGlkZGVuOiB0aGlzLm9wdGlvbnMuaGlkZGVuLFxuICAgICAgbGVuZ3RoOiB0aGlzLm9wdGlvbnMubGVuZ3RoLFxuICAgICAgc2hhZG93OiB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQsXG4gICAgICBzaGFkb3dDb2xvcjogdGhpcy5vcHRpb25zLnNoYWRvdy5jb2xvcixcbiAgICAgIHNoYWRvd1NpemU6IHRoaXMub3B0aW9ucy5zaGFkb3cuc2l6ZSxcbiAgICAgIHNoYWRvd1g6IHRoaXMub3B0aW9ucy5zaGFkb3cueCxcbiAgICAgIHNoYWRvd1k6IHRoaXMub3B0aW9ucy5zaGFkb3cueSxcbiAgICAgIGRhc2hlczogdGhpcy5vcHRpb25zLmRhc2hlcyxcbiAgICAgIHdpZHRoOiB0aGlzLm9wdGlvbnMud2lkdGgsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZC5lbmFibGVkLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZC5jb2xvcixcbiAgICAgIGJhY2tncm91bmRTaXplOiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZC5zaXplLFxuICAgICAgYmFja2dyb3VuZERhc2hlczogdGhpcy5vcHRpb25zLmJhY2tncm91bmQuZGFzaGVzLFxuICAgIH07XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQgfHwgdGhpcy5ob3Zlcikge1xuICAgICAgaWYgKHRoaXMuY2hvb3NlciA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkV2lkdGggPSB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uV2lkdGg7XG4gICAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RlZFdpZHRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhbHVlcy53aWR0aCA9IHNlbGVjdGVkV2lkdGgodmFsdWVzLndpZHRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxlY3RlZFdpZHRoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB2YWx1ZXMud2lkdGggKz0gc2VsZWN0ZWRXaWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWVzLndpZHRoID0gTWF0aC5tYXgodmFsdWVzLndpZHRoLCAwLjMgLyB0aGlzLmJvZHkudmlldy5zY2FsZSk7XG4gICAgICAgICAgdmFsdWVzLmNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodDtcbiAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaG92ZXIpIHtcbiAgICAgICAgICBjb25zdCBob3ZlcldpZHRoID0gdGhpcy5vcHRpb25zLmhvdmVyV2lkdGg7XG4gICAgICAgICAgaWYgKHR5cGVvZiBob3ZlcldpZHRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhbHVlcy53aWR0aCA9IGhvdmVyV2lkdGgodmFsdWVzLndpZHRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBob3ZlcldpZHRoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB2YWx1ZXMud2lkdGggKz0gaG92ZXJXaWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWVzLndpZHRoID0gTWF0aC5tYXgodmFsdWVzLndpZHRoLCAwLjMgLyB0aGlzLmJvZHkudmlldy5zY2FsZSk7XG4gICAgICAgICAgdmFsdWVzLmNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyO1xuICAgICAgICAgIHZhbHVlcy5zaGFkb3cgPSB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuY2hvb3NlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMuY2hvb3Nlcih2YWx1ZXMsIHRoaXMub3B0aW9ucy5pZCwgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3Zlcik7XG4gICAgICAgIGlmICh2YWx1ZXMuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhbHVlcy5pbmhlcml0c0NvbG9yID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlcy5zaGFkb3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsdWVzLnNoYWRvd0NvbG9yICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LmNvbG9yIHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93U2l6ZSAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy5zaXplIHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93WCAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy54IHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93WSAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy55XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVzLnNoYWRvdyA9IHRoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZDtcbiAgICAgIHZhbHVlcy53aWR0aCA9IE1hdGgubWF4KHZhbHVlcy53aWR0aCwgMC4zIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgb3B0aW9ucyBpbiB0aGUgbGFiZWwgbW9kdWxlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICB1cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKSB7XG4gICAgY29uc3QgcGlsZSA9IFtcbiAgICAgIG9wdGlvbnMsXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0aGlzLmdsb2JhbE9wdGlvbnMsIC8vIEN1cnJlbnRseSBzZXQgZ2xvYmFsIGVkZ2Ugb3B0aW9uc1xuICAgICAgdGhpcy5kZWZhdWx0T3B0aW9ucyxcbiAgICBdO1xuXG4gICAgdGhpcy5sYWJlbE1vZHVsZS51cGRhdGUodGhpcy5vcHRpb25zLCBwaWxlKTtcblxuICAgIGlmICh0aGlzLmxhYmVsTW9kdWxlLmJhc2VTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYmFzZUZvbnRTaXplID0gdGhpcy5sYWJlbE1vZHVsZS5iYXNlU2l6ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdXBkYXRlIHRoZSBlZGdlIHR5cGUsIHNldCB0aGUgb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHVwZGF0ZUVkZ2VUeXBlKCkge1xuICAgIGNvbnN0IHNtb290aCA9IHRoaXMub3B0aW9ucy5zbW9vdGg7XG4gICAgbGV0IGRhdGFDaGFuZ2VkID0gZmFsc2U7XG4gICAgbGV0IGNoYW5nZUluVHlwZSA9IHRydWU7XG4gICAgaWYgKHRoaXMuZWRnZVR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKFxuICAgICAgICAodGhpcy5lZGdlVHlwZSBpbnN0YW5jZW9mIEJlemllckVkZ2VEeW5hbWljICYmXG4gICAgICAgICAgc21vb3RoLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgICAgICBzbW9vdGgudHlwZSA9PT0gXCJkeW5hbWljXCIpIHx8XG4gICAgICAgICh0aGlzLmVkZ2VUeXBlIGluc3RhbmNlb2YgQ3ViaWNCZXppZXJFZGdlICYmXG4gICAgICAgICAgc21vb3RoLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgICAgICBzbW9vdGgudHlwZSA9PT0gXCJjdWJpY0JlemllclwiKSB8fFxuICAgICAgICAodGhpcy5lZGdlVHlwZSBpbnN0YW5jZW9mIEJlemllckVkZ2VTdGF0aWMgJiZcbiAgICAgICAgICBzbW9vdGguZW5hYmxlZCA9PT0gdHJ1ZSAmJlxuICAgICAgICAgIHNtb290aC50eXBlICE9PSBcImR5bmFtaWNcIiAmJlxuICAgICAgICAgIHNtb290aC50eXBlICE9PSBcImN1YmljQmV6aWVyXCIpIHx8XG4gICAgICAgICh0aGlzLmVkZ2VUeXBlIGluc3RhbmNlb2YgU3RyYWlnaHRFZGdlICYmIHNtb290aC50eXBlLmVuYWJsZWQgPT09IGZhbHNlKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZUluVHlwZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZUluVHlwZSA9PT0gdHJ1ZSkge1xuICAgICAgICBkYXRhQ2hhbmdlZCA9IHRoaXMuY2xlYW51cCgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlSW5UeXBlID09PSB0cnVlKSB7XG4gICAgICBpZiAoc21vb3RoLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHNtb290aC50eXBlID09PSBcImR5bmFtaWNcIikge1xuICAgICAgICAgIGRhdGFDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmVkZ2VUeXBlID0gbmV3IEJlemllckVkZ2VEeW5hbWljKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoc21vb3RoLnR5cGUgPT09IFwiY3ViaWNCZXppZXJcIikge1xuICAgICAgICAgIHRoaXMuZWRnZVR5cGUgPSBuZXcgQ3ViaWNCZXppZXJFZGdlKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lZGdlVHlwZSA9IG5ldyBCZXppZXJFZGdlU3RhdGljKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRnZVR5cGUgPSBuZXcgU3RyYWlnaHRFZGdlKFxuICAgICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBub3RoaW5nIGNoYW5nZXMsIHdlIGp1c3Qgc2V0IHRoZSBvcHRpb25zLlxuICAgICAgdGhpcy5lZGdlVHlwZS5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhQ2hhbmdlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IGFuIGVkZ2UgdG8gaXRzIG5vZGVzXG4gICAqL1xuICBjb25uZWN0KCkge1xuICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuXG4gICAgdGhpcy5mcm9tID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMuZnJvbUlkXSB8fCB1bmRlZmluZWQ7XG4gICAgdGhpcy50byA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRvSWRdIHx8IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbm5lY3RlZCA9IHRoaXMuZnJvbSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudG8gIT09IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLmNvbm5lY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5mcm9tLmF0dGFjaEVkZ2UodGhpcyk7XG4gICAgICB0aGlzLnRvLmF0dGFjaEVkZ2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmZyb20pIHtcbiAgICAgICAgdGhpcy5mcm9tLmRldGFjaEVkZ2UodGhpcyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50bykge1xuICAgICAgICB0aGlzLnRvLmRldGFjaEVkZ2UodGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lZGdlVHlwZS5jb25uZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzY29ubmVjdCBhbiBlZGdlIGZyb20gaXRzIG5vZGVzXG4gICAqL1xuICBkaXNjb25uZWN0KCkge1xuICAgIGlmICh0aGlzLmZyb20pIHtcbiAgICAgIHRoaXMuZnJvbS5kZXRhY2hFZGdlKHRoaXMpO1xuICAgICAgdGhpcy5mcm9tID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodGhpcy50bykge1xuICAgICAgdGhpcy50by5kZXRhY2hFZGdlKHRoaXMpO1xuICAgICAgdGhpcy50byA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgdGl0bGUgb2YgdGhpcyBlZGdlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aXRsZSAgICBUaGUgdGl0bGUgb2YgdGhlIGVkZ2UsIG9yIHVuZGVmaW5lZCB3aGVuIG5vIHRpdGxlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gc2V0LlxuICAgKi9cbiAgZ2V0VGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGU7XG4gIH1cblxuICAvKipcbiAgICogY2hlY2sgaWYgdGhpcyBub2RlIGlzIHNlbGVjdGVcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHNlbGVjdGVkICAgVHJ1ZSBpZiBub2RlIGlzIHNlbGVjdGVkLCBlbHNlIGZhbHNlXG4gICAqL1xuICBpc1NlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiB0aGUgZWRnZS4gQ2FuIGJlIHVuZGVmaW5lZFxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSB2YWx1ZVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGp1c3QgdGhlIHZhbHVlIHJhbmdlIG9mIHRoZSBlZGdlLiBUaGUgZWRnZSB3aWxsIGFkanVzdCBpdCdzIHdpZHRoXG4gICAqIGJhc2VkIG9uIGl0cyB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pblxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFxuICAgKi9cbiAgc2V0VmFsdWVSYW5nZShtaW4sIG1heCwgdG90YWwpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5vcHRpb25zLnNjYWxpbmcuY3VzdG9tU2NhbGluZ0Z1bmN0aW9uKFxuICAgICAgICBtaW4sXG4gICAgICAgIG1heCxcbiAgICAgICAgdG90YWwsXG4gICAgICAgIHRoaXMub3B0aW9ucy52YWx1ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHdpZHRoRGlmZiA9IHRoaXMub3B0aW9ucy5zY2FsaW5nLm1heCAtIHRoaXMub3B0aW9ucy5zY2FsaW5nLm1pbjtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGZvbnREaWZmID1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5tYXggLSB0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5taW47XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb250LnNpemUgPVxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1pbiArIHNjYWxlICogZm9udERpZmY7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMud2lkdGggPSB0aGlzLm9wdGlvbnMuc2NhbGluZy5taW4gKyBzY2FsZSAqIHdpZHRoRGlmZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zLndpZHRoID0gdGhpcy5iYXNlV2lkdGg7XG4gICAgICB0aGlzLm9wdGlvbnMuZm9udC5zaXplID0gdGhpcy5iYXNlRm9udFNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0SW50ZXJhY3Rpb25XaWR0aHMoKTtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRJbnRlcmFjdGlvbldpZHRocygpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5ob3ZlcldpZHRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuZWRnZVR5cGUuaG92ZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ob3ZlcldpZHRoKHRoaXMub3B0aW9ucy53aWR0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWRnZVR5cGUuaG92ZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ob3ZlcldpZHRoICsgdGhpcy5vcHRpb25zLndpZHRoO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5zZWxlY3Rpb25XaWR0aCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLnNlbGVjdGlvbldpZHRoID0gdGhpcy5vcHRpb25zLnNlbGVjdGlvbldpZHRoKFxuICAgICAgICB0aGlzLm9wdGlvbnMud2lkdGhcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWRnZVR5cGUuc2VsZWN0aW9uV2lkdGggPVxuICAgICAgICB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uV2lkdGggKyB0aGlzLm9wdGlvbnMud2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBhIGVkZ2VcbiAgICogRHJhdyB0aGlzIGVkZ2UgaW4gdGhlIGdpdmVuIGNhbnZhc1xuICAgKiBUaGUgMmQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqL1xuICBkcmF3KGN0eCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0Rm9ybWF0dGluZ1ZhbHVlcygpO1xuICAgIGlmICh2YWx1ZXMuaGlkZGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSB2aWEgbm9kZSBmcm9tIHRoZSBlZGdlIHR5cGVcbiAgICBjb25zdCB2aWFOb2RlID0gdGhpcy5lZGdlVHlwZS5nZXRWaWFOb2RlKCk7XG5cbiAgICAvLyBkcmF3IGxpbmUgYW5kIGxhYmVsXG4gICAgdGhpcy5lZGdlVHlwZS5kcmF3TGluZShjdHgsIHZhbHVlcywgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3ZlciwgdmlhTm9kZSk7XG4gICAgdGhpcy5kcmF3TGFiZWwoY3R4LCB2aWFOb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgYXJyb3dzXG4gICAqIERyYXcgdGhpcyBhcnJvd3MgaW4gdGhlIGdpdmVuIGNhbnZhc1xuICAgKiBUaGUgMmQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqL1xuICBkcmF3QXJyb3dzKGN0eCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0Rm9ybWF0dGluZ1ZhbHVlcygpO1xuICAgIGlmICh2YWx1ZXMuaGlkZGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSB2aWEgbm9kZSBmcm9tIHRoZSBlZGdlIHR5cGVcbiAgICBjb25zdCB2aWFOb2RlID0gdGhpcy5lZGdlVHlwZS5nZXRWaWFOb2RlKCk7XG4gICAgY29uc3QgYXJyb3dEYXRhID0ge307XG5cbiAgICAvLyByZXN0b3JlIGVkZ2UgdGFyZ2V0cyB0byBkZWZhdWx0c1xuICAgIHRoaXMuZWRnZVR5cGUuZnJvbVBvaW50ID0gdGhpcy5lZGdlVHlwZS5mcm9tO1xuICAgIHRoaXMuZWRnZVR5cGUudG9Qb2ludCA9IHRoaXMuZWRnZVR5cGUudG87XG5cbiAgICAvLyBmcm9tIGFuZCB0byBhcnJvd3MgZ2l2ZSBhIGRpZmZlcmVudCBlbmQgcG9pbnQgZm9yIGVkZ2VzLiB3ZSBzZXQgdGhlbSBoZXJlXG4gICAgaWYgKHZhbHVlcy5mcm9tQXJyb3cpIHtcbiAgICAgIGFycm93RGF0YS5mcm9tID0gdGhpcy5lZGdlVHlwZS5nZXRBcnJvd0RhdGEoXG4gICAgICAgIGN0eCxcbiAgICAgICAgXCJmcm9tXCIsXG4gICAgICAgIHZpYU5vZGUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgIHRoaXMuaG92ZXIsXG4gICAgICAgIHZhbHVlc1xuICAgICAgKTtcbiAgICAgIGlmICh2YWx1ZXMuYXJyb3dTdHJpa2V0aHJvdWdoID09PSBmYWxzZSlcbiAgICAgICAgdGhpcy5lZGdlVHlwZS5mcm9tUG9pbnQgPSBhcnJvd0RhdGEuZnJvbS5jb3JlO1xuICAgICAgaWYgKHZhbHVlcy5mcm9tQXJyb3dTcmMpIHtcbiAgICAgICAgYXJyb3dEYXRhLmZyb20uaW1hZ2UgPSB0aGlzLmltYWdlbGlzdC5sb2FkKHZhbHVlcy5mcm9tQXJyb3dTcmMpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlcy5mcm9tQXJyb3dJbWFnZVdpZHRoKSB7XG4gICAgICAgIGFycm93RGF0YS5mcm9tLmltYWdlV2lkdGggPSB2YWx1ZXMuZnJvbUFycm93SW1hZ2VXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMuZnJvbUFycm93SW1hZ2VIZWlnaHQpIHtcbiAgICAgICAgYXJyb3dEYXRhLmZyb20uaW1hZ2VIZWlnaHQgPSB2YWx1ZXMuZnJvbUFycm93SW1hZ2VIZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2YWx1ZXMudG9BcnJvdykge1xuICAgICAgYXJyb3dEYXRhLnRvID0gdGhpcy5lZGdlVHlwZS5nZXRBcnJvd0RhdGEoXG4gICAgICAgIGN0eCxcbiAgICAgICAgXCJ0b1wiLFxuICAgICAgICB2aWFOb2RlLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICB2YWx1ZXNcbiAgICAgICk7XG4gICAgICBpZiAodmFsdWVzLmFycm93U3RyaWtldGhyb3VnaCA9PT0gZmFsc2UpXG4gICAgICAgIHRoaXMuZWRnZVR5cGUudG9Qb2ludCA9IGFycm93RGF0YS50by5jb3JlO1xuICAgICAgaWYgKHZhbHVlcy50b0Fycm93U3JjKSB7XG4gICAgICAgIGFycm93RGF0YS50by5pbWFnZSA9IHRoaXMuaW1hZ2VsaXN0LmxvYWQodmFsdWVzLnRvQXJyb3dTcmMpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlcy50b0Fycm93SW1hZ2VXaWR0aCkge1xuICAgICAgICBhcnJvd0RhdGEudG8uaW1hZ2VXaWR0aCA9IHZhbHVlcy50b0Fycm93SW1hZ2VXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMudG9BcnJvd0ltYWdlSGVpZ2h0KSB7XG4gICAgICAgIGFycm93RGF0YS50by5pbWFnZUhlaWdodCA9IHZhbHVlcy50b0Fycm93SW1hZ2VIZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhlIG1pZGRsZSBhcnJvdyBkZXBlbmRzIG9uIHRoZSBsaW5lLCB3aGljaCBjYW4gZGVwZW5kIG9uIHRoZSB0byBhbmQgZnJvbSBhcnJvd3Mgc28gd2UgZG8gdGhpcyBvbmUgbGFzdGx5LlxuICAgIGlmICh2YWx1ZXMubWlkZGxlQXJyb3cpIHtcbiAgICAgIGFycm93RGF0YS5taWRkbGUgPSB0aGlzLmVkZ2VUeXBlLmdldEFycm93RGF0YShcbiAgICAgICAgY3R4LFxuICAgICAgICBcIm1pZGRsZVwiLFxuICAgICAgICB2aWFOb2RlLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICB2YWx1ZXNcbiAgICAgICk7XG5cbiAgICAgIGlmICh2YWx1ZXMubWlkZGxlQXJyb3dTcmMpIHtcbiAgICAgICAgYXJyb3dEYXRhLm1pZGRsZS5pbWFnZSA9IHRoaXMuaW1hZ2VsaXN0LmxvYWQodmFsdWVzLm1pZGRsZUFycm93U3JjKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMubWlkZGxlQXJyb3dJbWFnZVdpZHRoKSB7XG4gICAgICAgIGFycm93RGF0YS5taWRkbGUuaW1hZ2VXaWR0aCA9IHZhbHVlcy5taWRkbGVBcnJvd0ltYWdlV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVzLm1pZGRsZUFycm93SW1hZ2VIZWlnaHQpIHtcbiAgICAgICAgYXJyb3dEYXRhLm1pZGRsZS5pbWFnZUhlaWdodCA9IHZhbHVlcy5taWRkbGVBcnJvd0ltYWdlSGVpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZXMuZnJvbUFycm93KSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLmRyYXdBcnJvd0hlYWQoXG4gICAgICAgIGN0eCxcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICBhcnJvd0RhdGEuZnJvbVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlcy5taWRkbGVBcnJvdykge1xuICAgICAgdGhpcy5lZGdlVHlwZS5kcmF3QXJyb3dIZWFkKFxuICAgICAgICBjdHgsXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgYXJyb3dEYXRhLm1pZGRsZVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlcy50b0Fycm93KSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLmRyYXdBcnJvd0hlYWQoXG4gICAgICAgIGN0eCxcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICBhcnJvd0RhdGEudG9cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtOb2RlfSB2aWFOb2RlXG4gICAqL1xuICBkcmF3TGFiZWwoY3R4LCB2aWFOb2RlKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBzZXQgc3R5bGVcbiAgICAgIGNvbnN0IG5vZGUxID0gdGhpcy5mcm9tO1xuICAgICAgY29uc3Qgbm9kZTIgPSB0aGlzLnRvO1xuXG4gICAgICBpZiAodGhpcy5sYWJlbE1vZHVsZS5kaWZmZXJlbnRTdGF0ZSh0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyKSkge1xuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLmdldFRleHRTaXplKGN0eCwgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3Zlcik7XG4gICAgICB9XG5cbiAgICAgIGxldCBwb2ludDtcbiAgICAgIGlmIChub2RlMS5pZCAhPSBub2RlMi5pZCkge1xuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLnBvaW50VG9TZWxmID0gZmFsc2U7XG4gICAgICAgIHBvaW50ID0gdGhpcy5lZGdlVHlwZS5nZXRQb2ludCgwLjUsIHZpYU5vZGUpO1xuICAgICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICAgIGNvbnN0IHJvdGF0aW9uUG9pbnQgPSB0aGlzLl9nZXRSb3RhdGlvbihjdHgpO1xuICAgICAgICBpZiAocm90YXRpb25Qb2ludC5hbmdsZSAhPSAwKSB7XG4gICAgICAgICAgY3R4LnRyYW5zbGF0ZShyb3RhdGlvblBvaW50LngsIHJvdGF0aW9uUG9pbnQueSk7XG4gICAgICAgICAgY3R4LnJvdGF0ZShyb3RhdGlvblBvaW50LmFuZ2xlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRyYXcgdGhlIGxhYmVsXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHBvaW50LngsIHBvaW50LnksIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuXG4gICAgICAgIC8qXG4gICAgICAgIC8vIFVzZWZ1bCBkZWJ1ZyBjb2RlOiBkcmF3IGEgYm9yZGVyIGFyb3VuZCB0aGUgbGFiZWxcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgKipub3QqKiBiZSBlbmFibGVkIGluIHByb2R1Y3Rpb24hXG4gICAgICAgIHZhciBzaXplID0gdGhpcy5sYWJlbE1vZHVsZS5nZXRTaXplKCk7OyAvLyA7OyBpbnRlbnRpb25hbCBzbyBsaW50IGNhdGNoZXMgaXRcbiAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCIjZmYwMDAwXCI7XG4gICAgICAgIGN0eC5zdHJva2VSZWN0KHNpemUubGVmdCwgc2l6ZS50b3AsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtcbiAgICAgICAgLy8gRW5kICBkZWJ1ZyBjb2RlXG4qL1xuXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIG9yaWVudGF0aW9ucy5cbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5wb2ludFRvU2VsZiA9IHRydWU7XG5cbiAgICAgICAgLy8gZ2V0IGNpcmNsZSBjb29yZGluYXRlc1xuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IGdldFNlbGZSZWZDb29yZGluYXRlcyhcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2Uuc2l6ZSxcbiAgICAgICAgICBub2RlMVxuICAgICAgICApO1xuXG4gICAgICAgIHBvaW50ID0gdGhpcy5fcG9pbnRPbkNpcmNsZShcbiAgICAgICAgICBjb29yZGluYXRlcy54LFxuICAgICAgICAgIGNvb3JkaW5hdGVzLnksXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2Uuc2l6ZSxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHBvaW50LngsIHBvaW50LnksIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgYWxsIHZpc3VhbCBlbGVtZW50cyBvZiB0aGlzIGVkZ2UgaW5zdGFuY2UsIGluIHdoaWNoIHRoZSBnaXZlblxuICAgKiBwb2ludCBmYWxscyB3aXRoaW4gdGhlIGJvdW5kaW5nIHNoYXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb2ludFxuICAgKiBAcmV0dXJucyB7QXJyYXkuPGVkZ2VDbGlja0l0ZW18ZWRnZUxhYmVsQ2xpY2tJdGVtPn0gbGlzdCB3aXRoIHRoZSBpdGVtcyB3aGljaCBhcmUgb24gdGhlIHBvaW50XG4gICAqL1xuICBnZXRJdGVtc09uUG9pbnQocG9pbnQpIHtcbiAgICBjb25zdCByZXQgPSBbXTtcblxuICAgIGlmICh0aGlzLmxhYmVsTW9kdWxlLnZpc2libGUoKSkge1xuICAgICAgY29uc3Qgcm90YXRpb25Qb2ludCA9IHRoaXMuX2dldFJvdGF0aW9uKCk7XG4gICAgICBpZiAocG9pbnRJblJlY3QodGhpcy5sYWJlbE1vZHVsZS5nZXRTaXplKCksIHBvaW50LCByb3RhdGlvblBvaW50KSkge1xuICAgICAgICByZXQucHVzaCh7IGVkZ2VJZDogdGhpcy5pZCwgbGFiZWxJZDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBsZWZ0OiBwb2ludC54LFxuICAgICAgdG9wOiBwb2ludC55LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5pc092ZXJsYXBwaW5nV2l0aChvYmopKSB7XG4gICAgICByZXQucHVzaCh7IGVkZ2VJZDogdGhpcy5pZCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgb2JqZWN0IGlzIG92ZXJsYXBwaW5nIHdpdGggdGhlIHByb3ZpZGVkIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqICAgYW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3BcbiAgICogQHJldHVybnMge2Jvb2xlYW59ICAgICBUcnVlIGlmIGxvY2F0aW9uIGlzIGxvY2F0ZWQgb24gdGhlIGVkZ2VcbiAgICovXG4gIGlzT3ZlcmxhcHBpbmdXaXRoKG9iaikge1xuICAgIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgICAgY29uc3QgZGlzdE1heCA9IDEwO1xuICAgICAgY29uc3QgeEZyb20gPSB0aGlzLmZyb20ueDtcbiAgICAgIGNvbnN0IHlGcm9tID0gdGhpcy5mcm9tLnk7XG4gICAgICBjb25zdCB4VG8gPSB0aGlzLnRvLng7XG4gICAgICBjb25zdCB5VG8gPSB0aGlzLnRvLnk7XG4gICAgICBjb25zdCB4T2JqID0gb2JqLmxlZnQ7XG4gICAgICBjb25zdCB5T2JqID0gb2JqLnRvcDtcblxuICAgICAgY29uc3QgZGlzdCA9IHRoaXMuZWRnZVR5cGUuZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgICAgIHhGcm9tLFxuICAgICAgICB5RnJvbSxcbiAgICAgICAgeFRvLFxuICAgICAgICB5VG8sXG4gICAgICAgIHhPYmosXG4gICAgICAgIHlPYmpcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBkaXN0IDwgZGlzdE1heDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHJvdGF0aW9uIHBvaW50LCBpZiBhbnkuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBbY3R4XSBpZiBwYXNzZWQsIGRvIGEgcmVjYWxjdWxhdGlvbiBvZiB0aGUgbGFiZWwgc2l6ZVxuICAgKiBAcmV0dXJucyB7cm90YXRpb25Qb2ludH0gdGhlIHBvaW50IHRvIHJvdGF0ZSBhcm91bmQgYW5kIHRoZSBhbmdsZSBpbiByYWRpYW5zIHRvIHJvdGF0ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFJvdGF0aW9uKGN0eCkge1xuICAgIGNvbnN0IHZpYU5vZGUgPSB0aGlzLmVkZ2VUeXBlLmdldFZpYU5vZGUoKTtcbiAgICBjb25zdCBwb2ludCA9IHRoaXMuZWRnZVR5cGUuZ2V0UG9pbnQoMC41LCB2aWFOb2RlKTtcblxuICAgIGlmIChjdHggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5jYWxjdWxhdGVMYWJlbFNpemUoXG4gICAgICAgIGN0eCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgcG9pbnQueCxcbiAgICAgICAgcG9pbnQueVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSB7XG4gICAgICB4OiBwb2ludC54LFxuICAgICAgeTogdGhpcy5sYWJlbE1vZHVsZS5zaXplLnlMaW5lLFxuICAgICAgYW5nbGU6IDAsXG4gICAgfTtcblxuICAgIGlmICghdGhpcy5sYWJlbE1vZHVsZS52aXNpYmxlKCkpIHtcbiAgICAgIHJldHVybiByZXQ7IC8vIERvbid0IGV2ZW4gYm90aGVyIGRvaW5nIHRoZSBhdGFuMiwgdGhlcmUncyBub3RoaW5nIHRvIGRyYXdcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmZvbnQuYWxpZ24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICByZXR1cm4gcmV0OyAvLyBObyBuZWVkIHRvIGNhbGN1bGF0ZSBhbmdsZVxuICAgIH1cblxuICAgIGNvbnN0IGR5ID0gdGhpcy5mcm9tLnkgLSB0aGlzLnRvLnk7XG4gICAgY29uc3QgZHggPSB0aGlzLmZyb20ueCAtIHRoaXMudG8ueDtcbiAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCk7IC8vIHJhZGlhbnNcblxuICAgIC8vIHJvdGF0ZSBzbyB0aGF0IGxhYmVsIGlzIHJlYWRhYmxlXG4gICAgaWYgKChhbmdsZSA8IC0xICYmIGR4IDwgMCkgfHwgKGFuZ2xlID4gMCAmJiBkeCA8IDApKSB7XG4gICAgICBhbmdsZSArPSBNYXRoLlBJO1xuICAgIH1cbiAgICByZXQuYW5nbGUgPSBhbmdsZTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcG9pbnQgb24gYSBjaXJjbGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1c1xuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge29iamVjdH0gcG9pbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wb2ludE9uQ2lyY2xlKHgsIHksIHJhZGl1cywgYW5nbGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogeCArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKSxcbiAgICAgIHk6IHkgLSByYWRpdXMgKiBNYXRoLnNpbihhbmdsZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHNlbGVjdGVkIHN0YXRlIHRvIHRydWVcbiAgICovXG4gIHNlbGVjdCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHNlbGVjdGVkIHN0YXRlIHRvIGZhbHNlXG4gICAqL1xuICB1bnNlbGVjdCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogY2xlYW5zIGFsbCByZXF1aXJlZCB0aGluZ3Mgb24gZGVsZXRlXG4gICAqXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgY2xlYW51cCgpIHtcbiAgICByZXR1cm4gdGhpcy5lZGdlVHlwZS5jbGVhbnVwKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGVkZ2UgZnJvbSB0aGUgbGlzdCBhbmQgcGVyZm9ybSBuZWNlc3NhcnkgY2xlYW51cC5cbiAgICovXG4gIHJlbW92ZSgpIHtcbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICBkZWxldGUgdGhpcy5ib2R5LmVkZ2VzW3RoaXMuaWRdO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGJvdGggY29ubmVjdGluZyBub2RlcyBleGlzdFxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGVuZFBvaW50c1ZhbGlkKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmJvZHkubm9kZXNbdGhpcy5mcm9tSWRdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRvSWRdICE9PSB1bmRlZmluZWRcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkZ2U7XG4iLCAiaW1wb3J0IHsgZGVlcEV4dGVuZCwgZm9yRWFjaCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCB7IERhdGFTZXQsIGlzRGF0YVZpZXdMaWtlIH0gZnJvbSBcInZpcy1kYXRhL2VzbmV4dFwiO1xuaW1wb3J0IEVkZ2UgZnJvbSBcIi4vY29tcG9uZW50cy9FZGdlXCI7XG5cbi8qKlxuICogSGFuZGxlciBmb3IgRWRnZXNcbiAqL1xuY2xhc3MgRWRnZXNIYW5kbGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7QXJyYXkuPEltYWdlPn0gaW1hZ2VzXG4gICAqIEBwYXJhbSB7QXJyYXkuPEdyb3VwPn0gZ3JvdXBzXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBpbWFnZXMsIGdyb3Vwcykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5pbWFnZXMgPSBpbWFnZXM7XG4gICAgdGhpcy5ncm91cHMgPSBncm91cHM7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGVkZ2UgQVBJIGluIHRoZSBib2R5IGNvbnRhaW5lclxuICAgIHRoaXMuYm9keS5mdW5jdGlvbnMuY3JlYXRlRWRnZSA9IHRoaXMuY3JlYXRlLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmVkZ2VzTGlzdGVuZXJzID0ge1xuICAgICAgYWRkOiAoZXZlbnQsIHBhcmFtcykgPT4ge1xuICAgICAgICB0aGlzLmFkZChwYXJhbXMuaXRlbXMpO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZTogKGV2ZW50LCBwYXJhbXMpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGUocGFyYW1zLml0ZW1zKTtcbiAgICAgIH0sXG4gICAgICByZW1vdmU6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlKHBhcmFtcy5pdGVtcyk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgYXJyb3dzOiB7XG4gICAgICAgIHRvOiB7IGVuYWJsZWQ6IGZhbHNlLCBzY2FsZUZhY3RvcjogMSwgdHlwZTogXCJhcnJvd1wiIH0sIC8vIGJvb2xlYW4gLyB7YXJyb3dTY2FsZUZhY3RvcjoxfSAvIHtlbmFibGVkOiBmYWxzZSwgYXJyb3dTY2FsZUZhY3RvcjoxfVxuICAgICAgICBtaWRkbGU6IHsgZW5hYmxlZDogZmFsc2UsIHNjYWxlRmFjdG9yOiAxLCB0eXBlOiBcImFycm93XCIgfSxcbiAgICAgICAgZnJvbTogeyBlbmFibGVkOiBmYWxzZSwgc2NhbGVGYWN0b3I6IDEsIHR5cGU6IFwiYXJyb3dcIiB9LFxuICAgICAgfSxcbiAgICAgIGVuZFBvaW50T2Zmc2V0OiB7XG4gICAgICAgIGZyb206IDAsXG4gICAgICAgIHRvOiAwLFxuICAgICAgfSxcbiAgICAgIGFycm93U3RyaWtldGhyb3VnaDogdHJ1ZSxcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIGNvbG9yOiBcIiM4NDg0ODRcIixcbiAgICAgICAgaGlnaGxpZ2h0OiBcIiM4NDg0ODRcIixcbiAgICAgICAgaG92ZXI6IFwiIzg0ODQ4NFwiLFxuICAgICAgICBpbmhlcml0OiBcImZyb21cIixcbiAgICAgICAgb3BhY2l0eTogMS4wLFxuICAgICAgfSxcbiAgICAgIGRhc2hlczogZmFsc2UsXG4gICAgICBmb250OiB7XG4gICAgICAgIGNvbG9yOiBcIiMzNDM0MzRcIixcbiAgICAgICAgc2l6ZTogMTQsIC8vIHB4XG4gICAgICAgIGZhY2U6IFwiYXJpYWxcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCJub25lXCIsXG4gICAgICAgIHN0cm9rZVdpZHRoOiAyLCAvLyBweFxuICAgICAgICBzdHJva2VDb2xvcjogXCIjZmZmZmZmXCIsXG4gICAgICAgIGFsaWduOiBcImhvcml6b250YWxcIixcbiAgICAgICAgbXVsdGk6IGZhbHNlLFxuICAgICAgICB2YWRqdXN0OiAwLFxuICAgICAgICBib2xkOiB7XG4gICAgICAgICAgbW9kOiBcImJvbGRcIixcbiAgICAgICAgfSxcbiAgICAgICAgYm9sZGl0YWw6IHtcbiAgICAgICAgICBtb2Q6IFwiYm9sZCBpdGFsaWNcIixcbiAgICAgICAgfSxcbiAgICAgICAgaXRhbDoge1xuICAgICAgICAgIG1vZDogXCJpdGFsaWNcIixcbiAgICAgICAgfSxcbiAgICAgICAgbW9ubzoge1xuICAgICAgICAgIG1vZDogXCJcIixcbiAgICAgICAgICBzaXplOiAxNSwgLy8gcHhcbiAgICAgICAgICBmYWNlOiBcImNvdXJpZXIgbmV3XCIsXG4gICAgICAgICAgdmFkanVzdDogMixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgaG92ZXJXaWR0aDogMS41LFxuICAgICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogdHJ1ZSxcbiAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgcGh5c2ljczogdHJ1ZSxcbiAgICAgIHNjYWxpbmc6IHtcbiAgICAgICAgbWluOiAxLFxuICAgICAgICBtYXg6IDE1LFxuICAgICAgICBsYWJlbDoge1xuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgbWluOiAxNCxcbiAgICAgICAgICBtYXg6IDMwLFxuICAgICAgICAgIG1heFZpc2libGU6IDMwLFxuICAgICAgICAgIGRyYXdUaHJlc2hvbGQ6IDUsXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbVNjYWxpbmdGdW5jdGlvbjogZnVuY3Rpb24gKG1pbiwgbWF4LCB0b3RhbCwgdmFsdWUpIHtcbiAgICAgICAgICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICAgICAgICAgIHJldHVybiAwLjU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gMSAvIChtYXggLSBtaW4pO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsICh2YWx1ZSAtIG1pbikgKiBzY2FsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNlbGVjdGlvbldpZHRoOiAxLjUsXG4gICAgICBzZWxmUmVmZXJlbmNlOiB7XG4gICAgICAgIHNpemU6IDIwLFxuICAgICAgICBhbmdsZTogTWF0aC5QSSAvIDQsXG4gICAgICAgIHJlbmRlckJlaGluZFRoZU5vZGU6IHRydWUsXG4gICAgICB9LFxuICAgICAgc2hhZG93OiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBjb2xvcjogXCJyZ2JhKDAsMCwwLDAuNSlcIixcbiAgICAgICAgc2l6ZTogMTAsXG4gICAgICAgIHg6IDUsXG4gICAgICAgIHk6IDUsXG4gICAgICB9LFxuICAgICAgYmFja2dyb3VuZDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgY29sb3I6IFwicmdiYSgxMTEsMTExLDExMSwxKVwiLFxuICAgICAgICBzaXplOiAxMCxcbiAgICAgICAgZGFzaGVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBzbW9vdGg6IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJkeW5hbWljXCIsXG4gICAgICAgIGZvcmNlRGlyZWN0aW9uOiBcIm5vbmVcIixcbiAgICAgICAgcm91bmRuZXNzOiAwLjUsXG4gICAgICB9LFxuICAgICAgdGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgIHdpZHRoOiAxLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgZGVlcEV4dGVuZCh0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICAvLyB0aGlzIGFsbG93cyBleHRlcm5hbCBtb2R1bGVzIHRvIGZvcmNlIGFsbCBkeW5hbWljIGN1cnZlcyB0byB0dXJuIHN0YXRpYy5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9mb3JjZURpc2FibGVEeW5hbWljQ3VydmVzXCIsICh0eXBlLCBlbWl0ID0gdHJ1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGUgPT09IFwiZHluYW1pY1wiKSB7XG4gICAgICAgIHR5cGUgPSBcImNvbnRpbnVvdXNcIjtcbiAgICAgIH1cbiAgICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgZm9yIChjb25zdCBlZGdlSWQgaW4gdGhpcy5ib2R5LmVkZ2VzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlSWQpKSB7XG4gICAgICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICAgICAgICAgIGNvbnN0IGVkZ2VEYXRhID0gdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0KGVkZ2VJZCk7XG5cbiAgICAgICAgICAvLyBvbmx5IGZvcmNpYmx5IHJlbW92ZSB0aGUgc21vb3RoIGN1cnZlIGlmIHRoZSBkYXRhIGhhcyBiZWVuIHNldCBvZiB0aGUgZWRnZSBoYXMgdGhlIHNtb290aCBjdXJ2ZXMgZGVmaW5lZC5cbiAgICAgICAgICAvLyB0aGlzIGlzIGJlY2F1c2UgYSBjaGFuZ2UgaW4gdGhlIGdsb2JhbCB3b3VsZCBub3QgYWZmZWN0IHRoZXNlIGN1cnZlcy5cbiAgICAgICAgICBpZiAoZWRnZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc21vb3RoT3B0aW9ucyA9IGVkZ2VEYXRhLnNtb290aDtcbiAgICAgICAgICAgIGlmIChzbW9vdGhPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHNtb290aE9wdGlvbnMuZW5hYmxlZCA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgICAgIHNtb290aE9wdGlvbnMudHlwZSA9PT0gXCJkeW5hbWljXCJcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgZWRnZS5zZXRPcHRpb25zKHsgc21vb3RoOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZWRnZS5zZXRPcHRpb25zKHsgc21vb3RoOiB7IHR5cGU6IHR5cGUgfSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZW1pdCA9PT0gdHJ1ZSAmJiBkYXRhQ2hhbmdlZCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gdGhpcyBpcyBjYWxsZWQgd2hlbiBvcHRpb25zIG9mIEVYSVNUSU5HIG5vZGVzIG9yIGVkZ2VzIGhhdmUgY2hhbmdlZC5cbiAgICAvL1xuICAgIC8vIE5PVEU6IE5vdCB0cnVlLCBjYWxsZWQgd2hlbiBvcHRpb25zIGhhdmUgTk9UIGNoYW5nZWQsIGZvciBib3RoIGV4aXN0aW5nIGFzIHdlbGwgYXMgbmV3IG5vZGVzLlxuICAgIC8vICAgICAgIFNlZSB1cGRhdGUoKSBmb3IgbG9naWMuXG4gICAgLy8gVE9ETzogVmVyaWZ5IGFuZCBleGFtaW5lIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcy4gSXQgbWlnaHQgc3RpbGwgdHJpZ2dlciB3aGVuXG4gICAgLy8gICAgICAgbm9uLW9wdGlvbiBmaWVsZHMgaGF2ZSBjaGFuZ2VkLCBidXQgdGhlbiByZWNvbm5lY3RpbmcgZWRnZXMgaXMgc3RpbGwgdXNlbGVzcy5cbiAgICAvLyAgICAgICBBbHRlcm5hdGl2ZWx5LCBpdCBtaWdodCBhbHNvIGJlIGNhbGxlZCB3aGVuIGVkZ2VzIGFyZSByZW1vdmVkLlxuICAgIC8vXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YVVwZGF0ZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvbm5lY3RFZGdlcygpO1xuICAgIH0pO1xuXG4gICAgLy8gcmVmcmVzaCB0aGUgZWRnZXMuIFVzZWQgd2hlbiByZXZlcnRpbmcgZnJvbSBoaWVyYXJjaGljYWwgbGF5b3V0XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJyZWZyZXNoRWRnZXNcIiwgdGhpcy5yZWZyZXNoLmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwicmVmcmVzaFwiLCB0aGlzLnJlZnJlc2guYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZXN0cm95XCIsICgpID0+IHtcbiAgICAgIGZvckVhY2godGhpcy5lZGdlc0xpc3RlbmVycywgKGNhbGxiYWNrLCBldmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5ib2R5LmRhdGEuZWRnZXMpIHRoaXMuYm9keS5kYXRhLmVkZ2VzLm9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgICBkZWxldGUgdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVFZGdlO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnMuYWRkO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnMudXBkYXRlO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnMucmVtb3ZlO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnM7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHVzZSB0aGUgcGFyc2VyIGZyb20gdGhlIEVkZ2UgY2xhc3MgdG8gZmlsbCBpbiBhbGwgc2hvcnRoYW5kIG5vdGF0aW9uc1xuICAgICAgRWRnZS5wYXJzZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zLCB0cnVlLCB0aGlzLmRlZmF1bHRPcHRpb25zLCB0cnVlKTtcblxuICAgICAgLy8gdXBkYXRlIHNtb290aCBzZXR0aW5ncyBpbiBhbGwgZWRnZXNcbiAgICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgaWYgKG9wdGlvbnMuc21vb3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBlZGdlSWQgaW4gdGhpcy5ib2R5LmVkZ2VzKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkuZWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgICAgICAgIGRhdGFDaGFuZ2VkID1cbiAgICAgICAgICAgICAgdGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0udXBkYXRlRWRnZVR5cGUoKSB8fCBkYXRhQ2hhbmdlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIGZvbnRzIGluIGFsbCBlZGdlc1xuICAgICAgaWYgKG9wdGlvbnMuZm9udCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgZWRnZUlkIGluIHRoaXMuYm9keS5lZGdlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXS51cGRhdGVMYWJlbE1vZHVsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGUgdGhlIHN0YXRlIG9mIHRoZSB2YXJpYWJsZXMgaWYgbmVlZGVkXG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMuaGlkZGVuICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgb3B0aW9ucy5waHlzaWNzICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgZGF0YUNoYW5nZWQgPT09IHRydWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGVkZ2VzIGJ5IHJlYWRpbmcgdGhlIGRhdGEgdGFibGVcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IERhdGFTZXQgfCBEYXRhVmlld30gZWRnZXMgICAgVGhlIGRhdGEgY29udGFpbmluZyB0aGUgZWRnZXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvTm90RW1pdD1mYWxzZV0gLSBTdXBwcmVzcyBkYXRhIGNoYW5nZWQgZXZlbnQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXREYXRhKGVkZ2VzLCBkb05vdEVtaXQgPSBmYWxzZSkge1xuICAgIGNvbnN0IG9sZEVkZ2VzRGF0YSA9IHRoaXMuYm9keS5kYXRhLmVkZ2VzO1xuXG4gICAgaWYgKGlzRGF0YVZpZXdMaWtlKFwiaWRcIiwgZWRnZXMpKSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcyA9IGVkZ2VzO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlZGdlcykpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzID0gbmV3IERhdGFTZXQoKTtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzLmFkZChlZGdlcyk7XG4gICAgfSBlbHNlIGlmICghZWRnZXMpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzID0gbmV3IERhdGFTZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5IG9yIERhdGFTZXQgZXhwZWN0ZWRcIik7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogaXMgdGhpcyBudWxsIG9yIHVuZGVmaW5lZCBvciBmYWxzZT9cbiAgICBpZiAob2xkRWRnZXNEYXRhKSB7XG4gICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIG9sZCBkYXRhc2V0XG4gICAgICBmb3JFYWNoKHRoaXMuZWRnZXNMaXN0ZW5lcnMsIChjYWxsYmFjaywgZXZlbnQpID0+IHtcbiAgICAgICAgb2xkRWRnZXNEYXRhLm9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGRyYXduIGVkZ2VzXG4gICAgdGhpcy5ib2R5LmVkZ2VzID0ge307XG5cbiAgICAvLyBUT0RPOiBpcyB0aGlzIG51bGwgb3IgdW5kZWZpbmVkIG9yIGZhbHNlP1xuICAgIGlmICh0aGlzLmJvZHkuZGF0YS5lZGdlcykge1xuICAgICAgLy8gc3Vic2NyaWJlIHRvIG5ldyBkYXRhc2V0XG4gICAgICBmb3JFYWNoKHRoaXMuZWRnZXNMaXN0ZW5lcnMsIChjYWxsYmFjaywgZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMub24oZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBkcmF3IGFsbCBuZXcgbm9kZXNcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuYm9keS5kYXRhLmVkZ2VzLmdldElkcygpO1xuICAgICAgdGhpcy5hZGQoaWRzLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2FkanVzdEVkZ2VzRm9ySGllcmFyY2hpY2FsTGF5b3V0XCIpO1xuICAgIGlmIChkb05vdEVtaXQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZWRnZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXSB8IHN0cmluZ1tdfSBpZHNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9Ob3RFbWl0PWZhbHNlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkKGlkcywgZG9Ob3RFbWl0ID0gZmFsc2UpIHtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBlZGdlc0RhdGEgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGlkc1tpXTtcblxuICAgICAgY29uc3Qgb2xkRWRnZSA9IGVkZ2VzW2lkXTtcbiAgICAgIGlmIChvbGRFZGdlKSB7XG4gICAgICAgIG9sZEVkZ2UuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gZWRnZXNEYXRhLmdldChpZCwgeyBzaG93SW50ZXJuYWxJZHM6IHRydWUgfSk7XG4gICAgICBlZGdlc1tpZF0gPSB0aGlzLmNyZWF0ZShkYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2FkanVzdEVkZ2VzRm9ySGllcmFyY2hpY2FsTGF5b3V0XCIpO1xuXG4gICAgaWYgKGRvTm90RW1pdCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBlZGdlcywgb3IgY3JlYXRlIHRoZW0gd2hlbiBub3QgeWV0IGV4aXN0aW5nXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1cGRhdGUoaWRzKSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgZWRnZXNEYXRhID0gdGhpcy5ib2R5LmRhdGEuZWRnZXM7XG4gICAgbGV0IGRhdGFDaGFuZ2VkID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgY29uc3QgZGF0YSA9IGVkZ2VzRGF0YS5nZXQoaWQpO1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2lkXTtcbiAgICAgIGlmIChlZGdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gdXBkYXRlIGVkZ2VcbiAgICAgICAgZWRnZS5kaXNjb25uZWN0KCk7XG4gICAgICAgIGRhdGFDaGFuZ2VkID0gZWRnZS5zZXRPcHRpb25zKGRhdGEpIHx8IGRhdGFDaGFuZ2VkOyAvLyBpZiBhIHN1cHBvcnQgbm9kZSBpcyBhZGRlZCwgZGF0YSBjYW4gYmUgY2hhbmdlZC5cbiAgICAgICAgZWRnZS5jb25uZWN0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgZWRnZVxuICAgICAgICB0aGlzLmJvZHkuZWRnZXNbaWRdID0gdGhpcy5jcmVhdGUoZGF0YSk7XG4gICAgICAgIGRhdGFDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YUNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfYWRqdXN0RWRnZXNGb3JIaWVyYXJjaGljYWxMYXlvdXRcIik7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFVcGRhdGVkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZXhpc3RpbmcgZWRnZXMuIE5vbiBleGlzdGluZyBpZHMgd2lsbCBiZSBpZ25vcmVkXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2VtaXQ9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlbW92ZShpZHMsIGVtaXQgPSB0cnVlKSB7XG4gICAgaWYgKGlkcy5sZW5ndGggPT09IDApIHJldHVybjsgLy8gZWFybHkgb3V0XG5cbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBmb3JFYWNoKGlkcywgKGlkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbaWRdO1xuICAgICAgaWYgKGVkZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlZGdlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGVtaXQpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyBFZGdlIEhhbmRsZXJcbiAgICovXG4gIHJlZnJlc2goKSB7XG4gICAgZm9yRWFjaCh0aGlzLmJvZHkuZWRnZXMsIChlZGdlLCBlZGdlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXQoZWRnZUlkKTtcbiAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWRnZS5zZXRPcHRpb25zKGRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIHtFZGdlfVxuICAgKi9cbiAgY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICByZXR1cm4gbmV3IEVkZ2UoXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgdGhpcy5ib2R5LFxuICAgICAgdGhpcy5pbWFnZXMsXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0aGlzLmRlZmF1bHRPcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbm5lY3QgYWxsIGVkZ2VzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWNvbm5lY3RFZGdlcygpIHtcbiAgICBsZXQgaWQ7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG5cbiAgICBmb3IgKGlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBpZCkpIHtcbiAgICAgICAgbm9kZXNbaWRdLmVkZ2VzID0gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpZCBpbiBlZGdlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZGdlcywgaWQpKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tpZF07XG4gICAgICAgIGVkZ2UuZnJvbSA9IG51bGw7XG4gICAgICAgIGVkZ2UudG8gPSBudWxsO1xuICAgICAgICBlZGdlLmNvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtFZGdlLmlkfSBlZGdlSWRcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0Q29ubmVjdGVkTm9kZXMoZWRnZUlkKSB7XG4gICAgY29uc3Qgbm9kZUxpc3QgPSBbXTtcbiAgICBpZiAodGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICAgICAgaWYgKGVkZ2UuZnJvbUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm9kZUxpc3QucHVzaChlZGdlLmZyb21JZCk7XG4gICAgICB9XG4gICAgICBpZiAoZWRnZS50b0lkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm9kZUxpc3QucHVzaChlZGdlLnRvSWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZUxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhlcmUgaXMgbm8gZGlyZWN0IHJlbGF0aW9uIGJldHdlZW4gdGhlIG5vZGVzIGFuZCB0aGUgZWRnZXMgRGF0YVNldCxcbiAgICogc28gdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIGNhbGwgdGhpcyBpcyBpbiB0aGUgaGFuZGxlciBmb3IgZXZlbnQgYF9kYXRhVXBkYXRlZGAuXG4gICAqL1xuICBfdXBkYXRlU3RhdGUoKSB7XG4gICAgdGhpcy5fYWRkTWlzc2luZ0VkZ2VzKCk7XG4gICAgdGhpcy5fcmVtb3ZlSW52YWxpZEVkZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2NhbiBmb3IgbWlzc2luZyBub2RlcyBhbmQgcmVtb3ZlIGNvcnJlc3BvbmRpbmcgZWRnZXMsIGlmIGFueS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVJbnZhbGlkRWRnZXMoKSB7XG4gICAgY29uc3QgZWRnZXNUb0RlbGV0ZSA9IFtdO1xuXG4gICAgZm9yRWFjaCh0aGlzLmJvZHkuZWRnZXMsIChlZGdlLCBpZCkgPT4ge1xuICAgICAgY29uc3QgdG9Ob2RlID0gdGhpcy5ib2R5Lm5vZGVzW2VkZ2UudG9JZF07XG4gICAgICBjb25zdCBmcm9tTm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tlZGdlLmZyb21JZF07XG5cbiAgICAgIC8vIFNraXAgY2x1c3RlcmluZyBlZGdlcyBoZXJlLCBsZXQgdGhlIENsdXN0ZXJpbmcgbW9kdWxlIGhhbmRsZSB0aG9zZVxuICAgICAgaWYgKFxuICAgICAgICAodG9Ob2RlICE9PSB1bmRlZmluZWQgJiYgdG9Ob2RlLmlzQ2x1c3RlciA9PT0gdHJ1ZSkgfHxcbiAgICAgICAgKGZyb21Ob2RlICE9PSB1bmRlZmluZWQgJiYgZnJvbU5vZGUuaXNDbHVzdGVyID09PSB0cnVlKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRvTm9kZSA9PT0gdW5kZWZpbmVkIHx8IGZyb21Ob2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWRnZXNUb0RlbGV0ZS5wdXNoKGlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucmVtb3ZlKGVkZ2VzVG9EZWxldGUsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhZGQgYWxsIGVkZ2VzIGZyb20gZGF0YXNldCB0aGF0IGFyZSBub3QgaW4gdGhlIGNhY2hlZCBzdGF0ZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZE1pc3NpbmdFZGdlcygpIHtcbiAgICBjb25zdCBlZGdlc0RhdGEgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcztcbiAgICBpZiAoZWRnZXNEYXRhID09PSB1bmRlZmluZWQgfHwgZWRnZXNEYXRhID09PSBudWxsKSB7XG4gICAgICByZXR1cm47IC8vIE5vIGVkZ2VzIERhdGFTZXQgeWV0OyBjYW4gaGFwcGVuIG9uIHN0YXJ0dXBcbiAgICB9XG5cbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBhZGRJZHMgPSBbXTtcblxuICAgIGVkZ2VzRGF0YS5mb3JFYWNoKChlZGdlRGF0YSwgZWRnZUlkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUlkXTtcbiAgICAgIGlmIChlZGdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWRkSWRzLnB1c2goZWRnZUlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYWRkKGFkZElkcywgdHJ1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRWRnZXNIYW5kbGVyO1xuIiwgImltcG9ydCB7IEFsZWEgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogQmFybmVzIEh1dCBTb2x2ZXJcbiAqL1xuY2xhc3MgQmFybmVzSHV0U29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5iYXJuZXNIdXRUcmVlO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB0aGlzLl9ybmcgPSBBbGVhKFwiQkFSTkVTIEhVVCBTT0xWRVJcIik7XG5cbiAgICAvLyBkZWJ1Zzogc2hvdyBncmlkXG4gICAgLy8gdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJhZnRlckRyYXdpbmdcIiwgKGN0eCkgPT4ge3RoaXMuX2RlYnVnKGN0eCwnI2ZmMDAwMCcpfSlcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnRoZXRhSW52ZXJzZWQgPSAxIC8gdGhpcy5vcHRpb25zLnRoZXRhO1xuXG4gICAgLy8gaWYgMSB0aGVuIG1pbiBkaXN0YW5jZSA9IDAuNSwgaWYgMC41IHRoZW4gbWluIGRpc3RhbmNlID0gMC41ICsgMC41Km5vZGUuc2hhcGUucmFkaXVzXG4gICAgdGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yID1cbiAgICAgIDEgLSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0aGlzLm9wdGlvbnMuYXZvaWRPdmVybGFwKSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBmb3JjZXMgdGhlIG5vZGVzIGFwcGx5IG9uIGVhY2ggb3RoZXIgYmFzZWQgb24gYSBncmF2aXRhdGlvbmFsIG1vZGVsLlxuICAgKiBUaGUgQmFybmVzIEh1dCBtZXRob2QgaXMgdXNlZCB0byBzcGVlZCB1cCB0aGlzIE4tYm9keSBzaW11bGF0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLmdyYXZpdGF0aW9uYWxDb25zdGFudCAhPT0gMCAmJlxuICAgICAgdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgICBjb25zdCBub2RlQ291bnQgPSBub2RlSW5kaWNlcy5sZW5ndGg7XG5cbiAgICAgIC8vIGNyZWF0ZSB0aGUgdHJlZVxuICAgICAgY29uc3QgYmFybmVzSHV0VHJlZSA9IHRoaXMuX2Zvcm1CYXJuZXNIdXRUcmVlKG5vZGVzLCBub2RlSW5kaWNlcyk7XG5cbiAgICAgIC8vIGZvciBkZWJ1Z2dpbmdcbiAgICAgIHRoaXMuYmFybmVzSHV0VHJlZSA9IGJhcm5lc0h1dFRyZWU7XG5cbiAgICAgIC8vIHBsYWNlIHRoZSBub2RlcyBvbmUgYnkgb25lIHJlY3Vyc2l2ZWx5XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVDb3VudDsgaSsrKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tub2RlSW5kaWNlc1tpXV07XG4gICAgICAgIGlmIChub2RlLm9wdGlvbnMubWFzcyA+IDApIHtcbiAgICAgICAgICAvLyBzdGFydGluZyB3aXRoIHJvb3QgaXMgaXJyZWxldmFudCwgaXQgbmV2ZXIgcGFzc2VzIHRoZSBCYXJuZXNIdXRTb2x2ZXIgY29uZGl0aW9uXG4gICAgICAgICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb25zKGJhcm5lc0h1dFRyZWUucm9vdCwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudEJyYW5jaFxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRGb3JjZUNvbnRyaWJ1dGlvbnMocGFyZW50QnJhbmNoLCBub2RlKSB7XG4gICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb24ocGFyZW50QnJhbmNoLmNoaWxkcmVuLk5XLCBub2RlKTtcbiAgICB0aGlzLl9nZXRGb3JjZUNvbnRyaWJ1dGlvbihwYXJlbnRCcmFuY2guY2hpbGRyZW4uTkUsIG5vZGUpO1xuICAgIHRoaXMuX2dldEZvcmNlQ29udHJpYnV0aW9uKHBhcmVudEJyYW5jaC5jaGlsZHJlbi5TVywgbm9kZSk7XG4gICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb24ocGFyZW50QnJhbmNoLmNoaWxkcmVuLlNFLCBub2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgYmFybmVzSHV0VHJlZS4gSXQgY2hlY2tzIHdoZW4gaXQgY2FuIGFwcHJveGltYXRlIGRpc3RhbnQgbm9kZXMgd2l0aCB0aGVpciBjZW50ZXIgb2YgbWFzcy5cbiAgICogSWYgYSByZWdpb24gY29udGFpbnMgYSBzaW5nbGUgbm9kZSwgd2UgY2hlY2sgaWYgaXQgaXMgbm90IGl0c2VsZiwgdGhlbiB3ZSBhcHBseSB0aGUgZm9yY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Rm9yY2VDb250cmlidXRpb24ocGFyZW50QnJhbmNoLCBub2RlKSB7XG4gICAgLy8gd2UgZ2V0IG5vIGZvcmNlIGNvbnRyaWJ1dGlvbiBmcm9tIGFuIGVtcHR5IHJlZ2lvblxuICAgIGlmIChwYXJlbnRCcmFuY2guY2hpbGRyZW5Db3VudCA+IDApIHtcbiAgICAgIC8vIGdldCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgY2VudGVyIG9mIG1hc3MgdG8gdGhlIG5vZGUuXG4gICAgICBjb25zdCBkeCA9IHBhcmVudEJyYW5jaC5jZW50ZXJPZk1hc3MueCAtIG5vZGUueDtcbiAgICAgIGNvbnN0IGR5ID0gcGFyZW50QnJhbmNoLmNlbnRlck9mTWFzcy55IC0gbm9kZS55O1xuICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICAvLyBCYXJuZXNIdXRTb2x2ZXIgY29uZGl0aW9uXG4gICAgICAvLyBvcmlnaW5hbCBjb25kaXRpb24gOiBzL2QgPCB0aGV0YSA9IHBhc3NlZCAgPT09ICBkL3MgPiAxL3RoZXRhID0gcGFzc2VkXG4gICAgICAvLyBjYWxjU2l6ZSA9IDEvcyAtLT4gZCAqIDEvcyA+IDEvdGhldGEgPSBwYXNzZWRcbiAgICAgIGlmIChkaXN0YW5jZSAqIHBhcmVudEJyYW5jaC5jYWxjU2l6ZSA+IHRoaXMudGhldGFJbnZlcnNlZCkge1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgbm9kZSwgcGFyZW50QnJhbmNoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERpZCBub3QgcGFzcyB0aGUgY29uZGl0aW9uLCBnbyBpbnRvIGNoaWxkcmVuIGlmIGF2YWlsYWJsZVxuICAgICAgICBpZiAocGFyZW50QnJhbmNoLmNoaWxkcmVuQ291bnQgPT09IDQpIHtcbiAgICAgICAgICB0aGlzLl9nZXRGb3JjZUNvbnRyaWJ1dGlvbnMocGFyZW50QnJhbmNoLCBub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBwYXJlbnRCcmFuY2ggbXVzdCBoYXZlIG9ubHkgb25lIG5vZGUsIGlmIGl0IHdhcyBlbXB0eSB3ZSB3b3VsZG50IGJlIGhlcmVcbiAgICAgICAgICBpZiAocGFyZW50QnJhbmNoLmNoaWxkcmVuLmRhdGEuaWQgIT0gbm9kZS5pZCkge1xuICAgICAgICAgICAgLy8gaWYgaXQgaXMgbm90IHNlbGZcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUZvcmNlcyhkaXN0YW5jZSwgZHgsIGR5LCBub2RlLCBwYXJlbnRCcmFuY2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGZvcmNlcyBiYXNlZCBvbiB0aGUgZGlzdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxuICAgKiBAcGFyYW0ge251bWJlcn0gZHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGR5XG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2FsY3VsYXRlRm9yY2VzKGRpc3RhbmNlLCBkeCwgZHksIG5vZGUsIHBhcmVudEJyYW5jaCkge1xuICAgIGlmIChkaXN0YW5jZSA9PT0gMCkge1xuICAgICAgZGlzdGFuY2UgPSAwLjE7XG4gICAgICBkeCA9IGRpc3RhbmNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm92ZXJsYXBBdm9pZGFuY2VGYWN0b3IgPCAxICYmIG5vZGUuc2hhcGUucmFkaXVzKSB7XG4gICAgICBkaXN0YW5jZSA9IE1hdGgubWF4KFxuICAgICAgICAwLjEgKyB0aGlzLm92ZXJsYXBBdm9pZGFuY2VGYWN0b3IgKiBub2RlLnNoYXBlLnJhZGl1cyxcbiAgICAgICAgZGlzdGFuY2UgLSBub2RlLnNoYXBlLnJhZGl1c1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgZGl2aWRpbmcgYnkgdGhlIGRpc3RhbmNlIGN1YmVkIGluc3RlYWQgb2Ygc3F1YXJlZCBhbGxvd3MgdXMgdG8gZ2V0IHRoZSBmeCBhbmQgZnkgY29tcG9uZW50cyB3aXRob3V0IHNpbmVzIGFuZCBjb3NpbmVzXG4gICAgLy8gaXQgaXMgc2hvcnRoYW5kIGZvciBncmF2aXR5Zm9yY2Ugd2l0aCBkaXN0YW5jZSBzcXVhcmVkIGFuZCBmeCA9IGR4L2Rpc3RhbmNlICogZ3Jhdml0eUZvcmNlXG4gICAgY29uc3QgZ3Jhdml0eUZvcmNlID1cbiAgICAgICh0aGlzLm9wdGlvbnMuZ3Jhdml0YXRpb25hbENvbnN0YW50ICpcbiAgICAgICAgcGFyZW50QnJhbmNoLm1hc3MgKlxuICAgICAgICBub2RlLm9wdGlvbnMubWFzcykgL1xuICAgICAgTWF0aC5wb3coZGlzdGFuY2UsIDMpO1xuICAgIGNvbnN0IGZ4ID0gZHggKiBncmF2aXR5Rm9yY2U7XG4gICAgY29uc3QgZnkgPSBkeSAqIGdyYXZpdHlGb3JjZTtcblxuICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUuaWRdLnggKz0gZng7XG4gICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZS5pZF0ueSArPSBmeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNvbnN0cnVjdHMgdGhlIGJhcm5lc0h1dCB0cmVlIHJlY3Vyc2l2ZWx5LiBJdCBjcmVhdGVzIHRoZSByb290LCBzcGxpdHMgaXQgYW5kIHN0YXJ0cyBwbGFjaW5nIHRoZSBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG5vZGVJbmRpY2VzXG4gICAqIEByZXR1cm5zIHt7cm9vdDoge2NlbnRlck9mTWFzczoge3g6IG51bWJlciwgeTogbnVtYmVyfSwgbWFzczogbnVtYmVyLCByYW5nZToge21pblg6IG51bWJlciwgbWF4WDogbnVtYmVyLCBtaW5ZOiBudW1iZXIsIG1heFk6IG51bWJlcn0sIHNpemU6IG51bWJlciwgY2FsY1NpemU6IG51bWJlciwgY2hpbGRyZW46IHtkYXRhOiBudWxsfSwgbWF4V2lkdGg6IG51bWJlciwgbGV2ZWw6IG51bWJlciwgY2hpbGRyZW5Db3VudDogbnVtYmVyfX19IEJhcm5lc0h1dFRyZWVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9mb3JtQmFybmVzSHV0VHJlZShub2Rlcywgbm9kZUluZGljZXMpIHtcbiAgICBsZXQgbm9kZTtcbiAgICBjb25zdCBub2RlQ291bnQgPSBub2RlSW5kaWNlcy5sZW5ndGg7XG5cbiAgICBsZXQgbWluWCA9IG5vZGVzW25vZGVJbmRpY2VzWzBdXS54O1xuICAgIGxldCBtaW5ZID0gbm9kZXNbbm9kZUluZGljZXNbMF1dLnk7XG4gICAgbGV0IG1heFggPSBub2Rlc1tub2RlSW5kaWNlc1swXV0ueDtcbiAgICBsZXQgbWF4WSA9IG5vZGVzW25vZGVJbmRpY2VzWzBdXS55O1xuXG4gICAgLy8gZ2V0IHRoZSByYW5nZSBvZiB0aGUgbm9kZXNcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IG5vZGVDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgY29uc3QgeCA9IG5vZGUueDtcbiAgICAgIGNvbnN0IHkgPSBub2RlLnk7XG4gICAgICBpZiAobm9kZS5vcHRpb25zLm1hc3MgPiAwKSB7XG4gICAgICAgIGlmICh4IDwgbWluWCkge1xuICAgICAgICAgIG1pblggPSB4O1xuICAgICAgICB9XG4gICAgICAgIGlmICh4ID4gbWF4WCkge1xuICAgICAgICAgIG1heFggPSB4O1xuICAgICAgICB9XG4gICAgICAgIGlmICh5IDwgbWluWSkge1xuICAgICAgICAgIG1pblkgPSB5O1xuICAgICAgICB9XG4gICAgICAgIGlmICh5ID4gbWF4WSkge1xuICAgICAgICAgIG1heFkgPSB5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG1ha2UgdGhlIHJhbmdlIGEgc3F1YXJlXG4gICAgY29uc3Qgc2l6ZURpZmYgPSBNYXRoLmFicyhtYXhYIC0gbWluWCkgLSBNYXRoLmFicyhtYXhZIC0gbWluWSk7IC8vIGRpZmZlcmVuY2UgYmV0d2VlbiBYIGFuZCBZXG4gICAgaWYgKHNpemVEaWZmID4gMCkge1xuICAgICAgbWluWSAtPSAwLjUgKiBzaXplRGlmZjtcbiAgICAgIG1heFkgKz0gMC41ICogc2l6ZURpZmY7XG4gICAgfSAvLyB4U2l6ZSA+IHlTaXplXG4gICAgZWxzZSB7XG4gICAgICBtaW5YICs9IDAuNSAqIHNpemVEaWZmO1xuICAgICAgbWF4WCAtPSAwLjUgKiBzaXplRGlmZjtcbiAgICB9IC8vIHhTaXplIDwgeVNpemVcblxuICAgIGNvbnN0IG1pbmltdW1UcmVlU2l6ZSA9IDFlLTU7XG4gICAgY29uc3Qgcm9vdFNpemUgPSBNYXRoLm1heChtaW5pbXVtVHJlZVNpemUsIE1hdGguYWJzKG1heFggLSBtaW5YKSk7XG4gICAgY29uc3QgaGFsZlJvb3RTaXplID0gMC41ICogcm9vdFNpemU7XG4gICAgY29uc3QgY2VudGVyWCA9IDAuNSAqIChtaW5YICsgbWF4WCksXG4gICAgICBjZW50ZXJZID0gMC41ICogKG1pblkgKyBtYXhZKTtcblxuICAgIC8vIGNvbnN0cnVjdCB0aGUgYmFybmVzSHV0VHJlZVxuICAgIGNvbnN0IGJhcm5lc0h1dFRyZWUgPSB7XG4gICAgICByb290OiB7XG4gICAgICAgIGNlbnRlck9mTWFzczogeyB4OiAwLCB5OiAwIH0sXG4gICAgICAgIG1hc3M6IDAsXG4gICAgICAgIHJhbmdlOiB7XG4gICAgICAgICAgbWluWDogY2VudGVyWCAtIGhhbGZSb290U2l6ZSxcbiAgICAgICAgICBtYXhYOiBjZW50ZXJYICsgaGFsZlJvb3RTaXplLFxuICAgICAgICAgIG1pblk6IGNlbnRlclkgLSBoYWxmUm9vdFNpemUsXG4gICAgICAgICAgbWF4WTogY2VudGVyWSArIGhhbGZSb290U2l6ZSxcbiAgICAgICAgfSxcbiAgICAgICAgc2l6ZTogcm9vdFNpemUsXG4gICAgICAgIGNhbGNTaXplOiAxIC8gcm9vdFNpemUsXG4gICAgICAgIGNoaWxkcmVuOiB7IGRhdGE6IG51bGwgfSxcbiAgICAgICAgbWF4V2lkdGg6IDAsXG4gICAgICAgIGxldmVsOiAwLFxuICAgICAgICBjaGlsZHJlbkNvdW50OiA0LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuX3NwbGl0QnJhbmNoKGJhcm5lc0h1dFRyZWUucm9vdCk7XG5cbiAgICAvLyBwbGFjZSB0aGUgbm9kZXMgb25lIGJ5IG9uZSByZWN1cnNpdmVseVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUNvdW50OyBpKyspIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tub2RlSW5kaWNlc1tpXV07XG4gICAgICBpZiAobm9kZS5vcHRpb25zLm1hc3MgPiAwKSB7XG4gICAgICAgIHRoaXMuX3BsYWNlSW5UcmVlKGJhcm5lc0h1dFRyZWUucm9vdCwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbWFrZSBnbG9iYWxcbiAgICByZXR1cm4gYmFybmVzSHV0VHJlZTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIHVwZGF0ZXMgdGhlIG1hc3Mgb2YgYSBicmFuY2guIHRoaXMgaXMgaW5jcmVhc2VkIGJ5IGFkZGluZyBhIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlQnJhbmNoTWFzcyhwYXJlbnRCcmFuY2gsIG5vZGUpIHtcbiAgICBjb25zdCBjZW50ZXJPZk1hc3MgPSBwYXJlbnRCcmFuY2guY2VudGVyT2ZNYXNzO1xuICAgIGNvbnN0IHRvdGFsTWFzcyA9IHBhcmVudEJyYW5jaC5tYXNzICsgbm9kZS5vcHRpb25zLm1hc3M7XG4gICAgY29uc3QgdG90YWxNYXNzSW52ID0gMSAvIHRvdGFsTWFzcztcblxuICAgIGNlbnRlck9mTWFzcy54ID1cbiAgICAgIGNlbnRlck9mTWFzcy54ICogcGFyZW50QnJhbmNoLm1hc3MgKyBub2RlLnggKiBub2RlLm9wdGlvbnMubWFzcztcbiAgICBjZW50ZXJPZk1hc3MueCAqPSB0b3RhbE1hc3NJbnY7XG5cbiAgICBjZW50ZXJPZk1hc3MueSA9XG4gICAgICBjZW50ZXJPZk1hc3MueSAqIHBhcmVudEJyYW5jaC5tYXNzICsgbm9kZS55ICogbm9kZS5vcHRpb25zLm1hc3M7XG4gICAgY2VudGVyT2ZNYXNzLnkgKj0gdG90YWxNYXNzSW52O1xuXG4gICAgcGFyZW50QnJhbmNoLm1hc3MgPSB0b3RhbE1hc3M7XG4gICAgY29uc3QgYmlnZ2VzdFNpemUgPSBNYXRoLm1heChcbiAgICAgIE1hdGgubWF4KG5vZGUuaGVpZ2h0LCBub2RlLnJhZGl1cyksXG4gICAgICBub2RlLndpZHRoXG4gICAgKTtcbiAgICBwYXJlbnRCcmFuY2gubWF4V2lkdGggPVxuICAgICAgcGFyZW50QnJhbmNoLm1heFdpZHRoIDwgYmlnZ2VzdFNpemUgPyBiaWdnZXN0U2l6ZSA6IHBhcmVudEJyYW5jaC5tYXhXaWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBkZXRlcm1pbmUgaW4gd2hpY2ggYnJhbmNoIHRoZSBub2RlIHdpbGwgYmUgcGxhY2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNraXBNYXNzVXBkYXRlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGxhY2VJblRyZWUocGFyZW50QnJhbmNoLCBub2RlLCBza2lwTWFzc1VwZGF0ZSkge1xuICAgIGlmIChza2lwTWFzc1VwZGF0ZSAhPSB0cnVlIHx8IHNraXBNYXNzVXBkYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHVwZGF0ZSB0aGUgbWFzcyBvZiB0aGUgYnJhbmNoLlxuICAgICAgdGhpcy5fdXBkYXRlQnJhbmNoTWFzcyhwYXJlbnRCcmFuY2gsIG5vZGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gcGFyZW50QnJhbmNoLmNoaWxkcmVuLk5XLnJhbmdlO1xuICAgIGxldCByZWdpb247XG4gICAgaWYgKHJhbmdlLm1heFggPiBub2RlLngpIHtcbiAgICAgIC8vIGluIE5XIG9yIFNXXG4gICAgICBpZiAocmFuZ2UubWF4WSA+IG5vZGUueSkge1xuICAgICAgICByZWdpb24gPSBcIk5XXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWdpb24gPSBcIlNXXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluIE5FIG9yIFNFXG4gICAgICBpZiAocmFuZ2UubWF4WSA+IG5vZGUueSkge1xuICAgICAgICByZWdpb24gPSBcIk5FXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWdpb24gPSBcIlNFXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcGxhY2VJblJlZ2lvbihwYXJlbnRCcmFuY2gsIG5vZGUsIHJlZ2lvbik7XG4gIH1cblxuICAvKipcbiAgICogYWN0dWFsbHkgcGxhY2UgdGhlIG5vZGUgaW4gYSByZWdpb24gKG9yIGJyYW5jaClcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudEJyYW5jaFxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHsnTlcnfCAnTkUnIHwgJ1NXJyB8ICdTRSd9IHJlZ2lvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BsYWNlSW5SZWdpb24ocGFyZW50QnJhbmNoLCBub2RlLCByZWdpb24pIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudEJyYW5jaC5jaGlsZHJlbltyZWdpb25dO1xuXG4gICAgc3dpdGNoIChjaGlsZHJlbi5jaGlsZHJlbkNvdW50KSB7XG4gICAgICBjYXNlIDA6IC8vIHBsYWNlIG5vZGUgaGVyZVxuICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5kYXRhID0gbm9kZTtcbiAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW5Db3VudCA9IDE7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUJyYW5jaE1hc3MoY2hpbGRyZW4sIG5vZGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTogLy8gY29udmVydCBpbnRvIGNoaWxkcmVuXG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSB0d28gbm9kZXMgZXhhY3RseSBvdmVybGFwcGluZyAob24gaW5pdCwgb24gb3BlbmluZyBvZiBjbHVzdGVyIGV0Yy4pXG4gICAgICAgIC8vIHdlIG1vdmUgb25lIG5vZGUgYSBsaXR0bGUgYml0IGFuZCB3ZSBkbyBub3QgcHV0IGl0IGluIHRoZSB0cmVlLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4uZGF0YS54ID09PSBub2RlLnggJiZcbiAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5kYXRhLnkgPT09IG5vZGUueVxuICAgICAgICApIHtcbiAgICAgICAgICBub2RlLnggKz0gdGhpcy5fcm5nKCk7XG4gICAgICAgICAgbm9kZS55ICs9IHRoaXMuX3JuZygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3NwbGl0QnJhbmNoKGNoaWxkcmVuKTtcbiAgICAgICAgICB0aGlzLl9wbGFjZUluVHJlZShjaGlsZHJlbiwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6IC8vIHBsYWNlIGluIGJyYW5jaFxuICAgICAgICB0aGlzLl9wbGFjZUluVHJlZShjaGlsZHJlbiwgbm9kZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGZ1bmN0aW9uIHNwbGl0cyBhIGJyYW5jaCBpbnRvIDQgc3ViIGJyYW5jaGVzLiBJZiB0aGUgYnJhbmNoIGNvbnRhaW5lZCBhIG5vZGUsIHdlIHBsYWNlIGl0IGluIHRoZSBzdWJicmFuY2hcbiAgICogYWZ0ZXIgdGhlIHNwbGl0IGlzIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3BsaXRCcmFuY2gocGFyZW50QnJhbmNoKSB7XG4gICAgLy8gaWYgdGhlIGJyYW5jaCBpcyBzaGFkZWQgd2l0aCBhIG5vZGUsIHJlcGxhY2UgdGhlIG5vZGUgaW4gdGhlIG5ldyBzdWJzZXQuXG4gICAgbGV0IGNvbnRhaW5lZE5vZGUgPSBudWxsO1xuICAgIGlmIChwYXJlbnRCcmFuY2guY2hpbGRyZW5Db3VudCA9PT0gMSkge1xuICAgICAgY29udGFpbmVkTm9kZSA9IHBhcmVudEJyYW5jaC5jaGlsZHJlbi5kYXRhO1xuICAgICAgcGFyZW50QnJhbmNoLm1hc3MgPSAwO1xuICAgICAgcGFyZW50QnJhbmNoLmNlbnRlck9mTWFzcy54ID0gMDtcbiAgICAgIHBhcmVudEJyYW5jaC5jZW50ZXJPZk1hc3MueSA9IDA7XG4gICAgfVxuICAgIHBhcmVudEJyYW5jaC5jaGlsZHJlbkNvdW50ID0gNDtcbiAgICBwYXJlbnRCcmFuY2guY2hpbGRyZW4uZGF0YSA9IG51bGw7XG4gICAgdGhpcy5faW5zZXJ0UmVnaW9uKHBhcmVudEJyYW5jaCwgXCJOV1wiKTtcbiAgICB0aGlzLl9pbnNlcnRSZWdpb24ocGFyZW50QnJhbmNoLCBcIk5FXCIpO1xuICAgIHRoaXMuX2luc2VydFJlZ2lvbihwYXJlbnRCcmFuY2gsIFwiU1dcIik7XG4gICAgdGhpcy5faW5zZXJ0UmVnaW9uKHBhcmVudEJyYW5jaCwgXCJTRVwiKTtcblxuICAgIGlmIChjb250YWluZWROb2RlICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3BsYWNlSW5UcmVlKHBhcmVudEJyYW5jaCwgY29udGFpbmVkTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gc3ViZGl2aWRlcyB0aGUgcmVnaW9uIGludG8gZm91ciBuZXcgc2VnbWVudHMuXG4gICAqIFNwZWNpZmljYWxseSwgdGhpcyBpbnNlcnRzIGEgc2luZ2xlIG5ldyBzZWdtZW50LlxuICAgKiBJdCBmaWxscyB0aGUgY2hpbGRyZW4gc2VjdGlvbiBvZiB0aGUgcGFyZW50QnJhbmNoXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHsnTlcnfCAnTkUnIHwgJ1NXJyB8ICdTRSd9IHJlZ2lvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luc2VydFJlZ2lvbihwYXJlbnRCcmFuY2gsIHJlZ2lvbikge1xuICAgIGxldCBtaW5YLCBtYXhYLCBtaW5ZLCBtYXhZO1xuICAgIGNvbnN0IGNoaWxkU2l6ZSA9IDAuNSAqIHBhcmVudEJyYW5jaC5zaXplO1xuICAgIHN3aXRjaCAocmVnaW9uKSB7XG4gICAgICBjYXNlIFwiTldcIjpcbiAgICAgICAgbWluWCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YO1xuICAgICAgICBtYXhYID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblggKyBjaGlsZFNpemU7XG4gICAgICAgIG1pblkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWTtcbiAgICAgICAgbWF4WSA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5ZICsgY2hpbGRTaXplO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJORVwiOlxuICAgICAgICBtaW5YID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblggKyBjaGlsZFNpemU7XG4gICAgICAgIG1heFggPSBwYXJlbnRCcmFuY2gucmFuZ2UubWF4WDtcbiAgICAgICAgbWluWSA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5ZO1xuICAgICAgICBtYXhZID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblkgKyBjaGlsZFNpemU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlNXXCI6XG4gICAgICAgIG1pblggPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWDtcbiAgICAgICAgbWF4WCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YICsgY2hpbGRTaXplO1xuICAgICAgICBtaW5ZID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblkgKyBjaGlsZFNpemU7XG4gICAgICAgIG1heFkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWF4WTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiU0VcIjpcbiAgICAgICAgbWluWCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YICsgY2hpbGRTaXplO1xuICAgICAgICBtYXhYID0gcGFyZW50QnJhbmNoLnJhbmdlLm1heFg7XG4gICAgICAgIG1pblkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWSArIGNoaWxkU2l6ZTtcbiAgICAgICAgbWF4WSA9IHBhcmVudEJyYW5jaC5yYW5nZS5tYXhZO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBwYXJlbnRCcmFuY2guY2hpbGRyZW5bcmVnaW9uXSA9IHtcbiAgICAgIGNlbnRlck9mTWFzczogeyB4OiAwLCB5OiAwIH0sXG4gICAgICBtYXNzOiAwLFxuICAgICAgcmFuZ2U6IHsgbWluWDogbWluWCwgbWF4WDogbWF4WCwgbWluWTogbWluWSwgbWF4WTogbWF4WSB9LFxuICAgICAgc2l6ZTogMC41ICogcGFyZW50QnJhbmNoLnNpemUsXG4gICAgICBjYWxjU2l6ZTogMiAqIHBhcmVudEJyYW5jaC5jYWxjU2l6ZSxcbiAgICAgIGNoaWxkcmVuOiB7IGRhdGE6IG51bGwgfSxcbiAgICAgIG1heFdpZHRoOiAwLFxuICAgICAgbGV2ZWw6IHBhcmVudEJyYW5jaC5sZXZlbCArIDEsXG4gICAgICBjaGlsZHJlbkNvdW50OiAwLFxuICAgIH07XG4gIH1cblxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVCVUdHSU5HIEJFTE9XICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZWQsIGl0IGRyYXdzIHRoZSB0cmVlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RlYnVnKGN0eCwgY29sb3IpIHtcbiAgICBpZiAodGhpcy5iYXJuZXNIdXRUcmVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGN0eC5saW5lV2lkdGggPSAxO1xuXG4gICAgICB0aGlzLl9kcmF3QnJhbmNoKHRoaXMuYmFybmVzSHV0VHJlZS5yb290LCBjdHgsIGNvbG9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBJdCBkcmF3cyB0aGUgYnJhbmNoZXMgcmVjdXJzaXZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBicmFuY2hcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3QnJhbmNoKGJyYW5jaCwgY3R4LCBjb2xvcikge1xuICAgIGlmIChjb2xvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IFwiI0ZGMDAwMFwiO1xuICAgIH1cblxuICAgIGlmIChicmFuY2guY2hpbGRyZW5Db3VudCA9PT0gNCkge1xuICAgICAgdGhpcy5fZHJhd0JyYW5jaChicmFuY2guY2hpbGRyZW4uTlcsIGN0eCk7XG4gICAgICB0aGlzLl9kcmF3QnJhbmNoKGJyYW5jaC5jaGlsZHJlbi5ORSwgY3R4KTtcbiAgICAgIHRoaXMuX2RyYXdCcmFuY2goYnJhbmNoLmNoaWxkcmVuLlNFLCBjdHgpO1xuICAgICAgdGhpcy5fZHJhd0JyYW5jaChicmFuY2guY2hpbGRyZW4uU1csIGN0eCk7XG4gICAgfVxuICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5taW5YLCBicmFuY2gucmFuZ2UubWluWSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWF4WCwgYnJhbmNoLnJhbmdlLm1pblkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5tYXhYLCBicmFuY2gucmFuZ2UubWluWSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWF4WCwgYnJhbmNoLnJhbmdlLm1heFkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5tYXhYLCBicmFuY2gucmFuZ2UubWF4WSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWluWCwgYnJhbmNoLnJhbmdlLm1heFkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5taW5YLCBicmFuY2gucmFuZ2UubWF4WSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWluWCwgYnJhbmNoLnJhbmdlLm1pblkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIC8qXG4gICAgIGlmIChicmFuY2gubWFzcyA+IDApIHtcbiAgICAgY3R4LmNpcmNsZShicmFuY2guY2VudGVyT2ZNYXNzLngsIGJyYW5jaC5jZW50ZXJPZk1hc3MueSwgMypicmFuY2gubWFzcyk7XG4gICAgIGN0eC5zdHJva2UoKTtcbiAgICAgfVxuICAgICAqL1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhcm5lc0h1dFNvbHZlcjtcbiIsICJpbXBvcnQgeyBBbGVhIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIFJlcHVsc2lvbiBTb2x2ZXJcbiAqL1xuY2xhc3MgUmVwdWxzaW9uU29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5fcm5nID0gQWxlYShcIlJFUFVMU0lPTiBTT0xWRVJcIik7XG5cbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucGh5c2ljc0JvZHkgPSBwaHlzaWNzQm9keTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgdGhlIG5vZGVzIGFwcGx5IG9uIGVhY2ggb3RoZXIgYmFzZWQgb24gYSByZXB1bHNpb24gZmllbGQuXG4gICAqIFRoaXMgZmllbGQgaXMgbGluZWFybHkgYXBwcm94aW1hdGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgbGV0IGR4LCBkeSwgZGlzdGFuY2UsIGZ4LCBmeSwgcmVwdWxzaW5nRm9yY2UsIG5vZGUxLCBub2RlMjtcblxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgY29uc3QgZm9yY2VzID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXM7XG5cbiAgICAvLyByZXB1bHNpbmcgZm9yY2VzIGJldHdlZW4gbm9kZXNcbiAgICBjb25zdCBub2RlRGlzdGFuY2UgPSB0aGlzLm9wdGlvbnMubm9kZURpc3RhbmNlO1xuXG4gICAgLy8gYXBwcm94aW1hdGlvbiBjb25zdGFudHNcbiAgICBjb25zdCBhID0gLTIgLyAzIC8gbm9kZURpc3RhbmNlO1xuICAgIGNvbnN0IGIgPSA0IC8gMztcblxuICAgIC8vIHdlIGxvb3AgZnJvbSBpIG92ZXIgYWxsIGJ1dCB0aGUgbGFzdCBlbnRyZWUgaW4gdGhlIGFycmF5XG4gICAgLy8gaiBsb29wcyBmcm9tIGkrMSB0byB0aGUgbGFzdC4gVGhpcyB3YXkgd2UgZG8gbm90IGRvdWJsZSBjb3VudCBhbnkgb2YgdGhlIGluZGljZXMsIG5vciBpID09PSBqXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIG5vZGUxID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgbm9kZUluZGljZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgbm9kZTIgPSBub2Rlc1tub2RlSW5kaWNlc1tqXV07XG5cbiAgICAgICAgZHggPSBub2RlMi54IC0gbm9kZTEueDtcbiAgICAgICAgZHkgPSBub2RlMi55IC0gbm9kZTEueTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICAgIC8vIHNhbWUgY29uZGl0aW9uIGFzIEJhcm5lc0h1dFNvbHZlciwgbWFraW5nIHN1cmUgbm9kZXMgYXJlIG5ldmVyIDEwMCUgb3ZlcmxhcHBpbmcuXG4gICAgICAgIGlmIChkaXN0YW5jZSA9PT0gMCkge1xuICAgICAgICAgIGRpc3RhbmNlID0gMC4xICogdGhpcy5fcm5nKCk7XG4gICAgICAgICAgZHggPSBkaXN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXN0YW5jZSA8IDIgKiBub2RlRGlzdGFuY2UpIHtcbiAgICAgICAgICBpZiAoZGlzdGFuY2UgPCAwLjUgKiBub2RlRGlzdGFuY2UpIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID0gMS4wO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXB1bHNpbmdGb3JjZSA9IGEgKiBkaXN0YW5jZSArIGI7IC8vIGxpbmVhciBhcHByb3ggb2YgIDEgLyAoMSArIE1hdGguZXhwKChkaXN0YW5jZSAvIG5vZGVEaXN0YW5jZSAtIDEpICogc3RlZXBuZXNzKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVwdWxzaW5nRm9yY2UgPSByZXB1bHNpbmdGb3JjZSAvIGRpc3RhbmNlO1xuXG4gICAgICAgICAgZnggPSBkeCAqIHJlcHVsc2luZ0ZvcmNlO1xuICAgICAgICAgIGZ5ID0gZHkgKiByZXB1bHNpbmdGb3JjZTtcblxuICAgICAgICAgIGZvcmNlc1tub2RlMS5pZF0ueCAtPSBmeDtcbiAgICAgICAgICBmb3JjZXNbbm9kZTEuaWRdLnkgLT0gZnk7XG4gICAgICAgICAgZm9yY2VzW25vZGUyLmlkXS54ICs9IGZ4O1xuICAgICAgICAgIGZvcmNlc1tub2RlMi5pZF0ueSArPSBmeTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXB1bHNpb25Tb2x2ZXI7XG4iLCAiLyoqXG4gKiBIaWVyYXJjaGljYWwgUmVwdWxzaW9uIFNvbHZlclxuICovXG5jbGFzcyBIaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHt7cGh5c2ljc05vZGVJbmRpY2VzOiBBcnJheSwgcGh5c2ljc0VkZ2VJbmRpY2VzOiBBcnJheSwgZm9yY2VzOiB7fSwgdmVsb2NpdGllczoge319fSBwaHlzaWNzQm9keVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucGh5c2ljc0JvZHkgPSBwaHlzaWNzQm9keTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oMSwgdGhpcy5vcHRpb25zLmF2b2lkT3ZlcmxhcCB8fCAwKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgdGhlIG5vZGVzIGFwcGx5IG9uIGVhY2ggb3RoZXIgYmFzZWQgb24gYSByZXB1bHNpb24gZmllbGQuXG4gICAqIFRoaXMgZmllbGQgaXMgbGluZWFybHkgYXBwcm94aW1hdGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3Qgbm9kZUluZGljZXMgPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlcztcbiAgICBjb25zdCBmb3JjZXMgPSB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlcztcblxuICAgIC8vIHJlcHVsc2luZyBmb3JjZXMgYmV0d2VlbiBub2Rlc1xuICAgIGNvbnN0IG5vZGVEaXN0YW5jZSA9IHRoaXMub3B0aW9ucy5ub2RlRGlzdGFuY2U7XG5cbiAgICAvLyB3ZSBsb29wIGZyb20gaSBvdmVyIGFsbCBidXQgdGhlIGxhc3QgZW50cmVlIGluIHRoZSBhcnJheVxuICAgIC8vIGogbG9vcHMgZnJvbSBpKzEgdG8gdGhlIGxhc3QuIFRoaXMgd2F5IHdlIGRvIG5vdCBkb3VibGUgY291bnQgYW55IG9mIHRoZSBpbmRpY2VzLCBub3IgaSA9PT0galxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlMSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IG5vZGUyID0gbm9kZXNbbm9kZUluZGljZXNbal1dO1xuXG4gICAgICAgIC8vIG5vZGVzIG9ubHkgYWZmZWN0IG5vZGVzIG9uIHRoZWlyIGxldmVsXG4gICAgICAgIGlmIChub2RlMS5sZXZlbCA9PT0gbm9kZTIubGV2ZWwpIHtcbiAgICAgICAgICBjb25zdCB0aGVzZU5vZGVzRGlzdGFuY2UgPVxuICAgICAgICAgICAgbm9kZURpc3RhbmNlICtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxhcEF2b2lkYW5jZUZhY3RvciAqXG4gICAgICAgICAgICAgICgobm9kZTEuc2hhcGUucmFkaXVzIHx8IDApIC8gMiArIChub2RlMi5zaGFwZS5yYWRpdXMgfHwgMCkgLyAyKTtcblxuICAgICAgICAgIGNvbnN0IGR4ID0gbm9kZTIueCAtIG5vZGUxLng7XG4gICAgICAgICAgY29uc3QgZHkgPSBub2RlMi55IC0gbm9kZTEueTtcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICAgICAgICBjb25zdCBzdGVlcG5lc3MgPSAwLjA1O1xuICAgICAgICAgIGxldCByZXB1bHNpbmdGb3JjZTtcbiAgICAgICAgICBpZiAoZGlzdGFuY2UgPCB0aGVzZU5vZGVzRGlzdGFuY2UpIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID1cbiAgICAgICAgICAgICAgLU1hdGgucG93KHN0ZWVwbmVzcyAqIGRpc3RhbmNlLCAyKSArXG4gICAgICAgICAgICAgIE1hdGgucG93KHN0ZWVwbmVzcyAqIHRoZXNlTm9kZXNEaXN0YW5jZSwgMik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbm9ybWFsaXplIGZvcmNlIHdpdGhcbiAgICAgICAgICBpZiAoZGlzdGFuY2UgIT09IDApIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID0gcmVwdWxzaW5nRm9yY2UgLyBkaXN0YW5jZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZnggPSBkeCAqIHJlcHVsc2luZ0ZvcmNlO1xuICAgICAgICAgIGNvbnN0IGZ5ID0gZHkgKiByZXB1bHNpbmdGb3JjZTtcblxuICAgICAgICAgIGZvcmNlc1tub2RlMS5pZF0ueCAtPSBmeDtcbiAgICAgICAgICBmb3JjZXNbbm9kZTEuaWRdLnkgLT0gZnk7XG4gICAgICAgICAgZm9yY2VzW25vZGUyLmlkXS54ICs9IGZ4O1xuICAgICAgICAgIGZvcmNlc1tub2RlMi5pZF0ueSArPSBmeTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXI7XG4iLCAiLyoqXG4gKiBTcHJpbmcgU29sdmVyXG4gKi9cbmNsYXNzIFNwcmluZ1NvbHZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge3twaHlzaWNzTm9kZUluZGljZXM6IEFycmF5LCBwaHlzaWNzRWRnZUluZGljZXM6IEFycmF5LCBmb3JjZXM6IHt9LCB2ZWxvY2l0aWVzOiB7fX19IHBoeXNpY3NCb2R5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waHlzaWNzQm9keSA9IHBoeXNpY3NCb2R5O1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHNwcmluZ2ZvcmNlcyBvbiB0aGUgbm9kZXMsIGFjY291bnRpbmcgZm9yIHRoZSBzdXBwb3J0IG5vZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgbGV0IGVkZ2VMZW5ndGgsIGVkZ2U7XG4gICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NFZGdlSW5kaWNlcztcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBsZXQgbm9kZTEsIG5vZGUyLCBub2RlMztcblxuICAgIC8vIGZvcmNlcyBjYXVzZWQgYnkgdGhlIGVkZ2VzLCBtb2RlbGxlZCBhcyBzcHJpbmdzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZWRnZSA9IGVkZ2VzW2VkZ2VJbmRpY2VzW2ldXTtcbiAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCA9PT0gdHJ1ZSAmJiBlZGdlLnRvSWQgIT09IGVkZ2UuZnJvbUlkKSB7XG4gICAgICAgIC8vIG9ubHkgY2FsY3VsYXRlIGZvcmNlcyBpZiBub2RlcyBhcmUgaW4gdGhlIHNhbWUgc2VjdG9yXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbZWRnZS50b0lkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW2VkZ2UuZnJvbUlkXSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChlZGdlLmVkZ2VUeXBlLnZpYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlZGdlTGVuZ3RoID1cbiAgICAgICAgICAgICAgZWRnZS5vcHRpb25zLmxlbmd0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLm9wdGlvbnMuc3ByaW5nTGVuZ3RoXG4gICAgICAgICAgICAgICAgOiBlZGdlLm9wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgbm9kZTEgPSBlZGdlLnRvO1xuICAgICAgICAgICAgbm9kZTIgPSBlZGdlLmVkZ2VUeXBlLnZpYTtcbiAgICAgICAgICAgIG5vZGUzID0gZWRnZS5mcm9tO1xuXG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVTcHJpbmdGb3JjZShub2RlMSwgbm9kZTIsIDAuNSAqIGVkZ2VMZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlU3ByaW5nRm9yY2Uobm9kZTIsIG5vZGUzLCAwLjUgKiBlZGdlTGVuZ3RoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdGhlICogMS41IGlzIGhlcmUgc28gdGhlIGVkZ2UgbG9va3MgYXMgbGFyZ2UgYXMgYSBzbW9vdGggZWRnZS4gSXQgZG9lcyBub3QgaW5pdGlhbGx5IGJlY2F1c2UgdGhlIHNtb290aCBlZGdlcyB1c2VcbiAgICAgICAgICAgIC8vIHRoZSBzdXBwb3J0IG5vZGVzIHdoaWNoIGV4ZXJ0IGEgcmVwdWxzaXZlIGZvcmNlIG9uIHRoZSB0byBhbmQgZnJvbSBub2RlcywgbWFraW5nIHRoZSBlZGdlIGFwcGVhciBsYXJnZXIuXG4gICAgICAgICAgICBlZGdlTGVuZ3RoID1cbiAgICAgICAgICAgICAgZWRnZS5vcHRpb25zLmxlbmd0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLm9wdGlvbnMuc3ByaW5nTGVuZ3RoICogMS41XG4gICAgICAgICAgICAgICAgOiBlZGdlLm9wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlU3ByaW5nRm9yY2UoZWRnZS5mcm9tLCBlZGdlLnRvLCBlZGdlTGVuZ3RoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgY29kZSBhY3R1YWxseSBwZXJmb3JtaW5nIHRoZSBjYWxjdWxhdGlvbiBmb3IgdGhlIGZ1bmN0aW9uIGFib3ZlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUxXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZTJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VMZW5ndGhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVTcHJpbmdGb3JjZShub2RlMSwgbm9kZTIsIGVkZ2VMZW5ndGgpIHtcbiAgICBjb25zdCBkeCA9IG5vZGUxLnggLSBub2RlMi54O1xuICAgIGNvbnN0IGR5ID0gbm9kZTEueSAtIG5vZGUyLnk7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLm1heChNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpLCAwLjAxKTtcblxuICAgIC8vIHRoZSAxL2Rpc3RhbmNlIGlzIHNvIHRoZSBmeCBhbmQgZnkgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBzaW5lIG9yIGNvc2luZS5cbiAgICBjb25zdCBzcHJpbmdGb3JjZSA9XG4gICAgICAodGhpcy5vcHRpb25zLnNwcmluZ0NvbnN0YW50ICogKGVkZ2VMZW5ndGggLSBkaXN0YW5jZSkpIC8gZGlzdGFuY2U7XG5cbiAgICBjb25zdCBmeCA9IGR4ICogc3ByaW5nRm9yY2U7XG4gICAgY29uc3QgZnkgPSBkeSAqIHNwcmluZ0ZvcmNlO1xuXG4gICAgLy8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG9uZSBub2RlIGlzIG5vdCBwYXJ0IG9mIHRoZSBwaHlzY2lzXG4gICAgaWYgKHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUxLmlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMS5pZF0ueCArPSBmeDtcbiAgICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUxLmlkXS55ICs9IGZ5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMi5pZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZTIuaWRdLnggLT0gZng7XG4gICAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMi5pZF0ueSAtPSBmeTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3ByaW5nU29sdmVyO1xuIiwgIi8qKlxuICogSGllcmFyY2hpY2FsIFNwcmluZyBTb2x2ZXJcbiAqL1xuY2xhc3MgSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgc3ByaW5nZm9yY2VzIG9uIHRoZSBub2RlcywgYWNjb3VudGluZyBmb3IgdGhlIHN1cHBvcnQgbm9kZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzb2x2ZSgpIHtcbiAgICBsZXQgZWRnZUxlbmd0aCwgZWRnZTtcbiAgICBsZXQgZHgsIGR5LCBmeCwgZnksIHNwcmluZ0ZvcmNlLCBkaXN0YW5jZTtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBmYWN0b3IgPSAwLjU7XG5cbiAgICBjb25zdCBlZGdlSW5kaWNlcyA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc0VkZ2VJbmRpY2VzO1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgY29uc3QgZm9yY2VzID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXM7XG5cbiAgICAvLyBpbml0aWFsaXplIHRoZSBzcHJpbmcgZm9yY2UgY291bnRlcnNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z4ID0gMDtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z5ID0gMDtcbiAgICB9XG5cbiAgICAvLyBmb3JjZXMgY2F1c2VkIGJ5IHRoZSBlZGdlcywgbW9kZWxsZWQgYXMgc3ByaW5nc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVkZ2UgPSBlZGdlc1tlZGdlSW5kaWNlc1tpXV07XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgZWRnZUxlbmd0aCA9XG4gICAgICAgICAgZWRnZS5vcHRpb25zLmxlbmd0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMub3B0aW9ucy5zcHJpbmdMZW5ndGhcbiAgICAgICAgICAgIDogZWRnZS5vcHRpb25zLmxlbmd0aDtcblxuICAgICAgICBkeCA9IGVkZ2UuZnJvbS54IC0gZWRnZS50by54O1xuICAgICAgICBkeSA9IGVkZ2UuZnJvbS55IC0gZWRnZS50by55O1xuICAgICAgICBkaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgICAgIGRpc3RhbmNlID0gZGlzdGFuY2UgPT09IDAgPyAwLjAxIDogZGlzdGFuY2U7XG5cbiAgICAgICAgLy8gdGhlIDEvZGlzdGFuY2UgaXMgc28gdGhlIGZ4IGFuZCBmeSBjYW4gYmUgY2FsY3VsYXRlZCB3aXRob3V0IHNpbmUgb3IgY29zaW5lLlxuICAgICAgICBzcHJpbmdGb3JjZSA9XG4gICAgICAgICAgKHRoaXMub3B0aW9ucy5zcHJpbmdDb25zdGFudCAqIChlZGdlTGVuZ3RoIC0gZGlzdGFuY2UpKSAvIGRpc3RhbmNlO1xuXG4gICAgICAgIGZ4ID0gZHggKiBzcHJpbmdGb3JjZTtcbiAgICAgICAgZnkgPSBkeSAqIHNwcmluZ0ZvcmNlO1xuXG4gICAgICAgIGlmIChlZGdlLnRvLmxldmVsICE9IGVkZ2UuZnJvbS5sZXZlbCkge1xuICAgICAgICAgIGlmIChmb3JjZXNbZWRnZS50b0lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS50b0lkXS5zcHJpbmdGeCAtPSBmeDtcbiAgICAgICAgICAgIGZvcmNlc1tlZGdlLnRvSWRdLnNwcmluZ0Z5IC09IGZ5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9yY2VzW2VkZ2UuZnJvbUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS5mcm9tSWRdLnNwcmluZ0Z4ICs9IGZ4O1xuICAgICAgICAgICAgZm9yY2VzW2VkZ2UuZnJvbUlkXS5zcHJpbmdGeSArPSBmeTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZvcmNlc1tlZGdlLnRvSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvcmNlc1tlZGdlLnRvSWRdLnggLT0gZmFjdG9yICogZng7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS50b0lkXS55IC09IGZhY3RvciAqIGZ5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9yY2VzW2VkZ2UuZnJvbUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS5mcm9tSWRdLnggKz0gZmFjdG9yICogZng7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS5mcm9tSWRdLnkgKz0gZmFjdG9yICogZnk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm9ybWFsaXplIHNwcmluZyBmb3JjZXNcbiAgICBzcHJpbmdGb3JjZSA9IDE7XG4gICAgbGV0IHNwcmluZ0Z4LCBzcHJpbmdGeTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIHNwcmluZ0Z4ID0gTWF0aC5taW4oXG4gICAgICAgIHNwcmluZ0ZvcmNlLFxuICAgICAgICBNYXRoLm1heCgtc3ByaW5nRm9yY2UsIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z4KVxuICAgICAgKTtcbiAgICAgIHNwcmluZ0Z5ID0gTWF0aC5taW4oXG4gICAgICAgIHNwcmluZ0ZvcmNlLFxuICAgICAgICBNYXRoLm1heCgtc3ByaW5nRm9yY2UsIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z5KVxuICAgICAgKTtcblxuICAgICAgZm9yY2VzW25vZGVJZF0ueCArPSBzcHJpbmdGeDtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnkgKz0gc3ByaW5nRnk7XG4gICAgfVxuXG4gICAgLy8gcmV0YWluIGVuZXJneSBiYWxhbmNlXG4gICAgbGV0IHRvdGFsRnggPSAwO1xuICAgIGxldCB0b3RhbEZ5ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIHRvdGFsRnggKz0gZm9yY2VzW25vZGVJZF0ueDtcbiAgICAgIHRvdGFsRnkgKz0gZm9yY2VzW25vZGVJZF0ueTtcbiAgICB9XG4gICAgY29uc3QgY29ycmVjdGlvbkZ4ID0gdG90YWxGeCAvIG5vZGVJbmRpY2VzLmxlbmd0aDtcbiAgICBjb25zdCBjb3JyZWN0aW9uRnkgPSB0b3RhbEZ5IC8gbm9kZUluZGljZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gbm9kZUluZGljZXNbaV07XG4gICAgICBmb3JjZXNbbm9kZUlkXS54IC09IGNvcnJlY3Rpb25GeDtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnkgLT0gY29ycmVjdGlvbkZ5O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIaWVyYXJjaGljYWxTcHJpbmdTb2x2ZXI7XG4iLCAiLyoqXG4gKiBDZW50cmFsIEdyYXZpdHkgU29sdmVyXG4gKi9cbmNsYXNzIENlbnRyYWxHcmF2aXR5U29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgZm9yY2VzIGZvciBlYWNoIG5vZGVcbiAgICovXG4gIHNvbHZlKCkge1xuICAgIGxldCBkeCwgZHksIGRpc3RhbmNlLCBub2RlO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgY29uc3QgZm9yY2VzID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIG5vZGUgPSBub2Rlc1tub2RlSWRdO1xuICAgICAgZHggPSAtbm9kZS54O1xuICAgICAgZHkgPSAtbm9kZS55O1xuICAgICAgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICB0aGlzLl9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgZm9yY2VzLCBub2RlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgYmFzZWQgb24gdGhlIGRpc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IGR4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeVxuICAgKiBAcGFyYW0ge09iamVjdDxOb2RlLmlkLCB2aXMuTm9kZT59IGZvcmNlc1xuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgZm9yY2VzLCBub2RlKSB7XG4gICAgY29uc3QgZ3Jhdml0eUZvcmNlID1cbiAgICAgIGRpc3RhbmNlID09PSAwID8gMCA6IHRoaXMub3B0aW9ucy5jZW50cmFsR3Jhdml0eSAvIGRpc3RhbmNlO1xuICAgIGZvcmNlc1tub2RlLmlkXS54ID0gZHggKiBncmF2aXR5Rm9yY2U7XG4gICAgZm9yY2VzW25vZGUuaWRdLnkgPSBkeSAqIGdyYXZpdHlGb3JjZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDZW50cmFsR3Jhdml0eVNvbHZlcjtcbiIsICJpbXBvcnQgQmFybmVzSHV0U29sdmVyIGZyb20gXCIuL0Jhcm5lc0h1dFNvbHZlclwiO1xuaW1wb3J0IHsgQWxlYSB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBAYXVnbWVudHMgQmFybmVzSHV0U29sdmVyXG4gKi9cbmNsYXNzIEZvcmNlQXRsYXMyQmFzZWRSZXB1bHNpb25Tb2x2ZXIgZXh0ZW5kcyBCYXJuZXNIdXRTb2x2ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHt7cGh5c2ljc05vZGVJbmRpY2VzOiBBcnJheSwgcGh5c2ljc0VkZ2VJbmRpY2VzOiBBcnJheSwgZm9yY2VzOiB7fSwgdmVsb2NpdGllczoge319fSBwaHlzaWNzQm9keVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpIHtcbiAgICBzdXBlcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9ybmcgPSBBbGVhKFwiRk9SQ0UgQVRMQVMgMiBCQVNFRCBSRVBVTFNJT04gU09MVkVSXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIGJhc2VkIG9uIHRoZSBkaXN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeFxuICAgKiBAcGFyYW0ge251bWJlcn0gZHlcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgbm9kZSwgcGFyZW50QnJhbmNoKSB7XG4gICAgaWYgKGRpc3RhbmNlID09PSAwKSB7XG4gICAgICBkaXN0YW5jZSA9IDAuMSAqIHRoaXMuX3JuZygpO1xuICAgICAgZHggPSBkaXN0YW5jZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yIDwgMSAmJiBub2RlLnNoYXBlLnJhZGl1cykge1xuICAgICAgZGlzdGFuY2UgPSBNYXRoLm1heChcbiAgICAgICAgMC4xICsgdGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yICogbm9kZS5zaGFwZS5yYWRpdXMsXG4gICAgICAgIGRpc3RhbmNlIC0gbm9kZS5zaGFwZS5yYWRpdXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVncmVlID0gbm9kZS5lZGdlcy5sZW5ndGggKyAxO1xuICAgIC8vIHRoZSBkaXZpZGluZyBieSB0aGUgZGlzdGFuY2UgY3ViZWQgaW5zdGVhZCBvZiBzcXVhcmVkIGFsbG93cyB1cyB0byBnZXQgdGhlIGZ4IGFuZCBmeSBjb21wb25lbnRzIHdpdGhvdXQgc2luZXMgYW5kIGNvc2luZXNcbiAgICAvLyBpdCBpcyBzaG9ydGhhbmQgZm9yIGdyYXZpdHlmb3JjZSB3aXRoIGRpc3RhbmNlIHNxdWFyZWQgYW5kIGZ4ID0gZHgvZGlzdGFuY2UgKiBncmF2aXR5Rm9yY2VcbiAgICBjb25zdCBncmF2aXR5Rm9yY2UgPVxuICAgICAgKHRoaXMub3B0aW9ucy5ncmF2aXRhdGlvbmFsQ29uc3RhbnQgKlxuICAgICAgICBwYXJlbnRCcmFuY2gubWFzcyAqXG4gICAgICAgIG5vZGUub3B0aW9ucy5tYXNzICpcbiAgICAgICAgZGVncmVlKSAvXG4gICAgICBNYXRoLnBvdyhkaXN0YW5jZSwgMik7XG4gICAgY29uc3QgZnggPSBkeCAqIGdyYXZpdHlGb3JjZTtcbiAgICBjb25zdCBmeSA9IGR5ICogZ3Jhdml0eUZvcmNlO1xuXG4gICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZS5pZF0ueCArPSBmeDtcbiAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlLmlkXS55ICs9IGZ5O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvcmNlQXRsYXMyQmFzZWRSZXB1bHNpb25Tb2x2ZXI7XG4iLCAiaW1wb3J0IENlbnRyYWxHcmF2aXR5U29sdmVyIGZyb20gXCIuL0NlbnRyYWxHcmF2aXR5U29sdmVyXCI7XG5cbi8qKlxuICogQGF1Z21lbnRzIENlbnRyYWxHcmF2aXR5U29sdmVyXG4gKi9cbmNsYXNzIEZvcmNlQXRsYXMyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlciBleHRlbmRzIENlbnRyYWxHcmF2aXR5U29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgc3VwZXIoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIGJhc2VkIG9uIHRoZSBkaXN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeFxuICAgKiBAcGFyYW0ge251bWJlcn0gZHlcbiAgICogQHBhcmFtIHtPYmplY3Q8Tm9kZS5pZCwgTm9kZT59IGZvcmNlc1xuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgZm9yY2VzLCBub2RlKSB7XG4gICAgaWYgKGRpc3RhbmNlID4gMCkge1xuICAgICAgY29uc3QgZGVncmVlID0gbm9kZS5lZGdlcy5sZW5ndGggKyAxO1xuICAgICAgY29uc3QgZ3Jhdml0eUZvcmNlID1cbiAgICAgICAgdGhpcy5vcHRpb25zLmNlbnRyYWxHcmF2aXR5ICogZGVncmVlICogbm9kZS5vcHRpb25zLm1hc3M7XG4gICAgICBmb3JjZXNbbm9kZS5pZF0ueCA9IGR4ICogZ3Jhdml0eUZvcmNlO1xuICAgICAgZm9yY2VzW25vZGUuaWRdLnkgPSBkeSAqIGdyYXZpdHlGb3JjZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9yY2VBdGxhczJCYXNlZENlbnRyYWxHcmF2aXR5U29sdmVyO1xuIiwgImltcG9ydCBCYXJuZXNIdXRTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0Jhcm5lc0h1dFNvbHZlclwiO1xuaW1wb3J0IFJlcHVsc2lvbiBmcm9tIFwiLi9jb21wb25lbnRzL3BoeXNpY3MvUmVwdWxzaW9uU29sdmVyXCI7XG5pbXBvcnQgSGllcmFyY2hpY2FsUmVwdWxzaW9uIGZyb20gXCIuL2NvbXBvbmVudHMvcGh5c2ljcy9IaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXJcIjtcbmltcG9ydCBTcHJpbmdTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL1NwcmluZ1NvbHZlclwiO1xuaW1wb3J0IEhpZXJhcmNoaWNhbFNwcmluZ1NvbHZlciBmcm9tIFwiLi9jb21wb25lbnRzL3BoeXNpY3MvSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyXCI7XG5pbXBvcnQgQ2VudHJhbEdyYXZpdHlTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0NlbnRyYWxHcmF2aXR5U29sdmVyXCI7XG5pbXBvcnQgRm9yY2VBdGxhczJCYXNlZFJlcHVsc2lvblNvbHZlciBmcm9tIFwiLi9jb21wb25lbnRzL3BoeXNpY3MvRkEyQmFzZWRSZXB1bHNpb25Tb2x2ZXJcIjtcbmltcG9ydCBGb3JjZUF0bGFzMkJhc2VkQ2VudHJhbEdyYXZpdHlTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0ZBMkJhc2VkQ2VudHJhbEdyYXZpdHlTb2x2ZXJcIjtcbmltcG9ydCB7XG4gIEhTVlRvSGV4LFxuICBtZXJnZU9wdGlvbnMsXG4gIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsXG59IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCB7IEVuZFBvaW50cyB9IGZyb20gXCIuL2NvbXBvbmVudHMvZWRnZXNcIjsgLy8gZm9yIGRlYnVnZ2luZyB3aXRoIF9kcmF3Rm9yY2VzKClcblxuLyoqXG4gKiBUaGUgcGh5c2ljcyBlbmdpbmVcbiAqL1xuY2xhc3MgUGh5c2ljc0VuZ2luZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waHlzaWNzQm9keSA9IHtcbiAgICAgIHBoeXNpY3NOb2RlSW5kaWNlczogW10sXG4gICAgICBwaHlzaWNzRWRnZUluZGljZXM6IFtdLFxuICAgICAgZm9yY2VzOiB7fSxcbiAgICAgIHZlbG9jaXRpZXM6IHt9LFxuICAgIH07XG5cbiAgICB0aGlzLnBoeXNpY3NFbmFibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNpbXVsYXRpb25JbnRlcnZhbCA9IDEwMDAgLyA2MDtcbiAgICB0aGlzLnJlcXVpcmVzVGltZW91dCA9IHRydWU7XG4gICAgdGhpcy5wcmV2aW91c1N0YXRlcyA9IHt9O1xuICAgIHRoaXMucmVmZXJlbmNlU3RhdGUgPSB7fTtcbiAgICB0aGlzLmZyZWV6ZUNhY2hlID0ge307XG4gICAgdGhpcy5yZW5kZXJUaW1lciA9IHVuZGVmaW5lZDtcblxuICAgIC8vIHBhcmFtZXRlcnMgZm9yIHRoZSBhZGFwdGl2ZSB0aW1lc3RlcFxuICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcCA9IGZhbHNlO1xuICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcEVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmFkYXB0aXZlQ291bnRlciA9IDA7XG4gICAgdGhpcy5hZGFwdGl2ZUludGVydmFsID0gMztcblxuICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuc3RhcnRlZFN0YWJpbGl6YXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zID0gMDtcbiAgICB0aGlzLnJlYWR5ID0gZmFsc2U7IC8vIHdpbGwgYmUgc2V0IHRvIHRydWUgaWYgdGhlIHN0YWJpbGl6ZVxuXG4gICAgLy8gZGVmYXVsdCBvcHRpb25zXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBiYXJuZXNIdXQ6IHtcbiAgICAgICAgdGhldGE6IDAuNSxcbiAgICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiAtMjAwMCxcbiAgICAgICAgY2VudHJhbEdyYXZpdHk6IDAuMyxcbiAgICAgICAgc3ByaW5nTGVuZ3RoOiA5NSxcbiAgICAgICAgc3ByaW5nQ29uc3RhbnQ6IDAuMDQsXG4gICAgICAgIGRhbXBpbmc6IDAuMDksXG4gICAgICAgIGF2b2lkT3ZlcmxhcDogMCxcbiAgICAgIH0sXG4gICAgICBmb3JjZUF0bGFzMkJhc2VkOiB7XG4gICAgICAgIHRoZXRhOiAwLjUsXG4gICAgICAgIGdyYXZpdGF0aW9uYWxDb25zdGFudDogLTUwLFxuICAgICAgICBjZW50cmFsR3Jhdml0eTogMC4wMSxcbiAgICAgICAgc3ByaW5nQ29uc3RhbnQ6IDAuMDgsXG4gICAgICAgIHNwcmluZ0xlbmd0aDogMTAwLFxuICAgICAgICBkYW1waW5nOiAwLjQsXG4gICAgICAgIGF2b2lkT3ZlcmxhcDogMCxcbiAgICAgIH0sXG4gICAgICByZXB1bHNpb246IHtcbiAgICAgICAgY2VudHJhbEdyYXZpdHk6IDAuMixcbiAgICAgICAgc3ByaW5nTGVuZ3RoOiAyMDAsXG4gICAgICAgIHNwcmluZ0NvbnN0YW50OiAwLjA1LFxuICAgICAgICBub2RlRGlzdGFuY2U6IDEwMCxcbiAgICAgICAgZGFtcGluZzogMC4wOSxcbiAgICAgICAgYXZvaWRPdmVybGFwOiAwLFxuICAgICAgfSxcbiAgICAgIGhpZXJhcmNoaWNhbFJlcHVsc2lvbjoge1xuICAgICAgICBjZW50cmFsR3Jhdml0eTogMC4wLFxuICAgICAgICBzcHJpbmdMZW5ndGg6IDEwMCxcbiAgICAgICAgc3ByaW5nQ29uc3RhbnQ6IDAuMDEsXG4gICAgICAgIG5vZGVEaXN0YW5jZTogMTIwLFxuICAgICAgICBkYW1waW5nOiAwLjA5LFxuICAgICAgfSxcbiAgICAgIG1heFZlbG9jaXR5OiA1MCxcbiAgICAgIG1pblZlbG9jaXR5OiAwLjc1LCAvLyBweC9zXG4gICAgICBzb2x2ZXI6IFwiYmFybmVzSHV0XCIsXG4gICAgICBzdGFiaWxpemF0aW9uOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGl0ZXJhdGlvbnM6IDEwMDAsIC8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbiB0byBzdGFiaWxpemVcbiAgICAgICAgdXBkYXRlSW50ZXJ2YWw6IDUwLFxuICAgICAgICBvbmx5RHluYW1pY0VkZ2VzOiBmYWxzZSxcbiAgICAgICAgZml0OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHRpbWVzdGVwOiAwLjUsXG4gICAgICBhZGFwdGl2ZVRpbWVzdGVwOiB0cnVlLFxuICAgICAgd2luZDogeyB4OiAwLCB5OiAwIH0sXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG4gICAgdGhpcy50aW1lc3RlcCA9IDAuNTtcbiAgICB0aGlzLmxheW91dEZhaWxlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImluaXRQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuaW5pdFBoeXNpY3MoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9sYXlvdXRGYWlsZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXRGYWlsZWQgPSB0cnVlO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwicmVzZXRQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc3RvcFNpbXVsYXRpb24oKTtcbiAgICAgIHRoaXMucmVhZHkgPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRpc2FibGVQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMucGh5c2ljc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3RvcFNpbXVsYXRpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInJlc3RvcmVQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgICAgaWYgKHRoaXMucmVhZHkgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5zdGFydFNpbXVsYXRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInN0YXJ0U2ltdWxhdGlvblwiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5yZWFkeSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnN0YXJ0U2ltdWxhdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwic3RvcFNpbXVsYXRpb25cIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKGZhbHNlKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9mZigpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFDaGFuZ2VkXCIsICgpID0+IHtcbiAgICAgIC8vIE5vZGVzIGFuZC9vciBlZGdlcyBoYXZlIGJlZW4gYWRkZWQgb3IgcmVtb3ZlZCwgdXBkYXRlIHNob3J0Y3V0IGxpc3RzLlxuICAgICAgdGhpcy51cGRhdGVQaHlzaWNzRGF0YSgpO1xuICAgIH0pO1xuXG4gICAgLy8gZGVidWc6IHNob3cgZm9yY2VzXG4gICAgLy8gdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJhZnRlckRyYXdpbmdcIiwgKGN0eCkgPT4ge3RoaXMuX2RyYXdGb3JjZXMoY3R4KTt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIHBoeXNpY3Mgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGh5c2ljc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5waHlzaWNzRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RhcnRTaW11bGF0aW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBoeXNpY3NFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgc2VsZWN0aXZlTm90RGVlcEV4dGVuZChbXCJzdGFiaWxpemF0aW9uXCJdLCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zLCBcInN0YWJpbGl6YXRpb25cIik7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMucGh5c2ljc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aW5kID0gdGhpcy5vcHRpb25zLndpbmQ7XG4gICAgICAgIGlmICh3aW5kKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kLnggIT09IFwibnVtYmVyXCIgfHwgTnVtYmVyLmlzTmFOKHdpbmQueCkpIHtcbiAgICAgICAgICAgIHdpbmQueCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZC55ICE9PSBcIm51bWJlclwiIHx8IE51bWJlci5pc05hTih3aW5kLnkpKSB7XG4gICAgICAgICAgICB3aW5kLnkgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCB0aGUgdGltZXN0ZXBcbiAgICAgICAgdGhpcy50aW1lc3RlcCA9IHRoaXMub3B0aW9ucy50aW1lc3RlcDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICAvKipcbiAgICogY29uZmlndXJlIHRoZSBlbmdpbmUuXG4gICAqL1xuICBpbml0KCkge1xuICAgIGxldCBvcHRpb25zO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc29sdmVyID09PSBcImZvcmNlQXRsYXMyQmFzZWRcIikge1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5mb3JjZUF0bGFzMkJhc2VkO1xuICAgICAgdGhpcy5ub2Rlc1NvbHZlciA9IG5ldyBGb3JjZUF0bGFzMkJhc2VkUmVwdWxzaW9uU29sdmVyKFxuICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgIHRoaXMucGh5c2ljc0JvZHksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgICB0aGlzLmVkZ2VzU29sdmVyID0gbmV3IFNwcmluZ1NvbHZlcih0aGlzLmJvZHksIHRoaXMucGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuICAgICAgdGhpcy5ncmF2aXR5U29sdmVyID0gbmV3IEZvcmNlQXRsYXMyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlcihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnNvbHZlciA9PT0gXCJyZXB1bHNpb25cIikge1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5yZXB1bHNpb247XG4gICAgICB0aGlzLm5vZGVzU29sdmVyID0gbmV3IFJlcHVsc2lvbih0aGlzLmJvZHksIHRoaXMucGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuICAgICAgdGhpcy5lZGdlc1NvbHZlciA9IG5ldyBTcHJpbmdTb2x2ZXIodGhpcy5ib2R5LCB0aGlzLnBoeXNpY3NCb2R5LCBvcHRpb25zKTtcbiAgICAgIHRoaXMuZ3Jhdml0eVNvbHZlciA9IG5ldyBDZW50cmFsR3Jhdml0eVNvbHZlcihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnNvbHZlciA9PT0gXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIikge1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWxSZXB1bHNpb247XG4gICAgICB0aGlzLm5vZGVzU29sdmVyID0gbmV3IEhpZXJhcmNoaWNhbFJlcHVsc2lvbihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgICAgdGhpcy5lZGdlc1NvbHZlciA9IG5ldyBIaWVyYXJjaGljYWxTcHJpbmdTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICAgIHRoaXMuZ3Jhdml0eVNvbHZlciA9IG5ldyBDZW50cmFsR3Jhdml0eVNvbHZlcihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBiYXJuZXNIdXRcbiAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuYmFybmVzSHV0O1xuICAgICAgdGhpcy5ub2Rlc1NvbHZlciA9IG5ldyBCYXJuZXNIdXRTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICAgIHRoaXMuZWRnZXNTb2x2ZXIgPSBuZXcgU3ByaW5nU29sdmVyKHRoaXMuYm9keSwgdGhpcy5waHlzaWNzQm9keSwgb3B0aW9ucyk7XG4gICAgICB0aGlzLmdyYXZpdHlTb2x2ZXIgPSBuZXcgQ2VudHJhbEdyYXZpdHlTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLm1vZGVsT3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogaW5pdGlhbGl6ZSB0aGUgZW5naW5lXG4gICAqL1xuICBpbml0UGh5c2ljcygpIHtcbiAgICBpZiAodGhpcy5waHlzaWNzRW5hYmxlZCA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5zdGFiaWxpemUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImZpdFwiLCB7fSwgdGhpcy5sYXlvdXRGYWlsZWQpOyAvLyBpZiB0aGUgbGF5b3V0IGZhaWxlZCwgd2UgdXNlIHRoZSBhcHByb3hpbWF0aW9uIGZvciB0aGUgem9vbVxuICAgICAgICB0aGlzLnN0YXJ0U2ltdWxhdGlvbigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJmaXRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBzaW11bGF0aW9uXG4gICAqL1xuICBzdGFydFNpbXVsYXRpb24oKSB7XG4gICAgaWYgKHRoaXMucGh5c2ljc0VuYWJsZWQgPT09IHRydWUgJiYgdGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuXG4gICAgICAvLyB3aGVuIHZpc2libGUsIGFkYXB0aXZpdHkgaXMgZGlzYWJsZWQuXG4gICAgICB0aGlzLmFkYXB0aXZlVGltZXN0ZXAgPSBmYWxzZTtcblxuICAgICAgLy8gdGhpcyBzZXRzIHRoZSB3aWR0aCBvZiBhbGwgbm9kZXMgaW5pdGlhbGx5IHdoaWNoIGNvdWxkIGJlIHJlcXVpcmVkIGZvciB0aGUgYXZvaWRPdmVybGFwXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3Jlc2l6ZU5vZGVzXCIpO1xuICAgICAgaWYgKHRoaXMudmlld0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52aWV3RnVuY3Rpb24gPSB0aGlzLnNpbXVsYXRpb25TdGVwLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiaW5pdFJlZHJhd1wiLCB0aGlzLnZpZXdGdW5jdGlvbik7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfc3RhcnRSZW5kZXJpbmdcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHRoZSBzaW11bGF0aW9uLCBmb3JjZSBzdGFiaWxpemF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtlbWl0PXRydWVdXG4gICAqL1xuICBzdG9wU2ltdWxhdGlvbihlbWl0ID0gdHJ1ZSkge1xuICAgIHRoaXMuc3RhYmlsaXplZCA9IHRydWU7XG4gICAgaWYgKGVtaXQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2VtaXRTdGFiaWxpemVkKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnZpZXdGdW5jdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIHRoaXMudmlld0Z1bmN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGVtaXQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9zdG9wUmVuZGVyaW5nXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmlld0Z1bmN0aW9uIGluc2VydHMgdGhpcyBzdGVwIGludG8gZWFjaCByZW5kZXIgbG9vcC4gSXQgY2FsbHMgdGhlIHBoeXNpY3MgdGljayBhbmQgaGFuZGxlcyB0aGUgY2xlYW51cCBhdCBzdGFiaWxpemVkLlxuICAgKlxuICAgKi9cbiAgc2ltdWxhdGlvblN0ZXAoKSB7XG4gICAgLy8gY2hlY2sgaWYgdGhlIHBoeXNpY3MgaGF2ZSBzZXR0bGVkXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLnBoeXNpY3NUaWNrKCk7XG4gICAgY29uc3QgcGh5c2ljc1RpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuXG4gICAgLy8gcnVuIGRvdWJsZSBzcGVlZCBpZiBpdCBpcyBhIGxpdHRsZSBncmFwaFxuICAgIGlmIChcbiAgICAgIChwaHlzaWNzVGltZSA8IDAuNCAqIHRoaXMuc2ltdWxhdGlvbkludGVydmFsIHx8XG4gICAgICAgIHRoaXMucnVuRG91YmxlU3BlZWQgPT09IHRydWUpICYmXG4gICAgICB0aGlzLnN0YWJpbGl6ZWQgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICB0aGlzLnBoeXNpY3NUaWNrKCk7XG5cbiAgICAgIC8vIHRoaXMgbWFrZXMgc3VyZSB0aGVyZSBpcyBubyBqaXR0ZXIuIFRoZSBkZWNpc2lvbiBpcyB0YWtlbiBvbmNlIHRvIHJ1biBpdCBhdCBkb3VibGUgc3BlZWQuXG4gICAgICB0aGlzLnJ1bkRvdWJsZVNwZWVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFiaWxpemVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRyaWdnZXIgdGhlIHN0YWJpbGl6ZWQgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYW1vdW50T2ZJdGVyYXRpb25zPXRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnNdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZW1pdFN0YWJpbGl6ZWQoYW1vdW50T2ZJdGVyYXRpb25zID0gdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucykge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMgPiAxIHx8XG4gICAgICB0aGlzLnN0YXJ0ZWRTdGFiaWxpemF0aW9uID09PSB0cnVlXG4gICAgKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YWJpbGl6ZWRcIiwge1xuICAgICAgICAgIGl0ZXJhdGlvbnM6IGFtb3VudE9mSXRlcmF0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3RhcnRlZFN0YWJpbGl6YXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucyA9IDA7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgZm9yIG9uZSBwaHlzaWNzIGl0ZXJhdGlvbiBhbmQgbW92ZSB0aGUgbm9kZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwaHlzaWNzU3RlcCgpIHtcbiAgICB0aGlzLmdyYXZpdHlTb2x2ZXIuc29sdmUoKTtcbiAgICB0aGlzLm5vZGVzU29sdmVyLnNvbHZlKCk7XG4gICAgdGhpcy5lZGdlc1NvbHZlci5zb2x2ZSgpO1xuICAgIHRoaXMubW92ZU5vZGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBkeW5hbWljIGFkanVzdG1lbnRzIHRvIHRoZSB0aW1lc3RlcCwgYmFzZWQgb24gY3VycmVudCBzdGF0ZS5cbiAgICpcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBwaHlzaWNzVGljaygpLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRqdXN0VGltZVN0ZXAoKSB7XG4gICAgY29uc3QgZmFjdG9yID0gMS4yOyAvLyBGYWN0b3IgZm9yIGluY3JlYXNpbmcgdGhlIHRpbWVzdGVwIG9uIHN1Y2Nlc3MuXG5cbiAgICAvLyB3ZSBjb21wYXJlIHRoZSB0d28gc3RlcHMuIGlmIGl0IGlzIGFjY2VwdGFibGUgd2UgZG91YmxlIHRoZSBzdGVwLlxuICAgIGlmICh0aGlzLl9ldmFsdWF0ZVN0ZXBRdWFsaXR5KCkgPT09IHRydWUpIHtcbiAgICAgIHRoaXMudGltZXN0ZXAgPSBmYWN0b3IgKiB0aGlzLnRpbWVzdGVwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBub3QsIHdlIGRlY3JlYXNlIHRoZSBzdGVwIHRvIGEgbWluaW11bSBvZiB0aGUgb3B0aW9ucyB0aW1lc3RlcC5cbiAgICAgIC8vIGlmIHRoZSBkZWNyZWFzZWQgdGltZXN0ZXAgaXMgc21hbGxlciB0aGFuIHRoZSBvcHRpb25zIHN0ZXAsIHdlIGRvIG5vdCByZXNldCB0aGUgY291bnRlclxuICAgICAgLy8gd2UgYXNzdW1lIHRoYXQgdGhlIG9wdGlvbnMgdGltZXN0ZXAgaXMgc3RhYmxlIGVub3VnaC5cbiAgICAgIGlmICh0aGlzLnRpbWVzdGVwIC8gZmFjdG9yIDwgdGhpcy5vcHRpb25zLnRpbWVzdGVwKSB7XG4gICAgICAgIHRoaXMudGltZXN0ZXAgPSB0aGlzLm9wdGlvbnMudGltZXN0ZXA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiB0aGUgdGltZXN0ZXAgd2FzIGxhcmdlciB0aGFuIDIgdGltZXMgdGhlIG9wdGlvbiBvbmUgd2UgY2hlY2sgdGhlIGFkYXB0aXZpdHkgYWdhaW4gdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgbGFyZ2UgaW5zdGFiaWxpdGllcyBkbyBub3QgZm9ybS5cbiAgICAgICAgdGhpcy5hZGFwdGl2ZUNvdW50ZXIgPSAtMTsgLy8gY2hlY2sgYWdhaW4gbmV4dCBpdGVyYXRpb25cbiAgICAgICAgdGhpcy50aW1lc3RlcCA9IE1hdGgubWF4KHRoaXMub3B0aW9ucy50aW1lc3RlcCwgdGhpcy50aW1lc3RlcCAvIGZhY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgc2luZ2xlIHNpbXVsYXRpb24gc3RlcCAob3IgJ3RpY2snKSBpbiB0aGUgcGh5c2ljcyBzaW11bGF0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwaHlzaWNzVGljaygpIHtcbiAgICB0aGlzLl9zdGFydFN0YWJpbGl6aW5nKCk7IC8vIHRoaXMgZW5zdXJlcyB0aGF0IHRoZXJlIGlzIG5vIHN0YXJ0IGV2ZW50IHdoZW4gdGhlIG5ldHdvcmsgaXMgYWxyZWFkeSBzdGFibGUuXG4gICAgaWYgKHRoaXMuc3RhYmlsaXplZCA9PT0gdHJ1ZSkgcmV0dXJuO1xuXG4gICAgLy8gYWRhcHRpdml0eSBtZWFucyB0aGUgdGltZXN0ZXAgYWRhcHRzIHRvIHRoZSBzaXR1YXRpb24sIG9ubHkgYXBwbGljYWJsZSBmb3Igc3RhYmlsaXphdGlvblxuICAgIGlmIChcbiAgICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcCA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5hZGFwdGl2ZVRpbWVzdGVwRW5hYmxlZCA9PT0gdHJ1ZVxuICAgICkge1xuICAgICAgLy8gdGltZXN0ZXAgcmVtYWlucyBzdGFibGUgZm9yIFwiaW50ZXJ2YWxcIiBpdGVyYXRpb25zLlxuICAgICAgY29uc3QgZG9BZGFwdGl2ZSA9IHRoaXMuYWRhcHRpdmVDb3VudGVyICUgdGhpcy5hZGFwdGl2ZUludGVydmFsID09PSAwO1xuXG4gICAgICBpZiAoZG9BZGFwdGl2ZSkge1xuICAgICAgICAvLyBmaXJzdCB0aGUgYmlnIHN0ZXAgYW5kIHJldmVydC5cbiAgICAgICAgdGhpcy50aW1lc3RlcCA9IDIgKiB0aGlzLnRpbWVzdGVwO1xuICAgICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7XG4gICAgICAgIHRoaXMucmV2ZXJ0KCk7IC8vIHNhdmVzIHRoZSByZWZlcmVuY2Ugc3RhdGVcblxuICAgICAgICAvLyBub3cgdGhlIG5vcm1hbCBzdGVwLiBTaW5jZSB0aGlzIGlzIHRoZSBsYXN0IHN0ZXAsIGl0IGlzIHRoZSBtb3JlIHN0YWJsZSBvbmUgYW5kIHdlIHdpbGwgdGFrZSB0aGlzLlxuICAgICAgICB0aGlzLnRpbWVzdGVwID0gMC41ICogdGhpcy50aW1lc3RlcDtcblxuICAgICAgICAvLyBzaW5jZSBpdCdzIGhhbGYgdGhlIHN0ZXAsIHdlIGRvIGl0IHR3aWNlLlxuICAgICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7XG4gICAgICAgIHRoaXMucGh5c2ljc1N0ZXAoKTtcblxuICAgICAgICB0aGlzLmFkanVzdFRpbWVTdGVwKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7IC8vIG5vcm1hbCBzdGVwLCBrZWVwaW5nIHRpbWVzdGVwIGNvbnN0YW50XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWRhcHRpdmVDb3VudGVyICs9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNhc2UgZm9yIHRoZSBzdGF0aWMgdGltZXN0ZXAsIHdlIHJlc2V0IGl0IHRvIHRoZSBvbmUgaW4gb3B0aW9ucyBhbmQgdGFrZSBhIG5vcm1hbCBzdGVwLlxuICAgICAgdGhpcy50aW1lc3RlcCA9IHRoaXMub3B0aW9ucy50aW1lc3RlcDtcbiAgICAgIHRoaXMucGh5c2ljc1N0ZXAoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFiaWxpemVkID09PSB0cnVlKSB0aGlzLnJldmVydCgpO1xuICAgIHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMrKztcbiAgfVxuXG4gIC8qKlxuICAgKiBOb2RlcyBhbmQgZWRnZXMgY2FuIGhhdmUgdGhlIHBoeXNpY3MgdG9nZ2xlcyBvbiBvciBvZmYuIEEgY29sbGVjdGlvbiBvZiBpbmRpY2VzIGlzIGNyZWF0ZWQgaGVyZSBzbyB3ZSBjYW4gc2tpcCB0aGUgY2hlY2sgYWxsIHRoZSB0aW1lLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlUGh5c2ljc0RhdGEoKSB7XG4gICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXMgPSB7fTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlcyA9IFtdO1xuICAgIHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc0VkZ2VJbmRpY2VzID0gW107XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG5cbiAgICAvLyBnZXQgbm9kZSBpbmRpY2VzIGZvciBwaHlzaWNzXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gbm9kZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgaWYgKG5vZGVzW25vZGVJZF0ub3B0aW9ucy5waHlzaWNzID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXMucHVzaChub2Rlc1tub2RlSWRdLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGdldCBlZGdlIGluZGljZXMgZm9yIHBoeXNpY3NcbiAgICBmb3IgKGNvbnN0IGVkZ2VJZCBpbiBlZGdlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZGdlcywgZWRnZUlkKSkge1xuICAgICAgICBpZiAoZWRnZXNbZWRnZUlkXS5vcHRpb25zLnBoeXNpY3MgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NFZGdlSW5kaWNlcy5wdXNoKGVkZ2VzW2VkZ2VJZF0uaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSB2ZWxvY2l0eSBhbmQgdGhlIGZvcmNlcyB2ZWN0b3JcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlc1tpXTtcbiAgICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGVJZF0gPSB7IHg6IDAsIHk6IDAgfTtcblxuICAgICAgLy8gZm9yY2VzIGNhbiBiZSByZXNldCBiZWNhdXNlIHRoZXkgYXJlIHJlY2FsY3VsYXRlZC4gVmVsb2NpdGllcyBoYXZlIHRvIHBlcnNpc3QuXG4gICAgICBpZiAodGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXNbbm9kZUlkXSA9IHsgeDogMCwgeTogMCB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNsZWFuIGRlbGV0ZWQgbm9kZXMgZnJvbSB0aGUgdmVsb2NpdHkgdmVjdG9yXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzKSB7XG4gICAgICBpZiAobm9kZXNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXNbbm9kZUlkXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV2ZXJ0IHRoZSBzaW11bGF0aW9uIG9uZSBzdGVwLiBUaGlzIGlzIGRvbmUgc28gYWZ0ZXIgc3RhYmlsaXphdGlvbiwgZXZlcnkgbmV3IHN0YXJ0IG9mIHRoZSBzaW11bGF0aW9uIHdpbGwgYWxzbyBzYXkgc3RhYmlsaXplZC5cbiAgICovXG4gIHJldmVydCgpIHtcbiAgICBjb25zdCBub2RlSWRzID0gT2JqZWN0LmtleXModGhpcy5wcmV2aW91c1N0YXRlcyk7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgdmVsb2NpdGllcyA9IHRoaXMucGh5c2ljc0JvZHkudmVsb2NpdGllcztcbiAgICB0aGlzLnJlZmVyZW5jZVN0YXRlID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IG5vZGVJZHNbaV07XG4gICAgICBpZiAobm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChub2Rlc1tub2RlSWRdLm9wdGlvbnMucGh5c2ljcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMucmVmZXJlbmNlU3RhdGVbbm9kZUlkXSA9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uczogeyB4OiBub2Rlc1tub2RlSWRdLngsIHk6IG5vZGVzW25vZGVJZF0ueSB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgdmVsb2NpdGllc1tub2RlSWRdLnggPSB0aGlzLnByZXZpb3VzU3RhdGVzW25vZGVJZF0udng7XG4gICAgICAgICAgdmVsb2NpdGllc1tub2RlSWRdLnkgPSB0aGlzLnByZXZpb3VzU3RhdGVzW25vZGVJZF0udnk7XG4gICAgICAgICAgbm9kZXNbbm9kZUlkXS54ID0gdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdLng7XG4gICAgICAgICAgbm9kZXNbbm9kZUlkXS55ID0gdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdLnk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnByZXZpb3VzU3RhdGVzW25vZGVJZF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgY29tcGFyZXMgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byB0aGUgY3VycmVudCBzdGF0ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmFsdWF0ZVN0ZXBRdWFsaXR5KCkge1xuICAgIGxldCBkeCwgZHksIGRwb3M7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2VTdGF0ZTtcbiAgICBjb25zdCBwb3NUaHJlc2hvbGQgPSAwLjM7XG5cbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0aGlzLnJlZmVyZW5jZVN0YXRlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnJlZmVyZW5jZVN0YXRlLCBub2RlSWQpICYmXG4gICAgICAgIG5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIGR4ID0gbm9kZXNbbm9kZUlkXS54IC0gcmVmZXJlbmNlW25vZGVJZF0ucG9zaXRpb25zLng7XG4gICAgICAgIGR5ID0gbm9kZXNbbm9kZUlkXS55IC0gcmVmZXJlbmNlW25vZGVJZF0ucG9zaXRpb25zLnk7XG5cbiAgICAgICAgZHBvcyA9IE1hdGguc3FydChNYXRoLnBvdyhkeCwgMikgKyBNYXRoLnBvdyhkeSwgMikpO1xuXG4gICAgICAgIGlmIChkcG9zID4gcG9zVGhyZXNob2xkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIG5vZGVzIG9uZSB0aW1lc3RlcCBhbmQgY2hlY2sgaWYgdGhleSBhcmUgc3RhYmlsaXplZFxuICAgKi9cbiAgbW92ZU5vZGVzKCkge1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgbGV0IG1heE5vZGVWZWxvY2l0eSA9IDA7XG4gICAgbGV0IGF2ZXJhZ2VOb2RlVmVsb2NpdHkgPSAwO1xuXG4gICAgLy8gdGhlIHZlbG9jaXR5IHRocmVzaG9sZCAoZW5lcmd5IGluIHRoZSBzeXN0ZW0pIGZvciB0aGUgYWRhcHRpdml0eSB0b2dnbGVcbiAgICBjb25zdCB2ZWxvY2l0eUFkYXB0aXZlVGhyZXNob2xkID0gNTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IG5vZGVJbmRpY2VzW2ldO1xuICAgICAgY29uc3Qgbm9kZVZlbG9jaXR5ID0gdGhpcy5fcGVyZm9ybVN0ZXAobm9kZUlkKTtcbiAgICAgIC8vIHN0YWJpbGl6ZWQgaXMgdHJ1ZSBpZiBzdGFiaWxpemVkIGlzIHRydWUgYW5kIHZlbG9jaXR5IGlzIHNtYWxsZXIgdGhhbiB2bWluIC0tPiBhbGwgbm9kZXMgbXVzdCBiZSBzdGFiaWxpemVkXG4gICAgICBtYXhOb2RlVmVsb2NpdHkgPSBNYXRoLm1heChtYXhOb2RlVmVsb2NpdHksIG5vZGVWZWxvY2l0eSk7XG4gICAgICBhdmVyYWdlTm9kZVZlbG9jaXR5ICs9IG5vZGVWZWxvY2l0eTtcbiAgICB9XG5cbiAgICAvLyBldmFsdWF0aW5nIHRoZSBzdGFiaWxpemVkIGFuZCBhZGFwdGl2ZVRpbWVzdGVwRW5hYmxlZCBjb25kaXRpb25zXG4gICAgdGhpcy5hZGFwdGl2ZVRpbWVzdGVwRW5hYmxlZCA9XG4gICAgICBhdmVyYWdlTm9kZVZlbG9jaXR5IC8gbm9kZUluZGljZXMubGVuZ3RoIDwgdmVsb2NpdHlBZGFwdGl2ZVRocmVzaG9sZDtcbiAgICB0aGlzLnN0YWJpbGl6ZWQgPSBtYXhOb2RlVmVsb2NpdHkgPCB0aGlzLm9wdGlvbnMubWluVmVsb2NpdHk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIG5ldyB2ZWxvY2l0eSBmb3IgYSBjb29yZGluYXRlIGRpcmVjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdiAgdmVsb2NpdHkgZm9yIGN1cnJlbnQgY29vcmRpbmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gZiAgcmVndWxhciBmb3JjZSBmb3IgY3VycmVudCBjb29yZGluYXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtICBtYXNzIG9mIGN1cnJlbnQgbm9kZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBuZXcgdmVsb2NpdHkgZm9yIGN1cnJlbnQgY29vcmRpbmF0ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2FsY3VsYXRlQ29tcG9uZW50VmVsb2NpdHkodiwgZiwgbSkge1xuICAgIGNvbnN0IGRmID0gdGhpcy5tb2RlbE9wdGlvbnMuZGFtcGluZyAqIHY7IC8vIGRhbXBpbmcgZm9yY2VcbiAgICBjb25zdCBhID0gKGYgLSBkZikgLyBtOyAvLyBhY2NlbGVyYXRpb25cblxuICAgIHYgKz0gYSAqIHRoaXMudGltZXN0ZXA7XG5cbiAgICAvLyBQdXQgYSBsaW1pdCBvbiB0aGUgdmVsb2NpdGllcyBpZiBpdCBpcyByZWFsbHkgaGlnaFxuICAgIGNvbnN0IG1heFYgPSB0aGlzLm9wdGlvbnMubWF4VmVsb2NpdHkgfHwgMWU5O1xuICAgIGlmIChNYXRoLmFicyh2KSA+IG1heFYpIHtcbiAgICAgIHYgPSB2ID4gMCA/IG1heFYgOiAtbWF4VjtcbiAgICB9XG5cbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBhY3R1YWwgc3RlcFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgbmV3IHZlbG9jaXR5IG9mIGdpdmVuIG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtU3RlcChub2RlSWQpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgY29uc3QgZm9yY2UgPSB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlSWRdO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy53aW5kKSB7XG4gICAgICBmb3JjZS54ICs9IHRoaXMub3B0aW9ucy53aW5kLng7XG4gICAgICBmb3JjZS55ICs9IHRoaXMub3B0aW9ucy53aW5kLnk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVsb2NpdHkgPSB0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXNbbm9kZUlkXTtcblxuICAgIC8vIHN0b3JlIHRoZSBzdGF0ZSBzbyB3ZSBjYW4gcmV2ZXJ0XG4gICAgdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdID0ge1xuICAgICAgeDogbm9kZS54LFxuICAgICAgeTogbm9kZS55LFxuICAgICAgdng6IHZlbG9jaXR5LngsXG4gICAgICB2eTogdmVsb2NpdHkueSxcbiAgICB9O1xuXG4gICAgaWYgKG5vZGUub3B0aW9ucy5maXhlZC54ID09PSBmYWxzZSkge1xuICAgICAgdmVsb2NpdHkueCA9IHRoaXMuY2FsY3VsYXRlQ29tcG9uZW50VmVsb2NpdHkoXG4gICAgICAgIHZlbG9jaXR5LngsXG4gICAgICAgIGZvcmNlLngsXG4gICAgICAgIG5vZGUub3B0aW9ucy5tYXNzXG4gICAgICApO1xuICAgICAgbm9kZS54ICs9IHZlbG9jaXR5LnggKiB0aGlzLnRpbWVzdGVwO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JjZS54ID0gMDtcbiAgICAgIHZlbG9jaXR5LnggPSAwO1xuICAgIH1cblxuICAgIGlmIChub2RlLm9wdGlvbnMuZml4ZWQueSA9PT0gZmFsc2UpIHtcbiAgICAgIHZlbG9jaXR5LnkgPSB0aGlzLmNhbGN1bGF0ZUNvbXBvbmVudFZlbG9jaXR5KFxuICAgICAgICB2ZWxvY2l0eS55LFxuICAgICAgICBmb3JjZS55LFxuICAgICAgICBub2RlLm9wdGlvbnMubWFzc1xuICAgICAgKTtcbiAgICAgIG5vZGUueSArPSB2ZWxvY2l0eS55ICogdGhpcy50aW1lc3RlcDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yY2UueSA9IDA7XG4gICAgICB2ZWxvY2l0eS55ID0gMDtcbiAgICB9XG5cbiAgICBjb25zdCB0b3RhbFZlbG9jaXR5ID0gTWF0aC5zcXJ0KFxuICAgICAgTWF0aC5wb3codmVsb2NpdHkueCwgMikgKyBNYXRoLnBvdyh2ZWxvY2l0eS55LCAyKVxuICAgICk7XG4gICAgcmV0dXJuIHRvdGFsVmVsb2NpdHk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBpbml0aWFsaXppbmcgYW5kIHN0YWJpbGl6aW5nLCB3ZSBjYW4gZnJlZXplIG5vZGVzIHdpdGggYSBwcmVkZWZpbmVkIHBvc2l0aW9uLlxuICAgKiBUaGlzIGdyZWF0bHkgc3BlZWRzIHVwIHN0YWJpbGl6YXRpb24gYmVjYXVzZSBvbmx5IHRoZSBzdXBwb3J0bm9kZXMgZm9yIHRoZSBzbW9vdGhDdXJ2ZXMgaGF2ZSB0byBzZXR0bGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZnJlZXplTm9kZXMoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgZm9yIChjb25zdCBpZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlcywgaWQpKSB7XG4gICAgICAgIGlmIChub2Rlc1tpZF0ueCAmJiBub2Rlc1tpZF0ueSkge1xuICAgICAgICAgIGNvbnN0IGZpeGVkID0gbm9kZXNbaWRdLm9wdGlvbnMuZml4ZWQ7XG4gICAgICAgICAgdGhpcy5mcmVlemVDYWNoZVtpZF0gPSB7IHg6IGZpeGVkLngsIHk6IGZpeGVkLnkgfTtcbiAgICAgICAgICBmaXhlZC54ID0gdHJ1ZTtcbiAgICAgICAgICBmaXhlZC55ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbmZyZWV6ZXMgdGhlIG5vZGVzIHRoYXQgaGF2ZSBiZWVuIGZyb3plbiBieSBfZnJlZXplRGVmaW5lZE5vZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc3RvcmVGcm96ZW5Ob2RlcygpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBmb3IgKGNvbnN0IGlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBpZCkpIHtcbiAgICAgICAgaWYgKHRoaXMuZnJlZXplQ2FjaGVbaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub2Rlc1tpZF0ub3B0aW9ucy5maXhlZC54ID0gdGhpcy5mcmVlemVDYWNoZVtpZF0ueDtcbiAgICAgICAgICBub2Rlc1tpZF0ub3B0aW9ucy5maXhlZC55ID0gdGhpcy5mcmVlemVDYWNoZVtpZF0ueTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmZyZWV6ZUNhY2hlID0ge307XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIHN0YWJsZSBwb3NpdGlvbiBmb3IgYWxsIG5vZGVzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaXRlcmF0aW9ucz10aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi5pdGVyYXRpb25zXVxuICAgKi9cbiAgc3RhYmlsaXplKGl0ZXJhdGlvbnMgPSB0aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi5pdGVyYXRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRpb25zICE9PSBcIm51bWJlclwiKSB7XG4gICAgICBpdGVyYXRpb25zID0gdGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24uaXRlcmF0aW9ucztcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiVGhlIHN0YWJpbGl6ZSBtZXRob2QgbmVlZHMgYSBudW1lcmljIGFtb3VudCBvZiBpdGVyYXRpb25zLiBTd2l0Y2hpbmcgdG8gZGVmYXVsdDogXCIsXG4gICAgICAgIGl0ZXJhdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZW5hYmxlIGFkYXB0aXZlIHRpbWVzdGVwc1xuICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcCA9IHRydWUgJiYgdGhpcy5vcHRpb25zLmFkYXB0aXZlVGltZXN0ZXA7XG5cbiAgICAvLyB0aGlzIHNldHMgdGhlIHdpZHRoIG9mIGFsbCBub2RlcyBpbml0aWFsbHkgd2hpY2ggY291bGQgYmUgcmVxdWlyZWQgZm9yIHRoZSBhdm9pZE92ZXJsYXBcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3Jlc2l6ZU5vZGVzXCIpO1xuXG4gICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpOyAvLyBzdG9wIHRoZSByZW5kZXIgbG9vcFxuICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuXG4gICAgLy8gYmxvY2sgcmVkcmF3IHJlcXVlc3RzXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9ibG9ja1JlZHJhd1wiKTtcbiAgICB0aGlzLnRhcmdldEl0ZXJhdGlvbnMgPSBpdGVyYXRpb25zO1xuXG4gICAgLy8gc3RhcnQgdGhlIHN0YWJpbGl6YXRpb25cbiAgICBpZiAodGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24ub25seUR5bmFtaWNFZGdlcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5fZnJlZXplTm9kZXMoKTtcbiAgICB9XG4gICAgdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucyA9IDA7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3N0YWJpbGl6YXRpb25CYXRjaCgpLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBub3QgYWxyZWFkeSBzdGFiaWxpemluZywgc3RhcnQgaXQgYW5kIGVtaXQgYSBzdGFydCBldmVudC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgc3RhYmlsaXphdGlvbiBzdGFydGVkIHdpdGggdGhpcyBjYWxsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RhcnRTdGFiaWxpemluZygpIHtcbiAgICBpZiAodGhpcy5zdGFydGVkU3RhYmlsaXphdGlvbiA9PT0gdHJ1ZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U3RhYmlsaXppbmdcIik7XG4gICAgdGhpcy5zdGFydGVkU3RhYmlsaXphdGlvbiA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogT25lIGJhdGNoIG9mIHN0YWJpbGl6YXRpb25cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zdGFiaWxpemF0aW9uQmF0Y2goKSB7XG4gICAgY29uc3QgcnVubmluZyA9ICgpID0+XG4gICAgICB0aGlzLnN0YWJpbGl6ZWQgPT09IGZhbHNlICYmXG4gICAgICB0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zIDwgdGhpcy50YXJnZXRJdGVyYXRpb25zO1xuXG4gICAgY29uc3Qgc2VuZFByb2dyZXNzID0gKCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YWJpbGl6YXRpb25Qcm9ncmVzc1wiLCB7XG4gICAgICAgIGl0ZXJhdGlvbnM6IHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMsXG4gICAgICAgIHRvdGFsOiB0aGlzLnRhcmdldEl0ZXJhdGlvbnMsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3N0YXJ0U3RhYmlsaXppbmcoKSkge1xuICAgICAgc2VuZFByb2dyZXNzKCk7IC8vIEVuc3VyZSB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBzdGFydCBldmVudC5cbiAgICB9XG5cbiAgICBsZXQgY291bnQgPSAwO1xuICAgIHdoaWxlIChydW5uaW5nKCkgJiYgY291bnQgPCB0aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi51cGRhdGVJbnRlcnZhbCkge1xuICAgICAgdGhpcy5waHlzaWNzVGljaygpO1xuICAgICAgY291bnQrKztcbiAgICB9XG5cbiAgICBzZW5kUHJvZ3Jlc3MoKTtcblxuICAgIGlmIChydW5uaW5nKCkpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5fc3RhYmlsaXphdGlvbkJhdGNoLmJpbmQodGhpcyksIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9maW5hbGl6ZVN0YWJpbGl6YXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JhcCB1cCB0aGUgc3RhYmlsaXphdGlvbiwgZml0IGFuZCBlbWl0IHRoZSBldmVudHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmluYWxpemVTdGFiaWxpemF0aW9uKCkge1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfYWxsb3dSZWRyYXdcIik7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLmZpdCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImZpdFwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24ub25seUR5bmFtaWNFZGdlcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5fcmVzdG9yZUZyb3plbk5vZGVzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YWJpbGl6YXRpb25JdGVyYXRpb25zRG9uZVwiKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG5cbiAgICBpZiAodGhpcy5zdGFiaWxpemVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLl9lbWl0U3RhYmlsaXplZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0U2ltdWxhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICB9XG5cbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFQlVHR0lORyBCRUxPVyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cblxuICAvKipcbiAgICogRGVidWcgZnVuY3Rpb24gdGhhdCBkaXNwbGF5IGFycm93cyBmb3IgdGhlIGZvcmNlcyBjdXJyZW50bHkgYWN0aXZlIGluIHRoZSBuZXR3b3JrLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIGRlYnVnZ2luZyBvbmx5LlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd0ZvcmNlcyhjdHgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzW2ldO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpbmRleF07XG4gICAgICBjb25zdCBmb3JjZSA9IHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW2luZGV4XTtcbiAgICAgIGNvbnN0IGZhY3RvciA9IDIwO1xuICAgICAgY29uc3QgY29sb3JGYWN0b3IgPSAwLjAzO1xuICAgICAgY29uc3QgZm9yY2VTaXplID0gTWF0aC5zcXJ0KE1hdGgucG93KGZvcmNlLngsIDIpICsgTWF0aC5wb3coZm9yY2UueCwgMikpO1xuXG4gICAgICBjb25zdCBzaXplID0gTWF0aC5taW4oTWF0aC5tYXgoNSwgZm9yY2VTaXplKSwgMTUpO1xuICAgICAgY29uc3QgYXJyb3dTaXplID0gMyAqIHNpemU7XG5cbiAgICAgIGNvbnN0IGNvbG9yID0gSFNWVG9IZXgoXG4gICAgICAgICgxODAgLSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBjb2xvckZhY3RvciAqIGZvcmNlU2l6ZSkpICogMTgwKSAvIDM2MCxcbiAgICAgICAgMSxcbiAgICAgICAgMVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcG9pbnQgPSB7XG4gICAgICAgIHg6IG5vZGUueCArIGZhY3RvciAqIGZvcmNlLngsXG4gICAgICAgIHk6IG5vZGUueSArIGZhY3RvciAqIGZvcmNlLnksXG4gICAgICB9O1xuXG4gICAgICBjdHgubGluZVdpZHRoID0gc2l6ZTtcbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY3R4Lm1vdmVUbyhub2RlLngsIG5vZGUueSk7XG4gICAgICBjdHgubGluZVRvKHBvaW50LngsIHBvaW50LnkpO1xuICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIoZm9yY2UueSwgZm9yY2UueCk7XG4gICAgICBjdHguZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICBFbmRQb2ludHMuZHJhdyhjdHgsIHtcbiAgICAgICAgdHlwZTogXCJhcnJvd1wiLFxuICAgICAgICBwb2ludDogcG9pbnQsXG4gICAgICAgIGFuZ2xlOiBhbmdsZSxcbiAgICAgICAgbGVuZ3RoOiBhcnJvd1NpemUsXG4gICAgICB9KTtcbiAgICAgIGN0eC5maWxsKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBoeXNpY3NFbmdpbmU7XG4iLCAiLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG5sZXQgZ2V0UmFuZG9tVmFsdWVzO1xuY29uc3Qgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cbiAgICBnZXRSYW5kb21WYWx1ZXMgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pO1xuXG4gICAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbn0iLCAiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5cbmNvbnN0IGJ5dGVUb0hleCA9IFtdO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICByZXR1cm4gYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV07XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgY29uc3QgdXVpZCA9IHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7IiwgImNvbnN0IHJhbmRvbVVVSUQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCAmJiBjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byk7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHJhbmRvbVVVSURcbn07IiwgImltcG9ydCBuYXRpdmUgZnJvbSAnLi9uYXRpdmUuanMnO1xuaW1wb3J0IHJuZyBmcm9tICcuL3JuZy5qcyc7XG5pbXBvcnQgeyB1bnNhZmVTdHJpbmdpZnkgfSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChuYXRpdmUucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5hdGl2ZS5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3Qgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7IC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcblxuICBybmRzWzZdID0gcm5kc1s2XSAmIDB4MGYgfCAweDQwO1xuICBybmRzWzhdID0gcm5kc1s4XSAmIDB4M2YgfCAweDgwOyAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcblxuICBpZiAoYnVmKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIHJldHVybiB1bnNhZmVTdHJpbmdpZnkocm5kcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHY0OyIsICJpbXBvcnQgeyBkZWVwRXh0ZW5kIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIFV0aWxpdHkgQ2xhc3NcbiAqL1xuY2xhc3MgTmV0d29ya1V0aWwge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBjZW50ZXIgcG9zaXRpb24gb2YgdGhlIG5ldHdvcmsgY29uc2lkZXJpbmcgdGhlIGJvdW5kaW5nIGJveGVzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBhbGxOb2Rlc1xuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gW3NwZWNpZmljTm9kZXM9W11dXG4gICAqIEByZXR1cm5zIHt7bWluWDogbnVtYmVyLCBtYXhYOiBudW1iZXIsIG1pblk6IG51bWJlciwgbWF4WTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGdldFJhbmdlKGFsbE5vZGVzLCBzcGVjaWZpY05vZGVzID0gW10pIHtcbiAgICBsZXQgbWluWSA9IDFlOSxcbiAgICAgIG1heFkgPSAtMWU5LFxuICAgICAgbWluWCA9IDFlOSxcbiAgICAgIG1heFggPSAtMWU5LFxuICAgICAgbm9kZTtcbiAgICBpZiAoc3BlY2lmaWNOb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwZWNpZmljTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZSA9IGFsbE5vZGVzW3NwZWNpZmljTm9kZXNbaV1dO1xuICAgICAgICBpZiAobWluWCA+IG5vZGUuc2hhcGUuYm91bmRpbmdCb3gubGVmdCkge1xuICAgICAgICAgIG1pblggPSBub2RlLnNoYXBlLmJvdW5kaW5nQm94LmxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heFggPCBub2RlLnNoYXBlLmJvdW5kaW5nQm94LnJpZ2h0KSB7XG4gICAgICAgICAgbWF4WCA9IG5vZGUuc2hhcGUuYm91bmRpbmdCb3gucmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pblkgPiBub2RlLnNoYXBlLmJvdW5kaW5nQm94LnRvcCkge1xuICAgICAgICAgIG1pblkgPSBub2RlLnNoYXBlLmJvdW5kaW5nQm94LnRvcDtcbiAgICAgICAgfSAvLyB0b3AgaXMgbmVnYXRpdmUsIGJvdHRvbSBpcyBwb3NpdGl2ZVxuICAgICAgICBpZiAobWF4WSA8IG5vZGUuc2hhcGUuYm91bmRpbmdCb3guYm90dG9tKSB7XG4gICAgICAgICAgbWF4WSA9IG5vZGUuc2hhcGUuYm91bmRpbmdCb3guYm90dG9tO1xuICAgICAgICB9IC8vIHRvcCBpcyBuZWdhdGl2ZSwgYm90dG9tIGlzIHBvc2l0aXZlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1pblggPT09IDFlOSAmJiBtYXhYID09PSAtMWU5ICYmIG1pblkgPT09IDFlOSAmJiBtYXhZID09PSAtMWU5KSB7XG4gICAgICAobWluWSA9IDApLCAobWF4WSA9IDApLCAobWluWCA9IDApLCAobWF4WCA9IDApO1xuICAgIH1cbiAgICByZXR1cm4geyBtaW5YOiBtaW5YLCBtYXhYOiBtYXhYLCBtaW5ZOiBtaW5ZLCBtYXhZOiBtYXhZIH07XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgY2VudGVyIHBvc2l0aW9uIG9mIHRoZSBuZXR3b3JrXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBhbGxOb2Rlc1xuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gW3NwZWNpZmljTm9kZXM9W11dXG4gICAqIEByZXR1cm5zIHt7bWluWDogbnVtYmVyLCBtYXhYOiBudW1iZXIsIG1pblk6IG51bWJlciwgbWF4WTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGdldFJhbmdlQ29yZShhbGxOb2Rlcywgc3BlY2lmaWNOb2RlcyA9IFtdKSB7XG4gICAgbGV0IG1pblkgPSAxZTksXG4gICAgICBtYXhZID0gLTFlOSxcbiAgICAgIG1pblggPSAxZTksXG4gICAgICBtYXhYID0gLTFlOSxcbiAgICAgIG5vZGU7XG4gICAgaWYgKHNwZWNpZmljTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGVjaWZpY05vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5vZGUgPSBhbGxOb2Rlc1tzcGVjaWZpY05vZGVzW2ldXTtcbiAgICAgICAgaWYgKG1pblggPiBub2RlLngpIHtcbiAgICAgICAgICBtaW5YID0gbm9kZS54O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhYIDwgbm9kZS54KSB7XG4gICAgICAgICAgbWF4WCA9IG5vZGUueDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWluWSA+IG5vZGUueSkge1xuICAgICAgICAgIG1pblkgPSBub2RlLnk7XG4gICAgICAgIH0gLy8gdG9wIGlzIG5lZ2F0aXZlLCBib3R0b20gaXMgcG9zaXRpdmVcbiAgICAgICAgaWYgKG1heFkgPCBub2RlLnkpIHtcbiAgICAgICAgICBtYXhZID0gbm9kZS55O1xuICAgICAgICB9IC8vIHRvcCBpcyBuZWdhdGl2ZSwgYm90dG9tIGlzIHBvc2l0aXZlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1pblggPT09IDFlOSAmJiBtYXhYID09PSAtMWU5ICYmIG1pblkgPT09IDFlOSAmJiBtYXhZID09PSAtMWU5KSB7XG4gICAgICAobWluWSA9IDApLCAobWF4WSA9IDApLCAobWluWCA9IDApLCAobWF4WCA9IDApO1xuICAgIH1cbiAgICByZXR1cm4geyBtaW5YOiBtaW5YLCBtYXhYOiBtYXhYLCBtaW5ZOiBtaW5ZLCBtYXhZOiBtYXhZIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHJhbmdlID0ge21pblg6IG1pblgsIG1heFg6IG1heFgsIG1pblk6IG1pblksIG1heFk6IG1heFl9O1xuICAgKiBAcmV0dXJucyB7e3g6IG51bWJlciwgeTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRDZW50ZXIocmFuZ2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogMC41ICogKHJhbmdlLm1heFggKyByYW5nZS5taW5YKSxcbiAgICAgIHk6IDAuNSAqIChyYW5nZS5tYXhZICsgcmFuZ2UubWluWSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHJldHVybnMgYSBjbG9uZSBvZiB0aGUgb3B0aW9ucyBvciBvcHRpb25zIG9mIHRoZSBlZGdlIG9yIG5vZGUgdG8gYmUgdXNlZCBmb3IgY29uc3RydWN0aW9uIG9mIG5ldyBlZGdlcyBvciBjaGVjayBmdW5jdGlvbnMgZm9yIG5ldyBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHt2aXMuSXRlbX0gaXRlbVxuICAgKiBAcGFyYW0geydub2RlJ3x1bmRlZmluZWR9IHR5cGVcbiAgICogQHJldHVybnMge3t9fVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgY2xvbmVPcHRpb25zKGl0ZW0sIHR5cGUpIHtcbiAgICBjb25zdCBjbG9uZWRPcHRpb25zID0ge307XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcIm5vZGVcIikge1xuICAgICAgZGVlcEV4dGVuZChjbG9uZWRPcHRpb25zLCBpdGVtLm9wdGlvbnMsIHRydWUpO1xuICAgICAgY2xvbmVkT3B0aW9ucy54ID0gaXRlbS54O1xuICAgICAgY2xvbmVkT3B0aW9ucy55ID0gaXRlbS55O1xuICAgICAgY2xvbmVkT3B0aW9ucy5hbW91bnRPZkNvbm5lY3Rpb25zID0gaXRlbS5lZGdlcy5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZXBFeHRlbmQoY2xvbmVkT3B0aW9ucywgaXRlbS5vcHRpb25zLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lZE9wdGlvbnM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTmV0d29ya1V0aWw7XG4iLCAiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCBOb2RlIGZyb20gXCIuLi9Ob2RlXCI7XG5cbi8qKlxuICogQSBDbHVzdGVyIGlzIGEgc3BlY2lhbCBOb2RlIHRoYXQgYWxsb3dzIGEgZ3JvdXAgb2YgTm9kZXMgcG9zaXRpb25lZCBjbG9zZWx5IHRvZ2V0aGVyXG4gKiB0byBiZSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBDbHVzdGVyIE5vZGUuXG4gKlxuICogQGF1Z21lbnRzIE5vZGVcbiAqL1xuY2xhc3MgQ2x1c3RlciBleHRlbmRzIE5vZGUge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtBcnJheS48SFRNTEltYWdlRWxlbWVudD59aW1hZ2VsaXN0XG4gICAqIEBwYXJhbSB7QXJyYXl9IGdyb3VwbGlzdFxuICAgKiBAcGFyYW0ge29iamVjdH0gZ2xvYmFsT3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdE9wdGlvbnMgICAgIEdsb2JhbCBkZWZhdWx0IG9wdGlvbnMgZm9yIG5vZGVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zLFxuICAgIGJvZHksXG4gICAgaW1hZ2VsaXN0LFxuICAgIGdyb3VwbGlzdCxcbiAgICBnbG9iYWxPcHRpb25zLFxuICAgIGRlZmF1bHRPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGltYWdlbGlzdCwgZ3JvdXBsaXN0LCBnbG9iYWxPcHRpb25zLCBkZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmlzQ2x1c3RlciA9IHRydWU7XG4gICAgdGhpcy5jb250YWluZWROb2RlcyA9IHt9O1xuICAgIHRoaXMuY29udGFpbmVkRWRnZXMgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2ZlciBjaGlsZCBjbHVzdGVyIGRhdGEgdG8gY3VycmVudCBhbmQgZGlzY29ubmVjdCB0aGUgY2hpbGQgY2x1c3Rlci5cbiAgICpcbiAgICogUGxlYXNlIGNvbnN1bHQgdGhlIGhlYWRlciBjb21tZW50IGluICdDbHVzdGVyaW5nLmpzJyBmb3IgdGhlIGZpZWxkcyBzZXQgaGVyZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBjaGlsZENsdXN0ZXJJZCAgaWQgb2YgY2hpbGQgY2x1c3RlciB0byBvcGVuXG4gICAqL1xuICBfb3BlbkNoaWxkQ2x1c3RlcihjaGlsZENsdXN0ZXJJZCkge1xuICAgIGNvbnN0IGNoaWxkQ2x1c3RlciA9IHRoaXMuYm9keS5ub2Rlc1tjaGlsZENsdXN0ZXJJZF07XG4gICAgaWYgKHRoaXMuY29udGFpbmVkTm9kZXNbY2hpbGRDbHVzdGVySWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJub2RlIHdpdGggaWQ6IFwiICsgY2hpbGRDbHVzdGVySWQgKyBcIiBub3QgaW4gY3VycmVudCBjbHVzdGVyXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY2hpbGRDbHVzdGVyLmlzQ2x1c3Rlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm9kZSB3aXRoIGlkOiBcIiArIGNoaWxkQ2x1c3RlcklkICsgXCIgaXMgbm90IGEgY2x1c3RlclwiKTtcbiAgICB9XG5cbiAgICAvLyBEaXNjb25uZWN0IGNoaWxkIGNsdXN0ZXIgZnJvbSBjdXJyZW50IGNsdXN0ZXJcbiAgICBkZWxldGUgdGhpcy5jb250YWluZWROb2Rlc1tjaGlsZENsdXN0ZXJJZF07XG4gICAgZm9yRWFjaChjaGlsZENsdXN0ZXIuZWRnZXMsIChlZGdlKSA9PiB7XG4gICAgICBkZWxldGUgdGhpcy5jb250YWluZWRFZGdlc1tlZGdlLmlkXTtcbiAgICB9KTtcblxuICAgIC8vIFRyYW5zZmVyIG5vZGVzIGFuZCBlZGdlc1xuICAgIGZvckVhY2goY2hpbGRDbHVzdGVyLmNvbnRhaW5lZE5vZGVzLCAobm9kZSwgbm9kZUlkKSA9PiB7XG4gICAgICB0aGlzLmNvbnRhaW5lZE5vZGVzW25vZGVJZF0gPSBub2RlO1xuICAgIH0pO1xuICAgIGNoaWxkQ2x1c3Rlci5jb250YWluZWROb2RlcyA9IHt9O1xuXG4gICAgZm9yRWFjaChjaGlsZENsdXN0ZXIuY29udGFpbmVkRWRnZXMsIChlZGdlLCBlZGdlSWQpID0+IHtcbiAgICAgIHRoaXMuY29udGFpbmVkRWRnZXNbZWRnZUlkXSA9IGVkZ2U7XG4gICAgfSk7XG4gICAgY2hpbGRDbHVzdGVyLmNvbnRhaW5lZEVkZ2VzID0ge307XG5cbiAgICAvLyBUcmFuc2ZlciBlZGdlcyB3aXRoaW4gY2x1c3RlciBlZGdlcyB3aGljaCBhcmUgY2x1c3RlcmVkXG4gICAgZm9yRWFjaChjaGlsZENsdXN0ZXIuZWRnZXMsIChjbHVzdGVyRWRnZSkgPT4ge1xuICAgICAgZm9yRWFjaCh0aGlzLmVkZ2VzLCAocGFyZW50Q2x1c3RlckVkZ2UpID0+IHtcbiAgICAgICAgLy8gQXNzdW1wdGlvbjogYSBjbHVzdGVyZWQgZWRnZSBjYW4gb25seSBiZSBwcmVzZW50IGluIGEgc2luZ2xlIGNsdXN0ZXJpbmcgZWRnZVxuICAgICAgICAvLyBOb3QgdGVzdGVkIGhlcmVcbiAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRDbHVzdGVyRWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcy5pbmRleE9mKFxuICAgICAgICAgIGNsdXN0ZXJFZGdlLmlkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybjtcblxuICAgICAgICBmb3JFYWNoKGNsdXN0ZXJFZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzLCAoc3JjSWQpID0+IHtcbiAgICAgICAgICBwYXJlbnRDbHVzdGVyRWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcy5wdXNoKHNyY0lkKTtcblxuICAgICAgICAgIC8vIE1haW50YWluIGNvcnJlY3QgYm9va2tlZXBpbmcgZm9yIHRyYW5zZmVycmVkIGVkZ2VcbiAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbc3JjSWRdLmVkZ2VSZXBsYWNlZEJ5SWQgPSBwYXJlbnRDbHVzdGVyRWRnZS5pZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGNsdXN0ZXIgZWRnZSBmcm9tIHBhcmVudCBjbHVzdGVyIGVkZ2VcbiAgICAgICAgcGFyZW50Q2x1c3RlckVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNoaWxkQ2x1c3Rlci5lZGdlcyA9IFtdO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENsdXN0ZXI7XG4iLCAiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiMgVE9ET1xuXG4tIGBlZGdlUmVwbGFjZWRCeUlkYCBub3QgY2xlYW5lZCB1cCB5ZXQgb24gY2x1c3RlciBlZGdlIHJlbW92YWxcbi0gYWxsb3dTaW5nbGVOb2RlQ2x1c3RlciBjb3VsZCBiZSBhIGdsb2JhbCBvcHRpb24gYXMgd2VsbDsgY3VycmVudGx5IG5lZWRzIHRvIGFsd2F5c1xuICBiZSBwYXNzZWQgdG8gY2x1c3RlcmluZyBtZXRob2RzXG5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIyBTdGF0ZSBNb2RlbCBmb3IgQ2x1c3RlcmluZ1xuXG5UaGUgdG90YWwgc3RhdGUgZm9yIGNsdXN0ZXJpbmcgaXMgbm9uLXRyaXZpYWwuIEl0IGlzIHVzZWZ1bCB0byBoYXZlIGEgbW9kZWxcbmF2YWlsYWJsZSBhcyB0byBob3cgaXQgd29ya3MuIFRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIHRoZSByZWxldmFudCBzdGF0ZSBpdGVtcy5cblxuXG4jIyBOZXR3b3JrIFN0YXRlXG5cblRoZSBmb2xsb3dpbmcgYG5ldHdvcmtgLW1lbWJlcnMgYXJlIHJlbGV2YW50IHRvIGNsdXN0ZXJpbmc6XG5cbi0gYGJvZHkubm9kZXNgICAgICAgIC0gYWxsIG5vZGVzIGFjdGl2ZWx5IHBhcnRpY2lwYXRpbmcgaW4gdGhlIG5ldHdvcmtcbi0gYGJvZHkuZWRnZXNgICAgICAgIC0gc2FtZSBmb3IgZWRnZXNcbi0gYGJvZHkubm9kZUluZGljZXNgIC0gaWQncyBvZiBub2RlcyB0aGF0IGFyZSB2aXNpYmxlIGF0IGEgZ2l2ZW4gbW9tZW50XG4tIGBib2R5LmVkZ2VJbmRpY2VzYCAtIHNhbWUgZm9yIGVkZ2VzXG5cblRoaXMgaW5jbHVkZXM6XG5cbi0gaGVscGVyIG5vZGVzIGZvciBkcmFnZ2luZyBpbiBgbWFuaXB1bGF0aW9uYFxuLSBoZWxwZXIgbm9kZXMgZm9yIGVkZ2UgdHlwZSBgZHluYW1pY2Bcbi0gY2x1c3RlciBub2RlcyBhbmQgZWRnZXNcbi0gdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiB0aGlzLlxuXG5BIG5vZGUvZWRnZSBtYXkgYmUgbWlzc2luZyBpbiB0aGUgYEluZGljZXNgIG1lbWJlciBpZjpcblxuLSBpdCBpcyBhIGhlbHBlciBub2RlXG4tIHRoZSBub2RlIG9yIGVkZ2Ugc3RhdGUgaGFzIG9wdGlvbiBgaGlkZGVuYCBzZXRcbi0gSXQgaXMgbm90IHZpc2libGUgZHVlIHRvIGNsdXN0ZXJpbmdcblxuXG4jIyBDbHVzdGVyaW5nIFN0YXRlXG5cbkZvciB0aGUgaGFzaGVzLCB0aGUgaWQncyBvZiB0aGUgbm9kZXMvZWRnZXMgYXJlIHVzZWQgYXMga2V5LlxuXG5NZW1iZXIgYG5ldHdvcmsuY2x1c3RlcmluZ2AgY29udGFpbnMgdGhlIGZvbGxvd2luZyBpdGVtczpcblxuLSBgY2x1c3RlcmVkTm9kZXNgIC0gaGFzaCB3aXRoIHZhbHVlczogeyBjbHVzdGVySWQ6IDxpZCBvZiBjbHVzdGVyPiwgbm9kZTogPG5vZGUgaW5zdGFuY2U+fVxuLSBgY2x1c3RlcmVkRWRnZXNgIC0gaGFzaCB3aXRoIHZhbHVlczogcmVzdG9yZSBpbmZvcm1hdGlvbiBmb3IgZ2l2ZW4gZWRnZVxuXG5cbkR1ZSB0byBuZXN0aW5nIG9mIGNsdXN0ZXJzLCB0aGVzZSBtZW1iZXJzIGNhbiBjb250YWluIGNsdXN0ZXIgbm9kZXMgYW5kIGVkZ2VzIGFzIHdlbGwuXG5cblRoZSBpbXBvcnRhbnQgdGhpbmcgdG8gbm90ZSBoZXJlLCBpcyB0aGF0IHRoZSBjbHVzdGVyZWQgbm9kZXMgYW5kIGVkZ2VzIGFsc29cbmFwcGVhciBpbiB0aGUgbWVtYmVycyBvZiB0aGUgY2x1c3RlciBub2Rlcy4gRm9yIGRhdGEgdXBkYXRlLCBpdCBpcyB0aGVyZWZvcmVcbmltcG9ydGFudCB0byBzY2FuIHRoZXNlIGxpc3RzIGFzIHdlbGwgYXMgdGhlIGNsdXN0ZXIgbm9kZXMuXG5cblxuIyMjIENsdXN0ZXIgTm9kZVxuXG5BIGNsdXN0ZXIgbm9kZSBoYXMgdGhlIGZvbGxvd2luZyBleHRyYSBmaWVsZHM6XG5cbi0gYGlzQ2x1c3RlciA6IHRydWVgIC0gaW5kaWNhdGlvbiB0aGF0IHRoaXMgaXMgYSBjbHVzdGVyIG5vZGVcbi0gYGNvbnRhaW5lZE5vZGVzYCAgIC0gaGFzaCBvZiBub2RlcyBjb250YWluZWQgaW4gdGhpcyBjbHVzdGVyXG4tIGBjb250YWluZWRFZGdlc2AgICAtIHNhbWUgZm9yIGVkZ2VzXG4tIGBlZGdlc2AgICAgICAgICAgICAtIGFycmF5IG9mIGNsdXN0ZXIgZWRnZXMgZm9yIHRoaXMgbm9kZVxuXG5cbioqTk9URToqKlxuXG4tIGBjb250YWluZWRFZGdlc2AgY2FuIGFsc28gY29udGFpbiBlZGdlcyB3aGljaCBhcmUgbm90IGNsdXN0ZXJlZDsgZS5nLiBhbiBlZGdlXG4gICBjb25uZWN0aW5nIHR3byBub2RlcyBpbiB0aGUgc2FtZSBjbHVzdGVyLlxuXG5cbiMjIyBDbHVzdGVyIEVkZ2VcblxuVGhlc2UgYXJlIHRoZSBpdGVtcyBpbiB0aGUgYGVkZ2VzYCBtZW1iZXIgb2YgYSBjbHVzdGVyZWQgbm9kZS4gVGhleSBoYXZlIHRoZVxuZm9sbG93aW5nIHJlbGV2YW50IG1lbWJlcnM6XG5cbi0gJ2NsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzYCAtIGFycmF5IG9mIGlkJ3Mgb2YgZWRnZXMgcmVwbGFjZWQgYnkgdGhpcyBlZGdlXG5cbk5vdGUgdGhhdCBpdCdzIHBvc3NpYmxlIHRvIG5lc3QgY2x1c3RlcnMsIHNvIHRoYXQgYGNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzYFxuY2FuIGNvbnRhaW4gZWRnZSBpZCdzIG9mIG90aGVyIGNsdXN0ZXJzLlxuXG5cbiMjIyBDbHVzdGVyZWQgRWRnZVxuXG5UaGlzIGlzIGFueSBlZGdlIGNvbnRhaW5lZCBieSBhIGNsdXN0ZXIgZWRnZS4gSXQgZ2V0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWxcbm1lbWJlcjpcblxuLSBgZWRnZVJlcGxhY2VkQnlJZGAgLSBpZCBvZiB0aGUgY2x1c3RlciBlZGdlIGluIHdoaWNoIGN1cnJlbnQgZWRnZSBpcyBjbHVzdGVyZWRcblxuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbmltcG9ydCB7IGRlZXBFeHRlbmQsIGZvckVhY2ggfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyB2NCBhcyByYW5kb21VVUlEIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCBOZXR3b3JrVXRpbCBmcm9tIFwiLi4vTmV0d29ya1V0aWxcIjtcbmltcG9ydCBDbHVzdGVyIGZyb20gXCIuL2NvbXBvbmVudHMvbm9kZXMvQ2x1c3RlclwiO1xuaW1wb3J0IEVkZ2UgZnJvbSBcIi4vY29tcG9uZW50cy9FZGdlXCI7IC8vIE9ubHkgbmVlZGVkIGZvciBjaGVjayBvbiB0eXBlIVxuaW1wb3J0IE5vZGUgZnJvbSBcIi4vY29tcG9uZW50cy9Ob2RlXCI7IC8vIE9ubHkgbmVlZGVkIGZvciBjaGVjayBvbiB0eXBlIVxuXG4vKipcbiAqIFRoZSBjbHVzdGVyaW5nIGVuZ2luZVxuICovXG5jbGFzcyBDbHVzdGVyRW5naW5lIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5KSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNsdXN0ZXJlZE5vZGVzID0ge307IC8vIGtleTogbm9kZSBpZCwgdmFsdWU6IHsgY2x1c3RlcklkOiA8aWQgb2YgY2x1c3Rlcj4sIG5vZGU6IDxub2RlIGluc3RhbmNlPn1cbiAgICB0aGlzLmNsdXN0ZXJlZEVkZ2VzID0ge307IC8vIGtleTogZWRnZSBpZCwgdmFsdWU6IHJlc3RvcmUgaW5mb3JtYXRpb24gZm9yIGdpdmVuIGVkZ2VcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7fTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9yZXNldERhdGFcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5jbHVzdGVyZWROb2RlcyA9IHt9O1xuICAgICAgdGhpcy5jbHVzdGVyZWRFZGdlcyA9IHt9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBodWJzaXplXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjbHVzdGVyQnlIdWJzaXplKGh1YnNpemUsIG9wdGlvbnMpIHtcbiAgICBpZiAoaHVic2l6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBodWJzaXplID0gdGhpcy5fZ2V0SHViU2l6ZSgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGh1YnNpemUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIG9wdGlvbnMgPSB0aGlzLl9jaGVja09wdGlvbnMoaHVic2l6ZSk7XG4gICAgICBodWJzaXplID0gdGhpcy5fZ2V0SHViU2l6ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVzVG9DbHVzdGVyID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldXTtcbiAgICAgIGlmIChub2RlLmVkZ2VzLmxlbmd0aCA+PSBodWJzaXplKSB7XG4gICAgICAgIG5vZGVzVG9DbHVzdGVyLnB1c2gobm9kZS5pZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlc1RvQ2x1c3Rlci5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jbHVzdGVyQnlDb25uZWN0aW9uKG5vZGVzVG9DbHVzdGVyW2ldLCBvcHRpb25zLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGxvb3Agb3ZlciBhbGwgbm9kZXMsIGNoZWNrIGlmIHRoZXkgYWRoZXJlIHRvIHRoZSBjb25kaXRpb24gYW5kIGNsdXN0ZXIgaWYgbmVlZGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWZyZXNoRGF0YT10cnVlXVxuICAgKi9cbiAgY2x1c3RlcihvcHRpb25zID0ge30sIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIGlmIChvcHRpb25zLmpvaW5Db25kaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBjYWxsIGNsdXN0ZXJCeU5vZGVEYXRhIHdpdGhvdXQgYSBqb2luQ29uZGl0aW9uIGZ1bmN0aW9uIGluIHRoZSBvcHRpb25zLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHRoZSBvcHRpb25zIG9iamVjdCBpcyBmaW5lLCBhcHBlbmQgaWYgbmVlZGVkXG4gICAgb3B0aW9ucyA9IHRoaXMuX2NoZWNrT3B0aW9ucyhvcHRpb25zKTtcblxuICAgIGNvbnN0IGNoaWxkTm9kZXNPYmogPSB7fTtcbiAgICBjb25zdCBjaGlsZEVkZ2VzT2JqID0ge307XG5cbiAgICAvLyBjb2xsZWN0IHRoZSBub2RlcyB0aGF0IHdpbGwgYmUgaW4gdGhlIGNsdXN0ZXJcbiAgICBmb3JFYWNoKHRoaXMuYm9keS5ub2RlcywgKG5vZGUsIG5vZGVJZCkgPT4ge1xuICAgICAgaWYgKG5vZGUub3B0aW9ucyAmJiBvcHRpb25zLmpvaW5Db25kaXRpb24obm9kZS5vcHRpb25zKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjaGlsZE5vZGVzT2JqW25vZGVJZF0gPSBub2RlO1xuXG4gICAgICAgIC8vIGNvbGxlY3QgdGhlIGVkZ2VzIHRoYXQgd2lsbCBiZSBpbiB0aGUgY2x1c3RlclxuICAgICAgICBmb3JFYWNoKG5vZGUuZWRnZXMsIChlZGdlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2hpbGRFZGdlc09ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2NsdXN0ZXIoY2hpbGROb2Rlc09iaiwgY2hpbGRFZGdlc09iaiwgb3B0aW9ucywgcmVmcmVzaERhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsdXN0ZXIgYWxsIG5vZGVzIGluIHRoZSBuZXR3b3JrIHRoYXQgaGF2ZSBvbmx5IFggZWRnZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VDb3VudFxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWZyZXNoRGF0YT10cnVlXVxuICAgKi9cbiAgY2x1c3RlckJ5RWRnZUNvdW50KGVkZ2VDb3VudCwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgb3B0aW9ucyA9IHRoaXMuX2NoZWNrT3B0aW9ucyhvcHRpb25zKTtcbiAgICBjb25zdCBjbHVzdGVycyA9IFtdO1xuICAgIGNvbnN0IHVzZWROb2RlcyA9IHt9O1xuICAgIGxldCBlZGdlLCBlZGdlcywgcmVsZXZhbnRFZGdlQ291bnQ7XG4gICAgLy8gY29sbGVjdCB0aGUgbm9kZXMgdGhhdCB3aWxsIGJlIGluIHRoZSBjbHVzdGVyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkTm9kZXNPYmogPSB7fTtcbiAgICAgIGNvbnN0IGNoaWxkRWRnZXNPYmogPSB7fTtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IHRoaXMuYm9keS5ub2RlSW5kaWNlc1tpXTtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcblxuICAgICAgLy8gaWYgdGhpcyBub2RlIGlzIGFscmVhZHkgdXNlZCBpbiBhbm90aGVyIGNsdXN0ZXIgdGhpcyBzZXNzaW9uLCB3ZSBkbyBub3QgaGF2ZSB0byByZS1ldmFsdWF0ZSBpdC5cbiAgICAgIGlmICh1c2VkTm9kZXNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlbGV2YW50RWRnZUNvdW50ID0gMDtcbiAgICAgICAgZWRnZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBub2RlLmVkZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgZWRnZSA9IG5vZGUuZWRnZXNbal07XG4gICAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGVkZ2UudG9JZCAhPT0gZWRnZS5mcm9tSWQpIHtcbiAgICAgICAgICAgICAgcmVsZXZhbnRFZGdlQ291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkZ2VzLnB1c2goZWRnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcyBub2RlIHF1YWxpZmllcywgd2UgY29sbGVjdCBpdHMgbmVpZ2hib3VycyB0byBzdGFydCB0aGUgY2x1c3RlcmluZyBwcm9jZXNzLlxuICAgICAgICBpZiAocmVsZXZhbnRFZGdlQ291bnQgPT09IGVkZ2VDb3VudCkge1xuICAgICAgICAgIGNvbnN0IGNoZWNrSm9pbkNvbmRpdGlvbiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9wdGlvbnMuam9pbkNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgIG9wdGlvbnMuam9pbkNvbmRpdGlvbiA9PT0gbnVsbFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKG5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuam9pbkNvbmRpdGlvbihjbG9uZWRPcHRpb25zKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgbGV0IGdhdGhlcmluZ1N1Y2Nlc3NmdWwgPSB0cnVlO1xuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGVkZ2UgPSBlZGdlc1tqXTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZUlkID0gdGhpcy5fZ2V0Q29ubmVjdGVkSWQoZWRnZSwgbm9kZUlkKTtcbiAgICAgICAgICAgIC8vIGFkZCB0aGUgbm9kZXMgdG8gdGhlIGxpc3QgYnkgdGhlIGpvaW4gY29uZGl0aW9uLlxuICAgICAgICAgICAgaWYgKGNoZWNrSm9pbkNvbmRpdGlvbihub2RlKSkge1xuICAgICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2UuaWRdID0gZWRnZTtcbiAgICAgICAgICAgICAgY2hpbGROb2Rlc09ialtub2RlSWRdID0gbm9kZTtcbiAgICAgICAgICAgICAgY2hpbGROb2Rlc09ialtjaGlsZE5vZGVJZF0gPSB0aGlzLmJvZHkubm9kZXNbY2hpbGROb2RlSWRdO1xuICAgICAgICAgICAgICB1c2VkTm9kZXNbbm9kZUlkXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyB0aGlzIG5vZGUgZG9lcyBub3QgcXVhbGlmeSBhZnRlciBhbGwuXG4gICAgICAgICAgICAgIGdhdGhlcmluZ1N1Y2Nlc3NmdWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gYWRkIHRvIHRoZSBjbHVzdGVyIHF1ZXVlXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaikubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY2hpbGRFZGdlc09iaikubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgZ2F0aGVyaW5nU3VjY2Vzc2Z1bCA9PT0gdHJ1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTZWFyY2ggZm9yIGNsdXN0ZXIgZGF0YSB0aGF0IGNvbnRhaW5zIGFueSBvZiB0aGUgbm9kZSBpZCdzXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgbm8gam9pbkNvbmRpdGlvbiwgb3RoZXJ3aXNlIHJldHVybiB2YWx1ZSBvZiBqb2luQ29uZGl0aW9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IGZpbmRDbHVzdGVyRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBjbHVzdGVycy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgIC8vIFNlYXJjaCBmb3IgYSBjbHVzdGVyIGNvbnRhaW5pbmcgYW55IG9mIHRoZSBub2RlIGlkJ3NcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gaW4gY2hpbGROb2Rlc09iaikge1xuICAgICAgICAgICAgICAgICAgaWYgKGNsdXN0ZXJzW25dLm5vZGVzW21dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsdXN0ZXJzW25dO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBJZiBhbnkgb2YgdGhlIGZvdW5kIG5vZGVzIGlzIHBhcnQgb2YgYSBjbHVzdGVyIGZvdW5kIGluIHRoaXMgbWV0aG9kLFxuICAgICAgICAgICAgLy8gYWRkIHRoZSBjdXJyZW50IHZhbHVlcyB0byB0aGF0IGNsdXN0ZXJcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kQ2x1c3RlciA9IGZpbmRDbHVzdGVyRGF0YSgpO1xuICAgICAgICAgICAgaWYgKGZvdW5kQ2x1c3RlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIC8vIEFkZCBub2RlcyB0byBmb3VuZCBjbHVzdGVyIGlmIG5vdCBwcmVzZW50XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbSBpbiBjaGlsZE5vZGVzT2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kQ2x1c3Rlci5ub2Rlc1ttXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBmb3VuZENsdXN0ZXIubm9kZXNbbV0gPSBjaGlsZE5vZGVzT2JqW21dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIEFkZCBlZGdlcyB0byBmb3VuZCBjbHVzdGVyLCBpZiBub3QgcHJlc2VudFxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gaW4gY2hpbGRFZGdlc09iaikge1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZENsdXN0ZXIuZWRnZXNbbV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgZm91bmRDbHVzdGVyLmVkZ2VzW21dID0gY2hpbGRFZGdlc09ialttXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBjbHVzdGVyIGdyb3VwXG4gICAgICAgICAgICAgIGNsdXN0ZXJzLnB1c2goeyBub2RlczogY2hpbGROb2Rlc09iaiwgZWRnZXM6IGNoaWxkRWRnZXNPYmogfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbHVzdGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5fY2x1c3RlcihjbHVzdGVyc1tpXS5ub2RlcywgY2x1c3RlcnNbaV0uZWRnZXMsIG9wdGlvbnMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocmVmcmVzaERhdGEgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsdXN0ZXIgYWxsIG5vZGVzIGluIHRoZSBuZXR3b3JrIHRoYXQgaGF2ZSBvbmx5IDEgZWRnZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWZyZXNoRGF0YT10cnVlXVxuICAgKi9cbiAgY2x1c3Rlck91dGxpZXJzKG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIHRoaXMuY2x1c3RlckJ5RWRnZUNvdW50KDEsIG9wdGlvbnMsIHJlZnJlc2hEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbHVzdGVyIGFsbCBub2RlcyBpbiB0aGUgbmV0d29yayB0aGF0IGhhdmUgb25seSAyIGVkZ2VcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVmcmVzaERhdGE9dHJ1ZV1cbiAgICovXG4gIGNsdXN0ZXJCcmlkZ2VzKG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIHRoaXMuY2x1c3RlckJ5RWRnZUNvdW50KDIsIG9wdGlvbnMsIHJlZnJlc2hEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzdWNrIGFsbCBjb25uZWN0ZWQgbm9kZXMgb2YgYSBub2RlIGludG8gdGhlIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlZnJlc2hEYXRhPXRydWVdXG4gICAqL1xuICBjbHVzdGVyQnlDb25uZWN0aW9uKG5vZGVJZCwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgLy8ga2lsbCBjb25kaXRpb25zXG4gICAgaWYgKG5vZGVJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlSWQgc3VwcGxpZWQgdG8gY2x1c3RlckJ5Q29ubmVjdGlvbiFcIik7XG4gICAgfVxuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlIG5vZGVJZCBnaXZlbiB0byBjbHVzdGVyQnlDb25uZWN0aW9uIGRvZXMgbm90IGV4aXN0IVwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICBvcHRpb25zID0gdGhpcy5fY2hlY2tPcHRpb25zKG9wdGlvbnMsIG5vZGUpO1xuICAgIGlmIChvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy54ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnggPSBub2RlLng7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy55ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnkgPSBub2RlLnk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy5maXhlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy5maXhlZCA9IHt9O1xuICAgICAgb3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuZml4ZWQueCA9IG5vZGUub3B0aW9ucy5maXhlZC54O1xuICAgICAgb3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuZml4ZWQueSA9IG5vZGUub3B0aW9ucy5maXhlZC55O1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkTm9kZXNPYmogPSB7fTtcbiAgICBjb25zdCBjaGlsZEVkZ2VzT2JqID0ge307XG4gICAgY29uc3QgcGFyZW50Tm9kZUlkID0gbm9kZS5pZDtcbiAgICBjb25zdCBwYXJlbnRDbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKG5vZGUpO1xuICAgIGNoaWxkTm9kZXNPYmpbcGFyZW50Tm9kZUlkXSA9IG5vZGU7XG5cbiAgICAvLyBjb2xsZWN0IHRoZSBub2RlcyB0aGF0IHdpbGwgYmUgaW4gdGhlIGNsdXN0ZXJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBub2RlLmVkZ2VzW2ldO1xuICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVJZCA9IHRoaXMuX2dldENvbm5lY3RlZElkKGVkZ2UsIHBhcmVudE5vZGVJZCk7XG5cbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIG5vZGUgaXMgbm90IGluIGEgY2x1c3RlclxuICAgICAgICBpZiAodGhpcy5jbHVzdGVyZWROb2Rlc1tjaGlsZE5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChjaGlsZE5vZGVJZCAhPT0gcGFyZW50Tm9kZUlkKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5qb2luQ29uZGl0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY2hpbGRFZGdlc09ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZXNPYmpbY2hpbGROb2RlSWRdID0gdGhpcy5ib2R5Lm5vZGVzW2NoaWxkTm9kZUlkXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGNsb25lIHRoZSBvcHRpb25zIGFuZCBpbnNlcnQgc29tZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZy5cbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRDbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKFxuICAgICAgICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tjaGlsZE5vZGVJZF1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuam9pbkNvbmRpdGlvbihcbiAgICAgICAgICAgICAgICAgIHBhcmVudENsb25lZE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICBjaGlsZENsb25lZE9wdGlvbnNcbiAgICAgICAgICAgICAgICApID09PSB0cnVlXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNoaWxkRWRnZXNPYmpbZWRnZS5pZF0gPSBlZGdlO1xuICAgICAgICAgICAgICAgIGNoaWxkTm9kZXNPYmpbY2hpbGROb2RlSWRdID0gdGhpcy5ib2R5Lm5vZGVzW2NoaWxkTm9kZUlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzd2FsbG93IHRoZSBlZGdlIGlmIGl0IGlzIHNlbGYtcmVmZXJlbmNpbmcuXG4gICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2UuaWRdID0gZWRnZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY2hpbGROb2RlSURzID0gT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaikubWFwKGZ1bmN0aW9uIChjaGlsZE5vZGUpIHtcbiAgICAgIHJldHVybiBjaGlsZE5vZGVzT2JqW2NoaWxkTm9kZV0uaWQ7XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkTm9kZUtleSBpbiBjaGlsZE5vZGVzT2JqKSB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZE5vZGVzT2JqLCBjaGlsZE5vZGVLZXkpKVxuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY29uc3QgY2hpbGROb2RlID0gY2hpbGROb2Rlc09ialtjaGlsZE5vZGVLZXldO1xuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBjaGlsZE5vZGUuZWRnZXMubGVuZ3RoOyB5KyspIHtcbiAgICAgICAgY29uc3QgY2hpbGRFZGdlID0gY2hpbGROb2RlLmVkZ2VzW3ldO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGROb2RlSURzLmluZGV4T2YodGhpcy5fZ2V0Q29ubmVjdGVkSWQoY2hpbGRFZGdlLCBjaGlsZE5vZGUuaWQpKSA+XG4gICAgICAgICAgLTFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2hpbGRFZGdlc09ialtjaGlsZEVkZ2UuaWRdID0gY2hpbGRFZGdlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2NsdXN0ZXIoY2hpbGROb2Rlc09iaiwgY2hpbGRFZGdlc09iaiwgb3B0aW9ucywgcmVmcmVzaERhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgZWRnZXMgdGhhdCB3aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBjbHVzdGVyXG4gICAqIEl0IGxvb2tzIGZvciBlZGdlcyB0aGF0IGFyZSBjb25uZWN0ZWQgdG8gdGhlIG5vZGVzIGZyb20gdGhlIFwib3V0c2lkZScgb2YgdGhlIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7e05vZGUuaWQ6IHZpcy5Ob2RlfX0gY2hpbGROb2Rlc09ialxuICAgKiBAcGFyYW0ge3t2aXMuRWRnZS5pZDogdmlzLkVkZ2V9fSBjaGlsZEVkZ2VzT2JqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjbHVzdGVyTm9kZVByb3BlcnRpZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IGNsdXN0ZXJFZGdlUHJvcGVydGllc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUNsdXN0ZXJFZGdlcyhcbiAgICBjaGlsZE5vZGVzT2JqLFxuICAgIGNoaWxkRWRnZXNPYmosXG4gICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLFxuICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllc1xuICApIHtcbiAgICBsZXQgZWRnZSwgY2hpbGROb2RlSWQsIGNoaWxkTm9kZSwgdG9JZCwgZnJvbUlkLCBvdGhlck5vZGVJZDtcblxuICAgIC8vIGxvb3Agb3ZlciBhbGwgY2hpbGQgbm9kZXMgYW5kIHRoZWlyIGVkZ2VzIHRvIGZpbmQgZWRnZXMgZ29pbmcgb3V0IG9mIHRoZSBjbHVzdGVyXG4gICAgLy8gdGhlc2UgZWRnZXMgd2lsbCBiZSByZXBsYWNlZCBieSBjbHVzdGVyRWRnZXMuXG4gICAgY29uc3QgY2hpbGRLZXlzID0gT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaik7XG4gICAgY29uc3QgY3JlYXRlRWRnZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGROb2RlSWQgPSBjaGlsZEtleXNbaV07XG4gICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzT2JqW2NoaWxkTm9kZUlkXTtcblxuICAgICAgLy8gY29uc3RydWN0IG5ldyBlZGdlcyBmcm9tIHRoZSBjbHVzdGVyIHRvIG90aGVyc1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaGlsZE5vZGUuZWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgZWRnZSA9IGNoaWxkTm9kZS5lZGdlc1tqXTtcbiAgICAgICAgLy8gd2Ugb25seSBoYW5kbGUgZWRnZXMgdGhhdCBhcmUgdmlzaWJsZSB0byB0aGUgc3lzdGVtLCBub3QgdGhlIGRpc2FibGVkIG9uZXMgZnJvbSB0aGUgY2x1c3RlcmluZyBwcm9jZXNzLlxuICAgICAgICBpZiAodGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gc2VsZi1yZWZlcmVuY2luZyBlZGdlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBcImhpZGRlblwiIGxpc3RcbiAgICAgICAgICBpZiAoZWRnZS50b0lkID09IGVkZ2UuZnJvbUlkKSB7XG4gICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2UuaWRdID0gZWRnZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2V0IHVwIHRoZSBmcm9tIGFuZCB0by5cbiAgICAgICAgICAgIGlmIChlZGdlLnRvSWQgPT0gY2hpbGROb2RlSWQpIHtcbiAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhIGRvdWJsZSBlcXVhbHMgYmVjYXVzZSBpbnRzIGFuZCBzdHJpbmdzIGNhbiBiZSBpbnRlcmNoYW5nZWQgaGVyZS5cbiAgICAgICAgICAgICAgdG9JZCA9IGNsdXN0ZXJOb2RlUHJvcGVydGllcy5pZDtcbiAgICAgICAgICAgICAgZnJvbUlkID0gZWRnZS5mcm9tSWQ7XG4gICAgICAgICAgICAgIG90aGVyTm9kZUlkID0gZnJvbUlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdG9JZCA9IGVkZ2UudG9JZDtcbiAgICAgICAgICAgICAgZnJvbUlkID0gY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkO1xuICAgICAgICAgICAgICBvdGhlck5vZGVJZCA9IHRvSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gT25seSBlZGdlcyBmcm9tIHRoZSBjbHVzdGVyIG91dHdhcmRzIGFyZSBiZWluZyByZXBsYWNlZC5cbiAgICAgICAgICBpZiAoY2hpbGROb2Rlc09ialtvdGhlck5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY3JlYXRlRWRnZXMucHVzaCh7IGVkZ2U6IGVkZ2UsIGZyb21JZDogZnJvbUlkLCB0b0lkOiB0b0lkIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gSGVyZSB3ZSBhY3R1YWxseSBjcmVhdGUgdGhlIHJlcGxhY2VtZW50IGVkZ2VzLlxuICAgIC8vXG4gICAgLy8gV2UgY291bGQgbm90IGRvIHRoaXMgaW4gdGhlIGxvb3AgYWJvdmUgYXMgdGhlIGNyZWF0aW9uIHByb2Nlc3NcbiAgICAvLyB3b3VsZCBhZGQgYW4gZWRnZSB0byB0aGUgZWRnZXMgYXJyYXkgd2UgYXJlIGl0ZXJhdGluZyBvdmVyLlxuICAgIC8vXG4gICAgLy8gTk9URTogYSBjbHVzdGVyZWQgZWRnZSBjYW4gaGF2ZSBtdWx0aXBsZSBiYXNlIGVkZ2VzIVxuICAgIC8vXG4gICAgY29uc3QgbmV3RWRnZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSBjbHVzdGVyIGVkZ2Ugd2hpY2ggbWF0Y2hlcyB0aGUgZ2l2ZW4gY3JlYXRlZCBlZGdlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHt2aXMuRWRnZX0gY3JlYXRlZEVkZ2VcbiAgICAgKiBAcmV0dXJucyB7dmlzLkVkZ2V9XG4gICAgICovXG4gICAgY29uc3QgZ2V0TmV3RWRnZSA9IGZ1bmN0aW9uIChjcmVhdGVkRWRnZSkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuZXdFZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBuZXdFZGdlID0gbmV3RWRnZXNbal07XG5cbiAgICAgICAgLy8gV2UgcmVwbGFjZSBib3RoIHRvIGFuZCBmcm9tIGVkZ2VzIHdpdGggYSBzaW5nbGUgY2x1c3RlciBlZGdlXG4gICAgICAgIGNvbnN0IG1hdGNoVG9EaXJlY3Rpb24gPVxuICAgICAgICAgIGNyZWF0ZWRFZGdlLmZyb21JZCA9PT0gbmV3RWRnZS5mcm9tSWQgJiZcbiAgICAgICAgICBjcmVhdGVkRWRnZS50b0lkID09PSBuZXdFZGdlLnRvSWQ7XG4gICAgICAgIGNvbnN0IG1hdGNoRnJvbURpcmVjdGlvbiA9XG4gICAgICAgICAgY3JlYXRlZEVkZ2UuZnJvbUlkID09PSBuZXdFZGdlLnRvSWQgJiZcbiAgICAgICAgICBjcmVhdGVkRWRnZS50b0lkID09PSBuZXdFZGdlLmZyb21JZDtcblxuICAgICAgICBpZiAobWF0Y2hUb0RpcmVjdGlvbiB8fCBtYXRjaEZyb21EaXJlY3Rpb24pIHtcbiAgICAgICAgICByZXR1cm4gbmV3RWRnZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjcmVhdGVFZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgY3JlYXRlZEVkZ2UgPSBjcmVhdGVFZGdlc1tqXTtcbiAgICAgIGNvbnN0IGVkZ2UgPSBjcmVhdGVkRWRnZS5lZGdlO1xuICAgICAgbGV0IG5ld0VkZ2UgPSBnZXROZXdFZGdlKGNyZWF0ZWRFZGdlKTtcblxuICAgICAgaWYgKG5ld0VkZ2UgPT09IG51bGwpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgY2x1c3RlcmVkIGVkZ2UgZm9yIHRoaXMgY29ubmVjdGlvblxuICAgICAgICBuZXdFZGdlID0gdGhpcy5fY3JlYXRlQ2x1c3RlcmVkRWRnZShcbiAgICAgICAgICBjcmVhdGVkRWRnZS5mcm9tSWQsXG4gICAgICAgICAgY3JlYXRlZEVkZ2UudG9JZCxcbiAgICAgICAgICBlZGdlLFxuICAgICAgICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllc1xuICAgICAgICApO1xuXG4gICAgICAgIG5ld0VkZ2VzLnB1c2gobmV3RWRnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdFZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzLnB1c2goZWRnZS5pZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFsc28gcmVmZXJlbmNlIHRoZSBuZXcgZWRnZSBpbiB0aGUgb2xkIGVkZ2VcbiAgICAgIHRoaXMuYm9keS5lZGdlc1tlZGdlLmlkXS5lZGdlUmVwbGFjZWRCeUlkID0gbmV3RWRnZS5pZDtcblxuICAgICAgLy8gaGlkZSB0aGUgcmVwbGFjZWQgZWRnZVxuICAgICAgdGhpcy5fYmFja3VwRWRnZU9wdGlvbnMoZWRnZSk7XG4gICAgICBlZGdlLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3VwcGxpZWQgdG8gdGhlIGRpZmZlcmVudCBjbHVzdGVyIGZ1bmN0aW9uc1xuICAgKiBmb3IgY2VydGFpbiBmaWVsZHMgYW5kIGluc2VydHMgZGVmYXVsdHMgaWYgbmVlZGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrT3B0aW9ucyhvcHRpb25zID0ge30pIHtcbiAgICBpZiAob3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXMgPSB7fTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9ICAgIGNoaWxkTm9kZXNPYmogICAgICAgICB8IG9iamVjdCB3aXRoIG5vZGUgb2JqZWN0cywgaWQgYXMga2V5cywgc2FtZSBhcyBjaGlsZE5vZGVzIGV4Y2VwdCBpdCBhbHNvIGNvbnRhaW5zIGEgc291cmNlIG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9ICAgIGNoaWxkRWRnZXNPYmogICAgICAgICB8IG9iamVjdCB3aXRoIGVkZ2Ugb2JqZWN0cywgaWQgYXMga2V5c1xuICAgKiBAcGFyYW0ge0FycmF5fSAgICAgb3B0aW9ucyAgICAgICAgICAgICAgIHwgb2JqZWN0IHdpdGgge2NsdXN0ZXJOb2RlUHJvcGVydGllcywgY2x1c3RlckVkZ2VQcm9wZXJ0aWVzLCBwcm9jZXNzUHJvcGVydGllc31cbiAgICogQHBhcmFtIHtib29sZWFufSAgIHJlZnJlc2hEYXRhIHwgd2hlbiB0cnVlLCBkbyBub3Qgd3JhcCB1cFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NsdXN0ZXIoY2hpbGROb2Rlc09iaiwgY2hpbGRFZGdlc09iaiwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgLy8gUmVtb3ZlIG5vZGVzIHdoaWNoIGFyZSBhbHJlYWR5IGNsdXN0ZXJlZFxuICAgIGNvbnN0IHRtcE5vZGVzVG9SZW1vdmUgPSBbXTtcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBjaGlsZE5vZGVzT2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoaWxkTm9kZXNPYmosIG5vZGVJZCkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkTm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdG1wTm9kZXNUb1JlbW92ZS5wdXNoKG5vZGVJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IHRtcE5vZGVzVG9SZW1vdmUubGVuZ3RoOyArK24pIHtcbiAgICAgIGRlbGV0ZSBjaGlsZE5vZGVzT2JqW3RtcE5vZGVzVG9SZW1vdmVbbl1dO1xuICAgIH1cblxuICAgIC8vIGtpbGwgY29uZGl0aW9uOiBubyBub2RlcyBkb24ndCBib3RoZXJcbiAgICBpZiAoT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaikubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhbGxvdyBjbHVzdGVycyBvZiAxIGlmIG9wdGlvbnMgYWxsb3dcbiAgICBpZiAoXG4gICAgICBPYmplY3Qua2V5cyhjaGlsZE5vZGVzT2JqKS5sZW5ndGggPT0gMSAmJlxuICAgICAgb3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuYWxsb3dTaW5nbGVOb2RlQ2x1c3RlciAhPSB0cnVlXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGNsdXN0ZXJOb2RlUHJvcGVydGllcyA9IGRlZXBFeHRlbmQoe30sIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzKTtcblxuICAgIC8vIGNvbnN0cnVjdCB0aGUgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzXG4gICAgaWYgKG9wdGlvbnMucHJvY2Vzc1Byb3BlcnRpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZ2V0IHRoZSBjaGlsZE5vZGUgb3B0aW9uc1xuICAgICAgY29uc3QgY2hpbGROb2Rlc09wdGlvbnMgPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNoaWxkTm9kZXNPYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZE5vZGVzT2JqLCBub2RlSWQpKSB7XG4gICAgICAgICAgY29uc3QgY2xvbmVkT3B0aW9ucyA9IE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhjaGlsZE5vZGVzT2JqW25vZGVJZF0pO1xuICAgICAgICAgIGNoaWxkTm9kZXNPcHRpb25zLnB1c2goY2xvbmVkT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZ2V0IGNsdXN0ZXIgcHJvcGVydGllcyBiYXNlZCBvbiBjaGlsZE5vZGVzXG4gICAgICBjb25zdCBjaGlsZEVkZ2VzT3B0aW9ucyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBlZGdlSWQgaW4gY2hpbGRFZGdlc09iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoaWxkRWRnZXNPYmosIGVkZ2VJZCkpIHtcbiAgICAgICAgICAvLyB0aGVzZSBjbHVzdGVyIGVkZ2VzIHdpbGwgYmUgcmVtb3ZlZCBvbiBjcmVhdGlvbiBvZiB0aGUgY2x1c3Rlci5cbiAgICAgICAgICBpZiAoZWRnZUlkLnN1YnN0cigwLCAxMikgIT09IFwiY2x1c3RlckVkZ2U6XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lZE9wdGlvbnMgPSBOZXR3b3JrVXRpbC5jbG9uZU9wdGlvbnMoXG4gICAgICAgICAgICAgIGNoaWxkRWRnZXNPYmpbZWRnZUlkXSxcbiAgICAgICAgICAgICAgXCJlZGdlXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjaGlsZEVkZ2VzT3B0aW9ucy5wdXNoKGNsb25lZE9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMgPSBvcHRpb25zLnByb2Nlc3NQcm9wZXJ0aWVzKFxuICAgICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMsXG4gICAgICAgIGNoaWxkTm9kZXNPcHRpb25zLFxuICAgICAgICBjaGlsZEVkZ2VzT3B0aW9uc1xuICAgICAgKTtcbiAgICAgIGlmICghY2x1c3Rlck5vZGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRoZSBwcm9jZXNzUHJvcGVydGllcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gcHJvcGVydGllcyFcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgYW4gdW5pcXVlIGlkO1xuICAgIGlmIChjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkID0gXCJjbHVzdGVyOlwiICsgcmFuZG9tVVVJRCgpO1xuICAgIH1cbiAgICBjb25zdCBjbHVzdGVySWQgPSBjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWQ7XG5cbiAgICBpZiAoY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmxhYmVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcy5sYWJlbCA9IFwiY2x1c3RlclwiO1xuICAgIH1cblxuICAgIC8vIGdpdmUgdGhlIGNsdXN0ZXJOb2RlIGEgcG9zaXRpb24gaWYgaXQgZG9lcyBub3QgaGF2ZSBvbmUuXG4gICAgbGV0IHBvcyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcG9zID0gdGhpcy5fZ2V0Q2x1c3RlclBvc2l0aW9uKGNoaWxkTm9kZXNPYmopO1xuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnggPSBwb3MueDtcbiAgICB9XG4gICAgaWYgKGNsdXN0ZXJOb2RlUHJvcGVydGllcy55ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChwb3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwb3MgPSB0aGlzLl9nZXRDbHVzdGVyUG9zaXRpb24oY2hpbGROb2Rlc09iaik7XG4gICAgICB9XG4gICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMueSA9IHBvcy55O1xuICAgIH1cblxuICAgIC8vIGZvcmNlIHRoZSBJRCB0byByZW1haW4gdGhlIHNhbWVcbiAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWQgPSBjbHVzdGVySWQ7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGNsdXN0ZXIgTm9kZVxuICAgIC8vIE5vdGUgdGhhdCBhbGxvd1NpbmdsZU5vZGVDbHVzdGVyLCBpZiBwcmVzZW50LCBpcyBzdG9yZWQgaW4gdGhlIG9wdGlvbnMgYXMgd2VsbFxuICAgIGNvbnN0IGNsdXN0ZXJOb2RlID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVOb2RlKFxuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLFxuICAgICAgQ2x1c3RlclxuICAgICk7XG4gICAgY2x1c3Rlck5vZGUuY29udGFpbmVkTm9kZXMgPSBjaGlsZE5vZGVzT2JqO1xuICAgIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzID0gY2hpbGRFZGdlc09iajtcbiAgICAvLyBjYWNoZSBhIGNvcHkgZnJvbSB0aGUgY2x1c3RlciBlZGdlIHByb3BlcnRpZXMgaWYgd2UgaGF2ZSB0byByZWNvbm5lY3Qgb3RoZXJzIGxhdGVyIG9uXG4gICAgY2x1c3Rlck5vZGUuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzID0gb3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXM7XG5cbiAgICAvLyBmaW5hbGx5IHB1dCB0aGUgY2x1c3RlciBub2RlIGludG8gZ2xvYmFsXG4gICAgdGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJOb2RlUHJvcGVydGllcy5pZF0gPSBjbHVzdGVyTm9kZTtcblxuICAgIHRoaXMuX2NsdXN0ZXJFZGdlcyhcbiAgICAgIGNoaWxkTm9kZXNPYmosXG4gICAgICBjaGlsZEVkZ2VzT2JqLFxuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLFxuICAgICAgb3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXNcbiAgICApO1xuXG4gICAgLy8gc2V0IElEIHRvIHVuZGVmaW5lZCBzbyBubyBkdXBsaWNhdGVzIGFyaXNlXG4gICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gd3JhcCB1cFxuICAgIGlmIChyZWZyZXNoRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtFZGdlfSBlZGdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYmFja3VwRWRnZU9wdGlvbnMoZWRnZSkge1xuICAgIGlmICh0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPSB7IHBoeXNpY3M6IGVkZ2Uub3B0aW9ucy5waHlzaWNzIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZX0gZWRnZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc3RvcmVFZGdlKGVkZ2UpIHtcbiAgICBjb25zdCBvcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdO1xuICAgIGlmIChvcmlnaW5hbE9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZWRnZS5zZXRPcHRpb25zKHsgcGh5c2ljczogb3JpZ2luYWxPcHRpb25zLnBoeXNpY3MgfSk7XG4gICAgICBkZWxldGUgdGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlLmlkXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBub2RlIGlzIGEgY2x1c3Rlci5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBpc0NsdXN0ZXIobm9kZUlkKSB7XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS5pc0NsdXN0ZXIgPT09IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb2RlIGRvZXMgbm90IGV4aXN0LlwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgY2x1c3RlciBub2RlIGJhc2VkIG9uIHdoYXQncyBpbnNpZGVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNoaWxkTm9kZXNPYmogICAgfCBvYmplY3Qgd2l0aCBub2RlIG9iamVjdHMsIGlkIGFzIGtleXNcbiAgICogQHJldHVybnMge3t4OiBudW1iZXIsIHk6IG51bWJlcn19XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q2x1c3RlclBvc2l0aW9uKGNoaWxkTm9kZXNPYmopIHtcbiAgICBjb25zdCBjaGlsZEtleXMgPSBPYmplY3Qua2V5cyhjaGlsZE5vZGVzT2JqKTtcbiAgICBsZXQgbWluWCA9IGNoaWxkTm9kZXNPYmpbY2hpbGRLZXlzWzBdXS54O1xuICAgIGxldCBtYXhYID0gY2hpbGROb2Rlc09ialtjaGlsZEtleXNbMF1dLng7XG4gICAgbGV0IG1pblkgPSBjaGlsZE5vZGVzT2JqW2NoaWxkS2V5c1swXV0ueTtcbiAgICBsZXQgbWF4WSA9IGNoaWxkTm9kZXNPYmpbY2hpbGRLZXlzWzBdXS55O1xuICAgIGxldCBub2RlO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgY2hpbGRLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gY2hpbGROb2Rlc09ialtjaGlsZEtleXNbaV1dO1xuICAgICAgbWluWCA9IG5vZGUueCA8IG1pblggPyBub2RlLnggOiBtaW5YO1xuICAgICAgbWF4WCA9IG5vZGUueCA+IG1heFggPyBub2RlLnggOiBtYXhYO1xuICAgICAgbWluWSA9IG5vZGUueSA8IG1pblkgPyBub2RlLnkgOiBtaW5ZO1xuICAgICAgbWF4WSA9IG5vZGUueSA+IG1heFkgPyBub2RlLnkgOiBtYXhZO1xuICAgIH1cblxuICAgIHJldHVybiB7IHg6IDAuNSAqIChtaW5YICsgbWF4WCksIHk6IDAuNSAqIChtaW5ZICsgbWF4WSkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIGEgY2x1c3RlciBieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkVkZ2UuaWR9ICBjbHVzdGVyTm9kZUlkIHwgdGhlIElEIG9mIHRoZSBjbHVzdGVyIG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSByZWZyZXNoRGF0YSB8IHdyYXAgdXAgYWZ0ZXJ3YXJkcyBpZiBub3QgdHJ1ZVxuICAgKi9cbiAgb3BlbkNsdXN0ZXIoY2x1c3Rlck5vZGVJZCwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgLy8ga2lsbCBjb25kaXRpb25zXG4gICAgaWYgKGNsdXN0ZXJOb2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY2x1c3Rlck5vZGVJZCBzdXBwbGllZCB0byBvcGVuQ2x1c3Rlci5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgY2x1c3Rlck5vZGUgPSB0aGlzLmJvZHkubm9kZXNbY2x1c3Rlck5vZGVJZF07XG5cbiAgICBpZiAoY2x1c3Rlck5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSBjbHVzdGVyTm9kZUlkIHN1cHBsaWVkIHRvIG9wZW5DbHVzdGVyIGRvZXMgbm90IGV4aXN0LlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjbHVzdGVyTm9kZS5pc0NsdXN0ZXIgIT09IHRydWUgfHxcbiAgICAgIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZE5vZGVzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBub2RlOlwiICsgY2x1c3Rlck5vZGVJZCArIFwiIGlzIG5vdCBhIHZhbGlkIGNsdXN0ZXIuXCIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGN1cnJlbnQgY2x1c3RlciBpcyBjbHVzdGVyZWQgaXRzZWxmXG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLmZpbmROb2RlKGNsdXN0ZXJOb2RlSWQpO1xuICAgIGNvbnN0IHBhcmVudEluZGV4ID0gc3RhY2suaW5kZXhPZihjbHVzdGVyTm9kZUlkKSAtIDE7XG4gICAgaWYgKHBhcmVudEluZGV4ID49IDApIHtcbiAgICAgIC8vIEN1cnJlbnQgY2x1c3RlciBpcyBjbHVzdGVyZWQ7IHRyYW5zZmVyIGNvbnRhaW5lZCBub2RlcyBhbmQgZWRnZXMgdG8gcGFyZW50XG4gICAgICBjb25zdCBwYXJlbnRDbHVzdGVyTm9kZUlkID0gc3RhY2tbcGFyZW50SW5kZXhdO1xuICAgICAgY29uc3QgcGFyZW50Q2x1c3Rlck5vZGUgPSB0aGlzLmJvZHkubm9kZXNbcGFyZW50Q2x1c3Rlck5vZGVJZF07XG5cbiAgICAgIC8vIGNsdXN0ZXJpbmcuY2x1c3RlcmVkTm9kZXMgYW5kIGNsdXN0ZXJpbmcuY2x1c3RlcmVkRWRnZXMgcmVtYWluIHVuY2hhbmdlZFxuICAgICAgcGFyZW50Q2x1c3Rlck5vZGUuX29wZW5DaGlsZENsdXN0ZXIoY2x1c3Rlck5vZGVJZCk7XG5cbiAgICAgIC8vIEFsbCBjb21wb25lbnRzIG9mIGNoaWxkIGNsdXN0ZXIgbm9kZSBoYXZlIGJlZW4gdHJhbnNmZXJyZWQuIEl0IGNhbiBkaWUgbm93LlxuICAgICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1tjbHVzdGVyTm9kZUlkXTtcbiAgICAgIGlmIChyZWZyZXNoRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gbWFpbiBib2R5XG4gICAgY29uc3QgY29udGFpbmVkTm9kZXMgPSBjbHVzdGVyTm9kZS5jb250YWluZWROb2RlcztcbiAgICBjb25zdCBjb250YWluZWRFZGdlcyA9IGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzO1xuXG4gICAgLy8gYWxsb3cgdGhlIHVzZXIgdG8gcG9zaXRpb24gdGhlIG5vZGVzIGFmdGVyIHJlbGVhc2UuXG4gICAgaWYgKFxuICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvcHRpb25zLnJlbGVhc2VGdW5jdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5yZWxlYXNlRnVuY3Rpb24gPT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgY29uc3QgcG9zaXRpb25zID0ge307XG4gICAgICBjb25zdCBjbHVzdGVyUG9zaXRpb24gPSB7IHg6IGNsdXN0ZXJOb2RlLngsIHk6IGNsdXN0ZXJOb2RlLnkgfTtcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNvbnRhaW5lZE5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBjb25zdCBjb250YWluZWROb2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgICAgcG9zaXRpb25zW25vZGVJZF0gPSB7IHg6IGNvbnRhaW5lZE5vZGUueCwgeTogY29udGFpbmVkTm9kZS55IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld1Bvc2l0aW9ucyA9IG9wdGlvbnMucmVsZWFzZUZ1bmN0aW9uKGNsdXN0ZXJQb3NpdGlvbiwgcG9zaXRpb25zKTtcblxuICAgICAgZm9yIChjb25zdCBub2RlSWQgaW4gY29udGFpbmVkTm9kZXMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb250YWluZWROb2Rlcywgbm9kZUlkKSkge1xuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lZE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgICBpZiAobmV3UG9zaXRpb25zW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGFpbmVkTm9kZS54ID1cbiAgICAgICAgICAgICAgbmV3UG9zaXRpb25zW25vZGVJZF0ueCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBjbHVzdGVyTm9kZS54XG4gICAgICAgICAgICAgICAgOiBuZXdQb3NpdGlvbnNbbm9kZUlkXS54O1xuICAgICAgICAgICAgY29udGFpbmVkTm9kZS55ID1cbiAgICAgICAgICAgICAgbmV3UG9zaXRpb25zW25vZGVJZF0ueSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBjbHVzdGVyTm9kZS55XG4gICAgICAgICAgICAgICAgOiBuZXdQb3NpdGlvbnNbbm9kZUlkXS55O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb3B5IHRoZSBwb3NpdGlvbiBmcm9tIHRoZSBjbHVzdGVyXG4gICAgICBmb3JFYWNoKGNvbnRhaW5lZE5vZGVzLCBmdW5jdGlvbiAoY29udGFpbmVkTm9kZSkge1xuICAgICAgICAvLyBpbmhlcml0IHBvc2l0aW9uXG4gICAgICAgIGlmIChjb250YWluZWROb2RlLm9wdGlvbnMuZml4ZWQueCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBjb250YWluZWROb2RlLnggPSBjbHVzdGVyTm9kZS54O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250YWluZWROb2RlLm9wdGlvbnMuZml4ZWQueSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBjb250YWluZWROb2RlLnkgPSBjbHVzdGVyTm9kZS55O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyByZWxlYXNlIG5vZGVzXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gY29udGFpbmVkTm9kZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVkTm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuXG4gICAgICAgIC8vIGluaGVyaXQgc3BlZWRcbiAgICAgICAgY29udGFpbmVkTm9kZS52eCA9IGNsdXN0ZXJOb2RlLnZ4O1xuICAgICAgICBjb250YWluZWROb2RlLnZ5ID0gY2x1c3Rlck5vZGUudnk7XG5cbiAgICAgICAgY29udGFpbmVkTm9kZS5zZXRPcHRpb25zKHsgcGh5c2ljczogdHJ1ZSB9KTtcblxuICAgICAgICBkZWxldGUgdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvcHkgdGhlIGNsdXN0ZXJOb2RlIGVkZ2VzIGJlY2F1c2Ugd2UgY2Fubm90IGl0ZXJhdGUgb3ZlciBhbiBvYmplY3QgdGhhdCB3ZSBhZGQgb3IgcmVtb3ZlIGZyb20uXG4gICAgY29uc3QgZWRnZXNUb0JlRGVsZXRlZCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2x1c3Rlck5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVkZ2VzVG9CZURlbGV0ZWQucHVzaChjbHVzdGVyTm9kZS5lZGdlc1tpXSk7XG4gICAgfVxuXG4gICAgLy8gYWN0dWFsbHkgaGFuZGxpbmcgdGhlIGRlbGV0aW5nLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZXNUb0JlRGVsZXRlZC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzVG9CZURlbGV0ZWRbaV07XG4gICAgICBjb25zdCBvdGhlck5vZGVJZCA9IHRoaXMuX2dldENvbm5lY3RlZElkKGVkZ2UsIGNsdXN0ZXJOb2RlSWQpO1xuICAgICAgY29uc3Qgb3RoZXJOb2RlID0gdGhpcy5jbHVzdGVyZWROb2Rlc1tvdGhlck5vZGVJZF07XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCB0cmFuc2ZlcklkID0gZWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkc1tqXTtcbiAgICAgICAgY29uc3QgdHJhbnNmZXJFZGdlID0gdGhpcy5ib2R5LmVkZ2VzW3RyYW5zZmVySWRdO1xuICAgICAgICBpZiAodHJhbnNmZXJFZGdlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIGlmIHRoZSBvdGhlciBub2RlIGlzIGluIGFub3RoZXIgY2x1c3Rlciwgd2UgdHJhbnNmZXIgb3duZXJzaGlwIG9mIHRoaXMgZWRnZSB0byB0aGUgb3RoZXIgY2x1c3RlclxuICAgICAgICBpZiAob3RoZXJOb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyB0cmFuc2ZlciBvd25lcnNoaXA6XG4gICAgICAgICAgY29uc3Qgb3RoZXJDbHVzdGVyID0gdGhpcy5ib2R5Lm5vZGVzW290aGVyTm9kZS5jbHVzdGVySWRdO1xuICAgICAgICAgIG90aGVyQ2x1c3Rlci5jb250YWluZWRFZGdlc1t0cmFuc2ZlckVkZ2UuaWRdID0gdHJhbnNmZXJFZGdlO1xuXG4gICAgICAgICAgLy8gZGVsZXRlIGxvY2FsIHJlZmVyZW5jZVxuICAgICAgICAgIGRlbGV0ZSBjb250YWluZWRFZGdlc1t0cmFuc2ZlckVkZ2UuaWRdO1xuXG4gICAgICAgICAgLy8gZ2V0IHRvIGFuZCBmcm9tXG4gICAgICAgICAgbGV0IGZyb21JZCA9IHRyYW5zZmVyRWRnZS5mcm9tSWQ7XG4gICAgICAgICAgbGV0IHRvSWQgPSB0cmFuc2ZlckVkZ2UudG9JZDtcbiAgICAgICAgICBpZiAodHJhbnNmZXJFZGdlLnRvSWQgPT0gb3RoZXJOb2RlSWQpIHtcbiAgICAgICAgICAgIHRvSWQgPSBvdGhlck5vZGUuY2x1c3RlcklkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcm9tSWQgPSBvdGhlck5vZGUuY2x1c3RlcklkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgY2x1c3RlciBlZGdlIGZyb20gdGhlIG90aGVyQ2x1c3RlclxuICAgICAgICAgIHRoaXMuX2NyZWF0ZUNsdXN0ZXJlZEVkZ2UoXG4gICAgICAgICAgICBmcm9tSWQsXG4gICAgICAgICAgICB0b0lkLFxuICAgICAgICAgICAgdHJhbnNmZXJFZGdlLFxuICAgICAgICAgICAgb3RoZXJDbHVzdGVyLmNsdXN0ZXJFZGdlUHJvcGVydGllcyxcbiAgICAgICAgICAgIHsgaGlkZGVuOiBmYWxzZSwgcGh5c2ljczogdHJ1ZSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9yZXN0b3JlRWRnZSh0cmFuc2ZlckVkZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVkZ2UucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHRoZSByZWxlYXNpbmcgb2YgdGhlIGVkZ2VzXG4gICAgZm9yIChjb25zdCBlZGdlSWQgaW4gY29udGFpbmVkRWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkRWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgICAgdGhpcy5fcmVzdG9yZUVkZ2UoY29udGFpbmVkRWRnZXNbZWRnZUlkXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGNsdXN0ZXJOb2RlXG4gICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1tjbHVzdGVyTm9kZUlkXTtcblxuICAgIGlmIChyZWZyZXNoRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDbHVzdGVyLmlkfSBjbHVzdGVySWRcbiAgICogQHJldHVybnMge0FycmF5LjxOb2RlLmlkPn1cbiAgICovXG4gIGdldE5vZGVzSW5DbHVzdGVyKGNsdXN0ZXJJZCkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSBbXTtcbiAgICBpZiAodGhpcy5pc0NsdXN0ZXIoY2x1c3RlcklkKSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgY29udGFpbmVkTm9kZXMgPSB0aGlzLmJvZHkubm9kZXNbY2x1c3RlcklkXS5jb250YWluZWROb2RlcztcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNvbnRhaW5lZE5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBub2Rlc0FycmF5LnB1c2godGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0uaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGVzQXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGFjayBjbHVzdGVySWQncyB0aGF0IGEgY2VydGFpbiBub2RlIHJlc2lkZXMgaW4uIGNsdXN0ZXIgQSAtPiBjbHVzdGVyIEIgLT4gY2x1c3RlciBDIC0+IG5vZGVcbiAgICpcbiAgICogSWYgYSBub2RlIGNhbid0IGJlIGZvdW5kIGluIHRoZSBjaGFpbiwgcmV0dXJuIGFuIGVtcHR5IGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5vZGVJZFxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBmaW5kTm9kZShub2RlSWQpIHtcbiAgICBjb25zdCBzdGFjayA9IFtdO1xuICAgIGNvbnN0IG1heCA9IDEwMDtcbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAgbGV0IG5vZGU7XG5cbiAgICB3aGlsZSAodGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQgJiYgY291bnRlciA8IG1heCkge1xuICAgICAgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuICAgICAgc3RhY2sucHVzaChub2RlLmlkKTtcblxuICAgICAgbm9kZUlkID0gdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdLmNsdXN0ZXJJZDtcbiAgICAgIGNvdW50ZXIrKztcbiAgICB9XG5cbiAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuICAgIHN0YWNrLnB1c2gobm9kZS5pZCk7XG5cbiAgICBzdGFjay5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzaW5nIGEgY2x1c3RlcmVkIG5vZGVJZCwgdXBkYXRlIHdpdGggdGhlIG5ldyBvcHRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gY2x1c3RlcmVkTm9kZUlkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdPcHRpb25zXG4gICAqL1xuICB1cGRhdGVDbHVzdGVyZWROb2RlKGNsdXN0ZXJlZE5vZGVJZCwgbmV3T3B0aW9ucykge1xuICAgIGlmIChjbHVzdGVyZWROb2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY2x1c3RlcmVkTm9kZUlkIHN1cHBsaWVkIHRvIHVwZGF0ZUNsdXN0ZXJlZE5vZGUuXCIpO1xuICAgIH1cbiAgICBpZiAobmV3T3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBuZXdPcHRpb25zIHN1cHBsaWVkIHRvIHVwZGF0ZUNsdXN0ZXJlZE5vZGUuXCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJlZE5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSBjbHVzdGVyZWROb2RlSWQgc3VwcGxpZWQgdG8gdXBkYXRlQ2x1c3RlcmVkTm9kZSBkb2VzIG5vdCBleGlzdC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkubm9kZXNbY2x1c3RlcmVkTm9kZUlkXS5zZXRPcHRpb25zKG5ld09wdGlvbnMpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gIH1cblxuICAvKipcbiAgICogVXNpbmcgYSBiYXNlIGVkZ2VJZCwgdXBkYXRlIGFsbCByZWxhdGVkIGNsdXN0ZXJlZCBlZGdlcyB3aXRoIHRoZSBuZXcgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBzdGFydEVkZ2VJZFxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3T3B0aW9uc1xuICAgKi9cbiAgdXBkYXRlRWRnZShzdGFydEVkZ2VJZCwgbmV3T3B0aW9ucykge1xuICAgIGlmIChzdGFydEVkZ2VJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdGFydEVkZ2VJZCBzdXBwbGllZCB0byB1cGRhdGVFZGdlLlwiKTtcbiAgICB9XG4gICAgaWYgKG5ld09wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbmV3T3B0aW9ucyBzdXBwbGllZCB0byB1cGRhdGVFZGdlLlwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYm9keS5lZGdlc1tzdGFydEVkZ2VJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0YXJ0RWRnZUlkIHN1cHBsaWVkIHRvIHVwZGF0ZUVkZ2UgZG9lcyBub3QgZXhpc3QuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbEVkZ2VJZHMgPSB0aGlzLmdldENsdXN0ZXJlZEVkZ2VzKHN0YXJ0RWRnZUlkKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbEVkZ2VJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbYWxsRWRnZUlkc1tpXV07XG4gICAgICBlZGdlLnNldE9wdGlvbnMobmV3T3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3RhY2sgb2YgY2x1c3RlckVkZ2VJZCdzICgrYmFzZSBlZGdlaWQpIHRoYXQgYSBiYXNlIGVkZ2UgaXMgdGhlIHNhbWUgYXMuIGNsdXN0ZXIgZWRnZSBDIC0+IGNsdXN0ZXIgZWRnZSBCIC0+IGNsdXN0ZXIgZWRnZSBBIC0+IGJhc2UgZWRnZShlZGdlSWQpXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkVkZ2UuaWR9IGVkZ2VJZFxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHZpcy5FZGdlLmlkPn1cbiAgICovXG4gIGdldENsdXN0ZXJlZEVkZ2VzKGVkZ2VJZCkge1xuICAgIGNvbnN0IHN0YWNrID0gW107XG4gICAgY29uc3QgbWF4ID0gMTAwO1xuICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgIHdoaWxlIChcbiAgICAgIGVkZ2VJZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBjb3VudGVyIDwgbWF4XG4gICAgKSB7XG4gICAgICBzdGFjay5wdXNoKHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdLmlkKTtcbiAgICAgIGVkZ2VJZCA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdLmVkZ2VSZXBsYWNlZEJ5SWQ7XG4gICAgICBjb3VudGVyKys7XG4gICAgfVxuICAgIHN0YWNrLnJldmVyc2UoKTtcbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBiYXNlIGVkZ2UgaWQgb2YgY2x1c3RlckVkZ2VJZC4gY2x1c3RlciBlZGdlIChjbHVzdGVyZWRFZGdlSWQpIC0+IGNsdXN0ZXIgZWRnZSBCIC0+IGNsdXN0ZXIgZWRnZSBDIC0+IGJhc2UgZWRnZVxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBjbHVzdGVyZWRFZGdlSWRcbiAgICogQHJldHVybnMge3Zpcy5FZGdlLmlkfSBiYXNlRWRnZUlkXG4gICAqXG4gICAqIFRPRE86IGRlcHJlY2F0ZSBpbiA1LjAuMC4gTWV0aG9kIGdldEJhc2VFZGdlcygpIGlzIHRoZSBjb3JyZWN0IG9uZSB0byB1c2UuXG4gICAqL1xuICBnZXRCYXNlRWRnZShjbHVzdGVyZWRFZGdlSWQpIHtcbiAgICAvLyBKdXN0IGtsdWRnZSB0aGlzIGJ5IHJldHVybmluZyB0aGUgZmlyc3QgYmFzZSBlZGdlIGlkIGZvdW5kXG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZUVkZ2VzKGNsdXN0ZXJlZEVkZ2VJZClbMF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCByZWd1bGFyIGVkZ2VzIGZvciB0aGlzIGNsdXN0ZXJlZCBlZGdlIGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBjbHVzdGVyZWRFZGdlSWRcbiAgICogQHJldHVybnMge0FycmF5Ljx2aXMuRWRnZS5pZD59IGFsbCBiYXNlRWRnZUlkJ3MgdW5kZXIgdGhpcyBjbHVzdGVyZWQgZWRnZVxuICAgKi9cbiAgZ2V0QmFzZUVkZ2VzKGNsdXN0ZXJlZEVkZ2VJZCkge1xuICAgIGNvbnN0IElkc1RvSGFuZGxlID0gW2NsdXN0ZXJlZEVkZ2VJZF07XG4gICAgY29uc3QgZG9uZUlkcyA9IFtdO1xuICAgIGNvbnN0IGZvdW5kSWRzID0gW107XG4gICAgY29uc3QgbWF4ID0gMTAwO1xuICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgIHdoaWxlIChJZHNUb0hhbmRsZS5sZW5ndGggPiAwICYmIGNvdW50ZXIgPCBtYXgpIHtcbiAgICAgIGNvbnN0IG5leHRJZCA9IElkc1RvSGFuZGxlLnBvcCgpO1xuICAgICAgaWYgKG5leHRJZCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTsgLy8gUGFyYW5vaWEgaGVyZSBhbmQgb253YXJkc1xuICAgICAgY29uc3QgbmV4dEVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbbmV4dElkXTtcbiAgICAgIGlmIChuZXh0RWRnZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgIGNvdW50ZXIrKztcblxuICAgICAgY29uc3QgcmVwbGFjaW5nSWRzID0gbmV4dEVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHM7XG4gICAgICBpZiAocmVwbGFjaW5nSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gbmV4dElkIGlzIGEgYmFzZSBpZFxuICAgICAgICBmb3VuZElkcy5wdXNoKG5leHRJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbm90aGVyIGNsdXN0ZXIgZWRnZSwgdW5yYXZlbCB0aGlzIG9uZSBhcyB3ZWxsXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVwbGFjaW5nSWRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY29uc3QgcmVwbGFjaW5nSWQgPSByZXBsYWNpbmdJZHNbaV07XG5cbiAgICAgICAgICAvLyBEb24ndCBhZGQgaWYgYWxyZWFkeSBoYW5kbGVkXG4gICAgICAgICAgLy8gVE9ETzogbmV2ZXIgdHJpZ2dlcnM7IGZpbmQgYSB0ZXN0LWNhc2Ugd2hpY2ggZG9lc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIElkc1RvSGFuZGxlLmluZGV4T2YocmVwbGFjaW5nSWRzKSAhPT0gLTEgfHxcbiAgICAgICAgICAgIGRvbmVJZHMuaW5kZXhPZihyZXBsYWNpbmdJZHMpICE9PSAtMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgSWRzVG9IYW5kbGUucHVzaChyZXBsYWNpbmdJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZG9uZUlkcy5wdXNoKG5leHRJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSWQgdGhlIG5vZGUgaXMgY29ubmVjdGVkIHRvXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkVkZ2V9IGVkZ2VcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q29ubmVjdGVkSWQoZWRnZSwgbm9kZUlkKSB7XG4gICAgaWYgKGVkZ2UudG9JZCAhPSBub2RlSWQpIHtcbiAgICAgIHJldHVybiBlZGdlLnRvSWQ7XG4gICAgfSBlbHNlIGlmIChlZGdlLmZyb21JZCAhPSBub2RlSWQpIHtcbiAgICAgIHJldHVybiBlZGdlLmZyb21JZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVkZ2UuZnJvbUlkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXZSBkZXRlcm1pbmUgaG93IG1hbnkgY29ubmVjdGlvbnMgZGVub3RlIGFuIGltcG9ydGFudCBodWIuXG4gICAqIFdlIHRha2UgdGhlIG1lYW4gKyAyKnN0ZCBhcyB0aGUgaW1wb3J0YW50IGh1YiBzaXplLiAoQXNzdW1pbmcgYSBub3JtYWwgZGlzdHJpYnV0aW9uIG9mIGRhdGEsIH4yLjIlKVxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEh1YlNpemUoKSB7XG4gICAgbGV0IGF2ZXJhZ2UgPSAwO1xuICAgIGxldCBhdmVyYWdlU3F1YXJlZCA9IDA7XG4gICAgbGV0IGh1YkNvdW50ZXIgPSAwO1xuICAgIGxldCBsYXJnZXN0SHViID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV07XG4gICAgICBpZiAobm9kZS5lZGdlcy5sZW5ndGggPiBsYXJnZXN0SHViKSB7XG4gICAgICAgIGxhcmdlc3RIdWIgPSBub2RlLmVkZ2VzLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGF2ZXJhZ2UgKz0gbm9kZS5lZGdlcy5sZW5ndGg7XG4gICAgICBhdmVyYWdlU3F1YXJlZCArPSBNYXRoLnBvdyhub2RlLmVkZ2VzLmxlbmd0aCwgMik7XG4gICAgICBodWJDb3VudGVyICs9IDE7XG4gICAgfVxuICAgIGF2ZXJhZ2UgPSBhdmVyYWdlIC8gaHViQ291bnRlcjtcbiAgICBhdmVyYWdlU3F1YXJlZCA9IGF2ZXJhZ2VTcXVhcmVkIC8gaHViQ291bnRlcjtcblxuICAgIGNvbnN0IHZhcmlhbmNlID0gYXZlcmFnZVNxdWFyZWQgLSBNYXRoLnBvdyhhdmVyYWdlLCAyKTtcbiAgICBjb25zdCBzdGFuZGFyZERldmlhdGlvbiA9IE1hdGguc3FydCh2YXJpYW5jZSk7XG5cbiAgICBsZXQgaHViVGhyZXNob2xkID0gTWF0aC5mbG9vcihhdmVyYWdlICsgMiAqIHN0YW5kYXJkRGV2aWF0aW9uKTtcblxuICAgIC8vIGFsd2F5cyBoYXZlIGF0IGxlYXN0IG9uZSB0byBjbHVzdGVyXG4gICAgaWYgKGh1YlRocmVzaG9sZCA+IGxhcmdlc3RIdWIpIHtcbiAgICAgIGh1YlRocmVzaG9sZCA9IGxhcmdlc3RIdWI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh1YlRocmVzaG9sZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZWRnZSBmb3IgdGhlIGNsdXN0ZXIgcmVwcmVzZW50YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gZnJvbUlkXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gdG9JZFxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlfSBiYXNlRWRnZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY2x1c3RlckVkZ2VQcm9wZXJ0aWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBleHRyYU9wdGlvbnNcbiAgICogQHJldHVybnMge0VkZ2V9IG5ld2x5IGNyZWF0ZWQgY2x1c3RlcmVkIGVkZ2VcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVDbHVzdGVyZWRFZGdlKFxuICAgIGZyb21JZCxcbiAgICB0b0lkLFxuICAgIGJhc2VFZGdlLFxuICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllcyxcbiAgICBleHRyYU9wdGlvbnNcbiAgKSB7XG4gICAgLy8gY29weSB0aGUgb3B0aW9ucyBvZiB0aGUgZWRnZSB3ZSB3aWxsIHJlcGxhY2VcbiAgICBjb25zdCBjbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKGJhc2VFZGdlLCBcImVkZ2VcIik7XG4gICAgLy8gbWFrZSBzdXJlIHRoZSBwcm9wZXJ0aWVzIG9mIGNsdXN0ZXJFZGdlcyBhcmUgc3VwZXJpbXBvc2VkIG9uIGl0XG4gICAgZGVlcEV4dGVuZChjbG9uZWRPcHRpb25zLCBjbHVzdGVyRWRnZVByb3BlcnRpZXMpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBlZGdlXG4gICAgY2xvbmVkT3B0aW9ucy5mcm9tID0gZnJvbUlkO1xuICAgIGNsb25lZE9wdGlvbnMudG8gPSB0b0lkO1xuICAgIGNsb25lZE9wdGlvbnMuaWQgPSBcImNsdXN0ZXJFZGdlOlwiICsgcmFuZG9tVVVJRCgpO1xuXG4gICAgLy8gYXBwbHkgdGhlIGVkZ2Ugc3BlY2lmaWMgb3B0aW9ucyB0byBpdCBpZiBzcGVjaWZpZWRcbiAgICBpZiAoZXh0cmFPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlZXBFeHRlbmQoY2xvbmVkT3B0aW9ucywgZXh0cmFPcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdFZGdlID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVFZGdlKGNsb25lZE9wdGlvbnMpO1xuICAgIG5ld0VkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMgPSBbYmFzZUVkZ2UuaWRdO1xuICAgIG5ld0VkZ2UuY29ubmVjdCgpO1xuXG4gICAgLy8gUmVnaXN0ZXIgdGhlIG5ldyBlZGdlXG4gICAgdGhpcy5ib2R5LmVkZ2VzW25ld0VkZ2UuaWRdID0gbmV3RWRnZTtcblxuICAgIHJldHVybiBuZXdFZGdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgcGFzc2VkIGNoaWxkIG5vZGVzIGFuZCBlZGdlcyB0byB0aGUgZ2l2ZW4gY2x1c3RlciBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IE5vZGV9IGNoaWxkTm9kZXMgIGhhc2ggb2Ygbm9kZXMgb3Igc2luZ2xlIG5vZGUgdG8gYWRkIGluIGNsdXN0ZXJcbiAgICogQHBhcmFtIHtvYmplY3QgfCBFZGdlfSBjaGlsZEVkZ2VzICBoYXNoIG9mIGVkZ2VzIG9yIHNpbmdsZSBlZGdlIHRvIHRha2UgaW50byBhY2NvdW50IHdoZW4gY2x1c3RlcmluZ1xuICAgKiBAcGFyYW0ge05vZGV9IGNsdXN0ZXJOb2RlICBjbHVzdGVyIG5vZGUgdG8gYWRkIG5vZGVzIGFuZCBlZGdlcyB0b1xuICAgKiBAcGFyYW0ge29iamVjdH0gW2NsdXN0ZXJFZGdlUHJvcGVydGllc11cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbHVzdGVyRWRnZXMoY2hpbGROb2RlcywgY2hpbGRFZGdlcywgY2x1c3Rlck5vZGUsIGNsdXN0ZXJFZGdlUHJvcGVydGllcykge1xuICAgIGlmIChjaGlsZEVkZ2VzIGluc3RhbmNlb2YgRWRnZSkge1xuICAgICAgY29uc3QgZWRnZSA9IGNoaWxkRWRnZXM7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIG9ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICBjaGlsZEVkZ2VzID0gb2JqO1xuICAgIH1cblxuICAgIGlmIChjaGlsZE5vZGVzIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZXM7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIG9ialtub2RlLmlkXSA9IG5vZGU7XG4gICAgICBjaGlsZE5vZGVzID0gb2JqO1xuICAgIH1cblxuICAgIGlmIChjbHVzdGVyTm9kZSA9PT0gdW5kZWZpbmVkIHx8IGNsdXN0ZXJOb2RlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJfY2x1c3RlckVkZ2VzOiBwYXJhbWV0ZXIgY2x1c3Rlck5vZGUgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGNsdXN0ZXJFZGdlUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUYWtlIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIGZyb20gdGhlIGNsdXN0ZXIgbm9kZVxuICAgICAgY2x1c3RlckVkZ2VQcm9wZXJ0aWVzID0gY2x1c3Rlck5vZGUuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIC8vIGNyZWF0ZSB0aGUgbmV3IGVkZ2VzIHRoYXQgd2lsbCBjb25uZWN0IHRvIHRoZSBjbHVzdGVyLlxuICAgIC8vIEFsbCBzZWxmLXJlZmVyZW5jaW5nIGVkZ2VzIHdpbGwgYmUgYWRkZWQgdG8gY2hpbGRFZGdlcyBoZXJlLlxuICAgIHRoaXMuX2NyZWF0ZUNsdXN0ZXJFZGdlcyhcbiAgICAgIGNoaWxkTm9kZXMsXG4gICAgICBjaGlsZEVkZ2VzLFxuICAgICAgY2x1c3Rlck5vZGUsXG4gICAgICBjbHVzdGVyRWRnZVByb3BlcnRpZXNcbiAgICApO1xuXG4gICAgLy8gZGlzYWJsZSB0aGUgY2hpbGRFZGdlc1xuICAgIGZvciAoY29uc3QgZWRnZUlkIGluIGNoaWxkRWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hpbGRFZGdlcywgZWRnZUlkKSkge1xuICAgICAgICBpZiAodGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgICAgICAgICAvLyBjYWNoZSB0aGUgb3B0aW9ucyBiZWZvcmUgY2hhbmdpbmdcbiAgICAgICAgICB0aGlzLl9iYWNrdXBFZGdlT3B0aW9ucyhlZGdlKTtcbiAgICAgICAgICAvLyBkaXNhYmxlIHBoeXNpY3MgYW5kIGhpZGUgdGhlIGVkZ2VcbiAgICAgICAgICBlZGdlLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRpc2FibGUgdGhlIGNoaWxkTm9kZXNcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBjaGlsZE5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoaWxkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdID0ge1xuICAgICAgICAgIGNsdXN0ZXJJZDogY2x1c3Rlck5vZGUuaWQsXG4gICAgICAgICAgbm9kZTogdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGluIHdoaWNoIGNsdXN0ZXIgZ2l2ZW4gbm9kZUlkIHJlc2lkZXMuXG4gICAqXG4gICAqIElmIG5vdCBpbiBjbHVzdGVyLCByZXR1cm4gdW5kZWZpbmVkLlxuICAgKlxuICAgKiBOT1RFOiBJZiB5b3Uga25vdyBhIGNsZWFuZXIgd2F5IHRvIGRvIHRoaXMsIHBsZWFzZSBlbmxpZ2h0ZW4gbWUgKHdpbXJpam5kZXJzKS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge05vZGV8dW5kZWZpbmVkfSBOb2RlIGluc3RhbmNlIGZvciBjbHVzdGVyLCBpZiBwcmVzZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q2x1c3Rlck5vZGVGb3JOb2RlKG5vZGVJZCkge1xuICAgIGlmIChub2RlSWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBjbHVzdGVyZWROb2RlID0gdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdO1xuXG4gICAgLy8gTk9URTogSWYgbm8gY2x1c3RlciBpbmZvIGZvdW5kLCBpdCBzaG91bGQgYWN0dWFsbHkgYmUgYW4gZXJyb3JcbiAgICBpZiAoY2x1c3RlcmVkTm9kZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNsdXN0ZXJJZCA9IGNsdXN0ZXJlZE5vZGUuY2x1c3RlcklkO1xuICAgIGlmIChjbHVzdGVySWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB0aGlzLmJvZHkubm9kZXNbY2x1c3RlcklkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGNvbmRpdGlvbmFsbHkgcmVtb3ZpbmcgaXRlbXMgaW4gYXJyYXlcbiAgICpcbiAgICogRG9uZSBsaWtlIHRoaXMgYmVjYXVzZSBBcnJheS5maWx0ZXIoKSBpcyBub3QgZnVsbHkgc3VwcG9ydGVkIGJ5IGFsbCBJRSdzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpbHRlcihhcnIsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgcmV0ID0gW107XG5cbiAgICBmb3JFYWNoKGFyciwgKGl0ZW0pID0+IHtcbiAgICAgIGlmIChjYWxsYmFjayhpdGVtKSkge1xuICAgICAgICByZXQucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogU2NhbiBhbGwgZWRnZXMgZm9yIGNoYW5nZXMgaW4gY2x1c3RlcmluZyBhbmQgYWRqdXN0IHRoaXMgaWYgbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBDYWxsIHRoaXMgKGludGVybmFsbHkpIGFmdGVyIHRoZXJlIGhhcyBiZWVuIGEgY2hhbmdlIGluIG5vZGUgb3IgZWRnZSBkYXRhLlxuICAgKlxuICAgKiBQcmU6IFN0YXRlcyBvZiB0aGlzLmJvZHkubm9kZXMgYW5kIHRoaXMuYm9keS5lZGdlcyBjb25zaXN0ZW50XG4gICAqIFByZTogdGhpcy5jbHVzdGVyZWROb2RlcyBhbmQgdGhpcy5jbHVzdGVyZWRFZGdlIGNvbnNpc3RlbnQgd2l0aCBjb250YWluZWROb2RlcyBhbmQgY29udGFpbmVkRWRnZXNcbiAgICogICAgICBvZiBjbHVzdGVyIG5vZGVzLlxuICAgKi9cbiAgX3VwZGF0ZVN0YXRlKCkge1xuICAgIGxldCBub2RlSWQ7XG4gICAgY29uc3QgZGVsZXRlZE5vZGVJZHMgPSBbXTtcbiAgICBjb25zdCBkZWxldGVkRWRnZUlkcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogVXRpbGl0eSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgY2x1c3RlcmluZyBub2RlcyBvbmx5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBjbHVzdGVyIG5vZGVcbiAgICAgKi9cbiAgICBjb25zdCBlYWNoQ2x1c3Rlck5vZGUgPSAoY2FsbGJhY2spID0+IHtcbiAgICAgIGZvckVhY2godGhpcy5ib2R5Lm5vZGVzLCAobm9kZSkgPT4ge1xuICAgICAgICBpZiAobm9kZS5pc0NsdXN0ZXIgPT09IHRydWUpIHtcbiAgICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vXG4gICAgLy8gUmVtb3ZlIGRlbGV0ZWQgcmVndWxhciBub2RlcyBmcm9tIGNsdXN0ZXJpbmdcbiAgICAvL1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBkZWxldGVkIG5vZGVzXG4gICAgZm9yIChub2RlSWQgaW4gdGhpcy5jbHVzdGVyZWROb2Rlcykge1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jbHVzdGVyZWROb2Rlcywgbm9kZUlkKSlcbiAgICAgICAgY29udGludWU7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG5cbiAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlZE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBub2RlcyBmcm9tIGNsdXN0ZXIgbm9kZXNcbiAgICBlYWNoQ2x1c3Rlck5vZGUoZnVuY3Rpb24gKGNsdXN0ZXJOb2RlKSB7XG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGRlbGV0ZWROb2RlSWRzLmxlbmd0aDsgbisrKSB7XG4gICAgICAgIGRlbGV0ZSBjbHVzdGVyTm9kZS5jb250YWluZWROb2Rlc1tkZWxldGVkTm9kZUlkc1tuXV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgbm9kZXMgZnJvbSBjbHVzdGVyIGxpc3RcbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IGRlbGV0ZWROb2RlSWRzLmxlbmd0aDsgbisrKSB7XG4gICAgICBkZWxldGUgdGhpcy5jbHVzdGVyZWROb2Rlc1tkZWxldGVkTm9kZUlkc1tuXV07XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZW1vdmUgZGVsZXRlZCBlZGdlcyBmcm9tIGNsdXN0ZXJpbmdcbiAgICAvL1xuXG4gICAgLy8gQWRkIHRoZSBkZWxldGVkIGNsdXN0ZXJlZCBlZGdlcyB0byB0aGUgbGlzdFxuICAgIGZvckVhY2godGhpcy5jbHVzdGVyZWRFZGdlcywgKGVkZ2VJZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICAgICAgaWYgKGVkZ2UgPT09IHVuZGVmaW5lZCB8fCAhZWRnZS5lbmRQb2ludHNWYWxpZCgpKSB7XG4gICAgICAgIGRlbGV0ZWRFZGdlSWRzW2VkZ2VJZF0gPSBlZGdlSWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDbHVzdGVyIG5vZGVzIGNhbiBhbHNvIGNvbnRhaW4gZWRnZXMgd2hpY2ggYXJlIG5vdCBjbHVzdGVyZWQsXG4gICAgLy8gaS5lLiBub2RlcyAxLTIgd2l0aGluIGNsdXN0ZXIgd2l0aCBhbiBlZGdlIGluIGJldHdlZW4uXG4gICAgLy8gU28gdGhlIGNsdXN0ZXIgbm9kZXMgYWxzbyBuZWVkIHRvIGJlIHNjYW5uZWQgZm9yIGludmFsaWQgZWRnZXNcbiAgICBlYWNoQ2x1c3Rlck5vZGUoZnVuY3Rpb24gKGNsdXN0ZXJOb2RlKSB7XG4gICAgICBmb3JFYWNoKGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzLCAoZWRnZSwgZWRnZUlkKSA9PiB7XG4gICAgICAgIGlmICghZWRnZS5lbmRQb2ludHNWYWxpZCgpICYmICFkZWxldGVkRWRnZUlkc1tlZGdlSWRdKSB7XG4gICAgICAgICAgZGVsZXRlZEVkZ2VJZHNbZWRnZUlkXSA9IGVkZ2VJZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBBbHNvIHNjYW4gZm9yIGNsdXN0ZXIgZWRnZXMgd2hpY2ggbmVlZCB0byBiZSByZW1vdmVkIGluIHRoZSBhY3RpdmUgbGlzdC5cbiAgICAvLyBSZWd1bGFyIGVkZ2VzIGhhdmUgYmVlbiByZW1vdmVkIGJlZm9yZWhhbmQsIHNvIHRoaXMgb25seSBwaWNrcyB1cCB0aGUgY2x1c3RlciBlZGdlcy5cbiAgICBmb3JFYWNoKHRoaXMuYm9keS5lZGdlcywgKGVkZ2UsIGVkZ2VJZCkgPT4ge1xuICAgICAgLy8gRXhwbGljaXRseSBzY2FuIHRoZSBjb250YWluZWQgZWRnZXMgZm9yIHZhbGlkaXR5XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgICBjb25zdCByZXBsYWNlZElkcyA9IGVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHM7XG4gICAgICBpZiAocmVwbGFjZWRJZHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgbnVtVmFsaWQgPSAwO1xuXG4gICAgICAgIGZvckVhY2gocmVwbGFjZWRJZHMsIChjb250YWluZWRFZGdlSWQpID0+IHtcbiAgICAgICAgICBjb25zdCBjb250YWluZWRFZGdlID0gdGhpcy5ib2R5LmVkZ2VzW2NvbnRhaW5lZEVkZ2VJZF07XG5cbiAgICAgICAgICBpZiAoY29udGFpbmVkRWRnZSAhPT0gdW5kZWZpbmVkICYmIGNvbnRhaW5lZEVkZ2UuZW5kUG9pbnRzVmFsaWQoKSkge1xuICAgICAgICAgICAgbnVtVmFsaWQgKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlzVmFsaWQgPSBudW1WYWxpZCA+IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICghZWRnZS5lbmRQb2ludHNWYWxpZCgpIHx8ICFpc1ZhbGlkKSB7XG4gICAgICAgIGRlbGV0ZWRFZGdlSWRzW2VkZ2VJZF0gPSBlZGdlSWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgZWRnZXMgZnJvbSBjbHVzdGVyIG5vZGVzXG4gICAgZWFjaENsdXN0ZXJOb2RlKChjbHVzdGVyTm9kZSkgPT4ge1xuICAgICAgZm9yRWFjaChkZWxldGVkRWRnZUlkcywgKGRlbGV0ZWRFZGdlSWQpID0+IHtcbiAgICAgICAgZGVsZXRlIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzW2RlbGV0ZWRFZGdlSWRdO1xuXG4gICAgICAgIGZvckVhY2goY2x1c3Rlck5vZGUuZWRnZXMsIChlZGdlLCBtKSA9PiB7XG4gICAgICAgICAgaWYgKGVkZ2UuaWQgPT09IGRlbGV0ZWRFZGdlSWQpIHtcbiAgICAgICAgICAgIGNsdXN0ZXJOb2RlLmVkZ2VzW21dID0gbnVsbDsgLy8gRG9uJ3Qgd2FudCB0byBkaXJlY3RseSBkZWxldGUgaGVyZSwgYmVjYXVzZSBpbiB0aGUgbG9vcFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMgPSB0aGlzLl9maWx0ZXIoXG4gICAgICAgICAgICBlZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzLFxuICAgICAgICAgICAgZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgICAgICAgIHJldHVybiAhZGVsZXRlZEVkZ2VJZHNbaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENsZWFuIHVwIHRoZSBudWxsc1xuICAgICAgICBjbHVzdGVyTm9kZS5lZGdlcyA9IHRoaXMuX2ZpbHRlcihjbHVzdGVyTm9kZS5lZGdlcywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gaXRlbSAhPT0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlbW92ZSBmcm9tIGNsdXN0ZXIgbGlzdFxuICAgIGZvckVhY2goZGVsZXRlZEVkZ2VJZHMsIChlZGdlSWQpID0+IHtcbiAgICAgIGRlbGV0ZSB0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2VJZF07XG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgY2x1c3RlciBlZGdlcyBmcm9tIGFjdGl2ZSBsaXN0ICh0aGlzLmJvZHkuZWRnZXMpLlxuICAgIC8vIGRlbGV0ZWRFZGdlSWRzIHN0aWxsIGNvbnRhaW5zIGlkIG9mIHJlZ3VsYXIgZWRnZXMsIGJ1dCB0aGVzZSBzaG91bGQgYWxsXG4gICAgLy8gYmUgZ29uZSB3aGVuIHlvdSByZWFjaCBoZXJlLlxuICAgIGZvckVhY2goZGVsZXRlZEVkZ2VJZHMsIChlZGdlSWQpID0+IHtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgICB9KTtcblxuICAgIC8vXG4gICAgLy8gQ2hlY2sgY2hhbmdlZCBjbHVzdGVyIHN0YXRlIG9mIGVkZ2VzXG4gICAgLy9cblxuICAgIC8vIEl0ZXJhdGluZyBvdmVyIGtleXMgaGVyZSwgYmVjYXVzZSBlZGdlcyBtYXkgYmUgcmVtb3ZlZCBpbiB0aGUgbG9vcFxuICAgIGNvbnN0IGlkcyA9IE9iamVjdC5rZXlzKHRoaXMuYm9keS5lZGdlcyk7XG4gICAgZm9yRWFjaChpZHMsIChlZGdlSWQpID0+IHtcbiAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcblxuICAgICAgY29uc3Qgc2hvdWxkQmVDbHVzdGVyZWQgPVxuICAgICAgICB0aGlzLl9pc0NsdXN0ZXJlZE5vZGUoZWRnZS5mcm9tSWQpIHx8IHRoaXMuX2lzQ2x1c3RlcmVkTm9kZShlZGdlLnRvSWQpO1xuICAgICAgaWYgKHNob3VsZEJlQ2x1c3RlcmVkID09PSB0aGlzLl9pc0NsdXN0ZXJlZEVkZ2UoZWRnZS5pZCkpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBhbGwgaXMgd2VsbFxuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkQmVDbHVzdGVyZWQpIHtcbiAgICAgICAgLy8gYWRkIGVkZ2UgdG8gY2x1c3RlcmluZ1xuICAgICAgICBjb25zdCBjbHVzdGVyRnJvbSA9IHRoaXMuX2dldENsdXN0ZXJOb2RlRm9yTm9kZShlZGdlLmZyb21JZCk7XG4gICAgICAgIGlmIChjbHVzdGVyRnJvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fY2x1c3RlckVkZ2VzKHRoaXMuYm9keS5ub2Rlc1tlZGdlLmZyb21JZF0sIGVkZ2UsIGNsdXN0ZXJGcm9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsdXN0ZXJUbyA9IHRoaXMuX2dldENsdXN0ZXJOb2RlRm9yTm9kZShlZGdlLnRvSWQpO1xuICAgICAgICBpZiAoY2x1c3RlclRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9jbHVzdGVyRWRnZXModGhpcy5ib2R5Lm5vZGVzW2VkZ2UudG9JZF0sIGVkZ2UsIGNsdXN0ZXJUbyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBjaGVjayB0aGF0IGl0IHdvcmtzIGZvciBib3RoIGVkZ2VzIGNsdXN0ZXJlZFxuICAgICAgICAvLyAgICAgICAoVGhpcyBtaWdodCBiZSBwYXJhbm9pYSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jbHVzdGVyRWRnZXNbZWRnZUlkXTtcbiAgICAgICAgdGhpcy5fcmVzdG9yZUVkZ2UoZWRnZSk7XG4gICAgICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBoYXBwZW5pbmcsIHRoZSBzdGF0ZSBzaG91bGRcbiAgICAgICAgLy8gYmUgcHJvcGVybHkgdXBkYXRlZCBhdCB0aGlzIHBvaW50LlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiBpdCAqaXMqIHJlYWNoZWQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24sIHRoZW4gd2UgaGF2ZSB0byBpbXBsZW1lbnRcbiAgICAgICAgLy8gdW5kbyBjbHVzdGVyaW5nIGZvciB0aGlzIGVkZ2UgaGVyZS5cbiAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKCdyZW1vdmUgZWRnZSBmcm9tIGNsdXN0ZXJpbmcgbm90IGltcGxlbWVudGVkIScpXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDbHVzdGVycyBtYXkgYmUgbmVzdGVkIHRvIGFueSBsZXZlbC4gS2VlcCBvbiBvcGVuaW5nIHVudGlsIG5vdGhpbmcgdG8gb3BlblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgbGV0IGNvbnRpbnVlTG9vcCA9IHRydWU7XG4gICAgd2hpbGUgKGNvbnRpbnVlTG9vcCkge1xuICAgICAgY29uc3QgY2x1c3RlcnNUb09wZW4gPSBbXTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBpZCdzIG9mIGNsdXN0ZXJzIHRoYXQgbmVlZCBvcGVuaW5nXG4gICAgICBlYWNoQ2x1c3Rlck5vZGUoZnVuY3Rpb24gKGNsdXN0ZXJOb2RlKSB7XG4gICAgICAgIGNvbnN0IG51bU5vZGVzID0gT2JqZWN0LmtleXMoY2x1c3Rlck5vZGUuY29udGFpbmVkTm9kZXMpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYWxsb3dTaW5nbGUgPSBjbHVzdGVyTm9kZS5vcHRpb25zLmFsbG93U2luZ2xlTm9kZUNsdXN0ZXIgPT09IHRydWU7XG4gICAgICAgIGlmICgoYWxsb3dTaW5nbGUgJiYgbnVtTm9kZXMgPCAxKSB8fCAoIWFsbG93U2luZ2xlICYmIG51bU5vZGVzIDwgMikpIHtcbiAgICAgICAgICBjbHVzdGVyc1RvT3Blbi5wdXNoKGNsdXN0ZXJOb2RlLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIE9wZW4gdGhlbVxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBjbHVzdGVyc1RvT3Blbi5sZW5ndGg7ICsrbikge1xuICAgICAgICB0aGlzLm9wZW5DbHVzdGVyKFxuICAgICAgICAgIGNsdXN0ZXJzVG9PcGVuW25dLFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIGZhbHNlIC8qIERvbid0IHJlZnJlc2gsIHdlJ3JlIGluIGFuIHJlZnJlc2gvdXBkYXRlIGFscmVhZHkgKi9cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29udGludWVMb29wID0gY2x1c3RlcnNUb09wZW4ubGVuZ3RoID4gMDtcbiAgICAgIGNoYW5nZWQgPSBjaGFuZ2VkIHx8IGNvbnRpbnVlTG9vcDtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoKTsgLy8gUmVkbyB0aGlzIG1ldGhvZCAocmVjdXJzaW9uIHBvc3NpYmxlISBzaG91bGQgYmUgc2FmZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIG5vZGUgd2l0aCBnaXZlbiBpZCBpcyBwYXJ0IG9mIGEgY2x1c3Rlci5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgcGFydCBvZiBhIGNsdXN0ZXIuXG4gICAqL1xuICBfaXNDbHVzdGVyZWROb2RlKG5vZGVJZCkge1xuICAgIHJldHVybiB0aGlzLmNsdXN0ZXJlZE5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgZWRnZSB3aXRoIGdpdmVuIGlkIGlzIG5vdCB2aXNpYmxlIGR1ZSB0byBjbHVzdGVyaW5nLlxuICAgKlxuICAgKiBBbiBlZGdlIGlzIGNvbnNpZGVyZWQgY2x1c3RlcmVkIGlmOlxuICAgKiAtIGl0IGlzIGRpcmVjdGx5IHJlcGxhY2VkIGJ5IGEgY2x1c3RlcmluZyBlZGdlXG4gICAqIC0gYW55IG9mIGl0cyBjb25uZWN0aW5nIG5vZGVzIGlzIGluIGEgY2x1c3RlclxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBlZGdlSWRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgcGFydCBvZiBhIGNsdXN0ZXIuXG4gICAqL1xuICBfaXNDbHVzdGVyZWRFZGdlKGVkZ2VJZCkge1xuICAgIHJldHVybiB0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2VJZF0gIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDbHVzdGVyRW5naW5lO1xuIiwgImltcG9ydCB7IHNlbGVjdGl2ZURlZXBFeHRlbmQgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgpIHRvIGEgdXNhYmxlIGZvcm0uXG4gKlxuICogU3BlY2lmaWNhbGx5LCBzZXQgdXAgdGhpcyBtZXRob2QgZm9yIHRoZSBjYXNlIG9mIHJ1bm5pbmcgb24gbm9kZS5qcyB3aXRoIGpzZG9tIGVuYWJsZWQuXG4gKlxuICogTk9URVM6XG4gKlxuICogT24gbm9kZS5qcywgd2hlbiBjYWxsaW5nIHRoaXMgZGlyZWN0bHkgb3V0c2lkZSBvZiB0aGlzIGNsYXNzLCBgd2luZG93YCBpcyBub3QgZGVmaW5lZC5cbiAqICAgVGhpcyBoYXBwZW5zIGV2ZW4gaWYganNkb20gaXMgdXNlZC5cbiAqIEZvciBub2RlLmpzICsganNkb20sIGB3aW5kb3dgIGlzIGF2YWlsYWJsZSBhdCB0aGUgbW9tZW50IHRoZSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQuXG4gKiAgIEZvciB0aGlzIHJlYXNvbiwgdGhlIGNhbGxlZCBpcyBwbGFjZWQgd2l0aGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAqIEV2ZW4gdGhlbiwgYHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKWAgaXMgbm90IGRlZmluZWQsIHNvIGl0IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkLlxuICogRHVyaW5nIHVuaXQgdGVzdGluZywgaXQgaGFwcGVucyB0aGF0IHRoZSB3aW5kb3cgb2JqZWN0IGlzIHJlc2V0IGR1cmluZyBleGVjdXRpb24sIGNhdXNpbmdcbiAqICAgYSBydW50aW1lIGVycm9yIGR1ZSB0byBtaXNzaW5nIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKWAuIFRoaXMgbmVlZHMgdG8gYmUgY29tcGVuc2F0ZWQgZm9yLFxuICogICBzZWUgYF9yZXF1ZXN0TmV4dEZyYW1lKClgLlxuICogU2luY2UgdGhpcyBpcyBhIGdsb2JhbCBvYmplY3QsIGl0IG1heSBhZmZlY3Qgb3RoZXIgbW9kdWxlcyBiZXNpZGVzIGBOZXR3b3JrYC4gV2l0aCBub3JtYWxcbiAqICAgdXNhZ2UsIHRoaXMgZG9lcyBub3QgY2F1c2UgYW55IHByb2JsZW1zLiBEdXJpbmcgdW5pdCB0ZXN0aW5nLCBlcnJvcnMgbWF5IG9jY3VyLiBUaGVzZSBoYXZlXG4gKiAgIGJlZW4gY29tcGVuc2F0ZWQgZm9yLCBzZWUgY29tbWVudCBibG9jayBpbiBfcmVxdWVzdE5leHRGcmFtZSgpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9pbml0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkge1xuICBsZXQgZnVuYztcblxuICBpZiAod2luZG93ICE9PSB1bmRlZmluZWQpIHtcbiAgICBmdW5jID1cbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgfVxuXG4gIGlmIChmdW5jID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyB3aW5kb3cgb3IgbWV0aG9kIG5vdCBwcmVzZW50LCBzZXR0aW5nIG1vY2sgcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgLy9jb25zb2xlLmxvZyhcIkNhbGxlZCBtb2NrIHJlcXVlc3RBbmltYXRpb25GcmFtZVwiKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuYztcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqL1xuY2xhc3MgQ2FudmFzUmVuZGVyZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzKSB7XG4gICAgX2luaXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xuXG4gICAgdGhpcy5yZWRyYXdSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlclRpbWVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVxdWlyZXNUaW1lb3V0ID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyUmVxdWVzdHMgPSAwO1xuICAgIHRoaXMuYWxsb3dSZWRyYXcgPSB0cnVlO1xuXG4gICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuem9vbWluZyA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBoaWRlRWRnZXNPbkRyYWc6IGZhbHNlLFxuICAgICAgaGlkZUVkZ2VzT25ab29tOiBmYWxzZSxcbiAgICAgIGhpZGVOb2Rlc09uRHJhZzogZmFsc2UsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLl9kZXRlcm1pbmVCcm93c2VyTWV0aG9kKCk7XG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRyYWdTdGFydFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRyYWdFbmRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiem9vbVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnpvb21pbmcgPSB0cnVlO1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnpvb21UaW1lb3V0SWQpO1xuICAgICAgdGhpcy56b29tVGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnpvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdFJlZHJhdy5iaW5kKHRoaXMpKCk7XG4gICAgICB9LCAyNTApO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX3Jlc2l6ZU5vZGVzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuX3Jlc2l6ZU5vZGVzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfcmVkcmF3XCIsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fcmVkcmF3KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfYmxvY2tSZWRyYXdcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5hbGxvd1JlZHJhdyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2FsbG93UmVkcmF3XCIsICgpID0+IHtcbiAgICAgIHRoaXMuYWxsb3dSZWRyYXcgPSB0cnVlO1xuICAgICAgdGhpcy5yZWRyYXdSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9yZXF1ZXN0UmVkcmF3XCIsIHRoaXMuX3JlcXVlc3RSZWRyYXcuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfc3RhcnRSZW5kZXJpbmdcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJSZXF1ZXN0cyArPSAxO1xuICAgICAgdGhpcy5yZW5kZXJpbmdBY3RpdmUgPSB0cnVlO1xuICAgICAgdGhpcy5fc3RhcnRSZW5kZXJpbmcoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9zdG9wUmVuZGVyaW5nXCIsICgpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyUmVxdWVzdHMgLT0gMTtcbiAgICAgIHRoaXMucmVuZGVyaW5nQWN0aXZlID0gdGhpcy5yZW5kZXJSZXF1ZXN0cyA+IDA7XG4gICAgICB0aGlzLnJlbmRlclRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlclJlcXVlc3RzID0gMDtcbiAgICAgIHRoaXMuYWxsb3dSZWRyYXcgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVuZGVyaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5yZXF1aXJlc1RpbWVvdXQgPT09IHRydWUpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVuZGVyVGltZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMucmVuZGVyVGltZXIpO1xuICAgICAgfVxuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IFtcImhpZGVFZGdlc09uRHJhZ1wiLCBcImhpZGVFZGdlc09uWm9vbVwiLCBcImhpZGVOb2Rlc09uRHJhZ1wiXTtcbiAgICAgIHNlbGVjdGl2ZURlZXBFeHRlbmQoZmllbGRzLCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIHRoZSBkcmF3aW5nIG9mIHRoZSBuZXh0IGZyYW1lLlxuICAgKlxuICAgKiBDYWxscyB0aGUgY2FsbGJhY2sgd2hlbiB0aGUgbmV4dCBmcmFtZSBjYW4gb3Igd2lsbCBiZSBkcmF3bi5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5IC0gdGltZW91dCBjYXNlIG9ubHksIHdhaXQgdGhpcyBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbiB8IHVuZGVmaW5lZH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXF1ZXN0TmV4dEZyYW1lKGNhbGxiYWNrLCBkZWxheSkge1xuICAgIC8vIER1cmluZyB1bml0IHRlc3RpbmcsIGl0IGhhcHBlbnMgdGhhdCB0aGUgbW9jayB3aW5kb3cgb2JqZWN0IGlzIHJlc2V0IHdoaWxlXG4gICAgLy8gdGhlIG5leHQgZnJhbWUgaXMgc3RpbGwgcGVuZGluZy4gVGhlbiwgZWl0aGVyICd3aW5kb3cnIGlzIG5vdCBwcmVzZW50LCBvclxuICAgIC8vICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKScgaXMgbm90IHByZXNlbnQgYmVjYXVzZSBpdCBpcyBub3QgZGVmaW5lZCBvbiB0aGVcbiAgICAvLyBtb2NrIHdpbmRvdyBvYmplY3QuXG4gICAgLy9cbiAgICAvLyBBcyBhIGNvbnNlcXVlbmNlLCB1bnJlbGF0ZWQgdW5pdCB0ZXN0cyBtYXkgYXBwZWFyIHRvIGZhaWwsIGV2ZW4gaWYgdGhlIHByb2JsZW1cbiAgICAvLyBkZXNjcmliZWQgaGFwcGVucyBpbiB0aGUgY3VycmVudCB1bml0IHRlc3QuXG4gICAgLy9cbiAgICAvLyBUaGlzIGlzIG5vdCBzb21ldGhpbmcgdGhhdCB3aWxsIGhhcHBlbiBpbiBub3JtYWwgb3BlcmF0aW9uLCBidXQgd2Ugc3RpbGwgbmVlZFxuICAgIC8vIHRvIHRha2UgaXQgaW50byBhY2NvdW50LlxuICAgIC8vXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjsgLy8gRG9pbmcgYGlmICh3aW5kb3cgPT09IHVuZGVmaW5lZClgIGRvZXMgbm90IHdvcmsgaGVyZSFcblxuICAgIGxldCB0aW1lcjtcblxuICAgIGNvbnN0IG15V2luZG93ID0gd2luZG93OyAvLyBHcmFiIGEgcmVmZXJlbmNlIHRvIHJlZHVjZSB0aGUgcG9zc2liaWxpdHkgdGhhdCAnd2luZG93JyBpcyByZXNldFxuICAgIC8vIHdoaWxlIHJ1bm5pbmcgdGhpcyBtZXRob2QuXG5cbiAgICBpZiAodGhpcy5yZXF1aXJlc1RpbWVvdXQgPT09IHRydWUpIHtcbiAgICAgIC8vIHdhaXQgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBhbmQgcGVyZm9ybSB0aGUgYW5pbWF0aW9uIHN0ZXAgZnVuY3Rpb25cbiAgICAgIHRpbWVyID0gbXlXaW5kb3cuc2V0VGltZW91dChjYWxsYmFjaywgZGVsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobXlXaW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIHRpbWVyID0gbXlXaW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGltZXI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zdGFydFJlbmRlcmluZygpIHtcbiAgICBpZiAodGhpcy5yZW5kZXJpbmdBY3RpdmUgPT09IHRydWUpIHtcbiAgICAgIGlmICh0aGlzLnJlbmRlclRpbWVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJUaW1lciA9IHRoaXMuX3JlcXVlc3ROZXh0RnJhbWUoXG4gICAgICAgICAgdGhpcy5fcmVuZGVyU3RlcC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHRoaXMuc2ltdWxhdGlvbkludGVydmFsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVuZGVyU3RlcCgpIHtcbiAgICBpZiAodGhpcy5yZW5kZXJpbmdBY3RpdmUgPT09IHRydWUpIHtcbiAgICAgIC8vIHJlc2V0IHRoZSByZW5kZXJUaW1lciBzbyBhIG5ldyBzY2hlZHVsZWQgYW5pbWF0aW9uIHN0ZXAgY2FuIGJlIHNldFxuICAgICAgdGhpcy5yZW5kZXJUaW1lciA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHRoaXMucmVxdWlyZXNUaW1lb3V0ID09PSB0cnVlKSB7XG4gICAgICAgIC8vIHRoaXMgc2NoZWR1bGVzIGEgbmV3IHNpbXVsYXRpb24gc3RlcFxuICAgICAgICB0aGlzLl9zdGFydFJlbmRlcmluZygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZWRyYXcoKTtcblxuICAgICAgaWYgKHRoaXMucmVxdWlyZXNUaW1lb3V0ID09PSBmYWxzZSkge1xuICAgICAgICAvLyB0aGlzIHNjaGVkdWxlcyBhIG5ldyBzaW11bGF0aW9uIHN0ZXBcbiAgICAgICAgdGhpcy5fc3RhcnRSZW5kZXJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IHRoZSBuZXR3b3JrIHdpdGggdGhlIGN1cnJlbnQgZGF0YVxuICAgKiBjaGFydCB3aWxsIGJlIHJlc2l6ZWQgdG9vLlxuICAgKi9cbiAgcmVkcmF3KCkge1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzZXRTaXplXCIpO1xuICAgIHRoaXMuX3JlZHJhdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyB0aGUgbmV0d29yayB3aXRoIHRoZSBjdXJyZW50IGRhdGFcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXF1ZXN0UmVkcmF3KCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVkcmF3UmVxdWVzdGVkICE9PSB0cnVlICYmXG4gICAgICB0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9PT0gZmFsc2UgJiZcbiAgICAgIHRoaXMuYWxsb3dSZWRyYXcgPT09IHRydWVcbiAgICApIHtcbiAgICAgIHRoaXMucmVkcmF3UmVxdWVzdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3JlcXVlc3ROZXh0RnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZWRyYXcoZmFsc2UpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyB0aGUgbmV0d29yayB3aXRoIHRoZSBjdXJyZW50IGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlkZGVuPWZhbHNlXSB8IFVzZWQgdG8gZ2V0IHRoZSBmaXJzdCBlc3RpbWF0ZSBvZiB0aGUgbm9kZSBzaXplcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgdGhlIG5vZGVzIGFyZSBkcmF3biBhZnRlciB3aGljaCB0aGV5IGFyZSBxdWlja2x5IGRyYXduIG92ZXIuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVkcmF3KGhpZGRlbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dSZWRyYXcgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJpbml0UmVkcmF3XCIpO1xuXG4gICAgICB0aGlzLnJlZHJhd1JlcXVlc3RlZCA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBkcmF3TGF0ZXIgPSB7XG4gICAgICAgIGRyYXdFeHRlcm5hbExhYmVsczogbnVsbCxcbiAgICAgIH07XG5cbiAgICAgIC8vIHdoZW4gdGhlIGNvbnRhaW5lciBkaXYgd2FzIGhpZGRlbiwgdGhpcyBmaXhlcyBpdCBiYWNrIHVwIVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMud2lkdGggPT09IDAgfHxcbiAgICAgICAgdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmhlaWdodCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2FudmFzLnNldFNpemUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jYW52YXMuc2V0VHJhbnNmb3JtKCk7XG5cbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoKTtcblxuICAgICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgICAgY29uc3QgdyA9IHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IGggPSB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gaWYgdGhlIGRpdiBpcyBoaWRkZW4sIHdlIHN0b3AgdGhlIHJlZHJhdyBoZXJlIGZvciBwZXJmb3JtYW5jZS5cbiAgICAgIGlmICh0aGlzLmNhbnZhcy5mcmFtZS5jbGllbnRXaWR0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCBzY2FsaW5nIGFuZCB0cmFuc2xhdGlvblxuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGN0eC50cmFuc2xhdGUodGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueCwgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueSk7XG4gICAgICBjdHguc2NhbGUodGhpcy5ib2R5LnZpZXcuc2NhbGUsIHRoaXMuYm9keS52aWV3LnNjYWxlKTtcblxuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImJlZm9yZURyYXdpbmdcIiwgY3R4KTtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcblxuICAgICAgaWYgKGhpZGRlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0aGlzLmRyYWdnaW5nID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgKHRoaXMuZHJhZ2dpbmcgPT09IHRydWUgJiZcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmhpZGVFZGdlc09uRHJhZyA9PT0gZmFsc2UpKSAmJlxuICAgICAgICAgICh0aGlzLnpvb21pbmcgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAodGhpcy56b29taW5nID09PSB0cnVlICYmIHRoaXMub3B0aW9ucy5oaWRlRWRnZXNPblpvb20gPT09IGZhbHNlKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fZHJhd0VkZ2VzKGN0eCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmRyYWdnaW5nID09PSBmYWxzZSB8fFxuICAgICAgICAodGhpcy5kcmFnZ2luZyA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuaGlkZU5vZGVzT25EcmFnID09PSBmYWxzZSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCB7IGRyYXdFeHRlcm5hbExhYmVscyB9ID0gdGhpcy5fZHJhd05vZGVzKGN0eCwgaGlkZGVuKTtcbiAgICAgICAgZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVscyA9IGRyYXdFeHRlcm5hbExhYmVscztcbiAgICAgIH1cblxuICAgICAgLy8gZHJhdyB0aGUgYXJyb3dzIGxhc3Qgc28gdGhleSB3aWxsIGJlIGF0IHRoZSB0b3BcbiAgICAgIGlmIChoaWRkZW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodGhpcy5kcmFnZ2luZyA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgICh0aGlzLmRyYWdnaW5nID09PSB0cnVlICYmXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5oaWRlRWRnZXNPbkRyYWcgPT09IGZhbHNlKSkgJiZcbiAgICAgICAgICAodGhpcy56b29taW5nID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgKHRoaXMuem9vbWluZyA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuaGlkZUVkZ2VzT25ab29tID09PSBmYWxzZSkpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX2RyYXdBcnJvd3MoY3R4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVscyAhPSBudWxsKSB7XG4gICAgICAgIGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbHMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhpZGRlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fZHJhd1NlbGVjdGlvbkJveChjdHgpO1xuICAgICAgfVxuXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYWZ0ZXJEcmF3aW5nXCIsIGN0eCk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG5cbiAgICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgc2NhbGluZyBhbmQgdHJhbnNsYXRpb25cbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICBpZiAoaGlkZGVuID09PSB0cnVlKSB7XG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBhbGwgbm9kZXNcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Fsd2F5c1Nob3ddXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzaXplTm9kZXMoKSB7XG4gICAgdGhpcy5jYW52YXMuc2V0VHJhbnNmb3JtKCk7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgpO1xuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LnRyYW5zbGF0ZSh0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi54LCB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55KTtcbiAgICBjdHguc2NhbGUodGhpcy5ib2R5LnZpZXcuc2NhbGUsIHRoaXMuYm9keS52aWV3LnNjYWxlKTtcblxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGxldCBub2RlO1xuXG4gICAgLy8gcmVzaXplIGFsbCBub2Rlc1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tub2RlSWRdO1xuICAgICAgICBub2RlLnJlc2l6ZShjdHgpO1xuICAgICAgICBub2RlLnVwZGF0ZUJvdW5kaW5nQm94KGN0eCwgbm9kZS5zZWxlY3RlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVzdG9yZSBvcmlnaW5hbCBzY2FsaW5nIGFuZCB0cmFuc2xhdGlvblxuICAgIGN0eC5yZXN0b3JlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IGFsbCBub2Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4ICAyRCBjb250ZXh0IG9mIGEgSFRNTCBjYW52YXNcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWx3YXlzU2hvd11cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIF9kcmF3Tm9kZXMoY3R4LCBhbHdheXNTaG93ID0gZmFsc2UpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcbiAgICBsZXQgbm9kZTtcbiAgICBjb25zdCBzZWxlY3RlZCA9IFtdO1xuICAgIGNvbnN0IGhvdmVyZWQgPSBbXTtcbiAgICBjb25zdCBtYXJnaW4gPSAyMDtcbiAgICBjb25zdCB0b3BMZWZ0ID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoeyB4OiAtbWFyZ2luLCB5OiAtbWFyZ2luIH0pO1xuICAgIGNvbnN0IGJvdHRvbVJpZ2h0ID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoe1xuICAgICAgeDogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoICsgbWFyZ2luLFxuICAgICAgeTogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCArIG1hcmdpbixcbiAgICB9KTtcbiAgICBjb25zdCB2aWV3YWJsZUFyZWEgPSB7XG4gICAgICB0b3A6IHRvcExlZnQueSxcbiAgICAgIGxlZnQ6IHRvcExlZnQueCxcbiAgICAgIGJvdHRvbTogYm90dG9tUmlnaHQueSxcbiAgICAgIHJpZ2h0OiBib3R0b21SaWdodC54LFxuICAgIH07XG5cbiAgICBjb25zdCBkcmF3RXh0ZXJuYWxMYWJlbHMgPSBbXTtcblxuICAgIC8vIGRyYXcgdW5zZWxlY3RlZCBub2RlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgLy8gc2V0IHNlbGVjdGVkIGFuZCBob3ZlcmVkIG5vZGVzIGFzaWRlXG4gICAgICBpZiAobm9kZS5ob3Zlcikge1xuICAgICAgICBob3ZlcmVkLnB1c2gobm9kZUluZGljZXNbaV0pO1xuICAgICAgfSBlbHNlIGlmIChub2RlLmlzU2VsZWN0ZWQoKSkge1xuICAgICAgICBzZWxlY3RlZC5wdXNoKG5vZGVJbmRpY2VzW2ldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhbHdheXNTaG93ID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3QgZHJhd0xhdGVyID0gbm9kZS5kcmF3KGN0eCk7XG4gICAgICAgICAgaWYgKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCAhPSBudWxsKSB7XG4gICAgICAgICAgICBkcmF3RXh0ZXJuYWxMYWJlbHMucHVzaChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmlzQm91bmRpbmdCb3hPdmVybGFwcGluZ1dpdGgodmlld2FibGVBcmVhKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IGRyYXdMYXRlciA9IG5vZGUuZHJhdyhjdHgpO1xuICAgICAgICAgIGlmIChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgZHJhd0V4dGVybmFsTGFiZWxzLnB1c2goZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZS51cGRhdGVCb3VuZGluZ0JveChjdHgsIG5vZGUuc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGk7XG4gICAgY29uc3Qgc2VsZWN0ZWRMZW5ndGggPSBzZWxlY3RlZC5sZW5ndGg7XG4gICAgY29uc3QgaG92ZXJlZExlbmd0aCA9IGhvdmVyZWQubGVuZ3RoO1xuXG4gICAgLy8gZHJhdyB0aGUgc2VsZWN0ZWQgbm9kZXMgb24gdG9wXG4gICAgZm9yIChpID0gMDsgaSA8IHNlbGVjdGVkTGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tzZWxlY3RlZFtpXV07XG4gICAgICBjb25zdCBkcmF3TGF0ZXIgPSBub2RlLmRyYXcoY3R4KTtcbiAgICAgIGlmIChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwgIT0gbnVsbCkge1xuICAgICAgICBkcmF3RXh0ZXJuYWxMYWJlbHMucHVzaChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRyYXcgaG92ZXJlZCBub2RlcyBhYm92ZSBldmVyeXRoaW5nIGVsc2U6IGZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqcy92aXMtbmV0d29yay9pc3N1ZXMvMjI2XG4gICAgZm9yIChpID0gMDsgaSA8IGhvdmVyZWRMZW5ndGg7IGkrKykge1xuICAgICAgbm9kZSA9IG5vZGVzW2hvdmVyZWRbaV1dO1xuICAgICAgY29uc3QgZHJhd0xhdGVyID0gbm9kZS5kcmF3KGN0eCk7XG4gICAgICBpZiAoZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsICE9IG51bGwpIHtcbiAgICAgICAgZHJhd0V4dGVybmFsTGFiZWxzLnB1c2goZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZHJhd0V4dGVybmFsTGFiZWxzOiAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZHJhdyBvZiBkcmF3RXh0ZXJuYWxMYWJlbHMpIHtcbiAgICAgICAgICBkcmF3KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgYWxsIGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHggIDJEIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdFZGdlcyhjdHgpIHtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBlZGdlSW5kaWNlcyA9IHRoaXMuYm9keS5lZGdlSW5kaWNlcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tlZGdlSW5kaWNlc1tpXV07XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgZWRnZS5kcmF3KGN0eCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBhbGwgYXJyb3dzXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHggIDJEIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdBcnJvd3MoY3R4KSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLmJvZHkuZWRnZUluZGljZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUluZGljZXNbaV1dO1xuICAgICAgaWYgKGVkZ2UuY29ubmVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgIGVkZ2UuZHJhd0Fycm93cyhjdHgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgcmVxdWlyZXMgYSBzZXRUaW1lb3V0IG9yIGEgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBUaGlzIHdhcyByZXF1aXJlZCBiZWNhdXNlXG4gICAqIHNvbWUgaW1wbGVtZW50YXRpb25zIChzYWZhcmkgYW5kIElFOSkgZGlkIG5vdCBzdXBwb3J0IHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RldGVybWluZUJyb3dzZXJNZXRob2QoKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IGJyb3dzZXJUeXBlID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgdGhpcy5yZXF1aXJlc1RpbWVvdXQgPSBmYWxzZTtcbiAgICAgIGlmIChicm93c2VyVHlwZS5pbmRleE9mKFwibXNpZSA5LjBcIikgIT0gLTEpIHtcbiAgICAgICAgLy8gSUUgOVxuICAgICAgICB0aGlzLnJlcXVpcmVzVGltZW91dCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGJyb3dzZXJUeXBlLmluZGV4T2YoXCJzYWZhcmlcIikgIT0gLTEpIHtcbiAgICAgICAgLy8gc2FmYXJpXG4gICAgICAgIGlmIChicm93c2VyVHlwZS5pbmRleE9mKFwiY2hyb21lXCIpIDw9IC0xKSB7XG4gICAgICAgICAgdGhpcy5yZXF1aXJlc1RpbWVvdXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVxdWlyZXNUaW1lb3V0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IHNlbGVjdGlvbiBib3hcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAgMkQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd1NlbGVjdGlvbkJveChjdHgpIHtcbiAgICBpZiAodGhpcy5ib2R5LnNlbGVjdGlvbkJveC5zaG93KSB7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjb25zdCB3aWR0aCA9XG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uZW5kLnggLVxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLnN0YXJ0Lng7XG4gICAgICBjb25zdCBoZWlnaHQgPVxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLmVuZC55IC1cbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5zdGFydC55O1xuICAgICAgY3R4LnJlY3QoXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQueCxcbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5zdGFydC55LFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICApO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgxNTEsIDE5NCwgMjUyLCAwLjIpXCI7XG4gICAgICBjdHguZmlsbFJlY3QoXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQueCxcbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5zdGFydC55LFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICApO1xuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCJyZ2JhKDE1MSwgMTk0LCAyNTIsIDEpXCI7XG4gICAgICBjdHguc3Ryb2tlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FudmFzUmVuZGVyZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRJbnRlcnZhbDtcbiIsICIvKipcbiAqIFJlZ2lzdGVyIGEgdG91Y2ggZXZlbnQsIHRha2luZyBwbGFjZSBiZWZvcmUgYSBnZXN0dXJlXG4gKlxuICogQHBhcmFtIHtIYW1tZXJ9IGhhbW1lciAgICAgICBBIGhhbW1lciBpbnN0YW5jZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBDYWxsYmFjaywgY2FsbGVkIGFzIGNhbGxiYWNrKGV2ZW50KVxuICovXG5leHBvcnQgZnVuY3Rpb24gb25Ub3VjaChoYW1tZXIsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrLmlucHV0SGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC5pc0ZpcnN0KSB7XG4gICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGhhbW1lci5vbihcImhhbW1lci5pbnB1dFwiLCBjYWxsYmFjay5pbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgcmVsZWFzZSBldmVudCwgdGFraW5nIHBsYWNlIGFmdGVyIGEgZ2VzdHVyZVxuICpcbiAqIEBwYXJhbSB7SGFtbWVyfSBoYW1tZXIgICAgICAgQSBoYW1tZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgQ2FsbGJhY2ssIGNhbGxlZCBhcyBjYWxsYmFjayhldmVudClcbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gb25SZWxlYXNlKGhhbW1lciwgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2suaW5wdXRIYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmlzRmluYWwpIHtcbiAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGhhbW1lci5vbihcImhhbW1lci5pbnB1dFwiLCBjYWxsYmFjay5pbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIFVucmVnaXN0ZXIgYSB0b3VjaCBldmVudCwgdGFraW5nIHBsYWNlIGJlZm9yZSBhIGdlc3R1cmVcbiAqXG4gKiBAcGFyYW0ge0hhbW1lcn0gaGFtbWVyICAgICAgIEEgaGFtbWVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxiYWNrLCBjYWxsZWQgYXMgY2FsbGJhY2soZXZlbnQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZmZUb3VjaChoYW1tZXIsIGNhbGxiYWNrKSB7XG4gIGhhbW1lci5vZmYoXCJoYW1tZXIuaW5wdXRcIiwgY2FsbGJhY2suaW5wdXRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBVbnJlZ2lzdGVyIGEgcmVsZWFzZSBldmVudCwgdGFraW5nIHBsYWNlIGJlZm9yZSBhIGdlc3R1cmVcbiAqXG4gKiBAcGFyYW0ge0hhbW1lcn0gaGFtbWVyICAgICAgIEEgaGFtbWVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxiYWNrLCBjYWxsZWQgYXMgY2FsbGJhY2soZXZlbnQpXG4gKi9cbmV4cG9ydCBjb25zdCBvZmZSZWxlYXNlID0gb2ZmVG91Y2g7XG5cbi8qKlxuICogSGFjayB0aGUgUGluY2hSZWNvZ25pemVyIHN1Y2ggdGhhdCBpdCBkb2Vzbid0IHByZXZlbnQgZGVmYXVsdCBiZWhhdmlvclxuICogZm9yIHZlcnRpY2FsIHBhbm5pbmcuXG4gKlxuICogWWVhaCAuLi4gdGhpcyBpcyBxdWl0ZSBhIGhhY2sgLi4uIHNlZSBodHRwczovL2dpdGh1Yi5jb20vaGFtbWVyanMvaGFtbWVyLmpzL2lzc3Vlcy85MzJcbiAqXG4gKiBAcGFyYW0ge0hhbW1lci5QaW5jaH0gcGluY2hSZWNvZ25pemVyXG4gKiBAcmV0dXJucyB7SGFtbWVyLlBpbmNofSByZXR1cm5zIHRoZSBwaW5jaFJlY29nbml6ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVQcmV2ZW50RGVmYXVsdFZlcnRpY2FsbHkocGluY2hSZWNvZ25pemVyKSB7XG4gIGNvbnN0IFRPVUNIX0FDVElPTl9QQU5fWSA9IFwicGFuLXlcIjtcblxuICBwaW5jaFJlY29nbml6ZXIuZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gZGVmYXVsdCBtZXRob2QgcmV0dXJucyBbVE9VQ0hfQUNUSU9OX05PTkVdXG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fUEFOX1ldO1xuICB9O1xuXG4gIHJldHVybiBwaW5jaFJlY29nbml6ZXI7XG59XG4iLCAiaW1wb3J0IHsgb25SZWxlYXNlLCBvblRvdWNoIH0gZnJvbSBcIi4uLy4uL2hhbW1lclV0aWxcIjtcblxuaW1wb3J0IHsgSGFtbWVyLCBzZWxlY3RpdmVEZWVwRXh0ZW5kIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgbWFpbiBmcmFtZSBmb3IgdGhlIE5ldHdvcmsuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIG9uY2Ugd2hlbiBhIE5ldHdvcmsgb2JqZWN0IGlzIGNyZWF0ZWQuIFRoZSBmcmFtZVxuICogY29udGFpbnMgYSBjYW52YXMsIGFuZCB0aGlzIGNhbnZhcyBjb250YWlucyBhbGwgb2JqZWN0cyBsaWtlIHRoZSBheGlzIGFuZFxuICogbm9kZXMuXG4gKi9cbmNsYXNzIENhbnZhcyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waXhlbFJhdGlvID0gMTtcbiAgICB0aGlzLmNhbWVyYVN0YXRlID0ge307XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuY2FudmFzVmlld0NlbnRlciA9IHt9O1xuICAgIHRoaXMuX2NsZWFudXBDYWxsYmFja3MgPSBbXTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBhdXRvUmVzaXplOiB0cnVlLFxuICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgLy8gYmluZCB0aGUgZXZlbnRzXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub25jZShcInJlc2l6ZVwiLCAob2JqKSA9PiB7XG4gICAgICBpZiAob2JqLndpZHRoICE9PSAwKSB7XG4gICAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnggPSBvYmoud2lkdGggKiAwLjU7XG4gICAgICB9XG4gICAgICBpZiAob2JqLmhlaWdodCAhPT0gMCkge1xuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55ID0gb2JqLmhlaWdodCAqIDAuNTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInNldFNpemVcIiwgdGhpcy5zZXRTaXplLmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmhhbW1lckZyYW1lLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaGFtbWVyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX2NsZWFuVXAoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmllbGRzID0gW1wid2lkdGhcIiwgXCJoZWlnaHRcIiwgXCJhdXRvUmVzaXplXCJdO1xuICAgICAgc2VsZWN0aXZlRGVlcEV4dGVuZChmaWVsZHMsIHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gQXV0b21hdGljYWxseSBhZGFwdCB0byBjaGFuZ2luZyBzaXplIG9mIHRoZSBjb250YWluZXIgZWxlbWVudC5cbiAgICB0aGlzLl9jbGVhblVwKCk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUmVzaXplID09PSB0cnVlKSB7XG4gICAgICBpZiAod2luZG93LlJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIGRlY2VudCBicm93c2VycywgaW1tZWRpYXRlIHJlYWN0aW9uc1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuc2V0U2l6ZSgpO1xuICAgICAgICAgIGlmIChjaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgeyBmcmFtZSB9ID0gdGhpcztcblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGZyYW1lKTtcbiAgICAgICAgdGhpcy5fY2xlYW51cENhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZnJhbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElFMTEsIGNvbnRpbm91cyBwb2xsaW5nXG4gICAgICAgIGNvbnN0IHJlc2l6ZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLnNldFNpemUoKTtcbiAgICAgICAgICBpZiAoY2hhbmdlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIHRoaXMuX2NsZWFudXBDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChyZXNpemVUaW1lcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBdXRvbWF0aWNhbGx5IGFkYXB0IHRvIGNoYW5naW5nIHNpemUgb2YgdGhlIGJyb3dzZXIuXG4gICAgICBjb25zdCByZXNpemVGdW5jdGlvbiA9IHRoaXMuX29uUmVzaXplLmJpbmQodGhpcyk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemVGdW5jdGlvbik7XG4gICAgICB0aGlzLl9jbGVhbnVwQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemVGdW5jdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhblVwKCkge1xuICAgIHRoaXMuX2NsZWFudXBDYWxsYmFja3NcbiAgICAgIC5zcGxpY2UoMClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25SZXNpemUoKSB7XG4gICAgdGhpcy5zZXRTaXplKCk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuZCBzdG9yZSB0aGUgY2FtZXJhU3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPXRoaXMucGl4ZWxSYXRpb11cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRDYW1lcmFTdGF0ZShwaXhlbFJhdGlvID0gdGhpcy5waXhlbFJhdGlvKSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNXaWR0aCA9IHRoaXMuZnJhbWUuY2FudmFzLndpZHRoIC8gcGl4ZWxSYXRpbztcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNIZWlnaHQgPSB0aGlzLmZyYW1lLmNhbnZhcy5oZWlnaHQgLyBwaXhlbFJhdGlvO1xuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5zY2FsZSA9IHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wb3NpdGlvbiA9IHRoaXMuRE9NdG9DYW52YXMoe1xuICAgICAgICB4OiAoMC41ICogdGhpcy5mcmFtZS5jYW52YXMud2lkdGgpIC8gcGl4ZWxSYXRpbyxcbiAgICAgICAgeTogKDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCkgLyBwaXhlbFJhdGlvLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY2FtZXJhU3RhdGVcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDYW1lcmFTdGF0ZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmNhbWVyYVN0YXRlLnNjYWxlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoICE9PSAwICYmXG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQgIT09IDAgJiZcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyAhPT0gMCAmJlxuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wcmV2aW91c1dpZHRoID4gMCAmJlxuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wcmV2aW91c0hlaWdodCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnN0IHdpZHRoUmF0aW8gPVxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCAvXG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyAvXG4gICAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNXaWR0aDtcbiAgICAgIGNvbnN0IGhlaWdodFJhdGlvID1cbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMuaGVpZ2h0IC9cbiAgICAgICAgdGhpcy5waXhlbFJhdGlvIC9cbiAgICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wcmV2aW91c0hlaWdodDtcbiAgICAgIGxldCBuZXdTY2FsZSA9IHRoaXMuY2FtZXJhU3RhdGUuc2NhbGU7XG5cbiAgICAgIGlmICh3aWR0aFJhdGlvICE9IDEgJiYgaGVpZ2h0UmF0aW8gIT0gMSkge1xuICAgICAgICBuZXdTY2FsZSA9IHRoaXMuY2FtZXJhU3RhdGUuc2NhbGUgKiAwLjUgKiAod2lkdGhSYXRpbyArIGhlaWdodFJhdGlvKTtcbiAgICAgIH0gZWxzZSBpZiAod2lkdGhSYXRpbyAhPSAxKSB7XG4gICAgICAgIG5ld1NjYWxlID0gdGhpcy5jYW1lcmFTdGF0ZS5zY2FsZSAqIHdpZHRoUmF0aW87XG4gICAgICB9IGVsc2UgaWYgKGhlaWdodFJhdGlvICE9IDEpIHtcbiAgICAgICAgbmV3U2NhbGUgPSB0aGlzLmNhbWVyYVN0YXRlLnNjYWxlICogaGVpZ2h0UmF0aW87XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gbmV3U2NhbGU7XG4gICAgICAvLyB0aGlzIGNvbWVzIGZyb20gdGhlIHZpZXcgbW9kdWxlLlxuICAgICAgY29uc3QgY3VycmVudFZpZXdDZW50ZXIgPSB0aGlzLkRPTXRvQ2FudmFzKHtcbiAgICAgICAgeDogMC41ICogdGhpcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGgsXG4gICAgICAgIHk6IDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkaXN0YW5jZUZyb21DZW50ZXIgPSB7XG4gICAgICAgIC8vIG9mZnNldCBmcm9tIHZpZXcsIGRpc3RhbmNlIHZpZXcgaGFzIHRvIGNoYW5nZSBieSB0aGVzZSB4IGFuZCB5IHRvIGNlbnRlciB0aGUgbm9kZVxuICAgICAgICB4OiBjdXJyZW50Vmlld0NlbnRlci54IC0gdGhpcy5jYW1lcmFTdGF0ZS5wb3NpdGlvbi54LFxuICAgICAgICB5OiBjdXJyZW50Vmlld0NlbnRlci55IC0gdGhpcy5jYW1lcmFTdGF0ZS5wb3NpdGlvbi55LFxuICAgICAgfTtcbiAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnggKz1cbiAgICAgICAgZGlzdGFuY2VGcm9tQ2VudGVyLnggKiB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnkgKz1cbiAgICAgICAgZGlzdGFuY2VGcm9tQ2VudGVyLnkgKiB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByZXBhcmVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSArIFwicHhcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKHZhbHVlLmluZGV4T2YoXCIlXCIpICE9PSAtMSB8fCB2YWx1ZS5pbmRleE9mKFwicHhcIikgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZihcIiVcIikgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSArIFwicHhcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJDb3VsZCBub3QgdXNlIHRoZSB2YWx1ZSBzdXBwbGllZCBmb3Igd2lkdGggb3IgaGVpZ2h0OlwiICsgdmFsdWVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgSFRNTFxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICAvLyByZW1vdmUgYWxsIGVsZW1lbnRzIGZyb20gdGhlIGNvbnRhaW5lciBlbGVtZW50LlxuICAgIHdoaWxlICh0aGlzLmJvZHkuY29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgdGhpcy5ib2R5LmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLmJvZHkuY29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtbmV0d29ya1wiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG4gICAgdGhpcy5mcmFtZS50YWJJbmRleCA9IDA7IC8vIHRhYiBpbmRleCBpcyByZXF1aXJlZCBmb3Iga2V5Y2hhcm0gdG8gYmluZCBrZXlzdHJva2VzIHRvIHRoZSBkaXYgaW5zdGVhZCBvZiB0aGUgd2luZG93XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIHRoaXMuZnJhbWUuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICB0aGlzLmZyYW1lLmNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUuY2FudmFzKTtcblxuICAgIGlmICghdGhpcy5mcmFtZS5jYW52YXMuZ2V0Q29udGV4dCkge1xuICAgICAgY29uc3Qgbm9DYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpO1xuICAgICAgbm9DYW52YXMuc3R5bGUuY29sb3IgPSBcInJlZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUucGFkZGluZyA9IFwiMTBweFwiO1xuICAgICAgbm9DYW52YXMuaW5uZXJUZXh0ID0gXCJFcnJvcjogeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgSFRNTCBjYW52YXNcIjtcbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmFwcGVuZENoaWxkKG5vQ2FudmFzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0UGl4ZWxSYXRpbygpO1xuICAgICAgdGhpcy5zZXRUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgdGhlIGZyYW1lIHRvIHRoZSBjb250YWluZXIgZWxlbWVudFxuICAgIHRoaXMuYm9keS5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG5cbiAgICB0aGlzLmJvZHkudmlldy5zY2FsZSA9IDE7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7XG4gICAgICB4OiAwLjUgKiB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCxcbiAgICAgIHk6IDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICB9O1xuXG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gYmluZHMgaGFtbWVyLCBpdCBjYW4gYmUgcmVwZWF0ZWQgb3ZlciBhbmQgb3ZlciBkdWUgdG8gdGhlIHVuaXF1ZW5lc3MgY2hlY2suXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYmluZEhhbW1lcigpIHtcbiAgICBpZiAodGhpcy5oYW1tZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5oYW1tZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLmRyYWcgPSB7fTtcbiAgICB0aGlzLnBpbmNoID0ge307XG5cbiAgICAvLyBpbml0IGhhbW1lclxuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lcih0aGlzLmZyYW1lLmNhbnZhcyk7XG4gICAgdGhpcy5oYW1tZXIuZ2V0KFwicGluY2hcIikuc2V0KHsgZW5hYmxlOiB0cnVlIH0pO1xuICAgIC8vIGVuYWJsZSB0byBnZXQgYmV0dGVyIHJlc3BvbnNlLCB0b2RvOiB0ZXN0IG9uIG1vYmlsZS5cbiAgICB0aGlzLmhhbW1lclxuICAgICAgLmdldChcInBhblwiKVxuICAgICAgLnNldCh7IHRocmVzaG9sZDogNSwgZGlyZWN0aW9uOiBIYW1tZXIuRElSRUNUSU9OX0FMTCB9KTtcblxuICAgIG9uVG91Y2godGhpcy5oYW1tZXIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uVG91Y2goZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwidGFwXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uVGFwKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcImRvdWJsZXRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRvdWJsZVRhcChldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwcmVzc1wiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkhvbGQoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFuc3RhcnRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25EcmFnU3RhcnQoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFubW92ZVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWcoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFuZW5kXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uRHJhZ0VuZChldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwaW5jaFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblBpbmNoKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIC8vIFRPRE86IG5lYXRseSBjbGVhbnVwIHRoZXNlIGhhbmRsZXJzIHdoZW4gcmUtY3JlYXRpbmcgdGhlIENhbnZhcywgSUYgdGhlc2UgYXJlIGRvbmUgd2l0aCBoYW1tZXIsIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiB3aWxsIG5vdCB3b3JrP1xuICAgIHRoaXMuZnJhbWUuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbk1vdXNlV2hlZWwoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mcmFtZS5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbk1vdXNlTW92ZShldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5mcmFtZS5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uQ29udGV4dChldmVudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmhhbW1lckZyYW1lID0gbmV3IEhhbW1lcih0aGlzLmZyYW1lKTtcbiAgICBvblJlbGVhc2UodGhpcy5oYW1tZXJGcmFtZSwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25SZWxlYXNlKGV2ZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBuZXcgc2l6ZSBmb3IgdGhlIG5ldHdvcmtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHdpZHRoICAgV2lkdGggaW4gcGl4ZWxzIG9yIHBlcmNlbnRhZ2UgKGZvciBleGFtcGxlICc4MDBweCdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgb3IgJzUwJScpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoZWlnaHQgIEhlaWdodCBpbiBwaXhlbHMgb3IgcGVyY2VudGFnZSAgKGZvciBleGFtcGxlICc0MDBweCdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgb3IgJzMwJScpXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2V0U2l6ZSh3aWR0aCA9IHRoaXMub3B0aW9ucy53aWR0aCwgaGVpZ2h0ID0gdGhpcy5vcHRpb25zLmhlaWdodCkge1xuICAgIHdpZHRoID0gdGhpcy5fcHJlcGFyZVZhbHVlKHdpZHRoKTtcbiAgICBoZWlnaHQgPSB0aGlzLl9wcmVwYXJlVmFsdWUoaGVpZ2h0KTtcblxuICAgIGxldCBlbWl0RXZlbnQgPSBmYWxzZTtcbiAgICBjb25zdCBvbGRXaWR0aCA9IHRoaXMuZnJhbWUuY2FudmFzLndpZHRoO1xuICAgIGNvbnN0IG9sZEhlaWdodCA9IHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgcGl4ZWwgcmF0aW9cbiAgICAvL1xuICAgIC8vIE5PVEU6IENvbW1lbnQgaW4gZm9sbG93aW5nIGlzIHJhdGhlciBpbmNvbnNpc3RlbnQ7IHRoaXMgaXMgdGhlIE9OTFkgcGxhY2UgaW4gdGhlIGNvZGVcbiAgICAvLyAgICAgICB3aGVyZSBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHBpeGVsIHJhdGlvIGNvdWxkIGNoYW5nZSBhdCBydW50aW1lLlxuICAgIC8vICAgICAgIFRoZSBvbmx5IHdheSBJIGNhbiB0aGluayBvZiB0aGlzIGhhcHBlbmluZyBpcyBhIHJvdGF0aW5nIHNjcmVlbiBvciB0YWJsZXQ7IGJ1dCB0aGVuXG4gICAgLy8gICAgICAgdGhlcmUgc2hvdWxkIGJlIGEgbWVjaGFuaXNtIGZvciByZWxvYWRpbmcgdGhlIGRhdGEgKFRPRE86IGNoZWNrIGlmIHRoaXMgaXMgcHJlc2VudCkuXG4gICAgLy9cbiAgICAvLyAgICAgICBJZiB0aGUgYXNzdW1wdGlvbiBpcyB0cnVlIChpLmUuIHBpeGVsIHJhdGlvIGNhbiBjaGFuZ2UgYXQgcnVudGltZSksIHRoZW4gKmFsbCogdXNhZ2VcbiAgICAvLyAgICAgICBvZiBwaXhlbCByYXRpbyBtdXN0IGJlIG92ZXJoYXVsZWQgZm9yIHRoaXMuXG4gICAgLy9cbiAgICAvLyAgICAgICBGb3IgdGhlIHRpbWUgYmVpbmcsIEkgd2lsbCBodW1vciB0aGUgYXNzdW1wdGlvbiBoZXJlLCBhbmQgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgYXNzdW1lIGl0IGlzXG4gICAgLy8gICAgICAgY29uc3RhbnQuXG4gICAgY29uc3QgcHJldmlvdXNSYXRpbyA9IHRoaXMucGl4ZWxSYXRpbzsgLy8gd2UgY2FjaGUgdGhpcyBiZWNhdXNlIHRoZSBjYW1lcmEgc3RhdGUgc3RvcmFnZSBuZWVkcyB0aGUgb2xkIHZhbHVlXG4gICAgdGhpcy5fc2V0UGl4ZWxSYXRpbygpO1xuXG4gICAgaWYgKFxuICAgICAgd2lkdGggIT0gdGhpcy5vcHRpb25zLndpZHRoIHx8XG4gICAgICBoZWlnaHQgIT0gdGhpcy5vcHRpb25zLmhlaWdodCB8fFxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS53aWR0aCAhPSB3aWR0aCB8fFxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS5oZWlnaHQgIT0gaGVpZ2h0XG4gICAgKSB7XG4gICAgICB0aGlzLl9nZXRDYW1lcmFTdGF0ZShwcmV2aW91c1JhdGlvKTtcblxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS53aWR0aCA9IHdpZHRoO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSBcIjEwMCVcIjtcblxuICAgICAgdGhpcy5mcmFtZS5jYW52YXMud2lkdGggPSBNYXRoLnJvdW5kKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCA9IE1hdGgucm91bmQoXG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcblxuICAgICAgdGhpcy5vcHRpb25zLndpZHRoID0gd2lkdGg7XG4gICAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICB0aGlzLmNhbnZhc1ZpZXdDZW50ZXIgPSB7XG4gICAgICAgIHg6IDAuNSAqIHRoaXMuZnJhbWUuY2xpZW50V2lkdGgsXG4gICAgICAgIHk6IDAuNSAqIHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgZW1pdEV2ZW50ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyB3b3VsZCBhZGFwdCB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB0byB0aGUgd2lkdGggZnJvbSAxMDAlIGlmIGFuZCBvbmx5IGlmXG4gICAgICAvLyB0aGVyZSBpcyBhIGNoYW5nZS5cblxuICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLnJvdW5kKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcbiAgICAgIGNvbnN0IG5ld0hlaWdodCA9IE1hdGgucm91bmQoXG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcblxuICAgICAgLy8gc3RvcmUgdGhlIGNhbWVyYSBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBzaXplLlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCAhPT0gbmV3V2lkdGggfHxcbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMuaGVpZ2h0ICE9PSBuZXdIZWlnaHRcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9nZXRDYW1lcmFTdGF0ZShwcmV2aW91c1JhdGlvKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZnJhbWUuY2FudmFzLndpZHRoICE9PSBuZXdXaWR0aCkge1xuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCA9IG5ld1dpZHRoO1xuICAgICAgICBlbWl0RXZlbnQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCAhPT0gbmV3SGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCA9IG5ld0hlaWdodDtcbiAgICAgICAgZW1pdEV2ZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW1pdEV2ZW50ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVzaXplXCIsIHtcbiAgICAgICAgd2lkdGg6IE1hdGgucm91bmQodGhpcy5mcmFtZS5jYW52YXMud2lkdGggLyB0aGlzLnBpeGVsUmF0aW8pLFxuICAgICAgICBoZWlnaHQ6IE1hdGgucm91bmQodGhpcy5mcmFtZS5jYW52YXMuaGVpZ2h0IC8gdGhpcy5waXhlbFJhdGlvKSxcbiAgICAgICAgb2xkV2lkdGg6IE1hdGgucm91bmQob2xkV2lkdGggLyB0aGlzLnBpeGVsUmF0aW8pLFxuICAgICAgICBvbGRIZWlnaHQ6IE1hdGgucm91bmQob2xkSGVpZ2h0IC8gdGhpcy5waXhlbFJhdGlvKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyByZXN0b3JlIHRoZSBjYW1lcmEgb24gY2hhbmdlLlxuICAgICAgdGhpcy5fc2V0Q2FtZXJhU3RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgaW5pdGlhbGl6ZWQgc28gdGhlIGdldCBhbmQgc2V0IGNhbWVyYSB3aWxsIHdvcmsgZnJvbSBub3cgb24uXG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgcmV0dXJuIGVtaXRFdmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgKi9cbiAgZ2V0Q29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZS5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgcGl4ZWwgcmF0aW8gZm9yIHZhcmlvdXMgYnJvd3NlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lUGl4ZWxSYXRpbygpIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICBpZiAoY3R4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgY2FudmF4IGNvbnRleHRcIik7XG4gICAgfVxuXG4gICAgbGV0IG51bWVyYXRvciA9IDE7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIC8vICh3aW5kb3cgIT09IHVuZGVmaW5lZCkgZG9lc24ndCB3b3JrIGhlcmUhXG4gICAgICAvLyBQcm90ZWN0aW9uIGR1cmluZyB1bml0IHRlc3RzLCB3aGVyZSAnd2luZG93JyBjYW4gYmUgbWlzc2luZ1xuICAgICAgbnVtZXJhdG9yID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgICB9XG5cbiAgICBjb25zdCBkZW5vbWluYXRvciA9XG4gICAgICBjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIDE7XG5cbiAgICByZXR1cm4gbnVtZXJhdG9yIC8gZGVub21pbmF0b3I7XG4gIH1cblxuICAvKipcbiAgICogTGF6eSBkZXRlcm1pbmF0aW9uIG9mIHBpeGVsIHJhdGlvLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFBpeGVsUmF0aW8oKSB7XG4gICAgdGhpcy5waXhlbFJhdGlvID0gdGhpcy5fZGV0ZXJtaW5lUGl4ZWxSYXRpbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNmb3JtIGluIHRoZSBjb250YWluZWQgY29udGV4dCwgYmFzZWQgb24gaXRzIHBpeGVsUmF0aW9cbiAgICovXG4gIHNldFRyYW5zZm9ybSgpIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICBpZiAoY3R4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgY2FudmF4IGNvbnRleHRcIik7XG4gICAgfVxuXG4gICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgWCBjb29yZGluYXRlIGluIERPTS1zcGFjZSAoY29vcmRpbmF0ZSBwb2ludCBpbiBicm93c2VyIHJlbGF0aXZlIHRvIHRoZSBjb250YWluZXIgZGl2KSB0b1xuICAgKiB0aGUgWCBjb29yZGluYXRlIGluIGNhbnZhcy1zcGFjZSAodGhlIHNpbXVsYXRpb24gc2FuZGJveCwgd2hpY2ggdGhlIGNhbWVyYSBsb29rcyB1cG9uKVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX1hjb252ZXJ0RE9NdG9DYW52YXMoeCkge1xuICAgIHJldHVybiAoeCAtIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLngpIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgWCBjb29yZGluYXRlIGluIGNhbnZhcy1zcGFjZSAodGhlIHNpbXVsYXRpb24gc2FuZGJveCwgd2hpY2ggdGhlIGNhbWVyYSBsb29rcyB1cG9uKSB0b1xuICAgKiB0aGUgWCBjb29yZGluYXRlIGluIERPTS1zcGFjZSAoY29vcmRpbmF0ZSBwb2ludCBpbiBicm93c2VyIHJlbGF0aXZlIHRvIHRoZSBjb250YWluZXIgZGl2KVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX1hjb252ZXJ0Q2FudmFzVG9ET00oeCkge1xuICAgIHJldHVybiB4ICogdGhpcy5ib2R5LnZpZXcuc2NhbGUgKyB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi54O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIFkgY29vcmRpbmF0ZSBpbiBET00tc3BhY2UgKGNvb3JkaW5hdGUgcG9pbnQgaW4gYnJvd3NlciByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyIGRpdikgdG9cbiAgICogdGhlIFkgY29vcmRpbmF0ZSBpbiBjYW52YXMtc3BhY2UgKHRoZSBzaW11bGF0aW9uIHNhbmRib3gsIHdoaWNoIHRoZSBjYW1lcmEgbG9va3MgdXBvbilcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ZY29udmVydERPTXRvQ2FudmFzKHkpIHtcbiAgICByZXR1cm4gKHkgLSB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55KSAvIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIFkgY29vcmRpbmF0ZSBpbiBjYW52YXMtc3BhY2UgKHRoZSBzaW11bGF0aW9uIHNhbmRib3gsIHdoaWNoIHRoZSBjYW1lcmEgbG9va3MgdXBvbikgdG9cbiAgICogdGhlIFkgY29vcmRpbmF0ZSBpbiBET00tc3BhY2UgKGNvb3JkaW5hdGUgcG9pbnQgaW4gYnJvd3NlciByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyIGRpdilcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ZY29udmVydENhbnZhc1RvRE9NKHkpIHtcbiAgICByZXR1cm4geSAqIHRoaXMuYm9keS52aWV3LnNjYWxlICsgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb3NcbiAgICogQHJldHVybnMge3BvaW50fVxuICAgKi9cbiAgY2FudmFzVG9ET00ocG9zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRoaXMuX1hjb252ZXJ0Q2FudmFzVG9ET00ocG9zLngpLFxuICAgICAgeTogdGhpcy5fWWNvbnZlcnRDYW52YXNUb0RPTShwb3MueSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb3NcbiAgICogQHJldHVybnMge3BvaW50fVxuICAgKi9cbiAgRE9NdG9DYW52YXMocG9zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRoaXMuX1hjb252ZXJ0RE9NdG9DYW52YXMocG9zLngpLFxuICAgICAgeTogdGhpcy5fWWNvbnZlcnRET010b0NhbnZhcyhwb3MueSksXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW52YXM7XG4iLCAiaW1wb3J0IHsgZWFzaW5nRnVuY3Rpb25zIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG5pbXBvcnQgTmV0d29ya1V0aWwgZnJvbSBcIi4uL05ldHdvcmtVdGlsXCI7XG5pbXBvcnQgeyBub3JtYWxpemVGaXRPcHRpb25zIH0gZnJvbSBcIi4vdmlldy1oYW5kbGVyXCI7XG5cbi8qKlxuICogVGhlIHZpZXdcbiAqL1xuY2xhc3MgVmlldyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBjYW52YXMpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xuXG4gICAgdGhpcy5hbmltYXRpb25TcGVlZCA9IDEgLyB0aGlzLnJlbmRlclJlZnJlc2hSYXRlO1xuICAgIHRoaXMuYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb24gPSBcImVhc2VJbk91dFF1aW50XCI7XG4gICAgdGhpcy5lYXNpbmdUaW1lID0gMDtcbiAgICB0aGlzLnNvdXJjZVNjYWxlID0gMDtcbiAgICB0aGlzLnRhcmdldFNjYWxlID0gMDtcbiAgICB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uID0gMDtcbiAgICB0aGlzLnRhcmdldFRyYW5zbGF0aW9uID0gMDtcbiAgICB0aGlzLmxvY2tlZE9uTm9kZUlkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubG9ja2VkT25Ob2RlT2Zmc2V0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudG91Y2hUaW1lID0gMDtcblxuICAgIHRoaXMudmlld0Z1bmN0aW9uID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJmaXRcIiwgdGhpcy5maXQuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJhbmltYXRpb25GaW5pc2hlZFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0b3BSZW5kZXJpbmdcIik7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJ1bmxvY2tOb2RlXCIsIHRoaXMucmVsZWFzZU5vZGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XVxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gem9vbXMgb3V0IHRvIGZpdCBhbGwgZGF0YSBvbiBzY3JlZW4gYmFzZWQgb24gYW1vdW50IG9mIG5vZGVzXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17e25vZGVzPUFycmF5fX1dXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRpYWxab29tPWZhbHNlXSAgfCB6b29tIGJhc2VkIG9uIGZpdHRlZCBmb3JtdWxhIG9yIHJhbmdlLCB0cnVlID0gZml0dGVkLCBkZWZhdWx0ID0gZmFsc2U7XG4gICAqL1xuICBmaXQob3B0aW9ucywgaW5pdGlhbFpvb20gPSBmYWxzZSkge1xuICAgIG9wdGlvbnMgPSBub3JtYWxpemVGaXRPcHRpb25zKG9wdGlvbnMsIHRoaXMuYm9keS5ub2RlSW5kaWNlcyk7XG5cbiAgICBjb25zdCBjYW52YXNXaWR0aCA9IHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBjYW52YXNIZWlnaHQgPSB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0O1xuXG4gICAgbGV0IHJhbmdlO1xuICAgIGxldCB6b29tTGV2ZWw7XG4gICAgaWYgKGNhbnZhc1dpZHRoID09PSAwIHx8IGNhbnZhc0hlaWdodCA9PT0gMCkge1xuICAgICAgLy8gVGhlcmUncyBubyBwb2ludCBpbiB0cnlpbmcgdG8gZml0IGludG8gemVybyBzaXplZCBjYW52YXMuIFRoaXMgY291bGRcbiAgICAgIC8vIHBvdGVudGlhbGx5IGV2ZW4gcmVzdWx0IGluIGludmFsaWQgdmFsdWVzIGJlaW5nIGNvbXB1dGVkLiBGb3IgZXhhbXBsZVxuICAgICAgLy8gZm9yIG5ldHdvcmsgd2l0aG91dCBub2RlcyBhbmQgemVybyBzaXplZCBjYW52YXMgdGhlIHpvb20gbGV2ZWwgd291bGRcbiAgICAgIC8vIGVuZCB1cCBiZWluZyBjb21wdXRlZCBhcyAwLzAgd2hpY2ggcmVzdWx0cyBpbiBOYU4uIEluIGFueSBvdGhlciBjYXNlXG4gICAgICAvLyB0aGlzIHdvdWxkIGJlIDAvc29tZXRoaW5nIHdoaWNoIGlzIGFnYWluIHBvaW50bGVzcyB0byBjb21wdXRlLlxuICAgICAgem9vbUxldmVsID0gMTtcblxuICAgICAgcmFuZ2UgPSBOZXR3b3JrVXRpbC5nZXRSYW5nZSh0aGlzLmJvZHkubm9kZXMsIG9wdGlvbnMubm9kZXMpO1xuICAgIH0gZWxzZSBpZiAoaW5pdGlhbFpvb20gPT09IHRydWUpIHtcbiAgICAgIC8vIGNoZWNrIGlmIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSBub2RlcyBoYXZlIGEgcHJlZGVmaW5lZCBwb3NpdGlvbi4gSWYgc28sIHdlIHVzZSB0aGUgcmFuZ2UsIG5vdCB0aGUgYXBwcm94aW1hdGlvbi5cbiAgICAgIGxldCBwb3NpdGlvbkRlZmluZWQgPSAwO1xuICAgICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgICAgIGlmIChub2RlLnByZWRlZmluZWRQb3NpdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcG9zaXRpb25EZWZpbmVkICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocG9zaXRpb25EZWZpbmVkID4gMC41ICogdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZpdChvcHRpb25zLCBmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmFuZ2UgPSBOZXR3b3JrVXRpbC5nZXRSYW5nZSh0aGlzLmJvZHkubm9kZXMsIG9wdGlvbnMubm9kZXMpO1xuXG4gICAgICBjb25zdCBudW1iZXJPZk5vZGVzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDtcbiAgICAgIHpvb21MZXZlbCA9IDEyLjY2MiAvIChudW1iZXJPZk5vZGVzICsgNy40MTQ3KSArIDAuMDk2NDgyMjsgLy8gdGhpcyBpcyBvYnRhaW5lZCBmcm9tIGZpdHRpbmcgYSBkYXRhc2V0IGZyb20gNSBwb2ludHMgd2l0aCBzY2FsZSBsZXZlbHMgdGhhdCBsb29rZWQgZ29vZC5cblxuICAgICAgLy8gY29ycmVjdCBmb3IgbGFyZ2VyIGNhbnZhc3Nlcy5cbiAgICAgIGNvbnN0IGZhY3RvciA9IE1hdGgubWluKGNhbnZhc1dpZHRoIC8gNjAwLCBjYW52YXNIZWlnaHQgLyA2MDApO1xuICAgICAgem9vbUxldmVsICo9IGZhY3RvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXNpemVOb2Rlc1wiKTtcbiAgICAgIHJhbmdlID0gTmV0d29ya1V0aWwuZ2V0UmFuZ2UodGhpcy5ib2R5Lm5vZGVzLCBvcHRpb25zLm5vZGVzKTtcblxuICAgICAgY29uc3QgeERpc3RhbmNlID0gTWF0aC5hYnMocmFuZ2UubWF4WCAtIHJhbmdlLm1pblgpICogMS4xO1xuICAgICAgY29uc3QgeURpc3RhbmNlID0gTWF0aC5hYnMocmFuZ2UubWF4WSAtIHJhbmdlLm1pblkpICogMS4xO1xuXG4gICAgICBjb25zdCB4Wm9vbUxldmVsID0gY2FudmFzV2lkdGggLyB4RGlzdGFuY2U7XG4gICAgICBjb25zdCB5Wm9vbUxldmVsID0gY2FudmFzSGVpZ2h0IC8geURpc3RhbmNlO1xuXG4gICAgICB6b29tTGV2ZWwgPSB4Wm9vbUxldmVsIDw9IHlab29tTGV2ZWwgPyB4Wm9vbUxldmVsIDogeVpvb21MZXZlbDtcbiAgICB9XG5cbiAgICBpZiAoem9vbUxldmVsID4gb3B0aW9ucy5tYXhab29tTGV2ZWwpIHtcbiAgICAgIHpvb21MZXZlbCA9IG9wdGlvbnMubWF4Wm9vbUxldmVsO1xuICAgIH0gZWxzZSBpZiAoem9vbUxldmVsIDwgb3B0aW9ucy5taW5ab29tTGV2ZWwpIHtcbiAgICAgIHpvb21MZXZlbCA9IG9wdGlvbnMubWluWm9vbUxldmVsO1xuICAgIH1cblxuICAgIGNvbnN0IGNlbnRlciA9IE5ldHdvcmtVdGlsLmZpbmRDZW50ZXIocmFuZ2UpO1xuICAgIGNvbnN0IGFuaW1hdGlvbk9wdGlvbnMgPSB7XG4gICAgICBwb3NpdGlvbjogY2VudGVyLFxuICAgICAgc2NhbGU6IHpvb21MZXZlbCxcbiAgICAgIGFuaW1hdGlvbjogb3B0aW9ucy5hbmltYXRpb24sXG4gICAgfTtcbiAgICB0aGlzLm1vdmVUbyhhbmltYXRpb25PcHRpb25zKTtcbiAgfVxuXG4gIC8vIGFuaW1hdGlvblxuXG4gIC8qKlxuICAgKiBDZW50ZXIgYSBub2RlIGluIHZpZXcuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBub2RlSWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zXVxuICAgKi9cbiAgZm9jdXMobm9kZUlkLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICB4OiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS54LFxuICAgICAgICB5OiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS55LFxuICAgICAgfTtcbiAgICAgIG9wdGlvbnMucG9zaXRpb24gPSBub2RlUG9zaXRpb247XG4gICAgICBvcHRpb25zLmxvY2tlZE9uTm9kZSA9IG5vZGVJZDtcblxuICAgICAgdGhpcy5tb3ZlVG8ob3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb2RlOiBcIiArIG5vZGVJZCArIFwiIGNhbm5vdCBiZSBmb3VuZC5cIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICB8ICBvcHRpb25zLm9mZnNldCAgID0ge3g6bnVtYmVyLCB5Om51bWJlcn0gICAvLyBvZmZzZXQgZnJvbSB0aGUgY2VudGVyIGluIERPTSBwaXhlbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuc2NhbGUgICAgPSBudW1iZXIgICAgICAgICAgICAgICAgIC8vIHNjYWxlIHRvIG1vdmUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMucG9zaXRpb24gPSB7eDpudW1iZXIsIHk6bnVtYmVyfSAgIC8vIHBvc2l0aW9uIHRvIG1vdmUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuYW5pbWF0aW9uID0ge2R1cmF0aW9uOm51bWJlciwgZWFzaW5nRnVuY3Rpb246U3RyaW5nfSB8fCBCb29sZWFuICAgLy8gcG9zaXRpb24gdG8gbW92ZSB0b1xuICAgKi9cbiAgbW92ZVRvKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMub2Zmc2V0ICE9IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLm9mZnNldC54ICE9IG51bGwpIHtcbiAgICAgICAgLy8gQ29lcmNlIGFuZCB2ZXJpZnkgdGhhdCB4IGlzIHZhbGlkLlxuICAgICAgICBvcHRpb25zLm9mZnNldC54ID0gK29wdGlvbnMub2Zmc2V0Lng7XG4gICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG9wdGlvbnMub2Zmc2V0LngpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICdUaGUgb3B0aW9uIFwib2Zmc2V0LnhcIiBoYXMgdG8gYmUgYSBmaW5pdGUgbnVtYmVyLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLm9mZnNldC54ID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMub2Zmc2V0LnkgIT0gbnVsbCkge1xuICAgICAgICAvLyBDb2VyY2UgYW5kIHZlcmlmeSB0aGF0IHkgaXMgdmFsaWQuXG4gICAgICAgIG9wdGlvbnMub2Zmc2V0LnkgPSArb3B0aW9ucy5vZmZzZXQueTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5vZmZzZXQueSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgJ1RoZSBvcHRpb24gXCJvZmZzZXQueVwiIGhhcyB0byBiZSBhIGZpbml0ZSBudW1iZXIuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMub2Zmc2V0LnggPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLm9mZnNldCA9IHtcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMucG9zaXRpb24ueCAhPSBudWxsKSB7XG4gICAgICAgIC8vIENvZXJjZSBhbmQgdmVyaWZ5IHRoYXQgeCBpcyB2YWxpZC5cbiAgICAgICAgb3B0aW9ucy5wb3NpdGlvbi54ID0gK29wdGlvbnMucG9zaXRpb24ueDtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5wb3NpdGlvbi54KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAnVGhlIG9wdGlvbiBcInBvc2l0aW9uLnhcIiBoYXMgdG8gYmUgYSBmaW5pdGUgbnVtYmVyLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLnBvc2l0aW9uLnggPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wb3NpdGlvbi55ICE9IG51bGwpIHtcbiAgICAgICAgLy8gQ29lcmNlIGFuZCB2ZXJpZnkgdGhhdCB5IGlzIHZhbGlkLlxuICAgICAgICBvcHRpb25zLnBvc2l0aW9uLnkgPSArb3B0aW9ucy5wb3NpdGlvbi55O1xuICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShvcHRpb25zLnBvc2l0aW9uLnkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICdUaGUgb3B0aW9uIFwicG9zaXRpb24ueVwiIGhhcyB0byBiZSBhIGZpbml0ZSBudW1iZXIuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMucG9zaXRpb24ueCA9IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMucG9zaXRpb24gPSB0aGlzLmdldFZpZXdQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNjYWxlICE9IG51bGwpIHtcbiAgICAgIC8vIENvZXJjZSBhbmQgdmVyaWZ5IHRoYXQgdGhlIHNjYWxlIGlzIHZhbGlkLlxuICAgICAgb3B0aW9ucy5zY2FsZSA9ICtvcHRpb25zLnNjYWxlO1xuICAgICAgaWYgKCEob3B0aW9ucy5zY2FsZSA+IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ1RoZSBvcHRpb24gXCJzY2FsZVwiIGhhcyB0byBiZSBhIG51bWJlciBncmVhdGVyIHRoYW4gemVyby4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy5hbmltYXRpb24gPSB7IGR1cmF0aW9uOiAwIH07XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMuYW5pbWF0aW9uID0geyBkdXJhdGlvbjogMCB9O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24gPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMuYW5pbWF0aW9uID0ge307XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbi5kdXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmFuaW1hdGlvbi5kdXJhdGlvbiA9IDEwMDA7XG4gICAgfSAvLyBkZWZhdWx0IGR1cmF0aW9uXG4gICAgaWYgKG9wdGlvbnMuYW5pbWF0aW9uLmVhc2luZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuYW5pbWF0aW9uLmVhc2luZ0Z1bmN0aW9uID0gXCJlYXNlSW5PdXRRdWFkXCI7XG4gICAgfSAvLyBkZWZhdWx0IGVhc2luZyBmdW5jdGlvblxuXG4gICAgdGhpcy5hbmltYXRlVmlldyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAgfCAgb3B0aW9ucy5vZmZzZXQgICA9IHt4Om51bWJlciwgeTpudW1iZXJ9ICAgLy8gb2Zmc2V0IGZyb20gdGhlIGNlbnRlciBpbiBET00gcGl4ZWxzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLnRpbWUgICAgID0gbnVtYmVyICAgICAgICAgICAgICAgICAvLyBhbmltYXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuc2NhbGUgICAgPSBudW1iZXIgICAgICAgICAgICAgICAgIC8vIHNjYWxlIHRvIGFuaW1hdGUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMucG9zaXRpb24gPSB7eDpudW1iZXIsIHk6bnVtYmVyfSAgIC8vIHBvc2l0aW9uIHRvIGFuaW1hdGUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuZWFzaW5nRnVuY3Rpb24gPSBTdHJpbmcgICAgICAgICAgIC8vIGxpbmVhciwgZWFzZUluUXVhZCwgZWFzZU91dFF1YWQsIGVhc2VJbk91dFF1YWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYXNlSW5DdWJpYywgZWFzZU91dEN1YmljLCBlYXNlSW5PdXRDdWJpYyxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhc2VJblF1YXJ0LCBlYXNlT3V0UXVhcnQsIGVhc2VJbk91dFF1YXJ0LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFzZUluUXVpbnQsIGVhc2VPdXRRdWludCwgZWFzZUluT3V0UXVpbnRcbiAgICovXG4gIGFuaW1hdGVWaWV3KG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb24gPSBvcHRpb25zLmFuaW1hdGlvbi5lYXNpbmdGdW5jdGlvbjtcbiAgICAvLyByZWxlYXNlIGlmIHNvbWV0aGluZyBmb2N1c3NlZCBvbiB0aGUgbm9kZVxuICAgIHRoaXMucmVsZWFzZU5vZGUoKTtcbiAgICBpZiAob3B0aW9ucy5sb2NrZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMubG9ja2VkT25Ob2RlSWQgPSBvcHRpb25zLmxvY2tlZE9uTm9kZTtcbiAgICAgIHRoaXMubG9ja2VkT25Ob2RlT2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQ7XG4gICAgfVxuXG4gICAgLy8gZm9yY2VmdWxseSBjb21wbGV0ZSB0aGUgb2xkIGFuaW1hdGlvbiBpZiBpdCB3YXMgc3RpbGwgcnVubmluZ1xuICAgIGlmICh0aGlzLmVhc2luZ1RpbWUgIT0gMCkge1xuICAgICAgdGhpcy5fdHJhbnNpdGlvblJlZHJhdyh0cnVlKTsgLy8gYnkgc2V0dGluZyBlYXNpbmd0aW1lIHRvIDEsIHdlIGZpbmlzaCB0aGUgYW5pbWF0aW9uLlxuICAgIH1cblxuICAgIHRoaXMuc291cmNlU2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uID0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb247XG4gICAgdGhpcy50YXJnZXRTY2FsZSA9IG9wdGlvbnMuc2NhbGU7XG5cbiAgICAvLyBzZXQgdGhlIHNjYWxlIHNvIHRoZSB2aWV3Q2VudGVyIGlzIGJhc2VkIG9uIHRoZSBjb3JyZWN0IHpvb20gbGV2ZWwuIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgdHJhbnNpdGlvblJlZHJhd1xuICAgIC8vIGJ1dCBhdCBsZWFzdCB0aGVuIHdlJ2xsIGhhdmUgdGhlIHRhcmdldCB0cmFuc2l0aW9uXG4gICAgdGhpcy5ib2R5LnZpZXcuc2NhbGUgPSB0aGlzLnRhcmdldFNjYWxlO1xuICAgIGNvbnN0IHZpZXdDZW50ZXIgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyh7XG4gICAgICB4OiAwLjUgKiB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGgsXG4gICAgICB5OiAwLjUgKiB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGlzdGFuY2VGcm9tQ2VudGVyID0ge1xuICAgICAgLy8gb2Zmc2V0IGZyb20gdmlldywgZGlzdGFuY2UgdmlldyBoYXMgdG8gY2hhbmdlIGJ5IHRoZXNlIHggYW5kIHkgdG8gY2VudGVyIHRoZSBub2RlXG4gICAgICB4OiB2aWV3Q2VudGVyLnggLSBvcHRpb25zLnBvc2l0aW9uLngsXG4gICAgICB5OiB2aWV3Q2VudGVyLnkgLSBvcHRpb25zLnBvc2l0aW9uLnksXG4gICAgfTtcbiAgICB0aGlzLnRhcmdldFRyYW5zbGF0aW9uID0ge1xuICAgICAgeDpcbiAgICAgICAgdGhpcy5zb3VyY2VUcmFuc2xhdGlvbi54ICtcbiAgICAgICAgZGlzdGFuY2VGcm9tQ2VudGVyLnggKiB0aGlzLnRhcmdldFNjYWxlICtcbiAgICAgICAgb3B0aW9ucy5vZmZzZXQueCxcbiAgICAgIHk6XG4gICAgICAgIHRoaXMuc291cmNlVHJhbnNsYXRpb24ueSArXG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci55ICogdGhpcy50YXJnZXRTY2FsZSArXG4gICAgICAgIG9wdGlvbnMub2Zmc2V0LnksXG4gICAgfTtcblxuICAgIC8vIGlmIHRoZSB0aW1lIGlzIHNldCB0byAwLCBkb24ndCBkbyBhbiBhbmltYXRpb25cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24uZHVyYXRpb24gPT09IDApIHtcbiAgICAgIGlmICh0aGlzLmxvY2tlZE9uTm9kZUlkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnZpZXdGdW5jdGlvbiA9IHRoaXMuX2xvY2tlZFJlZHJhdy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImluaXRSZWRyYXdcIiwgdGhpcy52aWV3RnVuY3Rpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ib2R5LnZpZXcuc2NhbGUgPSB0aGlzLnRhcmdldFNjYWxlO1xuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHRoaXMudGFyZ2V0VHJhbnNsYXRpb247XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbmltYXRpb25TcGVlZCA9XG4gICAgICAgIDEgLyAoNjAgKiBvcHRpb25zLmFuaW1hdGlvbi5kdXJhdGlvbiAqIDAuMDAxKSB8fCAxIC8gNjA7IC8vIDYwIGZvciA2MCBzZWNvbmRzLCAwLjAwMSBmb3IgbWlsbGknc1xuICAgICAgdGhpcy5hbmltYXRpb25FYXNpbmdGdW5jdGlvbiA9IG9wdGlvbnMuYW5pbWF0aW9uLmVhc2luZ0Z1bmN0aW9uO1xuXG4gICAgICB0aGlzLnZpZXdGdW5jdGlvbiA9IHRoaXMuX3RyYW5zaXRpb25SZWRyYXcuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiaW5pdFJlZHJhd1wiLCB0aGlzLnZpZXdGdW5jdGlvbik7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0YXJ0UmVuZGVyaW5nXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB1c2VkIHRvIGFuaW1hdGUgc21vb3RobHkgYnkgaGlqYWNraW5nIHRoZSByZWRyYXcgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbG9ja2VkUmVkcmF3KCkge1xuICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgIHg6IHRoaXMuYm9keS5ub2Rlc1t0aGlzLmxvY2tlZE9uTm9kZUlkXS54LFxuICAgICAgeTogdGhpcy5ib2R5Lm5vZGVzW3RoaXMubG9ja2VkT25Ob2RlSWRdLnksXG4gICAgfTtcbiAgICBjb25zdCB2aWV3Q2VudGVyID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoe1xuICAgICAgeDogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoLFxuICAgICAgeTogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICB9KTtcbiAgICBjb25zdCBkaXN0YW5jZUZyb21DZW50ZXIgPSB7XG4gICAgICAvLyBvZmZzZXQgZnJvbSB2aWV3LCBkaXN0YW5jZSB2aWV3IGhhcyB0byBjaGFuZ2UgYnkgdGhlc2UgeCBhbmQgeSB0byBjZW50ZXIgdGhlIG5vZGVcbiAgICAgIHg6IHZpZXdDZW50ZXIueCAtIG5vZGVQb3NpdGlvbi54LFxuICAgICAgeTogdmlld0NlbnRlci55IC0gbm9kZVBvc2l0aW9uLnksXG4gICAgfTtcbiAgICBjb25zdCBzb3VyY2VUcmFuc2xhdGlvbiA9IHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uO1xuICAgIGNvbnN0IHRhcmdldFRyYW5zbGF0aW9uID0ge1xuICAgICAgeDpcbiAgICAgICAgc291cmNlVHJhbnNsYXRpb24ueCArXG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci54ICogdGhpcy5ib2R5LnZpZXcuc2NhbGUgK1xuICAgICAgICB0aGlzLmxvY2tlZE9uTm9kZU9mZnNldC54LFxuICAgICAgeTpcbiAgICAgICAgc291cmNlVHJhbnNsYXRpb24ueSArXG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci55ICogdGhpcy5ib2R5LnZpZXcuc2NhbGUgK1xuICAgICAgICB0aGlzLmxvY2tlZE9uTm9kZU9mZnNldC55LFxuICAgIH07XG5cbiAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHRhcmdldFRyYW5zbGF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBzdGF0ZSBvZiBhIGxvY2tlZCBvbiBOb2RlXG4gICAqL1xuICByZWxlYXNlTm9kZSgpIHtcbiAgICBpZiAodGhpcy5sb2NrZWRPbk5vZGVJZCAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmlld0Z1bmN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9mZihcImluaXRSZWRyYXdcIiwgdGhpcy52aWV3RnVuY3Rpb24pO1xuICAgICAgdGhpcy5sb2NrZWRPbk5vZGVJZCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubG9ja2VkT25Ob2RlT2Zmc2V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmaW5pc2hlZD1mYWxzZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF90cmFuc2l0aW9uUmVkcmF3KGZpbmlzaGVkID0gZmFsc2UpIHtcbiAgICB0aGlzLmVhc2luZ1RpbWUgKz0gdGhpcy5hbmltYXRpb25TcGVlZDtcbiAgICB0aGlzLmVhc2luZ1RpbWUgPSBmaW5pc2hlZCA9PT0gdHJ1ZSA/IDEuMCA6IHRoaXMuZWFzaW5nVGltZTtcblxuICAgIGNvbnN0IHByb2dyZXNzID0gZWFzaW5nRnVuY3Rpb25zW3RoaXMuYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb25dKFxuICAgICAgdGhpcy5lYXNpbmdUaW1lXG4gICAgKTtcblxuICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID1cbiAgICAgIHRoaXMuc291cmNlU2NhbGUgKyAodGhpcy50YXJnZXRTY2FsZSAtIHRoaXMuc291cmNlU2NhbGUpICogcHJvZ3Jlc3M7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7XG4gICAgICB4OlxuICAgICAgICB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uLnggK1xuICAgICAgICAodGhpcy50YXJnZXRUcmFuc2xhdGlvbi54IC0gdGhpcy5zb3VyY2VUcmFuc2xhdGlvbi54KSAqIHByb2dyZXNzLFxuICAgICAgeTpcbiAgICAgICAgdGhpcy5zb3VyY2VUcmFuc2xhdGlvbi55ICtcbiAgICAgICAgKHRoaXMudGFyZ2V0VHJhbnNsYXRpb24ueSAtIHRoaXMuc291cmNlVHJhbnNsYXRpb24ueSkgKiBwcm9ncmVzcyxcbiAgICB9O1xuXG4gICAgLy8gY2xlYW51cFxuICAgIGlmICh0aGlzLmVhc2luZ1RpbWUgPj0gMS4wKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIHRoaXMuZWFzaW5nVGltZSA9IDA7XG4gICAgICBpZiAodGhpcy5sb2NrZWRPbk5vZGVJZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52aWV3RnVuY3Rpb24gPSB0aGlzLl9sb2NrZWRSZWRyYXcuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJhbmltYXRpb25GaW5pc2hlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFNjYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7e3g6IG51bWJlciwgeTogbnVtYmVyfX1cbiAgICovXG4gIGdldFZpZXdQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoe1xuICAgICAgeDogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoLFxuICAgICAgeTogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWV3O1xuIiwgInR5cGUgSWRUeXBlID0gc3RyaW5nIHwgbnVtYmVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdGaXRPcHRpb25zIHtcbiAgbm9kZXM6IElkVHlwZVtdO1xuICBtaW5ab29tTGV2ZWw6IG51bWJlcjtcbiAgbWF4Wm9vbUxldmVsOiBudW1iZXI7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgdGhlIGZpdCBvcHRpb25zLCByZXBsYWNlIG1pc3Npbmcgb3B0aW9uYWwgdmFsdWVzIGJ5IGRlZmF1bHRzIGV0Yy5cbiAqXG4gKiBAcGFyYW0gcmF3T3B0aW9ucyAtIFRoZSByYXcgb3B0aW9ucy5cbiAqIEBwYXJhbSBhbGxOb2RlSWRzIC0gQWxsIG5vZGUgaWRzIHRoYXQgd2lsbCBiZSB1c2VkIGlmIG5vZGVzIGFyZSBvbWl0dGVkIGluXG4gKiB0aGUgcmF3IG9wdGlvbnMuXG4gKiBAcmV0dXJucyBPcHRpb25zIHdpdGggZXZlcnl0aGluZyBmaWxsZWQgaW4gYW5kIHZhbGlkYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUZpdE9wdGlvbnMoXG4gIHJhd09wdGlvbnM6IFBhcnRpYWw8Vmlld0ZpdE9wdGlvbnM+LFxuICBhbGxOb2RlSWRzOiBJZFR5cGVbXVxuKTogVmlld0ZpdE9wdGlvbnMge1xuICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbjxWaWV3Rml0T3B0aW9ucywgUGFydGlhbDxWaWV3Rml0T3B0aW9ucz4+KFxuICAgIHtcbiAgICAgIG5vZGVzOiBhbGxOb2RlSWRzLFxuICAgICAgbWluWm9vbUxldmVsOiBOdW1iZXIuTUlOX1ZBTFVFLFxuICAgICAgbWF4Wm9vbUxldmVsOiAxLFxuICAgIH0sXG4gICAgcmF3T3B0aW9ucyA/PyB7fVxuICApO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zLm5vZGVzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJOb2RlcyBoYXMgdG8gYmUgYW4gYXJyYXkgb2YgaWRzLlwiKTtcbiAgfVxuICBpZiAob3B0aW9ucy5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICBvcHRpb25zLm5vZGVzID0gYWxsTm9kZUlkcztcbiAgfVxuXG4gIGlmICghKHR5cGVvZiBvcHRpb25zLm1pblpvb21MZXZlbCA9PT0gXCJudW1iZXJcIiAmJiBvcHRpb25zLm1pblpvb21MZXZlbCA+IDApKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1pbiB6b29tIGxldmVsIGhhcyB0byBiZSBhIG51bWJlciBoaWdoZXIgdGhhbiB6ZXJvLlwiKTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKFxuICAgICAgdHlwZW9mIG9wdGlvbnMubWF4Wm9vbUxldmVsID09PSBcIm51bWJlclwiICYmXG4gICAgICBvcHRpb25zLm1pblpvb21MZXZlbCA8PSBvcHRpb25zLm1heFpvb21MZXZlbFxuICAgIClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiTWF4IHpvb20gbGV2ZWwgaGFzIHRvIGJlIGEgbnVtYmVyIGhpZ2hlciB0aGFuIG1pbiB6b29tIGxldmVsLlwiXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuIiwgIi8qKlxyXG4gKiBDcmVhdGVkIGJ5IEFsZXggb24gMTEvNi8yMDE0LlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ga2V5Y2hhcm0ob3B0aW9ucykge1xyXG4gIHZhciBwcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wcmV2ZW50RGVmYXVsdCB8fCBmYWxzZTtcclxuXHJcbiAgdmFyIGNvbnRhaW5lciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250YWluZXIgfHwgd2luZG93O1xyXG5cclxuICB2YXIgX2V4cG9ydEZ1bmN0aW9ucyA9IHt9O1xyXG4gIHZhciBfYm91bmQgPSB7a2V5ZG93bjp7fSwga2V5dXA6e319O1xyXG4gIHZhciBfa2V5cyA9IHt9O1xyXG4gIHZhciBpO1xyXG5cclxuICAvLyBhIC0gelxyXG4gIGZvciAoaSA9IDk3OyBpIDw9IDEyMjsgaSsrKSB7X2tleXNbU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSB7Y29kZTo2NSArIChpIC0gOTcpLCBzaGlmdDogZmFsc2V9O31cclxuICAvLyBBIC0gWlxyXG4gIGZvciAoaSA9IDY1OyBpIDw9IDkwOyBpKyspIHtfa2V5c1tTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IHtjb2RlOmksIHNoaWZ0OiB0cnVlfTt9XHJcbiAgLy8gMCAtIDlcclxuICBmb3IgKGkgPSAwOyAgaSA8PSA5OyAgIGkrKykge19rZXlzWycnICsgaV0gPSB7Y29kZTo0OCArIGksIHNoaWZ0OiBmYWxzZX07fVxyXG4gIC8vIEYxIC0gRjEyXHJcbiAgZm9yIChpID0gMTsgIGkgPD0gMTI7ICAgaSsrKSB7X2tleXNbJ0YnICsgaV0gPSB7Y29kZToxMTEgKyBpLCBzaGlmdDogZmFsc2V9O31cclxuICAvLyBudW0wIC0gbnVtOVxyXG4gIGZvciAoaSA9IDA7ICBpIDw9IDk7ICAgaSsrKSB7X2tleXNbJ251bScgKyBpXSA9IHtjb2RlOjk2ICsgaSwgc2hpZnQ6IGZhbHNlfTt9XHJcblxyXG4gIC8vIG51bXBhZCBtaXNjXHJcbiAgX2tleXNbJ251bSonXSA9IHtjb2RlOjEwNiwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snbnVtKyddID0ge2NvZGU6MTA3LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydudW0tJ10gPSB7Y29kZToxMDksIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ251bS8nXSA9IHtjb2RlOjExMSwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snbnVtLiddID0ge2NvZGU6MTEwLCBzaGlmdDogZmFsc2V9O1xyXG4gIC8vIGFycm93c1xyXG4gIF9rZXlzWydsZWZ0J10gID0ge2NvZGU6MzcsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3VwJ10gICAgPSB7Y29kZTozOCwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1sncmlnaHQnXSA9IHtjb2RlOjM5LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydkb3duJ10gID0ge2NvZGU6NDAsIHNoaWZ0OiBmYWxzZX07XHJcbiAgLy8gZXh0cmEga2V5c1xyXG4gIF9rZXlzWydzcGFjZSddID0ge2NvZGU6MzIsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ2VudGVyJ10gPSB7Y29kZToxMywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snc2hpZnQnXSA9IHtjb2RlOjE2LCBzaGlmdDogdW5kZWZpbmVkfTtcclxuICBfa2V5c1snZXNjJ10gICA9IHtjb2RlOjI3LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydiYWNrc3BhY2UnXSA9IHtjb2RlOjgsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3RhYiddICAgICAgID0ge2NvZGU6OSwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snY3RybCddICAgICAgPSB7Y29kZToxNywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snYWx0J10gICAgICAgPSB7Y29kZToxOCwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snZGVsZXRlJ10gICAgPSB7Y29kZTo0Niwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1sncGFnZXVwJ10gICAgPSB7Y29kZTozMywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1sncGFnZWRvd24nXSAgPSB7Y29kZTozNCwgc2hpZnQ6IGZhbHNlfTtcclxuICAvLyBzeW1ib2xzXHJcbiAgX2tleXNbJz0nXSAgICAgPSB7Y29kZToxODcsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJy0nXSAgICAgPSB7Y29kZToxODksIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ10nXSAgICAgPSB7Y29kZToyMjEsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ1snXSAgICAgPSB7Y29kZToyMTksIHNoaWZ0OiBmYWxzZX07XHJcblxyXG5cclxuXHJcbiAgdmFyIGRvd24gPSBmdW5jdGlvbihldmVudCkge2hhbmRsZUV2ZW50KGV2ZW50LCdrZXlkb3duJyk7fTtcclxuICB2YXIgdXAgPSBmdW5jdGlvbihldmVudCkge2hhbmRsZUV2ZW50KGV2ZW50LCdrZXl1cCcpO307XHJcblxyXG4gIC8vIGhhbmRsZSB0aGUgYWN0dWFseSBib3VuZCBrZXkgd2l0aCB0aGUgZXZlbnRcclxuICB2YXIgaGFuZGxlRXZlbnQgPSBmdW5jdGlvbihldmVudCx0eXBlKSB7XHJcbiAgICBpZiAoX2JvdW5kW3R5cGVdW2V2ZW50LmtleUNvZGVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdmFyIGJvdW5kID0gX2JvdW5kW3R5cGVdW2V2ZW50LmtleUNvZGVdO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGJvdW5kW2ldLnNoaWZ0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGJvdW5kW2ldLmZuKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYm91bmRbaV0uc2hpZnQgPT0gdHJ1ZSAmJiBldmVudC5zaGlmdEtleSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICBib3VuZFtpXS5mbihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGJvdW5kW2ldLnNoaWZ0ID09IGZhbHNlICYmIGV2ZW50LnNoaWZ0S2V5ID09IGZhbHNlKSB7XHJcbiAgICAgICAgICBib3VuZFtpXS5mbihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocHJldmVudERlZmF1bHQgPT0gdHJ1ZSkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyBiaW5kIGEga2V5IHRvIGEgY2FsbGJhY2tcclxuICBfZXhwb3J0RnVuY3Rpb25zLmJpbmQgPSBmdW5jdGlvbihrZXksIGNhbGxiYWNrLCB0eXBlKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHR5cGUgPSAna2V5ZG93bic7XHJcbiAgICB9XHJcbiAgICBpZiAoX2tleXNba2V5XSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGtleTogXCIgKyBrZXkpO1xyXG4gICAgfVxyXG4gICAgaWYgKF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgX2JvdW5kW3R5cGVdW19rZXlzW2tleV0uY29kZV0gPSBbXTtcclxuICAgIH1cclxuICAgIF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdLnB1c2goe2ZuOmNhbGxiYWNrLCBzaGlmdDpfa2V5c1trZXldLnNoaWZ0fSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8vIGJpbmQgYWxsIGtleXMgdG8gYSBjYWxsIGJhY2sgKGRlbW8gcHVycG9zZXMpXHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy5iaW5kQWxsID0gZnVuY3Rpb24oY2FsbGJhY2ssIHR5cGUpIHtcclxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdHlwZSA9ICdrZXlkb3duJztcclxuICAgIH1cclxuICAgIGZvciAodmFyIGtleSBpbiBfa2V5cykge1xyXG4gICAgICBpZiAoX2tleXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIF9leHBvcnRGdW5jdGlvbnMuYmluZChrZXksY2FsbGJhY2ssdHlwZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyBnZXQgdGhlIGtleSBsYWJlbCBmcm9tIGFuIGV2ZW50XHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy5nZXRLZXkgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgZm9yICh2YXIga2V5IGluIF9rZXlzKSB7XHJcbiAgICAgIGlmIChfa2V5cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ID09IHRydWUgJiYgX2tleXNba2V5XS5zaGlmdCA9PSB0cnVlICYmIGV2ZW50LmtleUNvZGUgPT0gX2tleXNba2V5XS5jb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChldmVudC5zaGlmdEtleSA9PSBmYWxzZSAmJiBfa2V5c1trZXldLnNoaWZ0ID09IGZhbHNlICYmIGV2ZW50LmtleUNvZGUgPT0gX2tleXNba2V5XS5jb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChldmVudC5rZXlDb2RlID09IF9rZXlzW2tleV0uY29kZSAmJiBrZXkgPT0gJ3NoaWZ0Jykge1xyXG4gICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBcInVua25vd24ga2V5LCBjdXJyZW50bHkgbm90IHN1cHBvcnRlZFwiO1xyXG4gIH07XHJcblxyXG4gIC8vIHVuYmluZCBlaXRoZXIgYSBzcGVjaWZpYyBjYWxsYmFjayBmcm9tIGEga2V5IG9yIGFsbCBvZiB0aGVtIChieSBsZWF2aW5nIGNhbGxiYWNrIHVuZGVmaW5lZClcclxuICBfZXhwb3J0RnVuY3Rpb25zLnVuYmluZCA9IGZ1bmN0aW9uKGtleSwgY2FsbGJhY2ssIHR5cGUpIHtcclxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdHlwZSA9ICdrZXlkb3duJztcclxuICAgIH1cclxuICAgIGlmIChfa2V5c1trZXldID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQga2V5OiBcIiArIGtleSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB2YXIgbmV3QmluZGluZ3MgPSBbXTtcclxuICAgICAgdmFyIGJvdW5kID0gX2JvdW5kW3R5cGVdW19rZXlzW2tleV0uY29kZV07XHJcbiAgICAgIGlmIChib3VuZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKCEoYm91bmRbaV0uZm4gPT0gY2FsbGJhY2sgJiYgYm91bmRbaV0uc2hpZnQgPT0gX2tleXNba2V5XS5zaGlmdCkpIHtcclxuICAgICAgICAgICAgbmV3QmluZGluZ3MucHVzaChfYm91bmRbdHlwZV1bX2tleXNba2V5XS5jb2RlXVtpXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdID0gbmV3QmluZGluZ3M7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgX2JvdW5kW3R5cGVdW19rZXlzW2tleV0uY29kZV0gPSBbXTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyByZXNldCBhbGwgYm91bmQgdmFyaWFibGVzLlxyXG4gIF9leHBvcnRGdW5jdGlvbnMucmVzZXQgPSBmdW5jdGlvbigpIHtcclxuICAgIF9ib3VuZCA9IHtrZXlkb3duOnt9LCBrZXl1cDp7fX07XHJcbiAgfTtcclxuXHJcbiAgLy8gdW5iaW5kIGFsbCBsaXN0ZW5lcnMgYW5kIHJlc2V0IGFsbCB2YXJpYWJsZXMuXHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfYm91bmQgPSB7a2V5ZG93bjp7fSwga2V5dXA6e319O1xyXG4gICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBkb3duLCB0cnVlKTtcclxuICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHVwLCB0cnVlKTtcclxuICB9O1xyXG5cclxuICAvLyBjcmVhdGUgbGlzdGVuZXJzLlxyXG4gIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyxkb3duLHRydWUpO1xyXG4gIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsdXAsdHJ1ZSk7XHJcblxyXG4gIC8vIHJldHVybiB0aGUgcHVibGljIGZ1bmN0aW9ucy5cclxuICByZXR1cm4gX2V4cG9ydEZ1bmN0aW9ucztcclxufVxyXG4iLCAiaW1wb3J0IFwiLi9OYXZpZ2F0aW9uSGFuZGxlci5jc3NcIjtcblxuaW1wb3J0IHsgSGFtbWVyIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgb25SZWxlYXNlLCBvblRvdWNoIH0gZnJvbSBcIi4uLy4uLy4uL2hhbW1lclV0aWxcIjtcbmltcG9ydCBrZXljaGFybSBmcm9tIFwia2V5Y2hhcm1cIjtcblxuLyoqXG4gKiBOYXZpZ2F0aW9uIEhhbmRsZXJcbiAqL1xuY2xhc3MgTmF2aWdhdGlvbkhhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcblxuICAgIHRoaXMuaWNvbnNDcmVhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5uYXZpZ2F0aW9uSGFtbWVycyA9IFtdO1xuICAgIHRoaXMuYm91bmRGdW5jdGlvbnMgPSB7fTtcbiAgICB0aGlzLnRvdWNoVGltZSA9IDA7XG4gICAgdGhpcy5hY3RpdmF0ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiYWN0aXZhdGVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5hY3RpdmF0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jb25maWd1cmVLZXlib2FyZEJpbmRpbmdzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZWFjdGl2YXRlXCIsICgpID0+IHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbmZpZ3VyZUtleWJvYXJkQmluZGluZ3MoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMua2V5Y2hhcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmtleWNoYXJtLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgdGhpcy5jcmVhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBvciByZWZyZXNoZXMgbmF2aWdhdGlvbiBhbmQgc2V0cyBrZXkgYmluZGluZ3NcbiAgICovXG4gIGNyZWF0ZSgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm5hdmlnYXRpb25CdXR0b25zID09PSB0cnVlKSB7XG4gICAgICBpZiAodGhpcy5pY29uc0NyZWF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubG9hZE5hdmlnYXRpb25FbGVtZW50cygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pY29uc0NyZWF0ZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY2xlYW5OYXZpZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWd1cmVLZXlib2FyZEJpbmRpbmdzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW5zIHVwIHByZXZpb3VzIG5hdmlnYXRpb24gaXRlbXNcbiAgICovXG4gIGNsZWFuTmF2aWdhdGlvbigpIHtcbiAgICAvLyBjbGVhbiBoYW1tZXIgYmluZGluZ3NcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uSGFtbWVycy5sZW5ndGggIT0gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5hdmlnYXRpb25IYW1tZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkhhbW1lcnNbaV0uZGVzdHJveSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5uYXZpZ2F0aW9uSGFtbWVycyA9IFtdO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHByZXZpb3VzIG5hdmlnYXRpb24gaXRlbXNcbiAgICBpZiAoXG4gICAgICB0aGlzLm5hdmlnYXRpb25ET00gJiZcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0gJiZcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0ucGFyZW50Tm9kZVxuICAgICkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFxuICAgICAgICB0aGlzLm5hdmlnYXRpb25ET01bXCJ3cmFwcGVyXCJdXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaWNvbnNDcmVhdGVkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRpb24gb2YgdGhlIG5hdmlnYXRpb24gY29udHJvbHMgbm9kZXMuIFRoZXkgYXJlIGRyYXduIG92ZXIgdGhlIHJlc3Qgb2YgdGhlIG5vZGVzIGFuZCBhcmUgbm90IGFmZmVjdGVkIGJ5IHNjYWxlIGFuZCB0cmFuc2xhdGlvblxuICAgKiB0aGV5IGhhdmUgYSB0cmlnZ2VyRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uIGNsaWNrLiBJZiB0aGUgcG9zaXRpb24gb2YgdGhlIG5hdmlnYXRpb24gY29udHJvbHMgaXMgZGVwZW5kZW50XG4gICAqIG9uIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoIG9yIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCwgd2UgZmxhZyBob3Jpem9udGFsQWxpZ25MZWZ0IGFuZCB2ZXJ0aWNhbEFsaWduVG9wIGZhbHNlLlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGxvY2F0aW9uIHdpbGwgYmUgY29ycmVjdGVkIGJ5IHRoZSBfcmVsb2NhdGVOYXZpZ2F0aW9uIGZ1bmN0aW9uIG9uIGEgc2l6ZSBjaGFuZ2Ugb2YgdGhlIGNhbnZhcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGxvYWROYXZpZ2F0aW9uRWxlbWVudHMoKSB7XG4gICAgdGhpcy5jbGVhbk5hdmlnYXRpb24oKTtcblxuICAgIHRoaXMubmF2aWdhdGlvbkRPTSA9IHt9O1xuICAgIGNvbnN0IG5hdmlnYXRpb25EaXZzID0gW1xuICAgICAgXCJ1cFwiLFxuICAgICAgXCJkb3duXCIsXG4gICAgICBcImxlZnRcIixcbiAgICAgIFwicmlnaHRcIixcbiAgICAgIFwiem9vbUluXCIsXG4gICAgICBcInpvb21PdXRcIixcbiAgICAgIFwiem9vbUV4dGVuZHNcIixcbiAgICBdO1xuICAgIGNvbnN0IG5hdmlnYXRpb25EaXZBY3Rpb25zID0gW1xuICAgICAgXCJfbW92ZVVwXCIsXG4gICAgICBcIl9tb3ZlRG93blwiLFxuICAgICAgXCJfbW92ZUxlZnRcIixcbiAgICAgIFwiX21vdmVSaWdodFwiLFxuICAgICAgXCJfem9vbUluXCIsXG4gICAgICBcIl96b29tT3V0XCIsXG4gICAgICBcIl9maXRcIixcbiAgICBdO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXS5jbGFzc05hbWUgPSBcInZpcy1uYXZpZ2F0aW9uXCI7XG4gICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdmlnYXRpb25EaXZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25ET01bbmF2aWdhdGlvbkRpdnNbaV1dID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtuYXZpZ2F0aW9uRGl2c1tpXV0uY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtYnV0dG9uIHZpcy1cIiArIG5hdmlnYXRpb25EaXZzW2ldO1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXS5hcHBlbmRDaGlsZChcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW25hdmlnYXRpb25EaXZzW2ldXVxuICAgICAgKTtcblxuICAgICAgY29uc3QgaGFtbWVyID0gbmV3IEhhbW1lcih0aGlzLm5hdmlnYXRpb25ET01bbmF2aWdhdGlvbkRpdnNbaV1dKTtcbiAgICAgIGlmIChuYXZpZ2F0aW9uRGl2QWN0aW9uc1tpXSA9PT0gXCJfZml0XCIpIHtcbiAgICAgICAgb25Ub3VjaChoYW1tZXIsIHRoaXMuX2ZpdC5iaW5kKHRoaXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uVG91Y2goaGFtbWVyLCB0aGlzLmJpbmRUb1JlZHJhdy5iaW5kKHRoaXMsIG5hdmlnYXRpb25EaXZBY3Rpb25zW2ldKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmF2aWdhdGlvbkhhbW1lcnMucHVzaChoYW1tZXIpO1xuICAgIH1cblxuICAgIC8vIHVzZSBhIGhhbW1lciBmb3IgdGhlIHJlbGVhc2Ugc28gd2UgZG8gbm90IHJlcXVpcmUgdGhlIG9uZSB1c2VkIGluIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrXG4gICAgLy8gdGhlIG9uZSB0aGUgcmVzdCB1c2VzIGNhbiBiZSBvdmVybG9hZGVkIGJ5IHRoZSBtYW5pcHVsYXRpb24gc3lzdGVtLlxuICAgIGNvbnN0IGhhbW1lckZyYW1lID0gbmV3IEhhbW1lcih0aGlzLmNhbnZhcy5mcmFtZSk7XG4gICAgb25SZWxlYXNlKGhhbW1lckZyYW1lLCAoKSA9PiB7XG4gICAgICB0aGlzLl9zdG9wTW92ZW1lbnQoKTtcbiAgICB9KTtcbiAgICB0aGlzLm5hdmlnYXRpb25IYW1tZXJzLnB1c2goaGFtbWVyRnJhbWUpO1xuXG4gICAgdGhpcy5pY29uc0NyZWF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25cbiAgICovXG4gIGJpbmRUb1JlZHJhdyhhY3Rpb24pIHtcbiAgICBpZiAodGhpcy5ib3VuZEZ1bmN0aW9uc1thY3Rpb25dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYm91bmRGdW5jdGlvbnNbYWN0aW9uXSA9IHRoaXNbYWN0aW9uXS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJpbml0UmVkcmF3XCIsIHRoaXMuYm91bmRGdW5jdGlvbnNbYWN0aW9uXSk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0YXJ0UmVuZGVyaW5nXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uXG4gICAqL1xuICB1bmJpbmRGcm9tUmVkcmF3KGFjdGlvbikge1xuICAgIGlmICh0aGlzLmJvdW5kRnVuY3Rpb25zW2FjdGlvbl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKFwiaW5pdFJlZHJhd1wiLCB0aGlzLmJvdW5kRnVuY3Rpb25zW2FjdGlvbl0pO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9zdG9wUmVuZGVyaW5nXCIpO1xuICAgICAgZGVsZXRlIHRoaXMuYm91bmRGdW5jdGlvbnNbYWN0aW9uXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzdG9wcyBhbGwgbW92ZW1lbnQgaW5kdWNlZCBieSB0aGUgbmF2aWdhdGlvbiBidXR0b25zXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZml0KCkge1xuICAgIGlmIChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAtIHRoaXMudG91Y2hUaW1lID4gNzAwKSB7XG4gICAgICAvLyBUT0RPOiBmaXggdWdseSBoYWNrIHRvIGF2b2lkIGhhbW1lcidzIGRvdWJsZSBmaXJlaW5nIG9mIGV2ZW50IChiZWNhdXNlIHdlIHVzZSByZWxlYXNlPylcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJmaXRcIiwgeyBkdXJhdGlvbjogNzAwIH0pO1xuICAgICAgdGhpcy50b3VjaFRpbWUgPSBuZXcgRGF0ZSgpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzdG9wcyBhbGwgbW92ZW1lbnQgaW5kdWNlZCBieSB0aGUgbmF2aWdhdGlvbiBidXR0b25zXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RvcE1vdmVtZW50KCkge1xuICAgIGZvciAoY29uc3QgYm91bmRBY3Rpb24gaW4gdGhpcy5ib3VuZEZ1bmN0aW9ucykge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib3VuZEZ1bmN0aW9ucywgYm91bmRBY3Rpb24pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKFwiaW5pdFJlZHJhd1wiLCB0aGlzLmJvdW5kRnVuY3Rpb25zW2JvdW5kQWN0aW9uXSk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfc3RvcFJlbmRlcmluZ1wiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ib3VuZEZ1bmN0aW9ucyA9IHt9O1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21vdmVVcCgpIHtcbiAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55ICs9IHRoaXMub3B0aW9ucy5rZXlib2FyZC5zcGVlZC55O1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21vdmVEb3duKCkge1xuICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnkgLT0gdGhpcy5vcHRpb25zLmtleWJvYXJkLnNwZWVkLnk7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbW92ZUxlZnQoKSB7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueCArPSB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuc3BlZWQueDtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlUmlnaHQoKSB7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueCAtPSB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuc3BlZWQueDtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF96b29tSW4oKSB7XG4gICAgY29uc3Qgc2NhbGVPbGQgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICBjb25zdCBzY2FsZSA9IHRoaXMuYm9keS52aWV3LnNjYWxlICogKDEgKyB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuc3BlZWQuem9vbSk7XG4gICAgY29uc3QgdHJhbnNsYXRpb24gPSB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbjtcbiAgICBjb25zdCBzY2FsZUZyYWMgPSBzY2FsZSAvIHNjYWxlT2xkO1xuICAgIGNvbnN0IHR4ID1cbiAgICAgICgxIC0gc2NhbGVGcmFjKSAqIHRoaXMuY2FudmFzLmNhbnZhc1ZpZXdDZW50ZXIueCArXG4gICAgICB0cmFuc2xhdGlvbi54ICogc2NhbGVGcmFjO1xuICAgIGNvbnN0IHR5ID1cbiAgICAgICgxIC0gc2NhbGVGcmFjKSAqIHRoaXMuY2FudmFzLmNhbnZhc1ZpZXdDZW50ZXIueSArXG4gICAgICB0cmFuc2xhdGlvbi55ICogc2NhbGVGcmFjO1xuXG4gICAgdGhpcy5ib2R5LnZpZXcuc2NhbGUgPSBzY2FsZTtcbiAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHsgeDogdHgsIHk6IHR5IH07XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInpvb21cIiwge1xuICAgICAgZGlyZWN0aW9uOiBcIitcIixcbiAgICAgIHNjYWxlOiB0aGlzLmJvZHkudmlldy5zY2FsZSxcbiAgICAgIHBvaW50ZXI6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF96b29tT3V0KCkge1xuICAgIGNvbnN0IHNjYWxlT2xkID0gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgY29uc3Qgc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZSAvICgxICsgdGhpcy5vcHRpb25zLmtleWJvYXJkLnNwZWVkLnpvb20pO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb247XG4gICAgY29uc3Qgc2NhbGVGcmFjID0gc2NhbGUgLyBzY2FsZU9sZDtcbiAgICBjb25zdCB0eCA9XG4gICAgICAoMSAtIHNjYWxlRnJhYykgKiB0aGlzLmNhbnZhcy5jYW52YXNWaWV3Q2VudGVyLnggK1xuICAgICAgdHJhbnNsYXRpb24ueCAqIHNjYWxlRnJhYztcbiAgICBjb25zdCB0eSA9XG4gICAgICAoMSAtIHNjYWxlRnJhYykgKiB0aGlzLmNhbnZhcy5jYW52YXNWaWV3Q2VudGVyLnkgK1xuICAgICAgdHJhbnNsYXRpb24ueSAqIHNjYWxlRnJhYztcblxuICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gc2NhbGU7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7IHg6IHR4LCB5OiB0eSB9O1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJ6b29tXCIsIHtcbiAgICAgIGRpcmVjdGlvbjogXCItXCIsXG4gICAgICBzY2FsZTogdGhpcy5ib2R5LnZpZXcuc2NhbGUsXG4gICAgICBwb2ludGVyOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGJpbmQgYWxsIGtleXMgdXNpbmcga2V5Y2hhcm0uXG4gICAqL1xuICBjb25maWd1cmVLZXlib2FyZEJpbmRpbmdzKCkge1xuICAgIGlmICh0aGlzLmtleWNoYXJtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMua2V5Y2hhcm0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMua2V5Ym9hcmQuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5rZXlib2FyZC5iaW5kVG9XaW5kb3cgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5rZXljaGFybSA9IGtleWNoYXJtKHsgY29udGFpbmVyOiB3aW5kb3csIHByZXZlbnREZWZhdWx0OiB0cnVlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5rZXljaGFybSA9IGtleWNoYXJtKHtcbiAgICAgICAgICBjb250YWluZXI6IHRoaXMuY2FudmFzLmZyYW1lLFxuICAgICAgICAgIHByZXZlbnREZWZhdWx0OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5rZXljaGFybS5yZXNldCgpO1xuXG4gICAgICBpZiAodGhpcy5hY3RpdmF0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwidXBcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl9tb3ZlVXBcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJkb3duXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfbW92ZURvd25cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJsZWZ0XCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfbW92ZUxlZnRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJyaWdodFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX21vdmVSaWdodFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIj1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJudW0rXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbUluXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibnVtLVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21PdXRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCItXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIltcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiXVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21JblwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcInBhZ2V1cFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21JblwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcInBhZ2Vkb3duXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwidXBcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfbW92ZVVwXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcImRvd25cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfbW92ZURvd25cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibGVmdFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl9tb3ZlTGVmdFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJyaWdodFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl9tb3ZlUmlnaHRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiPVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibnVtK1wiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibnVtLVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIi1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJbXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRGcm9tUmVkcmF3KFwiX3pvb21PdXRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiXVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwicGFnZXVwXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRGcm9tUmVkcmF3KFwiX3pvb21JblwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJwYWdlZG93blwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb25IYW5kbGVyO1xuIiwgImltcG9ydCB7XG4gIFBvcHVwLFxuICBnZXRBYnNvbHV0ZUxlZnQsXG4gIGdldEFic29sdXRlVG9wLFxuICBtZXJnZU9wdGlvbnMsXG4gIHBhcnNlQ29sb3IsXG4gIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsXG59IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCBOYXZpZ2F0aW9uSGFuZGxlciBmcm9tIFwiLi9jb21wb25lbnRzL05hdmlnYXRpb25IYW5kbGVyXCI7XG5cbi8qKlxuICogSGFuZGxlciBmb3IgaW50ZXJhY3Rpb25zXG4gKi9cbmNsYXNzIEludGVyYWN0aW9uSGFuZGxlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gICAqIEBwYXJhbSB7U2VsZWN0aW9uSGFuZGxlcn0gc2VsZWN0aW9uSGFuZGxlclxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzLCBzZWxlY3Rpb25IYW5kbGVyKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBzZWxlY3Rpb25IYW5kbGVyO1xuICAgIHRoaXMubmF2aWdhdGlvbkhhbmRsZXIgPSBuZXcgTmF2aWdhdGlvbkhhbmRsZXIoYm9keSwgY2FudmFzKTtcblxuICAgIC8vIGJpbmQgdGhlIGV2ZW50cyBmcm9tIGhhbW1lciB0byBmdW5jdGlvbnMgaW4gdGhpcyBvYmplY3RcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25UYXAgPSB0aGlzLm9uVGFwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uVG91Y2ggPSB0aGlzLm9uVG91Y2guYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Eb3VibGVUYXAgPSB0aGlzLm9uRG91YmxlVGFwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uSG9sZCA9IHRoaXMub25Ib2xkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uRHJhZ1N0YXJ0ID0gdGhpcy5vbkRyYWdTdGFydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWcgPSB0aGlzLm9uRHJhZy5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWdFbmQgPSB0aGlzLm9uRHJhZ0VuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbk1vdXNlV2hlZWwgPSB0aGlzLm9uTW91c2VXaGVlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblBpbmNoID0gdGhpcy5vblBpbmNoLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblJlbGVhc2UgPSB0aGlzLm9uUmVsZWFzZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkNvbnRleHQgPSB0aGlzLm9uQ29udGV4dC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy50b3VjaFRpbWUgPSAwO1xuICAgIHRoaXMuZHJhZyA9IHt9O1xuICAgIHRoaXMucGluY2ggPSB7fTtcbiAgICB0aGlzLnBvcHVwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucG9wdXBPYmogPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wb3B1cFRpbWVyID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyID0gdGhpcy5nZXRQb2ludGVyLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgZHJhZ05vZGVzOiB0cnVlLFxuICAgICAgZHJhZ1ZpZXc6IHRydWUsXG4gICAgICBob3ZlcjogZmFsc2UsXG4gICAgICBrZXlib2FyZDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgc3BlZWQ6IHsgeDogMTAsIHk6IDEwLCB6b29tOiAwLjAyIH0sXG4gICAgICAgIGJpbmRUb1dpbmRvdzogdHJ1ZSxcbiAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIG5hdmlnYXRpb25CdXR0b25zOiBmYWxzZSxcbiAgICAgIHRvb2x0aXBEZWxheTogMzAwLFxuICAgICAgem9vbVZpZXc6IHRydWUsXG4gICAgICB6b29tU3BlZWQ6IDEsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmJpbmRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGV2ZW50IGxpc3RlbmVyc1xuICAgKi9cbiAgYmluZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cFRpbWVyKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXI7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGV4dGVuZCBhbGwgYnV0IHRoZSB2YWx1ZXMgaW4gZmllbGRzXG4gICAgICBjb25zdCBmaWVsZHMgPSBbXG4gICAgICAgIFwiaGlkZUVkZ2VzT25EcmFnXCIsXG4gICAgICAgIFwiaGlkZUVkZ2VzT25ab29tXCIsXG4gICAgICAgIFwiaGlkZU5vZGVzT25EcmFnXCIsXG4gICAgICAgIFwia2V5Ym9hcmRcIixcbiAgICAgICAgXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBcInNlbGVjdGFibGVcIixcbiAgICAgICAgXCJzZWxlY3RDb25uZWN0ZWRFZGdlc1wiLFxuICAgICAgXTtcbiAgICAgIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQoZmllbGRzLCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBtZXJnZSB0aGUga2V5Ym9hcmQgb3B0aW9ucyBpbi5cbiAgICAgIG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG9wdGlvbnMsIFwia2V5Ym9hcmRcIik7XG5cbiAgICAgIGlmIChvcHRpb25zLnRvb2x0aXApIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMudG9vbHRpcCwgb3B0aW9ucy50b29sdGlwKTtcbiAgICAgICAgaWYgKG9wdGlvbnMudG9vbHRpcC5jb2xvcikge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy50b29sdGlwLmNvbG9yID0gcGFyc2VDb2xvcihvcHRpb25zLnRvb2x0aXAuY29sb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5uYXZpZ2F0aW9uSGFuZGxlci5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwb2ludGVyIGxvY2F0aW9uIGZyb20gYSB0b3VjaCBsb2NhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHRvdWNoXG4gICAqIEByZXR1cm5zIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRQb2ludGVyKHRvdWNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRvdWNoLnggLSBnZXRBYnNvbHV0ZUxlZnQodGhpcy5jYW52YXMuZnJhbWUuY2FudmFzKSxcbiAgICAgIHk6IHRvdWNoLnkgLSBnZXRBYnNvbHV0ZVRvcCh0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogT24gc3RhcnQgb2YgYSB0b3VjaCBnZXN0dXJlLCBzdG9yZSB0aGUgcG9pbnRlclxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uVG91Y2goZXZlbnQpIHtcbiAgICBpZiAobmV3IERhdGUoKS52YWx1ZU9mKCkgLSB0aGlzLnRvdWNoVGltZSA+IDUwKSB7XG4gICAgICB0aGlzLmRyYWcucG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgICAgdGhpcy5kcmFnLnBpbmNoZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMucGluY2guc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIC8vIHRvIGF2b2lkIGRvdWJsZSBmaXJlaW5nIG9mIHRoaXMgZXZlbnQgYmVjYXVzZSB3ZSBoYXZlIHR3byBoYW1tZXIgaW5zdGFuY2VzLiAob24gY2FudmFzIGFuZCBvbiBmcmFtZSlcbiAgICAgIHRoaXMudG91Y2hUaW1lID0gbmV3IERhdGUoKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSB0YXAvY2xpY2sgZXZlbnQ6IHNlbGVjdC91bnNlbGVjdCBhIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uVGFwKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIGNvbnN0IG11bHRpc2VsZWN0ID1cbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5vcHRpb25zLm11bHRpc2VsZWN0ICYmXG4gICAgICAoZXZlbnQuY2hhbmdlZFBvaW50ZXJzWzBdLmN0cmxLZXkgfHwgZXZlbnQuY2hhbmdlZFBvaW50ZXJzWzBdLm1ldGFLZXkpO1xuXG4gICAgdGhpcy5jaGVja1NlbGVjdGlvbkNoYW5nZXMocG9pbnRlciwgbXVsdGlzZWxlY3QpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmNvbW1pdEFuZEVtaXQocG9pbnRlciwgZXZlbnQpO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJjbGlja1wiLCBldmVudCwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIGRvdWJsZXRhcCBldmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Eb3VibGVUYXAoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcImRvdWJsZUNsaWNrXCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBoYW5kbGUgbG9uZyB0YXAgZXZlbnQ6IG11bHRpIHNlbGVjdCBub2Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Ib2xkKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIGNvbnN0IG11bHRpc2VsZWN0ID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLm9wdGlvbnMubXVsdGlzZWxlY3Q7XG5cbiAgICB0aGlzLmNoZWNrU2VsZWN0aW9uQ2hhbmdlcyhwb2ludGVyLCBtdWx0aXNlbGVjdCk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuY29tbWl0QW5kRW1pdChwb2ludGVyLCBldmVudCk7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcImNsaWNrXCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwiaG9sZFwiLCBldmVudCwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSByZWxlYXNlIG9mIHRoZSBzY3JlZW5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uUmVsZWFzZShldmVudCkge1xuICAgIGlmIChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAtIHRoaXMudG91Y2hUaW1lID4gMTApIHtcbiAgICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJyZWxlYXNlXCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgICAgIC8vIHRvIGF2b2lkIGRvdWJsZSBmaXJlaW5nIG9mIHRoaXMgZXZlbnQgYmVjYXVzZSB3ZSBoYXZlIHR3byBoYW1tZXIgaW5zdGFuY2VzLiAob24gY2FudmFzIGFuZCBvbiBmcmFtZSlcbiAgICAgIHRoaXMudG91Y2hUaW1lID0gbmV3IERhdGUoKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqL1xuICBvbkNvbnRleHQoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9KTtcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwib25jb250ZXh0XCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgYW5kIGRlc2VsZWN0IG5vZGVzIGRlcGVuZGluZyBjdXJyZW50IHNlbGVjdGlvbiBjaGFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGQ9ZmFsc2VdXG4gICAqL1xuICBjaGVja1NlbGVjdGlvbkNoYW5nZXMocG9pbnRlciwgYWRkID0gZmFsc2UpIHtcbiAgICBpZiAoYWRkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0QWRkaXRpb25hbE9uUG9pbnQocG9pbnRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5zZWxlY3RPblBvaW50KHBvaW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIG5vZGUgYW5kIGVkZ2UgaWQncyBmcm9tIHRoZSBmaXJzdCBzZXQgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgc2Vjb25kIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHt7bm9kZXM6IEFycmF5LjxOb2RlPiwgZWRnZXM6IEFycmF5Ljx2aXMuRWRnZT59fSBmaXJzdFNldFxuICAgKiBAcGFyYW0ge3tub2RlczogQXJyYXkuPE5vZGU+LCBlZGdlczogQXJyYXkuPHZpcy5FZGdlPn19IHNlY29uZFNldFxuICAgKiBAcmV0dXJucyB7e25vZGVzOiBBcnJheS48Tm9kZT4sIGVkZ2VzOiBBcnJheS48dmlzLkVkZ2U+fX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZXRlcm1pbmVEaWZmZXJlbmNlKGZpcnN0U2V0LCBzZWNvbmRTZXQpIHtcbiAgICBjb25zdCBhcnJheURpZmYgPSBmdW5jdGlvbiAoZmlyc3RBcnIsIHNlY29uZEFycikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlyc3RBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmaXJzdEFycltpXTtcbiAgICAgICAgaWYgKHNlY29uZEFyci5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5vZGVzOiBhcnJheURpZmYoZmlyc3RTZXQubm9kZXMsIHNlY29uZFNldC5ub2RlcyksXG4gICAgICBlZGdlczogYXJyYXlEaWZmKGZpcnN0U2V0LmVkZ2VzLCBzZWNvbmRTZXQuZWRnZXMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgb25EcmFnU3RhcnQuXG4gICAqIEl0IGlzIHNlcGFyYXRlZCBvdXQgYmVjYXVzZSB3ZSBjYW4gdGhlbiBvdmVybG9hZCBpdCBmb3IgdGhlIGRhdGFtYW5pcHVsYXRpb24gc3lzdGVtLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25EcmFnU3RhcnQoZXZlbnQpIHtcbiAgICAvLyBpZiBhbHJlYWR5IGRyYWdnaW5nLCBkbyBub3Qgc3RhcnRcbiAgICAvLyB0aGlzIGNhbiBoYXBwZW4gb24gdG91Y2ggc2NyZWVucyB3aXRoIG11bHRpcGxlIGZpbmdlcnNcbiAgICBpZiAodGhpcy5kcmFnLmRyYWdnaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9pbiBjYXNlIHRoZSB0b3VjaCBldmVudCB3YXMgdHJpZ2dlcmVkIG9uIGFuIGV4dGVybmFsIGRpdiwgZG8gdGhlIGluaXRpYWwgdG91Y2ggbm93LlxuICAgIGlmICh0aGlzLmRyYWcucG9pbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2goZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIG5vdGU6IGRyYWcucG9pbnRlciBpcyBzZXQgaW4gb25Ub3VjaCB0byBnZXQgdGhlIGluaXRpYWwgdG91Y2ggbG9jYXRpb25cbiAgICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldE5vZGVBdCh0aGlzLmRyYWcucG9pbnRlcik7XG5cbiAgICB0aGlzLmRyYWcuZHJhZ2dpbmcgPSB0cnVlO1xuICAgIHRoaXMuZHJhZy5zZWxlY3Rpb24gPSBbXTtcbiAgICB0aGlzLmRyYWcudHJhbnNsYXRpb24gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbik7IC8vIGNvcHkgdGhlIG9iamVjdFxuICAgIHRoaXMuZHJhZy5ub2RlSWQgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZXZlbnQuc3JjRXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3guc2hvdyA9IHRydWU7XG4gICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG5cbiAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQgPSB7XG4gICAgICAgIHg6IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCksXG4gICAgICAgIHk6IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueSksXG4gICAgICB9O1xuICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5lbmQgPSB7XG4gICAgICAgIHg6IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCksXG4gICAgICAgIHk6IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueSksXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobm9kZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMub3B0aW9ucy5kcmFnTm9kZXMgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZHJhZy5ub2RlSWQgPSBub2RlLmlkO1xuICAgICAgLy8gc2VsZWN0IHRoZSBjbGlja2VkIG5vZGUgaWYgbm90IHlldCBzZWxlY3RlZFxuICAgICAgaWYgKG5vZGUuaXNTZWxlY3RlZCgpID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2V0U2VsZWN0aW9uKHsgbm9kZXM6IFtub2RlLmlkXSB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gYWZ0ZXIgc2VsZWN0IHRvIGNvbnRhaW4gdGhlIG5vZGVcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgIFwiZHJhZ1N0YXJ0XCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0aGlzLmRyYWcucG9pbnRlclxuICAgICAgKTtcblxuICAgICAgLy8gY3JlYXRlIGFuIGFycmF5IHdpdGggdGhlIHNlbGVjdGVkIG5vZGVzIGFuZCB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbiBhbmQgc3RhdHVzXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkTm9kZXMoKSkge1xuICAgICAgICBjb25zdCBzID0ge1xuICAgICAgICAgIGlkOiBub2RlLmlkLFxuICAgICAgICAgIG5vZGU6IG5vZGUsXG5cbiAgICAgICAgICAvLyBzdG9yZSBvcmlnaW5hbCB4LCB5LCB4Rml4ZWQgYW5kIHlGaXhlZCwgbWFrZSB0aGUgbm9kZSB0ZW1wb3JhcmlseSBGaXhlZFxuICAgICAgICAgIHg6IG5vZGUueCxcbiAgICAgICAgICB5OiBub2RlLnksXG4gICAgICAgICAgeEZpeGVkOiBub2RlLm9wdGlvbnMuZml4ZWQueCxcbiAgICAgICAgICB5Rml4ZWQ6IG5vZGUub3B0aW9ucy5maXhlZC55LFxuICAgICAgICB9O1xuXG4gICAgICAgIG5vZGUub3B0aW9ucy5maXhlZC54ID0gdHJ1ZTtcbiAgICAgICAgbm9kZS5vcHRpb25zLmZpeGVkLnkgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuZHJhZy5zZWxlY3Rpb24ucHVzaChzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbGJhY2sgaWYgbm8gbm9kZSBpcyBzZWxlY3RlZCBhbmQgdGh1cyB0aGUgdmlldyBpcyBkcmFnZ2VkLlxuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgXCJkcmFnU3RhcnRcIixcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHRoaXMuZHJhZy5wb2ludGVyLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSBkcmFnIGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvbkRyYWcoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5kcmFnLnBpbmNoZWQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdGhlIGZvY3VzIG9uIG5vZGUgaWYgaXQgaXMgZm9jdXNzZWQgb24gYnkgdGhlIGZvY3VzT25Ob2RlXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInVubG9ja05vZGVcIik7XG5cbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG5cbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmRyYWcuc2VsZWN0aW9uO1xuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLmxlbmd0aCAmJiB0aGlzLm9wdGlvbnMuZHJhZ05vZGVzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwiZHJhZ2dpbmdcIiwgZXZlbnQsIHBvaW50ZXIpO1xuXG4gICAgICAvLyBjYWxjdWxhdGUgZGVsdGEncyBhbmQgbmV3IGxvY2F0aW9uXG4gICAgICBjb25zdCBkZWx0YVggPSBwb2ludGVyLnggLSB0aGlzLmRyYWcucG9pbnRlci54O1xuICAgICAgY29uc3QgZGVsdGFZID0gcG9pbnRlci55IC0gdGhpcy5kcmFnLnBvaW50ZXIueTtcblxuICAgICAgLy8gdXBkYXRlIHBvc2l0aW9uIG9mIGFsbCBzZWxlY3RlZCBub2Rlc1xuICAgICAgc2VsZWN0aW9uLmZvckVhY2goKHNlbGVjdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gc2VsZWN0aW9uLm5vZGU7XG4gICAgICAgIC8vIG9ubHkgbW92ZSB0aGUgbm9kZSBpZiBpdCB3YXMgbm90IGZpeGVkIGluaXRpYWxseVxuICAgICAgICBpZiAoc2VsZWN0aW9uLnhGaXhlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBub2RlLnggPSB0aGlzLmNhbnZhcy5fWGNvbnZlcnRET010b0NhbnZhcyhcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLl9YY29udmVydENhbnZhc1RvRE9NKHNlbGVjdGlvbi54KSArIGRlbHRhWFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb25seSBtb3ZlIHRoZSBub2RlIGlmIGl0IHdhcyBub3QgZml4ZWQgaW5pdGlhbGx5XG4gICAgICAgIGlmIChzZWxlY3Rpb24ueUZpeGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIG5vZGUueSA9IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKFxuICAgICAgICAgICAgdGhpcy5jYW52YXMuX1ljb252ZXJ0Q2FudmFzVG9ET00oc2VsZWN0aW9uLnkpICsgZGVsdGFZXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHN0YXJ0IHRoZSBzaW11bGF0aW9uIG9mIHRoZSBwaHlzaWNzXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwic3RhcnRTaW11bGF0aW9uXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjcmVhdGUgc2VsZWN0aW9uIGJveFxuICAgICAgaWYgKGV2ZW50LnNyY0V2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgICAgXCJkcmFnZ2luZ1wiLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHBvaW50ZXIsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBpZiB0aGUgZHJhZyB3YXMgbm90IHN0YXJ0ZWQgcHJvcGVybHkgYmVjYXVzZSB0aGUgY2xpY2sgc3RhcnRlZCBvdXRzaWRlIHRoZSBuZXR3b3JrIGRpdiwgc3RhcnQgaXQgbm93LlxuICAgICAgICBpZiAodGhpcy5kcmFnLnBvaW50ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMub25EcmFnU3RhcnQoZXZlbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uZW5kID0ge1xuICAgICAgICAgIHg6IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCksXG4gICAgICAgICAgeTogdGhpcy5jYW52YXMuX1ljb252ZXJ0RE9NdG9DYW52YXMocG9pbnRlci55KSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBtb3ZlIHRoZSBuZXR3b3JrXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRyYWdWaWV3ID09PSB0cnVlICYmICFldmVudC5zcmNFdmVudC5zaGlmdEtleSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICAgIFwiZHJhZ2dpbmdcIixcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBwb2ludGVyLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaWYgdGhlIGRyYWcgd2FzIG5vdCBzdGFydGVkIHByb3Blcmx5IGJlY2F1c2UgdGhlIGNsaWNrIHN0YXJ0ZWQgb3V0c2lkZSB0aGUgbmV0d29yayBkaXYsIHN0YXJ0IGl0IG5vdy5cbiAgICAgICAgaWYgKHRoaXMuZHJhZy5wb2ludGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9uRHJhZ1N0YXJ0KGV2ZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWZmWCA9IHBvaW50ZXIueCAtIHRoaXMuZHJhZy5wb2ludGVyLng7XG4gICAgICAgIGNvbnN0IGRpZmZZID0gcG9pbnRlci55IC0gdGhpcy5kcmFnLnBvaW50ZXIueTtcblxuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHtcbiAgICAgICAgICB4OiB0aGlzLmRyYWcudHJhbnNsYXRpb24ueCArIGRpZmZYLFxuICAgICAgICAgIHk6IHRoaXMuZHJhZy50cmFuc2xhdGlvbi55ICsgZGlmZlksXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIGRyYWcgc3RhcnQgZXZlbnRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uRHJhZ0VuZChldmVudCkge1xuICAgIHRoaXMuZHJhZy5kcmFnZ2luZyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuYm9keS5zZWxlY3Rpb25Cb3guc2hvdykge1xuICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5zaG93ID0gZmFsc2U7XG4gICAgICBjb25zdCBzZWxlY3Rpb25Cb3hQb3NpdGlvbiA9IHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb247XG4gICAgICBjb25zdCBzZWxlY3Rpb25Cb3hQb3NpdGlvbk1pbk1heCA9IHtcbiAgICAgICAgbWluWDogTWF0aC5taW4oXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uc3RhcnQueCxcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5lbmQueFxuICAgICAgICApLFxuICAgICAgICBtaW5ZOiBNYXRoLm1pbihcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5zdGFydC55LFxuICAgICAgICAgIHNlbGVjdGlvbkJveFBvc2l0aW9uLmVuZC55XG4gICAgICAgICksXG4gICAgICAgIG1heFg6IE1hdGgubWF4KFxuICAgICAgICAgIHNlbGVjdGlvbkJveFBvc2l0aW9uLnN0YXJ0LngsXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uZW5kLnhcbiAgICAgICAgKSxcbiAgICAgICAgbWF4WTogTWF0aC5tYXgoXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uc3RhcnQueSxcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5lbmQueVxuICAgICAgICApLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdG9CZVNlbGVjdGVkTm9kZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXMuZmlsdGVyKChub2RlSWQpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG5vZGUueCA+PSBzZWxlY3Rpb25Cb3hQb3NpdGlvbk1pbk1heC5taW5YICYmXG4gICAgICAgICAgbm9kZS54IDw9IHNlbGVjdGlvbkJveFBvc2l0aW9uTWluTWF4Lm1heFggJiZcbiAgICAgICAgICBub2RlLnkgPj0gc2VsZWN0aW9uQm94UG9zaXRpb25NaW5NYXgubWluWSAmJlxuICAgICAgICAgIG5vZGUueSA8PSBzZWxlY3Rpb25Cb3hQb3NpdGlvbk1pbk1heC5tYXhZXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgdG9CZVNlbGVjdGVkTm9kZXMuZm9yRWFjaCgobm9kZUlkKSA9PlxuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0T2JqZWN0KHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmNvbW1pdEFuZEVtaXQocG9pbnRlciwgZXZlbnQpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgXCJkcmFnRW5kXCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmRyYWcuc2VsZWN0aW9uO1xuICAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgIHNlbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgLy8gcmVzdG9yZSBvcmlnaW5hbCB4Rml4ZWQgYW5kIHlGaXhlZFxuICAgICAgICAgIHMubm9kZS5vcHRpb25zLmZpeGVkLnggPSBzLnhGaXhlZDtcbiAgICAgICAgICBzLm5vZGUub3B0aW9ucy5maXhlZC55ID0gcy55Rml4ZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICAgIFwiZHJhZ0VuZFwiLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICAgIFwiZHJhZ0VuZFwiLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHBpbmNoIGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25QaW5jaChldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcblxuICAgIHRoaXMuZHJhZy5waW5jaGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5waW5jaFtcInNjYWxlXCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGluY2guc2NhbGUgPSAxO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGVuYWJsZWQgbW92aW5nIHdoaWxlIHBpbmNoaW5nP1xuICAgIGNvbnN0IHNjYWxlID0gdGhpcy5waW5jaC5zY2FsZSAqIGV2ZW50LnNjYWxlO1xuICAgIHRoaXMuem9vbShzY2FsZSwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogWm9vbSB0aGUgbmV0d29yayBpbiBvciBvdXRcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlIGEgbnVtYmVyIGFyb3VuZCAxLCBhbmQgYmV0d2VlbiAwLjAxIGFuZCAxMFxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvaW50ZXIgICAgUG9zaXRpb24gb24gc2NyZWVuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB6b29tKHNjYWxlLCBwb2ludGVyKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy56b29tVmlldyA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3Qgc2NhbGVPbGQgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIGlmIChzY2FsZSA8IDAuMDAwMDEpIHtcbiAgICAgICAgc2NhbGUgPSAwLjAwMDAxO1xuICAgICAgfVxuICAgICAgaWYgKHNjYWxlID4gMTApIHtcbiAgICAgICAgc2NhbGUgPSAxMDtcbiAgICAgIH1cblxuICAgICAgbGV0IHByZVNjYWxlRHJhZ1BvaW50ZXIgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5kcmFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZy5kcmFnZ2luZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHByZVNjYWxlRHJhZ1BvaW50ZXIgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyh0aGlzLmRyYWcucG9pbnRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vICsgdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCAvIDJcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb247XG5cbiAgICAgIGNvbnN0IHNjYWxlRnJhYyA9IHNjYWxlIC8gc2NhbGVPbGQ7XG4gICAgICBjb25zdCB0eCA9ICgxIC0gc2NhbGVGcmFjKSAqIHBvaW50ZXIueCArIHRyYW5zbGF0aW9uLnggKiBzY2FsZUZyYWM7XG4gICAgICBjb25zdCB0eSA9ICgxIC0gc2NhbGVGcmFjKSAqIHBvaW50ZXIueSArIHRyYW5zbGF0aW9uLnkgKiBzY2FsZUZyYWM7XG5cbiAgICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gc2NhbGU7XG4gICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHsgeDogdHgsIHk6IHR5IH07XG5cbiAgICAgIGlmIChwcmVTY2FsZURyYWdQb2ludGVyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBwb3N0U2NhbGVEcmFnUG9pbnRlciA9XG4gICAgICAgICAgdGhpcy5jYW52YXMuY2FudmFzVG9ET00ocHJlU2NhbGVEcmFnUG9pbnRlcik7XG4gICAgICAgIHRoaXMuZHJhZy5wb2ludGVyLnggPSBwb3N0U2NhbGVEcmFnUG9pbnRlci54O1xuICAgICAgICB0aGlzLmRyYWcucG9pbnRlci55ID0gcG9zdFNjYWxlRHJhZ1BvaW50ZXIueTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuXG4gICAgICBpZiAoc2NhbGVPbGQgPCBzY2FsZSkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiem9vbVwiLCB7XG4gICAgICAgICAgZGlyZWN0aW9uOiBcIitcIixcbiAgICAgICAgICBzY2FsZTogdGhpcy5ib2R5LnZpZXcuc2NhbGUsXG4gICAgICAgICAgcG9pbnRlcjogcG9pbnRlcixcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiem9vbVwiLCB7XG4gICAgICAgICAgZGlyZWN0aW9uOiBcIi1cIixcbiAgICAgICAgICBzY2FsZTogdGhpcy5ib2R5LnZpZXcuc2NhbGUsXG4gICAgICAgICAgcG9pbnRlcjogcG9pbnRlcixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGhhbmRsZXIgZm9yIG1vdXNlIHdoZWVsIGV2ZW50LCB1c2VkIHRvIHpvb20gdGhlIHRpbWVsaW5lXG4gICAqIFNlZSBodHRwOi8vYWRvbWFzLm9yZy9qYXZhc2NyaXB0LW1vdXNlLXdoZWVsL1xuICAgKiAgICAgaHR0cHM6Ly9naXRodWIuY29tL0VpZ2h0TWVkaWEvaGFtbWVyLmpzL2lzc3Vlcy8yNTZcbiAgICpcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSAgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uTW91c2VXaGVlbChldmVudCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuem9vbVZpZXcgPT09IHRydWUpIHtcbiAgICAgIC8vIElmIGRlbHRhIGlzIG5vbnplcm8sIGhhbmRsZSBpdC5cbiAgICAgIC8vIEJhc2ljYWxseSwgZGVsdGEgaXMgbm93IHBvc2l0aXZlIGlmIHdoZWVsIHdhcyBzY3JvbGxlZCB1cCxcbiAgICAgIC8vIGFuZCBuZWdhdGl2ZSwgaWYgd2hlZWwgd2FzIHNjcm9sbGVkIGRvd24uXG4gICAgICBpZiAoZXZlbnQuZGVsdGFZICE9PSAwKSB7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgbmV3IHNjYWxlXG4gICAgICAgIGxldCBzY2FsZSA9IHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgICAgICBzY2FsZSAqPVxuICAgICAgICAgIDEgKyAoZXZlbnQuZGVsdGFZIDwgMCA/IDEgOiAtMSkgKiAodGhpcy5vcHRpb25zLnpvb21TcGVlZCAqIDAuMSk7XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBwb2ludGVyIGxvY2F0aW9uXG4gICAgICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoeyB4OiBldmVudC5jbGllbnRYLCB5OiBldmVudC5jbGllbnRZIH0pO1xuXG4gICAgICAgIC8vIGFwcGx5IHRoZSBuZXcgc2NhbGVcbiAgICAgICAgdGhpcy56b29tKHNjYWxlLCBwb2ludGVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGFjdGlvbnMgY2F1c2VkIGJ5IG1vdXNlIHdoZWVsLlxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW91c2UgbW92ZSBoYW5kbGVyIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSB0aXRsZSBtb3ZlcyBvdmVyIGEgbm9kZSB3aXRoIGEgdGl0bGUuXG4gICAqXG4gICAqIEBwYXJhbSAge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Nb3VzZU1vdmUoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9KTtcbiAgICBsZXQgcG9wdXBWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBub2RlIGlzIHN0aWxsIHNlbGVjdGVkXG4gICAgaWYgKHRoaXMucG9wdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMucG9wdXAuaGlkZGVuID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9jaGVja0hpZGVQb3B1cChwb2ludGVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIHBvcHVwIHdhcyBub3QgaGlkZGVuIGFib3ZlXG4gICAgICBpZiAodGhpcy5wb3B1cC5oaWRkZW4gPT09IGZhbHNlKSB7XG4gICAgICAgIHBvcHVwVmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHRoaXMucG9wdXAuc2V0UG9zaXRpb24ocG9pbnRlci54ICsgMywgcG9pbnRlci55IC0gNSk7XG4gICAgICAgIHRoaXMucG9wdXAuc2hvdygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHdlIGJpbmQgdGhlIGtleWJvYXJkIHRvIHRoZSBkaXYsIHdlIGhhdmUgdG8gaGlnaGxpZ2h0IGl0IHRvIHVzZSBpdC4gVGhpcyBoaWdobGlnaHRzIGl0IG9uIG1vdXNlIG92ZXIuXG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLmtleWJvYXJkLmF1dG9Gb2N1cyAmJlxuICAgICAgdGhpcy5vcHRpb25zLmtleWJvYXJkLmJpbmRUb1dpbmRvdyA9PT0gZmFsc2UgJiZcbiAgICAgIHRoaXMub3B0aW9ucy5rZXlib2FyZC5lbmFibGVkID09PSB0cnVlXG4gICAgKSB7XG4gICAgICB0aGlzLmNhbnZhcy5mcmFtZS5mb2N1cygpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IGEgdGltZW91dCB0aGF0IHdpbGwgY2hlY2sgaWYgdGhlIG1vdXNlIGlzIHBvc2l0aW9uZWQgYWJvdmUgYW4gZWxlbWVudFxuICAgIGlmIChwb3B1cFZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICBpZiAodGhpcy5wb3B1cFRpbWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBvcHVwVGltZXIpOyAvLyBzdG9wIGFueSBydW5uaW5nIGNhbGN1bGF0aW9uVGltZXJcbiAgICAgICAgdGhpcy5wb3B1cFRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmRyYWcuZHJhZ2dpbmcpIHtcbiAgICAgICAgdGhpcy5wb3B1cFRpbWVyID0gc2V0VGltZW91dChcbiAgICAgICAgICAoKSA9PiB0aGlzLl9jaGVja1Nob3dQb3B1cChwb2ludGVyKSxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMudG9vbHRpcERlbGF5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRkaW5nIGhvdmVyIGhpZ2hsaWdodHNcbiAgICBpZiAodGhpcy5vcHRpb25zLmhvdmVyID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuaG92ZXJPYmplY3QoZXZlbnQsIHBvaW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBlbGVtZW50IG9uIHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGUgbmV0d29ya1xuICAgKiAoYSBub2RlIG9yIGVkZ2UpLiBJZiBzbywgYW5kIGlmIHRoaXMgZWxlbWVudCBoYXMgYSB0aXRsZSxcbiAgICogc2hvdyBhIHBvcHVwIHdpbmRvdyB3aXRoIGl0cyB0aXRsZS5cbiAgICpcbiAgICogQHBhcmFtIHt7eDpudW1iZXIsIHk6bnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrU2hvd1BvcHVwKHBvaW50ZXIpIHtcbiAgICBjb25zdCB4ID0gdGhpcy5jYW52YXMuX1hjb252ZXJ0RE9NdG9DYW52YXMocG9pbnRlci54KTtcbiAgICBjb25zdCB5ID0gdGhpcy5jYW52YXMuX1ljb252ZXJ0RE9NdG9DYW52YXMocG9pbnRlci55KTtcbiAgICBjb25zdCBwb2ludGVyT2JqID0ge1xuICAgICAgbGVmdDogeCxcbiAgICAgIHRvcDogeSxcbiAgICAgIHJpZ2h0OiB4LFxuICAgICAgYm90dG9tOiB5LFxuICAgIH07XG5cbiAgICBjb25zdCBwcmV2aW91c1BvcHVwT2JqSWQgPVxuICAgICAgdGhpcy5wb3B1cE9iaiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy5wb3B1cE9iai5pZDtcbiAgICBsZXQgbm9kZVVuZGVyQ3Vyc29yID0gZmFsc2U7XG4gICAgbGV0IHBvcHVwVHlwZSA9IFwibm9kZVwiO1xuXG4gICAgLy8gY2hlY2sgaWYgYSBub2RlIGlzIHVuZGVyIHRoZSBjdXJzb3IuXG4gICAgaWYgKHRoaXMucG9wdXBPYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2VhcmNoIHRoZSBub2RlcyBmb3Igb3ZlcmxhcCwgc2VsZWN0IHRoZSB0b3Agb25lIGluIGNhc2Ugb2YgbXVsdGlwbGUgbm9kZXNcbiAgICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZXMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgICAgaWYgKG5vZGUuaXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaikgPT09IHRydWUpIHtcbiAgICAgICAgICBub2RlVW5kZXJDdXJzb3IgPSB0cnVlO1xuICAgICAgICAgIGlmIChub2RlLmdldFRpdGxlKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3ZlcmxhcHBpbmdOb2Rlcy5wdXNoKG5vZGVJbmRpY2VzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG92ZXJsYXBwaW5nTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBpZiB0aGVyZSBhcmUgb3ZlcmxhcHBpbmcgbm9kZXMsIHNlbGVjdCB0aGUgbGFzdCBvbmUsIHRoaXMgaXMgdGhlIG9uZSB3aGljaCBpcyBkcmF3biBvbiB0b3Agb2YgdGhlIG90aGVyc1xuICAgICAgICB0aGlzLnBvcHVwT2JqID0gbm9kZXNbb3ZlcmxhcHBpbmdOb2Rlc1tvdmVybGFwcGluZ05vZGVzLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgLy8gaWYgeW91IGhvdmVyIG92ZXIgYSBub2RlLCB0aGUgdGl0bGUgb2YgdGhlIGVkZ2UgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHNob3duLlxuICAgICAgICBub2RlVW5kZXJDdXJzb3IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBvcHVwT2JqID09PSB1bmRlZmluZWQgJiYgbm9kZVVuZGVyQ3Vyc29yID09PSBmYWxzZSkge1xuICAgICAgLy8gc2VhcmNoIHRoZSBlZGdlcyBmb3Igb3ZlcmxhcFxuICAgICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLmJvZHkuZWRnZUluZGljZXM7XG4gICAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICAgIGxldCBlZGdlO1xuICAgICAgY29uc3Qgb3ZlcmxhcHBpbmdFZGdlcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBlZGdlID0gZWRnZXNbZWRnZUluZGljZXNbaV1dO1xuICAgICAgICBpZiAoZWRnZS5pc092ZXJsYXBwaW5nV2l0aChwb2ludGVyT2JqKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCA9PT0gdHJ1ZSAmJiBlZGdlLmdldFRpdGxlKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3ZlcmxhcHBpbmdFZGdlcy5wdXNoKGVkZ2VJbmRpY2VzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG92ZXJsYXBwaW5nRWRnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnBvcHVwT2JqID0gZWRnZXNbb3ZlcmxhcHBpbmdFZGdlc1tvdmVybGFwcGluZ0VkZ2VzLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgcG9wdXBUeXBlID0gXCJlZGdlXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9wdXBPYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2hvdyBwb3B1cCBtZXNzYWdlIHdpbmRvd1xuICAgICAgaWYgKHRoaXMucG9wdXBPYmouaWQgIT09IHByZXZpb3VzUG9wdXBPYmpJZCkge1xuICAgICAgICBpZiAodGhpcy5wb3B1cCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5wb3B1cCA9IG5ldyBQb3B1cCh0aGlzLmNhbnZhcy5mcmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvcHVwLnBvcHVwVGFyZ2V0VHlwZSA9IHBvcHVwVHlwZTtcbiAgICAgICAgdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkID0gdGhpcy5wb3B1cE9iai5pZDtcblxuICAgICAgICAvLyBhZGp1c3QgYSBzbWFsbCBvZmZzZXQgc3VjaCB0aGF0IHRoZSBtb3VzZSBjdXJzb3IgaXMgbG9jYXRlZCBpbiB0aGVcbiAgICAgICAgLy8gYm90dG9tIGxlZnQgbG9jYXRpb24gb2YgdGhlIHBvcHVwLCBhbmQgeW91IGNhbiBlYXNpbHkgbW92ZSBvdmVyIHRoZVxuICAgICAgICAvLyBwb3B1cCBhcmVhXG4gICAgICAgIHRoaXMucG9wdXAuc2V0UG9zaXRpb24ocG9pbnRlci54ICsgMywgcG9pbnRlci55IC0gNSk7XG4gICAgICAgIHRoaXMucG9wdXAuc2V0VGV4dCh0aGlzLnBvcHVwT2JqLmdldFRpdGxlKCkpO1xuICAgICAgICB0aGlzLnBvcHVwLnNob3coKTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInNob3dQb3B1cFwiLCB0aGlzLnBvcHVwT2JqLmlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucG9wdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnBvcHVwLmhpZGUoKTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImhpZGVQb3B1cFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHBvcHVwIG11c3QgYmUgaGlkZGVuLCB3aGljaCBpcyB0aGUgY2FzZSB3aGVuIHRoZSBtb3VzZSBpcyBub1xuICAgKiBsb25nZXIgaG92ZXJpbmcgb24gdGhlIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge3t4Om51bWJlciwgeTpudW1iZXJ9fSBwb2ludGVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2hlY2tIaWRlUG9wdXAocG9pbnRlcikge1xuICAgIGNvbnN0IHBvaW50ZXJPYmogPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpO1xuXG4gICAgbGV0IHN0aWxsT25PYmogPSBmYWxzZTtcbiAgICBpZiAodGhpcy5wb3B1cC5wb3B1cFRhcmdldFR5cGUgPT09IFwibm9kZVwiKSB7XG4gICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW3RoaXMucG9wdXAucG9wdXBUYXJnZXRJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdGlsbE9uT2JqID1cbiAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkXS5pc092ZXJsYXBwaW5nV2l0aChcbiAgICAgICAgICAgIHBvaW50ZXJPYmpcbiAgICAgICAgICApO1xuXG4gICAgICAgIC8vIGlmIHRoZSBtb3VzZSBpcyBzdGlsbCBvbmUgdGhlIG5vZGUsIHdlIGhhdmUgdG8gY2hlY2sgaWYgaXQgaXMgbm90IGFsc28gb24gb25lIHRoYXQgaXMgZHJhd24gb24gdG9wIG9mIGl0LlxuICAgICAgICAvLyB3ZSBpbml0aWFsbHkgb25seSBjaGVjayBzdGlsbE9uT2JqIGJlY2F1c2UgdGhpcyBpcyBtdWNoIGZhc3Rlci5cbiAgICAgICAgaWYgKHN0aWxsT25PYmogPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBvdmVyTm9kZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXROb2RlQXQocG9pbnRlcik7XG4gICAgICAgICAgc3RpbGxPbk9iaiA9XG4gICAgICAgICAgICBvdmVyTm9kZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgOiBvdmVyTm9kZS5pZCA9PT0gdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0Tm9kZUF0KHBvaW50ZXIpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuYm9keS5lZGdlc1t0aGlzLnBvcHVwLnBvcHVwVGFyZ2V0SWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdGlsbE9uT2JqID1cbiAgICAgICAgICAgIHRoaXMuYm9keS5lZGdlc1t0aGlzLnBvcHVwLnBvcHVwVGFyZ2V0SWRdLmlzT3ZlcmxhcHBpbmdXaXRoKFxuICAgICAgICAgICAgICBwb2ludGVyT2JqXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0aWxsT25PYmogPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnBvcHVwT2JqID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5wb3B1cC5oaWRlKCk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiaGlkZVBvcHVwXCIpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmFjdGlvbkhhbmRsZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYFNldGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LW9iamVjdHNcbmNvbGxlY3Rpb24oJ1NldCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlNldDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIGdldFdlYWtEYXRhID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZ2V0V2Vha0RhdGE7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgQXJyYXlJdGVyYXRpb25Nb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xudmFyIGZpbmQgPSBBcnJheUl0ZXJhdGlvbk1vZHVsZS5maW5kO1xudmFyIGZpbmRJbmRleCA9IEFycmF5SXRlcmF0aW9uTW9kdWxlLmZpbmRJbmRleDtcbnZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xudmFyIGlkID0gMDtcblxuLy8gZmFsbGJhY2sgZm9yIHVuY2F1Z2h0IGZyb3plbiBrZXlzXG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuZnJvemVuIHx8IChzdGF0ZS5mcm96ZW4gPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG5cbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVudHJpZXMgPSBbXTtcbn07XG5cbnZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiAoc3RvcmUsIGtleSkge1xuICByZXR1cm4gZmluZChzdG9yZS5lbnRyaWVzLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuXG5VbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSByZXR1cm4gZW50cnlbMV07XG4gIH0sXG4gIGhhczogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSBlbnRyeVsxXSA9IHZhbHVlO1xuICAgIGVsc2UgdGhpcy5lbnRyaWVzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSxcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXgodGhpcy5lbnRyaWVzLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHNwbGljZSh0aGlzLmVudHJpZXMsIGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGlkOiBpZCsrLFxuICAgICAgICBmcm96ZW46IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgdW5jYXVnaHRGcm96ZW5TdG9yZShzdGF0ZSkuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgZWxzZSBkYXRhW3N0YXRlLmlkXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwge1xuICAgICAgLy8gYHsgV2Vha01hcCwgV2Vha1NldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrRGF0YShrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiBoYXNPd24oZGF0YSwgc3RhdGUuaWQpICYmIGRlbGV0ZSBkYXRhW3N0YXRlLmlkXTtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBXZWFrTWFwLCBXZWFrU2V0IH0ucHJvdG90eXBlLmhhcyhrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWttYXAucHJvdG90eXBlLmhhc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrRGF0YShrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiBoYXNPd24oZGF0YSwgc3RhdGUuaWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgV2Vha01hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5nZXRcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoa2V5KTtcbiAgICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpLmdldChrZXkpO1xuICAgICAgICAgIHJldHVybiBkYXRhID8gZGF0YVtzdGF0ZS5pZF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSA6IHtcbiAgICAgIC8vIGBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgRlJFRVpJTkcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnJlZXppbmcnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uV2VhayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmVuZm9yY2U7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyIGlzRXh0ZW5zaWJsZSA9ICRPYmplY3QuaXNFeHRlbnNpYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2Zyb3plbiAtLSBzYWZlXG52YXIgaXNGcm96ZW4gPSAkT2JqZWN0LmlzRnJvemVuO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc3NlYWxlZCAtLSBzYWZlXG52YXIgaXNTZWFsZWQgPSAkT2JqZWN0LmlzU2VhbGVkO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1mcmVlemUgLS0gc2FmZVxudmFyIGZyZWV6ZSA9ICRPYmplY3QuZnJlZXplO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZWFsIC0tIHNhZmVcbnZhciBzZWFsID0gJE9iamVjdC5zZWFsO1xuXG52YXIgRlJPWkVOID0ge307XG52YXIgU0VBTEVEID0ge307XG52YXIgSVNfSUUxMSA9ICFnbG9iYWwuQWN0aXZlWE9iamVjdCAmJiAnQWN0aXZlWE9iamVjdCcgaW4gZ2xvYmFsO1xudmFyIEludGVybmFsV2Vha01hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbi8vIGBXZWFrTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLWNvbnN0cnVjdG9yXG52YXIgJFdlYWtNYXAgPSBjb2xsZWN0aW9uKCdXZWFrTWFwJywgd3JhcHBlciwgY29sbGVjdGlvbldlYWspO1xudmFyIFdlYWtNYXBQcm90b3R5cGUgPSAkV2Vha01hcC5wcm90b3R5cGU7XG52YXIgbmF0aXZlU2V0ID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5zZXQpO1xuXG4vLyBDaGFrcmEgRWRnZSBidWc6IGFkZGluZyBmcm96ZW4gYXJyYXlzIHRvIFdlYWtNYXAgdW5mcmVlemUgdGhlbVxudmFyIGhhc01TRWRnZUZyZWV6aW5nQnVnID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRlJFRVpJTkcgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBmcm96ZW5BcnJheSA9IGZyZWV6ZShbXSk7XG4gICAgbmF0aXZlU2V0KG5ldyAkV2Vha01hcCgpLCBmcm96ZW5BcnJheSwgMSk7XG4gICAgcmV0dXJuICFpc0Zyb3plbihmcm96ZW5BcnJheSk7XG4gIH0pO1xufTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuLy8gV2UgY2FuJ3QgdXNlIGZlYXR1cmUgZGV0ZWN0aW9uIGJlY2F1c2UgaXQgY3Jhc2ggc29tZSBvbGQgSUUgYnVpbGRzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDg1XG5pZiAoTkFUSVZFX1dFQUtfTUFQKSBpZiAoSVNfSUUxMSkge1xuICBJbnRlcm5hbFdlYWtNYXAgPSBjb2xsZWN0aW9uV2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCAnV2Vha01hcCcsIHRydWUpO1xuICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB2YXIgbmF0aXZlRGVsZXRlID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZVsnZGVsZXRlJ10pO1xuICB2YXIgbmF0aXZlSGFzID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5oYXMpO1xuICB2YXIgbmF0aXZlR2V0ID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5nZXQpO1xuICBkZWZpbmVCdWlsdElucyhXZWFrTWFwUHJvdG90eXBlLCB7XG4gICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmIChpc09iamVjdChrZXkpICYmICFpc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFzdGF0ZS5mcm96ZW4pIHN0YXRlLmZyb3plbiA9IG5ldyBJbnRlcm5hbFdlYWtNYXAoKTtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZURlbGV0ZSh0aGlzLCBrZXkpIHx8IHN0YXRlLmZyb3plblsnZGVsZXRlJ10oa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZURlbGV0ZSh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICBpZiAoaXNPYmplY3Qoa2V5KSAmJiAhaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghc3RhdGUuZnJvemVuKSBzdGF0ZS5mcm96ZW4gPSBuZXcgSW50ZXJuYWxXZWFrTWFwKCk7XG4gICAgICAgIHJldHVybiBuYXRpdmVIYXModGhpcywga2V5KSB8fCBzdGF0ZS5mcm96ZW4uaGFzKGtleSk7XG4gICAgICB9IHJldHVybiBuYXRpdmVIYXModGhpcywga2V5KTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICByZXR1cm4gbmF0aXZlSGFzKHRoaXMsIGtleSkgPyBuYXRpdmVHZXQodGhpcywga2V5KSA6IHN0YXRlLmZyb3plbi5nZXQoa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZUdldCh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICBuYXRpdmVIYXModGhpcywga2V5KSA/IG5hdGl2ZVNldCh0aGlzLCBrZXksIHZhbHVlKSA6IHN0YXRlLmZyb3plbi5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgbmF0aXZlU2V0KHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9KTtcbi8vIENoYWtyYSBFZGdlIGZyb3plbiBrZXlzIGZpeFxufSBlbHNlIGlmIChoYXNNU0VkZ2VGcmVlemluZ0J1ZygpKSB7XG4gIGRlZmluZUJ1aWx0SW5zKFdlYWtNYXBQcm90b3R5cGUsIHtcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgYXJyYXlJbnRlZ3JpdHlMZXZlbDtcbiAgICAgIGlmIChpc0FycmF5KGtleSkpIHtcbiAgICAgICAgaWYgKGlzRnJvemVuKGtleSkpIGFycmF5SW50ZWdyaXR5TGV2ZWwgPSBGUk9aRU47XG4gICAgICAgIGVsc2UgaWYgKGlzU2VhbGVkKGtleSkpIGFycmF5SW50ZWdyaXR5TGV2ZWwgPSBTRUFMRUQ7XG4gICAgICB9XG4gICAgICBuYXRpdmVTZXQodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoYXJyYXlJbnRlZ3JpdHlMZXZlbCA9PT0gRlJPWkVOKSBmcmVlemUoa2V5KTtcbiAgICAgIGlmIChhcnJheUludGVncml0eUxldmVsID09PSBTRUFMRUQpIHNlYWwoa2V5KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLndlYWstbWFwJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5XZWFrTWFwO1xuIiwgImV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0YWJsZSB7XG4gIHNlbGVjdCgpOiB2b2lkO1xuICB1bnNlbGVjdCgpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yQ2hhbmdlczxUPiB7XG4gIGFkZGVkOiBUW107XG4gIGRlbGV0ZWQ6IFRbXTtcbiAgcHJldmlvdXM6IFRbXTtcbiAgY3VycmVudDogVFtdO1xufVxuXG4vKipcbiAqIEBwYXJhbSBwcmV2XG4gKiBAcGFyYW0gbmV4dFxuICovXG5mdW5jdGlvbiBkaWZmU2V0czxUPihwcmV2OiBSZWFkb25seVNldDxUPiwgbmV4dDogUmVhZG9ubHlTZXQ8VD4pOiBTZXQ8VD4ge1xuICBjb25zdCBkaWZmID0gbmV3IFNldDxUPigpO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbmV4dCkge1xuICAgIGlmICghcHJldi5oYXMoaXRlbSkpIHtcbiAgICAgIGRpZmYuYWRkKGl0ZW0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGlmZjtcbn1cblxuY2xhc3MgU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yPFQgZXh0ZW5kcyBTZWxlY3RhYmxlPiB7XG4gICNwcmV2aW91c1NlbGVjdGlvbjogUmVhZG9ubHlTZXQ8VD4gPSBuZXcgU2V0KCk7XG4gICNzZWxlY3Rpb246IFNldDxUPiA9IG5ldyBTZXQoKTtcblxuICBwdWJsaWMgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uLnNpemU7XG4gIH1cblxuICBwdWJsaWMgYWRkKC4uLml0ZW1zOiByZWFkb25seSBUW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIHRoaXMuI3NlbGVjdGlvbi5hZGQoaXRlbSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBkZWxldGUoLi4uaXRlbXM6IHJlYWRvbmx5IFRbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgdGhpcy4jc2VsZWN0aW9uLmRlbGV0ZShpdGVtKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuI3NlbGVjdGlvbi5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGlvbigpOiBUW10ge1xuICAgIHJldHVybiBbLi4udGhpcy4jc2VsZWN0aW9uXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDaGFuZ2VzKCk6IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8VD4ge1xuICAgIHJldHVybiB7XG4gICAgICBhZGRlZDogWy4uLmRpZmZTZXRzKHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uLCB0aGlzLiNzZWxlY3Rpb24pXSxcbiAgICAgIGRlbGV0ZWQ6IFsuLi5kaWZmU2V0cyh0aGlzLiNzZWxlY3Rpb24sIHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uKV0sXG4gICAgICBwcmV2aW91czogWy4uLm5ldyBTZXQ8VD4odGhpcy4jcHJldmlvdXNTZWxlY3Rpb24pXSxcbiAgICAgIGN1cnJlbnQ6IFsuLi5uZXcgU2V0PFQ+KHRoaXMuI3NlbGVjdGlvbildLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY29tbWl0KCk6IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8VD4ge1xuICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmdldENoYW5nZXMoKTtcblxuICAgIHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uID0gdGhpcy4jc2VsZWN0aW9uO1xuICAgIHRoaXMuI3NlbGVjdGlvbiA9IG5ldyBTZXQodGhpcy4jcHJldmlvdXNTZWxlY3Rpb24pO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNoYW5nZXMuYWRkZWQpIHtcbiAgICAgIGl0ZW0uc2VsZWN0KCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaGFuZ2VzLmRlbGV0ZWQpIHtcbiAgICAgIGl0ZW0udW5zZWxlY3QoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlcztcbiAgfVxufVxuXG4vLyBUT0RPOiBUaGVzZSBzaG91bGQgYmUgcmVhbCB0eXBlcyBpbXBvcnRlZCBmcm9tIG5vZGUudHMgYW5kIGVkZ2UudHMgdGhhdCBkb24ndFxuLy8gZXhpc3QgeWV0LlxuaW50ZXJmYWNlIE5vZGUgZXh0ZW5kcyBTZWxlY3RhYmxlIHtcbiAgJDogXCJub2RlXCI7XG59XG5pbnRlcmZhY2UgRWRnZSBleHRlbmRzIFNlbGVjdGFibGUge1xuICAkOiBcImVkZ2VcIjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25BY2N1bXVsYXRvckNvbW1pdFN1bW1hcnkge1xuICBub2RlczogU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yQ2hhbmdlczxOb2RlPjtcbiAgZWRnZXM6IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8RWRnZT47XG59XG5cbmV4cG9ydCB0eXBlIFNlbGVjdGlvbkFjY3VtdWxhdG9yQ29tbWl0SGFuZGxlcjxcbiAgQ29tbWl0QXJncyBleHRlbmRzIHJlYWRvbmx5IGFueVtdXG4+ID0gKHN1bW1hcnk6IFNlbGVjdGlvbkFjY3VtdWxhdG9yQ29tbWl0U3VtbWFyeSwgLi4ucmVzdDogQ29tbWl0QXJncykgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbkFjY3VtdWxhdG9yPENvbW1pdEFyZ3MgZXh0ZW5kcyByZWFkb25seSBhbnlbXT4ge1xuICAjbm9kZXMgPSBuZXcgU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yPE5vZGU+KCk7XG4gICNlZGdlcyA9IG5ldyBTaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3I8RWRnZT4oKTtcblxuICByZWFkb25seSAjY29tbWl0SGFuZGxlcjogU2VsZWN0aW9uQWNjdW11bGF0b3JDb21taXRIYW5kbGVyPENvbW1pdEFyZ3M+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBjb21taXRIYW5kbGVyOiBTZWxlY3Rpb25BY2N1bXVsYXRvckNvbW1pdEhhbmRsZXI8Q29tbWl0QXJncz4gPSAoKTogdm9pZCA9PiB7fVxuICApIHtcbiAgICB0aGlzLiNjb21taXRIYW5kbGVyID0gY29tbWl0SGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2l6ZU5vZGVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI25vZGVzLnNpemU7XG4gIH1cbiAgcHVibGljIGdldCBzaXplRWRnZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jZWRnZXMuc2l6ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROb2RlcygpOiBOb2RlW10ge1xuICAgIHJldHVybiB0aGlzLiNub2Rlcy5nZXRTZWxlY3Rpb24oKTtcbiAgfVxuICBwdWJsaWMgZ2V0RWRnZXMoKTogRWRnZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jZWRnZXMuZ2V0U2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgYWRkTm9kZXMoLi4ubm9kZXM6IHJlYWRvbmx5IE5vZGVbXSk6IHZvaWQge1xuICAgIHRoaXMuI25vZGVzLmFkZCguLi5ub2Rlcyk7XG4gIH1cbiAgcHVibGljIGFkZEVkZ2VzKC4uLmVkZ2VzOiByZWFkb25seSBFZGdlW10pOiB2b2lkIHtcbiAgICB0aGlzLiNlZGdlcy5hZGQoLi4uZWRnZXMpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZU5vZGVzKG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICB0aGlzLiNub2Rlcy5kZWxldGUobm9kZSk7XG4gIH1cbiAgcHVibGljIGRlbGV0ZUVkZ2VzKGVkZ2U6IEVkZ2UpOiB2b2lkIHtcbiAgICB0aGlzLiNlZGdlcy5kZWxldGUoZWRnZSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy4jbm9kZXMuY2xlYXIoKTtcbiAgICB0aGlzLiNlZGdlcy5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGNvbW1pdCguLi5yZXN0OiBDb21taXRBcmdzKTogU2VsZWN0aW9uQWNjdW11bGF0b3JDb21taXRTdW1tYXJ5IHtcbiAgICBjb25zdCBzdW1tYXJ5ID0ge1xuICAgICAgbm9kZXM6IHRoaXMuI25vZGVzLmNvbW1pdCgpLFxuICAgICAgZWRnZXM6IHRoaXMuI2VkZ2VzLmNvbW1pdCgpLFxuICAgIH07XG4gICAgdGhpcy4jY29tbWl0SGFuZGxlcihzdW1tYXJ5LCAuLi5yZXN0KTtcbiAgICByZXR1cm4gc3VtbWFyeTtcbiAgfVxufVxuIiwgImltcG9ydCBOb2RlIGZyb20gXCIuL2NvbXBvbmVudHMvTm9kZVwiO1xuaW1wb3J0IEVkZ2UgZnJvbSBcIi4vY29tcG9uZW50cy9FZGdlXCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25BY2N1bXVsYXRvciB9IGZyb20gXCIuL3NlbGVjdGlvblwiO1xuXG5pbXBvcnQgeyBzZWxlY3RpdmVEZWVwRXh0ZW5kIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIFRoZSBoYW5kbGVyIGZvciBzZWxlY3Rpb25zXG4gKi9cbmNsYXNzIFNlbGVjdGlvbkhhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcbiAgICAvLyBUT0RPOiBDb25zaWRlciBmaXJpbmcgYW4gZXZlbnQgb24gYW55IGNoYW5nZSB0byB0aGUgc2VsZWN0aW9uLCBub3RcbiAgICAvLyBvbmx5IHRob3NlIGNhdXNlZCBieSBjbGlja3MgYW5kIHRhcHMuIEl0IHdvdWxkIGJlIGVhc3kgdG8gaW1wbGVtZW50XG4gICAgLy8gbm93IGFuZCAoYXQgbGVhc3QgdG8gbWUpIGl0IHNlZW1zIGxpa2Ugc29tZXRoaW5nIHRoYXQgY291bGQgYmVcbiAgICAvLyBxdWl0ZSB1c2VmdWwuXG4gICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IgPSBuZXcgU2VsZWN0aW9uQWNjdW11bGF0b3IoKTtcbiAgICB0aGlzLmhvdmVyT2JqID0geyBub2Rlczoge30sIGVkZ2VzOiB7fSB9O1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIG11bHRpc2VsZWN0OiBmYWxzZSxcbiAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICBzZWxlY3RDb25uZWN0ZWRFZGdlczogdHJ1ZSxcbiAgICAgIGhvdmVyQ29ubmVjdGVkRWRnZXM6IHRydWUsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9kYXRhQ2hhbmdlZFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbigpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc11cbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IFtcbiAgICAgICAgXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBcImhvdmVyQ29ubmVjdGVkRWRnZXNcIixcbiAgICAgICAgXCJzZWxlY3RhYmxlXCIsXG4gICAgICAgIFwic2VsZWN0Q29ubmVjdGVkRWRnZXNcIixcbiAgICAgIF07XG4gICAgICBzZWxlY3RpdmVEZWVwRXh0ZW5kKGZpZWxkcywgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlcyB0aGUgc2VsZWN0aW9uIHBhcnQgb2YgdGhlIHRhcDtcbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2VsZWN0T25Qb2ludChwb2ludGVyKSB7XG4gICAgbGV0IHNlbGVjdGVkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlY3RhYmxlID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBvYmogPSB0aGlzLmdldE5vZGVBdChwb2ludGVyKSB8fCB0aGlzLmdldEVkZ2VBdChwb2ludGVyKTtcblxuICAgICAgLy8gdW5zZWxlY3QgYWZ0ZXIgZ2V0dGluZyB0aGUgb2JqZWN0cyBpbiBvcmRlciB0byByZXN0b3JlIHdpZHRoIGFuZCBoZWlnaHQuXG4gICAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XG5cbiAgICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0T2JqZWN0KG9iaik7XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvaW50ZXJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzZWxlY3RBZGRpdGlvbmFsT25Qb2ludChwb2ludGVyKSB7XG4gICAgbGV0IHNlbGVjdGlvbkNoYW5nZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVjdGFibGUgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IG9iaiA9IHRoaXMuZ2V0Tm9kZUF0KHBvaW50ZXIpIHx8IHRoaXMuZ2V0RWRnZUF0KHBvaW50ZXIpO1xuXG4gICAgICBpZiAob2JqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIGlmIChvYmouaXNTZWxlY3RlZCgpID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5kZXNlbGVjdE9iamVjdChvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KG9iaik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3Rpb25DaGFuZ2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgc3RhbmRhcmQgZmllbGRzIGZvciBhbiBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIE9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICogQHJldHVybnMge3t9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXRCYXNlRXZlbnQoZXZlbnQsIHBvaW50ZXIpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0ge307XG5cbiAgICBwcm9wZXJ0aWVzW1wicG9pbnRlclwiXSA9IHtcbiAgICAgIERPTTogeyB4OiBwb2ludGVyLngsIHk6IHBvaW50ZXIueSB9LFxuICAgICAgY2FudmFzOiB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKSxcbiAgICB9O1xuICAgIHByb3BlcnRpZXNbXCJldmVudFwiXSA9IGV2ZW50O1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYW4gZXZlbnQgd2hpY2ggdGhlIHVzZXIgY2FuIGNhdGNoLlxuICAgKlxuICAgKiBUaGlzIGFkZHMgc29tZSBleHRyYSBkYXRhIHRvIHRoZSBldmVudCB3aXRoIHJlc3BlY3QgdG8gY3Vyc29yIHBvc2l0aW9uIGFuZFxuICAgKiBzZWxlY3RlZCBub2RlcyBhbmQgZWRnZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgb2YgZXZlbnQgdG8gc2VuZFxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyICAgICAgICAgICAgT2JqZWN0IHdpdGggdGhlIHggYW5kIHkgc2NyZWVuIGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZVxuICAgKiBAcGFyYW0ge29iamVjdCB8IHVuZGVmaW5lZH0gb2xkU2VsZWN0aW9uICAgICAgICAgICAgIElmIHByZXNlbnQsIHNlbGVjdGlvbiBzdGF0ZSBiZWZvcmUgZXZlbnQgb2NjdXJlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBbZW1wdHlTZWxlY3Rpb249ZmFsc2VdICBJbmRpY2F0ZSBpZiBzZWxlY3Rpb24gZGF0YSBzaG91bGQgYmUgcGFzc2VkXG4gICAqL1xuICBnZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgZXZlbnRUeXBlLFxuICAgIGV2ZW50LFxuICAgIHBvaW50ZXIsXG4gICAgb2xkU2VsZWN0aW9uLFxuICAgIGVtcHR5U2VsZWN0aW9uID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuX2luaXRCYXNlRXZlbnQoZXZlbnQsIHBvaW50ZXIpO1xuXG4gICAgaWYgKGVtcHR5U2VsZWN0aW9uID09PSB0cnVlKSB7XG4gICAgICBwcm9wZXJ0aWVzLm5vZGVzID0gW107XG4gICAgICBwcm9wZXJ0aWVzLmVkZ2VzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRtcCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBwcm9wZXJ0aWVzLm5vZGVzID0gdG1wLm5vZGVzO1xuICAgICAgcHJvcGVydGllcy5lZGdlcyA9IHRtcC5lZGdlcztcbiAgICB9XG5cbiAgICBpZiAob2xkU2VsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb3BlcnRpZXNbXCJwcmV2aW91c1NlbGVjdGlvblwiXSA9IG9sZFNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRUeXBlID09IFwiY2xpY2tcIikge1xuICAgICAgLy8gRm9yIHRoZSB0aW1lIGJlaW5nLCByZXN0cmljdCB0aGlzIGZ1bmN0aW9uYWxpdHkgdG9cbiAgICAgIC8vIGp1c3QgdGhlIGNsaWNrIGV2ZW50LlxuICAgICAgcHJvcGVydGllcy5pdGVtcyA9IHRoaXMuZ2V0Q2xpY2tlZEl0ZW1zKHBvaW50ZXIpO1xuICAgIH1cblxuICAgIGlmIChldmVudC5jb250cm9sRWRnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9wZXJ0aWVzLmNvbnRyb2xFZGdlID0gZXZlbnQuY29udHJvbEVkZ2U7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChldmVudFR5cGUsIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlnaGxpZ2h0RWRnZXM9dGhpcy5vcHRpb25zLnNlbGVjdENvbm5lY3RlZEVkZ2VzXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNlbGVjdE9iamVjdChvYmosIGhpZ2hsaWdodEVkZ2VzID0gdGhpcy5vcHRpb25zLnNlbGVjdENvbm5lY3RlZEVkZ2VzKSB7XG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICBpZiAoaGlnaGxpZ2h0RWRnZXMgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5hZGRFZGdlcyguLi5vYmouZWRnZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmFkZE5vZGVzKG9iaik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5hZGRFZGdlcyhvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqL1xuICBkZXNlbGVjdE9iamVjdChvYmopIHtcbiAgICBpZiAob2JqLmlzU2VsZWN0ZWQoKSA9PT0gdHJ1ZSkge1xuICAgICAgb2JqLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9yZW1vdmVGcm9tU2VsZWN0aW9uKG9iaik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHJpZXZlIGFsbCBub2RlcyBvdmVybGFwcGluZyB3aXRoIGdpdmVuIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0ICBBbiBvYmplY3Qgd2l0aCBwYXJhbWV0ZXJzIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbVxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119ICAgQW4gYXJyYXkgd2l0aCBpZCdzIG9mIHRoZSBvdmVybGFwcGluZyBub2Rlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCkge1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZXMgPSBbXTtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldO1xuICAgICAgaWYgKG5vZGVzW25vZGVJZF0uaXNPdmVybGFwcGluZ1dpdGgob2JqZWN0KSkge1xuICAgICAgICBvdmVybGFwcGluZ05vZGVzLnB1c2gobm9kZUlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG92ZXJsYXBwaW5nTm9kZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcG9zaXRpb24gb2JqZWN0IGluIGNhbnZhc3NwYWNlIGZyb20gYSBzaW5nbGUgcG9pbnQgaW4gc2NyZWVuc3BhY2VcbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEByZXR1cm5zIHt7bGVmdDogbnVtYmVyLCB0b3A6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYm90dG9tOiBudW1iZXJ9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpIHtcbiAgICBjb25zdCBjYW52YXNQb3MgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKTtcbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogY2FudmFzUG9zLnggLSAxLFxuICAgICAgdG9wOiBjYW52YXNQb3MueSArIDEsXG4gICAgICByaWdodDogY2FudmFzUG9zLnggKyAxLFxuICAgICAgYm90dG9tOiBjYW52YXNQb3MueSAtIDEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRvcCBub2RlIGF0IHRoZSBwYXNzZWQgcG9pbnQgKGxpa2UgYSBjbGljaylcbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldHVybk5vZGU9dHJ1ZV1cbiAgICogQHJldHVybnMge05vZGUgfCB1bmRlZmluZWR9IG5vZGVcbiAgICovXG4gIGdldE5vZGVBdChwb2ludGVyLCByZXR1cm5Ob2RlID0gdHJ1ZSkge1xuICAgIC8vIHdlIGZpcnN0IGNoZWNrIGlmIHRoaXMgaXMgYW4gbmF2aWdhdGlvbiBjb250cm9scyBlbGVtZW50XG4gICAgY29uc3QgcG9zaXRpb25PYmplY3QgPSB0aGlzLl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKTtcbiAgICBjb25zdCBvdmVybGFwcGluZ05vZGVzID0gdGhpcy5fZ2V0QWxsTm9kZXNPdmVybGFwcGluZ1dpdGgocG9zaXRpb25PYmplY3QpO1xuICAgIC8vIGlmIHRoZXJlIGFyZSBvdmVybGFwcGluZyBub2Rlcywgc2VsZWN0IHRoZSBsYXN0IG9uZSwgdGhpcyBpcyB0aGVcbiAgICAvLyBvbmUgd2hpY2ggaXMgZHJhd24gb24gdG9wIG9mIHRoZSBvdGhlcnNcbiAgICBpZiAob3ZlcmxhcHBpbmdOb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAocmV0dXJuTm9kZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2R5Lm5vZGVzW292ZXJsYXBwaW5nTm9kZXNbb3ZlcmxhcHBpbmdOb2Rlcy5sZW5ndGggLSAxXV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb3ZlcmxhcHBpbmdOb2Rlc1tvdmVybGFwcGluZ05vZGVzLmxlbmd0aCAtIDFdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXRyaWV2ZSBhbGwgZWRnZXMgb3ZlcmxhcHBpbmcgd2l0aCBnaXZlbiBvYmplY3QsIHNlbGVjdG9yIGlzIGFyb3VuZCBjZW50ZXJcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAgQW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b21cbiAgICogQHBhcmFtIHtudW1iZXJbXX0gb3ZlcmxhcHBpbmdFZGdlcyBBbiBhcnJheSB3aXRoIGlkJ3Mgb2YgdGhlIG92ZXJsYXBwaW5nIG5vZGVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0RWRnZXNPdmVybGFwcGluZ1dpdGgob2JqZWN0LCBvdmVybGFwcGluZ0VkZ2VzKSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkuZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2VJZCA9IHRoaXMuYm9keS5lZGdlSW5kaWNlc1tpXTtcbiAgICAgIGlmIChlZGdlc1tlZGdlSWRdLmlzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCkpIHtcbiAgICAgICAgb3ZlcmxhcHBpbmdFZGdlcy5wdXNoKGVkZ2VJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHJpZXZlIGFsbCBub2RlcyBvdmVybGFwcGluZyB3aXRoIGdpdmVuIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0ICBBbiBvYmplY3Qgd2l0aCBwYXJhbWV0ZXJzIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbVxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119ICAgQW4gYXJyYXkgd2l0aCBpZCdzIG9mIHRoZSBvdmVybGFwcGluZyBub2Rlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEFsbEVkZ2VzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCkge1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nRWRnZXMgPSBbXTtcbiAgICB0aGlzLl9nZXRFZGdlc092ZXJsYXBwaW5nV2l0aChvYmplY3QsIG92ZXJsYXBwaW5nRWRnZXMpO1xuICAgIHJldHVybiBvdmVybGFwcGluZ0VkZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZWRnZXMgbmVhcmVzdCB0byB0aGUgcGFzc2VkIHBvaW50IChsaWtlIGEgY2xpY2spXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXR1cm5FZGdlPXRydWVdXG4gICAqIEByZXR1cm5zIHtFZGdlIHwgdW5kZWZpbmVkfSBub2RlXG4gICAqL1xuICBnZXRFZGdlQXQocG9pbnRlciwgcmV0dXJuRWRnZSA9IHRydWUpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgZWRnZXMsIHBpY2sgY2xvc2VzdCB3aXRoaW4gMTBcbiAgICBjb25zdCBjYW52YXNQb3MgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKTtcbiAgICBsZXQgbWluZGlzdCA9IDEwO1xuICAgIGxldCBvdmVybGFwcGluZ0VkZ2UgPSBudWxsO1xuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5ib2R5LmVkZ2VzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlSWQgPSB0aGlzLmJvZHkuZWRnZUluZGljZXNbaV07XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUlkXTtcbiAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCkge1xuICAgICAgICBjb25zdCB4RnJvbSA9IGVkZ2UuZnJvbS54O1xuICAgICAgICBjb25zdCB5RnJvbSA9IGVkZ2UuZnJvbS55O1xuICAgICAgICBjb25zdCB4VG8gPSBlZGdlLnRvLng7XG4gICAgICAgIGNvbnN0IHlUbyA9IGVkZ2UudG8ueTtcbiAgICAgICAgY29uc3QgZGlzdCA9IGVkZ2UuZWRnZVR5cGUuZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgICAgICAgeEZyb20sXG4gICAgICAgICAgeUZyb20sXG4gICAgICAgICAgeFRvLFxuICAgICAgICAgIHlUbyxcbiAgICAgICAgICBjYW52YXNQb3MueCxcbiAgICAgICAgICBjYW52YXNQb3MueVxuICAgICAgICApO1xuICAgICAgICBpZiAoZGlzdCA8IG1pbmRpc3QpIHtcbiAgICAgICAgICBvdmVybGFwcGluZ0VkZ2UgPSBlZGdlSWQ7XG4gICAgICAgICAgbWluZGlzdCA9IGRpc3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG92ZXJsYXBwaW5nRWRnZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHJldHVybkVkZ2UgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5lZGdlc1tvdmVybGFwcGluZ0VkZ2VdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXBwaW5nRWRnZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIG9iamVjdCB0byB0aGUgc2VsZWN0aW9uIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYWRkVG9Ib3ZlcihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgdGhpcy5ob3Zlck9iai5ub2Rlc1tvYmouaWRdID0gb2JqO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhvdmVyT2JqLmVkZ2VzW29iai5pZF0gPSBvYmo7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHNpbmdsZSBvcHRpb24gZnJvbSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVGcm9tU2VsZWN0aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBOb2RlKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5kZWxldGVOb2RlcyhvYmopO1xuICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZGVsZXRlRWRnZXMoLi4ub2JqLmVkZ2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZGVsZXRlRWRnZXMob2JqKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zZWxlY3QgYWxsIG5vZGVzIGFuZCBlZGdlcy5cbiAgICovXG4gIHVuc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgbm9kZXNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFNlbGVjdGVkTm9kZUNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5zaXplTm9kZXM7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgZWRnZXNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFNlbGVjdGVkRWRnZUNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5zaXplRWRnZXM7XG4gIH1cblxuICAvKipcbiAgICogc2VsZWN0IHRoZSBlZGdlcyBjb25uZWN0ZWQgdG8gdGhlIG5vZGUgdGhhdCBpcyBiZWluZyBzZWxlY3RlZFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ob3ZlckNvbm5lY3RlZEVkZ2VzKG5vZGUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBub2RlLmVkZ2VzW2ldO1xuICAgICAgZWRnZS5ob3ZlciA9IHRydWU7XG4gICAgICB0aGlzLl9hZGRUb0hvdmVyKGVkZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGhpZ2hsaWdodCBmcm9tIGEgbm9kZSBvciBlZGdlLCBpbiByZXNwb25zZSB0byBtb3VzZSBtb3ZlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIG9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICogQHBhcmFtIHtOb2RlfHZpcy5FZGdlfSBvYmplY3RcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXRCbHVyRXZlbnQoZXZlbnQsIHBvaW50ZXIsIG9iamVjdCkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9pbml0QmFzZUV2ZW50KGV2ZW50LCBwb2ludGVyKTtcblxuICAgIGlmIChvYmplY3QuaG92ZXIgPT09IHRydWUpIHtcbiAgICAgIG9iamVjdC5ob3ZlciA9IGZhbHNlO1xuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgcHJvcGVydGllcy5ub2RlID0gb2JqZWN0LmlkO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYmx1ck5vZGVcIiwgcHJvcGVydGllcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wZXJ0aWVzLmVkZ2UgPSBvYmplY3QuaWQ7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJibHVyRWRnZVwiLCBwcm9wZXJ0aWVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBoaWdobGlnaHQgZm9yIGEgbm9kZSBvciBlZGdlLCBpbiByZXNwb25zZSB0byBtb3VzZSBtb3ZlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIG9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICogQHBhcmFtIHtOb2RlfHZpcy5FZGdlfSBvYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59IGhvdmVyQ2hhbmdlZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdEhvdmVyRXZlbnQoZXZlbnQsIHBvaW50ZXIsIG9iamVjdCkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9pbml0QmFzZUV2ZW50KGV2ZW50LCBwb2ludGVyKTtcbiAgICBsZXQgaG92ZXJDaGFuZ2VkID0gZmFsc2U7XG5cbiAgICBpZiAob2JqZWN0LmhvdmVyID09PSBmYWxzZSkge1xuICAgICAgb2JqZWN0LmhvdmVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2FkZFRvSG92ZXIob2JqZWN0KTtcbiAgICAgIGhvdmVyQ2hhbmdlZCA9IHRydWU7XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICBwcm9wZXJ0aWVzLm5vZGUgPSBvYmplY3QuaWQ7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJob3Zlck5vZGVcIiwgcHJvcGVydGllcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wZXJ0aWVzLmVkZ2UgPSBvYmplY3QuaWQ7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJob3ZlckVkZ2VcIiwgcHJvcGVydGllcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdmVyQ2hhbmdlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGFjdGlvbnMgaW4gcmVzcG9uc2UgdG8gYSBtb3VzZSBtb3ZlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50XG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlciB8IG9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICovXG4gIGhvdmVyT2JqZWN0KGV2ZW50LCBwb2ludGVyKSB7XG4gICAgbGV0IG9iamVjdCA9IHRoaXMuZ2V0Tm9kZUF0KHBvaW50ZXIpO1xuICAgIGlmIChvYmplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqZWN0ID0gdGhpcy5nZXRFZGdlQXQocG9pbnRlcik7XG4gICAgfVxuXG4gICAgbGV0IGhvdmVyQ2hhbmdlZCA9IGZhbHNlO1xuICAgIC8vIHJlbW92ZSBhbGwgbm9kZSBob3ZlciBoaWdobGlnaHRzXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5ob3Zlck9iai5ub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmhvdmVyT2JqLm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBvYmplY3QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChvYmplY3QgaW5zdGFuY2VvZiBOb2RlICYmIG9iamVjdC5pZCAhPSBub2RlSWQpIHx8XG4gICAgICAgICAgb2JqZWN0IGluc3RhbmNlb2YgRWRnZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmVtaXRCbHVyRXZlbnQoZXZlbnQsIHBvaW50ZXIsIHRoaXMuaG92ZXJPYmoubm9kZXNbbm9kZUlkXSk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuaG92ZXJPYmoubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgICBob3ZlckNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZpbmcgYWxsIGVkZ2UgaG92ZXIgaGlnaGxpZ2h0c1xuICAgIGZvciAoY29uc3QgZWRnZUlkIGluIHRoaXMuaG92ZXJPYmouZWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ob3Zlck9iai5lZGdlcywgZWRnZUlkKSkge1xuICAgICAgICAvLyBpZiB0aGUgaG92ZXIgaGFzIGJlZW4gY2hhbmdlZCBoZXJlIGl0IG1lYW5zIHRoYXQgdGhlIG5vZGUgaGFzIGJlZW4gaG92ZXJlZCBvdmVyIG9yIG9mZlxuICAgICAgICAvLyB3ZSB0aGVuIGRvIG5vdCB1c2UgdGhlIGVtaXRCbHVyRXZlbnQgbWV0aG9kIGhlcmUuXG4gICAgICAgIGlmIChob3ZlckNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmhvdmVyT2JqLmVkZ2VzW2VkZ2VJZF0uaG92ZXIgPSBmYWxzZTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5ob3Zlck9iai5lZGdlc1tlZGdlSWRdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHRoZSBibHVyIHJlbWFpbnMgdGhlIHNhbWUgYW5kIHRoZSBvYmplY3QgaXMgdW5kZWZpbmVkIChtb3VzZSBvZmYpIG9yIGFub3RoZXJcbiAgICAgICAgLy8gZWRnZSBoYXMgYmVlbiBob3ZlcmVkLCBvciBhbm90aGVyIG5vZGUgaGFzIGJlZW4gaG92ZXJlZCB3ZSBibHVyIHRoZSBlZGdlLlxuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICBvYmplY3QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChvYmplY3QgaW5zdGFuY2VvZiBFZGdlICYmIG9iamVjdC5pZCAhPSBlZGdlSWQpIHx8XG4gICAgICAgICAgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUgJiYgIW9iamVjdC5ob3ZlcilcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5lbWl0Qmx1ckV2ZW50KGV2ZW50LCBwb2ludGVyLCB0aGlzLmhvdmVyT2JqLmVkZ2VzW2VkZ2VJZF0pO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmhvdmVyT2JqLmVkZ2VzW2VkZ2VJZF07XG4gICAgICAgICAgaG92ZXJDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvYmplY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaG92ZXJlZEVkZ2VzQ291bnQgPSBPYmplY3Qua2V5cyh0aGlzLmhvdmVyT2JqLmVkZ2VzKS5sZW5ndGg7XG4gICAgICBjb25zdCBob3ZlcmVkTm9kZXNDb3VudCA9IE9iamVjdC5rZXlzKHRoaXMuaG92ZXJPYmoubm9kZXMpLmxlbmd0aDtcbiAgICAgIGNvbnN0IG5ld09ubHlIb3ZlcmVkRWRnZSA9XG4gICAgICAgIG9iamVjdCBpbnN0YW5jZW9mIEVkZ2UgJiZcbiAgICAgICAgaG92ZXJlZEVkZ2VzQ291bnQgPT09IDAgJiZcbiAgICAgICAgaG92ZXJlZE5vZGVzQ291bnQgPT09IDA7XG4gICAgICBjb25zdCBuZXdPbmx5SG92ZXJlZE5vZGUgPVxuICAgICAgICBvYmplY3QgaW5zdGFuY2VvZiBOb2RlICYmXG4gICAgICAgIGhvdmVyZWRFZGdlc0NvdW50ID09PSAwICYmXG4gICAgICAgIGhvdmVyZWROb2Rlc0NvdW50ID09PSAwO1xuXG4gICAgICBpZiAoaG92ZXJDaGFuZ2VkIHx8IG5ld09ubHlIb3ZlcmVkRWRnZSB8fCBuZXdPbmx5SG92ZXJlZE5vZGUpIHtcbiAgICAgICAgaG92ZXJDaGFuZ2VkID0gdGhpcy5lbWl0SG92ZXJFdmVudChldmVudCwgcG9pbnRlciwgb2JqZWN0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUgJiYgdGhpcy5vcHRpb25zLmhvdmVyQ29ubmVjdGVkRWRnZXMgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5faG92ZXJDb25uZWN0ZWRFZGdlcyhvYmplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChob3ZlckNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0IHRoZSBzZWxlY3Rpb24gY2hhbmdlcyBidXQgZG9uJ3QgZW1pdCBhbnkgZXZlbnRzLlxuICAgKi9cbiAgY29tbWl0V2l0aG91dEVtaXR0aW5nKCkge1xuICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmNvbW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhbmQgZGVzZWxlY3Qgbm9kZXMgZGVwZW5kaW5nIGN1cnJlbnQgc2VsZWN0aW9uIGNoYW5nZS5cbiAgICpcbiAgICogRm9yIGNoYW5naW5nIG5vZGVzLCBzZWxlY3QvZGVzZWxlY3QgZXZlbnRzIGFyZSBmaXJlZC5cbiAgICpcbiAgICogTk9URTogRm9yIGEgZ2l2ZW4gZWRnZSwgaWYgb25lIGNvbm5lY3Rpbmcgbm9kZSBpcyBkZXNlbGVjdGVkIGFuZCB3aXRoIHRoZVxuICAgKiBzYW1lIGNsaWNrIHRoZSBvdGhlciBub2RlIGlzIHNlbGVjdGVkLCBubyBldmVudHMgZm9yIHRoZSBlZGdlIHdpbGwgZmlyZS4gSXRcbiAgICogd2FzIHNlbGVjdGVkIGFuZCBpdCB3aWxsIHJlbWFpbiBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIC0gVGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgb2YgdGhlXG4gICAqIGNsaWNrLCB0YXAsIGRyYWdlbmTigKYgdGhhdCB0cmlnZ2VyZWQgdGhpcy5cbiAgICogQHBhcmFtIHtVSUV2ZW50fSBldmVudCAtIFRoZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzLlxuICAgKi9cbiAgY29tbWl0QW5kRW1pdChwb2ludGVyLCBldmVudCkge1xuICAgIGxldCBzZWxlY3RlZCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2VsZWN0aW9uQ2hhbmdlcyA9IHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmNvbW1pdCgpO1xuICAgIGNvbnN0IHByZXZpb3VzU2VsZWN0aW9uID0ge1xuICAgICAgbm9kZXM6IHNlbGVjdGlvbkNoYW5nZXMubm9kZXMucHJldmlvdXMsXG4gICAgICBlZGdlczogc2VsZWN0aW9uQ2hhbmdlcy5lZGdlcy5wcmV2aW91cyxcbiAgICB9O1xuXG4gICAgaWYgKHNlbGVjdGlvbkNoYW5nZXMuZWRnZXMuZGVsZXRlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgXCJkZXNlbGVjdEVkZ2VcIixcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHBvaW50ZXIsXG4gICAgICAgIHByZXZpb3VzU2VsZWN0aW9uXG4gICAgICApO1xuICAgICAgc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VzLm5vZGVzLmRlbGV0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgIFwiZGVzZWxlY3ROb2RlXCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBwb2ludGVyLFxuICAgICAgICBwcmV2aW91c1NlbGVjdGlvblxuICAgICAgKTtcbiAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlcy5ub2Rlcy5hZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2xpY2tFdmVudChcInNlbGVjdE5vZGVcIiwgZXZlbnQsIHBvaW50ZXIpO1xuICAgICAgc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VzLmVkZ2VzLmFkZGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDbGlja0V2ZW50KFwic2VsZWN0RWRnZVwiLCBldmVudCwgcG9pbnRlcik7XG4gICAgICBzZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmlyZSB0aGUgc2VsZWN0IGV2ZW50IGlmIGFueXRoaW5nIGhhcyBiZWVuIHNlbGVjdGVkIG9yIGRlc2VsZWN0ZWRcbiAgICBpZiAoc2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIHNlbGVjdCBvciB1bnNlbGVjdFxuICAgICAgdGhpcy5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJzZWxlY3RcIiwgZXZlbnQsIHBvaW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5vZGUgYW5kIGVkZ2UgaWRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7e25vZGVzOiBBcnJheS48c3RyaW5nPiwgZWRnZXM6IEFycmF5LjxzdHJpbmc+fX0gQXJyYXlzIHdpdGggdGhlXG4gICAqIGlkcyBvZiB0aGUgc2VsZWN0ZWQgbm9kZXMgYW5kIGVkZ2VzLlxuICAgKi9cbiAgZ2V0U2VsZWN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBub2RlczogdGhpcy5nZXRTZWxlY3RlZE5vZGVJZHMoKSxcbiAgICAgIGVkZ2VzOiB0aGlzLmdldFNlbGVjdGVkRWRnZUlkcygpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBub2Rlcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSB3aXRoIHNlbGVjdGVkIG5vZGVzLlxuICAgKi9cbiAgZ2V0U2VsZWN0ZWROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0Tm9kZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGVkZ2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEFuIGFycmF5IHdpdGggc2VsZWN0ZWQgZWRnZXMuXG4gICAqL1xuICBnZXRTZWxlY3RlZEVkZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5nZXRFZGdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZSBpZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX0gQW4gYXJyYXkgd2l0aCB0aGUgaWRzIG9mIHRoZSBzZWxlY3RlZCBub2Rlcy5cbiAgICovXG4gIGdldFNlbGVjdGVkTm9kZUlkcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0Tm9kZXMoKS5tYXAoKG5vZGUpID0+IG5vZGUuaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZWRnZSBpZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX0gQW4gYXJyYXkgd2l0aCB0aGUgaWRzIG9mIHRoZSBzZWxlY3RlZCBlZGdlcy5cbiAgICovXG4gIGdldFNlbGVjdGVkRWRnZUlkcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0RWRnZXMoKS5tYXAoKGVkZ2UpID0+IGVkZ2UuaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7e25vZGVzOiBBcnJheS48c3RyaW5nPiwgZWRnZXM6IEFycmF5LjxzdHJpbmc+fX0gc2VsZWN0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uc1xuICAgKi9cbiAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgKCFzZWxlY3Rpb24ubm9kZXMgJiYgIXNlbGVjdGlvbi5lZGdlcykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiU2VsZWN0aW9uIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggbm9kZXMgYW5kL29yIGVkZ2VzIHByb3BlcnRpZXNcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB1bnNlbGVjdCBhbnkgc2VsZWN0ZWQgbm9kZSwgaWYgb3B0aW9uIGlzIHRydWUgb3IgdW5kZWZpbmVkXG4gICAgaWYgKG9wdGlvbnMudW5zZWxlY3RBbGwgfHwgb3B0aW9ucy51bnNlbGVjdEFsbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XG4gICAgfVxuICAgIGlmIChzZWxlY3Rpb24ubm9kZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaWQgb2Ygc2VsZWN0aW9uLm5vZGVzKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbaWRdO1xuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTm9kZSB3aXRoIGlkIFwiJyArIGlkICsgJ1wiIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvbid0IHNlbGVjdCBlZGdlcyB3aXRoIGl0XG4gICAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KG5vZGUsIG9wdGlvbnMuaGlnaGxpZ2h0RWRnZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzZWxlY3Rpb24uZWRnZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaWQgb2Ygc2VsZWN0aW9uLmVkZ2VzKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbaWRdO1xuICAgICAgICBpZiAoIWVkZ2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRWRnZSB3aXRoIGlkIFwiJyArIGlkICsgJ1wiIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KGVkZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuY29tbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogc2VsZWN0IHplcm8gb3IgbW9yZSBub2RlcyB3aXRoIHRoZSBvcHRpb24gdG8gaGlnaGxpZ2h0IGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gc2VsZWN0aW9uICAgICBBbiBhcnJheSB3aXRoIHRoZSBpZHMgb2YgdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBub2Rlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlnaGxpZ2h0RWRnZXNdXG4gICAqL1xuICBzZWxlY3ROb2RlcyhzZWxlY3Rpb24sIGhpZ2hsaWdodEVkZ2VzID0gdHJ1ZSkge1xuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5sZW5ndGggPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IFwiU2VsZWN0aW9uIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBpZHNcIjtcblxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHsgbm9kZXM6IHNlbGVjdGlvbiB9LCB7IGhpZ2hsaWdodEVkZ2VzOiBoaWdobGlnaHRFZGdlcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZWxlY3QgemVybyBvciBtb3JlIGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gc2VsZWN0aW9uICAgICBBbiBhcnJheSB3aXRoIHRoZSBpZHMgb2YgdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBub2Rlcy5cbiAgICovXG4gIHNlbGVjdEVkZ2VzKHNlbGVjdGlvbikge1xuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5sZW5ndGggPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IFwiU2VsZWN0aW9uIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBpZHNcIjtcblxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHsgZWRnZXM6IHNlbGVjdGlvbiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgc2VsZWN0aW9uOiByZW1vdmUgaWRzIG9mIG5vZGVzIHdoaWNoIG5vIGxvbmdlciBleGlzdFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlU2VsZWN0aW9uKCkge1xuICAgIGZvciAoY29uc3Qgbm9kZSBpbiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5nZXROb2RlcygpKSB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkubm9kZXMsIG5vZGUuaWQpKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmRlbGV0ZU5vZGVzKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVkZ2UgaW4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0RWRnZXMoKSkge1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlLmlkKSkge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5kZWxldGVFZGdlcyhlZGdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGFsbCB0aGUgdmlzdWFsIGVsZW1lbnRzIGNsaWNrZWQgd2hpY2ggYXJlIG9uIHRoZSBnaXZlbiBwb2ludC5cbiAgICpcbiAgICogQWxsIGVsZW1lbnRzIGFyZSByZXR1cm5lZDsgdGhpcyBpbmNsdWRlcyBub2RlcywgZWRnZXMgYW5kIHRoZWlyIGxhYmVscy5cbiAgICogVGhlIG9yZGVyIHJldHVybmVkIGlzIGZyb20gaGlnaGVzdCB0byBsb3dlc3QsIGkuZS4gZWxlbWVudCAwIG9mIHRoZSByZXR1cm5cbiAgICogdmFsdWUgaXMgdGhlIHRvcG1vc3QgaXRlbSBjbGlja2VkIG9uLlxuICAgKlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIGNvbnNpc3RzIG9mIGFuIGFycmF5IG9mIHRoZSBmb2xsb3dpbmcgcG9zc2libGUgZWxlbWVudHM6XG4gICAqXG4gICAqIC0gYHtub2RlSWQ6bnVtYmVyfWAgICAgICAgICAgICAgLSBub2RlIHdpdGggZ2l2ZW4gaWQgY2xpY2tlZCBvblxuICAgKiAtIGB7bm9kZUlkOm51bWJlciwgbGFiZWxJZDowfWAgIC0gbGFiZWwgb2Ygbm9kZSB3aXRoIGdpdmVuIGlkIGNsaWNrZWQgb25cbiAgICogLSBge2VkZ2VJZDpudW1iZXJ9YCAgICAgICAgICAgICAtIGVkZ2Ugd2l0aCBnaXZlbiBpZCBjbGlja2VkIG9uXG4gICAqIC0gYHtlZGdlOm51bWJlciwgbGFiZWxJZDowfWAgICAgLSBsYWJlbCBvZiBlZGdlIHdpdGggZ2l2ZW4gaWQgY2xpY2tlZCBvblxuICAgKlxuICAgKiAjIyBOT1RFU1xuICAgKlxuICAgKiAtIEN1cnJlbnRseSwgdGhlcmUgaXMgb25seSBvbmUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIGEgbm9kZSBvciBhbiBlZGdlLFxuICAgKiAgIGJ1dCB0aGlzIGlzIGV4cGVjdGVkIHRvIGNoYW5nZSBzb21ld2hlcmUgaW4gdGhlIGZ1dHVyZS5cbiAgICogLSBTaW5jZSB0aGVyZSBpcyBubyB6LWluZGV4aW5nIHlldCwgaXQgaXMgbm90IHJlYWxseSBwb3NzaWJsZSB0byBzZXQgdGhlIG5vZGVzIGFuZFxuICAgKiAgIGVkZ2VzIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBGb3IgdGhlIHRpbWUgYmVpbmcsIG5vZGVzIGNvbWUgZmlyc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7cG9pbnR9IHBvaW50ZXIgIG1vdXNlIHBvc2l0aW9uIGluIHNjcmVlbiBjb29yZGluYXRlc1xuICAgKiBAcmV0dXJucyB7QXJyYXkuPG5vZGVDbGlja0l0ZW18bm9kZUxhYmVsQ2xpY2tJdGVtfGVkZ2VDbGlja0l0ZW18ZWRnZUxhYmVsQ2xpY2tJdGVtPn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldENsaWNrZWRJdGVtcyhwb2ludGVyKSB7XG4gICAgY29uc3QgcG9pbnQgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKTtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuXG4gICAgLy8gTm90ZSByZXZlcnNlIG9yZGVyOyB3ZSB3YW50IHRoZSB0b3Btb3N0IGNsaWNrZWQgaXRlbXMgdG8gYmUgZmlyc3QgaW4gdGhlIGFycmF5XG4gICAgLy8gQWxzbyBub3RlIHRoYXQgc2VsZWN0ZWQgbm9kZXMgYXJlIGRpc3JlZ2FyZGVkIGhlcmU7IHRoZXNlIG5vcm1hbGx5IGRpc3BsYXkgb24gdG9wXG4gICAgY29uc3Qgbm9kZUluZGljZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgZm9yIChsZXQgaSA9IG5vZGVJbmRpY2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgY29uc3QgcmV0ID0gbm9kZS5nZXRJdGVtc09uUG9pbnQocG9pbnQpO1xuICAgICAgaXRlbXMucHVzaC5hcHBseShpdGVtcywgcmV0KTsgLy8gQXBwZW5kIHRoZSByZXR1cm4gdmFsdWUgdG8gdGhlIHJ1bm5pbmcgbGlzdC5cbiAgICB9XG5cbiAgICBjb25zdCBlZGdlSW5kaWNlcyA9IHRoaXMuYm9keS5lZGdlSW5kaWNlcztcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBmb3IgKGxldCBpID0gZWRnZUluZGljZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tlZGdlSW5kaWNlc1tpXV07XG4gICAgICBjb25zdCByZXQgPSBlZGdlLmdldEl0ZW1zT25Qb2ludChwb2ludCk7XG4gICAgICBpdGVtcy5wdXNoLmFwcGx5KGl0ZW1zLCByZXQpOyAvLyBBcHBlbmQgdGhlIHJldHVybiB2YWx1ZSB0byB0aGUgcnVubmluZyBsaXN0LlxuICAgIH1cblxuICAgIHJldHVybiBpdGVtcztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Rpb25IYW5kbGVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgbWVyZ2VTb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICByZXR1cm4gbGVuZ3RoIDwgOCA/IGluc2VydGlvblNvcnQoYXJyYXksIGNvbXBhcmVmbikgOiBtZXJnZShcbiAgICBhcnJheSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgMCwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBjb21wYXJlZm5cbiAgKTtcbn07XG5cbnZhciBpbnNlcnRpb25Tb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIGkgPSAxO1xuICB2YXIgZWxlbWVudCwgajtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGogPSBpO1xuICAgIGVsZW1lbnQgPSBhcnJheVtpXTtcbiAgICB3aGlsZSAoaiAmJiBjb21wYXJlZm4oYXJyYXlbaiAtIDFdLCBlbGVtZW50KSA+IDApIHtcbiAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXTtcbiAgICB9XG4gICAgaWYgKGogIT09IGkrKykgYXJyYXlbal0gPSBlbGVtZW50O1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIChhcnJheSwgbGVmdCwgcmlnaHQsIGNvbXBhcmVmbikge1xuICB2YXIgbGxlbmd0aCA9IGxlZnQubGVuZ3RoO1xuICB2YXIgcmxlbmd0aCA9IHJpZ2h0Lmxlbmd0aDtcbiAgdmFyIGxpbmRleCA9IDA7XG4gIHZhciByaW5kZXggPSAwO1xuXG4gIHdoaWxlIChsaW5kZXggPCBsbGVuZ3RoIHx8IHJpbmRleCA8IHJsZW5ndGgpIHtcbiAgICBhcnJheVtsaW5kZXggKyByaW5kZXhdID0gKGxpbmRleCA8IGxsZW5ndGggJiYgcmluZGV4IDwgcmxlbmd0aClcbiAgICAgID8gY29tcGFyZWZuKGxlZnRbbGluZGV4XSwgcmlnaHRbcmluZGV4XSkgPD0gMCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdXG4gICAgICA6IGxpbmRleCA8IGxsZW5ndGggPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXTtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlU29ydDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBmaXJlZm94ID0gdXNlckFnZW50Lm1hdGNoKC9maXJlZm94XFwvKFxcZCspL2kpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhZmlyZWZveCAmJiArZmlyZWZveFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVUEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciB3ZWJraXQgPSB1c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvKFxcZCspXFwuLyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISF3ZWJraXQgJiYgK3dlYmtpdFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJuYWxTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBGRiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtZmYtdmVyc2lvbicpO1xudmFyIElFX09SX0VER0UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWllLW9yLWVkZ2UnKTtcbnZhciBWOCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIFdFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24nKTtcblxudmFyIHRlc3QgPSBbXTtcbnZhciBuYXRpdmVTb3J0ID0gdW5jdXJyeVRoaXModGVzdC5zb3J0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXModGVzdC5wdXNoKTtcblxuLy8gSUU4LVxudmFyIEZBSUxTX09OX1VOREVGSU5FRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KTtcbi8vIFY4IGJ1Z1xudmFyIEZBSUxTX09OX05VTEwgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydChudWxsKTtcbn0pO1xuLy8gT2xkIFdlYktpdFxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb3J0Jyk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGZlYXR1cmUgZGV0ZWN0aW9uIGNhbiBiZSB0b28gc2xvdywgc28gY2hlY2sgZW5naW5lcyB2ZXJzaW9uc1xuICBpZiAoVjgpIHJldHVybiBWOCA8IDcwO1xuICBpZiAoRkYgJiYgRkYgPiAzKSByZXR1cm47XG4gIGlmIChJRV9PUl9FREdFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFdFQktJVCkgcmV0dXJuIFdFQktJVCA8IDYwMztcblxuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBjb2RlLCBjaHIsIHZhbHVlLCBpbmRleDtcblxuICAvLyBnZW5lcmF0ZSBhbiBhcnJheSB3aXRoIG1vcmUgNTEyIGVsZW1lbnRzIChDaGFrcmEgYW5kIG9sZCBWOCBmYWlscyBvbmx5IGluIHRoaXMgY2FzZSlcbiAgZm9yIChjb2RlID0gNjU7IGNvZGUgPCA3NjsgY29kZSsrKSB7XG4gICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSA2NjogY2FzZSA2OTogY2FzZSA3MDogY2FzZSA3MjogdmFsdWUgPSAzOyBicmVhaztcbiAgICAgIGNhc2UgNjg6IGNhc2UgNzE6IHZhbHVlID0gNDsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB2YWx1ZSA9IDI7XG4gICAgfVxuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDc7IGluZGV4KyspIHtcbiAgICAgIHRlc3QucHVzaCh7IGs6IGNociArIGluZGV4LCB2OiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0ZXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudiAtIGEudjsgfSk7XG5cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGVzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSB0ZXN0W2luZGV4XS5rLmNoYXJBdCgwKTtcbiAgICBpZiAocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IGNocikgcmVzdWx0ICs9IGNocjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgIT09ICdER0JFRkhBQ0lKSyc7XG59KTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCAhU1RSSUNUX01FVEhPRCB8fCAhU1RBQkxFX1NPUlQ7XG5cbnZhciBnZXRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uIChjb21wYXJlZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICByZXR1cm4gdG9TdHJpbmcoeCkgPiB0b1N0cmluZyh5KSA/IDEgOiAtMTtcbiAgfTtcbn07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb3J0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG5cbiAgICB2YXIgYXJyYXkgPSB0b09iamVjdCh0aGlzKTtcblxuICAgIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkID8gbmF0aXZlU29ydChhcnJheSkgOiBuYXRpdmVTb3J0KGFycmF5LCBjb21wYXJlZm4pO1xuXG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGFycmF5TGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoYXJyYXkpO1xuICAgIHZhciBpdGVtc0xlbmd0aCwgaW5kZXg7XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGluZGV4IGluIGFycmF5KSBwdXNoKGl0ZW1zLCBhcnJheVtpbmRleF0pO1xuICAgIH1cblxuICAgIGludGVybmFsU29ydChpdGVtcywgZ2V0U29ydENvbXBhcmUoY29tcGFyZWZuKSk7XG5cbiAgICBpdGVtc0xlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZW1zKTtcbiAgICBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBpdGVtc0xlbmd0aCkgYXJyYXlbaW5kZXhdID0gaXRlbXNbaW5kZXgrK107XG4gICAgd2hpbGUgKGluZGV4IDwgYXJyYXlMZW5ndGgpIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhhcnJheSwgaW5kZXgrKyk7XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc29ydCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnNvcnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc29ydCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zb3J0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb3J0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgcmVkdWNlLCByZWR1Y2VSaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX1JJR0hUKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYXJndW1lbnRzTGVuZ3RoLCBtZW1vKSB7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgaW5kZXggPSBJU19SSUdIVCA/IGxlbmd0aCAtIDEgOiAwO1xuICAgIHZhciBpID0gSVNfUklHSFQgPyAtMSA6IDE7XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8IDIpIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGlmIChJU19SSUdIVCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDtJU19SSUdIVCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4gIGxlZnQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VyaWdodFxuICByaWdodDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09PSAncHJvY2Vzcyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5sZWZ0O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIENIUk9NRV9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG4vLyBDaHJvbWUgODAtODIgaGFzIGEgY3JpdGljYWwgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDQ5OTgyXG52YXIgQ0hST01FX0JVRyA9ICFJU19OT0RFICYmIENIUk9NRV9WRVJTSU9OID4gNzkgJiYgQ0hST01FX1ZFUlNJT04gPCA4MztcbnZhciBGT1JDRUQgPSBDSFJPTUVfQlVHIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdyZWR1Y2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgbGVuZ3RoLCBsZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZWR1Y2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmVkdWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJlZHVjZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmVkdWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JlZHVjZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIvKipcbiAqIEhlbHBlciBjbGFzc2VzIGZvciBMYXlvdXRFbmdpbmUuXG4gKlxuICogU3RyYXRlZ3kgcGF0dGVybiBmb3IgdXNhZ2Ugb2YgZGlyZWN0aW9uIG1ldGhvZHMgZm9yIGhpZXJhcmNoaWNhbCBsYXlvdXRzLlxuICovXG5cbi8qKlxuICogSW50ZXJmYWNlIGRlZmluaXRpb24gZm9yIGRpcmVjdGlvbiBzdHJhdGVneSBjbGFzc2VzLlxuICpcbiAqIFRoaXMgY2xhc3MgZGVzY3JpYmVzIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBTdHJhdGVneVxuICogcGF0dGVybiBjbGFzc2VzIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbFxuICogZGlyZWN0aW9uIG9mIGhpZXJhcmNoaWNhbCByZXN1bHRzLlxuICpcbiAqIEZvciBhIGdpdmVuIGRpcmVjdGlvbiwgb25lIGNvb3JkaW5hdGUgd2lsbCBiZSAnZml4ZWQnLCBtZWFuaW5nIHRoYXQgaXQgaXNcbiAqIGRldGVybWluZWQgYnkgbGV2ZWwuXG4gKiBUaGUgb3RoZXIgY29vcmRpbmF0ZSBpcyAndW5maXhlZCcsIG1lYW5pbmcgdGhhdCB0aGUgbm9kZXMgb24gYSBnaXZlbiBsZXZlbFxuICogY2FuIHN0aWxsIG1vdmUgYWxvbmcgdGhhdCBjb29yZGluYXRlLiBTbzpcbiAqXG4gKiAtIGB2ZXJ0aWNhbGAgbGF5b3V0OiBgeGAgdW5maXhlZCwgYHlgIGZpeGVkIHBlciBsZXZlbFxuICogLSBgaG9yaXpvbnRhbGAgbGF5b3V0OiBgeGAgZml4ZWQgcGVyIGxldmVsLCBgeWAgdW5maXhlZFxuICpcbiAqIFRoZSBsb2NhbCBtZXRob2RzIGFyZSBzdHVicyBhbmQgc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIGFic3RyYWN0LlxuICogRGVyaXZlZCBjbGFzc2VzICoqbXVzdCoqIGltcGxlbWVudCBhbGwgdGhlIG1ldGhvZHMgdGhlbXNlbHZlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBEaXJlY3Rpb25JbnRlcmZhY2Uge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgYWJzdHJhY3QoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgaW5zdGFudGlhdGUgYWJzdHJhY3QgY2xhc3MhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBkdW1teSBjYWxsIHdoaWNoIGlzIHVzZWQgdG8gc3VwcHJlc3MgdGhlIGpzZG9jIGVycm9ycyBvZiB0eXBlOlxuICAgKlxuICAgKiAgIFwiJ3BhcmFtJyBpcyBhc3NpZ25lZCBhIHZhbHVlIGJ1dCBuZXZlciB1c2VkXCJcbiAgICpcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZmFrZV91c2UoKSB7XG4gICAgLy8gRG8gbm90aGluZyBzcGVjaWFsXG4gIH1cblxuICAvKipcbiAgICogVHlwZSB0byB1c2UgdG8gdHJhbnNsYXRlIGR5bmFtaWMgY3VydmVzIHRvLCBpbiB0aGUgY2FzZSBvZiBoaWVyYXJjaGljYWwgbGF5b3V0LlxuICAgKiBEeW5hbWljIGN1cnZlcyBkbyBub3Qgd29yayBmb3IgdGhlc2UuXG4gICAqXG4gICAqIFRoZSB2YWx1ZSBzaG91bGQgYmUgcGVycGVuZGljdWxhciB0byB0aGUgYWN0dWFsIGRpcmVjdGlvbiBvZiB0aGUgbGF5b3V0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBEaXJlY3Rpb24sIGVpdGhlciAndmVydGljYWwnIG9yICdob3Jpem9udGFsJ1xuICAgKi9cbiAgY3VydmVUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY29vcmRpbmF0ZSB0aGF0IGlzIG5vdCBmaXhlZCBmb3IgdGhpcyBkaXJlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBUaGUgbm9kZSB0byByZWFkXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIG9mIHRoZSB1bmZpeGVkIGNvb3JkaW5hdGVcbiAgICovXG4gIGdldFBvc2l0aW9uKG5vZGUpIHtcbiAgICB0aGlzLmZha2VfdXNlKG5vZGUpO1xuICAgIHJldHVybiB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgY29vcmRpbmF0ZSB0aGF0IGlzIG5vdCBmaXhlZCBmb3IgdGhpcyBkaXJlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBUaGUgbm9kZSB0byBhZGp1c3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbGV2ZWxdIGlmIHNwZWNpZmllZCwgdGhlIGhpZXJhcmNoeSBsZXZlbCB0aGF0IHRoaXMgbm9kZSBzaG91bGQgYmUgZml4ZWQgdG9cbiAgICovXG4gIHNldFBvc2l0aW9uKG5vZGUsIHBvc2l0aW9uLCBsZXZlbCA9IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZmFrZV91c2Uobm9kZSwgcG9zaXRpb24sIGxldmVsKTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3aWR0aCBvZiBhIHRyZWUuXG4gICAqXG4gICAqIEEgYHRyZWVgIGhlcmUgaXMgYSBzdWJzZXQgb2Ygbm9kZXMgd2l0aGluIHRoZSBuZXR3b3JrIHdoaWNoIGFyZSBub3QgY29ubmVjdGVkIHRvIG90aGVyIG5vZGVzLFxuICAgKiBvbmx5IGFtb25nIHRoZW1zZWx2ZXMuIEluIGVzc2VuY2UsIGl0IGlzIGEgc3ViLW5ldHdvcmsuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggbnVtYmVyIG9mIGEgdHJlZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgd2lkdGggb2YgYSB0cmVlIGluIHRoZSB2aWV3IGNvb3JkaW5hdGVzXG4gICAqL1xuICBnZXRUcmVlU2l6ZShpbmRleCkge1xuICAgIHRoaXMuZmFrZV91c2UoaW5kZXgpO1xuICAgIHJldHVybiB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogU29ydCBhcnJheSBvZiBub2RlcyBvbiB0aGUgdW5maXhlZCBjb29yZGluYXRlcy5cbiAgICpcbiAgICogTm90ZToqKiBjaHJvbWUgaGFzIG5vbi1zdGFibGUgc29ydGluZyBpbXBsZW1lbnRhdGlvbiwgd2hpY2hcbiAgICogaGFzIGEgdGVuZGVuY3kgdG8gY2hhbmdlIHRoZSBvcmRlciBvZiB0aGUgYXJyYXkgaXRlbXMsXG4gICAqIGV2ZW4gaWYgdGhlIGN1c3RvbSBzb3J0IGZ1bmN0aW9uIHJldHVybnMgMC5cbiAgICpcbiAgICogRm9yIHRoaXMgcmVhc29uLCBhbiBleHRlcm5hbCBzb3J0IGltcGxlbWVudGF0aW9uIGlzIHVzZWQsXG4gICAqIHdoaWNoIGhhcyB0aGUgYWRkZWQgYmVuZWZpdCBvZiBiZWluZyBmYXN0ZXIgdGhhbiB0aGUgc3RhbmRhcmRcbiAgICogcGxhdGZvcm1zIGltcGxlbWVudGF0aW9uLiBUaGlzIGhhcyBiZWVuIHZlcmlmaWVkIG9uIGBub2RlLmpzYCxcbiAgICogYGZpcmVmb3hgIGFuZCBgY2hyb21lYCAoYWxsIGxpbnV4KS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVBcnJheSBhcnJheSBvZiBub2RlcyB0byBzb3J0XG4gICAqL1xuICBzb3J0KG5vZGVBcnJheSkge1xuICAgIHRoaXMuZmFrZV91c2Uobm9kZUFycmF5KTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIHRoZSBmaXhlZCBjb29yZGluYXRlIG9mIHRoZSBub2RlIHRvIHRoZSBnaXZlbiBsZXZlbFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIG5vZGUgdG8gYWRqdXN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbCBUaGUgbGV2ZWwgdG8gZml4IHRvXG4gICAqL1xuICBmaXgobm9kZSwgbGV2ZWwpIHtcbiAgICB0aGlzLmZha2VfdXNlKG5vZGUsIGxldmVsKTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIG9mZnNldCB0byB0aGUgdW5maXhlZCBjb29yZGluYXRlIG9mIHRoZSBnaXZlbiBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGVJZH0gbm9kZUlkIElkIG9mIHRoZSBub2RlIHRvIGFkanVzdFxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlmZiBPZmZzZXQgdG8gYWRkIHRvIHRoZSB1bmZpeGVkIGNvb3JkaW5hdGVcbiAgICovXG4gIHNoaWZ0KG5vZGVJZCwgZGlmZikge1xuICAgIHRoaXMuZmFrZV91c2Uobm9kZUlkLCBkaWZmKTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJ0aWNhbCBTdHJhdGVneVxuICpcbiAqIENvb3JkaW5hdGUgYHlgIGlzIGZpeGVkIG9uIGxldmVscywgY29vcmRpbmF0ZSBgeGAgaXMgdW5maXhlZC5cbiAqXG4gKiBAYXVnbWVudHMgRGlyZWN0aW9uSW50ZXJmYWNlXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBWZXJ0aWNhbFN0cmF0ZWd5IGV4dGVuZHMgRGlyZWN0aW9uSW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBsYXlvdXQgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgTGF5b3V0RW5naW5lIGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3IobGF5b3V0KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBjdXJ2ZVR5cGUoKSB7XG4gICAgcmV0dXJuIFwiaG9yaXpvbnRhbFwiO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFBvc2l0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS54O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHNldFBvc2l0aW9uKG5vZGUsIHBvc2l0aW9uLCBsZXZlbCA9IHVuZGVmaW5lZCkge1xuICAgIGlmIChsZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxheW91dC5oaWVyYXJjaGljYWwuYWRkVG9PcmRlcmluZyhub2RlLCBsZXZlbCk7XG4gICAgfVxuICAgIG5vZGUueCA9IHBvc2l0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFRyZWVTaXplKGluZGV4KSB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5sYXlvdXQuaGllcmFyY2hpY2FsLmdldFRyZWVTaXplKFxuICAgICAgdGhpcy5sYXlvdXQuYm9keS5ub2RlcyxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgICByZXR1cm4geyBtaW46IHJlcy5taW5feCwgbWF4OiByZXMubWF4X3ggfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzb3J0KG5vZGVBcnJheSkge1xuICAgIG5vZGVBcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS54IC0gYi54O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGZpeChub2RlLCBsZXZlbCkge1xuICAgIG5vZGUueSA9IHRoaXMubGF5b3V0Lm9wdGlvbnMuaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbiAqIGxldmVsO1xuICAgIG5vZGUub3B0aW9ucy5maXhlZC55ID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzaGlmdChub2RlSWQsIGRpZmYpIHtcbiAgICB0aGlzLmxheW91dC5ib2R5Lm5vZGVzW25vZGVJZF0ueCArPSBkaWZmO1xuICB9XG59XG5cbi8qKlxuICogSG9yaXpvbnRhbCBTdHJhdGVneVxuICpcbiAqIENvb3JkaW5hdGUgYHhgIGlzIGZpeGVkIG9uIGxldmVscywgY29vcmRpbmF0ZSBgeWAgaXMgdW5maXhlZC5cbiAqXG4gKiBAYXVnbWVudHMgRGlyZWN0aW9uSW50ZXJmYWNlXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBIb3Jpem9udGFsU3RyYXRlZ3kgZXh0ZW5kcyBEaXJlY3Rpb25JbnRlcmZhY2Uge1xuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGxheW91dCByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBMYXlvdXRFbmdpbmUgaW5zdGFuY2UuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihsYXlvdXQpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGN1cnZlVHlwZSgpIHtcbiAgICByZXR1cm4gXCJ2ZXJ0aWNhbFwiO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFBvc2l0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS55O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHNldFBvc2l0aW9uKG5vZGUsIHBvc2l0aW9uLCBsZXZlbCA9IHVuZGVmaW5lZCkge1xuICAgIGlmIChsZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxheW91dC5oaWVyYXJjaGljYWwuYWRkVG9PcmRlcmluZyhub2RlLCBsZXZlbCk7XG4gICAgfVxuICAgIG5vZGUueSA9IHBvc2l0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFRyZWVTaXplKGluZGV4KSB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5sYXlvdXQuaGllcmFyY2hpY2FsLmdldFRyZWVTaXplKFxuICAgICAgdGhpcy5sYXlvdXQuYm9keS5ub2RlcyxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgICByZXR1cm4geyBtaW46IHJlcy5taW5feSwgbWF4OiByZXMubWF4X3kgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzb3J0KG5vZGVBcnJheSkge1xuICAgIG5vZGVBcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS55IC0gYi55O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGZpeChub2RlLCBsZXZlbCkge1xuICAgIG5vZGUueCA9IHRoaXMubGF5b3V0Lm9wdGlvbnMuaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbiAqIGxldmVsO1xuICAgIG5vZGUub3B0aW9ucy5maXhlZC54ID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzaGlmdChub2RlSWQsIGRpZmYpIHtcbiAgICB0aGlzLmxheW91dC5ib2R5Lm5vZGVzW25vZGVJZF0ueSArPSBkaWZmO1xuICB9XG59XG5cbmV4cG9ydCB7IEhvcml6b250YWxTdHJhdGVneSwgVmVydGljYWxTdHJhdGVneSB9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5ldmVyeTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdldmVyeScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZXZlcnkodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmV2ZXJ5Jyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZXZlcnk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZXZlcnknKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZXZlcnk7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmV2ZXJ5KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2V2ZXJ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgInR5cGUgTGV2ZWxzID0gUmVjb3JkPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPjtcbnR5cGUgSWQgPSBzdHJpbmcgfCBudW1iZXI7XG5pbnRlcmZhY2UgRWRnZSB7XG4gIGNvbm5lY3RlZDogYm9vbGVhbjtcbiAgZnJvbTogTm9kZTtcbiAgZnJvbUlkOiBJZDtcbiAgdG86IE5vZGU7XG4gIHRvSWQ6IElkO1xufVxuaW50ZXJmYWNlIE5vZGUge1xuICBpZDogSWQ7XG4gIGVkZ2VzOiBFZGdlW107XG59XG5cbi8qKlxuICogVHJ5IHRvIGFzc2lnbiBsZXZlbHMgdG8gbm9kZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9ucyBpbiB0aGUgY3ljbGljIOKAnGhpZXJhcmNoeeKAnS5cbiAqXG4gKiBAcGFyYW0gbm9kZXMgLSBWaXNpYmxlIG5vZGVzIG9mIHRoZSBncmFwaC5cbiAqIEBwYXJhbSBsZXZlbHMgLSBJZiBwcmVzZW50IGxldmVscyB3aWxsIGJlIGFkZGVkIHRvIGl0LCBpZiBub3QgYSBuZXcgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZC5cbiAqIEByZXR1cm5zIFBvcHVsYXRlZCBub2RlIGxldmVscy5cbiAqL1xuZnVuY3Rpb24gZmlsbExldmVsc0J5RGlyZWN0aW9uQ3ljbGljKFxuICBub2RlczogTWFwPElkLCBOb2RlPixcbiAgbGV2ZWxzOiBMZXZlbHNcbik6IExldmVscyB7XG4gIGNvbnN0IGVkZ2VzID0gbmV3IFNldDxFZGdlPigpO1xuICBub2Rlcy5mb3JFYWNoKChub2RlKTogdm9pZCA9PiB7XG4gICAgbm9kZS5lZGdlcy5mb3JFYWNoKChlZGdlKTogdm9pZCA9PiB7XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQpIHtcbiAgICAgICAgZWRnZXMuYWRkKGVkZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBlZGdlcy5mb3JFYWNoKChlZGdlKTogdm9pZCA9PiB7XG4gICAgY29uc3QgZnJvbUlkID0gZWRnZS5mcm9tLmlkO1xuICAgIGNvbnN0IHRvSWQgPSBlZGdlLnRvLmlkO1xuXG4gICAgaWYgKGxldmVsc1tmcm9tSWRdID09IG51bGwpIHtcbiAgICAgIGxldmVsc1tmcm9tSWRdID0gMDtcbiAgICB9XG5cbiAgICBpZiAobGV2ZWxzW3RvSWRdID09IG51bGwgfHwgbGV2ZWxzW2Zyb21JZF0gPj0gbGV2ZWxzW3RvSWRdKSB7XG4gICAgICBsZXZlbHNbdG9JZF0gPSBsZXZlbHNbZnJvbUlkXSArIDE7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbGV2ZWxzO1xufVxuXG4vKipcbiAqIEFzc2lnbiBsZXZlbHMgdG8gbm9kZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9ucyBpbiB0aGUgaGllcmFyY2h5LiBMZWF2ZXMgd2lsbCBiZSBsaW5lZCB1cCBhdCB0aGUgYm90dG9tIGFuZCBhbGwgb3RoZXIgbm9kZXMgYXMgY2xvc2UgdG8gdGhlaXIgY2hpbGRyZW4gYXMgcG9zc2libGUuXG4gKlxuICogQHBhcmFtIG5vZGVzIC0gVmlzaWJsZSBub2RlcyBvZiB0aGUgZ3JhcGguXG4gKiBAcmV0dXJucyBQb3B1bGF0ZWQgbm9kZSBsZXZlbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25MZWF2ZXMobm9kZXM6IE1hcDxJZCwgTm9kZT4pOiBMZXZlbHMge1xuICByZXR1cm4gZmlsbExldmVsc0J5RGlyZWN0aW9uKFxuICAgIC8vIFBpY2sgb25seSBsZWF2ZXMgKG5vZGVzIHdpdGhvdXQgY2hpbGRyZW4pLlxuICAgIChub2RlKTogYm9vbGVhbiA9PlxuICAgICAgbm9kZS5lZGdlc1xuICAgICAgICAvLyBUYWtlIG9ubHkgdmlzaWJsZSBub2RlcyBpbnRvIGFjY291bnQuXG4gICAgICAgIC5maWx0ZXIoKGVkZ2UpOiBib29sZWFuID0+IG5vZGVzLmhhcyhlZGdlLnRvSWQpKVxuICAgICAgICAvLyBDaGVjayB0aGF0IGFsbCBlZGdlcyBsZWFkIHRvIHRoaXMgbm9kZSAobGVhZikuXG4gICAgICAgIC5ldmVyeSgoZWRnZSk6IGJvb2xlYW4gPT4gZWRnZS50byA9PT0gbm9kZSksXG4gICAgLy8gVXNlIHRoZSBsb3dlc3QgbGV2ZWwuXG4gICAgKG5ld0xldmVsLCBvbGRMZXZlbCk6IGJvb2xlYW4gPT4gb2xkTGV2ZWwgPiBuZXdMZXZlbCxcbiAgICAvLyBHbyBhZ2FpbnN0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGVkZ2VzLlxuICAgIFwiZnJvbVwiLFxuICAgIG5vZGVzXG4gICk7XG59XG5cbi8qKlxuICogQXNzaWduIGxldmVscyB0byBub2RlcyBhY2NvcmRpbmcgdG8gdGhlaXIgcG9zaXRpb25zIGluIHRoZSBoaWVyYXJjaHkuIFJvb3RzIHdpbGwgYmUgbGluZWQgdXAgYXQgdGhlIHRvcCBhbmQgYWxsIG5vZGVzIGFzIGNsb3NlIHRvIHRoZWlyIHBhcmVudHMgYXMgcG9zc2libGUuXG4gKlxuICogQHBhcmFtIG5vZGVzIC0gVmlzaWJsZSBub2RlcyBvZiB0aGUgZ3JhcGguXG4gKiBAcmV0dXJucyBQb3B1bGF0ZWQgbm9kZSBsZXZlbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25Sb290cyhub2RlczogTWFwPElkLCBOb2RlPik6IExldmVscyB7XG4gIHJldHVybiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb24oXG4gICAgLy8gUGljayBvbmx5IHJvb3RzIChub2RlcyB3aXRob3V0IHBhcmVudHMpLlxuICAgIChub2RlKTogYm9vbGVhbiA9PlxuICAgICAgbm9kZS5lZGdlc1xuICAgICAgICAvLyBUYWtlIG9ubHkgdmlzaWJsZSBub2RlcyBpbnRvIGFjY291bnQuXG4gICAgICAgIC5maWx0ZXIoKGVkZ2UpOiBib29sZWFuID0+IG5vZGVzLmhhcyhlZGdlLnRvSWQpKVxuICAgICAgICAvLyBDaGVjayB0aGF0IGFsbCBlZGdlcyBsZWFkIGZyb20gdGhpcyBub2RlIChyb290KS5cbiAgICAgICAgLmV2ZXJ5KChlZGdlKTogYm9vbGVhbiA9PiBlZGdlLmZyb20gPT09IG5vZGUpLFxuICAgIC8vIFVzZSB0aGUgaGlnaGVzdCBsZXZlbC5cbiAgICAobmV3TGV2ZWwsIG9sZExldmVsKTogYm9vbGVhbiA9PiBvbGRMZXZlbCA8IG5ld0xldmVsLFxuICAgIC8vIEdvIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGVkZ2VzLlxuICAgIFwidG9cIixcbiAgICBub2Rlc1xuICApO1xufVxuXG4vKipcbiAqIEFzc2lnbiBsZXZlbHMgdG8gbm9kZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9ucyBpbiB0aGUgaGllcmFyY2h5LlxuICpcbiAqIEBwYXJhbSBpc0VudHJ5Tm9kZSAtIENoZWNrcyBhbmQgcmV0dXJuIHRydWUgaWYgdGhlIGdyYXBoIHNob3VsZCBiZSB0cmF2ZXJzZWQgZnJvbSB0aGlzIG5vZGUuXG4gKiBAcGFyYW0gc2hvdWxkTGV2ZWxCZVJlcGxhY2VkIC0gQ2hlY2tzIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIGxldmVsIG9mIGdpdmVuIG5vZGUgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdGhlIG5ldyB2YWx1ZS5cbiAqIEBwYXJhbSBkaXJlY3Rpb24gLSBXaGV0ZXIgdGhlIGdyYXBoIHNob3VsZCBiZSB0cmF2ZXJzZWQgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgZWRnZXMgYFwidG9cImAgb3IgaW4gdGhlIG90aGVyIHdheSBgXCJmcm9tXCJgLlxuICogQHBhcmFtIG5vZGVzIC0gVmlzaWJsZSBub2RlcyBvZiB0aGUgZ3JhcGguXG4gKiBAcmV0dXJucyBQb3B1bGF0ZWQgbm9kZSBsZXZlbHMuXG4gKi9cbmZ1bmN0aW9uIGZpbGxMZXZlbHNCeURpcmVjdGlvbihcbiAgaXNFbnRyeU5vZGU6IChub2RlOiBOb2RlKSA9PiBib29sZWFuLFxuICBzaG91bGRMZXZlbEJlUmVwbGFjZWQ6IChuZXdMZXZlbDogbnVtYmVyLCBvbGRMZXZlbDogbnVtYmVyKSA9PiBib29sZWFuLFxuICBkaXJlY3Rpb246IFwidG9cIiB8IFwiZnJvbVwiLFxuICBub2RlczogTWFwPElkLCBOb2RlPlxuKTogTGV2ZWxzIHtcbiAgY29uc3QgbGV2ZWxzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvLyBJZiBhY3ljbGljLCB0aGUgZ3JhcGggY2FuIGJlIHdhbGtlZCB0aHJvdWdoIHdpdGggKG1vc3QgbGlrZWx5IHdheSkgZmV3ZXJcbiAgLy8gc3RlcHMgdGhhbiB0aGUgbnVtYmVyIGJlbGxvdy4gVGhlIGV4YWN0IHZhbHVlIGlzbid0IHRvbyBpbXBvcnRhbnQgYXMgbG9uZ1xuICAvLyBhcyBpdCdzIHF1aWNrIHRvIGNvbXB1dGUgKGRvZXNuJ3QgaW1wYWN0IGFjeWNsaWMgZ3JhcGhzIHRvbyBtdWNoKSwgaXNcbiAgLy8gaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZiBzdGVwcyBhY3R1YWxseSBuZWVkZWQgKGRvZXNuJ3QgY3V0IG9mZiBiZWZvcmVcbiAgLy8gYWN5Y2xpYyBncmFwaCBpcyB3YWxrZWQgdGhyb3VnaCkgYW5kIHByZXZlbnRzIGluZmluaXRlIGxvb3BzIChjdXRzIG9mZiBmb3JcbiAgLy8gY3ljbGljIGdyYXBocykuXG4gIGNvbnN0IGxpbWl0ID0gWy4uLm5vZGVzLnZhbHVlcygpXS5yZWR1Y2U8bnVtYmVyPihcbiAgICAoYWNjLCBub2RlKTogbnVtYmVyID0+IGFjYyArIDEgKyBub2RlLmVkZ2VzLmxlbmd0aCxcbiAgICAwXG4gICk7XG5cbiAgY29uc3QgZWRnZUlkUHJvcDogXCJmcm9tSWRcIiB8IFwidG9JZFwiID0gKGRpcmVjdGlvbiArIFwiSWRcIikgYXMgXCJmcm9tSWRcIiB8IFwidG9JZFwiO1xuICBjb25zdCBuZXdMZXZlbERpZmYgPSBkaXJlY3Rpb24gPT09IFwidG9cIiA/IDEgOiAtMTtcblxuICBmb3IgKGNvbnN0IFtlbnRyeU5vZGVJZCwgZW50cnlOb2RlXSBvZiBub2Rlcykge1xuICAgIGlmIChcbiAgICAgIC8vIFNraXAgaWYgdGhlIG5vZGUgaXMgbm90IHZpc2libGUuXG4gICAgICAhbm9kZXMuaGFzKGVudHJ5Tm9kZUlkKSB8fFxuICAgICAgLy8gU2tpcCBpZiB0aGUgbm9kZSBpcyBub3QgYW4gZW50cnkgbm9kZS5cbiAgICAgICFpc0VudHJ5Tm9kZShlbnRyeU5vZGUpXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBMaW5lIHVwIGFsbCB0aGUgZW50cnkgbm9kZXMgb24gbGV2ZWwgMC5cbiAgICBsZXZlbHNbZW50cnlOb2RlSWRdID0gMDtcblxuICAgIGNvbnN0IHN0YWNrOiBOb2RlW10gPSBbZW50cnlOb2RlXTtcbiAgICBsZXQgZG9uZSA9IDA7XG4gICAgbGV0IG5vZGU6IE5vZGUgfCB1bmRlZmluZWQ7XG4gICAgd2hpbGUgKChub2RlID0gc3RhY2sucG9wKCkpKSB7XG4gICAgICBpZiAoIW5vZGVzLmhhcyhlbnRyeU5vZGVJZCkpIHtcbiAgICAgICAgLy8gU2tpcCBpZiB0aGUgbm9kZSBpcyBub3QgdmlzaWJsZS5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0xldmVsID0gbGV2ZWxzW25vZGUuaWRdICsgbmV3TGV2ZWxEaWZmO1xuXG4gICAgICBub2RlLmVkZ2VzXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGVkZ2UpOiBib29sZWFuID0+XG4gICAgICAgICAgICAvLyBJZ25vcmUgZGlzY29ubmVjdGVkIGVkZ2VzLlxuICAgICAgICAgICAgZWRnZS5jb25uZWN0ZWQgJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBjaXJjdWxhciBlZGdlcy5cbiAgICAgICAgICAgIGVkZ2UudG8gIT09IGVkZ2UuZnJvbSAmJlxuICAgICAgICAgICAgLy8gSWdub3JlIGVkZ2VzIGxlYWRpbmcgdG8gdGhlIG5vZGUgdGhhdCdzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuXG4gICAgICAgICAgICBlZGdlW2RpcmVjdGlvbl0gIT09IG5vZGUgJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBlZGdlcyBjb25uZWN0aW5nIHRvIGFuIGludmlzaWJsZSBub2RlLlxuICAgICAgICAgICAgbm9kZXMuaGFzKGVkZ2UudG9JZCkgJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBlZGdlcyBjb25uZWN0aW5nIGZyb20gYW4gaW52aXNpYmxlIG5vZGUuXG4gICAgICAgICAgICBub2Rlcy5oYXMoZWRnZS5mcm9tSWQpXG4gICAgICAgIClcbiAgICAgICAgLmZvckVhY2goKGVkZ2UpOiB2b2lkID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXROb2RlSWQgPSBlZGdlW2VkZ2VJZFByb3BdO1xuICAgICAgICAgIGNvbnN0IG9sZExldmVsID0gbGV2ZWxzW3RhcmdldE5vZGVJZF07XG5cbiAgICAgICAgICBpZiAob2xkTGV2ZWwgPT0gbnVsbCB8fCBzaG91bGRMZXZlbEJlUmVwbGFjZWQobmV3TGV2ZWwsIG9sZExldmVsKSkge1xuICAgICAgICAgICAgbGV2ZWxzW3RhcmdldE5vZGVJZF0gPSBuZXdMZXZlbDtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goZWRnZVtkaXJlY3Rpb25dKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAoZG9uZSA+IGxpbWl0KSB7XG4gICAgICAgIC8vIFRoaXMgd291bGQgcnVuIGZvcmV2ZXIgb24gYSBjeWNsaWMgZ3JhcGguXG4gICAgICAgIHJldHVybiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25DeWNsaWMobm9kZXMsIGxldmVscyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICArK2RvbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxldmVscztcbn1cbiIsICIvKipcbiAqIFRoZXJlJ3MgYSBtaXgtdXAgd2l0aCB0ZXJtcyBpbiB0aGUgY29kZS4gRm9sbG93aW5nIGFyZSB0aGUgZm9ybWFsIGRlZmluaXRpb25zOlxuICpcbiAqICAgdHJlZSAgIC0gYSBzdHJpY3QgaGllcmFyY2hpY2FsIG5ldHdvcmssIGkuZS4gZXZlcnkgbm9kZSBoYXMgYXQgbW9zdCBvbmUgcGFyZW50XG4gKiAgIGZvcmVzdCAtIGEgY29sbGVjdGlvbiBvZiB0cmVlcy4gVGhlc2UgZGlzdGluY3QgdHJlZXMgYXJlIHRodXMgbm90IGNvbm5lY3RlZC5cbiAqXG4gKiBTbzpcbiAqIC0gaW4gYSBuZXR3b3JrIHRoYXQgaXMgbm90IGEgdHJlZSwgdGhlcmUgZXhpc3Qgbm9kZXMgd2l0aCBtdWx0aXBsZSBwYXJlbnRzLlxuICogLSBhIG5ldHdvcmsgY29uc2lzdGluZyBvZiB1bmNvbm5lY3RlZCBzdWItbmV0d29ya3MsIG9mIHdoaWNoIGF0IGxlYXN0IG9uZVxuICogICBpcyBub3QgYSB0cmVlLCBpcyBub3QgYSBmb3Jlc3QuXG4gKlxuICogSW4gdGhlIGNvZGUsIHRoZSBkZWZpbml0aW9ucyBhcmU6XG4gKlxuICogICB0cmVlICAgLSBhbnkgZGlzY29ubmVjdGVkIHN1Yi1uZXR3b3JrLCBzdHJpY3QgaGllcmFyY2hpY2FsIG9yIG5vdC5cbiAqICAgZm9yZXN0IC0gYSBidW5jaCBvZiB0aGVzZSBzdWItbmV0d29ya3NcbiAqXG4gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRyZWUgYW5kIG5vdC10cmVlIGlzIGltcG9ydGFudCBpbiB0aGUgY29kZSwgbm90YWJseSB3aXRoaW5cbiAqIHRvIHRoZSBibG9jay1zaGlmdGluZyBhbGdvcml0aG0uIFRoZSBhbGdvcml0aG0gYXNzdW1lcyBmb3JtYWwgdHJlZXMgYW5kIGZhaWxzXG4gKiBmb3Igbm90LXRyZWVzLCBvZnRlbiBpbiBhIHNwZWN0YWN1bGFyIG1hbm5lciAoc2VhcmNoIGZvciAnZXhwbG9kaW5nIG5ldHdvcmsnIGluIHRoZSBpc3N1ZXMpLlxuICpcbiAqIEluIG9yZGVyIHRvIGRpc3Rpbmd1aXNoIHRoZSBkZWZpbml0aW9ucyBpbiB0aGUgZm9sbG93aW5nIGNvZGUsIHRoZSBhZGplY3RpdmUgJ2Zvcm1hbCcgaXNcbiAqIHVzZWQuIElmICdmb3JtYWwnIGlzIGFic2VudCwgeW91IG11c3QgYXNzdW1lIHRoZSBub24tZm9ybWFsIGRlZmluaXRpb24uXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogTk9URVNcbiAqID09PT09XG4gKlxuICogQSBoaWVyYXJjaGljYWwgbGF5b3V0IGlzIGEgZGlmZmVyZW50IHRoaW5nIGZyb20gYSBoaWVyYXJjaGljYWwgbmV0d29yay5cbiAqIFRoZSBsYXlvdXQgaXMgYSB3YXkgdG8gYXJyYW5nZSB0aGUgbm9kZXMgaW4gdGhlIHZpZXc7IHRoaXMgY2FuIGJlIGRvbmVcbiAqIG9uIG5vbi1oaWVyYXJjaGljYWwgbmV0d29ya3MgYXMgd2VsbC4gVGhlIGNvbnZlcnNlIGlzIGFsc28gcG9zc2libGUuXG4gKi9cblwidXNlIHN0cmljdFwiO1xuaW1wb3J0IHtcbiAgQWxlYSxcbiAgZGVlcEV4dGVuZCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2VPcHRpb25zLFxuICBzZWxlY3RpdmVEZWVwRXh0ZW5kLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgTmV0d29ya1V0aWwgZnJvbSBcIi4uL05ldHdvcmtVdGlsXCI7XG5pbXBvcnQge1xuICBIb3Jpem9udGFsU3RyYXRlZ3ksXG4gIFZlcnRpY2FsU3RyYXRlZ3ksXG59IGZyb20gXCIuL2NvbXBvbmVudHMvRGlyZWN0aW9uU3RyYXRlZ3kuanNcIjtcbmltcG9ydCB7XG4gIGZpbGxMZXZlbHNCeURpcmVjdGlvbkxlYXZlcyxcbiAgZmlsbExldmVsc0J5RGlyZWN0aW9uUm9vdHMsXG59IGZyb20gXCIuL2xheW91dC1lbmdpbmVcIjtcblxuLyoqXG4gKiBDb250YWluZXIgZm9yIGRlcml2ZWQgZGF0YSBvbiBjdXJyZW50IG5ldHdvcmssIHJlbGF0aW5nIHRvIGhpZXJhcmNoeS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBIaWVyYXJjaGljYWxTdGF0dXMge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jaGlsZHJlblJlZmVyZW5jZSA9IHt9OyAvLyBjaGlsZCBpZCdzIHBlciBub2RlIGlkXG4gICAgdGhpcy5wYXJlbnRSZWZlcmVuY2UgPSB7fTsgLy8gcGFyZW50IGlkJ3MgcGVyIG5vZGUgaWRcbiAgICB0aGlzLnRyZWVzID0ge307IC8vIHRyZWUgaWQgcGVyIG5vZGUgaWQ7IGkuZS4gdG8gd2hpY2ggdHJlZSBkb2VzIGdpdmVuIG5vZGUgaWQgYmVsb25nXG5cbiAgICB0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nID0ge307IC8vIFRoZSBub2RlcyBwZXIgbGV2ZWwsIGluIHRoZSBkaXNwbGF5IG9yZGVyXG4gICAgdGhpcy5sZXZlbHMgPSB7fTsgLy8gaGllcmFyY2h5IGxldmVsIHBlciBub2RlIGlkXG4gICAgdGhpcy5kaXN0cmlidXRpb25JbmRleCA9IHt9OyAvLyBUaGUgcG9zaXRpb24gb2YgdGhlIG5vZGUgaW4gdGhlIGxldmVsIHNvcnRpbmcgb3JkZXIsIHBlciBub2RlIGlkLlxuXG4gICAgdGhpcy5pc1RyZWUgPSBmYWxzZTsgLy8gVHJ1ZSBpZiBjdXJyZW50IG5ldHdvcmsgaXMgYSBmb3JtYWwgdHJlZVxuICAgIHRoaXMudHJlZUluZGV4ID0gLTE7IC8vIEhpZ2hlc3QgdHJlZSBpZCBpbiBjdXJyZW50IG5ldHdvcmsuXG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSByZWxhdGlvbiBiZXR3ZWVuIGdpdmVuIG5vZGVzIHRvIHRoZSBjdXJyZW50IHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IHBhcmVudE5vZGVJZFxuICAgKiBAcGFyYW0ge05vZGUuaWR9IGNoaWxkTm9kZUlkXG4gICAqL1xuICBhZGRSZWxhdGlvbihwYXJlbnROb2RlSWQsIGNoaWxkTm9kZUlkKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW5SZWZlcmVuY2VbcGFyZW50Tm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoaWxkcmVuUmVmZXJlbmNlW3BhcmVudE5vZGVJZF0gPSBbXTtcbiAgICB9XG4gICAgdGhpcy5jaGlsZHJlblJlZmVyZW5jZVtwYXJlbnROb2RlSWRdLnB1c2goY2hpbGROb2RlSWQpO1xuXG4gICAgaWYgKHRoaXMucGFyZW50UmVmZXJlbmNlW2NoaWxkTm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBhcmVudFJlZmVyZW5jZVtjaGlsZE5vZGVJZF0gPSBbXTtcbiAgICB9XG4gICAgdGhpcy5wYXJlbnRSZWZlcmVuY2VbY2hpbGROb2RlSWRdLnB1c2gocGFyZW50Tm9kZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBmb3IgYSBmb3JtYWwgdHJlZSBvciBmb3JtYWwgZm9yZXN0LlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBjYXNlIGlmIGV2ZXJ5IG5vZGUgaGFzIGF0IG1vc3Qgb25lIHBhcmVudC5cbiAgICpcbiAgICogUHJlOiBwYXJlbnRSZWZlcmVuY2UgaW5pdCdlZCBwcm9wZXJseSBmb3IgY3VycmVudCBuZXR3b3JrXG4gICAqL1xuICBjaGVja0lmVHJlZSgpIHtcbiAgICBmb3IgKGNvbnN0IGkgaW4gdGhpcy5wYXJlbnRSZWZlcmVuY2UpIHtcbiAgICAgIGlmICh0aGlzLnBhcmVudFJlZmVyZW5jZVtpXS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMuaXNUcmVlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmlzVHJlZSA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VwYXJhdGUgdHJlZXMgaW4gdGhlIGN1cnJlbnQgbmV0d29yay5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIG51bVRyZWVzKCkge1xuICAgIHJldHVybiB0aGlzLnRyZWVJbmRleCArIDE7IC8vIFRoaXMgYXNzdW1lcyB0aGUgaW5kZXhlcyBhcmUgYXNzaWduZWQgY29uc2VjaXRpdmVseVxuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIHRyZWUgaWQgdG8gYSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHRyZWVJZFxuICAgKi9cbiAgc2V0VHJlZUluZGV4KG5vZGUsIHRyZWVJZCkge1xuICAgIGlmICh0cmVlSWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuOyAvLyBEb24ndCBib3RoZXJcblxuICAgIGlmICh0aGlzLnRyZWVzW25vZGUuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudHJlZXNbbm9kZS5pZF0gPSB0cmVlSWQ7XG4gICAgICB0aGlzLnRyZWVJbmRleCA9IE1hdGgubWF4KHRyZWVJZCwgdGhpcy50cmVlSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgbGV2ZWwgZm9yIGdpdmVuIGlkIGlzIGRlZmluZWQuXG4gICAqXG4gICAqIFNldHMgbGV2ZWwgdG8gemVybyBmb3IgZ2l2ZW4gbm9kZSBpZCBpZiBub3QgYWxyZWFkeSBwcmVzZW50XG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqL1xuICBlbnN1cmVMZXZlbChub2RlSWQpIHtcbiAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxldmVsc1tub2RlSWRdID0gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBtYXhpbXVtIGxldmVsIG9mIGEgYnJhbmNoLlxuICAgKlxuICAgKiBUT0RPOiBOZXZlciBlbnRlcmVkOyBmaW5kIGEgdGVzdCBjYXNlIHRvIHRlc3QgdGhpcyFcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldE1heExldmVsKG5vZGVJZCkge1xuICAgIGNvbnN0IGFjY3VtdWxhdG9yID0ge307XG5cbiAgICBjb25zdCBfZ2V0TWF4TGV2ZWwgPSAobm9kZUlkKSA9PiB7XG4gICAgICBpZiAoYWNjdW11bGF0b3Jbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcltub2RlSWRdO1xuICAgICAgfVxuICAgICAgbGV0IGxldmVsID0gdGhpcy5sZXZlbHNbbm9kZUlkXTtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuUmVmZXJlbmNlW25vZGVJZF0pIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuUmVmZXJlbmNlW25vZGVJZF07XG4gICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV2ZWwgPSBNYXRoLm1heChsZXZlbCwgX2dldE1heExldmVsKGNoaWxkcmVuW2ldKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhY2N1bXVsYXRvcltub2RlSWRdID0gbGV2ZWw7XG4gICAgICByZXR1cm4gbGV2ZWw7XG4gICAgfTtcblxuICAgIHJldHVybiBfZ2V0TWF4TGV2ZWwobm9kZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVBXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZUJcbiAgICovXG4gIGxldmVsRG93bnN0cmVhbShub2RlQSwgbm9kZUIpIHtcbiAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUIuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHNldCBpbml0aWFsIGxldmVsXG4gICAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUEuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5sZXZlbHNbbm9kZUEuaWRdID0gMDtcbiAgICAgIH1cbiAgICAgIC8vIHNldCBsZXZlbFxuICAgICAgdGhpcy5sZXZlbHNbbm9kZUIuaWRdID0gdGhpcy5sZXZlbHNbbm9kZUEuaWRdICsgMTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU21hbGwgdXRpbCBtZXRob2QgdG8gc2V0IHRoZSBtaW5pbXVtIGxldmVscyBvZiB0aGUgbm9kZXMgdG8gemVyby5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzXG4gICAqL1xuICBzZXRNaW5MZXZlbFRvWmVybyhub2Rlcykge1xuICAgIGxldCBtaW5MZXZlbCA9IDFlOTtcbiAgICAvLyBnZXQgdGhlIG1pbmltdW0gbGV2ZWxcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbWluTGV2ZWwgPSBNYXRoLm1pbih0aGlzLmxldmVsc1tub2RlSWRdLCBtaW5MZXZlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzdWJ0cmFjdCB0aGUgbWluaW11bSBmcm9tIHRoZSBzZXQgc28gd2UgaGF2ZSBhIHJhbmdlIHN0YXJ0aW5nIGZyb20gMFxuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIGlmICh0aGlzLmxldmVsc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmxldmVsc1tub2RlSWRdIC09IG1pbkxldmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWluIGFuZCBtYXggeHktY29vcmRpbmF0ZXMgb2YgYSBnaXZlbiB0cmVlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBub2Rlc1xuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICogQHJldHVybnMge3ttaW5feDogbnVtYmVyLCBtYXhfeDogbnVtYmVyLCBtaW5feTogbnVtYmVyLCBtYXhfeTogbnVtYmVyfX1cbiAgICovXG4gIGdldFRyZWVTaXplKG5vZGVzLCBpbmRleCkge1xuICAgIGxldCBtaW5feCA9IDFlOTtcbiAgICBsZXQgbWF4X3ggPSAtMWU5O1xuICAgIGxldCBtaW5feSA9IDFlOTtcbiAgICBsZXQgbWF4X3kgPSAtMWU5O1xuXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy50cmVlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnRyZWVzLCBub2RlSWQpKSB7XG4gICAgICAgIGlmICh0aGlzLnRyZWVzW25vZGVJZF0gPT09IGluZGV4KSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW25vZGVJZF07XG4gICAgICAgICAgbWluX3ggPSBNYXRoLm1pbihub2RlLngsIG1pbl94KTtcbiAgICAgICAgICBtYXhfeCA9IE1hdGgubWF4KG5vZGUueCwgbWF4X3gpO1xuICAgICAgICAgIG1pbl95ID0gTWF0aC5taW4obm9kZS55LCBtaW5feSk7XG4gICAgICAgICAgbWF4X3kgPSBNYXRoLm1heChub2RlLnksIG1heF95KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtaW5feDogbWluX3gsXG4gICAgICBtYXhfeDogbWF4X3gsXG4gICAgICBtaW5feTogbWluX3ksXG4gICAgICBtYXhfeTogbWF4X3ksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gbm9kZXMgaGF2ZSB0aGUgc2FtZSBwYXJlbnQocylcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlMVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSB0d28gbm9kZXMgaGF2ZSBhIHNhbWUgYW5jZXN0b3Igbm9kZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBoYXNTYW1lUGFyZW50KG5vZGUxLCBub2RlMikge1xuICAgIGNvbnN0IHBhcmVudHMxID0gdGhpcy5wYXJlbnRSZWZlcmVuY2Vbbm9kZTEuaWRdO1xuICAgIGNvbnN0IHBhcmVudHMyID0gdGhpcy5wYXJlbnRSZWZlcmVuY2Vbbm9kZTIuaWRdO1xuICAgIGlmIChwYXJlbnRzMSA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudHMyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudHMxLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhcmVudHMyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChwYXJlbnRzMVtpXSA9PSBwYXJlbnRzMltqXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gbm9kZXMgYXJlIGluIHRoZSBzYW1lIHRyZWUuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZTFcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlMlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGlzIGlzIHNvLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGluU2FtZVN1Yk5ldHdvcmsobm9kZTEsIG5vZGUyKSB7XG4gICAgcmV0dXJuIHRoaXMudHJlZXNbbm9kZTEuaWRdID09PSB0aGlzLnRyZWVzW25vZGUyLmlkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBsaXN0IG9mIHRoZSBkaXN0aW5jdCBsZXZlbHMgaW4gdGhlIGN1cnJlbnQgbmV0d29ya1xuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBnZXRMZXZlbHMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5vZGUgdG8gdGhlIG9yZGVyaW5nIHBlciBsZXZlbFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXG4gICAqL1xuICBhZGRUb09yZGVyaW5nKG5vZGUsIGxldmVsKSB7XG4gICAgaWYgKHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdID0gW107XG4gICAgfVxuXG4gICAgbGV0IGlzUHJlc2VudCA9IGZhbHNlO1xuICAgIGNvbnN0IGN1ckxldmVsID0gdGhpcy5kaXN0cmlidXRpb25PcmRlcmluZ1tsZXZlbF07XG4gICAgZm9yIChjb25zdCBuIGluIGN1ckxldmVsKSB7XG4gICAgICAvL2lmIChjdXJMZXZlbFtuXS5pZCA9PT0gbm9kZS5pZCkge1xuICAgICAgaWYgKGN1ckxldmVsW25dID09PSBub2RlKSB7XG4gICAgICAgIGlzUHJlc2VudCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNQcmVzZW50KSB7XG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXS5wdXNoKG5vZGUpO1xuICAgICAgdGhpcy5kaXN0cmlidXRpb25JbmRleFtub2RlLmlkXSA9XG4gICAgICAgIHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdLmxlbmd0aCAtIDE7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhlIExheW91dCBFbmdpbmVcbiAqL1xuY2xhc3MgTGF5b3V0RW5naW5lIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5KSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhbHdheXMgaXMgc29tZSBSTkcgYmVjYXVzZSB0aGUgc2V0T3B0aW9ucyBtZXRob2Qgd29uJ3RcbiAgICAvLyBzZXQgaXQgdW5sZXNzIHRoZXJlJ3MgYSBzZWVkIGZvciBpdC5cbiAgICB0aGlzLl9yZXNldFJORyhNYXRoLnJhbmRvbSgpICsgXCI6XCIgKyBEYXRlLm5vdygpKTtcblxuICAgIHRoaXMuc2V0UGh5c2ljcyA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMub3B0aW9uc0JhY2t1cCA9IHsgcGh5c2ljczoge30gfTtcblxuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICByYW5kb21TZWVkOiB1bmRlZmluZWQsXG4gICAgICBpbXByb3ZlZExheW91dDogdHJ1ZSxcbiAgICAgIGNsdXN0ZXJUaHJlc2hvbGQ6IDE1MCxcbiAgICAgIGhpZXJhcmNoaWNhbDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbGV2ZWxTZXBhcmF0aW9uOiAxNTAsXG4gICAgICAgIG5vZGVTcGFjaW5nOiAxMDAsXG4gICAgICAgIHRyZWVTcGFjaW5nOiAyMDAsXG4gICAgICAgIGJsb2NrU2hpZnRpbmc6IHRydWUsXG4gICAgICAgIGVkZ2VNaW5pbWl6YXRpb246IHRydWUsXG4gICAgICAgIHBhcmVudENlbnRyYWxpemF0aW9uOiB0cnVlLFxuICAgICAgICBkaXJlY3Rpb246IFwiVURcIiwgLy8gVUQsIERVLCBMUiwgUkxcbiAgICAgICAgc29ydE1ldGhvZDogXCJodWJzaXplXCIsIC8vIGh1YnNpemUsIGRpcmVjdGVkXG4gICAgICB9LFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YUNoYW5nZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zZXR1cEhpZXJhcmNoaWNhbExheW91dCgpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFMb2FkZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXROZXR3b3JrKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfcmVzZXRIaWVyYXJjaGljYWxMYXlvdXRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zZXR1cEhpZXJhcmNoaWNhbExheW91dCgpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2FkanVzdEVkZ2VzRm9ySGllcmFyY2hpY2FsTGF5b3V0XCIsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmVuYWJsZWQgIT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IHRoZSB0eXBlIG9mIHN0YXRpYyBzbW9vdGggY3VydmUgaW4gY2FzZSBpdCBpcyByZXF1aXJlZFxuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZGlyZWN0aW9uLmN1cnZlVHlwZSgpO1xuXG4gICAgICAvLyBmb3JjZSBhbGwgZWRnZXMgaW50byBzdGF0aWMgc21vb3RoIGN1cnZlcy5cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZm9yY2VEaXNhYmxlRHluYW1pY0N1cnZlc1wiLCB0eXBlLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGFsbE9wdGlvbnNcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucywgYWxsT3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGhpZXJhcmNoaWNhbCA9IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWw7XG4gICAgICBjb25zdCBwcmV2SGllcmFyY2hpY2FsU3RhdGUgPSBoaWVyYXJjaGljYWwuZW5hYmxlZDtcbiAgICAgIHNlbGVjdGl2ZURlZXBFeHRlbmQoXG4gICAgICAgIFtcInJhbmRvbVNlZWRcIiwgXCJpbXByb3ZlZExheW91dFwiLCBcImNsdXN0ZXJUaHJlc2hvbGRcIl0sXG4gICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICAgIG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG9wdGlvbnMsIFwiaGllcmFyY2hpY2FsXCIpO1xuXG4gICAgICBpZiAob3B0aW9ucy5yYW5kb21TZWVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fcmVzZXRSTkcob3B0aW9ucy5yYW5kb21TZWVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhpZXJhcmNoaWNhbC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChwcmV2SGllcmFyY2hpY2FsU3RhdGUgPT09IHRydWUpIHtcbiAgICAgICAgICAvLyByZWZyZXNoIHRoZSBvdmVycmlkZGVuIG9wdGlvbnMgZm9yIG5vZGVzIGFuZCBlZGdlcy5cbiAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVmcmVzaFwiLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgbGV2ZWwgc2VwYXJhdGlvbiBpcyB0aGUgcmlnaHQgd2F5IHVwXG4gICAgICAgIGlmIChcbiAgICAgICAgICBoaWVyYXJjaGljYWwuZGlyZWN0aW9uID09PSBcIlJMXCIgfHxcbiAgICAgICAgICBoaWVyYXJjaGljYWwuZGlyZWN0aW9uID09PSBcIkRVXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gPiAwKSB7XG4gICAgICAgICAgICBoaWVyYXJjaGljYWwubGV2ZWxTZXBhcmF0aW9uICo9IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbiA8IDApIHtcbiAgICAgICAgICAgIGhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gKj0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXREaXJlY3Rpb25TdHJhdGVneSgpO1xuXG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVzZXRIaWVyYXJjaGljYWxMYXlvdXRcIik7XG4gICAgICAgIC8vIGJlY2F1c2UgdGhlIGhpZXJhcmNoaWNhbCBzeXN0ZW0gbmVlZHMgaXQncyBvd24gcGh5c2ljcyBhbmQgc21vb3RoIGN1cnZlIHNldHRpbmdzLFxuICAgICAgICAvLyB3ZSBhZGFwdCB0aGUgb3RoZXIgb3B0aW9ucyBpZiBuZWVkZWQuXG4gICAgICAgIHJldHVybiB0aGlzLmFkYXB0QWxsT3B0aW9uc0ZvckhpZXJhcmNoaWNhbExheW91dChhbGxPcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcmV2SGllcmFyY2hpY2FsU3RhdGUgPT09IHRydWUpIHtcbiAgICAgICAgICAvLyByZWZyZXNoIHRoZSBvdmVycmlkZGVuIG9wdGlvbnMgZm9yIG5vZGVzIGFuZCBlZGdlcy5cbiAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVmcmVzaFwiKTtcbiAgICAgICAgICByZXR1cm4gZGVlcEV4dGVuZChhbGxPcHRpb25zLCB0aGlzLm9wdGlvbnNCYWNrdXApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhbGxPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aXRoIGdpdmVuIHNlZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBzZWVkIC0gVGhlIHNlZWQgdGhhdCB3aWxsIGJlIGZvcndhcmRlZCB0aGUgdGhlIFJORy5cbiAgICovXG4gIF9yZXNldFJORyhzZWVkKSB7XG4gICAgdGhpcy5pbml0aWFsUmFuZG9tU2VlZCA9IHNlZWQ7XG4gICAgdGhpcy5fcm5nID0gQWxlYSh0aGlzLmluaXRpYWxSYW5kb21TZWVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYWxsT3B0aW9uc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgYWRhcHRBbGxPcHRpb25zRm9ySGllcmFyY2hpY2FsTGF5b3V0KGFsbE9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBiYWNrdXBQaHlzaWNzID0gdGhpcy5vcHRpb25zQmFja3VwLnBoeXNpY3M7XG5cbiAgICAgIC8vIHNldCB0aGUgcGh5c2ljc1xuICAgICAgaWYgKGFsbE9wdGlvbnMucGh5c2ljcyA9PT0gdW5kZWZpbmVkIHx8IGFsbE9wdGlvbnMucGh5c2ljcyA9PT0gdHJ1ZSkge1xuICAgICAgICBhbGxPcHRpb25zLnBoeXNpY3MgPSB7XG4gICAgICAgICAgZW5hYmxlZDpcbiAgICAgICAgICAgIGJhY2t1cFBoeXNpY3MuZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGJhY2t1cFBoeXNpY3MuZW5hYmxlZCxcbiAgICAgICAgICBzb2x2ZXI6IFwiaGllcmFyY2hpY2FsUmVwdWxzaW9uXCIsXG4gICAgICAgIH07XG4gICAgICAgIGJhY2t1cFBoeXNpY3MuZW5hYmxlZCA9XG4gICAgICAgICAgYmFja3VwUGh5c2ljcy5lbmFibGVkID09PSB1bmRlZmluZWQgPyB0cnVlIDogYmFja3VwUGh5c2ljcy5lbmFibGVkO1xuICAgICAgICBiYWNrdXBQaHlzaWNzLnNvbHZlciA9IGJhY2t1cFBoeXNpY3Muc29sdmVyIHx8IFwiYmFybmVzSHV0XCI7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhbGxPcHRpb25zLnBoeXNpY3MgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgYmFja3VwUGh5c2ljcy5lbmFibGVkID1cbiAgICAgICAgICBhbGxPcHRpb25zLnBoeXNpY3MuZW5hYmxlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgIDogYWxsT3B0aW9ucy5waHlzaWNzLmVuYWJsZWQ7XG4gICAgICAgIGJhY2t1cFBoeXNpY3Muc29sdmVyID0gYWxsT3B0aW9ucy5waHlzaWNzLnNvbHZlciB8fCBcImJhcm5lc0h1dFwiO1xuICAgICAgICBhbGxPcHRpb25zLnBoeXNpY3Muc29sdmVyID0gXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIjtcbiAgICAgIH0gZWxzZSBpZiAoYWxsT3B0aW9ucy5waHlzaWNzICE9PSBmYWxzZSkge1xuICAgICAgICBiYWNrdXBQaHlzaWNzLnNvbHZlciA9IFwiYmFybmVzSHV0XCI7XG4gICAgICAgIGFsbE9wdGlvbnMucGh5c2ljcyA9IHsgc29sdmVyOiBcImhpZXJhcmNoaWNhbFJlcHVsc2lvblwiIH07XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCB0aGUgdHlwZSBvZiBzdGF0aWMgc21vb3RoIGN1cnZlIGluIGNhc2UgaXQgaXMgcmVxdWlyZWRcbiAgICAgIGxldCB0eXBlID0gdGhpcy5kaXJlY3Rpb24uY3VydmVUeXBlKCk7XG5cbiAgICAgIC8vIGRpc2FibGUgc21vb3RoIGN1cnZlcyBpZiBub3RoaW5nIGlzIGRlZmluZWQuIElmIHNtb290aCBjdXJ2ZXMgaGF2ZSBiZWVuIHR1cm5lZCBvbixcbiAgICAgIC8vIHR1cm4gdGhlbSBpbnRvIHN0YXRpYyBzbW9vdGggY3VydmVzLlxuICAgICAgaWYgKGFsbE9wdGlvbnMuZWRnZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNCYWNrdXAuZWRnZXMgPSB7XG4gICAgICAgICAgc21vb3RoOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IFwiZHluYW1pY1wiIH0sXG4gICAgICAgIH07XG4gICAgICAgIGFsbE9wdGlvbnMuZWRnZXMgPSB7IHNtb290aDogZmFsc2UgfTtcbiAgICAgIH0gZWxzZSBpZiAoYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNCYWNrdXAuZWRnZXMgPSB7XG4gICAgICAgICAgc21vb3RoOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IFwiZHluYW1pY1wiIH0sXG4gICAgICAgIH07XG4gICAgICAgIGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0JhY2t1cC5lZGdlcyA9IHsgc21vb3RoOiBhbGxPcHRpb25zLmVkZ2VzLnNtb290aCB9O1xuICAgICAgICAgIGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID0ge1xuICAgICAgICAgICAgZW5hYmxlZDogYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGgsXG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc21vb3RoID0gYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGg7XG5cbiAgICAgICAgICAvLyBhbGxvdyBjdXN0b20gdHlwZXMgZXhjZXB0IGZvciBkeW5hbWljXG4gICAgICAgICAgaWYgKHNtb290aC50eXBlICE9PSB1bmRlZmluZWQgJiYgc21vb3RoLnR5cGUgIT09IFwiZHluYW1pY1wiKSB7XG4gICAgICAgICAgICB0eXBlID0gc21vb3RoLnR5cGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVE9ETzogdGhpcyBpcyBvcHRpb25zIG1lcmdpbmc7IHNlZSBpZiB0aGUgc3RhbmRhcmQgcm91dGluZXMgY2FuIGJlIHVzZWQgaGVyZS5cbiAgICAgICAgICB0aGlzLm9wdGlvbnNCYWNrdXAuZWRnZXMgPSB7XG4gICAgICAgICAgICBzbW9vdGg6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogc21vb3RoLmVuYWJsZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBzbW9vdGguZW5hYmxlZCxcbiAgICAgICAgICAgICAgdHlwZTogc21vb3RoLnR5cGUgPT09IHVuZGVmaW5lZCA/IFwiZHluYW1pY1wiIDogc21vb3RoLnR5cGUsXG4gICAgICAgICAgICAgIHJvdW5kbmVzczpcbiAgICAgICAgICAgICAgICBzbW9vdGgucm91bmRuZXNzID09PSB1bmRlZmluZWQgPyAwLjUgOiBzbW9vdGgucm91bmRuZXNzLFxuICAgICAgICAgICAgICBmb3JjZURpcmVjdGlvbjpcbiAgICAgICAgICAgICAgICBzbW9vdGguZm9yY2VEaXJlY3Rpb24gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgICAgOiBzbW9vdGguZm9yY2VEaXJlY3Rpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICAvLyBOT1RFOiBDb3B5aW5nIGFuIG9iamVjdCB0byBzZWxmOyB0aGlzIGlzIGJhc2ljYWxseSBzZXR0aW5nIGRlZmF1bHRzIGZvciB1bmRlZmluZWQgdmFyaWFibGVzXG4gICAgICAgICAgYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGggPSB7XG4gICAgICAgICAgICBlbmFibGVkOiBzbW9vdGguZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHNtb290aC5lbmFibGVkLFxuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIHJvdW5kbmVzczogc21vb3RoLnJvdW5kbmVzcyA9PT0gdW5kZWZpbmVkID8gMC41IDogc21vb3RoLnJvdW5kbmVzcyxcbiAgICAgICAgICAgIGZvcmNlRGlyZWN0aW9uOlxuICAgICAgICAgICAgICBzbW9vdGguZm9yY2VEaXJlY3Rpb24gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6IHNtb290aC5mb3JjZURpcmVjdGlvbixcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEZvcmNlIGFsbCBlZGdlcyBpbnRvIHN0YXRpYyBzbW9vdGggY3VydmVzLlxuICAgICAgLy8gT25seSBhcHBsaWVzIHRvIGVkZ2VzIHRoYXQgZG8gbm90IHVzZSB0aGUgZ2xvYmFsIG9wdGlvbnMgZm9yIHNtb290aC5cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZm9yY2VEaXNhYmxlRHluYW1pY0N1cnZlc1wiLCB0eXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWxsT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gbm9kZXNBcnJheVxuICAgKi9cbiAgcG9zaXRpb25Jbml0aWFsbHkobm9kZXNBcnJheSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmVuYWJsZWQgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuX3Jlc2V0Uk5HKHRoaXMuaW5pdGlhbFJhbmRvbVNlZWQpO1xuICAgICAgY29uc3QgcmFkaXVzID0gbm9kZXNBcnJheS5sZW5ndGggKyA1MDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBub2RlID0gbm9kZXNBcnJheVtpXTtcbiAgICAgICAgY29uc3QgYW5nbGUgPSAyICogTWF0aC5QSSAqIHRoaXMuX3JuZygpO1xuICAgICAgICBpZiAobm9kZS54ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub2RlLnggPSByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUueSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbm9kZS55ID0gcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBLYW1hZGEgS2F3YWkgdG8gcG9zaXRpb24gbm9kZXMuIFRoaXMgaXMgcXVpdGUgYSBoZWF2eSBhbGdvcml0aG0gc28gaWYgdGhlcmUgYXJlIGEgbG90IG9mIG5vZGVzIHdlXG4gICAqIGNsdXN0ZXIgdGhlbSBmaXJzdCB0byByZWR1Y2UgdGhlIGFtb3VudC5cbiAgICovXG4gIGxheW91dE5ldHdvcmsoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lbmFibGVkICE9PSB0cnVlICYmXG4gICAgICB0aGlzLm9wdGlvbnMuaW1wcm92ZWRMYXlvdXQgPT09IHRydWVcbiAgICApIHtcbiAgICAgIGNvbnN0IGluZGljZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG5cbiAgICAgIC8vIGZpcnN0IGNoZWNrIGlmIHdlIHNob3VsZCBLYW1hZGEgS2F3YWkgdG8gbGF5b3V0LiBUaGUgdGhyZXNob2xkIGlzIGlmIGxlc3MgdGhhbiBoYWxmIG9mIHRoZSB2aXNpYmxlXG4gICAgICAvLyBub2RlcyBoYXZlIHByZWRlZmluZWQgcG9zaXRpb25zIHdlIHVzZSB0aGlzLlxuICAgICAgbGV0IHBvc2l0aW9uRGVmaW5lZCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpbmRpY2VzW2ldXTtcbiAgICAgICAgaWYgKG5vZGUucHJlZGVmaW5lZFBvc2l0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgcG9zaXRpb25EZWZpbmVkICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gaWYgbGVzcyB0aGFuIGhhbGYgb2YgdGhlIG5vZGVzIGhhdmUgYSBwcmVkZWZpbmVkIHBvc2l0aW9uIHdlIGNvbnRpbnVlXG4gICAgICBpZiAocG9zaXRpb25EZWZpbmVkIDwgMC41ICogaW5kaWNlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgTUFYX0xFVkVMUyA9IDEwO1xuICAgICAgICBsZXQgbGV2ZWwgPSAwO1xuICAgICAgICBjb25zdCBjbHVzdGVyVGhyZXNob2xkID0gdGhpcy5vcHRpb25zLmNsdXN0ZXJUaHJlc2hvbGQ7XG5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gRGVmaW5lIHRoZSBvcHRpb25zIGZvciB0aGUgaGlkZGVuIGNsdXN0ZXIgbm9kZXNcbiAgICAgICAgLy8gVGhlc2Ugb3B0aW9ucyBkb24ndCBwcm9wYWdhdGUgb3V0c2lkZSB0aGUgY2x1c3RlcmluZyBwaGFzZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gU29tZSBvcHRpb25zIGFyZSBleHBsaWNpdGx5IGRpc2FibGVkLCBiZWNhdXNlIHRoZXkgbWF5IGJlIHNldCBpbiBncm91cCBvciBkZWZhdWx0IG5vZGUgb3B0aW9ucy5cbiAgICAgICAgLy8gVGhlIGNsdXN0ZXJzIGFyZSBuZXZlciBkaXNwbGF5ZWQsIHNvIG1vc3QgZXhwbGljaXQgc2V0dGluZ3MgaGVyZSBzZXJ2ZSBhcyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGUgZXhwbGljaXQgc2V0dGluZyBvZiAnc2hhcGUnIGlzIHRvIGF2b2lkIGBzaGFwZTogJ2ltYWdlJ2A7IGltYWdlcyBhcmUgbm90IHBhc3NlZCB0byB0aGUgaGlkZGVuXG4gICAgICAgIC8vIGNsdXN0ZXIgbm9kZXMsIGxlYWRpbmcgdG8gYW4gZXhjZXB0aW9uIG9uIGNyZWF0aW9uLlxuICAgICAgICAvL1xuICAgICAgICAvLyBBbGwgc2V0dGluZ3MgaGVyZSBhcmUgcGVyZm9ybWFuY2UgcmVsYXRlZCwgZXhjZXB0IHdoZW4gbm90ZWQgb3RoZXJ3aXNlLlxuICAgICAgICAvL1xuICAgICAgICBjb25zdCBjbHVzdGVyT3B0aW9ucyA9IHtcbiAgICAgICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNoYXBlOiBcImVsbGlwc2VcIiwgLy8gQnVnZml4OiBhdm9pZCB0eXBlICdpbWFnZScsIG5vIGltYWdlcyBzdXBwbGllZFxuICAgICAgICAgICAgbGFiZWw6IFwiXCIsIC8vIGF2b2lkIGxhYmVsIGhhbmRsaW5nXG4gICAgICAgICAgICBncm91cDogXCJcIiwgLy8gYXZvaWQgZ3JvdXAgaGFuZGxpbmdcbiAgICAgICAgICAgIGZvbnQ6IHsgbXVsdGk6IGZhbHNlIH0sIC8vIGF2b2lkIGZvbnQgcHJvcGFnYXRpb25cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFiZWw6IFwiXCIsIC8vIGF2b2lkIGxhYmVsIGhhbmRsaW5nXG4gICAgICAgICAgICBmb250OiB7IG11bHRpOiBmYWxzZSB9LCAvLyBhdm9pZCBmb250IHByb3BhZ2F0aW9uXG4gICAgICAgICAgICBzbW9vdGg6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsIC8vIGF2b2lkIGRyYXdpbmcgcGVuYWx0eSBmb3IgY29tcGxleCBlZGdlc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSBhIGxvdCBvZiBub2Rlcywgd2UgY2x1c3RlciBiZWZvcmUgd2UgcnVuIHRoZSBhbGdvcml0aG0uXG4gICAgICAgIC8vIE5PVEU6IHRoaXMgcGFydCBmYWlscyB0byBmaW5kIGNsdXN0ZXJzIGZvciBsYXJnZSBzY2FsZS1mcmVlIG5ldHdvcmtzLCB3aGljaCBzaG91bGRcbiAgICAgICAgLy8gICAgICAgYmUgZWFzaWx5IGNsdXN0ZXJhYmxlLlxuICAgICAgICAvLyBUT0RPOiBleGFtaW5lIHdoeSB0aGlzIGlzIHNvXG4gICAgICAgIGlmIChpbmRpY2VzLmxlbmd0aCA+IGNsdXN0ZXJUaHJlc2hvbGQpIHtcbiAgICAgICAgICBjb25zdCBzdGFydExlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpbmRpY2VzLmxlbmd0aCA+IGNsdXN0ZXJUaHJlc2hvbGQgJiYgbGV2ZWwgPD0gTUFYX0xFVkVMUykge1xuICAgICAgICAgICAgLy9jb25zb2xlLnRpbWUoXCJjbHVzdGVyaW5nXCIpXG4gICAgICAgICAgICBsZXZlbCArPSAxO1xuICAgICAgICAgICAgY29uc3QgYmVmb3JlID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUgbWFueSBub2RlcyB3ZSBkbyBhIGh1YnNpemUgY2x1c3RlclxuICAgICAgICAgICAgaWYgKGxldmVsICUgMyA9PT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLmJvZHkubW9kdWxlcy5jbHVzdGVyaW5nLmNsdXN0ZXJCcmlkZ2VzKGNsdXN0ZXJPcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuYm9keS5tb2R1bGVzLmNsdXN0ZXJpbmcuY2x1c3Rlck91dGxpZXJzKGNsdXN0ZXJPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFmdGVyID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoYmVmb3JlID09IGFmdGVyICYmIGxldmVsICUgMyAhPT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLl9kZWNsdXN0ZXJBbGwoKTtcbiAgICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9sYXlvdXRGYWlsZWRcIik7XG4gICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgICAgICBcIlRoaXMgbmV0d29yayBjb3VsZCBub3QgYmUgcG9zaXRpb25lZCBieSB0aGlzIHZlcnNpb24gb2YgdGhlIGltcHJvdmVkIGxheW91dCBhbGdvcml0aG0uXCIgK1xuICAgICAgICAgICAgICAgICAgXCIgUGxlYXNlIGRpc2FibGUgaW1wcm92ZWRMYXlvdXQgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NvbnNvbGUudGltZUVuZChcImNsdXN0ZXJpbmdcIilcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYmVmb3JlLGxldmVsLGFmdGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGVkZ2VzXG4gICAgICAgICAgdGhpcy5ib2R5Lm1vZHVsZXMua2FtYWRhS2F3YWkuc2V0T3B0aW9ucyh7XG4gICAgICAgICAgICBzcHJpbmdMZW5ndGg6IE1hdGgubWF4KDE1MCwgMiAqIHN0YXJ0TGVuZ3RoKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGV2ZWwgPiBNQVhfTEVWRUxTKSB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgXCJUaGUgY2x1c3RlcmluZyBkaWRuJ3Qgc3VjY2VlZCB3aXRoaW4gdGhlIGFtb3VudCBvZiBpbnRlcmF0aW9ucyBhbGxvd2VkLFwiICtcbiAgICAgICAgICAgICAgXCIgcHJvZ3Jlc3Npbmcgd2l0aCBwYXJ0aWFsIHJlc3VsdC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwb3NpdGlvbiB0aGUgc3lzdGVtIGZvciB0aGVzZSBub2RlcyBhbmQgZWRnZXNcbiAgICAgICAgdGhpcy5ib2R5Lm1vZHVsZXMua2FtYWRhS2F3YWkuc29sdmUoXG4gICAgICAgICAgaW5kaWNlcyxcbiAgICAgICAgICB0aGlzLmJvZHkuZWRnZUluZGljZXMsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHNoaWZ0IHRvIGNlbnRlciBwb2ludFxuICAgICAgICB0aGlzLl9zaGlmdFRvQ2VudGVyKCk7XG5cbiAgICAgICAgLy8gcGVydHVyYiB0aGUgbm9kZXMgYSBsaXR0bGUgYml0IHRvIGZvcmNlIHRoZSBwaHlzaWNzIHRvIGtpY2sgaW5cbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gNzA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIC8vIE9ubHkgcGVydHVyYiB0aGUgbm9kZXMgdGhhdCBhcmVuJ3QgZml4ZWRcbiAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW2luZGljZXNbaV1dO1xuICAgICAgICAgIGlmIChub2RlLnByZWRlZmluZWRQb3NpdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG5vZGUueCArPSAoMC41IC0gdGhpcy5fcm5nKCkpICogb2Zmc2V0O1xuICAgICAgICAgICAgbm9kZS55ICs9ICgwLjUgLSB0aGlzLl9ybmcoKSkgKiBvZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW5jbHVzdGVyIGFsbCBjbHVzdGVyc1xuICAgICAgICB0aGlzLl9kZWNsdXN0ZXJBbGwoKTtcblxuICAgICAgICAvLyByZXBvc2l0aW9uIGFsbCBiZXppZXIgbm9kZXMuXG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVwb3NpdGlvbkJlemllck5vZGVzXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIGFsbCB0aGUgbm9kZXMgdG93YXJkcyB0byB0aGUgY2VudGVyIHNvIGdyYXZpdGF0aW9uYWwgcHVsbCB3aWwgbm90IG1vdmUgdGhlIG5vZGVzIGF3YXkgZnJvbSB2aWV3XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hpZnRUb0NlbnRlcigpIHtcbiAgICBjb25zdCByYW5nZSA9IE5ldHdvcmtVdGlsLmdldFJhbmdlQ29yZShcbiAgICAgIHRoaXMuYm9keS5ub2RlcyxcbiAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlc1xuICAgICk7XG4gICAgY29uc3QgY2VudGVyID0gTmV0d29ya1V0aWwuZmluZENlbnRlcihyYW5nZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldXTtcbiAgICAgIG5vZGUueCAtPSBjZW50ZXIueDtcbiAgICAgIG5vZGUueSAtPSBjZW50ZXIueTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kcyBhbGwgY2x1c3RlcnNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZWNsdXN0ZXJBbGwoKSB7XG4gICAgbGV0IGNsdXN0ZXJzUHJlc2VudCA9IHRydWU7XG4gICAgd2hpbGUgKGNsdXN0ZXJzUHJlc2VudCA9PT0gdHJ1ZSkge1xuICAgICAgY2x1c3RlcnNQcmVzZW50ID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV0uaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgY2x1c3RlcnNQcmVzZW50ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmJvZHkubW9kdWxlcy5jbHVzdGVyaW5nLm9wZW5DbHVzdGVyKFxuICAgICAgICAgICAgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjbHVzdGVyc1ByZXNlbnQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcnwqfVxuICAgKi9cbiAgZ2V0U2VlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsUmFuZG9tU2VlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIHRvIGxheW91dCB0aGUgbm9kZXMgaW4gYSBoaWVyYXJjaGljYWwgd2F5LlxuICAgKiBJdCBjaGVja3MgaWYgdGhlIG5vZGUgZGV0YWlscyBhcmUgc3VwcGxpZWQgY29ycmVjdGx5XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXR1cEhpZXJhcmNoaWNhbExheW91dCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICAvLyBnZXQgdGhlIHNpemUgb2YgdGhlIGxhcmdlc3QgaHVicyBhbmQgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIGRlZmluZWQgYSBsZXZlbCBmb3IgYSBub2RlLlxuICAgICAgbGV0IG5vZGUsIG5vZGVJZDtcbiAgICAgIGxldCBkZWZpbmVkTGV2ZWwgPSBmYWxzZTtcbiAgICAgIGxldCB1bmRlZmluZWRMZXZlbCA9IGZhbHNlO1xuICAgICAgdGhpcy5sYXN0Tm9kZU9uTGV2ZWwgPSB7fTtcbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsID0gbmV3IEhpZXJhcmNoaWNhbFN0YXR1cygpO1xuXG4gICAgICBmb3IgKG5vZGVJZCBpbiB0aGlzLmJvZHkubm9kZXMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkubm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgICAgaWYgKG5vZGUub3B0aW9ucy5sZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkZWZpbmVkTGV2ZWwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW25vZGVJZF0gPSBub2RlLm9wdGlvbnMubGV2ZWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuZGVmaW5lZExldmVsID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIHVzZXIgZGVmaW5lZCBzb21lIGxldmVscyBidXQgbm90IGFsbCwgYWxlcnQgYW5kIHJ1biB3aXRob3V0IGhpZXJhcmNoaWNhbCBsYXlvdXRcbiAgICAgIGlmICh1bmRlZmluZWRMZXZlbCA9PT0gdHJ1ZSAmJiBkZWZpbmVkTGV2ZWwgPT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVG8gdXNlIHRoZSBoaWVyYXJjaGljYWwgbGF5b3V0LCBub2RlcyByZXF1aXJlIGVpdGhlciBubyBwcmVkZWZpbmVkIGxldmVsc1wiICtcbiAgICAgICAgICAgIFwiIG9yIGxldmVscyBoYXZlIHRvIGJlIGRlZmluZWQgZm9yIGFsbCBub2Rlcy5cIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmaW5lIGxldmVscyBpZiB1bmRlZmluZWQgYnkgdGhlIHVzZXJzLiBCYXNlZCBvbiBodWJzaXplLlxuICAgICAgICBpZiAodW5kZWZpbmVkTGV2ZWwgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBzb3J0TWV0aG9kID0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5zb3J0TWV0aG9kO1xuICAgICAgICAgIGlmIChzb3J0TWV0aG9kID09PSBcImh1YnNpemVcIikge1xuICAgICAgICAgICAgdGhpcy5fZGV0ZXJtaW5lTGV2ZWxzQnlIdWJzaXplKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzb3J0TWV0aG9kID09PSBcImRpcmVjdGVkXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RldGVybWluZUxldmVsc0RpcmVjdGVkKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzb3J0TWV0aG9kID09PSBcImN1c3RvbVwiKSB7XG4gICAgICAgICAgICB0aGlzLl9kZXRlcm1pbmVMZXZlbHNDdXN0b21DYWxsYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZhbGxiYWNrIGZvciBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgbm9kZXMgYnV0IG5vIGVkZ2VzXG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5lbnN1cmVMZXZlbChub2RlSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBub2RlcyBwZXIgbGV2ZWwuXG4gICAgICAgIGNvbnN0IGRpc3RyaWJ1dGlvbiA9IHRoaXMuX2dldERpc3RyaWJ1dGlvbigpO1xuXG4gICAgICAgIC8vIGdldCB0aGUgcGFyZW50IGNoaWxkcmVuIHJlbGF0aW9ucy5cbiAgICAgICAgdGhpcy5fZ2VuZXJhdGVNYXAoKTtcblxuICAgICAgICAvLyBwbGFjZSB0aGUgbm9kZXMgb24gdGhlIGNhbnZhcy5cbiAgICAgICAgdGhpcy5fcGxhY2VOb2Rlc0J5SGllcmFyY2h5KGRpc3RyaWJ1dGlvbik7XG5cbiAgICAgICAgLy8gY29uZGVuc2UgdGhlIHdoaXRlc3BhY2UuXG4gICAgICAgIHRoaXMuX2NvbmRlbnNlSGllcmFyY2h5KCk7XG5cbiAgICAgICAgLy8gc2hpZnQgdG8gY2VudGVyIHNvIGdyYXZpdHkgZG9lcyBub3QgaGF2ZSB0byBkbyBtdWNoXG4gICAgICAgIHRoaXMuX3NoaWZ0VG9DZW50ZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb25kZW5zZUhpZXJhcmNoeSgpIHtcbiAgICAvLyBHbG9iYWwgdmFyIGluIHRoaXMgc2NvcGUgdG8gZGVmaW5lIHdoZW4gdGhlIG1vdmVtZW50IGhhcyBzdG9wcGVkLlxuICAgIGxldCBzdGlsbFNoaWZ0aW5nID0gZmFsc2U7XG4gICAgY29uc3QgYnJhbmNoZXMgPSB7fTtcbiAgICAvLyBmaXJzdCB3ZSBoYXZlIHNvbWUgbWV0aG9kcyB0byBoZWxwIHNoaWZ0aW5nIHRyZWVzIGFyb3VuZC5cbiAgICAvLyB0aGUgbWFpbiBtZXRob2QgdG8gc2hpZnQgdGhlIHRyZWVzXG4gICAgY29uc3Qgc2hpZnRUcmVlcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHRyZWVTaXplcyA9IGdldFRyZWVTaXplcygpO1xuICAgICAgbGV0IHNoaWZ0QnkgPSAwO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmVlU2l6ZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRpZmYgPSB0cmVlU2l6ZXNbaV0ubWF4IC0gdHJlZVNpemVzW2kgKyAxXS5taW47XG4gICAgICAgIHNoaWZ0QnkgKz0gZGlmZiArIHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwudHJlZVNwYWNpbmc7XG4gICAgICAgIHNoaWZ0VHJlZShpICsgMSwgc2hpZnRCeSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHNoaWZ0IGEgc2luZ2xlIHRyZWUgYnkgYW4gb2Zmc2V0XG4gICAgY29uc3Qgc2hpZnRUcmVlID0gKGluZGV4LCBvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IHRyZWVzID0gdGhpcy5oaWVyYXJjaGljYWwudHJlZXM7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRyZWVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodHJlZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBpZiAodHJlZXNbbm9kZUlkXSA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLnNoaWZ0KG5vZGVJZCwgb2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gZ2V0IHRoZSB3aWR0aCBvZiBhbGwgdHJlZXNcbiAgICBjb25zdCBnZXRUcmVlU2l6ZXMgPSAoKSA9PiB7XG4gICAgICBjb25zdCB0cmVlV2lkdGhzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaGllcmFyY2hpY2FsLm51bVRyZWVzKCk7IGkrKykge1xuICAgICAgICB0cmVlV2lkdGhzLnB1c2godGhpcy5kaXJlY3Rpb24uZ2V0VHJlZVNpemUoaSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyZWVXaWR0aHM7XG4gICAgfTtcblxuICAgIC8vIGdldCBhIG1hcCBvZiBhbGwgbm9kZXMgaW4gdGhpcyBicmFuY2hcbiAgICBjb25zdCBnZXRCcmFuY2hOb2RlcyA9IChzb3VyY2UsIG1hcCkgPT4ge1xuICAgICAgaWYgKG1hcFtzb3VyY2UuaWRdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG1hcFtzb3VyY2UuaWRdID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLmhpZXJhcmNoaWNhbC5jaGlsZHJlblJlZmVyZW5jZVtzb3VyY2UuaWRdKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5oaWVyYXJjaGljYWwuY2hpbGRyZW5SZWZlcmVuY2Vbc291cmNlLmlkXTtcbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBnZXRCcmFuY2hOb2Rlcyh0aGlzLmJvZHkubm9kZXNbY2hpbGRyZW5baV1dLCBtYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBnZXQgYSBtaW4gbWF4IHdpZHRoIGFzIHdlbGwgYXMgdGhlIG1heGltdW0gbW92ZW1lbnQgc3BhY2UgaXQgaGFzIG9uIGVpdGhlciBzaWRlc1xuICAgIC8vIHdlIHVzZSBtaW4gbWF4IHRlcm1pbm9sb2d5IGJlY2F1c2Ugd2lkdGggYW5kIGhlaWdodCBjYW4gaW50ZXJjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGxheW91dFxuICAgIGNvbnN0IGdldEJyYW5jaEJvdW5kYXJ5ID0gKGJyYW5jaE1hcCwgbWF4TGV2ZWwgPSAxZTkpID0+IHtcbiAgICAgIGxldCBtaW5TcGFjZSA9IDFlOTtcbiAgICAgIGxldCBtYXhTcGFjZSA9IDFlOTtcbiAgICAgIGxldCBtaW4gPSAxZTk7XG4gICAgICBsZXQgbWF4ID0gLTFlOTtcbiAgICAgIGZvciAoY29uc3QgYnJhbmNoTm9kZSBpbiBicmFuY2hNYXApIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChicmFuY2hNYXAsIGJyYW5jaE5vZGUpKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1ticmFuY2hOb2RlXTtcbiAgICAgICAgICBjb25zdCBsZXZlbCA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlLmlkXTtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuXG4gICAgICAgICAgLy8gZ2V0IHRoZSBzcGFjZSBhcm91bmQgdGhlIG5vZGUuXG4gICAgICAgICAgY29uc3QgW21pblNwYWNlTm9kZSwgbWF4U3BhY2VOb2RlXSA9IHRoaXMuX2dldFNwYWNlQXJvdW5kTm9kZShcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBicmFuY2hNYXBcbiAgICAgICAgICApO1xuICAgICAgICAgIG1pblNwYWNlID0gTWF0aC5taW4obWluU3BhY2VOb2RlLCBtaW5TcGFjZSk7XG4gICAgICAgICAgbWF4U3BhY2UgPSBNYXRoLm1pbihtYXhTcGFjZU5vZGUsIG1heFNwYWNlKTtcblxuICAgICAgICAgIC8vIHRoZSB3aWR0aCBpcyBvbmx5IHJlbGV2YW50IGZvciB0aGUgbGV2ZWxzIHR3byBub2RlcyBoYXZlIGluIGNvbW1vbi4gVGhpcyBpcyB3aHkgd2UgZmlsdGVyIG9uIHRoaXMuXG4gICAgICAgICAgaWYgKGxldmVsIDw9IG1heExldmVsKSB7XG4gICAgICAgICAgICBtaW4gPSBNYXRoLm1pbihwb3NpdGlvbiwgbWluKTtcbiAgICAgICAgICAgIG1heCA9IE1hdGgubWF4KHBvc2l0aW9uLCBtYXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gW21pbiwgbWF4LCBtaW5TcGFjZSwgbWF4U3BhY2VdO1xuICAgIH07XG5cbiAgICAvLyBjaGVjayB3aGF0IHRoZSBtYXhpbXVtIGxldmVsIGlzIHRoZXNlIG5vZGVzIGhhdmUgaW4gY29tbW9uLlxuICAgIGNvbnN0IGdldENvbGxpc2lvbkxldmVsID0gKG5vZGUxLCBub2RlMikgPT4ge1xuICAgICAgY29uc3QgbWF4TGV2ZWwxID0gdGhpcy5oaWVyYXJjaGljYWwuZ2V0TWF4TGV2ZWwobm9kZTEuaWQpO1xuICAgICAgY29uc3QgbWF4TGV2ZWwyID0gdGhpcy5oaWVyYXJjaGljYWwuZ2V0TWF4TGV2ZWwobm9kZTIuaWQpO1xuICAgICAgcmV0dXJuIE1hdGgubWluKG1heExldmVsMSwgbWF4TGV2ZWwyKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ29uZGVuc2UgZWxlbWVudHMuIFRoZXNlIGNhbiBiZSBub2RlcyBvciBicmFuY2hlcyBkZXBlbmRpbmcgb24gdGhlIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBsZXZlbHNcbiAgICAgKiBAcGFyYW0geyp9IGNlbnRlclBhcmVudHNcbiAgICAgKi9cbiAgICBjb25zdCBzaGlmdEVsZW1lbnRzQ2xvc2VyID0gKGNhbGxiYWNrLCBsZXZlbHMsIGNlbnRlclBhcmVudHMpID0+IHtcbiAgICAgIGNvbnN0IGhpZXIgPSB0aGlzLmhpZXJhcmNoaWNhbDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZXZlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbGV2ZWwgPSBsZXZlbHNbaV07XG4gICAgICAgIGNvbnN0IGxldmVsTm9kZXMgPSBoaWVyLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXTtcbiAgICAgICAgaWYgKGxldmVsTm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV2ZWxOb2Rlcy5sZW5ndGggLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUxID0gbGV2ZWxOb2Rlc1tqXTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUyID0gbGV2ZWxOb2Rlc1tqICsgMV07XG5cbiAgICAgICAgICAgIC8vIE5PVEU6IGxvZ2ljIG1haW50YWluZWQgYXMgaXQgd2FzOyBpZiBub2RlcyBoYXZlIHNhbWUgYW5jZXN0b3IsXG4gICAgICAgICAgICAvLyAgICAgICB0aGVuIG9mIGNvdXJzZSB0aGV5IGFyZSBpbiB0aGUgc2FtZSBzdWItbmV0d29yay5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaGllci5oYXNTYW1lUGFyZW50KG5vZGUxLCBub2RlMikgJiZcbiAgICAgICAgICAgICAgaGllci5pblNhbWVTdWJOZXR3b3JrKG5vZGUxLCBub2RlMilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjYWxsYmFjayhub2RlMSwgbm9kZTIsIGNlbnRlclBhcmVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBjYWxsYmFjayBmb3Igc2hpZnRpbmcgYnJhbmNoZXNcbiAgICBjb25zdCBicmFuY2hTaGlmdENhbGxiYWNrID0gKG5vZGUxLCBub2RlMiwgY2VudGVyUGFyZW50ID0gZmFsc2UpID0+IHtcbiAgICAgIC8vd2luZG93LkNBTExCQUNLUy5wdXNoKCgpID0+IHtcbiAgICAgIGNvbnN0IHBvczEgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihub2RlMSk7XG4gICAgICBjb25zdCBwb3MyID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24obm9kZTIpO1xuICAgICAgY29uc3QgZGlmZkFicyA9IE1hdGguYWJzKHBvczIgLSBwb3MxKTtcbiAgICAgIGNvbnN0IG5vZGVTcGFjaW5nID0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZztcbiAgICAgIC8vY29uc29sZS5sb2coXCJOT1cgQ0hFQ0tJTkc6XCIsIG5vZGUxLmlkLCBub2RlMi5pZCwgZGlmZkFicyk7XG4gICAgICBpZiAoZGlmZkFicyA+IG5vZGVTcGFjaW5nKSB7XG4gICAgICAgIGNvbnN0IGJyYW5jaE5vZGVzMSA9IHt9O1xuICAgICAgICBjb25zdCBicmFuY2hOb2RlczIgPSB7fTtcblxuICAgICAgICBnZXRCcmFuY2hOb2Rlcyhub2RlMSwgYnJhbmNoTm9kZXMxKTtcbiAgICAgICAgZ2V0QnJhbmNoTm9kZXMobm9kZTIsIGJyYW5jaE5vZGVzMik7XG5cbiAgICAgICAgLy8gY2hlY2sgdGhlIGxhcmdlc3QgZGlzdGFuY2UgYmV0d2VlbiB0aGUgYnJhbmNoZXNcbiAgICAgICAgY29uc3QgbWF4TGV2ZWwgPSBnZXRDb2xsaXNpb25MZXZlbChub2RlMSwgbm9kZTIpO1xuICAgICAgICBjb25zdCBicmFuY2hOb2RlQm91bmRhcnkxID0gZ2V0QnJhbmNoQm91bmRhcnkoYnJhbmNoTm9kZXMxLCBtYXhMZXZlbCk7XG4gICAgICAgIGNvbnN0IGJyYW5jaE5vZGVCb3VuZGFyeTIgPSBnZXRCcmFuY2hCb3VuZGFyeShicmFuY2hOb2RlczIsIG1heExldmVsKTtcbiAgICAgICAgY29uc3QgbWF4MSA9IGJyYW5jaE5vZGVCb3VuZGFyeTFbMV07XG4gICAgICAgIGNvbnN0IG1pbjIgPSBicmFuY2hOb2RlQm91bmRhcnkyWzBdO1xuICAgICAgICBjb25zdCBtaW5TcGFjZTIgPSBicmFuY2hOb2RlQm91bmRhcnkyWzJdO1xuXG4gICAgICAgIC8vY29uc29sZS5sb2cobm9kZTEuaWQsIGdldEJyYW5jaEJvdW5kYXJ5KGJyYW5jaE5vZGVzMSwgbWF4TGV2ZWwpLCBub2RlMi5pZCxcbiAgICAgICAgLy8gICAgICAgICAgICBnZXRCcmFuY2hCb3VuZGFyeShicmFuY2hOb2RlczIsIG1heExldmVsKSwgbWF4TGV2ZWwpO1xuICAgICAgICBjb25zdCBkaWZmQnJhbmNoID0gTWF0aC5hYnMobWF4MSAtIG1pbjIpO1xuICAgICAgICBpZiAoZGlmZkJyYW5jaCA+IG5vZGVTcGFjaW5nKSB7XG4gICAgICAgICAgbGV0IG9mZnNldCA9IG1heDEgLSBtaW4yICsgbm9kZVNwYWNpbmc7XG4gICAgICAgICAgaWYgKG9mZnNldCA8IC1taW5TcGFjZTIgKyBub2RlU3BhY2luZykge1xuICAgICAgICAgICAgb2Zmc2V0ID0gLW1pblNwYWNlMiArIG5vZGVTcGFjaW5nO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlJFU0VUVElORyBPRkZTRVRcIiwgbWF4MSAtIG1pbjIgKyB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nLCAtbWluU3BhY2UyLCBvZmZzZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlNISUZUSU5HXCIsIG5vZGUyLmlkLCBvZmZzZXQpO1xuICAgICAgICAgICAgdGhpcy5fc2hpZnRCbG9jayhub2RlMi5pZCwgb2Zmc2V0KTtcbiAgICAgICAgICAgIHN0aWxsU2hpZnRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoY2VudGVyUGFyZW50ID09PSB0cnVlKSB0aGlzLl9jZW50ZXJQYXJlbnQobm9kZTIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy90aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTt9KVxuICAgIH07XG5cbiAgICBjb25zdCBtaW5pbWl6ZUVkZ2VMZW5ndGggPSAoaXRlcmF0aW9ucywgbm9kZSkgPT4ge1xuICAgICAgLy93aW5kb3cuQ0FMTEJBQ0tTLnB1c2goKCkgPT4ge1xuICAgICAgLy8gIGNvbnNvbGUubG9nKFwidHNcIixub2RlLmlkKTtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IG5vZGUuaWQ7XG4gICAgICBjb25zdCBhbGxFZGdlcyA9IG5vZGUuZWRnZXM7XG4gICAgICBjb25zdCBub2RlTGV2ZWwgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZS5pZF07XG5cbiAgICAgIC8vIGdhdGhlciBjb25zdGFudHNcbiAgICAgIGNvbnN0IEMyID1cbiAgICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gKlxuICAgICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbjtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGVzID0ge307XG4gICAgICBjb25zdCBhYm92ZUVkZ2VzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbEVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBhbGxFZGdlc1tpXTtcbiAgICAgICAgaWYgKGVkZ2UudG9JZCAhPSBlZGdlLmZyb21JZCkge1xuICAgICAgICAgIGNvbnN0IG90aGVyTm9kZSA9IGVkZ2UudG9JZCA9PSBub2RlSWQgPyBlZGdlLmZyb20gOiBlZGdlLnRvO1xuICAgICAgICAgIHJlZmVyZW5jZU5vZGVzW2FsbEVkZ2VzW2ldLmlkXSA9IG90aGVyTm9kZTtcbiAgICAgICAgICBpZiAodGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW290aGVyTm9kZS5pZF0gPCBub2RlTGV2ZWwpIHtcbiAgICAgICAgICAgIGFib3ZlRWRnZXMucHVzaChlZGdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZGlmZmVyZW50aWF0ZWQgc3VtIG9mIGxlbmd0aHMgYmFzZWQgb24gb25seSBtb3Zpbmcgb25lIG5vZGUgb3ZlciBvbmUgYXhpc1xuICAgICAgY29uc3QgZ2V0RnggPSAocG9pbnQsIGVkZ2VzKSA9PiB7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlZmVyZW5jZU5vZGVzW2VkZ2VzW2ldLmlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBhID1cbiAgICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24ocmVmZXJlbmNlTm9kZXNbZWRnZXNbaV0uaWRdKSAtIHBvaW50O1xuICAgICAgICAgICAgc3VtICs9IGEgLyBNYXRoLnNxcnQoYSAqIGEgKyBDMik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgICB9O1xuXG4gICAgICAvLyBkb3VibHkgZGlmZmVyZW50aWF0ZWQgc3VtIG9mIGxlbmd0aHMgYmFzZWQgb24gb25seSBtb3Zpbmcgb25lIG5vZGUgb3ZlciBvbmUgYXhpc1xuICAgICAgY29uc3QgZ2V0REZ4ID0gKHBvaW50LCBlZGdlcykgPT4ge1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChyZWZlcmVuY2VOb2Rlc1tlZGdlc1tpXS5pZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgYSA9XG4gICAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKHJlZmVyZW5jZU5vZGVzW2VkZ2VzW2ldLmlkXSkgLSBwb2ludDtcbiAgICAgICAgICAgIHN1bSAtPSBDMiAqIE1hdGgucG93KGEgKiBhICsgQzIsIC0xLjUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VtO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZ2V0R3Vlc3MgPSAoaXRlcmF0aW9ucywgZWRnZXMpID0+IHtcbiAgICAgICAgbGV0IGd1ZXNzID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24obm9kZSk7XG4gICAgICAgIC8vIE5ld3RvbidzIG1ldGhvZCBmb3Igb3B0aW1pemF0aW9uXG4gICAgICAgIGNvbnN0IGd1ZXNzTWFwID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZnggPSBnZXRGeChndWVzcywgZWRnZXMpO1xuICAgICAgICAgIGNvbnN0IGRmeCA9IGdldERGeChndWVzcywgZWRnZXMpO1xuXG4gICAgICAgICAgLy8gd2UgbGltaXQgdGhlIG1vdmVtZW50IHRvIGF2b2lkIGluc3RhYmlsaXR5LlxuICAgICAgICAgIGNvbnN0IGxpbWl0ID0gNDA7XG4gICAgICAgICAgY29uc3QgcmF0aW8gPSBNYXRoLm1heCgtbGltaXQsIE1hdGgubWluKGxpbWl0LCBNYXRoLnJvdW5kKGZ4IC8gZGZ4KSkpO1xuICAgICAgICAgIGd1ZXNzID0gZ3Vlc3MgLSByYXRpbztcbiAgICAgICAgICAvLyByZWR1Y2UgZHVwbGljYXRlc1xuICAgICAgICAgIGlmIChndWVzc01hcFtndWVzc10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGd1ZXNzTWFwW2d1ZXNzXSA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGd1ZXNzO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgbW92ZUJyYW5jaCA9IChndWVzcykgPT4ge1xuICAgICAgICAvLyBwb3NpdGlvbiBub2RlIGlmIHRoZXJlIGlzIHNwYWNlXG4gICAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuXG4gICAgICAgIC8vIGNoZWNrIG1vdmFibGUgYXJlYSBvZiB0aGUgYnJhbmNoXG4gICAgICAgIGlmIChicmFuY2hlc1tub2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgYnJhbmNoTm9kZXMgPSB7fTtcbiAgICAgICAgICBnZXRCcmFuY2hOb2Rlcyhub2RlLCBicmFuY2hOb2Rlcyk7XG4gICAgICAgICAgYnJhbmNoZXNbbm9kZS5pZF0gPSBicmFuY2hOb2RlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBicmFuY2hCb3VuZGFyeSA9IGdldEJyYW5jaEJvdW5kYXJ5KGJyYW5jaGVzW25vZGUuaWRdKTtcbiAgICAgICAgY29uc3QgbWluU3BhY2VCcmFuY2ggPSBicmFuY2hCb3VuZGFyeVsyXTtcbiAgICAgICAgY29uc3QgbWF4U3BhY2VCcmFuY2ggPSBicmFuY2hCb3VuZGFyeVszXTtcblxuICAgICAgICBjb25zdCBkaWZmID0gZ3Vlc3MgLSBub2RlUG9zaXRpb247XG5cbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIGFsbG93ZWQgdG8gbW92ZSB0aGUgbm9kZTpcbiAgICAgICAgbGV0IGJyYW5jaE9mZnNldCA9IDA7XG4gICAgICAgIGlmIChkaWZmID4gMCkge1xuICAgICAgICAgIGJyYW5jaE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgICAgICAgZGlmZixcbiAgICAgICAgICAgIG1heFNwYWNlQnJhbmNoIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGlmZiA8IDApIHtcbiAgICAgICAgICBicmFuY2hPZmZzZXQgPSAtTWF0aC5taW4oXG4gICAgICAgICAgICAtZGlmZixcbiAgICAgICAgICAgIG1pblNwYWNlQnJhbmNoIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnJhbmNoT2Zmc2V0ICE9IDApIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwibW92aW5nIGJyYW5jaDpcIixicmFuY2hPZmZzZXQsIG1heFNwYWNlQnJhbmNoLCBtaW5TcGFjZUJyYW5jaClcbiAgICAgICAgICB0aGlzLl9zaGlmdEJsb2NrKG5vZGUuaWQsIGJyYW5jaE9mZnNldCk7XG4gICAgICAgICAgLy90aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgICAgICAgICBzdGlsbFNoaWZ0aW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW92ZU5vZGUgPSAoZ3Vlc3MpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZVBvc2l0aW9uID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24obm9kZSk7XG5cbiAgICAgICAgLy8gcG9zaXRpb24gbm9kZSBpZiB0aGVyZSBpcyBzcGFjZVxuICAgICAgICBjb25zdCBbbWluU3BhY2UsIG1heFNwYWNlXSA9IHRoaXMuX2dldFNwYWNlQXJvdW5kTm9kZShub2RlKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IGd1ZXNzIC0gbm9kZVBvc2l0aW9uO1xuICAgICAgICAvLyBjaGVjayBpZiB3ZSBhcmUgYWxsb3dlZCB0byBtb3ZlIHRoZSBub2RlOlxuICAgICAgICBsZXQgbmV3UG9zaXRpb24gPSBub2RlUG9zaXRpb247XG4gICAgICAgIGlmIChkaWZmID4gMCkge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gTWF0aC5taW4oXG4gICAgICAgICAgICBub2RlUG9zaXRpb24gKyAobWF4U3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKSxcbiAgICAgICAgICAgIGd1ZXNzXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChkaWZmIDwgMCkge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gTWF0aC5tYXgoXG4gICAgICAgICAgICBub2RlUG9zaXRpb24gLSAobWluU3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKSxcbiAgICAgICAgICAgIGd1ZXNzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdQb3NpdGlvbiAhPT0gbm9kZVBvc2l0aW9uKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIm1vdmluZyBOb2RlOlwiLGRpZmYsIG1pblNwYWNlLCBtYXhTcGFjZSk7XG4gICAgICAgICAgdGhpcy5kaXJlY3Rpb24uc2V0UG9zaXRpb24obm9kZSwgbmV3UG9zaXRpb24pO1xuICAgICAgICAgIC8vdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gICAgICAgICAgc3RpbGxTaGlmdGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGxldCBndWVzcyA9IGdldEd1ZXNzKGl0ZXJhdGlvbnMsIGFib3ZlRWRnZXMpO1xuICAgICAgbW92ZUJyYW5jaChndWVzcyk7XG4gICAgICBndWVzcyA9IGdldEd1ZXNzKGl0ZXJhdGlvbnMsIGFsbEVkZ2VzKTtcbiAgICAgIG1vdmVOb2RlKGd1ZXNzKTtcbiAgICAgIC8vfSlcbiAgICB9O1xuXG4gICAgLy8gbWV0aG9kIHRvIHJlbW92ZSB3aGl0ZXNwYWNlIGJldHdlZW4gYnJhbmNoZXMuIEJlY2F1c2Ugd2UgZG8gYm90dG9tIHVwLCB3ZSBjYW4gY2VudGVyIHRoZSBwYXJlbnRzLlxuICAgIGNvbnN0IG1pbmltaXplRWRnZUxlbmd0aEJvdHRvbVVwID0gKGl0ZXJhdGlvbnMpID0+IHtcbiAgICAgIGxldCBsZXZlbHMgPSB0aGlzLmhpZXJhcmNoaWNhbC5nZXRMZXZlbHMoKTtcbiAgICAgIGxldmVscyA9IGxldmVscy5yZXZlcnNlKCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICBzdGlsbFNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV2ZWxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY29uc3QgbGV2ZWwgPSBsZXZlbHNbal07XG4gICAgICAgICAgY29uc3QgbGV2ZWxOb2RlcyA9IHRoaXMuaGllcmFyY2hpY2FsLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXTtcbiAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxldmVsTm9kZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIG1pbmltaXplRWRnZUxlbmd0aCgxMDAwLCBsZXZlbE5vZGVzW2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0aWxsU2hpZnRpbmcgIT09IHRydWUpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiRklOSVNIRUQgbWluaW1pemVFZGdlTGVuZ3RoQm90dG9tVXAgSU4gXCIgKyBpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBtZXRob2QgdG8gcmVtb3ZlIHdoaXRlc3BhY2UgYmV0d2VlbiBicmFuY2hlcy4gQmVjYXVzZSB3ZSBkbyBib3R0b20gdXAsIHdlIGNhbiBjZW50ZXIgdGhlIHBhcmVudHMuXG4gICAgY29uc3Qgc2hpZnRCcmFuY2hlc0Nsb3NlckJvdHRvbVVwID0gKGl0ZXJhdGlvbnMpID0+IHtcbiAgICAgIGxldCBsZXZlbHMgPSB0aGlzLmhpZXJhcmNoaWNhbC5nZXRMZXZlbHMoKTtcbiAgICAgIGxldmVscyA9IGxldmVscy5yZXZlcnNlKCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICBzdGlsbFNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgIHNoaWZ0RWxlbWVudHNDbG9zZXIoYnJhbmNoU2hpZnRDYWxsYmFjaywgbGV2ZWxzLCB0cnVlKTtcbiAgICAgICAgaWYgKHN0aWxsU2hpZnRpbmcgIT09IHRydWUpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiRklOSVNIRUQgc2hpZnRCcmFuY2hlc0Nsb3NlckJvdHRvbVVwIElOIFwiICsgKGkrMSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGNlbnRlciBhbGwgcGFyZW50c1xuICAgIGNvbnN0IGNlbnRlckFsbFBhcmVudHMgPSAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0aGlzLmJvZHkubm9kZXMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkubm9kZXMsIG5vZGVJZCkpXG4gICAgICAgICAgdGhpcy5fY2VudGVyUGFyZW50KHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gY2VudGVyIGFsbCBwYXJlbnRzXG4gICAgY29uc3QgY2VudGVyQWxsUGFyZW50c0JvdHRvbVVwID0gKCkgPT4ge1xuICAgICAgbGV0IGxldmVscyA9IHRoaXMuaGllcmFyY2hpY2FsLmdldExldmVscygpO1xuICAgICAgbGV2ZWxzID0gbGV2ZWxzLnJldmVyc2UoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGV2ZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxldmVsID0gbGV2ZWxzW2ldO1xuICAgICAgICBjb25zdCBsZXZlbE5vZGVzID0gdGhpcy5oaWVyYXJjaGljYWwuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldmVsTm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB0aGlzLl9jZW50ZXJQYXJlbnQobGV2ZWxOb2Rlc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gdGhlIGFjdHVhbCB3b3JrIGlzIGRvbmUgaGVyZS5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ibG9ja1NoaWZ0aW5nID09PSB0cnVlKSB7XG4gICAgICBzaGlmdEJyYW5jaGVzQ2xvc2VyQm90dG9tVXAoNSk7XG4gICAgICBjZW50ZXJBbGxQYXJlbnRzKCk7XG4gICAgfVxuXG4gICAgLy8gbWluaW1pemUgZWRnZSBsZW5ndGhcbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lZGdlTWluaW1pemF0aW9uID09PSB0cnVlKSB7XG4gICAgICBtaW5pbWl6ZUVkZ2VMZW5ndGhCb3R0b21VcCgyMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwucGFyZW50Q2VudHJhbGl6YXRpb24gPT09IHRydWUpIHtcbiAgICAgIGNlbnRlckFsbFBhcmVudHNCb3R0b21VcCgpO1xuICAgIH1cblxuICAgIHNoaWZ0VHJlZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGdpdmVzIHRoZSBzcGFjZSBhcm91bmQgdGhlIG5vZGUuIElGIGEgbWFwIGlzIHN1cHBsaWVkLCBpdCB3aWxsIG9ubHkgY2hlY2sgYWdhaW5zdCBub2RlcyBOT1QgaW4gdGhlIG1hcC5cbiAgICogVGhpcyBpcyB1c2VkIHRvIG9ubHkgZ2V0IHRoZSBkaXN0YW5jZXMgdG8gbm9kZXMgb3V0c2lkZSBvZiBhIGJyYW5jaC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7e05vZGUuaWQ6IHZpcy5Ob2RlfX0gbWFwXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRTcGFjZUFyb3VuZE5vZGUobm9kZSwgbWFwKSB7XG4gICAgbGV0IHVzZU1hcCA9IHRydWU7XG4gICAgaWYgKG1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1c2VNYXAgPSBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbGV2ZWwgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZS5pZF07XG4gICAgaWYgKGxldmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5oaWVyYXJjaGljYWwuZGlzdHJpYnV0aW9uSW5kZXhbbm9kZS5pZF07XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuICAgICAgY29uc3Qgb3JkZXJpbmcgPSB0aGlzLmhpZXJhcmNoaWNhbC5kaXN0cmlidXRpb25PcmRlcmluZ1tsZXZlbF07XG4gICAgICBsZXQgbWluU3BhY2UgPSAxZTk7XG4gICAgICBsZXQgbWF4U3BhY2UgPSAxZTk7XG4gICAgICBpZiAoaW5kZXggIT09IDApIHtcbiAgICAgICAgY29uc3QgcHJldk5vZGUgPSBvcmRlcmluZ1tpbmRleCAtIDFdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHVzZU1hcCA9PT0gdHJ1ZSAmJiBtYXBbcHJldk5vZGUuaWRdID09PSB1bmRlZmluZWQpIHx8XG4gICAgICAgICAgdXNlTWFwID09PSBmYWxzZVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBwcmV2UG9zID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24ocHJldk5vZGUpO1xuICAgICAgICAgIG1pblNwYWNlID0gcG9zaXRpb24gLSBwcmV2UG9zO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleCAhPSBvcmRlcmluZy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGNvbnN0IG5leHROb2RlID0gb3JkZXJpbmdbaW5kZXggKyAxXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh1c2VNYXAgPT09IHRydWUgJiYgbWFwW25leHROb2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB8fFxuICAgICAgICAgIHVzZU1hcCA9PT0gZmFsc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgbmV4dFBvcyA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5leHROb2RlKTtcbiAgICAgICAgICBtYXhTcGFjZSA9IE1hdGgubWluKG1heFNwYWNlLCBuZXh0UG9zIC0gcG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbWluU3BhY2UsIG1heFNwYWNlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFswLCAwXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2UgdXNlIHRoaXMgbWV0aG9kIHRvIGNlbnRlciBhIHBhcmVudCBub2RlIGFuZCBjaGVjayBpZiBpdCBkb2VzIG5vdCBjcm9zcyBvdGhlciBub2RlcyB3aGVuIGl0IGRvZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NlbnRlclBhcmVudChub2RlKSB7XG4gICAgaWYgKHRoaXMuaGllcmFyY2hpY2FsLnBhcmVudFJlZmVyZW5jZVtub2RlLmlkXSkge1xuICAgICAgY29uc3QgcGFyZW50cyA9IHRoaXMuaGllcmFyY2hpY2FsLnBhcmVudFJlZmVyZW5jZVtub2RlLmlkXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHBhcmVudHNbaV07XG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbcGFyZW50SWRdO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuaGllcmFyY2hpY2FsLmNoaWxkcmVuUmVmZXJlbmNlW3BhcmVudElkXTtcblxuICAgICAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIGdldCB0aGUgcmFuZ2Ugb2YgdGhlIGNoaWxkcmVuXG4gICAgICAgICAgY29uc3QgbmV3UG9zaXRpb24gPSB0aGlzLl9nZXRDZW50ZXJQb3NpdGlvbihjaGlsZHJlbik7XG5cbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKHBhcmVudE5vZGUpO1xuICAgICAgICAgIGNvbnN0IFttaW5TcGFjZSwgbWF4U3BhY2VdID0gdGhpcy5fZ2V0U3BhY2VBcm91bmROb2RlKHBhcmVudE5vZGUpO1xuICAgICAgICAgIGNvbnN0IGRpZmYgPSBwb3NpdGlvbiAtIG5ld1Bvc2l0aW9uO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChkaWZmIDwgMCAmJlxuICAgICAgICAgICAgICBNYXRoLmFicyhkaWZmKSA8XG4gICAgICAgICAgICAgICAgbWF4U3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKSB8fFxuICAgICAgICAgICAgKGRpZmYgPiAwICYmXG4gICAgICAgICAgICAgIE1hdGguYWJzKGRpZmYpIDwgbWluU3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24uc2V0UG9zaXRpb24ocGFyZW50Tm9kZSwgbmV3UG9zaXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHBsYWNlcyB0aGUgbm9kZXMgb24gdGhlIGNhbnZhcyBiYXNlZCBvbiB0aGUgaGllcmFyY2hpYWwgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZGlzdHJpYnV0aW9uIHwgb2J0YWluZWQgYnkgdGhlIGZ1bmN0aW9uIHRoaXMuX2dldERpc3RyaWJ1dGlvbigpXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGxhY2VOb2Rlc0J5SGllcmFyY2h5KGRpc3RyaWJ1dGlvbikge1xuICAgIHRoaXMucG9zaXRpb25lZE5vZGVzID0ge307XG4gICAgLy8gc3RhcnQgcGxhY2luZyBhbGwgdGhlIGxldmVsIDAgbm9kZXMgZmlyc3QuIFRoZW4gcmVjdXJzaXZlbHkgcG9zaXRpb24gdGhlaXIgYnJhbmNoZXMuXG4gICAgZm9yIChjb25zdCBsZXZlbCBpbiBkaXN0cmlidXRpb24pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGlzdHJpYnV0aW9uLCBsZXZlbCkpIHtcbiAgICAgICAgLy8gc29ydCBub2RlcyBpbiBsZXZlbCBieSBwb3NpdGlvbjpcbiAgICAgICAgbGV0IG5vZGVBcnJheSA9IE9iamVjdC5rZXlzKGRpc3RyaWJ1dGlvbltsZXZlbF0pO1xuICAgICAgICBub2RlQXJyYXkgPSB0aGlzLl9pbmRleEFycmF5VG9Ob2Rlcyhub2RlQXJyYXkpO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbi5zb3J0KG5vZGVBcnJheSk7XG4gICAgICAgIGxldCBoYW5kbGVkTm9kZUNvdW50ID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2RlQXJyYXlbaV07XG4gICAgICAgICAgaWYgKHRoaXMucG9zaXRpb25lZE5vZGVzW25vZGUuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYWNpbmcgPSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nO1xuICAgICAgICAgICAgbGV0IHBvcyA9IHNwYWNpbmcgKiBoYW5kbGVkTm9kZUNvdW50O1xuICAgICAgICAgICAgLy8gV2UgZ2V0IHRoZSBYIG9yIFkgdmFsdWVzIHdlIG5lZWQgYW5kIHN0b3JlIHRoZW0gaW4gcG9zIGFuZCBwcmV2aW91c1Bvcy5cbiAgICAgICAgICAgIC8vIFRoZSBnZXQgYW5kIHNldCBtYWtlIHN1cmUgd2UgZ2V0IFggb3IgWVxuICAgICAgICAgICAgaWYgKGhhbmRsZWROb2RlQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgIHBvcyA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGVBcnJheVtpIC0gMV0pICsgc3BhY2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKG5vZGUsIHBvcywgbGV2ZWwpO1xuICAgICAgICAgICAgdGhpcy5fdmFsaWRhdGVQb3NpdGlvbkFuZENvbnRpbnVlKG5vZGUsIGxldmVsLCBwb3MpO1xuXG4gICAgICAgICAgICBoYW5kbGVkTm9kZUNvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSByZWN1cnNpdmVseSBjYWxsZWQgZnVuY3Rpb24gdG8gZW51bWVyYXRlIHRoZSBicmFuY2hlcyBmcm9tIHRoZSBsYXJnZXN0IGh1YnMgYW5kIHBsYWNlIHRoZSBub2Rlc1xuICAgKiBvbiBhIFggcG9zaXRpb24gdGhhdCBlbnN1cmVzIHRoZXJlIHdpbGwgYmUgbm8gb3ZlcmxhcC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBwYXJlbnRJZFxuICAgKiBAcGFyYW0ge251bWJlcn0gcGFyZW50TGV2ZWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wbGFjZUJyYW5jaE5vZGVzKHBhcmVudElkLCBwYXJlbnRMZXZlbCkge1xuICAgIGNvbnN0IGNoaWxkUmVmID0gdGhpcy5oaWVyYXJjaGljYWwuY2hpbGRyZW5SZWZlcmVuY2VbcGFyZW50SWRdO1xuXG4gICAgLy8gaWYgdGhpcyBpcyBub3QgYSBwYXJlbnQsIGNhbmNlbCB0aGUgcGxhY2luZy4gVGhpcyBjYW4gaGFwcGVuIHdpdGggbXVsdGlwbGUgcGFyZW50cyB0byBvbmUgY2hpbGQuXG4gICAgaWYgKGNoaWxkUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgYSBsaXN0IG9mIGNoaWxkTm9kZXNcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZFJlZi5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGROb2Rlcy5wdXNoKHRoaXMuYm9keS5ub2Rlc1tjaGlsZFJlZltpXV0pO1xuICAgIH1cblxuICAgIC8vIHVzZSB0aGUgcG9zaXRpb25zIHRvIG9yZGVyIHRoZSBub2Rlcy5cbiAgICB0aGlzLmRpcmVjdGlvbi5zb3J0KGNoaWxkTm9kZXMpO1xuXG4gICAgLy8gcG9zaXRpb24gdGhlIGNoaWxkTm9kZXNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGNoaWxkTm9kZXNbaV07XG4gICAgICBjb25zdCBjaGlsZE5vZGVMZXZlbCA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tjaGlsZE5vZGUuaWRdO1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIGNoaWxkIG5vZGUgaXMgYmVsb3cgdGhlIHBhcmVudCBub2RlIGFuZCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIHBvc2l0aW9uZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoaWxkTm9kZUxldmVsID4gcGFyZW50TGV2ZWwgJiZcbiAgICAgICAgdGhpcy5wb3NpdGlvbmVkTm9kZXNbY2hpbGROb2RlLmlkXSA9PT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgLy8gZ2V0IHRoZSBhbW91bnQgb2Ygc3BhY2UgcmVxdWlyZWQgZm9yIHRoaXMgbm9kZS4gSWYgcGFyZW50IHRoZSB3aWR0aCBpcyBiYXNlZCBvbiB0aGUgYW1vdW50IG9mIGNoaWxkcmVuLlxuICAgICAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZztcbiAgICAgICAgbGV0IHBvcztcblxuICAgICAgICAvLyB3ZSBnZXQgdGhlIFggb3IgWSB2YWx1ZXMgd2UgbmVlZCBhbmQgc3RvcmUgdGhlbSBpbiBwb3MgYW5kIHByZXZpb3VzUG9zLlxuICAgICAgICAvLyBUaGUgZ2V0IGFuZCBzZXQgbWFrZSBzdXJlIHdlIGdldCBYIG9yIFlcbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICBwb3MgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbih0aGlzLmJvZHkubm9kZXNbcGFyZW50SWRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwb3MgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihjaGlsZE5vZGVzW2kgLSAxXSkgKyBzcGFjaW5nO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKGNoaWxkTm9kZSwgcG9zLCBjaGlsZE5vZGVMZXZlbCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25BbmRDb250aW51ZShjaGlsZE5vZGUsIGNoaWxkTm9kZUxldmVsLCBwb3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNlbnRlciB0aGUgcGFyZW50IG5vZGVzLlxuICAgIGNvbnN0IGNlbnRlciA9IHRoaXMuX2dldENlbnRlclBvc2l0aW9uKGNoaWxkTm9kZXMpO1xuICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKHRoaXMuYm9keS5ub2Rlc1twYXJlbnRJZF0sIGNlbnRlciwgcGFyZW50TGV2ZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBmb3Igb3ZlcmxhcCBhbmQgaWYgcmVxdWlyZWQgc2hpZnRzIHRoZSBicmFuY2guIEl0IGFsc28ga2VlcHMgcmVjb3JkcyBvZiBwb3NpdGlvbmVkIG5vZGVzLlxuICAgKiBGaW5hbGx5IGl0IHdpbGwgY2FsbCBfcGxhY2VCcmFuY2hOb2RlcyB0byBwbGFjZSB0aGUgYnJhbmNoIG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb3NcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF92YWxpZGF0ZVBvc2l0aW9uQW5kQ29udGludWUobm9kZSwgbGV2ZWwsIHBvcykge1xuICAgIC8vIFRoaXMgbWV0aG9kIG9ubHkgd29ya3MgZm9yIGZvcm1hbCB0cmVlcyBhbmQgZm9ybWFsIGZvcmVzdHNcbiAgICAvLyBFYXJseSBleGl0IGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlXG4gICAgaWYgKCF0aGlzLmhpZXJhcmNoaWNhbC5pc1RyZWUpIHJldHVybjtcblxuICAgIC8vIGlmIG92ZXJsYXAgaGFzIGJlZW4gZGV0ZWN0ZWQsIHdlIHNoaWZ0IHRoZSBicmFuY2hcbiAgICBpZiAodGhpcy5sYXN0Tm9kZU9uTGV2ZWxbbGV2ZWxdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzUG9zID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24oXG4gICAgICAgIHRoaXMuYm9keS5ub2Rlc1t0aGlzLmxhc3ROb2RlT25MZXZlbFtsZXZlbF1dXG4gICAgICApO1xuICAgICAgaWYgKHBvcyAtIHByZXZpb3VzUG9zIDwgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZykge1xuICAgICAgICBjb25zdCBkaWZmID0gcHJldmlvdXNQb3MgKyB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nIC0gcG9zO1xuICAgICAgICBjb25zdCBzaGFyZWRQYXJlbnQgPSB0aGlzLl9maW5kQ29tbW9uUGFyZW50KFxuICAgICAgICAgIHRoaXMubGFzdE5vZGVPbkxldmVsW2xldmVsXSxcbiAgICAgICAgICBub2RlLmlkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3NoaWZ0QmxvY2soc2hhcmVkUGFyZW50LndpdGhDaGlsZCwgZGlmZik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0Tm9kZU9uTGV2ZWxbbGV2ZWxdID0gbm9kZS5pZDsgLy8gc3RvcmUgY2hhbmdlIGluIHBvc2l0aW9uLlxuICAgIHRoaXMucG9zaXRpb25lZE5vZGVzW25vZGUuaWRdID0gdHJ1ZTtcbiAgICB0aGlzLl9wbGFjZUJyYW5jaE5vZGVzKG5vZGUuaWQsIGxldmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNlaXZlcyBhbiBhcnJheSB3aXRoIG5vZGUgaW5kaWNlcyBhbmQgcmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBhY3R1YWwgbm9kZSByZWZlcmVuY2VzLlxuICAgKiBVc2VkIGZvciBzb3J0aW5nIGJhc2VkIG9uIG5vZGUgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZS5pZD59IGlkQXJyYXlcbiAgICogQHJldHVybnMge0FycmF5LjxOb2RlPn1cbiAgICovXG4gIF9pbmRleEFycmF5VG9Ob2RlcyhpZEFycmF5KSB7XG4gICAgY29uc3QgYXJyYXkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycmF5LnB1c2godGhpcy5ib2R5Lm5vZGVzW2lkQXJyYXlbaV1dKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gZ2V0IHRoZSBkaXN0cmlidXRpb24gb2YgbGV2ZWxzIGJhc2VkIG9uIGh1YnNpemVcbiAgICpcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXREaXN0cmlidXRpb24oKSB7XG4gICAgY29uc3QgZGlzdHJpYnV0aW9uID0ge307XG4gICAgbGV0IG5vZGVJZCwgbm9kZTtcblxuICAgIC8vIHdlIGZpeCBZIGJlY2F1c2UgdGhlIGhpZXJhcmNoeSBpcyB2ZXJ0aWNhbCxcbiAgICAvLyB3ZSBmaXggWCBzbyB3ZSBkbyBub3QgZ2l2ZSBhIG5vZGUgYW4geCBwb3NpdGlvbiBmb3IgYSBzZWNvbmQgdGltZS5cbiAgICAvLyB0aGUgZml4IG9mIFggaXMgcmVtb3ZlZCBhZnRlciB0aGUgeCB2YWx1ZSBoYXMgYmVlbiBzZXQuXG4gICAgZm9yIChub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5ub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgIGNvbnN0IGxldmVsID1cbiAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW25vZGVJZF07XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uLmZpeChub2RlLCBsZXZlbCk7XG4gICAgICAgIGlmIChkaXN0cmlidXRpb25bbGV2ZWxdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkaXN0cmlidXRpb25bbGV2ZWxdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZGlzdHJpYnV0aW9uW2xldmVsXVtub2RlSWRdID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRpc3RyaWJ1dGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGFjdGl2ZSAoaS5lLiB2aXNpYmxlKSBlZGdlcyBmb3IgdGhpcyBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHZpcy5FZGdlPn0gQXJyYXkgb2YgZWRnZSBpbnN0YW5jZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRBY3RpdmVFZGdlcyhub2RlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICBmb3JFYWNoKG5vZGUuZWRnZXMsIChlZGdlKSA9PiB7XG4gICAgICBpZiAodGhpcy5ib2R5LmVkZ2VJbmRpY2VzLmluZGV4T2YoZWRnZS5pZCkgIT09IC0xKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVkZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGh1YnNpemVzIGZvciBhbGwgYWN0aXZlIG5vZGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEh1YlNpemVzKCkge1xuICAgIGNvbnN0IGh1YlNpemVzID0ge307XG4gICAgY29uc3Qgbm9kZUlkcyA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcblxuICAgIGZvckVhY2gobm9kZUlkcywgKG5vZGVJZCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgY29uc3QgaHViU2l6ZSA9IHRoaXMuX2dldEFjdGl2ZUVkZ2VzKG5vZGUpLmxlbmd0aDtcbiAgICAgIGh1YlNpemVzW2h1YlNpemVdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIC8vIE1ha2UgYW4gYXJyYXkgb2YgdGhlIHNpemUgc29ydGVkIGRlc2NlbmRpbmdcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3JFYWNoKGh1YlNpemVzLCAoc2l6ZSkgPT4ge1xuICAgICAgcmVzdWx0LnB1c2goTnVtYmVyKHNpemUpKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYiAtIGE7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG5vZGVzIGluIGxldmVscyBiYXNlZCBvbiB0aGUgcmVjdXJzaXZlIGJyYW5jaGluZyBmcm9tIHRoZSBsYXJnZXN0IGh1YnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lTGV2ZWxzQnlIdWJzaXplKCkge1xuICAgIGNvbnN0IGxldmVsRG93bnN0cmVhbSA9IChub2RlQSwgbm9kZUIpID0+IHtcbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVsRG93bnN0cmVhbShub2RlQSwgbm9kZUIpO1xuICAgIH07XG5cbiAgICBjb25zdCBodWJTaXplcyA9IHRoaXMuX2dldEh1YlNpemVzKCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGh1YlNpemVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBodWJTaXplID0gaHViU2l6ZXNbaV07XG4gICAgICBpZiAoaHViU2l6ZSA9PT0gMCkgYnJlYWs7XG5cbiAgICAgIGZvckVhY2godGhpcy5ib2R5Lm5vZGVJbmRpY2VzLCAobm9kZUlkKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcblxuICAgICAgICBpZiAoaHViU2l6ZSA9PT0gdGhpcy5fZ2V0QWN0aXZlRWRnZXMobm9kZSkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5fY3Jhd2xOZXR3b3JrKGxldmVsRG93bnN0cmVhbSwgbm9kZUlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRPRE86IHJlbGVhc2UgZmVhdHVyZVxuICAgKiBUT0RPOiBEZXRlcm1pbmUgaWYgdGhpcyBmZWF0dXJlIGlzIG5lZWRlZCBhdCBhbGxcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZXRlcm1pbmVMZXZlbHNDdXN0b21DYWxsYmFjaygpIHtcbiAgICBjb25zdCBtaW5MZXZlbCA9IDEwMDAwMDtcblxuICAgIC8vIFRPRE86IHRoaXMgc2hvdWxkIGNvbWUgZnJvbSBvcHRpb25zLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSBUaGlzIHNob3VsZCBldmVudHVhbGx5IGJlIGltcGxlbWVudGVkIHdpdGggdGhlc2UgcGFyYW1ldGVycyB1c2VkLlxuICAgIGNvbnN0IGN1c3RvbUNhbGxiYWNrID0gZnVuY3Rpb24gKG5vZGVBLCBub2RlQiwgZWRnZSkge307XG5cbiAgICAvLyBUT0RPOiBwZXJoYXBzIG1vdmUgdG8gSGllcmFyY2hpY2FsU3RhdHVzLlxuICAgIC8vICAgICAgIEJ1dCBJIGN1cnJlbnRseSBkb24ndCBzZWUgdGhlIHBvaW50LCB0aGlzIG1ldGhvZCBpcyBub3QgdXNlZC5cbiAgICBjb25zdCBsZXZlbEJ5RGlyZWN0aW9uID0gKG5vZGVBLCBub2RlQiwgZWRnZSkgPT4ge1xuICAgICAgbGV0IGxldmVsQSA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlQS5pZF07XG4gICAgICAvLyBzZXQgaW5pdGlhbCBsZXZlbFxuICAgICAgaWYgKGxldmVsQSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldmVsQSA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlQS5pZF0gPSBtaW5MZXZlbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlmZiA9IGN1c3RvbUNhbGxiYWNrKFxuICAgICAgICBOZXR3b3JrVXRpbC5jbG9uZU9wdGlvbnMobm9kZUEsIFwibm9kZVwiKSxcbiAgICAgICAgTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKG5vZGVCLCBcIm5vZGVcIiksXG4gICAgICAgIE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhlZGdlLCBcImVkZ2VcIilcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlQi5pZF0gPSBsZXZlbEEgKyBkaWZmO1xuICAgIH07XG5cbiAgICB0aGlzLl9jcmF3bE5ldHdvcmsobGV2ZWxCeURpcmVjdGlvbik7XG4gICAgdGhpcy5oaWVyYXJjaGljYWwuc2V0TWluTGV2ZWxUb1plcm8odGhpcy5ib2R5Lm5vZGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvY2F0ZSBub2RlcyBpbiBsZXZlbHMgYmFzZWQgb24gdGhlIGRpcmVjdGlvbiBvZiB0aGUgZWRnZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lTGV2ZWxzRGlyZWN0ZWQoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXMucmVkdWNlKChhY2MsIGlkKSA9PiB7XG4gICAgICBhY2Muc2V0KGlkLCB0aGlzLmJvZHkubm9kZXNbaWRdKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbmV3IE1hcCgpKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLnNoYWtlVG93YXJkcyA9PT0gXCJyb290c1wiKSB7XG4gICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHMgPSBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25Sb290cyhub2Rlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVscyA9IGZpbGxMZXZlbHNCeURpcmVjdGlvbkxlYXZlcyhub2Rlcyk7XG4gICAgfVxuXG4gICAgdGhpcy5oaWVyYXJjaGljYWwuc2V0TWluTGV2ZWxUb1plcm8odGhpcy5ib2R5Lm5vZGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGJvb2trZWVwaW5nIG9mIHBhcmVudCBhbmQgY2hpbGQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2VuZXJhdGVNYXAoKSB7XG4gICAgY29uc3QgZmlsbEluUmVsYXRpb25zID0gKHBhcmVudE5vZGUsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbY2hpbGROb2RlLmlkXSA+XG4gICAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1twYXJlbnROb2RlLmlkXVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmFkZFJlbGF0aW9uKHBhcmVudE5vZGUuaWQsIGNoaWxkTm9kZS5pZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuX2NyYXdsTmV0d29yayhmaWxsSW5SZWxhdGlvbnMpO1xuICAgIHRoaXMuaGllcmFyY2hpY2FsLmNoZWNrSWZUcmVlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3Jhd2wgb3ZlciB0aGUgZW50aXJlIG5ldHdvcmsgYW5kIHVzZSBhIGNhbGxiYWNrIG9uIGVhY2ggbm9kZSBjb3VwbGUgdGhhdCBpcyBjb25uZWN0ZWQgdG8gZWFjaCBvdGhlci5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrPWZ1bmN0aW9uKCl7fV0gICAgICAgICAgfCB3aWxsIHJlY2VpdmUgbm9kZUEsIG5vZGVCIGFuZCB0aGUgY29ubmVjdGluZyBlZGdlLiBBIGFuZCBCIGFyZSBkaXN0aW5jdC5cbiAgICogQHBhcmFtIHtOb2RlLmlkfSBzdGFydGluZ05vZGVJZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyYXdsTmV0d29yayhjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9LCBzdGFydGluZ05vZGVJZCkge1xuICAgIGNvbnN0IHByb2dyZXNzID0ge307XG5cbiAgICBjb25zdCBjcmF3bGVyID0gKG5vZGUsIHRyZWUpID0+IHtcbiAgICAgIGlmIChwcm9ncmVzc1tub2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaGllcmFyY2hpY2FsLnNldFRyZWVJbmRleChub2RlLCB0cmVlKTtcblxuICAgICAgICBwcm9ncmVzc1tub2RlLmlkXSA9IHRydWU7XG4gICAgICAgIGxldCBjaGlsZE5vZGU7XG4gICAgICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5fZ2V0QWN0aXZlRWRnZXMobm9kZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBlZGdlID0gZWRnZXNbaV07XG4gICAgICAgICAgaWYgKGVkZ2UuY29ubmVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoZWRnZS50b0lkID09IG5vZGUuaWQpIHtcbiAgICAgICAgICAgICAgLy8gTm90ICc9PT0nIGJlY2F1c2UgaWQncyBjYW4gYmUgc3RyaW5nIGFuZCBudW1lcmljXG4gICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGVkZ2UuZnJvbTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGVkZ2UudG87XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlLmlkICE9IGNoaWxkTm9kZS5pZCkge1xuICAgICAgICAgICAgICAvLyBOb3QgJyE9PScgYmVjYXVzZSBpZCdzIGNhbiBiZSBzdHJpbmcgYW5kIG51bWVyaWNcbiAgICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgY2hpbGROb2RlLCBlZGdlKTtcbiAgICAgICAgICAgICAgY3Jhd2xlcihjaGlsZE5vZGUsIHRyZWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3RhcnRpbmdOb2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ3Jhd2wgb3ZlciBhbGwgbm9kZXNcbiAgICAgIGxldCB0cmVlSW5kZXggPSAwOyAvLyBTZXJ2ZXMgdG8gcGFzcyBhIHVuaXF1ZSBpZCBmb3IgdGhlIGN1cnJlbnQgZGlzdGluY3QgdHJlZVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBub2RlSWQgPSB0aGlzLmJvZHkubm9kZUluZGljZXNbaV07XG5cbiAgICAgICAgaWYgKHByb2dyZXNzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgICBjcmF3bGVyKG5vZGUsIHRyZWVJbmRleCk7XG4gICAgICAgICAgdHJlZUluZGV4ICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3Jhd2wgZnJvbSB0aGUgZ2l2ZW4gc3RhcnRpbmcgbm9kZVxuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tzdGFydGluZ05vZGVJZF07XG4gICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb2RlIG5vdCBmb3VuZDpcIiwgc3RhcnRpbmdOb2RlSWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjcmF3bGVyKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaGlmdCBhIGJyYW5jaCBhIGNlcnRhaW4gZGlzdGFuY2VcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBwYXJlbnRJZFxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlmZlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NoaWZ0QmxvY2socGFyZW50SWQsIGRpZmYpIHtcbiAgICBjb25zdCBwcm9ncmVzcyA9IHt9O1xuICAgIGNvbnN0IHNoaWZ0ZXIgPSAocGFyZW50SWQpID0+IHtcbiAgICAgIGlmIChwcm9ncmVzc1twYXJlbnRJZF0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcHJvZ3Jlc3NbcGFyZW50SWRdID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGlyZWN0aW9uLnNoaWZ0KHBhcmVudElkLCBkaWZmKTtcblxuICAgICAgY29uc3QgY2hpbGRSZWYgPSB0aGlzLmhpZXJhcmNoaWNhbC5jaGlsZHJlblJlZmVyZW5jZVtwYXJlbnRJZF07XG4gICAgICBpZiAoY2hpbGRSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkUmVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgc2hpZnRlcihjaGlsZFJlZltpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHNoaWZ0ZXIocGFyZW50SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSBjb21tb24gcGFyZW50IGJldHdlZW4gYnJhbmNoZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gY2hpbGRBXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gY2hpbGRCXG4gICAqIEByZXR1cm5zIHt7Zm91bmRQYXJlbnQsIHdpdGhDaGlsZH19XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmluZENvbW1vblBhcmVudChjaGlsZEEsIGNoaWxkQikge1xuICAgIGNvbnN0IHBhcmVudHMgPSB7fTtcbiAgICBjb25zdCBpdGVyYXRlUGFyZW50cyA9IChwYXJlbnRzLCBjaGlsZCkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50UmVmID0gdGhpcy5oaWVyYXJjaGljYWwucGFyZW50UmVmZXJlbmNlW2NoaWxkXTtcbiAgICAgIGlmIChwYXJlbnRSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudFJlZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudFJlZltpXTtcbiAgICAgICAgICBwYXJlbnRzW3BhcmVudF0gPSB0cnVlO1xuICAgICAgICAgIGl0ZXJhdGVQYXJlbnRzKHBhcmVudHMsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXJlbnQgPSAocGFyZW50cywgY2hpbGQpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudFJlZiA9IHRoaXMuaGllcmFyY2hpY2FsLnBhcmVudFJlZmVyZW5jZVtjaGlsZF07XG4gICAgICBpZiAocGFyZW50UmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnRSZWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBwYXJlbnRSZWZbaV07XG4gICAgICAgICAgaWYgKHBhcmVudHNbcGFyZW50XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBmb3VuZFBhcmVudDogcGFyZW50LCB3aXRoQ2hpbGQ6IGNoaWxkIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGJyYW5jaCA9IGZpbmRQYXJlbnQocGFyZW50cywgcGFyZW50KTtcbiAgICAgICAgICBpZiAoYnJhbmNoLmZvdW5kUGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYnJhbmNoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZm91bmRQYXJlbnQ6IG51bGwsIHdpdGhDaGlsZDogY2hpbGQgfTtcbiAgICB9O1xuXG4gICAgaXRlcmF0ZVBhcmVudHMocGFyZW50cywgY2hpbGRBKTtcbiAgICByZXR1cm4gZmluZFBhcmVudChwYXJlbnRzLCBjaGlsZEIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3RyYXRlZ3kgcGF0dGVybiBmb3IgaGFuZGxpbmcgdGhlIGNvb3JkaW5hdGVzIGdpdmVuIHRoZSBjdXJyZW50IGRpcmVjdGlvbi5cbiAgICpcbiAgICogVGhlIGluZGl2aWR1YWwgaW5zdGFuY2VzIGNvbnRhaW4gYWxsIHRoZSBvcGVyYXRpb25zIGFuZCBkYXRhIHNwZWNpZmljIHRvIGEgbGF5b3V0IGRpcmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9zaXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvTm90VXBkYXRlPWZhbHNlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2V0RGlyZWN0aW9uU3RyYXRlZ3koKSB7XG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9XG4gICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmRpcmVjdGlvbiA9PT0gXCJVRFwiIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmRpcmVjdGlvbiA9PT0gXCJEVVwiO1xuXG4gICAgaWYgKGlzVmVydGljYWwpIHtcbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gbmV3IFZlcnRpY2FsU3RyYXRlZ3kodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gbmV3IEhvcml6b250YWxTdHJhdGVneSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBjZW50ZXIgcG9zaXRpb24gb2YgYSBicmFuY2ggZnJvbSB0aGUgcGFzc2VkIGxpc3Qgb2YgY2hpbGQgbm9kZXNcbiAgICpcbiAgICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHBvc2l0aW9ucyBvZiBhbGwgdGhlIGNoaWxkIG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlfHZpcy5Ob2RlLmlkPn0gY2hpbGROb2RlcyAgQXJyYXkgb2YgZWl0aGVyIGNoaWxkIG5vZGVzIG9yIG5vZGUgaWQnc1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldENlbnRlclBvc2l0aW9uKGNoaWxkTm9kZXMpIHtcbiAgICBsZXQgbWluUG9zID0gMWU5O1xuICAgIGxldCBtYXhQb3MgPSAtMWU5O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY2hpbGROb2RlO1xuICAgICAgaWYgKGNoaWxkTm9kZXNbaV0uaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlSWQgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgICBjaGlsZE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbY2hpbGROb2RlSWRdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKGNoaWxkTm9kZSk7XG4gICAgICBtaW5Qb3MgPSBNYXRoLm1pbihtaW5Qb3MsIHBvc2l0aW9uKTtcbiAgICAgIG1heFBvcyA9IE1hdGgubWF4KG1heFBvcywgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiAwLjUgKiAobWluUG9zICsgbWF4UG9zKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYXlvdXRFbmdpbmU7XG4iLCAiaW1wb3J0IFwiLi9NYW5pcHVsYXRpb25TeXN0ZW0uY3NzXCI7XG5cbmltcG9ydCB7IEhhbW1lciwgZGVlcEV4dGVuZCwgcmVjdXJzaXZlRE9NRGVsZXRlIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgdjQgYXMgcmFuZG9tVVVJRCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyBvblRvdWNoIH0gZnJvbSBcIi4uLy4uL2hhbW1lclV0aWxcIjtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIHRvb2xiYXIgZGl2IGVsZW1lbnQgb2YgY2hpbGRyZW5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBNYW5pcHVsYXRpb25TeXN0ZW0ge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkhhbmRsZXJ9IHNlbGVjdGlvbkhhbmRsZXJcbiAgICogQHBhcmFtIHtJbnRlcmFjdGlvbkhhbmRsZXJ9IGludGVyYWN0aW9uSGFuZGxlclxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzLCBzZWxlY3Rpb25IYW5kbGVyLCBpbnRlcmFjdGlvbkhhbmRsZXIpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IHNlbGVjdGlvbkhhbmRsZXI7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIgPSBpbnRlcmFjdGlvbkhhbmRsZXI7XG5cbiAgICB0aGlzLmVkaXRNb2RlID0gZmFsc2U7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0TW9kZURpdiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNsb3NlRGl2ID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5fZG9tRXZlbnRMaXN0ZW5lckNsZWFudXBRdWV1ZSA9IFtdO1xuICAgIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnMgPSB7fTtcbiAgICB0aGlzLnRlbXBvcmFyeUV2ZW50RnVuY3Rpb25zID0gW107XG5cbiAgICB0aGlzLnRvdWNoVGltZSA9IDA7XG4gICAgdGhpcy50ZW1wb3JhcnlJZHMgPSB7IG5vZGVzOiBbXSwgZWRnZXM6IFtdIH07XG4gICAgdGhpcy5ndWlFbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5pbk1vZGUgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBpbml0aWFsbHlBY3RpdmU6IGZhbHNlLFxuICAgICAgYWRkTm9kZTogdHJ1ZSxcbiAgICAgIGFkZEVkZ2U6IHRydWUsXG4gICAgICBlZGl0Tm9kZTogdW5kZWZpbmVkLFxuICAgICAgZWRpdEVkZ2U6IHRydWUsXG4gICAgICBkZWxldGVOb2RlOiB0cnVlLFxuICAgICAgZGVsZXRlRWRnZTogdHJ1ZSxcbiAgICAgIGNvbnRyb2xOb2RlU3R5bGU6IHtcbiAgICAgICAgc2hhcGU6IFwiZG90XCIsXG4gICAgICAgIHNpemU6IDYsXG4gICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgYmFja2dyb3VuZDogXCIjZmYwMDAwXCIsXG4gICAgICAgICAgYm9yZGVyOiBcIiMzYzNjM2NcIixcbiAgICAgICAgICBoaWdobGlnaHQ6IHsgYmFja2dyb3VuZDogXCIjMDdmOTY4XCIsIGJvcmRlcjogXCIjM2MzYzNjXCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYm9yZGVyV2lkdGg6IDIsXG4gICAgICAgIGJvcmRlcldpZHRoU2VsZWN0ZWQ6IDIsXG4gICAgICB9LFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZXN0cm95XCIsICgpID0+IHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YUNoYW5nZWRcIiwgdGhpcy5fcmVzdG9yZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9yZXNldERhdGFcIiwgdGhpcy5fcmVzdG9yZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBzb21ldGhpbmcgY2hhbmdlcyBpbiB0aGUgZGF0YSBkdXJpbmcgZWRpdGluZywgc3dpdGNoIGJhY2sgdG8gdGhlIGluaXRpYWwgZGF0YW1hbmlwdWxhdGlvbiBzdGF0ZSBhbmQgY2xvc2UgYWxsIGVkaXQgbW9kZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzdG9yZSgpIHtcbiAgICBpZiAodGhpcy5pbk1vZGUgIT09IGZhbHNlKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmluaXRpYWxseUFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc2FibGVFZGl0TW9kZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIE9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGFsbE9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbE9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucywgYWxsT3B0aW9ucywgZ2xvYmFsT3B0aW9ucykge1xuICAgIGlmIChhbGxPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChhbGxPcHRpb25zLmxvY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGUgPSBhbGxPcHRpb25zLmxvY2FsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGUgPSBnbG9iYWxPcHRpb25zLmxvY2FsZTtcbiAgICAgIH1cbiAgICAgIGlmIChhbGxPcHRpb25zLmxvY2FsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlcyA9IGFsbE9wdGlvbnMubG9jYWxlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzID0gZ2xvYmFsT3B0aW9ucy5sb2NhbGVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICBkZWVwRXh0ZW5kKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmluaXRpYWxseUFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmVkaXRNb2RlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NldHVwKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGVkaXQtbW9kZS4gRHJhd3MgdGhlIERPTSByZXF1aXJlZCBhbmQgY2xlYW5zIHVwIGFmdGVyIGl0c2VsZi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRvZ2dsZUVkaXRNb2RlKCkge1xuICAgIGlmICh0aGlzLmVkaXRNb2RlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmRpc2FibGVFZGl0TW9kZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgRWRpdCBNb2RlXG4gICAqL1xuICBlbmFibGVFZGl0TW9kZSgpIHtcbiAgICB0aGlzLmVkaXRNb2RlID0gdHJ1ZTtcblxuICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuY2xvc2VEaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuZWRpdE1vZGVEaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIEVkaXQgTW9kZVxuICAgKi9cbiAgZGlzYWJsZUVkaXRNb2RlKCkge1xuICAgIHRoaXMuZWRpdE1vZGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgdGhpcy5jbG9zZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICB0aGlzLmVkaXRNb2RlRGl2LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB0aGlzLl9jcmVhdGVFZGl0QnV0dG9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIG1haW4gdG9vbGJhci4gUmVtb3ZlcyBmdW5jdGlvbnMgYm91bmQgdG8gdGhlIHNlbGVjdCBldmVudC4gQmluZHMgYWxsIHRoZSBidXR0b25zIG9mIHRoZSB0b29sYmFyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpIHtcbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICAvLyByZXNldCBnbG9iYWwgdmFyaWFibGVzXG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET00gPSB7fTtcblxuICAgIC8vIGlmIHRoZSBndWkgaXMgZW5hYmxlZCwgZHJhdyBhbGwgZWxlbWVudHMuXG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gYSBfcmVzdG9yZSB3aWxsIGhpZGUgdGhlc2UgbWVudXNcbiAgICAgIHRoaXMuZWRpdE1vZGUgPSB0cnVlO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuY2xvc2VEaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuICAgICAgY29uc3Qgc2VsZWN0ZWROb2RlQ291bnQgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWROb2RlQ291bnQoKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRWRnZUNvdW50ID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkRWRnZUNvdW50KCk7XG4gICAgICBjb25zdCBzZWxlY3RlZFRvdGFsQ291bnQgPSBzZWxlY3RlZE5vZGVDb3VudCArIHNlbGVjdGVkRWRnZUNvdW50O1xuICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV07XG4gICAgICBsZXQgbmVlZFNlcGVyYXRvciA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFkZE5vZGUgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUFkZE5vZGVCdXR0b24obG9jYWxlKTtcbiAgICAgICAgbmVlZFNlcGVyYXRvciA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFkZEVkZ2UgIT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChuZWVkU2VwZXJhdG9yID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5fY3JlYXRlU2VwZXJhdG9yKDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5lZWRTZXBlcmF0b3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NyZWF0ZUFkZEVkZ2VCdXR0b24obG9jYWxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBzZWxlY3RlZE5vZGVDb3VudCA9PT0gMSAmJlxuICAgICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVkaXROb2RlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICkge1xuICAgICAgICBpZiAobmVlZFNlcGVyYXRvciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZWVkU2VwZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jcmVhdGVFZGl0Tm9kZUJ1dHRvbihsb2NhbGUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc2VsZWN0ZWRFZGdlQ291bnQgPT09IDEgJiZcbiAgICAgICAgc2VsZWN0ZWROb2RlQ291bnQgPT09IDAgJiZcbiAgICAgICAgdGhpcy5vcHRpb25zLmVkaXRFZGdlICE9PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIGlmIChuZWVkU2VwZXJhdG9yID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5fY3JlYXRlU2VwZXJhdG9yKDMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5lZWRTZXBlcmF0b3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NyZWF0ZUVkaXRFZGdlQnV0dG9uKGxvY2FsZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlbW92ZSBidXR0b25zXG4gICAgICBpZiAoc2VsZWN0ZWRUb3RhbENvdW50ICE9PSAwKSB7XG4gICAgICAgIGlmIChzZWxlY3RlZE5vZGVDb3VudCA+IDAgJiYgdGhpcy5vcHRpb25zLmRlbGV0ZU5vZGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKG5lZWRTZXBlcmF0b3IgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcig0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fY3JlYXRlRGVsZXRlQnV0dG9uKGxvY2FsZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgc2VsZWN0ZWROb2RlQ291bnQgPT09IDAgJiZcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZGVsZXRlRWRnZSAhPT0gZmFsc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKG5lZWRTZXBlcmF0b3IgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcig0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fY3JlYXRlRGVsZXRlQnV0dG9uKGxvY2FsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuXG4gICAgICAvLyByZWZyZXNoIHRoaXMgYmFyIGJhc2VkIG9uIHdoYXQgaGFzIGJlZW4gc2VsZWN0ZWRcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRFdmVudChcbiAgICAgICAgXCJzZWxlY3RcIixcbiAgICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyLmJpbmQodGhpcylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gcmVkcmF3IHRvIHNob3cgYW55IHBvc3NpYmxlIGNoYW5nZXNcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIHRvb2xiYXIgZm9yIGFkZGluZyBOb2Rlc1xuICAgKi9cbiAgYWRkTm9kZU1vZGUoKSB7XG4gICAgLy8gd2hlbiB1c2luZyB0aGUgZ3VpLCBlbmFibGUgZWRpdCBtb2RlIGlmIGl0IHdhc250IGFscmVhZHkuXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICB9XG5cbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICB0aGlzLmluTW9kZSA9IFwiYWRkTm9kZVwiO1xuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25ET00gPSB7fTtcbiAgICAgIHRoaXMuX2NyZWF0ZUJhY2tCdXR0b24obG9jYWxlKTtcbiAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigpO1xuICAgICAgdGhpcy5fY3JlYXRlRGVzY3JpcHRpb24oXG4gICAgICAgIGxvY2FsZVtcImFkZERlc2NyaXB0aW9uXCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJhZGREZXNjcmlwdGlvblwiXVxuICAgICAgKTtcblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRFdmVudChcImNsaWNrXCIsIHRoaXMuX3BlcmZvcm1BZGROb2RlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGwgdGhlIGJvdW5kIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgZWRpdGluZyBvZiB0aGUgbm9kZS4gVGhlIG5vZGUgaGFzIHRvIGJlIHNlbGVjdGVkLlxuICAgKi9cbiAgZWRpdE5vZGUoKSB7XG4gICAgLy8gd2hlbiB1c2luZyB0aGUgZ3VpLCBlbmFibGUgZWRpdCBtb2RlIGlmIGl0IHdhc250IGFscmVhZHkuXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICB9XG5cbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3RlZE5vZGVzKClbMF07XG4gICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pbk1vZGUgPSBcImVkaXROb2RlXCI7XG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5lZGl0Tm9kZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGlmIChub2RlLmlzQ2x1c3RlciAhPT0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBkZWVwRXh0ZW5kKHt9LCBub2RlLm9wdGlvbnMsIGZhbHNlKTtcbiAgICAgICAgICBkYXRhLnggPSBub2RlLng7XG4gICAgICAgICAgZGF0YS55ID0gbm9kZS55O1xuXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lZGl0Tm9kZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5lZGl0Tm9kZShkYXRhLCAoZmluYWxpemVkRGF0YSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuaW5Nb2RlID09PSBcImVkaXROb2RlXCJcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpLnVwZGF0ZShmaW5hbGl6ZWREYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBlZGl0IGRvZXMgbm90IHN1cHBvcnQgdHdvIGFyZ3VtZW50cyAoZGF0YSwgY2FsbGJhY2spXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFsZXJ0KFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV1bXCJlZGl0Q2x1c3RlckVycm9yXCJdIHx8XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJlZGl0Q2x1c3RlckVycm9yXCJdXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiTm8gZnVuY3Rpb24gaGFzIGJlZW4gY29uZmlndXJlZCB0byBoYW5kbGUgdGhlIGVkaXRpbmcgb2Ygbm9kZXMuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSB0aGUgdG9vbGJhciB0byBjb25uZWN0IG5vZGVzXG4gICAqL1xuICBhZGRFZGdlTW9kZSgpIHtcbiAgICAvLyB3aGVuIHVzaW5nIHRoZSBndWksIGVuYWJsZSBlZGl0IG1vZGUgaWYgaXQgd2FzbnQgYWxyZWFkeS5cbiAgICBpZiAodGhpcy5lZGl0TW9kZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpO1xuICAgIH1cblxuICAgIC8vIHJlc3RvcmUgdGhlIHN0YXRlIG9mIGFueSBib3VuZCBmdW5jdGlvbnMgb3IgZXZlbnRzLCByZW1vdmUgY29udHJvbCBub2RlcywgcmVzdG9yZSBwaHlzaWNzXG4gICAgdGhpcy5fY2xlYW4oKTtcblxuICAgIHRoaXMuaW5Nb2RlID0gXCJhZGRFZGdlXCI7XG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV07XG4gICAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTSA9IHt9O1xuICAgICAgdGhpcy5fY3JlYXRlQmFja0J1dHRvbihsb2NhbGUpO1xuICAgICAgdGhpcy5fY3JlYXRlU2VwZXJhdG9yKCk7XG4gICAgICB0aGlzLl9jcmVhdGVEZXNjcmlwdGlvbihcbiAgICAgICAgbG9jYWxlW1wiZWRnZURlc2NyaXB0aW9uXCJdIHx8XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImVkZ2VEZXNjcmlwdGlvblwiXVxuICAgICAgKTtcblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIC8vIHRlbXBvcmFyaWx5IG92ZXJsb2FkIGZ1bmN0aW9uc1xuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uVG91Y2hcIiwgdGhpcy5faGFuZGxlQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbkRyYWdFbmRcIiwgdGhpcy5fZmluaXNoQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbkRyYWdcIiwgdGhpcy5fZHJhZ0NvbnRyb2xOb2RlLmJpbmQodGhpcykpO1xuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uUmVsZWFzZVwiLCB0aGlzLl9maW5pc2hDb25uZWN0LmJpbmQodGhpcykpO1xuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uRHJhZ1N0YXJ0XCIsIHRoaXMuX2RyYWdTdGFydEVkZ2UuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25Ib2xkXCIsICgpID0+IHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGUgdGhlIHRvb2xiYXIgdG8gZWRpdCBlZGdlc1xuICAgKi9cbiAgZWRpdEVkZ2VNb2RlKCkge1xuICAgIC8vIHdoZW4gdXNpbmcgdGhlIGd1aSwgZW5hYmxlIGVkaXQgbW9kZSBpZiBpdCB3YXNuJ3QgYWxyZWFkeS5cbiAgICBpZiAodGhpcy5lZGl0TW9kZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpO1xuICAgIH1cblxuICAgIC8vIHJlc3RvcmUgdGhlIHN0YXRlIG9mIGFueSBib3VuZCBmdW5jdGlvbnMgb3IgZXZlbnRzLCByZW1vdmUgY29udHJvbCBub2RlcywgcmVzdG9yZSBwaHlzaWNzXG4gICAgdGhpcy5fY2xlYW4oKTtcblxuICAgIHRoaXMuaW5Nb2RlID0gXCJlZGl0RWRnZVwiO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiB0aGlzLm9wdGlvbnMuZWRpdEVkZ2UgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHR5cGVvZiB0aGlzLm9wdGlvbnMuZWRpdEVkZ2UuZWRpdFdpdGhvdXREcmFnID09PSBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgIHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWRFZGdlSWRzKClbMF07XG4gICAgICBpZiAodGhpcy5lZGdlQmVpbmdFZGl0ZWRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy5lZGdlQmVpbmdFZGl0ZWRJZF07XG4gICAgICAgIHRoaXMuX3BlcmZvcm1FZGl0RWRnZShlZGdlLmZyb20uaWQsIGVkZ2UudG8uaWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25ET00gPSB7fTtcbiAgICAgIHRoaXMuX2NyZWF0ZUJhY2tCdXR0b24obG9jYWxlKTtcbiAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigpO1xuICAgICAgdGhpcy5fY3JlYXRlRGVzY3JpcHRpb24oXG4gICAgICAgIGxvY2FsZVtcImVkaXRFZGdlRGVzY3JpcHRpb25cIl0gfHxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdEVkZ2VEZXNjcmlwdGlvblwiXVxuICAgICAgKTtcblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWRFZGdlSWRzKClbMF07XG4gICAgaWYgKHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1t0aGlzLmVkZ2VCZWluZ0VkaXRlZElkXTtcblxuICAgICAgLy8gY3JlYXRlIGNvbnRyb2wgbm9kZXNcbiAgICAgIGNvbnN0IGNvbnRyb2xOb2RlRnJvbSA9IHRoaXMuX2dldE5ld1RhcmdldE5vZGUoZWRnZS5mcm9tLngsIGVkZ2UuZnJvbS55KTtcbiAgICAgIGNvbnN0IGNvbnRyb2xOb2RlVG8gPSB0aGlzLl9nZXROZXdUYXJnZXROb2RlKGVkZ2UudG8ueCwgZWRnZS50by55KTtcblxuICAgICAgdGhpcy50ZW1wb3JhcnlJZHMubm9kZXMucHVzaChjb250cm9sTm9kZUZyb20uaWQpO1xuICAgICAgdGhpcy50ZW1wb3JhcnlJZHMubm9kZXMucHVzaChjb250cm9sTm9kZVRvLmlkKTtcblxuICAgICAgdGhpcy5ib2R5Lm5vZGVzW2NvbnRyb2xOb2RlRnJvbS5pZF0gPSBjb250cm9sTm9kZUZyb207XG4gICAgICB0aGlzLmJvZHkubm9kZUluZGljZXMucHVzaChjb250cm9sTm9kZUZyb20uaWQpO1xuICAgICAgdGhpcy5ib2R5Lm5vZGVzW2NvbnRyb2xOb2RlVG8uaWRdID0gY29udHJvbE5vZGVUbztcbiAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5wdXNoKGNvbnRyb2xOb2RlVG8uaWQpO1xuXG4gICAgICAvLyB0ZW1wb3JhcmlseSBvdmVybG9hZCBVSSBmdW5jdGlvbnMsIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseSBiZWNhdXNlIG9mIF90ZW1wb3JhcnlCaW5kVUlcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uVG91Y2hcIiwgdGhpcy5fY29udHJvbE5vZGVUb3VjaC5iaW5kKHRoaXMpKTsgLy8gdXNlZCB0byBnZXQgdGhlIHBvc2l0aW9uXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvblRhcFwiLCAoKSA9PiB7fSk7IC8vIGRpc2FibGVkXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbkhvbGRcIiwgKCkgPT4ge30pOyAvLyBkaXNhYmxlZFxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFxuICAgICAgICBcIm9uRHJhZ1N0YXJ0XCIsXG4gICAgICAgIHRoaXMuX2NvbnRyb2xOb2RlRHJhZ1N0YXJ0LmJpbmQodGhpcylcbiAgICAgICk7IC8vIHVzZWQgdG8gc2VsZWN0IGNvbnRyb2wgbm9kZVxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25EcmFnXCIsIHRoaXMuX2NvbnRyb2xOb2RlRHJhZy5iaW5kKHRoaXMpKTsgLy8gdXNlZCB0byBkcmFnIGNvbnRyb2wgbm9kZVxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25EcmFnRW5kXCIsIHRoaXMuX2NvbnRyb2xOb2RlRHJhZ0VuZC5iaW5kKHRoaXMpKTsgLy8gdXNlZCB0byBjb25uZWN0IG9yIHJldmVydCBjb250cm9sIG5vZGVzXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbk1vdXNlTW92ZVwiLCAoKSA9PiB7fSk7IC8vIGRpc2FibGVkXG5cbiAgICAgIC8vIGNyZWF0ZSBmdW5jdGlvbiB0byBwb3NpdGlvbiBjb250cm9sIG5vZGVzIGNvcnJlY3RseSBvbiBtb3ZlbWVudFxuICAgICAgLy8gYXV0b21hdGljYWxseSBjbGVhbmVkIHVwIGJlY2F1c2Ugd2UgdXNlIHRoZSB0ZW1wb3JhcnkgYmluZFxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZEV2ZW50KFwiYmVmb3JlRHJhd2luZ1wiLCAoY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGVkZ2UuZWRnZVR5cGUuZmluZEJvcmRlclBvc2l0aW9ucyhjdHgpO1xuICAgICAgICBpZiAoY29udHJvbE5vZGVGcm9tLnNlbGVjdGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIGNvbnRyb2xOb2RlRnJvbS54ID0gcG9zaXRpb25zLmZyb20ueDtcbiAgICAgICAgICBjb250cm9sTm9kZUZyb20ueSA9IHBvc2l0aW9ucy5mcm9tLnk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRyb2xOb2RlVG8uc2VsZWN0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgY29udHJvbE5vZGVUby54ID0gcG9zaXRpb25zLnRvLng7XG4gICAgICAgICAgY29udHJvbE5vZGVUby55ID0gcG9zaXRpb25zLnRvLnk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBldmVyeXRoaW5nIGluIHRoZSBzZWxlY3Rpb25cbiAgICovXG4gIGRlbGV0ZVNlbGVjdGVkKCkge1xuICAgIC8vIHdoZW4gdXNpbmcgdGhlIGd1aSwgZW5hYmxlIGVkaXQgbW9kZSBpZiBpdCB3YXNudCBhbHJlYWR5LlxuICAgIGlmICh0aGlzLmVkaXRNb2RlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgfVxuXG4gICAgLy8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgYW55IGJvdW5kIGZ1bmN0aW9ucyBvciBldmVudHMsIHJlbW92ZSBjb250cm9sIG5vZGVzLCByZXN0b3JlIHBoeXNpY3NcbiAgICB0aGlzLl9jbGVhbigpO1xuXG4gICAgdGhpcy5pbk1vZGUgPSBcImRlbGV0ZVwiO1xuICAgIGNvbnN0IHNlbGVjdGVkTm9kZXMgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWROb2RlSWRzKCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRFZGdlcyA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3RlZEVkZ2VJZHMoKTtcbiAgICBsZXQgZGVsZXRlRnVuY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgaWYgKHNlbGVjdGVkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLmJvZHkubm9kZXNbc2VsZWN0ZWROb2Rlc1tpXV0uaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgYWxlcnQoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXVtcImRlbGV0ZUNsdXN0ZXJFcnJvclwiXSB8fFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZGVsZXRlQ2x1c3RlckVycm9yXCJdXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuZGVsZXRlTm9kZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRlbGV0ZUZ1bmN0aW9uID0gdGhpcy5vcHRpb25zLmRlbGV0ZU5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZEVkZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmRlbGV0ZUVkZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkZWxldGVGdW5jdGlvbiA9IHRoaXMub3B0aW9ucy5kZWxldGVFZGdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGVsZXRlRnVuY3Rpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY29uc3QgZGF0YSA9IHsgbm9kZXM6IHNlbGVjdGVkTm9kZXMsIGVkZ2VzOiBzZWxlY3RlZEVkZ2VzIH07XG4gICAgICBpZiAoZGVsZXRlRnVuY3Rpb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGRlbGV0ZUZ1bmN0aW9uKGRhdGEsIChmaW5hbGl6ZWREYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0aGlzLmluTW9kZSA9PT0gXCJkZWxldGVcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkucmVtb3ZlKGZpbmFsaXplZERhdGEuZWRnZXMpO1xuICAgICAgICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpLnJlbW92ZShmaW5hbGl6ZWREYXRhLm5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U2ltdWxhdGlvblwiKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgZnVuY3Rpb24gZm9yIGRlbGV0ZSBkb2VzIG5vdCBzdXBwb3J0IHR3byBhcmd1bWVudHMgKGRhdGEsIGNhbGxiYWNrKVwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzLmdldERhdGFTZXQoKS5yZW1vdmUoc2VsZWN0ZWRFZGdlcyk7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5ub2Rlcy5nZXREYXRhU2V0KCkucmVtb3ZlKHNlbGVjdGVkTm9kZXMpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U2ltdWxhdGlvblwiKTtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQUklWQVRFICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vXG5cbiAgLyoqXG4gICAqIGRyYXcgb3IgcmVtb3ZlIHRoZSBET01cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXR1cCgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIEVuYWJsZSB0aGUgR1VJXG4gICAgICB0aGlzLmd1aUVuYWJsZWQgPSB0cnVlO1xuXG4gICAgICB0aGlzLl9jcmVhdGVXcmFwcGVycygpO1xuICAgICAgaWYgKHRoaXMuZWRpdE1vZGUgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUVkaXRCdXR0b24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZW1vdmVNYW5pcHVsYXRpb25ET00oKTtcblxuICAgICAgLy8gZGlzYWJsZSB0aGUgZ3VpXG4gICAgICB0aGlzLmd1aUVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIHRoZSBkaXYgb3ZlcmxheXMgdGhhdCBjb250YWluIHRoZSBET01cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVXcmFwcGVycygpIHtcbiAgICAvLyBsb2FkIHRoZSBtYW5pcHVsYXRvciBIVE1MIGVsZW1lbnRzLiBBbGwgc3R5bGluZyBkb25lIGluIGNzcy5cbiAgICBpZiAodGhpcy5tYW5pcHVsYXRpb25EaXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuY2xhc3NOYW1lID0gXCJ2aXMtbWFuaXB1bGF0aW9uXCI7XG4gICAgICBpZiAodGhpcy5lZGl0TW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgfVxuICAgICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5tYW5pcHVsYXRpb25EaXYpO1xuICAgIH1cblxuICAgIC8vIGNvbnRhaW5lciBmb3IgdGhlIGVkaXQgYnV0dG9uLlxuICAgIGlmICh0aGlzLmVkaXRNb2RlRGl2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdE1vZGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5lZGl0TW9kZURpdi5jbGFzc05hbWUgPSBcInZpcy1lZGl0LW1vZGVcIjtcbiAgICAgIGlmICh0aGlzLmVkaXRNb2RlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuZWRpdE1vZGVEaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0TW9kZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgfVxuICAgICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5lZGl0TW9kZURpdik7XG4gICAgfVxuXG4gICAgLy8gY29udGFpbmVyIGZvciB0aGUgY2xvc2UgZGl2IGJ1dHRvblxuICAgIGlmICh0aGlzLmNsb3NlRGl2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuICAgICAgdGhpcy5jbG9zZURpdi5jbGFzc05hbWUgPSBcInZpcy1jbG9zZVwiO1xuICAgICAgdGhpcy5jbG9zZURpdi5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiLFxuICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXT8uW1wiY2xvc2VcIl0gPz9cbiAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiY2xvc2VcIl1cbiAgICAgICk7XG4gICAgICB0aGlzLmNsb3NlRGl2LnN0eWxlLmRpc3BsYXkgPSB0aGlzLm1hbmlwdWxhdGlvbkRpdi5zdHlsZS5kaXNwbGF5O1xuICAgICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jbG9zZURpdik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlIGEgbmV3IHRhcmdldCBub2RlLiBVc2VkIGZvciBjcmVhdGluZyBuZXcgZWRnZXMgYW5kIGVkaXRpbmcgZWRnZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybnMge05vZGV9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0TmV3VGFyZ2V0Tm9kZSh4LCB5KSB7XG4gICAgY29uc3QgY29udHJvbE5vZGVTdHlsZSA9IGRlZXBFeHRlbmQoe30sIHRoaXMub3B0aW9ucy5jb250cm9sTm9kZVN0eWxlKTtcblxuICAgIGNvbnRyb2xOb2RlU3R5bGUuaWQgPSBcInRhcmdldE5vZGVcIiArIHJhbmRvbVVVSUQoKTtcbiAgICBjb250cm9sTm9kZVN0eWxlLmhpZGRlbiA9IGZhbHNlO1xuICAgIGNvbnRyb2xOb2RlU3R5bGUucGh5c2ljcyA9IGZhbHNlO1xuICAgIGNvbnRyb2xOb2RlU3R5bGUueCA9IHg7XG4gICAgY29udHJvbE5vZGVTdHlsZS55ID0geTtcblxuICAgIC8vIHdlIGhhdmUgdG8gZGVmaW5lIHRoZSBib3VuZGluZyBib3ggaW4gb3JkZXIgZm9yIHRoZSBub2RlcyB0byBiZSBkcmF3biBpbW1lZGlhdGVseVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGUoY29udHJvbE5vZGVTdHlsZSk7XG4gICAgbm9kZS5zaGFwZS5ib3VuZGluZ0JveCA9IHsgbGVmdDogeCwgcmlnaHQ6IHgsIHRvcDogeSwgYm90dG9tOiB5IH07XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGVkaXQgYnV0dG9uXG4gICAqL1xuICBfY3JlYXRlRWRpdEJ1dHRvbigpIHtcbiAgICAvLyByZXN0b3JlIGV2ZXJ5dGhpbmcgdG8gaXQncyBvcmlnaW5hbCBzdGF0ZSAoaWYgYXBwbGljYWJsZSlcbiAgICB0aGlzLl9jbGVhbigpO1xuXG4gICAgLy8gcmVzZXQgdGhlIG1hbmlwdWxhdGlvbkRPTVxuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NID0ge307XG5cbiAgICAvLyBlbXB0eSB0aGUgZWRpdE1vZGVEaXZcbiAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5lZGl0TW9kZURpdik7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGNvbnRlbnRzIGZvciB0aGUgZWRpdE1vZGUgYnV0dG9uXG4gICAgY29uc3QgbG9jYWxlID0gdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV07XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKFxuICAgICAgXCJlZGl0TW9kZVwiLFxuICAgICAgXCJ2aXMtZWRpdCB2aXMtZWRpdC1tb2RlXCIsXG4gICAgICBsb2NhbGVbXCJlZGl0XCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJlZGl0XCJdXG4gICAgKTtcbiAgICB0aGlzLmVkaXRNb2RlRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICAvLyBiaW5kIGEgaGFtbWVyIGxpc3RlbmVyIHRvIHRoZSBidXR0b24sIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHRvZ2dsZUVkaXRNb2RlLlxuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy50b2dnbGVFZGl0TW9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGZ1bmN0aW9uIGNsZWFucyB1cCBhZnRlciBldmVyeXRoaW5nIHRoaXMgbW9kdWxlIGRvZXMuIFRlbXBvcmFyeSBlbGVtZW50cywgZnVuY3Rpb25zIGFuZCBldmVudHMgYXJlIHJlbW92ZWQsIHBoeXNpY3MgcmVzdG9yZWQsIGhhbW1lcnMgcmVtb3ZlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICAvLyBub3QgaW4gbW9kZVxuICAgIHRoaXMuaW5Nb2RlID0gZmFsc2U7XG5cbiAgICAvLyBfY2xlYW4gdGhlIGRpdnNcbiAgICBpZiAodGhpcy5ndWlFbmFibGVkID09PSB0cnVlKSB7XG4gICAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5lZGl0TW9kZURpdik7XG4gICAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5tYW5pcHVsYXRpb25EaXYpO1xuXG4gICAgICAvLyByZW1vdmVzIGFsbCB0aGUgYmluZGluZ3MgYW5kIG92ZXJsb2Fkc1xuICAgICAgdGhpcy5fY2xlYW51cERPTUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHRlbXBvcmFyeSBub2RlcyBhbmQgZWRnZXNcbiAgICB0aGlzLl9jbGVhbnVwVGVtcG9yYXJ5Tm9kZXNBbmRFZGdlcygpO1xuXG4gICAgLy8gcmVzdG9yZSBvdmVybG9hZGVkIFVJIGZ1bmN0aW9uc1xuICAgIHRoaXMuX3VuYmluZFRlbXBvcmFyeVVJcygpO1xuXG4gICAgLy8gcmVtb3ZlIHRoZSB0ZW1wb3JhcnlFdmVudEZ1bmN0aW9uc1xuICAgIHRoaXMuX3VuYmluZFRlbXBvcmFyeUV2ZW50cygpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgcGh5c2ljcyBpZiByZXF1aXJlZFxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJyZXN0b3JlUGh5c2ljc1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFYWNoIGRvbSBlbGVtZW50IGhhcyBpdCdzIG93biBoYW1tZXIuIFRoZXkgYXJlIHN0b3JlZCBpbiB0aGlzLm1hbmlwdWxhdGlvbkhhbW1lcnMuIFRoaXMgY2xlYW5zIHRoZW0gdXAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW51cERPTUV2ZW50TGlzdGVuZXJzKCkge1xuICAgIC8vIF9jbGVhbiBET00gZXZlbnQgbGlzdGVuZXIgYmluZGluZ3NcbiAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2RvbUV2ZW50TGlzdGVuZXJDbGVhbnVwUXVldWUuc3BsaWNlKDApKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIERPTSBlbGVtZW50cyBjcmVhdGVkIGJ5IHRoaXMgbW9kdWxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZU1hbmlwdWxhdGlvbkRPTSgpIHtcbiAgICAvLyByZW1vdmVzIGFsbCB0aGUgYmluZGluZ3MgYW5kIG92ZXJsb2Fkc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICAvLyBlbXB0eSB0aGUgbWFuaXB1bGF0aW9uIGRpdnNcbiAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5tYW5pcHVsYXRpb25EaXYpO1xuICAgIHJlY3Vyc2l2ZURPTURlbGV0ZSh0aGlzLmVkaXRNb2RlRGl2KTtcbiAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5jbG9zZURpdik7XG5cbiAgICAvLyByZW1vdmUgdGhlIG1hbmlwdWxhdGlvbiBkaXZzXG4gICAgaWYgKHRoaXMubWFuaXB1bGF0aW9uRGl2KSB7XG4gICAgICB0aGlzLmNhbnZhcy5mcmFtZS5yZW1vdmVDaGlsZCh0aGlzLm1hbmlwdWxhdGlvbkRpdik7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXRNb2RlRGl2KSB7XG4gICAgICB0aGlzLmNhbnZhcy5mcmFtZS5yZW1vdmVDaGlsZCh0aGlzLmVkaXRNb2RlRGl2KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xvc2VEaXYpIHtcbiAgICAgIHRoaXMuY2FudmFzLmZyYW1lLnJlbW92ZUNoaWxkKHRoaXMuY2xvc2VEaXYpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgcmVmZXJlbmNlcyB0byB1bmRlZmluZWRcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRNb2RlRGl2ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2xvc2VEaXYgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIGEgc2VwZXJhdG9yIGxpbmUuIHRoZSBpbmRleCBpcyB0byBkaWZmZXJlbnRpYXRlIGluIHRoZSBtYW5pcHVsYXRpb24gZG9tXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaW5kZXg9MV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVTZXBlcmF0b3IoaW5kZXggPSAxKSB7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01bXCJzZXBlcmF0b3JMaW5lRGl2XCIgKyBpbmRleF0gPVxuICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtcInNlcGVyYXRvckxpbmVEaXZcIiArIGluZGV4XS5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtc2VwYXJhdG9yLWxpbmVcIjtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW1wic2VwZXJhdG9yTGluZURpdlwiICsgaW5kZXhdXG4gICAgKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgRE9NIGZ1bmN0aW9ucyBmb3IgYnV0dG9ucyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TG9jYWxlfSBsb2NhbGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVBZGROb2RlQnV0dG9uKGxvY2FsZSkge1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihcbiAgICAgIFwiYWRkTm9kZVwiLFxuICAgICAgXCJ2aXMtYWRkXCIsXG4gICAgICBsb2NhbGVbXCJhZGROb2RlXCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJhZGROb2RlXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5hZGROb2RlTW9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQWRkRWRnZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImFkZEVkZ2VcIixcbiAgICAgIFwidmlzLWNvbm5lY3RcIixcbiAgICAgIGxvY2FsZVtcImFkZEVkZ2VcIl0gfHwgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImFkZEVkZ2VcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLmFkZEVkZ2VNb2RlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TG9jYWxlfSBsb2NhbGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVFZGl0Tm9kZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImVkaXROb2RlXCIsXG4gICAgICBcInZpcy1lZGl0XCIsXG4gICAgICBsb2NhbGVbXCJlZGl0Tm9kZVwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdE5vZGVcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLmVkaXROb2RlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TG9jYWxlfSBsb2NhbGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVFZGl0RWRnZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImVkaXRFZGdlXCIsXG4gICAgICBcInZpcy1lZGl0XCIsXG4gICAgICBsb2NhbGVbXCJlZGl0RWRnZVwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdEVkZ2VcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLmVkaXRFZGdlTW9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlRGVsZXRlQnV0dG9uKGxvY2FsZSkge1xuICAgIGxldCBkZWxldGVCdG5DbGFzcztcbiAgICBpZiAodGhpcy5vcHRpb25zLnJ0bCkge1xuICAgICAgZGVsZXRlQnRuQ2xhc3MgPSBcInZpcy1kZWxldGUtcnRsXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUJ0bkNsYXNzID0gXCJ2aXMtZGVsZXRlXCI7XG4gICAgfVxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihcbiAgICAgIFwiZGVsZXRlXCIsXG4gICAgICBkZWxldGVCdG5DbGFzcyxcbiAgICAgIGxvY2FsZVtcImRlbFwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZGVsXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5kZWxldGVTZWxlY3RlZC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQmFja0J1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImJhY2tcIixcbiAgICAgIFwidmlzLWJhY2tcIixcbiAgICAgIGxvY2FsZVtcImJhY2tcIl0gfHwgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImJhY2tcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBpZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXG4gICAqIEBwYXJhbSB7bGFiZWx9IGxhYmVsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbENsYXNzTmFtZVxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQnV0dG9uKGlkLCBjbGFzc05hbWUsIGxhYmVsLCBsYWJlbENsYXNzTmFtZSA9IFwidmlzLWxhYmVsXCIpIHtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiRGl2XCJdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiRGl2XCJdLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiBcIiArIGNsYXNzTmFtZTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiTGFiZWxcIl0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW2lkICsgXCJMYWJlbFwiXS5jbGFzc05hbWUgPSBsYWJlbENsYXNzTmFtZTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiTGFiZWxcIl0uaW5uZXJUZXh0ID0gbGFiZWw7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01baWQgKyBcIkRpdlwiXS5hcHBlbmRDaGlsZChcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW2lkICsgXCJMYWJlbFwiXVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMubWFuaXB1bGF0aW9uRE9NW2lkICsgXCJEaXZcIl07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVEZXNjcmlwdGlvbihsYWJlbCkge1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW1wiZGVzY3JpcHRpb25MYWJlbFwiXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01bXCJkZXNjcmlwdGlvbkxhYmVsXCJdLmNsYXNzTmFtZSA9IFwidmlzLW5vbmVcIjtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtcImRlc2NyaXB0aW9uTGFiZWxcIl0uaW5uZXJUZXh0ID0gbGFiZWw7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuYXBwZW5kQ2hpbGQodGhpcy5tYW5pcHVsYXRpb25ET01bXCJkZXNjcmlwdGlvbkxhYmVsXCJdKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVuZCBvZiBET00gZnVuY3Rpb25zIGZvciBidXR0b25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqIHRoaXMgYmluZHMgYW4gZXZlbnQgdW50aWwgY2xlYW51cCBieSB0aGUgY2xlYW4gZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbmV3RnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF90ZW1wb3JhcnlCaW5kRXZlbnQoZXZlbnQsIG5ld0Z1bmN0aW9uKSB7XG4gICAgdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucy5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGJvdW5kRnVuY3Rpb246IG5ld0Z1bmN0aW9uLFxuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKGV2ZW50LCBuZXdGdW5jdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBvdmVycmlkZXMgYW4gVUkgZnVuY3Rpb24gdW50aWwgY2xlYW51cCBieSB0aGUgY2xlYW4gZnVuY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFVJZnVuY3Rpb25OYW1lXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG5ld0Z1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdGVtcG9yYXJ5QmluZFVJKFVJZnVuY3Rpb25OYW1lLCBuZXdGdW5jdGlvbikge1xuICAgIGlmICh0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnNbVUlmdW5jdGlvbk5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnNbVUlmdW5jdGlvbk5hbWVdID1cbiAgICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzW1VJZnVuY3Rpb25OYW1lXTtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVyc1tVSWZ1bmN0aW9uTmFtZV0gPSBuZXdGdW5jdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoaXMgVUkgZnVuY3Rpb24gZG9lcyBub3QgZXhpc3QuIFR5cG8/IFlvdSB0cmllZDogXCIgK1xuICAgICAgICAgIFVJZnVuY3Rpb25OYW1lICtcbiAgICAgICAgICBcIiBwb3NzaWJsZSBhcmU6IFwiICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyh0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSB0aGUgb3ZlcnJpZGRlbiBVSSBmdW5jdGlvbnMgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdW5iaW5kVGVtcG9yYXJ5VUlzKCkge1xuICAgIGZvciAoY29uc3QgZnVuY3Rpb25OYW1lIGluIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuICAgICAgICAgIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnMsXG4gICAgICAgICAgZnVuY3Rpb25OYW1lXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnNbZnVuY3Rpb25OYW1lXSA9XG4gICAgICAgICAgdGhpcy50ZW1wb3JhcnlVSUZ1bmN0aW9uc1tmdW5jdGlvbk5hbWVdO1xuICAgICAgICBkZWxldGUgdGhpcy50ZW1wb3JhcnlVSUZ1bmN0aW9uc1tmdW5jdGlvbk5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnRlbXBvcmFyeVVJRnVuY3Rpb25zID0ge307XG4gIH1cblxuICAvKipcbiAgICogVW5iaW5kIHRoZSBldmVudHMgY3JlYXRlZCBieSBfdGVtcG9yYXJ5QmluZEV2ZW50XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdW5iaW5kVGVtcG9yYXJ5RXZlbnRzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZXZlbnROYW1lID0gdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9uc1tpXS5ldmVudDtcbiAgICAgIGNvbnN0IGJvdW5kRnVuY3Rpb24gPSB0aGlzLnRlbXBvcmFyeUV2ZW50RnVuY3Rpb25zW2ldLmJvdW5kRnVuY3Rpb247XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoZXZlbnROYW1lLCBib3VuZEZ1bmN0aW9uKTtcbiAgICB9XG4gICAgdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgYW4gaGFtbWVyIGluc3RhbmNlIHRvIGEgRE9NIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZG9tRWxlbWVudFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBib3VuZEZ1bmN0aW9uXG4gICAqL1xuICBfYmluZEVsZW1lbnRFdmVudHMoZG9tRWxlbWVudCwgYm91bmRGdW5jdGlvbikge1xuICAgIC8vIEJpbmQgdG91Y2ggZXZlbnRzLlxuICAgIGNvbnN0IGhhbW1lciA9IG5ldyBIYW1tZXIoZG9tRWxlbWVudCwge30pO1xuICAgIG9uVG91Y2goaGFtbWVyLCBib3VuZEZ1bmN0aW9uKTtcbiAgICB0aGlzLl9kb21FdmVudExpc3RlbmVyQ2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgaGFtbWVyLmRlc3Ryb3koKTtcbiAgICB9KTtcblxuICAgIC8vIEJpbmQga2V5Ym9hcmQgZXZlbnRzLlxuICAgIGNvbnN0IGtleXVwTGlzdGVuZXIgPSAoeyBrZXlDb2RlLCBrZXkgfSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gXCJFbnRlclwiIHx8IGtleSA9PT0gXCIgXCIgfHwga2V5Q29kZSA9PT0gMTMgfHwga2V5Q29kZSA9PT0gMzIpIHtcbiAgICAgICAgYm91bmRGdW5jdGlvbigpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwga2V5dXBMaXN0ZW5lciwgZmFsc2UpO1xuICAgIHRoaXMuX2RvbUV2ZW50TGlzdGVuZXJDbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgICBkb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBrZXl1cExpc3RlbmVyLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTmVhdGx5IGNsZWFuIHVwIHRlbXBvcmFyeSBlZGdlcyBhbmQgbm9kZXNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbnVwVGVtcG9yYXJ5Tm9kZXNBbmRFZGdlcygpIHtcbiAgICAvLyBfY2xlYW4gdGVtcG9yYXJ5IGVkZ2VzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRlbXBvcmFyeUlkcy5lZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5ib2R5LmVkZ2VzW3RoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzW2ldXS5kaXNjb25uZWN0KCk7XG4gICAgICBkZWxldGUgdGhpcy5ib2R5LmVkZ2VzW3RoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzW2ldXTtcbiAgICAgIGNvbnN0IGluZGV4VGVtcEVkZ2UgPSB0aGlzLmJvZHkuZWRnZUluZGljZXMuaW5kZXhPZihcbiAgICAgICAgdGhpcy50ZW1wb3JhcnlJZHMuZWRnZXNbaV1cbiAgICAgICk7XG4gICAgICBpZiAoaW5kZXhUZW1wRWRnZSAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLnNwbGljZShpbmRleFRlbXBFZGdlLCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBfY2xlYW4gdGVtcG9yYXJ5IG5vZGVzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlc1tpXV07XG4gICAgICBjb25zdCBpbmRleFRlbXBOb2RlID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmluZGV4T2YoXG4gICAgICAgIHRoaXMudGVtcG9yYXJ5SWRzLm5vZGVzW2ldXG4gICAgICApO1xuICAgICAgaWYgKGluZGV4VGVtcE5vZGUgIT09IC0xKSB7XG4gICAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5zcGxpY2UoaW5kZXhUZW1wTm9kZSwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50ZW1wb3JhcnlJZHMgPSB7IG5vZGVzOiBbXSwgZWRnZXM6IFtdIH07XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRURJVCBFREdFIEZVTkNUSU9OUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqIHRoZSB0b3VjaCBpcyB1c2VkIHRvIGdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGluaXRpYWwgY2xpY2tcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29udHJvbE5vZGVUb3VjaChldmVudCkge1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgIHRoaXMubGFzdFRvdWNoID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgdGhpcy5sYXN0VG91Y2gudHJhbnNsYXRpb24gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbik7IC8vIGNvcHkgdGhlIG9iamVjdFxuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBkcmFnIHN0YXJ0IGlzIHVzZWQgdG8gbWFyayBvbmUgb2YgdGhlIGNvbnRyb2wgbm9kZXMgYXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29udHJvbE5vZGVEcmFnU3RhcnQoKSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMubGFzdFRvdWNoO1xuICAgIGNvbnN0IHBvaW50ZXJPYmogPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpO1xuICAgIGNvbnN0IGZyb20gPSB0aGlzLmJvZHkubm9kZXNbdGhpcy50ZW1wb3JhcnlJZHMubm9kZXNbMF1dO1xuICAgIGNvbnN0IHRvID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMudGVtcG9yYXJ5SWRzLm5vZGVzWzFdXTtcbiAgICBjb25zdCBlZGdlID0gdGhpcy5ib2R5LmVkZ2VzW3RoaXMuZWRnZUJlaW5nRWRpdGVkSWRdO1xuICAgIHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGZyb21TZWxlY3QgPSBmcm9tLmlzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopO1xuICAgIGNvbnN0IHRvU2VsZWN0ID0gdG8uaXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaik7XG5cbiAgICBpZiAoZnJvbVNlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlID0gZnJvbTtcbiAgICAgIGVkZ2UuZWRnZVR5cGUuZnJvbSA9IGZyb207XG4gICAgfSBlbHNlIGlmICh0b1NlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlID0gdG87XG4gICAgICBlZGdlLmVkZ2VUeXBlLnRvID0gdG87XG4gICAgfVxuXG4gICAgLy8gd2UgdXNlIHRoZSBzZWxlY3Rpb24gdG8gZmluZCB0aGUgbm9kZSB0aGF0IGlzIGJlaW5nIGRyYWdnZWQuIFdlIGV4cGxpY2l0bHkgc2VsZWN0IGl0IGhlcmUuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0T2JqZWN0KHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvKipcbiAgICogZHJhZ2dpbmcgdGhlIGNvbnRyb2wgbm9kZXMgb3IgdGhlIGNhbnZhc1xuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb250cm9sTm9kZURyYWcoZXZlbnQpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiZGlzYWJsZVBoeXNpY3NcIik7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuYm9keS5mdW5jdGlvbnMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIGNvbnN0IHBvcyA9IHRoaXMuY2FudmFzLkRPTXRvQ2FudmFzKHBvaW50ZXIpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlLnggPSBwb3MueDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZS55ID0gcG9zLnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyLm9uRHJhZyhldmVudCk7XG4gICAgfVxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNvbm5lY3Rpbmcgb3IgcmVzdG9yaW5nIHRoZSBjb250cm9sIG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb250cm9sTm9kZURyYWdFbmQoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgY29uc3QgcG9pbnRlck9iaiA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5fcG9pbnRlclRvUG9zaXRpb25PYmplY3QocG9pbnRlcik7XG4gICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1t0aGlzLmVkZ2VCZWluZ0VkaXRlZElkXTtcbiAgICAvLyBpZiB0aGUgbm9kZSB0aGF0IHdhcyBkcmFnZ2VkIGlzIG5vdCBhIGNvbnRyb2wgbm9kZSwgcmV0dXJuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gd2UgdXNlIHRoZSBzZWxlY3Rpb24gdG8gZmluZCB0aGUgbm9kZSB0aGF0IGlzIGJlaW5nIGRyYWdnZWQuIFdlIGV4cGxpY2l0bHkgREVzZWxlY3QgdGhlIGNvbnRyb2wgbm9kZSBoZXJlLlxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZUlkcyA9XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopO1xuICAgIGxldCBub2RlID0gdW5kZWZpbmVkO1xuICAgIGZvciAobGV0IGkgPSBvdmVybGFwcGluZ05vZGVJZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChvdmVybGFwcGluZ05vZGVJZHNbaV0gIT09IHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZS5pZCkge1xuICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW292ZXJsYXBwaW5nTm9kZUlkc1tpXV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBwZXJmb3JtIHRoZSBjb25uZWN0aW9uXG4gICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG5vZGUuaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgIGFsZXJ0KFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdW1wiY3JlYXRlRWRnZUVycm9yXCJdIHx8XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiY3JlYXRlRWRnZUVycm9yXCJdXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmcm9tID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMudGVtcG9yYXJ5SWRzLm5vZGVzWzBdXTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZS5pZCA9PT0gZnJvbS5pZCkge1xuICAgICAgICAgIHRoaXMuX3BlcmZvcm1FZGl0RWRnZShub2RlLmlkLCBlZGdlLnRvLmlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9wZXJmb3JtRWRpdEVkZ2UoZWRnZS5mcm9tLmlkLCBub2RlLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlZGdlLnVwZGF0ZUVkZ2VUeXBlKCk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVzdG9yZVBoeXNpY3NcIik7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EIE9GIEVESVQgRURHRSBGVU5DVElPTlMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQUREIEVER0UgRlVOQ1RJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cbiAgLyoqXG4gICAqIHRoZSBmdW5jdGlvbiBib3VuZCB0byB0aGUgc2VsZWN0aW9uIGV2ZW50LiBJdCBjaGVja3MgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIGNsdXN0ZXIgYW5kIGNoYW5nZXMgdGhlIGRlc2NyaXB0aW9uXG4gICAqIHRvIHdhbGsgdGhlIHVzZXIgdGhyb3VnaCB0aGUgcHJvY2Vzcy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVDb25uZWN0KGV2ZW50KSB7XG4gICAgLy8gY2hlY2sgdG8gYXZvaWQgZG91YmxlIGZpcmVpbmcgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICBpZiAobmV3IERhdGUoKS52YWx1ZU9mKCkgLSB0aGlzLnRvdWNoVGltZSA+IDEwMCkge1xuICAgICAgdGhpcy5sYXN0VG91Y2ggPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICAgIHRoaXMubGFzdFRvdWNoLnRyYW5zbGF0aW9uID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uXG4gICAgICApOyAvLyBjb3B5IHRoZSBvYmplY3RcblxuICAgICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIuZHJhZy5wb2ludGVyID0gdGhpcy5sYXN0VG91Y2g7IC8vIERyYWcgcG9pbnRlciBpcyBub3QgdXBkYXRlZCB3aGVuIGFkZGluZyBlZGdlc1xuICAgICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIuZHJhZy50cmFuc2xhdGlvbiA9IHRoaXMubGFzdFRvdWNoLnRyYW5zbGF0aW9uO1xuXG4gICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5sYXN0VG91Y2g7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldE5vZGVBdChwb2ludGVyKTtcblxuICAgICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobm9kZS5pc0NsdXN0ZXIgPT09IHRydWUpIHtcbiAgICAgICAgICBhbGVydChcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdW1wiY3JlYXRlRWRnZUVycm9yXCJdIHx8XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJjcmVhdGVFZGdlRXJyb3JcIl1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNyZWF0ZSBhIG5vZGUgdGhlIHRlbXBvcmFyeSBsaW5lIGNhbiBsb29rIGF0XG4gICAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuX2dldE5ld1RhcmdldE5vZGUobm9kZS54LCBub2RlLnkpO1xuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1t0YXJnZXROb2RlLmlkXSA9IHRhcmdldE5vZGU7XG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLnB1c2godGFyZ2V0Tm9kZS5pZCk7XG5cbiAgICAgICAgICAvLyBjcmVhdGUgYSB0ZW1wb3JhcnkgZWRnZVxuICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb25FZGdlID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVFZGdlKHtcbiAgICAgICAgICAgIGlkOiBcImNvbm5lY3Rpb25FZGdlXCIgKyByYW5kb21VVUlEKCksXG4gICAgICAgICAgICBmcm9tOiBub2RlLmlkLFxuICAgICAgICAgICAgdG86IHRhcmdldE5vZGUuaWQsXG4gICAgICAgICAgICBwaHlzaWNzOiBmYWxzZSxcbiAgICAgICAgICAgIHNtb290aDoge1xuICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICB0eXBlOiBcImNvbnRpbnVvdXNcIixcbiAgICAgICAgICAgICAgcm91bmRuZXNzOiAwLjUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuYm9keS5lZGdlc1tjb25uZWN0aW9uRWRnZS5pZF0gPSBjb25uZWN0aW9uRWRnZTtcbiAgICAgICAgICB0aGlzLmJvZHkuZWRnZUluZGljZXMucHVzaChjb25uZWN0aW9uRWRnZS5pZCk7XG5cbiAgICAgICAgICB0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5wdXNoKHRhcmdldE5vZGUuaWQpO1xuICAgICAgICAgIHRoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzLnB1c2goY29ubmVjdGlvbkVkZ2UuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnRvdWNoVGltZSA9IG5ldyBEYXRlKCkudmFsdWVPZigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYWdDb250cm9sTm9kZShldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcblxuICAgIGNvbnN0IHBvaW50ZXJPYmogPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpO1xuICAgIC8vIHJlbWVtYmVyIHRoZSBlZGdlIGlkXG4gICAgbGV0IGNvbm5lY3RGcm9tSWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbm5lY3RGcm9tSWQgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy50ZW1wb3JhcnlJZHMuZWRnZXNbMF1dLmZyb21JZDtcbiAgICB9XG5cbiAgICAvLyBnZXQgdGhlIG92ZXJsYXBwaW5nIG5vZGUgYnV0IE5PVCB0aGUgdGVtcG9yYXJ5IG5vZGU7XG4gICAgY29uc3Qgb3ZlcmxhcHBpbmdOb2RlSWRzID1cbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5fZ2V0QWxsTm9kZXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaik7XG4gICAgbGV0IG5vZGUgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgaSA9IG92ZXJsYXBwaW5nTm9kZUlkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgLy8gaWYgdGhlIG5vZGUgaWQgaXMgTk9UIGEgdGVtcG9yYXJ5IG5vZGUsIGFjY2VwdCB0aGUgbm9kZS5cbiAgICAgIGlmICh0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5pbmRleE9mKG92ZXJsYXBwaW5nTm9kZUlkc1tpXSkgPT09IC0xKSB7XG4gICAgICAgIG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbb3ZlcmxhcHBpbmdOb2RlSWRzW2ldXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXZlbnQuY29udHJvbEVkZ2UgPSB7IGZyb206IGNvbm5lY3RGcm9tSWQsIHRvOiBub2RlID8gbm9kZS5pZCA6IHVuZGVmaW5lZCB9O1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICBcImNvbnRyb2xOb2RlRHJhZ2dpbmdcIixcbiAgICAgIGV2ZW50LFxuICAgICAgcG9pbnRlclxuICAgICk7XG5cbiAgICBpZiAodGhpcy50ZW1wb3JhcnlJZHMubm9kZXNbMF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlc1swXV07IC8vIHRoZXJlIGlzIG9ubHkgb25lIHRlbXAgbm9kZSBpbiB0aGUgYWRkIGVkZ2UgbW9kZS5cbiAgICAgIHRhcmdldE5vZGUueCA9IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCk7XG4gICAgICB0YXJnZXROb2RlLnkgPSB0aGlzLmNhbnZhcy5fWWNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLnkpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyLm9uRHJhZyhldmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbm5lY3QgdGhlIG5ldyBlZGdlIHRvIHRoZSB0YXJnZXQgaWYgb25lIGV4aXN0cywgb3RoZXJ3aXNlIHJlbW92ZSB0ZW1wIGxpbmVcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmluaXNoQ29ubmVjdChldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICBjb25zdCBwb2ludGVyT2JqID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKTtcblxuICAgIC8vIHJlbWVtYmVyIHRoZSBlZGdlIGlkXG4gICAgbGV0IGNvbm5lY3RGcm9tSWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbm5lY3RGcm9tSWQgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy50ZW1wb3JhcnlJZHMuZWRnZXNbMF1dLmZyb21JZDtcbiAgICB9XG5cbiAgICAvLyBnZXQgdGhlIG92ZXJsYXBwaW5nIG5vZGUgYnV0IE5PVCB0aGUgdGVtcG9yYXJ5IG5vZGU7XG4gICAgY29uc3Qgb3ZlcmxhcHBpbmdOb2RlSWRzID1cbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5fZ2V0QWxsTm9kZXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaik7XG4gICAgbGV0IG5vZGUgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgaSA9IG92ZXJsYXBwaW5nTm9kZUlkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgLy8gaWYgdGhlIG5vZGUgaWQgaXMgTk9UIGEgdGVtcG9yYXJ5IG5vZGUsIGFjY2VwdCB0aGUgbm9kZS5cbiAgICAgIGlmICh0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5pbmRleE9mKG92ZXJsYXBwaW5nTm9kZUlkc1tpXSkgPT09IC0xKSB7XG4gICAgICAgIG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbb3ZlcmxhcHBpbmdOb2RlSWRzW2ldXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdGVtcG9yYXJ5IG5vZGVzIGFuZCBlZGdlcy5cbiAgICB0aGlzLl9jbGVhbnVwVGVtcG9yYXJ5Tm9kZXNBbmRFZGdlcygpO1xuXG4gICAgLy8gcGVyZm9ybSB0aGUgY29ubmVjdGlvblxuICAgIGlmIChub2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChub2RlLmlzQ2x1c3RlciA9PT0gdHJ1ZSkge1xuICAgICAgICBhbGVydChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXVtcImNyZWF0ZUVkZ2VFcnJvclwiXSB8fFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImNyZWF0ZUVkZ2VFcnJvclwiXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tjb25uZWN0RnJvbUlkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW25vZGUuaWRdICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fcGVyZm9ybUFkZEVkZ2UoY29ubmVjdEZyb21JZCwgbm9kZS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBldmVudC5jb250cm9sRWRnZSA9IHsgZnJvbTogY29ubmVjdEZyb21JZCwgdG86IG5vZGUgPyBub2RlLmlkIDogdW5kZWZpbmVkIH07XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgIFwiY29udHJvbE5vZGVEcmFnRW5kXCIsXG4gICAgICBldmVudCxcbiAgICAgIHBvaW50ZXJcbiAgICApO1xuXG4gICAgLy8gTm8gbmVlZCB0byBkbyBfZ2VuZXJhdGVjbGlja2V2ZW50KCdkcmFnRW5kJykgaGVyZSwgdGhlIHJlZ3VsYXIgZHJhZ0VuZCBldmVudCBmaXJlcy5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYWdTdGFydEVkZ2UoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5sYXN0VG91Y2g7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgIFwiZHJhZ1N0YXJ0XCIsXG4gICAgICBldmVudCxcbiAgICAgIHBvaW50ZXIsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQgT0YgQUREIEVER0UgRlVOQ1RJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQZXJmb3JtaW5nIGFsbCB0aGUgYWN0dWFsIGRhdGEgbWFuaXB1bGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqIEFkZHMgYSBub2RlIG9uIHRoZSBzcGVjaWZpZWQgbG9jYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNsaWNrRGF0YVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BlcmZvcm1BZGROb2RlKGNsaWNrRGF0YSkge1xuICAgIGNvbnN0IGRlZmF1bHREYXRhID0ge1xuICAgICAgaWQ6IHJhbmRvbVVVSUQoKSxcbiAgICAgIHg6IGNsaWNrRGF0YS5wb2ludGVyLmNhbnZhcy54LFxuICAgICAgeTogY2xpY2tEYXRhLnBvaW50ZXIuY2FudmFzLnksXG4gICAgICBsYWJlbDogXCJuZXdcIixcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuYWRkTm9kZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFkZE5vZGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5hZGROb2RlKGRlZmF1bHREYXRhLCAoZmluYWxpemVkRGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IG51bGwgJiZcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdGhpcy5pbk1vZGUgPT09IFwiYWRkTm9kZVwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBpZiBmb3Igd2hhdGV2ZXIgcmVhc29uIHRoZSBtb2RlIGhhcyBjaGFuZ2VzIChkdWUgdG8gZGF0YXNldCBjaGFuZ2UpIGRpc3JlZ2FyZCB0aGUgY2FsbGJhY2tcbiAgICAgICAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldERhdGFTZXQoKS5hZGQoZmluYWxpemVkRGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgZnVuY3Rpb24gZm9yIGFkZCBkb2VzIG5vdCBzdXBwb3J0IHR3byBhcmd1bWVudHMgKGRhdGEsY2FsbGJhY2spXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpLmFkZChkZWZhdWx0RGF0YSk7XG4gICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY29ubmVjdCB0d28gbm9kZXMgd2l0aCBhIG5ldyBlZGdlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IHNvdXJjZU5vZGVJZFxuICAgKiBAcGFyYW0ge05vZGUuaWR9IHRhcmdldE5vZGVJZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BlcmZvcm1BZGRFZGdlKHNvdXJjZU5vZGVJZCwgdGFyZ2V0Tm9kZUlkKSB7XG4gICAgY29uc3QgZGVmYXVsdERhdGEgPSB7IGZyb206IHNvdXJjZU5vZGVJZCwgdG86IHRhcmdldE5vZGVJZCB9O1xuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmFkZEVkZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hZGRFZGdlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuYWRkRWRnZShkZWZhdWx0RGF0YSwgKGZpbmFsaXplZERhdGEpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhICE9PSBudWxsICYmXG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHRoaXMuaW5Nb2RlID09PSBcImFkZEVkZ2VcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrXG4gICAgICAgICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkuYWRkKGZpbmFsaXplZERhdGEpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsKCk7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBjb25uZWN0IGRvZXMgbm90IHN1cHBvcnQgdHdvIGFyZ3VtZW50cyAoZGF0YSxjYWxsYmFjaylcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkuYWRkKGRlZmF1bHREYXRhKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNvbm5lY3QgdHdvIG5vZGVzIHdpdGggYSBuZXcgZWRnZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBzb3VyY2VOb2RlSWRcbiAgICogQHBhcmFtIHtOb2RlLmlkfSB0YXJnZXROb2RlSWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtRWRpdEVkZ2Uoc291cmNlTm9kZUlkLCB0YXJnZXROb2RlSWQpIHtcbiAgICBjb25zdCBkZWZhdWx0RGF0YSA9IHtcbiAgICAgIGlkOiB0aGlzLmVkZ2VCZWluZ0VkaXRlZElkLFxuICAgICAgZnJvbTogc291cmNlTm9kZUlkLFxuICAgICAgdG86IHRhcmdldE5vZGVJZCxcbiAgICAgIGxhYmVsOiB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXQodGhpcy5lZGdlQmVpbmdFZGl0ZWRJZCkubGFiZWwsXG4gICAgfTtcbiAgICBsZXQgZWVGdW5jdCA9IHRoaXMub3B0aW9ucy5lZGl0RWRnZTtcbiAgICBpZiAodHlwZW9mIGVlRnVuY3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGVlRnVuY3QgPSBlZUZ1bmN0LmVkaXRXaXRob3V0RHJhZztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlZUZ1bmN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGlmIChlZUZ1bmN0Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICBlZUZ1bmN0KGRlZmF1bHREYXRhLCAoZmluYWxpemVkRGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgdGhpcy5pbk1vZGUgIT09IFwiZWRpdEVkZ2VcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbZGVmYXVsdERhdGEuaWRdLnVwZGF0ZUVkZ2VUeXBlKCk7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkudXBkYXRlKGZpbmFsaXplZERhdGEpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsKCk7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBlZGl0IGRvZXMgbm90IHN1cHBvcnQgdHdvIGFyZ3VtZW50cyAoZGF0YSwgY2FsbGJhY2spXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0RGF0YVNldCgpLnVwZGF0ZShkZWZhdWx0RGF0YSk7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwoKTtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYW5pcHVsYXRpb25TeXN0ZW07XG4iLCAiaW1wb3J0IHtcbiAgQ29uZmlndXJhdG9yQ29uZmlnLFxuICBDb25maWd1cmF0b3JIaWRlT3B0aW9uLFxuICBPcHRpb25zQ29uZmlnLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogVGhpcyBvYmplY3QgY29udGFpbnMgYWxsIHBvc3NpYmxlIG9wdGlvbnMuIEl0IHdpbGwgY2hlY2sgaWYgdGhlIHR5cGVzIGFyZSBjb3JyZWN0LCBpZiByZXF1aXJlZCBpZiB0aGUgb3B0aW9uIGlzIG9uZVxuICogb2YgdGhlIGFsbG93ZWQgdmFsdWVzLlxuICpcbiAqIF9fYW55X18gbWVhbnMgdGhhdCB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgbWF0dGVyLlxuICogX190eXBlX18gaXMgYSByZXF1aXJlZCBmaWVsZCBmb3IgYWxsIG9iamVjdHMgYW5kIGNvbnRhaW5zIHRoZSBhbGxvd2VkIHR5cGVzIG9mIGFsbCBvYmplY3RzXG4gKi9cbmNvbnN0IHN0cmluZyA9IFwic3RyaW5nXCI7XG5jb25zdCBib29sID0gXCJib29sZWFuXCI7XG5jb25zdCBudW1iZXIgPSBcIm51bWJlclwiO1xuY29uc3QgYXJyYXkgPSBcImFycmF5XCI7XG5jb25zdCBvYmplY3QgPSBcIm9iamVjdFwiOyAvLyBzaG91bGQgb25seSBiZSBpbiBhIF9fdHlwZV9fIHByb3BlcnR5XG5jb25zdCBkb20gPSBcImRvbVwiO1xuY29uc3QgYW55ID0gXCJhbnlcIjtcblxuLy8gTGlzdCBvZiBlbmRwb2ludHNcbmNvbnN0IGVuZFBvaW50cyA9IFtcbiAgXCJhcnJvd1wiLFxuICBcImJhclwiLFxuICBcImJveFwiLFxuICBcImNpcmNsZVwiLFxuICBcImNyb3dcIixcbiAgXCJjdXJ2ZVwiLFxuICBcImRpYW1vbmRcIixcbiAgXCJpbWFnZVwiLFxuICBcImludl9jdXJ2ZVwiLFxuICBcImludl90cmlhbmdsZVwiLFxuICBcInRyaWFuZ2xlXCIsXG4gIFwidmVlXCIsXG5dO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gLS0gVGhlIF9fKl9fIGZvcm1hdCBpcyB1c2VkIHRvIHByZXZlbnQgY29sbGlzaW9ucyB3aXRoIGFjdHVhbCBvcHRpb24gbmFtZXMuICovXG5jb25zdCBub2RlT3B0aW9uczogT3B0aW9uc0NvbmZpZyA9IHtcbiAgYm9yZGVyV2lkdGg6IHsgbnVtYmVyIH0sXG4gIGJvcmRlcldpZHRoU2VsZWN0ZWQ6IHsgbnVtYmVyLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgYnJva2VuSW1hZ2U6IHsgc3RyaW5nLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgY2hvc2VuOiB7XG4gICAgbGFiZWw6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIG5vZGU6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuICBjb2xvcjoge1xuICAgIGJvcmRlcjogeyBzdHJpbmcgfSxcbiAgICBiYWNrZ3JvdW5kOiB7IHN0cmluZyB9LFxuICAgIGhpZ2hsaWdodDoge1xuICAgICAgYm9yZGVyOiB7IHN0cmluZyB9LFxuICAgICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBob3Zlcjoge1xuICAgICAgYm9yZGVyOiB7IHN0cmluZyB9LFxuICAgICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICB9LFxuICBvcGFjaXR5OiB7IG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIGZpeGVkOiB7XG4gICAgeDogeyBib29sZWFuOiBib29sIH0sXG4gICAgeTogeyBib29sZWFuOiBib29sIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gIH0sXG4gIGZvbnQ6IHtcbiAgICBhbGlnbjogeyBzdHJpbmcgfSxcbiAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICBzdHJva2VXaWR0aDogeyBudW1iZXIgfSwgLy8gcHhcbiAgICBzdHJva2VDb2xvcjogeyBzdHJpbmcgfSxcbiAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgIG11bHRpOiB7IGJvb2xlYW46IGJvb2wsIHN0cmluZyB9LFxuICAgIGJvbGQ6IHtcbiAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgc2l6ZTogeyBudW1iZXIgfSwgLy8gcHhcbiAgICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgICBtb2Q6IHsgc3RyaW5nIH0sXG4gICAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICB9LFxuICAgIGJvbGRpdGFsOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBpdGFsOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBtb25vOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICB9LFxuICBncm91cDogeyBzdHJpbmcsIG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIGhlaWdodENvbnN0cmFpbnQ6IHtcbiAgICBtaW5pbXVtOiB7IG51bWJlciB9LFxuICAgIHZhbGlnbjogeyBzdHJpbmcgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wsIG51bWJlciB9LFxuICB9LFxuICBoaWRkZW46IHsgYm9vbGVhbjogYm9vbCB9LFxuICBpY29uOiB7XG4gICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICBjb2RlOiB7IHN0cmluZyB9LCAvLydcXHVmMDA3JyxcbiAgICBzaXplOiB7IG51bWJlciB9LCAvLzUwLFxuICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgIHdlaWdodDogeyBzdHJpbmcsIG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICB9LFxuICBpZDogeyBzdHJpbmcsIG51bWJlciB9LFxuICBpbWFnZToge1xuICAgIHNlbGVjdGVkOiB7IHN0cmluZywgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sIC8vIC0tPiBVUkxcbiAgICB1bnNlbGVjdGVkOiB7IHN0cmluZywgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sIC8vIC0tPiBVUkxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICB9LFxuICBpbWFnZVBhZGRpbmc6IHtcbiAgICB0b3A6IHsgbnVtYmVyIH0sXG4gICAgcmlnaHQ6IHsgbnVtYmVyIH0sXG4gICAgYm90dG9tOiB7IG51bWJlciB9LFxuICAgIGxlZnQ6IHsgbnVtYmVyIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBudW1iZXIgfSxcbiAgfSxcbiAgbGFiZWw6IHsgc3RyaW5nLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgbGFiZWxIaWdobGlnaHRCb2xkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgbGV2ZWw6IHsgbnVtYmVyLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgbWFyZ2luOiB7XG4gICAgdG9wOiB7IG51bWJlciB9LFxuICAgIHJpZ2h0OiB7IG51bWJlciB9LFxuICAgIGJvdHRvbTogeyBudW1iZXIgfSxcbiAgICBsZWZ0OiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgbnVtYmVyIH0sXG4gIH0sXG4gIG1hc3M6IHsgbnVtYmVyIH0sXG4gIHBoeXNpY3M6IHsgYm9vbGVhbjogYm9vbCB9LFxuICBzY2FsaW5nOiB7XG4gICAgbWluOiB7IG51bWJlciB9LFxuICAgIG1heDogeyBudW1iZXIgfSxcbiAgICBsYWJlbDoge1xuICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBtaW46IHsgbnVtYmVyIH0sXG4gICAgICBtYXg6IHsgbnVtYmVyIH0sXG4gICAgICBtYXhWaXNpYmxlOiB7IG51bWJlciB9LFxuICAgICAgZHJhd1RocmVzaG9sZDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgY3VzdG9tU2NhbGluZ0Z1bmN0aW9uOiB7IGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgc2hhZG93OiB7XG4gICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgc2l6ZTogeyBudW1iZXIgfSxcbiAgICB4OiB7IG51bWJlciB9LFxuICAgIHk6IHsgbnVtYmVyIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gIH0sXG4gIHNoYXBlOiB7XG4gICAgc3RyaW5nOiBbXG4gICAgICBcImN1c3RvbVwiLFxuICAgICAgXCJlbGxpcHNlXCIsXG4gICAgICBcImNpcmNsZVwiLFxuICAgICAgXCJkYXRhYmFzZVwiLFxuICAgICAgXCJib3hcIixcbiAgICAgIFwidGV4dFwiLFxuICAgICAgXCJpbWFnZVwiLFxuICAgICAgXCJjaXJjdWxhckltYWdlXCIsXG4gICAgICBcImRpYW1vbmRcIixcbiAgICAgIFwiZG90XCIsXG4gICAgICBcInN0YXJcIixcbiAgICAgIFwidHJpYW5nbGVcIixcbiAgICAgIFwidHJpYW5nbGVEb3duXCIsXG4gICAgICBcInNxdWFyZVwiLFxuICAgICAgXCJpY29uXCIsXG4gICAgICBcImhleGFnb25cIixcbiAgICBdLFxuICB9LFxuICBjdHhSZW5kZXJlcjogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gIHNoYXBlUHJvcGVydGllczoge1xuICAgIGJvcmRlckRhc2hlczogeyBib29sZWFuOiBib29sLCBhcnJheSB9LFxuICAgIGJvcmRlclJhZGl1czogeyBudW1iZXIgfSxcbiAgICBpbnRlcnBvbGF0aW9uOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICB1c2VJbWFnZVNpemU6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHVzZUJvcmRlcldpdGhJbWFnZTogeyBib29sZWFuOiBib29sIH0sXG4gICAgY29vcmRpbmF0ZU9yaWdpbjogeyBzdHJpbmc6IFtcImNlbnRlclwiLCBcInRvcC1sZWZ0XCJdIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gIH0sXG4gIHNpemU6IHsgbnVtYmVyIH0sXG4gIHRpdGxlOiB7IHN0cmluZywgZG9tLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgdmFsdWU6IHsgbnVtYmVyLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgd2lkdGhDb25zdHJhaW50OiB7XG4gICAgbWluaW11bTogeyBudW1iZXIgfSxcbiAgICBtYXhpbXVtOiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCwgbnVtYmVyIH0sXG4gIH0sXG4gIHg6IHsgbnVtYmVyIH0sXG4gIHk6IHsgbnVtYmVyIH0sXG4gIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxufTtcbmNvbnN0IGFsbE9wdGlvbnM6IE9wdGlvbnNDb25maWcgPSB7XG4gIGNvbmZpZ3VyZToge1xuICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGZpbHRlcjogeyBib29sZWFuOiBib29sLCBzdHJpbmcsIGFycmF5LCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgY29udGFpbmVyOiB7IGRvbSB9LFxuICAgIHNob3dCdXR0b246IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCwgc3RyaW5nLCBhcnJheSwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICB9LFxuICBlZGdlczoge1xuICAgIGFycm93czoge1xuICAgICAgdG86IHtcbiAgICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICAgIHNjYWxlRmFjdG9yOiB7IG51bWJlciB9LFxuICAgICAgICB0eXBlOiB7IHN0cmluZzogZW5kUG9pbnRzIH0sXG4gICAgICAgIGltYWdlSGVpZ2h0OiB7IG51bWJlciB9LFxuICAgICAgICBpbWFnZVdpZHRoOiB7IG51bWJlciB9LFxuICAgICAgICBzcmM6IHsgc3RyaW5nIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgfSxcbiAgICAgIG1pZGRsZToge1xuICAgICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgICAgc2NhbGVGYWN0b3I6IHsgbnVtYmVyIH0sXG4gICAgICAgIHR5cGU6IHsgc3RyaW5nOiBlbmRQb2ludHMgfSxcbiAgICAgICAgaW1hZ2VXaWR0aDogeyBudW1iZXIgfSxcbiAgICAgICAgaW1hZ2VIZWlnaHQ6IHsgbnVtYmVyIH0sXG4gICAgICAgIHNyYzogeyBzdHJpbmcgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgICB9LFxuICAgICAgZnJvbToge1xuICAgICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgICAgc2NhbGVGYWN0b3I6IHsgbnVtYmVyIH0sXG4gICAgICAgIHR5cGU6IHsgc3RyaW5nOiBlbmRQb2ludHMgfSxcbiAgICAgICAgaW1hZ2VXaWR0aDogeyBudW1iZXIgfSxcbiAgICAgICAgaW1hZ2VIZWlnaHQ6IHsgbnVtYmVyIH0sXG4gICAgICAgIHNyYzogeyBzdHJpbmcgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHsgc3RyaW5nOiBbXCJmcm9tXCIsIFwidG9cIiwgXCJtaWRkbGVcIl0sIG9iamVjdCB9LFxuICAgIH0sXG4gICAgZW5kUG9pbnRPZmZzZXQ6IHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXIsXG4gICAgICB9LFxuICAgICAgdG86IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXIsXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHtcbiAgICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICAgIG51bWJlcjogbnVtYmVyLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGFycm93U3RyaWtldGhyb3VnaDogeyBib29sZWFuOiBib29sIH0sXG4gICAgYmFja2dyb3VuZDoge1xuICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sXG4gICAgICBkYXNoZXM6IHsgYm9vbGVhbjogYm9vbCwgYXJyYXkgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgY2hvc2VuOiB7XG4gICAgICBsYWJlbDogeyBib29sZWFuOiBib29sLCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgICBlZGdlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgY29sb3I6IHtcbiAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgaGlnaGxpZ2h0OiB7IHN0cmluZyB9LFxuICAgICAgaG92ZXI6IHsgc3RyaW5nIH0sXG4gICAgICBpbmhlcml0OiB7IHN0cmluZzogW1wiZnJvbVwiLCBcInRvXCIsIFwiYm90aFwiXSwgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgb3BhY2l0eTogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBkYXNoZXM6IHsgYm9vbGVhbjogYm9vbCwgYXJyYXkgfSxcbiAgICBmb250OiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICAgIHN0cm9rZVdpZHRoOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgc3Ryb2tlQ29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICBhbGlnbjogeyBzdHJpbmc6IFtcImhvcml6b250YWxcIiwgXCJ0b3BcIiwgXCJtaWRkbGVcIiwgXCJib3R0b21cIl0gfSxcbiAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICBtdWx0aTogeyBib29sZWFuOiBib29sLCBzdHJpbmcgfSxcbiAgICAgIGJvbGQ6IHtcbiAgICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICAgIH0sXG4gICAgICBib2xkaXRhbDoge1xuICAgICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgICAgc2l6ZTogeyBudW1iZXIgfSwgLy8gcHhcbiAgICAgICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgICAgfSxcbiAgICAgIGl0YWw6IHtcbiAgICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICAgIH0sXG4gICAgICBtb25vOiB7XG4gICAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgICBtb2Q6IHsgc3RyaW5nIH0sXG4gICAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICB9LFxuICAgIGhpZGRlbjogeyBib29sZWFuOiBib29sIH0sXG4gICAgaG92ZXJXaWR0aDogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiLCBudW1iZXIgfSxcbiAgICBsYWJlbDogeyBzdHJpbmcsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgbGVuZ3RoOiB7IG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gICAgcGh5c2ljczogeyBib29sZWFuOiBib29sIH0sXG4gICAgc2NhbGluZzoge1xuICAgICAgbWluOiB7IG51bWJlciB9LFxuICAgICAgbWF4OiB7IG51bWJlciB9LFxuICAgICAgbGFiZWw6IHtcbiAgICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICAgIG1pbjogeyBudW1iZXIgfSxcbiAgICAgICAgbWF4OiB7IG51bWJlciB9LFxuICAgICAgICBtYXhWaXNpYmxlOiB7IG51bWJlciB9LFxuICAgICAgICBkcmF3VGhyZXNob2xkOiB7IG51bWJlciB9LFxuICAgICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIH0sXG4gICAgICBjdXN0b21TY2FsaW5nRnVuY3Rpb246IHsgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgfSxcbiAgICBzZWxlY3Rpb25XaWR0aDogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiLCBudW1iZXIgfSxcbiAgICBzZWxmUmVmZXJlbmNlU2l6ZTogeyBudW1iZXIgfSxcbiAgICBzZWxmUmVmZXJlbmNlOiB7XG4gICAgICBzaXplOiB7IG51bWJlciB9LFxuICAgICAgYW5nbGU6IHsgbnVtYmVyIH0sXG4gICAgICByZW5kZXJCZWhpbmRUaGVOb2RlOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICAgIH0sXG4gICAgc2hhZG93OiB7XG4gICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgc2l6ZTogeyBudW1iZXIgfSxcbiAgICAgIHg6IHsgbnVtYmVyIH0sXG4gICAgICB5OiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgfSxcbiAgICBzbW9vdGg6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgdHlwZToge1xuICAgICAgICBzdHJpbmc6IFtcbiAgICAgICAgICBcImR5bmFtaWNcIixcbiAgICAgICAgICBcImNvbnRpbnVvdXNcIixcbiAgICAgICAgICBcImRpc2NyZXRlXCIsXG4gICAgICAgICAgXCJkaWFnb25hbENyb3NzXCIsXG4gICAgICAgICAgXCJzdHJhaWdodENyb3NzXCIsXG4gICAgICAgICAgXCJob3Jpem9udGFsXCIsXG4gICAgICAgICAgXCJ2ZXJ0aWNhbFwiLFxuICAgICAgICAgIFwiY3VydmVkQ1dcIixcbiAgICAgICAgICBcImN1cnZlZENDV1wiLFxuICAgICAgICAgIFwiY3ViaWNCZXppZXJcIixcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICByb3VuZG5lc3M6IHsgbnVtYmVyIH0sXG4gICAgICBmb3JjZURpcmVjdGlvbjoge1xuICAgICAgICBzdHJpbmc6IFtcImhvcml6b250YWxcIiwgXCJ2ZXJ0aWNhbFwiLCBcIm5vbmVcIl0sXG4gICAgICAgIGJvb2xlYW46IGJvb2wsXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgfSxcbiAgICB0aXRsZTogeyBzdHJpbmcsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICAgIHdpZHRoOiB7IG51bWJlciB9LFxuICAgIHdpZHRoQ29uc3RyYWludDoge1xuICAgICAgbWF4aW11bTogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCwgbnVtYmVyIH0sXG4gICAgfSxcbiAgICB2YWx1ZTogeyBudW1iZXIsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICB9LFxuICBncm91cHM6IHtcbiAgICB1c2VEZWZhdWx0R3JvdXBzOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBfX2FueV9fOiBub2RlT3B0aW9ucyxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgaW50ZXJhY3Rpb246IHtcbiAgICBkcmFnTm9kZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGRyYWdWaWV3OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBoaWRlRWRnZXNPbkRyYWc6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGhpZGVFZGdlc09uWm9vbTogeyBib29sZWFuOiBib29sIH0sXG4gICAgaGlkZU5vZGVzT25EcmFnOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBob3ZlcjogeyBib29sZWFuOiBib29sIH0sXG4gICAga2V5Ym9hcmQ6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgc3BlZWQ6IHtcbiAgICAgICAgeDogeyBudW1iZXIgfSxcbiAgICAgICAgeTogeyBudW1iZXIgfSxcbiAgICAgICAgem9vbTogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgICB9LFxuICAgICAgYmluZFRvV2luZG93OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIGF1dG9Gb2N1czogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICB9LFxuICAgIG11bHRpc2VsZWN0OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBuYXZpZ2F0aW9uQnV0dG9uczogeyBib29sZWFuOiBib29sIH0sXG4gICAgc2VsZWN0YWJsZTogeyBib29sZWFuOiBib29sIH0sXG4gICAgc2VsZWN0Q29ubmVjdGVkRWRnZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGhvdmVyQ29ubmVjdGVkRWRnZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHRvb2x0aXBEZWxheTogeyBudW1iZXIgfSxcbiAgICB6b29tVmlldzogeyBib29sZWFuOiBib29sIH0sXG4gICAgem9vbVNwZWVkOiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICB9LFxuICBsYXlvdXQ6IHtcbiAgICByYW5kb21TZWVkOiB7IHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiwgbnVtYmVyLCBzdHJpbmcgfSxcbiAgICBpbXByb3ZlZExheW91dDogeyBib29sZWFuOiBib29sIH0sXG4gICAgY2x1c3RlclRocmVzaG9sZDogeyBudW1iZXIgfSxcbiAgICBoaWVyYXJjaGljYWw6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgbGV2ZWxTZXBhcmF0aW9uOiB7IG51bWJlciB9LFxuICAgICAgbm9kZVNwYWNpbmc6IHsgbnVtYmVyIH0sXG4gICAgICB0cmVlU3BhY2luZzogeyBudW1iZXIgfSxcbiAgICAgIGJsb2NrU2hpZnRpbmc6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgZWRnZU1pbmltaXphdGlvbjogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBwYXJlbnRDZW50cmFsaXphdGlvbjogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBkaXJlY3Rpb246IHsgc3RyaW5nOiBbXCJVRFwiLCBcIkRVXCIsIFwiTFJcIiwgXCJSTFwiXSB9LCAvLyBVRCwgRFUsIExSLCBSTFxuICAgICAgc29ydE1ldGhvZDogeyBzdHJpbmc6IFtcImh1YnNpemVcIiwgXCJkaXJlY3RlZFwiXSB9LCAvLyBodWJzaXplLCBkaXJlY3RlZFxuICAgICAgc2hha2VUb3dhcmRzOiB7IHN0cmluZzogW1wibGVhdmVzXCIsIFwicm9vdHNcIl0gfSwgLy8gbGVhdmVzLCByb290c1xuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgbWFuaXB1bGF0aW9uOiB7XG4gICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgaW5pdGlhbGx5QWN0aXZlOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBhZGROb2RlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBhZGRFZGdlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBlZGl0Tm9kZTogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgZWRpdEVkZ2U6IHtcbiAgICAgIGVkaXRXaXRob3V0RHJhZzogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICB9LFxuICAgIGRlbGV0ZU5vZGU6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIGRlbGV0ZUVkZ2U6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIGNvbnRyb2xOb2RlU3R5bGU6IG5vZGVPcHRpb25zLFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuICBub2Rlczogbm9kZU9wdGlvbnMsXG4gIHBoeXNpY3M6IHtcbiAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBiYXJuZXNIdXQ6IHtcbiAgICAgIHRoZXRhOiB7IG51bWJlciB9LFxuICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiB7IG51bWJlciB9LFxuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBhdm9pZE92ZXJsYXA6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIGZvcmNlQXRsYXMyQmFzZWQ6IHtcbiAgICAgIHRoZXRhOiB7IG51bWJlciB9LFxuICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiB7IG51bWJlciB9LFxuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBhdm9pZE92ZXJsYXA6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIHJlcHVsc2lvbjoge1xuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIG5vZGVEaXN0YW5jZTogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIGhpZXJhcmNoaWNhbFJlcHVsc2lvbjoge1xuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIG5vZGVEaXN0YW5jZTogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBhdm9pZE92ZXJsYXA6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIG1heFZlbG9jaXR5OiB7IG51bWJlciB9LFxuICAgIG1pblZlbG9jaXR5OiB7IG51bWJlciB9LCAvLyBweC9zXG4gICAgc29sdmVyOiB7XG4gICAgICBzdHJpbmc6IFtcbiAgICAgICAgXCJiYXJuZXNIdXRcIixcbiAgICAgICAgXCJyZXB1bHNpb25cIixcbiAgICAgICAgXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIixcbiAgICAgICAgXCJmb3JjZUF0bGFzMkJhc2VkXCIsXG4gICAgICBdLFxuICAgIH0sXG4gICAgc3RhYmlsaXphdGlvbjoge1xuICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBpdGVyYXRpb25zOiB7IG51bWJlciB9LCAvLyBtYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb24gdG8gc3RhYmlsaXplXG4gICAgICB1cGRhdGVJbnRlcnZhbDogeyBudW1iZXIgfSxcbiAgICAgIG9ubHlEeW5hbWljRWRnZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgZml0OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgdGltZXN0ZXA6IHsgbnVtYmVyIH0sXG4gICAgYWRhcHRpdmVUaW1lc3RlcDogeyBib29sZWFuOiBib29sIH0sXG4gICAgd2luZDoge1xuICAgICAgeDogeyBudW1iZXIgfSxcbiAgICAgIHk6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuXG4gIC8vZ2xvYmFscyA6XG4gIGF1dG9SZXNpemU6IHsgYm9vbGVhbjogYm9vbCB9LFxuICBjbGlja1RvVXNlOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgbG9jYWxlOiB7IHN0cmluZyB9LFxuICBsb2NhbGVzOiB7XG4gICAgX19hbnlfXzogeyBhbnkgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgaGVpZ2h0OiB7IHN0cmluZyB9LFxuICB3aWR0aDogeyBzdHJpbmcgfSxcbiAgX190eXBlX186IHsgb2JqZWN0IH0sXG59O1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cblxuLyoqXG4gKiBUaGlzIHByb3ZpZGVzIHJhbmdlcywgaW5pdGlhbCB2YWx1ZXMsIHN0ZXBzIGFuZCBkcm9wZG93biBtZW51IGNob2ljZXMgZm9yIHRoZVxuICogY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAcmVtYXJrc1xuICogQ2hlY2tib3g6IGBib29sZWFuYFxuICogICBUaGUgdmFsdWUgc3VwbGxpZWQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbml0aWFsIHZhbHVlLlxuICpcbiAqIFRleHQgZmllbGQ6IGBzdHJpbmdgXG4gKiAgIFRoZSBwYXNzZWQgdGV4dCB3aWxsIGJlIHVzZWQgYXMgdGhlIGluaXRpYWwgdmFsdWUuIEFueSB0ZXh0IHdpbGwgYmVcbiAqICAgYWNjZXB0ZWQgYWZ0ZXJ3YXJkcy5cbiAqXG4gKiBOdW1iZXIgcmFuZ2U6IGBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXWBcbiAqICAgVGhlIG1lYW5pbmdzIGFyZSBgW2luaXRpYWwgdmFsdWUsIG1pbiwgbWF4LCBzdGVwXWAuXG4gKlxuICogRHJvcGRvd246IGBbRXhjbHVkZTxzdHJpbmcsIFwiY29sb3JcIj4sIC4uLihzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKVtdXWBcbiAqICAgVHJhbnNsYXRpb25zIGZvciBwZW9wbGUgd2l0aCBwb29yIHVuZGVyc3RhbmRpbmcgb2YgVHlwZVNjcmlwdDogdGhlIGZpcnN0XG4gKiAgIHZhbHVlIGFsd2F5cyBoYXMgdG8gYmUgYSBzdHJpbmcgYnV0IG5ldmVyIGBcImNvbG9yXCJgLCB0aGUgcmVzdCBjYW4gYmUgYW55XG4gKiAgIGNvbWJpbmF0aW9uIG9mIHN0cmluZ3MsIG51bWJlcnMgYW5kIGJvb2xlYW5zLlxuICpcbiAqIENvbG9yIHBpY2tlcjogYFtcImNvbG9yXCIsIHN0cmluZ11gXG4gKiAgIFRoZSBmaXJzdCB2YWx1ZSBzYXlzIHRoaXMgd2lsbCBiZSBhIGNvbG9yIHBpY2tlciBub3QgYSBkcm9wZG93biBtZW51LiBUaGVcbiAqICAgbmV4dCB2YWx1ZSBpcyB0aGUgaW5pdGlhbCBjb2xvci5cbiAqL1xuY29uc3QgY29uZmlndXJlT3B0aW9uczogQ29uZmlndXJhdG9yQ29uZmlnID0ge1xuICBub2Rlczoge1xuICAgIGJvcmRlcldpZHRoOiBbMSwgMCwgMTAsIDFdLFxuICAgIGJvcmRlcldpZHRoU2VsZWN0ZWQ6IFsyLCAwLCAxMCwgMV0sXG4gICAgY29sb3I6IHtcbiAgICAgIGJvcmRlcjogW1wiY29sb3JcIiwgXCIjMkI3Q0U5XCJdLFxuICAgICAgYmFja2dyb3VuZDogW1wiY29sb3JcIiwgXCIjOTdDMkZDXCJdLFxuICAgICAgaGlnaGxpZ2h0OiB7XG4gICAgICAgIGJvcmRlcjogW1wiY29sb3JcIiwgXCIjMkI3Q0U5XCJdLFxuICAgICAgICBiYWNrZ3JvdW5kOiBbXCJjb2xvclwiLCBcIiNEMkU1RkZcIl0sXG4gICAgICB9LFxuICAgICAgaG92ZXI6IHtcbiAgICAgICAgYm9yZGVyOiBbXCJjb2xvclwiLCBcIiMyQjdDRTlcIl0sXG4gICAgICAgIGJhY2tncm91bmQ6IFtcImNvbG9yXCIsIFwiI0QyRTVGRlwiXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBvcGFjaXR5OiBbMCwgMCwgMSwgMC4xXSxcbiAgICBmaXhlZDoge1xuICAgICAgeDogZmFsc2UsXG4gICAgICB5OiBmYWxzZSxcbiAgICB9LFxuICAgIGZvbnQ6IHtcbiAgICAgIGNvbG9yOiBbXCJjb2xvclwiLCBcIiMzNDM0MzRcIl0sXG4gICAgICBzaXplOiBbMTQsIDAsIDEwMCwgMV0sIC8vIHB4XG4gICAgICBmYWNlOiBbXCJhcmlhbFwiLCBcInZlcmRhbmFcIiwgXCJ0YWhvbWFcIl0sXG4gICAgICBiYWNrZ3JvdW5kOiBbXCJjb2xvclwiLCBcIm5vbmVcIl0sXG4gICAgICBzdHJva2VXaWR0aDogWzAsIDAsIDUwLCAxXSwgLy8gcHhcbiAgICAgIHN0cm9rZUNvbG9yOiBbXCJjb2xvclwiLCBcIiNmZmZmZmZcIl0sXG4gICAgfSxcbiAgICAvL2dyb3VwOiAnc3RyaW5nJyxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogdHJ1ZSxcbiAgICAvL2ljb246IHtcbiAgICAvLyAgZmFjZTogJ3N0cmluZycsICAvLydGb250QXdlc29tZScsXG4gICAgLy8gIGNvZGU6ICdzdHJpbmcnLCAgLy8nXFx1ZjAwNycsXG4gICAgLy8gIHNpemU6IFs1MCwgMCwgMjAwLCAxXSwgIC8vNTAsXG4gICAgLy8gIGNvbG9yOiBbJ2NvbG9yJywnIzJCN0NFOSddICAgLy8nI2FhMDBmZidcbiAgICAvL30sXG4gICAgLy9pbWFnZTogJ3N0cmluZycsIC8vIC0tPiBVUkxcbiAgICBwaHlzaWNzOiB0cnVlLFxuICAgIHNjYWxpbmc6IHtcbiAgICAgIG1pbjogWzEwLCAwLCAyMDAsIDFdLFxuICAgICAgbWF4OiBbMzAsIDAsIDIwMCwgMV0sXG4gICAgICBsYWJlbDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbWluOiBbMTQsIDAsIDIwMCwgMV0sXG4gICAgICAgIG1heDogWzMwLCAwLCAyMDAsIDFdLFxuICAgICAgICBtYXhWaXNpYmxlOiBbMzAsIDAsIDIwMCwgMV0sXG4gICAgICAgIGRyYXdUaHJlc2hvbGQ6IFs1LCAwLCAyMCwgMV0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgc2hhZG93OiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGNvbG9yOiBcInJnYmEoMCwwLDAsMC41KVwiLFxuICAgICAgc2l6ZTogWzEwLCAwLCAyMCwgMV0sXG4gICAgICB4OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgICB5OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgfSxcbiAgICBzaGFwZTogW1xuICAgICAgXCJlbGxpcHNlXCIsXG4gICAgICBcImJveFwiLFxuICAgICAgXCJjaXJjbGVcIixcbiAgICAgIFwiZGF0YWJhc2VcIixcbiAgICAgIFwiZGlhbW9uZFwiLFxuICAgICAgXCJkb3RcIixcbiAgICAgIFwic3F1YXJlXCIsXG4gICAgICBcInN0YXJcIixcbiAgICAgIFwidGV4dFwiLFxuICAgICAgXCJ0cmlhbmdsZVwiLFxuICAgICAgXCJ0cmlhbmdsZURvd25cIixcbiAgICAgIFwiaGV4YWdvblwiLFxuICAgIF0sXG4gICAgc2hhcGVQcm9wZXJ0aWVzOiB7XG4gICAgICBib3JkZXJEYXNoZXM6IGZhbHNlLFxuICAgICAgYm9yZGVyUmFkaXVzOiBbNiwgMCwgMjAsIDFdLFxuICAgICAgaW50ZXJwb2xhdGlvbjogdHJ1ZSxcbiAgICAgIHVzZUltYWdlU2l6ZTogZmFsc2UsXG4gICAgfSxcbiAgICBzaXplOiBbMjUsIDAsIDIwMCwgMV0sXG4gIH0sXG4gIGVkZ2VzOiB7XG4gICAgYXJyb3dzOiB7XG4gICAgICB0bzogeyBlbmFibGVkOiBmYWxzZSwgc2NhbGVGYWN0b3I6IFsxLCAwLCAzLCAwLjA1XSwgdHlwZTogXCJhcnJvd1wiIH0sXG4gICAgICBtaWRkbGU6IHsgZW5hYmxlZDogZmFsc2UsIHNjYWxlRmFjdG9yOiBbMSwgMCwgMywgMC4wNV0sIHR5cGU6IFwiYXJyb3dcIiB9LFxuICAgICAgZnJvbTogeyBlbmFibGVkOiBmYWxzZSwgc2NhbGVGYWN0b3I6IFsxLCAwLCAzLCAwLjA1XSwgdHlwZTogXCJhcnJvd1wiIH0sXG4gICAgfSxcbiAgICBlbmRQb2ludE9mZnNldDoge1xuICAgICAgZnJvbTogWzAsIC0xMCwgMTAsIDFdLFxuICAgICAgdG86IFswLCAtMTAsIDEwLCAxXSxcbiAgICB9LFxuICAgIGFycm93U3RyaWtldGhyb3VnaDogdHJ1ZSxcbiAgICBjb2xvcjoge1xuICAgICAgY29sb3I6IFtcImNvbG9yXCIsIFwiIzg0ODQ4NFwiXSxcbiAgICAgIGhpZ2hsaWdodDogW1wiY29sb3JcIiwgXCIjODQ4NDg0XCJdLFxuICAgICAgaG92ZXI6IFtcImNvbG9yXCIsIFwiIzg0ODQ4NFwiXSxcbiAgICAgIGluaGVyaXQ6IFtcImZyb21cIiwgXCJ0b1wiLCBcImJvdGhcIiwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgb3BhY2l0eTogWzEsIDAsIDEsIDAuMDVdLFxuICAgIH0sXG4gICAgZGFzaGVzOiBmYWxzZSxcbiAgICBmb250OiB7XG4gICAgICBjb2xvcjogW1wiY29sb3JcIiwgXCIjMzQzNDM0XCJdLFxuICAgICAgc2l6ZTogWzE0LCAwLCAxMDAsIDFdLCAvLyBweFxuICAgICAgZmFjZTogW1wiYXJpYWxcIiwgXCJ2ZXJkYW5hXCIsIFwidGFob21hXCJdLFxuICAgICAgYmFja2dyb3VuZDogW1wiY29sb3JcIiwgXCJub25lXCJdLFxuICAgICAgc3Ryb2tlV2lkdGg6IFsyLCAwLCA1MCwgMV0sIC8vIHB4XG4gICAgICBzdHJva2VDb2xvcjogW1wiY29sb3JcIiwgXCIjZmZmZmZmXCJdLFxuICAgICAgYWxpZ246IFtcImhvcml6b250YWxcIiwgXCJ0b3BcIiwgXCJtaWRkbGVcIiwgXCJib3R0b21cIl0sXG4gICAgfSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGhvdmVyV2lkdGg6IFsxLjUsIDAsIDUsIDAuMV0sXG4gICAgbGFiZWxIaWdobGlnaHRCb2xkOiB0cnVlLFxuICAgIHBoeXNpY3M6IHRydWUsXG4gICAgc2NhbGluZzoge1xuICAgICAgbWluOiBbMSwgMCwgMTAwLCAxXSxcbiAgICAgIG1heDogWzE1LCAwLCAxMDAsIDFdLFxuICAgICAgbGFiZWw6IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbWluOiBbMTQsIDAsIDIwMCwgMV0sXG4gICAgICAgIG1heDogWzMwLCAwLCAyMDAsIDFdLFxuICAgICAgICBtYXhWaXNpYmxlOiBbMzAsIDAsIDIwMCwgMV0sXG4gICAgICAgIGRyYXdUaHJlc2hvbGQ6IFs1LCAwLCAyMCwgMV0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgc2VsZWN0aW9uV2lkdGg6IFsxLjUsIDAsIDUsIDAuMV0sXG4gICAgc2VsZlJlZmVyZW5jZVNpemU6IFsyMCwgMCwgMjAwLCAxXSxcbiAgICBzZWxmUmVmZXJlbmNlOiB7XG4gICAgICBzaXplOiBbMjAsIDAsIDIwMCwgMV0sXG4gICAgICBhbmdsZTogW01hdGguUEkgLyAyLCAtNiAqIE1hdGguUEksIDYgKiBNYXRoLlBJLCBNYXRoLlBJIC8gOF0sXG4gICAgICByZW5kZXJCZWhpbmRUaGVOb2RlOiB0cnVlLFxuICAgIH0sXG4gICAgc2hhZG93OiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGNvbG9yOiBcInJnYmEoMCwwLDAsMC41KVwiLFxuICAgICAgc2l6ZTogWzEwLCAwLCAyMCwgMV0sXG4gICAgICB4OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgICB5OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgfSxcbiAgICBzbW9vdGg6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICB0eXBlOiBbXG4gICAgICAgIFwiZHluYW1pY1wiLFxuICAgICAgICBcImNvbnRpbnVvdXNcIixcbiAgICAgICAgXCJkaXNjcmV0ZVwiLFxuICAgICAgICBcImRpYWdvbmFsQ3Jvc3NcIixcbiAgICAgICAgXCJzdHJhaWdodENyb3NzXCIsXG4gICAgICAgIFwiaG9yaXpvbnRhbFwiLFxuICAgICAgICBcInZlcnRpY2FsXCIsXG4gICAgICAgIFwiY3VydmVkQ1dcIixcbiAgICAgICAgXCJjdXJ2ZWRDQ1dcIixcbiAgICAgICAgXCJjdWJpY0JlemllclwiLFxuICAgICAgXSxcbiAgICAgIGZvcmNlRGlyZWN0aW9uOiBbXCJob3Jpem9udGFsXCIsIFwidmVydGljYWxcIiwgXCJub25lXCJdLFxuICAgICAgcm91bmRuZXNzOiBbMC41LCAwLCAxLCAwLjA1XSxcbiAgICB9LFxuICAgIHdpZHRoOiBbMSwgMCwgMzAsIDFdLFxuICB9LFxuICBsYXlvdXQ6IHtcbiAgICAvL3JhbmRvbVNlZWQ6IFswLCAwLCA1MDAsIDFdLFxuICAgIC8vaW1wcm92ZWRMYXlvdXQ6IHRydWUsXG4gICAgaGllcmFyY2hpY2FsOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGxldmVsU2VwYXJhdGlvbjogWzE1MCwgMjAsIDUwMCwgNV0sXG4gICAgICBub2RlU3BhY2luZzogWzEwMCwgMjAsIDUwMCwgNV0sXG4gICAgICB0cmVlU3BhY2luZzogWzIwMCwgMjAsIDUwMCwgNV0sXG4gICAgICBibG9ja1NoaWZ0aW5nOiB0cnVlLFxuICAgICAgZWRnZU1pbmltaXphdGlvbjogdHJ1ZSxcbiAgICAgIHBhcmVudENlbnRyYWxpemF0aW9uOiB0cnVlLFxuICAgICAgZGlyZWN0aW9uOiBbXCJVRFwiLCBcIkRVXCIsIFwiTFJcIiwgXCJSTFwiXSwgLy8gVUQsIERVLCBMUiwgUkxcbiAgICAgIHNvcnRNZXRob2Q6IFtcImh1YnNpemVcIiwgXCJkaXJlY3RlZFwiXSwgLy8gaHVic2l6ZSwgZGlyZWN0ZWRcbiAgICAgIHNoYWtlVG93YXJkczogW1wibGVhdmVzXCIsIFwicm9vdHNcIl0sIC8vIGxlYXZlcywgcm9vdHNcbiAgICB9LFxuICB9LFxuICBpbnRlcmFjdGlvbjoge1xuICAgIGRyYWdOb2RlczogdHJ1ZSxcbiAgICBkcmFnVmlldzogdHJ1ZSxcbiAgICBoaWRlRWRnZXNPbkRyYWc6IGZhbHNlLFxuICAgIGhpZGVFZGdlc09uWm9vbTogZmFsc2UsXG4gICAgaGlkZU5vZGVzT25EcmFnOiBmYWxzZSxcbiAgICBob3ZlcjogZmFsc2UsXG4gICAga2V5Ym9hcmQ6IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgc3BlZWQ6IHtcbiAgICAgICAgeDogWzEwLCAwLCA0MCwgMV0sXG4gICAgICAgIHk6IFsxMCwgMCwgNDAsIDFdLFxuICAgICAgICB6b29tOiBbMC4wMiwgMCwgMC4xLCAwLjAwNV0sXG4gICAgICB9LFxuICAgICAgYmluZFRvV2luZG93OiB0cnVlLFxuICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgIH0sXG4gICAgbXVsdGlzZWxlY3Q6IGZhbHNlLFxuICAgIG5hdmlnYXRpb25CdXR0b25zOiBmYWxzZSxcbiAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgIHNlbGVjdENvbm5lY3RlZEVkZ2VzOiB0cnVlLFxuICAgIGhvdmVyQ29ubmVjdGVkRWRnZXM6IHRydWUsXG4gICAgdG9vbHRpcERlbGF5OiBbMzAwLCAwLCAxMDAwLCAyNV0sXG4gICAgem9vbVZpZXc6IHRydWUsXG4gICAgem9vbVNwZWVkOiBbMSwgMC4xLCAyLCAwLjFdLFxuICB9LFxuICBtYW5pcHVsYXRpb246IHtcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBpbml0aWFsbHlBY3RpdmU6IGZhbHNlLFxuICB9LFxuICBwaHlzaWNzOiB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBiYXJuZXNIdXQ6IHtcbiAgICAgIHRoZXRhOiBbMC41LCAwLjEsIDEsIDAuMDVdLFxuICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiBbLTIwMDAsIC0zMDAwMCwgMCwgNTBdLFxuICAgICAgY2VudHJhbEdyYXZpdHk6IFswLjMsIDAsIDEwLCAwLjA1XSxcbiAgICAgIHNwcmluZ0xlbmd0aDogWzk1LCAwLCA1MDAsIDVdLFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IFswLjA0LCAwLCAxLjIsIDAuMDA1XSxcbiAgICAgIGRhbXBpbmc6IFswLjA5LCAwLCAxLCAwLjAxXSxcbiAgICAgIGF2b2lkT3ZlcmxhcDogWzAsIDAsIDEsIDAuMDFdLFxuICAgIH0sXG4gICAgZm9yY2VBdGxhczJCYXNlZDoge1xuICAgICAgdGhldGE6IFswLjUsIDAuMSwgMSwgMC4wNV0sXG4gICAgICBncmF2aXRhdGlvbmFsQ29uc3RhbnQ6IFstNTAsIC01MDAsIDAsIDFdLFxuICAgICAgY2VudHJhbEdyYXZpdHk6IFswLjAxLCAwLCAxLCAwLjAwNV0sXG4gICAgICBzcHJpbmdMZW5ndGg6IFs5NSwgMCwgNTAwLCA1XSxcbiAgICAgIHNwcmluZ0NvbnN0YW50OiBbMC4wOCwgMCwgMS4yLCAwLjAwNV0sXG4gICAgICBkYW1waW5nOiBbMC40LCAwLCAxLCAwLjAxXSxcbiAgICAgIGF2b2lkT3ZlcmxhcDogWzAsIDAsIDEsIDAuMDFdLFxuICAgIH0sXG4gICAgcmVwdWxzaW9uOiB7XG4gICAgICBjZW50cmFsR3Jhdml0eTogWzAuMiwgMCwgMTAsIDAuMDVdLFxuICAgICAgc3ByaW5nTGVuZ3RoOiBbMjAwLCAwLCA1MDAsIDVdLFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IFswLjA1LCAwLCAxLjIsIDAuMDA1XSxcbiAgICAgIG5vZGVEaXN0YW5jZTogWzEwMCwgMCwgNTAwLCA1XSxcbiAgICAgIGRhbXBpbmc6IFswLjA5LCAwLCAxLCAwLjAxXSxcbiAgICB9LFxuICAgIGhpZXJhcmNoaWNhbFJlcHVsc2lvbjoge1xuICAgICAgY2VudHJhbEdyYXZpdHk6IFswLjIsIDAsIDEwLCAwLjA1XSxcbiAgICAgIHNwcmluZ0xlbmd0aDogWzEwMCwgMCwgNTAwLCA1XSxcbiAgICAgIHNwcmluZ0NvbnN0YW50OiBbMC4wMSwgMCwgMS4yLCAwLjAwNV0sXG4gICAgICBub2RlRGlzdGFuY2U6IFsxMjAsIDAsIDUwMCwgNV0sXG4gICAgICBkYW1waW5nOiBbMC4wOSwgMCwgMSwgMC4wMV0sXG4gICAgICBhdm9pZE92ZXJsYXA6IFswLCAwLCAxLCAwLjAxXSxcbiAgICB9LFxuICAgIG1heFZlbG9jaXR5OiBbNTAsIDAsIDE1MCwgMV0sXG4gICAgbWluVmVsb2NpdHk6IFswLjEsIDAuMDEsIDAuNSwgMC4wMV0sXG4gICAgc29sdmVyOiBbXG4gICAgICBcImJhcm5lc0h1dFwiLFxuICAgICAgXCJmb3JjZUF0bGFzMkJhc2VkXCIsXG4gICAgICBcInJlcHVsc2lvblwiLFxuICAgICAgXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIixcbiAgICBdLFxuICAgIHRpbWVzdGVwOiBbMC41LCAwLjAxLCAxLCAwLjAxXSxcbiAgICB3aW5kOiB7XG4gICAgICB4OiBbMCwgLTEwLCAxMCwgMC4xXSxcbiAgICAgIHk6IFswLCAtMTAsIDEwLCAwLjFdLFxuICAgIH0sXG4gICAgLy9hZGFwdGl2ZVRpbWVzdGVwOiB0cnVlXG4gIH0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgY29uZmlndXJhdG9ySGlkZU9wdGlvbjogQ29uZmlndXJhdG9ySGlkZU9wdGlvbiA9IChcbiAgcGFyZW50UGF0aCxcbiAgb3B0aW9uTmFtZSxcbiAgb3B0aW9uc1xuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChcbiAgICBwYXJlbnRQYXRoLmluY2x1ZGVzKFwicGh5c2ljc1wiKSAmJlxuICAgIChjb25maWd1cmVPcHRpb25zIGFzIGFueSkucGh5c2ljcy5zb2x2ZXIuaW5jbHVkZXMob3B0aW9uTmFtZSkgJiZcbiAgICBvcHRpb25zLnBoeXNpY3Muc29sdmVyICE9PSBvcHRpb25OYW1lICYmXG4gICAgb3B0aW9uTmFtZSAhPT0gXCJ3aW5kXCJcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgeyBhbGxPcHRpb25zLCBjb25maWd1cmVPcHRpb25zIH07XG4iLCAiLyoqXG4gKiAgVGhlIEZsb3lk4oCTV2Fyc2hhbGwgYWxnb3JpdGhtIGlzIGFuIGFsZ29yaXRobSBmb3IgZmluZGluZyBzaG9ydGVzdCBwYXRocyBpblxuICogIGEgd2VpZ2h0ZWQgZ3JhcGggd2l0aCBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBlZGdlIHdlaWdodHMgKGJ1dCB3aXRoIG5vIG5lZ2F0aXZlXG4gKiAgY3ljbGVzKS4gLSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GbG95ZOKAk1dhcnNoYWxsX2FsZ29yaXRobVxuICovXG5jbGFzcyBGbG95ZFdhcnNoYWxsIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzQXJyYXlcbiAgICogQHBhcmFtIHtBcnJheS48RWRnZT59IGVkZ2VzQXJyYXlcbiAgICogQHJldHVybnMge3t9fVxuICAgKi9cbiAgZ2V0RGlzdGFuY2VzKGJvZHksIG5vZGVzQXJyYXksIGVkZ2VzQXJyYXkpIHtcbiAgICBjb25zdCBEX21hdHJpeCA9IHt9O1xuICAgIGNvbnN0IGVkZ2VzID0gYm9keS5lZGdlcztcblxuICAgIC8vIHByZXBhcmUgbWF0cml4IHdpdGggbGFyZ2UgbnVtYmVyc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzQXJyYXlbaV07XG4gICAgICBjb25zdCBjZWxsID0ge307XG4gICAgICBEX21hdHJpeFtub2RlXSA9IGNlbGw7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5vZGVzQXJyYXkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY2VsbFtub2Rlc0FycmF5W2pdXSA9IGkgPT0gaiA/IDAgOiAxZTk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcHV0IHRoZSB3ZWlnaHRzIGZvciB0aGUgZWRnZXMgaW4uIFRoaXMgYXNzdW1lcyB1bmlkaXJlY3Rpb25hbGl0eS5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tlZGdlc0FycmF5W2ldXTtcbiAgICAgIC8vIGVkZ2UgaGFzIHRvIGJlIGNvbm5lY3RlZCBpZiBpdCBjb3VudHMgdG8gdGhlIGRpc3RhbmNlcy4gSWYgaXQgaXMgY29ubmVjdGVkIHRvIGlubmVyIGNsdXN0ZXJzIGl0IHdpbGwgY3Jhc2ggc28gd2UgYWxzbyBjaGVjayBpZiBpdCBpcyBpbiB0aGUgRF9tYXRyaXhcbiAgICAgIGlmIChcbiAgICAgICAgZWRnZS5jb25uZWN0ZWQgPT09IHRydWUgJiZcbiAgICAgICAgRF9tYXRyaXhbZWRnZS5mcm9tSWRdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgRF9tYXRyaXhbZWRnZS50b0lkXSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgRF9tYXRyaXhbZWRnZS5mcm9tSWRdW2VkZ2UudG9JZF0gPSAxO1xuICAgICAgICBEX21hdHJpeFtlZGdlLnRvSWRdW2VkZ2UuZnJvbUlkXSA9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZUNvdW50ID0gbm9kZXNBcnJheS5sZW5ndGg7XG5cbiAgICAvLyBBZGFwdGVkIEZsb3lkV2Fyc2hhbGwgYmFzZWQgb24gdW5pZGlyZWN0aW9uYWxpdHkgdG8gZ3JlYXRseSByZWR1Y2UgY29tcGxleGl0eS5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IG5vZGVDb3VudDsgaysrKSB7XG4gICAgICBjb25zdCBrbm9kZSA9IG5vZGVzQXJyYXlba107XG4gICAgICBjb25zdCBrY29sbSA9IERfbWF0cml4W2tub2RlXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUNvdW50IC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlub2RlID0gbm9kZXNBcnJheVtpXTtcbiAgICAgICAgY29uc3QgaWNvbG0gPSBEX21hdHJpeFtpbm9kZV07XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5vZGVDb3VudDsgaisrKSB7XG4gICAgICAgICAgY29uc3Qgam5vZGUgPSBub2Rlc0FycmF5W2pdO1xuICAgICAgICAgIGNvbnN0IGpjb2xtID0gRF9tYXRyaXhbam5vZGVdO1xuXG4gICAgICAgICAgY29uc3QgdmFsID0gTWF0aC5taW4oaWNvbG1bam5vZGVdLCBpY29sbVtrbm9kZV0gKyBrY29sbVtqbm9kZV0pO1xuICAgICAgICAgIGljb2xtW2pub2RlXSA9IHZhbDtcbiAgICAgICAgICBqY29sbVtpbm9kZV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gRF9tYXRyaXg7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxveWRXYXJzaGFsbDtcbiIsICIvLyBkaXN0YW5jZSBmaW5kaW5nIGFsZ29yaXRobVxuaW1wb3J0IEZsb3lkV2Fyc2hhbGwgZnJvbSBcIi4vY29tcG9uZW50cy9hbGdvcml0aG1zL0Zsb3lkV2Fyc2hhbGwuanNcIjtcblxuLyoqXG4gKiBLYW1hZGFLYXdhaSBwb3NpdGlvbnMgdGhlIG5vZGVzIGluaXRpYWxseSBiYXNlZCBvblxuICpcbiAqIFwiQU4gQUxHT1JJVEhNIEZPUiBEUkFXSU5HIEdFTkVSQUwgVU5ESVJFQ1RFRCBHUkFQSFNcIlxuICogLS0gVG9taWhpc2EgS0FNQURBIGFuZCBTYXRvcnUgS0FXQUkgaW4gMTk4OVxuICpcbiAqIFBvc3NpYmxlIG9wdGltaXphdGlvbnMgaW4gdGhlIGRpc3RhbmNlIGNhbGN1bGF0aW9uIGNhbiBiZSBpbXBsZW1lbnRlZC5cbiAqL1xuY2xhc3MgS2FtYWRhS2F3YWkge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VMZW5ndGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VTdHJlbmd0aFxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgZWRnZUxlbmd0aCwgZWRnZVN0cmVuZ3RoKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnNwcmluZ0xlbmd0aCA9IGVkZ2VMZW5ndGg7XG4gICAgdGhpcy5zcHJpbmdDb25zdGFudCA9IGVkZ2VTdHJlbmd0aDtcbiAgICB0aGlzLmRpc3RhbmNlU29sdmVyID0gbmV3IEZsb3lkV2Fyc2hhbGwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3Qgc3VyZSBpZiBuZWVkZWQgYnV0IGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgc3ByaW5nIGxlbmd0aCBhbmQgc3ByaW5nIGNvbnN0YW50XG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuc3ByaW5nTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc3ByaW5nTGVuZ3RoID0gb3B0aW9ucy5zcHJpbmdMZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5zcHJpbmdDb25zdGFudCkge1xuICAgICAgICB0aGlzLnNwcmluZ0NvbnN0YW50ID0gb3B0aW9ucy5zcHJpbmdDb25zdGFudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUG9zaXRpb24gdGhlIHN5c3RlbVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gbm9kZXNBcnJheVxuICAgKiBAcGFyYW0ge0FycmF5Ljx2aXMuRWRnZT59IGVkZ2VzQXJyYXlcbiAgICogQHBhcmFtIHtib29sZWFufSBbaWdub3JlQ2x1c3RlcnM9ZmFsc2VdXG4gICAqL1xuICBzb2x2ZShub2Rlc0FycmF5LCBlZGdlc0FycmF5LCBpZ25vcmVDbHVzdGVycyA9IGZhbHNlKSB7XG4gICAgLy8gZ2V0IGRpc3RhbmNlIG1hdHJpeFxuICAgIGNvbnN0IERfbWF0cml4ID0gdGhpcy5kaXN0YW5jZVNvbHZlci5nZXREaXN0YW5jZXMoXG4gICAgICB0aGlzLmJvZHksXG4gICAgICBub2Rlc0FycmF5LFxuICAgICAgZWRnZXNBcnJheVxuICAgICk7IC8vIGRpc3RhbmNlIG1hdHJpeFxuXG4gICAgLy8gZ2V0IHRoZSBMIE1hdHJpeFxuICAgIHRoaXMuX2NyZWF0ZUxfbWF0cml4KERfbWF0cml4KTtcblxuICAgIC8vIGdldCB0aGUgSyBNYXRyaXhcbiAgICB0aGlzLl9jcmVhdGVLX21hdHJpeChEX21hdHJpeCk7XG5cbiAgICAvLyBpbml0aWFsIEUgTWF0cml4XG4gICAgdGhpcy5fY3JlYXRlRV9tYXRyaXgoKTtcblxuICAgIC8vIGNhbGN1bGF0ZSBwb3NpdGlvbnNcbiAgICBjb25zdCB0aHJlc2hvbGQgPSAwLjAxO1xuICAgIGNvbnN0IGlubmVyVGhyZXNob2xkID0gMTtcbiAgICBsZXQgaXRlcmF0aW9ucyA9IDA7XG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IE1hdGgubWF4KFxuICAgICAgMTAwMCxcbiAgICAgIE1hdGgubWluKDEwICogdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aCwgNjAwMClcbiAgICApO1xuICAgIGNvbnN0IG1heElubmVySXRlcmF0aW9ucyA9IDU7XG5cbiAgICBsZXQgbWF4RW5lcmd5ID0gMWU5O1xuICAgIGxldCBoaWdoRV9ub2RlSWQgPSAwLFxuICAgICAgZEVfZHggPSAwLFxuICAgICAgZEVfZHkgPSAwLFxuICAgICAgZGVsdGFfbSA9IDAsXG4gICAgICBzdWJJdGVyYXRpb25zID0gMDtcblxuICAgIHdoaWxlIChtYXhFbmVyZ3kgPiB0aHJlc2hvbGQgJiYgaXRlcmF0aW9ucyA8IG1heEl0ZXJhdGlvbnMpIHtcbiAgICAgIGl0ZXJhdGlvbnMgKz0gMTtcbiAgICAgIFtoaWdoRV9ub2RlSWQsIG1heEVuZXJneSwgZEVfZHgsIGRFX2R5XSA9XG4gICAgICAgIHRoaXMuX2dldEhpZ2hlc3RFbmVyZ3lOb2RlKGlnbm9yZUNsdXN0ZXJzKTtcbiAgICAgIGRlbHRhX20gPSBtYXhFbmVyZ3k7XG4gICAgICBzdWJJdGVyYXRpb25zID0gMDtcbiAgICAgIHdoaWxlIChkZWx0YV9tID4gaW5uZXJUaHJlc2hvbGQgJiYgc3ViSXRlcmF0aW9ucyA8IG1heElubmVySXRlcmF0aW9ucykge1xuICAgICAgICBzdWJJdGVyYXRpb25zICs9IDE7XG4gICAgICAgIHRoaXMuX21vdmVOb2RlKGhpZ2hFX25vZGVJZCwgZEVfZHgsIGRFX2R5KTtcbiAgICAgICAgW2RlbHRhX20sIGRFX2R4LCBkRV9keV0gPSB0aGlzLl9nZXRFbmVyZ3koaGlnaEVfbm9kZUlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBub2RlIHdpdGggdGhlIGhpZ2hlc3QgZW5lcmd5XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaWdub3JlQ2x1c3RlcnNcbiAgICogQHJldHVybnMge251bWJlcltdfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEhpZ2hlc3RFbmVyZ3lOb2RlKGlnbm9yZUNsdXN0ZXJzKSB7XG4gICAgY29uc3Qgbm9kZXNBcnJheSA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBsZXQgbWF4RW5lcmd5ID0gMDtcbiAgICBsZXQgbWF4RW5lcmd5Tm9kZUlkID0gbm9kZXNBcnJheVswXTtcbiAgICBsZXQgZEVfZHhfbWF4ID0gMCxcbiAgICAgIGRFX2R5X21heCA9IDA7XG5cbiAgICBmb3IgKGxldCBub2RlSWR4ID0gMDsgbm9kZUlkeCA8IG5vZGVzQXJyYXkubGVuZ3RoOyBub2RlSWR4KyspIHtcbiAgICAgIGNvbnN0IG0gPSBub2Rlc0FycmF5W25vZGVJZHhdO1xuICAgICAgLy8gYnkgbm90IGV2YWx1YXRpbmcgbm9kZXMgd2l0aCBwcmVkZWZpbmVkIHBvc2l0aW9ucyB3ZSBzaG91bGQgb25seSBtb3ZlIG5vZGVzIHRoYXQgaGF2ZSBubyBwb3NpdGlvbnMuXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGVzW21dLnByZWRlZmluZWRQb3NpdGlvbiAhPT0gdHJ1ZSB8fFxuICAgICAgICAobm9kZXNbbV0uaXNDbHVzdGVyID09PSB0cnVlICYmIGlnbm9yZUNsdXN0ZXJzID09PSB0cnVlKSB8fFxuICAgICAgICBub2Rlc1ttXS5vcHRpb25zLmZpeGVkLnggIT09IHRydWUgfHxcbiAgICAgICAgbm9kZXNbbV0ub3B0aW9ucy5maXhlZC55ICE9PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgW2RlbHRhX20sIGRFX2R4LCBkRV9keV0gPSB0aGlzLl9nZXRFbmVyZ3kobSk7XG4gICAgICAgIGlmIChtYXhFbmVyZ3kgPCBkZWx0YV9tKSB7XG4gICAgICAgICAgbWF4RW5lcmd5ID0gZGVsdGFfbTtcbiAgICAgICAgICBtYXhFbmVyZ3lOb2RlSWQgPSBtO1xuICAgICAgICAgIGRFX2R4X21heCA9IGRFX2R4O1xuICAgICAgICAgIGRFX2R5X21heCA9IGRFX2R5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFttYXhFbmVyZ3lOb2RlSWQsIG1heEVuZXJneSwgZEVfZHhfbWF4LCBkRV9keV9tYXhdO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGN1bGF0ZSB0aGUgZW5lcmd5IG9mIGEgc2luZ2xlIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBtXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRFbmVyZ3kobSkge1xuICAgIGNvbnN0IFtkRV9keCwgZEVfZHldID0gdGhpcy5FX3N1bXNbbV07XG4gICAgY29uc3QgZGVsdGFfbSA9IE1hdGguc3FydChkRV9keCAqKiAyICsgZEVfZHkgKiogMik7XG4gICAgcmV0dXJuIFtkZWx0YV9tLCBkRV9keCwgZEVfZHldO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIG5vZGUgYmFzZWQgb24gaXQncyBlbmVyZ3lcbiAgICogdGhlIGR4IGFuZCBkeSBhcmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBsaW5lYXIgc3lzdGVtIHByb3Bvc2VkIGJ5IEthbWFkYSBhbmQgS2F3YWlcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRFX2R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkRV9keVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21vdmVOb2RlKG0sIGRFX2R4LCBkRV9keSkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgbGV0IGQyRV9keDIgPSAwO1xuICAgIGxldCBkMkVfZHhkeSA9IDA7XG4gICAgbGV0IGQyRV9keTIgPSAwO1xuXG4gICAgY29uc3QgeF9tID0gbm9kZXNbbV0ueDtcbiAgICBjb25zdCB5X20gPSBub2Rlc1ttXS55O1xuICAgIGNvbnN0IGttID0gdGhpcy5LX21hdHJpeFttXTtcbiAgICBjb25zdCBsbSA9IHRoaXMuTF9tYXRyaXhbbV07XG5cbiAgICBmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IG5vZGVzQXJyYXkubGVuZ3RoOyBpSWR4KyspIHtcbiAgICAgIGNvbnN0IGkgPSBub2Rlc0FycmF5W2lJZHhdO1xuICAgICAgaWYgKGkgIT09IG0pIHtcbiAgICAgICAgY29uc3QgeF9pID0gbm9kZXNbaV0ueDtcbiAgICAgICAgY29uc3QgeV9pID0gbm9kZXNbaV0ueTtcbiAgICAgICAgY29uc3Qga21hdCA9IGttW2ldO1xuICAgICAgICBjb25zdCBsbWF0ID0gbG1baV07XG4gICAgICAgIGNvbnN0IGRlbm9taW5hdG9yID0gMS4wIC8gKCh4X20gLSB4X2kpICoqIDIgKyAoeV9tIC0geV9pKSAqKiAyKSAqKiAxLjU7XG4gICAgICAgIGQyRV9keDIgKz0ga21hdCAqICgxIC0gbG1hdCAqICh5X20gLSB5X2kpICoqIDIgKiBkZW5vbWluYXRvcik7XG4gICAgICAgIGQyRV9keGR5ICs9IGttYXQgKiAobG1hdCAqICh4X20gLSB4X2kpICogKHlfbSAtIHlfaSkgKiBkZW5vbWluYXRvcik7XG4gICAgICAgIGQyRV9keTIgKz0ga21hdCAqICgxIC0gbG1hdCAqICh4X20gLSB4X2kpICoqIDIgKiBkZW5vbWluYXRvcik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG1ha2UgdGhlIHZhcmlhYmxlIG5hbWVzIGVhc2llciB0byBtYWtlIHRoZSBzb2x2aW5nIG9mIHRoZSBsaW5lYXIgc3lzdGVtIGVhc2llciB0byByZWFkXG4gICAgY29uc3QgQSA9IGQyRV9keDIsXG4gICAgICBCID0gZDJFX2R4ZHksXG4gICAgICBDID0gZEVfZHgsXG4gICAgICBEID0gZDJFX2R5MixcbiAgICAgIEUgPSBkRV9keTtcblxuICAgIC8vIHNvbHZlIHRoZSBsaW5lYXIgc3lzdGVtIGZvciBkeCBhbmQgZHlcbiAgICBjb25zdCBkeSA9IChDIC8gQSArIEUgLyBCKSAvIChCIC8gQSAtIEQgLyBCKTtcbiAgICBjb25zdCBkeCA9IC0oQiAqIGR5ICsgQykgLyBBO1xuXG4gICAgLy8gbW92ZSB0aGUgbm9kZVxuICAgIG5vZGVzW21dLnggKz0gZHg7XG4gICAgbm9kZXNbbV0ueSArPSBkeTtcblxuICAgIC8vIFJlY2FsY3VsYXRlIEVfbWF0cml4IChzaG91bGQgYmUgaW5jcmVtZW50YWwpXG4gICAgdGhpcy5fdXBkYXRlRV9tYXRyaXgobSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBMIG1hdHJpeDogZWRnZSBsZW5ndGggdGltZXMgc2hvcnRlc3QgcGF0aFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gRF9tYXRyaXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVMX21hdHJpeChEX21hdHJpeCkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3QgZWRnZUxlbmd0aCA9IHRoaXMuc3ByaW5nTGVuZ3RoO1xuXG4gICAgdGhpcy5MX21hdHJpeCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5MX21hdHJpeFtub2Rlc0FycmF5W2ldXSA9IHt9O1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBub2Rlc0FycmF5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHRoaXMuTF9tYXRyaXhbbm9kZXNBcnJheVtpXV1bbm9kZXNBcnJheVtqXV0gPVxuICAgICAgICAgIGVkZ2VMZW5ndGggKiBEX21hdHJpeFtub2Rlc0FycmF5W2ldXVtub2Rlc0FycmF5W2pdXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBLIG1hdHJpeDogc3ByaW5nIGNvbnN0YW50cyB0aW1lcyBzaG9ydGVzdCBwYXRoXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBEX21hdHJpeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUtfbWF0cml4KERfbWF0cml4KSB7XG4gICAgY29uc3Qgbm9kZXNBcnJheSA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcbiAgICBjb25zdCBlZGdlU3RyZW5ndGggPSB0aGlzLnNwcmluZ0NvbnN0YW50O1xuXG4gICAgdGhpcy5LX21hdHJpeCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5LX21hdHJpeFtub2Rlc0FycmF5W2ldXSA9IHt9O1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBub2Rlc0FycmF5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHRoaXMuS19tYXRyaXhbbm9kZXNBcnJheVtpXV1bbm9kZXNBcnJheVtqXV0gPVxuICAgICAgICAgIGVkZ2VTdHJlbmd0aCAqIERfbWF0cml4W25vZGVzQXJyYXlbaV1dW25vZGVzQXJyYXlbal1dICoqIC0yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiAgQ3JlYXRlIG1hdHJpeCB3aXRoIGFsbCBlbmVyZ2llcyBiZXR3ZWVuIG5vZGVzXG4gICAqXG4gICAqICBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUVfbWF0cml4KCkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgdGhpcy5FX21hdHJpeCA9IHt9O1xuICAgIHRoaXMuRV9zdW1zID0ge307XG4gICAgZm9yIChsZXQgbUlkeCA9IDA7IG1JZHggPCBub2Rlc0FycmF5Lmxlbmd0aDsgbUlkeCsrKSB7XG4gICAgICB0aGlzLkVfbWF0cml4W25vZGVzQXJyYXlbbUlkeF1dID0gW107XG4gICAgfVxuICAgIGZvciAobGV0IG1JZHggPSAwOyBtSWR4IDwgbm9kZXNBcnJheS5sZW5ndGg7IG1JZHgrKykge1xuICAgICAgY29uc3QgbSA9IG5vZGVzQXJyYXlbbUlkeF07XG4gICAgICBjb25zdCB4X20gPSBub2Rlc1ttXS54O1xuICAgICAgY29uc3QgeV9tID0gbm9kZXNbbV0ueTtcbiAgICAgIGxldCBkRV9keCA9IDA7XG4gICAgICBsZXQgZEVfZHkgPSAwO1xuICAgICAgZm9yIChsZXQgaUlkeCA9IG1JZHg7IGlJZHggPCBub2Rlc0FycmF5Lmxlbmd0aDsgaUlkeCsrKSB7XG4gICAgICAgIGNvbnN0IGkgPSBub2Rlc0FycmF5W2lJZHhdO1xuICAgICAgICBpZiAoaSAhPT0gbSkge1xuICAgICAgICAgIGNvbnN0IHhfaSA9IG5vZGVzW2ldLng7XG4gICAgICAgICAgY29uc3QgeV9pID0gbm9kZXNbaV0ueTtcbiAgICAgICAgICBjb25zdCBkZW5vbWluYXRvciA9XG4gICAgICAgICAgICAxLjAgLyBNYXRoLnNxcnQoKHhfbSAtIHhfaSkgKiogMiArICh5X20gLSB5X2kpICoqIDIpO1xuICAgICAgICAgIHRoaXMuRV9tYXRyaXhbbV1baUlkeF0gPSBbXG4gICAgICAgICAgICB0aGlzLktfbWF0cml4W21dW2ldICpcbiAgICAgICAgICAgICAgKHhfbSAtIHhfaSAtIHRoaXMuTF9tYXRyaXhbbV1baV0gKiAoeF9tIC0geF9pKSAqIGRlbm9taW5hdG9yKSxcbiAgICAgICAgICAgIHRoaXMuS19tYXRyaXhbbV1baV0gKlxuICAgICAgICAgICAgICAoeV9tIC0geV9pIC0gdGhpcy5MX21hdHJpeFttXVtpXSAqICh5X20gLSB5X2kpICogZGVub21pbmF0b3IpLFxuICAgICAgICAgIF07XG4gICAgICAgICAgdGhpcy5FX21hdHJpeFtpXVttSWR4XSA9IHRoaXMuRV9tYXRyaXhbbV1baUlkeF07XG4gICAgICAgICAgZEVfZHggKz0gdGhpcy5FX21hdHJpeFttXVtpSWR4XVswXTtcbiAgICAgICAgICBkRV9keSArPSB0aGlzLkVfbWF0cml4W21dW2lJZHhdWzFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvL1N0b3JlIHN1bVxuICAgICAgdGhpcy5FX3N1bXNbbV0gPSBbZEVfZHgsIGRFX2R5XTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG1ldGhvZCwganVzdCBkb2luZyBzaW5nbGUgY29sdW1uIChyb3dzIGFyZSBhdXRvLXVwZGF0ZWQpICh1cGRhdGUgYWxsIHN1bXMpXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlRV9tYXRyaXgobSkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgY29sbSA9IHRoaXMuRV9tYXRyaXhbbV07XG4gICAgY29uc3Qga2NvbG0gPSB0aGlzLktfbWF0cml4W21dO1xuICAgIGNvbnN0IGxjb2xtID0gdGhpcy5MX21hdHJpeFttXTtcbiAgICBjb25zdCB4X20gPSBub2Rlc1ttXS54O1xuICAgIGNvbnN0IHlfbSA9IG5vZGVzW21dLnk7XG4gICAgbGV0IGRFX2R4ID0gMDtcbiAgICBsZXQgZEVfZHkgPSAwO1xuICAgIGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgbm9kZXNBcnJheS5sZW5ndGg7IGlJZHgrKykge1xuICAgICAgY29uc3QgaSA9IG5vZGVzQXJyYXlbaUlkeF07XG4gICAgICBpZiAoaSAhPT0gbSkge1xuICAgICAgICAvL0tlZXAgb2xkIGVuZXJneSB2YWx1ZSBmb3Igc3VtIG1vZGlmaWNhdGlvbiBiZWxvd1xuICAgICAgICBjb25zdCBjZWxsID0gY29sbVtpSWR4XTtcbiAgICAgICAgY29uc3Qgb2xkRHggPSBjZWxsWzBdO1xuICAgICAgICBjb25zdCBvbGREeSA9IGNlbGxbMV07XG5cbiAgICAgICAgLy9DYWxjIG5ldyBlbmVyZ3k6XG4gICAgICAgIGNvbnN0IHhfaSA9IG5vZGVzW2ldLng7XG4gICAgICAgIGNvbnN0IHlfaSA9IG5vZGVzW2ldLnk7XG4gICAgICAgIGNvbnN0IGRlbm9taW5hdG9yID1cbiAgICAgICAgICAxLjAgLyBNYXRoLnNxcnQoKHhfbSAtIHhfaSkgKiogMiArICh5X20gLSB5X2kpICoqIDIpO1xuICAgICAgICBjb25zdCBkeCA9XG4gICAgICAgICAga2NvbG1baV0gKiAoeF9tIC0geF9pIC0gbGNvbG1baV0gKiAoeF9tIC0geF9pKSAqIGRlbm9taW5hdG9yKTtcbiAgICAgICAgY29uc3QgZHkgPVxuICAgICAgICAgIGtjb2xtW2ldICogKHlfbSAtIHlfaSAtIGxjb2xtW2ldICogKHlfbSAtIHlfaSkgKiBkZW5vbWluYXRvcik7XG4gICAgICAgIGNvbG1baUlkeF0gPSBbZHgsIGR5XTtcbiAgICAgICAgZEVfZHggKz0gZHg7XG4gICAgICAgIGRFX2R5ICs9IGR5O1xuXG4gICAgICAgIC8vYWRkIG5ldyBlbmVyZ3kgdG8gc3VtIG9mIGVhY2ggY29sdW1uXG4gICAgICAgIGNvbnN0IHN1bSA9IHRoaXMuRV9zdW1zW2ldO1xuICAgICAgICBzdW1bMF0gKz0gZHggLSBvbGREeDtcbiAgICAgICAgc3VtWzFdICs9IGR5IC0gb2xkRHk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vU3RvcmUgc3VtIGF0IC0xIGluZGV4XG4gICAgdGhpcy5FX3N1bXNbbV0gPSBbZEVfZHgsIGRFX2R5XTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBLYW1hZGFLYXdhaTtcbiIsICIvLyBMb2FkIGN1c3RvbSBzaGFwZXMgaW50byBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcbmltcG9ydCBcIi4vc2hhcGVzXCI7XG5cbmltcG9ydCBcInZpcy11dGlsL2VzbmV4dC9zdHlsZXMvYWN0aXZhdG9yLmNzc1wiO1xuaW1wb3J0IFwidmlzLXV0aWwvZXNuZXh0L3N0eWxlcy9ib290c3RyYXAuY3NzXCI7XG5pbXBvcnQgXCJ2aXMtdXRpbC9lc25leHQvc3R5bGVzL2NvbG9yLXBpY2tlci5jc3NcIjtcbmltcG9ydCBcInZpcy11dGlsL2VzbmV4dC9zdHlsZXMvY29uZmlndXJhdG9yLmNzc1wiO1xuaW1wb3J0IFwidmlzLXV0aWwvZXNuZXh0L3N0eWxlcy9wb3B1cC5jc3NcIjtcblxuaW1wb3J0IEVtaXR0ZXIgZnJvbSBcImNvbXBvbmVudC1lbWl0dGVyXCI7XG5pbXBvcnQge1xuICBBY3RpdmF0b3IsXG4gIENvbmZpZ3VyYXRvcixcbiAgVkFMSURBVE9SX1BSSU5UX1NUWUxFLFxuICBWYWxpZGF0b3IsXG4gIGRlZXBFeHRlbmQsXG4gIHJlY3Vyc2l2ZURPTURlbGV0ZSxcbiAgc2VsZWN0aXZlRGVlcEV4dGVuZCxcbn0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgRE9UVG9HcmFwaCB9IGZyb20gXCIuL2RvdHBhcnNlclwiO1xuaW1wb3J0IHsgcGFyc2VHZXBoaSB9IGZyb20gXCIuL2dlcGhpUGFyc2VyXCI7XG5pbXBvcnQgKiBhcyBsb2NhbGVzIGZyb20gXCIuL2xvY2FsZXNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUxhbmd1YWdlQ29kZSB9IGZyb20gXCIuL2xvY2FsZS11dGlsc1wiO1xuXG5pbXBvcnQgSW1hZ2VzIGZyb20gXCIuL0ltYWdlc1wiO1xuaW1wb3J0IHsgR3JvdXBzIH0gZnJvbSBcIi4vbW9kdWxlcy9Hcm91cHNcIjtcbmltcG9ydCBOb2Rlc0hhbmRsZXIgZnJvbSBcIi4vbW9kdWxlcy9Ob2Rlc0hhbmRsZXJcIjtcbmltcG9ydCBFZGdlc0hhbmRsZXIgZnJvbSBcIi4vbW9kdWxlcy9FZGdlc0hhbmRsZXJcIjtcbmltcG9ydCBQaHlzaWNzRW5naW5lIGZyb20gXCIuL21vZHVsZXMvUGh5c2ljc0VuZ2luZVwiO1xuaW1wb3J0IENsdXN0ZXJFbmdpbmUgZnJvbSBcIi4vbW9kdWxlcy9DbHVzdGVyaW5nXCI7XG5pbXBvcnQgQ2FudmFzUmVuZGVyZXIgZnJvbSBcIi4vbW9kdWxlcy9DYW52YXNSZW5kZXJlclwiO1xuaW1wb3J0IENhbnZhcyBmcm9tIFwiLi9tb2R1bGVzL0NhbnZhc1wiO1xuaW1wb3J0IFZpZXcgZnJvbSBcIi4vbW9kdWxlcy9WaWV3XCI7XG5pbXBvcnQgSW50ZXJhY3Rpb25IYW5kbGVyIGZyb20gXCIuL21vZHVsZXMvSW50ZXJhY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgU2VsZWN0aW9uSGFuZGxlciBmcm9tIFwiLi9tb2R1bGVzL1NlbGVjdGlvbkhhbmRsZXJcIjtcbmltcG9ydCBMYXlvdXRFbmdpbmUgZnJvbSBcIi4vbW9kdWxlcy9MYXlvdXRFbmdpbmVcIjtcbmltcG9ydCBNYW5pcHVsYXRpb25TeXN0ZW0gZnJvbSBcIi4vbW9kdWxlcy9NYW5pcHVsYXRpb25TeXN0ZW1cIjtcbmltcG9ydCB7XG4gIGFsbE9wdGlvbnMsXG4gIGNvbmZpZ3VyZU9wdGlvbnMsXG4gIGNvbmZpZ3VyYXRvckhpZGVPcHRpb24sXG59IGZyb20gXCIuL29wdGlvbnNcIjtcbmltcG9ydCBLYW1hZGFLYXdhaSBmcm9tIFwiLi9tb2R1bGVzL0thbWFkYUthd2FpLmpzXCI7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV0d29yayB2aXN1YWxpemF0aW9uLCBkaXNwbGF5aW5nIG5vZGVzIGFuZCBlZGdlcy5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgIFRoZSBET00gZWxlbWVudCBpbiB3aGljaCB0aGUgTmV0d29yayB3aWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBjcmVhdGVkLiBOb3JtYWxseSBhIGRpdiBlbGVtZW50LlxuICogQHBhcmFtIHtvYmplY3R9IGRhdGEgICAgICAgICBBbiBvYmplY3QgY29udGFpbmluZyBwYXJhbWV0ZXJzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtBcnJheX0gbm9kZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0FycmF5fSBlZGdlc1xuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgICAgICBPcHRpb25zXG4gKiBAY2xhc3MgTmV0d29ya1xuICovXG5leHBvcnQgZnVuY3Rpb24gTmV0d29yayhjb250YWluZXIsIGRhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE5ldHdvcmspKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yXCIpO1xuICB9XG5cbiAgLy8gc2V0IGNvbnN0YW50IHZhbHVlc1xuICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBsb2NhbGU6IFwiZW5cIixcbiAgICBsb2NhbGVzOiBsb2NhbGVzLFxuICAgIGNsaWNrVG9Vc2U6IGZhbHNlLFxuICB9O1xuICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lcnMgZm9yIG5vZGVzIGFuZCBlZGdlcy5cbiAgICpcbiAgICogJ2VkZ2VzJyBhbmQgJ25vZGVzJyBjb250YWluIHRoZSBmdWxsIGRlZmluaXRpb25zIG9mIGFsbCB0aGUgbmV0d29yayBlbGVtZW50cy5cbiAgICogJ25vZGVJbmRpY2VzJyBhbmQgJ2VkZ2VJbmRpY2VzJyBjb250YWluIHRoZSBpZCdzIG9mIHRoZSBhY3RpdmUgZWxlbWVudHMuXG4gICAqXG4gICAqIFRoZSBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgYSBkZWZpbmVkIG5vZGUgbmVlZCBub3QgYmUgYWN0aXZlLCBpLmUuXG4gICAqIHZpc2libGUgb24gdGhlIGNhbnZhcy4gVGhpcyBoYXBwZW5zIGluIHBhcnRpY3VsYXIgd2hlbiBjbHVzdGVycyBhcmUgZGVmaW5lZCwgaW5cbiAgICogdGhhdCBjYXNlIHRoZXJlIHdpbGwgYmUgbm9kZXMgYW5kIGVkZ2VzIG5vdCBkaXNwbGF5ZWQuXG4gICAqIFRoZSBib3R0b20gbGluZSBpcyB0aGF0IGFsbCBjb2RlIHdpdGggYWN0aW9ucyByZWxhdGVkIHRvIHZpc2liaWxpdHksICptdXN0KiB1c2VcbiAgICogJ25vZGVJbmRpY2VzJyBhbmQgJ2VkZ2VJbmRpY2VzJywgbm90ICdub2RlcycgYW5kICdlZGdlcycgZGlyZWN0bHkuXG4gICAqL1xuICB0aGlzLmJvZHkgPSB7XG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG5cbiAgICAvLyBTZWUgY29tbWVudCBhYm92ZSBmb3IgZm9sbG93aW5nIGZpZWxkc1xuICAgIG5vZGVzOiB7fSxcbiAgICBub2RlSW5kaWNlczogW10sXG4gICAgZWRnZXM6IHt9LFxuICAgIGVkZ2VJbmRpY2VzOiBbXSxcblxuICAgIGVtaXR0ZXI6IHtcbiAgICAgIG9uOiB0aGlzLm9uLmJpbmQodGhpcyksXG4gICAgICBvZmY6IHRoaXMub2ZmLmJpbmQodGhpcyksXG4gICAgICBlbWl0OiB0aGlzLmVtaXQuYmluZCh0aGlzKSxcbiAgICAgIG9uY2U6IHRoaXMub25jZS5iaW5kKHRoaXMpLFxuICAgIH0sXG4gICAgZXZlbnRMaXN0ZW5lcnM6IHtcbiAgICAgIG9uVGFwOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uVG91Y2g6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Eb3VibGVUYXA6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Ib2xkOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uRHJhZ1N0YXJ0OiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uRHJhZzogZnVuY3Rpb24gKCkge30sXG4gICAgICBvbkRyYWdFbmQ6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Nb3VzZVdoZWVsOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uUGluY2g6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Nb3VzZU1vdmU6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25SZWxlYXNlOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uQ29udGV4dDogZnVuY3Rpb24gKCkge30sXG4gICAgfSxcbiAgICBkYXRhOiB7XG4gICAgICBub2RlczogbnVsbCwgLy8gQSBEYXRhU2V0IG9yIERhdGFWaWV3XG4gICAgICBlZGdlczogbnVsbCwgLy8gQSBEYXRhU2V0IG9yIERhdGFWaWV3XG4gICAgfSxcbiAgICBmdW5jdGlvbnM6IHtcbiAgICAgIGNyZWF0ZU5vZGU6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgY3JlYXRlRWRnZTogZnVuY3Rpb24gKCkge30sXG4gICAgICBnZXRQb2ludGVyOiBmdW5jdGlvbiAoKSB7fSxcbiAgICB9LFxuICAgIG1vZHVsZXM6IHt9LFxuICAgIHZpZXc6IHtcbiAgICAgIHNjYWxlOiAxLFxuICAgICAgdHJhbnNsYXRpb246IHsgeDogMCwgeTogMCB9LFxuICAgIH0sXG4gICAgc2VsZWN0aW9uQm94OiB7XG4gICAgICBzaG93OiBmYWxzZSxcbiAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIHN0YXJ0OiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgICAgZW5kOiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICAvLyBiaW5kIHRoZSBldmVudCBsaXN0ZW5lcnNcbiAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAvLyBzZXR0aW5nIHVwIGFsbCBtb2R1bGVzXG4gIHRoaXMuaW1hZ2VzID0gbmV3IEltYWdlcygoKSA9PiB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIikpOyAvLyBvYmplY3Qgd2l0aCBpbWFnZXNcbiAgdGhpcy5ncm91cHMgPSBuZXcgR3JvdXBzKCk7IC8vIG9iamVjdCB3aXRoIGdyb3Vwc1xuICB0aGlzLmNhbnZhcyA9IG5ldyBDYW52YXModGhpcy5ib2R5KTsgLy8gRE9NIGhhbmRsZXJcbiAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gbmV3IFNlbGVjdGlvbkhhbmRsZXIodGhpcy5ib2R5LCB0aGlzLmNhbnZhcyk7IC8vIFNlbGVjdGlvbiBoYW5kbGVyXG4gIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyID0gbmV3IEludGVyYWN0aW9uSGFuZGxlcihcbiAgICB0aGlzLmJvZHksXG4gICAgdGhpcy5jYW52YXMsXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyXG4gICk7IC8vIEludGVyYWN0aW9uIGhhbmRsZXIgaGFuZGxlcyBhbGwgdGhlIGhhbW1lciBiaW5kaW5ncyAodGhhdCBhcmUgYm91bmQgYnkgY2FudmFzKSwga2V5XG4gIHRoaXMudmlldyA9IG5ldyBWaWV3KHRoaXMuYm9keSwgdGhpcy5jYW52YXMpOyAvLyBjYW1lcmEgaGFuZGxlciwgZG9lcyBhbmltYXRpb25zIGFuZCB6b29tc1xuICB0aGlzLnJlbmRlcmVyID0gbmV3IENhbnZhc1JlbmRlcmVyKHRoaXMuYm9keSwgdGhpcy5jYW52YXMpOyAvLyByZW5kZXJlciwgc3RhcnRzIHJlbmRlcmxvb3AsIGhhcyBldmVudHMgdGhhdCBtb2R1bGVzIGNhbiBob29rIGludG9cbiAgdGhpcy5waHlzaWNzID0gbmV3IFBoeXNpY3NFbmdpbmUodGhpcy5ib2R5KTsgLy8gcGh5c2ljcyBlbmdpbmUsIGRvZXMgYWxsIHRoZSBzaW11bGF0aW9uc1xuICB0aGlzLmxheW91dEVuZ2luZSA9IG5ldyBMYXlvdXRFbmdpbmUodGhpcy5ib2R5KTsgLy8gbGF5b3V0IGVuZ2luZSBmb3IgaW5pdGFsIGxheW91dCBhbmQgaGllcmFyY2hpY2FsIGxheW91dFxuICB0aGlzLmNsdXN0ZXJpbmcgPSBuZXcgQ2x1c3RlckVuZ2luZSh0aGlzLmJvZHkpOyAvLyBjbHVzdGVyaW5nIGFwaVxuICB0aGlzLm1hbmlwdWxhdGlvbiA9IG5ldyBNYW5pcHVsYXRpb25TeXN0ZW0oXG4gICAgdGhpcy5ib2R5LFxuICAgIHRoaXMuY2FudmFzLFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICB0aGlzLmludGVyYWN0aW9uSGFuZGxlclxuICApOyAvLyBkYXRhIG1hbmlwdWxhdGlvbiBzeXN0ZW1cblxuICB0aGlzLm5vZGVzSGFuZGxlciA9IG5ldyBOb2Rlc0hhbmRsZXIoXG4gICAgdGhpcy5ib2R5LFxuICAgIHRoaXMuaW1hZ2VzLFxuICAgIHRoaXMuZ3JvdXBzLFxuICAgIHRoaXMubGF5b3V0RW5naW5lXG4gICk7IC8vIEhhbmRsZSBhZGRpbmcsIGRlbGV0aW5nIGFuZCB1cGRhdGluZyBvZiBub2RlcyBhcyB3ZWxsIGFzIGdsb2JhbCBvcHRpb25zXG4gIHRoaXMuZWRnZXNIYW5kbGVyID0gbmV3IEVkZ2VzSGFuZGxlcih0aGlzLmJvZHksIHRoaXMuaW1hZ2VzLCB0aGlzLmdyb3Vwcyk7IC8vIEhhbmRsZSBhZGRpbmcsIGRlbGV0aW5nIGFuZCB1cGRhdGluZyBvZiBlZGdlcyBhcyB3ZWxsIGFzIGdsb2JhbCBvcHRpb25zXG5cbiAgdGhpcy5ib2R5Lm1vZHVsZXNbXCJrYW1hZGFLYXdhaVwiXSA9IG5ldyBLYW1hZGFLYXdhaSh0aGlzLmJvZHksIDE1MCwgMC4wNSk7IC8vIExheW91dGluZyBhbGdvcml0aG0uXG4gIHRoaXMuYm9keS5tb2R1bGVzW1wiY2x1c3RlcmluZ1wiXSA9IHRoaXMuY2x1c3RlcmluZztcblxuICAvLyBjcmVhdGUgdGhlIERPTSBlbGVtZW50c1xuICB0aGlzLmNhbnZhcy5fY3JlYXRlKCk7XG5cbiAgLy8gYXBwbHkgb3B0aW9uc1xuICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgLy8gbG9hZCBkYXRhICh0aGUgZGlzYWJsZSBzdGFydCB2YXJpYWJsZSB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBlbmFibGVkIGNsdXN0ZXJpbmcpXG4gIHRoaXMuc2V0RGF0YShkYXRhKTtcbn1cblxuLy8gRXh0ZW5kIE5ldHdvcmsgd2l0aCBhbiBFbWl0dGVyIG1peGluXG5FbWl0dGVyKE5ldHdvcmsucHJvdG90eXBlKTtcblxuLyoqXG4gKiBTZXQgb3B0aW9uc1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gbnVsbCkge1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7IC8vIFRoaXMgZW5zdXJlcyB0aGF0IG9wdGlvbnMgaGFuZGxpbmcgZG9lc24ndCBjcmFzaCBpbiB0aGUgaGFuZGxpbmdcbiAgfVxuXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBlcnJvckZvdW5kID0gVmFsaWRhdG9yLnZhbGlkYXRlKG9wdGlvbnMsIGFsbE9wdGlvbnMpO1xuICAgIGlmIChlcnJvckZvdW5kID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjRXJyb3JzIGhhdmUgYmVlbiBmb3VuZCBpbiB0aGUgc3VwcGxpZWQgb3B0aW9ucyBvYmplY3QuXCIsXG4gICAgICAgIFZBTElEQVRPUl9QUklOVF9TVFlMRVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjb3B5IHRoZSBnbG9iYWwgZmllbGRzIG92ZXJcbiAgICBjb25zdCBmaWVsZHMgPSBbXCJsb2NhbGVcIiwgXCJsb2NhbGVzXCIsIFwiY2xpY2tUb1VzZVwiXTtcbiAgICBzZWxlY3RpdmVEZWVwRXh0ZW5kKGZpZWxkcywgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcblxuICAgIC8vIG5vcm1hbGl6ZSB0aGUgbG9jYWxlIG9yIHVzZSBFbmdsaXNoXG4gICAgaWYgKG9wdGlvbnMubG9jYWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMubG9jYWxlID0gbm9ybWFsaXplTGFuZ3VhZ2VDb2RlKFxuICAgICAgICBvcHRpb25zLmxvY2FsZXMgfHwgdGhpcy5vcHRpb25zLmxvY2FsZXMsXG4gICAgICAgIG9wdGlvbnMubG9jYWxlXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHRoZSBoaWVyYXJjaGljYWwgc3lzdGVtIGNhbiBhZGFwdCB0aGUgZWRnZXMgYW5kIHRoZSBwaHlzaWNzIHRvIGl0J3Mgb3duIG9wdGlvbnMgYmVjYXVzZSBub3QgYWxsIGNvbWJpbmF0aW9ucyB3b3JrIHdpdGggdGhlIGhpZXJhcmljaGljYWwgc3lzdGVtLlxuICAgIG9wdGlvbnMgPSB0aGlzLmxheW91dEVuZ2luZS5zZXRPcHRpb25zKG9wdGlvbnMubGF5b3V0LCBvcHRpb25zKTtcblxuICAgIHRoaXMuY2FudmFzLnNldE9wdGlvbnMob3B0aW9ucyk7IC8vIG9wdGlvbnMgZm9yIGNhbnZhcyBhcmUgaW4gZ2xvYmFsc1xuXG4gICAgLy8gcGFzcyB0aGUgb3B0aW9ucyB0byB0aGUgbW9kdWxlc1xuICAgIHRoaXMuZ3JvdXBzLnNldE9wdGlvbnMob3B0aW9ucy5ncm91cHMpO1xuICAgIHRoaXMubm9kZXNIYW5kbGVyLnNldE9wdGlvbnMob3B0aW9ucy5ub2Rlcyk7XG4gICAgdGhpcy5lZGdlc0hhbmRsZXIuc2V0T3B0aW9ucyhvcHRpb25zLmVkZ2VzKTtcbiAgICB0aGlzLnBoeXNpY3Muc2V0T3B0aW9ucyhvcHRpb25zLnBoeXNpY3MpO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uLnNldE9wdGlvbnMob3B0aW9ucy5tYW5pcHVsYXRpb24sIG9wdGlvbnMsIHRoaXMub3B0aW9ucyk7IC8vIG1hbmlwdWxhdGlvbiB1c2VzIHRoZSBsb2NhbGVzIGluIHRoZSBnbG9iYWxzXG5cbiAgICB0aGlzLmludGVyYWN0aW9uSGFuZGxlci5zZXRPcHRpb25zKG9wdGlvbnMuaW50ZXJhY3Rpb24pO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T3B0aW9ucyhvcHRpb25zLmludGVyYWN0aW9uKTsgLy8gb3B0aW9ucyBmb3IgcmVuZGVyaW5nIGFyZSBpbiBpbnRlcmFjdGlvblxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5zZXRPcHRpb25zKG9wdGlvbnMuaW50ZXJhY3Rpb24pOyAvLyBvcHRpb25zIGZvciBzZWxlY3Rpb24gYXJlIGluIGludGVyYWN0aW9uXG5cbiAgICAvLyByZWxvYWQgdGhlIHNldHRpbmdzIG9mIHRoZSBub2RlcyB0byBhcHBseSBjaGFuZ2VzIGluIGdyb3VwcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBieSBwb2ludGVyLlxuICAgIGlmIChvcHRpb25zLmdyb3VwcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVmcmVzaE5vZGVzXCIpO1xuICAgIH1cbiAgICAvLyB0aGVzZSB0d28gZG8gbm90IGhhdmUgb3B0aW9ucyBhdCB0aGUgbW9tZW50LCBoZXJlIGZvciBjb21wbGV0ZW5lc3NcbiAgICAvL3RoaXMudmlldy5zZXRPcHRpb25zKG9wdGlvbnMudmlldyk7XG4gICAgLy90aGlzLmNsdXN0ZXJpbmcuc2V0T3B0aW9ucyhvcHRpb25zLmNsdXN0ZXJpbmcpO1xuXG4gICAgaWYgKFwiY29uZmlndXJlXCIgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRvcikge1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRvciA9IG5ldyBDb25maWd1cmF0b3IoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmJvZHkuY29udGFpbmVyLFxuICAgICAgICAgIGNvbmZpZ3VyZU9wdGlvbnMsXG4gICAgICAgICAgdGhpcy5jYW52YXMucGl4ZWxSYXRpbyxcbiAgICAgICAgICBjb25maWd1cmF0b3JIaWRlT3B0aW9uXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29uZmlndXJhdG9yLnNldE9wdGlvbnMob3B0aW9ucy5jb25maWd1cmUpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBpcyBlbmFibGVkLCBjb3B5IGFsbCBvcHRpb25zIGFuZCBwdXQgdGhlbSBpbnRvIHRoZSBjb25maWcgc3lzdGVtXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdG9yICYmIHRoaXMuY29uZmlndXJhdG9yLm9wdGlvbnMuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgbmV0d29ya09wdGlvbnMgPSB7XG4gICAgICAgIG5vZGVzOiB7fSxcbiAgICAgICAgZWRnZXM6IHt9LFxuICAgICAgICBsYXlvdXQ6IHt9LFxuICAgICAgICBpbnRlcmFjdGlvbjoge30sXG4gICAgICAgIG1hbmlwdWxhdGlvbjoge30sXG4gICAgICAgIHBoeXNpY3M6IHt9LFxuICAgICAgICBnbG9iYWw6IHt9LFxuICAgICAgfTtcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMubm9kZXMsIHRoaXMubm9kZXNIYW5kbGVyLm9wdGlvbnMpO1xuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5lZGdlcywgdGhpcy5lZGdlc0hhbmRsZXIub3B0aW9ucyk7XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLmxheW91dCwgdGhpcy5sYXlvdXRFbmdpbmUub3B0aW9ucyk7XG4gICAgICAvLyBsb2FkIHRoZSBzZWxlY3Rpb25IYW5kbGVyIGFuZCByZW5kZXIgZGVmYXVsdCBvcHRpb25zIGluIHRvIHRoZSBpbnRlcmFjdGlvbiBncm91cFxuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5pbnRlcmFjdGlvbiwgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLm9wdGlvbnMpO1xuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5pbnRlcmFjdGlvbiwgdGhpcy5yZW5kZXJlci5vcHRpb25zKTtcblxuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5pbnRlcmFjdGlvbiwgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIub3B0aW9ucyk7XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLm1hbmlwdWxhdGlvbiwgdGhpcy5tYW5pcHVsYXRpb24ub3B0aW9ucyk7XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLnBoeXNpY3MsIHRoaXMucGh5c2ljcy5vcHRpb25zKTtcblxuICAgICAgLy8gbG9hZCBnbG9iYWxzIGludG8gdGhlIGdsb2JhbCBvYmplY3RcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuZ2xvYmFsLCB0aGlzLmNhbnZhcy5vcHRpb25zKTtcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuZ2xvYmFsLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRvci5zZXRNb2R1bGVPcHRpb25zKG5ldHdvcmtPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgbmV0d29yayBnbG9iYWwgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zLmNsaWNrVG9Vc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMuY2xpY2tUb1VzZSA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZhdG9yID0gbmV3IEFjdGl2YXRvcih0aGlzLmNhbnZhcy5mcmFtZSk7XG4gICAgICAgICAgdGhpcy5hY3RpdmF0b3Iub24oXCJjaGFuZ2VcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImFjdGl2YXRlXCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmF0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZhdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5hY3RpdmF0b3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImFjdGl2YXRlXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYWN0aXZhdGVcIik7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuc2V0U2l6ZSgpO1xuICAgIC8vIHN0YXJ0IHRoZSBwaHlzaWNzIHNpbXVsYXRpb24uIENhbiBiZSBzYWZlbHkgY2FsbGVkIG11bHRpcGxlIHRpbWVzLlxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gIH1cbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSB2aXNpYmxlIG5vZGVzIGFuZCBlZGdlcyBsaXN0IHdpdGggdGhlIG1vc3QgcmVjZW50IG5vZGUgc3RhdGUuXG4gKlxuICogVmlzaWJsZSBub2RlcyBhcmUgc3RvcmVkIGluIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5cbiAqIFZpc2libGUgZWRnZXMgYXJlIHN0b3JlZCBpbiB0aGlzLmJvZHkuZWRnZUluZGljZXMuXG4gKiBBIG5vZGUgb3IgZWRnZXMgaXMgdmlzaWJsZSBpZiBpdCBpcyBub3QgaGlkZGVuIG9yIGNsdXN0ZXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5OZXR3b3JrLnByb3RvdHlwZS5fdXBkYXRlVmlzaWJsZUluZGljZXMgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzID0gW107XG4gIHRoaXMuYm9keS5lZGdlSW5kaWNlcyA9IFtdO1xuXG4gIGZvciAoY29uc3Qgbm9kZUlkIGluIG5vZGVzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2Rlcywgbm9kZUlkKSkge1xuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5jbHVzdGVyaW5nLl9pc0NsdXN0ZXJlZE5vZGUobm9kZUlkKSAmJlxuICAgICAgICBub2Rlc1tub2RlSWRdLm9wdGlvbnMuaGlkZGVuID09PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5wdXNoKG5vZGVzW25vZGVJZF0uaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZWRnZUlkIGluIGVkZ2VzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZGdlcywgZWRnZUlkKSkge1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2VkZ2VJZF07XG5cbiAgICAgIC8vIEl0IGNhbiBoYXBwZW4gdGhhdCB0aGlzIGlzIGV4ZWN1dGVkICphZnRlciogYSBub2RlIGVkZ2UgaGFzIGJlZW4gcmVtb3ZlZCxcbiAgICAgIC8vIGJ1dCAqYmVmb3JlKiB0aGUgZWRnZSBpdHNlbGYgaGFzIGJlZW4gcmVtb3ZlZC4gVGFraW5nIHRoaXMgaW50byBhY2NvdW50LlxuICAgICAgY29uc3QgZnJvbU5vZGUgPSBub2Rlc1tlZGdlLmZyb21JZF07XG4gICAgICBjb25zdCB0b05vZGUgPSBub2Rlc1tlZGdlLnRvSWRdO1xuICAgICAgY29uc3QgZWRnZU5vZGVzUHJlc2VudCA9IGZyb21Ob2RlICE9PSB1bmRlZmluZWQgJiYgdG9Ob2RlICE9PSB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGlzVmlzaWJsZSA9XG4gICAgICAgICF0aGlzLmNsdXN0ZXJpbmcuX2lzQ2x1c3RlcmVkRWRnZShlZGdlSWQpICYmXG4gICAgICAgIGVkZ2Uub3B0aW9ucy5oaWRkZW4gPT09IGZhbHNlICYmXG4gICAgICAgIGVkZ2VOb2Rlc1ByZXNlbnQgJiZcbiAgICAgICAgZnJvbU5vZGUub3B0aW9ucy5oaWRkZW4gPT09IGZhbHNlICYmIC8vIEFsc28gaGlkZGVuIGlmIGFueSBvZiBpdHMgY29ubmVjdGluZyBub2RlcyBhcmUgaGlkZGVuXG4gICAgICAgIHRvTm9kZS5vcHRpb25zLmhpZGRlbiA9PT0gZmFsc2U7IC8vIGlkZW1cblxuICAgICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgICB0aGlzLmJvZHkuZWRnZUluZGljZXMucHVzaChlZGdlLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQmluZCBhbGwgZXZlbnRzXG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLmJpbmRFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhpcyBldmVudCB3aWxsIHRyaWdnZXIgYSByZWJ1aWxkaW5nIG9mIHRoZSBjYWNoZSBldmVyeXRoaW5nLlxuICAvLyBVc2VkIHdoZW4gbm9kZXMgb3IgZWRnZXMgaGF2ZSBiZWVuIGFkZGVkIG9yIHJlbW92ZWQuXG4gIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFDaGFuZ2VkXCIsICgpID0+IHtcbiAgICB0aGlzLmVkZ2VzSGFuZGxlci5fdXBkYXRlU3RhdGUoKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFVcGRhdGVkXCIpO1xuICB9KTtcblxuICAvLyB0aGlzIGlzIGNhbGxlZCB3aGVuIG9wdGlvbnMgb2YgRVhJU1RJTkcgbm9kZXMgb3IgZWRnZXMgaGF2ZSBjaGFuZ2VkLlxuICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9kYXRhVXBkYXRlZFwiLCAoKSA9PiB7XG4gICAgLy8gT3JkZXIgaW1wb3J0YW50IGluIGZvbGxvd2luZyBibG9ja1xuICAgIHRoaXMuY2x1c3RlcmluZy5fdXBkYXRlU3RhdGUoKTtcbiAgICB0aGlzLl91cGRhdGVWaXNpYmxlSW5kaWNlcygpO1xuXG4gICAgdGhpcy5fdXBkYXRlVmFsdWVSYW5nZSh0aGlzLmJvZHkubm9kZXMpO1xuICAgIHRoaXMuX3VwZGF0ZVZhbHVlUmFuZ2UodGhpcy5ib2R5LmVkZ2VzKTtcbiAgICAvLyBzdGFydCBzaW11bGF0aW9uIChjYW4gYmUgY2FsbGVkIHNhZmVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcpXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U2ltdWxhdGlvblwiKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBTZXQgbm9kZXMgYW5kIGVkZ2VzLCBhbmQgb3B0aW9uYWxseSBvcHRpb25zIGFzIHdlbGwuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRhdGEgICAgICAgICAgICAgIE9iamVjdCBjb250YWluaW5nIHBhcmFtZXRlcnM6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0FycmF5IHwgRGF0YVNldCB8IERhdGFWaWV3fSBbbm9kZXNdIEFycmF5IHdpdGggbm9kZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QXJyYXkgfCBEYXRhU2V0IHwgRGF0YVZpZXd9IFtlZGdlc10gQXJyYXkgd2l0aCBlZGdlc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmd9IFtkb3RdIFN0cmluZyBjb250YWluaW5nIGRhdGEgaW4gRE9UIGZvcm1hdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmd9IFtnZXBoaV0gU3RyaW5nIGNvbnRhaW5pbmcgZGF0YSBpbiBnZXBoaSBKU09OIGZvcm1hdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtPcHRpb25zfSBbb3B0aW9uc10gT2JqZWN0IHdpdGggb3B0aW9uc1xuICovXG5OZXR3b3JrLnByb3RvdHlwZS5zZXREYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgLy8gcmVzZXQgdGhlIHBoeXNpY3MgZW5naW5lLlxuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVzZXRQaHlzaWNzXCIpO1xuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3Jlc2V0RGF0YVwiKTtcblxuICAvLyB1bnNlbGVjdCBhbGwgdG8gZW5zdXJlIG5vIHNlbGVjdGlvbnMgZnJvbSBvbGQgZGF0YSBhcmUgY2FycmllZCBvdmVyLlxuICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwoKTtcblxuICBpZiAoZGF0YSAmJiBkYXRhLmRvdCAmJiAoZGF0YS5ub2RlcyB8fCBkYXRhLmVkZ2VzKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICdEYXRhIG11c3QgY29udGFpbiBlaXRoZXIgcGFyYW1ldGVyIFwiZG90XCIgb3IgJyArXG4gICAgICAgICcgcGFyYW1ldGVyIHBhaXIgXCJub2Rlc1wiIGFuZCBcImVkZ2VzXCIsIGJ1dCBub3QgYm90aC4nXG4gICAgKTtcbiAgfVxuXG4gIC8vIHNldCBvcHRpb25zXG4gIHRoaXMuc2V0T3B0aW9ucyhkYXRhICYmIGRhdGEub3B0aW9ucyk7XG4gIC8vIHNldCBhbGwgZGF0YVxuICBpZiAoZGF0YSAmJiBkYXRhLmRvdCkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIFwiVGhlIGRvdCBwcm9wZXJ0eSBoYXMgYmVlbiBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRoZSBzdGF0aWMgY29udmVydERvdCBtZXRob2QgdG8gY29udmVydCBET1QgaW50byB2aXMubmV0d29yayBmb3JtYXQgYW5kIHVzZSB0aGUgbm9ybWFsIGRhdGEgZm9ybWF0IHdpdGggbm9kZXMgYW5kIGVkZ2VzLiBUaGlzIGNvbnZlcnRlciBpcyB1c2VkIGxpa2UgdGhpczogdmFyIGRhdGEgPSB2aXMubmV0d29yay5jb252ZXJ0RG90KGRvdFN0cmluZyk7XCJcbiAgICApO1xuICAgIC8vIHBhcnNlIERPVCBmaWxlXG4gICAgY29uc3QgZG90RGF0YSA9IERPVFRvR3JhcGgoZGF0YS5kb3QpO1xuICAgIHRoaXMuc2V0RGF0YShkb3REYXRhKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLmdlcGhpKSB7XG4gICAgLy8gcGFyc2UgRE9UIGZpbGVcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIlRoZSBnZXBoaSBwcm9wZXJ0eSBoYXMgYmVlbiBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRoZSBzdGF0aWMgY29udmVydEdlcGhpIG1ldGhvZCB0byBjb252ZXJ0IGdlcGhpIGludG8gdmlzLm5ldHdvcmsgZm9ybWF0IGFuZCB1c2UgdGhlIG5vcm1hbCBkYXRhIGZvcm1hdCB3aXRoIG5vZGVzIGFuZCBlZGdlcy4gVGhpcyBjb252ZXJ0ZXIgaXMgdXNlZCBsaWtlIHRoaXM6IHZhciBkYXRhID0gdmlzLm5ldHdvcmsuY29udmVydEdlcGhpKGdlcGhpSnNvbik7XCJcbiAgICApO1xuICAgIGNvbnN0IGdlcGhpRGF0YSA9IHBhcnNlR2VwaGkoZGF0YS5nZXBoaSk7XG4gICAgdGhpcy5zZXREYXRhKGdlcGhpRGF0YSk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubm9kZXNIYW5kbGVyLnNldERhdGEoZGF0YSAmJiBkYXRhLm5vZGVzLCB0cnVlKTtcbiAgICB0aGlzLmVkZ2VzSGFuZGxlci5zZXREYXRhKGRhdGEgJiYgZGF0YS5lZGdlcywgdHJ1ZSk7XG4gIH1cblxuICAvLyBlbWl0IGNoYW5nZSBpbiBkYXRhXG4gIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG5cbiAgLy8gZW1pdCBkYXRhIGxvYWRlZFxuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFMb2FkZWRcIik7XG5cbiAgLy8gZmluZCBhIHN0YWJsZSBwb3NpdGlvbiBvciBzdGFydCBhbmltYXRpbmcgdG8gYSBzdGFibGUgcG9zaXRpb25cbiAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImluaXRQaHlzaWNzXCIpO1xufTtcblxuLyoqXG4gKiBDbGVhbnMgdXAgYWxsIGJpbmRpbmdzIG9mIHRoZSBuZXR3b3JrLCByZW1vdmluZyBpdCBmdWxseSBmcm9tIHRoZSBtZW1vcnkgSUYgdGhlIHZhcmlhYmxlIGlzIHNldCB0byBudWxsIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbiAqIHZhciBuZXR3b3JrID0gbmV3IHZpcy5OZXR3b3JrKC4uKTtcbiAqIG5ldHdvcmsuZGVzdHJveSgpO1xuICogbmV0d29yayA9IG51bGw7XG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJkZXN0cm95XCIpO1xuICAvLyBjbGVhciBldmVudHNcbiAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKCk7XG4gIHRoaXMub2ZmKCk7XG5cbiAgLy8gZGVsZXRlIG1vZHVsZXNcbiAgZGVsZXRlIHRoaXMuZ3JvdXBzO1xuICBkZWxldGUgdGhpcy5jYW52YXM7XG4gIGRlbGV0ZSB0aGlzLnNlbGVjdGlvbkhhbmRsZXI7XG4gIGRlbGV0ZSB0aGlzLmludGVyYWN0aW9uSGFuZGxlcjtcbiAgZGVsZXRlIHRoaXMudmlldztcbiAgZGVsZXRlIHRoaXMucmVuZGVyZXI7XG4gIGRlbGV0ZSB0aGlzLnBoeXNpY3M7XG4gIGRlbGV0ZSB0aGlzLmxheW91dEVuZ2luZTtcbiAgZGVsZXRlIHRoaXMuY2x1c3RlcmluZztcbiAgZGVsZXRlIHRoaXMubWFuaXB1bGF0aW9uO1xuICBkZWxldGUgdGhpcy5ub2Rlc0hhbmRsZXI7XG4gIGRlbGV0ZSB0aGlzLmVkZ2VzSGFuZGxlcjtcbiAgZGVsZXRlIHRoaXMuY29uZmlndXJhdG9yO1xuICBkZWxldGUgdGhpcy5pbWFnZXM7XG5cbiAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKVxuICAgICAgY29udGludWU7XG4gICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICB9XG5cbiAgZm9yIChjb25zdCBlZGdlSWQgaW4gdGhpcy5ib2R5LmVkZ2VzKSB7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlSWQpKVxuICAgICAgY29udGludWU7XG4gICAgZGVsZXRlIHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICB9XG5cbiAgLy8gcmVtb3ZlIHRoZSBjb250YWluZXIgYW5kIGV2ZXJ5dGhpbmcgaW5zaWRlIGl0IHJlY3Vyc2l2ZWx5XG4gIHJlY3Vyc2l2ZURPTURlbGV0ZSh0aGlzLmJvZHkuY29udGFpbmVyKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSB2YWx1ZXMgb2YgYWxsIG9iamVjdCBpbiB0aGUgZ2l2ZW4gYXJyYXkgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50XG4gKiB2YWx1ZSByYW5nZSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iaiAgICBBbiBvYmplY3QgY29udGFpbmluZyBhIHNldCBvZiBFZGdlcyBvciBOb2Rlc1xuICogICAgICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0cyBtdXN0IGhhdmUgYSBtZXRob2QgZ2V0VmFsdWUoKSBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWVSYW5nZShtaW4sIG1heCkuXG4gKiBAcHJpdmF0ZVxuICovXG5OZXR3b3JrLnByb3RvdHlwZS5fdXBkYXRlVmFsdWVSYW5nZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgbGV0IGlkO1xuXG4gIC8vIGRldGVybWluZSB0aGUgcmFuZ2Ugb2YgdGhlIG9iamVjdHNcbiAgbGV0IHZhbHVlTWluID0gdW5kZWZpbmVkO1xuICBsZXQgdmFsdWVNYXggPSB1bmRlZmluZWQ7XG4gIGxldCB2YWx1ZVRvdGFsID0gMDtcbiAgZm9yIChpZCBpbiBvYmopIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaWQpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtpZF0uZ2V0VmFsdWUoKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlTWluID0gdmFsdWVNaW4gPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogTWF0aC5taW4odmFsdWUsIHZhbHVlTWluKTtcbiAgICAgICAgdmFsdWVNYXggPSB2YWx1ZU1heCA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBNYXRoLm1heCh2YWx1ZSwgdmFsdWVNYXgpO1xuICAgICAgICB2YWx1ZVRvdGFsICs9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGFkanVzdCB0aGUgcmFuZ2Ugb2YgYWxsIG9iamVjdHNcbiAgaWYgKHZhbHVlTWluICE9PSB1bmRlZmluZWQgJiYgdmFsdWVNYXggIT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoaWQgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaWQpKSB7XG4gICAgICAgIG9ialtpZF0uc2V0VmFsdWVSYW5nZSh2YWx1ZU1pbiwgdmFsdWVNYXgsIHZhbHVlVG90YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgTmV0d29yayBpcyBhY3RpdmUuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIXRoaXMuYWN0aXZhdG9yIHx8IHRoaXMuYWN0aXZhdG9yLmFjdGl2ZTtcbn07XG5cbk5ldHdvcmsucHJvdG90eXBlLnNldFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNhbnZhcy5zZXRTaXplLmFwcGx5KHRoaXMuY2FudmFzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmNhbnZhc1RvRE9NID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jYW52YXMuY2FudmFzVG9ET00uYXBwbHkodGhpcy5jYW52YXMsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuRE9NdG9DYW52YXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNhbnZhcy5ET010b0NhbnZhcy5hcHBseSh0aGlzLmNhbnZhcywgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogTm9kZXMgY2FuIGJlIGluIGNsdXN0ZXJzLiBDbHVzdGVycyBjYW4gYWxzbyBiZSBpbiBjbHVzdGVycy4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuZCBhcnJheSBvZlxuICogbm9kZUlkcyBzaG93aW5nIHdoZXJlIHRoZSBub2RlIGlzLlxuICpcbiAqIElmIGFueSBub2RlSWQgaW4gdGhlIGNoYWluLCBlc3BlY2lhbGx5IHRoZSBmaXJzdCBwYXNzZWQgaW4gYXMgYSBwYXJhbWV0ZXIsIGlzIG5vdCBwcmVzZW50IGluXG4gKiB0aGUgY3VycmVudCBub2RlcyBsaXN0LCBhbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZC5cbiAqXG4gKiBFeGFtcGxlOlxuICogY2x1c3RlciAnQScgY29udGFpbnMgY2x1c3RlciAnQicsXG4gKiBjbHVzdGVyICdCJyBjb250YWlucyBjbHVzdGVyICdDJyxcbiAqIGNsdXN0ZXIgJ0MnIGNvbnRhaW5zIG5vZGUgJ2ZyZWQnLlxuICogYGpzbmV0d29yay5jbHVzdGVyaW5nLmZpbmROb2RlKCdmcmVkJylgIHdpbGwgcmV0dXJuIGBbJ0EnLCdCJywnQycsJ2ZyZWQnXWAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBub2RlSWRcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuTmV0d29yay5wcm90b3R5cGUuZmluZE5vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuZmluZE5vZGUuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcblxuTmV0d29yay5wcm90b3R5cGUuaXNDbHVzdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmlzQ2x1c3Rlci5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUub3BlbkNsdXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcub3BlbkNsdXN0ZXIuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmNsdXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuY2x1c3Rlci5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0Tm9kZXNJbkNsdXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuZ2V0Tm9kZXNJbkNsdXN0ZXIuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmNsdXN0ZXJCeUNvbm5lY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuY2x1c3RlckJ5Q29ubmVjdGlvbi5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuY2x1c3RlckJ5SHVic2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy5jbHVzdGVyQnlIdWJzaXplLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS51cGRhdGVDbHVzdGVyZWROb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLnVwZGF0ZUNsdXN0ZXJlZE5vZGUuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldENsdXN0ZXJlZEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmdldENsdXN0ZXJlZEVkZ2VzLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRCYXNlRWRnZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy5nZXRCYXNlRWRnZS5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0QmFzZUVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmdldEJhc2VFZGdlcy5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUudXBkYXRlRWRnZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy51cGRhdGVFZGdlLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2Qgd2lsbCBjbHVzdGVyIGFsbCBub2RlcyB3aXRoIDEgZWRnZSB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgY29ubmVjdGVkIG5vZGUuXG4gKiBUaGUgb3B0aW9ucyBvYmplY3QgaXMgZXhwbGFpbmVkIGluIGZ1bGwgPGEgZGF0YS1zY3JvbGw9XCJcIiBkYXRhLW9wdGlvbnM9XCJ7ICZxdW90O2Vhc2luZyZxdW90OzogJnF1b3Q7ZWFzZUluQ3ViaWMmcXVvdDsgfVwiIGhyZWY9XCIjb3B0aW9uc09iamVjdFwiPmJlbG93PC9hPi5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5OZXR3b3JrLnByb3RvdHlwZS5jbHVzdGVyT3V0bGllcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuY2x1c3Rlck91dGxpZXJzLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5cbk5ldHdvcmsucHJvdG90eXBlLmdldFNlZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxheW91dEVuZ2luZS5nZXRTZWVkLmFwcGx5KHRoaXMubGF5b3V0RW5naW5lLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmVuYWJsZUVkaXRNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZW5hYmxlRWRpdE1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZGlzYWJsZUVkaXRNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZGlzYWJsZUVkaXRNb2RlLmFwcGx5KHRoaXMubWFuaXB1bGF0aW9uLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmFkZE5vZGVNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uYWRkTm9kZU1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZWRpdE5vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5lZGl0Tm9kZS5hcHBseSh0aGlzLm1hbmlwdWxhdGlvbiwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5lZGl0Tm9kZU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnNvbGUud2FybihcIkRlcHJlY2F0ZWQ6IFBsZWFzZSB1c2UgZWRpdE5vZGUgaW5zdGVhZCBvZiBlZGl0Tm9kZU1vZGUuXCIpO1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZWRpdE5vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuYWRkRWRnZU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5hZGRFZGdlTW9kZS5hcHBseSh0aGlzLm1hbmlwdWxhdGlvbiwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5lZGl0RWRnZU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5lZGl0RWRnZU1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZGVsZXRlU2VsZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5kZWxldGVTZWxlY3RlZC5hcHBseSh0aGlzLm1hbmlwdWxhdGlvbiwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRQb3NpdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5nZXRQb3NpdGlvbnMuYXBwbHkodGhpcy5ub2Rlc0hhbmRsZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5nZXRQb3NpdGlvbi5hcHBseSh0aGlzLm5vZGVzSGFuZGxlciwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5zdG9yZVBvc2l0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubm9kZXNIYW5kbGVyLnN0b3JlUG9zaXRpb25zLmFwcGx5KHRoaXMubm9kZXNIYW5kbGVyLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLm1vdmVOb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlc0hhbmRsZXIubW92ZU5vZGUuYXBwbHkodGhpcy5ub2Rlc0hhbmRsZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3ggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5nZXRCb3VuZGluZ0JveC5hcHBseSh0aGlzLm5vZGVzSGFuZGxlciwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRDb25uZWN0ZWROb2RlcyA9IGZ1bmN0aW9uIChvYmplY3RJZCkge1xuICBpZiAodGhpcy5ib2R5Lm5vZGVzW29iamVjdElkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXNIYW5kbGVyLmdldENvbm5lY3RlZE5vZGVzLmFwcGx5KFxuICAgICAgdGhpcy5ub2Rlc0hhbmRsZXIsXG4gICAgICBhcmd1bWVudHNcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLmVkZ2VzSGFuZGxlci5nZXRDb25uZWN0ZWROb2Rlcy5hcHBseShcbiAgICAgIHRoaXMuZWRnZXNIYW5kbGVyLFxuICAgICAgYXJndW1lbnRzXG4gICAgKTtcbiAgfVxufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldENvbm5lY3RlZEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlc0hhbmRsZXIuZ2V0Q29ubmVjdGVkRWRnZXMuYXBwbHkoXG4gICAgdGhpcy5ub2Rlc0hhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuc3RhcnRTaW11bGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5waHlzaWNzLnN0YXJ0U2ltdWxhdGlvbi5hcHBseSh0aGlzLnBoeXNpY3MsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuc3RvcFNpbXVsYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBoeXNpY3Muc3RvcFNpbXVsYXRpb24uYXBwbHkodGhpcy5waHlzaWNzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnN0YWJpbGl6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGh5c2ljcy5zdGFiaWxpemUuYXBwbHkodGhpcy5waHlzaWNzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3Rpb24uYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnNldFNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5zZXRTZWxlY3Rpb24uYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFNlbGVjdGVkTm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWROb2RlSWRzLmFwcGx5KFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICBhcmd1bWVudHNcbiAgKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRTZWxlY3RlZEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkRWRnZUlkcy5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0Tm9kZUF0ID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldE5vZGVBdC5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG4gIGlmIChub2RlICE9PSB1bmRlZmluZWQgJiYgbm9kZS5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5vZGUuaWQ7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0RWRnZUF0ID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBlZGdlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldEVkZ2VBdC5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG4gIGlmIChlZGdlICE9PSB1bmRlZmluZWQgJiYgZWRnZS5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGVkZ2UuaWQ7XG4gIH1cbiAgcmV0dXJuIGVkZ2U7XG59O1xuTmV0d29yay5wcm90b3R5cGUuc2VsZWN0Tm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0Tm9kZXMuYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnNlbGVjdEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnNlbGVjdEVkZ2VzLmFwcGx5KFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICBhcmd1bWVudHNcbiAgKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS51bnNlbGVjdEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsLmFwcGx5KHRoaXMuc2VsZWN0aW9uSGFuZGxlciwgYXJndW1lbnRzKTtcbiAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmNvbW1pdFdpdGhvdXRFbWl0dGluZy5hcHBseSh0aGlzLnNlbGVjdGlvbkhhbmRsZXIpO1xuICB0aGlzLnJlZHJhdygpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnJlZHJhdyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVuZGVyZXIucmVkcmF3LmFwcGx5KHRoaXMucmVuZGVyZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0U2NhbGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnZpZXcuZ2V0U2NhbGUuYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFZpZXdQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5nZXRWaWV3UG9zaXRpb24uYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmZpdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5maXQuYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5tb3ZlVG8uYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy52aWV3LmZvY3VzLmFwcGx5KHRoaXMudmlldywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5yZWxlYXNlTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5yZWxlYXNlTm9kZS5hcHBseSh0aGlzLnZpZXcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0T3B0aW9uc0Zyb21Db25maWd1cmF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIGxldCBvcHRpb25zID0ge307XG4gIGlmICh0aGlzLmNvbmZpZ3VyYXRvcikge1xuICAgIG9wdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRvci5nZXRPcHRpb25zLmFwcGx5KHRoaXMuY29uZmlndXJhdG9yKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE5ldHdvcms7XG4iLCAiLyoqXG4gKiBOb3JtYWxpemVzIGxhbmd1YWdlIGNvZGUgaW50byB0aGUgZm9ybWF0IHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAcGFyYW0gbG9jYWxlcyAtIEFsbCB0aGUgYXZhaWxhYmxlIGxvY2FsZXMuXG4gKiBAcGFyYW0gcmF3Q29kZSAtIFRoZSBvcmlnaW5hbCBjb2RlIGFzIHN1cHBsaWVkIGJ5IHRoZSB1c2VyLlxuICogQHJldHVybnMgTGFuZ3VhZ2UgY29kZSBpbiB0aGUgZm9ybWF0IGxhbmd1YWdlLUNPVU5UUlkgb3IgbGFuZ3VhZ2UsIGV2ZW50dWFsbHlcbiAqIGZhbGxiYWNrcyB0byBlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUxhbmd1YWdlQ29kZShcbiAgbG9jYWxlczogUmVjb3JkPHN0cmluZywgdW5kZWZpbmVkIHwgb2JqZWN0PixcbiAgcmF3Q29kZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IFtyYXdMYW5ndWFnZSwgcmF3Q291bnRyeV0gPSByYXdDb2RlLnNwbGl0KC9bLV8gL10vLCAyKTtcbiAgICBjb25zdCBsYW5ndWFnZSA9IHJhd0xhbmd1YWdlICE9IG51bGwgPyByYXdMYW5ndWFnZS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbiAgICBjb25zdCBjb3VudHJ5ID0gcmF3Q291bnRyeSAhPSBudWxsID8gcmF3Q291bnRyeS50b1VwcGVyQ2FzZSgpIDogbnVsbDtcblxuICAgIGlmIChsYW5ndWFnZSAmJiBjb3VudHJ5KSB7XG4gICAgICBjb25zdCBjb2RlID0gbGFuZ3VhZ2UgKyBcIi1cIiArIGNvdW50cnk7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxvY2FsZXMsIGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIHZhcmlhbnQgJHtjb3VudHJ5fSBvZiBsYW5ndWFnZSAke2xhbmd1YWdlfS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobGFuZ3VhZ2UpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBsYW5ndWFnZTtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobG9jYWxlcywgY29kZSkpIHtcbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gbGFuZ3VhZ2UgJHtsYW5ndWFnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oYFVua25vd24gbG9jYWxlICR7cmF3Q29kZX0sIGZhbGxpbmcgYmFjayB0byBFbmdsaXNoLmApO1xuXG4gICAgcmV0dXJuIFwiZW5cIjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgVW5leHBlY3RlZCBlcnJvciB3aGlsZSBub3JtYWxpemluZyBsb2NhbGUgJHtyYXdDb2RlfSwgZmFsbGluZyBiYWNrIHRvIEVuZ2xpc2guYFxuICAgICk7XG5cbiAgICByZXR1cm4gXCJlblwiO1xuICB9XG59XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vbmV0d29yay9OZXR3b3JrXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgTmV0d29ya0ltYWdlcyB9IGZyb20gXCIuL25ldHdvcmsvSW1hZ2VzXCI7XG5cbmltcG9ydCAqIGFzIGRvdHBhcnNlciBmcm9tIFwiLi9uZXR3b3JrL2RvdHBhcnNlclwiO1xuZXhwb3J0IHsgZG90cGFyc2VyIGFzIG5ldHdvcmtET1RQYXJzZXIgfTtcbmV4cG9ydCBjb25zdCBwYXJzZURPVE5ldHdvcmsgPSBkb3RwYXJzZXIuRE9UVG9HcmFwaDtcblxuaW1wb3J0ICogYXMgZ2VwaGlQYXJzZXIgZnJvbSBcIi4vbmV0d29yay9nZXBoaVBhcnNlclwiO1xuZXhwb3J0IHsgcGFyc2VHZXBoaSBhcyBwYXJzZUdlcGhpTmV0d29yayB9IGZyb20gXCIuL25ldHdvcmsvZ2VwaGlQYXJzZXJcIjtcbmV4cG9ydCB7IGdlcGhpUGFyc2VyIGFzIG5ldHdvcmtHZXBoaVBhcnNlciB9O1xuXG5pbXBvcnQgKiBhcyBhbGxPcHRpb25zIGZyb20gXCIuL25ldHdvcmsvb3B0aW9uc1wiO1xuZXhwb3J0IHsgYWxsT3B0aW9ucyBhcyBuZXR3b3JrT3B0aW9ucyB9O1xuXG4vLyBEYXRhU2V0LCB1dGlscyBldGMuIGNhbid0IGJlIHJlZXhwb3J0ZWQgaGVyZSBiZWNhdXNlIHRoYXQgd291bGQgY2F1c2Ugc3RhY2tcbi8vIG92ZXJmbG93IGluIFVNRCBidWlsZHMuIFRoZXkgYWxsIGV4cG9ydCB2aXMgbmFtZXNwYWNlIHRoZXJlZm9yZSByZWV4cG9ydGluZ1xuLy8gbGVhZHMgdG8gbG9hZGluZyB2aXMgdG8gbG9hZCB2aXMgdG8gbG9hZCB2aXPigKZcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufSIsICIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgdGhpcyB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYXBwbHkgPSBGdW5jdGlvblByb3RvdHlwZS5hcHBseTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXJlZmxlY3QgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgUmVmbGVjdCA9PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmFwcGx5IHx8IChOQVRJVkVfQklORCA/IGNhbGwuYmluZChhcHBseSkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbikge1xuICAvLyBOYXNob3JuIGJ1ZzpcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEyOFxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTMwXG4gIGlmIChjbGFzc29mUmF3KGZuKSA9PT0gJ0Z1bmN0aW9uJykgcmV0dXJuIHVuY3VycnlUaGlzKGZuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIElTX0hUTUxEREEgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZDtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFsbDogZG9jdW1lbnRBbGwsXG4gIElTX0hUTUxEREE6IElTX0hUTUxEREFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRkb2N1bWVudEFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1hbGwnKTtcblxudmFyIGRvY3VtZW50QWxsID0gJGRvY3VtZW50QWxsLmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG5tb2R1bGUuZXhwb3J0cyA9ICRkb2N1bWVudEFsbC5JU19IVE1MRERBID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWwuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyICRkb2N1bWVudEFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1hbGwnKTtcblxudmFyIGRvY3VtZW50QWxsID0gJGRvY3VtZW50QWxsLmFsbDtcblxubW9kdWxlLmV4cG9ydHMgPSAkZG9jdW1lbnRBbGwuSVNfSFRNTEREQSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KSB8fCBpdCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHZhcmlhYmxlKSA/IHZhcmlhYmxlIDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKHBhdGhbbmFtZXNwYWNlXSkgfHwgYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKVxuICAgIDogcGF0aFtuYW1lc3BhY2VdICYmIHBhdGhbbmFtZXNwYWNlXVttZXRob2RdIHx8IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBuYXZpZ2F0b3IgIT0gJ3VuZGVmaW5lZCcgJiYgU3RyaW5nKG5hdmlnYXRvci51c2VyQWdlbnQpIHx8ICcnO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjMzLjInLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyMyBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjMzLjIvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyYXBwZXIpIHtcbiAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYik7XG4gICAgICB9IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYiwgYyk7XG4gICAgfSByZXR1cm4gYXBwbHkoTmF0aXZlQ29uc3RydWN0b3IsIHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBQUk9UTyA9IG9wdGlvbnMucHJvdG87XG5cbiAgdmFyIG5hdGl2ZVNvdXJjZSA9IEdMT0JBTCA/IGdsb2JhbCA6IFNUQVRJQyA/IGdsb2JhbFtUQVJHRVRdIDogKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG5cbiAgdmFyIHRhcmdldCA9IEdMT0JBTCA/IHBhdGggOiBwYXRoW1RBUkdFVF0gfHwgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFRBUkdFVCwge30pW1RBUkdFVF07XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXNPd24obmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT0gdHlwZW9mIHNvdXJjZVByb3BlcnR5KSBjb250aW51ZTtcblxuICAgIC8vIGJpbmQgbWV0aG9kcyB0byBnbG9iYWwgZm9yIGNhbGxpbmcgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWwpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2VzIGluIHRoaXMgdmVyc2lvblxuICAgIGVsc2UgaWYgKG9wdGlvbnMud3JhcCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IHdyYXBDb25zdHJ1Y3Rvcihzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgZWxzZSBpZiAoUFJPVE8gJiYgaXNDYWxsYWJsZShzb3VyY2VQcm9wZXJ0eSkpIHJlc3VsdFByb3BlcnR5ID0gdW5jdXJyeVRoaXMoc291cmNlUHJvcGVydHkpO1xuICAgIC8vIGRlZmF1bHQgY2FzZVxuICAgIGVsc2UgcmVzdWx0UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eTtcblxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8IChzb3VyY2VQcm9wZXJ0eSAmJiBzb3VyY2VQcm9wZXJ0eS5zaGFtKSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShyZXN1bHRQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHJlc3VsdFByb3BlcnR5KTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzT3duKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aFtWSVJUVUFMX1BST1RPVFlQRV0sIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgLy8gZXhwb3J0IHJlYWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIGlmIChvcHRpb25zLnJlYWwgJiYgdGFyZ2V0UHJvdG90eXBlICYmIChGT1JDRUQgfHwgIXRhcmdldFByb3RvdHlwZVtrZXldKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0UHJvdG90eXBlLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eS5zaGFtKSBkZWZpbmVQcm9wZXJ0eS5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIHByb3BlcnR5S2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9ICRPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PT0gJ09iamVjdCcgJiYgaXNDYWxsYWJsZShPLmNhbGxlZSkgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBlbXB0eSA9IFtdO1xudmFyIGNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgY29uc3RydWN0b3JSZWdFeHAgPSAvXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKTtcbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gIWNvbnN0cnVjdG9yUmVnRXhwLnRlc3Qobm9vcCk7XG5cbnZhciBpc0NvbnN0cnVjdG9yTW9kZXJuID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3RydWN0KG5vb3AsIGVtcHR5LCBhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgaXNDb25zdHJ1Y3RvckxlZ2FjeSA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKGNsYXNzb2YoYXJndW1lbnQpKSB7XG4gICAgY2FzZSAnQXN5bmNGdW5jdGlvbic6XG4gICAgY2FzZSAnR2VuZXJhdG9yRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nOiByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyB3ZSBjYW4ndCBjaGVjayAucHJvdG90eXBlIHNpbmNlIGNvbnN0cnVjdG9ycyBwcm9kdWNlZCBieSAuYmluZCBoYXZlbid0IGl0XG4gICAgLy8gYEZ1bmN0aW9uI3RvU3RyaW5nYCB0aHJvd3Mgb24gc29tZSBidWlsdC1pdCBmdW5jdGlvbiBpbiBzb21lIGxlZ2FjeSBlbmdpbmVzXG4gICAgLy8gKGZvciBleGFtcGxlLCBgRE9NUXVhZGAgYW5kIHNpbWlsYXIgaW4gRkY0MS0pXG4gICAgcmV0dXJuIElOQ09SUkVDVF9UT19TVFJJTkcgfHwgISFleGVjKGNvbnN0cnVjdG9yUmVnRXhwLCBpbnNwZWN0U291cmNlKGFyZ3VtZW50KSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbmlzQ29uc3RydWN0b3JMZWdhY3kuc2hhbSA9IHRydWU7XG5cbi8vIGBJc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSAhY29uc3RydWN0IHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNhbGxlZDtcbiAgcmV0dXJuIGlzQ29uc3RydWN0b3JNb2Rlcm4oaXNDb25zdHJ1Y3Rvck1vZGVybi5jYWxsKVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKE9iamVjdClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihmdW5jdGlvbiAoKSB7IGNhbGxlZCA9IHRydWU7IH0pXG4gICAgfHwgY2FsbGVkO1xufSkgPyBpc0NvbnN0cnVjdG9yTGVnYWN5IDogaXNDb25zdHJ1Y3Rvck1vZGVybjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYSBwYXJ0IG9mIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXkpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAoaXNDb25zdHJ1Y3RvcihDKSAmJiAoQyA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IEM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuXG4vLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbi8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCA9IFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycmF5ID0gW107XG4gIGFycmF5W0lTX0NPTkNBVF9TUFJFQURBQkxFXSA9IGZhbHNlO1xuICByZXR1cm4gYXJyYXkuY29uY2F0KClbMF0gIT09IGFycmF5O1xufSk7XG5cbnZhciBpc0NvbmNhdFNwcmVhZGFibGUgPSBmdW5jdGlvbiAoTykge1xuICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzcHJlYWRhYmxlID0gT1tJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gIHJldHVybiBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KE8pO1xufTtcblxudmFyIEZPUkNFRCA9ICFJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUIHx8ICFhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdjb25jYXQnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb25jYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBjb25jYXQ6IGZ1bmN0aW9uIGNvbmNhdChhcmcpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgaSwgaywgbGVuZ3RoLCBsZW4sIEU7XG4gICAgZm9yIChpID0gLTEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgRSA9IGkgPT09IC0xID8gTyA6IGFyZ3VtZW50c1tpXTtcbiAgICAgIGlmIChpc0NvbmNhdFNwcmVhZGFibGUoRSkpIHtcbiAgICAgICAgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoRSk7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgbGVuKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKG4gKyAxKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgdmFyIHJlc3VsdCA9ICRBcnJheShtYXgoZmluIC0gaywgMCkpO1xuICB2YXIgbiA9IDA7XG4gIGZvciAoOyBrIDwgZmluOyBrKyssIG4rKykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmUgKi9cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlJyk7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBhcnJheVNsaWNlKHdpbmRvd05hbWVzKTtcbiAgfVxufTtcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIGNsYXNzb2YoaXQpID09PSAnV2luZG93J1xuICAgID8gZ2V0V2luZG93TmFtZXMoaXQpXG4gICAgOiAkZ2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnVtZXJhYmxlKSB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgdmFsdWUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG5leHBvcnRzLmYgPSB3ZWxsS25vd25TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgdmFyIFN5bWJvbCA9IHBhdGguU3ltYm9sIHx8IChwYXRoLlN5bWJvbCA9IHt9KTtcbiAgaWYgKCFoYXNPd24oU3ltYm9sLCBOQU1FKSkgZGVmaW5lUHJvcGVydHkoU3ltYm9sLCBOQU1FLCB7XG4gICAgdmFsdWU6IHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZihOQU1FKVxuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHZhciBTeW1ib2xQcm90b3R5cGUgPSBTeW1ib2wgJiYgU3ltYm9sLnByb3RvdHlwZTtcbiAgdmFyIHZhbHVlT2YgPSBTeW1ib2xQcm90b3R5cGUgJiYgU3ltYm9sUHJvdG90eXBlLnZhbHVlT2Y7XG4gIHZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbiAgaWYgKFN5bWJvbFByb3RvdHlwZSAmJiAhU3ltYm9sUHJvdG90eXBlW1RPX1BSSU1JVElWRV0pIHtcbiAgICAvLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIC5sZW5ndGhcbiAgICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBmdW5jdGlvbiAoaGludCkge1xuICAgICAgcmV0dXJuIGNhbGwodmFsdWVPZiwgdGhpcyk7XG4gICAgfSwgeyBhcml0eTogMSB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICBpZiAoaXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGU7XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlclJlamVjdCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PT0gNjtcbiAgdmFyIElTX0ZJTFRFUl9SRUpFQ1QgPSBUWVBFID09PSA3O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgfHwgSVNfRklMVEVSX1JFSkVDVCA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBmYWxzZTsgICAgICAgICAgICAgLy8gZXZlcnlcbiAgICAgICAgICBjYXNlIDc6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyUmVqZWN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJSZWplY3RgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maWx0ZXJpbmdcbiAgZmlsdGVyUmVqZWN0OiBjcmVhdGVNZXRob2QoNylcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIG5hdGl2ZU9iamVjdENyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG5cbnZhciBISURERU4gPSBzaGFyZWRLZXkoJ2hpZGRlbicpO1xudmFyIFNZTUJPTCA9ICdTeW1ib2wnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTWU1CT0wpO1xuXG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbCAmJiAkU3ltYm9sW1BST1RPVFlQRV07XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmY7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90b3R5cGVTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgVVNFX1NFVFRFUiA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoTywgUCwgQXR0cmlidXRlcykge1xuICB2YXIgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIFApO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcikgZGVsZXRlIE9iamVjdFByb3RvdHlwZVtQXTtcbiAgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yICYmIE8gIT09IE9iamVjdFByb3RvdHlwZSkge1xuICAgIG5hdGl2ZURlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZSwgUCwgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcik7XG4gIH1cbn07XG5cbnZhciBzZXRTeW1ib2xEZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0Q3JlYXRlKG5hdGl2ZURlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9PSA3O1xufSkgPyBmYWxsYmFja0RlZmluZVByb3BlcnR5IDogbmF0aXZlRGVmaW5lUHJvcGVydHk7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZywgZGVzY3JpcHRpb24pIHtcbiAgdmFyIHN5bWJvbCA9IEFsbFN5bWJvbHNbdGFnXSA9IG5hdGl2ZU9iamVjdENyZWF0ZShTeW1ib2xQcm90b3R5cGUpO1xuICBzZXRJbnRlcm5hbFN0YXRlKHN5bWJvbCwge1xuICAgIHR5cGU6IFNZTUJPTCxcbiAgICB0YWc6IHRhZyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHN5bWJvbC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICByZXR1cm4gc3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgaWYgKE8gPT09IE9iamVjdFByb3RvdHlwZSkgJGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFAsIEF0dHJpYnV0ZXMpO1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUF0dHJpYnV0ZXMuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXNPd24oTywgSElEREVOKSkgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgSElEREVOLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwge30pKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbCgkcHJvcGVydHlJc0VudW1lcmFibGUsIHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJvcGVydHlLZXkoVik7XG4gIHZhciBlbnVtZXJhYmxlID0gY2FsbChuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSwgdGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHB1c2gocmVzdWx0LCBrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcHVzaChyZXN1bHQsIEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgJHRoaXMgPSB0aGlzID09PSB1bmRlZmluZWQgPyBnbG9iYWwgOiB0aGlzO1xuICAgICAgaWYgKCR0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIGNhbGwoc2V0dGVyLCBPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKCR0aGlzLCBISURERU4pICYmIGhhc093bigkdGhpc1tISURERU5dLCB0YWcpKSAkdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSgkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBVU0VfU0VUVEVSKSBzZXRTeW1ib2xEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiBzZXR0ZXIgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnLCBkZXNjcmlwdGlvbik7XG4gIH07XG5cbiAgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbFtQUk9UT1RZUEVdO1xuXG4gIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS50YWc7XG4gIH0pO1xuXG4gIGRlZmluZUJ1aWx0SW4oJFN5bWJvbCwgJ3dpdGhvdXRTZXR0ZXInLCBmdW5jdGlvbiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gd3JhcCh1aWQoZGVzY3JpcHRpb24pLCBkZXNjcmlwdGlvbik7XG4gIH0pO1xuXG4gIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0aWVzO1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdlbGxLbm93blN5bWJvbChuYW1lKSwgbmFtZSk7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtU3ltYm9sLWRlc2NyaXB0aW9uXG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFN5bWJvbFByb3RvdHlwZSwgJ2Rlc2NyaXB0aW9uJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuZGVzY3JpcHRpb247XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFJU19QVVJFKSB7XG4gICAgICBkZWZpbmVCdWlsdEluKE9iamVjdFByb3RvdHlwZSwgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgU3ltYm9sOiAkU3ltYm9sXG59KTtcblxuJGZvckVhY2gob2JqZWN0S2V5cyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBmdW5jdGlvbiAobmFtZSkge1xuICBkZWZpbmVXZWxsS25vd25TeW1ib2wobmFtZSk7XG59KTtcblxuJCh7IHRhcmdldDogU1lNQk9MLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IGZhbHNlOyB9XG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIC8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Jcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXNcbn0pO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgU1lNQk9MKTtcblxuaGlkZGVuS2V5c1tISURERU5dID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSBzYWZlICovXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiYgISFTeW1ib2xbJ2ZvciddICYmICEhU3ltYm9sLmtleUZvcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeScpO1xudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5mb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuZm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKGtleSk7XG4gICAgaWYgKGhhc093bihTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5LCBzdHJpbmcpKSByZXR1cm4gU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddO1xuICAgIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKShzdHJpbmcpO1xuICAgIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXSA9IHN5bWJvbDtcbiAgICBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bWJvbF0gPSBzdHJpbmc7XG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmtleUZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5rZXlmb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBuZXcgVHlwZUVycm9yKHRyeVRvU3RyaW5nKHN5bSkgKyAnIGlzIG5vdCBhIHN5bWJvbCcpO1xuICAgIGlmIChoYXNPd24oU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSwgc3ltKSkgcmV0dXJuIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKFtdLnNsaWNlKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcGxhY2VyKSB7XG4gIGlmIChpc0NhbGxhYmxlKHJlcGxhY2VyKSkgcmV0dXJuIHJlcGxhY2VyO1xuICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXR1cm47XG4gIHZhciByYXdMZW5ndGggPSByZXBsYWNlci5sZW5ndGg7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlbWVudCA9IHJlcGxhY2VyW2ldO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykgcHVzaChrZXlzLCBlbGVtZW50KTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnbnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnTnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnU3RyaW5nJykgcHVzaChrZXlzLCB0b1N0cmluZyhlbGVtZW50KSk7XG4gIH1cbiAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIHJvb3QgPSB0cnVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAocm9vdCkge1xuICAgICAgcm9vdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgcmV0dXJuIHZhbHVlO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5c0xlbmd0aDsgaisrKSBpZiAoa2V5c1tqXSA9PT0ga2V5KSByZXR1cm4gdmFsdWU7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgZ2V0UmVwbGFjZXJGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbicpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbnZhciB0ZXN0ZXIgPSAvW1xcdUQ4MDAtXFx1REZGRl0vZztcbnZhciBsb3cgPSAvXltcXHVEODAwLVxcdURCRkZdJC87XG52YXIgaGkgPSAvXltcXHVEQzAwLVxcdURGRkZdJC87XG5cbnZhciBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKSgnc3RyaW5naWZ5IGRldGVjdGlvbicpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT09ICdbbnVsbF0nXG4gICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT09ICd7fSc7XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtd2VsbC1mb3JtZWQtc3RyaW5naWZ5XG52YXIgSUxMX0ZPUk1FRF9VTklDT0RFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHN0cmluZ2lmeSgnXFx1REYwNlxcdUQ4MzQnKSAhPT0gJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInXG4gICAgfHwgJHN0cmluZ2lmeSgnXFx1REVBRCcpICE9PSAnXCJcXFxcdWRlYWRcIic7XG59KTtcblxudmFyIHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4ID0gZnVuY3Rpb24gKGl0LCByZXBsYWNlcikge1xuICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgdmFyICRyZXBsYWNlciA9IGdldFJlcGxhY2VyRnVuY3Rpb24ocmVwbGFjZXIpO1xuICBpZiAoIWlzQ2FsbGFibGUoJHJlcGxhY2VyKSAmJiAoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgYXJnc1sxXSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgLy8gc29tZSBvbGQgaW1wbGVtZW50YXRpb25zIChsaWtlIFdlYktpdCkgY291bGQgcGFzcyBudW1iZXJzIGFzIGtleXNcbiAgICBpZiAoaXNDYWxsYWJsZSgkcmVwbGFjZXIpKSB2YWx1ZSA9IGNhbGwoJHJlcGxhY2VyLCB0aGlzLCAkU3RyaW5nKGtleSksIHZhbHVlKTtcbiAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9O1xuICByZXR1cm4gYXBwbHkoJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG59O1xuXG52YXIgZml4SWxsRm9ybWVkID0gZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cmluZykge1xuICB2YXIgcHJldiA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCAtIDEpO1xuICB2YXIgbmV4dCA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCArIDEpO1xuICBpZiAoKGV4ZWMobG93LCBtYXRjaCkgJiYgIWV4ZWMoaGksIG5leHQpKSB8fCAoZXhlYyhoaSwgbWF0Y2gpICYmICFleGVjKGxvdywgcHJldikpKSB7XG4gICAgcmV0dXJuICdcXFxcdScgKyBudW1iZXJUb1N0cmluZyhjaGFyQ29kZUF0KG1hdGNoLCAwKSwgMTYpO1xuICB9IHJldHVybiBtYXRjaDtcbn07XG5cbmlmICgkc3RyaW5naWZ5KSB7XG4gIC8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBhcml0eTogMywgZm9yY2VkOiBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gfHwgSUxMX0ZPUk1FRF9VTklDT0RFIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFwcGx5KFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA/IHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IDogJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG4gICAgICByZXR1cm4gSUxMX0ZPUk1FRF9VTklDT0RFICYmIHR5cGVvZiByZXN1bHQgPT0gJ3N0cmluZycgPyByZXBsYWNlKHJlc3VsdCwgdGVzdGVyLCBmaXhJbGxGb3JtZWQpIDogcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG4vLyBWOCB+IENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGT1JDRUQgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRvT2JqZWN0KGl0KSkgOiBbXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0l0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuYXN5bmNpdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5oYXNJbnN0YW5jZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmhhc2luc3RhbmNlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2hhc0luc3RhbmNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pc2NvbmNhdHNwcmVhZGFibGVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLml0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaEFsbGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoYWxsXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoQWxsJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5yZXBsYWNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucmVwbGFjZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zZWFyY2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zZWFyY2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc2VhcmNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zcGVjaWVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BlY2llc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zcGxpdGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwbGl0XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwbGl0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnRvUHJpbWl0aXZlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9wcmltaXRpdmVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIGBTeW1ib2wudG9TdHJpbmdUYWdgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3N0cmluZ3RhZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnZXRCdWlsdEluKCdTeW1ib2wnKSwgJ1N5bWJvbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wudW5zY29wYWJsZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC51bnNjb3BhYmxlc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gSlNPTltAQHRvU3RyaW5nVGFnXSBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXMtY29uY2F0LXNwcmVhZGFibGUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXRoLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC50by1zdHJpbmctdGFnJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWtleXMgLS0gc2FmZSAqL1xuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG52YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRSA9ICFpc09iamVjdChJdGVyYXRvclByb3RvdHlwZSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgdGVzdCA9IHt9O1xuICAvLyBGRjQ0LSBsZWdhY3kgaXRlcmF0b3JzIGNhc2VcbiAgcmV0dXJuIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXS5jYWxsKHRlc3QpICE9PSB0ZXN0O1xufSk7XG5cbmlmIChORVdfSVRFUkFUT1JfUFJPVE9UWVBFKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuZWxzZSBpZiAoSVNfUFVSRSkgSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1AQGl0ZXJhdG9yXG5pZiAoIWlzQ2FsbGFibGUoSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICBkZWZpbmVCdWlsdEluKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQsIEVOVU1FUkFCTEVfTkVYVCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCshRU5VTUVSQUJMRV9ORVhULCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKHR5cGVvZiBhcmd1bWVudCA9PSAnb2JqZWN0JyB8fCBpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LXNldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgc2V0dGVyID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJywgJ3NldCcpO1xuICAgIHNldHRlcih0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgYW5PYmplY3QoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlcihPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuXG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gY2FsbChuYXRpdmVJdGVyYXRvciwgdGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvciwgeyBuYW1lOiBERUZBVUxUIH0pO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYENyZWF0ZUl0ZXJSZXN1bHRPYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVpdGVycmVzdWx0b2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IGRvbmUgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICBzd2l0Y2ggKHN0YXRlLmtpbmQpIHtcbiAgICBjYXNlICdrZXlzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoaW5kZXgsIGZhbHNlKTtcbiAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh0YXJnZXRbaW5kZXhdLCBmYWxzZSk7XG4gIH0gcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZmFsc2UpO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG52YXIgdmFsdWVzID0gSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDQ1LSBidWdcbmlmICghSVNfUFVSRSAmJiBERVNDUklQVE9SUyAmJiB2YWx1ZXMubmFtZSAhPT0gJ3ZhbHVlcycpIHRyeSB7XG4gIGRlZmluZVByb3BlcnR5KHZhbHVlcywgJ25hbWUnLCB7IHZhbHVlOiAndmFsdWVzJyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiIsICIndXNlIHN0cmljdCc7XG4vLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgRE9NSXRlcmFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSAmJiBjbGFzc29mKENvbGxlY3Rpb25Qcm90b3R5cGUpICE9PSBUT19TVFJJTkdfVEFHKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIENPTExFQ1RJT05fTkFNRSk7XG4gIH1cbiAgSXRlcmF0b3JzW0NPTExFQ1RJT05fTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIE1FVEFEQVRBID0gd2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vLyBGdW5jdGlvbi5wcm90b3R5cGVbQEBtZXRhZGF0YV1cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuaWYgKEZ1bmN0aW9uUHJvdG90eXBlW01FVEFEQVRBXSA9PT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5KEZ1bmN0aW9uUHJvdG90eXBlLCBNRVRBREFUQSwge1xuICAgIHZhbHVlOiBudWxsXG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXN5bmMtZXhwbGljaXQtcmVzb3VyY2UtbWFuYWdlbWVudFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0Rpc3Bvc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmRpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2Rpc3Bvc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sJyk7XG5cbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuYXN5bmMtZGlzcG9zZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyIGtleUZvciA9IFN5bWJvbC5rZXlGb3I7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sIHx8IGZ1bmN0aW9uIGlzUmVnaXN0ZXJlZFN5bWJvbCh2YWx1ZSkge1xuICB0cnkge1xuICAgIHJldHVybiBrZXlGb3IodGhpc1N5bWJvbFZhbHVlKHZhbHVlKSkgIT09IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNSZWdpc3RlcmVkU3ltYm9sOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyICRpc1dlbGxLbm93blN5bWJvbCA9IFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbDtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0QnVpbHRJbignT2JqZWN0JywgJ2dldE93blByb3BlcnR5TmFtZXMnKTtcbnZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbmZvciAodmFyIGkgPSAwLCBzeW1ib2xLZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhTeW1ib2wpLCBzeW1ib2xLZXlzTGVuZ3RoID0gc3ltYm9sS2V5cy5sZW5ndGg7IGkgPCBzeW1ib2xLZXlzTGVuZ3RoOyBpKyspIHtcbiAgLy8gc29tZSBvbGQgZW5naW5lcyB0aHJvd3Mgb24gYWNjZXNzIHRvIHNvbWUga2V5cyBsaWtlIGBhcmd1bWVudHNgIG9yIGBjYWxsZXJgXG4gIHRyeSB7XG4gICAgdmFyIHN5bWJvbEtleSA9IHN5bWJvbEtleXNbaV07XG4gICAgaWYgKGlzU3ltYm9sKFN5bWJvbFtzeW1ib2xLZXldKSkgd2VsbEtub3duU3ltYm9sKHN5bWJvbEtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn1cblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkge1xuICBpZiAoJGlzV2VsbEtub3duU3ltYm9sICYmICRpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIHZhciBzeW1ib2wgPSB0aGlzU3ltYm9sVmFsdWUodmFsdWUpO1xuICAgIGZvciAodmFyIGogPSAwLCBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7IGogPCBrZXlzTGVuZ3RoOyBqKyspIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXEgLS0gcG9seWZpbGxlZCBzeW1ib2xzIGNhc2VcbiAgICAgIGlmIChXZWxsS25vd25TeW1ib2xzU3RvcmVba2V5c1tqXV0gPT0gc3ltYm9sKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1dlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtd2VsbC1rbm93bicpO1xuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd25TeW1ib2w6IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoZXJgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoZXInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm9ic2VydmFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ29ic2VydmFibGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1JlZ2lzdGVyZWRTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXJlZ2lzdGVyZWQnKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRgIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzUmVnaXN0ZXJlZFN5bWJvbCcgfSwge1xuICBpc1JlZ2lzdGVyZWQ6IGlzUmVnaXN0ZXJlZFN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93bmAgbWV0aG9kXG4vLyBvYnNvbGV0ZSB2ZXJzaW9uIG9mIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzV2VsbEtub3duU3ltYm9sJywgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd246IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YUtleWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YUtleScpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnBhdHRlcm5NYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncGF0dGVybk1hdGNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZUFsbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1hdGNoZXInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEta2V5Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucGF0dGVybi1tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9zeW1ib2wnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcblxudmFyIFNUUklOR19JVEVSQVRPUiA9ICdTdHJpbmcgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1RSSU5HX0lURVJBVE9SKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLUBAaXRlcmF0b3JcbmRlZmluZUl0ZXJhdG9yKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBTVFJJTkdfSVRFUkFUT1IsXG4gICAgc3RyaW5nOiB0b1N0cmluZyhpdGVyYXRlZCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG4vLyBgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXN0cmluZ2l0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc3RyaW5nID0gc3RhdGUuc3RyaW5nO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleDtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocG9pbnQsIGZhbHNlKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG52YXIgV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKCdpdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wvaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sL2l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfU3ltYm9sJGl0ZXJhdG9yIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IF9TeW1ib2wgJiYgbyAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuZGF0ZS50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZigndG9QcmltaXRpdmUnKTtcbiIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IF9TeW1ib2wkdG9QcmltaXRpdmUgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbX1N5bWJvbCR0b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIF9PYmplY3QkZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChDLCBhcmdzTGVuZ3RoLCBhcmdzKSB7XG4gIGlmICghaGFzT3duKGZhY3RvcmllcywgYXJnc0xlbmd0aCkpIHtcbiAgICB2YXIgbGlzdCA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IGFyZ3NMZW5ndGg7IGkrKykgbGlzdFtpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIGZhY3Rvcmllc1thcmdzTGVuZ3RoXSA9ICRGdW5jdGlvbignQyxhJywgJ3JldHVybiBuZXcgQygnICsgam9pbihsaXN0LCAnLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2FyZ3NMZW5ndGhdKEMsIGFyZ3MpO1xufTtcblxuLy8gYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBkZXRlY3Rpb25cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyAkRnVuY3Rpb24uYmluZCA6IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIEYgPSBhQ2FsbGFibGUodGhpcyk7XG4gIHZhciBQcm90b3R5cGUgPSBGLnByb3RvdHlwZTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJvdW5kKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IGNvbmNhdChwYXJ0QXJncywgYXJyYXlTbGljZShhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kRnVuY3Rpb24gPyBjb25zdHJ1Y3QoRiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogRi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KFByb3RvdHlwZSkpIGJvdW5kRnVuY3Rpb24ucHJvdG90eXBlID0gUHJvdG90eXBlO1xuICByZXR1cm4gYm91bmRGdW5jdGlvbjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxuJCh7IHRhcmdldDogJ0Z1bmN0aW9uJywgcHJvdG86IHRydWUsIGZvcmNlZDogRnVuY3Rpb24uYmluZCAhPT0gYmluZCB9LCB7XG4gIGJpbmQ6IGJpbmRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SLCBNRVRIT0QpIHtcbiAgdmFyIE5hbWVzcGFjZSA9IHBhdGhbQ09OU1RSVUNUT1IgKyAnUHJvdG90eXBlJ107XG4gIHZhciBwdXJlTWV0aG9kID0gTmFtZXNwYWNlICYmIE5hbWVzcGFjZVtNRVRIT0RdO1xuICBpZiAocHVyZU1ldGhvZCkgcmV0dXJuIHB1cmVNZXRob2Q7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBOYXRpdmVQcm90b3R5cGUgJiYgTmF0aXZlUHJvdG90eXBlW01FVEhPRF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdGdW5jdGlvbicsICdiaW5kJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9uL3ZpcnR1YWwvYmluZCcpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5iaW5kO1xuICByZXR1cm4gaXQgPT09IEZ1bmN0aW9uUHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEZ1bmN0aW9uUHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBGdW5jdGlvblByb3RvdHlwZS5iaW5kKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9iaW5kXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyByZWR1Y2UsIHJlZHVjZVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfUklHSFQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhcmd1bWVudHNMZW5ndGgsIG1lbW8pIHtcbiAgICBhQ2FsbGFibGUoY2FsbGJhY2tmbik7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IElTX1JJR0hUID8gbGVuZ3RoIC0gMSA6IDA7XG4gICAgdmFyIGkgPSBJU19SSUdIVCA/IC0xIDogMTtcbiAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDwgMikgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgICAgaW5kZXggKz0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgaWYgKElTX1JJR0hUID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoO0lTX1JJR0hUID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiAgbGVmdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZXJpZ2h0XG4gIHJpZ2h0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09PSAncHJvY2Vzcyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5sZWZ0O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIENIUk9NRV9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG4vLyBDaHJvbWUgODAtODIgaGFzIGEgY3JpdGljYWwgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDQ5OTgyXG52YXIgQ0hST01FX0JVRyA9ICFJU19OT0RFICYmIENIUk9NRV9WRVJTSU9OID4gNzkgJiYgQ0hST01FX1ZFUlNJT04gPCA4MztcbnZhciBGT1JDRUQgPSBDSFJPTUVfQlVHIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdyZWR1Y2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgbGVuZ3RoLCBsZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAncmVkdWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmVkdWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJlZHVjZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmVkdWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbHRlcicpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmaWx0ZXInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maWx0ZXInKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmlsdGVyO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLm1hcDtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnbWFwJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkubWFwJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ21hcCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL21hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5tYXA7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLm1hcCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG5cbi8vIGBGbGF0dGVuSW50b0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gZnVuY3Rpb24gKHRhcmdldCwgb3JpZ2luYWwsIHNvdXJjZSwgc291cmNlTGVuLCBzdGFydCwgZGVwdGgsIG1hcHBlciwgdGhpc0FyZykge1xuICB2YXIgdGFyZ2V0SW5kZXggPSBzdGFydDtcbiAgdmFyIHNvdXJjZUluZGV4ID0gMDtcbiAgdmFyIG1hcEZuID0gbWFwcGVyID8gYmluZChtYXBwZXIsIHRoaXNBcmcpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBlbGVtZW50TGVuO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBpZiAoZGVwdGggPiAwICYmIGlzQXJyYXkoZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudExlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKGVsZW1lbnQpO1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgZWxlbWVudExlbiwgdGFyZ2V0SW5kZXgsIGRlcHRoIC0gMSkgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKHRhcmdldEluZGV4ICsgMSk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbkludG9BcnJheTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mbGF0TWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZsYXRtYXBcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBBO1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIEEubGVuZ3RoID0gZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mbGF0LW1hcCcpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS51bnNjb3BhYmxlcy5mbGF0LW1hcCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmbGF0TWFwJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmxhdC1tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmxhdE1hcDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmxhdE1hcCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgImltcG9ydCB7IERhdGFJbnRlcmZhY2UsIEV2ZW50Q2FsbGJhY2tzLCBQYXJ0SXRlbSB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcblxuLyoqXG4gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVBpcGUge1xuICAvKipcbiAgICogVGFrZSBhbGwgaXRlbXMgZnJvbSB0aGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldywgdHJhbnNmb3JtIHRoZW0gYXNcbiAgICogY29uZmlndXJlZCBhbmQgdXBkYXRlIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBhbGwoKTogdGhpcztcblxuICAvKipcbiAgICogU3RhcnQgb2JzZXJ2aW5nIHRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LCB0cmFuc2Zvcm1pbmcgdGhlIGl0ZW1zXG4gICAqIGFuZCB1cGRhdGluZyB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgY3VycmVudCBjb250ZW50IG9mIHRoZSBzb3VyY2UgZGF0YSBzZXQgd2lsbCBiZSBpZ25vcmVkLiBJZiB5b3UgZm9yXG4gICAqIGV4YW1wbGUgd2FudCB0byBwcm9jZXNzIGFsbCB0aGUgaXRlbXMgdGhhdCBhcmUgYWxyZWFkeSB0aGVyZSB1c2U6XG4gICAqIGBwaXBlLmFsbCgpLnN0YXJ0KClgLlxuICAgKi9cbiAgc3RhcnQoKTogdGhpcztcblxuICAvKipcbiAgICogU3RvcCBvYnNlcnZpbmcgdGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcsIHRyYW5zZm9ybWluZyB0aGUgaXRlbXNcbiAgICogYW5kIHVwZGF0aW5nIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBzdG9wKCk6IHRoaXM7XG59XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFQaXBlRmFjdG9yeSA9IEluc3RhbmNlVHlwZTx0eXBlb2YgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbj47XG5cbi8qKlxuICogQ3JlYXRlIG5ldyBkYXRhIHBpcGUuXG4gKlxuICogQHBhcmFtIGZyb20gLSBUaGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldy5cbiAqIEByZW1hcmtzXG4gKiBFeGFtcGxlIHVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIEFwcEl0ZW0ge1xuICogICB3aG9hbWk6IHN0cmluZztcbiAqICAgYXBwRGF0YTogdW5rbm93bjtcbiAqICAgdmlzRGF0YTogVmlzSXRlbTtcbiAqIH1cbiAqIGludGVyZmFjZSBWaXNJdGVtIHtcbiAqICAgaWQ6IG51bWJlcjtcbiAqICAgbGFiZWw6IHN0cmluZztcbiAqICAgY29sb3I6IHN0cmluZztcbiAqICAgeDogbnVtYmVyO1xuICogICB5OiBudW1iZXI7XG4gKiB9XG4gKlxuICogY29uc3QgZHMxID0gbmV3IERhdGFTZXQ8QXBwSXRlbSwgXCJ3aG9hbWlcIj4oW10sIHsgZmllbGRJZDogXCJ3aG9hbWlcIiB9KTtcbiAqIGNvbnN0IGRzMiA9IG5ldyBEYXRhU2V0PFZpc0l0ZW0sIFwiaWRcIj4oKTtcbiAqXG4gKiBjb25zdCBwaXBlID0gY3JlYXRlTmV3RGF0YVBpcGVGcm9tKGRzMSlcbiAqICAgLmZpbHRlcigoaXRlbSk6IGJvb2xlYW4gPT4gaXRlbS5lbmFibGVkID09PSB0cnVlKVxuICogICAubWFwPFZpc0l0ZW0sIFwiaWRcIj4oKGl0ZW0pOiBWaXNJdGVtID0+IGl0ZW0udmlzRGF0YSlcbiAqICAgLnRvKGRzMik7XG4gKlxuICogcGlwZS5zdGFydCgpO1xuICogYGBgXG4gKiBAcmV0dXJucyBBIGZhY3Rvcnkgd2hvc2UgbWV0aG9kcyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdEYXRhUGlwZUZyb208XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPihmcm9tOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFNJLCBTUD4ge1xuICByZXR1cm4gbmV3IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb24oZnJvbSk7XG59XG5cbnR5cGUgVHJhbnNmb3JtZXI8VD4gPSAoaW5wdXQ6IFRbXSkgPT4gVFtdO1xuXG4vKipcbiAqIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwaXBlLiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlIG9ubHkgdGhyb3VnaFxuICogYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFNJIC0gU291cmNlIGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gU1AgLSBTb3VyY2UgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICogQHR5cGVQYXJhbSBUUCAtIFRhcmdldCBpdGVtIHR5cGUncyBpZCBwcm9wZXJ0eSBuYW1lLlxuICovXG5jbGFzcyBTaW1wbGVEYXRhUGlwZTxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nLFxuICBUSSBleHRlbmRzIFBhcnRJdGVtPFRQPixcbiAgVFAgZXh0ZW5kcyBzdHJpbmdcbj4gaW1wbGVtZW50cyBEYXRhUGlwZVxue1xuICAvKipcbiAgICogQm91bmQgbGlzdGVuZXJzIGZvciB1c2Ugd2l0aCBgRGF0YUludGVyZmFjZVsnb24nIHwgJ29mZiddYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogRXZlbnRDYWxsYmFja3M8U0ksIFNQPiA9IHtcbiAgICBhZGQ6IHRoaXMuX2FkZC5iaW5kKHRoaXMpLFxuICAgIHJlbW92ZTogdGhpcy5fcmVtb3ZlLmJpbmQodGhpcyksXG4gICAgdXBkYXRlOiB0aGlzLl91cGRhdGUuYmluZCh0aGlzKSxcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZS5cbiAgICpcbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IHRoYXQgd2lsbCBiZSBvYnNlcnZlZC5cbiAgICogQHBhcmFtIF90cmFuc2Zvcm1lcnMgLSBBbiBhcnJheSBvZiB0cmFuc2Zvcm1pbmcgZnVuY3Rpb25zIHRvIGJlIHVzZWQgdG9cbiAgICogZmlsdGVyIG9yIHRyYW5zZm9ybSB0aGUgaXRlbXMgaW4gdGhlIHBpcGUuXG4gICAqIEBwYXJhbSBfdGFyZ2V0IC0gVGhlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiByZWFkb25seSBUcmFuc2Zvcm1lcjx1bmtub3duPltdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhcmdldDogRGF0YVNldDxUSSwgVFA+XG4gICkge31cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGFsbCgpOiB0aGlzIHtcbiAgICB0aGlzLl90YXJnZXQudXBkYXRlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQoKSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdGFydCgpOiB0aGlzIHtcbiAgICB0aGlzLl9zb3VyY2Uub24oXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9uKFwicmVtb3ZlXCIsIHRoaXMuX2xpc3RlbmVycy5yZW1vdmUpO1xuICAgIHRoaXMuX3NvdXJjZS5vbihcInVwZGF0ZVwiLCB0aGlzLl9saXN0ZW5lcnMudXBkYXRlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdG9wKCk6IHRoaXMge1xuICAgIHRoaXMuX3NvdXJjZS5vZmYoXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9mZihcInJlbW92ZVwiLCB0aGlzLl9saXN0ZW5lcnMucmVtb3ZlKTtcbiAgICB0aGlzLl9zb3VyY2Uub2ZmKFwidXBkYXRlXCIsIHRoaXMuX2xpc3RlbmVycy51cGRhdGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdGhlIHRyYW5zZm9ybWVycyB0byB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIFRoZSBpdGVtcyB0byBiZSB0cmFuc2Zvcm1lZC5cbiAgICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdHJhbnNmb3JtSXRlbXMoaXRlbXM6IHVua25vd25bXSk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3JtZXJzLnJlZHVjZSgoaXRlbXMsIHRyYW5zZm9ybSk6IHVua25vd25bXSA9PiB7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtKGl0ZW1zKTtcbiAgICB9LCBpdGVtcyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFuIGFkZCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBpZHMgb2YgdGhlIGFkZGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJhZGRcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcImFkZFwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5hZGQodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhbiB1cGRhdGUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgaWRzIG9mIHRoZSB1cGRhdGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJ1cGRhdGVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInVwZGF0ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC51cGRhdGUodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHJlbW92ZSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBkYXRhIG9mIHRoZSByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVtb3ZlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJyZW1vdmVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInJlbW92ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5yZW1vdmUodGhpcy5fdHJhbnNmb3JtSXRlbXMocGF5bG9hZC5vbGREYXRhKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGlwZSBmYWN0b3J5LiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlXG4gKiBvbmx5IHRocm91Z2ggYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqL1xuY2xhc3MgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+IHtcbiAgLyoqXG4gICAqIEFycmF5IHRyYW5zZm9ybWVycyB1c2VkIHRvIHRyYW5zZm9ybSBpdGVtcyB3aXRoaW4gdGhlIHBpcGUuIFRoaXMgaXMgdHlwZWRcbiAgICogYXMgYW55IGZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiBUcmFuc2Zvcm1lcjxhbnk+W10gPSBbXTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZSBmYWN0b3J5LiBUaGlzIGlzIGFuIGludGVybmFsIGNvbnN0cnVjdG9yIHRoYXRcbiAgICogc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhpcyBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gX3NvdXJjZSAtIFRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IGZvciB0aGlzIHBpcGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pIHt9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgZmlsdGVyaW5nIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIGdpdmVuIGl0ZW1cbiAgICogc2hvdWxkIGJlIHBpcGVkIGFuZCBmYWxzZSBpZiBub3QuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZpbHRlcihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBib29sZWFuXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248U0ksIFNQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZpbHRlcihjYWxsYmFjaykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBlYWNoIHNvdXJjZSBpdGVtIHRvIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbS5cbiAgICogQHR5cGVQYXJhbSBUSSAtIFRhcmdldCBpdGVtIHR5cGUuXG4gICAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAgICogQHJldHVybnMgVGhpcyBmYWN0b3J5IGZvciBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgbWFwPFRJIGV4dGVuZHMgUGFydEl0ZW08VFA+LCBUUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIj4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gVElcbiAgKTogRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxUSSwgVFA+IHtcbiAgICB0aGlzLl90cmFuc2Zvcm1lcnMucHVzaCgoaW5wdXQpOiB1bmtub3duW10gPT4gaW5wdXQubWFwKGNhbGxiYWNrKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD47XG4gIH1cblxuICAvKipcbiAgICogTWFwIGVhY2ggc291cmNlIGl0ZW0gdG8gemVybyBvciBtb3JlIGl0ZW1zIG9mIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogYW4gYXJyYXkgb2YgY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbXMuXG4gICAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICAgKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZsYXRNYXA8VEkgZXh0ZW5kcyBQYXJ0SXRlbTxUUD4sIFRQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiPihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBUSVtdXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZsYXRNYXAoY2FsbGJhY2spKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IHRoaXMgcGlwZSB0byBnaXZlbiBkYXRhIHNldC5cbiAgICpcbiAgICogQHBhcmFtIHRhcmdldCAtIFRoZSBkYXRhIHNldCB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMgZnJvbSB0aGlzIHBpcGUuXG4gICAqIEByZXR1cm5zIFRoZSBwaXBlIGNvbm5lY3RlZCBiZXR3ZWVuIGdpdmVuIGRhdGEgc2V0cyBhbmQgcGVyZm9ybWluZ1xuICAgKiBjb25maWd1cmVkIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBwcm9jZXNzZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgdG8odGFyZ2V0OiBEYXRhU2V0PFNJLCBTUD4pOiBEYXRhUGlwZSB7XG4gICAgcmV0dXJuIG5ldyBTaW1wbGVEYXRhUGlwZSh0aGlzLl9zb3VyY2UsIHRoaXMuX3RyYW5zZm9ybWVycywgdGFyZ2V0KTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZyb20nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkFycmF5LmZyb207XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tXCIpOyIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Z1bGwvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yTWV0aG9kO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbi8vIGBBcnJheS5pc0FycmF5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuaXNhcnJheVxuJCh7IHRhcmdldDogJ0FycmF5Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzQXJyYXk6IGlzQXJyYXlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkFycmF5LmlzQXJyYXk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvYXJyYXkvaXMtYXJyYXknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBTYWZhcmkgPCAxMyBkb2VzIG5vdCB0aHJvdyBhbiBlcnJvciBpbiB0aGlzIGNhc2VcbnZhciBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPSBERVNDUklQVE9SUyAmJiAhZnVuY3Rpb24gKCkge1xuICAvLyBtYWtlcyBubyBzZW5zZSB3aXRob3V0IHByb3BlciBzdHJpY3QgbW9kZSBzdXBwb3J0XG4gIGlmICh0aGlzICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLmxlbmd0aCA9IDE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID8gZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICBpZiAoaXNBcnJheShPKSAmJiAhZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sICdsZW5ndGgnKS53cml0YWJsZSkge1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoJyk7XG4gIH0gcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufSA6IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBJTkNPUlJFQ1RfVE9fTEVOR1RIID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW10ucHVzaC5jYWxsKHsgbGVuZ3RoOiAweDEwMDAwMDAwMCB9LCAxKSAhPT0gNDI5NDk2NzI5Nztcbn0pO1xuXG4vLyBWOCBhbmQgU2FmYXJpIDw9IDE1LjQsIEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnB1c2gnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAncHVzaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3B1c2gnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucHVzaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucHVzaCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9wdXNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBuYXRpdmVTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKENvbnN0cnVjdG9yKSAmJiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc2xpY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc2xpY2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL3NsaWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59IiwgImltcG9ydCBfc2xpY2VJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanNcIjtcbmltcG9ydCBfQXJyYXkkZnJvbSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2Zyb20uanNcIjtcbmltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgdmFyIF9jb250ZXh0O1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IF9zbGljZUluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykpLmNhbGwoX2NvbnRleHQsIDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIF9BcnJheSRmcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCAiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwgImltcG9ydCBfQXJyYXkkaXNBcnJheSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2lzLWFycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChfQXJyYXkkaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsICJpbXBvcnQgX1N5bWJvbCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiO1xuaW1wb3J0IF9nZXRJdGVyYXRvck1ldGhvZCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanNcIjtcbmltcG9ydCBfcHVzaEluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9wdXNoLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkge1xuICB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBfU3ltYm9sICYmIF9nZXRJdGVyYXRvck1ldGhvZChyKSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKF9wdXNoSW5zdGFuY2VQcm9wZXJ0eShhKS5jYWxsKGEsIGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgbyA9ICEwLCBuID0gcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmICYmIG51bGwgIT0gdFtcInJldHVyblwiXSAmJiAodSA9IHRbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG8pIHRocm93IG47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgImltcG9ydCBhcnJheVdpdGhvdXRIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlU3ByZWFkIGZyb20gXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn0iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59IiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX2dldEl0ZXJhdG9yTWV0aG9kIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiO1xuaW1wb3J0IF9BcnJheSRmcm9tIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvZnJvbS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgX1N5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBfZ2V0SXRlcmF0b3JNZXRob2QoaXRlcikgIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gX0FycmF5JGZyb20oaXRlcik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdjb25jYXQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9jb25jYXQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuY29uY2F0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5jb25jYXQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NsaWNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG5cbi8vIGBSZWZsZWN0Lm93bktleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0Lm93bmtleXNcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIG93bktleXM6IG93bktleXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC5vd24ta2V5cycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUmVmbGVjdC5vd25LZXlzO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvaXMtYXJyYXlcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5rZXlzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2ZvckVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbm1vZHVsZS5leHBvcnRzID0gIVNUUklDVF9NRVRIT0QgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxufSA6IFtdLmZvckVhY2g7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mb3ItZWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFtdLmZvckVhY2ggIT09IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZvckVhY2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2gnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZm9yRWFjaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZm9yRWFjaClcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2hcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyIG5hdGl2ZVJldmVyc2UgPSB1bmN1cnJ5VGhpcyhbXS5yZXZlcnNlKTtcbnZhciB0ZXN0ID0gWzEsIDJdO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJldmVyc2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmV2ZXJzZVxuLy8gZml4IGZvciBTYWZhcmkgMTIuMCBidWdcbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg3OTRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFN0cmluZyh0ZXN0KSA9PT0gU3RyaW5nKHRlc3QucmV2ZXJzZSgpKSB9LCB7XG4gIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduIC0tIGRpcnR5IGhhY2tcbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gbmF0aXZlUmV2ZXJzZSh0aGlzKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3JldmVyc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9yZXZlcnNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJldmVyc2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJldmVyc2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmV2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JldmVyc2VcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIGlmICghZGVsZXRlIE9bUF0pIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICcgKyB0cnlUb1N0cmluZyhQKSArICcgb2YgJyArIHRyeVRvU3RyaW5nKE8pKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NwbGljZScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc3BsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNwbGljZVxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc3BsaWNlOiBmdW5jdGlvbiBzcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50IC8qICwgLi4uaXRlbXMgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYWN0dWFsU3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGluc2VydENvdW50LCBhY3R1YWxEZWxldGVDb3VudCwgQSwgaywgZnJvbSwgdG87XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMCkge1xuICAgICAgaW5zZXJ0Q291bnQgPSBhY3R1YWxEZWxldGVDb3VudCA9IDA7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDEpIHtcbiAgICAgIGluc2VydENvdW50ID0gMDtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbGVuIC0gYWN0dWFsU3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc2VydENvdW50ID0gYXJndW1lbnRzTGVuZ3RoIC0gMjtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbWluKG1heCh0b0ludGVnZXJPckluZmluaXR5KGRlbGV0ZUNvdW50KSwgMCksIGxlbiAtIGFjdHVhbFN0YXJ0KTtcbiAgICB9XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGluc2VydENvdW50IC0gYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIGZvciAoayA9IDA7IGsgPCBhY3R1YWxEZWxldGVDb3VudDsgaysrKSB7XG4gICAgICBmcm9tID0gYWN0dWFsU3RhcnQgKyBrO1xuICAgICAgaWYgKGZyb20gaW4gTykgY3JlYXRlUHJvcGVydHkoQSwgaywgT1tmcm9tXSk7XG4gICAgfVxuICAgIEEubGVuZ3RoID0gYWN0dWFsRGVsZXRlQ291bnQ7XG4gICAgaWYgKGluc2VydENvdW50IDwgYWN0dWFsRGVsZXRlQ291bnQpIHtcbiAgICAgIGZvciAoayA9IGFjdHVhbFN0YXJ0OyBrIDwgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgICBmcm9tID0gayArIGFjdHVhbERlbGV0ZUNvdW50O1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudDtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgICBmb3IgKGsgPSBsZW47IGsgPiBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50OyBrLS0pIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCBrIC0gMSk7XG4gICAgfSBlbHNlIGlmIChpbnNlcnRDb3VudCA+IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBsZW4gLSBhY3R1YWxEZWxldGVDb3VudDsgayA+IGFjdHVhbFN0YXJ0OyBrLS0pIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudCAtIDE7XG4gICAgICAgIHRvID0gayArIGluc2VydENvdW50IC0gMTtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoayA9IDA7IGsgPCBpbnNlcnRDb3VudDsgaysrKSB7XG4gICAgICBPW2sgKyBhY3R1YWxTdGFydF0gPSBhcmd1bWVudHNbayArIDJdO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50KTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc3BsaWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc3BsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNwbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc3BsaWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gc2FmZVxudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHNob3VsZCBoYXZlIGNvcnJlY3Qgb3JkZXIgb2Ygb3BlcmF0aW9ucyAoRWRnZSBidWcpXG4gIGlmIChERVNDUklQVE9SUyAmJiAkYXNzaWduKHsgYjogMSB9LCAkYXNzaWduKGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgJ2InLCB7XG4gICAgICAgIHZhbHVlOiAzLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9KSwgeyBiOiAyIH0pKS5iICE9PSAxKSByZXR1cm4gdHJ1ZTtcbiAgLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zeW1ib2wgLS0gc2FmZVxuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdhc3NpZ24gZGV0ZWN0aW9uJyk7XG4gIHZhciBhbHBoYWJldCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbc3ltYm9sXSA9IDc7XG4gIGFscGhhYmV0LnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChjaHIpIHsgQltjaHJdID0gY2hyOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW3N5bWJvbF0gIT09IDcgfHwgb2JqZWN0S2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT09IGFscGhhYmV0O1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQob2JqZWN0S2V5cyhTKSwgZ2V0T3duUHJvcGVydHlTeW1ib2xzKFMpKSA6IG9iamVjdEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwocHJvcGVydHlJc0VudW1lcmFibGUsIFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgYXJpdHk6IDIsIGZvcmNlZDogT2JqZWN0LmFzc2lnbiAhPT0gYXNzaWduIH0sIHtcbiAgYXNzaWduOiBhc3NpZ25cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmFzc2lnbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0UHJvdG90eXBlT2YoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIH0sIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBjcmVhdGU6IGNyZWF0ZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuY3JlYXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShQLCBEKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWpzb24gLS0gc2FmZVxuaWYgKCFwYXRoLkpTT04pIHBhdGguSlNPTiA9IHsgc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeSB9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICByZXR1cm4gYXBwbHkocGF0aC5KU09OLnN0cmluZ2lmeSwgbnVsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2pzb24vc3RyaW5naWZ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBCdW4gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBCdW4gPT0gJ2Z1bmN0aW9uJyAmJiBCdW4gJiYgdHlwZW9mIEJ1bi52ZXJzaW9uID09ICdzdHJpbmcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG4gIHJldHVybiBwYXNzZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgRU5HSU5FX0lTX0JVTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnVuJyk7XG52YXIgVVNFUl9BR0VOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG5cbnZhciBGdW5jdGlvbiA9IGdsb2JhbC5GdW5jdGlvbjtcbi8vIGRpcnR5IElFOS0gYW5kIEJ1biAwLjMuMC0gY2hlY2tzXG52YXIgV1JBUCA9IC9NU0lFIC5cXC4vLnRlc3QoVVNFUl9BR0VOVCkgfHwgRU5HSU5FX0lTX0JVTiAmJiAoZnVuY3Rpb24gKCkge1xuICB2YXIgdmVyc2lvbiA9IGdsb2JhbC5CdW4udmVyc2lvbi5zcGxpdCgnLicpO1xuICByZXR1cm4gdmVyc2lvbi5sZW5ndGggPCAzIHx8IHZlcnNpb25bMF0gPT09ICcwJyAmJiAodmVyc2lvblsxXSA8IDMgfHwgdmVyc2lvblsxXSA9PT0gJzMnICYmIHZlcnNpb25bMl0gPT09ICcwJyk7XG59KSgpO1xuXG4vLyBJRTktIC8gQnVuIDAuMy4wLSBzZXRUaW1lb3V0IC8gc2V0SW50ZXJ2YWwgLyBzZXRJbW1lZGlhdGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCN0aW1lcnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9pc3N1ZXMvMTYzM1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBoYXNUaW1lQXJnKSB7XG4gIHZhciBmaXJzdFBhcmFtSW5kZXggPSBoYXNUaW1lQXJnID8gMiA6IDE7XG4gIHJldHVybiBXUkFQID8gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSkgPiBmaXJzdFBhcmFtSW5kZXg7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgcGFyYW1zID0gYm91bmRBcmdzID8gYXJyYXlTbGljZShhcmd1bWVudHMsIGZpcnN0UGFyYW1JbmRleCkgOiBbXTtcbiAgICB2YXIgY2FsbGJhY2sgPSBib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdGhpcywgcGFyYW1zKTtcbiAgICB9IDogZm47XG4gICAgcmV0dXJuIGhhc1RpbWVBcmcgPyBzY2hlZHVsZXIoY2FsbGJhY2ssIHRpbWVvdXQpIDogc2NoZWR1bGVyKGNhbGxiYWNrKTtcbiAgfSA6IHNjaGVkdWxlcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNjaGVkdWxlcnNGaXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXgnKTtcblxudmFyIHNldEludGVydmFsID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0SW50ZXJ2YWwsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldGludGVydmFsXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRJbnRlcnZhbCAhPT0gc2V0SW50ZXJ2YWwgfSwge1xuICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWxcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRUaW1lb3V0ID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0VGltZW91dCwgdHJ1ZSk7XG5cbi8vIEJ1biAvIElFOS0gc2V0VGltZW91dCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRUaW1lb3V0ICE9PSBzZXRUaW1lb3V0IH0sIHtcbiAgc2V0VGltZW91dDogc2V0VGltZW91dFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRUaW1lb3V0O1xuIiwgImZ1bmN0aW9uIEVtaXR0ZXIob2JqZWN0KSB7XG5cdGlmIChvYmplY3QpIHtcblx0XHRyZXR1cm4gbWl4aW4ob2JqZWN0KTtcblx0fVxuXG5cdHRoaXMuX2NhbGxiYWNrcyA9IG5ldyBNYXAoKTtcbn1cblxuZnVuY3Rpb24gbWl4aW4ob2JqZWN0KSB7XG5cdE9iamVjdC5hc3NpZ24ob2JqZWN0LCBFbWl0dGVyLnByb3RvdHlwZSk7XG5cdG9iamVjdC5fY2FsbGJhY2tzID0gbmV3IE1hcCgpO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5FbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCkgPz8gW107XG5cdGNhbGxiYWNrcy5wdXNoKGxpc3RlbmVyKTtcblx0dGhpcy5fY2FsbGJhY2tzLnNldChldmVudCwgY2FsbGJhY2tzKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRjb25zdCBvbiA9ICguLi5hcmd1bWVudHNfKSA9PiB7XG5cdFx0dGhpcy5vZmYoZXZlbnQsIG9uKTtcblx0XHRsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHNfKTtcblx0fTtcblxuXHRvbi5mbiA9IGxpc3RlbmVyO1xuXHR0aGlzLm9uKGV2ZW50LCBvbik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRpZiAoZXZlbnQgPT09IHVuZGVmaW5lZCAmJiBsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5fY2FsbGJhY2tzLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpZiAobGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX2NhbGxiYWNrcy5kZWxldGUoZXZlbnQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCk7XG5cdGlmIChjYWxsYmFja3MpIHtcblx0XHRmb3IgKGNvbnN0IFtpbmRleCwgY2FsbGJhY2tdIG9mIGNhbGxiYWNrcy5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChjYWxsYmFjayA9PT0gbGlzdGVuZXIgfHwgY2FsbGJhY2suZm4gPT09IGxpc3RlbmVyKSB7XG5cdFx0XHRcdGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoY2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5fY2FsbGJhY2tzLmRlbGV0ZShldmVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2NhbGxiYWNrcy5zZXQoZXZlbnQsIGNhbGxiYWNrcyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50LCAuLi5hcmd1bWVudHNfKSB7XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpO1xuXHRpZiAoY2FsbGJhY2tzKSB7XG5cdFx0Ly8gQ3JlYXRlIGEgY29weSBvZiB0aGUgY2FsbGJhY2tzIGFycmF5IHRvIGF2b2lkIGlzc3VlcyBpZiBpdCdzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb25cblx0XHRjb25zdCBjYWxsYmFja3NDb3B5ID0gWy4uLmNhbGxiYWNrc107XG5cblx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrc0NvcHkpIHtcblx0XHRcdGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50c18pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLl9jYWxsYmFja3MuZ2V0KGV2ZW50KSA/PyBbXTtcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0aWYgKGV2ZW50KSB7XG5cdFx0cmV0dXJuIHRoaXMubGlzdGVuZXJzKGV2ZW50KS5sZW5ndGg7XG5cdH1cblxuXHRsZXQgdG90YWxDb3VudCA9IDA7XG5cdGZvciAoY29uc3QgY2FsbGJhY2tzIG9mIHRoaXMuX2NhbGxiYWNrcy52YWx1ZXMoKSkge1xuXHRcdHRvdGFsQ291bnQgKz0gY2FsbGJhY2tzLmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiB0b3RhbENvdW50O1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUuaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLmxpc3RlbmVyQ291bnQoZXZlbnQpID4gMDtcbn07XG5cbi8vIEFsaWFzZXNcbkVtaXR0ZXIucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5vbjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub2ZmO1xuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gRW1pdHRlcjtcbn1cbiIsICIvKiEgSGFtbWVyLkpTIC0gdjIuMC4xNy1yYyAtIDIwMTktMTItMTZcbiAqIGh0dHA6Ly9uYXZlci5naXRodWIuaW8vZWdqc1xuICpcbiAqIEZvcmtlZCBCeSBOYXZlciBlZ2pzXG4gKiBDb3B5cmlnaHQgKGMpIGhhbW1lcmpzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKi9cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHsuLi5PYmplY3R9IG9iamVjdHNfdG9fYXNzaWduXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB0YXJnZXRcbiAqL1xudmFyIGFzc2lnbjtcblxuaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQpIHtcbiAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gT2JqZWN0KHRhcmdldCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF07XG5cbiAgICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgbmV4dEtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSB7XG4gICAgICAgICAgICBvdXRwdXRbbmV4dEtleV0gPSBzb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcbn0gZWxzZSB7XG4gIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG59XG5cbnZhciBhc3NpZ24kMSA9IGFzc2lnbjtcblxudmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xudmFyIFRFU1RfRUxFTUVOVCA9IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IHtcbiAgc3R5bGU6IHt9XG59IDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgVFlQRV9GVU5DVElPTiA9ICdmdW5jdGlvbic7XG52YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgIGFicyA9IE1hdGguYWJzO1xudmFyIG5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIHByZWZpeGVkIHByb3BlcnR5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAqIEByZXR1cm5zIHtTdHJpbmd8VW5kZWZpbmVkfSBwcmVmaXhlZFxuICovXG5cbmZ1bmN0aW9uIHByZWZpeGVkKG9iaiwgcHJvcGVydHkpIHtcbiAgdmFyIHByZWZpeDtcbiAgdmFyIHByb3A7XG4gIHZhciBjYW1lbFByb3AgPSBwcm9wZXJ0eVswXS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICBwcmVmaXggPSBWRU5ET1JfUFJFRklYRVNbaV07XG4gICAgcHJvcCA9IHByZWZpeCA/IHByZWZpeCArIGNhbWVsUHJvcCA6IHByb3BlcnR5O1xuXG4gICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICByZXR1cm4gcHJvcDtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXctZnVuYywgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbnZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gIC8vIHdpbmRvdyBpcyB1bmRlZmluZWQgaW4gbm9kZS5qc1xuICB3aW4gPSB7fTtcbn0gZWxzZSB7XG4gIHdpbiA9IHdpbmRvdztcbn1cblxudmFyIFBSRUZJWEVEX1RPVUNIX0FDVElPTiA9IHByZWZpeGVkKFRFU1RfRUxFTUVOVC5zdHlsZSwgJ3RvdWNoQWN0aW9uJyk7XG52YXIgTkFUSVZFX1RPVUNIX0FDVElPTiA9IFBSRUZJWEVEX1RPVUNIX0FDVElPTiAhPT0gdW5kZWZpbmVkO1xuZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb25Qcm9wcygpIHtcbiAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRvdWNoTWFwID0ge307XG4gIHZhciBjc3NTdXBwb3J0cyA9IHdpbi5DU1MgJiYgd2luLkNTUy5zdXBwb3J0cztcbiAgWydhdXRvJywgJ21hbmlwdWxhdGlvbicsICdwYW4teScsICdwYW4teCcsICdwYW4teCBwYW4teScsICdub25lJ10uZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7XG4gICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgLy8gYWxsIHZhbHVlcy4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgSUUgMTAgYW5kIDExLlxuICAgIHJldHVybiB0b3VjaE1hcFt2YWxdID0gY3NzU3VwcG9ydHMgPyB3aW4uQ1NTLnN1cHBvcnRzKCd0b3VjaC1hY3Rpb24nLCB2YWwpIDogdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiB0b3VjaE1hcDtcbn1cblxudmFyIFRPVUNIX0FDVElPTl9DT01QVVRFID0gJ2NvbXB1dGUnO1xudmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xudmFyIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04gPSAnbWFuaXB1bGF0aW9uJzsgLy8gbm90IGltcGxlbWVudGVkXG5cbnZhciBUT1VDSF9BQ1RJT05fTk9ORSA9ICdub25lJztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1ggPSAncGFuLXgnO1xudmFyIFRPVUNIX0FDVElPTl9QQU5fWSA9ICdwYW4teSc7XG52YXIgVE9VQ0hfQUNUSU9OX01BUCA9IGdldFRvdWNoQWN0aW9uUHJvcHMoKTtcblxudmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcbnZhciBTVVBQT1JUX1RPVUNIID0gJ29udG91Y2hzdGFydCcgaW4gd2luO1xudmFyIFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMgPSBwcmVmaXhlZCh3aW4sICdQb2ludGVyRXZlbnQnKSAhPT0gdW5kZWZpbmVkO1xudmFyIFNVUFBPUlRfT05MWV9UT1VDSCA9IFNVUFBPUlRfVE9VQ0ggJiYgTU9CSUxFX1JFR0VYLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSU5QVVRfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG52YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbnZhciBJTlBVVF9UWVBFX01PVVNFID0gJ21vdXNlJztcbnZhciBJTlBVVF9UWVBFX0tJTkVDVCA9ICdraW5lY3QnO1xudmFyIENPTVBVVEVfSU5URVJWQUwgPSAyNTtcbnZhciBJTlBVVF9TVEFSVCA9IDE7XG52YXIgSU5QVVRfTU9WRSA9IDI7XG52YXIgSU5QVVRfRU5EID0gNDtcbnZhciBJTlBVVF9DQU5DRUwgPSA4O1xudmFyIERJUkVDVElPTl9OT05FID0gMTtcbnZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG52YXIgRElSRUNUSU9OX1JJR0hUID0gNDtcbnZhciBESVJFQ1RJT05fVVAgPSA4O1xudmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG52YXIgRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fTEVGVCB8IERJUkVDVElPTl9SSUdIVDtcbnZhciBESVJFQ1RJT05fVkVSVElDQUwgPSBESVJFQ1RJT05fVVAgfCBESVJFQ1RJT05fRE9XTjtcbnZhciBESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUw7XG52YXIgUFJPUFNfWFkgPSBbJ3gnLCAneSddO1xudmFyIFBST1BTX0NMSUVOVF9YWSA9IFsnY2xpZW50WCcsICdjbGllbnRZJ107XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdhbGsgb2JqZWN0cyBhbmQgYXJyYXlzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvclxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gIHZhciBpO1xuXG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9iai5mb3JFYWNoKSB7XG4gICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICB9IGVsc2UgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBvYmoubGVuZ3RoKSB7XG4gICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpIGluIG9iaikge1xuICAgICAgb2JqLmhhc093blByb3BlcnR5KGkpICYmIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBsZXQgYSBib29sZWFuIHZhbHVlIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IG11c3QgcmV0dXJuIGEgYm9vbGVhblxuICogdGhpcyBmaXJzdCBpdGVtIGluIGFyZ3Mgd2lsbCBiZSB1c2VkIGFzIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IHZhbFxuICogQHBhcmFtIHtBcnJheX0gW2FyZ3NdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBib29sT3JGbih2YWwsIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFRZUEVfRlVOQ1RJT04pIHtcbiAgICByZXR1cm4gdmFsLmFwcGx5KGFyZ3MgPyBhcmdzWzBdIHx8IHVuZGVmaW5lZCA6IHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzbWFsbCBpbmRleE9mIHdyYXBwZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gZm91bmRcbiAqL1xuZnVuY3Rpb24gaW5TdHIoc3RyLCBmaW5kKSB7XG4gIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3aGVuIHRoZSB0b3VjaEFjdGlvbnMgYXJlIGNvbGxlY3RlZCB0aGV5IGFyZSBub3QgYSB2YWxpZCB2YWx1ZSwgc28gd2UgbmVlZCB0byBjbGVhbiB0aGluZ3MgdXAuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuXG5mdW5jdGlvbiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zKSB7XG4gIC8vIG5vbmVcbiAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTk9ORTtcbiAgfVxuXG4gIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpOyAvLyBpZiBib3RoIHBhbi14IGFuZCBwYW4teSBhcmUgc2V0IChkaWZmZXJlbnQgcmVjb2duaXplcnNcbiAgLy8gZm9yIGRpZmZlcmVudCBkaXJlY3Rpb25zLCBlLmcuIGhvcml6b250YWwgcGFuIGJ1dCB2ZXJ0aWNhbCBzd2lwZT8pXG4gIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAvLyByZWNvZ25pemVycyB3aWxsIHdvcmssIHNpbmNlIHRoZSBicm93c2VyIHdvdWxkIGhhbmRsZSBhbGwgcGFubmluZ1xuXG4gIGlmIChoYXNQYW5YICYmIGhhc1BhblkpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gIH0gLy8gcGFuLXggT1IgcGFuLXlcblxuXG4gIGlmIChoYXNQYW5YIHx8IGhhc1BhblkpIHtcbiAgICByZXR1cm4gaGFzUGFuWCA/IFRPVUNIX0FDVElPTl9QQU5fWCA6IFRPVUNIX0FDVElPTl9QQU5fWTtcbiAgfSAvLyBtYW5pcHVsYXRpb25cblxuXG4gIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OO1xuICB9XG5cbiAgcmV0dXJuIFRPVUNIX0FDVElPTl9BVVRPO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUb3VjaCBBY3Rpb25cbiAqIHNldHMgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IG9yIHVzZXMgdGhlIGpzIGFsdGVybmF0aXZlXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIFRvdWNoQWN0aW9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG91Y2hBY3Rpb24obWFuYWdlciwgdmFsdWUpIHtcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuc2V0KHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZSBvbiB0aGUgZWxlbWVudCBvciBlbmFibGUgdGhlIHBvbHlmaWxsXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBUb3VjaEFjdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIGZpbmQgb3V0IHRoZSB0b3VjaC1hY3Rpb24gYnkgdGhlIGV2ZW50IGhhbmRsZXJzXG4gICAgaWYgKHZhbHVlID09PSBUT1VDSF9BQ1RJT05fQ09NUFVURSkge1xuICAgICAgdmFsdWUgPSB0aGlzLmNvbXB1dGUoKTtcbiAgICB9XG5cbiAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGVbUFJFRklYRURfVE9VQ0hfQUNUSU9OXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICoganVzdCByZS1zZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlXG4gICAqL1xuXG5cbiAgX3Byb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB0aGlzLnNldCh0aGlzLm1hbmFnZXIub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjb21wdXRlIHRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IGJhc2VkIG9uIHRoZSByZWNvZ25pemVyJ3Mgc2V0dGluZ3NcbiAgICogQHJldHVybnMge1N0cmluZ30gdmFsdWVcbiAgICovXG5cblxuICBfcHJvdG8uY29tcHV0ZSA9IGZ1bmN0aW9uIGNvbXB1dGUoKSB7XG4gICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICBlYWNoKHRoaXMubWFuYWdlci5yZWNvZ25pemVycywgZnVuY3Rpb24gKHJlY29nbml6ZXIpIHtcbiAgICAgIGlmIChib29sT3JGbihyZWNvZ25pemVyLm9wdGlvbnMuZW5hYmxlLCBbcmVjb2duaXplcl0pKSB7XG4gICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zLmpvaW4oJyAnKSk7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gZWFjaCBpbnB1dCBjeWNsZSBhbmQgcHJvdmlkZXMgdGhlIHByZXZlbnRpbmcgb2YgdGhlIGJyb3dzZXIgYmVoYXZpb3JcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLnByZXZlbnREZWZhdWx0cyA9IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0cyhpbnB1dCkge1xuICAgIHZhciBzcmNFdmVudCA9IGlucHV0LnNyY0V2ZW50O1xuICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5vZmZzZXREaXJlY3Rpb247IC8vIGlmIHRoZSB0b3VjaCBhY3Rpb24gZGlkIHByZXZlbnRlZCBvbmNlIHRoaXMgc2Vzc2lvblxuXG4gICAgaWYgKHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCkge1xuICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWV07XG4gICAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWF07XG5cbiAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgLy8gZG8gbm90IHByZXZlbnQgZGVmYXVsdHMgaWYgdGhpcyBpcyBhIHRhcCBnZXN0dXJlXG4gICAgICB2YXIgaXNUYXBQb2ludGVyID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSAxO1xuICAgICAgdmFyIGlzVGFwTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IDI7XG4gICAgICB2YXIgaXNUYXBUb3VjaFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPCAyNTA7XG5cbiAgICAgIGlmIChpc1RhcFBvaW50ZXIgJiYgaXNUYXBNb3ZlbWVudCAmJiBpc1RhcFRvdWNoVGltZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgICAgLy8gYHBhbi14IHBhbi15YCBtZWFucyBicm93c2VyIGhhbmRsZXMgYWxsIHNjcm9sbGluZy9wYW5uaW5nLCBkbyBub3QgcHJldmVudFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChoYXNOb25lIHx8IGhhc1BhblkgJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwgfHwgaGFzUGFuWCAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZlbnRTcmMoc3JjRXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbGwgcHJldmVudERlZmF1bHQgdG8gcHJldmVudCB0aGUgYnJvd3NlcidzIGRlZmF1bHQgYmVoYXZpb3IgKHNjcm9sbGluZyBpbiBtb3N0IGNhc2VzKVxuICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICovXG5cblxuICBfcHJvdG8ucHJldmVudFNyYyA9IGZ1bmN0aW9uIHByZXZlbnRTcmMoc3JjRXZlbnQpIHtcbiAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoQWN0aW9uO1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBmaW5kIGlmIGEgbm9kZSBpcyBpbiB0aGUgZ2l2ZW4gcGFyZW50XG4gKiBAbWV0aG9kIGhhc1BhcmVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBjZW50ZXIgb2YgYWxsIHRoZSBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gcG9pbnRlcnNcbiAqIEByZXR1cm4ge09iamVjdH0gY2VudGVyIGNvbnRhaW5zIGB4YCBhbmQgYHlgIHByb3BlcnRpZXNcbiAqL1xuXG5mdW5jdGlvbiBnZXRDZW50ZXIocG9pbnRlcnMpIHtcbiAgdmFyIHBvaW50ZXJzTGVuZ3RoID0gcG9pbnRlcnMubGVuZ3RoOyAvLyBubyBuZWVkIHRvIGxvb3Agd2hlbiBvbmx5IG9uZSB0b3VjaFxuXG4gIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRYKSxcbiAgICAgIHk6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFkpXG4gICAgfTtcbiAgfVxuXG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBwb2ludGVyc0xlbmd0aCkge1xuICAgIHggKz0gcG9pbnRlcnNbaV0uY2xpZW50WDtcbiAgICB5ICs9IHBvaW50ZXJzW2ldLmNsaWVudFk7XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4IC8gcG9pbnRlcnNMZW5ndGgpLFxuICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIGEgc2ltcGxlIGNsb25lIGZyb20gdGhlIGlucHV0IHVzZWQgZm9yIHN0b3JhZ2Ugb2YgZmlyc3RJbnB1dCBhbmQgZmlyc3RNdWx0aXBsZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBjbG9uZWRJbnB1dERhdGFcbiAqL1xuXG5mdW5jdGlvbiBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCkge1xuICAvLyBtYWtlIGEgc2ltcGxlIGNvcHkgb2YgdGhlIHBvaW50ZXJzIGJlY2F1c2Ugd2Ugd2lsbCBnZXQgYSByZWZlcmVuY2UgaWYgd2UgZG9uJ3RcbiAgLy8gd2Ugb25seSBuZWVkIGNsaWVudFhZIGZvciB0aGUgY2FsY3VsYXRpb25zXG4gIHZhciBwb2ludGVycyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBpbnB1dC5wb2ludGVycy5sZW5ndGgpIHtcbiAgICBwb2ludGVyc1tpXSA9IHtcbiAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgY2xpZW50WTogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WSlcbiAgICB9O1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGltZVN0YW1wOiBub3coKSxcbiAgICBwb2ludGVyczogcG9pbnRlcnMsXG4gICAgY2VudGVyOiBnZXRDZW50ZXIocG9pbnRlcnMpLFxuICAgIGRlbHRhWDogaW5wdXQuZGVsdGFYLFxuICAgIGRlbHRhWTogaW5wdXQuZGVsdGFZXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gcDEge3gsIHl9XG4gKiBAcGFyYW0ge09iamVjdH0gcDIge3gsIHl9XG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gKi9cblxuZnVuY3Rpb24gZ2V0RGlzdGFuY2UocDEsIHAyLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcHJvcHMgPSBQUk9QU19YWTtcbiAgfVxuXG4gIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dO1xuICB2YXIgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBhbmdsZSBiZXR3ZWVuIHR3byBjb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IHAxXG4gKiBAcGFyYW0ge09iamVjdH0gcDJcbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAqIEByZXR1cm4ge051bWJlcn0gYW5nbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRBbmdsZShwMSwgcDIsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICBwcm9wcyA9IFBST1BTX1hZO1xuICB9XG5cbiAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV07XG4gIHZhciB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KSAqIDE4MCAvIE1hdGguUEk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgZGlyZWN0aW9uIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpcmVjdGlvblxuICovXG5cbmZ1bmN0aW9uIGdldERpcmVjdGlvbih4LCB5KSB7XG4gIGlmICh4ID09PSB5KSB7XG4gICAgcmV0dXJuIERJUkVDVElPTl9OT05FO1xuICB9XG5cbiAgaWYgKGFicyh4KSA+PSBhYnMoeSkpIHtcbiAgICByZXR1cm4geCA8IDAgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgfVxuXG4gIHJldHVybiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyOyAvLyBsZXQgeyBvZmZzZXREZWx0YTpvZmZzZXQgPSB7fSwgcHJldkRlbHRhID0ge30sIHByZXZJbnB1dCA9IHt9IH0gPSBzZXNzaW9uO1xuICAvLyBqc2NzIHRocm93aW5nIGVycm9yIG9uIGRlZmFsdXQgZGVzdHJ1Y3R1cmVkIHZhbHVlcyBhbmQgd2l0aG91dCBkZWZhdWx0cyB0ZXN0cyBmYWlsXG5cbiAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gIHZhciBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSB8fCB7fTtcbiAgdmFyIHByZXZJbnB1dCA9IHNlc3Npb24ucHJldklucHV0IHx8IHt9O1xuXG4gIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhID0ge1xuICAgICAgeDogcHJldklucHV0LmRlbHRhWCB8fCAwLFxuICAgICAgeTogcHJldklucHV0LmRlbHRhWSB8fCAwXG4gICAgfTtcbiAgICBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhID0ge1xuICAgICAgeDogY2VudGVyLngsXG4gICAgICB5OiBjZW50ZXIueVxuICAgIH07XG4gIH1cblxuICBpbnB1dC5kZWx0YVggPSBwcmV2RGVsdGEueCArIChjZW50ZXIueCAtIG9mZnNldC54KTtcbiAgaW5wdXQuZGVsdGFZID0gcHJldkRlbHRhLnkgKyAoY2VudGVyLnkgLSBvZmZzZXQueSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgdmVsb2NpdHkgYmV0d2VlbiB0d28gcG9pbnRzLiB1bml0IGlzIGluIHB4IHBlciBtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIHgsIHkpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgeTogeSAvIGRlbHRhVGltZSB8fCAwXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgc2NhbGUgZmFjdG9yIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBubyBzY2FsZSBpcyAxLCBhbmQgZ29lcyBkb3duIHRvIDAgd2hlbiBwaW5jaGVkIHRvZ2V0aGVyLCBhbmQgYmlnZ2VyIHdoZW4gcGluY2hlZCBvdXRcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gc2NhbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRTY2FsZShzdGFydCwgZW5kKSB7XG4gIHJldHVybiBnZXREaXN0YW5jZShlbmRbMF0sIGVuZFsxXSwgUFJPUFNfQ0xJRU5UX1hZKSAvIGdldERpc3RhbmNlKHN0YXJ0WzBdLCBzdGFydFsxXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSByb3RhdGlvbiBkZWdyZWVzIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHJvdGF0aW9uXG4gKi9cblxuZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZ2V0QW5nbGUoZW5kWzFdLCBlbmRbMF0sIFBST1BTX0NMSUVOVF9YWSkgKyBnZXRBbmdsZShzdGFydFsxXSwgc3RhcnRbMF0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHZlbG9jaXR5IGlzIGNhbGN1bGF0ZWQgZXZlcnkgeCBtc1xuICogQHBhcmFtIHtPYmplY3R9IHNlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgbGFzdCA9IHNlc3Npb24ubGFzdEludGVydmFsIHx8IGlucHV0O1xuICB2YXIgZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gbGFzdC50aW1lU3RhbXA7XG4gIHZhciB2ZWxvY2l0eTtcbiAgdmFyIHZlbG9jaXR5WDtcbiAgdmFyIHZlbG9jaXR5WTtcbiAgdmFyIGRpcmVjdGlvbjtcblxuICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9PSBJTlBVVF9DQU5DRUwgJiYgKGRlbHRhVGltZSA+IENPTVBVVEVfSU5URVJWQUwgfHwgbGFzdC52ZWxvY2l0eSA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHZhciBkZWx0YVggPSBpbnB1dC5kZWx0YVggLSBsYXN0LmRlbHRhWDtcbiAgICB2YXIgZGVsdGFZID0gaW5wdXQuZGVsdGFZIC0gbGFzdC5kZWx0YVk7XG4gICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICB2ZWxvY2l0eVggPSB2Lng7XG4gICAgdmVsb2NpdHlZID0gdi55O1xuICAgIHZlbG9jaXR5ID0gYWJzKHYueCkgPiBhYnModi55KSA/IHYueCA6IHYueTtcbiAgICBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oZGVsdGFYLCBkZWx0YVkpO1xuICAgIHNlc3Npb24ubGFzdEludGVydmFsID0gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIGxhdGVzdCB2ZWxvY2l0eSBpbmZvIGlmIGl0IGRvZXNuJ3Qgb3ZlcnRha2UgYSBtaW5pbXVtIHBlcmlvZFxuICAgIHZlbG9jaXR5ID0gbGFzdC52ZWxvY2l0eTtcbiAgICB2ZWxvY2l0eVggPSBsYXN0LnZlbG9jaXR5WDtcbiAgICB2ZWxvY2l0eVkgPSBsYXN0LnZlbG9jaXR5WTtcbiAgICBkaXJlY3Rpb24gPSBsYXN0LmRpcmVjdGlvbjtcbiAgfVxuXG4gIGlucHV0LnZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gIGlucHV0LnZlbG9jaXR5WCA9IHZlbG9jaXR5WDtcbiAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG59XG5cbi8qKlxuKiBAcHJpdmF0ZVxuICogZXh0ZW5kIHRoZSBkYXRhIHdpdGggc29tZSB1c2FibGUgcHJvcGVydGllcyBsaWtlIHNjYWxlLCByb3RhdGUsIHZlbG9jaXR5IGV0Y1xuICogQHBhcmFtIHtPYmplY3R9IG1hbmFnZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnB1dERhdGEobWFuYWdlciwgaW5wdXQpIHtcbiAgdmFyIHNlc3Npb24gPSBtYW5hZ2VyLnNlc3Npb247XG4gIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIHN0b3JlIHRoZSBmaXJzdCBpbnB1dCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGFuZCBkaXJlY3Rpb25cblxuICBpZiAoIXNlc3Npb24uZmlyc3RJbnB1dCkge1xuICAgIHNlc3Npb24uZmlyc3RJbnB1dCA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgfSAvLyB0byBjb21wdXRlIHNjYWxlIGFuZCByb3RhdGlvbiB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBtdWx0aXBsZSB0b3VjaGVzXG5cblxuICBpZiAocG9pbnRlcnNMZW5ndGggPiAxICYmICFzZXNzaW9uLmZpcnN0TXVsdGlwbGUpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gIH0gZWxzZSBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBmaXJzdElucHV0ID0gc2Vzc2lvbi5maXJzdElucHV0LFxuICAgICAgZmlyc3RNdWx0aXBsZSA9IHNlc3Npb24uZmlyc3RNdWx0aXBsZTtcbiAgdmFyIG9mZnNldENlbnRlciA9IGZpcnN0TXVsdGlwbGUgPyBmaXJzdE11bHRpcGxlLmNlbnRlciA6IGZpcnN0SW5wdXQuY2VudGVyO1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyID0gZ2V0Q2VudGVyKHBvaW50ZXJzKTtcbiAgaW5wdXQudGltZVN0YW1wID0gbm93KCk7XG4gIGlucHV0LmRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGZpcnN0SW5wdXQudGltZVN0YW1wO1xuICBpbnB1dC5hbmdsZSA9IGdldEFuZ2xlKG9mZnNldENlbnRlciwgY2VudGVyKTtcbiAgaW5wdXQuZGlzdGFuY2UgPSBnZXREaXN0YW5jZShvZmZzZXRDZW50ZXIsIGNlbnRlcik7XG4gIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KTtcbiAgaW5wdXQub2Zmc2V0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgdmFyIG92ZXJhbGxWZWxvY2l0eSA9IGdldFZlbG9jaXR5KGlucHV0LmRlbHRhVGltZSwgaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYID0gb3ZlcmFsbFZlbG9jaXR5Lng7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVkgPSBvdmVyYWxsVmVsb2NpdHkueTtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5ID0gYWJzKG92ZXJhbGxWZWxvY2l0eS54KSA+IGFicyhvdmVyYWxsVmVsb2NpdHkueSkgPyBvdmVyYWxsVmVsb2NpdHkueCA6IG92ZXJhbGxWZWxvY2l0eS55O1xuICBpbnB1dC5zY2FsZSA9IGZpcnN0TXVsdGlwbGUgPyBnZXRTY2FsZShmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAxO1xuICBpbnB1dC5yb3RhdGlvbiA9IGZpcnN0TXVsdGlwbGUgPyBnZXRSb3RhdGlvbihmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAwO1xuICBpbnB1dC5tYXhQb2ludGVycyA9ICFzZXNzaW9uLnByZXZJbnB1dCA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA+IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnM7XG4gIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCk7IC8vIGZpbmQgdGhlIGNvcnJlY3QgdGFyZ2V0XG5cbiAgdmFyIHRhcmdldCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgdmFyIHNyY0V2ZW50ID0gaW5wdXQuc3JjRXZlbnQ7XG4gIHZhciBzcmNFdmVudFRhcmdldDtcblxuICBpZiAoc3JjRXZlbnQuY29tcG9zZWRQYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5jb21wb3NlZFBhdGgoKVswXTtcbiAgfSBlbHNlIGlmIChzcmNFdmVudC5wYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5wYXRoWzBdO1xuICB9IGVsc2Uge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQudGFyZ2V0O1xuICB9XG5cbiAgaWYgKGhhc1BhcmVudChzcmNFdmVudFRhcmdldCwgdGFyZ2V0KSkge1xuICAgIHRhcmdldCA9IHNyY0V2ZW50VGFyZ2V0O1xuICB9XG5cbiAgaW5wdXQudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBoYW5kbGUgaW5wdXQgZXZlbnRzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGlucHV0SGFuZGxlcihtYW5hZ2VyLCBldmVudFR5cGUsIGlucHV0KSB7XG4gIHZhciBwb2ludGVyc0xlbiA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aDtcbiAgdmFyIGNoYW5nZWRQb2ludGVyc0xlbiA9IGlucHV0LmNoYW5nZWRQb2ludGVycy5sZW5ndGg7XG4gIHZhciBpc0ZpcnN0ID0gZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIHZhciBpc0ZpbmFsID0gZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIGlucHV0LmlzRmlyc3QgPSAhIWlzRmlyc3Q7XG4gIGlucHV0LmlzRmluYWwgPSAhIWlzRmluYWw7XG5cbiAgaWYgKGlzRmlyc3QpIHtcbiAgICBtYW5hZ2VyLnNlc3Npb24gPSB7fTtcbiAgfSAvLyBzb3VyY2UgZXZlbnQgaXMgdGhlIG5vcm1hbGl6ZWQgdmFsdWUgb2YgdGhlIGRvbUV2ZW50c1xuICAvLyBsaWtlICd0b3VjaHN0YXJ0LCBtb3VzZXVwLCBwb2ludGVyZG93bidcblxuXG4gIGlucHV0LmV2ZW50VHlwZSA9IGV2ZW50VHlwZTsgLy8gY29tcHV0ZSBzY2FsZSwgcm90YXRpb24gZXRjXG5cbiAgY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCk7IC8vIGVtaXQgc2VjcmV0IGV2ZW50XG5cbiAgbWFuYWdlci5lbWl0KCdoYW1tZXIuaW5wdXQnLCBpbnB1dCk7XG4gIG1hbmFnZXIucmVjb2duaXplKGlucHV0KTtcbiAgbWFuYWdlci5zZXNzaW9uLnByZXZJbnB1dCA9IGlucHV0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzcGxpdCBzdHJpbmcgb24gd2hpdGVzcGFjZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge0FycmF5fSB3b3Jkc1xuICovXG5mdW5jdGlvbiBzcGxpdFN0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltKCkuc3BsaXQoL1xccysvZyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZEV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgd2luZG93IG9iamVjdCBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RG9jdW1lbnRWaWV3fFdpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93Rm9yRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZWxlbWVudDtcbiAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93IHx8IHdpbmRvdztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIElucHV0KG1hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgICB0aGlzLnRhcmdldCA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dFRhcmdldDsgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuXG4gICAgdGhpcy5kb21IYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICBpZiAoYm9vbE9yRm4obWFuYWdlci5vcHRpb25zLmVuYWJsZSwgW21hbmFnZXJdKSkge1xuICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2hvdWxkIGhhbmRsZSB0aGUgaW5wdXRFdmVudCBkYXRhIGFuZCB0cmlnZ2VyIHRoZSBjYWxsYmFja1xuICAgKiBAdmlydHVhbFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBiaW5kIHRoZSBldmVudHNcbiAgICovXG5cblxuICBfcHJvdG8uaW5pdCA9IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdGhpcy5ldkVsICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZUYXJnZXQgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldldpbiAmJiBhZGRFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgKi9cblxuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldlRhcmdldCAmJiByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2V2luICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4gSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGZpbmQgaWYgYSBhcnJheSBjb250YWlucyB0aGUgb2JqZWN0IHVzaW5nIGluZGV4T2Ygb3IgYSBzaW1wbGUgcG9seUZpbGxcbiAqIEBwYXJhbSB7QXJyYXl9IHNyY1xuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmluZEJ5S2V5XVxuICogQHJldHVybiB7Qm9vbGVhbnxOdW1iZXJ9IGZhbHNlIHdoZW4gbm90IGZvdW5kLCBvciB0aGUgaW5kZXhcbiAqL1xuZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICBpZiAoc3JjLmluZGV4T2YgJiYgIWZpbmRCeUtleSkge1xuICAgIHJldHVybiBzcmMuaW5kZXhPZihmaW5kKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICAgIGlmIChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCB8fCAhZmluZEJ5S2V5ICYmIHNyY1tpXSA9PT0gZmluZCkge1xuICAgICAgICAvLyBkbyBub3QgdXNlID09PSBoZXJlLCB0ZXN0IGZhaWxzXG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG5cbnZhciBQT0lOVEVSX0lOUFVUX01BUCA9IHtcbiAgcG9pbnRlcmRvd246IElOUFVUX1NUQVJULFxuICBwb2ludGVybW92ZTogSU5QVVRfTU9WRSxcbiAgcG9pbnRlcnVwOiBJTlBVVF9FTkQsXG4gIHBvaW50ZXJjYW5jZWw6IElOUFVUX0NBTkNFTCxcbiAgcG9pbnRlcm91dDogSU5QVVRfQ0FOQ0VMXG59OyAvLyBpbiBJRTEwIHRoZSBwb2ludGVyIHR5cGVzIGlzIGRlZmluZWQgYXMgYW4gZW51bVxuXG52YXIgSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSA9IHtcbiAgMjogSU5QVVRfVFlQRV9UT1VDSCxcbiAgMzogSU5QVVRfVFlQRV9QRU4sXG4gIDQ6IElOUFVUX1RZUEVfTU9VU0UsXG4gIDU6IElOUFVUX1RZUEVfS0lORUNUIC8vIHNlZSBodHRwczovL3R3aXR0ZXIuY29tL2phY29icm9zc2kvc3RhdHVzLzQ4MDU5NjQzODQ4OTg5MDgxNlxuXG59O1xudmFyIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAncG9pbnRlcmRvd24nO1xudmFyIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdwb2ludGVybW92ZSBwb2ludGVydXAgcG9pbnRlcmNhbmNlbCc7IC8vIElFMTAgaGFzIHByZWZpeGVkIHN1cHBvcnQsIGFuZCBjYXNlLXNlbnNpdGl2ZVxuXG5pZiAod2luLk1TUG9pbnRlckV2ZW50ICYmICF3aW4uUG9pbnRlckV2ZW50KSB7XG4gIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAnTVNQb2ludGVyRG93bic7XG4gIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCc7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBQb2ludGVyIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cblxudmFyIFBvaW50ZXJFdmVudElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUG9pbnRlckV2ZW50SW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2RWwgPSBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5zdG9yZSA9IF90aGlzLm1hbmFnZXIuc2Vzc2lvbi5wb2ludGVyRXZlbnRzID0gW107XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBQb2ludGVyRXZlbnRJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICB2YXIgcmVtb3ZlUG9pbnRlciA9IGZhbHNlO1xuICAgIHZhciBldmVudFR5cGVOb3JtYWxpemVkID0gZXYudHlwZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ21zJywgJycpO1xuICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICB2YXIgcG9pbnRlclR5cGUgPSBJRTEwX1BPSU5URVJfVFlQRV9FTlVNW2V2LnBvaW50ZXJUeXBlXSB8fCBldi5wb2ludGVyVHlwZTtcbiAgICB2YXIgaXNUb3VjaCA9IHBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIOyAvLyBnZXQgaW5kZXggb2YgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG4gICAgdmFyIHN0b3JlSW5kZXggPSBpbkFycmF5KHN0b3JlLCBldi5wb2ludGVySWQsICdwb2ludGVySWQnKTsgLy8gc3RhcnQgYW5kIG1vdXNlIG11c3QgYmUgZG93blxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIChldi5idXR0b24gPT09IDAgfHwgaXNUb3VjaCkpIHtcbiAgICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgICBzdG9yZS5wdXNoKGV2KTtcbiAgICAgICAgc3RvcmVJbmRleCA9IHN0b3JlLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgcmVtb3ZlUG9pbnRlciA9IHRydWU7XG4gICAgfSAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcblxuXG4gICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG5cbiAgICBzdG9yZVtzdG9yZUluZGV4XSA9IGV2O1xuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiBwb2ludGVyVHlwZSxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuXG4gICAgaWYgKHJlbW92ZVBvaW50ZXIpIHtcbiAgICAgIC8vIHJlbW92ZSBmcm9tIHRoZSBzdG9yZVxuICAgICAgc3RvcmUuc3BsaWNlKHN0b3JlSW5kZXgsIDEpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUG9pbnRlckV2ZW50SW5wdXQ7XG59KElucHV0KTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY29udmVydCBhcnJheS1saWtlIG9iamVjdHMgdG8gcmVhbCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaiwgMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHVuaXF1ZSBhcnJheSB3aXRoIG9iamVjdHMgYmFzZWQgb24gYSBrZXkgKGxpa2UgJ2lkJykgb3IganVzdCBieSB0aGUgYXJyYXkncyB2YWx1ZVxuICogQHBhcmFtIHtBcnJheX0gc3JjIFt7aWQ6MX0se2lkOjJ9LHtpZDoxfV1cbiAqIEBwYXJhbSB7U3RyaW5nfSBba2V5XVxuICogQHBhcmFtIHtCb29sZWFufSBbc29ydD1GYWxzZV1cbiAqIEByZXR1cm5zIHtBcnJheX0gW3tpZDoxfSx7aWQ6Mn1dXG4gKi9cblxuZnVuY3Rpb24gdW5pcXVlQXJyYXkoc3JjLCBrZXksIHNvcnQpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgdmFyIHZhbCA9IGtleSA/IHNyY1tpXVtrZXldIDogc3JjW2ldO1xuXG4gICAgaWYgKGluQXJyYXkodmFsdWVzLCB2YWwpIDwgMCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHNyY1tpXSk7XG4gICAgfVxuXG4gICAgdmFsdWVzW2ldID0gdmFsO1xuICAgIGkrKztcbiAgfVxuXG4gIGlmIChzb3J0KSB7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYVtrZXldID4gYltrZXldO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbnZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICB0b3VjaG1vdmU6IElOUFVUX01PVkUsXG4gIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG52YXIgVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNdWx0aS11c2VyIHRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIFRvdWNoSW5wdXQucHJvdG90eXBlLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMudGFyZ2V0SWRzID0ge307IC8vIHRoaXMuZXZUYXJnZXQgPSBUT1VDSF9UQVJHRVRfRVZFTlRTO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRvdWNoSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciB0eXBlID0gVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdO1xuICAgIHZhciB0b3VjaGVzID0gZ2V0VG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTtcblxuICAgIGlmICghdG91Y2hlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoSW5wdXQ7XG59KElucHV0KTtcblxuZnVuY3Rpb24gZ2V0VG91Y2hlcyhldiwgdHlwZSkge1xuICB2YXIgYWxsVG91Y2hlcyA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciB0YXJnZXRJZHMgPSB0aGlzLnRhcmdldElkczsgLy8gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSB0b3VjaCwgdGhlIHByb2Nlc3MgY2FuIGJlIHNpbXBsaWZpZWRcblxuICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgdGFyZ2V0SWRzW2FsbFRvdWNoZXNbMF0uaWRlbnRpZmllcl0gPSB0cnVlO1xuICAgIHJldHVybiBbYWxsVG91Y2hlcywgYWxsVG91Y2hlc107XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIHRhcmdldFRvdWNoZXM7XG4gIHZhciBjaGFuZ2VkVG91Y2hlcyA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpO1xuICB2YXIgY2hhbmdlZFRhcmdldFRvdWNoZXMgPSBbXTtcbiAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0OyAvLyBnZXQgdGFyZ2V0IHRvdWNoZXMgZnJvbSB0b3VjaGVzXG5cbiAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uICh0b3VjaCkge1xuICAgIHJldHVybiBoYXNQYXJlbnQodG91Y2gudGFyZ2V0LCB0YXJnZXQpO1xuICB9KTsgLy8gY29sbGVjdCB0b3VjaGVzXG5cbiAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICBpKys7XG4gICAgfVxuICB9IC8vIGZpbHRlciBjaGFuZ2VkIHRvdWNoZXMgdG8gb25seSBjb250YWluIHRvdWNoZXMgdGhhdCBleGlzdCBpbiB0aGUgY29sbGVjdGVkIHRhcmdldCBpZHNcblxuXG4gIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgY2hhbmdlZFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMucHVzaChjaGFuZ2VkVG91Y2hlc1tpXSk7XG4gICAgfSAvLyBjbGVhbnVwIHJlbW92ZWQgdG91Y2hlc1xuXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIGlmICghY2hhbmdlZFRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIFsvLyBtZXJnZSB0YXJnZXRUb3VjaGVzIHdpdGggY2hhbmdlZFRhcmdldFRvdWNoZXMgc28gaXQgY29udGFpbnMgQUxMIHRvdWNoZXMsIGluY2x1ZGluZyAnZW5kJyBhbmQgJ2NhbmNlbCdcbiAgdW5pcXVlQXJyYXkodGFyZ2V0VG91Y2hlcy5jb25jYXQoY2hhbmdlZFRhcmdldFRvdWNoZXMpLCAnaWRlbnRpZmllcicsIHRydWUpLCBjaGFuZ2VkVGFyZ2V0VG91Y2hlc107XG59XG5cbnZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gIG1vdXNlZG93bjogSU5QVVRfU1RBUlQsXG4gIG1vdXNlbW92ZTogSU5QVVRfTU9WRSxcbiAgbW91c2V1cDogSU5QVVRfRU5EXG59O1xudmFyIE1PVVNFX0VMRU1FTlRfRVZFTlRTID0gJ21vdXNlZG93bic7XG52YXIgTU9VU0VfV0lORE9XX0VWRU5UUyA9ICdtb3VzZW1vdmUgbW91c2V1cCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNb3VzZSBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgTW91c2VJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKE1vdXNlSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gTW91c2VJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldkVsID0gTU9VU0VfRUxFTUVOVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBNT1VTRV9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5wcmVzc2VkID0gZmFsc2U7IC8vIG1vdXNlZG93biBzdGF0ZVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgZXZlbnRUeXBlID0gTU9VU0VfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBvbiBzdGFydCB3ZSB3YW50IHRvIGhhdmUgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGRvd25cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBldi5idXR0b24gPT09IDApIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX01PVkUgJiYgZXYud2hpY2ggIT09IDEpIHtcbiAgICAgIGV2ZW50VHlwZSA9IElOUFVUX0VORDtcbiAgICB9IC8vIG1vdXNlIG11c3QgYmUgZG93blxuXG5cbiAgICBpZiAoIXRoaXMucHJlc3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBbZXZdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTW91c2VJbnB1dDtcbn0oSW5wdXQpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDb21iaW5lZCB0b3VjaCBhbmQgbW91c2UgaW5wdXRcbiAqXG4gKiBUb3VjaCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhlbiBtb3VzZSwgYW5kIHdoaWxlIHRvdWNoaW5nIG5vIG1vdXNlIGV2ZW50cyBhcmUgYWxsb3dlZC5cbiAqIFRoaXMgYmVjYXVzZSB0b3VjaCBkZXZpY2VzIGFsc28gZW1pdCBtb3VzZSBldmVudHMgd2hpbGUgZG9pbmcgYSB0b3VjaC5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIERFRFVQX1RJTUVPVVQgPSAyNTAwO1xudmFyIERFRFVQX0RJU1RBTkNFID0gMjU7XG5cbmZ1bmN0aW9uIHNldExhc3RUb3VjaChldmVudERhdGEpIHtcbiAgdmFyIF9ldmVudERhdGEkY2hhbmdlZFBvaSA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnMsXG4gICAgICB0b3VjaCA9IF9ldmVudERhdGEkY2hhbmdlZFBvaVswXTtcblxuICBpZiAodG91Y2guaWRlbnRpZmllciA9PT0gdGhpcy5wcmltYXJ5VG91Y2gpIHtcbiAgICB2YXIgbGFzdFRvdWNoID0ge1xuICAgICAgeDogdG91Y2guY2xpZW50WCxcbiAgICAgIHk6IHRvdWNoLmNsaWVudFlcbiAgICB9O1xuICAgIHZhciBsdHMgPSB0aGlzLmxhc3RUb3VjaGVzO1xuICAgIHRoaXMubGFzdFRvdWNoZXMucHVzaChsYXN0VG91Y2gpO1xuXG4gICAgdmFyIHJlbW92ZUxhc3RUb3VjaCA9IGZ1bmN0aW9uIHJlbW92ZUxhc3RUb3VjaCgpIHtcbiAgICAgIHZhciBpID0gbHRzLmluZGV4T2YobGFzdFRvdWNoKTtcblxuICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkVG91Y2hlcyhldmVudFR5cGUsIGV2ZW50RGF0YSkge1xuICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICB0aGlzLnByaW1hcnlUb3VjaCA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnNbMF0uaWRlbnRpZmllcjtcbiAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KGV2ZW50RGF0YSkge1xuICB2YXIgeCA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRYO1xuICB2YXIgeSA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRZO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sYXN0VG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0ID0gdGhpcy5sYXN0VG91Y2hlc1tpXTtcbiAgICB2YXIgZHggPSBNYXRoLmFicyh4IC0gdC54KTtcbiAgICB2YXIgZHkgPSBNYXRoLmFicyh5IC0gdC55KTtcblxuICAgIGlmIChkeCA8PSBERURVUF9ESVNUQU5DRSAmJiBkeSA8PSBERURVUF9ESVNUQU5DRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgVG91Y2hNb3VzZUlucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIFRvdWNoTW91c2VJbnB1dCA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9JbnB1dCkge1xuICAgIF9pbmhlcml0c0xvb3NlKFRvdWNoTW91c2VJbnB1dCwgX0lucHV0KTtcblxuICAgIGZ1bmN0aW9uIFRvdWNoTW91c2VJbnB1dChfbWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfSW5wdXQuY2FsbCh0aGlzLCBfbWFuYWdlciwgY2FsbGJhY2spIHx8IHRoaXM7XG5cbiAgICAgIF90aGlzLmhhbmRsZXIgPSBmdW5jdGlvbiAobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKSB7XG4gICAgICAgIHZhciBpc1RvdWNoID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIO1xuICAgICAgICB2YXIgaXNNb3VzZSA9IGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9NT1VTRTtcblxuICAgICAgICBpZiAoaXNNb3VzZSAmJiBpbnB1dERhdGEuc291cmNlQ2FwYWJpbGl0aWVzICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyB3aGVuIHdlJ3JlIGluIGEgdG91Y2ggZXZlbnQsIHJlY29yZCB0b3VjaGVzIHRvICBkZS1kdXBlIHN5bnRoZXRpYyBtb3VzZSBldmVudFxuXG5cbiAgICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgICByZWNvcmRUb3VjaGVzLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RGF0YSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5jYWxsYmFjayhtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMudG91Y2ggPSBuZXcgVG91Y2hJbnB1dChfdGhpcy5tYW5hZ2VyLCBfdGhpcy5oYW5kbGVyKTtcbiAgICAgIF90aGlzLm1vdXNlID0gbmV3IE1vdXNlSW5wdXQoX3RoaXMubWFuYWdlciwgX3RoaXMuaGFuZGxlcik7XG4gICAgICBfdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgICAgX3RoaXMubGFzdFRvdWNoZXMgPSBbXTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBoYW5kbGUgbW91c2UgYW5kIHRvdWNoIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGlucHV0RXZlbnRcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG5cblxuICAgIHZhciBfcHJvdG8gPSBUb3VjaE1vdXNlSW5wdXQucHJvdG90eXBlO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyc1xuICAgICAqL1xuICAgIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHRoaXMudG91Y2guZGVzdHJveSgpO1xuICAgICAgdGhpcy5tb3VzZS5kZXN0cm95KCk7XG4gICAgfTtcblxuICAgIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG4gIH0oSW5wdXQpO1xuXG4gIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBjYWxsZWQgYnkgdGhlIE1hbmFnZXIgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gIHZhciBUeXBlOyAvLyBsZXQgaW5wdXRDbGFzcyA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dENsYXNzO1xuXG4gIHZhciBpbnB1dENsYXNzID0gbWFuYWdlci5vcHRpb25zLmlucHV0Q2xhc3M7XG5cbiAgaWYgKGlucHV0Q2xhc3MpIHtcbiAgICBUeXBlID0gaW5wdXRDbGFzcztcbiAgfSBlbHNlIGlmIChTVVBQT1JUX1BPSU5URVJfRVZFTlRTKSB7XG4gICAgVHlwZSA9IFBvaW50ZXJFdmVudElucHV0O1xuICB9IGVsc2UgaWYgKFNVUFBPUlRfT05MWV9UT1VDSCkge1xuICAgIFR5cGUgPSBUb3VjaElucHV0O1xuICB9IGVsc2UgaWYgKCFTVVBQT1JUX1RPVUNIKSB7XG4gICAgVHlwZSA9IE1vdXNlSW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgVHlwZSA9IFRvdWNoTW91c2VJbnB1dDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZShtYW5hZ2VyLCBpbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZm4gb24gZWFjaCBlbnRyeVxuICogaWYgaXQgYWludCBhbiBhcnJheSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGhpbmcuXG4gKiB0aGlzIGlzIHVzZWQgYnkgYWxsIHRoZSBtZXRob2RzIHRoYXQgYWNjZXB0IGEgc2luZ2xlIGFuZCBhcnJheSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7KnxBcnJheX0gYXJnXG4gKiBAcGFyYW0ge1N0cmluZ30gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF1cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGludm9rZUFycmF5QXJnKGFyZywgZm4sIGNvbnRleHQpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIGVhY2goYXJnLCBjb250ZXh0W2ZuXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBTVEFURV9QT1NTSUJMRSA9IDE7XG52YXIgU1RBVEVfQkVHQU4gPSAyO1xudmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xudmFyIFNUQVRFX0VOREVEID0gODtcbnZhciBTVEFURV9SRUNPR05JWkVEID0gU1RBVEVfRU5ERUQ7XG52YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG52YXIgU1RBVEVfRkFJTEVEID0gMzI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHVuaXF1ZSBpZFxuICogQHJldHVybnMge251bWJlcn0gdW5pcXVlSWRcbiAqL1xudmFyIF91bmlxdWVJZCA9IDE7XG5mdW5jdGlvbiB1bmlxdWVJZCgpIHtcbiAgcmV0dXJuIF91bmlxdWVJZCsrO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSByZWNvZ25pemVyIGJ5IG5hbWUgaWYgaXQgaXMgYm91bmQgdG8gYSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSBvdGhlclJlY29nbml6ZXJcbiAqIEBwYXJhbSB7UmVjb2duaXplcn0gcmVjb2duaXplclxuICogQHJldHVybnMge1JlY29nbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCByZWNvZ25pemVyKSB7XG4gIHZhciBtYW5hZ2VyID0gcmVjb2duaXplci5tYW5hZ2VyO1xuXG4gIGlmIChtYW5hZ2VyKSB7XG4gICAgcmV0dXJuIG1hbmFnZXIuZ2V0KG90aGVyUmVjb2duaXplcik7XG4gIH1cblxuICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSB1c2FibGUgc3RyaW5nLCB1c2VkIGFzIGV2ZW50IHBvc3RmaXhcbiAqIEBwYXJhbSB7Y29uc3RhbnR9IHN0YXRlXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdGF0ZVxuICovXG5cbmZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gIGlmIChzdGF0ZSAmIFNUQVRFX0NBTkNFTExFRCkge1xuICAgIHJldHVybiAnY2FuY2VsJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0VOREVEKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfQ0hBTkdFRCkge1xuICAgIHJldHVybiAnbW92ZSc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9CRUdBTikge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSZWNvZ25pemVyIGZsb3cgZXhwbGFpbmVkOyAqXG4gKiBBbGwgcmVjb2duaXplcnMgaGF2ZSB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBQT1NTSUJMRSB3aGVuIGEgaW5wdXQgc2Vzc2lvbiBzdGFydHMuXG4gKiBUaGUgZGVmaW5pdGlvbiBvZiBhIGlucHV0IHNlc3Npb24gaXMgZnJvbSB0aGUgZmlyc3QgaW5wdXQgdW50aWwgdGhlIGxhc3QgaW5wdXQsIHdpdGggYWxsIGl0J3MgbW92ZW1lbnQgaW4gaXQuICpcbiAqIEV4YW1wbGUgc2Vzc2lvbiBmb3IgbW91c2UtaW5wdXQ6IG1vdXNlZG93biAtPiBtb3VzZW1vdmUgLT4gbW91c2V1cFxuICpcbiAqIE9uIGVhY2ggcmVjb2duaXppbmcgY3ljbGUgKHNlZSBNYW5hZ2VyLnJlY29nbml6ZSkgdGhlIC5yZWNvZ25pemUoKSBtZXRob2QgaXMgZXhlY3V0ZWRcbiAqIHdoaWNoIGRldGVybWluZXMgd2l0aCBzdGF0ZSBpdCBzaG91bGQgYmUuXG4gKlxuICogSWYgdGhlIHJlY29nbml6ZXIgaGFzIHRoZSBzdGF0ZSBGQUlMRUQsIENBTkNFTExFRCBvciBSRUNPR05JWkVEIChlcXVhbHMgRU5ERUQpLCBpdCBpcyByZXNldCB0b1xuICogUE9TU0lCTEUgdG8gZ2l2ZSBpdCBhbm90aGVyIGNoYW5nZSBvbiB0aGUgbmV4dCBjeWNsZS5cbiAqXG4gKiAgICAgICAgICAgICAgIFBvc3NpYmxlXG4gKiAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgKy0tLS0tKy0tLS0tLS0tLS0tLS0tLStcbiAqICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgKy0tLS0tKy0tLS0tKyAgICAgICAgICAgICAgIHxcbiAqICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgIHxcbiAqICAgRmFpbGVkICAgICAgQ2FuY2VsbGVkICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSstLS0tLS0rXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgUmVjb2duaXplZCAgICAgICBCZWdhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kZWQvUmVjb2duaXplZFxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJlY29nbml6ZXJcbiAqIEV2ZXJ5IHJlY29nbml6ZXIgbmVlZHMgdG8gZXh0ZW5kIGZyb20gdGhpcyBjbGFzcy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuXG52YXIgUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7XG4gICAgICBlbmFibGU6IHRydWVcbiAgICB9LCBvcHRpb25zKTtcbiAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsOyAvLyBkZWZhdWx0IGlzIGVuYWJsZSB0cnVlXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG4gICAgdGhpcy5zaW11bHRhbmVvdXMgPSB7fTtcbiAgICB0aGlzLnJlcXVpcmVGYWlsID0gW107XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge1JlY29nbml6ZXJ9XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQob3B0aW9ucykge1xuICAgIGFzc2lnbiQxKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7IC8vIGFsc28gdXBkYXRlIHRoZSB0b3VjaEFjdGlvbiwgaW4gY2FzZSBzb21ldGhpbmcgY2hhbmdlZCBhYm91dCB0aGUgZGlyZWN0aW9ucy9lbmFibGVkIHN0YXRlXG5cbiAgICB0aGlzLm1hbmFnZXIgJiYgdGhpcy5tYW5hZ2VyLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiByZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzaW11bHRhbmVvdXMgPSB0aGlzLnNpbXVsdGFuZW91cztcbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG5cbiAgICBpZiAoIXNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdKSB7XG4gICAgICBzaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXSA9IG90aGVyUmVjb2duaXplcjtcbiAgICAgIG90aGVyUmVjb2duaXplci5yZWNvZ25pemVXaXRoKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgc2ltdWx0YW5lb3VzIGxpbmsuIGl0IGRvZXNudCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRyb3BSZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gZHJvcFJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICBkZWxldGUgdGhpcy5zaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlY29nbml6ZXIgY2FuIG9ubHkgcnVuIHdoZW4gYW4gb3RoZXIgaXMgZmFpbGluZ1xuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5yZXF1aXJlRmFpbHVyZSA9IGZ1bmN0aW9uIHJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcblxuICAgIGlmIChpbkFycmF5KHJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpID09PSAtMSkge1xuICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgb3RoZXJSZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgcmVxdWlyZUZhaWx1cmUgbGluay4gaXQgZG9lcyBub3QgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5kcm9wUmVxdWlyZUZhaWx1cmUgPSBmdW5jdGlvbiBkcm9wUmVxdWlyZUZhaWx1cmUob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgdmFyIGluZGV4ID0gaW5BcnJheSh0aGlzLnJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhcyByZXF1aXJlIGZhaWx1cmVzIGJvb2xlYW5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmhhc1JlcXVpcmVGYWlsdXJlcyA9IGZ1bmN0aW9uIGhhc1JlcXVpcmVGYWlsdXJlcygpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGggPiAwO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaWYgdGhlIHJlY29nbml6ZXIgY2FuIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5SZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gY2FuUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gISF0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogWW91IHNob3VsZCB1c2UgYHRyeUVtaXRgIGluc3RlYWQgb2YgYGVtaXRgIGRpcmVjdGx5IHRvIGNoZWNrXG4gICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgc2VsZi5tYW5hZ2VyLmVtaXQoZXZlbnQsIGlucHV0KTtcbiAgICB9IC8vICdwYW5zdGFydCcgYW5kICdwYW5tb3ZlJ1xuXG5cbiAgICBpZiAoc3RhdGUgPCBTVEFURV9FTkRFRCkge1xuICAgICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQgKyBzdGF0ZVN0cihzdGF0ZSkpO1xuICAgIH1cblxuICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgaWYgKGlucHV0LmFkZGl0aW9uYWxFdmVudCkge1xuICAgICAgLy8gYWRkaXRpb25hbCBldmVudChwYW5sZWZ0LCBwYW5yaWdodCwgcGluY2hpbiwgcGluY2hvdXQuLi4pXG4gICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgfSAvLyBwYW5lbmQgYW5kIHBhbmNhbmNlbFxuXG5cbiAgICBpZiAoc3RhdGUgPj0gU1RBVEVfRU5ERUQpIHtcbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgcmVxdWlyZSBmYWlsdXJlIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQsXG4gICAqIGlmIHRydWUsIGl0IGVtaXRzIGEgZ2VzdHVyZSBldmVudCxcbiAgICogb3RoZXJ3aXNlLCBzZXR1cCB0aGUgc3RhdGUgdG8gRkFJTEVELlxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8udHJ5RW1pdCA9IGZ1bmN0aW9uIHRyeUVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5jYW5FbWl0KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgIH0gLy8gaXQncyBmYWlsaW5nIGFueXdheVxuXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FuIHdlIGVtaXQ/XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5FbWl0ID0gZnVuY3Rpb24gY2FuRW1pdCgpIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoKSB7XG4gICAgICBpZiAoISh0aGlzLnJlcXVpcmVGYWlsW2ldLnN0YXRlICYgKFNUQVRFX0ZBSUxFRCB8IFNUQVRFX1BPU1NJQkxFKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemUgPSBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgLy8gbWFrZSBhIG5ldyBjb3B5IG9mIHRoZSBpbnB1dERhdGFcbiAgICAvLyBzbyB3ZSBjYW4gY2hhbmdlIHRoZSBpbnB1dERhdGEgd2l0aG91dCBtZXNzaW5nIHVwIHRoZSBvdGhlciByZWNvZ25pemVyc1xuICAgIHZhciBpbnB1dERhdGFDbG9uZSA9IGFzc2lnbiQxKHt9LCBpbnB1dERhdGEpOyAvLyBpcyBpcyBlbmFibGVkIGFuZCBhbGxvdyByZWNvZ25pemluZz9cblxuICAgIGlmICghYm9vbE9yRm4odGhpcy5vcHRpb25zLmVuYWJsZSwgW3RoaXMsIGlucHV0RGF0YUNsb25lXSkpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyByZXNldCB3aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZFxuXG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9SRUNPR05JWkVEIHwgU1RBVEVfQ0FOQ0VMTEVEIHwgU1RBVEVfRkFJTEVEKSkge1xuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnByb2Nlc3MoaW5wdXREYXRhQ2xvbmUpOyAvLyB0aGUgcmVjb2duaXplciBoYXMgcmVjb2duaXplZCBhIGdlc3R1cmVcbiAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCB8IFNUQVRFX0NBTkNFTExFRCkpIHtcbiAgICAgIHRoaXMudHJ5RW1pdChpbnB1dERhdGFDbG9uZSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgcmVjb2duaXplclxuICAgKiB0aGUgYWN0dWFsIHJlY29nbml6aW5nIGhhcHBlbnMgaW4gdGhpcyBtZXRob2RcbiAgICogQHZpcnR1YWxcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKiBAcmV0dXJucyB7Y29uc3RhbnR9IFNUQVRFXG4gICAqL1xuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cblxuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dERhdGEpIHt9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZXR1cm4gdGhlIHByZWZlcnJlZCB0b3VjaC1hY3Rpb25cbiAgICogQHZpcnR1YWxcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cblxuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYWxsZWQgd2hlbiB0aGUgZ2VzdHVyZSBpc24ndCBhbGxvd2VkIHRvIHJlY29nbml6ZVxuICAgKiBsaWtlIHdoZW4gYW5vdGhlciBpcyBiZWluZyByZWNvZ25pemVkIG9yIGl0IGlzIGRpc2FibGVkXG4gICAqIEB2aXJ0dWFsXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7fTtcblxuICByZXR1cm4gUmVjb2duaXplcjtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQSB0YXAgaXMgcmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvaW5nIGEgc21hbGwgdGFwL2NsaWNrLiBNdWx0aXBsZSB0YXBzIGFyZSByZWNvZ25pemVkIGlmIHRoZXkgb2NjdXJcbiAqIGJldHdlZW4gdGhlIGdpdmVuIGludGVydmFsIGFuZCBwb3NpdGlvbi4gVGhlIGRlbGF5IG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvZ25pemUgbXVsdGktdGFwcyB3aXRob3V0IGZpcmluZ1xuICogYSBzaW5nbGUgdGFwLlxuICpcbiAqIFRoZSBldmVudERhdGEgZnJvbSB0aGUgZW1pdHRlZCBldmVudCBjb250YWlucyB0aGUgcHJvcGVydHkgYHRhcENvdW50YCwgd2hpY2ggY29udGFpbnMgdGhlIGFtb3VudCBvZlxuICogbXVsdGktdGFwcyBiZWluZyByZWNvZ25pemVkLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFRhcFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFRhcFJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBUYXBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAndGFwJyxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgdGFwczogMSxcbiAgICAgIGludGVydmFsOiAzMDAsXG4gICAgICAvLyBtYXggdGltZSBiZXR3ZWVuIHRoZSBtdWx0aS10YXAgdGFwc1xuICAgICAgdGltZTogMjUwLFxuICAgICAgLy8gbWF4IHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgZG93biAobGlrZSBmaW5nZXIgb24gdGhlIHNjcmVlbilcbiAgICAgIHRocmVzaG9sZDogOSxcbiAgICAgIC8vIGEgbWluaW1hbCBtb3ZlbWVudCBpcyBvaywgYnV0IGtlZXAgaXQgbG93XG4gICAgICBwb3NUaHJlc2hvbGQ6IDEwXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7IC8vIHByZXZpb3VzIHRpbWUgYW5kIGNlbnRlcixcbiAgICAvLyB1c2VkIGZvciB0YXAgY291bnRpbmdcblxuICAgIF90aGlzLnBUaW1lID0gZmFsc2U7XG4gICAgX3RoaXMucENlbnRlciA9IGZhbHNlO1xuICAgIF90aGlzLl90aW1lciA9IG51bGw7XG4gICAgX3RoaXMuX2lucHV0ID0gbnVsbDtcbiAgICBfdGhpcy5jb3VudCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRhcFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTl07XG4gIH07XG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgdmFyIHZhbGlkVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgb3B0aW9ucy50aW1lO1xuICAgIHRoaXMucmVzZXQoKTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiB0aGlzLmNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgIH0gLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cblxuICAgIGlmICh2YWxpZE1vdmVtZW50ICYmIHZhbGlkVG91Y2hUaW1lICYmIHZhbGlkUG9pbnRlcnMpIHtcbiAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT09IElOUFVUX0VORCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmFsaWRJbnRlcnZhbCA9IHRoaXMucFRpbWUgPyBpbnB1dC50aW1lU3RhbXAgLSB0aGlzLnBUaW1lIDwgb3B0aW9ucy5pbnRlcnZhbCA6IHRydWU7XG4gICAgICB2YXIgdmFsaWRNdWx0aVRhcCA9ICF0aGlzLnBDZW50ZXIgfHwgZ2V0RGlzdGFuY2UodGhpcy5wQ2VudGVyLCBpbnB1dC5jZW50ZXIpIDwgb3B0aW9ucy5wb3NUaHJlc2hvbGQ7XG4gICAgICB0aGlzLnBUaW1lID0gaW5wdXQudGltZVN0YW1wO1xuICAgICAgdGhpcy5wQ2VudGVyID0gaW5wdXQuY2VudGVyO1xuXG4gICAgICBpZiAoIXZhbGlkTXVsdGlUYXAgfHwgIXZhbGlkSW50ZXJ2YWwpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIGlmIHRhcCBjb3VudCBtYXRjaGVzIHdlIGhhdmUgcmVjb2duaXplZCBpdCxcbiAgICAgIC8vIGVsc2UgaXQgaGFzIGJlZ2FuIHJlY29nbml6aW5nLi4uXG5cbiAgICAgIHZhciB0YXBDb3VudCA9IHRoaXMuY291bnQgJSBvcHRpb25zLnRhcHM7XG5cbiAgICAgIGlmICh0YXBDb3VudCA9PT0gMCkge1xuICAgICAgICAvLyBubyBmYWlsaW5nIHJlcXVpcmVtZW50cywgaW1tZWRpYXRlbHkgdHJpZ2dlciB0aGUgdGFwIGV2ZW50XG4gICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZUZhaWx1cmVzKCkpIHtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcblxuICAgICAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgICAgICB9LCBvcHRpb25zLmludGVydmFsKTtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5mYWlsVGltZW91dCA9IGZ1bmN0aW9uIGZhaWxUaW1lb3V0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LCB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHRoaXMuX2lucHV0LnRhcENvdW50ID0gdGhpcy5jb3VudDtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gVGFwUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFRoaXMgcmVjb2duaXplciBpcyBqdXN0IHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgc2ltcGxlIGF0dHJpYnV0ZSByZWNvZ25pemVycy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBBdHRyUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoQXR0clJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBBdHRyUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFVzZWQgdG8gY2hlY2sgaWYgaXQgdGhlIHJlY29nbml6ZXIgcmVjZWl2ZXMgdmFsaWQgaW5wdXQsIGxpa2UgaW5wdXQuZGlzdGFuY2UgPiAxMC5cbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gcmVjb2duaXplZFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBBdHRyUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICB2YXIgb3B0aW9uUG9pbnRlcnMgPSB0aGlzLm9wdGlvbnMucG9pbnRlcnM7XG4gICAgcmV0dXJuIG9wdGlvblBvaW50ZXJzID09PSAwIHx8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9uUG9pbnRlcnM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICovXG5cblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIHZhciBldmVudFR5cGUgPSBpbnB1dC5ldmVudFR5cGU7XG4gICAgdmFyIGlzUmVjb2duaXplZCA9IHN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCk7XG4gICAgdmFyIGlzVmFsaWQgPSB0aGlzLmF0dHJUZXN0KGlucHV0KTsgLy8gb24gY2FuY2VsIGlucHV0IGFuZCB3ZSd2ZSByZWNvZ25pemVkIGJlZm9yZSwgcmV0dXJuIFNUQVRFX0NBTkNFTExFRFxuXG4gICAgaWYgKGlzUmVjb2duaXplZCAmJiAoZXZlbnRUeXBlICYgSU5QVVRfQ0FOQ0VMIHx8ICFpc1ZhbGlkKSkge1xuICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0FOQ0VMTEVEO1xuICAgIH0gZWxzZSBpZiAoaXNSZWNvZ25pemVkIHx8IGlzVmFsaWQpIHtcbiAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfRU5ERUQ7XG4gICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgcmV0dXJuIFNUQVRFX0JFR0FOO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgcmV0dXJuIEF0dHJSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZGlyZWN0aW9uIGNvbnMgdG8gc3RyaW5nXG4gKiBAcGFyYW0ge2NvbnN0YW50fSBkaXJlY3Rpb25cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZGlyZWN0aW9uU3RyKGRpcmVjdGlvbikge1xuICBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fRE9XTikge1xuICAgIHJldHVybiAnZG93bic7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fVVApIHtcbiAgICByZXR1cm4gJ3VwJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgcmV0dXJuICdsZWZ0JztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9SSUdIVCkge1xuICAgIHJldHVybiAncmlnaHQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQYW5cbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGFuZCBtb3ZlZCBpbiB0aGUgYWxsb3dlZCBkaXJlY3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFBhblJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQYW5SZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFBhblJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGFuJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0FMTFxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICAgIF90aGlzLnBYID0gbnVsbDtcbiAgICBfdGhpcy5wWSA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFBhblJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciBhY3Rpb25zID0gW107XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1kpO1xuICAgIH1cblxuICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9O1xuXG4gIF9wcm90by5kaXJlY3Rpb25UZXN0ID0gZnVuY3Rpb24gZGlyZWN0aW9uVGVzdChpbnB1dCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBoYXNNb3ZlZCA9IHRydWU7XG4gICAgdmFyIGRpc3RhbmNlID0gaW5wdXQuZGlzdGFuY2U7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0LmRpcmVjdGlvbjtcbiAgICB2YXIgeCA9IGlucHV0LmRlbHRhWDtcbiAgICB2YXIgeSA9IGlucHV0LmRlbHRhWTsgLy8gbG9jayB0byBheGlzP1xuXG4gICAgaWYgKCEoZGlyZWN0aW9uICYgb3B0aW9ucy5kaXJlY3Rpb24pKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICBkaXJlY3Rpb24gPSB4ID09PSAwID8gRElSRUNUSU9OX05PTkUgOiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgICAgICBoYXNNb3ZlZCA9IHggIT09IHRoaXMucFg7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFYKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IHkgPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG4gICAgICAgIGhhc01vdmVkID0geSAhPT0gdGhpcy5wWTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gaGFzTW92ZWQgJiYgZGlzdGFuY2UgPiBvcHRpb25zLnRocmVzaG9sZCAmJiBkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBBdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKCAvLyByZXBsYWNlIHdpdGggYSBzdXBlciBjYWxsXG4gICAgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOIHx8ICEodGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKSAmJiB0aGlzLmRpcmVjdGlvblRlc3QoaW5wdXQpKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB0aGlzLnBYID0gaW5wdXQuZGVsdGFYO1xuICAgIHRoaXMucFkgPSBpbnB1dC5kZWx0YVk7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5kaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gUGFuUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTd2lwZVxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIG1vdmluZyBmYXN0ICh2ZWxvY2l0eSksIHdpdGggZW5vdWdoIGRpc3RhbmNlIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgU3dpcGVSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoU3dpcGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFN3aXBlUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICB2ZWxvY2l0eTogMC4zLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3dpcGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciB2ZWxvY2l0eTtcblxuICAgIGlmIChkaXJlY3Rpb24gJiAoRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5WTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiBkaXJlY3Rpb24gJiBpbnB1dC5vZmZzZXREaXJlY3Rpb24gJiYgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmIGlucHV0Lm1heFBvaW50ZXJzID09PSB0aGlzLm9wdGlvbnMucG9pbnRlcnMgJiYgYWJzKHZlbG9jaXR5KSA+IHRoaXMub3B0aW9ucy52ZWxvY2l0eSAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQ7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5vZmZzZXREaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uLCBpbnB1dCk7XG4gICAgfVxuXG4gICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFN3aXBlUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQaW5jaFxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXJzIGFyZSBtb3ZpbmcgdG93YXJkICh6b29tLWluKSBvciBhd2F5IGZyb20gZWFjaCBvdGhlciAoem9vbS1vdXQpLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBQaW5jaFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQaW5jaFJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUGluY2hSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGluY2gnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQaW5jaFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnNjYWxlIC0gMSkgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnNjYWxlICE9PSAxKSB7XG4gICAgICB2YXIgaW5PdXQgPSBpbnB1dC5zY2FsZSA8IDEgPyAnaW4nIDogJ291dCc7XG4gICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICB9XG5cbiAgICBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmVtaXQuY2FsbCh0aGlzLCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFBpbmNoUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSb3RhdGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVyIGFyZSBtb3ZpbmcgaW4gYSBjaXJjdWxhciBtb3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFJvdGF0ZVJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShSb3RhdGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFJvdGF0ZVJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdyb3RhdGUnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSb3RhdGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIChNYXRoLmFicyhpbnB1dC5yb3RhdGlvbikgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgcmV0dXJuIFJvdGF0ZVJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUHJlc3NcbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGZvciB4IG1zIHdpdGhvdXQgYW55IG1vdmVtZW50LlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFByZXNzUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUHJlc3NSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUHJlc3NSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncHJlc3MnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0aW1lOiAyNTEsXG4gICAgICAvLyBtaW5pbWFsIHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgcHJlc3NlZFxuICAgICAgdGhyZXNob2xkOiA5XG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gICAgX3RoaXMuX3RpbWVyID0gbnVsbDtcbiAgICBfdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQcmVzc1JlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX0FVVE9dO1xuICB9O1xuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgIHZhciB2YWxpZFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPiBvcHRpb25zLnRpbWU7XG4gICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cbiAgICBpZiAoIXZhbGlkTW92ZW1lbnQgfHwgIXZhbGlkUG9pbnRlcnMgfHwgaW5wdXQuZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgIXZhbGlkVGltZSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG5cbiAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgIH0sIG9wdGlvbnMudGltZSk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpbnB1dCAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIFwidXBcIiwgaW5wdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUHJlc3NSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IGlmIERPTSBldmVudHMgYXJlIGJlaW5nIHRyaWdnZXJlZC5cbiAgICogQnV0IHRoaXMgaXMgc2xvd2VyIGFuZCB1bnVzZWQgYnkgc2ltcGxlIGltcGxlbWVudGF0aW9ucywgc28gZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkb21FdmVudHM6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eS9mYWxsYmFjay5cbiAgICogV2hlbiBzZXQgdG8gYGNvbXB1dGVgIGl0IHdpbGwgbWFnaWNhbGx5IHNldCB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgYWRkZWQgcmVjb2duaXplcnMuXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqIEBkZWZhdWx0IGNvbXB1dGVcbiAgICovXG4gIHRvdWNoQWN0aW9uOiBUT1VDSF9BQ1RJT05fQ09NUFVURSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGVuYWJsZTogdHJ1ZSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogRVhQRVJJTUVOVEFMIEZFQVRVUkUgLS0gY2FuIGJlIHJlbW92ZWQvY2hhbmdlZFxuICAgKiBDaGFuZ2UgdGhlIHBhcmVudCBpbnB1dCB0YXJnZXQgZWxlbWVudC5cbiAgICogSWYgTnVsbCwgdGhlbiBpdCBpcyBiZWluZyBzZXQgdGhlIHRvIG1haW4gZWxlbWVudC5cbiAgICogQHR5cGUge051bGx8RXZlbnRUYXJnZXR9XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGlucHV0VGFyZ2V0OiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBmb3JjZSBhbiBpbnB1dCBjbGFzc1xuICAgKiBAdHlwZSB7TnVsbHxGdW5jdGlvbn1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5wdXRDbGFzczogbnVsbCxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogU29tZSBDU1MgcHJvcGVydGllcyBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB3b3JraW5nIG9mIEhhbW1lci5cbiAgICogQWRkIHRoZW0gdG8gdGhpcyBtZXRob2QgYW5kIHRoZXkgd2lsbCBiZSBzZXQgd2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyLlxuICAgKiBAbmFtZXNwYWNlXG4gICAqL1xuICBjc3NQcm9wczoge1xuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZXMgdGV4dCBzZWxlY3Rpb24gdG8gaW1wcm92ZSB0aGUgZHJhZ2dpbmcgZ2VzdHVyZS4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlclNlbGVjdDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGUgdGhlIFdpbmRvd3MgUGhvbmUgZ3JpcHBlcnMgd2hlbiBwcmVzc2luZyBhbiBlbGVtZW50LlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdG91Y2hTZWxlY3Q6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlcyB0aGUgZGVmYXVsdCBjYWxsb3V0IHNob3duIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0LlxuICAgICAqIE9uIGlPUywgd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQgc3VjaCBhcyBhIGxpbmssIFNhZmFyaSBkaXNwbGF5c1xuICAgICAqIGEgY2FsbG91dCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rLiBUaGlzIHByb3BlcnR5IGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGF0IGNhbGxvdXQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB0b3VjaENhbGxvdXQ6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB6b29taW5nIGlzIGVuYWJsZWQuIFVzZWQgYnkgSUUxMD5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIGNvbnRlbnRab29taW5nOiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlckRyYWc6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBPdmVycmlkZXMgdGhlIGhpZ2hsaWdodCBjb2xvciBzaG93biB3aGVuIHRoZSB1c2VyIHRhcHMgYSBsaW5rIG9yIGEgSmF2YVNjcmlwdFxuICAgICAqIGNsaWNrYWJsZSBlbGVtZW50IGluIGlPUy4gVGhpcyBwcm9wZXJ0eSBvYmV5cyB0aGUgYWxwaGEgdmFsdWUsIGlmIHNwZWNpZmllZC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdyZ2JhKDAsMCwwLDApJ1xuICAgICAqL1xuICAgIHRhcEhpZ2hsaWdodENvbG9yOiBcInJnYmEoMCwwLDAsMClcIlxuICB9XG59O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogRGVmYXVsdCByZWNvZ25pemVyIHNldHVwIHdoZW4gY2FsbGluZyBgSGFtbWVyKClgXG4gKiBXaGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIgdGhlc2Ugd2lsbCBiZSBza2lwcGVkLlxuICogVGhpcyBpcyBzZXBhcmF0ZWQgd2l0aCBvdGhlciBkZWZhdWx0cyBiZWNhdXNlIG9mIHRyZWUtc2hha2luZy5cbiAqIEB0eXBlIHtBcnJheX1cbiAqL1xuXG52YXIgcHJlc2V0ID0gW1tSb3RhdGVSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn1dLCBbUGluY2hSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn0sIFsncm90YXRlJ11dLCBbU3dpcGVSZWNvZ25pemVyLCB7XG4gIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUxcbn1dLCBbUGFuUmVjb2duaXplciwge1xuICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG59LCBbJ3N3aXBlJ11dLCBbVGFwUmVjb2duaXplcl0sIFtUYXBSZWNvZ25pemVyLCB7XG4gIGV2ZW50OiAnZG91YmxldGFwJyxcbiAgdGFwczogMlxufSwgWyd0YXAnXV0sIFtQcmVzc1JlY29nbml6ZXJdXTtcblxudmFyIFNUT1AgPSAxO1xudmFyIEZPUkNFRF9TVE9QID0gMjtcbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZC9yZW1vdmUgdGhlIGNzcyBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gbWFuYWdlci5vcHRpb25zLmNzc1Byb3BzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYWRkXG4gKi9cblxuZnVuY3Rpb24gdG9nZ2xlQ3NzUHJvcHMobWFuYWdlciwgYWRkKSB7XG4gIHZhciBlbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuXG4gIGlmICghZWxlbWVudC5zdHlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwcm9wO1xuICBlYWNoKG1hbmFnZXIub3B0aW9ucy5jc3NQcm9wcywgZnVuY3Rpb24gKHZhbHVlLCBuYW1lKSB7XG4gICAgcHJvcCA9IHByZWZpeGVkKGVsZW1lbnQuc3R5bGUsIG5hbWUpO1xuXG4gICAgaWYgKGFkZCkge1xuICAgICAgbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSA9IGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSBtYW5hZ2VyLm9sZENzc1Byb3BzW3Byb3BdIHx8IFwiXCI7XG4gICAgfVxuICB9KTtcblxuICBpZiAoIWFkZCkge1xuICAgIG1hbmFnZXIub2xkQ3NzUHJvcHMgPSB7fTtcbiAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdHJpZ2dlciBkb20gZXZlbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqL1xuXG5cbmZ1bmN0aW9uIHRyaWdnZXJEb21FdmVudChldmVudCwgZGF0YSkge1xuICB2YXIgZ2VzdHVyZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgZ2VzdHVyZUV2ZW50LmluaXRFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gIGdlc3R1cmVFdmVudC5nZXN0dXJlID0gZGF0YTtcbiAgZGF0YS50YXJnZXQuZGlzcGF0Y2hFdmVudChnZXN0dXJlRXZlbnQpO1xufVxuLyoqXG4qIEBwcml2YXRlXG4gKiBNYW5hZ2VyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG5cbnZhciBNYW5hZ2VyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMub3B0aW9ucyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMucmVjb2duaXplcnMgPSBbXTtcbiAgICB0aGlzLm9sZENzc1Byb3BzID0ge307XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmlucHV0ID0gY3JlYXRlSW5wdXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnRvdWNoQWN0aW9uID0gbmV3IFRvdWNoQWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG4gICAgZWFjaCh0aGlzLm9wdGlvbnMucmVjb2duaXplcnMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgcmVjb2duaXplciA9IF90aGlzLmFkZChuZXcgaXRlbVswXShpdGVtWzFdKSk7XG5cbiAgICAgIGl0ZW1bMl0gJiYgcmVjb2duaXplci5yZWNvZ25pemVXaXRoKGl0ZW1bMl0pO1xuICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7TWFuYWdlcn1cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgYXNzaWduJDEodGhpcy5vcHRpb25zLCBvcHRpb25zKTsgLy8gT3B0aW9ucyB0aGF0IG5lZWQgYSBsaXR0bGUgbW9yZSBzZXR1cFxuXG4gICAgaWYgKG9wdGlvbnMudG91Y2hBY3Rpb24pIHtcbiAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaW5wdXRUYXJnZXQpIHtcbiAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaW5wdXQudGFyZ2V0ID0gb3B0aW9ucy5pbnB1dFRhcmdldDtcbiAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc3RvcCByZWNvZ25pemluZyBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBUaGlzIHNlc3Npb24gd2lsbCBiZSBkaXNjYXJkZWQsIHdoZW4gYSBuZXcgW2lucHV0XXN0YXJ0IGV2ZW50IGlzIGZpcmVkLlxuICAgKiBXaGVuIGZvcmNlZCwgdGhlIHJlY29nbml6ZXIgY3ljbGUgaXMgc3RvcHBlZCBpbW1lZGlhdGVseS5cbiAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VdXG4gICAqL1xuXG5cbiAgX3Byb3RvLnN0b3AgPSBmdW5jdGlvbiBzdG9wKGZvcmNlKSB7XG4gICAgdGhpcy5zZXNzaW9uLnN0b3BwZWQgPSBmb3JjZSA/IEZPUkNFRF9TVE9QIDogU1RPUDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJ1biB0aGUgcmVjb2duaXplcnMhXG4gICAqIGNhbGxlZCBieSB0aGUgaW5wdXRIYW5kbGVyIGZ1bmN0aW9uIG9uIGV2ZXJ5IG1vdmVtZW50IG9mIHRoZSBwb2ludGVycyAodG91Y2hlcylcbiAgICogaXQgd2Fsa3MgdGhyb3VnaCBhbGwgdGhlIHJlY29nbml6ZXJzIGFuZCB0cmllcyB0byBkZXRlY3QgdGhlIGdlc3R1cmUgdGhhdCBpcyBiZWluZyBtYWRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xuXG4gICAgaWYgKHNlc3Npb24uc3RvcHBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gcnVuIHRoZSB0b3VjaC1hY3Rpb24gcG9seWZpbGxcblxuXG4gICAgdGhpcy50b3VjaEFjdGlvbi5wcmV2ZW50RGVmYXVsdHMoaW5wdXREYXRhKTtcbiAgICB2YXIgcmVjb2duaXplcjtcbiAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzOyAvLyB0aGlzIGhvbGRzIHRoZSByZWNvZ25pemVyIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAvLyBzbyB0aGUgcmVjb2duaXplcidzIHN0YXRlIG5lZWRzIHRvIGJlIEJFR0FOLCBDSEFOR0VELCBFTkRFRCBvciBSRUNPR05JWkVEXG4gICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuXG4gICAgdmFyIGN1clJlY29nbml6ZXIgPSBzZXNzaW9uLmN1clJlY29nbml6ZXI7IC8vIHJlc2V0IHdoZW4gdGhlIGxhc3QgcmVjb2duaXplciBpcyByZWNvZ25pemVkXG4gICAgLy8gb3Igd2hlbiB3ZSdyZSBpbiBhIG5ldyBzZXNzaW9uXG5cbiAgICBpZiAoIWN1clJlY29nbml6ZXIgfHwgY3VyUmVjb2duaXplciAmJiBjdXJSZWNvZ25pemVyLnN0YXRlICYgU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICAgIGN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgcmVjb2duaXplcnMubGVuZ3RoKSB7XG4gICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07IC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgIC8vIDEuICAgYWxsb3cgaWYgdGhlIHNlc3Npb24gaXMgTk9UIGZvcmNlZCBzdG9wcGVkIChzZWUgdGhlIC5zdG9wKCkgbWV0aG9kKVxuICAgICAgLy8gMi4gICBhbGxvdyBpZiB3ZSBzdGlsbCBoYXZlbid0IHJlY29nbml6ZWQgYSBnZXN0dXJlIGluIHRoaXMgc2Vzc2lvbiwgb3IgdGhlIHRoaXMgcmVjb2duaXplciBpcyB0aGUgb25lXG4gICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgIC8vIDMuICAgYWxsb3cgaWYgdGhlIHJlY29nbml6ZXIgaXMgYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzIHdpdGggdGhlIGN1cnJlbnQgcmVjb2duaXplZCByZWNvZ25pemVyLlxuICAgICAgLy8gICAgICB0aGlzIGNhbiBiZSBzZXR1cCB3aXRoIHRoZSBgcmVjb2duaXplV2l0aCgpYCBtZXRob2Qgb24gdGhlIHJlY29nbml6ZXIuXG5cbiAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQgIT09IEZPUkNFRF9TVE9QICYmICggLy8gMVxuICAgICAgIWN1clJlY29nbml6ZXIgfHwgcmVjb2duaXplciA9PT0gY3VyUmVjb2duaXplciB8fCAvLyAyXG4gICAgICByZWNvZ25pemVyLmNhblJlY29nbml6ZVdpdGgoY3VyUmVjb2duaXplcikpKSB7XG4gICAgICAgIC8vIDNcbiAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemUoaW5wdXREYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29nbml6ZXIucmVzZXQoKTtcbiAgICAgIH0gLy8gaWYgdGhlIHJlY29nbml6ZXIgaGFzIGJlZW4gcmVjb2duaXppbmcgdGhlIGlucHV0IGFzIGEgdmFsaWQgZ2VzdHVyZSwgd2Ugd2FudCB0byBzdG9yZSB0aGlzIG9uZSBhcyB0aGVcbiAgICAgIC8vIGN1cnJlbnQgYWN0aXZlIHJlY29nbml6ZXIuIGJ1dCBvbmx5IGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBhY3RpdmUgcmVjb2duaXplclxuXG5cbiAgICAgIGlmICghY3VyUmVjb2duaXplciAmJiByZWNvZ25pemVyLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEKSkge1xuICAgICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSByZWNvZ25pemVyO1xuICAgICAgICBjdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGdldCBhIHJlY29nbml6ZXIgYnkgaXRzIGV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TnVsbH1cbiAgICovXG5cblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHJlY29nbml6ZXIpIHtcbiAgICBpZiAocmVjb2duaXplciBpbnN0YW5jZW9mIFJlY29nbml6ZXIpIHtcbiAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgIH1cblxuICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVjb2duaXplcnNbaV0ub3B0aW9ucy5ldmVudCA9PT0gcmVjb2duaXplcikge1xuICAgICAgICByZXR1cm4gcmVjb2duaXplcnNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSBhZGQgYSByZWNvZ25pemVyIHRvIHRoZSBtYW5hZ2VyXG4gICAqIGV4aXN0aW5nIHJlY29nbml6ZXJzIHdpdGggdGhlIHNhbWUgZXZlbnQgbmFtZSB3aWxsIGJlIHJlbW92ZWRcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE1hbmFnZXJ9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChyZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsIFwiYWRkXCIsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IC8vIHJlbW92ZSBleGlzdGluZ1xuXG5cbiAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aGlzLnJlbW92ZShleGlzdGluZyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWNvZ25pemVycy5wdXNoKHJlY29nbml6ZXIpO1xuICAgIHJlY29nbml6ZXIubWFuYWdlciA9IHRoaXM7XG4gICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlbW92ZSBhIHJlY29nbml6ZXIgYnkgbmFtZSBvciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgKi9cblxuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhyZWNvZ25pemVyLCBcInJlbW92ZVwiLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFJlY29nbml6ZXIgPSB0aGlzLmdldChyZWNvZ25pemVyKTsgLy8gbGV0J3MgbWFrZSBzdXJlIHRoaXMgcmVjb2duaXplciBleGlzdHNcblxuICAgIGlmIChyZWNvZ25pemVyKSB7XG4gICAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuICAgICAgdmFyIGluZGV4ID0gaW5BcnJheShyZWNvZ25pemVycywgdGFyZ2V0UmVjb2duaXplcik7XG5cbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGJpbmQgZXZlbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub24gPSBmdW5jdGlvbiBvbihldmVudHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQgfHwgaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBoYW5kbGVyc1tldmVudF0gPSBoYW5kbGVyc1tldmVudF0gfHwgW107XG4gICAgICBoYW5kbGVyc1tldmVudF0ucHVzaChoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIHVuYmluZCBldmVudCwgbGVhdmUgZW1pdCBibGFuayB0byByZW1vdmUgYWxsIGhhbmRsZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2hhbmRsZXJdXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub2ZmID0gZnVuY3Rpb24gb2ZmKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVyc1tldmVudF0gJiYgaGFuZGxlcnNbZXZlbnRdLnNwbGljZShpbkFycmF5KGhhbmRsZXJzW2V2ZW50XSwgaGFuZGxlciksIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgZGF0YSkge1xuICAgIC8vIHdlIGFsc28gd2FudCB0byB0cmlnZ2VyIGRvbSBldmVudHNcbiAgICBpZiAodGhpcy5vcHRpb25zLmRvbUV2ZW50cykge1xuICAgICAgdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKTtcbiAgICB9IC8vIG5vIGhhbmRsZXJzLCBzbyBza2lwIGl0IGFsbFxuXG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzW2V2ZW50XSAmJiB0aGlzLmhhbmRsZXJzW2V2ZW50XS5zbGljZSgpO1xuXG4gICAgaWYgKCFoYW5kbGVycyB8fCAhaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGF0YS50eXBlID0gZXZlbnQ7XG5cbiAgICBkYXRhLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGF0YS5zcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgaGFuZGxlcnNbaV0oZGF0YSk7XG4gICAgICBpKys7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZGVzdHJveSB0aGUgbWFuYWdlciBhbmQgdW5iaW5kcyBhbGwgZXZlbnRzXG4gICAqIGl0IGRvZXNuJ3QgdW5iaW5kIGRvbSBldmVudHMsIHRoYXQgaXMgdGhlIHVzZXIgb3duIHJlc3BvbnNpYmlsaXR5XG4gICAqL1xuXG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuZWxlbWVudCAmJiB0b2dnbGVDc3NQcm9wcyh0aGlzLCBmYWxzZSk7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIE1hbmFnZXI7XG59KCk7XG5cbnZhciBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQID0ge1xuICB0b3VjaHN0YXJ0OiBJTlBVVF9TVEFSVCxcbiAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICB0b3VjaGNhbmNlbDogSU5QVVRfQ0FOQ0VMXG59O1xudmFyIFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQnO1xudmFyIFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcbi8qKlxuICogQHByaXZhdGVcbiAqIFRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBTaW5nbGVUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoU2luZ2xlVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBTaW5nbGVUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IFNpbmdsZVRvdWNoSW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2VGFyZ2V0ID0gU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTaW5nbGVUb3VjaElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgdHlwZSA9IFNJTkdMRV9UT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07IC8vIHNob3VsZCB3ZSBoYW5kbGUgdGhlIHRvdWNoIGV2ZW50cz9cblxuICAgIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3VjaGVzID0gbm9ybWFsaXplU2luZ2xlVG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTsgLy8gd2hlbiBkb25lLCByZXNldCB0aGUgc3RhcnRlZCBzdGF0ZVxuXG4gICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiB0b3VjaGVzWzBdLmxlbmd0aCAtIHRvdWNoZXNbMV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgdHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHRvdWNoZXNbMF0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBTaW5nbGVUb3VjaElucHV0O1xufShJbnB1dCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgdmFyIGFsbCA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciBjaGFuZ2VkID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG5cbiAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgIGFsbCA9IHVuaXF1ZUFycmF5KGFsbC5jb25jYXQoY2hhbmdlZCksICdpZGVudGlmaWVyJywgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gW2FsbCwgY2hhbmdlZF07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdyYXAgYSBtZXRob2Qgd2l0aCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgYW5kIHN0YWNrIHRyYWNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB3cmFwcGluZyB0aGUgc3VwcGxpZWQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBkZXByZWNhdGUobWV0aG9kLCBuYW1lLCBtZXNzYWdlKSB7XG4gIHZhciBkZXByZWNhdGlvbk1lc3NhZ2UgPSBcIkRFUFJFQ0FURUQgTUVUSE9EOiBcIiArIG5hbWUgKyBcIlxcblwiICsgbWVzc2FnZSArIFwiIEFUIFxcblwiO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICB2YXIgc3RhY2sgPSBlICYmIGUuc3RhY2sgPyBlLnN0YWNrLnJlcGxhY2UoL15bXlxcKF0rP1tcXG4kXS9nbSwgJycpLnJlcGxhY2UoL15cXHMrYXRcXHMrL2dtLCAnJykucmVwbGFjZSgvXk9iamVjdC48YW5vbnltb3VzPlxccypcXCgvZ20sICd7YW5vbnltb3VzfSgpQCcpIDogJ1Vua25vd24gU3RhY2sgVHJhY2UnO1xuICAgIHZhciBsb2cgPSB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUud2FybiB8fCB3aW5kb3cuY29uc29sZS5sb2cpO1xuXG4gICAgaWYgKGxvZykge1xuICAgICAgbG9nLmNhbGwod2luZG93LmNvbnNvbGUsIGRlcHJlY2F0aW9uTWVzc2FnZSwgc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW21lcmdlPWZhbHNlXVxuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG5cbnZhciBleHRlbmQgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYywgbWVyZ2UpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBrZXlzLmxlbmd0aCkge1xuICAgIGlmICghbWVyZ2UgfHwgbWVyZ2UgJiYgZGVzdFtrZXlzW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXN0W2tleXNbaV1dID0gc3JjW2tleXNbaV1dO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufSwgJ2V4dGVuZCcsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgdGhhdCBleGlzdCBpbiBkZXN0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuIGJ5IHNyY1xuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xuXG52YXIgbWVyZ2UgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYykge1xuICByZXR1cm4gZXh0ZW5kKGRlc3QsIHNyYywgdHJ1ZSk7XG59LCAnbWVyZ2UnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzaW1wbGUgY2xhc3MgaW5oZXJpdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoaWxkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBiYXNlXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXNdXG4gKi9cblxuZnVuY3Rpb24gaW5oZXJpdChjaGlsZCwgYmFzZSwgcHJvcGVydGllcykge1xuICB2YXIgYmFzZVAgPSBiYXNlLnByb3RvdHlwZTtcbiAgdmFyIGNoaWxkUDtcbiAgY2hpbGRQID0gY2hpbGQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShiYXNlUCk7XG4gIGNoaWxkUC5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuICBjaGlsZFAuX3N1cGVyID0gYmFzZVA7XG5cbiAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICBhc3NpZ24kMShjaGlsZFAsIHByb3BlcnRpZXMpO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNpbXBsZSBmdW5jdGlvbiBiaW5kXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gYmluZEZuKGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBib3VuZEZuKCkge1xuICAgIHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIG1hbmFnZXIgd2l0aCBhIGRlZmF1bHQgc2V0IG9mIHJlY29nbml6ZXJzLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIEhhbW1lciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIHZhciBIYW1tZXIgPVxuICAvKipcbiAgICAqIEBwcml2YXRlXG4gICAgKiBAY29uc3Qge3N0cmluZ31cbiAgICAqL1xuICBmdW5jdGlvbiBIYW1tZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1hbmFnZXIoZWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgcmVjb2duaXplcnM6IHByZXNldC5jb25jYXQoKVxuICAgIH0sIG9wdGlvbnMpKTtcbiAgfTtcblxuICBIYW1tZXIuVkVSU0lPTiA9IFwiMi4wLjE3LXJjXCI7XG4gIEhhbW1lci5ESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0FMTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9ET1dOID0gRElSRUNUSU9OX0RPV047XG4gIEhhbW1lci5ESVJFQ1RJT05fTEVGVCA9IERJUkVDVElPTl9MRUZUO1xuICBIYW1tZXIuRElSRUNUSU9OX1JJR0hUID0gRElSRUNUSU9OX1JJR0hUO1xuICBIYW1tZXIuRElSRUNUSU9OX1VQID0gRElSRUNUSU9OX1VQO1xuICBIYW1tZXIuRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9WRVJUSUNBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9OT05FID0gRElSRUNUSU9OX05PTkU7XG4gIEhhbW1lci5ESVJFQ1RJT05fRE9XTiA9IERJUkVDVElPTl9ET1dOO1xuICBIYW1tZXIuSU5QVVRfU1RBUlQgPSBJTlBVVF9TVEFSVDtcbiAgSGFtbWVyLklOUFVUX01PVkUgPSBJTlBVVF9NT1ZFO1xuICBIYW1tZXIuSU5QVVRfRU5EID0gSU5QVVRfRU5EO1xuICBIYW1tZXIuSU5QVVRfQ0FOQ0VMID0gSU5QVVRfQ0FOQ0VMO1xuICBIYW1tZXIuU1RBVEVfUE9TU0lCTEUgPSBTVEFURV9QT1NTSUJMRTtcbiAgSGFtbWVyLlNUQVRFX0JFR0FOID0gU1RBVEVfQkVHQU47XG4gIEhhbW1lci5TVEFURV9DSEFOR0VEID0gU1RBVEVfQ0hBTkdFRDtcbiAgSGFtbWVyLlNUQVRFX0VOREVEID0gU1RBVEVfRU5ERUQ7XG4gIEhhbW1lci5TVEFURV9SRUNPR05JWkVEID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgSGFtbWVyLlNUQVRFX0NBTkNFTExFRCA9IFNUQVRFX0NBTkNFTExFRDtcbiAgSGFtbWVyLlNUQVRFX0ZBSUxFRCA9IFNUQVRFX0ZBSUxFRDtcbiAgSGFtbWVyLk1hbmFnZXIgPSBNYW5hZ2VyO1xuICBIYW1tZXIuSW5wdXQgPSBJbnB1dDtcbiAgSGFtbWVyLlRvdWNoQWN0aW9uID0gVG91Y2hBY3Rpb247XG4gIEhhbW1lci5Ub3VjaElucHV0ID0gVG91Y2hJbnB1dDtcbiAgSGFtbWVyLk1vdXNlSW5wdXQgPSBNb3VzZUlucHV0O1xuICBIYW1tZXIuUG9pbnRlckV2ZW50SW5wdXQgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgSGFtbWVyLlRvdWNoTW91c2VJbnB1dCA9IFRvdWNoTW91c2VJbnB1dDtcbiAgSGFtbWVyLlNpbmdsZVRvdWNoSW5wdXQgPSBTaW5nbGVUb3VjaElucHV0O1xuICBIYW1tZXIuUmVjb2duaXplciA9IFJlY29nbml6ZXI7XG4gIEhhbW1lci5BdHRyUmVjb2duaXplciA9IEF0dHJSZWNvZ25pemVyO1xuICBIYW1tZXIuVGFwID0gVGFwUmVjb2duaXplcjtcbiAgSGFtbWVyLlBhbiA9IFBhblJlY29nbml6ZXI7XG4gIEhhbW1lci5Td2lwZSA9IFN3aXBlUmVjb2duaXplcjtcbiAgSGFtbWVyLlBpbmNoID0gUGluY2hSZWNvZ25pemVyO1xuICBIYW1tZXIuUm90YXRlID0gUm90YXRlUmVjb2duaXplcjtcbiAgSGFtbWVyLlByZXNzID0gUHJlc3NSZWNvZ25pemVyO1xuICBIYW1tZXIub24gPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLm9mZiA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIuZWFjaCA9IGVhY2g7XG4gIEhhbW1lci5tZXJnZSA9IG1lcmdlO1xuICBIYW1tZXIuZXh0ZW5kID0gZXh0ZW5kO1xuICBIYW1tZXIuYmluZEZuID0gYmluZEZuO1xuICBIYW1tZXIuYXNzaWduID0gYXNzaWduJDE7XG4gIEhhbW1lci5pbmhlcml0ID0gaW5oZXJpdDtcbiAgSGFtbWVyLmJpbmRGbiA9IGJpbmRGbjtcbiAgSGFtbWVyLnByZWZpeGVkID0gcHJlZml4ZWQ7XG4gIEhhbW1lci50b0FycmF5ID0gdG9BcnJheTtcbiAgSGFtbWVyLmluQXJyYXkgPSBpbkFycmF5O1xuICBIYW1tZXIudW5pcXVlQXJyYXkgPSB1bmlxdWVBcnJheTtcbiAgSGFtbWVyLnNwbGl0U3RyID0gc3BsaXRTdHI7XG4gIEhhbW1lci5ib29sT3JGbiA9IGJvb2xPckZuO1xuICBIYW1tZXIuaGFzUGFyZW50ID0gaGFzUGFyZW50O1xuICBIYW1tZXIuYWRkRXZlbnRMaXN0ZW5lcnMgPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLnJlbW92ZUV2ZW50TGlzdGVuZXJzID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5kZWZhdWx0cyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywge1xuICAgIHByZXNldDogcHJlc2V0XG4gIH0pO1xuICByZXR1cm4gSGFtbWVyO1xufSgpO1xuXG4vLyAgc3R5bGUgbG9hZGVyIGJ1dCBieSBzY3JpcHQgdGFnLCBub3QgYnkgdGhlIGxvYWRlci5cblxudmFyIGRlZmF1bHRzJDEgPSBIYW1tZXIuZGVmYXVsdHM7XG5cbmV4cG9ydCBkZWZhdWx0IEhhbW1lcjtcbmV4cG9ydCB7IElOUFVUX1NUQVJULCBJTlBVVF9NT1ZFLCBJTlBVVF9FTkQsIElOUFVUX0NBTkNFTCwgU1RBVEVfUE9TU0lCTEUsIFNUQVRFX0JFR0FOLCBTVEFURV9DSEFOR0VELCBTVEFURV9FTkRFRCwgU1RBVEVfUkVDT0dOSVpFRCwgU1RBVEVfQ0FOQ0VMTEVELCBTVEFURV9GQUlMRUQsIERJUkVDVElPTl9OT05FLCBESVJFQ1RJT05fTEVGVCwgRElSRUNUSU9OX1JJR0hULCBESVJFQ1RJT05fVVAsIERJUkVDVElPTl9ET1dOLCBESVJFQ1RJT05fSE9SSVpPTlRBTCwgRElSRUNUSU9OX1ZFUlRJQ0FMLCBESVJFQ1RJT05fQUxMLCBNYW5hZ2VyLCBJbnB1dCwgVG91Y2hBY3Rpb24sIFRvdWNoSW5wdXQsIE1vdXNlSW5wdXQsIFBvaW50ZXJFdmVudElucHV0LCBUb3VjaE1vdXNlSW5wdXQsIFNpbmdsZVRvdWNoSW5wdXQsIFJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCBUYXBSZWNvZ25pemVyIGFzIFRhcCwgUGFuUmVjb2duaXplciBhcyBQYW4sIFN3aXBlUmVjb2duaXplciBhcyBTd2lwZSwgUGluY2hSZWNvZ25pemVyIGFzIFBpbmNoLCBSb3RhdGVSZWNvZ25pemVyIGFzIFJvdGF0ZSwgUHJlc3NSZWNvZ25pemVyIGFzIFByZXNzLCBhZGRFdmVudExpc3RlbmVycyBhcyBvbiwgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMgYXMgb2ZmLCBlYWNoLCBtZXJnZSwgZXh0ZW5kLCBhc3NpZ24kMSBhcyBhc3NpZ24sIGluaGVyaXQsIGJpbmRGbiwgcHJlZml4ZWQsIHRvQXJyYXksIGluQXJyYXksIHVuaXF1ZUFycmF5LCBzcGxpdFN0ciwgYm9vbE9yRm4sIGhhc1BhcmVudCwgYWRkRXZlbnRMaXN0ZW5lcnMsIHJlbW92ZUV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0cyQxIGFzIGRlZmF1bHRzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW1tZXIuZXNtLmpzLm1hcFxuIiwgIi8qKlxuICogdmlzLXV0aWxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqcy92aXMtdXRpbFxuICpcbiAqIHV0aWxpdGllIGNvbGxlY3Rpb24gZm9yIHZpc2pzXG4gKlxuICogQHZlcnNpb24gNS4wLjdcbiAqIEBkYXRlICAgIDIwMjMtMTEtMjBUMDk6MDY6NTEuMDY3WlxuICpcbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTEtMjAxNyBBbG1lbmRlIEIuViwgaHR0cDovL2FsbWVuZGUuY29tXG4gKiBAY29weXJpZ2h0IChjKSAyMDE3LTIwMTkgdmlzanMgY29udHJpYnV0b3JzLCBodHRwczovL2dpdGh1Yi5jb20vdmlzanNcbiAqXG4gKiBAbGljZW5zZVxuICogdmlzLmpzIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aFxuICpcbiAqICAgMS4gVGhlIEFwYWNoZSAyLjAgTGljZW5zZVxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgIGFuZFxuICpcbiAqICAgMi4gVGhlIE1JVCBMaWNlbnNlXG4gKiAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiB2aXMuanMgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGVpdGhlciBsaWNlbnNlLlxuICovXG5cbmltcG9ydCBFbWl0dGVyIGZyb20gJ2NvbXBvbmVudC1lbWl0dGVyJztcbmltcG9ydCBSZWFsSGFtbWVyIGZyb20gJ0BlZ2pzL2hhbW1lcmpzJztcblxuLyoqXHJcbiAqIFVzZSB0aGlzIHN5bWJvbCB0byBkZWxldGUgcHJvcGVyaWVzIGluIGRlZXBPYmplY3RBc3NpZ24uXHJcbiAqL1xyXG5jb25zdCBERUxFVEUgPSBTeW1ib2woXCJERUxFVEVcIik7XHJcbi8qKlxyXG4gKiBQdXJlIHZlcnNpb24gb2YgZGVlcE9iamVjdEFzc2lnbiwgaXQgZG9lc24ndCBtb2RpZnkgYW55IG9mIGl0J3MgYXJndW1lbnRzLlxyXG4gKlxyXG4gKiBAcGFyYW0gYmFzZSAtIFRoZSBiYXNlIG9iamVjdCB0aGF0IGZ1bGxmaWxzIHRoZSB3aG9sZSBpbnRlcmZhY2UgVC5cclxuICogQHBhcmFtIHVwZGF0ZXMgLSBVcGRhdGVzIHRoYXQgbWF5IGNoYW5nZSBvciBkZWxldGUgcHJvcHMuXHJcbiAqIEByZXR1cm5zIEEgYnJhbmQgbmV3IGluc3RhbmNlIHdpdGggYWxsIHRoZSBzdXBwbGllZCBvYmplY3RzIGRlZXBseSBtZXJnZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwdXJlRGVlcE9iamVjdEFzc2lnbihiYXNlLCAuLi51cGRhdGVzKSB7XHJcbiAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbih7fSwgYmFzZSwgLi4udXBkYXRlcyk7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgdmVyc2lvbiBvZiBvYmplY3QgYXNzaWduIHdpdGggYWRkaXRpb25hbCBkZWxldGluZyBieSB0aGUgREVMRVRFIHN5bWJvbC5cclxuICpcclxuICogQHBhcmFtIHZhbHVlcyAtIE9iamVjdHMgdG8gYmUgZGVlcGx5IG1lcmdlZC5cclxuICogQHJldHVybnMgVGhlIGZpcnN0IG9iamVjdCBmcm9tIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBPYmplY3RBc3NpZ24oLi4udmFsdWVzKSB7XHJcbiAgICBjb25zdCBtZXJnZWQgPSBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKTtcclxuICAgIHN0cmlwRGVsZXRlKG1lcmdlZCk7XHJcbiAgICByZXR1cm4gbWVyZ2VkO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIHZlcnNpb24gb2Ygb2JqZWN0IGFzc2lnbiB3aXRoIGFkZGl0aW9uYWwgZGVsZXRpbmcgYnkgdGhlIERFTEVURSBzeW1ib2wuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoaXMgZG9lc24ndCBzdHJpcCB0aGUgREVMRVRFIHN5bWJvbHMgc28gdGhleSBtYXkgZW5kIHVwIGluIHRoZSBmaW5hbCBvYmplY3QuXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBPYmplY3RzIHRvIGJlIGRlZXBseSBtZXJnZWQuXHJcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBvYmplY3QgZnJvbSB2YWx1ZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKSB7XHJcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KGRlZXBPYmplY3RBc3NpZ24odmFsdWVzWzBdLCB2YWx1ZXNbMV0pLCAuLi52YWx1ZXMuc2xpY2UoMikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYSA9IHZhbHVlc1swXTtcclxuICAgIGNvbnN0IGIgPSB2YWx1ZXNbMV07XHJcbiAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICBhLnNldFRpbWUoYi5nZXRUaW1lKCkpO1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIFJlZmxlY3Qub3duS2V5cyhiKSkge1xyXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGIsIHByb3ApKSA7XHJcbiAgICAgICAgZWxzZSBpZiAoYltwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIGJbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGJbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYVtwcm9wXSkgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeShhW3Byb3BdLCBiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBjbG9uZShiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRGVlcCBjbG9uZSBnaXZlbiBvYmplY3Qgb3IgYXJyYXkuIEluIGNhc2Ugb2YgcHJpbWl0aXZlIHNpbXBseSByZXR1cm4uXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gQW55dGhpbmcuXHJcbiAqIEByZXR1cm5zIERlZXAgY2xvbmVkIG9iamVjdC9hcnJheSBvciB1bmNoYW5nZWQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGNsb25lKGEpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XHJcbiAgICAgICAgcmV0dXJuIGEubWFwKCh2YWx1ZSkgPT4gY2xvbmUodmFsdWUpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBhID09PSBcIm9iamVjdFwiICYmIGEgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGEuZ2V0VGltZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSh7fSwgYSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogU3RyaXAgREVMRVRFIGZyb20gZ2l2ZW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIE9iamVjdCB3aGljaCBtYXkgY29udGFpbiBERUxFVEUgYnV0IHdvbid0IGFmdGVyIHRoaXMgaXMgZXhlY3V0ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBzdHJpcERlbGV0ZShhKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoYSkpIHtcclxuICAgICAgICBpZiAoYVtwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJiBhW3Byb3BdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHN0cmlwRGVsZXRlKGFbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG4vKipcclxuICogU2VlZGFibGUsIGZhc3QgYW5kIHJlYXNvbmFibHkgZ29vZCAobm90IGNyeXB0byBidXQgbW9yZSB0aGFuIG9rYXkgZm9yIG91clxyXG4gKiBuZWVkcykgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIEFkYXB0ZWQgZnJvbSB7QGxpbmsgaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTEwNDI5MTAwNzM2L2h0dHA6Ly9iYWFnb2UuY29tOjgwL2VuL1JhbmRvbU11c2luZ3MvamF2YXNjcmlwdH0uXHJcbiAqIE9yaWdpbmFsIGFsZ29yaXRobSBjcmVhdGVkIGJ5IEpvaGFubmVzIEJhYWfDuGUgXFw8YmFhZ29lXFxAYmFhZ29lLmNvbVxcPiBpbiAyMDEwLlxyXG4gKi9cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIGdlbmVyYXRvciBiYXNlZCBvbiBBbGVhIGJ5IEpvaGFubmVzIEJhYWfDuGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gQWxsIHN1cHBsaWVkIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWQgYXMgYSBzZWVkLiBJbiBjYXNlIG5vdGhpbmdcclxuICogaXMgc3VwcGxpZWQgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWQgdG8gc2VlZCB0aGUgZ2VuZXJhdG9yLlxyXG4gKiBAcmV0dXJucyBBIHJlYWR5IHRvIHVzZSBzZWVkZWQgZ2VuZXJhdG9yLlxyXG4gKi9cclxuZnVuY3Rpb24gQWxlYSguLi5zZWVkKSB7XHJcbiAgICByZXR1cm4gQWxlYUltcGxlbWVudGF0aW9uKHNlZWQubGVuZ3RoID8gc2VlZCA6IFtEYXRlLm5vdygpXSk7XHJcbn1cclxuLyoqXHJcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIFtbQWxlYV1dIHdpdGhvdXQgdXNlciBpbnB1dCB2YWxpZGF0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIFRoZSBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNlZWQgdGhlIGdlbmVyYXRvci5cclxuICogQHJldHVybnMgQSByZWFkeSB0byB1c2Ugc2VlZGVkIGdlbmVyYXRvci5cclxuICovXHJcbmZ1bmN0aW9uIEFsZWFJbXBsZW1lbnRhdGlvbihzZWVkKSB7XHJcbiAgICBsZXQgW3MwLCBzMSwgczJdID0gbWFzaFNlZWQoc2VlZCk7XHJcbiAgICBsZXQgYyA9IDE7XHJcbiAgICBjb25zdCByYW5kb20gPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdCA9IDIwOTE2MzkgKiBzMCArIGMgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxyXG4gICAgICAgIHMwID0gczE7XHJcbiAgICAgICAgczEgPSBzMjtcclxuICAgICAgICByZXR1cm4gKHMyID0gdCAtIChjID0gdCB8IDApKTtcclxuICAgIH07XHJcbiAgICByYW5kb20udWludDMyID0gKCkgPT4gcmFuZG9tKCkgKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgcmFuZG9tLmZyYWN0NTMgPSAoKSA9PiByYW5kb20oKSArICgocmFuZG9tKCkgKiAweDIwMDAwMCkgfCAwKSAqIDEuMTEwMjIzMDI0NjI1MTU2NWUtMTY7IC8vIDJeLTUzXHJcbiAgICByYW5kb20uYWxnb3JpdGhtID0gXCJBbGVhXCI7XHJcbiAgICByYW5kb20uc2VlZCA9IHNlZWQ7XHJcbiAgICByYW5kb20udmVyc2lvbiA9IFwiMC45XCI7XHJcbiAgICByZXR1cm4gcmFuZG9tO1xyXG59XHJcbi8qKlxyXG4gKiBUdXJuIGFyYml0cmFyeSBkYXRhIGludG8gdmFsdWVzIFtbQWxlYUltcGxlbWVudGF0aW9uXV0gY2FuIHVzZSB0byBnZW5lcmF0ZVxyXG4gKiByYW5kb20gbnVtYmVycy5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBBcmJpdHJhcnkgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgc2VlZC5cclxuICogQHJldHVybnMgVGhyZWUgbnVtYmVycyB0byB1c2UgYXMgaW5pdGlhbCB2YWx1ZXMgZm9yIFtbQWxlYUltcGxlbWVudGF0aW9uXV0uXHJcbiAqL1xyXG5mdW5jdGlvbiBtYXNoU2VlZCguLi5zZWVkKSB7XHJcbiAgICBjb25zdCBtYXNoID0gTWFzaCgpO1xyXG4gICAgbGV0IHMwID0gbWFzaChcIiBcIik7XHJcbiAgICBsZXQgczEgPSBtYXNoKFwiIFwiKTtcclxuICAgIGxldCBzMiA9IG1hc2goXCIgXCIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgczAgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczAgPCAwKSB7XHJcbiAgICAgICAgICAgIHMwICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMxIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMxIDwgMCkge1xyXG4gICAgICAgICAgICBzMSArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzMiAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMiA8IDApIHtcclxuICAgICAgICAgICAgczIgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW3MwLCBzMSwgczJdO1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWFzaCBmdW5jdGlvbi5cclxuICpcclxuICogQHJldHVybnMgQSBub25wdXJlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYXJiaXRyYXJ5IFtbTWFzaGFibGVdXSBkYXRhIGFuZCB0dXJuc1xyXG4gKiB0aGVtIGludG8gbnVtYmVycy5cclxuICovXHJcbmZ1bmN0aW9uIE1hc2goKSB7XHJcbiAgICBsZXQgbiA9IDB4ZWZjODI0OWQ7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICBjb25zdCBzdHJpbmcgPSBkYXRhLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbiArPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgbGV0IGggPSAwLjAyNTE5NjAzMjgyNDE2OTM4ICogbjtcclxuICAgICAgICAgICAgbiA9IGggPj4+IDA7XHJcbiAgICAgICAgICAgIGggLT0gbjtcclxuICAgICAgICAgICAgaCAqPSBuO1xyXG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcclxuICAgICAgICAgICAgaCAtPSBuO1xyXG4gICAgICAgICAgICBuICs9IGggKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcclxuICAgIH07XHJcbn1cblxuLyoqXG4gKiBTZXR1cCBhIG1vY2sgaGFtbWVyLmpzIG9iamVjdCwgZm9yIHVuaXQgdGVzdGluZy5cbiAqXG4gKiBJbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3ViZXIvZGVjay5nbC9wdWxsLzY1OFxuICpcbiAqIEByZXR1cm5zIHt7b246IG5vb3AsIG9mZjogbm9vcCwgZGVzdHJveTogbm9vcCwgZW1pdDogbm9vcCwgZ2V0OiBnZXR9fVxuICovXG5mdW5jdGlvbiBoYW1tZXJNb2NrKCkge1xuICBjb25zdCBub29wID0gKCkgPT4ge307XG5cbiAgcmV0dXJuIHtcbiAgICBvbjogbm9vcCxcbiAgICBvZmY6IG5vb3AsXG4gICAgZGVzdHJveTogbm9vcCxcbiAgICBlbWl0OiBub29wLFxuXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0OiBub29wLFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBIYW1tZXIkMSA9XG4gIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IHdpbmRvdy5IYW1tZXIgfHwgUmVhbEhhbW1lclxuICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBoYW1tZXIuanMgaXMgb25seSBhdmFpbGFibGUgaW4gYSBicm93c2VyLCBub3QgaW4gbm9kZS5qcy4gUmVwbGFjaW5nIGl0IHdpdGggYSBtb2NrIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIGhhbW1lck1vY2soKTtcbiAgICAgIH07XG5cbi8qKlxuICogVHVybiBhbiBlbGVtZW50IGludG8gYW4gY2xpY2tUb1VzZSBlbGVtZW50LlxuICogV2hlbiBub3QgYWN0aXZlLCB0aGUgZWxlbWVudCBoYXMgYSB0cmFuc3BhcmVudCBvdmVybGF5LiBXaGVuIHRoZSBvdmVybGF5IGlzXG4gKiBjbGlja2VkLCB0aGUgbW9kZSBpcyBjaGFuZ2VkIHRvIGFjdGl2ZS5cbiAqIFdoZW4gYWN0aXZlLCB0aGUgZWxlbWVudCBpcyBkaXNwbGF5ZWQgd2l0aCBhIGJsdWUgYm9yZGVyIGFyb3VuZCBpdCwgYW5kXG4gKiB0aGUgaW50ZXJhY3RpdmUgY29udGVudHMgb2YgdGhlIGVsZW1lbnQgY2FuIGJlIHVzZWQuIFdoZW4gY2xpY2tlZCBvdXRzaWRlXG4gKiB0aGUgZWxlbWVudCwgdGhlIGVsZW1lbnRzIG1vZGUgaXMgY2hhbmdlZCB0byBpbmFjdGl2ZS5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lclxuICogQGNsYXNzIEFjdGl2YXRvclxuICovXG5mdW5jdGlvbiBBY3RpdmF0b3IkMShjb250YWluZXIpIHtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlID0gW107XG5cbiAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcblxuICB0aGlzLl9kb20gPSB7XG4gICAgY29udGFpbmVyLFxuICAgIG92ZXJsYXk6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gIH07XG5cbiAgdGhpcy5fZG9tLm92ZXJsYXkuY2xhc3NMaXN0LmFkZChcInZpcy1vdmVybGF5XCIpO1xuXG4gIHRoaXMuX2RvbS5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZG9tLm92ZXJsYXkpO1xuICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgdGhpcy5fZG9tLm92ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIH0pO1xuXG4gIGNvbnN0IGhhbW1lciA9IEhhbW1lciQxKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgaGFtbWVyLm9uKFwidGFwXCIsIHRoaXMuX29uVGFwT3ZlcmxheS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgIGhhbW1lci5kZXN0cm95KCk7XG4gICAgLy8gRklYTUU6IGNsZWFuaW5nIHVwIGhhbW1lciBpbnN0YW5jZXMgZG9lc24ndCB3b3JrIChUaW1lbGluZSBub3QgcmVtb3ZlZFxuICAgIC8vIGZyb20gbWVtb3J5KVxuICB9KTtcblxuICAvLyBibG9jayBhbGwgdG91Y2ggZXZlbnRzIChleGNlcHQgdGFwKVxuICBjb25zdCBldmVudHMgPSBbXG4gICAgXCJ0YXBcIixcbiAgICBcImRvdWJsZXRhcFwiLFxuICAgIFwicHJlc3NcIixcbiAgICBcInBpbmNoXCIsXG4gICAgXCJwYW5cIixcbiAgICBcInBhbnN0YXJ0XCIsXG4gICAgXCJwYW5tb3ZlXCIsXG4gICAgXCJwYW5lbmRcIixcbiAgXTtcbiAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgaGFtbWVyLm9uKGV2ZW50LCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBhdHRhY2ggYSBjbGljayBldmVudCB0byB0aGUgd2luZG93LCBpbiBvcmRlciB0byBkZWFjdGl2YXRlIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSB0aGUgdGltZWxpbmVcbiAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LmJvZHkpIHtcbiAgICB0aGlzLl9vbkNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIV9oYXNQYXJlbnQoZXZlbnQudGFyZ2V0LCBjb250YWluZXIpKSB7XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBwcmVwYXJlIGVzY2FwZSBrZXkgbGlzdGVuZXIgZm9yIGRlYWN0aXZhdGluZyB3aGVuIGFjdGl2ZVxuICB0aGlzLl9lc2NMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIFwia2V5XCIgaW4gZXZlbnRcbiAgICAgICAgPyBldmVudC5rZXkgPT09IFwiRXNjYXBlXCJcbiAgICAgICAgOiBldmVudC5rZXlDb2RlID09PSAyNyAvKiB0aGUga2V5Q29kZSBpcyBmb3IgSUUxMSAqL1xuICAgICkge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgfVxuICB9O1xufVxuXG4vLyB0dXJuIGludG8gYW4gZXZlbnQgZW1pdHRlclxuRW1pdHRlcihBY3RpdmF0b3IkMS5wcm90b3R5cGUpO1xuXG4vLyBUaGUgY3VycmVudGx5IGFjdGl2ZSBhY3RpdmF0b3JcbkFjdGl2YXRvciQxLmN1cnJlbnQgPSBudWxsO1xuXG4vKipcbiAqIERlc3Ryb3kgdGhlIGFjdGl2YXRvci4gQ2xlYW5zIHVwIGFsbCBjcmVhdGVkIERPTSBhbmQgZXZlbnQgbGlzdGVuZXJzXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmRlYWN0aXZhdGUoKTtcblxuICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2NsZWFudXBRdWV1ZS5zcGxpY2UoMCkucmV2ZXJzZSgpKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBoaWRkZW4sIGVsZW1lbnQgaXMgZGVjb3JhdGVkIHdpdGggYSBibHVlIHNoYWRvdyBib3JkZXJcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICAvLyB3ZSBhbGxvdyBvbmx5IG9uZSBhY3RpdmUgYWN0aXZhdG9yIGF0IGEgdGltZVxuICBpZiAoQWN0aXZhdG9yJDEuY3VycmVudCkge1xuICAgIEFjdGl2YXRvciQxLmN1cnJlbnQuZGVhY3RpdmF0ZSgpO1xuICB9XG4gIEFjdGl2YXRvciQxLmN1cnJlbnQgPSB0aGlzO1xuXG4gIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgdGhpcy5fZG9tLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ2aXMtYWN0aXZlXCIpO1xuXG4gIHRoaXMuZW1pdChcImNoYW5nZVwiKTtcbiAgdGhpcy5lbWl0KFwiYWN0aXZhdGVcIik7XG5cbiAgLy8gdWdseSBoYWNrOiBiaW5kIEVTQyBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnRzLCBhcyB0aGUgTmV0d29yayByZWJpbmRzIGFsbFxuICAvLyBrZXlib2FyZCBldmVudHMgb24gYSAnY2hhbmdlJyBldmVudFxuICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBkaXNwbGF5ZWQgb24gdG9wIG9mIHRoZSBlbGVtZW50XG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB0aGlzLl9kb20ub3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJ2aXMtYWN0aXZlXCIpO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcblxuICB0aGlzLmVtaXQoXCJjaGFuZ2VcIik7XG4gIHRoaXMuZW1pdChcImRlYWN0aXZhdGVcIik7XG59O1xuXG4vKipcbiAqIEhhbmRsZSBhIHRhcCBldmVudDogYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLl9vblRhcE92ZXJsYXkgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICB0aGlzLmFjdGl2YXRlKCk7XG4gIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIHRoZSByZXF1ZXN0ZWQgcGFyZW50IGVsZW1lbnQgc29tZXdoZXJlIGluXG4gKiBpdHMgY2hhaW4gb2YgcGFyZW50IG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwYXJlbnQgaXMgZm91bmQgc29tZXdoZXJlIGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgIGNoYWluIG9mIHBhcmVudCBub2Rlcy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9oYXNQYXJlbnQoZWxlbWVudCwgcGFyZW50KSB7XG4gIHdoaWxlIChlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyB1dGlsaXR5IGZ1bmN0aW9uc1xyXG4vLyBwYXJzZSBBU1AuTmV0IERhdGUgcGF0dGVybixcclxuLy8gZm9yIGV4YW1wbGUgJy9EYXRlKDExOTg5MDg3MTcwNTYpLycgb3IgJy9EYXRlKDExOTg5MDg3MTcwNTYtMDcwMCkvJ1xyXG4vLyBjb2RlIGZyb20gaHR0cDovL21vbWVudGpzLmNvbS9cclxuY29uc3QgQVNQRGF0ZVJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2k7XHJcbi8vIENvbG9yIFJFc1xyXG5jb25zdCBmdWxsSGV4UkUgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pO1xyXG5jb25zdCBzaG9ydEhleFJFID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcclxuY29uc3QgcmdiUkUgPSAvXnJnYlxcKCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqXFwpJC9pO1xyXG5jb25zdCByZ2JhUkUgPSAvXnJnYmFcXCggKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKihbMDFdfDA/XFwuXFxkKykgKlxcKSQvaTtcclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBudW1iZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBudW1iZXIsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgZXZlcnl0aGluZyBpbiB0aGUgRE9NIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIERPTW9iamVjdCAtIE5vZGUgd2hvc2UgY2hpbGQgbm9kZXMgd2lsbCBiZSByZWN1cnNpdmVseSBkZWxldGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVjdXJzaXZlRE9NRGVsZXRlKERPTW9iamVjdCkge1xyXG4gICAgaWYgKERPTW9iamVjdCkge1xyXG4gICAgICAgIHdoaWxlIChET01vYmplY3QuaGFzQ2hpbGROb2RlcygpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gRE9Nb2JqZWN0LmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlRE9NRGVsZXRlKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIERPTW9iamVjdC5yZW1vdmVDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgb2JqZWN0IChub3QgcHJpbWl0aXZlIG9yIG51bGwpLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgbm90IG51bGwgb2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIERhdGUsIG9yIGEgU3RyaW5nIGNvbnRhaW5pbmcgYSBEYXRlLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgRGF0ZSBpbnN0YW5jZSBvciBzdHJpbmcgZGF0ZSByZXByZXNlbnRhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAvLyB0ZXN0IHdoZXRoZXIgdGhpcyBzdHJpbmcgY29udGFpbnMgYSBkYXRlXHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBBU1BEYXRlUmVnZXguZXhlYyh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG4vKipcclxuICogQ29weSBwcm9wZXJ0eSBmcm9tIGIgdG8gYSBpZiBwcm9wZXJ0eSBwcmVzZW50IGluIGEuXHJcbiAqIElmIHByb3BlcnR5IGluIGIgZXhwbGljaXRseSBzZXQgdG8gbnVsbCwgZGVsZXRlIGl0IGlmIGBhbGxvd0RlbGV0aW9uYCBzZXQuXHJcbiAqXHJcbiAqIEludGVybmFsIGhlbHBlciByb3V0aW5lLCBzaG91bGQgbm90IGJlIGV4cG9ydGVkLiBOb3QgYWRkZWQgdG8gYGV4cG9ydHNgIGZvciB0aGF0IHJlYXNvbi5cclxuICpcclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBwcm9wIC0gTmFtZSBvZiBwcm9wZXJ0eSB0byBjb3B5IGZyb20gYiB0byBhLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKSB7XHJcbiAgICBsZXQgZG9EZWxldGlvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUpIHtcclxuICAgICAgICBkb0RlbGV0aW9uID0gYltwcm9wXSA9PT0gbnVsbCAmJiBhW3Byb3BdICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoZG9EZWxldGlvbikge1xyXG4gICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF07IC8vIFJlbWVtYmVyLCB0aGlzIGlzIGEgcmVmZXJlbmNlIGNvcHkhXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEZpbGwgYW4gb2JqZWN0IHdpdGggYSBwb3NzaWJseSBwYXJ0aWFsbHkgZGVmaW5lZCBvdGhlciBvYmplY3QuXHJcbiAqXHJcbiAqIE9ubHkgY29waWVzIHZhbHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgYWxyZWFkeSBwcmVzZW50IGluIGEuXHJcbiAqIFRoYXQgbWVhbnMgYW4gb2JqZWN0IGlzIG5vdCBjcmVhdGVkIG9uIGEgcHJvcGVydHkgaWYgb25seSB0aGUgYiBvYmplY3QgaGFzIGl0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBvYmplY3QgdGhhdCB3aWxsIGhhdmUgaXQncyBwcm9wZXJ0aWVzIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSBiIC0gVGhlIG9iamVjdCB3aXRoIHByb3BlcnR5IHVwZGF0ZXMuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnRpZXMgaW4gYSB0aGF0IGFyZSBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqL1xyXG5mdW5jdGlvbiBmaWxsSWZEZWZpbmVkKGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gTk9URTogaXRlcmF0aW9uIG9mIHByb3BlcnRpZXMgb2YgYVxyXG4gICAgLy8gTk9URTogcHJvdG90eXBlIHByb3BlcnRpZXMgaXRlcmF0ZWQgb3ZlciBhcyB3ZWxsXHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYSkge1xyXG4gICAgICAgIGlmIChiW3Byb3BdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGJbcHJvcF0gPT09IG51bGwgfHwgdHlwZW9mIGJbcHJvcF0gIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIE5vdGU6IHR5cGVvZiBudWxsID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYVByb3AgPSBhW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYlByb3AgPSBiW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGFQcm9wKSAmJiBpc09iamVjdChiUHJvcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsSWZEZWZpbmVkKGFQcm9wLCBiUHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhXHJcbiAqIHRhcmdldCBvYmplY3QuIFJldHVybnMgdGhlIHRhcmdldCBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBjb3B5IHRvLlxyXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXHJcbiAqIEByZXR1cm5zIFRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gKi9cclxuY29uc3QgZXh0ZW5kID0gT2JqZWN0LmFzc2lnbjtcclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIgb3IgYSBzZXJpZXMgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHJlbWFya3NcclxuICogT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZCB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICogQHBhcmFtIHByb3BzIC0gUHJvcGVydGllcyB0byBiZSBjb3BpZWQgdG8gYS5cclxuICogQHBhcmFtIGEgLSBUaGUgdGFyZ2V0LlxyXG4gKiBAcGFyYW0gb3RoZXJzIC0gVGhlIHNvdXJjZXMuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVFeHRlbmQocHJvcHMsIGEsIC4uLm90aGVycykge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFycmF5IHdpdGggcHJvcGVydHkgbmFtZXMgZXhwZWN0ZWQgYXMgZmlyc3QgYXJndW1lbnRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG90aGVyIG9mIG90aGVycykge1xyXG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW3BdO1xyXG4gICAgICAgICAgICBpZiAob3RoZXIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBwcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IG90aGVyW3Byb3BdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWQgdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyByb3V0aW5lIGltcGxpZWQgdGhhdCBtdWx0aXBsZSBzb3VyY2Ugb2JqZWN0cyBjb3VsZFxyXG4gKiBiZSB1c2VkOyBob3dldmVyLCB0aGUgaW1wbGVtZW50YXRpb24gd2FzICoqd3JvbmcqKi4gU2luY2UgbXVsdGlwbGUgKFxcPjEpXHJcbiAqIHNvdXJjZXMgd2VyZW4ndCB1c2VkIGFueXdoZXJlIGluIHRoZSBgdmlzLmpzYCBjb2RlLCB0aGlzIGhhcyBiZWVuIHJlbW92ZWRcclxuICogQHBhcmFtIHByb3BzIC0gTmFtZXMgb2YgZmlyc3QtbGV2ZWwgcHJvcGVydGllcyB0byBjb3B5IG92ZXIuXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZURlZXBFeHRlbmQocHJvcHMsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbcF07XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSkge1xyXG4gICAgICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBmYWxzZSwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYGFgIHdpdGggcHJvcGVydGllcyBvZiBvYmplY3QgYGJgLCBpZ25vcmluZyBwcm9wZXJ0aWVzIHdoaWNoXHJcbiAqIGFyZSBleHBsaWNpdGx5IHNwZWNpZmllZCB0byBiZSBleGNsdWRlZC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhlIHByb3BlcnRpZXMgb2YgYGJgIGFyZSBjb25zaWRlcmVkIGZvciBjb3B5aW5nLiBQcm9wZXJ0aWVzIHdoaWNoIGFyZVxyXG4gKiB0aGVtc2VsdmVzIG9iamVjdHMgYXJlIGFyZSBhbHNvIGV4dGVuZGVkLiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkXHJcbiAqIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKiBAcGFyYW0gcHJvcHNUb0V4Y2x1ZGUgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHdoaWNoIHNob3VsZCAqbm90KiBiZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBhIC0gT2JqZWN0IHRvIGV4dGVuZC5cclxuICogQHBhcmFtIGIgLSBPYmplY3QgdG8gdGFrZSBwcm9wZXJ0aWVzIGZyb20gZm9yIGV4dGVuc2lvbi5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydGllcyBpbiBhIHRoYXQgYXJlIGV4cGxpY2l0bHlcclxuICogc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQocHJvcHNUb0V4Y2x1ZGUsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICAvLyBOT1RFOiBhcnJheSBwcm9wZXJ0aWVzIGhhdmUgYW4gZWxzZS1iZWxvdzsgYXBwYXJlbnRseSwgdGhlcmUgaXMgYSBwcm9ibGVtIGhlcmUuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBiKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSAvLyBIYW5kbGUgbG9jYWwgcHJvcGVydGllcyBvbmx5XHJcbiAgICAgICAgaWYgKHByb3BzVG9FeGNsdWRlLmluY2x1ZGVzKHByb3ApKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH0gLy8gSW4gZXhjbHVzaW9uIGxpc3QsIHNraXBcclxuICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYltwcm9wXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXS5wdXNoKGJbcHJvcF1baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgZXh0ZW5kIGFuIG9iamVjdCBhIHdpdGggdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gcHJvdG9FeHRlbmQgLSBJZiB0cnVlLCB0aGUgcHJvdG90eXBlIHZhbHVlcyB3aWxsIGFsc28gYmUgZXh0ZW5kZWQuXHJcbiAqIChUaGF0IGlzIHRoZSBvcHRpb25zIG9iamVjdHMgdGhhdCBpbmhlcml0IGZyb20gb3RoZXJzIHdpbGwgYWxzbyBnZXQgdGhlXHJcbiAqIGluaGVyaXRlZCBvcHRpb25zKS5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCB0aGUgdmFsdWVzIG9mIGZpZWxkcyB0aGF0IGFyZSBudWxsIHdpbGwgYmUgZGVsZXRlZC5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBFeHRlbmQoYSwgYiwgcHJvdG9FeHRlbmQgPSBmYWxzZSwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYikge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkgfHwgcHJvdG9FeHRlbmQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICAgICBiW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYltwcm9wXSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0gZGVlcEV4dGVuZCh7fSwgYltwcm9wXSwgcHJvdG9FeHRlbmQpOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFbcHJvcF0pID09PSBPYmplY3QucHJvdG90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBwcm90b0V4dGVuZCk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF0uc2xpY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgYWxsIGVsZW1lbnRzIGluIHR3byBhcnJheXMgYXJlIGVxdWFsLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIEZpcnN0IGFycmF5LlxyXG4gKiBAcGFyYW0gYiAtIFNlY29uZCBhcnJheS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBib3RoIGFycmF5cyBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2FtZSBlbGVtZW50cyAoMSA9ICcxJykuXHJcbiAqL1xyXG5mdW5jdGlvbiBlcXVhbEFycmF5KGEsIGIpIHtcclxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBHZXQgdGhlIHR5cGUgb2YgYW4gb2JqZWN0LCBmb3IgZXhhbXBsZSBleHBvcnRzLmdldFR5cGUoW10pIHJldHVybnMgJ0FycmF5Jy5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgRGV0ZWN0ZWQgdHlwZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFR5cGUob2JqZWN0KSB7XHJcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcclxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJTdHJpbmdcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJBcnJheVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJEYXRlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIk9iamVjdFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiU3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZTtcclxufVxyXG4vKipcclxuICogVXNlZCB0byBleHRlbmQgYW4gYXJyYXkgYW5kIGNvcHkgaXQuIFRoaXMgaXMgdXNlZCB0byBwcm9wYWdhdGUgcGF0aHMgcmVjdXJzaXZlbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcnIgLSBGaXJzdCBwYXJ0LlxyXG4gKiBAcGFyYW0gbmV3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgYWFkZGVkIGludG8gdGhlIGFycmF5LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBhcnJheSB3aXRoIGFsbCBpdGVtcyBmcm9tIGFyciBhbmQgbmV3VmFsdWUgKHdoaWNoIGlzIGxhc3QpLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weUFuZEV4dGVuZEFycmF5KGFyciwgbmV3VmFsdWUpIHtcclxuICAgIHJldHVybiBbLi4uYXJyLCBuZXdWYWx1ZV07XHJcbn1cclxuLyoqXHJcbiAqIFVzZWQgdG8gZXh0ZW5kIGFuIGFycmF5IGFuZCBjb3B5IGl0LiBUaGlzIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHBhdGhzIHJlY3Vyc2l2ZWx5LlxyXG4gKlxyXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIGJlIGNvcGllZC5cclxuICogQHJldHVybnMgU2hhbGxvdyBjb3B5IG9mIGFyci5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlBcnJheShhcnIpIHtcclxuICAgIHJldHVybiBhcnIuc2xpY2UoKTtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIGxlZnQgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIGxlZnQgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZUxlZnQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIHJpZ2h0IHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSByaWdodCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlUmlnaHQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSB0b3AgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHRvcCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlVG9wKGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxufVxyXG4vKipcclxuICogQWRkIGEgY2xhc3NOYW1lIHRvIHRoZSBnaXZlbiBlbGVtZW50cyBzdHlsZS5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIGFkZGVkLlxyXG4gKiBAcGFyYW0gY2xhc3NOYW1lcyAtIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lcykge1xyXG4gICAgbGV0IGNsYXNzZXMgPSBlbGVtLmNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBuZXdDbGFzc2VzID0gY2xhc3NOYW1lcy5zcGxpdChcIiBcIik7XHJcbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5jb25jYXQobmV3Q2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhY2xhc3Nlcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xyXG4gICAgfSkpO1xyXG4gICAgZWxlbS5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oXCIgXCIpO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgYSBjbGFzc05hbWUgZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudHMgc3R5bGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjbGFzc05hbWVzIC0gU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNsYXNzTmFtZShlbGVtLCBjbGFzc05hbWVzKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9IGVsZW0uY2xhc3NOYW1lLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IG9sZENsYXNzZXMgPSBjbGFzc05hbWVzLnNwbGl0KFwiIFwiKTtcclxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICFvbGRDbGFzc2VzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XHJcbiAgICB9KTtcclxuICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcclxufVxyXG4vKipcclxuICogRm9yIGVhY2ggbWV0aG9kIGZvciBib3RoIGFycmF5cyBhbmQgb2JqZWN0cy5cclxuICogSW4gY2FzZSBvZiBhbiBhcnJheSwgdGhlIGJ1aWx0LWluIEFycmF5LmZvckVhY2goKSBpcyBhcHBsaWVkICgqKk5vLCBpdCdzIG5vdCEqKikuXHJcbiAqIEluIGNhc2Ugb2YgYW4gT2JqZWN0LCB0aGUgbWV0aG9kIGxvb3BzIG92ZXIgYWxsIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIEFuIE9iamVjdCBvciBBcnJheSB0byBiZSBpdGVyYXRlZCBvdmVyLlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBBcnJheS5mb3JFYWNoLWxpa2UgY2FsbGJhY2suXHJcbiAqL1xyXG5mdW5jdGlvbiBmb3JFYWNoKG9iamVjdCwgY2FsbGJhY2spIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcclxuICAgICAgICAvLyBhcnJheVxyXG4gICAgICAgIGNvbnN0IGxlbiA9IG9iamVjdC5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhvYmplY3RbaV0sIGksIG9iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gb2JqZWN0XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGFuIGFycmF5OiBhbGwgb2JqZWN0cyBwcm9wZXJ0aWVzIGFyZSBwdXQgaW50byB0aGUgYXJyYXkuIFRoZSByZXN1bHRpbmcgYXJyYXkgaXMgdW5vcmRlcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbyAtIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxyXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bm9yZGVyZWQgdmFsdWVzLlxyXG4gKi9cclxuY29uc3QgdG9BcnJheSA9IE9iamVjdC52YWx1ZXM7XHJcbi8qKlxyXG4gKiBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IHdpbGwgYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIGtleSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUgdG8gYmUgYXNzaWduZWQuXHJcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIHdhcyB1cGRhdGVkICh0cnVlKSBvciBhbHJlYWR5IHN0cmljdGx5IHRoZSBzYW1lIGluIHRoZSBvcmlnaW5hbCBvYmplY3QgKGZhbHNlKS5cclxuICovXHJcbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5KG9iamVjdCwga2V5LCB2YWx1ZSkge1xyXG4gICAgaWYgKG9iamVjdFtrZXldICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRocm90dGxlIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBiZSBvbmx5IGV4ZWN1dGVkIG9uY2UgcGVyIGFuaW1hdGlvbiBmcmFtZS5cclxuICpcclxuICogQHBhcmFtIGZuIC0gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxyXG4gKiBAcmV0dXJucyBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uLlxyXG4gKi9cclxuZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcclxuICAgIGxldCBzY2hlZHVsZWQgPSBmYWxzZTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzY2hlZHVsZWQpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm4oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ2FuY2VscyB0aGUgZXZlbnQncyBkZWZhdWx0IGFjdGlvbiBpZiBpdCBpcyBjYW5jZWxhYmxlLCB3aXRob3V0IHN0b3BwaW5nIGZ1cnRoZXIgcHJvcGFnYXRpb24gb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgd2hvc2UgZGVmYXVsdCBhY3Rpb24gc2hvdWxkIGJlIHByZXZlbnRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7XHJcbiAgICB9XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIG5vbi1JRSBicm93c2Vyc1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEdldCBIVE1MIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudC5cclxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgb3IgbnVsbCBpZiBub3Qgb2J0YWluYWJsZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFRhcmdldChldmVudCA9IHdpbmRvdy5ldmVudCkge1xyXG4gICAgLy8gY29kZSBmcm9tIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxyXG4gICAgLy8gQFRPRE86IEV2ZW50VGFyZ2V0IGNhbiBiZSBhbG1vc3QgYW55dGhpbmcsIGlzIGl0IG9rYXkgdG8gcmV0dXJuIG9ubHkgRWxlbWVudHM/XHJcbiAgICBsZXQgdGFyZ2V0ID0gbnVsbDtcclxuICAgIGlmICghZXZlbnQpIDtcclxuICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LnNyY0VsZW1lbnQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC5zcmNFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQubm9kZVR5cGUgIT0gbnVsbCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykge1xyXG4gICAgICAgIC8vIGRlZmVhdCBTYWZhcmkgYnVnXHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG4vKipcclxuICogQ2hlY2sgaWYgZ2l2ZW4gZWxlbWVudCBjb250YWlucyBnaXZlbiBwYXJlbnQgc29tZXdoZXJlIGluIHRoZSBET00gdHJlZS5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiZSB0ZXN0ZWQuXHJcbiAqIEBwYXJhbSBwYXJlbnQgLSBUaGUgYW5jZXN0b3IgKG5vdCBuZWNlc3NhcmlseSBwYXJlbnQpIG9mIHRoZSBlbGVtZW50LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHBhcmVudCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgZWxlbWVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xyXG4gICAgbGV0IGVsZW0gPSBlbGVtZW50O1xyXG4gICAgd2hpbGUgKGVsZW0pIHtcclxuICAgICAgICBpZiAoZWxlbSA9PT0gcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgZWxlbSA9IGVsZW0ucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9ib29sZWFuLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nIGJvb2xlYW4gdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzQm9vbGVhbih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgbnVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvbnVtYmVyLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nICoqYm94ZWQqKiBudW1iZXIgdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzTnVtYmVyKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIHN0cmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3N0cmluZywgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogc3RyaW5nIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1N0cmluZyh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvc2l6ZSwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUgKG51bWJlciArICdweCcpLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1NpemUodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBET00gRWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50byBET00gRWxlbWVudCwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIERPTSBFbGVtZW50LCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0VsZW1lbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxufTtcclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MjM4MzgvcmdiLXRvLWhleC1hbmQtaGV4LXRvLXJnYn1cclxuICogQHBhcmFtIGhleCAtIEhleCBjb2xvciBzdHJpbmcgKDMgb3IgNiBkaWdpdHMsIHdpdGggb3Igd2l0aG91dCAjKS5cclxuICogQHJldHVybnMgUkdCIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvUkdCKGhleCkge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIHN3aXRjaCAoaGV4Lmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHNob3J0SGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0gKyByZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0gKyByZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10gKyByZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBmdWxsSGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBzdHJpbmcgY29sb3IgaW4gaGV4IG9yIFJHQiBmb3JtYXQgYW5kIGFkZHMgdGhlIG9wYWNpdHksIFJHQkEgaXMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLlxyXG4gKlxyXG4gKiBAcGFyYW0gY29sb3IgLSBUaGUgY29sb3Igc3RyaW5nIChoZXgsIFJHQiwgUkdCQSkuXHJcbiAqIEBwYXJhbSBvcGFjaXR5IC0gVGhlIG5ldyBvcGFjaXR5LlxyXG4gKiBAcmV0dXJucyBSR0JBIHN0cmluZywgZm9yIGV4YW1wbGUgJ3JnYmEoMjU1LCAwLCAxMjcsIDAuMyknLlxyXG4gKi9cclxuZnVuY3Rpb24gb3ZlcnJpZGVPcGFjaXR5KGNvbG9yLCBvcGFjaXR5KSB7XHJcbiAgICBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JhXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JcIikpIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBjb2xvclxyXG4gICAgICAgICAgICAuc3Vic3RyKGNvbG9yLmluZGV4T2YoXCIoXCIpICsgMSlcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgICAgIC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYlswXSArIFwiLFwiICsgcmdiWzFdICsgXCIsXCIgKyByZ2JbMl0gKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJnYiA9IGhleFRvUkdCKGNvbG9yKTtcclxuICAgICAgICBpZiAocmdiID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYi5yICsgXCIsXCIgKyByZ2IuZyArIFwiLFwiICsgcmdiLmIgKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcgKGZvciBleGFtcGxlOiAnIzBhY2RjMCcpLlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IZXgocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmV0dXJuIChcIiNcIiArICgoMSA8PCAyNCkgKyAocmVkIDw8IDE2KSArIChncmVlbiA8PCA4KSArIGJsdWUpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XHJcbn1cclxuLyoqXHJcbiAqIFBhcnNlIGEgY29sb3IgcHJvcGVydHkgaW50byBhbiBvYmplY3Qgd2l0aCBib3JkZXIsIGJhY2tncm91bmQsIGFuZCBoaWdobGlnaHQgY29sb3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5wdXRDb2xvciAtIFNob3J0aGFuZCBjb2xvciBzdHJpbmcgb3IgaW5wdXQgY29sb3Igb2JqZWN0LlxyXG4gKiBAcGFyYW0gZGVmYXVsdENvbG9yIC0gRnVsbCBjb2xvciBvYmplY3QgdG8gZmlsbCBpbiBtaXNzaW5nIHZhbHVlcyBpbiBpbnB1dENvbG9yLlxyXG4gKiBAcmV0dXJucyBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0Q29sb3IsIGRlZmF1bHRDb2xvcikge1xyXG4gICAgaWYgKGlzU3RyaW5nKGlucHV0Q29sb3IpKSB7XHJcbiAgICAgICAgbGV0IGNvbG9yU3RyID0gaW5wdXRDb2xvcjtcclxuICAgICAgICBpZiAoaXNWYWxpZFJHQihjb2xvclN0cikpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiID0gY29sb3JTdHJcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoNClcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3JTdHIubGVuZ3RoIC0gNSlcclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIixcIilcclxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29sb3JTdHIgPSBSR0JUb0hleChyZ2JbMF0sIHJnYlsxXSwgcmdiWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVmFsaWRIZXgoY29sb3JTdHIpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzdiA9IGhleFRvSFNWKGNvbG9yU3RyKTtcclxuICAgICAgICAgICAgY29uc3QgbGlnaHRlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBoc3YucyAqIDAuOCxcclxuICAgICAgICAgICAgICAgIHY6IE1hdGgubWluKDEsIGhzdi52ICogMS4wMiksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBNYXRoLm1pbigxLCBoc3YucyAqIDEuMjUpLFxyXG4gICAgICAgICAgICAgICAgdjogaHN2LnYgKiAwLjgsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySGV4ID0gSFNWVG9IZXgoZGFya2VyQ29sb3JIU1YuaCwgZGFya2VyQ29sb3JIU1YucywgZGFya2VyQ29sb3JIU1Yudik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhleCA9IEhTVlRvSGV4KGxpZ2h0ZXJDb2xvckhTVi5oLCBsaWdodGVyQ29sb3JIU1YucywgbGlnaHRlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBob3Zlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChkZWZhdWx0Q29sb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgZGVmYXVsdENvbG9yLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IGRlZmF1bHRDb2xvci5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5ob3ZlciAmJiBpbnB1dENvbG9yLmhvdmVyLmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuYmFja2dyb3VuZCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogaXNTdHJpbmcoaW5wdXRDb2xvci5oaWdobGlnaHQpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcikgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBSR0IgXFw8MCwgMjU1XFw+IGludG8gSFNWIG9iamVjdC5cclxuICpcclxuICogQHJlbWFya3NcclxuICoge0BsaW5rIGh0dHA6Ly93d3cuamF2YXNjcmlwdGVyLm5ldC9mYXEvcmdiMmhzdi5odG19XHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhTViBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBSR0JUb0hTVihyZWQsIGdyZWVuLCBibHVlKSB7XHJcbiAgICByZWQgPSByZWQgLyAyNTU7XHJcbiAgICBncmVlbiA9IGdyZWVuIC8gMjU1O1xyXG4gICAgYmx1ZSA9IGJsdWUgLyAyNTU7XHJcbiAgICBjb25zdCBtaW5SR0IgPSBNYXRoLm1pbihyZWQsIE1hdGgubWluKGdyZWVuLCBibHVlKSk7XHJcbiAgICBjb25zdCBtYXhSR0IgPSBNYXRoLm1heChyZWQsIE1hdGgubWF4KGdyZWVuLCBibHVlKSk7XHJcbiAgICAvLyBCbGFjay1ncmF5LXdoaXRlXHJcbiAgICBpZiAobWluUkdCID09PSBtYXhSR0IpIHtcclxuICAgICAgICByZXR1cm4geyBoOiAwLCBzOiAwLCB2OiBtaW5SR0IgfTtcclxuICAgIH1cclxuICAgIC8vIENvbG9ycyBvdGhlciB0aGFuIGJsYWNrLWdyYXktd2hpdGU6XHJcbiAgICBjb25zdCBkID0gcmVkID09PSBtaW5SR0IgPyBncmVlbiAtIGJsdWUgOiBibHVlID09PSBtaW5SR0IgPyByZWQgLSBncmVlbiA6IGJsdWUgLSByZWQ7XHJcbiAgICBjb25zdCBoID0gcmVkID09PSBtaW5SR0IgPyAzIDogYmx1ZSA9PT0gbWluUkdCID8gMSA6IDU7XHJcbiAgICBjb25zdCBodWUgPSAoNjAgKiAoaCAtIGQgLyAobWF4UkdCIC0gbWluUkdCKSkpIC8gMzYwO1xyXG4gICAgY29uc3Qgc2F0dXJhdGlvbiA9IChtYXhSR0IgLSBtaW5SR0IpIC8gbWF4UkdCO1xyXG4gICAgY29uc3QgdmFsdWUgPSBtYXhSR0I7XHJcbiAgICByZXR1cm4geyBoOiBodWUsIHM6IHNhdHVyYXRpb24sIHY6IHZhbHVlIH07XHJcbn1cclxuLyoqXHJcbiAqIFNwbGl0IGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBpbnRvIGFuIG9iamVjdCB3aXRoIGtleS92YWx1ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gQ1NTIHNvdXJjZSBjb2RlIHRvIHNwbGl0IGludG8ga2V5L3ZhbHVlIG9iamVjdC5cclxuICogQHJldHVybnMgS2V5L3ZhbHVlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHtAbGluayBjc3NUZXh0fS5cclxuICovXHJcbmZ1bmN0aW9uIHNwbGl0Q1NTVGV4dChjc3NUZXh0KSB7XHJcbiAgICBjb25zdCB0bXBFbGxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBjb25zdCBzdHlsZXMgPSB7fTtcclxuICAgIHRtcEVsbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bXBFbGxlbWVudC5zdHlsZS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIHN0eWxlc1t0bXBFbGxlbWVudC5zdHlsZVtpXV0gPSB0bXBFbGxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRtcEVsbGVtZW50LnN0eWxlW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZXM7XHJcbn1cclxuLyoqXHJcbiAqIEFwcGVuZCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgdG8gYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0aGF0IHdpbGwgcmVjZWl2ZSBuZXcgc3R5bGVzLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgYXBwZW5kZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDc3NUZXh0KGVsZW1lbnQsIGNzc1RleHQpIHtcclxuICAgIGNvbnN0IGNzc1N0eWxlID0gc3BsaXRDU1NUZXh0KGNzc1RleHQpO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3NzU3R5bGUpKSB7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCBzdHlsZXMgc2hvdWxkIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gVGhlIHN0eWxlcyB0byBiZSByZW1vdmVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tamlqYWNrc29uLzUzMTEyNTZ9XHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb1JHQihoLCBzLCB2KSB7XHJcbiAgICBsZXQgcjtcclxuICAgIGxldCBnO1xyXG4gICAgbGV0IGI7XHJcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihoICogNik7XHJcbiAgICBjb25zdCBmID0gaCAqIDYgLSBpO1xyXG4gICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xyXG4gICAgY29uc3QgcSA9IHYgKiAoMSAtIGYgKiBzKTtcclxuICAgIGNvbnN0IHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyk7XHJcbiAgICBzd2l0Y2ggKGkgJSA2KSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAociA9IHYpLCAoZyA9IHQpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIChyID0gcSksIChnID0gdiksIChiID0gcCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSB2KSwgKGIgPSB0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAociA9IHApLCAoZyA9IHEpLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIChyID0gdCksIChnID0gcCksIChiID0gdik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSBwKSwgKGIgPSBxKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHI6IE1hdGguZmxvb3IociAqIDI1NSksXHJcbiAgICAgICAgZzogTWF0aC5mbG9vcihnICogMjU1KSxcclxuICAgICAgICBiOiBNYXRoLmZsb29yKGIgKiAyNTUpLFxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb0hleChoLCBzLCB2KSB7XHJcbiAgICBjb25zdCByZ2IgPSBIU1ZUb1JHQihoLCBzLCB2KTtcclxuICAgIHJldHVybiBSR0JUb0hleChyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBoZXggY29sb3Igc3RyaW5nIGludG8gSFNWIFxcPDAsIDFcXD4uXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gaGV4VG9IU1YoaGV4KSB7XHJcbiAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihoZXgpO1xyXG4gICAgaWYgKCFyZ2IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHtoZXh9JyBpcyBub3QgYSB2YWxpZCBjb2xvci5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSR0JUb0hTVihyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgaGV4IGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIGhleCAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkSGV4KGhleCkge1xyXG4gICAgY29uc3QgaXNPayA9IC8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KGhleCk7XHJcbiAgICByZXR1cm4gaXNPaztcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCIGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHJnYiAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCKHJnYikge1xyXG4gICAgcmV0dXJuIHJnYlJFLnRlc3QocmdiKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCQSBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2JhIC0gVW5rbm93biBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiBhIGNvbG9yLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzVmFsaWRSR0JBKHJnYmEpIHtcclxuICAgIHJldHVybiByZ2JhUkUudGVzdChyZ2JhKTtcclxufVxyXG4vKipcclxuICogVGhpcyByZWN1cnNpdmVseSByZWRpcmVjdHMgdGhlIHByb3RvdHlwZSBvZiBKU09OIG9iamVjdHMgdG8gdGhlIHJlZmVyZW5jZU9iamVjdC5cclxuICogVGhpcyBpcyB1c2VkIGZvciBkZWZhdWx0IG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWVsZHMgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHRvIGJlIGJyaWRnZWQuXHJcbiAqIEBwYXJhbSByZWZlcmVuY2VPYmplY3QgLSBUaGUgb3JpZ2luYWwgb2JqZWN0LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVCcmlkZ2VPYmplY3QoZmllbGRzLCByZWZlcmVuY2VPYmplY3QpIHtcclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIHJlZmVyZW5jZU9iamVjdCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIC8vICEhISB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICBjb25zdCBvYmplY3RUbyA9IE9iamVjdC5jcmVhdGUocmVmZXJlbmNlT2JqZWN0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZmVyZW5jZU9iamVjdCwgZmllbGRzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0VG9bZmllbGRzW2ldXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFRvO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgVGhlIEVsZW1lbnQgaWYgdGhlIHJlZmVyZW5jZU9iamVjdCBpcyBhbiBFbGVtZW50LCBvciBhIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiByZWZlcmVuY2VPYmplY3QgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KSB7XHJcbiAgICAgICAgLy8gQXZvaWQgYnJpZGdpbmcgRE9NIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlT2JqZWN0O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGkpKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ldID09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFRvW2ldID0gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0VG87XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgc3RhYmxlIHNvcnQgaW1wbGVtZW50YXRpb24sIHZlcnkgZmFzdCBmb3IgcHJlc29ydGVkIGRhdGEuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIGFycmF5IHRvIGJlIHNvcnRlZCAoaW4tcGxhY2UpLlxyXG4gKiBAcGFyYW0gY29tcGFyZSAtIEFuIG9yZGVyIGNvbXBhcmF0b3IuXHJcbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gaW5zZXJ0U29ydChhLCBjb21wYXJlKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBrID0gYVtpXTtcclxuICAgICAgICBsZXQgajtcclxuICAgICAgICBmb3IgKGogPSBpOyBqID4gMCAmJiBjb21wYXJlKGssIGFbaiAtIDFdKSA8IDA7IGotLSkge1xyXG4gICAgICAgICAgICBhW2pdID0gYVtqIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFbal0gPSBrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIG9wdGlvbnMgb2Ygc3Vib2JqZWN0cyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXHJcbiAqXHJcbiAqIEEgcmVxdWlyZW1lbnQgb2YgdGhlc2Ugc3Vib2JqZWN0cyBpcyB0aGF0IHRoZXkgaGF2ZSBhbiAnZW5hYmxlZCcgZWxlbWVudFxyXG4gKiB3aGljaCBpcyBvcHRpb25hbCBmb3IgdGhlIHVzZXIgYnV0IG1hbmRhdG9yeSBmb3IgdGhlIHByb2dyYW0uXHJcbiAqXHJcbiAqIFRoZSBhZGRlZCB2YWx1ZSBoZXJlIG9mIHRoZSBtZXJnZSBpcyB0aGF0IG9wdGlvbiAnZW5hYmxlZCcgaXMgc2V0IGFzIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWVyZ2VUYXJnZXQgLSBFaXRoZXIgdGhpcy5vcHRpb25zIG9yIHRoZSBvcHRpb25zIHVzZWQgZm9yIHRoZSBncm91cHMuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICogQHBhcmFtIG9wdGlvbiAtIE9wdGlvbiBrZXkgaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQuXHJcbiAqIEBwYXJhbSBnbG9iYWxPcHRpb25zIC0gR2xvYmFsIG9wdGlvbnMsIHBhc3NlZCBpbiB0byBkZXRlcm1pbmUgdmFsdWUgb2Ygb3B0aW9uICdlbmFibGVkJy5cclxuICovXHJcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhtZXJnZVRhcmdldCwgb3B0aW9ucywgb3B0aW9uLCBnbG9iYWxPcHRpb25zID0ge30pIHtcclxuICAgIC8vIExvY2FsIGhlbHBlcnNcclxuICAgIGNvbnN0IGlzUHJlc2VudCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIG9iaiAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIjtcclxuICAgIH07XHJcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzQ0OTEyODcvMTIyMzUzMVxyXG4gICAgY29uc3QgaXNFbXB0eSA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHggaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCB4KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8vIEd1YXJkc1xyXG4gICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgbWVyZ2VUYXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzUHJlc2VudChvcHRpb24pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbiBtdXN0IGhhdmUgYSB2YWx1ZVwiKTtcclxuICAgIH1cclxuICAgIGlmICghaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgZ2xvYmFsT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdFwiKTtcclxuICAgIH1cclxuICAgIC8vXHJcbiAgICAvLyBBY3R1YWwgbWVyZ2Ugcm91dGluZSwgc2VwYXJhdGVkIGZyb20gbWFpbiBsb2dpY1xyXG4gICAgLy8gT25seSBhIHNpbmdsZSBsZXZlbCBvZiBvcHRpb25zIGlzIG1lcmdlZC4gRGVlcGVyIGxldmVscyBhcmUgcmVmJ2QuIFRoaXMgbWF5IGFjdHVhbGx5IGJlIGFuIGlzc3VlLlxyXG4gICAgLy9cclxuICAgIGNvbnN0IGRvTWVyZ2UgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KHRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbb3B0aW9uXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzcmMgPSBvcHRpb25zW29wdGlvbl07XHJcbiAgICAgICAgY29uc3QgZHN0ID0gdGFyZ2V0W29wdGlvbl07XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHNyYykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNyYywgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRzdFtwcm9wXSA9IHNyY1twcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBMb2NhbCBpbml0aWFsaXphdGlvblxyXG4gICAgY29uc3Qgc3JjT3B0aW9uID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgY29uc3QgZ2xvYmFsUGFzc2VkID0gaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykgJiYgIWlzRW1wdHkoZ2xvYmFsT3B0aW9ucyk7XHJcbiAgICBjb25zdCBnbG9iYWxPcHRpb24gPSBnbG9iYWxQYXNzZWQgPyBnbG9iYWxPcHRpb25zW29wdGlvbl0gOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBnbG9iYWxFbmFibGVkID0gZ2xvYmFsT3B0aW9uID8gZ2xvYmFsT3B0aW9uLmVuYWJsZWQgOiB1bmRlZmluZWQ7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTWFpbiByb3V0aW5lXHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgaWYgKHNyY09wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNyY09wdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gc3JjT3B0aW9uO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChzcmNPcHRpb24gPT09IG51bGwgJiYgIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgLy8gSWYgcG9zc2libGUsIGV4cGxpY2l0IGNvcHkgZnJvbSBnbG9iYWxzXHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChnbG9iYWxPcHRpb24pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KHNyY09wdGlvbikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gRW5zdXJlIHRoYXQgJ2VuYWJsZWQnIGlzIHByb3Blcmx5IHNldC4gSXQgaXMgcmVxdWlyZWQgaW50ZXJuYWxseVxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB2YWx1ZSBmcm9tIG9wdGlvbnMgd2lsbCBhbHdheXMgb3ZlcndyaXRlIHRoZSBleGlzdGluZyB2YWx1ZVxyXG4gICAgLy9cclxuICAgIGxldCBlbmFibGVkID0gdHJ1ZTsgLy8gZGVmYXVsdCB2YWx1ZVxyXG4gICAgaWYgKHNyY09wdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBlbmFibGVkID0gc3JjT3B0aW9uLmVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBUYWtlIGZyb20gZ2xvYmFscywgaWYgcHJlc2VudFxyXG4gICAgICAgIGlmIChnbG9iYWxFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZCA9IGdsb2JhbE9wdGlvbi5lbmFibGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRvTWVyZ2UobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbik7XHJcbiAgICBtZXJnZVRhcmdldFtvcHRpb25dLmVuYWJsZWQgPSBlbmFibGVkO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBiaW5hcnkgc2VhcmNoIGZvciBhIHZpc2libGUgaXRlbSBpbiBhIHNvcnRlZCBsaXN0LiBJZiB3ZSBmaW5kIGEgdmlzaWJsZSBpdGVtLCB0aGUgY29kZSB0aGF0IHVzZXNcclxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHRoZW4gaXRlcmF0ZSBpbiBib3RoIGRpcmVjdGlvbnMgb3ZlciB0aGlzIHNvcnRlZCBsaXN0IHRvIGZpbmQgYWxsIHZpc2libGUgaXRlbXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBJdGVtcyBvcmRlcmVkIGJ5IHN0YXJ0LlxyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIC0xIGlzIGxvd2VyLCAwIGlzIGVxdWFsLCAxIGlzIGhpZ2hlci5cclxuICogQHBhcmFtIGZpZWxkIC0gUHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdKS5cclxuICogQHBhcmFtIGZpZWxkMiAtIFNlY29uZCBwcm9wZXJ0eSBuYW1lIG9uIGFuIGl0ZW0gKFRoYXQgaXMgaXRlbVtmaWVsZF1bZmllbGQyXSkuXHJcbiAqIEByZXR1cm5zIEluZGV4IG9mIHRoZSBmb3VuZCBpdGVtIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoQ3VzdG9tKG9yZGVyZWRJdGVtcywgY29tcGFyYXRvciwgZmllbGQsIGZpZWxkMikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQyID09PSB1bmRlZmluZWQgPyBpdGVtW2ZpZWxkXSA6IGl0ZW1bZmllbGRdW2ZpZWxkMl07XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGppaGFhLCBmb3VuZCBhIHZpc2libGUgaXRlbSFcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2VhcmNoUmVzdWx0ID09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBzbWFsbCAtLT4gaW5jcmVhc2UgbG93XHJcbiAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSBzcGVjaWZpYyB2YWx1ZSBpbiBhIHNvcnRlZCBhcnJheS5cclxuICogSWYgaXQgZG9lcyBub3QgZXhpc3QgYnV0IGlzIGluIGJldHdlZW4gb2YgdHdvIHZhbHVlcywgd2UgcmV0dXJuIGVpdGhlciB0aGVcclxuICogb25lIGJlZm9yZSBvciB0aGUgb25lIGFmdGVyLCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dCBJZiBpdCBpcyBmb3VuZCwgd2VcclxuICogcmV0dXJuIHRoZSBpbmRleCwgZWxzZSAtMS5cclxuICpcclxuICogQHBhcmFtIG9yZGVyZWRJdGVtcyAtIFNvcnRlZCBhcnJheS5cclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSBzZWFyY2hlZCB2YWx1ZS5cclxuICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgaW4gaXRlbXMgdG8gYmUgc2VhcmNoZWQuXHJcbiAqIEBwYXJhbSBzaWRlUHJlZmVyZW5jZSAtIElmIHRoZSB0YXJnZXQgaXMgYmV0d2VlbiB0d28gdmFsdWVzLCBzaG91bGQgdGhlIGluZGV4IG9mIHRoZSBiZWZvcmUgb3IgdGhlIGFmdGVyIGJlIHJldHVybmVkP1xyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIEFuIG9wdGlvbmFsIGNvbXBhcmF0b3IsIHJldHVybmluZyAtMSwgMCwgMSBmb3IgXFw8LCA9PT0sIFxcPi5cclxuICogQHJldHVybnMgVGhlIGluZGV4IG9mIGZvdW5kIHZhbHVlIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoVmFsdWUob3JkZXJlZEl0ZW1zLCB0YXJnZXQsIGZpZWxkLCBzaWRlUHJlZmVyZW5jZSwgY29tcGFyYXRvcikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgcHJldlZhbHVlO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IG5leHRWYWx1ZTtcclxuICAgIGxldCBtaWRkbGU7XHJcbiAgICBjb21wYXJhdG9yID1cclxuICAgICAgICBjb21wYXJhdG9yICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGNvbXBhcmF0b3JcclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYiA/IDAgOiBhIDwgYiA/IC0xIDogMTtcclxuICAgICAgICAgICAgfTtcclxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKSB7XHJcbiAgICAgICAgLy8gZ2V0IGEgbmV3IGd1ZXNzXHJcbiAgICAgICAgbWlkZGxlID0gTWF0aC5mbG9vcigwLjUgKiAoaGlnaCArIGxvdykpO1xyXG4gICAgICAgIHByZXZWYWx1ZSA9IG9yZGVyZWRJdGVtc1tNYXRoLm1heCgwLCBtaWRkbGUgLSAxKV1bZmllbGRdO1xyXG4gICAgICAgIHZhbHVlID0gb3JkZXJlZEl0ZW1zW21pZGRsZV1bZmllbGRdO1xyXG4gICAgICAgIG5leHRWYWx1ZSA9XHJcbiAgICAgICAgICAgIG9yZGVyZWRJdGVtc1tNYXRoLm1pbihvcmRlcmVkSXRlbXMubGVuZ3RoIC0gMSwgbWlkZGxlICsgMSldW2ZpZWxkXTtcclxuICAgICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIHRoZSB0YXJnZXRcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcihwcmV2VmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBwcmV2aW91cyBhbmQgdGhlIGN1cnJlbnRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCIgPyBNYXRoLm1heCgwLCBtaWRkbGUgLSAxKSA6IG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA8IDAgJiZcclxuICAgICAgICAgICAgY29tcGFyYXRvcihuZXh0VmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dFxyXG4gICAgICAgICAgICByZXR1cm4gc2lkZVByZWZlcmVuY2UgPT0gXCJiZWZvcmVcIlxyXG4gICAgICAgICAgICAgICAgPyBtaWRkbGVcclxuICAgICAgICAgICAgICAgIDogTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGlkbnQgZmluZCB0aGUgdGFyZ2V0LCB3ZSBuZWVkIHRvIGNoYW5nZSBvdXIgYm91bmRhcmllcy5cclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICAgICAgbG93ID0gbWlkZGxlICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBiaWcgLS0+IGRlY3JlYXNlIGhpZ2hcclxuICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgfVxyXG4gICAgLy8gZGlkbnQgZmluZCBhbnl0aGluZy4gUmV0dXJuIC0xLlxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbi8qXHJcbiAqIEVhc2luZyBGdW5jdGlvbnMuXHJcbiAqIE9ubHkgY29uc2lkZXJpbmcgdGhlIHQgdmFsdWUgZm9yIHRoZSByYW5nZSBbMCwgMV0gPT4gWzAsIDFdLlxyXG4gKlxyXG4gKiBJbnNwaXJhdGlvbjogZnJvbSBodHRwOi8vZ2l6bWEuY29tL2Vhc2luZy9cclxuICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ3JlLzE2NTAyOTRcclxuICovXHJcbmNvbnN0IGVhc2luZ0Z1bmN0aW9ucyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgbm8gZWFzaW5nIGFuZCBubyBhY2NlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBsaW5lYXIodCkge1xyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5RdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiAoMiAtIHQpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDIgKiB0ICogdCA6IC0xICsgKDQgLSAyICogdCkgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5DdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRDdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gNCAqIHQgKiB0ICogdCA6ICh0IC0gMSkgKiAoMiAqIHQgLSAyKSAqICgyICogdCAtIDIpICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gMSAtIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gOCAqIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgKyAtLXQgKiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAxNiAqIHQgKiB0ICogdCAqIHQgKiB0IDogMSArIDE2ICogLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBFeHBlcmltZW50YWx5IGNvbXB1dGUgdGhlIHdpZHRoIG9mIHRoZSBzY3JvbGxiYXIgZm9yIHRoaXMgYnJvd3Nlci5cclxuICpcclxuICogQHJldHVybnMgVGhlIHdpZHRoIGluIHBpeGVscy5cclxuICovXHJcbmZ1bmN0aW9uIGdldFNjcm9sbEJhcldpZHRoKCkge1xyXG4gICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgIGlubmVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSBcIjIwMHB4XCI7XHJcbiAgICBjb25zdCBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBvdXRlci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgIG91dGVyLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuc3R5bGUud2lkdGggPSBcIjIwMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5oZWlnaHQgPSBcIjE1MHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcbiAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcclxuICAgIGNvbnN0IHcxID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwic2Nyb2xsXCI7XHJcbiAgICBsZXQgdzIgPSBpbm5lci5vZmZzZXRXaWR0aDtcclxuICAgIGlmICh3MSA9PSB3Mikge1xyXG4gICAgICAgIHcyID0gb3V0ZXIuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyKTtcclxuICAgIHJldHVybiB3MSAtIHcyO1xyXG59XHJcbi8vIEBUT0RPOiBUaGlzIGRvZXNuJ3Qgd29yayBwcm9wZXJseS5cclxuLy8gSXQgd29ya3Mgb25seSBmb3Igc2luZ2xlIHByb3BlcnR5IG9iamVjdHMsXHJcbi8vIG90aGVyd2lzZSBpdCBjb21iaW5lcyBhbGwgb2YgdGhlIHR5cGVzIGluIGEgdW5pb24uXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBWMT4gKFxyXG4vLyAgIHBpbGU6IFJlY29yZDxLMSwgdW5kZWZpbmVkIHwgVjE+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBLMSB8IFtLMV1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjFcclxuLy8gZXhwb3J0IGZ1bmN0aW9uIHRvcE1vc3Q8SzEgZXh0ZW5kcyBzdHJpbmcsIEsyIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjI+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgSzMgZXh0ZW5kcyBzdHJpbmcsIFYxLCBWMiwgVjM+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMiB8IFJlY29yZDxLMywgdW5kZWZpbmVkIHwgVjM+Pj5bXSxcclxuLy8gICBhY2Nlc3NvcnM6IFtLMSwgSzIsIEszXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyIHwgVjNcclxuLyoqXHJcbiAqIEdldCB0aGUgdG9wIG1vc3QgcHJvcGVydHkgdmFsdWUgZnJvbSBhIHBpbGUgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHBhcmFtIHBpbGUgLSBBcnJheSBvZiBvYmplY3RzLCBubyByZXF1aXJlZCBmb3JtYXQuXHJcbiAqIEBwYXJhbSBhY2Nlc3NvcnMgLSBBcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cclxuICogRm9yIGV4YW1wbGUgYG9iamVjdFsnZm9vJ11bJ2JhciddYCDihpIgYFsnZm9vJywgJ2JhciddYC5cclxuICogQHJldHVybnMgVmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpdGggZ2l2ZW4gYWNjZXNzb3JzIHBhdGggZnJvbSB0aGUgZmlyc3QgcGlsZSBpdGVtIHdoZXJlIGl0J3Mgbm90IHVuZGVmaW5lZC5cclxuICovXHJcbmZ1bmN0aW9uIHRvcE1vc3QocGlsZSwgYWNjZXNzb3JzKSB7XHJcbiAgICBsZXQgY2FuZGlkYXRlO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjY2Vzc29ycykpIHtcclxuICAgICAgICBhY2Nlc3NvcnMgPSBbYWNjZXNzb3JzXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHBpbGUpIHtcclxuICAgICAgICBpZiAobWVtYmVyKSB7XHJcbiAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG1lbWJlclthY2Nlc3NvcnNbMF1dO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFjY2Vzc29ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZVthY2Nlc3NvcnNbaV1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjYW5kaWRhdGU7XHJcbn1cblxuY29uc3QgaHRtbENvbG9ycyA9IHtcbiAgYmxhY2s6IFwiIzAwMDAwMFwiLFxuICBuYXZ5OiBcIiMwMDAwODBcIixcbiAgZGFya2JsdWU6IFwiIzAwMDA4QlwiLFxuICBtZWRpdW1ibHVlOiBcIiMwMDAwQ0RcIixcbiAgYmx1ZTogXCIjMDAwMEZGXCIsXG4gIGRhcmtncmVlbjogXCIjMDA2NDAwXCIsXG4gIGdyZWVuOiBcIiMwMDgwMDBcIixcbiAgdGVhbDogXCIjMDA4MDgwXCIsXG4gIGRhcmtjeWFuOiBcIiMwMDhCOEJcIixcbiAgZGVlcHNreWJsdWU6IFwiIzAwQkZGRlwiLFxuICBkYXJrdHVycXVvaXNlOiBcIiMwMENFRDFcIixcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IFwiIzAwRkE5QVwiLFxuICBsaW1lOiBcIiMwMEZGMDBcIixcbiAgc3ByaW5nZ3JlZW46IFwiIzAwRkY3RlwiLFxuICBhcXVhOiBcIiMwMEZGRkZcIixcbiAgY3lhbjogXCIjMDBGRkZGXCIsXG4gIG1pZG5pZ2h0Ymx1ZTogXCIjMTkxOTcwXCIsXG4gIGRvZGdlcmJsdWU6IFwiIzFFOTBGRlwiLFxuICBsaWdodHNlYWdyZWVuOiBcIiMyMEIyQUFcIixcbiAgZm9yZXN0Z3JlZW46IFwiIzIyOEIyMlwiLFxuICBzZWFncmVlbjogXCIjMkU4QjU3XCIsXG4gIGRhcmtzbGF0ZWdyYXk6IFwiIzJGNEY0RlwiLFxuICBsaW1lZ3JlZW46IFwiIzMyQ0QzMlwiLFxuICBtZWRpdW1zZWFncmVlbjogXCIjM0NCMzcxXCIsXG4gIHR1cnF1b2lzZTogXCIjNDBFMEQwXCIsXG4gIHJveWFsYmx1ZTogXCIjNDE2OUUxXCIsXG4gIHN0ZWVsYmx1ZTogXCIjNDY4MkI0XCIsXG4gIGRhcmtzbGF0ZWJsdWU6IFwiIzQ4M0Q4QlwiLFxuICBtZWRpdW10dXJxdW9pc2U6IFwiIzQ4RDFDQ1wiLFxuICBpbmRpZ286IFwiIzRCMDA4MlwiLFxuICBkYXJrb2xpdmVncmVlbjogXCIjNTU2QjJGXCIsXG4gIGNhZGV0Ymx1ZTogXCIjNUY5RUEwXCIsXG4gIGNvcm5mbG93ZXJibHVlOiBcIiM2NDk1RURcIixcbiAgbWVkaXVtYXF1YW1hcmluZTogXCIjNjZDREFBXCIsXG4gIGRpbWdyYXk6IFwiIzY5Njk2OVwiLFxuICBzbGF0ZWJsdWU6IFwiIzZBNUFDRFwiLFxuICBvbGl2ZWRyYWI6IFwiIzZCOEUyM1wiLFxuICBzbGF0ZWdyYXk6IFwiIzcwODA5MFwiLFxuICBsaWdodHNsYXRlZ3JheTogXCIjNzc4ODk5XCIsXG4gIG1lZGl1bXNsYXRlYmx1ZTogXCIjN0I2OEVFXCIsXG4gIGxhd25ncmVlbjogXCIjN0NGQzAwXCIsXG4gIGNoYXJ0cmV1c2U6IFwiIzdGRkYwMFwiLFxuICBhcXVhbWFyaW5lOiBcIiM3RkZGRDRcIixcbiAgbWFyb29uOiBcIiM4MDAwMDBcIixcbiAgcHVycGxlOiBcIiM4MDAwODBcIixcbiAgb2xpdmU6IFwiIzgwODAwMFwiLFxuICBncmF5OiBcIiM4MDgwODBcIixcbiAgc2t5Ymx1ZTogXCIjODdDRUVCXCIsXG4gIGxpZ2h0c2t5Ymx1ZTogXCIjODdDRUZBXCIsXG4gIGJsdWV2aW9sZXQ6IFwiIzhBMkJFMlwiLFxuICBkYXJrcmVkOiBcIiM4QjAwMDBcIixcbiAgZGFya21hZ2VudGE6IFwiIzhCMDA4QlwiLFxuICBzYWRkbGVicm93bjogXCIjOEI0NTEzXCIsXG4gIGRhcmtzZWFncmVlbjogXCIjOEZCQzhGXCIsXG4gIGxpZ2h0Z3JlZW46IFwiIzkwRUU5MFwiLFxuICBtZWRpdW1wdXJwbGU6IFwiIzkzNzBEOFwiLFxuICBkYXJrdmlvbGV0OiBcIiM5NDAwRDNcIixcbiAgcGFsZWdyZWVuOiBcIiM5OEZCOThcIixcbiAgZGFya29yY2hpZDogXCIjOTkzMkNDXCIsXG4gIHllbGxvd2dyZWVuOiBcIiM5QUNEMzJcIixcbiAgc2llbm5hOiBcIiNBMDUyMkRcIixcbiAgYnJvd246IFwiI0E1MkEyQVwiLFxuICBkYXJrZ3JheTogXCIjQTlBOUE5XCIsXG4gIGxpZ2h0Ymx1ZTogXCIjQUREOEU2XCIsXG4gIGdyZWVueWVsbG93OiBcIiNBREZGMkZcIixcbiAgcGFsZXR1cnF1b2lzZTogXCIjQUZFRUVFXCIsXG4gIGxpZ2h0c3RlZWxibHVlOiBcIiNCMEM0REVcIixcbiAgcG93ZGVyYmx1ZTogXCIjQjBFMEU2XCIsXG4gIGZpcmVicmljazogXCIjQjIyMjIyXCIsXG4gIGRhcmtnb2xkZW5yb2Q6IFwiI0I4ODYwQlwiLFxuICBtZWRpdW1vcmNoaWQ6IFwiI0JBNTVEM1wiLFxuICByb3N5YnJvd246IFwiI0JDOEY4RlwiLFxuICBkYXJra2hha2k6IFwiI0JEQjc2QlwiLFxuICBzaWx2ZXI6IFwiI0MwQzBDMFwiLFxuICBtZWRpdW12aW9sZXRyZWQ6IFwiI0M3MTU4NVwiLFxuICBpbmRpYW5yZWQ6IFwiI0NENUM1Q1wiLFxuICBwZXJ1OiBcIiNDRDg1M0ZcIixcbiAgY2hvY29sYXRlOiBcIiNEMjY5MUVcIixcbiAgdGFuOiBcIiNEMkI0OENcIixcbiAgbGlnaHRncmV5OiBcIiNEM0QzRDNcIixcbiAgcGFsZXZpb2xldHJlZDogXCIjRDg3MDkzXCIsXG4gIHRoaXN0bGU6IFwiI0Q4QkZEOFwiLFxuICBvcmNoaWQ6IFwiI0RBNzBENlwiLFxuICBnb2xkZW5yb2Q6IFwiI0RBQTUyMFwiLFxuICBjcmltc29uOiBcIiNEQzE0M0NcIixcbiAgZ2FpbnNib3JvOiBcIiNEQ0RDRENcIixcbiAgcGx1bTogXCIjRERBMEREXCIsXG4gIGJ1cmx5d29vZDogXCIjREVCODg3XCIsXG4gIGxpZ2h0Y3lhbjogXCIjRTBGRkZGXCIsXG4gIGxhdmVuZGVyOiBcIiNFNkU2RkFcIixcbiAgZGFya3NhbG1vbjogXCIjRTk5NjdBXCIsXG4gIHZpb2xldDogXCIjRUU4MkVFXCIsXG4gIHBhbGVnb2xkZW5yb2Q6IFwiI0VFRThBQVwiLFxuICBsaWdodGNvcmFsOiBcIiNGMDgwODBcIixcbiAga2hha2k6IFwiI0YwRTY4Q1wiLFxuICBhbGljZWJsdWU6IFwiI0YwRjhGRlwiLFxuICBob25leWRldzogXCIjRjBGRkYwXCIsXG4gIGF6dXJlOiBcIiNGMEZGRkZcIixcbiAgc2FuZHlicm93bjogXCIjRjRBNDYwXCIsXG4gIHdoZWF0OiBcIiNGNURFQjNcIixcbiAgYmVpZ2U6IFwiI0Y1RjVEQ1wiLFxuICB3aGl0ZXNtb2tlOiBcIiNGNUY1RjVcIixcbiAgbWludGNyZWFtOiBcIiNGNUZGRkFcIixcbiAgZ2hvc3R3aGl0ZTogXCIjRjhGOEZGXCIsXG4gIHNhbG1vbjogXCIjRkE4MDcyXCIsXG4gIGFudGlxdWV3aGl0ZTogXCIjRkFFQkQ3XCIsXG4gIGxpbmVuOiBcIiNGQUYwRTZcIixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiI0ZBRkFEMlwiLFxuICBvbGRsYWNlOiBcIiNGREY1RTZcIixcbiAgcmVkOiBcIiNGRjAwMDBcIixcbiAgZnVjaHNpYTogXCIjRkYwMEZGXCIsXG4gIG1hZ2VudGE6IFwiI0ZGMDBGRlwiLFxuICBkZWVwcGluazogXCIjRkYxNDkzXCIsXG4gIG9yYW5nZXJlZDogXCIjRkY0NTAwXCIsXG4gIHRvbWF0bzogXCIjRkY2MzQ3XCIsXG4gIGhvdHBpbms6IFwiI0ZGNjlCNFwiLFxuICBjb3JhbDogXCIjRkY3RjUwXCIsXG4gIGRhcmtvcmFuZ2U6IFwiI0ZGOEMwMFwiLFxuICBsaWdodHNhbG1vbjogXCIjRkZBMDdBXCIsXG4gIG9yYW5nZTogXCIjRkZBNTAwXCIsXG4gIGxpZ2h0cGluazogXCIjRkZCNkMxXCIsXG4gIHBpbms6IFwiI0ZGQzBDQlwiLFxuICBnb2xkOiBcIiNGRkQ3MDBcIixcbiAgcGVhY2hwdWZmOiBcIiNGRkRBQjlcIixcbiAgbmF2YWpvd2hpdGU6IFwiI0ZGREVBRFwiLFxuICBtb2NjYXNpbjogXCIjRkZFNEI1XCIsXG4gIGJpc3F1ZTogXCIjRkZFNEM0XCIsXG4gIG1pc3R5cm9zZTogXCIjRkZFNEUxXCIsXG4gIGJsYW5jaGVkYWxtb25kOiBcIiNGRkVCQ0RcIixcbiAgcGFwYXlhd2hpcDogXCIjRkZFRkQ1XCIsXG4gIGxhdmVuZGVyYmx1c2g6IFwiI0ZGRjBGNVwiLFxuICBzZWFzaGVsbDogXCIjRkZGNUVFXCIsXG4gIGNvcm5zaWxrOiBcIiNGRkY4RENcIixcbiAgbGVtb25jaGlmZm9uOiBcIiNGRkZBQ0RcIixcbiAgZmxvcmFsd2hpdGU6IFwiI0ZGRkFGMFwiLFxuICBzbm93OiBcIiNGRkZBRkFcIixcbiAgeWVsbG93OiBcIiNGRkZGMDBcIixcbiAgbGlnaHR5ZWxsb3c6IFwiI0ZGRkZFMFwiLFxuICBpdm9yeTogXCIjRkZGRkYwXCIsXG4gIHdoaXRlOiBcIiNGRkZGRkZcIixcbn07XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gKi9cbmxldCBDb2xvclBpY2tlciQxID0gY2xhc3MgQ29sb3JQaWNrZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwaXhlbFJhdGlvID0gMSkge1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiAyODkgLyAyLCB5OiAyODkgLyAyIH07XG4gICAgdGhpcy5yID0gMjg5ICogMC40OTtcbiAgICB0aGlzLmNvbG9yID0geyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhOiAxLjAgfTtcbiAgICB0aGlzLmh1ZUNpcmNsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmluaXRpYWxDb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5wcmV2aW91c0NvbG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuXG4gICAgLy8gYm91bmQgYnlcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gKCkgPT4ge307XG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gKCkgPT4ge307XG5cbiAgICAvLyBjcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgIHRoaXMuX2NyZWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgaW5zZXJ0cyB0aGUgY29sb3JQaWNrZXIgaW50byBhIGRpdiBmcm9tIHRoZSBET01cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAgICovXG4gIGluc2VydFRvKGNvbnRhaW5lcikge1xuICAgIGlmICh0aGlzLmhhbW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhhbW1lci5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhhbW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuXG4gICAgdGhpcy5fc2V0U2l6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldFVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIG9uIGFwcGx5IGFuZCBzYXZlLiBCaW5kIGl0IHRvIHRoZSBhcHBsaWNhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgc2V0Q2xvc2VDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIGNsb3NpbmcgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lzQ29sb3JTdHJpbmcoY29sb3IpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gaHRtbENvbG9yc1tjb2xvcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29sb3Igb2YgdGhlIGNvbG9yUGlja2VyXG4gICAqIFN1cHBvcnRlZCBmb3JtYXRzOlxuICAgKiAncmVkJyAgICAgICAgICAgICAgICAgICAtLT4gSFRNTCBjb2xvciBzdHJpbmdcbiAgICogJyNmZmZmZmYnICAgICAgICAgICAgICAgLS0+IGhleCBzdHJpbmdcbiAgICogJ3JnYigyNTUsMjU1LDI1NSknICAgICAgLS0+IHJnYiBzdHJpbmdcbiAgICogJ3JnYmEoMjU1LDI1NSwyNTUsMS4wKScgLS0+IHJnYmEgc3RyaW5nXG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NX0gICAgIC0tPiByZ2Igb2JqZWN0XG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NSxhOjEuMH0gLS0+IHJnYmEgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgb2JqZWN0fSBjb2xvclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqL1xuICBzZXRDb2xvcihjb2xvciwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICBpZiAoY29sb3IgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJnYmE7XG5cbiAgICAvLyBpZiBhIGh0bWwgY29sb3Igc2hvcnRoYW5kIGlzIHVzZWQsIGNvbnZlcnQgdG8gaGV4XG4gICAgY29uc3QgaHRtbENvbG9yID0gdGhpcy5faXNDb2xvclN0cmluZyhjb2xvcik7XG4gICAgaWYgKGh0bWxDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IGh0bWxDb2xvcjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3JtYXRcbiAgICBpZiAoaXNTdHJpbmcoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICBpZiAoaXNWYWxpZFJHQihjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDQpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA1KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYmFBcnJheVswXSwgZzogcmdiYUFycmF5WzFdLCBiOiByZ2JhQXJyYXlbMl0sIGE6IDEuMCB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkUkdCQShjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDUpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA2KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7XG4gICAgICAgICAgcjogcmdiYUFycmF5WzBdLFxuICAgICAgICAgIGc6IHJnYmFBcnJheVsxXSxcbiAgICAgICAgICBiOiByZ2JhQXJyYXlbMl0sXG4gICAgICAgICAgYTogcmdiYUFycmF5WzNdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkSGV4KGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZ2JPYmogPSBoZXhUb1JHQihjb2xvcik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYk9iai5yLCBnOiByZ2JPYmouZywgYjogcmdiT2JqLmIsIGE6IDEuMCB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29sb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbG9yLnIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmIgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBhbHBoYSA9IGNvbG9yLmEgIT09IHVuZGVmaW5lZCA/IGNvbG9yLmEgOiBcIjEuMFwiO1xuICAgICAgICAgIHJnYmEgPSB7IHI6IGNvbG9yLnIsIGc6IGNvbG9yLmcsIGI6IGNvbG9yLmIsIGE6IGFscGhhIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBpZiAocmdiYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biBjb2xvciBwYXNzZWQgdG8gdGhlIGNvbG9yUGlja2VyLiBTdXBwb3J0ZWQgYXJlIHN0cmluZ3M6IHJnYiwgaGV4LCByZ2JhLiBPYmplY3Q6IHJnYiAoe3I6cixnOmcsYjpiLFthOmFdfSkuIFN1cHBsaWVkOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29sb3IpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzaG93cyB0aGUgY29sb3IgcGlja2VyLlxuICAgKiBUaGUgaHVlIGNpcmNsZSBpcyBjb25zdHJ1Y3RlZCBvbmNlIGFuZCBzdG9yZWQuXG4gICAqL1xuICBzaG93KCkge1xuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrKCk7XG4gICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIHRoaXMuX2dlbmVyYXRlSHVlQ2lyY2xlKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFJJVkFURSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwaWNrZXIuIElzIGNhbGxlZCBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogT3B0aW9uYWwgYm9vbGVhbiB0byBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIGVhc3kgYWNjZXNzIGxhdGVyIG9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdG9yZVByZXZpb3VzPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGlkZShzdG9yZVByZXZpb3VzID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBwcmV2aW91cyBjb2xvciBmb3IgbmV4dCB0aW1lO1xuICAgIGlmIChzdG9yZVByZXZpb3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnByZXZpb3VzQ29sb3IgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbG9yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHBsaWVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuaW5pdGlhbENvbG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblxuICAgIC8vIGNhbGwgdGhlIGNsb3NpbmcgY2FsbGJhY2ssIHJlc3RvcmluZyB0aGUgb25jbGljayBtZXRob2QuXG4gICAgLy8gdGhpcyBpcyBpbiBhIHNldFRpbWVvdXQgYmVjYXVzZSBpdCB3aWxsIHRyaWdnZXIgdGhlIHNob3cgYWdhaW4gYmVmb3JlIHRoZSBjbGljayBpcyBkb25lLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2xvc2VDYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gdGhlIHNhdmUgYnV0dG9uLiBTYXZlcyBhbmQgaGlkZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2F2ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuY29sb3IpO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuX2hpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCb3VuZCB0byBhcHBseSBidXR0b24uIFNhdmVzIGJ1dCBkb2VzIG5vdCBjbG9zZS4gSXMgdW5kb25lIGJ5IHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FwcGx5KCkge1xuICAgIHRoaXMuYXBwbGllZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogbG9hZCB0aGUgY29sb3IgZnJvbSB0aGUgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkTGFzdCgpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c0NvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0Q29sb3IodGhpcy5wcmV2aW91c0NvbG9yLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsZXJ0KFwiVGhlcmUgaXMgbm8gbGFzdCBjb2xvciB0byBsb2FkLi4uXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGNvbG9yLCBwbGFjZSB0aGUgcGlja2VyXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZ2JhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NldEluaXRpYWw9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBpbml0aWFsIGNvbG9yXG4gICAgaWYgKHNldEluaXRpYWwgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgcmdiYSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvciA9IHJnYmE7XG4gICAgY29uc3QgaHN2ID0gUkdCVG9IU1YocmdiYS5yLCByZ2JhLmcsIHJnYmEuYik7XG5cbiAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAyICogTWF0aC5QSTtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLnIgKiBoc3YucztcbiAgICBjb25zdCB4ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcbiAgICBjb25zdCB5ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIHggLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICB5IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudEhlaWdodCArIFwicHhcIjtcblxuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcihyZ2JhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBvcGFjaXR5IGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0T3BhY2l0eSh2YWx1ZSkge1xuICAgIHRoaXMuY29sb3IuYSA9IHZhbHVlIC8gMTAwO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcih0aGlzLmNvbG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBicmlnaHRuZXNzIGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QnJpZ2h0bmVzcyh2YWx1ZSkge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi52ID0gdmFsdWUgLyAxMDA7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgY29sb3IgcGlja2VyLiBBIGJsYWNrIGNpcmNsZSBvdmVybGF5cyB0aGUgaHVlIGNpcmNsZSB0byBtaW1pYyB0aGUgYnJpZ2h0bmVzcyBkZWNyZWFzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZVBpY2tlcihyZ2JhID0gdGhpcy5jb2xvcikge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgfVxuICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuXG4gICAgY3R4LnB1dEltYWdlRGF0YSh0aGlzLmh1ZUNpcmNsZSwgMCwgMCk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgwLDAsMCxcIiArICgxIC0gaHN2LnYpICsgXCIpXCI7XG4gICAgY3R4LmNpcmNsZSh0aGlzLmNlbnRlckNvb3JkaW5hdGVzLngsIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSwgdGhpcy5yKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudmFsdWUgPSAxMDAgKiBoc3YudjtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IDEwMCAqIHJnYmEuYTtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgY3JlYXRlIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFNpemUoKSB7XG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLndpZHRoID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuaGVpZ2h0ID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhbGwgZG9tIGVsZW1lbnRzXG4gICAqIFRPRE86IGNsZWFudXAsIGxvdHMgb2Ygc2ltaWxhciBkb20gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5mcmFtZS5jbGFzc05hbWUgPSBcInZpcy1jb2xvci1waWNrZXJcIjtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsYXNzTmFtZSA9IFwidmlzLXNlbGVjdG9yXCI7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcblxuICAgIGlmICghdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KSB7XG4gICAgICBjb25zdCBub0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIik7XG4gICAgICBub0NhbnZhcy5zdHlsZS5jb2xvciA9IFwicmVkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5wYWRkaW5nID0gXCIxMHB4XCI7XG4gICAgICBub0NhbnZhcy5pbm5lclRleHQgPSBcIkVycm9yOiB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBIVE1MIGNhbnZhc1wiO1xuICAgICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5hcHBlbmRDaGlsZChub0NhbnZhcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgKGN0eC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAxKTtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXNcbiAgICAgICAgLmdldENvbnRleHQoXCIyZFwiKVxuICAgICAgICAuc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbG9yXCI7XG5cbiAgICB0aGlzLm9wYWNpdHlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eURpdi5jbGFzc05hbWUgPSBcInZpcy1vcGFjaXR5XCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0Rpdi5jbGFzc05hbWUgPSBcInZpcy1icmlnaHRuZXNzXCI7XG5cbiAgICB0aGlzLmFycm93RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmFycm93RGl2LmNsYXNzTmFtZSA9IFwidmlzLWFycm93XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS50eXBlID0gXCJyYW5nZVwiOyAvLyBOb3Qgc3VwcG9ydGVkIG9uIElFOVxuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWluID0gXCIwXCI7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5tYXggPSBcIjEwMFwiO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVE9ETzogQWRkIHNvbWUgZXJyb3IgaGFuZGxpbmcuXG4gICAgfVxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gXCIxMDBcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5jbGFzc05hbWUgPSBcInZpcy1yYW5nZVwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2LmFwcGVuZENoaWxkKHRoaXMub3BhY2l0eVJhbmdlKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuYXBwZW5kQ2hpbGQodGhpcy5icmlnaHRuZXNzUmFuZ2UpO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmlucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLWJyaWdodG5lc3NcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbC5pbm5lclRleHQgPSBcImJyaWdodG5lc3M6XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLW9wYWNpdHlcIjtcbiAgICB0aGlzLm9wYWNpdHlMYWJlbC5pbm5lclRleHQgPSBcIm9wYWNpdHk6XCI7XG5cbiAgICB0aGlzLm5ld0NvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmNsYXNzTmFtZSA9IFwidmlzLW5ldy1jb2xvclwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuaW5uZXJUZXh0ID0gXCJuZXdcIjtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1pbml0aWFsLWNvbG9yXCI7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuaW5uZXJUZXh0ID0gXCJpbml0aWFsXCI7XG5cbiAgICB0aGlzLmNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1jYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5pbm5lclRleHQgPSBcImNhbmNlbFwiO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9oaWRlLmJpbmQodGhpcywgZmFsc2UpO1xuXG4gICAgdGhpcy5hcHBseUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5pbm5lclRleHQgPSBcImFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fYXBwbHkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2F2ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5zYXZlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtc2F2ZVwiO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5pbm5lclRleHQgPSBcInNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24ub25jbGljayA9IHRoaXMuX3NhdmUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubG9hZEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5sb2FkQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtbG9hZFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5pbm5lclRleHQgPSBcImxvYWQgbGFzdFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fbG9hZExhc3QuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFycm93RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0xhYmVsKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uZXdDb2xvckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmluaXRpYWxDb2xvckRpdik7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY2FuY2VsQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYXBwbHlCdXR0b24pO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5zYXZlQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubG9hZEJ1dHRvbik7XG4gIH1cblxuICAvKipcbiAgICogYmluZCBoYW1tZXIgdG8gdGhlIGNvbG9yIHBpY2tlclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JpbmRIYW1tZXIoKSB7XG4gICAgdGhpcy5kcmFnID0ge307XG4gICAgdGhpcy5waW5jaCA9IHt9O1xuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lciQxKHRoaXMuY29sb3JQaWNrZXJDYW52YXMpO1xuICAgIHRoaXMuaGFtbWVyLmdldChcInBpbmNoXCIpLnNldCh7IGVuYWJsZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuaGFtbWVyLm9uKFwiaGFtbWVyLmlucHV0XCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmlzRmlyc3QpIHtcbiAgICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5zdGFydFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5tb3ZlXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbmVuZFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2VuZXJhdGUgdGhlIGh1ZSBjaXJjbGUuIFRoaXMgaXMgcmVsYXRpdmVseSBoZWF2eSAoMjAwbXMpIGFuZCBpcyBkb25lIG9ubHkgb25jZSBvbiB0aGUgZmlyc3QgdGltZSBpdCBpcyBzaG93bi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZW5lcmF0ZUh1ZUNpcmNsZSgpIHtcbiAgICBpZiAodGhpcy5nZW5lcmF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIDEpO1xuICAgICAgfVxuICAgICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG5cbiAgICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgaCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gZHJhdyBodWUgY2lyY2xlXG4gICAgICBsZXQgeCwgeSwgaHVlLCBzYXQ7XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiB3ICogMC41LCB5OiBoICogMC41IH07XG4gICAgICB0aGlzLnIgPSAwLjQ5ICogdztcbiAgICAgIGNvbnN0IGFuZ2xlQ29udmVydCA9ICgyICogTWF0aC5QSSkgLyAzNjA7XG4gICAgICBjb25zdCBoZmFjID0gMSAvIDM2MDtcbiAgICAgIGNvbnN0IHNmYWMgPSAxIC8gdGhpcy5yO1xuICAgICAgbGV0IHJnYjtcbiAgICAgIGZvciAoaHVlID0gMDsgaHVlIDwgMzYwOyBodWUrKykge1xuICAgICAgICBmb3IgKHNhdCA9IDA7IHNhdCA8IHRoaXMucjsgc2F0KyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy54ICsgc2F0ICogTWF0aC5zaW4oYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICB5ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy55ICsgc2F0ICogTWF0aC5jb3MoYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICByZ2IgPSBIU1ZUb1JHQihodWUgKiBoZmFjLCBzYXQgKiBzZmFjLCAxKTtcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2IoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIpXCI7XG4gICAgICAgICAgY3R4LmZpbGxSZWN0KHggLSAwLjUsIHkgLSAwLjUsIDIsIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsMSlcIjtcbiAgICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIHRoaXMuaHVlQ2lyY2xlID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIHNlbGVjdG9yLiBUaGlzIGlzIGNhbGxlZCBieSBoYW1tZXIgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlU2VsZWN0b3IoZXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jb2xvclBpY2tlckRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBsZWZ0ID0gZXZlbnQuY2VudGVyLnggLSByZWN0LmxlZnQ7XG4gICAgY29uc3QgdG9wID0gZXZlbnQuY2VudGVyLnkgLSByZWN0LnRvcDtcblxuICAgIGNvbnN0IGNlbnRlclkgPSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyRGl2LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBjZW50ZXJYID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRXaWR0aDtcblxuICAgIGNvbnN0IHggPSBsZWZ0IC0gY2VudGVyWDtcbiAgICBjb25zdCB5ID0gdG9wIC0gY2VudGVyWTtcblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMih4LCB5KTtcbiAgICBjb25zdCByYWRpdXMgPSAwLjk4ICogTWF0aC5taW4oTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpLCBjZW50ZXJYKTtcblxuICAgIGNvbnN0IG5ld1RvcCA9IE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclk7XG4gICAgY29uc3QgbmV3TGVmdCA9IE1hdGguc2luKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclg7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUudG9wID1cbiAgICAgIG5ld1RvcCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLmxlZnQgPVxuICAgICAgbmV3TGVmdCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRXaWR0aCArIFwicHhcIjtcblxuICAgIC8vIHNldCBjb2xvclxuICAgIGxldCBoID0gYW5nbGUgLyAoMiAqIE1hdGguUEkpO1xuICAgIGggPSBoIDwgMCA/IGggKyAxIDogaDtcbiAgICBjb25zdCBzID0gcmFkaXVzIC8gdGhpcy5yO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi5oID0gaDtcbiAgICBoc3YucyA9IHM7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuXG4gICAgLy8gdXBkYXRlIHByZXZpZXdzXG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmNvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gIH1cbn07XG5cbi8qKlxuICogV3JhcCBnaXZlbiB0ZXh0IChsYXN0IGFyZ3VtZW50KSBpbiBIVE1MIGVsZW1lbnRzIChhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cykuXG4gKlxuICogQHBhcmFtIHsuLi5hbnl9IHJlc3QgLSBMaXN0IG9mIHRhZyBuYW1lcyBmb2xsb3dlZCBieSBpbm5lciB0ZXh0LlxuICogQHJldHVybnMgQW4gZWxlbWVudCBvciBhIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gd3JhcEluVGFnKC4uLnJlc3QpIHtcbiAgaWYgKHJlc3QubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cy5cIik7XG4gIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVzdFswXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmVzdFswXSk7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoLi4ucmVzdC5zbGljZSgxKSkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHdheSB0aGlzIHdvcmtzIGlzIGZvciBhbGwgcHJvcGVydGllcyBvZiB0aGlzLnBvc3NpYmxlIG9wdGlvbnMsIHlvdSBjYW4gc3VwcGx5IHRoZSBwcm9wZXJ0eSBuYW1lIGluIGFueSBmb3JtIHRvIGxpc3QgdGhlIG9wdGlvbnMuXG4gKiBCb29sZWFuIG9wdGlvbnMgYXJlIHJlY29nbmlzZWQgYXMgQm9vbGVhblxuICogTnVtYmVyIG9wdGlvbnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtkZWZhdWx0IHZhbHVlLCBtaW4gdmFsdWUsIG1heCB2YWx1ZSwgc3RlcHNpemVdXG4gKiBDb2xvcnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFsnY29sb3InLCAnI2ZmZmZmZiddXG4gKiBTdHJpbmdzIHdpdGggc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtvcHRpb24xLCBvcHRpb24yLCBvcHRpb24zLCAuLl1cbiAqXG4gKiBUaGUgb3B0aW9ucyBhcmUgbWF0Y2hlZCB3aXRoIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiBlYWNoIG9mIHRoZSBtb2R1bGVzIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYXJlXG4gKi9cbmxldCBDb25maWd1cmF0b3IkMSA9IGNsYXNzIENvbmZpZ3VyYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50TW9kdWxlICAgICAgICB8IHRoZSBsb2NhdGlvbiB3aGVyZSBwYXJlbnRNb2R1bGUuc2V0T3B0aW9ucygpIGNhbiBiZSBjYWxsZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRDb250YWluZXIgICAgfCB0aGUgZGVmYXVsdCBjb250YWluZXIgb2YgdGhlIG1vZHVsZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlndXJlT3B0aW9ucyAgICB8IHRoZSBmdWxseSBjb25maWd1cmVkIGFuZCBwcmVkZWZpbmVkIG9wdGlvbnMgc2V0IGZvdW5kIGluIGFsbE9wdGlvbnMuanNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBpeGVsUmF0aW8gICAgICAgICAgfCBjYW52YXMgcGl4ZWwgcmF0aW9cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGlkZU9wdGlvbiAgICAgICAgfCBjdXN0b20gbG9naWMgdG8gZHluYW1pY2FsbHkgaGlkZSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnRNb2R1bGUsXG4gICAgZGVmYXVsdENvbnRhaW5lcixcbiAgICBjb25maWd1cmVPcHRpb25zLFxuICAgIHBpeGVsUmF0aW8gPSAxLFxuICAgIGhpZGVPcHRpb24gPSAoKSA9PiBmYWxzZVxuICApIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudE1vZHVsZTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG4gICAgdGhpcy5jb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyO1xuICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaGlkZU9wdGlvbiA9IGhpZGVPcHRpb247XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5wb3B1cENvdW50ZXIgPSAwO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgIGNvbnRhaW5lcjogdW5kZWZpbmVkLFxuICAgICAgc2hvd0J1dHRvbjogdHJ1ZSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuY29uZmlndXJlT3B0aW9ucyA9IGNvbmZpZ3VyZU9wdGlvbnM7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0ge307XG4gICAgdGhpcy5kb21FbGVtZW50cyA9IFtdO1xuICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB0aGlzLnBvcHVwTGltaXQgPSA1O1xuICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgdGhpcy5jb2xvclBpY2tlciA9IG5ldyBDb2xvclBpY2tlciQxKHBpeGVsUmF0aW8pO1xuICAgIHRoaXMud3JhcHBlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoIGFsbCBvcHRpb25zLlxuICAgKiBCZWNhdXNlIGFsbCBtb2R1bGVzIHBhcnNlIHRoZWlyIG9wdGlvbnMgYnkgdGhlbXNlbHZlcywgd2UganVzdCB1c2UgdGhlaXIgb3B0aW9ucy4gV2UgY29weSB0aGVtIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXNldCB0aGUgcG9wdXAgaGlzdG9yeSBiZWNhdXNlIHRoZSBpbmRpY2VzIG1heSBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuXG4gICAgICBsZXQgZW5hYmxlZCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuam9pbigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbnMgY2Fubm90IGJlIG51bGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0J1dHRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3dCdXR0b24gPSBvcHRpb25zLnNob3dCdXR0b247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgIGVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICBlbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICB9XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kdWxlT3B0aW9uc1xuICAgKi9cbiAgc2V0TW9kdWxlT3B0aW9ucyhtb2R1bGVPcHRpb25zKSB7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0gbW9kdWxlT3B0aW9ucztcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NyZWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMgPSBbXTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMub3B0aW9ucy5maWx0ZXI7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gdGhpcy5jb25maWd1cmVPcHRpb25zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlndXJlT3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICAgICAgc2hvdyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc2hvdyA9IGZpbHRlcihvcHRpb24sIFtdKTtcbiAgICAgICAgICBzaG93ID1cbiAgICAgICAgICAgIHNob3cgfHxcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnNbb3B0aW9uXSwgW29wdGlvbl0sIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIuaW5kZXhPZihvcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIGxpbmVicmVhayBiZXR3ZWVuIGNhdGVnb3JpZXNcbiAgICAgICAgICBpZiAoY291bnRlciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VJdGVtKFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYSBoZWFkZXIgZm9yIHRoZSBjYXRlZ29yeVxuICAgICAgICAgIHRoaXMuX21ha2VIZWFkZXIob3B0aW9uKTtcblxuICAgICAgICAgIC8vIGdldCB0aGUgc3ViIG9wdGlvbnNcbiAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dKTtcbiAgICAgICAgfVxuICAgICAgICBjb3VudGVyKys7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX21ha2VCdXR0b24oKTtcbiAgICB0aGlzLl9wdXNoKCk7XG4gICAgLy9+IHRoaXMuY29sb3JQaWNrZXIuaW5zZXJ0VG8odGhpcy5jb250YWluZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRyYXcgYWxsIERPTSBlbGVtZW50cyBvbiB0aGUgc2NyZWVuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHVzaCgpIHtcbiAgICB0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMud3JhcHBlci5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uLXdyYXBwZXJcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuZG9tRWxlbWVudHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX3Nob3dQb3B1cElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogZGVsZXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5yZW1vdmVDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53cmFwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcblxuICAgIHRoaXMuX3JlbW92ZVBvcHVwKCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBhY3R1YWxPcHRpb25zIGlmIGl0IGV4aXN0c1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0VmFsdWUocGF0aCkge1xuICAgIGxldCBiYXNlID0gdGhpcy5tb2R1bGVPcHRpb25zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJhc2VbcGF0aFtpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBiYXNlID0gYmFzZVtwYXRoW2ldXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGwgb3B0aW9uIGVsZW1lbnRzIGFyZSB3cmFwcGVkIGluIGFuIGl0ZW1cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnQ+fSBkb21FbGVtZW50c1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VJdGVtKHBhdGgsIC4uLmRvbUVsZW1lbnRzKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBpdGVtLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1pdGVtIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgICBkb21FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogaGVhZGVyIGZvciBtYWpvciBzdWJqZWN0c1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VIZWFkZXIobmFtZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1oZWFkZXJcIjtcbiAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZTtcbiAgICB0aGlzLl9tYWtlSXRlbShbXSwgZGl2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgbGFiZWwsIGlmIGl0IGlzIGFuIG9iamVjdCBsYWJlbCwgaXQgZ2V0cyBkaWZmZXJlbnQgc3R5bGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RMYWJlbFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUxhYmVsKG5hbWUsIHBhdGgsIG9iamVjdExhYmVsID0gZmFsc2UpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWxhYmVsIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgaWYgKG9iamVjdExhYmVsID09PSB0cnVlKSB7XG4gICAgICB3aGlsZSAoZGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIGRpdi5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoXCJpXCIsIFwiYlwiLCBuYW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBuYW1lICsgXCI6XCI7XG4gICAgfVxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGRyb3Bkb3duIGxpc3QgZm9yIG11bHRpcGxlIHBvc3NpYmxlIHN0cmluZyBvcHRvaW5zXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgIHNlbGVjdC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctc2VsZWN0XCI7XG4gICAgbGV0IHNlbGVjdGVkVmFsdWUgPSAwO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYXJyLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gYXJyLmluZGV4T2YodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgb3B0aW9uLnZhbHVlID0gYXJyW2ldO1xuICAgICAgaWYgKGkgPT09IHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gXCJzZWxlY3RlZFwiO1xuICAgICAgfVxuICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IGFycltpXTtcbiAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBzZWxlY3Qub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBzZWxlY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSByYW5nZSBvYmplY3QgZm9yIG51bWVyaWMgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VSYW5nZShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXJyWzBdO1xuICAgIGNvbnN0IG1pbiA9IGFyclsxXTtcbiAgICBjb25zdCBtYXggPSBhcnJbMl07XG4gICAgY29uc3Qgc3RlcCA9IGFyclszXTtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICByYW5nZS5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctcmFuZ2VcIjtcbiAgICB0cnkge1xuICAgICAgcmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gbm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHJhbmdlLm1pbiA9IG1pbjtcbiAgICAgIHJhbmdlLm1heCA9IG1heDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICByYW5nZS5zdGVwID0gc3RlcDtcblxuICAgIC8vIHNldCB1cCB0aGUgcG9wdXAgc2V0dGluZ3MgaW4gY2FzZSB0aGV5IGFyZSBuZWVkZWQuXG4gICAgbGV0IHBvcHVwU3RyaW5nID0gXCJcIjtcbiAgICBsZXQgcG9wdXBWYWx1ZSA9IDA7XG5cbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmFjdG9yID0gMS4yO1xuICAgICAgaWYgKHZhbHVlIDwgMCAmJiB2YWx1ZSAqIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgKiBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIC8gZmFjdG9yIDwgbWluKSB7XG4gICAgICAgIHJhbmdlLm1pbiA9IE1hdGguY2VpbCh2YWx1ZSAvIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5taW47XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAqIGZhY3RvciA+IG1heCAmJiBtYXggIT09IDEpIHtcbiAgICAgICAgcmFuZ2UubWF4ID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1heDtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfVxuICAgICAgcmFuZ2UudmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgaW5wdXQuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlaW5wdXRcIjtcbiAgICBpbnB1dC52YWx1ZSA9IHJhbmdlLnZhbHVlO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgbWUuX3VwZGF0ZShOdW1iZXIodGhpcy52YWx1ZSksIHBhdGgpO1xuICAgIH07XG4gICAgcmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgcmFuZ2UsIGlucHV0KTtcblxuICAgIC8vIGlmIGEgcG9wdXAgaXMgbmVlZGVkIEFORCBpdCBoYXMgbm90IGJlZW4gc2hvd24gZm9yIHRoaXMgdmFsdWUsIHNob3cgaXQuXG4gICAgaWYgKHBvcHVwU3RyaW5nICE9PSBcIlwiICYmIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gIT09IHBvcHVwVmFsdWUpIHtcbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gPSBwb3B1cFZhbHVlO1xuICAgICAgdGhpcy5fc2V0dXBQb3B1cChwb3B1cFN0cmluZywgaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGJ1dHRvbiBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0J1dHRvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZ2VuZXJhdGVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvblwiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uaW5uZXJUZXh0ID0gXCJnZW5lcmF0ZSBvcHRpb25zXCI7XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9wcmludE9wdGlvbnMoKTtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3ZlciA9ICgpID0+IHtcbiAgICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiBob3ZlclwiO1xuICAgICAgfTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLm9ubW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLW9wdGlvbi1jb250YWluZXJcIjtcblxuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKHRoaXMub3B0aW9uc0NvbnRhaW5lcik7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goZ2VuZXJhdGVCdXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwcmVwYXJlIHRoZSBwb3B1cFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldHVwUG9wdXAoc3RyaW5nLCBpbmRleCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5wb3B1cENvdW50ZXIgPCB0aGlzLnBvcHVwTGltaXRcbiAgICApIHtcbiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBkaXYuaWQgPSBcInZpcy1jb25maWd1cmF0aW9uLXBvcHVwXCI7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmlubmVyVGV4dCA9IHN0cmluZztcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyICs9IDE7XG4gICAgICB0aGlzLnBvcHVwRGl2ID0geyBodG1sOiBkaXYsIGluZGV4OiBpbmRleCB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmUgdGhlIHBvcHVwIGZyb20gdGhlIGRvbVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZVBvcHVwKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmhpZGVUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBwb3B1cCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd1BvcHVwSWZOZWVkZWQoKSB7XG4gICAgaWYgKHRoaXMucG9wdXBEaXYuaHRtbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudHNbdGhpcy5wb3B1cERpdi5pbmRleF07XG4gICAgICBjb25zdCByZWN0ID0gY29ycmVzcG9uZGluZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5zdHlsZS50b3AgPSByZWN0LnRvcCAtIDMwICsgXCJweFwiOyAvLyAzMCBpcyB0aGUgaGVpZ2h0O1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwRGl2Lmh0bWwpO1xuICAgICAgdGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICB9LCAxNTAwKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuZGVsZXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfSwgMTgwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBjaGVja2JveCBmb3IgYm9vbGVhbiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQ2hlY2tib3goZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy5jaGVja2VkLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgY2hlY2tib3gpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSB0ZXh0IGlucHV0IGZpZWxkIGZvciBzdHJpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZVRleHRJbnB1dChkZWZhdWx0VmFsdWUsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgY2hlY2tib3gudHlwZSA9IFwidGV4dFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy10ZXh0XCI7XG4gICAgY2hlY2tib3gudmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy52YWx1ZSwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY29sb3IgZmllbGQgd2l0aCBhIGNvbG9yIHBpY2tlciBmb3IgY29sb3IgZmllbGRzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRDb2xvciA9IGFyclsxXTtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICE9PSBcIm5vbmVcIikge1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jb2xvckJsb2NrXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9jayBub25lXCI7XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbG9yIDogdmFsdWU7XG4gICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogdXNlZCBieSB0aGUgY29sb3IgYnV0dG9ucyB0byBjYWxsIHRoZSBjb2xvciBwaWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBkaXZcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpIHtcbiAgICAvLyBjbGVhciB0aGUgY2FsbGJhY2sgZnJvbSB0aGlzIGRpdlxuICAgIGRpdi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKGRpdik7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zaG93KCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENvbG9yKHZhbHVlKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldFVwZGF0ZUNhbGxiYWNrKChjb2xvcikgPT4ge1xuICAgICAgY29uc3QgY29sb3JTdHJpbmcgPVxuICAgICAgICBcInJnYmEoXCIgKyBjb2xvci5yICsgXCIsXCIgKyBjb2xvci5nICsgXCIsXCIgKyBjb2xvci5iICsgXCIsXCIgKyBjb2xvci5hICsgXCIpXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JTdHJpbmc7XG4gICAgICB0aGlzLl91cGRhdGUoY29sb3JTdHJpbmcsIHBhdGgpO1xuICAgIH0pO1xuXG4gICAgLy8gb24gY2xvc2Ugb2YgdGhlIGNvbG9ycGlja2VyLCByZXN0b3JlIHRoZSBjYWxsYmFjay5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENsb3NlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogcGFyc2UgYW4gb2JqZWN0IGFuZCBkcmF3IHRoZSBjb3JyZWN0IGl0ZW1zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtBcnJheX0gW3BhdGg9W11dICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tPbmx5PWZhbHNlXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVPYmplY3Qob2JqLCBwYXRoID0gW10sIGNoZWNrT25seSA9IGZhbHNlKSB7XG4gICAgbGV0IHNob3cgPSBmYWxzZTtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCB2aXNpYmxlSW5TZXQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHN1Yk9iaiBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBzdWJPYmopKSB7XG4gICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICBjb25zdCBpdGVtID0gb2JqW3N1Yk9ial07XG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgc3ViT2JqKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIoc3ViT2JqLCBwYXRoKTtcblxuICAgICAgICAgIC8vIGlmIG5lZWRlZCB3ZSBtdXN0IGdvIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICAgICAgaWYgKHNob3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGl0ZW0pICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICAgICAgICBpdGVtIGluc3RhbmNlb2YgT2JqZWN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgIHNob3cgPSB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGNoZWNrT25seSA9PT0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdmlzaWJsZUluU2V0ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKG5ld1BhdGgpO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycmF5KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlVGV4dElucHV0KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIHNraXAgdGhlIG9wdGlvbnMgdGhhdCBhcmUgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5oaWRlT3B0aW9uKHBhdGgsIHN1Yk9iaiwgdGhpcy5tb2R1bGVPcHRpb25zKSkge1xuICAgICAgICAgICAgICAvLyBpbml0aWFsbHkgY29sbGFwc2Ugb3B0aW9ucyB3aXRoIGFuIGRpc2FibGVkIGVuYWJsZWQgb3B0aW9uLlxuICAgICAgICAgICAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmFibGVkUGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShuZXdQYXRoLCBcImVuYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoZW5hYmxlZFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChlbmFibGVkVmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgICB2aXNpYmxlSW5TZXQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlQ2hlY2tib3goaXRlbSwgZW5hYmxlZFZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwoc3ViT2JqLCBuZXdQYXRoLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdChpdGVtLCBuZXdQYXRoKSB8fCB2aXNpYmxlSW5TZXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImRvbnQga25vdyBob3cgdG8gaGFuZGxlXCIsIGl0ZW0sIHN1Yk9iaiwgbmV3UGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlSW5TZXQ7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSBhcnJheSB0eXBlIG9mIG9wdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUFycmF5KGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIiAmJiBhcnJbMF0gPT09IFwiY29sb3JcIikge1xuICAgICAgdGhpcy5fbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzFdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9tYWtlRHJvcGRvd24oYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogTnVtYmVyKHZhbHVlKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGVkIHRvIHVwZGF0ZSB0aGUgbmV0d29yayB3aXRoIHRoZSBuZXcgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGUodmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBhcmVudC5ib2R5ICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIgJiZcbiAgICAgIHRoaXMucGFyZW50LmJvZHkuZW1pdHRlci5lbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdChcImNvbmZpZ0NoYW5nZVwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5wYXJlbnQuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IGJvb2xlYW59IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHt7fX0gb3B0aW9uc09ialxuICAgKiBAcmV0dXJucyB7e319XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCwgb3B0aW9uc09iaiA9IHt9KSB7XG4gICAgbGV0IHBvaW50ZXIgPSBvcHRpb25zT2JqO1xuXG4gICAgLy8gd2hlbiBkcm9wZG93biBib3hlcyBjYW4gYmUgc3RyaW5nIG9yIGJvb2xlYW4sIHdlIHR5cGVjYXN0IGl0IGludG8gY29ycmVjdCB0eXBlc1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdmFsdWU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXRoW2ldICE9PSBcImdsb2JhbFwiKSB7XG4gICAgICAgIGlmIChwb2ludGVyW3BhdGhbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBhdGgubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHBvaW50ZXIgPSBwb2ludGVyW3BhdGhbaV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvaW50ZXJbcGF0aFtpXV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc09iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByaW50T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG5cbiAgICB3aGlsZSAodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm9wdGlvbnNDb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChcbiAgICAgIHdyYXBJblRhZyhcInByZVwiLCBcImNvbnN0IG9wdGlvbnMgPSBcIiArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMsIG51bGwsIDIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge3t9fSBvcHRpb25zXG4gICAqL1xuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hhbmdlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2NvbnN0cnVjdE9wdGlvbnMoXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0udmFsdWUsXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0ucGF0aCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn07XG5cbi8qKlxuICogUG9wdXAgaXMgYSBjbGFzcyB0byBjcmVhdGUgYSBwb3B1cCB3aW5kb3cgd2l0aCBzb21lIHRleHRcbiAqL1xubGV0IFBvcHVwJDEgPSBjbGFzcyBQb3B1cCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgICAgICBUaGUgY29udGFpbmVyIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvdmVyZmxvd01ldGhvZCAgSG93IHRoZSBwb3B1cCBzaG91bGQgYWN0IHRvIG92ZXJmbG93aW5nICgnZmxpcCcgb3IgJ2NhcCcpXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIG92ZXJmbG93TWV0aG9kKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5vdmVyZmxvd01ldGhvZCA9IG92ZXJmbG93TWV0aG9kIHx8IFwiY2FwXCI7XG5cbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5wYWRkaW5nID0gNTtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBmcmFtZVxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtdG9vbHRpcFwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4ICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcG9wdXAgd2luZG93XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgc2V0UG9zaXRpb24oeCwgeSkge1xuICAgIHRoaXMueCA9IHBhcnNlSW50KHgpO1xuICAgIHRoaXMueSA9IHBhcnNlSW50KHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29udGVudCBmb3IgdGhlIHBvcHVwIHdpbmRvdy4gVGhpcyBjYW4gYmUgSFRNTCBjb2RlIG9yIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgRWxlbWVudH0gY29udGVudFxuICAgKi9cbiAgc2V0VGV4dChjb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICB3aGlsZSAodGhpcy5mcmFtZS5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0cmluZyBjb250YWluaW5nIGxpdGVyYWwgdGV4dCwgZWxlbWVudCBoYXMgdG8gYmUgdXNlZCBmb3IgSFRNTCBkdWUgdG9cbiAgICAgIC8vIFhTUyByaXNrcyBhc3NvY2lhdGVkIHdpdGggaW5uZXJIVE1MIChpLmUuIHByZXZlbnQgWFNTIGJ5IGFjY2lkZW50KS5cbiAgICAgIHRoaXMuZnJhbWUuaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgd2luZG93XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvU2hvd10gICAgU2hvdyBvciBoaWRlIHRoZSB3aW5kb3dcbiAgICovXG4gIHNob3coZG9TaG93KSB7XG4gICAgaWYgKGRvU2hvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb1Nob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkb1Nob3cgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmZyYW1lLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudFdpZHRoO1xuXG4gICAgICBsZXQgbGVmdCA9IDAsXG4gICAgICAgIHRvcCA9IDA7XG5cbiAgICAgIGlmICh0aGlzLm92ZXJmbG93TWV0aG9kID09IFwiZmxpcFwiKSB7XG4gICAgICAgIGxldCBpc0xlZnQgPSBmYWxzZSxcbiAgICAgICAgICBpc1RvcCA9IHRydWU7IC8vIFdoZXJlIGFyb3VuZCB0aGUgcG9zaXRpb24gaXQncyBsb2NhdGVkXG5cbiAgICAgICAgaWYgKHRoaXMueSAtIGhlaWdodCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzVG9wID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy54ICsgd2lkdGggPiBtYXhXaWR0aCAtIHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzTGVmdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMZWZ0KSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMueCAtIHdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUb3ApIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIGlmICh0b3AgKyBoZWlnaHQgKyB0aGlzLnBhZGRpbmcgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICB0b3AgPSBtYXhIZWlnaHQgLSBoZWlnaHQgLSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvcCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIHRvcCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIGlmIChsZWZ0ICsgd2lkdGggKyB0aGlzLnBhZGRpbmcgPiBtYXhXaWR0aCkge1xuICAgICAgICAgIGxlZnQgPSBtYXhXaWR0aCAtIHdpZHRoIC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWZ0IDwgdGhpcy5wYWRkaW5nKSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcbiAgICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZSk7IC8vIFJlbW92ZSBlbGVtZW50IGZyb20gRE9NXG4gIH1cbn07XG5cbmxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5sZXQgYWxsT3B0aW9ucztcblxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDEgPSBcImJhY2tncm91bmQ6ICNGRmVlZWU7IGNvbG9yOiAjZGQwMDAwXCI7XG5cbi8qKlxuICogIFVzZWQgdG8gdmFsaWRhdGUgb3B0aW9ucy5cbiAqL1xubGV0IFZhbGlkYXRvciQxID0gY2xhc3MgVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWJPYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBzdWJPYmplY3QpIHtcbiAgICBlcnJvckZvdW5kID0gZmFsc2U7XG4gICAgYWxsT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgbGV0IHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9ucztcbiAgICBpZiAoc3ViT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9uc1tzdWJPYmplY3RdO1xuICAgIH1cbiAgICBWYWxpZGF0b3IucGFyc2Uob3B0aW9ucywgdXNlZE9wdGlvbnMsIFtdKTtcbiAgICByZXR1cm4gZXJyb3JGb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIHRyYXZlcnNlIGFuIG9iamVjdCByZWN1cnNpdmVseSBhbmQgY2hlY2sgZXZlcnkgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICAgIFZhbGlkYXRvci5jaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBldmVyeSB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbCB0aGUgcGFyc2UgZnVuY3Rpb24gb24gdGhhdCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpIHtcbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIFZhbGlkYXRvci5nZXRTdWdnZXN0aW9uKG9wdGlvbiwgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlZmVyZW5jZU9wdGlvbiA9IG9wdGlvbjtcbiAgICBsZXQgaXNfb2JqZWN0ID0gdHJ1ZTtcblxuICAgIGlmIChcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnNbb3B0aW9uXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICByZWZlcmVuY2VPcHRpb25zLl9fYW55X18gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTk9URTogVGhpcyBvbmx5IHRyaWdnZXJzIGlmIHRoZSBfX2FueV9fIGlzIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgLy8gICAgICAgVEhBVCdTIEEgUkVBTExZIEJBRCBQTEFDRSBUTyBBTExPVyBJVCEhISFcbiAgICAgIC8vIFRPRE86IEV4YW1pbmUgaWYgbmVlZGVkLCByZW1vdmUgaWYgcG9zc2libGVcblxuICAgICAgLy8gX19hbnlfXyBpcyBhIHdpbGRjYXJkLiBBbnkgdmFsdWUgaXMgYWNjZXB0ZWQgYW5kIHdpbGwgYmUgZnVydGhlciBhbmFseXNlZCBieSByZWZlcmVuY2UuXG4gICAgICByZWZlcmVuY2VPcHRpb24gPSBcIl9fYW55X19cIjtcblxuICAgICAgLy8gaWYgdGhlIGFueS1zdWJncm91cCBpcyBub3QgYSBwcmVkZWZpbmVkIG9iamVjdCBpbiB0aGUgY29uZmlndXJhdG9yLFxuICAgICAgLy8gd2UgZG8gbm90IGxvb2sgZGVlcGVyIGludG8gdGhlIG9iamVjdC5cbiAgICAgIGlzX29iamVjdCA9IFZhbGlkYXRvci5nZXRUeXBlKG9wdGlvbnNbb3B0aW9uXSkgPT09IFwib2JqZWN0XCI7XG4gICAgfVxuXG4gICAgbGV0IHJlZk9wdGlvbk9iaiA9IHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXTtcbiAgICBpZiAoaXNfb2JqZWN0ICYmIHJlZk9wdGlvbk9iai5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWZPcHRpb25PYmogPSByZWZPcHRpb25PYmouX190eXBlX187XG4gICAgfVxuXG4gICAgVmFsaWRhdG9yLmNoZWNrRmllbGRzKFxuICAgICAgb3B0aW9uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb24sXG4gICAgICByZWZPcHRpb25PYmosXG4gICAgICBwYXRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIG9wdGlvbiAgICAgICAgICAgfCB0aGUgb3B0aW9uIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgb3B0aW9ucyAgICAgICAgICB8IFRoZSBzdXBwbGllZCBvcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge29iamVjdH0gIHJlZmVyZW5jZU9wdGlvbnMgfCBUaGUgcmVmZXJlbmNlIG9wdGlvbnMgY29udGFpbmluZyBhbGwgb3B0aW9ucyBhbmQgdGhlaXIgYWxsb3dlZCBmb3JtYXRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgcmVmZXJlbmNlT3B0aW9uICB8IFVzdWFsbHkgdGhpcyBpcyB0aGUgc2FtZSBhcyBvcHRpb24sIGV4Y2VwdCB3aGVuIGhhbmRsaW5nIGFuIF9fYW55X18gdGFnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZk9wdGlvbk9iaiAgICAgfCBUaGlzIGlzIHRoZSB0eXBlIG9iamVjdCBmcm9tIHRoZSByZWZlcmVuY2Ugb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSAgIHBhdGggICAgICAgICAgICAgfCB3aGVyZSBpbiB0aGUgb2JqZWN0IGlzIHRoZSBvcHRpb25cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNoZWNrRmllbGRzKFxuICAgIG9wdGlvbixcbiAgICBvcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgIHJlZk9wdGlvbk9iaixcbiAgICBwYXRoXG4gICkge1xuICAgIGNvbnN0IGxvZyA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjXCIgKyBtZXNzYWdlICsgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKSxcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvblR5cGUgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pO1xuICAgIGNvbnN0IHJlZk9wdGlvblR5cGUgPSByZWZPcHRpb25PYmpbb3B0aW9uVHlwZV07XG5cbiAgICBpZiAocmVmT3B0aW9uVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpZiB0aGUgdHlwZSBpcyBjb3JyZWN0LCB3ZSBjaGVjayBpZiBpdCBpcyBzdXBwb3NlZCB0byBiZSBvbmUgb2YgYSBmZXcgc2VsZWN0IHZhbHVlc1xuICAgICAgaWYgKFxuICAgICAgICBWYWxpZGF0b3IuZ2V0VHlwZShyZWZPcHRpb25UeXBlKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgIHJlZk9wdGlvblR5cGUuaW5kZXhPZihvcHRpb25zW29wdGlvbl0pID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICAnSW52YWxpZCBvcHRpb24gZGV0ZWN0ZWQgaW4gXCInICtcbiAgICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgICAnXCIuJyArXG4gICAgICAgICAgICBcIiBBbGxvd2VkIHZhbHVlcyBhcmU6XCIgK1xuICAgICAgICAgICAgVmFsaWRhdG9yLnByaW50KHJlZk9wdGlvblR5cGUpICtcbiAgICAgICAgICAgICcgbm90IFwiJyArXG4gICAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICAgJ1wiLiAnXG4gICAgICAgICk7XG4gICAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25UeXBlID09PSBcIm9iamVjdFwiICYmIHJlZmVyZW5jZU9wdGlvbiAhPT0gXCJfX2FueV9fXCIpIHtcbiAgICAgICAgcGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcHRpb24pO1xuICAgICAgICBWYWxpZGF0b3IucGFyc2UoXG4gICAgICAgICAgb3B0aW9uc1tvcHRpb25dLFxuICAgICAgICAgIHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWZPcHRpb25PYmpbXCJhbnlcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdHlwZSBvZiB0aGUgZmllbGQgaXMgaW5jb3JyZWN0IGFuZCB0aGUgZmllbGQgY2Fubm90IGJlIGFueVxuICAgICAgbG9nKFxuICAgICAgICAnSW52YWxpZCB0eXBlIHJlY2VpdmVkIGZvciBcIicgK1xuICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgJ1wiLiBFeHBlY3RlZDogJyArXG4gICAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKHJlZk9wdGlvbk9iaikpICtcbiAgICAgICAgICBcIi4gUmVjZWl2ZWQgW1wiICtcbiAgICAgICAgICBvcHRpb25UeXBlICtcbiAgICAgICAgICAnXSBcIicgK1xuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSArXG4gICAgICAgICAgJ1wiJ1xuICAgICAgKTtcbiAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcgfCBBcnJheS48bnVtYmVyPiB8IERhdGUgfCBOb2RlIHwgTW9tZW50IHwgdW5kZWZpbmVkIHwgbnVsbH0gb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRUeXBlKG9iamVjdCkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xuXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Lm5vZGVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFwiZG9tXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Ll9pc0FNb21lbnRPYmplY3QgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIFwibW9tZW50XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRTdWdnZXN0aW9uKG9wdGlvbiwgb3B0aW9ucywgcGF0aCkge1xuICAgIGNvbnN0IGxvY2FsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCBmYWxzZSk7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBhbGxPcHRpb25zLCBbXSwgdHJ1ZSk7XG5cbiAgICBjb25zdCBsb2NhbFNlYXJjaFRocmVzaG9sZCA9IDg7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoVGhyZXNob2xkID0gNDtcblxuICAgIGxldCBtc2c7XG4gICAgaWYgKGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgJ1BlcmhhcHMgaXQgd2FzIGluY29tcGxldGU/IERpZCB5b3UgbWVhbjogXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guaW5kZXhNYXRjaCArXG4gICAgICAgICdcIj9cXG5cXG4nO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBnbG9iYWxTZWFyY2guZGlzdGFuY2UgPD0gZ2xvYmFsU2VhcmNoVGhyZXNob2xkICYmXG4gICAgICBsb2NhbFNlYXJjaC5kaXN0YW5jZSA+IGdsb2JhbFNlYXJjaC5kaXN0YW5jZVxuICAgICkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgXCJQZXJoYXBzIGl0IHdhcyBtaXNwbGFjZWQ/IE1hdGNoaW5nIG9wdGlvbiBmb3VuZCBhdDogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihcbiAgICAgICAgICBnbG9iYWxTZWFyY2gucGF0aCxcbiAgICAgICAgICBnbG9iYWxTZWFyY2guY2xvc2VzdE1hdGNoLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxvY2FsU2VhcmNoLmRpc3RhbmNlIDw9IGxvY2FsU2VhcmNoVGhyZXNob2xkKSB7XG4gICAgICBtc2cgPVxuICAgICAgICAnLiBEaWQgeW91IG1lYW4gXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guY2xvc2VzdE1hdGNoICtcbiAgICAgICAgJ1wiPycgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPVxuICAgICAgICBcIi4gRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZTogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnQoT2JqZWN0LmtleXMob3B0aW9ucykpICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6IFwiJyArIG9wdGlvbiArICdcIicgKyBtc2csXG4gICAgICBWQUxJREFUT1JfUFJJTlRfU1RZTEUkMVxuICAgICk7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2UgdGhlIG9wdGlvbnMgaW4gc2VhcmNoIGZvciBhIG1hdGNoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWN1cnNpdmU9ZmFsc2VdXG4gICAqIEByZXR1cm5zIHt7Y2xvc2VzdE1hdGNoOiBzdHJpbmcsIHBhdGg6IEFycmF5LCBkaXN0YW5jZTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCByZWN1cnNpdmUgPSBmYWxzZSkge1xuICAgIGxldCBtaW4gPSAxZTk7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaCA9IFwiXCI7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaFBhdGggPSBbXTtcbiAgICBjb25zdCBsb3dlckNhc2VPcHRpb24gPSBvcHRpb24udG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgaW5kZXhNYXRjaCA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IG9wIGluIG9wdGlvbnMpIHtcbiAgICAgIGxldCBkaXN0YW5jZTtcbiAgICAgIGlmIChvcHRpb25zW29wXS5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkICYmIHJlY3Vyc2l2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBWYWxpZGF0b3IuZmluZEluT3B0aW9ucyhcbiAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgb3B0aW9uc1tvcF0sXG4gICAgICAgICAgY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIG9wKVxuICAgICAgICApO1xuICAgICAgICBpZiAobWluID4gcmVzdWx0LmRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gcmVzdWx0LmNsb3Nlc3RNYXRjaDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gcmVzdWx0LnBhdGg7XG4gICAgICAgICAgbWluID0gcmVzdWx0LmRpc3RhbmNlO1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSByZXN1bHQuaW5kZXhNYXRjaDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihsb3dlckNhc2VPcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSBvcDtcbiAgICAgICAgfVxuICAgICAgICBkaXN0YW5jZSA9IFZhbGlkYXRvci5sZXZlbnNodGVpbkRpc3RhbmNlKG9wdGlvbiwgb3ApO1xuICAgICAgICBpZiAobWluID4gZGlzdGFuY2UpIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2ggPSBvcDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gY29weUFycmF5KHBhdGgpO1xuICAgICAgICAgIG1pbiA9IGRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZXN0TWF0Y2g6IGNsb3Nlc3RNYXRjaCxcbiAgICAgIHBhdGg6IGNsb3Nlc3RNYXRjaFBhdGgsXG4gICAgICBkaXN0YW5jZTogbWluLFxuICAgICAgaW5kZXhNYXRjaDogaW5kZXhNYXRjaCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiwgcHJlZml4ID0gXCJQcm9ibGVtIHZhbHVlIGZvdW5kIGF0OiBcXG5cIikge1xuICAgIGxldCBzdHIgPSBcIlxcblxcblwiICsgcHJlZml4ICsgXCJvcHRpb25zID0ge1xcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpICsgMTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gcGF0aFtpXSArIFwiOiB7XFxuXCI7XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggKyAxOyBqKyspIHtcbiAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgfVxuICAgIHN0ciArPSBvcHRpb24gKyBcIlxcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggLSBpOyBqKyspIHtcbiAgICAgICAgc3RyICs9IFwiICBcIjtcbiAgICAgIH1cbiAgICAgIHN0ciArPSBcIn1cXG5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0ciArIFwiXFxuXFxuXCI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHByaW50KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3B0aW9ucylcbiAgICAgIC5yZXBsYWNlKC8oXCIpfChcXFspfChcXF0pfCgsXCJfX3R5cGVfX1wiKS9nLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoLygsKS9nLCBcIiwgXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqICBDb21wdXRlIHRoZSBlZGl0IGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBnaXZlbiBzdHJpbmdzXG4gICAqIGh0dHA6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL1N0cmluZ3MvTGV2ZW5zaHRlaW5fZGlzdGFuY2UjSmF2YVNjcmlwdFxuICAgKlxuICAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQW5kcmVpIE1hY2tlbnppZVxuICAgKlxuICAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgKlxuICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgICpcbiAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGxldmVuc2h0ZWluRGlzdGFuY2UoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGEubGVuZ3RoO1xuXG4gICAgY29uc3QgbWF0cml4ID0gW107XG5cbiAgICAvLyBpbmNyZW1lbnQgYWxvbmcgdGhlIGZpcnN0IGNvbHVtbiBvZiBlYWNoIHJvd1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4W2ldID0gW2ldO1xuICAgIH1cblxuICAgIC8vIGluY3JlbWVudCBlYWNoIGNvbHVtbiBpbiB0aGUgZmlyc3Qgcm93XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cblxuICAgIC8vIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIG1hdHJpeFxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT0gYS5jaGFyQXQoaiAtIDEpKSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2kgLSAxXVtqIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgICAgICBtYXRyaXhbaSAtIDFdW2ogLSAxXSArIDEsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgIG1hdHJpeFtpXVtqIC0gMV0gKyAxLCAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqXSArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApOyAvLyBkZWxldGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xuICB9XG59O1xuXG5jb25zdCBBY3RpdmF0b3IgPSBBY3RpdmF0b3IkMTtcclxuY29uc3QgQ29sb3JQaWNrZXIgPSBDb2xvclBpY2tlciQxO1xyXG5jb25zdCBDb25maWd1cmF0b3IgPSBDb25maWd1cmF0b3IkMTtcclxuY29uc3QgSGFtbWVyID0gSGFtbWVyJDE7XHJcbmNvbnN0IFBvcHVwID0gUG9wdXAkMTtcclxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFID0gVkFMSURBVE9SX1BSSU5UX1NUWUxFJDE7XHJcbmNvbnN0IFZhbGlkYXRvciA9IFZhbGlkYXRvciQxO1xuXG5leHBvcnQgeyBBY3RpdmF0b3IsIEFsZWEsIENvbG9yUGlja2VyLCBDb25maWd1cmF0b3IsIERFTEVURSwgSFNWVG9IZXgsIEhTVlRvUkdCLCBIYW1tZXIsIFBvcHVwLCBSR0JUb0hTViwgUkdCVG9IZXgsIFZBTElEQVRPUl9QUklOVF9TVFlMRSwgVmFsaWRhdG9yLCBhZGRDbGFzc05hbWUsIGFkZENzc1RleHQsIGJpbmFyeVNlYXJjaEN1c3RvbSwgYmluYXJ5U2VhcmNoVmFsdWUsIGJyaWRnZU9iamVjdCwgY29weUFuZEV4dGVuZEFycmF5LCBjb3B5QXJyYXksIGRlZXBFeHRlbmQsIGRlZXBPYmplY3RBc3NpZ24sIGVhc2luZ0Z1bmN0aW9ucywgZXF1YWxBcnJheSwgZXh0ZW5kLCBmaWxsSWZEZWZpbmVkLCBmb3JFYWNoLCBnZXRBYnNvbHV0ZUxlZnQsIGdldEFic29sdXRlUmlnaHQsIGdldEFic29sdXRlVG9wLCBnZXRTY3JvbGxCYXJXaWR0aCwgZ2V0VGFyZ2V0LCBnZXRUeXBlLCBoYXNQYXJlbnQsIGhleFRvSFNWLCBoZXhUb1JHQiwgaW5zZXJ0U29ydCwgaXNEYXRlLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1ZhbGlkSGV4LCBpc1ZhbGlkUkdCLCBpc1ZhbGlkUkdCQSwgbWVyZ2VPcHRpb25zLCBvcHRpb24sIG92ZXJyaWRlT3BhY2l0eSwgcGFyc2VDb2xvciwgcHJldmVudERlZmF1bHQsIHB1cmVEZWVwT2JqZWN0QXNzaWduLCByZWN1cnNpdmVET01EZWxldGUsIHJlbW92ZUNsYXNzTmFtZSwgcmVtb3ZlQ3NzVGV4dCwgc2VsZWN0aXZlQnJpZGdlT2JqZWN0LCBzZWxlY3RpdmVEZWVwRXh0ZW5kLCBzZWxlY3RpdmVFeHRlbmQsIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsIHRocm90dGxlLCB0b0FycmF5LCB0b3BNb3N0LCB1cGRhdGVQcm9wZXJ0eSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmlzLXV0aWwuanMubWFwXG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ29uc3RydWN0b3IoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xudmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgbmF0aXZlQ29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgUmVmbGVjdC5jb25zdHJ1Y3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmNvbnN0cnVjdFxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEobmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcblxudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxudmFyIEZPUkNFRCA9IE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHO1xuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiBGT1JDRUQgfSwge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhQ29uc3RydWN0b3IoVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhQ29uc3RydWN0b3IoYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gbmF0aXZlQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICBhcHBseShwdXNoLCAkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChhcHBseShiaW5kLCBUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3RQcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBhcHBseShUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5SZWZsZWN0LmNvbnN0cnVjdDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xufTtcblxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSkgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGtleSwgZGVzY3JpcHRvcjtcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkgPSBrZXlzW2luZGV4KytdKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgIT09IGRlZmluZVByb3BlcnRpZXMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnRpZXM6IGRlZmluZVByb3BlcnRpZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoVCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVCwgRCk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMuc2hhbSkgZGVmaW5lUHJvcGVydGllcy5zaGFtID0gdHJ1ZTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL29iamVjdC9jcmVhdGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIHNldFByb3RvdHlwZU9mOiBzZXRQcm90b3R5cGVPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfc2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRzZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkY3JlYXRlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG4iLCAiaW1wb3J0IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmltcG9ydCBfT2JqZWN0JGdldFByb3RvdHlwZU9mIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIHZhciBfY29udGV4dDtcbiAgX2dldFByb3RvdHlwZU9mID0gX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3QkZ2V0UHJvdG90eXBlT2YpLmNhbGwoX2NvbnRleHQpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgX09iamVjdCRnZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCAidmFyIF9TeW1ib2wgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiKTtcbnZhciBfU3ltYm9sJGl0ZXJhdG9yID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanNcIik7XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IF9TeW1ib2wgJiYgbyAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL2Zvci1lYWNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbi8vIGBJbnN0YWxsRXJyb3JDYXVzZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtZXJyb3ItY2F1c2UvI3NlYy1lcnJvcm9iamVjdHMtaW5zdGFsbC1lcnJvci1jYXVzZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgb3B0aW9ucykge1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgJ2NhdXNlJyBpbiBvcHRpb25zKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE8sICdjYXVzZScsIG9wdGlvbnMuY2F1c2UpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcblxudmFyIFRFU1QgPSAoZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gU3RyaW5nKG5ldyAkRXJyb3IoYXJnKS5zdGFjayk7IH0pKCd6eGNhc2QnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbnZhciBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkgPSAvXFxuXFxzKmF0IFteOl0qOlteXFxuXSovO1xudmFyIElTX1Y4X09SX0NIQUtSQV9TVEFDSyA9IFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWS50ZXN0KFRFU1QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKElTX1Y4X09SX0NIQUtSQV9TVEFDSyAmJiB0eXBlb2Ygc3RhY2sgPT0gJ3N0cmluZycgJiYgISRFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuICAgIHdoaWxlIChkcm9wRW50cmllcy0tKSBzdGFjayA9IHJlcGxhY2Uoc3RhY2ssIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSwgJycpO1xuICB9IHJldHVybiBzdGFjaztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdhJyk7XG4gIGlmICghKCdzdGFjaycgaW4gZXJyb3IpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIDcpKTtcbiAgcmV0dXJuIGVycm9yLnN0YWNrICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjbGVhckVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXInKTtcbnZhciBFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZScpO1xuXG4vLyBub24tc3RhbmRhcmQgVjhcbnZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlcnJvciwgQywgc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSkge1xuICAgIGlmIChjYXB0dXJlU3RhY2tUcmFjZSkgY2FwdHVyZVN0YWNrVHJhY2UoZXJyb3IsIEMpO1xuICAgIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjbGVhckVycm9yU3RhY2soc3RhY2ssIGRyb3BFbnRyaWVzKSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbnZhciBSZXN1bHRQcm90b3R5cGUgPSBSZXN1bHQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgdW5ib3VuZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gIHZhciB0aGF0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoYXQ7XG4gIHZhciBBU19FTlRSSUVTID0gISEob3B0aW9ucyAmJiBvcHRpb25zLkFTX0VOVFJJRVMpO1xuICB2YXIgSVNfUkVDT1JEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX1JFQ09SRCk7XG4gIHZhciBJU19JVEVSQVRPUiA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19JVEVSQVRPUik7XG4gIHZhciBJTlRFUlJVUFRFRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JTlRFUlJVUFRFRCk7XG4gIHZhciBmbiA9IGJpbmQodW5ib3VuZEZ1bmN0aW9uLCB0aGF0KTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICB2YXIgc3RvcCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBjb25kaXRpb24pO1xuICAgIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIGNvbmRpdGlvbik7XG4gIH07XG5cbiAgdmFyIGNhbGxGbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChBU19FTlRSSUVTKSB7XG4gICAgICBhbk9iamVjdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZVswXSwgdmFsdWVbMV0sIHN0b3ApIDogZm4odmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICB9IHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlLCBzdG9wKSA6IGZuKHZhbHVlKTtcbiAgfTtcblxuICBpZiAoSVNfUkVDT1JEKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZS5pdGVyYXRvcjtcbiAgfSBlbHNlIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICghaXRlckZuKSB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhpdGVyYWJsZSkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlcmFibGUpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBjYWxsRm4oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlLCBpdGVyRm4pO1xuICB9XG5cbiAgbmV4dCA9IElTX1JFQ09SRCA/IGl0ZXJhYmxlLm5leHQgOiBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBpbnN0YWxsRXJyb3JDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlJyk7XG52YXIgaW5zdGFsbEVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJEVycm9yID0gRXJyb3I7XG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbnZhciAkQWdncmVnYXRlRXJyb3IgPSBmdW5jdGlvbiBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIG1lc3NhZ2UgLyogLCBvcHRpb25zICovKSB7XG4gIHZhciBpc0luc3RhbmNlID0gaXNQcm90b3R5cGVPZihBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSwgdGhpcyk7XG4gIHZhciB0aGF0O1xuICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICB0aGF0ID0gc2V0UHJvdG90eXBlT2YobmV3ICRFcnJvcigpLCBpc0luc3RhbmNlID8gZ2V0UHJvdG90eXBlT2YodGhpcykgOiBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhhdCA9IGlzSW5zdGFuY2UgPyB0aGlzIDogY3JlYXRlKEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlKTtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgVE9fU1RSSU5HX1RBRywgJ0Vycm9yJyk7XG4gIH1cbiAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdtZXNzYWdlJywgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQobWVzc2FnZSkpO1xuICBpbnN0YWxsRXJyb3JTdGFjayh0aGF0LCAkQWdncmVnYXRlRXJyb3IsIHRoYXQuc3RhY2ssIDEpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIGluc3RhbGxFcnJvckNhdXNlKHRoYXQsIGFyZ3VtZW50c1syXSk7XG4gIHZhciBlcnJvcnNBcnJheSA9IFtdO1xuICBpdGVyYXRlKGVycm9ycywgcHVzaCwgeyB0aGF0OiBlcnJvcnNBcnJheSB9KTtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdlcnJvcnMnLCBlcnJvcnNBcnJheSk7XG4gIHJldHVybiB0aGF0O1xufTtcblxuaWYgKHNldFByb3RvdHlwZU9mKSBzZXRQcm90b3R5cGVPZigkQWdncmVnYXRlRXJyb3IsICRFcnJvcik7XG5lbHNlIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoJEFnZ3JlZ2F0ZUVycm9yLCAkRXJyb3IsIHsgbmFtZTogdHJ1ZSB9KTtcblxudmFyIEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlID0gJEFnZ3JlZ2F0ZUVycm9yLnByb3RvdHlwZSA9IGNyZWF0ZSgkRXJyb3IucHJvdG90eXBlLCB7XG4gIGNvbnN0cnVjdG9yOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJEFnZ3JlZ2F0ZUVycm9yKSxcbiAgbWVzc2FnZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICcnKSxcbiAgbmFtZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICdBZ2dyZWdhdGVFcnJvcicpXG59KTtcblxuLy8gYEFnZ3JlZ2F0ZUVycm9yYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZ2dyZWdhdGUtZXJyb3ItY29uc3RydWN0b3JcbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBhcml0eTogMiB9LCB7XG4gIEFnZ3JlZ2F0ZUVycm9yOiAkQWdncmVnYXRlRXJyb3Jcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIHNldCA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIEZ1bmN0aW9uID0gZ2xvYmFsLkZ1bmN0aW9uO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciAkbG9jYXRpb24sIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG5mYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIERlbm8gdGhyb3dzIGEgUmVmZXJlbmNlRXJyb3Igb24gYGxvY2F0aW9uYCBhY2Nlc3Mgd2l0aG91dCBgLS1sb2NhdGlvbmAgZmxhZ1xuICAkbG9jYXRpb24gPSBnbG9iYWwubG9jYXRpb247XG59KTtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICBpZiAoaGFzT3duKHF1ZXVlLCBpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBldmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBnbG9iYWxQb3N0TWVzc2FnZURlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWwucG9zdE1lc3NhZ2UoU3RyaW5nKGlkKSwgJGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArICRsb2NhdGlvbi5ob3N0KTtcbn07XG5cbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0IHx8ICFjbGVhcikge1xuICBzZXQgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoaGFuZGxlcikge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwcGx5KGZuLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKElTX05PREUpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZXZlbnRMaXN0ZW5lcjtcbiAgICBkZWZlciA9IGJpbmQocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKFxuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmXG4gICAgaXNDYWxsYWJsZShnbG9iYWwucG9zdE1lc3NhZ2UpICYmXG4gICAgIWdsb2JhbC5pbXBvcnRTY3JpcHRzICYmXG4gICAgJGxvY2F0aW9uICYmICRsb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgICFmYWlscyhnbG9iYWxQb3N0TWVzc2FnZURlZmVyKVxuICApIHtcbiAgICBkZWZlciA9IGdsb2JhbFBvc3RNZXNzYWdlRGVmZXI7XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudExpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCBpc051bGxPclVuZGVmaW5lZChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUNvbnN0cnVjdG9yKFMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gLyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaGVhZCA9IG51bGw7XG4gIHRoaXMudGFpbCA9IG51bGw7XG59O1xuXG5RdWV1ZS5wcm90b3R5cGUgPSB7XG4gIGFkZDogZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB2YXIgZW50cnkgPSB7IGl0ZW06IGl0ZW0sIG5leHQ6IG51bGwgfTtcbiAgICB2YXIgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBpZiAodGFpbCkgdGFpbC5uZXh0ID0gZW50cnk7XG4gICAgZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5oZWFkO1xuICAgIGlmIChlbnRyeSkge1xuICAgICAgdmFyIG5leHQgPSB0aGlzLmhlYWQgPSBlbnRyeS5uZXh0O1xuICAgICAgaWYgKG5leHQgPT09IG51bGwpIHRoaXMudGFpbCA9IG51bGw7XG4gICAgICByZXR1cm4gZW50cnkuaXRlbTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUXVldWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfSU9TX1BFQkJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZScpO1xudmFyIElTX1dFQk9TX1dFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0Jyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG4vLyBOb2RlLmpzIDExIHNob3dzIEV4cGVyaW1lbnRhbFdhcm5pbmcgb24gZ2V0dGluZyBgcXVldWVNaWNyb3Rhc2tgXG52YXIgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgbWljcm90YXNrID0gcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yICYmIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvci52YWx1ZTtcbnZhciBub3RpZnksIHRvZ2dsZSwgbm9kZSwgcHJvbWlzZSwgdGhlbjtcblxuLy8gbW9kZXJuIGVuZ2luZXMgaGF2ZSBxdWV1ZU1pY3JvdGFzayBtZXRob2RcbmlmICghbWljcm90YXNrKSB7XG4gIHZhciBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChmbiA9IHF1ZXVlLmdldCgpKSB0cnkge1xuICAgICAgZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHF1ZXVlLmhlYWQpIG5vdGlmeSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgLy8gYWxzbyBleGNlcHQgV2ViT1MgV2Via2l0IGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84OThcbiAgaWYgKCFJU19JT1MgJiYgIUlTX05PREUgJiYgIUlTX1dFQk9TX1dFQktJVCAmJiBNdXRhdGlvbk9ic2VydmVyICYmIGRvY3VtZW50KSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoIUlTX0lPU19QRUJCTEUgJiYgUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAvLyB3b3JrYXJvdW5kIG9mIFdlYktpdCB+IGlPUyBTYWZhcmkgMTAuMSBidWdcbiAgICBwcm9taXNlLmNvbnN0cnVjdG9yID0gUHJvbWlzZTtcbiAgICB0aGVuID0gYmluZChwcm9taXNlLnRoZW4sIHByb21pc2UpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIE5vZGUuanMgd2l0aG91dCBwcm9taXNlc1xuICB9IGVsc2UgaWYgKElTX05PREUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdlXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIC8vIGB3ZWJwYWNrYCBkZXYgc2VydmVyIGJ1ZyBvbiBJRSBnbG9iYWwgbWV0aG9kcyAtIHVzZSBiaW5kKGZuLCBnbG9iYWwpXG4gICAgbWFjcm90YXNrID0gYmluZChtYWNyb3Rhc2ssIGdsb2JhbCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFjcm90YXNrKGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgbWljcm90YXNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgaWYgKCFxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICBxdWV1ZS5hZGQoZm4pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1pY3JvdGFzaztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KHVzZXJBZ2VudCkgJiYgdHlwZW9mIFBlYmJsZSAhPSAndW5kZWZpbmVkJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdCh1c2VyQWdlbnQpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIHZhbHVlOiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgdmFsdWU6IGVycm9yIH07XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuUHJvbWlzZTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgRGVubyAtLSBEZW5vIGNhc2UgKi9cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIERlbm8gPT0gJ29iamVjdCcgJiYgRGVubyAmJiB0eXBlb2YgRGVuby52ZXJzaW9uID09ICdvYmplY3QnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19ERU5PID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFJU19ERU5PICYmICFJU19OT0RFXG4gICYmIHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCdcbiAgJiYgdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19CUk9XU0VSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyJyk7XG52YXIgSVNfREVOTyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtZGVubycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgU1VCQ0xBU1NJTkcgPSBmYWxzZTtcbnZhciBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgPSBpc0NhbGxhYmxlKGdsb2JhbC5Qcm9taXNlUmVqZWN0aW9uRXZlbnQpO1xuXG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSBpc0ZvcmNlZCgnUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFID0gaW5zcGVjdFNvdXJjZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpO1xuICB2YXIgR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSA9IFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFICE9PSBTdHJpbmcoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgLy8gVjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgLy8gV2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgaWYgKCFHTE9CQUxfQ09SRV9KU19QUk9NSVNFICYmIFY4X1ZFUlNJT04gPT09IDY2KSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgbmVlZCBQcm9taXNlI3sgY2F0Y2gsIGZpbmFsbHkgfSBpbiB0aGUgcHVyZSB2ZXJzaW9uIGZvciBwcmV2ZW50aW5nIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgaWYgKElTX1BVUkUgJiYgIShOYXRpdmVQcm9taXNlUHJvdG90eXBlWydjYXRjaCddICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSkpIHJldHVybiB0cnVlO1xuICAvLyBXZSBjYW4ndCB1c2UgQEBzcGVjaWVzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxuICBpZiAoIVY4X1ZFUlNJT04gfHwgVjhfVkVSU0lPTiA8IDUxIHx8ICEvbmF0aXZlIGNvZGUvLnRlc3QoUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UpKSB7XG4gICAgLy8gRGV0ZWN0IGNvcnJlY3RuZXNzIG9mIHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSgxKTsgfSk7XG4gICAgdmFyIEZha2VQcm9taXNlID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICAgIH07XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gRmFrZVByb21pc2U7XG4gICAgU1VCQ0xBU1NJTkcgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlO1xuICAgIGlmICghU1VCQ0xBU1NJTkcpIHJldHVybiB0cnVlO1xuICAvLyBVbmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gIH0gcmV0dXJuICFHTE9CQUxfQ09SRV9KU19QUk9NSVNFICYmIChJU19CUk9XU0VSIHx8IElTX0RFTk8pICYmICFOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENPTlNUUlVDVE9SOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUixcbiAgUkVKRUNUSU9OX0VWRU5UOiBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQsXG4gIFNVQkNMQVNTSU5HOiBTVUJDTEFTU0lOR1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFDYWxsYWJsZShyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhQ2FsbGFibGUocmVqZWN0KTtcbn07XG5cbi8vIGBOZXdQcm9taXNlQ2FwYWJpbGl0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW5ld3Byb21pc2VjYXBhYmlsaXR5XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9taWNyb3Rhc2snKTtcbnZhciBob3N0UmVwb3J0RXJyb3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycycpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIFF1ZXVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3F1ZXVlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uQ09OU1RSVUNUT1I7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLlJFSkVDVElPTl9FVkVOVDtcbnZhciBOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORyA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5TVUJDTEFTU0lORztcbnZhciBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFBST01JU0UpO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yO1xudmFyIFByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcbnZhciBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eTtcblxudmFyIERJU1BBVENIX0VWRU5UID0gISEoZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRXZlbnQgJiYgZ2xvYmFsLmRpc3BhdGNoRXZlbnQpO1xudmFyIFVOSEFORExFRF9SRUpFQ1RJT04gPSAndW5oYW5kbGVkcmVqZWN0aW9uJztcbnZhciBSRUpFQ1RJT05fSEFORExFRCA9ICdyZWplY3Rpb25oYW5kbGVkJztcbnZhciBQRU5ESU5HID0gMDtcbnZhciBGVUxGSUxMRUQgPSAxO1xudmFyIFJFSkVDVEVEID0gMjtcbnZhciBIQU5ETEVEID0gMTtcbnZhciBVTkhBTkRMRUQgPSAyO1xuXG52YXIgSW50ZXJuYWwsIE93blByb21pc2VDYXBhYmlsaXR5LCBQcm9taXNlV3JhcHBlciwgbmF0aXZlVGhlbjtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgaXNDYWxsYWJsZSh0aGVuID0gaXQudGhlbikgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgY2FsbFJlYWN0aW9uID0gZnVuY3Rpb24gKHJlYWN0aW9uLCBzdGF0ZSkge1xuICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT09IEZVTEZJTExFRDtcbiAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gIHRyeSB7XG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGlmICghb2spIHtcbiAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChzdGF0ZSk7XG4gICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICBjYWxsKHRoZW4sIHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgIHJlamVjdChlcnJvcik7XG4gIH1cbn07XG5cbnZhciBub3RpZnkgPSBmdW5jdGlvbiAoc3RhdGUsIGlzUmVqZWN0KSB7XG4gIGlmIChzdGF0ZS5ub3RpZmllZCkgcmV0dXJuO1xuICBzdGF0ZS5ub3RpZmllZCA9IHRydWU7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlYWN0aW9ucyA9IHN0YXRlLnJlYWN0aW9ucztcbiAgICB2YXIgcmVhY3Rpb247XG4gICAgd2hpbGUgKHJlYWN0aW9uID0gcmVhY3Rpb25zLmdldCgpKSB7XG4gICAgICBjYWxsUmVhY3Rpb24ocmVhY3Rpb24sIHN0YXRlKTtcbiAgICB9XG4gICAgc3RhdGUubm90aWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXN0YXRlLnJlamVjdGlvbikgb25VbmhhbmRsZWQoc3RhdGUpO1xuICB9KTtcbn07XG5cbnZhciBkaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHByb21pc2UsIHJlYXNvbikge1xuICB2YXIgZXZlbnQsIGhhbmRsZXI7XG4gIGlmIChESVNQQVRDSF9FVkVOVCkge1xuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZlbnQucHJvbWlzZSA9IHByb21pc2U7XG4gICAgZXZlbnQucmVhc29uID0gcmVhc29uO1xuICAgIGV2ZW50LmluaXRFdmVudChuYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZ2xvYmFsLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9IGVsc2UgZXZlbnQgPSB7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcmVhc29uIH07XG4gIGlmICghTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UICYmIChoYW5kbGVyID0gZ2xvYmFsWydvbicgKyBuYW1lXSkpIGhhbmRsZXIoZXZlbnQpO1xuICBlbHNlIGlmIChuYW1lID09PSBVTkhBTkRMRURfUkVKRUNUSU9OKSBob3N0UmVwb3J0RXJyb3JzKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCByZWFzb24pO1xufTtcblxudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIElTX1VOSEFORExFRCA9IGlzVW5oYW5kbGVkKHN0YXRlKTtcbiAgICB2YXIgcmVzdWx0O1xuICAgIGlmIChJU19VTkhBTkRMRUQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChVTkhBTkRMRURfUkVKRUNUSU9OLCBwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBzdGF0ZS5yZWplY3Rpb24gPSBJU19OT0RFIHx8IGlzVW5oYW5kbGVkKHN0YXRlKSA/IFVOSEFORExFRCA6IEhBTkRMRUQ7XG4gICAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyByZXN1bHQudmFsdWU7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUucmVqZWN0aW9uICE9PSBIQU5ETEVEICYmICFzdGF0ZS5wYXJlbnQ7XG59O1xuXG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoUkVKRUNUSU9OX0hBTkRMRUQsIHByb21pc2UsIHN0YXRlLnZhbHVlKTtcbiAgfSk7XG59O1xuXG52YXIgYmluZCA9IGZ1bmN0aW9uIChmbiwgc3RhdGUsIHVud3JhcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZm4oc3RhdGUsIHZhbHVlLCB1bndyYXApO1xuICB9O1xufTtcblxudmFyIGludGVybmFsUmVqZWN0ID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgc3RhdGUuc3RhdGUgPSBSRUpFQ1RFRDtcbiAgbm90aWZ5KHN0YXRlLCB0cnVlKTtcbn07XG5cbnZhciBpbnRlcm5hbFJlc29sdmUgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICB0cnkge1xuICAgIGlmIChzdGF0ZS5mYWNhZGUgPT09IHZhbHVlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgdmFyIHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKTtcbiAgICBpZiAodGhlbikge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IGRvbmU6IGZhbHNlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2FsbCh0aGVuLCB2YWx1ZSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZXNvbHZlLCB3cmFwcGVyLCBzdGF0ZSksXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVqZWN0LCB3cmFwcGVyLCBzdGF0ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGludGVybmFsUmVqZWN0KHdyYXBwZXIsIGVycm9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgc3RhdGUuc3RhdGUgPSBGVUxGSUxMRUQ7XG4gICAgICBub3RpZnkoc3RhdGUsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW50ZXJuYWxSZWplY3QoeyBkb25lOiBmYWxzZSB9LCBlcnJvciwgc3RhdGUpO1xuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gIFByb21pc2VDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIGFDYWxsYWJsZShleGVjdXRvcik7XG4gICAgY2FsbChJbnRlcm5hbCwgdGhpcyk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSksIGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGludGVybmFsUmVqZWN0KHN0YXRlLCBlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIFByb21pc2VQcm90b3R5cGUgPSBQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgdHlwZTogUFJPTUlTRSxcbiAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgbm90aWZpZWQ6IGZhbHNlLFxuICAgICAgcGFyZW50OiBmYWxzZSxcbiAgICAgIHJlYWN0aW9uczogbmV3IFF1ZXVlKCksXG4gICAgICByZWplY3Rpb246IGZhbHNlLFxuICAgICAgc3RhdGU6IFBFTkRJTkcsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG5cbiAgLy8gYFByb21pc2UucHJvdG90eXBlLnRoZW5gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLnRoZW5cbiAgSW50ZXJuYWwucHJvdG90eXBlID0gZGVmaW5lQnVpbHRJbihQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSh0aGlzKTtcbiAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgUHJvbWlzZUNvbnN0cnVjdG9yKSk7XG4gICAgc3RhdGUucGFyZW50ID0gdHJ1ZTtcbiAgICByZWFjdGlvbi5vayA9IGlzQ2FsbGFibGUob25GdWxmaWxsZWQpID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgIHJlYWN0aW9uLmZhaWwgPSBpc0NhbGxhYmxlKG9uUmVqZWN0ZWQpICYmIG9uUmVqZWN0ZWQ7XG4gICAgcmVhY3Rpb24uZG9tYWluID0gSVNfTk9ERSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0gUEVORElORykgc3RhdGUucmVhY3Rpb25zLmFkZChyZWFjdGlvbik7XG4gICAgZWxzZSBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gIH0pO1xuXG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUocHJvbWlzZSk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpO1xuICAgIHRoaXMucmVqZWN0ID0gYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpO1xuICB9O1xuXG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikgJiYgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIG5hdGl2ZVRoZW4gPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLnRoZW47XG5cbiAgICBpZiAoIU5BVElWRV9QUk9NSVNFX1NVQkNMQVNTSU5HKSB7XG4gICAgICAvLyBtYWtlIGBQcm9taXNlI3RoZW5gIHJldHVybiBhIHBvbHlmaWxsZWQgYFByb21pc2VgIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBjYWxsKG5hdGl2ZVRoZW4sIHRoYXQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY0MFxuICAgICAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBgLmNvbnN0cnVjdG9yID09PSBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgdHJ5IHtcbiAgICAgIGRlbGV0ZSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICAgIC8vIG1ha2UgYGluc3RhbmNlb2YgUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgc2V0UHJvdG90eXBlT2YoTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBzYWZlXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxubW9kdWxlLmV4cG9ydHMgPSBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKS50aGVuKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5jYXRjaFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiwgcmVhbDogdHJ1ZSB9LCB7XG4gICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjY2F0Y2hgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSkge1xuICB2YXIgbWV0aG9kID0gZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnY2F0Y2gnXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2NhdGNoJywgbWV0aG9kLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgY2FsbChjYXBhYmlsaXR5LnJlamVjdCwgdW5kZWZpbmVkLCByKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcblxudmFyIFByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIgPSBnZXRCdWlsdEluKCdQcm9taXNlJyk7XG52YXIgQ0hFQ0tfV1JBUFBFUiA9IElTX1BVUkUgJiYgIUZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SO1xuXG4vLyBgUHJvbWlzZS5yZXNvbHZlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZXNvbHZlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB8fCBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDSEVDS19XUkFQUEVSICYmIHRoaXMgPT09IFByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIgPyBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbFNldHRsZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbHNldHRsZWRcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFsbFNldHRsZWQ6IGZ1bmN0aW9uIGFsbFNldHRsZWQoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbChwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ2Z1bGZpbGxlZCcsIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdyZWplY3RlZCcsIHJlYXNvbjogZXJyb3IgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG52YXIgUFJPTUlTRV9BTllfRVJST1IgPSAnTm8gb25lIHByb21pc2UgcmVzb2x2ZWQnO1xuXG4vLyBgUHJvbWlzZS5hbnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFueVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYW55OiBmdW5jdGlvbiBhbnkoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIEFnZ3JlZ2F0ZUVycm9yID0gZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKTtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICB2YXIgYWxyZWFkeVJlc29sdmVkID0gZmFsc2U7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5UmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3JzW2luZGV4XSA9IGVycm9yO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbi8vIFNhZmFyaSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgyOVxudmFyIE5PTl9HRU5FUklDID0gISFOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10aGVuYWJsZSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10uY2FsbCh7IHRoZW46IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuZmluYWxseVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBOT05fR0VORVJJQyB9LCB7XG4gICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKSk7XG4gICAgdmFyIGlzRnVuY3Rpb24gPSBpc0NhbGxhYmxlKG9uRmluYWxseSk7XG4gICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5LFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseVxuICAgICk7XG4gIH1cbn0pO1xuXG4vLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNmaW5hbGx5YCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2ZpbmFsbHknXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSAhPT0gbWV0aG9kKSB7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnZmluYWxseScsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFueScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5Qcm9taXNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG4vLyBgUHJvbWlzZS53aXRoUmVzb2x2ZXJzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2Utd2l0aC1yZXNvbHZlcnNcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHdpdGhSZXNvbHZlcnM6IGZ1bmN0aW9uIHdpdGhSZXNvbHZlcnMoKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvbWlzZTogcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZSxcbiAgICAgIHJlc29sdmU6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUsXG4gICAgICByZWplY3Q6IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdFxuICAgIH07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvcHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS53aXRoLXJlc29sdmVycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xuXG4vLyBgUHJvbWlzZS50cnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgICAocmVzdWx0LmVycm9yID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9wcm9taXNlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuYWdncmVnYXRlLWVycm9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLmFsbC1zZXR0bGVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS5hbnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3Byb21pc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvaW5zdGFuY2UvcmV2ZXJzZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvcmV2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiKTtcbnZhciBfU3ltYm9sID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIik7XG52YXIgX09iamVjdCRjcmVhdGUgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanNcIik7XG52YXIgX09iamVjdCRnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanNcIik7XG52YXIgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaC5qc1wiKTtcbnZhciBfcHVzaEluc3RhbmNlUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanNcIik7XG52YXIgX09iamVjdCRzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanNcIik7XG52YXIgX1Byb21pc2UgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3Byb21pc2UvaW5kZXguanNcIik7XG52YXIgX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlLmpzXCIpO1xudmFyIF9zbGljZUluc3RhbmNlUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzXCIpO1xuZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7IC8qISByZWdlbmVyYXRvci1ydW50aW1lIC0tIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLiAtLSBsaWNlbnNlIChNSVQpOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL0xJQ0VOU0UgKi9cbiAgbW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lID0gZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgICByZXR1cm4gZTtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICB2YXIgdCxcbiAgICBlID0ge30sXG4gICAgciA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgbiA9IHIuaGFzT3duUHJvcGVydHksXG4gICAgbyA9IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCA/IF9TeW1ib2wgOiB7fSxcbiAgICBhID0gaS5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIixcbiAgICBjID0gaS5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCIsXG4gICAgdSA9IGkudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG4gIGZ1bmN0aW9uIGRlZmluZSh0LCBlLCByKSB7XG4gICAgcmV0dXJuIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBfT2JqZWN0JGNyZWF0ZShpLnByb3RvdHlwZSksXG4gICAgICBjID0gbmV3IENvbnRleHQobiB8fCBbXSk7XG4gICAgcmV0dXJuIG8oYSwgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBtYWtlSW52b2tlTWV0aG9kKHQsIHIsIGMpXG4gICAgfSksIGE7XG4gIH1cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2godCwgZSwgcikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IHQuY2FsbChlLCByKVxuICAgICAgfTtcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRocm93XCIsXG4gICAgICAgIGFyZzogdFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZS53cmFwID0gd3JhcDtcbiAgdmFyIGggPSBcInN1c3BlbmRlZFN0YXJ0XCIsXG4gICAgbCA9IFwic3VzcGVuZGVkWWllbGRcIixcbiAgICBmID0gXCJleGVjdXRpbmdcIixcbiAgICBzID0gXCJjb21wbGV0ZWRcIixcbiAgICB5ID0ge307XG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuICB2YXIgcCA9IHt9O1xuICBkZWZpbmUocCwgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbiAgdmFyIGQgPSBfT2JqZWN0JGdldFByb3RvdHlwZU9mLFxuICAgIHYgPSBkICYmIGQoZCh2YWx1ZXMoW10pKSk7XG4gIHYgJiYgdiAhPT0gciAmJiBuLmNhbGwodiwgYSkgJiYgKHAgPSB2KTtcbiAgdmFyIGcgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPSBHZW5lcmF0b3IucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgdmFyIF9jb250ZXh0O1xuICAgIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXSkuY2FsbChfY29udGV4dCwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKG8gPT09IHMpIHtcbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gaSkgdGhyb3cgYTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdCxcbiAgICAgICAgICBkb25lOiAhMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZm9yIChuLm1ldGhvZCA9IGksIG4uYXJnID0gYTs7KSB7XG4gICAgICAgIHZhciBjID0gbi5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICB2YXIgdSA9IG1heWJlSW52b2tlRGVsZWdhdGUoYywgbik7XG4gICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgIGlmICh1ID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiB1O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJuZXh0XCIgPT09IG4ubWV0aG9kKSBuLnNlbnQgPSBuLl9zZW50ID0gbi5hcmc7ZWxzZSBpZiAoXCJ0aHJvd1wiID09PSBuLm1ldGhvZCkge1xuICAgICAgICAgIGlmIChvID09PSBoKSB0aHJvdyBvID0gcywgbi5hcmc7XG4gICAgICAgICAgbi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBuLm1ldGhvZCAmJiBuLmFicnVwdChcInJldHVyblwiLCBuLmFyZyk7XG4gICAgICAgIG8gPSBmO1xuICAgICAgICB2YXIgcCA9IHRyeUNhdGNoKGUsIHIsIG4pO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcC50eXBlKSB7XG4gICAgICAgICAgaWYgKG8gPSBuLmRvbmUgPyBzIDogbCwgcC5hcmcgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcC5hcmcsXG4gICAgICAgICAgICBkb25lOiBuLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcC50eXBlICYmIChvID0gcywgbi5tZXRob2QgPSBcInRocm93XCIsIG4uYXJnID0gcC5hcmcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSB7XG4gICAgdmFyIG4gPSByLm1ldGhvZCxcbiAgICAgIG8gPSBlLml0ZXJhdG9yW25dO1xuICAgIGlmIChvID09PSB0KSByZXR1cm4gci5kZWxlZ2F0ZSA9IG51bGwsIFwidGhyb3dcIiA9PT0gbiAmJiBlLml0ZXJhdG9yW1wicmV0dXJuXCJdICYmIChyLm1ldGhvZCA9IFwicmV0dXJuXCIsIHIuYXJnID0gdCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSwgXCJ0aHJvd1wiID09PSByLm1ldGhvZCkgfHwgXCJyZXR1cm5cIiAhPT0gbiAmJiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ1wiICsgbiArIFwiJyBtZXRob2RcIikpLCB5O1xuICAgIHZhciBpID0gdHJ5Q2F0Y2gobywgZS5pdGVyYXRvciwgci5hcmcpO1xuICAgIGlmIChcInRocm93XCIgPT09IGkudHlwZSkgcmV0dXJuIHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IGkuYXJnLCByLmRlbGVnYXRlID0gbnVsbCwgeTtcbiAgICB2YXIgYSA9IGkuYXJnO1xuICAgIHJldHVybiBhID8gYS5kb25lID8gKHJbZS5yZXN1bHROYW1lXSA9IGEudmFsdWUsIHIubmV4dCA9IGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gci5tZXRob2QgJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksIHIuZGVsZWdhdGUgPSBudWxsLCB5KSA6IGEgOiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLCByLmRlbGVnYXRlID0gbnVsbCwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgX2NvbnRleHQyO1xuICAgIHZhciBlID0ge1xuICAgICAgdHJ5TG9jOiB0WzBdXG4gICAgfTtcbiAgICAxIGluIHQgJiYgKGUuY2F0Y2hMb2MgPSB0WzFdKSwgMiBpbiB0ICYmIChlLmZpbmFsbHlMb2MgPSB0WzJdLCBlLmFmdGVyTG9jID0gdFszXSksIF9wdXNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDIgPSB0aGlzLnRyeUVudHJpZXMpLmNhbGwoX2NvbnRleHQyLCBlKTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHQuY29tcGxldGlvbiB8fCB7fTtcbiAgICBlLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgZS5hcmcsIHQuY29tcGxldGlvbiA9IGU7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0KSB7XG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XSwgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5KHQpLmNhbGwodCwgcHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGUpIHtcbiAgICBpZiAoZSB8fCBcIlwiID09PSBlKSB7XG4gICAgICB2YXIgciA9IGVbYV07XG4gICAgICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUubmV4dCkgcmV0dXJuIGU7XG4gICAgICBpZiAoIWlzTmFOKGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgbyA9IC0xLFxuICAgICAgICAgIGkgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsrbyA8IGUubGVuZ3RoOykgaWYgKG4uY2FsbChlLCBvKSkgcmV0dXJuIG5leHQudmFsdWUgPSBlW29dLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGkubmV4dCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoX3R5cGVvZihlKSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIG8oZywgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG8oR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdCAmJiB0LmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWUgJiYgKGUgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGUuZGlzcGxheU5hbWUgfHwgZS5uYW1lKSk7XG4gIH0sIGUubWFyayA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPyBfT2JqZWN0JHNldFByb3RvdHlwZU9mKHQsIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6ICh0Ll9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBkZWZpbmUodCwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSksIHQucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoZyksIHQ7XG4gIH0sIGUuYXdyYXAgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2F3YWl0OiB0XG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBjLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBlLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBlLmFzeW5jID0gZnVuY3Rpb24gKHQsIHIsIG4sIG8sIGkpIHtcbiAgICB2b2lkIDAgPT09IGkgJiYgKGkgPSBfUHJvbWlzZSk7XG4gICAgdmFyIGEgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKHQsIHIsIG4sIG8pLCBpKTtcbiAgICByZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpID8gYSA6IGEubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LmRvbmUgPyB0LnZhbHVlIDogYS5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhnKSwgZGVmaW5lKGcsIHUsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoZywgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZGVmaW5lKGcsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZS5rZXlzID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IE9iamVjdCh0KSxcbiAgICAgIHIgPSBbXTtcbiAgICBmb3IgKHZhciBuIGluIGUpIF9wdXNoSW5zdGFuY2VQcm9wZXJ0eShyKS5jYWxsKHIsIG4pO1xuICAgIHJldHVybiBfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkocikuY2FsbChyKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyByLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIHQgPSByLnBvcCgpO1xuICAgICAgICBpZiAodCBpbiBlKSByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGUudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoZSkge1xuICAgICAgdmFyIF9jb250ZXh0MztcbiAgICAgIGlmICh0aGlzLnByZXYgPSAwLCB0aGlzLm5leHQgPSAwLCB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLmFyZyA9IHQsIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDMgPSB0aGlzLnRyeUVudHJpZXMpLmNhbGwoX2NvbnRleHQzLCByZXNldFRyeUVudHJ5KSwgIWUpIGZvciAodmFyIHIgaW4gdGhpcykgXCJ0XCIgPT09IHIuY2hhckF0KDApICYmIG4uY2FsbCh0aGlzLCByKSAmJiAhaXNOYU4oK19zbGljZUluc3RhbmNlUHJvcGVydHkocikuY2FsbChyLCAxKSkgJiYgKHRoaXNbcl0gPSB0KTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciB0ID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihlKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBlO1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKG4sIG8pIHtcbiAgICAgICAgcmV0dXJuIGEudHlwZSA9IFwidGhyb3dcIiwgYS5hcmcgPSBlLCByLm5leHQgPSBuLCBvICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCAhIW87XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBvID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IG8gPj0gMDsgLS1vKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy50cnlFbnRyaWVzW29dLFxuICAgICAgICAgIGEgPSBpLmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gaS50cnlMb2MpIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIGlmIChpLnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgYyA9IG4uY2FsbChpLCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgdSA9IG4uY2FsbChpLCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGMgJiYgdSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYykge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXUpIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodCwgZSkge1xuICAgICAgZm9yICh2YXIgciA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyByID49IDA7IC0tcikge1xuICAgICAgICB2YXIgbyA9IHRoaXMudHJ5RW50cmllc1tyXTtcbiAgICAgICAgaWYgKG8udHJ5TG9jIDw9IHRoaXMucHJldiAmJiBuLmNhbGwobywgXCJmaW5hbGx5TG9jXCIpICYmIHRoaXMucHJldiA8IG8uZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBpID0gbztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaSAmJiAoXCJicmVha1wiID09PSB0IHx8IFwiY29udGludWVcIiA9PT0gdCkgJiYgaS50cnlMb2MgPD0gZSAmJiBlIDw9IGkuZmluYWxseUxvYyAmJiAoaSA9IG51bGwpO1xuICAgICAgdmFyIGEgPSBpID8gaS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gYS50eXBlID0gdCwgYS5hcmcgPSBlLCBpID8gKHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMubmV4dCA9IGkuZmluYWxseUxvYywgeSkgOiB0aGlzLmNvbXBsZXRlKGEpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHQsIGUpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gXCJicmVha1wiID09PSB0LnR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0LnR5cGUgPyB0aGlzLm5leHQgPSB0LmFyZyA6IFwicmV0dXJuXCIgPT09IHQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHQuYXJnLCB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCIsIHRoaXMubmV4dCA9IFwiZW5kXCIpIDogXCJub3JtYWxcIiA9PT0gdC50eXBlICYmIGUgJiYgKHRoaXMubmV4dCA9IGUpLCB5O1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2godCkge1xuICAgICAgZm9yICh2YXIgZSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBlID49IDA7IC0tZSkge1xuICAgICAgICB2YXIgciA9IHRoaXMudHJ5RW50cmllc1tlXTtcbiAgICAgICAgaWYgKHIuZmluYWxseUxvYyA9PT0gdCkgcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLCByLmFmdGVyTG9jKSwgcmVzZXRUcnlFbnRyeShyKSwgeTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24gX2NhdGNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLnRyeUxvYyA9PT0gdCkge1xuICAgICAgICAgIHZhciBuID0gci5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChcInRocm93XCIgPT09IG4udHlwZSkge1xuICAgICAgICAgICAgdmFyIG8gPSBuLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkocik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG4vLyBGRjI2LSBidWc6IEFycmF5QnVmZmVycyBhcmUgbm9uLWV4dGVuc2libGUsIGJ1dCBPYmplY3QuaXNFeHRlbnNpYmxlIGRvZXMgbm90IHJlcG9ydCBpdFxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyID09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIGlmIChPYmplY3QuaXNFeHRlbnNpYmxlKGJ1ZmZlcikpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidWZmZXIsICdhJywgeyB2YWx1ZTogOCB9KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRpc0V4dGVuc2libGUoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmlzRXh0ZW5zaWJsZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5pc2V4dGVuc2libGVcbm1vZHVsZS5leHBvcnRzID0gKEZBSUxTX09OX1BSSU1JVElWRVMgfHwgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFKSA/IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFICYmIGNsYXNzb2YoaXQpID09PSAnQXJyYXlCdWZmZXInKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlO1xufSA6ICRpc0V4dGVuc2libGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1wcmV2ZW50ZXh0ZW5zaW9ucyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBpc0V4dGVuc2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgRlJFRVpJTkcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnJlZXppbmcnKTtcblxudmFyIFJFUVVJUkVEID0gZmFsc2U7XG52YXIgTUVUQURBVEEgPSB1aWQoJ21ldGEnKTtcbnZhciBpZCA9IDA7XG5cbnZhciBzZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBkZWZpbmVQcm9wZXJ0eShpdCwgTUVUQURBVEEsIHsgdmFsdWU6IHtcbiAgICBvYmplY3RJRDogJ08nICsgaWQrKywgLy8gb2JqZWN0IElEXG4gICAgd2Vha0RhdGE6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xuXG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBhIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLm9iamVjdElEO1xufTtcblxudmFyIGdldFdlYWtEYXRhID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiB0aGUgc3RvcmUgb2Ygd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLndlYWtEYXRhO1xufTtcblxuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaSU5HICYmIFJFUVVJUkVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhc093bihpdCwgTUVUQURBVEEpKSBzZXRNZXRhZGF0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cbnZhciBlbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gIG1ldGEuZW5hYmxlID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuICBSRVFVSVJFRCA9IHRydWU7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mO1xuICB2YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdGVzdFtNRVRBREFUQV0gPSAxO1xuXG4gIC8vIHByZXZlbnQgZXhwb3Npbmcgb2YgbWV0YWRhdGEga2V5XG4gIGlmIChnZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QpLmxlbmd0aCkge1xuICAgIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocmVzdWx0W2ldID09PSBNRVRBREFUQSkge1xuICAgICAgICAgIHNwbGljZShyZXN1bHQsIGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgICQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlLmZcbiAgICB9KTtcbiAgfVxufTtcblxudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW5hYmxlOiBlbmFibGUsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWtEYXRhOiBnZXRXZWFrRGF0YSxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5oaWRkZW5LZXlzW01FVEFEQVRBXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SX05BTUVdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICB2YXIgZXhwb3J0ZWQgPSB7fTtcbiAgdmFyIENvbnN0cnVjdG9yO1xuXG4gIGlmICghREVTQ1JJUFRPUlMgfHwgIWlzQ2FsbGFibGUoTmF0aXZlQ29uc3RydWN0b3IpXG4gICAgfHwgIShJU19XRUFLIHx8IE5hdGl2ZVByb3RvdHlwZS5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLmVudHJpZXMoKS5uZXh0KCk7IH0pKVxuICApIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIENvbnN0cnVjdG9yID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpO1xuICAgIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIH0gZWxzZSB7XG4gICAgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKGFuSW5zdGFuY2UodGFyZ2V0LCBQcm90b3R5cGUpLCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGNvbGxlY3Rpb246IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0YXJnZXRbQURERVJdLCB7IHRoYXQ6IHRhcmdldCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIGZvckVhY2goWydhZGQnLCAnY2xlYXInLCAnZGVsZXRlJywgJ2ZvckVhY2gnLCAnZ2V0JywgJ2hhcycsICdzZXQnLCAna2V5cycsICd2YWx1ZXMnLCAnZW50cmllcyddLCBmdW5jdGlvbiAoS0VZKSB7XG4gICAgICB2YXIgSVNfQURERVIgPSBLRVkgPT09ICdhZGQnIHx8IEtFWSA9PT0gJ3NldCc7XG4gICAgICBpZiAoS0VZIGluIE5hdGl2ZVByb3RvdHlwZSAmJiAhKElTX1dFQUsgJiYgS0VZID09PSAnY2xlYXInKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUHJvdG90eXBlLCBLRVksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb247XG4gICAgICAgICAgaWYgKCFJU19BRERFUiAmJiBJU19XRUFLICYmICFpc09iamVjdChhKSkgcmV0dXJuIEtFWSA9PT0gJ2dldCcgPyB1bmRlZmluZWQgOiBmYWxzZTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gY29sbGVjdGlvbltLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgICAgcmV0dXJuIElTX0FEREVSID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBJU19XRUFLIHx8IGRlZmluZVByb3BlcnR5KFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuY29sbGVjdGlvbi5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZhbHNlLCB0cnVlKTtcblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwgZXhwb3J0ZWQpO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgb3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bnNhZmUgJiYgdGFyZ2V0W2tleV0pIHRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgZWxzZSBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5mYXN0S2V5O1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGluZGV4OiBjcmVhdGUobnVsbCksXG4gICAgICAgIGZpcnN0OiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgc2l6ZTogMFxuICAgICAgfSk7XG4gICAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGF0LnNpemUgPSAwO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICB2YXIgZGVmaW5lID0gZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgdmFyIHByZXZpb3VzLCBpbmRleDtcbiAgICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5sYXN0ID0gZW50cnkgPSB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLFxuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwcmV2aW91czogcHJldmlvdXMgPSBzdGF0ZS5sYXN0LFxuICAgICAgICAgIG5leHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXN0YXRlLmZpcnN0KSBzdGF0ZS5maXJzdCA9IGVudHJ5O1xuICAgICAgICBpZiAocHJldmlvdXMpIHByZXZpb3VzLm5leHQgPSBlbnRyeTtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplKys7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplKys7XG4gICAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09ICdGJykgc3RhdGUuaW5kZXhbaW5kZXhdID0gZW50cnk7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgLy8gZmFzdCBjYXNlXG4gICAgICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gICAgICB2YXIgZW50cnk7XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHN0YXRlLmluZGV4W2luZGV4XTtcbiAgICAgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICAgICAgZm9yIChlbnRyeSA9IHN0YXRlLmZpcnN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uZXh0KSB7XG4gICAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmNsZWFyKClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5jbGVhclxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmNsZWFyXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGRhdGEgPSBzdGF0ZS5pbmRleDtcbiAgICAgICAgdmFyIGVudHJ5ID0gc3RhdGUuZmlyc3Q7XG4gICAgICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wcmV2aW91cykgZW50cnkucHJldmlvdXMgPSBlbnRyeS5wcmV2aW91cy5uZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZmlyc3QgPSBzdGF0ZS5sYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUgPSAwO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZGVsZXRlKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5kZWxldGVcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uZXh0O1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgICAgZGVsZXRlIHN0YXRlLmluZGV4W2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uZXh0ID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wcmV2aW91cyA9IHByZXY7XG4gICAgICAgICAgaWYgKHN0YXRlLmZpcnN0ID09PSBlbnRyeSkgc3RhdGUuZmlyc3QgPSBuZXh0O1xuICAgICAgICAgIGlmIChzdGF0ZS5sYXN0ID09PSBlbnRyeSkgc3RhdGUubGFzdCA9IHByZXY7XG4gICAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplLS07XG4gICAgICAgICAgZWxzZSB0aGF0LnNpemUtLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5maXJzdCkge1xuICAgICAgICAgIGJvdW5kRnVuY3Rpb24oZW50cnkudmFsdWUsIGVudHJ5LmtleSwgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldH0ucHJvdG90eXBlLmhhcyhrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuaGFzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuaGFzXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwgSVNfTUFQID8ge1xuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmdldFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52YWx1ZTtcbiAgICAgIH0sXG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnNldFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IDoge1xuICAgICAgLy8gYFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKSB7XG4gICAgdmFyIElURVJBVE9SX05BTUUgPSBDT05TVFJVQ1RPUl9OQU1FICsgJyBJdGVyYXRvcic7XG4gICAgdmFyIGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICB2YXIgZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihJVEVSQVRPUl9OQU1FKTtcbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS57IGtleXMsIHZhbHVlcywgZW50cmllcywgQEBpdGVyYXRvciB9KClgIG1ldGhvZHNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIGRlZmluZUl0ZXJhdG9yKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgICB0eXBlOiBJVEVSQVRPUl9OQU1FLFxuICAgICAgICB0YXJnZXQ6IGl0ZXJhdGVkLFxuICAgICAgICBzdGF0ZTogZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUoaXRlcmF0ZWQpLFxuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmxhc3Q7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghc3RhdGUudGFyZ2V0IHx8ICEoc3RhdGUubGFzdCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuc3RhdGUuZmlyc3QpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09PSAna2V5cycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LmtleSwgZmFsc2UpO1xuICAgICAgaWYgKGtpbmQgPT09ICd2YWx1ZXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS52YWx1ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2VudHJ5LmtleSwgZW50cnkudmFsdWVdLCBmYWxzZSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGVbQEBzcGVjaWVzXWAgYWNjZXNzb3JzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtbWFwLUBAc3BlY2llc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXNldC1AQHNwZWNpZXNcbiAgICBzZXRTcGVjaWVzKENPTlNUUlVDVE9SX05BTUUpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uU3Ryb25nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nJyk7XG5cbi8vIGBNYXBgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC1vYmplY3RzXG5jb2xsZWN0aW9uKCdNYXAnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIGNvbGxlY3Rpb25TdHJvbmcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubWFwJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5NYXA7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb21lJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvbWUnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc29tZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvbWUnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29tZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29tZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdrZXlzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2tleXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQua2V5cztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUua2V5cylcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlJyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbnZhciBtZXJnZVNvcnQgPSBmdW5jdGlvbiAoYXJyYXksIGNvbXBhcmVmbikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB2YXIgbWlkZGxlID0gZmxvb3IobGVuZ3RoIC8gMik7XG4gIHJldHVybiBsZW5ndGggPCA4ID8gaW5zZXJ0aW9uU29ydChhcnJheSwgY29tcGFyZWZuKSA6IG1lcmdlKFxuICAgIGFycmF5LFxuICAgIG1lcmdlU29ydChhcnJheVNsaWNlKGFycmF5LCAwLCBtaWRkbGUpLCBjb21wYXJlZm4pLFxuICAgIG1lcmdlU29ydChhcnJheVNsaWNlKGFycmF5LCBtaWRkbGUpLCBjb21wYXJlZm4pLFxuICAgIGNvbXBhcmVmblxuICApO1xufTtcblxudmFyIGluc2VydGlvblNvcnQgPSBmdW5jdGlvbiAoYXJyYXksIGNvbXBhcmVmbikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB2YXIgaSA9IDE7XG4gIHZhciBlbGVtZW50LCBqO1xuXG4gIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgaiA9IGk7XG4gICAgZWxlbWVudCA9IGFycmF5W2ldO1xuICAgIHdoaWxlIChqICYmIGNvbXBhcmVmbihhcnJheVtqIC0gMV0sIGVsZW1lbnQpID4gMCkge1xuICAgICAgYXJyYXlbal0gPSBhcnJheVstLWpdO1xuICAgIH1cbiAgICBpZiAoaiAhPT0gaSsrKSBhcnJheVtqXSA9IGVsZW1lbnQ7XG4gIH0gcmV0dXJuIGFycmF5O1xufTtcblxudmFyIG1lcmdlID0gZnVuY3Rpb24gKGFycmF5LCBsZWZ0LCByaWdodCwgY29tcGFyZWZuKSB7XG4gIHZhciBsbGVuZ3RoID0gbGVmdC5sZW5ndGg7XG4gIHZhciBybGVuZ3RoID0gcmlnaHQubGVuZ3RoO1xuICB2YXIgbGluZGV4ID0gMDtcbiAgdmFyIHJpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGxpbmRleCA8IGxsZW5ndGggfHwgcmluZGV4IDwgcmxlbmd0aCkge1xuICAgIGFycmF5W2xpbmRleCArIHJpbmRleF0gPSAobGluZGV4IDwgbGxlbmd0aCAmJiByaW5kZXggPCBybGVuZ3RoKVxuICAgICAgPyBjb21wYXJlZm4obGVmdFtsaW5kZXhdLCByaWdodFtyaW5kZXhdKSA8PSAwID8gbGVmdFtsaW5kZXgrK10gOiByaWdodFtyaW5kZXgrK11cbiAgICAgIDogbGluZGV4IDwgbGxlbmd0aCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdO1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2VTb3J0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIGZpcmVmb3ggPSB1c2VyQWdlbnQubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvaSk7XG5cbm1vZHVsZS5leHBvcnRzID0gISFmaXJlZm94ICYmICtmaXJlZm94WzFdO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBVQSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC9NU0lFfFRyaWRlbnQvLnRlc3QoVUEpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHdlYmtpdCA9IHVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcXC8oXFxkKylcXC4vKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIXdlYmtpdCAmJiArd2Via2l0WzFdO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpbnRlcm5hbFNvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc29ydCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIEZGID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uJyk7XG52YXIgSUVfT1JfRURHRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZScpO1xudmFyIFY4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgV0VCS0lUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS13ZWJraXQtdmVyc2lvbicpO1xuXG52YXIgdGVzdCA9IFtdO1xudmFyIG5hdGl2ZVNvcnQgPSB1bmN1cnJ5VGhpcyh0ZXN0LnNvcnQpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyh0ZXN0LnB1c2gpO1xuXG4vLyBJRTgtXG52YXIgRkFJTFNfT05fVU5ERUZJTkVEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pO1xuLy8gVjggYnVnXG52YXIgRkFJTFNfT05fTlVMTCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KG51bGwpO1xufSk7XG4vLyBPbGQgV2ViS2l0XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ3NvcnQnKTtcblxudmFyIFNUQUJMRV9TT1JUID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZmVhdHVyZSBkZXRlY3Rpb24gY2FuIGJlIHRvbyBzbG93LCBzbyBjaGVjayBlbmdpbmVzIHZlcnNpb25zXG4gIGlmIChWOCkgcmV0dXJuIFY4IDwgNzA7XG4gIGlmIChGRiAmJiBGRiA+IDMpIHJldHVybjtcbiAgaWYgKElFX09SX0VER0UpIHJldHVybiB0cnVlO1xuICBpZiAoV0VCS0lUKSByZXR1cm4gV0VCS0lUIDwgNjAzO1xuXG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGNvZGUsIGNociwgdmFsdWUsIGluZGV4O1xuXG4gIC8vIGdlbmVyYXRlIGFuIGFycmF5IHdpdGggbW9yZSA1MTIgZWxlbWVudHMgKENoYWtyYSBhbmQgb2xkIFY4IGZhaWxzIG9ubHkgaW4gdGhpcyBjYXNlKVxuICBmb3IgKGNvZGUgPSA2NTsgY29kZSA8IDc2OyBjb2RlKyspIHtcbiAgICBjaHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICBjYXNlIDY2OiBjYXNlIDY5OiBjYXNlIDcwOiBjYXNlIDcyOiB2YWx1ZSA9IDM7IGJyZWFrO1xuICAgICAgY2FzZSA2ODogY2FzZSA3MTogdmFsdWUgPSA0OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHZhbHVlID0gMjtcbiAgICB9XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA0NzsgaW5kZXgrKykge1xuICAgICAgdGVzdC5wdXNoKHsgazogY2hyICsgaW5kZXgsIHY6IHZhbHVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRlc3Quc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi52IC0gYS52OyB9KTtcblxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0ZXN0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IHRlc3RbaW5kZXhdLmsuY2hhckF0KDApO1xuICAgIGlmIChyZXN1bHQuY2hhckF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gY2hyKSByZXN1bHQgKz0gY2hyO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCAhPT0gJ0RHQkVGSEFDSUpLJztcbn0pO1xuXG52YXIgRk9SQ0VEID0gRkFJTFNfT05fVU5ERUZJTkVEIHx8ICFGQUlMU19PTl9OVUxMIHx8ICFTVFJJQ1RfTUVUSE9EIHx8ICFTVEFCTEVfU09SVDtcblxudmFyIGdldFNvcnRDb21wYXJlID0gZnVuY3Rpb24gKGNvbXBhcmVmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLTE7XG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCkgcmV0dXJuIDE7XG4gICAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gK2NvbXBhcmVmbih4LCB5KSB8fCAwO1xuICAgIHJldHVybiB0b1N0cmluZyh4KSA+IHRvU3RyaW5nKHkpID8gMSA6IC0xO1xuICB9O1xufTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zb3J0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvcnRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSBhQ2FsbGFibGUoY29tcGFyZWZuKTtcblxuICAgIHZhciBhcnJheSA9IHRvT2JqZWN0KHRoaXMpO1xuXG4gICAgaWYgKFNUQUJMRV9TT1JUKSByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWQgPyBuYXRpdmVTb3J0KGFycmF5KSA6IG5hdGl2ZVNvcnQoYXJyYXksIGNvbXBhcmVmbik7XG5cbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB2YXIgYXJyYXlMZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShhcnJheSk7XG4gICAgdmFyIGl0ZW1zTGVuZ3RoLCBpbmRleDtcblxuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoaW5kZXggaW4gYXJyYXkpIHB1c2goaXRlbXMsIGFycmF5W2luZGV4XSk7XG4gICAgfVxuXG4gICAgaW50ZXJuYWxTb3J0KGl0ZW1zLCBnZXRTb3J0Q29tcGFyZShjb21wYXJlZm4pKTtcblxuICAgIGl0ZW1zTGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlbXMpO1xuICAgIGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChpbmRleCA8IGl0ZW1zTGVuZ3RoKSBhcnJheVtpbmRleF0gPSBpdGVtc1tpbmRleCsrXTtcbiAgICB3aGlsZSAoaW5kZXggPCBhcnJheUxlbmd0aCkgZGVsZXRlUHJvcGVydHlPclRocm93KGFycmF5LCBpbmRleCsrKTtcblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zb3J0Jyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NvcnQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zb3J0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNvcnQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNvcnQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAndmFsdWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC52YWx1ZXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnZhbHVlcylcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC9pdGVyYXRvclwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2VudHJpZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5lbnRyaWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5lbnRyaWVzKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbmxldCBnZXRSYW5kb21WYWx1ZXM7XG5jb25zdCBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byk7XG5cbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xufSIsICJpbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cblxuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHJldHVybiBieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghdmFsaWRhdGUodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCcpO1xuICB9XG5cbiAgcmV0dXJuIHV1aWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmluZ2lmeTsiLCAiY29uc3QgcmFuZG9tVVVJRCA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5yYW5kb21VVUlEICYmIGNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmFuZG9tVVVJRFxufTsiLCAiaW1wb3J0IG5hdGl2ZSBmcm9tICcuL25hdGl2ZS5qcyc7XG5pbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCB7IHVuc2FmZVN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgaWYgKG5hdGl2ZS5yYW5kb21VVUlEICYmICFidWYgJiYgIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmF0aXZlLnJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG4gIHJuZHNbNl0gPSBybmRzWzZdICYgMHgwZiB8IDB4NDA7XG4gIHJuZHNbOF0gPSBybmRzWzhdICYgMHgzZiB8IDB4ODA7IC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuXG4gIGlmIChidWYpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgYnVmW29mZnNldCArIGldID0gcm5kc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmO1xuICB9XG5cbiAgcmV0dXJuIHVuc2FmZVN0cmluZ2lmeShybmRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdjQ7IiwgImltcG9ydCB7IEFzc2lnbmFibGUgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcbmltcG9ydCB7IERhdGFTdHJlYW0gfSBmcm9tIFwiLi9kYXRhLXN0cmVhbVwiO1xuXG50eXBlIFZhbHVlT2Y8VD4gPSBUW2tleW9mIFRdO1xuXG4vKiogVmFsaWQgaWQgdHlwZS4gKi9cbmV4cG9ydCB0eXBlIElkID0gbnVtYmVyIHwgc3RyaW5nO1xuLyoqIE51bGxhYmxlIGlkIHR5cGUuICovXG5leHBvcnQgdHlwZSBPcHRJZCA9IHVuZGVmaW5lZCB8IG51bGwgfCBJZDtcbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgYSB2YWx1ZSBjYW4gYmUgdXNlZCBhcyBhbiBpZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZCBpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIElkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XG59XG5cbi8qKlxuICogTWFrZSBhbiBvYmplY3QgZGVlcGx5IHBhcnRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIGFueVtdIHwgRnVuY3Rpb24gfCBOb2RlXG4gID8gVFxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgPyB7IFtrZXkgaW4ga2V5b2YgVF0/OiBEZWVwUGFydGlhbDxUW2tleV0+IH1cbiAgOiBUO1xuXG4vKipcbiAqIEFuIGl0ZW0gdGhhdCBtYXkgKHtAbGluayBJZH0pIG9yIG1heSBub3QgKGFic2VudCwgdW5kZWZpbmVkIG9yIG51bGwpIGhhdmUgYW4gaWQgcHJvcGVydHkuXG4gKlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgUGFydEl0ZW08SWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IFBhcnRpYWw8UmVjb3JkPElkUHJvcCwgT3B0SWQ+Pjtcbi8qKlxuICogQW4gaXRlbSB0aGF0IGhhcyBhIHByb3BlcnR5IGNvbnRhaW5pbmcgYW4gaWQgYW5kIGFsbCBvdGhlciByZXF1aXJlZCBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRnVsbEl0ZW08XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gPSBJdGVtICYgUmVjb3JkPElkUHJvcCwgSWQ+O1xuLyoqXG4gKiBBbiBpdGVtIHRoYXQgaGFzIGEgcHJvcGVydHkgY29udGFpbmluZyBhbiBpZCBhbmQgb3B0aW9uYWxseSBvdGhlciBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgVXBkYXRlSXRlbTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiA9IEFzc2lnbmFibGU8RnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4gJiBSZWNvcmQ8SWRQcm9wLCBJZD47XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGFuIGl0ZW0gaGFzIGFuIGlkIChpcyBhIHtAbGluayBGdWxsSXRlbX0pLlxuICpcbiAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIGlkUHJvcCAtIE5hbWUgb2YgdGhlIGlkIHByb3BlcnR5LlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoaXMgdmFsdWUgaXMgYSB7QGxpbmsgRnVsbEl0ZW19LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGxJdGVtPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+KGl0ZW06IEl0ZW0sIGlkUHJvcDogSWRQcm9wKTogaXRlbSBpcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIGl0ZW1baWRQcm9wXSAhPSBudWxsO1xufVxuXG4vKiogQWRkIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEV2ZW50UGF5bG9hZCB7XG4gIC8qKiBJZHMgb2YgYWRkZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xufVxuLyoqIFVwZGF0ZSBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVFdmVudFBheWxvYWQ8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKiogSWRzIG9mIHVwZGF0ZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xuICAvKiogSXRlbXMgYXMgdGhleSB3ZXJlIGJlZm9yZSB0aGlzIHVwZGF0ZS4gKi9cbiAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogSXRlbXMgYXMgdGhleSBhcmUgbm93LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBKdXN0IGdldCB0aGUgZGF0YSBmcm9tIHRoZSBkYXRhIHNldCBvciBkYXRhIHZpZXcuXG4gICAqL1xuICBkYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG59XG4vKiogUmVtb3ZlIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbW92ZUV2ZW50UGF5bG9hZDxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIC8qKiBJZHMgb2YgcmVtb3ZlZCBpdGVtcy4gKi9cbiAgaXRlbXM6IElkW107XG4gIC8qKiBJdGVtcyBhcyB0aGV5IHdlcmUgYmVmb3JlIHRoZWlyIHJlbW92YWwuICovXG4gIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbn1cblxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyAoZXZlbnQgbmFtZSDihpIgcGF5bG9hZCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQYXlsb2FkczxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIGFkZDogQWRkRXZlbnRQYXlsb2FkO1xuICB1cGRhdGU6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xuICByZW1vdmU6IFJlbW92ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xufVxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBwYXlsb2FkKS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFBheWxvYWRzV2l0aEFueTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBleHRlbmRzIEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPiB7XG4gIFwiKlwiOiBWYWx1ZU9mPEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPj47XG59XG5cbi8qKlxuICogTWFwIG9mIGV2ZW50IGNhbGxiYWNrIHR5cGVzIChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3M8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgYWRkKG5hbWU6IFwiYWRkXCIsIHBheWxvYWQ6IEFkZEV2ZW50UGF5bG9hZCB8IG51bGwsIHNlbmRlcklkPzogSWQgfCBudWxsKTogdm9pZDtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIHVwZGF0ZShcbiAgICBuYW1lOiBcInVwZGF0ZVwiLFxuICAgIHBheWxvYWQ6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+IHwgbnVsbCxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgcmVtb3ZlKFxuICAgIG5hbWU6IFwicmVtb3ZlXCIsXG4gICAgcGF5bG9hZDogUmVtb3ZlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4gfCBudWxsLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG59XG4vKipcbiAqIE1hcCBvZiBldmVudCBjYWxsYmFjayB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3NXaXRoQW55PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGV4dGVuZHMgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCAoe0BsaW5rIEV2ZW50TmFtZX0pLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIERhdGEgYWJvdXQgdGhlIGl0ZW1zIGFmZmVjdGVkIGJ5IHRoaXMgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIEEgc2VuZGVySWQsIG9wdGlvbmFsbHkgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2hpY2ggdHJpZ2dlcmVkIHRoZSBldmVudC4gSWYgc2VuZGVySWQgaXMgbm90IHByb3ZpZGVkLCB0aGUgYXJndW1lbnQgd2lsbCBiZSBgbnVsbGAuXG4gICAqL1xuICBcIipcIjxOIGV4dGVuZHMga2V5b2YgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPj4oXG4gICAgbmFtZTogTixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bTl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbn1cblxuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcy4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50TmFtZSA9IGtleW9mIEV2ZW50UGF5bG9hZHM8bmV2ZXIsIFwiXCI+O1xuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcyBhbmQgJyonIHRvIGxpc3RlbiBmb3IgYWxsLiAqL1xuZXhwb3J0IHR5cGUgRXZlbnROYW1lV2l0aEFueSA9IGtleW9mIEV2ZW50UGF5bG9hZHNXaXRoQW55PG5ldmVyLCBcIlwiPjtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBvcmRlciBwYXJhbWV0ZXIuXG4gKiAtIEEgc3RyaW5nIHZhbHVlIGRldGVybWluZXMgd2hpY2ggcHJvcGVydHkgd2lsbCBiZSB1c2VkIGZvciBzb3J0aW5nICh1c2luZyA8IGFuZCA+IG9wZXJhdG9ycyBmb3IgbnVtZXJpYyBjb21wYXJpc29uKS5cbiAqIC0gQSBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdGhlIHNhbWUgd2F5IGFzIGluIEFycmF5LnNvcnQuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YUludGVyZmFjZU9yZGVyPEl0ZW0+ID1cbiAgfCBrZXlvZiBJdGVtXG4gIHwgKChhOiBJdGVtLCBiOiBJdGVtKSA9PiBudW1iZXIpO1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm4gdHlwZSBpbmRlcGVuZGVudCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0Jhc2U8SXRlbT4ge1xuICAvKipcbiAgICogQW4gYXJyYXkgd2l0aCBmaWVsZCBuYW1lcywgb3IgYW4gb2JqZWN0IHdpdGggY3VycmVudCBmaWVsZCBuYW1lIGFuZCBuZXcgZmllbGQgbmFtZSB0aGF0IHRoZSBmaWVsZCBpcyByZXR1cm5lZCBhcy4gQnkgZGVmYXVsdCwgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW1zIGFyZSBlbWl0dGVkLiBXaGVuIGZpZWxkcyBpcyBkZWZpbmVkLCBvbmx5IHRoZSBwcm9wZXJ0aWVzIHdob3NlIG5hbWUgaXMgc3BlY2lmaWVkIGluIGZpZWxkcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogV2FybmluZyoqOiBUaGVyZSBpcyBubyBUeXBlU2NyaXB0IHN1cHBvcnQgZm9yIHRoaXMuXG4gICAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZ2V0IG9wdGlvbnMgKHJldHVybnMgYSBzaW5nbGUgaXRlbSBvciBhbiBhcnJheSkuXG4gKlxuICogQHJlbWFya3NcbiAqIFdoZXRoZXIgYW4gaXRlbSBvciBhbmQgYXJyYXkgb2YgaXRlbXMgaXMgcmV0dXJuZWQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdHlwZSBvZiB0aGUgaWQocykgYXJndW1lbnQuXG4gKiBJZiBhbiBhcnJheSBvZiBpZHMgaXMgcmVxdWVzdGVkIGFuIGFycmF5IG9mIGl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiBhIHNpbmdsZSBpZCBpcyByZXF1ZXN0ZWQgYSBzaW5nbGUgaXRlbSAob3IgbnVsbCBpZiB0aGUgaWQgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBpdGVtKSB3aWxsIGJlIHJldHVybmVkLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzaW5nbGUgaXRlbSAoaWYgaW52b2tlZCB3aXRoIGFuIGlkKSBvciBhbiBhcnJheSBvZiBpdGVtcyAoaWYgaW52b2tlZCB3aXRoIGFuIGFycmF5IG9mIGlkcykuICovXG4gIHJldHVyblR5cGU/OiB1bmRlZmluZWQgfCBcIkFycmF5XCI7XG59XG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm5zIGFuIG9iamVjdCkuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSByZXR1cm5lZCBvYmplY3QgaGFzIGlkcyBhcyBrZXlzIGFuZCBpdGVtcyBhcyB2YWx1ZXMgb2YgY29ycmVzcG9uZGluZyBpZHMuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG1hcCAoaWQg4oaSIGl0ZW0pLiAqL1xuICByZXR1cm5UeXBlOiBcIk9iamVjdFwiO1xufVxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJucyBzaW5nbGUgaXRlbSwgYW4gYXJyYXkgb3Igb2JqZWN0KS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgdHlwZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiA9XG4gIHwgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICB8IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+O1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBpZHMgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBmb3IgZWFjaCBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEFuIGFycmF5IHdpdGggZmllbGQgbmFtZXMsIG9yIGFuIG9iamVjdCB3aXRoIGN1cnJlbnQgZmllbGQgbmFtZSBhbmQgbmV3IGZpZWxkIG5hbWUgdGhhdCB0aGUgZmllbGQgaXMgcmV0dXJuZWQgYXMuIEJ5IGRlZmF1bHQsIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBpdGVtcyBhcmUgZW1pdHRlZC4gV2hlbiBmaWVsZHMgaXMgZGVmaW5lZCwgb25seSB0aGUgcHJvcGVydGllcyB3aG9zZSBuYW1lIGlzIHNwZWNpZmllZCBpbiBmaWVsZHMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgaXRlbXMuICovXG4gIGZpZWxkcz86IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBtYXAgb3ByaW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIE9yaWdpbmFsIC0gVGhlIG9yaWdpbmFsIGl0ZW0gdHlwZSBpbiB0aGUgZGF0YS5cbiAqIEB0eXBlUGFyYW0gTWFwcGVkIC0gVGhlIHR5cGUgYWZ0ZXIgbWFwcGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxPcmlnaW5hbCwgTWFwcGVkPiB7XG4gIC8qKiBBbiBhcnJheSB3aXRoIGZpZWxkIG5hbWVzLCBvciBhbiBvYmplY3Qgd2l0aCBjdXJyZW50IGZpZWxkIG5hbWUgYW5kIG5ldyBmaWVsZCBuYW1lIHRoYXQgdGhlIGZpZWxkIGlzIHJldHVybmVkIGFzLiBCeSBkZWZhdWx0LCBhbGwgcHJvcGVydGllcyBvZiB0aGUgaXRlbXMgYXJlIGVtaXR0ZWQuIFdoZW4gZmllbGRzIGlzIGRlZmluZWQsIG9ubHkgdGhlIHByb3BlcnRpZXMgd2hvc2UgbmFtZSBpcyBzcGVjaWZpZWQgaW4gZmllbGRzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIGl0ZW1zLiAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBPcmlnaW5hbCkgPT4gYm9vbGVhbjtcbiAgLyoqIE9yZGVyIHRoZSBpdGVtcyBieSBhIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uICovXG4gIG9yZGVyPzogRGF0YUludGVyZmFjZU9yZGVyPE1hcHBlZD47XG59XG5cbi8qKlxuICogQ29tbW9uIGludGVyZmFjZSBmb3IgZGF0YSBzZXRzIGFuZCBkYXRhIHZpZXcuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZCAobWlzc2luZyBpZHMgd2lsbCBiZSBnZW5lcmF0ZWQgdXBvbiBpbnNlcnRpb24pLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgSXRlbSB0eXBlIHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2U8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4ge1xuICAvKiogVGhlIG51bWJlciBvZiBpdGVtcy4gKi9cbiAgbGVuZ3RoOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBrZXkgb2YgaWQgcHJvcGVydHkuICovXG4gIGlkUHJvcDogSWRQcm9wO1xuXG4gIC8qKlxuICAgKiBBZGQgYSB1bml2ZXJzYWwgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgKmAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW55IG9mIHRoZSBldmVudHMgYGFkZGAsIGB1cGRhdGVgLCBhbmQgYHJlbW92ZWAgb2NjdXJzLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcIipcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYGFkZGAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgYWRkYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIGFkZGVkLCBvciB3aGVuIGFuIGl0ZW0gaXMgdXBkYXRlZCB3aGlsZSBub3QgeWV0IGV4aXN0aW5nLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcImFkZFwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl0pOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGEgYHJlbW92ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgcmVtb3ZlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgdXBkYXRlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBleGlzdGluZyBpdGVtIG9yIGEgc2V0IG9mIGV4aXN0aW5nIGl0ZW1zIGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHVuaXZlcnNhbCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiKlwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdKTogdm9pZDtcbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBgYWRkYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiYWRkXCIsIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYSBgcmVtb3ZlYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zLlxuICAgKi9cbiAgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyByZXF1ZXN0ZWQgaXRlbXMuXG4gICAqL1xuICBnZXQob3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPik6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBhcmUgbm8gaXRlbXMpLlxuICAgKi9cbiAgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgcmVxdWVzdGVkIGl0ZW1zIG9yIGlmIHJlcXVlc3RlZCBhbiBvYmplY3QgbWFwIG9mIGl0ZW1zIChtYXkgYmUgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGFyZSBubyBpdGVtcykuXG4gICAqL1xuICBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBvciBudWxsIGlmIHRoZSBpZCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGl0ZW0uXG4gICAqL1xuICBnZXQoaWQ6IElkKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIG9yIG51bGwgaWYgdGhlIGlkIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbS5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIGlmIGZvdW5kIG9yIG51bGwgb3RoZXJ3aXNlLiBJZiByZXF1ZXN0ZWQgYW4gb2JqZWN0IG1hcCB3aXRoIDAgdG8gMSBpdGVtcy5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChpZHM6IElkW10pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICogSWYgcmVxdWVzdGVkIGFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gSWQgb3IgaWRzIHRvIGJlIHJldHVybmVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIGl0ZW1zIChmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSBpZHMgKHNpbmdsZSBvciBhcnJheSkgYW5kIHRoZSBvcHRpb25zLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIERhdGFTZXQgdG8gd2hpY2ggdGhlIGluc3RhbmNlIGltcGxlbWVudGluZyB0aGlzIGludGVyZmFjZSBpcyBjb25uZWN0ZWQuXG4gICAqIEluIGNhc2UgdGhlcmUgaXMgYSBjaGFpbiBvZiBtdWx0aXBsZSBEYXRhVmlld3MsIHRoZSByb290IERhdGFTZXQgb2YgdGhpcyBjaGFpbiBpcyByZXR1cm5lZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRhdGEgc2V0IHRoYXQgYWN0dWFsbHkgY29udGFpbnMgdGhlIGRhdGEuXG4gICAqL1xuICBnZXREYXRhU2V0KCk6IERhdGFTZXQ8SXRlbSwgSWRQcm9wPjtcblxuICAvKipcbiAgICogR2V0IGlkcyBvZiBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiByZXR1cm5lZCBpZHMgdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICovXG4gIGdldElkcyhvcHRpb25zPzogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT4pOiBJZFtdO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiBpdGVyYXRpb24gdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBFeGVjdXRlZCBpbiBzaW1pbGFyIGZhc2hpb24gdG8gQXJyYXkuZm9yRWFjaCBjYWxsYmFjaywgYnV0IGluc3RlYWQgb2YgaXRlbSwgaW5kZXgsIGFycmF5IHJlY2VpdmVzIGl0ZW0sIGlkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICovXG4gIGZvckVhY2goXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPlxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBNYXAgZWFjaCBpdGVtIGludG8gZGlmZmVyZW50IGl0ZW0gYW5kIHJldHVybiB0aGVtIGFzIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBObyBndWFyYW50ZWUgaXMgZ2l2ZW4gYWJvdXQgdGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBldmVuIGlmIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkICh0aGUgaXRlbXMgYXJlIHNvcnRlZCBhZnRlciB0aGUgbWFwcGluZykuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEFycmF5Lm1hcC1saWtlIGNhbGxiYWNrLCBidXQgb25seSB3aXRoIHRoZSBmaXJzdCB0d28gcGFyYW1zLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIG1hcHBlZCBpdGVtcy5cbiAgICovXG4gIG1hcDxUPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5cbiAgKTogVFtdO1xuXG4gIC8qKlxuICAgKiBTdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBJZHMgb2YgdGhlIGl0ZW1zIHRvIGJlIGluY2x1ZGVkIGluIHRoaXMgc3RyZWFtIChtaXNzaW5nIGFyZSBpZ25vcmVkKSwgYWxsIGlmIG9taXR0ZWQuXG4gICAqIEByZXR1cm5zIFRoZSBkYXRhIHN0cmVhbSBmb3IgdGhpcyBkYXRhIHNldC5cbiAgICovXG4gIHN0cmVhbShpZHM/OiBJdGVyYWJsZTxJZD4pOiBEYXRhU3RyZWFtPEl0ZW0+O1xufVxuIiwgIi8qKiBRdWV1ZSBjb25maWd1cmF0aW9uIG9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVPcHRpb25zIHtcbiAgLyoqIFRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBCeSBkZWZhdWx0IHRoZXJlIGlzIG5vIGF1dG9tYXRpYyBmbHVzaGluZyAoYG51bGxgKS4gKi9cbiAgZGVsYXk/OiBudWxsIHwgbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBpcyBgSW5maW5pdHlgLiAqL1xuICBtYXg/OiBudW1iZXI7XG59XG4vKipcbiAqIFF1ZXVlIGV4dGVuZGluZyBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIG1ldGhvZCBuYW1lcyB0byBiZSByZXBsYWNlZCBieSBxdWV1ZWQgdmVyc2lvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVFeHRlbmRPcHRpb25zPFQ+IHtcbiAgLyoqIEEgbGlzdCB3aXRoIG1ldGhvZCBuYW1lcyBvZiB0aGUgbWV0aG9kcyBvbiB0aGUgb2JqZWN0IHRvIGJlIHJlcGxhY2VkIHdpdGggcXVldWVkIG9uZXMuICovXG4gIHJlcGxhY2U6IFRbXTtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0IHZhbHVlIGlzIG51bGwuICovXG4gIGRlbGF5PzogbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBvZiBtYXggaXMgSW5maW5pdHkuICovXG4gIG1heD86IG51bWJlcjtcbn1cbi8qKlxuICogUXVldWUgY2FsbCBlbnRyeS5cbiAqIC0gQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZC5cbiAqIC0gQW4gb2JqZWN0IHdpdGggZnVuY3Rpb24sIGFyZ3MsIGNvbnRleHQgKGxpa2UgZnVuY3Rpb24uYmluZChjb250ZXh0LCAuLi5hcmdzKSkuXG4gKi9cbnR5cGUgUXVldWVDYWxsRW50cnkgPVxuICB8IEZ1bmN0aW9uXG4gIHwge1xuICAgICAgZm46IEZ1bmN0aW9uO1xuICAgICAgYXJnczogdW5rbm93bltdO1xuICAgIH1cbiAgfCB7XG4gICAgICBmbjogRnVuY3Rpb247XG4gICAgICBhcmdzOiB1bmtub3duW107XG4gICAgICBjb250ZXh0OiB1bmtub3duO1xuICAgIH07XG5cbmludGVyZmFjZSBRdWV1ZUV4dGVuZGVkPE8+IHtcbiAgb2JqZWN0OiBPO1xuICBtZXRob2RzOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG9yaWdpbmFsOiB1bmtub3duO1xuICB9W107XG59XG5cbi8qKlxuICogQSBxdWV1ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBtZXRob2QgbmFtZXMgdG8gYmUgcmVwbGFjZWQgYnkgcXVldWVkIHZlcnNpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUXVldWU8VCA9IG5ldmVyPiB7XG4gIC8qKiBEZWxheSBpbiBtaWxsaXNlY29uZHMuIElmIGRlZmluZWQgdGhlIHF1ZXVlIHdpbGwgYmUgcGVyaW9kaWNhbGx5IGZsdXNoZWQuICovXG4gIHB1YmxpYyBkZWxheTogbnVsbCB8IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHF1ZXVlIGJlZm9yZSBpdCB3aWxsIGJlIGZsdXNoZWQuICovXG4gIHB1YmxpYyBtYXg6IG51bWJlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9xdWV1ZToge1xuICAgIGZuOiBGdW5jdGlvbjtcbiAgICBhcmdzPzogdW5rbm93bltdO1xuICAgIGNvbnRleHQ/OiB1bmtub3duO1xuICB9W10gPSBbXTtcblxuICBwcml2YXRlIF90aW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9leHRlbmRlZDogbnVsbCB8IFF1ZXVlRXh0ZW5kZWQ8VD4gPSBudWxsO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgUXVldWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUXVldWUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zPzogUXVldWVPcHRpb25zKSB7XG4gICAgLy8gb3B0aW9uc1xuICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgIHRoaXMubWF4ID0gSW5maW5pdHk7XG5cbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBRdWV1ZSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHNldE9wdGlvbnMob3B0aW9ucz86IFF1ZXVlT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmRlbGF5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLmRlbGF5ID0gb3B0aW9ucy5kZWxheTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLm1heCA9IG9wdGlvbnMubWF4O1xuICAgIH1cblxuICAgIHRoaXMuX2ZsdXNoSWZOZWVkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmQgYW4gb2JqZWN0IHdpdGggcXVldWluZyBmdW5jdGlvbmFsaXR5LlxuICAgKiBUaGUgb2JqZWN0IHdpbGwgYmUgZXh0ZW5kZWQgd2l0aCBhIGZ1bmN0aW9uIGZsdXNoLCBhbmQgdGhlIG1ldGhvZHMgcHJvdmlkZWQgaW4gb3B0aW9ucy5yZXBsYWNlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBxdWV1ZWQgb25lcy5cbiAgICpcbiAgICogQHBhcmFtIG9iamVjdCAtIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBxdWV1ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZXh0ZW5kPE8gZXh0ZW5kcyB7IGZsdXNoPzogKCkgPT4gdm9pZCB9LCBLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IE8sXG4gICAgb3B0aW9uczogUXVldWVFeHRlbmRPcHRpb25zPEs+XG4gICk6IFF1ZXVlPE8+IHtcbiAgICBjb25zdCBxdWV1ZSA9IG5ldyBRdWV1ZTxPPihvcHRpb25zKTtcblxuICAgIGlmIChvYmplY3QuZmx1c2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFyZ2V0IG9iamVjdCBhbHJlYWR5IGhhcyBhIHByb3BlcnR5IGZsdXNoXCIpO1xuICAgIH1cbiAgICBvYmplY3QuZmx1c2ggPSAoKTogdm9pZCA9PiB7XG4gICAgICBxdWV1ZS5mbHVzaCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBtZXRob2RzOiBRdWV1ZUV4dGVuZGVkPE8+W1wibWV0aG9kc1wiXSA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJmbHVzaFwiLFxuICAgICAgICBvcmlnaW5hbDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXBsYWNlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMucmVwbGFjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBuYW1lID0gb3B0aW9ucy5yZXBsYWNlW2ldO1xuICAgICAgICBtZXRob2RzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBvcmlnaW5hbDogKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPilbbmFtZV0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICBxdWV1ZS5yZXBsYWNlKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPiwgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVldWUuX2V4dGVuZGVkID0ge1xuICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICBtZXRob2RzOiBtZXRob2RzLFxuICAgIH07XG5cbiAgICByZXR1cm4gcXVldWU7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSB0aGUgcXVldWUuIFRoZSBxdWV1ZSB3aWxsIGZpcnN0IGZsdXNoIGFsbCBxdWV1ZWQgYWN0aW9ucywgYW5kIGluIGNhc2UgaXQgaGFzIGV4dGVuZGVkIGFuIG9iamVjdCwgd2lsbCByZXN0b3JlIHRoZSBvcmlnaW5hbCBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsdXNoKCk7XG5cbiAgICBpZiAodGhpcy5fZXh0ZW5kZWQpIHtcbiAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuX2V4dGVuZGVkLm9iamVjdDtcbiAgICAgIGNvbnN0IG1ldGhvZHMgPSB0aGlzLl9leHRlbmRlZC5tZXRob2RzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IG1ldGhvZHNbaV07XG4gICAgICAgIGlmIChtZXRob2Qub3JpZ2luYWwpIHtcbiAgICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICAgIChvYmplY3QgYXMgYW55KVttZXRob2QubmFtZV0gPSBtZXRob2Qub3JpZ2luYWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBkZWxldGUgKG9iamVjdCBhcyBhbnkpW21ldGhvZC5uYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fZXh0ZW5kZWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgbWV0aG9kIG9uIGFuIG9iamVjdCB3aXRoIGEgcXVldWVkIHZlcnNpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgLSBPYmplY3QgaGF2aW5nIHRoZSBtZXRob2QuXG4gICAqIEBwYXJhbSBtZXRob2QgLSBUaGUgbWV0aG9kIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgcmVwbGFjZTxNIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IFJlY29yZDxNLCAoKSA9PiB2b2lkPixcbiAgICBtZXRob2Q6IE1cbiAgKTogdm9pZCB7XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzIC0tIEZ1bmN0aW9uIHRoaXMgaXMgbmVjZXNzYXJ5IGluIHRoZSBmdW5jdGlvbiBiZWxsb3csIHNvIGNsYXNzIHRoaXMgaGFzIHRvIGJlIHNhdmVkIGludG8gYSB2YXJpYWJsZSBoZXJlLiAqL1xuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjb25zdCBvcmlnaW5hbCA9IG9iamVjdFttZXRob2RdO1xuICAgIGlmICghb3JpZ2luYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBcIiArIG1ldGhvZCArIFwiIHVuZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBvYmplY3RbbWV0aG9kXSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICAgIC8vIGFkZCB0aGlzIGNhbGwgdG8gdGhlIHF1ZXVlXG4gICAgICBtZS5xdWV1ZSh7XG4gICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgIGZuOiBvcmlnaW5hbCxcbiAgICAgICAgY29udGV4dDogdGhpcyxcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUXVldWUgYSBjYWxsLlxuICAgKlxuICAgKiBAcGFyYW0gZW50cnkgLSBUaGUgZnVuY3Rpb24gb3IgZW50cnkgdG8gYmUgcXVldWVkLlxuICAgKi9cbiAgcHVibGljIHF1ZXVlKGVudHJ5OiBRdWV1ZUNhbGxFbnRyeSk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7IGZuOiBlbnRyeSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWUucHVzaChlbnRyeSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmx1c2hJZk5lZWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHF1ZXVlIG5lZWRzIHRvIGJlIGZsdXNoZWQuXG4gICAqL1xuICBwcml2YXRlIF9mbHVzaElmTmVlZGVkKCk6IHZvaWQge1xuICAgIC8vIGZsdXNoIHdoZW4gdGhlIG1heGltdW0gaXMgZXhjZWVkZWQuXG4gICAgaWYgKHRoaXMuX3F1ZXVlLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gICAgLy8gZmx1c2ggYWZ0ZXIgYSBwZXJpb2Qgb2YgaW5hY3Rpdml0eSB3aGVuIGEgZGVsYXkgaXMgY29uZmlndXJlZFxuICAgIGlmICh0aGlzLl90aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHR5cGVvZiB0aGlzLmRlbGF5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH0sIHRoaXMuZGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaCBhbGwgcXVldWVkIGNhbGxzXG4gICAqL1xuICBwdWJsaWMgZmx1c2goKTogdm9pZCB7XG4gICAgdGhpcy5fcXVldWUuc3BsaWNlKDApLmZvckVhY2goKGVudHJ5KTogdm9pZCA9PiB7XG4gICAgICBlbnRyeS5mbi5hcHBseShlbnRyeS5jb250ZXh0IHx8IGVudHJ5LmZuLCBlbnRyeS5hcmdzIHx8IFtdKTtcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIERhdGFJbnRlcmZhY2UsXG4gIEV2ZW50Q2FsbGJhY2tzV2l0aEFueSxcbiAgRXZlbnROYW1lLFxuICBFdmVudE5hbWVXaXRoQW55LFxuICBFdmVudFBheWxvYWRzLFxuICBJZCxcbiAgUGFydEl0ZW0sXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbnR5cGUgRXZlbnRTdWJzY3JpYmVyczxJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPiwgSWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgW05hbWUgaW4ga2V5b2YgRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5dOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG59O1xuXG4vKipcbiAqIHtAbGluayBEYXRhU2V0fSBjb2RlIHRoYXQgY2FuIGJlIHJldXNlZCBpbiB7QGxpbmsgRGF0YVZpZXd9IG9yIG90aGVyIHNpbWlsYXIgaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBEYXRhSW50ZXJmYWNlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFTZXRQYXJ0PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGltcGxlbWVudHMgUGljazxEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4sIFwib25cIiB8IFwib2ZmXCI+XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmliZXJzOiB7XG4gICAgW05hbWUgaW4gRXZlbnROYW1lV2l0aEFueV06IEV2ZW50U3Vic2NyaWJlcnM8SXRlbSwgSWRQcm9wPltOYW1lXVtdO1xuICB9ID0ge1xuICAgIFwiKlwiOiBbXSxcbiAgICBhZGQ6IFtdLFxuICAgIHJlbW92ZTogW10sXG4gICAgdXBkYXRlOiBbXSxcbiAgfTtcblxuICBwcm90ZWN0ZWQgX3RyaWdnZXIoXG4gICAgZXZlbnQ6IFwiYWRkXCIsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1wiYWRkXCJdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG4gIHByb3RlY3RlZCBfdHJpZ2dlcihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgcHJvdGVjdGVkIF90cmlnZ2VyKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogVHJpZ2dlciBhbiBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIEV2ZW50IHBheWxvYWQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIElkIG9mIHRoZSBzZW5kZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3RyaWdnZXI8TmFtZSBleHRlbmRzIEV2ZW50TmFtZT4oXG4gICAgZXZlbnQ6IE5hbWUsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W05hbWVdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIGlmICgoZXZlbnQgYXMgc3RyaW5nKSA9PT0gXCIqXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB0cmlnZ2VyIGV2ZW50ICpcIik7XG4gICAgfVxuXG4gICAgWy4uLnRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XSwgLi4udGhpcy5fc3Vic2NyaWJlcnNbXCIqXCJdXS5mb3JFYWNoKFxuICAgICAgKHN1YnNjcmliZXIpOiB2b2lkID0+IHtcbiAgICAgICAgc3Vic2NyaWJlcihldmVudCwgcGF5bG9hZCwgc2VuZGVySWQgIT0gbnVsbCA/IHNlbmRlcklkIDogbnVsbCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwiKlwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJhZGRcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl1cbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBhbiBldmVudCwgYWRkIGFuIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBOb24tZnVuY3Rpb24gY2FsbGJhY2tzIGFyZSBpZ25vcmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgb248TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XS5wdXNoKGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLy8gQFRPRE86IE1heWJlIHRocm93IGZvciBpbnZhbGlkIGNhbGxiYWNrcz9cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcIipcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcImFkZFwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXVxuICApOiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvZmYoXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIGFuIGV2ZW50LCByZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIElmIHRoZSBzYW1lIGNhbGxiYWNrIHdhcyBzdWJzY3JpYmVkIG1vcmUgdGhhbiBvbmNlICoqYWxsKiogb2NjdXJlbmNlcyB3aWxsIGJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIG1ldGhvZC5cbiAgICovXG4gIHB1YmxpYyBvZmY8TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0gPSB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0uZmlsdGVyKFxuICAgICAgKHN1YnNjcmliZXIpOiBib29sZWFuID0+IHN1YnNjcmliZXIgIT09IGNhbGxiYWNrXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb24gaW5zdGVhZCAoUFM6IERhdGFWaWV3LnN1YnNjcmliZSA9PT0gRGF0YVZpZXcub24pLlxuICAgKi9cbiAgcHVibGljIHN1YnNjcmliZTogRGF0YVNldFBhcnQ8SXRlbSwgSWRQcm9wPltcIm9uXCJdID0gRGF0YVNldFBhcnQucHJvdG90eXBlLm9uO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9mZiBpbnN0ZWFkIChQUzogRGF0YVZpZXcudW5zdWJzY3JpYmUgPT09IERhdGFWaWV3Lm9mZikuXG4gICAqL1xuICBwdWJsaWMgdW5zdWJzY3JpYmU6IERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5bXCJvZmZcIl0gPVxuICAgIERhdGFTZXRQYXJ0LnByb3RvdHlwZS5vZmY7XG5cbiAgLyogZGV2ZWxibG9jazpzdGFydCAqL1xuICBwdWJsaWMgZ2V0IHRlc3RMZWFrU3Vic2NyaWJlcnMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlcnM7XG4gIH1cbiAgLyogZGV2ZWxibG9jazplbmQgKi9cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgU2V0YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQtb2JqZWN0c1xuY29sbGVjdGlvbignU2V0JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU2V0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SXRlcmF0b3I7XG4iLCAiaW1wb3J0IHsgSWQgfSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG4vKipcbiAqIERhdGEgc3RyZWFtXG4gKlxuICogQHJlbWFya3NcbiAqIHtAbGluayBEYXRhU3RyZWFtfSBvZmZlcnMgYW4gYWx3YXlzIHVwIHRvIGRhdGUgc3RyZWFtIG9mIGl0ZW1zIGZyb20gYSB7QGxpbmsgRGF0YVNldH0gb3Ige0BsaW5rIERhdGFWaWV3fS5cbiAqIFRoYXQgbWVhbnMgdGhhdCB0aGUgc3RyZWFtIGlzIGV2YWx1YXRlZCBhdCB0aGUgdGltZSBvZiBpdGVyYXRpb24sIGNvbnZlcnNpb24gdG8gYW5vdGhlciBkYXRhIHR5cGUgb3Igd2hlbiB7QGxpbmsgY2FjaGV9IGlzIGNhbGxlZCwgbm90IHdoZW4gdGhlIHtAbGluayBEYXRhU3RyZWFtfSB3YXMgY3JlYXRlZC5cbiAqIE11bHRpcGxlIGludm9jYXRpb25zIG9mIGZvciBleGFtcGxlIHtAbGluayB0b0l0ZW1BcnJheX0gbWF5IHlpZWxkIGRpZmZlcmVudCByZXN1bHRzIChpZiB0aGUgZGF0YSBzb3VyY2UgbGlrZSBmb3IgZXhhbXBsZSB7QGxpbmsgRGF0YVNldH0gZ2V0cyBtb2RpZmllZCkuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBUaGUgaXRlbSB0eXBlIHRoaXMgc3RyZWFtIGlzIGdvaW5nIHRvIHdvcmsgd2l0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFTdHJlYW08SXRlbT4gaW1wbGVtZW50cyBJdGVyYWJsZTxbSWQsIEl0ZW1dPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhaXJzOiBJdGVyYWJsZTxbSWQsIEl0ZW1dPjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgc3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gcGFpcnMgLSBUaGUgaWQsIGl0ZW0gcGFpcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFpcnM6IEl0ZXJhYmxlPFtJZCwgSXRlbV0+KSB7XG4gICAgdGhpcy5fcGFpcnMgPSBwYWlycztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2Yga2V5LCB2YWx1ZSBwYWlycyBmb3IgZXZlcnkgZW50cnkgaW4gdGhlIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiB7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICB5aWVsZCBbaWQsIGl0ZW1dO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2Yga2V5LCB2YWx1ZSBwYWlycyBmb3IgZXZlcnkgZW50cnkgaW4gdGhlIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyAqZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+IHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHlpZWxkIFtpZCwgaXRlbV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpdGVyYWJsZSBvZiBrZXlzIGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKmtleXMoKTogSXRlcmFibGVJdGVyYXRvcjxJZD4ge1xuICAgIGZvciAoY29uc3QgW2lkXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgeWllbGQgaWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpdGVyYWJsZSBvZiB2YWx1ZXMgaW4gdGhlIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyAqdmFsdWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8SXRlbT4ge1xuICAgIGZvciAoY29uc3QgWywgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHlpZWxkIGl0ZW07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgaWRzIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYXJyYXkgbWF5IGNvbnRhaW4gZHVwbGljaXRpZXMuXG4gICAqIEByZXR1cm5zIFRoZSBhcnJheSB3aXRoIGFsbCBpZHMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0lkQXJyYXkoKTogSWRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9wYWlyc10ubWFwKChwYWlyKTogSWQgPT4gcGFpclswXSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFycmF5IG1heSBjb250YWluIGR1cGxpY2l0aWVzLlxuICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCBhbGwgaXRlbXMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0l0ZW1BcnJheSgpOiBJdGVtW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcGFpcnNdLm1hcCgocGFpcik6IEl0ZW0gPT4gcGFpclsxXSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBlbnRyaWVzIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYXJyYXkgbWF5IGNvbnRhaW4gZHVwbGljaXRpZXMuXG4gICAqIEByZXR1cm5zIFRoZSBhcnJheSB3aXRoIGFsbCBlbnRyaWVzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9FbnRyeUFycmF5KCk6IFtJZCwgSXRlbV1bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9wYWlyc107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIG9iamVjdCBtYXAgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIGluIHRoaXMgc3RyZWFtIGFjY2Vzc2libGUgYnkgaWRzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJbiBjYXNlIG9mIGR1cGxpY2F0ZSBpZHMgKGNvZXJjZWQgdG8gc3RyaW5nIHNvIGA3ID09ICc3J2ApIHRoZSBsYXN0IGVuY291dGVyZWQgYXBwZWFycyBpbiB0aGUgcmV0dXJuZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgb2JqZWN0IG1hcCBvZiBhbGwgaWQg4oaSIGl0ZW0gcGFpcnMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b09iamVjdE1hcCgpOiBSZWNvcmQ8SWQsIEl0ZW0+IHtcbiAgICBjb25zdCBtYXA6IFJlY29yZDxJZCwgSXRlbT4gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgbWFwW2lkXSA9IGl0ZW07XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgbWFwIGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBpbiB0aGlzIHN0cmVhbSBhY2Nlc3NpYmxlIGJ5IGlkcy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIG1hcCBvZiBhbGwgaWQg4oaSIGl0ZW0gcGFpcnMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b01hcCgpOiBNYXA8SWQsIEl0ZW0+IHtcbiAgICByZXR1cm4gbmV3IE1hcCh0aGlzLl9wYWlycyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc2V0IGNvbnRhaW5pbmcgYWxsIHRoZSAodW5pcXVlKSBpZHMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBzZXQgb2YgYWxsIGlkcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvSWRTZXQoKTogU2V0PElkPiB7XG4gICAgcmV0dXJuIG5ldyBTZXQodGhpcy50b0lkQXJyYXkoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc2V0IGNvbnRhaW5pbmcgYWxsIHRoZSAodW5pcXVlKSBpdGVtcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNldCBvZiBhbGwgaXRlbXMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0l0ZW1TZXQoKTogU2V0PEl0ZW0+IHtcbiAgICByZXR1cm4gbmV3IFNldCh0aGlzLnRvSXRlbUFycmF5KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhY2hlIHRoZSBpdGVtcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIG1ldGhvZCBhbGxvd3MgZm9yIGl0ZW1zIHRvIGJlIGZldGNoZWQgaW1tZWRpYXRlbGx5IGFuZCB1c2VkIChwb3NzaWJseSBtdWx0aXBsZSB0aW1lcykgbGF0ZXIuXG4gICAqIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gb3B0aW1pemUgcGVyZm9ybWFuY2UgYXMge0BsaW5rIERhdGFTdHJlYW19IHdvdWxkIG90aGVyd2lzZSByZWV2YWx1YXRlIGV2ZXJ5dGhpbmcgdXBvbiBlYWNoIGl0ZXJhdGlvbi5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIGNvbnN0IGRzID0gbmV3IERhdGFTZXQoW+KApl0pXG4gICAqXG4gICAqIGNvbnN0IGNhY2hlZFN0cmVhbSA9IGRzLnN0cmVhbSgpXG4gICAqICAgLmZpbHRlcijigKYpXG4gICAqICAgLnNvcnQo4oCmKVxuICAgKiAgIC5tYXAo4oCmKVxuICAgKiAgIC5jYWNoZWQo4oCmKSAvLyBEYXRhIGFyZSBmZXRjaGVkLCBwcm9jZXNzZWQgYW5kIGNhY2hlZCBoZXJlLlxuICAgKlxuICAgKiBkcy5jbGVhcigpXG4gICAqIGNoYWNoZWRTdHJlYW0gLy8gU3RpbGwgaGFzIGFsbCB0aGUgaXRlbXMuXG4gICAqIGBgYFxuICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgRGF0YVN0cmVhbX0gd2l0aCBjYWNoZWQgaXRlbXMgKGRldGFjaGVkIGZyb20gdGhlIG9yaWdpbmFsIHtAbGluayBEYXRhU2V0fSkuXG4gICAqL1xuICBwdWJsaWMgY2FjaGUoKTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtKFsuLi50aGlzLl9wYWlyc10pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGlzdGluY3QgdmFsdWVzIG9mIGdpdmVuIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBwaWNrcyBhbmQgcG9zc2libHkgY29udmVydHMgdGhlIHByb3BlcnR5LlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgZGlzdGluY3QgdmFsdWUuXG4gICAqIEByZXR1cm5zIEEgc2V0IG9mIGFsbCBkaXN0aW5jdCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIGRpc3RpbmN0PFQ+KGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBUKTogU2V0PFQ+IHtcbiAgICBjb25zdCBzZXQgPSBuZXcgU2V0PFQ+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHNldC5hZGQoY2FsbGJhY2soaXRlbSwgaWQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMgb2YgdGhlIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgZGVjaWRlcyB3aGV0aGVyIGFuIGl0ZW0gd2lsbCBiZSBpbmNsdWRlZC5cbiAgICogQHJldHVybnMgQSBuZXcgZGF0YSBzdHJlYW0gd2l0aCB0aGUgZmlsdGVyZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgZmlsdGVyKGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBib29sZWFuKTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgY29uc3QgcGFpcnMgPSB0aGlzLl9wYWlycztcbiAgICByZXR1cm4gbmV3IERhdGFTdHJlYW08SXRlbT4oe1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBJdGVtXT4ge1xuICAgICAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgcGFpcnMpIHtcbiAgICAgICAgICBpZiAoY2FsbGJhY2soaXRlbSwgaWQpKSB7XG4gICAgICAgICAgICB5aWVsZCBbaWQsIGl0ZW1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggaXRlbSBvZiB0aGUgc3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGludm9rZWQgZm9yIGVhY2ggaXRlbS5cbiAgICovXG4gIHB1YmxpYyBmb3JFYWNoKGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBib29sZWFuKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICBjYWxsYmFjayhpdGVtLCBpZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcCB0aGUgaXRlbXMgaW50byBhIGRpZmZlcmVudCB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSBjb252ZXJzaW9uLlxuICAgKiBAdHlwZVBhcmFtIE1hcHBlZCAtIFRoZSB0eXBlIG9mIHRoZSBpdGVtIGFmdGVyIG1hcHBpbmcuXG4gICAqIEByZXR1cm5zIEEgbmV3IGRhdGEgc3RyZWFtIHdpdGggdGhlIG1hcHBlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBtYXA8TWFwcGVkPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gTWFwcGVkXG4gICk6IERhdGFTdHJlYW08TWFwcGVkPiB7XG4gICAgY29uc3QgcGFpcnMgPSB0aGlzLl9wYWlycztcbiAgICByZXR1cm4gbmV3IERhdGFTdHJlYW08TWFwcGVkPih7XG4gICAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIE1hcHBlZF0+IHtcbiAgICAgICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHBhaXJzKSB7XG4gICAgICAgICAgeWllbGQgW2lkLCBjYWxsYmFjayhpdGVtLCBpZCldO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaXRlbSB3aXRoIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGdpdmVuIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBwaWNrcyBhbmQgcG9zc2libHkgY29udmVydHMgdGhlIHByb3BlcnR5LlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSB3aXRoIHRoZSBtYXhpbXVtIGlmIGZvdW5kIG90aGVyd2lzZSBudWxsLlxuICAgKi9cbiAgcHVibGljIG1heChjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gbnVtYmVyKTogSXRlbSB8IG51bGwge1xuICAgIGNvbnN0IGl0ZXIgPSB0aGlzLl9wYWlyc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgbGV0IGN1cnIgPSBpdGVyLm5leHQoKTtcbiAgICBpZiAoY3Vyci5kb25lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgbWF4SXRlbTogSXRlbSA9IGN1cnIudmFsdWVbMV07XG4gICAgbGV0IG1heFZhbHVlOiBudW1iZXIgPSBjYWxsYmFjayhjdXJyLnZhbHVlWzFdLCBjdXJyLnZhbHVlWzBdKTtcbiAgICB3aGlsZSAoIShjdXJyID0gaXRlci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIGNvbnN0IFtpZCwgaXRlbV0gPSBjdXJyLnZhbHVlO1xuICAgICAgY29uc3QgdmFsdWUgPSBjYWxsYmFjayhpdGVtLCBpZCk7XG4gICAgICBpZiAodmFsdWUgPiBtYXhWYWx1ZSkge1xuICAgICAgICBtYXhWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBtYXhJdGVtID0gaXRlbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF4SXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGl0ZW0gd2l0aCB0aGUgbWluaW11bSB2YWx1ZSBvZiBnaXZlbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcGlja3MgYW5kIHBvc3NpYmx5IGNvbnZlcnRzIHRoZSBwcm9wZXJ0eS5cbiAgICogQHJldHVybnMgVGhlIGl0ZW0gd2l0aCB0aGUgbWluaW11bSBpZiBmb3VuZCBvdGhlcndpc2UgbnVsbC5cbiAgICovXG4gIHB1YmxpYyBtaW4oY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IG51bWJlcik6IEl0ZW0gfCBudWxsIHtcbiAgICBjb25zdCBpdGVyID0gdGhpcy5fcGFpcnNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIGxldCBjdXJyID0gaXRlci5uZXh0KCk7XG4gICAgaWYgKGN1cnIuZG9uZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IG1pbkl0ZW06IEl0ZW0gPSBjdXJyLnZhbHVlWzFdO1xuICAgIGxldCBtaW5WYWx1ZTogbnVtYmVyID0gY2FsbGJhY2soY3Vyci52YWx1ZVsxXSwgY3Vyci52YWx1ZVswXSk7XG4gICAgd2hpbGUgKCEoY3VyciA9IGl0ZXIubmV4dCgpKS5kb25lKSB7XG4gICAgICBjb25zdCBbaWQsIGl0ZW1dID0gY3Vyci52YWx1ZTtcbiAgICAgIGNvbnN0IHZhbHVlID0gY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgaWYgKHZhbHVlIDwgbWluVmFsdWUpIHtcbiAgICAgICAgbWluVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgbWluSXRlbSA9IGl0ZW07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbkl0ZW07XG4gIH1cblxuICAvKipcbiAgICogUmVkdWNlIHRoZSBpdGVtcyBpbnRvIGEgc2luZ2xlIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSByZWR1Y3Rpb24uXG4gICAqIEBwYXJhbSBhY2N1bXVsYXRvciAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBhY2N1bXVsYXRvci5cbiAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgKiBAcmV0dXJucyBUaGUgcmVkdWNlZCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyByZWR1Y2U8VD4oXG4gICAgY2FsbGJhY2s6IChhY2N1bXVsYXRvcjogVCwgaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBULFxuICAgIGFjY3VtdWxhdG9yOiBUXG4gICk6IFQge1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgYWNjdW11bGF0b3IgPSBjYWxsYmFjayhhY2N1bXVsYXRvciwgaXRlbSwgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogU29ydCB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEl0ZW0gY29tcGFyYXRvci5cbiAgICogQHJldHVybnMgQSBuZXcgc3RyZWFtIHdpdGggc29ydGVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIHNvcnQoXG4gICAgY2FsbGJhY2s6IChpdGVtQTogSXRlbSwgaXRlbUI6IEl0ZW0sIGlkQTogSWQsIGlkQjogSWQpID0+IG51bWJlclxuICApOiBEYXRhU3RyZWFtPEl0ZW0+IHtcbiAgICByZXR1cm4gbmV3IERhdGFTdHJlYW0oe1xuICAgICAgW1N5bWJvbC5pdGVyYXRvcl06ICgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+ID0+XG4gICAgICAgIFsuLi50aGlzLl9wYWlyc11cbiAgICAgICAgICAuc29ydCgoW2lkQSwgaXRlbUFdLCBbaWRCLCBpdGVtQl0pOiBudW1iZXIgPT5cbiAgICAgICAgICAgIGNhbGxiYWNrKGl0ZW1BLCBpdGVtQiwgaWRBLCBpZEIpXG4gICAgICAgICAgKVxuICAgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCksXG4gICAgfSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyB2NCBhcyB1dWlkNCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyBwdXJlRGVlcE9iamVjdEFzc2lnbiB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuaW1wb3J0IHtcbiAgRGF0YUludGVyZmFjZSxcbiAgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXksXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0LFxuICBEYXRhSW50ZXJmYWNlTWFwT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZU9yZGVyLFxuICBEZWVwUGFydGlhbCxcbiAgRXZlbnRQYXlsb2FkcyxcbiAgRnVsbEl0ZW0sXG4gIElkLFxuICBPcHRJZCxcbiAgUGFydEl0ZW0sXG4gIFVwZGF0ZUl0ZW0sXG4gIGlzSWQsXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbmltcG9ydCB7IFF1ZXVlLCBRdWV1ZU9wdGlvbnMgfSBmcm9tIFwiLi9xdWV1ZVwiO1xuaW1wb3J0IHsgRGF0YVNldFBhcnQgfSBmcm9tIFwiLi9kYXRhLXNldC1wYXJ0XCI7XG5pbXBvcnQgeyBEYXRhU3RyZWFtIH0gZnJvbSBcIi4vZGF0YS1zdHJlYW1cIjtcblxuLyoqXG4gKiBJbml0aWFsIERhdGFTZXQgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wIGV4dGVuZHMgc3RyaW5nPiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmllbGQgY29udGFpbmluZyB0aGUgaWQgb2YgdGhlIGl0ZW1zLiBXaGVuIGRhdGEgaXMgZmV0Y2hlZCBmcm9tIGEgc2VydmVyIHdoaWNoIHVzZXMgc29tZSBzcGVjaWZpYyBmaWVsZCB0byBpZGVudGlmeSBpdGVtcywgdGhpcyBmaWVsZCBuYW1lIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlIERhdGFTZXQgdXNpbmcgdGhlIG9wdGlvbiBgZmllbGRJZGAuIEZvciBleGFtcGxlIFtDb3VjaERCXShodHRwOi8vY291Y2hkYi5hcGFjaGUub3JnLykgdXNlcyB0aGUgZmllbGQgYCdfaWQnYCB0byBpZGVudGlmeSBkb2N1bWVudHMuXG4gICAqL1xuICBmaWVsZElkPzogSWRQcm9wO1xuICAvKipcbiAgICogUXVldWUgZGF0YSBjaGFuZ2VzICgnYWRkJywgJ3VwZGF0ZScsICdyZW1vdmUnKSBhbmQgZmx1c2ggdGhlbSBhdCBvbmNlLiBUaGUgcXVldWUgY2FuIGJlIGZsdXNoZWQgbWFudWFsbHkgYnkgY2FsbGluZyBgRGF0YVNldC5mbHVzaCgpYCwgb3IgY2FuIGJlIGZsdXNoZWQgYWZ0ZXIgYSBjb25maWd1cmVkIGRlbGF5IG9yIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMuXG4gICAqXG4gICAqIFdoZW4gcXVldWUgaXMgdHJ1ZSwgYSBxdWV1ZSBpcyBjcmVhdGVkIHdpdGggZGVmYXVsdCBvcHRpb25zLiBPcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcHJvdmlkaW5nIGFuIG9iamVjdC5cbiAgICovXG4gIHF1ZXVlPzogUXVldWVPcHRpb25zIHwgZmFsc2U7XG59XG4vKiogRGF0YVNldCBjb25maWd1cmF0aW9uIG9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNldE9wdGlvbnMge1xuICAvKipcbiAgICogUXVldWUgY29uZmlndXJhdGlvbiBvYmplY3Qgb3IgZmFsc2UgaWYgbm8gcXVldWUgc2hvdWxkIGJlIHVzZWQuXG4gICAqXG4gICAqIC0gSWYgZmFsc2UgYW5kIHRoZXJlIHdhcyBhIHF1ZXVlIGJlZm9yZSBpdCB3aWxsIGJlIGZsdXNoZWQgYW5kIHRoZW4gcmVtb3ZlZC5cbiAgICogLSBJZiB7QGxpbmsgUXVldWVPcHRpb25zfSB0aGUgZXhpc3RpbmcgcXVldWUgd2lsbCBiZSByZWNvbmZpZ3VyZWQgb3IgYSBuZXcgcXVldWUgd2lsbCBiZSBjcmVhdGVkLlxuICAgKi9cbiAgcXVldWU/OiBRdWV1ZSB8IFF1ZXVlT3B0aW9ucyB8IGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBhbiBpZCB0byBnaXZlbiBpdGVtIGlmIGl0IGRvZXNuJ3QgaGF2ZSBvbmUgYWxyZWFkeS5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhlIGl0ZW0gd2lsbCBiZSBtb2RpZmllZC5cbiAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gdGhhdCB3aWxsIGhhdmUgYW4gaWQgYWZ0ZXIgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0gaWRQcm9wIC0gVGhlIGtleSBvZiB0aGUgaWQgcHJvcGVydHkuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqIEByZXR1cm5zIHRydWVcbiAqL1xuZnVuY3Rpb24gZW5zdXJlRnVsbEl0ZW08SXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sIElkUHJvcCBleHRlbmRzIHN0cmluZz4oXG4gIGl0ZW06IEl0ZW0sXG4gIGlkUHJvcDogSWRQcm9wXG4pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHtcbiAgaWYgKGl0ZW1baWRQcm9wXSA9PSBudWxsKSB7XG4gICAgLy8gZ2VuZXJhdGUgYW4gaWRcbiAgICBpdGVtW2lkUHJvcF0gPSB1dWlkNCgpIGFzIGFueTtcbiAgfVxuXG4gIHJldHVybiBpdGVtIGFzIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG59XG5cbi8qKlxuICogIyBEYXRhU2V0XG4gKlxuICogVmlzLmpzIGNvbWVzIHdpdGggYSBmbGV4aWJsZSBEYXRhU2V0LCB3aGljaCBjYW4gYmUgdXNlZCB0byBob2xkIGFuZFxuICogbWFuaXB1bGF0ZSB1bnN0cnVjdHVyZWQgZGF0YSBhbmQgbGlzdGVuIGZvciBjaGFuZ2VzIGluIHRoZSBkYXRhLiBUaGUgRGF0YVNldFxuICogaXMga2V5L3ZhbHVlIGJhc2VkLiBEYXRhIGl0ZW1zIGNhbiBiZSBhZGRlZCwgdXBkYXRlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZVxuICogRGF0YVNldCwgYW5kIG9uZSBjYW4gc3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gdGhlIERhdGFTZXQuIFRoZSBkYXRhIGluIHRoZVxuICogRGF0YVNldCBjYW4gYmUgZmlsdGVyZWQgYW5kIG9yZGVyZWQuIERhdGEgY2FuIGJlIG5vcm1hbGl6ZWQgd2hlbiBhcHBlbmRpbmcgaXRcbiAqIHRvIHRoZSBEYXRhU2V0IGFzIHdlbGwuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIGEgRGF0YVNldC5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gKiB2YXIgb3B0aW9ucyA9IHt9O1xuICogdmFyIGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQob3B0aW9ucyk7XG4gKlxuICogLy8gYWRkIGl0ZW1zXG4gKiAvLyBub3RlIHRoYXQgdGhlIGRhdGEgaXRlbXMgY2FuIGNvbnRhaW4gZGlmZmVyZW50IHByb3BlcnRpZXMgYW5kIGRhdGEgZm9ybWF0c1xuICogZGF0YS5hZGQoW1xuICogICB7aWQ6IDEsIHRleHQ6ICdpdGVtIDEnLCBkYXRlOiBuZXcgRGF0ZSgyMDEzLCA2LCAyMCksIGdyb3VwOiAxLCBmaXJzdDogdHJ1ZX0sXG4gKiAgIHtpZDogMiwgdGV4dDogJ2l0ZW0gMicsIGRhdGU6ICcyMDEzLTA2LTIzJywgZ3JvdXA6IDJ9LFxuICogICB7aWQ6IDMsIHRleHQ6ICdpdGVtIDMnLCBkYXRlOiAnMjAxMy0wNi0yNScsIGdyb3VwOiAyfSxcbiAqICAge2lkOiA0LCB0ZXh0OiAnaXRlbSA0J31cbiAqIF0pO1xuICpcbiAqIC8vIHN1YnNjcmliZSB0byBhbnkgY2hhbmdlIGluIHRoZSBEYXRhU2V0XG4gKiBkYXRhLm9uKCcqJywgZnVuY3Rpb24gKGV2ZW50LCBwcm9wZXJ0aWVzLCBzZW5kZXJJZCkge1xuICogICBjb25zb2xlLmxvZygnZXZlbnQnLCBldmVudCwgcHJvcGVydGllcyk7XG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGUgYW4gZXhpc3RpbmcgaXRlbVxuICogZGF0YS51cGRhdGUoe2lkOiAyLCBncm91cDogMX0pO1xuICpcbiAqIC8vIHJlbW92ZSBhbiBpdGVtXG4gKiBkYXRhLnJlbW92ZSg0KTtcbiAqXG4gKiAvLyBnZXQgYWxsIGlkc1xuICogdmFyIGlkcyA9IGRhdGEuZ2V0SWRzKCk7XG4gKiBjb25zb2xlLmxvZygnaWRzJywgaWRzKTtcbiAqXG4gKiAvLyBnZXQgYSBzcGVjaWZpYyBpdGVtXG4gKiB2YXIgaXRlbTEgPSBkYXRhLmdldCgxKTtcbiAqIGNvbnNvbGUubG9nKCdpdGVtMScsIGl0ZW0xKTtcbiAqXG4gKiAvLyByZXRyaWV2ZSBhIGZpbHRlcmVkIHN1YnNldCBvZiB0aGUgZGF0YVxuICogdmFyIGl0ZW1zID0gZGF0YS5nZXQoe1xuICogICBmaWx0ZXI6IGZ1bmN0aW9uIChpdGVtKSB7XG4gKiAgICAgcmV0dXJuIGl0ZW0uZ3JvdXAgPT0gMTtcbiAqICAgfVxuICogfSk7XG4gKiBjb25zb2xlLmxvZygnZmlsdGVyZWQgaXRlbXMnLCBpdGVtcyk7XG4gKiBgYGBcbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFTZXQ8XG4gICAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gICAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4gID5cbiAgZXh0ZW5kcyBEYXRhU2V0UGFydDxJdGVtLCBJZFByb3A+XG4gIGltcGxlbWVudHMgRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+XG57XG4gIC8qKiBGbHVzaCBhbGwgcXVldWVkIGNhbGxzLiAqL1xuICBwdWJsaWMgZmx1c2g/OiAoKSA9PiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGxlbmd0aDogbnVtYmVyO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCBpZFByb3AoKTogSWRQcm9wIHtcbiAgICByZXR1cm4gdGhpcy5faWRQcm9wO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGE6IE1hcDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lkUHJvcDogSWRQcm9wO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWU8dGhpcz4gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBEYXRhU2V0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9ucz86IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+KTtcbiAgLyoqXG4gICAqIEBwYXJhbSBkYXRhIC0gQW4gaW5pdGlhbCBzZXQgb2YgaXRlbXMgZm9yIHRoZSBuZXcgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRGF0YVNldCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGRhdGE6IEl0ZW1bXSwgb3B0aW9ucz86IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+KTtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBEYXRhU2V0LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIEluaXRpYWwgZGF0YSBvciBvcHRpb25zLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgKHR5cGUgZXJyb3IgaWYgZGF0YSBpcyBhbHNvIG9wdGlvbnMpLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIGRhdGE/OiBJdGVtW10gfCBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPixcbiAgICBvcHRpb25zPzogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD5cbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIC8vIGNvcnJlY3RseSByZWFkIG9wdGlvbmFsIGFyZ3VtZW50c1xuICAgIGlmIChkYXRhICYmICFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBvcHRpb25zID0gZGF0YTtcbiAgICAgIGRhdGEgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLl9kYXRhID0gbmV3IE1hcCgpOyAvLyBtYXAgd2l0aCBkYXRhIGluZGV4ZWQgYnkgaWRcbiAgICB0aGlzLmxlbmd0aCA9IDA7IC8vIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgRGF0YVNldFxuICAgIHRoaXMuX2lkUHJvcCA9IHRoaXMuX29wdGlvbnMuZmllbGRJZCB8fCAoXCJpZFwiIGFzIElkUHJvcCk7IC8vIG5hbWUgb2YgdGhlIGZpZWxkIGNvbnRhaW5pbmcgaWRcblxuICAgIC8vIGFkZCBpbml0aWFsIGRhdGEgd2hlbiBwcm92aWRlZFxuICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFkZChkYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG5ldyBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBuZXcgb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM/OiBEYXRhU2V0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucXVldWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMucXVldWUgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIGRlbGV0ZSBxdWV1ZSBpZiBsb2FkZWRcbiAgICAgICAgaWYgKHRoaXMuX3F1ZXVlKSB7XG4gICAgICAgICAgdGhpcy5fcXVldWUuZGVzdHJveSgpO1xuICAgICAgICAgIHRoaXMuX3F1ZXVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIHF1ZXVlIGFuZCB1cGRhdGUgaXRzIG9wdGlvbnNcbiAgICAgICAgaWYgKCF0aGlzLl9xdWV1ZSkge1xuICAgICAgICAgIHRoaXMuX3F1ZXVlID0gUXVldWUuZXh0ZW5kKHRoaXMsIHtcbiAgICAgICAgICAgIHJlcGxhY2U6IFtcImFkZFwiLCBcInVwZGF0ZVwiLCBcInJlbW92ZVwiXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnF1ZXVlICYmIHR5cGVvZiBvcHRpb25zLnF1ZXVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgdGhpcy5fcXVldWUuc2V0T3B0aW9ucyhvcHRpb25zLnF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBkYXRhIGl0ZW0gb3IgYW4gYXJyYXkgd2l0aCBpdGVtcy5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSBhZGRlZCB0byB0aGUgRGF0YVNldCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGBhZGRgLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KClcbiAgICpcbiAgICogLy8gYWRkIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEuYWRkKFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyB0ZXh0OiAnaXRlbSB3aXRob3V0IGFuIGlkJyB9XG4gICAqIF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzEsIDIsICc8VVVJRHY0PiddXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIEl0ZW1zIHRvIGJlIGFkZGVkIChpZHMgd2lsbCBiZSBnZW5lcmF0ZWQgaWYgbWlzc2luZykuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgYWRkZWRJZHMgLSBBcnJheSB3aXRoIHRoZSBpZHMgKGdlbmVyYXRlZCBpZiBub3QgcHJlc2VudCkgb2YgdGhlIGFkZGVkIGl0ZW1zLlxuICAgKiBAdGhyb3dzIFdoZW4gYW4gaXRlbSB3aXRoIHRoZSBzYW1lIGlkIGFzIGFueSBvZiB0aGUgYWRkZWQgaXRlbXMgYWxyZWFkeSBleGlzdHMuXG4gICAqL1xuICBwdWJsaWMgYWRkKGRhdGE6IEl0ZW0gfCBJdGVtW10sIHNlbmRlcklkPzogSWQgfCBudWxsKTogKHN0cmluZyB8IG51bWJlcilbXSB7XG4gICAgY29uc3QgYWRkZWRJZHM6IElkW10gPSBbXTtcbiAgICBsZXQgaWQ6IElkO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIC8vIEFycmF5XG4gICAgICBjb25zdCBpZHNUb0FkZDogSWRbXSA9IGRhdGEubWFwKChkKSA9PiBkW3RoaXMuX2lkUHJvcF0gYXMgSWQpO1xuICAgICAgaWYgKGlkc1RvQWRkLnNvbWUoKGlkKSA9PiB0aGlzLl9kYXRhLmhhcyhpZCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgZHVwbGljYXRlIGlkIHdhcyBmb3VuZCBpbiB0aGUgcGFyYW1ldGVyIGFycmF5LlwiKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBkYXRhLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlkID0gdGhpcy5fYWRkSXRlbShkYXRhW2ldKTtcbiAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvLyBTaW5nbGUgaXRlbVxuICAgICAgaWQgPSB0aGlzLl9hZGRJdGVtKGRhdGEpO1xuICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZGF0YVR5cGVcIik7XG4gICAgfVxuXG4gICAgaWYgKGFkZGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBhZGRlZElkcyB9LCBzZW5kZXJJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZGVkSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBpdGVtcy4gV2hlbiBhbiBpdGVtIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBwcm92aWRlZCBwcm9wZXJ0aWVzIHdpbGwgYmUgbWVyZ2VkIGluIHRoZSBleGlzdGluZyBpdGVtLiBXaGVuIGFuIGl0ZW0gZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSB1cGRhdGVkLCB0aGUgRGF0YVNldCB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYGFkZGAgZm9yIHRoZSBhZGRlZCBpdGVtcywgYW5kIGFuIGV2ZW50IGB1cGRhdGVgLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyBpZDogMywgdGV4dDogJ2l0ZW0gMycgfVxuICAgKiBdKVxuICAgKlxuICAgKiAvLyB1cGRhdGUgaXRlbXNcbiAgICogY29uc3QgaWRzID0gZGF0YS51cGRhdGUoW1xuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDIgKHVwZGF0ZWQpJyB9LFxuICAgKiAgIHsgaWQ6IDQsIHRleHQ6ICdpdGVtIDQgKG5ldyknIH1cbiAgICogXSlcbiAgICpcbiAgICogY29uc29sZS5sb2coaWRzKSAvLyBbMiwgNF1cbiAgICogYGBgXG4gICAqXG4gICAqICMjIFdhcm5pbmcgZm9yIFR5cGVTY3JpcHQgdXNlcnNcbiAgICogVGhpcyBtZXRob2QgbWF5IGludHJvZHVjZSBwYXJ0aWFsIGl0ZW1zIGludG8gdGhlIGRhdGEgc2V0LiBVc2UgYWRkIG9yIHVwZGF0ZU9ubHkgaW5zdGVhZCBmb3IgYmV0dGVyIHR5cGUgc2FmZXR5LlxuICAgKiBAcGFyYW0gZGF0YSAtIEl0ZW1zIHRvIGJlIHVwZGF0ZWQgKGlmIHRoZSBpZCBpcyBhbHJlYWR5IHByZXNlbnQpIG9yIGFkZGVkIChpZiB0aGUgaWQgaXMgbWlzc2luZykuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgdXBkYXRlZElkcyAtIFRoZSBpZHMgb2YgdGhlIGFkZGVkICh0aGVzZSBtYXkgYmUgbmV3bHkgZ2VuZXJhdGVkIGlmIHRoZXJlIHdhcyBubyBpZCBpbiB0aGUgaXRlbSBmcm9tIHRoZSBkYXRhKSBvciB1cGRhdGVkIGl0ZW1zLlxuICAgKiBAdGhyb3dzIFdoZW4gdGhlIHN1cHBsaWVkIGRhdGEgaXMgbmVpdGhlciBhbiBpdGVtIG5vciBhbiBhcnJheSBvZiBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGUoXG4gICAgZGF0YTogRGVlcFBhcnRpYWw8SXRlbT4gfCBEZWVwUGFydGlhbDxJdGVtPltdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IElkW10ge1xuICAgIGNvbnN0IGFkZGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgdXBkYXRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBjb25zdCBpZFByb3AgPSB0aGlzLl9pZFByb3A7XG5cbiAgICBjb25zdCBhZGRPclVwZGF0ZSA9IChpdGVtOiBEZWVwUGFydGlhbDxJdGVtPik6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qgb3JpZ0lkOiBPcHRJZCA9IGl0ZW1baWRQcm9wXTtcbiAgICAgIGlmIChvcmlnSWQgIT0gbnVsbCAmJiB0aGlzLl9kYXRhLmhhcyhvcmlnSWQpKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxJdGVtID0gaXRlbSBhcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+OyAvLyBpdCBoYXMgYW4gaWQsIHRoZXJlZm9yZSBpdCBpcyBhIGZ1bGxpdGVtXG4gICAgICAgIGNvbnN0IG9sZEl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kYXRhLmdldChvcmlnSWQpKTtcbiAgICAgICAgLy8gdXBkYXRlIGl0ZW1cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLl91cGRhdGVJdGVtKGZ1bGxJdGVtKTtcbiAgICAgICAgdXBkYXRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgdXBkYXRlZERhdGEucHVzaChmdWxsSXRlbSk7XG4gICAgICAgIG9sZERhdGEucHVzaChvbGRJdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFkZCBuZXcgaXRlbVxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuX2FkZEl0ZW0oaXRlbSBhcyBhbnkpO1xuICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIC8vIEFycmF5XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZGF0YS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoZGF0YVtpXSAmJiB0eXBlb2YgZGF0YVtpXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIGFkZE9yVXBkYXRlKGRhdGFbaV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiSWdub3JpbmcgaW5wdXQgaXRlbSwgd2hpY2ggaXMgbm90IGFuIG9iamVjdCBhdCBpbmRleCBcIiArIGlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvLyBTaW5nbGUgaXRlbVxuICAgICAgYWRkT3JVcGRhdGUoZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZGF0YVR5cGVcIik7XG4gICAgfVxuXG4gICAgaWYgKGFkZGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBhZGRlZElkcyB9LCBzZW5kZXJJZCk7XG4gICAgfVxuICAgIGlmICh1cGRhdGVkSWRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgcHJvcHMgPSB7IGl0ZW1zOiB1cGRhdGVkSWRzLCBvbGREYXRhOiBvbGREYXRhLCBkYXRhOiB1cGRhdGVkRGF0YSB9O1xuICAgICAgLy8gVE9ETzogcmVtb3ZlIGRlcHJlY2F0ZWQgcHJvcGVydHkgJ2RhdGEnIHNvbWUgZGF5XG4gICAgICAvL09iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2RhdGEnLCB7XG4gICAgICAvLyAgJ2dldCc6IChmdW5jdGlvbigpIHtcbiAgICAgIC8vICAgIGNvbnNvbGUud2FybignUHJvcGVydHkgZGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgRGF0YVNldC5nZXQoaWRzKSB0byByZXRyaWV2ZSB0aGUgbmV3IGRhdGEsIHVzZSB0aGUgb2xkRGF0YSBwcm9wZXJ0eSBvbiB0aGlzIG9iamVjdCB0byBnZXQgdGhlIG9sZCBkYXRhJyk7XG4gICAgICAvLyAgICByZXR1cm4gdXBkYXRlZERhdGE7XG4gICAgICAvLyAgfSkuYmluZCh0aGlzKVxuICAgICAgLy99KTtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJ1cGRhdGVcIiwgcHJvcHMsIHNlbmRlcklkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkZWRJZHMuY29uY2F0KHVwZGF0ZWRJZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBpdGVtcy4gV2hlbiBhbiBpdGVtIGRvZXMgbm90IGV4aXN0LCBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIHByb3ZpZGVkIHByb3BlcnRpZXMgd2lsbCBiZSBkZWVwbHkgbWVyZ2VkIGludG8gdGhlIGV4aXN0aW5nIGl0ZW0uXG4gICAqIFdoZW4gYW4gaXRlbSBkb2VzIG5vdCBleGlzdCAoaWQgbm90IHByZXNlbnQgaW4gdGhlIGRhdGEgc2V0IG9yIGFic2VudCksIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duIGFuZCBub3RoaW5nIHdpbGwgYmUgY2hhbmdlZC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSB1cGRhdGVkLCB0aGUgRGF0YVNldCB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYHVwZGF0ZWAuXG4gICAqIFdoZW4gYSBgc2VuZGVySWRgIGlzIHByb3ZpZGVkLCB0aGlzIGlkIHdpbGwgYmUgcGFzc2VkIHdpdGggdGhlIHRyaWdnZXJlZCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqICMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gICAqIGNvbnN0IGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQoW1xuICAgKiAgIHsgaWQ6IDEsIHRleHQ6ICdpdGVtIDEnIH0sXG4gICAqICAgeyBpZDogMiwgdGV4dDogJ2l0ZW0gMicgfSxcbiAgICogICB7IGlkOiAzLCB0ZXh0OiAnaXRlbSAzJyB9LFxuICAgKiBdKVxuICAgKlxuICAgKiAvLyB1cGRhdGUgaXRlbXNcbiAgICogY29uc3QgaWRzID0gZGF0YS51cGRhdGUoW1xuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDIgKHVwZGF0ZWQpJyB9LCAvLyB3b3Jrc1xuICAgKiAgIC8vIHsgaWQ6IDQsIHRleHQ6ICdpdGVtIDQgKG5ldyknIH0sIC8vIHdvdWxkIHRocm93XG4gICAqICAgLy8geyB0ZXh0OiAnaXRlbSA0IChuZXcpJyB9LCAvLyB3b3VsZCBhbHNvIHRocm93XG4gICAqIF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzJdXG4gICAqIGBgYFxuICAgKiBAcGFyYW0gZGF0YSAtIFVwZGF0ZXMgKHRoZSBpZCBhbmQgb3B0aW9uYWxseSBvdGhlciBwcm9wcykgdG8gdGhlIGl0ZW1zIGluIHRoaXMgZGF0YSBzZXQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgdXBkYXRlZElkcyAtIFRoZSBpZHMgb2YgdGhlIHVwZGF0ZWQgaXRlbXMuXG4gICAqIEB0aHJvd3MgV2hlbiB0aGUgc3VwcGxpZWQgZGF0YSBpcyBuZWl0aGVyIGFuIGl0ZW0gbm9yIGFuIGFycmF5IG9mIGl0ZW1zLCB3aGVuIHRoZSBpZHMgYXJlIG1pc3NpbmcuXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlT25seShcbiAgICBkYXRhOiBVcGRhdGVJdGVtPEl0ZW0sIElkUHJvcD4gfCBVcGRhdGVJdGVtPEl0ZW0sIElkUHJvcD5bXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiBJZFtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlRXZlbnREYXRhID0gZGF0YVxuICAgICAgLm1hcChcbiAgICAgICAgKFxuICAgICAgICAgIHVwZGF0ZVxuICAgICAgICApOiB7XG4gICAgICAgICAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgICB1cGRhdGU6IFVwZGF0ZUl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgfSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2xkRGF0YSA9IHRoaXMuX2RhdGEuZ2V0KHVwZGF0ZVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgICBpZiAob2xkRGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVcGRhdGluZyBub24tZXhpc3RlbnQgaXRlbXMgaXMgbm90IGFsbG93ZWQuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBvbGREYXRhLCB1cGRhdGUgfTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLm1hcChcbiAgICAgICAgKHtcbiAgICAgICAgICBvbGREYXRhLFxuICAgICAgICAgIHVwZGF0ZSxcbiAgICAgICAgfSk6IHtcbiAgICAgICAgICBpZDogSWQ7XG4gICAgICAgICAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgICB1cGRhdGVkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgfSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBvbGREYXRhW3RoaXMuX2lkUHJvcF07XG4gICAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBwdXJlRGVlcE9iamVjdEFzc2lnbihvbGREYXRhLCB1cGRhdGUpO1xuXG4gICAgICAgICAgdGhpcy5fZGF0YS5zZXQoaWQsIHVwZGF0ZWREYXRhKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG9sZERhdGE6IG9sZERhdGEsXG4gICAgICAgICAgICB1cGRhdGVkRGF0YSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgaWYgKHVwZGF0ZUV2ZW50RGF0YS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByb3BzOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl0gPSB7XG4gICAgICAgIGl0ZW1zOiB1cGRhdGVFdmVudERhdGEubWFwKCh2YWx1ZSk6IElkID0+IHZhbHVlLmlkKSxcbiAgICAgICAgb2xkRGF0YTogdXBkYXRlRXZlbnREYXRhLm1hcChcbiAgICAgICAgICAodmFsdWUpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+ID0+IHZhbHVlLm9sZERhdGFcbiAgICAgICAgKSxcbiAgICAgICAgZGF0YTogdXBkYXRlRXZlbnREYXRhLm1hcChcbiAgICAgICAgICAodmFsdWUpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+ID0+IHZhbHVlLnVwZGF0ZWREYXRhXG4gICAgICAgICksXG4gICAgICB9O1xuICAgICAgLy8gVE9ETzogcmVtb3ZlIGRlcHJlY2F0ZWQgcHJvcGVydHkgJ2RhdGEnIHNvbWUgZGF5XG4gICAgICAvL09iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2RhdGEnLCB7XG4gICAgICAvLyAgJ2dldCc6IChmdW5jdGlvbigpIHtcbiAgICAgIC8vICAgIGNvbnNvbGUud2FybignUHJvcGVydHkgZGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgRGF0YVNldC5nZXQoaWRzKSB0byByZXRyaWV2ZSB0aGUgbmV3IGRhdGEsIHVzZSB0aGUgb2xkRGF0YSBwcm9wZXJ0eSBvbiB0aGlzIG9iamVjdCB0byBnZXQgdGhlIG9sZCBkYXRhJyk7XG4gICAgICAvLyAgICByZXR1cm4gdXBkYXRlZERhdGE7XG4gICAgICAvLyAgfSkuYmluZCh0aGlzKVxuICAgICAgLy99KTtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJ1cGRhdGVcIiwgcHJvcHMsIHNlbmRlcklkKTtcblxuICAgICAgcmV0dXJuIHByb3BzLml0ZW1zO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoaWQ6IElkKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoaWRzOiBJZFtdKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZCB8IElkW10sXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6XG4gICAgfCBudWxsXG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+XG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W11cbiAgICB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgZmlyc3Q/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiB8IElkIHwgSWRbXSxcbiAgICBzZWNvbmQ/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+IHtcbiAgICAvLyBAVE9ETzogV291ZG4ndCBpdCBiZSBiZXR0ZXIgdG8gc3BsaXQgdGhpcyBpbnRvIG11bHRpcGxlIG1ldGhvZHM/XG5cbiAgICAvLyBwYXJzZSB0aGUgYXJndW1lbnRzXG4gICAgbGV0IGlkOiBJZCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaWRzOiBJZFtdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNJZChmaXJzdCkpIHtcbiAgICAgIC8vIGdldChpZCBbLCBvcHRpb25zXSlcbiAgICAgIGlkID0gZmlyc3Q7XG4gICAgICBvcHRpb25zID0gc2Vjb25kO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaXJzdCkpIHtcbiAgICAgIC8vIGdldChpZHMgWywgb3B0aW9uc10pXG4gICAgICBpZHMgPSBmaXJzdDtcbiAgICAgIG9wdGlvbnMgPSBzZWNvbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldChbLCBvcHRpb25zXSlcbiAgICAgIG9wdGlvbnMgPSBmaXJzdDtcbiAgICB9XG5cbiAgICAvLyBkZXRlcm1pbmUgdGhlIHJldHVybiB0eXBlXG4gICAgY29uc3QgcmV0dXJuVHlwZSA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMucmV0dXJuVHlwZSA9PT0gXCJPYmplY3RcIiA/IFwiT2JqZWN0XCIgOiBcIkFycmF5XCI7XG4gICAgLy8gQFRPRE86IFdURiBpcyB0aGlzPyBPciBhbSBJIG1pc3Npbmcgc29tZXRoaW5nP1xuICAgIC8vIHZhciByZXR1cm5UeXBlXG4gICAgLy8gaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXR1cm5UeXBlKSB7XG4gICAgLy8gICB2YXIgYWxsb3dlZFZhbHVlcyA9IFsnQXJyYXknLCAnT2JqZWN0J11cbiAgICAvLyAgIHJldHVyblR5cGUgPVxuICAgIC8vICAgICBhbGxvd2VkVmFsdWVzLmluZGV4T2Yob3B0aW9ucy5yZXR1cm5UeXBlKSA9PSAtMVxuICAgIC8vICAgICAgID8gJ0FycmF5J1xuICAgIC8vICAgICAgIDogb3B0aW9ucy5yZXR1cm5UeXBlXG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIHJldHVyblR5cGUgPSAnQXJyYXknXG4gICAgLy8gfVxuXG4gICAgLy8gYnVpbGQgb3B0aW9uc1xuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3QgaXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGxldCBpdGVtOiB1bmRlZmluZWQgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+ID0gdW5kZWZpbmVkO1xuICAgIGxldCBpdGVtSWRzOiB1bmRlZmluZWQgfCBJZFtdID0gdW5kZWZpbmVkO1xuICAgIGxldCBpdGVtSWQ6IHVuZGVmaW5lZCB8IElkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gY29udmVydCBpdGVtc1xuICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAvLyByZXR1cm4gYSBzaW5nbGUgaXRlbVxuICAgICAgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgIGlmIChpdGVtICYmIGZpbHRlciAmJiAhZmlsdGVyKGl0ZW0pKSB7XG4gICAgICAgIGl0ZW0gPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpZHMgIT0gbnVsbCkge1xuICAgICAgLy8gcmV0dXJuIGEgc3Vic2V0IG9mIGl0ZW1zXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZHNbaV0pO1xuICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmICghZmlsdGVyIHx8IGZpbHRlcihpdGVtKSkpIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJldHVybiBhbGwgaXRlbXNcbiAgICAgIGl0ZW1JZHMgPSBbLi4udGhpcy5fZGF0YS5rZXlzKCldO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaXRlbUlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGl0ZW1JZCk7XG4gICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGl0ZW0pKSkge1xuICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvcmRlciB0aGUgcmVzdWx0c1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMub3JkZXIgJiYgaWQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9zb3J0KGl0ZW1zLCBvcHRpb25zLm9yZGVyKTtcbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgZmllbGRzIG9mIHRoZSBpdGVtc1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZmllbGRzKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBvcHRpb25zLmZpZWxkcztcbiAgICAgIGlmIChpZCAhPSB1bmRlZmluZWQgJiYgaXRlbSAhPSBudWxsKSB7XG4gICAgICAgIGl0ZW0gPSB0aGlzLl9maWx0ZXJGaWVsZHMoaXRlbSwgZmllbGRzKSBhcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaXRlbXNbaV0gPSB0aGlzLl9maWx0ZXJGaWVsZHMoaXRlbXNbaV0sIGZpZWxkcykgYXMgRnVsbEl0ZW08XG4gICAgICAgICAgICBJdGVtLFxuICAgICAgICAgICAgSWRQcm9wXG4gICAgICAgICAgPjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJldHVybiB0aGUgcmVzdWx0c1xuICAgIGlmIChyZXR1cm5UeXBlID09IFwiT2JqZWN0XCIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4gPSB7fTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCByZXN1bHRhbnQgPSBpdGVtc1tpXTtcbiAgICAgICAgLy8gQFRPRE86IFNob3Vkbid0IHRoaXMgYmUgdGhpcy5fZmllbGRJZD9cbiAgICAgICAgLy8gcmVzdWx0W3Jlc3VsdGFudC5pZF0gPSByZXN1bHRhbnRcbiAgICAgICAgY29uc3QgaWQ6IElkID0gcmVzdWx0YW50W3RoaXMuX2lkUHJvcF07XG4gICAgICAgIHJlc3VsdFtpZF0gPSByZXN1bHRhbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAvLyBhIHNpbmdsZSBpdGVtXG4gICAgICAgIHJldHVybiBpdGVtID8/IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBqdXN0IHJldHVybiBvdXIgYXJyYXlcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0SWRzKG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9uczxJdGVtPik6IElkW10ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3Qgb3JkZXIgPSBvcHRpb25zICYmIG9wdGlvbnMub3JkZXI7XG4gICAgY29uc3QgaXRlbUlkcyA9IFsuLi5kYXRhLmtleXMoKV07XG4gICAgY29uc3QgaWRzOiBJZFtdID0gW107XG5cbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAvLyBnZXQgZmlsdGVyZWQgaXRlbXNcbiAgICAgIGlmIChvcmRlcikge1xuICAgICAgICAvLyBjcmVhdGUgb3JkZXJlZCBsaXN0XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiBmaWx0ZXIoaXRlbSkpIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc29ydChpdGVtcywgb3JkZXIpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlkcy5wdXNoKGl0ZW1zW2ldW3RoaXMuX2lkUHJvcF0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgdW5vcmRlcmVkIGxpc3RcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmIGZpbHRlcihpdGVtKSkge1xuICAgICAgICAgICAgaWRzLnB1c2goaXRlbVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZ2V0IGFsbCBpdGVtc1xuICAgICAgaWYgKG9yZGVyKSB7XG4gICAgICAgIC8vIGNyZWF0ZSBhbiBvcmRlcmVkIGxpc3RcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgICAgaXRlbXMucHVzaChkYXRhLmdldChpZCkhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NvcnQoaXRlbXMsIG9yZGVyKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZHMucHVzaChpdGVtc1tpXVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIHVub3JkZXJlZCBsaXN0XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmdldChpZCk7XG4gICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgaWRzLnB1c2goaXRlbVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaWRzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXREYXRhU2V0KCk6IERhdGFTZXQ8SXRlbSwgSWRQcm9wPiB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGZvckVhY2goXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcikge1xuICAgICAgLy8gZXhlY3V0ZSBmb3JFYWNoIG9uIG9yZGVyZWQgbGlzdFxuICAgICAgY29uc3QgaXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IHRoaXMuZ2V0KG9wdGlvbnMpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgICBjb25zdCBpZCA9IGl0ZW1bdGhpcy5faWRQcm9wXTtcbiAgICAgICAgY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bm9yZGVyZWRcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoaXRlbSkpKSB7XG4gICAgICAgICAgY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBtYXA8VD4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IFQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VNYXBPcHRpb25zPEl0ZW0sIFQ+XG4gICk6IFRbXSB7XG4gICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICBjb25zdCBtYXBwZWRJdGVtczogVFtdID0gW107XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgY29uc3QgaXRlbUlkcyA9IFsuLi5kYXRhLmtleXMoKV07XG5cbiAgICAvLyBjb252ZXJ0IGFuZCBmaWx0ZXIgaXRlbXNcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGl0ZW0pKSkge1xuICAgICAgICBtYXBwZWRJdGVtcy5wdXNoKGNhbGxiYWNrKGl0ZW0sIGlkKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gb3JkZXIgaXRlbXNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyKSB7XG4gICAgICB0aGlzLl9zb3J0KG1hcHBlZEl0ZW1zLCBvcHRpb25zLm9yZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwcGVkSXRlbXM7XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXJGaWVsZHM8SyBleHRlbmRzIHN0cmluZz4oaXRlbTogbnVsbCwgZmllbGRzOiBLW10pOiBudWxsO1xuICBwcml2YXRlIF9maWx0ZXJGaWVsZHM8SyBleHRlbmRzIHN0cmluZz4oXG4gICAgaXRlbTogUmVjb3JkPEssIHVua25vd24+LFxuICAgIGZpZWxkczogS1tdXG4gICk6IFJlY29yZDxLLCB1bmtub3duPjtcbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGl0ZW06IFJlY29yZDxLLCB1bmtub3duPixcbiAgICBmaWVsZHM6IEtbXSB8IFJlY29yZDxLLCBzdHJpbmc+XG4gICk6IGFueTtcbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgZmllbGRzIG9mIGFuIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gd2hvc2UgZmllbGRzIHNob3VsZCBiZSBmaWx0ZXJlZC5cbiAgICogQHBhcmFtIGZpZWxkcyAtIFRoZSBuYW1lcyBvZiB0aGUgZmllbGRzIHRoYXQgd2lsbCBiZSBrZXB0LlxuICAgKiBAdHlwZVBhcmFtIEsgLSBGaWVsZCBuYW1lIHR5cGUuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgZmllbGRzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGl0ZW06IFJlY29yZDxLLCB1bmtub3duPiB8IG51bGwsXG4gICAgZmllbGRzOiBLW10gfCBSZWNvcmQ8SywgdW5rbm93bj5cbiAgKTogUmVjb3JkPEssIHVua25vd24+IHwgbnVsbCB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICAvLyBpdGVtIGlzIG51bGxcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICBBcnJheS5pc0FycmF5KGZpZWxkcylcbiAgICAgICAgPyAvLyBVc2UgdGhlIHN1cHBsaWVkIGFycmF5XG4gICAgICAgICAgZmllbGRzXG4gICAgICAgIDogLy8gVXNlIHRoZSBrZXlzIG9mIHRoZSBzdXBwbGllZCBvYmplY3RcbiAgICAgICAgICAoT2JqZWN0LmtleXMoZmllbGRzKSBhcyBLW10pXG4gICAgKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgKGZpbHRlcmVkSXRlbSwgZmllbGQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gICAgICAgIGZpbHRlcmVkSXRlbVtmaWVsZF0gPSBpdGVtW2ZpZWxkXTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbTtcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU29ydCB0aGUgcHJvdmlkZWQgYXJyYXkgd2l0aCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIGl0ZW1zIC0gSXRlbXMgdG8gYmUgc29ydGVkIGluIHBsYWNlLlxuICAgKiBAcGFyYW0gb3JkZXIgLSBBIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBpdGVtcyBpbiB0aGUgaXRlbXMgYXJyYXkuXG4gICAqL1xuICBwcml2YXRlIF9zb3J0PFQ+KGl0ZW1zOiBUW10sIG9yZGVyOiBEYXRhSW50ZXJmYWNlT3JkZXI8VD4pOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIG9yZGVyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBvcmRlciBieSBwcm92aWRlZCBmaWVsZCBuYW1lXG4gICAgICBjb25zdCBuYW1lID0gb3JkZXI7IC8vIGZpZWxkIG5hbWVcbiAgICAgIGl0ZW1zLnNvcnQoKGEsIGIpOiAtMSB8IDAgfCAxID0+IHtcbiAgICAgICAgLy8gQFRPRE86IEhvdyB0byB0cmVhdCBtaXNzaW5nIHByb3BlcnRpZXM/XG4gICAgICAgIGNvbnN0IGF2ID0gKGEgYXMgYW55KVtuYW1lXTtcbiAgICAgICAgY29uc3QgYnYgPSAoYiBhcyBhbnkpW25hbWVdO1xuICAgICAgICByZXR1cm4gYXYgPiBidiA/IDEgOiBhdiA8IGJ2ID8gLTEgOiAwO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3JkZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgLy8gb3JkZXIgYnkgc29ydCBmdW5jdGlvblxuICAgICAgaXRlbXMuc29ydChvcmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IGV4dGVuZCBvcmRlciBieSBhbiBPYmplY3Qge2ZpZWxkOnN0cmluZywgZGlyZWN0aW9uOnN0cmluZ31cbiAgICAgIC8vICAgICAgIHdoZXJlIGRpcmVjdGlvbiBjYW4gYmUgJ2FzYycgb3IgJ2Rlc2MnXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT3JkZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaXRlbSBvciBtdWx0aXBsZSBpdGVtcyBieSDigJxyZWZlcmVuY2XigJ0gKG9ubHkgdGhlIGlkIGlzIHVzZWQpIG9yIGJ5IGlkLlxuICAgKlxuICAgKiBUaGUgbWV0aG9kIGlnbm9yZXMgcmVtb3ZhbCBvZiBub24tZXhpc3RpbmcgaXRlbXMsIGFuZCByZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGlkcyBvZiB0aGUgaXRlbXMgd2hpY2ggYXJlIGFjdHVhbGx5IHJlbW92ZWQgZnJvbSB0aGUgRGF0YVNldC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSByZW1vdmVkLCB0aGUgRGF0YVNldCB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYHJlbW92ZWAgZm9yIHRoZSByZW1vdmVkIGl0ZW1zLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyBpZDogMywgdGV4dDogJ2l0ZW0gMycgfVxuICAgKiBdKVxuICAgKlxuICAgKiAvLyByZW1vdmUgaXRlbXNcbiAgICogY29uc3QgaWRzID0gZGF0YS5yZW1vdmUoWzIsIHsgaWQ6IDMgfSwgNF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzIsIDNdXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBPbmUgb3IgbW9yZSBpdGVtcyBvciBpZHMgb2YgaXRlbXMgdG8gYmUgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gU2VuZGVyIGlkLlxuICAgKiBAcmV0dXJucyBUaGUgaWRzIG9mIHRoZSByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZShpZDogSWQgfCBJdGVtIHwgKElkIHwgSXRlbSlbXSwgc2VuZGVySWQ/OiBJZCB8IG51bGwpOiBJZFtdIHtcbiAgICBjb25zdCByZW1vdmVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcblxuICAgIC8vIGZvcmNlIGV2ZXJ5dGhpbmcgdG8gYmUgYW4gYXJyYXkgZm9yIHNpbXBsaWNpdHlcbiAgICBjb25zdCBpZHMgPSBBcnJheS5pc0FycmF5KGlkKSA/IGlkIDogW2lkXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9yZW1vdmUoaWRzW2ldKTtcbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1JZDogT3B0SWQgPSBpdGVtW3RoaXMuX2lkUHJvcF07XG4gICAgICAgIGlmIChpdGVtSWQgIT0gbnVsbCkge1xuICAgICAgICAgIHJlbW92ZWRJZHMucHVzaChpdGVtSWQpO1xuICAgICAgICAgIHJlbW92ZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbW92ZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICBcInJlbW92ZVwiLFxuICAgICAgICB7IGl0ZW1zOiByZW1vdmVkSWRzLCBvbGREYXRhOiByZW1vdmVkSXRlbXMgfSxcbiAgICAgICAgc2VuZGVySWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbW92ZWRJZHM7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGl0ZW0gYnkgaXRzIGlkIG9yIHJlZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gSWQgb2YgYW4gaXRlbSBvciB0aGUgaXRlbSBpdHNlbGYuXG4gICAqIEByZXR1cm5zIFRoZSByZW1vdmVkIGl0ZW0gaWYgcmVtb3ZlZCwgbnVsbCBvdGhlcndpc2UuXG4gICAqL1xuICBwcml2YXRlIF9yZW1vdmUoaWQ6IElkIHwgSXRlbSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBudWxsIHtcbiAgICAvLyBAVE9ETzogSXQgb3JpZ2lhbmxseSByZXR1cm5lZCB0aGUgaXRlbSBhbHRob3VnaCB0aGUgZG9jcyBzYXkgaWQuXG4gICAgLy8gVGhlIGNvZGUgZXhwZWN0cyB0aGUgaXRlbSwgc28gcHJvYmFibHkgYW4gZXJyb3IgaW4gdGhlIGRvY3MuXG4gICAgbGV0IGlkZW50OiBPcHRJZDtcblxuICAgIC8vIGNvbmZpcm0gdGhlIGlkIHRvIHVzZSBiYXNlZCBvbiB0aGUgYXJncyB0eXBlXG4gICAgaWYgKGlzSWQoaWQpKSB7XG4gICAgICBpZGVudCA9IGlkO1xuICAgIH0gZWxzZSBpZiAoaWQgJiYgdHlwZW9mIGlkID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZGVudCA9IGlkW3RoaXMuX2lkUHJvcF07IC8vIGxvb2sgZm9yIHRoZSBpZGVudGlmaWVyIGZpZWxkIHVzaW5nIC5faWRQcm9wXG4gICAgfVxuXG4gICAgLy8gZG8gdGhlIHJlbW92aW5nIGlmIHRoZSBpdGVtIGlzIGZvdW5kXG4gICAgaWYgKGlkZW50ICE9IG51bGwgJiYgdGhpcy5fZGF0YS5oYXMoaWRlbnQpKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWRlbnQpIHx8IG51bGw7XG4gICAgICB0aGlzLl9kYXRhLmRlbGV0ZShpZGVudCk7XG4gICAgICAtLXRoaXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIGVudGlyZSBkYXRhIHNldC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSByZW1vdmVkLCB0aGUge0BsaW5rIERhdGFTZXR9IHdpbGwgdHJpZ2dlciBhbiBldmVudCBgcmVtb3ZlYCBmb3IgYWxsIHJlbW92ZWQgaXRlbXMuIFdoZW4gYSBgc2VuZGVySWRgIGlzIHByb3ZpZGVkLCB0aGlzIGlkIHdpbGwgYmUgcGFzc2VkIHdpdGggdGhlIHRyaWdnZXJlZCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgcmVtb3ZlZElkcyAtIFRoZSBpZHMgb2YgYWxsIHJlbW92ZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoc2VuZGVySWQ/OiBJZCB8IG51bGwpOiBJZFtdIHtcbiAgICBjb25zdCBpZHMgPSBbLi4udGhpcy5fZGF0YS5rZXlzKCldO1xuICAgIGNvbnN0IGl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGl0ZW1zLnB1c2godGhpcy5fZGF0YS5nZXQoaWRzW2ldKSEpO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGEuY2xlYXIoKTtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl90cmlnZ2VyKFwicmVtb3ZlXCIsIHsgaXRlbXM6IGlkcywgb2xkRGF0YTogaXRlbXMgfSwgc2VuZGVySWQpO1xuXG4gICAgcmV0dXJuIGlkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBpdGVtIHdpdGggbWF4aW11bSB2YWx1ZSBvZiBhIHNwZWNpZmllZCBmaWVsZC5cbiAgICpcbiAgICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBzaG91bGQgYmUgc2VhcmNoZWQgZm9yIG1heCB2YWx1ZS5cbiAgICogQHJldHVybnMgSXRlbSBjb250YWluaW5nIG1heCB2YWx1ZSwgb3IgbnVsbCBpZiBubyBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBtYXgoZmllbGQ6IGtleW9mIEl0ZW0pOiBJdGVtIHwgbnVsbCB7XG4gICAgbGV0IG1heCA9IG51bGw7XG4gICAgbGV0IG1heEZpZWxkID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLl9kYXRhLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBpdGVtRmllbGQgPSBpdGVtW2ZpZWxkXTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGl0ZW1GaWVsZCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAobWF4RmllbGQgPT0gbnVsbCB8fCBpdGVtRmllbGQgPiBtYXhGaWVsZClcbiAgICAgICkge1xuICAgICAgICBtYXggPSBpdGVtO1xuICAgICAgICBtYXhGaWVsZCA9IGl0ZW1GaWVsZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF4IHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaXRlbSB3aXRoIG1pbmltdW0gdmFsdWUgb2YgYSBzcGVjaWZpZWQgZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkIGZvciBtaW4gdmFsdWUuXG4gICAqIEByZXR1cm5zIEl0ZW0gY29udGFpbmluZyBtaW4gdmFsdWUsIG9yIG51bGwgaWYgbm8gaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgbWluKGZpZWxkOiBrZXlvZiBJdGVtKTogSXRlbSB8IG51bGwge1xuICAgIGxldCBtaW4gPSBudWxsO1xuICAgIGxldCBtaW5GaWVsZCA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fZGF0YS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgaXRlbUZpZWxkID0gaXRlbVtmaWVsZF07XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBpdGVtRmllbGQgPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgKG1pbkZpZWxkID09IG51bGwgfHwgaXRlbUZpZWxkIDwgbWluRmllbGQpXG4gICAgICApIHtcbiAgICAgICAgbWluID0gaXRlbTtcbiAgICAgICAgbWluRmllbGQgPSBpdGVtRmllbGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbiB8fCBudWxsO1xuICB9XG5cbiAgcHVibGljIGRpc3RpbmN0PFQgZXh0ZW5kcyBrZXlvZiBJdGVtPihwcm9wOiBUKTogSXRlbVtUXVtdO1xuICBwdWJsaWMgZGlzdGluY3QocHJvcDogc3RyaW5nKTogdW5rbm93bltdO1xuICAvKipcbiAgICogRmluZCBhbGwgZGlzdGluY3QgdmFsdWVzIG9mIGEgc3BlY2lmaWVkIGZpZWxkXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wIC0gVGhlIHByb3BlcnR5IG5hbWUgd2hvc2UgZGlzdGluY3QgdmFsdWVzIHNob3VsZCBiZSByZXR1cm5lZC5cbiAgICogQHJldHVybnMgVW5vcmRlcmVkIGFycmF5IGNvbnRhaW5pbmcgYWxsIGRpc3RpbmN0IHZhbHVlcy4gSXRlbXMgd2l0aG91dCBzcGVjaWZpZWQgcHJvcGVydHkgYXJlIGlnbm9yZWQuXG4gICAqL1xuICBwdWJsaWMgZGlzdGluY3Q8VCBleHRlbmRzIHN0cmluZz4ocHJvcDogVCk6IHVua25vd25bXSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgY29uc3QgaXRlbUlkcyA9IFsuLi5kYXRhLmtleXMoKV07XG4gICAgY29uc3QgdmFsdWVzOiB1bmtub3duW10gPSBbXTtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmdldChpZCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IChpdGVtIGFzIGFueSlbcHJvcF07XG4gICAgICBsZXQgZXhpc3RzID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgaWYgKHZhbHVlc1tqXSA9PSB2YWx1ZSkge1xuICAgICAgICAgIGV4aXN0cyA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZXhpc3RzICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsdWVzW2NvdW50XSA9IHZhbHVlO1xuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc2luZ2xlIGl0ZW0uIFdpbGwgZmFpbCB3aGVuIGFuIGl0ZW0gd2l0aCB0aGUgc2FtZSBpZCBhbHJlYWR5IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIGl0ZW0gLSBBIG5ldyBpdGVtIHRvIGJlIGFkZGVkLlxuICAgKiBAcmV0dXJucyBBZGRlZCBpdGVtJ3MgaWQuIEFuIGlkIGlzIGdlbmVyYXRlZCB3aGVuIGl0IGlzIG5vdCBwcmVzZW50IGluIHRoZSBpdGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkSXRlbShpdGVtOiBJdGVtKTogSWQge1xuICAgIGNvbnN0IGZ1bGxJdGVtID0gZW5zdXJlRnVsbEl0ZW0oaXRlbSwgdGhpcy5faWRQcm9wKTtcbiAgICBjb25zdCBpZCA9IGZ1bGxJdGVtW3RoaXMuX2lkUHJvcF07XG5cbiAgICAvLyBjaGVjayB3aGV0aGVyIHRoaXMgaWQgaXMgYWxyZWFkeSB0YWtlblxuICAgIGlmICh0aGlzLl9kYXRhLmhhcyhpZCkpIHtcbiAgICAgIC8vIGl0ZW0gYWxyZWFkeSBleGlzdHNcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgYWRkIGl0ZW06IGl0ZW0gd2l0aCBpZCBcIiArIGlkICsgXCIgYWxyZWFkeSBleGlzdHNcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhLnNldChpZCwgZnVsbEl0ZW0pO1xuICAgICsrdGhpcy5sZW5ndGg7XG5cbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGEgc2luZ2xlIGl0ZW06IG1lcmdlIHdpdGggZXhpc3RpbmcgaXRlbS5cbiAgICogV2lsbCBmYWlsIHdoZW4gdGhlIGl0ZW0gaGFzIG5vIGlkLCBvciB3aGVuIHRoZXJlIGRvZXMgbm90IGV4aXN0IGFuIGl0ZW0gd2l0aCB0aGUgc2FtZSBpZC5cbiAgICpcbiAgICogQHBhcmFtIHVwZGF0ZSAtIFRoZSBuZXcgaXRlbVxuICAgKiBAcmV0dXJucyBUaGUgaWQgb2YgdGhlIHVwZGF0ZWQgaXRlbS5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZUl0ZW0odXBkYXRlOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+KTogSWQge1xuICAgIGNvbnN0IGlkOiBPcHRJZCA9IHVwZGF0ZVt0aGlzLl9pZFByb3BdO1xuICAgIGlmIChpZCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHVwZGF0ZSBpdGVtOiBpdGVtIGhhcyBubyBpZCAoaXRlbTogXCIgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHVwZGF0ZSkgK1xuICAgICAgICAgIFwiKVwiXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgIGlmICghaXRlbSkge1xuICAgICAgLy8gaXRlbSBkb2Vzbid0IGV4aXN0XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXBkYXRlIGl0ZW06IG5vIGl0ZW0gd2l0aCBpZCBcIiArIGlkICsgXCIgZm91bmRcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YS5zZXQoaWQsIHsgLi4uaXRlbSwgLi4udXBkYXRlIH0pO1xuXG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdHJlYW0oaWRzPzogSXRlcmFibGU8SWQ+KTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgaWYgKGlkcykge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbTxJdGVtPih7XG4gICAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRhdGEuZ2V0KGlkKTtcbiAgICAgICAgICAgIGlmIChpdGVtICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgeWllbGQgW2lkLCBpdGVtXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtKHtcbiAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl06IHRoaXMuX2RhdGEuZW50cmllcy5iaW5kKHRoaXMuX2RhdGEpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyogZGV2ZWxibG9jazpzdGFydCAqL1xuICBwdWJsaWMgZ2V0IHRlc3RMZWFrRGF0YSgpOiBNYXA8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRlc3RMZWFrSWRQcm9wKCk6IElkUHJvcCB7XG4gICAgcmV0dXJuIHRoaXMuX2lkUHJvcDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRlc3RMZWFrT3B0aW9ucygpOiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPiB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cbiAgcHVibGljIGdldCB0ZXN0TGVha1F1ZXVlKCk6IFF1ZXVlPHRoaXM+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlO1xuICB9XG4gIHB1YmxpYyBzZXQgdGVzdExlYWtRdWV1ZSh2OiBRdWV1ZTx0aGlzPiB8IG51bGwpIHtcbiAgICB0aGlzLl9xdWV1ZSA9IHY7XG4gIH1cbiAgLyogZGV2ZWxibG9jazplbmQgKi9cbn1cbiIsICJpbXBvcnQge1xuICBEYXRhSW50ZXJmYWNlLFxuICBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheSxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3QsXG4gIERhdGFJbnRlcmZhY2VNYXBPcHRpb25zLFxuICBFdmVudENhbGxiYWNrc1dpdGhBbnksXG4gIEV2ZW50TmFtZSxcbiAgRXZlbnRQYXlsb2FkcyxcbiAgRnVsbEl0ZW0sXG4gIElkLFxuICBQYXJ0SXRlbSxcbiAgUmVtb3ZlRXZlbnRQYXlsb2FkLFxuICBVcGRhdGVFdmVudFBheWxvYWQsXG4gIGlzSWQsXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbmltcG9ydCB7IERhdGFTZXQgfSBmcm9tIFwiLi9kYXRhLXNldFwiO1xuaW1wb3J0IHsgRGF0YVNldFBhcnQgfSBmcm9tIFwiLi9kYXRhLXNldC1wYXJ0XCI7XG5pbXBvcnQgeyBEYXRhU3RyZWFtIH0gZnJvbSBcIi4vZGF0YS1zdHJlYW1cIjtcblxuLyoqXG4gKiBEYXRhIHZpZXcgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhVmlld09wdGlvbnM8SXRlbSwgSWRQcm9wIGV4dGVuZHMgc3RyaW5nPiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmllbGQgY29udGFpbmluZyB0aGUgaWQgb2YgdGhlIGl0ZW1zLiBXaGVuIGRhdGEgaXMgZmV0Y2hlZCBmcm9tIGEgc2VydmVyIHdoaWNoIHVzZXMgc29tZSBzcGVjaWZpYyBmaWVsZCB0byBpZGVudGlmeSBpdGVtcywgdGhpcyBmaWVsZCBuYW1lIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlIERhdGFTZXQgdXNpbmcgdGhlIG9wdGlvbiBgZmllbGRJZGAuIEZvciBleGFtcGxlIFtDb3VjaERCXShodHRwOi8vY291Y2hkYi5hcGFjaGUub3JnLykgdXNlcyB0aGUgZmllbGQgYCdfaWQnYCB0byBpZGVudGlmeSBkb2N1bWVudHMuXG4gICAqL1xuICBmaWVsZElkPzogSWRQcm9wO1xuICAvKiogSXRlbXMgY2FuIGJlIGZpbHRlcmVkIG9uIHNwZWNpZmljIHByb3BlcnRpZXMgYnkgcHJvdmlkaW5nIGEgZmlsdGVyIGZ1bmN0aW9uLiBBIGZpbHRlciBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgaXRlbXMgaW4gdGhlIERhdGFTZXQsIGFuZCBpcyBjYWxsZWQgd2l0aCB0aGUgaXRlbSBhcyBwYXJhbWV0ZXIuIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIGJvb2xlYW4uIEFsbCBpdGVtcyBmb3Igd2hpY2ggdGhlIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2lsbCBiZSBlbWl0dGVkLiAqL1xuICBmaWx0ZXI/OiAoaXRlbTogSXRlbSkgPT4gYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEYXRhVmlld1xuICpcbiAqIEEgRGF0YVZpZXcgb2ZmZXJzIGEgZmlsdGVyZWQgYW5kL29yIGZvcm1hdHRlZCB2aWV3IG9uIGEgRGF0YVNldC4gT25lIGNhbiBzdWJzY3JpYmUgdG8gY2hhbmdlcyBpbiBhIERhdGFWaWV3LCBhbmQgZWFzaWx5IGdldCBmaWx0ZXJlZCBvciBmb3JtYXR0ZWQgZGF0YSB3aXRob3V0IGhhdmluZyB0byBzcGVjaWZ5IGZpbHRlcnMgYW5kIGZpZWxkIHR5cGVzIGFsbCB0aGUgdGltZS5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gKiB2YXIgZGF0YSA9IG5ldyB2aXMuRGF0YVNldCgpO1xuICogZGF0YS5hZGQoW1xuICogICB7aWQ6IDEsIHRleHQ6ICdpdGVtIDEnLCBkYXRlOiBuZXcgRGF0ZSgyMDEzLCA2LCAyMCksIGdyb3VwOiAxLCBmaXJzdDogdHJ1ZX0sXG4gKiAgIHtpZDogMiwgdGV4dDogJ2l0ZW0gMicsIGRhdGU6ICcyMDEzLTA2LTIzJywgZ3JvdXA6IDJ9LFxuICogICB7aWQ6IDMsIHRleHQ6ICdpdGVtIDMnLCBkYXRlOiAnMjAxMy0wNi0yNScsIGdyb3VwOiAyfSxcbiAqICAge2lkOiA0LCB0ZXh0OiAnaXRlbSA0J31cbiAqIF0pO1xuICpcbiAqIC8vIGNyZWF0ZSBhIERhdGFWaWV3XG4gKiAvLyB0aGUgdmlldyB3aWxsIG9ubHkgY29udGFpbiBpdGVtcyBoYXZpbmcgYSBwcm9wZXJ0eSBncm91cCB3aXRoIHZhbHVlIDEsXG4gKiAvLyBhbmQgd2lsbCBvbmx5IG91dHB1dCBmaWVsZHMgaWQsIHRleHQsIGFuZCBkYXRlLlxuICogdmFyIHZpZXcgPSBuZXcgdmlzLkRhdGFWaWV3KGRhdGEsIHtcbiAqICAgZmlsdGVyOiBmdW5jdGlvbiAoaXRlbSkge1xuICogICAgIHJldHVybiAoaXRlbS5ncm91cCA9PSAxKTtcbiAqICAgfSxcbiAqICAgZmllbGRzOiBbJ2lkJywgJ3RleHQnLCAnZGF0ZSddXG4gKiB9KTtcbiAqXG4gKiAvLyBzdWJzY3JpYmUgdG8gYW55IGNoYW5nZSBpbiB0aGUgRGF0YVZpZXdcbiAqIHZpZXcub24oJyonLCBmdW5jdGlvbiAoZXZlbnQsIHByb3BlcnRpZXMsIHNlbmRlcklkKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdldmVudCcsIGV2ZW50LCBwcm9wZXJ0aWVzKTtcbiAqIH0pO1xuICpcbiAqIC8vIHVwZGF0ZSBhbiBpdGVtIGluIHRoZSBkYXRhIHNldFxuICogZGF0YS51cGRhdGUoe2lkOiAyLCBncm91cDogMX0pO1xuICpcbiAqIC8vIGdldCBhbGwgaWRzIGluIHRoZSB2aWV3XG4gKiB2YXIgaWRzID0gdmlldy5nZXRJZHMoKTtcbiAqIGNvbnNvbGUubG9nKCdpZHMnLCBpZHMpOyAvLyB3aWxsIG91dHB1dCBbMSwgMl1cbiAqXG4gKiAvLyBnZXQgYWxsIGl0ZW1zIGluIHRoZSB2aWV3XG4gKiB2YXIgaXRlbXMgPSB2aWV3LmdldCgpO1xuICogYGBgXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhVmlldzxcbiAgICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbiAgPlxuICBleHRlbmRzIERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5cbiAgaW1wbGVtZW50cyBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD5cbntcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBsZW5ndGggPSAwO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCBpZFByb3AoKTogSWRQcm9wIHtcbiAgICByZXR1cm4gdGhpcy5nZXREYXRhU2V0KCkuaWRQcm9wO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXI6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXTtcbiAgcHJpdmF0ZSBfZGF0YSE6IERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPjsgLy8gY29uc3RydWN0b3Ig4oaSIHNldERhdGFcbiAgcHJpdmF0ZSByZWFkb25seSBfaWRzOiBTZXQ8SWQ+ID0gbmV3IFNldCgpOyAvLyBpZHMgb2YgdGhlIGl0ZW1zIGN1cnJlbnRseSBpbiBtZW1vcnkgKGp1c3QgY29udGFpbnMgYSBib29sZWFuIHRydWUpXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IERhdGFWaWV3T3B0aW9uczxJdGVtLCBJZFByb3A+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRhVmlldy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgaW5zdGFuY2UgY29udGFpbmluZyBkYXRhIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGlzIGRhdGEgdmlldy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBkYXRhOiBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4sXG4gICAgb3B0aW9ucz86IERhdGFWaWV3T3B0aW9uczxJdGVtLCBJZFByb3A+XG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHRoaXMuX2xpc3RlbmVyID0gdGhpcy5fb25FdmVudC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5zZXREYXRhKGRhdGEpO1xuICB9XG5cbiAgLy8gVE9ETzogaW1wbGVtZW50IGEgZnVuY3Rpb24gLmNvbmZpZygpIHRvIGR5bmFtaWNhbGx5IHVwZGF0ZSB0aGluZ3MgbGlrZSBjb25maWd1cmVkIGZpbHRlclxuICAvLyBhbmQgdHJpZ2dlciBjaGFuZ2VzIGFjY29yZGluZ2x5XG5cbiAgLyoqXG4gICAqIFNldCBhIGRhdGEgc291cmNlIGZvciB0aGUgdmlldy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgaW5zdGFuY2UgY29udGFpbmluZyBkYXRhIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KS5cbiAgICogQHJlbWFya3NcbiAgICogTm90ZSB0aGF0IHdoZW4gdGhlIGRhdGEgdmlldyBpcyBib3VuZCB0byBhIGRhdGEgc2V0IGl0IHdvbid0IGJlIGdhcmJhZ2VcbiAgICogY29sbGVjdGVkIHVubGVzcyB0aGUgZGF0YSBzZXQgaXMgdG9vLiBVc2UgYGRhdGFWaWV3LnNldERhdGEobnVsbClgIG9yXG4gICAqIGBkYXRhVmlldy5kaXNwb3NlKClgIHRvIGVuYWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24gYmVmb3JlIHlvdSBsb3NlIHRoZSBsYXN0XG4gICAqIHJlZmVyZW5jZS5cbiAgICovXG4gIHB1YmxpYyBzZXREYXRhKGRhdGE6IERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIGN1cnJlbnQgZGF0YXNldFxuICAgICAgaWYgKHRoaXMuX2RhdGEub2ZmKSB7XG4gICAgICAgIHRoaXMuX2RhdGEub2ZmKFwiKlwiLCB0aGlzLl9saXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIC8vIHRyaWdnZXIgYSByZW1vdmUgb2YgYWxsIGl0ZW1zIGluIG1lbW9yeVxuICAgICAgY29uc3QgaWRzID0gdGhpcy5fZGF0YS5nZXRJZHMoeyBmaWx0ZXI6IHRoaXMuX29wdGlvbnMuZmlsdGVyIH0pO1xuICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl9kYXRhLmdldChpZHMpO1xuXG4gICAgICB0aGlzLl9pZHMuY2xlYXIoKTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJyZW1vdmVcIiwgeyBpdGVtczogaWRzLCBvbGREYXRhOiBpdGVtcyB9KTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9kYXRhID0gZGF0YTtcblxuICAgICAgLy8gdHJpZ2dlciBhbiBhZGQgb2YgYWxsIGFkZGVkIGl0ZW1zXG4gICAgICBjb25zdCBpZHMgPSB0aGlzLl9kYXRhLmdldElkcyh7IGZpbHRlcjogdGhpcy5fb3B0aW9ucy5maWx0ZXIgfSk7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGVuZ3RoID0gaWRzLmxlbmd0aDtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogaWRzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhID0gbmV3IERhdGFTZXQ8SXRlbSwgSWRQcm9wPigpO1xuICAgIH1cblxuICAgIC8vIHN1YnNjcmliZSB0byBuZXcgZGF0YXNldFxuICAgIGlmICh0aGlzLl9kYXRhLm9uKSB7XG4gICAgICB0aGlzLl9kYXRhLm9uKFwiKlwiLCB0aGlzLl9saXN0ZW5lcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIERhdGFWaWV3LlxuICAgKiBVc2VmdWwgd2hlbiB0aGUgRGF0YVZpZXcgaGFzIGEgZmlsdGVyIGZ1bmN0aW9uIGNvbnRhaW5pbmcgYSB2YXJpYWJsZSBwYXJhbWV0ZXIuXG4gICAqL1xuICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICBjb25zdCBpZHMgPSB0aGlzLl9kYXRhLmdldElkcyh7XG4gICAgICBmaWx0ZXI6IHRoaXMuX29wdGlvbnMuZmlsdGVyLFxuICAgIH0pO1xuICAgIGNvbnN0IG9sZElkcyA9IFsuLi50aGlzLl9pZHNdO1xuICAgIGNvbnN0IG5ld0lkczogUmVjb3JkPElkLCBib29sZWFuPiA9IHt9O1xuICAgIGNvbnN0IGFkZGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICAvLyBjaGVjayBmb3IgYWRkaXRpb25zXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICBuZXdJZHNbaWRdID0gdHJ1ZTtcbiAgICAgIGlmICghdGhpcy5faWRzLmhhcyhpZCkpIHtcbiAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICAgIHRoaXMuX2lkcy5hZGQoaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNoZWNrIGZvciByZW1vdmFsc1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBvbGRJZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gb2xkSWRzW2ldO1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgIGlmIChpdGVtID09IG51bGwpIHtcbiAgICAgICAgLy8gQFRPRE86IEludmVzdGlnYXRlLlxuICAgICAgICAvLyBEb2Vzbid0IGhhcHBlbiBkdXJpbmcgdGVzdHMgb3IgZXhhbXBsZXMuXG4gICAgICAgIC8vIElzIGl0IHJlYWxseSBpbXBvc3NpYmxlIG9yIGNvdWxkIGl0IGV2ZW50dWFsbHkgaGFwcGVuP1xuICAgICAgICAvLyBIb3cgdG8gaGFuZGxlIGl0IGlmIGl0IGRvZXM/IFRoZSB0eXBlcyBndWFyYW50ZWUgbm9uLW51bGxhYmxlIGl0ZW1zLlxuICAgICAgICBjb25zb2xlLmVycm9yKFwiSWYgeW91IHNlZSB0aGlzLCByZXBvcnQgaXQgcGxlYXNlLlwiKTtcbiAgICAgIH0gZWxzZSBpZiAoIW5ld0lkc1tpZF0pIHtcbiAgICAgICAgcmVtb3ZlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgcmVtb3ZlZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIHRoaXMuX2lkcy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoICs9IGFkZGVkSWRzLmxlbmd0aCAtIHJlbW92ZWRJZHMubGVuZ3RoO1xuXG4gICAgLy8gdHJpZ2dlciBldmVudHNcbiAgICBpZiAoYWRkZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGFkZGVkSWRzIH0pO1xuICAgIH1cbiAgICBpZiAocmVtb3ZlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJyZW1vdmVcIiwgeyBpdGVtczogcmVtb3ZlZElkcywgb2xkRGF0YTogcmVtb3ZlZEl0ZW1zIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkOiBJZCk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkczogSWRbXSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGZpcnN0PzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gfCBJZCB8IElkW10sXG4gICAgc2Vjb25kPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPHN0cmluZywgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4ge1xuICAgIGlmICh0aGlzLl9kYXRhID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIHBhcnNlIHRoZSBhcmd1bWVudHNcbiAgICBsZXQgaWRzOiBJZCB8IElkW10gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgb3B0aW9uczogYW55O1xuICAgIGlmIChpc0lkKGZpcnN0KSB8fCBBcnJheS5pc0FycmF5KGZpcnN0KSkge1xuICAgICAgaWRzID0gZmlyc3Q7XG4gICAgICBvcHRpb25zID0gc2Vjb25kO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0gZmlyc3Q7XG4gICAgfVxuXG4gICAgLy8gZXh0ZW5kIHRoZSBvcHRpb25zIHdpdGggdGhlIGRlZmF1bHQgb3B0aW9ucyBhbmQgcHJvdmlkZWQgb3B0aW9uc1xuICAgIGNvbnN0IHZpZXdPcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHRoaXMuX29wdGlvbnMsXG4gICAgICBvcHRpb25zXG4gICAgKTtcblxuICAgIC8vIGNyZWF0ZSBhIGNvbWJpbmVkIGZpbHRlciBtZXRob2Qgd2hlbiBuZWVkZWRcbiAgICBjb25zdCB0aGlzRmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3Qgb3B0aW9uc0ZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgaWYgKHRoaXNGaWx0ZXIgJiYgb3B0aW9uc0ZpbHRlcikge1xuICAgICAgdmlld09wdGlvbnMuZmlsdGVyID0gKGl0ZW0pOiBib29sZWFuID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNGaWx0ZXIoaXRlbSkgJiYgb3B0aW9uc0ZpbHRlcihpdGVtKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGlkcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXQodmlld09wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXQoaWRzLCB2aWV3T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRJZHMob3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+KTogSWRbXSB7XG4gICAgaWYgKHRoaXMuX2RhdGEubGVuZ3RoKSB7XG4gICAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgICBjb25zdCBvcHRpb25zRmlsdGVyID0gb3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5maWx0ZXIgOiBudWxsO1xuICAgICAgbGV0IGZpbHRlcjogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT5bXCJmaWx0ZXJcIl07XG5cbiAgICAgIGlmIChvcHRpb25zRmlsdGVyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgZmlsdGVyID0gKGl0ZW0pOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXIgPSBvcHRpb25zRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXRJZHMoe1xuICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgb3JkZXI6IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBmb3JFYWNoKFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiB2b2lkLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnM8SXRlbT5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSB0aGlzLl9vcHRpb25zLmZpbHRlcjtcbiAgICAgIGNvbnN0IG9wdGlvbnNGaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgICAgbGV0IGZpbHRlcjogdW5kZWZpbmVkIHwgKChpdGVtOiBJdGVtKSA9PiBib29sZWFuKTtcblxuICAgICAgaWYgKG9wdGlvbnNGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXIpIHtcbiAgICAgICAgICBmaWx0ZXIgPSBmdW5jdGlvbiAoaXRlbTogSXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGaWx0ZXIoaXRlbSkgJiYgb3B0aW9uc0ZpbHRlcihpdGVtKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbHRlciA9IG9wdGlvbnNGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RhdGEuZm9yRWFjaChjYWxsYmFjaywge1xuICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgb3JkZXI6IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgbWFwPFQ+KFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBULFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxJdGVtLCBUPlxuICApOiBUW10ge1xuICAgIHR5cGUgRmlsdGVyID0gTm9uTnVsbGFibGU8RGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5bXCJmaWx0ZXJcIl0+O1xuXG4gICAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSB0aGlzLl9vcHRpb25zLmZpbHRlcjtcbiAgICAgIGNvbnN0IG9wdGlvbnNGaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgICAgbGV0IGZpbHRlcjogdW5kZWZpbmVkIHwgRmlsdGVyO1xuXG4gICAgICBpZiAob3B0aW9uc0ZpbHRlcikge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgIGZpbHRlciA9IChpdGVtKTogUmV0dXJuVHlwZTxGaWx0ZXI+ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXIgPSBvcHRpb25zRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5tYXAoY2FsbGJhY2ssIHtcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIG9yZGVyOiBvcHRpb25zICYmIG9wdGlvbnMub3JkZXIsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0RGF0YVNldCgpOiBEYXRhU2V0PEl0ZW0sIElkUHJvcD4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLmdldERhdGFTZXQoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RyZWFtKGlkcz86IEl0ZXJhYmxlPElkPik6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLnN0cmVhbShcbiAgICAgIGlkcyB8fCB7XG4gICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiB0aGlzLl9pZHMua2V5cy5iaW5kKHRoaXMuX2lkcyksXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGluc3RhbmNlIHVudXNhYmxlIHByaW9yIHRvIGdhcmJhZ2UgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGludGVudGlvbiBvZiB0aGlzIG1ldGhvZCBpcyB0byBoZWxwIGRpc2NvdmVyIHNjZW5hcmlvcyB3aGVyZSB0aGUgZGF0YVxuICAgKiB2aWV3IGlzIGJlaW5nIHVzZWQgd2hlbiB0aGUgcHJvZ3JhbW1lciB0aGlua3MgaXQgaGFzIGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWRcbiAgICogYWxyZWFkeS4gSXQncyBzdHJpY3RlciB2ZXJzaW9uIG9mIGBkYXRhVmlldy5zZXREYXRhKG51bGwpYC5cbiAgICovXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhPy5vZmYpIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmKFwiKlwiLCB0aGlzLl9saXN0ZW5lcik7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IFwiVGhpcyBkYXRhIHZpZXcgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi5cIjtcbiAgICBjb25zdCByZXBsYWNlbWVudCA9IHtcbiAgICAgIGdldDogKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9LFxuICAgICAgc2V0OiAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMoRGF0YVZpZXcucHJvdG90eXBlKSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgcmVwbGFjZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBsaXN0ZW5lci4gV2lsbCBwcm9wYWdhdGUgYWxsIGV2ZW50cyBmcm9tIHRoZSBjb25uZWN0ZWQgZGF0YSBzZXQgdG8gdGhlIHN1YnNjcmliZXJzIG9mIHRoZSBEYXRhVmlldywgYnV0IHdpbGwgZmlsdGVyIHRoZSBpdGVtcyBhbmQgb25seSB0cmlnZ2VyIHdoZW4gdGhlcmUgYXJlIGNoYW5nZXMgaW4gdGhlIGZpbHRlcmVkIGRhdGEgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gSWQgc3VwcGxpZWQgYnkgdGhlIHNlbmRlci5cbiAgICovXG4gIHByaXZhdGUgX29uRXZlbnQ8RU4gZXh0ZW5kcyBFdmVudE5hbWU+KFxuICAgIGV2ZW50OiBFTixcbiAgICBwYXJhbXM6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltFTl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy5pdGVtcyB8fCAhdGhpcy5fZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlkcyA9IHBhcmFtcy5pdGVtcztcbiAgICBjb25zdCBhZGRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCByZW1vdmVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3Qgb2xkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcblxuICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgIGNhc2UgXCJhZGRcIjpcbiAgICAgICAgLy8gZmlsdGVyIHRoZSBpZHMgb2YgdGhlIGFkZGVkIGl0ZW1zXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXQoaWQpO1xuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwidXBkYXRlXCI6XG4gICAgICAgIC8vIGRldGVybWluZSB0aGUgZXZlbnQgZnJvbSB0aGUgdmlld3Mgdmlld3BvaW50OiBhbiB1cGRhdGVkXG4gICAgICAgIC8vIGl0ZW0gY2FuIGJlIGFkZGVkLCB1cGRhdGVkLCBvciByZW1vdmVkIGZyb20gdGhpcyB2aWV3LlxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0KGlkKTtcblxuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faWRzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgdXBkYXRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgdXBkYXRlZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgKHBhcmFtcyBhcyBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPikuZGF0YVtpXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBvbGRJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAgIChwYXJhbXMgYXMgVXBkYXRlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4pLm9sZERhdGFbaV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuX2lkcy5hZGQoaWQpO1xuICAgICAgICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2lkcy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgICByZW1vdmVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgICAgICByZW1vdmVkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAocGFyYW1zIGFzIFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+KS5vbGREYXRhW2ldXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBub3RoaW5nIGludGVyZXN0aW5nIGZvciBtZSA6LShcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInJlbW92ZVwiOlxuICAgICAgICAvLyBmaWx0ZXIgdGhlIGlkcyBvZiB0aGUgcmVtb3ZlZCBpdGVtc1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICAgICAgaWYgKHRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICB0aGlzLl9pZHMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIHJlbW92ZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgICByZW1vdmVkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgKHBhcmFtcyBhcyBSZW1vdmVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPikub2xkRGF0YVtpXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCArPSBhZGRlZElkcy5sZW5ndGggLSByZW1vdmVkSWRzLmxlbmd0aDtcblxuICAgIGlmIChhZGRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogYWRkZWRJZHMgfSwgc2VuZGVySWQpO1xuICAgIH1cbiAgICBpZiAodXBkYXRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXG4gICAgICAgIFwidXBkYXRlXCIsXG4gICAgICAgIHsgaXRlbXM6IHVwZGF0ZWRJZHMsIG9sZERhdGE6IG9sZEl0ZW1zLCBkYXRhOiB1cGRhdGVkSXRlbXMgfSxcbiAgICAgICAgc2VuZGVySWRcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyZW1vdmVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgXCJyZW1vdmVcIixcbiAgICAgICAgeyBpdGVtczogcmVtb3ZlZElkcywgb2xkRGF0YTogcmVtb3ZlZEl0ZW1zIH0sXG4gICAgICAgIHNlbmRlcklkXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IFBhcnRJdGVtIH0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcbmltcG9ydCB7IERhdGFTZXQgfSBmcm9tIFwiLi9kYXRhLXNldFwiO1xuXG4vKipcbiAqIENoZWNrIHRoYXQgZ2l2ZW4gdmFsdWUgaXMgY29tcGF0aWJsZSB3aXRoIFZpcyBEYXRhIFNldCBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtIGlkUHJvcCAtIFRoZSBleHBlY3RlZCBwcm9wZXJ0eSB0byBjb250YWluIGl0ZW0gaWQuXG4gKiBAcGFyYW0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0ZXN0ZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIGFsbCBleHBlY3RlZCB2YWx1ZXMgYW5kIG1ldGhvZHMgbWF0Y2gsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YVNldExpa2U8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4oaWRQcm9wOiBJZFByb3AsIHY6IGFueSk6IHYgaXMgRGF0YVNldDxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHYgIT09IG51bGwgJiZcbiAgICBpZFByb3AgPT09IHYuaWRQcm9wICYmXG4gICAgdHlwZW9mIHYuYWRkID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5jbGVhciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZGlzdGluY3QgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmZvckVhY2ggPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0RGF0YVNldCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0SWRzID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICB0eXBlb2Ygdi5tYXAgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm1heCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYubWluID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vZmYgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm9uID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5yZW1vdmUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnNldE9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnN0cmVhbSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYudXBkYXRlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi51cGRhdGVPbmx5ID09PSBcImZ1bmN0aW9uXCJcbiAgKTtcbn1cbiIsICJpbXBvcnQgeyBEYXRhVmlldyB9IGZyb20gXCIuL2RhdGEtdmlld1wiO1xuaW1wb3J0IHsgUGFydEl0ZW0gfSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuaW1wb3J0IHsgaXNEYXRhU2V0TGlrZSB9IGZyb20gXCIuL2RhdGEtc2V0LWNoZWNrXCI7XG5cbi8qKlxuICogQ2hlY2sgdGhhdCBnaXZlbiB2YWx1ZSBpcyBjb21wYXRpYmxlIHdpdGggVmlzIERhdGEgVmlldyBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtIGlkUHJvcCAtIFRoZSBleHBlY3RlZCBwcm9wZXJ0eSB0byBjb250YWluIGl0ZW0gaWQuXG4gKiBAcGFyYW0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0ZXN0ZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIGFsbCBleHBlY3RlZCB2YWx1ZXMgYW5kIG1ldGhvZHMgbWF0Y2gsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YVZpZXdMaWtlPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+KGlkUHJvcDogSWRQcm9wLCB2OiBhbnkpOiB2IGlzIERhdGFWaWV3PEl0ZW0sIElkUHJvcD4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgdiAhPT0gbnVsbCAmJlxuICAgIGlkUHJvcCA9PT0gdi5pZFByb3AgJiZcbiAgICB0eXBlb2Ygdi5mb3JFYWNoID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldERhdGFTZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldElkcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgdHlwZW9mIHYubWFwID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vZmYgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm9uID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5zdHJlYW0gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIGlzRGF0YVNldExpa2UoaWRQcm9wLCB2LmdldERhdGFTZXQoKSlcbiAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uIH0gZnJvbSBcIkBlbGFzdGljL2V1aS9zcmMvY29tcG9uZW50cy9jb21ib19ib3gvdHlwZXNcIjtcbmltcG9ydCB7XG4gIEV1aUNvbWJvQm94LFxuICBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQsXG4gIGV1aVBhbGV0dGVDb2xvckJsaW5kLFxuICBFdWlIaWdobGlnaHQsXG4gIEV1aUhlYWx0aCxcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aUljb24sXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4uL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vc3R5bGUvdHM0bmZkaVN0eWxlcy90czRuZmRpQXV0b2NvbXBsZXRlU3R5bGUuY3NzXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9zdHlsZS90czRuZmRpU3R5bGVzL3RzNG5mZGlCcmVhZGNydW1iU3R5bGUuY3NzXCI7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuXG4vKipcbiAqIEEgUmVhY3QgY29tcG9uZW50IHRvIHByb3ZpZGUgQXV0b3N1Z2dlc3Rpb24gYmFzZWQgb24gU2VtTG9va1AuXG4gKi9cbmZ1bmN0aW9uIEF1dG9jb21wbGV0ZVdpZGdldChwcm9wczogQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgaGFzU2hvcnRTZWxlY3RlZExhYmVsLFxuICAgIGFsbG93Q3VzdG9tVGVybXMsXG4gICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LFxuICAgIHByZXNlbGVjdGVkLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHNpbmdsZVNlbGVjdGlvbixcbiAgICBzaW5nbGVTdWdnZXN0aW9uUm93LFxuICAgIHRzNG5mZGlHYXRld2F5ID0gZmFsc2UsXG4gICAgc2hvd0FwaVNvdXJjZSA9IHRydWUsXG4gICAgY2xhc3NOYW1lLFxuICAgIHVzZUxlZ2FjeSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3QgdmlzQ29sb3JzID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKTtcbiAgY29uc3QgdmlzQ29sb3JzQmVoaW5kVGV4dCA9IGV1aVBhbGV0dGVDb2xvckJsaW5kQmVoaW5kVGV4dCgpO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBzZWFyY2ggdmFsdWVcbiAgICovXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGU8c3RyaW5nPihcIlwiKTtcblxuICAvKipcbiAgICogVGhlIHNldCBvZiBhdmFpbGFibGUgb3B0aW9ucy5zXG4gICAqL1xuICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZTxBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+Pj4oXG4gICAgW11cbiAgKTtcblxuICAvKipcbiAgICogU3RvcmUgY3VycmVudCBzZXQgb2Ygc2VsZWN0IE9wdGlvbnMuIEEgc3Vic2V0IG9mIG9wdGlvbnMuXG4gICAqL1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb25zLCBzZXRTZWxlY3RlZE9wdGlvbnNdID0gdXNlU3RhdGU8XG4gICAgQXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj5cbiAgPihbXSk7XG5cbiAgY29uc3QgZmluYWxDbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJ0czRuZmRpLWF1dG9jb21wbGV0ZS1zdHlsZVwiO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCByZW5kZXJPcHRpb24gPSAob3B0aW9uLCBzZWFyY2hWYWx1ZSkgPT4ge1xuICAgIGNvbnN0IHsgbGFiZWwsIHZhbHVlIH0gPSBvcHRpb247XG4gICAgY29uc3QgZG90Q29sb3JJbmRleCA9IHZpc0NvbG9yc0JlaGluZFRleHQuaW5kZXhPZihcbiAgICAgIHZhbHVlLnR5cGUgPT09IFwiY2xhc3NcIlxuICAgICAgICA/IHZpc0NvbG9yc0JlaGluZFRleHRbNV1cbiAgICAgICAgOiB2YWx1ZS50eXBlID09PSBcImluZGl2aWR1YWxcIlxuICAgICAgICA/IHZpc0NvbG9yc0JlaGluZFRleHRbM11cbiAgICAgICAgOiB2YWx1ZS50eXBlID09PSBcInByb3BlcnR5XCJcbiAgICAgICAgPyB2aXNDb2xvcnNCZWhpbmRUZXh0WzFdXG4gICAgICAgIDogXCJcIlxuICAgICk7XG4gICAgY29uc3QgZG90Q29sb3IgPSB2aXNDb2xvcnNbZG90Q29sb3JJbmRleF07XG5cbiAgICBpZiAoYWxsb3dDdXN0b21UZXJtcyAmJiB2YWx1ZS5pcmkgPT0gXCJcIikge1xuICAgICAgLy8gaWYgd2UgaGF2ZSBhIGN1c3RvbSB0ZXJtLCBqdXN0IHNob3cgdGhlIGxhYmVsXG4gICAgICByZXR1cm4gbGFiZWw7XG4gICAgfVxuXG4gICAgbGV0IHByZWZpeCA9XG4gICAgICB2YWx1ZS50eXBlID09PSBcIm9udG9sb2d5XCJcbiAgICAgICAgPyBcIlByZWZpeDogXCIgKyB2YWx1ZS5vbnRvbG9neV9uYW1lXG4gICAgICAgIDogXCJQcmVmaXggPiBTaG9ydCBmb3JtOiBcIiArXG4gICAgICAgICAgdmFsdWUub250b2xvZ3lfbmFtZSArXG4gICAgICAgICAgXCIgPiBcIiArXG4gICAgICAgICAgdmFsdWUuc2hvcnRfZm9ybTtcblxuICAgIGxldCBob3ZlclRleHQgPSBgVHlwZTogJHt2YWx1ZS50eXBlfVxcblxcbkxhYmVsOiAke3ZhbHVlLmxhYmVsfVxcblxcbiR7cHJlZml4fWA7XG4gICAgaWYgKHZhbHVlLmRlc2NyaXB0aW9uICE9IHVuZGVmaW5lZCkge1xuICAgICAgaG92ZXJUZXh0ICs9IGBcXG5cXG5EZXNjcmlwdGlvbjogJHt2YWx1ZS5kZXNjcmlwdGlvbn1gO1xuICAgIH1cbiAgICBpZiAoc2hvd0FwaVNvdXJjZSAmJiB2YWx1ZS5zb3VyY2VfdXJsICYmIHZhbHVlLnNvdXJjZV91cmwgIT09IFwiXCIpIHtcbiAgICAgIGhvdmVyVGV4dCArPSBcIlxcblxcblNvdXJjZTogXCIgKyB2YWx1ZS5zb3VyY2U7XG4gICAgICBob3ZlclRleHQgKz0gXCJcXG5cXG5Tb3VyY2UgVVJMOiBcIiArIHZhbHVlLnNvdXJjZV91cmw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyT250b2xvZ3kgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfT5cbiAgICAgICAgICA8RXVpSGVhbHRoIGNvbG9yPXtkb3RDb2xvcn0+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPEV1aUhpZ2hsaWdodCBzZWFyY2g9e3NlYXJjaFZhbHVlfT57dmFsdWUubGFiZWx9PC9FdWlIaWdobGlnaHQ+XG4gICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICB7dmFsdWUuZGVzY3JpcHRpb259XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9FdWlIZWFsdGg+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlckVudGl0eSA9ICgpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzcGFuIHRpdGxlPXtob3ZlclRleHR9IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PlxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPEV1aUhlYWx0aCBjb2xvcj17ZG90Q29sb3J9PlxuICAgICAgICAgICAgICA8RXVpSGlnaGxpZ2h0IHNlYXJjaD17c2VhcmNoVmFsdWV9Pnt2YWx1ZS5sYWJlbH08L0V1aUhpZ2hsaWdodD5cbiAgICAgICAgICAgIDwvRXVpSGVhbHRoPlxuICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7XG4gICAgICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgICAgICBvbnRvbG9neU5hbWU9e3ZhbHVlLm9udG9sb2d5X25hbWV9XG4gICAgICAgICAgICAgIHNob3J0Rm9ybT17dmFsdWUuc2hvcnRfZm9ybX1cbiAgICAgICAgICAgICAgY29sb3JGaXJzdD17XCJwcmltYXJ5XCJ9XG4gICAgICAgICAgICAgIGNvbG9yU2Vjb25kPXtcInN1Y2Nlc3NcIn1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtmaW5hbENsYXNzTmFtZX0tYnJlYWRjcnVtYmB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEV1aUljb25cbiAgICAgICAgICAgICAgdHlwZT17XCJpSW5DaXJjbGVcIn1cbiAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogXCI1cHhcIiB9fVxuICAgICAgICAgICAgICB0aXRsZT17aG92ZXJUZXh0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgeyFzaW5nbGVTdWdnZXN0aW9uUm93ICYmIHZhbHVlLmRlc2NyaXB0aW9uICYmIChcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICAgICAgdGV4dE92ZXJmbG93OiBcImVsbGlwc2lzXCIsXG4gICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogXCJub3dyYXBcIixcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImJsb2NrXCIsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt2YWx1ZS5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH07XG5cbiAgICByZXR1cm4gdmFsdWUudHlwZSA9PT0gXCJvbnRvbG9neVwiID8gcmVuZGVyT250b2xvZ3koKSA6IHJlbmRlckVudGl0eSgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGb3IgcHJlc2VsZWN0IHByb3BlcnR5XG4gICAqIENyZWF0ZXMgb3B0aW9uIGZyb20gcHJlc2VsZWN0ZWQgbGFiZWwgYW5kIGlyaVxuICAgKiBAcGFyYW0gcHJlc2VsZWN0ZWRFbGVtZW50XG4gICAqL1xuICBmdW5jdGlvbiBjcmVhdGVDdXN0b21UZXJtT3B0aW9uKHByZXNlbGVjdGVkRWxlbWVudDogYW55KTogRXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBwcmVzZWxlY3RlZEVsZW1lbnQubGFiZWwsXG4gICAgICBrZXk6IHByZXNlbGVjdGVkRWxlbWVudC5sYWJlbCxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGlyaTogcHJlc2VsZWN0ZWRFbGVtZW50LmlyaSB8fCBcIlwiLFxuICAgICAgICBsYWJlbDogcHJlc2VsZWN0ZWRFbGVtZW50LmxhYmVsLFxuICAgICAgICBvbnRvbG9neV9uYW1lOiBcIlwiLFxuICAgICAgICB0eXBlOiBcIlwiLFxuICAgICAgICBzaG9ydF9mb3JtOiBcIlwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgc291cmNlOiBcIlwiLFxuICAgICAgICBzb3VyY2VfdXJsOiBcIlwiLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciBwcmVzZWxlY3RlZCBwcm9wZXJ0eVxuICAgKiBDcmVhdGVzIG9wdGlvbiBmcm9tIE9MUyBBUEkgc2VsZWN0IHJlc3BvbnNlXG4gICAqIEBwYXJhbSBzZWxlY3Rpb24gVGhlIHNlbGVjdCByZXNwb25zZVxuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlU2VsZWN0T3B0aW9uKHNlbGVjdGlvbjogYW55KTogRXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBoYXNTaG9ydFNlbGVjdGVkTGFiZWxcbiAgICAgICAgPyBzZWxlY3Rpb24uZ2V0TGFiZWwoKVxuICAgICAgICA6IGdlbmVyYXRlRGlzcGxheUxhYmVsKHNlbGVjdGlvbiksXG4gICAgICBrZXk6IGAke3NlbGVjdGlvbi5nZXRPbnRvbG9neUlkKCl9Ojoke3NlbGVjdGlvbi5nZXRJcmkoKX06OiR7c2VsZWN0aW9uLmdldFR5cGUoKX1gLFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgaXJpOiBzZWxlY3Rpb24uZ2V0SXJpKCksXG4gICAgICAgIGxhYmVsOiBzZWxlY3Rpb24uZ2V0TGFiZWwoKSxcbiAgICAgICAgb250b2xvZ3lfbmFtZTogc2VsZWN0aW9uLmdldE9udG9sb2d5SWQoKSxcbiAgICAgICAgdHlwZTogc2VsZWN0aW9uLmdldFR5cGUoKSxcbiAgICAgICAgc2hvcnRfZm9ybTogc2VsZWN0aW9uLmdldFNob3J0Rm9ybSgpLFxuICAgICAgICBkZXNjcmlwdGlvbjogc2VsZWN0aW9uLmdldERlc2NyaXB0aW9uKCksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRm9yIHByZXNlbGVjdGVkIHByb3BlcnR5XG4gICAqIENyZWF0ZXMgb3B0aW9uIGZyb20gT0xTNCBBUEkgZW50aXR5IHJlc3BvbnNlXG4gICAqIEBwYXJhbSBlbnRpdHkgVGhlIEVudGl0eSBvYmplY3QgcmVzcG9uc2VcbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudGl0eU9wdGlvbihlbnRpdHk6IEVudGl0eSk6IEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogaGFzU2hvcnRTZWxlY3RlZExhYmVsXG4gICAgICAgID8gZW50aXR5LmdldExhYmVsKClcbiAgICAgICAgOiBnZW5lcmF0ZURpc3BsYXlMYWJlbChlbnRpdHkpLFxuICAgICAga2V5OiBgJHtlbnRpdHkuZ2V0T250b2xvZ3lJZCgpfTo6JHtlbnRpdHkuZ2V0SXJpKCl9Ojoke2VudGl0eS5nZXRUeXBlKCl9YCxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGlyaTogZW50aXR5LmdldElyaSgpLFxuICAgICAgICBsYWJlbDogZW50aXR5LmdldExhYmVsKCksXG4gICAgICAgIG9udG9sb2d5X25hbWU6IGVudGl0eS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgIHR5cGU6IGVudGl0eS5nZXRUeXBlKCksXG4gICAgICAgIHNob3J0X2Zvcm06IGVudGl0eS5nZXRTaG9ydEZvcm0oKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGVudGl0eS5nZXREZXNjcmlwdGlvbigpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciBwcmVzZWxlY3RlZCBwcm9wZXJ0eVxuICAgKiBSZXF1ZXN0IHRoZSBPTFM0IEFQSSBlbnRpdHkgZW5kcG9pbnQgYW5kIGNyZWF0ZSB0aGUgZW50aXR5IG9wdGlvblxuICAgKiBAcGFyYW0gcHJlc2VsZWN0ZWRFbGVtZW50XG4gICAqIEBwYXJhbSBwcmVzZWxlY3RlZE9wdGlvbnNcbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIGZldGNoQW5kUHJvY2Vzc0VudGl0eU9wdGlvbihcbiAgICBwcmVzZWxlY3RlZEVsZW1lbnQ6IGFueSxcbiAgICBwcmVzZWxlY3RlZE9wdGlvbnM6IEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT5bXVxuICApIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KFxuICAgICAgICBwcmVzZWxlY3RlZEVsZW1lbnQuaXJpLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB1c2VMZWdhY3lcbiAgICAgICk7XG5cbiAgICAgIHByZXNlbGVjdGVkT3B0aW9ucy5wdXNoKGNyZWF0ZUVudGl0eU9wdGlvbihyZXNwb25zZSkpO1xuXG4gICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uICYmIHByZXNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHByZXNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPSAxO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAocHJlc2VsZWN0ZWRFbGVtZW50LmxhYmVsICYmIGFsbG93Q3VzdG9tVGVybXMpXG4gICAgICAgIHByZXNlbGVjdGVkT3B0aW9ucy5wdXNoKGNyZWF0ZUN1c3RvbVRlcm1PcHRpb24ocHJlc2VsZWN0ZWRFbGVtZW50KSk7XG4gICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uICYmIHByZXNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHByZXNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPSAxO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIGRhdGEgZm9yIG9wdGlvbjpcIiwgcHJlc2VsZWN0ZWRFbGVtZW50LCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvciBwcmVzZWxlY3RlZCBwcm9wZXJ0eVxuICAgKiBSZXF1ZXN0IHRoZSBPTFMgQVBJIHNlbGVjdCBlbmRwb2ludCBhbmQgY3JlYXRlIHNlbGVjdCBvcHRpb24gYnkgZWl0aGVyIHVzaW5nIHNlbGVjdCByZXNwb25zZSBvciAtIGlmIG5vIHJlc3BvbnNlIC0gdXNlIHRoZSBwcmVzZWxlY3RlZCBsYWJlbCBhbmQgaXJpXG4gICAqIEBwYXJhbSBwcmVzZWxlY3RlZEVsZW1lbnRcbiAgICogQHBhcmFtIHByZXNlbGVjdGVkT3B0aW9uc1xuICAgKi9cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hBbmRQcm9jZXNzU2VsZWN0T3B0aW9uKFxuICAgIHByZXNlbGVjdGVkRWxlbWVudDogYW55LFxuICAgIHByZXNlbGVjdGVkT3B0aW9uczogRXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55PltdXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9sc0FwaS5nZXRTZWxlY3REYXRhKFxuICAgICAgICB7IHF1ZXJ5OiBwcmVzZWxlY3RlZEVsZW1lbnQuaXJpIH0sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgIHRzNG5mZGlHYXRld2F5XG4gICAgICApO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG1hdGNoRm91bmQgPSBwcm9jZXNzU2VsZWN0UmVzcG9uc2UoXG4gICAgICAgIHJlc3BvbnNlLFxuICAgICAgICBwcmVzZWxlY3RlZEVsZW1lbnQsXG4gICAgICAgIHByZXNlbGVjdGVkT3B0aW9uc1xuICAgICAgKTtcblxuICAgICAgaWYgKCFtYXRjaEZvdW5kICYmIHByZXNlbGVjdGVkRWxlbWVudC5sYWJlbCAmJiBhbGxvd0N1c3RvbVRlcm1zKSB7XG4gICAgICAgIHByZXNlbGVjdGVkT3B0aW9ucy5wdXNoKGNyZWF0ZUN1c3RvbVRlcm1PcHRpb24ocHJlc2VsZWN0ZWRFbGVtZW50KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gJiYgcHJlc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcHJlc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9IDE7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChwcmVzZWxlY3RlZEVsZW1lbnQubGFiZWwgJiYgYWxsb3dDdXN0b21UZXJtcylcbiAgICAgICAgcHJlc2VsZWN0ZWRPcHRpb25zLnB1c2goY3JlYXRlQ3VzdG9tVGVybU9wdGlvbihwcmVzZWxlY3RlZEVsZW1lbnQpKTtcbiAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gJiYgcHJlc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcHJlc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9IDE7XG4gICAgICB9XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgZGF0YSBmb3Igb3B0aW9uOlwiLCBwcmVzZWxlY3RlZEVsZW1lbnQsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9yIHByZXNlbGVjdGVkIHByb3BlcnR5XG4gICAqIElmIHRoZSBwcmVzZWxlY3RlZCBlbGVtZW50IGhhcyBhIHNlbGVjdCByZXNwb25zZSwgY3JlYXRlIHRoZSBzZWxlY3Qgb3B0aW9uXG4gICAqIElmIG5vIHNlbGVjdCByZXNwb25zZSwgcmV0dXJuIGZhbHNlXG4gICAqIEBwYXJhbSByZXNwb25zZVxuICAgKiBAcGFyYW0gcHJlc2VsZWN0ZWRFbGVtZW50XG4gICAqIEBwYXJhbSBwcmVzZWxlY3RlZE9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIHByb2Nlc3NTZWxlY3RSZXNwb25zZShcbiAgICByZXNwb25zZTogYW55LFxuICAgIHByZXNlbGVjdGVkRWxlbWVudDogYW55LFxuICAgIHByZXNlbGVjdGVkT3B0aW9uczogRXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55PltdXG4gICk6IGJvb2xlYW4ge1xuICAgIGxldCBtYXRjaEZvdW5kID0gZmFsc2U7XG5cbiAgICByZXNwb25zZS5wcm9wZXJ0aWVzLmZvckVhY2goKHNlbGVjdGlvbjogYW55KSA9PiB7XG4gICAgICBpZiAocHJlc2VsZWN0ZWRFbGVtZW50LmlyaSA9PT0gc2VsZWN0aW9uLmdldElyaSgpKSB7XG4gICAgICAgIG1hdGNoRm91bmQgPSB0cnVlO1xuICAgICAgICBwcmVzZWxlY3RlZE9wdGlvbnMucHVzaChjcmVhdGVTZWxlY3RPcHRpb24oc2VsZWN0aW9uKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF0Y2hGb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBvbiBtb3VudDogZmV0Y2hlcyB0ZXJtIGZvciBwcmVzZWxlY3RlZFxuICAgKiBzZXRzIGl0cyBsYWJlbCBvciBzZXRzIGEgZ2l2ZW4gbGFiZWwgaWYgbm8gaXJpIGlzIHByb3ZpZGVkL3RoZSBnaXZlbiBpcmkgY2Fubm90IGJlIHJlc29sdmVkXG4gICAqIG9ubHkgaWYgYWxsb3dDdXN0b21UZXJtcyBpcyB0cnVlXG4gICAqL1xuICBjb25zdCB7IGlzTG9hZGluZzogaXNMb2FkaW5nT25Nb3VudCB9ID0gdXNlUXVlcnkoXG4gICAgW1wib25Nb3VudFwiLCBwcmVzZWxlY3RlZF0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHByZXNlbGVjdGVkT3B0aW9uczogRXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55PltdID0gW107XG5cbiAgICAgIGxldCB1bmlxdWVWYWx1ZXMgPSBbLi4ubmV3IFNldChwcmVzZWxlY3RlZCA/PyBbXSldLmZpbHRlcihcbiAgICAgICAgKG9wdGlvbikgPT4gKGFsbG93Q3VzdG9tVGVybXMgJiYgb3B0aW9uLmxhYmVsKSB8fCBvcHRpb24uaXJpXG4gICAgICApO1xuXG4gICAgICBpZiAodW5pcXVlVmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uKSB1bmlxdWVWYWx1ZXMgPSBbdW5pcXVlVmFsdWVzWzBdXTtcblxuICAgICAgZm9yIChjb25zdCBwcmVzZWxlY3RlZEVsZW1lbnQgb2YgdW5pcXVlVmFsdWVzKSB7XG4gICAgICAgIGlmICh1c2VMZWdhY3kpIHtcbiAgICAgICAgICBpZiAocHJlc2VsZWN0ZWRFbGVtZW50Py5pcmk/LnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICAgICAgICBhd2FpdCBmZXRjaEFuZFByb2Nlc3NTZWxlY3RPcHRpb24ocHJlc2VsZWN0ZWRFbGVtZW50LCBwcmVzZWxlY3RlZE9wdGlvbnMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocHJlc2VsZWN0ZWRFbGVtZW50Py5sYWJlbCAmJiBhbGxvd0N1c3RvbVRlcm1zKSB7XG4gICAgICAgICAgICBwcmVzZWxlY3RlZE9wdGlvbnMucHVzaChjcmVhdGVDdXN0b21UZXJtT3B0aW9uKHByZXNlbGVjdGVkRWxlbWVudCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocHJlc2VsZWN0ZWRFbGVtZW50Py5pcmk/LnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICAgICAgICBhd2FpdCBmZXRjaEFuZFByb2Nlc3NFbnRpdHlPcHRpb24ocHJlc2VsZWN0ZWRFbGVtZW50LCBwcmVzZWxlY3RlZE9wdGlvbnMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocHJlc2VsZWN0ZWRFbGVtZW50Py5sYWJlbCAmJiBhbGxvd0N1c3RvbVRlcm1zKSB7XG4gICAgICAgICAgICBwcmVzZWxlY3RlZE9wdGlvbnMucHVzaChjcmVhdGVDdXN0b21UZXJtT3B0aW9uKHByZXNlbGVjdGVkRWxlbWVudCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0T3B0aW9ucyhwcmVzZWxlY3RlZE9wdGlvbnMpO1xuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKHByZXNlbGVjdGVkT3B0aW9ucyk7XG4gICAgfVxuICApO1xuXG4gIC8qKlxuICAgKiBmZXRjaGVzIG5ldyBvcHRpb25zIHdoZW4gc2VhcmNoVmFsdWUgY2hhbmdlc1xuICAgKi9cbiAgY29uc3QgeyBpc0xvYWRpbmc6IGlzTG9hZGluZ1Rlcm1zIH0gPSB1c2VRdWVyeShcbiAgICBbXCJvblNlYXJjaENoYW5nZVwiLCBzZWFyY2hWYWx1ZV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNlYXJjaFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIG9sc0FwaVxuICAgICAgICAgIC5nZXRTZWxlY3REYXRhKFxuICAgICAgICAgICAgeyBxdWVyeTogc2VhcmNoVmFsdWUgfSxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICAgIHRzNG5mZGlHYXRld2F5XG4gICAgICAgICAgKVxuICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgIHNldE9wdGlvbnMoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvcGVydGllcy5tYXAoKHNlbGVjdGlvbjogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgLy8gbGFiZWwgdG8gZGlzcGxheSB3aXRoaW4gdGhlIGNvbWJvYm94IGVpdGhlciByYXcgdmFsdWUgb3IgZ2VuZXJhdGVkIG9uZVxuICAgICAgICAgICAgICAgICAgLy8gI3JlbmRlck9wdGlvbigpIGlzIHVzZWQgdG8gZGlzcGxheSBkdXJpbmcgc2VsZWN0aW9uLlxuICAgICAgICAgICAgICAgICAgbGFiZWw6IGhhc1Nob3J0U2VsZWN0ZWRMYWJlbFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGVjdGlvbi5nZXRMYWJlbCgpXG4gICAgICAgICAgICAgICAgICAgIDogZ2VuZXJhdGVEaXNwbGF5TGFiZWwoc2VsZWN0aW9uKSxcbiAgICAgICAgICAgICAgICAgIC8vIGtleSB0byBkaXN0aW5ndWlzaCB0aGUgb3B0aW9ucyAoZXNwZWNpYWxseSB0aG9zZSB3aXRoIHNhbWUgbGFiZWwpXG4gICAgICAgICAgICAgICAgICBrZXk6IGAke3NlbGVjdGlvbi5nZXRPbnRvbG9neUlkKCl9Ojoke3NlbGVjdGlvbi5nZXRJcmkoKX06OiR7c2VsZWN0aW9uLmdldFR5cGUoKX1gLFxuICAgICAgICAgICAgICAgICAgLy8gdmFsdWVzIHRvIHBhc3MgdG8gY2xpZW50c1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgaXJpOiBzZWxlY3Rpb24uZ2V0SXJpKCksXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzZWxlY3Rpb24uZ2V0TGFiZWwoKSxcbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogc2VsZWN0aW9uLmdldE9udG9sb2d5SWQoKSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogc2VsZWN0aW9uLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgICAgICAgc2hvcnRfZm9ybTogc2VsZWN0aW9uLmdldFNob3J0Rm9ybSgpLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogc2VsZWN0aW9uLmdldERlc2NyaXB0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogc2VsZWN0aW9uLmdldEFwaVNvdXJjZU5hbWUoKSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlX3VybDogc2VsZWN0aW9uLmdldEFwaVNvdXJjZUVuZHBvaW50KCksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgKTtcblxuICAvKipcbiAgICogT25jZSB0aGUgc2V0IG9mIHNlbGVjdGVkIG9wdGlvbnMgY2hhbmdlcywgcGFzcyB0aGUgZXZlbnQgYnkgaW52b2tpbmcgdGhlIHBhc3NlZCBmdW5jdGlvbi5cbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGlzTW91bnRlZCA9IHRydWU7XG4gICAgaWYgKGlzTW91bnRlZCkge1xuICAgICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMubWFwKCh4KSA9PiB7XG4gICAgICAgICAgLy8gcmV0dXJuIHRoZSB2YWx1ZSBvYmplY3Qgd2l0aCB0aGUgcmF3IHZhbHVlcyBmcm9tIE9MUyB0byBhIGNsaWVudFxuICAgICAgICAgIGlmIChhbGxvd0N1c3RvbVRlcm1zICYmIHgudmFsdWUuaXJpID09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlyaTogXCJcIixcbiAgICAgICAgICAgICAgbGFiZWw6IHgubGFiZWwsXG4gICAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IFwiXCIsXG4gICAgICAgICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgICAgICAgIHNob3J0X2Zvcm06IHgudmFsdWUuc2hvcnRfZm9ybSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHgudmFsdWUuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgIHNvdXJjZTogeC52YWx1ZS5zb3VyY2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAoeC52YWx1ZS5pcmkgPT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaXJpOiBcIlwiLFxuICAgICAgICAgICAgICBsYWJlbDogXCJcIixcbiAgICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogXCJcIixcbiAgICAgICAgICAgICAgdHlwZTogXCJcIixcbiAgICAgICAgICAgICAgc2hvcnRfZm9ybTogXCJcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgICAgICAgICAgIHNvdXJjZTogXCJcIixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlyaTogeC52YWx1ZS5pcmksXG4gICAgICAgICAgICAgIGxhYmVsOiB4LnZhbHVlLmxhYmVsLFxuICAgICAgICAgICAgICBvbnRvbG9neV9uYW1lOiB4LnZhbHVlLm9udG9sb2d5X25hbWUsXG4gICAgICAgICAgICAgIHR5cGU6IHgudmFsdWUudHlwZSxcbiAgICAgICAgICAgICAgc2hvcnRfZm9ybTogeC52YWx1ZS5zaG9ydF9mb3JtLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogeC52YWx1ZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgc291cmNlOiB4LnZhbHVlLnNvdXJjZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlzTW91bnRlZCA9IGZhbHNlO1xuICAgIH07XG4gIH0sIFtzZWxlY3RlZE9wdGlvbnNdKTtcblxuICBmdW5jdGlvbiBnZW5lcmF0ZURpc3BsYXlMYWJlbChpdGVtOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICBpdGVtPy5nZXRMYWJlbCgpID8/XG4gICAgICBcIi1cIiArIFwiIChcIiArIGl0ZW0/LmdldE9udG9sb2d5SWQoKT8udG9VcHBlckNhc2UoKSA/P1xuICAgICAgXCItXCIgKyBcIiBcIiArIGl0ZW0/LmdldFNob3J0Rm9ybSgpID8/XG4gICAgICBcIi1cIiArIFwiKVwiXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2hhbmdlSGFuZGxlcihvcHRpb25zOiBBcnJheTxhbnk+KTogdm9pZCB7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DcmVhdGVPcHRpb25IYW5kbGVyKHNlYXJjaFZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBuZXdPcHRpb24gPSB7XG4gICAgICBsYWJlbDogc2VhcmNoVmFsdWUsXG4gICAgICBrZXk6IHNlYXJjaFZhbHVlLFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgaXJpOiBcIlwiLFxuICAgICAgICBsYWJlbDogXCJcIixcbiAgICAgICAgb250b2xvZ3lfbmFtZTogXCJcIixcbiAgICAgICAgdHlwZTogXCJcIixcbiAgICAgICAgc2hvcnRfZm9ybTogXCJcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgICAgIHNvdXJjZTogXCJcIixcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHNldE9wdGlvbnMoWy4uLm9wdGlvbnMsIG5ld09wdGlvbl0pO1xuICAgIHNldFNlbGVjdGVkT3B0aW9ucyhcbiAgICAgIHNpbmdsZVNlbGVjdGlvbiA/IFtuZXdPcHRpb25dIDogWy4uLnNlbGVjdGVkT3B0aW9ucywgbmV3T3B0aW9uXVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0+XG4gICAgICA8RXVpQ29tYm9Cb3hcbiAgICAgICAgaXNDbGVhcmFibGVcbiAgICAgICAgYXJpYS1sYWJlbD1cInNlYXJjaEJhclwiXG4gICAgICAgIGZ1bGxXaWR0aD17dHJ1ZX1cbiAgICAgICAgey4uLnJlc3R9IC8vIGl0ZW1zIGFib3ZlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgY2xpZW50XG4gICAgICAgIGFzeW5jPXt0cnVlfVxuICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ1Rlcm1zIHx8IGlzTG9hZGluZ09uTW91bnR9XG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbj17c2luZ2xlU2VsZWN0aW9uID8geyBhc1BsYWluVGV4dDogdHJ1ZSB9IDogZmFsc2V9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlciA/IHBsYWNlaG9sZGVyIDogXCJTZWFyY2ggZm9yIGEgQ29uY2VwdFwifVxuICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICBzZWxlY3RlZE9wdGlvbnM9e3NlbGVjdGVkT3B0aW9uc31cbiAgICAgICAgb25TZWFyY2hDaGFuZ2U9e3NldFNlYXJjaFZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2VIYW5kbGVyfVxuICAgICAgICByZW5kZXJPcHRpb249e3JlbmRlck9wdGlvbn1cbiAgICAgICAgb25DcmVhdGVPcHRpb249e2FsbG93Q3VzdG9tVGVybXMgPyBvbkNyZWF0ZU9wdGlvbkhhbmRsZXIgOiB1bmRlZmluZWR9XG4gICAgICAgIHJvd0hlaWdodD17c2luZ2xlU3VnZ2VzdGlvblJvdyA/IDMwIDogNTB9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBdXRvY29tcGxldGUoXG4gIHByb3BzOiBBdXRvY29tcGxldGVXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBhbnksXG4gIGNhbGxiYWNrPzogKCkgPT4gdm9pZFxuKSB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRBdXRvY29tcGxldGVXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEF1dG9jb21wbGV0ZVdpZGdldChwcm9wczogQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIiBnbG9iYWxTdHlsZXM9e2ZhbHNlfT5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8QXV0b2NvbXBsZXRlV2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50PXtwcm9wcy5zZWxlY3Rpb25DaGFuZ2VkRXZlbnR9XG4gICAgICAgICAgcHJlc2VsZWN0ZWQ9e3Byb3BzLnByZXNlbGVjdGVkfVxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbj17cHJvcHMuc2luZ2xlU2VsZWN0aW9uIGFzIGJvb2xlYW59XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIGhhc1Nob3J0U2VsZWN0ZWRMYWJlbD17cHJvcHMuaGFzU2hvcnRTZWxlY3RlZExhYmVsfVxuICAgICAgICAgIGFsbG93Q3VzdG9tVGVybXM9e3Byb3BzLmFsbG93Q3VzdG9tVGVybXN9XG4gICAgICAgICAgdHM0bmZkaUdhdGV3YXk9e3Byb3BzLnRzNG5mZGlHYXRld2F5fVxuICAgICAgICAgIHNpbmdsZVN1Z2dlc3Rpb25Sb3c9e3Byb3BzLnNpbmdsZVN1Z2dlc3Rpb25Sb3d9XG4gICAgICAgICAgc2hvd0FwaVNvdXJjZT17cHJvcHMuc2hvd0FwaVNvdXJjZX1cbiAgICAgICAgICBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX1cbiAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBBdXRvY29tcGxldGVXaWRnZXQsIGNyZWF0ZUF1dG9jb21wbGV0ZSB9O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgfTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3Qge3RvU3RyaW5nfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7Z2V0UHJvdG90eXBlT2Z9ID0gT2JqZWN0O1xuXG5jb25zdCBraW5kT2YgPSAoY2FjaGUgPT4gdGhpbmcgPT4ge1xuICAgIGNvbnN0IHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZVxufVxuXG5jb25zdCB0eXBlT2ZUZXN0ID0gdHlwZSA9PiB0aGluZyA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VuZGVmaW5lZCA9IHR5cGVPZlRlc3QoJ3VuZGVmaW5lZCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIGlzRnVuY3Rpb24odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSB0aGluZyA9PiB0aGluZyA9PT0gdHJ1ZSB8fCB0aGluZyA9PT0gZmFsc2U7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoXG4gICAgICAgIChraW5kID0ga2luZE9mKHRoaW5nKSkgPT09ICdmb3JtZGF0YScgfHxcbiAgICAgICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgICAgICAoa2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJylcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbmNvbnN0IFtpc1JlYWRhYmxlU3RyZWFtLCBpc1JlcXVlc3QsIGlzUmVzcG9uc2UsIGlzSGVhZGVyc10gPSBbJ1JlYWRhYmxlU3RyZWFtJywgJ1JlcXVlc3QnLCAnUmVzcG9uc2UnLCAnSGVhZGVycyddLm1hcChraW5kT2ZUZXN0KTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHN0ci50cmltID9cbiAgc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5cyA9IGZhbHNlXVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuLCB7YWxsT3duS2V5cyA9IGZhbHNlfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBjb25zdCBrZXlzID0gYWxsT3duS2V5cyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICBsZXQgX2tleTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBfa2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoa2V5ID09PSBfa2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBfa2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgX2dsb2JhbCA9ICgoKSA9PiB7XG4gIC8qZXNsaW50IG5vLXVuZGVmOjAqL1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWxUaGlzO1xuICByZXR1cm4gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKVxufSkoKTtcblxuY29uc3QgaXNDb250ZXh0RGVmaW5lZCA9IChjb250ZXh0KSA9PiAhaXNVbmRlZmluZWQoY29udGV4dCkgJiYgY29udGV4dCAhPT0gX2dsb2JhbDtcblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKlxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICBjb25zdCB7Y2FzZWxlc3N9ID0gaXNDb250ZXh0RGVmaW5lZCh0aGlzKSAmJiB0aGlzIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICBjb25zdCB0YXJnZXRLZXkgPSBjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSB8fCBrZXk7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W3RhcmdldEtleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZShyZXN1bHRbdGFyZ2V0S2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYXJndW1lbnRzW2ldICYmIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXNdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmNvbnN0IGV4dGVuZCA9IChhLCBiLCB0aGlzQXJnLCB7YWxsT3duS2V5c309IHt9KSA9PiB7XG4gIGZvckVhY2goYiwgKHZhbCwga2V5KSA9PiB7XG4gICAgaWYgKHRoaXNBcmcgJiYgaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0sIHthbGxPd25LZXlzfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5jb25zdCBzdHJpcEJPTSA9IChjb250ZW50KSA9PiB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgJ3N1cGVyJywge1xuICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZVxuICB9KTtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbnxCb29sZWFufSBbZmlsdGVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgdG9GbGF0T2JqZWN0ID0gKHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyLCBwcm9wRmlsdGVyKSA9PiB7XG4gIGxldCBwcm9wcztcbiAgbGV0IGk7XG4gIGxldCBwcm9wO1xuICBjb25zdCBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIGlmIChzb3VyY2VPYmogPT0gbnVsbCkgcmV0dXJuIGRlc3RPYmo7XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBmaWx0ZXIgIT09IGZhbHNlICYmIGdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICpcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICpcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmNvbnN0IHRvQXJyYXkgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICBsZXQgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vKipcbiAqIENoZWNraW5nIGlmIHRoZSBVaW50OEFycmF5IGV4aXN0cyBhbmQgaWYgaXQgZG9lcywgaXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZVxuICogdGhpbmcgcGFzc2VkIGluIGlzIGFuIGluc3RhbmNlIG9mIFVpbnQ4QXJyYXlcbiAqXG4gKiBAcGFyYW0ge1R5cGVkQXJyYXl9XG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuY29uc3QgaXNUeXBlZEFycmF5ID0gKFR5cGVkQXJyYXkgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gdGhpbmcgPT4ge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBnZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbi8qKlxuICogRm9yIGVhY2ggZW50cnkgaW4gdGhlIG9iamVjdCwgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUga2V5IGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgZm9yRWFjaEVudHJ5ID0gKG9iaiwgZm4pID0+IHtcbiAgY29uc3QgZ2VuZXJhdG9yID0gb2JqICYmIG9ialtTeW1ib2wuaXRlcmF0b3JdO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gZ2VuZXJhdG9yLmNhbGwob2JqKTtcblxuICBsZXQgcmVzdWx0O1xuXG4gIHdoaWxlICgocmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpKSAmJiAhcmVzdWx0LmRvbmUpIHtcbiAgICBjb25zdCBwYWlyID0gcmVzdWx0LnZhbHVlO1xuICAgIGZuLmNhbGwob2JqLCBwYWlyWzBdLCBwYWlyWzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn1cblxuLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi9cbmNvbnN0IGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxuY29uc3QgdG9DYW1lbENhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxcbiAgICBmdW5jdGlvbiByZXBsYWNlcihtLCBwMSwgcDIpIHtcbiAgICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gICAgfVxuICApO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoKHtoYXNPd25Qcm9wZXJ0eX0pID0+IChvYmosIHByb3ApID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkoT2JqZWN0LnByb3RvdHlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGxldCByZXQ7XG4gICAgaWYgKChyZXQgPSByZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikpICE9PSBmYWxzZSkge1xuICAgICAgcmVkdWNlZERlc2NyaXB0b3JzW25hbWVdID0gcmV0IHx8IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59XG5cbi8qKlxuICogTWFrZXMgYWxsIG1ldGhvZHMgcmVhZC1vbmx5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKi9cblxuY29uc3QgZnJlZXplTWV0aG9kcyA9IChvYmopID0+IHtcbiAgcmVkdWNlRGVzY3JpcHRvcnMob2JqLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIC8vIHNraXAgcmVzdHJpY3RlZCBwcm9wcyBpbiBzdHJpY3QgbW9kZVxuICAgIGlmIChpc0Z1bmN0aW9uKG9iaikgJiYgWydhcmd1bWVudHMnLCAnY2FsbGVyJywgJ2NhbGxlZSddLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBvYmpbbmFtZV07XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm47XG5cbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBmYWxzZTtcblxuICAgIGlmICgnd3JpdGFibGUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIGRlc2NyaXB0b3Iud3JpdGFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICBkZXNjcmlwdG9yLnNldCA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0NhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFxcJycgKyBuYW1lICsgJ1xcJycpO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufVxuXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgaXNBcnJheShhcnJheU9yU3RyaW5nKSA/IGRlZmluZShhcnJheU9yU3RyaW5nKSA6IGRlZmluZShTdHJpbmcoYXJyYXlPclN0cmluZykuc3BsaXQoZGVsaW1pdGVyKSk7XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlID0gK3ZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufVxuXG5jb25zdCBBTFBIQSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidcblxuY29uc3QgRElHSVQgPSAnMDEyMzQ1Njc4OSc7XG5cbmNvbnN0IEFMUEhBQkVUID0ge1xuICBESUdJVCxcbiAgQUxQSEEsXG4gIEFMUEhBX0RJR0lUOiBBTFBIQSArIEFMUEhBLnRvVXBwZXJDYXNlKCkgKyBESUdJVFxufVxuXG5jb25zdCBnZW5lcmF0ZVN0cmluZyA9IChzaXplID0gMTYsIGFscGhhYmV0ID0gQUxQSEFCRVQuQUxQSEFfRElHSVQpID0+IHtcbiAgbGV0IHN0ciA9ICcnO1xuICBjb25zdCB7bGVuZ3RofSA9IGFscGhhYmV0O1xuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W01hdGgucmFuZG9tKCkgKiBsZW5ndGh8MF1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59XG5cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiYgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiYgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxuLy8gb3JpZ2luYWwgY29kZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0RpZ2l0YWxCcmFpbkpTL0F4aW9zUHJvbWlzZS9ibG9iLzE2ZGVhYjEzNzEwZWMwOTc3OTkyMjEzMWYzZmE1OTU0MzIwZjgzYWIvbGliL3V0aWxzLmpzI0wxMS1MMzRcblxuY29uc3QgX3NldEltbWVkaWF0ZSA9ICgoc2V0SW1tZWRpYXRlU3VwcG9ydGVkLCBwb3N0TWVzc2FnZVN1cHBvcnRlZCkgPT4ge1xuICBpZiAoc2V0SW1tZWRpYXRlU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIHNldEltbWVkaWF0ZTtcbiAgfVxuXG4gIHJldHVybiBwb3N0TWVzc2FnZVN1cHBvcnRlZCA/ICgodG9rZW4sIGNhbGxiYWNrcykgPT4ge1xuICAgIF9nbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKHtzb3VyY2UsIGRhdGF9KSA9PiB7XG4gICAgICBpZiAoc291cmNlID09PSBfZ2xvYmFsICYmIGRhdGEgPT09IHRva2VuKSB7XG4gICAgICAgIGNhbGxiYWNrcy5sZW5ndGggJiYgY2FsbGJhY2tzLnNoaWZ0KCkoKTtcbiAgICAgIH1cbiAgICB9LCBmYWxzZSk7XG5cbiAgICByZXR1cm4gKGNiKSA9PiB7XG4gICAgICBjYWxsYmFja3MucHVzaChjYik7XG4gICAgICBfZ2xvYmFsLnBvc3RNZXNzYWdlKHRva2VuLCBcIipcIik7XG4gICAgfVxuICB9KShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsIFtdKSA6IChjYikgPT4gc2V0VGltZW91dChjYik7XG59KShcbiAgdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgaXNGdW5jdGlvbihfZ2xvYmFsLnBvc3RNZXNzYWdlKVxuKTtcblxuY29uc3QgYXNhcCA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayAhPT0gJ3VuZGVmaW5lZCcgP1xuICBxdWV1ZU1pY3JvdGFzay5iaW5kKF9nbG9iYWwpIDogKCB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5uZXh0VGljayB8fCBfc2V0SW1tZWRpYXRlKTtcblxuLy8gKioqKioqKioqKioqKioqKioqKioqXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVxdWVzdCxcbiAgaXNSZXNwb25zZSxcbiAgaXNIZWFkZXJzLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBBTFBIQUJFVCxcbiAgZ2VuZXJhdGVTdHJpbmcsXG4gIGlzU3BlY0NvbXBsaWFudEZvcm0sXG4gIHRvSlNPTk9iamVjdCxcbiAgaXNBc3luY0ZuLFxuICBpc1RoZW5hYmxlLFxuICBzZXRJbW1lZGlhdGU6IF9zZXRJbW1lZGlhdGUsXG4gIGFzYXBcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG4gIH1cblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIGlmIChyZXNwb25zZSkge1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB0aGlzLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cyA/IHJlc3BvbnNlLnN0YXR1cyA6IG51bGw7XG4gIH1cbn1cblxudXRpbHMuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXNcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGNvZGUgPT4ge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykgPT4ge1xuICBjb25zdCBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0Vycm9yO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3RcbmV4cG9ydCBkZWZhdWx0IG51bGw7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbi8vIHRlbXBvcmFyeSBob3RmaXggdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlcyB1bnRpbCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBpcyByZWZhY3RvcmVkXG5pbXBvcnQgUGxhdGZvcm1Gb3JtRGF0YSBmcm9tICcuLi9wbGF0Zm9ybS9ub2RlL2NsYXNzZXMvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscy5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMudG9GbGF0T2JqZWN0KHV0aWxzLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChQbGF0Zm9ybUZvcm1EYXRhIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgIGRvdHM6IGZhbHNlLFxuICAgIGluZGV4ZXM6IGZhbHNlXG4gIH0sIGZhbHNlLCBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gICAgcmV0dXJuICF1dGlscy5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjb25zdCB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICBjb25zdCBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICBjb25zdCBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYjtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscy5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscy5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpXG4gICAgICAgICkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiAoaW5kZXhlcyA9PT0gbnVsbCA/IGtleSA6IGtleSArICdbXScpLFxuICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgY29uc3QgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9ICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiB2aXNpdG9yLmNhbGwoXG4gICAgICAgIGZvcm1EYXRhLCBlbCwgdXRpbHMuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvRm9ybURhdGE7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlKTtcbiAgfSA6IGVuY29kZTtcblxuICByZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uIGVhY2gocGFpcikge1xuICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgfSwgJycpLmpvaW4oJyYnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcblxuLyoqXG4gKiBJdCByZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjaGFyYWN0ZXJzIGA6YCwgYCRgLCBgLGAsIGArYCwgYFtgLCBhbmQgYF1gIHdpdGggdGhlaXJcbiAqIFVSSSBlbmNvZGVkIGNvdW50ZXJwYXJ0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez8ob2JqZWN0fEZ1bmN0aW9uKX0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBpZiAodXRpbHMuaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBzZXJpYWxpemU6IG9wdGlvbnNcbiAgICB9O1xuICB9IFxuXG4gIGNvbnN0IHNlcmlhbGl6ZUZuID0gb3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZTtcblxuICBsZXQgc2VyaWFsaXplZFBhcmFtcztcblxuICBpZiAoc2VyaWFsaXplRm4pIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gc2VyaWFsaXplRm4ocGFyYW1zLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gdXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgICAgZm4oaCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBGb3JtRGF0YSA6IG51bGw7XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyA/IEJsb2IgOiBudWxsXG4iLCAiaW1wb3J0IFVSTFNlYXJjaFBhcmFtcyBmcm9tICcuL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzJ1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJy4vY2xhc3Nlcy9Gb3JtRGF0YS5qcydcbmltcG9ydCBCbG9iIGZyb20gJy4vY2xhc3Nlcy9CbG9iLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtcyxcbiAgICBGb3JtRGF0YSxcbiAgICBCbG9iXG4gIH0sXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddXG59O1xuIiwgImNvbnN0IGhhc0Jyb3dzZXJFbnYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG5jb25zdCBfbmF2aWdhdG9yID0gdHlwZW9mIG5hdmlnYXRvciA9PT0gJ29iamVjdCcgJiYgbmF2aWdhdG9yIHx8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlckVudiA9IGhhc0Jyb3dzZXJFbnYgJiZcbiAgKCFfbmF2aWdhdG9yIHx8IFsnUmVhY3ROYXRpdmUnLCAnTmF0aXZlU2NyaXB0JywgJ05TJ10uaW5kZXhPZihfbmF2aWdhdG9yLnByb2R1Y3QpIDwgMCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmNvbnN0IG9yaWdpbiA9IGhhc0Jyb3dzZXJFbnYgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgfHwgJ2h0dHA6Ly9sb2NhbGhvc3QnO1xuXG5leHBvcnQge1xuICBoYXNCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudixcbiAgX25hdmlnYXRvciBhcyBuYXZpZ2F0b3IsXG4gIG9yaWdpblxufVxuIiwgImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuL25vZGUvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi9jb21tb24vdXRpbHMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIC4uLnV0aWxzLFxuICAuLi5wbGF0Zm9ybVxufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIE9iamVjdC5hc3NpZ24oe1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLCBuYW1lKS5tYXAobWF0Y2ggPT4ge1xuICAgIHJldHVybiBtYXRjaFswXSA9PT0gJ1tdJyA/ICcnIDogbWF0Y2hbMV0gfHwgbWF0Y2hbMF07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gYXJyYXkgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNvbnZlcnQgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBhcyB0aGUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9PYmplY3QoYXJyKSB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXJyKTtcbiAgbGV0IGk7XG4gIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICBsZXQga2V5O1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIG9ialtrZXldID0gYXJyW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIEZvcm1EYXRhIG9iamVjdCBhbmQgcmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3Q8c3RyaW5nLCBhbnk+IHwgbnVsbH0gVGhlIGNvbnZlcnRlZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGZvcm1EYXRhVG9KU09OKGZvcm1EYXRhKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0LCBpbmRleCkge1xuICAgIGxldCBuYW1lID0gcGF0aFtpbmRleCsrXTtcblxuICAgIGlmIChuYW1lID09PSAnX19wcm90b19fJykgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBOdW1iZXIuaXNGaW5pdGUoK25hbWUpO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID49IHBhdGgubGVuZ3RoO1xuICAgIG5hbWUgPSAhbmFtZSAmJiB1dGlscy5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscy5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscy5pc09iamVjdCh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldFtuYW1lXSwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiB1dGlscy5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscy5pc0Z1bmN0aW9uKGZvcm1EYXRhLmVudHJpZXMpKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoRW50cnkoZm9ybURhdGEsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JtRGF0YVRvSlNPTjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4vdHJhbnNpdGlvbmFsLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4uL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgdG9VUkxFbmNvZGVkRm9ybSBmcm9tICcuLi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogWyd4aHInLCAnaHR0cCcsICdmZXRjaCddLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSB8fCAnJztcbiAgICBjb25zdCBoYXNKU09OQ29udGVudFR5cGUgPSBjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi9qc29uJykgPiAtMTtcbiAgICBjb25zdCBpc09iamVjdFBheWxvYWQgPSB1dGlscy5pc09iamVjdChkYXRhKTtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMuaXNIVE1MRm9ybShkYXRhKSkge1xuICAgICAgZGF0YSA9IG5ldyBGb3JtRGF0YShkYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0Zvcm1EYXRhID0gdXRpbHMuaXNGb3JtRGF0YShkYXRhKTtcblxuICAgIGlmIChpc0Zvcm1EYXRhKSB7XG4gICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04JywgZmFsc2UpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgaXNGaWxlTGlzdDtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQpIHtcbiAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzLmlzRmlsZUxpc3QoZGF0YSkpIHx8IGNvbnRlbnRUeXBlLmluZGV4T2YoJ211bHRpcGFydC9mb3JtLWRhdGEnKSA+IC0xKSB7XG4gICAgICAgIGNvbnN0IF9Gb3JtRGF0YSA9IHRoaXMuZW52ICYmIHRoaXMuZW52LkZvcm1EYXRhO1xuXG4gICAgICAgIHJldHVybiB0b0Zvcm1EYXRhKFxuICAgICAgICAgIGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsXG4gICAgICAgICAgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSxcbiAgICAgICAgICB0aGlzLmZvcm1TZXJpYWxpemVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBoYXNKU09OQ29udGVudFR5cGUgKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi9qc29uJywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgY29uc3QgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIGNvbnN0IGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICBjb25zdCBKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmICh1dGlscy5pc1Jlc3BvbnNlKGRhdGEpIHx8IHV0aWxzLmlzUmVhZGFibGVTdHJlYW0oZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmIChkYXRhICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXRoaXMucmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKSkge1xuICAgICAgY29uc3Qgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgICAgY29uc3Qgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2JcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgKG1ldGhvZCkgPT4ge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0cztcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscy50b09iamVjdFNldChbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXSk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByYXdIZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5leHBvcnQgZGVmYXVsdCByYXdIZWFkZXJzID0+IHtcbiAgY29uc3QgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIHJhd0hlYWRlcnMgJiYgcmF3SGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpO1xuXG4gICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0pIHtcbiAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBbdmFsXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBwYXJzZUhlYWRlcnMgZnJvbSAnLi4vaGVscGVycy9wYXJzZUhlYWRlcnMuanMnO1xuXG5jb25zdCAkaW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUb2tlbnMoc3RyKSB7XG4gIGNvbnN0IHRva2VucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IHRva2Vuc1JFID0gLyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZztcbiAgbGV0IG1hdGNoO1xuXG4gIHdoaWxlICgobWF0Y2ggPSB0b2tlbnNSRS5leGVjKHN0cikpKSB7XG4gICAgdG9rZW5zW21hdGNoWzFdXSA9IG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuY29uc3QgaXNWYWxpZEhlYWRlck5hbWUgPSAoc3RyKSA9PiAvXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KHN0ci50cmltKCkpO1xuXG5mdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gIGlmICh1dGlscy5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscy5pc1N0cmluZyhmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICBpZiAodXRpbHMuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24oYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jbGFzcyBBeGlvc0hlYWRlcnMge1xuICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XG4gICAgaGVhZGVycyAmJiB0aGlzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHNldChoZWFkZXIsIHZhbHVlT3JSZXdyaXRlLCByZXdyaXRlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFsSGVhZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBsSGVhZGVyKTtcblxuICAgICAgaWYoIWtleSB8fCBzZWxmW2tleV0gPT09IHVuZGVmaW5lZCB8fCBfcmV3cml0ZSA9PT0gdHJ1ZSB8fCAoX3Jld3JpdGUgPT09IHVuZGVmaW5lZCAmJiBzZWxmW2tleV0gIT09IGZhbHNlKSkge1xuICAgICAgICBzZWxmW2tleSB8fCBfaGVhZGVyXSA9IG5vcm1hbGl6ZVZhbHVlKF92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0SGVhZGVycyA9IChoZWFkZXJzLCBfcmV3cml0ZSkgPT5cbiAgICAgIHV0aWxzLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KGhlYWRlcikgfHwgaGVhZGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgc2V0SGVhZGVycyhoZWFkZXIsIHZhbHVlT3JSZXdyaXRlKVxuICAgIH0gZWxzZSBpZih1dGlscy5pc1N0cmluZyhoZWFkZXIpICYmIChoZWFkZXIgPSBoZWFkZXIudHJpbSgpKSAmJiAhaXNWYWxpZEhlYWRlck5hbWUoaGVhZGVyKSkge1xuICAgICAgc2V0SGVhZGVycyhwYXJzZUhlYWRlcnMoaGVhZGVyKSwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNIZWFkZXJzKGhlYWRlcikpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGhlYWRlci5lbnRyaWVzKCkpIHtcbiAgICAgICAgc2V0SGVhZGVyKHZhbHVlLCBrZXksIHJld3JpdGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXIgIT0gbnVsbCAmJiBzZXRIZWFkZXIodmFsdWVPclJld3JpdGUsIGhlYWRlciwgcmV3cml0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQoaGVhZGVyLCBwYXJzZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc1JlZ0V4cChwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyLmZvckVhY2goZGVsZXRlSGVhZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlSGVhZGVyKGhlYWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBjbGVhcihtYXRjaGVyKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICAgIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZighbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyLCB0cnVlKSkge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZShmb3JtYXQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09IGZhbHNlICYmIChvYmpbaGVhZGVyXSA9IGFzU3RyaW5ncyAmJiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9ICh0aGlzWyRpbnRlcm5hbHNdID0ge1xuICAgICAgYWNjZXNzb3JzOiB7fVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbJ0NvbnRlbnQtVHlwZScsICdDb250ZW50LUxlbmd0aCcsICdBY2NlcHQnLCAnQWNjZXB0LUVuY29kaW5nJywgJ1VzZXItQWdlbnQnLCAnQXV0aG9yaXphdGlvbiddKTtcblxuLy8gcmVzZXJ2ZWQgbmFtZXMgaG90Zml4XG51dGlscy5yZWR1Y2VEZXNjcmlwdG9ycyhBeGlvc0hlYWRlcnMucHJvdG90eXBlLCAoe3ZhbHVlfSwga2V5KSA9PiB7XG4gIGxldCBtYXBwZWQgPSBrZXlbMF0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTsgLy8gbWFwIGBzZXRgID0+IGBTZXRgXG4gIHJldHVybiB7XG4gICAgZ2V0OiAoKSA9PiB2YWx1ZSxcbiAgICBzZXQoaGVhZGVyVmFsdWUpIHtcbiAgICAgIHRoaXNbbWFwcGVkXSA9IGhlYWRlclZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnV0aWxzLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NIZWFkZXJzO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcGFyYW0gez9PYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZm5zLCByZXNwb25zZSkge1xuICBjb25zdCBjb25maWcgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICBjb25zdCBjb250ZXh0ID0gcmVzcG9uc2UgfHwgY29uZmlnO1xuICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29udGV4dC5oZWFkZXJzKTtcbiAgbGV0IGRhdGEgPSBjb250ZXh0LmRhdGE7XG5cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBoZWFkZXJzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xufVxuXG51dGlscy5pbmhlcml0cyhDYW5jZWxlZEVycm9yLCBBeGlvc0Vycm9yLCB7XG4gIF9fQ0FOQ0VMX186IHRydWVcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxlZEVycm9yO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9BeGlvc0Vycm9yLmpzJztcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICBbQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihyZXNwb25zZS5zdGF0dXMgLyAxMDApIC0gNF0sXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoYnl0ZXNDb3VudCAqIDEwMDAgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzcGVlZG9tZXRlcjtcbiIsICIvKipcbiAqIFRocm90dGxlIGRlY29yYXRvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7TnVtYmVyfSBmcmVxXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGUoZm4sIGZyZXEpIHtcbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGxldCB0aHJlc2hvbGQgPSAxMDAwIC8gZnJlcTtcbiAgbGV0IGxhc3RBcmdzO1xuICBsZXQgdGltZXI7XG5cbiAgY29uc3QgaW52b2tlID0gKGFyZ3MsIG5vdyA9IERhdGUubm93KCkpID0+IHtcbiAgICB0aW1lc3RhbXAgPSBub3c7XG4gICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gIH1cblxuICBjb25zdCB0aHJvdHRsZWQgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcGFzc2VkID0gbm93IC0gdGltZXN0YW1wO1xuICAgIGlmICggcGFzc2VkID49IHRocmVzaG9sZCkge1xuICAgICAgaW52b2tlKGFyZ3MsIG5vdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RBcmdzID0gYXJncztcbiAgICAgIGlmICghdGltZXIpIHtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgICAgaW52b2tlKGxhc3RBcmdzKVxuICAgICAgICB9LCB0aHJlc2hvbGQgLSBwYXNzZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4gbGFzdEFyZ3MgJiYgaW52b2tlKGxhc3RBcmdzKTtcblxuICByZXR1cm4gW3Rocm90dGxlZCwgZmx1c2hdO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0aHJvdHRsZTtcbiIsICJpbXBvcnQgc3BlZWRvbWV0ZXIgZnJvbSBcIi4vc3BlZWRvbWV0ZXIuanNcIjtcbmltcG9ydCB0aHJvdHRsZSBmcm9tIFwiLi90aHJvdHRsZS5qc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlscy5qc1wiO1xuXG5leHBvcnQgY29uc3QgcHJvZ3Jlc3NFdmVudFJlZHVjZXIgPSAobGlzdGVuZXIsIGlzRG93bmxvYWRTdHJlYW0sIGZyZXEgPSAzKSA9PiB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIHRocm90dGxlKGUgPT4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gbG9hZGVkIC0gYnl0ZXNOb3RpZmllZDtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuICAgIGNvbnN0IGluUmFuZ2UgPSBsb2FkZWQgPD0gdG90YWw7XG5cbiAgICBieXRlc05vdGlmaWVkID0gbG9hZGVkO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gKGxvYWRlZCAvIHRvdGFsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGUsXG4gICAgICBsZW5ndGhDb21wdXRhYmxlOiB0b3RhbCAhPSBudWxsLFxuICAgICAgW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddOiB0cnVlXG4gICAgfTtcblxuICAgIGxpc3RlbmVyKGRhdGEpO1xuICB9LCBmcmVxKTtcbn1cblxuZXhwb3J0IGNvbnN0IHByb2dyZXNzRXZlbnREZWNvcmF0b3IgPSAodG90YWwsIHRocm90dGxlZCkgPT4ge1xuICBjb25zdCBsZW5ndGhDb21wdXRhYmxlID0gdG90YWwgIT0gbnVsbDtcblxuICByZXR1cm4gWyhsb2FkZWQpID0+IHRocm90dGxlZFswXSh7XG4gICAgbGVuZ3RoQ29tcHV0YWJsZSxcbiAgICB0b3RhbCxcbiAgICBsb2FkZWRcbiAgfSksIHRocm90dGxlZFsxXV07XG59XG5cbmV4cG9ydCBjb25zdCBhc3luY0RlY29yYXRvciA9IChmbikgPT4gKC4uLmFyZ3MpID0+IHV0aWxzLmFzYXAoKCkgPT4gZm4oLi4uYXJncykpO1xuIiwgImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/ICgob3JpZ2luLCBpc01TSUUpID0+ICh1cmwpID0+IHtcbiAgdXJsID0gbmV3IFVSTCh1cmwsIHBsYXRmb3JtLm9yaWdpbik7XG5cbiAgcmV0dXJuIChcbiAgICBvcmlnaW4ucHJvdG9jb2wgPT09IHVybC5wcm90b2NvbCAmJlxuICAgIG9yaWdpbi5ob3N0ID09PSB1cmwuaG9zdCAmJlxuICAgIChpc01TSUUgfHwgb3JpZ2luLnBvcnQgPT09IHVybC5wb3J0KVxuICApO1xufSkoXG4gIG5ldyBVUkwocGxhdGZvcm0ub3JpZ2luKSxcbiAgcGxhdGZvcm0ubmF2aWdhdG9yICYmIC8obXNpZXx0cmlkZW50KS9pLnRlc3QocGxhdGZvcm0ubmF2aWdhdG9yLnVzZXJBZ2VudClcbikgOiAoKSA9PiB0cnVlO1xuIiwgImltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gIHtcbiAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgIGNvbnN0IGNvb2tpZSA9IFtuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKV07XG5cbiAgICAgIHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpICYmIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscy5pc1N0cmluZyhkb21haW4pICYmIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG5cbiAgICAgIHNlY3VyZSA9PT0gdHJ1ZSAmJiBjb29raWUucHVzaCgnc2VjdXJlJyk7XG5cbiAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgIH0sXG5cbiAgICByZWFkKG5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgfSxcblxuICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgIH1cbiAgfVxuXG4gIDpcblxuICAvLyBOb24tc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIHtcbiAgICB3cml0ZSgpIHt9LFxuICAgIHJlYWQoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZSgpIHt9XG4gIH07XG5cbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGlzQWJzb2x1dGVVUkwgZnJvbSAnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMLmpzJztcbmltcG9ydCBjb21iaW5lVVJMcyBmcm9tICcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4vQXhpb3NIZWFkZXJzLmpzXCI7XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMgPyB7IC4uLnRoaW5nIH0gOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIHByb3AsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZS5jYWxsKHtjYXNlbGVzc30sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBwcm9wICwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgcHJvcCAsIGNhc2VsZXNzKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSwgcHJvcCAsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYiAsIHByb3ApID0+IG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYikscHJvcCwgdHJ1ZSlcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZzEsIGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG4iLCAiaW1wb3J0IHBsYXRmb3JtIGZyb20gXCIuLi9wbGF0Zm9ybS9pbmRleC5qc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlscy5qc1wiO1xuaW1wb3J0IGlzVVJMU2FtZU9yaWdpbiBmcm9tIFwiLi9pc1VSTFNhbWVPcmlnaW4uanNcIjtcbmltcG9ydCBjb29raWVzIGZyb20gXCIuL2Nvb2tpZXMuanNcIjtcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gXCIuLi9jb3JlL2J1aWxkRnVsbFBhdGguanNcIjtcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tIFwiLi4vY29yZS9tZXJnZUNvbmZpZy5qc1wiO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi4vY29yZS9BeGlvc0hlYWRlcnMuanNcIjtcbmltcG9ydCBidWlsZFVSTCBmcm9tIFwiLi9idWlsZFVSTC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IG5ld0NvbmZpZyA9IG1lcmdlQ29uZmlnKHt9LCBjb25maWcpO1xuXG4gIGxldCB7ZGF0YSwgd2l0aFhTUkZUb2tlbiwgeHNyZkhlYWRlck5hbWUsIHhzcmZDb29raWVOYW1lLCBoZWFkZXJzLCBhdXRofSA9IG5ld0NvbmZpZztcblxuICBuZXdDb25maWcuaGVhZGVycyA9IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShoZWFkZXJzKTtcblxuICBuZXdDb25maWcudXJsID0gYnVpbGRVUkwoYnVpbGRGdWxsUGF0aChuZXdDb25maWcuYmFzZVVSTCwgbmV3Q29uZmlnLnVybCksIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcblxuICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gIGlmIChhdXRoKSB7XG4gICAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArXG4gICAgICBidG9hKChhdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChhdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgucGFzc3dvcmQpKSA6ICcnKSlcbiAgICApO1xuICB9XG5cbiAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpKSB7XG4gICAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiB8fCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUodW5kZWZpbmVkKTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH0gZWxzZSBpZiAoKGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpKSAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICBjb25zdCBbdHlwZSwgLi4udG9rZW5zXSA9IGNvbnRlbnRUeXBlID8gY29udGVudFR5cGUuc3BsaXQoJzsnKS5tYXAodG9rZW4gPT4gdG9rZW4udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikgOiBbXTtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoW3R5cGUgfHwgJ211bHRpcGFydC9mb3JtLWRhdGEnLCAuLi50b2tlbnNdLmpvaW4oJzsgJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB4c3JmIGhlYWRlclxuICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cblxuICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgd2l0aFhTUkZUb2tlbiAmJiB1dGlscy5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihuZXdDb25maWcpKTtcblxuICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4obmV3Q29uZmlnLnVybCkpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IHhzcmZIZWFkZXJOYW1lICYmIHhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZCh4c3JmQ29va2llTmFtZSk7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgaGVhZGVycy5zZXQoeHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0NvbmZpZztcbn1cblxuIiwgImltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBzZXR0bGUgZnJvbSAnLi8uLi9jb3JlL3NldHRsZS5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgcGFyc2VQcm90b2NvbCBmcm9tICcuLi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IHtwcm9ncmVzc0V2ZW50UmVkdWNlcn0gZnJvbSAnLi4vaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyc7XG5pbXBvcnQgcmVzb2x2ZUNvbmZpZyBmcm9tIFwiLi4vaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzXCI7XG5cbmNvbnN0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCA9IHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCAmJiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgY29uc3QgX2NvbmZpZyA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBfY29uZmlnLmRhdGE7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShfY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgIGxldCB7cmVzcG9uc2VUeXBlLCBvblVwbG9hZFByb2dyZXNzLCBvbkRvd25sb2FkUHJvZ3Jlc3N9ID0gX2NvbmZpZztcbiAgICBsZXQgb25DYW5jZWxlZDtcbiAgICBsZXQgdXBsb2FkVGhyb3R0bGVkLCBkb3dubG9hZFRocm90dGxlZDtcbiAgICBsZXQgZmx1c2hVcGxvYWQsIGZsdXNoRG93bmxvYWQ7XG5cbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZmx1c2hVcGxvYWQgJiYgZmx1c2hVcGxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG4gICAgICBmbHVzaERvd25sb2FkICYmIGZsdXNoRG93bmxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcblxuICAgICAgX2NvbmZpZy5zaWduYWwgJiYgX2NvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgcmVxdWVzdC5vcGVuKF9jb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIF9jb25maWcudXJsLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gX2NvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShcbiAgICAgICAgJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCAmJiByZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBfY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gX2NvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgcmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShudWxsKTtcblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLnRvSlNPTigpLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChfY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFfY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBfY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKG9uRG93bmxvYWRQcm9ncmVzcykge1xuICAgICAgKFtkb3dubG9hZFRocm90dGxlZCwgZmx1c2hEb3dubG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvbkRvd25sb2FkUHJvZ3Jlc3MsIHRydWUpKTtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBkb3dubG9hZFRocm90dGxlZCk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAob25VcGxvYWRQcm9ncmVzcyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgKFt1cGxvYWRUaHJvdHRsZWQsIGZsdXNoVXBsb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uVXBsb2FkUHJvZ3Jlc3MpKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB1cGxvYWRUaHJvdHRsZWQpO1xuXG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZmx1c2hVcGxvYWQpO1xuICAgIH1cblxuICAgIGlmIChfY29uZmlnLmNhbmNlbFRva2VuIHx8IF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGNhbmNlbCA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIGlmIChfY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBfY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogX2NvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woX2NvbmZpZy51cmwpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIHBsYXRmb3JtLnByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tIFwiLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanNcIjtcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbmNvbnN0IGNvbXBvc2VTaWduYWxzID0gKHNpZ25hbHMsIHRpbWVvdXQpID0+IHtcbiAgY29uc3Qge2xlbmd0aH0gPSAoc2lnbmFscyA9IHNpZ25hbHMgPyBzaWduYWxzLmZpbHRlcihCb29sZWFuKSA6IFtdKTtcblxuICBpZiAodGltZW91dCB8fCBsZW5ndGgpIHtcbiAgICBsZXQgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGxldCBhYm9ydGVkO1xuXG4gICAgY29uc3Qgb25hYm9ydCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIGlmICghYWJvcnRlZCkge1xuICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY29uc3QgZXJyID0gcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24gOiB0aGlzLnJlYXNvbjtcbiAgICAgICAgY29udHJvbGxlci5hYm9ydChlcnIgaW5zdGFuY2VvZiBBeGlvc0Vycm9yID8gZXJyIDogbmV3IENhbmNlbGVkRXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0aW1lciA9IHRpbWVvdXQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBvbmFib3J0KG5ldyBBeGlvc0Vycm9yKGB0aW1lb3V0ICR7dGltZW91dH0gb2YgbXMgZXhjZWVkZWRgLCBBeGlvc0Vycm9yLkVUSU1FRE9VVCkpXG4gICAgfSwgdGltZW91dClcblxuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgICAgaWYgKHNpZ25hbHMpIHtcbiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICBzaWduYWxzLmZvckVhY2goc2lnbmFsID0+IHtcbiAgICAgICAgICBzaWduYWwudW5zdWJzY3JpYmUgPyBzaWduYWwudW5zdWJzY3JpYmUob25hYm9ydCkgOiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNpZ25hbHMgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSk7XG5cbiAgICBjb25zdCB7c2lnbmFsfSA9IGNvbnRyb2xsZXI7XG5cbiAgICBzaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB1dGlscy5hc2FwKHVuc3Vic2NyaWJlKTtcblxuICAgIHJldHVybiBzaWduYWw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZVNpZ25hbHM7XG4iLCAiXG5leHBvcnQgY29uc3Qgc3RyZWFtQ2h1bmsgPSBmdW5jdGlvbiogKGNodW5rLCBjaHVua1NpemUpIHtcbiAgbGV0IGxlbiA9IGNodW5rLmJ5dGVMZW5ndGg7XG5cbiAgaWYgKCFjaHVua1NpemUgfHwgbGVuIDwgY2h1bmtTaXplKSB7XG4gICAgeWllbGQgY2h1bms7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBlbmQ7XG5cbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGVuZCA9IHBvcyArIGNodW5rU2l6ZTtcbiAgICB5aWVsZCBjaHVuay5zbGljZShwb3MsIGVuZCk7XG4gICAgcG9zID0gZW5kO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCByZWFkQnl0ZXMgPSBhc3luYyBmdW5jdGlvbiogKGl0ZXJhYmxlLCBjaHVua1NpemUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiByZWFkU3RyZWFtKGl0ZXJhYmxlKSkge1xuICAgIHlpZWxkKiBzdHJlYW1DaHVuayhjaHVuaywgY2h1bmtTaXplKTtcbiAgfVxufVxuXG5jb25zdCByZWFkU3RyZWFtID0gYXN5bmMgZnVuY3Rpb24qIChzdHJlYW0pIHtcbiAgaWYgKHN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICB5aWVsZCogc3RyZWFtO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgeWllbGQgdmFsdWU7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJlYWRlci5jYW5jZWwoKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdHJhY2tTdHJlYW0gPSAoc3RyZWFtLCBjaHVua1NpemUsIG9uUHJvZ3Jlc3MsIG9uRmluaXNoKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gcmVhZEJ5dGVzKHN0cmVhbSwgY2h1bmtTaXplKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgZG9uZTtcbiAgbGV0IF9vbkZpbmlzaCA9IChlKSA9PiB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIG9uRmluaXNoICYmIG9uRmluaXNoKGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgX29uRmluaXNoKCk7XG4gICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsZW4gPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICBpZiAob25Qcm9ncmVzcykge1xuICAgICAgICAgIGxldCBsb2FkZWRCeXRlcyA9IGJ5dGVzICs9IGxlbjtcbiAgICAgICAgICBvblByb2dyZXNzKGxvYWRlZEJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfb25GaW5pc2goZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2FuY2VsKHJlYXNvbikge1xuICAgICAgX29uRmluaXNoKHJlYXNvbik7XG4gICAgICByZXR1cm4gaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgfVxuICB9LCB7XG4gICAgaGlnaFdhdGVyTWFyazogMlxuICB9KVxufVxuIiwgImltcG9ydCBwbGF0Zm9ybSBmcm9tIFwiLi4vcGxhdGZvcm0vaW5kZXguanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcbmltcG9ydCBjb21wb3NlU2lnbmFscyBmcm9tIFwiLi4vaGVscGVycy9jb21wb3NlU2lnbmFscy5qc1wiO1xuaW1wb3J0IHt0cmFja1N0cmVhbX0gZnJvbSBcIi4uL2hlbHBlcnMvdHJhY2tTdHJlYW0uanNcIjtcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQge3Byb2dyZXNzRXZlbnRSZWR1Y2VyLCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yLCBhc3luY0RlY29yYXRvcn0gZnJvbSBcIi4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanNcIjtcbmltcG9ydCByZXNvbHZlQ29uZmlnIGZyb20gXCIuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanNcIjtcbmltcG9ydCBzZXR0bGUgZnJvbSBcIi4uL2NvcmUvc2V0dGxlLmpzXCI7XG5cbmNvbnN0IGlzRmV0Y2hTdXBwb3J0ZWQgPSB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlcXVlc3QgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlc3BvbnNlID09PSAnZnVuY3Rpb24nO1xuY29uc3QgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgdHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSAnZnVuY3Rpb24nO1xuXG4vLyB1c2VkIG9ubHkgaW5zaWRlIHRoZSBmZXRjaCBhZGFwdGVyXG5jb25zdCBlbmNvZGVUZXh0ID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAodHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nID9cbiAgICAoKGVuY29kZXIpID0+IChzdHIpID0+IGVuY29kZXIuZW5jb2RlKHN0cikpKG5ldyBUZXh0RW5jb2RlcigpKSA6XG4gICAgYXN5bmMgKHN0cikgPT4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKHN0cikuYXJyYXlCdWZmZXIoKSlcbik7XG5cbmNvbnN0IHRlc3QgPSAoZm4sIC4uLmFyZ3MpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFmbiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmNvbnN0IHN1cHBvcnRzUmVxdWVzdFN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiYgdGVzdCgoKSA9PiB7XG4gIGxldCBkdXBsZXhBY2Nlc3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGhhc0NvbnRlbnRUeXBlID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgYm9keTogbmV3IFJlYWRhYmxlU3RyZWFtKCksXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgZ2V0IGR1cGxleCgpIHtcbiAgICAgIGR1cGxleEFjY2Vzc2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiAnaGFsZic7XG4gICAgfSxcbiAgfSkuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpO1xuXG4gIHJldHVybiBkdXBsZXhBY2Nlc3NlZCAmJiAhaGFzQ29udGVudFR5cGU7XG59KTtcblxuY29uc3QgREVGQVVMVF9DSFVOS19TSVpFID0gNjQgKiAxMDI0O1xuXG5jb25zdCBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJlxuICB0ZXN0KCgpID0+IHV0aWxzLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KSk7XG5cblxuY29uc3QgcmVzb2x2ZXJzID0ge1xuICBzdHJlYW06IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKChyZXMpID0+IHJlcy5ib2R5KVxufTtcblxuaXNGZXRjaFN1cHBvcnRlZCAmJiAoKChyZXMpID0+IHtcbiAgWyd0ZXh0JywgJ2FycmF5QnVmZmVyJywgJ2Jsb2InLCAnZm9ybURhdGEnLCAnc3RyZWFtJ10uZm9yRWFjaCh0eXBlID0+IHtcbiAgICAhcmVzb2x2ZXJzW3R5cGVdICYmIChyZXNvbHZlcnNbdHlwZV0gPSB1dGlscy5pc0Z1bmN0aW9uKHJlc1t0eXBlXSkgPyAocmVzKSA9PiByZXNbdHlwZV0oKSA6XG4gICAgICAoXywgY29uZmlnKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBSZXNwb25zZSB0eXBlICcke3R5cGV9JyBpcyBub3Qgc3VwcG9ydGVkYCwgQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQsIGNvbmZpZyk7XG4gICAgICB9KVxuICB9KTtcbn0pKG5ldyBSZXNwb25zZSkpO1xuXG5jb25zdCBnZXRCb2R5TGVuZ3RoID0gYXN5bmMgKGJvZHkpID0+IHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYodXRpbHMuaXNCbG9iKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZTtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oYm9keSkpIHtcbiAgICBjb25zdCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5LFxuICAgIH0pO1xuICAgIHJldHVybiAoYXdhaXQgX3JlcXVlc3QuYXJyYXlCdWZmZXIoKSkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpIHx8IHV0aWxzLmlzQXJyYXlCdWZmZXIoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoYm9keSkpIHtcbiAgICBib2R5ID0gYm9keSArICcnO1xuICB9XG5cbiAgaWYodXRpbHMuaXNTdHJpbmcoYm9keSkpIHtcbiAgICByZXR1cm4gKGF3YWl0IGVuY29kZVRleHQoYm9keSkpLmJ5dGVMZW5ndGg7XG4gIH1cbn1cblxuY29uc3QgcmVzb2x2ZUJvZHlMZW5ndGggPSBhc3luYyAoaGVhZGVycywgYm9keSkgPT4ge1xuICBjb25zdCBsZW5ndGggPSB1dGlscy50b0Zpbml0ZU51bWJlcihoZWFkZXJzLmdldENvbnRlbnRMZW5ndGgoKSk7XG5cbiAgcmV0dXJuIGxlbmd0aCA9PSBudWxsID8gZ2V0Qm9keUxlbmd0aChib2R5KSA6IGxlbmd0aDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNGZXRjaFN1cHBvcnRlZCAmJiAoYXN5bmMgKGNvbmZpZykgPT4ge1xuICBsZXQge1xuICAgIHVybCxcbiAgICBtZXRob2QsXG4gICAgZGF0YSxcbiAgICBzaWduYWwsXG4gICAgY2FuY2VsVG9rZW4sXG4gICAgdGltZW91dCxcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgb25VcGxvYWRQcm9ncmVzcyxcbiAgICByZXNwb25zZVR5cGUsXG4gICAgaGVhZGVycyxcbiAgICB3aXRoQ3JlZGVudGlhbHMgPSAnc2FtZS1vcmlnaW4nLFxuICAgIGZldGNoT3B0aW9uc1xuICB9ID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuXG4gIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSA/IChyZXNwb25zZVR5cGUgKyAnJykudG9Mb3dlckNhc2UoKSA6ICd0ZXh0JztcblxuICBsZXQgY29tcG9zZWRTaWduYWwgPSBjb21wb3NlU2lnbmFscyhbc2lnbmFsLCBjYW5jZWxUb2tlbiAmJiBjYW5jZWxUb2tlbi50b0Fib3J0U2lnbmFsKCldLCB0aW1lb3V0KTtcblxuICBsZXQgcmVxdWVzdDtcblxuICBjb25zdCB1bnN1YnNjcmliZSA9IGNvbXBvc2VkU2lnbmFsICYmIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlICYmICgoKSA9PiB7XG4gICAgICBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSgpO1xuICB9KTtcblxuICBsZXQgcmVxdWVzdENvbnRlbnRMZW5ndGg7XG5cbiAgdHJ5IHtcbiAgICBpZiAoXG4gICAgICBvblVwbG9hZFByb2dyZXNzICYmIHN1cHBvcnRzUmVxdWVzdFN0cmVhbSAmJiBtZXRob2QgIT09ICdnZXQnICYmIG1ldGhvZCAhPT0gJ2hlYWQnICYmXG4gICAgICAocmVxdWVzdENvbnRlbnRMZW5ndGggPSBhd2FpdCByZXNvbHZlQm9keUxlbmd0aChoZWFkZXJzLCBkYXRhKSkgIT09IDBcbiAgICApIHtcbiAgICAgIGxldCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgZHVwbGV4OiBcImhhbGZcIlxuICAgICAgfSk7XG5cbiAgICAgIGxldCBjb250ZW50VHlwZUhlYWRlcjtcblxuICAgICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgJiYgKGNvbnRlbnRUeXBlSGVhZGVyID0gX3JlcXVlc3QuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSkge1xuICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlSGVhZGVyKVxuICAgICAgfVxuXG4gICAgICBpZiAoX3JlcXVlc3QuYm9keSkge1xuICAgICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgICByZXF1ZXN0Q29udGVudExlbmd0aCxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvblVwbG9hZFByb2dyZXNzKSlcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhID0gdHJhY2tTdHJlYW0oX3JlcXVlc3QuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCBmbHVzaCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscy5pc1N0cmluZyh3aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSB3aXRoQ3JlZGVudGlhbHMgPyAnaW5jbHVkZScgOiAnb21pdCc7XG4gICAgfVxuXG4gICAgLy8gQ2xvdWRmbGFyZSBXb3JrZXJzIHRocm93cyB3aGVuIGNyZWRlbnRpYWxzIGFyZSBkZWZpbmVkXG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jbG91ZGZsYXJlL3dvcmtlcmQvaXNzdWVzLzkwMlxuICAgIGNvbnN0IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPSBcImNyZWRlbnRpYWxzXCIgaW4gUmVxdWVzdC5wcm90b3R5cGU7XG4gICAgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgLi4uZmV0Y2hPcHRpb25zLFxuICAgICAgc2lnbmFsOiBjb21wb3NlZFNpZ25hbCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLm5vcm1hbGl6ZSgpLnRvSlNPTigpLFxuICAgICAgYm9keTogZGF0YSxcbiAgICAgIGR1cGxleDogXCJoYWxmXCIsXG4gICAgICBjcmVkZW50aWFsczogaXNDcmVkZW50aWFsc1N1cHBvcnRlZCA/IHdpdGhDcmVkZW50aWFscyA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVxdWVzdCk7XG5cbiAgICBjb25zdCBpc1N0cmVhbVJlc3BvbnNlID0gc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAocmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJyB8fCByZXNwb25zZVR5cGUgPT09ICdyZXNwb25zZScpO1xuXG4gICAgaWYgKHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKG9uRG93bmxvYWRQcm9ncmVzcyB8fCAoaXNTdHJlYW1SZXNwb25zZSAmJiB1bnN1YnNjcmliZSkpKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICAgIFsnc3RhdHVzJywgJ3N0YXR1c1RleHQnLCAnaGVhZGVycyddLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgIG9wdGlvbnNbcHJvcF0gPSByZXNwb25zZVtwcm9wXTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZUNvbnRlbnRMZW5ndGggPSB1dGlscy50b0Zpbml0ZU51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSk7XG5cbiAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPSBvbkRvd25sb2FkUHJvZ3Jlc3MgJiYgcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgcmVzcG9uc2VDb250ZW50TGVuZ3RoLFxuICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvbkRvd25sb2FkUHJvZ3Jlc3MpLCB0cnVlKVxuICAgICAgKSB8fCBbXTtcblxuICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoXG4gICAgICAgIHRyYWNrU3RyZWFtKHJlc3BvbnNlLmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgKCkgPT4ge1xuICAgICAgICAgIGZsdXNoICYmIGZsdXNoKCk7XG4gICAgICAgICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlIHx8ICd0ZXh0JztcblxuICAgIGxldCByZXNwb25zZURhdGEgPSBhd2FpdCByZXNvbHZlcnNbdXRpbHMuZmluZEtleShyZXNvbHZlcnMsIHJlc3BvbnNlVHlwZSkgfHwgJ3RleHQnXShyZXNwb25zZSwgY29uZmlnKTtcblxuICAgICFpc1N0cmVhbVJlc3BvbnNlICYmIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIGhlYWRlcnM6IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpLFxuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9KVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSAnVHlwZUVycm9yJyAmJiAvZmV0Y2gvaS50ZXN0KGVyci5tZXNzYWdlKSkge1xuICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgbmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpLFxuICAgICAgICB7XG4gICAgICAgICAgY2F1c2U6IGVyci5jYXVzZSB8fCBlcnJcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlcnIsIGVyciAmJiBlcnIuY29kZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgfVxufSk7XG5cblxuIiwgImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgaHR0cEFkYXB0ZXIgZnJvbSAnLi9odHRwLmpzJztcbmltcG9ydCB4aHJBZGFwdGVyIGZyb20gJy4veGhyLmpzJztcbmltcG9ydCBmZXRjaEFkYXB0ZXIgZnJvbSAnLi9mZXRjaC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiBmZXRjaEFkYXB0ZXJcbn1cblxudXRpbHMuZm9yRWFjaChrbm93bkFkYXB0ZXJzLCAoZm4sIHZhbHVlKSA9PiB7XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge3ZhbHVlfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywge3ZhbHVlfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByZW5kZXJSZWFzb24gPSAocmVhc29uKSA9PiBgLSAke3JlYXNvbn1gO1xuXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+IHV0aWxzLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzLmlzQXJyYXkoYWRhcHRlcnMpID8gYWRhcHRlcnMgOiBbYWRhcHRlcnNdO1xuXG4gICAgY29uc3Qge2xlbmd0aH0gPSBhZGFwdGVycztcbiAgICBsZXQgbmFtZU9yQWRhcHRlcjtcbiAgICBsZXQgYWRhcHRlcjtcblxuICAgIGNvbnN0IHJlamVjdGVkUmVhc29ucyA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgbmFtZU9yQWRhcHRlciA9IGFkYXB0ZXJzW2ldO1xuICAgICAgbGV0IGlkO1xuXG4gICAgICBhZGFwdGVyID0gbmFtZU9yQWRhcHRlcjtcblxuICAgICAgaWYgKCFpc1Jlc29sdmVkSGFuZGxlKG5hbWVPckFkYXB0ZXIpKSB7XG4gICAgICAgIGFkYXB0ZXIgPSBrbm93bkFkYXB0ZXJzWyhpZCA9IFN0cmluZyhuYW1lT3JBZGFwdGVyKSkudG9Mb3dlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGFkYXB0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBVbmtub3duIGFkYXB0ZXIgJyR7aWR9J2ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZWplY3RlZFJlYXNvbnNbaWQgfHwgJyMnICsgaV0gPSBhZGFwdGVyO1xuICAgIH1cblxuICAgIGlmICghYWRhcHRlcikge1xuXG4gICAgICBjb25zdCByZWFzb25zID0gT2JqZWN0LmVudHJpZXMocmVqZWN0ZWRSZWFzb25zKVxuICAgICAgICAubWFwKChbaWQsIHN0YXRlXSkgPT4gYGFkYXB0ZXIgJHtpZH0gYCArXG4gICAgICAgICAgKHN0YXRlID09PSBmYWxzZSA/ICdpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCcgOiAnaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQnKVxuICAgICAgICApO1xuXG4gICAgICBsZXQgcyA9IGxlbmd0aCA/XG4gICAgICAgIChyZWFzb25zLmxlbmd0aCA+IDEgPyAnc2luY2UgOlxcbicgKyByZWFzb25zLm1hcChyZW5kZXJSZWFzb24pLmpvaW4oJ1xcbicpIDogJyAnICsgcmVuZGVyUmVhc29uKHJlYXNvbnNbMF0pKSA6XG4gICAgICAgICdhcyBubyBhZGFwdGVyIHNwZWNpZmllZCc7XG5cbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBgVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCBgICsgcyxcbiAgICAgICAgJ0VSUl9OT1RfU1VQUE9SVCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkYXB0ZXI7XG4gIH0sXG4gIGFkYXB0ZXJzOiBrbm93bkFkYXB0ZXJzXG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHJhbnNmb3JtRGF0YSBmcm9tICcuL3RyYW5zZm9ybURhdGEuanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4uL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSBcIi4uL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzXCI7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXIpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59XG4iLCAiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjEuNy45XCI7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxudmFsaWRhdG9ycy5zcGVsbGluZyA9IGZ1bmN0aW9uIHNwZWxsaW5nKGNvcnJlY3RTcGVsbGluZykge1xuICByZXR1cm4gKHZhbHVlLCBvcHQpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihgJHtvcHR9IGlzIGxpa2VseSBhIG1pc3NwZWxsaW5nIG9mICR7Y29ycmVjdFNwZWxsaW5nfWApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBjb25zdCBvcHQgPSBrZXlzW2ldO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yc1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBidWlsZFVSTCBmcm9tICcuLi9oZWxwZXJzL2J1aWxkVVJMLmpzJztcbmltcG9ydCBJbnRlcmNlcHRvck1hbmFnZXIgZnJvbSAnLi9JbnRlcmNlcHRvck1hbmFnZXIuanMnO1xuaW1wb3J0IGRpc3BhdGNoUmVxdWVzdCBmcm9tICcuL2Rpc3BhdGNoUmVxdWVzdC5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IHZhbGlkYXRvciBmcm9tICcuLi9oZWxwZXJzL3ZhbGlkYXRvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5jbGFzcyBBeGlvcyB7XG4gIGNvbnN0cnVjdG9yKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15ID0ge307XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBkdW1teS5zdGFjayA/IGR1bW15LnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sICcnKSA6ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghZXJyLnN0YWNrKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgICAgfSBlbHNlIGlmIChzdGFjayAmJiAhU3RyaW5nKGVyci5zdGFjaykuZW5kc1dpdGgoc3RhY2sucmVwbGFjZSgvXi4rXFxuLitcXG4vLCAnJykpKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFja1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlnbm9yZSB0aGUgY2FzZSB3aGVyZSBcInN0YWNrXCIgaXMgYW4gdW4td3JpdGFibGUgcHJvcGVydHlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gICAgY29uc3Qge3RyYW5zaXRpb25hbCwgcGFyYW1zU2VyaWFsaXplciwgaGVhZGVyc30gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMocGFyYW1zU2VyaWFsaXplciwge1xuICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMoY29uZmlnLCB7XG4gICAgICBiYXNlVXJsOiB2YWxpZGF0b3JzLnNwZWxsaW5nKCdiYXNlVVJMJyksXG4gICAgICB3aXRoWHNyZlRva2VuOiB2YWxpZGF0b3JzLnNwZWxsaW5nKCd3aXRoWFNSRlRva2VuJylcbiAgICB9LCB0cnVlKTtcblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscy5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3M7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL0NhbmNlbGVkRXJyb3IuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIHRvQWJvcnRTaWduYWwoKSB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGNvbnN0IGFib3J0ID0gKGVycikgPT4ge1xuICAgICAgY29udHJvbGxlci5hYm9ydChlcnIpO1xuICAgIH07XG5cbiAgICB0aGlzLnN1YnNjcmliZShhYm9ydCk7XG5cbiAgICBjb250cm9sbGVyLnNpZ25hbC51bnN1YnNjcmliZSA9ICgpID0+IHRoaXMudW5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgcmV0dXJuIGNvbnRyb2xsZXIuc2lnbmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsVG9rZW47XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG4iLCAiY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbn07XG5cbk9iamVjdC5lbnRyaWVzKEh0dHBTdGF0dXNDb2RlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgSHR0cFN0YXR1c0NvZGVbdmFsdWVdID0ga2V5O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEh0dHBTdGF0dXNDb2RlO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuaW1wb3J0IEF4aW9zIGZyb20gJy4vY29yZS9BeGlvcy5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsVG9rZW4gZnJvbSAnLi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgc3ByZWFkIGZyb20gJy4vaGVscGVycy9zcHJlYWQuanMnO1xuaW1wb3J0IGlzQXhpb3NFcnJvciBmcm9tICcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4vY29yZS9BeGlvc0hlYWRlcnMuanNcIjtcbmltcG9ydCBhZGFwdGVycyBmcm9tICcuL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzJztcbmltcG9ydCBIdHRwU3RhdHVzQ29kZSBmcm9tICcuL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG5jb25zdCBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSBDYW5jZWxlZEVycm9yO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSBDYW5jZWxUb2tlbjtcbmF4aW9zLmlzQ2FuY2VsID0gaXNDYW5jZWw7XG5heGlvcy5WRVJTSU9OID0gVkVSU0lPTjtcbmF4aW9zLnRvRm9ybURhdGEgPSB0b0Zvcm1EYXRhO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IEF4aW9zRXJyb3I7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5heGlvcy5zcHJlYWQgPSBzcHJlYWQ7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IGlzQXhpb3NFcnJvcjtcblxuLy8gRXhwb3NlIG1lcmdlQ29uZmlnXG5heGlvcy5tZXJnZUNvbmZpZyA9IG1lcmdlQ29uZmlnO1xuXG5heGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnM7XG5cbmF4aW9zLmZvcm1Ub0pTT04gPSB0aGluZyA9PiBmb3JtRGF0YVRvSlNPTih1dGlscy5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbi8vIHRoaXMgbW9kdWxlIHNob3VsZCBvbmx5IGhhdmUgYSBkZWZhdWx0IGV4cG9ydFxuZXhwb3J0IGRlZmF1bHQgYXhpb3NcbiIsICJpbXBvcnQgYXhpb3MgZnJvbSAnLi9saWIvYXhpb3MuanMnO1xuXG4vLyBUaGlzIG1vZHVsZSBpcyBpbnRlbmRlZCB0byB1bndyYXAgQXhpb3MgZGVmYXVsdCBleHBvcnQgYXMgbmFtZWQuXG4vLyBLZWVwIHRvcC1sZXZlbCBleHBvcnQgc2FtZSB3aXRoIHN0YXRpYyBwcm9wZXJ0aWVzXG4vLyBzbyB0aGF0IGl0IGNhbiBrZWVwIHNhbWUgd2l0aCBlcyBtb2R1bGUgb3IgY2pzXG5jb25zdCB7XG4gIEF4aW9zLFxuICBBeGlvc0Vycm9yLFxuICBDYW5jZWxlZEVycm9yLFxuICBpc0NhbmNlbCxcbiAgQ2FuY2VsVG9rZW4sXG4gIFZFUlNJT04sXG4gIGFsbCxcbiAgQ2FuY2VsLFxuICBpc0F4aW9zRXJyb3IsXG4gIHNwcmVhZCxcbiAgdG9Gb3JtRGF0YSxcbiAgQXhpb3NIZWFkZXJzLFxuICBIdHRwU3RhdHVzQ29kZSxcbiAgZm9ybVRvSlNPTixcbiAgZ2V0QWRhcHRlcixcbiAgbWVyZ2VDb25maWdcbn0gPSBheGlvcztcblxuZXhwb3J0IHtcbiAgYXhpb3MgYXMgZGVmYXVsdCxcbiAgQXhpb3MsXG4gIEF4aW9zRXJyb3IsXG4gIENhbmNlbGVkRXJyb3IsXG4gIGlzQ2FuY2VsLFxuICBDYW5jZWxUb2tlbixcbiAgVkVSU0lPTixcbiAgYWxsLFxuICBDYW5jZWwsXG4gIGlzQXhpb3NFcnJvcixcbiAgc3ByZWFkLFxuICB0b0Zvcm1EYXRhLFxuICBBeGlvc0hlYWRlcnMsXG4gIEh0dHBTdGF0dXNDb2RlLFxuICBmb3JtVG9KU09OLFxuICBnZXRBZGFwdGVyLFxuICBtZXJnZUNvbmZpZ1xufVxuIiwgImltcG9ydCB7XG4gIFRoaW5nLFxuICBFbnRpdHksXG4gIENsYXNzLFxuICBQcm9wZXJ0eSxcbiAgSW5kaXZpZHVhbCxcbiAgT250b2xvZ3ksXG59IGZyb20gXCIuL2ludGVyZmFjZXNcIjtcblxuLy8gUkVBRE9OTFkgYXJyYXlzIGNvbnRhaW5pbmcgdGhlIHN0cmluZ3MgZGVmaW5pbmcgYSBNb2RlbCBPYmplY3QgVHlwZVxuZXhwb3J0IGNvbnN0IGNsYXNzVHlwZU5hbWVzID0gW1wiY2xhc3NcIiwgXCJ0ZXJtXCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHByb3BlcnR5VHlwZU5hbWVzID0gW1xuICBcInByb3BlcnR5XCIsXG4gIFwiYW5ub3RhdGlvblByb3BlcnR5XCIsXG4gIFwiZGF0YVByb3BlcnR5XCIsXG4gIFwib2JqZWN0UHJvcGVydHlcIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgaW5kaXZpZHVhbFR5cGVOYW1lcyA9IFtcImluZGl2aWR1YWxcIl0gYXMgY29uc3Q7XG5leHBvcnQgY29uc3Qgb250b2xvZ3lUeXBlTmFtZXMgPSBbXCJvbnRvbG9neVwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBlbnRpdHlUeXBlTmFtZXMgPSBbXG4gIC4uLmNsYXNzVHlwZU5hbWVzLFxuICAuLi5pbmRpdmlkdWFsVHlwZU5hbWVzLFxuICAuLi5wcm9wZXJ0eVR5cGVOYW1lcyxcbl0gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgdGhpbmdUeXBlTmFtZXMgPSBbXG4gIC4uLmVudGl0eVR5cGVOYW1lcyxcbiAgLi4ub250b2xvZ3lUeXBlTmFtZXMsXG5dIGFzIGNvbnN0O1xuXG4vLyBUeXBlLWNyZWF0aW9uIG91dCBvZiBSRUFET05MWSBhcnJheXNcbmV4cG9ydCB0eXBlIENsYXNzVHlwZU5hbWUgPSB0eXBlb2YgY2xhc3NUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZU5hbWUgPSB0eXBlb2YgcHJvcGVydHlUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIEluZGl2aWR1YWxUeXBlTmFtZSA9IHR5cGVvZiBpbmRpdmlkdWFsVHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBPbnRvbG9neVR5cGVOYW1lID0gdHlwZW9mIG9udG9sb2d5VHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBFbnRpdHlUeXBlTmFtZSA9IHR5cGVvZiBlbnRpdHlUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFRoaW5nVHlwZU5hbWUgPSB0eXBlb2YgdGhpbmdUeXBlTmFtZXNbbnVtYmVyXTtcblxuLy8gRnVuY3Rpb25zIGNoZWNraW5nIHN0cmluZyBhZ2FpbnN0IHR5cGUgbmFtZXMsIHJldHVybmluZyBzdHJpbmcgYXMgdHlwZSBuYW1lIGlmIGNoZWNrIHBhc3Nlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3NUeXBlTmFtZSh0eXBlOiBzdHJpbmcpOiB0eXBlIGlzIENsYXNzVHlwZU5hbWUge1xuICByZXR1cm4gY2xhc3NUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBDbGFzc1R5cGVOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5VHlwZU5hbWUodHlwZTogc3RyaW5nKTogdHlwZSBpcyBQcm9wZXJ0eVR5cGVOYW1lIHtcbiAgcmV0dXJuIHByb3BlcnR5VHlwZU5hbWVzLmluY2x1ZGVzKHR5cGUgYXMgUHJvcGVydHlUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbmRpdmlkdWFsVHlwZU5hbWUodHlwZTogc3RyaW5nKTogdHlwZSBpcyBJbmRpdmlkdWFsVHlwZU5hbWUge1xuICByZXR1cm4gaW5kaXZpZHVhbFR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIEluZGl2aWR1YWxUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbnRvbG9neVR5cGVOYW1lKHR5cGU6IHN0cmluZyk6IHR5cGUgaXMgT250b2xvZ3lUeXBlTmFtZSB7XG4gIHJldHVybiBvbnRvbG9neVR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIE9udG9sb2d5VHlwZU5hbWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5VHlwZU5hbWUodHlwZTogc3RyaW5nKTogdHlwZSBpcyBFbnRpdHlUeXBlTmFtZSB7XG4gIHJldHVybiBlbnRpdHlUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBFbnRpdHlUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUaGluZ1R5cGVOYW1lKHR5cGU6IHN0cmluZyk6IHR5cGUgaXMgVGhpbmdUeXBlTmFtZSB7XG4gIHJldHVybiB0aGluZ1R5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIFRoaW5nVHlwZU5hbWUpO1xufVxuXG4vLyBGdW5jdGlvbnMgY2hlY2tpbmcgVGhpbmcgb2JqZWN0cyBhZ2FpbnN0IHNwZWNpZmljIHR5cGUgKHZpYSBjaGVja2luZyBnZXRUeXBlKCkgYWdhaW5zdCB0eXBlIG5hbWVzKSwgcmV0dXJuaW5nIG9iamVjdCBhcyBzcGVjaWZpYyB0eXBlIGlmIGNoZWNrIHBhc3Nlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3ModGhpbmc6IFRoaW5nKTogdGhpbmcgaXMgQ2xhc3Mge1xuICByZXR1cm4gaXNDbGFzc1R5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eSh0aGluZzogVGhpbmcpOiB0aGluZyBpcyBQcm9wZXJ0eSB7XG4gIHJldHVybiBpc1Byb3BlcnR5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0luZGl2aWR1YWwodGhpbmc6IFRoaW5nKTogdGhpbmcgaXMgSW5kaXZpZHVhbCB7XG4gIHJldHVybiBpc0luZGl2aWR1YWxUeXBlTmFtZSh0aGluZy5nZXRUeXBlKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5KHRoaW5nOiBUaGluZyk6IHRoaW5nIGlzIEVudGl0eSB7XG4gIHJldHVybiBpc0VudGl0eVR5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbnRvbG9neSh0aGluZzogVGhpbmcpOiB0aGluZyBpcyBPbnRvbG9neSB7XG4gIHJldHVybiBpc09udG9sb2d5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn1cbiIsICJpbXBvcnQgeyBFdWlMaW5rQ29sb3IgfSBmcm9tIFwiQGVsYXN0aWMvZXVpL3NyYy9jb21wb25lbnRzL2xpbmsvbGlua1wiO1xuaW1wb3J0IHtcbiAgaXNDbGFzc1R5cGVOYW1lLFxuICBpc0luZGl2aWR1YWxUeXBlTmFtZSxcbiAgaXNPbnRvbG9neVR5cGVOYW1lLFxuICBpc1Byb3BlcnR5VHlwZU5hbWUsXG4gIGlzVGhpbmdUeXBlTmFtZSxcbiAgVGhpbmdUeXBlTmFtZSxcbn0gZnJvbSBcIi4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBTdG9yeUNvbnRleHQgfSBmcm9tIFwiQHN0b3J5Ym9vay9yZWFjdFwiO1xuXG5leHBvcnQgY29uc3QgT0JPX0ZPVU5EUllfUkVQT19VUkxfUkFXID1cbiAgXCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vT0JPRm91bmRyeS9PQk9Gb3VuZHJ5LmdpdGh1Yi5pby9tYXN0ZXJcIiBhcyBjb25zdDtcblxuZXhwb3J0IGZ1bmN0aW9uIGFzQXJyYXk8VD4ob2JqOiBUIHwgVFtdKTogVFtdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBvYmo7XG4gIH0gZWxzZSBpZiAob2JqKSB7XG4gICAgcmV0dXJuIFtvYmpdO1xuICB9XG4gIHJldHVybiBbXSBhcyBUW107XG59XG5cbmNvbnN0IERFRkFVTFRfVVNFX0xFR0FDWSA9IHRydWU7XG4vKipcbiAqIFJldHVybnMgYHVzZUxlZ2FjeWAgaWYgdW5kZWZpbmVkLCBvdGhlcndpc2UgcmV0dXJucyBkZWZhdWx0IHZhbHVlIGZvciB1c2VMZWdhY3lcbiAqIEBwYXJhbSB1c2VMZWdhY3lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3k/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gIHJldHVybiB1c2VMZWdhY3kgIT09IHVuZGVmaW5lZCA/IHVzZUxlZ2FjeSA6IERFRkFVTFRfVVNFX0xFR0FDWTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHtAbGluayB0eXBlfS4gSWYge0BsaW5rIHR5cGV9IGVxdWFscyAndGVybScsICdjbGFzcycgZ2V0cyByZXR1cm5lZCBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50aXR5VHlwZU5hbWUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGUgPT09IFwidGVybVwiID8gXCJjbGFzc1wiIDogdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVDYW1lbENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY2FwaXRhbGl6ZShzdHIpXG4gICAgLnNwbGl0KC8oPz1bQS1aXVthLXpdKS8pXG4gICAgLmpvaW4oXCIgXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVVbmRlcnNjb3JlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNhcGl0YWxpemUoc3RyKS5yZXBsYWNlKFwiX1wiLCBcIiBcIik7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cmltbWVkIGFwaSAob21pdHMgL2FwaS92MiBhdCB0aGUgZW5kKVxuICogQHBhcmFtIGFwaVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnJvbnRFbmRBcGkoYXBpOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYXBpLnJlcGxhY2UoL1xcL2FwaVxcLz8kLywgXCIvXCIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgXCJvbnRvbG9naWVzL3tvbnRvbG9neUlkfS97ZW50aXR5VHlwZX0ve2lyaX1cIiwgd2hpY2ggY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIGZyb250ZW5kQXBpIHRvIGdldCBmdWxsIGxpbmtcbiAqIEBwYXJhbSBvbnRvbG9neUlkIHRoZSBlbnRpdGllcycgb250b2xvZ3lJZFxuICogQHBhcmFtIGlyaSB0aGUgZW50aXRpZXMnIGlyaVxuICogQHBhcmFtIGVudGl0eVR5cGVBcnJheSB0aGUgZW50aXRpZXMnIHR5cGUgYXJyYXkgKGZyb20gYXBpIEpTT04gbGlua2VkRW50aXRpZXMpXG4gKiBAcGFyYW0gdXNlTGVnYWN5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KFxuICBvbnRvbG9neUlkOiBzdHJpbmcsXG4gIGVudGl0eVR5cGVBcnJheTogc3RyaW5nW10gfCBzdHJpbmcsXG4gIGlyaT86IHN0cmluZyxcbiAgdXNlTGVnYWN5PzogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIChcbiAgICBgb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7cGx1cmFsaXplVHlwZShcbiAgICAgIGFzQXJyYXkoZW50aXR5VHlwZUFycmF5KSxcbiAgICAgIHVzZUxlZ2FjeVxuICAgICl9YCArXG4gICAgKGlyaSAhPSB1bmRlZmluZWQgPyBgLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChpcmkpKX1gIDogXCJcIilcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBsdXJhbGl6ZVR5cGUoXG4gIHR5cGVBcnJheTogc3RyaW5nW10gfCBzdHJpbmcsXG4gIHVzZUxlZ2FjeT86IGJvb2xlYW5cbik6IFwidGVybXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcIm9udG9sb2dpZXNcIiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiBhc0FycmF5KHR5cGVBcnJheSkpIHtcbiAgICBpZiAoaXNUaGluZ1R5cGVOYW1lKHR5cGUpKSB7XG4gICAgICBpZiAoaXNDbGFzc1R5cGVOYW1lKHR5cGUpKVxuICAgICAgICByZXR1cm4gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcInRlcm1zXCIgOiBcImNsYXNzZXNcIjtcbiAgICAgIGlmIChpc1Byb3BlcnR5VHlwZU5hbWUodHlwZSkpIHJldHVybiBcInByb3BlcnRpZXNcIjtcbiAgICAgIGlmIChpc0luZGl2aWR1YWxUeXBlTmFtZSh0eXBlKSkgcmV0dXJuIFwiaW5kaXZpZHVhbHNcIjtcbiAgICAgIGlmIChpc09udG9sb2d5VHlwZU5hbWUodHlwZSkpIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdGhpbmdUeXBlIGZvdW5kIHRvIHBsdXJhbGl6ZSBpbiBwcm92aWRlZCB0eXBlQXJyYXkuXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2luZ3VsYXJpemVUeXBlKFxuICB0eXBlQXJyYXk6IHN0cmluZ1tdIHwgc3RyaW5nLFxuICB1c2VMZWdhY3k/OiBib29sZWFuXG4pOiBUaGluZ1R5cGVOYW1lIHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIGFzQXJyYXkodHlwZUFycmF5KSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcInRlcm1zXCI6XG4gICAgICBjYXNlIFwiY2xhc3Nlc1wiOlxuICAgICAgICByZXR1cm4gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcInRlcm1cIiA6IFwiY2xhc3NcIjtcbiAgICAgIGNhc2UgXCJwcm9wZXJ0aWVzXCI6XG4gICAgICBjYXNlIFwiZGF0YVByb3BlcnRpZXNcIjpcbiAgICAgIGNhc2UgXCJvYmplY3RQcm9wZXJ0aWVzXCI6XG4gICAgICBjYXNlIFwiYW5ub3RhdGlvblByb3BlcnRpZXNcIjpcbiAgICAgICAgcmV0dXJuIFwicHJvcGVydHlcIjtcbiAgICAgIGNhc2UgXCJpbmRpdmlkdWFsc1wiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsXCI7XG4gICAgICBjYXNlIFwib250b2xvZ2llc1wiOlxuICAgICAgICByZXR1cm4gXCJvbnRvbG9neVwiO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0aGluZ1R5cGUgZm91bmQgdG8gc2luZ3VsYXJpemUgaW4gcHJvdmlkZWQgdHlwZUFycmF5LlwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIHN0cmluZyB1c2VkIG1haW5seSBmb3IgY29tcG9uZW50IGtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gIHJldHVybiAoTWF0aC5yYW5kb20oKSAqIE1hdGgucG93KDIsIDU0KSkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNIZXhDb2xvcihzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL14jWzAtOUEtRl17Nn0kL2kudGVzdChzdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZ2JDb2xvcihzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL14ocmdifGhzbCkoYT8pWyhdXFxzKihbXFxkLl0rXFxzKiU/KVxccyosXFxzKihbXFxkLl0rXFxzKiU/KVxccyosXFxzKihbXFxkLl0rXFxzKiU/KVxccyooPzosXFxzKihbXFxkLl0rKVxccyopP1spXSQvaS50ZXN0KFxuICAgIHN0clxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFdWlMaW5rQ29sb3Ioc3RyOiBzdHJpbmcpOiBzdHIgaXMgRXVpTGlua0NvbG9yIHtcbiAgcmV0dXJuIFtcbiAgICBcInByaW1hcnlcIixcbiAgICBcInN1YmR1ZWRcIixcbiAgICBcInN1Y2Nlc3NcIixcbiAgICBcImFjY2VudFwiLFxuICAgIFwiZGFuZ2VyXCIsXG4gICAgXCJ3YXJuaW5nXCIsXG4gICAgXCJ0ZXh0XCIsXG4gICAgXCJnaG9zdFwiLFxuICBdLmluY2x1ZGVzKHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V1aUJ1dHRvbkNvbG9yKHN0cjogc3RyaW5nKTogc3RyIGlzIEV1aUxpbmtDb2xvciB7XG4gIHJldHVybiBbXCJ0ZXh0XCIsIFwiYWNjZW50XCIsIFwicHJpbWFyeVwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCJdLmluY2x1ZGVzKFxuICAgIHN0clxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KFxuICBlcnJvcjogYW55LFxuICBtZXNzYWdlUGxhY2Vob2xkZXIgPSBcImluZm9ybWF0aW9uXCJcbik6IHN0cmluZyB7XG4gIGNvbnN0IGVycm9yX21zZzogc3RyaW5nID0gZXJyb3IubWVzc2FnZTtcbiAgaWYgKGVycm9yX21zZyA9PT0gXCJSZXNwb25zZSBjb250YWlucyAwIGVsZW1lbnRzXCIpIHtcbiAgICByZXR1cm4gXCJObyBlbGVtZW50cyBmb3VuZFwiO1xuICB9IGVsc2UgcmV0dXJuIGBObyAke21lc3NhZ2VQbGFjZWhvbGRlcn0gYXZhaWxhYmxlYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluZmVyVHlwZUZyb21UeXBlQXJyYXkodHlwZXM6IHN0cmluZ1tdKSB7XG4gIGxldCByZXMgPSB0eXBlcy5maWx0ZXIoKGVsZW06IHN0cmluZykgPT4gaXNUaGluZ1R5cGVOYW1lKGVsZW0pKTsgLy8gZmlsdGVyIG5vdCBtYXRjaGluZyBzdHJpbmdzXG4gIHJlcyA9IHJlcy5tYXAoKGl0ZW0pID0+XG4gICAgaXRlbSA9PT0gXCJhbm5vdGF0aW9uUHJvcGVydHlcIiB8fFxuICAgIGl0ZW0gPT09IFwib2JqZWN0UHJvcGVydHlcIiB8fFxuICAgIGl0ZW0gPT09IFwiZGF0YVByb3BlcnR5XCJcbiAgICAgID8gXCJwcm9wZXJ0eVwiXG4gICAgICA6IGl0ZW1cbiAgKTtcbiAgcmVzID0gW1xuICAgIC4uLm5ldyBTZXQ8XG4gICAgICB8IFwiY2xhc3NcIlxuICAgICAgfCBcInRlcm1cIlxuICAgICAgfCBcImluZGl2aWR1YWxcIlxuICAgICAgfCBcInByb3BlcnR5XCJcbiAgICAgIHwgXCJhbm5vdGF0aW9uUHJvcGVydHlcIlxuICAgICAgfCBcImRhdGFQcm9wZXJ0eVwiXG4gICAgICB8IFwib2JqZWN0UHJvcGVydHlcIlxuICAgICAgfCBcIm9udG9sb2d5XCJcbiAgICA+KHJlcyksXG4gIF07IC8vIHJlbW92ZSBkdXBsaWNhdGVzXG5cbiAgaWYgKHJlcy5sZW5ndGggPT09IDEpIHJldHVybiByZXNbMF0gYXMgVGhpbmdUeXBlTmFtZTtcbiAgZWxzZSBpZiAocmVzLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiRW50aXR5IHR5cGUgY291bGQgbm90IGJlIGNvcnJlY3RseSBpbmZlcnJlZDogTm8gc3VpdGFibGUgdHlwZSBmb3VuZCBpbiBhcnJheS5cIlxuICAgICk7XG4gIGVsc2VcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGBFbnRpdHkgdHlwZSBjb3VsZCBub3QgYmUgY29ycmVjdGx5IGluZmVycmVkOiBNdWx0aXBsZSB0eXBlcyBmb3VuZCBpbiBhcnJheSwgbm8gZGVmaW5pdGUgY2hvaWNlIHBvc3NpYmxlIC0gJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgcmVzXG4gICAgICApfWBcbiAgICApO1xufVxuXG4vKiBUT0RPOiBwbHVyYWxpemVUeXBlIG5vdCBhdmFpbGFibGUgaW4gaHRtbCB2ZXJzaW9uLCByZXBsYWNlIHdpdGggbG9jYWwgZnVuY3Rpb25hbGl0eSAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hbnVhbGx5RW1iZWRPbk5hdmlnYXRlKFxuICBjb2RlOiBzdHJpbmcsXG4gIHN0b3J5Q29udGV4dDogU3RvcnlDb250ZXh0XG4pIHtcbiAgc3dpdGNoIChzdG9yeUNvbnRleHQuYXJnc1tcIm9uTmF2aWdhdGVUb0VudGl0eVwiXSkge1xuICAgIGNhc2UgXCJDb25zb2xlIG1lc3NhZ2VcIjpcbiAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgIC9vbk5hdmlnYXRlVG9FbnRpdHk9XFx7KFxcKFxcKSA9PiBcXHt9fGZ1bmN0aW9uIG5vUmVmQ2hlY2tcXChcXClcXHt9KX0vLFxuICAgICAgICBcIm9uTmF2aWdhdGVUb0VudGl0eT17XFxuICAgIChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICBjb25zb2xlLmxvZygnVHJpZ2dlcmVkIG9uTmF2aWdhdGVUb0VudGl0eSgpJyArIChlbnRpdHlUeXBlID8gYCBmb3IgJHtlbnRpdHlUeXBlIHx8IFxcXCJlbnRpdHlcXFwifWAgOiAnJykgKyAoKGVudGl0eSAmJiBlbnRpdHkubGFiZWwpID8gYCBcXFwiJHtlbnRpdHkubGFiZWx9XFxcImAgOiAnJykgKyAoKGVudGl0eSAmJiBlbnRpdHkuaXJpKSA/IGAgKGlyaT1cXFwiJHtlbnRpdHkuaXJpfVxcXCIpYCA6ICcnKSArICcuJyk7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJOYXZpZ2F0ZSB0byBFQkkgcGFnZVwiOlxuICAgICAgY29kZSA9IGNvZGUucmVwbGFjZShcbiAgICAgICAgL29uTmF2aWdhdGVUb0VudGl0eT1cXHsoXFwoXFwpID0+IFxce318ZnVuY3Rpb24gbm9SZWZDaGVja1xcKFxcKVxce30pfS8sXG4gICAgICAgICdvbk5hdmlnYXRlVG9FbnRpdHk9e1xcbiAgICAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlPzogc3RyaW5nLCBlbnRpdHk/OiB7IGlyaTogc3RyaW5nLCBsYWJlbD86IHN0cmluZyB9KSA9PiB7XFxuICAgICAgaWYoZW50aXR5ICYmIGVudGl0eS5pcmkgJiYgZW50aXR5VHlwZSkge1xcbiAgICAgICAgd2luZG93Lm9wZW4oXFwnaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvb250b2xvZ2llcy9cXCcgKyBvbnRvbG9neUlkICsgXFwnL1xcJyArIG5ldyBNYXAoW1tcInRlcm1cIixcImNsYXNzZXNcIl0sW1wiY2xhc3NcIixcImNsYXNzZXNcIl0sW1wiaW5kaXZpZHVhbFwiLFwiaW5kaXZpZHVhbHNcIl0sW1wicHJvcGVydHlcIixcInByb3BlcnRpZXNcIl0sW1wiZGF0YVByb3BlcnR5XCIsXCJwcm9wZXJ0aWVzXCJdLFtcIm9iamVjdFByb3BlcnR5XCIsXCJwcm9wZXJ0aWVzXCJdLFtcImFubm90YXRpb25Qcm9wZXJ0eVwiLFwicHJvcGVydGllc1wiXV0pLmdldChlbnRpdHlUeXBlKSArIFxcJy9cXCcgKyBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eS5pcmkpKSwgXCJfdG9wXCIpO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIHtcXG4gICAgICAgIHdpbmRvdy5vcGVuKFxcJ2h0dHBzOi8vd3d3LmViaS5hYy51ay9vbHM0L29udG9sb2dpZXMvXFwnICsgb250b2xvZ3lJZCwgXCJfdG9wXCIpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfSdcbiAgICAgICk7XG4gIH1cbiAgc3dpdGNoIChzdG9yeUNvbnRleHQuYXJnc1tcIm9uTmF2aWdhdGVUb09udG9sb2d5XCJdKSB7XG4gICAgY2FzZSBcIkNvbnNvbGUgbWVzc2FnZVwiOlxuICAgICAgY29kZSA9IGNvZGUucmVwbGFjZShcbiAgICAgICAgL29uTmF2aWdhdGVUb09udG9sb2d5PVxceyhcXChcXCkgPT4gXFx7fXxmdW5jdGlvbiBub1JlZkNoZWNrXFwoXFwpXFx7fSl9LyxcbiAgICAgICAgXCJvbk5hdmlnYXRlVG9PbnRvbG9neT17XFxuICAgIChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICBjb25zb2xlLmxvZygnVHJpZ2dlcmVkIG9uTmF2aWdhdGVUb09udG9sb2d5KCknICsgKGVudGl0eVR5cGUgPyBgIGZvciAke2VudGl0eVR5cGUgfHwgXFxcImVudGl0eVxcXCJ9YCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5sYWJlbCkgPyBgIFxcXCIke2VudGl0eS5sYWJlbH1cXFwiYCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5pcmkpID8gYCAoaXJpPVxcXCIke2VudGl0eS5pcml9XFxcIilgIDogJycpICsgYCBmb3Igb250b2xvZ3lJZCBcXFwiJHtvbnRvbG9neUlkfVxcXCIuYCk7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJOYXZpZ2F0ZSB0byBFQkkgcGFnZVwiOlxuICAgICAgY29kZSA9IGNvZGUucmVwbGFjZShcbiAgICAgICAgL29uTmF2aWdhdGVUb09udG9sb2d5PVxceyhcXChcXCkgPT4gXFx7fXxmdW5jdGlvbiBub1JlZkNoZWNrXFwoXFwpXFx7fSl9LyxcbiAgICAgICAgJ29uTmF2aWdhdGVUb09udG9sb2d5PXtcXG4gICAgKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgIGlmKGVudGl0eSAmJiBlbnRpdHkuaXJpICYmIGVudGl0eVR5cGUpIHtcXG4gICAgICAgIHdpbmRvdy5vcGVuKFxcJ2h0dHBzOi8vd3d3LmViaS5hYy51ay9vbHM0L29udG9sb2dpZXMvXFwnICsgb250b2xvZ3lJZCArIFxcJy9cXCcgKyBuZXcgTWFwKFtbXCJ0ZXJtXCIsXCJjbGFzc2VzXCJdLFtcImNsYXNzXCIsXCJjbGFzc2VzXCJdLFtcImluZGl2aWR1YWxcIixcImluZGl2aWR1YWxzXCJdLFtcInByb3BlcnR5XCIsXCJwcm9wZXJ0aWVzXCJdLFtcImRhdGFQcm9wZXJ0eVwiLFwicHJvcGVydGllc1wiXSxbXCJvYmplY3RQcm9wZXJ0eVwiLFwicHJvcGVydGllc1wiXSxbXCJhbm5vdGF0aW9uUHJvcGVydHlcIixcInByb3BlcnRpZXNcIl1dKS5nZXQoZW50aXR5VHlwZSkgKyBcXCcvXFwnICsgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChlbnRpdHkuaXJpKSksIFwiX3RvcFwiKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSB7XFxuICAgICAgICB3aW5kb3cub3BlbihcXCdodHRwczovL3d3dy5lYmkuYWMudWsvb2xzNC9vbnRvbG9naWVzL1xcJyArIG9udG9sb2d5SWQsIFwiX3RvcFwiKTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH0nXG4gICAgICApO1xuICB9XG4gIHN3aXRjaCAoc3RvcnlDb250ZXh0LmFyZ3NbXCJvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGVcIl0pIHtcbiAgICBjYXNlIFwiQ29uc29sZSBtZXNzYWdlXCI6XG4gICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAvb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPVxceyhcXChcXCkgPT4gXFx7fXxmdW5jdGlvbiBub1JlZkNoZWNrXFwoXFwpXFx7fSl9LyxcbiAgICAgICAgXCJvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e1xcbiAgICAoZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgICBjb25zb2xlLmxvZygnVHJpZ2dlcmVkIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSgpJyArIChlbnRpdHlUeXBlID8gYCBmb3IgJHtlbnRpdHlUeXBlIHx8IFxcXCJlbnRpdHlcXFwifWAgOiAnJykgKyAoKGVudGl0eSAmJiBlbnRpdHkubGFiZWwpID8gYCBcXFwiJHtlbnRpdHkubGFiZWx9XFxcImAgOiAnJykgKyAoKGVudGl0eSAmJiBlbnRpdHkuaXJpKSA/IGAgKGlyaT1cXFwiJHtlbnRpdHkuaXJpfVxcXCIpYCA6ICcnKSArICcuJyk7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJOYXZpZ2F0ZSB0byBFQkkgcGFnZVwiOlxuICAgICAgY29kZSA9IGNvZGUucmVwbGFjZShcbiAgICAgICAgL29uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZT1cXHsoXFwoXFwpID0+IFxce318ZnVuY3Rpb24gbm9SZWZDaGVja1xcKFxcKVxce30pfS8sXG4gICAgICAgIFwib25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtcXG4gICAgKGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICAgd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3LmViaS5hYy51ay9vbHM0L3NlYXJjaD9xPScgKyAoKGVudGl0eSAmJiBlbnRpdHkubGFiZWwpID8gZW50aXR5LmxhYmVsIDogXFxcIlxcXCIpICsgJyZleGFjdE1hdGNoPXRydWUmbGFuZz1lbicsIFxcXCJfdG9wXFxcIik7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgKTtcbiAgfVxuXG4gIHJldHVybiBjb2RlO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlaWZpZWQ8VD4ge1xuICB2YWx1ZTogVDtcbiAgYXhpb21zOiBhbnlbXSB8IG51bGw7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogVCwgYXhpb21zOiBhbnlbXSB8IG51bGwpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5heGlvbXMgPSBheGlvbXM7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uPFQ+KGpzb25Ob2RlOiBhbnkpOiBSZWlmaWVkPFQ+W10ge1xuICAgIGlmICghanNvbk5vZGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoanNvbk5vZGUpKSB7XG4gICAgICBqc29uTm9kZSA9IFtqc29uTm9kZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGpzb25Ob2RlLm1hcCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZS50eXBlKSAmJlxuICAgICAgICB2YWx1ZS50eXBlLmluZGV4T2YoXCJyZWlmaWNhdGlvblwiKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbmV3IFJlaWZpZWQ8VD4odmFsdWUudmFsdWUsIHZhbHVlLmF4aW9tcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IFJlaWZpZWQ8VD4odmFsdWUsIG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaGFzTWV0YWRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXhpb21zICE9IG51bGw7XG4gIH1cblxuICAvLyBDb21iaW5lIGFsbCBvZiB0aGUgYXhpb21zIGludG8gb25lIG1ldGFkYXRhIG9iamVjdCBmb3IgdGhlIHByb3BlcnR5LlxuICAvL1xuICAvLyBub3RlOiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHNhbWUgcHJvcGVydHkgaXMgcmVpZmllZCBtdWx0aXBsZSB0aW1lcyB3aXRoXG4gIC8vIGRpZmZlcmVudCBtZXRhZGF0YSwgaXQgd2lsbCBhbGwgYmUgY29tYmluZWQgaW4gdGhlIFVJLiBXaGV0aGVyIHRoaXMgaXNcbiAgLy8gdGhlIGRlc2lyZWQgYmVoYXZpb3VyIGlzIFRCRC5cbiAgLy9cbiAgZ2V0TWV0YWRhdGEoKTogYW55IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmF4aW9tcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcGVydGllczogYW55ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGF4aW9tIG9mIHRoaXMuYXhpb21zKSB7XG4gICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoYXhpb20pKSB7XG4gICAgICAgIGNvbnN0IHYgPSBheGlvbVtrXTtcbiAgICAgICAgY29uc3QgZXhpc3Rpbmc6IGFueVtdIHwgdW5kZWZpbmVkID0gcHJvcGVydGllc1trXTtcbiAgICAgICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGlzdGluZy5wdXNoKHYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BlcnRpZXNba10gPSBbdl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbiAgfVxufVxuIiwgImltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRFbnRpdHkge1xuICBkZWZpbmVkQnk/OiBzdHJpbmdbXTtcbiAgaXJpPzogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG4gIG51bUFwcGVhcnNJbjogc3RyaW5nO1xuICBoYXNMb2NhbERlZmluaXRpb246IGJvb2xlYW47XG4gIGxhYmVsOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgdHlwZTogc3RyaW5nW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpbmtlZEVudGl0aWVzIHtcbiAgbGlua2VkRW50aXRpZXM6IHsgW2tleTogc3RyaW5nXTogTGlua2VkRW50aXR5IH07XG5cbiAgY29uc3RydWN0b3IobGlua2VkRW50aXRpZXM6IGFueSkge1xuICAgIGlmIChsaW5rZWRFbnRpdGllcykgdGhpcy5saW5rZWRFbnRpdGllcyA9IHsgLi4ubGlua2VkRW50aXRpZXMgfTtcbiAgICBlbHNlIHRoaXMubGlua2VkRW50aXRpZXMgPSB7fTtcbiAgfVxuXG4gIG1lcmdlV2l0aChsaW5rZWRFbnRpdGllczogYW55KTogTGlua2VkRW50aXRpZXMge1xuICAgIGlmIChsaW5rZWRFbnRpdGllcylcbiAgICAgIHJldHVybiBuZXcgTGlua2VkRW50aXRpZXMoeyAuLi50aGlzLmxpbmtlZEVudGl0aWVzLCBsaW5rZWRFbnRpdGllcyB9KTtcbiAgICBlbHNlIHJldHVybiBuZXcgTGlua2VkRW50aXRpZXMoeyAuLi50aGlzLmxpbmtlZEVudGl0aWVzIH0pO1xuICB9XG5cbiAgZ2V0TGFiZWxGb3JJcmkoaXJpOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGxpbmtlZEVudGl0eSA9IHRoaXMubGlua2VkRW50aXRpZXNbaXJpXTtcblxuICAgIGlmIChsaW5rZWRFbnRpdHkpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KGxpbmtlZEVudGl0eS5sYWJlbCk7XG4gICAgICBpZiAobGFiZWwgJiYgbGFiZWwubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gbGFiZWxbMF0udmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0KGlyaTogc3RyaW5nKTogTGlua2VkRW50aXR5IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5saW5rZWRFbnRpdGllc1tpcmldO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuXG5pbXBvcnQgTGlua2VkRW50aXRpZXMgZnJvbSBcIi4uL0xpbmtlZEVudGl0aWVzXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuaW1wb3J0IHsgVGhpbmdUeXBlTmFtZSB9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgcGx1cmFsaXplVHlwZSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgT0xTM1RoaW5nIGltcGxlbWVudHMgVGhpbmcge1xuICBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldExhYmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdO1xuICB9XG5cbiAgLy8gVE9ETzogSXMgY3VyaWUgLyBvYm9faWQgbWVhbnQ/IFwiaWRcIiBvbmx5IGV4aXN0cyBpbiBzdGFuZGFyZD8gKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL29udG9sb2dpZXMvYWRvL3Byb3BlcnRpZXM/aXJpPWh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9ST18wMDAyMTc1KVxuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpZFwiXTtcbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICAvLyBzdGFuZGFyZCByZXNwb25zZXMgZG9uJ3QgaGF2ZSBcInR5cGVcIiBrZXkgLT4gaW1wbGVtZW50IHN0YXRpY2FsbHkgaW4gc3VidHlwZXNcbiAgYWJzdHJhY3QgZ2V0VHlwZSgpOiBUaGluZ1R5cGVOYW1lO1xuXG4gIGdldFR5cGVQbHVyYWwoKTpcbiAgICB8IFwib250b2xvZ2llc1wiXG4gICAgfCBcImNsYXNzZXNcIlxuICAgIHwgXCJ0ZXJtc1wiXG4gICAgfCBcInByb3BlcnRpZXNcIlxuICAgIHwgXCJpbmRpdmlkdWFsc1wiIHtcbiAgICByZXR1cm4gcGx1cmFsaXplVHlwZSh0aGlzLmdldFR5cGUoKSk7XG4gIH1cblxuICAvLyBub3QgYXZhaWxhYmxlIGluIHN0YW5kYXJkIHJlc3BvbnNlc1xuICBnZXRSZGZUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldE5hbWVzKClbMF07XG4gIH1cblxuICAvLyBoYXMgYWRkaXRpb25hbCBrZXkgXCJzaG9ydGhhbmRcIj8gKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL29udG9sb2dpZXMvYWRvL3Byb3BlcnRpZXM/aXJpPWh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9ST18wMDAyMTc1KVxuICBnZXROYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbGFiZWxzID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdKTtcbiAgICBpZiAobGFiZWxzICYmIGxhYmVscy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbGFiZWxzLm1hcCgobGFiZWwpID0+IGxhYmVsLnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIFt0aGlzLmdldElyaSgpXTtcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXSk7XG4gICAgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZGVmaW5pdGlvbi5tYXAoKGRlZikgPT4gZGVmLnZhbHVlIHx8IFwiXCIpLmpvaW4oXCIgXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lfbmFtZVwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBhcHBsaWNhYmxlIC8gbmVjZXNzYXJ5IGluIHN0YW5kYXJkIGFzIHRoZXJlIGFyZSBubyBsaW5rZWQgZW50aXRpZXNcbiAgZ2V0TGFiZWxGb3JJcmkoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmtlZEVudGl0aWVzID0gdGhpcy5wcm9wZXJ0aWVzW1wibGlua2VkRW50aXRpZXNcIl07XG4gICAgaWYgKGxpbmtlZEVudGl0aWVzKSB7XG4gICAgICBjb25zdCBsYWJlbDogUmVpZmllZDxzdHJpbmc+W10gPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oXG4gICAgICAgIGxpbmtlZEVudGl0aWVzW2lkXT8ubGFiZWxcbiAgICAgICk7XG4gICAgICByZXR1cm4gbGFiZWxbMF0/LnZhbHVlIHx8IGlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgYWJzdHJhY3QgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW107XG4gIGFic3RyYWN0IGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZztcbiAgYWJzdHJhY3QgZ2V0QW5ub3RhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6IFJlaWZpZWQ8YW55PltdO1xuXG4gIC8vIFRPRE86IG5vdCBhcHBsaWNhYmxlIC8gbmVjZXNzYXJ5IGluIHN0YW5kYXJkXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxuXG4gIGdldERlcGljdGlvblVybCgpOiBzdHJpbmcge1xuICAgIGlmIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl0gJiZcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl1bXCJkZXBpY3Rpb25cIl1cbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW1wiZGVwaWN0aW9uXCJdWzBdO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuIiwgImltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBPTFMzVGhpbmcgfSBmcm9tIFwiLi9PTFMzVGhpbmdcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSwgZGVVbmRlcnNjb3JlIH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBFbnRpdHlUeXBlTmFtZSB9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgT0xTM0VudGl0eSBleHRlbmRzIE9MUzNUaGluZyBpbXBsZW1lbnRzIEVudGl0eSB7XG4gIGFic3RyYWN0IGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuXG4gIGlzQ2Fub25pY2FsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGRvZXMgbm90IHNlZW0gdG8gb2NjdXIgaW4gc3RhbmRhcmQgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3YyL2VudGl0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vRk9PRE9OXzAwMDA0NDc0KVxuICAvLyAgICAgICB2MiBoYXMgZGVwcmVjYXRlZCBpbmZvcm1hdGlvbiwgc3RhbmRhcmQgaGFzIG5vdFxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl0gPT09IFwidHJ1ZVwiXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIC8vIG9ubHkgc3VwcG9ydHMgRUZPIGZvciBub3dcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL29ic29sZXRlZF9pbl92ZXJzaW9uXCJdO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZWFzb24oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAwMDAyMzFcIl1cbiAgICApLmNvbmNhdChcbiAgICAgIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL3JlYXNvbl9mb3Jfb2Jzb2xlc2NlbmNlXCJdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uUmVwbGFjZW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMTAwMDAxXCJdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGV4aXN0ZW50IGluIHN0YW5kYXJkLiBDYW4gYmUgZXh0cmFjdGVkIGZyb20gXCJsaW5rc1wiLT5cImdyYXBoXCJcbiAgLy8gICAgICAgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3Rlcm1zP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vQUdST18wMDAwMDAwMilcbiAgZ2V0UmVsYXRlZEZyb20oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wicmVsYXRlZEZyb21cIl0pO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb25Bc0FycmF5KCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCBmcm9tIFwibGlua3NcIi0+XCJjaGlsZHJlblwiXG4gIGhhc0RpcmVjdENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNEaXJlY3RDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICAvLyAvLyBUT0RPOiBub3QgZXhpc3RlbnQgaW4gc3RhbmRhcmQuIENhbiBiZSBleHRyYWN0ZWQgZnJvbSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsQ2hpbGRyZW5cIlxuICBoYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW5cIl0gPT09IFwidHJ1ZVwiO1xuICB9XG5cbiAgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc19jaGlsZHJlblwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IGNvdWxkIG5vdCBmaW5kIGV4YW1wbGVzIG9mIGFuY2VzdG9ycyBpbiBuZXcgYXBpIHNvIGZhclxuICBnZXRBbmNlc3RvcklyaXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImFuY2VzdG9yXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IGNhbiBiZSBpbmZlcnJlZCB2aWEgXCJsaW5rc1wiLT5cImhpZXJhcmNoaWNhbEFuY2VzdG9yc1wiXG4gIGdldEhpZXJhcmNoaWNhbEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsQW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgZ2V0U3lub255bXMoKSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJzeW5vbnltc1wiXSk7XG4gIH1cblxuICAvLyBUT0RPOiBub3QgZXhpc3RlbnQgaW4gc3RhbmRhcmQuIENhbiBiZSBleHRyYWN0ZWQgdmlhIHNlYXJjaGluZyBmb3IgZW50aXR5IHdpdGhvdXQgc3BlY2lmaWMgb250b2xvZ3kgLT4gZ2l2ZXMgYWxsIG9jY3VycmVuY2VzXG4gIGdldEFwcGVhcnNJbigpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJhcHBlYXJzSW5cIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0Q3Jvc3NSZWZlcmVuY2VzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiYW5ub3RhdGlvblwiXVtcImhhc19kYnhyZWZcIl0gfHwgW107XG4gIH1cblxuICAvLyBUT0RPOiBub3QgZXhpc3RlbnQgaW4gc3RhbmRhcmQuIFN0YW5kYXJkIHNlZW1zIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCBpc19kZWZpbmluZ19vbnRvbG9neSBhcyB3ZWxsXG4gIC8vICAgICAgIChodHRwOi8vd3d3LmViaS5hYy51ay9vbHM0L2FwaS92Mi9vbnRvbG9naWVzL3JvL3Byb3BlcnRpZXM/aXJpPWh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9ST18wMDAyMTc1KVxuICBnZXREZWZpbmVkQnkoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5lZEJ5XCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldElzRGVmaW5pbmdPbnRvbG9neSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImlzX2RlZmluaW5nX29udG9sb2d5XCJdIHx8IHVuZGVmaW5lZCkgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvYm9faWRcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRfZm9ybVwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IGFyZSB0aGUgZm9sbG93aW5nIDMgbmVlZGVkP1xuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFtcbiAgICAgIC4uLmFzQXJyYXkoXG4gICAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIl0gfHwgW11cbiAgICAgICksXG4gICAgICAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdIHx8IFtdKSxcbiAgICBdKTtcbiAgfVxuXG4gIGlzUHJlZGljYXRlRnJvbUluZm9ybWFsVm9jYWJ1bGFyeShwcmVkaWNhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDIvc2tvcy9jb3JlI1wiKSB8fFxuICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvXCIpIHx8XG4gICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvXCIpIHx8XG4gICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9zY2hlbWEub3JnL1wiKVxuICAgICk7XG4gIH1cblxuICAvKiogQ2FuIGJlIGp1c3QgZm91bmQgdW5kZXIgYHByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdYC5cbiAgICogIE5vdCBwcmVzZW50IGluIG9sczQvYXBpLFxuICAgKiAgYnV0IGluIHNlbWFudGljbG9va3VwLnpibWVkLmRlL2FwaS5cbiAgICovXG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICAvKiBvbHM0IGV4Y2x1ZGVzIFwiaGFzIHByZWZlcnJlZCByb290IHRlcm1cIixcbiAgICAgICBwcm9wZXJ0aWVzIHdpdGhvdXQgYW4gSVJJIGFuZCBhbnl0aGluZyBpbiByZGYsIHJkZnMgYW5kIG93bCBuYW1lc3BhY2VzLFxuICAgICAgIGJ1dCB0aGlzIGlzIG5vdCBwb3NzaWJsZSBoZXJlIGFzIHRoZSBsYWJlbHMgYXJlIGtleXMgaGVyZSwgbm90IHRoZSBJUkkncyAqL1xuICAgIHJldHVybiBhc0FycmF5PHN0cmluZz4oT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzW1wiYW5ub3RhdGlvblwiXSkpO1xuICB9XG5cbiAgZ2V0QW5ub3RhdGlvblRpdGxlQnlJZChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGVVbmRlcnNjb3JlKGlkKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb24oYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW2lkXSkpO1xuICB9XG5cbiAgLy8gVE9ETzogQ2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIlxuICBnZXROdW1IaWVyYXJjaGljYWxEZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1IaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1IaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIC8vIFRPRE86IENhbiBiZSBpbmZlcnJlZCB2aWEgXCJsaW5rc1wiLT5cImRlc2NlbmRhbnRzXCJcbiAgZ2V0TnVtRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtRGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtRGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICAvLyBUT0RPOiBDYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxQYXJlbnRzXCJcbiAgZ2V0SGllcmFyY2hpY2FsUGFyZW50UmVpZmljYXRpb25BeGlvbXMocGFyZW50SXJpOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IGhpZXJhcmNoaWNhbFBhcmVudHMgPSBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQYXJlbnRcIl1cbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBwIG9mIGhpZXJhcmNoaWNhbFBhcmVudHMpIHtcbiAgICAgIGlmIChwLnZhbHVlID09PSBwYXJlbnRJcmkpIHtcbiAgICAgICAgcmV0dXJuIHAuZ2V0TWV0YWRhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhYnN0cmFjdCBnZXRUeXBlKCk6IEVudGl0eVR5cGVOYW1lO1xufVxuIiwgImltcG9ydCB7IENsYXNzIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IE9MUzNFbnRpdHkgfSBmcm9tIFwiLi9PTFMzRW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IENsYXNzVHlwZU5hbWUgfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzNDbGFzcyBleHRlbmRzIE9MUzNFbnRpdHkgaW1wbGVtZW50cyBDbGFzcyB7XG4gIGdldFR5cGUoKTogQ2xhc3NUeXBlTmFtZSB7XG4gICAgcmV0dXJuIFwiY2xhc3NcIjtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgcmV0dXJuIFwiY2xhc3Nlc1wiO1xuICB9XG5cbiAgLy8gVE9ETzogY2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsUGFyZW50c1wiXG4gIGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsUGFyZW50XCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IGNhbiBiZSBpbmZlcnJlZCB2aWEgXCJsaW5rc1wiLT5cInBhcmVudHNcIlxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YkNsYXNzT2ZcIl1cbiAgICApO1xuICB9XG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudENsYXNzXCJdXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRPRE86IGNhbiB0aGlzIGJlIGluZmVycmVkP1xuICBnZXREaXNqb2ludFdpdGgoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFdpdGhcIl1cbiAgICApO1xuICB9XG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldEhhc0tleSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXlcIl0pO1xuICB9XG5cbiAgZ2V0U3Vic2V0cygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaW5fc3Vic2V0XCJdKSB8fCBbXTtcbiAgfVxufVxuIiwgImltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IE9MUzNFbnRpdHkgfSBmcm9tIFwiLi9PTFMzRW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IFByb3BlcnR5VHlwZU5hbWUgfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzNQcm9wZXJ0eSBleHRlbmRzIE9MUzNFbnRpdHkgaW1wbGVtZW50cyBQcm9wZXJ0eSB7XG4gIGdldFR5cGUoKTogUHJvcGVydHlUeXBlTmFtZSB7XG4gICAgcmV0dXJuIFwicHJvcGVydHlcIjtcbiAgfVxuXG4gIGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViUHJvcGVydHlPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRQcm9wZXJ0eVwiXVxuICAgICk7XG4gIH1cblxuICBnZXREaXNqb2ludFdpdGgoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eURpc2pvaW50V2l0aFwiXVxuICAgICk7XG4gIH1cblxuICBnZXRJbnZlcnNlT2YoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW52ZXJzZU9mXCJdKTtcbiAgfVxuXG4gIGdldERvbWFpbigpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNkb21haW5cIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0UmFuZ2UoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjcmFuZ2VcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlDaGFpbnMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eUNoYWluQXhpb21cIl1cbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgSW5kaXZpZHVhbCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBPTFMzRW50aXR5IH0gZnJvbSBcIi4vT0xTM0VudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBJbmRpdmlkdWFsVHlwZU5hbWUgfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzNJbmRpdmlkdWFsIGV4dGVuZHMgT0xTM0VudGl0eSBpbXBsZW1lbnRzIEluZGl2aWR1YWwge1xuICBnZXRUeXBlKCk6IEluZGl2aWR1YWxUeXBlTmFtZSB7XG4gICAgcmV0dXJuIFwiaW5kaXZpZHVhbFwiO1xuICB9XG5cbiAgZ2V0UGFyZW50cygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRpcmVjdFBhcmVudFwiXSk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oW10pO1xuICB9XG5cbiAgZ2V0RGlmZmVyZW50RnJvbSgpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RpZmZlcmVudEZyb21cIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0U2FtZUFzKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3NhbWVBc1wiXSk7XG4gIH1cblxuICBnZXRJbmRpdmlkdWFsVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJkZlR5cGVzOiBhbnkgPSB0aGlzLmdldFJkZlR5cGVzKCk7XG5cbiAgICBpZiAoIXJkZlR5cGVzIHx8ICFBcnJheS5pc0FycmF5KHJkZlR5cGVzKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiByZGZUeXBlcy5maWx0ZXIoXG4gICAgICAodDogYW55KSA9PlxuICAgICAgICB0ICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI05hbWVkSW5kaXZpZHVhbFwiICYmXG4gICAgICAgICghKHR5cGVvZiB0ID09PSBcInN0cmluZ1wiKSB8fFxuICAgICAgICAgICF0LnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpKVxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBPbnRvbG9neSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBPTFMzVGhpbmcgfSBmcm9tIFwiLi9PTFMzVGhpbmdcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSwgZGVDYW1lbENhc2UgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IFRoaW5nVHlwZU5hbWUgfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzNPbnRvbG9neSBleHRlbmRzIE9MUzNUaGluZyBpbXBsZW1lbnRzIE9udG9sb2d5IHtcbiAgZ2V0VHlwZSgpOiBUaGluZ1R5cGVOYW1lIHtcbiAgICByZXR1cm4gXCJvbnRvbG9neVwiO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOlxuICAgIHwgXCJvbnRvbG9naWVzXCJcbiAgICB8IFwiY2xhc3Nlc1wiXG4gICAgfCBcInRlcm1zXCJcbiAgICB8IFwicHJvcGVydGllc1wiXG4gICAgfCBcImluZGl2aWR1YWxzXCIge1xuICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lJZFwiXTtcbiAgfVxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbmFtZXMgPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ0aXRsZVwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKG5hbWVzWzBdICYmIG5hbWVzWzBdLnZhbHVlKSB8fCB0aGlzLmdldE9udG9sb2d5SWQoKTtcbiAgfVxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9ucyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImRlc2NyaXB0aW9uXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAoZGVzY3JpcHRpb25zWzBdICYmIGRlc2NyaXB0aW9uc1swXS52YWx1ZSkgfHwgXCJcIjtcbiAgfVxuXG4gIGdldENyZWF0b3JzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJhbm5vdGF0aW9uc1wiXVtcImNyZWF0b3JcIl0pO1xuICB9XG5cbiAgZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ1cGRhdGVkXCJdO1xuICB9XG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mRW50aXRpZXNcIl0pO1xuICB9XG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZUZXJtc1wiXSk7XG4gIH1cbiAgZ2V0TnVtUHJvcGVydGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlByb3BlcnRpZXNcIl0pO1xuICB9XG4gIGdldE51bUluZGl2aWR1YWxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mSW5kaXZpZHVhbHNcIl0pO1xuICB9XG4gIGdldExvZ29VUkwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wibG9nb1wiXSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyB1c2VkIGFzIElSSVxuICBnZXRPbnRvbG9neVB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiZmlsZUxvY2F0aW9uXCJdO1xuICB9XG5cbiAgZ2V0SG9tZXBhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiaG9tZXBhZ2VcIl07XG4gIH1cbiAgZ2V0TWFpbGluZ0xpc3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wibWFpbGluZ0xpc3RcIl07XG4gIH1cbiAgZ2V0VHJhY2tlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ0cmFja2VyXCJdO1xuICB9XG4gIGdldFZlcnNpb25JcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1widmVyc2lvbklyaVwiXTtcbiAgfVxuICBnZXRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcInZlcnNpb25cIl07XG4gIH1cbiAgZ2V0VmVyc2lvbkZyb21JcmkoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2ZXJzaW9uSXJpID0gdGhpcy5nZXRWZXJzaW9uSXJpKCk7XG4gICAgaWYgKCF2ZXJzaW9uSXJpKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCB2ZXJzaW9uRnJvbURhdGUgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXGR7NH0tXFxkezJ9LVxcZHsyfS8pO1xuXG4gICAgaWYgKHZlcnNpb25Gcm9tRGF0ZSAmJiB2ZXJzaW9uRnJvbURhdGUubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHZlcnNpb25Gcm9tRGF0ZVswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmVyc2lvbkZyb21OdW1iZXIgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXC92W2QuXS4qXFwvLyk7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21OdW1iZXJcbiAgICAgICAgPyB2ZXJzaW9uRnJvbU51bWJlclswXS5yZXBsYWNlQWxsKFwiL1wiLCBcIlwiKS5yZXBsYWNlKFwidlwiLCBcIlwiKVxuICAgICAgICA6IFwiXCI7XG4gICAgfVxuICB9XG4gIGdldExvYWRlZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsb2FkZWRcIl07XG4gIH1cblxuICAvKiogQ2FuIGJlIGp1c3QgZm91bmQgdW5kZXIgYHByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJhbm5vdGF0aW9uc1wiXWAuXG4gICAqICBOb3QgcHJlc2VudCBpbiBvbHM0L2FwaSxcbiAgICogIGJ1dCBpbiBzZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9hcGkuXG4gICAqL1xuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXSAmJiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJhbm5vdGF0aW9uc1wiXSkge1xuICAgICAgLyogb2xzNCBleGNsdWRlcyBcImhhcyBwcmVmZXJyZWQgcm9vdCB0ZXJtXCIsXG4gICAgICAgcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhbmQgYW55dGhpbmcgaW4gcmRmLCByZGZzIGFuZCBvd2wgbmFtZXNwYWNlcyxcbiAgICAgICBidXQgdGhpcyBpcyBub3QgcG9zc2libGUgaGVyZSBhcyB0aGUgbGFiZWxzIGFyZSBrZXlzIGhlcmUsIG5vdCB0aGUgSVJJJ3MgKi9cbiAgICAgIHJldHVybiBhc0FycmF5PHN0cmluZz4oXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gXCJhbm5vdGF0aW9uc1wiIGtleSBpcyBub3QgcHJlc2VudCBpbiBvbHM0L2FwaVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlQ2FtZWxDYXNlKGlkKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb24oXG4gICAgICBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdW2lkXSkuZmlsdGVyKChlbGVtKSA9PiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZWxlbSAhPT0gXCJzdHJpbmdcIiB8fCBlbGVtICE9PSBcIlwiO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0UHJlZmVycmVkUm9vdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhhc1ByZWZlcnJlZFJvb3RcIl0pO1xuICB9XG5cbiAgZ2V0UHJlZmVycmVkUHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcInByZWZlcnJlZFByZWZpeFwiXTtcbiAgfVxuXG4gIGdldExhbmd1YWdlcygpOiBzdHJpbmdbXSB7XG4gICAgLy8gbm90IGF2YWlsYWJsZSBpbiBzZW1sb29rcCBBUEksIGJ1dCBpbiBlYmkgQVBJXG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wibGFuZ1wiXSk7XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXZhaWxhYmxlP1xuICBnZXRJbXBvcnRzRnJvbSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGF2YWlsYWJsZT9cbiAgZ2V0RXhwb3J0c1RvKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJleHBvcnRzVG9cIl0pO1xuICB9XG4gIGdldEFsbG93RG93bmxvYWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFsbG93RG93bmxvYWRcIl07XG4gIH1cblxuICBnZXRMaWNlbnNlKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYW5ub3RhdGlvbnNcIl1bXCJsaWNlbnNlXCJdO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgT250b2xvZ2llcyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBPTFMzT250b2xvZ3kgfSBmcm9tIFwiLi9PTFMzT250b2xvZ3lcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzNPbnRvbG9naWVzIGltcGxlbWVudHMgT250b2xvZ2llcyB7XG4gIHByb3BlcnRpZXM6IE9MUzNPbnRvbG9neVtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IE9MUzNPbnRvbG9neVtdKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldFRvdGFsT250b2xvZ2llcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0TnVtRW50aXRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZShcbiAgICAgICh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtRW50aXRpZXMoKSxcbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgZ2V0TnVtQ2xhc3NlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgKHRvdGFsLCBvbnRvbG9neSkgPT4gdG90YWwgKyBvbnRvbG9neS5nZXROdW1DbGFzc2VzKCksXG4gICAgICAwXG4gICAgKTtcbiAgfVxuXG4gIGdldE51bVByb3BlcnRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZShcbiAgICAgICh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtUHJvcGVydGllcygpLFxuICAgICAgMFxuICAgICk7XG4gIH1cblxuICBnZXROdW1JbmRpdmlkdWFscygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgKHRvdGFsLCBvbnRvbG9neSkgPT4gdG90YWwgKyBvbnRvbG9neS5nZXROdW1JbmRpdmlkdWFscygpLFxuICAgICAgMFxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5cbmltcG9ydCBMaW5rZWRFbnRpdGllcyBmcm9tIFwiLi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IGlzVGhpbmdUeXBlTmFtZSwgVGhpbmdUeXBlTmFtZSB9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgT0xTNFRoaW5nIGltcGxlbWVudHMgVGhpbmcge1xuICBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldExhYmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPih0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXSlbMF0udmFsdWU7XG4gIH1cblxuICAvLyBUT0RPOiBJcyBjdXJpZSAvIG9ib19pZCBtZWFudD9cbiAgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaWRcIl07XG4gIH1cblxuICBnZXRJcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXJpXCJdO1xuICB9XG5cbiAgZ2V0VHlwZSgpOiBUaGluZ1R5cGVOYW1lIHtcbiAgICBjb25zdCB0eXBlcyA9IHRoaXMucHJvcGVydGllc1tcInR5cGVcIl0gYXMgc3RyaW5nW107XG5cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIGlmIChpc1RoaW5nVHlwZU5hbWUodHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgYXMgYW55O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTpcbiAgICB8IFwib250b2xvZ2llc1wiXG4gICAgfCBcImNsYXNzZXNcIlxuICAgIHwgXCJwcm9wZXJ0aWVzXCJcbiAgICB8IFwiaW5kaXZpZHVhbHNcIlxuICAgIHwgXCJ0ZXJtc1wiIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlKCk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJvbnRvbG9neVwiOlxuICAgICAgICByZXR1cm4gXCJvbnRvbG9naWVzXCI7XG4gICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgcmV0dXJuIFwiY2xhc3Nlc1wiO1xuICAgICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICBjYXNlIFwiYW5ub3RhdGlvblByb3BlcnR5XCI6XG4gICAgICBjYXNlIFwiZGF0YVByb3BlcnR5XCI6XG4gICAgICBjYXNlIFwib2JqZWN0UHJvcGVydHlcIjpcbiAgICAgICAgcmV0dXJuIFwicHJvcGVydGllc1wiO1xuICAgICAgY2FzZSBcImluZGl2aWR1YWxcIjpcbiAgICAgICAgcmV0dXJuIFwiaW5kaXZpZHVhbHNcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRSZGZUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZVwiXVxuICAgICk7XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmFtZXMoKVswXTtcbiAgfVxuXG4gIGdldE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsYWJlbHMgPSBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl0pO1xuICAgIGlmIChsYWJlbHMgJiYgbGFiZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBsYWJlbHMubWFwKChsYWJlbCkgPT4gbGFiZWwudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gW3RoaXMuZ2V0SXJpKCldO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlZmluaXRpb25cIl0pO1xuICAgIGlmIChkZWZpbml0aW9uICYmIGRlZmluaXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGRlZmluaXRpb24ubWFwKChkZWYpID0+IGRlZi52YWx1ZSB8fCBcIlwiKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cblxuICBnZXRMYWJlbEZvcklyaShpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbGlua2VkRW50aXRpZXMgPSB0aGlzLnByb3BlcnRpZXNbXCJsaW5rZWRFbnRpdGllc1wiXTtcbiAgICBpZiAobGlua2VkRW50aXRpZXMpIHtcbiAgICAgIGNvbnN0IGxhYmVsOiBSZWlmaWVkPHN0cmluZz5bXSA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgICAgbGlua2VkRW50aXRpZXNbaWRdPy5sYWJlbFxuICAgICAgKTtcbiAgICAgIHJldHVybiBsYWJlbFswXT8udmFsdWUgfHwgaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gIH1cblxuICBhYnN0cmFjdCBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXTtcblxuICBnZXRBbm5vdGF0aW9uQnlJZChpZDogc3RyaW5nKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uKGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW2lkXSkpO1xuICB9XG5cbiAgZ2V0QW5ub3RhdGlvblRpdGxlQnlJZChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMYWJlbEZvcklyaShpZCk7XG4gIH1cblxuICBnZXRMaW5rZWRFbnRpdGllcygpOiBMaW5rZWRFbnRpdGllcyB7XG4gICAgcmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh0aGlzLnByb3BlcnRpZXNbXCJsaW5rZWRFbnRpdGllc1wiXSB8fCB7fSk7XG4gIH1cblxuICBnZXREZXBpY3Rpb25VcmwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3Rpb25cIl0pIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGlvblwiXTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgT0xTNFRoaW5nIH0gZnJvbSBcIi4vT0xTNFRoaW5nXCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzRFbnRpdHkgZXh0ZW5kcyBPTFM0VGhpbmcgaW1wbGVtZW50cyBFbnRpdHkge1xuICBhYnN0cmFjdCBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXTtcblxuICBpc0Nhbm9uaWNhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXNEZWZpbmluZ09udG9sb2d5XCJdO1xuICB9XG5cbiAgaXNEZXByZWNhdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkZXByZWNhdGVkXCJdO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25WZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgLy8gb25seSBzdXBwb3J0cyBFRk8gZm9yIG5vd1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vb2Jzb2xldGVkX2luX3ZlcnNpb25cIl07XG4gIH1cblxuICBnZXREZXByZWNhdGlvblJlYXNvbigpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDIzMVwiXVxuICAgICkuY29uY2F0KFxuICAgICAgUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vcmVhc29uX2Zvcl9vYnNvbGVzY2VuY2VcIl1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZXBsYWNlbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAxMDAwMDFcIl07XG4gIH1cblxuICBnZXRSZWxhdGVkRnJvbSgpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJyZWxhdGVkRnJvbVwiXSk7XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbkFzQXJyYXkoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSk7XG4gIH1cblxuICBoYXNEaXJlY3RDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzRGlyZWN0Q2hpbGRyZW5cIl07XG4gIH1cblxuICBoYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW5cIl07XG4gIH1cblxuICBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RDaGlsZHJlbigpIHx8IHRoaXMuaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1cIl0pO1xuICB9XG5cbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRDcm9zc1JlZmVyZW5jZXMoKTogYW55W10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1xuICAgICAgXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNoYXNEYlhyZWZcIlxuICAgIF0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0RGVmaW5lZEJ5KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImRlZmluZWRCeVwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRJc0RlZmluaW5nT250b2xvZ3koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSB8fCB1bmRlZmluZWQpIGFzIGJvb2xlYW47XG4gIH1cblxuICBnZXRTaG9ydEZvcm0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY3VyaWVcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRGb3JtXCJdO1xuICB9XG5cbiAgZ2V0RGVwaWN0ZWRCeSgpOiBSZWlmaWVkPHN0cmluZz5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihbXG4gICAgICAuLi5hc0FycmF5KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGVkX2J5XCJdIHx8IFtdXG4gICAgICApLFxuICAgICAgLi4uYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGlvblwiXSB8fCBbXSksXG4gICAgXSk7XG4gIH1cblxuICBpc1ByZWRpY2F0ZUZyb21JbmZvcm1hbFZvY2FidWxhcnkocHJlZGljYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzAyL3Nrb3MvY29yZSNcIikgfHxcbiAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zL1wiKSB8fFxuICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiKSB8fFxuICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vc2NoZW1hLm9yZy9cIilcbiAgICApO1xuICB9XG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBkZWZpbml0aW9uUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblByb3BlcnR5XCJdKTtcbiAgICBjb25zdCBzeW5vbnltUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wic3lub255bVByb3BlcnR5XCJdKTtcbiAgICBjb25zdCBoaWVyYXJjaGljYWxQcm9wZXJ0aWVzID0gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFByb3BlcnR5XCJdXG4gICAgKTtcbiAgICBjb25zdCBhbm5vdGF0aW9uUHJlZGljYXRlcyA9IG5ldyBTZXQoKTtcblxuICAgIGZvciAoY29uc3QgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICAvLyB0aGlzIGlzIGhhbmRsZWQgZXhwbGljaXRseSBpbiBFbnRpdHlQYWdlXG4gICAgICBpZiAocHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiKSkgY29udGludWU7XG5cbiAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBleHBsaWNpdGx5IGluIEVudGl0eVBhZ2VcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiKSBjb250aW51ZTtcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3Rpb25cIikgY29udGludWU7XG5cbiAgICAgIC8vIE9iamVjdCBwcm9wZXJ0aWVzIGFuZCBkYXRhIHByb3BlcnRpZXMgYXJlIG5vdCBhbm5vdGF0aW9uIHByb3BlcnRpZXMsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBpbmZvcm1hbCB2b2NhYnVsYXJpZXMuXG4gICAgICBpZiAoIXRoaXMuaXNQcmVkaWNhdGVGcm9tSW5mb3JtYWxWb2NhYnVsYXJ5KHByZWRpY2F0ZSkpIHtcbiAgICAgICAgY29uc3QgbGlua2VkRW50aXR5ID0gdGhpcy5nZXRMaW5rZWRFbnRpdGllcygpLmdldChwcmVkaWNhdGUpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbGlua2VkRW50aXR5ICE9IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGxpbmtlZEVudGl0eS50eXBlLmluZGV4T2YoXCJvYmplY3RQcm9wZXJ0eVwiKSAhPT0gLTFcbiAgICAgICAgKVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbGlua2VkRW50aXR5ICE9IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGxpbmtlZEVudGl0eS50eXBlLmluZGV4T2YoXCJkYXRhUHJvcGVydHlcIikgIT09IC0xXG4gICAgICAgIClcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIHZhbHVlIHdhcyBhbHJlYWR5IGludGVycHJldGVkIGFzIGRlZmluaXRpb24vc3lub255bS9oaWVyYXJjaGljYWwsIGRvXG4gICAgICAvLyBub3QgaW5jbHVkZSBpdCBhcyBhbiBhbm5vdGF0aW9uXG4gICAgICBpZiAoXG4gICAgICAgIGRlZmluaXRpb25Qcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTEgfHxcbiAgICAgICAgc3lub255bVByb3BlcnRpZXMuaW5kZXhPZihwcmVkaWNhdGUpICE9PSAtMSB8fFxuICAgICAgICBoaWVyYXJjaGljYWxQcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYW55dGhpbmcgaW4gdGhlIHJkZiwgcmRmcywgb3dsIG5hbWVzcGFjZXMgYXJlbid0IGRpc3BsYXllZCBpbiB0aGUgYW5ub3RhdGlvbnMgc2VjdGlvbi4uLlxuICAgICAgaWYgKFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjXCIpXG4gICAgICApIHtcbiAgICAgICAgLy8gLi4uYXBhcnQgZnJvbSB0aGVzZSBvbmVzXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI2NvbW1lbnRcIiAmJlxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc2VlQWxzb1wiICYmXG4gICAgICAgICAgLy8gcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2hhc0tleVwiICYmXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2Rpc2pvaW50VW5pb25PZlwiXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHdoaWxlIGluIGdlbmVyYWwgb2JvSW5Pd2wgbmFtZXNwYWNlIHByb3BlcnRpZXMgYXJlIGFubm90YXRpb25zLCBzb21lXG4gICAgICAvLyBvZiB0aGVtIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheVxuICAgICAgLy9cbiAgICAgIGlmIChcbiAgICAgICAgcHJlZGljYXRlID09PSBcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2luU3Vic2V0XCIgfHxcbiAgICAgICAgcHJlZGljYXRlID09PSBcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2lkXCJcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYW5ub3RhdGlvblByZWRpY2F0ZXMuYWRkKHByZWRpY2F0ZSk7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coXCJBUHNcIik7XG4gICAgLy8gY29uc29sZS5kaXIoQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykpO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICBnZXROdW1EZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1EaXJlY3REZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1EaXJlY3REZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIGdldEhpZXJhcmNoaWNhbFBhcmVudFJlaWZpY2F0aW9uQXhpb21zKHBhcmVudElyaTogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBoaWVyYXJjaGljYWxQYXJlbnRzID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsUGFyZW50XCJdXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgcCBvZiBoaWVyYXJjaGljYWxQYXJlbnRzKSB7XG4gICAgICBpZiAocC52YWx1ZSA9PT0gcGFyZW50SXJpKSB7XG4gICAgICAgIHJldHVybiBwLmdldE1ldGFkYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgQ2xhc3MgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgT0xTNEVudGl0eSB9IGZyb20gXCIuL09MUzRFbnRpdHlcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTNENsYXNzIGV4dGVuZHMgT0xTNEVudGl0eSBpbXBsZW1lbnRzIENsYXNzIHtcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQYXJlbnRcIl0pO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViQ2xhc3NPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNlcXVpdmFsZW50Q2xhc3NcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0RGlzam9pbnRXaXRoKCkge1xuICAgIHJldHVybiBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlzam9pbnRXaXRoXCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldEhhc0tleSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXlcIl0pO1xuICB9XG5cbiAgZ2V0U3Vic2V0cygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGFzQXJyYXkoXG4gICAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2luU3Vic2V0XCJdXG4gICAgICApIHx8IFtdXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IE9MUzRFbnRpdHkgfSBmcm9tIFwiLi9PTFM0RW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzRQcm9wZXJ0eSBleHRlbmRzIE9MUzRFbnRpdHkgaW1wbGVtZW50cyBQcm9wZXJ0eSB7XG4gIGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViUHJvcGVydHlPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRQcm9wZXJ0eVwiXVxuICAgICk7XG4gIH1cblxuICBnZXREaXNqb2ludFdpdGgoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eURpc2pvaW50V2l0aFwiXVxuICAgICk7XG4gIH1cblxuICBnZXRJbnZlcnNlT2YoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW52ZXJzZU9mXCJdKTtcbiAgfVxuXG4gIGdldERvbWFpbigpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNkb21haW5cIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0UmFuZ2UoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjcmFuZ2VcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlDaGFpbnMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eUNoYWluQXhpb21cIl1cbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgSW5kaXZpZHVhbCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBPTFM0RW50aXR5IH0gZnJvbSBcIi4vT0xTNEVudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0SW5kaXZpZHVhbCBleHRlbmRzIE9MUzRFbnRpdHkgaW1wbGVtZW50cyBJbmRpdmlkdWFsIHtcbiAgZ2V0UGFyZW50cygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRpcmVjdFBhcmVudFwiXSk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oW10pO1xuICB9XG5cbiAgZ2V0RGlmZmVyZW50RnJvbSgpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RpZmZlcmVudEZyb21cIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0U2FtZUFzKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3NhbWVBc1wiXSk7XG4gIH1cblxuICBnZXRJbmRpdmlkdWFsVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJkZlR5cGVzOiBhbnkgPSB0aGlzLmdldFJkZlR5cGVzKCk7XG5cbiAgICBpZiAoIXJkZlR5cGVzIHx8ICFBcnJheS5pc0FycmF5KHJkZlR5cGVzKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiByZGZUeXBlcy5maWx0ZXIoXG4gICAgICAodDogYW55KSA9PlxuICAgICAgICB0ICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI05hbWVkSW5kaXZpZHVhbFwiICYmXG4gICAgICAgICghKHR5cGVvZiB0ID09PSBcInN0cmluZ1wiKSB8fFxuICAgICAgICAgICF0LnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpKVxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBPbnRvbG9neSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBPTFM0VGhpbmcgfSBmcm9tIFwiLi9PTFM0VGhpbmdcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTNE9udG9sb2d5IGV4dGVuZHMgT0xTNFRoaW5nIGltcGxlbWVudHMgT250b2xvZ3kge1xuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWVzID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1widGl0bGVcIl0gfHwgXCJcIlxuICAgICk7XG4gICAgcmV0dXJuIChuYW1lc1swXSAmJiBuYW1lc1swXS52YWx1ZSkgfHwgdGhpcy5nZXRPbnRvbG9neUlkKCk7XG4gIH1cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbnMgPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAoZGVzY3JpcHRpb25zWzBdICYmIGRlc2NyaXB0aW9uc1swXS52YWx1ZSkgfHwgXCJcIjtcbiAgfVxuXG4gIGdldENyZWF0b3JzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL2NyZWF0b3JcIl0pO1xuICB9XG5cbiAgZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzb3VyY2VGaWxlVGltZXN0YW1wXCJdO1xuICB9XG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mRW50aXRpZXNcIl0pO1xuICB9XG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZDbGFzc2VzXCJdKTtcbiAgfVxuICBnZXROdW1Qcm9wZXJ0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mUHJvcGVydGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtSW5kaXZpZHVhbHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZJbmRpdmlkdWFsc1wiXSk7XG4gIH1cbiAgZ2V0TG9nb1VSTCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJkZXBpY3RlZF9ieVwiXTtcbiAgfVxuICBnZXRPbnRvbG9neVB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lfcHVybFwiXTtcbiAgfVxuICBnZXRIb21lcGFnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJob21lcGFnZVwiXTtcbiAgfVxuICBnZXRNYWlsaW5nTGlzdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJtYWlsaW5nX2xpc3RcIl07XG4gIH1cbiAgZ2V0VHJhY2tlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ0cmFja2VyXCJdO1xuICB9XG4gIGdldFZlcnNpb25JcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdmVyc2lvbklSSVwiXTtcbiAgfVxuICBnZXRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3ZlcnNpb25JbmZvXCJdO1xuICB9XG4gIGdldFZlcnNpb25Gcm9tSXJpKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmVyc2lvbklyaSA9IHRoaXMuZ2V0VmVyc2lvbklyaSgpO1xuICAgIGlmICghdmVyc2lvbklyaSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgdmVyc2lvbkZyb21EYXRlID0gdmVyc2lvbklyaS5tYXRjaCgvXFxkezR9LVxcZHsyfS1cXGR7Mn0vKTtcblxuICAgIGlmICh2ZXJzaW9uRnJvbURhdGUgJiYgdmVyc2lvbkZyb21EYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbURhdGVbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZlcnNpb25Gcm9tTnVtYmVyID0gdmVyc2lvbklyaS5tYXRjaCgvXFwvdltkLl0uKlxcLy8pO1xuICAgICAgcmV0dXJuIHZlcnNpb25Gcm9tTnVtYmVyXG4gICAgICAgID8gdmVyc2lvbkZyb21OdW1iZXJbMF0ucmVwbGFjZUFsbChcIi9cIiwgXCJcIikucmVwbGFjZShcInZcIiwgXCJcIilcbiAgICAgICAgOiBcIlwiO1xuICAgIH1cbiAgfVxuICBnZXRMb2FkZWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibG9hZGVkXCJdO1xuICB9XG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBhbm5vdGF0aW9uUHJlZGljYXRlcyA9IG5ldyBTZXQoKTtcblxuICAgIGZvciAoY29uc3QgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAocHJlZGljYXRlID09PSBcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDcwMFwiKSB7XG4gICAgICAgIC8vIFwiaGFzIHByZWZlcnJlZCByb290IHRlcm1cIlxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYW55dGhpbmcgaW4gdGhlIHJkZiwgcmRmcywgb3dsIG5hbWVzcGFjZXMgYXJlbid0IGNvbnNpZGVyZWQgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChcbiAgICAgICAgIShcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikgfHxcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIikgfHxcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1wiKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgYW5ub3RhdGlvblByZWRpY2F0ZXMuYWRkKHByZWRpY2F0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpIGFzIHN0cmluZ1tdO1xuICB9XG4gIGdldFByZWZlcnJlZFJvb3RzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoYXNQcmVmZXJyZWRSb290XCJdKTtcbiAgfVxuICBnZXRQcmVmZXJyZWRQcmVmaXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wicHJlZmVycmVkUHJlZml4XCJdO1xuICB9XG5cbiAgZ2V0TGFuZ3VhZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJsYW5ndWFnZVwiXSk7XG4gIH1cbiAgZ2V0SW1wb3J0c0Zyb20oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImltcG9ydHNGcm9tXCJdKTtcbiAgfVxuICBnZXRFeHBvcnRzVG8oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImV4cG9ydHNUb1wiXSk7XG4gIH1cbiAgZ2V0TGljZW5zZSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxpY2Vuc2VcIl07XG4gIH1cbiAgZ2V0QWxsb3dEb3dubG9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiYWxsb3dEb3dubG9hZFwiXTtcbiAgfVxufVxuIiwgImltcG9ydCB7IE9udG9sb2dpZXMgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgT0xTNE9udG9sb2d5IH0gZnJvbSBcIi4vT0xTNE9udG9sb2d5XCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0T250b2xvZ2llcyBpbXBsZW1lbnRzIE9udG9sb2dpZXMge1xuICBwcm9wZXJ0aWVzOiBPTFM0T250b2xvZ3lbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBPTFM0T250b2xvZ3lbXSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRUb3RhbE9udG9sb2dpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDtcbiAgfVxuXG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bUVudGl0aWVzKCksXG4gICAgICAwXG4gICAgKTtcbiAgfVxuXG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZShcbiAgICAgICh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtQ2xhc3NlcygpLFxuICAgICAgMFxuICAgICk7XG4gIH1cblxuICBnZXROdW1Qcm9wZXJ0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bVByb3BlcnRpZXMoKSxcbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgZ2V0TnVtSW5kaXZpZHVhbHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZShcbiAgICAgICh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtSW5kaXZpZHVhbHMoKSxcbiAgICAgIDBcbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgT0xTM09udG9sb2d5LFxuICBPTFMzQ2xhc3MsXG4gIE9MUzNQcm9wZXJ0eSxcbiAgT0xTM0luZGl2aWR1YWwsXG59IGZyb20gXCIuL29sczMtbW9kZWxcIjtcbmltcG9ydCB7XG4gIE9MUzRPbnRvbG9neSxcbiAgT0xTNENsYXNzLFxuICBPTFM0UHJvcGVydHksXG4gIE9MUzRJbmRpdmlkdWFsLFxufSBmcm9tIFwiLi9vbHM0LW1vZGVsXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IFRoaW5nVHlwZU5hbWUgfSBmcm9tIFwiLi9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgYXNBcnJheSwgaW5mZXJUeXBlRnJvbVR5cGVBcnJheSB9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9kZWxPYmplY3QocmVzcG9uc2U6IGFueSkge1xuICBsZXQgdXNlTGVnYWN5OiBib29sZWFuO1xuICBpZiAoXG4gICAgcmVzcG9uc2VbXCJfZW1iZWRkZWRcIl0gIT09IHVuZGVmaW5lZCB8fFxuICAgIHJlc3BvbnNlW1wibnVtYmVyT2ZUZXJtc1wiXSAhPT0gdW5kZWZpbmVkXG4gIClcbiAgICB1c2VMZWdhY3kgPSB0cnVlO1xuICBlbHNlIGlmIChcbiAgICByZXNwb25zZVtcImVsZW1lbnRzXCJdICE9PSB1bmRlZmluZWQgfHxcbiAgICByZXNwb25zZVtcIm51bWJlck9mQ2xhc3Nlc1wiXSAhPT0gdW5kZWZpbmVkXG4gIClcbiAgICB1c2VMZWdhY3kgPSBmYWxzZTtcbiAgZWxzZVxuICAgIHRocm93IEVycm9yKFxuICAgICAgYFJlc3BvbnNlIHN0cnVjdHVyZSBkb2VzIG5vdCBjb3JyZWxhdGUgdG8gYW55IG9mIHRoZSBmZWF0dXJlZCByZXNwb25zZSBzdHJ1Y3R1cmVzOiBcXG4gJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgcmVzcG9uc2VcbiAgICAgICl9YFxuICAgICk7XG5cbiAgbGV0IGVudGl0eVR5cGU6IFRoaW5nVHlwZU5hbWUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGlmICh1c2VMZWdhY3kpIHtcbiAgICBpZiAocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW50aXR5VHlwZSA9IFwib250b2xvZ3lcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1widGVybXNcIl0gIT09IHVuZGVmaW5lZCkgZW50aXR5VHlwZSA9IFwidGVybVwiO1xuICAgICAgZWxzZSBpZiAocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJwcm9wZXJ0aWVzXCJdICE9PSB1bmRlZmluZWQpXG4gICAgICAgIGVudGl0eVR5cGUgPSBcInByb3BlcnR5XCI7XG4gICAgICBlbHNlIGlmIChyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcImluZGl2aWR1YWxzXCJdICE9PSB1bmRlZmluZWQpXG4gICAgICAgIGVudGl0eVR5cGUgPSBcImluZGl2aWR1YWxcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHJlc3BvbnNlW1wiZWxlbWVudHNcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW50aXR5VHlwZSA9IFwib250b2xvZ3lcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJlc3BvbnNlW1wiZWxlbWVudHNcIl1bMF0gPT09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoXCJFbXB0eSByZXNwb25zZS5cIik7XG5cbiAgICAgIGVudGl0eVR5cGUgPSBpbmZlclR5cGVGcm9tVHlwZUFycmF5KHJlc3BvbnNlW1wiZWxlbWVudHNcIl1bMF1bXCJ0eXBlXCJdKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW50aXR5VHlwZSA9PT0gdW5kZWZpbmVkKVxuICAgIHRocm93IEVycm9yKFwiRW50aXR5IHR5cGUgY291bGQgbm90IGJlIGNvcnJlY3RseSBpbmZlcnJlZC5cIik7XG5cbiAgcmV0dXJuIGNyZWF0ZU1vZGVsT2JqZWN0V2l0aEVudGl0eVR5cGVXaXRoVXNlTGVnYWN5KFxuICAgIHJlc3BvbnNlLFxuICAgIGVudGl0eVR5cGUsXG4gICAgdXNlTGVnYWN5XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1vZGVsT2JqZWN0V2l0aEVudGl0eVR5cGVXaXRoVXNlTGVnYWN5KFxuICByZXNwb25zZTogYW55LFxuICBlbnRpdHlUeXBlOiBzdHJpbmcsXG4gIHVzZUxlZ2FjeTogYm9vbGVhblxuKTogVGhpbmcge1xuICBzd2l0Y2ggKGVudGl0eVR5cGUpIHtcbiAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgIHJldHVybiB1c2VMZWdhY3lcbiAgICAgICAgPyBuZXcgT0xTM09udG9sb2d5KHJlc3BvbnNlKVxuICAgICAgICA6IG5ldyBPTFM0T250b2xvZ3kocmVzcG9uc2UpO1xuXG4gICAgY2FzZSBcInRlcm1cIjpcbiAgICBjYXNlIFwiY2xhc3NcIjogLy8gYWxsb3cgQk9USCwgZXZlbiBpZiBpdCBzaG91bGQgYWN0dWFsbHkgYmUgXCJ0ZXJtXCJcbiAgICAgIHJldHVybiB1c2VMZWdhY3lcbiAgICAgICAgPyBuZXcgT0xTM0NsYXNzKFxuICAgICAgICAgICAgZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKFxuICAgICAgICAgICAgICBhc0FycmF5KHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1widGVybXNcIl0pLFxuICAgICAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbmV3IE9MUzRDbGFzcyhcbiAgICAgICAgICAgIGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiZWxlbWVudHNcIl0pLCB1c2VMZWdhY3kpXG4gICAgICAgICAgKTtcblxuICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgcmV0dXJuIHVzZUxlZ2FjeVxuICAgICAgICA/IG5ldyBPTFMzUHJvcGVydHkoXG4gICAgICAgICAgICBnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oXG4gICAgICAgICAgICAgIGFzQXJyYXkocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJwcm9wZXJ0aWVzXCJdKSxcbiAgICAgICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5ldyBPTFM0UHJvcGVydHkoXG4gICAgICAgICAgICBnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oYXNBcnJheShyZXNwb25zZVtcImVsZW1lbnRzXCJdKSwgdXNlTGVnYWN5KVxuICAgICAgICAgICk7XG5cbiAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgcmV0dXJuIHVzZUxlZ2FjeVxuICAgICAgICA/IG5ldyBPTFMzSW5kaXZpZHVhbChcbiAgICAgICAgICAgIGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihcbiAgICAgICAgICAgICAgYXNBcnJheShyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcImluZGl2aWR1YWxzXCJdKSxcbiAgICAgICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5ldyBPTFM0SW5kaXZpZHVhbChcbiAgICAgICAgICAgIGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiZWxlbWVudHNcIl0pLCB1c2VMZWdhY3kpXG4gICAgICAgICAgKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0ludmFsaWQgZW50aXR5IHR5cGUgXCInICtcbiAgICAgICAgICBlbnRpdHlUeXBlICtcbiAgICAgICAgICAnXCIuIE11c3QgYmUgb25lIG9mIHtcInRlcm1cIiwgXCJjbGFzc1wiLCBcIm9udG9sb2d5XCIsIFwicHJvcGVydHlcIiwgXCJpbmRpdmlkdWFsXCJ9J1xuICAgICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIEpTT04gb2YgdGhlIGVudGl0eSBpbiBpdHMgZGVmaW5pbmcgb250b2xvZ3ksIG9yLCBpZiBub3QgYXZhaWxhYmxlLCBqdXN0IHRoZSBmaXJzdCBKU09OIGluIHRoZSBhcnJheS5cbiAqIElmIG9udG9sb2d5SWQgd2FzIHByb3ZpZGVkIGluIHRoZSByZXNwb25zZSByZXF1ZXN0LCB0aGUgYXJyYXkgc2hvdWxkIG9ubHkgY29udGFpbiBvbmUgZWxlbWVudCwgdGh1cyB0aGUgZnVuY3Rpb25hbGl0eSBpcyBhcyBleHBlY3RlZCBhcyB3ZWxsXG4gKiBAcGFyYW0gZW50aXR5QXJyYXlSZXNwb25zZSB0aGUgc3ViLXJlc3BvbnNlIG9mIHRoZSBpbml0aWFsIHF1ZXJ5IHJlc3BvbnNlIGNvbnRhaW5pbmcganVzdCB0aGUgZW50aXR5IGFycmF5XG4gKiBAcGFyYW0gdXNlTGVnYWN5IGFwaSB2ZXJzaW9uIChuZWVkZWQgYmVjYXVzZSBrZXkgZ2l2aW5nIGluZm9ybWF0aW9uIGFib3V0IGRlZmluaW5nIG9udG9sb2d5IGhhcyBkaWZmZXJlbnQgbmFtZXMgaW4gYm90aCB2ZXJzaW9ucylcbiAqIEBwYXJhbSBvbnRvbG9neUlkIGlmIHNwZWNpZmllZCwgcmV0dXJucyB0aGUgZW50aXR5IGluIHRoaXMgb250b2xvZ3kgaWYgYXZhaWxhYmxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oXG4gIGVudGl0eUFycmF5UmVzcG9uc2U6IGFueVtdLFxuICB1c2VMZWdhY3k6IGJvb2xlYW4sXG4gIG9udG9sb2d5SWQ/OiBzdHJpbmdcbikge1xuICBpZiAob250b2xvZ3lJZCkge1xuICAgIGNvbnN0IGVudGl0eUluT250b2xvZ3kgPSBhc0FycmF5KGVudGl0eUFycmF5UmVzcG9uc2UpLmZpbHRlcihcbiAgICAgIChlbnRpdHkpID0+XG4gICAgICAgICh1c2VMZWdhY3kgPyBlbnRpdHlbXCJvbnRvbG9neV9uYW1lXCJdIDogZW50aXR5W1wib250b2xvZ3lJZFwiXSkgPT1cbiAgICAgICAgb250b2xvZ3lJZFxuICAgICk7XG4gICAgaWYgKGVudGl0eUluT250b2xvZ3kubGVuZ3RoID4gMCkgcmV0dXJuIGVudGl0eUluT250b2xvZ3lbMF07XG4gICAgZWxzZVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYEludmFsaWQgb250b2xvZ3lJZCAke29udG9sb2d5SWR9IGZvciBnaXZlbiBlbnRpdHlBcnJheVJlc3BvbnNlLmBcbiAgICAgICk7XG4gIH1cblxuICBjb25zdCBkZWZpbmluZ09udG9sb2d5QXJyID0gYXNBcnJheShlbnRpdHlBcnJheVJlc3BvbnNlKS5maWx0ZXIoKGVudGl0eSkgPT5cbiAgICB1c2VMZWdhY3kgPyBlbnRpdHlbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSA6IGVudGl0eVtcImlzRGVmaW5pbmdPbnRvbG9neVwiXVxuICApO1xuICBpZiAoZGVmaW5pbmdPbnRvbG9neUFyci5sZW5ndGggPiAwKSByZXR1cm4gZGVmaW5pbmdPbnRvbG9neUFyclswXTtcbiAgZWxzZSBpZiAoZW50aXR5QXJyYXlSZXNwb25zZS5sZW5ndGggPiAwKSByZXR1cm4gZW50aXR5QXJyYXlSZXNwb25zZVswXTtcbiAgZWxzZSB0aHJvdyBFcnJvcihcIkVtcHR5IHJlc3BvbnNlLlwiKTtcbn1cbiIsICJpbXBvcnQgeyBFbnRpdHlUeXBlTmFtZSB9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgSGllcmFyY2h5QnVpbGRlciB9IGZyb20gXCIuLi8uLi9hcGkvSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHsgRW50aXR5RGF0YSB9IGZyb20gXCIuLi8uLi9hcHAvdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgUGFyZW50Q2hpbGRSZWxhdGlvbiA9IHtcbiAgY2hpbGRJcmk6IHN0cmluZztcbiAgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNsYXNzIFRyZWVOb2RlIHtcbiAgZW50aXR5RGF0YTogRW50aXR5RGF0YTtcbiAgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nO1xuICBsb2FkZWRDaGlsZHJlbjogVHJlZU5vZGVbXTtcbiAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gIGxvYWRpbmc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBlbnRpdHlEYXRhXG4gICAqIEBwYXJhbSBjaGlsZFJlbGF0aW9uVG9QYXJlbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKGVudGl0eURhdGE6IEVudGl0eURhdGEsIGNoaWxkUmVsYXRpb25Ub1BhcmVudD86IHN0cmluZykge1xuICAgIHRoaXMuZW50aXR5RGF0YSA9IGVudGl0eURhdGE7XG4gICAgdGhpcy5sb2FkZWRDaGlsZHJlbiA9IFtdO1xuICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNoaWxkUmVsYXRpb25Ub1BhcmVudCA9IGNoaWxkUmVsYXRpb25Ub1BhcmVudDtcbiAgfVxuXG4gIGFkZENoaWxkKGNoaWxkOiBUcmVlTm9kZSkge1xuICAgIHRoaXMubG9hZGVkQ2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gIH1cbn1cblxuY29uc3QgREVGQVVMVF9JTkNMVURFX09CU09MRVRFX0VOVElUSUVTOiBib29sZWFuID0gZmFsc2UgYXMgY29uc3Q7XG5jb25zdCBERUZBVUxUX0tFRVBfRVhQQU5TSU9OX1NUQVRFOiBib29sZWFuID0gdHJ1ZSBhcyBjb25zdDtcblxuZXhwb3J0IGNsYXNzIEhpZXJhcmNoeSB7XG4gIHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+O1xuICBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+O1xuICBhbGxDaGlsZHJlblByZXNlbnQ6IFNldDxzdHJpbmc+O1xuICByb290czogVHJlZU5vZGVbXTsgLy8gc3RvcmVzIHRoZSB0cmVlIGhpZXJhcmNoeVxuICBwcm90ZWN0ZWQgYXBpOiBIaWVyYXJjaHlCdWlsZGVyO1xuICBvbnRvbG9neUlkOiBzdHJpbmc7XG5cbiAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGJvb2xlYW4gPSBERUZBVUxUX0lOQ0xVREVfT0JTT0xFVEVfRU5USVRJRVM7XG4gIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlTmFtZTtcbiAga2VlcEV4cGFuc2lvblN0YXRlczogYm9vbGVhbiA9IERFRkFVTFRfS0VFUF9FWFBBTlNJT05fU1RBVEU7XG4gIHByb3RlY3RlZCB1c2VMZWdhY3k/OiBib29sZWFuO1xuXG4gIG1haW5FbnRpdHlJcmk/OiBzdHJpbmc7IC8vIHRvIGhpZ2hsaWdodCBpdCBpbiB0aGUgaGllcmFyY2h5XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IHtcbiAgICBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPjtcbiAgICBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+O1xuICAgIGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz47XG4gICAgcm9vdHM6IFRyZWVOb2RlW107XG4gICAgYXBpOiBIaWVyYXJjaHlCdWlsZGVyO1xuICAgIG9udG9sb2d5SWQ6IHN0cmluZztcbiAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcz86IGJvb2xlYW47XG4gICAgZW50aXR5VHlwZT86IEVudGl0eVR5cGVOYW1lO1xuICAgIG1haW5FbnRpdHlJcmk/OiBzdHJpbmc7XG4gICAga2VlcEV4cGFuc2lvblN0YXRlcz86IGJvb2xlYW47XG4gICAgdXNlTGVnYWN5PzogYm9vbGVhbjtcbiAgfSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLFxuICAgICAgZW50aXRpZXNEYXRhLFxuICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50LFxuICAgICAgcm9vdHMsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICBhcGksXG4gICAgICBtYWluRW50aXR5SXJpLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICB1c2VMZWdhY3ksXG4gICAgfSA9IHByb3BzO1xuXG4gICAgdGhpcy5wYXJlbnRDaGlsZFJlbGF0aW9ucyA9IHBhcmVudENoaWxkUmVsYXRpb25zO1xuICAgIHRoaXMuZW50aXRpZXNEYXRhID0gZW50aXRpZXNEYXRhO1xuICAgIHRoaXMuYWxsQ2hpbGRyZW5QcmVzZW50ID0gYWxsQ2hpbGRyZW5QcmVzZW50O1xuICAgIHRoaXMucm9vdHMgPSByb290cztcbiAgICBpZiAoaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgIT0gdW5kZWZpbmVkKVxuICAgICAgdGhpcy5pbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzO1xuICAgIGlmIChrZWVwRXhwYW5zaW9uU3RhdGVzICE9IHVuZGVmaW5lZClcbiAgICAgIHRoaXMua2VlcEV4cGFuc2lvblN0YXRlcyA9IGtlZXBFeHBhbnNpb25TdGF0ZXM7XG4gICAgdGhpcy5hcGkgPSBhcGk7XG4gICAgdGhpcy5tYWluRW50aXR5SXJpID0gbWFpbkVudGl0eUlyaTtcbiAgICB0aGlzLmVudGl0eVR5cGUgPSBlbnRpdHlUeXBlO1xuICAgIHRoaXMub250b2xvZ3lJZCA9IG9udG9sb2d5SWQ7XG4gICAgaWYgKHVzZUxlZ2FjeSAhPSB1bmRlZmluZWQpIHRoaXMudXNlTGVnYWN5ID0gdXNlTGVnYWN5O1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlcyB0aGUgZW50cmllcyBvZiBgdGhpcy5wYXJlbnRDaGlsZFJlbGF0aW9ucyhub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpYCBpbnRvIGBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5gLiBIZXJlLFxuICAgKiBvbmx5IG5vdCBhbHJlYWR5IHByZXNlbnQgY2hpbGRyZW4gYXJlIGFkZGVkIHRvIGtlZXAgdGhlIGV4cGFuc2lvbiBzdGF0ZSBvZiB0aGUgYWxyZWFkeSBsb2FkZWQgY2hpbGRyZW4uXG4gICAqIGBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5gIGlzIHNvcnRlZCBhbHBoYWJldGljYWxseSBieSBkaXNwbGF5ZWQgbGFiZWxzIGFmdGVyd2FyZC5cbiAgICpcbiAgICogQVNTVU1QVElPTlM6XG4gICAqIDEuIGB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zLmdldChub2RlVG9FeHBhbmQpYCBpcyBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgYnkgZGlzcGxheWVkIGxhYmVsc1xuICAgKlxuICAgKiBAcGFyYW0gbm9kZVRvRXhwYW5kIHRoZSBub2RlIGluc2lkZSB0aGUgaGllcmFyY2h5IChgdGhpcy5yb290c2ApIHRvIG1lcmdlIHRoZSBjaGlsZHJlbiBpbnRvXG4gICAqL1xuICBwcml2YXRlIG1lcmdlQ2hpbGRyZW5JbnRvTG9hZGVkQ2hpbGRyZW4obm9kZVRvRXhwYW5kOiBUcmVlTm9kZSkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5wYXJlbnRDaGlsZFJlbGF0aW9ucy5nZXQobm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpKTtcbiAgICBpZiAoY2hpbGRyZW4gPT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBwYXJlbnRDaGlsZFJlbGF0aW9ucyBoYXMgbm8gZW50cnkgZm9yIGtleSBcIiR7bm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpfVwiIGFsdGhvdWdoIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi5gXG4gICAgICApO1xuXG4gICAgbGV0IGlMb2FkZWRDaGlsZHJlbiA9IDA7XG4gICAgY29uc3QgbnVtTG9hZGVkQ2hpbGRyZW4gPSBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoOyAvLyBpbml0aWFsIGxlbmd0aFxuICAgIGxldCBpQ2hpbGRyZW4gPSAwO1xuXG4gICAgd2hpbGUgKGlDaGlsZHJlbiA8IGNoaWxkcmVuLmxlbmd0aCAmJiBpTG9hZGVkQ2hpbGRyZW4gPCBudW1Mb2FkZWRDaGlsZHJlbikge1xuICAgICAgaWYgKFxuICAgICAgICBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5baUxvYWRlZENoaWxkcmVuXS5lbnRpdHlEYXRhLmlyaSA9PVxuICAgICAgICBjaGlsZHJlbltpQ2hpbGRyZW5dLmNoaWxkSXJpXG4gICAgICApIHtcbiAgICAgICAgaUxvYWRlZENoaWxkcmVuKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICBub2RlVG9FeHBhbmQuYWRkQ2hpbGQoXG4gICAgICAgICAgbmV3IFRyZWVOb2RlKFxuICAgICAgICAgICAgdGhpcy5lbnRpdGllc0RhdGEuZ2V0KGNoaWxkcmVuW2lDaGlsZHJlbl0uY2hpbGRJcmkpISxcbiAgICAgICAgICAgIGNoaWxkcmVuW2lDaGlsZHJlbl0uY2hpbGRSZWxhdGlvblRvUGFyZW50XG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaUNoaWxkcmVuKys7XG4gICAgfVxuICAgIHdoaWxlIChpQ2hpbGRyZW4gPCBjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICBub2RlVG9FeHBhbmQuYWRkQ2hpbGQoXG4gICAgICAgIG5ldyBUcmVlTm9kZShcbiAgICAgICAgICB0aGlzLmVudGl0aWVzRGF0YS5nZXQoY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZElyaSkhLFxuICAgICAgICAgIGNoaWxkcmVuW2lDaGlsZHJlbl0uY2hpbGRSZWxhdGlvblRvUGFyZW50XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBpQ2hpbGRyZW4rKztcbiAgICB9XG5cbiAgICAvLyBzb3J0IGFscmVhZHkgbG9hZGVkIGNoaWxkcmVuIGluIGNvcnJlY3RseVxuICAgIGZvciAoXG4gICAgICBsZXQgaUxvYWRlZENoaWxkcmVuID0gbnVtTG9hZGVkQ2hpbGRyZW4gLSAxO1xuICAgICAgaUxvYWRlZENoaWxkcmVuID49IDA7XG4gICAgICBpTG9hZGVkQ2hpbGRyZW4tLVxuICAgICkge1xuICAgICAgZm9yIChcbiAgICAgICAgbGV0IGN1cnJJZHggPSBpTG9hZGVkQ2hpbGRyZW4gKyAxO1xuICAgICAgICBjdXJySWR4IDwgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgY3VycklkeCsrXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY3Vyck5vZGUgPSBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeF07XG4gICAgICAgIGNvbnN0IHByZXZOb2RlID0gbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuW2N1cnJJZHggLSAxXTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGN1cnJOb2RlLmVudGl0eURhdGEubGFiZWwgfHwgY3Vyck5vZGUuZW50aXR5RGF0YS5pcmkpLmxvY2FsZUNvbXBhcmUoXG4gICAgICAgICAgICBwcmV2Tm9kZS5lbnRpdHlEYXRhLmxhYmVsIHx8IHByZXZOb2RlLmVudGl0eURhdGEuaXJpXG4gICAgICAgICAgKSA8IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuW2N1cnJJZHhdID0gcHJldk5vZGU7XG4gICAgICAgICAgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuW2N1cnJJZHggLSAxXSA9IGN1cnJOb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xvc2VOb2RlKG5vZGVUb0Nsb3NlOiBUcmVlTm9kZSkge1xuICAgIGlmICghdGhpcy5rZWVwRXhwYW5zaW9uU3RhdGVzKSB7XG4gICAgICBub2RlVG9DbG9zZS5sb2FkZWRDaGlsZHJlbiA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGV4cGFuc2lvbiBvZiBgbm9kZVRvRXhwYW5kYCBpcyBhdmFpbGFibGUgKGkuZS4gdGhlcmUgYXJlIGFscmVhZHkgY2hpbGRyZW4gbG9hZGVkKSBhbmQgZmV0Y2hlcyBpdCBpZiBub3QuXG4gICAqIEByZXR1cm4gYm9vbGVhbiBgdHJ1ZWAgaWYgaW5mb3JtYXRpb24gaGFkIHRvIGJlIGZldGNoZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBhc3luYyBmZXRjaEluZm9ybWF0aW9uRm9yRXhwYW5zaW9uKG5vZGVUb0V4cGFuZDogVHJlZU5vZGUpIHtcbiAgICBpZiAoIW5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmhhc0NoaWxkcmVuKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBOb2RlIGNvbnRhaW5pbmcgaXJpPVwiJHtub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcml9XCIgY291bGQgbm90IGJlIGV4cGFuZGVkOiBFbnRpdHkgaXMgbm90IGV4cGFuZGFibGUuYFxuICAgICAgKTtcblxuICAgIGNvbnN0IGFsbENoaWxkcmVuUHJlc2VudCA9IHRoaXMuYWxsQ2hpbGRyZW5QcmVzZW50LmhhcyhcbiAgICAgIG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaVxuICAgICk7XG4gICAgY29uc3Qgbm9kZVBhcmVudENoaWxkUmVsYXRpb25zID1cbiAgICAgIHRoaXMucGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSkgfHwgW107XG4gICAgaWYgKFxuICAgICAgIWFsbENoaWxkcmVuUHJlc2VudCB8fFxuICAgICAgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuLmxlbmd0aCA8PSBub2RlUGFyZW50Q2hpbGRSZWxhdGlvbnMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBpZiAoIWFsbENoaWxkcmVuUHJlc2VudCkge1xuICAgICAgICAvLyBkeW5hbWljYWxseSBsb2FkIGNoaWxkcmVuIGZyb20gYXBpXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuOiBFbnRpdHlEYXRhW10gPSAoXG4gICAgICAgICAgYXdhaXQgdGhpcy5hcGkubG9hZEhpZXJhcmNoeUNoaWxkcmVuKHtcbiAgICAgICAgICAgIG5vZGVUb0V4cGFuZDogbm9kZVRvRXhwYW5kLFxuICAgICAgICAgICAgZW50aXR5VHlwZTogdGhpcy5lbnRpdHlUeXBlLFxuICAgICAgICAgICAgb250b2xvZ3lJZDogdGhpcy5vbnRvbG9neUlkLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHRoaXMuaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgICB1c2VMZWdhY3k6IHRoaXMudXNlTGVnYWN5LFxuICAgICAgICAgIH0pXG4gICAgICAgICkuc29ydCgoYSwgYikgPT4gKGEubGFiZWwgfHwgYS5pcmkpLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCB8fCBiLmlyaSkpO1xuXG4gICAgICAgIC8vIGFkZCBjaGlsZHJlbiB0byBwYXJlbnRDaGlsZFJlbGF0aW9ucyBmb3IgaXJpIG9mIG5vZGVUb0V4cGFuZFxuICAgICAgICBjb25zdCBwYXJDaGlsZFJlbDogUGFyZW50Q2hpbGRSZWxhdGlvbltdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICB0aGlzLmVudGl0aWVzRGF0YS5zZXQoY2hpbGQuaXJpLCBjaGlsZCk7XG4gICAgICAgICAgaWYgKGNoaWxkLnBhcmVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhclJlbGF0aW9uID0gY2hpbGQucGFyZW50cy5maWx0ZXIoXG4gICAgICAgICAgICAgIChwYXIpID0+IHBhci52YWx1ZSA9PSBub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwYXJDaGlsZFJlbC5wdXNoKHtcbiAgICAgICAgICAgICAgY2hpbGRJcmk6IGNoaWxkLmlyaSxcbiAgICAgICAgICAgICAgY2hpbGRSZWxhdGlvblRvUGFyZW50OlxuICAgICAgICAgICAgICAgIHBhclJlbGF0aW9uLmxlbmd0aCA+IDAgJiYgcGFyUmVsYXRpb25bMF0uZ2V0TWV0YWRhdGEoKVxuICAgICAgICAgICAgICAgICAgPyBwYXJSZWxhdGlvblswXS5nZXRNZXRhZGF0YSgpW1wiY2hpbGRSZWxhdGlvblRvUGFyZW50XCJdXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gLy8gc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgZWxlbWVudFxuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSwgcGFyQ2hpbGRSZWwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1lcmdlQ2hpbGRyZW5JbnRvTG9hZGVkQ2hpbGRyZW4obm9kZVRvRXhwYW5kKTtcblxuICAgICAgdGhpcy5hbGxDaGlsZHJlblByZXNlbnQuYWRkKG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU2VsZWN0XCI7XG5pbXBvcnQgeyBTZWxlY3RSZXN1bHQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZWxlY3RSZXN1bHRcIjtcblxuZXhwb3J0IGNsYXNzIE9MU1NlbGVjdCBpbXBsZW1lbnRzIFNlbGVjdCB7XG4gIHByb3BlcnRpZXM6IFNlbGVjdFJlc3VsdFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IFNlbGVjdFJlc3VsdFtdKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldFRvdGFsU2VhcmNoUmVzdWx0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgU2VsZWN0UmVzdWx0IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU2VsZWN0UmVzdWx0XCI7XG5pbXBvcnQgeyBUaGluZ1R5cGVOYW1lIH0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFNTZWxlY3RSZXN1bHQgaW1wbGVtZW50cyBTZWxlY3RSZXN1bHQge1xuICBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRlc2NyaXB0aW9uKSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uLmpvaW4oXCIgXCIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lfbmFtZVwiXTtcbiAgfVxuXG4gIGdldFR5cGUoKTogVGhpbmdUeXBlTmFtZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInR5cGVcIl07XG4gIH1cblxuICBnZXRUeXBlUGx1cmFsKCk6XG4gICAgfCBcIm9udG9sb2dpZXNcIlxuICAgIHwgXCJjbGFzc2VzXCJcbiAgICB8IFwicHJvcGVydGllc1wiXG4gICAgfCBcImluZGl2aWR1YWxzXCJcbiAgICB8IFwidGVybXNcIiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgICAgcmV0dXJuIFwib250b2xvZ2llc1wiO1xuICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgIHJldHVybiBcImNsYXNzZXNcIjtcbiAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydF9mb3JtXCJdO1xuICB9XG5cbiAgZ2V0QXBpU291cmNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0QXBpU291cmNlRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuIiwgImltcG9ydCB7IFNlbGVjdFJlc3VsdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlbGVjdFJlc3VsdFwiO1xuaW1wb3J0IHsgVGhpbmdUeXBlTmFtZSB9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY2xhc3MgVHM0bmZkaVNlYXJjaFJlc3VsdCBpbXBsZW1lbnRzIFNlbGVjdFJlc3VsdCB7XG4gIHByb3BlcnRpZXM6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBhbnkpIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVzY3JpcHRpb24pKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb24uam9pbihcIiBcIik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGVzY3JpcHRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9XG5cbiAgZ2V0SXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlyaVwiXTtcbiAgfVxuXG4gIGdldExhYmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdO1xuICB9XG5cbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neVwiXTtcbiAgfVxuXG4gIGdldFR5cGUoKTogVGhpbmdUeXBlTmFtZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInR5cGVcIl07XG4gIH1cblxuICBnZXRUeXBlUGx1cmFsKCk6XG4gICAgfCBcIm9udG9sb2dpZXNcIlxuICAgIHwgXCJjbGFzc2VzXCJcbiAgICB8IFwicHJvcGVydGllc1wiXG4gICAgfCBcImluZGl2aWR1YWxzXCJcbiAgICB8IFwidGVybXNcIiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgICAgcmV0dXJuIFwib250b2xvZ2llc1wiO1xuICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgIHJldHVybiBcImNsYXNzZXNcIjtcbiAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydF9mb3JtXCJdO1xuICB9XG5cbiAgZ2V0QXBpU291cmNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzb3VyY2VfbmFtZVwiXTtcbiAgfVxuXG4gIGdldEFwaVNvdXJjZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInNvdXJjZVwiXTtcbiAgfVxufVxuIiwgImltcG9ydCBheGlvcywgeyBBeGlvc0luc3RhbmNlLCBBeGlvc1JlcXVlc3RDb25maWcgfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7XG4gIGFzQXJyYXksXG4gIGdldEVudGl0eUluT250b2xvZ3lTdWZmaXgsXG4gIGdldFVzZUxlZ2FjeSxcbiAgcGx1cmFsaXplVHlwZSxcbn0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBjcmVhdGVNb2RlbE9iamVjdCB9IGZyb20gXCIuLi9tb2RlbC9Nb2RlbE9iamVjdENyZWF0b3JcIjtcbmltcG9ydCB7XG4gIE9udG9sb2d5LFxuICBPbnRvbG9naWVzLFxuICBFbnRpdHksXG4gIFRoaW5nLFxuICBJbmRpdmlkdWFsLFxufSBmcm9tIFwiLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgT0xTM09udG9sb2dpZXMsIE9MUzNPbnRvbG9neSB9IGZyb20gXCIuLi9tb2RlbC9vbHMzLW1vZGVsXCI7XG5pbXBvcnQge1xuICBjbGFzc1R5cGVOYW1lcyxcbiAgZW50aXR5VHlwZU5hbWVzLFxuICBvbnRvbG9neVR5cGVOYW1lcyxcbiAgdGhpbmdUeXBlTmFtZXMsXG4gIEVudGl0eVR5cGVOYW1lLFxuICBUaGluZ1R5cGVOYW1lLFxuICBpc0NsYXNzVHlwZU5hbWUsXG4gIGlzRW50aXR5VHlwZU5hbWUsXG4gIGlzSW5kaXZpZHVhbFR5cGVOYW1lLFxuICBpc09udG9sb2d5VHlwZU5hbWUsXG59IGZyb20gXCIuLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHtcbiAgSGllcmFyY2h5LFxuICBQYXJlbnRDaGlsZFJlbGF0aW9uLFxuICBUcmVlTm9kZSxcbn0gZnJvbSBcIi4uL21vZGVsL2ludGVyZmFjZXMvSGllcmFyY2h5XCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IHtcbiAgQnVpbGRIaWVyYXJjaHlQcm9wcyxcbiAgSGllcmFyY2h5QnVpbGRlcixcbiAgSGllcmFyY2h5SXJpUHJvcCxcbiAgTG9hZEhpZXJhcmNoeUNoaWxkcmVuUHJvcHMsXG59IGZyb20gXCIuL0hpZXJhcmNoeUJ1aWxkZXJcIjtcbmltcG9ydCB7IE9MU1NlbGVjdCB9IGZyb20gXCIuLi9tb2RlbC9vbHMtbW9kZWwvT0xTU2VsZWN0XCI7XG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tIFwiLi4vbW9kZWwvaW50ZXJmYWNlcy9TZWxlY3RcIjtcbmltcG9ydCB7IE9MU1NlbGVjdFJlc3VsdCB9IGZyb20gXCIuLi9tb2RlbC9vbHMtbW9kZWwvT0xTU2VsZWN0UmVzdWx0XCI7XG5pbXBvcnQgeyBUczRuZmRpU2VhcmNoUmVzdWx0IH0gZnJvbSBcIi4uL21vZGVsL3RzNG5mZGktbW9kZWwvVHM0bmZkaVNlYXJjaFJlc3VsdFwiO1xuaW1wb3J0IHsgRW50aXR5RGF0YSB9IGZyb20gXCIuLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IE9MUzRPbnRvbG9naWVzIH0gZnJvbSBcIi4uL21vZGVsL29sczQtbW9kZWxcIjtcblxuLy8gdXNlZCB0byBmaWx0ZXIgZW50aXRpZXMgbm90IGJlIHNob3duIGluIGhpZXJhcmNoeVxuZnVuY3Rpb24gaXNUb3AoaXJpOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBpcmkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjVGhpbmdcIiB8fFxuICAgIGlyaSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNUb3BPYmplY3RQcm9wZXJ0eVwiXG4gICk7XG59XG5cbmludGVyZmFjZSBQYWdpbmF0aW9uUGFyYW1zIHtcbiAgc2l6ZT86IHN0cmluZztcbiAgcGFnZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFNvcnRpbmdQYXJhbXMge1xuICBzb3J0RmllbGQ6IHN0cmluZyB8IG51bWJlcjtcbiAgc29ydERpcj86IFwiYXNjXCIgfCBcImRlc2NcIjtcbn1cblxuaW50ZXJmYWNlIENvbnRlbnRQYXJhbXMge1xuICBvbnRvbG9neUlkPzogc3RyaW5nO1xuICB0ZXJtSXJpPzogc3RyaW5nO1xuICBwcm9wZXJ0eUlyaT86IHN0cmluZztcbiAgaW5kaXZpZHVhbElyaT86IHN0cmluZztcbiAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIGFwaUNhbGxGbiA9IChcbiAgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsXG4gIHNvcnRpbmdQYXJhbXM/OiBTb3J0aW5nUGFyYW1zLFxuICBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcyxcbiAgcGFyYW1ldGVyPzogc3RyaW5nLFxuICB1c2VMZWdhY3k/OiBib29sZWFuLFxuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4pID0+IFByb21pc2U8YW55PjtcblxuaW50ZXJmYWNlIFNlYXJjaFF1ZXJ5UGFyYW1zIHtcbiAgcXVlcnk6IHN0cmluZztcbiAgZXhhY3RNYXRjaD86IGJvb2xlYW47XG4gIHNob3dPYnNvbGV0ZVRlcm1zPzogYm9vbGVhbjtcbiAgdHlwZXM/OiBzdHJpbmc7XG4gIG9udG9sb2d5Pzogc3RyaW5nO1xuICBncm91cEJ5SXJpPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFNlbGVjdFF1ZXJ5UGFyYW1zIHtcbiAgcXVlcnk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFN1Z2dlc3RRdWVyeVBhcmFtcyB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBKc1RyZWVQYXJhbXMge1xuICB2aWV3TW9kZT86IHN0cmluZztcbiAgc2libGluZ3M/OiBib29sZWFuO1xuICBjaGlsZD86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgSlNUcmVlTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgcGFyZW50OiBzdHJpbmc7XG4gIGlyaTogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG4gIHN0YXRlOiB7XG4gICAgb3BlbmVkOiBib29sZWFuO1xuICB9O1xuICBjaGlsZHJlbjogYm9vbGVhbjtcbiAgYV9hdHRyOiB7XG4gICAgaXJpOiBzdHJpbmc7XG4gICAgb250b2xvZ3lfbmFtZTogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgY2xhc3M6IHN0cmluZztcbiAgfTtcbiAgb250b2xvZ3lfbmFtZTogc3RyaW5nO1xufTtcblxuY29uc3QgREVGQVVMVF9TRUFSQ0hfUkVTVUxUU19QRVJfUEFHRSA9IDEwO1xuXG5leHBvcnQgY2xhc3MgT2xzQXBpIGltcGxlbWVudHMgSGllcmFyY2h5QnVpbGRlciB7XG4gIHByaXZhdGUgYXhpb3NJbnN0YW5jZTogQXhpb3NJbnN0YW5jZTtcblxuICBjb25zdHJ1Y3RvcihhcGk6IHN0cmluZykge1xuICAgIHRoaXMuYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgICBiYXNlVVJMOiBhcGksXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIENvbnRlbnRfVHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvckdldChcbiAgICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBzb3J0aW5nUGFyYW1zPzogU29ydGluZ1BhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKHNvcnRpbmdQYXJhbXMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnBhZ2luYXRpb25QYXJhbXMsXG4gICAgICAgIHNvcnQ6IGAke3NvcnRpbmdQYXJhbXMuc29ydEZpZWxkfSwke3NvcnRpbmdQYXJhbXMuc29ydERpcn1gLFxuICAgICAgICAuLi5jb250ZW50UGFyYW1zLFxuICAgICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5wYWdpbmF0aW9uUGFyYW1zLFxuICAgICAgLi4uY29udGVudFBhcmFtcyxcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcykge1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgcm93czogcGFnaW5hdGlvblBhcmFtcz8uc2l6ZSxcbiAgICB9O1xuXG4gICAgaWYgKHBhZ2luYXRpb25QYXJhbXM/LnBhZ2UpIHtcbiAgICAgIGlmIChwYWdpbmF0aW9uUGFyYW1zLnNpemUpIHtcbiAgICAgICAgcGFyYW1zLnN0YXJ0ID0gKFxuICAgICAgICAgICtwYWdpbmF0aW9uUGFyYW1zLnBhZ2UgKiArcGFnaW5hdGlvblBhcmFtcy5zaXplXG4gICAgICAgICkudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtcy5zdGFydCA9IChcbiAgICAgICAgICArcGFnaW5hdGlvblBhcmFtcy5wYWdlICogREVGQVVMVF9TRUFSQ0hfUkVTVUxUU19QRVJfUEFHRVxuICAgICAgICApLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYXJhbXNGb3JTZWFyY2goXG4gICAgcXVlcnlQYXJhbXM6IFNlYXJjaFF1ZXJ5UGFyYW1zLFxuICAgIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLFxuICAgIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLFxuICAgIHBhcmFtZXRlcj86IHN0cmluZyxcbiAgICB0czRuZmRpR2F0ZXdheT86IGJvb2xlYW5cbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBleGFjdDogcXVlcnlQYXJhbXMuZXhhY3RNYXRjaCxcbiAgICAgIG9ic29sZXRlczogcXVlcnlQYXJhbXMuc2hvd09ic29sZXRlVGVybXMsXG4gICAgfTtcblxuICAgIGlmICh0czRuZmRpR2F0ZXdheSkge1xuICAgICAgcGFyYW1zLnF1ZXJ5ID0gcXVlcnlQYXJhbXMucXVlcnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtcy5xID0gcXVlcnlQYXJhbXMucXVlcnk7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLmdyb3VwQnlJcmkpIHtcbiAgICAgIHBhcmFtcy5ncm91cEZpZWxkID0gcXVlcnlQYXJhbXMuZ3JvdXBCeUlyaTtcbiAgICB9XG5cbiAgICBpZiAocXVlcnlQYXJhbXMudHlwZXMpIHtcbiAgICAgIHBhcmFtcy50eXBlID0gcXVlcnlQYXJhbXMudHlwZXM7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLm9udG9sb2d5KSB7XG4gICAgICBwYXJhbXMub250b2xvZ3kgPSBxdWVyeVBhcmFtcy5vbnRvbG9neTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgLi4udGhpcy5idWlsZFBhZ2luYXRpb25QYXJhbXMocGFnaW5hdGlvblBhcmFtcyksXG4gICAgICAuLi5jb250ZW50UGFyYW1zLFxuICAgICAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlciksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiBmb3IgY3JlYXRpbmcgYW4gb2JqZWN0IGZyb20gc3RyaW5nIG9mIHBhcmFtZXRlcnMgZm9yIGF4aW9zIGlucHV0IHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAocGFyYW1ldGVyKSB7XG4gICAgICBjb25zdCBwYXJhbXNTcGxpdHRlZCA9IHBhcmFtZXRlci5zcGxpdChcIiZcIik7XG5cbiAgICAgIHBhcmFtc1NwbGl0dGVkLmZvckVhY2goKHBhcmFtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSBwYXJhbS5zcGxpdChcIj1cIilbMF07XG4gICAgICAgIGNvbnN0IHZhbHVlOiBzdHJpbmcgPSBwYXJhbS5zcGxpdChcIj1cIilbMV07XG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYXJhbXNGb3JFbnRpdGllcyhwYXJhbWV0ZXI/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmIChwYXJhbWV0ZXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtc1NwbGl0dGVkID0gcGFyYW1ldGVyLnNwbGl0KFwiJlwiKTtcblxuICAgICAgcGFyYW1zU3BsaXR0ZWQuZm9yRWFjaCgocGFyYW06IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBrZXk6IHN0cmluZyA9IHBhcmFtLnNwbGl0KFwiPVwiKVswXTtcbiAgICAgICAgY29uc3QgdmFsdWU6IHN0cmluZyA9IHBhcmFtLnNwbGl0KFwiPVwiKVsxXTtcbiAgICAgICAgY29uc3QgZmluYWxLZXkgPSBrZXkgPT09IFwib250b2xvZ3lcIiA/IFwib250b2xvZ3lJZFwiIDoga2V5O1xuICAgICAgICBpZiAoZmluYWxLZXkgPT09IFwib250b2xvZ3lJZFwiIHx8IGZpbmFsS2V5ID09PSBcInR5cGVcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtmaW5hbEtleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvclNlbGVjdChcbiAgICBxdWVyeVBhcmFtczogU3VnZ2VzdFF1ZXJ5UGFyYW1zLFxuICAgIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLFxuICAgIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLFxuICAgIHBhcmFtZXRlcnM/OiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBxOiBxdWVyeVBhcmFtcy5xdWVyeSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIC4uLnRoaXMuYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXMpLFxuICAgICAgLi4uY29udGVudFBhcmFtcyxcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXJzKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvclN1Z2dlc3QoXG4gICAgcXVlcnlQYXJhbXM6IFN1Z2dlc3RRdWVyeVBhcmFtcyxcbiAgICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXJzPzogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgcTogcXVlcnlQYXJhbXMucXVlcnksXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICAuLi50aGlzLmJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zKSxcbiAgICAgIC4uLmNvbnRlbnRQYXJhbXMsXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVycyksXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIHRoaXMgdGhlIGJlaGF2aW9yIHdlIHdhbnQgKGVzcGVjaWFsbHkgdGhyb3dpbmcgZXJyb3IgZm9yIGVtcHR5IHJlc3BvbnNlKT9cbiAgcHJpdmF0ZSBjaGVja19mb3JfZXJyb3JzKHJlc3BvbnNlOiBhbnkpOiBhbnkge1xuICAgIC8vIHJlc291cmNlIG5vdCBmb3VuZC9pbGxlZ2FsIGFyZ3VtZW50IGV4Y2VwdGlvbiBpbiBzZW1hbnRpY2xvb2t1cFxuICAgIGlmIChyZXNwb25zZVtcImVycm9yXCJdKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgcmVzcG9uc2VbXCJzdGF0dXNcIl0gK1xuICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICByZXNwb25zZVtcImVycm9yXCJdICtcbiAgICAgICAgICBcIiAtIFwiICtcbiAgICAgICAgICByZXNwb25zZVtcIm1lc3NhZ2VcIl0gK1xuICAgICAgICAgIFwiIC0gXCIgK1xuICAgICAgICAgIHJlc3BvbnNlW1wiZXhjZXB0aW9uXCJdICtcbiAgICAgICAgICBcIiBhdCBcIiArXG4gICAgICAgICAgcmVzcG9uc2VbXCJwYXRoXCJdXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBlbXB0eSByZXNwb25zZSAtIGNhbiBiZSBjYXVnaHQgaWYgdGhpcyBpcyBleHBlY3RlZCwgZS5nLiBmb3IgZmV0Y2hpbmcgaW5zdGFuY2VzXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2VbXCJwYWdlXCJdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHJlc3BvbnNlW1wicGFnZVwiXVtcInRvdGFsRWxlbWVudHNcIl0gPT09IDBcbiAgICApIHtcbiAgICAgIHRocm93IEVycm9yKFwiUmVzcG9uc2UgY29udGFpbnMgMCBlbGVtZW50c1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtYWtlQ2FsbChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZzxhbnk+IHwgdW5kZWZpbmVkLFxuICAgIHVzZUxlZ2FjeTogYm9vbGVhblxuICApIHtcbiAgICBjb25zdCBhcGlWZXJzaW9uUHJlZml4ID0gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcIlwiIDogXCJ2Mi9cIjtcbiAgICBjb25zdCByZXNwb25zZSA9IChcbiAgICAgIGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoYXBpVmVyc2lvblByZWZpeCArIHVybCwgY29uZmlnKVxuICAgICkuZGF0YTtcbiAgICByZXR1cm4gdGhpcy5jaGVja19mb3JfZXJyb3JzKHJlc3BvbnNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPbnRvbG9naWVzOiBhcGlDYWxsRm4gPSBhc3luYyAoXG4gICAgcGFnaW5hdGlvblBhcmFtcyxcbiAgICBzb3J0aW5nUGFyYW1zLFxuICAgIGNvbnRlbnRQYXJhbXMsXG4gICAgcGFyYW1ldGVyLFxuICAgIHVzZUxlZ2FjeSA9IHRydWVcbiAgKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXG4gICAgICBcIm9udG9sb2dpZXNcIixcbiAgICAgIHtcbiAgICAgICAgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KFxuICAgICAgICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgICAgICAgc29ydGluZ1BhcmFtcyxcbiAgICAgICAgICBjb250ZW50UGFyYW1zLFxuICAgICAgICAgIHBhcmFtZXRlclxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIHVzZUxlZ2FjeVxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEZldGNoIGFsbCBvbnRvbG9naWVzLiBDdXJyZW50bHkgb25seSBhdmFpbGFibGUgZm9yIHVzZUxlZ2FjeSBzaW5jZSBwYXJhbWV0ZXJzIGFyZW4ndCBhbGxvd2VkIGluIHRoZSBPTFMgdjIgQVBJIG9udG9sb2dpZXMgZW5kcG9pbnRcbiAgICogQHBhcmFtIHBhcmFtZXRlclxuICAgKiBAcGFyYW0gdXNlTGVnYWN5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0T250b2xvZ2llc0RhdGEoXG4gICAgcGFyYW1ldGVyPzogc3RyaW5nLFxuICAgIHVzZUxlZ2FjeSA9IHRydWVcbiAgKTogUHJvbWlzZTxPbnRvbG9naWVzPiB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGxldCBvbnRvbG9naWVzRGF0YTogT250b2xvZ3lbXSA9IFtdO1xuXG4gICAgbGV0IHBhZ2VOdW0gPSAwO1xuICAgIGNvbnN0IHBhZ2VTaXplID0gNTAwO1xuXG4gICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgZG8ge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0T250b2xvZ2llcyhcbiAgICAgICAgICB7IHNpemU6IHBhZ2VTaXplLnRvU3RyaW5nKCksIHBhZ2U6IHBhZ2VOdW0udG9TdHJpbmcoKSB9LFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICAgIHVzZUxlZ2FjeVxuICAgICAgICApOyAvLyBhc3N1bWluZyB0aGVyZSBhcmUgbm8gbW9yZSB0aGFuIDUwMCBvbnRvbG9naWVzXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFyZXNwb25zZSB8fFxuICAgICAgICAgICFyZXNwb25zZVtcIl9lbWJlZGRlZFwiXSB8fFxuICAgICAgICAgICFyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcIm9udG9sb2dpZXNcIl1cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT250b2xvZ2llcyBkYXRhIG5vdCBmb3VuZFwiKTsgLy9UT0RPIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbnRvbG9naWVzRGF0YSA9IG9udG9sb2dpZXNEYXRhLmNvbmNhdChcbiAgICAgICAgICAgIHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wib250b2xvZ2llc1wiXS5tYXAoKG9udG9sb2d5RGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVNb2RlbE9iamVjdChvbnRvbG9neURhdGEpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFnZU51bSArPSAxO1xuICAgICAgfSB3aGlsZSAocGFnZU51bSA8IHJlc3BvbnNlW1wicGFnZVwiXVtcInRvdGFsUGFnZXNcIl0pO1xuXG4gICAgICByZXR1cm4gbmV3IE9MUzNPbnRvbG9naWVzKG9udG9sb2dpZXNEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG8ge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0T250b2xvZ2llcyhcbiAgICAgICAgICB7IHNpemU6IHBhZ2VTaXplLnRvU3RyaW5nKCksIHBhZ2U6IHBhZ2VOdW0udG9TdHJpbmcoKSB9LFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICAgIHVzZUxlZ2FjeVxuICAgICAgICApOyAvLyBhc3N1bWluZyB0aGVyZSBhcmUgbm8gbW9yZSB0aGFuIDUwMCBvbnRvbG9naWVzXG5cbiAgICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2VbXCJlbGVtZW50c1wiXSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9udG9sb2dpZXMgZGF0YSBub3QgZm91bmRcIik7IC8vVE9ETyBjb25zaXN0ZW50IGVycm9yIGhhbmRsaW5nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb250b2xvZ2llc0RhdGEgPSBvbnRvbG9naWVzRGF0YS5jb25jYXQoXG4gICAgICAgICAgICByZXNwb25zZVtcImVsZW1lbnRzXCJdLm1hcCgob250b2xvZ3lEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU1vZGVsT2JqZWN0KG9udG9sb2d5RGF0YSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBwYWdlTnVtICs9IDE7XG4gICAgICB9IHdoaWxlIChwYWdlTnVtIDwgcmVzcG9uc2VbXCJ0b3RhbFBhZ2VzXCJdKTtcblxuICAgICAgcmV0dXJuIG5ldyBPTFM0T250b2xvZ2llcyhvbnRvbG9naWVzRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYWxsIHRlcm1zIGZyb20gdGhlIGFwaVxuICAgKiBAcGFyYW0gcGFnaW5hdGlvblBhcmFtc1xuICAgKiBAcGFyYW0gc29ydGluZ1BhcmFtc1xuICAgKiBAcGFyYW0gY29udGVudFBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSBgdXNlTGVnYWN5YCBEZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIGB1c2VMZWdhY3lgLCBgXCJ0ZXJtc1wiYCAoYHVzZUxlZ2FjeSA9PSB0cnVlYCkgb3IgYFwiY2xhc3Nlc1wiYCAoYHVzZUxlZ2FjeSA9PSBmYWxzZWApIHdpbGwgYmUgdXNlZCBpbiB0aGUgcXVlcnkgdXJsXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVybXM6IGFwaUNhbGxGbiA9IGFzeW5jIChcbiAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgIHNvcnRpbmdQYXJhbXMsXG4gICAgY29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhblxuICApID0+IHtcbiAgICBjb25zdCB0eXBlUHJlZml4ID0gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcInRlcm1zXCIgOiBcImNsYXNzZXNcIjtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcbiAgICAgIHR5cGVQcmVmaXgsXG4gICAgICB7XG4gICAgICAgIHBhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvckdldChcbiAgICAgICAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgICAgICAgIHNvcnRpbmdQYXJhbXMsXG4gICAgICAgICAgY29udGVudFBhcmFtc1xuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpXG4gICAgKTtcbiAgfTtcblxuICBwdWJsaWMgZ2V0UHJvcGVydGllczogYXBpQ2FsbEZuID0gYXN5bmMgKFxuICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgc29ydGluZ1BhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zLFxuICAgIHBhcmFtZXRlcixcbiAgICB1c2VMZWdhY3k/OiBib29sZWFuXG4gICkgPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFxuICAgICAgXCJwcm9wZXJ0aWVzXCIsXG4gICAgICB7XG4gICAgICAgIHBhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvckdldChcbiAgICAgICAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgICAgICAgIHNvcnRpbmdQYXJhbXMsXG4gICAgICAgICAgY29udGVudFBhcmFtc1xuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpXG4gICAgKTtcbiAgfTtcblxuICBwdWJsaWMgZ2V0SW5kaXZpZHVhbHM6IGFwaUNhbGxGbiA9IGFzeW5jIChcbiAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgIHNvcnRpbmdQYXJhbXMsXG4gICAgY29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhblxuICApID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcbiAgICAgIFwiaW5kaXZpZHVhbHNcIixcbiAgICAgIHtcbiAgICAgICAgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KFxuICAgICAgICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgICAgICAgc29ydGluZ1BhcmFtcyxcbiAgICAgICAgICBjb250ZW50UGFyYW1zXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSlcbiAgICApO1xuICB9O1xuXG4gIHB1YmxpYyBnZXRPbnRvbG9neTogYXBpQ2FsbEZuID0gYXN5bmMgKFxuICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgc29ydGluZ1BhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zLFxuICAgIHBhcmFtZXRlcixcbiAgICB1c2VMZWdhY3k/OiBib29sZWFuXG4gICkgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXG4gICAgICBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkLFxuICAgICAgcGFyYW1zLFxuICAgICAgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSlcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGFuIGVudGl0eSBmcm9tIHRoZSAvZW50aXRpZXMgZW5kcG9pbnQgaW4gdGhlIGFwaSBpbiBvbHM0LlxuICAgKiBBbHdheXMgcmVxdWlyZXMgdGhlIHJlc3BlY3RpdmUgb2JqZWN0IElSSSBpbiBjb250ZW50UGFyYW1zIHRvIGJlIHNldFxuICAgKiBJZiBvbnRvbG9neUlkIGlzIHVuZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb2JqZWN0IHdpbGwgYmUgcXVlcmllZCBmcm9tIGFsbCBvbnRvbG9naWVzLCBjb250YWluaW5nIGEgbGlzdCBvZiByZXN1bHRzXG4gICAqIElmIGFuIG9udG9sb2d5SWQgaXMgcHJvdmlkZWQgaW4gY29udGVudFBhcmFtcywgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG9iamVjdCBmcm9tIHRoYXQgc3BlY2lmaWMgb250b2xvZ3lcbiAgICovXG4gIHB1YmxpYyBnZXRFbnRpdHk6IGFwaUNhbGxGbiA9IGFzeW5jIChcbiAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgIHNvcnRpbmdQYXJhbXMsXG4gICAgY29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhblxuICApID0+IHtcbiAgICBjb25zdCBxdWVyeVByZWZpeCA9IGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWRcbiAgICAgID8gXCJvbnRvbG9naWVzL1wiICsgY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCArIFwiL1wiXG4gICAgICA6IFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgaXJpOiBjb250ZW50UGFyYW1zPy50ZXJtSXJpLFxuICAgICAgLi4udGhpcy5idWlsZFBhcmFtc0ZvckVudGl0aWVzKHBhcmFtZXRlciksXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcbiAgICAgIHF1ZXJ5UHJlZml4ICsgXCJlbnRpdGllc1wiLFxuICAgICAgeyBwYXJhbXM6IHBhcmFtcyB9LFxuICAgICAgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSlcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGEgdGVybSBmcm9tIHRoZSBhcGlcbiAgICogQHBhcmFtIHBhZ2luYXRpb25QYXJhbXNcbiAgICogQHBhcmFtIHNvcnRpbmdQYXJhbXNcbiAgICogQHBhcmFtIGBjb250ZW50UGFyYW1zYCBBbHdheXMgcmVxdWlyZXMgdGhlIHJlc3BlY3RpdmUgb2JqZWN0IElSSSBpbiBgY29udGVudFBhcmFtc2AgdG8gYmUgc2V0LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBJZiBvbnRvbG9neUlkIGlzIHVuZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb2JqZWN0IHdpbGwgYmUgcXVlcmllZCBmcm9tIGFsbCBvbnRvbG9naWVzLCBjb250YWluaW5nIGEgbGlzdCBvZiByZXN1bHRzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBJZiBhbiBvbnRvbG9neUlkIGlzIHByb3ZpZGVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwgb25seSBjb250YWluIHRoZSBvYmplY3QgZnJvbSB0aGF0IHNwZWNpZmljIG9udG9sb2d5LlxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSBgdXNlTGVnYWN5YCBEZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIGB1c2VMZWdhY3lgLCBgXCJ0ZXJtc1wiYCAoYHVzZUxlZ2FjeSA9PSB0cnVlYCkgb3IgYFwiY2xhc3Nlc1wiYCAoYHVzZUxlZ2FjeSA9PSBmYWxzZWApIHdpbGwgYmUgdXNlZCBpbiB0aGUgcXVlcnkgdXJsXG4gICAqIEBwYXJhbSBhYm9ydFNpZ25hbFxuICAgKi9cbiAgcHVibGljIGdldFRlcm06IGFwaUNhbGxGbiA9IGFzeW5jIChcbiAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgIHNvcnRpbmdQYXJhbXMsXG4gICAgY29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhbixcbiAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICkgPT4ge1xuICAgIGNvbnN0IG9udG9sb2d5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZFxuICAgICAgPyBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkICsgXCIvXCJcbiAgICAgIDogXCJcIjtcbiAgICBjb25zdCB0eXBlUHJlZml4ID0gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcInRlcm1zXCIgOiBcImNsYXNzZXNcIjtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LnRlcm1JcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFxuICAgICAgb250b2xvZ3lQcmVmaXggKyB0eXBlUHJlZml4LFxuICAgICAgeyBwYXJhbXM6IHBhcmFtcywgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LFxuICAgICAgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSlcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGEgcHJvcGVydHkgZnJvbSB0aGUgYXBpIGluIG9sczMuXG4gICAqIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGNvbnRlbnRQYXJhbXMgdG8gYmUgc2V0XG4gICAqIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHNcbiAgICogSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neVxuICAgKi9cbiAgcHVibGljIGdldFByb3BlcnR5OiBhcGlDYWxsRm4gPSBhc3luYyAoXG4gICAgcGFnaW5hdGlvblBhcmFtcyxcbiAgICBzb3J0aW5nUGFyYW1zLFxuICAgIGNvbnRlbnRQYXJhbXMsXG4gICAgcGFyYW1ldGVyLFxuICAgIHVzZUxlZ2FjeT86IGJvb2xlYW4sXG4gICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICApID0+IHtcbiAgICBjb25zdCBxdWVyeVByZWZpeCA9IGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWRcbiAgICAgID8gXCJvbnRvbG9naWVzL1wiICsgY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCArIFwiL1wiXG4gICAgICA6IFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgaXJpOiBjb250ZW50UGFyYW1zPy5wcm9wZXJ0eUlyaSxcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXG4gICAgICBxdWVyeVByZWZpeCArIFwicHJvcGVydGllc1wiLFxuICAgICAgeyBwYXJhbXM6IHBhcmFtcywgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LFxuICAgICAgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSlcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGFuIGluZGl2aWR1YWwgZnJvbSB0aGUgYXBpIGluIG9sczMuXG4gICAqIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGNvbnRlbnRQYXJhbXMgdG8gYmUgc2V0XG4gICAqIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHNcbiAgICogSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neVxuICAgKi9cbiAgcHVibGljIGdldEluZGl2aWR1YWw6IGFwaUNhbGxGbiA9IGFzeW5jIChcbiAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgIHNvcnRpbmdQYXJhbXMsXG4gICAgY29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhbixcbiAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZFxuICAgICAgPyBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkICsgXCIvXCJcbiAgICAgIDogXCJcIjtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LmluZGl2aWR1YWxJcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFxuICAgICAgcXVlcnlQcmVmaXggKyBcImluZGl2aWR1YWxzXCIsXG4gICAgICB7IHBhcmFtczogcGFyYW1zLCBzaWduYWw6IGFib3J0U2lnbmFsIH0sXG4gICAgICBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KVxuICAgICk7XG4gIH07XG5cbiAgcHVibGljIHNlYXJjaCA9IGFzeW5jIChcbiAgICBxdWVyeVBhcmFtczogU2VhcmNoUXVlcnlQYXJhbXMsXG4gICAgcGFnaW5hdGlvblBhcmFtczogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmcsXG4gICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICApOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFxuICAgICAgXCJzZWFyY2hcIixcbiAgICAgIHtcbiAgICAgICAgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yU2VhcmNoKFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgICAgICAgY29udGVudFBhcmFtcyxcbiAgICAgICAgICBwYXJhbWV0ZXJcbiAgICAgICAgKSxcbiAgICAgICAgc2lnbmFsOiBhYm9ydFNpZ25hbCxcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfTtcblxuICBwdWJsaWMgc2VsZWN0ID0gYXN5bmMgKFxuICAgIHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcyxcbiAgICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcbiAgICAgIFwic2VsZWN0XCIsXG4gICAgICB7XG4gICAgICAgIHBhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvclNlbGVjdChcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgICAgICAgIGNvbnRlbnRQYXJhbXMsXG4gICAgICAgICAgcGFyYW1ldGVyXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH07XG5cbiAgcHVibGljIHNlYXJjaFRzNG5mZGlHYXRld2F5ID0gYXN5bmMgKFxuICAgIHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcyxcbiAgICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmcsXG4gICAgdHM0bmZkaUdhdGV3YXk/OiBib29sZWFuXG4gICk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXG4gICAgICBcInNlYXJjaFwiLFxuICAgICAge1xuICAgICAgICBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTZWFyY2goXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcGFnaW5hdGlvblBhcmFtcyxcbiAgICAgICAgICBjb250ZW50UGFyYW1zLFxuICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICB0czRuZmRpR2F0ZXdheVxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGZXRjaCBzZWxlY3QgZGF0YS5cbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zXG4gICAqIEBwYXJhbSBwYWdpbmF0aW9uUGFyYW1zXG4gICAqIEBwYXJhbSBjb250ZW50UGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTZWxlY3REYXRhKFxuICAgIHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcyxcbiAgICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmcsXG4gICAgdHM0bmZkaUdhdGV3YXk/OiBib29sZWFuXG4gICk6IFByb21pc2U8U2VsZWN0PiB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGxldCBzZWxlY3REYXRhOiBPTFNTZWxlY3RSZXN1bHRbXSA9IFtdO1xuICAgIGxldCByZXN1bHROdW0gPSAwO1xuXG4gICAgaWYgKHRzNG5mZGlHYXRld2F5KSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VhcmNoVHM0bmZkaUdhdGV3YXkoXG4gICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgICAgICBjb250ZW50UGFyYW1zLFxuICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgIHRzNG5mZGlHYXRld2F5XG4gICAgICApO1xuICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWxlY3QgZGF0YSBub3QgZm91bmRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3REYXRhID0gc2VsZWN0RGF0YS5jb25jYXQoXG4gICAgICAgICAgcmVzcG9uc2UubWFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHM0bmZkaVNlYXJjaFJlc3VsdChkYXRhKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VsZWN0KFxuICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgcGFnaW5hdGlvblBhcmFtcyxcbiAgICAgICAgY29udGVudFBhcmFtcyxcbiAgICAgICAgcGFyYW1ldGVyXG4gICAgICApO1xuICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcImRvY3NcIl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0IGRhdGEgbm90IGZvdW5kXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0RGF0YSA9IHNlbGVjdERhdGEuY29uY2F0KFxuICAgICAgICAgIHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJkb2NzXCJdLm1hcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE9MU1NlbGVjdFJlc3VsdChkYXRhKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgT0xTU2VsZWN0KHNlbGVjdERhdGEpO1xuICB9XG5cbiAgcHVibGljIHN1Z2dlc3QgPSBhc3luYyAoXG4gICAgcXVlcnlQYXJhbXM6IFN1Z2dlc3RRdWVyeVBhcmFtcyxcbiAgICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcbiAgICAgIFwic3VnZ2VzdFwiLFxuICAgICAge1xuICAgICAgICBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTdWdnZXN0KFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgICAgICAgY29udGVudFBhcmFtcyxcbiAgICAgICAgICBwYXJhbWV0ZXJcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogZ2V0VGVybVRyZWU6XG4gICAqIFRoaXMgbWV0aG9kIGFsd2F5cyByZXF1aXJlcyBhbiBvbnRvbG9neUlkIGluIGNvbnRlbnRQYXJhbXNcbiAgICogMSkgSWYgbm8gdGVybUlyaSBpcyBkZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvbnRvbG9neSByb290cyB3aWxsIGJlIHF1ZXJpZWRcbiAgICogMikgSWYgYSB0ZXJtSXJpIGlzIGRlZmluZWQgYnV0IG5vIGNoaWxkIGluIGpzVHJlZVBhcmFtcywgdGhlIGhpZXJhcmNoeSBjb250YWluaW5nIHRoYXQgdGVybSB3aWxsIGJlIHF1ZXJpZWRcbiAgICogMykgSWYgYSB0ZXJtSXJpIGlzIGRlZmluZWQgYW5kIGFsc28gYSBjaGlsZCBpbiBqc1RyZWVQYXJhbXMsIHRoZSBzdWJoaWVyYXJjaHkgb2YgdGhhdCBjaGlsZCB3aWxsIGJlIHF1ZXJpZWRcbiAgICovXG4gIHB1YmxpYyBnZXRUZXJtVHJlZSA9IGFzeW5jIChcbiAgICBjb250ZW50UGFyYW1zOiBDb250ZW50UGFyYW1zLFxuICAgIHRyZWVQYXJhbXM6IEpzVHJlZVBhcmFtcyxcbiAgICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBzb3J0aW5nUGFyYW1zPzogU29ydGluZ1BhcmFtc1xuICApID0+IHtcbiAgICBsZXQgYmFzZVJlcXVlc3QgPSBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkICsgXCIvdGVybXNcIjtcbiAgICBpZiAoIWNvbnRlbnRQYXJhbXMudGVybUlyaSlcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChiYXNlUmVxdWVzdCArIFwiL3Jvb3RzXCIpKS5kYXRhOyAvLzEpXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGJhc2VSZXF1ZXN0ID1cbiAgICAgIGJhc2VSZXF1ZXN0ICtcbiAgICAgIFwiL1wiICtcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoY29udGVudFBhcmFtcz8udGVybUlyaSkpICtcbiAgICAgIFwiL2pzdHJlZVwiO1xuICAgIGlmICh0cmVlUGFyYW1zLmNoaWxkKVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChcbiAgICAgICAgICBiYXNlUmVxdWVzdCArIFwiL2NoaWxkcmVuL1wiICsgdHJlZVBhcmFtcy5jaGlsZFxuICAgICAgICApXG4gICAgICApLmRhdGE7XG4gICAgLy8zKVxuICAgIGVsc2VcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChiYXNlUmVxdWVzdCwgeyBwYXJhbXM6IHRyZWVQYXJhbXMgfSkpXG4gICAgICAgIC5kYXRhOyAvLzIpXG4gIH07XG5cbiAgcHVibGljIGdldFRlcm1SZWxhdGlvbnMgPSBhc3luYyAoXG4gICAgY29udGVudFBhcmFtczogQ29udGVudFBhcmFtcyxcbiAgICBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcyxcbiAgICBzb3J0aW5nUGFyYW1zPzogU29ydGluZ1BhcmFtc1xuICApID0+IHtcbiAgICBsZXQgYmFzZVJlcXVlc3QgPSBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkICsgXCIvdGVybXNcIjtcbiAgICBpZiAoIWNvbnRlbnRQYXJhbXMudGVybUlyaSlcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChiYXNlUmVxdWVzdCArIFwiL3Jvb3RzXCIpKS5kYXRhOyAvLzEpXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGJhc2VSZXF1ZXN0ID1cbiAgICAgIGJhc2VSZXF1ZXN0ICtcbiAgICAgIFwiL1wiICtcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoY29udGVudFBhcmFtcz8udGVybUlyaSkpICtcbiAgICAgIFwiL2dyYXBoXCI7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0KSkuZGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2hvbGUgZW50aXR5IHJlc3BvbnNlIGpzb24gd2l0aCBhIGNvbWZvcnRhYmxlIHdyYXBwZXIgaGFuZGxpbmcgZW50aXR5VHlwZSwgb250b2xvZ3lJZCBhbmQgdXNlTGVnYWN5XG4gICAqIEBwYXJhbSBpcmlcbiAgICogQHBhcmFtIGVudGl0eVR5cGUgcXVlcmllcyBzcGVjaWZpYyByb3V0ZXMgaWYgcHJvdmlkZWQgYW5kIGluZmVycyB0eXBlIGlmIG5vdFxuICAgKiBAcGFyYW0gb250b2xvZ3lJZCBxdWVyaWVzIG9udG9sb2d5IHJvdXRlcyBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIG5vdFxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB1c2VMZWdhY3kgYWZmZWN0cyBob3cgZW50aXR5VHlwZSBpcyBpbmZlcnJlZCBpZiBub3QgcHJvdmlkZWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRFbnRpdHlSZXNwb25zZShcbiAgICBpcmk6IHN0cmluZyxcbiAgICBlbnRpdHlUeXBlPzogRW50aXR5VHlwZU5hbWUsXG4gICAgb250b2xvZ3lJZD86IHN0cmluZyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmcsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhblxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGxldCByZXNwb25zZTtcbiAgICBpZiAoIWlyaSkgdGhyb3cgRXJyb3IoXCJObyBJUkkgcHJvdmlkZWRcIik7XG5cbiAgICBpZiAoZW50aXR5VHlwZSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEVudGl0eVdpdGhFbnRpdHlUeXBlUHJvdmlkZWQoXG4gICAgICAgIGlyaSxcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB1c2VMZWdhY3lcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSkge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0RW50aXR5V2l0aEluZmVycmVkRW50aXR5VHlwZShcbiAgICAgICAgICBpcmksXG4gICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICBwYXJhbWV0ZXJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRFbnRpdHkoXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB7IG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IGlyaSB9LFxuICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBFbnRpdHkgb2JqZWN0IChpbXBsZW1lbnRpbmcgJ0NsYXNzJywgJ1Byb3BlcnR5JyBvciAnSW5kaXZpZHVhbCcpLlxuICAgKiBJbmRpcmVjdGx5IGZldGNoZXMgdGhlIHJlc3BvbnNlIEpTT04gZm9yIHRoZSBzcGVjaWZpZWQgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIgYW5kIEFQSSB2ZXJzaW9uICh1c2VMZWdhY3kpLlxuICAgKlxuICAgKiBAcGFyYW0gZW50aXR5VHlwZVxuICAgKiBAcGFyYW0gaXJpXG4gICAqIEBwYXJhbSBvbnRvbG9neUlkXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIHVzZUxlZ2FjeVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEVudGl0eU9iamVjdChcbiAgICBpcmk6IHN0cmluZyxcbiAgICBlbnRpdHlUeXBlPzogRW50aXR5VHlwZU5hbWUsXG4gICAgb250b2xvZ3lJZD86IHN0cmluZyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmcsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhblxuICApOiBQcm9taXNlPEVudGl0eT4ge1xuICAgIHJldHVybiBjcmVhdGVNb2RlbE9iamVjdChcbiAgICAgIGF3YWl0IHRoaXMuZ2V0RW50aXR5UmVzcG9uc2UoXG4gICAgICAgIGlyaSxcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB1c2VMZWdhY3lcbiAgICAgIClcbiAgICApIGFzIEVudGl0eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIE9udG9sb2d5IG9iamVjdC5cbiAgICogSW5kaXJlY3RseSBmZXRjaGVzIHRoZSByZXNwb25zZSBKU09OIGZvciB0aGUgc3BlY2lmaWVkIG9udG9sb2d5SWQsIHBhcmFtZXRlciBhbmQgQVBJIHZlcnNpb24gKHVzZUxlZ2FjeSkuXG4gICAqXG4gICAqIEBwYXJhbSBvbnRvbG9neUlkXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIHVzZUxlZ2FjeVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldE9udG9sb2d5T2JqZWN0KFxuICAgIG9udG9sb2d5SWQ6IHN0cmluZyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmcsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhblxuICApOiBQcm9taXNlPE9udG9sb2d5PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9udG9sb2d5KFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkIH0sXG4gICAgICBwYXJhbWV0ZXIsXG4gICAgICB1c2VMZWdhY3lcbiAgICApO1xuXG4gICAgcmV0dXJuIGNyZWF0ZU1vZGVsT2JqZWN0KHJlc3BvbnNlKSBhcyBPbnRvbG9neTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUaGluZ09iamVjdChcbiAgICBpcmk/OiBzdHJpbmcsXG4gICAgdGhpbmdUeXBlPzogVGhpbmdUeXBlTmFtZSxcbiAgICBvbnRvbG9neUlkPzogc3RyaW5nLFxuICAgIHBhcmFtZXRlcj86IHN0cmluZyxcbiAgICB1c2VMZWdhY3k/OiBib29sZWFuXG4gICk6IFByb21pc2U8VGhpbmc+IHtcbiAgICBpZiAodGhpbmdUeXBlKSB7XG4gICAgICBpZiAoaXNPbnRvbG9neVR5cGVOYW1lKHRoaW5nVHlwZSkpIHtcbiAgICAgICAgaWYgKCFvbnRvbG9neUlkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBvbnRvbG9neUlkIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaW4ge1wiJHtvbnRvbG9neVR5cGVOYW1lcy5qb2luKFxuICAgICAgICAgICAgICAnXCIsIFwiJ1xuICAgICAgICAgICAgKX1cIn0uYFxuICAgICAgICAgICk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRW50aXR5VHlwZU5hbWUodGhpbmdUeXBlKSkge1xuICAgICAgICBpZiAoIWlyaSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgaXJpIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaW4ge1wiJHtlbnRpdHlUeXBlTmFtZXMuam9pbihcbiAgICAgICAgICAgICAgJ1wiLCBcIidcbiAgICAgICAgICAgICl9XCJ9LmBcbiAgICAgICAgICApO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RW50aXR5T2JqZWN0KFxuICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgdGhpbmdUeXBlLFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICAgIHVzZUxlZ2FjeVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBVbnN1cHBvcnRlZCB0aGluZ1R5cGUgXCIke3RoaW5nVHlwZX1cIiBwcm92aWRlZC4gTXVzdCBiZSBpbiB7XCIke3RoaW5nVHlwZU5hbWVzLmpvaW4oXG4gICAgICAgICAgICAnXCIsIFwiJ1xuICAgICAgICAgICl9XCJ9LmBcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFpcmkgJiYgb250b2xvZ3lJZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9IGVsc2UgaWYgKGlyaSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRFbnRpdHlPYmplY3QoXG4gICAgICAgICAgaXJpLFxuICAgICAgICAgIHRoaW5nVHlwZSxcbiAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGlyaSBvciBvbnRvbG9neUlkIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaXMgbm90IHByb3ZpZGVkLmBcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEVudGl0eVdpdGhFbnRpdHlUeXBlUHJvdmlkZWQoXG4gICAgaXJpOiBzdHJpbmcsXG4gICAgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsXG4gICAgb250b2xvZ3lJZD86IHN0cmluZyxcbiAgICBwYXJhbWV0ZXI/OiBzdHJpbmcsXG4gICAgdXNlTGVnYWN5PzogYm9vbGVhblxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIHN3aXRjaCAoZW50aXR5VHlwZSkge1xuICAgICAgY2FzZSBcInRlcm1cIjpcbiAgICAgIGNhc2UgXCJjbGFzc1wiOiAvLyBhbHNvIGFsbG93IFwiY2xhc3NcIiBldmVuIGlmIGl0IHNob3VsZCBhY3R1YWxseSBiZSBcInRlcm1cIlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRUZXJtKFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBpcmkgfSxcbiAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICk7XG5cbiAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgY2FzZSBcImFubm90YXRpb25Qcm9wZXJ0eVwiOlxuICAgICAgY2FzZSBcImRhdGFQcm9wZXJ0eVwiOlxuICAgICAgY2FzZSBcIm9iamVjdFByb3BlcnR5XCI6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFByb3BlcnR5KFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBwcm9wZXJ0eUlyaTogaXJpIH0sXG4gICAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICAgIHVzZUxlZ2FjeVxuICAgICAgICApO1xuXG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRJbmRpdmlkdWFsKFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBpbmRpdmlkdWFsSXJpOiBpcmkgfSxcbiAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdJbnZhbGlkIGVudGl0eSB0eXBlIFwiJyArXG4gICAgICAgICAgICBlbnRpdHlUeXBlICtcbiAgICAgICAgICAgIGBcIi4gTXVzdCBiZSBvbmUgb2YgeyR7ZW50aXR5VHlwZU5hbWVzXG4gICAgICAgICAgICAgIC5tYXAoKGVsZW0pID0+IGBcIiR7ZWxlbX1cImApXG4gICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9fS5gXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlXaXRoSW5mZXJyZWRFbnRpdHlUeXBlKFxuICAgIGlyaTogc3RyaW5nLFxuICAgIG9udG9sb2d5SWQ/OiBzdHJpbmcsXG4gICAgcGFyYW1ldGVyPzogc3RyaW5nXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgLypcbiAgICAgICAgICAgIFRlc3QgYWxsIHR5cGVzIG9mIGVudGl0aWVzICh0ZXJtLCBwcm9wZXJ0eSwgaW5kaXZpZHVhbCkgbWFudWFsbHkgd2l0aCBzZXBhcmF0ZSBxdWVyaWVzIChhcyAvZW50aXRpZXMgZG9lcyBub3QgZXhpc3QgZm9yIGxlZ2FjeSBBUEkpXG4gICAgICAgICAgICAtPiByZXR1cm4gdGhlIHJlc3BvbnNlIG9iamVjdCB3aGljaCByZXNvbHZlcyB3aXRoIGEgY29udGFpbmVkIGVudGl0eVxuICAgICAgICAgICAgLT4gdGhyb3cgZXJyb3IgaWYgbm9uZSBvZiB0aGUgdHlwZXMgY29udGFpbnMgYW4gZW50aXR5XG4gICAgICAgICAgKi9cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHNpZ25hbCA9IGNvbnRyb2xsZXIuc2lnbmFsO1xuXG4gICAgbGV0IHJlc3BvbnNlOyAvLyBzdG9yZXMgdGhlIGVudGl0eSB0byBiZSByZXR1cm5lZCBpbiB0aGUgZW5kXG5cbiAgICBmdW5jdGlvbiBzZXRBbmRTdG9wKHJlczogYW55KSB7XG4gICAgICBpZiAocmVzW1wiX2VtYmVkZGVkXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzcG9uc2UgPSByZXM7XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTsgLy8gYWJvcnQgcXVlcmllcyBmb3Igb3RoZXIgZW50aXR5VHlwZXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgdGhpcy5nZXRUZXJtKFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBpcmkgfSxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB0cnVlLFxuICAgICAgICBzaWduYWxcbiAgICAgICkudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgc2V0QW5kU3RvcChyZXMpO1xuICAgICAgfSksXG4gICAgICB0aGlzLmdldFByb3BlcnR5KFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBwcm9wZXJ0eUlyaTogaXJpIH0sXG4gICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgc2lnbmFsXG4gICAgICApLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgIHNldEFuZFN0b3AocmVzKTtcbiAgICAgIH0pLFxuICAgICAgdGhpcy5nZXRJbmRpdmlkdWFsKFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBpbmRpdmlkdWFsSXJpOiBpcmkgfSxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB0cnVlLFxuICAgICAgICBzaWduYWxcbiAgICAgICkudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgc2V0QW5kU3RvcChyZXMpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAocmVzcG9uc2UgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlc3BvbnNlO1xuICAgIGVsc2UgdGhyb3cgRXJyb3IoXCJJcmkgXCIgKyBpcmkgKyBcIiBjb3VsZCBub3QgYmUgcmVzb2x2ZWQuXCIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFuY2VzdG9ycyhcbiAgICBpcmk6IHN0cmluZyxcbiAgICBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSxcbiAgICBvbnRvbG9neUlkOiBzdHJpbmcsXG4gICAgdXNlTGVnYWN5ID0gZmFsc2UsXG4gICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgPSBmYWxzZVxuICApOiBQcm9taXNlPEVudGl0eVtdPiB7XG4gICAgbGV0IGFuY2VzdG9yczogYW55O1xuICAgIGlmIChpc0NsYXNzVHlwZU5hbWUoZW50aXR5VHlwZSkpIHtcbiAgICAgIGFuY2VzdG9ycyA9IGF3YWl0IHRoaXMubWFrZUNhbGwoXG4gICAgICAgIGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgoXG4gICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgIGlyaSxcbiAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgKX0vaGllcmFyY2hpY2FsQW5jZXN0b3JzYCxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdXNlTGVnYWN5XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbmNlc3RvcnMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgICBgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KFxuICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICBpcmksXG4gICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICl9L2FuY2VzdG9yc2AsXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHVzZUxlZ2FjeVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgbGV0IGxpc3RPZkFuY2VzdG9yT2JqOiBBcnJheTxFbnRpdHk+ID0gW107XG4gICAgICBsZXQgZXh0cmFjdEtleSA9IFwiXCI7XG4gICAgICBzd2l0Y2ggKGVudGl0eVR5cGUpIHtcbiAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgZXh0cmFjdEtleSA9IFwidGVybXNcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRlcm1cIjpcbiAgICAgICAgICBleHRyYWN0S2V5ID0gXCJ0ZXJtc1wiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgICAgICBleHRyYWN0S2V5ID0gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbmRpdmlkdWFsXCI6XG4gICAgICAgICAgZXh0cmFjdEtleSA9IFwiaW5kaXZpZHVhbHNcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkVudGl0eSB0eXBlIGNvdWxkIG5vdCBiZSBjb3JyZWN0bHkgaW5mZXJyZWQuXCIpO1xuICAgICAgfVxuICAgICAgYW5jZXN0b3JzW1wiX2VtYmVkZGVkXCJdW2V4dHJhY3RLZXldLm1hcCgob2JqOiBhbnkpID0+IHtcbiAgICAgICAgbGlzdE9mQW5jZXN0b3JPYmoucHVzaChcbiAgICAgICAgICBjcmVhdGVNb2RlbE9iamVjdCh7IF9lbWJlZGRlZDogeyBbZXh0cmFjdEtleV06IFtvYmpdIH0gfSkgYXMgRW50aXR5XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBsaXN0T2ZBbmNlc3Rvck9iajtcbiAgICB9XG4gICAgcmV0dXJuIGFuY2VzdG9yc1tcImVsZW1lbnRzXCJdLm1hcChcbiAgICAgIChvYmo6IGFueSkgPT4gY3JlYXRlTW9kZWxPYmplY3QoeyBlbGVtZW50czogW29ial0gfSkgYXMgRW50aXR5XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRKU1RyZWUoXG4gICAgaXJpOiBzdHJpbmcsXG4gICAgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsXG4gICAgb250b2xvZ3lJZDogc3RyaW5nXG4gICk6IFByb21pc2U8SlNUcmVlTm9kZVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZUNhbGwoXG4gICAgICBgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIGlyaSwgdHJ1ZSl9L2pzdHJlZWAsXG4gICAgICB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgdmlld01vZGU6IFwiQWxsXCIgfSB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICAvLyBUT0RPOiBEbyB3ZSB3YW50IHRoZSBzYW1lIGJlaGF2aW9yIGFzIEVNQkwgRUJJIChlLmcuIG5vdCBnZXR0aW5nIGluc3RhbmNlcyBmb3IgY2xhc3NlcyBpZiBlbnRpdHlUeXBlICE9IFwiaW5kaXZpZHVhbFwiKT9cbiAgcHVibGljIGFzeW5jIGdldENoaWxkcmVuKFxuICAgIGlyaTogc3RyaW5nLFxuICAgIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLFxuICAgIG9udG9sb2d5SWQ6IHN0cmluZyxcbiAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IGZhbHNlLFxuICAgIHVzZUxlZ2FjeSA9IGZhbHNlXG4gICk6IFByb21pc2U8RW50aXR5W10+IHtcbiAgICBsZXQgY2hpbGRyZW46IGFueTtcbiAgICBpZiAoaXNDbGFzc1R5cGVOYW1lKGVudGl0eVR5cGUpKSB7XG4gICAgICBjaGlsZHJlbiA9IGF3YWl0IHRoaXMubWFrZUNhbGwoXG4gICAgICAgIGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgoXG4gICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICBjbGFzc1R5cGVOYW1lc1swXSxcbiAgICAgICAgICBpcmksXG4gICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICl9L2hpZXJhcmNoaWNhbENoaWxkcmVuYCxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdXNlTGVnYWN5XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaXNJbmRpdmlkdWFsVHlwZU5hbWUoZW50aXR5VHlwZSkpIHtcbiAgICAgIC8vIGVudGl0eVR5cGUgZG9lcyBOT1QgaW5kaWNhdGUgd2hpY2ggdHlwZSB0aGUgZW50aXR5IG9mIHRoZSBwcm92aWRlZCBpcmkgaGFzLCBidXQgd2hpY2ggdHlwZSBvZiBoaWVyYXJjaHkgaXMgZGVzaXJlZFxuICAgICAgLy8gLT4gXCJjbGFzc1wiIGhhcyB0byBiZSBwcm92aWRlZCBmb3IgaW5kaXZpZHVhbCBoaWVyYXJjaHkgYXMgd2VsbCwgYXMgaW5kaXZpZHVhbHMgYXJlIGFsd2F5cyBjaGlsZHJlbiBvZiBjbGFzc2VzXG4gICAgICBpZiAodXNlTGVnYWN5KSB7XG4gICAgICAgIC8vIFRPRE86IERvZXMgZGVzY2VuZGFudHMgYWx3YXlzIHdvcmsgZm9yIHRoaXMgKG9yIGFyZSB0aGVyZSBjbGFzc2VzIHdpdGggYm90aCBpbmRpdmlkdWFscyBhbmQgY2xhc3NlcyBhcyBkZXNjZW5kYW50cyk/XG4gICAgICAgIGNoaWxkcmVuID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChcbiAgICAgICAgICBgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIGNsYXNzVHlwZU5hbWVzWzBdLFxuICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICAgKX0vZGVzY2VuZGFudHNgLFxuICAgICAgICAgIHsgcGFyYW1zOiB7IHNpemU6IFwiMTAwMFwiIH0gfSxcbiAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVuID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChcbiAgICAgICAgICBgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIGNsYXNzVHlwZU5hbWVzWzBdLFxuICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICAgKX0vaW5zdGFuY2VzYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgICBgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KFxuICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICBpcmksXG4gICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICl9L2NoaWxkcmVuYCxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdXNlTGVnYWN5XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh1c2VMZWdhY3kpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbltcIl9lbWJlZGRlZFwiXVtcbiAgICAgICAgaXNJbmRpdmlkdWFsVHlwZU5hbWUoZW50aXR5VHlwZSlcbiAgICAgICAgICA/IHBsdXJhbGl6ZVR5cGUoY2xhc3NUeXBlTmFtZXNbMF0sIHVzZUxlZ2FjeSlcbiAgICAgICAgICA6IHBsdXJhbGl6ZVR5cGUoZW50aXR5VHlwZSwgdXNlTGVnYWN5KVxuICAgICAgXS5tYXAoXG4gICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICBjcmVhdGVNb2RlbE9iamVjdCh7XG4gICAgICAgICAgICBbXCJfZW1iZWRkZWRcIl06IHtcbiAgICAgICAgICAgICAgW2lzSW5kaXZpZHVhbFR5cGVOYW1lKGVudGl0eVR5cGUpXG4gICAgICAgICAgICAgICAgPyBwbHVyYWxpemVUeXBlKGNsYXNzVHlwZU5hbWVzWzBdLCB1c2VMZWdhY3kpXG4gICAgICAgICAgICAgICAgOiBwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUpXTogW29ial0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pIGFzIEVudGl0eVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuW1wiZWxlbWVudHNcIl0ubWFwKFxuICAgICAgICAob2JqOiBhbnkpID0+IGNyZWF0ZU1vZGVsT2JqZWN0KHsgZWxlbWVudHM6IFtvYmpdIH0pIGFzIEVudGl0eVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Um9vdEVudGl0aWVzKFxuICAgIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLFxuICAgIG9udG9sb2d5SWQ6IHN0cmluZyxcbiAgICBwcmVmZXJyZWRSb290cyA9IGZhbHNlLFxuICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzID0gZmFsc2UsXG4gICAgdXNlTGVnYWN5ID0gZmFsc2VcbiAgKTogUHJvbWlzZTxFbnRpdHlbXT4ge1xuICAgIGlmICh1c2VMZWdhY3kpIHtcbiAgICAgIGlmIChpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSkge1xuICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsc1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiAvcHJlZmVycmVkUm9vdHMgcm91dGUgc2hvdWxkIGV4aXN0IGluIGxlZ2FjeSBhcGksIGJ1dCBkb2VzIG5vdCB3b3JrXG4gICAgICAgIGNvbnN0IHJvb3RzID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChcbiAgICAgICAgICBgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgICApfS9yb290c2AsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHJvb3RzW1wiX2VtYmVkZGVkXCJdW3BsdXJhbGl6ZVR5cGUoZW50aXR5VHlwZSwgdXNlTGVnYWN5KV0ubWFwKFxuICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHtcbiAgICAgICAgICAgICAgW1wiX2VtYmVkZGVkXCJdOiB7IFtwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUsIHVzZUxlZ2FjeSldOiBbb2JqXSB9LFxuICAgICAgICAgICAgfSkgYXMgRW50aXR5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSkge1xuICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsc1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByb290cyA9IGF3YWl0IHRoaXMubWFrZUNhbGwoXG4gICAgICAgICAgYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChcbiAgICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICAgKX1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICBzaXplOiBcIjEwMDBcIixcbiAgICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICAgICAgICBoYXNEaXJlY3RQYXJlbnRzOiBwcmVmZXJyZWRSb290cyA/IHVuZGVmaW5lZCA6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgaXNQcmVmZXJyZWRSb290OiBwcmVmZXJyZWRSb290cyA/IFwidHJ1ZVwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZUxlZ2FjeVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiByb290c1tcImVsZW1lbnRzXCJdLm1hcChcbiAgICAgICAgICAob2JqOiBhbnkpID0+IGNyZWF0ZU1vZGVsT2JqZWN0KHsgZWxlbWVudHM6IFtvYmpdIH0pIGFzIEVudGl0eVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDbGFzc0luc3RhbmNlcyhcbiAgICBpcmk6IHN0cmluZyxcbiAgICBvbnRvbG9neUlkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxJbmRpdmlkdWFsW10+IHtcbiAgICBjb25zdCBpbnN0YW5jZXMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgY2xhc3NUeXBlTmFtZXNbMF0sXG4gICAgICAgIGlyaSxcbiAgICAgICAgZmFsc2VcbiAgICAgICl9L2luZGl2aWR1YWxzYCxcbiAgICAgIHsgcGFyYW1zOiB7IHNpemU6IFwiMTAwMFwiIH0gfSxcbiAgICAgIGZhbHNlXG4gICAgKTtcblxuICAgIHJldHVybiBpbnN0YW5jZXNbXCJlbGVtZW50c1wiXS5tYXAoXG4gICAgICAob2JqOiBhbnkpID0+IGNyZWF0ZU1vZGVsT2JqZWN0KHsgZWxlbWVudHM6IFtvYmpdIH0pIGFzIEluZGl2aWR1YWxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkSGllcmFyY2h5V2l0aElyaShcbiAgICBwcm9wczogQnVpbGRIaWVyYXJjaHlQcm9wcyAmIEhpZXJhcmNoeUlyaVByb3BcbiAgKTogUHJvbWlzZTxIaWVyYXJjaHk+IHtcbiAgICBjb25zdCB7XG4gICAgICBpcmksXG4gICAgICBvbnRvbG9neUlkLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICAgIHByZWZlcnJlZFJvb3RzID0gZmFsc2UsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IGZhbHNlLFxuICAgICAga2VlcEV4cGFuc2lvblN0YXRlcyA9IHRydWUsXG4gICAgICBzaG93U2libGluZ3NPbkluaXQgPSBmYWxzZSxcbiAgICAgIHVzZUxlZ2FjeSA9IGZhbHNlLFxuICAgIH0gPSBwcm9wcztcblxuICAgIGlmIChpcmkpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEVudGl0eU9iamVjdChcbiAgICAgICAgaXJpLFxuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICBcIlwiLFxuICAgICAgICB1c2VMZWdhY3lcbiAgICAgICkudGhlbigoZW50aXR5KSA9PlxuICAgICAgICB0aGlzLmJ1aWxkSGllcmFyY2h5V2l0aEVudGl0eSh7XG4gICAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSB8fCAoZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZSksXG4gICAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCB8fCBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgICBwcmVmZXJyZWRSb290czogcHJlZmVycmVkUm9vdHMsXG4gICAgICAgICAgbWFpbkVudGl0eTogZW50aXR5LFxuICAgICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0OiBzaG93U2libGluZ3NPbkluaXQsXG4gICAgICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZW50aXR5VHlwZSA9PSB1bmRlZmluZWQgfHwgb250b2xvZ3lJZCA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiRWl0aGVyIGlyaSBvciBvbnRvbG9neUlkIGFuZCBlbnRpdHlUeXBlIGhhdmUgdG8gYmUgcHJvdmlkZWQuXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJ1aWxkUm9vdEhpZXJhcmNoeSh7XG4gICAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG4gICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsXG4gICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgcHJlZmVycmVkUm9vdHM6IHByZWZlcnJlZFJvb3RzLFxuICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBrZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgICBzaG93U2libGluZ3NPbkluaXQ6IHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMganNUcmVlTm9kZVRvRW50aXR5RGF0YShqc1RyZWVOb2RlOiBKU1RyZWVOb2RlKTogRW50aXR5RGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlyaToganNUcmVlTm9kZS5pcmksXG4gICAgICBsYWJlbDoganNUcmVlTm9kZS50ZXh0LFxuICAgICAgaGFzQ2hpbGRyZW46IGpzVHJlZU5vZGUuY2hpbGRyZW4gfHwganNUcmVlTm9kZS5zdGF0ZS5vcGVuZWQsXG4gICAgICBwYXJlbnRzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGVudGl0eVRvRW50aXR5RGF0YShlbnRpdHk6IEVudGl0eSk6IEVudGl0eURhdGEge1xuICAgIHJldHVybiB7XG4gICAgICBpcmk6IGVudGl0eS5nZXRJcmkoKSxcbiAgICAgIGxhYmVsOiBhc0FycmF5KGVudGl0eS5nZXRMYWJlbCgpKVswXSxcbiAgICAgIGRlZmluZWRCeTogZW50aXR5LmdldERlZmluZWRCeSgpLFxuICAgICAgaGFzQ2hpbGRyZW46IGVudGl0eS5oYXNDaGlsZHJlbigpLFxuICAgICAgbnVtRGVzY2VuZGFudHM6XG4gICAgICAgIGVudGl0eS5nZXROdW1IaWVyYXJjaGljYWxEZXNjZW5kYW50cygpIHx8IGVudGl0eS5nZXROdW1EZXNjZW5kYW50cygpLFxuICAgICAgcGFyZW50czogZW50aXR5LmdldFBhcmVudHMoKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkUm9vdEhpZXJhcmNoeShcbiAgICBwcm9wczoge1xuICAgICAgb250b2xvZ3lJZDogc3RyaW5nO1xuICAgICAgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWU7XG4gICAgfSAmIEJ1aWxkSGllcmFyY2h5UHJvcHNcbiAgKTogUHJvbWlzZTxIaWVyYXJjaHk+IHtcbiAgICBjb25zdCB7XG4gICAgICBvbnRvbG9neUlkLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICAgIHByZWZlcnJlZFJvb3RzLFxuICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICB1c2VMZWdhY3ksXG4gICAgfSA9IHByb3BzO1xuXG4gICAgLyogUVVFUlkgcm9vdCBlbnRpdGllcyAqL1xuICAgIGNvbnN0IHJvb3RFbnRpdGllc0RhdGEgPSAoXG4gICAgICBhd2FpdCB0aGlzLmdldFJvb3RFbnRpdGllcyhcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgcHJlZmVycmVkUm9vdHMsXG4gICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICB1c2VMZWdhY3lcbiAgICAgIClcbiAgICApXG4gICAgICAubWFwKChlbnRpdHkpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhKGVudGl0eSkpXG4gICAgICAuZmlsdGVyKChyb290KSA9PiAhaXNUb3Aocm9vdC5pcmkpKTtcbiAgICAvKiAtLS0gKi9cblxuICAgIC8qIElOSVRJQUxJWkUgZW50aXRpZXNEYXRhLCBwYXJlbnRDaGlsZFJlbGF0aW9ucyAqL1xuICAgIGNvbnN0IHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+ID0gbmV3IE1hcDxcbiAgICAgIHN0cmluZyxcbiAgICAgIFBhcmVudENoaWxkUmVsYXRpb25bXVxuICAgID4oKTtcbiAgICBjb25zdCBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+ID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+KCk7XG4gICAgZm9yIChjb25zdCBlbnRpdHlEYXRhIG9mIHJvb3RFbnRpdGllc0RhdGEpIHtcbiAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChlbnRpdHlEYXRhLmlyaSwgW10pOyAvLyBpbml0aWFsaXplIHdpdGggZW1wdHkgYXJyYXlcbiAgICAgIGVudGl0aWVzRGF0YS5zZXQoZW50aXR5RGF0YS5pcmksIGVudGl0eURhdGEpO1xuICAgIH1cbiAgICAvKiAtLS0gKi9cblxuICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBuZXcgU2V0KCksXG4gICAgICByb290czogcm9vdEVudGl0aWVzRGF0YVxuICAgICAgICAubWFwKChyb290KSA9PiBuZXcgVHJlZU5vZGUocm9vdCkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgIChhLmVudGl0eURhdGEubGFiZWwgfHwgYS5lbnRpdHlEYXRhLmlyaSkubG9jYWxlQ29tcGFyZShcbiAgICAgICAgICAgIGIuZW50aXR5RGF0YS5sYWJlbCB8fCBiLmVudGl0eURhdGEuaXJpXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgYXBpOiBuZXcgT2xzQXBpKHRoaXMuYXhpb3NJbnN0YW5jZS5nZXRVcmkoKSksXG4gICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcbiAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IHByb3BzLmtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBidWlsZEhpZXJhcmNoeVdpdGhFbnRpdHkoXG4gICAgcHJvcHM6IHtcbiAgICAgIG1haW5FbnRpdHk6IEVudGl0eTtcbiAgICAgIG9udG9sb2d5SWQ6IHN0cmluZztcbiAgICAgIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lO1xuICAgIH0gJiBCdWlsZEhpZXJhcmNoeVByb3BzXG4gICk6IFByb21pc2U8SGllcmFyY2h5PiB7XG4gICAgY29uc3Qge1xuICAgICAgbWFpbkVudGl0eSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgcHJlZmVycmVkUm9vdHMsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgIHVzZUxlZ2FjeSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICAvKiBMT0FEIGFuY2VzdG9ycyAqL1xuICAgIGxldCBlbnRpdGllczogRW50aXR5RGF0YVtdID0gW107XG5cbiAgICBpZiAodXNlTGVnYWN5KSB7XG4gICAgICAvLyBUT0RPOiBKU1RyZWUgc29tZXRpbWVzIHJldHVybnMgc21hbGxlciB0cmVlcyB0aGFuIHdvdWxkIGJlIHBvc3NpYmxlIHZpYSBxdWVyeWluZyBoaWVyYXJjaGljYWwgYW5jZXN0b3JzIGFuZCBhbGwgY2hpbGRyZW4gb2YgdGhvc2UgKGUuZy4gaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1VCRVJPTl8yMDAxNzQ3IC0+IHN0cmFuZ2UgYW5kIG5vdCByZWFsbHkgdXNlZnVsIGhpZXJhcmNoeSBiZWNhdXNlIG1hbnkgZW50aXRpZXMgYXJlIGJvdGggc2libGluZyBhbmQgY2hpbGRyZW4gb2Ygb3RoZXIgZW50aXRpZXMgKGlzIGl0IHdyb25nIHRvIHRha2UgaGllcmFyY2hpY2FsUGFyZW50IGluc3RlYWQgb2YgZGlyZWN0UGFyZW50IGluIGVudGl0eVRvRW50aXR5RGF0YVRvSGllcmFyY2h5PyBFTUJMLUVCSSBkb2VzIGl0IGxpa2UgdGhhdCBhcyB3ZWxsKSlcbiAgICAgIC8vICAgICAgIFF1ZXN0aW9uOiBTaG91bGQgd2UgcHJlZmVyIGNvbXBsZXRlIGhpZXJhcmNoaWVzIChxdWVyeSAvaGllcmFyY2hpY2FsQW5jZXN0b3JzICsgL2NoaWxkcmVuIGZvciBlYWNoKSBvciBzbGltIHF1ZXJpZXMgKHF1ZXJ5IC9qc3RyZWUpP1xuICAgICAgY29uc3QganNUcmVlID0gYXdhaXQgdGhpcy5nZXRKU1RyZWUoXG4gICAgICAgIG1haW5FbnRpdHkuZ2V0SXJpKCksXG4gICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgIG9udG9sb2d5SWRcbiAgICAgICk7XG4gICAgICBjb25zdCBpZFRvSXJpOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgIGNvbnN0IHBhcmVudHM6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PiA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcblxuICAgICAgZm9yIChjb25zdCBqc1RyZWVOb2RlIG9mIGpzVHJlZSkge1xuICAgICAgICBpZFRvSXJpLnNldChqc1RyZWVOb2RlLmlkLCBqc1RyZWVOb2RlLmlyaSk7XG4gICAgICAgIHBhcmVudHMuc2V0KGpzVHJlZU5vZGUuaXJpLCBuZXcgU2V0PHN0cmluZz4oKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QganNUcmVlTm9kZSBvZiBqc1RyZWUpIHtcbiAgICAgICAgY29uc3QgcGFyQXJyID0gcGFyZW50cy5nZXQoanNUcmVlTm9kZS5pcmkpO1xuICAgICAgICBjb25zdCBwYXJJcmkgPSBpZFRvSXJpLmdldChqc1RyZWVOb2RlLnBhcmVudCk7XG4gICAgICAgIGlmIChwYXJBcnIgIT0gdW5kZWZpbmVkICYmIHBhcklyaSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXJBcnIuYWRkKHBhcklyaSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZW50aXRpZXMgPSBbXTtcbiAgICAgIGNvbnN0IGluQXJyID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgIGZvciAoY29uc3QganNUcmVlTm9kZSBvZiBqc1RyZWUpIHtcbiAgICAgICAgaWYgKCFpbkFyci5oYXMoanNUcmVlTm9kZS5pcmkpKSB7XG4gICAgICAgICAgaW5BcnIuYWRkKGpzVHJlZU5vZGUuaXJpKTtcblxuICAgICAgICAgIGVudGl0aWVzLnB1c2godGhpcy5qc1RyZWVOb2RlVG9FbnRpdHlEYXRhKGpzVHJlZU5vZGUpKTtcbiAgICAgICAgICBjb25zdCBwYXIgPSBwYXJlbnRzLmdldChqc1RyZWVOb2RlLmlyaSk7XG4gICAgICAgICAgaWYgKHBhciAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICBlbnRpdGllc1tlbnRpdGllcy5sZW5ndGggLSAxXS5wYXJlbnRzID1cbiAgICAgICAgICAgICAgUmVpZmllZC5mcm9tSnNvbihBcnJheS5mcm9tKHBhci52YWx1ZXMoKSkpIHx8IFtdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFuY2VzdG9ycyA9IGF3YWl0IHRoaXMuZ2V0QW5jZXN0b3JzKFxuICAgICAgICBtYWluRW50aXR5LmdldElyaSgpLFxuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICBvbnRvbG9neUlkIHx8IG1haW5FbnRpdHkuZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllc1xuICAgICAgKTtcbiAgICAgIGVudGl0aWVzID0gW1xuICAgICAgICB0aGlzLmVudGl0eVRvRW50aXR5RGF0YShtYWluRW50aXR5KSxcbiAgICAgICAgLi4uYW5jZXN0b3JzLm1hcCgoZW50aXR5KSA9PiB0aGlzLmVudGl0eVRvRW50aXR5RGF0YShlbnRpdHkpKSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIHRvcCBlbnRpdGllc1xuICAgIGVudGl0aWVzID0gZW50aXRpZXMuZmlsdGVyKChlKSA9PiAhaXNUb3AoZS5pcmkpKTtcbiAgICAvKiAtLS0gKi9cblxuICAgIC8qIEJVSUxEIHBhcmVudENoaWxkUmVsYXRpb25zICovXG4gICAgY29uc3QgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4gPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgUGFyZW50Q2hpbGRSZWxhdGlvbltdXG4gICAgPigpO1xuICAgIGNvbnN0IGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+ID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+KCk7XG5cbiAgICAvLyBpbml0aWFsaXplIHBhcmVudENoaWxkUmVsYXRpb25zICYgZW50aXRpZXNEYXRhXG4gICAgZm9yIChjb25zdCBlbnRpdHlEYXRhIG9mIGVudGl0aWVzKSB7XG4gICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucy5zZXQoZW50aXR5RGF0YS5pcmksIFtdKTsgLy8gaW5pdGlhbGl6ZSB3aXRoIGVtcHR5IGFycmF5XG4gICAgICBlbnRpdGllc0RhdGEuc2V0KGVudGl0eURhdGEuaXJpLCBlbnRpdHlEYXRhKTtcbiAgICB9XG5cbiAgICBpZiAoc2hvd1NpYmxpbmdzT25Jbml0KSB7XG4gICAgICAvLyBhZGRpdGlvbmFsbHkgbG9hZCBzaWJsaW5ncyBmcm9tIGFwaVxuICAgICAgY29uc3QgcmVhbEVudGl0eVR5cGUgPSBlbnRpdHlUeXBlIHx8IG1haW5FbnRpdHkuZ2V0VHlwZSgpO1xuICAgICAgY29uc3QgZW50aXR5VHlwZUZvclF1ZXJ5ID1cbiAgICAgICAgcmVhbEVudGl0eVR5cGUgPT0gXCJpbmRpdmlkdWFsXCIgPyBcImNsYXNzXCIgOiByZWFsRW50aXR5VHlwZTsgLy8gVE9ETzogb25seSByZWxldmFudCBmb3IgZW50aXR5VHlwZSA9PSBcImluZGl2aWR1YWxcIiAobWF5YmUgd2UgZG9uJ3QgZXZlbiBuZWVkIHRoaXMgYXMgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzIGlzIG5vdCB5ZXQgZGV0ZXJtaW5lZClcblxuICAgICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBlbnRpdHlEYXRhIG9mIGVudGl0aWVzKSB7XG4gICAgICAgIGlmIChlbnRpdHlEYXRhLmlyaSAhPSBtYWluRW50aXR5LmdldElyaSgpKSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICAgICAgICB0aGlzLmdldENoaWxkcmVuKFxuICAgICAgICAgICAgICAgIGVudGl0eURhdGEuaXJpLFxuICAgICAgICAgICAgICAgIGVudGl0eVR5cGVGb3JRdWVyeSxcbiAgICAgICAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICAgICAgICAgIHVzZUxlZ2FjeVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnRoZW4oKGNoaWxkcmVuKSA9PlxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4gdGhpcy5lbnRpdHlUb0VudGl0eURhdGEoY2hpbGQpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAudGhlbigoY2hpbGRyZW4pID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhckNoaWxkUmVsOiBQYXJlbnRDaGlsZFJlbGF0aW9uW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgZW50aXRpZXNEYXRhLnNldChjaGlsZC5pcmksIGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLnBhcmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJSZWxhdGlvbiA9IGNoaWxkLnBhcmVudHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHBhcikgPT4gcGFyLnZhbHVlID09IGVudGl0eURhdGEuaXJpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBwYXJDaGlsZFJlbC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSXJpOiBjaGlsZC5pcmksXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhclJlbGF0aW9uLmxlbmd0aCA+IDAgJiYgcGFyUmVsYXRpb25bMF0uZ2V0TWV0YWRhdGEoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcGFyUmVsYXRpb25bMF0uZ2V0TWV0YWRhdGEoKVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGlsZFJlbGF0aW9uVG9QYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IC8vIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KGVudGl0eURhdGEuaXJpLCBwYXJDaGlsZFJlbCk7XG4gICAgICAgICAgICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQuYWRkKGVudGl0eURhdGEuaXJpKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocHJvbWlzZXMpO1xuXG4gICAgICAvLyBUT0RPOiBvbmx5IHJlbGV2YW50IGZvciBlbnRpdHlUeXBlID09IFwiaW5kaXZpZHVhbFwiIChtYXliZSB3ZSBkb24ndCBldmVuIG5lZWQgdGhpcyBhcyBiZWhhdmlvdXIgZm9yIGluZGl2aWR1YWwgaGllcmFyY2hpZXMgaXMgbm90IHlldCBkZXRlcm1pbmVkKVxuICAgICAgaWYgKHJlYWxFbnRpdHlUeXBlID09IFwiaW5kaXZpZHVhbFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGFyZW50UmVpZmllZCBvZiBtYWluRW50aXR5LmdldFBhcmVudHMoKSkge1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gKFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRDaGlsZHJlbihcbiAgICAgICAgICAgICAgcGFyZW50UmVpZmllZC52YWx1ZSxcbiAgICAgICAgICAgICAgcmVhbEVudGl0eVR5cGUsXG4gICAgICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKS5tYXAoKGNoaWxkKSA9PiB0aGlzLmVudGl0eVRvRW50aXR5RGF0YShjaGlsZCkpO1xuXG4gICAgICAgICAgY29uc3QgcGFyQ2hpbGRSZWw6IFBhcmVudENoaWxkUmVsYXRpb25bXSA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHBhckNoaWxkUmVsLnB1c2goe1xuICAgICAgICAgICAgICBjaGlsZElyaTogY2hpbGQuaXJpLFxuICAgICAgICAgICAgICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6XG4gICAgICAgICAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZVwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChwYXJlbnRSZWlmaWVkLnZhbHVlLCBwYXJDaGlsZFJlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBlbnRpdHlEYXRhIG9mIGVudGl0aWVzKSB7XG4gICAgICAgIGlmIChlbnRpdHlEYXRhLnBhcmVudHMpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRzID0gZW50aXR5RGF0YS5wYXJlbnRzLmZpbHRlcihcbiAgICAgICAgICAgIChwYXJlbnRSZWlmaWVkOiBSZWlmaWVkPHN0cmluZz4pID0+ICFpc1RvcChwYXJlbnRSZWlmaWVkLnZhbHVlKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZW50aXR5RGF0YS5pcmkgPT0gbWFpbkVudGl0eT8uZ2V0SXJpKCkgJiZcbiAgICAgICAgICAgIGlzSW5kaXZpZHVhbFR5cGVOYW1lKGVudGl0eVR5cGUgfHwgbWFpbkVudGl0eS5nZXRUeXBlKCkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmVudFJlaWZpZWQgb2YgcGFyZW50cykge1xuICAgICAgICAgICAgICBpZiAocGFyZW50Q2hpbGRSZWxhdGlvbnMuaGFzKHBhcmVudFJlaWZpZWQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KHBhcmVudFJlaWZpZWQudmFsdWUpPy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGNoaWxkSXJpOiBlbnRpdHlEYXRhLmlyaSxcbiAgICAgICAgICAgICAgICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudDpcbiAgICAgICAgICAgICAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZVwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFyZW50UmVpZmllZCBvZiBwYXJlbnRzKSB7XG4gICAgICAgICAgICAgIGlmIChwYXJlbnRDaGlsZFJlbGF0aW9ucy5oYXMocGFyZW50UmVpZmllZC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucy5nZXQocGFyZW50UmVpZmllZC52YWx1ZSk/LnB1c2goe1xuICAgICAgICAgICAgICAgICAgY2hpbGRJcmk6IGVudGl0eURhdGEuaXJpLFxuICAgICAgICAgICAgICAgICAgY2hpbGRSZWxhdGlvblRvUGFyZW50OiBwYXJlbnRSZWlmaWVkLmdldE1ldGFkYXRhKClcbiAgICAgICAgICAgICAgICAgICAgPyBwYXJlbnRSZWlmaWVkLmdldE1ldGFkYXRhKClbXCJjaGlsZFJlbGF0aW9uVG9QYXJlbnRcIl1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzb3J0IHBhcmVudENoaWxkUmVsYXRpb25zXG4gICAgZm9yIChjb25zdCByZWwgb2YgcGFyZW50Q2hpbGRSZWxhdGlvbnMudmFsdWVzKCkpXG4gICAgICByZWwuc29ydCgoYSwgYikgPT5cbiAgICAgICAgKGVudGl0aWVzRGF0YS5nZXQoYS5jaGlsZElyaSk/LmxhYmVsIHx8IGEuY2hpbGRJcmkpLmxvY2FsZUNvbXBhcmUoXG4gICAgICAgICAgZW50aXRpZXNEYXRhLmdldChiLmNoaWxkSXJpKT8ubGFiZWwgfHwgYi5jaGlsZElyaVxuICAgICAgICApXG4gICAgICApO1xuICAgIC8qIC0tLSAqL1xuXG4gICAgLyogQlVJTEQgcm9vdEVudGl0aWVzICovXG4gICAgY29uc3Qgcm9vdEVudGl0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChwcmVmZXJyZWRSb290cykge1xuICAgICAgY29uc3QgcHJlZmVycmVkUm9vdEVudGl0aWVzID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmdldE9udG9sb2d5T2JqZWN0KG9udG9sb2d5SWQsIHVuZGVmaW5lZCwgdXNlTGVnYWN5KVxuICAgICAgKS5nZXRQcmVmZXJyZWRSb290cygpO1xuICAgICAgZm9yIChjb25zdCBlIG9mIHByZWZlcnJlZFJvb3RFbnRpdGllcykge1xuICAgICAgICBpZiAoZW50aXRpZXNEYXRhLmhhcyhlKSkgcm9vdEVudGl0aWVzLnB1c2goZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgZW50aXR5RGF0YSBvZiBlbnRpdGllcykge1xuICAgICAgICBpZiAoZW50aXR5RGF0YS5wYXJlbnRzKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50cyA9IGVudGl0eURhdGEucGFyZW50cy5maWx0ZXIoXG4gICAgICAgICAgICAocGFyZW50UmVpZmllZDogUmVpZmllZDxzdHJpbmc+KSA9PiAhaXNUb3AocGFyZW50UmVpZmllZC52YWx1ZSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChwYXJlbnRzLmxlbmd0aCA9PSAwKSByb290RW50aXRpZXMucHVzaChlbnRpdHlEYXRhLmlyaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLyogLS0tICovXG5cbiAgICBmdW5jdGlvbiBjcmVhdGVUcmVlTm9kZShcbiAgICAgIGVudGl0eURhdGE6IEVudGl0eURhdGEsXG4gICAgICBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPixcbiAgICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudD86IHN0cmluZ1xuICAgICk6IFRyZWVOb2RlIHtcbiAgICAgIGN5Y2xlQ2hlY2suYWRkKGVudGl0eURhdGEuaXJpKTsgLy8gYWRkIGN1cnJlbnQgZW50aXR5IHRvIGN5Y2xlIGNoZWNrIHNldFxuXG4gICAgICBjb25zdCBub2RlID0gbmV3IFRyZWVOb2RlKGVudGl0eURhdGEpO1xuICAgICAgbm9kZS5jaGlsZFJlbGF0aW9uVG9QYXJlbnQgPSBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkUmVsYXRpb25zLmdldChlbnRpdHlEYXRhLmlyaSkgfHwgW107XG5cbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgIC8vIGN5Y2xpYyB0cmVlLCBza2lwIGN5Y2xlXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoaWxkRGF0YSA9IGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpO1xuICAgICAgICBpZiAoY2hpbGREYXRhICE9IHVuZGVmaW5lZClcbiAgICAgICAgICBub2RlLmFkZENoaWxkKFxuICAgICAgICAgICAgY3JlYXRlVHJlZU5vZGUoY2hpbGREYXRhLCBjeWNsZUNoZWNrLCBjaGlsZC5jaGlsZFJlbGF0aW9uVG9QYXJlbnQpXG4gICAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoID4gMCkgbm9kZS5leHBhbmRlZCA9IHRydWU7XG5cbiAgICAgIGN5Y2xlQ2hlY2suZGVsZXRlKGVudGl0eURhdGEuaXJpKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGNvbnN0IGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIENvbnRhaW5zIGlyaXMgb2YgYWxsIGVudGl0aWVzIHRoYXQgaGF2ZSBvY2N1cnJlZCB3aXRoaW4gdGhlIGN1cnJlbnQgcmVjdXJzaW9uIGJyYW5jaC4gSXMgdXNlZCB0byBjaGVjayBmb3IgY3ljbGVzLlxuXG4gICAgcmV0dXJuIG5ldyBIaWVyYXJjaHkoe1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IHBhcmVudENoaWxkUmVsYXRpb25zLFxuICAgICAgZW50aXRpZXNEYXRhOiBlbnRpdGllc0RhdGEsXG4gICAgICBhbGxDaGlsZHJlblByZXNlbnQ6IGFsbENoaWxkcmVuUHJlc2VudCxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICByb290czogcm9vdEVudGl0aWVzXG4gICAgICAgIC5tYXAoKHJvb3RFbnRpdHkpID0+XG4gICAgICAgICAgY3JlYXRlVHJlZU5vZGUoZW50aXRpZXNEYXRhLmdldChyb290RW50aXR5KSEsIGN5Y2xlQ2hlY2spXG4gICAgICAgIClcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgKGEuZW50aXR5RGF0YS5sYWJlbCB8fCBhLmVudGl0eURhdGEuaXJpKS5sb2NhbGVDb21wYXJlKFxuICAgICAgICAgICAgYi5lbnRpdHlEYXRhLmxhYmVsIHx8IGIuZW50aXR5RGF0YS5pcmlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICBhcGk6IG5ldyBPbHNBcGkodGhpcy5heGlvc0luc3RhbmNlLmdldFVyaSgpKSxcbiAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxuICAgICAgbWFpbkVudGl0eUlyaTogbWFpbkVudGl0eT8uZ2V0SXJpKCksXG4gICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEhpZXJhcmNoeUNoaWxkcmVuKFxuICAgIHByb3BzOiBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wc1xuICApOiBQcm9taXNlPEVudGl0eURhdGFbXT4ge1xuICAgIGlmIChwcm9wcy5lbnRpdHlUeXBlID09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IEVycm9yKFwiRW50aXR5VHlwZSBoYXMgdG8gYmUgcHJvdmlkZWQgdG8gbG9hZCBjaGlsZHJlbiBpbiBPTFMuXCIpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Q2hpbGRyZW4oXG4gICAgICAgIHByb3BzLm5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSxcbiAgICAgICAgcHJvcHMuZW50aXR5VHlwZSxcbiAgICAgICAgcHJvcHMub250b2xvZ3lJZCxcbiAgICAgICAgcHJvcHMuaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgIHByb3BzLnVzZUxlZ2FjeVxuICAgICAgKVxuICAgICkubWFwKChlbnRpdHkpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhKGVudGl0eSkpO1xuICB9XG59XG4iLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL3NjcmVlbl9yZWFkZXJfb25seSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTY3JlZW5SZWFkZXJMaXZlID0gZnVuY3Rpb24gRXVpU2NyZWVuUmVhZGVyTGl2ZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgX3JlZiRpc0FjdGl2ZSA9IF9yZWYuaXNBY3RpdmUsXG4gICAgaXNBY3RpdmUgPSBfcmVmJGlzQWN0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRpc0FjdGl2ZSxcbiAgICBfcmVmJHJvbGUgPSBfcmVmLnJvbGUsXG4gICAgcm9sZSA9IF9yZWYkcm9sZSA9PT0gdm9pZCAwID8gJ3N0YXR1cycgOiBfcmVmJHJvbGUsXG4gICAgX3JlZiRhcmlhTGl2ZSA9IF9yZWZbJ2FyaWEtbGl2ZSddLFxuICAgIGFyaWFMaXZlID0gX3JlZiRhcmlhTGl2ZSA9PT0gdm9pZCAwID8gJ3BvbGl0ZScgOiBfcmVmJGFyaWFMaXZlLFxuICAgIF9yZWYkZm9jdXNSZWdpb25PblRleCA9IF9yZWYuZm9jdXNSZWdpb25PblRleHRDaGFuZ2UsXG4gICAgZm9jdXNSZWdpb25PblRleHRDaGFuZ2UgPSBfcmVmJGZvY3VzUmVnaW9uT25UZXggPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRmb2N1c1JlZ2lvbk9uVGV4O1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHRvZ2dsZSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0VG9nZ2xlID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIGZvY3VzUmVmID0gdXNlUmVmKG51bGwpO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHNldFRvZ2dsZShmdW5jdGlvbiAodG9nZ2xlKSB7XG4gICAgICByZXR1cm4gIXRvZ2dsZTtcbiAgICB9KTtcbiAgfSwgW2NoaWxkcmVuXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZvY3VzUmVmLmN1cnJlbnQgIT09IG51bGwgJiYgZm9jdXNSZWdpb25PblRleHRDaGFuZ2UpIHtcbiAgICAgIGZvY3VzUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFt0b2dnbGUsIGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlXSk7XG4gIHJldHVybiAoXG4gICAgLyoqXG4gICAgICogSW50ZW50aW9uYWxseSB1c2VzIHR3byBwZXJzaXN0ZW50IGxpdmUgcmVnaW9ucyB3aXRoIG9zY2lsbGF0aW5nIGNvbnRlbnQgdXBkYXRlcy5cbiAgICAgKiBUaGlzIHJlc29sdmVzIHRoZSBwcm9ibGVtIG9mIGR1cGxpY2F0ZSBzY3JlZW4gcmVhZGVyIGFubm91bmNlbWVudHMgaW4gcmFwaWQgc3VjY2Vzc2lvblxuICAgICAqIGNhdXNlZCBieSBSZWFjdCdzIHZpcnR1YWwgRE9NIGJlaGF2aW91ciAoaHR0cHM6Ly9naXRodWIuY29tL252YWNjZXNzL252ZGEvaXNzdWVzLzc5OTYjaXNzdWVjb21tZW50LTQxMzY0MTcwOSlcbiAgICAgKlxuICAgICAqIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWxwaGFnb3YvYWNjZXNzaWJsZS1hdXRvY29tcGxldGUvYmxvYi9hNzEwNmYwMzE1MDk0MWZjMTVlNmMxY2ViMGE5MGU4ODcyZmE4NmVmL3NyYy9zdGF0dXMuanNcbiAgICAgKiBEZWJvdW5jaW5nIHdhcyBub3QgbmVlZGVkIGZvciB0aGlzIGNhc2UsIGJ1dCBjb3VsZCBwcm92ZSB0byBiZSB1c2VmdWwgZm9yIGZ1dHVyZSB1c2UgY2FzZXMuXG4gICAgICogU2VlIGFsc28gaHR0cHM6Ly9naXRodWIuY29tL0FsbWVyb1N0ZXluL3JlYWN0LWFyaWEtbGl2ZSBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2RlcXVlbGFicy9uZ0ExMXlcbiAgICAgKiBmb3IgbW9yZSBleGFtcGxlcyBvZiB0aGUgZG91YmxlIHJlZ2lvbiBhcHByb2FjaC5cbiAgICAgKi9cbiAgICBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgcmVmOiBmb2N1c1JlZixcbiAgICAgIHRhYkluZGV4OiBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA/IC0xIDogdW5kZWZpbmVkXG4gICAgfSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICByb2xlOiByb2xlLFxuICAgICAgXCJhcmlhLWF0b21pY1wiOiBcInRydWVcIlxuICAgICAgLy8gU2V0dGluZyBgYXJpYS1oaWRkZW5gIGFuZCBzZXR0aW5nIGBhcmlhLWxpdmVgIHRvIFwib2ZmXCIgcHJldmVudHNcbiAgICAgIC8vIGRvdWJsZSBhbm5vdW5jZW1lbnRzIGZyb20gVk8gd2hlbiBgZm9jdXNSZWdpb25PblRleHRDaGFuZ2VgIGlzIHRydWVcbiAgICAgICxcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogdG9nZ2xlID8gdW5kZWZpbmVkIDogJ3RydWUnLFxuICAgICAgXCJhcmlhLWxpdmVcIjogIXRvZ2dsZSB8fCBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA/ICdvZmYnIDogYXJpYUxpdmVcbiAgICB9LCBpc0FjdGl2ZSAmJiB0b2dnbGUgPyBjaGlsZHJlbiA6ICcnKSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICByb2xlOiByb2xlLFxuICAgICAgXCJhcmlhLWF0b21pY1wiOiBcInRydWVcIixcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogIXRvZ2dsZSA/IHVuZGVmaW5lZCA6ICd0cnVlJyxcbiAgICAgIFwiYXJpYS1saXZlXCI6IHRvZ2dsZSB8fCBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA/ICdvZmYnIDogYXJpYUxpdmVcbiAgICB9LCBpc0FjdGl2ZSAmJiAhdG9nZ2xlID8gY2hpbGRyZW4gOiAnJykpKVxuICApO1xufTtcbkV1aVNjcmVlblJlYWRlckxpdmUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIG1ha2Ugc2NyZWVuIHJlYWRlcnMgYXdhcmUgb2YgdGhlIGNvbnRlbnRcbiAgICAgKi9cbiAgaXNBY3RpdmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBDb250ZW50IGZvciBzY3JlZW4gcmVhZGVycyB0byBhbm5vdW5jZVxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIGByb2xlYCBhdHRyaWJ1dGUgZm9yIGJvdGggbGl2ZSByZWdpb25zLlxuICAgICAqXG4gICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQWNjZXNzaWJpbGl0eS9BUklBL0FSSUFfTGl2ZV9SZWdpb25zI3JvbGVzX3dpdGhfaW1wbGljaXRfbGl2ZV9yZWdpb25fYXR0cmlidXRlc1xuICAgICAqL1xuICByb2xlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBgYXJpYS1saXZlYCBhdHRyaWJ1dGUgZm9yIGJvdGggbGl2ZSByZWdpb25zXG4gICAgICovXG4gIFwiYXJpYS1saXZlXCI6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIE9uIGBjaGlsZHJlbmAvdGV4dCBjaGFuZ2UsIHRoZSByZWdpb24gd2lsbCBhdXRvLWZvY3VzIGl0c2VsZiwgY2F1c2luZyBzY3JlZW4gcmVhZGVyc1xuICAgICAqIHRvIGF1dG9tYXRpY2FsbHkgcmVhZCBvdXQgdGhlIHRleHQgY29udGVudC4gVGhpcyBwcm9wIHNob3VsZCBwcmltYXJpbHkgYmUgdXNlZCBmb3JcbiAgICAgKiBuYXZpZ2F0aW9uIG9yIHBhZ2UgY2hhbmdlcywgd2hlcmUgcHJvZ3JhbW1hdGljYWxseSByZXNldHRpbmcgZm9jdXMgbG9jYXRpb24gYmFjayB0b1xuICAgICAqIGEgY2VydGFpbiBwYXJ0IG9mIHRoZSBwYWdlIGlzIGRlc2lyZWQuXG4gICAgICovXG4gIGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVNjcmVlblJlYWRlck9ubHlTdHlsZXMgYXMgc3R5bGVzIH0gZnJvbSAnLi9zY3JlZW5fcmVhZGVyX29ubHkuc3R5bGVzJztcbmV4cG9ydCB2YXIgRXVpU2NyZWVuUmVhZGVyT25seSA9IGZ1bmN0aW9uIEV1aVNjcmVlblJlYWRlck9ubHkoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHNob3dPbkZvY3VzID0gX3JlZi5zaG93T25Gb2N1cztcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKGNsYXNzTmFtZSwgY2hpbGRyZW4ucHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIHByb3BzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5sZW5ndGggPyBjbGFzc2VzIDogdW5kZWZpbmVkLFxuICAgICAgY3NzOiBzaG93T25Gb2N1cyA/IHN0eWxlc1snZXVpU2NyZWVuUmVhZGVyT25seS1zaG93T25Gb2N1cyddIDogc3R5bGVzLmV1aVNjcmVlblJlYWRlck9ubHlcbiAgICB9O1xuICB9LCBbY2xhc3Nlcywgc2hvd09uRm9jdXNdKTtcbiAgcmV0dXJuIGNsb25lRWxlbWVudFdpdGhDc3MoY2hpbGRyZW4sIHByb3BzKTtcbn07XG5FdWlTY3JlZW5SZWFkZXJPbmx5LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3RFbGVtZW50IHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIEZvciBrZXlib2FyZCBuYXZpZ2F0aW9uLCBmb3JjZSBjb250ZW50IHRvIGRpc3BsYXkgdmlzdWFsbHkgdXBvbiBmb2N1cy9mb2N1cy13aXRoaW4uXG4gICAgICovXG4gIHNob3dPbkZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIEVOVEVSID0gJ0VudGVyJztcbmV4cG9ydCB2YXIgU1BBQ0UgPSAnICc7XG5leHBvcnQgdmFyIEVTQ0FQRSA9ICdFc2NhcGUnO1xuZXhwb3J0IHZhciBUQUIgPSAnVGFiJztcbmV4cG9ydCB2YXIgQkFDS1NQQUNFID0gJ0JhY2tzcGFjZSc7XG5leHBvcnQgdmFyIEYyID0gJ0YyJztcbmV4cG9ydCB2YXIgQUxUID0gJ0FsdCc7XG5leHBvcnQgdmFyIFNISUZUID0gJ1NoaWZ0JztcbmV4cG9ydCB2YXIgQ1RSTCA9ICdDb250cm9sJztcbmV4cG9ydCB2YXIgTUVUQSA9ICdNZXRhJzsgLy8gV2luZG93cywgQ29tbWFuZCwgT3B0aW9uXG5cbmV4cG9ydCB2YXIgQVJST1dfRE9XTiA9ICdBcnJvd0Rvd24nO1xuZXhwb3J0IHZhciBBUlJPV19VUCA9ICdBcnJvd1VwJztcbmV4cG9ydCB2YXIgQVJST1dfTEVGVCA9ICdBcnJvd0xlZnQnO1xuZXhwb3J0IHZhciBBUlJPV19SSUdIVCA9ICdBcnJvd1JpZ2h0JztcbmV4cG9ydCB2YXIgUEFHRV9VUCA9ICdQYWdlVXAnO1xuZXhwb3J0IHZhciBQQUdFX0RPV04gPSAnUGFnZURvd24nO1xuZXhwb3J0IHZhciBFTkQgPSAnRW5kJztcbmV4cG9ydCB2YXIgSE9NRSA9ICdIb21lJztcbmV4cG9ydCB2YXIga2V5cyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoa2V5cykge1xuICBrZXlzW1wiRU5URVJcIl0gPSBcIkVudGVyXCI7XG4gIGtleXNbXCJTUEFDRVwiXSA9IFwiIFwiO1xuICBrZXlzW1wiRVNDQVBFXCJdID0gXCJFc2NhcGVcIjtcbiAga2V5c1tcIlRBQlwiXSA9IFwiVGFiXCI7XG4gIGtleXNbXCJCQUNLU1BBQ0VcIl0gPSBcIkJhY2tzcGFjZVwiO1xuICBrZXlzW1wiRjJcIl0gPSBcIkYyXCI7XG4gIGtleXNbXCJBTFRcIl0gPSBcIkFsdFwiO1xuICBrZXlzW1wiU0hJRlRcIl0gPSBcIlNoaWZ0XCI7XG4gIGtleXNbXCJDVFJMXCJdID0gXCJDb250cm9sXCI7XG4gIGtleXNbXCJNRVRBXCJdID0gXCJNZXRhXCI7XG4gIGtleXNbXCJBUlJPV19ET1dOXCJdID0gXCJBcnJvd0Rvd25cIjtcbiAga2V5c1tcIkFSUk9XX1VQXCJdID0gXCJBcnJvd1VwXCI7XG4gIGtleXNbXCJBUlJPV19MRUZUXCJdID0gXCJBcnJvd0xlZnRcIjtcbiAga2V5c1tcIkFSUk9XX1JJR0hUXCJdID0gXCJBcnJvd1JpZ2h0XCI7XG4gIGtleXNbXCJQQUdFX1VQXCJdID0gXCJQYWdlVXBcIjtcbiAga2V5c1tcIlBBR0VfRE9XTlwiXSA9IFwiUGFnZURvd25cIjtcbiAga2V5c1tcIkVORFwiXSA9IFwiRW5kXCI7XG4gIGtleXNbXCJIT01FXCJdID0gXCJIb21lXCI7XG4gIHJldHVybiBrZXlzO1xufSh7fSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdjEgYXMgdXVpZHYxIH0gZnJvbSAndXVpZCc7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgaWRzLlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUsIGJ1dCBwcmVkaWN0YWJsZSBpZHMgdG8gcGFpciBsYWJlbHNcbiAqIHdpdGggdGhlaXIgaW5wdXRzLiBJdCB0YWtlcyBhbiBvcHRpb25hbCBwcmVmaXggYXMgYSBwYXJhbWV0ZXIuIElmIHlvdSBkb24ndFxuICogc3BlY2lmeSBpdCwgaXQgZ2VuZXJhdGVzIGEgcmFuZG9tIGlkIHByZWZpeC4gSWYgeW91IHNwZWNpZnkgYSBjdXN0b20gcHJlZml4XG4gKiBpdCBzaG91bGQgYmVnaW4gd2l0aCBhbiBsZXR0ZXIgdG8gYmUgSFRNTDQgY29tcGxpYW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaHRtbElkR2VuZXJhdG9yKCkge1xuICB2YXIgaWRQcmVmaXggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnO1xuICB2YXIgc3RhdGljVXVpZCA9IHV1aWR2MSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpZFN1ZmZpeCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7XG4gICAgdmFyIHByZWZpeCA9IFwiXCIuY29uY2F0KGlkUHJlZml4KS5jb25jYXQoaWRQcmVmaXggIT09ICcnID8gJ18nIDogJ2knKTtcbiAgICB2YXIgc3VmZml4ID0gaWRTdWZmaXggPyBcIl9cIi5jb25jYXQoaWRTdWZmaXgpIDogJyc7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHByZWZpeCkuY29uY2F0KHN1ZmZpeCA/IHN0YXRpY1V1aWQgOiB1dWlkdjEoKSkuY29uY2F0KHN1ZmZpeCk7XG4gIH07XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbWVtb2l6ZWQgSUQgdGhhdCByZW1haW5zIHN0YXRpYyB1bnRpbCBjb21wb25lbnQgdW5tb3VudC5cbiAqIFRoaXMgcHJldmVudHMgSURzIGZyb20gYmVpbmcgcmUtcmFuZG9taXplZCBvbiBldmVyeSBjb21wb25lbnQgdXBkYXRlLlxuICovXG5cbi8vIFdlIGNhbiByZW1vdmUgdGhpcyBkZXByZWNhdGVkIGhvb2sgb25jZSBFVUkgbm8gbG9uZ2VyIG5lZWRzIHRvIHN1cHBvcnQgUmVhY3QgMTYtMTdcbnZhciB1c2VEZXByZWNhdGVkR2VuZXJhdGVkSHRtbElkID0gZnVuY3Rpb24gdXNlRGVwcmVjYXRlZEdlbmVyYXRlZEh0bWxJZCgpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgIHByZWZpeCA9IF9yZWYucHJlZml4LFxuICAgIHN1ZmZpeCA9IF9yZWYuc3VmZml4LFxuICAgIGNvbmRpdGlvbmFsSWQgPSBfcmVmLmNvbmRpdGlvbmFsSWQ7XG4gIHJldHVybiB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29uZGl0aW9uYWxJZCB8fCBodG1sSWRHZW5lcmF0b3IocHJlZml4KShzdWZmaXgpO1xuICB9LCBbY29uZGl0aW9uYWxJZCwgcHJlZml4LCBzdWZmaXhdKTtcbn07XG52YXIgdXNlTmV3R2VuZXJhdGVkSHRtbElkID0gZnVuY3Rpb24gdXNlTmV3R2VuZXJhdGVkSHRtbElkKCkge1xuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgIF9yZWYyJHByZWZpeCA9IF9yZWYyLnByZWZpeCxcbiAgICBwcmVmaXggPSBfcmVmMiRwcmVmaXggPT09IHZvaWQgMCA/ICcnIDogX3JlZjIkcHJlZml4LFxuICAgIF9yZWYyJHN1ZmZpeCA9IF9yZWYyLnN1ZmZpeCxcbiAgICBzdWZmaXggPSBfcmVmMiRzdWZmaXggPT09IHZvaWQgMCA/ICcnIDogX3JlZjIkc3VmZml4LFxuICAgIGNvbmRpdGlvbmFsSWQgPSBfcmVmMi5jb25kaXRpb25hbElkO1xuICAvLyBVc2luZyB0aGUgZGVmYXVsdCBleHBvcnQgYW5kIGRvdCBub3RhdGlvbiBoZXJlIGlzIGludGVudGlvbmFsXG4gIC8vIHRvIHByZXZlbnQgUmVhY3QgPDE4IGltcG9ydCBlcnJvcnMuXG4gIHZhciBpZCA9IFJlYWN0LnVzZUlkKCk7XG4gIHJldHVybiB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29uZGl0aW9uYWxJZCB8fCBcIlwiLmNvbmNhdChwcmVmaXgpLmNvbmNhdChpZCkuY29uY2F0KHN1ZmZpeCk7XG4gIH0sIFtpZCwgY29uZGl0aW9uYWxJZCwgcHJlZml4LCBzdWZmaXhdKTtcbn07XG5leHBvcnQgdmFyIHVzZUdlbmVyYXRlZEh0bWxJZCA9ICd1c2VJZCcgaW4gUmVhY3QgPyB1c2VOZXdHZW5lcmF0ZWRIdG1sSWQgOiB1c2VEZXByZWNhdGVkR2VuZXJhdGVkSHRtbElkOyIsICIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbnZhciBnZXRSYW5kb21WYWx1ZXM7XG52YXIgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi4gQWxzbyxcbiAgICAvLyBmaW5kIHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBjcnlwdG8gKG1zQ3J5cHRvKSBvbiBJRTExLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0bykgfHwgdHlwZW9mIG1zQ3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzID09PSAnZnVuY3Rpb24nICYmIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKTtcblxuICAgIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59IiwgImV4cG9ydCBkZWZhdWx0IC9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTsiLCAiaW1wb3J0IFJFR0VYIGZyb20gJy4vcmVnZXguanMnO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZSh1dWlkKSB7XG4gIHJldHVybiB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgJiYgUkVHRVgudGVzdCh1dWlkKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGU7IiwgImltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcbi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xuXG52YXIgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIpIHtcbiAgdmFyIG9mZnNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHZhciB1dWlkID0gKGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgM11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDVdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA3XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDhdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxM11dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNV1dKS50b0xvd2VyQ2FzZSgpOyAvLyBDb25zaXN0ZW5jeSBjaGVjayBmb3IgdmFsaWQgVVVJRC4gIElmIHRoaXMgdGhyb3dzLCBpdCdzIGxpa2VseSBkdWUgdG8gb25lXG4gIC8vIG9mIHRoZSBmb2xsb3dpbmc6XG4gIC8vIC0gT25lIG9yIG1vcmUgaW5wdXQgYXJyYXkgdmFsdWVzIGRvbid0IG1hcCB0byBhIGhleCBvY3RldCAobGVhZGluZyB0b1xuICAvLyBcInVuZGVmaW5lZFwiIGluIHRoZSB1dWlkKVxuICAvLyAtIEludmFsaWQgaW5wdXQgdmFsdWVzIGZvciB0aGUgUkZDIGB2ZXJzaW9uYCBvciBgdmFyaWFudGAgZmllbGRzXG5cbiAgaWYgKCF2YWxpZGF0ZSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RyaW5naWZ5OyIsICJpbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCBzdHJpbmdpZnkgZnJvbSAnLi9zdHJpbmdpZnkuanMnOyAvLyAqKmB2MSgpYCAtIEdlbmVyYXRlIHRpbWUtYmFzZWQgVVVJRCoqXG4vL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcbi8vIGFuZCBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXVpZC5odG1sXG5cbnZhciBfbm9kZUlkO1xuXG52YXIgX2Nsb2Nrc2VxOyAvLyBQcmV2aW91cyB1dWlkIGNyZWF0aW9uIHRpbWVcblxuXG52YXIgX2xhc3RNU2VjcyA9IDA7XG52YXIgX2xhc3ROU2VjcyA9IDA7IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQgZm9yIEFQSSBkZXRhaWxzXG5cbmZ1bmN0aW9uIHYxKG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xuICB2YXIgYiA9IGJ1ZiB8fCBuZXcgQXJyYXkoMTYpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgX25vZGVJZDtcbiAgdmFyIGNsb2Nrc2VxID0gb3B0aW9ucy5jbG9ja3NlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jbG9ja3NlcSA6IF9jbG9ja3NlcTsgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XG4gIC8vIHNwZWNpZmllZC4gIFdlIGRvIHRoaXMgbGF6aWx5IHRvIG1pbmltaXplIGlzc3VlcyByZWxhdGVkIHRvIGluc3VmZmljaWVudFxuICAvLyBzeXN0ZW0gZW50cm9weS4gIFNlZSAjMTg5XG5cbiAgaWYgKG5vZGUgPT0gbnVsbCB8fCBjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgdmFyIHNlZWRCeXRlcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7XG5cbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcbiAgICAgIG5vZGUgPSBfbm9kZUlkID0gW3NlZWRCeXRlc1swXSB8IDB4MDEsIHNlZWRCeXRlc1sxXSwgc2VlZEJ5dGVzWzJdLCBzZWVkQnl0ZXNbM10sIHNlZWRCeXRlc1s0XSwgc2VlZEJ5dGVzWzVdXTtcbiAgICB9XG5cbiAgICBpZiAoY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgICAgLy8gUGVyIDQuMi4yLCByYW5kb21pemUgKDE0IGJpdCkgY2xvY2tzZXFcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcbiAgICB9XG4gIH0gLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcbiAgLy8gKDE1ODItMTAtMTUgMDA6MDApLiAgSlNOdW1iZXJzIGFyZW4ndCBwcmVjaXNlIGVub3VnaCBmb3IgdGhpcywgc29cbiAgLy8gdGltZSBpcyBoYW5kbGVkIGludGVybmFsbHkgYXMgJ21zZWNzJyAoaW50ZWdlciBtaWxsaXNlY29uZHMpIGFuZCAnbnNlY3MnXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXG5cblxuICB2YXIgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogRGF0ZS5ub3coKTsgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xuXG4gIHZhciBuc2VjcyA9IG9wdGlvbnMubnNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNlY3MgOiBfbGFzdE5TZWNzICsgMTsgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxuXG4gIHZhciBkdCA9IG1zZWNzIC0gX2xhc3RNU2VjcyArIChuc2VjcyAtIF9sYXN0TlNlY3MpIC8gMTAwMDA7IC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cblxuICBpZiAoZHQgPCAwICYmIG9wdGlvbnMuY2xvY2tzZXEgPT09IHVuZGVmaW5lZCkge1xuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xuICB9IC8vIFJlc2V0IG5zZWNzIGlmIGNsb2NrIHJlZ3Jlc3NlcyAobmV3IGNsb2Nrc2VxKSBvciB3ZSd2ZSBtb3ZlZCBvbnRvIGEgbmV3XG4gIC8vIHRpbWUgaW50ZXJ2YWxcblxuXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbnNlY3MgPSAwO1xuICB9IC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcblxuXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInV1aWQudjEoKTogQ2FuJ3QgY3JlYXRlIG1vcmUgdGhhbiAxME0gdXVpZHMvc2VjXCIpO1xuICB9XG5cbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xuICBfbGFzdE5TZWNzID0gbnNlY3M7XG4gIF9jbG9ja3NlcSA9IGNsb2Nrc2VxOyAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcblxuICBtc2VjcyArPSAxMjIxOTI5MjgwMDAwMDsgLy8gYHRpbWVfbG93YFxuXG4gIHZhciB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDE2ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bCAmIDB4ZmY7IC8vIGB0aW1lX21pZGBcblxuICB2YXIgdG1oID0gbXNlY3MgLyAweDEwMDAwMDAwMCAqIDEwMDAwICYgMHhmZmZmZmZmO1xuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bWggJiAweGZmOyAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMjQgJiAweGYgfCAweDEwOyAvLyBpbmNsdWRlIHZlcnNpb25cblxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjsgLy8gYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgIChQZXIgNC4yLjIgLSBpbmNsdWRlIHZhcmlhbnQpXG5cbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwOyAvLyBgY2xvY2tfc2VxX2xvd2BcblxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7IC8vIGBub2RlYFxuXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgKytuKSB7XG4gICAgYltpICsgbl0gPSBub2RlW25dO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCBzdHJpbmdpZnkoYik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHYxOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIExFRlRfQUxJR05NRU5UID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBSSUdIVF9BTElHTk1FTlQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBDRU5URVJfQUxJR05NRU5UID0gJ2NlbnRlcic7IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi90aGVtZS9ob29rcyc7XG5pbXBvcnQgeyB0aHJvdHRsZSB9IGZyb20gJy4uL3Rocm90dGxlJztcbmltcG9ydCB7IHNvcnRNYXBCeUxhcmdlVG9TbWFsbFZhbHVlcyB9IGZyb20gJy4vX3NvcnRpbmcnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGJyZWFrcG9pbnQgYmFzZWQgb24gd2luZG93IHdpZHRoLlxuICogVHlwaWNhbGx5IG9ubHkgY2FsbGVkIGJ5IHRoZSB0b3AtbGV2ZWwgYEV1aVByb3ZpZGVyYCAodG8gcmVkdWNlIHRoZSBudW1iZXJcbiAqIG9mIHdpbmRvdyByZXNpemUgbGlzdGVuZXJzIG9uIHRoZSBwYWdlKS4gQWxzbyBjb25kaXRpb25hbGx5IGNhbGxlZCBpZiBhXG4gKiBuZXN0ZWQgYEV1aVRoZW1lUHJvdmlkZXJgIGRlZmluZXMgYSBgbW9kaWZ5LmJyZWFrcG9pbnRgIG92ZXJyaWRlXG4gKi9cbmV4cG9ydCB2YXIgQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciA9IGZ1bmN0aW9uIEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICAvLyBPYnRhaW4gdGhlIGJyZWFrcG9pbnRzIG1hcCBmcm9tIHRoZSBFVUkgdGhlbWVcbiAgdmFyIF91c2VFdWlUaGVtZSA9IHVzZUV1aVRoZW1lKCksXG4gICAgYnJlYWtwb2ludHMgPSBfdXNlRXVpVGhlbWUuZXVpVGhlbWUuYnJlYWtwb2ludDtcblxuICAvLyBFbnN1cmUgdGhlIGJyZWFrcG9pbnRzIG1hcCBpcyBzb3J0ZWQgZnJvbSBsYXJnZXN0IHZhbHVlIHRvIHNtYWxsZXN0XG4gIHZhciBzb3J0ZWRCcmVha3BvaW50cyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzb3J0TWFwQnlMYXJnZVRvU21hbGxWYWx1ZXMoYnJlYWtwb2ludHMpO1xuICB9LCBbYnJlYWtwb2ludHNdKTtcblxuICAvLyBGaW5kIHRoZSBicmVha3BvaW50IChrZXkpIHdob3NlIHZhbHVlIGlzIDw9IHdpbmRvd1dpZHRoIHN0YXJ0aW5nIHdpdGggbGFyZ2VzdCBmaXJzdFxuICB2YXIgZ2V0QnJlYWtwb2ludCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICh3aWR0aCkge1xuICAgIHJldHVybiBrZXlzT2Yoc29ydGVkQnJlYWtwb2ludHMpLmZpbmQoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIHNvcnRlZEJyZWFrcG9pbnRzW2tleV0gPD0gd2lkdGg7XG4gICAgfSk7XG4gIH0sIFtzb3J0ZWRCcmVha3BvaW50c10pO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBnZXRCcmVha3BvaW50KHdpbmRvdy5pbm5lcldpZHRoKSA6IHVuZGVmaW5lZCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgY3VycmVudEJyZWFrcG9pbnQgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldEN1cnJlbnRCcmVha3BvaW50ID0gX3VzZVN0YXRlMlsxXTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb25XaW5kb3dSZXNpemUgPSB0aHJvdHRsZShmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRDdXJyZW50QnJlYWtwb2ludChnZXRCcmVha3BvaW50KHdpbmRvdy5pbm5lcldpZHRoKSk7XG4gICAgfSwgNTApO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBvbldpbmRvd1Jlc2l6ZSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25XaW5kb3dSZXNpemUpO1xuICAgIH07XG4gIH0sIFtnZXRCcmVha3BvaW50XSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEN1cnJlbnRFdWlCcmVha3BvaW50Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjdXJyZW50QnJlYWtwb2ludFxuICB9LCBjaGlsZHJlbik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIGFzc2VydE5ldmVyID0gZnVuY3Rpb24gYXNzZXJ0TmV2ZXIoeCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHZhbHVlIFwiLmNvbmNhdCh4KSk7XG59O1xuXG4vLyB1dGlsaXR5IHR5cGVzOlxuLyoqXG4gKiBYT1IgZm9yIHNvbWUgcHJvcGVydGllcyBhcHBsaWVkIHRvIGEgdHlwZVxuICogKFhPUiBpcyBvbmUgb2YgdGhlc2UgYnV0IG5vdCBib3RoIG9yIG5laXRoZXIpXG4gKlxuICogVXNhZ2U6IE9uZU9mPHR5cGVUb0V4dGVuZCwgb25lIHwgYnV0IHwgbm90IHwgbXVsdGlwbGUgfCBvZiB8IHRoZXNlIHwgYXJlIHwgcmVxdWlyZWQ+XG4gKlxuICogVG8gcmVxdWlyZSBhcmlhLWxhYmVsIG9yIGFyaWEtbGFiZWxsZWRieSBidXQgbm90IGJvdGhcbiAqIEV4YW1wbGU6IE9uZU9mPFR5cGUsICdhcmlhLWxhYmVsJyB8ICdhcmlhLWxhYmVsbGVkYnknPlxuICovXG5cbi8qKlxuICogV3JhcHMgT2JqZWN0LmtleXMgd2l0aCBwcm9wZXIgdHlwZXNjcmlwdCBkZWZpbml0aW9uIG9mIHRoZSByZXN1bHRpbmcgYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtleXNPZihvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG59XG5cbi8qKlxuICogTGlrZSBga2V5b2YgdHlwZW9mYCwgYnV0IGZvciBnZXR0aW5nIHZhbHVlcyBpbnN0ZWFkIG9mIGtleXNcbiAqIFZhbHVlT2Y8dHlwZW9mIHtrZXkxOiAndmFsdWUxJywga2V5MjogJ3ZhbHVlMid9PlxuICogUmVzdWx0cyBpbiBgJ3ZhbHVlMScgfCAndmFsdWUyJ2BcbiAqL1xuXG4vLyBSZXR1cm5zIHRoZSBwcm9wcyBvZiBhIGdpdmVuIEhUTUwgZWxlbWVudFxuXG4vLyBVdGlsaXR5IG1ldGhvZHMgZm9yIEFwcGx5Q2xhc3NDb21wb25lbnREZWZhdWx0c1xuXG4vKipcbiAqIEJlY2F1c2Ugb2YgaG93IFR5cGVTY3JpcHQncyBMaWJyYXJ5TWFuYWdlZEF0dHJpYnV0ZXMgaXMgZGVzaWduZWQgdG8gaGFuZGxlIGRlZmF1bHRQcm9wcyAoaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svcmVsZWFzZS1ub3Rlcy90eXBlc2NyaXB0LTMtMC5odG1sI3N1cHBvcnQtZm9yLWRlZmF1bHRwcm9wcy1pbi1qc3gpXG4gKiB3ZSBjYW4ndCBkaXJlY3RseSBleHBvcnQgdGhlIHByb3BzIGRlZmluaXRpb24gYXMgdGhlIGRlZmF1bHRlZCB2YWx1ZXMgYXJlIG5vdCBtYWRlIG9wdGlvbmFsLFxuICogYmVjYXVzZSBpdCBpc24ndCBwcm9jZXNzZWQgYnkgTGlicmFyeU1hbmFnZWRBdHRyaWJ1dGVzLiBUbyBnZXQgYXJvdW5kIHRoaXMsIHdlOlxuICogLSByZW1vdmUgdGhlIHByb3BzIHdoaWNoIGhhdmUgZGVmYXVsdCB2YWx1ZXMgYXBwbGllZFxuICogLSBleHBvcnQgKFByb3BzIC0gRGVmYXVsdHMpICYgUGFydGlhbDxEZWZhdWx0cz5cbiAqL1xuXG4vLyBkZWZpbml0aW9uIG9mIFByb3BzLCBtYWRlIG9wdGlvbmFsLCB0aGF0IGFyZSBoYXZlIGtleXMgaW4gZGVmYXVsdFByb3BzXG5cbi8qXG5odHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI4MzM5XG5Qcm9ibGVtOiBQaWNrIGFuZCBPbWl0IGRvIG5vdCBkaXN0cmlidXRlIG92ZXIgdW5pb24gdHlwZXMsIHdoaWNoIG1hbmlmZXN0cyB3aGVuXG5vcHRpb25hbCB2YWx1ZXMgYmVjb21lIHJlcXVpcmVkIGFmdGVyIGEgUGljayBvciBPbWl0IG9wZXJhdGlvbi4gVGhlc2VcbkRpc3RyaWJ1dGl2ZSBmb3JtcyBjb3JyZWN0bHkgb3BlcmF0ZSBvbiB1bmlvbiB0eXBlcywgcHJlc2VydmluZyBvcHRpb25hbGl0eS5cbiAqL1xuXG4vKlxuVHlwZVNjcmlwdCdzIGRpc2NyaW1pbmF0ZWQgdW5pb25zIGFyZSBvdmVybHkgcGVybWlzc2l2ZTogYXMgbG9uZyBhcyBvbmUgdHlwZSBvZiB0aGUgdW5pb24gaXMgc2F0aXNmaWVkXG50aGUgb3RoZXIgdHlwZXMgYXJlIG5vdCB2YWxpZGF0ZWQgYWdhaW5zdC4gRm9yIGV4YW1wbGU6XG5cbnR5cGUgRm9vID0ge1xuICB2YWx1ZTogc3RyaW5nLFxuICBmb286IHN0cmluZ1xufTtcbnR5cGUgQmFyID0ge1xuICB2YWx1ZTogbnVtYmVyLFxuICBiYXI6IHN0cmluZ1xufVxuZnVuY3Rpb24gd2hhdCh4OiBGb28gfCBCYXIpIHtcbiAgcmV0dXJuIHgudmFsdWU7XG59XG5cbkFzIHlvdSB3b3VsZCBleHBlY3QgLVxuXG53aGF0KHsgdmFsdWU6ICdhc2RmJywgZm9vOiAnYXNkZicgfSk7IC8vIGZpbmVcbndoYXQoeyB2YWx1ZTogNSwgZm9vOiAnYXNkZicgfSk7IC8vIGVycm9yXG53aGF0KHsgdmFsdWU6IDUsIGJhcjogJ2FzZGYnIH0pOyAvLyBmaW5lXG53aGF0KHsgdmFsdWU6ICdhc2RmJywgYmFyOiAnYXNkZicgfSk7IC8vIGVycm9yXG5cbkhvd2V2ZXIsIGlmIEZvbyBpcyBzYXRpc2ZpZWQgdGhlbiB5b3UgY2FuIHBhc3MgYW55IHZhbHVlIHlvdSB3YW50IHRvIEJhcidzIHVuaXF1ZSBwcm9wZXJ0aWVzOlxud2hhdCh7IHZhbHVlOiAnYXNkZicsIGZvbzogJ2FzZGYnLCBiYXI6IGZhbHNlIH0pIC8vIHdvcmtzXG5cblR5cGVTY3JpcHQgaXMgb2theSB3aXRoIHRoaXMgYXMgYSB0eXBlIGd1YXJkIHdvdWxkIGRldGVjdCB0aGUgb2JqZWN0IGlzIEZvbyBhbmQgcHJldmVudCBhY2Nlc3NpbmcgYGJhcmAuXG5VbmZvcnR1bmF0ZWx5IHRoaXMgcHJldmVudHMgZmVlZGJhY2sgdG8gdGhlIHVzZXIgYWJvdXQgcG90ZW50aWFsbHkgdW5pbnRlbnRpb25hbCBlZmZlY3RzLCBmb3IgZXhhbXBsZTpcblxuQSBjb21tb24gcGF0dGVybiBpbiBFVUkgaXMgdG8gcmVuZGVyIHNvbWV0aGluZyBhcyBhIGRpdiBPUiBhcyBhIGJ1dHRvbiwgZGVwZW5kaW5nIG9uIGlmIGFuIG9uQ2xpY2sgcHJvcCBpcyBwYXNzZWQuXG5wYXNzaW5nIGFkZGl0aW9uYWwgcHJvcHMgZG93biB0aHJvdWdoIGAuLi5yZXN0YCwgd2hpY2ggY2FuIGJlIHNwZWNpZmllZCBhc1xuXG50eXBlIFNwYW5saWtlID0gSFRNTEF0dHJpYnV0ZXM8SFRNTFNwYW5FbGVtZW50PjtcbnR5cGUgQnV0dG9ubGlrZSA9IHsgb25DbGljazogTW91c2VFdmVudEhhbmRsZXI8SFRNTEJ1dHRvbkVsZW1lbnQ+IH07IC8vIG9uQ2xpY2sgaXMgdGhlIGRpc2NyaW1pbmFudFxuUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8U3Bhbmxpa2UgfCBCdXR0b25saWtlPlxuXG5JbnRlcm5hbGx5LCB0aGUgY29tcG9uZW50IHdvdWxkIGhhdmUgYSB0eXBlIGd1YXJkIHRvIGNoZWNrIGlmIHByb3BzIGNvbnRhaW5zIGBvbkNsaWNrYCBhbmQgcmVzb2x2ZSB0byBCdXR0b25saWtlLlxuRXh0ZXJuYWxseSwgaG93ZXZlciwgeW91IGNvdWxkIHVzZSB0aGUgY29tcG9uZW50IGFzXG5cbjxDb21wb25lbnQgdmFsdWU9XCJidXp6XCIvPlxuXG5hbmQgbm8gZXJyb3Igd291bGQgb2NjdXIgYXMgdGhlIFNwYW5saWtlIHR5cGUgaXMgc2F0aXNmaWVkIGFuZCB0aGUgdHlwZSBndWFyZCB3b3VsZCBwcmV2ZW50IGFjY2Vzc2luZyBidXR0b24gYXR0cmlidXRlcy5cblRoaXMgcHJldmVudHMgaW1tZWRpYXRlIGZlZWRiYWNrIHRvIHRoZSBkZXZlbG9wLCBhbmQgd291bGQgYWN0dWFsbHkgbGVhZCB0byBSZWFjdCB3YXJuaW5ncyBhcyB0aGUgYHZhbHVlYCBwcm9wIHdvdWxkXG5zdGlsbCBwcm9wYWdhdGUgZG93biB0byB0aGUgc3BhbidzIHByb3BzLCB3aGljaCBpcyBpbnZhbGlkLiBUaGUgZm9sbG93aW5nIHR3byB1dGlsaXR5IHR5cGVzIHByb3ZpZGUgYSBzb2x1dGlvbiBmb3JcbmNyZWF0aW5nIGV4Y2x1c2l2ZSB1bmlvbnM6XG5cblJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PEV4Y2x1c2l2ZVVuaW9uPFNwYW5saWtlLCBCdXR0b25saWtlPj5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgbWVtYmVyIGtleXMgaW4gVSBub3QgcHJlc2VudCBpbiBUIHNldCB0byBuZXZlclxuICogVCA9IHsgJ29uZScsICd0d28nLCAndGhyZWUnIH1cbiAqIFUgPSB7ICd0aHJlZScsICdmb3VyJywgJ2ZpdmUnIH1cbiAqIHJldHVybnMgeyAnZm91cic6IG5ldmVyLCAnZml2ZSc6IG5ldmVyIH1cbiAqL1xuXG4vKipcbiAqIEFsbG93IGVpdGhlciBUIG9yIFUsIHByZXZlbnRpbmcgYW55IGFkZGl0aW9uYWwga2V5cyBvZiB0aGUgb3RoZXIgdHlwZSBmcm9tIGJlaW5nIHByZXNlbnRcbiAqL1xuXG4vKipcbiAqIEZvciBjb21wb25lbnRzIHRoYXQgY29uZGl0aW9uYWxseSByZW5kZXIgPGJ1dHRvbj4gb3IgPGE+XG4gKiBDb252ZW5pZW5jZSB0eXBlcyBmb3IgZXh0ZW5kaW5nIGJhc2UgcHJvcHMgKFQpIGFuZFxuICogZWxlbWVudC1zcGVjaWZpYyBwcm9wcyAoUCkgd2l0aCBzdGFuZGFyZCBjbGlja2FibGUgcHJvcGVydGllc1xuICpcbiAqIFRoZXNlIHdpbGwgbGlrZWx5IGJlIHVzZWQgdG9nZXRoZXIsIGFsb25nIHdpdGggYEV4Y2x1c2l2ZVVuaW9uYDpcbiAqXG4gKiB0eXBlIEFuY2hvckxpa2UgPSBQcm9wc0ZvckFuY2hvcjxCYXNlUHJvcHM+XG4gKiB0eXBlIEJ1dHRvbkxpa2UgPSBQcm9wc0ZvckJ1dHRvbjxCYXNlUHJvcHM+XG4gKiB0eXBlIENvbXBvbmVudFByb3BzID0gRXhjbHVzaXZlVW5pb248QW5jaG9yTGlrZSwgQnV0dG9uTGlrZT5cbiAqIGNvbnN0IENvbXBvbmVudDogRnVuY3Rpb25Db21wb25lbnQ8Q29tcG9uZW50UHJvcHM+IC4uLlxuICovXG5cbi8qKlxuICogUmVwbGFjZXMgYWxsIHByb3BlcnRpZXMgb24gYW55IHR5cGUgYXMgb3B0aW9uYWwsIGluY2x1ZGVzIG5lc3RlZCB0eXBlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW50ZXJmYWNlIFBlcnNvbiB7XG4gKiAgbmFtZTogc3RyaW5nO1xuICogIGFnZT86IG51bWJlcjtcbiAqICBzcG91c2U6IFBlcnNvbjtcbiAqICBjaGlsZHJlbjogUGVyc29uW107XG4gKiB9XG4gKiB0eXBlIFBhcnRpYWxQZXJzb24gPSBSZWN1cnNpdmVQYXJ0aWFsPFBlcnNvbj47XG4gKiAvLyByZXN1bHRzIGluXG4gKiBpbnRlcmZhY2UgUGFydGlhbFBlcnNvbiB7XG4gKiAgbmFtZT86IHN0cmluZztcbiAqICBhZ2U/OiBudW1iZXI7XG4gKiAgc3BvdXNlPzogUmVjdXJzaXZlUGFydGlhbDxQZXJzb24+O1xuICogIGNoaWxkcmVuPzogUmVjdXJzaXZlUGFydGlhbDxQZXJzb24+W11cbiAqIH1cbiAqIGBgYFxuICovIiwgImZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlUaGVtZUNvbnRleHQsIEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0LCBFdWlDb2xvck1vZGVDb250ZXh0LCBkZWZhdWx0Q29tcHV0ZWRUaGVtZSwgRXVpTmVzdGVkVGhlbWVDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IGVtaXRFdWlQcm92aWRlcldhcm5pbmcgfSBmcm9tICcuL3dhcm5pbmcnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBwcm92aWRlck1lc3NhZ2UgPSBcImBFdWlQcm92aWRlcmAgaXMgbWlzc2luZyB3aGljaCBjYW4gcmVzdWx0IGluIG5lZ2F0aXZlIGVmZmVjdHMuXFxuV3JhcCB5b3VyIGNvbXBvbmVudCBpbiBgRXVpUHJvdmlkZXJgOiBodHRwczovL2VsYS5zdC9ldWlwcm92aWRlci5cIjtcblxuLyoqXG4gKiBIb29rIGZvciBmdW5jdGlvbiBjb21wb25lbnRzXG4gKi9cblxuZXhwb3J0IHZhciB1c2VFdWlUaGVtZSA9IGZ1bmN0aW9uIHVzZUV1aVRoZW1lKCkge1xuICB2YXIgdGhlbWUgPSB1c2VDb250ZXh0KEV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBjb2xvck1vZGUgPSB1c2VDb250ZXh0KEV1aUNvbG9yTW9kZUNvbnRleHQpO1xuICB2YXIgbW9kaWZpY2F0aW9ucyA9IHVzZUNvbnRleHQoRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQpO1xuICB2YXIgaXNGYWxsYmFjayA9IHRoZW1lID09PSBkZWZhdWx0Q29tcHV0ZWRUaGVtZTtcbiAgaWYgKGlzRmFsbGJhY2spIHtcbiAgICBlbWl0RXVpUHJvdmlkZXJXYXJuaW5nKHByb3ZpZGVyTWVzc2FnZSk7XG4gIH1cbiAgdmFyIGFzc2VtYmxlZFRoZW1lID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV1aVRoZW1lOiB0aGVtZSxcbiAgICAgIGNvbG9yTW9kZTogY29sb3JNb2RlLFxuICAgICAgbW9kaWZpY2F0aW9uczogbW9kaWZpY2F0aW9uc1xuICAgIH07XG4gIH0sIFt0aGVtZSwgY29sb3JNb2RlLCBtb2RpZmljYXRpb25zXSk7XG4gIHJldHVybiBhc3NlbWJsZWRUaGVtZTtcbn07XG5cbi8qKlxuICogSE9DIGZvciBjbGFzcyBjb21wb25lbnRzXG4gKi9cblxuLy8gUHJvdmlkZSB0aGUgY29tcG9uZW50IHByb3BzIGludGVyZmFjZSBhcyB0aGUgZ2VuZXJpYyB0byBhbGxvdyB0aGUgZG9jcyBwcm9wcyB0YWJsZSB0byBwb3B1bGF0ZS5cbi8vIGUuZy4sIGBjb25zdCBFdWlDb21wb25lbnQgPSB3aXRoRXVpVGhlbWU8RXVpQ29tcG9uZW50UHJvcHM+KF9FdWlDb21wb25lbnQpYFxuZXhwb3J0IHZhciB3aXRoRXVpVGhlbWUgPSBmdW5jdGlvbiB3aXRoRXVpVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnRXaXRoVGhlbWUnO1xuICB2YXIgUmVuZGVyID0gZnVuY3Rpb24gUmVuZGVyKHByb3BzLCByZWYpIHtcbiAgICB2YXIgdGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcykpO1xuICB9O1xuICB2YXIgV2l0aEV1aVRoZW1lID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoUmVuZGVyKTtcbiAgV2l0aEV1aVRoZW1lLmRpc3BsYXlOYW1lID0gY29tcG9uZW50TmFtZTtcbiAgcmV0dXJuIFdpdGhFdWlUaGVtZTtcbn07XG5cbi8qKlxuICogUmVuZGVyIHByb3AgYWx0ZXJuYXRpdmUgZm9yIGNvbXBsZXggY2xhc3MgY29tcG9uZW50c1xuICogTW9zdCB1c2VmdWwgZm9yIHNjZW5hcmlvcyB3aGVyZSBhIEhPQyBtYXkgaW50ZXJmZXJlIHdpdGggdHlwaW5nXG4gKi9cbmV4cG9ydCB2YXIgUmVuZGVyV2l0aEV1aVRoZW1lID0gZnVuY3Rpb24gUmVuZGVyV2l0aEV1aVRoZW1lKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIHRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGNoaWxkcmVuKHRoZW1lKTtcbn07XG5cbi8qKlxuICogTWlub3Igc3ludGFjdGljYWwgc3VnYXIgaG9vayBmb3IgdGhlbWUgQ1NTIHZhcmlhYmxlcy5cbiAqIFByaW1hcmlseSBtZWFudCBmb3IgaW50ZXJuYWwgRVVJIHVzYWdlLlxuICovXG5leHBvcnQgdmFyIHVzZUV1aVRoZW1lQ1NTVmFyaWFibGVzID0gZnVuY3Rpb24gdXNlRXVpVGhlbWVDU1NWYXJpYWJsZXMoKSB7XG4gIHZhciBfdXNlQ29udGV4dCA9IHVzZUNvbnRleHQoRXVpTmVzdGVkVGhlbWVDb250ZXh0KSxcbiAgICBzZXRHbG9iYWxDU1NWYXJpYWJsZXMgPSBfdXNlQ29udGV4dC5zZXRHbG9iYWxDU1NWYXJpYWJsZXMsXG4gICAgZ2xvYmFsQ1NTVmFyaWFibGVzID0gX3VzZUNvbnRleHQuZ2xvYmFsQ1NTVmFyaWFibGVzLFxuICAgIHNldE5lYXJlc3RUaGVtZUNTU1ZhcmlhYmxlcyA9IF91c2VDb250ZXh0LnNldE5lYXJlc3RUaGVtZUNTU1ZhcmlhYmxlcyxcbiAgICB0aGVtZUNTU1ZhcmlhYmxlcyA9IF91c2VDb250ZXh0LnRoZW1lQ1NTVmFyaWFibGVzO1xuICByZXR1cm4ge1xuICAgIHNldEdsb2JhbENTU1ZhcmlhYmxlczogc2V0R2xvYmFsQ1NTVmFyaWFibGVzLFxuICAgIGdsb2JhbENTU1ZhcmlhYmxlczogZ2xvYmFsQ1NTVmFyaWFibGVzLFxuICAgIHNldE5lYXJlc3RUaGVtZUNTU1ZhcmlhYmxlczogc2V0TmVhcmVzdFRoZW1lQ1NTVmFyaWFibGVzLFxuICAgIHRoZW1lQ1NTVmFyaWFibGVzOiB0aGVtZUNTU1ZhcmlhYmxlc1xuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aVRoZW1lQW1zdGVyZGFtIH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS90aGVtZSc7XG5pbXBvcnQgeyBERUZBVUxUX0NPTE9SX01PREUsIGdldENvbXB1dGVkIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIEV1aVN5c3RlbUNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChFdWlUaGVtZUFtc3RlcmRhbSk7XG5leHBvcnQgdmFyIEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe30pO1xuZXhwb3J0IHZhciBFdWlDb2xvck1vZGVDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoREVGQVVMVF9DT0xPUl9NT0RFKTtcbmV4cG9ydCB2YXIgZGVmYXVsdENvbXB1dGVkVGhlbWUgPSBnZXRDb21wdXRlZChFdWlUaGVtZUFtc3RlcmRhbSwge30sIERFRkFVTFRfQ09MT1JfTU9ERSk7XG5leHBvcnQgdmFyIEV1aVRoZW1lQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KGRlZmF1bHRDb21wdXRlZFRoZW1lKTtcbmV4cG9ydCB2YXIgRXVpTmVzdGVkVGhlbWVDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe1xuICBpc0dsb2JhbFRoZW1lOiB0cnVlLFxuICBoYXNEaWZmZXJlbnRDb2xvckZyb21HbG9iYWxUaGVtZTogZmFsc2UsXG4gIGJvZHlDb2xvcjogJycsXG4gIGNvbG9yQ2xhc3NOYW1lOiAnJyxcbiAgc2V0R2xvYmFsQ1NTVmFyaWFibGVzOiBmdW5jdGlvbiBzZXRHbG9iYWxDU1NWYXJpYWJsZXMoKSB7fSxcbiAgc2V0TmVhcmVzdFRoZW1lQ1NTVmFyaWFibGVzOiBmdW5jdGlvbiBzZXROZWFyZXN0VGhlbWVDU1NWYXJpYWJsZXMoKSB7fVxufSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgQ09MT1JfTU9ERVNfU1RBTkRBUkQgPSB7XG4gIGxpZ2h0OiAnTElHSFQnLFxuICBkYXJrOiAnREFSSydcbn07XG5leHBvcnQgdmFyIENPTE9SX01PREVTX0lOVkVSU0UgPSAnSU5WRVJTRSc7IiwgImZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgQ09MT1JfTU9ERVNfU1RBTkRBUkQsIENPTE9SX01PREVTX0lOVkVSU0UgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCB2YXIgREVGQVVMVF9DT0xPUl9NT0RFID0gQ09MT1JfTU9ERVNfU1RBTkRBUkQubGlnaHQ7XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBwYXJhbWV0ZXIgaXMgYW4gb2JqZWN0XG4gKiBAcGFyYW0ge2FueX0gb2JqIC0gQW55dGhpbmdcbiAqL1xudmFyIGlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gIHJldHVybiBvYmogJiYgX3R5cGVvZihvYmopID09PSAnb2JqZWN0Jztcbn07XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBjb2xvciBtb2RlIGlzIGBpbnZlcnNlYFxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yTW9kZSAtIGBsaWdodGAsIGBkYXJrYCwgb3IgYGludmVyc2VgXG4gKi9cbmV4cG9ydCB2YXIgaXNJbnZlcnNlQ29sb3JNb2RlID0gZnVuY3Rpb24gaXNJbnZlcnNlQ29sb3JNb2RlKGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSBDT0xPUl9NT0RFU19JTlZFUlNFO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb2xvciBtb2RlIGNvbmZpZ3VyZWQgaW4gdGhlIGN1cnJlbnQgRXVpVGhlbWVQcm92aWRlci5cbiAqIFJldHVybnMgdGhlIHBhcmVudCBjb2xvciBtb2RlIGlmIG5vbmUgaXMgZXhwbGljaXR5IHNldC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgLCBgZGFya2AsIG9yIGBpbnZlcnNlYFxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudENvbG9yTW9kZSAtIGBMSUdIVGAgb3IgYERBUktgOyB1c2VkIGFzIHRoZSBmYWxsYmFja1xuICovXG5leHBvcnQgdmFyIGdldENvbG9yTW9kZSA9IGZ1bmN0aW9uIGdldENvbG9yTW9kZShjb2xvck1vZGUsIHBhcmVudENvbG9yTW9kZSkge1xuICBpZiAoY29sb3JNb2RlID09IG51bGwpIHtcbiAgICByZXR1cm4gcGFyZW50Q29sb3JNb2RlIHx8IERFRkFVTFRfQ09MT1JfTU9ERTtcbiAgfVxuICB2YXIgbW9kZSA9IGNvbG9yTW9kZS50b1VwcGVyQ2FzZSgpO1xuICBpZiAoaXNJbnZlcnNlQ29sb3JNb2RlKG1vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudENvbG9yTW9kZSA9PT0gQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyayB8fCBwYXJlbnRDb2xvck1vZGUgPT09IHVuZGVmaW5lZCA/IENPTE9SX01PREVTX1NUQU5EQVJELmxpZ2h0IDogQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyaztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbW9kZTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgdmFsdWUgYXQgYSBnaXZlbiBwYXRoIG9uIGFuIG9iamVjdC5cbiAqIElmIGBjb2xvck1vZGVgIGlzIHByb3ZpZGVkLCB3aWxsIHNjb3BlIHRoZSB2YWx1ZSB0byB0aGUgYXBwcm9wcmlhdGUgY29sb3IgbW9kZSBrZXkgKExJR0hUXFxEQVJLKVxuICogQHBhcmFtIHtvYmplY3R9IG1vZGVsIC0gT2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gX3BhdGggLSBEb3Qtbm90YXRlZCBzdHJpbmcgdG8gYSBwYXRoIG9uIHRoZSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgIG9yIGBkYXJrYFxuICovXG5leHBvcnQgdmFyIGdldE9uID0gZnVuY3Rpb24gZ2V0T24obW9kZWwsIF9wYXRoLCBjb2xvck1vZGUpIHtcbiAgdmFyIHBhdGggPSBfcGF0aC5zcGxpdCgnLicpO1xuICB2YXIgbm9kZSA9IG1vZGVsO1xuICB3aGlsZSAocGF0aC5sZW5ndGgpIHtcbiAgICB2YXIgc2VnbWVudCA9IHBhdGguc2hpZnQoKTtcbiAgICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChjb2xvck1vZGUgJiYgbm9kZS5oYXNPd25Qcm9wZXJ0eShjb2xvck1vZGUpID09PSB0cnVlICYmIG5vZGVbY29sb3JNb2RlXS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAobm9kZVtjb2xvck1vZGVdW3NlZ21lbnRdIGluc3RhbmNlb2YgQ29tcHV0ZWQpIHtcbiAgICAgICAgICBub2RlID0gbm9kZVtjb2xvck1vZGVdW3NlZ21lbnRdLmdldFZhbHVlKG51bGwsIG51bGwsIG5vZGUsIGNvbG9yTW9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGVbY29sb3JNb2RlXVtzZWdtZW50XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5vZGVbc2VnbWVudF0gaW5zdGFuY2VvZiBDb21wdXRlZCkge1xuICAgICAgICBub2RlID0gbm9kZVtzZWdtZW50XS5nZXRWYWx1ZShudWxsLCBudWxsLCBub2RlLCBjb2xvck1vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5vZGVbc2VnbWVudF07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBub2RlO1xufTtcblxuLyoqXG4gKiBTZXRzIGEgdmFsdWUgYXQgYSBnaXZlbiBwYXRoIG9uIGFuIG9iamVjdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IF9wYXRoIC0gRG90LW5vdGF0ZWQgc3RyaW5nIHRvIGEgcGF0aCBvbiB0aGUgb2JqZWN0XG4gKiBAcGFyYW0ge2FueX0gc3RyaW5nIC0gIFRoZSB2YWx1ZSB0byBzZXRcbiAqL1xuZXhwb3J0IHZhciBzZXRPbiA9IGZ1bmN0aW9uIHNldE9uKG1vZGVsLCBfcGF0aCwgdmFsdWUpIHtcbiAgdmFyIHBhdGggPSBfcGF0aC5zcGxpdCgnLicpO1xuICB2YXIgcHJvcGVydHlOYW1lID0gcGF0aC5wb3AoKTtcbiAgdmFyIG5vZGUgPSBtb2RlbDtcbiAgd2hpbGUgKHBhdGgubGVuZ3RoKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBwYXRoLnNoaWZ0KCk7XG4gICAgaWYgKG5vZGUuaGFzT3duUHJvcGVydHkoc2VnbWVudCkgPT09IGZhbHNlKSB7XG4gICAgICBub2RlW3NlZ21lbnRdID0ge307XG4gICAgfVxuICAgIG5vZGUgPSBub2RlW3NlZ21lbnRdO1xuICB9XG4gIG5vZGVbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsYXNzIHRvIHN0b3JlIHRoZSBgY29tcHV0ZXJgIG1ldGhvZCBhbmQgaXRzIGV2ZW50dWFsIHBhcmFtZXRlcnMuXG4gKiBBbGxvd3MgZm9yIG9uLWRlbWFuZCBjb21wdXRhdGlvbiB3aXRoIHVwLXRvLWRhdGUgcGFyYW1ldGVycyB2aWEgYGdldFZhbHVlYCBtZXRob2QuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXB1dGVyIC0gRnVuY3Rpb24gdG8gYmUgY29tcHV0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nIHwgYXJyYXl9IGRlcGVuZGVuY2llcyAtIERlcGVuZGVuY2llcyBwYXNzZWQgdG8gdGhlIGBjb21wdXRlcmAgYXMgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgdmFyIENvbXB1dGVkID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ29tcHV0ZWQoY29tcHV0ZXIpIHtcbiAgICB2YXIgZGVwZW5kZW5jaWVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29tcHV0ZWQpO1xuICAgIHRoaXMuY29tcHV0ZXIgPSBjb21wdXRlcjtcbiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llcztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgYGNvbXB1dGVyYCBtZXRob2Qgd2l0aCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdGhlbWVcbiAgICogYnkgdGFraW5nIGludG8gYWNjb3VudCBwcmV2aW91c2x5IGNvbXB1dGVkIHZhbHVlcyBhbmQgbW9kaWZpY2F0aW9ucy5cbiAgICogQHBhcmFtIHtQcm94eSB8IG9iamVjdH0gYmFzZSAtIENvbXB1dGVkIG9yIHVuY29tcHV0ZWQgdGhlbWVcbiAgICogQHBhcmFtIHtQcm94eSB8IG9iamVjdH0gbW9kaWZpY2F0aW9ucyAtIFRoZW1lIHZhbHVlIG92ZXJyaWRlc1xuICAgKiBAcGFyYW0ge29iamVjdH0gd29ya2luZyAtIFBhcnRpYWxseSBjb21wdXRlZCB0aGVtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JNb2RlIC0gYGxpZ2h0YCBvciBgZGFya2BcbiAgICovXG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoQ29tcHV0ZWQsIFt7XG4gICAga2V5OiBcImdldFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKGJhc2UpIHtcbiAgICAgIHZhciBtb2RpZmljYXRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIHZhciB3b3JraW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgY29sb3JNb2RlID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXRoaXMuZGVwZW5kZW5jaWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlcih3b3JraW5nKTtcbiAgICAgIH1cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmRlcGVuZGVuY2llcykpIHtcbiAgICAgICAgdmFyIF9yZWYsIF9nZXRPbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZXIoKF9yZWYgPSAoX2dldE9uID0gZ2V0T24od29ya2luZywgdGhpcy5kZXBlbmRlbmNpZXMpKSAhPT0gbnVsbCAmJiBfZ2V0T24gIT09IHZvaWQgMCA/IF9nZXRPbiA6IGdldE9uKG1vZGlmaWNhdGlvbnMsIHRoaXMuZGVwZW5kZW5jaWVzLCBjb2xvck1vZGUpKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZ2V0T24oYmFzZSwgdGhpcy5kZXBlbmRlbmNpZXMsIGNvbG9yTW9kZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZXIodGhpcy5kZXBlbmRlbmNpZXMubWFwKGZ1bmN0aW9uIChkZXBlbmRlbmN5KSB7XG4gICAgICAgIHZhciBfcmVmMiwgX2dldE9uMjtcbiAgICAgICAgcmV0dXJuIChfcmVmMiA9IChfZ2V0T24yID0gZ2V0T24od29ya2luZywgZGVwZW5kZW5jeSkpICE9PSBudWxsICYmIF9nZXRPbjIgIT09IHZvaWQgMCA/IF9nZXRPbjIgOiBnZXRPbihtb2RpZmljYXRpb25zLCBkZXBlbmRlbmN5LCBjb2xvck1vZGUpKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiBnZXRPbihiYXNlLCBkZXBlbmRlbmN5LCBjb2xvck1vZGUpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xufSgpO1xuXG4vKipcbiAqIFJldHVybnMgYSBDbGFzcyAoYENvbXB1dGVkYCkgdGhhdCBzdG9yZXMgdGhlIGFyYml0cmFyeSBjb21wdXRlciBtZXRob2RcbiAqIGFuZCByZWZlcmVuY2VzIHRvIGl0cyBvcHRpb25hbCBkZXBlbmRlY2llcy5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXB1dGVyIC0gQXJiaXRyYXJ5IG1ldGhvZCB0byBiZSBjYWxsZWQgYXQgY29tcHV0ZSB0aW1lLlxuICogQHBhcmFtIHtzdHJpbmcgfCBhcnJheX0gZGVwZW5kZW5jaWVzIC0gVmFsdWVzIHRoYXQgd2lsbCBiZSBwcm92aWRlZCB0byBgY29tcHV0ZXJgIGF0IGNvbXB1dGUgdGltZS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWQoY29tcCwgZGVwKSB7XG4gIHJldHVybiBuZXcgQ29tcHV0ZWQoY29tcCwgZGVwKTtcbn1cblxuLyoqXG4gKiBUYWtlcyBhbiB1bmNvbXB1dGVkIHRoZW1lLCBhbmQgY29tcHV0ZXMgYW5kIHJldHVybnMgYWxsIHZhbHVlcyB0YWtpbmdcbiAqIGludG8gY29uc2lkZXJhdGlvbiB2YWx1ZSBvdmVycmlkZXMgYW5kIGNvbmZpZ3VyZWQgY29sb3IgbW9kZS5cbiAqIE92ZXJyaWRlcyB0YWtlIHByZWNlZGVuY2UsIGFuZCBvbmx5IHZhbHVlcyBpbiB0aGUgY3VycmVudCBjb2xvciBtb2RlXG4gKiBhcmUgY29tcHV0ZWQgYW5kIHJldHVybmVkLlxuICogQHBhcmFtIHtQcm94eX0gYmFzZSAtIE9iamVjdCB0byB0cmFuc2Zvcm0gaW50byBQcm94eVxuICogQHBhcmFtIHtQcm94eSB8IG9iamVjdH0gb3ZlciAtIFVuaXF1ZSBpZGVudGlmaWVyIG9yIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgIG9yIGBkYXJrYFxuICovXG5leHBvcnQgdmFyIGdldENvbXB1dGVkID0gZnVuY3Rpb24gZ2V0Q29tcHV0ZWQoYmFzZSwgb3ZlciwgY29sb3JNb2RlKSB7XG4gIHZhciBvdXRwdXQgPSB7XG4gICAgdGhlbWVOYW1lOiBiYXNlLmtleVxuICB9O1xuICBmdW5jdGlvbiBsb29wKGJhc2UsIG92ZXIpIHtcbiAgICB2YXIgY2hlY2tFeGlzdGluZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgdmFyIHBhdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcbiAgICBPYmplY3Qua2V5cyhiYXNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBuZXdQYXRoID0gcGF0aCA/IFwiXCIuY29uY2F0KHBhdGgsIFwiLlwiKS5jb25jYXQoa2V5KSA6IFwiXCIuY29uY2F0KGtleSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBrZXlgIGlzIG5vdCBuZWNlc3NhcmlseSBhIGNvbG9yTW9kZSBrZXlcbiAgICAgIGlmIChbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdC52YWx1ZXMoQ09MT1JfTU9ERVNfU1RBTkRBUkQpKSwgW2NvbG9yTW9kZV0pLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgaWYgKGtleSAhPT0gY29sb3JNb2RlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBjb2xvck1vZGVTZWdtZW50ID0gbmV3IFJlZ0V4cChcIihcXFxcLlwiLmNvbmNhdChjb2xvck1vZGUsIFwiXFxcXGIpfChcXFxcYlwiKS5jb25jYXQoY29sb3JNb2RlLCBcIlxcXFwuKVwiKSk7XG4gICAgICAgICAgbmV3UGF0aCA9IG5ld1BhdGgucmVwbGFjZShjb2xvck1vZGVTZWdtZW50LCAnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBleGlzdGluZyA9IGNoZWNrRXhpc3RpbmcgJiYgZ2V0T24ob3V0cHV0LCBuZXdQYXRoKTtcbiAgICAgIGlmICghZXhpc3RpbmcgfHwgaXNPYmplY3QoZXhpc3RpbmcpKSB7XG4gICAgICAgIHZhciBiYXNlVmFsdWUgPSBiYXNlW2tleV0gaW5zdGFuY2VvZiBDb21wdXRlZCA/IGJhc2Vba2V5XS5nZXRWYWx1ZShiYXNlLnJvb3QsIG92ZXIucm9vdCwgb3V0cHV0LCBjb2xvck1vZGUpIDogYmFzZVtrZXldO1xuICAgICAgICB2YXIgb3ZlclZhbHVlID0gb3ZlcltrZXldIGluc3RhbmNlb2YgQ29tcHV0ZWQgPyBvdmVyW2tleV0uZ2V0VmFsdWUoYmFzZS5yb290LCBvdmVyLnJvb3QsIG91dHB1dCwgY29sb3JNb2RlKSA6IG92ZXJba2V5XTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGJhc2VWYWx1ZSkgJiYgIUFycmF5LmlzQXJyYXkoYmFzZVZhbHVlKSkge1xuICAgICAgICAgIGxvb3AoYmFzZVZhbHVlLCBvdmVyVmFsdWUgIT09IG51bGwgJiYgb3ZlclZhbHVlICE9PSB2b2lkIDAgPyBvdmVyVmFsdWUgOiB7fSwgY2hlY2tFeGlzdGluZywgbmV3UGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0T24ob3V0cHV0LCBuZXdQYXRoLCBvdmVyVmFsdWUgIT09IG51bGwgJiYgb3ZlclZhbHVlICE9PSB2b2lkIDAgPyBvdmVyVmFsdWUgOiBiYXNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLy8gQ29tcHV0ZSBzdGFuZGFyZCB0aGVtZSB2YWx1ZXMgYW5kIGFwcGx5IG92ZXJyaWRlc1xuICBsb29wKGJhc2UsIG92ZXIpO1xuICAvLyBDb21wdXRlIGFuZCBhcHBseSBleHRlbnNpb24gdmFsdWVzIG9ubHlcbiAgbG9vcChvdmVyLCB7fSwgdHJ1ZSk7XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG4vKipcbiAqIEJ1aWxkcyBhIFByb3h5IHdpdGggYSBjdXN0b20gYGhhbmRsZXJgIGRlc2lnbmVkIHRvIHNlbGYtcmVmZXJlbmNlIHZhbHVlc1xuICogYW5kIHByZXZlbnQgYXJiaXRyYXJ5IHZhbHVlIG92ZXJyaWRlcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdCB0byB0cmFuc2Zvcm0gaW50byBQcm94eVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyIG9yIG5hbWVcbiAqL1xuZXhwb3J0IHZhciBidWlsZFRoZW1lID0gZnVuY3Rpb24gYnVpbGRUaGVtZShtb2RlbCwga2V5KSB7XG4gIHZhciBoYW5kbGVyID0ge1xuICAgIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZih0YXJnZXQpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldC5tb2RlbCk7XG4gICAgfSxcbiAgICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldC5tb2RlbCwgcHJvdG90eXBlKTtcbiAgICB9LFxuICAgIGlzRXh0ZW5zaWJsZTogZnVuY3Rpb24gaXNFeHRlbnNpYmxlKHRhcmdldCkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuaXNFeHRlbnNpYmxlKHRhcmdldCk7XG4gICAgfSxcbiAgICBwcmV2ZW50RXh0ZW5zaW9uczogZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQubW9kZWwpO1xuICAgIH0sXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQubW9kZWwsIGtleSk7XG4gICAgfSxcbiAgICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgYXR0cmlidXRlcykge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Lm1vZGVsLCBwcm9wZXJ0eSwgYXR0cmlidXRlcyk7XG4gICAgfSxcbiAgICBoYXM6IGZ1bmN0aW9uIGhhcyh0YXJnZXQsIHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5oYXModGFyZ2V0Lm1vZGVsLCBwcm9wZXJ0eSk7XG4gICAgfSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldChfdGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgICAgaWYgKHByb3BlcnR5ID09PSAna2V5Jykge1xuICAgICAgICByZXR1cm4gX3RhcmdldFtwcm9wZXJ0eV07XG4gICAgICB9XG5cbiAgICAgIC8vIHByZXZlbnQgU2FmYXJpIGZyb20gbG9ja2luZyB1cCB3aGVuIHRoZSBwcm94eSBpcyB1c2VkIGluIGRldiB0b29sc1xuICAgICAgLy8gYXMgaXQgZG9lc24ndCBzdXBwb3J0IGdldFByb3RvdHlwZU9mXG4gICAgICBpZiAocHJvcGVydHkgPT09ICdfX3Byb3RvX18nKSByZXR1cm4ge307XG4gICAgICB2YXIgdGFyZ2V0ID0gcHJvcGVydHkgPT09ICdyb290JyA/IF90YXJnZXQgOiBfdGFyZ2V0Lm1vZGVsIHx8IF90YXJnZXQ7XG4gICAgICAvLyBAdHMtaWdub3JlIGBzdHJpbmdgIGluZGV4IHNpZ25hdHVyZVxuICAgICAgdmFyIHZhbHVlID0gdGFyZ2V0W3Byb3BlcnR5XTtcbiAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkoe1xuICAgICAgICAgIG1vZGVsOiB2YWx1ZSxcbiAgICAgICAgICByb290OiBfdGFyZ2V0LnJvb3QsXG4gICAgICAgICAga2V5OiBcIl9cIi5jb25jYXQoX3RhcmdldC5rZXkpXG4gICAgICAgIH0sIGhhbmRsZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9LFxuICAgIG93bktleXM6IGZ1bmN0aW9uIG93bktleXModGFyZ2V0KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRhcmdldC5tb2RlbCk7XG4gICAgfSxcbiAgICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgfTtcbiAgdmFyIHRoZW1lUHJveHkgPSBuZXcgUHJveHkoe1xuICAgIG1vZGVsOiBtb2RlbCxcbiAgICByb290OiBtb2RlbCxcbiAgICBrZXk6IGtleVxuICB9LCBoYW5kbGVyKTtcbiAgcmV0dXJuIHRoZW1lUHJveHk7XG59O1xuXG4vKipcbiAqIERlZXBseSBtZXJnZXMgdHdvIG9iamVjdHMsIHVzaW5nIGBzb3VyY2VgIHZhbHVlcyB3aGVuZXZlciBwb3NzaWJsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBfdGFyZ2V0IC0gT2JqZWN0IHdpdGggZmFsbGJhY2sgdmFsdWVzXG4gKiBAcGFyYW0ge29iamVjdH0gc291cmNlIC0gT2JqZWN0IHdpdGggZGVzaXJlZCB2YWx1ZXNcbiAqL1xuZXhwb3J0IHZhciBtZXJnZURlZXAgPSBmdW5jdGlvbiBtZXJnZURlZXAoX3RhcmdldCkge1xuICB2YXIgc291cmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIHRhcmdldCA9IF9vYmplY3RTcHJlYWQoe30sIF90YXJnZXQpO1xuICBpZiAoIWlzT2JqZWN0KHRhcmdldCkgfHwgIWlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG4gIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHRhcmdldFZhbHVlID0gdGFyZ2V0W2tleV07XG4gICAgdmFyIHNvdXJjZVZhbHVlID0gc291cmNlW2tleV07XG4gICAgaWYgKGlzT2JqZWN0KHRhcmdldFZhbHVlKSAmJiBpc09iamVjdChzb3VyY2VWYWx1ZSkpIHtcbiAgICAgIHRhcmdldFtrZXldID0gbWVyZ2VEZWVwKF9vYmplY3RTcHJlYWQoe30sIHRhcmdldFZhbHVlKSwgX29iamVjdFNwcmVhZCh7fSwgc291cmNlVmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2VWYWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdGFyZ2V0O1xufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBpZiB0aGUgc3BlY2lmaWVkIGNvbG9yIGlzIFwiZGFya1wiLCB3aGljaCB1c3VhbGx5IG1lYW5zXG4gKiB5b3UgbmVlZCBsaWdodCB0ZXh0IGlmIHlvdSB1c2UgaXQgYXMgYSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZ1bGZpbGwgV0NBRyBjb250cmFzdFxuICogcmVxdWlyZW1lbnQuXG4gKiBUaGUgY29sb3IgbXVzdCBiZSBzcGVjaWZpZWQgdmlhIGl0cyByZWQsIGdyZWVuIGFuZCBibHVlIHZhbHVlIGluIHRoZSByYW5nZSBvZlxuICogMCB0byAyNTUuXG4gKiBUaGUgZm9ybXVsYSBpcyBiYXNlZCBvbiB0aGlzIFN0YWNrb3ZlcmZsb3cgYW5zd2VyOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk0MzAyM1xuICogd2hpY2ggaXRzZWxmIGlzIGJhc2VkIHVwb24gdGhlIFdDQUcgcmVjb21tZW5kYXRpb24gZm9yIGNvbG9yIGNvbnRyYXN0LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByZWQgVGhlIHJlZCBjb21wb25lbnQgaW4gdGhlIHJhbmdlIDAgdG8gMjU1XG4gKiBAcGFyYW0ge251bWJlcn0gZ3JlZW4gVGhlIGdyZWVuIGNvbXBvbmVudCBpbiB0aGUgcmFuZ2UgMCB0byAyNTVcbiAqIEBwYXJhbSB7bnVtYmVyfSBibHVlIFRoZSBibHVlIGNvbXBvbmVudCBpbiB0aGUgcmFuZ2UgMCB0byAyNTVcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb2xvciBpcyBkYXJrLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbG9yRGFyayhyZWQsIGdyZWVuLCBibHVlKSB7XG4gIHZhciBfbWFwJG1hcCA9IFtyZWQsIGdyZWVuLCBibHVlXS5tYXAoZnVuY3Rpb24gKGMpIHtcbiAgICAgIHJldHVybiBjIC8gMjU1LjA7XG4gICAgfSkubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gYyA8PSAwLjAzOTI4ID8gYyAvIDEyLjkyIDogTWF0aC5wb3coKGMgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgICB9KSxcbiAgICBfbWFwJG1hcDIgPSBfc2xpY2VkVG9BcnJheShfbWFwJG1hcCwgMyksXG4gICAgciA9IF9tYXAkbWFwMlswXSxcbiAgICBnID0gX21hcCRtYXAyWzFdLFxuICAgIGIgPSBfbWFwJG1hcDJbMl07XG4gIHZhciBsdW1pbmFuY2UgPSAwLjIxMjYgKiByICsgMC43MTUyICogZyArIDAuMDcyMiAqIGI7XG4gIHJldHVybiBsdW1pbmFuY2UgPD0gMC4xNzk7XG59IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkSGV4KGhleCkge1xuICByZXR1cm4gLyheI1swLTlBLUZdezZ9JCl8KF4jWzAtOUEtRl17M30kKS9pLnRlc3QoaGV4KTtcbn0iLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBDb252ZXJ0IGhleGFkZWNpbWFsIGNvbG9yIGludG8gYW4gYXJyYXkgb2YgUkdCIGludGVnZXIgdmFsdWVzXG4vLyBNb2RpZmllZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MjM4MzgvcmdiLXRvLWhleC1hbmQtaGV4LXRvLXJnYlxuXG5leHBvcnQgZnVuY3Rpb24gaGV4VG9SZ2IoaGV4KSB7XG4gIC8vIEV4cGFuZCBzaG9ydGhhbmQgZm9ybSAoZS5nLiBcIjAzRlwiKSB0byBmdWxsIGZvcm0gKGUuZy4gXCIwMDMzRkZcIilcbiAgdmFyIHNob3J0aGFuZFJlZ2V4ID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcbiAgaGV4ID0gaGV4LnJlcGxhY2Uoc2hvcnRoYW5kUmVnZXgsIGZ1bmN0aW9uIChtLCByMSwgZzEsIGIxKSB7XG4gICAgcmV0dXJuIHIxICsgcjEgKyBnMSArIGcxICsgYjEgKyBiMTtcbiAgfSk7XG4gIHZhciByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KTtcbiAgaWYgKHJlc3VsdCkge1xuICAgIHZhciBfcmVzdWx0ID0gX3NsaWNlZFRvQXJyYXkocmVzdWx0LCA0KSxcbiAgICAgIHIgPSBfcmVzdWx0WzFdLFxuICAgICAgZyA9IF9yZXN1bHRbMl0sXG4gICAgICBiID0gX3Jlc3VsdFszXTtcbiAgICByZXR1cm4gW3BhcnNlSW50KHIsIDE2KSwgcGFyc2VJbnQoZywgMTYpLCBwYXJzZUludChiLCAxNildO1xuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gcHJldmVudCBlcnJvcnNcbiAgcmV0dXJuIFswLCAwLCAwXTtcbn0iLCAiaW1wb3J0IHsgbWluLCBtYXggfSBmcm9tICcuL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKHgsIGxvdyA9IDAsIGhpZ2ggPSAxKSA9PiB7XG4gICAgcmV0dXJuIG1pbihtYXgobG93LCB4KSwgaGlnaCk7XG59O1xuIiwgImltcG9ydCBsaW1pdCBmcm9tICcuL2xpbWl0LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKHJnYikgPT4ge1xuICAgIHJnYi5fY2xpcHBlZCA9IGZhbHNlO1xuICAgIHJnYi5fdW5jbGlwcGVkID0gcmdiLnNsaWNlKDApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDM7IGkrKykge1xuICAgICAgICBpZiAoaSA8IDMpIHtcbiAgICAgICAgICAgIGlmIChyZ2JbaV0gPCAwIHx8IHJnYltpXSA+IDI1NSkgcmdiLl9jbGlwcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJnYltpXSA9IGxpbWl0KHJnYltpXSwgMCwgMjU1KTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSAzKSB7XG4gICAgICAgICAgICByZ2JbaV0gPSBsaW1pdChyZ2JbaV0sIDAsIDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZ2I7XG59O1xuIiwgIi8vIHBvcnRlZCBmcm9tIGpRdWVyeSdzICQudHlwZVxuY29uc3QgY2xhc3NUb1R5cGUgPSB7fTtcbmZvciAobGV0IG5hbWUgb2YgW1xuICAgICdCb29sZWFuJyxcbiAgICAnTnVtYmVyJyxcbiAgICAnU3RyaW5nJyxcbiAgICAnRnVuY3Rpb24nLFxuICAgICdBcnJheScsXG4gICAgJ0RhdGUnLFxuICAgICdSZWdFeHAnLFxuICAgICdVbmRlZmluZWQnLFxuICAgICdOdWxsJ1xuXSkge1xuICAgIGNsYXNzVG9UeXBlW2Bbb2JqZWN0ICR7bmFtZX1dYF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIGNsYXNzVG9UeXBlW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopXSB8fCAnb2JqZWN0Jztcbn1cbiIsICJpbXBvcnQgdHlwZSBmcm9tICcuL3R5cGUuanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoYXJncywga2V5T3JkZXIgPSBudWxsKSA9PiB7XG4gICAgLy8gaWYgY2FsbGVkIHdpdGggbW9yZSB0aGFuIDMgYXJndW1lbnRzLCB3ZSByZXR1cm4gdGhlIGFyZ3VtZW50c1xuICAgIGlmIChhcmdzLmxlbmd0aCA+PSAzKSByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncyk7XG4gICAgLy8gd2l0aCBsZXNzIHRoYW4gMyBhcmdzIHdlIGNoZWNrIGlmIGZpcnN0IGFyZyBpcyBvYmplY3RcbiAgICAvLyBhbmQgdXNlIHRoZSBrZXlPcmRlciBzdHJpbmcgdG8gZXh0cmFjdCBhbmQgc29ydCBwcm9wZXJ0aWVzXG4gICAgaWYgKHR5cGUoYXJnc1swXSkgPT0gJ29iamVjdCcgJiYga2V5T3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIGtleU9yZGVyXG4gICAgICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgICAgICAuZmlsdGVyKChrKSA9PiBhcmdzWzBdW2tdICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAubWFwKChrKSA9PiBhcmdzWzBdW2tdKTtcbiAgICB9XG4gICAgLy8gb3RoZXJ3aXNlIHdlIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBhcmd1bWVudFxuICAgIC8vICh3aGljaCB3ZSBzdXBwb3NlIGlzIGFuIGFycmF5IG9mIGFyZ3MpXG4gICAgcmV0dXJuIGFyZ3NbMF07XG59O1xuIiwgImltcG9ydCB0eXBlIGZyb20gJy4vdHlwZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChhcmdzKSA9PiB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoIDwgMikgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgbCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICBpZiAodHlwZShhcmdzW2xdKSA9PSAnc3RyaW5nJykgcmV0dXJuIGFyZ3NbbF0udG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbnVsbDtcbn07XG4iLCAiY29uc3QgeyBQSSwgbWluLCBtYXggfSA9IE1hdGg7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2xpcF9yZ2IgfSBmcm9tICcuL2NsaXBfcmdiLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGltaXQgfSBmcm9tICcuL2xpbWl0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHlwZSB9IGZyb20gJy4vdHlwZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVucGFjayB9IGZyb20gJy4vdW5wYWNrLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGFzdCB9IGZyb20gJy4vbGFzdC5qcyc7XG5cbmNvbnN0IFRXT1BJID0gUEkgKiAyO1xuY29uc3QgUElUSElSRCA9IFBJIC8gMztcbmNvbnN0IERFRzJSQUQgPSBQSSAvIDE4MDtcbmNvbnN0IFJBRDJERUcgPSAxODAgLyBQSTtcblxuZXhwb3J0IHsgUEksIFRXT1BJLCBQSVRISVJELCBERUcyUkFELCBSQUQyREVHLCBtaW4sIG1heCB9O1xuIiwgImV4cG9ydCBkZWZhdWx0IHtcbiAgICBmb3JtYXQ6IHt9LFxuICAgIGF1dG9kZXRlY3Q6IFtdXG59O1xuIiwgImltcG9ydCB7IGxhc3QsIGNsaXBfcmdiLCB0eXBlIH0gZnJvbSAnLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgX2lucHV0IGZyb20gJy4vaW8vaW5wdXQuanMnO1xuXG5jbGFzcyBDb2xvciB7XG4gICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGUoYXJnc1swXSkgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBhcmdzWzBdLmNvbnN0cnVjdG9yICYmXG4gICAgICAgICAgICBhcmdzWzBdLmNvbnN0cnVjdG9yID09PSB0aGlzLmNvbnN0cnVjdG9yXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50IGlzIGFscmVhZHkgYSBDb2xvciBpbnN0YW5jZVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3NbMF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gbGFzdCBhcmd1bWVudCBjb3VsZCBiZSB0aGUgbW9kZVxuICAgICAgICBsZXQgbW9kZSA9IGxhc3QoYXJncyk7XG4gICAgICAgIGxldCBhdXRvZGV0ZWN0ID0gZmFsc2U7XG4gICAgICAgIGlmICghbW9kZSkge1xuICAgICAgICAgICAgYXV0b2RldGVjdCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIV9pbnB1dC5zb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBfaW5wdXQuYXV0b2RldGVjdCA9IF9pbnB1dC5hdXRvZGV0ZWN0LnNvcnQoKGEsIGIpID0+IGIucCAtIGEucCk7XG4gICAgICAgICAgICAgICAgX2lucHV0LnNvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhdXRvLWRldGVjdCBmb3JtYXRcbiAgICAgICAgICAgIGZvciAobGV0IGNoayBvZiBfaW5wdXQuYXV0b2RldGVjdCkge1xuICAgICAgICAgICAgICAgIG1vZGUgPSBjaGsudGVzdCguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBpZiAobW9kZSkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9pbnB1dC5mb3JtYXRbbW9kZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHJnYiA9IF9pbnB1dC5mb3JtYXRbbW9kZV0uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBhdXRvZGV0ZWN0ID8gYXJncyA6IGFyZ3Muc2xpY2UoMCwgLTEpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWUuX3JnYiA9IGNsaXBfcmdiKHJnYik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gZm9ybWF0OiAnICsgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkIGFscGhhIGNoYW5uZWxcbiAgICAgICAgaWYgKG1lLl9yZ2IubGVuZ3RoID09PSAzKSBtZS5fcmdiLnB1c2goMSk7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBpZiAodHlwZSh0aGlzLmhleCkgPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHRoaXMuaGV4KCk7XG4gICAgICAgIHJldHVybiBgWyR7dGhpcy5fcmdiLmpvaW4oJywnKX1dYDtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBDb2xvcjtcbiIsICIvLyB0aGlzIGdldHMgdXBkYXRlZCBhdXRvbWF0aWNhbGx5XG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICcyLjYuMCc7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4vQ29sb3IuanMnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4vdmVyc2lvbi5qcyc7XG5cbmNvbnN0IGNocm9tYSA9ICguLi5hcmdzKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBjaHJvbWEuQ29sb3IoLi4uYXJncyk7XG59O1xuXG5jaHJvbWEuQ29sb3IgPSBDb2xvcjtcbmNocm9tYS52ZXJzaW9uID0gdmVyc2lvbjtcblxuZXhwb3J0IGRlZmF1bHQgY2hyb21hO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcblxuY29uc3QgY215azJyZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2NteWsnKTtcbiAgICBjb25zdCBbYywgbSwgeSwga10gPSBhcmdzO1xuICAgIGNvbnN0IGFscGhhID0gYXJncy5sZW5ndGggPiA0ID8gYXJnc1s0XSA6IDE7XG4gICAgaWYgKGsgPT09IDEpIHJldHVybiBbMCwgMCwgMCwgYWxwaGFdO1xuICAgIHJldHVybiBbXG4gICAgICAgIGMgPj0gMSA/IDAgOiAyNTUgKiAoMSAtIGMpICogKDEgLSBrKSwgLy8gclxuICAgICAgICBtID49IDEgPyAwIDogMjU1ICogKDEgLSBtKSAqICgxIC0gayksIC8vIGdcbiAgICAgICAgeSA+PSAxID8gMCA6IDI1NSAqICgxIC0geSkgKiAoMSAtIGspLCAvLyBiXG4gICAgICAgIGFscGhhXG4gICAgXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNteWsycmdiO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgbWF4IH0gPSBNYXRoO1xuXG5jb25zdCByZ2IyY215ayA9ICguLi5hcmdzKSA9PiB7XG4gICAgbGV0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgciA9IHIgLyAyNTU7XG4gICAgZyA9IGcgLyAyNTU7XG4gICAgYiA9IGIgLyAyNTU7XG4gICAgY29uc3QgayA9IDEgLSBtYXgociwgbWF4KGcsIGIpKTtcbiAgICBjb25zdCBmID0gayA8IDEgPyAxIC8gKDEgLSBrKSA6IDA7XG4gICAgY29uc3QgYyA9ICgxIC0gciAtIGspICogZjtcbiAgICBjb25zdCBtID0gKDEgLSBnIC0gaykgKiBmO1xuICAgIGNvbnN0IHkgPSAoMSAtIGIgLSBrKSAqIGY7XG4gICAgcmV0dXJuIFtjLCBtLCB5LCBrXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJjbXlrO1xuIiwgImltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNteWsycmdiIGZyb20gJy4vY215azJyZ2IuanMnO1xuaW1wb3J0IHJnYjJjbXlrIGZyb20gJy4vcmdiMmNteWsuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuY215ayA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmNteWsodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5jbXlrID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnY215aycpO1xuXG5pbnB1dC5mb3JtYXQuY215ayA9IGNteWsycmdiO1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDIsXG4gICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCAnY215aycpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgcmV0dXJuICdjbXlrJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjaywgbGFzdCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHJuZCA9IChhKSA9PiBNYXRoLnJvdW5kKGEgKiAxMDApIC8gMTAwO1xuXG4vKlxuICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAqIC0gaHNsMmNzcyhoLHMsbClcbiAqIC0gaHNsMmNzcyhoLHMsbCxhKVxuICogLSBoc2wyY3NzKFtoLHMsbF0sIG1vZGUpXG4gKiAtIGhzbDJjc3MoW2gscyxsLGFdLCBtb2RlKVxuICogLSBoc2wyY3NzKHtoLHMsbCxhfSwgbW9kZSlcbiAqL1xuY29uc3QgaHNsMmNzcyA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgaHNsYSA9IHVucGFjayhhcmdzLCAnaHNsYScpO1xuICAgIGxldCBtb2RlID0gbGFzdChhcmdzKSB8fCAnbHNhJztcbiAgICBoc2xhWzBdID0gcm5kKGhzbGFbMF0gfHwgMCk7XG4gICAgaHNsYVsxXSA9IHJuZChoc2xhWzFdICogMTAwKSArICclJztcbiAgICBoc2xhWzJdID0gcm5kKGhzbGFbMl0gKiAxMDApICsgJyUnO1xuICAgIGlmIChtb2RlID09PSAnaHNsYScgfHwgKGhzbGEubGVuZ3RoID4gMyAmJiBoc2xhWzNdIDwgMSkpIHtcbiAgICAgICAgaHNsYVszXSA9IGhzbGEubGVuZ3RoID4gMyA/IGhzbGFbM10gOiAxO1xuICAgICAgICBtb2RlID0gJ2hzbGEnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGhzbGEubGVuZ3RoID0gMztcbiAgICB9XG4gICAgcmV0dXJuIGAke21vZGV9KCR7aHNsYS5qb2luKCcsJyl9KWA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoc2wyY3NzO1xuIiwgImltcG9ydCB7IHVucGFjaywgbWluLCBtYXggfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbi8qXG4gKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICogLSByZ2IyaHNsKHIsZyxiKVxuICogLSByZ2IyaHNsKHIsZyxiLGEpXG4gKiAtIHJnYjJoc2woW3IsZyxiXSlcbiAqIC0gcmdiMmhzbChbcixnLGIsYV0pXG4gKiAtIHJnYjJoc2woe3IsZyxiLGF9KVxuICovXG5jb25zdCByZ2IyaHNsID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgbGV0IFtyLCBnLCBiXSA9IGFyZ3M7XG5cbiAgICByIC89IDI1NTtcbiAgICBnIC89IDI1NTtcbiAgICBiIC89IDI1NTtcblxuICAgIGNvbnN0IG1pblJnYiA9IG1pbihyLCBnLCBiKTtcbiAgICBjb25zdCBtYXhSZ2IgPSBtYXgociwgZywgYik7XG5cbiAgICBjb25zdCBsID0gKG1heFJnYiArIG1pblJnYikgLyAyO1xuICAgIGxldCBzLCBoO1xuXG4gICAgaWYgKG1heFJnYiA9PT0gbWluUmdiKSB7XG4gICAgICAgIHMgPSAwO1xuICAgICAgICBoID0gTnVtYmVyLk5hTjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzID1cbiAgICAgICAgICAgIGwgPCAwLjVcbiAgICAgICAgICAgICAgICA/IChtYXhSZ2IgLSBtaW5SZ2IpIC8gKG1heFJnYiArIG1pblJnYilcbiAgICAgICAgICAgICAgICA6IChtYXhSZ2IgLSBtaW5SZ2IpIC8gKDIgLSBtYXhSZ2IgLSBtaW5SZ2IpO1xuICAgIH1cblxuICAgIGlmIChyID09IG1heFJnYikgaCA9IChnIC0gYikgLyAobWF4UmdiIC0gbWluUmdiKTtcbiAgICBlbHNlIGlmIChnID09IG1heFJnYikgaCA9IDIgKyAoYiAtIHIpIC8gKG1heFJnYiAtIG1pblJnYik7XG4gICAgZWxzZSBpZiAoYiA9PSBtYXhSZ2IpIGggPSA0ICsgKHIgLSBnKSAvIChtYXhSZ2IgLSBtaW5SZ2IpO1xuXG4gICAgaCAqPSA2MDtcbiAgICBpZiAoaCA8IDApIGggKz0gMzYwO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDMgJiYgYXJnc1szXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gW2gsIHMsIGwsIGFyZ3NbM11dO1xuICAgIHJldHVybiBbaCwgcywgbF07XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IyaHNsO1xuIiwgImltcG9ydCB7IHVucGFjaywgbGFzdCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBoc2wyY3NzIGZyb20gJy4vaHNsMmNzcy5qcyc7XG5pbXBvcnQgcmdiMmhzbCBmcm9tICcuLi9oc2wvcmdiMmhzbC5qcyc7XG5jb25zdCB7IHJvdW5kIH0gPSBNYXRoO1xuXG4vKlxuICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAqIC0gcmdiMmNzcyhyLGcsYilcbiAqIC0gcmdiMmNzcyhyLGcsYixhKVxuICogLSByZ2IyY3NzKFtyLGcsYl0sIG1vZGUpXG4gKiAtIHJnYjJjc3MoW3IsZyxiLGFdLCBtb2RlKVxuICogLSByZ2IyY3NzKHtyLGcsYixhfSwgbW9kZSlcbiAqL1xuY29uc3QgcmdiMmNzcyA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgcmdiYSA9IHVucGFjayhhcmdzLCAncmdiYScpO1xuICAgIGxldCBtb2RlID0gbGFzdChhcmdzKSB8fCAncmdiJztcbiAgICBpZiAobW9kZS5zdWJzdHIoMCwgMykgPT0gJ2hzbCcpIHtcbiAgICAgICAgcmV0dXJuIGhzbDJjc3MocmdiMmhzbChyZ2JhKSwgbW9kZSk7XG4gICAgfVxuICAgIHJnYmFbMF0gPSByb3VuZChyZ2JhWzBdKTtcbiAgICByZ2JhWzFdID0gcm91bmQocmdiYVsxXSk7XG4gICAgcmdiYVsyXSA9IHJvdW5kKHJnYmFbMl0pO1xuICAgIGlmIChtb2RlID09PSAncmdiYScgfHwgKHJnYmEubGVuZ3RoID4gMyAmJiByZ2JhWzNdIDwgMSkpIHtcbiAgICAgICAgcmdiYVszXSA9IHJnYmEubGVuZ3RoID4gMyA/IHJnYmFbM10gOiAxO1xuICAgICAgICBtb2RlID0gJ3JnYmEnO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bW9kZX0oJHtyZ2JhLnNsaWNlKDAsIG1vZGUgPT09ICdyZ2InID8gMyA6IDQpLmpvaW4oJywnKX0pYDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJjc3M7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgaHNsMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnaHNsJyk7XG4gICAgY29uc3QgW2gsIHMsIGxdID0gYXJncztcbiAgICBsZXQgciwgZywgYjtcbiAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICByID0gZyA9IGIgPSBsICogMjU1O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHQzID0gWzAsIDAsIDBdO1xuICAgICAgICBjb25zdCBjID0gWzAsIDAsIDBdO1xuICAgICAgICBjb25zdCB0MiA9IGwgPCAwLjUgPyBsICogKDEgKyBzKSA6IGwgKyBzIC0gbCAqIHM7XG4gICAgICAgIGNvbnN0IHQxID0gMiAqIGwgLSB0MjtcbiAgICAgICAgY29uc3QgaF8gPSBoIC8gMzYwO1xuICAgICAgICB0M1swXSA9IGhfICsgMSAvIDM7XG4gICAgICAgIHQzWzFdID0gaF87XG4gICAgICAgIHQzWzJdID0gaF8gLSAxIC8gMztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0M1tpXSA8IDApIHQzW2ldICs9IDE7XG4gICAgICAgICAgICBpZiAodDNbaV0gPiAxKSB0M1tpXSAtPSAxO1xuICAgICAgICAgICAgaWYgKDYgKiB0M1tpXSA8IDEpIGNbaV0gPSB0MSArICh0MiAtIHQxKSAqIDYgKiB0M1tpXTtcbiAgICAgICAgICAgIGVsc2UgaWYgKDIgKiB0M1tpXSA8IDEpIGNbaV0gPSB0MjtcbiAgICAgICAgICAgIGVsc2UgaWYgKDMgKiB0M1tpXSA8IDIpIGNbaV0gPSB0MSArICh0MiAtIHQxKSAqICgyIC8gMyAtIHQzW2ldKSAqIDY7XG4gICAgICAgICAgICBlbHNlIGNbaV0gPSB0MTtcbiAgICAgICAgfVxuICAgICAgICBbciwgZywgYl0gPSBbcm91bmQoY1swXSAqIDI1NSksIHJvdW5kKGNbMV0gKiAyNTUpLCByb3VuZChjWzJdICogMjU1KV07XG4gICAgfVxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgLy8ga2VlcCBhbHBoYSBjaGFubmVsXG4gICAgICAgIHJldHVybiBbciwgZywgYiwgYXJnc1szXV07XG4gICAgfVxuICAgIHJldHVybiBbciwgZywgYiwgMV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoc2wycmdiO1xuIiwgImltcG9ydCBoc2wycmdiIGZyb20gJy4uL2hzbC9oc2wycmdiLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5cbmNvbnN0IFJFX1JHQiA9IC9ecmdiXFwoXFxzKigtP1xcZCspLFxccyooLT9cXGQrKVxccyosXFxzKigtP1xcZCspXFxzKlxcKSQvO1xuY29uc3QgUkVfUkdCQSA9XG4gICAgL15yZ2JhXFwoXFxzKigtP1xcZCspLFxccyooLT9cXGQrKVxccyosXFxzKigtP1xcZCspXFxzKixcXHMqKFswMV18WzAxXT9cXC5cXGQrKVxcKSQvO1xuY29uc3QgUkVfUkdCX1BDVCA9XG4gICAgL15yZ2JcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqXFwpJC87XG5jb25zdCBSRV9SR0JBX1BDVCA9XG4gICAgL15yZ2JhXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKFswMV18WzAxXT9cXC5cXGQrKVxcKSQvO1xuY29uc3QgUkVfSFNMID1cbiAgICAvXmhzbFxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKlxcKSQvO1xuY29uc3QgUkVfSFNMQSA9XG4gICAgL15oc2xhXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG5cbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbmNvbnN0IGNzczJyZ2IgPSAoY3NzKSA9PiB7XG4gICAgY3NzID0gY3NzLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGxldCBtO1xuXG4gICAgaWYgKGlucHV0LmZvcm1hdC5uYW1lZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LmZvcm1hdC5uYW1lZChjc3MpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuXG4gICAgLy8gcmdiKDI1MCwyMCwwKVxuICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9SR0IpKSkge1xuICAgICAgICBjb25zdCByZ2IgPSBtLnNsaWNlKDEsIDQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgcmdiW2ldID0gK3JnYltpXTtcbiAgICAgICAgfVxuICAgICAgICByZ2JbM10gPSAxOyAvLyBkZWZhdWx0IGFscGhhXG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxuXG4gICAgLy8gcmdiYSgyNTAsMjAsMCwwLjQpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQkEpKSkge1xuICAgICAgICBjb25zdCByZ2IgPSBtLnNsaWNlKDEsIDUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgcmdiW2ldID0gK3JnYltpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cblxuICAgIC8vIHJnYigxMDAlLDAlLDAlKVxuICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9SR0JfUENUKSkpIHtcbiAgICAgICAgY29uc3QgcmdiID0gbS5zbGljZSgxLCA0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgIHJnYltpXSA9IHJvdW5kKHJnYltpXSAqIDIuNTUpO1xuICAgICAgICB9XG4gICAgICAgIHJnYlszXSA9IDE7IC8vIGRlZmF1bHQgYWxwaGFcbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9XG5cbiAgICAvLyByZ2JhKDEwMCUsMCUsMCUsMC40KVxuICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9SR0JBX1BDVCkpKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IG0uc2xpY2UoMSwgNSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgICAgICByZ2JbaV0gPSByb3VuZChyZ2JbaV0gKiAyLjU1KTtcbiAgICAgICAgfVxuICAgICAgICByZ2JbM10gPSArcmdiWzNdO1xuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cblxuICAgIC8vIGhzbCgwLDEwMCUsNTAlKVxuICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9IU0wpKSkge1xuICAgICAgICBjb25zdCBoc2wgPSBtLnNsaWNlKDEsIDQpO1xuICAgICAgICBoc2xbMV0gKj0gMC4wMTtcbiAgICAgICAgaHNsWzJdICo9IDAuMDE7XG4gICAgICAgIGNvbnN0IHJnYiA9IGhzbDJyZ2IoaHNsKTtcbiAgICAgICAgcmdiWzNdID0gMTtcbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9XG5cbiAgICAvLyBoc2xhKDAsMTAwJSw1MCUsMC41KVxuICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9IU0xBKSkpIHtcbiAgICAgICAgY29uc3QgaHNsID0gbS5zbGljZSgxLCA0KTtcbiAgICAgICAgaHNsWzFdICo9IDAuMDE7XG4gICAgICAgIGhzbFsyXSAqPSAwLjAxO1xuICAgICAgICBjb25zdCByZ2IgPSBoc2wycmdiKGhzbCk7XG4gICAgICAgIHJnYlszXSA9ICttWzRdOyAvLyBkZWZhdWx0IGFscGhhID0gMVxuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cbn07XG5cbmNzczJyZ2IudGVzdCA9IChzKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgUkVfUkdCLnRlc3QocykgfHxcbiAgICAgICAgUkVfUkdCQS50ZXN0KHMpIHx8XG4gICAgICAgIFJFX1JHQl9QQ1QudGVzdChzKSB8fFxuICAgICAgICBSRV9SR0JBX1BDVC50ZXN0KHMpIHx8XG4gICAgICAgIFJFX0hTTC50ZXN0KHMpIHx8XG4gICAgICAgIFJFX0hTTEEudGVzdChzKVxuICAgICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjc3MycmdiO1xuIiwgImltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcblxuaW1wb3J0IHJnYjJjc3MgZnJvbSAnLi9yZ2IyY3NzLmpzJztcbmltcG9ydCBjc3MycmdiIGZyb20gJy4vY3NzMnJnYi5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5jc3MgPSBmdW5jdGlvbiAobW9kZSkge1xuICAgIHJldHVybiByZ2IyY3NzKHRoaXMuX3JnYiwgbW9kZSk7XG59O1xuXG5jaHJvbWEuY3NzID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnY3NzJyk7XG5cbmlucHV0LmZvcm1hdC5jc3MgPSBjc3MycmdiO1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDUsXG4gICAgdGVzdDogKGgsIC4uLnJlc3QpID0+IHtcbiAgICAgICAgaWYgKCFyZXN0Lmxlbmd0aCAmJiB0eXBlKGgpID09PSAnc3RyaW5nJyAmJiBjc3MycmdiLnRlc3QoaCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnY3NzJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5pbnB1dC5mb3JtYXQuZ2wgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IHJnYiA9IHVucGFjayhhcmdzLCAncmdiYScpO1xuICAgIHJnYlswXSAqPSAyNTU7XG4gICAgcmdiWzFdICo9IDI1NTtcbiAgICByZ2JbMl0gKj0gMjU1O1xuICAgIHJldHVybiByZ2I7XG59O1xuXG5jaHJvbWEuZ2wgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdnbCcpO1xuXG5Db2xvci5wcm90b3R5cGUuZ2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmdiID0gdGhpcy5fcmdiO1xuICAgIHJldHVybiBbcmdiWzBdIC8gMjU1LCByZ2JbMV0gLyAyNTUsIHJnYlsyXSAvIDI1NSwgcmdiWzNdXTtcbn07XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBmbG9vciB9ID0gTWF0aDtcblxuLypcbiAqIHRoaXMgaXMgYmFzaWNhbGx5IGp1c3QgSFNWIHdpdGggc29tZSBtaW5vciB0d2Vha3NcbiAqXG4gKiBodWUuLiBbMC4uMzYwXVxuICogY2hyb21hIC4uIFswLi4xXVxuICogZ3JheW5lc3MgLi4gWzAuLjFdXG4gKi9cblxuY29uc3QgaGNnMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnaGNnJyk7XG4gICAgbGV0IFtoLCBjLCBfZ10gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuICAgIF9nID0gX2cgKiAyNTU7XG4gICAgY29uc3QgX2MgPSBjICogMjU1O1xuICAgIGlmIChjID09PSAwKSB7XG4gICAgICAgIHIgPSBnID0gYiA9IF9nO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChoID09PSAzNjApIGggPSAwO1xuICAgICAgICBpZiAoaCA+IDM2MCkgaCAtPSAzNjA7XG4gICAgICAgIGlmIChoIDwgMCkgaCArPSAzNjA7XG4gICAgICAgIGggLz0gNjA7XG4gICAgICAgIGNvbnN0IGkgPSBmbG9vcihoKTtcbiAgICAgICAgY29uc3QgZiA9IGggLSBpO1xuICAgICAgICBjb25zdCBwID0gX2cgKiAoMSAtIGMpO1xuICAgICAgICBjb25zdCBxID0gcCArIF9jICogKDEgLSBmKTtcbiAgICAgICAgY29uc3QgdCA9IHAgKyBfYyAqIGY7XG4gICAgICAgIGNvbnN0IHYgPSBwICsgX2M7XG4gICAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFt2LCB0LCBwXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbcSwgdiwgcF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3AsIHYsIHRdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFtwLCBxLCB2XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbdCwgcCwgdl07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3YsIHAsIHFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaGNnMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIG1heCwgbWluIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCByZ2IyaGNnID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGNvbnN0IG1pblJnYiA9IG1pbihyLCBnLCBiKTtcbiAgICBjb25zdCBtYXhSZ2IgPSBtYXgociwgZywgYik7XG4gICAgY29uc3QgZGVsdGEgPSBtYXhSZ2IgLSBtaW5SZ2I7XG4gICAgY29uc3QgYyA9IChkZWx0YSAqIDEwMCkgLyAyNTU7XG4gICAgY29uc3QgX2cgPSAobWluUmdiIC8gKDI1NSAtIGRlbHRhKSkgKiAxMDA7XG4gICAgbGV0IGg7XG4gICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChyID09PSBtYXhSZ2IpIGggPSAoZyAtIGIpIC8gZGVsdGE7XG4gICAgICAgIGlmIChnID09PSBtYXhSZ2IpIGggPSAyICsgKGIgLSByKSAvIGRlbHRhO1xuICAgICAgICBpZiAoYiA9PT0gbWF4UmdiKSBoID0gNCArIChyIC0gZykgLyBkZWx0YTtcbiAgICAgICAgaCAqPSA2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICB9XG4gICAgcmV0dXJuIFtoLCBjLCBfZ107XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IyaGNnO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhjZzJyZ2IgZnJvbSAnLi9oY2cycmdiLmpzJztcbmltcG9ydCByZ2IyaGNnIGZyb20gJy4vcmdiMmhjZy5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oY2cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJoY2codGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5oY2cgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoY2cnKTtcblxuaW5wdXQuZm9ybWF0LmhjZyA9IGhjZzJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMSxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoY2cnKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnaGNnJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImNvbnN0IFJFX0hFWCA9IC9eIz8oW0EtRmEtZjAtOV17Nn18W0EtRmEtZjAtOV17M30pJC87XG5jb25zdCBSRV9IRVhBID0gL14jPyhbQS1GYS1mMC05XXs4fXxbQS1GYS1mMC05XXs0fSkkLztcblxuY29uc3QgaGV4MnJnYiA9IChoZXgpID0+IHtcbiAgICBpZiAoaGV4Lm1hdGNoKFJFX0hFWCkpIHtcbiAgICAgICAgLy8gcmVtb3ZlIG9wdGlvbmFsIGxlYWRpbmcgI1xuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCB8fCBoZXgubGVuZ3RoID09PSA3KSB7XG4gICAgICAgICAgICBoZXggPSBoZXguc3Vic3RyKDEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGV4cGFuZCBzaG9ydC1ub3RhdGlvbiB0byBmdWxsIHNpeC1kaWdpdFxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgaGV4ID0gaGV4LnNwbGl0KCcnKTtcbiAgICAgICAgICAgIGhleCA9IGhleFswXSArIGhleFswXSArIGhleFsxXSArIGhleFsxXSArIGhleFsyXSArIGhleFsyXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1ID0gcGFyc2VJbnQoaGV4LCAxNik7XG4gICAgICAgIGNvbnN0IHIgPSB1ID4+IDE2O1xuICAgICAgICBjb25zdCBnID0gKHUgPj4gOCkgJiAweGZmO1xuICAgICAgICBjb25zdCBiID0gdSAmIDB4ZmY7XG4gICAgICAgIHJldHVybiBbciwgZywgYiwgMV07XG4gICAgfVxuXG4gICAgLy8gbWF0Y2ggcmdiYSBoZXggZm9ybWF0LCBlZyAjRkYwMDAwNzdcbiAgICBpZiAoaGV4Lm1hdGNoKFJFX0hFWEEpKSB7XG4gICAgICAgIGlmIChoZXgubGVuZ3RoID09PSA1IHx8IGhleC5sZW5ndGggPT09IDkpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBvcHRpb25hbCBsZWFkaW5nICNcbiAgICAgICAgICAgIGhleCA9IGhleC5zdWJzdHIoMSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgZWlnaHQtZGlnaXRcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIGhleCA9IGhleC5zcGxpdCgnJyk7XG4gICAgICAgICAgICBoZXggPVxuICAgICAgICAgICAgICAgIGhleFswXSArXG4gICAgICAgICAgICAgICAgaGV4WzBdICtcbiAgICAgICAgICAgICAgICBoZXhbMV0gK1xuICAgICAgICAgICAgICAgIGhleFsxXSArXG4gICAgICAgICAgICAgICAgaGV4WzJdICtcbiAgICAgICAgICAgICAgICBoZXhbMl0gK1xuICAgICAgICAgICAgICAgIGhleFszXSArXG4gICAgICAgICAgICAgICAgaGV4WzNdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHUgPSBwYXJzZUludChoZXgsIDE2KTtcbiAgICAgICAgY29uc3QgciA9ICh1ID4+IDI0KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGcgPSAodSA+PiAxNikgJiAweGZmO1xuICAgICAgICBjb25zdCBiID0gKHUgPj4gOCkgJiAweGZmO1xuICAgICAgICBjb25zdCBhID0gTWF0aC5yb3VuZCgoKHUgJiAweGZmKSAvIDB4ZmYpICogMTAwKSAvIDEwMDtcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCBhXTtcbiAgICB9XG5cbiAgICAvLyB3ZSB1c2VkIHRvIGNoZWNrIGZvciBjc3MgY29sb3JzIGhlcmVcbiAgICAvLyBpZiBfaW5wdXQuY3NzPyBhbmQgcmdiID0gX2lucHV0LmNzcyBoZXhcbiAgICAvLyAgICAgcmV0dXJuIHJnYlxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGhleCBjb2xvcjogJHtoZXh9YCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoZXgycmdiO1xuIiwgImltcG9ydCB7IHVucGFjaywgbGFzdCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJoZXggPSAoLi4uYXJncykgPT4ge1xuICAgIGxldCBbciwgZywgYiwgYV0gPSB1bnBhY2soYXJncywgJ3JnYmEnKTtcbiAgICBsZXQgbW9kZSA9IGxhc3QoYXJncykgfHwgJ2F1dG8nO1xuICAgIGlmIChhID09PSB1bmRlZmluZWQpIGEgPSAxO1xuICAgIGlmIChtb2RlID09PSAnYXV0bycpIHtcbiAgICAgICAgbW9kZSA9IGEgPCAxID8gJ3JnYmEnIDogJ3JnYic7XG4gICAgfVxuICAgIHIgPSByb3VuZChyKTtcbiAgICBnID0gcm91bmQoZyk7XG4gICAgYiA9IHJvdW5kKGIpO1xuICAgIGNvbnN0IHUgPSAociA8PCAxNikgfCAoZyA8PCA4KSB8IGI7XG4gICAgbGV0IHN0ciA9ICcwMDAwMDAnICsgdS50b1N0cmluZygxNik7IC8vIy50b1VwcGVyQ2FzZSgpO1xuICAgIHN0ciA9IHN0ci5zdWJzdHIoc3RyLmxlbmd0aCAtIDYpO1xuICAgIGxldCBoeGEgPSAnMCcgKyByb3VuZChhICogMjU1KS50b1N0cmluZygxNik7XG4gICAgaHhhID0gaHhhLnN1YnN0cihoeGEubGVuZ3RoIC0gMik7XG4gICAgc3dpdGNoIChtb2RlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAncmdiYSc6XG4gICAgICAgICAgICByZXR1cm4gYCMke3N0cn0ke2h4YX1gO1xuICAgICAgICBjYXNlICdhcmdiJzpcbiAgICAgICAgICAgIHJldHVybiBgIyR7aHhhfSR7c3RyfWA7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYCMke3N0cn1gO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoZXg7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCB7IHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhleDJyZ2IgZnJvbSAnLi9oZXgycmdiLmpzJztcbmltcG9ydCByZ2IyaGV4IGZyb20gJy4vcmdiMmhleC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oZXggPSBmdW5jdGlvbiAobW9kZSkge1xuICAgIHJldHVybiByZ2IyaGV4KHRoaXMuX3JnYiwgbW9kZSk7XG59O1xuXG5jaHJvbWEuaGV4ID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnaGV4Jyk7XG5cbmlucHV0LmZvcm1hdC5oZXggPSBoZXgycmdiO1xuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiA0LFxuICAgIHRlc3Q6IChoLCAuLi5yZXN0KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFyZXN0Lmxlbmd0aCAmJlxuICAgICAgICAgICAgdHlwZShoKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIFszLCA0LCA1LCA2LCA3LCA4LCA5XS5pbmRleE9mKGgubGVuZ3RoKSA+PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuICdoZXgnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsaW1pdCwgVFdPUEksIFBJVEhJUkQgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IGNvcyB9ID0gTWF0aDtcblxuLypcbiAqIGh1ZSBbMC4uMzYwXVxuICogc2F0dXJhdGlvbiBbMC4uMV1cbiAqIGludGVuc2l0eSBbMC4uMV1cbiAqL1xuY29uc3QgaHNpMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgLypcbiAgICBib3Jyb3dlZCBmcm9tIGhlcmU6XG4gICAgaHR0cDovL2h1bW1lci5zdGFuZm9yZC5lZHUvbXVzZWluZm8vZG9jL2V4YW1wbGVzL2h1bWRydW0va2V5c2NhcGUyL2hzaTJyZ2IuY3BwXG4gICAgKi9cbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2knKTtcbiAgICBsZXQgW2gsIHMsIGldID0gYXJncztcbiAgICBsZXQgciwgZywgYjtcblxuICAgIGlmIChpc05hTihoKSkgaCA9IDA7XG4gICAgaWYgKGlzTmFOKHMpKSBzID0gMDtcbiAgICAvLyBub3JtYWxpemUgaHVlXG4gICAgaWYgKGggPiAzNjApIGggLT0gMzYwO1xuICAgIGlmIChoIDwgMCkgaCArPSAzNjA7XG4gICAgaCAvPSAzNjA7XG4gICAgaWYgKGggPCAxIC8gMykge1xuICAgICAgICBiID0gKDEgLSBzKSAvIDM7XG4gICAgICAgIHIgPSAoMSArIChzICogY29zKFRXT1BJICogaCkpIC8gY29zKFBJVEhJUkQgLSBUV09QSSAqIGgpKSAvIDM7XG4gICAgICAgIGcgPSAxIC0gKGIgKyByKTtcbiAgICB9IGVsc2UgaWYgKGggPCAyIC8gMykge1xuICAgICAgICBoIC09IDEgLyAzO1xuICAgICAgICByID0gKDEgLSBzKSAvIDM7XG4gICAgICAgIGcgPSAoMSArIChzICogY29zKFRXT1BJICogaCkpIC8gY29zKFBJVEhJUkQgLSBUV09QSSAqIGgpKSAvIDM7XG4gICAgICAgIGIgPSAxIC0gKHIgKyBnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBoIC09IDIgLyAzO1xuICAgICAgICBnID0gKDEgLSBzKSAvIDM7XG4gICAgICAgIGIgPSAoMSArIChzICogY29zKFRXT1BJICogaCkpIC8gY29zKFBJVEhJUkQgLSBUV09QSSAqIGgpKSAvIDM7XG4gICAgICAgIHIgPSAxIC0gKGcgKyBiKTtcbiAgICB9XG4gICAgciA9IGxpbWl0KGkgKiByICogMyk7XG4gICAgZyA9IGxpbWl0KGkgKiBnICogMyk7XG4gICAgYiA9IGxpbWl0KGkgKiBiICogMyk7XG4gICAgcmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1LCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoc2kycmdiO1xuIiwgImltcG9ydCB7IHVucGFjaywgVFdPUEkgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IG1pbiwgc3FydCwgYWNvcyB9ID0gTWF0aDtcblxuY29uc3QgcmdiMmhzaSA9ICguLi5hcmdzKSA9PiB7XG4gICAgLypcbiAgICBib3Jyb3dlZCBmcm9tIGhlcmU6XG4gICAgaHR0cDovL2h1bW1lci5zdGFuZm9yZC5lZHUvbXVzZWluZm8vZG9jL2V4YW1wbGVzL2h1bWRydW0va2V5c2NhcGUyL3JnYjJoc2kuY3BwXG4gICAgKi9cbiAgICBsZXQgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICByIC89IDI1NTtcbiAgICBnIC89IDI1NTtcbiAgICBiIC89IDI1NTtcbiAgICBsZXQgaDtcbiAgICBjb25zdCBtaW5fID0gbWluKHIsIGcsIGIpO1xuICAgIGNvbnN0IGkgPSAociArIGcgKyBiKSAvIDM7XG4gICAgY29uc3QgcyA9IGkgPiAwID8gMSAtIG1pbl8gLyBpIDogMDtcbiAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICBoID0gTmFOO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGggPSAociAtIGcgKyAociAtIGIpKSAvIDI7XG4gICAgICAgIGggLz0gc3FydCgociAtIGcpICogKHIgLSBnKSArIChyIC0gYikgKiAoZyAtIGIpKTtcbiAgICAgICAgaCA9IGFjb3MoaCk7XG4gICAgICAgIGlmIChiID4gZykge1xuICAgICAgICAgICAgaCA9IFRXT1BJIC0gaDtcbiAgICAgICAgfVxuICAgICAgICBoIC89IFRXT1BJO1xuICAgIH1cbiAgICByZXR1cm4gW2ggKiAzNjAsIHMsIGldO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmhzaTtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCBoc2kycmdiIGZyb20gJy4vaHNpMnJnYi5qcyc7XG5pbXBvcnQgcmdiMmhzaSBmcm9tICcuL3JnYjJoc2kuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuaHNpID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IyaHNpKHRoaXMuX3JnYik7XG59O1xuXG5jaHJvbWEuaHNpID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnaHNpJyk7XG5cbmlucHV0LmZvcm1hdC5oc2kgPSBoc2kycmdiO1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDIsXG4gICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCAnaHNpJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2hzaSc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCBoc2wycmdiIGZyb20gJy4vaHNsMnJnYi5qcyc7XG5pbXBvcnQgcmdiMmhzbCBmcm9tICcuL3JnYjJoc2wuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuaHNsID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IyaHNsKHRoaXMuX3JnYik7XG59O1xuXG5jaHJvbWEuaHNsID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnaHNsJyk7XG5cbmlucHV0LmZvcm1hdC5oc2wgPSBoc2wycmdiO1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDIsXG4gICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCAnaHNsJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2hzbCc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IGZsb29yIH0gPSBNYXRoO1xuXG5jb25zdCBoc3YycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc3YnKTtcbiAgICBsZXQgW2gsIHMsIHZdID0gYXJncztcbiAgICBsZXQgciwgZywgYjtcbiAgICB2ICo9IDI1NTtcbiAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICByID0gZyA9IGIgPSB2O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChoID09PSAzNjApIGggPSAwO1xuICAgICAgICBpZiAoaCA+IDM2MCkgaCAtPSAzNjA7XG4gICAgICAgIGlmIChoIDwgMCkgaCArPSAzNjA7XG4gICAgICAgIGggLz0gNjA7XG5cbiAgICAgICAgY29uc3QgaSA9IGZsb29yKGgpO1xuICAgICAgICBjb25zdCBmID0gaCAtIGk7XG4gICAgICAgIGNvbnN0IHAgPSB2ICogKDEgLSBzKTtcbiAgICAgICAgY29uc3QgcSA9IHYgKiAoMSAtIHMgKiBmKTtcbiAgICAgICAgY29uc3QgdCA9IHYgKiAoMSAtIHMgKiAoMSAtIGYpKTtcblxuICAgICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbdiwgdCwgcF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3EsIHYsIHBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFtwLCB2LCB0XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbcCwgcSwgdl07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3QsIHAsIHZdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFt2LCBwLCBxXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW3IsIGcsIGIsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzdjJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBtaW4sIG1heCB9ID0gTWF0aDtcblxuLypcbiAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gKiAtIHJnYjJoc3YocixnLGIpXG4gKiAtIHJnYjJoc3YoW3IsZyxiXSlcbiAqIC0gcmdiMmhzdih7cixnLGJ9KVxuICovXG5jb25zdCByZ2IyaHNsID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBsZXQgW3IsIGcsIGJdID0gYXJncztcbiAgICBjb25zdCBtaW5fID0gbWluKHIsIGcsIGIpO1xuICAgIGNvbnN0IG1heF8gPSBtYXgociwgZywgYik7XG4gICAgY29uc3QgZGVsdGEgPSBtYXhfIC0gbWluXztcbiAgICBsZXQgaCwgcywgdjtcbiAgICB2ID0gbWF4XyAvIDI1NS4wO1xuICAgIGlmIChtYXhfID09PSAwKSB7XG4gICAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgICAgICBzID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzID0gZGVsdGEgLyBtYXhfO1xuICAgICAgICBpZiAociA9PT0gbWF4XykgaCA9IChnIC0gYikgLyBkZWx0YTtcbiAgICAgICAgaWYgKGcgPT09IG1heF8pIGggPSAyICsgKGIgLSByKSAvIGRlbHRhO1xuICAgICAgICBpZiAoYiA9PT0gbWF4XykgaCA9IDQgKyAociAtIGcpIC8gZGVsdGE7XG4gICAgICAgIGggKj0gNjA7XG4gICAgICAgIGlmIChoIDwgMCkgaCArPSAzNjA7XG4gICAgfVxuICAgIHJldHVybiBbaCwgcywgdl07XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IyaHNsO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhzdjJyZ2IgZnJvbSAnLi9oc3YycmdiLmpzJztcbmltcG9ydCByZ2IyaHN2IGZyb20gJy4vcmdiMmhzdi5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oc3YgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJoc3YodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5oc3YgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoc3YnKTtcblxuaW5wdXQuZm9ybWF0LmhzdiA9IGhzdjJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc3YnKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnaHN2JztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImV4cG9ydCBkZWZhdWx0IHtcbiAgICAvLyBDb3JyZXNwb25kcyByb3VnaGx5IHRvIFJHQiBicmlnaHRlci9kYXJrZXJcbiAgICBLbjogMTgsXG5cbiAgICAvLyBENjUgc3RhbmRhcmQgcmVmZXJlbnRcbiAgICBYbjogMC45NTA0NyxcbiAgICBZbjogMSxcbiAgICBabjogMS4wODg4MyxcblxuICAgIHQwOiAwLjEzNzkzMTAzNCwgLy8gNCAvIDI5XG4gICAgdDE6IDAuMjA2ODk2NTUyLCAvLyA2IC8gMjlcbiAgICB0MjogMC4xMjg0MTg1NSwgLy8gMyAqIHQxICogdDFcbiAgICB0MzogMC4wMDg4NTY0NTIgLy8gdDEgKiB0MSAqIHQxXG59O1xuIiwgImltcG9ydCBMQUJfQ09OU1RBTlRTIGZyb20gJy4vbGFiLWNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHBvdyB9ID0gTWF0aDtcblxuLypcbiAqIEwqIFswLi4xMDBdXG4gKiBhIFstMTAwLi4xMDBdXG4gKiBiIFstMTAwLi4xMDBdXG4gKi9cbmNvbnN0IGxhYjJyZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2xhYicpO1xuICAgIGNvbnN0IFtsLCBhLCBiXSA9IGFyZ3M7XG4gICAgbGV0IHgsIHksIHosIHIsIGcsIGJfO1xuXG4gICAgeSA9IChsICsgMTYpIC8gMTE2O1xuICAgIHggPSBpc05hTihhKSA/IHkgOiB5ICsgYSAvIDUwMDtcbiAgICB6ID0gaXNOYU4oYikgPyB5IDogeSAtIGIgLyAyMDA7XG5cbiAgICB5ID0gTEFCX0NPTlNUQU5UUy5ZbiAqIGxhYl94eXooeSk7XG4gICAgeCA9IExBQl9DT05TVEFOVFMuWG4gKiBsYWJfeHl6KHgpO1xuICAgIHogPSBMQUJfQ09OU1RBTlRTLlpuICogbGFiX3h5eih6KTtcblxuICAgIHIgPSB4eXpfcmdiKDMuMjQwNDU0MiAqIHggLSAxLjUzNzEzODUgKiB5IC0gMC40OTg1MzE0ICogeik7IC8vIEQ2NSAtPiBzUkdCXG4gICAgZyA9IHh5el9yZ2IoLTAuOTY5MjY2ICogeCArIDEuODc2MDEwOCAqIHkgKyAwLjA0MTU1NiAqIHopO1xuICAgIGJfID0geHl6X3JnYigwLjA1NTY0MzQgKiB4IC0gMC4yMDQwMjU5ICogeSArIDEuMDU3MjI1MiAqIHopO1xuXG4gICAgcmV0dXJuIFtyLCBnLCBiXywgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuY29uc3QgeHl6X3JnYiA9IChyKSA9PiB7XG4gICAgcmV0dXJuIDI1NSAqIChyIDw9IDAuMDAzMDQgPyAxMi45MiAqIHIgOiAxLjA1NSAqIHBvdyhyLCAxIC8gMi40KSAtIDAuMDU1KTtcbn07XG5cbmNvbnN0IGxhYl94eXogPSAodCkgPT4ge1xuICAgIHJldHVybiB0ID4gTEFCX0NPTlNUQU5UUy50MVxuICAgICAgICA/IHQgKiB0ICogdFxuICAgICAgICA6IExBQl9DT05TVEFOVFMudDIgKiAodCAtIExBQl9DT05TVEFOVFMudDApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGFiMnJnYjtcbiIsICJpbXBvcnQgTEFCX0NPTlNUQU5UUyBmcm9tICcuL2xhYi1jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBwb3cgfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJsYWIgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgY29uc3QgW3gsIHksIHpdID0gcmdiMnh5eihyLCBnLCBiKTtcbiAgICBjb25zdCBsID0gMTE2ICogeSAtIDE2O1xuICAgIHJldHVybiBbbCA8IDAgPyAwIDogbCwgNTAwICogKHggLSB5KSwgMjAwICogKHkgLSB6KV07XG59O1xuXG5jb25zdCByZ2JfeHl6ID0gKHIpID0+IHtcbiAgICBpZiAoKHIgLz0gMjU1KSA8PSAwLjA0MDQ1KSByZXR1cm4gciAvIDEyLjkyO1xuICAgIHJldHVybiBwb3coKHIgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn07XG5cbmNvbnN0IHh5el9sYWIgPSAodCkgPT4ge1xuICAgIGlmICh0ID4gTEFCX0NPTlNUQU5UUy50MykgcmV0dXJuIHBvdyh0LCAxIC8gMyk7XG4gICAgcmV0dXJuIHQgLyBMQUJfQ09OU1RBTlRTLnQyICsgTEFCX0NPTlNUQU5UUy50MDtcbn07XG5cbmNvbnN0IHJnYjJ4eXogPSAociwgZywgYikgPT4ge1xuICAgIHIgPSByZ2JfeHl6KHIpO1xuICAgIGcgPSByZ2JfeHl6KGcpO1xuICAgIGIgPSByZ2JfeHl6KGIpO1xuICAgIGNvbnN0IHggPSB4eXpfbGFiKFxuICAgICAgICAoMC40MTI0NTY0ICogciArIDAuMzU3NTc2MSAqIGcgKyAwLjE4MDQzNzUgKiBiKSAvIExBQl9DT05TVEFOVFMuWG5cbiAgICApO1xuICAgIGNvbnN0IHkgPSB4eXpfbGFiKFxuICAgICAgICAoMC4yMTI2NzI5ICogciArIDAuNzE1MTUyMiAqIGcgKyAwLjA3MjE3NSAqIGIpIC8gTEFCX0NPTlNUQU5UUy5ZblxuICAgICk7XG4gICAgY29uc3QgeiA9IHh5el9sYWIoXG4gICAgICAgICgwLjAxOTMzMzkgKiByICsgMC4xMTkxOTIgKiBnICsgMC45NTAzMDQxICogYikgLyBMQUJfQ09OU1RBTlRTLlpuXG4gICAgKTtcbiAgICByZXR1cm4gW3gsIHksIHpdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmxhYjtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCBsYWIycmdiIGZyb20gJy4vbGFiMnJnYi5qcyc7XG5pbXBvcnQgcmdiMmxhYiBmcm9tICcuL3JnYjJsYWIuanMnO1xuXG5Db2xvci5wcm90b3R5cGUubGFiID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IybGFiKHRoaXMuX3JnYik7XG59O1xuXG5jaHJvbWEubGFiID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnbGFiJyk7XG5cbmlucHV0LmZvcm1hdC5sYWIgPSBsYWIycmdiO1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDIsXG4gICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGFiJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2xhYic7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIERFRzJSQUQgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHNpbiwgY29zIH0gPSBNYXRoO1xuXG5jb25zdCBsY2gybGFiID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvKlxuICAgIENvbnZlcnQgZnJvbSBhIHF1YWxpdGF0aXZlIHBhcmFtZXRlciBoIGFuZCBhIHF1YW50aXRhdGl2ZSBwYXJhbWV0ZXIgbCB0byBhIDI0LWJpdCBwaXhlbC5cbiAgICBUaGVzZSBmb3JtdWxhcyB3ZXJlIGludmVudGVkIGJ5IERhdmlkIERhbHJ5bXBsZSB0byBvYnRhaW4gbWF4aW11bSBjb250cmFzdCB3aXRob3V0IGdvaW5nXG4gICAgb3V0IG9mIGdhbXV0IGlmIHRoZSBwYXJhbWV0ZXJzIGFyZSBpbiB0aGUgcmFuZ2UgMC0xLlxuXG4gICAgQSBzYXR1cmF0aW9uIG11bHRpcGxpZXIgd2FzIGFkZGVkIGJ5IEdyZWdvciBBaXNjaFxuICAgICovXG4gICAgbGV0IFtsLCBjLCBoXSA9IHVucGFjayhhcmdzLCAnbGNoJyk7XG4gICAgaWYgKGlzTmFOKGgpKSBoID0gMDtcbiAgICBoID0gaCAqIERFRzJSQUQ7XG4gICAgcmV0dXJuIFtsLCBjb3MoaCkgKiBjLCBzaW4oaCkgKiBjXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxjaDJsYWI7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGxjaDJsYWIgZnJvbSAnLi9sY2gybGFiLmpzJztcbmltcG9ydCBsYWIycmdiIGZyb20gJy4uL2xhYi9sYWIycmdiLmpzJztcblxuY29uc3QgbGNoMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGNoJyk7XG4gICAgY29uc3QgW2wsIGMsIGhdID0gYXJncztcbiAgICBjb25zdCBbTCwgYSwgYl9dID0gbGNoMmxhYihsLCBjLCBoKTtcbiAgICBjb25zdCBbciwgZywgYl0gPSBsYWIycmdiKEwsIGEsIGJfKTtcbiAgICByZXR1cm4gW3IsIGcsIGIsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxjaDJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGxjaDJyZ2IgZnJvbSAnLi9sY2gycmdiLmpzJztcblxuY29uc3QgaGNsMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgaGNsID0gdW5wYWNrKGFyZ3MsICdoY2wnKS5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIGxjaDJyZ2IoLi4uaGNsKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhjbDJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBSQUQyREVHIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBzcXJ0LCBhdGFuMiwgcm91bmQgfSA9IE1hdGg7XG5cbmNvbnN0IGxhYjJsY2ggPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IFtsLCBhLCBiXSA9IHVucGFjayhhcmdzLCAnbGFiJyk7XG4gICAgY29uc3QgYyA9IHNxcnQoYSAqIGEgKyBiICogYik7XG4gICAgbGV0IGggPSAoYXRhbjIoYiwgYSkgKiBSQUQyREVHICsgMzYwKSAlIDM2MDtcbiAgICBpZiAocm91bmQoYyAqIDEwMDAwKSA9PT0gMCkgaCA9IE51bWJlci5OYU47XG4gICAgcmV0dXJuIFtsLCBjLCBoXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxhYjJsY2g7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IHJnYjJsYWIgZnJvbSAnLi4vbGFiL3JnYjJsYWIuanMnO1xuaW1wb3J0IGxhYjJsY2ggZnJvbSAnLi9sYWIybGNoLmpzJztcblxuY29uc3QgcmdiMmxjaCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBjb25zdCBbbCwgYSwgYl9dID0gcmdiMmxhYihyLCBnLCBiKTtcbiAgICByZXR1cm4gbGFiMmxjaChsLCBhLCBiXyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IybGNoO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGxjaDJyZ2IgZnJvbSAnLi9sY2gycmdiLmpzJztcbmltcG9ydCBoY2wycmdiIGZyb20gJy4vaGNsMnJnYi5qcyc7XG5pbXBvcnQgcmdiMmxjaCBmcm9tICcuL3JnYjJsY2guanMnO1xuXG5Db2xvci5wcm90b3R5cGUubGNoID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IybGNoKHRoaXMuX3JnYik7XG59O1xuQ29sb3IucHJvdG90eXBlLmhjbCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmxjaCh0aGlzLl9yZ2IpLnJldmVyc2UoKTtcbn07XG5cbmNocm9tYS5sY2ggPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdsY2gnKTtcbmNocm9tYS5oY2wgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoY2wnKTtcblxuaW5wdXQuZm9ybWF0LmxjaCA9IGxjaDJyZ2I7XG5pbnB1dC5mb3JtYXQuaGNsID0gaGNsMnJnYjtcblsnbGNoJywgJ2hjbCddLmZvckVhY2goKG0pID0+XG4gICAgaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMixcbiAgICAgICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgbSk7XG4gICAgICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiBtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcbik7XG4iLCAiLyoqXG5cdFgxMSBjb2xvciBuYW1lc1xuXG5cdGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvI3N2Zy1jb2xvclxuKi9cblxuY29uc3QgdzNjeDExID0ge1xuICAgIGFsaWNlYmx1ZTogJyNmMGY4ZmYnLFxuICAgIGFudGlxdWV3aGl0ZTogJyNmYWViZDcnLFxuICAgIGFxdWE6ICcjMDBmZmZmJyxcbiAgICBhcXVhbWFyaW5lOiAnIzdmZmZkNCcsXG4gICAgYXp1cmU6ICcjZjBmZmZmJyxcbiAgICBiZWlnZTogJyNmNWY1ZGMnLFxuICAgIGJpc3F1ZTogJyNmZmU0YzQnLFxuICAgIGJsYWNrOiAnIzAwMDAwMCcsXG4gICAgYmxhbmNoZWRhbG1vbmQ6ICcjZmZlYmNkJyxcbiAgICBibHVlOiAnIzAwMDBmZicsXG4gICAgYmx1ZXZpb2xldDogJyM4YTJiZTInLFxuICAgIGJyb3duOiAnI2E1MmEyYScsXG4gICAgYnVybHl3b29kOiAnI2RlYjg4NycsXG4gICAgY2FkZXRibHVlOiAnIzVmOWVhMCcsXG4gICAgY2hhcnRyZXVzZTogJyM3ZmZmMDAnLFxuICAgIGNob2NvbGF0ZTogJyNkMjY5MWUnLFxuICAgIGNvcmFsOiAnI2ZmN2Y1MCcsXG4gICAgY29ybmZsb3dlcmJsdWU6ICcjNjQ5NWVkJyxcbiAgICBjb3Juc2lsazogJyNmZmY4ZGMnLFxuICAgIGNyaW1zb246ICcjZGMxNDNjJyxcbiAgICBjeWFuOiAnIzAwZmZmZicsXG4gICAgZGFya2JsdWU6ICcjMDAwMDhiJyxcbiAgICBkYXJrY3lhbjogJyMwMDhiOGInLFxuICAgIGRhcmtnb2xkZW5yb2Q6ICcjYjg4NjBiJyxcbiAgICBkYXJrZ3JheTogJyNhOWE5YTknLFxuICAgIGRhcmtncmVlbjogJyMwMDY0MDAnLFxuICAgIGRhcmtncmV5OiAnI2E5YTlhOScsXG4gICAgZGFya2toYWtpOiAnI2JkYjc2YicsXG4gICAgZGFya21hZ2VudGE6ICcjOGIwMDhiJyxcbiAgICBkYXJrb2xpdmVncmVlbjogJyM1NTZiMmYnLFxuICAgIGRhcmtvcmFuZ2U6ICcjZmY4YzAwJyxcbiAgICBkYXJrb3JjaGlkOiAnIzk5MzJjYycsXG4gICAgZGFya3JlZDogJyM4YjAwMDAnLFxuICAgIGRhcmtzYWxtb246ICcjZTk5NjdhJyxcbiAgICBkYXJrc2VhZ3JlZW46ICcjOGZiYzhmJyxcbiAgICBkYXJrc2xhdGVibHVlOiAnIzQ4M2Q4YicsXG4gICAgZGFya3NsYXRlZ3JheTogJyMyZjRmNGYnLFxuICAgIGRhcmtzbGF0ZWdyZXk6ICcjMmY0ZjRmJyxcbiAgICBkYXJrdHVycXVvaXNlOiAnIzAwY2VkMScsXG4gICAgZGFya3Zpb2xldDogJyM5NDAwZDMnLFxuICAgIGRlZXBwaW5rOiAnI2ZmMTQ5MycsXG4gICAgZGVlcHNreWJsdWU6ICcjMDBiZmZmJyxcbiAgICBkaW1ncmF5OiAnIzY5Njk2OScsXG4gICAgZGltZ3JleTogJyM2OTY5NjknLFxuICAgIGRvZGdlcmJsdWU6ICcjMWU5MGZmJyxcbiAgICBmaXJlYnJpY2s6ICcjYjIyMjIyJyxcbiAgICBmbG9yYWx3aGl0ZTogJyNmZmZhZjAnLFxuICAgIGZvcmVzdGdyZWVuOiAnIzIyOGIyMicsXG4gICAgZnVjaHNpYTogJyNmZjAwZmYnLFxuICAgIGdhaW5zYm9ybzogJyNkY2RjZGMnLFxuICAgIGdob3N0d2hpdGU6ICcjZjhmOGZmJyxcbiAgICBnb2xkOiAnI2ZmZDcwMCcsXG4gICAgZ29sZGVucm9kOiAnI2RhYTUyMCcsXG4gICAgZ3JheTogJyM4MDgwODAnLFxuICAgIGdyZWVuOiAnIzAwODAwMCcsXG4gICAgZ3JlZW55ZWxsb3c6ICcjYWRmZjJmJyxcbiAgICBncmV5OiAnIzgwODA4MCcsXG4gICAgaG9uZXlkZXc6ICcjZjBmZmYwJyxcbiAgICBob3RwaW5rOiAnI2ZmNjliNCcsXG4gICAgaW5kaWFucmVkOiAnI2NkNWM1YycsXG4gICAgaW5kaWdvOiAnIzRiMDA4MicsXG4gICAgaXZvcnk6ICcjZmZmZmYwJyxcbiAgICBraGFraTogJyNmMGU2OGMnLFxuICAgIGxhc2VybGVtb246ICcjZmZmZjU0JyxcbiAgICBsYXZlbmRlcjogJyNlNmU2ZmEnLFxuICAgIGxhdmVuZGVyYmx1c2g6ICcjZmZmMGY1JyxcbiAgICBsYXduZ3JlZW46ICcjN2NmYzAwJyxcbiAgICBsZW1vbmNoaWZmb246ICcjZmZmYWNkJyxcbiAgICBsaWdodGJsdWU6ICcjYWRkOGU2JyxcbiAgICBsaWdodGNvcmFsOiAnI2YwODA4MCcsXG4gICAgbGlnaHRjeWFuOiAnI2UwZmZmZicsXG4gICAgbGlnaHRnb2xkZW5yb2Q6ICcjZmFmYWQyJyxcbiAgICBsaWdodGdvbGRlbnJvZHllbGxvdzogJyNmYWZhZDInLFxuICAgIGxpZ2h0Z3JheTogJyNkM2QzZDMnLFxuICAgIGxpZ2h0Z3JlZW46ICcjOTBlZTkwJyxcbiAgICBsaWdodGdyZXk6ICcjZDNkM2QzJyxcbiAgICBsaWdodHBpbms6ICcjZmZiNmMxJyxcbiAgICBsaWdodHNhbG1vbjogJyNmZmEwN2EnLFxuICAgIGxpZ2h0c2VhZ3JlZW46ICcjMjBiMmFhJyxcbiAgICBsaWdodHNreWJsdWU6ICcjODdjZWZhJyxcbiAgICBsaWdodHNsYXRlZ3JheTogJyM3Nzg4OTknLFxuICAgIGxpZ2h0c2xhdGVncmV5OiAnIzc3ODg5OScsXG4gICAgbGlnaHRzdGVlbGJsdWU6ICcjYjBjNGRlJyxcbiAgICBsaWdodHllbGxvdzogJyNmZmZmZTAnLFxuICAgIGxpbWU6ICcjMDBmZjAwJyxcbiAgICBsaW1lZ3JlZW46ICcjMzJjZDMyJyxcbiAgICBsaW5lbjogJyNmYWYwZTYnLFxuICAgIG1hZ2VudGE6ICcjZmYwMGZmJyxcbiAgICBtYXJvb246ICcjODAwMDAwJyxcbiAgICBtYXJvb24yOiAnIzdmMDAwMCcsXG4gICAgbWFyb29uMzogJyNiMDMwNjAnLFxuICAgIG1lZGl1bWFxdWFtYXJpbmU6ICcjNjZjZGFhJyxcbiAgICBtZWRpdW1ibHVlOiAnIzAwMDBjZCcsXG4gICAgbWVkaXVtb3JjaGlkOiAnI2JhNTVkMycsXG4gICAgbWVkaXVtcHVycGxlOiAnIzkzNzBkYicsXG4gICAgbWVkaXVtc2VhZ3JlZW46ICcjM2NiMzcxJyxcbiAgICBtZWRpdW1zbGF0ZWJsdWU6ICcjN2I2OGVlJyxcbiAgICBtZWRpdW1zcHJpbmdncmVlbjogJyMwMGZhOWEnLFxuICAgIG1lZGl1bXR1cnF1b2lzZTogJyM0OGQxY2MnLFxuICAgIG1lZGl1bXZpb2xldHJlZDogJyNjNzE1ODUnLFxuICAgIG1pZG5pZ2h0Ymx1ZTogJyMxOTE5NzAnLFxuICAgIG1pbnRjcmVhbTogJyNmNWZmZmEnLFxuICAgIG1pc3R5cm9zZTogJyNmZmU0ZTEnLFxuICAgIG1vY2Nhc2luOiAnI2ZmZTRiNScsXG4gICAgbmF2YWpvd2hpdGU6ICcjZmZkZWFkJyxcbiAgICBuYXZ5OiAnIzAwMDA4MCcsXG4gICAgb2xkbGFjZTogJyNmZGY1ZTYnLFxuICAgIG9saXZlOiAnIzgwODAwMCcsXG4gICAgb2xpdmVkcmFiOiAnIzZiOGUyMycsXG4gICAgb3JhbmdlOiAnI2ZmYTUwMCcsXG4gICAgb3JhbmdlcmVkOiAnI2ZmNDUwMCcsXG4gICAgb3JjaGlkOiAnI2RhNzBkNicsXG4gICAgcGFsZWdvbGRlbnJvZDogJyNlZWU4YWEnLFxuICAgIHBhbGVncmVlbjogJyM5OGZiOTgnLFxuICAgIHBhbGV0dXJxdW9pc2U6ICcjYWZlZWVlJyxcbiAgICBwYWxldmlvbGV0cmVkOiAnI2RiNzA5MycsXG4gICAgcGFwYXlhd2hpcDogJyNmZmVmZDUnLFxuICAgIHBlYWNocHVmZjogJyNmZmRhYjknLFxuICAgIHBlcnU6ICcjY2Q4NTNmJyxcbiAgICBwaW5rOiAnI2ZmYzBjYicsXG4gICAgcGx1bTogJyNkZGEwZGQnLFxuICAgIHBvd2RlcmJsdWU6ICcjYjBlMGU2JyxcbiAgICBwdXJwbGU6ICcjODAwMDgwJyxcbiAgICBwdXJwbGUyOiAnIzdmMDA3ZicsXG4gICAgcHVycGxlMzogJyNhMDIwZjAnLFxuICAgIHJlYmVjY2FwdXJwbGU6ICcjNjYzMzk5JyxcbiAgICByZWQ6ICcjZmYwMDAwJyxcbiAgICByb3N5YnJvd246ICcjYmM4ZjhmJyxcbiAgICByb3lhbGJsdWU6ICcjNDE2OWUxJyxcbiAgICBzYWRkbGVicm93bjogJyM4YjQ1MTMnLFxuICAgIHNhbG1vbjogJyNmYTgwNzInLFxuICAgIHNhbmR5YnJvd246ICcjZjRhNDYwJyxcbiAgICBzZWFncmVlbjogJyMyZThiNTcnLFxuICAgIHNlYXNoZWxsOiAnI2ZmZjVlZScsXG4gICAgc2llbm5hOiAnI2EwNTIyZCcsXG4gICAgc2lsdmVyOiAnI2MwYzBjMCcsXG4gICAgc2t5Ymx1ZTogJyM4N2NlZWInLFxuICAgIHNsYXRlYmx1ZTogJyM2YTVhY2QnLFxuICAgIHNsYXRlZ3JheTogJyM3MDgwOTAnLFxuICAgIHNsYXRlZ3JleTogJyM3MDgwOTAnLFxuICAgIHNub3c6ICcjZmZmYWZhJyxcbiAgICBzcHJpbmdncmVlbjogJyMwMGZmN2YnLFxuICAgIHN0ZWVsYmx1ZTogJyM0NjgyYjQnLFxuICAgIHRhbjogJyNkMmI0OGMnLFxuICAgIHRlYWw6ICcjMDA4MDgwJyxcbiAgICB0aGlzdGxlOiAnI2Q4YmZkOCcsXG4gICAgdG9tYXRvOiAnI2ZmNjM0NycsXG4gICAgdHVycXVvaXNlOiAnIzQwZTBkMCcsXG4gICAgdmlvbGV0OiAnI2VlODJlZScsXG4gICAgd2hlYXQ6ICcjZjVkZWIzJyxcbiAgICB3aGl0ZTogJyNmZmZmZmYnLFxuICAgIHdoaXRlc21va2U6ICcjZjVmNWY1JyxcbiAgICB5ZWxsb3c6ICcjZmZmZjAwJyxcbiAgICB5ZWxsb3dncmVlbjogJyM5YWNkMzInXG59O1xuXG5leHBvcnQgZGVmYXVsdCB3M2N4MTE7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5pbXBvcnQgdzNjeDExIGZyb20gJy4uLy4uL2NvbG9ycy93M2N4MTEuanMnO1xuaW1wb3J0IGhleDJyZ2IgZnJvbSAnLi4vaGV4L2hleDJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoZXggZnJvbSAnLi4vaGV4L3JnYjJoZXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUubmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBoZXggPSByZ2IyaGV4KHRoaXMuX3JnYiwgJ3JnYicpO1xuICAgIGZvciAobGV0IG4gb2YgT2JqZWN0LmtleXModzNjeDExKSkge1xuICAgICAgICBpZiAodzNjeDExW25dID09PSBoZXgpIHJldHVybiBuLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiBoZXg7XG59O1xuXG5pbnB1dC5mb3JtYXQubmFtZWQgPSAobmFtZSkgPT4ge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHczY3gxMVtuYW1lXSkgcmV0dXJuIGhleDJyZ2IodzNjeDExW25hbWVdKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY29sb3IgbmFtZTogJyArIG5hbWUpO1xufTtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiA1LFxuICAgIHRlc3Q6IChoLCAuLi5yZXN0KSA9PiB7XG4gICAgICAgIGlmICghcmVzdC5sZW5ndGggJiYgdHlwZShoKSA9PT0gJ3N0cmluZycgJiYgdzNjeDExW2gudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgIHJldHVybiAnbmFtZWQnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcblxuY29uc3QgbnVtMnJnYiA9IChudW0pID0+IHtcbiAgICBpZiAodHlwZShudW0pID09ICdudW1iZXInICYmIG51bSA+PSAwICYmIG51bSA8PSAweGZmZmZmZikge1xuICAgICAgICBjb25zdCByID0gbnVtID4+IDE2O1xuICAgICAgICBjb25zdCBnID0gKG51bSA+PiA4KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGIgPSBudW0gJiAweGZmO1xuICAgICAgICByZXR1cm4gW3IsIGcsIGIsIDFdO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gbnVtIGNvbG9yOiAnICsgbnVtKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG51bTJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCByZ2IybnVtID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIHJldHVybiAociA8PCAxNikgKyAoZyA8PCA4KSArIGI7XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IybnVtO1xuIiwgImltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBudW0ycmdiIGZyb20gJy4vbnVtMnJnYi5qcyc7XG5pbXBvcnQgcmdiMm51bSBmcm9tICcuL3JnYjJudW0uanMnO1xuXG5Db2xvci5wcm90b3R5cGUubnVtID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IybnVtKHRoaXMuX3JnYik7XG59O1xuXG5jaHJvbWEubnVtID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnbnVtJyk7XG5cbmlucHV0LmZvcm1hdC5udW0gPSBudW0ycmdiO1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDUsXG4gICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgYXJncy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgIHR5cGUoYXJnc1swXSkgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICBhcmdzWzBdID49IDAgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0gPD0gMHhmZmZmZmZcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gJ251bSc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbkNvbG9yLnByb3RvdHlwZS5yZ2IgPSBmdW5jdGlvbiAocm5kID0gdHJ1ZSkge1xuICAgIGlmIChybmQgPT09IGZhbHNlKSByZXR1cm4gdGhpcy5fcmdiLnNsaWNlKDAsIDMpO1xuICAgIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwgMykubWFwKHJvdW5kKTtcbn07XG5cbkNvbG9yLnByb3RvdHlwZS5yZ2JhID0gZnVuY3Rpb24gKHJuZCA9IHRydWUpIHtcbiAgICByZXR1cm4gdGhpcy5fcmdiLnNsaWNlKDAsIDQpLm1hcCgodiwgaSkgPT4ge1xuICAgICAgICByZXR1cm4gaSA8IDMgPyAocm5kID09PSBmYWxzZSA/IHYgOiByb3VuZCh2KSkgOiB2O1xuICAgIH0pO1xufTtcblxuY2hyb21hLnJnYiA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ3JnYicpO1xuXG5pbnB1dC5mb3JtYXQucmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCByZ2JhID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgaWYgKHJnYmFbM10gPT09IHVuZGVmaW5lZCkgcmdiYVszXSA9IDE7XG4gICAgcmV0dXJuIHJnYmE7XG59O1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDMsXG4gICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCAncmdiYScpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAoYXJncy5sZW5ndGggPT09IDMgfHxcbiAgICAgICAgICAgICAgICAoYXJncy5sZW5ndGggPT09IDQgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZShhcmdzWzNdKSA9PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgICAgICBhcmdzWzNdID49IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgYXJnc1szXSA8PSAxKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3JnYic7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICIvKlxuICogQmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgTmVpbCBCYXJ0bGV0dFxuICogaHR0cHM6Ly9naXRodWIuY29tL25laWxiYXJ0bGV0dC9jb2xvci10ZW1wZXJhdHVyZVxuICovXG5cbmNvbnN0IHsgbG9nIH0gPSBNYXRoO1xuXG5jb25zdCB0ZW1wZXJhdHVyZTJyZ2IgPSAoa2VsdmluKSA9PiB7XG4gICAgY29uc3QgdGVtcCA9IGtlbHZpbiAvIDEwMDtcbiAgICBsZXQgciwgZywgYjtcbiAgICBpZiAodGVtcCA8IDY2KSB7XG4gICAgICAgIHIgPSAyNTU7XG4gICAgICAgIGcgPVxuICAgICAgICAgICAgdGVtcCA8IDZcbiAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICA6IC0xNTUuMjU0ODU1NjI3MDkxNzkgLVxuICAgICAgICAgICAgICAgICAgMC40NDU5Njk1MDQ2OTU3OTEzMyAqIChnID0gdGVtcCAtIDIpICtcbiAgICAgICAgICAgICAgICAgIDEwNC40OTIxNjE5OTM5Mzg4OCAqIGxvZyhnKTtcbiAgICAgICAgYiA9XG4gICAgICAgICAgICB0ZW1wIDwgMjBcbiAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICA6IC0yNTQuNzY5MzUxODQxMjA5MDIgK1xuICAgICAgICAgICAgICAgICAgMC44Mjc0MDk2MDY0MDA3Mzk1ICogKGIgPSB0ZW1wIC0gMTApICtcbiAgICAgICAgICAgICAgICAgIDExNS42Nzk5NDQwMTA2NjE0NyAqIGxvZyhiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByID1cbiAgICAgICAgICAgIDM1MS45NzY5MDU2NjgwNTY5MyArXG4gICAgICAgICAgICAwLjExNDIwNjQ1Mzc4NDE2NSAqIChyID0gdGVtcCAtIDU1KSAtXG4gICAgICAgICAgICA0MC4yNTM2NjMwOTMzMjEyNyAqIGxvZyhyKTtcbiAgICAgICAgZyA9XG4gICAgICAgICAgICAzMjUuNDQ5NDEyNTcxMTk3NCArXG4gICAgICAgICAgICAwLjA3OTQzNDU2NTM2NjYyMzQyICogKGcgPSB0ZW1wIC0gNTApIC1cbiAgICAgICAgICAgIDI4LjA4NTI5NjM1MDc5NTcgKiBsb2coZyk7XG4gICAgICAgIGIgPSAyNTU7XG4gICAgfVxuICAgIHJldHVybiBbciwgZywgYiwgMV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0ZW1wZXJhdHVyZTJyZ2I7XG4iLCAiLypcbiAqIEJhc2VkIG9uIGltcGxlbWVudGF0aW9uIGJ5IE5laWwgQmFydGxldHRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWlsYmFydGxldHQvY29sb3ItdGVtcGVyYXR1cmVcbiAqKi9cblxuaW1wb3J0IHRlbXBlcmF0dXJlMnJnYiBmcm9tICcuL3RlbXBlcmF0dXJlMnJnYi5qcyc7XG5pbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHJvdW5kIH0gPSBNYXRoO1xuXG5jb25zdCByZ2IydGVtcGVyYXR1cmUgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IHJnYiA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgY29uc3QgciA9IHJnYlswXSxcbiAgICAgICAgYiA9IHJnYlsyXTtcbiAgICBsZXQgbWluVGVtcCA9IDEwMDA7XG4gICAgbGV0IG1heFRlbXAgPSA0MDAwMDtcbiAgICBjb25zdCBlcHMgPSAwLjQ7XG4gICAgbGV0IHRlbXA7XG4gICAgd2hpbGUgKG1heFRlbXAgLSBtaW5UZW1wID4gZXBzKSB7XG4gICAgICAgIHRlbXAgPSAobWF4VGVtcCArIG1pblRlbXApICogMC41O1xuICAgICAgICBjb25zdCByZ2IgPSB0ZW1wZXJhdHVyZTJyZ2IodGVtcCk7XG4gICAgICAgIGlmIChyZ2JbMl0gLyByZ2JbMF0gPj0gYiAvIHIpIHtcbiAgICAgICAgICAgIG1heFRlbXAgPSB0ZW1wO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWluVGVtcCA9IHRlbXA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvdW5kKHRlbXApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMnRlbXBlcmF0dXJlO1xuIiwgImltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IHRlbXBlcmF0dXJlMnJnYiBmcm9tICcuL3RlbXBlcmF0dXJlMnJnYi5qcyc7XG5pbXBvcnQgcmdiMnRlbXBlcmF0dXJlIGZyb20gJy4vcmdiMnRlbXBlcmF0dXJlLmpzJztcblxuQ29sb3IucHJvdG90eXBlLnRlbXAgPVxuICAgIENvbG9yLnByb3RvdHlwZS5rZWx2aW4gPVxuICAgIENvbG9yLnByb3RvdHlwZS50ZW1wZXJhdHVyZSA9XG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByZ2IydGVtcGVyYXR1cmUodGhpcy5fcmdiKTtcbiAgICAgICAgfTtcblxuY2hyb21hLnRlbXAgPVxuICAgIGNocm9tYS5rZWx2aW4gPVxuICAgIGNocm9tYS50ZW1wZXJhdHVyZSA9XG4gICAgICAgICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ3RlbXAnKTtcblxuaW5wdXQuZm9ybWF0LnRlbXAgPVxuICAgIGlucHV0LmZvcm1hdC5rZWx2aW4gPVxuICAgIGlucHV0LmZvcm1hdC50ZW1wZXJhdHVyZSA9XG4gICAgICAgIHRlbXBlcmF0dXJlMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHBvdywgc2lnbiB9ID0gTWF0aDtcblxuLypcbiAqIEwqIFswLi4xMDBdXG4gKiBhIFstMTAwLi4xMDBdXG4gKiBiIFstMTAwLi4xMDBdXG4gKi9cbmNvbnN0IG9rbGFiMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGFiJyk7XG4gICAgY29uc3QgW0wsIGEsIGJdID0gYXJncztcblxuICAgIGNvbnN0IGwgPSBwb3coTCArIDAuMzk2MzM3Nzc3NCAqIGEgKyAwLjIxNTgwMzc1NzMgKiBiLCAzKTtcbiAgICBjb25zdCBtID0gcG93KEwgLSAwLjEwNTU2MTM0NTggKiBhIC0gMC4wNjM4NTQxNzI4ICogYiwgMyk7XG4gICAgY29uc3QgcyA9IHBvdyhMIC0gMC4wODk0ODQxNzc1ICogYSAtIDEuMjkxNDg1NTQ4ICogYiwgMyk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgICAyNTUgKiBscmdiMnJnYigrNC4wNzY3NDE2NjIxICogbCAtIDMuMzA3NzExNTkxMyAqIG0gKyAwLjIzMDk2OTkyOTIgKiBzKSxcbiAgICAgICAgMjU1ICogbHJnYjJyZ2IoLTEuMjY4NDM4MDA0NiAqIGwgKyAyLjYwOTc1NzQwMTEgKiBtIC0gMC4zNDEzMTkzOTY1ICogcyksXG4gICAgICAgIDI1NSAqIGxyZ2IycmdiKC0wLjAwNDE5NjA4NjMgKiBsIC0gMC43MDM0MTg2MTQ3ICogbSArIDEuNzA3NjE0NzAxICogcyksXG4gICAgICAgIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXG4gICAgXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG9rbGFiMnJnYjtcblxuZnVuY3Rpb24gbHJnYjJyZ2IoYykge1xuICAgIGNvbnN0IGFicyA9IE1hdGguYWJzKGMpO1xuICAgIGlmIChhYnMgPiAwLjAwMzEzMDgpIHtcbiAgICAgICAgcmV0dXJuIChzaWduKGMpIHx8IDEpICogKDEuMDU1ICogcG93KGFicywgMSAvIDIuNCkgLSAwLjA1NSk7XG4gICAgfVxuICAgIHJldHVybiBjICogMTIuOTI7XG59XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBjYnJ0LCBwb3csIHNpZ24gfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJva2xhYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgLy8gT0tMYWIgY29sb3Igc3BhY2UgaW1wbGVtZW50YXRpb24gdGFrZW4gZnJvbVxuICAgIC8vIGh0dHBzOi8vYm90dG9zc29uLmdpdGh1Yi5pby9wb3N0cy9va2xhYi9cbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGNvbnN0IFtsciwgbGcsIGxiXSA9IFtcbiAgICAgICAgcmdiMmxyZ2IociAvIDI1NSksXG4gICAgICAgIHJnYjJscmdiKGcgLyAyNTUpLFxuICAgICAgICByZ2IybHJnYihiIC8gMjU1KVxuICAgIF07XG4gICAgY29uc3QgbCA9IGNicnQoMC40MTIyMjE0NzA4ICogbHIgKyAwLjUzNjMzMjUzNjMgKiBsZyArIDAuMDUxNDQ1OTkyOSAqIGxiKTtcbiAgICBjb25zdCBtID0gY2JydCgwLjIxMTkwMzQ5ODIgKiBsciArIDAuNjgwNjk5NTQ1MSAqIGxnICsgMC4xMDczOTY5NTY2ICogbGIpO1xuICAgIGNvbnN0IHMgPSBjYnJ0KDAuMDg4MzAyNDYxOSAqIGxyICsgMC4yODE3MTg4Mzc2ICogbGcgKyAwLjYyOTk3ODcwMDUgKiBsYik7XG5cbiAgICByZXR1cm4gW1xuICAgICAgICAwLjIxMDQ1NDI1NTMgKiBsICsgMC43OTM2MTc3ODUgKiBtIC0gMC4wMDQwNzIwNDY4ICogcyxcbiAgICAgICAgMS45Nzc5OTg0OTUxICogbCAtIDIuNDI4NTkyMjA1ICogbSArIDAuNDUwNTkzNzA5OSAqIHMsXG4gICAgICAgIDAuMDI1OTA0MDM3MSAqIGwgKyAwLjc4Mjc3MTc2NjIgKiBtIC0gMC44MDg2NzU3NjYgKiBzXG4gICAgXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJva2xhYjtcblxuZnVuY3Rpb24gcmdiMmxyZ2IoYykge1xuICAgIGNvbnN0IGFicyA9IE1hdGguYWJzKGMpO1xuICAgIGlmIChhYnMgPCAwLjA0MDQ1KSB7XG4gICAgICAgIHJldHVybiBjIC8gMTIuOTI7XG4gICAgfVxuICAgIHJldHVybiAoc2lnbihjKSB8fCAxKSAqIHBvdygoYWJzICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG59XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgb2tsYWIycmdiIGZyb20gJy4vb2tsYWIycmdiLmpzJztcbmltcG9ydCByZ2Iyb2tsYWIgZnJvbSAnLi9yZ2Iyb2tsYWIuanMnO1xuXG5Db2xvci5wcm90b3R5cGUub2tsYWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJva2xhYih0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLm9rbGFiID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAnb2tsYWInKTtcblxuaW5wdXQuZm9ybWF0Lm9rbGFiID0gb2tsYWIycmdiO1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDMsXG4gICAgdGVzdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCAnb2tsYWInKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnb2tsYWInO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGxjaDJsYWIgZnJvbSAnLi4vbGNoL2xjaDJsYWIuanMnO1xuaW1wb3J0IG9rbGFiMnJnYiBmcm9tICcuLi9va2xhYi9va2xhYjJyZ2IuanMnO1xuXG5jb25zdCBva2xjaDJyZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2xjaCcpO1xuICAgIGNvbnN0IFtsLCBjLCBoXSA9IGFyZ3M7XG4gICAgY29uc3QgW0wsIGEsIGJfXSA9IGxjaDJsYWIobCwgYywgaCk7XG4gICAgY29uc3QgW3IsIGcsIGJdID0gb2tsYWIycmdiKEwsIGEsIGJfKTtcbiAgICByZXR1cm4gW3IsIGcsIGIsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG9rbGNoMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgcmdiMm9rbGFiIGZyb20gJy4uL29rbGFiL3JnYjJva2xhYi5qcyc7XG5pbXBvcnQgbGFiMmxjaCBmcm9tICcuLi9sY2gvbGFiMmxjaC5qcyc7XG5cbmNvbnN0IHJnYjJva2xjaCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBjb25zdCBbbCwgYSwgYl9dID0gcmdiMm9rbGFiKHIsIGcsIGIpO1xuICAgIHJldHVybiBsYWIybGNoKGwsIGEsIGJfKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJva2xjaDtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCBva2xjaDJyZ2IgZnJvbSAnLi9va2xjaDJyZ2IuanMnO1xuaW1wb3J0IHJnYjJva2xjaCBmcm9tICcuL3JnYjJva2xjaC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5va2xjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMm9rbGNoKHRoaXMuX3JnYik7XG59O1xuXG5jaHJvbWEub2tsY2ggPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdva2xjaCcpO1xuXG5pbnB1dC5mb3JtYXQub2tsY2ggPSBva2xjaDJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMyxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdva2xjaCcpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdva2xjaCc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcblxuQ29sb3IucHJvdG90eXBlLmFscGhhID0gZnVuY3Rpb24gKGEsIG11dGF0ZSA9IGZhbHNlKSB7XG4gICAgaWYgKGEgIT09IHVuZGVmaW5lZCAmJiB0eXBlKGEpID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9yZ2JbM10gPSBhO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbdGhpcy5fcmdiWzBdLCB0aGlzLl9yZ2JbMV0sIHRoaXMuX3JnYlsyXSwgYV0sICdyZ2InKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JnYlszXTtcbn07XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmNsaXBwZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JnYi5fY2xpcHBlZCB8fCBmYWxzZTtcbn07XG4iLCAiaW1wb3J0ICcuLi9pby9sYWIvaW5kZXguanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCBMQUJfQ09OU1RBTlRTIGZyb20gJy4uL2lvL2xhYi9sYWItY29uc3RhbnRzLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmRhcmtlbiA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIGNvbnN0IGxhYiA9IG1lLmxhYigpO1xuICAgIGxhYlswXSAtPSBMQUJfQ09OU1RBTlRTLktuICogYW1vdW50O1xuICAgIHJldHVybiBuZXcgQ29sb3IobGFiLCAnbGFiJykuYWxwaGEobWUuYWxwaGEoKSwgdHJ1ZSk7XG59O1xuXG5Db2xvci5wcm90b3R5cGUuYnJpZ2h0ZW4gPSBmdW5jdGlvbiAoYW1vdW50ID0gMSkge1xuICAgIHJldHVybiB0aGlzLmRhcmtlbigtYW1vdW50KTtcbn07XG5cbkNvbG9yLnByb3RvdHlwZS5kYXJrZXIgPSBDb2xvci5wcm90b3R5cGUuZGFya2VuO1xuQ29sb3IucHJvdG90eXBlLmJyaWdodGVyID0gQ29sb3IucHJvdG90eXBlLmJyaWdodGVuO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobWMpIHtcbiAgICBjb25zdCBbbW9kZSwgY2hhbm5lbF0gPSBtYy5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHNyYyA9IHRoaXNbbW9kZV0oKTtcbiAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgICBjb25zdCBpID0gbW9kZS5pbmRleE9mKGNoYW5uZWwpIC0gKG1vZGUuc3Vic3RyKDAsIDIpID09PSAnb2snID8gMiA6IDApO1xuICAgICAgICBpZiAoaSA+IC0xKSByZXR1cm4gc3JjW2ldO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gY2hhbm5lbCAke2NoYW5uZWx9IGluIG1vZGUgJHttb2RlfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzcmM7XG4gICAgfVxufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcG93IH0gPSBNYXRoO1xuXG5jb25zdCBFUFMgPSAxZS03O1xuY29uc3QgTUFYX0lURVIgPSAyMDtcblxuQ29sb3IucHJvdG90eXBlLmx1bWluYW5jZSA9IGZ1bmN0aW9uIChsdW0sIG1vZGUgPSAncmdiJykge1xuICAgIGlmIChsdW0gIT09IHVuZGVmaW5lZCAmJiB0eXBlKGx1bSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChsdW0gPT09IDApIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBwdXJlIGJsYWNrXG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKFswLCAwLCAwLCB0aGlzLl9yZ2JbM11dLCAncmdiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGx1bSA9PT0gMSkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIHB1cmUgd2hpdGVcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoWzI1NSwgMjU1LCAyNTUsIHRoaXMuX3JnYlszXV0sICdyZ2InKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb21wdXRlIG5ldyBjb2xvciB1c2luZy4uLlxuICAgICAgICBsZXQgY3VyX2x1bSA9IHRoaXMubHVtaW5hbmNlKCk7XG4gICAgICAgIGxldCBtYXhfaXRlciA9IE1BWF9JVEVSO1xuXG4gICAgICAgIGNvbnN0IHRlc3QgPSAobG93LCBoaWdoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtaWQgPSBsb3cuaW50ZXJwb2xhdGUoaGlnaCwgMC41LCBtb2RlKTtcbiAgICAgICAgICAgIGNvbnN0IGxtID0gbWlkLmx1bWluYW5jZSgpO1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGx1bSAtIGxtKSA8IEVQUyB8fCAhbWF4X2l0ZXItLSkge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIGVub3VnaFxuICAgICAgICAgICAgICAgIHJldHVybiBtaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbG0gPiBsdW0gPyB0ZXN0KGxvdywgbWlkKSA6IHRlc3QobWlkLCBoaWdoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZ2IgPSAoXG4gICAgICAgICAgICBjdXJfbHVtID4gbHVtXG4gICAgICAgICAgICAgICAgPyB0ZXN0KG5ldyBDb2xvcihbMCwgMCwgMF0pLCB0aGlzKVxuICAgICAgICAgICAgICAgIDogdGVzdCh0aGlzLCBuZXcgQ29sb3IoWzI1NSwgMjU1LCAyNTVdKSlcbiAgICAgICAgKS5yZ2IoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbLi4ucmdiLCB0aGlzLl9yZ2JbM11dKTtcbiAgICB9XG4gICAgcmV0dXJuIHJnYjJsdW1pbmFuY2UoLi4udGhpcy5fcmdiLnNsaWNlKDAsIDMpKTtcbn07XG5cbmNvbnN0IHJnYjJsdW1pbmFuY2UgPSAociwgZywgYikgPT4ge1xuICAgIC8vIHJlbGF0aXZlIGx1bWluYW5jZVxuICAgIC8vIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4gICAgciA9IGx1bWluYW5jZV94KHIpO1xuICAgIGcgPSBsdW1pbmFuY2VfeChnKTtcbiAgICBiID0gbHVtaW5hbmNlX3goYik7XG4gICAgcmV0dXJuIDAuMjEyNiAqIHIgKyAwLjcxNTIgKiBnICsgMC4wNzIyICogYjtcbn07XG5cbmNvbnN0IGx1bWluYW5jZV94ID0gKHgpID0+IHtcbiAgICB4IC89IDI1NTtcbiAgICByZXR1cm4geCA8PSAwLjAzOTI4ID8geCAvIDEyLjkyIDogcG93KCh4ICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG59O1xuIiwgImV4cG9ydCBkZWZhdWx0IHt9O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGludGVycG9sYXRvciBmcm9tICcuLi9pbnRlcnBvbGF0b3IvaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoY29sMSwgY29sMiwgZiA9IDAuNSwgLi4ucmVzdCkgPT4ge1xuICAgIGxldCBtb2RlID0gcmVzdFswXSB8fCAnbHJnYic7XG4gICAgaWYgKCFpbnRlcnBvbGF0b3JbbW9kZV0gJiYgIXJlc3QubGVuZ3RoKSB7XG4gICAgICAgIC8vIGZhbGwgYmFjayB0byB0aGUgZmlyc3Qgc3VwcG9ydGVkIG1vZGVcbiAgICAgICAgbW9kZSA9IE9iamVjdC5rZXlzKGludGVycG9sYXRvcilbMF07XG4gICAgfVxuICAgIGlmICghaW50ZXJwb2xhdG9yW21vZGVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW50ZXJwb2xhdGlvbiBtb2RlICR7bW9kZX0gaXMgbm90IGRlZmluZWRgKTtcbiAgICB9XG4gICAgaWYgKHR5cGUoY29sMSkgIT09ICdvYmplY3QnKSBjb2wxID0gbmV3IENvbG9yKGNvbDEpO1xuICAgIGlmICh0eXBlKGNvbDIpICE9PSAnb2JqZWN0JykgY29sMiA9IG5ldyBDb2xvcihjb2wyKTtcbiAgICByZXR1cm4gaW50ZXJwb2xhdG9yW21vZGVdKGNvbDEsIGNvbDIsIGYpLmFscGhhKFxuICAgICAgICBjb2wxLmFscGhhKCkgKyBmICogKGNvbDIuYWxwaGEoKSAtIGNvbDEuYWxwaGEoKSlcbiAgICApO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IG1peCBmcm9tICcuLi9nZW5lcmF0b3IvbWl4LmpzJztcblxuQ29sb3IucHJvdG90eXBlLm1peCA9IENvbG9yLnByb3RvdHlwZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uIChcbiAgICBjb2wyLFxuICAgIGYgPSAwLjUsXG4gICAgLi4ucmVzdFxuKSB7XG4gICAgcmV0dXJuIG1peCh0aGlzLCBjb2wyLCBmLCAuLi5yZXN0KTtcbn07XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuQ29sb3IucHJvdG90eXBlLnByZW11bHRpcGx5ID0gZnVuY3Rpb24gKG11dGF0ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgcmdiID0gdGhpcy5fcmdiO1xuICAgIGNvbnN0IGEgPSByZ2JbM107XG4gICAgaWYgKG11dGF0ZSkge1xuICAgICAgICB0aGlzLl9yZ2IgPSBbcmdiWzBdICogYSwgcmdiWzFdICogYSwgcmdiWzJdICogYSwgYV07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IoW3JnYlswXSAqIGEsIHJnYlsxXSAqIGEsIHJnYlsyXSAqIGEsIGFdLCAncmdiJyk7XG4gICAgfVxufTtcbiIsICJpbXBvcnQgJy4uL2lvL2xjaC9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IExBQl9DT05TVEFOVFMgZnJvbSAnLi4vaW8vbGFiL2xhYi1jb25zdGFudHMuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50ID0gMSkge1xuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjb25zdCBsY2ggPSBtZS5sY2goKTtcbiAgICBsY2hbMV0gKz0gTEFCX0NPTlNUQU5UUy5LbiAqIGFtb3VudDtcbiAgICBpZiAobGNoWzFdIDwgMCkgbGNoWzFdID0gMDtcbiAgICByZXR1cm4gbmV3IENvbG9yKGxjaCwgJ2xjaCcpLmFscGhhKG1lLmFscGhhKCksIHRydWUpO1xufTtcblxuQ29sb3IucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50ID0gMSkge1xuICAgIHJldHVybiB0aGlzLnNhdHVyYXRlKC1hbW91bnQpO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcblxuQ29sb3IucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChtYywgdmFsdWUsIG11dGF0ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgW21vZGUsIGNoYW5uZWxdID0gbWMuc3BsaXQoJy4nKTtcbiAgICBjb25zdCBzcmMgPSB0aGlzW21vZGVdKCk7XG4gICAgaWYgKGNoYW5uZWwpIHtcbiAgICAgICAgY29uc3QgaSA9IG1vZGUuaW5kZXhPZihjaGFubmVsKSAtIChtb2RlLnN1YnN0cigwLCAyKSA9PT0gJ29rJyA/IDIgOiAwKTtcbiAgICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICAgICAgaWYgKHR5cGUodmFsdWUpID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5jaGFyQXQoMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gKz0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldICs9ICt2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcqJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSAqPSArdmFsdWUuc3Vic3RyKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJy8nOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldIC89ICt2YWx1ZS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSA9ICt2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUodmFsdWUpID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHNyY1tpXSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIHZhbHVlIGZvciBDb2xvci5zZXRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG91dCA9IG5ldyBDb2xvcihzcmMsIG1vZGUpO1xuICAgICAgICAgICAgaWYgKG11dGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JnYiA9IG91dC5fcmdiO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gY2hhbm5lbCAke2NoYW5uZWx9IGluIG1vZGUgJHttb2RlfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzcmM7XG4gICAgfVxufTtcbiIsICJpbXBvcnQgJy4uL2lvL2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IG1peCBmcm9tICcuLi9nZW5lcmF0b3IvbWl4LmpzJztcblxuQ29sb3IucHJvdG90eXBlLnRpbnQgPSBmdW5jdGlvbiAoZiA9IDAuNSwgLi4ucmVzdCkge1xuICAgIHJldHVybiBtaXgodGhpcywgJ3doaXRlJywgZiwgLi4ucmVzdCk7XG59O1xuXG5Db2xvci5wcm90b3R5cGUuc2hhZGUgPSBmdW5jdGlvbiAoZiA9IDAuNSwgLi4ucmVzdCkge1xuICAgIHJldHVybiBtaXgodGhpcywgJ2JsYWNrJywgZiwgLi4ucmVzdCk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IHJnYiA9IChjb2wxLCBjb2wyLCBmKSA9PiB7XG4gICAgY29uc3QgeHl6MCA9IGNvbDEuX3JnYjtcbiAgICBjb25zdCB4eXoxID0gY29sMi5fcmdiO1xuICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0gLSB4eXowWzBdKSxcbiAgICAgICAgeHl6MFsxXSArIGYgKiAoeHl6MVsxXSAtIHh5ejBbMV0pLFxuICAgICAgICB4eXowWzJdICsgZiAqICh4eXoxWzJdIC0geHl6MFsyXSksXG4gICAgICAgICdyZ2InXG4gICAgKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgucmdiID0gcmdiO1xuXG5leHBvcnQgZGVmYXVsdCByZ2I7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmNvbnN0IHsgc3FydCwgcG93IH0gPSBNYXRoO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5jb25zdCBscmdiID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCBbeDEsIHkxLCB6MV0gPSBjb2wxLl9yZ2I7XG4gICAgY29uc3QgW3gyLCB5MiwgejJdID0gY29sMi5fcmdiO1xuICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgIHNxcnQocG93KHgxLCAyKSAqICgxIC0gZikgKyBwb3coeDIsIDIpICogZiksXG4gICAgICAgIHNxcnQocG93KHkxLCAyKSAqICgxIC0gZikgKyBwb3coeTIsIDIpICogZiksXG4gICAgICAgIHNxcnQocG93KHoxLCAyKSAqICgxIC0gZikgKyBwb3coejIsIDIpICogZiksXG4gICAgICAgICdyZ2InXG4gICAgKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubHJnYiA9IGxyZ2I7XG5cbmV4cG9ydCBkZWZhdWx0IGxyZ2I7XG4iLCAiaW1wb3J0ICcuLi9pby9sYWIvaW5kZXguanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuY29uc3QgbGFiID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCB4eXowID0gY29sMS5sYWIoKTtcbiAgICBjb25zdCB4eXoxID0gY29sMi5sYWIoKTtcbiAgICByZXR1cm4gbmV3IENvbG9yKFxuICAgICAgICB4eXowWzBdICsgZiAqICh4eXoxWzBdIC0geHl6MFswXSksXG4gICAgICAgIHh5ejBbMV0gKyBmICogKHh5ejFbMV0gLSB4eXowWzFdKSxcbiAgICAgICAgeHl6MFsyXSArIGYgKiAoeHl6MVsyXSAtIHh5ejBbMl0pLFxuICAgICAgICAnbGFiJ1xuICAgICk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4LmxhYiA9IGxhYjtcblxuZXhwb3J0IGRlZmF1bHQgbGFiO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChjb2wxLCBjb2wyLCBmLCBtKSA9PiB7XG4gICAgbGV0IHh5ejAsIHh5ejE7XG4gICAgaWYgKG0gPT09ICdoc2wnKSB7XG4gICAgICAgIHh5ejAgPSBjb2wxLmhzbCgpO1xuICAgICAgICB4eXoxID0gY29sMi5oc2woKTtcbiAgICB9IGVsc2UgaWYgKG0gPT09ICdoc3YnKSB7XG4gICAgICAgIHh5ejAgPSBjb2wxLmhzdigpO1xuICAgICAgICB4eXoxID0gY29sMi5oc3YoKTtcbiAgICB9IGVsc2UgaWYgKG0gPT09ICdoY2cnKSB7XG4gICAgICAgIHh5ejAgPSBjb2wxLmhjZygpO1xuICAgICAgICB4eXoxID0gY29sMi5oY2coKTtcbiAgICB9IGVsc2UgaWYgKG0gPT09ICdoc2knKSB7XG4gICAgICAgIHh5ejAgPSBjb2wxLmhzaSgpO1xuICAgICAgICB4eXoxID0gY29sMi5oc2koKTtcbiAgICB9IGVsc2UgaWYgKG0gPT09ICdsY2gnIHx8IG0gPT09ICdoY2wnKSB7XG4gICAgICAgIG0gPSAnaGNsJztcbiAgICAgICAgeHl6MCA9IGNvbDEuaGNsKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhjbCgpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ29rbGNoJykge1xuICAgICAgICB4eXowID0gY29sMS5va2xjaCgpLnJldmVyc2UoKTtcbiAgICAgICAgeHl6MSA9IGNvbDIub2tsY2goKS5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgbGV0IGh1ZTAsIGh1ZTEsIHNhdDAsIHNhdDEsIGxidjAsIGxidjE7XG4gICAgaWYgKG0uc3Vic3RyKDAsIDEpID09PSAnaCcgfHwgbSA9PT0gJ29rbGNoJykge1xuICAgICAgICBbaHVlMCwgc2F0MCwgbGJ2MF0gPSB4eXowO1xuICAgICAgICBbaHVlMSwgc2F0MSwgbGJ2MV0gPSB4eXoxO1xuICAgIH1cblxuICAgIGxldCBzYXQsIGh1ZSwgbGJ2LCBkaDtcblxuICAgIGlmICghaXNOYU4oaHVlMCkgJiYgIWlzTmFOKGh1ZTEpKSB7XG4gICAgICAgIC8vIGJvdGggY29sb3JzIGhhdmUgaHVlXG4gICAgICAgIGlmIChodWUxID4gaHVlMCAmJiBodWUxIC0gaHVlMCA+IDE4MCkge1xuICAgICAgICAgICAgZGggPSBodWUxIC0gKGh1ZTAgKyAzNjApO1xuICAgICAgICB9IGVsc2UgaWYgKGh1ZTEgPCBodWUwICYmIGh1ZTAgLSBodWUxID4gMTgwKSB7XG4gICAgICAgICAgICBkaCA9IGh1ZTEgKyAzNjAgLSBodWUwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGggPSBodWUxIC0gaHVlMDtcbiAgICAgICAgfVxuICAgICAgICBodWUgPSBodWUwICsgZiAqIGRoO1xuICAgIH0gZWxzZSBpZiAoIWlzTmFOKGh1ZTApKSB7XG4gICAgICAgIGh1ZSA9IGh1ZTA7XG4gICAgICAgIGlmICgobGJ2MSA9PSAxIHx8IGxidjEgPT0gMCkgJiYgbSAhPSAnaHN2Jykgc2F0ID0gc2F0MDtcbiAgICB9IGVsc2UgaWYgKCFpc05hTihodWUxKSkge1xuICAgICAgICBodWUgPSBodWUxO1xuICAgICAgICBpZiAoKGxidjAgPT0gMSB8fCBsYnYwID09IDApICYmIG0gIT0gJ2hzdicpIHNhdCA9IHNhdDE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaHVlID0gTnVtYmVyLk5hTjtcbiAgICB9XG5cbiAgICBpZiAoc2F0ID09PSB1bmRlZmluZWQpIHNhdCA9IHNhdDAgKyBmICogKHNhdDEgLSBzYXQwKTtcbiAgICBsYnYgPSBsYnYwICsgZiAqIChsYnYxIC0gbGJ2MCk7XG4gICAgcmV0dXJuIG0gPT09ICdva2xjaCdcbiAgICAgICAgPyBuZXcgQ29sb3IoW2xidiwgc2F0LCBodWVdLCBtKVxuICAgICAgICA6IG5ldyBDb2xvcihbaHVlLCBzYXQsIGxidl0sIG0pO1xufTtcbiIsICJpbXBvcnQgJy4uL2lvL2xjaC9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdGVfaHN4IGZyb20gJy4vX2hzeC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IGxjaCA9IChjb2wxLCBjb2wyLCBmKSA9PiB7XG4gICAgcmV0dXJuIGludGVycG9sYXRlX2hzeChjb2wxLCBjb2wyLCBmLCAnbGNoJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4LmxjaCA9IGxjaDtcbmluZGV4LmhjbCA9IGxjaDtcblxuZXhwb3J0IGRlZmF1bHQgbGNoO1xuIiwgImltcG9ydCAnLi4vaW8vbnVtL2luZGV4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuY29uc3QgbnVtID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCBjMSA9IGNvbDEubnVtKCk7XG4gICAgY29uc3QgYzIgPSBjb2wyLm51bSgpO1xuICAgIHJldHVybiBuZXcgQ29sb3IoYzEgKyBmICogKGMyIC0gYzEpLCAnbnVtJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4Lm51bSA9IG51bTtcblxuZXhwb3J0IGRlZmF1bHQgbnVtO1xuIiwgImltcG9ydCAnLi4vaW8vaGNnL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgaGNnID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdoY2cnKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXguaGNnID0gaGNnO1xuXG5leHBvcnQgZGVmYXVsdCBoY2c7XG4iLCAiaW1wb3J0ICcuLi9pby9oc2kvaW5kZXguanMnO1xuaW1wb3J0IGludGVycG9sYXRlX2hzeCBmcm9tICcuL19oc3guanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5jb25zdCBoc2kgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ2hzaScpO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5oc2kgPSBoc2k7XG5cbmV4cG9ydCBkZWZhdWx0IGhzaTtcbiIsICJpbXBvcnQgJy4uL2lvL2hzbC9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdGVfaHN4IGZyb20gJy4vX2hzeC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IGhzbCA9IChjb2wxLCBjb2wyLCBmKSA9PiB7XG4gICAgcmV0dXJuIGludGVycG9sYXRlX2hzeChjb2wxLCBjb2wyLCBmLCAnaHNsJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4LmhzbCA9IGhzbDtcblxuZXhwb3J0IGRlZmF1bHQgaHNsO1xuIiwgImltcG9ydCAnLi4vaW8vaHN2L2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgaHN2ID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdoc3YnKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXguaHN2ID0gaHN2O1xuXG5leHBvcnQgZGVmYXVsdCBoc3Y7XG4iLCAiaW1wb3J0ICcuLi9pby9va2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5jb25zdCBva2xhYiA9IChjb2wxLCBjb2wyLCBmKSA9PiB7XG4gICAgY29uc3QgeHl6MCA9IGNvbDEub2tsYWIoKTtcbiAgICBjb25zdCB4eXoxID0gY29sMi5va2xhYigpO1xuICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0gLSB4eXowWzBdKSxcbiAgICAgICAgeHl6MFsxXSArIGYgKiAoeHl6MVsxXSAtIHh5ejBbMV0pLFxuICAgICAgICB4eXowWzJdICsgZiAqICh4eXoxWzJdIC0geHl6MFsyXSksXG4gICAgICAgICdva2xhYidcbiAgICApO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5va2xhYiA9IG9rbGFiO1xuXG5leHBvcnQgZGVmYXVsdCBva2xhYjtcbiIsICJpbXBvcnQgJy4uL2lvL2xjaC9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdGVfaHN4IGZyb20gJy4vX2hzeC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IG9rbGNoID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdva2xjaCcpO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5va2xjaCA9IG9rbGNoO1xuXG5leHBvcnQgZGVmYXVsdCBva2xjaDtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IHsgY2xpcF9yZ2IgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5cbmNvbnN0IHsgcG93LCBzcXJ0LCBQSSwgY29zLCBzaW4sIGF0YW4yIH0gPSBNYXRoO1xuXG5leHBvcnQgZGVmYXVsdCAoY29sb3JzLCBtb2RlID0gJ2xyZ2InLCB3ZWlnaHRzID0gbnVsbCkgPT4ge1xuICAgIGNvbnN0IGwgPSBjb2xvcnMubGVuZ3RoO1xuICAgIGlmICghd2VpZ2h0cykgd2VpZ2h0cyA9IEFycmF5LmZyb20obmV3IEFycmF5KGwpKS5tYXAoKCkgPT4gMSk7XG4gICAgLy8gbm9ybWFsaXplIHdlaWdodHNcbiAgICBjb25zdCBrID1cbiAgICAgICAgbCAvXG4gICAgICAgIHdlaWdodHMucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYSArIGI7XG4gICAgICAgIH0pO1xuICAgIHdlaWdodHMuZm9yRWFjaCgodywgaSkgPT4ge1xuICAgICAgICB3ZWlnaHRzW2ldICo9IGs7XG4gICAgfSk7XG4gICAgLy8gY29udmVydCBjb2xvcnMgdG8gQ29sb3Igb2JqZWN0c1xuICAgIGNvbG9ycyA9IGNvbG9ycy5tYXAoKGMpID0+IG5ldyBDb2xvcihjKSk7XG4gICAgaWYgKG1vZGUgPT09ICdscmdiJykge1xuICAgICAgICByZXR1cm4gX2F2ZXJhZ2VfbHJnYihjb2xvcnMsIHdlaWdodHMpO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdCA9IGNvbG9ycy5zaGlmdCgpO1xuICAgIGNvbnN0IHh5eiA9IGZpcnN0LmdldChtb2RlKTtcbiAgICBjb25zdCBjbnQgPSBbXTtcbiAgICBsZXQgZHggPSAwO1xuICAgIGxldCBkeSA9IDA7XG4gICAgLy8gaW5pdGlhbCBjb2xvclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeHl6Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHh5eltpXSA9ICh4eXpbaV0gfHwgMCkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICBjbnQucHVzaChpc05hTih4eXpbaV0pID8gMCA6IHdlaWdodHNbMF0pO1xuICAgICAgICBpZiAobW9kZS5jaGFyQXQoaSkgPT09ICdoJyAmJiAhaXNOYU4oeHl6W2ldKSkge1xuICAgICAgICAgICAgY29uc3QgQSA9ICh4eXpbaV0gLyAxODApICogUEk7XG4gICAgICAgICAgICBkeCArPSBjb3MoQSkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICAgICAgZHkgKz0gc2luKEEpICogd2VpZ2h0c1swXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCBhbHBoYSA9IGZpcnN0LmFscGhhKCkgKiB3ZWlnaHRzWzBdO1xuICAgIGNvbG9ycy5mb3JFYWNoKChjLCBjaSkgPT4ge1xuICAgICAgICBjb25zdCB4eXoyID0gYy5nZXQobW9kZSk7XG4gICAgICAgIGFscGhhICs9IGMuYWxwaGEoKSAqIHdlaWdodHNbY2kgKyAxXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4eXoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghaXNOYU4oeHl6MltpXSkpIHtcbiAgICAgICAgICAgICAgICBjbnRbaV0gKz0gd2VpZ2h0c1tjaSArIDFdO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IEEgPSAoeHl6MltpXSAvIDE4MCkgKiBQSTtcbiAgICAgICAgICAgICAgICAgICAgZHggKz0gY29zKEEpICogd2VpZ2h0c1tjaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICBkeSArPSBzaW4oQSkgKiB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgeHl6W2ldICs9IHh5ejJbaV0gKiB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHh5ei5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobW9kZS5jaGFyQXQoaSkgPT09ICdoJykge1xuICAgICAgICAgICAgbGV0IEEgPSAoYXRhbjIoZHkgLyBjbnRbaV0sIGR4IC8gY250W2ldKSAvIFBJKSAqIDE4MDtcbiAgICAgICAgICAgIHdoaWxlIChBIDwgMCkgQSArPSAzNjA7XG4gICAgICAgICAgICB3aGlsZSAoQSA+PSAzNjApIEEgLT0gMzYwO1xuICAgICAgICAgICAgeHl6W2ldID0gQTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHh5eltpXSA9IHh5eltpXSAvIGNudFtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhbHBoYSAvPSBsO1xuICAgIHJldHVybiBuZXcgQ29sb3IoeHl6LCBtb2RlKS5hbHBoYShhbHBoYSA+IDAuOTk5OTkgPyAxIDogYWxwaGEsIHRydWUpO1xufTtcblxuY29uc3QgX2F2ZXJhZ2VfbHJnYiA9IChjb2xvcnMsIHdlaWdodHMpID0+IHtcbiAgICBjb25zdCBsID0gY29sb3JzLmxlbmd0aDtcbiAgICBjb25zdCB4eXogPSBbMCwgMCwgMCwgMF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29sID0gY29sb3JzW2ldO1xuICAgICAgICBjb25zdCBmID0gd2VpZ2h0c1tpXSAvIGw7XG4gICAgICAgIGNvbnN0IHJnYiA9IGNvbC5fcmdiO1xuICAgICAgICB4eXpbMF0gKz0gcG93KHJnYlswXSwgMikgKiBmO1xuICAgICAgICB4eXpbMV0gKz0gcG93KHJnYlsxXSwgMikgKiBmO1xuICAgICAgICB4eXpbMl0gKz0gcG93KHJnYlsyXSwgMikgKiBmO1xuICAgICAgICB4eXpbM10gKz0gcmdiWzNdICogZjtcbiAgICB9XG4gICAgeHl6WzBdID0gc3FydCh4eXpbMF0pO1xuICAgIHh5elsxXSA9IHNxcnQoeHl6WzFdKTtcbiAgICB4eXpbMl0gPSBzcXJ0KHh5elsyXSk7XG4gICAgaWYgKHh5elszXSA+IDAuOTk5OTk5OSkgeHl6WzNdID0gMTtcbiAgICByZXR1cm4gbmV3IENvbG9yKGNsaXBfcmdiKHh5eikpO1xufTtcbiIsICIvLyBtaW5pbWFsIG11bHRpLXB1cnBvc2UgaW50ZXJmYWNlXG5cbi8vIEByZXF1aXJlcyB1dGlscyBjb2xvciBhbmFseXplXG5pbXBvcnQgY2hyb21hIGZyb20gJy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgeyBsaW1pdCwgdHlwZSB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcblxuY29uc3QgeyBwb3cgfSA9IE1hdGg7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChjb2xvcnMpIHtcbiAgICAvLyBjb25zdHJ1Y3RvclxuICAgIGxldCBfbW9kZSA9ICdyZ2InO1xuICAgIGxldCBfbmFjb2wgPSBjaHJvbWEoJyNjY2MnKTtcbiAgICBsZXQgX3NwcmVhZCA9IDA7XG4gICAgLy8gY29uc3QgX2ZpeGVkID0gZmFsc2U7XG4gICAgbGV0IF9kb21haW4gPSBbMCwgMV07XG4gICAgbGV0IF9wb3MgPSBbXTtcbiAgICBsZXQgX3BhZGRpbmcgPSBbMCwgMF07XG4gICAgbGV0IF9jbGFzc2VzID0gZmFsc2U7XG4gICAgbGV0IF9jb2xvcnMgPSBbXTtcbiAgICBsZXQgX291dCA9IGZhbHNlO1xuICAgIGxldCBfbWluID0gMDtcbiAgICBsZXQgX21heCA9IDE7XG4gICAgbGV0IF9jb3JyZWN0TGlnaHRuZXNzID0gZmFsc2U7XG4gICAgbGV0IF9jb2xvckNhY2hlID0ge307XG4gICAgbGV0IF91c2VDYWNoZSA9IHRydWU7XG4gICAgbGV0IF9nYW1tYSA9IDE7XG5cbiAgICAvLyBwcml2YXRlIG1ldGhvZHNcblxuICAgIGNvbnN0IHNldENvbG9ycyA9IGZ1bmN0aW9uIChjb2xvcnMpIHtcbiAgICAgICAgY29sb3JzID0gY29sb3JzIHx8IFsnI2ZmZicsICcjMDAwJ107XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbG9ycyAmJlxuICAgICAgICAgICAgdHlwZShjb2xvcnMpID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgY2hyb21hLmJyZXdlciAmJlxuICAgICAgICAgICAgY2hyb21hLmJyZXdlcltjb2xvcnMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb2xvcnMgPSBjaHJvbWEuYnJld2VyW2NvbG9ycy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZShjb2xvcnMpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgc2luZ2xlIGNvbG9yXG4gICAgICAgICAgICBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGNvbG9ycyA9IFtjb2xvcnNbMF0sIGNvbG9yc1swXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBtYWtlIGEgY29weSBvZiB0aGUgY29sb3JzXG4gICAgICAgICAgICBjb2xvcnMgPSBjb2xvcnMuc2xpY2UoMCk7XG4gICAgICAgICAgICAvLyBjb252ZXJ0IHRvIGNocm9tYSBjbGFzc2VzXG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNvbG9ycy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgICAgIGNvbG9yc1tjXSA9IGNocm9tYShjb2xvcnNbY10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXV0by1maWxsIGNvbG9yIHBvc2l0aW9uXG4gICAgICAgICAgICBfcG9zLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNvbG9ycy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgICAgIF9wb3MucHVzaChjIC8gKGNvbG9ycy5sZW5ndGggLSAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgICByZXR1cm4gKF9jb2xvcnMgPSBjb2xvcnMpO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRDbGFzcyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAoX2NsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgbiA9IF9jbGFzc2VzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICB3aGlsZSAoaSA8IG4gJiYgdmFsdWUgPj0gX2NsYXNzZXNbaV0pIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaSAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfTtcblxuICAgIGxldCB0TWFwTGlnaHRuZXNzID0gKHQpID0+IHQ7XG4gICAgbGV0IHRNYXBEb21haW4gPSAodCkgPT4gdDtcblxuICAgIC8vIGNvbnN0IGNsYXNzaWZ5VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIC8vICAgICBsZXQgdmFsID0gdmFsdWU7XG4gICAgLy8gICAgIGlmIChfY2xhc3Nlcy5sZW5ndGggPiAyKSB7XG4gICAgLy8gICAgICAgICBjb25zdCBuID0gX2NsYXNzZXMubGVuZ3RoLTE7XG4gICAgLy8gICAgICAgICBjb25zdCBpID0gZ2V0Q2xhc3ModmFsdWUpO1xuICAgIC8vICAgICAgICAgY29uc3QgbWluYyA9IF9jbGFzc2VzWzBdICsgKChfY2xhc3Nlc1sxXS1fY2xhc3Nlc1swXSkgKiAoMCArIChfc3ByZWFkICogMC41KSkpOyAgLy8gY2VudGVyIG9mIDFzdCBjbGFzc1xuICAgIC8vICAgICAgICAgY29uc3QgbWF4YyA9IF9jbGFzc2VzW24tMV0gKyAoKF9jbGFzc2VzW25dLV9jbGFzc2VzW24tMV0pICogKDEgLSAoX3NwcmVhZCAqIDAuNSkpKTsgIC8vIGNlbnRlciBvZiBsYXN0IGNsYXNzXG4gICAgLy8gICAgICAgICB2YWwgPSBfbWluICsgKCgoKF9jbGFzc2VzW2ldICsgKChfY2xhc3Nlc1tpKzFdIC0gX2NsYXNzZXNbaV0pICogMC41KSkgLSBtaW5jKSAvIChtYXhjLW1pbmMpKSAqIChfbWF4IC0gX21pbikpO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHJldHVybiB2YWw7XG4gICAgLy8gfTtcblxuICAgIGNvbnN0IGdldENvbG9yID0gZnVuY3Rpb24gKHZhbCwgYnlwYXNzTWFwKSB7XG4gICAgICAgIGxldCBjb2wsIHQ7XG4gICAgICAgIGlmIChieXBhc3NNYXAgPT0gbnVsbCkge1xuICAgICAgICAgICAgYnlwYXNzTWFwID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKHZhbCkgfHwgdmFsID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gX25hY29sO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYnlwYXNzTWFwKSB7XG4gICAgICAgICAgICBpZiAoX2NsYXNzZXMgJiYgX2NsYXNzZXMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIC8vIGZpbmQgdGhlIGNsYXNzXG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IGdldENsYXNzKHZhbCk7XG4gICAgICAgICAgICAgICAgdCA9IGMgLyAoX2NsYXNzZXMubGVuZ3RoIC0gMik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9tYXggIT09IF9taW4pIHtcbiAgICAgICAgICAgICAgICAvLyBqdXN0IGludGVycG9sYXRlIGJldHdlZW4gbWluL21heFxuICAgICAgICAgICAgICAgIHQgPSAodmFsIC0gX21pbikgLyAoX21heCAtIF9taW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHQgPSB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb21haW4gbWFwXG4gICAgICAgIHQgPSB0TWFwRG9tYWluKHQpO1xuXG4gICAgICAgIGlmICghYnlwYXNzTWFwKSB7XG4gICAgICAgICAgICB0ID0gdE1hcExpZ2h0bmVzcyh0KTsgLy8gbGlnaHRuZXNzIGNvcnJlY3Rpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfZ2FtbWEgIT09IDEpIHtcbiAgICAgICAgICAgIHQgPSBwb3codCwgX2dhbW1hKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHQgPSBfcGFkZGluZ1swXSArIHQgKiAoMSAtIF9wYWRkaW5nWzBdIC0gX3BhZGRpbmdbMV0pO1xuXG4gICAgICAgIHQgPSBsaW1pdCh0LCAwLCAxKTtcblxuICAgICAgICBjb25zdCBrID0gTWF0aC5mbG9vcih0ICogMTAwMDApO1xuXG4gICAgICAgIGlmIChfdXNlQ2FjaGUgJiYgX2NvbG9yQ2FjaGVba10pIHtcbiAgICAgICAgICAgIGNvbCA9IF9jb2xvckNhY2hlW2tdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGUoX2NvbG9ycykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICAvL2ZvciBpIGluIFswLi5fcG9zLmxlbmd0aC0xXVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX3Bvcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gX3Bvc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPD0gcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gX2NvbG9yc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ID49IHAgJiYgaSA9PT0gX3Bvcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBfY29sb3JzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPiBwICYmIHQgPCBfcG9zW2kgKyAxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdCA9ICh0IC0gcCkgLyAoX3Bvc1tpICsgMV0gLSBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IGNocm9tYS5pbnRlcnBvbGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29sb3JzW2ldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xvcnNbaSArIDFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX21vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZShfY29sb3JzKSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnModCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX3VzZUNhY2hlKSB7XG4gICAgICAgICAgICAgICAgX2NvbG9yQ2FjaGVba10gPSBjb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbDtcbiAgICB9O1xuXG4gICAgdmFyIHJlc2V0Q2FjaGUgPSAoKSA9PiAoX2NvbG9yQ2FjaGUgPSB7fSk7XG5cbiAgICBzZXRDb2xvcnMoY29sb3JzKTtcblxuICAgIC8vIHB1YmxpYyBpbnRlcmZhY2VcblxuICAgIGNvbnN0IGYgPSBmdW5jdGlvbiAodikge1xuICAgICAgICBjb25zdCBjID0gY2hyb21hKGdldENvbG9yKHYpKTtcbiAgICAgICAgaWYgKF9vdXQgJiYgY1tfb3V0XSkge1xuICAgICAgICAgICAgcmV0dXJuIGNbX291dF0oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGYuY2xhc3NlcyA9IGZ1bmN0aW9uIChjbGFzc2VzKSB7XG4gICAgICAgIGlmIChjbGFzc2VzICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlKGNsYXNzZXMpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgX2NsYXNzZXMgPSBjbGFzc2VzO1xuICAgICAgICAgICAgICAgIF9kb21haW4gPSBbY2xhc3Nlc1swXSwgY2xhc3Nlc1tjbGFzc2VzLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IGNocm9tYS5hbmFseXplKF9kb21haW4pO1xuICAgICAgICAgICAgICAgIGlmIChjbGFzc2VzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jbGFzc2VzID0gW2QubWluLCBkLm1heF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX2NsYXNzZXMgPSBjaHJvbWEubGltaXRzKGQsICdlJywgY2xhc3Nlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9jbGFzc2VzO1xuICAgIH07XG5cbiAgICBmLmRvbWFpbiA9IGZ1bmN0aW9uIChkb21haW4pIHtcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gX2RvbWFpbjtcbiAgICAgICAgfVxuICAgICAgICBfbWluID0gZG9tYWluWzBdO1xuICAgICAgICBfbWF4ID0gZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXTtcbiAgICAgICAgX3BvcyA9IFtdO1xuICAgICAgICBjb25zdCBrID0gX2NvbG9ycy5sZW5ndGg7XG4gICAgICAgIGlmIChkb21haW4ubGVuZ3RoID09PSBrICYmIF9taW4gIT09IF9tYXgpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBwb3NpdGlvbnNcbiAgICAgICAgICAgIGZvciAobGV0IGQgb2YgQXJyYXkuZnJvbShkb21haW4pKSB7XG4gICAgICAgICAgICAgICAgX3Bvcy5wdXNoKChkIC0gX21pbikgLyAoX21heCAtIF9taW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgazsgYysrKSB7XG4gICAgICAgICAgICAgICAgX3Bvcy5wdXNoKGMgLyAoayAtIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkb21haW4ubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIC8vIHNldCBkb21haW4gbWFwXG4gICAgICAgICAgICAgICAgY29uc3QgdE91dCA9IGRvbWFpbi5tYXAoKGQsIGkpID0+IGkgLyAoZG9tYWluLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0QnJlYWtzID0gZG9tYWluLm1hcCgoZCkgPT4gKGQgLSBfbWluKSAvIChfbWF4IC0gX21pbikpO1xuICAgICAgICAgICAgICAgIGlmICghdEJyZWFrcy5ldmVyeSgodmFsLCBpKSA9PiB0T3V0W2ldID09PSB2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRNYXBEb21haW4gPSAodCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPD0gMCB8fCB0ID49IDEpIHJldHVybiB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHQgPj0gdEJyZWFrc1tpICsgMV0pIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGYgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0IC0gdEJyZWFrc1tpXSkgLyAodEJyZWFrc1tpICsgMV0gLSB0QnJlYWtzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dCA9IHRPdXRbaV0gKyBmICogKHRPdXRbaSArIDFdIC0gdE91dFtpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfZG9tYWluID0gW19taW4sIF9tYXhdO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5tb2RlID0gZnVuY3Rpb24gKF9tKSB7XG4gICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIF9tb2RlO1xuICAgICAgICB9XG4gICAgICAgIF9tb2RlID0gX207XG4gICAgICAgIHJlc2V0Q2FjaGUoKTtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIGYucmFuZ2UgPSBmdW5jdGlvbiAoY29sb3JzLCBfcG9zKSB7XG4gICAgICAgIHNldENvbG9ycyhjb2xvcnMsIF9wb3MpO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5vdXQgPSBmdW5jdGlvbiAoX28pIHtcbiAgICAgICAgX291dCA9IF9vO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5zcHJlYWQgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zcHJlYWQ7XG4gICAgICAgIH1cbiAgICAgICAgX3NwcmVhZCA9IHZhbDtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIGYuY29ycmVjdExpZ2h0bmVzcyA9IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIGlmICh2ID09IG51bGwpIHtcbiAgICAgICAgICAgIHYgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIF9jb3JyZWN0TGlnaHRuZXNzID0gdjtcbiAgICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgICBpZiAoX2NvcnJlY3RMaWdodG5lc3MpIHtcbiAgICAgICAgICAgIHRNYXBMaWdodG5lc3MgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IEwwID0gZ2V0Q29sb3IoMCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgTDEgPSBnZXRDb2xvcigxLCB0cnVlKS5sYWIoKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2wgPSBMMCA+IEwxO1xuICAgICAgICAgICAgICAgIGxldCBMX2FjdHVhbCA9IGdldENvbG9yKHQsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IExfaWRlYWwgPSBMMCArIChMMSAtIEwwKSAqIHQ7XG4gICAgICAgICAgICAgICAgbGV0IExfZGlmZiA9IExfYWN0dWFsIC0gTF9pZGVhbDtcbiAgICAgICAgICAgICAgICBsZXQgdDAgPSAwO1xuICAgICAgICAgICAgICAgIGxldCB0MSA9IDE7XG4gICAgICAgICAgICAgICAgbGV0IG1heF9pdGVyID0gMjA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKE1hdGguYWJzKExfZGlmZikgPiAxZS0yICYmIG1heF9pdGVyLS0gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTF9kaWZmICo9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExfZGlmZiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MCA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAodDEgLSB0KSAqIDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgKz0gKHQwIC0gdCkgKiAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBMX2FjdHVhbCA9IGdldENvbG9yKHQsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChMX2RpZmYgPSBMX2FjdHVhbCAtIExfaWRlYWwpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0TWFwTGlnaHRuZXNzID0gKHQpID0+IHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIGYucGFkZGluZyA9IGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIGlmIChwICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlKHApID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHAgPSBbcCwgcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfcGFkZGluZyA9IHA7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfcGFkZGluZztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBmLmNvbG9ycyA9IGZ1bmN0aW9uIChudW1Db2xvcnMsIG91dCkge1xuICAgICAgICAvLyBJZiBubyBhcmd1bWVudHMgYXJlIGdpdmVuLCByZXR1cm4gdGhlIG9yaWdpbmFsIGNvbG9ycyB0aGF0IHdlcmUgcHJvdmlkZWRcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBvdXQgPSAnaGV4JztcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IF9jb2xvcnMuc2xpY2UoMCk7XG4gICAgICAgIH0gZWxzZSBpZiAobnVtQ29sb3JzID09PSAxKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBbZigwLjUpXTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1Db2xvcnMgPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBkbSA9IF9kb21haW5bMF07XG4gICAgICAgICAgICBjb25zdCBkZCA9IF9kb21haW5bMV0gLSBkbTtcbiAgICAgICAgICAgIHJlc3VsdCA9IF9fcmFuZ2VfXygwLCBudW1Db2xvcnMsIGZhbHNlKS5tYXAoKGkpID0+XG4gICAgICAgICAgICAgICAgZihkbSArIChpIC8gKG51bUNvbG9ycyAtIDEpKSAqIGRkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJldHVybnMgYWxsIGNvbG9ycyBiYXNlZCBvbiB0aGUgZGVmaW5lZCBjbGFzc2VzXG4gICAgICAgICAgICBjb2xvcnMgPSBbXTtcbiAgICAgICAgICAgIGxldCBzYW1wbGVzID0gW107XG4gICAgICAgICAgICBpZiAoX2NsYXNzZXMgJiYgX2NsYXNzZXMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gMSwgZW5kID0gX2NsYXNzZXMubGVuZ3RoLCBhc2MgPSAxIDw9IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgYXNjID8gaSA8IGVuZCA6IGkgPiBlbmQ7XG4gICAgICAgICAgICAgICAgICAgIGFzYyA/IGkrKyA6IGktLVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzYW1wbGVzLnB1c2goKF9jbGFzc2VzW2kgLSAxXSArIF9jbGFzc2VzW2ldKSAqIDAuNSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzYW1wbGVzID0gX2RvbWFpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCA9IHNhbXBsZXMubWFwKCh2KSA9PiBmKHYpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaHJvbWFbb3V0XSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm1hcCgoYykgPT4gY1tvdXRdKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIGYuY2FjaGUgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICBpZiAoYyAhPSBudWxsKSB7XG4gICAgICAgICAgICBfdXNlQ2FjaGUgPSBjO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX3VzZUNhY2hlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGYuZ2FtbWEgPSBmdW5jdGlvbiAoZykge1xuICAgICAgICBpZiAoZyAhPSBudWxsKSB7XG4gICAgICAgICAgICBfZ2FtbWEgPSBnO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX2dhbW1hO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGYubm9kYXRhID0gZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgaWYgKGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgX25hY29sID0gY2hyb21hKGQpO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX25hY29sO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBmO1xufVxuXG5mdW5jdGlvbiBfX3JhbmdlX18obGVmdCwgcmlnaHQsIGluY2x1c2l2ZSkge1xuICAgIGxldCByYW5nZSA9IFtdO1xuICAgIGxldCBhc2NlbmRpbmcgPSBsZWZ0IDwgcmlnaHQ7XG4gICAgbGV0IGVuZCA9ICFpbmNsdXNpdmUgPyByaWdodCA6IGFzY2VuZGluZyA/IHJpZ2h0ICsgMSA6IHJpZ2h0IC0gMTtcbiAgICBmb3IgKGxldCBpID0gbGVmdDsgYXNjZW5kaW5nID8gaSA8IGVuZCA6IGkgPiBlbmQ7IGFzY2VuZGluZyA/IGkrKyA6IGktLSkge1xuICAgICAgICByYW5nZS5wdXNoKGkpO1xuICAgIH1cbiAgICByZXR1cm4gcmFuZ2U7XG59XG4iLCAiLy9cbi8vIGludGVycG9sYXRlcyBiZXR3ZWVuIGEgc2V0IG9mIGNvbG9ycyB1emluZyBhIGJlemllciBzcGxpbmVcbi8vXG5cbi8vIEByZXF1aXJlcyB1dGlscyBsYWJcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgJy4uL2lvL2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgc2NhbGUgZnJvbSAnLi9zY2FsZS5qcyc7XG5cbi8vIG50aCByb3cgb2YgdGhlIHBhc2NhbCB0cmlhbmdsZVxuY29uc3QgYmlub21fcm93ID0gZnVuY3Rpb24gKG4pIHtcbiAgICBsZXQgcm93ID0gWzEsIDFdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIGxldCBuZXdyb3cgPSBbMV07XG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IHJvdy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgbmV3cm93W2pdID0gKHJvd1tqXSB8fCAwKSArIHJvd1tqIC0gMV07XG4gICAgICAgIH1cbiAgICAgICAgcm93ID0gbmV3cm93O1xuICAgIH1cbiAgICByZXR1cm4gcm93O1xufTtcblxuY29uc3QgYmV6aWVyID0gZnVuY3Rpb24gKGNvbG9ycykge1xuICAgIGxldCBJLCBsYWIwLCBsYWIxLCBsYWIyO1xuICAgIGNvbG9ycyA9IGNvbG9ycy5tYXAoKGMpID0+IG5ldyBDb2xvcihjKSk7XG4gICAgaWYgKGNvbG9ycy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgLy8gbGluZWFyIGludGVycG9sYXRpb25cbiAgICAgICAgW2xhYjAsIGxhYjFdID0gY29sb3JzLm1hcCgoYykgPT4gYy5sYWIoKSk7XG4gICAgICAgIEkgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgY29uc3QgbGFiID0gWzAsIDEsIDJdLm1hcCgoaSkgPT4gbGFiMFtpXSArIHQgKiAobGFiMVtpXSAtIGxhYjBbaV0pKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IobGFiLCAnbGFiJyk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmIChjb2xvcnMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIC8vIHF1YWRyYXRpYyBiZXppZXIgaW50ZXJwb2xhdGlvblxuICAgICAgICBbbGFiMCwgbGFiMSwgbGFiMl0gPSBjb2xvcnMubWFwKChjKSA9PiBjLmxhYigpKTtcbiAgICAgICAgSSA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICBjb25zdCBsYWIgPSBbMCwgMSwgMl0ubWFwKFxuICAgICAgICAgICAgICAgIChpKSA9PlxuICAgICAgICAgICAgICAgICAgICAoMSAtIHQpICogKDEgLSB0KSAqIGxhYjBbaV0gK1xuICAgICAgICAgICAgICAgICAgICAyICogKDEgLSB0KSAqIHQgKiBsYWIxW2ldICtcbiAgICAgICAgICAgICAgICAgICAgdCAqIHQgKiBsYWIyW2ldXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgLy8gY3ViaWMgYmV6aWVyIGludGVycG9sYXRpb25cbiAgICAgICAgbGV0IGxhYjM7XG4gICAgICAgIFtsYWIwLCBsYWIxLCBsYWIyLCBsYWIzXSA9IGNvbG9ycy5tYXAoKGMpID0+IGMubGFiKCkpO1xuICAgICAgICBJID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYiA9IFswLCAxLCAyXS5tYXAoXG4gICAgICAgICAgICAgICAgKGkpID0+XG4gICAgICAgICAgICAgICAgICAgICgxIC0gdCkgKiAoMSAtIHQpICogKDEgLSB0KSAqIGxhYjBbaV0gK1xuICAgICAgICAgICAgICAgICAgICAzICogKDEgLSB0KSAqICgxIC0gdCkgKiB0ICogbGFiMVtpXSArXG4gICAgICAgICAgICAgICAgICAgIDMgKiAoMSAtIHQpICogdCAqIHQgKiBsYWIyW2ldICtcbiAgICAgICAgICAgICAgICAgICAgdCAqIHQgKiB0ICogbGFiM1tpXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IobGFiLCAnbGFiJyk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmIChjb2xvcnMubGVuZ3RoID49IDUpIHtcbiAgICAgICAgLy8gZ2VuZXJhbCBjYXNlIChkZWdyZWUgbiBiZXppZXIpXG4gICAgICAgIGxldCBsYWJzLCByb3csIG47XG4gICAgICAgIGxhYnMgPSBjb2xvcnMubWFwKChjKSA9PiBjLmxhYigpKTtcbiAgICAgICAgbiA9IGNvbG9ycy5sZW5ndGggLSAxO1xuICAgICAgICByb3cgPSBiaW5vbV9yb3cobik7XG4gICAgICAgIEkgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgY29uc3QgdSA9IDEgLSB0O1xuICAgICAgICAgICAgY29uc3QgbGFiID0gWzAsIDEsIDJdLm1hcCgoaSkgPT5cbiAgICAgICAgICAgICAgICBsYWJzLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgKHN1bSwgZWwsIGopID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBzdW0gKyByb3dbal0gKiB1ICoqIChuIC0gaikgKiB0ICoqIGogKiBlbFtpXSxcbiAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGxhYiwgJ2xhYicpO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdObyBwb2ludCBpbiBydW5uaW5nIGJlemllciB3aXRoIG9ubHkgb25lIGNvbG9yLicpO1xuICAgIH1cbiAgICByZXR1cm4gSTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IChjb2xvcnMpID0+IHtcbiAgICBjb25zdCBmID0gYmV6aWVyKGNvbG9ycyk7XG4gICAgZi5zY2FsZSA9ICgpID0+IHNjYWxlKGYpO1xuICAgIHJldHVybiBmO1xufTtcbiIsICIvKlxuICogaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgY29sb3JzIHV6aW5nIGEgYmV6aWVyIHNwbGluZVxuICogYmxlbmQgbW9kZSBmb3JtdWxhcyB0YWtlbiBmcm9tIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE4MDExMDAxNDk0Ni9odHRwOi8vd3d3LnZlbnR1cmUtd2FyZS5jb20va2V2aW4vY29kaW5nL2xldHMtbGVhcm4tbWF0aC1waG90b3Nob3AtYmxlbmQtbW9kZXMvXG4gKi9cblxuaW1wb3J0ICcuLi9pby9yZ2IvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi9jaHJvbWEuanMnO1xuXG5jb25zdCBibGVuZCA9IChib3R0b20sIHRvcCwgbW9kZSkgPT4ge1xuICAgIGlmICghYmxlbmRbbW9kZV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGJsZW5kIG1vZGUgJyArIG1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gYmxlbmRbbW9kZV0oYm90dG9tLCB0b3ApO1xufTtcblxuY29uc3QgYmxlbmRfZiA9IChmKSA9PiAoYm90dG9tLCB0b3ApID0+IHtcbiAgICBjb25zdCBjMCA9IGNocm9tYSh0b3ApLnJnYigpO1xuICAgIGNvbnN0IGMxID0gY2hyb21hKGJvdHRvbSkucmdiKCk7XG4gICAgcmV0dXJuIGNocm9tYS5yZ2IoZihjMCwgYzEpKTtcbn07XG5cbmNvbnN0IGVhY2ggPSAoZikgPT4gKGMwLCBjMSkgPT4ge1xuICAgIGNvbnN0IG91dCA9IFtdO1xuICAgIG91dFswXSA9IGYoYzBbMF0sIGMxWzBdKTtcbiAgICBvdXRbMV0gPSBmKGMwWzFdLCBjMVsxXSk7XG4gICAgb3V0WzJdID0gZihjMFsyXSwgYzFbMl0pO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG5jb25zdCBub3JtYWwgPSAoYSkgPT4gYTtcbmNvbnN0IG11bHRpcGx5ID0gKGEsIGIpID0+IChhICogYikgLyAyNTU7XG5jb25zdCBkYXJrZW4gPSAoYSwgYikgPT4gKGEgPiBiID8gYiA6IGEpO1xuY29uc3QgbGlnaHRlbiA9IChhLCBiKSA9PiAoYSA+IGIgPyBhIDogYik7XG5jb25zdCBzY3JlZW4gPSAoYSwgYikgPT4gMjU1ICogKDEgLSAoMSAtIGEgLyAyNTUpICogKDEgLSBiIC8gMjU1KSk7XG5jb25zdCBvdmVybGF5ID0gKGEsIGIpID0+XG4gICAgYiA8IDEyOCA/ICgyICogYSAqIGIpIC8gMjU1IDogMjU1ICogKDEgLSAyICogKDEgLSBhIC8gMjU1KSAqICgxIC0gYiAvIDI1NSkpO1xuY29uc3QgYnVybiA9IChhLCBiKSA9PiAyNTUgKiAoMSAtICgxIC0gYiAvIDI1NSkgLyAoYSAvIDI1NSkpO1xuY29uc3QgZG9kZ2UgPSAoYSwgYikgPT4ge1xuICAgIGlmIChhID09PSAyNTUpIHJldHVybiAyNTU7XG4gICAgYSA9ICgyNTUgKiAoYiAvIDI1NSkpIC8gKDEgLSBhIC8gMjU1KTtcbiAgICByZXR1cm4gYSA+IDI1NSA/IDI1NSA6IGE7XG59O1xuXG4vLyAjIGFkZCA9IChhLGIpIC0+XG4vLyAjICAgICBpZiAoYSArIGIgPiAyNTUpIHRoZW4gMjU1IGVsc2UgYSArIGJcblxuYmxlbmQubm9ybWFsID0gYmxlbmRfZihlYWNoKG5vcm1hbCkpO1xuYmxlbmQubXVsdGlwbHkgPSBibGVuZF9mKGVhY2gobXVsdGlwbHkpKTtcbmJsZW5kLnNjcmVlbiA9IGJsZW5kX2YoZWFjaChzY3JlZW4pKTtcbmJsZW5kLm92ZXJsYXkgPSBibGVuZF9mKGVhY2gob3ZlcmxheSkpO1xuYmxlbmQuZGFya2VuID0gYmxlbmRfZihlYWNoKGRhcmtlbikpO1xuYmxlbmQubGlnaHRlbiA9IGJsZW5kX2YoZWFjaChsaWdodGVuKSk7XG5ibGVuZC5kb2RnZSA9IGJsZW5kX2YoZWFjaChkb2RnZSkpO1xuYmxlbmQuYnVybiA9IGJsZW5kX2YoZWFjaChidXJuKSk7XG4vLyBibGVuZC5hZGQgPSBibGVuZF9mKGVhY2goYWRkKSk7XG5cbmV4cG9ydCBkZWZhdWx0IGJsZW5kO1xuIiwgIi8vIGN1YmVoZWxpeCBpbnRlcnBvbGF0aW9uXG4vLyBiYXNlZCBvbiBELkEuIEdyZWVuIFwiQSBjb2xvdXIgc2NoZW1lIGZvciB0aGUgZGlzcGxheSBvZiBhc3Ryb25vbWljYWwgaW50ZW5zaXR5IGltYWdlc1wiXG4vLyBodHRwOi8vYXN0cm9uLXNvYy5pbi9idWxsZXRpbi8xMUp1bmUvMjg5MzkyMDExLnBkZlxuaW1wb3J0IHsgdHlwZSwgY2xpcF9yZ2IsIFRXT1BJIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi9jaHJvbWEuanMnO1xuY29uc3QgeyBwb3csIHNpbiwgY29zIH0gPSBNYXRoO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoXG4gICAgc3RhcnQgPSAzMDAsXG4gICAgcm90YXRpb25zID0gLTEuNSxcbiAgICBodWUgPSAxLFxuICAgIGdhbW1hID0gMSxcbiAgICBsaWdodG5lc3MgPSBbMCwgMV1cbikge1xuICAgIGxldCBkaCA9IDAsXG4gICAgICAgIGRsO1xuICAgIGlmICh0eXBlKGxpZ2h0bmVzcykgPT09ICdhcnJheScpIHtcbiAgICAgICAgZGwgPSBsaWdodG5lc3NbMV0gLSBsaWdodG5lc3NbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGwgPSAwO1xuICAgICAgICBsaWdodG5lc3MgPSBbbGlnaHRuZXNzLCBsaWdodG5lc3NdO1xuICAgIH1cbiAgICBjb25zdCBmID0gZnVuY3Rpb24gKGZyYWN0KSB7XG4gICAgICAgIGNvbnN0IGEgPSBUV09QSSAqICgoc3RhcnQgKyAxMjApIC8gMzYwICsgcm90YXRpb25zICogZnJhY3QpO1xuICAgICAgICBjb25zdCBsID0gcG93KGxpZ2h0bmVzc1swXSArIGRsICogZnJhY3QsIGdhbW1hKTtcbiAgICAgICAgY29uc3QgaCA9IGRoICE9PSAwID8gaHVlWzBdICsgZnJhY3QgKiBkaCA6IGh1ZTtcbiAgICAgICAgY29uc3QgYW1wID0gKGggKiBsICogKDEgLSBsKSkgLyAyO1xuICAgICAgICBjb25zdCBjb3NfYSA9IGNvcyhhKTtcbiAgICAgICAgY29uc3Qgc2luX2EgPSBzaW4oYSk7XG4gICAgICAgIGNvbnN0IHIgPSBsICsgYW1wICogKC0wLjE0ODYxICogY29zX2EgKyAxLjc4Mjc3ICogc2luX2EpO1xuICAgICAgICBjb25zdCBnID0gbCArIGFtcCAqICgtMC4yOTIyNyAqIGNvc19hIC0gMC45MDY0OSAqIHNpbl9hKTtcbiAgICAgICAgY29uc3QgYiA9IGwgKyBhbXAgKiAoKzEuOTcyOTQgKiBjb3NfYSk7XG4gICAgICAgIHJldHVybiBjaHJvbWEoY2xpcF9yZ2IoW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTUsIDFdKSk7XG4gICAgfTtcbiAgICBmLnN0YXJ0ID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgaWYgKHMgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0ID0gcztcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcbiAgICBmLnJvdGF0aW9ucyA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIGlmIChyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiByb3RhdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgcm90YXRpb25zID0gcjtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcbiAgICBmLmdhbW1hID0gZnVuY3Rpb24gKGcpIHtcbiAgICAgICAgaWYgKGcgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdhbW1hO1xuICAgICAgICB9XG4gICAgICAgIGdhbW1hID0gZztcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcbiAgICBmLmh1ZSA9IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgIGlmIChoID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBodWU7XG4gICAgICAgIH1cbiAgICAgICAgaHVlID0gaDtcbiAgICAgICAgaWYgKHR5cGUoaHVlKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgZGggPSBodWVbMV0gLSBodWVbMF07XG4gICAgICAgICAgICBpZiAoZGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBodWUgPSBodWVbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcbiAgICBmLmxpZ2h0bmVzcyA9IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgIGlmIChoID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBsaWdodG5lc3M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUoaCkgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIGxpZ2h0bmVzcyA9IGg7XG4gICAgICAgICAgICBkbCA9IGhbMV0gLSBoWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGlnaHRuZXNzID0gW2gsIGhdO1xuICAgICAgICAgICAgZGwgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG4gICAgZi5zY2FsZSA9ICgpID0+IGNocm9tYS5zY2FsZShmKTtcbiAgICBmLmh1ZShodWUpO1xuICAgIHJldHVybiBmO1xufVxuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5jb25zdCBkaWdpdHMgPSAnMDEyMzQ1Njc4OWFiY2RlZic7XG5cbmNvbnN0IHsgZmxvb3IsIHJhbmRvbSB9ID0gTWF0aDtcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAgIGxldCBjb2RlID0gJyMnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgIGNvZGUgKz0gZGlnaXRzLmNoYXJBdChmbG9vcihyYW5kb20oKSAqIDE2KSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQ29sb3IoY29kZSwgJ2hleCcpO1xufTtcbiIsICJpbXBvcnQgdHlwZSBmcm9tICcuL3R5cGUuanMnO1xuXG5jb25zdCB7IGxvZywgcG93LCBmbG9vciwgYWJzIH0gPSBNYXRoO1xuXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl6ZShkYXRhLCBrZXkgPSBudWxsKSB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgICAgbWluOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICBtYXg6IE51bWJlci5NQVhfVkFMVUUgKiAtMSxcbiAgICAgICAgc3VtOiAwLFxuICAgICAgICB2YWx1ZXM6IFtdLFxuICAgICAgICBjb3VudDogMFxuICAgIH07XG4gICAgaWYgKHR5cGUoZGF0YSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGRhdGEgPSBPYmplY3QudmFsdWVzKGRhdGEpO1xuICAgIH1cbiAgICBkYXRhLmZvckVhY2goKHZhbCkgPT4ge1xuICAgICAgICBpZiAoa2V5ICYmIHR5cGUodmFsKSA9PT0gJ29iamVjdCcpIHZhbCA9IHZhbFtrZXldO1xuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsICYmICFpc05hTih2YWwpKSB7XG4gICAgICAgICAgICByLnZhbHVlcy5wdXNoKHZhbCk7XG4gICAgICAgICAgICByLnN1bSArPSB2YWw7XG4gICAgICAgICAgICBpZiAodmFsIDwgci5taW4pIHIubWluID0gdmFsO1xuICAgICAgICAgICAgaWYgKHZhbCA+IHIubWF4KSByLm1heCA9IHZhbDtcbiAgICAgICAgICAgIHIuY291bnQgKz0gMTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgci5kb21haW4gPSBbci5taW4sIHIubWF4XTtcblxuICAgIHIubGltaXRzID0gKG1vZGUsIG51bSkgPT4gbGltaXRzKHIsIG1vZGUsIG51bSk7XG5cbiAgICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbWl0cyhkYXRhLCBtb2RlID0gJ2VxdWFsJywgbnVtID0gNykge1xuICAgIGlmICh0eXBlKGRhdGEpID09ICdhcnJheScpIHtcbiAgICAgICAgZGF0YSA9IGFuYWx5emUoZGF0YSk7XG4gICAgfVxuICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IGRhdGE7XG4gICAgY29uc3QgdmFsdWVzID0gZGF0YS52YWx1ZXMuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuXG4gICAgaWYgKG51bSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gW21pbiwgbWF4XTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW1pdHMgPSBbXTtcblxuICAgIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2MnKSB7XG4gICAgICAgIC8vIGNvbnRpbnVvdXNcbiAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICB9XG5cbiAgICBpZiAobW9kZS5zdWJzdHIoMCwgMSkgPT09ICdlJykge1xuICAgICAgICAvLyBlcXVhbCBpbnRlcnZhbFxuICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG51bTsgaSsrKSB7XG4gICAgICAgICAgICBsaW1pdHMucHVzaChtaW4gKyAoaSAvIG51bSkgKiAobWF4IC0gbWluKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICB9IGVsc2UgaWYgKG1vZGUuc3Vic3RyKDAsIDEpID09PSAnbCcpIHtcbiAgICAgICAgLy8gbG9nIHNjYWxlXG4gICAgICAgIGlmIChtaW4gPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdMb2dhcml0aG1pYyBzY2FsZXMgYXJlIG9ubHkgcG9zc2libGUgZm9yIHZhbHVlcyA+IDAnXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1pbl9sb2cgPSBNYXRoLkxPRzEwRSAqIGxvZyhtaW4pO1xuICAgICAgICBjb25zdCBtYXhfbG9nID0gTWF0aC5MT0cxMEUgKiBsb2cobWF4KTtcbiAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgbGltaXRzLnB1c2gocG93KDEwLCBtaW5fbG9nICsgKGkgLyBudW0pICogKG1heF9sb2cgLSBtaW5fbG9nKSkpO1xuICAgICAgICB9XG4gICAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG4gICAgfSBlbHNlIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ3EnKSB7XG4gICAgICAgIC8vIHF1YW50aWxlIHNjYWxlXG4gICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSAoKHZhbHVlcy5sZW5ndGggLSAxKSAqIGkpIC8gbnVtO1xuICAgICAgICAgICAgY29uc3QgcGIgPSBmbG9vcihwKTtcbiAgICAgICAgICAgIGlmIChwYiA9PT0gcCkge1xuICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKHZhbHVlc1twYl0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBwID4gcGJcbiAgICAgICAgICAgICAgICBjb25zdCBwciA9IHAgLSBwYjtcbiAgICAgICAgICAgICAgICBsaW1pdHMucHVzaCh2YWx1ZXNbcGJdICogKDEgLSBwcikgKyB2YWx1ZXNbcGIgKyAxXSAqIHByKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH0gZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwgMSkgPT09ICdrJykge1xuICAgICAgICAvLyBrLW1lYW5zIGNsdXN0ZXJpbmdcbiAgICAgICAgLypcbiAgICAgICAgaW1wbGVtZW50YXRpb24gYmFzZWQgb25cbiAgICAgICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2ZpZ3VlL3NvdXJjZS9icm93c2UvdHJ1bmsvZmlndWUuanMjMzM2XG4gICAgICAgIHNpbXBsaWZpZWQgZm9yIDEtZCBpbnB1dCB2YWx1ZXNcbiAgICAgICAgKi9cbiAgICAgICAgbGV0IGNsdXN0ZXI7XG4gICAgICAgIGNvbnN0IG4gPSB2YWx1ZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBhc3NpZ25tZW50cyA9IG5ldyBBcnJheShuKTtcbiAgICAgICAgY29uc3QgY2x1c3RlclNpemVzID0gbmV3IEFycmF5KG51bSk7XG4gICAgICAgIGxldCByZXBlYXQgPSB0cnVlO1xuICAgICAgICBsZXQgbmJfaXRlcnMgPSAwO1xuICAgICAgICBsZXQgY2VudHJvaWRzID0gbnVsbDtcblxuICAgICAgICAvLyBnZXQgc2VlZCB2YWx1ZXNcbiAgICAgICAgY2VudHJvaWRzID0gW107XG4gICAgICAgIGNlbnRyb2lkcy5wdXNoKG1pbik7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtOyBpKyspIHtcbiAgICAgICAgICAgIGNlbnRyb2lkcy5wdXNoKG1pbiArIChpIC8gbnVtKSAqIChtYXggLSBtaW4pKTtcbiAgICAgICAgfVxuICAgICAgICBjZW50cm9pZHMucHVzaChtYXgpO1xuXG4gICAgICAgIHdoaWxlIChyZXBlYXQpIHtcbiAgICAgICAgICAgIC8vIGFzc2lnbm1lbnQgc3RlcFxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW07IGorKykge1xuICAgICAgICAgICAgICAgIGNsdXN0ZXJTaXplc1tqXSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBtaW5kaXN0ID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgICAgICAgICBsZXQgYmVzdDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3QgPSBhYnMoY2VudHJvaWRzW2pdIC0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdCA8IG1pbmRpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmRpc3QgPSBkaXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGo7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlclNpemVzW2Jlc3RdKys7XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRzW2ldID0gYmVzdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSBjZW50cm9pZHMgc3RlcFxuICAgICAgICAgICAgY29uc3QgbmV3Q2VudHJvaWRzID0gbmV3IEFycmF5KG51bSk7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2pdID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2x1c3RlciA9IGFzc2lnbm1lbnRzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChuZXdDZW50cm9pZHNbY2x1c3Rlcl0gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2NsdXN0ZXJdID0gdmFsdWVzW2ldO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbnRyb2lkc1tjbHVzdGVyXSArPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW07IGorKykge1xuICAgICAgICAgICAgICAgIG5ld0NlbnRyb2lkc1tqXSAqPSAxIC8gY2x1c3RlclNpemVzW2pdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjaGVjayBjb252ZXJnZW5jZVxuICAgICAgICAgICAgcmVwZWF0ID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tqXSAhPT0gY2VudHJvaWRzW2pdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcGVhdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2VudHJvaWRzID0gbmV3Q2VudHJvaWRzO1xuICAgICAgICAgICAgbmJfaXRlcnMrKztcblxuICAgICAgICAgICAgaWYgKG5iX2l0ZXJzID4gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVwZWF0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmaW5pc2hlZCBrLW1lYW5zIGNsdXN0ZXJpbmdcbiAgICAgICAgLy8gdGhlIG5leHQgcGFydCBpcyBib3Jyb3dlZCBmcm9tIGdhYnJpZWxmbG9yLml0XG4gICAgICAgIGNvbnN0IGtDbHVzdGVycyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICBrQ2x1c3RlcnNbal0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgY2x1c3RlciA9IGFzc2lnbm1lbnRzW2ldO1xuICAgICAgICAgICAga0NsdXN0ZXJzW2NsdXN0ZXJdLnB1c2godmFsdWVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdG1wS01lYW5zQnJlYWtzID0gW107XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgIHRtcEtNZWFuc0JyZWFrcy5wdXNoKGtDbHVzdGVyc1tqXVswXSk7XG4gICAgICAgICAgICB0bXBLTWVhbnNCcmVha3MucHVzaChrQ2x1c3RlcnNbal1ba0NsdXN0ZXJzW2pdLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgfVxuICAgICAgICB0bXBLTWVhbnNCcmVha3MgPSB0bXBLTWVhbnNCcmVha3Muc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgICAgICBsaW1pdHMucHVzaCh0bXBLTWVhbnNCcmVha3NbMF0pO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRtcEtNZWFuc0JyZWFrcy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRtcEtNZWFuc0JyZWFrc1tpXTtcbiAgICAgICAgICAgIGlmICghaXNOYU4odikgJiYgbGltaXRzLmluZGV4T2YodikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbGltaXRzLnB1c2godik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpbWl0cztcbn1cbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0ICcuLi9vcHMvbHVtaW5hbmNlLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKGEsIGIpID0+IHtcbiAgICAvLyBXQ0FHIGNvbnRyYXN0IHJhdGlvXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jY29udHJhc3QtcmF0aW9kZWZcbiAgICBhID0gbmV3IENvbG9yKGEpO1xuICAgIGIgPSBuZXcgQ29sb3IoYik7XG4gICAgY29uc3QgbDEgPSBhLmx1bWluYW5jZSgpO1xuICAgIGNvbnN0IGwyID0gYi5sdW1pbmFuY2UoKTtcbiAgICByZXR1cm4gbDEgPiBsMiA/IChsMSArIDAuMDUpIC8gKGwyICsgMC4wNSkgOiAobDIgKyAwLjA1KSAvIChsMSArIDAuMDUpO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuY29uc3QgeyBzcXJ0LCBwb3csIG1pbiwgbWF4LCBhdGFuMiwgYWJzLCBjb3MsIHNpbiwgZXhwLCBQSSB9ID0gTWF0aDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGEsIGIsIEtsID0gMSwgS2MgPSAxLCBLaCA9IDEpIHtcbiAgICAvLyBEZWx0YSBFIChDSUUgMjAwMClcbiAgICAvLyBzZWUgaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fRGVsdGFFX0NJRTIwMDAuaHRtbFxuICAgIHZhciByYWQyZGVnID0gZnVuY3Rpb24gKHJhZCkge1xuICAgICAgICByZXR1cm4gKDM2MCAqIHJhZCkgLyAoMiAqIFBJKTtcbiAgICB9O1xuICAgIHZhciBkZWcycmFkID0gZnVuY3Rpb24gKGRlZykge1xuICAgICAgICByZXR1cm4gKDIgKiBQSSAqIGRlZykgLyAzNjA7XG4gICAgfTtcbiAgICBhID0gbmV3IENvbG9yKGEpO1xuICAgIGIgPSBuZXcgQ29sb3IoYik7XG4gICAgY29uc3QgW0wxLCBhMSwgYjFdID0gQXJyYXkuZnJvbShhLmxhYigpKTtcbiAgICBjb25zdCBbTDIsIGEyLCBiMl0gPSBBcnJheS5mcm9tKGIubGFiKCkpO1xuICAgIGNvbnN0IGF2Z0wgPSAoTDEgKyBMMikgLyAyO1xuICAgIGNvbnN0IEMxID0gc3FydChwb3coYTEsIDIpICsgcG93KGIxLCAyKSk7XG4gICAgY29uc3QgQzIgPSBzcXJ0KHBvdyhhMiwgMikgKyBwb3coYjIsIDIpKTtcbiAgICBjb25zdCBhdmdDID0gKEMxICsgQzIpIC8gMjtcbiAgICBjb25zdCBHID0gMC41ICogKDEgLSBzcXJ0KHBvdyhhdmdDLCA3KSAvIChwb3coYXZnQywgNykgKyBwb3coMjUsIDcpKSkpO1xuICAgIGNvbnN0IGExcCA9IGExICogKDEgKyBHKTtcbiAgICBjb25zdCBhMnAgPSBhMiAqICgxICsgRyk7XG4gICAgY29uc3QgQzFwID0gc3FydChwb3coYTFwLCAyKSArIHBvdyhiMSwgMikpO1xuICAgIGNvbnN0IEMycCA9IHNxcnQocG93KGEycCwgMikgKyBwb3coYjIsIDIpKTtcbiAgICBjb25zdCBhdmdDcCA9IChDMXAgKyBDMnApIC8gMjtcbiAgICBjb25zdCBhcmN0YW4xID0gcmFkMmRlZyhhdGFuMihiMSwgYTFwKSk7XG4gICAgY29uc3QgYXJjdGFuMiA9IHJhZDJkZWcoYXRhbjIoYjIsIGEycCkpO1xuICAgIGNvbnN0IGgxcCA9IGFyY3RhbjEgPj0gMCA/IGFyY3RhbjEgOiBhcmN0YW4xICsgMzYwO1xuICAgIGNvbnN0IGgycCA9IGFyY3RhbjIgPj0gMCA/IGFyY3RhbjIgOiBhcmN0YW4yICsgMzYwO1xuICAgIGNvbnN0IGF2Z0hwID1cbiAgICAgICAgYWJzKGgxcCAtIGgycCkgPiAxODAgPyAoaDFwICsgaDJwICsgMzYwKSAvIDIgOiAoaDFwICsgaDJwKSAvIDI7XG4gICAgY29uc3QgVCA9XG4gICAgICAgIDEgLVxuICAgICAgICAwLjE3ICogY29zKGRlZzJyYWQoYXZnSHAgLSAzMCkpICtcbiAgICAgICAgMC4yNCAqIGNvcyhkZWcycmFkKDIgKiBhdmdIcCkpICtcbiAgICAgICAgMC4zMiAqIGNvcyhkZWcycmFkKDMgKiBhdmdIcCArIDYpKSAtXG4gICAgICAgIDAuMiAqIGNvcyhkZWcycmFkKDQgKiBhdmdIcCAtIDYzKSk7XG4gICAgbGV0IGRlbHRhSHAgPSBoMnAgLSBoMXA7XG4gICAgZGVsdGFIcCA9XG4gICAgICAgIGFicyhkZWx0YUhwKSA8PSAxODBcbiAgICAgICAgICAgID8gZGVsdGFIcFxuICAgICAgICAgICAgOiBoMnAgPD0gaDFwXG4gICAgICAgICAgICAgID8gZGVsdGFIcCArIDM2MFxuICAgICAgICAgICAgICA6IGRlbHRhSHAgLSAzNjA7XG4gICAgZGVsdGFIcCA9IDIgKiBzcXJ0KEMxcCAqIEMycCkgKiBzaW4oZGVnMnJhZChkZWx0YUhwKSAvIDIpO1xuICAgIGNvbnN0IGRlbHRhTCA9IEwyIC0gTDE7XG4gICAgY29uc3QgZGVsdGFDcCA9IEMycCAtIEMxcDtcbiAgICBjb25zdCBzbCA9IDEgKyAoMC4wMTUgKiBwb3coYXZnTCAtIDUwLCAyKSkgLyBzcXJ0KDIwICsgcG93KGF2Z0wgLSA1MCwgMikpO1xuICAgIGNvbnN0IHNjID0gMSArIDAuMDQ1ICogYXZnQ3A7XG4gICAgY29uc3Qgc2ggPSAxICsgMC4wMTUgKiBhdmdDcCAqIFQ7XG4gICAgY29uc3QgZGVsdGFUaGV0YSA9IDMwICogZXhwKC1wb3coKGF2Z0hwIC0gMjc1KSAvIDI1LCAyKSk7XG4gICAgY29uc3QgUmMgPSAyICogc3FydChwb3coYXZnQ3AsIDcpIC8gKHBvdyhhdmdDcCwgNykgKyBwb3coMjUsIDcpKSk7XG4gICAgY29uc3QgUnQgPSAtUmMgKiBzaW4oMiAqIGRlZzJyYWQoZGVsdGFUaGV0YSkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHNxcnQoXG4gICAgICAgIHBvdyhkZWx0YUwgLyAoS2wgKiBzbCksIDIpICtcbiAgICAgICAgICAgIHBvdyhkZWx0YUNwIC8gKEtjICogc2MpLCAyKSArXG4gICAgICAgICAgICBwb3coZGVsdGFIcCAvIChLaCAqIHNoKSwgMikgK1xuICAgICAgICAgICAgUnQgKiAoZGVsdGFDcCAvIChLYyAqIHNjKSkgKiAoZGVsdGFIcCAvIChLaCAqIHNoKSlcbiAgICApO1xuICAgIHJldHVybiBtYXgoMCwgbWluKDEwMCwgcmVzdWx0KSk7XG59XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuLy8gc2ltcGxlIEV1Y2xpZGVhbiBkaXN0YW5jZVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGEsIGIsIG1vZGUgPSAnbGFiJykge1xuICAgIC8vIERlbHRhIEUgKENJRSAxOTc2KVxuICAgIC8vIHNlZSBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0VxdWF0aW9ucy5odG1sXG4gICAgYSA9IG5ldyBDb2xvcihhKTtcbiAgICBiID0gbmV3IENvbG9yKGIpO1xuICAgIGNvbnN0IGwxID0gYS5nZXQobW9kZSk7XG4gICAgY29uc3QgbDIgPSBiLmdldChtb2RlKTtcbiAgICBsZXQgc3VtX3NxID0gMDtcbiAgICBmb3IgKGxldCBpIGluIGwxKSB7XG4gICAgICAgIGNvbnN0IGQgPSAobDFbaV0gfHwgMCkgLSAobDJbaV0gfHwgMCk7XG4gICAgICAgIHN1bV9zcSArPSBkICogZDtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguc3FydChzdW1fc3EpO1xufVxuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0ICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgbmV3IENvbG9yKC4uLmFyZ3MpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufTtcbiIsICIvLyBzb21lIHByZS1kZWZpbmVkIGNvbG9yIHNjYWxlczpcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vY2hyb21hLmpzJztcbmltcG9ydCAnLi4vaW8vaHNsL2luZGV4LmpzJztcbmltcG9ydCBzY2FsZSBmcm9tICcuLi9nZW5lcmF0b3Ivc2NhbGUuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgY29vbCgpIHtcbiAgICAgICAgcmV0dXJuIHNjYWxlKFtjaHJvbWEuaHNsKDE4MCwgMSwgMC45KSwgY2hyb21hLmhzbCgyNTAsIDAuNywgMC40KV0pO1xuICAgIH0sXG4gICAgaG90KCkge1xuICAgICAgICByZXR1cm4gc2NhbGUoWycjMDAwJywgJyNmMDAnLCAnI2ZmMCcsICcjZmZmJ10sIFswLCAwLjI1LCAwLjc1LCAxXSkubW9kZShcbiAgICAgICAgICAgICdyZ2InXG4gICAgICAgICk7XG4gICAgfVxufTtcbiIsICIvKipcbiAgICBDb2xvckJyZXdlciBjb2xvcnMgZm9yIGNocm9tYS5qc1xuXG4gICAgQ29weXJpZ2h0IChjKSAyMDAyIEN5bnRoaWEgQnJld2VyLCBNYXJrIEhhcnJvd2VyLCBhbmQgVGhlXG4gICAgUGVubnN5bHZhbmlhIFN0YXRlIFVuaXZlcnNpdHkuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWRcbiAgICB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUlxuICAgIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmNvbnN0IGNvbG9yYnJld2VyID0ge1xuICAgIC8vIHNlcXVlbnRpYWxcbiAgICBPclJkOiBbJyNmZmY3ZWMnLCAnI2ZlZThjOCcsICcjZmRkNDllJywgJyNmZGJiODQnLCAnI2ZjOGQ1OScsICcjZWY2NTQ4JywgJyNkNzMwMWYnLCAnI2IzMDAwMCcsICcjN2YwMDAwJ10sXG4gICAgUHVCdTogWycjZmZmN2ZiJywgJyNlY2U3ZjInLCAnI2QwZDFlNicsICcjYTZiZGRiJywgJyM3NGE5Y2YnLCAnIzM2OTBjMCcsICcjMDU3MGIwJywgJyMwNDVhOGQnLCAnIzAyMzg1OCddLFxuICAgIEJ1UHU6IFsnI2Y3ZmNmZCcsICcjZTBlY2Y0JywgJyNiZmQzZTYnLCAnIzllYmNkYScsICcjOGM5NmM2JywgJyM4YzZiYjEnLCAnIzg4NDE5ZCcsICcjODEwZjdjJywgJyM0ZDAwNGInXSxcbiAgICBPcmFuZ2VzOiBbJyNmZmY1ZWInLCAnI2ZlZTZjZScsICcjZmRkMGEyJywgJyNmZGFlNmInLCAnI2ZkOGQzYycsICcjZjE2OTEzJywgJyNkOTQ4MDEnLCAnI2E2MzYwMycsICcjN2YyNzA0J10sXG4gICAgQnVHbjogWycjZjdmY2ZkJywgJyNlNWY1ZjknLCAnI2NjZWNlNicsICcjOTlkOGM5JywgJyM2NmMyYTQnLCAnIzQxYWU3NicsICcjMjM4YjQ1JywgJyMwMDZkMmMnLCAnIzAwNDQxYiddLFxuICAgIFlsT3JCcjogWycjZmZmZmU1JywgJyNmZmY3YmMnLCAnI2ZlZTM5MScsICcjZmVjNDRmJywgJyNmZTk5MjknLCAnI2VjNzAxNCcsICcjY2M0YzAyJywgJyM5OTM0MDQnLCAnIzY2MjUwNiddLFxuICAgIFlsR246IFsnI2ZmZmZlNScsICcjZjdmY2I5JywgJyNkOWYwYTMnLCAnI2FkZGQ4ZScsICcjNzhjNjc5JywgJyM0MWFiNWQnLCAnIzIzODQ0MycsICcjMDA2ODM3JywgJyMwMDQ1MjknXSxcbiAgICBSZWRzOiBbJyNmZmY1ZjAnLCAnI2ZlZTBkMicsICcjZmNiYmExJywgJyNmYzkyNzInLCAnI2ZiNmE0YScsICcjZWYzYjJjJywgJyNjYjE4MWQnLCAnI2E1MGYxNScsICcjNjcwMDBkJ10sXG4gICAgUmRQdTogWycjZmZmN2YzJywgJyNmZGUwZGQnLCAnI2ZjYzVjMCcsICcjZmE5ZmI1JywgJyNmNzY4YTEnLCAnI2RkMzQ5NycsICcjYWUwMTdlJywgJyM3YTAxNzcnLCAnIzQ5MDA2YSddLFxuICAgIEdyZWVuczogWycjZjdmY2Y1JywgJyNlNWY1ZTAnLCAnI2M3ZTljMCcsICcjYTFkOTliJywgJyM3NGM0NzYnLCAnIzQxYWI1ZCcsICcjMjM4YjQ1JywgJyMwMDZkMmMnLCAnIzAwNDQxYiddLFxuICAgIFlsR25CdTogWycjZmZmZmQ5JywgJyNlZGY4YjEnLCAnI2M3ZTliNCcsICcjN2ZjZGJiJywgJyM0MWI2YzQnLCAnIzFkOTFjMCcsICcjMjI1ZWE4JywgJyMyNTM0OTQnLCAnIzA4MWQ1OCddLFxuICAgIFB1cnBsZXM6IFsnI2ZjZmJmZCcsICcjZWZlZGY1JywgJyNkYWRhZWInLCAnI2JjYmRkYycsICcjOWU5YWM4JywgJyM4MDdkYmEnLCAnIzZhNTFhMycsICcjNTQyNzhmJywgJyMzZjAwN2QnXSxcbiAgICBHbkJ1OiBbJyNmN2ZjZjAnLCAnI2UwZjNkYicsICcjY2NlYmM1JywgJyNhOGRkYjUnLCAnIzdiY2NjNCcsICcjNGViM2QzJywgJyMyYjhjYmUnLCAnIzA4NjhhYycsICcjMDg0MDgxJ10sXG4gICAgR3JleXM6IFsnI2ZmZmZmZicsICcjZjBmMGYwJywgJyNkOWQ5ZDknLCAnI2JkYmRiZCcsICcjOTY5Njk2JywgJyM3MzczNzMnLCAnIzUyNTI1MicsICcjMjUyNTI1JywgJyMwMDAwMDAnXSxcbiAgICBZbE9yUmQ6IFsnI2ZmZmZjYycsICcjZmZlZGEwJywgJyNmZWQ5NzYnLCAnI2ZlYjI0YycsICcjZmQ4ZDNjJywgJyNmYzRlMmEnLCAnI2UzMWExYycsICcjYmQwMDI2JywgJyM4MDAwMjYnXSxcbiAgICBQdVJkOiBbJyNmN2Y0ZjknLCAnI2U3ZTFlZicsICcjZDRiOWRhJywgJyNjOTk0YzcnLCAnI2RmNjViMCcsICcjZTcyOThhJywgJyNjZTEyNTYnLCAnIzk4MDA0MycsICcjNjcwMDFmJ10sXG4gICAgQmx1ZXM6IFsnI2Y3ZmJmZicsICcjZGVlYmY3JywgJyNjNmRiZWYnLCAnIzllY2FlMScsICcjNmJhZWQ2JywgJyM0MjkyYzYnLCAnIzIxNzFiNScsICcjMDg1MTljJywgJyMwODMwNmInXSxcbiAgICBQdUJ1R246IFsnI2ZmZjdmYicsICcjZWNlMmYwJywgJyNkMGQxZTYnLCAnI2E2YmRkYicsICcjNjdhOWNmJywgJyMzNjkwYzAnLCAnIzAyODE4YScsICcjMDE2YzU5JywgJyMwMTQ2MzYnXSxcbiAgICBWaXJpZGlzOiBbJyM0NDAxNTQnLCAnIzQ4Mjc3NycsICcjM2Y0YThhJywgJyMzMTY3OGUnLCAnIzI2ODM4ZicsICcjMWY5ZDhhJywgJyM2Y2NlNWEnLCAnI2I2ZGUyYicsICcjZmVlODI1J10sXG5cbiAgICAvLyBkaXZlcmdpbmdcbiAgICBTcGVjdHJhbDogWycjOWUwMTQyJywgJyNkNTNlNGYnLCAnI2Y0NmQ0MycsICcjZmRhZTYxJywgJyNmZWUwOGInLCAnI2ZmZmZiZicsICcjZTZmNTk4JywgJyNhYmRkYTQnLCAnIzY2YzJhNScsICcjMzI4OGJkJywgJyM1ZTRmYTInXSxcbiAgICBSZFlsR246IFsnI2E1MDAyNicsICcjZDczMDI3JywgJyNmNDZkNDMnLCAnI2ZkYWU2MScsICcjZmVlMDhiJywgJyNmZmZmYmYnLCAnI2Q5ZWY4YicsICcjYTZkOTZhJywgJyM2NmJkNjMnLCAnIzFhOTg1MCcsICcjMDA2ODM3J10sXG4gICAgUmRCdTogWycjNjcwMDFmJywgJyNiMjE4MmInLCAnI2Q2NjA0ZCcsICcjZjRhNTgyJywgJyNmZGRiYzcnLCAnI2Y3ZjdmNycsICcjZDFlNWYwJywgJyM5MmM1ZGUnLCAnIzQzOTNjMycsICcjMjE2NmFjJywgJyMwNTMwNjEnXSxcbiAgICBQaVlHOiBbJyM4ZTAxNTInLCAnI2M1MWI3ZCcsICcjZGU3N2FlJywgJyNmMWI2ZGEnLCAnI2ZkZTBlZicsICcjZjdmN2Y3JywgJyNlNmY1ZDAnLCAnI2I4ZTE4NicsICcjN2ZiYzQxJywgJyM0ZDkyMjEnLCAnIzI3NjQxOSddLFxuICAgIFBSR246IFsnIzQwMDA0YicsICcjNzYyYTgzJywgJyM5OTcwYWInLCAnI2MyYTVjZicsICcjZTdkNGU4JywgJyNmN2Y3ZjcnLCAnI2Q5ZjBkMycsICcjYTZkYmEwJywgJyM1YWFlNjEnLCAnIzFiNzgzNycsICcjMDA0NDFiJ10sXG4gICAgUmRZbEJ1OiBbJyNhNTAwMjYnLCAnI2Q3MzAyNycsICcjZjQ2ZDQzJywgJyNmZGFlNjEnLCAnI2ZlZTA5MCcsICcjZmZmZmJmJywgJyNlMGYzZjgnLCAnI2FiZDllOScsICcjNzRhZGQxJywgJyM0NTc1YjQnLCAnIzMxMzY5NSddLFxuICAgIEJyQkc6IFsnIzU0MzAwNScsICcjOGM1MTBhJywgJyNiZjgxMmQnLCAnI2RmYzI3ZCcsICcjZjZlOGMzJywgJyNmNWY1ZjUnLCAnI2M3ZWFlNScsICcjODBjZGMxJywgJyMzNTk3OGYnLCAnIzAxNjY1ZScsICcjMDAzYzMwJ10sXG4gICAgUmRHeTogWycjNjcwMDFmJywgJyNiMjE4MmInLCAnI2Q2NjA0ZCcsICcjZjRhNTgyJywgJyNmZGRiYzcnLCAnI2ZmZmZmZicsICcjZTBlMGUwJywgJyNiYWJhYmEnLCAnIzg3ODc4NycsICcjNGQ0ZDRkJywgJyMxYTFhMWEnXSxcbiAgICBQdU9yOiBbJyM3ZjNiMDgnLCAnI2IzNTgwNicsICcjZTA4MjE0JywgJyNmZGI4NjMnLCAnI2ZlZTBiNicsICcjZjdmN2Y3JywgJyNkOGRhZWInLCAnI2IyYWJkMicsICcjODA3M2FjJywgJyM1NDI3ODgnLCAnIzJkMDA0YiddLFxuXG4gICAgLy8gcXVhbGl0YXRpdmVcbiAgICBTZXQyOiBbJyM2NmMyYTUnLCAnI2ZjOGQ2MicsICcjOGRhMGNiJywgJyNlNzhhYzMnLCAnI2E2ZDg1NCcsICcjZmZkOTJmJywgJyNlNWM0OTQnLCAnI2IzYjNiMyddLFxuICAgIEFjY2VudDogWycjN2ZjOTdmJywgJyNiZWFlZDQnLCAnI2ZkYzA4NicsICcjZmZmZjk5JywgJyMzODZjYjAnLCAnI2YwMDI3ZicsICcjYmY1YjE3JywgJyM2NjY2NjYnXSxcbiAgICBTZXQxOiBbJyNlNDFhMWMnLCAnIzM3N2ViOCcsICcjNGRhZjRhJywgJyM5ODRlYTMnLCAnI2ZmN2YwMCcsICcjZmZmZjMzJywgJyNhNjU2MjgnLCAnI2Y3ODFiZicsICcjOTk5OTk5J10sXG4gICAgU2V0MzogWycjOGRkM2M3JywgJyNmZmZmYjMnLCAnI2JlYmFkYScsICcjZmI4MDcyJywgJyM4MGIxZDMnLCAnI2ZkYjQ2MicsICcjYjNkZTY5JywgJyNmY2NkZTUnLCAnI2Q5ZDlkOScsICcjYmM4MGJkJywgJyNjY2ViYzUnLCAnI2ZmZWQ2ZiddLFxuICAgIERhcmsyOiBbJyMxYjllNzcnLCAnI2Q5NWYwMicsICcjNzU3MGIzJywgJyNlNzI5OGEnLCAnIzY2YTYxZScsICcjZTZhYjAyJywgJyNhNjc2MWQnLCAnIzY2NjY2NiddLFxuICAgIFBhaXJlZDogWycjYTZjZWUzJywgJyMxZjc4YjQnLCAnI2IyZGY4YScsICcjMzNhMDJjJywgJyNmYjlhOTknLCAnI2UzMWExYycsICcjZmRiZjZmJywgJyNmZjdmMDAnLCAnI2NhYjJkNicsICcjNmEzZDlhJywgJyNmZmZmOTknLCAnI2IxNTkyOCddLFxuICAgIFBhc3RlbDI6IFsnI2IzZTJjZCcsICcjZmRjZGFjJywgJyNjYmQ1ZTgnLCAnI2Y0Y2FlNCcsICcjZTZmNWM5JywgJyNmZmYyYWUnLCAnI2YxZTJjYycsICcjY2NjY2NjJ10sXG4gICAgUGFzdGVsMTogWycjZmJiNGFlJywgJyNiM2NkZTMnLCAnI2NjZWJjNScsICcjZGVjYmU0JywgJyNmZWQ5YTYnLCAnI2ZmZmZjYycsICcjZTVkOGJkJywgJyNmZGRhZWMnLCAnI2YyZjJmMiddXG59O1xuXG4vLyBhZGQgbG93ZXJjYXNlIGFsaWFzZXMgZm9yIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hlc1xuZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKGNvbG9yYnJld2VyKSkge1xuICAgIGNvbG9yYnJld2VyW2tleS50b0xvd2VyQ2FzZSgpXSA9IGNvbG9yYnJld2VyW2tleV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9yYnJld2VyO1xuIiwgImltcG9ydCBjaHJvbWEgZnJvbSAnLi9zcmMvY2hyb21hLmpzJztcblxuLy8gZmVlbCBmcmVlIHRvIGNvbW1lbnQgb3V0IGFueXRoaW5nIHRvIHJvbGx1cFxuLy8gYSBzbWFsbGVyIGNocm9tYS5qcyBidWlsdFxuXG4vLyBpbyAtLT4gY29udmVydCBjb2xvcnNcbmltcG9ydCAnLi9zcmMvaW8vY215ay9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL2Nzcy9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL2dsL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vaGNnL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vaGV4L2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vaHNpL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vaHNsL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vaHN2L2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vbGFiL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vbmFtZWQvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9udW0vaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9yZ2IvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby90ZW1wL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vb2tsYWIvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9va2xjaC9pbmRleC5qcyc7XG5cbi8vIG9wZXJhdG9ycyAtLT4gbW9kaWZ5IGV4aXN0aW5nIENvbG9yc1xuaW1wb3J0ICcuL3NyYy9vcHMvYWxwaGEuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvY2xpcHBlZC5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9kYXJrZW4uanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvZ2V0LmpzJztcbmltcG9ydCAnLi9zcmMvb3BzL2x1bWluYW5jZS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9taXguanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvcHJlbXVsdGlwbHkuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvc2F0dXJhdGUuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvc2V0LmpzJztcbmltcG9ydCAnLi9zcmMvb3BzL3NoYWRlLmpzJztcblxuLy8gaW50ZXJwb2xhdG9yc1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvcmdiLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL2xyZ2IuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvbGFiLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL2xjaC5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9udW0uanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvaGNnLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL2hzaS5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9oc2wuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvaHN2LmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL29rbGFiLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL29rbGNoLmpzJztcblxuLy8gZ2VuZXJhdG9ycyAtLSA+IGNyZWF0ZSBuZXcgY29sb3JzXG5pbXBvcnQgYXZlcmFnZSBmcm9tICcuL3NyYy9nZW5lcmF0b3IvYXZlcmFnZS5qcyc7XG5pbXBvcnQgYmV6aWVyIGZyb20gJy4vc3JjL2dlbmVyYXRvci9iZXppZXIuanMnO1xuaW1wb3J0IGJsZW5kIGZyb20gJy4vc3JjL2dlbmVyYXRvci9ibGVuZC5qcyc7XG5pbXBvcnQgY3ViZWhlbGl4IGZyb20gJy4vc3JjL2dlbmVyYXRvci9jdWJlaGVsaXguanMnO1xuaW1wb3J0IG1peCBmcm9tICcuL3NyYy9nZW5lcmF0b3IvbWl4LmpzJztcbmltcG9ydCByYW5kb20gZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL3JhbmRvbS5qcyc7XG5pbXBvcnQgc2NhbGUgZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL3NjYWxlLmpzJztcblxuLy8gb3RoZXIgdXRpbGl0eSBtZXRob2RzXG5pbXBvcnQgeyBhbmFseXplIH0gZnJvbSAnLi9zcmMvdXRpbHMvYW5hbHl6ZS5qcyc7XG5pbXBvcnQgY29udHJhc3QgZnJvbSAnLi9zcmMvdXRpbHMvY29udHJhc3QuanMnO1xuaW1wb3J0IGRlbHRhRSBmcm9tICcuL3NyYy91dGlscy9kZWx0YS1lLmpzJztcbmltcG9ydCBkaXN0YW5jZSBmcm9tICcuL3NyYy91dGlscy9kaXN0YW5jZS5qcyc7XG5pbXBvcnQgeyBsaW1pdHMgfSBmcm9tICcuL3NyYy91dGlscy9hbmFseXplLmpzJztcbmltcG9ydCB2YWxpZCBmcm9tICcuL3NyYy91dGlscy92YWxpZC5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi9zcmMvaW8vaW5wdXQuanMnO1xuXG4vLyBzY2FsZVxuaW1wb3J0IHNjYWxlcyBmcm9tICcuL3NyYy91dGlscy9zY2FsZXMuanMnO1xuXG4vLyBjb2xvcnNcbmltcG9ydCBjb2xvcnMgZnJvbSAnLi9zcmMvY29sb3JzL3czY3gxMS5qcyc7XG5pbXBvcnQgYnJld2VyIGZyb20gJy4vc3JjL2NvbG9ycy9jb2xvcmJyZXdlci5qcyc7XG5cbk9iamVjdC5hc3NpZ24oY2hyb21hLCB7XG4gICAgYXZlcmFnZSxcbiAgICBiZXppZXIsXG4gICAgYmxlbmQsXG4gICAgY3ViZWhlbGl4LFxuICAgIG1peCxcbiAgICBpbnRlcnBvbGF0ZTogbWl4LFxuICAgIHJhbmRvbSxcbiAgICBzY2FsZSxcbiAgICBhbmFseXplLFxuICAgIGNvbnRyYXN0LFxuICAgIGRlbHRhRSxcbiAgICBkaXN0YW5jZSxcbiAgICBsaW1pdHMsXG4gICAgdmFsaWQsXG4gICAgc2NhbGVzLFxuICAgIGlucHV0LFxuICAgIGNvbG9ycyxcbiAgICBicmV3ZXJcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjaHJvbWE7XG4iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuZXhwb3J0IHZhciBNSURfQ09MT1JfU1RPUCA9ICcjRUJFRkY1JztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGFuIGFycmF5IG9mIGNvbG9ycyBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBpbnRlcnBvbGF0ZWRcbiAqIGNvbG9ycyBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHN0ZXBzL2xlbiBuZWVkZWQgZm9yIHVzZSBpbiBVSSBlbGVtZW50cyBzdWNoIGFzIGNoYXJ0cy5cbiAqIERlcml2ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZ2thL3BhbGV0dGVzIChVbmxpY2Vuc2VkKVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xvclBhbGV0dGUoXG4vKipcbiAqIFRoZSBtYWluIGNvbG9yIGNvZGUgb3IgYXJyYXkgb2YgY29kZXNcbiAqL1xuY29sb3JzKSB7XG4gIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDEwO1xuICB2YXIgZGl2ZXJnaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgdmFyIGNhdGVnb3JpY2FsID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBmYWxzZTtcbiAgdmFyIGhleFN0YXJ0ID0gY29sb3JzLnNsaWNlKCk7XG4gIHZhciBoZXhFbmQgPSBbXTtcbiAgdmFyIGV2ZW4gPSBsZW4gJSAyID09PSAwO1xuICB2YXIgbnVtQ29sb3JzTGVmdCA9IGRpdmVyZ2luZyA/IE1hdGguY2VpbChsZW4gLyAyKSArIChldmVuID8gMSA6IDApIDogbGVuO1xuICB2YXIgbnVtQ29sb3JzUmlnaHQgPSBkaXZlcmdpbmcgPyBNYXRoLmNlaWwobGVuIC8gMikgKyAoZXZlbiA/IDEgOiAwKSA6IDA7XG5cbiAgLy8gSWYgb25seSBhIHNpbmdsZSBjb2xvciBpcyBwcm92aWRlZCBwcmVwZW5kIHRoZSBtaWQtcG9pbnQgY29sb3JcbiAgaWYgKGhleFN0YXJ0Lmxlbmd0aCA9PT0gMSkge1xuICAgIGhleFN0YXJ0LnVuc2hpZnQoTUlEX0NPTE9SX1NUT1ApO1xuICB9XG5cbiAgLy8gSWYgZGl2ZXJnaW5nLCBzcGxpdCB0aGUgc3RhcnQgYXJyYXkgYW5kIGR1cGxpY2F0ZSB0aGUgbWlkIGNvbG9yXG4gIGlmIChkaXZlcmdpbmcpIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIG1pZHBvaW50LCBjcmVhdGUgb25lXG4gICAgaWYgKGhleFN0YXJ0Lmxlbmd0aCA8IDMpIHtcbiAgICAgIGhleFN0YXJ0WzJdID0gaGV4U3RhcnRbMV07XG4gICAgICBoZXhTdGFydFsxXSA9IE1JRF9DT0xPUl9TVE9QO1xuICAgIH1cbiAgICB2YXIgbnVtQ29sb3JzSGFsZiA9IE1hdGguY2VpbChoZXhTdGFydC5sZW5ndGggLyAyKTtcbiAgICB2YXIgY29sb3JzTGVmdCA9IGhleFN0YXJ0LmZpbHRlcihmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgIGlmIChpbmRleCA8IG51bUNvbG9yc0hhbGYpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIGtlZXAgaXRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB2YXIgY29sb3JzUmlnaHQgPSBoZXhTdGFydC5yZXZlcnNlKCkuZmlsdGVyKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKGluZGV4IDwgbnVtQ29sb3JzSGFsZikge1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8ga2VlcCBpdFxuICAgICAgfVxuICAgIH0pLnJldmVyc2UoKTtcbiAgICBoZXhTdGFydCA9IGNvbG9yc0xlZnQ7XG4gICAgaGV4RW5kID0gY29sb3JzUmlnaHQ7XG4gIH1cbiAgZnVuY3Rpb24gY3JlYXRlU3RlcHMoY29sb3JzLCBzdGVwcykge1xuICAgIGlmICghY29sb3JzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGNvbG9ycztcbiAgICB9XG4gICAgaWYgKCFjYXRlZ29yaWNhbCkge1xuICAgICAgcmV0dXJuIGNocm9tYS5iZXppZXIoY29sb3JzKS5zY2FsZSgpLmNvcnJlY3RMaWdodG5lc3MoKS5jb2xvcnMoc3RlcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2hyb21hLnNjYWxlKGNvbG9ycykuY29sb3JzKHN0ZXBzKTtcbiAgICB9XG4gIH1cbiAgdmFyIHN0ZXBzTGVmdCA9IGNyZWF0ZVN0ZXBzKGhleFN0YXJ0LCBudW1Db2xvcnNMZWZ0KTtcbiAgdmFyIHN0ZXBzUmlnaHQgPSBjcmVhdGVTdGVwcyhoZXhFbmQsIG51bUNvbG9yc1JpZ2h0KTtcbiAgcmV0dXJuIChldmVuICYmIGRpdmVyZ2luZyA/IHN0ZXBzTGVmdC5zbGljZSgwLCBzdGVwc0xlZnQubGVuZ3RoIC0gMSkgOiBzdGVwc0xlZnQpLmNvbmNhdChzdGVwc1JpZ2h0LnNsaWNlKDEpKTtcbn0iLCAiZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCB7IGNvbG9yUGFsZXR0ZSB9IGZyb20gJy4vY29sb3JfcGFsZXR0ZSc7XG52YXIgZmxhdHRlbiA9IGZ1bmN0aW9uIGZsYXR0ZW4oYXJyKSB7XG4gIHZhciBfcmVmO1xuICByZXR1cm4gKF9yZWYgPSBbXSkuY29uY2F0LmFwcGx5KF9yZWYsIF90b0NvbnN1bWFibGVBcnJheShhcnIpKTtcbn07XG52YXIgZXVpUGFsZXR0ZSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGUoY29sb3JzLCBzdGVwcykge1xuICB2YXIgZGl2ZXJnZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gIHZhciBjYXRlZ29yaWNhbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogdHJ1ZTtcbiAgLy8gVGhpcyBmdW5jdGlvbiBhbHNvIHRyaW1zIHRoZSBmaXJzdCBjb2xvciBzbyB3aGl0ZS9ibGFjayBpcyBuZXZlciBhIGNvbG9yXG4gIGlmICghZGl2ZXJnZSAmJiBzdGVwcyA+IDEpIHtcbiAgICB2YXIgcGFsZXR0ZSA9IGNvbG9yUGFsZXR0ZShjb2xvcnMsIHN0ZXBzICsgMSk7XG4gICAgcGFsZXR0ZS5zaGlmdCgpO1xuICAgIHJldHVybiBwYWxldHRlO1xuICB9XG4gIHJldHVybiBjb2xvclBhbGV0dGUoY29sb3JzLCBzdGVwcywgZGl2ZXJnZSwgY2F0ZWdvcmljYWwpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvbG9yQmxpbmQgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29sb3JCbGluZCgpIHtcbiAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICBfcmVmMiRyb3RhdGlvbnMgPSBfcmVmMi5yb3RhdGlvbnMsXG4gICAgcm90YXRpb25zID0gX3JlZjIkcm90YXRpb25zID09PSB2b2lkIDAgPyAxIDogX3JlZjIkcm90YXRpb25zLFxuICAgIF9yZWYyJG9yZGVyID0gX3JlZjIub3JkZXIsXG4gICAgb3JkZXIgPSBfcmVmMiRvcmRlciA9PT0gdm9pZCAwID8gJ2FwcGVuZCcgOiBfcmVmMiRvcmRlcixcbiAgICBfcmVmMiRkaXJlY3Rpb24gPSBfcmVmMi5kaXJlY3Rpb24sXG4gICAgZGlyZWN0aW9uID0gX3JlZjIkZGlyZWN0aW9uID09PSB2b2lkIDAgPyAnbGlnaHRlcicgOiBfcmVmMiRkaXJlY3Rpb24sXG4gICAgX3JlZjIkc29ydEJ5ID0gX3JlZjIuc29ydEJ5LFxuICAgIHNvcnRCeSA9IF9yZWYyJHNvcnRCeSA9PT0gdm9pZCAwID8gJ2RlZmF1bHQnIDogX3JlZjIkc29ydEJ5LFxuICAgIF9yZWYyJHNvcnRTaGlmdCA9IF9yZWYyLnNvcnRTaGlmdCxcbiAgICBzb3J0U2hpZnQgPSBfcmVmMiRzb3J0U2hpZnQgPT09IHZvaWQgMCA/ICctMTAwJyA6IF9yZWYyJHNvcnRTaGlmdDtcbiAgdmFyIGNvbG9ycyA9IFtdO1xuICB2YXIgYmFzZSA9IFsnIzU0QjM5OScsXG4gIC8vIDAgZ3JlZW5cbiAgJyM2MDkyQzAnLFxuICAvLyAxIGJsdWVcbiAgJyNEMzYwODYnLFxuICAvLyAyIGRhcmsgcGlua1xuICAnIzkxNzBCOCcsXG4gIC8vIDMgcHVycGxlXG4gICcjQ0E4RUFFJyxcbiAgLy8gNCBsaWdodCBwaW5rXG4gICcjRDZCRjU3JyxcbiAgLy8gNSB5ZWxsb3dcbiAgJyNCOUE4ODgnLFxuICAvLyA2IHRhblxuICAnI0RBOEI0NScsXG4gIC8vIDcgb3JhbmdlXG4gICcjQUE2NTU2JyxcbiAgLy8gOCBicm93blxuICAnI0U3NjY0QycgLy8gOSByZWRcbiAgXTtcbiAgaWYgKHNvcnRCeSA9PT0gJ25hdHVyYWwnKSB7XG4gICAgLy8gU29ydCB0aGUgY29sb3JzIGJhc2VkIG9uIHRoZSBjb2xvciB3aGVlbCwgYnV0IHNoaWZ0aW5nIHRoZSB2YWx1ZXMgYmFzZWQgb24gc29ydFNoaWZ0XG4gICAgYmFzZSA9IF90b0NvbnN1bWFibGVBcnJheShiYXNlKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gY2hyb21hKGEpLnNldCgnaHNsLmgnLCBzb3J0U2hpZnQpLmhzbCgpWzBdIC0gY2hyb21hKGIpLnNldCgnaHNsLmgnLCBzb3J0U2hpZnQpLmhzbCgpWzBdO1xuICAgIH0pO1xuICB9XG4gIGlmIChyb3RhdGlvbnMgPiAxKSB7XG4gICAgdmFyIHBhbGV0dGVzID0gYmFzZS5tYXAoZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGRhcmtlc3QgYW5kIGxpZ2h0ZXN0IHZlcnNpb25zIG9mIGVhY2ggY29sb3IgdXNpbmcgYmxhY2sgYW5kIHdoaXRlXG4gICAgICB2YXIgcGFsZXR0ZSA9IGNvbG9yUGFsZXR0ZShbJ2JsYWNrJywgY29sb3IsICd3aGl0ZSddLCA1LCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAvLyBUaGVuIHJlbW92aW5nIHRoZSBleHRyZW1lc1xuICAgICAgcGFsZXR0ZS5wb3AoKTtcbiAgICAgIHBhbGV0dGUuc2hpZnQoKTtcbiAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2xpZ2h0ZXInOlxuICAgICAgICAgIHJldHVybiBjb2xvclBhbGV0dGUoW3BhbGV0dGVbMV0sIHBhbGV0dGVbMl1dLCByb3RhdGlvbnMsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgY2FzZSAnZGFya2VyJzpcbiAgICAgICAgICByZXR1cm4gY29sb3JQYWxldHRlKFtwYWxldHRlWzFdLCBwYWxldHRlWzBdXSwgcm90YXRpb25zLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICAgIHJldHVybiBjb2xvclBhbGV0dGUocGFsZXR0ZSwgcm90YXRpb25zLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKG9yZGVyID09PSAnZ3JvdXAnKSB7XG4gICAgICBjb2xvcnMgPSBmbGF0dGVuKHBhbGV0dGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICB2YXIgX2NvbG9ycztcbiAgICAgICAgdmFyIHJvdGF0aW9uID0gcGFsZXR0ZXMubWFwKGZ1bmN0aW9uIChwYWxldHRlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhbGV0dGVbaV07XG4gICAgICAgIH0pO1xuICAgICAgICAoX2NvbG9ycyA9IGNvbG9ycykucHVzaC5hcHBseShfY29sb3JzLCBfdG9Db25zdW1hYmxlQXJyYXkocm90YXRpb24pKTtcbiAgICAgIH07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvdGF0aW9uczsgaSsrKSB7XG4gICAgICAgIF9sb29wKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb2xvcnMgPSBiYXNlO1xuICB9XG4gIHJldHVybiBjb2xvcnM7XG59O1xuXG4vKipcbiAqIENvbG9yIGJsaW5kIHBhbGV0dGUgd2l0aCB0ZXh0IGlzIG1lYW50IGZvciB1c2Ugd2hlbiB0ZXh0IGlzIGFwcGxpZWQgb24gdG9wIG9mIHRoZSBjb2xvci5cbiAqIEl0IGluY3JlYXNlcyB0aGUgYnJpZ2h0bmVzcyBvZiB0aGUgY29sb3IgdG8gZ2l2ZSB0aGUgdGV4dCBtb3JlIGNvbnRyYXN0LlxuICovXG5leHBvcnQgdmFyIGV1aVBhbGV0dGVDb2xvckJsaW5kQmVoaW5kVGV4dCA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVDb2xvckJsaW5kQmVoaW5kVGV4dCgpIHtcbiAgdmFyIHBhbGV0dGVQcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciBvcmlnaW5hbFBhbGV0dGUgPSBldWlQYWxldHRlQ29sb3JCbGluZChwYWxldHRlUHJvcHMpO1xuICB2YXIgbmV3UGFsZXR0ZSA9IG9yaWdpbmFsUGFsZXR0ZS5tYXAoZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgcmV0dXJuIGNocm9tYShjb2xvcikuYnJpZ2h0ZW4oMC41KS5oZXgoKTtcbiAgfSk7XG4gIHJldHVybiBuZXdQYWxldHRlO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUZvckxpZ2h0QmFja2dyb3VuZCA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVGb3JMaWdodEJhY2tncm91bmQoKSB7XG4gIHJldHVybiBbJyMwMDZCQjQnLCAnIzAxN0Q3MycsICcjRjVBNzAwJywgJyNCRDI3MUUnLCAnI0REMEE3MyddO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUZvckRhcmtCYWNrZ3JvdW5kID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUZvckRhcmtCYWNrZ3JvdW5kKCkge1xuICByZXR1cm4gWycjMUJBOUY1JywgJyM3REUyRDEnLCAnI0Y5OTBDMCcsICcjRjY2JywgJyNGRkNFN0EnXTtcbn07XG52YXIgZ3JlZW5Db2xvciA9ICcjMjA5MjgwJztcbnZhciByZWRDb2xvciA9ICcjQ0M1NjQyJztcbnZhciBsaWdodFJlZENvbG9yID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs5XTtcbnZhciBjb29sQXJyYXkgPSBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVsxXSwgJyM2MDkyQzAnXTtcbnZhciB3YXJtQXJyYXkgPSBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs3XSwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs5XV07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVGb3JTdGF0dXMgPSBmdW5jdGlvbiBldWlQYWxldHRlRm9yU3RhdHVzKHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbZ3JlZW5Db2xvcl07XG4gIH1cbiAgaWYgKHN0ZXBzIDw9IDMpIHtcbiAgICByZXR1cm4gZXVpUGFsZXR0ZShbZ3JlZW5Db2xvciwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs1XSwgcmVkQ29sb3JdLCBzdGVwcywgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW2dyZWVuQ29sb3IsIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbMF0sIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbNV0sIGxpZ2h0UmVkQ29sb3IsIHJlZENvbG9yXSwgc3RlcHMsIHRydWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUZvclRlbXBlcmF0dXJlID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUZvclRlbXBlcmF0dXJlKHN0ZXBzKSB7XG4gIHZhciBjb29scyA9IGNvbG9yUGFsZXR0ZShbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNvb2xBcnJheS5zbGljZSgpLnJldmVyc2UoKSksIFsnI0VCRUZGNSddKSwgMyk7XG4gIHZhciB3YXJtcyA9IGNvbG9yUGFsZXR0ZShbJyNGNEYzREInXS5jb25jYXQod2FybUFycmF5KSwgMyk7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbY29vbHNbMF1dO1xuICB9IGVsc2UgaWYgKHN0ZXBzIDw9IDMpIHtcbiAgICByZXR1cm4gZXVpUGFsZXR0ZShbY29vbHNbMF0sIGxpZ2h0UmVkQ29sb3JdLCBzdGVwcywgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjb29scyksIF90b0NvbnN1bWFibGVBcnJheSh3YXJtcykpLCBzdGVwcywgdHJ1ZSk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlQ29tcGxlbWVudGFyeSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVDb21wbGVtZW50YXJ5KHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVsxXV07XG4gIH1cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW2V1aVBhbGV0dGVDb2xvckJsaW5kKClbMV0sIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbN11dLCBzdGVwcywgdHJ1ZSk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlUmVkID0gZnVuY3Rpb24gZXVpUGFsZXR0ZVJlZChzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2xpZ2h0UmVkQ29sb3JdO1xuICB9XG4gIHJldHVybiBldWlQYWxldHRlKFsnd2hpdGUnLCByZWRDb2xvcl0sIHN0ZXBzKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVHcmVlbiA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVHcmVlbihzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2V1aVBhbGV0dGVDb2xvckJsaW5kKClbMF1dO1xuICB9XG4gIHJldHVybiBldWlQYWxldHRlKFsnd2hpdGUnLCBncmVlbkNvbG9yXSwgc3RlcHMpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvb2wgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29vbChzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2Nvb2xBcnJheVsxXV07XG4gIH1cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWyd3aGl0ZSddLmNvbmNhdChjb29sQXJyYXkpLCBzdGVwcyk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlV2FybSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVXYXJtKHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbbGlnaHRSZWRDb2xvcl07XG4gIH1cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWycjRkJGQkRDJ10uY29uY2F0KHdhcm1BcnJheSksIHN0ZXBzKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVHcmF5ID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUdyYXkoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFsnIzk4YTJiMyddO1xuICB9XG4gIHJldHVybiBldWlQYWxldHRlKFsnd2hpdGUnLCAnI2QzZGFlNicsICcjOThhMmIzJywgJyM2OTcwN2QnLCAnIzM0Mzc0MSddLCBzdGVwcywgZmFsc2UpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsgaXNWYWxpZEhleCB9IGZyb20gJy4vaXNfdmFsaWRfaGV4JztcbnZhciBpbk9yaWdpbmFsRm9ybWF0ID0gZnVuY3Rpb24gaW5PcmlnaW5hbEZvcm1hdChvcmlnaW5hbENvbG9yLCBuZXdDb2xvcikge1xuICByZXR1cm4gaXNWYWxpZEhleChvcmlnaW5hbENvbG9yKSA/IG5ld0NvbG9yLmhleCgpIDogbmV3Q29sb3IuY3NzKCk7XG59O1xuXG4vKipcbiAqIE1ha2VzIGEgY29sb3IgbW9yZSB0cmFuc3BhcmVudC5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbHBoYSAtIGFscGhhIGNoYW5uZWwgdmFsdWUuIEZyb20gMC0xLlxuICovXG5leHBvcnQgdmFyIHRyYW5zcGFyZW50aXplID0gZnVuY3Rpb24gdHJhbnNwYXJlbnRpemUoY29sb3IsIGFscGhhKSB7XG4gIHJldHVybiBjaHJvbWEoY29sb3IpLmFscGhhKGFscGhhKS5jc3MoKTtcbn07XG5cbi8qKlxuICogTWl4ZXMgYSBwcm92aWRlZCBjb2xvciB3aXRoIHdoaXRlLlxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWl4IHdpdGggd2hpdGVcbiAqIEBwYXJhbSByYXRpbyAtIE1peCB3ZWlnaHQuIEZyb20gMC0xLiBMYXJnZXIgdmFsdWUgaW5kaWNhdGVzIG1vcmUgd2hpdGUuXG4gKi9cbmV4cG9ydCB2YXIgdGludCA9IGZ1bmN0aW9uIHRpbnQoY29sb3IsIHJhdGlvKSB7XG4gIHZhciB0aW50ID0gY2hyb21hLm1peChjb2xvciwgJyNmZmYnLCByYXRpbywgJ3JnYicpO1xuICByZXR1cm4gaW5PcmlnaW5hbEZvcm1hdChjb2xvciwgdGludCk7XG59O1xuXG4vKipcbiAqIE1peGVzIGEgcHJvdmlkZWQgY29sb3Igd2l0aCBibGFjay5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1peCB3aXRoIGJsYWNrXG4gKiBAcGFyYW0gcmF0aW8gLSBNaXggd2VpZ2h0LiBGcm9tIDAtMS4gTGFyZ2VyIHZhbHVlIGluZGljYXRlcyBtb3JlIGJsYWNrLlxuICovXG5leHBvcnQgdmFyIHNoYWRlID0gZnVuY3Rpb24gc2hhZGUoY29sb3IsIHJhdGlvKSB7XG4gIHZhciBzaGFkZSA9IGNocm9tYS5taXgoY29sb3IsICcjMDAwJywgcmF0aW8sICdyZ2InKTtcbiAgcmV0dXJuIGluT3JpZ2luYWxGb3JtYXQoY29sb3IsIHNoYWRlKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdGludGVkIGNvbG9yIGZvciBsaWdodCBtb2RlIGFuZCBzaGFkZWQgY29sb3IgZm9yIGRhcmsgbW9kZVxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWl4IHdpdGggd2hpdGVcbiAqIEBwYXJhbSByYXRpbyAtIE1peCB3ZWlnaHQuIEZyb20gMC0xLiBMYXJnZXIgdmFsdWUgaW5kaWNhdGVzIG1vcmUgd2hpdGUuXG4gKiBAcGFyYW0gY29sb3JNb2RlIC0gTGlnaHQgb3IgZGFyayBvbmx5XG4gKi9cbmV4cG9ydCB2YXIgdGludE9yU2hhZGUgPSBmdW5jdGlvbiB0aW50T3JTaGFkZShjb2xvciwgcmF0aW8sIGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShjb2xvciwgcmF0aW8pIDogdGludChjb2xvciwgcmF0aW8pO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzaGFkZWQgY29sb3IgZm9yIGxpZ2h0IG1vZGUgYW5kIHRpbnRlZCBjb2xvciBmb3IgZGFyayBtb2RlXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtaXggd2l0aCB3aGl0ZVxuICogQHBhcmFtIHJhdGlvIC0gTWl4IHdlaWdodC4gRnJvbSAwLTEuIExhcmdlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSB3aGl0ZS5cbiAqIEBwYXJhbSBjb2xvck1vZGUgLSBMaWdodCBvciBkYXJrIG9ubHlcbiAqL1xuZXhwb3J0IHZhciBzaGFkZU9yVGludCA9IGZ1bmN0aW9uIHNoYWRlT3JUaW50KGNvbG9yLCByYXRpbywgY29sb3JNb2RlKSB7XG4gIHJldHVybiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHRpbnQoY29sb3IsIHJhdGlvKSA6IHNoYWRlKGNvbG9yLCByYXRpbyk7XG59O1xuXG4vKipcbiAqIEluY3JlYXNlcyB0aGUgc2F0dXJhdGlvbiBvZiBhIGNvbG9yIGJ5IG1hbmlwdWxhdGluZyB0aGUgaHNsIHNhdHVyYXRpb24uXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gYW1vdW50IC0gQW1vdW50IHRvIGNoYW5nZSBpbiBhYnNvbHV0ZSB0ZXJtcy4gMC0xLlxuICovXG5leHBvcnQgdmFyIHNhdHVyYXRlID0gZnVuY3Rpb24gc2F0dXJhdGUoY29sb3IsIGFtb3VudCkge1xuICB2YXIgc2F0dXJhdGUgPSBjaHJvbWEoY29sb3IpLnNldCgnaHNsLnMnLCBcIitcIi5jb25jYXQoYW1vdW50KSk7XG4gIHJldHVybiBpbk9yaWdpbmFsRm9ybWF0KGNvbG9yLCBzYXR1cmF0ZSk7XG59O1xuXG4vKipcbiAqIERlY3JlYXNlcyB0aGUgc2F0dXJhdGlvbiBvZiBhIGNvbG9yIGJ5IG1hbmlwdWxhdGluZyB0aGUgaHNsIHNhdHVyYXRpb24uXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gYW1vdW50IC0gQW1vdW50IHRvIGNoYW5nZSBpbiBhYnNvbHV0ZSB0ZXJtcy4gMC0xLlxuICovXG5leHBvcnQgdmFyIGRlc2F0dXJhdGUgPSBmdW5jdGlvbiBkZXNhdHVyYXRlKGNvbG9yLCBhbW91bnQpIHtcbiAgdmFyIGRlc2F0dXJhdGUgPSBjaHJvbWEoY29sb3IpLnNldCgnaHNsLnMnLCBcIi1cIi5jb25jYXQoYW1vdW50KSk7XG4gIHJldHVybiBpbk9yaWdpbmFsRm9ybWF0KGNvbG9yLCBkZXNhdHVyYXRlKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGlnaHRuZXNzIHZhbHVlIG9mIGEgY29sb3IuIDAtMTAwXG4gKiBAcGFyYW0gY29sb3JcbiAqL1xuZXhwb3J0IHZhciBsaWdodG5lc3MgPSBmdW5jdGlvbiBsaWdodG5lc3MoY29sb3IpIHtcbiAgcmV0dXJuIGNocm9tYShjb2xvcikuZ2V0KCdoc2wubCcpICogMTAwO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkYXJrZW4gdmFsdWUgb2YgYSBjb2xvci4gMC0xMDBcbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEuXG4gKi9cbmV4cG9ydCB2YXIgZGFya2VuID0gZnVuY3Rpb24gZGFya2VuKGNvbG9yLCBhbW91bnQpIHtcbiAgcmV0dXJuIGNocm9tYShjb2xvcikuZGFya2VuKGFtb3VudCkuaGV4KCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJyaWdodGVuIHZhbHVlIG9mIGEgY29sb3IuIDAtMTAwXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gYW1vdW50IC0gQW1vdW50IHRvIGNoYW5nZSBpbiBhYnNvbHV0ZSB0ZXJtcy4gMC0xLlxuICovXG5leHBvcnQgdmFyIGJyaWdodGVuID0gZnVuY3Rpb24gYnJpZ2h0ZW4oY29sb3IsIGFtb3VudCkge1xuICByZXR1cm4gY2hyb21hKGNvbG9yKS5icmlnaHRlbihhbW91bnQpLmhleCgpO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQsIGxpZ2h0bmVzcyBhcyBnZXRMaWdodG5lc3MgfSBmcm9tICcuL21hbmlwdWxhdGlvbic7XG5pbXBvcnQgeyBnZXRPbiB9IGZyb20gJy4uL3RoZW1lL3V0aWxzJztcbmV4cG9ydCB2YXIgd2NhZ0NvbnRyYXN0TWluID0gNC41OyAvLyBXQ0FHIEFBIG1pbmltdW0gY29udHJhc3QgcmF0aW8gZm9yIG5vcm1hbCAobm9uLWxhcmdlKSB0ZXh0XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBjb2xvciB0aGF0IG1lZXRzIG9yIGV4Y2VlZHMgV0NBRyBsZXZlbCBBQVxuICogQHBhcmFtIGZvcmVncm91bmQgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEwLlxuICogKlxuICogQHBhcmFtIHRoZW1lT3JCYWNrZ3JvdW5kIC0gQ29sb3IgdG8gdXNlIGFzIHRoZSBjb250cmFzdCBiYXNpcyBvciBqdXN0IHBhc3MgRXVpVGhlbWVcbiAqL1xuZXhwb3J0IHZhciBtYWtlSGlnaENvbnRyYXN0Q29sb3IgPSBmdW5jdGlvbiBtYWtlSGlnaENvbnRyYXN0Q29sb3IoX2ZvcmVncm91bmQpIHtcbiAgdmFyIHJhdGlvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiA0Ljg1O1xuICByZXR1cm4gZnVuY3Rpb24gKHRoZW1lT3JCYWNrZ3JvdW5kKSB7XG4gICAgdmFyIF9nZXRPbjtcbiAgICB2YXIgZm9yZWdyb3VuZCA9IF90eXBlb2YodGhlbWVPckJhY2tncm91bmQpID09PSAnb2JqZWN0JyA/IChfZ2V0T24gPSBnZXRPbih0aGVtZU9yQmFja2dyb3VuZCwgX2ZvcmVncm91bmQpKSAhPT0gbnVsbCAmJiBfZ2V0T24gIT09IHZvaWQgMCA/IF9nZXRPbiA6IF9mb3JlZ3JvdW5kIDogX2ZvcmVncm91bmQ7XG4gICAgdmFyIGJhY2tncm91bmQgPSBfdHlwZW9mKHRoZW1lT3JCYWNrZ3JvdW5kKSA9PT0gJ29iamVjdCcgPyB0aGVtZU9yQmFja2dyb3VuZC5jb2xvcnMuYm9keSA6IHRoZW1lT3JCYWNrZ3JvdW5kO1xuICAgIGlmIChjaHJvbWEoZm9yZWdyb3VuZCkuYWxwaGEoKSA8IDEgfHwgY2hyb21hKGJhY2tncm91bmQpLmFscGhhKCkgPCAxKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJDb250cmFzdCBjYW5ub3QgYmUgYWNjdXJhdGVseSBjYWxjdWxhdGVkIHdoZW4gY29sb3JzIGhhdmUgYWxwaGEgY2hhbm5lbCBvcGFjaXR5LiBNYWtlIHN1cmUgdGhlIHByb3ZpZGVkIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzIGhhdmUgbm8gdHJhbnNwYXJlbmN5OlxcblxcbkZvcmVncm91bmQ6IFwiLmNvbmNhdChmb3JlZ3JvdW5kLCBcIlxcbkJhY2tncm91bmQ6IFwiKS5jb25jYXQoYmFja2dyb3VuZCkpO1xuICAgIH1cbiAgICB2YXIgY29udHJhc3QgPSBjaHJvbWEuY29udHJhc3QoZm9yZWdyb3VuZCwgYmFja2dyb3VuZCk7XG5cbiAgICAvLyBEZXRlcm1pbmUgdGhlIGxpZ2h0bmVzcyBmYWN0b3Igb2YgdGhlIGJhY2tncm91bmQgY29sb3IgZmlyc3QgdG9cbiAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0byBzaGFkZSBvciB0aW50IHRoZSBmb3JlZ3JvdW5kLlxuICAgIHZhciBicmlnaHRuZXNzID0gZ2V0TGlnaHRuZXNzKGJhY2tncm91bmQpO1xuICAgIHZhciBoaWdoQ29udHJhc3RUZXh0Q29sb3IgPSBmb3JlZ3JvdW5kO1xuICAgIHdoaWxlIChjb250cmFzdCA8IHJhdGlvKSB7XG4gICAgICBpZiAoYnJpZ2h0bmVzcyA+IDUwKSB7XG4gICAgICAgIGhpZ2hDb250cmFzdFRleHRDb2xvciA9IHNoYWRlKGhpZ2hDb250cmFzdFRleHRDb2xvciwgMC4wNSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdoQ29udHJhc3RUZXh0Q29sb3IgPSB0aW50KGhpZ2hDb250cmFzdFRleHRDb2xvciwgMC4wNSk7XG4gICAgICB9XG4gICAgICBjb250cmFzdCA9IGNocm9tYS5jb250cmFzdChoaWdoQ29udHJhc3RUZXh0Q29sb3IsIGJhY2tncm91bmQpO1xuICAgICAgdmFyIGxpZ2h0bmVzcyA9IGdldExpZ2h0bmVzcyhoaWdoQ29udHJhc3RUZXh0Q29sb3IpO1xuICAgICAgaWYgKGxpZ2h0bmVzcyA8IDUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdIaWdoIGVub3VnaCBjb250cmFzdCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4gTW9zdCBsaWtlbHkgeW91ciBiYWNrZ3JvdW5kIGNvbG9yIGRvZXMgbm90IGFkanVzdCBmb3IgbGlnaHQgbW9kZS4nKTtcbiAgICAgICAgcmV0dXJuIGhpZ2hDb250cmFzdFRleHRDb2xvcjtcbiAgICAgIH1cbiAgICAgIGlmIChsaWdodG5lc3MgPiA5NSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0hpZ2ggZW5vdWdoIGNvbnRyYXN0IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLiBNb3N0IGxpa2VseSB5b3VyIGJhY2tncm91bmQgY29sb3IgZG9lcyBub3QgYWRqdXN0IGZvciBkYXJrIG1vZGUuJyk7XG4gICAgICAgIHJldHVybiBoaWdoQ29udHJhc3RUZXh0Q29sb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjaHJvbWEoaGlnaENvbnRyYXN0VGV4dENvbG9yKS5oZXgoKTtcbiAgfTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBjb2xvciB3aXRoIGluY3JlYXNlZCBjb250cmFzdFxuICogRGlzYWJsZWQgY29udGVudCBvbmx5IG5lZWRzIGEgY29udHJhc3Qgb2YgYXQgbGVhc3QgMiBiZWNhdXNlIHRoZXJlIGlzIG5vIGludGVyYWN0aW9uIGF2YWlsYWJsZVxuICogQHBhcmFtIGZvcmVncm91bmQgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEwLlxuICogKlxuICogQHBhcmFtIHRoZW1lT3JCYWNrZ3JvdW5kIC0gQ29sb3IgdG8gdXNlIGFzIHRoZSBjb250cmFzdCBiYXNpc1xuICovXG5leHBvcnQgdmFyIG1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IgPSBmdW5jdGlvbiBtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yKGNvbG9yKSB7XG4gIHZhciByYXRpbyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMjtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGVtZU9yQmFja2dyb3VuZCkge1xuICAgIHJldHVybiBtYWtlSGlnaENvbnRyYXN0Q29sb3IoY29sb3IsIHJhdGlvKSh0aGVtZU9yQmFja2dyb3VuZCk7XG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgc2hhZGUsIHRpbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9jb2xvcic7XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IG1ha2VIaWdoQ29udHJhc3RDb2xvciwgbWFrZURpc2FibGVkQ29udHJhc3RDb2xvciB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2NvbG9yL2NvbnRyYXN0Jztcbi8qXG4gKiBMSUdIVCBUSEVNRVxuICogT25seSBzcGxpdCB1cCBpbiB0aGUgbGlnaHQgdGhlbWUgdG8gYWNjZXNzIHRoZSBrZXlzIGJ5IHNlY3Rpb24gaW4gdGhlIGRvY3NcbiAqL1xuXG5leHBvcnQgdmFyIGJyYW5kX2NvbG9ycyA9IHtcbiAgcHJpbWFyeTogJyMwN0MnLFxuICBhY2NlbnQ6ICcjRjA0RTk4JyxcbiAgc3VjY2VzczogJyMwMEJGQjMnLFxuICB3YXJuaW5nOiAnI0ZFQzUxNCcsXG4gIGRhbmdlcjogJyNCRDI3MUUnXG59O1xuZXhwb3J0IHZhciBicmFuZF90ZXh0X2NvbG9ycyA9IHtcbiAgcHJpbWFyeVRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLnByaW1hcnknKSksXG4gIGFjY2VudFRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLmFjY2VudCcpKSxcbiAgc3VjY2Vzc1RleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLnN1Y2Nlc3MnKSksXG4gIHdhcm5pbmdUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy53YXJuaW5nJykpLFxuICBkYW5nZXJUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kYW5nZXInKSlcbn07XG5leHBvcnQgdmFyIHNoYWRlX2NvbG9ycyA9IHtcbiAgZW1wdHlTaGFkZTogJyNGRkYnLFxuICBsaWdodGVzdFNoYWRlOiAnI0YxRjRGQScsXG4gIGxpZ2h0U2hhZGU6ICcjRDNEQUU2JyxcbiAgbWVkaXVtU2hhZGU6ICcjOThBMkIzJyxcbiAgZGFya1NoYWRlOiAnIzY5NzA3RCcsXG4gIGRhcmtlc3RTaGFkZTogJyMzNDM3NDEnLFxuICBmdWxsU2hhZGU6ICcjMDAwJ1xufTtcbmV4cG9ydCB2YXIgc3BlY2lhbF9jb2xvcnMgPSB7XG4gIGJvZHk6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMSksXG4gICAgICBsaWdodGVzdFNoYWRlID0gX3JlZjJbMF07XG4gICAgcmV0dXJuIHRpbnQobGlnaHRlc3RTaGFkZSwgMC40KTtcbiAgfSwgWydjb2xvcnMubGlnaHRlc3RTaGFkZSddKSxcbiAgaGlnaGxpZ2h0OiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMSksXG4gICAgICB3YXJuaW5nID0gX3JlZjRbMF07XG4gICAgcmV0dXJuIHRpbnQod2FybmluZywgMC45KTtcbiAgfSwgWydjb2xvcnMud2FybmluZyddKSxcbiAgZGlzYWJsZWQ6ICcjQUJCNEM0JyxcbiAgZGlzYWJsZWRUZXh0OiBjb21wdXRlZChtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yKCdjb2xvcnMuZGlzYWJsZWQnKSksXG4gIHNoYWRvdzogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgdmFyIGNvbG9ycyA9IF9yZWY1LmNvbG9ycztcbiAgICByZXR1cm4gY29sb3JzLmluaztcbiAgfSlcbn07XG5leHBvcnQgdmFyIHRleHRfY29sb3JzID0ge1xuICB0ZXh0OiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjYpIHtcbiAgICB2YXIgX3JlZjcgPSBfc2xpY2VkVG9BcnJheShfcmVmNiwgMSksXG4gICAgICBkYXJrZXN0U2hhZGUgPSBfcmVmN1swXTtcbiAgICByZXR1cm4gZGFya2VzdFNoYWRlO1xuICB9LCBbJ2NvbG9ycy5kYXJrZXN0U2hhZGUnXSksXG4gIHRpdGxlOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjgpIHtcbiAgICB2YXIgX3JlZjkgPSBfc2xpY2VkVG9BcnJheShfcmVmOCwgMSksXG4gICAgICB0ZXh0ID0gX3JlZjlbMF07XG4gICAgcmV0dXJuIHNoYWRlKHRleHQsIDAuNSk7XG4gIH0sIFsnY29sb3JzLnRleHQnXSksXG4gIHN1YmR1ZWRUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kYXJrU2hhZGUnKSksXG4gIGxpbms6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTApIHtcbiAgICB2YXIgX3JlZjExID0gX3NsaWNlZFRvQXJyYXkoX3JlZjEwLCAxKSxcbiAgICAgIHByaW1hcnlUZXh0ID0gX3JlZjExWzBdO1xuICAgIHJldHVybiBwcmltYXJ5VGV4dDtcbiAgfSwgWydjb2xvcnMucHJpbWFyeVRleHQnXSlcbn07XG5leHBvcnQgdmFyIGxpZ2h0X2NvbG9ycyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYnJhbmRfY29sb3JzKSwgc2hhZGVfY29sb3JzKSwgc3BlY2lhbF9jb2xvcnMpLCBicmFuZF90ZXh0X2NvbG9ycyksIHRleHRfY29sb3JzKTtcblxuLypcbiAqIERBUksgVEhFTUVcbiAqL1xuXG5leHBvcnQgdmFyIGRhcmtfc2hhZGVzID0ge1xuICBlbXB0eVNoYWRlOiAnIzFEMUUyNCcsXG4gIGxpZ2h0ZXN0U2hhZGU6ICcjMjUyNjJFJyxcbiAgbGlnaHRTaGFkZTogJyMzNDM3NDEnLFxuICBtZWRpdW1TaGFkZTogJyM1MzU5NjYnLFxuICBkYXJrU2hhZGU6ICcjOThBMkIzJyxcbiAgZGFya2VzdFNoYWRlOiAnI0Q0REFFNScsXG4gIGZ1bGxTaGFkZTogJyNGRkYnXG59O1xuZXhwb3J0IHZhciBkYXJrX2NvbG9yc19hbXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gIC8vIEJyYW5kXG4gIHByaW1hcnk6ICcjMzZBMkVGJyxcbiAgYWNjZW50OiAnI0Y2OEZCRScsXG4gIHN1Y2Nlc3M6ICcjN0RERUQ4JyxcbiAgd2FybmluZzogJyNGM0QzNzEnLFxuICBkYW5nZXI6ICcjRjg2QjYzJ1xufSwgZGFya19zaGFkZXMpLCB7fSwge1xuICAvLyBTcGVjaWFsXG4gIGJvZHk6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTIpIHtcbiAgICB2YXIgX3JlZjEzID0gX3NsaWNlZFRvQXJyYXkoX3JlZjEyLCAxKSxcbiAgICAgIGxpZ2h0ZXN0U2hhZGUgPSBfcmVmMTNbMF07XG4gICAgcmV0dXJuIHNoYWRlKGxpZ2h0ZXN0U2hhZGUsIDAuNDUpO1xuICB9LCBbJ2NvbG9ycy5saWdodGVzdFNoYWRlJ10pLFxuICBoaWdobGlnaHQ6ICcjMkUyRDI1JyxcbiAgZGlzYWJsZWQ6ICcjNTE1NzYxJyxcbiAgZGlzYWJsZWRUZXh0OiBjb21wdXRlZChtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yKCdjb2xvcnMuZGlzYWJsZWQnKSksXG4gIHNoYWRvdzogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYxNCkge1xuICAgIHZhciBjb2xvcnMgPSBfcmVmMTQuY29sb3JzO1xuICAgIHJldHVybiBjb2xvcnMuaW5rO1xuICB9KVxufSwgYnJhbmRfdGV4dF9jb2xvcnMpLCB7fSwge1xuICAvLyBUZXh0XG4gIHRleHQ6ICcjREZFNUVGJyxcbiAgdGl0bGU6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTUpIHtcbiAgICB2YXIgX3JlZjE2ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjE1LCAxKSxcbiAgICAgIHRleHQgPSBfcmVmMTZbMF07XG4gICAgcmV0dXJuIHRleHQ7XG4gIH0sIFsnY29sb3JzLnRleHQnXSksXG4gIHN1YmR1ZWRUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5tZWRpdW1TaGFkZScpKSxcbiAgbGluazogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYxNykge1xuICAgIHZhciBfcmVmMTggPSBfc2xpY2VkVG9BcnJheShfcmVmMTcsIDEpLFxuICAgICAgcHJpbWFyeVRleHQgPSBfcmVmMThbMF07XG4gICAgcmV0dXJuIHByaW1hcnlUZXh0O1xuICB9LCBbJ2NvbG9ycy5wcmltYXJ5VGV4dCddKVxufSk7XG5cbi8qXG4gKiBGVUxMXG4gKi9cblxuZXhwb3J0IHZhciBjb2xvcnMgPSB7XG4gIGdob3N0OiAnI0ZGRicsXG4gIGluazogJyMwMDAnLFxuICBMSUdIVDogbGlnaHRfY29sb3JzLFxuICBEQVJLOiBkYXJrX2NvbG9yc19hbXNcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciBhbmltYXRpb25fc3BlZWQgPSB7XG4gIGV4dHJhRmFzdDogJzkwbXMnLFxuICBmYXN0OiAnMTUwbXMnLFxuICBub3JtYWw6ICcyNTBtcycsXG4gIHNsb3c6ICczNTBtcycsXG4gIGV4dHJhU2xvdzogJzUwMG1zJ1xufTtcbmV4cG9ydCB2YXIgYW5pbWF0aW9uX2Vhc2UgPSB7XG4gIGJvdW5jZTogJ2N1YmljLWJlemllciguMzQsIDEuNjEsIC43LCAxKScsXG4gIHJlc2lzdGFuY2U6ICdjdWJpYy1iZXppZXIoLjY5NCwgLjA0ODIsIC4zMzUsIDEpJ1xufTtcbmV4cG9ydCB2YXIgYW5pbWF0aW9uID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhbmltYXRpb25fc3BlZWQpLCBhbmltYXRpb25fZWFzZSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgYnJlYWtwb2ludCA9IHtcbiAgeGw6IDEyMDAsXG4gIGw6IDk5MixcbiAgbTogNzY4LFxuICBzOiA1NzUsXG4gIHhzOiAwXG59OyIsICJ7XG4gIFwiaGVpZ2h0XCI6IFwiYmxvY2stc2l6ZVwiLFxuICBcIndpZHRoXCI6IFwiaW5saW5lLXNpemVcIixcbiAgXCJtYXgtaGVpZ2h0XCI6IFwibWF4LWJsb2NrLXNpemVcIixcbiAgXCJtYXgtd2lkdGhcIjogXCJtYXgtaW5saW5lLXNpemVcIixcbiAgXCJtaW4taGVpZ2h0XCI6IFwibWluLWJsb2NrLXNpemVcIixcbiAgXCJtaW4td2lkdGhcIjogXCJtaW4taW5saW5lLXNpemVcIixcbiAgXCJ0b3BcIjogXCJpbnNldC1ibG9jay1zdGFydFwiLFxuICBcInJpZ2h0XCI6IFwiaW5zZXQtaW5saW5lLWVuZFwiLFxuICBcImJvdHRvbVwiOiBcImluc2V0LWJsb2NrLWVuZFwiLFxuICBcImxlZnRcIjogXCJpbnNldC1pbmxpbmUtc3RhcnRcIixcbiAgXCJob3Jpem9udGFsXCI6IFwiaW5zZXQtaW5saW5lXCIsXG4gIFwidmVydGljYWxcIjogXCJpbnNldC1ibG9ja1wiLFxuICBcIm1hcmdpbi1sZWZ0XCI6IFwibWFyZ2luLWlubGluZS1zdGFydFwiLFxuICBcIm1hcmdpbi1yaWdodFwiOiBcIm1hcmdpbi1pbmxpbmUtZW5kXCIsXG4gIFwibWFyZ2luLXRvcFwiOiBcIm1hcmdpbi1ibG9jay1zdGFydFwiLFxuICBcIm1hcmdpbi1ib3R0b21cIjogXCJtYXJnaW4tYmxvY2stZW5kXCIsXG4gIFwibWFyZ2luLWhvcml6b250YWxcIjogXCJtYXJnaW4taW5saW5lXCIsXG4gIFwibWFyZ2luLXZlcnRpY2FsXCI6IFwibWFyZ2luLWJsb2NrXCIsXG4gIFwicGFkZGluZy1sZWZ0XCI6IFwicGFkZGluZy1pbmxpbmUtc3RhcnRcIixcbiAgXCJwYWRkaW5nLXJpZ2h0XCI6IFwicGFkZGluZy1pbmxpbmUtZW5kXCIsXG4gIFwicGFkZGluZy10b3BcIjogXCJwYWRkaW5nLWJsb2NrLXN0YXJ0XCIsXG4gIFwicGFkZGluZy1ib3R0b21cIjogXCJwYWRkaW5nLWJsb2NrLWVuZFwiLFxuICBcInBhZGRpbmctaG9yaXpvbnRhbFwiOiBcInBhZGRpbmctaW5saW5lXCIsXG4gIFwicGFkZGluZy12ZXJ0aWNhbFwiOiBcInBhZGRpbmctYmxvY2tcIixcbiAgXCJvdmVyZmxvdy14XCI6IFwib3ZlcmZsb3ctaW5saW5lXCIsXG4gIFwib3ZlcmZsb3cteVwiOiBcIm92ZXJmbG93LWJsb2NrXCIsXG4gIFwiYm9yZGVyLWhvcml6b250YWxcIjogXCJib3JkZXItaW5saW5lXCIsXG4gIFwiYm9yZGVyLWhvcml6b250YWwtY29sb3JcIjogXCJib3JkZXItaW5saW5lLWNvbG9yXCIsXG4gIFwiYm9yZGVyLWhvcml6b250YWwtd2lkdGhcIjogXCJib3JkZXItaW5saW5lLXdpZHRoXCIsXG4gIFwiYm9yZGVyLWhvcml6b250YWwtc3R5bGVcIjogXCJib3JkZXItaW5saW5lLXN0eWxlXCIsXG4gIFwiYm9yZGVyLXZlcnRpY2FsXCI6IFwiYm9yZGVyLWJsb2NrXCIsXG4gIFwiYm9yZGVyLXZlcnRpY2FsLWNvbG9yXCI6IFwiYm9yZGVyLWJsb2NrLWNvbG9yXCIsXG4gIFwiYm9yZGVyLXZlcnRpY2FsLXdpZHRoXCI6IFwiYm9yZGVyLWJsb2NrLXdpZHRoXCIsXG4gIFwiYm9yZGVyLXZlcnRpY2FsLXN0eWxlXCI6IFwiYm9yZGVyLWJsb2NrLXN0eWxlXCIsXG4gIFwiYm9yZGVyLWJvdHRvbVwiOiBcImJvcmRlci1ibG9jay1lbmRcIixcbiAgXCJib3JkZXItYm90dG9tLWNvbG9yXCI6IFwiYm9yZGVyLWJsb2NrLWVuZC1jb2xvclwiLFxuICBcImJvcmRlci1ib3R0b20tc3R5bGVcIjogXCJib3JkZXItYmxvY2stZW5kLXN0eWxlXCIsXG4gIFwiYm9yZGVyLWJvdHRvbS13aWR0aFwiOiBcImJvcmRlci1ibG9jay1lbmQtd2lkdGhcIixcbiAgXCJib3JkZXItdG9wXCI6IFwiYm9yZGVyLWJsb2NrLXN0YXJ0XCIsXG4gIFwiYm9yZGVyLXRvcC1jb2xvclwiOiBcImJvcmRlci1ibG9jay1zdGFydC1jb2xvclwiLFxuICBcImJvcmRlci10b3Atc3R5bGVcIjogXCJib3JkZXItYmxvY2stc3RhcnQtc3R5bGVcIixcbiAgXCJib3JkZXItdG9wLXdpZHRoXCI6IFwiYm9yZGVyLWJsb2NrLXN0YXJ0LXdpZHRoXCIsXG4gIFwiYm9yZGVyLXJpZ2h0XCI6IFwiYm9yZGVyLWlubGluZS1lbmRcIixcbiAgXCJib3JkZXItcmlnaHQtY29sb3JcIjogXCJib3JkZXItaW5saW5lLWVuZC1jb2xvclwiLFxuICBcImJvcmRlci1yaWdodC1zdHlsZVwiOiBcImJvcmRlci1pbmxpbmUtZW5kLXN0eWxlXCIsXG4gIFwiYm9yZGVyLXJpZ2h0LXdpZHRoXCI6IFwiYm9yZGVyLWlubGluZS1lbmQtd2lkdGhcIixcbiAgXCJib3JkZXItbGVmdFwiOiBcImJvcmRlci1pbmxpbmUtc3RhcnRcIixcbiAgXCJib3JkZXItbGVmdC1jb2xvclwiOiBcImJvcmRlci1pbmxpbmUtc3RhcnQtY29sb3JcIixcbiAgXCJib3JkZXItbGVmdC1zdHlsZVwiOiBcImJvcmRlci1pbmxpbmUtc3RhcnQtc3R5bGVcIixcbiAgXCJib3JkZXItbGVmdC13aWR0aFwiOiBcImJvcmRlci1pbmxpbmUtc3RhcnQtd2lkdGhcIixcbiAgXCJib3JkZXItdG9wLWxlZnQtcmFkaXVzXCI6IFwiYm9yZGVyLXN0YXJ0LXN0YXJ0LXJhZGl1c1wiLFxuICBcImJvcmRlci10b3AtcmlnaHQtcmFkaXVzXCI6IFwiYm9yZGVyLXN0YXJ0LWVuZC1yYWRpdXNcIixcbiAgXCJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzXCI6IFwiYm9yZGVyLWVuZC1zdGFydC1yYWRpdXNcIixcbiAgXCJib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1c1wiOiBcImJvcmRlci1lbmQtZW5kLXJhZGl1c1wiLFxuICBcIl9zaG9ydGhhbmRzXCI6IFtcbiAgICBcIm1hcmdpblwiLFxuICAgIFwic2Nyb2xsLW1hcmdpblwiLFxuICAgIFwicGFkZGluZ1wiLFxuICAgIFwic2Nyb2xsLXBhZGRpbmdcIixcbiAgICBcImluc2V0XCIsXG4gICAgXCJib3JkZXItY29sb3JcIixcbiAgICBcImJvcmRlci13aWR0aFwiLFxuICAgIFwiYm9yZGVyLXN0eWxlXCIsXG4gICAgXCJib3JkZXItcmFkaXVzXCJcbiAgXVxufVxuIiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgTE9HSUNBTFMgZnJvbSAnLi9sb2dpY2Fscy5qc29uJztcblxuLyoqXG4gKiBFVUkgdXRpbGl6ZXMgbG9naWNhbCBDU1MgcHJvcGVydGllcyB0byBlbmFibGUgZGlyZWN0aW9uYWwgd3JpdGluZy1tb2Rlcy5cbiAqIFRvIGVuY291cmFnZSB1c2Ugb2YgbG9naWNhbCBwcm9wZXJ0aWVzLCB3ZSBwcm92aWRlIGEgZmV3IGhlbHBlciB1dGlsaXRpZXMgdG9cbiAqIGNvbnZlcnQgY2VydGFpbiBkaXJlY3Rpb25hbCBwcm9wZXJ0aWVzIHRvIGxvZ2ljYWwgcHJvcGVydGllcy5cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9DU1NfTG9naWNhbF9Qcm9wZXJ0aWVzXG4gKi9cblxuZXhwb3J0IHZhciBsb2dpY2FsU2lkZSA9IHtcbiAgbGVmdDogJ2lubGluZS1zdGFydCcsXG4gIHJpZ2h0OiAnaW5saW5lLWVuZCcsXG4gIHRvcDogJ2Jsb2NrLXN0YXJ0JyxcbiAgYm90dG9tOiAnYmxvY2stZW5kJyxcbiAgaG9yaXpvbnRhbDogJ2lubGluZScsXG4gIHZlcnRpY2FsOiAnYmxvY2snXG59O1xuZXhwb3J0IHZhciBMT0dJQ0FMX1NJREVTID0ga2V5c09mKGxvZ2ljYWxTaWRlKTtcbmV4cG9ydCB2YXIgbG9naWNhbHMgPSBMT0dJQ0FMUztcbnZhciBfc2hvcnRoYW5kcyA9IExPR0lDQUxTLl9zaG9ydGhhbmRzLFxuICBfbG9naWNhbHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoTE9HSUNBTFMsIFtcIl9zaG9ydGhhbmRzXCJdKTtcbmV4cG9ydCB2YXIgTE9HSUNBTF9QUk9QRVJUSUVTID0ga2V5c09mKF9sb2dpY2Fscyk7XG4vKipcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIENTUyBsb2dpY2FsIHByb3BlcnR5XG4gKiBAcGFyYW0gdmFsdWUgU3RyaW5nIHRvIG91dHB1dCBhcyB0aGUgcHJvcGVydHkgdmFsdWVcbiAqIEByZXR1cm5zIGBzdHJpbmdgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnR5IHZlcnNpb24gZm9yIHRoZSBnaXZlbiBgcHJvcGVydHk6IHZhbHVlYCBwYWlyXG4gKi9cbmV4cG9ydCB2YXIgbG9naWNhbENTUyA9IGZ1bmN0aW9uIGxvZ2ljYWxDU1MocHJvcGVydHksIHZhbHVlKSB7XG4gIHJldHVybiBcIlwiLmNvbmNhdChsb2dpY2Fsc1twcm9wZXJ0eV0sIFwiOiBcIikuY29uY2F0KHZhbHVlLCBcIjtcIik7XG59O1xuXG4vKipcbiAqIFNvbWUgbG9naWNhbCBwcm9wZXJ0aWVzIGFyZSBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZCBieSBhbGwgYnJvd3NlcnMuXG4gKiBGb3IgdGhvc2UgY2FzZXMsIHdlIHNob3VsZCB1c2UgdGhlIG9sZCBwcm9wZXJ0eSBhcyBhIGZhbGxiYWNrIGZvclxuICogYnJvd3NlcnMgbWlzc2luZyBzdXBwb3J0LCB3aGlsZSBhbGxvd2luZyBzdXBwb3J0aW5nIGJyb3dzZXJzIHRvIHVzZVxuICogdGhlIGxvZ2ljYWwgcHJvcGVydGllcy5cbiAqXG4gKiBFeGFtcGxlczpcbiAqIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD1vdmVyZmxvdy1ibG9ja1xuICogaHR0cHM6Ly9jYW5pdXNlLmNvbS9tZG4tY3NzX3Byb3BlcnRpZXNfZmxvYXRfZmxvd19yZWxhdGl2ZV92YWx1ZXNcbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrID0gZnVuY3Rpb24gbG9naWNhbENTU1dpdGhGYWxsYmFjayhwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQocHJvcGVydHksIFwiOiBcIikuY29uY2F0KHZhbHVlLCBcIjtcXG4gIFwiKS5jb25jYXQobG9naWNhbENTUyhwcm9wZXJ0eSwgdmFsdWUpLCBcIlxcblwiKTtcbn07XG5cbi8qKlxuICogQ2FzaW5nIHV0aWxzIGZvciBzd2FwcGluZyBiZXR3ZWVuIGNhbWVsIGNhc2UgKHN0eWxlIG9ianMpIGFuZCBrZWJhYiBjYXNlIChDU1MpXG4gKi9cbnZhciBjYW1lbENhc2UgPSBmdW5jdGlvbiBjYW1lbENhc2Uoa2ViYWJDYXNlZFN0cmluZykge1xuICByZXR1cm4ga2ViYWJDYXNlZFN0cmluZy5yZXBsYWNlKC8tXFx3L2csIGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbn07XG52YXIga2ViYWJDYXNlID0gZnVuY3Rpb24ga2ViYWJDYXNlKGNhbWVsQ2FzZWRTdHJpbmcpIHtcbiAgcmV0dXJuIGNhbWVsQ2FzZWRTdHJpbmcucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxLSQyJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgQ1NTIGxvZ2ljYWwgcHJvcGVydHlcbiAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gb3V0cHV0IGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybnMgYG9iamVjdGAgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydHkgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGBwcm9wZXJ0eTogdmFsdWVgIHBhaXJcbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsU3R5bGUgPSBmdW5jdGlvbiBsb2dpY2FsU3R5bGUocHJvcGVydHksIHZhbHVlKSB7XG4gIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIGNhbWVsQ2FzZShsb2dpY2Fsc1twcm9wZXJ0eV0pLCB2YWx1ZSk7XG59O1xuXG4vKipcbiAqIEdpdmVuIGEgc3R5bGUgb2JqZWN0IHdpdGggYW55IGFtb3VudCBvZiB1bmtub3duIENTUyBwcm9wZXJ0aWVzLFxuICogZmluZCBvbmVzIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCB0byBsb2dpY2FsIHByb3BlcnRpZXMgYW5kIGNvbnZlcnQgdGhlbVxuICpcbiAqIEBwYXJhbSBzdHlsZU9iamVjdCAtIEEgUmVhY3Qgb2JqZWN0IG9mIGNhbWVsQ2FzZWQgc3R5bGVzXG4gKiBAcmV0dXJucyBgb2JqZWN0YFxuICovXG5leHBvcnQgdmFyIGxvZ2ljYWxTdHlsZXMgPSBmdW5jdGlvbiBsb2dpY2FsU3R5bGVzKHN0eWxlT2JqZWN0KSB7XG4gIHZhciBsb2dpY2FsU3R5bGVPYmplY3QgPSB7fTtcbiAgT2JqZWN0LmVudHJpZXMoc3R5bGVPYmplY3QpLmZvckVhY2goZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgdmFyIF9yZWYzID0gX3NsaWNlZFRvQXJyYXkoX3JlZjIsIDIpLFxuICAgICAga2V5ID0gX3JlZjNbMF0sXG4gICAgICB2YWx1ZSA9IF9yZWYzWzFdO1xuICAgIHZhciBjc3NQcm9wZXJ0eSA9IGtlYmFiQ2FzZShrZXkpO1xuICAgIGlmIChsb2dpY2Fscy5oYXNPd25Qcm9wZXJ0eShjc3NQcm9wZXJ0eSkpIHtcbiAgICAgIHZhciBsb2dpY2FsS2V5ID0gY2FtZWxDYXNlKGxvZ2ljYWxzW2Nzc1Byb3BlcnR5XSk7XG4gICAgICBsb2dpY2FsU3R5bGVPYmplY3RbbG9naWNhbEtleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9naWNhbFN0eWxlT2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbG9naWNhbFN0eWxlT2JqZWN0O1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHdpZHRoIEEgc3RyaW5nIHZhbHVlIGZvciB0aGUgTFRSIHdpZHRoXG4gKiBAcGFyYW0gaGVpZ2h0IEEgc3RyaW5nIHZhbHVlIGZvciB0aGUgTFRSIGhlaWdodFxuICogQHJldHVybnMgYHN0cmluZ2AgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydGllcyBmb3IgaGVpZ2h0IGFuZCB3aWR0aFxuICovXG5leHBvcnQgdmFyIGxvZ2ljYWxTaXplQ1NTID0gZnVuY3Rpb24gbG9naWNhbFNpemVDU1Mod2lkdGgpIHtcbiAgdmFyIGhlaWdodCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogd2lkdGg7XG4gIHJldHVybiBcIlxcbiAgICBcIi5jb25jYXQobG9naWNhbHMud2lkdGgsIFwiOiBcIikuY29uY2F0KHdpZHRoLCBcIjtcXG4gICAgXCIpLmNvbmNhdChsb2dpY2Fscy5oZWlnaHQsIFwiOiBcIikuY29uY2F0KGhlaWdodCwgXCI7XFxuICBcIik7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gd2lkdGggQSBzdHJpbmcgdmFsdWUgZm9yIHRoZSBMVFIgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQgQSBzdHJpbmcgdmFsdWUgZm9yIHRoZSBMVFIgaGVpZ2h0XG4gKiBAcmV0dXJucyBgb2JqZWN0YCBSZXR1cm5zIHRoZSBsb2dpY2FsIENTUyBwcm9wZXJ0aWVzIGZvciBoZWlnaHQgYW5kIHdpZHRoXG4gKi9cbmV4cG9ydCB2YXIgbG9naWNhbFNpemVTdHlsZSA9IGZ1bmN0aW9uIGxvZ2ljYWxTaXplU3R5bGUod2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBsb2dpY2FsU3R5bGUoJ3dpZHRoJywgd2lkdGgpKSwgbG9naWNhbFN0eWxlKCdoZWlnaHQnLCBoZWlnaHQpKTtcbn07XG5cbi8vIFRleHQgYWxpZ25tZW50IGlzIHNlcGFyYXRlIGJlY2F1c2UgaXRzIHRoZSB2YWx1ZSB0aGF0IGNoYW5nZXMgbm90IHRoZSBwcm9wZXJ0eVxuZXhwb3J0IHZhciBsb2dpY2FsVGV4dCA9IHtcbiAgJ3RleHQtYWxpZ24nOiB7XG4gICAgbGVmdDogJ3N0YXJ0JyxcbiAgICBjZW50ZXI6ICdjZW50ZXInLFxuICAgIHJpZ2h0OiAnZW5kJ1xuICB9XG59O1xuZXhwb3J0IHZhciBMT0dJQ0FMX1RFWFRfQUxJR05NRU5UID0ga2V5c09mKGxvZ2ljYWxUZXh0Wyd0ZXh0LWFsaWduJ10pO1xuLyoqXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IEEgc3RyaW5nIHRoYXQgaXMgYSB2YWxpZCBDU1MgbG9naWNhbCBwcm9wZXJ0eVxuICogQHBhcmFtIHZhbHVlIFN0cmluZyB0byBvdXRwdXQgYXMgdGhlIHByb3BlcnR5IHZhbHVlXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBSZXR1cm5zIHRoZSBsb2dpY2FsIENTUyBwcm9wZXJ0eSB2ZXJzaW9uIGZvciB0aGUgZ2l2ZW4gYHByb3BlcnR5OiB2YWx1ZWAgcGFpclxuICovXG5leHBvcnQgdmFyIGxvZ2ljYWxUZXh0QWxpZ25DU1MgPSBmdW5jdGlvbiBsb2dpY2FsVGV4dEFsaWduQ1NTKHZhbHVlKSB7XG4gIHJldHVybiBcInRleHQtYWxpZ246IFwiLmNvbmNhdChsb2dpY2FsVGV4dFsndGV4dC1hbGlnbiddW3ZhbHVlXSwgXCI7XCIpO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IEEgc3RyaW5nIHRoYXQgaXMgYSB2YWxpZCBDU1MgbG9naWNhbCBwcm9wZXJ0eVxuICogQHBhcmFtIHZhbHVlIFN0cmluZyB0byBvdXRwdXQgYXMgdGhlIHByb3BlcnR5IHZhbHVlXG4gKiBAcmV0dXJucyBgb2JqZWN0YCBSZXR1cm5zIHRoZSBsb2dpY2FsIENTUyBwcm9wZXJ0eSB2ZXJzaW9uIGZvciB0aGUgZ2l2ZW4gYHByb3BlcnR5OiB2YWx1ZWAgcGFpclxuICovXG5leHBvcnQgdmFyIGxvZ2ljYWxUZXh0QWxpZ25TdHlsZSA9IGZ1bmN0aW9uIGxvZ2ljYWxUZXh0QWxpZ25TdHlsZSh2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIHRleHRBbGlnbjogbG9naWNhbFRleHRbJ3RleHQtYWxpZ24nXVt2YWx1ZV1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IExPR0lDQUxTIGZyb20gJy4vbG9naWNhbHMuanNvbic7XG52YXIgTE9HSUNBTF9TSE9SVEhBTkRTID0gTE9HSUNBTFMuX3Nob3J0aGFuZHM7XG5leHBvcnQgeyBMT0dJQ0FMX1NIT1JUSEFORFMgfTtcbi8qKlxuICogVW5mb3J0dW5hdGVseSwgc2hvcnRoYW5kIHByb3BlcnRpZXMgdGhhdCBkZXNjcmliZSBib3hlc1xuICogKEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL1Nob3J0aGFuZF9wcm9wZXJ0aWVzI2VkZ2VzX29mX2FfYm94KVxuICogZG8gbm90IGN1cnJlbnRseSBhdXRvbWF0aWNhbGx5IHJlc3BvbmQgdG8gbG9naWNhbCBjaGFuZ2VzIGluIGRpc3BsYXkgZGlyZWN0aW9uXG4gKiAoQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1ZXMvMTI4MilcbiAqXG4gKiBUaGlzIHV0aWxpdHkgaXMgZXNzZW50aWFsbHkgYSBzdG9wLWdhcCBmb3IgdGhvc2Ugc2hvcnRoYW5kIHByb3BlcnRpZXMsXG4gKiBjb252ZXJ0aW5nIHRoZW0gdG8gY29ycmVzcG9uZGluZyBsb25nZXIgbG9naWNhbCBgLWlubGluZWAgYW5kIGAtYmxvY2tgIHByb3BlcnRpZXNcbiAqXG4gKiBcdUQ4M0RcdURERDEgTk9URTogVGhpcyBmaWxlIGlzIGluIGEgc2VwYXJhdGUgdXRpbCBmaWxlIGZyb20gbG9naWNhbHMudHMgZHVlIHRvIGl0cyByZWxhdGl2ZWx5XG4gKiBjb252b2x1dGVkIGxvZ2ljLCAmIHRvIG1ha2UgZGVsZXRpbmcgaXQgZWFzaWVyIHdoZW4gYW4gb2ZmaWNpYWwgQ1NTIHNwZWMgaXMgaW1wbGVtZW50ZWQuXG4gKi9cbmV4cG9ydCB2YXIgbG9naWNhbFNob3J0aGFuZENTUyA9IGZ1bmN0aW9uIGxvZ2ljYWxTaG9ydGhhbmRDU1MocHJvcGVydHksIHZhbHVlKSB7XG4gIGlmICghTE9HSUNBTF9TSE9SVEhBTkRTLmluY2x1ZGVzKHByb3BlcnR5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlwiLmNvbmNhdChwcm9wZXJ0eSwgXCIgaXMgbm90IGEgc2hvcnRoYW5kIHByb3BlcnR5IHRoYXQgbmVlZHMgbG9naWNhbCBDU1NcIikpO1xuICB9XG4gIGlmIChwcm9wZXJ0eSA9PT0gJ2JvcmRlci1yYWRpdXMnKSB7XG4gICAgcmV0dXJuIGxvZ2ljYWxCb3JkZXJSYWRpdXNDU1MoU3RyaW5nKHZhbHVlKSk7XG4gIH1cblxuICAvLyBTcGxpdCBhbGwgcG90ZW50aWFsIHZhbHVlcyBieSBzcGFjZXNcbiAgdmFyIHZhbHVlcyA9IFN0cmluZyh2YWx1ZSkuc3BsaXQoL1xccysvKTtcbiAgdmFyIHZlcnRpY2FsQmxvY2tWYWx1ZTtcbiAgdmFyIGhvcml6b250YWxJbmxpbmVWYWx1ZTtcbiAgc3dpdGNoICh2YWx1ZXMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgLy8gSWYgaXQncyB0aGUgc2FtZSB2YWx1ZSBhbGwgYXJvdW5kLCBubyBuZWVkIHRvIHVzZSBsb2dpY2FsIHByb3BlcnRpZXNcbiAgICAgIHJldHVybiBcIlwiLmNvbmNhdChwcm9wZXJ0eSwgXCI6IFwiKS5jb25jYXQodmFsdWUsIFwiO1wiKTtcbiAgICBjYXNlIDI6XG4gICAgICB2ZXJ0aWNhbEJsb2NrVmFsdWUgPSB2YWx1ZXNbMF07XG4gICAgICBob3Jpem9udGFsSW5saW5lVmFsdWUgPSB2YWx1ZXNbMV07XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2ZXJ0aWNhbEJsb2NrVmFsdWUgPSBcIlwiLmNvbmNhdCh2YWx1ZXNbMF0sIFwiIFwiKS5jb25jYXQodmFsdWVzWzJdKTtcbiAgICAgIGhvcml6b250YWxJbmxpbmVWYWx1ZSA9IHZhbHVlc1sxXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICBkZWZhdWx0OlxuICAgICAgdmVydGljYWxCbG9ja1ZhbHVlID0gXCJcIi5jb25jYXQodmFsdWVzWzBdLCBcIiBcIikuY29uY2F0KHZhbHVlc1syXSk7XG4gICAgICBob3Jpem9udGFsSW5saW5lVmFsdWUgPSBcIlwiLmNvbmNhdCh2YWx1ZXNbM10sIFwiIFwiKS5jb25jYXQodmFsdWVzWzFdKTsgLy8gTm90ZTogbGVmdCAoNHRoIHZhbHVlKSBjb21lcyBiZWZvcmUgcmlnaHQgKDJuZCB2YWx1ZSlcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmIChwcm9wZXJ0eS5pbmNsdWRlcygnYm9yZGVyLScpKSB7XG4gICAgLy8gQm9yZGVyIHByb3BlcnRpZXMgaGF2ZSBhIGRpZmZlcmVudCBuYW1pbmcgc3ludGF4IHRoYW4gbWFyZ2luL3BhZGRpbmcvZXRjXG4gICAgdmFyIGJvcmRlclByb3BlcnR5ID0gcHJvcGVydHkuc3BsaXQoJy0nKVsxXTtcbiAgICByZXR1cm4gXCJcXG4gICAgYm9yZGVyLWJsb2NrLVwiLmNvbmNhdChib3JkZXJQcm9wZXJ0eSwgXCI6IFwiKS5jb25jYXQodmVydGljYWxCbG9ja1ZhbHVlLCBcIjtcXG4gICAgYm9yZGVyLWlubGluZS1cIikuY29uY2F0KGJvcmRlclByb3BlcnR5LCBcIjogXCIpLmNvbmNhdChob3Jpem9udGFsSW5saW5lVmFsdWUsIFwiO1xcbiAgICBcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiXFxuICAgIFwiLmNvbmNhdChwcm9wZXJ0eSwgXCItYmxvY2s6IFwiKS5jb25jYXQodmVydGljYWxCbG9ja1ZhbHVlLCBcIjtcXG4gICAgXCIpLmNvbmNhdChwcm9wZXJ0eSwgXCItaW5saW5lOiBcIikuY29uY2F0KGhvcml6b250YWxJbmxpbmVWYWx1ZSwgXCI7XFxuICAgIFwiKTtcbiAgfVxufTtcblxuLyoqXG4gKiBMb2dpY2FsIGJvcmRlciByYWRpdXMgaXMgdW5mb3J0dW5hdGVseSBhIHZlcnkgc3BlY2lhbCBjYXNlIGFzIGl0IGhhbmRsZXMgY29ybmVyc1xuICogYW5kIG5vdCBzaWRlcyAoQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvU2hvcnRoYW5kX3Byb3BlcnRpZXMjY29ybmVyc19vZl9hX2JveClcbiAqIGFuZCBkb2VzIG5vdCBoYXZlIGAtaW5saW5lYCBvciBgLWJsb2NrYCBzaG9ydGhhbmRzLlxuICpcbiAqIEl0IGFsc28gbmVlZHMgdG8gYWNjb3VudCBmb3IgYC9gIHN5bnRheCAoaG9yaXpvbnRhbCB2cyB2ZXJ0aWNhbCByYWRpaSlcbiAqIEBzZWUgaHR0cHM6Ly93d3cuc2l0ZXBvaW50LmNvbS9zZXR0aW5nLWNzczMtYm9yZGVyLXJhZGl1cy13aXRoLXNsYXNoLXN5bnRheC9cbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsQm9yZGVyUmFkaXVzQ1NTID0gZnVuY3Rpb24gbG9naWNhbEJvcmRlclJhZGl1c0NTUyh2YWx1ZSkge1xuICB2YXIgaWdub3JlWmVyb2VzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgdmFyIGJvcmRlclJhZGl1c01hcCA9IHtcbiAgICAnYm9yZGVyLXN0YXJ0LXN0YXJ0LXJhZGl1cyc6ICcnLFxuICAgICdib3JkZXItc3RhcnQtZW5kLXJhZGl1cyc6ICcnLFxuICAgICdib3JkZXItZW5kLWVuZC1yYWRpdXMnOiAnJyxcbiAgICAnYm9yZGVyLWVuZC1zdGFydC1yYWRpdXMnOiAnJ1xuICB9O1xuICB2YXIgdmFsdWVzID0gW107XG4gIGlmICh2YWx1ZS5pbmNsdWRlcygnLycpKSB7XG4gICAgdmFsdWVzID0gWycnLCAnJywgJycsICcnXTtcblxuICAgIC8vIFNwbGl0IGludG8gaG9yaXpvbnRhbCAmIHZlcnRpY2FsIHJhZGlpIHN0cmluZ3NcbiAgICB2YWx1ZS5zcGxpdCgnLycpLmZvckVhY2goZnVuY3Rpb24gKHJhZGlpQXhlcykge1xuICAgICAgdmFyIHJhZGlpID0gcmFkaWlBeGVzLnRyaW0oKS5zcGxpdCgvXFxzKy8pO1xuICAgICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKF8sIGkpIHtcbiAgICAgICAgLy8gQWRkIGEgc3BhY2UgYmV0d2VlbiB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgcmFkaXVzXG4gICAgICAgIHZhciBjb21iaW5lZFZhbHVlID0gdmFsdWVzW2ldID8gXCJcIi5jb25jYXQodmFsdWVzW2ldLCBcIiBcIikgOiB2YWx1ZXNbaV07XG4gICAgICAgIHN3aXRjaCAocmFkaWkubGVuZ3RoKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgLy8gRXZlcnkgdmFsdWUgaXMgcmVwZWF0ZWRcbiAgICAgICAgICAgIGNvbWJpbmVkVmFsdWUgKz0gcmFkaWlbMF07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAvLyBJZiB0aGUgY29ybmVyIGlzIGFuIGV2ZW4gaW5kZXgsIGdpdmUgaXQgdGhlIGZpcnN0IHZhbHVlLCBpZiBvZGQsIHNlY29uZCB2YWx1ZVxuICAgICAgICAgICAgY29tYmluZWRWYWx1ZSArPSBpICUgMiA/IHJhZGlpWzFdIDogcmFkaWlbMF07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAvLyBUaGUgbGFzdCBjb3JuZXIgc2hvdWxkIHJlcGVhdCB0aGUgc2Vjb25kIHZhbHVlXG4gICAgICAgICAgICBjb21iaW5lZFZhbHVlICs9IGkgPT09IDMgPyByYWRpaVsxXSA6IHJhZGlpW2ldO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBFdmVyeSB2YWx1ZSBpcyBzcGVjaWZpZWRcbiAgICAgICAgICAgIGNvbWJpbmVkVmFsdWUgKz0gcmFkaWlbaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzW2ldID0gY29tYmluZWRWYWx1ZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlcyA9IHZhbHVlLnNwbGl0KC9cXHMrLyk7XG4gIH1cbiAgc3dpdGNoICh2YWx1ZXMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgLy8gSWYgaXQncyB0aGUgc2FtZSB2YWx1ZSBhbGwgYXJvdW5kLCBubyBuZWVkIHRvIHVzZSBsb2dpY2FsIHByb3BlcnRpZXNcbiAgICAgIHJldHVybiBcImJvcmRlci1yYWRpdXM6IFwiLmNvbmNhdCh2YWx1ZSwgXCI7XCIpO1xuICAgIGNhc2UgMjpcbiAgICAgIGJvcmRlclJhZGl1c01hcFsnYm9yZGVyLXN0YXJ0LXN0YXJ0LXJhZGl1cyddID0gdmFsdWVzWzBdO1xuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItc3RhcnQtZW5kLXJhZGl1cyddID0gdmFsdWVzWzFdO1xuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItZW5kLWVuZC1yYWRpdXMnXSA9IHZhbHVlc1swXTtcbiAgICAgIGJvcmRlclJhZGl1c01hcFsnYm9yZGVyLWVuZC1zdGFydC1yYWRpdXMnXSA9IHZhbHVlc1sxXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIGJvcmRlclJhZGl1c01hcFsnYm9yZGVyLXN0YXJ0LXN0YXJ0LXJhZGl1cyddID0gdmFsdWVzWzBdO1xuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItc3RhcnQtZW5kLXJhZGl1cyddID0gdmFsdWVzWzFdO1xuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItZW5kLWVuZC1yYWRpdXMnXSA9IHZhbHVlc1syXTtcbiAgICAgIGJvcmRlclJhZGl1c01hcFsnYm9yZGVyLWVuZC1zdGFydC1yYWRpdXMnXSA9IHZhbHVlc1sxXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICBkZWZhdWx0OlxuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItc3RhcnQtc3RhcnQtcmFkaXVzJ10gPSB2YWx1ZXNbMF07XG4gICAgICBib3JkZXJSYWRpdXNNYXBbJ2JvcmRlci1zdGFydC1lbmQtcmFkaXVzJ10gPSB2YWx1ZXNbMV07XG4gICAgICBib3JkZXJSYWRpdXNNYXBbJ2JvcmRlci1lbmQtZW5kLXJhZGl1cyddID0gdmFsdWVzWzJdO1xuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItZW5kLXN0YXJ0LXJhZGl1cyddID0gdmFsdWVzWzNdO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgdmFyIGJvcmRlclJhZGl1c0NTUyA9IFtdO1xuICBPYmplY3QuZW50cmllcyhib3JkZXJSYWRpdXNNYXApLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKSxcbiAgICAgIHByb3BlcnR5ID0gX3JlZjJbMF0sXG4gICAgICB2YWx1ZSA9IF9yZWYyWzFdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKGlnbm9yZVplcm9lcyAmJiB2YWx1ZSAhPT0gJzAnICYmIHZhbHVlICE9PSAnMHB4JyB8fCAhaWdub3JlWmVyb2VzKSB7XG4gICAgICAgIGJvcmRlclJhZGl1c0NTUy5wdXNoKFwiXCIuY29uY2F0KHByb3BlcnR5LCBcIjogXCIpLmNvbmNhdCh2YWx1ZSwgXCI7XCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYm9yZGVyUmFkaXVzQ1NTLmpvaW4oJ1xcbicpO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX3dyYXBSZWdFeHAoKSB7IF93cmFwUmVnRXhwID0gZnVuY3Rpb24gX3dyYXBSZWdFeHAoZSwgcikgeyByZXR1cm4gbmV3IEJhYmVsUmVnRXhwKGUsIHZvaWQgMCwgcik7IH07IHZhciBlID0gUmVnRXhwLnByb3RvdHlwZSwgciA9IG5ldyBXZWFrTWFwKCk7IGZ1bmN0aW9uIEJhYmVsUmVnRXhwKGUsIHQsIHApIHsgdmFyIG8gPSBSZWdFeHAoZSwgdCk7IHJldHVybiByLnNldChvLCBwIHx8IHIuZ2V0KGUpKSwgX3NldFByb3RvdHlwZU9mKG8sIEJhYmVsUmVnRXhwLnByb3RvdHlwZSk7IH0gZnVuY3Rpb24gYnVpbGRHcm91cHMoZSwgdCkgeyB2YXIgcCA9IHIuZ2V0KHQpOyByZXR1cm4gT2JqZWN0LmtleXMocCkucmVkdWNlKGZ1bmN0aW9uIChyLCB0KSB7IHZhciBvID0gcFt0XTsgaWYgKFwibnVtYmVyXCIgPT0gdHlwZW9mIG8pIHJbdF0gPSBlW29dO2Vsc2UgeyBmb3IgKHZhciBpID0gMDsgdm9pZCAwID09PSBlW29baV1dICYmIGkgKyAxIDwgby5sZW5ndGg7KSBpKys7IHJbdF0gPSBlW29baV1dOyB9IHJldHVybiByOyB9LCBPYmplY3QuY3JlYXRlKG51bGwpKTsgfSByZXR1cm4gX2luaGVyaXRzKEJhYmVsUmVnRXhwLCBSZWdFeHApLCBCYWJlbFJlZ0V4cC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uIChyKSB7IHZhciB0ID0gZS5leGVjLmNhbGwodGhpcywgcik7IGlmICh0KSB7IHQuZ3JvdXBzID0gYnVpbGRHcm91cHModCwgdGhpcyk7IHZhciBwID0gdC5pbmRpY2VzOyBwICYmIChwLmdyb3VwcyA9IGJ1aWxkR3JvdXBzKHAsIHRoaXMpKTsgfSByZXR1cm4gdDsgfSwgQmFiZWxSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5yZXBsYWNlXSA9IGZ1bmN0aW9uICh0LCBwKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiBwKSB7IHZhciBvID0gci5nZXQodGhpcyk7IHJldHVybiBlW1N5bWJvbC5yZXBsYWNlXS5jYWxsKHRoaXMsIHQsIHAucmVwbGFjZSgvXFwkPChbXj5dKyk+L2csIGZ1bmN0aW9uIChlLCByKSB7IHZhciB0ID0gb1tyXTsgcmV0dXJuIFwiJFwiICsgKEFycmF5LmlzQXJyYXkodCkgPyB0LmpvaW4oXCIkXCIpIDogdCk7IH0pKTsgfSBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBwKSB7IHZhciBpID0gdGhpczsgcmV0dXJuIGVbU3ltYm9sLnJlcGxhY2VdLmNhbGwodGhpcywgdCwgZnVuY3Rpb24gKCkgeyB2YXIgZSA9IGFyZ3VtZW50czsgcmV0dXJuIFwib2JqZWN0XCIgIT0gX3R5cGVvZihlW2UubGVuZ3RoIC0gMV0pICYmIChlID0gW10uc2xpY2UuY2FsbChlKSkucHVzaChidWlsZEdyb3VwcyhlLCBpKSksIHAuYXBwbHkodGhpcywgZSk7IH0pOyB9IHJldHVybiBlW1N5bWJvbC5yZXBsYWNlXS5jYWxsKHRoaXMsIHQsIHApOyB9LCBfd3JhcFJlZ0V4cC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBVdGlsaXR5IGZvciBwZXJmb3JtaW5nIG1hdGggY2FsbGJhY2tzIG9uIGEgc3RyaW5nIHdpdGggQ1NTIHVuaXRzXG4gKiBhbmQgcmV0dXJuaW5nIGEgc3RyaW5nIHdpdGggaXRzIHVuaXQgcHJlc2VydmVkLlxuICpcbiAqIEV4YW1wbGUgdXNhZ2U6XG4gKiBtYXRoV2l0aFVuaXRzKCc0cHgnLCAoeCkgPT4geCAvIDIpID0gJzJweCc7XG4gKiBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLnNpemUueHMsICh4KSA9PiB4ICsgMikgPSAnNnB4JztcbiAqIG1hdGhXaXRoVW5pdHMoW2V1aVRoZW1lLnNpemUubCwgZXVpVGhlbWUuc2l6ZS5zXSwgKHgsIHkpID0+IHggLSB5KSA9ICcxNnB4JztcbiAqL1xuLy8gVW5mb3J0dW5hdGVseSwgdGhpcyBpcyB0aGUgQ1NTUHJvcGVydGllc1tdIHR5cGUgdXNlZCBmb3Igc2V2ZXJhbCBldWlUaGVtZSB2YXJzXG5cbmV4cG9ydCB2YXIgbWF0aFdpdGhVbml0cyA9IGZ1bmN0aW9uIG1hdGhXaXRoVW5pdHModmFsdWVzLCBjYWxsYmFjaykge1xuICB2YXIgdW5pdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJyc7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB2YWx1ZXMgPSBbdmFsdWVzXTtcbiAgdmFyIGZvdW5kTnVtZXJpY1ZhbHVlcyA9IFtdO1xuICB2YXIgZm91bmRVbml0ID0gJyc7XG4gIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgX21hdGNoZXMkZ3JvdXBzLCBfbWF0Y2hlcyRncm91cHMyO1xuICAgICAgdmFyIHJlZ2V4ID0gLyojX19QVVJFX18qL193cmFwUmVnRXhwKC8oXFx4MkQ/W1xcZC5dKykoJXxbYS16QS1aXSopLywge1xuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgdW5pdDogMlxuICAgICAgfSk7XG4gICAgICB2YXIgbWF0Y2hlcyA9IHJlZ2V4LmV4ZWModmFsdWUpO1xuICAgICAgdmFyIG51bWVyaWNWYWx1ZSA9IE51bWJlcihtYXRjaGVzID09PSBudWxsIHx8IG1hdGNoZXMgPT09IHZvaWQgMCB8fCAoX21hdGNoZXMkZ3JvdXBzID0gbWF0Y2hlcy5ncm91cHMpID09PSBudWxsIHx8IF9tYXRjaGVzJGdyb3VwcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX21hdGNoZXMkZ3JvdXBzLnZhbHVlKTtcbiAgICAgIGlmICghaXNOYU4obnVtZXJpY1ZhbHVlKSkge1xuICAgICAgICBmb3VuZE51bWVyaWNWYWx1ZXMucHVzaChudW1lcmljVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2YWxpZCBudW1lcmljIHZhbHVlIGZvdW5kJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXVuaXQgJiYgbWF0Y2hlcyAhPT0gbnVsbCAmJiBtYXRjaGVzICE9PSB2b2lkIDAgJiYgKF9tYXRjaGVzJGdyb3VwczIgPSBtYXRjaGVzLmdyb3VwcykgIT09IG51bGwgJiYgX21hdGNoZXMkZ3JvdXBzMiAhPT0gdm9pZCAwICYmIF9tYXRjaGVzJGdyb3VwczIudW5pdCkge1xuICAgICAgICBpZiAoIWZvdW5kVW5pdCkge1xuICAgICAgICAgIGZvdW5kVW5pdCA9IG1hdGNoZXMuZ3JvdXBzLnVuaXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRVbml0ICE9PSBtYXRjaGVzLmdyb3Vwcy51bml0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBsZSB1bml0cyBmb3VuZC4gVXNlIGBjYWxjKClgIHRvIG1peCBhbmQgbWF0aCBtdWx0aXBsZSB1bml0IHR5cGVzIChlLmcuIGAlYCAmIGBweGApIGluc3RlYWQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgZm91bmROdW1lcmljVmFsdWVzLnB1c2godmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUgdHlwZSAtIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KGNhbGxiYWNrLmFwcGx5KHZvaWQgMCwgZm91bmROdW1lcmljVmFsdWVzKSkuY29uY2F0KHVuaXQgfHwgZm91bmRVbml0KTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYHB4YCB2YWx1ZSBiYXNlZCBvbiBhIHNjYWxlIG11bHRpcGxpZXJcbiAqIEBwYXJhbSBzY2FsZSAtIFRoZSBmb250IHNjYWxlIG11bHRpcGxpZXJcbiAqICpcbiAqIEBwYXJhbSB0aGVtZU9yQmFzZSAtIFRoZW1lIGJhc2UgdmFsdWVcbiAqICpcbiAqIEByZXR1cm5zIHN0cmluZyAtIFJlbSB1bml0IGFsaWduZWQgdG8gYmFzZWxpbmVcbiAqL1xuXG5leHBvcnQgdmFyIHNpemVUb1BpeGVsID0gZnVuY3Rpb24gc2l6ZVRvUGl4ZWwoKSB7XG4gIHZhciBzY2FsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogMTtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGVtZU9yQmFzZSkge1xuICAgIHZhciBiYXNlID0gX3R5cGVvZih0aGVtZU9yQmFzZSkgPT09ICdvYmplY3QnID8gdGhlbWVPckJhc2UuYmFzZSA6IHRoZW1lT3JCYXNlO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChiYXNlICogc2NhbGUsIFwicHhcIik7XG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi9sb2dpY2Fscyc7XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGZvbnQtc2l6ZSB2YWx1ZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgc2NhbGUga2V5XG4gKiBAcGFyYW0gc2NhbGUgLSBUaGUgZm9udCBzY2FsZSBrZXlcbiAqIEBwYXJhbSB0aGVtZSAtIFJlcXVpcmVzIHRoZSBgYmFzZWAgYW5kIGBmb250YCBrZXlzXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgLSBzZWUgX0ZvbnRTY2FsZU9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBzdHJpbmcgLSBDYWxjdWxhdGVkIGZvbnQtc2l6ZSB2YWx1ZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBldWlGb250U2l6ZUZyb21TY2FsZShzY2FsZSwgX3JlZikge1xuICB2YXIgYmFzZSA9IF9yZWYuYmFzZSxcbiAgICBmb250ID0gX3JlZi5mb250O1xuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgIF9yZWYyJHVuaXQgPSBfcmVmMi51bml0LFxuICAgIHVuaXQgPSBfcmVmMiR1bml0ID09PSB2b2lkIDAgPyBmb250LmRlZmF1bHRVbml0cyA6IF9yZWYyJHVuaXQsXG4gICAgY3VzdG9tU2NhbGUgPSBfcmVmMi5jdXN0b21TY2FsZTtcbiAgaWYgKHVuaXQgPT09ICdlbScpIHtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQoZm9udC5zY2FsZVtzY2FsZV0sIFwiZW1cIik7XG4gIH1cbiAgdmFyIG51bWVyYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW3NjYWxlXTtcbiAgaWYgKGN1c3RvbVNjYWxlKSBudW1lcmF0b3IgKj0gZm9udC5zY2FsZVtjdXN0b21TY2FsZV07XG4gIHZhciBkZW5vbWluYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW2ZvbnQuYm9keS5zY2FsZV07XG4gIHJldHVybiB1bml0ID09PSAncHgnID8gXCJcIi5jb25jYXQobnVtZXJhdG9yLCBcInB4XCIpIDogXCJcIi5jb25jYXQoKG51bWVyYXRvciAvIGRlbm9taW5hdG9yKS50b0ZpeGVkKDQpLCBcInJlbVwiKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsaW5lLWhlaWdodCB0byB0aGUgY2xvc2VzdCBtdWx0aXBsZSBvZiB0aGUgYmFzZWxpbmVcbiAqIEVYOiBBIHByb3BlciBsaW5lLWhlaWdodCBmb3IgdGV4dCBpcyAxLjUgdGltZXMgdGhlIGZvbnQtc2l6ZS5cbiAqICAgICBJZiBvdXIgYmFzZSBmb250IHNpemUgKGV1aUZvbnRTaXplKSBpcyAxNiwgYW5kIG91ciBiYXNlbGluZSBpcyA0LiBUbyBlbnN1cmUgdGhlXG4gKiAgICAgdGV4dCBzdGF5cyBvbiB0aGUgYmFzZWxpbmUsIHdlIHBhc3MgYSBtdWx0aXBsaWVyIHRvIGNhbGN1bGF0ZSBhIGxpbmUtaGVpZ2h0LlxuICogQHBhcmFtIHNjYWxlIC0gVGhlIGZvbnQgc2NhbGUga2V5XG4gKiBAcGFyYW0gdGhlbWUgLSBSZXF1aXJlcyB0aGUgYGJhc2VgIGFuZCBgZm9udGAga2V5c1xuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIC0gc2VlIF9Gb250U2NhbGVPcHRpb25zXG4gKlxuICogQHJldHVybnMgc3RyaW5nIC0gQ2FsY3VsYXRlZCBsaW5lLWhlaWdodCB2YWx1ZSBhbGlnbmVkIHRvIGJhc2VsaW5lXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV1aUxpbmVIZWlnaHRGcm9tQmFzZWxpbmUoc2NhbGUsIF9yZWYzKSB7XG4gIHZhciBiYXNlID0gX3JlZjMuYmFzZSxcbiAgICBmb250ID0gX3JlZjMuZm9udDtcbiAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fSxcbiAgICBfcmVmNCR1bml0ID0gX3JlZjQudW5pdCxcbiAgICB1bml0ID0gX3JlZjQkdW5pdCA9PT0gdm9pZCAwID8gZm9udC5kZWZhdWx0VW5pdHMgOiBfcmVmNCR1bml0LFxuICAgIGN1c3RvbVNjYWxlID0gX3JlZjQuY3VzdG9tU2NhbGU7XG4gIHZhciBiYXNlbGluZSA9IGZvbnQuYmFzZWxpbmUsXG4gICAgbGluZUhlaWdodE11bHRpcGxpZXIgPSBmb250LmxpbmVIZWlnaHRNdWx0aXBsaWVyO1xuICB2YXIgbnVtZXJhdG9yID0gYmFzZSAqIGZvbnQuc2NhbGVbc2NhbGVdO1xuICBpZiAoY3VzdG9tU2NhbGUpIG51bWVyYXRvciAqPSBmb250LnNjYWxlW2N1c3RvbVNjYWxlXTtcbiAgdmFyIGRlbm9taW5hdG9yID0gYmFzZSAqIGZvbnQuc2NhbGVbZm9udC5ib2R5LnNjYWxlXTtcbiAgdmFyIF9saW5lSGVpZ2h0TXVsdGlwbGllciA9IG51bWVyYXRvciA8PSBiYXNlID8gbGluZUhlaWdodE11bHRpcGxpZXIgOiBsaW5lSGVpZ2h0TXVsdGlwbGllciAqIDAuODMzO1xuICBpZiAodW5pdCA9PT0gJ2VtJykge1xuICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBsaW5lLWhlaWdodCB2aWEgYGVtYCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBhZ2FpbnN0IHRoZSBwaXhlbCBiYXNlbGluZSBncmlkO1xuICAgIC8vIHdlIHdpbGwgYXNzdW1lIHRoYXQgdHlwaWNhbGx5IGxhcmdlciBzY2FsZSBmb250LXNpemVzIHNob3VsZCBoYXZlIGEgc2hvcnRlciBsaW5lLWhlaWdodDtcbiAgICByZXR1cm4gX2xpbmVIZWlnaHRNdWx0aXBsaWVyLnRvRml4ZWQoNCkudG9TdHJpbmcoKTtcbiAgfVxuICB2YXIgcGl4ZWxWYWx1ZSA9IE1hdGguZmxvb3IoTWF0aC5yb3VuZChudW1lcmF0b3IgKiBfbGluZUhlaWdodE11bHRpcGxpZXIpIC8gYmFzZWxpbmUpICogYmFzZWxpbmU7XG4gIHJldHVybiB1bml0ID09PSAncHgnID8gXCJcIi5jb25jYXQocGl4ZWxWYWx1ZSwgXCJweFwiKSA6IFwiXCIuY29uY2F0KChwaXhlbFZhbHVlIC8gZGVub21pbmF0b3IpLnRvRml4ZWQoNCksIFwicmVtXCIpO1xufVxuXG4vKipcbiAqIFRleHQgd2VpZ2h0IHNoaWZ0aW5nXG4gKlxuICogV2hlbiBjaGFuZ2luZyB0aGUgZm9udC13ZWlnaHQgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBjb21wb25lbnQsXG4gKiB0aGlzIG1peGluIHdpbGwgZW5zdXJlIHRoYXQgdGhlIHNpemluZyBpcyBkZXBlbmRlbnQgb24gdGhlIGJvbGRlc3RcbiAqIHdlaWdodCBzbyBpdCBkb2Vzbid0IHNoaWZ0IHNpYmxpbmcgY29udGVudC5cbiAqL1xuZXhwb3J0IHZhciBldWlUZXh0U2hpZnQgPSBmdW5jdGlvbiBldWlUZXh0U2hpZnQoKSB7XG4gIHZhciBmb250V2VpZ2h0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnYm9sZCc7XG4gIHZhciBhdHRyaWJ1dGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdkYXRhLXRleHQnO1xuICB2YXIgZXVpVGhlbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIFwiXFxuICAmOjphZnRlciB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICBjb250ZW50OiBhdHRyKFwiLmNvbmNhdChhdHRyaWJ1dGUsIFwiKTtcXG4gICAgZm9udC13ZWlnaHQ6IFwiKS5jb25jYXQoZXVpVGhlbWUuZm9udC53ZWlnaHRbZm9udFdlaWdodF0sIFwiO1xcbiAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsIDApLCBcIlxcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICB9XCIpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgc2l6ZVRvUGl4ZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5leHBvcnQgdmFyIGJhc2UgPSAxNjtcbmV4cG9ydCB2YXIgc2l6ZSA9IHtcbiAgeHhzOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjEyNSkpLFxuICB4czogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4yNSkpLFxuICBzOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjUpKSxcbiAgbTogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC43NSkpLFxuICBiYXNlOiBjb21wdXRlZChzaXplVG9QaXhlbCgpKSxcbiAgbDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMS41KSksXG4gIHhsOiBjb21wdXRlZChzaXplVG9QaXhlbCgyKSksXG4gIHh4bDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMi41KSksXG4gIHh4eGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDMpKSxcbiAgeHh4eGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDQpKVxufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBzaXplVG9QaXhlbCB9IGZyb20gJy4uLy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmV4cG9ydCB2YXIgYm9yZGVyID0ge1xuICBjb2xvcjogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgIGxpZ2h0U2hhZGUgPSBfcmVmMlswXTtcbiAgICByZXR1cm4gbGlnaHRTaGFkZTtcbiAgfSwgWydjb2xvcnMubGlnaHRTaGFkZSddKSxcbiAgd2lkdGg6IHtcbiAgICB0aGluOiAnMXB4JyxcbiAgICB0aGljazogJzJweCdcbiAgfSxcbiAgcmFkaXVzOiB7XG4gICAgbWVkaXVtOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjM3NSkpLFxuICAgIHNtYWxsOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjI1KSlcbiAgfSxcbiAgdGhpbjogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgdmFyIF9yZWY0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjMsIDIpLFxuICAgICAgd2lkdGggPSBfcmVmNFswXSxcbiAgICAgIGNvbG9yID0gX3JlZjRbMV07XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHdpZHRoLnRoaW4sIFwiIHNvbGlkIFwiKS5jb25jYXQoY29sb3IpO1xuICB9LCBbJ2JvcmRlci53aWR0aCcsICdib3JkZXIuY29sb3InXSksXG4gIHRoaWNrOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICB2YXIgX3JlZjYgPSBfc2xpY2VkVG9BcnJheShfcmVmNSwgMiksXG4gICAgICB3aWR0aCA9IF9yZWY2WzBdLFxuICAgICAgY29sb3IgPSBfcmVmNlsxXTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQod2lkdGgudGhpY2ssIFwiIHNvbGlkIFwiKS5jb25jYXQoY29sb3IpO1xuICB9LCBbJ2JvcmRlci53aWR0aCcsICdib3JkZXIuY29sb3InXSksXG4gIGVkaXRhYmxlOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjcpIHtcbiAgICB2YXIgX3JlZjggPSBfc2xpY2VkVG9BcnJheShfcmVmNywgMiksXG4gICAgICB3aWR0aCA9IF9yZWY4WzBdLFxuICAgICAgY29sb3IgPSBfcmVmOFsxXTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQod2lkdGgudGhpY2ssIFwiIGRvdHRlZCBcIikuY29uY2F0KGNvbG9yKTtcbiAgfSwgWydib3JkZXIud2lkdGgnLCAnYm9yZGVyLmNvbG9yJ10pXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIGxldmVscyA9IHtcbiAgdG9hc3Q6IDkwMDAsXG4gIG1vZGFsOiA4MDAwLFxuICBtYXNrOiA2MDAwLFxuICBuYXZpZ2F0aW9uOiA2MDAwLFxuICBtZW51OiAyMDAwLFxuICBoZWFkZXI6IDEwMDAsXG4gIGZseW91dDogMTAwMCxcbiAgbWFza0JlbG93SGVhZGVyOiAxMDAwLFxuICBjb250ZW50OiAwXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG4vLyBUeXBvZ3JhcGhpYyBzY2FsZSAtLSBsb29zZWx5IGJhc2VkIG9uIE1ham9yIFRoaXJkICgxLjI1MClcbmV4cG9ydCB2YXIgZm9udFNjYWxlID0ge1xuICB4eHhzOiAwLjU2MjUsXG4gIHh4czogMC42ODc1LFxuICB4czogMC43NSxcbiAgczogMC44NzUsXG4gIG06IDEsXG4gIGw6IDEuMzc1LFxuICB4bDogMS42ODc1LFxuICB4eGw6IDIuMTI1XG59O1xuXG4vLyBGYW1pbGllcyAmIGJhc2UgZm9udCBzZXR0aW5nc1xuZXhwb3J0IHZhciBmb250QmFzZSA9IHtcbiAgZmFtaWx5OiBcIidJbnRlcicsIEJsaW5rTWFjU3lzdGVtRm9udCwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxuICBmYW1pbHlDb2RlOiBcIidSb2JvdG8gTW9ubycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcbiAgZmFtaWx5U2VyaWY6ICdHZW9yZ2lhLCBUaW1lcywgVGltZXMgTmV3IFJvbWFuLCBzZXJpZicsXG4gIC8vIENhcmVmdWwgdXNpbmcgbGlnYXR1cmVzLiBDb2RlIGVkaXRvcnMgbGlrZSBBQ0Ugd2lsbCBvZnRlbiBlcnJvciBiZWNhdXNlIG9mIHdpZHRoIGNhbGN1bGF0aW9uc1xuICBmZWF0dXJlU2V0dGluZ3M6IFwiJ2NhbHQnIDEsICdrZXJuJyAxLCAnbGlnYScgMVwiLFxuICBkZWZhdWx0VW5pdHM6ICdyZW0nLFxuICBiYXNlbGluZTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgIGJhc2UgPSBfcmVmMlswXTtcbiAgICByZXR1cm4gYmFzZSAvIDQ7XG4gIH0sIFsnYmFzZSddKSxcbiAgbGluZUhlaWdodE11bHRpcGxpZXI6IDEuNVxufTtcbmV4cG9ydCB2YXIgZm9udFdlaWdodCA9IHtcbiAgbGlnaHQ6IDMwMCxcbiAgcmVndWxhcjogNDAwLFxuICBtZWRpdW06IDUwMCxcbiAgc2VtaUJvbGQ6IDYwMCxcbiAgYm9sZDogNzAwXG59O1xuZXhwb3J0IHZhciBmb250ID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBmb250QmFzZSksIHt9LCB7XG4gIHNjYWxlOiBmb250U2NhbGUsXG4gIHdlaWdodDogZm9udFdlaWdodCxcbiAgYm9keToge1xuICAgIHNjYWxlOiAncycsXG4gICAgd2VpZ2h0OiAncmVndWxhcidcbiAgfSxcbiAgdGl0bGU6IHtcbiAgICB3ZWlnaHQ6ICdib2xkJ1xuICB9XG59KTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5pbXBvcnQgeyB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2NvbG9yL21hbmlwdWxhdGlvbic7XG5pbXBvcnQgeyBzaXplVG9QaXhlbCB9IGZyb20gJy4uLy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucy9zaXplJztcbmV4cG9ydCB2YXIgZm9jdXMgPSB7XG4gIC8vIEZvY3VzIHJpbmdcbiAgY29sb3I6ICdjdXJyZW50Q29sb3InLFxuICB3aWR0aDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4xMjUpKSxcbiAgLy8gRm9jdXMgYmFja2dyb3VuZFxuICB0cmFuc3BhcmVuY3k6IHtcbiAgICBMSUdIVDogMC4xLFxuICAgIERBUks6IDAuMlxuICB9LFxuICBiYWNrZ3JvdW5kQ29sb3I6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIGNvbG9ycyA9IF9yZWYuY29sb3JzLFxuICAgICAgZm9jdXMgPSBfcmVmLmZvY3VzO1xuICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZShjb2xvcnMucHJpbWFyeSwgZm9jdXMudHJhbnNwYXJlbmN5KTtcbiAgfSlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGJ1aWxkVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fY29sb3JzJztcbmltcG9ydCB7IGFuaW1hdGlvbiB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19hbmltYXRpb24nO1xuaW1wb3J0IHsgYnJlYWtwb2ludCB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19icmVha3BvaW50JztcbmltcG9ydCB7IGJhc2UsIHNpemUgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fc2l6ZSc7XG5pbXBvcnQgeyBib3JkZXIgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYm9yZGVycyc7XG5pbXBvcnQgeyBsZXZlbHMgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fbGV2ZWxzJztcbmltcG9ydCB7IGZvbnQgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fdHlwb2dyYXBoeSc7XG5pbXBvcnQgeyBmb2N1cyB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zdGF0ZXMnO1xuZXhwb3J0IHZhciBBTVNURVJEQU1fTkFNRV9LRVkgPSAnRVVJX1RIRU1FX0FNU1RFUkRBTSc7XG5leHBvcnQgdmFyIGV1aVRoZW1lQW1zdGVyZGFtID0ge1xuICBjb2xvcnM6IGNvbG9ycyxcbiAgYmFzZTogYmFzZSxcbiAgc2l6ZTogc2l6ZSxcbiAgYm9yZGVyOiBib3JkZXIsXG4gIGZvbnQ6IGZvbnQsXG4gIGFuaW1hdGlvbjogYW5pbWF0aW9uLFxuICBicmVha3BvaW50OiBicmVha3BvaW50LFxuICBsZXZlbHM6IGxldmVscyxcbiAgZm9jdXM6IGZvY3VzXG59O1xuZXhwb3J0IHZhciBFdWlUaGVtZUFtc3RlcmRhbSA9IGJ1aWxkVGhlbWUoZXVpVGhlbWVBbXN0ZXJkYW0sIEFNU1RFUkRBTV9OQU1FX0tFWSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbnZhciBwcm92aWRlcldhcm5pbmcgPSB1bmRlZmluZWQ7XG5leHBvcnQgdmFyIHNldEV1aURldlByb3ZpZGVyV2FybmluZyA9IGZ1bmN0aW9uIHNldEV1aURldlByb3ZpZGVyV2FybmluZyh3YXJuaW5nVHlwZSkge1xuICByZXR1cm4gcHJvdmlkZXJXYXJuaW5nID0gd2FybmluZ1R5cGU7XG59O1xuZXhwb3J0IHZhciBnZXRFdWlEZXZQcm92aWRlcldhcm5pbmcgPSBmdW5jdGlvbiBnZXRFdWlEZXZQcm92aWRlcldhcm5pbmcoKSB7XG4gIHJldHVybiBwcm92aWRlcldhcm5pbmc7XG59O1xuXG4vLyBOb3QgYSBwdWJsaWMgdG9wLWxldmVsIEVVSSBleHBvcnQsIGN1cnJlbnRseSBmb3IgaW50ZXJuYWwgdXNlXG5leHBvcnQgdmFyIGVtaXRFdWlQcm92aWRlcldhcm5pbmcgPSBmdW5jdGlvbiBlbWl0RXVpUHJvdmlkZXJXYXJuaW5nKHByb3ZpZGVyTWVzc2FnZSkge1xuICAvLyBIYW5kbGUgY2FsbGJhY2sgdHlwZXNcbiAgaWYgKHR5cGVvZiBwcm92aWRlcldhcm5pbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gcHJvdmlkZXJXYXJuaW5nKHByb3ZpZGVyTWVzc2FnZSk7XG4gIH1cbiAgLy8gSGFuZGxlIGxldmVsIHR5cGVzXG4gIHN3aXRjaCAocHJvdmlkZXJXYXJuaW5nKSB7XG4gICAgY2FzZSAnbG9nJzpcbiAgICAgIGNvbnNvbGUubG9nKHByb3ZpZGVyTWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd3YXJuJzpcbiAgICAgIGNvbnNvbGUud2Fybihwcm92aWRlck1lc3NhZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZXJyb3InOlxuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb3ZpZGVyTWVzc2FnZSk7XG4gICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG59OyIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZUNhY2hlIGZyb20gJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCB3ZWFrTWVtb2l6ZSBmcm9tICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCByZWdpc3RlclN0eWxlcywgaW5zZXJ0U3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5cbnZhciBpc0RldmVsb3BtZW50ID0gZmFsc2U7XG5cbnZhciBFbW90aW9uQ2FjaGVDb250ZXh0ID0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCggLy8gd2UncmUgZG9pbmcgdGhpcyB0byBhdm9pZCBwcmVjb25zdHJ1Y3QncyBkZWFkIGNvZGUgZWxpbWluYXRpb24gaW4gdGhpcyBvbmUgY2FzZVxuLy8gYmVjYXVzZSB0aGlzIG1vZHVsZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlXG4vLyBidXQgaXQncyBhbHNvIHJlcXVpcmVkIGluIHJlYWN0IG5hdGl2ZSBhbmQgc2ltaWxhciBlbnZpcm9ubWVudHMgc29tZXRpbWVzXG4vLyBhbmQgd2UgY291bGQgaGF2ZSBhIHNwZWNpYWwgYnVpbGQganVzdCBmb3IgdGhhdFxuLy8gYnV0IHRoaXMgaXMgbXVjaCBlYXNpZXIgYW5kIHRoZSBuYXRpdmUgcGFja2FnZXNcbi8vIG1pZ2h0IHVzZSBhIGRpZmZlcmVudCB0aGVtZSBjb250ZXh0IGluIHRoZSBmdXR1cmUgYW55d2F5XG50eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnID8gLyogI19fUFVSRV9fICovY3JlYXRlQ2FjaGUoe1xuICBrZXk6ICdjc3MnXG59KSA6IG51bGwpO1xuXG52YXIgQ2FjaGVQcm92aWRlciA9IEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXI7XG52YXIgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gdXNlRW1vdGlvbkNhY2hlKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcbn07XG5cbnZhciB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG52YXIgVGhlbWVDb250ZXh0ID0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdXRlclRoZW1lLCB0aGVtZSk7XG59O1xuXG52YXIgY3JlYXRlQ2FjaGVXaXRoVGhlbWUgPSAvKiAjX19QVVJFX18gKi93ZWFrTWVtb2l6ZShmdW5jdGlvbiAob3V0ZXJUaGVtZSkge1xuICByZXR1cm4gd2Vha01lbW9pemUoZnVuY3Rpb24gKHRoZW1lKSB7XG4gICAgcmV0dXJuIGdldFRoZW1lKG91dGVyVGhlbWUsIHRoZW1lKTtcbiAgfSk7XG59KTtcbnZhciBUaGVtZVByb3ZpZGVyID0gZnVuY3Rpb24gVGhlbWVQcm92aWRlcihwcm9wcykge1xuICB2YXIgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG5cbiAgaWYgKHByb3BzLnRoZW1lICE9PSB0aGVtZSkge1xuICAgIHRoZW1lID0gY3JlYXRlQ2FjaGVXaXRoVGhlbWUodGhlbWUpKHByb3BzLnRoZW1lKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWVcbiAgfSwgcHJvcHMuY2hpbGRyZW4pO1xufTtcbmZ1bmN0aW9uIHdpdGhUaGVtZShDb21wb25lbnQpIHtcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH0pO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgdHlwZVByb3BOYW1lID0gJ19fRU1PVElPTl9UWVBFX1BMRUFTRV9ET19OT1RfVVNFX18nO1xudmFyIGNyZWF0ZUVtb3Rpb25Qcm9wcyA9IGZ1bmN0aW9uIGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcykge1xuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIF9rZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIF9rZXkpKSB7XG4gICAgICBuZXdQcm9wc1tfa2V5XSA9IHByb3BzW19rZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzW3R5cGVQcm9wTmFtZV0gPSB0eXBlOyAvLyBSdW50aW1lIGxhYmVsaW5nIGlzIGFuIG9wdC1pbiBmZWF0dXJlIGJlY2F1c2U6XG5cbiAgcmV0dXJuIG5ld1Byb3BzO1xufTtcblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkID0gX3JlZi5zZXJpYWxpemVkLFxuICAgICAgaXNTdHJpbmdUYWcgPSBfcmVmLmlzU3RyaW5nVGFnO1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIEVtb3Rpb24gPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICB2YXIgY3NzUHJvcCA9IHByb3BzLmNzczsgLy8gc28gdGhhdCB1c2luZyBgY3NzYCBmcm9tIGBlbW90aW9uYCBhbmQgcGFzc2luZyB0aGUgcmVzdWx0IHRvIHRoZSBjc3MgcHJvcCB3b3Jrc1xuICAvLyBub3QgcGFzc2luZyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBzZXJpYWxpemVTdHlsZXMgYmVjYXVzZSBpdCB3b3VsZFxuICAvLyBtYWtlIGNlcnRhaW4gYmFiZWwgb3B0aW1pc2F0aW9ucyBub3QgcG9zc2libGVcblxuICBpZiAodHlwZW9mIGNzc1Byb3AgPT09ICdzdHJpbmcnICYmIGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNzc1Byb3AgPSBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdO1xuICB9XG5cbiAgdmFyIFdyYXBwZWRDb21wb25lbnQgPSBwcm9wc1t0eXBlUHJvcE5hbWVdO1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtjc3NQcm9wXTtcbiAgdmFyIGNsYXNzTmFtZSA9ICcnO1xuXG4gIGlmICh0eXBlb2YgcHJvcHMuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMoY2FjaGUucmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgcHJvcHMuY2xhc3NOYW1lKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSArIFwiIFwiO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMocmVnaXN0ZXJlZFN0eWxlcywgdW5kZWZpbmVkLCBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuXG4gIGNsYXNzTmFtZSArPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIgX2tleTIgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIF9rZXkyKSAmJiBfa2V5MiAhPT0gJ2NzcycgJiYgX2tleTIgIT09IHR5cGVQcm9wTmFtZSAmJiAoIWlzRGV2ZWxvcG1lbnQgKSkge1xuICAgICAgbmV3UHJvcHNbX2tleTJdID0gcHJvcHNbX2tleTJdO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICBpZiAocmVmKSB7XG4gICAgbmV3UHJvcHMucmVmID0gcmVmO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNEZXZlbG9wbWVudCBhcyBpLCB1c2VUaGVtZSBhcyB1LCB3aXRoRW1vdGlvbkNhY2hlIGFzIHcgfTtcbiIsICJ2YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG4vKlxuXG5CYXNlZCBvZmYgZ2xhbW9yJ3MgU3R5bGVTaGVldCwgdGhhbmtzIFN1bmlsIFx1Mjc2NFx1RkUwRlxuXG5oaWdoIHBlcmZvcm1hbmNlIFN0eWxlU2hlZXQgZm9yIGNzcy1pbi1qcyBzeXN0ZW1zXG5cbi0gdXNlcyBtdWx0aXBsZSBzdHlsZSB0YWdzIGJlaGluZCB0aGUgc2NlbmVzIGZvciBtaWxsaW9ucyBvZiBydWxlc1xuLSB1c2VzIGBpbnNlcnRSdWxlYCBmb3IgYXBwZW5kaW5nIGluIHByb2R1Y3Rpb24gZm9yICptdWNoKiBmYXN0ZXIgcGVyZm9ybWFuY2VcblxuLy8gdXNhZ2VcblxuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0J1xuXG5sZXQgc3R5bGVTaGVldCA9IG5ldyBTdHlsZVNoZWV0KHsga2V5OiAnJywgY29udGFpbmVyOiBkb2N1bWVudC5oZWFkIH0pXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuc3R5bGVTaGVldC5mbHVzaCgpXG4tIGVtcHRpZXMgdGhlIHN0eWxlc2hlZXQgb2YgYWxsIGl0cyBjb250ZW50c1xuXG4qL1xuXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIHJldHVybiB0YWcuc2hlZXQ7XG4gIH0gLy8gdGhpcyB3ZWlyZG5lc3MgYnJvdWdodCB0byB5b3UgYnkgZmlyZWZveFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSA9PT0gdGFnKSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgfVxuICB9IC8vIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyByZXR1cm4gd2l0aCBhIHZhbHVlXG4gIC8vIFRTIGNhbid0IHVuZGVyc3RhbmQgaXQgdGhvdWdoIHNvIHdlIG1ha2UgaXQgc3RvcCBjb21wbGFpbmluZyBoZXJlXG5cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyAhaXNEZXZlbG9wbWVudCA6IG9wdGlvbnMuc3BlZWR5O1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLm5vbmNlID0gb3B0aW9ucy5ub25jZTsgLy8ga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBzaGVldHNcblxuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICB0aGlzLnByZXBlbmQgPSBvcHRpb25zLnByZXBlbmQ7XG4gICAgdGhpcy5pbnNlcnRpb25Qb2ludCA9IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnQ7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oeWRyYXRlID0gZnVuY3Rpb24gaHlkcmF0ZShub2Rlcykge1xuICAgIG5vZGVzLmZvckVhY2godGhpcy5faW5zZXJ0VGFnKTtcbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAvLyB0aGUgbWF4IGxlbmd0aCBpcyBob3cgbWFueSBydWxlcyB3ZSBoYXZlIHBlciBzdHlsZSB0YWcsIGl0J3MgNjUwMDAgaW4gc3BlZWR5IG1vZGVcbiAgICAvLyBpdCdzIDEgaW4gZGV2IGJlY2F1c2Ugd2UgaW5zZXJ0IHNvdXJjZSBtYXBzIHRoYXQgbWFwIGEgc2luZ2xlIHJ1bGUgdG8gYSBsb2NhdGlvblxuICAgIC8vIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgc291cmNlIG1hcCBwZXIgc3R5bGUgdGFnXG4gICAgaWYgKHRoaXMuY3RyICUgKHRoaXMuaXNTcGVlZHkgPyA2NTAwMCA6IDEpID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnNlcnRUYWcoY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcblxuICAgIGlmICh0aGlzLmlzU3BlZWR5KSB7XG4gICAgICB2YXIgc2hlZXQgPSBzaGVldEZvclRhZyh0YWcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICAgIC8vIHRoZSBiaWcgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0cisrO1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBfdGFnJHBhcmVudE5vZGU7XG5cbiAgICAgIHJldHVybiAoX3RhZyRwYXJlbnROb2RlID0gdGFnLnBhcmVudE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGFnJHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlU2hlZXQ7XG59KCk7XG5cbmV4cG9ydCB7IFN0eWxlU2hlZXQgfTtcbiIsICJleHBvcnQgdmFyIE1TID0gJy1tcy0nXG5leHBvcnQgdmFyIE1PWiA9ICctbW96LSdcbmV4cG9ydCB2YXIgV0VCS0lUID0gJy13ZWJraXQtJ1xuXG5leHBvcnQgdmFyIENPTU1FTlQgPSAnY29tbSdcbmV4cG9ydCB2YXIgUlVMRVNFVCA9ICdydWxlJ1xuZXhwb3J0IHZhciBERUNMQVJBVElPTiA9ICdkZWNsJ1xuXG5leHBvcnQgdmFyIFBBR0UgPSAnQHBhZ2UnXG5leHBvcnQgdmFyIE1FRElBID0gJ0BtZWRpYSdcbmV4cG9ydCB2YXIgSU1QT1JUID0gJ0BpbXBvcnQnXG5leHBvcnQgdmFyIENIQVJTRVQgPSAnQGNoYXJzZXQnXG5leHBvcnQgdmFyIFZJRVdQT1JUID0gJ0B2aWV3cG9ydCdcbmV4cG9ydCB2YXIgU1VQUE9SVFMgPSAnQHN1cHBvcnRzJ1xuZXhwb3J0IHZhciBET0NVTUVOVCA9ICdAZG9jdW1lbnQnXG5leHBvcnQgdmFyIE5BTUVTUEFDRSA9ICdAbmFtZXNwYWNlJ1xuZXhwb3J0IHZhciBLRVlGUkFNRVMgPSAnQGtleWZyYW1lcydcbmV4cG9ydCB2YXIgRk9OVF9GQUNFID0gJ0Bmb250LWZhY2UnXG5leHBvcnQgdmFyIENPVU5URVJfU1RZTEUgPSAnQGNvdW50ZXItc3R5bGUnXG5leHBvcnQgdmFyIEZPTlRfRkVBVFVSRV9WQUxVRVMgPSAnQGZvbnQtZmVhdHVyZS12YWx1ZXMnXG5leHBvcnQgdmFyIExBWUVSID0gJ0BsYXllcidcbiIsICIvKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCB2YXIgZnJvbSA9IFN0cmluZy5mcm9tQ2hhckNvZGVcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IHZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoICh2YWx1ZSwgbGVuZ3RoKSB7XG5cdHJldHVybiBjaGFyYXQodmFsdWUsIDApIF4gNDUgPyAoKCgoKCgobGVuZ3RoIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAwKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDEpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMikpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAzKSA6IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW0gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS50cmltKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtzdHJpbmc/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2ggKHZhbHVlLCBwYXR0ZXJuKSB7XG5cdHJldHVybiAodmFsdWUgPSBwYXR0ZXJuLmV4ZWModmFsdWUpKSA/IHZhbHVlWzBdIDogdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBwYXR0ZXJuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UgKHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkge1xuXHRyZXR1cm4gdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4b2YgKHZhbHVlLCBzZWFyY2gpIHtcblx0cmV0dXJuIHZhbHVlLmluZGV4T2Yoc2VhcmNoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyYXQgKHZhbHVlLCBpbmRleCkge1xuXHRyZXR1cm4gdmFsdWUuY2hhckNvZGVBdChpbmRleCkgfCAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0ciAodmFsdWUsIGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHZhbHVlLnNsaWNlKGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZW9mICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kICh2YWx1ZSwgYXJyYXkpIHtcblx0cmV0dXJuIGFycmF5LnB1c2godmFsdWUpLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSAoYXJyYXksIGNhbGxiYWNrKSB7XG5cdHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2spLmpvaW4oJycpXG59XG4iLCAiaW1wb3J0IHtmcm9tLCB0cmltLCBjaGFyYXQsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG5leHBvcnQgdmFyIGxpbmUgPSAxXG5leHBvcnQgdmFyIGNvbHVtbiA9IDFcbmV4cG9ydCB2YXIgbGVuZ3RoID0gMFxuZXhwb3J0IHZhciBwb3NpdGlvbiA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVyID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXJzID0gJydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3RbXSB8IHN0cmluZ30gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vZGUgKHZhbHVlLCByb290LCBwYXJlbnQsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHJldHVybiB7dmFsdWU6IHZhbHVlLCByb290OiByb290LCBwYXJlbnQ6IHBhcmVudCwgdHlwZTogdHlwZSwgcHJvcHM6IHByb3BzLCBjaGlsZHJlbjogY2hpbGRyZW4sIGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uLCBsZW5ndGg6IGxlbmd0aCwgcmV0dXJuOiAnJ31cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChyb290LCBwcm9wcykge1xuXHRyZXR1cm4gYXNzaWduKG5vZGUoJycsIG51bGwsIG51bGwsICcnLCBudWxsLCBudWxsLCAwKSwgcm9vdCwge2xlbmd0aDogLXJvb3QubGVuZ3RofSwgcHJvcHMpXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhciAoKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPiAwID8gY2hhcmF0KGNoYXJhY3RlcnMsIC0tcG9zaXRpb24pIDogMFxuXG5cdGlmIChjb2x1bW4tLSwgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lLS1cblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dCAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uIDwgbGVuZ3RoID8gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKyspIDogMFxuXG5cdGlmIChjb2x1bW4rKywgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lKytcblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVlayAoKSB7XG5cdHJldHVybiBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FyZXQgKCkge1xuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlIChiZWdpbiwgZW5kKSB7XG5cdHJldHVybiBzdWJzdHIoY2hhcmFjdGVycywgYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW4gKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Ly8gXFwwIFxcdCBcXG4gXFxyIFxccyB3aGl0ZXNwYWNlIHRva2VuXG5cdFx0Y2FzZSAwOiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRyZXR1cm4gNVxuXHRcdC8vICEgKyAsIC8gPiBAIH4gaXNvbGF0ZSB0b2tlblxuXHRcdGNhc2UgMzM6IGNhc2UgNDM6IGNhc2UgNDQ6IGNhc2UgNDc6IGNhc2UgNjI6IGNhc2UgNjQ6IGNhc2UgMTI2OlxuXHRcdC8vIDsgeyB9IGJyZWFrcG9pbnQgdG9rZW5cblx0XHRjYXNlIDU5OiBjYXNlIDEyMzogY2FzZSAxMjU6XG5cdFx0XHRyZXR1cm4gNFxuXHRcdC8vIDogYWNjb21wYW5pZWQgdG9rZW5cblx0XHRjYXNlIDU4OlxuXHRcdFx0cmV0dXJuIDNcblx0XHQvLyBcIiAnICggWyBvcGVuaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDQwOiBjYXNlIDkxOlxuXHRcdFx0cmV0dXJuIDJcblx0XHQvLyApIF0gY2xvc2luZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSA0MTogY2FzZSA5Mzpcblx0XHRcdHJldHVybiAxXG5cdH1cblxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGxpbmUgPSBjb2x1bW4gPSAxLCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyA9IHZhbHVlKSwgcG9zaXRpb24gPSAwLCBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGNoYXJhY3RlcnMgPSAnJywgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdCAodHlwZSkge1xuXHRyZXR1cm4gdHJpbShzbGljZShwb3NpdGlvbiAtIDEsIGRlbGltaXRlcih0eXBlID09PSA5MSA/IHR5cGUgKyAyIDogdHlwZSA9PT0gNDAgPyB0eXBlICsgMSA6IHR5cGUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHRva2VuaXplcihhbGxvYyh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlICh0eXBlKSB7XG5cdHdoaWxlIChjaGFyYWN0ZXIgPSBwZWVrKCkpXG5cdFx0aWYgKGNoYXJhY3RlciA8IDMzKVxuXHRcdFx0bmV4dCgpXG5cdFx0ZWxzZVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gdG9rZW4odHlwZSkgPiAyIHx8IHRva2VuKGNoYXJhY3RlcikgPiAzID8gJycgOiAnICdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZXIgKGNoaWxkcmVuKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjYXNlIDA6IGFwcGVuZChpZGVudGlmaWVyKHBvc2l0aW9uIC0gMSksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOiBhcHBlbmQoZGVsaW1pdChjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6IGFwcGVuZChmcm9tKGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdH1cblxuXHRyZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBpbmcgKGluZGV4LCBjb3VudCkge1xuXHR3aGlsZSAoLS1jb3VudCAmJiBuZXh0KCkpXG5cdFx0Ly8gbm90IDAtOSBBLUYgYS1mXG5cdFx0aWYgKGNoYXJhY3RlciA8IDQ4IHx8IGNoYXJhY3RlciA+IDEwMiB8fCAoY2hhcmFjdGVyID4gNTcgJiYgY2hhcmFjdGVyIDwgNjUpIHx8IChjaGFyYWN0ZXIgPiA3MCAmJiBjaGFyYWN0ZXIgPCA5NykpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiBzbGljZShpbmRleCwgY2FyZXQoKSArIChjb3VudCA8IDYgJiYgcGVlaygpID09IDMyICYmIG5leHQoKSA9PSAzMikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlciAodHlwZSkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHQvLyBdICkgXCIgJ1xuXHRcdFx0Y2FzZSB0eXBlOlxuXHRcdFx0XHRyZXR1cm4gcG9zaXRpb25cblx0XHRcdC8vIFwiICdcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6XG5cdFx0XHRcdGlmICh0eXBlICE9PSAzNCAmJiB0eXBlICE9PSAzOSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHR5cGUgPT09IDQxKVxuXHRcdFx0XHRcdGRlbGltaXRlcih0eXBlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdG5leHQoKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ZXIgKHR5cGUsIGluZGV4KSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0Ly8gLy9cblx0XHRpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDcgKyAxMClcblx0XHRcdGJyZWFrXG5cdFx0Ly8gLypcblx0XHRlbHNlIGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0MiArIDQyICYmIHBlZWsoKSA9PT0gNDcpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiAnLyonICsgc2xpY2UoaW5kZXgsIHBvc2l0aW9uIC0gMSkgKyAnKicgKyBmcm9tKHR5cGUgPT09IDQ3ID8gdHlwZSA6IG5leHQoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXIgKGluZGV4KSB7XG5cdHdoaWxlICghdG9rZW4ocGVlaygpKSlcblx0XHRuZXh0KClcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIHBvc2l0aW9uKVxufVxuIiwgImltcG9ydCB7Q09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7YWJzLCBjaGFyYXQsIHRyaW0sIGZyb20sIHNpemVvZiwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgcmVwbGFjZSwgaW5kZXhvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtub2RlLCBjaGFyLCBwcmV2LCBuZXh0LCBwZWVrLCBjYXJldCwgYWxsb2MsIGRlYWxsb2MsIGRlbGltaXQsIHdoaXRlc3BhY2UsIGVzY2FwaW5nLCBpZGVudGlmaWVyLCBjb21tZW50ZXJ9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7b2JqZWN0W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyhwYXJzZSgnJywgbnVsbCwgbnVsbCwgbnVsbCwgWycnXSwgdmFsdWUgPSBhbGxvYyh2YWx1ZSksIDAsIFswXSwgdmFsdWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNldHNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBzZXVkb1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZWNsYXJhdGlvbnNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBydWxlLCBydWxlcywgcnVsZXNldHMsIHBzZXVkbywgcG9pbnRzLCBkZWNsYXJhdGlvbnMpIHtcblx0dmFyIGluZGV4ID0gMFxuXHR2YXIgb2Zmc2V0ID0gMFxuXHR2YXIgbGVuZ3RoID0gcHNldWRvXG5cdHZhciBhdHJ1bGUgPSAwXG5cdHZhciBwcm9wZXJ0eSA9IDBcblx0dmFyIHByZXZpb3VzID0gMFxuXHR2YXIgdmFyaWFibGUgPSAxXG5cdHZhciBzY2FubmluZyA9IDFcblx0dmFyIGFtcGVyc2FuZCA9IDFcblx0dmFyIGNoYXJhY3RlciA9IDBcblx0dmFyIHR5cGUgPSAnJ1xuXHR2YXIgcHJvcHMgPSBydWxlc1xuXHR2YXIgY2hpbGRyZW4gPSBydWxlc2V0c1xuXHR2YXIgcmVmZXJlbmNlID0gcnVsZVxuXHR2YXIgY2hhcmFjdGVycyA9IHR5cGVcblxuXHR3aGlsZSAoc2Nhbm5pbmcpXG5cdFx0c3dpdGNoIChwcmV2aW91cyA9IGNoYXJhY3RlciwgY2hhcmFjdGVyID0gbmV4dCgpKSB7XG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAocHJldmlvdXMgIT0gMTA4ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCBsZW5ndGggLSAxKSA9PSA1OCkge1xuXHRcdFx0XHRcdGlmIChpbmRleG9mKGNoYXJhY3RlcnMgKz0gcmVwbGFjZShkZWxpbWl0KGNoYXJhY3RlciksICcmJywgJyZcXGYnKSwgJyZcXGYnKSAhPSAtMSlcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IC0xXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0Ly8gXCIgJyBbXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDkxOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFx0IFxcbiBcXHIgXFxzXG5cdFx0XHRjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gd2hpdGVzcGFjZShwcmV2aW91cylcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGVzY2FwaW5nKGNhcmV0KCkgLSAxLCA3KVxuXHRcdFx0XHRjb250aW51ZVxuXHRcdFx0Ly8gL1xuXHRcdFx0Y2FzZSA0Nzpcblx0XHRcdFx0c3dpdGNoIChwZWVrKCkpIHtcblx0XHRcdFx0XHRjYXNlIDQyOiBjYXNlIDQ3OlxuXHRcdFx0XHRcdFx0YXBwZW5kKGNvbW1lbnQoY29tbWVudGVyKG5leHQoKSwgY2FyZXQoKSksIHJvb3QsIHBhcmVudCksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gJy8nXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIHtcblx0XHRcdGNhc2UgMTIzICogdmFyaWFibGU6XG5cdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IHN0cmxlbihjaGFyYWN0ZXJzKSAqIGFtcGVyc2FuZFxuXHRcdFx0Ly8gfSA7IFxcMFxuXHRcdFx0Y2FzZSAxMjUgKiB2YXJpYWJsZTogY2FzZSA1OTogY2FzZSAwOlxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0XHRcdC8vIFxcMCB9XG5cdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDEyNTogc2Nhbm5pbmcgPSAwXG5cdFx0XHRcdFx0Ly8gO1xuXHRcdFx0XHRcdGNhc2UgNTkgKyBvZmZzZXQ6IGlmIChhbXBlcnNhbmQgPT0gLTEpIGNoYXJhY3RlcnMgPSByZXBsYWNlKGNoYXJhY3RlcnMsIC9cXGYvZywgJycpXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPiAwICYmIChzdHJsZW4oY2hhcmFjdGVycykgLSBsZW5ndGgpKVxuXHRcdFx0XHRcdFx0XHRhcHBlbmQocHJvcGVydHkgPiAzMiA/IGRlY2xhcmF0aW9uKGNoYXJhY3RlcnMgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMSkgOiBkZWNsYXJhdGlvbihyZXBsYWNlKGNoYXJhY3RlcnMsICcgJywgJycpICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDIpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEAgO1xuXHRcdFx0XHRcdGNhc2UgNTk6IGNoYXJhY3RlcnMgKz0gJzsnXG5cdFx0XHRcdFx0Ly8geyBydWxlL2F0LXJ1bGVcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YXBwZW5kKHJlZmVyZW5jZSA9IHJ1bGVzZXQoY2hhcmFjdGVycywgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcyA9IFtdLCBjaGlsZHJlbiA9IFtdLCBsZW5ndGgpLCBydWxlc2V0cylcblxuXHRcdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gMTIzKVxuXHRcdFx0XHRcdFx0XHRpZiAob2Zmc2V0ID09PSAwKVxuXHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJvb3QsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBwcm9wcywgcnVsZXNldHMsIGxlbmd0aCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoYXRydWxlID09PSA5OSAmJiBjaGFyYXQoY2hhcmFjdGVycywgMykgPT09IDExMCA/IDEwMCA6IGF0cnVsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZCBsIG0gc1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAxMDA6IGNhc2UgMTA4OiBjYXNlIDEwOTogY2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcnVsZSAmJiBhcHBlbmQocnVsZXNldCh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIDAsIDAsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHJ1bGVzLCBwcm9wcyA9IFtdLCBsZW5ndGgpLCBjaGlsZHJlbiksIHJ1bGVzLCBjaGlsZHJlbiwgbGVuZ3RoLCBwb2ludHMsIHJ1bGUgPyBwcm9wcyA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgWycnXSwgY2hpbGRyZW4sIDAsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBvZmZzZXQgPSBwcm9wZXJ0eSA9IDAsIHZhcmlhYmxlID0gYW1wZXJzYW5kID0gMSwgdHlwZSA9IGNoYXJhY3RlcnMgPSAnJywgbGVuZ3RoID0gcHNldWRvXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyA6XG5cdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRsZW5ndGggPSAxICsgc3RybGVuKGNoYXJhY3RlcnMpLCBwcm9wZXJ0eSA9IHByZXZpb3VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodmFyaWFibGUgPCAxKVxuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT0gMTIzKVxuXHRcdFx0XHRcdFx0LS12YXJpYWJsZVxuXHRcdFx0XHRcdGVsc2UgaWYgKGNoYXJhY3RlciA9PSAxMjUgJiYgdmFyaWFibGUrKyA9PSAwICYmIHByZXYoKSA9PSAxMjUpXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVycyArPSBmcm9tKGNoYXJhY3RlciksIGNoYXJhY3RlciAqIHZhcmlhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gJlxuXHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSBvZmZzZXQgPiAwID8gMSA6IChjaGFyYWN0ZXJzICs9ICdcXGYnLCAtMSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLFxuXHRcdFx0XHRcdGNhc2UgNDQ6XG5cdFx0XHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSAoc3RybGVuKGNoYXJhY3RlcnMpIC0gMSkgKiBhbXBlcnNhbmQsIGFtcGVyc2FuZCA9IDFcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQFxuXHRcdFx0XHRcdGNhc2UgNjQ6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAocGVlaygpID09PSA0NSlcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KG5leHQoKSlcblxuXHRcdFx0XHRcdFx0YXRydWxlID0gcGVlaygpLCBvZmZzZXQgPSBsZW5ndGggPSBzdHJsZW4odHlwZSA9IGNoYXJhY3RlcnMgKz0gaWRlbnRpZmllcihjYXJldCgpKSksIGNoYXJhY3RlcisrXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzID09PSA0NSAmJiBzdHJsZW4oY2hhcmFjdGVycykgPT0gMilcblx0XHRcdFx0XHRcdFx0dmFyaWFibGUgPSAwXG5cdFx0XHRcdH1cblx0XHR9XG5cblx0cmV0dXJuIHJ1bGVzZXRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNldCAodmFsdWUsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0dmFyIHBvc3QgPSBvZmZzZXQgLSAxXG5cdHZhciBydWxlID0gb2Zmc2V0ID09PSAwID8gcnVsZXMgOiBbJyddXG5cdHZhciBzaXplID0gc2l6ZW9mKHJ1bGUpXG5cblx0Zm9yICh2YXIgaSA9IDAsIGogPSAwLCBrID0gMDsgaSA8IGluZGV4OyArK2kpXG5cdFx0Zm9yICh2YXIgeCA9IDAsIHkgPSBzdWJzdHIodmFsdWUsIHBvc3QgKyAxLCBwb3N0ID0gYWJzKGogPSBwb2ludHNbaV0pKSwgeiA9IHZhbHVlOyB4IDwgc2l6ZTsgKyt4KVxuXHRcdFx0aWYgKHogPSB0cmltKGogPiAwID8gcnVsZVt4XSArICcgJyArIHkgOiByZXBsYWNlKHksIC8mXFxmL2csIHJ1bGVbeF0pKSlcblx0XHRcdFx0cHJvcHNbaysrXSA9IHpcblxuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBvZmZzZXQgPT09IDAgPyBSVUxFU0VUIDogdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnQgKHZhbHVlLCByb290LCBwYXJlbnQpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgQ09NTUVOVCwgZnJvbShjaGFyKCkpLCBzdWJzdHIodmFsdWUsIDIsIC0yKSwgMClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24gKHZhbHVlLCByb290LCBwYXJlbnQsIGxlbmd0aCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBERUNMQVJBVElPTiwgc3Vic3RyKHZhbHVlLCAwLCBsZW5ndGgpLCBzdWJzdHIodmFsdWUsIGxlbmd0aCArIDEsIC0xKSwgbGVuZ3RoKVxufVxuIiwgImltcG9ydCB7SU1QT1JULCBMQVlFUiwgQ09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT04sIEtFWUZSQU1FU30gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHtzdHJsZW4sIHNpemVvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplIChjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0dmFyIG91dHB1dCA9ICcnXG5cdHZhciBsZW5ndGggPSBzaXplb2YoY2hpbGRyZW4pXG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRvdXRwdXQgKz0gY2FsbGJhY2soY2hpbGRyZW5baV0sIGksIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRyZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIExBWUVSOiBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIGJyZWFrXG5cdFx0Y2FzZSBJTVBPUlQ6IGNhc2UgREVDTEFSQVRJT046IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQucmV0dXJuIHx8IGVsZW1lbnQudmFsdWVcblx0XHRjYXNlIENPTU1FTlQ6IHJldHVybiAnJ1xuXHRcdGNhc2UgS0VZRlJBTUVTOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSArICd9J1xuXHRcdGNhc2UgUlVMRVNFVDogZWxlbWVudC52YWx1ZSA9IGVsZW1lbnQucHJvcHMuam9pbignLCcpXG5cdH1cblxuXHRyZXR1cm4gc3RybGVuKGNoaWxkcmVuID0gc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSkgPyBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBjaGlsZHJlbiArICd9JyA6ICcnXG59XG4iLCAiaW1wb3J0IHtNUywgTU9aLCBXRUJLSVQsIFJVTEVTRVQsIEtFWUZSQU1FUywgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7bWF0Y2gsIGNoYXJhdCwgc3Vic3RyLCBzdHJsZW4sIHNpemVvZiwgcmVwbGFjZSwgY29tYmluZX0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtjb3B5LCB0b2tlbml6ZX0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5pbXBvcnQge3NlcmlhbGl6ZX0gZnJvbSAnLi9TZXJpYWxpemVyLmpzJ1xuaW1wb3J0IHtwcmVmaXh9IGZyb20gJy4vUHJlZml4ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbltdfSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pZGRsZXdhcmUgKGNvbGxlY3Rpb24pIHtcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjb2xsZWN0aW9uKVxuXG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRcdHZhciBvdXRwdXQgPSAnJ1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdG91dHB1dCArPSBjb2xsZWN0aW9uW2ldKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0XHRyZXR1cm4gb3V0cHV0XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2hlZXQgKGNhbGxiYWNrKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdGlmICghZWxlbWVudC5yb290KVxuXHRcdFx0aWYgKGVsZW1lbnQgPSBlbGVtZW50LnJldHVybilcblx0XHRcdFx0Y2FsbGJhY2soZWxlbWVudClcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4ZXIgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0aWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpXG5cdFx0aWYgKCFlbGVtZW50LnJldHVybilcblx0XHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRcdGNhc2UgREVDTEFSQVRJT046IGVsZW1lbnQucmV0dXJuID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoLCBjaGlsZHJlbilcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0Y2FzZSBLRVlGUkFNRVM6XG5cdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7dmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpfSldLCBjYWxsYmFjaylcblx0XHRcdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0XHRcdGlmIChlbGVtZW50Lmxlbmd0aClcblx0XHRcdFx0XHRcdHJldHVybiBjb21iaW5lKGVsZW1lbnQucHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKG1hdGNoKHZhbHVlLCAvKDo6cGxhY1xcdyt8OnJlYWQtXFx3KykvKSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIDpyZWFkLShvbmx5fHdyaXRlKVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzpyZWFkLW9ubHknOiBjYXNlICc6cmVhZC13cml0ZSc6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHRcdC8vIDpwbGFjZWhvbGRlclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV19KVxuXHRcdFx0XHRcdFx0XHRcdFx0XSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJydcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hbWVzcGFjZSAoZWxlbWVudCkge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdGVsZW1lbnQucHJvcHMgPSBlbGVtZW50LnByb3BzLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIGNvbWJpbmUodG9rZW5pemUodmFsdWUpLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjaGlsZHJlbikge1xuXHRcdFx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCAwKSkge1xuXHRcdFx0XHRcdFx0Ly8gXFxmXG5cdFx0XHRcdFx0XHRjYXNlIDEyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc3Vic3RyKHZhbHVlLCAxLCBzdHJsZW4odmFsdWUpKVxuXHRcdFx0XHRcdFx0Ly8gXFwwICggKyA+IH5cblx0XHRcdFx0XHRcdGNhc2UgMDogY2FzZSA0MDogY2FzZSA0MzogY2FzZSA2MjogY2FzZSAxMjY6XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0Ly8gOlxuXHRcdFx0XHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0XHRcdFx0aWYgKGNoaWxkcmVuWysraW5kZXhdID09PSAnZ2xvYmFsJylcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbltpbmRleF0gPSAnJywgY2hpbGRyZW5bKytpbmRleF0gPSAnXFxmJyArIHN1YnN0cihjaGlsZHJlbltpbmRleF0sIGluZGV4ID0gMSwgLTEpXG5cdFx0XHRcdFx0XHQvLyBcXHNcblx0XHRcdFx0XHRcdGNhc2UgMzI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIDA6IGVsZW1lbnQgPSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNpemVvZihjaGlsZHJlbikgPiAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgaW5kZXggPSBzaXplb2YoY2hpbGRyZW4pIC0gMTogY2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAyID8gdmFsdWUgKyBlbGVtZW50ICsgZWxlbWVudCA6IHZhbHVlICsgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0pXG5cdH1cbn1cbiIsICJ2YXIgd2Vha01lbW9pemUgPSBmdW5jdGlvbiB3ZWFrTWVtb2l6ZShmdW5jKSB7XG4gIHZhciBjYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlLmhhcyhhcmcpKSB7XG4gICAgICAvLyBVc2Ugbm9uLW51bGwgYXNzZXJ0aW9uIGJlY2F1c2Ugd2UganVzdCBjaGVja2VkIHRoYXQgdGhlIGNhY2hlIGBoYXNgIGl0XG4gICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byByZW1vdmUgYHVuZGVmaW5lZGAgZnJvbSB0aGUgcmV0dXJuIHZhbHVlXG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGFyZyk7XG4gICAgfVxuXG4gICAgdmFyIHJldCA9IGZ1bmMoYXJnKTtcbiAgICBjYWNoZS5zZXQoYXJnLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG59O1xuXG5leHBvcnQgeyB3ZWFrTWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iLCAiZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xuICAgIGlmIChjYWNoZVthcmddID09PSB1bmRlZmluZWQpIGNhY2hlW2FyZ10gPSBmbihhcmcpO1xuICAgIHJldHVybiBjYWNoZVthcmddO1xuICB9O1xufVxuXG5leHBvcnQgeyBtZW1vaXplIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnO1xuaW1wb3J0IHsgZGVhbGxvYywgYWxsb2MsIG5leHQsIHRva2VuLCBmcm9tLCBwZWVrLCBkZWxpbWl0LCBzbGljZSwgcG9zaXRpb24sIFJVTEVTRVQsIGNvbWJpbmUsIG1hdGNoLCBzZXJpYWxpemUsIGNvcHksIHJlcGxhY2UsIFdFQktJVCwgTU9aLCBNUywgS0VZRlJBTUVTLCBERUNMQVJBVElPTiwgaGFzaCwgY2hhcmF0LCBzdHJsZW4sIGluZGV4b2YsIHN0cmluZ2lmeSwgcnVsZXNoZWV0LCBtaWRkbGV3YXJlLCBjb21waWxlIH0gZnJvbSAnc3R5bGlzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcgPSBmdW5jdGlvbiBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcoYmVnaW4sIHBvaW50cywgaW5kZXgpIHtcbiAgdmFyIHByZXZpb3VzID0gMDtcbiAgdmFyIGNoYXJhY3RlciA9IDA7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBwcmV2aW91cyA9IGNoYXJhY3RlcjtcbiAgICBjaGFyYWN0ZXIgPSBwZWVrKCk7IC8vICZcXGZcblxuICAgIGlmIChwcmV2aW91cyA9PT0gMzggJiYgY2hhcmFjdGVyID09PSAxMikge1xuICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG5leHQoKTtcbiAgfVxuXG4gIHJldHVybiBzbGljZShiZWdpbiwgcG9zaXRpb24pO1xufTtcblxudmFyIHRvUnVsZXMgPSBmdW5jdGlvbiB0b1J1bGVzKHBhcnNlZCwgcG9pbnRzKSB7XG4gIC8vIHByZXRlbmQgd2UndmUgc3RhcnRlZCB3aXRoIGEgY29tbWFcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBjaGFyYWN0ZXIgPSA0NDtcblxuICBkbyB7XG4gICAgc3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIC8vICZcXGZcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gMzggJiYgcGVlaygpID09PSAxMikge1xuICAgICAgICAgIC8vIHRoaXMgaXMgbm90IDEwMCUgY29ycmVjdCwgd2UgZG9uJ3QgYWNjb3VudCBmb3IgbGl0ZXJhbCBzZXF1ZW5jZXMgaGVyZSAtIGxpa2UgZm9yIGV4YW1wbGUgcXVvdGVkIHN0cmluZ3NcbiAgICAgICAgICAvLyBzdHlsaXMgaW5zZXJ0cyBcXGYgYWZ0ZXIgJiB0byBrbm93IHdoZW4gJiB3aGVyZSBpdCBzaG91bGQgcmVwbGFjZSB0aGlzIHNlcXVlbmNlIHdpdGggdGhlIGNvbnRleHQgc2VsZWN0b3JcbiAgICAgICAgICAvLyBhbmQgd2hlbiBpdCBzaG91bGQganVzdCBjb25jYXRlbmF0ZSB0aGUgb3V0ZXIgYW5kIGlubmVyIHNlbGVjdG9yc1xuICAgICAgICAgIC8vIGl0J3MgdmVyeSB1bmxpa2VseSBmb3IgdGhpcyBzZXF1ZW5jZSB0byBhY3R1YWxseSBhcHBlYXIgaW4gYSBkaWZmZXJlbnQgY29udGV4dCwgc28gd2UganVzdCBsZXZlcmFnZSB0aGlzIGZhY3QgaGVyZVxuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcocG9zaXRpb24gLSAxLCBwb2ludHMsIGluZGV4KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBkZWxpbWl0KGNoYXJhY3Rlcik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIC8vIGNvbW1hXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDQ0KSB7XG4gICAgICAgICAgLy8gY29sb25cbiAgICAgICAgICBwYXJzZWRbKytpbmRleF0gPSBwZWVrKCkgPT09IDU4ID8gJyZcXGYnIDogJyc7XG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IHBhcnNlZFtpbmRleF0ubGVuZ3RoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIC8vIGZhbGx0aHJvdWdoXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZnJvbShjaGFyYWN0ZXIpO1xuICAgIH1cbiAgfSB3aGlsZSAoY2hhcmFjdGVyID0gbmV4dCgpKTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcblxudmFyIGdldFJ1bGVzID0gZnVuY3Rpb24gZ2V0UnVsZXModmFsdWUsIHBvaW50cykge1xuICByZXR1cm4gZGVhbGxvYyh0b1J1bGVzKGFsbG9jKHZhbHVlKSwgcG9pbnRzKSk7XG59OyAvLyBXZWFrU2V0IHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUsIGJ1dCBvbmx5IFdlYWtNYXAgaXMgc3VwcG9ydGVkIGluIElFMTFcblxuXG52YXIgZml4ZWRFbGVtZW50cyA9IC8qICNfX1BVUkVfXyAqL25ldyBXZWFrTWFwKCk7XG52YXIgY29tcGF0ID0gZnVuY3Rpb24gY29tcGF0KGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8ICFlbGVtZW50LnBhcmVudCB8fCAvLyBwb3NpdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBjb250YWlucyBwc2V1ZG9cbiAgLy8gbmVnYXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgaGFzIGJlZW4gYWxyZWFkeSBwcmVmaXhlZFxuICBlbGVtZW50Lmxlbmd0aCA8IDEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnQ7XG4gIHZhciBpc0ltcGxpY2l0UnVsZSA9IGVsZW1lbnQuY29sdW1uID09PSBwYXJlbnQuY29sdW1uICYmIGVsZW1lbnQubGluZSA9PT0gcGFyZW50LmxpbmU7XG5cbiAgd2hpbGUgKHBhcmVudC50eXBlICE9PSAncnVsZScpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIGlmICghcGFyZW50KSByZXR1cm47XG4gIH0gLy8gc2hvcnQtY2lyY3VpdCBmb3IgdGhlIHNpbXBsZXN0IGNhc2VcblxuXG4gIGlmIChlbGVtZW50LnByb3BzLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZS5jaGFyQ29kZUF0KDApICE9PSA1OFxuICAvKiBjb2xvbiAqL1xuICAmJiAhZml4ZWRFbGVtZW50cy5nZXQocGFyZW50KSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBpZiB0aGlzIGlzIGFuIGltcGxpY2l0bHkgaW5zZXJ0ZWQgcnVsZSAodGhlIG9uZSBlYWdlcmx5IGluc2VydGVkIGF0IHRoZSBlYWNoIG5ldyBuZXN0ZWQgbGV2ZWwpXG4gIC8vIHRoZW4gdGhlIHByb3BzIGhhcyBhbHJlYWR5IGJlZW4gbWFuaXB1bGF0ZWQgYmVmb3JlaGFuZCBhcyB0aGV5IHRoYXQgYXJyYXkgaXMgc2hhcmVkIGJldHdlZW4gaXQgYW5kIGl0cyBcInJ1bGUgcGFyZW50XCJcblxuXG4gIGlmIChpc0ltcGxpY2l0UnVsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZpeGVkRWxlbWVudHMuc2V0KGVsZW1lbnQsIHRydWUpO1xuICB2YXIgcG9pbnRzID0gW107XG4gIHZhciBydWxlcyA9IGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpO1xuICB2YXIgcGFyZW50UnVsZXMgPSBwYXJlbnQucHJvcHM7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGsgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhcmVudFJ1bGVzLmxlbmd0aDsgaisrLCBrKyspIHtcbiAgICAgIGVsZW1lbnQucHJvcHNba10gPSBwb2ludHNbaV0gPyBydWxlc1tpXS5yZXBsYWNlKC8mXFxmL2csIHBhcmVudFJ1bGVzW2pdKSA6IHBhcmVudFJ1bGVzW2pdICsgXCIgXCIgKyBydWxlc1tpXTtcbiAgICB9XG4gIH1cbn07XG52YXIgcmVtb3ZlTGFiZWwgPSBmdW5jdGlvbiByZW1vdmVMYWJlbChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgPT09ICdkZWNsJykge1xuICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAoIC8vIGNoYXJjb2RlIGZvciBsXG4gICAgdmFsdWUuY2hhckNvZGVBdCgwKSA9PT0gMTA4ICYmIC8vIGNoYXJjb2RlIGZvciBiXG4gICAgdmFsdWUuY2hhckNvZGVBdCgyKSA9PT0gOTgpIHtcbiAgICAgIC8vIHRoaXMgaWdub3JlcyBsYWJlbFxuICAgICAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICAgICAgZWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tZmFsbHRocm91Z2ggKi9cblxuZnVuY3Rpb24gcHJlZml4KHZhbHVlLCBsZW5ndGgpIHtcbiAgc3dpdGNoIChoYXNoKHZhbHVlLCBsZW5ndGgpKSB7XG4gICAgLy8gY29sb3ItYWRqdXN0XG4gICAgY2FzZSA1MTAzOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdwcmludC0nICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhbmltYXRpb24sIGFuaW1hdGlvbi0oZGVsYXl8ZGlyZWN0aW9ufGR1cmF0aW9ufGZpbGwtbW9kZXxpdGVyYXRpb24tY291bnR8bmFtZXxwbGF5LXN0YXRlfHRpbWluZy1mdW5jdGlvbilcblxuICAgIGNhc2UgNTczNzpcbiAgICBjYXNlIDQyMDE6XG4gICAgY2FzZSAzMTc3OlxuICAgIGNhc2UgMzQzMzpcbiAgICBjYXNlIDE2NDE6XG4gICAgY2FzZSA0NDU3OlxuICAgIGNhc2UgMjkyMTogLy8gdGV4dC1kZWNvcmF0aW9uLCBmaWx0ZXIsIGNsaXAtcGF0aCwgYmFja2ZhY2UtdmlzaWJpbGl0eSwgY29sdW1uLCBib3gtZGVjb3JhdGlvbi1icmVha1xuXG4gICAgY2FzZSA1NTcyOlxuICAgIGNhc2UgNjM1NjpcbiAgICBjYXNlIDU4NDQ6XG4gICAgY2FzZSAzMTkxOlxuICAgIGNhc2UgNjY0NTpcbiAgICBjYXNlIDMwMDU6IC8vIG1hc2ssIG1hc2staW1hZ2UsIG1hc2stKG1vZGV8Y2xpcHxzaXplKSwgbWFzay0ocmVwZWF0fG9yaWdpbiksIG1hc2stcG9zaXRpb24sIG1hc2stY29tcG9zaXRlLFxuXG4gICAgY2FzZSA2MzkxOlxuICAgIGNhc2UgNTg3OTpcbiAgICBjYXNlIDU2MjM6XG4gICAgY2FzZSA2MTM1OlxuICAgIGNhc2UgNDU5OTpcbiAgICBjYXNlIDQ4NTU6IC8vIGJhY2tncm91bmQtY2xpcCwgY29sdW1ucywgY29sdW1uLShjb3VudHxmaWxsfGdhcHxydWxlfHJ1bGUtY29sb3J8cnVsZS1zdHlsZXxydWxlLXdpZHRofHNwYW58d2lkdGgpXG5cbiAgICBjYXNlIDQyMTU6XG4gICAgY2FzZSA2Mzg5OlxuICAgIGNhc2UgNTEwOTpcbiAgICBjYXNlIDUzNjU6XG4gICAgY2FzZSA1NjIxOlxuICAgIGNhc2UgMzgyOTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFwcGVhcmFuY2UsIHVzZXItc2VsZWN0LCB0cmFuc2Zvcm0sIGh5cGhlbnMsIHRleHQtc2l6ZS1hZGp1c3RcblxuICAgIGNhc2UgNTM0OTpcbiAgICBjYXNlIDQyNDY6XG4gICAgY2FzZSA0ODEwOlxuICAgIGNhc2UgNjk2ODpcbiAgICBjYXNlIDI3NTY6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNT1ogKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LCBmbGV4LWRpcmVjdGlvblxuXG4gICAgY2FzZSA2ODI4OlxuICAgIGNhc2UgNDI2ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBvcmRlclxuXG4gICAgY2FzZSA2MTY1OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC0nICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1pdGVtc1xuXG4gICAgY2FzZSA1MTg3OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgcmVwbGFjZSh2YWx1ZSwgLyhcXHcrKS4rKDpbXl0rKS8sIFdFQktJVCArICdib3gtJDEkMicgKyBNUyArICdmbGV4LSQxJDInKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLXNlbGZcblxuICAgIGNhc2UgNTQ0MzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtaXRlbS0nICsgcmVwbGFjZSh2YWx1ZSwgL2ZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tY29udGVudFxuXG4gICAgY2FzZSA0Njc1OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1saW5lLXBhY2snICsgcmVwbGFjZSh2YWx1ZSwgL2FsaWduLWNvbnRlbnR8ZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LXNocmlua1xuXG4gICAgY2FzZSA1NTQ4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnc2hyaW5rJywgJ25lZ2F0aXZlJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWJhc2lzXG5cbiAgICBjYXNlIDUyOTI6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdiYXNpcycsICdwcmVmZXJyZWQtc2l6ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1ncm93XG5cbiAgICBjYXNlIDYwNjA6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ2JveC0nICsgcmVwbGFjZSh2YWx1ZSwgJy1ncm93JywgJycpICsgV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdncm93JywgJ3Bvc2l0aXZlJykgKyB2YWx1ZTtcbiAgICAvLyB0cmFuc2l0aW9uXG5cbiAgICBjYXNlIDQ1NTQ6XG4gICAgICByZXR1cm4gV0VCS0lUICsgcmVwbGFjZSh2YWx1ZSwgLyhbXi1dKSh0cmFuc2Zvcm0pL2csICckMScgKyBXRUJLSVQgKyAnJDInKSArIHZhbHVlO1xuICAgIC8vIGN1cnNvclxuXG4gICAgY2FzZSA2MTg3OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKHpvb20tfGdyYWIpLywgV0VCS0lUICsgJyQxJyksIC8oaW1hZ2Utc2V0KS8sIFdFQktJVCArICckMScpLCB2YWx1ZSwgJycpICsgdmFsdWU7XG4gICAgLy8gYmFja2dyb3VuZCwgYmFja2dyb3VuZC1pbWFnZVxuXG4gICAgY2FzZSA1NDk1OlxuICAgIGNhc2UgMzk1OTpcbiAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKGltYWdlLXNldFxcKFteXSopLywgV0VCS0lUICsgJyQxJyArICckYCQxJyk7XG4gICAgLy8ganVzdGlmeS1jb250ZW50XG5cbiAgICBjYXNlIDQ5Njg6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKC4rOikoZmxleC0pPyguKikvLCBXRUJLSVQgKyAnYm94LXBhY2s6JDMnICsgTVMgKyAnZmxleC1wYWNrOiQzJyksIC9zListYlteO10rLywgJ2p1c3RpZnknKSArIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gKG1hcmdpbnxwYWRkaW5nKS1pbmxpbmUtKHN0YXJ0fGVuZClcblxuICAgIGNhc2UgNDA5NTpcbiAgICBjYXNlIDM1ODM6XG4gICAgY2FzZSA0MDY4OlxuICAgIGNhc2UgMjUzMjpcbiAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rKS1pbmxpbmUoLispLywgV0VCS0lUICsgJyQxJDInKSArIHZhbHVlO1xuICAgIC8vIChtaW58bWF4KT8od2lkdGh8aGVpZ2h0fGlubGluZS1zaXplfGJsb2NrLXNpemUpXG5cbiAgICBjYXNlIDgxMTY6XG4gICAgY2FzZSA3MDU5OlxuICAgIGNhc2UgNTc1MzpcbiAgICBjYXNlIDU1MzU6XG4gICAgY2FzZSA1NDQ1OlxuICAgIGNhc2UgNTcwMTpcbiAgICBjYXNlIDQ5MzM6XG4gICAgY2FzZSA0Njc3OlxuICAgIGNhc2UgNTUzMzpcbiAgICBjYXNlIDU3ODk6XG4gICAgY2FzZSA1MDIxOlxuICAgIGNhc2UgNDc2NTpcbiAgICAgIC8vIHN0cmV0Y2gsIG1heC1jb250ZW50LCBtaW4tY29udGVudCwgZmlsbC1hdmFpbGFibGVcbiAgICAgIGlmIChzdHJsZW4odmFsdWUpIC0gMSAtIGxlbmd0aCA+IDYpIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSkge1xuICAgICAgICAvLyAobSlheC1jb250ZW50LCAobSlpbi1jb250ZW50XG4gICAgICAgIGNhc2UgMTA5OlxuICAgICAgICAgIC8vIC1cbiAgICAgICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyA0KSAhPT0gNDUpIGJyZWFrO1xuICAgICAgICAvLyAoZilpbGwtYXZhaWxhYmxlLCAoZilpdC1jb250ZW50XG5cbiAgICAgICAgY2FzZSAxMDI6XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KSguKyktKFteXSspLywgJyQxJyArIFdFQktJVCArICckMi0kMycgKyAnJDEnICsgTU9aICsgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMykgPT0gMTA4ID8gJyQzJyA6ICckMi0kMycpKSArIHZhbHVlO1xuICAgICAgICAvLyAocyl0cmV0Y2hcblxuICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICByZXR1cm4gfmluZGV4b2YodmFsdWUsICdzdHJldGNoJykgPyBwcmVmaXgocmVwbGFjZSh2YWx1ZSwgJ3N0cmV0Y2gnLCAnZmlsbC1hdmFpbGFibGUnKSwgbGVuZ3RoKSArIHZhbHVlIDogdmFsdWU7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICAvLyBwb3NpdGlvbjogc3RpY2t5XG5cbiAgICBjYXNlIDQ5NDk6XG4gICAgICAvLyAocyl0aWNreT9cbiAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpICE9PSAxMTUpIGJyZWFrO1xuICAgIC8vIGRpc3BsYXk6IChmbGV4fGlubGluZS1mbGV4KVxuXG4gICAgY2FzZSA2NDQ0OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIHN0cmxlbih2YWx1ZSkgLSAzIC0gKH5pbmRleG9mKHZhbHVlLCAnIWltcG9ydGFudCcpICYmIDEwKSkpIHtcbiAgICAgICAgLy8gc3RpYyhrKXlcbiAgICAgICAgY2FzZSAxMDc6XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsICc6JywgJzonICsgV0VCS0lUKSArIHZhbHVlO1xuICAgICAgICAvLyAoaW5saW5lLSk/ZmwoZSl4XG5cbiAgICAgICAgY2FzZSAxMDE6XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KShbXjshXSspKDt8IS4rKT8vLCAnJDEnICsgV0VCS0lUICsgKGNoYXJhdCh2YWx1ZSwgMTQpID09PSA0NSA/ICdpbmxpbmUtJyA6ICcnKSArICdib3gkMycgKyAnJDEnICsgV0VCS0lUICsgJyQyJDMnICsgJyQxJyArIE1TICsgJyQyYm94JDMnKSArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICAvLyB3cml0aW5nLW1vZGVcblxuICAgIGNhc2UgNTkzNjpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxMSkpIHtcbiAgICAgICAgLy8gdmVydGljYWwtbChyKVxuICAgICAgICBjYXNlIDExNDpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gdmVydGljYWwtcihsKVxuXG4gICAgICAgIGNhc2UgMTA4OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGItcmwnKSArIHZhbHVlO1xuICAgICAgICAvLyBob3Jpem9udGFsKC0pdGJcblxuICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAnbHInKSArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBwcmVmaXhlciA9IGZ1bmN0aW9uIHByZWZpeGVyKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcbiAgaWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpIGlmICghZWxlbWVudFtcInJldHVyblwiXSkgc3dpdGNoIChlbGVtZW50LnR5cGUpIHtcbiAgICBjYXNlIERFQ0xBUkFUSU9OOlxuICAgICAgZWxlbWVudFtcInJldHVyblwiXSA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgS0VZRlJBTUVTOlxuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgIHZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKVxuICAgICAgfSldLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlIFJVTEVTRVQ6XG4gICAgICBpZiAoZWxlbWVudC5sZW5ndGgpIHJldHVybiBjb21iaW5lKGVsZW1lbnQucHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBzd2l0Y2ggKG1hdGNoKHZhbHVlLCAvKDo6cGxhY1xcdyt8OnJlYWQtXFx3KykvKSkge1xuICAgICAgICAgIC8vIDpyZWFkLShvbmx5fHdyaXRlKVxuICAgICAgICAgIGNhc2UgJzpyZWFkLW9ubHknOlxuICAgICAgICAgIGNhc2UgJzpyZWFkLXdyaXRlJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICAgIC8vIDpwbGFjZWhvbGRlclxuXG4gICAgICAgICAgY2FzZSAnOjpwbGFjZWhvbGRlcic6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBXRUJLSVQgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pLCBjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV1cbiAgICAgICAgICAgIH0pLCBjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCBNUyArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9KTtcbiAgfVxufTtcblxudmFyIGRlZmF1bHRTdHlsaXNQbHVnaW5zID0gW3ByZWZpeGVyXTtcblxudmFyIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb24gY3JlYXRlQ2FjaGUob3B0aW9ucykge1xuICB2YXIga2V5ID0gb3B0aW9ucy5rZXk7XG5cbiAgaWYgKGtleSA9PT0gJ2NzcycpIHtcbiAgICB2YXIgc3NyU3R5bGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl06bm90KFtkYXRhLXNdKVwiKTsgLy8gZ2V0IFNTUmVkIHN0eWxlcyBvdXQgb2YgdGhlIHdheSBvZiBSZWFjdCdzIGh5ZHJhdGlvblxuICAgIC8vIGRvY3VtZW50LmhlYWQgaXMgYSBzYWZlIHBsYWNlIHRvIG1vdmUgdGhlbSB0byh0aG91Z2ggbm90ZSBkb2N1bWVudC5oZWFkIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgbGFzdCBwbGFjZSB0aGV5IHdpbGwgYmUpXG4gICAgLy8gbm90ZSB0aGlzIHZlcnkgdmVyeSBpbnRlbnRpb25hbGx5IHRhcmdldHMgYWxsIHN0eWxlIGVsZW1lbnRzIHJlZ2FyZGxlc3Mgb2YgdGhlIGtleSB0byBlbnN1cmVcbiAgICAvLyB0aGF0IGNyZWF0aW5nIGEgY2FjaGUgd29ya3MgaW5zaWRlIG9mIHJlbmRlciBvZiBhIFJlYWN0IGNvbXBvbmVudFxuXG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChzc3JTdHlsZXMsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAvLyB3ZSB3YW50IHRvIG9ubHkgbW92ZSBlbGVtZW50cyB3aGljaCBoYXZlIGEgc3BhY2UgaW4gdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgIC8vIGJlY2F1c2UgdGhhdCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBhbiBFbW90aW9uIDExIHNlcnZlci1zaWRlIHJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgICAvLyB3aGlsZSB3ZSB3aWxsIGFscmVhZHkgaWdub3JlIEVtb3Rpb24gMTEgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGJlY2F1c2Ugb2YgdGhlIDpub3QoW2RhdGEtc10pIHBhcnQgaW4gdGhlIHNlbGVjdG9yXG4gICAgICAvLyBFbW90aW9uIDEwIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBkaWQgbm90IGhhdmUgZGF0YS1zIChidXQgaW1wb3J0YW50bHkgZGlkIG5vdCBoYXZlIGEgc3BhY2UgaW4gdGhlaXIgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZXMpXG4gICAgICAvLyBzbyBjaGVja2luZyBmb3IgdGhlIHNwYWNlIGVuc3VyZXMgdGhhdCBsb2FkaW5nIEVtb3Rpb24gMTEgYWZ0ZXIgRW1vdGlvbiAxMCBoYXMgaW5zZXJ0ZWQgc29tZSBzdHlsZXNcbiAgICAgIC8vIHdpbGwgbm90IHJlc3VsdCBpbiB0aGUgRW1vdGlvbiAxMCBzdHlsZXMgYmVpbmcgZGVzdHJveWVkXG4gICAgICB2YXIgZGF0YUVtb3Rpb25BdHRyaWJ1dGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJyk7XG5cbiAgICAgIGlmIChkYXRhRW1vdGlvbkF0dHJpYnV0ZS5pbmRleE9mKCcgJykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3R5bGlzUGx1Z2lucyA9IG9wdGlvbnMuc3R5bGlzUGx1Z2lucyB8fCBkZWZhdWx0U3R5bGlzUGx1Z2lucztcblxuICB2YXIgaW5zZXJ0ZWQgPSB7fTtcbiAgdmFyIGNvbnRhaW5lcjtcbiAgdmFyIG5vZGVzVG9IeWRyYXRlID0gW107XG5cbiAge1xuICAgIGNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyIHx8IGRvY3VtZW50LmhlYWQ7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCggLy8gdGhpcyBtZWFucyB3ZSB3aWxsIGlnbm9yZSBlbGVtZW50cyB3aGljaCBkb24ndCBoYXZlIGEgc3BhY2UgaW4gdGhlbSB3aGljaFxuICAgIC8vIG1lYW5zIHRoYXQgdGhlIHN0eWxlIGVsZW1lbnRzIHdlJ3JlIGxvb2tpbmcgYXQgYXJlIG9ubHkgRW1vdGlvbiAxMSBzZXJ2ZXItcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXj1cXFwiXCIgKyBrZXkgKyBcIiBcXFwiXVwiKSwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHZhciBhdHRyaWIgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZW1vdGlvblwiKS5zcGxpdCgnICcpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuXG4gIHZhciBvbW5pcHJlc2VudFBsdWdpbnMgPSBbY29tcGF0LCByZW1vdmVMYWJlbF07XG5cbiAge1xuICAgIHZhciBjdXJyZW50U2hlZXQ7XG4gICAgdmFyIGZpbmFsaXppbmdQbHVnaW5zID0gW3N0cmluZ2lmeSwgcnVsZXNoZWV0KGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KHJ1bGUpO1xuICAgIH0pXTtcbiAgICB2YXIgc2VyaWFsaXplciA9IG1pZGRsZXdhcmUob21uaXByZXNlbnRQbHVnaW5zLmNvbmNhdChzdHlsaXNQbHVnaW5zLCBmaW5hbGl6aW5nUGx1Z2lucykpO1xuXG4gICAgdmFyIHN0eWxpcyA9IGZ1bmN0aW9uIHN0eWxpcyhzdHlsZXMpIHtcbiAgICAgIHJldHVybiBzZXJpYWxpemUoY29tcGlsZShzdHlsZXMpLCBzZXJpYWxpemVyKTtcbiAgICB9O1xuXG4gICAgX2luc2VydCA9IGZ1bmN0aW9uIGluc2VydChzZWxlY3Rvciwgc2VyaWFsaXplZCwgc2hlZXQsIHNob3VsZENhY2hlKSB7XG4gICAgICBjdXJyZW50U2hlZXQgPSBzaGVldDtcblxuICAgICAgc3R5bGlzKHNlbGVjdG9yID8gc2VsZWN0b3IgKyBcIntcIiArIHNlcmlhbGl6ZWQuc3R5bGVzICsgXCJ9XCIgOiBzZXJpYWxpemVkLnN0eWxlcyk7XG5cbiAgICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgICBjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgdmFyIGNhY2hlID0ge1xuICAgIGtleToga2V5LFxuICAgIHNoZWV0OiBuZXcgU3R5bGVTaGVldCh7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgICBzcGVlZHk6IG9wdGlvbnMuc3BlZWR5LFxuICAgICAgcHJlcGVuZDogb3B0aW9ucy5wcmVwZW5kLFxuICAgICAgaW5zZXJ0aW9uUG9pbnQ6IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnRcbiAgICB9KSxcbiAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICBpbnNlcnRlZDogaW5zZXJ0ZWQsXG4gICAgcmVnaXN0ZXJlZDoge30sXG4gICAgaW5zZXJ0OiBfaW5zZXJ0XG4gIH07XG4gIGNhY2hlLnNoZWV0Lmh5ZHJhdGUobm9kZXNUb0h5ZHJhdGUpO1xuICByZXR1cm4gY2FjaGU7XG59O1xuXG5leHBvcnQgeyBjcmVhdGVDYWNoZSBhcyBkZWZhdWx0IH07XG4iLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7XG4gICAgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHtcbiAgICAgIHZhciB0ID0gYXJndW1lbnRzW2VdO1xuICAgICAgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5leHBvcnQgeyBfZXh0ZW5kcyBhcyBkZWZhdWx0IH07IiwgInZhciBpc0Jyb3dzZXIgPSB0cnVlO1xuXG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZXMpIHtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9ICcnO1xuICBjbGFzc05hbWVzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgaWYgKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWdpc3RlcmVkU3R5bGVzLnB1c2gocmVnaXN0ZXJlZFtjbGFzc05hbWVdICsgXCI7XCIpO1xuICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICByYXdDbGFzc05hbWUgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJhd0NsYXNzTmFtZTtcbn1cbnZhciByZWdpc3RlclN0eWxlcyA9IGZ1bmN0aW9uIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKCAvLyB3ZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgaWYgdGhlXG4gIC8vIGNsYXNzIG5hbWUgY291bGQgYmUgdXNlZCBmdXJ0aGVyIGRvd25cbiAgLy8gdGhlIHRyZWUgYnV0IGlmIGl0J3MgYSBzdHJpbmcgdGFnLCB3ZSBrbm93IGl0IHdvbid0XG4gIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gYWRkIGl0IHRvIHJlZ2lzdGVyZWQgY2FjaGUuXG4gIC8vIHRoaXMgaW1wcm92ZXMgbWVtb3J5IHVzYWdlIHNpbmNlIHdlIGNhbiBhdm9pZCBzdG9yaW5nIHRoZSB3aG9sZSBzdHlsZSBzdHJpbmdcbiAgKGlzU3RyaW5nVGFnID09PSBmYWxzZSB8fCAvLyB3ZSBuZWVkIHRvIGFsd2F5cyBzdG9yZSBpdCBpZiB3ZSdyZSBpbiBjb21wYXQgbW9kZSBhbmRcbiAgLy8gaW4gbm9kZSBzaW5jZSBlbW90aW9uLXNlcnZlciByZWxpZXMgb24gd2hldGhlciBhIHN0eWxlIGlzIGluXG4gIC8vIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIGtub3cgd2hldGhlciBhIHN0eWxlIGlzIGdsb2JhbCBvciBub3RcbiAgLy8gYWxzbywgbm90ZSB0aGF0IHRoaXMgY2hlY2sgd2lsbCBiZSBkZWFkIGNvZGUgZWxpbWluYXRlZCBpbiB0aGUgYnJvd3NlclxuICBpc0Jyb3dzZXIgPT09IGZhbHNlICkgJiYgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPSBzZXJpYWxpemVkLnN0eWxlcztcbiAgfVxufTtcbnZhciBpbnNlcnRTdHlsZXMgPSBmdW5jdGlvbiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBzZXJpYWxpemVkO1xuXG4gICAgZG8ge1xuICAgICAgY2FjaGUuaW5zZXJ0KHNlcmlhbGl6ZWQgPT09IGN1cnJlbnQgPyBcIi5cIiArIGNsYXNzTmFtZSA6ICcnLCBjdXJyZW50LCBjYWNoZS5zaGVldCwgdHJ1ZSk7XG5cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgfSB3aGlsZSAoY3VycmVudCAhPT0gdW5kZWZpbmVkKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaW5zZXJ0U3R5bGVzLCByZWdpc3RlclN0eWxlcyB9O1xuIiwgIi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L211cm11cmhhc2gtanNcbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hYXBwbGVieS9zbWhhc2hlci9ibG9iLzYxYTA1MzBmMjgyNzdmMmU4NTBiZmMzOTYwMGNlNjFkMDJiNTE4ZGUvc3JjL011cm11ckhhc2gyLmNwcCNMMzctTDg2XG5mdW5jdGlvbiBtdXJtdXIyKHN0cikge1xuICAvLyAnbScgYW5kICdyJyBhcmUgbWl4aW5nIGNvbnN0YW50cyBnZW5lcmF0ZWQgb2ZmbGluZS5cbiAgLy8gVGhleSdyZSBub3QgcmVhbGx5ICdtYWdpYycsIHRoZXkganVzdCBoYXBwZW4gdG8gd29yayB3ZWxsLlxuICAvLyBjb25zdCBtID0gMHg1YmQxZTk5NTtcbiAgLy8gY29uc3QgciA9IDI0O1xuICAvLyBJbml0aWFsaXplIHRoZSBoYXNoXG4gIHZhciBoID0gMDsgLy8gTWl4IDQgYnl0ZXMgYXQgYSB0aW1lIGludG8gdGhlIGhhc2hcblxuICB2YXIgayxcbiAgICAgIGkgPSAwLFxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcblxuICBmb3IgKDsgbGVuID49IDQ7ICsraSwgbGVuIC09IDQpIHtcbiAgICBrID0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmIHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQ7XG4gICAgayA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gICAgayBePVxuICAgIC8qIGsgPj4+IHI6ICovXG4gICAgayA+Pj4gMjQ7XG4gICAgaCA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNikgXlxuICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIEhhbmRsZSB0aGUgbGFzdCBmZXcgYnl0ZXMgb2YgdGhlIGlucHV0IGFycmF5XG5cblxuICBzd2l0Y2ggKGxlbikge1xuICAgIGNhc2UgMzpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuXG4gICAgY2FzZSAyOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcblxuICAgIGNhc2UgMTpcbiAgICAgIGggXj0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICAgICAgaCA9XG4gICAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIERvIGEgZmV3IGZpbmFsIG1peGVzIG9mIHRoZSBoYXNoIHRvIGVuc3VyZSB0aGUgbGFzdCBmZXdcbiAgLy8gYnl0ZXMgYXJlIHdlbGwtaW5jb3Jwb3JhdGVkLlxuXG5cbiAgaCBePSBoID4+PiAxMztcbiAgaCA9XG4gIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgcmV0dXJuICgoaCBeIGggPj4+IDE1KSA+Pj4gMCkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgeyBtdXJtdXIyIGFzIGRlZmF1bHQgfTtcbiIsICJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYXNwZWN0UmF0aW86IDEsXG4gIGJvcmRlckltYWdlT3V0c2V0OiAxLFxuICBib3JkZXJJbWFnZVNsaWNlOiAxLFxuICBib3JkZXJJbWFnZVdpZHRoOiAxLFxuICBib3hGbGV4OiAxLFxuICBib3hGbGV4R3JvdXA6IDEsXG4gIGJveE9yZGluYWxHcm91cDogMSxcbiAgY29sdW1uQ291bnQ6IDEsXG4gIGNvbHVtbnM6IDEsXG4gIGZsZXg6IDEsXG4gIGZsZXhHcm93OiAxLFxuICBmbGV4UG9zaXRpdmU6IDEsXG4gIGZsZXhTaHJpbms6IDEsXG4gIGZsZXhOZWdhdGl2ZTogMSxcbiAgZmxleE9yZGVyOiAxLFxuICBncmlkUm93OiAxLFxuICBncmlkUm93RW5kOiAxLFxuICBncmlkUm93U3BhbjogMSxcbiAgZ3JpZFJvd1N0YXJ0OiAxLFxuICBncmlkQ29sdW1uOiAxLFxuICBncmlkQ29sdW1uRW5kOiAxLFxuICBncmlkQ29sdW1uU3BhbjogMSxcbiAgZ3JpZENvbHVtblN0YXJ0OiAxLFxuICBtc0dyaWRSb3c6IDEsXG4gIG1zR3JpZFJvd1NwYW46IDEsXG4gIG1zR3JpZENvbHVtbjogMSxcbiAgbXNHcmlkQ29sdW1uU3BhbjogMSxcbiAgZm9udFdlaWdodDogMSxcbiAgbGluZUhlaWdodDogMSxcbiAgb3BhY2l0eTogMSxcbiAgb3JkZXI6IDEsXG4gIG9ycGhhbnM6IDEsXG4gIHNjYWxlOiAxLFxuICB0YWJTaXplOiAxLFxuICB3aWRvd3M6IDEsXG4gIHpJbmRleDogMSxcbiAgem9vbTogMSxcbiAgV2Via2l0TGluZUNsYW1wOiAxLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiAxLFxuICBmbG9vZE9wYWNpdHk6IDEsXG4gIHN0b3BPcGFjaXR5OiAxLFxuICBzdHJva2VEYXNoYXJyYXk6IDEsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDEsXG4gIHN0cm9rZU1pdGVybGltaXQ6IDEsXG4gIHN0cm9rZU9wYWNpdHk6IDEsXG4gIHN0cm9rZVdpZHRoOiAxXG59O1xuXG5leHBvcnQgeyB1bml0bGVzc0tleXMgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCBoYXNoU3RyaW5nIGZyb20gJ0BlbW90aW9uL2hhc2gnO1xuaW1wb3J0IHVuaXRsZXNzIGZyb20gJ0BlbW90aW9uL3VuaXRsZXNzJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG52YXIgaHlwaGVuYXRlUmVnZXggPSAvW0EtWl18Xm1zL2c7XG52YXIgYW5pbWF0aW9uUmVnZXggPSAvX0VNT18oW15fXSs/KV8oW15dKj8pX0VNT18vZztcblxudmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBmdW5jdGlvbiBpc0N1c3RvbVByb3BlcnR5KHByb3BlcnR5KSB7XG4gIHJldHVybiBwcm9wZXJ0eS5jaGFyQ29kZUF0KDEpID09PSA0NTtcbn07XG5cbnZhciBpc1Byb2Nlc3NhYmxlVmFsdWUgPSBmdW5jdGlvbiBpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbic7XG59O1xuXG52YXIgcHJvY2Vzc1N0eWxlTmFtZSA9IC8qICNfX1BVUkVfXyAqL21lbW9pemUoZnVuY3Rpb24gKHN0eWxlTmFtZSkge1xuICByZXR1cm4gaXNDdXN0b21Qcm9wZXJ0eShzdHlsZU5hbWUpID8gc3R5bGVOYW1lIDogc3R5bGVOYW1lLnJlcGxhY2UoaHlwaGVuYXRlUmVnZXgsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbnZhciBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdhbmltYXRpb24nOlxuICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKGFuaW1hdGlvblJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gsIHAxLCBwMikge1xuICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICBuYW1lOiBwMSxcbiAgICAgICAgICAgICAgc3R5bGVzOiBwMixcbiAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHAxO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBpZiAodW5pdGxlc3Nba2V5XSAhPT0gMSAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxudmFyIG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlID0gJ0NvbXBvbmVudCBzZWxlY3RvcnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoICcgKyAnQGVtb3Rpb24vYmFiZWwtcGx1Z2luLCB0aGUgc3djIEVtb3Rpb24gcGx1Z2luLCBvciBhbm90aGVyIEVtb3Rpb24tYXdhcmUgJyArICdjb21waWxlciB0cmFuc2Zvcm0uJztcblxuZnVuY3Rpb24gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbikge1xuICBpZiAoaW50ZXJwb2xhdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdmFyIGNvbXBvbmVudFNlbGVjdG9yID0gaW50ZXJwb2xhdGlvbjtcblxuICBpZiAoY29tcG9uZW50U2VsZWN0b3IuX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICByZXR1cm4gY29tcG9uZW50U2VsZWN0b3I7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGVvZiBpbnRlcnBvbGF0aW9uKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICB7XG4gICAgICAgIHZhciBrZXlmcmFtZXMgPSBpbnRlcnBvbGF0aW9uO1xuXG4gICAgICAgIGlmIChrZXlmcmFtZXMuYW5pbSA9PT0gMSkge1xuICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGtleWZyYW1lcy5uYW1lLFxuICAgICAgICAgICAgc3R5bGVzOiBrZXlmcmFtZXMuc3R5bGVzLFxuICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ga2V5ZnJhbWVzLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2VyaWFsaXplZFN0eWxlcyA9IGludGVycG9sYXRpb247XG5cbiAgICAgICAgaWYgKHNlcmlhbGl6ZWRTdHlsZXMuc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IHNlcmlhbGl6ZWRTdHlsZXMubmV4dDtcblxuICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgbW9zdCBlZmZpY2llbnQgdGhpbmcgZXZlciBidXQgdGhpcyBpcyBhIHByZXR0eSByYXJlIGNhc2VcbiAgICAgICAgICAgIC8vIGFuZCB0aGVyZSB3aWxsIGJlIHZlcnkgZmV3IGl0ZXJhdGlvbnMgb2YgdGhpcyBnZW5lcmFsbHlcbiAgICAgICAgICAgIHdoaWxlIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IG5leHQubmFtZSxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IG5leHQuc3R5bGVzLFxuICAgICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzdHlsZXMgPSBzZXJpYWxpemVkU3R5bGVzLnN0eWxlcyArIFwiO1wiO1xuICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbik7XG4gICAgICB9XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB7XG4gICAgICAgIGlmIChtZXJnZWRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzQ3Vyc29yID0gY3Vyc29yO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzKTtcbiAgICAgICAgICBjdXJzb3IgPSBwcmV2aW91c0N1cnNvcjtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgcmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIHZhciBhc1N0cmluZyA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKHJlZ2lzdGVyZWQgPT0gbnVsbCkge1xuICAgIHJldHVybiBhc1N0cmluZztcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2FzU3RyaW5nXTtcbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkID8gY2FjaGVkIDogYXNTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9iaikge1xuICB2YXIgc3RyaW5nID0gJyc7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdHJpbmcgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqW2ldKSArIFwiO1wiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIGFzU3RyaW5nID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW2FzU3RyaW5nXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGtleSArIFwie1wiICsgcmVnaXN0ZXJlZFthc1N0cmluZ10gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUoYXNTdHJpbmcpKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCBhc1N0cmluZykgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJyAmJiAocmVnaXN0ZXJlZCA9PSBudWxsIHx8IHJlZ2lzdGVyZWRbdmFsdWVbMF1dID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHZhbHVlLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZVtfaV0pKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBrZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO3tdKylcXHMqKDt8JCkvZzsgLy8gdGhpcyBpcyB0aGUgY3Vyc29yIGZvciBrZXlmcmFtZXNcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cbnZhciBjdXJzb3I7XG5mdW5jdGlvbiBzZXJpYWxpemVTdHlsZXMoYXJncywgcmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsICYmIGFyZ3NbMF0uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYXJnc1swXTtcbiAgfVxuXG4gIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgdmFyIHN0eWxlcyA9ICcnO1xuICBjdXJzb3IgPSB1bmRlZmluZWQ7XG4gIHZhciBzdHJpbmdzID0gYXJnc1swXTtcblxuICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHJpbmdNb2RlID0gZmFsc2U7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHN0cmluZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBhc1RlbXBsYXRlU3RyaW5nc0FyciA9IHN0cmluZ3M7XG5cbiAgICBzdHlsZXMgKz0gYXNUZW1wbGF0ZVN0cmluZ3NBcnJbMF07XG4gIH0gLy8gd2Ugc3RhcnQgYXQgMSBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGZpcnN0IGFyZ1xuXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGFyZ3NbaV0pO1xuXG4gICAgaWYgKHN0cmluZ01vZGUpIHtcbiAgICAgIHZhciB0ZW1wbGF0ZVN0cmluZ3NBcnIgPSBzdHJpbmdzO1xuXG4gICAgICBzdHlsZXMgKz0gdGVtcGxhdGVTdHJpbmdzQXJyW2ldO1xuICAgIH1cbiAgfSAvLyB1c2luZyBhIGdsb2JhbCByZWdleCB3aXRoIC5leGVjIGlzIHN0YXRlZnVsIHNvIGxhc3RJbmRleCBoYXMgdG8gYmUgcmVzZXQgZWFjaCB0aW1lXG5cblxuICBsYWJlbFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG4gIHZhciBtYXRjaDsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YjgwOWMyY2YyOTQ5ODAwYTBmNjFmYjVcblxuICB3aGlsZSAoKG1hdGNoID0gbGFiZWxQYXR0ZXJuLmV4ZWMoc3R5bGVzKSkgIT09IG51bGwpIHtcbiAgICBpZGVudGlmaWVyTmFtZSArPSAnLScgKyBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufVxuXG5leHBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnZhciBzeW5jRmFsbGJhY2sgPSBmdW5jdGlvbiBzeW5jRmFsbGJhY2soY3JlYXRlKSB7XG4gIHJldHVybiBjcmVhdGUoKTtcbn07XG5cbnZhciB1c2VJbnNlcnRpb25FZmZlY3QgPSBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA/IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddIDogZmFsc2U7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCBzeW5jRmFsbGJhY2s7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrID0gdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IFJlYWN0LnVzZUxheW91dEVmZmVjdDtcblxuZXhwb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjaywgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrIH07XG4iLCAiaW1wb3J0IHsgaCBhcyBoYXNPd24sIEUgYXMgRW1vdGlvbiwgYyBhcyBjcmVhdGVFbW90aW9uUHJvcHMsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgVCBhcyBUaGVtZUNvbnRleHQsIGkgYXMgaXNEZXZlbG9wbWVudCB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LWYwZGU5NjhlLmJyb3dzZXIuZXNtLmpzJztcbmV4cG9ydCB7IEMgYXMgQ2FjaGVQcm92aWRlciwgVCBhcyBUaGVtZUNvbnRleHQsIGEgYXMgVGhlbWVQcm92aWRlciwgXyBhcyBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUsIHUgYXMgdXNlVGhlbWUsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgYiBhcyB3aXRoVGhlbWUgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC1mMGRlOTY4ZS5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBnZXRSZWdpc3RlcmVkU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICcuLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5cbnZhciBqc3ggPSBmdW5jdGlvbiBqc3godHlwZSwgcHJvcHMpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblxuICBpZiAocHJvcHMgPT0gbnVsbCB8fCAhaGFzT3duLmNhbGwocHJvcHMsICdjc3MnKSkge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50LmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgY3JlYXRlRWxlbWVudEFyZ0FycmF5ID0gbmV3IEFycmF5KGFyZ3NMZW5ndGgpO1xuICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbMF0gPSBFbW90aW9uO1xuICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbMV0gPSBjcmVhdGVFbW90aW9uUHJvcHModHlwZSwgcHJvcHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSB7XG4gICAgY3JlYXRlRWxlbWVudEFyZ0FycmF5W2ldID0gYXJnc1tpXTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50LmFwcGx5KG51bGwsIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSk7XG59O1xuXG4oZnVuY3Rpb24gKF9qc3gpIHtcbiAgdmFyIEpTWDtcblxuICAoZnVuY3Rpb24gKF9KU1gpIHt9KShKU1ggfHwgKEpTWCA9IF9qc3guSlNYIHx8IChfanN4LkpTWCA9IHt9KSkpO1xufSkoanN4IHx8IChqc3ggPSB7fSkpO1xuXG4vLyBpbml0aWFsIHJlbmRlciBmcm9tIGJyb3dzZXIsIGluc2VydEJlZm9yZSBjb250ZXh0LnNoZWV0LnRhZ3NbMF0gb3IgaWYgYSBzdHlsZSBoYXNuJ3QgYmVlbiBpbnNlcnRlZCB0aGVyZSB5ZXQsIGFwcGVuZENoaWxkXG4vLyBpbml0aWFsIGNsaWVudC1zaWRlIHJlbmRlciBmcm9tIFNTUiwgdXNlIHBsYWNlIG9mIGh5ZHJhdGluZyB0YWdcblxudmFyIEdsb2JhbCA9IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSkge1xuXG4gIHZhciBzdHlsZXMgPSBwcm9wcy5zdHlsZXM7XG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzdHlsZXNdLCB1bmRlZmluZWQsIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG4gIC8vIGJ1dCBpdCBpcyBiYXNlZCBvbiBhIGNvbnN0YW50IHRoYXQgd2lsbCBuZXZlciBjaGFuZ2UgYXQgcnVudGltZVxuICAvLyBpdCdzIGVmZmVjdGl2ZWx5IGxpa2UgaGF2aW5nIHR3byBpbXBsZW1lbnRhdGlvbnMgYW5kIHN3aXRjaGluZyB0aGVtIG91dFxuICAvLyBzbyBpdCdzIG5vdCBhY3R1YWxseSBicmVha2luZyBhbnl0aGluZ1xuXG5cbiAgdmFyIHNoZWV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGtleSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbFwiOyAvLyB1c2UgY2FzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2lzc3Vlcy8yNjc1XG5cbiAgICB2YXIgc2hlZXQgPSBuZXcgY2FjaGUuc2hlZXQuY29uc3RydWN0b3Ioe1xuICAgICAga2V5OiBrZXksXG4gICAgICBub25jZTogY2FjaGUuc2hlZXQubm9uY2UsXG4gICAgICBjb250YWluZXI6IGNhY2hlLnNoZWV0LmNvbnRhaW5lcixcbiAgICAgIHNwZWVkeTogY2FjaGUuc2hlZXQuaXNTcGVlZHlcbiAgICB9KTtcbiAgICB2YXIgcmVoeWRyYXRpbmcgPSBmYWxzZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLWVtb3Rpb249XFxcIlwiICsga2V5ICsgXCIgXCIgKyBzZXJpYWxpemVkLm5hbWUgKyBcIlxcXCJdXCIpO1xuXG4gICAgaWYgKGNhY2hlLnNoZWV0LnRhZ3MubGVuZ3RoKSB7XG4gICAgICBzaGVldC5iZWZvcmUgPSBjYWNoZS5zaGVldC50YWdzWzBdO1xuICAgIH1cblxuICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICByZWh5ZHJhdGluZyA9IHRydWU7IC8vIGNsZWFyIHRoZSBoYXNoIHNvIHRoaXMgbm9kZSB3b24ndCBiZSByZWNvZ25pemFibGUgYXMgcmVoeWRyYXRhYmxlIGJ5IG90aGVyIDxHbG9iYWwvPnNcblxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIGtleSk7XG4gICAgICBzaGVldC5oeWRyYXRlKFtub2RlXSk7XG4gICAgfVxuXG4gICAgc2hlZXRSZWYuY3VycmVudCA9IFtzaGVldCwgcmVoeWRyYXRpbmddO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH07XG4gIH0sIFtjYWNoZV0pO1xuICB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBzaGVldFJlZkN1cnJlbnQgPSBzaGVldFJlZi5jdXJyZW50O1xuICAgIHZhciBzaGVldCA9IHNoZWV0UmVmQ3VycmVudFswXSxcbiAgICAgICAgcmVoeWRyYXRpbmcgPSBzaGVldFJlZkN1cnJlbnRbMV07XG5cbiAgICBpZiAocmVoeWRyYXRpbmcpIHtcbiAgICAgIHNoZWV0UmVmQ3VycmVudFsxXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXJpYWxpemVkLm5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaW5zZXJ0IGtleWZyYW1lc1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLm5leHQsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChzaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgLy8gaWYgdGhpcyBkb2Vzbid0IGV4aXN0IHRoZW4gaXQgd2lsbCBiZSBudWxsIHNvIHRoZSBzdHlsZSBlbGVtZW50IHdpbGwgYmUgYXBwZW5kZWRcbiAgICAgIHZhciBlbGVtZW50ID0gc2hlZXQudGFnc1tzaGVldC50YWdzLmxlbmd0aCAtIDFdLm5leHRFbGVtZW50U2libGluZztcbiAgICAgIHNoZWV0LmJlZm9yZSA9IGVsZW1lbnQ7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH1cblxuICAgIGNhY2hlLmluc2VydChcIlwiLCBzZXJpYWxpemVkLCBzaGVldCwgZmFsc2UpO1xuICB9LCBbY2FjaGUsIHNlcmlhbGl6ZWQubmFtZV0pO1xuICByZXR1cm4gbnVsbDtcbn0pO1xuXG5mdW5jdGlvbiBjc3MoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG5mdW5jdGlvbiBrZXlmcmFtZXMoKSB7XG4gIHZhciBpbnNlcnRhYmxlID0gY3NzLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgdmFyIG5hbWUgPSBcImFuaW1hdGlvbi1cIiArIGluc2VydGFibGUubmFtZTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogXCJAa2V5ZnJhbWVzIFwiICsgbmFtZSArIFwie1wiICsgaW5zZXJ0YWJsZS5zdHlsZXMgKyBcIn1cIixcbiAgICBhbmltOiAxLFxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBcIl9FTU9fXCIgKyB0aGlzLm5hbWUgKyBcIl9cIiArIHRoaXMuc3R5bGVzICsgXCJfRU1PX1wiO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIGNsYXNzbmFtZXMgPSBmdW5jdGlvbiBjbGFzc25hbWVzKGFyZ3MpIHtcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBjbHMgPSAnJztcblxuICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgaWYgKGFyZyA9PSBudWxsKSBjb250aW51ZTtcbiAgICB2YXIgdG9BZGQgPSB2b2lkIDA7XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiBhcmcpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgIHRvQWRkID0gY2xhc3NuYW1lcyhhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIHRvQWRkID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gYXJnKSB7XG4gICAgICAgICAgICAgIGlmIChhcmdba10gJiYgaykge1xuICAgICAgICAgICAgICAgIHRvQWRkICYmICh0b0FkZCArPSAnICcpO1xuICAgICAgICAgICAgICAgIHRvQWRkICs9IGs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgdG9BZGQgPSBhcmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG9BZGQpIHtcbiAgICAgIGNscyAmJiAoY2xzICs9ICcgJyk7XG4gICAgICBjbHMgKz0gdG9BZGQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNscztcbn07XG5cbmZ1bmN0aW9uIG1lcmdlKHJlZ2lzdGVyZWQsIGNzcywgY2xhc3NOYW1lKSB7XG4gIHZhciByZWdpc3RlcmVkU3R5bGVzID0gW107XG4gIHZhciByYXdDbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZSk7XG5cbiAgaWYgKHJlZ2lzdGVyZWRTdHlsZXMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICByZXR1cm4gcmF3Q2xhc3NOYW1lICsgY3NzKHJlZ2lzdGVyZWRTdHlsZXMpO1xufVxuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWRBcnIgPSBfcmVmLnNlcmlhbGl6ZWRBcnI7XG4gIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2soZnVuY3Rpb24gKCkge1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJpYWxpemVkQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWRBcnJbaV0sIGZhbHNlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIENsYXNzTmFtZXMgPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcbiAgdmFyIGhhc1JlbmRlcmVkID0gZmFsc2U7XG4gIHZhciBzZXJpYWxpemVkQXJyID0gW107XG5cbiAgdmFyIGNzcyA9IGZ1bmN0aW9uIGNzcygpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjc3MgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgcmVuZGVyJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIGNhY2hlLnJlZ2lzdGVyZWQpO1xuICAgIHNlcmlhbGl6ZWRBcnIucHVzaChzZXJpYWxpemVkKTsgLy8gcmVnaXN0cmF0aW9uIGhhcyB0byBoYXBwZW4gaGVyZSBhcyB0aGUgcmVzdWx0IG9mIHRoaXMgbWlnaHQgZ2V0IGNvbnN1bWVkIGJ5IGBjeGBcblxuICAgIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBmYWxzZSk7XG4gICAgcmV0dXJuIGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB9O1xuXG4gIHZhciBjeCA9IGZ1bmN0aW9uIGN4KCkge1xuICAgIGlmIChoYXNSZW5kZXJlZCAmJiBpc0RldmVsb3BtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2N4IGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZShjYWNoZS5yZWdpc3RlcmVkLCBjc3MsIGNsYXNzbmFtZXMoYXJncykpO1xuICB9O1xuXG4gIHZhciBjb250ZW50ID0ge1xuICAgIGNzczogY3NzLFxuICAgIGN4OiBjeCxcbiAgICB0aGVtZTogUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpXG4gIH07XG4gIHZhciBlbGUgPSBwcm9wcy5jaGlsZHJlbihjb250ZW50KTtcbiAgaGFzUmVuZGVyZWQgPSB0cnVlO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgIGNhY2hlOiBjYWNoZSxcbiAgICBzZXJpYWxpemVkQXJyOiBzZXJpYWxpemVkQXJyXG4gIH0pLCBlbGUpO1xufSk7XG5cbmV4cG9ydCB7IENsYXNzTmFtZXMsIEdsb2JhbCwganN4IGFzIGNyZWF0ZUVsZW1lbnQsIGNzcywganN4LCBrZXlmcmFtZXMgfTtcbiIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIHRocm90dGxlID0gZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcbiAgdmFyIHdhaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDUwO1xuICB2YXIgdGltZSA9IERhdGUubm93KCk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRpbWUgKyB3YWl0IC0gRGF0ZS5ub3coKSA8IDApIHtcbiAgICAgIGZuLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICAgIHRpbWUgPSBEYXRlLm5vdygpO1xuICAgIH1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciBzb3J0TWFwQnlMYXJnZVRvU21hbGxWYWx1ZXMgPSBmdW5jdGlvbiBzb3J0TWFwQnlMYXJnZVRvU21hbGxWYWx1ZXMoYnJlYWtwb2ludHNNYXApIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhicmVha3BvaW50c01hcCkuc29ydChmdW5jdGlvbiAoX3JlZiwgX3JlZjIpIHtcbiAgICB2YXIgX3JlZjMgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKSxcbiAgICAgIGEgPSBfcmVmM1sxXTtcbiAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMiwgMiksXG4gICAgICBiID0gX3JlZjRbMV07XG4gICAgcmV0dXJuIGIgLSBhO1xuICB9KSk7XG59O1xuZXhwb3J0IHZhciBzb3J0TWFwQnlTbWFsbFRvTGFyZ2VWYWx1ZXMgPSBmdW5jdGlvbiBzb3J0TWFwQnlTbWFsbFRvTGFyZ2VWYWx1ZXMoYnJlYWtwb2ludHNNYXApIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhicmVha3BvaW50c01hcCkuc29ydChmdW5jdGlvbiAoX3JlZjUsIF9yZWY2KSB7XG4gICAgdmFyIF9yZWY3ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjUsIDIpLFxuICAgICAgYSA9IF9yZWY3WzFdO1xuICAgIHZhciBfcmVmOCA9IF9zbGljZWRUb0FycmF5KF9yZWY2LCAyKSxcbiAgICAgIGIgPSBfcmVmOFsxXTtcbiAgICByZXR1cm4gYSAtIGI7XG4gIH0pKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDdXJyZW50RXVpQnJlYWtwb2ludENvbnRleHQgfSBmcm9tICcuL2N1cnJlbnRfYnJlYWtwb2ludCc7XG5cbi8qKlxuICogSG9vayB1dGlsIC8gc3ludGFjdGljYWwgc3VnYXIgZm9yIHVzZUNvbnRleHQoKVxuICpcbiAqIFRoaXMgaG9vayBpcyBpbiBpdHMgb3duIHNlcGFyYXRlIGZpbGUgdG8gbWFrZSBtb2NraW5nIGl0XG4gKiBhcyBhIHRlc3RlbnYgZWFzeSBmb3IgSmVzdCB1bml0IHRlc3RzXG4gKi9cbmV4cG9ydCB2YXIgdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQgPSBmdW5jdGlvbiB1c2VDdXJyZW50RXVpQnJlYWtwb2ludCgpIHtcbiAgdmFyIGN1cnJlbnRCcmVha3BvaW50ID0gdXNlQ29udGV4dChDdXJyZW50RXVpQnJlYWtwb2ludENvbnRleHQpO1xuICByZXR1cm4gY3VycmVudEJyZWFrcG9pbnQ7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5pbXBvcnQgeyBjc3MgYXMgX2NzcyB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIF9leGNsdWRlZCA9IFtcImNsb25lRWxlbWVudFwiLCBcImNsYXNzTmFtZVwiXTtcbnZhciBfdGVtcGxhdGVPYmplY3Q7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoZSwgdCkgeyByZXR1cm4gdCB8fCAodCA9IGUuc2xpY2UoMCkpLCBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHQpIH0gfSkpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IHsgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uL2Vtb3Rpb24nO1xuaW1wb3J0IHsgY3NzLCBjeCB9IGZyb20gJy4uL2Vtb3Rpb24vY3NzJztcbmltcG9ydCB7IEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIgfSBmcm9tICcuLi9icmVha3BvaW50L2N1cnJlbnRfYnJlYWtwb2ludCc7XG5pbXBvcnQgeyBFdWlTeXN0ZW1Db250ZXh0LCBFdWlUaGVtZUNvbnRleHQsIEV1aU5lc3RlZFRoZW1lQ29udGV4dCwgRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQsIEV1aUNvbG9yTW9kZUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgRXVpRW1vdGlvblRoZW1lUHJvdmlkZXIgfSBmcm9tICcuL2Vtb3Rpb24nO1xuaW1wb3J0IHsgRXVpVGhlbWVNZW1vaXplZFN0eWxlc1Byb3ZpZGVyIH0gZnJvbSAnLi9zdHlsZV9tZW1vaXphdGlvbic7XG5pbXBvcnQgeyBidWlsZFRoZW1lLCBnZXRDb2xvck1vZGUsIGdldENvbXB1dGVkLCBtZXJnZURlZXAgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRoZW1lUHJvdmlkZXIgPSBmdW5jdGlvbiBFdWlUaGVtZVByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIF9zeXN0ZW0gPSBfcmVmLnRoZW1lLFxuICAgIF9jb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZSxcbiAgICBfbW9kaWZpY2F0aW9ucyA9IF9yZWYubW9kaWZ5LFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICB3cmFwcGVyUHJvcHMgPSBfcmVmLndyYXBwZXJQcm9wcztcbiAgdmFyIF91c2VDb250ZXh0ID0gdXNlQ29udGV4dChFdWlOZXN0ZWRUaGVtZUNvbnRleHQpLFxuICAgIGlzR2xvYmFsVGhlbWUgPSBfdXNlQ29udGV4dC5pc0dsb2JhbFRoZW1lLFxuICAgIGJvZHlDb2xvciA9IF91c2VDb250ZXh0LmJvZHlDb2xvcixcbiAgICBnbG9iYWxDU1NWYXJpYWJsZXMgPSBfdXNlQ29udGV4dC5nbG9iYWxDU1NWYXJpYWJsZXMsXG4gICAgc2V0R2xvYmFsQ1NTVmFyaWFibGVzID0gX3VzZUNvbnRleHQuc2V0R2xvYmFsQ1NTVmFyaWFibGVzO1xuICB2YXIgcGFyZW50U3lzdGVtID0gdXNlQ29udGV4dChFdWlTeXN0ZW1Db250ZXh0KTtcbiAgdmFyIHBhcmVudE1vZGlmaWNhdGlvbnMgPSB1c2VDb250ZXh0KEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0KTtcbiAgdmFyIHBhcmVudENvbG9yTW9kZSA9IHVzZUNvbnRleHQoRXVpQ29sb3JNb2RlQ29udGV4dCk7XG4gIHZhciBwYXJlbnRUaGVtZSA9IHVzZUNvbnRleHQoRXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKF9zeXN0ZW0gfHwgcGFyZW50U3lzdGVtKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBzeXN0ZW0gPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldFN5c3RlbSA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBwcmV2U3lzdGVtS2V5ID0gdXNlUmVmKHN5c3RlbS5rZXkpO1xuXG4gIC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHdpbmRvdyByZXNpemUgbGlzdGVuZXJzLCBvbmx5IHJlbmRlciBhXG4gIC8vIEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIgZm9yIHRoZSB0b3AgbGV2ZWwgcGFyZW50IHRoZW1lLCBvciBmb3JcbiAgLy8gbmVzdGVkIHRoZW1lcyBvbmx5IGlmIG1vZGlmaWVkIGJyZWFrcG9pbnQgb3ZlcnJpZGVzIGFyZSBwYXNzZWRcbiAgdmFyIEV1aUNvbmRpdGlvbmFsQnJlYWtwb2ludFByb3ZpZGVyID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGlzR2xvYmFsVGhlbWUgfHwgX21vZGlmaWNhdGlvbnMgIT09IG51bGwgJiYgX21vZGlmaWNhdGlvbnMgIT09IHZvaWQgMCAmJiBfbW9kaWZpY2F0aW9ucy5icmVha3BvaW50ID8gQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciA6IEZyYWdtZW50O1xuICB9LCBbaXNHbG9iYWxUaGVtZSwgX21vZGlmaWNhdGlvbnNdKTtcbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShtZXJnZURlZXAocGFyZW50TW9kaWZpY2F0aW9ucywgX21vZGlmaWNhdGlvbnMpKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgbW9kaWZpY2F0aW9ucyA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0TW9kaWZpY2F0aW9ucyA9IF91c2VTdGF0ZTRbMV07XG4gIHZhciBwcmV2TW9kaWZpY2F0aW9ucyA9IHVzZVJlZihtb2RpZmljYXRpb25zKTtcbiAgdmFyIF91c2VTdGF0ZTUgPSB1c2VTdGF0ZShnZXRDb2xvck1vZGUoX2NvbG9yTW9kZSwgcGFyZW50Q29sb3JNb2RlKSksXG4gICAgX3VzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTUsIDIpLFxuICAgIGNvbG9yTW9kZSA9IF91c2VTdGF0ZTZbMF0sXG4gICAgc2V0Q29sb3JNb2RlID0gX3VzZVN0YXRlNlsxXTtcbiAgdmFyIHByZXZDb2xvck1vZGUgPSB1c2VSZWYoY29sb3JNb2RlKTtcbiAgdmFyIGlzUGFyZW50VGhlbWUgPSB1c2VSZWYocHJldlN5c3RlbUtleS5jdXJyZW50ID09PSBwYXJlbnRTeXN0ZW0ua2V5ICYmIGNvbG9yTW9kZSA9PT0gcGFyZW50Q29sb3JNb2RlICYmIGlzRXF1YWwocGFyZW50TW9kaWZpY2F0aW9ucywgbW9kaWZpY2F0aW9ucykpO1xuICB2YXIgX3VzZVN0YXRlNyA9IHVzZVN0YXRlKGlzUGFyZW50VGhlbWUuY3VycmVudCAmJiBPYmplY3Qua2V5cyhwYXJlbnRUaGVtZSkubGVuZ3RoID8gX29iamVjdFNwcmVhZCh7fSwgcGFyZW50VGhlbWUpIC8vIEludGVudGlvbmFsbHkgY3JlYXRlIGEgbmV3IG9iamVjdCB0byBicmVhayByZWZlcmVudGlhbCBlcXVhbGl0eVxuICAgIDogZ2V0Q29tcHV0ZWQoc3lzdGVtLCBidWlsZFRoZW1lKG1vZGlmaWNhdGlvbnMsIFwiX1wiLmNvbmNhdChzeXN0ZW0ua2V5KSksIGNvbG9yTW9kZSkpLFxuICAgIF91c2VTdGF0ZTggPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU3LCAyKSxcbiAgICB0aGVtZSA9IF91c2VTdGF0ZThbMF0sXG4gICAgc2V0VGhlbWUgPSBfdXNlU3RhdGU4WzFdO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZXdTeXN0ZW0gPSBfc3lzdGVtIHx8IHBhcmVudFN5c3RlbTtcbiAgICBpZiAocHJldlN5c3RlbUtleS5jdXJyZW50ICE9PSBuZXdTeXN0ZW0ua2V5KSB7XG4gICAgICBzZXRTeXN0ZW0obmV3U3lzdGVtKTtcbiAgICAgIHByZXZTeXN0ZW1LZXkuY3VycmVudCA9IG5ld1N5c3RlbS5rZXk7XG4gICAgICBpc1BhcmVudFRoZW1lLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtfc3lzdGVtLCBwYXJlbnRTeXN0ZW1dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3TW9kaWZpY2F0aW9ucyA9IG1lcmdlRGVlcChwYXJlbnRNb2RpZmljYXRpb25zLCBfbW9kaWZpY2F0aW9ucyk7XG4gICAgaWYgKCFpc0VxdWFsKHByZXZNb2RpZmljYXRpb25zLmN1cnJlbnQsIG5ld01vZGlmaWNhdGlvbnMpKSB7XG4gICAgICBzZXRNb2RpZmljYXRpb25zKG5ld01vZGlmaWNhdGlvbnMpO1xuICAgICAgcHJldk1vZGlmaWNhdGlvbnMuY3VycmVudCA9IG5ld01vZGlmaWNhdGlvbnM7XG4gICAgICBpc1BhcmVudFRoZW1lLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtfbW9kaWZpY2F0aW9ucywgcGFyZW50TW9kaWZpY2F0aW9uc10pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZXdDb2xvck1vZGUgPSBnZXRDb2xvck1vZGUoX2NvbG9yTW9kZSwgcGFyZW50Q29sb3JNb2RlKTtcbiAgICBpZiAoIWlzRXF1YWwobmV3Q29sb3JNb2RlLCBwcmV2Q29sb3JNb2RlLmN1cnJlbnQpKSB7XG4gICAgICBzZXRDb2xvck1vZGUobmV3Q29sb3JNb2RlKTtcbiAgICAgIHByZXZDb2xvck1vZGUuY3VycmVudCA9IG5ld0NvbG9yTW9kZTtcbiAgICAgIGlzUGFyZW50VGhlbWUuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW19jb2xvck1vZGUsIHBhcmVudENvbG9yTW9kZV0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghaXNQYXJlbnRUaGVtZS5jdXJyZW50KSB7XG4gICAgICBzZXRUaGVtZShnZXRDb21wdXRlZChzeXN0ZW0sIGJ1aWxkVGhlbWUobW9kaWZpY2F0aW9ucywgXCJfXCIuY29uY2F0KHN5c3RlbS5rZXkpKSwgY29sb3JNb2RlKSk7XG4gICAgfVxuICB9LCBbY29sb3JNb2RlLCBzeXN0ZW0sIG1vZGlmaWNhdGlvbnNdKTtcbiAgdmFyIF91c2VTdGF0ZTkgPSB1c2VTdGF0ZSgpLFxuICAgIF91c2VTdGF0ZTEwID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlOSwgMiksXG4gICAgdGhlbWVDU1NWYXJpYWJsZXMgPSBfdXNlU3RhdGUxMFswXSxcbiAgICBfc2V0VGhlbWVDU1NWYXJpYWJsZXMgPSBfdXNlU3RhdGUxMFsxXTtcbiAgdmFyIHNldFRoZW1lQ1NTVmFyaWFibGVzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHZhcmlhYmxlcykge1xuICAgIHJldHVybiBfc2V0VGhlbWVDU1NWYXJpYWJsZXMoZnVuY3Rpb24gKHByZXZpb3VzKSB7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcmV2aW91cyksIHZhcmlhYmxlcyk7XG4gICAgfSk7XG4gIH0sIFtdKTtcbiAgdmFyIG5lc3RlZFRoZW1lQ29udGV4dCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0dsb2JhbFRoZW1lOiBmYWxzZSxcbiAgICAgIC8vIFRoZSB0aGVtZSB0aGF0IGRldGVybWluZXMgdGhlIGdsb2JhbCBib2R5IHN0eWxlc1xuICAgICAgYm9keUNvbG9yOiBpc0dsb2JhbFRoZW1lID8gdGhlbWUuY29sb3JzLnRleHQgOiBib2R5Q29sb3IsXG4gICAgICBoYXNEaWZmZXJlbnRDb2xvckZyb21HbG9iYWxUaGVtZTogaXNHbG9iYWxUaGVtZSA/IGZhbHNlIDogYm9keUNvbG9yICE9PSB0aGVtZS5jb2xvcnMudGV4dCxcbiAgICAgIGNvbG9yQ2xhc3NOYW1lOiBjc3MoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICAgICAgbGFiZWw6IGV1aUNvbG9yTW9kZS1cIiwgXCI7XFxuICAgICAgICBjb2xvcjogXCIsIFwiO1xcbiAgICAgIFwiXSkpLCBfY29sb3JNb2RlIHx8IGNvbG9yTW9kZSwgdGhlbWUuY29sb3JzLnRleHQpLFxuICAgICAgc2V0R2xvYmFsQ1NTVmFyaWFibGVzOiBpc0dsb2JhbFRoZW1lID8gc2V0VGhlbWVDU1NWYXJpYWJsZXMgOiBzZXRHbG9iYWxDU1NWYXJpYWJsZXMsXG4gICAgICBnbG9iYWxDU1NWYXJpYWJsZXM6IGlzR2xvYmFsVGhlbWUgPyB0aGVtZUNTU1ZhcmlhYmxlcyA6IGdsb2JhbENTU1ZhcmlhYmxlcyxcbiAgICAgIHNldE5lYXJlc3RUaGVtZUNTU1ZhcmlhYmxlczogc2V0VGhlbWVDU1NWYXJpYWJsZXMsXG4gICAgICB0aGVtZUNTU1ZhcmlhYmxlczogdGhlbWVDU1NWYXJpYWJsZXNcbiAgICB9O1xuICB9LCBbdGhlbWUsIGlzR2xvYmFsVGhlbWUsIGJvZHlDb2xvciwgX2NvbG9yTW9kZSwgY29sb3JNb2RlLCBzZXRHbG9iYWxDU1NWYXJpYWJsZXMsIGdsb2JhbENTU1ZhcmlhYmxlcywgc2V0VGhlbWVDU1NWYXJpYWJsZXMsIHRoZW1lQ1NTVmFyaWFibGVzXSk7XG4gIHZhciByZW5kZXJlZENoaWxkcmVuID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzR2xvYmFsVGhlbWUpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbjsgLy8gTm8gd3JhcHBlclxuICAgIH1cbiAgICB2YXIgX3JlZjIgPSB3cmFwcGVyUHJvcHMgfHwge30sXG4gICAgICBjbG9uZUVsZW1lbnQgPSBfcmVmMi5jbG9uZUVsZW1lbnQsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmMi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQpO1xuICAgIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICBjbGFzc05hbWU6IGN4KGNsYXNzTmFtZSwgbmVzdGVkVGhlbWVDb250ZXh0LmNvbG9yQ2xhc3NOYW1lKVxuICAgIH0pO1xuICAgIC8vIENvbmRpdGlvbiBhdm9pZHMgcmVuZGVyaW5nIGFuIGVtcHR5IEVtb3Rpb24gc2VsZWN0b3IgaWYgbm9cbiAgICAvLyB0aGVtZS1zcGVjaWZpYyBDU1MgdmFyaWFibGVzIGhhdmUgYmVlbiBzZXQgYnkgY2hpbGQgY29tcG9uZW50c1xuICAgIGlmICh0aGVtZUNTU1ZhcmlhYmxlcykge1xuICAgICAgcHJvcHMuY3NzID0gX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGxhYmVsOiAnZXVpQ1NTVmFyaWFibGVzJ1xuICAgICAgfSwgdGhlbWVDU1NWYXJpYWJsZXMpO1xuICAgIH1cbiAgICBpZiAoY2xvbmVFbGVtZW50KSB7XG4gICAgICByZXR1cm4gY2xvbmVFbGVtZW50V2l0aENzcyhjaGlsZHJlbiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICAgIGNsYXNzTmFtZTogY3goY2hpbGRyZW4ucHJvcHMuY2xhc3NOYW1lLCBwcm9wcy5jbGFzc05hbWUpXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjeCgnZXVpVGhlbWVQcm92aWRlcicsIHByb3BzLmNsYXNzTmFtZSlcbiAgICAgIH0pLCBjaGlsZHJlbik7XG4gICAgfVxuICB9LCBbaXNHbG9iYWxUaGVtZSwgdGhlbWVDU1NWYXJpYWJsZXMsIG5lc3RlZFRoZW1lQ29udGV4dCwgd3JhcHBlclByb3BzLCBjaGlsZHJlbl0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgaXNHbG9iYWxUaGVtZSAmJiB0aGVtZUNTU1ZhcmlhYmxlcyAmJiBfX19FbW90aW9uSlNYKEdsb2JhbCwge1xuICAgIHN0eWxlczogLyojX19QVVJFX18qL19jc3Moe1xuICAgICAgJzpyb290JzogdGhlbWVDU1NWYXJpYWJsZXNcbiAgICB9LCBcIjtsYWJlbDpFdWlUaGVtZVByb3ZpZGVyO1wiKVxuICB9KSwgX19fRW1vdGlvbkpTWChFdWlDb2xvck1vZGVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbG9yTW9kZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aVN5c3RlbUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogc3lzdGVtXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogbW9kaWZpY2F0aW9uc1xuICB9LCBfX19FbW90aW9uSlNYKEV1aVRoZW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB0aGVtZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aU5lc3RlZFRoZW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBuZXN0ZWRUaGVtZUNvbnRleHRcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlUaGVtZU1lbW9pemVkU3R5bGVzUHJvdmlkZXIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpRW1vdGlvblRoZW1lUHJvdmlkZXIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpQ29uZGl0aW9uYWxCcmVha3BvaW50UHJvdmlkZXIsIG51bGwsIHJlbmRlcmVkQ2hpbGRyZW4pKSkpKSkpKSk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGpzeCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcblxuLyoqXG4gKiBSZWFjdC5jbG9uZUVsZW1lbnQgZG9lcyBub3Qgd29yayBpZiB0aGUgY2xvbmVkIGVsZW1lbnQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIHRoZVxuICogYGNzc2AgcHJvcCAtIGFzIGEgcmVzdWx0LCB3ZSBuZWVkIHRvIHVzZSBganN4KClgIHRvIG1hbnVhbGx5IGNsb25lIHRoZSBlbGVtZW50XG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9pc3N1ZXMvMTQwNFxuICovXG5leHBvcnQgdmFyIGNsb25lRWxlbWVudFdpdGhDc3MgPSBmdW5jdGlvbiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBjc3NPcmRlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJ2FmdGVyJztcbiAgdmFyIGNsb25lZEVsZW1lbnQgPSBlbGVtZW50LnByb3BzLl9fRU1PVElPTl9UWVBFX1BMRUFTRV9ET19OT1RfVVNFX18gfHwgZWxlbWVudC50eXBlOyAvLyBFTU9USU9OX1RZUEUgaGFuZGxlcyBub24tUmVhY3QgZWxlbWVudHMgKG5hdGl2ZSBKU1gvSFRNTCBub2RlcylcblxuICB2YXIgY2xvbmVkUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWxlbWVudC5rZXkgPyB7XG4gICAga2V5OiBlbGVtZW50LmtleVxuICB9IDoge30pLCB7fSwge1xuICAgIHJlZjogZWxlbWVudC5yZWZcbiAgfSwgZWxlbWVudC5wcm9wcyksIHByb3BzKTtcbiAgaWYgKHByb3BzLmNzcyB8fCBlbGVtZW50LnByb3BzLmNzcykge1xuICAgIGNsb25lZFByb3BzLmNzcyA9IGNzc09yZGVyID09PSAnYmVmb3JlJyA/IFtwcm9wcy5jc3MsIGVsZW1lbnQucHJvcHMuY3NzXSA6IFtlbGVtZW50LnByb3BzLmNzcywgcHJvcHMuY3NzXTtcbiAgfVxuICByZXR1cm4ganN4KGNsb25lZEVsZW1lbnQsIGNsb25lZFByb3BzKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNoYXJhdCwgREVDTEFSQVRJT04sIGhhc2gsIGluZGV4b2YsIE1PWiwgcmVwbGFjZSwgc3RybGVuLCBXRUJLSVQgfSBmcm9tICdzdHlsaXMnO1xuXG4vLyBUaGlzIGlzIGEgaGVhdmlseSBtb2RpZmllZCB2ZXJzaW9uIG9mIEVtb3Rpb24ncyBkZWZhdWx0IGBwcmVmaXhlcmAgcGx1Z2luXG4vLyAobW9zdGx5IHJlbW92aW5nIHVubmVjZXNzYXJ5IHByZWZpeGVzKSwgd2hpY2ggaXMgaW4gdHVybiBhIG1vZGlmaWVkIHZlcnNpb25cbi8vIG9mIHN0eWxpcydzIGRlZmF1bHQgcHJlZml4ZXIuXG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vYmxvYi9tYWluL3BhY2thZ2VzL2NhY2hlL3NyYy9wcmVmaXhlci5qc1xuLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLXRlbXBsYXRlICovXG5cbi8qKlxuICogVGhpcyBpcyBhIHN0eWxpcyBwbHVnaW4gd2hpY2ggaGFuZGxlcyBhdXRvLXByZWZpeGluZyBDU1Mgb3V0cHV0IGJ5IEVtb3Rpb24uXG4gKlxuICogKlBsZWFzZSBub3RlKjogRVVJL0VsYXN0aWMgdGFyZ2V0cyBsYXRlc3QgZXZlcmdyZWVuIGJyb3dzZXJzIGZvciBzdXBwb3J0IG9ubHkuXG4gKiBAc2VlIGh0dHBzOi8vd3d3LmVsYXN0aWMuY28vc3VwcG9ydC9tYXRyaXgjbWF0cml4X2Jyb3dzZXJzXG4gKi9cbmV4cG9ydCB2YXIgZXVpU3R5bGlzUHJlZml4ZXIgPSBmdW5jdGlvbiBldWlTdHlsaXNQcmVmaXhlcihlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKSBpZiAoIWVsZW1lbnQucmV0dXJuKSBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgREVDTEFSQVRJT046XG4gICAgICBlbGVtZW50LnJldHVybiA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCk7XG4gICAgICBicmVhaztcbiAgfVxufTtcbnZhciBwcmVmaXggPSBmdW5jdGlvbiBwcmVmaXgodmFsdWUsIGxlbmd0aCkge1xuICBzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcbiAgICAvKipcbiAgICAgKiBgLXdlYmtpdGAgcHJlZml4ZXNcbiAgICAgKi9cbiAgICAvLyB1c2VyLXNlbGVjdCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vbWRuLWNzc19wcm9wZXJ0aWVzX3VzZXItc2VsZWN0IC0gbmVlZGVkIGJ5IFNhZmFyaVxuICAgIGNhc2UgNDI0NjpcbiAgICAvLyB0ZXh0LWRlY29yYXRpb24gLSBodHRwczovL2Nhbml1c2UuY29tL3RleHQtZGVjb3JhdGlvbiAtIGlPUyBTYWZhcmkgaXMgdGhlIG1haW4gb25lIHRoYXQgbmVlZHMgdGhpc1xuICAgIGNhc2UgNTU3MjpcbiAgICAvLyB0ZXh0LXNpemUtYWRqdXN0IC0gaHR0cHM6Ly9jYW5pdXNlLmNvbS90ZXh0LXNpemUtYWRqdXN0IC0gaU9TIFNhZmFyaVxuICAgIGNhc2UgMjc1NjpcbiAgICAvLyBib3gtZGVjb3JhdGlvbi1icmVhayAtIGh0dHBzOi8vY2FuaXVzZS5jb20vY3NzLWJveGRlY29yYXRpb25icmVhayAtIENocm9tZSAmIFNhZmFyaVxuICAgIGNhc2UgMzAwNTpcbiAgICAvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSAtIENocm9tZVxuICAgIGNhc2UgNjM5MTpcbiAgICBjYXNlIDU4Nzk6XG4gICAgY2FzZSA1NjIzOlxuICAgIGNhc2UgNjEzNTpcbiAgICBjYXNlIDQ1OTk6XG4gICAgY2FzZSA0ODU1OlxuICAgIC8vIHByaW50LWNvbG9yLWFkanVzdCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vY3NzLWNvbG9yLWFkanVzdCAtIENocm9tZVxuICAgIGNhc2UgMjI4MjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuXG4gICAgLy8gYmFja2dyb3VuZC1jbGlwIC0gaHR0cHM6Ly9jYW5pdXNlLmNvbS9iYWNrZ3JvdW5kLWNsaXAtdGV4dCAtIENocm9tZSwgb25seSBmb3IgYHRleHRgIHZhbHVlXG4gICAgY2FzZSA0MjE1OlxuICAgICAgaWYgKH5pbmRleG9mKHZhbHVlLCAndGV4dCcpKSB7XG4gICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgLyoqXG4gICAgICogSW50cmluc2ljL2V4dHJpbnNpYyBzaXppbmcgdmFsdWUgcHJlZml4ZXNcbiAgICAgKiBgc3RyZXRjaGAgYWx0ZXJuYXRpdmVzIG5lZWRlZCBieSBDaHJvbWUgJiBGaXJlZm94IC0gaHR0cHM6Ly9jYW5pdXNlLmNvbS9pbnRyaW5zaWMtd2lkdGhcbiAgICAgKi9cbiAgICAvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuICAgIGNhc2UgODExNjpcbiAgICBjYXNlIDcwNTk6XG4gICAgY2FzZSA1NzUzOlxuICAgIGNhc2UgNTUzNTpcbiAgICBjYXNlIDU0NDU6XG4gICAgY2FzZSA1NzAxOlxuICAgIGNhc2UgNDkzMzpcbiAgICBjYXNlIDQ2Nzc6XG4gICAgY2FzZSA1NTMzOlxuICAgIGNhc2UgNTc4OTpcbiAgICBjYXNlIDUwMjE6XG4gICAgY2FzZSA0NzY1OlxuICAgICAgLy8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuICAgICAgaWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNikgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG4gICAgICAgIC8vIChmKWlsbC1hdmFpbGFibGVcbiAgICAgICAgY2FzZSAxMDI6XG4gICAgICAgICAgaWYgKH5pbmRleG9mKHZhbHVlLCAnZmlsbC1hdmFpbGFibGUnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KSguKyktKFteXSspLywgJyQxJyArIFdFQktJVCArICckMi0kMycgKyAnJDEnICsgTU9aICsgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMykgPT09IDEwOCA/ICckMycgOiAnJDItJDMnKSk7XG4gICAgICAgICAgfVxuICAgICAgICAvLyAocyl0cmV0Y2hcbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgaWYgKH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCkgKyB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59OyIsICJpbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcblxuZnVuY3Rpb24gaW5zZXJ0V2l0aG91dFNjb3BpbmcoY2FjaGUsIHNlcmlhbGl6ZWQpIHtcbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjYWNoZS5pbnNlcnQoJycsIHNlcmlhbGl6ZWQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyhyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIGNyZWF0ZUVtb3Rpb24gPSBmdW5jdGlvbiBjcmVhdGVFbW90aW9uKG9wdGlvbnMpIHtcbiAgdmFyIGNhY2hlID0gY3JlYXRlQ2FjaGUob3B0aW9ucyk7XG5cbiAgY2FjaGUuc2hlZXQuc3BlZWR5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cbiAgICB0aGlzLmlzU3BlZWR5ID0gdmFsdWU7XG4gIH07XG5cbiAgY2FjaGUuY29tcGF0ID0gdHJ1ZTtcblxuICB2YXIgY3NzID0gZnVuY3Rpb24gY3NzKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkLCB1bmRlZmluZWQpO1xuICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIGNhY2hlLnJlZ2lzdGVyZWQpO1xuICAgIHZhciBhbmltYXRpb24gPSBcImFuaW1hdGlvbi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgICBpbnNlcnRXaXRob3V0U2NvcGluZyhjYWNoZSwge1xuICAgICAgbmFtZTogc2VyaWFsaXplZC5uYW1lLFxuICAgICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBhbmltYXRpb24gKyBcIntcIiArIHNlcmlhbGl6ZWQuc3R5bGVzICsgXCJ9XCJcbiAgICB9KTtcbiAgICByZXR1cm4gYW5pbWF0aW9uO1xuICB9O1xuXG4gIHZhciBpbmplY3RHbG9iYWwgPSBmdW5jdGlvbiBpbmplY3RHbG9iYWwoKSB7XG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY2FjaGUucmVnaXN0ZXJlZCk7XG4gICAgaW5zZXJ0V2l0aG91dFNjb3BpbmcoY2FjaGUsIHNlcmlhbGl6ZWQpO1xuICB9O1xuXG4gIHZhciBjeCA9IGZ1bmN0aW9uIGN4KCkge1xuICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZShjYWNoZS5yZWdpc3RlcmVkLCBjc3MsIGNsYXNzbmFtZXMoYXJncykpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY3NzOiBjc3MsXG4gICAgY3g6IGN4LFxuICAgIGluamVjdEdsb2JhbDogaW5qZWN0R2xvYmFsLFxuICAgIGtleWZyYW1lczoga2V5ZnJhbWVzLFxuICAgIGh5ZHJhdGU6IGZ1bmN0aW9uIGh5ZHJhdGUoaWRzKSB7XG4gICAgICBpZHMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGNhY2hlLmluc2VydGVkW2tleV0gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBmbHVzaDogZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgICBjYWNoZS5yZWdpc3RlcmVkID0ge307XG4gICAgICBjYWNoZS5pbnNlcnRlZCA9IHt9O1xuICAgICAgY2FjaGUuc2hlZXQuZmx1c2goKTtcbiAgICB9LFxuICAgIHNoZWV0OiBjYWNoZS5zaGVldCxcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgZ2V0UmVnaXN0ZXJlZFN0eWxlczogZ2V0UmVnaXN0ZXJlZFN0eWxlcy5iaW5kKG51bGwsIGNhY2hlLnJlZ2lzdGVyZWQpLFxuICAgIG1lcmdlOiBtZXJnZS5iaW5kKG51bGwsIGNhY2hlLnJlZ2lzdGVyZWQsIGNzcylcbiAgfTtcbn07XG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb24gY2xhc3NuYW1lcyhhcmdzKSB7XG4gIHZhciBjbHMgPSAnJztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoYXJnID09IG51bGwpIGNvbnRpbnVlO1xuICAgIHZhciB0b0FkZCA9IHZvaWQgMDtcblxuICAgIHN3aXRjaCAodHlwZW9mIGFyZykge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgdG9BZGQgPSBjbGFzc25hbWVzKGFyZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gYXJnKSB7XG4gICAgICAgICAgICAgIGlmIChhcmdba10gJiYgaykge1xuICAgICAgICAgICAgICAgIHRvQWRkICYmICh0b0FkZCArPSAnICcpO1xuICAgICAgICAgICAgICAgIHRvQWRkICs9IGs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgdG9BZGQgPSBhcmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG9BZGQpIHtcbiAgICAgIGNscyAmJiAoY2xzICs9ICcgJyk7XG4gICAgICBjbHMgKz0gdG9BZGQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNscztcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZUVtb3Rpb24gYXMgZGVmYXVsdCB9O1xuIiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBjcmVhdGVFbW90aW9uIGZyb20gJ0BlbW90aW9uL2Nzcy9jcmVhdGUtaW5zdGFuY2UnO1xuaW1wb3J0IHsgZXVpU3R5bGlzUHJlZml4ZXIgfSBmcm9tICcuL3ByZWZpeGVyJztcblxuLyoqXG4gKiBUaGlzIGN1c3RvbSBpbnN0YW5jZSBpcyBuZWVkZWQgZm9yIGludGVybmFsIEVVSSBjb21wb25lbnRzIHRvIGNhbGxcbiAqIGBAZW1vdGlvbi9jc3NgIHdpdGggRVVJJ3MgY3VzdG9tIHByZWZpeGVyIHBsdWdpblxuICogQHNlZSBodHRwczovL2Vtb3Rpb24uc2gvZG9jcy9AZW1vdGlvbi9jc3MjY3VzdG9tLWluc3RhbmNlc1xuICpcbiAqIE5PVEU6IFVzYWdlIGlzIGN1cnJlbnRseSBiZWluZyBiZXRhIHRlc3RlZCBpbnRlcm5hbGx5LFxuICogYW5kIGlzIG5vdCB5ZXQgaW50ZW5kZWQgdG8gYmUgYSBwdWJsaWMgZXhwb3J0XG4gKi9cbnZhciBfY3JlYXRlRW1vdGlvbiA9IGNyZWF0ZUVtb3Rpb24oe1xuICAgIGtleTogJ2NzcycsXG4gICAgc3R5bGlzUGx1Z2luczogW2V1aVN0eWxpc1ByZWZpeGVyXSxcbiAgICBzcGVlZHk6IGZhbHNlXG4gIH0pLFxuICBjc3MgPSBfY3JlYXRlRW1vdGlvbi5jc3MsXG4gIGN4ID0gX2NyZWF0ZUVtb3Rpb24uY3gsXG4gIGNhY2hlID0gX2NyZWF0ZUVtb3Rpb24uY2FjaGU7XG5leHBvcnQgeyBjc3MsIGN4LCBjYWNoZSB9OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVGhlbWVQcm92aWRlciB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi9ob29rcyc7XG5cbi8qKlxuICogQHNlZSBodHRwczovL2Vtb3Rpb24uc2gvZG9jcy90aGVtaW5nXG4gKiBUaGlzIEVtb3Rpb24gdGhlbWUgcHJvdmlkZXIgaXMgYWRkZWQgZm9yICpjb25zdW1lciB1c2FnZSogJiBjb252ZW5pZW5jZSBvbmx5LlxuICpcbiAqIEVVSSBzaG91bGQgc3RpY2sgdG8gdXNpbmcgb3VyIG93biBjb250ZXh0L2B1c2VFdWlUaGVtZWAgaW50ZXJuYWxseVxuICogaW5zdGVhZCBvZiBFbW90aW9uJ3Mgc2hvcnRoYW5kIGBjc3M9e3RoZW1lID0+IHt9fWAgQVBJLiBJZiBjb25zdW1lcnNcbiAqIHNldCB0aGVpciBvd24gdGhlbWUgdmlhIDxUaGVtZVByb3ZpZGVyPjsgRVVJJ3Mgc3R5bGVzIHNob3VsZCBjb250aW51ZVxuICogd29ya2luZyBhcy1pcy5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRW1vdGlvblRoZW1lUHJvdmlkZXIgPSBmdW5jdGlvbiBFdWlFbW90aW9uVGhlbWVQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChUaGVtZVByb3ZpZGVyLCB7XG4gICAgdGhlbWU6IGV1aVRoZW1lQ29udGV4dFxuICB9LCBjaGlsZHJlbik7XG59OyIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVVwZGF0ZUVmZmVjdCB9IGZyb20gJy4uL2hvb2tzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi9ob29rcyc7XG5pbXBvcnQgeyBlbWl0RXVpUHJvdmlkZXJXYXJuaW5nIH0gZnJvbSAnLi93YXJuaW5nJztcblxuLy8gVHlwaWNhbGx5IGFuIG9iamVjdCBvZiBzZXJpYWxpemVkIGNzc2BgIHN0eWxlcywgYnV0IGNhbiBoYXZlIGFueSBhbW91bnQgb2YgbmVzdGluZywgc28gaXQncyBub3Qgd29ydGggaXQgdG8gdHJ5IGFuZCBzdHJpY3RseSB0eXBlIHRoaXNcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRoZW1lTWVtb2l6ZWRTdHlsZXNDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQobmV3IFdlYWtNYXAoKSk7XG5leHBvcnQgdmFyIEV1aVRoZW1lTWVtb2l6ZWRTdHlsZXNQcm92aWRlciA9IGZ1bmN0aW9uIEV1aVRoZW1lTWVtb2l6ZWRTdHlsZXNQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIC8vIE5vdGU6IHdlICpzaG91bGQgbm90KiB1c2UgYHVzZU1lbW9gIGluc3RlYWQgb2YgYHVzZVN0YXRlYCBoZXJlLCBhcyB1c2VNZW1vIGlzIG5vdCBndWFyYW50ZWVkXG4gIC8vIGFuZCBpdHMgY2FjaGUgY2FuIGdldCB0aHJvd24gYXdheSBieSBSZWFjdCAoaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZU1lbW8jY2F2ZWF0cylcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG5ldyBXZWFrTWFwKCkpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGNvbXBvbmVudFN0eWxlcyA9IF91c2VTdGF0ZTJbMF0sXG4gICAgcmVyZW5kZXJTdHlsZXMgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIC8vIE9uIHRoZW1lIHVwZGF0ZSwgd2lwZSB0aGUgbWFwLCB3aGljaCBjYXVzZXMgdGhlIGJlbG93IGhvb2sgdG8gcmVjb21wdXRlIGFsbCBzdHlsZXNcbiAgdmFyIF91c2VFdWlUaGVtZSA9IHVzZUV1aVRoZW1lKCksXG4gICAgZXVpVGhlbWUgPSBfdXNlRXVpVGhlbWUuZXVpVGhlbWU7XG4gIHVzZVVwZGF0ZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmVyZW5kZXJTdHlsZXMobmV3IFdlYWtNYXAoKSk7XG4gIH0sIFtldWlUaGVtZV0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUaGVtZU1lbW9pemVkU3R5bGVzQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb21wb25lbnRTdHlsZXNcbiAgfSwgY2hpbGRyZW4pO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCB1dGlsIHByaW1hcmlseSByZXNwb25zaWJsZSBmb3IgZ2V0dGluZyB0aGUgbWVtb2l6ZWQgc3R5bGVzIChpZiB0aGV5IGV4aXN0KVxuICogYW5kIGlmIG5vdCwgZ2VuZXJhdGluZyBhbmQgc2V0dGluZyB0aGUgc3R5bGVzLiBEUlllZCBvdXQgdG8gZmFjaWxpdGF0ZSB1c2FnZVxuICogYmV0d2VlbiBib3RoIGhvb2svZnVuY3Rpb24gY29tcG9uZW50cyBhbmQgSE9DL2NsYXNzIGNvbXBvbmVudHNcbiAqL1xudmFyIGdldE1lbW9pemVkU3R5bGVzID0gZnVuY3Rpb24gZ2V0TWVtb2l6ZWRTdHlsZXMoc3R5bGVzR2VuZXJhdG9yLCBzdHlsZXNNYXAsIGV1aVRoZW1lQ29udGV4dCkge1xuICBpZiAoIXN0eWxlc0dlbmVyYXRvci5uYW1lKSB7XG4gICAgZW1pdEV1aVByb3ZpZGVyV2FybmluZygnU3R5bGVzIGFyZSBtZW1vaXplZCBwZXIgZnVuY3Rpb24uIFlvdXIgc3R5bGUgZnVuY3Rpb25zIG11c3QgYmUgc3RhdGljYWxseSBkZWZpbmVkIGluIG9yZGVyIHRvIG5vdCBjcmVhdGUgYSBuZXcgbWFwIGVudHJ5IGV2ZXJ5IHJlcmVuZGVyLicpO1xuICB9XG4gIHZhciBleGlzdGluZ1N0eWxlcyA9IHN0eWxlc01hcC5nZXQoc3R5bGVzR2VuZXJhdG9yKTtcbiAgaWYgKGV4aXN0aW5nU3R5bGVzKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nU3R5bGVzO1xuICB9IGVsc2Uge1xuICAgIHZhciBnZW5lcmF0ZWRTdHlsZXMgPSBzdHlsZXNHZW5lcmF0b3IoZXVpVGhlbWVDb250ZXh0KTtcbiAgICBzdHlsZXNNYXAuc2V0KHN0eWxlc0dlbmVyYXRvciwgZ2VuZXJhdGVkU3R5bGVzKTtcbiAgICByZXR1cm4gZ2VuZXJhdGVkU3R5bGVzO1xuICB9XG59O1xuXG4vKipcbiAqIEhvb2sgdGhhdCBtZW1vaXplcyB0aGUgcmV0dXJuZWQgdmFsdWVzIG9mIGNvbXBvbmVudHMgc3R5bGUgZm5zL2dlbmVyYXRvcnNcbiAqIHBlci10aGVtZVxuICovXG5leHBvcnQgdmFyIHVzZUV1aU1lbW9pemVkU3R5bGVzID0gZnVuY3Rpb24gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoc3R5bGVzR2VuZXJhdG9yKSB7XG4gIHZhciBtZW1vaXplZFN0eWxlcyA9IHVzZUNvbnRleHQoRXVpVGhlbWVNZW1vaXplZFN0eWxlc0NvbnRleHQpO1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIG1lbW9pemVkQ29tcG9uZW50U3R5bGVzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldE1lbW9pemVkU3R5bGVzKHN0eWxlc0dlbmVyYXRvciwgbWVtb2l6ZWRTdHlsZXMsIGV1aVRoZW1lQ29udGV4dCk7XG4gIH0sIFtzdHlsZXNHZW5lcmF0b3IsIG1lbW9pemVkU3R5bGVzLCBldWlUaGVtZUNvbnRleHRdKTtcbiAgcmV0dXJuIG1lbW9pemVkQ29tcG9uZW50U3R5bGVzO1xufTtcblxuLyoqXG4gKiBIT0MgZm9yIGNsYXNzIGNvbXBvbmVudHNcbiAqIFN5bnRheCBpcyBtb3N0bHkgY29waWVkIGZyb20gd2l0aEV1aVRoZW1lIEhPQ1xuICovXG5cbmV4cG9ydCB2YXIgd2l0aEV1aVN0eWxlc01lbW9pemVyID0gZnVuY3Rpb24gd2l0aEV1aVN0eWxlc01lbW9pemVyKENvbXBvbmVudCkge1xuICB2YXIgY29tcG9uZW50TmFtZSA9IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50V2l0aFN0eWxlc01lbW9pemVyJztcbiAgdmFyIFJlbmRlciA9IGZ1bmN0aW9uIFJlbmRlcihwcm9wcywgcmVmKSB7XG4gICAgdmFyIG1lbW9pemVkU3R5bGVzID0gdXNlQ29udGV4dChFdWlUaGVtZU1lbW9pemVkU3R5bGVzQ29udGV4dCk7XG4gICAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gICAgdmFyIHN0eWxlc01lbW9pemVyID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHN0eWxlc0dlbmVyYXRvcikge1xuICAgICAgcmV0dXJuIGdldE1lbW9pemVkU3R5bGVzKHN0eWxlc0dlbmVyYXRvciwgbWVtb2l6ZWRTdHlsZXMsIGV1aVRoZW1lQ29udGV4dCk7XG4gICAgfSwgW21lbW9pemVkU3R5bGVzLCBldWlUaGVtZUNvbnRleHRdKTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIHN0eWxlc01lbW9pemVyOiBzdHlsZXNNZW1vaXplcixcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMpKTtcbiAgfTtcbiAgdmFyIFdpdGhFdWlTdHlsZXNNZW1vaXplciA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKFJlbmRlcik7XG4gIFdpdGhFdWlTdHlsZXNNZW1vaXplci5kaXNwbGF5TmFtZSA9IGNvbXBvbmVudE5hbWU7XG4gIHJldHVybiBXaXRoRXVpU3R5bGVzTWVtb2l6ZXI7XG59O1xuXG4vKipcbiAqIFJlbmRlciBwcm9wIGFsdGVybmF0aXZlIGZvciBjb21wbGV4IGNsYXNzIGNvbXBvbmVudHNcbiAqIE1vc3QgdXNlZnVsIGZvciBzY2VuYXJpb3Mgd2hlcmUgYSBIT0MgbWF5IGludGVyZmVyZSB3aXRoIHR5cGluZ1xuICovXG5leHBvcnQgdmFyIFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciA9IGZ1bmN0aW9uIFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplcihfcmVmMikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbjtcbiAgdmFyIG1lbW9pemVkU3R5bGVzID0gdXNlQ29udGV4dChFdWlUaGVtZU1lbW9pemVkU3R5bGVzQ29udGV4dCk7XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzTWVtb2l6ZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoc3R5bGVzR2VuZXJhdG9yKSB7XG4gICAgcmV0dXJuIGdldE1lbW9pemVkU3R5bGVzKHN0eWxlc0dlbmVyYXRvciwgbWVtb2l6ZWRTdHlsZXMsIGV1aVRoZW1lQ29udGV4dCk7XG4gIH0sIFttZW1vaXplZFN0eWxlcywgZXVpVGhlbWVDb250ZXh0XSk7XG4gIHJldHVybiBjaGlsZHJlbihzdHlsZXNNZW1vaXplcik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgdXNlVXBkYXRlRWZmZWN0ID0gZnVuY3Rpb24gdXNlVXBkYXRlRWZmZWN0KGVmZmVjdCwgZGVwcykge1xuICAvLyB1c2UgcmVmIGluc3RlYWQgb2YgYSBzdGF0ZSB0byBhdm9pZCBjYXVzaW5nIGFuIHVubmVjZXNzYXJ5IHJlLXJlbmRlclxuICB2YXIgaGFzTW91bnRlZCA9IHVzZVJlZihmYWxzZSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgLy8gZG9uJ3QgaW52b2tlIHRoZSBlZmZlY3Qgb24gaW5pdGlhbCBtb3VudFxuICAgIGlmIChoYXNNb3VudGVkLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBlZmZlY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzTW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIGRlcHMpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG4vKlxuICogRm9yIHVzZSB3aGVuIGEgY29tcG9uZW50IG5lZWRzIHRvIHNldCBgcmVmYCBvYmplY3RzIGZyb20gbXVsdGlwbGUgc291cmNlcy5cbiAqIEZvciBpbnN0YW5jZSwgaWYgYSBjb21wb25lbnQgYWNjZXB0cyBhIGByZWZgIHByb3AgYnV0IGFsc28gbmVlZHMgaXRzIG93blxuICogbG9jYWwgcmVmZXJlbmNlIGZvciBjYWxjdWxhdGlvbnMsIGV0Yy5cbiAqIFRoaXMgaG9vayBoYW5kbGVzIHNldHRpbmcgbXVsdGlwbGUgYHJlZmBzIG9mIGFueSBhdmFpbGFibGUgYHJlZmAgdHlwZVxuICogaW4gYSBzaW5nbGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB2YXIgdXNlQ29tYmluZWRSZWZzID0gZnVuY3Rpb24gdXNlQ29tYmluZWRSZWZzKHJlZnMpIHtcbiAgcmV0dXJuIHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIHNldE11bHRpcGxlUmVmcyhyZWZzLCBub2RlKTtcbiAgfSwgW3JlZnNdKTtcbn07XG5cbi8qKlxuICogTm9uLWhvb2sgdXRpbCBmb3Igc2V0dGluZyBtdWx0aXBsZSByZWZzL3JlZiB0eXBlcy5cbiAqIFVzZWZ1bCBmb3Igbm9uLWZ1bmN0aW9uYWwgY29tcG9uZW50c1xuICovXG5leHBvcnQgdmFyIHNldE11bHRpcGxlUmVmcyA9IGZ1bmN0aW9uIHNldE11bHRpcGxlUmVmcyhyZWZzLCBub2RlKSB7XG4gIHJlZnMuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgaWYgKCFyZWYpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVmKG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWYuY3VycmVudCA9IG5vZGU7XG4gICAgfVxuICB9KTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vdGhlbWUnO1xuaW1wb3J0IHsgdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQgfSBmcm9tICcuL2N1cnJlbnRfYnJlYWtwb2ludF9ob29rJztcblxuLyoqXG4gKiBHaXZlbiBhbiBhcnJheSBvZiBicmVha3BvaW50IGtleXMsIHRoaXMgaG9vayByZXR1cm5zIHRydWUgb3IgZmFsc2VcbiAqIGlmIHRoZSBicmVha3BvaW50IHNpemUgb2YgdGhlIGN1cnJlbnQgd2luZG93IHdpZHRoIGZhbGxzIHdpdGhpblxuICogYW55IG9mIHRoZSBuYW1lZCBicmVha3BvaW50cy5cbiAqXG4gKiBAcGFyYW0ge0V1aVRoZW1lQnJlYWtwb2ludFtdfSBzaXplcyBBbiBhcnJheSBvZiBuYW1lZCBFVUkgYnJlYWtwb2ludHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSZXNwb25zaXZlIFNvbWUgY29tcG9uZW50cyBoYXZlIHRoZSBvcHRpb24gdG8gdHVybiBvZmYgcmVzcG9uc2l2ZSBiZWhhdmlvci5cbiAqICAgU2luY2UgaG9va3MgY2FuJ3QgYmUgY2FsbGVkIGNvbmRpdGlvbmFsbHksIGl0J3MgZWFzaWVyIHRvIHBhc3MgdGhlIGNvbmRpdGlvbiBpbnRvIHRoZSBob29rXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgY3VycmVudCBicmVha3BvaW50IG5hbWUgaXMgaW5jbHVkZWQgaW4gYHNpemVzYFxuICovXG5leHBvcnQgdmFyIHVzZUlzV2l0aGluQnJlYWtwb2ludHMgPSBmdW5jdGlvbiB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzKHNpemVzKSB7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IHVzZUN1cnJlbnRFdWlCcmVha3BvaW50KCk7XG4gIHJldHVybiBjdXJyZW50QnJlYWtwb2ludCAmJiBpc1Jlc3BvbnNpdmUgPyBzaXplcy5pbmNsdWRlcyhjdXJyZW50QnJlYWtwb2ludCkgOiBmYWxzZTtcbn07XG5cbi8qKlxuICogR2l2ZW4gYSBtYXggYnJlYWtwb2ludCBrZXksIHRoaXMgaG9vayByZXR1cm5zIHRydWUgaWYgdGhlIGJyZWFrcG9pbnQgc2l6ZVxuICogb2YgdGhlIGN1cnJlbnQgd2luZG93IHdpZHRoIGZhbGxzIHdpdGhpbiB0aGUgbWF4IGJyZWFrcG9pbnQgb3IgYW55IGJlbG93LFxuICogYW5kIGZhbHNlIG90aGVyd2lzZVxuICpcbiAqIEBwYXJhbSB7RXVpVGhlbWVCcmVha3BvaW50fSBtYXggVGhlIG5hbWVkIG1heCBicmVha3BvaW50IHRvIGNoZWNrIGFnYWluc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBXaWxsIHJldHVybiBgZmFsc2VgIGlmIGl0IGNhbid0IGZpbmQgYSB2YWx1ZSBmb3IgdGhlIGBtYXhgIGJyZWFrcG9pbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlzV2l0aGluTWF4QnJlYWtwb2ludChtYXgpIHtcbiAgdmFyIF91c2VFdWlUaGVtZSA9IHVzZUV1aVRoZW1lKCksXG4gICAgYnJlYWtwb2ludHMgPSBfdXNlRXVpVGhlbWUuZXVpVGhlbWUuYnJlYWtwb2ludDtcbiAgdmFyIGN1cnJlbnRCcmVha3BvaW50ID0gdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQoKTtcbiAgaWYgKGN1cnJlbnRCcmVha3BvaW50ID09IG51bGwgfHwgYnJlYWtwb2ludHNbbWF4XSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBicmVha3BvaW50c1tjdXJyZW50QnJlYWtwb2ludF0gPD0gYnJlYWtwb2ludHNbbWF4XTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIG1pbiBicmVha3BvaW50IGtleSwgdGhpcyBob29rIHJldHVybnMgdHJ1ZSBpZiB0aGUgYnJlYWtwb2ludCBzaXplXG4gKiBvZiB0aGUgY3VycmVudCB3aW5kb3cgd2lkdGggZmFsbHMgd2l0aGluIHRoZSBtaW4gYnJlYWtwb2ludCBvciBhbnkgYWJvdmUsXG4gKiBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG4gKlxuICogQHBhcmFtIHtFdWlUaGVtZUJyZWFrcG9pbnR9IG1pbiBUaGUgbmFtZWQgbWluIGJyZWFrcG9pbnQgdG8gY2hlY2sgYWdhaW5zdFxuICogQHJldHVybnMge2Jvb2xlYW59IFdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgaXQgY2FuJ3QgZmluZCBhIHZhbHVlIGZvciB0aGUgYG1pbmAgYnJlYWtwb2ludFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSXNXaXRoaW5NaW5CcmVha3BvaW50KG1pbikge1xuICB2YXIgX3VzZUV1aVRoZW1lMiA9IHVzZUV1aVRoZW1lKCksXG4gICAgYnJlYWtwb2ludHMgPSBfdXNlRXVpVGhlbWUyLmV1aVRoZW1lLmJyZWFrcG9pbnQ7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IHVzZUN1cnJlbnRFdWlCcmVha3BvaW50KCk7XG4gIGlmIChjdXJyZW50QnJlYWtwb2ludCA9PSBudWxsIHx8IGJyZWFrcG9pbnRzW21pbl0gPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gYnJlYWtwb2ludHNbY3VycmVudEJyZWFrcG9pbnRdID49IGJyZWFrcG9pbnRzW21pbl07XG59IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgdGVtcG9yYXJ5IENhbnZhcyBlbGVtZW50IGZvciBtYW5pcHVsYXRpbmcgdGV4dCAmIGRldGVybWluaW5nIHRleHQgd2lkdGguXG4gKlxuICogVG8gYWNjdXJhdGVseSBtZWFzdXJlIHRleHQsIGNhbnZhcyByZW5kZXJpbmcgcmVxdWlyZXMgZWl0aGVyIGEgY29udGFpbmVyIHRvXG4gKiBjb21wdXRlL2Rlcml2ZSBmb250IHN0eWxlcyBmcm9tLCBvciBhIHN0YXRpYyBmb250IHN0cmluZyAodXNlZnVsIGZvciB1c2FnZVxuICogb3V0c2lkZSB0aGUgRE9NKS4gUGFydGljdWxhciBjYXJlIHNob3VsZCBiZSBhcHBsaWVkIHdoZW4gZmFsbGJhY2sgZm9udHMgYXJlXG4gKiB1c2VkLCBhcyBtb3JlIGZhbGxiYWNrIGZvbnRzIGNhbiBsZWFkIHRvIGxlc3MgcHJlY2lzaW9uLlxuICpcbiAqIFBsZWFzZSBub3RlIHRoYXQgd2hpbGUgY2FudmFzIGlzIG1vcmUgc2lnbmlmaWNhbnRseSBtb3JlIHBlcmZvcm1hbnQgdGhhbiBET01cbiAqIG1lYXN1cmVtZW50LCB0aGVyZSBhcmUgc3VicGl4ZWwgdG8gc2luZ2xlIGRpZ2l0IHBpeGVsIGRpZmZlcmVuY2VzIGJldHdlZW5cbiAqIERPTSBhbmQgY2FudmFzIG1lYXN1cmVtZW50IGR1ZSB0byB0aGUgZGlmZmVyZW50IHJlbmRlcmluZyBlbmdpbmVzIHVzZWQuXG4gKi9cbmV4cG9ydCB2YXIgQ2FudmFzVGV4dFV0aWxzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ2FudmFzVGV4dFV0aWxzKF9yZWYpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHZhciBmb250ID0gX3JlZi5mb250LFxuICAgICAgY29udGFpbmVyID0gX3JlZi5jb250YWluZXI7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENhbnZhc1RleHRVdGlscyk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29udGV4dFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImN1cnJlbnRUZXh0XCIsICcnKTtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb21wdXRlRm9udEZyb21FbGVtZW50XCIsIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICB2YXIgY29tcHV0ZWRTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICAgIC8vIFRPRE86IGZvbnQtc3RyZXRjaCBpcyBub3QgaW5jbHVkZWQgZXZlbiB0aG91Z2ggaXQgcG90ZW50aWFsbHkgc2hvdWxkIGJlXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mb250I2NvbnN0aXR1ZW50X3Byb3BlcnRpZXNcbiAgICAgIC8vIEl0IGFwcGVhcnMgdG8gYmUgdW5zdXBwb3J0ZWQgYW5kL29yIGJyZWFrcyBmb250IGNvbXB1dGF0aW9uIGluIGNhbnZhc1xuICAgICAgcmV0dXJuIFsnZm9udC1zdHlsZScsICdmb250LXZhcmlhbnQnLCAnZm9udC13ZWlnaHQnLCAnZm9udC1zaXplJywgJ2ZvbnQtZmFtaWx5J10ubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgIHJldHVybiBjb21wdXRlZFN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApO1xuICAgICAgfSkuam9pbignICcpLnRyaW0oKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzZXRUZXh0VG9DaGVja1wiLCBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgX3RoaXMuY3VycmVudFRleHQgPSB0ZXh0O1xuICAgIH0pO1xuICAgIHRoaXMuY29udGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvLyBTZXQgdGhlIGNhbnZhcyBmb250IHRvIGVuc3VyZSB0ZXh0IHdpZHRoIGNhbGN1bGF0aW9ucyBhcmUgY29ycmVjdFxuICAgIGlmIChmb250KSB7XG4gICAgICB0aGlzLmNvbnRleHQuZm9udCA9IGZvbnQ7XG4gICAgfSBlbHNlIGlmIChjb250YWluZXIpIHtcbiAgICAgIHRoaXMuY29udGV4dC5mb250ID0gdGhpcy5jb21wdXRlRm9udEZyb21FbGVtZW50KGNvbnRhaW5lcik7XG4gICAgfVxuICB9XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoQ2FudmFzVGV4dFV0aWxzLCBbe1xuICAgIGtleTogXCJ0ZXh0V2lkdGhcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQodGhpcy5jdXJyZW50VGV4dCkud2lkdGg7XG4gICAgfVxuICB9XSk7XG59KCk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQ2xpcGJvYXJkIHRleHQgY2xlYW5pbmcgbG9naWNcbiAqL1xuXG4vLyBTcGVjaWFsIHZpc3VhbGx5IGhpZGRlbiB1bmljb2RlIGNoYXJhY3RlcnMgdGhhdCB3ZSB1c2UgdG8gbWFudWFsbHkgY2xlYW4gY29udGVudFxuLy8gYW5kIGZvcmNlIG91ciBvd24gbmV3bGluZXMvaG9yaXpvbnRhbCB0YWJzXG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDSEFSUyA9IHtcbiAgTkVXTElORTogJ1x1MjFCNScsXG4gIFRBQjogJ1x1MjFBNicsXG4gIC8vIFVzZSBtdWx0aXBsZSBjaGFyYWN0ZXJzIHRvIHJlZHVjZSB0aGUgY2hhbmNlcyBvZiBjb25zdW1lcnMgYWxzbyB1c2luZyB0aGVzZSBjaGFyYWN0ZXJzXG4gIFRBQlVMQVJfQ09OVEVOVF9CT1VORDogJ1x1RDgwMVx1REUwMlx1RDgwMVx1REUwMicsXG4gIE5PX0NPUFlfQk9VTkQ6ICdcdTI3MDRcdUQ4MDFcdURFMTcnXG59O1xuLy8gVGhpcyByZWdleCBmaW5kcyBhbGwgY29udGVudCBiZXR3ZWVuIHR3byBib3VuZHNcbnZhciBub0NvcHlCb3VuZHNSZWdleCA9IG5ldyBSZWdFeHAoXCJcIi5jb25jYXQoQ0hBUlMuTk9fQ09QWV9CT1VORCwgXCJbXlwiKS5jb25jYXQoQ0hBUlMuTk9fQ09QWV9CT1VORCwgXCJdKlwiKS5jb25jYXQoQ0hBUlMuTk9fQ09QWV9CT1VORCksICdncycpO1xudmFyIGhhc0NoYXJzVG9SZXBsYWNlID0gZnVuY3Rpb24gaGFzQ2hhcnNUb1JlcGxhY2UodGV4dCkge1xuICBmb3IgKHZhciBfaSA9IDAsIF9PYmplY3QkdmFsdWVzID0gT2JqZWN0LnZhbHVlcyhDSEFSUyk7IF9pIDwgX09iamVjdCR2YWx1ZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIGNoYXIgPSBfT2JqZWN0JHZhbHVlc1tfaV07XG4gICAgaWYgKHRleHQuaW5kZXhPZihjaGFyKSA+PSAwKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBTdHJpcCBhbGwgZXhpc3RpbmcgbmV3bGluZXMgYW5kIHJlcGxhY2Ugb3VyIHNwZWNpYWwgaGlkZGVuIGNoYXJhY3RlcnNcbi8vIHdpdGggdGhlIGRlc2lyZWQgc3BhY2luZyBuZWVkZWQgdG8gcGFzdGUgY2xlYW5seSBpbnRvIGEgc3ByZWFkc2hlZXRcbmV4cG9ydCB2YXIgb25UYWJ1bGFyQ29weSA9IGZ1bmN0aW9uIG9uVGFidWxhckNvcHkoZXZlbnQpIHtcbiAgdmFyIF93aW5kb3ckZ2V0U2VsZWN0aW9uO1xuICBpZiAoIWV2ZW50LmNsaXBib2FyZERhdGEpIHJldHVybjtcbiAgdmFyIHNlbGVjdGVkVGV4dCA9IChfd2luZG93JGdldFNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKSkgPT09IG51bGwgfHwgX3dpbmRvdyRnZXRTZWxlY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF93aW5kb3ckZ2V0U2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGlmICghc2VsZWN0ZWRUZXh0IHx8ICFoYXNDaGFyc1RvUmVwbGFjZShzZWxlY3RlZFRleHQpKSByZXR1cm47XG4gIHZhciBhbWVuZGVkVGV4dCA9IHNlbGVjdGVkVGV4dC5zcGxpdChDSEFSUy5UQUJVTEFSX0NPTlRFTlRfQk9VTkQpLm1hcChmdW5jdGlvbiAodGV4dCkge1xuICAgIHJldHVybiBoYXNDaGFyc1RvUmVwbGFjZSh0ZXh0KSA/IHRleHQucmVwbGFjZSgvXFxyP1xcbi9nLCAnJykgLy8gcmVtb3ZlIGFsbCBvdGhlciBuZXdsaW5lcyBnZW5lcmF0ZWQgYnkgY29udGVudCBvciBibG9jayBkaXNwbGF5XG4gICAgLnJlcGxhY2VBbGwoQ0hBUlMuTkVXTElORSwgJ1xcbicpIC8vIGluc2VydCBuZXdsaW5lIGZvciBlYWNoIHRhYmxlL2dyaWQgcm93XG4gICAgLnJlcGxhY2UoL1xcdC9nLCAnJykgLy8gcmVtb3ZlIHRhYnMgZ2VuZXJhdGVkIGJ5IGNvbnRlbnQgb3IgYXV0b21hdGljYWxseSBieSA8dGQ+IGVsZW1lbnRzXG4gICAgLnJlcGxhY2VBbGwoQ0hBUlMuVEFCLCBcIlxcdFwiKSAvLyBpbnNlcnQgaG9yaXpvbnRhbCB0YWIgZm9yIGVhY2ggdGFibGUvZ3JpZCBjZWxsXG4gICAgLnJlcGxhY2Uobm9Db3B5Qm91bmRzUmVnZXgsICcnKSAvLyByZW1vdmUgdGV4dCB0aGF0IHNob3VsZCBub3QgYmUgY29waWVkIChlLmcuIHNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zKVxuICAgIDogdGV4dDtcbiAgfSkuam9pbignJyk7XG4gIGV2ZW50LmNsaXBib2FyZERhdGEuc2V0RGF0YSgndGV4dC9wbGFpbicsIGFtZW5kZWRUZXh0KTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbn07XG5cbi8qKlxuICogSlNYIHV0aWxzIGZvciByZW5kZXJpbmcgdGhlIGhpZGRlbiBtYXJrZXIgY2hhcmFjdGVyc1xuICovXG5cbnZhciBWaXN1YWxseUhpZGUgPSBmdW5jdGlvbiBWaXN1YWxseUhpZGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAndHJ1ZScgOiBfcmVmJHR5cGU7XG4gIHJldHVybiAoXG4gICAgLy8gSGlkZXMgdGhlIGNoYXJhY3RlcnMgdG8gYm90aCBzaWdodGVkIHVzZXIgYW5kIHNjcmVlbiByZWFkZXJzXG4gICAgLy8gU2FkbHksIHdlIGNhbid0IHVzZSBgaGlkZGVuYCBhcyB0aGF0IGhpZGVzIHRoZSBjaGFycyBmcm9tIHRoZSBjbGlwYm9hcmQgYXMgd2VsbFxuICAgIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlTY3JlZW5SZWFkZXJPbmx5XCIsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBcImRhdGEtdGFidWxhci1jb3B5LW1hcmtlclwiOiB0eXBlXG4gICAgfSwgY2hpbGRyZW4pXG4gICk7XG59O1xuZXhwb3J0IHZhciB0YWJ1bGFyQ29weU1hcmtlcnMgPSB7XG4gIGhpZGRlblRhYjogX19fRW1vdGlvbkpTWChWaXN1YWxseUhpZGUsIHtcbiAgICB0eXBlOiBcInRhYlwiXG4gIH0sIENIQVJTLlRBQiksXG4gIGhpZGRlbk5ld2xpbmU6IF9fX0Vtb3Rpb25KU1goVmlzdWFsbHlIaWRlLCB7XG4gICAgdHlwZTogXCJuZXdsaW5lXCJcbiAgfSwgQ0hBUlMuTkVXTElORSksXG4gIGhpZGRlbldyYXBwZXJCb3VuZGFyeTogX19fRW1vdGlvbkpTWChWaXN1YWxseUhpZGUsIHtcbiAgICB0eXBlOiBcImJvdW5kYXJ5XCJcbiAgfSwgQ0hBUlMuVEFCVUxBUl9DT05URU5UX0JPVU5EKSxcbiAgaGlkZGVuTm9Db3B5Qm91bmRhcnk6IF9fX0Vtb3Rpb25KU1goVmlzdWFsbHlIaWRlLCB7XG4gICAgdHlwZTogXCJuby1jb3B5XCJcbiAgfSwgQ0hBUlMuTk9fQ09QWV9CT1VORClcbn07XG5cbi8qKlxuICogV3JhcHBlciBzZXR1cCBhcm91bmQgdGFibGUvZ3JpZCB0YWJ1bGFyIGNvbnRlbnQgd2Ugd2FudCB0byBvdmVycmlkZS9jbGVhbiB1cCBvbiBjb3B5XG4gKi9cblxuZXhwb3J0IHZhciBPdmVycmlkZUNvcGllZFRhYnVsYXJDb250ZW50ID0gZnVuY3Rpb24gT3ZlcnJpZGVDb3BpZWRUYWJ1bGFyQ29udGVudChfcmVmMikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbjtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBDaHJvbWUgYW5kIHdlYmtpdCBicm93c2VycyB3b3JrIHBlcmZlY3RseSB3aGVuIHBhc3NpbmcgYG9uVGFidWxhckNvcHlgIHRvIGEgUmVhY3RcbiAgICAvLyBgb25Db3B5YCBwcm9wLCBidXQgc2FkbHkgRmlyZWZveCBkb2VzIG5vdCBpZiBjb3B5aW5nIG1vcmUgdGhhbiBqdXN0IHRoZSB0YWJsZS9ncmlkXG4gICAgLy8gKGUuZy4gQ3RybCtBKS4gU28gd2UgaGF2ZSB0byBzZXQgdXAgYSBnbG9iYWwgd2luZG93IGV2ZW50IGxpc3RlbmVyXG4gICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvcHknLCBvblRhYnVsYXJDb3B5KTtcbiAgICAvLyBOb3RlOiBTaW5jZSBvbkNvcHkgaXMgc3RhdGljLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGR1cGxpY2F0ZVxuICAgIC8vIGV2ZW50IGxpc3RlbmVycyAtIGl0J3MgYXV0b21hdGljYWxseSBoYW5kbGVkIGJ5IHRoZSBicm93c2VyLiBTZWU6XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXIjTXVsdGlwbGVfaWRlbnRpY2FsX2V2ZW50X2xpc3RlbmVyc1xuICB9LCBbXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCB0YWJ1bGFyQ29weU1hcmtlcnMuaGlkZGVuV3JhcHBlckJvdW5kYXJ5LCBjaGlsZHJlbiwgdGFidWxhckNvcHlNYXJrZXJzLmhpZGRlbldyYXBwZXJCb3VuZGFyeSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIEEgRE9NIG5vZGUsIGEgc2VsZWN0b3Igc3RyaW5nICh3aGljaCB3aWxsIGJlIHBhc3NlZCB0b1xuICogYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoKWAgdG8gZmluZCB0aGUgRE9NIG5vZGUpLCBvciBhIGZ1bmN0aW9uIHRoYXRcbiAqIHJldHVybnMgYSBET00gbm9kZS5cbiAqL1xuXG5leHBvcnQgdmFyIGZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmID0gZnVuY3Rpb24gZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYoZWxlbWVudFRhcmdldCkge1xuICB2YXIgbm9kZSA9IGVsZW1lbnRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IGVsZW1lbnRUYXJnZXQgOiBudWxsO1xuICBpZiAodHlwZW9mIGVsZW1lbnRUYXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudFRhcmdldCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnRUYXJnZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBub2RlID0gZWxlbWVudFRhcmdldCgpO1xuICB9XG4gIHJldHVybiBub2RlO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuZXhwb3J0IHZhciBhbHdheXMgPSBmdW5jdGlvbiBhbHdheXMoX3ZhbHVlKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbmV4cG9ydCB2YXIgbmV2ZXIgPSBmdW5jdGlvbiBuZXZlcihfdmFsdWUpIHtcbiAgcmV0dXJuIGZhbHNlO1xufTtcbmV4cG9ydCB2YXIgaXNVbmRlZmluZWQgPSBmdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDtcbn07XG5leHBvcnQgdmFyIGlzTnVsbCA9IGZ1bmN0aW9uIGlzTnVsbCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG59O1xuZXhwb3J0IHZhciBpc05pbCA9IGZ1bmN0aW9uIGlzTmlsKHZhbHVlKSB7XG4gIHJldHVybiBpc1VuZGVmaW5lZCh2YWx1ZSkgfHwgaXNOdWxsKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzTW9tZW50ID0gZnVuY3Rpb24gaXNNb21lbnQodmFsdWUpIHtcbiAgcmV0dXJuIG1vbWVudC5pc01vbWVudCh2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc0RhdGUgPSBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmV0dXJuIG1vbWVudC5pc0RhdGUodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNEYXRlTGlrZSA9IGZ1bmN0aW9uIGlzRGF0ZUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIGlzTW9tZW50KHZhbHVlKSB8fCBpc0RhdGUodmFsdWUpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IF9pc0Z1bmN0aW9uIGZyb20gJ2xvZGFzaC9pc0Z1bmN0aW9uJztcbmltcG9ydCBfaXNBcnJheSBmcm9tICdsb2Rhc2gvaXNBcnJheSc7XG5pbXBvcnQgX2lzU3RyaW5nIGZyb20gJ2xvZGFzaC9pc1N0cmluZyc7XG5pbXBvcnQgX2lzQm9vbGVhbiBmcm9tICdsb2Rhc2gvaXNCb29sZWFuJztcbmltcG9ydCBfaXNOdW1iZXIgZnJvbSAnbG9kYXNoL2lzTnVtYmVyJztcbmltcG9ydCBfaXNOYU4gZnJvbSAnbG9kYXNoL2lzTmFOJztcbmltcG9ydCBfaXNPYmplY3QgZnJvbSAnbG9kYXNoL2lzT2JqZWN0JztcblxuLy8gd3JhcCB0aGUgbG9kYXNoIGZ1bmN0aW9ucyB0byBhdm9pZCBoYXZpbmcgbG9kYXNoJ3MgVFMgdHlwZSBkZWZpbml0aW9uIGZyb20gYmVpbmdcbi8vIGV4cG9ydGVkLCB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCB0aGUgbG9kYXNoIG5hbWVzcGFjZSBpZiBvdGhlciB2ZXJzaW9ucyBhcmUgdXNlZFxuXG5leHBvcnQgdmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBfaXNGdW5jdGlvbih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gX2lzQXJyYXkodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNTdHJpbmcgPSBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gX2lzU3RyaW5nKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzQm9vbGVhbiA9IGZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICByZXR1cm4gX2lzQm9vbGVhbih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc051bWJlciA9IGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiBfaXNOdW1iZXIodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNOYU4gPSBmdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICByZXR1cm4gX2lzTmFOKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIF9pc09iamVjdCh2YWx1ZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG5leHBvcnQgdmFyIGZvcm1hdEJvb2xlYW4gPSBmdW5jdGlvbiBmb3JtYXRCb29sZWFuKHZhbHVlKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBfcmVmJHllcyA9IF9yZWYueWVzLFxuICAgIHllcyA9IF9yZWYkeWVzID09PSB2b2lkIDAgPyAnWWVzJyA6IF9yZWYkeWVzLFxuICAgIF9yZWYkbm8gPSBfcmVmLm5vLFxuICAgIG5vID0gX3JlZiRubyA9PT0gdm9pZCAwID8gJ05vJyA6IF9yZWYkbm8sXG4gICAgX3JlZiRuaWwgPSBfcmVmLm5pbCxcbiAgICBuaWwgPSBfcmVmJG5pbCA9PT0gdm9pZCAwID8gJycgOiBfcmVmJG5pbDtcbiAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgIHJldHVybiBuaWw7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID8geWVzIDogbm87XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGlzTmlsLCBpc0Z1bmN0aW9uLCBpc1N0cmluZyB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG52YXIgY2FsZW5kYXIgPSBmdW5jdGlvbiBjYWxlbmRhcih2YWx1ZSkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhciByZWZUaW1lID0gb3B0aW9ucy5yZWZUaW1lO1xuICByZXR1cm4gbW9tZW50KHZhbHVlKS5jYWxlbmRhcihyZWZUaW1lLCBvcHRpb25zKTtcbn07XG5leHBvcnQgdmFyIGRhdGVGb3JtYXRBbGlhc2VzID0ge1xuICBkYXRlOiAnRCBNTU0gWVlZWScsXG4gIGxvbmdEYXRlOiAnREQgTU1NTSBZWVlZJyxcbiAgc2hvcnREYXRlOiAnRCBNTU0gWVknLFxuICBkYXRlVGltZTogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICBsb25nRGF0ZVRpbWU6ICdERCBNTU1NIFlZWVkgSEg6bW06c3MnLFxuICBzaG9ydERhdGVUaW1lOiAnRCBNTU0gWVkgSEg6bW0nLFxuICBkb2JTaG9ydDogJ0RvIE1NTSBZWScsXG4gIGRvYkxvbmc6ICdEbyBNTU1NIFlZWVknLFxuICBpc284NjAxOiAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaJyxcbiAgY2FsZW5kYXI6IGNhbGVuZGFyLFxuICBjYWxlbmRhckRhdGVUaW1lOiBmdW5jdGlvbiBjYWxlbmRhckRhdGVUaW1lKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNhbGVuZGFyKHZhbHVlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIEg6bW1BJyxcbiAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIEg6bW1BJyxcbiAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIEg6bW1BJyxcbiAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBIOm1tQScsXG4gICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gSDptbUEnLFxuICAgICAgc2FtZUVsc2U6ICdEbyBNTU0gWVlZWSBbYXRdIEg6bW1BJ1xuICAgIH0sIG9wdGlvbnMpKTtcbiAgfSxcbiAgY2FsZW5kYXJEYXRlOiBmdW5jdGlvbiBjYWxlbmRhckRhdGUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY2FsZW5kYXIodmFsdWUsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgc2FtZURheTogJ1tUb2RheV0nLFxuICAgICAgbmV4dERheTogJ1tUb21vcnJvd10nLFxuICAgICAgbmV4dFdlZWs6ICdkZGRkJyxcbiAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5XScsXG4gICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkJyxcbiAgICAgIHNhbWVFbHNlOiAnRG8gTU1NIFlZWVknXG4gICAgfSwgb3B0aW9ucykpO1xuICB9XG59O1xuZnVuY3Rpb24gaXNTdHJpbmdBRGF0ZUZvcm1hdCh4KSB7XG4gIHJldHVybiBkYXRlRm9ybWF0QWxpYXNlcy5oYXNPd25Qcm9wZXJ0eSh4KTtcbn1cbmZ1bmN0aW9uIGluc3RhbmNlT2ZGb3JtYXREYXRlQ29uZmlnKHgpIHtcbiAgcmV0dXJuIF90eXBlb2YoeCkgPT09ICdvYmplY3QnICYmICh4Lmhhc093blByb3BlcnR5KCdmb3JtYXQnKSB8fCB4Lmhhc093blByb3BlcnR5KCduaWwnKSB8fCB4Lmhhc093blByb3BlcnR5KCdvcHRpb25zJykpO1xufVxuZXhwb3J0IHZhciBmb3JtYXREYXRlID0gZnVuY3Rpb24gZm9ybWF0RGF0ZSh2YWx1ZSkge1xuICB2YXIgZGF0ZUZvcm1hdEtleU9yQ29uZmlnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnZGF0ZVRpbWUnO1xuICBpZiAoaXNTdHJpbmcoZGF0ZUZvcm1hdEtleU9yQ29uZmlnKSkge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgdmFyIGRhdGVGb3JtYXRTdHJPckZ1bmMgPSBpc1N0cmluZ0FEYXRlRm9ybWF0KGRhdGVGb3JtYXRLZXlPckNvbmZpZykgPyBkYXRlRm9ybWF0QWxpYXNlc1tkYXRlRm9ybWF0S2V5T3JDb25maWddIDogZGF0ZUZvcm1hdEtleU9yQ29uZmlnO1xuICAgIGlmIChpc0Z1bmN0aW9uKGRhdGVGb3JtYXRTdHJPckZ1bmMpKSB7XG4gICAgICByZXR1cm4gZGF0ZUZvcm1hdFN0ck9yRnVuYyh2YWx1ZSwge30pO1xuICAgIH1cbiAgICBpZiAoaXNTdHJpbmcoZGF0ZUZvcm1hdFN0ck9yRnVuYykpIHtcbiAgICAgIHJldHVybiBtb21lbnQodmFsdWUpLmZvcm1hdChkYXRlRm9ybWF0U3RyT3JGdW5jKTtcbiAgICB9XG4gIH1cbiAgaWYgKGluc3RhbmNlT2ZGb3JtYXREYXRlQ29uZmlnKGRhdGVGb3JtYXRLZXlPckNvbmZpZykpIHtcbiAgICB2YXIgX2RhdGVGb3JtYXRLZXlPckNvbmZpID0gZGF0ZUZvcm1hdEtleU9yQ29uZmlnLmZvcm1hdCxcbiAgICAgIGZvcm1hdCA9IF9kYXRlRm9ybWF0S2V5T3JDb25maSA9PT0gdm9pZCAwID8gJ2RhdGVUaW1lJyA6IF9kYXRlRm9ybWF0S2V5T3JDb25maSxcbiAgICAgIF9kYXRlRm9ybWF0S2V5T3JDb25maTIgPSBkYXRlRm9ybWF0S2V5T3JDb25maWcubmlsLFxuICAgICAgbmlsID0gX2RhdGVGb3JtYXRLZXlPckNvbmZpMiA9PT0gdm9pZCAwID8gJycgOiBfZGF0ZUZvcm1hdEtleU9yQ29uZmkyLFxuICAgICAgb3B0aW9ucyA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5vcHRpb25zO1xuICAgIHZhciBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdEFsaWFzZXNbZm9ybWF0XSB8fCBmb3JtYXQ7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIG5pbDtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oZGF0ZUZvcm1hdCkpIHtcbiAgICAgIHJldHVybiBkYXRlRm9ybWF0KHZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGlzU3RyaW5nKGRhdGVGb3JtYXQpKSB7XG4gICAgICByZXR1cm4gbW9tZW50KHZhbHVlKS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBmb3JtYXQgdmFsdWUgdXNpbmcgZGF0ZUZvcm1hdEtleU9yQ29uZmlnOiBcIi5jb25jYXQoZGF0ZUZvcm1hdEtleU9yQ29uZmlnKSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgbnVtZXJhbCBmcm9tICdudW1lcmFsJztcbmltcG9ydCB7IGlzTmlsLCBpc1N0cmluZyB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG52YXIgbnVtYmVyRm9ybWF0QWxpYXNlcyA9IHtcbiAgZGVjaW1hbDE6ICcwLDAuMCcsXG4gIGRlY2ltYWwyOiAnMCwwLjAwJyxcbiAgZGVjaW1hbDM6ICcwLDAuMDAwJyxcbiAgb3JkaW5hbDogJzBvJyxcbiAgaW50ZWdlcjogJzAsMCdcbn07XG5leHBvcnQgdmFyIGZvcm1hdE51bWJlciA9IGZ1bmN0aW9uIGZvcm1hdE51bWJlcih2YWx1ZSkge1xuICB2YXIgbnVtYmVyRm9ybWF0T3JDb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgZm9ybWF0O1xuICB2YXIgbmlsID0gJyc7XG4gIHZhciByb3VuZDtcbiAgaWYgKGlzU3RyaW5nKG51bWJlckZvcm1hdE9yQ29uZmlnKSkge1xuICAgIGZvcm1hdCA9IG51bWJlckZvcm1hdE9yQ29uZmlnO1xuICB9IGVsc2Uge1xuICAgIGZvcm1hdCA9IG51bWJlckZvcm1hdE9yQ29uZmlnLmZvcm1hdDtcbiAgICBuaWwgPSBudW1iZXJGb3JtYXRPckNvbmZpZy5uaWwgfHwgJyc7XG4gICAgcm91bmQgPSBudW1iZXJGb3JtYXRPckNvbmZpZy5yb3VuZDtcbiAgfVxuICBpZiAoIWZvcm1hdCkge1xuICAgIHJldHVybiBpc05pbCh2YWx1ZSkgPyBuaWwgOiB2YWx1ZS50b1N0cmluZygpO1xuICB9XG4gIHZhciByb3VuZGluZ0Z1bmMgPSByb3VuZCA/IE1hdGgucm91bmQgOiBNYXRoLmZsb29yO1xuICB2YXIgbnVtYmVyRm9ybWF0ID0gbnVtYmVyRm9ybWF0QWxpYXNlc1tmb3JtYXRdIHx8IGZvcm1hdDtcbiAgcmV0dXJuIGlzTmlsKHZhbHVlKSA/IG5pbCA6IG51bWVyYWwodmFsdWUpLmZvcm1hdChudW1iZXJGb3JtYXQsIHJvdW5kaW5nRnVuYyk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG5leHBvcnQgdmFyIGZvcm1hdFRleHQgPSBmdW5jdGlvbiBmb3JtYXRUZXh0KHZhbHVlKSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7XG4gICAgbmlsOiAnJ1xuICB9O1xuICByZXR1cm4gaXNOaWwodmFsdWUpID8gb3B0aW9ucy5uaWwgOiB2YWx1ZS50b1N0cmluZygpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgaXNOaWwsIGlzQXJyYXksIGlzQm9vbGVhbiwgaXNEYXRlLCBpc05hTiwgaXNOdW1iZXIsIGlzU3RyaW5nIH0gZnJvbSAnLi4vcHJlZGljYXRlJztcbmltcG9ydCB7IGZvcm1hdEJvb2xlYW4gfSBmcm9tICcuL2Zvcm1hdF9ib29sZWFuJztcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICcuL2Zvcm1hdF9kYXRlJztcbmltcG9ydCB7IGZvcm1hdE51bWJlciB9IGZyb20gJy4vZm9ybWF0X251bWJlcic7XG5pbXBvcnQgeyBmb3JtYXRUZXh0IH0gZnJvbSAnLi9mb3JtYXRfdGV4dCc7XG5leHBvcnQgdmFyIGZvcm1hdEF1dG8gPSBmdW5jdGlvbiBmb3JtYXRBdXRvKHZhbHVlKSB7XG4gIGlmIChpc05pbCh2YWx1ZSkgfHwgaXNOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0VGV4dCh2YWx1ZSk7XG4gIH1cbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSk7XG4gIH1cbiAgaWYgKGlzQm9vbGVhbih2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0Qm9vbGVhbih2YWx1ZSk7XG4gIH1cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xuICAgIHJldHVybiBmb3JtYXROdW1iZXIodmFsdWUpO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEF1dG8oaXRlbSk7XG4gICAgfSkuam9pbignLCAnKSA6IGZvcm1hdEF1dG8odmFsdWUpO1xuICB9XG5cbiAgLy8gVE9ETyBub3Qgc3VyZSBpZiB3ZSB3YW50IHRoYXQuLiB0aGUgKCspIGlzIHRoYXQgd2Ugc2hvdyBzb21ldGhpbmcsIHRoZSAoLSkgaXMgdGhhdCBpdCdzIHZlcnkgdGVjaG5pY2FsXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgUE9TSVRJT05TID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbnZhciByZWxhdGVkRGltZW5zaW9uID0ge1xuICB0b3A6ICdoZWlnaHQnLFxuICByaWdodDogJ3dpZHRoJyxcbiAgYm90dG9tOiAnaGVpZ2h0JyxcbiAgbGVmdDogJ3dpZHRoJ1xufTtcbnZhciBkaW1lbnNpb25Qb3NpdGlvbkF0dHJpYnV0ZSA9IHtcbiAgaGVpZ2h0OiAndG9wJyxcbiAgd2lkdGg6ICdsZWZ0J1xufTtcbnZhciBwb3NpdGlvbkNvbXBsZW1lbnRzID0ge1xuICB0b3A6ICdib3R0b20nLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICBsZWZ0OiAncmlnaHQnXG59O1xuXG4vLyBhbHdheXMgcmVzb2x2aW5nIHRvIHRvcC9sZWZ0IGlzIHRha2VuIGFkdmFudGFnZSBvZiBieSBrbm93aW5nIHRoZXkgYXJlIHRoZVxuLy8gbWluaW11bSBlZGdlcyBvZiB0aGUgYm91bmRpbmcgYm94XG52YXIgcG9zaXRpb25TdWJzdGl0dXRlcyA9IHtcbiAgdG9wOiAnbGVmdCcsXG4gIHJpZ2h0OiAndG9wJyxcbiAgYm90dG9tOiAnbGVmdCcsXG4gIGxlZnQ6ICd0b3AnXG59O1xudmFyIGdldEJ1ZmZlclZhbHVlcyA9IGZ1bmN0aW9uIGdldEJ1ZmZlclZhbHVlcyhidWZmZXIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYnVmZmVyKSkge1xuICAgIHZhciBfYnVmZmVyID0gX3NsaWNlZFRvQXJyYXkoYnVmZmVyLCA0KSxcbiAgICAgIHRvcEJ1ZmZlciA9IF9idWZmZXJbMF0sXG4gICAgICByaWdodEJ1ZmZlciA9IF9idWZmZXJbMV0sXG4gICAgICBib3R0b21CdWZmZXIgPSBfYnVmZmVyWzJdLFxuICAgICAgbGVmdEJ1ZmZlciA9IF9idWZmZXJbM107XG4gICAgcmV0dXJuIFt0b3BCdWZmZXIsIHJpZ2h0QnVmZmVyLCBib3R0b21CdWZmZXIsIGxlZnRCdWZmZXJdO1xuICB9XG4gIHJldHVybiBbYnVmZmVyLCBidWZmZXIsIGJ1ZmZlciwgYnVmZmVyXTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYWJzb2x1dGUgcG9zaXRpb25pbmcgKHJlbGF0aXZlIHRvIGRvY3VtZW50LmJvZHkpIHRvIHBsYWNlIGEgcG9wb3ZlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGFuY2hvciB7SFRNTEVsZW1lbnR9IEVsZW1lbnQgdG8gYW5jaG9yIHRoZSBwb3BvdmVyIHRvXG4gKiBAcGFyYW0gcG9wb3ZlciB7SFRNTEVsZW1lbnR9IEVsZW1lbnQgY29udGFpbmluZyB0aGUgcG9wb3ZlciBjb250ZW50XG4gKiBAcGFyYW0gcG9zaXRpb24ge3N0cmluZ30gUG9zaXRpb24gdGhlIHVzZXIgd2FudHMuIE9uZSBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEBwYXJhbSBbZm9yY2VQb3NpdGlvbl0ge2Jvb2xlYW59IElmIHRydWUsIHVzZSBvbmx5IHRoZSBwcm92aWRlZCBgcG9zaXRpb25gIHZhbHVlIGFuZCBkb24ndCB0cnkgYW55IG90aGVyIHBvc2l0aW9uXG4gKiBAcGFyYW0gW2FsaWduXSB7c3RyaW5nfSBDcm9zcy1heGlzIGFsaWdubWVudC4gT25lIG9mIFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXVxuICogQHBhcmFtIFtidWZmZXI9MTZdIHtudW1iZXJ9IE1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlciBhbmQgdGhlIGJvdW5kaW5nIGNvbnRhaW5lclxuICogQHBhcmFtIFtvZmZzZXQ9MF0ge251bWJlcn0gRGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlciBhbmQgdGhlIGFuY2hvclxuICogQHBhcmFtIFthbGxvd0Nyb3NzQXhpcz10cnVlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBhbGxvdyB0aGUgcG9wb3ZlciB0byBiZSBwb3NpdGlvbmVkIG9uIHRoZSBjcm9zcy1heGlzXG4gKiBAcGFyYW0gW2NvbnRhaW5lcl0ge0hUTUxFbGVtZW50fSBFbGVtZW50IHRoZSBwb3BvdmVyIG11c3QgYmUgY29uc3RyYWluZWQgdG8gZml0IHdpdGhpblxuICogQHBhcmFtIFthcnJvd0NvbmZpZ10ge3thcnJvd1dpZHRoOiBudW1iZXIsIGFycm93QnVmZmVyOiBudW1iZXJ9fSBJZlxuICogIHByZXNlbnQsIGRlc2NyaWJlcyB0aGUgc2l6ZSAmIGNvbnN0cmFpbnRzIGZvciBhbiBhcnJvdyBlbGVtZW50LCBhbmQgdGhlXG4gKiAgZnVuY3Rpb24gcmV0dXJuIHZhbHVlIHdpbGwgaW5jbHVkZSBhbiBgYXJyb3dgIHBhcmFtIHdpdGggcG9zaXRpb24gZGV0YWlsc1xuICpcbiAqIEByZXR1cm5zIHtGaW5kUG9wb3ZlclBvc2l0aW9uUmVzdWx0fSBhYnNvbHV0ZSBwYWdlIGNvb3JkaW5hdGVzIGZvciB0aGVcbiAqIHBvcG92ZXIsIGFuZCB0aGUgcGxhY2VtZW50J3MgcmVsYXRpb24gdG8gdGhlIGFuY2hvciBvciB1bmRlZmluZWRcbiAqIHRoZXJlJ3Mgbm8gcm9vbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQb3BvdmVyUG9zaXRpb24oX3JlZikge1xuICB2YXIgYW5jaG9yID0gX3JlZi5hbmNob3IsXG4gICAgcG9wb3ZlciA9IF9yZWYucG9wb3ZlcixcbiAgICBhbGlnbiA9IF9yZWYuYWxpZ24sXG4gICAgcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgIGZvcmNlUG9zaXRpb24gPSBfcmVmLmZvcmNlUG9zaXRpb24sXG4gICAgX3JlZiRidWZmZXIgPSBfcmVmLmJ1ZmZlcixcbiAgICBidWZmZXIgPSBfcmVmJGJ1ZmZlciA9PT0gdm9pZCAwID8gMTYgOiBfcmVmJGJ1ZmZlcixcbiAgICBfcmVmJG9mZnNldCA9IF9yZWYub2Zmc2V0LFxuICAgIG9mZnNldCA9IF9yZWYkb2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX3JlZiRvZmZzZXQsXG4gICAgX3JlZiRhbGxvd0Nyb3NzQXhpcyA9IF9yZWYuYWxsb3dDcm9zc0F4aXMsXG4gICAgYWxsb3dDcm9zc0F4aXMgPSBfcmVmJGFsbG93Q3Jvc3NBeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRhbGxvd0Nyb3NzQXhpcyxcbiAgICBjb250YWluZXIgPSBfcmVmLmNvbnRhaW5lcixcbiAgICBhcnJvd0NvbmZpZyA9IF9yZWYuYXJyb3dDb25maWcsXG4gICAgcmV0dXJuQm91bmRpbmdCb3ggPSBfcmVmLnJldHVybkJvdW5kaW5nQm94O1xuICAvLyBmaW5kIHRoZSBzY3JlZW4tcmVsYXRpdmUgYm91bmRpbmcgYm94ZXMgb2YgdGhlIGFuY2hvciwgcG9wb3ZlciwgYW5kIGNvbnRhaW5lclxuICB2YXIgYW5jaG9yQm91bmRpbmdCb3ggPSBnZXRFbGVtZW50Qm91bmRpbmdCb3goYW5jaG9yKTtcbiAgdmFyIHBvcG92ZXJCb3VuZGluZ0JveCA9IGdldEVsZW1lbnRCb3VuZGluZ0JveChwb3BvdmVyKTtcblxuICAvLyBjYWxjdWxhdGUgdGhlIHdpbmRvdydzIGJvdW5kc1xuICAvLyB3aW5kb3cuKGlubmVyV2lkdGh8aW5uZXJIZWlnaHQpIGRvIG5vdCBhY2NvdW50IGZvciBzY3JvbGxiYXJzXG4gIC8vIHNvIHByZWZlciB0aGUgY2xpZW50V2lkdGgvY2xpZW50SGVpZ2h0IG9mIHRoZSBET00gaWYgYXZhaWxhYmxlXG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IHdpbmRvdy5pbm5lcldpZHRoO1xuICB2YXIgZG9jdW1lbnRIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgdmFyIHdpbmRvd0JvdW5kaW5nQm94ID0ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogZG9jdW1lbnRXaWR0aCxcbiAgICBib3R0b206IGRvY3VtZW50SGVpZ2h0LFxuICAgIGxlZnQ6IDAsXG4gICAgaGVpZ2h0OiBkb2N1bWVudEhlaWdodCxcbiAgICB3aWR0aDogZG9jdW1lbnRXaWR0aFxuICB9O1xuXG4gIC8vIGlmIG5vIGNvbnRhaW5lciBlbGVtZW50IGlzIGdpdmVuIGZhbGwgYmFjayB0byB1c2luZyB0aGUgd2luZG93IHZpZXdwb3J0XG4gIHZhciBjb250YWluZXJCb3VuZGluZ0JveCA9IGNvbnRhaW5lciA/IGdldEVsZW1lbnRCb3VuZGluZ0JveChjb250YWluZXIpIDogd2luZG93Qm91bmRpbmdCb3g7XG5cbiAgLyoqXG4gICAqIGBwb3NpdGlvbmAgd2FzIHNwZWNpZmllZCBieSB0aGUgZnVuY3Rpb24gY2FsbGVyIGFuZCBpcyBhIHN0cm9uZyBoaW50XG4gICAqIGFzIHRvIHRoZSBwcmVmZXJyZWQgbG9jYXRpb24gb2YgdGhlIHBvcG92ZXIgcmVsYXRpdmUgdG8gdGhlIGFuY2hvci5cbiAgICogSG93ZXZlciwgd2Ugc3Ryb25nbHkgcHJlZmVyIHNob3dpbmcgYWxsIG9mIHRoZSBwb3BvdmVyIGNvbnRlbnQgd2l0aGluXG4gICAqIHRoZSB3aW5kb3crY29udGFpbmVyIGJvdW5kYXJ5IGFuZCB3aWxsIGl0ZXJhdGUgb3ZlciB0aGUgZm91clxuICAgKiBwb3NzaWJsZSBzaWRlcyB1bnRpbCBhIHBlcmZlY3QgZml0IGlzIGxvY2F0ZWQuIElmIG5vbmUgb2YgdGhlIGxvY2F0aW9uc1xuICAgKiBmdWxseSBjb250YWluIHBvcG92ZXIsIHRoZSBsb2NhdGlvbiB3aXRoIHRoZSBiZXN0IGZpdCBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogVGhpcyBhcHByb2FjaCBmaXJzdCBjaGVja3MgdGhlIHByZWZlcnJlZCBgcG9zaXRpb25gLCB0aGVuIGl0cyBvcHBvc2l0ZVxuICAgKiBhbG9uZyB0aGUgc2FtZSBheGlzLCBuZXh0IGEgbG9jYXRpb24gb24gdGhlIGNyb3NzLWF4aXMsIGFuZCBmaW5hbGx5IGl0XG4gICAqIHRlc3RzIHRoZSByZW1haW5pbmcgcG9zaXRpb24uXG4gICAqXG4gICAqIGUuZy5cbiAgICogaWYgcG9zaXRpb24gPSBcInRvcFwiIHRoZSBvcmRlciBpcyB0b3AsIGJvdHRvbSwgbGVmdCByaWdodFxuICAgKiBpZiBwb3NpdGlvbiA9IFwicmlnaHRcIiB0aGUgb3JkZXIgaXMgcmlnaHQsIGxlZnQsIHRvcCwgYm90dG9tXG4gICAqL1xuXG4gIC8vIFRyeSB0aGUgdXNlci1kZXNpcmVkIHBvc2l0aW9uIGZpcnN0LlxuICB2YXIgaXRlcmF0aW9uUG9zaXRpb25zID0gW3Bvc2l0aW9uXTtcbiAgLy8ga2VlcCB1c2VyLWRlZmluZWQgYWxpZ25tZW50IGluIHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMuXG4gIHZhciBpdGVyYXRpb25BbGlnbm1lbnRzID0gW2FsaWduXTtcbiAgaWYgKGZvcmNlUG9zaXRpb24gIT09IHRydWUpIHtcbiAgICBpdGVyYXRpb25Qb3NpdGlvbnMucHVzaChwb3NpdGlvbkNvbXBsZW1lbnRzW3Bvc2l0aW9uXSk7IC8vIFRyeSB0aGUgY29tcGxlbWVudGFyeSBwb3NpdGlvbi5cbiAgICBpdGVyYXRpb25BbGlnbm1lbnRzLnB1c2goYWxpZ24pOyAvLyBrZWVwIHVzZXItZGVmaW5lZCBhbGlnbm1lbnQgaW4gdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24uXG5cbiAgICBpZiAoYWxsb3dDcm9zc0F4aXMpIHtcbiAgICAgIGl0ZXJhdGlvblBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uU3Vic3RpdHV0ZXNbcG9zaXRpb25dLFxuICAgICAgLy8gU3dpdGNoIHRvIHRoZSBjcm9zcyBheGlzLlxuICAgICAgcG9zaXRpb25Db21wbGVtZW50c1twb3NpdGlvblN1YnN0aXR1dGVzW3Bvc2l0aW9uXV0gLy8gVHJ5IHRoZSBjb21wbGVtZW50YXJ5IHBvc2l0aW9uIG9uIHRoZSBjcm9zcyBheGlzLlxuICAgICAgKTtcbiAgICAgIGl0ZXJhdGlvbkFsaWdubWVudHMucHVzaCh1bmRlZmluZWQsIHVuZGVmaW5lZCk7IC8vIGRpc2NhcmQgZGVzaXJlZCBhbGlnbm1lbnQgb24gY3Jvc3MtYXhpc1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBwb3NpdGlvbiBpcyBmb3JjZWQsIGlmIGl0IGNvbmZsaWN0cyB3aXRoIHRoZSBhbGlnbm1lbnQgdGhlbiByZXNldCBhbGlnbiB0byBgbnVsbGBcbiAgICAvLyBlLmcuIG9yaWdpbmFsIHBsYWNlbWVudCByZXF1ZXN0IGZvciBgZG93bkxlZnRgIGlzIG1vdmVkIHRvIHRoZSBgbGVmdGAgc2lkZSwgZnV0dXJlIGNhbGxzXG4gICAgLy8gd2lsbCBwb3NpdGlvbiBhbmQgYWxpZ24gYGxlZnRgLCBhbmQgYGxlZnRMZWZ0YCBpcyBub3QgYSB2YWxpZCBwbGFjZW1lbnRcbiAgICBpZiAocG9zaXRpb24gPT09IGFsaWduIHx8IGFsaWduICE9PSB1bmRlZmluZWQgJiYgcG9zaXRpb24gPT09IHBvc2l0aW9uQ29tcGxlbWVudHNbYWxpZ25dKSB7XG4gICAgICBpdGVyYXRpb25BbGlnbm1lbnRzWzBdID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICB2YXIgYmVzdEZpdCA9IHVuZGVmaW5lZDtcbiAgdmFyIGJlc3RQb3NpdGlvbiA9IG51bGw7XG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGl0ZXJhdGlvblBvc2l0aW9ucy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgdmFyIGl0ZXJhdGlvblBvc2l0aW9uID0gaXRlcmF0aW9uUG9zaXRpb25zW2lkeF07XG5cbiAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBwb3NpdGlvbiB3aXRoIGEgYmV0dGVyIGZpdCB0aGFuIHdlJ3ZlIGZvdW5kIHNvIGZhci5cbiAgICB2YXIgc2NyZWVuQ29vcmRpbmF0ZXMgPSBnZXRQb3BvdmVyU2NyZWVuQ29vcmRpbmF0ZXMoe1xuICAgICAgcG9zaXRpb246IGl0ZXJhdGlvblBvc2l0aW9uLFxuICAgICAgYWxpZ246IGl0ZXJhdGlvbkFsaWdubWVudHNbaWR4XSxcbiAgICAgIGFuY2hvckJvdW5kaW5nQm94OiBhbmNob3JCb3VuZGluZ0JveCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveDogcG9wb3ZlckJvdW5kaW5nQm94LFxuICAgICAgd2luZG93Qm91bmRpbmdCb3g6IHdpbmRvd0JvdW5kaW5nQm94LFxuICAgICAgY29udGFpbmVyQm91bmRpbmdCb3g6IGNvbnRhaW5lckJvdW5kaW5nQm94LFxuICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICBidWZmZXI6IGJ1ZmZlcixcbiAgICAgIGFycm93Q29uZmlnOiBhcnJvd0NvbmZpZ1xuICAgIH0pO1xuICAgIGlmIChiZXN0Rml0ID09PSB1bmRlZmluZWQgfHwgc2NyZWVuQ29vcmRpbmF0ZXMuZml0ID4gYmVzdEZpdCkge1xuICAgICAgYmVzdEZpdCA9IHNjcmVlbkNvb3JkaW5hdGVzLmZpdDtcbiAgICAgIGJlc3RQb3NpdGlvbiA9IHtcbiAgICAgICAgZml0OiBzY3JlZW5Db29yZGluYXRlcy5maXQsXG4gICAgICAgIHBvc2l0aW9uOiBpdGVyYXRpb25Qb3NpdGlvbixcbiAgICAgICAgdG9wOiBzY3JlZW5Db29yZGluYXRlcy50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQsXG4gICAgICAgIGxlZnQ6IHNjcmVlbkNvb3JkaW5hdGVzLmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgICAgIGFycm93OiBzY3JlZW5Db29yZGluYXRlcy5hcnJvd1xuICAgICAgfTtcblxuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBmb3VuZCB0aGUgaWRlYWwgZml0LCB1c2UgdGhhdCBwb3NpdGlvbi5cbiAgICAgIGlmIChiZXN0Rml0ID09PSAxKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHdlIGhhdmVuJ3QgaW1wcm92ZWQgdGhlIGZpdCwgdGhlbiBjb250aW51ZSBvbiBhbmQgdHJ5IGEgbmV3IHBvc2l0aW9uLlxuICB9XG4gIGlmIChiZXN0UG9zaXRpb24gPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNhbGN1bGF0ZSBiZXN0UG9zaXRpb24nKTtcbiAgfVxuICBpZiAocmV0dXJuQm91bmRpbmdCb3gpIHtcbiAgICBiZXN0UG9zaXRpb24uYW5jaG9yQm91bmRpbmdCb3ggPSBhbmNob3JCb3VuZGluZ0JveDtcbiAgfVxuICByZXR1cm4gYmVzdFBvc2l0aW9uO1xufVxuLyoqXG4gKiBHaXZlbiBhIHRhcmdldCBwb3NpdGlvbiBhbmQgdGhlIHBvcG92ZXIncyBzdXJyb3VuZGluZyBjb250ZXh0LCByZXR1cm5zIGVpdGhlciBhblxuICogb2JqZWN0IHdpdGgge3RvcCwgbGVmdH0gc2NyZWVuIGNvb3JkaW5hdGVzIG9yIGBudWxsYCBpZiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzaG93XG4gKiBjb250ZW50IGluIHRoZSB0YXJnZXQgcG9zaXRpb25cbiAqIEBwYXJhbSBwb3NpdGlvbiB7c3RyaW5nfSB0aGUgdGFyZ2V0IHBvc2l0aW9uLCBvbmUgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcGFyYW0gYWxpZ24ge3N0cmluZ30gdGFyZ2V0IGFsaWdubWVudCBvbiB0aGUgY3Jvc3MtYXhpcywgb25lIG9mIFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXVxuICogQHBhcmFtIGFuY2hvckJvdW5kaW5nQm94IHtPYmplY3R9IGJvdW5kaW5nIGJveCBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAqIEBwYXJhbSBwb3BvdmVyQm91bmRpbmdCb3gge09iamVjdH0gYm91bmRpbmcgYm94IG9mIHRoZSBwb3BvdmVyIGVsZW1lbnRcbiAqIEBwYXJhbSB3aW5kb3dCb3VuZGluZ0JveCB7T2JqZWN0fSBib3VuZGluZyBib3ggb2YgdGhlIHdpbmRvd1xuICogQHBhcmFtIGNvbnRhaW5lckJvdW5kaW5nQm94IHtPYmplY3R9IGJvdW5kaW5nIGJveCBvZiB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Fycm93Q29uZmlnXSB7e2Fycm93V2lkdGg6IG51bWJlciwgYXJyb3dCdWZmZXI6IG51bWJlcn19IElmIHByZXNlbnQsIGRlc2NyaWJlcyB0aGUgc2l6ZSAmXG4gKiAgY29uc3RyYWludHMgZm9yIGFuIGFycm93IGVsZW1lbnQsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJuIHZhbHVlIHdpbGwgaW5jbHVkZSBhbiBgYXJyb3dgIHBhcmFtXG4gKiAgd2l0aCBwb3NpdGlvbiBkZXRhaWxzXG4gKiBAcGFyYW0gW29mZnNldD0wXSB7bnVtYmVyfSBEaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYW5jaG9yXG4gKiBAcGFyYW0gW2J1ZmZlcj0wXSB7bnVtYmVyfSBNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXInc1xuICogIHBsYWNlbWVudCBhbmQgdGhlIGNvbnRhaW5lciBlZGdlXG4gKlxuICogQHJldHVybnMge0dldFBvcG92ZXJTY3JlZW5Db29yZGluYXRlc1Jlc3VsdH1cbiAqICBvYmplY3Qgd2l0aCB0b3AvbGVmdCBjb29yZGluYXRlcywgdGhlIHBvcG92ZXIncyByZWxhdGl2ZSBwb3NpdGlvbiB0byB0aGUgYW5jaG9yLCBhbmQgaG93IHdlbGwgdGhlXG4gKiAgcG9wb3ZlciBmaXRzIGluIHRoZSBsb2NhdGlvbiAoMC4wIC0+IDEuMCkgY29vcmRpbmF0ZXMgYW5kIHRoZSBwb3BvdmVyJ3MgcmVsYXRpdmUgcG9zaXRpb24sIGlmXG4gKiAgdGhlcmUgaXMgbm8gcm9vbSBpbiB0aGlzIHBsYWNlbWVudCB0aGVuIG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcG92ZXJTY3JlZW5Db29yZGluYXRlcyhfcmVmMikge1xuICB2YXIgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICBhbGlnbiA9IF9yZWYyLmFsaWduLFxuICAgIGFuY2hvckJvdW5kaW5nQm94ID0gX3JlZjIuYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgcG9wb3ZlckJvdW5kaW5nQm94ID0gX3JlZjIucG9wb3ZlckJvdW5kaW5nQm94LFxuICAgIHdpbmRvd0JvdW5kaW5nQm94ID0gX3JlZjIud2luZG93Qm91bmRpbmdCb3gsXG4gICAgY29udGFpbmVyQm91bmRpbmdCb3ggPSBfcmVmMi5jb250YWluZXJCb3VuZGluZ0JveCxcbiAgICBhcnJvd0NvbmZpZyA9IF9yZWYyLmFycm93Q29uZmlnLFxuICAgIF9yZWYyJG9mZnNldCA9IF9yZWYyLm9mZnNldCxcbiAgICBvZmZzZXQgPSBfcmVmMiRvZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBfcmVmMiRvZmZzZXQsXG4gICAgX3JlZjIkYnVmZmVyID0gX3JlZjIuYnVmZmVyLFxuICAgIGJ1ZmZlciA9IF9yZWYyJGJ1ZmZlciA9PT0gdm9pZCAwID8gMCA6IF9yZWYyJGJ1ZmZlcjtcbiAgLyoqXG4gICAqIFRoZSBnb2FsIGlzIHRvIGZpbmQgdGhlIGJlc3Qgd2F5IHRvIGFsaWduIHRoZSBwb3BvdmVyIGNvbnRlbnRcbiAgICogb24gdGhlIGdpdmVuIHNpZGUgb2YgdGhlIGFuY2hvciBlbGVtZW50LiBUaGUgcG9wb3ZlciBwcmVmZXJzXG4gICAqIGNlbnRlcmluZyBvbiB0aGUgYW5jaG9yIGJ1dCBjYW4gc2hpZnQgYWxvbmcgdGhlIGNyb3NzLWF4aXMgYXMgbmVlZGVkLlxuICAgKlxuICAgKiBXZSByZXR1cm4gdGhlIHRvcC9sZWZ0IGNvb3JkaW5hdGVzIHRoYXQgYmVzdCBmaXQgdGhlIHBvcG92ZXIgaW5zaWRlXG4gICAqIHRoZSBnaXZlbiBib3VuZGFyaWVzLCBhbmQgYWxzbyByZXR1cm4gdGhlIGBmaXRgIHZhbHVlIHdoaWNoIGluZGljYXRlc1xuICAgKiB3aGF0IHBlcmNlbnRhZ2Ugb2YgdGhlIHBvcG92ZXIgaXMgd2l0aGluIHRoZSBib3VuZHMuXG4gICAqXG4gICAqIGUuZy4gZmluZGluZyBhIGxvY2F0aW9uIHdoZW4gcG9zaXRpb249dG9wXG4gICAqIHRoZSBwcmVmZXJyZWQgbG9jYXRpb24gaXMgZGlyZWN0bHkgb3ZlciB0aGUgYW5jaG9yXG4gICAqXG4gICAqICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgIHwgICAgICAgcG9wb3ZlciAgICAgICAgfFxuICAgKiAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgICAgICAgIHZcbiAgICogICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgfCAgICBhbmNob3IgICAgfFxuICAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICpcbiAgICogYnV0IGlmIGFuY2hvciBkb2Vzbid0IGhhdmUgbXVjaCAob3IgYW55KSByb29tIG9uIGl0cyByaWRlIHNpZGVcbiAgICogdGhlIHBvcG92ZXIgd2lsbCBzaGlmdCB0byB0aGUgbGVmdFxuICAgKlxuICAgKiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgICogICAgfCAgICAgICBwb3BvdmVyICAgICAgICB8XG4gICAqICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgICAgICAgICAgICB2XG4gICAqICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgICAgIHwgICAgYW5jaG9yICAgIHxcbiAgICogICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rXG4gICAqXG4gICAqL1xuXG4gIHZhciBjcm9zc0F4aXNGaXJzdFNpZGUgPSBwb3NpdGlvblN1YnN0aXR1dGVzW3Bvc2l0aW9uXTsgLy8gXCJ0b3BcIiAtPiBcImxlZnRcIlxuICB2YXIgY3Jvc3NBeGlzU2Vjb25kU2lkZSA9IHBvc2l0aW9uQ29tcGxlbWVudHNbY3Jvc3NBeGlzRmlyc3RTaWRlXTsgLy8gXCJsZWZ0XCIgLT4gXCJyaWdodFwiXG4gIHZhciBjcm9zc0F4aXNEaW1lbnNpb24gPSByZWxhdGVkRGltZW5zaW9uW2Nyb3NzQXhpc0ZpcnN0U2lkZV07IC8vIFwibGVmdFwiIC0+IFwid2lkdGhcIlxuXG4gIHZhciBfZ2V0QnVmZmVyVmFsdWVzID0gZ2V0QnVmZmVyVmFsdWVzKGJ1ZmZlciksXG4gICAgX2dldEJ1ZmZlclZhbHVlczIgPSBfc2xpY2VkVG9BcnJheShfZ2V0QnVmZmVyVmFsdWVzLCA0KSxcbiAgICB0b3BCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzMlswXSxcbiAgICByaWdodEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzFdLFxuICAgIGJvdHRvbUJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzJdLFxuICAgIGxlZnRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzMlszXTtcbiAgdmFyIF9nZXRDcm9zc0F4aXNQb3NpdGlvbiA9IGdldENyb3NzQXhpc1Bvc2l0aW9uKHtcbiAgICAgIGNyb3NzQXhpc0ZpcnN0U2lkZTogY3Jvc3NBeGlzRmlyc3RTaWRlLFxuICAgICAgY3Jvc3NBeGlzU2Vjb25kU2lkZTogY3Jvc3NBeGlzU2Vjb25kU2lkZSxcbiAgICAgIGNyb3NzQXhpc0RpbWVuc2lvbjogY3Jvc3NBeGlzRGltZW5zaW9uLFxuICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgYWxpZ246IGFsaWduLFxuICAgICAgYnVmZmVyOiBidWZmZXIsXG4gICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgIHdpbmRvd0JvdW5kaW5nQm94OiB3aW5kb3dCb3VuZGluZ0JveCxcbiAgICAgIGNvbnRhaW5lckJvdW5kaW5nQm94OiBjb250YWluZXJCb3VuZGluZ0JveCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveDogcG9wb3ZlckJvdW5kaW5nQm94LFxuICAgICAgYW5jaG9yQm91bmRpbmdCb3g6IGFuY2hvckJvdW5kaW5nQm94LFxuICAgICAgYXJyb3dDb25maWc6IGFycm93Q29uZmlnXG4gICAgfSksXG4gICAgY3Jvc3NBeGlzUG9zaXRpb24gPSBfZ2V0Q3Jvc3NBeGlzUG9zaXRpb24uY3Jvc3NBeGlzUG9zaXRpb24sXG4gICAgY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiA9IF9nZXRDcm9zc0F4aXNQb3NpdGlvbi5jcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuICB2YXIgcHJpbWFyeUF4aXNEaW1lbnNpb24gPSByZWxhdGVkRGltZW5zaW9uW3Bvc2l0aW9uXTsgLy8gXCJ0b3BcIiAtPiBcImhlaWdodFwiXG4gIHZhciBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSA9IGRpbWVuc2lvblBvc2l0aW9uQXR0cmlidXRlW3ByaW1hcnlBeGlzRGltZW5zaW9uXTsgLy8gXCJoZWlnaHRcIiAtPiBcInRvcFwiXG5cbiAgdmFyIF9nZXRQcmltYXJ5QXhpc1Bvc2l0aSA9IGdldFByaW1hcnlBeGlzUG9zaXRpb24oe1xuICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICBwb3BvdmVyQm91bmRpbmdCb3g6IHBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIGFuY2hvckJvdW5kaW5nQm94OiBhbmNob3JCb3VuZGluZ0JveCxcbiAgICAgIGFycm93Q29uZmlnOiBhcnJvd0NvbmZpZ1xuICAgIH0pLFxuICAgIHByaW1hcnlBeGlzUG9zaXRpb24gPSBfZ2V0UHJpbWFyeUF4aXNQb3NpdGkucHJpbWFyeUF4aXNQb3NpdGlvbixcbiAgICBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb24gPSBfZ2V0UHJpbWFyeUF4aXNQb3NpdGkucHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uO1xuICB2YXIgcG9wb3ZlclBsYWNlbWVudCA9IF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIGNyb3NzQXhpc0ZpcnN0U2lkZSwgY3Jvc3NBeGlzUG9zaXRpb24pLCBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSwgcHJpbWFyeUF4aXNQb3NpdGlvbik7XG5cbiAgLy8gY2FsY3VsYXRlIHRoZSBmaXQgb2YgdGhlIHBvcG92ZXIgaW4gdGhpcyBsb2NhdGlvblxuICAvLyBmaXQgaXMgaW4gcmFuZ2UgMC4wIC0+IDEuMCBhbmQgaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHBvcG92ZXIgd2hpY2ggaXMgdmlzaWJsZSBpbiB0aGlzIGxvY2F0aW9uXG4gIHZhciBjb21iaW5lZEJvdW5kaW5nQm94ID0gaW50ZXJzZWN0Qm91bmRpbmdCb3hlcyh3aW5kb3dCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gpO1xuXG4gIC8vIHNocmluayB0aGUgdmlzaWJsZSBib3VuZGluZyBib3ggYnkgYGJ1ZmZlcmBcbiAgLy8gdG8gY29tcHV0ZSBhIGZpdCB2YWx1ZVxuICBjb21iaW5lZEJvdW5kaW5nQm94LnRvcCArPSB0b3BCdWZmZXI7XG4gIGNvbWJpbmVkQm91bmRpbmdCb3gucmlnaHQgLT0gcmlnaHRCdWZmZXI7XG4gIGNvbWJpbmVkQm91bmRpbmdCb3guYm90dG9tIC09IGJvdHRvbUJ1ZmZlcjtcbiAgY29tYmluZWRCb3VuZGluZ0JveC5sZWZ0ICs9IGxlZnRCdWZmZXI7XG4gIHZhciBmaXQgPSBnZXRWaXNpYmxlRml0KHtcbiAgICB0b3A6IHBvcG92ZXJQbGFjZW1lbnQudG9wLFxuICAgIHJpZ2h0OiBwb3BvdmVyUGxhY2VtZW50LmxlZnQgKyBwb3BvdmVyQm91bmRpbmdCb3gud2lkdGgsXG4gICAgYm90dG9tOiBwb3BvdmVyUGxhY2VtZW50LnRvcCArIHBvcG92ZXJCb3VuZGluZ0JveC5oZWlnaHQsXG4gICAgbGVmdDogcG9wb3ZlclBsYWNlbWVudC5sZWZ0LFxuICAgIHdpZHRoOiBwb3BvdmVyQm91bmRpbmdCb3gud2lkdGgsXG4gICAgaGVpZ2h0OiBwb3BvdmVyQm91bmRpbmdCb3guaGVpZ2h0XG4gIH0sIGNvbWJpbmVkQm91bmRpbmdCb3gpO1xuICB2YXIgYXJyb3cgPSBhcnJvd0NvbmZpZyA/IF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIGNyb3NzQXhpc0ZpcnN0U2lkZSwgY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiAtIHBvcG92ZXJQbGFjZW1lbnRbY3Jvc3NBeGlzRmlyc3RTaWRlXSksIHByaW1hcnlBeGlzUG9zaXRpb25OYW1lLCBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb24pIDogdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIGZpdDogZml0LFxuICAgIHRvcDogcG9wb3ZlclBsYWNlbWVudC50b3AsXG4gICAgbGVmdDogcG9wb3ZlclBsYWNlbWVudC5sZWZ0LFxuICAgIGFycm93OiBhcnJvdyA/IHtcbiAgICAgIGxlZnQ6IGFycm93LmxlZnQsXG4gICAgICB0b3A6IGFycm93LnRvcFxuICAgIH0gOiB1bmRlZmluZWRcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENyb3NzQXhpc1Bvc2l0aW9uKF9yZWY0KSB7XG4gIHZhciBjcm9zc0F4aXNGaXJzdFNpZGUgPSBfcmVmNC5jcm9zc0F4aXNGaXJzdFNpZGUsXG4gICAgY3Jvc3NBeGlzU2Vjb25kU2lkZSA9IF9yZWY0LmNyb3NzQXhpc1NlY29uZFNpZGUsXG4gICAgY3Jvc3NBeGlzRGltZW5zaW9uID0gX3JlZjQuY3Jvc3NBeGlzRGltZW5zaW9uLFxuICAgIHBvc2l0aW9uID0gX3JlZjQucG9zaXRpb24sXG4gICAgYWxpZ24gPSBfcmVmNC5hbGlnbixcbiAgICBidWZmZXIgPSBfcmVmNC5idWZmZXIsXG4gICAgb2Zmc2V0ID0gX3JlZjQub2Zmc2V0LFxuICAgIHdpbmRvd0JvdW5kaW5nQm94ID0gX3JlZjQud2luZG93Qm91bmRpbmdCb3gsXG4gICAgY29udGFpbmVyQm91bmRpbmdCb3ggPSBfcmVmNC5jb250YWluZXJCb3VuZGluZ0JveCxcbiAgICBwb3BvdmVyQm91bmRpbmdCb3ggPSBfcmVmNC5wb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgYW5jaG9yQm91bmRpbmdCb3ggPSBfcmVmNC5hbmNob3JCb3VuZGluZ0JveCxcbiAgICBhcnJvd0NvbmZpZyA9IF9yZWY0LmFycm93Q29uZmlnO1xuICAvLyBob3cgbXVjaCBvZiB0aGUgcG9wb3ZlciBvdmVyZmxvd3MgcGFzdCBlaXRoZXIgc2lkZSBvZiB0aGUgYW5jaG9yIGlmIGl0cyBjZW50ZXJlZFxuICB2YXIgcG9wb3ZlclNpemVPbkNyb3NzQXhpcyA9IHBvcG92ZXJCb3VuZGluZ0JveFtjcm9zc0F4aXNEaW1lbnNpb25dO1xuICB2YXIgYW5jaG9yU2l6ZU9uQ3Jvc3NBeGlzID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRGltZW5zaW9uXTtcbiAgdmFyIGFuY2hvckhhbGZTaXplID0gYW5jaG9yU2l6ZU9uQ3Jvc3NBeGlzIC8gMjtcblxuICAvLyB0aGUgcG9wb3ZlcidzIG9yaWdpbmFsIHBvc2l0aW9uIG9uIHRoZSBjcm9zcy1heGlzIGlzIGRldGVybWluZWQgYnk6XG4gIHZhciBjcm9zc0F4aXNQb3NpdGlvbk9yaWdpbmFsID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRmlyc3RTaWRlXSArXG4gIC8vIHdoZXJlIHRoZSBhbmNob3IgaXMgbG9jYXRlZFxuICBhbmNob3JIYWxmU2l6ZSAtXG4gIC8vIHBsdXMgaGFsZiBhbmNob3IgZGltZW5zaW9uXG4gIHBvcG92ZXJTaXplT25Dcm9zc0F4aXMgLyAyOyAvLyBsZXNzIGhhbGYgdGhlIHBvcG92ZXIgZGltZW5zaW9uXG5cbiAgLy8gVG8gZml0IHRoZSBjb250ZW50IHdpdGhpbiBib3RoIHRoZSB3aW5kb3cgYW5kIGNvbnRhaW5lcixcbiAgLy8gY29tcHV0ZSB0aGUgc21hbGxlciBvZiB0aGUgdHdvIHNwYWNlcyBhbG9uZyBlYWNoIGVkZ2VcbiAgdmFyIGNvbWJpbmVkQm91bmRpbmdCb3ggPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKHdpbmRvd0JvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCk7XG4gIHZhciBhdmFpbGFibGVTcGFjZSA9IGdldEF2YWlsYWJsZVNwYWNlKGFuY2hvckJvdW5kaW5nQm94LCBjb21iaW5lZEJvdW5kaW5nQm94LCBidWZmZXIsIG9mZnNldCwgcG9zaXRpb24pO1xuICB2YXIgbWluaW11bVNwYWNlID0gYXJyb3dDb25maWcgPyBhcnJvd0NvbmZpZy5hcnJvd0J1ZmZlciA6IDA7XG4gIHZhciBjb250ZW50T3ZlcmZsb3dTaXplID0gKHBvcG92ZXJTaXplT25Dcm9zc0F4aXMgLSBhbmNob3JTaXplT25Dcm9zc0F4aXMpIC8gMjtcbiAgdmFyIGFsaWduQW1vdW50ID0gMDtcbiAgdmFyIGFsaWduRGlyZWN0aW9uID0gMTtcbiAgdmFyIGFtb3VudE9mU2hpZnROZWVkZWQgPSAwO1xuICB2YXIgc2hpZnREaXJlY3Rpb24gPSAxO1xuICBpZiAoYWxpZ24gIT0gbnVsbCkge1xuICAgIC8vIG5vIGFsaWdubWVudCwgZmluZCBob3cgbXVjaCB0aGUgY29udGFpbmVyIGJvdW5kYXJ5IHJlcXVpcmVzIHRoZSBjb250ZW50IHRvIHNoaWZ0XG4gICAgYWxpZ25EaXJlY3Rpb24gPSBhbGlnbiA9PT0gJ3RvcCcgfHwgYWxpZ24gPT09ICdsZWZ0JyA/IDEgOiAtMTtcbiAgICBhbGlnbkFtb3VudCA9IGNvbnRlbnRPdmVyZmxvd1NpemU7XG4gICAgdmFyIGFsaWduZWRPdmVyZmxvd0Ftb3VudCA9IGNvbnRlbnRPdmVyZmxvd1NpemUgKyBhbGlnbkFtb3VudDtcbiAgICB2YXIgbmVlZHNTaGlmdCA9IGFsaWduZWRPdmVyZmxvd0Ftb3VudCA+IGF2YWlsYWJsZVNwYWNlW3Bvc2l0aW9uQ29tcGxlbWVudHNbYWxpZ25dXTtcbiAgICBhbW91bnRPZlNoaWZ0TmVlZGVkID0gbmVlZHNTaGlmdCA/IGFsaWduZWRPdmVyZmxvd0Ftb3VudCAtIGF2YWlsYWJsZVNwYWNlW3Bvc2l0aW9uQ29tcGxlbWVudHNbYWxpZ25dXSA6IDA7XG4gICAgc2hpZnREaXJlY3Rpb24gPSAtMSAqIGFsaWduRGlyZWN0aW9uO1xuICB9IGVsc2Uge1xuICAgIC8vIHNoaWZ0aW5nIHRoZSBwb3BvdmVyIHRvIG9uZSBzaWRlIG1heSB5aWVsZCBhIGJldHRlciBmaXRcbiAgICB2YXIgc3BhY2VBdmFpbGFibGVPbkZpcnN0U2lkZSA9IGF2YWlsYWJsZVNwYWNlW2Nyb3NzQXhpc0ZpcnN0U2lkZV07XG4gICAgdmFyIHNwYWNlQXZhaWxhYmxlT25TZWNvbmRTaWRlID0gYXZhaWxhYmxlU3BhY2VbY3Jvc3NBeGlzU2Vjb25kU2lkZV07XG4gICAgdmFyIGlzU2hpZnRUb3dhcmRGaXJzdFNpZGUgPSBzcGFjZUF2YWlsYWJsZU9uRmlyc3RTaWRlID4gc3BhY2VBdmFpbGFibGVPblNlY29uZFNpZGU7XG4gICAgc2hpZnREaXJlY3Rpb24gPSBpc1NoaWZ0VG93YXJkRmlyc3RTaWRlID8gLTEgOiAxO1xuXG4gICAgLy8gZGV0ZXJtaW5lIHdoaWNoIGRpcmVjdGlvbiBoYXMgbW9yZSByb29tIGFuZCB0aGUgcG9wb3ZlciBzaG91bGQgc2hpZnQgdG9cbiAgICB2YXIgbGVhc3RBdmFpbGFibGVTcGFjZSA9IE1hdGgubWluKHNwYWNlQXZhaWxhYmxlT25GaXJzdFNpZGUsIHNwYWNlQXZhaWxhYmxlT25TZWNvbmRTaWRlKTtcbiAgICB2YXIgX25lZWRzU2hpZnQgPSBjb250ZW50T3ZlcmZsb3dTaXplID4gbGVhc3RBdmFpbGFibGVTcGFjZTtcbiAgICBhbW91bnRPZlNoaWZ0TmVlZGVkID0gX25lZWRzU2hpZnQgPyBjb250ZW50T3ZlcmZsb3dTaXplIC0gbGVhc3RBdmFpbGFibGVTcGFjZSA6IDA7XG4gIH1cblxuICAvLyBzaGlmdCBvdmVyIHRoZSBwb3BvdmVyIGlmIG5lY2Vzc2FyeVxuICB2YXIgc2hpZnRBbW91bnQgPSBhbW91bnRPZlNoaWZ0TmVlZGVkICogc2hpZnREaXJlY3Rpb247XG4gIHZhciBjcm9zc0F4aXNQb3NpdGlvbiA9IGNyb3NzQXhpc1Bvc2l0aW9uT3JpZ2luYWwgKyBzaGlmdEFtb3VudCArIGFsaWduQW1vdW50ICogYWxpZ25EaXJlY3Rpb247XG5cbiAgLy8gaWYgYW4gYGFycm93Q29uZmlnYCBpcyBzcGVjaWZpZWQsIGZpbmQgd2hlcmUgdG8gcG9zaXRpb24gdGhlIGFycm93XG4gIHZhciBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuICBpZiAoYXJyb3dDb25maWcpIHtcbiAgICB2YXIgYXJyb3dXaWR0aCA9IGFycm93Q29uZmlnLmFycm93V2lkdGg7XG4gICAgY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiA9IGFuY2hvckJvdW5kaW5nQm94W2Nyb3NzQXhpc0ZpcnN0U2lkZV0gKyBhbmNob3JIYWxmU2l6ZSAtIGFycm93V2lkdGggLyAyO1xuXG4gICAgLy8gbWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGJ1ZmZlciBhcm91bmQgdGhlIGFycm93XG4gICAgLy8gYnkgY2FsY3VsYXRpbmcgaG93IGhvdyBtdWNoIHRoZSBhcnJvdyB3b3VsZCBuZWVkIHRvIG1vdmVcbiAgICAvLyBidXQgaW5zdGVhZCBvZiBtb3ZpbmcgdGhlIGFycm93LCBzaGlmdCB0aGUgcG9wb3ZlciBjb250ZW50XG4gICAgaWYgKGNyb3NzQXhpc0Fycm93UG9zaXRpb24gPCBjcm9zc0F4aXNQb3NpdGlvbiArIG1pbmltdW1TcGFjZSkge1xuICAgICAgLy8gYXJyb3cgaXMgdG9vIGNsb3NlIHRvIHRoZSBtaW5pbXVtIHNpZGVcbiAgICAgIHZhciBkaWZmZXJlbmNlID0gY3Jvc3NBeGlzUG9zaXRpb24gKyBtaW5pbXVtU3BhY2UgLSBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuICAgICAgY3Jvc3NBeGlzUG9zaXRpb24gLT0gZGlmZmVyZW5jZTtcbiAgICB9IGVsc2UgaWYgKGNyb3NzQXhpc0Fycm93UG9zaXRpb24gKyBtaW5pbXVtU3BhY2UgKyBhcnJvd1dpZHRoID4gY3Jvc3NBeGlzUG9zaXRpb24gKyBwb3BvdmVyU2l6ZU9uQ3Jvc3NBeGlzKSB7XG4gICAgICAvLyBhcnJvdyBpcyB0b28gY2xvc2UgdG8gdGhlIG1heGltdW0gc2lkZVxuICAgICAgdmFyIGVkZ2UgPSBjcm9zc0F4aXNQb3NpdGlvbiArIHBvcG92ZXJTaXplT25Dcm9zc0F4aXM7XG4gICAgICB2YXIgX2RpZmZlcmVuY2UgPSBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uIC0gKGVkZ2UgLSBtaW5pbXVtU3BhY2UgLSBhcnJvd1dpZHRoKTtcbiAgICAgIGNyb3NzQXhpc1Bvc2l0aW9uICs9IF9kaWZmZXJlbmNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGNyb3NzQXhpc1Bvc2l0aW9uOiBjcm9zc0F4aXNQb3NpdGlvbixcbiAgICBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uOiBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uXG4gIH07XG59XG5mdW5jdGlvbiBnZXRQcmltYXJ5QXhpc1Bvc2l0aW9uKF9yZWY1KSB7XG4gIHZhciBwb3NpdGlvbiA9IF9yZWY1LnBvc2l0aW9uLFxuICAgIG9mZnNldCA9IF9yZWY1Lm9mZnNldCxcbiAgICBwb3BvdmVyQm91bmRpbmdCb3ggPSBfcmVmNS5wb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgYW5jaG9yQm91bmRpbmdCb3ggPSBfcmVmNS5hbmNob3JCb3VuZGluZ0JveCxcbiAgICBhcnJvd0NvbmZpZyA9IF9yZWY1LmFycm93Q29uZmlnO1xuICAvLyBpZiBwb3NpdGlvbmluZyB0byB0aGUgdG9wIG9yIGxlZnQsIHRoZSB0YXJnZXQgcG9zaXRpb24gZGVjcmVhc2VzXG4gIC8vIGZyb20gdGhlIGFuY2hvcidzIHRvcCBvciBsZWZ0LCBvdGhlcndpc2UgdGhlIHBvc2l0aW9uIGFkZHMgdG8gdGhlIGFuY2hvcidzXG4gIHZhciBpc09mZnNldERlY3JlYXNpbmcgPSBwb3NpdGlvbiA9PT0gJ3RvcCcgfHwgcG9zaXRpb24gPT09ICdsZWZ0JztcbiAgdmFyIHByaW1hcnlBeGlzRGltZW5zaW9uID0gcmVsYXRlZERpbWVuc2lvbltwb3NpdGlvbl07IC8vIFwidG9wXCIgLT4gXCJoZWlnaHRcIlxuICB2YXIgcG9wb3ZlclNpemVPblByaW1hcnlBeGlzID0gcG9wb3ZlckJvdW5kaW5nQm94W3ByaW1hcnlBeGlzRGltZW5zaW9uXTtcblxuICAvLyBzdGFydCBhdCB0aGUgdG9wIG9yIGxlZnQgZWRnZSBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgdmFyIHByaW1hcnlBeGlzUG9zaXRpb25OYW1lID0gZGltZW5zaW9uUG9zaXRpb25BdHRyaWJ1dGVbcHJpbWFyeUF4aXNEaW1lbnNpb25dOyAvLyBcImhlaWdodFwiIC0+IFwidG9wXCJcbiAgdmFyIGFuY2hvckVkZ2VPcmlnaW4gPSBhbmNob3JCb3VuZGluZ0JveFtwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZV07XG5cbiAgLy8gZmluZCB0aGUgcG9wb3ZlciBwb3NpdGlvbiBvbiB0aGUgcHJpbWFyeSBheGlzXG4gIHZhciBhbmNob3JTaXplT25QcmltYXJ5QXhpcyA9IGFuY2hvckJvdW5kaW5nQm94W3ByaW1hcnlBeGlzRGltZW5zaW9uXTtcbiAgdmFyIHByaW1hcnlBeGlzT2Zmc2V0ID0gaXNPZmZzZXREZWNyZWFzaW5nID8gcG9wb3ZlclNpemVPblByaW1hcnlBeGlzIDogYW5jaG9yU2l6ZU9uUHJpbWFyeUF4aXM7XG4gIHZhciBjb250ZW50T2Zmc2V0ID0gKG9mZnNldCArIHByaW1hcnlBeGlzT2Zmc2V0KSAqIChpc09mZnNldERlY3JlYXNpbmcgPyAtMSA6IDEpO1xuICB2YXIgcHJpbWFyeUF4aXNQb3NpdGlvbiA9IGFuY2hvckVkZ2VPcmlnaW4gKyBjb250ZW50T2Zmc2V0O1xuICB2YXIgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uO1xuICBpZiAoYXJyb3dDb25maWcpIHtcbiAgICBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb24gPSBpc09mZnNldERlY3JlYXNpbmcgPyBwb3BvdmVyU2l6ZU9uUHJpbWFyeUF4aXMgOiAwO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJpbWFyeUF4aXNQb3NpdGlvbjogcHJpbWFyeUF4aXNQb3NpdGlvbixcbiAgICBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb246IHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvblxuICB9O1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBjbGllbnQgcGl4ZWwgY29vcmRpbmF0ZSBvZiBlYWNoIGVkZ2UgZm9yIHRoZSBlbGVtZW50J3MgYm91bmRpbmcgYm94LFxuICogYW5kIHRoZSBib3VuZGluZyBib3gncyB3aWR0aCAmIGhlaWdodFxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLCBsZWZ0OiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCB3aWR0aDogbnVtYmVyfX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRCb3VuZGluZ0JveChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IHJlY3QudG9wLFxuICAgIHJpZ2h0OiByZWN0LnJpZ2h0LFxuICAgIGJvdHRvbTogcmVjdC5ib3R0b20sXG4gICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgd2lkdGg6IHJlY3Qud2lkdGhcbiAgfTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhdmFpbGFibGUgY29udGVudCBzcGFjZSBiZXR3ZWVuIGFuY2hvciBhbmQgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFuY2hvckJvdW5kaW5nQm94IENsaWVudCBib3VuZGluZyBib3ggb2YgdGhlIGFuY2hvciBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGFpbmVyQm91bmRpbmdCb3ggQ2xpZW50IGJvdW5kaW5nIGJveCBvZiB0aGUgY29udGFpbmVyIGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBidWZmZXIgTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYm91bmRpbmcgY29udGFpbmVyXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IERpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBhbmNob3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBvZmZzZXRTaWRlIFNpZGUgdGhlIG9mZnNldCBuZWVkcyB0byBiZSBhcHBsaWVkIHRvLCBvbmVcbiAqICBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLCBsZWZ0OiBudW1iZXJ9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXZhaWxhYmxlU3BhY2UoYW5jaG9yQm91bmRpbmdCb3gsIGNvbnRhaW5lckJvdW5kaW5nQm94LCBidWZmZXIsIG9mZnNldCwgb2Zmc2V0U2lkZSkge1xuICB2YXIgX2dldEJ1ZmZlclZhbHVlczMgPSBnZXRCdWZmZXJWYWx1ZXMoYnVmZmVyKSxcbiAgICBfZ2V0QnVmZmVyVmFsdWVzNCA9IF9zbGljZWRUb0FycmF5KF9nZXRCdWZmZXJWYWx1ZXMzLCA0KSxcbiAgICB0b3BCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFswXSxcbiAgICByaWdodEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXM0WzFdLFxuICAgIGJvdHRvbUJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXM0WzJdLFxuICAgIGxlZnRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFszXTtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IGFuY2hvckJvdW5kaW5nQm94LnRvcCAtIGNvbnRhaW5lckJvdW5kaW5nQm94LnRvcCAtIHRvcEJ1ZmZlciAtIChvZmZzZXRTaWRlID09PSAndG9wJyA/IG9mZnNldCA6IDApLFxuICAgIHJpZ2h0OiBjb250YWluZXJCb3VuZGluZ0JveC5yaWdodCAtIGFuY2hvckJvdW5kaW5nQm94LnJpZ2h0IC0gcmlnaHRCdWZmZXIgLSAob2Zmc2V0U2lkZSA9PT0gJ3JpZ2h0JyA/IG9mZnNldCA6IDApLFxuICAgIGJvdHRvbTogY29udGFpbmVyQm91bmRpbmdCb3guYm90dG9tIC0gYW5jaG9yQm91bmRpbmdCb3guYm90dG9tIC0gYm90dG9tQnVmZmVyIC0gKG9mZnNldFNpZGUgPT09ICdib3R0b20nID8gb2Zmc2V0IDogMCksXG4gICAgbGVmdDogYW5jaG9yQm91bmRpbmdCb3gubGVmdCAtIGNvbnRhaW5lckJvdW5kaW5nQm94LmxlZnQgLSBsZWZ0QnVmZmVyIC0gKG9mZnNldFNpZGUgPT09ICdsZWZ0JyA/IG9mZnNldCA6IDApXG4gIH07XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGZpdCAob3ZlcmxhcCkgb2YgdGhlIGNvbnRlbnQgd2l0aGluIHRoZSBjb250YWluZXIsIGZpdCBpcyBpbiByYW5nZSAwLjAgPT4gMS4wXG4gKiBAcGFyYW0gY29udGVudEJvdW5kaW5nQm94IGJvdW5kaW5nIGJveCBvZiBjb250ZW50IHRvIGNhbGN1bGF0ZSBmaXQgZm9yXG4gKiBAcGFyYW0gY29udGFpbmVyQm91bmRpbmdCb3ggYm91bmRpbmcgYm94IG9mIGNvbnRhaW5lclxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc2libGVGaXQoY29udGVudEJvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCkge1xuICB2YXIgaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0Qm91bmRpbmdCb3hlcyhjb250ZW50Qm91bmRpbmdCb3gsIGNvbnRhaW5lckJvdW5kaW5nQm94KTtcbiAgaWYgKGludGVyc2VjdGlvbi5sZWZ0ID4gaW50ZXJzZWN0aW9uLnJpZ2h0IHx8IGludGVyc2VjdGlvbi50b3AgPiBpbnRlcnNlY3Rpb24udG9wKSB7XG4gICAgLy8gdGhlcmUgaXMgbm8gaW50ZXJzZWN0aW9uLCB0aGUgYm94ZXMgYXJlIGNvbXBsZXRlbHkgc2VwYXJhdGVkIG9uIGF0IGxlYXN0IG9uZSBheGlzXG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgdmFyIGludGVyc2VjdGlvbkFyZWEgPSAoaW50ZXJzZWN0aW9uLnJpZ2h0IC0gaW50ZXJzZWN0aW9uLmxlZnQpICogKGludGVyc2VjdGlvbi5ib3R0b20gLSBpbnRlcnNlY3Rpb24udG9wKTtcbiAgdmFyIGNvbnRlbnRBcmVhID0gKGNvbnRlbnRCb3VuZGluZ0JveC5yaWdodCAtIGNvbnRlbnRCb3VuZGluZ0JveC5sZWZ0KSAqIChjb250ZW50Qm91bmRpbmdCb3guYm90dG9tIC0gY29udGVudEJvdW5kaW5nQm94LnRvcCk7XG4gIHJldHVybiBpbnRlcnNlY3Rpb25BcmVhIC8gY29udGVudEFyZWE7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaW50ZXJzZWN0aW9uIHNwYWNlIGJldHdlZW4gdHdvIGJvdW5kaW5nIGJveGVzXG4gKlxuICogQHBhcmFtIGZpcnN0Qm94XG4gKiBAcGFyYW0gc2Vjb25kQm94XG4gKiBAcmV0dXJucyB7RXVpQ2xpZW50UmVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdEJvdW5kaW5nQm94ZXMoZmlyc3RCb3gsIHNlY29uZEJveCkge1xuICB2YXIgdG9wID0gTWF0aC5tYXgoZmlyc3RCb3gudG9wLCBzZWNvbmRCb3gudG9wKTtcbiAgdmFyIHJpZ2h0ID0gTWF0aC5taW4oZmlyc3RCb3gucmlnaHQsIHNlY29uZEJveC5yaWdodCk7XG4gIHZhciBib3R0b20gPSBNYXRoLm1pbihmaXJzdEJveC5ib3R0b20sIHNlY29uZEJveC5ib3R0b20pO1xuICB2YXIgbGVmdCA9IE1hdGgubWF4KGZpcnN0Qm94LmxlZnQsIHNlY29uZEJveC5sZWZ0KTtcbiAgdmFyIGhlaWdodCA9IE1hdGgubWF4KGJvdHRvbSAtIHRvcCwgMCk7XG4gIHZhciB3aWR0aCA9IE1hdGgubWF4KHJpZ2h0IC0gbGVmdCwgMCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiB0b3AsXG4gICAgcmlnaHQ6IHJpZ2h0LFxuICAgIGJvdHRvbTogYm90dG9tLFxuICAgIGxlZnQ6IGxlZnQsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgd2lkdGg6IHdpZHRoXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdG9wLW1vc3QgZGVmaW5lZCB6LWluZGV4IGluIHRoZSBlbGVtZW50J3MgYW5jZXN0b3IgaGllcmFyY2h5XG4gKiByZWxhdGl2ZSB0byB0aGUgYHRhcmdldGAgZWxlbWVudDsgaWYgbm8gei1pbmRleCBpcyBkZWZpbmVkLCByZXR1cm5zIDBcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH1cbiAqIEBwYXJhbSBjb3VzaW4ge0hUTUxFbGVtZW50fVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRaSW5kZXgoZWxlbWVudCwgY291c2luKSB7XG4gIC8qKlxuICAgKiBmaW5kaW5nIHRoZSB6LWluZGV4IG9mIGBlbGVtZW50YCBpcyBub3QgdGhlIGZ1bGwgc3RvcnlcbiAgICogaXRzIHRoZSBDU1Mgc3RhY2tpbmcgY29udGV4dCB0aGF0IGlzIGltcG9ydGFudFxuICAgKiB0YWtlIHRoaXMgRE9NIGZvciBleGFtcGxlOlxuICAgKiBib2R5XG4gICAqICAgc2VjdGlvblt6LWluZGV4OiAxMDAwXVxuICAgKiAgICAgcFt6LWluZGV4OiA1MDBdXG4gICAqICAgICAgIGJ1dHRvblxuICAgKiAgIGRpdlxuICAgKlxuICAgKiB3aGF0IHotaW5kZXggZG9lcyB0aGUgYGRpdmAgbmVlZCB0byBkaXNwbGF5IG5leHQgdG8gYGJ1dHRvbmA/XG4gICAqIHRoZSBgZGl2YCBhbmQgYHNlY3Rpb25gIGFyZSB3aGVyZSB0aGUgc3RhY2tpbmcgY29udGV4dCBzcGxpdHNcbiAgICogc28gYGRpdmAgbmVlZHMgdG8gY29weSBgc2VjdGlvbmAncyB6LWluZGV4IGluIG9yZGVyIHRvXG4gICAqIGFwcGVhciBuZXh0IHRvIC8gb3ZlciBgYnV0dG9uYFxuICAgKlxuICAgKiBjYWxjdWxhdGUgdGhpcyBieSBzdGFydGluZyBhdCBgYnV0dG9uYCBhbmQgZmluZGluZyBpdHMgb2Zmc2V0UGFyZW50c1xuICAgKiB0aGVuIHdhbGsgdGhlIHBhcmVudHMgZnJvbSB0b3AgLT4gZG93biB1bnRpbCB0aGUgc3RhY2tpbmcgY29udGV4dFxuICAgKiBzcGxpdCBpcyBmb3VuZCwgb3IgaWYgdGhlcmUgaXMgbm8gc3BsaXQgdGhlbiBhIHNwZWNpZmljIHotaW5kZXggaXMgdW5pbXBvcnRhbnRcbiAgICovXG5cbiAgLy8gYnVpbGQgdGhlIGFycmF5IG9mIHRoZSBlbGVtZW50ICsgaXRzIG9mZnNldCBwYXJlbnRzXG4gIHZhciBub2Rlc1RvSW5zcGVjdCA9IFtdO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIG5vZGVzVG9JbnNwZWN0LnB1c2goZWxlbWVudCk7XG5cbiAgICAvLyBBRkFJQ1QgdGhpcyBpcyBhIHZhbGlkIGNhc3QgLSB0aGUgbGliZGVmcyBhcHBlYXIgd3JvbmdcbiAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cbiAgICAvLyBzdG9wIGlmIHRoZXJlIGlzIG5vIHBhcmVudFxuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIHN0b3AgaWYgdGhlIHBhcmVudCBjb250YWlucyB0aGUgcmVsYXRlZCBlbGVtZW50XG4gICAgLy8gYXMgdGhpcyBpcyB0aGUgei1pbmRleCBhbmNlc3RvclxuICAgIGlmIChlbGVtZW50LmNvbnRhaW5zKGNvdXNpbikpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJldmVyc2UgdGhlIG5vZGVzIHRvIHdhbGsgZnJvbSB0b3AgLT4gZWxlbWVudFxuICBub2Rlc1RvSW5zcGVjdC5yZXZlcnNlKCk7XG4gIGZvciAodmFyIF9pID0gMCwgX25vZGVzVG9JbnNwZWN0ID0gbm9kZXNUb0luc3BlY3Q7IF9pIDwgX25vZGVzVG9JbnNwZWN0Lmxlbmd0aDsgX2krKykge1xuICAgIHZhciBub2RlID0gX25vZGVzVG9JbnNwZWN0W19pXTtcbiAgICAvLyBnZXQgdGhpcyBub2RlJ3Mgei1pbmRleCBjc3MgdmFsdWVcbiAgICB2YXIgekluZGV4ID0gd2luZG93LmRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgnei1pbmRleCcpO1xuXG4gICAgLy8gaWYgdGhlIHotaW5kZXggaXMgbm90IGEgbnVtYmVyIChlLmcuIFwiYXV0b1wiKSByZXR1cm4gbnVsbCwgZWxzZSB0aGUgdmFsdWVcbiAgICB2YXIgcGFyc2VkWkluZGV4ID0gcGFyc2VJbnQoekluZGV4LCAxMCk7XG4gICAgaWYgKCFpc05hTihwYXJzZWRaSW5kZXgpKSB7XG4gICAgICByZXR1cm4gcGFyc2VkWkluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBTZWN1cmVzIG91dGJvdW5kIGxpbmtzLiBGb3IgbW9yZSBpbmZvOlxuICogaHR0cHM6Ly93d3cuaml0Yml0LmNvbS9hbGV4YmxvZy8yNTYtdGFyZ2V0YmxhbmstLS10aGUtbW9zdC11bmRlcmVzdGltYXRlZC12dWxuZXJhYmlsaXR5LWV2ZXIvXG4gKi9cblxuZXhwb3J0IHZhciBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgPSBmdW5jdGlvbiBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoX3JlZikge1xuICB2YXIgX3JlZiR0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICB0YXJnZXQgPSBfcmVmJHRhcmdldCA9PT0gdm9pZCAwID8gJycgOiBfcmVmJHRhcmdldCxcbiAgICByZWwgPSBfcmVmLnJlbDtcbiAgdmFyIHJlbFBhcnRzID0gISFyZWwgPyByZWwuc3BsaXQoJyAnKS5maWx0ZXIoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gISFwYXJ0Lmxlbmd0aCAmJiBwYXJ0ICE9PSAnbm9yZWZlcnJlcic7XG4gIH0pIDogW107XG4gIHJlbFBhcnRzLnB1c2goJ25vcmVmZXJyZXInKTtcbiAgaWYgKHRhcmdldC5pbmNsdWRlcygnX2JsYW5rJykgJiYgcmVsUGFydHMuaW5kZXhPZignbm9vcGVuZXInKSA9PT0gLTEpIHtcbiAgICByZWxQYXJ0cy5wdXNoKCdub29wZW5lcicpO1xuICB9XG4gIHJldHVybiByZWxQYXJ0cy5zb3J0KCkuam9pbignICcpLnRyaW0oKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQVNDID0gJ2FzYyc7XG52YXIgREVTQyA9ICdkZXNjJztcbmV4cG9ydCB2YXIgU29ydERpcmVjdGlvbiA9IE9iamVjdC5mcmVlemUoe1xuICBBU0M6IEFTQyxcbiAgREVTQzogREVTQyxcbiAgaXNBc2M6IGZ1bmN0aW9uIGlzQXNjKGRpcmVjdGlvbikge1xuICAgIHJldHVybiBkaXJlY3Rpb24gPT09IEFTQztcbiAgfSxcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZShkaXJlY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5pc0FzYyhkaXJlY3Rpb24pID8gREVTQyA6IEFTQztcbiAgfVxufSk7XG5leHBvcnQgdmFyIFNvcnREaXJlY3Rpb25UeXBlID0gUHJvcFR5cGVzLm9uZU9mKFtBU0MsIERFU0NdKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IF9nZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgX29taXQgZnJvbSAnbG9kYXNoL29taXQnO1xuXG4vLyB3cmFwIHRoZSBsb2Rhc2ggZnVuY3Rpb25zIHRvIGF2b2lkIGhhdmluZyBsb2Rhc2gncyBUUyB0eXBlIGRlZmluaXRpb24gZnJvbSBiZWluZ1xuLy8gZXhwb3J0ZWQsIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIHRoZSBsb2Rhc2ggbmFtZXNwYWNlIGlmIG90aGVyIHZlcnNpb25zIGFyZSB1c2VkXG5cbmV4cG9ydCB2YXIgZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiBfZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKTtcbn07XG5leHBvcnQgdmFyIG9taXQgPSBmdW5jdGlvbiBvbWl0KG9iamVjdCwgcGF0aHMpIHtcbiAgcmV0dXJuIF9vbWl0KG9iamVjdCwgcGF0aHMpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgU29ydERpcmVjdGlvbiB9IGZyb20gJy4vc29ydF9kaXJlY3Rpb24nO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnLi4vb2JqZWN0cyc7XG5leHBvcnQgdmFyIENvbXBhcmF0b3JzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFNvcnREaXJlY3Rpb24uQVNDO1xuICAgIHJldHVybiBmdW5jdGlvbiAodjEsIHYyKSB7XG4gICAgICAvLyBKYXZhU2NyaXB0J3MgY29tcGFyaXNvbiBvZiBudWxsL3VuZGVmaW5lZCAoYW5kIHNvbWUgb3RoZXJzIG5vdCBoYW5kbGVkIGhlcmUpIHZhbHVlcyBhbHdheXMgcmV0dXJucyBgZmFsc2VgXG4gICAgICAvLyAoaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8jc2VjLWFic3RyYWN0LXJlbGF0aW9uYWwtY29tcGFyaXNvbilcbiAgICAgIC8vIHJlc3VsdGluZyBpbiBjYXNlcyB3aGVyZSB2MSA8IHYyIGFuZCB2MSA+IHYyIGFyZSBib3RoIGZhbHNlLlxuICAgICAgLy8gVGhpcyBsZWFkcyB0byB1bnByZWRpY3RhYmxlIHNvcnRpbmcgcmVzdWx0cyBpbiBtdWx0aXBsZSBKUyBlbmdpbmUgc29ydGluZyBhbGdvcml0aG1zXG4gICAgICAvLyB3aGljaCBjYXVzZXMgdW5wcmVkaWN0YWJsZSB1c2VyIGV4cGVyaWVuY2VzLlxuICAgICAgLy8gSW5zdGVhZDpcbiAgICAgIC8vICogMS4gcHVzaCB1bmRlZmluZWQvbnVsbCB2YWx1ZXMgdG8gdGhlIGVuZCBvZiB0aGUgc29ydGVkIGxpc3QsIF9yZWdhcmRsZXNzIG9mIHNvcnQgZGlyZWN0aW9uX1xuICAgICAgLy8gICAgKG5vbi1zb3J0YWJsZSB2YWx1ZXMgYWx3YXlzIGFwcGVhciBhdCB0aGUgZW5kLCBhbmQgc29ydGFibGUgdmFsdWVzIGFyZSBzb3J0ZWQgYXQgdGhlIHRvcClcbiAgICAgIC8vICogMi4gcmVwb3J0IHVuZGVmaW5lZC9udWxsIHZhbHVlcyBhcyBlcXVhbFxuICAgICAgLy8gKiAzLiB3aGVuIGJvdGggdmFsdWVzIGFyZSBjb21wYXJhYmxlIHRoZXkgYXJlIHNvcnRlZCBub3JtYWxseVxuXG4gICAgICB2YXIgdjFJc0NvbXBhcmFibGUgPSB2MSAhPSBudWxsO1xuICAgICAgdmFyIHYySXNDb21wYXJhYmxlID0gdjIgIT0gbnVsbDtcblxuICAgICAgLy8gKiAxLlxuICAgICAgaWYgKHYxSXNDb21wYXJhYmxlICYmICF2MklzQ29tcGFyYWJsZSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAoIXYxSXNDb21wYXJhYmxlICYmIHYySXNDb21wYXJhYmxlKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICAvLyAqIDIuXG4gICAgICBpZiAoIXYxSXNDb21wYXJhYmxlICYmICF2MklzQ29tcGFyYWJsZSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgLy8gKiAzLlxuICAgICAgaWYgKHYxID09PSB2Mikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSB2MSA+IHYyID8gMSA6IC0xO1xuICAgICAgcmV0dXJuIFNvcnREaXJlY3Rpb24uaXNBc2MoZGlyZWN0aW9uKSA/IHJlc3VsdCA6IC0xICogcmVzdWx0O1xuICAgIH07XG4gIH0sXG4gIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoY29tcGFyYXRvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAodjEsIHYyKSB7XG4gICAgICByZXR1cm4gY29tcGFyYXRvcih2MiwgdjEpO1xuICAgIH07XG4gIH0sXG4gIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh2YWx1ZUNhbGxiYWNrLCBjb21wYXJhdG9yKSB7XG4gICAgaWYgKCFjb21wYXJhdG9yKSB7XG4gICAgICBjb21wYXJhdG9yID0gdGhpcy5kZWZhdWx0KFNvcnREaXJlY3Rpb24uQVNDKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvMSwgbzIpIHtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yKHZhbHVlQ2FsbGJhY2sobzEpLCB2YWx1ZUNhbGxiYWNrKG8yKSk7XG4gICAgfTtcbiAgfSxcbiAgcHJvcGVydHk6IGZ1bmN0aW9uIHByb3BlcnR5KHByb3AsIGNvbXBhcmF0b3IpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZShmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBnZXQodmFsdWUsIHByb3ApO1xuICAgIH0sIGNvbXBhcmF0b3IpO1xuICB9XG59KTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxudmFyIEdST1VQX05VTUVSSUMgPSAvXihbXFxkLl0rKShzfG1zKS87XG5mdW5jdGlvbiBnZXRNaWxsaXNlY29uZHModmFsdWUsIHVuaXQpIHtcbiAgLy8gR2l2ZW4gdGhlIHJlZ2V4IG1hdGNoIGFuZCBjYXB0dXJlIGdyb3Vwcywgd2UgY2FuIGFzc3VtZSBgdW5pdGAgdG8gYmUgZWl0aGVyICdzJyBvciAnbXMnXG4gIHZhciBtdWx0aXBsaWVyID0gdW5pdCA9PT0gJ3MnID8gMTAwMCA6IDE7XG4gIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKSAqIG11bHRpcGxpZXI7XG59XG4vLyBGaW5kIENTUyBgdHJhbnNpdGlvbi1kdXJhdGlvbmAgYW5kIGB0cmFuc2l0aW9uLWRlbGF5YCBpbnRlcnZhbHNcbi8vIGFuZCByZXR1cm4gdGhlIHZhbHVlIG9mIGVhY2ggY29tcHV0ZWQgcHJvcGVydHkgaW4gJ21zJ1xuZXhwb3J0IHZhciBnZXRUcmFuc2l0aW9uVGltaW5ncyA9IGZ1bmN0aW9uIGdldFRyYW5zaXRpb25UaW1pbmdzKGVsZW1lbnQpIHtcbiAgdmFyIGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgdmFyIGNvbXB1dGVkRHVyYXRpb24gPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zaXRpb24tZHVyYXRpb24nKTtcbiAgdmFyIGR1cmF0aW9uTWF0Y2hBcnJheSA9IGNvbXB1dGVkRHVyYXRpb24ubWF0Y2goR1JPVVBfTlVNRVJJQyk7XG4gIHZhciBkdXJhdGlvbk1hdGNoID0gZHVyYXRpb25NYXRjaEFycmF5ID8gZ2V0TWlsbGlzZWNvbmRzKGR1cmF0aW9uTWF0Y2hBcnJheVsxXSwgZHVyYXRpb25NYXRjaEFycmF5WzJdKSA6IDA7XG4gIHZhciBjb21wdXRlZERlbGF5ID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCd0cmFuc2l0aW9uLWRlbGF5Jyk7XG4gIHZhciBkZWxheU1hdGNoQXJyYXkgPSBjb21wdXRlZERlbGF5Lm1hdGNoKEdST1VQX05VTUVSSUMpO1xuICB2YXIgZGVsYXlNYXRjaCA9IGRlbGF5TWF0Y2hBcnJheSA/IGdldE1pbGxpc2Vjb25kcyhkZWxheU1hdGNoQXJyYXlbMV0sIGRlbGF5TWF0Y2hBcnJheVsyXSkgOiAwO1xuICByZXR1cm4ge1xuICAgIGR1cmF0aW9uTWF0Y2g6IGR1cmF0aW9uTWF0Y2gsXG4gICAgZGVsYXlNYXRjaDogZGVsYXlNYXRjaFxuICB9O1xufTtcbmZ1bmN0aW9uIGlzRWxlbWVudE5vZGUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5ub2RlVHlwZSA9PT0gZG9jdW1lbnQuRUxFTUVOVF9OT0RFO1xufVxuLy8gVXNlcyBgZ2V0VHJhbnNpdGlvblRpbWluZ3NgIHRvIGZpbmQgdGhlIHRvdGFsIHRyYW5zaXRpb24gdGltZSBmb3Jcbi8vIGFsbCBlbGVtZW50cyB0YXJnZXRlZCBieSBhIE11dGF0aW9uT2JzZXJ2ZXIgY2FsbGJhY2tcbmV4cG9ydCB2YXIgZ2V0V2FpdER1cmF0aW9uID0gZnVuY3Rpb24gZ2V0V2FpdER1cmF0aW9uKHJlY29yZHMpIHtcbiAgcmV0dXJuIHJlY29yZHMucmVkdWNlKGZ1bmN0aW9uICh3YWl0RHVyYXRpb24sIHJlY29yZCkge1xuICAgIC8vIG9ubHkgY2hlY2sgZm9yIENTUyB0cmFuc2l0aW9uIHZhbHVlcyBmb3IgRUxFTUVOVCBub2Rlc1xuICAgIGlmIChpc0VsZW1lbnROb2RlKHJlY29yZC50YXJnZXQpKSB7XG4gICAgICB2YXIgX2dldFRyYW5zaXRpb25UaW1pbmdzID0gZ2V0VHJhbnNpdGlvblRpbWluZ3MocmVjb3JkLnRhcmdldCksXG4gICAgICAgIGR1cmF0aW9uTWF0Y2ggPSBfZ2V0VHJhbnNpdGlvblRpbWluZ3MuZHVyYXRpb25NYXRjaCxcbiAgICAgICAgZGVsYXlNYXRjaCA9IF9nZXRUcmFuc2l0aW9uVGltaW5ncy5kZWxheU1hdGNoO1xuICAgICAgd2FpdER1cmF0aW9uID0gTWF0aC5tYXgod2FpdER1cmF0aW9uLCBkdXJhdGlvbk1hdGNoICsgZGVsYXlNYXRjaCk7XG4gICAgfVxuICAgIHJldHVybiB3YWl0RHVyYXRpb247XG4gIH0sIDApO1xufTtcblxuLy8gVXNlcyBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCB0byBwZXJmb3JtIGEgZ2l2ZW4gY2FsbGJhY2sgYWZ0ZXIgYSBzcGVjaWZpZWQgd2FpdGluZyBwZXJpb2RcbmV4cG9ydCB2YXIgcGVyZm9ybU9uRnJhbWUgPSBmdW5jdGlvbiBwZXJmb3JtT25GcmFtZSh3YWl0RHVyYXRpb24sIHRvUGVyZm9ybSkge1xuICBpZiAod2FpdER1cmF0aW9uID4gMCkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHZhciBlbmRUaW1lID0gc3RhcnRUaW1lICsgd2FpdER1cmF0aW9uO1xuICAgIHZhciBvbkZyYW1lID0gZnVuY3Rpb24gb25GcmFtZSgpIHtcbiAgICAgIHRvUGVyZm9ybSgpO1xuICAgICAgaWYgKGVuZFRpbWUgPiBEYXRlLm5vdygpKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcbiAgfVxufTtcblxuLy8gQ29udmVuaWVuY2UgbWV0aG9kIGZvciBjb21iaW5pbmcgdGhlIHJlc3VsdCBvZiAnZ2V0V2FpdER1cmF0aW9uJyBkaXJlY3RseSB3aXRoICdwZXJmb3JtT25GcmFtZSdcbmV4cG9ydCB2YXIgZ2V0RHVyYXRpb25BbmRQZXJmb3JtT25GcmFtZSA9IGZ1bmN0aW9uIGdldER1cmF0aW9uQW5kUGVyZm9ybU9uRnJhbWUocmVjb3JkcywgdG9QZXJmb3JtKSB7XG4gIHBlcmZvcm1PbkZyYW1lKGdldFdhaXREdXJhdGlvbihyZWNvcmRzKSwgdG9QZXJmb3JtKTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdERlc3RydWN0dXJpbmdFbXB0eSh0KSB7IGlmIChudWxsID09IHQpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgZGVzdHJ1Y3R1cmUgXCIgKyB0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9jdXNSaW5nLCBldWlTY3JvbGxCYXJTdHlsZXMgfSBmcm9tICcuLi9taXhpbnMnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBzaGFkZSwgdGludCwgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2xvcic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IHJlc2V0U3R5bGVzIGFzIHJlc2V0IH0gZnJvbSAnLi9yZXNldCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlHbG9iYWxTdHlsZXMgPSBmdW5jdGlvbiBFdWlHbG9iYWxTdHlsZXMoX3JlZikge1xuICBfb2JqZWN0RGVzdHJ1Y3R1cmluZ0VtcHR5KF9yZWYpO1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGU7XG4gIHZhciBiYXNlID0gZXVpVGhlbWUuYmFzZSxcbiAgICBjb2xvcnMgPSBldWlUaGVtZS5jb2xvcnMsXG4gICAgZm9udCA9IGV1aVRoZW1lLmZvbnQ7XG5cbiAgLyoqXG4gICAqIERlY2xhcmluZyB0aGUgdG9wIGxldmVsIHNjcm9sbGJhciBjb2xvcnMgdG8gbWF0Y2ggdGhlIHRoZW1lIGFsc28gcmVxdWlyZXMgc2V0dGluZyB0aGUgc2l6ZXMgb24gQ2hyb21lXG4gICAqIHNvIHRoYXQgaXQga25vd3MgdG8gdXNlIGN1c3RvbSBzdHlsZXMuIFRoZXJlZm9yZSwgd2UganVzdCByZXVzZSB0aGUgc2FtZSBzY3JvbGxiYXIgbWl4aW4gd2l0aCB0aGljayBzaXplLlxuICAgKi9cbiAgdmFyIHNjcm9sbGJhclN0eWxlcyA9IGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZUNvbnRleHQsIHtcbiAgICB0cmFja0NvbG9yOiBjb2xvck1vZGUgPT09ICdMSUdIVCcgPyBzaGFkZShjb2xvcnMuYm9keSwgMC4wMykgOiB0aW50KGNvbG9ycy5ib2R5LCAwLjA3KSxcbiAgICB3aWR0aDogJ2F1dG8nXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGlzIGZvbnQgcmVzZXQgc2V0cyBhbGwgb3VyIGJhc2UgZm9udC90eXBvZ3JhcGh5IHJlbGF0ZWQgcHJvcGVydGllc1xuICAgKiB0aGF0IGFyZSBuZWVkZWQgdG8gb3ZlcnJpZGUgYnJvd3Nlci1zcGVjaWZpYyBlbGVtZW50IHNldHRpbmdzLlxuICAgKi9cbiAgdmFyIGZvbnRCb2R5U2NhbGUgPSBmb250LnNjYWxlW2ZvbnQuYm9keS5zY2FsZV07XG4gIHZhciBmb250UmVzZXQgPSB7XG4gICAgZm9udEZhbWlseTogZm9udC5mYW1pbHksXG4gICAgZm9udFNpemU6IFwiXCIuY29uY2F0KGZvbnQuZGVmYXVsdFVuaXRzID09PSAncHgnID8gZm9udEJvZHlTY2FsZSAqIGJhc2UgOiBmb250Qm9keVNjYWxlKS5jb25jYXQoZm9udC5kZWZhdWx0VW5pdHMpLFxuICAgIGxpbmVIZWlnaHQ6IGJhc2UgLyAoZm9udEJvZHlTY2FsZSAqIGJhc2UpLFxuICAgIGZvbnRXZWlnaHQ6IGZvbnQud2VpZ2h0W2ZvbnQuYm9keS53ZWlnaHRdXG4gIH07XG5cbiAgLyoqXG4gICAqIEZpbmFsIHN0eWxlc1xuICAgKi9cbiAgdmFyIHN0eWxlcyA9IC8qI19fUFVSRV9fKi9jc3MocmVzZXQsIFwiIGh0bWx7XCIsIHNjcm9sbGJhclN0eWxlcywgXCIgXCIsIGZvbnRSZXNldCwgXCIgdGV4dC1zaXplLWFkanVzdDoxMDAlO2ZvbnQta2VybmluZzpub3JtYWw7XCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiIGJhY2tncm91bmQtY29sb3I6XCIsIGNvbG9ycy5ib2R5LCBcIjtjb2xvcjpcIiwgY29sb3JzLnRleHQsIFwiO31jb2RlLHByZSxrYmQsc2FtcHtmb250LWZhbWlseTpcIiwgZm9udC5mYW1pbHlDb2RlLCBcIjt9aW5wdXQsdGV4dGFyZWEsc2VsZWN0e1wiLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGZvbnRSZXNldCksIHt9LCB7XG4gICAgZm9udFNpemU6ICcxcmVtJyAvLyBJbmhlcml0IGZyb20gaHRtbCByb290XG4gIH0pLCBcIjt9c2VsZWN0OmRpc2FibGVke29wYWNpdHk6MTt9YnV0dG9ue2ZvbnQtZmFtaWx5OlwiLCBmb250LmZhbWlseSwgXCI7fWVte2ZvbnQtc3R5bGU6aXRhbGljO31zdHJvbmd7Zm9udC13ZWlnaHQ6XCIsIGZvbnQud2VpZ2h0LmJvbGQsIFwiO30qOmZvY3Vze1wiLCBldWlGb2N1c1JpbmcoZXVpVGhlbWVDb250ZXh0KSwgXCI7fTo6c2VsZWN0aW9ue2JhY2tncm91bmQ6XCIsIHRyYW5zcGFyZW50aXplKGNvbG9ycy5wcmltYXJ5LCBjb2xvck1vZGUgPT09ICdMSUdIVCcgPyAwLjEgOiAwLjIpLCBcIjt9YXtjb2xvcjpcIiwgY29sb3JzLnByaW1hcnlUZXh0LCBcIjsmLCY6aG92ZXIsJjpmb2N1c3t0ZXh0LWRlY29yYXRpb246bm9uZTt9fS5ldWlCb2R5LWhhc1BvcnRhbENvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7fTtsYWJlbDpzdHlsZXM7XCIpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChHbG9iYWwsIHtcbiAgICBzdHlsZXM6IHN0eWxlc1xuICB9KTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQsIHRpbnRPclNoYWRlLCB0cmFuc3BhcmVudGl6ZSwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5leHBvcnQgdmFyIEJBQ0tHUk9VTkRfQ09MT1JTID0gWyd0cmFuc3BhcmVudCcsICdwbGFpbicsICdzdWJkdWVkJywgJ2FjY2VudCcsICdwcmltYXJ5JywgJ3N1Y2Nlc3MnLCAnd2FybmluZycsICdkYW5nZXInXTtcbi8qKlxuICogQHJldHVybnMgQSBzaW5nbGUgYmFja2dyb3VuZCBjb2xvciB3aXRoIG9wdGlvbmFsIGFscGhhIHRyYW5zcGFyZW5jeVxuICovXG5leHBvcnQgdmFyIGV1aUJhY2tncm91bmRDb2xvciA9IGZ1bmN0aW9uIGV1aUJhY2tncm91bmRDb2xvcihfcmVmLCBjb2xvcikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlO1xuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgIG1ldGhvZCA9IF9yZWYyLm1ldGhvZDtcbiAgaWYgKGNvbG9yID09PSAndHJhbnNwYXJlbnQnKSByZXR1cm4gJ3RyYW5zcGFyZW50JztcbiAgaWYgKG1ldGhvZCA9PT0gJ3RyYW5zcGFyZW50Jykge1xuICAgIGlmIChjb2xvciA9PT0gJ3BsYWluJykge1xuICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgMC4yKTtcbiAgICB9IGVsc2UgaWYgKGNvbG9yID09PSAnc3ViZHVlZCcpIHtcbiAgICAgIHJldHVybiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAwLjQpIDogdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUsIDAuMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnNbY29sb3JdLCAwLjEpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgX3RpbnRPclNoYWRlID0gZnVuY3Rpb24gX3RpbnRPclNoYWRlKGNvbG9yKSB7XG4gICAgICByZXR1cm4gY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShjb2xvciwgMC44KSA6IHRpbnQoY29sb3IsIDAuOSk7XG4gICAgfTtcbiAgICBzd2l0Y2ggKGNvbG9yKSB7XG4gICAgICBjYXNlICdwbGFpbic6XG4gICAgICAgIHJldHVybiBldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZTtcbiAgICAgIGNhc2UgJ3N1YmR1ZWQnOlxuICAgICAgICByZXR1cm4gZXVpVGhlbWUuY29sb3JzLmJvZHk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gX3RpbnRPclNoYWRlKGV1aVRoZW1lLmNvbG9yc1tjb2xvcl0pO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgbWFwIG9mIGNvbG9yIGtleXMgdG8gY29sb3IgdmFsdWVzLCBjYXRlZ29yaXplZCBieVxuICogb3BhcXVlIChkZWZhdWx0KSB2cyB0cmFuc3BhcmVuY3kgKGhvdmVyL2ZvY3VzIHN0YXRlcykgbWV0aG9kcy5cbiAqIGUuZy4ge1xuICogIG9wYXF1ZTogeyBkYW5nZXI6ICcjMDAwJywgc3VjY2VzczogJyNmZmYnLCAuLi4gfSxcbiAqICB0cmFuc3BhcmVudDogeyBkYW5nZXI6ICdyZ2JhKDAsMCwwLDAuMSknLCBzdWNjZXNzOiAncmdiYSgyNTUsMjU1LDI1NSwwLjEpJywgLi4uIH0sXG4gKiB9XG4gKi9cbnZhciBfZXVpQmFja2dyb3VuZENvbG9yTWFwID0gZnVuY3Rpb24gX2V1aUJhY2tncm91bmRDb2xvck1hcChldWlUaGVtZUNvbnRleHQpIHtcbiAgcmV0dXJuIHtcbiAgICBvcGFxdWU6IEJBQ0tHUk9VTkRfQ09MT1JTLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjb2xvcikge1xuICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWNjKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgY29sb3IsIGV1aUJhY2tncm91bmRDb2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKSkpO1xuICAgIH0sIHt9KSxcbiAgICB0cmFuc3BhcmVudDogQkFDS0dST1VORF9DT0xPUlMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGNvbG9yKSB7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhY2MpLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBjb2xvciwgZXVpQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IsIHtcbiAgICAgICAgbWV0aG9kOiAndHJhbnNwYXJlbnQnXG4gICAgICB9KSkpO1xuICAgIH0sIHt9KVxuICB9O1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpQmFja2dyb3VuZENvbG9yID0gZnVuY3Rpb24gdXNlRXVpQmFja2dyb3VuZENvbG9yKGNvbG9yKSB7XG4gIHZhciBfcmVmMyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgbWV0aG9kID0gX3JlZjMubWV0aG9kO1xuICB2YXIgYmFja2dyb3VuZENvbG9yTWFwID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoX2V1aUJhY2tncm91bmRDb2xvck1hcCk7XG4gIHJldHVybiBiYWNrZ3JvdW5kQ29sb3JNYXBbbWV0aG9kIHx8ICdvcGFxdWUnXVtjb2xvcl07XG59O1xuXG4vKipcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgY29sb3Iga2V5cyB0byBDU1MsXG4gKiBlLmcuIHsgZGFuZ2VyOiBjc3NgYCwgc3VjY2VzczogY3NzYGAsIC4uLiB9XG4gKi9cbnZhciBfZXVpQmFja2dyb3VuZENvbG9ycyA9IGZ1bmN0aW9uIF9ldWlCYWNrZ3JvdW5kQ29sb3JzKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4gQkFDS0dST1VORF9DT0xPUlMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGNvbG9yKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWNjKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgY29sb3IsIC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvciksIFwiO2xhYmVsOlwiLCBjb2xvciwgXCI7XCIpKSk7XG4gIH0sIHt9KTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aUJhY2tncm91bmRDb2xvckNTUyA9IGZ1bmN0aW9uIHVzZUV1aUJhY2tncm91bmRDb2xvckNTUygpIHtcbiAgcmV0dXJuIHVzZUV1aU1lbW9pemVkU3R5bGVzKF9ldWlCYWNrZ3JvdW5kQ29sb3JzKTtcbn07XG5cbi8qKlxuICogQm9yZGVyIGNvbG9yc1xuICovXG5cbmV4cG9ydCB2YXIgZXVpQm9yZGVyQ29sb3IgPSBmdW5jdGlvbiBldWlCb3JkZXJDb2xvcihfcmVmNCwgY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gX3JlZjQuY29sb3JNb2RlO1xuICBzd2l0Y2ggKGNvbG9yKSB7XG4gICAgY2FzZSAndHJhbnNwYXJlbnQnOlxuICAgIGNhc2UgJ3BsYWluJzpcbiAgICBjYXNlICdzdWJkdWVkJzpcbiAgICAgIHJldHVybiBldWlUaGVtZS5ib3JkZXIuY29sb3I7XG4gICAgY2FzZSAnd2FybmluZyc6XG4gICAgICByZXR1cm4gdGludE9yU2hhZGUoZXVpVGhlbWUuY29sb3JzLndhcm5pbmcsIDAuNCwgY29sb3JNb2RlKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRpbnRPclNoYWRlKGV1aVRoZW1lLmNvbG9yc1tjb2xvcl0sIDAuNiwgY29sb3JNb2RlKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgbWFwIG9mIGNvbG9yIGtleXMgdG8gQ1NTLFxuICogZS5nLiB7IGRhbmdlcjogY3NzYGAsIHN1Y2Nlc3M6IGNzc2BgLCAuLi4gfVxuICovXG52YXIgX2V1aUJvcmRlckNvbG9ycyA9IGZ1bmN0aW9uIF9ldWlCb3JkZXJDb2xvcnMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiBCQUNLR1JPVU5EX0NPTE9SUy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgY29sb3IpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhY2MpLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBjb2xvciwgLyojX19QVVJFX18qL2NzcyhcImJvcmRlci1jb2xvcjpcIiwgZXVpQm9yZGVyQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvciksIFwiO2xhYmVsOlwiLCBjb2xvciwgXCI7XCIpKSk7XG4gIH0sIHt9KTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aUJvcmRlckNvbG9yQ1NTID0gZnVuY3Rpb24gdXNlRXVpQm9yZGVyQ29sb3JDU1MoKSB7XG4gIHJldHVybiB1c2VFdWlNZW1vaXplZFN0eWxlcyhfZXVpQm9yZGVyQ29sb3JzKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUnO1xuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2xvcic7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuLyoqXG4gKiBTZXQgc2Nyb2xsIGJhciBhcHBlYXJhbmNlIG9uIENocm9tZSAoYW5kIGZpcmVmb3gpLlxuICogQWxsIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsIGFuZCBkZWZhdWx0IHRvIHNwZWNpZmljIGdsb2JhbCBzZXR0aW5ncy5cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNjcm9sbEJhclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVNjcm9sbEJhclN0eWxlcyhfcmVmKSB7XG4gIHZhciBfcmVmJGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICBjb2xvcnMgPSBfcmVmJGV1aVRoZW1lLmNvbG9ycyxcbiAgICBzaXplID0gX3JlZiRldWlUaGVtZS5zaXplO1xuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF90aHVtYkNvbG9yID0gX3JlZjIudGh1bWJDb2xvcixcbiAgICBfcmVmMiR0cmFja0NvbG9yID0gX3JlZjIudHJhY2tDb2xvcixcbiAgICB0cmFja0NvbG9yID0gX3JlZjIkdHJhY2tDb2xvciA9PT0gdm9pZCAwID8gJ3RyYW5zcGFyZW50JyA6IF9yZWYyJHRyYWNrQ29sb3IsXG4gICAgX3JlZjIkd2lkdGggPSBfcmVmMi53aWR0aCxcbiAgICB3aWR0aCA9IF9yZWYyJHdpZHRoID09PSB2b2lkIDAgPyAndGhpbicgOiBfcmVmMiR3aWR0aCxcbiAgICBfc2l6ZSA9IF9yZWYyLnNpemUsXG4gICAgX2Nvcm5lciA9IF9yZWYyLmNvcm5lcjtcbiAgLy8gU2V0IGRlZmF1bHRzIGZyb20gdGhlbWVcbiAgdmFyIHRodW1iQ29sb3IgPSBfdGh1bWJDb2xvciB8fCB0cmFuc3BhcmVudGl6ZShjb2xvcnMuZGFya1NoYWRlLCAwLjUpO1xuICB2YXIgc2Nyb2xsQmFyU2l6ZSA9IF9zaXplIHx8IHNpemUuYmFzZTtcbiAgdmFyIHNjcm9sbEJhckNvcm5lciA9IF9jb3JuZXIgfHwgd2lkdGggPT09ICd0aGluJyA/IFwiY2FsYyhcIi5jb25jYXQoc2l6ZS5zLCBcIiAqIDAuNzUpXCIpIDogc2l6ZS54cztcblxuICAvLyBGaXJlZm94J3Mgc2Nyb2xsYmFyIGNvbG9yaW5nIGNhc2NhZGVzLCBidXQgdGhlIHNpemluZyBkb2VzIG5vdCxcbiAgLy8gc28gaXQncyBiZWluZyBhZGRlZCB0byB0aGlzIG1peGluIGZvciBhbGxvd2luZyBzdXBwb3J0IHdoZXJldmVyIGN1c3RvbSBzY3JvbGxiYXJzIGFyZVxuICB2YXIgZmlyZWZveFN1cHBvcnQgPSBcInNjcm9sbGJhci1jb2xvcjogXCIuY29uY2F0KHRodW1iQ29sb3IsIFwiIFwiKS5jb25jYXQodHJhY2tDb2xvciwgXCI7XCIpO1xuICByZXR1cm4gXCJzY3JvbGxiYXItd2lkdGg6IFwiLmNvbmNhdCh3aWR0aCwgXCI7XFxuXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgc2Nyb2xsQmFyU2l6ZSksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCBzY3JvbGxCYXJTaXplKSwgXCJcXG4gICAgfVxcblxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdCh0aHVtYkNvbG9yLCBcIjtcXG4gICAgICBiYWNrZ3JvdW5kLWNsaXA6IGNvbnRlbnQtYm94O1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IFwiKS5jb25jYXQoc2Nyb2xsQmFyU2l6ZSwgXCI7XFxuICAgICAgYm9yZGVyOiBcIikuY29uY2F0KHNjcm9sbEJhckNvcm5lciwgXCIgc29saWQgXCIpLmNvbmNhdCh0cmFja0NvbG9yLCBcIjtcXG4gICAgfVxcblxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIsXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIikuY29uY2F0KHRyYWNrQ29sb3IsIFwiO1xcbiAgICB9XFxuXFxuICAgIFwiKS5jb25jYXQoZmlyZWZveFN1cHBvcnQsIFwiXFxuICBcIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlTY3JvbGxCYXIgPSBmdW5jdGlvbiB1c2VFdWlTY3JvbGxCYXIob3B0aW9ucykge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogKklOVEVSTkFMKlxuICogT3ZlcmZsb3cgc2hhZG93IG1hc2tzIGZvciB1c2UgaW4gWVNjcm9sbCBhbmQgWFNjcm9sbCBoZWxwZXJzXG4gKi9cblxudmFyIGV1aU92ZXJmbG93U2hhZG93U3R5bGVzID0gZnVuY3Rpb24gZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMoX3JlZjMpIHtcbiAgdmFyIHNpemUgPSBfcmVmMy5ldWlUaGVtZS5zaXplO1xuICB2YXIgX3JlZjQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF9kaXJlY3Rpb24gPSBfcmVmNC5kaXJlY3Rpb24sXG4gICAgX3NpZGUgPSBfcmVmNC5zaWRlO1xuICB2YXIgZGlyZWN0aW9uID0gX2RpcmVjdGlvbiB8fCAneSc7XG4gIHZhciBzaWRlID0gX3NpZGUgfHwgJ2JvdGgnO1xuICB2YXIgaGlkZUhlaWdodCA9IHNpemUucztcbiAgdmFyIGdyYWRpZW50U3RhcnQgPSBcIlxcbiAgXCIuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAwLjEpLCBcIiAwJSxcXG4gIFwiKS5jb25jYXQodHJhbnNwYXJlbnRpemUoJ3JlZCcsIDEpLCBcIiBcIikuY29uY2F0KGhpZGVIZWlnaHQsIFwiXFxuICBcIik7XG4gIHZhciBncmFkaWVudEVuZCA9IFwiXFxuICBcIi5jb25jYXQodHJhbnNwYXJlbnRpemUoJ3JlZCcsIDEpLCBcIiBjYWxjKDEwMCUgLSBcIikuY29uY2F0KGhpZGVIZWlnaHQsIFwiKSxcXG4gIFwiKS5jb25jYXQodHJhbnNwYXJlbnRpemUoJ3JlZCcsIDAuMSksIFwiIDEwMCVcXG4gIFwiKTtcbiAgdmFyIGdyYWRpZW50ID0gJyc7XG4gIGlmIChzaWRlKSB7XG4gICAgaWYgKHNpZGUgPT09ICdib3RoJykge1xuICAgICAgZ3JhZGllbnQgPSBcIlwiLmNvbmNhdChncmFkaWVudFN0YXJ0LCBcIiwgXCIpLmNvbmNhdChncmFkaWVudEVuZCk7XG4gICAgfSBlbHNlIGlmIChzaWRlID09PSAnc3RhcnQnKSB7XG4gICAgICBncmFkaWVudCA9IFwiXCIuY29uY2F0KGdyYWRpZW50U3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBncmFkaWVudCA9IFwiXCIuY29uY2F0KGdyYWRpZW50RW5kKTtcbiAgICB9XG4gIH1cblxuICAvLyBDaHJvbWUrRWRnZSBoYXMgYSB2ZXJ5IGJpemFycmUgZWRnZSBjYXNlIGJ1ZyB3aGVyZSBgbWFzay1pbWFnZWAgc3RvcHMgd29ya2luZ1xuICAvLyBUaGlzIHdvcmthcm91bmQgZm9yY2VzIGEgc3RhY2tpbmcgY29udGV4dCBvbiB0aGUgc2Nyb2xsaW5nIGNvbnRhaW5lciwgd2hpY2hcbiAgLy8gaG9wZWZ1bGx5IGFkZHJlc3NlcyB0aGUgYnVnLiBAc2VlOlxuICAvLyAtIGh0dHBzOi8vaXNzdWVzLmNocm9taXVtLm9yZy9pc3N1ZXMvNDA3Nzg1NDFcbiAgLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9raWJhbmEvaXNzdWVzLzE4MDgyOFxuICAvLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9wdWxsLzYzNDMjaXNzdWVjb21tZW50LTEzMDI3MzIwMjFcbiAgdmFyIGNocm9taXVtTWFza1dvcmthcm91bmQgPSAndHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOyc7XG4gIGlmIChkaXJlY3Rpb24gPT09ICd5Jykge1xuICAgIHJldHVybiBcIm1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIFwiLmNvbmNhdChncmFkaWVudCwgXCIpOyBcIikuY29uY2F0KGNocm9taXVtTWFza1dvcmthcm91bmQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIm1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgXCIuY29uY2F0KGdyYWRpZW50LCBcIik7IFwiKS5jb25jYXQoY2hyb21pdW1NYXNrV29ya2Fyb3VuZCk7XG4gIH1cbn07XG5cbi8qKlxuICogMS4gRm9jdXMgcmluZ3Mgc2hvdWxkbid0IGJlIHZpc2libGUgb24gc2Nyb2xsYWJsZSByZWdpb25zLCBidXQgYTExeSByZXF1aXJlcyB0aGVtIHRvIGJlIGZvY3VzYWJsZS5cbiAqICAgIEJyb3dzZXIncyBzdXBwb3J0aW5nIGA6Zm9jdXMtdmlzaWJsZWAgd2lsbCBzdGlsbCBzaG93IG91dGxpbmUgb24ga2V5Ym9hcmQgZm9jdXMgb25seS5cbiAqICAgIE90aGVycyBsaWtlIFNhZmFyaSwgd29uJ3Qgc2hvdyBhbnl0aGluZyBhdCBhbGwuXG4gKi9cblxuZXhwb3J0IHZhciBldWlZU2Nyb2xsID0gZnVuY3Rpb24gZXVpWVNjcm9sbChldWlUaGVtZSkge1xuICB2YXIgX3JlZjUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIGhlaWdodCA9IF9yZWY1LmhlaWdodDtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQoZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lKSwgXCJcXG4gIFwiKS5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0JywgaGVpZ2h0IHx8ICcxMDAlJyksIFwiXFxuICBcIikuY29uY2F0KGxvZ2ljYWxDU1NXaXRoRmFsbGJhY2soJ292ZXJmbG93LXknLCAnYXV0bycpLCBcIlxcbiAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrKCdvdmVyZmxvdy14JywgJ2hpZGRlbicpLCBcIlxcbiAgJjpmb2N1cyB7XFxuICAgIG91dGxpbmU6IG5vbmU7IC8qIDEgKi9cXG4gIH1cXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlZU2Nyb2xsID0gZnVuY3Rpb24gdXNlRXVpWVNjcm9sbCgpIHtcbiAgdmFyIF9yZWY2ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICBoZWlnaHQgPSBfcmVmNi5oZWlnaHQ7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlZU2Nyb2xsKGV1aVRoZW1lLCB7XG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfSk7XG59O1xuZXhwb3J0IHZhciBldWlZU2Nyb2xsV2l0aFNoYWRvd3MgPSBmdW5jdGlvbiBldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpIHtcbiAgdmFyIF9yZWY3ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBoZWlnaHQgPSBfcmVmNy5oZWlnaHQsXG4gICAgX3JlZjckc2lkZSA9IF9yZWY3LnNpZGUsXG4gICAgc2lkZSA9IF9yZWY3JHNpZGUgPT09IHZvaWQgMCA/ICdib3RoJyA6IF9yZWY3JHNpZGU7XG4gIHJldHVybiBcIlxcbiAgXCIuY29uY2F0KGV1aVlTY3JvbGwoZXVpVGhlbWUsIHtcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9KSwgXCJcXG4gIFwiKS5jb25jYXQoZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMoZXVpVGhlbWUsIHtcbiAgICBkaXJlY3Rpb246ICd5JyxcbiAgICBzaWRlOiBzaWRlXG4gIH0pLCBcIlxcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVlTY3JvbGxXaXRoU2hhZG93cyA9IGZ1bmN0aW9uIHVzZUV1aVlTY3JvbGxXaXRoU2hhZG93cygpIHtcbiAgdmFyIF9yZWY4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICBoZWlnaHQgPSBfcmVmOC5oZWlnaHQ7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUsIHtcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9KTtcbn07XG5leHBvcnQgdmFyIGV1aVhTY3JvbGwgPSBmdW5jdGlvbiBldWlYU2Nyb2xsKGV1aVRoZW1lKSB7XG4gIHJldHVybiBcIlxcbiAgXCIuY29uY2F0KGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZSksIFwiXFxuICBcIikuY29uY2F0KGxvZ2ljYWxDU1NXaXRoRmFsbGJhY2soJ292ZXJmbG93LXgnLCAnYXV0bycpLCBcIlxcbiAgJjpmb2N1cyB7XFxuICAgIG91dGxpbmU6IG5vbmU7IC8qIDEgKi9cXG4gIH1cXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlYU2Nyb2xsID0gZnVuY3Rpb24gdXNlRXVpWFNjcm9sbCgpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVhTY3JvbGwoZXVpVGhlbWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpWFNjcm9sbFdpdGhTaGFkb3dzID0gZnVuY3Rpb24gZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKSB7XG4gIHJldHVybiBcIlxcbiAgXCIuY29uY2F0KGV1aVhTY3JvbGwoZXVpVGhlbWUpLCBcIlxcbiAgXCIpLmNvbmNhdChldWlPdmVyZmxvd1NoYWRvd1N0eWxlcyhldWlUaGVtZSwge1xuICAgIGRpcmVjdGlvbjogJ3gnXG4gIH0pLCBcIlxcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVhTY3JvbGxXaXRoU2hhZG93cyA9IGZ1bmN0aW9uIHVzZUV1aVhTY3JvbGxXaXRoU2hhZG93cygpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVhTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSk7XG59O1xuZXhwb3J0IHZhciBldWlPdmVyZmxvd1Njcm9sbCA9IGZ1bmN0aW9uIGV1aU92ZXJmbG93U2Nyb2xsKGV1aVRoZW1lKSB7XG4gIHZhciBfcmVmOSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgZGlyZWN0aW9uID0gX3JlZjkuZGlyZWN0aW9uLFxuICAgIF9yZWY5JG1hc2sgPSBfcmVmOS5tYXNrLFxuICAgIG1hc2sgPSBfcmVmOSRtYXNrID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY5JG1hc2s7XG4gIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbWFzayA/IGV1aVlTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSkgOiBldWlZU2Nyb2xsKGV1aVRoZW1lKTtcbiAgICBjYXNlICd4JzpcbiAgICAgIHJldHVybiBtYXNrID8gZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKSA6IGV1aVhTY3JvbGwoZXVpVGhlbWUpO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb25zb2xlLndhcm4oJ1BsZWFzZSBwcm92aWRlIGEgdmFsaWQgZGlyZWN0aW9uIG9wdGlvbiB0byB1c2VFdWlPdmVyZmxvd1Njcm9sbCcpO1xuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuZXhwb3J0IHZhciB1c2VFdWlPdmVyZmxvd1Njcm9sbCA9IGZ1bmN0aW9uIHVzZUV1aU92ZXJmbG93U2Nyb2xsKGRpcmVjdGlvbikge1xuICB2YXIgbWFzayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlPdmVyZmxvd1Njcm9sbChldWlUaGVtZSwge1xuICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgIG1hc2s6IG1hc2tcbiAgfSk7XG59O1xuXG4vKipcbiAqIEZvciBxdWlja2x5IGFwcGx5aW5nIGEgZnVsbC1oZWlnaHQgZWxlbWVudCB3aGV0aGVyIHVzaW5nIGZsZXggb3Igbm90XG4gKi9cbmV4cG9ydCB2YXIgZXVpRnVsbEhlaWdodCA9IGZ1bmN0aW9uIGV1aUZ1bGxIZWlnaHQoKSB7XG4gIHJldHVybiBcIlxcbiAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiXFxuICBmbGV4OiAxIDEgYXV0bztcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuXCIpO1xufTtcblxuLyoqXG4gKiBBIGNvbnN0YW50IHN0b3JpbmcgdGhlIHN1cHBvcnQgZm9yIHRoZSBgOmhhcygpYCBzZWxlY3RvciB0aHJvdWdoIGFcbiAqIG1lZGlhIHF1ZXJ5IHRoYXQgd2lsbCBvbmx5IGFwcGx5IHRoZSBjb250ZW50IGl0IGlzIHN1cHBvcnRlZC5cbiAqL1xuZXhwb3J0IHZhciBldWlTdXBwb3J0c0hhcyA9ICdAc3VwcG9ydHMoc2VsZWN0b3IoOmhhcyhwKSkpJzsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUnO1xuZXhwb3J0IHZhciBQQURESU5HX1NJWkVTID0gWydub25lJywgJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJ107XG4vKipcbiAqIEdldCBhIHNpbmdsZSBwYWRkaW5nIHNpemVcbiAqL1xuXG5leHBvcnQgdmFyIGV1aVBhZGRpbmdTaXplID0gZnVuY3Rpb24gZXVpUGFkZGluZ1NpemUoX3JlZiwgc2l6ZSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICBzd2l0Y2ggKHNpemUpIHtcbiAgICBjYXNlICdub25lJzpcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIGV1aVRoZW1lLnNpemUuYmFzZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV1aVRoZW1lLnNpemVbc2l6ZV07XG4gIH1cbn07XG5cbi8qKlxuICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBwYWRkaW5nIHNpemUga2V5cyB0byBwYWRkaW5nIHZhbHVlcyxcbiAqIGUuZy4geyBzOiAnOHB4JywgbTogJzE2cHgnLCAuLi4gfVxuICovXG52YXIgX2dldEV1aVBhZGRpbmdTaXplID0gZnVuY3Rpb24gX2dldEV1aVBhZGRpbmdTaXplKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4gUEFERElOR19TSVpFUy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlc0FjYywgc2l6ZSkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlc0FjYyksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIHNpemUsIHNpemUgPT09ICdub25lJyA/IG51bGwgOiBldWlQYWRkaW5nU2l6ZShldWlUaGVtZUNvbnRleHQsIHNpemUpKSk7XG4gIH0sIHt9KTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVBhZGRpbmdTaXplID0gZnVuY3Rpb24gdXNlRXVpUGFkZGluZ1NpemUoc2l6ZSkge1xuICB2YXIgc2l6ZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhfZ2V0RXVpUGFkZGluZ1NpemUpO1xuICByZXR1cm4gc2l6ZXNbc2l6ZV07XG59O1xuXG4vKipcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgYWxsIHBhZGRpbmcgc2l6ZXMgZm9yIGFsbCBwYWRkaW5nIHNpZGVzIHByb3BlcnRpZXNcbiAqIGUuZy4sIHtcbiAqICAgcGFkZGluZzogeyBzOiBjc3NgcGFkZGluZy1zaXplOiA4cHhgLCAuLi4gfVxuICogICBsZWZ0OiB7IHM6IGNzc2BwYWRkaW5nLWlubGluZS1zdGFydDogOHB4YCwgLi4uIH1cbiAqIH1cbiAqL1xudmFyIF9ldWlQYWRkaW5nU2lkZXNBbmRTaXplcyA9IGZ1bmN0aW9uIF9ldWlQYWRkaW5nU2lkZXNBbmRTaXplcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIHNpemVzTWFwID0gX2dldEV1aVBhZGRpbmdTaXplKGV1aVRoZW1lQ29udGV4dCk7XG4gIC8vIFRoZSBgX2AgcHJlZml4IHN0b3BzIEVtb3Rpb24gZnJvbSBhcHBseWluZyB0aGUgZnVuY3Rpb24gbmFtZSBhcyBhIGxhYmVsXG4gIHZhciBfZ2VuZXJhdGVTaXplU3R5bGVzID0gZnVuY3Rpb24gX2dlbmVyYXRlU2l6ZVN0eWxlcyhjc3NQcm9wZXJ0eSkge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoc2l6ZXNNYXApLm1hcChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciBfcmVmMyA9IF9zbGljZWRUb0FycmF5KF9yZWYyLCAyKSxcbiAgICAgICAgc2l6ZUtleSA9IF9yZWYzWzBdLFxuICAgICAgICBzaXplVmFsdWUgPSBfcmVmM1sxXTtcbiAgICAgIHJldHVybiBbc2l6ZUtleSwgc2l6ZVZhbHVlID09PSBudWxsID8gbnVsbCA6IC8qI19fUFVSRV9fKi9jc3MoY3NzUHJvcGVydHksIFwiOlwiLCBzaXplVmFsdWUsIFwiO2xhYmVsOlwiLCBzaXplS2V5LCBcIjtcIildO1xuICAgIH0pKTtcbiAgfTtcbiAgdmFyIHNpZGVzTWFwID0ge1xuICAgIHBhZGRpbmc6IF9nZW5lcmF0ZVNpemVTdHlsZXMoJ3BhZGRpbmcnKSxcbiAgICB2ZXJ0aWNhbDogX2dlbmVyYXRlU2l6ZVN0eWxlcygncGFkZGluZy1ibG9jaycpLFxuICAgIHRvcDogX2dlbmVyYXRlU2l6ZVN0eWxlcygncGFkZGluZy1ibG9jay1zdGFydCcpLFxuICAgIGJvdHRvbTogX2dlbmVyYXRlU2l6ZVN0eWxlcygncGFkZGluZy1ibG9jay1lbmQnKSxcbiAgICBob3Jpem9udGFsOiBfZ2VuZXJhdGVTaXplU3R5bGVzKCdwYWRkaW5nLWlubGluZScpLFxuICAgIGxlZnQ6IF9nZW5lcmF0ZVNpemVTdHlsZXMoJ3BhZGRpbmctaW5saW5lLXN0YXJ0JyksXG4gICAgcmlnaHQ6IF9nZW5lcmF0ZVNpemVTdHlsZXMoJ3BhZGRpbmctaW5saW5lLWVuZCcpXG4gIH07XG4gIHJldHVybiBzaWRlc01hcDtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVBhZGRpbmdDU1MgPSBmdW5jdGlvbiB1c2VFdWlQYWRkaW5nQ1NTKHNpZGUpIHtcbiAgdmFyIG1lbW9pemVkU2lkZU1hcCA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKF9ldWlQYWRkaW5nU2lkZXNBbmRTaXplcyk7XG4gIHJldHVybiBtZW1vaXplZFNpZGVNYXBbc2lkZSB8fCAncGFkZGluZyddO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbi8qKlxuICogSXQgaXMgYmVzdCBwcmFjdGljZSB0byB1dGlsaXplIHRoZSBicm93c2VyJ3MgZGVmYXVsdCBgb3V0bGluZWAgcHJvcGVydHkgZm9yIGhhbmRsaW5nIGZvY3VzIHJpbmdzLlxuICogSG93ZXZlciwgc29tZSBjb21wb25lbnRzIG5lZWQgdG8gYmUgZm9yY2VkIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IsIG9yIGFkanVzdCB0aGUgZGlzcGxheS5cbiAqIFRoaXMgZnVuY3Rpb24gcmUtYXBwbGllcyB0aGUgc2FtZSBkZWZhdWx0IG91dGxpbmUgd2l0aCBhIGNvdXBsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gZXVpVGhlbWUgVXNlRXVpVGhlbWVcbiAqIEBwYXJhbSBvZmZzZXQgQWNjZXB0cyBhIHNwZWNpZmljIG1lYXN1cmVtZW50IG9yICdpbnNldCcsICdvdXRzZXQnIG9yICdjZW50ZXInIHRvIGFkanVzdCBvdXRsaW5lIHBvc2l0aW9uXG4gKiBAcGFyYW0gY29sb3IgQWNjZXB0cyBhbnkgQ1NTIGNvbG9yXG4gKi9cblxuZXhwb3J0IHZhciBldWlPdXRsaW5lID0gZnVuY3Rpb24gZXVpT3V0bGluZShfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHZhciBvZmZzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdjZW50ZXInO1xuICB2YXIgY29sb3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgLy8gV2lkdGggaXMgZW5mb3JjZWQgYXMgYSBjb25zdGFudCBhdCB0aGUgZ2xvYmFsIHRoZW1lIGxheWVyXG4gIHZhciBvdXRsaW5lV2lkdGggPSBldWlUaGVtZS5mb2N1cy53aWR0aDtcbiAgdmFyIG91dGxpbmVDb2xvciA9IGNvbG9yIHx8IGV1aVRoZW1lLmZvY3VzLmNvbG9yO1xuICB2YXIgb3V0bGluZU9mZnNldCA9IG9mZnNldDtcbiAgaWYgKG9mZnNldCA9PT0gJ2luc2V0Jykge1xuICAgIG91dGxpbmVPZmZzZXQgPSBcIi1cIi5jb25jYXQob3V0bGluZVdpZHRoKTtcbiAgfSBlbHNlIGlmIChvZmZzZXQgPT09ICdvdXRzZXQnKSB7XG4gICAgb3V0bGluZU9mZnNldCA9IFwiXCIuY29uY2F0KG91dGxpbmVXaWR0aCk7XG4gIH0gZWxzZSBpZiAob2Zmc2V0ID09PSAnY2VudGVyJykge1xuICAgIG91dGxpbmVPZmZzZXQgPSBtYXRoV2l0aFVuaXRzKG91dGxpbmVXaWR0aCwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4IC8gLTI7XG4gICAgfSk7XG4gIH1cblxuICAvLyBUaGlzIGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gZnJvbSBgZXVpRm9jdXNSaW5nYCBiZWNhdXNlIHNvbWUgRVVJIGNvbXBvbmVudHNcbiAgLy8gbmVlZCB0aGUgb3V0bGluZSBzdHlsZXMgb25seSwgbm90IHRoZSA6Zm9jdXMtdmlzaWJsZSBzZXR0aW5ncyAoZS5nLiAtIDpmb2N1cy13aXRoaW4gdXNhZ2UpXG4gIHJldHVybiBcIlxcbiAgICBvdXRsaW5lOiBcIi5jb25jYXQob3V0bGluZVdpZHRoLCBcIiBzb2xpZCBcIikuY29uY2F0KG91dGxpbmVDb2xvciwgXCI7XFxuICAgIG91dGxpbmUtb2Zmc2V0OiBcIikuY29uY2F0KG91dGxpbmVPZmZzZXQsIFwiO1xcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgZXVpRm9jdXNSaW5nID0gZnVuY3Rpb24gZXVpRm9jdXNSaW5nKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgb2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnY2VudGVyJztcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgLy8gVGhpcyBmdW5jdGlvbiB1dGlsaXplcyBgZm9jdXMtdmlzaWJsZWAgdG8gdHVybiBvbiBmb2N1cyBvdXRsaW5lcy5cbiAgLy8gQnV0IHRoaXMgaXMgYnJvd3Nlci1kZXBlbmRlbnQ6XG4gIC8vIFx1RDgzRFx1REM0OSBTYWZhcmkgYW5kIEZpcmVmb3ggaW5uYXRlbHkgcmVzcGVjdCBvbmx5IHNob3dpbmcgdGhlIG91dGxpbmUgd2l0aCBrZXlib2FyZCBvbmx5XG4gIC8vIFx1RDgzRFx1REM5NCBCdXQgdGhleSBkb24ndCBhbGxvdyBjb2xvcmluZyBvZiB0aGUgJ2F1dG8nL2RlZmF1bHQgb3V0bGluZSwgc28gY29udHJhc3QgaXMgbm8gZ29vZCBpbiBkYXJrIG1vZGUuXG4gIC8vIFx1RDgzRFx1REM0OSBGb3IgdGhlc2UgYnJvd3NlcnMgd2UgdXNlIHRoZSBzb2xpZCB0eXBlIGluIG9yZGVyIHRvIG1hdGNoIHdpdGggYGN1cnJlbnRDb2xvcmAuXG4gIC8vIFx1RDgzRFx1REUyNiBXaGljaCBkb2VzIG1lYW5zIHRoZSBvdXRsaW5lIHdpbGwgYmUgc3F1YXJlXG4gIHJldHVybiBcIlxcbiAgICBcIi5jb25jYXQoZXVpT3V0bGluZShldWlUaGVtZUNvbnRleHQsIG9mZnNldCwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNvbG9yKS50cmltKCksIFwiXFxuXFxuICAgIC8vIFxcdUQ4M0RcXHVEQzQwIENocm9tZSByZXNwZWN0cyA6Zm9jdXMtdmlzaWJsZSBhbmQgYWxsb3dzIGNvbG9yaW5nIHRoZSBgYXV0b2Agc3R5bGVcXG4gICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICBvdXRsaW5lLXN0eWxlOiBhdXRvO1xcbiAgICB9XFxuXFxuICAgIC8vIFxcdUQ4M0RcXHVERTQ1XFx1MjAwRFxcdTI2NDBcXHVGRTBGIEJ1dCBDaHJvbWUgYWxzbyBuZWVkcyB0byBoYXZlIHRoZSBvdXRsaW5lIGZvcmNlZnVsbHkgcmVtb3ZlZCBmcm9tIHJlZ3VsYXIgYDpmb2N1c2Agc3RhdGVcXG4gICAgJjpub3QoOmZvY3VzLXZpc2libGUpIHtcXG4gICAgICBvdXRsaW5lOiBub25lO1xcbiAgICB9XFxuICBcIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlGb2N1c1JpbmcgPSBmdW5jdGlvbiB1c2VFdWlGb2N1c1Jpbmcob2Zmc2V0LCBjb2xvcikge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpRm9jdXNSaW5nKGV1aVRoZW1lLCBvZmZzZXQsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGV1aUxpbmVIZWlnaHRGcm9tQmFzZWxpbmUsIGV1aUZvbnRTaXplRnJvbVNjYWxlIH0gZnJvbSAnLi4vZnVuY3Rpb25zL3R5cG9ncmFwaHknO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMsIHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUnO1xuaW1wb3J0IHsgRXVpVGhlbWVGb250U2NhbGVzIH0gZnJvbSAnLi4vdmFyaWFibGVzL3R5cG9ncmFwaHknO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG4vKipcbiAqIFJldHVybnMgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodFxuICovXG5leHBvcnQgdmFyIGV1aUZvbnRTaXplID0gZnVuY3Rpb24gZXVpRm9udFNpemUoX3JlZiwgc2NhbGUsIG9wdGlvbnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBmb250U2l6ZTogZXVpRm9udFNpemVGcm9tU2NhbGUoc2NhbGUsIGV1aVRoZW1lLCBvcHRpb25zKSxcbiAgICBsaW5lSGVpZ2h0OiBldWlMaW5lSGVpZ2h0RnJvbUJhc2VsaW5lKHNjYWxlLCBldWlUaGVtZSwgb3B0aW9ucylcbiAgfTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aUZvbnRTaXplID0gZnVuY3Rpb24gdXNlRXVpRm9udFNpemUoc2NhbGUsIG9wdGlvbnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIG1lbW9pemVkRm9udFNpemVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpRm9udFNpemVzKTtcbiAgcmV0dXJuICFvcHRpb25zID8gbWVtb2l6ZWRGb250U2l6ZXNbc2NhbGVdIDogZXVpRm9udFNpemUoZXVpVGhlbWUsIHNjYWxlLCBvcHRpb25zKTtcbn07XG4vLyBNZW1vbWl6ZSBhIGJhc2ljIHNldCBvZiBmb250IHNpemVzLiBXZSB1bmZvcnR1bmF0ZWx5IGNhbid0XG4vLyBtZW1vaXplIGFsbCBwb3NzaWJsZSBvcHRpb25zLCB0aGVyZSdzIHRvbyBtYW55IHBlcm11dGF0aW9uc1xudmFyIGV1aUZvbnRTaXplcyA9IGZ1bmN0aW9uIGV1aUZvbnRTaXplcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgcmV0dXJuIEV1aVRoZW1lRm9udFNjYWxlcy5yZWR1Y2UoZnVuY3Rpb24gKG1hcCwgc2NhbGUpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBtYXApLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBzY2FsZSwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCBzY2FsZSkpKTtcbiAgfSwge30pO1xufTtcblxuLyoqXG4gKiBGb3JjZSB0ZXh0IHRvIHdyYXAgb24gbmF0dXJhbCB3b3JkIGJyZWFrcyAoZS5nLiBzcGFjZXMgJiBoeXBoZW5zKVxuICogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvcHJldmVudC1sb25nLXVybHMtZnJvbS1icmVha2luZy1vdXQtb2YtY29udGFpbmVyL1xuICovXG5leHBvcnQgdmFyIGV1aVRleHRCcmVha1dvcmQgPSBmdW5jdGlvbiBldWlUZXh0QnJlYWtXb3JkKCkge1xuICByZXR1cm4gXCJcXG4gIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQgIWltcG9ydGFudDsgLy8gbWFrZXMgc3VyZSB0aGUgbG9uZyBzdHJpbmcgd2lsbCB3cmFwIGFuZCBub3QgYnVzdCBvdXQgb2YgdGhlIGNvbnRhaW5lclxcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcXG5cIjtcbn07XG5cbi8qKlxuICogUHJldmVudCB0ZXh0IGZyb20gd3JhcHBpbmcgb250byBtdWx0aXBsZSBsaW5lcywgYW5kIHRydW5jYXRlIHdpdGggYW4gZWxsaXBzaXMuXG4gKi9cbmV4cG9ydCB2YXIgZXVpVGV4dFRydW5jYXRlID0gZnVuY3Rpb24gZXVpVGV4dFRydW5jYXRlKCkge1xuICB2YXIgbWF4V2lkdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcxMDAlJztcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQobG9naWNhbENTUygnbWF4LXdpZHRoJywgbWF4V2lkdGgpIC8vIEVuc3VyZSB0aGF0IHRoZSBub2RlIGhhcyBhIG1heGltdW0gd2lkdGggYWZ0ZXIgd2hpY2ggdHJ1bmNhdGlvbiBjYW4gb2NjdXJcbiAgLCBcIlxcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXMgIWltcG9ydGFudDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcXG5cIik7XG59O1xuXG4vKipcbiAqIEZpeGVkLXdpZHRoIG51bWJlcnMgZm9yIHRhYnVsYXIgZGF0YVxuICovXG5leHBvcnQgdmFyIGV1aU51bWJlckZvcm1hdCA9IGZ1bmN0aW9uIGV1aU51bWJlckZvcm1hdChfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIFwiXFxuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IFwiLmNvbmNhdChldWlUaGVtZS5mb250LmZlYXR1cmVTZXR0aW5ncywgXCIsICd0bnVtJyAxO1xcblwiKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHNvcnRNYXBCeVNtYWxsVG9MYXJnZVZhbHVlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2JyZWFrcG9pbnQvX3NvcnRpbmcnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS9ob29rcyc7XG4vKipcbiAqIEdlbmVyYXRlcyBhIENTUyBtZWRpYSBxdWVyeSBydWxlIHN0cmluZyBiYXNlZCBvbiB0aGUgaW5wdXQgYnJlYWtwb2ludCAqcmFuZ2VzKi5cbiAqIEV4YW1wbGVzIHdpdGggZGVmYXVsdCB0aGVtZSBicmVha3BvaW50czpcbiAqXG4gKiBldWlCcmVha3BvaW50KFsncyddKSBiZWNvbWVzIGBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU3NXB4KSBhbmQgKG1heC13aWR0aDogNzY3cHgpYFxuICogZXVpQnJlYWtwb2ludChbJ3MnLCAnbCddKSBiZWNvbWVzIGBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU3NXB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KWBcbiAqXG4gKiBVc2UgdGhlIHNtYWxsZXN0IGFuZCBsYXJnZXN0IHNpemVzIHRvIGdlbmVyYXRlIG1lZGlhIHF1ZXJpZXMgd2l0aCBvbmx5IG1pbi9tYXgtd2lkdGguXG4gKiBFeGFtcGxlcyB3aXRoIGRlZmF1bHQgdGhlbWUgYnJlYWtwb2ludHM6XG4gKlxuICogZXVpQnJlYWtwb2ludChbJ3hzJywgJ20nXSkgYmVjb21lcyBgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5OTFweClgXG4gKiBldWlCcmVha3BvaW50KFsnbCcsICd4bCddKSBiZWNvbWVzIGBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDk5MnB4KWBcbiAqL1xuZXhwb3J0IHZhciBldWlCcmVha3BvaW50ID0gZnVuY3Rpb24gZXVpQnJlYWtwb2ludChfcmVmLCBzaXplcykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICAvLyBFbnN1cmUgd2UgaW5oZXJpdCBhbnkgdGhlbWUgYnJlYWtwb2ludCBvdmVycmlkZXMgJiBzb3J0IGJ5IHNtYWxsIHRvIGxhcmdlXG4gIHZhciBvcmRlcmVkQnJlYWtwb2ludHMgPSBPYmplY3Qua2V5cyhzb3J0TWFwQnlTbWFsbFRvTGFyZ2VWYWx1ZXMoZXVpVGhlbWUuYnJlYWtwb2ludCkpO1xuXG4gIC8vIEVuc3VyZSB0aGUgc2l6ZXMgYXJyYXkgaXMgaW4gdGhlIGNvcnJlY3QgYXNjZW5kaW5nIHNpemUgb3JkZXJcbiAgdmFyIG9yZGVyZWRTaXplcyA9IHNpemVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gb3JkZXJlZEJyZWFrcG9pbnRzLmluZGV4T2YoYSkgLSBvcmRlcmVkQnJlYWtwb2ludHMuaW5kZXhPZihiKTtcbiAgfSk7XG4gIHZhciBmaXJzdEJyZWFrcG9pbnQgPSBvcmRlcmVkU2l6ZXNbMF07XG4gIHZhciBtaW5CcmVha3BvaW50U2l6ZSA9IGV1aVRoZW1lLmJyZWFrcG9pbnRbZmlyc3RCcmVha3BvaW50XTtcbiAgdmFyIGxhc3RCcmVha3BvaW50ID0gb3JkZXJlZFNpemVzW3NpemVzLmxlbmd0aCAtIDFdO1xuICB2YXIgbWF4QnJlYWtwb2ludFNpemU7XG5cbiAgLy8gVG8gZ2V0IHRoZSBjb3JyZWN0IHNjcmVlbiByYW5nZSwgd2Ugc2V0IHRoZSBtYXgtd2lkdGggdG8gdGhlIG5leHQgYnJlYWtwb2ludFxuICAvLyBzaXplIGluIHRoZSBzaXplcyBhcnJheSAodW5sZXNzIHRoZSBzaXplIGlzIGFscmVhZHkgdGhlIGxhcmdlc3QgYnJlYWtwb2ludClcbiAgaWYgKGxhc3RCcmVha3BvaW50ICE9PSBvcmRlcmVkQnJlYWtwb2ludHNbb3JkZXJlZEJyZWFrcG9pbnRzLmxlbmd0aCAtIDFdKSB7XG4gICAgdmFyIG5leHRCcmVha3BvaW50ID0gb3JkZXJlZEJyZWFrcG9pbnRzLmluZGV4T2YobGFzdEJyZWFrcG9pbnQpICsgMTtcbiAgICBtYXhCcmVha3BvaW50U2l6ZSA9IGV1aVRoZW1lLmJyZWFrcG9pbnRbb3JkZXJlZEJyZWFrcG9pbnRzW25leHRCcmVha3BvaW50XV07XG4gIH1cbiAgcmV0dXJuIFsnQG1lZGlhIG9ubHkgc2NyZWVuJywgbWluQnJlYWtwb2ludFNpemUgPyBcIihtaW4td2lkdGg6IFwiLmNvbmNhdChtaW5CcmVha3BvaW50U2l6ZSwgXCJweClcIikgOiBmYWxzZSxcbiAgLy8gSWYgMCwgZG9uJ3QgcmVuZGVyIGEgbWluLXdpZHRoXG4gIG1heEJyZWFrcG9pbnRTaXplID8gXCIobWF4LXdpZHRoOiBcIi5jb25jYXQobWF4QnJlYWtwb2ludFNpemUgLSAxLCBcInB4KVwiKSA6IGZhbHNlIC8vIElmIHVuZGVmaW5lZCwgZG9uJ3QgcmVuZGVyIGEgbWF4LXdpZHRoXG4gIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyBhbmQgJyk7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlCcmVha3BvaW50ID0gZnVuY3Rpb24gdXNlRXVpQnJlYWtwb2ludChzaXplcykge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpQnJlYWtwb2ludChldWlUaGVtZSwgc2l6ZXMpO1xufTtcblxuLyoqXG4gKiBNaW4vTWF4IHdpZHRoIGJyZWFrcG9pbnQgdXRpbGl0aWVzIHRoYXQgZ2VuZXJhdGUgb25seSBhIHNpbmdsZSBtaW4vbWF4IHF1ZXJ5L2JvdW5kXG4gKlxuICogKlVubGlrZSB0aGUgYWJvdmUgZXVpQnJlYWtwb2ludCB1dGlsaXR5KiwgdGhlc2UgdXRpbGl0aWVzIHRyZWF0IGJyZWFrcG9pbnRcbiAqIHNpemVzIGFzIGEgb25lLWRpbWVuc2lvbmFsIHBvaW50LCByYXRoZXIgdGhhbiBhIHR3by1kaW1lbnNpb25hbCAqc2NyZWVuIHJhbmdlKi5cbiAqIEV4YW1wbGVzIHdpdGggZGVmYXVsdCB0aGVtZSBicmVha3BvaW50czpcbiAqXG4gKiBldWlNYXhCcmVha3BvaW50KCdtJykgYmVjb21lcyBgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweClgXG4gKiBldWlNaW5CcmVha3BvaW50KCdtJykgYmVjb21lcyBgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweClgXG4gKlxuICogVGhpcyBpcyBzYWZlciBhbmQgbW9yZSBpbnRlbnRpb25hbCB0byB1c2UgdGhhbiBldWlCcmVha3BvaW50KFsneHMnLCAncyddKSAvIGV1aUJyZWFrcG9pbnQoWydtJywgJ3hsJ10pXG4gKiBpbiB0aGUgZXZlbnQgdGhhdCBjb25zdW1lcnMgYWRkIGxhcmdlciBvciBzbWFsbGVyIGN1c3RvbSBicmVha3BvaW50cyAoZS5nICd4eHMnIG9yIGB4eGxgKVxuICogYW5kIGlmIHRoZSBpbnRlbnRpb24gb2YgdGhlIG1lZGlhIHF1ZXJ5IGlzIGFjdHVhbGx5IFwibSBhbmQgYmVsb3cvYWJvdmVcIiB2cy4gXCJvbmx5IHNjcmVlbnMgbS9sL3hsXCIuXG4gKi9cblxuZXhwb3J0IHZhciBldWlNaW5CcmVha3BvaW50ID0gZnVuY3Rpb24gZXVpTWluQnJlYWtwb2ludChfcmVmMiwgc2l6ZSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgdmFyIG1pbkJyZWFrcG9pbnRTaXplID0gZXVpVGhlbWUuYnJlYWtwb2ludFtzaXplXTtcbiAgaWYgKG1pbkJyZWFrcG9pbnRTaXplKSB7XG4gICAgcmV0dXJuIFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBcIi5jb25jYXQobWluQnJlYWtwb2ludFNpemUsIFwicHgpXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgbWluIGJyZWFrcG9pbnQgc2l6ZTogXCIuY29uY2F0KHNpemUpKTtcbiAgICByZXR1cm4gJ0BtZWRpYSBvbmx5IHNjcmVlbic7XG4gIH1cbn07XG5leHBvcnQgdmFyIHVzZUV1aU1pbkJyZWFrcG9pbnQgPSBmdW5jdGlvbiB1c2VFdWlNaW5CcmVha3BvaW50KHNpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aU1pbkJyZWFrcG9pbnQoZXVpVGhlbWUsIHNpemUpO1xufTtcbmV4cG9ydCB2YXIgZXVpTWF4QnJlYWtwb2ludCA9IGZ1bmN0aW9uIGV1aU1heEJyZWFrcG9pbnQoX3JlZjMsIHNpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjMuZXVpVGhlbWU7XG4gIHZhciBtYXhCcmVha3BvaW50U2l6ZSA9IGV1aVRoZW1lLmJyZWFrcG9pbnRbc2l6ZV07XG4gIGlmIChtYXhCcmVha3BvaW50U2l6ZSkge1xuICAgIHJldHVybiBcIkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogXCIuY29uY2F0KG1heEJyZWFrcG9pbnRTaXplIC0gMSwgXCJweClcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS53YXJuKFwiSW52YWxpZCBtYXggYnJlYWtwb2ludCBzaXplOiBcIi5jb25jYXQoc2l6ZSkpO1xuICAgIHJldHVybiAnQG1lZGlhIG9ubHkgc2NyZWVuJztcbiAgfVxufTtcbmV4cG9ydCB2YXIgdXNlRXVpTWF4QnJlYWtwb2ludCA9IGZ1bmN0aW9uIHVzZUV1aU1heEJyZWFrcG9pbnQoc2l6ZSkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpTWF4QnJlYWtwb2ludChldWlUaGVtZSwgc2l6ZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIHJlc2V0U3R5bGVzID0gXCJcXG4vKiAvLyBBZGFwdGVkIGZyb20gRXJpYyBNZXllcidzIHJlc2V0IChodHRwOi8vbWV5ZXJ3ZWIuY29tL2VyaWMvdG9vbHMvY3NzL3Jlc2V0LywgdjIuMCB8IDIwMTEwMTI2KS4gKi9cXG5cXG5cXG4qLCAqOmJlZm9yZSwgKjphZnRlciB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5cXG5odG1sLCBib2R5LCBkaXYsIHNwYW4sIGFwcGxldCwgb2JqZWN0LCBpZnJhbWUsXFxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgYmxvY2txdW90ZSwgcHJlLFxcbmEsIGFiYnIsIGFjcm9ueW0sIGFkZHJlc3MsIGJpZywgY2l0ZSwgY29kZSxcXG5kZWwsIGRmbiwgZW0sIGltZywgaW5zLCBrYmQsIHEsIHMsIHNhbXAsXFxuc21hbGwsIHN0cmlrZSwgc3Ryb25nLCBzdWIsIHN1cCwgdHQsIHZhcixcXG5iLCB1LCBpLCBjZW50ZXIsXFxuZGwsIGR0LCBkZCwgb2wsIHVsLCBsaSxcXG5maWVsZHNldCwgZm9ybSwgbGFiZWwsIGxlZ2VuZCxcXG50YWJsZSwgY2FwdGlvbiwgdGJvZHksIHRmb290LCB0aGVhZCwgdHIsIHRoLCB0ZCxcXG5hcnRpY2xlLCBhc2lkZSwgY2FudmFzLCBkZXRhaWxzLCBlbWJlZCxcXG5maWd1cmUsIGZpZ2NhcHRpb24sIGZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsXFxubWVudSwgbmF2LCBvdXRwdXQsIHJ1YnksIHNlY3Rpb24sIHN1bW1hcnksXFxudGltZSwgbWFyaywgYXVkaW8sIHZpZGVvIHtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBib3JkZXI6IG5vbmU7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XFxufVxcblxcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAge1xcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XFxuICBmb250LXdlaWdodDogaW5oZXJpdDtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG59XFxuXFxuLyogSFRNTDUgZGlzcGxheS1yb2xlIHJlc2V0IGZvciBvbGRlciBicm93c2VycyAqL1xcbmFydGljbGUsIGFzaWRlLCBkZXRhaWxzLCBmaWdjYXB0aW9uLCBmaWd1cmUsXFxuZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWVudSwgbmF2LCBzZWN0aW9uIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG5hW2hyZWZdLFxcbmJ1dHRvbixcXG5bcm9sZT0nYnV0dG9uJ10ge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG5idXR0b24ge1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW46IDA7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxufVxcblxcbmlucHV0IHtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbmlucHV0OmRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IDE7IC8qIHJlcXVpcmVkIG9uIGlPUyAqL1xcbn1cXG5cXG5vbCxcXG51bCB7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbn1cXG5cXG5ibG9ja3F1b3RlLFxcbnEge1xcbiAgcXVvdGVzOiBub25lO1xcbn1cXG5cXG5ibG9ja3F1b3RlOmJlZm9yZSxcXG5ibG9ja3F1b3RlOmFmdGVyLFxcbnE6YmVmb3JlLFxcbnE6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxufVxcblxcbnRhYmxlIHtcXG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XFxuICBib3JkZXItc3BhY2luZzogMDtcXG59XFxuXFxuaHIge1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5cXG5maWVsZHNldCB7XFxuICBtaW4taW5saW5lLXNpemU6IGF1dG87XFxufVxcblxcbi8qIENocm9tZSBoYXMgYW4gaXNzdWUgYXJvdW5kIFJUTCBsYW5ndWFnZXMgaW4gU1ZHcyB3aGVuIGxldHRlci1zcGFjaW5nIGlzIG5lZ2F0aXZlXFxuICogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9OTY2NDgwXFxuICovXFxuc3ZnIHRleHQge1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbCAhaW1wb3J0YW50O1xcbn1cIjsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBBIGNvbnN0YW50IHN0b3JpbmcgdGhlIGBwcmVmZXJzLXJlZHVjZWQtbW90aW9uYCBtZWRpYSBxdWVyeVxuICogc28gdGhhdCB3aGVuIGl0IGlzIHR1cm5lZCBvZmYsIGFuaW1hdGlvbnMgYXJlIG5vdCBydW4uXG4gKi9cbmV4cG9ydCB2YXIgZXVpQ2FuQW5pbWF0ZSA9ICdAbWVkaWEgc2NyZWVuIGFuZCAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSknO1xuXG4vKipcbiAqIEEgY29uc3RhbnQgc3RvcmluZyB0aGUgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gIG1lZGlhIHF1ZXJ5IHRoYXQgd2lsbFxuICogb25seSBhcHBseSB0aGUgY29udGVudCBpZiB0aGUgc2V0dGluZyBpcyBvZmYgKHJlZHVjZSkuXG4gKi9cbmV4cG9ydCB2YXIgZXVpQ2FudEFuaW1hdGUgPSAnQG1lZGlhIHNjcmVlbiBhbmQgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSknO1xuXG4vKipcbiAqIFNwZWVkcyAvIER1cmF0aW9ucyAvIERlbGF5c1xuICovXG5cbmV4cG9ydCB2YXIgRXVpVGhlbWVBbmltYXRpb25TcGVlZHMgPSBbJ2V4dHJhRmFzdCcsICdmYXN0JywgJ25vcm1hbCcsICdzbG93JywgJ2V4dHJhU2xvdyddO1xuLyoqXG4gKiBFYXNpbmdzIC8gVGltaW5nIGZ1bmN0aW9uc1xuICovXG5cbmV4cG9ydCB2YXIgRXVpVGhlbWVBbmltYXRpb25FYXNpbmdzID0gWydib3VuY2UnLCAncmVzaXN0YW5jZSddOyIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0LCBfdGVtcGxhdGVPYmplY3QyLCBfdGVtcGxhdGVPYmplY3QzLCBfdGVtcGxhdGVPYmplY3Q0O1xuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChlLCB0KSB7IHJldHVybiB0IHx8ICh0ID0gZS5zbGljZSgwKSksIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUodCkgfSB9KSk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmV4cG9ydCB2YXIgZXVpQW5pbUZhZGVJbiA9IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG5cIl0pKSk7XG5leHBvcnQgdmFyIGV1aUFuaW1TbGlkZUluVXAgPSBmdW5jdGlvbiBldWlBbmltU2xpZGVJblVwKHNpemUpIHtcbiAgcmV0dXJuIGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QyIHx8IChfdGVtcGxhdGVPYmplY3QyID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShcIiwgXCIpO1xcbiAgfVxcblxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG4gIH1cXG5cIl0pKSwgc2l6ZSk7XG59O1xuZXhwb3J0IHZhciBldWlBbmltU2xpZGVYID0gZnVuY3Rpb24gZXVpQW5pbVNsaWRlWChzaXplKSB7XG4gIHJldHVybiBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0MyB8fCAoX3RlbXBsYXRlT2JqZWN0MyA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAwJSB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChcIiwgXCIpO1xcbiAgfVxcblxcbiAgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcXG5cXG4gIH1cXG5cIl0pKSwgc2l6ZSk7XG59O1xuZXhwb3J0IHZhciBldWlBbmltU2NhbGUgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0NCB8fCAoX3RlbXBsYXRlT2JqZWN0NCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuXFxuICAxJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIH1cXG5cIl0pKSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxTaXplQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG4vKlxuICogTWl4aW4gdGhhdCBoaWRlcyBlbGVtZW50cyBvZmZzY3JlZW4gdG8gb25seSBiZSByZWFkIGJ5IHNjcmVlbiByZWFkZXJcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC81MTMwIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC81MTUyIGZvciBtb3JlIGluZm9cbiAqL1xuZXhwb3J0IHZhciBldWlTY3JlZW5SZWFkZXJPbmx5ID0gZnVuY3Rpb24gZXVpU2NyZWVuUmVhZGVyT25seSgpIHtcbiAgcmV0dXJuIFwiXFxuICAvKiBUYWtlIHRoZSBlbGVtZW50IG91dCBvZiB0aGUgbGF5b3V0ICovXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAvKiBLZWVwIGl0IHZlcnRpY2FsbHkgaW5saW5lICovXFxuICBcIi5jb25jYXQobG9naWNhbENTUygndG9wJywgJ2F1dG8nKSwgXCJcXG4gIC8qIENocm9tZSByZXF1aXJlcyBhIGxlZnQgdmFsdWUsIGFuZCBTZWxlbml1bSAodXNlZCBieSBLaWJhbmEncyBGVFIpIHJlcXVpcmVzIGFuIG9mZi1zY3JlZW4gcG9zaXRpb24gZm9yIGl0cyAuZ2V0VmlzaWJsZVRleHQoKSB0byBub3QgcmVnaXN0ZXIgU1Itb25seSB0ZXh0ICovXFxuICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2xlZnQnLCAnLTEwMDAwcHgnKSwgXCJcXG4gIC8qIFRoZSBlbGVtZW50IG11c3QgaGF2ZSBhIHNpemUgKGZvciBzb21lIHNjcmVlbiByZWFkZXJzKSAqL1xcbiAgXCIpLmNvbmNhdChsb2dpY2FsU2l6ZUNTUygnMXB4JywgJzFweCcpLCBcIlxcbiAgLyogQnV0IHJlZHVjZSB0aGUgdmlzaWJsZSBzaXplIHRvIG5vdGhpbmcgKi9cXG4gIGNsaXA6IHJlY3QoMCAwIDAgMCk7XFxuICBjbGlwLXBhdGg6IGluc2V0KDUwJSk7XFxuICAvKiBBbmQgZW5zdXJlIG5vIG92ZXJmbG93cyBvY2N1ciAqL1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIC8qIENocm9tZSByZXF1aXJlcyB0aGUgbmVnYXRpdmUgbWFyZ2luIHRvIG5vdCBjYXVzZSBvdmVyZmxvd3Mgb2YgcGFyZW50IGNvbnRhaW5lcnMgKi9cXG4gIG1hcmdpbjogLTFweDtcXG5cIik7XG59O1xuXG4vKlxuICogU3R5bGVzXG4gKi9cbmV4cG9ydCB2YXIgZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyA9IHtcbiAgZXVpU2NyZWVuUmVhZGVyT25seTogLyojX19QVVJFX18qL2NzcyhldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO2xhYmVsOmV1aVNjcmVlblJlYWRlck9ubHk7XCIpLFxuICAnZXVpU2NyZWVuUmVhZGVyT25seS1zaG93T25Gb2N1cyc6IC8qI19fUFVSRV9fKi9jc3MoXCImOm5vdCg6Zm9jdXMsIDphY3RpdmUsIDpmb2N1cy13aXRoaW4pe1wiLCBldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO307bGFiZWw6ZXVpU2NyZWVuUmVhZGVyT25seS1zaG93T25Gb2N1cztcIilcbn07IiwgImNvbnN0IGNhbmRpZGF0ZVNlbGVjdG9ycyA9IFtcbiAgJ2lucHV0JyxcbiAgJ3NlbGVjdCcsXG4gICd0ZXh0YXJlYScsXG4gICdhW2hyZWZdJyxcbiAgJ2J1dHRvbicsXG4gICdbdGFiaW5kZXhdOm5vdChzbG90KScsXG4gICdhdWRpb1tjb250cm9sc10nLFxuICAndmlkZW9bY29udHJvbHNdJyxcbiAgJ1tjb250ZW50ZWRpdGFibGVdOm5vdChbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0pJyxcbiAgJ2RldGFpbHM+c3VtbWFyeTpmaXJzdC1vZi10eXBlJyxcbiAgJ2RldGFpbHMnLFxuXTtcbmNvbnN0IGNhbmRpZGF0ZVNlbGVjdG9yID0gLyogI19fUFVSRV9fICovIGNhbmRpZGF0ZVNlbGVjdG9ycy5qb2luKCcsJyk7XG5cbmNvbnN0IE5vRWxlbWVudCA9IHR5cGVvZiBFbGVtZW50ID09PSAndW5kZWZpbmVkJztcblxuY29uc3QgbWF0Y2hlcyA9IE5vRWxlbWVudFxuICA/IGZ1bmN0aW9uICgpIHt9XG4gIDogRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyB8fFxuICAgIEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yIHx8XG4gICAgRWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1xuXG5jb25zdCBnZXRSb290Tm9kZSA9XG4gICFOb0VsZW1lbnQgJiYgRWxlbWVudC5wcm90b3R5cGUuZ2V0Um9vdE5vZGVcbiAgICA/IChlbGVtZW50KSA9PiBlbGVtZW50LmdldFJvb3ROb2RlKClcbiAgICA6IChlbGVtZW50KSA9PiBlbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbCBjb250YWluZXIgdG8gY2hlY2sgaW5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUNvbnRhaW5lciBhZGQgY29udGFpbmVyIHRvIGNoZWNrXG4gKiBAcGFyYW0geyhub2RlOiBFbGVtZW50KSA9PiBib29sZWFufSBmaWx0ZXIgZmlsdGVyIGNhbmRpZGF0ZXNcbiAqIEByZXR1cm5zIHtFbGVtZW50W119XG4gKi9cbmNvbnN0IGdldENhbmRpZGF0ZXMgPSBmdW5jdGlvbiAoZWwsIGluY2x1ZGVDb250YWluZXIsIGZpbHRlcikge1xuICBsZXQgY2FuZGlkYXRlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShcbiAgICBlbC5xdWVyeVNlbGVjdG9yQWxsKGNhbmRpZGF0ZVNlbGVjdG9yKVxuICApO1xuICBpZiAoaW5jbHVkZUNvbnRhaW5lciAmJiBtYXRjaGVzLmNhbGwoZWwsIGNhbmRpZGF0ZVNlbGVjdG9yKSkge1xuICAgIGNhbmRpZGF0ZXMudW5zaGlmdChlbCk7XG4gIH1cbiAgY2FuZGlkYXRlcyA9IGNhbmRpZGF0ZXMuZmlsdGVyKGZpbHRlcik7XG4gIHJldHVybiBjYW5kaWRhdGVzO1xufTtcblxuLyoqXG4gKiBAY2FsbGJhY2sgR2V0U2hhZG93Um9vdFxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IHRvIGNoZWNrIGZvciBzaGFkb3cgcm9vdFxuICogQHJldHVybnMge1NoYWRvd1Jvb3R8Ym9vbGVhbn0gU2hhZG93Um9vdCBpZiBhdmFpbGFibGUgb3IgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGEgc2hhZG93Um9vdCBpcyBhdHRhY2hlZCBidXQgbm90IGF2YWlsYWJsZS5cbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBTaGFkb3dSb290RmlsdGVyXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHNoYWRvd0hvc3ROb2RlIHRoZSBlbGVtZW50IHdoaWNoIGNvbnRhaW5zIHNoYWRvdyBjb250ZW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBhIHNoYWRvdyByb290IGNvdWxkIHBvdGVudGlhbGx5IGNvbnRhaW4gdmFsaWQgY2FuZGlkYXRlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENhbmRpZGF0ZXNTY29wZVxuICogQHByb3BlcnR5IHtFbGVtZW50fSBzY29wZSBjb250YWlucyBpbm5lciBjYW5kaWRhdGVzXG4gKiBAcHJvcGVydHkge0VsZW1lbnRbXX0gY2FuZGlkYXRlc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSXRlcmF0aXZlT3B0aW9uc1xuICogQHByb3BlcnR5IHtHZXRTaGFkb3dSb290fGJvb2xlYW59IGdldFNoYWRvd1Jvb3QgdHJ1ZSBpZiBzaGFkb3cgc3VwcG9ydCBpcyBlbmFibGVkOyBmYWxzeSBpZiBub3Q7XG4gKiAgaWYgYSBmdW5jdGlvbiwgaW1wbGllcyBzaGFkb3cgc3VwcG9ydCBpcyBlbmFibGVkIGFuZCBlaXRoZXIgcmV0dXJucyB0aGUgc2hhZG93IHJvb3Qgb2YgYW4gZWxlbWVudFxuICogIG9yIGEgYm9vbGVhbiBzdGF0aW5nIGlmIGl0IGhhcyBhbiB1bmRpc2Nsb3NlZCBzaGFkb3cgcm9vdFxuICogQHByb3BlcnR5IHsobm9kZTogRWxlbWVudCkgPT4gYm9vbGVhbn0gZmlsdGVyIGZpbHRlciBjYW5kaWRhdGVzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGZsYXR0ZW4gaWYgdHJ1ZSB0aGVuIHJlc3VsdCB3aWxsIGZsYXR0ZW4gYW55IENhbmRpZGF0ZXNTY29wZSBpbnRvIHRoZSByZXR1cm5lZCBsaXN0XG4gKiBAcHJvcGVydHkge1NoYWRvd1Jvb3RGaWx0ZXJ9IHNoYWRvd1Jvb3RGaWx0ZXIgZmlsdGVyIHNoYWRvdyByb290cztcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7RWxlbWVudFtdfSBlbGVtZW50cyBsaXN0IG9mIGVsZW1lbnQgY29udGFpbmVycyB0byBtYXRjaCBjYW5kaWRhdGVzIGZyb21cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUNvbnRhaW5lciBhZGQgY29udGFpbmVyIGxpc3QgdG8gY2hlY2tcbiAqIEBwYXJhbSB7SXRlcmF0aXZlT3B0aW9uc30gb3B0aW9uc1xuICogQHJldHVybnMge0FycmF5LjxFbGVtZW50fENhbmRpZGF0ZXNTY29wZT59XG4gKi9cbmNvbnN0IGdldENhbmRpZGF0ZXNJdGVyYXRpdmVseSA9IGZ1bmN0aW9uIChcbiAgZWxlbWVudHMsXG4gIGluY2x1ZGVDb250YWluZXIsXG4gIG9wdGlvbnNcbikge1xuICBjb25zdCBjYW5kaWRhdGVzID0gW107XG4gIGNvbnN0IGVsZW1lbnRzVG9DaGVjayA9IEFycmF5LmZyb20oZWxlbWVudHMpO1xuICB3aGlsZSAoZWxlbWVudHNUb0NoZWNrLmxlbmd0aCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1RvQ2hlY2suc2hpZnQoKTtcbiAgICBpZiAoZWxlbWVudC50YWdOYW1lID09PSAnU0xPVCcpIHtcbiAgICAgIC8vIGFkZCBzaGFkb3cgZG9tIHNsb3Qgc2NvcGUgKHNsb3QgaXRzZWxmIGNhbm5vdCBiZSBmb2N1c2FibGUpXG4gICAgICBjb25zdCBhc3NpZ25lZCA9IGVsZW1lbnQuYXNzaWduZWRFbGVtZW50cygpO1xuICAgICAgY29uc3QgY29udGVudCA9IGFzc2lnbmVkLmxlbmd0aCA/IGFzc2lnbmVkIDogZWxlbWVudC5jaGlsZHJlbjtcbiAgICAgIGNvbnN0IG5lc3RlZENhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoY29udGVudCwgdHJ1ZSwgb3B0aW9ucyk7XG4gICAgICBpZiAob3B0aW9ucy5mbGF0dGVuKSB7XG4gICAgICAgIGNhbmRpZGF0ZXMucHVzaCguLi5uZXN0ZWRDYW5kaWRhdGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgICAgc2NvcGU6IGVsZW1lbnQsXG4gICAgICAgICAgY2FuZGlkYXRlczogbmVzdGVkQ2FuZGlkYXRlcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNoZWNrIGNhbmRpZGF0ZSBlbGVtZW50XG4gICAgICBjb25zdCB2YWxpZENhbmRpZGF0ZSA9IG1hdGNoZXMuY2FsbChlbGVtZW50LCBjYW5kaWRhdGVTZWxlY3Rvcik7XG4gICAgICBpZiAoXG4gICAgICAgIHZhbGlkQ2FuZGlkYXRlICYmXG4gICAgICAgIG9wdGlvbnMuZmlsdGVyKGVsZW1lbnQpICYmXG4gICAgICAgIChpbmNsdWRlQ29udGFpbmVyIHx8ICFlbGVtZW50cy5pbmNsdWRlcyhlbGVtZW50KSlcbiAgICAgICkge1xuICAgICAgICBjYW5kaWRhdGVzLnB1c2goZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGl0ZXJhdGUgb3ZlciBzaGFkb3cgY29udGVudCBpZiBwb3NzaWJsZVxuICAgICAgY29uc3Qgc2hhZG93Um9vdCA9XG4gICAgICAgIGVsZW1lbnQuc2hhZG93Um9vdCB8fFxuICAgICAgICAvLyBjaGVjayBmb3IgYW4gdW5kaXNjbG9zZWQgc2hhZG93XG4gICAgICAgICh0eXBlb2Ygb3B0aW9ucy5nZXRTaGFkb3dSb290ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgb3B0aW9ucy5nZXRTaGFkb3dSb290KGVsZW1lbnQpKTtcblxuICAgICAgY29uc3QgdmFsaWRTaGFkb3dSb290ID1cbiAgICAgICAgIW9wdGlvbnMuc2hhZG93Um9vdEZpbHRlciB8fCBvcHRpb25zLnNoYWRvd1Jvb3RGaWx0ZXIoZWxlbWVudCk7XG5cbiAgICAgIGlmIChzaGFkb3dSb290ICYmIHZhbGlkU2hhZG93Um9vdCkge1xuICAgICAgICAvLyBhZGQgc2hhZG93IGRvbSBzY29wZSBJSUYgYSBzaGFkb3cgcm9vdCBub2RlIHdhcyBnaXZlbjsgb3RoZXJ3aXNlLCBhbiB1bmRpc2Nsb3NlZFxuICAgICAgICAvLyAgc2hhZG93IGV4aXN0cywgc28gbG9vayBhdCBsaWdodCBkb20gY2hpbGRyZW4gYXMgZmFsbGJhY2sgQlVUIGNyZWF0ZSBhIHNjb3BlIGZvciBhbnlcbiAgICAgICAgLy8gIGNoaWxkIGNhbmRpZGF0ZXMgZm91bmQgYmVjYXVzZSB0aGV5J3JlIGxpa2VseSBzbG90dGVkIGVsZW1lbnRzIChlbGVtZW50cyB0aGF0IGFyZVxuICAgICAgICAvLyAgY2hpbGRyZW4gb2YgdGhlIHdlYiBjb21wb25lbnQgZWxlbWVudCAod2hpY2ggaGFzIHRoZSBzaGFkb3cpLCBpbiB0aGUgbGlnaHQgZG9tLCBidXRcbiAgICAgICAgLy8gIHNsb3R0ZWQgc29tZXdoZXJlIF9pbnNpZGVfIHRoZSB1bmRpc2Nsb3NlZCBzaGFkb3cpIC0tIHRoZSBzY29wZSBpcyBjcmVhdGVkIGJlbG93LFxuICAgICAgICAvLyAgX2FmdGVyXyB3ZSByZXR1cm4gZnJvbSB0aGlzIHJlY3Vyc2l2ZSBjYWxsXG4gICAgICAgIGNvbnN0IG5lc3RlZENhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoXG4gICAgICAgICAgc2hhZG93Um9vdCA9PT0gdHJ1ZSA/IGVsZW1lbnQuY2hpbGRyZW4gOiBzaGFkb3dSb290LmNoaWxkcmVuLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmZsYXR0ZW4pIHtcbiAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goLi4ubmVzdGVkQ2FuZGlkYXRlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKHtcbiAgICAgICAgICAgIHNjb3BlOiBlbGVtZW50LFxuICAgICAgICAgICAgY2FuZGlkYXRlczogbmVzdGVkQ2FuZGlkYXRlcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlcmUncyBub3Qgc2hhZG93IHNvIGp1c3QgZGlnIGludG8gdGhlIGVsZW1lbnQncyAobGlnaHQgZG9tKSBjaGlsZHJlblxuICAgICAgICAvLyAgX193aXRob3V0X18gZ2l2aW5nIHRoZSBlbGVtZW50IHNwZWNpYWwgc2NvcGUgdHJlYXRtZW50XG4gICAgICAgIGVsZW1lbnRzVG9DaGVjay51bnNoaWZ0KC4uLmVsZW1lbnQuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FuZGlkYXRlcztcbn07XG5cbmNvbnN0IGdldFRhYmluZGV4ID0gZnVuY3Rpb24gKG5vZGUsIGlzU2NvcGUpIHtcbiAgaWYgKG5vZGUudGFiSW5kZXggPCAwKSB7XG4gICAgLy8gaW4gQ2hyb21lLCA8ZGV0YWlscy8+LCA8YXVkaW8gY29udHJvbHMvPiBhbmQgPHZpZGVvIGNvbnRyb2xzLz4gZWxlbWVudHMgZ2V0IGEgZGVmYXVsdFxuICAgIC8vIGB0YWJJbmRleGAgb2YgLTEgd2hlbiB0aGUgJ3RhYmluZGV4JyBhdHRyaWJ1dGUgaXNuJ3Qgc3BlY2lmaWVkIGluIHRoZSBET00sXG4gICAgLy8geWV0IHRoZXkgYXJlIHN0aWxsIHBhcnQgb2YgdGhlIHJlZ3VsYXIgdGFiIG9yZGVyOyBpbiBGRiwgdGhleSBnZXQgYSBkZWZhdWx0XG4gICAgLy8gYHRhYkluZGV4YCBvZiAwOyBzaW5jZSBDaHJvbWUgc3RpbGwgcHV0cyB0aG9zZSBlbGVtZW50cyBpbiB0aGUgcmVndWxhciB0YWJcbiAgICAvLyBvcmRlciwgY29uc2lkZXIgdGhlaXIgdGFiIGluZGV4IHRvIGJlIDAuXG4gICAgLy8gQWxzbyBicm93c2VycyBkbyBub3QgcmV0dXJuIGB0YWJJbmRleGAgY29ycmVjdGx5IGZvciBjb250ZW50RWRpdGFibGUgbm9kZXM7XG4gICAgLy8gc28gaWYgdGhleSBkb24ndCBoYXZlIGEgdGFiaW5kZXggYXR0cmlidXRlIHNwZWNpZmljYWxseSBzZXQsIGFzc3VtZSBpdCdzIDAuXG4gICAgLy9cbiAgICAvLyBpc1Njb3BlIGlzIHBvc2l0aXZlIGZvciBjdXN0b20gZWxlbWVudCB3aXRoIHNoYWRvdyByb290IG9yIHNsb3QgdGhhdCBieSBkZWZhdWx0XG4gICAgLy8gaGF2ZSB0YWJJbmRleCAtMSwgYnV0IG5lZWQgdG8gYmUgc29ydGVkIGJ5IGRvY3VtZW50IG9yZGVyIGluIG9yZGVyIGZvciB0aGVpclxuICAgIC8vIGNvbnRlbnQgdG8gYmUgaW5zZXJ0ZWQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb25cbiAgICBpZiAoXG4gICAgICAoaXNTY29wZSB8fFxuICAgICAgICAvXihBVURJT3xWSURFT3xERVRBSUxTKSQvLnRlc3Qobm9kZS50YWdOYW1lKSB8fFxuICAgICAgICBub2RlLmlzQ29udGVudEVkaXRhYmxlKSAmJlxuICAgICAgaXNOYU4ocGFyc2VJbnQobm9kZS5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JyksIDEwKSlcbiAgICApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlLnRhYkluZGV4O1xufTtcblxuY29uc3Qgc29ydE9yZGVyZWRUYWJiYWJsZXMgPSBmdW5jdGlvbiAoYSwgYikge1xuICByZXR1cm4gYS50YWJJbmRleCA9PT0gYi50YWJJbmRleFxuICAgID8gYS5kb2N1bWVudE9yZGVyIC0gYi5kb2N1bWVudE9yZGVyXG4gICAgOiBhLnRhYkluZGV4IC0gYi50YWJJbmRleDtcbn07XG5cbmNvbnN0IGlzSW5wdXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gbm9kZS50YWdOYW1lID09PSAnSU5QVVQnO1xufTtcblxuY29uc3QgaXNIaWRkZW5JbnB1dCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHJldHVybiBpc0lucHV0KG5vZGUpICYmIG5vZGUudHlwZSA9PT0gJ2hpZGRlbic7XG59O1xuXG5jb25zdCBpc0RldGFpbHNXaXRoU3VtbWFyeSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGNvbnN0IHIgPVxuICAgIG5vZGUudGFnTmFtZSA9PT0gJ0RFVEFJTFMnICYmXG4gICAgQXJyYXkucHJvdG90eXBlLnNsaWNlXG4gICAgICAuYXBwbHkobm9kZS5jaGlsZHJlbilcbiAgICAgIC5zb21lKChjaGlsZCkgPT4gY2hpbGQudGFnTmFtZSA9PT0gJ1NVTU1BUlknKTtcbiAgcmV0dXJuIHI7XG59O1xuXG5jb25zdCBnZXRDaGVja2VkUmFkaW8gPSBmdW5jdGlvbiAobm9kZXMsIGZvcm0pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChub2Rlc1tpXS5jaGVja2VkICYmIG5vZGVzW2ldLmZvcm0gPT09IGZvcm0pIHtcbiAgICAgIHJldHVybiBub2Rlc1tpXTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGlzVGFiYmFibGVSYWRpbyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmICghbm9kZS5uYW1lKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgcmFkaW9TY29wZSA9IG5vZGUuZm9ybSB8fCBnZXRSb290Tm9kZShub2RlKTtcbiAgY29uc3QgcXVlcnlSYWRpb3MgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiByYWRpb1Njb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAnaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInICsgbmFtZSArICdcIl0nXG4gICAgKTtcbiAgfTtcblxuICBsZXQgcmFkaW9TZXQ7XG4gIGlmIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiB3aW5kb3cuQ1NTICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiB3aW5kb3cuQ1NTLmVzY2FwZSA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByYWRpb1NldCA9IHF1ZXJ5UmFkaW9zKHdpbmRvdy5DU1MuZXNjYXBlKG5vZGUubmFtZSkpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICByYWRpb1NldCA9IHF1ZXJ5UmFkaW9zKG5vZGUubmFtZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0xvb2tzIGxpa2UgeW91IGhhdmUgYSByYWRpbyBidXR0b24gd2l0aCBhIG5hbWUgYXR0cmlidXRlIGNvbnRhaW5pbmcgaW52YWxpZCBDU1Mgc2VsZWN0b3IgY2hhcmFjdGVycyBhbmQgbmVlZCB0aGUgQ1NTLmVzY2FwZSBwb2x5ZmlsbDogJXMnLFxuICAgICAgICBlcnIubWVzc2FnZVxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjaGVja2VkID0gZ2V0Q2hlY2tlZFJhZGlvKHJhZGlvU2V0LCBub2RlLmZvcm0pO1xuICByZXR1cm4gIWNoZWNrZWQgfHwgY2hlY2tlZCA9PT0gbm9kZTtcbn07XG5cbmNvbnN0IGlzUmFkaW8gPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gaXNJbnB1dChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdyYWRpbyc7XG59O1xuXG5jb25zdCBpc05vblRhYmJhYmxlUmFkaW8gPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gaXNSYWRpbyhub2RlKSAmJiAhaXNUYWJiYWJsZVJhZGlvKG5vZGUpO1xufTtcblxuY29uc3QgaXNaZXJvQXJlYSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIHdpZHRoID09PSAwICYmIGhlaWdodCA9PT0gMDtcbn07XG5jb25zdCBpc0hpZGRlbiA9IGZ1bmN0aW9uIChub2RlLCB7IGRpc3BsYXlDaGVjaywgZ2V0U2hhZG93Um9vdCB9KSB7XG4gIC8vIE5PVEU6IHZpc2liaWxpdHkgd2lsbCBiZSBgdW5kZWZpbmVkYCBpZiBub2RlIGlzIGRldGFjaGVkIGZyb20gdGhlIGRvY3VtZW50XG4gIC8vICAoc2VlIG5vdGVzIGFib3V0IHRoaXMgZnVydGhlciBkb3duKSwgd2hpY2ggbWVhbnMgd2Ugd2lsbCBjb25zaWRlciBpdCB2aXNpYmxlXG4gIC8vICAodGhpcyBpcyBsZWdhY3kgYmVoYXZpb3IgZnJvbSBhIHZlcnkgbG9uZyB3YXkgYmFjaylcbiAgLy8gTk9URTogd2UgY2hlY2sgdGhpcyByZWdhcmRsZXNzIG9mIGBkaXNwbGF5Q2hlY2s9XCJub25lXCJgIGJlY2F1c2UgdGhpcyBpcyBhXG4gIC8vICBfdmlzaWJpbGl0eV8gY2hlY2ssIG5vdCBhIF9kaXNwbGF5XyBjaGVja1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS52aXNpYmlsaXR5ID09PSAnaGlkZGVuJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgaXNEaXJlY3RTdW1tYXJ5ID0gbWF0Y2hlcy5jYWxsKG5vZGUsICdkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZScpO1xuICBjb25zdCBub2RlVW5kZXJEZXRhaWxzID0gaXNEaXJlY3RTdW1tYXJ5ID8gbm9kZS5wYXJlbnRFbGVtZW50IDogbm9kZTtcbiAgaWYgKG1hdGNoZXMuY2FsbChub2RlVW5kZXJEZXRhaWxzLCAnZGV0YWlsczpub3QoW29wZW5dKSAqJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRoZSByb290IG5vZGUgaXMgdGhlIHNoYWRvdyByb290IGlmIHRoZSBub2RlIGlzIGluIGEgc2hhZG93IERPTTsgc29tZSBkb2N1bWVudCBvdGhlcndpc2VcbiAgLy8gIChidXQgTk9UIF90aGVfIGRvY3VtZW50OyBzZWUgc2Vjb25kICdJZicgY29tbWVudCBiZWxvdyBmb3IgbW9yZSkuXG4gIC8vIElmIHJvb3ROb2RlIGlzIHNoYWRvdyByb290LCBpdCdsbCBoYXZlIGEgaG9zdCwgd2hpY2ggaXMgdGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHNoYWRvd1xuICAvLyAgaXMgYXR0YWNoZWQsIGFuZCB0aGUgb25lIHdlIG5lZWQgdG8gY2hlY2sgaWYgaXQncyBpbiB0aGUgZG9jdW1lbnQgb3Igbm90IChiZWNhdXNlIHRoZVxuICAvLyAgc2hhZG93LCBhbmQgYWxsIG5vZGVzIGl0IGNvbnRhaW5zLCBpcyBuZXZlciBjb25zaWRlcmVkIGluIHRoZSBkb2N1bWVudCBzaW5jZSBzaGFkb3dzXG4gIC8vICBiZWhhdmUgbGlrZSBzZWxmLWNvbnRhaW5lZCBET01zOyBidXQgaWYgdGhlIHNoYWRvdydzIEhPU1QsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGRvY3VtZW50LFxuICAvLyAgaXMgaGlkZGVuLCBvciBpcyBub3QgaW4gdGhlIGRvY3VtZW50IGl0c2VsZiBidXQgaXMgZGV0YWNoZWQsIGl0IHdpbGwgYWZmZWN0IHRoZSBzaGFkb3cnc1xuICAvLyAgdmlzaWJpbGl0eSwgaW5jbHVkaW5nIGFsbCB0aGUgbm9kZXMgaXQgY29udGFpbnMpLiBUaGUgaG9zdCBjb3VsZCBiZSBhbnkgbm9ybWFsIG5vZGUsXG4gIC8vICBvciBhIGN1c3RvbSBlbGVtZW50IChpLmUuIHdlYiBjb21wb25lbnQpLiBFaXRoZXIgd2F5LCB0aGF0J3MgdGhlIG9uZSB0aGF0IGlzIGNvbnNpZGVyZWRcbiAgLy8gIHBhcnQgb2YgdGhlIGRvY3VtZW50LCBub3QgdGhlIHNoYWRvdyByb290LCBub3IgYW55IG9mIGl0cyBjaGlsZHJlbiAoaS5lLiB0aGUgbm9kZSBiZWluZ1xuICAvLyAgdGVzdGVkKS5cbiAgLy8gSWYgcm9vdE5vZGUgaXMgbm90IGEgc2hhZG93IHJvb3QsIGl0IHdvbid0IGhhdmUgYSBob3N0LCBhbmQgc28gcm9vdE5vZGUgc2hvdWxkIGJlIHRoZVxuICAvLyAgZG9jdW1lbnQgKHBlciB0aGUgZG9jcykgYW5kIHdoaWxlIGl0J3MgYSBEb2N1bWVudC10eXBlIG9iamVjdCwgdGhhdCBkb2N1bWVudCBkb2VzIG5vdFxuICAvLyAgYXBwZWFyIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBub2RlJ3MgYG93bmVyRG9jdW1lbnRgIGZvciBzb21lIHJlYXNvbiwgc28gaXQncyBzYWZlclxuICAvLyAgdG8gaWdub3JlIHRoZSByb290Tm9kZSBhdCB0aGlzIHBvaW50LCBhbmQgdXNlIGBub2RlLm93bmVyRG9jdW1lbnRgLiBPdGhlcndpc2UsXG4gIC8vICB1c2luZyBgcm9vdE5vZGUuY29udGFpbnMobm9kZSlgIHdpbGwgX2Fsd2F5c18gYmUgdHJ1ZSB3ZSdsbCBnZXQgZmFsc2UtcG9zaXRpdmVzIHdoZW5cbiAgLy8gIG5vZGUgaXMgYWN0dWFsbHkgZGV0YWNoZWQuXG4gIGNvbnN0IG5vZGVSb290SG9zdCA9IGdldFJvb3ROb2RlKG5vZGUpLmhvc3Q7XG4gIGNvbnN0IG5vZGVJc0F0dGFjaGVkID1cbiAgICBub2RlUm9vdEhvc3Q/Lm93bmVyRG9jdW1lbnQuY29udGFpbnMobm9kZVJvb3RIb3N0KSB8fFxuICAgIG5vZGUub3duZXJEb2N1bWVudC5jb250YWlucyhub2RlKTtcblxuICBpZiAoIWRpc3BsYXlDaGVjayB8fCBkaXNwbGF5Q2hlY2sgPT09ICdmdWxsJykge1xuICAgIGlmICh0eXBlb2YgZ2V0U2hhZG93Um9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gZmlndXJlIG91dCBpZiB3ZSBzaG91bGQgY29uc2lkZXIgdGhlIG5vZGUgdG8gYmUgaW4gYW4gdW5kaXNjbG9zZWQgc2hhZG93IGFuZCB1c2UgdGhlXG4gICAgICAvLyAgJ25vbi16ZXJvLWFyZWEnIGZhbGxiYWNrXG4gICAgICBjb25zdCBvcmlnaW5hbE5vZGUgPSBub2RlO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgY29uc3QgcGFyZW50RWxlbWVudCA9IG5vZGUucGFyZW50RWxlbWVudDtcbiAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBnZXRSb290Tm9kZShub2RlKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhcmVudEVsZW1lbnQgJiZcbiAgICAgICAgICAhcGFyZW50RWxlbWVudC5zaGFkb3dSb290ICYmXG4gICAgICAgICAgZ2V0U2hhZG93Um9vdChwYXJlbnRFbGVtZW50KSA9PT0gdHJ1ZSAvLyBjaGVjayBpZiB0aGVyZSdzIGFuIHVuZGlzY2xvc2VkIHNoYWRvd1xuICAgICAgICApIHtcbiAgICAgICAgICAvLyBub2RlIGhhcyBhbiB1bmRpc2Nsb3NlZCBzaGFkb3cgd2hpY2ggbWVhbnMgd2UgY2FuIG9ubHkgdHJlYXQgaXQgYXMgYSBibGFjayBib3gsIHNvIHdlXG4gICAgICAgICAgLy8gIGZhbGwgYmFjayB0byBhIG5vbi16ZXJvLWFyZWEgdGVzdFxuICAgICAgICAgIHJldHVybiBpc1plcm9BcmVhKG5vZGUpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUuYXNzaWduZWRTbG90KSB7XG4gICAgICAgICAgLy8gaXRlcmF0ZSB1cCBzbG90XG4gICAgICAgICAgbm9kZSA9IG5vZGUuYXNzaWduZWRTbG90O1xuICAgICAgICB9IGVsc2UgaWYgKCFwYXJlbnRFbGVtZW50ICYmIHJvb3ROb2RlICE9PSBub2RlLm93bmVyRG9jdW1lbnQpIHtcbiAgICAgICAgICAvLyBjcm9zcyBzaGFkb3cgYm91bmRhcnlcbiAgICAgICAgICBub2RlID0gcm9vdE5vZGUuaG9zdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpdGVyYXRlIHVwIG5vcm1hbCBkb21cbiAgICAgICAgICBub2RlID0gcGFyZW50RWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub2RlID0gb3JpZ2luYWxOb2RlO1xuICAgIH1cbiAgICAvLyBlbHNlLCBgZ2V0U2hhZG93Um9vdGAgbWlnaHQgYmUgdHJ1ZSwgYnV0IGFsbCB0aGF0IGRvZXMgaXMgZW5hYmxlIHNoYWRvdyBET00gc3VwcG9ydFxuICAgIC8vICAoaS5lLiBpdCBkb2VzIG5vdCBhbHNvIHByZXN1bWUgdGhhdCBhbGwgbm9kZXMgbWlnaHQgaGF2ZSB1bmRpc2Nsb3NlZCBzaGFkb3dzKTsgb3JcbiAgICAvLyAgaXQgbWlnaHQgYmUgYSBmYWxzeSB2YWx1ZSwgd2hpY2ggbWVhbnMgc2hhZG93IERPTSBzdXBwb3J0IGlzIGRpc2FibGVkXG5cbiAgICAvLyBTaW5jZSB3ZSBkaWRuJ3QgZmluZCBpdCBzaXR0aW5nIGluIGFuIHVuZGlzY2xvc2VkIHNoYWRvdyAob3Igc2hhZG93cyBhcmUgZGlzYWJsZWQpXG4gICAgLy8gIG5vdyB3ZSBjYW4ganVzdCB0ZXN0IHRvIHNlZSBpZiBpdCB3b3VsZCBub3JtYWxseSBiZSB2aXNpYmxlIG9yIG5vdCwgcHJvdmlkZWQgaXQnc1xuICAgIC8vICBhdHRhY2hlZCB0byB0aGUgbWFpbiBkb2N1bWVudC5cbiAgICAvLyBOT1RFOiBXZSBtdXN0IGNvbnNpZGVyIGNhc2Ugd2hlcmUgbm9kZSBpcyBpbnNpZGUgYSBzaGFkb3cgRE9NIGFuZCBnaXZlbiBkaXJlY3RseSB0b1xuICAgIC8vICBgaXNUYWJiYWJsZSgpYCBvciBgaXNGb2N1c2FibGUoKWAgLS0gcmVnYXJkbGVzcyBvZiBgZ2V0U2hhZG93Um9vdGAgb3B0aW9uIHNldHRpbmcuXG5cbiAgICBpZiAobm9kZUlzQXR0YWNoZWQpIHtcbiAgICAgIC8vIHRoaXMgd29ya3Mgd2hlcmV2ZXIgdGhlIG5vZGUgaXM6IGlmIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIGNsaWVudCByZWN0LCBpdCdzXG4gICAgICAvLyAgc29tZWhvdyBkaXNwbGF5ZWQ7IGl0IGFsc28gY292ZXJzIHRoZSBDU1MgJ2Rpc3BsYXk6IGNvbnRlbnRzJyBjYXNlIHdoZXJlIHRoZVxuICAgICAgLy8gIG5vZGUgaXRzZWxmIGlzIGhpZGRlbiBpbiBwbGFjZSBvZiBpdHMgY29udGVudHM7IGFuZCB0aGVyZSdzIG5vIG5lZWQgdG8gc2VhcmNoXG4gICAgICAvLyAgdXAgdGhlIGhpZXJhcmNoeSBlaXRoZXJcbiAgICAgIHJldHVybiAhbm9kZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBFbHNlLCB0aGUgbm9kZSBpc24ndCBhdHRhY2hlZCB0byB0aGUgZG9jdW1lbnQsIHdoaWNoIG1lYW5zIHRoZSBgZ2V0Q2xpZW50UmVjdHMoKWBcbiAgICAvLyAgQVBJIHdpbGwgX19hbHdheXNfXyByZXR1cm4gemVybyByZWN0cyAodGhpcyBjYW4gaGFwcGVuLCBmb3IgZXhhbXBsZSwgaWYgUmVhY3RcbiAgICAvLyAgaXMgdXNlZCB0byByZW5kZXIgbm9kZXMgb250byBhIGRldGFjaGVkIHRyZWUsIGFzIGNvbmZpcm1lZCBpbiB0aGlzIHRocmVhZDpcbiAgICAvLyAgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy85MTE3I2lzc3VlY29tbWVudC0yODQyMjg4NzApXG4gICAgLy9cbiAgICAvLyBJdCBhbHNvIG1lYW5zIHRoYXQgZXZlbiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS5kaXNwbGF5IHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgLy8gIGJlY2F1c2Ugc3R5bGVzIGFyZSBvbmx5IGNvbXB1dGVkIGZvciBub2RlcyB0aGF0IGFyZSBpbiB0aGUgZG9jdW1lbnQuXG4gICAgLy9cbiAgICAvLyBOT1RFOiBUSElTIEhBUyBCRUVOIFRIRSBDQVNFIEZPUiBZRUFSUy4gSXQgaXMgbm90IG5ldywgbm9yIGlzIGl0IGNhdXNlZCBieSB0YWJiYWJsZVxuICAgIC8vICBzb21laG93LiBUaG91Z2ggaXQgd2FzIG5ldmVyIHN0YXRlZCBvZmZpY2lhbGx5LCBhbnlvbmUgd2hvIGhhcyBldmVyIHVzZWQgdGFiYmFibGVcbiAgICAvLyAgQVBJcyBvbiBub2RlcyBpbiBkZXRhY2hlZCBjb250YWluZXJzIGhhcyBhY3R1YWxseSBpbXBsaWNpdGx5IHVzZWQgdGFiYmFibGUgaW4gd2hhdFxuICAgIC8vICB3YXMgbGF0ZXIgKGFzIG9mIHY1LjIuMCBvbiBBcHIgOSwgMjAyMSkgY2FsbGVkIGBkaXNwbGF5Q2hlY2s9XCJub25lXCJgIG1vZGUgLS0gZXNzZW50aWFsbHlcbiAgICAvLyAgY29uc2lkZXJpbmcgX19ldmVyeXRoaW5nX18gdG8gYmUgdmlzaWJsZSBiZWNhdXNlIG9mIHRoZSBpbm5hYmlsaXR5IHRvIGRldGVybWluZSBzdHlsZXMuXG4gIH0gZWxzZSBpZiAoZGlzcGxheUNoZWNrID09PSAnbm9uLXplcm8tYXJlYScpIHtcbiAgICAvLyBOT1RFOiBFdmVuIHRob3VnaCB0aGlzIHRlc3RzIHRoYXQgdGhlIG5vZGUncyBjbGllbnQgcmVjdCBpcyBub24temVybyB0byBkZXRlcm1pbmVcbiAgICAvLyAgd2hldGhlciBpdCdzIGRpc3BsYXllZCwgYW5kIHRoYXQgYSBkZXRhY2hlZCBub2RlIHdpbGwgX19hbHdheXNfXyBoYXZlIGEgemVyby1hcmVhXG4gICAgLy8gIGNsaWVudCByZWN0LCB3ZSBkb24ndCBzcGVjaWFsLWNhc2UgZm9yIHdoZXRoZXIgdGhlIG5vZGUgaXMgYXR0YWNoZWQgb3Igbm90LiBJblxuICAgIC8vICB0aGlzIG1vZGUsIHdlIGRvIHdhbnQgdG8gY29uc2lkZXIgbm9kZXMgdGhhdCBoYXZlIGEgemVybyBhcmVhIHRvIGJlIGhpZGRlbiBhdCBhbGxcbiAgICAvLyAgdGltZXMsIGFuZCB0aGF0IGluY2x1ZGVzIGF0dGFjaGVkIG9yIG5vdC5cbiAgICByZXR1cm4gaXNaZXJvQXJlYShub2RlKTtcbiAgfVxuXG4gIC8vIHZpc2libGUsIGFzIGZhciBhcyB3ZSBjYW4gdGVsbCwgb3IgcGVyIGN1cnJlbnQgYGRpc3BsYXlDaGVja2AgbW9kZVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBmb3JtIGZpZWxkcyAobmVzdGVkKSBpbnNpZGUgYSBkaXNhYmxlZCBmaWVsZHNldCBhcmUgbm90IGZvY3VzYWJsZS90YWJiYWJsZVxuLy8gIHVubGVzcyB0aGV5IGFyZSBpbiB0aGUgX2ZpcnN0XyA8bGVnZW5kPiBlbGVtZW50IG9mIHRoZSB0b3AtbW9zdCBkaXNhYmxlZFxuLy8gIGZpZWxkc2V0XG5jb25zdCBpc0Rpc2FibGVkRnJvbUZpZWxkc2V0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgaWYgKC9eKElOUFVUfEJVVFRPTnxTRUxFQ1R8VEVYVEFSRUEpJC8udGVzdChub2RlLnRhZ05hbWUpKSB7XG4gICAgbGV0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgLy8gY2hlY2sgaWYgYG5vZGVgIGlzIGNvbnRhaW5lZCBpbiBhIGRpc2FibGVkIDxmaWVsZHNldD5cbiAgICB3aGlsZSAocGFyZW50Tm9kZSkge1xuICAgICAgaWYgKHBhcmVudE5vZGUudGFnTmFtZSA9PT0gJ0ZJRUxEU0VUJyAmJiBwYXJlbnROb2RlLmRpc2FibGVkKSB7XG4gICAgICAgIC8vIGxvb2sgZm9yIHRoZSBmaXJzdCA8bGVnZW5kPiBhbW9uZyB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc2FibGVkIDxmaWVsZHNldD5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJlbnROb2RlLmNoaWxkcmVuLml0ZW0oaSk7XG4gICAgICAgICAgLy8gd2hlbiB0aGUgZmlyc3QgPGxlZ2VuZD4gKGluIGRvY3VtZW50IG9yZGVyKSBpcyBmb3VuZFxuICAgICAgICAgIGlmIChjaGlsZC50YWdOYW1lID09PSAnTEVHRU5EJykge1xuICAgICAgICAgICAgLy8gaWYgaXRzIHBhcmVudCA8ZmllbGRzZXQ+IGlzIG5vdCBuZXN0ZWQgaW4gYW5vdGhlciBkaXNhYmxlZCA8ZmllbGRzZXQ+LFxuICAgICAgICAgICAgLy8gcmV0dXJuIHdoZXRoZXIgYG5vZGVgIGlzIGEgZGVzY2VuZGFudCBvZiBpdHMgZmlyc3QgPGxlZ2VuZD5cbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVzLmNhbGwocGFyZW50Tm9kZSwgJ2ZpZWxkc2V0W2Rpc2FibGVkXSAqJylcbiAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgIDogIWNoaWxkLmNvbnRhaW5zKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgZGlzYWJsZWQgPGZpZWxkc2V0PiBjb250YWluaW5nIGBub2RlYCBoYXMgbm8gPGxlZ2VuZD5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnRFbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIC8vIGVsc2UsIG5vZGUncyB0YWJiYWJsZS9mb2N1c2FibGUgc3RhdGUgc2hvdWxkIG5vdCBiZSBhZmZlY3RlZCBieSBhIGZpZWxkc2V0J3NcbiAgLy8gIGVuYWJsZWQvZGlzYWJsZWQgc3RhdGVcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZSA9IGZ1bmN0aW9uIChvcHRpb25zLCBub2RlKSB7XG4gIGlmIChcbiAgICBub2RlLmRpc2FibGVkIHx8XG4gICAgaXNIaWRkZW5JbnB1dChub2RlKSB8fFxuICAgIGlzSGlkZGVuKG5vZGUsIG9wdGlvbnMpIHx8XG4gICAgLy8gRm9yIGEgZGV0YWlscyBlbGVtZW50IHdpdGggYSBzdW1tYXJ5LCB0aGUgc3VtbWFyeSBlbGVtZW50IGdldHMgdGhlIGZvY3VzXG4gICAgaXNEZXRhaWxzV2l0aFN1bW1hcnkobm9kZSkgfHxcbiAgICBpc0Rpc2FibGVkRnJvbUZpZWxkc2V0KG5vZGUpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZSA9IGZ1bmN0aW9uIChvcHRpb25zLCBub2RlKSB7XG4gIGlmIChcbiAgICBpc05vblRhYmJhYmxlUmFkaW8obm9kZSkgfHxcbiAgICBnZXRUYWJpbmRleChub2RlKSA8IDAgfHxcbiAgICAhaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZShvcHRpb25zLCBub2RlKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBpc1ZhbGlkU2hhZG93Um9vdFRhYmJhYmxlID0gZnVuY3Rpb24gKHNoYWRvd0hvc3ROb2RlKSB7XG4gIGNvbnN0IHRhYkluZGV4ID0gcGFyc2VJbnQoc2hhZG93SG9zdE5vZGUuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpLCAxMCk7XG4gIGlmIChpc05hTih0YWJJbmRleCkgfHwgdGFiSW5kZXggPj0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIElmIGEgY3VzdG9tIGVsZW1lbnQgaGFzIGFuIGV4cGxpY2l0IG5lZ2F0aXZlIHRhYmluZGV4LFxuICAvLyBicm93c2VycyB3aWxsIG5vdCBhbGxvdyB0YWIgdGFyZ2V0aW5nIHNhaWQgZWxlbWVudCdzIGNoaWxkcmVuLlxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnR8Q2FuZGlkYXRlc1Njb3BlPn0gY2FuZGlkYXRlc1xuICogQHJldHVybnMgRWxlbWVudFtdXG4gKi9cbmNvbnN0IHNvcnRCeU9yZGVyID0gZnVuY3Rpb24gKGNhbmRpZGF0ZXMpIHtcbiAgY29uc3QgcmVndWxhclRhYmJhYmxlcyA9IFtdO1xuICBjb25zdCBvcmRlcmVkVGFiYmFibGVzID0gW107XG4gIGNhbmRpZGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgIGNvbnN0IGlzU2NvcGUgPSAhIWl0ZW0uc2NvcGU7XG4gICAgY29uc3QgZWxlbWVudCA9IGlzU2NvcGUgPyBpdGVtLnNjb3BlIDogaXRlbTtcbiAgICBjb25zdCBjYW5kaWRhdGVUYWJpbmRleCA9IGdldFRhYmluZGV4KGVsZW1lbnQsIGlzU2NvcGUpO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gaXNTY29wZSA/IHNvcnRCeU9yZGVyKGl0ZW0uY2FuZGlkYXRlcykgOiBlbGVtZW50O1xuICAgIGlmIChjYW5kaWRhdGVUYWJpbmRleCA9PT0gMCkge1xuICAgICAgaXNTY29wZVxuICAgICAgICA/IHJlZ3VsYXJUYWJiYWJsZXMucHVzaCguLi5lbGVtZW50cylcbiAgICAgICAgOiByZWd1bGFyVGFiYmFibGVzLnB1c2goZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9yZGVyZWRUYWJiYWJsZXMucHVzaCh7XG4gICAgICAgIGRvY3VtZW50T3JkZXI6IGksXG4gICAgICAgIHRhYkluZGV4OiBjYW5kaWRhdGVUYWJpbmRleCxcbiAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgaXNTY29wZTogaXNTY29wZSxcbiAgICAgICAgY29udGVudDogZWxlbWVudHMsXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvcmRlcmVkVGFiYmFibGVzXG4gICAgLnNvcnQoc29ydE9yZGVyZWRUYWJiYWJsZXMpXG4gICAgLnJlZHVjZSgoYWNjLCBzb3J0YWJsZSkgPT4ge1xuICAgICAgc29ydGFibGUuaXNTY29wZVxuICAgICAgICA/IGFjYy5wdXNoKC4uLnNvcnRhYmxlLmNvbnRlbnQpXG4gICAgICAgIDogYWNjLnB1c2goc29ydGFibGUuY29udGVudCk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKVxuICAgIC5jb25jYXQocmVndWxhclRhYmJhYmxlcyk7XG59O1xuXG5jb25zdCB0YWJiYWJsZSA9IGZ1bmN0aW9uIChlbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBsZXQgY2FuZGlkYXRlcztcbiAgaWYgKG9wdGlvbnMuZ2V0U2hhZG93Um9vdCkge1xuICAgIGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoW2VsXSwgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLCB7XG4gICAgICBmaWx0ZXI6IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZS5iaW5kKG51bGwsIG9wdGlvbnMpLFxuICAgICAgZmxhdHRlbjogZmFsc2UsXG4gICAgICBnZXRTaGFkb3dSb290OiBvcHRpb25zLmdldFNoYWRvd1Jvb3QsXG4gICAgICBzaGFkb3dSb290RmlsdGVyOiBpc1ZhbGlkU2hhZG93Um9vdFRhYmJhYmxlLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzKFxuICAgICAgZWwsXG4gICAgICBvcHRpb25zLmluY2x1ZGVDb250YWluZXIsXG4gICAgICBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUuYmluZChudWxsLCBvcHRpb25zKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHNvcnRCeU9yZGVyKGNhbmRpZGF0ZXMpO1xufTtcblxuY29uc3QgZm9jdXNhYmxlID0gZnVuY3Rpb24gKGVsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGxldCBjYW5kaWRhdGVzO1xuICBpZiAob3B0aW9ucy5nZXRTaGFkb3dSb290KSB7XG4gICAgY2FuZGlkYXRlcyA9IGdldENhbmRpZGF0ZXNJdGVyYXRpdmVseShbZWxdLCBvcHRpb25zLmluY2x1ZGVDb250YWluZXIsIHtcbiAgICAgIGZpbHRlcjogaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZS5iaW5kKG51bGwsIG9wdGlvbnMpLFxuICAgICAgZmxhdHRlbjogdHJ1ZSxcbiAgICAgIGdldFNoYWRvd1Jvb3Q6IG9wdGlvbnMuZ2V0U2hhZG93Um9vdCxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlcyhcbiAgICAgIGVsLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLFxuICAgICAgaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZS5iaW5kKG51bGwsIG9wdGlvbnMpXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBjYW5kaWRhdGVzO1xufTtcblxuY29uc3QgaXNUYWJiYWJsZSA9IGZ1bmN0aW9uIChub2RlLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoIW5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG5vZGUgcHJvdmlkZWQnKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5jYWxsKG5vZGUsIGNhbmRpZGF0ZVNlbGVjdG9yKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZShvcHRpb25zLCBub2RlKTtcbn07XG5cbmNvbnN0IGZvY3VzYWJsZUNhbmRpZGF0ZVNlbGVjdG9yID0gLyogI19fUFVSRV9fICovIGNhbmRpZGF0ZVNlbGVjdG9yc1xuICAuY29uY2F0KCdpZnJhbWUnKVxuICAuam9pbignLCcpO1xuXG5jb25zdCBpc0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2RlLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoIW5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG5vZGUgcHJvdmlkZWQnKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5jYWxsKG5vZGUsIGZvY3VzYWJsZUNhbmRpZGF0ZVNlbGVjdG9yKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUob3B0aW9ucywgbm9kZSk7XG59O1xuXG5leHBvcnQgeyB0YWJiYWJsZSwgZm9jdXNhYmxlLCBpc1RhYmJhYmxlLCBpc0ZvY3VzYWJsZSB9O1xuIiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJidXR0b25SZWZcIiwgXCJzaXplXCIsIFwiY29sb3JcIiwgXCJmaWxsXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBCVVRUT05fQ09MT1JTLCB1c2VFdWlCdXR0b25Db2xvckNTUywgdXNlRXVpQnV0dG9uRm9jdXNDU1MgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucy9idXR0b24nO1xuaW1wb3J0IHsgRXVpQnV0dG9uRGlzcGxheSwgaXNCdXR0b25EaXNhYmxlZCB9IGZyb20gJy4vYnV0dG9uX2Rpc3BsYXkvX2J1dHRvbl9kaXNwbGF5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIENPTE9SUyA9IEJVVFRPTl9DT0xPUlM7XG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nXTtcblxuLy8gRm9yIHNvbWUgcmVhc29uLCBTdG9yeWJvb2sgZG9lc24ndCBwYXJzZSBgRXVpQnV0dG9uRGlzcGxheUNvbW1vblByb3BzYCB1bmxlc3Mgd2UgaW5jbHVkZSBpdCBoZXJlXG5cbi8qKlxuICogRXVpQnV0dG9uIGlzIGxhcmdlbHkgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyByZWxldmFudCBwcm9wc1xuICogYW5kIHRoZSBsb2dpYyBmb3IgZWxlbWVudC1zcGVjaWZpYyBhdHRyaWJ1dGVzXG4gKi9cbmV4cG9ydCB2YXIgRXVpQnV0dG9uID0gZnVuY3Rpb24gRXVpQnV0dG9uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGJ1dHRvblJlZiA9IF9yZWYuYnV0dG9uUmVmLFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmJGNvbG9yLFxuICAgIGZpbGwgPSBfcmVmLmZpbGwsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNEaXNhYmxlZCA9IGlzQnV0dG9uRGlzYWJsZWQoe1xuICAgIGhyZWY6IHJlc3QuaHJlZixcbiAgICBpc0Rpc2FibGVkOiByZXN0LmlzRGlzYWJsZWQgfHwgcmVzdC5kaXNhYmxlZCxcbiAgICBpc0xvYWRpbmc6IHJlc3QuaXNMb2FkaW5nXG4gIH0pO1xuICB2YXIgYnV0dG9uQ29sb3JTdHlsZXMgPSB1c2VFdWlCdXR0b25Db2xvckNTUyh7XG4gICAgZGlzcGxheTogZmlsbCA/ICdmaWxsJyA6ICdiYXNlJ1xuICB9KVtpc0Rpc2FibGVkID8gJ2Rpc2FibGVkJyA6IGNvbG9yXTtcbiAgdmFyIGJ1dHRvbkZvY3VzU3R5bGUgPSB1c2VFdWlCdXR0b25Gb2N1c0NTUygpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbicsIGNsYXNzTmFtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbYnV0dG9uQ29sb3JTdHlsZXMsIGJ1dHRvbkZvY3VzU3R5bGVdO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCdXR0b25EaXNwbGF5LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIHJlZjogYnV0dG9uUmVmLFxuICAgIHNpemU6IHNpemVcbiAgfSwgcmVzdCkpO1xufTtcbkV1aUJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgKi9cbiAgLyoqXG4gICAgICogTWFrZSBidXR0b24gYSBzb2xpZCBjb2xvciBmb3IgcHJvbWluZW5jZVxuICAgICAqL1xuICBmaWxsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQW55IG9mIHRoZSBuYW1lZCBjb2xvciBwYWxldHRlIG9wdGlvbnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBVc2Ugc2l6ZSBgc2AgaW4gY29uZmluZWQgc3BhY2VzXG4gICAgICovXG4gIC8qKlxuICAgICAqIFVzZSBzaXplIGBzYCBpbiBjb25maW5lZCBzcGFjZXNcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG4gIGVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJhXCIsIFwiYnV0dG9uXCIsIFwic3BhblwiXSksXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEV4dGVuZHMgdGhlIGJ1dHRvbiB0byAxMDAlIHdpZHRoXG4gICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG1pbmltdW0gd2lkdGhcbiAgICAgKi9cbiAgbWluV2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbdW5kZWZpbmVkXSldKSxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgYDxzcGFuPmAgd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0L2NoaWxkcmVuIG9ubHkgKG5vdCBpY29uKVxuICAgICAqXG4gICAgICogVGhpcyBzcGFuIHdyYXBwZXIgY2FuIGJlIHJlbW92ZWQgYnkgcGFzc2luZyBgdGV4dFByb3BzPXtmYWxzZX1gLlxuICAgICAqL1xuICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0O1xuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChlLCB0KSB7IHJldHVybiB0IHx8ICh0ID0gZS5zbGljZSgwKSksIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUodCkgfSB9KSk7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUJhY2tncm91bmRDb2xvciwgZXVpQ2FuQW5pbWF0ZSB9IGZyb20gJy4uLy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGhleFRvUmdiLCBpc0NvbG9yRGFyaywgbWFrZUhpZ2hDb250cmFzdENvbG9yLCBzaGFkZSwgdGludCwgdHJhbnNwYXJlbnRpemUsIHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMnO1xuZXhwb3J0IHZhciBCVVRUT05fQ09MT1JTID0gWyd0ZXh0JywgJ2FjY2VudCcsICdwcmltYXJ5JywgJ3N1Y2Nlc3MnLCAnd2FybmluZycsICdkYW5nZXInXTtcbmV4cG9ydCB2YXIgQlVUVE9OX0RJU1BMQVlTID0gWydiYXNlJywgJ2ZpbGwnLCAnZW1wdHknXTtcbi8qKlxuICogQ3JlYXRlcyB0aGUgYGJhc2VgIHZlcnNpb24gb2YgYnV0dG9uIHN0eWxlcyB3aXRoIHByb3BlciB0ZXh0IGNvbnRyYXN0LlxuICogQHBhcmFtIGV1aVRoZW1lQ29udGV4dFxuICogQHBhcmFtIGNvbG9yIE9uZSBvZiB0aGUgbmFtZWQgYnV0dG9uIGNvbG9ycyBvciAnZGlzYWJsZWQnXG4gKiBAcmV0dXJucyBTdHlsZSBvYmplY3QgYHsgYmFja2dyb3VuZENvbG9yLCBjb2xvciB9YFxuICovXG5leHBvcnQgdmFyIGV1aUJ1dHRvbkNvbG9yID0gZnVuY3Rpb24gZXVpQnV0dG9uQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcbiAgZnVuY3Rpb24gdGludE9yU2hhZGUoY29sb3IpIHtcbiAgICByZXR1cm4gY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShjb2xvciwgMC43KSA6IHRpbnQoY29sb3IsIDAuOCk7XG4gIH1cbiAgdmFyIGZvcmVncm91bmQ7XG4gIHZhciBiYWNrZ3JvdW5kO1xuICBzd2l0Y2ggKGNvbG9yKSB7XG4gICAgY2FzZSAnZGlzYWJsZWQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6IGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZFRleHQsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUsIDAuMTUpXG4gICAgICB9O1xuICAgIGNhc2UgJ3RleHQnOlxuICAgICAgZm9yZWdyb3VuZCA9IGV1aVRoZW1lLmNvbG9yc1tjb2xvcl07XG4gICAgICBiYWNrZ3JvdW5kID0gY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSwgMC4yKSA6IHRpbnQoZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUsIDAuNSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZm9yZWdyb3VuZCA9IGV1aVRoZW1lLmNvbG9yc1tcIlwiLmNvbmNhdChjb2xvciwgXCJUZXh0XCIpXTtcbiAgICAgIGJhY2tncm91bmQgPSB0aW50T3JTaGFkZShldWlUaGVtZS5jb2xvcnNbY29sb3JdKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiB7XG4gICAgY29sb3I6IG1ha2VIaWdoQ29udHJhc3RDb2xvcihmb3JlZ3JvdW5kKShiYWNrZ3JvdW5kKSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRcbiAgfTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgYGZpbGxgIHZlcnNpb24gb2YgYnV0dG9ucyBzdHlsZXMgd2l0aCBwcm9wZXIgdGV4dCBjb250cmFzdC5cbiAqIEBwYXJhbSBldWlUaGVtZUNvbnRleHRcbiAqIEBwYXJhbSBjb2xvciBPbmUgb2YgdGhlIG5hbWVkIGJ1dHRvbiBjb2xvcnMgb3IgJ2Rpc2FibGVkJ1xuICogQHJldHVybnMgU3R5bGUgb2JqZWN0IGB7IGJhY2tncm91bmRDb2xvciwgY29sb3IgfWBcbiAqL1xuZXhwb3J0IHZhciBldWlCdXR0b25GaWxsQ29sb3IgPSBmdW5jdGlvbiBldWlCdXR0b25GaWxsQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcbiAgdmFyIGdldEZvcmVncm91bmRDb2xvciA9IGZ1bmN0aW9uIGdldEZvcmVncm91bmRDb2xvcihiYWNrZ3JvdW5kKSB7XG4gICAgcmV0dXJuIGlzQ29sb3JEYXJrLmFwcGx5KHZvaWQgMCwgX3RvQ29uc3VtYWJsZUFycmF5KGhleFRvUmdiKGJhY2tncm91bmQpKSkgPyBldWlUaGVtZS5jb2xvcnMuZ2hvc3QgOiBldWlUaGVtZS5jb2xvcnMuaW5rO1xuICB9O1xuICB2YXIgYmFja2dyb3VuZDtcbiAgdmFyIGZvcmVncm91bmQ7XG4gIHN3aXRjaCAoY29sb3IpIHtcbiAgICBjYXNlICdkaXNhYmxlZCc6XG4gICAgICBiYWNrZ3JvdW5kID0gZXVpQnV0dG9uQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikuYmFja2dyb3VuZENvbG9yO1xuICAgICAgZm9yZWdyb3VuZCA9IGV1aUJ1dHRvbkNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLmNvbG9yO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGV4dCc6XG4gICAgICBiYWNrZ3JvdW5kID0gY29sb3JNb2RlID09PSAnREFSSycgPyBldWlUaGVtZS5jb2xvcnMudGV4dCA6IGV1aVRoZW1lLmNvbG9ycy5kYXJrU2hhZGU7XG4gICAgICBmb3JlZ3JvdW5kID0gZ2V0Rm9yZWdyb3VuZENvbG9yKGJhY2tncm91bmQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgY2FzZSAnYWNjZW50JzpcbiAgICAgIC8vIFN1Y2Nlc3MgLyBhY2NlbnQgZmlsbHMgYXJlIGhhcmQgdG8gcmVhZCBvbiBsaWdodCBtb2RlIGV2ZW4gdGhvdWdoIHRoZXkgcGFzcyBjb2xvciBjb250cmFzdCByYXRpb3NcbiAgICAgIC8vIFRPRE86IElmIFdDQUcgMyBnZXRzIGFkb3B0ZWQgKHdoaWNoIHdvdWxkIGNhbGN1bGF0ZXMgbHVtaW5vc2l0eSAmIHdvdWxkIGFsbG93IHVzIHRvIHVzZSB3aGl0ZSB0ZXh0IGluc3RlYWQpLFxuICAgICAgLy8gd2UgY2FuIGdldCByaWQgb2YgdGhpcyBjYXNlIChodHRwczovL2Jsb2cuZGF0YXdyYXBwZXIuZGUvY29sb3ItY29udHJhc3QtY2hlY2stZGF0YS12aXMtd2NhZy1hcGNhLylcbiAgICAgIGJhY2tncm91bmQgPSBjb2xvck1vZGUgPT09ICdMSUdIVCcgPyB0aW50KGV1aVRoZW1lLmNvbG9yc1tjb2xvcl0sIDAuMykgOiBldWlUaGVtZS5jb2xvcnNbY29sb3JdO1xuICAgICAgZm9yZWdyb3VuZCA9IGdldEZvcmVncm91bmRDb2xvcihiYWNrZ3JvdW5kKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBiYWNrZ3JvdW5kID0gZXVpVGhlbWUuY29sb3JzW2NvbG9yXTtcbiAgICAgIGZvcmVncm91bmQgPSBnZXRGb3JlZ3JvdW5kQ29sb3IoYmFja2dyb3VuZCk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4ge1xuICAgIGNvbG9yOiBmb3JlZ3JvdW5kLFxuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZFxuICB9O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBgZW1wdHlgIHZlcnNpb24gb2YgYnV0dG9uIHN0eWxlcyB1c2luZyB0aGUgdGV4dC12YXJpYW50IGFuZCBhZGRpbmcgaW50ZXJhY3RpdmUgc3R5bGVzLlxuICogQHBhcmFtIGV1aVRoZW1lQ29udGV4dFxuICogQHBhcmFtIGNvbG9yIE9uZSBvZiB0aGUgbmFtZWQgYnV0dG9uIGNvbG9ycyBvciAnZGlzYWJsZWQnXG4gKiBAcmV0dXJucyBTdHlsZSBvYmplY3QgYHsgYmFja2dyb3VuZENvbG9yLCBjb2xvciB9YCB3aGVyZSBgYmFja2dyb3VuZGAgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGludGVyYWN0aXZlIHN0YXRlc1xuICovXG5leHBvcnQgdmFyIGV1aUJ1dHRvbkVtcHR5Q29sb3IgPSBmdW5jdGlvbiBldWlCdXR0b25FbXB0eUNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpIHtcbiAgdmFyIGZvcmVncm91bmQ7XG4gIHZhciBiYWNrZ3JvdW5kO1xuICBzd2l0Y2ggKGNvbG9yKSB7XG4gICAgY2FzZSAnZGlzYWJsZWQnOlxuICAgICAgZm9yZWdyb3VuZCA9IGV1aUJ1dHRvbkNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLmNvbG9yO1xuICAgICAgYmFja2dyb3VuZCA9ICd0cmFuc3BhcmVudCc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0ZXh0JzpcbiAgICAgIGZvcmVncm91bmQgPSBldWlCdXR0b25Db2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKS5jb2xvcjtcbiAgICAgIGJhY2tncm91bmQgPSBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAnc3ViZHVlZCcsIHtcbiAgICAgICAgbWV0aG9kOiAndHJhbnNwYXJlbnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBmb3JlZ3JvdW5kID0gZXVpQnV0dG9uQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikuY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kID0gZXVpQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IsIHtcbiAgICAgICAgbWV0aG9kOiAndHJhbnNwYXJlbnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiB7XG4gICAgY29sb3I6IGZvcmVncm91bmQsXG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kXG4gIH07XG59O1xuXG4vKipcbiAqIEdpdmVuIHRoZSBidXR0b24gZGlzcGxheSB0eXBlLCByZXR1cm5zIHRoZSBFbW90aW9uIGJhc2VkIGNvbG9yIGtleXMuXG4gKiBAcGFyYW0gb3B0aW9ucyBCdXR0b24gZGlzcGxheSB0eXBlXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgb2YgYF9FdWlCdXR0b25Db2xvcmAga2V5cyBpbmNsdWRpbmcgYGRpc2FibGVkYFxuICovXG5leHBvcnQgdmFyIHVzZUV1aUJ1dHRvbkNvbG9yQ1NTID0gZnVuY3Rpb24gdXNlRXVpQnV0dG9uQ29sb3JDU1MoKSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIF9vcHRpb25zJGRpc3BsYXkgPSBvcHRpb25zLmRpc3BsYXksXG4gICAgZGlzcGxheSA9IF9vcHRpb25zJGRpc3BsYXkgPT09IHZvaWQgMCA/ICdiYXNlJyA6IF9vcHRpb25zJGRpc3BsYXk7XG4gIHZhciBjb2xvcnNEaXNwbGF5c01hcCA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUJ1dHRvbkRpc3BsYXlzQ29sb3JzKTtcbiAgcmV0dXJuIGNvbG9yc0Rpc3BsYXlzTWFwW2Rpc3BsYXldO1xufTtcbnZhciBldWlCdXR0b25EaXNwbGF5c0NvbG9ycyA9IGZ1bmN0aW9uIGV1aUJ1dHRvbkRpc3BsYXlzQ29sb3JzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgQ09MT1JTID0gW10uY29uY2F0KEJVVFRPTl9DT0xPUlMsIFsnZGlzYWJsZWQnXSk7XG4gIHZhciBkaXNwbGF5c0NvbG9yc01hcCA9IHt9O1xuICBCVVRUT05fRElTUExBWVMuZm9yRWFjaChmdW5jdGlvbiAoZGlzcGxheSkge1xuICAgIGRpc3BsYXlzQ29sb3JzTWFwW2Rpc3BsYXldID0ge307XG4gICAgQ09MT1JTLmZvckVhY2goZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICBzd2l0Y2ggKGRpc3BsYXkpIHtcbiAgICAgICAgY2FzZSAnYmFzZSc6XG4gICAgICAgICAgZGlzcGxheXNDb2xvcnNNYXBbZGlzcGxheV1bY29sb3JdID0gLyojX19QVVJFX18qL2NzcyhldWlCdXR0b25Db2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKSwgXCI7O2xhYmVsOmRpc3BsYXlzQ29sb3JzTWFwLWRpc3BsYXktY29sb3I7XCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmaWxsJzpcbiAgICAgICAgICBkaXNwbGF5c0NvbG9yc01hcFtkaXNwbGF5XVtjb2xvcl0gPSAvKiNfX1BVUkVfXyovY3NzKGV1aUJ1dHRvbkZpbGxDb2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKSwgXCJvdXRsaW5lLWNvbG9yOlwiLCBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlID09PSAnREFSSycgJiYgY29sb3IgPT09ICd0ZXh0JyA/ICdjdXJyZW50Q29sb3InIDogZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLmNvbG9ycy5mdWxsU2hhZGUsIFwiOztsYWJlbDpkaXNwbGF5c0NvbG9yc01hcC1kaXNwbGF5LWNvbG9yO1wiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZW1wdHknOlxuICAgICAgICAgIGRpc3BsYXlzQ29sb3JzTWFwW2Rpc3BsYXldW2NvbG9yXSA9IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpQnV0dG9uRW1wdHlDb2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKS5jb2xvciwgXCI7Jjpmb2N1cywmOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlCdXR0b25FbXB0eUNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLmJhY2tncm91bmRDb2xvciwgXCI7fTtsYWJlbDpkaXNwbGF5c0NvbG9yc01hcC1kaXNwbGF5LWNvbG9yO1wiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gVHdlYWsgYXV0by1nZW5lcmF0ZWQgRW1vdGlvbiBsYWJlbC9jbGFzc05hbWUgb3V0cHV0XG4gICAgICB2YXIgZW1vdGlvbk91dHB1dCA9IGRpc3BsYXlzQ29sb3JzTWFwW2Rpc3BsYXldW2NvbG9yXTtcbiAgICAgIGVtb3Rpb25PdXRwdXQuc3R5bGVzID0gZW1vdGlvbk91dHB1dC5zdHlsZXMucmVwbGFjZSgnbGFiZWw6ZGlzcGxheXNDb2xvcnNNYXAtZGlzcGxheS1jb2xvcjsnLCBcImxhYmVsOlwiLmNvbmNhdChkaXNwbGF5LCBcIi1cIikuY29uY2F0KGNvbG9yLCBcIjtcIikpO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGRpc3BsYXlzQ29sb3JzTWFwO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSB0cmFuc2xhdGUgYW5pbWF0aW9uIHdoZW4gYnV0dG9uIGlzIGluIGZvY3VzLlxuICogQHJldHVybnMgc3RyaW5nXG4gKi9cbmV4cG9ydCB2YXIgdXNlRXVpQnV0dG9uRm9jdXNDU1MgPSBmdW5jdGlvbiB1c2VFdWlCdXR0b25Gb2N1c0NTUygpIHtcbiAgcmV0dXJuIHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUJ1dHRvbkZvY3VzQ1NTKTtcbn07XG52YXIgZXVpQnV0dG9uRm9jdXNBbmltYXRpb24gPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgNTAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7XFxuICB9XFxuXCJdKSkpO1xudmFyIGV1aUJ1dHRvbkZvY3VzQ1NTID0gZnVuY3Rpb24gZXVpQnV0dG9uRm9jdXNDU1MoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICB2YXIgZm9jdXNDU1MgPSAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246dHJhbnNmb3JtIFwiLCBldWlUaGVtZS5hbmltYXRpb24ubm9ybWFsLCBcIiBlYXNlLWluLW91dCxiYWNrZ3JvdW5kLWNvbG9yIFwiLCBldWlUaGVtZS5hbmltYXRpb24ubm9ybWFsLCBcIiBlYXNlLWluLW91dDsmOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xcHgpO30mOmZvY3Vze2FuaW1hdGlvbjpcIiwgZXVpQnV0dG9uRm9jdXNBbmltYXRpb24sIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ubm9ybWFsLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmJvdW5jZSwgXCI7fSY6YWN0aXZlOm5vdCg6ZGlzYWJsZWQpe3RyYW5zZm9ybTp0cmFuc2xhdGVZKDFweCk7fX07bGFiZWw6Zm9jdXNDU1M7XCIpO1xuICAvLyBSZW1vdmUgdGhlIGF1dG8tZ2VuZXJhdGVkIGxhYmVsLlxuICAvLyBXZSBjb3VsZCB0eXBpY2FsbHkgYXZvaWQgYSBsYWJlbCBieSB1c2luZyBhIHBsYWluIHN0cmluZyBgYCBpbnN0ZWFkIG9mIGNzc2BgLFxuICAvLyBidXQgd2UgbmVlZCBjc3NgYCBmb3Iga2V5ZnJhbWVzYGAgdG8gd29yayBmb3IgdGhlIGZvY3VzIGFuaW1hdGlvblxuICBmb2N1c0NTUy5zdHlsZXMgPSBmb2N1c0NTUy5zdHlsZXMucmVwbGFjZSgnbGFiZWw6Zm9jdXNDU1M7JywgJycpO1xuICByZXR1cm4gZm9jdXNDU1M7XG59O1xuXG4vKipcbiAqIE1hcCBvZiBgc2l6ZWAgcHJvcHMgdG8gdmFyaW91cyBzaXppbmdzL3NjYWxlc1xuICogdGhhdCBzaG91bGQgcmVtYWluIGNvbnNpc3RlbnQgYWNyb3NzIGFsbCBidXR0b25zXG4gKi9cbmV4cG9ydCB2YXIgZXVpQnV0dG9uU2l6ZU1hcCA9IGZ1bmN0aW9uIGV1aUJ1dHRvblNpemVNYXAoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgeHM6IHtcbiAgICAgIGhlaWdodDogZXVpVGhlbWUuc2l6ZS5sLFxuICAgICAgcmFkaXVzOiBldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLFxuICAgICAgZm9udFNjYWxlOiAneHMnXG4gICAgfSxcbiAgICBzOiB7XG4gICAgICBoZWlnaHQ6IGV1aVRoZW1lLnNpemUueGwsXG4gICAgICByYWRpdXM6IGV1aVRoZW1lLmJvcmRlci5yYWRpdXMuc21hbGwsXG4gICAgICBmb250U2NhbGU6ICdzJ1xuICAgIH0sXG4gICAgbToge1xuICAgICAgaGVpZ2h0OiBldWlUaGVtZS5zaXplLnh4bCxcbiAgICAgIHJhZGl1czogZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sXG4gICAgICBmb250U2NhbGU6ICdzJ1xuICAgIH1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJlbGVtZW50XCIsIFwidHlwZVwiLCBcImNoaWxkcmVuXCIsIFwiaWNvblR5cGVcIiwgXCJpY29uU2lkZVwiLCBcImljb25TaXplXCIsIFwic2l6ZVwiLCBcImlzRGlzYWJsZWRcIiwgXCJkaXNhYmxlZFwiLCBcImlzTG9hZGluZ1wiLCBcImlzU2VsZWN0ZWRcIiwgXCJmdWxsV2lkdGhcIiwgXCJtaW5XaWR0aFwiLCBcImNvbnRlbnRQcm9wc1wiLCBcInRleHRQcm9wc1wiLCBcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJzdHlsZVwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcblxuLy8gQHRzLWlnbm9yZSBtb2R1bGUgZG9lc24ndCBleHBvcnQgYGNyZWF0ZUVsZW1lbnRgXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUJ1dHRvbkRpc3BsYXlTdHlsZXMgfSBmcm9tICcuL19idXR0b25fZGlzcGxheS5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uRGlzcGxheUNvbnRlbnQgfSBmcm9tICcuL19idXR0b25fZGlzcGxheV9jb250ZW50JztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgU0laRVMgPSBbJ3hzJywgJ3MnLCAnbSddO1xuXG4vKipcbiAqIEV4dGVuZHMgRXVpQnV0dG9uRGlzcGxheUNvbnRlbnRQcm9wcyB3aGljaCBwcm92aWRlc1xuICogYGljb25UeXBlYCwgYGljb25TaWRlYCwgYW5kIGB0ZXh0UHJvcHNgXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQnV0dG9uRGlzYWJsZWQoX3JlZikge1xuICB2YXIgaHJlZiA9IF9yZWYuaHJlZixcbiAgICBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIGlzTG9hZGluZyA9IF9yZWYuaXNMb2FkaW5nO1xuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHJldHVybiBpc0xvYWRpbmcgfHwgaXNEaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG59XG5cbi8qKlxuICogRXVpQnV0dG9uRGlzcGxheSBpcyBhbiBpbnRlcm5hbC1vbmx5IGNvbXBvbmVudCB1c2VkIGZvciBkaXNwbGF5aW5nXG4gKiBhbnkgZWxlbWVudCBhcyBhIGJ1dHRvbi5cbiAqL1xuZXhwb3J0IHZhciBFdWlCdXR0b25EaXNwbGF5ID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYyLCByZWYpIHtcbiAgdmFyIF9yZWYyJGVsZW1lbnQgPSBfcmVmMi5lbGVtZW50LFxuICAgIF9lbGVtZW50ID0gX3JlZjIkZWxlbWVudCA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmMiRlbGVtZW50LFxuICAgIF9yZWYyJHR5cGUgPSBfcmVmMi50eXBlLFxuICAgIHR5cGUgPSBfcmVmMiR0eXBlID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYyJHR5cGUsXG4gICAgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICBpY29uVHlwZSA9IF9yZWYyLmljb25UeXBlLFxuICAgIF9yZWYyJGljb25TaWRlID0gX3JlZjIuaWNvblNpZGUsXG4gICAgaWNvblNpZGUgPSBfcmVmMiRpY29uU2lkZSA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZjIkaWNvblNpZGUsXG4gICAgaWNvblNpemUgPSBfcmVmMi5pY29uU2l6ZSxcbiAgICBfcmVmMiRzaXplID0gX3JlZjIuc2l6ZSxcbiAgICBzaXplID0gX3JlZjIkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZjIkc2l6ZSxcbiAgICBpc0Rpc2FibGVkID0gX3JlZjIuaXNEaXNhYmxlZCxcbiAgICBkaXNhYmxlZCA9IF9yZWYyLmRpc2FibGVkLFxuICAgIGlzTG9hZGluZyA9IF9yZWYyLmlzTG9hZGluZyxcbiAgICBpc1NlbGVjdGVkID0gX3JlZjIuaXNTZWxlY3RlZCxcbiAgICBmdWxsV2lkdGggPSBfcmVmMi5mdWxsV2lkdGgsXG4gICAgbWluV2lkdGggPSBfcmVmMi5taW5XaWR0aCxcbiAgICBjb250ZW50UHJvcHMgPSBfcmVmMi5jb250ZW50UHJvcHMsXG4gICAgdGV4dFByb3BzID0gX3JlZjIudGV4dFByb3BzLFxuICAgIGhyZWYgPSBfcmVmMi5ocmVmLFxuICAgIHRhcmdldCA9IF9yZWYyLnRhcmdldCxcbiAgICByZWwgPSBfcmVmMi5yZWwsXG4gICAgc3R5bGUgPSBfcmVmMi5zdHlsZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQpO1xuICB2YXIgYnV0dG9uSXNEaXNhYmxlZCA9IGlzQnV0dG9uRGlzYWJsZWQoe1xuICAgIGhyZWY6IGhyZWYsXG4gICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCB8fCBkaXNhYmxlZCxcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ1xuICB9KTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUJ1dHRvbkRpc3BsYXlTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlCdXR0b25EaXNwbGF5LCBzdHlsZXNbc2l6ZV0sIGZ1bGxXaWR0aCAmJiBzdHlsZXMuZnVsbFdpZHRoLCBtaW5XaWR0aCA9PSBudWxsICYmIHN0eWxlcy5kZWZhdWx0TWluV2lkdGgsIGJ1dHRvbklzRGlzYWJsZWQgJiYgc3R5bGVzLmlzRGlzYWJsZWRdO1xuICB2YXIgaW5uZXJOb2RlID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25EaXNwbGF5Q29udGVudCwgX2V4dGVuZHMoe1xuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgIGlzRGlzYWJsZWQ6IGJ1dHRvbklzRGlzYWJsZWQsXG4gICAgaWNvblR5cGU6IGljb25UeXBlLFxuICAgIGljb25TaWRlOiBpY29uU2lkZSxcbiAgICBpY29uU2l6ZTogaWNvblNpemUsXG4gICAgdGV4dFByb3BzOiB0ZXh0UHJvcHNcbiAgfSwgY29udGVudFByb3BzKSwgY2hpbGRyZW4pO1xuICB2YXIgZWxlbWVudCA9IGJ1dHRvbklzRGlzYWJsZWQgPyAnYnV0dG9uJyA6IGhyZWYgPyAnYScgOiBfZWxlbWVudDtcbiAgdmFyIGVsZW1lbnRQcm9wcyA9IHt9O1xuICAvLyBFbGVtZW50LXNwZWNpZmljIGF0dHJpYnV0ZXNcbiAgaWYgKGVsZW1lbnQgPT09ICdidXR0b24nKSB7XG4gICAgZWxlbWVudFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlbGVtZW50UHJvcHMpLCB7fSwge1xuICAgICAgZGlzYWJsZWQ6IGJ1dHRvbklzRGlzYWJsZWQsXG4gICAgICAnYXJpYS1wcmVzc2VkJzogaXNTZWxlY3RlZFxuICAgIH0pO1xuICB9XG4gIHZhciByZWxPYmogPSB7fTtcbiAgaWYgKGhyZWYgJiYgIWJ1dHRvbklzRGlzYWJsZWQpIHtcbiAgICByZWxPYmouaHJlZiA9IGhyZWY7XG4gICAgcmVsT2JqLnJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICAgIHJlbE9iai50YXJnZXQgPSB0YXJnZXQ7XG4gIH0gZWxzZSB7XG4gICAgcmVsT2JqLnR5cGUgPSB0eXBlO1xuICB9XG4gIHJldHVybiBjcmVhdGVFbGVtZW50KGVsZW1lbnQsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBzdHlsZTogbWluV2lkdGggPyBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKSwge30sIHtcbiAgICAgIG1pbklubGluZVNpemU6IG1pbldpZHRoXG4gICAgfSkgOiBzdHlsZSxcbiAgICByZWY6IHJlZlxuICB9LCBlbGVtZW50UHJvcHMpLCByZWxPYmopLCByZXN0KSwgaW5uZXJOb2RlKTtcbn0pO1xuRXVpQnV0dG9uRGlzcGxheS5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBlbGVtZW50OiBQcm9wVHlwZXMub25lT2YoW1wiYVwiLCBcImJ1dHRvblwiLCBcInNwYW5cIl0pLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogRXh0ZW5kcyB0aGUgYnV0dG9uIHRvIDEwMCUgd2lkdGhcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRXh0ZW5kcyB0aGUgYnV0dG9uIHRvIDEwMCUgd2lkdGhcbiAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWluaW11bSB3aWR0aFxuICAgICAqL1xuICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBtaW5pbXVtIHdpZHRoXG4gICAgICovXG4gIG1pbldpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICovXG4gIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgc3R5bGU6IFByb3BUeXBlcy5hbnksXG4gIHR5cGU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFt1bmRlZmluZWRdKV0pLFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQvY2hpbGRyZW4gb25seSAobm90IGljb24pXG4gICAgICpcbiAgICAgKiBUaGlzIHNwYW4gd3JhcHBlciBjYW4gYmUgcmVtb3ZlZCBieSBwYXNzaW5nIGB0ZXh0UHJvcHM9e2ZhbHNlfWAuXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5hbnksXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55XG59O1xuRXVpQnV0dG9uRGlzcGxheS5kaXNwbGF5TmFtZSA9ICdFdWlCdXR0b25EaXNwbGF5JzsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsgQ09MT1JfTU9ERVNfU1RBTkRBUkQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS90eXBlcyc7XG5cbi8vIENyZWF0ZSBhIENTUyBjb2xvciB2YWx1ZSB1c2luZyB3aG9zZSBvcGFjaXR5IGlzIGRldGVybWluZWQgYmFzZWRcbi8vIG9uIGVpdGhlciBhIGxpZ2h0IG9yIGRhcmsgdGhlbWUuIFdlIHVzZSBhIG11bHRpcGxpZXJcbi8vIG9mIDEgZm9yIGxpZ2h0IHRoZW1lcyBhbmQgMi41IGZvciBkYXJrIHRoZW1lc1xuZXhwb3J0IHZhciBnZXRTaGFkb3dDb2xvciA9IGZ1bmN0aW9uIGdldFNoYWRvd0NvbG9yKGNvbG9yLCBvcGFjaXR5LCBjb2xvck1vZGUpIHtcbiAgdmFyIHRoZW1lT3BhY2l0eSA9IGNvbG9yTW9kZSA9PT0gQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyayA/IG9wYWNpdHkgKiAzLjUgOiBvcGFjaXR5ICogMTtcbiAgcmV0dXJuIGNocm9tYShjb2xvcikuYWxwaGEodGhlbWVPcGFjaXR5KS5jc3MoKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUnO1xuaW1wb3J0IHsgZ2V0U2hhZG93Q29sb3IgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuLyoqXG4gKiBldWlTbGlnaHRTaGFkb3dcbiAqL1xuZXhwb3J0IHZhciBldWlTaGFkb3dYU21hbGwgPSBmdW5jdGlvbiBldWlTaGFkb3dYU21hbGwoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlO1xuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF9jb2xvciA9IF9yZWYyLmNvbG9yO1xuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgLjhweCAuOHB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNCwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDIuM3B4IDJweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjAzLCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuXG4vKipcbiAqIGJvdHRvbVNoYWRvd1NtYWxsXG4gKi9cbmV4cG9ydCB2YXIgZXVpU2hhZG93U21hbGwgPSBmdW5jdGlvbiBldWlTaGFkb3dTbWFsbChfcmVmMykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMy5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmMy5jb2xvck1vZGU7XG4gIHZhciBfcmVmNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgX2NvbG9yID0gX3JlZjQuY29sb3I7XG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAuN3B4IDEuNHB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNywgY29sb3JNb2RlKSwgXCIsXFxuICAwIDEuOXB4IDRweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA1LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgNC41cHggMTBweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA1LCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuXG4vKipcbiAqIGJvdHRvbVNoYWRvd01lZGl1bVxuICovXG5leHBvcnQgdmFyIGV1aVNoYWRvd01lZGl1bSA9IGZ1bmN0aW9uIGV1aVNoYWRvd01lZGl1bShfcmVmNSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmNS5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmNS5jb2xvck1vZGU7XG4gIHZhciBfcmVmNiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgX2NvbG9yID0gX3JlZjYuY29sb3IsXG4gICAgcHJvcGVydHkgPSBfcmVmNi5wcm9wZXJ0eTtcbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIGlmIChwcm9wZXJ0eSA9PT0gJ2ZpbHRlcicpIHtcbiAgICAvLyBVc2luZyBvbmx5IG9uZSBkcm9wLXNoYWRvdyBmaWx0ZXIgaW5zdGVhZCBvZiBtdWx0aXBsZSBpcyBtb3JlIHBlcmZvcm1hbnQgJiBwcmV2ZW50cyBTYWZhcmkgYnVnc1xuICAgIHJldHVybiBcImZpbHRlcjogZHJvcC1zaGFkb3coMCA1LjdweCA5cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjIsIGNvbG9yTW9kZSksIFwiKTtcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiYm94LXNoYWRvdzpcXG4gICAgICAwIC45cHggNHB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wOCwgY29sb3JNb2RlKSwgXCIsXFxuICAgICAgMCAyLjZweCA4cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNiwgY29sb3JNb2RlKSwgXCIsXFxuICAgICAgMCA1LjdweCAxMnB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDUsIGNvbG9yTW9kZSksIFwiLFxcbiAgICAgIDAgMTVweCAxNXB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDQsIGNvbG9yTW9kZSksIFwiO1wiKTtcbiAgfVxufTtcblxuLyoqXG4gKiBib3R0b21TaGFkb3dcbiAqL1xuZXhwb3J0IHZhciBldWlTaGFkb3dMYXJnZSA9IGZ1bmN0aW9uIGV1aVNoYWRvd0xhcmdlKF9yZWY3KSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWY3LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWY3LmNvbG9yTW9kZTtcbiAgdmFyIF9yZWY4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBfY29sb3IgPSBfcmVmOC5jb2xvcjtcbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIDFweCA1cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjEsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAzLjZweCAxM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDcsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCA4LjRweCAyM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAyM3B4IDM1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcblxuLyoqXG4gKiBib3R0b21TaGFkb3dMYXJnZVxuICovXG5cbmV4cG9ydCB2YXIgZXVpU2hhZG93WExhcmdlID0gZnVuY3Rpb24gZXVpU2hhZG93WExhcmdlKF9yZWY5KSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWY5LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWY5LmNvbG9yTW9kZTtcbiAgdmFyIF9yZWYxMCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgX2NvbG9yID0gX3JlZjEwLmNvbG9yLFxuICAgIHJldmVyc2UgPSBfcmVmMTAucmV2ZXJzZTtcbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIFwiLmNvbmNhdChyZXZlcnNlID8gJy0nIDogJycsIFwiMi43cHggOXB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMTMsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCBcIikuY29uY2F0KHJldmVyc2UgPyAnLScgOiAnJywgXCI5LjRweCAyNHB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDksIGNvbG9yTW9kZSksIFwiLFxcbiAgMCBcIikuY29uY2F0KHJldmVyc2UgPyAnLScgOiAnJywgXCIyMS44cHggNDNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA4LCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuXG4vKipcbiAqIHNsaWdodFNoYWRvd0hvdmVyXG4gKi9cbmV4cG9ydCB2YXIgZXVpU2xpZ2h0U2hhZG93SG92ZXIgPSBmdW5jdGlvbiBldWlTbGlnaHRTaGFkb3dIb3ZlcihfcmVmMTEpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjExLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYxMS5jb2xvck1vZGU7XG4gIHZhciBfcmVmMTIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF9jb2xvciA9IF9yZWYxMi5jb2xvcjtcbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIDFweCA1cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjEsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAzLjZweCAxM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDcsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCA4LjRweCAyM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAyM3B4IDM1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpU2xpZ2h0U2hhZG93SG92ZXIgPSBmdW5jdGlvbiB1c2VFdWlTbGlnaHRTaGFkb3dIb3Zlcihjb2xvcikge1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNsaWdodFNoYWRvd0hvdmVyKGV1aVRoZW1lQ29udGV4dCwge1xuICAgIGNvbG9yOiBjb2xvclxuICB9KTtcbn07XG5cbi8qKlxuICogYm90dG9tU2hhZG93RmxhdFxuICpcbiAqIFNpbWlsYXIgdG8gc2hhZG93IG1lZGl1bSBidXQgd2l0aG91dCB0aGUgYm90dG9tIGRlcHRoLlxuICogVXNlZnVsIGZvciBwb3BvdmVycyB0aGF0IGRyb3AgVVAgcmF0aGVyIHRoYW4gRE9XTi5cbiAqL1xuZXhwb3J0IHZhciBldWlTaGFkb3dGbGF0ID0gZnVuY3Rpb24gZXVpU2hhZG93RmxhdChfcmVmMTMpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjEzLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYxMy5jb2xvck1vZGU7XG4gIHZhciBfcmVmMTQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF9jb2xvciA9IF9yZWYxNC5jb2xvcjtcbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIDAgLjhweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAwIDJweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMCA1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNCwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDAgMTdweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjAzLCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlTaGFkb3dGbGF0ID0gZnVuY3Rpb24gdXNlRXVpU2hhZG93RmxhdChjb2xvcikge1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNoYWRvd0ZsYXQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0pO1xufTtcbmV4cG9ydCB2YXIgZXVpU2hhZG93ID0gZnVuY3Rpb24gZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgc2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2wnO1xuICB2YXIgX3JlZjE1ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fSxcbiAgICBjb2xvciA9IF9yZWYxNS5jb2xvcjtcbiAgc3dpdGNoIChzaXplKSB7XG4gICAgY2FzZSAneHMnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd1hTbWFsbChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBldWlTaGFkb3dTbWFsbChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBldWlTaGFkb3dNZWRpdW0oZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSk7XG4gICAgY2FzZSAnbCc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93TGFyZ2UoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSk7XG4gICAgY2FzZSAneGwnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd1hMYXJnZShldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcbiAgICBkZWZhdWx0OlxuICAgICAgY29uc29sZS53YXJuKCdQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHNpemUgb3B0aW9uIHRvIHVzZUV1aVNoYWRvdycpO1xuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuZXhwb3J0IHZhciB1c2VFdWlTaGFkb3cgPSBmdW5jdGlvbiB1c2VFdWlTaGFkb3coKSB7XG4gIHZhciBzaXplID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnbCc7XG4gIHZhciBjb2xvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsIHNpemUsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUsIGxvZ2ljYWxDU1MsIGxvZ2ljYWxTaG9ydGhhbmRDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlCdXR0b25TaXplTWFwIH0gZnJvbSAnLi4vLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuLy8gUHJvdmlkZXMgYSBzb2xpZCByZXNldCBhbmQgYmFzZSBmb3IgaGFuZGxpbmcgc2l6aW5nIGxheW91dFxuLy8gRG9lcyBub3QgaW5jbHVkZSBhbnkgdmlzdWFsIHN0eWxlc1xuZXhwb3J0IHZhciBldWlCdXR0b25CYXNlQ1NTID0gZnVuY3Rpb24gZXVpQnV0dG9uQmFzZUNTUygpIHtcbiAgcmV0dXJuIFwiXFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICBcIi5jb25jYXQobG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiO1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiO1xcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgXCIpO1xufTtcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjg1OTVwOS1pc0Rpc2FibGVkXCIsXG4gIHN0eWxlczogXCJjdXJzb3I6bm90LWFsbG93ZWQ7bGFiZWw6aXNEaXNhYmxlZDtcIlxufSA6IHtcbiAgbmFtZTogXCI4NTk1cDktaXNEaXNhYmxlZFwiLFxuICBzdHlsZXM6IFwiY3Vyc29yOm5vdC1hbGxvd2VkO2xhYmVsOmlzRGlzYWJsZWQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpQnV0dG9uRGlzcGxheVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUJ1dHRvbkRpc3BsYXlTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIHNpemVzID0gZXVpQnV0dG9uU2l6ZU1hcChldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgX2J1dHRvblNpemUgPSBmdW5jdGlvbiBfYnV0dG9uU2l6ZShzaXplS2V5KSB7XG4gICAgdmFyIHNpemUgPSBzaXplc1tzaXplS2V5XTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdoZWlnaHQnLCBzaXplLmhlaWdodCksIFwiIGxpbmUtaGVpZ2h0OlwiLCBzaXplLmhlaWdodCwgXCI7XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgc2l6ZS5mb250U2NhbGUpLCBcIiBib3JkZXItcmFkaXVzOlwiLCBzaXplLnJhZGl1cywgXCI7XCIpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlCdXR0b25EaXNwbGF5OiAvKiNfX1BVUkVfXyovY3NzKGV1aUJ1dHRvbkJhc2VDU1MoKSwgXCIgZm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0Lm1lZGl1bSwgXCI7XCIsIGxvZ2ljYWxTaG9ydGhhbmRDU1MoJ3BhZGRpbmcnLCBcIjAgXCIuY29uY2F0KGV1aVRoZW1lLnNpemUubSkpLCBcIiAmOmhvdmVyOm5vdCg6ZGlzYWJsZWQpLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9O2xhYmVsOmV1aUJ1dHRvbkRpc3BsYXk7XCIpLFxuICAgIC8vIFN0YXRlc1xuICAgIGlzRGlzYWJsZWQ6IF9yZWYsXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTpibG9jaztcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKSxcbiAgICBkZWZhdWx0TWluV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWluLXdpZHRoJywgXCJcIi5jb25jYXQoZXVpVGhlbWUuYmFzZSAqIDcsIFwicHhcIikpLCBcIjs7bGFiZWw6ZGVmYXVsdE1pbldpZHRoO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKF9idXR0b25TaXplKCd4cycpLCBcIjtsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhfYnV0dG9uU2l6ZSgncycpLCBcIjtsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKF9idXR0b25TaXplKCdtJyksIFwiO2xhYmVsOm07XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJ0ZXh0UHJvcHNcIiwgXCJpc0xvYWRpbmdcIiwgXCJpc0Rpc2FibGVkXCIsIFwiaWNvblR5cGVcIiwgXCJpY29uU2l6ZVwiLCBcImljb25TaWRlXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciB9IGZyb20gJy4uLy4uL2xvYWRpbmcnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgZXVpQnV0dG9uRGlzcGxheUNvbnRlbnRTdHlsZXMgfSBmcm9tICcuL19idXR0b25fZGlzcGxheV9jb250ZW50LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBJQ09OX1NJWkVTID0gWydzJywgJ20nXTtcbmV4cG9ydCB2YXIgSUNPTl9TSURFUyA9IFsnbGVmdCcsICdyaWdodCddO1xuXG4vKipcbiAqICpJTlRFUk5BTCBPTkxZKlxuICogVGhpcyBjb21wb25lbnQgaXMgc2ltcGx5IGEgaGVscGVyIGNvbXBvbmVudCBmb3IgcmV1c2Ugd2l0aGluIG90aGVyIGJ1dHRvbiBjb21wb25lbnRzLlxuICovXG5cbmV4cG9ydCB2YXIgRXVpQnV0dG9uRGlzcGxheUNvbnRlbnQgPSBmdW5jdGlvbiBFdWlCdXR0b25EaXNwbGF5Q29udGVudChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgdGV4dFByb3BzID0gX3JlZi50ZXh0UHJvcHMsXG4gICAgX3JlZiRpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZyxcbiAgICBpc0xvYWRpbmcgPSBfcmVmJGlzTG9hZGluZyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzTG9hZGluZyxcbiAgICBfcmVmJGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgaXNEaXNhYmxlZCA9IF9yZWYkaXNEaXNhYmxlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzRGlzYWJsZWQsXG4gICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgIF9yZWYkaWNvblNpemUgPSBfcmVmLmljb25TaXplLFxuICAgIGljb25TaXplID0gX3JlZiRpY29uU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRpY29uU2l6ZSxcbiAgICBfcmVmJGljb25TaWRlID0gX3JlZi5pY29uU2lkZSxcbiAgICBpY29uU2lkZSA9IF9yZWYkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkaWNvblNpZGUsXG4gICAgY29udGVudFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlCdXR0b25EaXNwbGF5Q29udGVudFN0eWxlcyk7XG5cbiAgLy8gQWRkIGFuIGljb24gdG8gdGhlIGJ1dHRvbiBpZiBvbmUgZXhpc3RzLlxuICB2YXIgaWNvbiA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgIC8vIFdoZW4gdGhlIGJ1dHRvbiBpcyBkaXNhYmxlZCB0aGUgdGV4dCBnZXRzIGdyYXlcbiAgICAgIC8vIGFuZCBpbiBzb21lIGJ1dHRvbnMgdGhlIGJhY2tncm91bmQgZ2V0cyBhIGxpZ2h0IGdyYXlcbiAgICAgIC8vIGZvciBiZXR0ZXIgY29udHJhc3Qgd2Ugd2FudCB0byBjaGFuZ2UgdGhlIGJvcmRlciBvZiB0aGUgc3Bpbm5lclxuICAgICAgLy8gdG8gaGF2ZSB0aGUgc2FtZSBjb2xvciBvZiB0aGUgdGV4dC4gVGhpcyB3YXkgd2UgZW5zdXJlIHRoZSBib3JkZXJzXG4gICAgICAvLyBhcmUgYWx3YXlzIHZpc2libGUuIFRoZSBkZWZhdWx0IHNwaW5uZXIgY29sb3IgY291bGQgYmUgdmVyeSBsaWdodC5cbiAgICAgIHZhciBsb2FkaW5nU3Bpbm5lckNvbG9yID0gaXNEaXNhYmxlZCA/IHtcbiAgICAgICAgYm9yZGVyOiAnY3VycmVudGNvbG9yJ1xuICAgICAgfSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgIHNpemU6IGljb25TaXplLFxuICAgICAgICBjb2xvcjogbG9hZGluZ1NwaW5uZXJDb2xvclxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpY29uVHlwZSkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgICAgc2l6ZTogaWNvblNpemUsXG4gICAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtpY29uVHlwZSwgaWNvblNpemUsIGlzTG9hZGluZywgaXNEaXNhYmxlZF0pO1xuICB2YXIgaXNUZXh0ID0gdHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJztcbiAgdmFyIGRvTm90UmVuZGVyVGV4dFdyYXBwZXIgPSB0ZXh0UHJvcHMgPT09IGZhbHNlO1xuICB2YXIgcmVuZGVyVGV4dFdyYXBwZXIgPSAoaXNUZXh0IHx8IHRleHRQcm9wcykgJiYgIWRvTm90UmVuZGVyVGV4dFdyYXBwZXI7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBzdHlsZXMuZXVpQnV0dG9uRGlzcGxheUNvbnRlbnRcbiAgfSwgY29udGVudFByb3BzKSwgaWNvblNpZGUgPT09ICdsZWZ0JyAmJiBpY29uLCByZW5kZXJUZXh0V3JhcHBlciA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHt9LCB0ZXh0UHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aS10ZXh0VHJ1bmNhdGUnLCB0ZXh0UHJvcHMgPT09IG51bGwgfHwgdGV4dFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0UHJvcHMuY2xhc3NOYW1lKVxuICB9KSwgY2hpbGRyZW4pIDogY2hpbGRyZW4sIGljb25TaWRlID09PSAncmlnaHQnICYmIGljb24pO1xufTtcbkV1aUJ1dHRvbkRpc3BsYXlDb250ZW50LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW3VuZGVmaW5lZF0pXSksXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dC9jaGlsZHJlbiBvbmx5IChub3QgaWNvbilcbiAgICAgKlxuICAgICAqIFRoaXMgc3BhbiB3cmFwcGVyIGNhbiBiZSByZW1vdmVkIGJ5IHBhc3NpbmcgYHRleHRQcm9wcz17ZmFsc2V9YC5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFjY2Vzc2liaWxpdHkgPSBmdW5jdGlvbiBFdWlJY29uQWNjZXNzaWJpbGl0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMGE4IDggMCAxIDEgMCAxNkE4IDggMCAwIDEgOCAwWm0wIDFhNyA3IDAgMSAwIDAgMTRBNyA3IDAgMCAwIDggMVptMy45NzQgNC4zNDJhLjUuNSAwIDAgMS0uMjMzLjU5NmwtLjA4My4wMzZMOSA2Ljg2djIuNTU5bC45NzQgMi45MjNhLjUuNSAwIDAgMS0uMjMzLjU5NmwtLjA4My4wMzZhLjUuNSAwIDAgMS0uNTk2LS4yMzNsLS4wMzYtLjA4My0xLTNMOCA5LjVsLS4wMjYuMTU4LTEgM2EuNS41IDAgMCAxLS45Ny0uMjI4bC4wMjItLjA4OEw3IDkuNDE2VjYuODZsLTIuNjU4LS44ODZhLjUuNSAwIDAgMSAuMjI4LS45N2wuMDg4LjAyMkw3LjU4MyA2aC44MzNsMi45MjYtLjk3NGEuNS41IDAgMCAxIC42MzIuMzE2Wk04IDNhMSAxIDAgMSAxIDAgMiAxIDEgMCAwIDEgMC0yWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQWNjZXNzaWJpbGl0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BZ2dyZWdhdGUgPSBmdW5jdGlvbiBFdWlJY29uQWdncmVnYXRlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuNSAyYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xem0wLTFhMS41IDEuNSAwIDAgMSAxLjQxNSAxaDEuOTA4YTEuNSAxLjUgMCAwIDEgMS4zOTMuOTQzTDguODM5IDdIMTIuNWEuNS41IDAgMCAxIDAgMUg4LjgzOWwtMS42MjMgNC4wNTdBMS41IDEuNSAwIDAgMSA1LjgyMyAxM0gzLjkxNWExLjUgMS41IDAgMSAxIDAtMWgxLjkwOGEuNS41IDAgMCAwIC40NjQtLjMxNEw3Ljc2MSA4SDMuOTE1YTEuNSAxLjUgMCAxIDEgMC0xSDcuNzZMNi4yODcgMy4zMTRBLjUuNSAwIDAgMCA1LjgyMyAzSDMuOTE1QTEuNSAxLjUgMCAxIDEgMi41IDF6bTAgMTFhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTF6TTMgNy41YS41LjUgMCAxIDAtMSAwIC41LjUgMCAwIDAgMSAwem05LjM1NC0zLjM1NGEuNS41IDAgMCAwLS43MDguNzA4TDEzLjc5MyA3YS43MDcuNzA3IDAgMCAxIDAgMWwtMi4xNDcgMi4xNDZhLjUuNSAwIDAgMCAuNzA4LjcwOEwxNC41IDguNzA3YTEuNzA3IDEuNzA3IDAgMCAwIDAtMi40MTRsLTIuMTQ2LTIuMTQ3elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQWdncmVnYXRlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFsZXJ0ID0gZnVuY3Rpb24gRXVpSWNvbkFsZXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41NSA5LjUwMmwuMzUtMy41MDdhLjkwNS45MDUgMCAxMC0xLjggMGwuMzUgMy41MDdhLjU1Mi41NTIgMCAwMDEuMSAwek05IDEyYTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguODY0IDEuNDk2YTEgMSAwIDAwLTEuNzI4IDBsLTcgMTJBMSAxIDAgMDAxIDE1aDE0YTEgMSAwIDAwLjg2NC0xLjUwNGwtNy0xMnpNMSAxNEw4IDJsNyAxMkgxelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQWxlcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQW5hbHl6ZUV2ZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFuYWx5emVFdmVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDkuMTY5IDIgNS4yNXY2LjE3bDYgMy40MjggNi0zLjQyOFY1LjI1TDggOS4xN1pNMTUgNHY4bC03IDQtNy00VjRsNy00IDcgNFptLTEuNDI4LjMzNkw4IDEuMTUyIDIuNDI4IDQuMzM2IDggNy45NzRsNS41NzItMy42MzhaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQW5hbHl6ZUV2ZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFuYWx5emVFdmVudCA9IGZ1bmN0aW9uIEV1aUljb25BbmFseXplRXZlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE0LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuOTI0IDQuMDEzYS42MDUuNjA1IDAgMDAtLjIyOC0uMjM2TDcuMzA0LjA4MmEuNjA3LjYwNyAwIDAwLS42MDggMEwuMzA0IDMuNzc3QS42Mi42MiAwIDAwMCA0LjMwNHY3LjM5MmMwIC4yMTcuMTE2LjQxOC4zMDQuNTI3bDYuMzkyIDMuNjk1Yy4xODguMTEuNDIuMTEuNjA4IDBsNi4zOTItMy42OTVhLjYwOS42MDkgMCAwMC4zMDQtLjUyN1Y0LjMwNGEuNjA3LjYwNyAwIDAwLS4wNzYtLjI5MXpNMSA1LjA3OXY2LjM5MWw2IDMuNDcgNi0zLjQ3VjUuMDhMNy4yNTIgOC40MzIgNyA4LjU3OWwtLjI1Mi0uMTQ3TDEgNS4wNzl6bTExLjQ3Ni0uODUyTDcgMS4wNiAxLjUyNCA0LjIyNyA3IDcuNDJsNS40NzYtMy4xOTR6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BbmFseXplRXZlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQW5ub3RhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Bbm5vdGF0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA2LjVhNC41IDQuNSAwIDEgMSA1IDQuNDczVjE2SDd2LTUuMDI3QTQuNSA0LjUgMCAwIDEgMyA2LjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Bbm5vdGF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFub21hbHlDaGFydCA9IGZ1bmN0aW9uIEV1aUljb25Bbm9tYWx5Q2hhcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC41IDE0SDJWMS41YS41LjUgMCAwIDAtMSAwdjEzYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNDIgNWEuNS41IDAgMCAxIC41MDUuNDNMOS44NjQgMTJoLjg3M2wuOTU3LS44N2EuNS41IDAgMCAxIC42NzIgMGwxLjEgMWEuNS41IDAgMCAxLS42NzIuNzRsLS43NjQtLjY5NC0uNzY0LjY5NGEuNS41IDAgMCAxLS4zMzYuMTNoLTEuNWEuNS41IDAgMCAxLS40OTUtLjQzbC0uNDI5LTMtLjMxMiAyLjk4MmEuNS41IDAgMCAxLS44MzQuMzE4bC0uNjg5LS42MjYtLjQwNC41NTJhLjUuNSAwIDAgMS0uNDA0LjIwNGgtLjUzYS41LjUgMCAwIDEtLjQwMy0uMjA0bC0uNDA1LS41NTItLjY4OS42MjZhLjUuNSAwIDEgMS0uNjcyLS43NGwxLjEtMWEuNS41IDAgMCAxIC43NC4wNzRsLjU4My43OTZoLjAyM2wuNTgzLS43OTZhLjUuNSAwIDAgMSAuNzQtLjA3NGwuMzcuMzM2LjYzLTYuMDE4QS41LjUgMCAwIDEgOC40MiA1Wm0uMDgtMy4wMWEuNS41IDAgMSAwIDAgMS4wMDIuNS41IDAgMCAwIDAtMS4wMDJaTTguNSA0QTEuNTAzIDEuNTAzIDAgMCAxIDcgMi40OTNhMS41IDEuNSAwIDAgMSAuNDQtMS4wNjZjLjU2Ni0uNTcgMS41NTQtLjU3IDIuMTIxIDAgLjI4My4yODUuNDM5LjY2My40MzkgMS4wNjZBMS41MDIgMS41MDIgMCAwIDEgOC41IDRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Bbm9tYWx5Q2hhcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQW5vbWFseVN3aW1MYW5lID0gZnVuY3Rpb24gRXVpSWNvbkFub21hbHlTd2ltTGFuZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEgNVYxaDR2NEgxWm0zLTFWMkgydjJoMlptNyAxVjFoNHY0aC00Wm0xLTFoMlYyaC0ydjJaTTEgMTBWNmg0djRIMVptMy0xVjdIMnYyaDJabTIgNnYtNGg0djRINlptMS0xaDJ2LTJIN3YyWm00IDF2LTRoNHY0aC00Wm0xLTFoMnYtMmgtMnYyWm0tMS04aDR2NGgtNFY2Wk02IDZoNHY0SDZWNlptLTUgNWg0djRIMXYtNFpNNiAxaDR2NEg2VjFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Bbm9tYWx5U3dpbUxhbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBtVHJhY2UgPSBmdW5jdGlvbiBFdWlJY29uQXBtVHJhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDBoMTJhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlYyYTIgMiAwIDAgMSAyLTJabTAgMWExIDEgMCAwIDAtMSAxdjEyYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMVYyYTEgMSAwIDAgMC0xLTFIMlptLjUgMmgxMGEuNS41IDAgMSAxIDAgMWgtMTBhLjUuNSAwIDAgMSAwLTFabTEgM2g2YS41LjUgMCAwIDEgMCAxaC02YS41LjUgMCAwIDEgMC0xWm0yIDNoNGEuNS41IDAgMCAxIDAgMWgtNGEuNS41IDAgMCAxIDAtMVptMyAzaDVhLjUuNSAwIDEgMSAwIDFoLTVhLjUuNSAwIDEgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcG1UcmFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBBZGREYXRhID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFkZERhdGEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMiAzMEgwVjNoMTIuNTdsMyA1SDMydjIyWk0yIDI4aDI4VjEwSDE0LjQzbC0zLTVIMnYyM1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDE4aC00di00aC0ydjRoLTR2Mmg0djRoMnYtNGg0elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBZGREYXRhOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEFkdmFuY2VkU2V0dGluZ3MgPSBmdW5jdGlvbiBFdWlJY29uQXBwQWR2YW5jZWRTZXR0aW5ncyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuOTA5IDI2LjE4MmgxLjkzOXY0Ljg0OEgyLjkwOXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC44NDggMTYuNjJWMEgyLjkxdjE2LjYyYTMuODc5IDMuODc5IDAgMSAwIDEuOTQgMFptLS45NyA1LjY4M2ExLjk0IDEuOTQgMCAxIDEgMC0zLjg3OSAxLjk0IDEuOTQgMCAwIDEgMCAzLjg3OVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjU0NSAxNi40ODVoMS45MzlWMzEuMDNoLTEuOTM5elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi40ODUgNi45MjRWMGgtMS45NHY2LjkyNGEzLjg3OSAzLjg3OSAwIDEgMCAxLjk0IDBabS0uOTcgNS42ODJhMS45NCAxLjk0IDAgMSAxIDAtMy44NzkgMS45NCAxLjk0IDAgMCAxIDAgMy44OFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI2LjE4MiAyNi4xODJoMS45Mzl2NC44NDhoLTEuOTM5elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOC4xMjEgMTYuNjJWMGgtMS45NHYxNi42MmEzLjg3OSAzLjg3OSAwIDEgMCAxLjk0IDBabS0uOTcgNS42ODNhMS45NCAxLjk0IDAgMSAxIDAtMy44NzkgMS45NCAxLjk0IDAgMCAxIDAgMy44NzlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBZHZhbmNlZFNldHRpbmdzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEFnZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFnZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi45OTYgMTguNjM2IDAgMjAuNDM0djYuMTMybDYgMy42IDUtMyA1IDMgNS0zIDUgMyA2LTMuNnYtNi4xMzJsLTUtM3YtNWwtNS0zdi01bC02LTMuNi02IDMuNnYyLjgzMmwyIC4wMzNWNS41NjZsNC0yLjQgNCAyLjR2My44NjhsLTEuOTk2IDEuMTk3IDEgMS43MzNMMjEgMTEuMTY2bDQgMi40djMuODY4bC00IDIuNC0yLjI1Ny0xLjM1NC0uOTcxIDEuNzVMMjAgMjEuNTY1djMuODY4bC00IDIuNC00LTIuNHYtMS43bC0yLS4wMzN2MS43MzNsLTQgMi40LTQtMi40di0zLjg2OGwxLjk5Ni0xLjE5Ny0xLTEuNzMzWk0yMiAyNS40MzR2LTMuODY4bDQtMi40IDQgMi40djMuODY4bC00IDIuNC00LTIuNFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTExIDIyLjE2Ni02LTMuNnYtNi4xMzJsNi0zLjYgNiAzLjZ2Ni4xMzJsLTYgMy42Wm00LTQuNzMydi0zLjg2OGwtNC0yLjQtNCAyLjR2My44NjhsNCAyLjQgNC0yLjRaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFnZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEFwbSA9IGZ1bmN0aW9uIEV1aUljb25BcHBBcG0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDEwaDR2MkgxVjFoMzB2NmgtMlYzSDN2N3ptMjYgMTl2LTZoMnY4SDE4di04aDJ2Nmg5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzEgMTBIOXYxMWgxMmM1LjUyMyAwIDEwLTQuNDc3IDEwLTEwdi0xem0tMTAgOUgxMXYtN2gxNy45MzhBOC4wMDEgOC4wMDEgMCAwIDEgMjEgMTl6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFwbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBBcHBTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uQXBwQXBwU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE1LjUgMTEuOTE1IDI3IDUuMjc5IDE5LjUuOTM4YTcuMDAyIDcuMDAyIDAgMCAwLTcgMGwtOCA0LjYyQTcgNyAwIDAgMCAxIDExLjYydjkuMjM3YTcgNyAwIDAgMCAzLjUgNi4wNjFsNy41IDQuMzNWMTcuOThhNyA3IDAgMCAxIDMuNS02LjA2M1pNMTAgMjcuNzg1di05LjgwOGE5IDkgMCAwIDEgNC41LTcuNzkzbDguNTAzLTQuOTFMMTguNSAyLjY3MmE1LjAwMyA1LjAwMyAwIDAgMC01IDBsLTggNC42MTlBNSA1IDAgMCAwIDMgMTEuNjJ2OS4yMzhhNSA1IDAgMCAwIDIuNSA0LjMzbDQuNSAyLjU5OFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xOC40MDkgMTMuNTVhNy4wODkgNy4wODkgMCAwIDEgMS4wMzUgMS43MTFBNi45MyA2LjkzIDAgMCAxIDIwIDE3Ljk4djEzLjI3bDcuNS00LjMzYTcgNyAwIDAgMCAzLjUtNi4wNjF2LTkuMjM5YTYuOTkyIDYuOTkyIDAgMCAwLTEuNTg3LTQuNDIxTDE4LjQwOSAxMy41NVptMi43NzcuNzA1QTguOTMzIDguOTMzIDAgMCAxIDIyIDE3Ljk3OXY5LjgwN2w0LjUtMi41OThhNSA1IDAgMCAwIDIuNS00LjMzVjExLjYyYzAtLjU4OC0uMTA2LTEuMTYxLS4zMDMtMS43bC03LjUxMSA0LjMzNVpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQXBwU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEF1ZGl0YmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBBdWRpdGJlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNSAwaDJ2MzJoLTJ6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgMzJoMTN2LTJIMlYyaDExVjBIMHpNMTkgMHYyaDExdjI4SDE5djJoMTNWMHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEF1ZGl0YmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBDYW52YXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwQ2FudmFzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxN2gydjdIN3pNMTIgMTRoMnYxMGgtMnpNMTcgMTZoMnY4aC0yek0yMiAxNGgzdjJoLTN6TTIyIDE4aDN2MmgtM3pNMjIgMjJoM3YyaC0zelwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC43MyAyNGE2LjQ3IDYuNDcgMCAwIDEgLjQ1LTIuMTljLjMzNy0uOS41Mi0xLjg1LjU0LTIuODFhOC41NSA4LjU1IDAgMCAwLS41NC0yLjgxIDYuNDcgNi40NyAwIDAgMS0uNDUtMi4xOSA5LjIgOS4yIDAgMCAxIC42Mi0yLjQ5Yy41My0xLjU3IDEuMDgtMy4xOS4wOC00LjItMS0xLjAxLTIuNDEtLjQ0LTMuNTIuMDVhNS41OSA1LjU5IDAgMCAxLTIuMDkuNjQgNS4zIDUuMyAwIDAgMS0uNTkgMEwxNiAuMjggNi43NyA4YTUuMyA1LjMgMCAwIDEtLjU5IDAgNS41OSA1LjU5IDAgMCAxLTIuMDktLjY1QzMgNi44NyAxLjYgNi4yNS41NyA3LjMxYy0xLjAzIDEuMDYtLjQ1IDIuNjMuMDggNC4yQTkuMiA5LjIgMCAwIDEgMS4yNyAxNGE2LjQ3IDYuNDcgMCAwIDEtLjQ1IDIuMTlBOC41NSA4LjU1IDAgMCAwIC4yOCAxOWMuMDIuOTYuMjAzIDEuOTEuNTQgMi44MUE2LjQ3IDYuNDcgMCAwIDEgMS4yNyAyNGE5LjIgOS4yIDAgMCAxLS42MiAyLjQ5Yy0uNTMgMS41Ny0xLjA4IDMuMTktLjA4IDQuMi4zNTMuMzguODUyLjU5IDEuMzcuNThhNS42NyA1LjY3IDAgMCAwIDIuMTUtLjYzQTUuNTkgNS41OSAwIDAgMSA2LjE4IDMwYTcuMTMgNy4xMyAwIDAgMSAyLjI5LjQ3IDggOCAwIDAgMCAyLjYyLjUzIDcuMzcgNy4zNyAwIDAgMCAyLjQ3LS41MUE3LjE0IDcuMTQgMCAwIDEgMTYgMzBhNi4yNCA2LjI0IDAgMCAxIDIuMTQuNDUgOCA4IDAgMCAwIDIuNzcuNTUgOC4wOCA4LjA4IDAgMCAwIDIuNzctLjU1IDYuMjQgNi4yNCAwIDAgMSAyLjE0LS40NSA1LjU5IDUuNTkgMCAwIDEgMi4wOS42NWMxLjExLjQ5IDIuNDkgMS4xMSAzLjUyLjA1IDEuMDMtMS4wNi40NS0yLjYzLS4wOC00LjJhOS4yIDkuMiAwIDAgMS0uNjItMi41Wk0yMS4xNyA3aC0uMjZhOCA4IDAgMCAwLTIuNzcuNTVBNi4yNCA2LjI0IDAgMCAxIDE2IDhhNi4yNCA2LjI0IDAgMCAxLTIuMTQtLjQ1QTggOCAwIDAgMCAxMS4wOSA3aC0uMjZMMTYgMi43MiAyMS4xNyA3Wm04Ljg5IDIyLjI3YTQuNDIgNC40MiAwIDAgMS0xLjM0LS40NiA3LjA4IDcuMDggMCAwIDAtMi45LS44MiA4LjE0IDguMTQgMCAwIDAtMi43OC41NSA2LjEzIDYuMTMgMCAwIDEtMi4xMy40NSA2LjI0IDYuMjQgMCAwIDEtMi4xNC0uNDVBOCA4IDAgMCAwIDE2IDI4YTkgOSAwIDAgMC0zLjA4LjYgNS43NCA1Ljc0IDAgMCAxLTEuODMuNCA2LjM2IDYuMzYgMCAwIDEtMi0uNDNBOC43MiA4LjcyIDAgMCAwIDYuMTggMjhhNy4wOCA3LjA4IDAgMCAwLTIuOS44MiA5LjY1IDkuNjUgMCAwIDEtMS4yOC41MiA2LjA4IDYuMDggMCAwIDEgLjUyLTIuMjFjLjQwMy0xIC42NS0yLjA1NS43My0zLjEzYTguNTUgOC41NSAwIDAgMC0uNTQtMi44MUE2LjQ3IDYuNDcgMCAwIDEgMi4yNyAxOWE2LjQ3IDYuNDcgMCAwIDEgLjQ0LTIuMTljLjMzNy0uOS41Mi0xLjg1LjU0LTIuODFhMTAuNDggMTAuNDggMCAwIDAtLjcyLTMuMTMgOSA5IDAgMCAxLS41OS0yLjE2SDJjLjQ0Ny4xLjg4LjI1NSAxLjI5LjQ2YTcuMDggNy4wOCAwIDAgMCAyLjkuODJBOC4xNCA4LjE0IDAgMCAwIDkgOS40NCA2LjEzIDYuMTMgMCAwIDEgMTEuMDkgOWE2LjEzIDYuMTMgMCAwIDEgMi4xMy40NUE4LjE0IDguMTQgMCAwIDAgMTYgMTBhOC4xNCA4LjE0IDAgMCAwIDIuNzgtLjU1QTYuMTMgNi4xMyAwIDAgMSAyMC45MSA5YTYuMTMgNi4xMyAwIDAgMSAyLjA5LjQ0IDguMTQgOC4xNCAwIDAgMCAyLjc4LjU1IDcuMDggNy4wOCAwIDAgMCAyLjktLjgyQTkuNjUgOS42NSAwIDAgMSAzMCA4LjY2YTYuMDggNi4wOCAwIDAgMS0uNTIgMi4yMWMtLjQwMyAxLS42NSAyLjA1NS0uNzMgMy4xMy4wMi45Ni4yMDMgMS45MS41NCAyLjgxYTYuNDcgNi40NyAwIDAgMSAuNDQgMi4xOSA2LjQ3IDYuNDcgMCAwIDEtLjQ0IDIuMTkgOC41NSA4LjU1IDAgMCAwLS41NCAyLjgxYy4wNzggMS4wNzQuMzIgMi4xMy43MiAzLjEzYTkgOSAwIDAgMSAuNTkgMi4xNnYtLjAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQ2FudmFzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcENhc2VzID0gZnVuY3Rpb24gRXVpSWNvbkFwcENhc2VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA2aDIydjdoLTJWOEg2djE5SDRWNlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMTJIN3YtMmgzdjJabTEgMGgxMnYtMkgxMXYyWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNCAxSDB2MjZoMWwtMSAuMDAxdi4wMjZhMi4yNTYgMi4yNTYgMCAwIDAgLjAxLjE4NSA0LjMxOCA0LjMxOCAwIDAgMCAuNTYzIDEuNzkyQzEuMTk0IDMwLjA2NCAyLjM5OSAzMSA0LjUgMzFIMTd2LTJIOC40MjlhNC4zMiA0LjMyIDAgMCAwIC41Ny0xLjkyN3YtLjA2Mkw5IDI3LjAwNXYtLjAwM1M5IDI3IDggMjdoMVYxNmgyMXYzaDJ2LTVIN3YxMi45OTVsLS4wMDMuMDVhMi4zMiAyLjMyIDAgMCAxLS4yOTguOTVDNi40NDIgMjguNDM2IDUuODk4IDI5IDQuNSAyOWMtMS4zOTggMC0xLjk0Mi0uNTY0LTIuMTk5LTEuMDA0YTIuMzIgMi4zMiAwIDAgMS0uMy0xLjAwMUwyIDI2Ljk5MlYzaDIwdjNoMlYxWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMgMjF2M2gtM3YyaDN2M2gydi0zaDN2LTJoLTN2LTNoLTJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjQgMzJhNyA3IDAgMSAwIDAtMTQgNyA3IDAgMCAwIDAgMTRabTAtMmE1IDUgMCAxIDAgMC0xMCA1IDUgMCAwIDAgMCAxMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENhc2VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcENvZGUgPSBmdW5jdGlvbiBFdWlJY29uQXBwQ29kZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTExLjI3NiAyOSAuNTk0IDJIMGw3LjYyMS0xNC4yOS44MTEgMi43M0wzLjMzMyAyOWg3Ljk0M1pNMjguOTIgMzFsLTQuOTg3LTE2LjU5OEExNiAxNiAwIDAgMCA4LjY4OCAzbDEuOCA2SDguNEw2IDFoMi42MDdhMTggMTggMCAwIDEgMTcuMjQxIDEyLjgyOEwzMSAzMWgtMi4wOFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjAzNyAxNC4wMiAxNi40OTIgMjloNi44MjdsLTIuMzMzLTcuODQ5YTEwIDEwIDAgMCAwLTguOTQ5LTcuMTNaTTkuMzUgMTJoMi4wNWExMiAxMiAwIDAgMSAxMS41MDMgOC41ODFMMjYgMzFIMTVMOS4zNSAxMlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQ29kZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBDb25zb2xlID0gZnVuY3Rpb24gRXVpSWNvbkFwcENvbnNvbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSA5SDNhMyAzIDAgMCAxLTMtM1YzYTMgMyAwIDAgMSAzLTNoMjZhMyAzIDAgMCAxIDMgM3YzYTMgMyAwIDAgMS0zIDNaTTMgMmExIDEgMCAwIDAtMSAxdjNhMSAxIDAgMCAwIDEgMWgyNmExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMUgzWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgMzJIM2EzIDMgMCAwIDEtMy0zVjE0YTMgMyAwIDAgMSAzLTNoMjZhMyAzIDAgMCAxIDMgM3YxNWEzIDMgMCAwIDEtMyAzWk0zIDEzYTEgMSAwIDAgMC0xIDF2MTVhMSAxIDAgMCAwIDEgMWgyNmExIDEgMCAwIDAgMS0xVjE0YTEgMSAwIDAgMC0xLTFIM1pcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtNy4yOSAxNy43MSAzLjMgMy4yOS0zLjMgMy4yOSAxLjQyIDEuNDIgNC43LTQuNzEtNC43LTQuNzF6TTE1IDI0aDl2MmgtOXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENvbnNvbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb24gPSBmdW5jdGlvbiBFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDB2MTZoOC43bDUuMy02VjBIMHptMiAyaDEwdjdIN3Y1SDJWMnptOC40NSA5TDkgMTIuNjRWMTFoMS40NXpNMTggMTZ2MTZoOC43bDUuMy02VjE2SDE4em0yIDJoMTB2N2gtNXY1aC01VjE4em04LjQ1IDlMMjcgMjguNjRWMjdoMS40NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMThIM2MwIDYuMDc1IDQuOTI1IDExIDExIDExaDJ2LTJoLTJhOSA5IDAgMCAxLTktOXpNMTggM2gtMnYyaDJhOSA5IDAgMCAxIDkgOWgyYzAtNi4wNzUtNC45MjUtMTEtMTEtMTF6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcERhc2hib2FyZCA9IGZ1bmN0aW9uIEV1aUljb25BcHBEYXNoYm9hcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSA5SDNhMyAzIDAgMCAxLTMtM1YzYTMgMyAwIDAgMSAzLTNoMjZhMyAzIDAgMCAxIDMgM3YzYTMgMyAwIDAgMS0zIDNaTTMgMmExIDEgMCAwIDAtMSAxdjNhMSAxIDAgMCAwIDEgMWgyNmExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMUgzWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMjBIM2EzIDMgMCAwIDEtMy0zdi0zYTMgMyAwIDAgMSAzLTNoOWEzIDMgMCAwIDEgMyAzdjNhMyAzIDAgMCAxLTMgM1ptLTktN2ExIDEgMCAwIDAtMSAxdjNhMSAxIDAgMCAwIDEgMWg5YTEgMSAwIDAgMCAxLTF2LTNhMSAxIDAgMCAwLTEtMUgzWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAzMUgzYTMgMyAwIDAgMS0zLTN2LTNhMyAzIDAgMCAxIDMtM2g5YTMgMyAwIDAgMSAzIDN2M2EzIDMgMCAwIDEtMyAzWm0tOS03YTEgMSAwIDAgMC0xIDF2M2ExIDEgMCAwIDAgMSAxaDlhMSAxIDAgMCAwIDEtMXYtM2ExIDEgMCAwIDAtMS0xSDNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSAzMWgtOWEzIDMgMCAwIDEtMy0zVjE0YTMgMyAwIDAgMSAzLTNoOWEzIDMgMCAwIDEgMyAzdjE0YTMgMyAwIDAgMS0zIDNabS05LTE4YTEgMSAwIDAgMC0xIDF2MTRhMSAxIDAgMCAwIDEgMWg5YTEgMSAwIDAgMCAxLTFWMTRhMSAxIDAgMCAwLTEtMWgtOVpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRGFzaGJvYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcERldnRvb2xzID0gZnVuY3Rpb24gRXVpSWNvbkFwcERldnRvb2xzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMjhoLTJ2LTguNDlsLjYtLjI2QTkgOSAwIDAgMCAyMSAzLjUyVjExSDExVjMuNTJhOSA5IDAgMCAwIDEuNCAxNS43M2wuNi4yNlYyOGgtMnYtNy4yMUExMSAxMSAwIDAgMSAxMS42LjkyTDEzIC4zMVY5aDZWLjMxbDEuNC42MWExMSAxMSAwIDAgMSAuNiAxOS44N1YyOFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDMwaDEwdjJIMTF6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcERldnRvb2xzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcERpc2NvdmVyID0gZnVuY3Rpb24gRXVpSWNvbkFwcERpc2NvdmVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOC4zMyAyMy42NyA0Ljc5LTEwLjU1IDEwLjU1LTQuNzktNC43OSAxMC41NS0xMC41NSA0Ljc5Wm02LjMtOS0yLjI4IDUgNS0yLjI4IDIuMjgtNS01IDIuMjhaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBDNy4xNjMgMCAwIDcuMTYzIDAgMTZzNy4xNjMgMTYgMTYgMTYgMTYtNy4xNjMgMTYtMTZBMTYgMTYgMCAwIDAgMTYgMFptMSAyOS45NVYyOGgtMnYxLjk1QTE0IDE0IDAgMCAxIDIuMDUgMTdINHYtMkgyLjA1QTE0IDE0IDAgMCAxIDE1IDIuMDVWNGgyVjIuMDVBMTQgMTQgMCAwIDEgMjkuOTUgMTVIMjh2MmgxLjk1QTE0IDE0IDAgMCAxIDE3IDI5Ljk1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRGlzY292ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwRW1zID0gZnVuY3Rpb24gRXVpSWNvbkFwcEVtcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMjJoM3YySDFWMWgyM3Y1aC0yVjNIM3pcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuMjI4IDI5YzEuNDkyLTEuNjc4IDEuMzUzLTIuODU5LjAwOS01LjY1NC0uMDQ5LS4xLS4wNDktLjEtLjA5Ny0uMjAzLTEuMzY5LTIuODU1LTEuNjI2LTQuNDkxLS4zMjUtNi41ODIgMi43OTYtNC40OTggOS41MTQtMi42NDIgMTQuMTg1IDIuMzE3VjEwSDEwdjE5aDUuMjI4Wm0yLjQ3IDBIMjl2LTYuOTgzYy0zLjg4LTUuNDA2LTEwLjM3Ni03Ljc5NS0xMi40ODctNC40LS44MyAxLjMzNi0uNjY5IDIuMzcuNDMgNC42NjJsLjA5Ny4yYzEuMzUyIDIuODE0IDEuNzMxIDQuNjMuNjU5IDYuNTIxWk0zMSA4djIzSDhWOGgyM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEVtczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBGaWxlYmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBGaWxlYmVhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMThoMTZ2Mkg4ek04IDEzaDl2Mkg4ek04IDIzaDE2djJIOHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuNDEgMEg1YTMgMyAwIDAgMC0zIDN2MjZhMyAzIDAgMCAwIDMgM2gyMmEzIDMgMCAwIDAgMy0zVjguNTlMMjEuNDEgMFpNMjIgMy40MSAyNi41OSA4SDIyVjMuNDFaTTI3IDMwSDVhMSAxIDAgMCAxLTEtMVYzYTEgMSAwIDAgMSAxLTFoMTV2OGg4djE5YTEgMSAwIDAgMS0xIDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBGaWxlYmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBGbGVldCA9IGZ1bmN0aW9uIEV1aUljb25BcHBGbGVldChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDIuODIgMTYgLjAzOCAxMSAyLjgydjIuMjg5bDUtMi43ODIgNSAyLjc4MnYtMi4yOVpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgNy4yODIgMTYgNC41bC01IDIuNzgyVjkuNTdsNS0yLjc4MSA1IDIuNzgxVjcuMjgyWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDUuMDQ1IDIgNy44Mjd2MTUuNTc3bDE0IDcuNzg4IDE0LTcuNzg4VjcuODI3bC01LTIuNzgydjIuMjg5bDMgMS42Njl2MTMuMjI1bC0xMiA2LjY3Ni0xMi02LjY3NlY5LjAwM2wzLTEuNjY5VjUuMDQ1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIyIDEyLjUgMTYgOWwtNiAzLjV2N2w2IDMuNSA2LTMuNXYtN1ptLTkuOTc0IDEuMjA1TDE2IDExLjM4N2wzLjk3NCAyLjMxOHY0LjU5TDE2IDIwLjYxM2wtMy45NzQtMi4zMTh2LTQuNTlaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBGbGVldDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBHaXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwR2lzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMjkuMDE0IDIzLjg5IDIuMjk2IDEuMTQ1TDE2IDMyLjEwMS41MyAyNC45NjFsMi40OS0xLjA1NiAyLjQ1MyAxLjEzMi0uMDAzLjAwMkwxNiAyOS44OTlsMTAuNjktNC45MzQtLjAwMy0uMDAxIDIuMzI3LTEuMDc0Wm0tNC45NzItNy40ODIgNy4yNjggMy42MjdMMTYgMjcuMTAxLjUzIDE5Ljk2MWw3LjY2OC0zLjI1MmMuMzkyLjQ4Ni44MzggMS4wMiAxLjM0IDEuNjA0TDUuNDcgMjAuMDM5IDE2IDI0Ljg5OWwxMC42OS00LjkzNC0zLjk1NC0xLjk3M2MuNDkzLS41OC45MjgtMS4xMDcgMS4zMDYtMS41ODRaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDlhMiAyIDAgMSAwLTQgMCAyIDIgMCAwIDAgNCAwWm0yIDBhNCA0IDAgMSAxLTggMCA0IDQgMCAwIDEgOCAwWm0tMy4yNjggMTIuNjgxLS43MzIuNzg3LS43MzItLjc4N2MtMy41NTctMy44MjQtNS44MTctNi40NjItNi44MS03Ljk2QTguNzQ2IDguNzQ2IDAgMCAxIDcgOC44NzVDNyAzLjk3IDExLjAzMyAwIDE2IDBzOSAzLjk3IDkgOC44NzVhOC43NDYgOC43NDYgMCAwIDEtMS40NTkgNC44NDZjLS45OTIgMS40OTgtMy4yNTIgNC4xMzYtNi44MDkgNy45NlptNS4xNDItOS4wNjRBNi43NDcgNi43NDcgMCAwIDAgMjMgOC44NzVDMjMgNS4wODEgMTkuODcgMiAxNiAyUzkgNS4wODEgOSA4Ljg3NWMwIDEuMzQ5LjM5NCAyLjYzNiAxLjEyNiAzLjc0Mi44NDYgMS4yNzcgMi44MTIgMy41OTMgNS44NzQgNi45MTIgMy4wNjItMy4zMiA1LjAyOC01LjYzNSA1Ljg3NC02LjkxMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEdpczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBHcmFwaCA9IGZ1bmN0aW9uIEV1aUljb25BcHBHcmFwaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI0IDIwYTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOHptMC02YTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNHptLTguMi01LjYyQTQgNCAwIDEgMSAxOCAxLjA2YTQgNCAwIDAgMS0yLjIgNy4zMnptMC02YTIgMiAwIDEgMCAuMDEgMGgtLjAxem0uMDEgMjkuMjRhNCA0IDAgMSAxLS4wODMtOCA0IDQgMCAwIDEgLjA4MyA4em0wLTZhMiAyIDAgMSAwIC4zOSAwIDIgMiAwIDAgMC0uNCAwaC4wMXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggMTd2LTJoLTYuMTRhNCA0IDAgMCAwLS44Ni0xLjY0bDIuMzEtMy40NC0xLjY4LTEuMTItMi4zMSAzLjQ0QTQgNCAwIDAgMCA4IDEyYTQgNCAwIDEgMCAwIDggNCA0IDAgMCAwIDEuMzItLjI0bDIuMzEgMy40NCAxLjY2LTEuMTJMMTEgMTguNjRhNCA0IDAgMCAwIC44Ni0xLjY0SDE4Wk02IDE2YTIgMiAwIDEgMSA0IDAgMiAyIDAgMCAxLTQgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEdyYXBoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEdyb2sgPSBmdW5jdGlvbiBFdWlJY29uQXBwR3JvayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNzI3IDIuOTFWLjk3Yy0xLjM1NyAwLTQuMTggMC01LjgxOCAxLjk0LS45NyAxLjE4Mi0xLjMyOCAyLjkwOC0uOTcgNC45ODMuNTYzIDMuMzA3Ljk3IDYuMzMyLjMwMSA3LjE1Ny0uMy4zMS0uOTcuNDY1LTIuMjQuNDY1djEuOTRjMS4yNyAwIDEuOTQuMTU1IDIuMjUuNDk0LjY5OC44MjQuMjYyIDMuODc5LS4zIDcuMTU2LS4zNSAyLjEyNC0uMDEgMy44MDIuOTYgNC45NTZDNS41MjcgMzIgOC4zNSAzMiA5LjcyNiAzMnYtMS45NGMtMS4xNDQgMC0zLjI4NyAwLTQuMzE1LTEuMjIxYTQuMTEyIDQuMTEyIDAgMCAxLS41MzMtMy40MTRjLjg0My01LjA0Mi45Ny03LjM3LS4xMzYtOC43MjctLjA2OC0uMDc3LS4xNDUtLjEzNi0uMjEzLS4yMDMtLjA2OC0uMDY4LjE0NS0uMTI3LjIxMy0uMjA0IDEuMTQ0LTEuMzY3Ljk3LTMuNjk1LjEzNi04LjcyN2E0LjExMiA0LjExMiAwIDAgMSAuNTQzLTMuNDE0QzYuNDQgMi45MSA4LjU4MyAyLjkxIDkuNzI3IDIuOTF6TTMyLjAzIDE3LjQ1NHYtMS45NGMtMS4yNyAwLTEuOTQtLjE1NS0yLjI1LS40OTQtLjY5OC0uODI1LS4yNjEtMy44OC4zMDEtNy4xNTcuMzUtMi4xMjMgMC0zLjgwMS0uOTctNC45ODRDMjcuNDkzLjk0IDI0LjY3Mi45NCAyMy4yOTQuOTR2MS45N2MxLjE0NSAwIDMuMjg4IDAgNC4zMTUgMS4yMmE0LjExMiA0LjExMiAwIDAgMSAuNTQ0IDMuNDE0Yy0uODQ0IDUuMDQzLS45NyA3LjM3LjEzNSA4LjcyOC4wNjguMDc3LjE0Ni4xMzUuMjE0LjIwMy4wNjcuMDY4LS4xNDYuMTI2LS4yMTQuMjA0LTEuMTQ0IDEuMzY3LS45NyAzLjY5NC0uMTM1IDguNzI3LjMyOSAxLjE2Mi4xMyAyLjQxLS41NDQgMy40MTMtMS4wMTggMS4yNDItMy4xNiAxLjI0Mi00LjMwNSAxLjI0MlYzMmMxLjM1OCAwIDQuMTggMCA1LjgxOC0xLjk0Ljk3LTEuMTgyIDEuMzI5LTIuOTA4Ljk3LTQuOTg0LS41NjMtMy4zMDYtLjk3LTYuMzMyLS4zLTcuMTU2LjMtLjMxLjk2OS0uNDY1IDIuMjQtLjQ2NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI2LjIxMiAxNS41MTVoLTIuMDA3YTcuNzU4IDcuNzU4IDAgMCAwLTYuNzItNi43MlY2Ljc4OGgtMS45NHYyLjAwN2E3Ljc1OCA3Ljc1OCAwIDAgMC02LjcyIDYuNzJINi44MTh2MS45NGgyLjAwN2E3Ljc1OCA3Ljc1OCAwIDAgMCA2LjcyIDYuNzJ2Mi4wMDdoMS45NHYtMi4wMDdhNy43NTggNy43NTggMCAwIDAgNi43Mi02LjcyaDIuMDA3di0xLjk0Wm0tOC43MjcgNi43di0xLjg1MWgtMS45NHYxLjg1MmE1LjgxOCA1LjgxOCAwIDAgMS00Ljc2LTQuNzYxaDEuODUxdi0xLjk0aC0xLjg1MmE1LjgxOCA1LjgxOCAwIDAgMSA0Ljc2MS00Ljc2MXYxLjg1MmgxLjk0di0xLjg1MmE1LjgxOCA1LjgxOCAwIDAgMSA0Ljc2MSA0Ljc2MWgtMS44NTJ2MS45NGgxLjg1MmE1LjgxOCA1LjgxOCAwIDAgMS00Ljc2MSA0Ljc2WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBHcm9rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEhlYXJ0YmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBIZWFydGJlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjE0IDE1LjM5YTguMDU4IDguMDU4IDAgMCAxLTIuMi00LjA0M0E2Ljc4OCA2Ljc4OCAwIDAgMSA0LjE5OCA1LjQ3YTYuNzMgNi43MyAwIDAgMSA4LjcyNy0uMjEzbDEuMjYtMS40NjRhOC42NSA4LjY1IDAgMCAwLTExLjI3Ny4yMzJBOC43MjcgOC43MjcgMCAwIDAgLjA2OCAxMS42YTEwLjE3MiAxMC4xNzIgMCAwIDAgMi43OTMgNS4yNzVsMS4yOC0xLjQ4NFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuNTE1IDMxLjI3NCA0LjU0OCAxOC40NTQgMTUuODU1IDQuNzYzYTguNjcgOC42NyAwIDAgMSAxMi4yNjYtLjc0NiA4LjcyNyA4LjcyNyAwIDAgMSAyLjkxIDcuMjA1Yy0uMjQzIDIuNjk1LTIuMDM3IDQuNzMyLTMuNDgyIDYuMzdMMTUuNTE1IDMxLjI3NVptLTguNDI3LTEyLjgyIDguNDI3IDkuODYyIDEwLjU1LTExLjk5NWMxLjMyLTEuNTAzIDIuODIyLTMuMjEgMy4wMDctNS4yNjVhNi43ODggNi43ODggMCAwIDAtMi4yNC01LjU4NiA2LjczIDYuNzMgMCAwIDAtOS41MDQuNTYzTDcuMDg4IDE4LjQ1NVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEhlYXJ0YmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBJbmRleE1hbmFnZW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgMTh2LTJoLTJ2MkgzdjZoMnYtNGgxMHY0aDJ2LTRoMTB2NGgydi02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAzMmEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZ6bTAtNGExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJ6bTEyIDRhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2em0wLTRhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yem0xMiA0YTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNnptMC00YTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMnpNMjMgOFY2aC0yLjFhNSA1IDAgMCAwLS43My0xLjc1bDEuNDktMS40OS0xLjQyLTEuNDItMS40OSAxLjQ5QTUgNSAwIDAgMCAxNyAyLjFWMGgtMnYyLjFhNSA1IDAgMCAwLTEuNzUuNzNsLTEuNDktMS40OS0xLjQyIDEuNDIgMS40OSAxLjQ5QTUgNSAwIDAgMCAxMS4xIDZIOXYyaDIuMWE1IDUgMCAwIDAgLjczIDEuNzVsLTEuNDkgMS40OSAxLjQxIDEuNDEgMS40OS0xLjQ5YTUgNSAwIDAgMCAxLjc2Ljc0VjE0aDJ2LTIuMWE1IDUgMCAwIDAgMS43NS0uNzNsMS40OSAxLjQ5IDEuNDEtMS40MS0xLjQ4LTEuNUE1IDUgMCAwIDAgMjAuOSA4SDIzem0tNyAyYTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgOGExIDEgMCAwIDEtMS0xIDEuMzkgMS4zOSAwIDAgMSAwLS4yLjY1LjY1IDAgMCAxIC4wNi0uMTguNzQuNzQgMCAwIDEgLjA5LS4xOCAxLjYxIDEuNjEgMCAwIDEgLjEyLS4xNS45My45MyAwIDAgMSAuMzMtLjIxIDEgMSAwIDAgMSAxLjA5LjIxbC4xMi4xNWEuNzguNzggMCAwIDEgLjA5LjE4LjYyLjYyIDAgMCAxIC4xLjE4IDEuMjcgMS4yNyAwIDAgMSAwIC4yIDEgMSAwIDAgMS0xIDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBJbmRleE1hbmFnZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwSW5kZXhQYXR0ZXJuID0gZnVuY3Rpb24gRXVpSWNvbkFwcEluZGV4UGF0dGVybihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwIDE0aC04YTMgMyAwIDAgMS0zLTNWM2EzIDMgMCAwIDEgMy0zaDhhMyAzIDAgMCAxIDMgM3Y4YTMgMyAwIDAgMS0zIDNaTTEyIDJhMSAxIDAgMCAwLTEgMXY4YTEgMSAwIDAgMCAxIDFoOGExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMWgtOFpNMTcgMTh2LTJoLTJ2MkgzdjZoMnYtNGgxMHY0aDJ2LTRoMTB2NGgydi02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAzMmEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZ6bTAtNGExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJ6bTEyIDRhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2em0wLTRhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yem0xMiA0YTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNnptMC00YTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMnpNMTMgNGg2djJoLTZ6TTEzIDhoNnYyaC02elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBJbmRleFBhdHRlcm47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwSW5kZXhSb2xsdXAgPSBmdW5jdGlvbiBFdWlJY29uQXBwSW5kZXhSb2xsdXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMiAyNnYtMmgtMi4xYTUgNSAwIDAgMC0uNzMtMS43NWwxLjQ5LTEuNDktMS40MS0xLjQxLTEuNDkgMS40OUE1IDUgMCAwIDAgMjYgMjAuMVYxOGgtMnYyLjFhNSA1IDAgMCAwLTEuNzUuNzNsLTEuNDktMS40OS0xLjQxIDEuNDEgMS40OSAxLjQ5QTUgNSAwIDAgMCAyMC4xIDI0SDE4djJoMi4xYTUgNSAwIDAgMCAuNzMgMS43NWwtMS40OSAxLjQ5IDEuNDEgMS40MSAxLjQ5LTEuNDlhNSA1IDAgMCAwIDEuNzYuNzRWMzJoMnYtMi4xYTUgNSAwIDAgMCAxLjc1LS43M2wxLjQ5IDEuNDkgMS40MS0xLjQxLTEuNDktMS40OUE1IDUgMCAwIDAgMjkuOSAyNkgzMlptLTcgMmEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNS43MSAyNC4yOWExIDEgMCAwIDAtMS4wOS0uMjEgMS4xNSAxLjE1IDAgMCAwLS4zMy4yMS45My45MyAwIDAgMC0uMjEuMzMgMSAxIDAgMCAwIDEuMyAxLjMgMS4xNSAxLjE1IDAgMCAwIC4zMy0uMjEgMSAxIDAgMCAwIC4yMS0xLjA5Ljk0Ljk0IDAgMCAwLS4yMS0uMzNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDZoMTZ2Mkg1ek01IDEyaDE2djJINXpNNSAxOGgxMHYySDV6TTUgMjRoOHYySDV6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMySDNhMyAzIDAgMCAxLTMtM1YzYTMgMyAwIDAgMSAzLTNoMjBhMyAzIDAgMCAxIDMgM3YxM2gtMlYzYTEgMSAwIDAgMC0xLTFIM2ExIDEgMCAwIDAtMSAxdjI2YTEgMSAwIDAgMCAxIDFoMTN2MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEluZGV4Um9sbHVwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcExlbnMgPSBmdW5jdGlvbiBFdWlJY29uQXBwTGVucyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTIzLjc5MyAxNC4yOTMgMS40MTQgMS40MTQtNi40MDggNi40MDktMy43NS0zLjI1LTQuMzQyIDQuMzQxLTEuNDE0LTEuNDE0IDUuNjU4LTUuNjU5IDMuNzUgMy4yNSA1LjA5Mi01LjA5MVpNMTIgMTF2NWwtMiAydi03aDJabTEwLTZ2OGwtMiAyVjVoMlptLTUgM3Y3bC0yLTJWOGgyWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNyAwYzguMjg0IDAgMTUgNi43MTYgMTUgMTUgMCA4LjI4NC02LjcxNiAxNS0xNSAxNS0zLjc4MiAwLTcuMjM4LTEuNC05Ljg3Ni0zLjcxbC01LjQxNyA1LjQxNy0xLjQxNC0xLjQxNCA1LjQxNy01LjQxN0ExNC45NDMgMTQuOTQzIDAgMCAxIDIgMTVjMC0xLjA1LjEwOC0yLjA3NC4zMTMtMy4wNjJsMS45MDYuNjcyQzQuMDc1IDEzLjM4NSA0IDE0LjE4NCA0IDE1YzAgNy4xOCA1LjgyIDEzIDEzIDEzczEzLTUuODIgMTMtMTNTMjQuMTggMiAxNyAyYy0xLjAwMiAwLTEuOTc4LjExMy0yLjkxNS4zMjhsLS43NS0xLjg3N0ExNS4wMzEgMTUuMDMxIDAgMCAxIDE3IDBaTTkuNjIxIDEuOTM3bC43NSAxLjg3N2ExMy4wNjIgMTMuMDYyIDAgMCAwLTQuODIgNS4wMjRsLTEuOTA3LS42NzNhMTUuMDY4IDE1LjA2OCAwIDAgMSA1Ljk3Ny02LjIyOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcExlbnM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwTG9ncyA9IGZ1bmN0aW9uIEV1aUljb25BcHBMb2dzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSA4YzMuOTgzIDAgNy43MzIgMS4wMTMgMTEuMDAxIDIuNzk3djIuMzEyQTIwLjg4NyAyMC44ODcgMCAwIDAgMiAxMC4wMjN2MTEuMDI1YzQuODUuNDYyIDkuMjcgNC4xODMgOS45NTUgOC42OTFsLjAzNS4yNjFIMTJ2MmgtMS45MzhsLS4wMTgtMS4yMzZjLS4xMTYtNC4wMTUtNC4zMzYtNy42MzEtOC43OTMtNy43NkwwIDIyLjk4NlY4aDF6bTEzLThoMWM5LjI4IDAgMTYuODI1IDcuNDM3IDE2Ljk5NyAxNi42NzdMMzIgMTd2MTVoLTJWMTdjMC03Ljg0LTYuMDE0LTE0LjI3NC0xMy42OC0xNC45NDNMMTYgMi4wMzN2Ny42ODFsLTItMS4xNDNWMGgxLTF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNi45OTcgMzAuNjM2IDI3LjAwOSAzMkgxNFYxMS4zMDVsMS40ODMuODJjNi45OTQgMy44NjEgMTEuMzgyIDEwLjczNSAxMS41MTQgMTguNTF6bS0yLjA0OC0xLjA0QzI0LjUwNSAyMy41NTYgMjEuMjA1IDE4LjIgMTYgMTQuNzcxVjMwaDguOTc0bC0uMDI1LS40MDR6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcExvZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwTWFuYWdlbWVudCA9IGZ1bmN0aW9uIEV1aUljb25BcHBNYW5hZ2VtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjFhNSA1IDAgMSAxIDAtMTAgNSA1IDAgMCAxIDAgMTBabTAtOGEzIDMgMCAxIDAgMCA2IDMgMyAwIDAgMCAwLTZaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwIDMyaC04di00LjA2YTEgMSAwIDAgMC0xLjYxLS42N2wtMi44OCAyLjg3LTUuNjUtNS42NSAyLjg3LTIuODdhLjkyLjkyIDAgMCAwIC4yLTEgLjkzLjkzIDAgMCAwLS44Ni0uNkgwVjEyaDQuMDZhLjkyLjkyIDAgMCAwIC44NS0uNTguOTQuOTQgMCAwIDAtLjE5LTFMMS44NiA3LjUxbDUuNjUtNS42NSAyLjg3IDIuODdBMSAxIDAgMCAwIDEyIDQuMDZWMGg4djQuMDZhMSAxIDAgMCAwIDEuNjEuNjdsMi44Ny0yLjg3IDUuNjYgNS42Ni0yLjg3IDIuODdhLjkyLjkyIDAgMCAwLS4yIDEgLjkzLjkzIDAgMCAwIC44Ni42SDMydjhoLTQuMDZhLjkyLjkyIDAgMCAwLS44NS41OC45NC45NCAwIDAgMCAuMTkgMWwyLjg3IDIuODctNS42NiA1LjY2LTIuODctMi44N2ExIDEgMCAwIDAtMS42MS42N0wyMCAzMlptLTYtMmg0di0yLjA2YTMgMyAwIDAgMSA1LTIuMDhsMS40NiAxLjQ2IDIuODMtMi44M0wyNS44NiAyM2EzIDMgMCAwIDEgMi4wOC01SDMwdi00aC0yLjA2YTMgMyAwIDAgMS0yLjA4LTVsMS40Ni0xLjQ2LTIuODMtMi44NUwyMyA2LjE0YTMgMyAwIDAgMS01LTIuMDhWMmgtNHYyLjA2YTMgMyAwIDAgMS01IDIuMDhMNy41MSA0LjY5IDQuNjkgNy41MSA2LjE0IDlhMyAzIDAgMCAxLTIuMDggNUgydjRoMi4wNmEzIDMgMCAwIDEgMi4wOCA1bC0xLjQ1IDEuNDkgMi44MyAyLjgzTDkgMjUuODZhMyAzIDAgMCAxIDUgMi4wOFYzMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1hbmFnZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwTWV0cmljYmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBNZXRyaWNiZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMzJDNy4xNjMgMzIgMCAyNC44MzcgMCAxNlM3LjE2MyAwIDE2IDBzMTYgNy4xNjMgMTYgMTZhMTYgMTYgMCAwIDEtMTYgMTZabTAtMzBDOC4yNjggMiAyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTQgMTQtNi4yNjggMTQtMTRBMTQgMTQgMCAwIDAgMTYgMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4IDE2aC0yYzAtNS41MjMtNC40NzctMTAtMTAtMTBTNiAxMC40NzcgNiAxNkg0QzQgOS4zNzMgOS4zNzMgNCAxNiA0czEyIDUuMzczIDEyIDEyWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS43MSAxMS43MSAyMC4zIDEwLjMgMTggMTIuNTdhNCA0IDAgMCAwLTItLjU3IDQgNCAwIDEgMCA0IDQgNCA0IDAgMCAwLS41Ny0ybDIuMjgtMi4yOVpNMTYgMThhMiAyIDAgMSAxIDAtNCAyIDIgMCAwIDEgMCA0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTWV0cmljYmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBNZXRyaWNzID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1ldHJpY3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMCAxOS4wOTJ2MTIuODhIMnYtNS4zODZsNi43NDctNi43NDcuNzA4LjcwOGMuMjM2LjIzNi40OC40NjMuNzMzLjY4TDQgMjcuNDE0djIuNTU4aDI0di04LjkxYy4xODYtLjE2Ni4zNjktLjMzOS41NDYtLjUxNkwzMCAxOS4wOTJ6bS0yMC44NS0zLjE5QTEwLjk1NSAxMC45NTUgMCAwIDEgOCAxMUM4IDQuOTI1IDEyLjkyNSAwIDE5IDBzMTEgNC45MjUgMTEgMTFjMCAxLjc2LS40MTQgMy40MjUtMS4xNSA0LjlsLTEuNTEtMS41MUE4Ljk3MyA4Ljk3MyAwIDAgMCAyOCAxMWE5IDkgMCAxIDAtMTcuMzQgMy4zOTFsLTEuNTEgMS41MXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5IDIwYTguOTYgOC45NiAwIDAgMCA1LjYxOC0xLjk2OGwtNC4yMDItNC4yMDRhMiAyIDAgMCAwLTIuODI4IDBsLTQuMjA1IDQuMjA1QTguOTYgOC45NiAwIDAgMCAxOSAyMHptLTIuODI2LTcuNTg2YTQgNCAwIDAgMSA1LjY1NiAwbDUuNjU2IDUuNjU3LS43MDcuNzA3QTEwLjk2NyAxMC45NjcgMCAwIDEgMTkgMjJhMTAuOTY3IDEwLjk2NyAwIDAgMS03Ljc3OC0zLjIyMWwtLjcwNy0uNzA3IDUuNjU5LTUuNjU4elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNZXRyaWNzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcE1sID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1sKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMTh2LjU2YTEgMSAwIDAgMS0uNjguOTVMMyAyMS42MVYxMGExIDEgMCAwIDEgLjQtLjhsMy4yLTIuNC0xLjItMS42LTMuMiAyLjRBMyAzIDAgMCAwIDEgMTB2MTJhMyAzIDAgMCAwIDEuMiAyLjRsMy4yIDIuNCAxLjItMS42LTIuNDctMS44NSA1LjgyLTEuOTVBMyAzIDAgMCAwIDEyIDE4LjU2VjE4aC0yek0yOS44IDcuNmwtMy4yLTIuNC0xLjIgMS42IDMuMiAyLjRhMSAxIDAgMCAxIC40Ljh2MTEuNjFsLTYuMzItMi4xMWExIDEgMCAwIDEtLjY4LS45NVYxOGgtMnYuNTZhMyAzIDAgMCAwIDIuMDUgMi44NWw1LjgyIDEuOTQtMi40NyAxLjg1IDEuMiAxLjYgMy4yLTIuNEEzIDMgMCAwIDAgMzEgMjJWMTBhMyAzIDAgMCAwLTEuMi0yLjR6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDZBMyAzIDAgMCAxIDguODguODhhMy4wNyAzLjA3IDAgMCAxIDQuMjQgMEEzIDMgMCAwIDEgMTEgNnptMC00YTEgMSAwIDEgMC0uMDEyIDJBMSAxIDAgMCAwIDExIDJ6bTAgMzBhMyAzIDAgMCAxLTIuMTItNS4xMiAzLjA3IDMuMDcgMCAwIDEgNC4yNCAwQTMgMyAwIDAgMSAxMSAzMnptMC00YTEgMSAwIDEgMC0uMDEyIDJBMSAxIDAgMCAwIDExIDI4em0wLTEyYTMgMyAwIDAgMS0yLjEyLTUuMTIgMy4wNyAzLjA3IDAgMCAxIDQuMjQgMEEzIDMgMCAwIDEgMTEgMTZ6bTAtNGExIDEgMCAxIDAtLjAxMiAyQTEgMSAwIDAgMCAxMSAxMnptMTAtNkEzIDMgMCAwIDEgMTguODguODhhMy4wNyAzLjA3IDAgMCAxIDQuMjQgMEEzIDMgMCAwIDEgMjEgNnptMC00YTEgMSAwIDEgMC0uMDEyIDJBMSAxIDAgMCAwIDIxIDJ6bTAgMzBhMyAzIDAgMCAxLTIuMTItNS4xMiAzLjA3IDMuMDcgMCAwIDEgNC4yNCAwQTMgMyAwIDAgMSAyMSAzMnptMC00YTEgMSAwIDEgMC0uMDEyIDJBMSAxIDAgMCAwIDIxIDI4em0wLTEyYTMgMyAwIDAgMS0yLjEyLTUuMTIgMy4wNyAzLjA3IDAgMCAxIDQuMjQgMEEzIDMgMCAwIDEgMjEgMTZ6bTAtNGExIDEgMCAxIDAtLjAxMiAyQTEgMSAwIDAgMCAyMSAxMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1sOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcE1vbml0b3JpbmcgPSBmdW5jdGlvbiBFdWlJY29uQXBwTW9uaXRvcmluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuODEgMTUuMTlBOC45NCA4Ljk0IDAgMCAxIDE1LjYyIDMuODZsLjM4LjQyLjM4LS40MmE4Ljk0IDguOTQgMCAwIDEgMTQuMjYgMTAuNjhsLTEuNy0xLjA3YTYuOTQgNi45NCAwIDAgMC0xMS4wNy04LjI4TDE2IDcuMjlsLTEuODctMi4xQTYuOTQgNi45NCAwIDAgMCAzLjQxIDE0bC0xLjYgMS4xOVpNMTYgMzEuMThsLTcuNzQtOC41MSAxLjQ4LTEuMzRMMTYgMjguMjFsNi4yNi02Ljg4IDEuNDggMS4zNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTE2LjE2IDIzLjI5LTQuMS03LjE3TDEwLjYyIDE5SDB2LTJoOS4zOGwyLjU2LTUuMTIgMy45IDYuODMgNC4xMy0xMC4zMkwyMy42NiAxN0gzMnYyaC05LjY2bC0yLjMxLTUuMzl6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1vbml0b3Jpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwTm90ZWJvb2sgPSBmdW5jdGlvbiBFdWlJY29uQXBwTm90ZWJvb2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNSAyaC01VjBoLTJ2MmgtM1YwaC0ydjJoLTNWMEg4djJIM3YyNmgyMlYyWm0tMiAyNEg1VjRoM3YyaDJWNGgzdjJoMlY0aDN2MmgyVjRoM3YyMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI3IDd2MjNIOHYyaDIxVjd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDEyaDEydjJIOHpNOCAxN2gxMnYySDh6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE5vdGVib29rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFBhY2tldGJlYXQgPSBmdW5jdGlvbiBFdWlJY29uQXBwUGFja2V0YmVhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDIwYTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOFptMC02YTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0YTQgNCAwIDEgMC00IDQgNCA0IDAgMCAwIDItLjU3bDUuMjcgNS4yNyAxLjQxLTEuNDFMNy40MyA2QTQgNCAwIDAgMCA4IDR6TTQgNmEyIDIgMCAxIDEgMC00IDIgMiAwIDAgMSAwIDR6bTE2LjcxIDYuNzFMMjYgNy40M0E0IDQgMCAwIDAgMjggOGE0IDQgMCAxIDAtNC00IDQgNCAwIDAgMCAuNTcgMmwtNS4yNyA1LjI3IDEuNDEgMS40NHpNMjggMmEyIDIgMCAxIDEgMCA0IDIgMiAwIDAgMSAwLTR6TTExLjI5IDE5LjI5IDYgMjQuNTdBNCA0IDAgMCAwIDQgMjRhNCA0IDAgMSAwIDQgNCA0IDQgMCAwIDAtLjU3LTJsNS4yNy01LjI3LTEuNDEtMS40NHpNNCAzMGEyIDIgMCAxIDEgMC00IDIgMiAwIDAgMSAwIDR6bTI0LTZhNCA0IDAgMCAwLTIgLjU3bC01LjI3LTUuMjctMS40MSAxLjQxTDI0LjU3IDI2YTQgNCAwIDAgMC0uNTcgMiA0IDQgMCAxIDAgNC00em0wIDZhMiAyIDAgMSAxIDAtNCAyIDIgMCAwIDEgMCA0elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUGFja2V0YmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBQaXBlbGluZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBQaXBlbGluZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5IDEyYTMgMyAwIDAgMC0zIDNoLTRhMyAzIDAgMCAwLTMtM2gtNmEzIDMgMCAwIDAtMyAzSDZhMyAzIDAgMCAwLTMtM0gwdjE0aDNhMyAzIDAgMCAwIDMtM2g0YTMgMyAwIDAgMCAzIDNoNmEzIDMgMCAwIDAgMy0zaDRhMyAzIDAgMCAwIDMgM2gzVjEyaC0zWk0zIDI0SDJWMTRoMWExIDEgMCAwIDEgMSAxdjhhMSAxIDAgMCAxLTEgMVptMTctM3YyYTEgMSAwIDAgMS0xIDFoLTZhMSAxIDAgMCAxLTEtMXYtMkg2di00aDZ2LTJhMSAxIDAgMCAxIDEtMWg2YTEgMSAwIDAgMSAxIDF2Mmg2djRoLTZabTEwIDNoLTFhMSAxIDAgMCAxLTEtMXYtOGExIDEgMCAwIDEgMS0xaDF2MTBaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiA2SDEwdjJoNXYyaDJWOGg1elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBQaXBlbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBSZWNlbnRseVZpZXdlZCA9IGZ1bmN0aW9uIEV1aUljb25BcHBSZWNlbnRseVZpZXdlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMyQzcuMTYzIDMyIDAgMjQuODM3IDAgMTZTNy4xNjMgMCAxNiAwczE2IDcuMTYzIDE2IDE2YTE2IDE2IDAgMCAxLTE2IDE2Wm0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMCAwIDE2IDJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNSA0aDJ2OS4xN0EzLjAwOSAzLjAwOSAwIDAgMSAxOC44MyAxNUgyNnYyaC03LjE3QTMuMDAxIDMuMDAxIDAgMSAxIDE1IDEzLjE3VjRabTEgMTNhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBSZWNlbnRseVZpZXdlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBSZXBvcnRpbmcgPSBmdW5jdGlvbiBFdWlJY29uQXBwUmVwb3J0aW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjUgNWgtLjE3djJIMjVhMSAxIDAgMCAxIDEgMXYyMGExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMVY4YTEgMSAwIDAgMSAxLTFoLjE3VjVIN2EzIDMgMCAwIDAtMyAzdjIwYTMgMyAwIDAgMCAzIDNoMThhMyAzIDAgMCAwIDMtM1Y4YTMgMyAwIDAgMC0zLTNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMyAzaC0zVjBoLTh2M0g5djZoMTRWM1ptLTIgNEgxMVY1aDNWMmg0djNoM3YyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMTNoMTJ2MkgxMHpNMTAgMThoMTJ2MkgxMHpNMTAgMjNoMTJ2MkgxMHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUmVwb3J0aW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFNhdmVkT2JqZWN0cyA9IGZ1bmN0aW9uIEV1aUljb25BcHBTYXZlZE9iamVjdHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC4zOCA3LjAwMSAxNyA5LjYxOVYwaC0ydjkuNjE5bC0zLjM3LTIuNjE4LTEuMjUgMS41MTNMMTYgMTIuODc4bDUuNjMtNC4zNjR6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTIxLjA2LjE2NS0xLjExIDEuNjEgOS4yNSA1Ljk4M0wxNiAxNi4yOSAyLjggNy43NThsOS4yNS01Ljk4My0xLjEtMS42MUwwIDcuMjM0djEzLjY1M2wxNiAxMC4zMzcgMTYtMTAuMzM3VjcuMjM0TDIxLjA2LjE2NFpNMiA5LjU3bDEzIDguNDA3djEwLjI3OUwyIDE5Ljg0VjkuNTdabTE1IDE4LjY3NlYxNy45NzhsMTMtOC40MDdWMTkuODVsLTEzIDguMzk3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU2F2ZWRPYmplY3RzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuNjMgOGg3LjM4djJoLTcuMzh6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgOGgzLjE5djJIN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTZoNy4zOHYySDd6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjgxIDE2SDE5djJoLTMuMTl6TTcgMTJoOXYySDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAwQzUuODIgMCAwIDUuODIgMCAxM3M1LjgyIDEzIDEzIDEzIDEzLTUuODIgMTMtMTNBMTMgMTMgMCAwIDAgMTMgMFptMCAyNEM2LjkyNSAyNCAyIDE5LjA3NSAyIDEzUzYuOTI1IDIgMTMgMnMxMSA0LjkyNSAxMSAxMS00LjkyNSAxMS0xMSAxMVpNMjIuNTgxIDIzLjk5M2wxLjQxNC0xLjQxNCA3LjcwOCA3LjcwOC0xLjQxNCAxLjQxNHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFNlY3VyaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNlY3VyaXR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTQgMzItLjM2LS4xNEEyMS4wNyAyMS4wNyAwIDAgMSAwIDEyLjA3VjUuNDRMMTQgLjA2bDE0IDUuMzh2Ni42M2EyMS4wNyAyMS4wNyAwIDAgMS0xMy42NCAxOS43OEwxNCAzMlpNMiA2LjgydjUuMjVhMTkuMDggMTkuMDggMCAwIDAgMTIgMTcuNzcgMTkuMDggMTkuMDggMCAwIDAgMTItMTcuNzdWNi44MkwxNCAyLjIgMiA2LjgyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxNy44M2gyVjIzSDl6TTExIDEwLjE4VjdIOXYzLjE4YTMgMyAwIDEgMCAyIDBaTTEwIDE0YTEgMSAwIDEgMSAwLTIgMSAxIDAgMCAxIDAgMlpNMTcgN2gydjUuMTdoLTJ6TTIxIDE3YTMgMyAwIDEgMC00IDIuODJWMjNoMnYtMy4xOEEzIDMgMCAwIDAgMjEgMTdabS0zIDFhMSAxIDAgMSAxIDAtMiAxIDEgMCAwIDEgMCAyWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBTZWN1cml0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTBoNHYySDV2Ny45MjhjMCAxLjI5OS44MDggMi43OTUgMi44OCA0LjQ4IDEuODMgMS40ODkgNC41MjQgMy4wMiA4LjEyIDQuNTg0VjI2aDJ2NS45OTJsLTEuMzgtLjU2N2MtNC4zNzItMS43OTctNy43MjQtMy42MTMtMTAtNS40NjVDNC4zNTggMjQuMTIyIDMgMjIuMTE0IDMgMTkuOTI4VjEwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMGg5djE0bC0xLjI3Mi0uNDU4Yy0xLjM2Ny0uNDk0LTMuMjMtMS4zMTQtNC43NjgtMi4zOUMxMC40ODQgMjAuMTE4IDkgMTguNjM2IDkgMTYuNzYxVjEwem0xLjg5NSAxLjg3NnY0Ljg4N2MwIC44NzcuNzQ0IDEuODY3IDIuMTU4IDIuODU2LjkzNy42NTYgMi4wMzggMS4yMTkgMy4wNTIgMS42NTd2LTkuNGgtNS4yMXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgMUg5djdoMlYyLjk2NmgxNlYxNi43M2MwIC41NTgtLjI0NSAxLjEyOC0uNzU2IDEuNzItLjUxNS41OTYtMS4yNTYgMS4xNTgtMi4xMiAxLjY2OC0xLjM4MS44MTgtMi45NjEgMS40MzQtNC4xMjQgMS44MTdWMjRjMS4yNi0uMzc4IDMuMzM0LTEuMTIgNS4xNTUtMi4xOTcuOTY1LS41NyAxLjkwNS0xLjI2MSAyLjYxMi0yLjA4LjcxMi0uODIyIDEuMjMzLTEuODI3IDEuMjMzLTIuOTkyVjF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBTcGFjZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwU3BhY2VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA0aDZ2Mkg0ek0yMiA0aDZ2MmgtNnpNNCAyMmg2djJINHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAxNGgxNFYwSDB2MTR6TTIgMmgxMHYxMEgyVjJ6bTE2LTJ2MTRoMTRWMEgxOHptMTIgMTJIMjBWMmgxMHYxMHpNMCAzMmgxNFYxOEgwdjE0em0yLTEyaDEwdjEwSDJWMjB6bTE2IDEyaDE0VjE4SDE4djE0em0yLTEyaDEwdjEwSDIwVjIwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgMjJoNnYyaC02elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBTcGFjZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwU3FsID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNxbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDZoOXYyaC05ek01IDZoOXYySDV6TTUgMTJoOXYySDV6TTE4IDEyaDl2MmgtOXpNNSAxOGg5djJINXpNMTggMThoOXYyaC05ek0xOCAyNGg5djJoLTl6TTUgMjRoOXYySDV6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5IDMySDNhMyAzIDAgMCAxLTMtM1YzYTMgMyAwIDAgMSAzLTNoMjZhMyAzIDAgMCAxIDMgM3YyNmEzIDMgMCAwIDEtMyAzWk0zIDJhMSAxIDAgMCAwLTEgMXYyNmExIDEgMCAwIDAgMSAxaDI2YTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xSDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBTcWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwVGltZWxpb24gPSBmdW5jdGlvbiBFdWlJY29uQXBwVGltZWxpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDR2MjAuMzRMMTYgMzJsMTItNy42NFY0SDRabTIyIDJ2NGgtNGEzIDMgMCAwIDAtMyAzdjVoLTZ2LTVhMyAzIDAgMCAwLTMtM0g2VjZoMjBabS03Ljg3IDE0TDE2IDIyLjUyIDEzLjg3IDIwaDQuMjZaTTYgMTJoNGExIDEgMCAwIDEgMSAxdjYuN2wzLjY5IDQuMzctMi41OCAzLjA2TDYgMjMuMjRWMTJabTcuODEgMTYuMjIgMi4xOS0yLjYgMi4xOSAyLjZMMTYgMjkuNjFsLTIuMTktMS4zOVptNi4wOC0xLjA5LTIuNTgtMy4wNkwyMSAxOS43VjEzYTEgMSAwIDAgMSAxLTFoNHYxMS4yNGwtNi4xMSAzLjg5WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAwaDI0djJINHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVGltZWxpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwVXBncmFkZUFzc2lzdGFudCA9IGZ1bmN0aW9uIEV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjFhNSA1IDAgMSAxIDAtMTAgNSA1IDAgMCAxIDAgMTBabTAtOGEzIDMgMCAxIDAgMCA2IDMgMyAwIDAgMCAwLTZaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI3LjQyIDE5LjY5YTEyIDEyIDAgMCAxLTIzLjExLTFsMi4yNy0uNDUtNC4zMi00LjQ3TDAgMTkuNTVsMi4zOS0uNDdhMTQgMTQgMCAwIDAgMjcgMS4yM2wtMS45Ny0uNjJ6bTIuMjMtNi43N2ExNCAxNCAwIDAgMC0yNy0xLjIzbDEuOS42MmExMiAxMiAwIDAgMSAyMy4xMSAxbC0yLjI3LjQ1IDQuMzIgNC40NkwzMiAxMi40NWwtMi4zNS40N3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFVwZ3JhZGVBc3Npc3RhbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwVXB0aW1lID0gZnVuY3Rpb24gRXVpSWNvbkFwcFVwdGltZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuMjE2IDEyLjM3N0ExMC45NDggMTAuOTQ4IDAgMCAwIDIuMTgxIDE3SC4xNTNhMTIuOTQxIDEyLjk0MSAwIDAgMSAyLjY5My02LjExOGwxLjM3IDEuNDk1Wm0yLjk0OC0yLjcwMy0xLjM3LTEuNDk1QTEyLjk0IDEyLjk0IDAgMCAxIDEzIDZ2MmMtMi4xNDQgMC00LjE0NC42MTMtNS44MzYgMS42NzRaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI2IDQuNDE0VjE5YzAgNy4xOC01LjgyIDEzLTEzIDEzQzYuNSAzMiAxLjExNSAyNy4yMy4xNTMgMjFIMi4xOGMuOTQgNS4xMiA1LjQyNyA5IDEwLjgxOSA5IDYuMDc1IDAgMTEtNC45MjUgMTEtMTFWNC40MTRsLTQuMjkzIDQuMjkzLTEuNDE0LTEuNDE0TDI1IC41ODZsNi43MDcgNi43MDctMS40MTQgMS40MTRMMjYgNC40MTRabS03LjgzNiA5LjkwOSAxLjQ3MiAxLjM1NC03LjU3NyA4LjIzNS00LjgzNS00LjQ0MiAxLjM1My0xLjQ3MyAzLjM2NCAzLjA5IDYuMjIzLTYuNzY0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVXB0aW1lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFVzZXJzUm9sZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXNlcnNSb2xlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5LjMwNyAzLjIxYTIuOTEgMi45MSAwIDEgMC0uMjIzIDEuOTQgMTEuNjM2IDExLjYzNiAwIDAgMSA4LjIzMiA3LjA0OWwxLjc3NS0uNjk4YTEzLjU3NiAxMy41NzYgMCAwIDAtOS43ODQtOC4yOTF6bS0yLjgyMiAxLjYzOGEuOTcuOTcgMCAxIDEgMC0xLjkzOS45Ny45NyAwIDAgMSAwIDEuOTR6bS00LjI2Ny44MDUtLjcxNy0xLjc3NGExMy41NzYgMTMuNTc2IDAgMCAwLTguMjkxIDkuNzg0IDIuOTEgMi45MSAwIDEgMCAxLjk0LjIyMyAxMS42MzYgMTEuNjM2IDAgMCAxIDcuMDY4LTguMjMzem0tOC4zNCAxMS44MDJhLjk3Ljk3IDAgMSAxIDAtMS45NC45Ny45NyAwIDAgMSAwIDEuOTR6bTEyLjYwNyA4LjcyN2EyLjkxIDIuOTEgMCAwIDAtMi41OTkgMS42MiAxMS42MzYgMTEuNjM2IDAgMCAxLTguMjMzLTcuMDVsLTEuNzc0LjcxN2ExMy41NzYgMTMuNTc2IDAgMCAwIDkuODEzIDguMjkxIDIuOTEgMi45MSAwIDEgMCAyLjc5My0zLjU3OHptMCAzLjg3OWEuOTcuOTcgMCAxIDEgMC0xLjk0Ljk3Ljk3IDAgMCAxIDAgMS45NHpNMzIgMTYuNDg1YTIuOTEgMi45MSAwIDEgMC00LjE5OSAyLjU5OSAxMS42MzYgMTEuNjM2IDAgMCAxLTcuMDUgOC4yMzJsLjcxOCAxLjc3NWExMy41NzYgMTMuNTc2IDAgMCAwIDguMjkxLTkuODEzQTIuOTEgMi45MSAwIDAgMCAzMiAxNi40ODV6bS0yLjkxLjk3YS45Ny45NyAwIDEgMSAwLTEuOTQuOTcuOTcgMCAwIDEgMCAxLjk0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTkuMTkgMTYuMzVhMy44NzkgMy44NzkgMCAxIDAtNS40MiAwIDQuODQ4IDQuODQ4IDAgMCAwLTIuMTM0IDQuMDE0djEuOTM5aDkuNjk3di0xLjk0YTQuODQ4IDQuODQ4IDAgMCAwLTIuMTQzLTQuMDE0Wm0tNC42NDUtMi43NzRhMS45NCAxLjk0IDAgMSAxIDMuODggMCAxLjk0IDEuOTQgMCAwIDEtMy44OCAwWm0tLjk3IDYuNzg4YTIuOTEgMi45MSAwIDEgMSA1LjgxOSAwaC01LjgxOFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVXNlcnNSb2xlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBWaXN1YWxpemUgPSBmdW5jdGlvbiBFdWlJY29uQXBwVmlzdWFsaXplKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzIgMzJINGE0IDQgMCAwIDEtNC00VjBoMnYyOGEyIDIgMCAwIDAgMiAyaDI4djJaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgMjBoMnY3SDZ6TTE2IDEyaDJ2MTVoLTJ6TTI2IDE3aDJ2MTBoLTJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNyA2YTMgMyAwIDAgMC0yLjA4Ljg0TDIwIDQuMzZBMi4yIDIuMiAwIDAgMCAyMCA0YTMgMyAwIDAgMC02IDBjLjAwMS4zNDEuMDYyLjY4LjE4IDFsLTUuNiA0LjQ2QTMgMyAwIDAgMCA3IDlhMyAzIDAgMSAwIDMgMyAyLjkzIDIuOTMgMCAwIDAtLjE4LTFsNS42LTQuNDhBMyAzIDAgMCAwIDE3IDdhMyAzIDAgMCAwIDIuMDgtLjg0bDUgMi40OEEyLjIgMi4yIDAgMCAwIDI0IDlhMyAzIDAgMSAwIDMtM1pNNyAxM2ExIDEgMCAxIDEgMC0yIDEgMSAwIDAgMSAwIDJabTEwLThhMSAxIDAgMSAxIDAtMiAxIDEgMCAwIDEgMCAyWm0xMCA1YTEgMSAwIDEgMSAwLTIgMSAxIDAgMCAxIDAgMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFZpc3VhbGl6ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBWdWxuZXJhYmlsaXR5TWFuYWdlbWVudCA9IGZ1bmN0aW9uIEV1aUljb25BcHBWdWxuZXJhYmlsaXR5TWFuYWdlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMzk0IDYuMTkyIDExLjA1LjUzNiAxNiA1LjQ4Nmw0Ljk1LTQuOTUgNS42NTcgNS42NTZMMTYgMTYuOCA1LjM5NCA2LjE5MlptMi44MjggMEwxNiAxMy45NzFsNy43NzgtNy43NzktMi44MjgtMi44MjhMMTYgOC4zMTRsLTQuOTUtNC45NS0yLjgyOCAyLjgyOFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMzAuOTQxIDQuNjg2IDE5LjYyN0E4LjAwNCA4LjAwNCAwIDAgMSAzLjQ1IDkuOTA1YTguMDExIDguMDExIDAgMCAxIDEuMjM2LTEuNTkxTDE2IDE5LjUzOSAyNy4zMTMgOC4zMTRsLjA0NS4wNDVhOC4wMDMgOC4wMDMgMCAwIDEtLjA0NSAxMS4yNjhMMTYgMzAuOTQyWm0wLTIuODI4IDkuODk5LTkuOWE2LjAwMiA2LjAwMiAwIDAgMCAxLjE2OS02LjgzOEwxNiAyMi4zNTcgNC45MzIgMTEuMzc1QTYuMDAzIDYuMDAzIDAgMCAwIDYuMSAxOC4yMTNsOS45IDkuOVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFdhdGNoZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwV2F0Y2hlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTkuNzQgNy43My0xLjUtMS4zMmExMyAxMyAwIDAgMCAwIDE3LjE5bDEuNS0xLjMyYTExIDExIDAgMCAxIDAtMTQuNTR2LS4wMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNTEgMy42NiA1IDIuMzRjLTYuMzc3IDcuMjQtNi4zNzcgMTguMDkgMCAyNS4zM2wxLjUtMS4zMkMuNzkyIDE5Ljg2Ny43OTIgMTAuMTUzIDYuNSAzLjY3bC4wMS0uMDF6bTE3LjI1IDIuNzUtMS41IDEuMzJhMTEgMTEgMCAwIDEgMCAxNC41NGwxLjUgMS4zMmExMyAxMyAwIDAgMCAwLTE3LjE5di4wMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTI3IDIuMzQtMS41IDEuMzJjNS43MDggNi40ODMgNS43MDggMTYuMTk3IDAgMjIuNjhsMS41IDEuMzNjNi4zNzctNy4yNCA2LjM3Ny0xOC4wOSAwLTI1LjMzWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTVhNSA1IDAgMSAwLTYgNC45VjMxaDJWMTkuOWE1IDUgMCAwIDAgNC00LjlabS01IDNhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBXYXRjaGVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25BcHBXb3JrcGxhY2VTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy44MSAxSDJ2MzBoNS44MTVjMS43MDUgMCAzLjM0My0uNzgzIDQuMzgtMi4wOTRsMy4xODItNC4wMjMuMDA2LjAwNiAyLjYwNy0zLjEzNy4wMS0uMDE0YTkuNDIgOS40MiAwIDAgMCAxLjk1My00LjgyNiA5LjExMiA5LjExMiAwIDAgMC0xLjg5MS02LjUyMmwtLjAxLS4wMTItMi42MDMtMy4xNTZMMTIuMTk3IDMuMUMxMS4xNiAxLjc4NiA5LjUyIDEgNy44MSAxWm02LjExOCA3LjUyMy0zLjMxLTQuMTk1QzkuOTY4IDMuNTEyIDguOTE3IDMgNy44MSAzSDR2MjZoMy44MTVjMS4xIDAgMi4xNS0uNTA4IDIuOC0xLjMybDMuMzMtNC4yMS0xLjc5Ni0xLjc3LS4wMjctLjAzM2MtMi44NC0zLjMxNy0yLjgzLTguMTk1LjAyOC0xMS4yODdsLjAwNC0uMDA0YTk4Ljg5MyA5OC44OTMgMCAwIDEgMS43NzQtMS44NTNabTQuMDQzIDguMDk5Yy0uMTIgMS4yNzktLjYxNiAyLjUzNy0xLjQ5IDMuNjRsLTEuMjg4IDEuNjMtMS41NzgtMS41NTZjLTIuMTktMi41OS0yLjExOC02LjMuMDAxLTguNTk2LjYtLjY0IDEuMTE5LTEuMTgzIDEuNTYxLTEuNjM1bDEuMjkzIDEuNjM4di4wMDJsLjAxNC4wMTZjLjk0MiAxLjE5MiAxLjQ0NiAyLjU2NCAxLjUxIDMuOTQ5YTcuMDkgNy4wOSAwIDAgMS0uMDIzLjkxMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yMy44MDEgM2MtLjM4MiAwLTEuMDUyLjIzMS0xLjkyNS44MTItLjYzNi40MjItMS4yMjguOTI4LTEuNjc3IDEuMzU3bDEuNzcxIDIuMjQ1LjAwNS4wMDcuMDI0LjAzLjAwOC4wMWM0LjAwMyA1LjA5OSAzLjk5IDEyLjA1Ny0uMDM1IDE3LjE0NWwtMS43OTMgMi4yNjdhOC4yMDYgOC4yMDYgMCAwIDAgMS43NjkgMS40OThjLjY5OC40MjcgMS4zMzcuNjI5IDEuODUyLjYyOUgyOFYzaC00LjE5OVptLTYuMTQ4IDIzLjg0Mi43NjUgMS4wNTMuMDIzLjAyN2MuNzE3Ljg1MSAxLjU2NiAxLjYwNyAyLjQ2NCAyLjE1Ni44OS41NDQgMS44OS45MjIgMi44OTUuOTIySDMwVjFoLTYuMTk5Yy0uOTg3IDAtMi4wNjYuNTA1LTMuMDMyIDEuMTQ2YTE0LjkzNCAxNC45MzQgMCAwIDAtMi4zNTIgMS45NzRsLS4yNzYuMjg4LS41OTUuNjI4IDIuODU1IDMuNjE5LjAwNi4wMDZjMy40NTkgNC4zNzUgMy40NTcgMTAuMzI5LS4wMDQgMTQuNzA0bC0yLjc1IDMuNDc3WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBXb3JrcGxhY2VTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiA0VjJoMnYySDJabTUgMFYyaDJ2Mkg3Wm01IDBWMmgydjJoLTJaTTIgOVY3aDJ2MkgyWm01IDBWN2gydjJIN1ptNSAwVjdoMnYyaC0yWk0yIDE0di0yaDJ2MkgyWm01IDB2LTJoMnYySDdabTUgMHYtMmgydjJoLTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFycm93RW5kID0gZnVuY3Rpb24gRXVpSWNvbkFycm93RW5kKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuODU3IDE0LjA0M2EuNzUuNzUgMCAwIDEtLjAyNS0xLjA2bDQuNTkxLTQuODFhLjI1LjI1IDAgMCAwIDAtLjM0NmwtNC41OS00LjgxYS43NS43NSAwIDAgMSAxLjA4NS0xLjAzNWw0LjU5IDQuODFhMS43NSAxLjc1IDAgMCAxIDAgMi40MTZsLTQuNTkgNC44MWEuNzUuNzUgMCAwIDEtMS4wNi4wMjRaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNSAyLjc1YS43NS43NSAwIDAgMSAxLjUgMHYxMC41YS43NS43NSAwIDAgMS0xLjUgMFYyLjc1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dFbmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXJyb3dTdGFydCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1N0YXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAyLjc1YS43NS43NSAwIDAgMSAxLjUgMHYxMC41YS43NS43NSAwIDAgMS0xLjUgMFYyLjc1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjEzNSAxNC4wNDNhLjc1Ljc1IDAgMCAwIC4wMjUtMS4wNmwtNC41OS00LjgxYS4yNS4yNSAwIDAgMSAwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDAgMC0xLjA4NS0xLjAzNWwtNC41OSA0LjgxYTEuNzUgMS43NSAwIDAgMCAwIDIuNDE2bDQuNTkgNC44MWMuMjg2LjMuNzYuMzEgMS4wNi4wMjRaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dTdGFydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcnJvd0Rvd24gPSBmdW5jdGlvbiBFdWlJY29uQXJyb3dEb3duKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEuOTU3IDQuOTgyYS43NS43NSAwIDAgMSAxLjA2LS4wMjVsNC44MSA0LjU5MWEuMjUuMjUgMCAwIDAgLjM0NiAwbDQuODEtNC41OWEuNzUuNzUgMCAwIDEgMS4wMzUgMS4wODVsLTQuODEgNC41OWExLjc1IDEuNzUgMCAwIDEtMi40MTYgMGwtNC44MS00LjU5YS43NS43NSAwIDAgMS0uMDI1LTEuMDZaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dEb3duOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFycm93TGVmdCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd0xlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuMDE4IDE0LjA0M2EuNzUuNzUgMCAwIDAgLjAyNC0xLjA2bC00LjU5LTQuODFhLjI1LjI1IDAgMCAxIDAtLjM0Nmw0LjU5LTQuODFhLjc1Ljc1IDAgMSAwLTEuMDg1LTEuMDM1bC00LjU5IDQuODFhMS43NSAxLjc1IDAgMCAwIDAgMi40MTZsNC41OSA0LjgxYy4yODYuMy43NjEuMzEgMS4wNi4wMjRaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dMZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFycm93UmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uQXJyb3dSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljk4MiAxNC4wNDNhLjc1Ljc1IDAgMCAxLS4wMjUtMS4wNmw0LjU5MS00LjgxYS4yNS4yNSAwIDAgMCAwLS4zNDZsLTQuNTktNC44MWEuNzUuNzUgMCAwIDEgMS4wODUtMS4wMzVsNC41OSA0LjgxYTEuNzUgMS43NSAwIDAgMSAwIDIuNDE2bC00LjU5IDQuODFhLjc1Ljc1IDAgMCAxLTEuMDYuMDI0WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93UmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXJyb3dVcCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1VwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEuOTU3IDExLjAxOGMuMjg2LjMuNzYxLjMxIDEuMDYuMDI0bDQuODEtNC41OWEuMjUuMjUgMCAwIDEgLjM0NiAwbDQuODEgNC41OWEuNzUuNzUgMCAwIDAgMS4wMzUtMS4wODVsLTQuODEtNC41OWExLjc1IDEuNzUgMCAwIDAtMi40MTYgMGwtNC44MSA0LjU5YS43NS43NSAwIDAgMC0uMDI1IDEuMDZaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dVcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcnRpY2xlID0gZnVuY3Rpb24gRXVpSWNvbkFydGljbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgMTBhLjUuNSAwIDAgMCAwIDFoNGEuNS41IDAgMCAwIDAtMWgtNFpNOCA2LjVhLjUuNSAwIDAgMSAuNS0uNWg0YS41LjUgMCAwIDEgMCAxaC00YS41LjUgMCAwIDEtLjUtLjVaTTMuNSAyYS41LjUgMCAwIDAgMCAxaDVhLjUuNSAwIDAgMCAwLTFoLTVaTTggOC41YS41LjUgMCAwIDEgLjUtLjVoNGEuNS41IDAgMCAxIDAgMWgtNGEuNS41IDAgMCAxLS41LS41Wk0zLjUgNGEuNS41IDAgMCAwIDAgMWg1YS41LjUgMCAwIDAgMC0xaC01Wk0zIDEyLjVhLjUuNSAwIDAgMSAuNS0uNWg5YS41LjUgMCAwIDEgMCAxaC05YS41LjUgMCAwIDEtLjUtLjVaTTcgNkgzdjVoNFY2WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjUyNi4zMTJBMS4wMDIgMS4wMDIgMCAwIDAgMTAuOCAwSDJhMSAxIDAgMCAwLTEgMXYxNGExIDEgMCAwIDAgMSAxaDEyYTEgMSAwIDAgMCAxLTFWNC40MjljMC0uMjU2LS4wOTgtLjUwMy0uMjc0LS42ODlsLTMuMi0zLjQyOFpNMTAuNSA1SDE0djEwSDJWMWg4djMuNWEuNS41IDAgMCAwIC41LjVaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJ0aWNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Bc3RlcmlzayA9IGZ1bmN0aW9uIEV1aUljb25Bc3RlcmlzayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuOTI4IDguNDY4IDQgNy42MThsLjQ0Ni0xLjQyN0w3LjM3NSA3LjI1IDcuMjg3IDRoMS40ODRsLS4wOTcgMy4yOTYgMi44OC0xLjAzOUwxMiA3LjY5M2wtMi45NzcuODYgMS45MiAyLjU2TDkuNzQxIDEyIDcuOTM3IDkuMjhsLTEuNzQ1IDIuNjU0LTEuMjEzLS44NnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFzdGVyaXNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkF0ID0gZnVuY3Rpb24gRXVpSWNvbkF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMgOGE1IDUgMCAxIDEgOS44MTIgMS4zNjQuNzguNzggMCAwIDEtLjM0MS40NzZjLS4xNi4xLS4zODIuMTYtLjY1OS4xNi0uNTA3IDAtLjY2OC0uMTgtLjczLS4yNzRhLjUzLjUzIDAgMCAxLS4wODItLjIzVjVoLTF2Ljc2NGEzIDMgMCAxIDAgLjE0NiA0LjMzM2MuMDI4LjA1Ny4wNi4xMTcuMS4xNzcuMjY3LjQwNy43NjEuNzI2IDEuNTY2LjcyNi40MTIgMCAuODMtLjA4OCAxLjE4OS0uMzExLjM2Ny0uMjMuNjQtLjU4My43NzMtMS4wNTNhNiA2IDAgMSAwLTIuNTAxIDMuMzkzbC0uNTQ2LS44MzdBNSA1IDAgMCAxIDMgOFptNyAwYTIgMiAwIDEgMC00IDAgMiAyIDAgMCAwIDQgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJlYWtlciA9IGZ1bmN0aW9uIEV1aUljb25CZWFrZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjI3NyAxMC4wODhjLjAyLjAxNC4wNC4wMy4wNTcuMDQ3LjU4Mi41NSAxLjEzNC44MTIgMS42NjYuODEyLjU4NiAwIDEuODQtLjI5MyAzLjcxMy0uODhMOSA2LjIxMlYySDd2NC4yMTJsLTEuNzIzIDMuODc2Wm0tLjQzOC45ODdMMy41MzkgMTRoOC45MjJsLTEuMzItMi45NjlDOS4wOTYgMTEuNjc3IDcuNzMzIDEyIDcgMTJjLS43NCAwLTEuNDYzLS4zMTUtMi4xNjEtLjkyNVpNNiAySDVWMWg2djFoLTF2NGwzLjM3NSA3LjU5NEExIDEgMCAwIDEgMTIuNDYxIDE1SDMuNTRhMSAxIDAgMCAxLS45MTQtMS40MDZMNiA2VjJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CZWFrZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQmVsbCA9IGZ1bmN0aW9uIEV1aUljb25CZWxsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuMzE2IDEyaDEwLjM2OGMtLjE4OC0uNzA0LS4yOC0xLjY5MS0uMzQ4LTMuMDM3LS4wNy0xLjM4Mi0uMTAzLTEuODg4LS4xOS0yLjYxMi0uMDI4LS4yMzYtLjA2LS40NjItLjA5Ni0uNjgtLjMxLTEuODkyLTEuNTA2LTIuOTIzLTMuNzA4LTMuMTMxYTEgMSAwIDEgMC0xLjY4NCAwYy0yLjIwMi4yMDgtMy4zOTcgMS4yNC0zLjcwOCAzLjEzYTE2LjAxIDE2LjAxIDAgMCAwLS4wOTYuNjhjLS4wODcuNzI1LS4xMiAxLjIzLS4xOSAyLjYxMy0uMDY4IDEuMzQ2LS4xNiAyLjMzMy0uMzQ4IDMuMDM3Wm0xMC44NDMgMUgxLjg0Yy0uMzA4LjM1My0uNzM3LjUtMS4zNDEuNWEuNS41IDAgMSAxIDAtMWMuNzg2IDAgMS4wMjQtLjc4MyAxLjE2Ni0zLjU4Ny4wNy0xLjQwNy4xMDUtMS45MjYuMTk2LTIuNjgxLjAzLS4yNS4wNjMtLjQ5LjEwMi0uNzI0LjMzNC0yLjA0MSAxLjU0Ni0zLjMxMyAzLjU1Ni0zLjc5MmEyIDIgMCAwIDEgMy45NiAwYzIuMDEuNDc5IDMuMjIyIDEuNzUgMy41NTcgMy43OTJhMTcgMTcgMCAwIDEgLjEwMi43MjRjLjA5Ljc1NS4xMjUgMS4yNzQuMTk2IDIuNjgxLjE0IDIuODA0LjM3OSAzLjU4NyAxLjE2NSAzLjU4N2EuNS41IDAgMSAxIDAgMWMtLjYwNCAwLTEuMDMzLS4xNDctMS4zNDEtLjVaTTUuNSAxNGg0YTIgMiAwIDEgMS00IDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CZWxsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJlbGxTbGFzaCA9IGZ1bmN0aW9uIEV1aUljb25CZWxsU2xhc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm05LjUgMTQtLjAwNS4xNWEyIDIgMCAwIDEtMy45NzIuMTUzbC0uMDE4LS4xNTRMNS41IDE0aDRabTUuMzgtMTIuODI1YS41LjUgMCAwIDEgLjAwOC42NGwtLjA2My4wNjUtMTQgMTJhLjUuNSAwIDAgMS0uNzEzLS42OTVsLjA2My0uMDY1IDE0LTEyYS41LjUgMCAwIDEgLjcwNS4wNTVaTTEzLjAzNiA1LjUxbC4wNTUuMzUzLjA0OC4zNjhjLjA2Ni41NTQuMTAzLjk4LjE0NSAxLjcyNGwuMDggMS40OTFjLjE0NiAyLjM3MS40MDIgMy4wNTMgMS4xMzYgMy4wNTNhLjUuNSAwIDEgMSAwIDFjLS42MDMgMC0xLjAzMS0uMTQ2LTEuMzQtLjQ5OUg0LjE4NWwxLjE4Mi0xaDcuMzE3Yy0uMTcyLS42NDQtLjI2NC0xLjUyOC0uMzMtMi43MDhsLS4wOS0xLjYzOGMtLjAzMy0uNTE0LS4wNjYtLjg3LS4xMTgtMS4zMDRsLS4wMTEtLjA3Ny45MDEtLjc2M1pNNy41IDBhMiAyIDAgMCAxIDEuOTggMS43MTdjLjQ3Ni4xMTMuOTA3LjI3IDEuMjkyLjQ3MmwtLjgzOC43MWE1LjcyOCA1LjcyOCAwIDAgMC0xLjU5MS0uMzYgMSAxIDAgMSAwLTEuNjg0IDBDNC40NTUgMi43NSAzLjI2IDMuNzggMi45NSA1LjY3MWwtLjA1LjMzNC0uMDQ2LjM0N2MtLjA4LjY3Ni0uMTE1IDEuMTYxLS4xNzYgMi4zNDdsLS4wMTQuMjY1LS4wMDUuMDktMS4wNTguODk3Yy4wMTgtLjIzNC4wMzUtLjQ4OC4wNS0uNzYzbC4wNzctMS40MjdjLjAzOC0uNjI2LjA3My0xLjAyNS4xMzQtMS41MjguMDMtLjI1LjA2My0uNDkuMTAyLS43MjQuMzM0LTIuMDQgMS41NDYtMy4zMTMgMy41NTUtMy43OTJsLjAwNC0uMDE5QTIgMiAwIDAgMSA3LjUgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJlbGxTbGFzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25CZXRhID0gZnVuY3Rpb24gRXVpSWNvbkJldGEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDYuMzk0aDEuMDNjLjcyIDAgMS4yODMuMTUzIDEuNjg4LjQ1OWEyLjIgMi4yIDAgMCAxIC44MTMgMS4xNjNjLjEzOC40Ny4xNjUuOTUyLjA4MyAxLjQ0Ny0uMS41OTctLjMzIDEuMTM1LS42OSAxLjYxNmEzLjk1IDMuOTUgMCAwIDEtMS4zMzMgMS4xMzcgMy42ODkgMy42ODkgMCAwIDEtMS43MzUuNDE4Yy0uMzgxIDAtLjc0Ny0uMDctMS4wOTctLjIxMi0uMzUtLjE0NC0uNjM2LS40MTctLjg2LS44MThsLS4wODIuMDQxLjMzLTIuMDE4Yy0uMDU1LjMzNy0uMDI0LjY0Ny4wOTIuOTMyLjEyLjI4NS4zMi41MTMuNTk4LjY4NS4yODEuMTcxLjYzNC4yNTcgMS4wNi4yNTdhMi41NCAyLjU0IDAgMCAwIDIuMDc1LTEuMDNjLjIyNi0uMzA4LjM2OS0uNjQ1LjQyNy0xLjAwOGExLjkyOSAxLjkyOSAwIDAgMC0uMDcyLS45NzMgMS41MjQgMS41MjQgMCAwIDAtLjUzNi0uNzUyYy0uMjUtLjE5Ni0uNTctLjI5My0uOTU3LS4yOTNINy44MjVMOCA2LjM5NVptMS4zNTktNC41OTFjLjQ5IDAgLjkxMy4wNzkgMS4yNjYuMjM3YTIuMjU4IDIuMjU4IDAgMCAxIDEuMzAzIDEuNTI4Yy4wODIuMzMuMDk0LjY2OC4wMzYgMS4wMTQtLjA2OS40MzMtLjI1Ljg2NC0uNTQgMS4yOTMtLjI5LjQyNS0uNjg0Ljc4LTEuMTg1IDEuMDY1LS40OTcuMjgyLTEuMDk2LjQyMi0xLjc5Ni40MjJoLS41OTdsLjE3NS0xLjA1aC41NzZhMi4xODIgMi4xODIgMCAwIDAgMS44MTItLjg5Yy4xOTItLjI2NS4zMTItLjU0NC4zNi0uODQuMDgtLjQ3My0uMDM2LS44NjYtLjM0NC0xLjE3OC0uMzEtLjMxMy0uNzI2LS40NjktMS4yNTEtLjQ2OS0uMzUgMC0uNjgzLjA3Mi0uOTk5LjIxNmEyLjI1NiAyLjI1NiAwIDAgMC0uNzkzLjYwMyAxLjg1MiAxLjg1MiAwIDAgMC0uNDEyLjg5bC0xLjc4IDEwLjgxSDMuOTczbDEuNzgyLTEwLjgxYTMuMTcgMy4xNyAwIDAgMSAuNjQ4LTEuNDU3Yy4zNC0uNDI5Ljc2NS0uNzY3IDEuMjc3LTEuMDE0YTMuODI3IDMuODI3IDAgMCAxIDEuNjc4LS4zN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJldGE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQm9sdCA9IGZ1bmN0aW9uIEV1aUljb25Cb2x0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4wNCAxMy4yNzRhLjUuNSAwIDEgMCAuODkyLjQ1M2wzLjAxNC01LjkzMWEuNS41IDAgMCAwLS40NDUtLjcyN0g1LjMxNkw4LjAzIDEuNzI3YS41LjUgMCAxIDAtLjg5Mi0uNDUzTDQuMDU1IDcuMzQzYS41LjUgMCAwIDAgLjQ0Ni43MjZoNS4xODVMNy4wNCAxMy4yNzRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Cb2x0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJveGVzSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIEV1aUljb25Cb3hlc0hvcml6b250YWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDZoNHY0SDBWNlptMSAxdjJoMlY3SDFabTUtMWg0djRINlY2Wm0xIDF2MmgyVjdIN1ptNS0xaDR2NGgtNFY2Wm0xIDNoMlY3aC0ydjJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Cb3hlc0hvcml6b250YWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQm94ZXNWZXJ0aWNhbCA9IGZ1bmN0aW9uIEV1aUljb25Cb3hlc1ZlcnRpY2FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxdjJoMlYxSDdaTTYgMGg0djRINlYwWm0wIDZoNHY0SDZWNlptMSAxdjJoMlY3SDdabS0xIDVoNHY0SDZ2LTRabTEgMXYyaDJ2LTJIN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJveGVzVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQnJhbmNoID0gZnVuY3Rpb24gRXVpSWNvbkJyYW5jaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMTAuMDM4YTMuNDkgMy40OSAwIDAgMSAyLjUtMS4wNWgyYTIuNSAyLjUgMCAwIDAgMi40NjItMi4wNjEgMiAyIDAgMSAxIDEuMDA4LjAxN0EzLjUgMy41IDAgMCAxIDkuNSA5Ljk4N2gtMmEyLjUgMi41IDAgMCAwLTIuNDY2IDIuMDg1QTIgMiAwIDEgMSA0IDEyLjA2M1YzLjkzN2EyIDIgMCAxIDEgMSAwdjYuMVpNNC41IDNhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm0wIDEyYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptOC05YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJyYW5jaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25CcmFuY2hVc2VyID0gZnVuY3Rpb24gRXVpSWNvbkJyYW5jaFVzZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiA3Ljk4N2EzLjQ5IDMuNDkgMCAwIDAtMi41IDEuMDV2LTQuMWEyIDIgMCAxIDAtMSAwdjYuMTI2YTIgMiAwIDEgMCAxLjAzNC4wMUEyLjUgMi41IDAgMCAxIDYgOC45ODZoMWEzLjUgMy41IDAgMCAwIDMuNDctMy4wNDMgMiAyIDAgMSAwLTEuMDA5LS4wMTdBMi41IDIuNSAwIDAgMSA3IDcuOTg3SDZ6TTQgM2ExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDB6bTAgMTBhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwem03LTlhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwelwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjUgMTAuNWExLjUgMS41IDAgMSAxLTMgMCAxLjUgMS41IDAgMCAxIDMgMHpNOSAxNWMuMjg0LTEuMjIzIDEuNTE5LTIuMTQzIDMtMi4xNDNzMi43MTYuOTIgMyAyLjE0M0g5elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJhbmNoVXNlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ccm9vbSA9IGZ1bmN0aW9uIEV1aUljb25Ccm9vbShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTMuNzMyIDEzLjA5Ni0uMTk3LS4xOTcgMi44My0yLjgyOC43MDYuNzA3LTIuODI5IDIuODI4LjcwOC43MDggMi44MjgtMi44MjhhMSAxIDAgMCAwIDAtMS40MTRMNS42NTggNy45NWEuOTkzLjk5MyAwIDAgMC0uNzA4LS4yOTMuOTk0Ljk5NCAwIDAgMC0uNzA4LjI5M2wtMi44MjggMi44MjkuNzA3LjcwNyAyLjgyOS0yLjgzLjcwNy43MDgtMi44MjkgMi44MjkuOTA0LjkwM1ptMS4yMTgtNi40NGMuNTEyIDAgMS4wMjMuMTk2IDEuNDE0LjU4N2wyLjEyMSAyLjEyYTIgMiAwIDAgMSAwIDIuODNMNC45NSAxNS43MjggMCAxMC43NzhsMy41MzUtMy41MzVhMS45OTMgMS45OTMgMCAwIDEgMS40MTUtLjU4NlpNMTQuMDIgMWwuNzA4LjcwNy02Ljk1IDYuOTUtLjcwNy0uNzA3TDE0LjAyMSAxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJvb207IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQnJ1c2ggPSBmdW5jdGlvbiBFdWlJY29uQnJ1c2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS45OTMgOC4xN2MwIC44My0uNjczIDEuNTA3LTEuNDk5IDEuNTA3SDUuNDk4QTEuNTA1IDEuNTA1IDAgMCAxIDMuOTk5IDguMTdWNi42NjJoNy45OTRWOC4xN1ptLTIuOTk4IDUuOTk4YzAgLjQ1NS0uNDQ4LjgyNy0uOTk5LjgyNy0uNTUgMC0xLS4zNzItMS0uODI3di0zLjQ4NmgydjMuNDg2Wk00IDUuNjU4VjEuMDA1aDEuMjYydjQuNjUzSDRabTIuMjYxIDBWMS4wMDVoMS4yNDR2NC42NTNINi4yNlptMi4yNDQgMFYxLjAwNWgxLjIzNXY0LjY1M0g4LjUwNFptMi4yMzQgMFYxLjAwNWgxLjI1NHY0LjY1M2gtMS4yNTRaTTMuMDA4IDAgMyA4LjE3YTIuNTA5IDIuNTA5IDAgMCAwIDIuNDk4IDIuNTEyaC41djMuNDg2YzAgMS4wMS44OTYgMS44MzIgMS45OTggMS44MzIgMS4xMDIgMCAxLjk5OC0uODIyIDEuOTk4LTEuODMydi0zLjQ4NmguNWEyLjUwOSAyLjUwOSAwIDAgMCAyLjQ5OC0yLjUxMkwxMyAwSDMuMDA4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJ1c2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQnVnID0gZnVuY3Rpb24gRXVpSWNvbkJ1ZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTEwLjY1MSA1LjEyNi45MjItLjQ1NS44ODQtMi4zNDNhLjUuNSAwIDAgMSAuOTM5LjM0NEwxMi4zNzQgNS4zOWwtMS40NS43MTdBNS4zIDUuMyAwIDAgMSAxMSA3aDEuMDQzbDIuMyAyLjE5OGEuNS41IDAgMCAxLS42OTIuNzIzTDExLjY0MiA4aC0uNzM3Yy0uMDkuNDY2LS4yNC44OTktLjQ0MSAxLjI4M2wuODkyLjQ5IDEuMjc4IDMuNTU0YS41LjUgMCAwIDEtLjk0LjM0MmwtMS4xNS0zLjItLjY1NS0uMzZDOS4zNzMgMTAuNjY1IDguNzE2IDExIDggMTFzLTEuMzc0LS4zMzUtMS44OS0uODkzbC0uNjU4LjM2MS0xLjE1IDMuMjAxYS41LjUgMCAxIDEtLjk0LS4zNDJsMS4yNzktMy41NTQuODk1LS40OTFBNC43IDQuNyAwIDAgMSA1LjA5NSA4aC0uNzRsLTIuMDEgMS45MmEuNS41IDAgMCAxLS42OS0uNzIyTDMuOTUyIDdINWE1LjMgNS4zIDAgMCAxIC4wNzUtLjg5MkwzLjYyMyA1LjM5IDIuNiAyLjY3MmEuNS41IDAgMSAxIC45MzktLjM0NGwuODg0IDIuMzQzLjkyNC40NTdjLjE3LS40MjguMzk3LS44MS42NjgtMS4xMjhoLjU3YTEuNSAxLjUgMCAxIDEgMi44MyAwaC41NjhjLjI3LjMxOC40OTcuNjk5LjY2NyAxLjEyNlpNOCA0YS41LjUgMCAxIDAgMC0xIC41LjUgMCAwIDAgMCAxWm0xLjc1MSAxLjU3MUEzLjMyNiAzLjMyNiAwIDAgMCA5LjQ3NiA1SDYuNTI0Yy0uMTA3LjE3NS0uMi4zNjctLjI3Ni41NzMtLjExLjI5NS0uMTg2LjYxOC0uMjIzLjk1N2E0LjM1NCA0LjM1NCAwIDAgMCAuMDkgMS40NjVjLjA3MS4yOTQuMTcyLjU2NS4yOTUuODA2LjE2OC4zMjguMzguNjAxLjYxNi44MDMuMjk1LjI1My42MzEuMzk2Ljk3NC4zOTYuMzQyIDAgLjY3OC0uMTQyLjk3My0uMzk0LjIzNy0uMjAzLjQ0OC0uNDc2LjYxNi0uODAzYTMuNjIgMy42MiAwIDAgMCAuMjk2LS44MDcgNC4yNjMgNC4yNjMgMCAwIDAgLjA5LTEuNDY2IDMuOTg4IDMuOTg4IDAgMCAwLS4yMjQtLjk1OVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJ1ZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25CdWxsc2V5ZSA9IGZ1bmN0aW9uIEV1aUljb25CdWxsc2V5ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTRBNiA2IDAgMSAwIDggMmE2IDYgMCAwIDAgMCAxMlptMCAxQTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRabTAtM2E0IDQgMCAxIDAgMC04IDQgNCAwIDAgMCAwIDhabTAtMWEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZabTAtMmExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CdWxsc2V5ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DYWxlbmRhciA9IGZ1bmN0aW9uIEV1aUljb25DYWxlbmRhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNCA0di0uOTk0QzE0IDIuNDUgMTMuNTUgMiAxMi45OTQgMkgxMXYxaC0xVjJINnYxSDVWMkgzLjAwNkMyLjQ1IDIgMiAyLjQ1IDIgMy4wMDZ2OS45ODhDMiAxMy41NSAyLjQ1IDE0IDMuMDA2IDE0aDkuOTg4QzEzLjU1IDE0IDE0IDEzLjU1IDE0IDEyLjk5NFY1SDJWNGgxMnptLTMtM2gxLjk5NEMxNC4xMDIgMSAxNSAxLjg5NyAxNSAzLjAwNnY5Ljk4OEEyLjAwNSAyLjAwNSAwIDAgMSAxMi45OTQgMTVIMy4wMDZBMi4wMDUgMi4wMDUgMCAwIDEgMSAxMi45OTRWMy4wMDZDMSAxLjg5OCAxLjg5NyAxIDMuMDA2IDFINVYwaDF2MWg0VjBoMXYxek00IDdoMnYxSDRWN3ptMyAwaDJ2MUg3Vjd6bTMgMGgydjFoLTJWN3pNNCA5aDJ2MUg0Vjl6bTMgMGgydjFIN1Y5em0zIDBoMnYxaC0yVjl6bS02IDJoMnYxSDR2LTF6bTMgMGgydjFIN3YtMXptMyAwaDJ2MWgtMnYtMXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNhbGVuZGFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNoYW5nZVBvaW50RGV0ZWN0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkNoYW5nZVBvaW50RGV0ZWN0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAxNGgxMi41YS41LjUgMCAwIDEgMCAxaC0xM2EuNS41IDAgMCAxLS41LS41di0xM2EuNS41IDAgMCAxIDEgMFYxNFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1IDYuNWEuNS41IDAgMCAwLS41LS41aC02YS41LjUgMCAwIDAtLjUuNVYxMkgzLjVhLjUuNSAwIDAgMCAwIDFoNWEuNS41IDAgMCAwIC41LS41VjdoNS41YS41LjUgMCAwIDAgLjUtLjVaTTcuMDIzIDMuMjA2QS4zMDEuMzAxIDAgMCAxIDcuMyAzaDIuNGMuMTIxIDAgLjIzLjA4MS4yNzcuMjA2YS4zNi4zNiAwIDAgMS0uMDY1LjM2M2wtMS4yIDEuMzMzYS4yOC4yOCAwIDAgMS0uNDI0IDBsLTEuMi0xLjMzM2EuMzYuMzYgMCAwIDEtLjA2NS0uMzYzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2hhbmdlUG9pbnREZXRlY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2hlY2sgPSBmdW5jdGlvbiBFdWlJY29uQ2hlY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNi41IDEyYS41MDIuNTAyIDAgMCAxLS4zNTQtLjE0NmwtNC00YS41MDIuNTAyIDAgMCAxIC43MDgtLjcwOEw2LjUgMTAuNzkzbDYuNjQ2LTYuNjQ3YS41MDIuNTAyIDAgMCAxIC43MDguNzA4bC03IDdBLjUwMi41MDIgMCAwIDEgNi41IDEyXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DaGVjazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DaGVja0luQ2lyY2xlRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxNkE4IDggMCAxIDEgOCAwYTggOCAwIDAgMSAwIDE2Wm0zLjY1LTEwLjg1N0w2LjkxIDkuOCA0LjM1IDcuMjg2YS41LjUgMCAwIDAtLjcuNzE0bDIuOTA5IDIuODU3YS41LjUgMCAwIDAgLjcgMGw1LjA5MS01YS41LjUgMCAxIDAtLjctLjcxNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2hlZXIgPSBmdW5jdGlvbiBFdWlJY29uQ2hlZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjkzNCAzLjA2M2ExLjUgMS41IDAgMCAxIC41NDcuMzIxbC4xMTIuMTE1IDYuMDcgNi45MTVhMS41IDEuNSAwIDAgMS0uNjQ2IDIuNDFsLS4xNDIuMDQtOS4wMzEgMi4wOTdBMS41IDEuNSAwIDAgMSAuMDM3IDEzLjE5bC4wNDMtLjE1OUwzLjA0IDQuMDJhMS41IDEuNSAwIDAgMSAxLjg5My0uOTU3Wk00LjAyNyA0LjI1bC0uMDM2LjA4My0yLjk2MSA5LjAxMWEuNS41IDAgMCAwIC40OTguNjU2bC4wOS0uMDEzIDIuOTM3LS42ODEtMS4zOTktMS41MDhhLjUuNSAwIDAgMSAuNjY2LS43NGwuMDY3LjA2IDEuNzg4IDEuOTI3IDIuNjM0LS42MTEtMy4xOTgtMy42MDFhLjUuNSAwIDAgMSAuNjgyLS43MjZsLjA2Ni4wNjIgMy41NTkgNC4wMDcgMS4yMjktLjI4NGEuNS41IDAgMCAwIC4xNS0uMDYzbC4wNjctLjA0OWEuNS41IDAgMCAwIC4wOTktLjYzMmwtLjA1My0uMDczLTYuMDctNi45MTZhLjUuNSAwIDAgMC0uMTM4LS4xMWwtLjA4Mi0uMDM1LS4wODgtLjAyYS41LjUgMCAwIDAtLjUwNy4yNTZabTExLjY2IDUuMDM5YTIuNSAyLjUgMCAwIDEtLjk3NSAzLjM5OS41LjUgMCAwIDEtLjQ4NS0uODc1IDEuNSAxLjUgMCAwIDAtMS40NTQtMi42MjQuNS41IDAgMCAxLS40ODUtLjg3NSAyLjUgMi41IDAgMCAxIDMuMzk5Ljk3NVptLTUuMDMtNi4yMDZhLjUuNSAwIDAgMSAuMzM4LjU0NGwtLjAyLjA4OC0uNjc3IDIuMDM1IDIuMDY4LS43MjFhLjUuNSAwIDAgMSAuNi4yMjVsLjAzNi4wODJhLjUuNSAwIDAgMS0uMjI1LjZsLS4wODIuMDM3TDkuNjcgNy4wMjhhLjUuNSAwIDAgMS0uNjU5LS41NWwuMDItLjA4Ljk5NS0zYS41LjUgMCAwIDEgLjYzMi0uMzE2Wk0xNC41IDRhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFaTTcuODYyLjQwM2EyLjUgMi41IDAgMCAxIC43MzUgMy40NTkuNS41IDAgMCAxLS44MzktLjU0NSAxLjUgMS41IDAgMSAwLTIuNTE2LTEuNjM0LjUuNSAwIDAgMS0uODM5LS41NDVBMi41IDIuNSAwIDAgMSA3Ljg2Mi40MDNaTTEzLjUgMmEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptLTMtMWEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptNC0xYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2hlZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2xpY2tMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkNsaWNrTGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgLjVhLjUuNSAwIDAgMC0xIDB2MWEuNS41IDAgMCAwIDEgMHYtMVptLTMuMTQ2LjY0NmEuNS41IDAgMSAwLS43MDguNzA4bDEgMWEuNS41IDAgMSAwIC43MDgtLjcwOGwtMS0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzIDdBNSA1IDAgMCAwIDMgN3Y0YTUgNSAwIDAgMCAxMCAwVjdabS0xIDBhNCA0IDAgMCAwLTQtNHY1YTEgMSAwIDAgMS0xIDFINHYyYTQgNCAwIDAgMCA4IDBWN1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgNC41QS41LjUgMCAwIDEgLjUgNGgxYS41LjUgMCAwIDEgMCAxaC0xYS41LjUgMCAwIDEtLjUtLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbGlja0xlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2xpY2tSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25DbGlja1JpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEgLjVhLjUuNSAwIDAgMSAxIDB2MWEuNS41IDAgMCAxLTEgMHYtMVptMy4xNDYuNjQ2YS41LjUgMCAwIDEgLjcwOC43MDhsLTEgMWEuNS41IDAgMCAxLS43MDgtLjcwOGwxLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyA3YTUgNSAwIDAgMSAxMCAwdjRhNSA1IDAgMCAxLTEwIDBWN1ptMSAwYTQgNCAwIDAgMSA0LTR2NWExIDEgMCAwIDAgMSAxaDN2MmE0IDQgMCAwIDEtOCAwVjdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiA0LjVhLjUuNSAwIDAgMC0uNS0uNWgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgLjUtLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbGlja1JpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNsb2NrID0gZnVuY3Rpb24gRXVpSWNvbkNsb2NrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSAxM0E1LjUwNiA1LjUwNiAwIDAgMSAyIDcuNUMyIDQuNDY3IDQuNDY3IDIgNy41IDJTMTMgNC40NjcgMTMgNy41IDEwLjUzMyAxMyA3LjUgMTNtMC0xMmE2LjUgNi41IDAgMSAwIDAgMTMgNi41IDYuNSAwIDAgMCAwLTEzbTMgNkg4VjMuNWEuNS41IDAgMCAwLTEgMHY0YS41LjUgMCAwIDAgLjUuNWgzYS41LjUgMCAwIDAgMC0xXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG9jazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DbG9ja0NvdW50ZXIgPSBmdW5jdGlvbiBFdWlJY29uQ2xvY2tDb3VudGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMzkgMy42MWE1LjUgNS41IDAgMCAwLTcuNzggNy43OGwuNTYyLjU2di0xLjYyMmEuNS41IDAgMCAxIDEgMHYyLjgyOWEuNS41IDAgMCAxLS41LjVIMS44NDNhLjUuNSAwIDAgMSAwLTFoMS42MjFsLS41Ni0uNTZBNi41IDYuNSAwIDEgMSA3LjUgMTRhLjUuNSAwIDAgMSAwLTEgNS41IDUuNSAwIDAgMCAzLjg5LTkuMzlaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjUgM2EuNS41IDAgMCAxIC41LjVWN2gyLjVhLjUuNSAwIDAgMSAwIDFoLTNhLjUuNSAwIDAgMS0uNS0uNXYtNGEuNS41IDAgMCAxIC41LS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvY2tDb3VudGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNsb3VkRHJpenpsZSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZERyaXp6bGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjM0OCAzLjc2MUEzLjk5NSAzLjk5NSAwIDAgMSA4IDdhLjUuNSAwIDAgMS0xIDAgMyAzIDAgMSAwLTQuODc4IDIuMzQuNS41IDAgMCAxLS42MjcuNzc5IDQgNCAwIDAgMSAzLjk3My02Ljg0IDUuNTAyIDUuNTAyIDAgMCAxIDEwLjA5NiA0LjM3LjUuNSAwIDEgMS0uOTItLjM5IDQuNSA0LjUgMCAxIDAtOC4yOTYtMy40OTdabS0xLjYxIDQuOTM1YS41LjUgMCAxIDEgLjc3NS42MzNsLTEuNDY2IDEuNzkyYS41LjUgMCAxIDEtLjc3NC0uNjMzbDEuNDY2LTEuNzkyWm0tMy4xMiAzLjY0N2EuNS41IDAgMCAxIC43NzQuNjM0bC0xLjUwNSAxLjg0YS41LjUgMCAwIDEtLjc3NC0uNjM0bDEuNTA1LTEuODRabTcuNjItMy42NDdhLjUuNSAwIDAgMSAuNzc1LjYzM2wtMS40NjYgMS43OTJhLjUuNSAwIDEgMS0uNzc0LS42MzNsMS40NjYtMS43OTJabS0zLjEyIDMuNjQ3YS41LjUgMCAwIDEgLjc3NC42MzRsLTEuNTA1IDEuODRhLjUuNSAwIDAgMS0uNzc0LS42MzRsMS41MDUtMS44NFptNy42Mi0zLjY0N2EuNS41IDAgMSAxIC43NzUuNjMzbC0xLjQ2NiAxLjc5MmEuNS41IDAgMSAxLS43NzQtLjYzM2wxLjQ2Ni0xLjc5MlptLTMuMTIgMy42NDdhLjUuNSAwIDAgMSAuNzc0LjYzNGwtMS41MDUgMS44NGEuNS41IDAgMCAxLS43NzQtLjYzNGwxLjUwNS0xLjg0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvdWREcml6emxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNsb3VkU3Rvcm15ID0gZnVuY3Rpb24gRXVpSWNvbkNsb3VkU3Rvcm15KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy40MjEgNC45M2EuNS41IDAgMSAxLS44Ny40OSAzIDMgMCAxIDAtNC40MyAzLjkxOC41LjUgMCAwIDEtLjYyNi43OCA0IDQgMCAwIDEgMy45NzMtNi44NGwuMDMyLjAxOFYzLjI4YTUuNSA1LjUgMCAxIDEgNy4wMDMgNy4zNTcuNS41IDAgMSAxLS4zNi0uOTM0IDQuNSA0LjUgMCAxIDAtNS43Ny01LjkyM2MuNDIuMzEuNzc4LjcwMSAxLjA1IDEuMTVoLS4wMDJaTTkuNiAxMWMuNjY5LjAwMi43OTQuNjcuMzYgMS4wMDNsLTQuNjggMy44ODJjLS40NTcuMzc4LTEuMDUzLS4yNi0uNjQzLS42ODlsMy4wOC0zLjE5M0E1NDExLjcgNTQxMS43IDAgMCAxIDUuMTEzIDEyYy0uNjY4LS4wMDEtLjc5My0uNjY5LS4zNi0xLjAwM2w0LjY4LTMuODgxYy40NTgtLjM3OSAxLjA1My4yNi42NDMuNjg4bC0zLjA4IDMuMTkzTDkuNiAxMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNsb3VkU3Rvcm15OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNsb3VkU3VubnkgPSBmdW5jdGlvbiBFdWlJY29uQ2xvdWRTdW5ueShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjc0NiA1LjAwNUE1LjUgNS41IDAgMCAxIDEwLjUgMTZINGE0IDQgMCAwIDEtMS42MS03LjY2M0E0LjQ3MyA0LjQ3MyAwIDAgMSAyLjAyOSA3SC41YS41LjUgMCAwIDEgMC0xaDEuNTI3YTQuNDc5IDQuNDc5IDAgMCAxIC45NTctMi4zMDlMMS42NDYgMi4zNTRhLjUuNSAwIDEgMSAuNzA4LS43MDhMMy42OSAyLjk4NEE0LjQ3OSA0LjQ3OSAwIDAgMSA2IDIuMDI3Vi41YS41LjUgMCAwIDEgMSAwdjEuNTI4YTQuNDkzIDQuNDkzIDAgMCAxIDIuMzA5Ljk1NmwxLjMzNy0xLjMzOGEuNS41IDAgMCAxIC43MDguNzA4TDEwLjAxNiAzLjY5Yy4zMTEuMzg4LjU2LjgzMS43MyAxLjMxNFpNNCAxNWg2LjVhNC41IDQuNSAwIDEgMC00LjE1Mi02LjIzOUEzLjk5NSAzLjk5NSAwIDAgMSA4IDEyYS41LjUgMCAxIDEtMSAwIDMgMyAwIDEgMC0zIDNabTUuNjkxLTkuOTRhMy41IDMuNSAwIDEgMC02LjMzIDIuOTkxIDQuMDI5IDQuMDI5IDAgMCAxIDIuMTA2LjIyNyA1LjUwNSA1LjUwNSAwIDAgMSA0LjIyNC0zLjIxOVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNsb3VkU3Vubnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2x1c3RlciA9IGZ1bmN0aW9uIEV1aUljb25DbHVzdGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuNSA3YTIuNSAyLjUgMCAxIDAgMC01IDIuNSAyLjUgMCAwIDAgMCA1em0wLTZhMy41IDMuNSAwIDAgMSAzLjQ2NSAzaDMuMTJhMS41IDEuNSAwIDEgMSAwIDFoLTMuMTJhMy40ODIgMy40ODIgMCAwIDEtLjY2MiAxLjU5NmwyLjEgMi4xQTMuNSAzLjUgMCAxIDEgOC4wMzYgMTJoLTMuMTJhMS41IDEuNSAwIDEgMSAwLS45OTloMy4xMmEzLjQ4MiAzLjQ4MiAwIDAgMSAuNjYyLTEuNTk2bC0yLjEtMi4xQTMuNSAzLjUgMCAxIDEgNC41IDF6TTEyIDQuNWEuNS41IDAgMSAwIDEgMCAuNS41IDAgMCAwLTEgMHptLS41IDkuNWEyLjUgMi41IDAgMSAxIDAtNSAyLjUgMi41IDAgMCAxIDAgNXpNNCAxMS41YS41LjUgMCAxIDEtMSAwIC41LjUgMCAwIDEgMSAwelwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNsdXN0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29sb3IgPSBmdW5jdGlvbiBFdWlJY29uQ29sb3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAxMWMxLjMzNCAxLjM5MyAyIDIuNDM1IDIgMy4xMjVDMTUgMTUuMTYxIDE0LjEwNSAxNiAxMyAxNmMtMS4xMDQgMC0yLS44NC0yLTEuODc1IDAtLjY5LjY2Ny0xLjczMiAyLTMuMTI1ek01Ljg1Ny4xNWw2LjM0IDYuNDUuMDE2LjAyLjMyNC4zMjFhMS41IDEuNSAwIDAgMSAuMTEgMi4wMDZsLS4xMDMuMTE0LTQuNDc0IDQuNTEzYTEuNSAxLjUgMCAwIDEtMi4xMjMuMDA4TDEuNDY0IDkuMDZhMS41IDEuNSAwIDAgMSAuMDA3LTIuMTJsNC40NzItNC40NWMuMTQ1LS4xNDYuMzEzLS4yNTQuNDkyLS4zMjdMNS4xNDQuODVhLjUuNSAwIDAgMSAuNzEzLS43em0xLjQ5NiAzLjA0OWEuNS41IDAgMCAwLS43MDUgMEwyLjE3NyA3LjY1YS40OTguNDk4IDAgMCAwLS4xNDguMzVoOS45NWEuNDk4LjQ5OCAwIDAgMC0uMTQ4LS4zNUw3LjM1MyAzLjJ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db2xvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db21wdXRlID0gZnVuY3Rpb24gRXVpSWNvbkNvbXB1dGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDNhMSAxIDAgMCAwLTEgMXY4YTEgMSAwIDAgMCAxIDFoOGExIDEgMCAwIDAgMS0xVjRhMSAxIDAgMCAwLTEtMUg0Wm0xMCA4djFhMiAyIDAgMCAxLTIgMmgtMXYyaC0xdi0ySDguNXYyaC0xdi0ySDZ2Mkg1di0ySDRhMiAyIDAgMCAxLTItMnYtMUgwdi0xaDJWOC41SDB2LTFoMlY2SDBWNWgyVjRhMiAyIDAgMCAxIDItMmgxVjBoMXYyaDEuNVYwaDF2MkgxMFYwaDF2MmgxYTIgMiAwIDAgMSAyIDJ2MWgydjFoLTJ2MS41aDJ2MWgtMlYxMGgydjFoLTJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJyZWN0XCIsIHtcbiAgICB3aWR0aDogNixcbiAgICBoZWlnaHQ6IDYsXG4gICAgeDogNSxcbiAgICB5OiA1LFxuICAgIHJ4OiAxXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29tcHV0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db25zb2xlID0gZnVuY3Rpb24gRXVpSWNvbkNvbnNvbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjE1NyAxMi4yMjQgNS43NjggOC4zMmEuNDA0LjQwNCAwIDAgMCAwLS42NGwtNC42MS0zLjkwNGEuNDA3LjQwNyAwIDAgMSAwLS42NDMuNjA4LjYwOCAwIDAgMSAuNzU5IDBsNC42MSAzLjkwNGMuNjMxLjUzNC42MyAxLjM5MyAwIDEuOTI2bC00LjYxIDMuOTA0YS42MDguNjA4IDAgMCAxLS43NiAwIC40MDcuNDA3IDAgMCAxIDAtLjY0M1pNOSAxMmg2djFIOXYtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnNvbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29udGFpbmVyID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRhaW5lcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0wIDIuNUEuNS41IDAgMCAxIC41IDJoMTVhLjUuNSAwIDAgMSAwIDFIMTV2MTBoLjVhLjUuNSAwIDAgMSAwIDFILjVhLjUuNSAwIDAgMSAwLTFIMVYzSC41YS41LjUgMCAwIDEtLjUtLjV6TTIgM2gxMnYxMEgyVjN6bTMgMmEuNS41IDAgMCAwLS41LjV2NWEuNS41IDAgMCAwIDEgMHYtNUEuNS41IDAgMCAwIDUgNXptNS41LjVhLjUuNSAwIDAgMSAxIDB2NWEuNS41IDAgMCAxLTEgMHYtNXpNOCA1YS41LjUgMCAwIDAtLjUuNXY1YS41LjUgMCAwIDAgMSAwdi01QS41LjUgMCAwIDAgOCA1elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRhaW5lcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db250aW51aXR5QWJvdmUgPSBmdW5jdGlvbiBFdWlJY29uQ29udGludWl0eUFib3ZlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS41IDNhLjUuNSAwIDAgMC0uNS41djlhLjUuNSAwIDAgMCAxIDB2LTlhLjUuNSAwIDAgMC0uNS0uNXptMyAwYS41LjUgMCAwIDAtLjUuNXY5YS41LjUgMCAwIDAgMSAwVjloNnYxLjVhLjUuNSAwIDAgMCAuODIuMzg0bDMtMi41YS41LjUgMCAwIDAgMC0uNzY4bC0zLTIuNUEuNS41IDAgMCAwIDExIDUuNVY3SDVWMy41YS41LjUgMCAwIDAtLjUtLjV6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250aW51aXR5QWJvdmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29udGludWl0eUFib3ZlQmVsb3cgPSBmdW5jdGlvbiBFdWlJY29uQ29udGludWl0eUFib3ZlQmVsb3coX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUgM2EuNS41IDAgMCAxIC41LjV2OWEuNS41IDAgMCAxLTEgMFY5SDR2MS41YS41LjUgMCAwIDEtLjgyLjM4NGwtMy0yLjVhLjUuNSAwIDAgMSAwLS43NjhsMy0yLjVBLjUuNSAwIDAgMSA0IDUuNVY3aDJWMy41YS41LjUgMCAwIDEgLjUtLjV6bTMgMGEuNS41IDAgMCAwLS41LjV2OWEuNS41IDAgMCAwIDEgMFY5aDJ2MS41YS41LjUgMCAwIDAgLjgyLjM4NGwzLTIuNWEuNS41IDAgMCAwIDAtLjc2OGwtMy0yLjVBLjUuNSAwIDAgMCAxMiA1LjVWN2gtMlYzLjVhLjUuNSAwIDAgMC0uNS0uNXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRpbnVpdHlBYm92ZUJlbG93OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNvbnRpbnVpdHlCZWxvdyA9IGZ1bmN0aW9uIEV1aUljb25Db250aW51aXR5QmVsb3coX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS41IDNhLjUuNSAwIDAgMSAuNS41djlhLjUuNSAwIDAgMS0xIDBWOUg1djEuNWEuNS41IDAgMCAxLS44Mi4zODRsLTMtMi41YS41LjUgMCAwIDEgMC0uNzY4bDMtMi41QS41LjUgMCAwIDEgNSA1LjVWN2g2VjMuNWEuNS41IDAgMCAxIC41LS41em0zIDBhLjUuNSAwIDAgMSAuNS41djlhLjUuNSAwIDAgMS0xIDB2LTlhLjUuNSAwIDAgMSAuNS0uNXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRpbnVpdHlCZWxvdzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db250aW51aXR5V2l0aGluID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlXaXRoaW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAzYS41LjUgMCAwIDAtLjUuNXY5YS41LjUgMCAwIDAgMSAwdi05QS41LjUgMCAwIDAgLjUgM3ptMTQuNS41YS41LjUgMCAwIDEgMSAwdjlhLjUuNSAwIDAgMS0xIDB2LTl6bS00LjcxMiAxLjU0N2EuNS41IDAgMCAxIC41MzIuMDY5bDMgMi41YS41LjUgMCAwIDEgMCAuNzY4bC0zIDIuNUEuNS41IDAgMCAxIDEwIDEwLjVWOUg2djEuNWEuNS41IDAgMCAxLS44Mi4zODRsLTMtMi41YS41LjUgMCAwIDEgMC0uNzY4bDMtMi41QS41LjUgMCAwIDEgNiA1LjVWN2g0VjUuNWEuNS41IDAgMCAxIC4yODgtLjQ1M3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRpbnVpdHlXaXRoaW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRyb2xzSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjA1IDEwYTIuNSAyLjUgMCAwIDEgNC45IDBoMS41NWEuNS41IDAgMSAxIDAgMWgtMS41NWEyLjUgMi41IDAgMCAxLTQuOSAwSDEuNWEuNS41IDAgMSAxIDAtMWg2LjU1Wm0tLjEtNGEyLjUgMi41IDAgMCAxLTQuOSAwSDEuNWEuNS41IDAgMCAxIDAtMWgxLjU1YTIuNSAyLjUgMCAwIDEgNC45IDBoNi41NWEuNS41IDAgMSAxIDAgMUg3Ljk1Wk00IDUuNWExLjUgMS41IDAgMSAwIDMgMCAxLjUgMS41IDAgMCAwLTMgMFptOCA1YTEuNSAxLjUgMCAxIDAtMyAwIDEuNSAxLjUgMCAwIDAgMyAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNvbnRyb2xzVmVydGljYWwgPSBmdW5jdGlvbiBFdWlJY29uQ29udHJvbHNWZXJ0aWNhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMCA3Ljk1YTIuNSAyLjUgMCAwIDEgMC00LjlWMS41YS41LjUgMCAxIDEgMSAwdjEuNTVhMi41IDIuNSAwIDAgMSAwIDQuOXY2LjU1YS41LjUgMCAxIDEtMSAwVjcuOTVabS00IC4xYTIuNSAyLjUgMCAwIDEgMCA0Ljl2MS41NWEuNS41IDAgMSAxLTEgMHYtMS41NWEyLjUgMi41IDAgMCAxIDAtNC45VjEuNWEuNS41IDAgMCAxIDEgMHY2LjU1Wk01LjUgMTJhMS41IDEuNSAwIDEgMCAwLTMgMS41IDEuNSAwIDAgMCAwIDNabTUtOGExLjUgMS41IDAgMSAwIDAgMyAxLjUgMS41IDAgMCAwIDAtM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRyb2xzVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29weSA9IGZ1bmN0aW9uIEV1aUljb25Db3B5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuNCAwYy4yMzUgMCAuNDYuMDk5LjYyMi4yNzNsMi43NDMgM2MuMTUxLjE2Mi4yMzUuMzc4LjIzNS42MDJ2OS4yNWEuODY3Ljg2NyAwIDAgMS0uODU3Ljg3NUgzLjg1N0EuODY3Ljg2NyAwIDAgMSAzIDEzLjEyNVYuODc1QzMgLjM5MiAzLjM4NCAwIDMuODU3IDBIMTEuNFpNMTQgNGgtMi42YS40LjQgMCAwIDEtLjQtLjRWMUg0djEyaDEwVjRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDFIMmExIDEgMCAwIDAtMSAxdjEzYTEgMSAwIDAgMCAxIDFoMTBhMSAxIDAgMCAwIDEtMXYtMWgtMXYxSDJWMmgxVjFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db3B5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNvcHlDbGlwYm9hcmQgPSBmdW5jdGlvbiBFdWlJY29uQ29weUNsaXBib2FyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMi43MjlWMmExIDEgMCAwIDEgMS0xaDJ2MUgzdjEyaDR2MUgzYTEgMSAwIDAgMS0xLTFWMi43Mjl6TTE0IDVWMmExIDEgMCAwIDAtMS0xaC0ydjFoMnYzaDF6bS0xIDFoMnY5SDhWNmg1VjVIOGExIDEgMCAwIDAtMSAxdjlhMSAxIDAgMCAwIDEgMWg3YTEgMSAwIDAgMCAxLTFWNmExIDEgMCAwIDAtMS0xaC0ydjF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDEwaDVWOUg5djF6bTAtMmg1VjdIOXYxem0wIDRoNXYtMUg5djF6bTAgMmg1di0xSDl2MXptMi0xMlYxYTEgMSAwIDAgMC0xLTFINmExIDEgMCAwIDAtMSAxdjFoMVYxaDR2MWgxek01IDNoNlYySDV2MXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvcHlDbGlwYm9hcmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ3Jvc3MgPSBmdW5jdGlvbiBFdWlJY29uQ3Jvc3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjI5MyA4IDMuMTQ2IDMuODU0YS41LjUgMCAxIDEgLjcwOC0uNzA4TDggNy4yOTNsNC4xNDYtNC4xNDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDQuMTQ3IDQuMTQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtNC4xNDYgNC4xNDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNyb3NzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNyb3NzSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uQ3Jvc3NJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignY3Jvc3NJbkNpcmNsZScpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGNsaXBQYXRoOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSwgXCIpXCIpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm04Ljc1NSA4IDIuNjQgMi42NDFhLjUzNC41MzQgMCAxIDEtLjc1NC43NTVMOCA4Ljc1NWwtMi42NDEgMi42NGEuNTM0LjUzNCAwIDEgMS0uNzU1LS43NTRMNy4yNDUgOGwtMi42NC0yLjY0MWEuNTM0LjUzNCAwIDEgMSAuNzU0LS43NTVMOCA3LjI0NWwyLjY0MS0yLjY0YS41MzQuNTM0IDAgMSAxIC43NTUuNzU0TDguNzU1IDhabTQuOTA0LTUuNjZjMy4xMjEgMy4xMjEgMy4xMjEgOC4xOTkgMCAxMS4zMi0zLjEyIDMuMTItOC4xOTggMy4xMi0xMS4zMTggMEMtLjc4IDEwLjUzOC0uNzggNS40NiAyLjM0IDIuMzRjMy4xMi0zLjEyIDguMTk4LTMuMTIgMTEuMzE5IDBabS0uNjY1LjY2NmE3LjA2MiA3LjA2MiAwIDEgMC05Ljk4OCA5Ljk4OCA3LjA2MiA3LjA2MiAwIDAgMCA5Ljk4OC05Ljk4OFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwiY2xpcFBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJylcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI2ZmZlwiLFxuICAgIGQ6IFwiTTAgMGgxNnYxNkgwelwiXG4gIH0pKSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Dcm9zc0luQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNyb3NzSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uQ3Jvc3NJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNiA4QTggOCAwIDEgMSAwIDhhOCA4IDAgMCAxIDE2IDBabS0xIDBBNyA3IDAgMSAxIDEgOGE3IDcgMCAwIDEgMTQgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNyb3NzSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ3Jvc3NoYWlycyA9IGZ1bmN0aW9uIEV1aUljb25Dcm9zc2hhaXJzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS44MjIgMS44NzRhLjUuNSAwIDEgMSAuMzM1Ljk0MiA1LjUxNyA1LjUxNyAwIDAgMC0zLjM0IDMuMzQxLjUuNSAwIDEgMS0uOTQzLS4zMzUgNi41MTcgNi41MTcgMCAwIDEgMy45NDgtMy45NDhaTTEuODY0IDEwLjE1YS41LjUgMCAxIDEgLjk0NC0uMzMgNS41MTcgNS41MTcgMCAwIDAgMy4zNjUgMy4zNy41LjUgMCAwIDEtLjMzMy45NDMgNi41MTcgNi41MTcgMCAwIDEtMy45NzYtMy45ODNabTguMzAyIDMuOTgxYS41LjUgMCAxIDEtLjMzMy0uOTQzIDUuNTE3IDUuNTE3IDAgMCAwIDMuMzQ3LTMuMzMyLjUuNSAwIDEgMSAuOTQxLjMzNyA2LjUxNyA2LjUxNyAwIDAgMS0zLjk1NSAzLjkzOFptMy45NjgtOC4yODVhLjUuNSAwIDEgMS0uOTQzLjMzMUE1LjUxNyA1LjUxNyAwIDAgMCA5Ljg1IDIuODJhLjUuNSAwIDAgMSAuMzM3LS45NDIgNi41MTcgNi41MTcgMCAwIDEgMy45NDYgMy45NjhaTTguNSAzLjVhLjUuNSAwIDAgMS0xIDBWLjk5N2EuNS41IDAgMCAxIDEgMFYzLjVabS00Ljk5NyA0YS41LjUgMCAwIDEgMCAxSDFhLjUuNSAwIDAgMSAwLTFoMi41MDNaTTcuNSAxMi40OTdhLjUuNSAwIDAgMSAxIDBWMTVhLjUuNSAwIDEgMS0xIDB2LTIuNTAzWk0xMi40OTcgOC41YS41LjUgMCAwIDEgMC0xSDE1YS41LjUgMCAxIDEgMCAxaC0yLjUwM1pNOCA5YTEgMSAwIDEgMSAwLTIgMSAxIDAgMCAxIDAgMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNyb3NzaGFpcnM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ3VycmVuY3kgPSBmdW5jdGlvbiBFdWlJY29uQ3VycmVuY3koX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xMi45NSAxLjYzNiAxLjQxNCAxLjQxNC0yLjE5MiAyLjE5M0MxMi42OTUgNi4wMzMgMTMgNi45OCAxMyA4YzAgMS4wMi0uMzA1IDEuOTY3LS44MjggMi43NTdsMi4xOTIgMi4xOTMtMS40MTQgMS40MTQtMi4xOTMtMi4xOTJBNC45NzcgNC45NzcgMCAwIDEgOCAxM2E0Ljk3NyA0Ljk3NyAwIDAgMS0yLjc1Ny0uODI4TDMuMDUgMTQuMzY0IDEuNjM2IDEyLjk1bDIuMTkyLTIuMTkzQTQuOTc3IDQuOTc3IDAgMCAxIDMgOGMwLTEuMDIuMzA1LTEuOTY3LjgyOC0yLjc1N0wxLjYzNiAzLjA1IDMuMDUgMS42MzZsMi4xOTMgMi4xOTJBNC45NzcgNC45NzcgMCAwIDEgOCAzYzEuMDIgMCAxLjk2Ny4zMDUgMi43NTcuODI4bDIuMTkzLTIuMTkyWk04IDVhMi45OSAyLjk5IDAgMCAwLTEuMTY4LjIzNmwtLjEyNi4wNTctLjIxOC4xMTYtLjEzMi4wODEtLjA3My4wNWEzLjAxMyAzLjAxMyAwIDAgMC0uMjQxLjE4N2wtLjExMy4xMDMtLjE0Ny4xNWMtLjA1LjA1NC0uMDk3LjExLS4xNDIuMTY4bC0uMS4xMzUtLjA1LjA3My0uMDYuMDk3Yy0uMDUuMDgyLS4wOTYuMTY2LS4xMzcuMjUzbC0uMDU3LjEyNkEyLjk5IDIuOTkgMCAwIDAgNSA4YzAgLjQxNC4wODQuODA5LjIzNiAxLjE2OGwuMDU3LjEyNi4xMTYuMjE4LjA4MS4xMzJjLjA1OS4wODkuMTIxLjE3NS4xODkuMjU3bC4xNS4xNy4xNTEuMTQ3Yy4wNTYuMDUxLjExNC4xLjE3NC4xNDdsLjE0Mi4xMDVjLjA1NC4wMzcuMTA5LjA3Mi4xNjUuMTA2bC0uMTI0LS4wNzkuMDkyLjA2LjA5NC4wNTVjLjQzNi4yNDcuOTQuMzg4IDEuNDc3LjM4OGEyLjk5IDIuOTkgMCAwIDAgMS4xNjgtLjIzNmwuMTI1LS4wNTYuMjEzLS4xMTMuMTUxLS4wOTQuMDUtLjAzNGEzLjAxMSAzLjAxMSAwIDAgMCAuMzIzLS4yNThsLS4xNS4xMjkuMDktLjA3NS4xNjgtLjE1OS4wOC0uMDg0Yy4wNTEtLjA1Ni4xLS4xMTQuMTQ3LS4xNzRsLjEwNS0uMTQyLjEwNi0uMTY1Yy4wNDctLjA4LjA5MS0uMTYxLjEzMS0uMjQ1bC4wNTctLjEyNkEyLjk5IDIuOTkgMCAwIDAgMTEgOGEyLjk5IDIuOTkgMCAwIDAtLjIzNi0xLjE2OGwtLjA1Ni0uMTI1LS4xMTItLjIxMS0uMDk2LS4xNTUtLjAzMy0uMDQ5YTMuMDExIDMuMDExIDAgMCAwLS4yNTgtLjMyMmwuMTI5LjE1LS4wNzUtLjA5LS4xNTktLjE2OC0uMDg0LS4wOGEzLjAxNSAzLjAxNSAwIDAgMC0uMTc0LS4xNDdsLS4xODMtLjEzMi0uMTI0LS4wNzlhMi45OTMgMi45OTMgMCAwIDAtLjI0NS0uMTMxbC0uMTI2LS4wNTdBMi45OSAyLjk5IDAgMCAwIDggNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkN1cnJlbmN5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkN1dCA9IGZ1bmN0aW9uIEV1aUljb25DdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJtNS4xNDIgMTEuMDc0LTEuOTEyLjU0OGEyLjUzMiAyLjUzMiAwIDEgMS0xLjM5NS00Ljg2N2wxLjk0Ny0uNTU5YTIuNTMyIDIuNTMyIDAgMCAxIDIuNTU1LjcxM2wxLjUzLTUuMzM1Yy4xMzktLjQ4NS42LS44OTcgMS4xNTktMS4yMzguMjctLjE2NC41Mi0uMjc4Ljc3OS0uMzIuODE0LS4xMzIgMS41MDMuNTU4IDEuMjYxIDEuNDIyTDkuNTc0IDYuNjQzbDQuOTg4LTEuNDNjLjg2NC0uMjQyIDEuNTU0LjQ0NyAxLjQyMiAxLjI2LS4wNDIuMjYtLjE1Ni41MS0uMzIuNzgtLjM0MS41Ni0uNzUzIDEuMDItMS4yMzggMS4xNkw5LjUyMyA5LjgxN2EyLjUzIDIuNTMgMCAwIDEgLjU2IDIuNGwtLjU2IDEuOTQ3YTIuNTMyIDIuNTMyIDAgMSAxLTQuODY3LTEuMzk1bC40ODYtMS42OTZabS4zMy0xLjE0OC40OC0xLjY3M2ExLjUyIDEuNTIgMCAwIDAtMS44OS0xLjA4M2wtMS45NDguNTU4YTEuNTIgMS41MiAwIDAgMCAuODM3IDIuOTJsMi41Mi0uNzIyWm0zLjc3My0yLjEzNS0uMzMgMS4xNDggNS4yMzItMS41Yy4zMjQtLjA5MyAxLjE4Mi0xLjM5LjY5NC0xLjI1M0w5LjI0NSA3Ljc5MVpNNS42MyAxMy4wNDlhMS41MiAxLjUyIDAgMCAwIDIuOTIuODM3bC41NTktMS45NDdhMS41MiAxLjUyIDAgMCAwLTEuNTUzLTEuOTM1bDIuNTM3LTguODQ1Yy4xMzYtLjQ4OC0xLjE2LjM3LTEuMjUzLjY5NEw1LjYzIDEzLjA1Wm0uOTczLjI3OS41NTktMS45NDdhLjUwNi41MDYgMCAxIDEgLjk3My4yNzlsLS41NTggMS45NDdhLjUwNi41MDYgMCAxIDEtLjk3NC0uMjhabS0zLjkzLTMuNjUzYS41MDYuNTA2IDAgMSAxLS4yOC0uOTczbDEuOTQ3LS41NThhLjUwNi41MDYgMCAwIDEgLjI4Ljk3M2wtMS45NDguNTU4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3V0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRhdGFiYXNlID0gZnVuY3Rpb24gRXVpSWNvbkRhdGFiYXNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAxMmgxMnYtMS45N2MtMS4yMjUuNTgyLTMuNDU0Ljk3LTYgLjk3cy00Ljc3NS0uMzg4LTYtLjk3VjEyWm0tMSAwVjNjMC0xLjEwNSAzLjEzNC0yIDctMnM3IC44OTUgNyAydjljMCAxLjEwNS0zLjEzNCAyLTcgMnMtNy0uODk1LTctMlptMS0zaDEyVjcuMDNjLTEuMjI1LjU4Mi0zLjQ1NC45Ny02IC45N3MtNC43NzUtLjM4OC02LS45N1Y5Wm0wLTQuOTdWNmgxMlY0LjAzYy0xLjIyNS41ODItMy40NTQuOTctNiAuOTdzLTQuNzc1LS4zODgtNi0uOTdabTEwLjY3NS0xLjQ4M0MxMS40NjcgMi4yMDIgOS43OTUgMiA4IDJjLTEuNzk0IDAtMy40NjcuMjAyLTQuNjc1LjU0Ny0uNDkyLjE0LS44OC4yOTgtMS4xMzYuNDUzLjI1Ni4xNTUuNjQ0LjMxMiAxLjEzNi40NTNDNC41MzMgMy43OTggNi4yMDUgNCA4IDRjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNC44OC0uMjk4IDEuMTM2LS40NTMtLjI1Ni0uMTU1LS42NDQtLjMxMi0xLjEzNi0uNDUzWk0yIDZjLjI1Ny4xNTUuODMzLjMxMiAxLjMyNS40NTNDNC41MzMgNi43OTggNi4yMDUgNyA4IDdjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNCAxLjA3LS4yOTggMS4zMjctLjQ1M0gyWm0wIDNjLjI1Ny4xNTUuODMzLjMxMiAxLjMyNS40NTNDNC41MzMgOS43OTggNi4yMDUgMTAgOCAxMGMxLjc5NCAwIDMuNDY3LS4yMDIgNC42NzUtLjU0Ny40OTItLjE0IDEuMDctLjI5OCAxLjMyNy0uNDUzSDJabTAgM2MuMjU3LjE1NS44MzMuMzEyIDEuMzI1LjQ1M0M0LjUzMyAxMi43OTggNi4yMDUgMTMgOCAxM2MxLjc5NCAwIDMuNDY3LS4yMDIgNC42NzUtLjU0Ny40OTItLjE0IDEuMDctLjI5OCAxLjMyNy0uNDUzSDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25EYXRhYmFzZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25EZXNrdG9wID0gZnVuY3Rpb24gRXVpSWNvbkRlc2t0b3AoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMiAyYTEgMSAwIDAgMC0xIDF2N2ExIDEgMCAwIDAgMSAxaDRsLTEgM0gzLjVhLjUuNSAwIDAgMCAwIDFoOWEuNS41IDAgMCAwIDAtMUgxMWwtMS0zaDRhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFIMnptMCA4VjNoMTJ2N0gyem01IDFoMmwxIDNINmwxLTN6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41IDZhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMWgtMXptMyAwYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFoLTF6bTIuNS41YS41LjUgMCAwIDEgLjUtLjVoMWEuNS41IDAgMCAxIDAgMWgtMWEuNS41IDAgMCAxLS41LS41elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRGVza3RvcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25EaWZmID0gZnVuY3Rpb24gRXVpSWNvbkRpZmYoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDEuNWEuNS41IDAgMCAwLTEgMFY0SDEuNWEuNS41IDAgMCAwIDAgMUg0djIuNWEuNS41IDAgMCAwIDEgMFY1aDIuNWEuNS41IDAgMCAwIDAtMUg1VjEuNVptMyAxMGEuNS41IDAgMCAxIC41LS41aDZhLjUuNSAwIDAgMSAwIDFoLTZhLjUuNSAwIDAgMS0uNS0uNVptNC44NTQtNy42NDZhLjUuNSAwIDAgMC0uNzA4LS43MDhsLTkgOWEuNS41IDAgMCAwIC43MDguNzA4bDktOVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRpZmY7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRGlzY3VzcyA9IGZ1bmN0aW9uIEV1aUljb25EaXNjdXNzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC45NjcgMTAuODY0Yy4zMzIuNzg3IDEuMDg1IDEuMzM3IDEuOTYyIDEuMzM3aDMuNjczbDIuNzU1IDIuOHYtMi44YzEuMTg0IDAgMi4xNDMtMS4wMDMgMi4xNDMtMi4yNFY2LjYwNGMwLTEuMjM3LS45Ni0yLjI0LTIuMTQzLTIuMjRoLTEuMDcxdjQuMzM0YzAgMS4xOTctLjg5NiAyLjE2Ny0yIDIuMTY3aC01LjMyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC45MDUgOC43MThoNC4xNjZjLjU5MiAwIDEuMDcyLS41MDIgMS4wNzItMS4xMlY0LjI0YzAtLjYxOC0uNDgtMS4xMi0xLjA3Mi0xLjEySDIuNjQzYy0uNTkyIDAtMS4wNzIuNTAyLTEuMDcyIDEuMTJWNy42YzAgLjYxNy40OCAxLjExOSAxLjA3MiAxLjExOWgxLjA3MXYxLjQ1MmwxLjE5MS0xLjQ1MlptLjQ5MyAxLjEyLTIuNzU1IDIuNzk4VjkuODM3QzEuNDU5IDkuODM3LjUgOC44MzUuNSA3LjU5OFY0LjI0Qy41IDMuMDAzIDEuNDYgMiAyLjY0MyAySDkuMDdjMS4xODQgMCAyLjE0MyAxLjAwMyAyLjE0MyAyLjI0djMuMzU4YzAgMS4yMzctLjk2IDIuMjQtMi4xNDMgMi4yNEg1LjM5OFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRpc2N1c3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRG9jdW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uRG9jdW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC44IDBjLjI3NCAwIC41MzcuMTEzLjcyNi4zMTJsMy4yIDMuNDI4Yy4xNzYuMTg2LjI3NC40MzMuMjc0LjY4OVYxNWExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTFoOC44Wk0xNCA1aC0zLjVhLjUuNSAwIDAgMS0uNS0uNVYxSDJ2MTRoMTJWNVptLTguNSA3YS41LjUgMCAxIDEgMC0xaDVhLjUuNSAwIDEgMSAwIDFoLTVabTAtM2EuNS41IDAgMCAxIDAtMWg1YS41LjUgMCAxIDEgMCAxaC01WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG9jdW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRG9jdW1lbnRFZGl0ID0gZnVuY3Rpb24gRXVpSWNvbkRvY3VtZW50RWRpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTguNTA1IDguOTk1IDYuNDUzLTYuNDQtMS41LTEuNS02LjQ1MyA2LjQ0IDEuNSAxLjVaTTEyLjk2OC4xOWMuMjU4LS4yMzguNjU3LS4yNi45MSAwbDEuOTI4IDEuOTI5YS42NDIuNjQyIDAgMCAxIDAgLjkwOWwtNi43OCA2Ljc4NEEuNjQxLjY0MSAwIDAgMSA4LjU3IDEwSDYuNjQzQS42NDMuNjQzIDAgMCAxIDYgOS4zNTdWNy40M2MwLS4xNy4wNjctLjMzNS4xODgtLjQ1NUwxMi45NjguMTlaTTQuNSAxM2EuNS41IDAgMSAxIDAtMWg3YS41LjUgMCAxIDEgMCAxaC03Wm00LTEyYS41LjUgMCAwIDEgMCAxSDJ2MTNoMTJWNy41YS41LjUgMCAxIDEgMSAwVjE1YTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjJhMSAxIDAgMCAxIDEtMWg2LjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb2N1bWVudEVkaXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRG9jdW1lbnRhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Eb2N1bWVudGF0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAzLjVhLjUuNSAwIDEgMS0xIDAgLjUuNSAwIDAgMSAxIDB6TTkgNXYzaDF2MUg4VjZIN1Y1aDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy44NTUgMTQuMTQ3YTEuMzQgMS4zNCAwIDAgMS0uMTU4LS4yNDZBMS45OTggMS45OTggMCAwIDEgMTMuNSAxM2MwLS40MTQuMTAzLS43MTMuMTk3LS45MDFhMS4zNCAxLjM0IDAgMCAxIC4xNTgtLjI0NmwuMDAzLS4wMDVBLjUuNSAwIDAgMCAxNCAxMS41Vi41YS41LjUgMCAwIDAtLjUtLjVIMy40NjFsLS4wODMuMDA1YTIuOTU3IDIuOTU3IDAgMCAwLTEuMTAyLjI5OCAyLjI1NyAyLjI1NyAwIDAgMC0uODguNzYzQzEuMTQ4IDEuNDQgMSAxLjkxMyAxIDIuNVYxM2MwIC40NjMuMTE3Ljg0My4zMTggMS4xNDUuMi4yOTguNDYyLjQ5MS43MDguNjE1YTIuMzQ0IDIuMzQ0IDAgMCAwIC45NC4yNEgzdi0xYy0uMDA1IDAtLjAxNSAwLS4wMjktLjAwMmExLjM0NCAxLjM0NCAwIDAgMS0uNDk4LS4xMzMuODE3LjgxNyAwIDAgMS0uMzIzLS4yNzVDMi4wNyAxMy40NyAyIDEzLjI4NyAyIDEzcy4wNy0uNDcuMTUtLjU5YS44MTcuODE3IDAgMCAxIC4zMjQtLjI3NUExLjM0NCAxLjM0NCAwIDAgMSAzIDEyaDkuNjU4Yy0uMDkxLjI3LS4xNTguNjA1LS4xNTggMXMuMDY3LjczLjE1OCAxSDh2MWg1LjVhLjUuNSAwIDAgMCAuMzU5LS44NDhsLS4wMDQtLjAwNXptLS4wMDEgMCAuMDAyLjAwMi0uMDAyLS4wMDJ6TTIuNzI0IDEuMTk3Yy4wOTItLjA0Ni4xODYtLjA4Mi4yNzYtLjExQzMgMi45MTggMy4wMDEgMTEgMi45OTkgMTFoLS4wMzNhMS45NzcgMS45NzcgMCAwIDAtLjI4My4wMyAyLjM0NCAyLjM0NCAwIDAgMC0uNjU3LjIxTDIgMTEuMjU0VjIuNWMwLS40MTMuMTAyLS42ODkuMjI5LS44NzkuMTI4LS4xOTMuMzA0LS4zMjguNDk1LS40MjR6TTQgMTFWMWg5djEwSDR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDEzSDR2Mi41YS41LjUgMCAwIDAgLjg1NC4zNTRsLjY0Ni0uNjQ3LjY0Ni42NDdBLjUuNSAwIDAgMCA3IDE1LjVWMTN6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb2N1bWVudGF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRvY3VtZW50cyA9IGZ1bmN0aW9uIEV1aUljb25Eb2N1bWVudHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjggMGMuMjc0IDAgLjUzNy4xMTMuNzI2LjMxMmwzLjIgMy40MjhjLjE3Ni4xODYuMjc0LjQzMy4yNzQuNjg5VjEzYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjFhMSAxIDAgMCAxIDEtMWg2LjhaTTEyIDVIOC41YS41LjUgMCAwIDEtLjUtLjVWMUgydjEyaDEwVjVabS03LjUgNmEuNS41IDAgMSAxIDAtMWg1YS41LjUgMCAxIDEgMCAxaC01Wm0wLTNhLjUuNSAwIDAgMSAwLTFoNWEuNS41IDAgMSAxIDAgMWgtNVptMSA4YS41LjUgMCAxIDEgMC0xSDE0VjYuNWEuNS41IDAgMSAxIDEgMFYxNWExIDEgMCAwIDEtMSAxSDUuNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Eb3QgPSBmdW5jdGlvbiBFdWlJY29uRG90KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiY2lyY2xlXCIsIHtcbiAgICBjeDogOCxcbiAgICBjeTogOCxcbiAgICByOiA0XG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG90OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRvdEluQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvbkRvdEluQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggLjVjNC4xMzYgMCA3LjUgMy4zNjQgNy41IDcuNXMtMy4zNjQgNy41LTcuNSA3LjVTLjUgMTIuMTM2LjUgOCAzLjg2NC41IDggLjVabTAgLjg4MmE2LjYxOCA2LjYxOCAwIDEgMCAwIDEzLjIzNkE2LjYxOCA2LjYxOCAwIDAgMCA4IDEuMzgyWlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgOGExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb3RJbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Eb3VibGVBcnJvd0xlZnQgPSBmdW5jdGlvbiBFdWlJY29uRG91YmxlQXJyb3dMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguMTM1IDE0LjA0M2EuNzUuNzUgMCAwIDAgLjAyNS0xLjA2bC00LjU5MS00LjgxYS4yNS4yNSAwIDAgMSAwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDEgMC0xLjA4NC0xLjAzNWwtNC41OTEgNC44MWExLjc1IDEuNzUgMCAwIDAgMCAyLjQxNmw0LjU5IDQuODFjLjI4Ny4zLjc2MS4zMSAxLjA2MS4wMjRaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0LjEzNSAxNC4wNDNhLjc1Ljc1IDAgMCAwIC4wMjUtMS4wNmwtNC41OTEtNC44MWEuMjUuMjUgMCAwIDEgMC0uMzQ2bDQuNTktNC44MWEuNzUuNzUgMCAxIDAtMS4wODQtMS4wMzVsLTQuNTkxIDQuODFhMS43NSAxLjc1IDAgMCAwIDAgMi40MTZsNC41OSA0LjgxYy4yODcuMy43NjEuMzEgMS4wNjEuMDI0WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvdWJsZUFycm93TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Eb3VibGVBcnJvd1JpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkRvdWJsZUFycm93UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi4yMzIgMTQuMDQzYS43NS43NSAwIDAgMS0uMDI1LTEuMDZsNC41OTEtNC44MWEuMjUuMjUgMCAwIDAgMC0uMzQ2bC00LjU5LTQuODFhLjc1Ljc1IDAgMCAxIDEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwIDEgMCAyLjQxNmwtNC41OSA0LjgxYS43NS43NSAwIDAgMS0xLjA2LjAyNFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC4yMzIgMTQuMDQzYS43NS43NSAwIDAgMS0uMDI1LTEuMDZsNC41OTEtNC44MWEuMjUuMjUgMCAwIDAgMC0uMzQ2bC00LjU5LTQuODFhLjc1Ljc1IDAgMCAxIDEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwIDEgMCAyLjQxNmwtNC41OSA0LjgxYS43NS43NSAwIDAgMS0xLjA2LjAyNFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb3VibGVBcnJvd1JpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRvd25sb2FkID0gZnVuY3Rpb24gRXVpSWNvbkRvd25sb2FkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOSA5LjExNCAxLjg1LTEuOTQzYS41Mi41MiAwIDAgMSAuNzcgMGMuMjE0LjIyOC4yMTQuNiAwIC44MjlsLTEuOTUgMi4wNWExLjU1MiAxLjU1MiAwIDAgMS0yLjMxIDBMNS40MSA4YS42MTcuNjE3IDAgMCAxIDAtLjgyOS41Mi41MiAwIDAgMSAuNzcgMEw4IDkuMDgyVi41NTZDOCAuMjQ5IDguMjI0IDAgOC41IDBzLjUuMjQ5LjUuNTU2djguNTU4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMTMuMDA2VjEwaC0xdjMuMDA2YS45OTUuOTk1IDAgMCAxLS45OTQuOTk0SDMuMDFhLjk5NS45OTUgMCAwIDEtLjk5NC0uOTk0VjEwaC0xdjMuMDA2YzAgMS4xLjg5MiAxLjk5NCAxLjk5NCAxLjk5NGgxMC45OTZjMS4xIDAgMS45OTQtLjg5MyAxLjk5NC0xLjk5NHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvd25sb2FkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAyaDJhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMlpNMS41IDFhLjUuNSAwIDAgMSAuNS41djEzYS41LjUgMCAxIDEtMSAwdi0xM2EuNS41IDAgMCAxIC41LS41Wm0xMyAwYS41LjUgMCAwIDEgLjUuNXYxM2EuNS41IDAgMSAxLTEgMHYtMTNhLjUuNSAwIDAgMSAuNS0uNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JEaXN0cmlidXRlVmVydGljYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDVoOGEyIDIgMCAwIDEgMiAydjJhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDEgMi0yWk0xLjUgMWgxM2EuNS41IDAgMSAxIDAgMWgtMTNhLjUuNSAwIDAgMSAwLTFabTAgMTNoMTNhLjUuNSAwIDEgMSAwIDFoLTEzYS41LjUgMCAxIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25Cb3R0b20oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDFoMmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWM2EyIDIgMCAwIDEgMi0yWk0xLjUgMTRoMTNhLjUuNSAwIDEgMSAwIDFoLTEzYS41LjUgMCAxIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduQm90dG9tOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkNlbnRlciA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25DZW50ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDRIN1YxLjVhLjUuNSAwIDAgMSAxIDBWNFptMCA4djIuNWEuNS41IDAgMSAxLTEgMFYxMmgxWk0zIDVoOWEyIDIgMCAwIDEgMiAydjJhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDEgMi0yWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkxlZnQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRlbUFsaWduTGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgNWg4YTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY3YTIgMiAwIDAgMSAyLTJaTTEuNSAxYS41LjUgMCAwIDEgLjUuNXYxM2EuNS41IDAgMSAxLTEgMHYtMTNhLjUuNSAwIDAgMSAuNS0uNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbk1pZGRsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgN3YxSDEuNWEuNS41IDAgMCAxIDAtMUg0Wm04IDBoMi41YS41LjUgMCAxIDEgMCAxSDEyVjdaTTcgMWgyYTIgMiAwIDAgMSAyIDJ2OWEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlYzYTIgMiAwIDAgMSAyLTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25NaWRkbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRlbUFsaWduUmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDVoOGEyIDIgMCAwIDEgMiAydjJhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDEgMi0yWm0xMS41LTRhLjUuNSAwIDAgMSAuNS41djEzYS41LjUgMCAxIDEtMSAwdi0xM2EuNS41IDAgMCAxIC41LS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduUmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduVG9wID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgM2gyYTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJaTTEuNSAxaDEzYS41LjUgMCAxIDEgMCAxaC0xM2EuNS41IDAgMCAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiA4aDVhMSAxIDAgMCAxIDEgMXY1SDNhMSAxIDAgMCAxLTEtMVY4Wm0xLTdoMTBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlYzYTIgMiAwIDAgMSAyLTJabTAgMWExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDAgMCAxIDFoMTBhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFIM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDhoNXY1YTEgMSAwIDAgMS0xIDFIOFY5YTEgMSAwIDAgMSAxLTFaTTMgMWgxMGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJIM2EyIDIgMCAwIDEtMi0yVjNhMiAyIDAgMCAxIDItMlptMCAxYTEgMSAwIDAgMC0xIDF2MTBhMSAxIDAgMCAwIDEgMWgxMGExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMUgzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAyaDV2NWExIDEgMCAwIDEtMSAxSDJWM2ExIDEgMCAwIDEgMS0xWm0wLTFoMTBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlYzYTIgMiAwIDAgMSAyLTJabTAgMWExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDAgMCAxIDFoMTBhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFIM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JQb3NpdGlvblRvcFJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wUmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDJoNWExIDEgMCAwIDEgMSAxdjVIOWExIDEgMCAwIDEtMS0xVjJaTTMgMWgxMGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJIM2EyIDIgMCAwIDEtMi0yVjNhMiAyIDAgMCAxIDItMlptMCAxYTEgMSAwIDAgMC0xIDF2MTBhMSAxIDAgMCAwIDEgMWgxMGExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMUgzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JBbGlnbkNlbnRlciA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JBbGlnbkNlbnRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgNFYzaDZ2MUg1Wk0zIDdWNmgxMHYxSDNabTIgM1Y5aDZ2MUg1Wm0tMiAzdi0xaDEwdjFIM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckFsaWduTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JBbGlnbkxlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDRWM2g2djFIMlptMCAzVjZoMTB2MUgyWm0wIDNWOWg2djFIMlptMCAzdi0xaDEwdjFIMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckFsaWduTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JBbGlnblJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckFsaWduUmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDRWM2g2djFIOFpNNCA3VjZoMTB2MUg0Wm00IDNWOWg2djFIOFptLTQgM3YtMWgxMHYxSDRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JBbGlnblJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckJvbGQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQm9sZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMTkzIDEzSDRWM2g0LjE1MWMxLjgxNiAwIDIuOTg3Ljk3NyAyLjk4NyAyLjQ5NSAwIDEuMDc0LS43OTcgMi4wMS0xLjgyMyAyLjE3NnYuMDU1YzEuMzU5LjEzMiAyLjMwOCAxLjExIDIuMzA4IDIuNDMzIDAgMS43Ni0xLjI5NiAyLjg0MS0zLjQzIDIuODQxWk01Ljc4OCA0LjM5M3YyLjgyaDEuNjM1YzEuMjQ4IDAgMS45NDgtLjUyNiAxLjk0OC0xLjQ1NSAwLS44NzMtLjYwMy0xLjM2NS0xLjY3LTEuMzY1SDUuNzg4Wm0wIDcuMjE0aDEuOTk2YzEuMzE2IDAgMi4wMTYtLjU0NyAyLjAxNi0xLjU3MyAwLTEuMDE5LS43Mi0xLjU1Mi0yLjA5Mi0xLjU1MmgtMS45MnYzLjEyNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckJvbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yQ2hlY2tsaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckNoZWNrbGlzdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNTk3IDNhLjQxMS40MTEgMCAwIDAtLjI5OS4xMzJsLTEuODUgMS45OTMtLjc1Ni0uN2EuNDEyLjQxMiAwIDAgMC0uMjgtLjEyNC40Mi40MiAwIDAgMC0uMjkyLjA5OC4zMzMuMzMzIDAgMCAwLS4xMi4yNTcuMzM1LjMzNSAwIDAgMCAuMTI3LjI1NGwxLjA2NC45ODJBLjQxOC40MTggMCAwIDAgMi40ODggNmEuNDExLjQxMSAwIDAgMCAuMjg4LS4xMjZMNC45MDQgMy41OGEuMzI4LjMyOCAwIDAgMCAuMDk1LS4yNS4zMzcuMzM3IDAgMCAwLS4xMjYtLjIzOEEuNDIxLjQyMSAwIDAgMCA0LjU5NyAzem0tLjI5OSA0LjEzMkEuNDExLjQxMSAwIDAgMSA0LjU5NyA3YS40MjEuNDIxIDAgMCAxIC4yNzYuMDkzYy4wNzYuMDYyLjEyLjE0Ny4xMjYuMjM4YS4zMjguMzI4IDAgMCAxLS4wOTUuMjVMMi43NzYgOS44NzRhLjQxMS40MTEgMCAwIDEtLjI4OC4xMjYuNDE4LjQxOCAwIDAgMS0uMjk3LS4xMDhMMS4xMjcgOC45MUEuMzM1LjMzNSAwIDAgMSAxIDguNjU2YS4zMzMuMzMzIDAgMCAxIC4xMi0uMjU3LjQyLjQyIDAgMCAxIC4yOTItLjA5OGMuMTA4LjAwNS4yMS4wNS4yOC4xMjNsLjc1Ny43MDEgMS44NDktMS45OTN6TTQuNTk3IDExYS40MTEuNDExIDAgMCAwLS4yOTkuMTMybC0xLjg1IDEuOTkzLS43NTYtLjdhLjQxMi40MTIgMCAwIDAtLjI4LS4xMjQuNDIxLjQyMSAwIDAgMC0uMjkyLjA5OC4zMzMuMzMzIDAgMCAwLS4xMi4yNTcuMzM1LjMzNSAwIDAgMCAuMTI3LjI1NGwxLjA2NC45ODJhLjQxOC40MTggMCAwIDAgLjI5Ny4xMDguNDExLjQxMSAwIDAgMCAuMjg4LS4xMjZsMi4xMjgtMi4yOTNhLjMyOC4zMjggMCAwIDAgLjA5NS0uMjUuMzM3LjMzNyAwIDAgMC0uMTI2LS4yMzguNDIxLjQyMSAwIDAgMC0uMjc2LS4wOTN6TTYuNSA0YS41LjUgMCAwIDAgMCAxaDdhLjUuNSAwIDAgMCAwLTFoLTd6TTYgOC41YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN2EuNS41IDAgMCAxLS41LS41em0uNSAzLjVhLjUuNSAwIDAgMCAwIDFoN2EuNS41IDAgMCAwIDAtMWgtN3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckNoZWNrbGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JDb2RlQmxvY2sgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQ29kZUJsb2NrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi40MTQgOC4wMzYgNC44OSAxMC41MWEuNS41IDAgMCAxLS43MDcuNzA4TDEuMzU0IDguMzg5YS41LjUgMCAwIDEgMC0uNzA3bDIuODI4LTIuODI4YS41LjUgMCAxIDEgLjcwNy43MDdMMi40MTQgOC4wMzZabTguNzY4IDIuNDc0IDIuNDc1LTIuNDc0LTIuNDc1LTIuNDc1YS41LjUgMCAwIDEgLjcwNy0uNzA3bDIuODI5IDIuODI4YS41LjUgMCAwIDEgMCAuNzA3bC0yLjgyOSAyLjgyOWEuNS41IDAgMSAxLS43MDctLjcwOFpNOC41NTkgMi41MDZhLjUuNSAwIDAgMSAuOTgxLjE5TDcuNDQxIDEzLjQ5NGEuNS41IDAgMCAxLS45ODEtLjE5TDguNTU5IDIuNTA2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yQ29kZUJsb2NrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckNvbW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQ29tbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMTExIDEwSDEyYTEgMSAwIDAgMCAxLTFWNWExIDEgMCAwIDAtMS0xSDRhMSAxIDAgMCAwLTEgMXY0YTEgMSAwIDAgMCAxIDFoMXYxLjI5N0w2LjExMSAxMFptLjQ2IDFMNCAxNHYtM2EyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg4YTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAySDYuNTcxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yQ29tbWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JIZWFkaW5nID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckhlYWRpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDExYTEgMSAwIDAgMSAwIDJINGExIDEgMCAwIDEgMC0yVjVhMSAxIDAgMSAxIDAtMmgyYTEgMSAwIDEgMSAwIDJ2Mmg0VjVhMSAxIDAgMSAxIDAtMmgyYTEgMSAwIDAgMSAwIDJ2NmExIDEgMCAwIDEgMCAyaC0yYTEgMSAwIDAgMSAwLTJWOUg2djJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JIZWFkaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckl0YWxpYyA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGFsaWMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjE2IDEySDkuNWEuNS41IDAgMSAxIDAgMWgtNGEuNS41IDAgMSAxIDAtMWgxLjYzOWwxLjctOEg3LjVhLjUuNSAwIDAgMSAwLTFoNGEuNS41IDAgMSAxIDAgMUg5Ljg2MWwtMS43IDhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGFsaWM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yTGluayA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JMaW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41NTYgNS4wNTFhLjQ1LjQ1IDAgMCAwIC42MzcuNjM3bDEuNTAzLTEuNTA0Yy40MzItLjQzMSAxLjI3OC0uMzgyIDEuODkuMjMuNjEyLjYxMi42NjIgMS40NTguMjMgMS44OUw5LjUxOSA4LjZjLS40MzIuNDMyLTEuMjc4LjM4My0xLjg5LS4yM2EuNDUuNDUgMCAxIDAtLjYzNi42MzdjLjkxNC45MTQgMi4zMyAxLjA2MyAzLjE2Mi4yM2wyLjI5Ny0yLjI5N2MuODMzLS44MzMuNjg0LTIuMjQ4LS4yMy0zLjE2Mi0uOTE0LS45MTUtMi4zMy0xLjA2My0zLjE2Mi0uMjNMNy41NTYgNS4wNTF6bS44ODggNS4yNjFhLjQ1LjQ1IDAgMCAwLS42MzcgMGwtMS41MDMgMS41MDRjLS40MzIuNDMxLTEuMjc4LjM4Mi0xLjg5LS4yMy0uNjEyLS42MTItLjY2MS0xLjQ1OC0uMjMtMS44OUw2LjQ4MSA3LjRjLjQzMi0uNDMyIDEuMjc4LS4zODMgMS44OS4yM2EuNDUuNDUgMCAwIDAgLjYzNi0uNjM3Yy0uOTE0LS45MTQtMi4zMy0xLjA2My0zLjE2Mi0uMjNMMy41NDggOS4wNmMtLjgzMy44MzMtLjY4NSAyLjI0OC4yMyAzLjE2Mi45MTQuOTE1IDIuMzMgMS4wNjMgMy4xNjIuMjNsMS41MDQtMS41MDNhLjQ1LjQ1IDAgMCAwIDAtLjYzN3pNNy44NzcgNS43NmEuMzkuMzkgMCAwIDAgLjI3NC0uMTE0bDEuNTAzLTEuNTA0LTEuNTAzIDEuNTA0YS4zOS4zOSAwIDAgMS0uMjc0LjExNHptLjkxMiAzLjE4M2MtLjQuMDAzLS44NDMtLjE3Mi0xLjIwMi0uNTMuMzU5LjM1OC44MDIuNTMzIDEuMjAyLjUzek0xMi4xOCAzLjgyYy0uNTAyLS41MDMtMS4xNTUtLjc2Ni0xLjc3My0uNzYuNjE4LS4wMDYgMS4yNy4yNTcgMS43NzMuNzYuODk4Ljg5OCAxLjAzNCAyLjI3NS4yMyAzLjA3OGwtMi4yOTcgMi4yOTcgMi4yOTctMi4yOTdjLjgwNC0uODAzLjY2OC0yLjE4LS4yMy0zLjA3OHptLTQuMDYyIDYuNDJhLjM5LjM5IDAgMCAxIC4yODQuNjY3TDYuODk4IDEyLjQxbDEuNTA0LTEuNTAzYS4zOS4zOSAwIDAgMC0uMjg0LS42Njd6bS0uOTI2LTMuOTY1Yy42MTgtLjAwNiAxLjI3LjI1NyAxLjc3My43Ni0uNTAyLS41MDMtMS4xNTUtLjc2Ni0xLjc3My0uNzZ6TTUuNDE0IDEyLjE1YTEuNzYyIDEuNzYyIDAgMCAxLTEuMDQyLS41MjJjLS42MjYtLjYyNy0uNjkyLTEuNTExLS4yMy0xLjk3NEw2LjQ0IDcuMzU4IDQuMTQyIDkuNjU0Yy0uNDYyLjQ2My0uMzk2IDEuMzQ4LjIzIDEuOTc0LjMxMS4zMTEuNjg3LjQ4NCAxLjA0Mi41MjJ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JMaW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA4djFoMXYxSDFWOWgxVjhIMVY3aDN2MUgzWm0xIDR2Mkgxdi0xaDF2LTFIMXYtMWgzdjFaTTMgNWgxdjFIMVY1aDFWNEgxVjNoMnYyWm0yLjUtMWg4YS41LjUgMCAxIDEgMCAxaC04YS41LjUgMCAwIDEgMC0xWm0wIDRoOGEuNS41IDAgMSAxIDAgMWgtOGEuNS41IDAgMCAxIDAtMVptMCA0aDhhLjUuNSAwIDEgMSAwIDFoLThhLjUuNSAwIDEgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JPcmRlcmVkTGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JSZWRvID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclJlZG8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCA2SDVDMy4wNTcgNiAyIDcuMDU3IDIgOXMxLjA1NyAzIDMgM2gxLjV2LTFINWMtMS4zOSAwLTItLjYxLTItMiAwLTEuMzkuNjEtMiAyLTJoNXYzbDMuNS0zLjVMMTAgM3YzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yUmVkbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JTdHJpa2UgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yU3RyaWtlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMDIzIDEwaDEuMjc0Yy4wMDYuMDguMDEuMTY0LjAxLjI1YTIuNTU3IDIuNTU3IDAgMCAxLS44ODMgMS45NDljLS4yODQuMjUtLjYyNy40NDYtMS4wMy41ODhBNC4wODcgNC4wODcgMCAwIDEgOC4wMjggMTNhNC42MTYgNC42MTYgMCAwIDEtMy4zODItMS40MjZjLS4xOTMtLjI1OS0uMTkzLS41IDAtLjcyNC4xOTMtLjIyMy40MzgtLjI2Ni43MzUtLjEzLjM0My4zNjMuNzQ4LjY1NSAxLjIxMy44NzYuNDY2LjIyLjk0OS4zMyAxLjQ0OS4zMy42MzcgMCAxLjEzMi0uMTQ0IDEuNDg1LS40MzMuMzUzLS4yOS41My0uNjcuNTMtMS4xNGExLjcyIDEuNzIgMCAwIDAtLjAzNC0uMzUzWk01LjU4NiA3YTIuNDkgMi40OSAwIDAgMS0uMjk0LS41MDcgMi4zMTYgMi4zMTYgMCAwIDEtLjE3Ny0uOTM0YzAtLjM2My4wNzYtLjcwMS4yMjgtMS4wMTUuMTUyLS4zMTQuMzYzLS41ODYuNjMzLS44MTYuMjctLjIzLjU4OC0uNDEuOTU1LS41MzdBMy42ODMgMy42ODMgMCAwIDEgOC4xNDUgM2MuNTc4IDAgMS4xMTIuMTEgMS42MDMuMzMuNDkuMjIxLjkwNy41MDggMS4yNS44NjEuMTYuMjgyLjE2LjUxMiAwIC42OTItLjE2LjE4LS4zOC4yMTQtLjY2Mi4xMDJhMy40MzggMy40MzggMCAwIDAtLjk3OC0uNjY5IDIuOTE0IDIuOTE0IDAgMCAwLTEuMjEzLS4yNDJjLS41NCAwLS45NzMuMTI1LTEuMzAyLjM3NS0uMzI4LjI1LS40OTIuNTk1LS40OTIgMS4wMzYgMCAuMjM2LjA0Ni40MzQuMTQuNTk2LjA5Mi4xNjIuMjE3LjMwNC4zNzQuNDI2LjE1Ny4xMjMuMzI5LjIzLjUxNS4zMjQuMTE5LjA2LjI0LjExNi4zNjIuMTY5SDUuNTg2Wk0yLjUgOGgxMWEuNS41IDAgMSAxIDAgMWgtMTFhLjUuNSAwIDAgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JTdHJpa2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yVGFibGUgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yVGFibGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAzdjJIMlYzdjEwaDEyVjNaTTIgMmgxMmMuNTUyIDAgMSAuNDEzIDEgLjkyM3YxMC4xNTRjMCAuNTEtLjQ0OC45MjMtMSAuOTIzSDJjLS41NTIgMC0xLS40MTMtMS0uOTIzVjIuOTIzQzEgMi40MTMgMS40NDggMiAyIDJabTAgNWgxMnYxSDJWN1ptMCAzaDEydjFIMnYtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclRhYmxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvclVuZGVybGluZSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JVbmRlcmxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDMuNTM2VjcuOGMwIDEuNjI4IDEuMjI0IDIuNiAzIDIuNiAxLjc4MyAwIDMtLjk3MiAzLTIuNlYzLjUzNmMwLS4zNTcuMTY3LS41MzYuNS0uNTM2LjMzMyAwIC41LjE3OS41LjUzNnY0LjMxOGMwIDIuMDkzLTEuNjY1IDMuNTQ2LTQgMy41NDZTNCA5Ljg5MyA0IDcuOFYzLjUzNkM0IDMuMTc5IDQuMTY3IDMgNC41IDNjLjMzMyAwIC41LjE3OS41LjUzNlpNMi41IDEzaDExYS41LjUgMCAxIDEgMCAxaC0xMWEuNS41IDAgMSAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclVuZGVybGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JVbmRvID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclVuZG8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjUgNmg1YzEuOTQzIDAgMyAxLjA1NyAzIDNzLTEuMDU3IDMtMyAzSDl2LTFoMS41YzEuMzkgMCAyLS42MSAyLTIgMC0xLjM5LS42MS0yLTItMmgtNXYzTDIgNi41IDUuNSAzdjNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JVbmRvOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvclVub3JkZXJlZExpc3QgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yVW5vcmRlcmVkTGlzdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuNSA0aDhhLjUuNSAwIDEgMSAwIDFoLThhLjUuNSAwIDAgMSAwLTFabTAgNGg4YS41LjUgMCAxIDEgMCAxaC04YS41LjUgMCAwIDEgMC0xWm0wIDRoOGEuNS41IDAgMSAxIDAgMWgtOGEuNS41IDAgMSAxIDAtMVptLTMtN2EuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptMCA0YS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWm0wIDRhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JVbm9yZGVyZWRMaXN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVtYWlsID0gZnVuY3Rpb24gRXVpSWNvbkVtYWlsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0Ljk1IDMuNjg0IDguNjM3IDguOTEyYTEgMSAwIDAgMS0xLjI3NiAwTDEuMDUxIDMuNjg0QS45OTkuOTk5IDAgMCAwIDEgNHY4YTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMVY0YS45OTkuOTk5IDAgMCAwLS4wNS0uMzE2Wk0yIDJoMTJhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMlptLS4yMSAxIDUuNTc2IDQuNjAzYTEgMSAwIDAgMCAxLjI3LjAwM0wxNC4yNjggM0gxLjc5WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRW1haWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRW1wdHkgPSBmdW5jdGlvbiBFdWlJY29uRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVuZHBvaW50ID0gZnVuY3Rpb24gRXVpSWNvbkVuZHBvaW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS40MDYgMTMuNDU0YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02Ljg2IDYuMDlhMi41NDUgMi41NDUgMCAxIDEgMi40OTctMy4wNDVoLjM2OGEyLjcyNyAyLjcyNyAwIDEgMSAwIDUuNDU1SDYuNTQzYTEuNzI3IDEuNzI3IDAgMSAwIDAgMy40NTRoLjM2N2EyLjU0NiAyLjU0NiAwIDEgMSAwIDFoLS4zNjdhMi43MjcgMi43MjcgMCAxIDEgMC01LjQ1NGgzLjE4MmExLjcyNyAxLjcyNyAwIDEgMCAwLTMuNDU1aC0uMzY4YTIuNTQ2IDIuNTQ2IDAgMCAxLTIuNDk2IDIuMDQ2TDYuODYgNi4wOVptMC0xYTEuNTQ1IDEuNTQ1IDAgMSAxIDAtMy4wOSAxLjU0NSAxLjU0NSAwIDAgMSAwIDMuMDlaTTkuNDA3IDE0YTEuNTQ1IDEuNTQ1IDAgMSAxIDAtMy4wOSAxLjU0NSAxLjU0NSAwIDAgMSAwIDMuMDlaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRW5kcG9pbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRXFsID0gZnVuY3Rpb24gRXVpSWNvbkVxbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1Ljg2MiAxNC4xOHYuMDAxYS40ODIuNDgyIDAgMCAxIC4xLjUyMS41LjUgMCAwIDEtLjQ0Ny4yOTloLTMuMTQ5Yy0uMDcgMC0uMTM2IDAtLjItLjAwM2EuNjY0LjY2NCAwIDAgMS0uNDE0LS4xNGMtLjM1LS4zMS0uNjg0LS42MzctMS4wMDEtLjk4MWwtMS43NzItMS43MzhhNS45NDEgNS45NDEgMCAwIDEtMy44MDIuMTRsLS4wNDUtLjAxMmE1Ljg5IDUuODkgMCAwIDEtMi42ODItMS43MTJBNS43MTUgNS43MTUgMCAwIDEgMS4wOCA3LjcyYTUuNjYgNS42NiAwIDAgMSAuMzQ4LTMuMTE4QTUuNzggNS43OCAwIDAgMSAzLjM5IDIuMTI0YTUuOTc5IDUuOTc5IDAgMCAxIDYuMTM2LS41MDUgNS44MzYgNS44MzYgMCAwIDEgMi4zNTYgMi4xMjMgNS42NyA1LjY3IDAgMCAxIC44NzMgMy4wMTdsLjAwMS4wMDNjMCAuMTI4LS4wNTEuMjUtLjE0My4zNGEuNDk1LjQ5NSAwIDAgMS0uNjk0IDAgLjQ3Ni40NzYgMCAwIDEtLjE0My0uMzRjMC0uOTUtLjI4OC0xLjg3OC0uODI2LTIuNjY4YTQuODggNC44OCAwIDAgMC0yLjE5OC0xLjc2OSA0Ljk5IDQuOTkgMCAwIDAtMi44My0uMjczIDQuOTMgNC45MyAwIDAgMC0yLjUwOSAxLjMxNCA0Ljc3NCA0Ljc3NCAwIDAgMC0xLjM0IDIuNDZBNC43MTUgNC43MTUgMCAwIDAgMi4zNTIgOC42YTQuODIgNC44MiAwIDAgMCAxLjgwNCAyLjE1NWMuODA1LjUyOCAxLjc1Mi44MSAyLjcyMS44MWE0Ljg5OSA0Ljg5OSAwIDAgMCAxLjI5Ni0uMTk0bC4wMzItLjAwOS43MTctLjIxMWEuNTA2LjUwNiAwIDAgMSAuNDgzLjExMWwxLjExIDEuMDI2IDEuNzg4IDEuNzUyaDIuMDNsLTMuNjU3LTMuNTgzYS40NzUuNDc1IDAgMCAxIC4wMTQtLjY2Ni40OTUuNDk1IDAgMCAxIC42NzktLjAxM2w0LjQ5MyA0LjQwMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMDk3IDMuNDY4IDkuNjc5IDQuOTNhLjQzMy40MzMgMCAwIDEgLjIxOC4zN3YyLjkyNGEuNDIyLjQyMiAwIDAgMS0uMjE4LjM3bC0yLjU4MiAxLjQ2MWEuNDM4LjQzOCAwIDAgMS0uNDM3IDBMNC4wNzcgOC41OTRhLjQzMy40MzMgMCAwIDEtLjIxOC0uMzdWNS4zYS40MjIuNDIyIDAgMCAxIC4yMTgtLjM3TDYuNjYgMy40NjdhLjQ0Ni40NDYgMCAwIDEgLjQzNyAwem0xLjg0NSA0LjI3VjUuNzg0YS4zMjguMzI4IDAgMCAwLS4xNy0uMjg3TDcuMDQ3IDQuNTJhLjM0Mi4zNDIgMCAwIDAtLjMzOCAwbC0xLjcyNi45NzdhLjMzNi4zMzYgMCAwIDAtLjE2OC4yODd2MS45NTNhLjMyNi4zMjYgMCAwIDAgLjE3LjI4N2wxLjcyNC45NzdhLjM0Mi4zNDIgMCAwIDAgLjMzOCAwbDEuNzI2LS45NzhhLjMzNC4zMzQgMCAwIDAgLjE2OS0uMjg3elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVyYXNlciA9IGZ1bmN0aW9uIEV1aUljb25FcmFzZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0yLjY0OCA5LjkzNyA3LjI5LTcuMjg4YTIuMjEgMi4yMSAwIDAgMSAzLjEyNCAwbDIuMjkgMi4yODhhMi4yMSAyLjIxIDAgMCAxIDAgMy4xMjZMMTAuNDEzIDEzSDEyLjVhLjUuNSAwIDAgMSAwIDFINC41MDFhMi4yMSAyLjIxIDAgMCAxLTEuNTYzLS42NDdsLjcwNy0uNzA3Yy4yMjcuMjI2LjUzNS4zNTQuODU2LjM1NGg0LjAwNWExLjIxIDEuMjEgMCAwIDAgLjg0OC0uMzU0bDEuMjkyLTEuMjkzLTQtNC0zLjI5IDMuMjkxYTEuMjEgMS4yMSAwIDAgMCAwIDEuNzEybC4yOS4yOS0uNzA4LjcwNy0uMjktLjI5YTIuMjEgMi4yMSAwIDAgMSAwLTMuMTI2ek04IDZoNi44OWExLjIwOCAxLjIwOCAwIDAgMC0uMjQ2LS4zNTZMMTQgNUg5TDggNnptMi0yaDNsLS42NDUtLjY0NGExLjIxIDEuMjEgMCAwIDAtMS43MSAwTDEwIDR6bTQuODkgM0g3LjcwOGwxIDFIMTRsLjY0NC0uNjQ0QTEuMjIgMS4yMiAwIDAgMCAxNC44OTEgN3pNOS43MDggOWwxLjY0NiAxLjY0NkwxMyA5SDkuNzA3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMTEuNWEuNS41IDAgMSAxLTEgMCAuNS41IDAgMCAxIDEgMHptMS41LS41YS41LjUgMCAxIDAgMC0xIC41LjUgMCAwIDAgMCAxem0tMSAyYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFoLTF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FcmFzZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRXJyb3IgPSBmdW5jdGlvbiBFdWlJY29uRXJyb3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00Ljg1NCA1LjE0NmEuNS41IDAgMSAwLS43MDguNzA4TDYuNzkzIDguNWwtMi42NDcgMi42NDZhLjUuNSAwIDAgMCAuNzA4LjcwOEw3LjUgOS4yMDdsMi42NDYgMi42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMOC4yMDcgOC41bDIuNjQ3LTIuNjQ2YS41LjUgMCAwIDAtLjcwOC0uNzA4TDcuNSA3Ljc5MyA0Ljg1NCA1LjE0NlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01IDFhMSAxIDAgMCAwLS43MDcuMjkzbC00IDRBMSAxIDAgMCAwIDAgNnY1YTEgMSAwIDAgMCAuMjkzLjcwN2w0IDRBMSAxIDAgMCAwIDUgMTZoNWExIDEgMCAwIDAgLjcwNy0uMjkzbDQtNEExIDEgMCAwIDAgMTUgMTFWNmExIDEgMCAwIDAtLjI5My0uNzA3bC00LTRBMSAxIDAgMCAwIDEwIDFINVptNSAxSDVMMSA2djVsNCA0aDVsNC00VjZsLTQtNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVycm9yOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVycm9yRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvbkVycm9yRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEwIDFhMSAxIDAgMCAxIC43MDcuMjkzbDQgNEExIDEgMCAwIDEgMTUgNnY1YTEgMSAwIDAgMS0uMjkzLjcwN2wtNCA0QTEgMSAwIDAgMSAxMCAxNkg1YTEgMSAwIDAgMS0uNzA3LS4yOTNsLTQtNEExIDEgMCAwIDEgMCAxMVY2YTEgMSAwIDAgMSAuMjkzLS43MDdsNC00QTEgMSAwIDAgMSA1IDFoNVpNNC4xNDYgNS4xNDZhLjUuNSAwIDAgMSAuNzA4IDBMNy41IDcuNzkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC4yMDcgOC41bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMNy41IDkuMjA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw2Ljc5MyA4LjUgNC4xNDYgNS44NTRhLjUuNSAwIDAgMSAwLS43MDhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FcnJvckZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Fc3FsVmlzID0gZnVuY3Rpb24gRXVpSWNvbkVzcWxWaXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDIuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNVpNMi41IDRhLjUuNSAwIDAgMCAwIDFoMmEuNS41IDAgMCAwIDAtMWgtMlpNMiA2LjVhLjUuNSAwIDAgMSAuNS0uNWgyYS41LjUgMCAwIDEgMCAxaC0yYS41LjUgMCAwIDEtLjUtLjVaTTIuNSA4YS41LjUgMCAwIDAgMCAxaDJhLjUuNSAwIDAgMCAwLTFoLTJaTTIgMTAuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAuNS41djJhLjUuNSAwIDAgMS0uNS41aC0yYS41LjUgMCAwIDEtLjUtLjV2LTJaTTYuNSAyYS41LjUgMCAwIDAgMCAxaDJhLjUuNSAwIDAgMCAwLTFoLTJaTTYgNC41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41Wk02LjUgNmEuNS41IDAgMCAwLS41LjV2NmEuNS41IDAgMCAwIC41LjVoMmEuNS41IDAgMCAwIC41LS41di02YS41LjUgMCAwIDAtLjUtLjVoLTJaTTEwIDIuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNVptLjUgMS41YS41LjUgMCAwIDAgMCAxaDJhLjUuNSAwIDAgMCAwLTFoLTJaTTEwIDYuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNVptLjUgMS41YS41LjUgMCAwIDAtLjUuNXY0YS41LjUgMCAwIDAgLjUuNWgyYS41LjUgMCAwIDAgLjUtLjV2LTRhLjUuNSAwIDAgMC0uNS0uNWgtMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMGgxMWEyIDIgMCAwIDEgMiAydjExYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMlptMCAxYTEgMSAwIDAgMC0xIDF2MTFhMSAxIDAgMCAwIDEgMWgxMWExIDEgMCAwIDAgMS0xVjJhMSAxIDAgMCAwLTEtMUgyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXNxbFZpczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FeGl0ID0gZnVuY3Rpb24gRXVpSWNvbkV4aXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIuNTM1IDEyLjQ5M2EuNDcuNDcgMCAwIDEgLjQ2OC40Njh2Mi41NjRhLjQ3My40NzMgMCAwIDEtLjQ2Ni40NzVIM1YwSDEyLjU5NWEuNDUuNDUgMCAwIDEgLjM5OC40NjN2Mi41NjVhLjQ2OS40NjkgMCAwIDEtLjQ2OC40NjdoLS4wNjVhLjQ2OC40NjggMCAwIDEtLjQ2Ny0uNDY3VjFINHYxNGg4LjAxbC0uMDA3LTIuMDRjMC0uMjU3LjIxLS40NjcuNDY3LS40NjdoLjA2NVptLTEuMDk2LTcuNTkgMi4xMjEgMi4xMjJhMS41IDEuNSAwIDAgMSAwIDIuMTIxbC0yLjEyIDIuMTIyYS41LjUgMCAxIDEtLjcwOC0uNzA4bDIuMTIxLTIuMTJhLjUuNSAwIDAgMCAwLS43MDhsLTIuMTIxLTIuMTIxYS41LjUgMCAwIDEgLjcwNy0uNzA3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXhpdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FeHBhbmQgPSBmdW5jdGlvbiBFdWlJY29uRXhwYW5kKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwibTQuMzU0IDEyLjM1NCA4LThhLjUuNSAwIDAgMC0uNzA4LS43MDhsLTggOGEuNS41IDAgMCAwIC43MDguNzA4Wk0xIDEwLjVhLjUuNSAwIDEgMSAxIDB2M2EuNS41IDAgMCAwIC41LjVoM2EuNS41IDAgMSAxIDAgMWgtM0ExLjUgMS41IDAgMCAxIDEgMTMuNXYtM1ptMTQtNWEuNS41IDAgMSAxLTEgMHYtM2EuNS41IDAgMCAwLS41LS41aC0zYS41LjUgMCAxIDEgMC0xaDNBMS41IDEuNSAwIDAgMSAxNSAyLjV2M1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV4cGFuZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FeHBhbmRNaW5pID0gZnVuY3Rpb24gRXVpSWNvbkV4cGFuZE1pbmkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNi43MDcgMTAgMTAgNi43MDdBLjUuNSAwIDAgMCA5LjI5MyA2TDYgOS4yOTNhLjUuNSAwIDEgMCAuNzA3LjcwN1pNNCA5LjVhLjUuNSAwIDAgMSAxIDB2MWEuNS41IDAgMCAwIC41LjVoMWEuNS41IDAgMSAxIDAgMWgtMUExLjUgMS41IDAgMCAxIDQgMTAuNXYtMVptOC0zYS41LjUgMCAxIDEtMSAwdi0xYS41LjUgMCAwIDAtLjUtLjVoLTFhLjUuNSAwIDAgMSAwLTFoMUExLjUgMS41IDAgMCAxIDEyIDUuNXYxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXhwYW5kTWluaTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FeHBvcnQgPSBmdW5jdGlvbiBFdWlJY29uRXhwb3J0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41MDUgMWMuNDIyLS4wMDMuODQ0LjE3IDEuMTY2LjUxNmwxLjk1IDIuMDVjLjIxMy4yMjguMjEzLjYgMCAuODI4YS41Mi41MiAwIDAgMS0uNzcxIDBMOSAyLjQ1MXY3Ljk5M2MwIC4zMDctLjIyNC41NTYtLjUuNTU2cy0uNS0uMjQ5LS41LS41NTZ2LTcuOTZsLTEuODIgMS45MWEuNTIuNTIgMCAwIDEtLjc3IDAgLjYxNy42MTcgMCAwIDEgMC0uODI5bDEuOTUtMi4wNUExLjU3NSAxLjU3NSAwIDAgMSA4LjUgMWguMDA1Wk00LjE4IDdjLS40NzMgMC0uODguMjk0LS45NzIuNzAzbC0xLjE4OSA1LjI1YS43NzYuNzc2IDAgMCAwLS4wMTkuMTcyYzAgLjQ4My40NDQuODc1Ljk5Ljg3NUgxNC4wMWMuMDY1IDAgLjEzLS4wMDYuMTk0LS4wMTcuNTM3LS4wOTUuODg1LS41NTYuNzc4LTEuMDNsLTEuMTktNS4yNUMxMy43IDcuMjk0IDEzLjI5MyA3IDEyLjgyMiA3SDQuMThaTTYgNnYxaDVWNmgxLjgyNWMuOTQ2IDAgMS43Ni42MDYgMS45NDYgMS40NDdsMS4xOSA1LjRjLjIxNS45NzUtLjQ4MiAxLjkyMy0xLjU1NiAyLjExOGEyLjE4IDIuMTggMCAwIDEtLjM5LjAzNUgyLjk4NUMxLjg4OCAxNSAxIDE0LjE5NCAxIDEzLjJjMC0uMTE5LjAxMy0uMjM3LjAzOS0uMzUzbDEuMTktNS40QzIuNDE0IDYuNjA2IDMuMjI5IDYgNC4xNzQgNkg2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXhwb3J0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkV5ZSA9IGZ1bmN0aW9uIEV1aUljb25FeWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS45OCA3Ljg3M2MuMDEzLjAzLjAyLjA2NC4wMi4wOTh2LjA2YS4yNC4yNCAwIDAgMS0uMDIuMDk3QzE1Ljk1MiA4LjE4OCAxMy4yOTEgMTQgOCAxNFMuMDQ3IDguMTg4LjAyIDguMTI4QS4yNC4yNCAwIDAgMSAwIDguMDN2LS4wNTljMC0uMDM0LjAwNy0uMDY4LjAyLS4wOThDLjA0OCA3LjgxMyAyLjcwOSAyIDggMnM3Ljk1MyA1LjgxMyA3Ljk4IDUuODczWm0tMS4zNy0uNDI0YTEyLjA5NyAxMi4wOTcgMCAwIDAtMS4zODUtMS44NjJDMTEuNzM5IDMuOTU2IDkuOTk5IDMgOCAzYy0yIDAtMy43NC45NTYtNS4yMjUgMi41ODdhMTIuMDk4IDEyLjA5OCAwIDAgMC0xLjcwMSAyLjQxNCAxMi4wOTUgMTIuMDk1IDAgMCAwIDEuNyAyLjQxM0M0LjI2IDEyLjA0MyA2LjAwMiAxMyA4IDEzczMuNzQtLjk1NiA1LjIyNS0yLjU4N0ExMi4wOTcgMTIuMDk3IDAgMCAwIDE0LjkyNiA4Yy0uMDgtLjE1LS4xODktLjM0My0uMzE1LS41NTFaTTggNC43NUEzLjI1MyAzLjI1MyAwIDAgMSAxMS4yNSA4IDMuMjU0IDMuMjU0IDAgMCAxIDggMTEuMjUgMy4yNTMgMy4yNTMgMCAwIDEgNC43NSA4IDMuMjUyIDMuMjUyIDAgMCAxIDggNC43NVptMCAxQzYuNzYgNS43NSA1Ljc1IDYuNzYgNS43NSA4UzYuNzYgMTAuMjUgOCAxMC4yNSAxMC4yNSA5LjI0IDEwLjI1IDggOS4yNCA1Ljc1IDggNS43NVptMCAxLjVhLjc1Ljc1IDAgMSAwIDAgMS41Ljc1Ljc1IDAgMCAwIDAtMS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXllOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkV5ZUNsb3NlZCA9IGZ1bmN0aW9uIEV1aUljb25FeWVDbG9zZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm01LjMxOCAxMy40Ny43NzYtLjc3NkE2LjA0IDYuMDQgMCAwIDAgOCAxM2MxLjk5OSAwIDMuNzQtLjk1NiA1LjIyNS0yLjU4N0ExMi4wOTcgMTIuMDk3IDAgMCAwIDE0LjkyNiA4YTEyLjA5NyAxMi4wOTcgMCAwIDAtMS43MDEtMi40MTNsLS4wMTEtLjAxMi43MDctLjcwOGMxLjM1OSAxLjQ3NiAyLjA0NSAyLjk3NiAyLjA1OCAzLjAwNi4wMTQuMDMuMDIxLjA2NC4wMjEuMDk4di4wNmEuMjQuMjQgMCAwIDEtLjAyLjA5N0MxNS45NTIgOC4xODggMTMuMjkxIDE0IDggMTRhNy4wMyA3LjAzIDAgMCAxLTIuNjgyLS41M1pNMi4wNCAxMS4wOTJDLjcwNyA5LjYyOS4wMzQgOC4xNTguMDIgOC4xMjhBLjI0LjI0IDAgMCAxIDAgOC4wM3YtLjA1OWMwLS4wMzQuMDA3LS4wNjguMDItLjA5OEMuMDQ4IDcuODEzIDIuNzA5IDIgOCAyYy45NjIgMCAxLjgzNy4xOTIgMi42MjUuNTA3bC0uNzguNzhBNi4wMzkgNi4wMzkgMCAwIDAgOCAzYy0yIDAtMy43NC45NTYtNS4yMjUgMi41ODdhMTIuMDk4IDEyLjA5OCAwIDAgMC0xLjcwMSAyLjQxNCAxMi4xMSAxMi4xMSAwIDAgMCAxLjY3NCAyLjM4M2wtLjcwOC43MDhaTTguMzYyIDQuNzcgNy4yNTUgNS44NzdhMi4yNjIgMi4yNjIgMCAwIDAtMS4zNzggMS4zNzhMNC43NyA4LjM2MkEzLjI1MiAzLjI1MiAwIDAgMSA4LjM2MiA0Ljc3Wm0yLjg2IDIuNzk3YTMuMjU0IDMuMjU0IDAgMCAxLTMuNjU0IDMuNjU0bDEuMDYtMS4wNmEyLjI2MiAyLjI2MiAwIDAgMCAxLjUzMy0xLjUzM2wxLjA2LTEuMDZabS05LjM2OCA3LjI4N2EuNS41IDAgMCAxLS43MDgtLjcwOGwxMy0xM2EuNS41IDAgMCAxIC43MDguNzA4bC0xMyAxM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV5ZUNsb3NlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GYWNlSGFwcHkgPSBmdW5jdGlvbiBFdWlJY29uRmFjZUhhcHB5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNkE4IDggMCAxIDEgOCAwYTggOCAwIDAgMSAwIDE2Wm0wLTEuMDY3QTYuOTMzIDYuOTMzIDAgMSAwIDggMS4wNjdhNi45MzMgNi45MzMgMCAwIDAgMCAxMy44NjZaTTUuMzMzIDYuNGExLjA2NyAxLjA2NyAwIDEgMSAwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMCAxIDAgMi4xMzNabTUuMzM0IDBhMS4wNjcgMS4wNjcgMCAxIDEgMC0yLjEzMyAxLjA2NyAxLjA2NyAwIDAgMSAwIDIuMTMzWk0yLjczOSA4LjgwMmEuNTMzLjUzMyAwIDAgMSAuOTIyLS41MzdDNC44MTUgMTAuMjQ1IDYuMjQ5IDExLjIgOCAxMS4yYzEuNzUgMCAzLjE4NS0uOTU2IDQuMzQtMi45MzVhLjUzMy41MzMgMCAwIDEgLjkyLjUzN2MtMS4zMzMgMi4yODctMy4xIDMuNDY1LTUuMjYgMy40NjUtMi4xNiAwLTMuOTI3LTEuMTc4LTUuMjYtMy40NjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GYWNlSGFwcHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRmFjZU5ldXRyYWwgPSBmdW5jdGlvbiBFdWlJY29uRmFjZU5ldXRyYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxNkE4IDggMCAxIDEgOCAwYTggOCAwIDAgMSAwIDE2em0wLTEuMDY3QTYuOTMzIDYuOTMzIDAgMSAwIDggMS4wNjdhNi45MzMgNi45MzMgMCAwIDAgMCAxMy44NjZ6TTUuMzMzIDYuNGExLjA2NyAxLjA2NyAwIDEgMSAwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMCAxIDAgMi4xMzN6bTUuMzM0IDBhMS4wNjcgMS4wNjcgMCAxIDEgMC0yLjEzMyAxLjA2NyAxLjA2NyAwIDAgMSAwIDIuMTMzek0zLjIgMTAuNjY3YS41MzMuNTMzIDAgMCAxIDAtMS4wNjdoOS42YS41MzMuNTMzIDAgMSAxIDAgMS4wNjdIMy4yelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmFjZU5ldXRyYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRmFjZVNhZCA9IGZ1bmN0aW9uIEV1aUljb25GYWNlU2FkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNkE4IDggMCAxIDEgOCAwYTggOCAwIDAgMSAwIDE2Wm0wLTEuMDY3QTYuOTMzIDYuOTMzIDAgMSAwIDggMS4wNjdhNi45MzMgNi45MzMgMCAwIDAgMCAxMy44NjZaTTUuMzMzIDYuNGExLjA2NyAxLjA2NyAwIDEgMSAwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMCAxIDAgMi4xMzNabTUuMzM0IDBhMS4wNjcgMS4wNjcgMCAxIDEgMC0yLjEzMyAxLjA2NyAxLjA2NyAwIDAgMSAwIDIuMTMzWm0yLjQ4NyAzLjg2OGEuNTMzLjUzMyAwIDEgMS0uNzA4Ljc5N0MxMC45MzYgOS43MjUgOS40NTggOS4wNjcgOCA5LjA2N2MtMS40NTggMC0yLjkzNy42NTctNC40NDYgMS45OThhLjUzMy41MzMgMCAxIDEtLjcwOC0uNzk3QzQuNTM2IDguNzY1IDYuMjU4IDggOCA4czMuNDYzLjc2NSA1LjE1NCAyLjI2OFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZhY2VTYWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRmllbGRTdGF0aXN0aWNzID0gZnVuY3Rpb24gRXVpSWNvbkZpZWxkU3RhdGlzdGljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMWgxMGEyIDIgMCAwIDEgMiAydjQuMzM3YTUuNTMzIDUuNTMzIDAgMCAwLTEtMS4wOFYzYTEgMSAwIDAgMC0xLTFIM2ExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDAgMCAxIDFoMy4yNTdjLjMxNC4zOC42NzcuNzE2IDEuMDggMUgzYTIgMiAwIDAgMS0yLTJWM2EyIDIgMCAwIDEgMi0yWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy41IDZoMy44MzdhNS41NCA1LjU0IDAgMCAwLTEuMDggMUgzLjVhLjUuNSAwIDAgMSAwLTFabTAgNmgxLjcwN2MuMDk4LjM0NS4yMjguNjc3LjM4OC45OTFBLjUwNS41MDUgMCAwIDEgNS41IDEzaC0yYS41LjUgMCAwIDEgMC0xWm0wLThhLjUuNSAwIDAgMSAwLTFoOWEuNS41IDAgMCAxIDAgMWgtOVpNMyA5LjVhLjUuNSAwIDAgMCAuNS41aDFhLjUuNSAwIDAgMCAwLTFoLTFhLjUuNSAwIDAgMC0uNS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE1IDEwLjVhNC41IDQuNSAwIDEgMS05IDAgNC41IDQuNSAwIDAgMSA5IDBabS0yLjE0Ni0yLjM1NGEuNS41IDAgMCAxIDAgLjcwOGwtNCA0YS41LjUgMCAwIDEtLjcwOC0uNzA4bDQtNGEuNS41IDAgMCAxIC43MDggMFpNOSAxMGExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTQgMmExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GaWVsZFN0YXRpc3RpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRmlsdGVyID0gZnVuY3Rpb24gRXVpSWNvbkZpbHRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNS41YS41LjUgMCAwIDEgLjUtLjVoOWEuNS41IDAgMCAxIDAgMWgtOWEuNS41IDAgMCAxLS41LS41Wm0yIDNhLjUuNSAwIDAgMSAuNS0uNWg1YS41LjUgMCAwIDEgMCAxaC01YS41LjUgMCAwIDEtLjUtLjVaTTcuNSAxMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xaC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmlsdGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZpbHRlckV4Y2x1ZGUgPSBmdW5jdGlvbiBFdWlJY29uRmlsdGVyRXhjbHVkZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDFhLjUuNSAwIDAgMCAwIDFoOWEuNS41IDAgMCAwIDAtMWgtOVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNiAxMS41YTQuNSA0LjUgMCAxIDEtOSAwIDQuNSA0LjUgMCAwIDEgOSAwWm0tOCAwYS41LjUgMCAwIDEgLjUtLjVoNmEuNS41IDAgMCAxIDAgMWgtNmEuNS41IDAgMCAxLS41LS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiA0LjVhLjUuNSAwIDAgMSAuNS0uNWg1YS41LjUgMCAwIDEgMCAxaC01YS41LjUgMCAwIDEtLjUtLjVaTTQuNSA3YS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFoLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GaWx0ZXJFeGNsdWRlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZpbHRlcklnbm9yZSA9IGZ1bmN0aW9uIEV1aUljb25GaWx0ZXJJZ25vcmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAxYS41LjUgMCAwIDAgMCAxaDlhLjUuNSAwIDAgMCAwLTFoLTlaTTIgNC41YS41LjUgMCAwIDEgLjUtLjVoNWEuNS41IDAgMCAxIDAgMWgtNWEuNS41IDAgMCAxLS41LS41Wm0yIDNhLjUuNSAwIDAgMSAuNS0uNWgxYS41LjUgMCAwIDEgMCAxaC0xYS41LjUgMCAwIDEtLjUtLjVaTTE2IDExLjVhNC41IDQuNSAwIDEgMS05IDAgNC41IDQuNSAwIDAgMSA5IDBabS00LjUtLjcwN0w5Ljg1NCA5LjE0NmEuNS41IDAgMSAwLS43MDguNzA4bDEuNjQ3IDEuNjQ2LTEuNjQ3IDEuNjQ2YS41LjUgMCAwIDAgLjcwOC43MDhsMS42NDYtMS42NDcgMS42NDYgMS42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMMTIuMjA3IDExLjVsMS42NDctMS42NDZhLjUuNSAwIDAgMC0uNzA4LS43MDhMMTEuNSAxMC43OTNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GaWx0ZXJJZ25vcmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRmlsdGVySW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uRmlsdGVySW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy45OTkgMTUuOTk5YTggOCAwIDEgMSAwLTE2IDggOCAwIDAgMSAwIDE2Wk04IDE1QTcgNyAwIDEgMCA4IDFhNyA3IDAgMCAwIDAgMTRaTTMuNSA1aDlhLjUuNSAwIDEgMSAwIDFoLTlhLjUuNSAwIDAgMSAwLTFabTIgM2g1YS41LjUgMCAxIDEgMCAxaC01YS41LjUgMCAwIDEgMC0xWm0yIDNoMWEuNS41IDAgMSAxIDAgMWgtMWEuNS41IDAgMSAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZpbHRlckluQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZpbHRlckluY2x1ZGUgPSBmdW5jdGlvbiBFdWlJY29uRmlsdGVySW5jbHVkZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDFhLjUuNSAwIDAgMCAwIDFoOWEuNS41IDAgMCAwIDAtMWgtOVpNMTYgMTEuNWE0LjUgNC41IDAgMSAxLTkgMCA0LjUgNC41IDAgMCAxIDkgMFptLTQtM2EuNS41IDAgMCAwLTEgMFYxMUg4LjVhLjUuNSAwIDAgMCAwIDFIMTF2Mi41YS41LjUgMCAwIDAgMSAwVjEyaDIuNWEuNS41IDAgMCAwIDAtMUgxMlY4LjVaTTIgNC41YS41LjUgMCAwIDEgLjUtLjVoNWEuNS41IDAgMCAxIDAgMWgtNWEuNS41IDAgMCAxLS41LS41Wk00LjUgN2EuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xaC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmlsdGVySW5jbHVkZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GbGFnID0gZnVuY3Rpb24gRXVpSWNvbkZsYWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjY4NiA4LjQ2NGMxLjU0Ny0uNjE5IDMuMDgtLjYxOSA0LjYyOCAwQS41LjUgMCAwIDAgMTMgOFYyYS41LjUgMCAwIDAtLjI3Ni0uNDQ3QzExLjI1OS44MiA5LjQ1OC44MiA3LjM0MiAxLjUyNmMtMS44ODQuNjI4LTMuNDE3LjYyOC00LjYxOC4wMjdBLjUuNSAwIDAgMCAyIDJ2MTIuNWEuNS41IDAgMSAwIDEgMFY4LjU1M2MxLjQxMS42MjcgMi45ODMuNTkyIDQuNjg2LS4wODlaTTMgMi43NDFjMS4zMjIuNDIgMi44NzguMzI3IDQuNjU4LS4yNjdDOS40IDEuODk0IDEwLjg0MyAxLjg1IDEyIDIuMzIydjQuOTc1Yy0xLjU2LS40NjQtMy4xMjgtLjM4NC00LjY4Ni4yMzktMS41NC42MTYtMi44OTIuNjE2LTQuMDkuMDE3QS40OTguNDk4IDAgMCAwIDMgNy41VjIuNzRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GbGFnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZvbGQgPSBmdW5jdGlvbiBFdWlJY29uRm9sZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMTQuMTkyIDcuNTMgMi40OWEuNjcuNjcgMCAwIDAgLjk0MiAwTDEwLjg2LjE5MmEuNjc3LjY3NyAwIDAgMSAuOTQ0IDAgLjY1LjY1IDAgMCAxIDAgLjkzbC0yLjM4OCAyLjNhMi4wMiAyLjAyIDAgMCAxLTIuODMyIDBsLTIuMzg4LTIuM2EuNjUuNjUgMCAwIDEgMC0uOTMuNjc3LjY3NyAwIDAgMSAuOTQ0IDB6bTAgMTUuNjE2IDIuMzktMi4yOThhLjY3LjY3IDAgMCAxIC45NDIgMGwyLjM4OSAyLjI5OGMuMjYuMjU2LjY4NS4yNTYuOTQ0IDBhLjY1LjY1IDAgMCAwIDAtLjkzbC0yLjM4OC0yLjNhMi4wMiAyLjAyIDAgMCAwLTIuODMyIDBsLTIuMzg4IDIuM2EuNjUuNjUgMCAwIDAgMCAuOTNjLjI2LjI1Ni42ODMuMjU2Ljk0NCAwek0xNiA2SDB2NGgxNlY2ek0xIDlWN2gxNHYySDF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Gb2xkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZvbGRlckNoZWNrID0gZnVuY3Rpb24gRXVpSWNvbkZvbGRlckNoZWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMkgxdjExaDYuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFIMWExIDEgMCAwIDEtMS0xVjJhMSAxIDAgMCAxIDEtMWg1LjI1YS43NS43NSAwIDAgMSAuNzUuNzV2MS4xMjVjMCAuMDY5LjA1Ni4xMjUuMTI1LjEyNUgxM2ExIDEgMCAwIDEgMSAxdjMuNDE2YTQuOTYyIDQuOTYyIDAgMCAwLTEtLjMxNlY0SDcuMTI1QTEuMTI1IDEuMTI1IDAgMCAxIDYgMi44NzVWMnptMTAgMTBhNCA0IDAgMSAxLTggMCA0IDQgMCAwIDEgOCAwem0tMS42NDYtMS4zNTRhLjUuNSAwIDAgMSAwIC43MDhsLTIuNSAyLjVhLjUuNSAwIDAgMS0uNzA4IDBsLTEtMWEuNS41IDAgMCAxIC43MDgtLjcwOGwuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMCAxIC43MDggMHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGRlckNoZWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZvbGRlckNsb3NlZCA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkZXJDbG9zZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDJIMnYxMWgxMlY0SDguMTI1QTEuMTI1IDEuMTI1IDAgMCAxIDcgMi44NzVWMnptLjI1LTFhLjc1Ljc1IDAgMCAxIC43NS43NXYxLjEyNWMwIC4wNjkuMDU2LjEyNS4xMjUuMTI1SDE0YTEgMSAwIDAgMSAxIDF2OWExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMVYyYTEgMSAwIDAgMSAxLTFoNS4yNXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGRlckNsb3NlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm0xIDkuNS44MjYtMy43MTdBMSAxIDAgMCAxIDIuODAyIDVIMTNWNEg3LjEyNUExLjEyNSAxLjEyNSAwIDAgMSA2IDIuODc1VjJIMXY3LjV6bS4yNDcgMy41SDcuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFIMWExIDEgMCAwIDEtMS0xVjJhMSAxIDAgMCAxIDEtMWg1LjI1YS43NS43NSAwIDAgMSAuNzUuNzV2MS4xMjVjMCAuMDY5LjA1Ni4xMjUuMTI1LjEyNUgxM2ExIDEgMCAwIDEgMSAxdjFoLjc1M2ExIDEgMCAwIDEgLjk3NyAxLjIxN2wtLjQ0NyAyLjAxMWE1LjAxNSA1LjAxNSAwIDAgMC0uODg3LS42MThMMTQuNzUzIDZIMi44MDNsLTEuNTU2IDd6TTE2IDEyYTQgNCAwIDEgMS04IDAgNCA0IDAgMCAxIDggMHptLTQgLjVhLjU3Ny41NzcgMCAwIDEtLjU3LS40OTVsLS4yOS0yLjAxNWEuODY3Ljg2NyAwIDEgMSAxLjcxOCAwbC0uMjg4IDIuMDE1YS41NzcuNTc3IDAgMCAxLS41Ny40OTV6bTAgMi41YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGRlckV4Y2xhbWF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZvbGRlck9wZW4gPSBmdW5jdGlvbiBFdWlJY29uRm9sZGVyT3BlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTEgOS41LjgyNi0zLjcxN0ExIDEgMCAwIDEgMi44MDIgNUgxM1Y0SDcuMTI1QTEuMTI1IDEuMTI1IDAgMCAxIDYgMi44NzVWMkgxdjcuNXptLjI0NyAzLjVoMTEuOTVsMS41NTYtN0gyLjgwM2wtMS41NTYgN3pNMTMgMTRIMWExIDEgMCAwIDEtMS0xVjJhMSAxIDAgMCAxIDEtMWg1LjI1YS43NS43NSAwIDAgMSAuNzUuNzV2MS4xMjVjMCAuMDY5LjA1Ni4xMjUuMTI1LjEyNUgxM2ExIDEgMCAwIDEgMSAxdjFoLjc1M2ExIDEgMCAwIDEgLjk3NyAxLjIxN2wtMS41NTYgN2ExIDEgMCAwIDEtLjk3Ni43ODNIMTN6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Gb2xkZXJPcGVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZyYW1lTmV4dCA9IGZ1bmN0aW9uIEV1aUljb25GcmFtZU5leHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDJhMSAxIDAgMCAwLTEgMXYxMGExIDEgMCAxIDAgMiAwVjNhMSAxIDAgMCAwLTEtMXptNS4xNDYuMjIgNy4yIDQuNTgxYTEuNDI1IDEuNDI1IDAgMCAxIDAgMi4zOThsLTcuMiA0LjU4MUM3LjIxIDE0LjM3NSA2IDEzLjY5MiA2IDEyLjU4MVYzLjQyYzAtMS4xMTIgMS4yMS0xLjc5NSAyLjE0Ni0xLjJ6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnJhbWVOZXh0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZyYW1lUHJldmlvdXMgPSBmdW5jdGlvbiBFdWlJY29uRnJhbWVQcmV2aW91cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDJhMSAxIDAgMCAxIDEgMXYxMGExIDEgMCAxIDEtMiAwVjNhMSAxIDAgMCAxIDEtMXptLTUuMTQ2LjIyLTcuMiA0LjU4MWExLjQyNSAxLjQyNSAwIDAgMCAwIDIuMzk4bDcuMiA0LjU4MWMuOTM2LjU5NSAyLjE0Ni0uMDg4IDIuMTQ2LTEuMTk5VjMuNDJjMC0xLjExMS0xLjIxLTEuNzk0LTIuMTQ2LTEuMTk5elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZyYW1lUHJldmlvdXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRnVsbFNjcmVlbkV4aXQgPSBmdW5jdGlvbiBFdWlJY29uRnVsbFNjcmVlbkV4aXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDdWM2gxdjNoM3YxSDl6TTcgN0gzVjZoM1YzaDF2NHptMiAyaDR2MWgtM3YzSDlWOXpNNyA5djRINnYtM0gzVjloNHpNMCAxLjk5NEMwIC44OTMuODk1IDAgMS45OTQgMGgxMi4wMTJDMTUuMTA3IDAgMTYgLjg5NSAxNiAxLjk5NHYxMi4wMTJBMS45OTUgMS45OTUgMCAwIDEgMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMCAxIDAgMTQuMDA2VjEuOTk0em0xIDB2MTIuMDEyYzAgLjU0OC40NDYuOTk0Ljk5NC45OTRoMTIuMDEyYS45OTUuOTk1IDAgMCAwIC45OTQtLjk5NFYxLjk5NEEuOTk1Ljk5NSAwIDAgMCAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAgMCAxIDEuOTk0elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnVsbFNjcmVlbkV4aXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRnVsbFNjcmVlbiA9IGZ1bmN0aW9uIEV1aUljb25GdWxsU2NyZWVuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzIDN2NGgtMVY0SDlWM2g0Wk0zIDNoNHYxSDR2M0gzVjNabTEwIDEwSDl2LTFoM1Y5aDF2NFpNMyAxM1Y5aDF2M2gzdjFIM1pNMCAxLjk5NEMwIC44OTMuODk1IDAgMS45OTQgMGgxMi4wMTJDMTUuMTA3IDAgMTYgLjg5NSAxNiAxLjk5NHYxMi4wMTJBMS45OTUgMS45OTUgMCAwIDEgMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMCAxIDAgMTQuMDA2VjEuOTk0Wm0xIDB2MTIuMDEyYzAgLjU0OC40NDYuOTk0Ljk5NC45OTRoMTIuMDEyYS45OTUuOTk1IDAgMCAwIC45OTQtLjk5NFYxLjk5NEEuOTk1Ljk5NSAwIDAgMCAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAgMCAxIDEuOTk0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnVsbFNjcmVlbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GdW5jdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25GdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDIuMjI2djIuMjE4Yy0uMzU5LS4xNDMtLjg0NS0uMjE4LTEuMzE1LS4yMTgtMS4wNTkgMC0xLjYzMS41MTktMS44MDIgMS41NjVsLS4xNjguOTM3aDIuNzk4djIuMTU5SDkuNDFsLS4zMTMgMS42NzRDOC42OTYgMTIuOTg3IDcuMjYxIDE0IDQuNzg1IDE0Yy0uNzE4IDAtMS4zNS0uMDkyLTEuNzg1LS4yNTF2LTIuMjQzYy40MTguMTc2LjkwNS4yNjggMS4zODMuMjY4IDEuMDA4IDAgMS41NDYtLjQzNSAxLjcyNS0xLjUyM2wuMjQtMS4zNjRIMy43ODdWNi43MjhoMi44MTJsLjI4OC0xLjI2NEM3LjI4NiAzLjA3MSA4LjY2MiAyIDExLjM1MiAyYy41OTggMCAxLjMwNi4xIDEuNjQ4LjIyNnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZ1bmN0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkdlYXIgPSBmdW5jdGlvbiBFdWlJY29uR2VhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS4xNjQgMTAuMzI5IDEuODcgOCAuMTYzIDUuNjdjLjE4LS42MDEuNDMtMS4xOS43NTgtMS43NTdhOC4xOTcgOC4xOTcgMCAwIDEgMS4xNDItMS41MzVsMi44NzIuMzEzTDYuMDk5LjA1YTguMTY2IDguMTY2IDAgMCAxIDMuOC0uMDAzbDEuMTY2IDIuNjQ0IDIuODcyLS4zMTNhOC4xNjYgOC4xNjYgMCAwIDEgMS44OTkgMy4yOTNMMTQuMTMgOGwxLjcwNiAyLjMzYy0uMTguNjAxLS40MyAxLjE5LS43NTggMS43NTdhOC4xOTcgOC4xOTcgMCAwIDEtMS4xNDIgMS41MzVsLTIuODcyLS4zMTMtMS4xNjQgMi42NDFhOC4xNjYgOC4xNjYgMCAwIDEtMy44LjAwM2wtMS4xNjYtMi42NDQtMi44NzIuMzEzYTguMTY2IDguMTY2IDAgMCAxLTEuODk5LTMuMjkzWm00LjY2MyAxLjk4NmExIDEgMCAwIDEgMS4wMjMuNTkxbC45NTcgMi4xN2MuNzkuMTM0IDEuNTk3LjEzMiAyLjM4Ny0uMDAxbC45NTYtMi4xNjlhMSAxIDAgMCAxIDEuMDIzLS41OWwyLjM1OC4yNTZhNy4yMyA3LjIzIDAgMCAwIDEuMTk0LTIuMDY4bC0xLjQwMS0xLjkxM2ExIDEgMCAwIDEgMC0xLjE4MmwxLjQtMS45MTJhNy4xNjUgNy4xNjUgMCAwIDAtMS4xOTItMi4wNjlsLTIuMzU5LjI1N2ExIDEgMCAwIDEtMS4wMjMtLjU5MUw5LjE5My45MjRhNy4xNjUgNy4xNjUgMCAwIDAtMi4zODcuMDAxTDUuODUgMy4wOTRhMSAxIDAgMCAxLTEuMDIzLjU5bC0yLjM1OC0uMjU2YTcuMjMgNy4yMyAwIDAgMC0xLjE5NCAyLjA2OGwxLjQwMSAxLjkxM2ExIDEgMCAwIDEgMCAxLjE4MmwtMS40IDEuOTEyYy4yOC43NTEuNjgxIDEuNDUgMS4xOTIgMi4wNjlsMi4zNTktLjI1N1pNOCAxMWEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZabTAtMWEyIDIgMCAxIDAgMC00IDIgMiAwIDAgMCAwIDRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HZWFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkdsYXNzZXMgPSBmdW5jdGlvbiBFdWlJY29uR2xhc3NlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuMDM1IDlBMy41IDMuNSAwIDAgMSAxNSA3LjA1VjQuNWMwLTEuMDcyLS42NDgtMS43Mi0yLjA5OC0yLjAxYS41LjUgMCAwIDEgLjE5Ni0uOThDMTQuOTgxIDEuODg2IDE2IDIuOTA1IDE2IDQuNXY0LjI1YzAgLjA3Mi0uMDE1LjE0LS4wNDMuMjAyQTMuNSAzLjUgMCAxIDEgOS4wMzUgMTBoLTIuMDdBMy41IDMuNSAwIDEgMSAuMDQzIDguOTUyLjQ5OC40OTggMCAwIDEgMCA4Ljc1VjQuNWMwLTEuNTk1IDEuMDE5LTIuNjE0IDIuOTAyLTIuOTlhLjUuNSAwIDAgMSAuMTk2Ljk4QzEuNjQ4IDIuNzggMSAzLjQyOCAxIDQuNXYyLjU1QTMuNSAzLjUgMCAwIDEgNi45NjUgOWgyLjA3Wk0zLjUgMTJhMi41IDIuNSAwIDEgMCAwLTUgMi41IDIuNSAwIDAgMCAwIDVabTkgMGEyLjUgMi41IDAgMSAwIDAtNSAyLjUgMi41IDAgMCAwIDAgNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdsYXNzZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uR2xvYmUgPSBmdW5jdGlvbiBFdWlJY29uR2xvYmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjAxOSA4YTYuNDYyIDYuNDYyIDAgMCAwIDEuMDAzIDNoMi4zODJhMTQuNDY5IDE0LjQ2OSAwIDAgMS0uMzk2LTNoLTIuOTlabTAtMWgyLjk4OWMuMDMzLTEuMDc4LjE3Mi0yLjA5NC4zOTYtM0gyLjAyMmE2LjQ2MiA2LjQ2MiAwIDAgMC0xLjAwMyAzWk0xMy45OCA4aC0yLjk4OWExNC40NjkgMTQuNDY5IDAgMCAxLS4zOTYgM2gyLjM4MmE2LjQ2MiA2LjQ2MiAwIDAgMCAxLjAwMy0zWm0wLTFhNi40NjIgNi40NjIgMCAwIDAtMS4wMDMtM2gtMi4zODJjLjIyNC45MDYuMzYzIDEuOTIyLjM5NiAzaDIuOTlaTTUuMDA4IDhjLjAzNyAxLjEwNy4xOTUgMi4xMjcuNDI5IDNoNC4xMjZjLjIzNC0uODczLjM5Mi0xLjg5My40MjktM0g1LjAwOFptMC0xaDQuOTg0YTEzLjQyMiAxMy40MjIgMCAwIDAtLjQyOS0zSDUuNDM3YTEzLjQyMiAxMy40MjIgMCAwIDAtLjQyOSAzWk0uMDE2IDhIMFY3aC4wMTZhNy41IDcuNSAwIDAgMSAxNC45NjggMEgxNXYxaC0uMDE2QTcuNSA3LjUgMCAwIDEgLjAxNiA4Wm0yLjc5NCA0YTYuNTAxIDYuNTAxIDAgMCAwIDIuNzE3IDEuNjk1QTcuMzE1IDcuMzE1IDAgMCAxIDQuNyAxMkgyLjgxWm05LjM4IDBIMTAuM2MtLjIzLjY1Ny0uNTEgMS4yMy0uODI3IDEuNjk1QTYuNTAxIDYuNTAxIDAgMCAwIDEyLjE5IDEyWm0tNi40MjggMGMuNDg0IDEuMjQgMS4xMzIgMiAxLjczOCAyIC42MDYgMCAxLjI1NC0uNzYgMS43MzgtMkg1Ljc2MlpNMi44MSAzSDQuN2MuMjMtLjY1Ny41MS0xLjIzLjgyNy0xLjY5NUE2LjUwMSA2LjUwMSAwIDAgMCAyLjgxIDNabTkuMzggMGE2LjUwMSA2LjUwMSAwIDAgMC0yLjcxNy0xLjY5NWMuMzE3LjQ2NS41OTcgMS4wMzguODI3IDEuNjk1aDEuODlaTTUuNzYyIDNoMy40NzZDOC43NTQgMS43NiA4LjEwNiAxIDcuNSAxYy0uNjA2IDAtMS4yNTQuNzYtMS43MzggMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdsb2JlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkdyYWIgPSBmdW5jdGlvbiBFdWlJY29uR3JhYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy41IDZjLjI3NiAwIC41LjIzMi41LjUgMCAuMjc2LS4yMjkuNS0uNS41aC0xMWEuNTA1LjUwNSAwIDAgMS0uNS0uNWMwLS4yNzYuMjI5LS41LjUtLjVoMTFabTAgM2MuMjc2IDAgLjUuMjMyLjUuNSAwIC4yNzYtLjIyOS41LS41LjVoLTExYS41MDUuNTA1IDAgMCAxLS41LS41YzAtLjI3Ni4yMjktLjUuNS0uNWgxMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyYWI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uR3JhYk9tbmlkaXJlY3Rpb25hbCA9IGZ1bmN0aW9uIEV1aUljb25HcmFiT21uaWRpcmVjdGlvbmFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA1YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptNCAwYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpNNyA4YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFptMyAxYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptLTMgM2ExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBabTMgMWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HcmFiT21uaWRpcmVjdGlvbmFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkdyYWJIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkdyYWJIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMi41YzAtLjI3Ni4yMzItLjUuNS0uNS4yNzYgMCAuNS4yMjkuNS41djExYzAgLjI3Ni0uMjMyLjUtLjUuNWEuNTAzLjUwMyAwIDAgMS0uNS0uNXYtMTFabTMgMGMwLS4yNzYuMjMyLS41LjUtLjUuMjc2IDAgLjUuMjI5LjUuNXYxMWMwIC4yNzYtLjIzMi41LS41LjVhLjUwMy41MDMgMCAwIDEtLjUtLjV2LTExWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR3JhYkhvcml6b250YWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uR3JhZGllbnQgPSBmdW5jdGlvbiBFdWlJY29uR3JhZGllbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMSAyYTEgMSAwIDAgMSAxLTFoMTJhMSAxIDAgMCAxIDEgMXYxMmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMVYyWm00IDBoMXYxMkg1VjJabTMgMTJWMmgydjEySDhabTMgMGgzVjJoLTN2MTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HcmFkaWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25HcmlkID0gZnVuY3Rpb24gRXVpSWNvbkdyaWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDVWMWg0djRIMVptMy0xVjJIMnYyaDJabTIgMVYxaDR2NEg2Wm0zLTFWMkg3djJoMlptMiAxVjFoNHY0aC00Wm0xLTFoMlYyaC0ydjJaTTEgMTBWNmg0djRIMVptMy0xVjdIMnYyaDJabTIgMVY2aDR2NEg2Wm0zLTFWN0g3djJoMlptMiAxVjZoNHY0aC00Wm0zLTFWN2gtMnYyaDJaTTEgMTV2LTRoNHY0SDFabTEtMWgydi0ySDJ2MlptNCAxdi00aDR2NEg2Wm0xLTFoMnYtMkg3djJabTQgMXYtNGg0djRoLTRabTEtMWgydi0yaC0ydjJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HcmlkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkhlYXJ0ID0gZnVuY3Rpb24gRXVpSWNvbkhlYXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy40MDIgMy4wOThhMy43NSAzLjc1IDAgMCAwLTUuMzA0IDUuMzA0bDUuNTU4IDUuMjdMOCAxNGw1Ljg5Mi01LjU4OGEzLjc1IDMuNzUgMCAxIDAtNS4yOTQtNS4zMTNMOCAzLjY5N2wtLjU5OC0uNTk5Wk0yLjc5NiA3LjY4NWEyLjc0NyAyLjc0NyAwIDAgMSAuMDEtMy44OCAyLjc1IDIuNzUgMCAwIDEgMy44ODkgMEw4IDUuMTExbDEuMzA1LTEuMzA2YTIuNzUgMi43NSAwIDEgMSAzLjg5IDMuODlMOCAxMi42MiAyLjc5NiA3LjY4NVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkhlYXJ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkhlYXRtYXAgPSBmdW5jdGlvbiBFdWlJY29uSGVhdG1hcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDlhMyAzIDAgMSAxIDAgNiAzIDMgMCAwIDEgMC02Wm0wIDFhMiAyIDAgMSAwIDAgNCAyIDIgMCAwIDAgMC00Wk00IDJhMiAyIDAgMSAxIDAgNCAyIDIgMCAwIDEgMC00Wm0wIDFhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yWm0wIDVhNCA0IDAgMSAxIDAgOCA0IDQgMCAwIDEgMC04Wm0wIDFhMyAzIDAgMSAwIDAgNiAzIDMgMCAwIDAgMC02Wm04LTlhNCA0IDAgMSAxIDAgOCA0IDQgMCAwIDEgMC04Wm0wIDFhMyAzIDAgMSAwIDAgNiAzIDMgMCAwIDAgMC02WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSGVhdG1hcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25IZWxwID0gZnVuY3Rpb24gRXVpSWNvbkhlbHAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJtMTMuNiAxMi4xODYtMS4zNTctMS4zNThjLS4wMjUtLjAyNS0uMDU4LS4wMzQtLjA4NC0uMDU2LjUzLS43OTQuODQtMS43NDYuODQtMi43NzNhNC45NzcgNC45NzcgMCAwIDAtLjg0LTIuNzcyYy4wMjYtLjAyLjA1OS0uMDMuMDg0LS4wNTZMMTMuNiAzLjgxM2E2Ljk2IDYuOTYgMCAwIDEgMCA4LjM3M1pNOCAxNUE2Ljk1NiA2Ljk1NiAwIDAgMSAzLjgxNCAxMy42bDEuMzU4LTEuMzU4Yy4wMjUtLjAyNS4wMzQtLjA1Ny4wNTUtLjA4NEM2LjAyIDEyLjY4OCA2Ljk3NCAxMyA4IDEzYTQuOTc4IDQuOTc4IDAgMCAwIDIuNzczLS44NGMuMDIuMDI2LjAzLjA1OC4wNTYuMDgzbDEuMzU3IDEuMzU4QTYuOTU2IDYuOTU2IDAgMCAxIDggMTVabS01LjYwMS0yLjgxM2E2Ljk2MyA2Ljk2MyAwIDAgMSAwLTguMzczbDEuMzU5IDEuMzU4Yy4wMjQuMDI1LjA1Ny4wMzUuMDg0LjA1NkE0Ljk3IDQuOTcgMCAwIDAgMyA4YzAgMS4wMjcuMzEgMS45OC44NDIgMi43NzMtLjAyNy4wMjItLjA2LjAzMS0uMDg0LjA1NmwtMS4zNiAxLjM1OFptNS42LS4xODdBNCA0IDAgMSAxIDggNGE0IDQgMCAwIDEgMCA4Wk04IDFjMS41NzMgMCAzLjAxOS41MjUgNC4xODcgMS40bC0xLjM1NyAxLjM1OGMtLjAyNS4wMjUtLjAzNS4wNTctLjA1Ni4wODRBNC45NzkgNC45NzkgMCAwIDAgOCAzYTQuOTc5IDQuOTc5IDAgMCAwLTIuNzczLjg0MmMtLjAyMS0uMDI3LS4wMy0uMDU5LS4wNTUtLjA4NEwzLjgxNCAyLjRBNi45NTcgNi45NTcgMCAwIDEgOCAxWm0wLTFhOC4wMDEgOC4wMDEgMCAxIDAgLjAwMyAxNi4wMDJBOC4wMDEgOC4wMDEgMCAwIDAgOCAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSGVscDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ib21lID0gZnVuY3Rpb24gRXVpSWNvbkhvbWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm04LjEzIDEuMjI5IDUuNSA0LjQ3YTEgMSAwIDAgMSAuMzcuNzc3VjE0YTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjYuNDc2YTEgMSAwIDAgMSAuMzctLjc3Nmw1LjUtNC40NzFhMSAxIDAgMCAxIDEuMjYgMFpNMTMgNi40NzYgNy41IDIuMDA1IDIgNi40NzVWMTRoMTFWNi40NzZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ib21lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbklJbkNpcmNsZSA9IGZ1bmN0aW9uIEV1aUljb25JSW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy41IDExLjUwOCA3LjQ2OCA4SDYuMjVWN2gyLjQwMWwuMDMgMy41MDhIOS44djFINy41Wm0tLjI1LTYuMjAyYS44My44MyAwIDAgMSAuMjA3LS41NzdjLjEzNy0uMTUzLjMzNC0uMjI5LjU5LS4yMjkuMjU2IDAgLjQ1NC4wNzYuNTk0LjIzLjE0LjE1Mi4yMDkuMzQ1LjIwOS41NzYgMCAuMjI4LS4wNy40MTctLjIxLjU2OC0uMTQuMTUtLjMzNy4yMjYtLjU5My4yMjYtLjI1NiAwLS40NTMtLjA3NS0uNTktLjIyNmEuODEuODEgMCAwIDEtLjIwNy0uNTY4Wk04IDEzQTUgNSAwIDEgMCA4IDNhNSA1IDAgMCAwIDAgMTBabTAgMUE2IDYgMCAxIDEgOCAyYTYgNiAwIDAgMSAwIDEyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSUluQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkltYWdlID0gZnVuY3Rpb24gRXVpSWNvbkltYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA1YTIgMiAwIDEgMS00IDAgMiAyIDAgMCAxIDQgMHptOS00YTEgMSAwIDAgMSAxIDF2MTJhMSAxIDAgMCAxLTEgMUgxYTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xem0tMy40NDggNi4xMzQtMy43NiAyLjc2OWEuNS41IDAgMCAxLS40MzYuMDc3bC0uMDg3LS4wMzQtMS43MTMtLjg3TDEgMTEuOFYxNGgxNFY5Ljc1MWwtMy40NDgtMi42MTd6TTE1IDJIMXY4LjYzNWw0LjI4LTIuNTU4YS41LjUgMCAwIDEgLjM4OS0uMDU0bC4wOTQuMDM3IDEuNjg0Ljg1NSAzLjgxMy0yLjgwN2EuNS41IDAgMCAxIC41Mi0uMDQ1bC4wNzkuMDVMMTUgOC40OTVWMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkltYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkltcG9ydCA9IGZ1bmN0aW9uIEV1aUljb25JbXBvcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm05IDEwLjExNCAxLjg1LTEuOTQzYS41Mi41MiAwIDAgMSAuNzcgMGMuMjE0LjIyOC4yMTQuNiAwIC44MjlsLTEuOTUgMi4wNWExLjU1MiAxLjU1MiAwIDAgMS0yLjMxIDBMNS40MSA5YS42MTcuNjE3IDAgMCAxIDAtLjgyOS41Mi41MiAwIDAgMSAuNzcgMEw4IDEwLjA4MlYxLjU1NkM4IDEuMjQ5IDguMjI0IDEgOC41IDFzLjUuMjQ5LjUuNTU2djguNTU4Wk00LjE4IDZhLjk5My45OTMgMCAwIDAtLjk3Mi44MDRsLTEuMTg5IDZBLjk5NS45OTUgMCAwIDAgMi45OTEgMTRoMTEuMDE4YTEgMSAwIDAgMCAuOTcyLTEuMTk2bC0xLjE5LTZhLjk5My45OTMgMCAwIDAtLjk3LS44MDRINC4xOFpNNiA1djFoNVY1aDEuODI1Yy45NDYgMCAxLjc2LjY3MyAxLjk0NiAxLjYwOGwxLjE5IDZBMiAyIDAgMCAxIDE0LjAxNiAxNUgyLjk4NGExLjk5MiAxLjk5MiAwIDAgMS0xLjk0NS0yLjM5MmwxLjE5LTZDMi40MTQgNS42NzMgMy4yMjkgNSA0LjE3NCA1SDZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbXBvcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW5kZXggPSBmdW5jdGlvbiBFdWlJY29uSW5kZXgoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAySDN2MTFoMTF2MUgyVjFoMTJ2MTJoLTFWMlpNNiA1aDUuOTk5VjRINnYxWk00IDVWNGgxdjFINFptMiAzVjdoNnYxSDZaTTQgOFY3aDF2MUg0Wm0yIDN2LTFoNnYxSDZabS0yIDB2LTFoMXYxSDRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbmRleFRlbXBvcmFyeSA9IGZ1bmN0aW9uIEV1aUljb25JbmRleFRlbXBvcmFyeShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTNWMmgxMVYxSDJ2MTNoMnYtMUgzWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTk5IDVINlY0aDUuOTk5djFaTTQgNHYxaDFWNEg0Wm0yIDN2MWg0VjdINlpNNCA3djFoMVY3SDRabTIgM3YxaDJ2LTFINlptLTIgMHYxaDF2LTFINFptMTAtN2gtMXYxaDFWM1ptLTEgMmgxdjFoLTFWNVptMSAyaC0xdjFoMVY3Wm0tMSAyaDF2MWgtMVY5Wm0xIDJoLTF2MWgxdi0xWm0tMSAyaDF2MWgtMXYtMVptLTcgMEg1djFoMXYtMVptMSAwaDF2MUg3di0xWm0zIDBIOXYxaDF2LTFabTEgMGgxdjFoLTF2LTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleFRlbXBvcmFyeTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbmRleENsb3NlID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4Q2xvc2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAySDJ2MTFoNnYxSDFWMWgxMnY2aC0xVjJaTTUgNWg1Ljk5OVY0SDV2MVpNMyA1VjRoMXYxSDNabTIgM1Y3aDN2MUg1Wk0zIDhWN2gxdjFIM1ptMiAzdi0xaDJ2MUg1Wm01LjUtMS4yMDdMOS4wODYgOC4zNzlsLS43MDcuNzA3TDkuNzkzIDEwLjVsLTEuNDE0IDEuNDE0LjcwNy43MDcgMS40MTQtMS40MTQgMS40MTQgMS40MTQuNzA3LS43MDctMS40MTQtMS40MTQgMS40MTQtMS40MTQtLjcwNy0uNzA3TDEwLjUgOS43OTNaTTMgMTF2LTFoMXYxSDNabTcuNS01YTQuNSA0LjUgMCAxIDEgMCA5IDQuNSA0LjUgMCAwIDEgMC05WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhDbG9zZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbmRleEVkaXQgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhFZGl0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMkgydjExaDR2MUgxVjFoMTJ2NWgtMVYyWk01IDVoNS45OTlWNEg1djFaTTMgNVY0aDF2MUgzWm0yIDNWN2g2djFINVpNMyA4VjdoMXYxSDNabTIgM3YtMWgzdjFINVptLTIgMHYtMWgxdjFIM1ptNC41MDIgMS40MUwxMi45MTMgNyAxNSA5LjA4N2wtNS40MSA1LjQxTDcgMTVsLjUwMi0yLjU5WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhFZGl0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkluZGV4Rmx1c2ggPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhGbHVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNC41MTYgOUgxMC41YS41LjUgMCAwIDEgMC0xaDQuMDE2TDEzLjExIDUuOTQ4Yy0uMTcxLS4yNTItLjEzNy0uNjIuMDc5LS44MjEuMjE3LS4yLjUzMS0uMTU5LjcwMy4wOTJsMiAyLjkxNmEuNjQ4LjY0OCAwIDAgMSAuMTA4LjM5Ny42NDMuNjQzIDAgMCAxLS4xMDguMzMybC0yIDIuOTE4QS40NzguNDc4IDAgMCAxIDEzLjUgMTJhLjQ1Ny40NTcgMCAwIDEtLjMxMi0uMTI3Yy0uMjE2LS4yMDItLjI1LS41Ny0uMDc5LS44MkwxNC41MTYgOVpNMyAxNUgxYTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xaDcuOGMuMjc0IDAgLjUzNy4xMTMuNzI2LjMxMmwyLjIgMi40MjhjLjE3Ni4xODYuMjc0LjQzMy4yNzQuNjg5VjdoLTFWNUg4LjVhLjUuNSAwIDAgMS0uNS0uNVYySDN2MTJoOHYtNGgxdjRhMSAxIDAgMCAxLTEgMUgzWm0tMS0xVjJIMXYxMmgxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhGbHVzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbmRleE1hcHBpbmcgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhNYXBwaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA4SDQuOTE1YTEuNSAxLjUgMCAxIDEgMC0xSDhWMi41QTEuNSAxLjUgMCAwIDEgOS41IDFoMi41ODVhMS41IDEuNSAwIDEgMSAwIDFIOS41YS41LjUgMCAwIDAtLjUuNXYxMGEuNS41IDAgMCAwIC41LjVoMi41ODVhMS41IDEuNSAwIDEgMSAwIDFIOS41QTEuNSAxLjUgMCAwIDEgOCAxMi41VjhaTTMuNSAzYTEuNSAxLjUgMCAxIDEgMC0zIDEuNSAxLjUgMCAwIDEgMCAzWm0wIDEyYTEuNSAxLjUgMCAxIDEgMC0zIDEuNSAxLjUgMCAwIDEgMCAzWm0xMC02YTEuNSAxLjUgMCAxIDEgMC0zIDEuNSAxLjUgMCAwIDEgMCAzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhNYXBwaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkluZGV4T3BlbiA9IGZ1bmN0aW9uIEV1aUljb25JbmRleE9wZW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAySDJ2MTFoNnYxSDFWMWgxMnY2aC0xVjJaTTUgNWg1Ljk5OVY0SDV2MVpNMyA1VjRoMXYxSDNabTIgM1Y3aDN2MUg1Wk0zIDhWN2gxdjFIM1ptMiAzdi0xaDJ2MUg1Wm01LTFIOHYxaDJ2Mmgxdi0yaDJ2LTFoLTJWOGgtMXYyWm0tNyAxdi0xaDF2MUgzWm03LjUtNWE0LjUgNC41IDAgMSAxIDAgOSA0LjUgNC41IDAgMCAxIDAtOVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4T3BlbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbmRleFJ1bnRpbWUgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhSdW50aW1lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMkgydjExaDZ2MUgxVjFoMTJ2Ni44MzlsLTEtLjcwN1YyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxMXYtMUg1djFoM3ptMC0zLjA1NWMwLS4zNDIuMDgyLS42NjQuMjMtLjk0NUg1djFoM3YtLjA1NXpNNSA1aDUuOTk5VjRINXYxek0zIDR2MWgxVjRIM3ptMCAzdjFoMVY3SDN6bTAgM3YxaDF2LTFIM3ptMTEuNjA3LjItNC4zMi0zLjA1NUM5LjcyNyA2Ljc1IDkgNy4yMDQgOSA3Ljk0NXY2LjEwOGMwIC43NC43MjYgMS4xOTYgMS4yODcuOGw0LjMyLTMuMDU1Yy41MjQtLjM3LjUyNC0xLjIyOCAwLTEuNTk4elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhSdW50aW1lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkluZGV4U2V0dGluZ3MgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhTZXR0aW5ncyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgNWg1Ljk5OVY0SDV2MVpNMyA1aDFWNEgzdjFabTAgM2gxVjdIM3YxWm02LjAyMi0xLS4xNS4zMzMtLjczNy0uMDc4LS40NjctLjA1LS4zMy4zNDJBNS4xMyA1LjEzIDAgMCAwIDYuOTQ4IDhINVY3aDQuMDIyWm0tMy4wMDUgM0w2IDEwLjA1NmwuMzA2LjQxMS4zOTkuNTMzSDV2LTFoMS4wMTdaTTMgMTFoMXYtMUgzdjFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xMyA3LjA1LS4xNjItLjM1OS0uMi0uNDQ3LS40Ny0uMTFBNS4wMTkgNS4wMTkgMCAwIDAgMTIgNi4wOThWMkgydjExaDQuMzZjLjE1Ny4zNTQuMzU1LjY5LjU5IDFIMVYxaDEydjYuMDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4wMDQgN2MuMzIyIDAgLjY0Ni4wMzYuOTY2LjEwOWwuNTk1IDEuMjkzIDEuNDY1LS4xNTJjLjQ1Ny40NjIuNzg2IDEuMDE2Ljk2OSAxLjYxbC0uODcgMS4xNC44NzEgMS4xNDFhMy45NCAzLjk0IDAgMCAxLS4zODcuODU5IDQuMDU4IDQuMDU4IDAgMCAxLS41ODMuNzVsLTEuNDY1LS4xNTItLjU5NCAxLjI5MmE0LjM3IDQuMzcgMCAwIDEtMS45NDEuMDAxbC0uNTk0LTEuMjkzLTEuNDY2LjE1MmEzLjk1NCAzLjk1NCAwIDAgMS0uOTY5LTEuNjFsLjg3LTEuMTRMNyA5Ljg2YTMuOTQ3IDMuOTQ3IDAgMCAxIC45Ny0xLjYxbDEuNDY2LjE1Mi41OTMtMS4yOTJhNC4zNyA0LjM3IDAgMCAxIC45NzUtLjExWk0xMSAxMmExIDEgMCAxIDAgLjAwMi0xLjk5OEExIDEgMCAwIDAgMTEgMTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleFNldHRpbmdzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkluZmluaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkluZmluaXR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4zNyA5LjQ1N0ExLjk5NCAxLjk5NCAwIDAgMSAzLjk5MyAxMGEyIDIgMCAxIDEgMS40MDMtMy40MzNsLjYwMS42NzkgMS4zMzYtMS41MDgtLjQ2Mi0uNTIyYTQgNCAwIDEgMC0uMDQxIDUuNjEzbC4wMjEtLjAyMiAzLjc3Ny00LjI2NS4wMDIuMDAxYTIgMiAwIDEgMS0uMDI0IDIuODlsLS42MDEtLjY3OS0xLjMzNiAxLjUwOC40NjIuNTIyYTQgNCAwIDEgMCAwLTUuNTY5bC0zLjc0IDQuMjIzYTEuOTkxIDEuOTkxIDAgMCAxLS4wMi4wMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZmluaXR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbklucHV0T3V0cHV0ID0gZnVuY3Rpb24gRXVpSWNvbklucHV0T3V0cHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMTMuOTk5di0yLjk5aDFWMTVIMFYxaDExdjMuOTk5aC0xVjIuMDAxSDF2MTEuOTk4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41IDEwVjlIMTF2MXpNMTMgOS41bDMtMy0zLTN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjUgNi41djZsLTMtM3pNNyA3VjZoNi41djF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbnB1dE91dHB1dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbnNwZWN0ID0gZnVuY3Rpb24gRXVpSWNvbkluc3BlY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4zNjMgMTQuNjU4YS41LjUgMCAxIDEtLjcxMy43bC0yLjk3LTMuMDIzYS41LjUgMCAwIDEgLjAwMS0uN0EzLjkgMy45IDAgMSAwIDguOSAxMi44YS41LjUgMCAxIDEgMCAuOTk5IDQuOSA0LjkgMCAxIDEgMy44MjEtMS44MzNsMi42NDIgMi42OTFaTTMuMDk0IDEzYS41LjUgMCAxIDEgMCAxSDIuNUEyLjUgMi41IDAgMCAxIDAgMTEuNXYtOUEyLjUgMi41IDAgMCAxIDIuNSAwaDlBMi41IDIuNSAwIDAgMSAxNCAyLjV2LjU5OWEuNS41IDAgMSAxLTEgMFYyLjVBMS41IDEuNSAwIDAgMCAxMS41IDFoLTlBMS41IDEuNSAwIDAgMCAxIDIuNXY5QTEuNSAxLjUgMCAwIDAgMi41IDEzaC41OTRaTTIuNSAzYS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWm0yIDBhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFabTIgMGEuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptLTQgMmEuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptMiAwYS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWm0tMiAxYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0wIDNhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFabTYtNmEuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptMiAwYS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWm0tOCA4YS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5zcGVjdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbnZlcnQgPSBmdW5jdGlvbiBFdWlJY29uSW52ZXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxMy4yNWE1LjI1IDUuMjUgMCAxIDAgMC0xMC41IDUuMjUgNS4yNSAwIDAgMCAwIDEwLjVaTTggMTRBNiA2IDAgMSAxIDggMmE2IDYgMCAwIDEgMCAxMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMmE2IDYgMCAxIDAgMCAxMlYyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW52ZXJ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbklwID0gZnVuY3Rpb24gRXVpSWNvbklwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhabS0yIDNIOHY2aDFWOS4wMTRoMWMuMjk4LS4wMTMgMiAwIDItMi4wMTggMC0xLjc0LTEuMzE0LTEuOTUyLTEuODI1LTEuOTg3TDEwIDVaTTYgNUg1djZoMVY1Wm00IC45ODRjLjY2NyAwIDEgLjMzNiAxIDEuMDA4QzExIDcuNjY0IDEwLjY2NyA4IDEwIDhIOVY1Ljk4NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbklwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbklzc3VlID0gZnVuY3Rpb24gRXVpSWNvbklzc3VlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdpc3N1ZScpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGNsaXBQYXRoOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSwgXCIpXCIpLFxuICAgIGZpbGw6IFwiIzM0Mzc0MVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggLjVjNC4xMzYgMCA3LjUgMy4zNjQgNy41IDcuNXMtMy4zNjQgNy41LTcuNSA3LjVTLjUgMTIuMTM2LjUgOCAzLjg2NC41IDggLjV6bTAgLjg4MmE2LjYxOCA2LjYxOCAwIDEwMCAxMy4yMzZBNi42MTggNi42MTggMCAwMDggMS4zODJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDhhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwelwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImNsaXBQYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDBoMTZ2MTZIMHpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Jc3N1ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25LZXkgPSBmdW5jdGlvbiBFdWlJY29uS2V5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDVhMiAyIDAgMSAxLTQgMCAyIDIgMCAwIDEgNCAwWm0tMSAwYTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgNmE1IDUgMCAxIDEgMy4wODYgNC42MmwtMS4yMzIgMS4yMzRBLjUuNSAwIDAgMSA3LjUgMTJINnYxLjVhLjUuNSAwIDAgMS0uNS41SDR2MS41YS41LjUgMCAwIDEtLjUuNWgtM2EuNS41IDAgMCAxLS41LS41di0zYS41LjUgMCAwIDEgLjE3NS0uMzhsNS45MzItNS4wODVBNS4wMTkgNS4wMTkgMCAwIDEgNiA2Wm01LTRhNCA0IDAgMCAwLTMuODUzIDUuMDguNS41IDAgMCAxLS4xNTYuNTE1TDEgMTIuNzNWMTVoMnYtMS41YS41LjUgMCAwIDEgLjUtLjVINXYtMS41YS41LjUgMCAwIDEgLjUtLjVoMS43OTNsLjg3Ny0uODc3YTUuMDMzIDUuMDMzIDAgMCAxLS41MDMtLjM5Ni41LjUgMCAxIDEgLjY2Ni0uNzQ1QTMuOTgzIDMuOTgzIDAgMCAwIDExIDEwaC4wMDVBNCA0IDAgMCAwIDExIDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LZXk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uS2V5Ym9hcmQgPSBmdW5jdGlvbiBFdWlJY29uS2V5Ym9hcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMCAzaDE2djExSDBWM1ptMTUgMTBWNEgxdjloMTRaTTIgNWgydjFIMlY1Wm0yIDd2LTFIMnYxaDJabTEwLTF2MWgtMnYtMWgyWm0tMyAxdi0xSDV2MWg2Wk01IDVoMXYxSDVWNVpNMyA3SDJ2MWgxVjdabTMgMGgxdjFINlY3Wk0zIDlIMnYxaDFWOVptMyAwaDF2MUg2VjlabTItNEg3djFoMVY1Wk00IDdoMXYxSDRWN1ptNSAwSDh2MWgxVjdabTEgMGgxdjFoLTFWN1pNNSA5SDR2MWgxVjlabTMgMGgxdjFIOFY5Wm0zIDBoLTF2MWgxVjlaTTkgNWgxdjFIOVY1Wm0zIDBoLTF2MWgxVjVabTEgMGgxdjFoLTFWNVptMSAyaC0ydjNoMlY3WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktleWJvYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbktxbEZpZWxkID0gZnVuY3Rpb24gRXVpSWNvbktxbEZpZWxkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDEwLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDEwXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA5YTUgNSAwIDEgMSAwLTggNSA1IDAgMSAxIDAgOFptLjc1LS42OTJhNCA0IDAgMSAwIDAtNi42MTVBNC45ODEgNC45ODEgMCAwIDEgMTAgNWE0Ljk4MSA0Ljk4MSAwIDAgMS0xLjI1IDMuMzA4Wk00LjEzMyA4VjUuNTU5aDIuNDk2di0uNjI1SDQuMTMzVjIuOTk2aDIuNzE5di0uNjMzSDMuNDNWOGguNzAzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsRmllbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uS3FsRnVuY3Rpb24gPSBmdW5jdGlvbiBFdWlJY29uS3FsRnVuY3Rpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDdIM3YyaDR2MmwzLTMtMy0zdjJaTTYgNlY1YTEgMSAwIDAgMSAxLjcwNy0uNzA3bDMgM2ExIDEgMCAwIDEgMCAxLjQxNGwtMyAzQTEgMSAwIDAgMSA2IDExdi0xSDNhMSAxIDAgMCAxLTEtMVY3YTEgMSAwIDAgMSAxLTFoM1ptNy41LTNhLjUuNSAwIDAgMSAuNS41djlhLjUuNSAwIDEgMS0xIDB2LTlhLjUuNSAwIDAgMSAuNS0uNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbEZ1bmN0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbktxbE9wZXJhbmQgPSBmdW5jdGlvbiBFdWlJY29uS3FsT3BlcmFuZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTExLjE5MiAxMC4xNDUgMi4yOTgtMS43OTJjLjI1OS0uMTk2LjI1OS0uNTA5IDAtLjcwNmwtMi4yOTgtMS43OTJjLS4yNTYtLjE5Ni0uMjU2LS41MTMgMC0uNzA4YS44MS44MSAwIDAgMSAuOTMgMGwyLjMgMS43OTFjLjc3Mi41OS43NyAxLjUzNyAwIDIuMTI0bC0yLjMgMS43OTFhLjgxLjgxIDAgMCAxLS45MyAwYy0uMjU2LS4xOTUtLjI1Ni0uNTEyIDAtLjcwOFptLTYuMzg0LTQuMjlMMi41MSA3LjY0N2MtLjI1OS4xOTYtLjI1OS41MDkgMCAuNzA2bDIuMjk4IDEuNzkyYy4yNTYuMTk2LjI1Ni41MTMgMCAuNzA4YS44MS44MSAwIDAgMS0uOTMgMGwtMi4zLTEuNzkxYy0uNzcyLS41OS0uNzctMS41MzcgMC0yLjEyNGwyLjMtMS43OTFhLjgxLjgxIDAgMCAxIC45MyAwYy4yNTYuMTk1LjI1Ni41MTIgMCAuNzA4Wk02LjUgNmgzYS41LjUgMCAwIDEgMCAxaC0zYS41LjUgMCAwIDEgMC0xWm0wIDNoM2EuNS41IDAgMCAxIDAgMWgtM2EuNS41IDAgMCAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbE9wZXJhbmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uS3FsU2VsZWN0b3IgPSBmdW5jdGlvbiBFdWlJY29uS3FsU2VsZWN0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDEyYTQgNCAwIDEgMCAwLTggNCA0IDAgMCAwIDAgOFptMCAxQTUgNSAwIDEgMSA1IDNhNSA1IDAgMCAxIDAgMTBabTYtMWE0IDQgMCAxIDAgMC04IDQgNCAwIDAgMCAwIDhabTAgMWE1IDUgMCAxIDEgMC0xMCA1IDUgMCAwIDEgMCAxMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbFNlbGVjdG9yOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbktxbFZhbHVlID0gZnVuY3Rpb24gRXVpSWNvbktxbFZhbHVlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0YTUgNSAwIDEgMSAwIDggNSA1IDAgMSAxIDAtOFptLS43NS42OTJhNCA0IDAgMSAwIDAgNi42MTVBNC45ODEgNC45ODEgMCAwIDEgNiA4YzAtMS4yNjguNDcyLTIuNDI2IDEuMjUtMy4zMDhaTTExLjM0OCAxMWwyLjA3OC01LjYzN2gtLjczOWwtMS42NTYgNC43MjdoLS4wNjJMOS4zMTMgNS4zNjNoLS43MzlMMTAuNjUyIDExaC42OTZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LcWxWYWx1ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25LdWJlcm5ldGVzTm9kZSA9IGZ1bmN0aW9uIEV1aUljb25LdWJlcm5ldGVzTm9kZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNCAxMS40MlY0LjU4TDggMS4xNTIgMiA0LjU4djYuODRsNiAzLjQyOCA2LTMuNDI4ek04IDE2bDctNFY0TDggMCAxIDR2OGw3IDR6TTggNC42MDdsMyAxLjcxNFY5LjY4bC0zIDEuNzE0LTMtMS43MTRWNi4zMmwzLTEuNzE0em00IDEuMTM0djQuNTE4bC00IDIuMjg2LTQtMi4yODZWNS43NDFsNC0yLjI4NiA0IDIuMjg2elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkt1YmVybmV0ZXNOb2RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkt1YmVybmV0ZXNQb2QgPSBmdW5jdGlvbiBFdWlJY29uS3ViZXJuZXRlc1BvZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNCA1LjE1MXY2LjI2OWwtNS41IDMuMTQyVjguMjlMMTQgNS4xNTF6bS0uNTA4LS44NjFMOCAxLjE1MiAyLjUwOCA0LjI5IDggNy40MjRsNS40OTItMy4xMzR6TTIgNS4xNTFsNS41IDMuMTR2Ni4yNzJMMiAxMS40MlY1LjE1ek0xNSAxMmwtNyA0LTctNFY0bDctNCA3IDR2OHpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LdWJlcm5ldGVzUG9kOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxhdW5jaCA9IGZ1bmN0aW9uIEV1aUljb25MYXVuY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTAgNGEyIDIgMCAxIDAgMCA0IDIgMiAwIDAgMCAwLTRaTTkgNmExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNjc5IDEyLjk2N2MuMzUzLS4xMzYuNjk3LS4zIDEuMDMzLS40NzVsMS4zNiAyLjI2NWEuNS41IDAgMCAwIC44MjguMDQzbDMtNGEuNS41IDAgMCAwLS4wNDYtLjY1NGwtLjg4Ni0uODg2QzEzLjYwNCA3LjQ1NiAxNSA0LjkxMyAxNSAxLjVhLjUuNSAwIDAgMC0uNS0uNWMtMy40MTMgMC01Ljk1NiAxLjM5NS03Ljc2IDMuMDMzbC0uODg2LS44ODdBLjUuNSAwIDAgMCA1LjIgMy4xbC00IDNhLjUuNSAwIDAgMCAuMDQzLjgyOWwyLjI2NCAxLjM1OGE5LjU5IDkuNTkgMCAwIDAtLjQ3NSAxLjAzNnYuMDAxYS41LjUgMCAwIDAgLjExNC41M2wzIDNjLjEzOS4xMzguMzUuMTgyLjUzMy4xMTNaTTQuMDkgOS4zODRsMi41MjUgMi41MjVhMTQuNjE2IDE0LjYxNiAwIDAgMCAzLjU1NS0yLjI4NWMxLjg0MS0xLjYxMiAzLjY1Ny00LjA3NiAzLjgxOC03LjYxMi0zLjUzNy4xNi02LjAwMSAxLjk3Ni03LjYxMyAzLjgxN0ExNC42MTcgMTQuNjE3IDAgMCAwIDQuMDkgOS4zODRabS0uMDk2LTEuOTdhMTUuNjE2IDE1LjYxNiAwIDAgMSAyLjAzLTIuNjgybC0uNTcyLS41NzItMy4wNTggMi4yOTQgMS42Ljk2Wm01LjU1MSA2LjE5MS0uOTYtMS42YTE1LjYxNyAxNS42MTcgMCAwIDAgMi42ODItMi4wM2wuNTcyLjU3Mi0yLjI5NCAzLjA1OFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjg1NCAxMi4xNDZhLjUuNSAwIDAgMSAwIC43MDhsLTIgMmEuNS41IDAgMCAxLS43MDgtLjcwOGwyLTJhLjUuNSAwIDAgMSAuNzA4IDBabTIgMS43MDhhLjUuNSAwIDAgMC0uNzA4LS43MDhsLTEgMWEuNS41IDAgMCAwIC43MDguNzA4bDEtMVptLTMtMy43MDhhLjUuNSAwIDAgMSAwIC43MDhsLTEgMWEuNS41IDAgMCAxLS43MDgtLjcwOGwxLTFhLjUuNSAwIDAgMSAuNzA4IDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MYXVuY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTGF5ZXJzID0gZnVuY3Rpb24gRXVpSWNvbkxheWVycyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMjc2IDEuMDUzYS41LjUgMCAwIDEgLjQ0OCAwbDYgM2EuNS41IDAgMCAxIDAgLjg5NGwtNiAzYS41LjUgMCAwIDEtLjQ0OCAwbC02LTNhLjUuNSAwIDAgMSAwLS44OTRsNi0zek0yLjYxOCA0LjUgNy41IDYuOTQxIDEyLjM4MiA0LjUgNy41IDIuMDU5IDIuNjE4IDQuNXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMDUzIDcuMjc2YS41LjUgMCAwIDEgLjY3LS4yMjNMNy41IDkuOTRsNS43NzYtMi44ODhhLjUuNSAwIDEgMSAuNDQ4Ljg5NGwtNiAzYS41LjUgMCAwIDEtLjQ0OCAwbC02LTNhLjUuNSAwIDAgMS0uMjIzLS42N3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNzI0IDEwLjA1M2EuNS41IDAgMSAwLS40NDguODk0bDYgM2EuNS41IDAgMCAwIC40NDggMGw2LTNhLjUuNSAwIDEgMC0uNDQ4LS44OTRMNy41IDEyLjk0bC01Ljc3Ni0yLjg4OHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxheWVyczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25MZXR0ZXJpbmcgPSBmdW5jdGlvbiBFdWlJY29uTGV0dGVyaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwibTUgMyAzIDlIN0w2IDlIM2wtMSAzSDFsMy05aDF6bS0uNSAxLjVMNS42NjcgOEgzLjMzM0w0LjUgNC41em03Ljk5IDEuNjQ3QzEyLjE2IDYuMDA1IDExLjc2IDYgMTEuNSA2Yy0uMzU5IDAtMS4wMjIuMTc1LTEuNjMyLjgzOGwtLjczNi0uNjc2QzkuOTI5IDUuMjk0IDEwLjg1OSA1IDExLjUgNWguMDE2Yy4yNSAwIC44MzYgMCAxLjM2OS4yMjguMjgxLjEyLjU2OC4zMTMuNzgyLjYxNy4yMTYuMzA3LjMzMy42OTMuMzMzIDEuMTU1djVoLTF2LS4zNTRhMi4xMDEgMi4xMDEgMCAwIDEtLjA2NC4wMzhjLS41NTQuMzE3LTEuMTY2LjMxNi0xLjQyLjMxNmgtLjAzMmMtLjI1IDAtLjgzNiAwLTEuMzY4LS4yMjhhMS44MSAxLjgxIDAgMCAxLS43ODMtLjYxN0M5LjExNyAxMC44NDggOSAxMC40NjIgOSAxMGMwLS40NjIuMTE3LS44NDguMzMzLTEuMTU1LjIxNC0uMzA0LjUtLjQ5Ni43ODMtLjYxN0MxMC42NDggOCAxMS4yMzMgOCAxMS40ODQgOGguMDE2Yy4yNTggMCAuNjktLjAwMyAxLjA1LS4xMDZhLjg4OS44ODkgMCAwIDAgLjM2NC0uMTc5Yy4wNTMtLjA1LjA4Ni0uMTA4LjA4Ni0uMjE1VjdjMC0uMjg4LS4wNy0uNDY1LS4xNTEtLjU4YS44MTQuODE0IDAgMCAwLS4zNTgtLjI3M3pNMTMgOC44Yy0uMDYuMDIyLS4xMTguMDQtLjE3NS4wNTdDMTIuMzIgOSAxMS43NjIgOSAxMS41MTMgOUgxMS41Yy0uMjU5IDAtLjY2LjAwNS0uOTkuMTQ3YS44MTQuODE0IDAgMCAwLS4zNTkuMjc0Yy0uMDguMTE0LS4xNTEuMjkxLS4xNTEuNTc5cy4wNy40NjUuMTUxLjU4YS44MTMuODEzIDAgMCAwIC4zNTguMjczYy4zMzEuMTQyLjczMi4xNDcuOTkxLjE0Ny4yNTcgMCAuNjMtLjAwOC45NC0uMTg0LjI1NS0uMTQ2LjU2LS40NjMuNTYtMS4zMTZ2LS43MDF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MZXR0ZXJpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTGluZURhc2hlZCA9IGZ1bmN0aW9uIEV1aUljb25MaW5lRGFzaGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuNzA3IDQuNzA3YTEgMSAwIDEgMS0xLjQxNC0xLjQxNGwyLTJhMSAxIDAgMSAxIDEuNDE0IDEuNDE0bC0yIDJ6bS02LjQxNCA1YTEgMSAwIDAgMCAxLjQxNCAwbDItMmExIDEgMCAxIDAtMS40MTQtMS40MTRsLTIgMmExIDEgMCAwIDAgMCAxLjQxNHptLTUgNWExIDEgMCAwIDAgMS40MTQgMGwyLTJhMSAxIDAgMSAwLTEuNDE0LTEuNDE0bC0yIDJhMSAxIDAgMCAwIDAgMS40MTR6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MaW5lRGFzaGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxpbmVEb3R0ZWQgPSBmdW5jdGlvbiBFdWlJY29uTGluZURvdHRlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjUgM2ExLjUgMS41IDAgMSAwIDAtMyAxLjUgMS41IDAgMCAwIDAgM3pNMTEgNS41YTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwek01LjUgMTFhMS41IDEuNSAwIDEgMCAwLTMgMS41IDEuNSAwIDAgMCAwIDN6bS00IDRhMS41IDEuNSAwIDEgMCAwLTMgMS41IDEuNSAwIDAgMCAwIDN6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MaW5lRG90dGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxpbmVTb2xpZCA9IGZ1bmN0aW9uIEV1aUljb25MaW5lU29saWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjI5MyAxNC43MDdhMSAxIDAgMCAwIDEuNDE0IDBsMTItMTJhMSAxIDAgMSAwLTEuNDE0LTEuNDE0bC0xMiAxMmExIDEgMCAwIDAgMCAxLjQxNHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVTb2xpZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25MaW5rID0gZnVuY3Rpb24gRXVpSWNvbkxpbmsoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjY2IDMuODAzYS41LjUgMCAxIDEtLjcwNi0uNzA3TDkuMjY4Ljc4YzEuMTg3LTEuMTg3IDMuMjQyLTEgNC41OTYuMzU0czEuNTQgMy40MDkuMzU0IDQuNTk2bC0zLjUzNiAzLjUzNmMtMS4xODcgMS4xODctMy4yNDIgMS00LjU5Ni0uMzU0YS41LjUgMCAxIDEgLjcwNy0uNzA3Yy45OS45OSAyLjQxNyAxLjExOSAzLjE4Mi4zNTRsMy41MzYtMy41MzZjLjc2NS0uNzY1LjYzNS0yLjE5My0uMzU0LTMuMTgyLS45OS0uOTktMi40MTctMS4xMTktMy4xODItLjM1NEw3LjY2MSAzLjgwM1ptLS4zMiA3LjM5MmEuNS41IDAgMSAxIC43MDcuNzA3bC0yLjMxNSAyLjMxNGMtMS4xODcgMS4xODgtMy4yNDIgMS00LjU5Ni0uMzUzLTEuMzU0LTEuMzU0LTEuNTQtMy40MS0uMzUzLTQuNTk2TDQuMzE4IDUuNzNjMS4xODctMS4xODcgMy4yNDItMSA0LjU5Ni4zNTRhLjUuNSAwIDAgMS0uNzA3LjcwN2MtLjk4OS0uOTktMi40MTYtMS4xMi0zLjE4Mi0uMzU0TDEuNDkgOS45NzRjLS43NjYuNzY1LS42MzYgMi4xOTMuMzUzIDMuMTgyLjk5Ljk4OSAyLjQxNyAxLjExOSAzLjE4Mi4zNTNsMi4zMTUtMi4zMTRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MaW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxpc3QgPSBmdW5jdGlvbiBFdWlJY29uTGlzdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgNFYzaDJ2MUgyWm00IDBWM2g4djFINlptMCAzVjZoOHYxSDZabTAgM1Y5aDh2MUg2Wk0yIDdWNmgydjFIMlptMCAzVjloMnYxSDJabTQgM3YtMWg4djFINlptLTQgMHYtMWgydjFIMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpc3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTGlzdEFkZCA9IGZ1bmN0aW9uIEV1aUljb25MaXN0QWRkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEgMTFIOXYxaDJ2Mmgxdi0yaDJ2LTFoLTJWOWgtMXYyWk03Ljc1OCA5YTQuNSA0LjUgMCAxIDEtLjUwMiA0SDZ2LTFoMS4wMjdhNC41NDggNC41NDggMCAwIDEgLjIzLTJINlY5aDEuNzU4Wk0yIDRWM2gydjFIMlptNCAwVjNoOHYxSDZabTAgM1Y2aDh2MUg2Wk0yIDdWNmgydjFIMlptMCAzVjloMnYxSDJabTAgM3YtMWgydjFIMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpc3RBZGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9jayA9IGZ1bmN0aW9uIEV1aUljb25Mb2NrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA1di0uOEM0IDEuODggNS43OSAwIDggMHM0IDEuODggNCA0LjJWNWgxLjE0M2MuNDczIDAgLjg1Ny40NDguODU3IDF2OWMwIC41NTItLjM4NCAxLS44NTcgMUgyLjg1N0MyLjM4NCAxNiAyIDE1LjU1MiAyIDE1VjZjMC0uNTUyLjM4NC0xIC44NTctMUg0Wk0zIDE1aDEwVjZIM3Y5Wm01Ljk5OC0zLjcwNkw5LjUgMTIuNWgtM2wuNTAyLTEuMjA2QTEuNjQ0IDEuNjQ0IDAgMCAxIDYuNSAxMC4xYzAtLjg4My42NzItMS42IDEuNS0xLjZzMS41LjcxNyAxLjUgMS42YzAgLjQ3NS0uMTk0LjkwMS0uNTAyIDEuMTk0Wk0xMSA0LjM2QzExIDIuNTA0IDkuNjU3IDEgOCAxUzUgMi41MDQgNSA0LjM2VjVoNnYtLjY0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9jazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2NrT3BlbiA9IGZ1bmN0aW9uIEV1aUljb25Mb2NrT3BlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjE0MyA1Yy40NzMgMCAuODU3LjQ0OC44NTcgMXY5YzAgLjU1Mi0uMzg0IDEtLjg1NyAxSC44NTdDLjM4NCAxNiAwIDE1LjU1MiAwIDE1VjZjMC0uNTUyLjM4NC0xIC44NTctMUg4di0uOEM4IDEuODggOS43OSAwIDEyIDBzNCAxLjg4IDQgNC4yVjVoLTF2LS42NEMxNSAyLjUwNCAxMy42NTcgMSAxMiAxUzkgMi41MDQgOSA0LjM2VjVoMi4xNDNaTTEgMTVoMTBWNkgxdjlabTUuOTk4LTMuNzA2TDcuNSAxMi41aC0zbC41MDItMS4yMDZBMS42NDQgMS42NDQgMCAwIDEgNC41IDEwLjFjMC0uODgzLjY3Mi0xLjYgMS41LTEuNnMxLjUuNzE3IDEuNSAxLjZjMCAuNDc1LS4xOTQuOTAxLS41MDIgMS4xOTRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2NrT3BlbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dQYXR0ZXJuQW5hbHlzaXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nUGF0dGVybkFuYWx5c2lzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxaDEwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWM2EyIDIgMCAwIDEgMi0yWm0wIDFhMSAxIDAgMCAwLTEgMXYxMGExIDEgMCAwIDAgMSAxaDEwYTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xSDNabS41IDFoNGEuNS41IDAgMCAxIDAgMWgtNGEuNS41IDAgMCAxIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSAzYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSAzYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVptMCAzaC00YS41LjUgMCAwIDAgMCAxaDRhLjUuNSAwIDAgMCAwLTFabS04IDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVptMiAwYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41IDZoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVptMiAwYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm02IDZoLTRhLjUuNSAwIDAgMCAwIDFoNGEuNS41IDAgMCAwIDAtMVptLTggMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWm0yIDBhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjUgMTJoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVptMiAwYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zLTlhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDNhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDNhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDNhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDNhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDNhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWm0tMyA2YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA5YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA5YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA5YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA5YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA5YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA5YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA5YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVptLTUgMGgtNGEuNS41IDAgMCAwIDAgMWg0YS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nUGF0dGVybkFuYWx5c2lzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ1JhdGVBbmFseXNpcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dSYXRlQW5hbHlzaXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgMTNhLjUuNSAwIDAgMS0uNS0uNVYxMUg3djEuNWEuNS41IDAgMCAxLTEgMFY5SDR2My41YS41LjUgMCAwIDEtMSAwdi00YS41LjUgMCAwIDEgLjUtLjVoM2EuNS41IDAgMCAxIC41LjVWMTBoMlYxLjVhLjUuNSAwIDAgMSAuNS0uNWgzYS41LjUgMCAwIDEgLjUuNXYxMWEuNS41IDAgMCAxLS41LjVoLTNabS04IDJhLjUuNSAwIDAgMSAwLTFoMTNhLjUuNSAwIDAgMSAwIDFoLTEzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nUmF0ZUFuYWx5c2lzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29BZXJvc3Bpa2UgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Flcm9zcGlrZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNDNDM3M0FcIixcbiAgICBkOiBcIk0wIDMxLjgwNmgzMlYuNzc2SDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIm0xOS40NDggMTIuNTA4LTguOTg2IDMuODYgOC45ODYgMy44ODN2LTcuNzQzWm0tMTEuMzA0IDQuNzMtMi4wOTQtLjg2MyAyLjA5NC0uOTMxIDE3Ljc0OS03Ljc0MXYyLjA2MmwtNC42NTQgMS45OXY5LjI1bDQuNjU0IDIuMDF2MS45NjhMOC4xNDMgMTcuMjRaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0Flcm9zcGlrZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQXBhY2hlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BcGFjaGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fYXBhY2hlJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgeDE6IFwiMjEuOTAyJVwiLFxuICAgIHgyOiBcIjE0MS44NzklXCIsXG4gICAgeTE6IFwiNjMuOTA1JVwiLFxuICAgIHkyOiBcIjIwLjIxMyVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNGNjk5MjNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMS4yMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0Y3OUEyM1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjgzLjgzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgeDE6IFwiLTIxNy42NTElXCIsXG4gICAgeDI6IFwiNzQuNzQzJVwiLFxuICAgIHkxOiBcIjE3Ny4xMjclXCIsXG4gICAgeTI6IFwiMzYuNjY1JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgeDE6IFwiLTgwLjA0NCVcIixcbiAgICB4MjogXCIxNDYuMjQlXCIsXG4gICAgeTE6IFwiNzMuNTc0JVwiLFxuICAgIHkyOiBcIjMxLjUzOSVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMyLjMzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUUyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNjMuMDIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDOTIwMzdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3NS4xNCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjMzNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0U5NzgyNlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIHgxOiBcIi0xOC4zMTYlXCIsXG4gICAgeDI6IFwiMTY1LjAwMiVcIixcbiAgICB5MTogXCI1Mi40OTclXCIsXG4gICAgeTI6IFwiNDEuNjU2JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzI4MjY2MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjkuNTQ4JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNjYyRThEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzguODIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RjIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5NC44NyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjAzMlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIHgxOiBcIi0xMDkuNzAxJVwiLFxuICAgIHgyOiBcIjY0LjYxNyVcIixcbiAgICB5MTogXCI0NjMuNzE1JVwiLFxuICAgIHkyOiBcIjE3LjE5JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdmJyksXG4gICAgeDE6IFwiLTM0Ljg4JVwiLFxuICAgIHgyOiBcIjExMC41OTklXCIsXG4gICAgeTE6IFwiMTMwLjUyMiVcIixcbiAgICB5MjogXCItOS4xMTglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMi4zMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlFMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjYzLjAyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzkyMDM3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUuMTQlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIzMzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2cnKSxcbiAgICB4MTogXCItMTMuNjczJVwiLFxuICAgIHgyOiBcIjExNy44NTglXCIsXG4gICAgeTE6IFwiMTkyLjU2NCVcIixcbiAgICB5MjogXCItMTM2LjkwNiVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyODI2NjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5LjU0OCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzY2MkU4RFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc4LjgyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUYyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiOTQuODclXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIwMzJcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJNMTMuNjI4LjE4Yy0uNDk4LjI5My0xLjMzMiAxLjEzNC0yLjMyOCAyLjM0OHYuMDc0bC44NzEgMS42MTMuMDQ0LjAzYy42NDEtLjkxNCAxLjI4OS0xLjc0MiAxLjk0OC0yLjQ0Ni4wNS0uMDU2LjA3NS0uMDguMDc1LS4wOC0uMDI1LjAyNC0uMDUuMDU1LS4wNzUuMDgtLjIxMS4yMzctLjg1OS45ODQtMS44MyAyLjQ3OGwuMTEyLjAyNXMyLjI3My0uMjI0IDMuMzY4LS40MWwuMDYyLS4wNTdjLjM1LTEuOTU1LS4zNDItMi44NTEtLjM0Mi0yLjg1MVMxNC42NjEtLjQyMyAxMy42MjguMThaXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBkOiBcIk05LjUyNSA4LjY5N2MuMjgtLjUxNi41Ni0xLjAyNy44NC0xLjUxOS4yOTMtLjUxLjU5Mi0xLjAwOC44OTctMS40ODhhLjM5Ny4zOTcgMCAwIDAgLjA1LS4wODdjLjI5OS0uNDczLjU5OC0uOTIxLjkwMy0xLjM1N0wxMS4zIDIuNTJjLS4wNjkuMDgxLS4xMzcuMTY4LS4yMDYuMjU2LS4yNjEuMzMtLjUzNS42NzgtLjgxNSAxLjA1MmE1MS43ODMgNTEuNzgzIDAgMCAwLTEuODkzIDIuNzA4Yy0uMjYxLjQwNS0uNTMuODE2LS43OSAxLjI0NWwtLjAzMi4wNVY3LjlsMS4xNCAyLjI2LjA1LjAxOWMuMjU1LS40OTguNTEtLjk5Ni43NzEtMS40ODJaXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdjJyksIFwiKVwiKSxcbiAgICBkOiBcIk00LjU2MyAxOS43NmMuMjA2LS41MzUuNDI0LTEuMDc3LjY0Mi0xLjYyNS4yMTEtLjUyMy40MjMtMS4wNTIuNjQ3LTEuNTguMjE4LS41My40NDgtMS4wNi42NzktMS41OTUuMjM2LS41NDEuNDczLTEuMDgzLjcxNi0xLjYxOC4yNDItLjUzLjQ4NS0xLjA1OS43MzQtMS41ODIuMDg3LS4xODYuMTgtLjM4LjI3NC0uNTY2LjE1Ni0uMzI0LjMxOC0uNjQ4LjQ3My0uOTY1LjAwNy0uMDE5LjAyLS4wMzEuMDI1LS4wNUw3LjU2NCA3LjgzMmwtLjA1Ni4wOTNjLS4yNzQuNDU1LS41NTQuOTE1LS44MjIgMS4zODlhNTQuNTM1IDU0LjUzNSAwIDAgMC0xLjQ1IDIuNzE0Yy0uMDQ0LjA4Ny0uMDgxLjE2OC0uMTI1LjI1NWEzMi4xNSAzMi4xNSAwIDAgMC0uNzAzIDEuNTQ0Yy0uMjM3LjU2LS40NDggMS4wOTYtLjYzNSAxLjYwNi0uMTI1LjMzNy0uMjMuNjU0LS4zMzYuOTY1LS4wODEuMjYyLS4xNjIuNTMtLjIzNy43OTEtLjE4LjYyMy0uMzMgMS4yMzktLjQ1NCAxLjg2MmwuMDE4LjA3NCAxLjE0IDIuMjY2LjAzNy4wMmMuMTU1LS40MjQuMzE3LS44NDguNDg1LTEuMjgzLjA0NC0uMTI1LjA5NC0uMjQzLjEzNy0uMzY4WlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNMi43MzMgMTkuMTMyYTE4Ljg0IDE4Ljg0IDAgMCAwLS4zMTEgMi4yNTNjMCAuMDI1LS4wMDYuMDUtLjAwNi4wODEtLjM3NC0uNTk4LTEuMzctMS4xNzctMS4zNy0xLjE3Ny43MTYgMS4wMzQgMS4yNTggMi4wNjEgMS4zMzggMy4wNy0uMzguMDgtLjkwMi0uMDM4LTEuNTEyLS4yNTUuNjI4LjU3OCAxLjEwMi43NCAxLjI4OC43ODQtLjU3OS4wMzctMS4xODMuNDM2LTEuNzkzLjg5Ljg5LS4zNiAxLjYwNy0uNTA0IDIuMTIzLS4zOTItLjgxNSAyLjMxLTEuNjMgNC44NjItMi40NTMgNy41NjQuMjUtLjA3NS4zOTktLjI0My40ODYtLjQ3My4xNDMtLjQ5MiAxLjExNC0zLjcwNCAyLjYyNy03LjkzMS4wNDQtLjExOS4wODctLjI0My4xMy0uMzYyLjAxMy0uMDMuMDI2LS4wNjguMDM4LS4xLjE2Mi0uNDQxLjMyNC0uODk2LjQ5OC0xLjM1Ni4wMzgtLjEwNi4wODEtLjIxMi4xMTktLjMxOHYtLjAwNmwtMS4xOS0yLjM1M2MwIC4wMy0uMDA2LjA1Ni0uMDEyLjA4WlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIiksXG4gICAgZDogXCJNMTIuMzMzIDQuMjgzYy0uMjY4LjQxMS0uNTYuODc4LS44NzggMS40MDctLjAxOC4wMjUtLjAzLjA1Ni0uMDUuMDgxYTYyLjUzOCA2Mi41MzggMCAwIDAtMS42ODcgMy4wNWMtLjI0OS40OC0uNTA0Ljk4NC0uNzY1IDEuNTI2bC4wNTYuMDI1IDIuODk1LS4zMTEuMDY4LS4wNWMuODc4LS40MDUgMS4yNy0uNzcyIDEuNjUtMS4zMDEuMS0uMTQzLjIwNS0uMy4zMDUtLjQ1NS4zMTEtLjQ4NS42MTYtMS4wMTUuODg0LTEuNTQ0LjI2MS0uNTEuNDkyLTEuMDIuNjcyLTEuNDc1YTYuNTYgNi41NiAwIDAgMCAuMzk4LTEuMzk1Yy0xLjE3LjIwNi0yLjYwOC4zOTktMy41NDguNDQyWlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZicpLCBcIilcIiksXG4gICAgZDogXCJNOC44NCAxMC41OWMtLjEuMjEyLS4yMDUuNDMtLjMxLjY0Ny0uMTEzLjIzNy0uMjMxLjQ4Ni0uMzQzLjczNS0uMDU2LjEyNC0uMTE5LjI1NS0uMTc1LjM4LS4xOC4zODYtLjM1NC43ODQtLjU0MSAxLjE5NWExMDcuMDM1IDEwNy4wMzUgMCAwIDAtMS4zNTcgMy4xOTRjLS4yMTguNTI5LS40MzYgMS4wNzctLjY1NCAxLjYzNy0uMi41MDQtLjM5OSAxLjAxNS0uNTk4IDEuNTUtLjAxMi4wMjUtLjAxOC4wNS0uMDMuMDc1LS4yLjUzLS4zOTQgMS4wNjgtLjYgMS42MjItLjAwNi4wMTItLjAxNy4wNDUtLjAyMy4wNTdsLjA0My4wMS44NjYtLjA5NC4wNDgtLjAyYy0uMDE4LS4wMDYtLjAzLS4wMy0uMDQ4LS4wMzcgMS4xNDUtLjE0MyAyLjY3LTEuMDAyIDMuNjYtMi4wNi40NTUtLjQ4Ni44NjYtMS4wNjUgMS4yNTItMS43MzguMjg2LS41MDQuNTQ3LTEuMDU4LjgwMy0xLjY3NS4yMjQtLjUzNS40MzUtMS4xMi42NC0xLjc0OWEzLjQ1NyAzLjQ1NyAwIDAgMS0uODk2LjMxMSA4Ljk3NyA4Ljk3NyAwIDAgMS0uMTguMDM4Yy0uMDYyLjAxMi0uMTI1LjAxOC0uMTguMDMgMS4wNy0uNDEgMS43NDMtMS4yMDcgMi4yMzQtMi4xNzgtLjI4LjE5My0uNzQuNDQyLTEuMjg4LjU2NmEyLjUyIDIuNTIgMCAwIDEtLjIzLjA0NGMtLjAyIDAtLjAzOC4wMDYtLjA1Ny4wMDYuMzc0LS4xNTUuNjg1LS4zMy45NTktLjUzNS4wNTYtLjA0NC4xMTItLjA4Ny4xNjgtLjEzNy4wODEtLjA3NS4xNjItLjE1LjIzNy0uMjI0LjA1LS4wNS4wOTMtLjEuMTQzLS4xNTYuMTA2LS4xMjQuMjA1LS4yNjEuMjk5LS40MS4wMy0uMDQ0LjA1Ni0uMDk0LjA4Ny0uMTM4LjAzNy0uMDY4LjA2OC0uMTM3LjEtLjIwNS4xNDktLjMuMjY3LS41NjcuMzYtLjgwMy4wNS0uMTE5LjA4OC0uMjI0LjEyNS0uMzMuMDEzLS4wMzguMDI1LS4wODEuMDQ0LS4xMTkuMDM3LS4xMTIuMDY4LS4yMTEuMDkzLS4zMDUuMDM3LS4xMy4wNTYtLjIzNi4wNjktLjMxMWExLjA3NyAxLjA3NyAwIDAgMS0uMTI1LjA4N2MtLjMyNC4xOTMtLjg3OC4zNjgtMS4zMjYuNDQ4bC44ODQtLjEtLjg4NC4xYy0uMDYyLjAxMy0uMTA2LjAyLS4xNTYuMDMyLjAwNC0uMDA1LS45OTQuMTAxLTIuOTk1LjMxNmEyLjMxMyAyLjMxMyAwIDAgMC0uMTE4LjI0NFpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2cnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTQuMTE1IDIxLjkxNGMtLjE1NS40My0uMzE3Ljg3Mi0uNDczIDEuMzIgMCAuMDA2LS4wMDYuMDEzLS4wMDYuMDE5LS4wMjUuMDYyLS4wNDQuMTI0LS4wNjkuMTkzLS4xMDYuMzA1LS4xOTkuNTczLS40MSAxLjE5NS4zNDguMTYyLjYyOC41OC44OTYgMS4wNTlhMS44NzYgMS44NzYgMCAwIDAtLjYyMy0xLjMxNGMxLjcyNS4wNzUgMy4yMTMtLjM2MSAzLjk3OS0xLjYxOS4wNjgtLjExMi4xMy0uMjMuMTg2LS4zNTUtLjM0OC40NDItLjc4NC42My0xLjU5My41ODZoLS4wMDcuMDA3YzEuMjAxLS41MzYgMS43OTktMS4wNTIgMi4zMzQtMS45MDUuMTI1LS4yMDYuMjUtLjQyNC4zNzQtLjY2Ny0xLjA1MiAxLjA3OC0yLjI2NiAxLjM4My0zLjU0MyAxLjE1MmwtLjk1OC4xMDZjLS4wMzIuMDY5LS4wNjMuMTUtLjA5NC4yM1pcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0FwYWNoZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQXBwU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BcHBTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xOS41LjkzOGE3LjAwMiA3LjAwMiAwIDAgMC03IDBsLTggNC42MTlBNyA3IDAgMCAwIDEgMTEuNjJ2OS4yMzdhNyA3IDAgMCAwIDMuNSA2LjA2Mmw3LjUgNC4zM1YxNy45NzlhNyA3IDAgMCAxIDMuNS02LjA2MkwyNyA1LjI3NiAxOS41LjkzOVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5LjUuOTM4YTcuMDAyIDcuMDAyIDAgMCAwLTcgMEw1IDUuMjc3bDExIDYuMzUgMTEtNi4zNS03LjUtNC4zNFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQTc0NEVcIixcbiAgICBkOiBcIm0yOC40MzUgNy43Ni0xMC4wMjYgNS43OWE2Ljk5NCA2Ljk5NCAwIDAgMSAxLjU5IDQuNDI4djEzLjI3bDcuNS00LjMzYTcgNyAwIDAgMCAzLjUtNi4wNjF2LTkuMjM4YTYuOTkyIDYuOTkyIDAgMCAwLTEuNTg2LTQuNDIybC0uOTc4LjU2NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BcHBTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0F3cyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXdzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjAxOSAxMy44NzhjMCAuMzkuMDQyLjcwNS4xMTcuOTM2LjA4NS4yMzIuMTkxLjQ4NC4zNC43NThhLjQ1NC40NTQgMCAwIDEgLjA3NS4yNDJjMCAuMTA1LS4wNjQuMjEtLjIwMi4zMTVsLS42Ny40NDJhLjUxNC41MTQgMCAwIDEtLjI3Ny4wOTVjLS4xMDcgMC0uMjEzLS4wNTMtLjMyLS4xNDhhMy4yNTggMy4yNTggMCAwIDEtLjM4My0uNDk0IDguMTA5IDguMTA5IDAgMCAxLS4zMy0uNjJjLS44My45NjctMS44NzMgMS40NS0zLjEyOCAxLjQ1LS44OTQgMC0xLjYwNy0uMjUyLTIuMTI5LS43NTYtLjUyMS0uNTA1LS43ODctMS4xNzgtLjc4Ny0yLjAyIDAtLjg5NC4zMTktMS42Mi45NjgtMi4xNjYuNjUtLjU0NyAxLjUxMS0uODIgMi42MDctLjgyLjM2MiAwIC43MzUuMDMgMS4xMjguMDgzLjM5NC4wNTMuNzk5LjEzNyAxLjIyNC4yMzJ2LS43NjhjMC0uOC0uMTctMS4zNTctLjUtMS42ODMtLjM0LS4zMjYtLjkxNS0uNDg0LTEuNzM1LS40ODQtLjM3MiAwLS43NTUuMDQzLTEuMTQ5LjEzNy0uMzk0LjA5NS0uNzc3LjIxLTEuMTUuMzU4LS4xNy4wNzMtLjI5Ny4xMTUtLjM3Mi4xMzZhLjY2LjY2IDAgMCAxLS4xNy4wMzJjLS4xNDkgMC0uMjIzLS4xMDUtLjIyMy0uMzI2di0uNTE1YzAtLjE2OS4wMi0uMjk1LjA3NC0uMzY4YS43OTYuNzk2IDAgMCAxIC4yOTgtLjIyMWMuMzczLS4xOS44Mi0uMzQ3IDEuMzQtLjQ3NGE2LjUyNCA2LjUyNCAwIDAgMSAxLjY2MS0uMmMxLjI2NiAwIDIuMTkyLjI4NSAyLjc4OC44NTIuNTg2LjU2OC44ODQgMS40My44ODQgMi41ODh2My40MDdoLjAyWm0tNC4zMiAxLjZjLjM1IDAgLjcxMi0uMDY0IDEuMDk1LS4xOWEyLjM3MyAyLjM3MyAwIDAgMCAxLjAxMS0uNjczYy4xNy0uMi4yOTgtLjQyMS4zNjItLjY3My4wNjQtLjI1My4xMDctLjU1OC4xMDctLjkxNnYtLjQ0MWE4Ljk4MiA4Ljk4MiAwIDAgMC0uOTgtLjE3OSA4LjExMyA4LjExMyAwIDAgMC0xLS4wNjNjLS43MTMgMC0xLjIzNC4xMzctMS41ODYuNDItLjM1LjI4NS0uNTIxLjY4NC0uNTIxIDEuMjEgMCAuNDk0LjEyOC44NjIuMzk0IDEuMTE1LjI1NS4yNjMuNjI4LjM5IDEuMTE3LjM5Wm04LjU0NSAxLjEzNWMtLjE5MiAwLS4zMi0uMDMyLS40MDUtLjEwNS0uMDg1LS4wNjMtLjE2LS4yMS0uMjIzLS40MWwtMi41MDEtOC4xM2MtLjA2NC0uMjEtLjA5Ni0uMzQ3LS4wOTYtLjQyMSAwLS4xNjguMDg1LS4yNjMuMjU2LS4yNjNoMS4wNDNjLjIwMiAwIC4zNC4wMzIuNDE1LjEwNS4wODUuMDYzLjE0OS4yMS4yMTIuNDFsMS43ODggNi45NjMgMS42Ni02Ljk2M2MuMDU0LS4yMS4xMTctLjM0Ny4yMDMtLjQxLjA4NS0uMDYzLjIzNC0uMTA1LjQyNS0uMTA1aC44NTJjLjIwMiAwIC4zNC4wMzIuNDI1LjEwNS4wODUuMDYzLjE2LjIxLjIwMy40MWwxLjY4MSA3LjA0NyAxLjg0MS03LjA0N2MuMDY0LS4yMS4xMzgtLjM0Ny4yMTMtLjQxLjA4NS0uMDYzLjIyMy0uMTA1LjQxNS0uMTA1aC45OWMuMTcgMCAuMjY2LjA4NC4yNjYuMjYzIDAgLjA1Mi0uMDExLjEwNS0uMDIyLjE2OC0uMDEuMDYzLS4wMzIuMTQ3LS4wNzQuMjYzbC0yLjU2NSA4LjEzYy0uMDY0LjIxLS4xMzguMzQ3LS4yMjMuNDEtLjA4NS4wNjMtLjIyNC4xMDUtLjQwNS4xMDVoLS45MTVjLS4yMDIgMC0uMzQtLjAzMS0uNDI2LS4xMDUtLjA4NS0uMDczLS4xNi0uMjEtLjIwMi0uNDJsLTEuNjUtNi43ODQtMS42MzggNi43NzNjLS4wNTMuMjEtLjExNy4zNDctLjIwMi40Mi0uMDg2LjA3NC0uMjM1LjEwNi0uNDI2LjEwNmgtLjkxNVptMTMuNjc1LjI4NGE3LjEyMiA3LjEyMiAwIDAgMS0xLjY0LS4xOWMtLjUzMS0uMTI2LS45NDYtLjI2Mi0xLjIyMy0uNDItLjE3LS4wOTUtLjI4Ny0uMi0uMzMtLjI5NWEuNzM1LjczNSAwIDAgMS0uMDY0LS4yOTR2LS41MzZjMC0uMjIxLjA4NS0uMzI3LjI0NS0uMzI3YS42MS42MSAwIDAgMSAuMTkyLjAzMmMuMDYzLjAyMS4xNi4wNjMuMjY2LjEwNS4zNjEuMTU4Ljc1NS4yODQgMS4xNy4zNjguNDI2LjA4NC44NC4xMjcgMS4yNjcuMTI3LjY3IDAgMS4xOTItLjExNiAxLjU1My0uMzQ4YTEuMTMgMS4xMyAwIDAgMCAuNTU0LS45OTljMC0uMjk0LS4wOTYtLjUzNi0uMjg4LS43MzYtLjE5MS0uMi0uNTUzLS4zNzktMS4wNzQtLjU0N2wtMS41NDQtLjQ3M2MtLjc3Ni0uMjQyLTEuMzUxLS42LTEuNzAyLTEuMDczYTIuNDg3IDIuNDg3IDAgMCAxLS41MzItMS41MjVjMC0uNDQyLjA5NS0uODMuMjg3LTEuMTY3LjE5Mi0uMzM3LjQ0Ny0uNjMxLjc2Ni0uODYzLjMyLS4yNDIuNjgxLS40MiAxLjEwNy0uNTQ3YTQuNjkgNC42OSAwIDAgMSAxLjM0LS4xNzhjLjIzNSAwIC40OC4wMS43MTQuMDQyLjI0NS4wMzEuNDY4LjA3My42OTIuMTE1LjIxMi4wNTMuNDE1LjEwNS42MDYuMTY5LjE5Mi4wNjMuMzQuMTI2LjQ0Ny4xODlhLjkxOC45MTggMCAwIDEgLjMyLjI2M2MuMDYzLjA4NC4wOTUuMi4wOTUuMzQ3di40OTRjMCAuMjIxLS4wODUuMzM3LS4yNDUuMzM3LS4wODUgMC0uMjIzLS4wNDItLjQwNC0uMTI2LS42MDctLjI3NC0xLjI4OC0uNDEtMi4wNDMtLjQxLS42MDcgMC0xLjA4Ni4wOTQtMS40MTYuMjk0LS4zMy4yLS41LjUwNS0uNS45MzYgMCAuMjk0LjEwNy41NDcuMzIuNzQ3LjIxMi4yLjYwNi40IDEuMTcuNTc4bDEuNTExLjQ3M2MuNzY2LjI0MiAxLjMyLjU3OSAxLjY1IDEuMDEuMzMuNDMxLjQ5LjkyNi40OSAxLjQ3MyAwIC40NTItLjA5Ni44NjItLjI3NyAxLjIyYTIuODM2IDIuODM2IDAgMCAxLS43NzcuOTI1Yy0uMzMuMjYzLS43MjQuNDUyLTEuMTgyLjU5LS40NzguMTQ2LS45NzkuMjItMS41MjEuMjJaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCIjRjkwXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4LjkzIDIyLjAwOWMtMy41MDEgMi41NTYtOC41ODggMy45MTItMTIuOTYyIDMuOTEyLTYuMTMgMC0xMS42NTMtMi4yNC0xNS44MjUtNS45NjMtLjMzLS4yOTUtLjAzMi0uNjk0LjM2Mi0uNDYzIDQuNTEyIDIuNTg3IDEwLjA3OCA0LjE1NSAxNS44MzYgNC4xNTUgMy44ODQgMCA4LjE1MS0uOCAxMi4wNzgtMi40NC41ODYtLjI2MyAxLjA4Ni4zNzguNTExLjc5OVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjM4OCAyMC4zNjhjLS40NDctLjU2OC0yLjk1OC0uMjczLTQuMDk3LS4xMzctLjM0LjA0Mi0uMzk0LS4yNTItLjA4NS0uNDczIDItMS4zODggNS4yODktLjk4OSA1LjY3Mi0uNTI2LjM4My40NzQtLjEwNyAzLjcyMy0xLjk4IDUuMjgtLjI4Ny4yNDItLjU2NC4xMTYtLjQzNi0uMi40MjYtMS4wNDEgMS4zNzMtMy4zODYuOTI2LTMuOTQ0WlwiXG4gIH0pKSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXdzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Bd3NNb25vID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Bd3NNb25vKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNOS4wMTkgMTMuODc4YzAgLjM5LjA0Mi43MDUuMTE3LjkzNi4wODUuMjMyLjE5MS40ODQuMzQuNzU4YS40NTQuNDU0IDAgMCAxIC4wNzUuMjQyYzAgLjEwNS0uMDY0LjIxLS4yMDIuMzE1bC0uNjcuNDQyYS41MTQuNTE0IDAgMCAxLS4yNzcuMDk1Yy0uMTA3IDAtLjIxMy0uMDUzLS4zMi0uMTQ4YTMuMjU4IDMuMjU4IDAgMCAxLS4zODMtLjQ5NCA4LjEwOSA4LjEwOSAwIDAgMS0uMzMtLjYyYy0uODMuOTY3LTEuODczIDEuNDUtMy4xMjggMS40NS0uODk0IDAtMS42MDctLjI1Mi0yLjEyOS0uNzU2LS41MjEtLjUwNS0uNzg3LTEuMTc4LS43ODctMi4wMiAwLS44OTQuMzE5LTEuNjIuOTY4LTIuMTY2LjY1LS41NDcgMS41MTEtLjgyIDIuNjA3LS44Mi4zNjIgMCAuNzM1LjAzIDEuMTI4LjA4My4zOTQuMDUzLjc5OS4xMzcgMS4yMjQuMjMydi0uNzY4YzAtLjgtLjE3LTEuMzU3LS41LTEuNjgzLS4zNC0uMzI2LS45MTUtLjQ4NC0xLjczNS0uNDg0LS4zNzIgMC0uNzU1LjA0My0xLjE0OS4xMzctLjM5NC4wOTUtLjc3Ny4yMS0xLjE1LjM1OC0uMTcuMDczLS4yOTcuMTE1LS4zNzIuMTM2YS42Ni42NiAwIDAgMS0uMTcuMDMyYy0uMTQ5IDAtLjIyMy0uMTA1LS4yMjMtLjMyNnYtLjUxNWMwLS4xNjkuMDItLjI5NS4wNzQtLjM2OGEuNzk2Ljc5NiAwIDAgMSAuMjk4LS4yMjFjLjM3My0uMTkuODItLjM0NyAxLjM0LS40NzRhNi41MjQgNi41MjQgMCAwIDEgMS42NjEtLjJjMS4yNjYgMCAyLjE5Mi4yODUgMi43ODguODUyLjU4Ni41NjguODg0IDEuNDMuODg0IDIuNTg4djMuNDA3aC4wMlptLTQuMzIgMS42Yy4zNSAwIC43MTItLjA2NCAxLjA5NS0uMTlhMi4zNzMgMi4zNzMgMCAwIDAgMS4wMTEtLjY3M2MuMTctLjIuMjk4LS40MjEuMzYyLS42NzMuMDY0LS4yNTMuMTA3LS41NTguMTA3LS45MTZ2LS40NDFhOC45ODIgOC45ODIgMCAwIDAtLjk4LS4xNzkgOC4xMTMgOC4xMTMgMCAwIDAtMS0uMDYzYy0uNzEzIDAtMS4yMzQuMTM3LTEuNTg2LjQyLS4zNS4yODUtLjUyMS42ODQtLjUyMSAxLjIxIDAgLjQ5NC4xMjguODYyLjM5NCAxLjExNS4yNTUuMjYzLjYyOC4zOSAxLjExNy4zOVptOC41NDUgMS4xMzVjLS4xOTIgMC0uMzItLjAzMi0uNDA1LS4xMDUtLjA4NS0uMDYzLS4xNi0uMjEtLjIyMy0uNDFsLTIuNTAxLTguMTNjLS4wNjQtLjIxLS4wOTYtLjM0Ny0uMDk2LS40MjEgMC0uMTY4LjA4NS0uMjYzLjI1Ni0uMjYzaDEuMDQzYy4yMDIgMCAuMzQuMDMyLjQxNS4xMDUuMDg1LjA2My4xNDkuMjEuMjEyLjQxbDEuNzg4IDYuOTYzIDEuNjYtNi45NjNjLjA1NC0uMjEuMTE3LS4zNDcuMjAzLS40MS4wODUtLjA2My4yMzQtLjEwNS40MjUtLjEwNWguODUyYy4yMDIgMCAuMzQuMDMyLjQyNS4xMDUuMDg1LjA2My4xNi4yMS4yMDMuNDFsMS42ODEgNy4wNDcgMS44NDEtNy4wNDdjLjA2NC0uMjEuMTM4LS4zNDcuMjEzLS40MS4wODUtLjA2My4yMjMtLjEwNS40MTUtLjEwNWguOTljLjE3IDAgLjI2Ni4wODQuMjY2LjI2MyAwIC4wNTItLjAxMS4xMDUtLjAyMi4xNjgtLjAxLjA2My0uMDMyLjE0Ny0uMDc0LjI2M2wtMi41NjUgOC4xM2MtLjA2NC4yMS0uMTM4LjM0Ny0uMjIzLjQxLS4wODUuMDYzLS4yMjQuMTA1LS40MDUuMTA1aC0uOTE1Yy0uMjAyIDAtLjM0LS4wMzEtLjQyNi0uMTA1LS4wODUtLjA3My0uMTYtLjIxLS4yMDItLjQybC0xLjY1LTYuNzg0LTEuNjM4IDYuNzczYy0uMDUzLjIxLS4xMTcuMzQ3LS4yMDIuNDItLjA4Ni4wNzQtLjIzNS4xMDYtLjQyNi4xMDZoLS45MTVabTEzLjY3NS4yODRhNy4xMjIgNy4xMjIgMCAwIDEtMS42NC0uMTljLS41MzEtLjEyNi0uOTQ2LS4yNjItMS4yMjMtLjQyLS4xNy0uMDk1LS4yODctLjItLjMzLS4yOTVhLjczNS43MzUgMCAwIDEtLjA2NC0uMjk0di0uNTM2YzAtLjIyMS4wODUtLjMyNy4yNDUtLjMyN2EuNjEuNjEgMCAwIDEgLjE5Mi4wMzJjLjA2My4wMjEuMTYuMDYzLjI2Ni4xMDUuMzYxLjE1OC43NTUuMjg0IDEuMTcuMzY4LjQyNi4wODQuODQuMTI3IDEuMjY3LjEyNy42NyAwIDEuMTkyLS4xMTYgMS41NTMtLjM0OGExLjEzIDEuMTMgMCAwIDAgLjU1NC0uOTk5YzAtLjI5NC0uMDk2LS41MzYtLjI4OC0uNzM2LS4xOTEtLjItLjU1My0uMzc5LTEuMDc0LS41NDdsLTEuNTQ0LS40NzNjLS43NzYtLjI0Mi0xLjM1MS0uNi0xLjcwMi0xLjA3M2EyLjQ4NyAyLjQ4NyAwIDAgMS0uNTMyLTEuNTI1YzAtLjQ0Mi4wOTUtLjgzLjI4Ny0xLjE2Ny4xOTItLjMzNy40NDctLjYzMS43NjYtLjg2My4zMi0uMjQyLjY4MS0uNDIgMS4xMDctLjU0N2E0LjY5IDQuNjkgMCAwIDEgMS4zNC0uMTc4Yy4yMzUgMCAuNDguMDEuNzE0LjA0Mi4yNDUuMDMxLjQ2OC4wNzMuNjkyLjExNS4yMTIuMDUzLjQxNS4xMDUuNjA2LjE2OS4xOTIuMDYzLjM0LjEyNi40NDcuMTg5YS45MTguOTE4IDAgMCAxIC4zMi4yNjNjLjA2My4wODQuMDk1LjIuMDk1LjM0N3YuNDk0YzAgLjIyMS0uMDg1LjMzNy0uMjQ1LjMzNy0uMDg1IDAtLjIyMy0uMDQyLS40MDQtLjEyNi0uNjA3LS4yNzQtMS4yODgtLjQxLTIuMDQzLS40MS0uNjA3IDAtMS4wODYuMDk0LTEuNDE2LjI5NC0uMzMuMi0uNS41MDUtLjUuOTM2IDAgLjI5NC4xMDcuNTQ3LjMyLjc0Ny4yMTIuMi42MDYuNCAxLjE3LjU3OGwxLjUxMS40NzNjLjc2Ni4yNDIgMS4zMi41NzkgMS42NSAxLjAxLjMzLjQzMS40OS45MjYuNDkgMS40NzMgMCAuNDUyLS4wOTYuODYyLS4yNzcgMS4yMmEyLjgzNiAyLjgzNiAwIDAgMS0uNzc3LjkyNWMtLjMzLjI2My0uNzI0LjQ1Mi0xLjE4Mi41OS0uNDc4LjE0Ni0uOTc5LjIyLTEuNTIxLjIyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjguOTMgMjIuMDA5Yy0zLjUwMSAyLjU1Ni04LjU4OCAzLjkxMi0xMi45NjIgMy45MTItNi4xMyAwLTExLjY1My0yLjI0LTE1LjgyNS01Ljk2My0uMzMtLjI5NS0uMDMyLS42OTQuMzYyLS40NjMgNC41MTIgMi41ODcgMTAuMDc4IDQuMTU1IDE1LjgzNiA0LjE1NSAzLjg4NCAwIDguMTUxLS44IDEyLjA3OC0yLjQ0LjU4Ni0uMjYzIDEuMDg2LjM3OC41MTEuNzk5WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuMzg4IDIwLjM2OGMtLjQ0Ny0uNTY4LTIuOTU4LS4yNzMtNC4wOTctLjEzNy0uMzQuMDQyLS4zOTQtLjI1Mi0uMDg1LS40NzMgMi0xLjM4OCA1LjI4OS0uOTg5IDUuNjcyLS41MjYuMzgzLjQ3NC0uMTA3IDMuNzIzLTEuOTggNS4yOC0uMjg3LjI0Mi0uNTY0LjExNi0uNDM2LS4yLjQyNi0xLjA0MSAxLjM3My0zLjM4Ni45MjYtMy45NDRaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0F3c01vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0F6dXJlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BenVyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwNzJDNlwiLFxuICAgIGQ6IFwibTE3LjQ0OCA0LTkuNDE0IDguMDFMMCAyNi4xNTdoNy4yNDNMMTcuNDQ4IDRaTTE4LjcgNS44NzRsLTQuMDE4IDExLjExIDcuNzA0IDkuNDk3TDcuNDQxIDI5aDI0LjQ5NEwxOC43IDUuODc0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0F6dXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29BenVyZU1vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0F6dXJlTW9ubyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTE3LjQ0OCA0LTkuNDE0IDguMDFMMCAyNi4xNTdoNy4yNDNMMTcuNDQ4IDRaTTE4LjcgNS44NzRsLTQuMDE4IDExLjExIDcuNzA0IDkuNDk3TDcuNDQxIDI5aDI0LjQ5NEwxOC43IDUuODc0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0F6dXJlTW9ubzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQmVhdHMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0JlYXRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTUgMjBINFYwaDExYzUuNTIyIDAgMTAgNC40NzggMTAgMTBzLTQuNDc4IDEwLTEwIDEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEMyQjNcIixcbiAgICBkOiBcIk0yNi43MDIgMTUuNjI0QzI0LjYgMTkuOTc5IDIwLjE1MiAyMyAxNSAyM0g0djloMTVjNS41MjIgMCAxMC00LjQ3OCAxMC0xMGE5Ljk1MiA5Ljk1MiAwIDAgMC0yLjI5OC02LjM3NlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjQuMzM4IDEzLjU1NEE5Ljk0MiA5Ljk0MiAwIDAgMCAxOSAxMkg0djhoMTFjNC4yNyAwIDcuOTAzLTIuNjggOS4zMzgtNi40NDZcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQmVhdHM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0J1c2luZXNzQW5hbHl0aWNzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29CdXNpbmVzc0FuYWx5dGljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMCAyMmMwIDUuNTIyIDQuNDc4IDEwIDEwIDEwVjEyQzQuNDc4IDEyIDAgMTYuNDc4IDAgMjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDEydjEwaDEwYzAtNS41MjItNC40NzgtMTAtMTAtMTBcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIk0xMCAwdjljNy4xNjggMCAxMyA1LjgzMiAxMyAxM2g5QzMyIDkuODUgMjIuMTUgMCAxMCAwXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0J1c2luZXNzQW5hbHl0aWNzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29DZXBoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29DZXBoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA1QzU2XCIsXG4gICAgZDogXCJNMjUuNDcxIDI3LjU2Yy0xLjA2LS41NjctMS42NzYtMS4yMDYtMS44MTEtMS45MDItLjEzLS42NzMuMTctMS40MjEuOTE4LTIuMjg4YTExLjI5IDExLjI5IDAgMCAwIDIuNzczLTcuNDJBMTEuMzI0IDExLjMyNCAwIDAgMCAxNi4wNDIgNC42NGwtLjA1LjAwMWgtLjA1QTExLjMyNCAxMS4zMjQgMCAwIDAgNC42MzIgMTUuOTQ5YTExLjI5MSAxMS4yOTEgMCAwIDAgMi43NzQgNy40MjJjLjc1My44NzIgMS4wNDcgMS41OTEuOTI4IDIuMjU3LS4xMy42OTQtLjc0IDEuMzQyLTEuODE3IDEuOTMtMS42NTctMS4zNzUtMy4xMTYtMy4yMTItNC4wMS01LjA1NmExNC45NDMgMTQuOTQzIDAgMCAxLTEuMTE3LTMuMTM5QTE0Ljk5NyAxNC45OTcgMCAwIDEgMSAxNS45NWExNC45MDEgMTQuOTAxIDAgMCAxIDQuMzc4LTEwLjU3IDE0LjkyNCAxNC45MjQgMCAwIDEgNC43NTItMy4yMDRDMTEuOTcgMS4zOTUgMTMuOTUuOTk2IDE1Ljk0OCAxaC4xMDFhMTQuODg4IDE0Ljg4OCAwIDAgMSAxMC41NyA0LjM3OCAxNC45MTIgMTQuOTEyIDAgMCAxIDMuOTgyIDEzLjk4NSAxNC44NzEgMTQuODcxIDAgMCAxLTEuMTE4IDMuMTRjLS45IDEuODQzLTIuMzU4IDMuNjgxLTQuMDEgNS4wNTdoLS4wMDNabS01LjUyMyAyLjc5OGMtLjE3My0uMTEtLjc2Ny0uNTUtMS4zNDUtMS4zNTNhNi4xMjIgNi4xMjIgMCAwIDEtMS4xNzQtMy43MzggOC4yNiA4LjI2IDAgMCAxIC42MTEtMi45NjQgOC40MiA4LjQyIDAgMCAxIDEuNjI3LTIuNTRsLjAwNC0uMDA4LjE1NC0uMTc4Yy4yNjMtLjMwNS41MzYtLjYyMi43NTMtLjk5LjI2OC0uNDU0LjQ2Mi0uOTMxLjU3OC0xLjQyLjE3OC0uNzU4LjE4OC0xLjU0Ny4wMjktMi4zMWE1LjMgNS4zIDAgMCAwLS44NTgtMS45NTYgNS4yNjQgNS4yNjQgMCAwIDAtNC4yOS0yLjIxN2gtLjEwOGE1LjI1IDUuMjUgMCAwIDAtNC4yOSAyLjIxNiA1LjMxIDUuMzEgMCAwIDAtLjg1NiAxLjk1NmMtLjE2Ljc2My0uMTUgMS41NTIuMDMgMi4zMTEuMTE1LjQ4OC4zMS45NjUuNTc2IDEuNDE5LjIxOS4zNy40OS42ODQuNzUzLjk5bC4xNTUuMTc5LjAwMy4wMDdhOC4zODQgOC4zODQgMCAwIDEgMS42MjggMi41NCA4LjI0IDguMjQgMCAwIDEgLjYxIDIuOTY0IDYuMTIzIDYuMTIzIDAgMCAxLTEuMTczIDMuNzM4Yy0uNTguNzk1LTEuMTc0IDEuMjQzLTEuMzQ2IDEuMzUybC0uODY3LS4yNmExNS40MzQgMTUuNDM0IDAgMCAxLTIuNDktMS4wOTggNC4yNDUgNC4yNDUgMCAwIDAgMi4yMzQtMy43MzZjMC0xLjAzNC0uNDAzLTIuMDI4LTEuMTk1LTIuOTVsLS4wMzQtLjAzNC0uMjM3LS4yNi0uNjM2LS43NDZhOC45MjQgOC45MjQgMCAwIDEtMS41MjUtMy4yNiA4Ljk4MyA4Ljk4MyAwIDAgMS0uMDUtMy45MDUgOC45MDYgOC45MDYgMCAwIDEgMS40Ni0zLjMxM0E4Ljk5MyA4Ljk5MyAwIDAgMSAxMS4yMyA4LjM5YTguOTM3IDguOTM3IDAgMCAxIDQuNzAyLTEuMzQ0aC4xMTJjLjQyIDAgLjg0LjAyOSAxLjI1NS4wODhhOC45MzggOC45MzggMCAwIDEgMy40NDggMS4yNTYgOS4wMDMgOS4wMDMgMCAwIDEgMi41NTQgMi40MDQgOS4wOTMgOS4wOTMgMCAwIDEgMS40NTkgMy4zMTMgOS4wNDMgOS4wNDMgMCAwIDEtLjA1IDMuOTEyIDguOTI1IDguOTI1IDAgMCAxLTEuNTI2IDMuMjZjLS4yLjI2NS0uNDA5LjQ5NS0uNjM3Ljc0NWwtLjIzLjI1NGMtLjAxNy4wMTYtLjAzLjAyNy0uMDQuMDQzLS44MDQuOTYxLTEuMTk1IDEuOTI3LTEuMTk1IDIuOTQ4YTQuMjUgNC4yNSAwIDAgMCAyLjIzNyAzLjczNWMtLjc5NS40NDEtMS42My44MDktMi40OTEgMS4wOThsLS44NjIuMjYtLjAxOC0uMDA0Wm0tMy45NTYtMTEuMzE0YTIuOTU3IDIuOTU3IDAgMCAxLTIuOTUyLTIuOTUyIDIuOTU3IDIuOTU3IDAgMCAxIDIuOTUyLTIuOTUyIDIuOTU2IDIuOTU2IDAgMCAxIDIuOTUgMi45NTIgMi45NTcgMi45NTcgMCAwIDEtMi45NSAyLjk1MlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0NlcGg7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0Nsb3VkID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29DbG91ZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuMzcgMTguMzUyYy4wMzItLjAxLjA2Ni0uMDE0LjEtLjAyM0E2IDYgMCAwIDEgMTggMTBWMEM5LjE2MyAwIDIgNy4xNjQgMiAxNmMwIDIuNzkzLjcyIDUuNDE3IDEuOTc2IDcuNzAyYTE4Ljk0NyAxOC45NDcgMCAwIDEgOC4zOTMtNS4zNDlcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xOCAwQTE1Ljk1OSAxNS45NTkgMCAwIDAgNS43MTcgNS43NWExNi4wMDYgMTYuMDA2IDAgMCAwIDcuNTQxIDUuMDMyYy43MS4yMiAxLjQ3Ny4xMzUgMi4xNDYtLjE4OEE1Ljk0IDUuOTQgMCAwIDEgMTggMTBhNS45NCA1Ljk0IDAgMCAxIDIuNTk2LjU5NGMuNjY5LjMyMyAxLjQzNi40MDggMi4xNDYuMTg4YTE2LjAxIDE2LjAxIDAgMCAwIDcuNTQxLTUuMDMyQTE1Ljk1OSAxNS45NTkgMCAwIDAgMTggMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMjIuNzQyIDIxLjIxOGMtLjcxLS4yMi0xLjQ3OC0uMTM1LTIuMTQ2LjE4OEE1Ljk0NyA1Ljk0NyAwIDAgMSAxOCAyMmE1Ljk0IDUuOTQgMCAwIDEtMi41OTYtLjU5NGMtLjY2OS0uMzIzLTEuNDM2LS40MDgtMi4xNDYtLjE4OGExNi4wMDYgMTYuMDA2IDAgMCAwLTcuNTQgNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAgMCAxOCAzMmM0LjkzNiAwIDkuMzQ4LTIuMjM2IDEyLjI4My01Ljc1YTE2LjAxNiAxNi4wMTYgMCAwIDAtNy41NC01LjAzMlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29DbG91ZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQ2xvdWRFY2UgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Nsb3VkRWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggMHYxMGE2IDYgMCAwIDAtNS41MyA4LjMzYy0uMDM0LjAwOS0uMDY4LjAxMi0uMS4wMjNBMTguOTQ3IDE4Ljk0NyAwIDAgMCAzLjk3NSAyMy43IDE1LjkzNCAxNS45MzQgMCAwIDEgMiAxNkMyIDcuMTY0IDkuMTYzIDAgMTggMFptMCAxM2EzIDMgMCAxIDEgMCA2IDMgMyAwIDAgMSAwLTZaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBBRUZBXCIsXG4gICAgZDogXCJNMjIuNzQyIDIxLjIxOGMtLjcxLS4yMi0xLjQ3OC0uMTM1LTIuMTQ2LjE4OEE1Ljk0NyA1Ljk0NyAwIDAgMSAxOCAyMmE1Ljk0IDUuOTQgMCAwIDEtMi41OTYtLjU5NGMtLjY2OS0uMzIzLTEuNDM2LS40MDgtMi4xNDYtLjE4OGExNi4wMDYgMTYuMDA2IDAgMCAwLTcuNTQgNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAgMCAxOCAzMmM0LjkzNiAwIDkuMzQ4LTIuMjM2IDEyLjI4My01Ljc1YTE2LjAxNiAxNi4wMTYgMCAwIDAtNy41NC01LjAzMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTggMEExNS45NTkgMTUuOTU5IDAgMCAwIDUuNzE3IDUuNzVhMTYuMDA2IDE2LjAwNiAwIDAgMCA3LjU0MSA1LjAzMmMuNzEuMjIgMS40NzcuMTM1IDIuMTQ2LS4xODhBNS45NCA1Ljk0IDAgMCAxIDE4IDEwYTUuOTQgNS45NCAwIDAgMSAyLjU5Ni41OTRjLjY2OS4zMjMgMS40MzYuNDA4IDIuMTQ2LjE4OGExNi4wMSAxNi4wMSAwIDAgMCA3LjU0MS01LjAzMkExNS45NTkgMTUuOTU5IDAgMCAwIDE4IDBcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29DbG91ZEVjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQ29kZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ29kZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNzUgMTIgMTYgMzJoMTBsLTMuNC0xMC44OEExMyAxMyAwIDAgMCAxMC4xOSAxMmgtLjQ0WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzIyQTdGM1wiLFxuICAgIGQ6IFwiTTI1LjcyNSAxMS45M0ExNyAxNyAwIDAgMCA5LjUgMEg2bDMuNzUgMTJoLjQ0YTEzIDEzIDAgMCAxIDEyLjQxIDkuMTJMMjYgMzJoNmwtNi4yNzUtMjAuMDdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMzc3Q0FcIixcbiAgICBkOiBcIk03LjkxIDE2LjE3NSAwIDMyaDEyLjg1NXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Db2RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Db2Rlc2FuZGJveCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ29kZXNhbmRib3goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC43MzggMjguMDQ0VjE2LjY4MUwzLjE3MiAxMC45MTl2Ni40Nmw1LjMyIDIuNjd2NC44ODlsNi4yNDYgMy4xMDZabTIuMzQ0LjA2NiA2LjM1Ny0zLjE3di01LjAwMmw1LjM1My0yLjY4NlYxMC44N2wtMTEuNzEgNS44NTRWMjguMTFaTTI3LjMwNiA4Ljk5M2wtNi4wMDMtMy4wMTItNS4yODYgMi42NTYtNS4zMjUtMi42NTlMNC42MzcgOS4wM2wxMS4zMTcgNS42MzggMTEuMzUyLTUuNjc1Wk0uODI4IDIzLjc0NFY4LjMyNEwxNS45ODEuNjg5bDE1LjE1NSA3LjYwNFYyMy43MkwxNS45OCAzMS4yOC44MjggMjMuNzQzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0NvZGVzYW5kYm94OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Db3VjaGJhc2UgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0NvdWNoYmFzZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0VEMjIyNlwiLFxuICAgIGQ6IFwiTTE2LjA3Mi4wMjRDNy4yOS4wMjQuMTQ0IDcuMTQ2LjE0NCAxNS45NTJjMCA4Ljc4MiA3LjEyMiAxNS45MjggMTUuOTI4IDE1LjkyOEMyNC44NTQgMzEuODggMzIgMjQuNzU4IDMyIDE1Ljk1MiAzMiA3LjE0NiAyNC44NTQuMDI0IDE2LjA3Mi4wMjRabTEwLjc1NSAxOC43MTljMCAuOTYyLS41NTMgMS44MDQtMS42MzYgMS45OTctMS44NzcuMzM2LTUuODIzLjUzLTkuMTE5LjUzLTMuMjk2IDAtNy4yNDItLjE5NC05LjExOS0uNTMtMS4wODItLjE5My0xLjYzNi0xLjAzNS0xLjYzNi0xLjk5N3YtNi4yMDhjMC0uOTYyLjc0Ni0xLjg1MiAxLjYzNi0xLjk5Ny41NTQtLjA5NiAxLjg1My0uMTkyIDIuODY0LS4xOTIuMzg1IDAgLjY5Ny4yODkuNjk3Ljc0NnY0LjM1NWw1LjU4Mi0uMTIgNS41ODIuMTJ2LTQuMzU1YzAtLjQ1Ny4zMTMtLjc0Ni42OTgtLjc0NiAxLjAxIDAgMi4zMS4wOTYgMi44NjMuMTkyLjkxNC4xNDUgMS42MzYgMS4wMzUgMS42MzYgMS45OTctLjA0OCAyLjA0NS0uMDQ4IDQuMTM5LS4wNDggNi4yMDhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ291Y2hiYXNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Eb2NrZXIgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0RvY2tlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzEzNkVBM1wiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xOC4wOTkgMTUuMTA4aDMuMzA0di0yLjk3M0gxOC4xdjIuOTczem0tMy45MDUgMGgzLjMwNHYtMi45NzNoLTMuMzA0djIuOTczem0tMy45MDUgMGgzLjMwNHYtMi45NzNIMTAuMjl2Mi45NzN6bS0zLjkwNSAwSDkuNjl2LTIuOTczSDYuMzg0djIuOTczem0tMy45MDQgMGgzLjMwNHYtMi45NzNIMi40OHYyLjk3M3ptMy45MDQtMy41NjhIOS42OVY4LjU2OEg2LjM4NHYyLjk3MnptMy45MDUgMGgzLjMwNFY4LjU2OEgxMC4yOXYyLjk3MnptMy45MDUgMGgzLjMwNFY4LjU2OGgtMy4zMDR2Mi45NzJ6bTAtMy41NjdoMy4zMDRWNWgtMy4zMDR2Mi45NzN6bTE3LjEzOSA1LjQwMmMtLjcyMi0uNDc4LTIuMzgtLjY1My0zLjY1Ni0uNDE1LS4xNjQtMS4xOS0uODM0LTIuMjIxLTIuMDUyLTMuMTUzbC0uNy0uNDYzLS40NjguNjk0Yy0uNTk4Ljg5My0uODk3IDIuMTMtLjggMy4zMTcuMDQ1LjQxOC4xODMgMS4xNjQuNjE3IDEuODItLjQzMy4yMzEtMS4yOS41NDktMi40Mi41MjhILjEyNGwtLjA0My4yNDdjLS4yMDQgMS4xOTMtLjIgNC45MTQgMi4yNCA3Ljc3NEM0LjE3OCAyNS44OTggNi45NiAyNyAxMC41OSAyN2M3Ljg3IDAgMTMuNjkzLTMuNTg2IDE2LjQyLTEwLjEwNCAxLjA3My4wMiAzLjM4MS4wMDYgNC41NjctMi4yMzcuMDMxLS4wNTEuMTAyLS4xODYuMzEtLjYxbC4xMTMtLjIzNC0uNjY3LS40NHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Eb2NrZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0Ryb3B3aXphcmQgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Ryb3B3aXphcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fZHJvcHdpemFyZCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJNOCAyOS42MXM5LjU1IDQuNzQgMTYuODU2LS44OTNjLTEuOTA1LTUuMTE0LTUuMjUtMTkuODY3LTcuMjI2LTI2LjM4My0uNDIyLTEuMzg5LS40OS0xLjUyNy0uNjYzLTEuOTA5LS45NjQtMi4xMzQtMS45NzggNC4xNDItMy42MjggMTAuNDU5QzEyLjc0OSAxMy4xNDggOCAyOS42MSA4IDI5LjYxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTkuOTI2IDI4LjU2M3M4LjE3IDQuNzk0IDE0LjkzLjE1NGMtLjE4LS44MDctLjY0Mi0yLjEwMy0uOTU1LTMuMzExLTEuNjY0LTYuNDE2LTQuNjc2LTE3LjI0OC02LjE0NC0yMi42MjYtMS41OS01LjgyMi0yLjEwNS45ODYtMy45NjEgOC4yMy0uNTY0IDIuMjA0LTMuODcgMTcuNTUzLTMuODcgMTcuNTUzXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGOUE3MkJcIixcbiAgICBkOiBcIm0xMi4xNCAyNC40MS44NS0xLjQ2Ni43OTMgMS41NDQtLjkwOCAxLjk5LS43MzUtMi4wNjlabTYuOTM0LTUuNTQ1Ljg1LTEuNDY1Ljc5MyAxLjU0My0uOTA4IDEuOTktLjczNS0yLjA2OFptLTQuNzQ3LTUuODUxLjg1LTEuNDY1Ljc5MiAxLjU0My0uOTA4IDEuOTktLjczNC0yLjA2OFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGMjAwXCIsXG4gICAgZDogXCJtMTIuMTQgMjQuNDEuODUtMS43MTYuNzkzIDEuNzk0LS45MDcgMS40NjgtLjczNi0xLjU0NlptNi45MzQtNS41NDUuODUxLTEuNzE2Ljc5MiAxLjc5NC0uOTA2IDEuNDY4LS43MzctMS41NDZabS00Ljc0Ny01Ljg1MS44NS0xLjcxNi43OTIgMS43OTQtLjkwNiAxLjQ2OC0uNzM2LTEuNTQ2XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMyNDI2NURcIixcbiAgICBkOiBcIk0xMi45ODcgMjguNDIyczYuMDgyIDEuMDE1IDEwLjA4Ni0xLjU0OWMtLjUwMiAxLjU1LTQuOTkxIDMuMzE0LTEwLjA4NiAxLjU1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICB4MTogMzMuNDczLFxuICAgIHgyOiA3Ljc1MSxcbiAgICB5MTogNy42NzQsXG4gICAgeTI6IDIxLjMzMSxcbiAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIHN0b3BDb2xvcjogXCIjMzg3MUMxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDAuNTE1LFxuICAgIHN0b3BDb2xvcjogXCIjMkMzNzkyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDAuODY1LFxuICAgIHN0b3BDb2xvcjogXCIjMjQyNjVEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDEsXG4gICAgc3RvcENvbG9yOiBcIiMyNTI3NjFcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICB4MTogMjEuMDI4LFxuICAgIHgyOiA2LjAxNyxcbiAgICB5MTogMTQuOTI4LFxuICAgIHkyOiAxOC44NDQsXG4gICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBzdG9wQ29sb3I6IFwiIzM4NzFDMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiAwLjUxNSxcbiAgICBzdG9wQ29sb3I6IFwiIzJDMzc5MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiAwLjg2NSxcbiAgICBzdG9wQ29sb3I6IFwiIzI0MjY1RFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiAxLFxuICAgIHN0b3BDb2xvcjogXCIjMjUyNzYxXCJcbiAgfSkpKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Ecm9wd2l6YXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29FbGFzdGljID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FbGFzdGljKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIFwiZGF0YS10eXBlXCI6IFwibG9nb0VsYXN0aWNcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI2ZmZlwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zMC44NiAxMy4xMjlBNi4zMzMgNi4zMzMgMCAwIDEgMzIgMTYuNzdhNi40MTkgNi40MTkgMCAwIDEtMS4xNjIgMy42NTIgNi4zODIgNi4zODIgMCAwIDEtMy4wMzIgMi4zMzEgNC44MzMgNC44MzMgMCAwIDEtMS42NzIgNS41NDIgNC43ODkgNC43ODkgMCAwIDEtNS43Ny0uMDc0IDkuMDE2IDkuMDE2IDAgMCAxLTQuNSAzLjMyMiA4Ljk4MiA4Ljk4MiAwIDAgMS01LjU4Ny4wMjMgOS4wMTQgOS4wMTQgMCAwIDEtNC41MjYtMy4yODcgOS4wNjcgOS4wNjcgMCAwIDEtMS43MjctNS4zMzNjMC0uNTc5LjA1My0xLjE1Ni4xNi0xLjcyNUE2LjMwNSA2LjMwNSAwIDAgMSAxLjE0NSAxOC45IDYuMzQxIDYuMzQxIDAgMCAxIDAgMTUuMjQyYTYuNDIgNi40MiAwIDAgMSAxLjE2My0zLjY1MiA2LjM4NCA2LjM4NCAwIDAgMSAzLjAzNS0yLjMzIDQuODMzIDQuODMzIDAgMCAxIDEuNjU4LTUuNTU3IDQuNzg5IDQuNzg5IDAgMCAxIDUuNzguMDcgOS4wMzcgOS4wMzcgMCAwIDEgNC45My0zLjQ0NiA5LjAwNyA5LjAwNyAwIDAgMSA1Ljk5NC40MTkgOS4wNSA5LjA1IDAgMCAxIDQuNDA3IDQuMDk4IDkuMDk3IDkuMDk3IDAgMCAxIC44NzMgNS45NjUgNi4yOTggNi4yOTggMCAwIDEgMy4wMiAyLjMyWm0tMTguMjguNjU4IDcuMDAyIDMuMjExIDcuMDY2LTYuMjEzYTcuODUgNy44NSAwIDAgMCAuMTUyLTEuNTU3YzAtMS42OTItLjUzOS0zLjM0LTEuNTQtNC43MDRhNy44OTcgNy44OTcgMCAwIDAtNC4wMi0yLjg2OSA3Ljg3IDcuODcgMCAwIDAtNC45MzIuMDg2IDcuOSA3LjkgMCAwIDAtMy45MiAzLjAwN2wtMS4xNzQgNi4xMTggMS4zNjcgMi45Mi0uMDAxLjAwMVptLTcuMjQ3IDcuNDQxQTcuOTY0IDcuOTY0IDAgMCAwIDYuNzIgMjcuNTNhNy45MTggNy45MTggMCAwIDAgNC4wNCAyLjg3NCA3Ljg5IDcuODkgMCAwIDAgNC45NS0uMDk3IDcuOTIgNy45MiAwIDAgMCAzLjkyNi0zLjAzbDEuMTY2LTYuMTAyLTEuNTU1LTIuOTg1LTcuMDMtMy4yMTEtNi44ODUgNi4yNDguMDAxLjAwMVptNC43NTUtMTEuMDI0LTQuOC0xLjEzNy4wMDItLjAwMmEzLjgyIDMuODIgMCAwIDEgMS4zMTItNC4zNTggMy43ODUgMy43ODUgMCAwIDEgNC41MzguMDIzbC0xLjA1MiA1LjQ3NFptLTUuMjE2LjAxYTUuMjk0IDUuMjk0IDAgMCAwLTIuNTk1IDEuODgyIDUuMzI0IDUuMzI0IDAgMCAwLS4xNDIgNi4xMjQgNS4yODcgNS4yODcgMCAwIDAgMi41MDUgMmw2LjczMy02LjEwMS0xLjIzNS0yLjY1LTUuMjY2LTEuMjU1Wm0xOC4yODYgMTcuODQ4YTMuNzM3IDMuNzM3IDAgMCAxLTIuMjg1LS43ODVsMS4wMzctNS40NTQgNC44IDEuMTI1YTMuODEyIDMuODEyIDAgMCAxLTEuODAxIDQuNjhjLS41NC4yODMtMS4xNC40MzItMS43NTEuNDM0Wm0tMS4zMS03LjQ5OSA1LjI4IDEuMjM4YTUuMzQgNS4zNCAwIDAgMCAyLjYyMi0xLjkzOCA1LjM3IDUuMzcgMCAwIDAgMS4wMTMtMy4xMDYgNS4zMTEgNS4zMTEgMCAwIDAtLjkzNi0zLjAxIDUuMjgyIDUuMjgyIDAgMCAwLTIuNDc1LTEuOTQ0bC02LjkwNCA2LjA3IDEuNCAyLjY5WlwiLFxuICAgIGNsYXNzTmFtZTogXCJvdXRsaW5lXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZDogXCJtMTIuNTggMTMuNzg3IDcuMDAyIDMuMjExIDcuMDY2LTYuMjEzYTcuODQ5IDcuODQ5IDAgMCAwIC4xNTItMS41NTdjMC0xLjY5Mi0uNTM5LTMuMzQtMS41NC00LjcwNGE3Ljg5NyA3Ljg5NyAwIDAgMC00LjAyLTIuODY5IDcuODcgNy44NyAwIDAgMC00LjkzMi4wODYgNy45IDcuOSAwIDAgMC0zLjkyIDMuMDA3bC0xLjE3NCA2LjExOCAxLjM2NyAyLjkyLS4wMDEuMDAxWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNNS4zMzMgMjEuMjI4QTcuOTY0IDcuOTY0IDAgMCAwIDYuNzIgMjcuNTNhNy45MTggNy45MTggMCAwIDAgNC4wNCAyLjg3NCA3Ljg5IDcuODkgMCAwIDAgNC45NS0uMDk3IDcuOTIgNy45MiAwIDAgMCAzLjkyNi0zLjAzbDEuMTY2LTYuMTAyLTEuNTU1LTIuOTg1LTcuMDMtMy4yMTEtNi44ODUgNi4yNDguMDAxLjAwMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwibTUuMjg4IDkuMDY3IDQuOCAxLjEzN0wxMS4xNCA0LjczYTMuNzg1IDMuNzg1IDAgMCAwLTUuOTE0IDEuOTQgMy44MiAzLjgyIDAgMCAwIC4wNjQgMi4zOTVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzFCQTlGNVwiLFxuICAgIGQ6IFwiTTQuODcyIDEwLjIxNGE1LjI5NCA1LjI5NCAwIDAgMC0yLjU5NSAxLjg4MiA1LjMyNCA1LjMyNCAwIDAgMC0uMTQyIDYuMTI0IDUuMjg3IDUuMjg3IDAgMCAwIDIuNTA1IDJsNi43MzMtNi4xMDEtMS4yMzUtMi42NS01LjI2Ni0xLjI1NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzkzQzkwRVwiLFxuICAgIGQ6IFwiTTIwLjg3MyAyNy4yNzdhMy43MzYgMy43MzYgMCAwIDAgMi4yODUuNzg1IDMuNzgzIDMuNzgzIDAgMCAwIDMuMTAxLTEuNjMgMy44MTIgMy44MTIgMCAwIDAgLjQ1MS0zLjQ4NGwtNC44LTEuMTI1LTEuMDM3IDUuNDU0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDdDXCIsXG4gICAgZDogXCJtMjEuODQ4IDIwLjU2MyA1LjI4IDEuMjM4YTUuMzQgNS4zNCAwIDAgMCAyLjYyMi0xLjkzOCA1LjM3IDUuMzcgMCAwIDAgMS4wMTMtMy4xMDYgNS4zMTIgNS4zMTIgMCAwIDAtLjkzNi0zLjAxIDUuMjgzIDUuMjgzIDAgMCAwLTIuNDc1LTEuOTQ0bC02LjkwNCA2LjA3IDEuNCAyLjY5WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0VsYXN0aWM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0VsYXN0aWNTdGFjayA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRWxhc3RpY1N0YWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA0RTk4XCIsXG4gICAgZDogXCJNMCAyLjM3QTIuMzcgMi4zNyAwIDAgMSAyLjM3IDBoMjcuMjZBMi4zNyAyLjM3IDAgMCAxIDMyIDIuMzd2Ni41MkgwVjIuMzdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0wIDIwLjE0OGgzMnYtOC4yOTZIMHY4LjI5NlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzA3Q1wiLFxuICAgIGQ6IFwiTTAgMjMuMTExaDMydjYuNTE5QTIuMzcgMi4zNyAwIDAgMSAyOS42MyAzMkgyLjM3QTIuMzcgMi4zNyAwIDAgMSAwIDI5LjYzdi02LjUyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0VsYXN0aWNTdGFjazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAxNmMwIDEuMzg0LjE5NCAyLjcyLjUyNCA0SDIyYTQgNCAwIDAgMCAwLThIMi41MjRBMTUuOTg0IDE1Ljk4NCAwIDAgMCAyIDE2XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZDogXCJNMjguOTI0IDcuNjYyQTE1LjM4MSAxNS4zODEgMCAwIDAgMzAuNDggNkMyNy41NDcgMi4zNDYgMjMuMDUgMCAxOCAwIDExLjY3OSAwIDYuMjM5IDMuNjc4IDMuNjQ0IDlIMjUuNTFhNS4wMzkgNS4wMzkgMCAwIDAgMy40MTMtMS4zMzhcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTI1LjUxIDIzSDMuNjQ1QzYuMjQgMjguMzIzIDExLjY3OSAzMiAxOCAzMmM1LjA1IDAgOS41NDctMi4zNDYgMTIuNDgtNmExNS4zODEgMTUuMzgxIDAgMCAwLTEuNTU2LTEuNjYyQTUuMDM0IDUuMDM0IDAgMCAwIDI1LjUxIDIzXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0VsYXN0aWNzZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTYgMGMtMi45MTggMC01LjY0NS43OTQtOCAyLjE1OCA0Ljc3NyAyLjc2OCA4IDcuOTIzIDggMTMuODQyIDAgNS45MTktMy4yMjMgMTEuMDc0LTggMTMuODQyQTE1LjkwNyAxNS45MDcgMCAwIDAgMTYgMzJjOC44MzcgMCAxNi03LjE2MyAxNi0xNlMyNC44MzcgMCAxNiAwelwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDI0aDIuMjIyQTEyLjk5NiAxMi45OTYgMCAwIDAgMTMgMTZjMC0yLjkzNS0xLjAxMi01Ljc0NC0yLjc3OC04SDhhOCA4IDAgMCAwIDAgMTZ6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE2IDhoLTIuMTUyQTE1Ljg3NyAxNS44NzcgMCAwIDEgMTYgMTZjMCAyLjkxOC0uNzg2IDUuNjQ3LTIuMTUyIDhIMTZhOCA4IDAgMCAwIDAtMTZ6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29FbnRlcnByaXNlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29FdGNkID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FdGNkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCIjNDE5RURBXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjY1IDE0LjE2NGMwIDEuMTg5LS45MzMgMi4xNS0yLjA4MyAyLjE1LTEuMTUyIDAtMi4wODItLjk2MS0yLjA4Mi0yLjE1IDAtMS4xODUuOTMtMi4xNSAyLjA4Mi0yLjE1IDEuMTUgMCAyLjA4My45NjUgMi4wODMgMi4xNXptMi42OTMgMGMwIDEuMTg5LjkzNCAyLjE1IDIuMDg0IDIuMTVzMi4wODMtLjk2MSAyLjA4My0yLjE1YzAtMS4xODUtLjkzMy0yLjE1LTIuMDgzLTIuMTUtMS4xNSAwLTIuMDg0Ljk2NS0yLjA4NCAyLjE1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzEuNTIyIDE2LjQ5NWE1Ljg0NSA1Ljg0NSAwIDAgMS0zLjEwNS0uNjE4Yy4yNzItMS42MDMuMzg3LTMuMjE4LjM1Ny00LjgyN2EyNC44OTYgMjQuODk2IDAgMCAwLTMuMDI3LTMuNzAzIDYuMTM3IDYuMTM3IDAgMCAxIDIuMTMzLTIuMzZsLjM5MS0uMjUtLjMwNC0uMzU0Yy0xLjU3LTEuODI1LTMuNDQ0LTMuMjM1LTUuNTY4LTQuMTkzTDIxLjk3NSAwbC0uMTA3LjQ2MmE2LjI0OCA2LjI0OCAwIDAgMS0xLjUxIDIuODI5IDIzLjc3IDIzLjc3IDAgMCAwLTQuMzYyLTEuODU1IDIzLjc5IDIzLjc5IDAgMCAwLTQuMzU1IDEuODUxQTYuMjQ2IDYuMjQ2IDAgMCAxIDEwLjEzNy40NjVsLS4xMDgtLjQ2Mi0uNDIzLjE4OWMtMi4wOTcuOTQzLTQuMDIyIDIuMzkyLTUuNTY2IDQuMTlsLS4zMDYuMzU1LjM5LjI1YTYuMTI1IDYuMTI1IDAgMCAxIDIuMTI5IDIuMzQ3IDI1LjAwMSAyNS4wMDEgMCAwIDAtMy4wMjIgMy42ODkgMjYuMDY4IDI2LjA2OCAwIDAgMCAuMzQ3IDQuODYgNS44MzIgNS44MzIgMCAwIDEtMy4wOS42MTJMLjAzIDE2LjQ2bC4wNDMuNDczYTE2LjcyMyAxNi43MjMgMCAwIDAgMi4xNCA2Ljc2NWwuMjM0LjQxLjM1LS4zMDhhNS45MTQgNS45MTQgMCAwIDEgMi44MzctMS4zNzIgMjUuMjU1IDI1LjI1NSAwIDAgMCAyLjQyOSA0LjA4M2MxLjQ3NS41MzMgMy4wMTMuOTMgNC42MDEgMS4xNjdhNi4zNTkgNi4zNTkgMCAwIDEtLjM4MyAzLjI0M2wtLjE3NS40MzkuNDUuMTAyYzEuMTUuMjYxIDIuMzEuMzk0IDMuNDQ3LjM5NGwzLjQ0Ny0uMzk0LjQ1LS4xMDItLjE3NS0uNDRhNi4zNzYgNi4zNzYgMCAwIDEtLjM4My0zLjI0NCAyMy45MDUgMjMuOTA1IDAgMCAwIDQuNTg1LTEuMTY1IDI1LjI4NiAyNS4yODYgMCAwIDAgMi40My00LjA4NiA1Ljk0IDUuOTQgMCAwIDEgMi44NTEgMS4zNzNsLjM1LjMwNi4yMzMtLjQwOGExNi42NjEgMTYuNjYxIDAgMCAwIDIuMTQtNi43NjRsLjA0Mi0uNDcyLS40NS4wMzZaTTIwLjkzIDIyLjI3OGMtMS42My40NTgtMy4yODcuNjg5LTQuOTMzLjY4OS0xLjY1IDAtMy4zMDQtLjIzMS00LjkzNi0uNjlhMjAuMDI4IDIwLjAyOCAwIDAgMS0yLjExMy00LjU5NCAyMC4wNzIgMjAuMDcyIDAgMCAxLS44OS01LjA0IDE5LjA3NiAxOS4wNzYgMCAwIDEgMy41NzYtMy41MTYgMTguODY3IDE4Ljg2NyAwIDAgMSA0LjM2My0yLjQ0OCAxOC45NDQgMTguOTQ0IDAgMCAxIDQuMzU1IDIuNDQzIDE5LjE5IDE5LjE5IDAgMCAxIDMuNTkyIDMuNTM4Yy0uMDkgMS43My0uMzkgMy40MS0uODk5IDUuMDE5YTE5Ljk2NSAxOS45NjUgMCAwIDEtMi4xMTUgNC41OTlaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0V0Y2Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0djcCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR2NwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2djcCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgZDogXCJNLjA4NS4xaDQuNTQ5djYuMjkxSC4wODV6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNEQjQ0MzdcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNMjIuNTcgMjkuOTgyaC01Ljc0OWMuNTI3IDAgLjk4Ny0uMjgyIDEuMjMzLS43TDI1Ljg1NyAxNiAyMC45MyA3LjYxbDUuNzQ4LjAwMWMuNDkyIDAgLjk3LjI1MSAxLjIzMi43bDMuNjk4IDYuMjkxYy40OS44MzcuNTI2IDEuOSAwIDIuNzk3bC02LjU3MiAxMS4xODVhMi44NTMgMi44NTMgMCAwIDEtMi40NjQgMS4zOThabS0uNzEtMi43OTZjMCAuMzg2LjMxOC43LjcxLjdhLjcwNS43MDUgMCAwIDAgLjcxMi0uN2MwLS4zODYtLjMxOC0uNy0uNzExLS43YS43MDUuNzA1IDAgMCAwLS43MTIuN1ptNi45MjctMTAuNThjLjM0LjE5My43NzUuMDc4Ljk3MS0uMjU2YS42OTIuNjkyIDAgMCAwLS4yNi0uOTU1LjcxOC43MTggMCAwIDAtLjk3Mi4yNTYuNjkyLjY5MiAwIDAgMCAuMjYuOTU1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNDI4NUY0XCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwibTI1LjAzNiAzLjQxNiAyLjg3MyA0Ljg5NGExLjQyNyAxLjQyNyAwIDAgMC0xLjIzMi0uNjk5SDExLjA3MWwtNC45MjggOC4zODgtMi44NzQtNC44OTJhMS4zNzcgMS4zNzcgMCAwIDEgMC0xLjM5OWwzLjY5Ni02LjI5MmEyLjg1MyAyLjg1MyAwIDAgMSAyLjQ2NC0xLjM5OGgxMy4xNDNjLjk4MiAwIDEuOTM3LjUwMiAyLjQ2NCAxLjM5OFpNMTAuMTQgNC44MTRjMC0uMzg2LS4zMTgtLjctLjcxLS43YS43MDUuNzA1IDAgMCAwLS43MTIuN2MwIC4zODYuMzE4LjcuNzExLjdhLjcwNS43MDUgMCAwIDAgLjcxMS0uN1ptMTIuNzg3LjYwNmEuNjkyLjY5MiAwIDAgMCAuMjYtLjk1NS43MTguNzE4IDAgMCAwLS45NzEtLjI1Ni42OTIuNjkyIDAgMCAwLS4yNi45NTUuNzE4LjcxOCAwIDAgMCAuOTcxLjI1NlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y0QjQwMFwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIm0uMzk0IDE0LjYwMSAyLjg3NS00Ljg5M2MtLjI2My40NDktLjI0NS45OCAwIDEuMzk5TDExLjA3IDI0LjM5aDkuODU3bC0yLjg3NCA0Ljg5MmMtLjI0Ni40MTgtLjcwNi43LTEuMjMzLjdIOS40MjhhMi44NTQgMi44NTQgMCAwIDEtMi40NjQtMS4zOThMLjM5NCAxNy4zOThhMi43NTQgMi43NTQgMCAwIDEgMC0yLjc5N1ptMi44Mi43OTNhLjcxOC43MTggMCAwIDAtLjk3Mi4yNTYuNjkzLjY5MyAwIDAgMCAuMjYuOTU1Yy4zNC4xOTMuNzc1LjA3OC45NzEtLjI1NmEuNjkyLjY5MiAwIDAgMC0uMjYtLjk1NVpNOS4wNzIgMjYuNThhLjY5Mi42OTIgMCAwIDAtLjI2Ljk1NS43MTguNzE4IDAgMCAwIC45NzEuMjU2LjY5Mi42OTIgMCAwIDAgLjI2LS45NTUuNzE4LjcxOCAwIDAgMC0uOTcxLS4yNTZaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIm0xOC4wNTQgMjkuMjgyIDIuODc1LTQuODkySDE3Ljk2bC0xLjEzOCA1LjU5MWMuNTI2IDAgLjk4Ni0uMjggMS4yMzItLjY5OU0yNi42NzggNy42MTFoLTUuNzQ5bDEuNDg0IDIuNTI3TDI3LjkxIDguMzFhMS40MjcgMS40MjcgMCAwIDAtMS4yMzItLjdcIixcbiAgICBvcGFjaXR5OiAwLjFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBvcGFjaXR5OiAwLjEsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgyLjk5NCA5LjYwOSlcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTS4yNzUgMS40OTggMy4xNSA2LjM5MWwxLjQ4NS0yLjUyN0wuMjc1LjFjLS4yNjMuNDQ4LS4yNDUuOTggMCAxLjM5OFwiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIilcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQ0NDXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTExLjA3MSAyNC4zOSA2LjE0MyAxNmw0LjkyOC04LjM5aDkuODU4TDI1Ljg1NyAxNmwtNC45MjggOC4zOUgxMS4wN1pNMjAuMjY4IDE2YzAtMi4zMTctMS45MS00LjE5NC00LjI2OC00LjE5NC0yLjM1NyAwLTQuMjY4IDEuODc3LTQuMjY4IDQuMTk0IDAgMi4zMTYgMS45MSA0LjE5NCA0LjI2OCA0LjE5NCAyLjM1NyAwIDQuMjY4LTEuODc4IDQuMjY4LTQuMTk0WlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29HY3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0djcE1vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0djcE1vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC4yNTYgMTUuOTgyYzAtMi4zMTYtMS45MS00LjE5NC00LjI2OC00LjE5NC0yLjM1NyAwLTQuMjY4IDEuODc4LTQuMjY4IDQuMTk0IDAgMi4zMTcgMS45MTEgNC4xOTUgNC4yNjggNC4xOTUgMi4zNTcgMCA0LjI2OC0xLjg3OCA0LjI2OC00LjE5NVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkuODcgMTYuNTQzYS44NjIuODYyIDAgMCAxLTEuMTY3LjMwOC44MzIuODMyIDAgMCAxLS4zMTItMS4xNDcuODYyLjg2MiAwIDAgMSAxLjE2Ny0uMzA4LjgzMi44MzIgMCAwIDEgLjMxMiAxLjE0N00yMi41NiAyOC4xNWEuODQ3Ljg0NyAwIDAgMS0uODU1LS44NGMwLS40NjQuMzgzLS44NC44NTUtLjg0cy44NTQuMzc2Ljg1NC44NGMwIC40NjQtLjM4Mi44NC0uODU0Ljg0bS0xMi43MTUtLjExM2EuODYzLjg2MyAwIDAgMS0xLjE2Ny0uMzA4LjgzMi44MzIgMCAwIDEgLjMxMi0xLjE0Ny44NjIuODYyIDAgMCAxIDEuMTY3LjMwOC44MzIuODMyIDAgMCAxLS4zMTIgMS4xNDdNMy41ODYgMTYuNTQyYS44NjMuODYzIDAgMCAxLTEuMTY3LjMwOC44MzIuODMyIDAgMCAxLS4zMTMtMS4xNDcuODYyLjg2MiAwIDAgMSAxLjE2Ny0uMzA4LjgzMi44MzIgMCAwIDEgLjMxMyAxLjE0N00yMi45ODcgNS42NjVhLjg2Mi44NjIgMCAwIDEtMS4xNjctLjMwOC44MzIuODMyIDAgMCAxIC4zMTItMS4xNDcuODYzLjg2MyAwIDAgMSAxLjE2OC4zMDguODMyLjgzMiAwIDAgMS0uMzEzIDEuMTQ3bS0xMy41Ny4xMTJhLjg0Ny44NDcgMCAwIDEtLjg1NC0uODRjMC0uNDY0LjM4Mi0uODQuODU0LS44NHMuODU1LjM3Ni44NTUuODRjMCAuNDY0LS4zODMuODQtLjg1NS44NG0yMi4xNzggOC43OTctMy42OTctNi4yOTJjLS4wMTQtLjAyMy0uMDMtLjA0My0uMDQ1LS4wNjVsLTIuODMtNC44MThBMi44NTQgMi44NTQgMCAwIDAgMjIuNTYgMkg5LjQxN2EyLjg1MyAyLjg1MyAwIDAgMC0yLjQ2NCAxLjM5OEwzLjI1NyA5LjY5bDMuMjg0IDUuNTkgNC41MTktNy42OWgxNS42MDVjLjQ5MSAwIC45NjkuMjUxIDEuMjMyLjY5OWgtNi41NjVsNC41MTMgNy42ODItNC45MzUgOC40LTIuODcgNC44ODNhMS40MjYgMS40MjYgMCAwIDEtMS4yMy42OTlsMy4yNzktNS41ODJoLTkuMDNsLTQuNTQ0LTcuNzM4LS4zODQtLjY1My0yLjg3NC00Ljg5M2ExLjM3NyAxLjM3NyAwIDAgMS0uMDAzLTEuMzkxTC4zODIgMTQuNTg0YTIuNzU0IDIuNzU0IDAgMCAwIDAgMi43OTZsNi41NyAxMS4xODZhMi44NTQgMi44NTQgMCAwIDAgMi40NjUgMS4zOThoNy4zOTJjLjA1NCAwIC4xMDctLjAwNS4xNi0uMDExaDUuNTlhMi44NTMgMi44NTMgMCAwIDAgMi40NjQtMS4zOTdsNi41NzItMTEuMTg2Yy41MjYtLjg5Ni40OS0xLjk2IDAtMi43OTZcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29HY3BNb25vOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29HaXRodWIgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0dpdGh1YihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBDNy4xNjQgMCAwIDcuMzQzIDAgMTYuNGMwIDcuMjQ4IDQuNTg0IDEzLjM5NCAxMC45NDIgMTUuNTYyLjguMTUgMS4wOTItLjM1NiAxLjA5Mi0uNzg5IDAtLjM5LS4wMTQtMS42ODQtLjAyMi0zLjA1My00LjQ1Ljk5MS01LjM5LTEuOTM0LTUuMzktMS45MzQtLjcyOC0xLjg5NC0xLjc3Ni0yLjM5OC0xLjc3Ni0yLjM5OC0xLjQ1NC0xLjAxNy4xMS0uOTk3LjExLS45OTcgMS42MDYuMTE0IDIuNDUyIDEuNjkgMi40NTIgMS42OSAxLjQyOCAyLjUwNiAzLjc0NiAxLjc4MSA0LjY1NiAxLjM2LjE0Ni0xLjA1Ni41Ni0xLjc4IDEuMDE2LTIuMTktMy41NTItLjQxNC03LjI4OC0xLjgyMS03LjI4OC04LjEwNSAwLTEuNzkyLjYyNC0zLjI1NCAxLjY0Ni00LjQwMi0uMTY0LS40MTYtLjcxNC0yLjA4NS4xNTgtNC4zNDIgMCAwIDEuMzQxLS40NCA0LjQgMS42ODFBMTQuODgyIDE0Ljg4MiAwIDAgMSAxNiA3LjkzMmMxLjM2LjAwNiAyLjcyOC4xODggNC4wMDYuNTUzIDMuMDUzLTIuMTI0IDQuMzk2LTEuNjgxIDQuMzk2LTEuNjgxLjg3NSAyLjI1OS4zMjUgMy45MjYuMTYgNC4zNCAxLjAyNiAxLjE0OCAxLjY0NSAyLjYxIDEuNjQ1IDQuNDAyIDAgNi4zLTMuNzQyIDcuNjg3LTcuMzA3IDguMDk0LjU3Ny41MDggMS4wODYgMS41MDUgMS4wODYgMy4wMzUgMCAyLjE5Mi0uMDIxIDMuOTYtLjAyMSA0LjUgMCAuNDM3LjI5Ljk0NyAxLjEwMS43ODdDMjcuNDIgMjkuNzkgMzIgMjMuNjQ0IDMyIDE2LjQgMzIgNy4zNDMgMjQuODM2IDAgMTYgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29HaXRodWI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0dtYWlsID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29HbWFpbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNjVBNERcIixcbiAgICBkOiBcIk0yOS4xNjIgNC4xNDljLjI5LS4xNzUuNTg4LS4wNzguODczIDBhMi42MTYgMi42MTYgMCAwIDEgMS45MDcgMi40NzZjLjAwNi4yOS0uMDA3LjU4MS0uMDA3Ljg2Ni0uMDg0IDAtLjEzNS4wNTItLjIuMDk3LS44MTUuNTgyLTEuNjQyIDEuMTY0LTIuNDUgMS43NTItLjMzLjIzOS0uNjkyLjQyNi0uOTcuNzMtLjExNiAwLS4yLjA3OC0uMjg0LjEzNi0yLjY5IDEuODU1LTUuMzc5IDMuNzA0LTguMDYyIDUuNTYtMS4zMzEuOTE4LTIuNjYzIDEuODQ5LTMuOTk1IDIuNzczaC0uMTFjLS4wNTgtLjA0NS0uMTEtLjEwMy0uMTY4LS4xNDJMNS44NjMgMTEuNTVjLS42NzItLjQ2Ni0xLjM0NC0uOTM4LTIuMDE3LTEuNDAzLS4wNzctLjA1Mi0uMTQ4LS4xNjItLjI0NS0uMTA0LS4wOS4wNTItLjAzMy4xNzUtLjA0NS4yNzItLjAwNy4wMzIgMCAuMDY1IDAgLjA5N3YxNi4xOTRjMCAuMTE2LjAwNi4yNC4wMTIuMzU1IDAgLjA2NS0uMDA2LjEyMy0uMDA2LjE4OC0xLjIyOC4xNDktMi4zNDctLjAyLTMuMTE2LTEuMTMxYTIuMzgxIDIuMzgxIDAgMCAxLS40NC0xLjM2NGMwLTYuMDMyLS4wMDYtMTIuMDU3LjAwNy0xOC4wODkgMC0xLjIyOC45OTUtMi4zMTQgMi4yMTctMi40ODguMTk0LS4wMjYuMzg4LS4wNTIuNTU2LjA3Ny4wNC4wMzkuMDcxLjA3OC4xMTcuMTEgNC4yNzMgMy4xNjggOC41NDYgNi4zMzUgMTIuODE5IDkuNTEuMTY4LjEyMi4yNzguMTE2LjQ0Ni0uMDA3IDMuNDEzLTIuNTIxIDYuODMzLTUuMDM2IDEwLjI0Ny03LjU1LjkwNS0uNjkyIDEuODIzLTEuMzg0IDIuNzQ3LTIuMDdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGNkY0RUNcIixcbiAgICBkOiBcIk0yOS4xNjIgNC4xNDljLS45MjQuNjg1LTEuODQyIDEuMzc3LTIuNzY3IDIuMDYyLTMuNDEzIDIuNTIxLTYuODMzIDUuMDMtMTAuMjQ2IDcuNTUtLjE2OC4xMjMtLjI3Mi4xMy0uNDQ2LjAwNy00LjI2Ny0zLjE3NC04LjU0LTYuMzM1LTEyLjgxMy05LjUxLS4wNDYtLjAzMi0uMDc4LS4wNy0uMTE3LS4xMS4wNzgtLjEyOS4yMTQtLjA4My4zMjQtLjA4M2gyNS43NDJjLjExIDAgLjIzOS0uMDQ2LjMyMy4wODRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNkUzRDZcIixcbiAgICBkOiBcIk0zLjU1NiAyNi45NWE2LjUzMyA2LjUzMyAwIDAgMS0uMDEzLS4zNTZWMTAuNGMwLS4wMzItLjAwNy0uMDY1IDAtLjA5Ny4wMTMtLjA5LS4wNDYtLjIxMy4wNDUtLjI3MS4wOTctLjA1OS4xNzQuMDUxLjI0Ni4xMDMuNjcyLjQ2NSAxLjM0NC45MzcgMi4wMTcgMS40MDNsOS44MzIgNi44NDZjLjA1OC4wNDUuMTE3LjA5Ny4xNjguMTQyLS4wMjYuMDI2LS4wNTguMDQ1LS4wODQuMDcxbC0uMDY0LjA2NWMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjRsLS4wNjQuMDY1Yy0uMDA3LjAxMy0uMDIuMDItLjAyNi4wMzIuMDEzLS4wMDYuMDItLjAxOS4wMzItLjAyNWwuMDY1LS4wNjVjLjA1MiAwIC4xMDMtLjAxMy4xMy0uMDY1LjAxOC0uMDIuMDQ0LS4wNDUuMDY0LS4wNjQuMDY0IDAgLjEyOS0uMDA3LjE5NC0uMDA3Ljg5OC42MjcgMS44MDMgMS4yNDggMi43MDIgMS44NzUgMi42NzYgMS44NTUgNS4zNTMgMy43MDQgOC4wMjMgNS41NzIuNDc4LjMzNyAxLjAwMi42MjggMS40MjggMS4wMzUtLjExNi4xMS0uMjU4LjAzOS0uMzg4LjA1OC4wMDctLjE0OS0uMTIyLS4xODgtLjIyLS4yNTItLjQ5LS4zNDMtLjk5NS0uNjcyLTEuNDczLTEuMDI4LS44MDItLjU4OC0xLjYxNy0xLjE1LTIuNDMxLTEuNzItLjY3OS0uNDcyLTEuMzUxLS45NjMtMi4wNS0xLjQwOS0uNjA3LS4zODgtMS4xNy0uODUzLTEuNzc3LTEuMjQ4LS42ODUtLjQ0LTEuMzMyLS45My0yLjAxLTEuMzc3LS41NjMtLjM2OC0xLjExMy0uNzYyLTEuNjYyLTEuMTUtLjExLS4wNzgtLjIwNy0uMTEtLjMyMy0uMDMzLS4yMzMuMTY4LS41My4yNzgtLjcyNC40Ni0uNTU2LjUxLTEuMjM1Ljg0LTEuODE3IDEuMzA1LS43NDMuNTg5LTEuNTQ1IDEuMTEyLTIuMzQgMS42MzYtMS4zMTkuODczLTIuNTk5IDEuODE2LTMuOTExIDIuNjk2YTQzLjY5NyA0My42OTcgMCAwIDAtMi4zMDggMS42MjljLS4yMDcuMTU1LS40ODUuMjI2LS42MTQuNDg1LS4xMy0uMDEzLS4yNzIuMDM4LS4zOTUtLjA0NiAyLjMxNS0xLjYxNiA0LjYzLTMuMjI2IDYuOTM3LTQuODQyLjMwNC0uMjEzLjY0Ni0uMzgxLjg5OS0uNjY2LjA0NS0uMDEzLjEwMy0uMDE5LjA5Ny0uMDg0IDAtLjAwNi0uMDEzLS4wMi0uMDItLjAyLS4wNjUtLjAwNi0uMDc3LjA0Ni0uMDkuMDkxLS4yMzMuMDEzLS4zNzUuMTk0LS41NS4zMS0yLjQ2MyAxLjctNC45MzIgMy4zODgtNy4zOTUgNS4wNzVabTExLjExOS03LjU2NC4wNjQtLjA2NWMuMDUyIDAgLjEwNC0uMDEzLjEzLS4wNjRsLjA2NC0uMDY1Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NS4wMDYtLjAxMy4wMTktLjAyLjAyNS0uMDMyLS4wMTIuMDA2LS4wMTkuMDItLjAzMi4wMjYtLjA1MiAwLS4xMDMuMDEzLS4xMy4wNjRsLS4wNjQuMDY1Yy0uMDUxIDAtLjEwMy4wMTMtLjEzLjA2NS0uMDE4LjAyNi0uMDM4LjA0NS0uMDU3LjA3LS4wMTMuMDA3LS4wMjYuMDE0LS4wMzMuMDI3LjAxMy0uMDA3LjAyNi0uMDEzLjAzMy0uMDI2Wm0tLjg0LjU3NWMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjUtLjAzOS4wMDYtLjA5LjAwNi0uMDk3LjA2NSAwIC4wMTIuMDI2LjAzOC4wMzkuMDM4LjA1Mi0uMDA2LjA1OC0uMDUxLjA2NS0uMDkuMDUxLS4wMDcuMDk2LS4wMTMuMTIyLS4wNzhhLjMxMS4zMTEgMCAwIDAgLjA3MS0uMDU4Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NWwuMDY0LS4wNjRjLjA1MiAwIC4xMDQtLjAxMy4xMy0uMDY1LjAwNi0uMDEzLjAyLS4wMi4wMjYtLjAzMi0uMDEzLjAwNi0uMDIuMDItLjAzMy4wMjYtLjA1MSAwLS4xMDMuMDEzLS4xMy4wNjQtLjAxOC4wMi0uMDQ0LjA0Ni0uMDY0LjA2NS0uMDUxIDAtLjEwMy4wMTMtLjEyOS4wNjVsLS4wNjUuMDY0Wm0tLjg0MS41ODhjLS4wNTIgMC0uMTAzLjAxMy0uMTMuMDY1LS4wNTEuMDA3LS4xMDMuMDEzLS4wOTYuMDg0IDAgLjAwNy4wMTMuMDIuMDIuMDIuMDcuMDA2LjA3Ny0uMDQ2LjA4My0uMDk3LjA1Mi0uMDA3LjA5Ny0uMDIuMTIzLS4wNzIuMDI2LS4wMTIuMDQ1LS4wMzguMDcxLS4wNTguMDUyIDAgLjEwMy0uMDEzLjEzLS4wNjRsLjA2NC0uMDY1Yy4wNTIgMCAuMTAzLS4wMTMuMTMtLjA2NS4wMDYtLjAxMy4wMTktLjAxOS4wMjUtLjAzMi0uMDEzLjAwNy0uMDIuMDItLjAzMi4wMjYtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjVsLS4wNjQuMDY0Yy0uMDUyIDAtLjEwNC4wMTMtLjEzLjA2NWEuMzA2LjMwNiAwIDAgMC0uMDY0LjA2NFptLS42NDcuNDZjLjA1Mi0uMDA3LjEwNC0uMDEzLjA5Ny0uMDg1IDAtLjAwNi0uMDEyLS4wMTktLjAxOS0uMDE5LS4wNzEtLjAwNi0uMDc4LjA0NS0uMDg0LjA5Ny0uMDUyIDAtLjA5Ny4wMTMtLjEzLjA2NWEuMjIzLjIyMyAwIDAgMC0uMTkzLjEyOWMtLjA0NS4wMTMtLjEwNC4wMTMtLjA5Ny4wODQgMCAuMDA2LjAxMy4wMi4wMi4wMi4wNjQuMDA2LjA3Ny0uMDQ2LjA4My0uMDk4LjA5IDAgLjE4MS0uMDA2LjE5NC0uMTI5LjA1OC0uMDA2LjEwNC0uMDIuMTMtLjA2NVptMi4xMjgtMS41MzNjLS4wMDguMDI3LS4wMjUuMDU0LS4wMzMuMDcyLjAyNS4wMDkuMDUuMDM1LjA2Ny4wMjcuMDE2LS4wMS4wMjUtLjA0NS4wMzMtLjA3MmEuNTUuNTUgMCAwIDEtLjA2Ny0uMDI3Wm0tMS44MSAxLjM1Yy0uMDA4LS4wMjQtLjAxNS0uMDU2LS4wMy0uMDU2LS4wMTUtLjAwOC0uMDUyLjAwOC0uMDYuMDI0LS4wMjIuMDMzLS4wMDcuMDc0LjAzLjA3NC4wMjIgMCAuMDM3LS4wMjUuMDYtLjA0MVpNMTUuMzU1IDE5YS4xODUuMTg1IDAgMCAxIC4wMzQtLjA3MmMtLjAyNS0uMDA5LS4wNS0uMDM1LS4wNjctLjAyNi0uMDE2LjAwOC0uMDI1LjA0NC0uMDMzLjA3LjAxNy4wMS4wNDIuMDE5LjA2Ny4wMjhabS0zLjUyNiAyLjQwMmMtLjAxNi0uMDI0LS4wMzEtLjA1LS4wNC0uMDU3LS4wMTUgMC0uMDU1LjAxNi0uMDU1LjAzMy0uMDE2LjA0LjAwOC4wNzQuMDQ4LjA2NS4wMTYgMCAuMDMxLS4wMjQuMDQ3LS4wNFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0I2QjVBQ1wiLFxuICAgIGQ6IFwiTTI4LjEyMSAyNy4wODVjLS40MjYtLjQxMy0uOTQ0LS42OTgtMS40MjgtMS4wMzQtMi42Ny0xLjg2Mi01LjM0Ny0zLjcxNy04LjAyMy01LjU3My0uODk5LS42MjctMS44MDQtMS4yNDctMi43MDItMS44NzQgMC0uMDItLjAwNy0uMDQ2LS4wMDctLjA2NWwzLjk5NS0yLjc3M2MyLjY5LTEuODU2IDUuMzc5LTMuNzA1IDguMDYyLTUuNTYuMDg0LS4wNTguMTY4LS4xMzYuMjg0LS4xMzZ2MTcuMDczYy0uMDUxLS4wMTktLjExNi0uMDM4LS4xOC0uMDU4WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTZFM0Q2XCIsXG4gICAgZDogXCJNNC4wNzMgMjcuMTQzYy4xMjMtLjI1OC40MDctLjMzLjYxNC0uNDg0YTQ3Ljg0NSA0Ny44NDUgMCAwIDEgMi4zMDgtMS42M2MxLjMxMi0uODg1IDIuNTkyLTEuODIzIDMuOTEtMi42OTUuNzk2LS41MjQgMS41OTgtMS4wNDggMi4zNDEtMS42MzYuNTg4LS40NjUgMS4yNi0uNzk1IDEuODE3LTEuMzA2LjItLjE4LjQ5LS4yOS43MjQtLjQ1OS4xMS0uMDg0LjIwNy0uMDUxLjMyMy4wMzMuNTUuMzg4IDEuMDk5Ljc4MiAxLjY2MSAxLjE1LjY4LjQ0NiAxLjMyNi45NDQgMi4wMSAxLjM3Ny42MDguMzg4IDEuMTcuODU0IDEuNzc5IDEuMjQ4LjY5OC40NDYgMS4zNy45MzcgMi4wNDkgMS40MS44MTQuNTY4IDEuNjM1IDEuMTMgMi40MyAxLjcxOS40ODUuMzU1Ljk4My42ODUgMS40NzUgMS4wMjguMDkuMDY0LjIyNi4xMDMuMjIuMjUyLTcuODg4LS4wMDctMTUuNzc0LS4wMDctMjMuNjYxLS4wMDdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNCMTM5MkZcIixcbiAgICBkOiBcIk0yOC4zMTUgMjcuMTQzVjEwLjA3Yy4yNzgtLjMwNC42NC0uNDkxLjk3LS43My44MTQtLjU5NSAxLjYzNS0xLjE3IDIuNDUtMS43NTIuMDU4LS4wNDUuMTE2LS4wOTcuMi0uMDk3LjAwNy4xMS4wMTMuMjEzLjAxMy4zMjMgMCA1LjUwMiAwIDExLjAxLjAwNyAxNi41MSAwIC4zNzYtLjAxMy43NS0uMTA0IDEuMTI2LS4xNjEuNjkxLS41NzUgMS4xNy0xLjI0NyAxLjQwOS0uNzQ0LjI1OS0xLjUxMy4zMy0yLjI4OS4yODRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNCRUJEQjNcIixcbiAgICBkOiBcIk0xMS41MTQgMjEuNTljLS4yNTMuMjg1LS41OTUuNDUzLS45LjY2NmEyNjUwLjA3OCAyNjUwLjA3OCAwIDAgMS02LjkzNiA0Ljg0MmwtLjEyOS4wMzljMC0uMDY1LjAwNy0uMTIzLjAwNy0uMTg4IDIuNDctMS42ODcgNC45MzItMy4zNzQgNy40MDItNS4wNjEuMTc0LS4xMTcuMzEtLjMwNC41NS0uMzFsLjAwNi4wMTJaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0dtYWlsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Hb2xhbmcgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0dvbGFuZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y2RDJBMlwiLFxuICAgIGQ6IFwiTTQuMzE1IDE3LjMwMWMuMDQ1Ljk0NiAxIC41IDEuNDE2LjIxLjQxNS0uMjkuNS0uMDQ1LjU2LS42YTkuMDcgOS4wNyAwIDAgMCAuMDQ1LTEuMDkgMi42NzYgMi42NzYgMCAwIDAtMS43ODYuNDU1Yy0uMjYuMTktLjc0NS43OS0uMjQgMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNNC44MDUgMTcuOTg3YS42LjYgMCAwIDEtLjI3LS4wNi42Mi42MiAwIDAgMS0uMzEtLjU1QS40MS40MSAwIDAgMSA0IDE3LjA1YTEuMTUgMS4xNSAwIDAgMSAuNS0uODMgMi43NTIgMi43NTIgMCAwIDEgMS44NDYtLjQ3aC4wNzV2LjA3NGMuMDEuMjg2LjAwMy41NzItLjAyNS44NTZ2LjI1Yy0uMDI1LjM5LS4xLjQ1LS4zLjVhMS4xMTggMS4xMTggMCAwIDAtLjMuMTQ1Yy0uMjg4LjIyMy0uNjMuMzY0LS45OS40MVptMS4yNzEtMi4wNjdhMi41MDIgMi41MDIgMCAwIDAtMS40Ny40NSAxIDEgMCAwIDAtLjQyLjY3MS4yNS4yNSAwIDAgMCAuMTcuMjA1aC4wNXYuMDU1YS41LjUgMCAwIDAgLjIxLjQ1IDEuMzEgMS4zMSAwIDAgMCAxLjA2NS0uMzEgMS4yOSAxLjI5IDAgMCAxIC4zNC0uMTdjLjEzLS4wNDUuMTYtLjA1NS4xOC0uMzY1di0uMjVjLjAyNC0uMjUuMDM0LS41LjAzLS43NWgtLjE1NXYuMDE0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQzdCMTk5XCIsXG4gICAgZDogXCJNNC4zMTUgMTcuM2EuNzQ1Ljc0NSAwIDAgMCAuMzc2LS4yMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTQuMzE1IDE3LjM5MWEuMDkyLjA5MiAwIDEgMS0uMDU1LS4xNzVoLjA2YS41NC41NCAwIDAgMCAuMjc1LS4xNi4wOTIuMDkyIDAgMCAxIC4wNi0uMDM1LjA5LjA5IDAgMCAxIC4wNjguMDE3LjA5LjA5IDAgMCAxIC4wMzUuMDYuMDkxLjA5MSAwIDAgMS0uMDE4LjA2OC43LjcgMCAwIDEtLjM2LjIyaC0uMDY1di4wMDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM3NENERERcIixcbiAgICBkOiBcIk02LjQ5NiA2LjA1QzIuODggNS4wNDkgNS41NzEuNDMgOC40OTggMi4zMjJMNi40OTYgNi4wNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTYuNTQxIDYuMTU0aC0uMDdjLTEuMDMtLjI5LTEuNjY2LS45LTEuNzg2LTEuNzE2YTIuMzk2IDIuMzk2IDAgMCAxIDEuMTE2LTIuMjYgMi40MjEgMi40MjEgMCAwIDEgMi43MjIuMDlsLjA3LjA0NEw2LjU0IDYuMTU0Wm0uNS00LjE5MmMtLjQxIDAtLjgxMS4xMi0xLjE1NS4zNDVBMi4yMTEgMi4yMTEgMCAwIDAgNC44NSA0LjM5M2MuMTEuNzI2LjY3IDEuMjc2IDEuNTg2IDEuNTUxbDEuOTAxLTMuNTg3YTIuNTAxIDIuNTAxIDAgMCAwLTEuMjgtLjM4bC0uMDE1LS4wMTVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM3NENERERcIixcbiAgICBkOiBcIk0yMi41NjYgMS45NzdjMi44NjItMi4wMDEgNS40NDggMi41MDIgMi4xMjEgMy42NjdsLTIuMTIxLTMuNjY3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJtMjQuNjQ3IDUuNzU0LTIuMjAxLTMuODAyLjA2NS0uMDQ1YTIuMzYyIDIuMzYyIDAgMCAxIDIuNjI2LS4yMiAyLjQyNyAyLjQyNyAwIDAgMSAxLjE5NiAyLjI0MWMtLjA1LjUtLjMyIDEuMzU2LTEuNjE2IDEuODAxbC0uMDcuMDI1Wm0tMS45NjEtMy43NTIgMi4wNDEgMy41MzJhMS45NTYgMS45NTYgMCAwIDAgMS40MjYtMS42MiAyLjI0IDIuMjQgMCAwIDAtMS4xMDYtMi4wNzcgMi4xMjYgMi4xMjYgMCAwIDAtMi4zNjEuMTY1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjZEMkEyXCIsXG4gICAgZDogXCJNMjMuMTgxIDI4LjkyOGMuNzI2LjQ1IDIuMDU2IDEuODExLjk2NiAyLjQ3MS0xLjA0Ni45NjEtMS42MzYtMS4wNTUtMi41NTctMS4zM2EyLjU0OSAyLjU0OSAwIDAgMSAxLjU5MS0xLjE0MVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTIzLjU5MiAzMS43NDVoLS4wNGMtLjQxNi0uMDI1LS43NTYtLjQzLTEuMDg2LS44MTZhMi4zMyAyLjMzIDAgMCAwLS45LS43NzVsLS4xMi0uMDM1LjA3NC0uMTI1YTIuNjU2IDIuNjU2IDAgMCAxIDEuNjQ2LTEuMTc2aC4wNjVjLjQ2Ni4yOSAxLjQyNiAxLjEzIDEuNDIxIDEuODkxYS44MzUuODM1IDAgMCAxLS40NS43MjUuOTA1LjkwNSAwIDAgMS0uNjEuMzFabS0xLjg2MS0xLjcyMWMuMzM5LjIuNjMzLjQ2Ny44NjUuNzg1LjIxOS4zNi41Ni42MjguOTYuNzU1YS43MTYuNzE2IDAgMCAwIC41LS4yMzUuNjYxLjY2MSAwIDAgMCAuMzcxLS41OGMwLS42MS0uNzctMS4zNzYtMS4zMDYtMS43MjFhMi4zNTEgMi4zNTEgMCAwIDAtMS4zODYuOTk2aC0uMDA1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNMjQuMTQ3IDMxLjQ5NGEuMDkuMDkgMCAwIDEtLjA4LS4wNWMtLjA1My0uMTEtLjEtLjIyNC0uMTQtLjM0YTEuNSAxLjUgMCAwIDAtLjMzLS42MS4wOTEuMDkxIDAgMCAxLS4wMjItLjA5OC4wOS4wOSAwIDAgMSAuMTQ3LS4wMzJjLjE3Mi4xODguMy40MTQuMzcuNjYuMDM5LjExLjA4NC4yMTYuMTM1LjMyYS4wOS4wOSAwIDAgMS0uMDQuMTJsLS4wNC4wM1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y2RDJBMlwiLFxuICAgIGQ6IFwiTTEwLjE4OSAzMC40NjRjLS44NTYuMTMtMS4zMzYuOS0yLjA0NiAxLjI5YS42Mi42MiAwIDAgMS0xLjAwMS0uMjM1LjMyNS4zMjUgMCAwIDEtLjI2LS4xMmMtLjYyLTEgLjY0NS0xLjY5NiAxLjMxLTIuMTg2LjkzNi0uMTggMS41MTEuNjE1IDEuOTk3IDEuMjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk03LjY5MiAzMS45OTVhLjYxMy42MTMgMCAwIDEtLjE2IDAgLjc0Ljc0IDAgMCAxLS40MzUtLjM3NS4zMDEuMzAxIDAgMCAxLS4yNDUtLjEzYy0uNi0uOTQ2LjQyLTEuNjYyIDEuMDk2LTIuMTM3bC4yMzUtLjE3Yy45NDUtLjE5IDEuNTQ2LjU5IDIuMDI2IDEuMjJsLjEzNS4xODFoLS4xNWEyLjU4NiAyLjU4NiAwIDAgMC0xLjI2Ni43MjVjLS4yMy4yMTItLjQ4Mi40LS43NS41NmExLjAwMSAxLjAwMSAwIDAgMS0uNDg2LjEyNlptLS42LS41OGEuMjQ1LjI0NSAwIDAgMSAuMTA1IDBoLjAyNWwuMDQuMDhhLjU4LjU4IDAgMCAwIC4zMzUuMzA1LjY4Ni42ODYgMCAwIDAgLjUtLjEyYy4yNi0uMTU1LjUwMy0uMzM3LjcyNi0uNTRhMyAzIDAgMCAxIDEuMjA2LS43MzZjLS40Ni0uNi0xLTEuMjUtMS43ODYtMS4xbC0uMjI1LjE2Yy0uNjkuNS0xLjU0NiAxLjA5LTEuMDUxIDEuODg1YS4xNDYuMTQ2IDAgMCAwIC4xMDUuMDdsLjAyLS4wMDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk03LjE1NyAzMS42MTRhLjA5LjA5IDAgMCAxLS4wOS0uMTJjLjAzNy0uMjQuMTM3LS40NjYuMjktLjY1NS4wNzItLjEuMTM2LS4yMDUuMTktLjMxNWEuMDkuMDkgMCAxIDEgLjE2NS4wNzVjLS4wNTguMTItLjEyNy4yMzYtLjIwNS4zNDUtLjEzMi4xNy0uMjE3LjM3Mi0uMjQ1LjU4NWEuMDkuMDkgMCAwIDEtLjA2Ny4wODQuMDkuMDkgMCAwIDEtLjAzOC4wMDJaTTYuNjQ3IDQuNzhjLS41LS4yNS0uODI2LS41OTYtLjUzNi0xLjE0Ni4yOS0uNTUuNzctLjQ1NSAxLjI1MS0uMjA1bC0uNzE1IDEuMzVabTE3LjI4NS0uNDhjLjUtLjI1LjgyNS0uNTk2LjUzNS0xLjE0Ni0uMjktLjU1LS43Ny0uNDU2LTEuMjUtLjIwNWwuNzE1IDEuMzVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGNkQyQTJcIixcbiAgICBkOiBcIk0yNy4yMTkgMTcuMTgxYy0uMDQ1Ljk0Ni0xLjAwMS41LTEuNDE2LjIxLS40MTYtLjI5LS41LS4wNDUtLjU2LS42YTkuMDY4IDkuMDY4IDAgMCAxLS4wNDYtMS4wOSAyLjY3NyAyLjY3NyAwIDAgMSAxLjc4Ny40NTRjLjI2LjE5Ljc0NS43OS4yNCAxLjAwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNMjYuNzI4IDE3Ljg0NmEyLjA0NiAyLjA0NiAwIDAgMS0uOTU1LS4zNiAxLjExNyAxLjExNyAwIDAgMC0uMy0uMTQ1Yy0uMi0uMDctLjI3NS0uMTMtLjMtLjV2LS4yNWE2LjUxNiA2LjUxNiAwIDAgMS0uMDI2LS44NTZ2LS4xMmguMDc2YTIuNzUxIDIuNzUxIDAgMCAxIDEuODQ2LjQ3IDEuMTUgMS4xNSAwIDAgMSAuNS44My40MTIuNDEyIDAgMCAxLS4yMjUuMzI2LjYyLjYyIDAgMCAxLS4zMS41NS42MDUuNjA1IDAgMCAxLS4zMDYuMDU1Wm0tMS40NTYtMi4wNmMtLjAwMy4yNS4wMDcuNS4wMy43NXYuMjVjMCAuMzA1LjA0Ni4zMTUuMTguMzY1LjEyMi4wNC4yMzYuMDk3LjM0LjE3YTEuMzA3IDEuMzA3IDAgMCAwIDEuMDY3LjMxLjUwMi41MDIgMCAwIDAgLjIxLS40NXYtLjA2aC4wNWEuMjUuMjUgMCAwIDAgLjE3LS4yMDUgMS4wMDIgMS4wMDIgMCAwIDAtLjQyLS42NyAyLjU1MiAyLjU1MiAwIDAgMC0xLjYyNy0uNDZaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNDN0IxOTlcIixcbiAgICBkOiBcIk0yNy4yMTggMTcuMTgxYS43NDYuNzQ2IDAgMCAxLS4zNzUtLjE5NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTI3LjIxOSAxNy4yNzFoLS4wOTVhLjcuNyAwIDAgMS0uMzUtLjI1LjA5LjA5IDAgMCAxLS4wMDctLjEwMS4wOTEuMDkxIDAgMCAxIC4xNTItLjAxLjU0LjU0IDAgMCAwIC4yNzUuMTZoLjA2YS4xMDEuMTAxIDAgMSAxLS4wMzUuMjAxWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNzRDREREXCIsXG4gICAgZDogXCJNMTUuNDA3LjA2NmMzLjYyMiAwIDcuMDA0LjUgOC43ODUgNC4wMDIgMS41ODYgMy44OTggMSA4LjEwNSAxLjI2NiAxMi4yMjMuMjEgMy41MzcuNjcgNy42MjQtLjk3IDEwLjkwNi0xLjcxNyAzLjQ0Mi02LjA1IDQuMjk3LTkuNjAxIDQuMTgyLTIuNzkyLS4xLTYuMTY0LTEtNy43NC0zLjU2Mi0xLjg1MS0zLjAwMi0uOTc2LTcuNDQ0LS44NC0xMC43NzEuMTYtMy45NDItMS4wNzEtNy45LjIyNS0xMS43NjJDNy44NzcgMS4yODIgMTEuNS4zNzYgMTUuNDAyLjA2NlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNMTUuNTAyIDMxLjQ5NGgtLjYyYTEzLjIwMiAxMy4yMDIgMCAwIDEtNC4zNTgtLjg3IDYuOTY5IDYuOTY5IDAgMCAxLTMuNDU3LTIuNzM3Yy0xLjUwMS0yLjQyMS0xLjIzLTUuNzYzLTEtOC43MTUuMDYtLjc0LjExNC0xLjQ0Ni4xNC0yLjEwNi4wMjYtMS40LS4wMzQtMi44LS4xOC00LjE5Mi0uMjExLTIuNTAyLS40MzEtNS4wODkuNDEtNy41OTVhNi42NDQgNi42NDQgMCAwIDEgMy41MDEtNC4wNDdDMTEuMjkuNTcyIDEyLjk0LjE5IDE1LjM2NyAwYzMuNTcyLS4wMjUgNy4wOTQuNDc1IDguOTA1IDQuMDIyIDEuMTYgMi44NTIgMS4xNzYgNS45MTQgMS4xOTYgOC44NzYgMCAxLjExIDAgMi4yNTYuMDggMy4zNzcgMCAuMzQuMDQuNjg1LjA2NSAxLjAzLjIxIDMuMjQ3LjQ1IDYuOTM0LTEuMDQ2IDkuOTE2LTEuODcxIDMuNzMyLTYuNTc0IDQuMjcyLTkuMDY1IDQuMjcyWk0xNS40MDcuMTU2Yy0zLjc2OC4zMi03LjQ0IDEuMTMtOC43OSA1LjE1OC0uODMxIDIuNDcxLS42MSA1LjAzOC0uNDA2IDcuNTA0LjE0NyAxLjQuMjA3IDIuODA2LjE4IDQuMjEzLS4wMjUuNjY1LS4wODUgMS4zNy0uMTQgMi4xMTYtLjIzIDIuOTIyLS41IDYuMjM5Ljk2NiA4LjYwNS42MTUgMSAyLjU5NiAzLjMzNyA3LjY3IDMuNTAyIDIuMTk2LjA4IDcuNTA0LS4xNyA5LjUwNS00LjE0MiAxLjQ3LTIuOTQyIDEuMjM2LTYuNTk5IDEuMDI2LTkuODI2IDAtLjM1LS4wNDUtLjY5NS0uMDY1LTEuMDNhNjcuNDUxIDY3LjQ1MSAwIDAgMS0uMDgtMy4zNTNjMC0yLjk0MS0uMDMtNi4wMDMtMS4xODEtOC44MDVBNi40MzggNi40MzggMCAwIDAgMjAuNDQ1Ljg0MWExNC45NiAxNC45NiAwIDAgMC01LjAzOC0uNjg1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjZmZmXCIsXG4gICAgZDogXCJNMTYuMDQyIDQuOTI0Yy42NSAzLjc3NyA2LjgyNCAyLjc4MSA1LjkzOC0xLjAzLS43OTUtMy40MTgtNi4xNTMtMi40NzItNS45MzggMS4wM1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTE4Ljk3OSA3LjM5YTMuNDU3IDMuNDU3IDAgMCAxLTEuMTMtLjE4NSAyLjc5NyAyLjc5NyAwIDAgMS0xLjg5Mi0yLjI2NiAyLjg4MiAyLjg4MiAwIDAgMSAuNzgtMi4yMjIgMy40MDcgMy40MDcgMCAwIDEgMi4wMDItMSAzLjIwMiAzLjIwMiAwIDAgMSAyLjAzMS4zNSAyLjcyNyAyLjcyNyAwIDAgMSAxLjI5NiAxLjgwNiAyLjY0MyAyLjY0MyAwIDAgMS0uNzcgMi42ODIgMy41MDIgMy41MDIgMCAwIDEtMi4zMTcuODM1Wm0tMi44NDctMi40NzZhMi42MjYgMi42MjYgMCAwIDAgMS43NzYgMi4xMjYgMy40MTcgMy40MTcgMCAwIDAgMy4yNzctLjYyIDIuNTAyIDIuNTAyIDAgMCAwIC43MTYtMi41MDIgMi42NzIgMi42NzIgMCAwIDAtMy4xMzItMi4wMzEgMi44ODcgMi44ODcgMCAwIDAtMi42MzcgMy4wMjdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNmZmZcIixcbiAgICBkOiBcIk04LjY2MyA1LjUzOWMuODQgMy4yODcgNi4xMDMgMi40NDEgNS45MDgtLjg1NS0uMjM1LTMuOTUzLTYuNzE0LTMuMjA3LTUuOTA4Ljg1NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTExLjQ3NCA3LjcwNWEzLjIzMiAzLjIzMiAwIDAgMS0xLjUzNi0uMzc1IDIuNzI3IDIuNzI3IDAgMCAxLTEuMzU1LTEuNzc2IDIuNzU3IDIuNzU3IDAgMCAxIC45NC0yLjgyNyAzLjU1MiAzLjU1MiAwIDAgMSAzLjUzMi0uNDUgMi42NzIgMi42NzIgMCAwIDEgMS42MDEgMi40MDJjLjEwNSAxLjc1LTEuMjg2IDIuNzcxLTIuNjE3IDMuMDAxYTMuNjU3IDMuNjU3IDAgMCAxLS41NjUuMDI1Wk04Ljc2MyA1LjUyQTIuNzMyIDIuNzMyIDAgMCAwIDEyLjAzIDcuNTJjMS4yNi0uMiAyLjU3Ni0xLjE2IDIuNDc2LTIuODA2YTIuNTAxIDIuNTAxIDAgMCAwLTEuNS0yLjI2MiAzLjM3NyAzLjM3NyAwIDAgMC0zLjM1OC40MyAyLjU5NyAyLjU5NyAwIDAgMC0uODg1IDIuNjM3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjZmZmXCIsXG4gICAgZDogXCJNMTYuNzY3IDkuNDgxYy4wNDkuNTIxLjA0OSAxLjA0NiAwIDEuNTY2YTEgMSAwIDAgMS0uNTg1LjM2Ljg2MS44NjEgMCAwIDEtLjY1NS0uNWMtLjAzMi0uNTktLjAxNy0xLjE4My4wNDUtMS43N2wxLjE5NS4zNDRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk0xNi4yMzcgMTEuNDgzaC0uMDI1YS45NDQuOTQ0IDAgMCAxLS43MjUtLjU2NiA1Ljk1IDUuOTUgMCAwIDEgMC0xLjIxNWMwLS4xODUuMDMtLjM4LjAzNS0uNTd2LS4xNWwxLjM1LjQxNHYuMDg1YzAgLjE2IDAgLjMzLjAyNi41LjA0NS4zNTguMDQ1LjcyIDAgMS4wNzZ2LjAyNWEuNzUuNzUgMCAwIDEtLjQ3Ni4zNGwtLjE1NS4wNmgtLjAzWm0tLjU4LS42M2EuNzY2Ljc2NiAwIDAgMCAuNTYuNDQ1bC4xNC0uMDU2YS42LjYgMCAwIDAgLjM2Ni0uMjZjLjA0LS4zMzIuMDQtLjY2OCAwLTEgMC0uMTU1IDAtLjMwNS0uMDI2LS40NTVsLTEtLjMwNmMwIC4xNTUgMCAuMzEtLjAzLjQ2LS4wNDQuMzg4LS4wNS43NzgtLjAxNSAxLjE2NmwuMDA1LjAwNVpNMTAuMTE0IDUuOTY0Yy40OTEgMCAuODktLjQzMi44OS0uOTY1IDAtLjUzNC0uMzk5LS45NjYtLjg5LS45NjYtLjQ5MiAwLS44OS40MzItLjg5Ljk2NiAwIC41MzMuMzk4Ljk2NS44OS45NjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNmZmZcIixcbiAgICBkOiBcIk0xMC41MTkgNS40NjRjLjExNiAwIC4yMS0uMTEuMjEtLjI0NXMtLjA5NC0uMjQ1LS4yMS0uMjQ1Yy0uMTE2IDAtLjIxLjExLS4yMS4yNDVzLjA5NC4yNDUuMjEuMjQ1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNMTcuNTY4IDUuNzI0Yy40ODMgMCAuODc1LS40MzIuODc1LS45NjUgMC0uNTMzLS4zOTItLjk2Ni0uODc1LS45NjYtLjQ4NCAwLS44NzYuNDMzLS44NzYuOTY2IDAgLjUzMy4zOTIuOTY1Ljg3Ni45NjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNmZmZcIixcbiAgICBkOiBcIk0xNy45NjMgNS4yMjRjLjExNCAwIC4yMDYtLjExLjIwNi0uMjQ1IDAtLjEzNi0uMDkyLS4yNDUtLjIwNi0uMjQ1LS4xMTMgMC0uMjA1LjExLS4yMDUuMjQ1cy4wOTIuMjQ1LjIwNS4yNDVaTTE0LjI2NiA5LjQwNmMtLjM5Ljk0MS4yMTUgMi44MjIgMS4yNyAxLjQzNmExMS4xMiAxMS4xMiAwIDAgMSAuMDQ2LTEuNzdsLTEuMzE2LjMzNFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTE0LjgxMiAxMS40MjhhLjUuNSAwIDAgMS0uMjYtLjA3Yy0uNDI2LS4yNDYtLjY5MS0xLjI1MS0uMzktMi4wMDJ2LS4wNGwxLjUtLjM4di4xMmMwIC4xOTUgMCAuMzktLjAzNS41NzVhNS43MSA1LjcxIDAgMCAwIDAgMS4xODF2LjA2NWExLjA1NiAxLjA1NiAwIDAgMS0uODE1LjU1Wm0tLjQ5Ni0xLjk0N2MtLjIxNS41ODYtLjA0NSAxLjUwMS4zMyAxLjcxNi4yNy4xNTUuNTctLjExNS43OC0uMzg1YTYuMTI4IDYuMTI4IDAgMCAxIDAtMS4xOGMwLS4xNDYgMC0uMy4wMzEtLjQ1bC0xLjE0LjNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGNkQyQTJcIixcbiAgICBkOiBcIk0xNC4zOCA3LjU5NWExLjE0NiAxLjE0NiAwIDAgMC0uOTQgMS42MDFjLjUuOSAxLjYxMS0uMDggMi4zMDIgMCAuNzk1IDAgMS40NS44NCAyLjA5LjE1LjcxMS0uNzctLjMwNC0xLjUtMS4xLTEuODU2bC0yLjM1MS4xMDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMyMzFGMjBcIixcbiAgICBkOiBcIk0xNy4yNjggOS43MjdhMiAyIDAgMCAxLS43My0uMjA2IDIuMjA3IDIuMjA3IDAgMCAwLS43OTEtLjIyYy0uMjg3IDAtLjU3LjA2Mi0uODMuMTgtLjU2MS4xOTUtMS4xOTYuNDE2LTEuNTU3LS4yM2ExLjA4IDEuMDggMCAwIDEgMC0xLjA1IDEuMjgxIDEuMjgxIDAgMCAxIDEuMDAxLS42ODZsMi40MDYtLjEwNWMuNTkuMjUgMS4yNjYuNzA2IDEuMzgxIDEuMjM2YS45NTUuOTU1IDAgMCAxLS44OCAxLjA4Wm0tMS41MDEtLjYwNmMuMjk2LjAyNC41ODQuMTA0Ljg1LjIzNS40NS4xOS44MDYuMzM1IDEuMTY2LS4wNTVhLjY2NC42NjQgMCAwIDAgLjIwNS0uNjA1Yy0uMS0uNDYtLjczNS0uODgtMS4yNTYtMS4xbC0yLjMyNi4wOTRhMS4xMSAxLjExIDAgMCAwLS44NS41OS45MDYuOTA2IDAgMCAwIDAgLjg3NmMuMjg1LjUuNzk1LjMzNSAxLjM0LjE1LjI3NC0uMTIyLjU3LS4xODUuODctLjE4NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTE0LjI2NiA3LjU2Yy0uMDU1LTEuMjUgMi4zMzYtMS40MSAyLjYxNy0uMzYuMjggMS4wNS0yLjUwMiAxLjI5LTIuNjE3LjM2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0dvbGFuZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvR29vZ2xlRyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR29vZ2xlRyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19nb29nbGVfZycpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgZDogXCJNMTUuMzE5IDMuMjc4YzAtMS4xMzEtLjEwMi0yLjIyLS4yOS0zLjI2NEgwdjYuMTcyaDguNTg3Yy0uMzcgMS45OTUtMS40OTQgMy42ODUtMy4xODQgNC44MTZ2NC4wMDRoNS4xNTdjMy4wMTctMi43NzggNC43NTgtNi44NjkgNC43NTgtMTEuNzI4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICBkOiBcIk0xNC4zNDMgMTIuOTU2YzQuMzA4IDAgNy45Mi0xLjQzIDEwLjU2LTMuODY2bC01LjE1Ny00LjAwNGMtMS40MjkuOTU4LTMuMjU2IDEuNTIzLTUuNDAzIDEuNTIzLTQuMTU2IDAtNy42NzQtMi44MDYtOC45MjgtNi41NzhILjA4NHY0LjEzNGMyLjYyNSA1LjIxNSA4LjAyMSA4Ljc5IDE0LjI1OSA4Ljc5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICBkOiBcIk03LjAyOCAxMC4yNWE5LjU5IDkuNTkgMCAwIDEtLjUtMy4wMzIgOS41OSA5LjU5IDAgMCAxIC41LTMuMDMyVi4wNTJoLTUuMzNBMTUuOTUgMTUuOTUgMCAwIDAgMCA3LjIxOGMwIDIuNTc1LjYxNyA1LjAxMiAxLjY5NyA3LjE2Nmw1LjMzMS00LjEzNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdnJyksXG4gICAgZDogXCJNMTQuMzQzIDYuMzkyYzIuMzQyIDAgNC40NDYuODA1IDYuMSAyLjM4Nmw0LjU3Ni00LjU3NkMyMi4yNTYgMS42MjcgMTguNjQ0LjA0NiAxNC4zNDMuMDQ2IDguMTA1LjA0NiAyLjcwOSAzLjYyMi4wODMgOC44MzZsNS4zMzIgNC4xMzRjMS4yNTQtMy43NyA0Ljc3Mi02LjU3OCA4LjkyOC02LjU3OHpcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMTUuOTU1IDEzLjA4NylcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzQyODVGNFwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0uMDAxIDE1LjAwNmgxNS4zMThWLjAxNEguMDAxelwiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIilcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxLjYxMyAxOS4wMDMpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzNEE4NTNcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNLjA4NCAxMi45NTZoMjQuODE5Vi4wMzFILjA4NHpcIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSwgXCIpXCIpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCA4Ljc4NClcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2YnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdlJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZCQkMwNFwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0wIDE0LjM4NGg3LjAyOFYuMDUySDB6XCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdmJyksIFwiKVwiKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDEuNjEzKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnaCcpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2cnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRUE0MzM1XCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTS4wODQgMTIuOTdoMjQuOTM1Vi4wNDZILjA4NHpcIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2gnKSwgXCIpXCIpXG4gIH0pKSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR29vZ2xlRzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvSGFwcm94eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvSGFwcm94eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19oYXByb3h5Jyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgY2xpcFBhdGg6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIHN0cm9rZTogXCIjMDU0ODZEXCIsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTAsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMTIsXG4gICAgZDogXCJtMTYuMDUgMTMuMjM3LTMuMTEtMy42MTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIHN0cm9rZTogXCIjMDU0ODZEXCIsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTAsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMDYsXG4gICAgZDogXCJtNi4xMTcgMTAuNTI4IDIuNTA5IDMuNTEyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBzdHJva2U6IFwiIzA1NDg2RFwiLFxuICAgIHN0cm9rZU1pdGVybGltaXQ6IDEwLFxuICAgIHN0cm9rZVdpZHRoOiAwLjEyLFxuICAgIGQ6IFwibTE2LjA1IDEzLjIzNyAzLjExLTMuNjEyTTE5Ljg2MyAxNy4xNWwzLjcxMi0zLjExTTE5Ljg2MyAxNy4xNWwzLjcxMiAzLjMxMU0xOS4xNiAyNC41NzVsLTMuMTEtMy41MTFNMTIuOTQgMjQuNTc1bDMuMTEtMy41MTFNOC42MjUgMjAuMjZsMy41MTItMy4xMU04LjYyNSAxNC4wNGwzLjUxMiAzLjExTTE2LjA1IDEzLjIzOGwtNy40MjUuODAyTTE2LjA1IDEzLjIzOGw3LjUyNS44MDJNMTkuODYzIDE3LjE1bC0uNzAyLTcuNTI1TTE5Ljg2MyAxNy4xNWwtLjcwMiA3LjQyNU0yMy41NzUgMjAuNDYxbC03LjUyNS42MDJNOC42MjUgMjAuMjYxbDcuNDI1LjgwM00xMi45NCAyNC41NzVsLS44MDMtNy40MjVNMTIuOTQgOS42MjVsLS44MDMgNy41MjVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIHN0cm9rZTogXCIjMDU0ODZEXCIsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTAsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMDYsXG4gICAgZDogXCJtNS4xMTQgMTUuMDQzIDMuNTExLTEuMDAzTTkuMzI4IDcuMTE3bDMuNjEyIDIuNTA5TTEzLjc0MyA1LjUxMmwtLjgwMyA0LjExM00xMy43NDMgNS41MTJsNS40MTggNC4xMTNNMTguMzU4IDUuNTEybC44MDMgNC4xMTNNMjIuNzczIDcuMTE3IDE5LjE2IDkuNjI2TTI1Ljk4MyAxMC41MjhsLTYuODIyLS45MDNNMjMuNTc1IDE0LjA0bDIuNDA4LTMuNTEyTTIzLjU3NSAxNC4wNGwzLjQxMiAxLjAwM00yMy41NzUgMTQuMDRsMy40MTIgNS4yMTdNMTguMzU4IDUuNTEyIDEyLjk0IDkuNjI1TTIzLjU3NiAxNC4wNGwtLjgwMy02LjkyM00yMy41NzUgMjAuNDYybDMuNDEyLTEuMjA0TTIzLjU3NSAyMC40NjJsMy40MTItNS40MThNMjMuNTc1IDIwLjQ2MWwyLjQwOCAzLjMxMk0yMy41NzYgMjAuNDYxbC0uODAzIDYuNzIzTTE5LjE2IDI0LjU3NWwzLjYxMyAyLjYwOU0xOS4xNiAyNC41NzVsNi44MjMtLjgwMk0xOS4xNiAyNC41NzVsLS44MDIgNC4yMTRNMTkuMTYgMjQuNTc1bC01LjQxNyA0LjIxNE0xMi45NCAyNC41NzVsLjgwMyA0LjIxNE0xMi45NCAyNC41NzVsNS40MTggNC4yMTRNMTIuOTQgMjQuNTc1bC0zLjYxMiAyLjYwOU0xMi45NCAyNC41NzVsLTYuODIzLS44MDJNOC42MjYgMjAuMjYxbC0yLjUwOSAzLjUxMk04LjYyNSAyMC4yNjFsLjcwMyA2LjkyM004LjYyNSAyMC4yNmwtMy41MTEtMS4wMDJNOC42MjUgMTQuMDRsLTMuNTExIDUuMjE3TTguNjI1IDIwLjI2bC0zLjUxMS01LjIxN005LjMyOCA3LjExN2wtLjcwMyA2LjkyM002LjExNyAxMC41MjhsNi44MjMtLjkwM1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgc3Ryb2tlOiBcIiMwODNENUZcIixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMCxcbiAgICBzdHJva2VXaWR0aDogMC4wNSxcbiAgICBkOiBcIk05LjMyNyA3LjExNyA2LjcyIDUuODEzTTkuMzI4IDcuMTE3bC0uMjAxLTIuOTFNMTMuNzQyIDUuNTEyIDkuMTI3IDQuMjA3TTEzLjc0MiA1LjUxMmwtMi4wMDYtMi41MDlNMTMuNzQzIDUuNTEybC44MDItMi45MU05LjMyOCA3LjExN2wyLjQwOC00LjExNE0xOC4zNTggNS41MTJsLTMuODEzLTIuOTFNMTguMzU4IDUuNTEybC0uODAzLTMuMDFNMTMuNzQzIDUuNTEybDMuODEyLTMuMDFNMTguMzU4IDUuNTEybDIuMDA3LTIuNTA5TTIyLjc3MyA3LjExN2wtMi40MDgtNC4xMTRNMjIuNzczIDcuMTE3bC4zMDEtMi45MU0xOC4zNTggNS41MTJsNC43MTYtMS4zMDVNMjIuNzczIDcuMTE3bDIuNzA5LTEuNDA1TTIyLjc3MyA3LjExN2w0LjcxNi43MDNNMjUuOTgzIDEwLjUyOGwxLjUwNS0yLjcwOU0yNS45ODQgMTAuNTI4bC0uNTAyLTQuODE2TTI1Ljk4MyAxMC41MjhsMy4xMS0uM00yNS45ODMgMTAuNTI4bDQuMjE0IDIuMzA4TTI2Ljk4NyAxNS4wNDRsMi4xMDctNC44MTdNMjYuOTg3IDE1LjA0M2wzLjIxLTIuMjA3TTI2Ljk4NyAxNS4wNDNsMy42MTIuNzAzTTI2Ljk4NyAxOS4yNThsMy42MTItMy41MTJNMjYuOTg3IDE5LjI1OGwzLjcxMi0uNzAzTTI2Ljk4NyAxNS4wNDNsMy43MTIgMy41MTJNMjYuOTg3IDE5LjI1OGwzLjExIDIuMTA3TTI1Ljk4MyAyMy43NzNsNC4xMTQtMi40MDlNMjUuOTgzIDIzLjc3M2wzLjExLjNNMjYuOTg3IDE5LjI1OGwyLjEwNyA0LjgxNk0yNS45ODMgMjMuNzczbDEuNTA1IDIuNzA5TTI1Ljk4NCAyMy43NzNsLS41MDIgNC43MTVNMjUuNDgyIDI4LjQ4OGwtMi43MS0xLjMwNE0yMi43NzMgMjcuMTg0bC4yIDIuOTFNMjIuNzczIDI3LjE4NGw0LjcxNi0uNzAzTTIyLjc3MyAyNy4xODRsLTIuNDA4IDQuMTE0TTE4LjM1OCAyOC43OWwyLjAwNyAyLjUwOE0xOC4zNTggMjguNzlsNC42MTUgMS4zMDRNMTguMzU4IDI4Ljc5bC0uODAzIDMuMDFNMTguMzU4IDI4Ljc5bC0zLjgxMyAzLjAxTTEzLjc0MyAyOC43OWwuODAyIDMuMDFNMTMuNzQzIDI4Ljc5bDMuODEyIDMuMDFNMTMuNzQyIDI4Ljc5bC0yLjAwNiAyLjUwOE05LjMyOCAyNy4xODRsMi40MDggNC4xMTRNMTMuNzQyIDI4Ljc5bC00LjYxNSAxLjQwNE05LjMyOCAyNy4xODRsLS4yMDEgMy4wMU05LjMyOCAyNy4xODRsLTIuNzEgMS40MDRNNi4xMTcgMjMuNzczbC41MDIgNC44MTZNOS4zMjggMjcuMTg0bC00LjcxNi0uNzAzTTYuMTE3IDIzLjc3M2wtMS41MDUgMi43MDlNNi4xMTcgMjMuNzczbC0zLjExLjNNNi4xMTcgMjMuNzczbC00LjIxNC0yLjQwOU01LjExNCAxOS4yNThsLTMuMjEgMi4xMDdNNS4xMTQgMTkuMjU4IDEuNCAxOC41NTVNNS4xMTQgMTkuMjU4bC0yLjEwNyA0LjgxNk01LjExNCAxNS4wNDMgMS40IDE4LjU1NU01LjExNCAxOS4yNTggMS40IDE1Ljc0Nk01LjExNCAxNS4wNDNsLTMuMTEtMi4xMDZNNS4xMTQgMTUuMDQzbC0zLjcxMy43MDNNNS4xMTQgMTUuMDQ0bC0yLjAwNy00LjgxN002LjExNyAxMC41MjhsLTMuMDEtLjNNNi4xMTcgMTAuNTI4bC00LjExNCAyLjQwOE02LjExNyAxMC41MjggNC43MTIgNy45Mk02LjExNyAxMC41MjhsLjYwMi00LjcxNU05LjMyOCA3LjExN2wtNC42MTYuODAzXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDZEQThcIixcbiAgICBkOiBcIk0xMy45NDMgMTUuMjQ0aC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJaTTE3Ljc1NiAxMS4zMzFoLTMuNjEydjMuNTkyaDMuNjEydi0zLjU5MlpNMTcuNzU2IDE5LjE1N2gtMy42MTJ2My41OTJoMy42MTJ2LTMuNTkyWk0yMS42NjkgMTUuMjQ0aC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMyRjc3QkNcIixcbiAgICBkOiBcIk0yMC4zNjUgOC40MjFoLTIuNTA5VjEwLjloMi41MDlWOC40MlpNMTQuMTQ0IDguMzIxaC0yLjUwOXYyLjQ3OGgyLjUwOVY4LjMyMVpNOS44MyAxMi44MzZINy4zMnYyLjQ3OEg5Ljgzdi0yLjQ3OFpNOS44MyAxOC45NTZINy4zMnYyLjQ3OUg5Ljgzdi0yLjQ3OVpNMjQuNjc5IDE4Ljk1NkgyMi4xN3YyLjQ3OWgyLjUwOXYtMi40NzlaTTI0LjY3OSAxMi43MzZIMjIuMTd2Mi40NzhoMi41MDl2LTIuNDc4WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMTM5QkQ3XCIsXG4gICAgZDogXCJNNi45MiA5LjYyNUg1LjMxNHYxLjY3Nkg2LjkyVjkuNjI1Wk0xMC4xMyA2LjIxNEg4LjUyNnYxLjY3NWgxLjYwNlY2LjIxNFpNMTQuNDQ1IDQuNjA5aC0xLjYwNnYxLjY3NWgxLjYwNlY0LjYxWk01LjkxNiAxNC4xNEg0LjMxMXYxLjY3NmgxLjYwNVYxNC4xNFpNMjYuNzg2IDkuODI2SDI1LjA4djEuNjQ2aDEuNzA2VjkuODI2Wk0yMy41NzUgNi40MTVIMjEuODdWOC4wNmgxLjcwNVY2LjQxNVpNMTkuMjYgNC44MWgtMS43MDV2MS42NDVoMS43MDZWNC44MDlaTTI3LjY4OSAxNC40NDFoLTEuNjA1djEuNjQ2aDEuNjA1VjE0LjQ0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMkY3N0JDXCIsXG4gICAgZDogXCJNMTQuMTQ0IDIzLjI3aC0yLjUwOXYyLjQ3OWgyLjUwOXYtMi40NzhaTTIwLjI2NCAyMy4yN2gtMi41MDh2Mi40NzloMi41MDh2LTIuNDc4WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMTM5QkQ3XCIsXG4gICAgZDogXCJNMjYuNjg1IDIyLjc3SDI1LjA4djEuNjc1aDEuNjA1di0xLjY3NlpNMjMuMzc1IDI2LjA4SDIxLjc3djEuNjc2aDEuNjA1VjI2LjA4Wk0xOS4wNiAyNy42ODZoLTEuNjA1djEuNjc1aDEuNjA1di0xLjY3NVpNMjcuNTg5IDE4LjI1NGgtMS42MDZ2MS42NzZoMS42MDZ2LTEuNjc2Wk02LjkyIDIyLjk3SDUuMjE0djEuNjQ2SDYuOTJWMjIuOTdaTTEwLjAzIDI2LjM4MUg4LjMyNXYxLjY0NmgxLjcwNVYyNi4zOFpNMTQuNDQ1IDI3Ljk4N2gtMS43MDZ2MS42NDVoMS43MDZ2LTEuNjQ1Wk01LjgxNiAxOC4zNTVINC4yMVYyMGgxLjYwNnYtMS42NDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwM0E5REFcIixcbiAgICBkOiBcIk03LjEyIDUuMzExaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMS45MDMgMTUuMjQ0SDF2LjkzM2guOTAzdi0uOTMzWk0yNS43ODIgNS4yMWgtLjkwM3YuOTM0aC45MDNWNS4yMVpNMi41MDUgMTIuMzM1aC0uOTAzdi45MzNoLjkwM3YtLjkzNFpNMTIuMTM3IDIuNTAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMy41MDggOS43MjZoLS45MDN2LjkzM2guOTAzdi0uOTMzWk01LjExMyA3LjMxOEg0LjIxdi45MzNoLjkwM3YtLjkzM1pNOS42MjkgMy44MDZoLS45MDN2LjkwM2guOTAzdi0uOTAzWk0xNS4wNDcgMi4xaC0uOTAzdi45MDNoLjkwM1YyLjFaTTIzLjM3NCAzLjYwNWgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTI5LjI5NSA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTMwLjQ5OCAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0Wk0yNy42OSA3LjMxOGgtLjkwNHYuOTMzaC45MDN2LS45MzNaTTMwLjkgMTUuMTQ0aC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMTcuODU2IDJoLS45MDN2LjkzM2guOTAzVjJaTTIwLjY2NSAyLjYwMmgtLjkwM3YuOTMzaC45MDN2LS45MzNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwM0E5REFcIixcbiAgICBkOiBcIk03LjEyIDUuMzExaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMS45MDMgMTUuMjQ0SDF2LjkzM2guOTAzdi0uOTMzWk0yNS43ODIgNS4yMWgtLjkwM3YuOTM0aC45MDNWNS4yMVpNMi41MDUgMTIuMzM1aC0uOTAzdi45MzNoLjkwM3YtLjkzNFpNMTIuMTM3IDIuNTAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMy41MDggOS43MjZoLS45MDN2LjkzM2guOTAzdi0uOTMzWk01LjExMyA3LjMxOEg0LjIxdi45MzNoLjkwM3YtLjkzM1pNOS42MjkgMy44MDZoLS45MDN2LjkwM2guOTAzdi0uOTAzWk0xNS4wNDcgMi4xaC0uOTAzdi45MDNoLjkwM1YyLjFaTTIzLjM3NCAzLjYwNWgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTI5LjI5NSA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTMwLjQ5OCAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0Wk0yNy42OSA3LjMxOGgtLjkwNHYuOTMzaC45MDN2LS45MzNaTTMwLjkgMTUuMTQ0aC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMTcuODU2IDJoLS45MDN2LjkzM2guOTAzVjJaTTIwLjY2NSAyLjYwMmgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTI1LjY4MiAyNy44ODZoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0zMSAxNy45NTNoLS45MDN2LjkzM0gzMXYtLjkzM1pNNy4xMiAyNy45ODdoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0zMC4zOTggMjAuNzYzaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMjAuNjY1IDMwLjU5NmgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTI5LjI5NSAyMy4zNzFoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0yNy42OSAyNS43OGgtLjkwNHYuOTMyaC45MDN2LS45MzNaTTIzLjI3NCAyOS43OTNoLS45MDN2LjkwMmguOTAzdi0uOTAyWk0xNy43NTYgMzEuNDk4aC0uOTAzdi45MDNoLjkwM3YtLjkwM1pNOS40MjggMjkuNDkyaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMy41MDggMjMuNDcyaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMi4zMDQgMjAuODYzaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNNS4wMTMgMjUuODhINC4xMXYuOTMzaC45MDN2LS45MzNaTTEuOTAzIDE3Ljk1M0gxdi45MzNoLjkwM3YtLjkzM1pNMTQuOTQ3IDMxLjQ5OGgtLjkwM3YuOTMzaC45MDJ2LS45MzNaTTEyLjEzNyAzMC41OTZoLS45MDN2LjkzM2guOTAzdi0uOTMzWlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImNsaXBQYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNmZmZcIixcbiAgICBkOiBcIk0wIDBoMzJ2MzJIMFYwWlwiXG4gIH0pKSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvSGFwcm94eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvSWJtID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29JYm0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29faWJtJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgeDE6IFwiOC4wMDUlXCIsXG4gICAgeDI6IFwiNTMuMzMlXCIsXG4gICAgeTE6IFwiNzkuMzIzJVwiLFxuICAgIHkyOiBcIjc5LjMyNCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMzQkRBREVcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMC40NzYlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMzNkNFRTFcIixcbiAgICBzdG9wT3BhY2l0eTogMC4zODNcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMjFBMkVGXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgeDE6IFwiMTkuNDk2JVwiLFxuICAgIHgyOiBcIjcxLjMwOSVcIixcbiAgICB5MTogXCI4My4zNDQlXCIsXG4gICAgeTI6IFwiMTcuNjM4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzIwN0ZGQVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzZFQUZGMVwiLFxuICAgIHN0b3BPcGFjaXR5OiAwXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYycpLFxuICAgIHgxOiBcIjIxLjkwOSVcIixcbiAgICB4MjogXCIyMS45MDklXCIsXG4gICAgeTE6IFwiOTYuMzE0JVwiLFxuICAgIHkyOiBcIjI5LjQ1NCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0MkMxRTZcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI1Ny4wNzYlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2RkI5RUZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI4Ni43MTYlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2MENCRTdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM1Q0NGRTVcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2QnKSxcbiAgICB4MTogXCI5Ni4yMDUlXCIsXG4gICAgeDI6IFwiLTEuMTcyJVwiLFxuICAgIHkxOiBcIjEyLjY2NyVcIixcbiAgICB5MjogXCItMjIuMjUyJVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzZGQjlFRlwiLFxuICAgIHN0b3BPcGFjaXR5OiAwXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjIyLjQyNyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzM4RDJFMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjkxLjIwMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzZBQkZFQ1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzVDQ0ZFNVwiLFxuICAgIHN0b3BPcGFjaXR5OiAwXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIHgxOiBcIjkuNDA4JVwiLFxuICAgIHgyOiBcIjgwLjU4OSVcIixcbiAgICB5MTogXCI4Ny43NjQlXCIsXG4gICAgeTI6IFwiODMuMTM4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzEyNkNGRFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzIxQTFFRlwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzM4RDJFMFwiLFxuICAgIGQ6IFwiTTQuMjYyIDEzLjEyMmEuNjA0LjYwNCAwIDAgMS0uMy0uMDhsLTIuODQ0LTEuNjI1YS42MTcuNjE3IDAgMCAxLS4yOTUtLjczNC42MDguNjA4IDAgMCAxIC44NjgtLjMxNWwyLjg0MyAxLjYyNWMuMjkuMTU5LjQwNS41MTQuMjYxLjgxYS42MDMuNjAzIDAgMCAxLS41MzMuMzJabTQuOTE0LTQuODY0YS42MDMuNjAzIDAgMCAxLS41MjItLjI5OEw3LjAxMiA1LjE0NGEuNjE1LjYxNSAwIDAgMSAuMTE1LS43ODIuNjA2LjYwNiAwIDAgMSAuOTEuMTU3bDEuNjQgMi44MTNhLjYxNy42MTcgMCAwIDEtLjE1OC44MTljLS4xLjA3LS4yMi4xMDctLjM0My4xMDdabTYuMTA3LTIuNDE2VjIuNjM1YS42MjQuNjI0IDAgMCAxIC41NzUtLjYzNC42MDUuNjA1IDAgMCAxIC40NDMuMTY0LjU5My41OTMgMCAwIDEgLjE4Ni40MzF2My4yODVhLjU5My41OTMgMCAwIDEtLjE4Ni40My42MDUuNjA1IDAgMCAxLS40NDMuMTY1LjYyNC42MjQgMCAwIDEtLjU3NS0uNjM0Wm03LjMxMiAyLjQxNmEuNjA0LjYwNCAwIDAgMS0uMzQzLS4xMDcuNjE3LjYxNyAwIDAgMS0uMTU5LS44MmwxLjY0LTIuODEyYS42MDIuNjAyIDAgMCAxIC45MTEtLjE1N2MuMjIzLjIuMjcxLjUyOC4xMTUuNzgyTDIzLjExNyA3Ljk2YS42MDMuNjAzIDAgMCAxLS41MjIuMjk4Wm00LjkxNCA0Ljg2NGEuNjAyLjYwMiAwIDAgMS0uNTM0LS4zMTkuNjE2LjYxNiAwIDAgMSAuMjYyLS44MWwyLjgxOC0xLjYxMWEuNjI2LjYyNiAwIDAgMSAuNzgzLjExMi41OTIuNTkyIDAgMCAxLS4xNTYuOTA2bC0yLjg3MyAxLjY0M2EuNjA0LjYwNCAwIDAgMS0uMy4wOFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJtMTYuNTM2IDE5LjY0NS0xLjIwNC0uMDA5Yy4wMjYtMy4zNzcgMi4xNDYtNi4zOTEgNS4zMzctNy41ODVhOC4zMDggOC4zMDggMCAwIDEgOS4wNjggMi4xOTdsLS44OTcuNzk1YTcuMDk3IDcuMDk3IDAgMCAwLTcuNzQ1LTEuODc2Yy0yLjcyNiAxLjAxOS00LjUzNyAzLjU5My00LjU1OSA2LjQ3OFpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIiksXG4gICAgZDogXCJNLjAyOSAyMC45MDljLjAyMi0zLjM1NCAyLjQ3NS02LjIwOCA1LjgxNS02Ljc2NGwuMjAxIDEuMTc2Yy0yLjc2NC40Ni00Ljc5NCAyLjgyLTQuODEyIDUuNTk2TC4wMjkgMjAuOTFaXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTguMjQ2IDI0LjczN2ExMC42MjUgMTAuNjI1IDAgMCAxIDAtMTUuMTMxYzQuMjE5LTQuMTc4IDExLjA2LTQuMTc4IDE1LjI3OSAwYTEwLjg5IDEwLjg5IDAgMCAxIDEuMzg0IDEuNjc4bC0xLjAwNC42NTdhOS41MTcgOS41MTcgMCAwIDAtMS4yMzEtMS40OTJjLTMuNzUtMy43MTMtOS44MjgtMy43MTMtMTMuNTc3IDBhOS40NDIgOS40NDIgMCAwIDAgMCAxMy40NDVsLS44NTEuODQzWlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCAyKVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdkJyksIFwiKVwiKSxcbiAgICBkOiBcIk01LjgzNiAxMy4yMzRjLjQwNC0xLjMzMiAxLjMzLTIuNTYgMi40MS0zLjYyOCA0LjIxOS00LjE3OCAxMS4wNi00LjE3OCAxNS4yNzkgMGExMC44OSAxMC44OSAwIDAgMSAxLjM4NCAxLjY3OGwtMS4wMDQuNjU3YTkuNTE3IDkuNTE3IDAgMCAwLTEuMjMxLTEuNDkyYy0zLjc1LTMuNzEzLTkuODI4LTMuNzEzLTEzLjU3NyAwYTkuNDc0IDkuNDc0IDAgMCAwLTIuMDc0IDMuMDZjLTEuNDUyIDMuNDUtMi4zNTggMy41OTMtMS4xODctLjI3NVpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIiksXG4gICAgZDogXCJNMjMuNTI0IDI3Ljg3SDYuOTZhNy4wMTIgNy4wMTIgMCAwIDEtNC45MjItMi4wNTlBNi44NzYgNi44NzYgMCAwIDEgLjAyOSAyMC45MWwxLjIwNC4wMDlhNS42OSA1LjY5IDAgMCAwIDEuNjYgNC4wNTUgNS44MDIgNS44MDIgMCAwIDAgNC4wNzEgMS43MDVoMTYuNjE4YzIuNzguMDAyIDUuMzAyLTEuNjE2IDYuNDM4LTQuMTNhNi45MjkgNi45MjkgMCAwIDAtMS4xOC03LjUwNWwuODk3LS43OTVhOC4xMTIgOC4xMTIgMCAwIDEgMS4zODQgOC43ODVjLTEuMzI5IDIuOTQzLTQuMjc5IDQuODM3LTcuNTM0IDQuODM4aC0uMDYzWlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCAyKVwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29JYm07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0libU1vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0libU1vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJtLjA0NyAyMi45MDkgMS4xODYuMDA5YTUuNjkgNS42OSAwIDAgMCAxLjY2IDQuMDU1IDUuODAyIDUuODAyIDAgMCAwIDQuMDcxIDEuNzA1aDE2LjYxOGMyLjc4LjAwMiA1LjMwMi0xLjYxNiA2LjQzOC00LjEzYTYuOTI5IDYuOTI5IDAgMCAwLTEuMTgtNy41MDVsLjg5Ny0uNzk1YTguMTEyIDguMTEyIDAgMCAxIDEuMzg0IDguNzg1Yy0xLjMyOSAyLjk0My00LjI3OSA0LjgzNy03LjUzNCA0LjgzOEg2Ljk2YTcuMDEyIDcuMDEyIDAgMCAxLTQuOTIyLTIuMDZBNi44NzYgNi44NzYgMCAwIDEgLjAyOSAyMi45MWguMDE4LS4wMThjLjAxNy0yLjcxIDEuNjItNS4wOTEgMy45OTctNi4yLjExNC0uMDU0LjMyLjI5LjYxOSAxLjAzYTUuNzEgNS43MSAwIDAgMC0zLjQxMiA1LjE4bC0xLjE4Ni0uMDFabTQuMjE1LTkuNzg3YS42MDQuNjA0IDAgMCAxLS4zLS4wOGwtMi44NDQtMS42MjVhLjYxNy42MTcgMCAwIDEtLjI5NS0uNzM0LjYwOC42MDggMCAwIDEgLjg2OC0uMzE1bDIuODQzIDEuNjI1Yy4yOS4xNTkuNDA1LjUxNC4yNjEuODFhLjYwMy42MDMgMCAwIDEtLjUzMy4zMlptNC45MTQtNC44NjRhLjYwMy42MDMgMCAwIDEtLjUyMi0uMjk4TDcuMDEyIDUuMTQ0YS42MTUuNjE1IDAgMCAxIC4xMTUtLjc4Mi42MDYuNjA2IDAgMCAxIC45MS4xNTdsMS42NCAyLjgxM2EuNjE3LjYxNyAwIDAgMS0uMTU4LjgxOWMtLjEuMDctLjIyLjEwNy0uMzQzLjEwN1ptNi4xMDctMi40MTZWMi42MzVhLjYyNC42MjQgMCAwIDEgLjU3NS0uNjM0LjYwNS42MDUgMCAwIDEgLjQ0My4xNjQuNTkzLjU5MyAwIDAgMSAuMTg2LjQzMXYzLjI4NWEuNTkzLjU5MyAwIDAgMS0uMTg2LjQzLjYwNS42MDUgMCAwIDEtLjQ0My4xNjUuNjI0LjYyNCAwIDAgMS0uNTc1LS42MzRabTcuMzEyIDIuNDE2YS42MDQuNjA0IDAgMCAxLS4zNDMtLjEwNy42MTcuNjE3IDAgMCAxLS4xNTktLjgybDEuNjQtMi44MTJhLjYwMi42MDIgMCAwIDEgLjkxMS0uMTU3Yy4yMjMuMi4yNzEuNTI4LjExNS43ODJMMjMuMTE3IDcuOTZhLjYwMy42MDMgMCAwIDEtLjUyMi4yOThabTQuOTE0IDQuODY0YS42MDIuNjAyIDAgMCAxLS41MzQtLjMxOS42MTYuNjE2IDAgMCAxIC4yNjItLjgxbDIuODE4LTEuNjExYS42MjYuNjI2IDAgMCAxIC43ODMuMTEyLjU5Mi41OTIgMCAwIDEtLjE1Ni45MDZsLTIuODczIDEuNjQzYS42MDQuNjA0IDAgMCAxLS4zLjA4Wk0xNi4zNjYgMTkuNzhIMTZhMi4zMjIgMi4zMjIgMCAwIDEtLjMwMiAwYy0uMDktLjAxMS0uMTUyLjA1LS4wODYtLjE5NmE4LjIwNCA4LjIwNCAwIDAgMSA1LjA1Ny01LjUzMyA4LjMwOCA4LjMwOCAwIDAgMSA5LjA2OCAyLjE5N2wtLjg5Ny43OTVhNy4wOTcgNy4wOTcgMCAwIDAtNy43NDUtMS44NzYgNy4wMDkgNy4wMDkgMCAwIDAtNC4yODggNC42MTNjLS4xMTUuMzk5LS4xMTUuMzk5IDAgMGgtLjQ0Wk02LjE1NCAyMy44MjZhMTAuNjI2IDEwLjYyNiAwIDAgMSAyLjA5Mi0xMi4yMmM0LjIxOS00LjE3OCAxMS4wNi00LjE3OCAxNS4yNzkgMGwtLjg1MS44NDNjLTMuNzUtMy43MTMtOS44MjgtMy43MTMtMTMuNTc3IDBBOS40NDIgOS40NDIgMCAwIDAgNy4yNjQgMjMuMzZhNi45OSA2Ljk5IDAgMCAwLS40MTguMTcybC0uMjEyLjA5NC0uMTYyLjA3Ny0uMDk0LjAzLS4wOS4wMzljLjY0OC0uMjgyLjk2NS0uNDIuOTUtLjQxMi0uMDI2LjAxNS0xLjA3My40ODktMS4wODQuNDY2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0libU1vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0thZmthID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29LYWZrYShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjU2NSAxNy42MjNjLTEuMTczIDAtMi4yMjUuNTItMi45NDUgMS4zMzdsLTEuODQ1LTEuMzA2Yy4xOTYtLjU0LjMwOS0xLjExOC4zMDktMS43MjQgMC0uNTk2LS4xMDktMS4xNjUtLjI5OC0xLjY5NmwxLjg0LTEuMjkzYTMuOTE0IDMuOTE0IDAgMCAwIDIuOTM5IDEuMzMxIDMuOTMgMy45MyAwIDAgMCAzLjkyNi0zLjkyNiAzLjkzIDMuOTMgMCAwIDAtMy45MjYtMy45MjYgMy45MyAzLjkzIDAgMCAwLTMuOTI2IDMuOTI2YzAgLjM4Ny4wNTguNzYxLjE2MyAxLjExNWwtMS44NDIgMS4yOTNhNS4wNjggNS4wNjggMCAwIDAtMy4xNC0xLjgyNVY4LjcxYTMuOTMyIDMuOTMyIDAgMCAwIDMuMTE5LTMuODQyQTMuOTMgMy45MyAwIDAgMCAxMi4wMTIuOTQxYTMuOTMgMy45MyAwIDAgMC0zLjkyNiAzLjkyNiAzLjkzIDMuOTMgMCAwIDAgMy4wNDggMy44MjR2Mi4yNDlhNS4wNzUgNS4wNzUgMCAwIDAtNC4xOTMgNC45OSA1LjA3NSA1LjA3NSAwIDAgMCA0LjIyOSA0Ljk5NVYyMy4zYTMuOTMxIDMuOTMxIDAgMCAwLTMuMDg0IDMuODMzIDMuOTMgMy45MyAwIDAgMCAzLjkyNiAzLjkyNiAzLjkzIDMuOTMgMCAwIDAgMy45MjctMy45MjYgMy45MzEgMy45MzEgMCAwIDAtMy4wODQtMy44MzN2LTIuMzc1YTUuMDcgNS4wNyAwIDAgMCAzLjA4Ny0xLjc5NWwxLjg1NyAxLjMxNGMtLjEwMy4zNTEtLjE2LjcyMS0uMTYgMS4xMDVhMy45MyAzLjkzIDAgMCAwIDMuOTI2IDMuOTI2IDMuOTMgMy45MyAwIDAgMCAzLjkyNi0zLjkyNiAzLjkzIDMuOTMgMCAwIDAtMy45MjYtMy45MjZabTAtOS4xOGMxLjA1IDAgMS45MDMuODUzIDEuOTAzIDEuOTAzcy0uODU0IDEuOTAzLTEuOTAzIDEuOTAzYTEuOTA2IDEuOTA2IDAgMCAxLTEuOTA0LTEuOTAzYzAtMS4wNS44NTQtMS45MDQgMS45MDQtMS45MDRaTTEwLjEwOSA0Ljg2NmMwLTEuMDUuODU0LTEuOTAzIDEuOTAzLTEuOTAzIDEuMDUgMCAxLjkwNC44NTQgMS45MDQgMS45MDMgMCAxLjA1LS44NTQgMS45MDQtMS45MDQgMS45MDRhMS45MDYgMS45MDYgMCAwIDEtMS45MDMtMS45MDRabTMuODA3IDIyLjI2NmMwIDEuMDUtLjg1NCAxLjkwMy0xLjkwNCAxLjkwM2ExLjkwNiAxLjkwNiAwIDAgMS0xLjkwMy0xLjkwM2MwLTEuMDUuODU0LTEuOTA0IDEuOTAzLTEuOTA0IDEuMDUgMCAxLjkwNC44NTQgMS45MDQgMS45MDRabS0xLjkwNC04LjU0OGEyLjY1OCAyLjY1OCAwIDAgMS0yLjY1NS0yLjY1NSAyLjY1OCAyLjY1OCAwIDAgMSAyLjY1NS0yLjY1NSAyLjY1OCAyLjY1OCAwIDAgMSAyLjY1NSAyLjY1NSAyLjY1OCAyLjY1OCAwIDAgMS0yLjY1NSAyLjY1NVptOS41NTMgNC44NjdhMS45MDYgMS45MDYgMCAwIDEtMS45MDQtMS45MDNjMC0xLjA1Ljg1NC0xLjkwNCAxLjkwNC0xLjkwNCAxLjA1IDAgMS45MDMuODU0IDEuOTAzIDEuOTA0IDAgMS4wNS0uODU0IDEuOTAzLTEuOTAzIDEuOTAzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0thZmthOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29LaWJhbmEgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0tpYmFuYShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA0RTk4XCIsXG4gICAgZDogXCJNNCAwdjI4Ljc4OUwyOC45MzUuMDE3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAxMnYxNi43ODlsMTEuOTA2LTEzLjczOEEyNC43MjEgMjQuNzIxIDAgMCAwIDQgMTJcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0xOC40NzkgMTYuNjY0IDYuMjY4IDMwLjc1NGwtMS4wNzQgMS4yMzdoMjMuMTkyYy0xLjI1Mi02LjI5Mi00Ljg4My0xMS43MTktOS45MDctMTUuMzI3XCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0tpYmFuYTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvS3ViZXJuZXRlcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvS3ViZXJuZXRlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMyNkNFNVwiLFxuICAgIGQ6IFwiTTE1Ljg5LjAwM2EyLjE0IDIuMTQgMCAwIDEgMS4wMy4yMDZsMTEuMTI3IDUuMzA0YTIuMTEgMi4xMSAwIDAgMSAxLjE1IDEuNDI5bDIuNzUgMTEuOTIxYTIuMDkgMi4wOSAwIDAgMS0uNDEyIDEuNzgzbC03LjY5NyA5LjU2Yy0uNDA0LjUtMS4wMTYuNzkyLTEuNjYzLjc5MUw5LjgyNyAzMWMtLjY0OCAwLTEuMjYtLjI5Mi0xLjY2NC0uNzkzbC03LjctOS41NThhMi4xMDcgMi4xMDcgMCAwIDEtLjQxLTEuNzgzTDIuNzk4IDYuOTQ1YTIuMTEgMi4xMSAwIDAgMSAxLjE1MS0xLjQzTDE1LjA3NC4yMWMuMjU1LS4xMjIuNTMyLS4xOTIuODE1LS4yMDZ6TTE2IDQuMDZjLS4zNjggMC0uNjY3LjMzLS42NjcuNzM4bC4wMDIuMDE5YzAgLjA1NS0uMDAzLjEyMi0uMDAyLjE3LjAxLjIzNi4wNi40MTYuMDkxLjYzMi4wNTcuNDY0LjEwMy44NDkuMDc0IDEuMjA2LS4wMjguMTM1LS4xMjcuMjU4LS4yMTYuMzQ0bC0uMDE1LjI4MWE4LjU2OSA4LjU2OSAwIDAgMC01LjU1NSAyLjY2NiA5Ljk4IDkuOTggMCAwIDEtLjI0LS4xN2MtLjEyLjAxNi0uMjQuMDUzLS4zOTYtLjAzOC0uMjk4LS4yLS41Ny0uNDc3LS44OTgtLjgxLS4xNS0uMTYtLjI2LS4zMS0uNDM4LS40NjQtLjA0LS4wMzUtLjEwMy0uMDgyLS4xNDgtLjExOGEuNzkzLjc5MyAwIDAgMC0uNDY0LS4xNzUuNjQyLjY0MiAwIDAgMC0uNTMuMjM0Yy0uMjMuMjg4LS4xNTYuNzI2LjE2My45OGwuMDEuMDA4Yy4wNDQuMDM1LjA5OC4wOC4xMzguMTEuMTkuMTQuMzYzLjIxMi41NTIuMzIzLjM5OC4yNDYuNzI5LjQ1Ljk5LjY5NS4xMDMuMTA4LjEyLjMuMTM0LjM4M2wuMjE0LjE5YTguNTkyIDguNTkyIDAgMCAwLTEuMzYgNS45OThsLS4yNzguMDhjLS4wNzQuMDk2LS4xNzcuMjQ1LS4yODYuMjktLjM0My4xMDctLjcyOC4xNDctMS4xOTQuMTk1LS4yMTguMDE4LS40MDcuMDA4LS42MzkuMDUxLS4wNS4wMS0uMTIyLjAyOS0uMTc3LjA0MmwtLjAwNi4wMDEtLjAxLjAwM2MtLjM5My4wOTUtLjY0NS40NTUtLjU2NC44MS4wODIuMzU1LjQ2NS41Ny44Ni40ODVsLjAxLS4wMDEuMDEzLS4wMDRjLjA1NS0uMDEyLjEyNC0uMDI2LjE3Mi0uMDM5LjIyOC0uMDYuMzkzLS4xNS41OTctLjIyOC40NC0uMTU4LjgwNi0uMjkgMS4xNjEtLjM0MS4xNDktLjAxMi4zMDUuMDkxLjM4My4xMzVsLjI5LS4wNWE4LjY1NCA4LjY1NCAwIDAgMCAzLjg0IDQuNzg3bC0uMTIuMjljLjA0My4xMTMuMDkxLjI2NS4wNTkuMzc2LS4xMy4zMzQtLjM1LjY4OC0uNjAzIDEuMDgxLS4xMjIuMTgyLS4yNDcuMzI0LS4zNTcuNTMyLS4wMjYuMDUtLjA2LjEyNi0uMDg2LjE3OS0uMTcuMzY1LS4wNDUuNzg2LjI4NC45NDQuMzMuMTYuNzQxLS4wMDguOTE5LS4zNzVsLjAwMS0uMDAxdi0uMDAyYy4wMjUtLjA1MS4wNjEtLjEyLjA4My0uMTY5LjA5NC0uMjE1LjEyNS0uNC4xOTItLjYwOS4xNzYtLjQ0Mi4yNzMtLjkwNS41MTUtMS4xOTQuMDY3LS4wOC4xNzUtLjExLjI4Ny0uMTRsLjE1MS0uMjczYTguNjE2IDguNjE2IDAgMCAwIDYuMTQ1LjAxNmwuMTQyLjI1NmMuMTE0LjAzNy4yMzkuMDU2LjM0LjIwNi4xODIuMzEuMzA2LjY3NS40NTcgMS4xMTguMDY2LjIwOC4xLjM5My4xOTQuNjEuMDIxLjA0OC4wNTcuMTE3LjA4Mi4xNy4xNzcuMzY3LjU5LjUzNS45Mi4zNzYuMzMtLjE1OC40NTUtLjU4LjI4NC0uOTQ1LS4wMjYtLjA1Mi0uMDYtLjEyOS0uMDg3LS4xNzktLjExLS4yMDgtLjIzNS0uMzQ4LS4zNTctLjUzLS4yNTItLjM5My0uNDYxLS43Mi0uNTktMS4wNTUtLjA1NS0uMTczLjAwOS0uMjguMDUtLjM5Mi0uMDI1LS4wMjktLjA3OS0uMTkyLS4xMS0uMjY4YTguNjU0IDguNjU0IDAgMCAwIDMuODM4LTQuODIyYy4wODYuMDE0LjIzNi4wNC4yODUuMDUuMS0uMDY2LjE5Mi0uMTUyLjM3My0uMTM4LjM1NS4wNTIuNzIuMTgzIDEuMTYuMzQxLjIwNS4wNzguMzcuMTcuNTk4LjIzLjA0OC4wMTMuMTE3LjAyNS4xNzIuMDM3bC4wMTMuMDA0LjAxLjAwMmMuMzk1LjA4NS43NzgtLjEzMS44Ni0uNDg2LjA4LS4zNTUtLjE3MS0uNzE1LS41NjQtLjgxLS4wNTctLjAxMy0uMTM4LS4wMzUtLjE5My0uMDQ1LS4yMzItLjA0NC0uNDItLjAzMy0uNjQtLjA1MS0uNDY1LS4wNDktLjg1LS4wODktMS4xOTMtLjE5Ni0uMTQtLjA1NC0uMjM5LS4yMi0uMjg3LS4yODlsLS4yNy0uMDc4YTguNTcyIDguNTcyIDAgMCAwLS4xMzktMy4xMDQgOC41OTkgOC41OTkgMCAwIDAtMS4yNDctMi44OGMuMDY4LS4wNjIuMTk5LS4xNzcuMjM2LS4yMS4wMS0uMTIuMDAxLS4yNDUuMTI1LS4zNzcuMjYyLS4yNDYuNTkyLS40NS45OS0uNjk1LjE5LS4xMS4zNjQtLjE4Mi41NTQtLjMyMi4wNDMtLjAzMi4xMDEtLjA4Mi4xNDYtLjExOC4zMi0uMjU1LjM5My0uNjkzLjE2NC0uOTgtLjIzLS4yODctLjY3NC0uMzE0LS45OTMtLjA2LS4wNDYuMDM2LS4xMDcuMDgzLS4xNDguMTE4LS4xNzkuMTUzLS4yOS4zMDUtLjQ0LjQ2NC0uMzI4LjMzMy0uNi42MTEtLjg5OC44MTItLjEyOS4wNzUtLjMxOC4wNDktLjQwNC4wNDRsLS4yNTMuMThhOC43MzIgOC43MzIgMCAwIDAtNS41MjgtMi42NjYgMTYuMDM2IDE2LjAzNiAwIDAgMS0uMDE1LS4yOTdjLS4wODctLjA4My0uMTkyLS4xNTQtLjIxOC0uMzMzLS4wMjktLjM1Ny4wMi0uNzQyLjA3Ni0xLjIwNi4wMy0uMjE2LjA4Mi0uMzk2LjA5LS42MzIuMDAzLS4wNTMgMC0uMTMgMC0uMTg5IDAtLjQwOC0uMjk5LS43MzgtLjY2Ny0uNzM4em0tLjgzNCA1LjE1Ni0uMTk4IDMuNDg4LS4wMTQuMDA3YS41ODcuNTg3IDAgMCAxLS45MzIuNDQ5bC0uMDA2LjAwMi0yLjg2NC0yLjAyN2E2Ljg2MiA2Ljg2MiAwIDAgMSA0LjAxNC0xLjkxOXptMS42NjggMGE2LjkyMiA2LjkyMiAwIDAgMSAzLjk5IDEuOTJsLTIuODQ2IDIuMDE1LS4wMS0uMDA0YS41ODguNTg4IDAgMCAxLS45MzMtLjQ0OGwtLjAwMy0uMDAxLS4xOTgtMy40ODJ6bS02LjcyIDMuMjIyIDIuNjE0IDIuMzM1LS4wMDMuMDE0YS41ODUuNTg1IDAgMCAxLS4yMyAxLjAwOGwtLjAwMy4wMS0zLjM1Mi45NjdhNi44MzggNi44MzggMCAwIDEgLjk3My00LjMzNHptMTEuNzUzLjAwMWMuMzg4LjYzLjY4MyAxLjMzMS44NTggMi4wOTNhNi45MSA2LjkxIDAgMCAxIC4xNDUgMi4yMjlsLTMuMzctLjk3LS4wMDItLjAxM2EuNTg2LjU4NiAwIDAgMS0uMjMtMS4wMDhsLS4wMDItLjAwNyAyLjYtMi4zMjR6bS02LjQwNCAyLjUxNWgxLjA3MWwuNjY2LjgzLS4yMzkgMS4wMzgtLjk2Mi40NjEtLjk2NC0uNDYzLS4yNC0xLjAzNy42NjgtLjgzem0zLjQzNSAyLjg0NGEuNTg1LjU4NSAwIDAgMSAuMTM1LjAxbC4wMDUtLjAwOCAzLjQ2OC41ODZhNi44NTggNi44NTggMCAwIDEtMi43NzYgMy40ODFsLTEuMzQ2LTMuMjQ2LjAwNC0uMDA1YS41ODYuNTg2IDAgMCAxIC41MS0uODE4em0tNS44MjQuMDE0YS41ODcuNTg3IDAgMCAxIC41My44MTdsLjAxLjAxMi0xLjMzMSAzLjIxNGE2Ljg4NiA2Ljg4NiAwIDAgMS0yLjc2Ny0zLjQ1OGwzLjQzNy0uNTgyLjAwNi4wMDdhLjU5NS41OTUgMCAwIDEgLjExNS0uMDF6bTIuOTA0IDEuNDA3YS41ODIuNTgyIDAgMCAxIC4yNzUuMDU5LjU4My41ODMgMCAwIDEgLjI2My4yNWguMDEzbDEuNjk0IDMuMDU3Yy0uMjIuMDczLS40NDYuMTM2LS42NzcuMTg5YTYuODk2IDYuODk2IDAgMCAxLTMuNzU4LS4xOTRsMS42OS0zLjA1aC4wMDNhLjU4OC41ODggMCAwIDEgLjQ5Ny0uMzF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvS3ViZXJuZXRlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvTG9nZ2luZyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTG9nZ2luZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwODBENVwiLFxuICAgIGQ6IFwiTTIgMTB2MTNhOSA5IDAgMCAxIDkgOWgxM2MwLTEyLjE1LTkuODUtMjItMjItMjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDEzLjU2NVYzMmgxMGMwLTcuNzIyLTMuOTgxLTE0LjUxLTEwLTE4LjQzNlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTE0IDB2MTAuMjI2QzIxLjY2NiAxNC40NjggMjYuODY5IDIyLjYzNiAyNi44NjkgMzJIMzBWMTZjMC04LjgzNy03LjE2My0xNi0xNi0xNlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0xvZ2dpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0xvZ3N0YXNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Mb2dzdGFzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzNFQkVCMFwiLFxuICAgIGQ6IFwiTTE5IDMyaDExVjIwSDE5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZDogXCJNNCAwSDN2MjBoMTN2LThDMTYgNS4zNzMgMTAuNjI3IDAgNCAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDIwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMVYyMEgzWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Mb2dzdGFzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvTWFwcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTWFwcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzIyQTdGM1wiLFxuICAgIGQ6IFwiTTI1LjUgOS41YzAgNi42NS05LjUgMTEuNDI1LTkuNSAxMS40MjVTNi41IDE2LjE1IDYuNSA5LjVBOS41IDkuNSAwIDAgMSAxNiAwYTkuNSA5LjUgMCAwIDEgOS41IDkuNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjAuOTI1czQuMzI2LTIuMTgzIDcuMTQxLTUuNjQ1bC0yLjUwNS0xLjg3OGE3LjcyNSA3LjcyNSAwIDAgMC05LjI3MiAwTDguODU5IDE1LjI4QzExLjY3NCAxOC43NDIgMTYgMjAuOTI1IDE2IDIwLjkyNVwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiLFxuICAgIGQ6IFwiTTI1LjUzIDE3LjA3M2EyMS4xMjQgMjEuMTI0IDAgMCAxLTIuODM0IDIuOTE2Yy0yLjYyIDIuMjM1LTUuMjM5IDMuNTYxLTUuMzQ5IDMuNjE2TDE2IDI0LjI4MmwtMS4zNDgtLjY3N2MtLjEwOS0uMDU1LTIuNzI4LTEuMzgxLTUuMzQ5LTMuNjE2YTIxLjE4MiAyMS4xODIgMCAwIDEtMi44MzQtMi45MTZMMCAyMS45MjVsMTEuMzY0IDguNTIzYTcuNzI0IDcuNzI0IDAgMCAwIDkuMjcxIDBMMzIgMjEuOTI1bC02LjQ3LTQuODUyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01hcHM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb01lbWNhY2hlZCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTWVtY2FjaGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX21lbWNhY2hlZCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInJhZGlhbEdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYycpLFxuICAgIGN4OiBcIjQxLjQwNiVcIixcbiAgICBjeTogXCI0Mi43MDglXCIsXG4gICAgcjogXCIwJVwiLFxuICAgIGZ4OiBcIjQxLjQwNiVcIixcbiAgICBmeTogXCI0Mi43MDglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjREI3QzdDXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzgzNzM3XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicmFkaWFsR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgY3g6IFwiNDQuMjcxJVwiLFxuICAgIGN5OiBcIjQyLjcwOCVcIixcbiAgICByOiBcIjAlXCIsXG4gICAgZng6IFwiNDQuMjcxJVwiLFxuICAgIGZ5OiBcIjQyLjcwOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNEQjdDN0NcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDODM3MzdcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICB4MTogXCI1MCVcIixcbiAgICB4MjogXCI1MCVcIixcbiAgICB5MTogXCIxMDAlXCIsXG4gICAgeTI6IFwiMCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM1NzRDNEFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM4MDcxNkRcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICB4MTogXCI4OC43NzglXCIsXG4gICAgeDI6IFwiMzAuMTQ5JVwiLFxuICAgIHkxOiBcIjk4LjM0MiVcIixcbiAgICB5MjogXCItOC42OCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyNjhEODNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyRUExOUVcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJNMCAyMS41NjdWMTAuMzUyQzAgMS4yOTQgMS4yOTMgMCAxMC4zNDIgMGgxMS4yMzZjOS4wNDkgMCAxMC4zNDEgMS4yOTQgMTAuMzQxIDEwLjM1MnYxMS4yMTVjMCA5LjA1OS0xLjI5MiAxMC4zNTItMTAuMzQxIDEwLjM1MkgxMC4zNDJDMS4yOTIgMzEuOTIgMCAzMC42MjYgMCAyMS41NjdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTYuODg5IDYuMDE2QzUuMzIgMTUuOTYgNi4xNCAyNS4yNyA2LjE0IDI1LjI3aDQuOTA0Yy0uNDY2LTIuNDgzLTIuMTQtMTMuODI0LS43NDgtMTMuODYxLjc0Ni4xMTggNC4xNTYgOS42MjEgNC4xNTYgOS42MjFzLjc1MS0uMDkzIDEuNTA3LS4wOTNjLjc1NSAwIDEuNTA2LjA5MyAxLjUwNi4wOTNzMy40MS05LjUwMyA0LjE1Ny05LjYyMWMxLjM5Mi4wMzctLjI4MiAxMS4zNzgtLjc0OCAxMy44Nmg0LjkwNHMuODItOS4zMS0uNzQ4LTE5LjI1M2gtNC41NGMtLjg2NS4wMS00LjE1MyA1Ljc3Ny00LjUzMSA1Ljc3Ny0uMzc4IDAtMy42NjYtNS43NjctNC41My01Ljc3N0g2Ljg4OVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpLCBcIilcIiksXG4gICAgZDogXCJNMTQuOTkzIDI0LjEwOWExLjE2IDEuMTYgMCAxIDEtMi4zMjIgMCAxLjE2IDEuMTYgMCAwIDEgMi4zMjIgMFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNMTkuMjQ5IDI0LjEwOWExLjE2IDEuMTYgMCAxIDEtMi4zMjIgMCAxLjE2IDEuMTYgMCAwIDEgMi4zMjIgMFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTI0LjggNi4zNDVjLjcwNyA0Ljc5Ljg3MyA5LjM4OC44NiAxMi44MTMtLjAxMyAzLjUwMy0uMjE0IDUuNzgtLjIxNCA1Ljc4aC00LjEyOGwtLjQ0My4zMzJoNC45MDRzLjgyLTkuMzEtLjc0OC0xOS4yNTRsLS4yMzIuMzI5Wm0tMTIuOTk2LS4xMjFjMS4yODggMS40MzMgMy41MTYgNS4yMzcgMy44MjMgNS4yMzctLjgxNy0xLjA0NS0yLjgyMy00LjM3OC0zLjgyMy01LjIzN1ptLTEuODQgNC44NTJjLTEuMzkyLjAzOC4yODIgMTEuMzc5Ljc0OSAxMy44NjFINi40M2wtLjI5LjMzM2g0LjkwNGMtLjQ2NC0yLjQ3LTIuMTIzLTEzLjcxLS43NjktMTMuODYxLS4xMjYtLjE5LS4yMzUtLjMyLS4zMTEtLjMzM1ptMTEuMzI2IDBjLS43NDYuMTE5LTQuMTU2IDkuNjIyLTQuMTU2IDkuNjIycy0uNzUxLS4wOTQtMS41MDctLjA5NGMtLjQ0NyAwLS44MzIuMDI4LTEuMDkyLjA1MmwtLjA4Mi4zNzRzLjc1MS0uMDkzIDEuNTA3LS4wOTNjLjc1NSAwIDEuNTA2LjA5MyAxLjUwNi4wOTNzMy4zODUtOS40NCA0LjE0Ni05LjYyMWMtLjA4Mi0uMjA4LS4xODMtLjMzLS4zMjItLjMzM1pcIixcbiAgICBvcGFjaXR5OiAwLjFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk02Ljg4OSA2LjAxNkM1LjMyIDE1Ljk2IDYuMTQgMjUuMjcgNi4xNCAyNS4yN2wuMjg5LS4zMjVjLS4xNDgtMi4xOTctLjU0My0xMC4xNC43OTEtMTguNTk3aDQuNTQxYy4wOTYuMDAyLjIyNS4wOC4zNzQuMjA4LS4yOTctLjMzLS41NDQtLjUzOC0uNzA2LS41NEg2Ljg4OVptMTMuNjAxIDBjLS44NjQuMDEtNC4xNTIgNS43NzctNC41MyA1Ljc3Ny4xNTQuMTk3LjI3OS4zMzMuMzMyLjMzMy4zNzggMCAzLjY2Ni01Ljc2NyA0LjUzLTUuNzc3aDQuMDA4bC4yLS4zMzNoLTQuNTRabS05Ljg4MSA1LjcyNWMxLjEwMyAxLjY1NyAzLjg0NCA5LjI5IDMuODQ0IDkuMjlsLjA4LS4zNzNjLS42NzYtMS44NTYtMy4yNTYtOC44MTQtMy45MDMtOC45MTdoLS4wMjFabTExLjM0NiAwYy43NCAxLjg4Ny0uNjYgMTEuMjk1LTEuMDggMTMuNTI5bC40NDQtLjM0OGMuNTY4LTMuMzMxIDEuOTM2LTEzLjE0Ni42MzYtMTMuMThaXCIsXG4gICAgb3BhY2l0eTogMC4zXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29NZW1jYWNoZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb01ldHJpY3MgPSBmdW5jdGlvbiBFdWlJY29uTG9nb01ldHJpY3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTIgMzJoMjhWMjBsLTYuNDY1LTYuNDY1YTUgNSAwIDAgMC03LjA3IDBMMiAyOHY0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTYuNDY1IDEzLjUzNS0zLjUzNiAzLjUzNmE5Ljk2NSA5Ljk2NSAwIDAgMCA3LjA3IDIuOTMgOS45NjUgOS45NjUgMCAwIDAgNy4wNzItMi45M2wtMy41MzYtMy41MzZhNSA1IDAgMCAwLTcuMDcgMFwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGQ6IFwiTTE0LjM0MyAxMS40MTRBNy45NTEgNy45NTEgMCAwIDEgMjAgOS4wNzFjMi4xMzcgMCA0LjE0Ni44MzIgNS42NTcgMi4zNDNsMy4yMDcgMy4yMDdBOS45NTUgOS45NTUgMCAwIDAgMzAgMTAuMDAxYzAtNS41MjQtNC40NzctMTAtMTAtMTAtNS41MjIgMC0xMCA0LjQ3Ni0xMCAxMCAwIDEuNjY3LjQxNCAzLjIzNyAxLjEzNyA0LjYybDMuMjA2LTMuMjA3WlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29NZXRyaWNzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Nb25nb2RiID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Nb25nb2RiKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwibTE2Ljg0NCAzMS44NDctLjg0Ny0uMjlzLjEwNC00LjMxNS0xLjQ0NS00LjYyNWMtMS4wMzItMS4xOTguMTY1LTUwLjggMy44ODItLjE2NSAwIDAtMS4yOC42NC0xLjUwNyAxLjczNS0uMjQ4IDEuMDc0LS4wODMgMy4zNDUtLjA4MyAzLjM0NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E2QTM4NVwiLFxuICAgIGQ6IFwibTE2Ljg0NCAzMS44NDctLjg0Ny0uMjlzLjEwNC00LjMxNS0xLjQ0NS00LjYyNWMtMS4wMzItMS4xOTguMTY1LTUwLjggMy44ODItLjE2NSAwIDAtMS4yOC42NC0xLjUwNyAxLjczNS0uMjQ4IDEuMDc0LS4wODMgMy4zNDUtLjA4MyAzLjM0NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTE3LjI5OSAyNy42NzZzNy40MTMtNC44NzQgNS42NzgtMTUuMDEzYy0xLjY3Mi03LjM3Mi01LjYxNi05Ljc4OC02LjA1LTEwLjcxOC0uNDc1LS42Ni0uOTMtMS44MTctLjkzLTEuODE3bC4zMSAyMC41MDZjMCAuMDItLjY0IDYuMjc4Ljk5MiA3LjA0MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNDk5RDRBXCIsXG4gICAgZDogXCJNMTcuMjk5IDI3LjY3NnM3LjQxMy00Ljg3NCA1LjY3OC0xNS4wMTNjLTEuNjcyLTcuMzcyLTUuNjE2LTkuNzg4LTYuMDUtMTAuNzE4LS40NzUtLjY2LS45My0xLjgxNy0uOTMtMS44MTdsLjMxIDIwLjUwNmMwIC4wMi0uNjQgNi4yNzguOTkyIDcuMDQyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xNS41NjQgMjcuOTQ0cy02Ljk2LTQuNzUtNi41NDYtMTMuMTEzYy4zOTItOC4zNjMgNS4zMDctMTIuNDczIDYuMjU3LTEzLjIxNi42Mi0uNjYuNjQtLjkwOS42ODEtMS41Ny40MzQuOTMuMzUxIDEzLjg5OC40MTMgMTUuNDI2LjE4NiA1Ljg4Ni0uMzMgMTEuMzU4LS44MDUgMTIuNDczWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNThBQTUwXCIsXG4gICAgZDogXCJNMTUuNTY0IDI3Ljk0NHMtNi45Ni00Ljc1LTYuNTQ2LTEzLjExM2MuMzkyLTguMzYzIDUuMzA3LTEyLjQ3MyA2LjI1Ny0xMy4yMTYuNjItLjY2LjY0LS45MDkuNjgxLTEuNTcuNDM0LjkzLjM1MSAxMy44OTguNDEzIDE1LjQyNi4xODYgNS44ODYtLjMzIDExLjM1OC0uODA1IDEyLjQ3M1pcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTW9uZ29kYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvTXlzcWwgPSBmdW5jdGlvbiBFdWlJY29uTG9nb015c3FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCIjMDA1NDZCXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5LjQ1NiAyNC4yNzZjLTEuNzQtLjA0My0zLjA4OC4xMzEtNC4yMTkuNjEtLjMyNi4xMy0uODQ4LjEzLS44OTIuNTQzLjE3NC4xNzQuMTk2LjQ1Ny4zNDguNjk2LjI2MS40MzUuNzE4IDEuMDIyIDEuMTMxIDEuMzI3LjQ1Ny4zNDguOTE0LjY5NiAxLjM5MiAxIC44NDguNTIyIDEuODA1LjgyNyAyLjYzMSAxLjM0OS40OC4zMDQuOTU3LjY5NSAxLjQzNiAxLjAyMi4yNC4xNzMuMzkxLjQ1Ni42OTYuNTY1di0uMDY1Yy0uMTUzLS4xOTYtLjE5Ni0uNDc5LS4zNDgtLjY5Ni0uMjE4LS4yMTgtLjQzNS0uNDEzLS42NTMtLjYzYTEwLjMxNiAxMC4zMTYgMCAwIDAtMi4yNjEtMi4xOTdjLS42OTYtLjQ3OS0yLjIxOS0xLjEzMS0yLjUwMS0xLjkzNmwtLjA0NC0uMDQzYy40NzktLjA0NCAxLjA0NC0uMjE4IDEuNS0uMzQ4Ljc0LS4xOTYgMS40MTQtLjE1MyAyLjE3NS0uMzQ4LjM0OC0uMDg3LjY5Ni0uMTk2IDEuMDQ0LS4zMDV2LS4xOTVjLS4zOTEtLjM5Mi0uNjc0LS45MTQtMS4wODctMS4yODQtMS4xMS0uOTU3LTIuMzI3LTEuODkyLTMuNTg4LTIuNjc0LS42NzUtLjQzNS0xLjU0NS0uNzE4LTIuMjYyLTEuMDg4LS4yNjEtLjEzLS42OTYtLjE5Ni0uODQ4LS40MTMtLjM5Mi0uNDc5LS42MS0xLjExLS44OTItMS42NzVhNTQuOTIyIDU0LjkyMiAwIDAgMS0xLjc4My0zLjc4NGMtLjM5Mi0uODQ4LS42My0xLjY5Ni0xLjExLTIuNDc5LTIuMjQtMy42OTctNC42NzUtNS45MzctOC40MTYtOC4xMzQtLjgwNC0uNDU2LTEuNzYxLS42NTItMi43ODMtLjg5MS0uNTQ0LS4wMjItMS4wODgtLjA2NS0xLjYzMS0uMDg3LS4zNDgtLjE1Mi0uNjk2LS41NjYtMS0uNzYxLTEuMjQtLjc4My00LjQzNy0yLjQ4LTUuMzUtLjI0LS41ODggMS40MTQuODcgMi44MDYgMS4zNyAzLjUyNC4zNy41Ljg0OCAxLjA2NSAxLjEwOSAxLjYzLjE1Mi4zNy4xOTUuNzYyLjM0NyAxLjE1My4zNDguOTU3LjY3NSAyLjAyMyAxLjEzMSAyLjkxNC4yNC40NTcuNS45MzYuODA1IDEuMzQ5LjE3NC4yMzkuNDc4LjM0OC41NDQuNzQtLjMwNS40MzQtLjMyNyAxLjA4Ny0uNSAxLjYzLS43ODMgMi40NTgtLjQ3OSA1LjUwMi42MyA3LjMwNy4zNDguNTQ0IDEuMTc1IDEuNzQgMi4yODQgMS4yODQuOTc4LS4zOTIuNzYtMS42MzIgMS4wNDMtMi43MTkuMDY2LS4yNjEuMDIyLS40MzUuMTUzLS42MDl2LjA0NGMuMzA0LjYwOS42MDkgMS4xOTYuODkxIDEuODA1LjY3NSAxLjA2NSAxLjg0OSAyLjE3NCAyLjgyOCAyLjkxNC41MjIuMzkxLjkzNSAxLjA2NSAxLjU4NyAxLjMwNXYtLjA2NmgtLjA0M2MtLjEzLS4xOTUtLjMyNy0uMjgyLS41LS40MzUtLjM5Mi0uMzktLjgyNy0uODctMS4xMzEtMS4zMDQtLjkxNC0xLjIxOC0xLjcxOS0yLjU2Ny0yLjQzNi0zLjk1OC0uMzQ4LS42NzUtLjY1My0xLjQxNC0uOTM1LTIuMDg4LS4xMy0uMjYxLS4xMy0uNjUzLS4zNDgtLjc4My0uMzI3LjQ3OC0uODA1Ljg5Mi0xLjA0NCAxLjQ3OS0uNDEzLjkzNS0uNDU3IDIuMDg4LS42MSAzLjI4NC0uMDg2LjAyMS0uMDQzIDAtLjA4Ni4wNDMtLjY5Ni0uMTc0LS45MzUtLjg5MS0xLjE5Ni0xLjUtLjY1My0xLjU0NS0uNzYxLTQuMDI0LS4xOTYtNS44MDcuMTUyLS40NTcuODA1LTEuODkyLjU0NC0yLjMyNy0uMTMtLjQxMy0uNTY2LS42NTItLjgwNS0uOTc5YTguNzY0IDguNzY0IDAgMCAxLS43ODMtMS4zOTJjLS41MjItMS4yMTctLjc4My0yLjU2Ni0xLjM0OC0zLjc4NC0uMjYxLS41NjUtLjcxOC0xLjE1Mi0xLjA4Ny0xLjY3NC0uNDE0LS41ODctLjg3LTEtMS4xOTctMS42OTctLjEwOC0uMjM5LS4yNi0uNjMtLjA4Ny0uODkxLjA0NC0uMTc0LjEzLS4yNC4zMDUtLjI4My4yODMtLjI0IDEuMDg3LjA2NSAxLjM3LjE5Ni44MDUuMzI2IDEuNDc5LjYzIDIuMTUzIDEuMDg3LjMwNC4yMTguNjMuNjMxIDEuMDIyLjc0aC40NTdjLjY5Ni4xNTIgMS40NzkuMDQzIDIuMTMxLjIzOSAxLjE1My4zNyAyLjE5Ni45MTMgMy4xMzIgMS41YTE5LjI5NCAxOS4yOTQgMCAwIDEgNi43ODUgNy40MzhjLjI2MS41LjM3Ljk1Ny42MDkgMS40NzkuNDU3IDEuMDY2IDEuMDIyIDIuMTUzIDEuNDc5IDMuMTk3LjQ1NiAxLjAyMi44OTEgMi4wNjYgMS41NDQgMi45MTQuMzI2LjQ1NyAxLjYzLjY5NiAyLjIxOC45MzUuNDM1LjE5NiAxLjExLjM3IDEuNS42MS43NC40NTYgMS40OC45NzggMi4xNzUgMS40NzguMzQ4LjI2IDEuNDM2LjgwNSAxLjUwMSAxLjI0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yNzMgNS4zNzhjLS4zNyAwLS42My4wNDMtLjg5MS4xMDl2LjA0M2guMDQzYy4xNzQuMzQ4LjQ3OS41ODcuNjk2Ljg5Mi4xNzQuMzQ4LjMyNi42OTYuNSAxLjA0NGwuMDQ0LS4wNDRjLjMwNC0uMjE3LjQ1Ny0uNTY1LjQ1Ny0xLjA4Ny0uMTMxLS4xNTItLjE1My0uMzA1LS4yNjEtLjQ1Ny0uMTMtLjIxOC0uNDE0LS4zMjYtLjU4OC0uNVpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTXlzcWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb05naW54ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29OZ2lueChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMTE5NjM5XCIsXG4gICAgZDogXCJtMTYgMCAxMy44NTYgOHYxNkwxNiAzMiAyLjE0NCAyNFY4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTExLjE3IDEzLjUxMnY4LjM3NmExLjYwNyAxLjYwNyAwIDEgMS0zLjIxNSAwVjkuNjMyYzAtMS40MzIgMS43MzEtMi4xNDkgMi43NDQtMS4xMzZsOS41MSA5LjUxMlY5LjYzMmExLjYwNyAxLjYwNyAwIDAgMSAzLjIxNSAwdjEyLjI1NmMwIDEuNDMyLTEuNzMxIDIuMTQ5LTIuNzQ0IDEuMTM2bC05LjUxLTkuNTEyWlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29OZ2lueDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTEwIDMySDcuMjM4QzMuNzkzIDMyIDEgMjguODY1IDEgMjQuOTk4VjE1aDl2MTdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCAzMmg5VjhoLTl6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDdDXCIsXG4gICAgZDogXCJNMzEgMzJoLTlWMGwxLjk3My4wMjRDMjcuODY2LjA3MiAzMSAzLjczMSAzMSA4LjIyOFYzMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29PYnNlcnZhYmlsaXR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Pc3F1ZXJ5ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Pc3F1ZXJ5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTTMxLjkwNy4wMzJ2Ny45NjlsLTcuOTUyIDcuOTUxVjcuOTY3TDMxLjkwNy4wMzJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzM1wiLFxuICAgIGQ6IFwiTTE2LjAwMy4wMzJ2Ny45NjlsNy45NTIgNy45NTFWNy45NjdMMTYuMDAzLjAzMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTU5NkZGXCIsXG4gICAgZDogXCJNMzEuOTIzIDMxLjg1NWgtNy45NjhsLTcuOTUyLTcuOTUxaDcuOTg1bDcuOTM1IDcuOTUxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0zMS45MjMgMTUuOTUyaC03Ljk2OGwtNy45NTIgNy45NTJoNy45ODVsNy45MzUtNy45NTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTS4xIDMxLjg3MnYtNy45NjhsNy45NTItNy45NTJ2Ny45ODVMLjEgMzEuODcyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0xNi4wMDQgMzEuODcydi03Ljk2OGwtNy45NTItNy45NTJ2Ny45ODVsNy45NTIgNy45MzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTS4wODQuMDQ4aDcuOTY4TDE2LjAwNCA4SDguMDE5TC4wODQuMDQ4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0uMDg0IDE1Ljk1Mmg3Ljk2OEwxNi4wMDQgOEg4LjAxOUwuMDg0IDE1Ljk1MlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Pc3F1ZXJ5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29QaHAgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1BocChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19waHAnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIGQ6IFwiTS4wMjggNy44NTRDLjAyOCAzLjUzNCA2LjY4OC4wMyAxNC45MDIuMDNzMTQuODc0IDMuNTAzIDE0Ljg3NCA3LjgyNGMwIDQuMzIyLTYuNjYgNy44MjUtMTQuODc0IDcuODI1LTguMjE1IDAtMTQuODc0LTMuNTAzLTE0Ljg3NC03LjgyNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2QnKSxcbiAgICBkOiBcIk0wIDE3LjQzaDMwLjk4N1YwSDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZicpLFxuICAgIGQ6IFwiTTAgMTcuNDNoMzAuOTg3VjBIMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInJhZGlhbEdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIGN4OiBcIjMwLjAyJVwiLFxuICAgIGN5OiBcIjgyLjQyMiVcIixcbiAgICByOiBcIjEyNC44MTQlXCIsXG4gICAgZng6IFwiMzAuMDIlXCIsXG4gICAgZnk6IFwiODIuNDIyJVwiLFxuICAgIGdyYWRpZW50VHJhbnNmb3JtOiBcIm1hdHJpeCguNTI2MDQgMCAwIDEgLjE0MiAwKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0FFQjJENVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQUVCMkQ1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0ODRDODlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0ODRDODlcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIHRyYW5zZm9ybTogXCJtYXRyaXgoMSAwIDAgLTEgLjAyNiAyNS40MTMpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoLjU5MiAuODYpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uMDI4IDcuODU0Qy4wMjggMy41MzQgNi42ODguMDMgMTQuOTAyLjAzczE0Ljg3NCAzLjUwMyAxNC44NzQgNy44MjRjMCA0LjMyMi02LjY2IDcuODI1LTE0Ljg3NCA3LjgyNS04LjIxNSAwLTE0Ljg3NC0zLjUwMy0xNC44NzQtNy44MjVcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdkJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzc3N0JCM1wiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0xNS40OTQgMS40NzJjNy44OTQgMCAxNC4yOTMgMy4yNDMgMTQuMjkzIDcuMjQzcy02LjQgNy4yNDQtMTQuMjkzIDcuMjQ0Yy03Ljg5NCAwLTE0LjI5My0zLjI0My0xNC4yOTMtNy4yNDQgMC00IDYuNC03LjI0MyAxNC4yOTMtNy4yNDNcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZycpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2YnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZycpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTguNzAxIDcuODE3Yy42NSAwIDEuMTM0LjEyIDEuNDQuMzU2LjMwNC4yMzMuNTEzLjYzOC42MjMgMS4yMDIuMTAzLjUyOC4wNjQuODk2LS4xMTYgMS4wOTUtLjE4My4yMDMtLjU4LjMwNi0xLjE3Ny4zMDZIOC40MzNsLS41NzUtMi45NTloLjg0M1pNNS4zMSA0LjE3MmEuMTYxLjE2MSAwIDAgMC0uMTU5LjE5M2wxLjUyNCA3Ljg0Yy4wMTUuMDc2LjA4Mi4xMzEuMTU5LjEzMWgzLjI4NGMxLjAzMyAwIDEuODAxLS4yOCAyLjI4NC0uODMzLjQ4NS0uNTU2LjYzNS0xLjMzMy40NDYtMi4zMDlhMy42ODYgMy42ODYgMCAwIDAtLjM5NS0xLjA5OCAzLjY3NiAzLjY3NiAwIDAgMC0uNzI3LS45MSAzLjE4OSAzLjE4OSAwIDAgMC0xLjE5Ny0uNzE4Yy0uNDMtLjE0LS45ODMtLjIxLTEuNjQzLS4yMWgtMS4zM2wtLjM4LTEuOTU1YS4xNjEuMTYxIDAgMCAwLS4xNTgtLjEzSDUuMzA5WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNOC41NjYgMTAuNjE1aC45MDVjLjcyMiAwIC45NzItLjE1OCAxLjA1OC0uMjUzLjE0MS0uMTU3LjE2OC0uNDg3LjA3Ny0uOTU2LS4xMDItLjUyNC0uMjkxLS44OTYtLjU2My0xLjEwNS0uMjc3LS4yMTQtLjcyOS0uMzIyLTEuMzQxLS4zMjJoLS42NDhsLjUxMiAyLjYzNlptMS41NTEgMS44ODNINi44MzNhLjMyMy4zMjMgMCAwIDEtLjMxNy0uMjYxTDQuOTkyIDQuMzk2YS4zMjMuMzIzIDAgMCAxIC4zMTctLjM4NWgxLjcwOGMuMTU1IDAgLjI4Ny4xMS4zMTcuMjYybC4zNTQgMS44MjNoMS4xOTdjLjY3NyAwIDEuMjQ3LjA3NCAxLjY5NC4yMi40Ni4xNDkuODgyLjQwMiAxLjI1Ni43NTIuMzEuMjg0LjU2NC42MDQuNzU4Ljk1LjE5My4zNDUuMzMxLjczMS40MTIgMS4xNDYuMiAxLjAyNy4wMzggMS44NS0uNDgyIDIuNDQ2LS41MTUuNTktMS4zMjUuODg4LTIuNDA2Ljg4OFpNNy42NjMgNy42NTZoMS4wMzljLjY4OCAwIDEuMjAxLjEzIDEuNTM4LjM5LjMzNy4yNTkuNTY1LjY5Mi42ODMgMS4yOTkuMTEzLjU4My4wNjEuOTk0LS4xNTUgMS4yMzMtLjIxNi4yNC0uNjQ4LjM2LTEuMjk3LjM2SDguM2wtLjYzOC0zLjI4MlptMi40NTQgNC41MmMuOTg5IDAgMS43MS0uMjYgMi4xNjItLjc3OS40NTMtLjUxOC41OS0xLjI0Mi40MS0yLjE3MmEzLjUxIDMuNTEgMCAwIDAtLjM3OC0xLjA1IDMuNTAyIDMuNTAyIDAgMCAwLS42OTUtLjg3IDMuMDE3IDMuMDE3IDAgMCAwLTEuMTM3LS42ODNjLS40MTctLjEzNS0uOTQ4LS4yMDMtMS41OTQtLjIwM0g3LjQyMmwtLjQwNS0yLjA4NUg1LjMwOWwxLjUyNCA3Ljg0MWgzLjI4NFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTE2Ljc2MyA2LjI1N2EuMTYxLjE2MSAwIDAgMC0uMTU5LjE5MmwuNjc0IDMuNDdjLjA2NC4zMy4wNDkuNTY2LS4wNDQuNjY2LS4wNTcuMDYxLS4yMjguMTY0LS43MzIuMTY0SDE1LjI4bC0uODQ3LTQuMzYxYS4xNjEuMTYxIDAgMCAwLS4xNTktLjEzMUgxMi41OGEuMTYxLjE2MSAwIDAgMC0uMTU5LjE5MmwxLjUyNCA3Ljg0MWMuMDE1LjA3Ni4wODIuMTMuMTU5LjEzaDEuNjk0YS4xNjEuMTYxIDAgMCAwIC4xNTktLjE5MWwtLjM2OC0xLjg5M2gxLjMxNGMxIDAgMS42OC0uMTc2IDIuMDc1LS41NC40MDMtLjM3LjUyOS0uOTYyLjM3NC0xLjc2bC0uNzEtMy42NDhhLjE2MS4xNjEgMCAwIDAtLjE1OC0uMTMxaC0xLjcyMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTE1Ljc5OSAxNC41ODJoLTEuNjk1YS4zMjMuMzIzIDAgMCAxLS4zMTctLjI2MUwxMi4yNjMgNi40OGEuMzIzLjMyMyAwIDAgMSAuMzE3LS4zODVoMS42OTVjLjE1NCAwIC4yODcuMTEuMzE3LjI2MmwuODIyIDQuMjNoMS4wODhjLjUwNCAwIC42MS0uMTA3LjYxNC0uMTEyLjAzLS4wMzMuMDctLjE4NS4wMDQtLjUyNmwtLjY3NC0zLjQ3YS4zMjMuMzIzIDAgMCAxIC4zMTctLjM4NGgxLjcyMWMuMTU1IDAgLjI4OC4xMS4zMTcuMjYybC43MSAzLjY0OGMuMTY2Ljg1Ny4wMjMgMS41LS40MjQgMS45MS0uNDI2LjM5Mi0xLjE0LjU4Mi0yLjE4NC41ODJoLTEuMTE4bC4zMyAxLjdhLjMyMy4zMjMgMCAwIDEtLjMxNi4zODVtMC0uMzIzLS40MDYtMi4wODRoMS41MWMuOTUgMCAxLjYwNS0uMTY2IDEuOTY2LS40OTcuMzYtLjMzMi40NjgtLjg2OS4zMjQtMS42MTFsLS43MDktMy42NDloLTEuNzIxbC42NzQgMy40N2MuMDc3LjM5NC4wNDguNjYzLS4wODUuODA3LS4xMzMuMTQzLS40MTYuMjE1LS44NS4yMTVoLTEuMzU0bC0uODczLTQuNDkySDEyLjU4bDEuNTI0IDcuODQxaDEuNjk1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0yMi4wMzMgNy44MTdjLjY1IDAgMS4xMzQuMTIgMS40NC4zNTYuMzA0LjIzMy41MTMuNjM4LjYyMyAxLjIwMi4xMDMuNTI4LjA2NC44OTYtLjExNiAxLjA5NS0uMTgzLjIwMy0uNTguMzA2LTEuMTc3LjMwNmgtMS4wMzhsLS41NzUtMi45NTloLjg0M1ptLTMuMzkyLTMuNjQ1YS4xNjEuMTYxIDAgMCAwLS4xNTkuMTkzbDEuNTI0IDcuODRjLjAxNS4wNzYuMDgyLjEzMS4xNTkuMTMxaDMuMjg0YzEuMDMzIDAgMS44MDEtLjI4IDIuMjg0LS44MzMuNDg1LS41NTYuNjM1LTEuMzMzLjQ0Ni0yLjMwOWEzLjY4OSAzLjY4OSAwIDAgMC0uMzk1LTEuMDk4IDMuNjc2IDMuNjc2IDAgMCAwLS43MjctLjkxIDMuMTg5IDMuMTg5IDAgMCAwLTEuMTk3LS43MThjLS40My0uMTQtLjk4My0uMjEtMS42NDMtLjIxaC0xLjMzbC0uMzgtMS45NTVhLjE2MS4xNjEgMCAwIDAtLjE1OC0uMTNIMTguNjRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0yMS44OTggMTAuNjE1aC45MDVjLjcyMiAwIC45NzItLjE1OCAxLjA1OC0uMjUzLjE0MS0uMTU3LjE2OC0uNDg3LjA3Ny0uOTU2LS4xMDItLjUyNC0uMjkyLS44OTYtLjU2My0xLjEwNS0uMjc3LS4yMTQtLjcyOS0uMzIyLTEuMzQxLS4zMjJoLS42NDhsLjUxMiAyLjYzNlptMS41NTEgMS44ODNoLTMuMjg0YS4zMjMuMzIzIDAgMCAxLS4zMTctLjI2MWwtMS41MjQtNy44NDFhLjMyMy4zMjMgMCAwIDEgLjMxNy0uMzg1aDEuNzA4Yy4xNTUgMCAuMjg3LjExLjMxNy4yNjJsLjM1NCAxLjgyM2gxLjE5N2MuNjc3IDAgMS4yNDcuMDc0IDEuNjk0LjIyLjQ2LjE0OS44ODIuNDAyIDEuMjU2Ljc1Mi4zMS4yODQuNTY0LjYwNC43NTguOTUuMTkzLjM0NS4zMzEuNzMxLjQxMiAxLjE0Ni4yIDEuMDI3LjAzOCAxLjg1LS40ODIgMi40NDYtLjUxNS41OS0xLjMyNS44ODgtMi40MDYuODg4Wm0tMi40NTQtNC44NDJoMS4wMzljLjY4OCAwIDEuMjAxLjEzIDEuNTM4LjM5LjMzNy4yNTkuNTY1LjY5Mi42ODMgMS4yOTkuMTEzLjU4My4wNjEuOTk0LS4xNTUgMS4yMzMtLjIxNi4yNC0uNjQ4LjM2LTEuMjk3LjM2aC0xLjE3bC0uNjM4LTMuMjgyWm0yLjQ1NCA0LjUyYy45ODkgMCAxLjcxLS4yNiAyLjE2Mi0uNzc5LjQ1NC0uNTE4LjU5LTEuMjQyLjQxLTIuMTcyYTMuNTEgMy41MSAwIDAgMC0uMzc4LTEuMDUgMy41MDIgMy41MDIgMCAwIDAtLjY5NS0uODcgMy4wMTcgMy4wMTcgMCAwIDAtMS4xMzctLjY4M2MtLjQxNy0uMTM1LS45NDgtLjIwMy0xLjU5NC0uMjAzaC0xLjQ2M2wtLjQwNS0yLjA4NWgtMS43MDhsMS41MjQgNy44NDFoMy4yODRaXCJcbiAgfSkpKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29QaHA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1Bvc3RncmVzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Qb3N0Z3JlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0zMS44NzYgMTkuMTYyYy0uMTkyLS41NjQtLjY5NS0uOTU2LTEuMzQ1LTEuMDUtLjMwNi0uMDQ1LS42NTctLjAyNi0xLjA3Mi4wNTctLjcyNC4xNDUtMS4yNjEuMi0xLjY1NC4yMTEgMS40OC0yLjQyMiAyLjY4My01LjE4NSAzLjM3Ni03Ljc4NSAxLjEyLTQuMjA1LjUyMS02LjEyLS4xNzgtNi45ODctMS44NS0yLjI5My00LjU1MS0zLjUyNS03LjgwOS0zLjU2M2ExNC4yMzkgMTQuMjM5IDAgMCAwLTQuMDYuNTUxIDE1LjU3MyAxNS41NzMgMCAwIDAtMi4zNzMtLjIxYy0xLjU2Ny0uMDI0LTIuOTUyLjMwNy00LjEzNS45ODhhMTkuMzM0IDE5LjMzNCAwIDAgMC0yLjkyLS43MTFDNi44NS4yMDggNC41NDkuNTYzIDIuODY2IDEuNzE2LjgyOCAzLjExMi0uMTE3IDUuNTM3LjA1OCA4LjkyNi4xMTMgMTAgLjczNCAxMy4yNzMgMS43MSAxNi4zNzZjLjU2MSAxLjc4NCAxLjE2IDMuMjY2IDEuNzggNC40MDQuODc4IDEuNjE0IDEuODE4IDIuNTY0IDIuODczIDIuOTA2LjU5MS4xOSAxLjY2Ni4zMjUgMi43OTYtLjU4OC4xNDMuMTY4LjMzNC4zMzUuNTg4LjQ5LjMyMi4xOTguNzE2LjM1OSAxLjEwOS40NTQgMS40MTguMzQ0IDIuNzQ1LjI1OCAzLjg3OC0uMjI0LjAwNy4xOTUuMDEzLjM4Mi4wMTcuNTQzLjAwOC4yNjIuMDE1LjUxOC4wMjUuNzU4LjA2NyAxLjYyLjE4MSAyLjg4MS41MTggMy43NjNsLjA3LjIwMWMuMTY4LjUuNDQ5IDEuMzM1IDEuMTY0IDEuOTkuNzQuNjc3IDEuNjM3Ljg4NSAyLjQ1Ny44ODUuNDEyIDAgLjgwNC0uMDUyIDEuMTQ5LS4xMjQgMS4yMjctLjI1NSAyLjYyMS0uNjQzIDMuNjMtMi4wMzYuOTUzLTEuMzE2IDEuNDE3LTMuMjk5IDEuNS02LjQyM2wuMDMxLS4yNTMuMDItLjE2NS4yMjUuMDE5LjA1OC4wMDRjMS4yNS4wNTUgMi43NzktLjIwMiAzLjcxOC0uNjI1Ljc0MS0uMzM0IDMuMTE5LTEuNTUgMi41NTktMy4xOTRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzNjc5MVwiLFxuICAgIGQ6IFwiTTI5LjczOCAxOS40ODFjLTMuNzE3Ljc0NC0zLjk3My0uNDc2LTMuOTczLS40NzYgMy45MjUtNS42NDggNS41NjYtMTIuODE3IDQuMTUtMTQuNTcxQzI2LjA1Mi0uMzUyIDE5LjM2NSAxLjkxIDE5LjI1NCAxLjk3bC0uMDM2LjAwNmExMy42NTcgMTMuNjU3IDAgMCAwLTIuNDgtLjI1Yy0xLjY4Mi0uMDI3LTIuOTU4LjQyNy0zLjkyNyAxLjE0IDAgMC0xMS45MjgtNC43NjYtMTEuMzc0IDUuOTkyLjExOCAyLjI4OSAzLjM4MyAxNy4zMTggNy4yNzggMTIuNzc5YTcwLjQ0MyA3MC40NDMgMCAwIDEgMi43OTgtMy4wNjRjLjY4My40NCAxLjUwMS42NjUgMi4zNTguNTg0bC4wNjctLjA1NWMtLjAyLjIwNi0uMDExLjQwOC4wMjcuNjQ3LTEuMDA0IDEuMDg3LS43MDkgMS4yNzctMi43MTQgMS42NzgtMi4wMy40MDUtLjgzNyAxLjEyNy0uMDYgMS4zMTYuOTQ0LjIyOSAzLjEyNy41NTMgNC42MDItMS40NWwtLjA1OC4yM2MuMzkzLjMwNC42NjkgMS45ODUuNjIzIDMuNTA4LS4wNDcgMS41MjQtLjA3OCAyLjU3LjIzMiAzLjM4Ny4zMS44MTcuNjE5IDIuNjU1IDMuMjU1IDIuMTA3IDIuMjAzLS40NTggMy4zNDUtMS42NDQgMy41MDMtMy42MjMuMTEzLTEuNDA3LjM2OC0xLjE5OS4zODQtMi40NTdsLjIwNS0uNTk1Yy4yMzYtMS45MDcuMDM3LTIuNTIyIDEuMzk0LTIuMjM2bC4zMy4wMjhjMSAuMDQ0IDIuMzA3LS4xNTYgMy4wNzQtLjUwMiAxLjY1Mi0uNzQzIDIuNjMyLTEuOTg1IDEuMDAzLTEuNjU5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xMy41MSA5Ljg4MmMtLjMzNS0uMDQ1LS42MzktLjAwNC0uNzkyLjExYS4yOC4yOCAwIDAgMC0uMTIuMTg3Yy0uMDIuMTMzLjA3Ny4yODIuMTM2LjM1OC4xNjkuMjE2LjQxNC4zNjUuNjU4LjM5OC4wMzUuMDA0LjA3LjAwNy4xMDUuMDA3LjQwNSAwIC43NzQtLjMwNy44MDctLjUzMy4wNC0uMjgzLS4zODMtLjQ3Mi0uNzk1LS41MjdtMTEuMDk5LjAwOWMtLjAzMi0uMjIyLS40NC0uMjg1LS44MjYtLjIzMy0uMzg2LjA1Mi0uNzYuMjItLjczLjQ0My4wMjYuMTczLjM0OC40NjguNzMuNDY4YS43MTguNzE4IDAgMCAwIC4wOTctLjAwNi45NDcuOTQ3IDAgMCAwIC41My0uMjgxYy4xMzUtLjEzOC4yMTMtLjI5MS4xOTktLjM5MVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMzAuOTc1IDE5LjM5N2MtLjE0Mi0uNDE2LS41OTgtLjU1LTEuMzU2LS4zOTgtMi4yNS40NS0zLjA1Ni4xMzktMy4zMjEtLjA1IDEuNzUtMi41ODQgMy4xODktNS43MDggMy45NjUtOC42MjMuMzY4LTEuMzguNTctMi42NjMuNTg3LTMuNzA4LjAxOS0xLjE0Ny0uMTgzLTEuOTktLjU5OC0yLjUwNS0xLjY3NS0yLjA3NS00LjEzNC0zLjE4OS03LjExLTMuMjItMi4wNDctLjAyMi0zLjc3NS40ODYtNC4xMS42MjlhMTAuNTQ5IDEwLjU0OSAwIDAgMC0yLjMxMy0uMjg4Yy0xLjUzNi0uMDI0LTIuODY0LjMzMi0zLjk2MyAxLjA2YTE4LjEzMSAxOC4xMzEgMCAwIDAtMy4yMi0uODJjLTIuNjEtLjQwNy00LjY4My0uMDk4LTYuMTYzLjkxOEMxLjYwOCAzLjYwNS43OTMgNS43NzMuOTUxIDguODM2Yy4wNTMgMS4wMy42NTggNC4yIDEuNjE0IDcuMjM2IDEuMjU4IDMuOTk2IDIuNjI1IDYuMjU3IDQuMDYzIDYuNzIzLjE2OS4wNTQuMzYzLjA5Mi41NzcuMDkyLjUyNSAwIDEuMTY4LS4yMyAxLjgzOC0xLjAxYTY0Ljg5NCA2NC44OTQgMCAwIDEgMi41MzItMi43NzggNC4xOCA0LjE4IDAgMCAwIDEuODIyLjQ3NWwuMDA1LjA0OGMtLjExLjEyNy0uMjE3LjI1NS0uMzIxLjM4NS0uNDQuNTQyLS41MzIuNjU1LTEuOTUuOTM4LS40MDMuMDgtMS40NzMuMjk0LTEuNDg5IDEuMDIyLS4wMTcuNzk1IDEuMjY2IDEuMTMgMS40MTIgMS4xNjUuNTA5LjEyMyAxIC4xODQgMS40NjcuMTg0IDEuMTM4IDAgMi4xNC0uMzYzIDIuOTQtMS4wNjQtLjAyNSAyLjgzNC4wOTcgNS42MjguNDQ4IDYuNDc5LjI4OC42OTYuOTkgMi40IDMuMjA4IDIuMzk5YTUuMyA1LjMgMCAwIDAgMS4wNzgtLjExOWMyLjMxNS0uNDggMy4zMi0xLjQ3MyAzLjcxLTMuNjYuMjA4LTEuMTcuNTY1LTMuOTYxLjczMy01LjQ1OS4zNTQuMTA3LjgxLjE1NiAxLjMwNC4xNTYgMS4wMjkgMCAyLjIxNi0uMjEyIDIuOTYxLS41NDcuODM3LS4zNzcgMi4zNDYtMS4zIDIuMDcyLTIuMTA0Wk0yNS40NjIgOS4yNzhjLS4wMDguNDQyLS4wNy44NDQtLjEzNyAxLjI2Mi0uMDcyLjQ1MS0uMTQ1LjkxNy0uMTY0IDEuNDgyLS4wMTkuNTUuMDUyIDEuMTIzLjEyIDEuNjc2LjE0IDEuMTE4LjI4MiAyLjI2OC0uMjY5IDMuNDAzYTQuMzcgNC4zNyAwIDAgMS0uMjQzLS40ODVjLS4wNjktLjE2MS0uMjE3LS40Mi0uNDIzLS43NzctLjgtMS4zOS0yLjY3My00LjY0OC0xLjcxNC01Ljk3Ny4yODYtLjM5NiAxLjAxLS44MDMgMi44My0uNTg0Wm0tMi4yMDYtNy40OWMyLjY2Ny4wNTggNC43NzcgMS4wMjUgNi4yNyAyLjg3NiAxLjE0NiAxLjQyLS4xMTYgNy44NzktMy43NjcgMTMuNDVsLS4xMTEtLjEzNS0uMDQ2LS4wNTZjLjk0My0xLjUxLjc1OS0zLjAwNi41OTUtNC4zMzEtLjA2OC0uNTQ0LS4xMzItMS4wNTgtLjExNS0xLjU0MS4wMTYtLjUxMS4wODYtLjk1LjE1NC0xLjM3NS4wODItLjUyMi4xNjctMS4wNjMuMTQ0LTEuNzAxYS42ODQuNjg0IDAgMCAwIC4wMTUtLjI0Yy0uMDYtLjYxMS0uNzgtMi40NDEtMi4yNDctNC4wOThhMTAuMDk0IDEwLjA5NCAwIDAgMC0zLjU3Mi0yLjYwNCAxMi40MDcgMTIuNDA3IDAgMCAxIDIuNjgtLjI0NFpNOC4zMzQgMjEuMzA3Yy0uNzM3Ljg2LTEuMjQ2LjY5NS0xLjQxNC42NDEtMS4wOTEtLjM1My0yLjM1Ny0yLjU5LTMuNDc0LTYuMTM2LS45NjYtMy4wNjktMS41My02LjE1NS0xLjU3NS03LjAyLS4xNDEtMi43MzcuNTQzLTQuNjQ0IDIuMDMzLTUuNjY5IDIuNDI2LTEuNjY4IDYuNDE0LS42NyA4LjAxNi0uMTYzLS4wMjMuMDIyLS4wNDcuMDQyLS4wNy4wNjUtMi42MyAyLjU3NS0yLjU2NyA2Ljk3NC0yLjU2IDcuMjQzIDAgLjEwNC4wMDguMjUxLjAyLjQ1My4wNDYuNzQuMTMgMi4xMTctLjA5NSAzLjY3Ny0uMjA5IDEuNDUuMjUyIDIuODY4IDEuMjY0IDMuODkyLjEwNC4xMDUuMjEzLjIwNS4zMjcuMy0uNDUuNDY3LTEuNDMgMS41MDItMi40NzIgMi43MTdabTIuODEtMy42MzVjLS44MTYtLjgyNi0xLjE4Ni0xLjk3NC0xLjAxNy0zLjE1LjIzOC0xLjY0OC4xNS0zLjA4My4xMDMtMy44NTRsLS4wMTYtLjI3N2MuMzg0LS4zMyAyLjE2NS0xLjI1NSAzLjQzNC0uOTczLjU4LjEyOS45MzIuNTExIDEuMDggMS4xNy43NTkgMy40MDYuMSA0LjgyNS0uNDMgNS45NjYtLjEwOS4yMzUtLjIxMi40NTgtLjMuNjg3bC0uMDY4LjE3OGMtLjE3My40NS0uMzM0Ljg2Ny0uNDM0IDEuMjY0YTMuMzI1IDMuMzI1IDAgMCAxLTIuMzUyLTEuMDExWm0uMTMzIDQuNTk0YTIuMDcgMi4wNyAwIDAgMS0uNjE0LS4yNTZjLjExMS0uMDUxLjMxLS4xMi42NTQtLjE5IDEuNjY4LS4zMzIgMS45MjUtLjU2NyAyLjQ4Ny0xLjI2LjEzLS4xNTguMjc1LS4zMzguNDc4LS41NTcuMzAxLS4zMjguNDQtLjI3Mi42OS0uMTcyLjIwMi4wODIuNC4zMjguNDguNTk5LjAzNy4xMjguMDguMzctLjA2LjU2LTEuMTc0IDEuNTk1LTIuODg2IDEuNTc0LTQuMTE1IDEuMjc2Wm04LjcyNSA3Ljg3M2MtMi4wNC40MjQtMi43NjEtLjU4Ni0zLjIzNy0xLjc0LS4zMDgtLjc0NC0uNDU5LTQuMTAyLS4zNTEtNy44MWEuNDM0LjQzNCAwIDAgMC0uMDItLjE0MyAxLjgyMyAxLjgyMyAwIDAgMC0uMDU3LS4yNjJjLS4xNi0uNTQtLjU0OC0uOTktMS4wMTMtMS4xNzgtLjE4NS0uMDc0LS41MjUtLjIxLS45MzMtLjExLjA4Ny0uMzQ3LjIzOC0uNzQuNDAyLTEuMTY1bC4wNjgtLjE3OGMuMDc4LS4yMDIuMTc1LS40MS4yNzctLjYzMi41NTQtMS4xOTQgMS4zMTMtMi44MjkuNDktNi41MjItLjMwOS0xLjM4NC0xLjM0LTIuMDYtMi45MDEtMS45MDMtLjkzNi4wOTQtMS43OTMuNDYtMi4yMi42N2E3LjI1NSA3LjI1NSAwIDAgMC0uMjU1LjEzMmMuMTItMS4zOTQuNTctNCAyLjI1NS01LjY0NyAxLjA2Mi0xLjAzOCAyLjQ3NS0xLjU1IDQuMTk2LTEuNTIzIDMuMzkzLjA1NCA1LjU2OSAxLjc0MiA2Ljc5NiAzLjE1IDEuMDU4IDEuMjExIDEuNjMxIDIuNDMzIDEuODYgMy4wOTEtMS43Mi0uMTctMi44ODkuMTYtMy40ODIuOTgyLTEuMjkgMS43ODcuNzA2IDUuMjU3IDEuNjY1IDYuOTI0LjE3NS4zMDYuMzI3LjU3LjM3NS42ODIuMzEyLjczNC43MTYgMS4yMjQgMS4wMTIgMS41ODIuMDkuMTEuMTc4LjIxNS4yNDUuMzA4LS41MjEuMTQ2LTEuNDU2LjQ4Mi0xLjM3MSAyLjE2NC0uMDY5Ljg0My0uNTU4IDQuNzkzLS44MDYgNi4xODktLjMyOCAxLjg0My0xLjAyOCAyLjUzLTIuOTk1IDIuOTM5Wm04LjUxMy05LjQ0N2MtLjUzMi4yNC0xLjQyNC40Mi0yLjI3LjQ1OC0uOTM1LjA0My0xLjQxMS0uMTAxLTEuNTIzLS4xOS0uMDUzLTEuMDQ4LjM1LTEuMTU3Ljc3NS0xLjI3M2EzLjM1IDMuMzUgMCAwIDAgLjE5NS0uMDU4Yy4wNC4wMzEuMDgyLjA2Mi4xMy4wOTIuNzUuNDgxIDIuMDkxLjUzMyAzLjk4NC4xNTRsLjAyLS4wMDRjLS4yNTUuMjMyLS42OTIuNTQyLTEuMzEuODIxWlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Qb3N0Z3JlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvUHJvbWV0aGV1cyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvUHJvbWV0aGV1cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0U2NTIyQ1wiLFxuICAgIGQ6IFwiTTE1LjkwNy4xODdDNy4xMjIuMTg3IDAgNy4zMDggMCAxNi4wOTNTNy4xMjIgMzIgMTUuOTA3IDMyYzguNzg0IDAgMTUuOTA2LTcuMTIxIDE1LjkwNi0xNS45MDZTMjQuNjkuMTg3IDE1LjkwNy4xODdabTAgMjkuNzdjLTIuNSAwLTQuNTI2LTEuNjctNC41MjYtMy43MjloOS4wNTFjMCAyLjA2LTIuMDI2IDMuNzMtNC41MjUgMy43M1ptNy40NzUtNC45NjNIOC40M3YtMi43MTFoMTQuOTV2Mi43MVptLS4wNTQtNC4xMDdIOC40NzNjLS4wNS0uMDU3LS4xLS4xMTMtLjE0Ny0uMTctMS41My0xLjg1OS0xLjg5MS0yLjgyOS0yLjI0MS0zLjgxOC0uMDA2LS4wMzIgMS44NTUuMzggMy4xNzYuNjc4IDAgMCAuNjc5LjE1NyAxLjY3Mi4zMzgtLjk1My0xLjExOC0xLjUyLTIuNTM5LTEuNTItMy45OTEgMC0zLjE4OSAyLjQ0Ni01Ljk3NSAxLjU2NC04LjIyNy44NTguMDcgMS43NzcgMS44MTIgMS44MzkgNC41MzcuOTEzLTEuMjYyIDEuMjk1LTMuNTY2IDEuMjk1LTQuOTc4IDAtMS40NjMuOTYzLTMuMTYxIDEuOTI3LTMuMjItLjg2IDEuNDE3LjIyMyAyLjYzIDEuMTg0IDUuNjQyLjM2MSAxLjEzMi4zMTUgMy4wMzUuNTk0IDQuMjQzLjA5Mi0yLjUwOC41MjMtNi4xNjcgMi4xMTQtNy40My0uNzAyIDEuNTkxLjEwNCAzLjU4MS42NTUgNC41MzguODg5IDEuNTQ0IDEuNDI4IDIuNzE0IDEuNDI4IDQuOTI2IDAgMS40ODMtLjU0OCAyLjg4LTEuNDcyIDMuOTcxIDEuMDUtLjE5NyAxLjc3Ni0uMzc0IDEuNzc2LS4zNzRsMy40MTEtLjY2NnMtLjQ5NSAyLjAzOC0yLjQgNC4wMDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUHJvbWV0aGV1czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvUmFiYml0bXEgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1JhYmJpdG1xKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjYwXCIsXG4gICAgZDogXCJNMzAuMDgzIDEzLjE5N2gtOS44NzhjLS43OS0uMDg4LTEuMzkxLS43NC0xLjM5MS0xLjUwOFYxLjk3YzAtLjgzLS43MTgtMS40OTUtMS41OTUtMS40OTVoLTMuNDU2Yy0uODg1IDAtMS41OTUuNjcyLTEuNTk1IDEuNDk1djkuODJjLS4wNDMuNzQtLjY5NiAxLjMzOC0xLjQ3OCAxLjQwNkg4LjEwMmMtLjc2LS4wODgtMS4zNDgtLjY4Ni0xLjM5OC0xLjQwNlYxLjk3YzAtLjgzLS43MTgtMS40OTUtMS41OTUtMS40OTVIMS42NTJDLjc2OC40NzYuMDU4IDEuMTQ4LjA1OCAxLjk3djI4LjM1OGMwIC44My43MTcgMS40OTUgMS41OTQgMS40OTVoMjguNDM5Yy44ODQgMCAxLjU5NC0uNjczIDEuNTk0LTEuNDk1VjE0LjY5MmMtLjAwNy0uODI5LS43MTgtMS40OTUtMS42MDItMS40OTVabS00LjU1IDEwLjcyNGMwIC44MjktLjcxOCAxLjQ5NS0xLjU5NSAxLjQ5NUgyMC40OGMtLjg4NCAwLTEuNTk1LS42NzMtMS41OTUtMS40OTV2LTMuMDU4YzAtLjgzLjcxOC0xLjQ5NSAxLjU5NS0xLjQ5NWgzLjQ1N2MuODg0IDAgMS41OTQuNjcyIDEuNTk0IDEuNDk1djMuMDU4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1JhYmJpdG1xOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29SZWRpcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvUmVkaXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMylcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTQxRTExXCIsXG4gICAgZDogXCJNMzAuNTk0IDIwLjc5MWMtMS42ODkuODc1LTEwLjQzOCA0LjQ1MS0xMi4zIDUuNDE2LTEuODYzLjk2Ni0yLjg5OC45NTYtNC4zNy4yNTctMS40NzEtLjY5OS0xMC43ODItNC40MzctMTIuNDYtNS4yMzQtLjgzOC0uMzk5LTEuMjc4LS43MzUtMS4yNzgtMS4wNTJ2LTMuMThzMTIuMTIxLTIuNjIzIDE0LjA3OC0zLjMyYzEuOTU3LS42OTkgMi42MzYtLjcyNCA0LjMwMS0uMTE4IDEuNjY2LjYwNyAxMS42MjMgMi4zOTMgMTMuMjcgMi45OTJsLS4wMDEgMy4xMzVjMCAuMzE0LS4zOC42NTktMS4yNCAxLjEwNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Q4MkMyMFwiLFxuICAgIGQ6IFwiTTMwLjU5NCAxNy42MWMtMS42ODkuODc1LTEwLjQzOCA0LjQ1MS0xMi4zIDUuNDE3LTEuODYzLjk2NS0yLjg5OC45NTYtNC4zNy4yNTYtMS40NzEtLjY5OC0xMC43ODItNC40MzgtMTIuNDYtNS4yMzQtMS42NzYtLjc5Ny0xLjcxMi0xLjM0NS0uMDY0LTEuOTg3IDEuNjQ3LS42NDEgMTAuOTA3LTQuMjUyIDEyLjg2NC00Ljk1IDEuOTU3LS42OTggMi42MzYtLjcyMyA0LjMwMS0uMTE3IDEuNjY2LjYwNyAxMC4zNjMgNC4wNDggMTIuMDA5IDQuNjQ3IDEuNjQ2LjYgMS43MSAxLjA5My4wMiAxLjk2OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E0MUUxMVwiLFxuICAgIGQ6IFwiTTMwLjU5NCAxNS42MDZjLTEuNjg5Ljg3NS0xMC40MzggNC40NS0xMi4zIDUuNDE2LTEuODYzLjk2NS0yLjg5OC45NTYtNC4zNy4yNTctMS40NzEtLjctMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM1LS44MzgtLjM5OC0xLjI3OC0uNzM0LTEuMjc4LTEuMDUxdi0zLjE4UzEyLjMwNyA5LjE5IDE0LjI2NCA4LjQ5MmMxLjk1Ny0uNjk4IDIuNjM2LS43MjMgNC4zMDEtLjExNyAxLjY2Ni42MDYgMTEuNjIzIDIuMzkyIDEzLjI3IDIuOTkxbC0uMDAxIDMuMTM1YzAgLjMxNS0uMzguNjYtMS4yNCAxLjEwNXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Q4MkMyMFwiLFxuICAgIGQ6IFwiTTMwLjU5NCAxMi40MjVjLTEuNjg5Ljg3NS0xMC40MzggNC40NS0xMi4zIDUuNDE2LTEuODYzLjk2Ni0yLjg5OC45NTYtNC4zNy4yNTctMS40NzEtLjY5OS0xMC43ODItNC40MzgtMTIuNDYtNS4yMzUtMS42NzYtLjc5Ni0xLjcxMi0xLjM0NS0uMDY0LTEuOTg2IDEuNjQ3LS42NDEgMTAuOTA3LTQuMjUzIDEyLjg2NC00Ljk1IDEuOTU3LS42OTggMi42MzYtLjcyNCA0LjMwMS0uMTE3IDEuNjY2LjYwNiAxMC4zNjMgNC4wNDcgMTIuMDA5IDQuNjQ2IDEuNjQ2LjYgMS43MSAxLjA5NC4wMiAxLjk2OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E0MUUxMVwiLFxuICAgIGQ6IFwiTTMwLjU5NCAxMC4yMjhjLTEuNjg5Ljg3NS0xMC40MzggNC40NTEtMTIuMyA1LjQxNy0xLjg2My45NjUtMi44OTguOTU1LTQuMzcuMjU2LTEuNDcxLS42OTktMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM0Qy42MjcgMTAuMjY4LjE4NyA5LjkzMi4xODcgOS42MTV2LTMuMThzMTIuMTIxLTIuNjIzIDE0LjA3OC0zLjMyYzEuOTU3LS42OTkgMi42MzYtLjcyNCA0LjMwMS0uMTE3IDEuNjY2LjYwNiAxMS42MjMgMi4zOTEgMTMuMjcgMi45OWwtLjAwMSAzLjEzNmMwIC4zMTQtLjM4LjY1OS0xLjI0IDEuMTA0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRDgyQzIwXCIsXG4gICAgZDogXCJNMzAuNTk0IDcuMDQ3Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUxLTEyLjMgNS40MTctMS44NjMuOTY1LTIuODk4Ljk1NS00LjM3LjI1Ni0xLjQ3MS0uNjk5LTEwLjc4Mi00LjQzNy0xMi40Ni01LjIzNEMtLjIxMSA2LjY4OS0uMjQ3IDYuMTQgMS40IDUuNDk5UzEyLjMwNyAxLjI0NyAxNC4yNjQuNTVjMS45NTctLjcgMi42MzYtLjcyNCA0LjMwMS0uMTE4IDEuNjY2LjYwNyAxMC4zNjMgNC4wNDggMTIuMDA5IDQuNjQ3IDEuNjQ2LjYgMS43MSAxLjA5My4wMiAxLjk2OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwibTIwLjE1NyAzLjk4NS0yLjc0Mi4yODMtLjYxNCAxLjQ2OC0uOTkyLTEuNjM4LTMuMTY2LS4yODMgMi4zNjItLjg0Ny0uNzA4LTEuMyAyLjIxMi44NiAyLjA4NS0uNjgtLjU2MyAxLjM0NXptLTMuNTIgNy4xMjMtNS4xMTgtMi4xMSA3LjMzNC0xLjExOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcImVsbGlwc2VcIiwge1xuICAgIGN4OiA5LjU0MSxcbiAgICBjeTogNi4zMTEsXG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgcng6IDMuOTIsXG4gICAgcnk6IDEuNTFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM3QTBDMDBcIixcbiAgICBkOiBcIm0yMy4zOTggNC4zODYgNC4zNCAxLjcwNS00LjMzNiAxLjcwM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0FEMjExNVwiLFxuICAgIGQ6IFwibTE4LjU5NiA2LjI3NCA0LjgwMi0xLjg4OC4wMDQgMy40MDgtLjQ3MS4xODN6XCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1JlZGlzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29TZWN1cml0eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvU2VjdXJpdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQTc0NEVcIixcbiAgICBkOiBcIk05IDcuMDA4VjBoMjB2MTYuNzQ0YzAgMy45MTMtNi4zNzggNi40NzctOS4wMTUgNy4yNTZWNy4wMDhIOVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzFEQkFCMFwiLFxuICAgIGQ6IFwiTTMgMjAuMDczVjEwaDE0djIyQzcuNjY3IDI3Ljk4IDMgMjQuMDA0IDMgMjAuMDczWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMGg4djE0Yy0yLjk4My0xLjE0LTgtMy43NTYtOC03LjA0M1YxMFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2VjdXJpdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1NpdGVTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb1NpdGVTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiLFxuICAgIGQ6IFwiTTI3LjA1IDEwaC03LjM0bC0xMSAyMnMxNS42OTYtNC45NiAyMS44NTUtMTYuMDc2QzMyLjAzNyAxMy4yNjYgMzAuMDg4IDEwIDI3LjA1IDEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0yMS4zNTUgMEg3LjUzM0wuNDI3IDE0LjIxMUMtLjkwMyAxNi44NzEgMS4wMzIgMjAgNC4wMDQgMjBoNy4zNTFsMTAtMjBaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjUzMyAxMCAuNDI4IDE0LjIxMUMtLjkwMyAxNi44NzEgMS4wMzIgMjAgNC4wMDUgMjBoNy4zNWw1LTEwSDIuNTMzWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2l0ZVNlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvU2tldGNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Ta2V0Y2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZBRTAwXCIsXG4gICAgZDogXCJNMTYgMzIgMCAxMS40NTRsNi45MzEtMTAuMzhMMTYgMGw5LjA2OSAxLjA3NEwzMiAxMS40NTR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFQzZDMDBcIixcbiAgICBkOiBcIk0xNiAzMiAwIDExLjQ1NGgzMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGQUUwMFwiLFxuICAgIGQ6IFwiTTE2IDMyIDYuNDc3IDExLjQ1NGgxOS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkVGQjRcIixcbiAgICBkOiBcIk0xNiAwIDYuNDc3IDExLjQ1NGgxOS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkFFMDBcIixcbiAgICBkOiBcIk02LjkzMiAxLjA3NCAzLjM2OSA2LjMuMDAxIDExLjQ1NGg2LjU0MnpNMjUuMDY5IDEuMDc0IDI4LjYzMiA2LjMgMzIgMTEuNDU0aC02LjU0MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFRDMwNVwiLFxuICAgIGQ6IFwibTYuOTMxIDEuMDc0LS40NTMgMTAuMzhMMTYgMHpNMjUuMDY5IDEuMDc0bC40NTMgMTAuMzhMMTYgMHpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2tldGNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29TbGFjayA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvU2xhY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTAxRTVBXCIsXG4gICAgZDogXCJNNi44MTMgMjAuMThhMy4zMzcgMy4zMzcgMCAwIDEtMy4zMyAzLjMzIDMuMzM3IDMuMzM3IDAgMCAxLTMuMzI4LTMuMzMgMy4zMzcgMy4zMzcgMCAwIDEgMy4zMjktMy4zMjloMy4zMjl2My4zM3ptMS42NzcgMGEzLjMzNyAzLjMzNyAwIDAgMSAzLjMzLTMuMzI5IDMuMzM3IDMuMzM3IDAgMCAxIDMuMzI4IDMuMzN2OC4zMzVhMy4zMzcgMy4zMzcgMCAwIDEtMy4zMjkgMy4zMjkgMy4zMzcgMy4zMzcgMCAwIDEtMy4zMjktMy4zM1YyMC4xOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzM2QzVGMFwiLFxuICAgIGQ6IFwiTTExLjgyIDYuODEzYTMuMzM3IDMuMzM3IDAgMCAxLTMuMzMtMy4zM0EzLjMzNyAzLjMzNyAwIDAgMSAxMS44Mi4xNTZhMy4zMzcgMy4zMzcgMCAwIDEgMy4zMjggMy4zMjl2My4zMjlIMTEuODJ6bTAgMS42NzdhMy4zMzcgMy4zMzcgMCAwIDEgMy4zMjggMy4zMyAzLjMzNyAzLjMzNyAwIDAgMS0zLjMyOSAzLjMyOEgzLjQ4NGEzLjMzNyAzLjMzNyAwIDAgMS0zLjMzLTMuMzI5IDMuMzM3IDMuMzM3IDAgMCAxIDMuMzMtMy4zMjloOC4zMzV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMyRUI2N0RcIixcbiAgICBkOiBcIk0yNS4xODcgMTEuODJhMy4zMzcgMy4zMzcgMCAwIDEgMy4zMjktMy4zMyAzLjMzNyAzLjMzNyAwIDAgMSAzLjMyOSAzLjMzIDMuMzM3IDMuMzM3IDAgMCAxLTMuMzMgMy4zMjhoLTMuMzI4VjExLjgyem0tMS42NzggMGEzLjMzNyAzLjMzNyAwIDAgMS0zLjMyOSAzLjMyOCAzLjMzNyAzLjMzNyAwIDAgMS0zLjMyOS0zLjMyOVYzLjQ4NGEzLjMzNyAzLjMzNyAwIDAgMSAzLjMzLTMuMzMgMy4zMzcgMy4zMzcgMCAwIDEgMy4zMjggMy4zM3Y4LjMzNXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0VDQjIyRVwiLFxuICAgIGQ6IFwiTTIwLjE4IDI1LjE4N2EzLjMzNyAzLjMzNyAwIDAgMSAzLjMzIDMuMzI5IDMuMzM3IDMuMzM3IDAgMCAxLTMuMzMgMy4zMjkgMy4zMzcgMy4zMzcgMCAwIDEtMy4zMjktMy4zM3YtMy4zMjhoMy4zM3ptMC0xLjY3OGEzLjMzNyAzLjMzNyAwIDAgMS0zLjMyOS0zLjMyOSAzLjMzNyAzLjMzNyAwIDAgMSAzLjMzLTMuMzI5aDguMzM1YTMuMzM3IDMuMzM3IDAgMCAxIDMuMzI5IDMuMzMgMy4zMzcgMy4zMzcgMCAwIDEtMy4zMyAzLjMyOEgyMC4xOHpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2xhY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1VwdGltZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvVXB0aW1lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjM0VCRUIwXCIsXG4gICAgZDogXCJNMTkgMTVjMCA3LjA2Mi00Ljg4OCAxMi45NjktMTEuNDYgMTQuNTYzQTE1LjkxNCAxNS45MTQgMCAwIDAgMTYgMzJjOC44MzYgMCAxNi03LjE2MyAxNi0xNnYtM2wtNi41LTYtNi41IDZ2MlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzA3Q1wiLFxuICAgIGQ6IFwiTTYuODMzIDI2LjY0NmExMS45NTQgMTEuOTU0IDAgMCAwIDguNTQ0LTcuODM0QTEyLjQzIDEyLjQzIDAgMCAxIDEzIDExLjVWLjI5MkM1LjYgMS42OTYgMCA4LjE5IDAgMTYuMDAyYzAgNC4zNTggMS43NSA4LjMwNiA0LjU3NyAxMS4xOTJsMi4yNTYtLjU0N1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjM2MiAyMy4wMmMtMS40OTQuNjMtMy4xMzcuOTgtNC44NjEuOThhMTIuNDQzIDEyLjQ0MyAwIDAgMS03Ljg1Mi0yLjc4IDE1LjA0MiAxNS4wNDIgMCAwIDEtMTAuMTEgOC4zNDNBMTUuOTEgMTUuOTEgMCAwIDAgMTYuMDAyIDMyYzYuMzE0IDAgMTEuNzU4LTMuNjY5IDE0LjM2LTguOThcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvVXB0aW1lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0xMS4wNSAxLjk1IDYuODA4IDYuMTkyIDE2IDE1LjM4NWw5LjE5Mi05LjE5M0wyMC45NSAxLjk1IDE2IDYuOWwtNC45NS00Ljk1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkE3NDRFXCIsXG4gICAgZDogXCJNNC42ODYgMTkuNjI3YTggOCAwIDAgMSAwLTExLjMxM0wxNiAxOS42Mjd2MTEuMzE0TDQuNjg2IDE5LjYyN1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzM0Mzc0MVwiLFxuICAgIGQ6IFwiTTI3LjMxNCA4LjMxNGE4IDggMCAwIDEgMCAxMS4zMTNMMTYgMzAuOTQxVjE5LjYyN0wyNy4zMTQgOC4zMTRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1dlYmhvb2sgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1dlYmhvb2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQzczQTYzXCIsXG4gICAgZDogXCJNMTQuOTQzIDEzLjU2M2MtMS4zMjcgMi4yMy0yLjU5NyA0LjM4OC0zLjg5NCA2LjUzMS0uMzM0LjU1LS40OTguOTk4LS4yMzIgMS42OTguNzM0IDEuOTMxLS4zMDIgMy44MTEtMi4yNSA0LjMyMS0xLjgzNy40ODItMy42MjctLjcyNi0zLjk5Mi0yLjY5Mi0uMzIzLTEuNzQxIDEuMDI4LTMuNDQ4IDIuOTQ4LTMuNzIuMTYtLjAyMy4zMjUtLjAyNi41OTUtLjA0NmwyLjkyLTQuODk2QzkuMiAxMi45MzMgOC4xMDggMTAuOCA4LjM1IDguMTU0Yy4xNzEtMS44Ny45MDctMy40ODYgMi4yNS00LjgxYTcuNjM5IDcuNjM5IDAgMCAxIDkuNTMxLTFjMi45MSAxLjg3IDQuMjQ0IDUuNTEyIDMuMTA3IDguNjI5bC0yLjY2OC0uNzI0Yy4zNTctMS43MzMuMDkzLTMuMjktMS4wNzYtNC42MjMtLjc3Mi0uODgtMS43NjMtMS4zNDEtMi44OS0xLjUxMS0yLjI1OC0uMzQxLTQuNDc2IDEuMTEtNS4xMzQgMy4zMjctLjc0OCAyLjUxNi4zODMgNC41NzIgMy40NzMgNi4xMjFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0QjRCNEJcIixcbiAgICBkOiBcIm0xOC43MyAxMC45MjYgMi44MjMgNC45OGM0Ljc1My0xLjQ3IDguMzM2IDEuMTYgOS42MjIgMy45NzcgMS41NTIgMy40MDIuNDkxIDcuNDMyLTIuNTU4IDkuNTMxLTMuMTMgMi4xNTUtNy4wODkgMS43ODctOS44NjItLjk4MWwyLjE3Ni0xLjgyMWMyLjczOSAxLjc3NCA1LjEzNSAxLjY5IDYuOTEzLS40MWE0Ljc2NiA0Ljc2NiAwIDAgMC0uMDc3LTYuMjE5Yy0xLjgtMi4wMjUtNC4yMTMtMi4wODYtNy4xMy0uMTQzLTEuMjA5LTIuMTQ2LTIuNDQtNC4yNzUtMy42MS02LjQzNi0uMzk2LS43MjktLjgzMi0xLjE1Mi0xLjcyMi0xLjMwNi0xLjQ4Ny0uMjU3LTIuNDQ2LTEuNTM0LTIuNTA0LTIuOTY0YTMuMjU4IDMuMjU4IDAgMCAxIDIuMDgtMy4xOTIgMy4yNDMgMy4yNDMgMCAwIDEgMy42NzEgMS4wMDJjLjcxLjg5Ni45MzUgMS45MDUuNTYyIDMuMDEtLjEwNC4zMDktLjIzOC42MDctLjM4NC45NzJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0QTRBNEFcIixcbiAgICBkOiBcIk0yMC45NjMgMjQuNDAxaC01LjcyYy0uNTUgMi4yNTYtMS43MzQgNC4wNzctMy43NzUgNS4yMzUtMS41ODYuOS0zLjI5NiAxLjIwNS01LjExNi45MTFDMyAzMC4wMDcuMjYgMjYuOTkuMDE5IDIzLjU5M2MtLjI3My0zLjg0OCAyLjM3Mi03LjI2OCA1Ljg5OC04LjAzNmwuNzMyIDIuNjU4Yy0zLjIzNCAxLjY1LTQuMzUzIDMuNzMtMy40NDggNi4zMy43OTcgMi4yODcgMy4wNiAzLjU0MSA1LjUxOCAzLjA1NiAyLjUxLS40OTUgMy43NzYtMi41ODEgMy42MjEtNS45MjkgMi4zOCAwIDQuNzYxLS4wMjQgNy4xNC4wMTIuOTMuMDE1IDEuNjQ4LS4wODEgMi4zNDgtLjkgMS4xNTItMS4zNDkgMy4yNzMtMS4yMjcgNC41MTUuMDQ2IDEuMjY4IDEuMzAxIDEuMjA3IDMuMzk1LS4xMzUgNC42NDFhMy4yMzYgMy4yMzYgMCAwIDEtNC41NTMtLjE1N2MtLjI0OS0uMjY3LS40NDUtLjU4NS0uNjkyLS45MTNaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1dlYmhvb2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1dpbmRvd3MgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1dpbmRvd3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEFERUZcIixcbiAgICBkOiBcIm0wIDQuNTEgMTIuOTc3LTEuNzY4LjAwNiAxMi41MTgtMTIuOTcxLjA3NEwwIDQuNTFabTEyLjk3IDEyLjE5Mi4wMTEgMTIuNTI5LTEyLjk3LTEuNzg0LS4wMDItMTAuODI5IDEyLjk2Mi4wODRabTEuNTc0LTE0LjE5TDMxLjc1MSAwdjE1LjFsLTE3LjIwNy4xMzdWMi41MTFabTE3LjIxIDE0LjMwOC0uMDAzIDE1LjAzMy0xNy4yMDctMi40MjktLjAyNC0xMi42MzIgMTcuMjM1LjAyOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29XaW5kb3dzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb1dvcmtwbGFjZVNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGQ6IFwiTTE3LjU1NyA1LjA1Yy4xNy0uMjAyLjQ1Ny0uNTEyLjg2LS45M0MxOS40ODMgMy4wMTcgMjEuODI4IDEgMjMuODAxIDFIMzB2MzBoLTYuMmMtMS45NzIgMC0zLjk5NS0xLjQ0OS01LjM4My0zLjEwNmwtLjc2NC0xLjA1MiAyLjc1LTMuNDc3YzMuNDYyLTQuMzc2IDMuNDYzLTEwLjMzMi4wMDEtMTQuNzA3TDE3LjU1NyA1LjA1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA0RTk4XCIsXG4gICAgZDogXCJNMiAzMVYxaDUuODFjMS43MSAwIDMuMzUuNzg2IDQuMzg3IDIuMWw1Ljg1NSA3LjQyYzIuNTk4IDMuMjgzIDIuNTk4IDcuNjk4LS4wMDIgMTAuOTgzbC01Ljg1NSA3LjQwM0MxMS4xNTggMzAuMjE3IDkuNTIgMzEgNy44MTUgMzFIMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjM4NCAyNC44OSAxMi4xNSAyMS43Yy0yLjg2OC0zLjMxOC0yLjg2OC04LjIyLjAwMi0xMS4zMjIgMS41MzUtMS42MzkgMi42MTEtMi43MTggMy4yMy0zLjIzOGwyLjY3IDMuMjM4YzIuNjM3IDMuMzg1IDIuNTc1IDcuOTg3LS4wNjIgMTEuMzc0bC0yLjYwNyAzLjEzN1pcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ3N0YXNoRmlsdGVyID0gZnVuY3Rpb24gRXVpSWNvbkxvZ3N0YXNoRmlsdGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy45MTQgMWMtMy42IDAtNS44OTcgMS4xMTEtNS44OTcgMS44NzYgMCAuNzY2IDIuMjk3IDEuODc3IDUuODk3IDEuODc3czUuODk3LTEuMTExIDUuODk3LTEuODc3QzEzLjgxMSAyLjExMSAxMS41MTQgMSA3LjkxNCAxbTMuOTggNy45ODhjLTEuMTg3LjMzMS0yLjYwMS41MDItMy45OC41MDItMS4zODMgMC0yLjgwMS0uMTcyLTMuOTkxLS41MDVsMi44NjMgMy4yNDJ2Mi41MTVjLjEzNi4wOC41MTUuMjE0IDEuMTI4LjIxNC42MSAwIC45ODktLjEzMyAxLjEyNi0uMjEzdi0yLjUxNWwyLjg1NC0zLjI0Wm0yLjM5NC0xLjIwNi00LjI0OCA0LjgyM3YyLjI0NmguMDA0YzAgLjc2My0xLjA2OSAxLjEwNS0yLjEzIDEuMTA1LTEuMDYgMC0yLjEzLS4zNDItMi4xMy0xLjEwNWguMDAydi0yLjI0NUwxLjMyMSA3LjU1bC4wMS0uMDA4QTEuNTMgMS41MyAwIDAgMSAxIDYuNjA3VjIuNzhoLjAyQzEuMTQuOTczIDQuNjI3IDAgNy45MTMgMGMzLjI4NiAwIDYuNzc0Ljk3MyA2Ljg5NCAyLjc4aC4wMnYzLjgyN2MwIC4zNDMtLjEyLjY1Ny0uMzM1Ljk0MWwtLjAwMy4wMDRjLS4wNi4wNzktLjEyOC4xNTUtLjIwMi4yM1ptLS41NzgtLjg1NmEuNTYuNTYgMCAwIDAgLjExOC0uMzE5VjQuNDExYy0xLjI4OC44NzktMy42NDkgMS4zNDItNS45MTQgMS4zNDJDNS42NSA1Ljc1MyAzLjI4OCA1LjI5IDIgNC40MTF2Mi4xOTZDMiA3LjM3NSA0LjMwNCA4LjQ5IDcuOTE0IDguNDljMi44NzkgMCA0LjkyNy0uNzA5IDUuNjM5LTEuMzg1bC4xNTctLjE4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hGaWx0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nc3Rhc2hJZiA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaElmKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtNi45MTggOS43OTktNC44MiA0LjgxOSAyLjg4LS40My4xNDguOTg3TDAgMTUuOTQzbC43NjgtNS4xMjYuOTg4LjE0OC0uNDUzIDMuMDMzIDQuOTM2LTQuOTM1YTIuMDAzIDIuMDAzIDAgMCAxIDEuMjY1LTIuODg1VjBoMXY2LjE3OGEyLjAwMyAyLjAwMyAwIDAgMSAxLjI2MyAyLjg4NGw0Ljg2NSA0Ljg2Ni0uNDQzLTIuOTYzLjk4OC0uMTQ3Ljc2OCA1LjEyNi01LjEyNy0uNzY5LjE1LS45ODggMi45NS40NDEtNC44My00LjgzYy0uMzEyLjIwMy0uNjg1LjMyLTEuMDg1LjMyLS40IDAtLjc3My0uMTE3LTEuMDg1LS4zMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ3N0YXNoSWY7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nc3Rhc2hJbnB1dCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaElucHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS43NDcgMTAuOTkyaDEzLjFhLjEyMy4xMjMgMCAwIDAgLjEyMi0uMTIzVjguNTFhLjEyMi4xMjIgMCAwIDAtLjEyMi0uMTIySDEuMTIyQS4xMjIuMTIyIDAgMCAwIDEgOC41MXYyLjM2YzAgLjA2Ni4wNTUuMTIyLjEyMi4xMjJoLjYyNVptMTIuMDExIDFIMi4yMVYxNmgtMXYtNC4wMDhoLS4wODhBMS4xMjQgMS4xMjQgMCAwIDEgMCAxMC44N1Y4LjUxYzAtLjYyLjUwMy0xLjEyMiAxLjEyMi0xLjEyMmgxMy43MjVjLjYyIDAgMS4xMjIuNTAyIDEuMTIyIDEuMTIydjIuMzZjMCAuNjE4LS41MDMgMS4xMjItMS4xMjIgMS4xMjJoLS4wODlWMTZoLTF2LTQuMDA4Wm0tNi4yNy03LjQ4N1YwaDF2NC41MjlsMi40MDctMi4yNjIuNjg1LjczTDggNi4zNTYgNC40MiAyLjk5NWwuNjg1LS43MjkgMi4zODMgMi4yNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ3N0YXNoSW5wdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nc3Rhc2hPdXRwdXQgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hPdXRwdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjIxIDQuMDA4SDEzLjc2VjBoMXY0LjAwOGguMDg4Yy42MTkgMCAxLjEyMi41MDQgMS4xMjIgMS4xMjNWNy40OWMwIC42Mi0uNTAzIDEuMTIyLTEuMTIyIDEuMTIySDEuMTIyQTEuMTIyIDEuMTIyIDAgMCAxIDAgNy40OVY1LjEzYzAtLjYxOC41MDMtMS4xMjIgMS4xMjItMS4xMjJoLjA4OVYwaDF2NC4wMDhabTExLjU0OSAxSDEuMTJBLjEyMy4xMjMgMCAwIDAgMSA1LjEzVjcuNDljMCAuMDY4LjA1NS4xMjIuMTIyLjEyMmgxMy43MjVhLjEyMi4xMjIgMCAwIDAgLjEyMi0uMTIyVjUuMTNhLjEyMy4xMjMgMCAwIDAtLjEyMi0uMTIyaC0xLjA4OFptLTUuMzAxIDkuMDk3IDIuNDA1LTIuMjYuNjg2LjcyOC0zLjU4IDMuMzYzLTMuNTgtMy4zNjMuNjg2LS43MjggMi4zODMgMi4yNFY5LjU3N2gxdjQuNTI4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hPdXRwdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nc3Rhc2hRdWV1ZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaFF1ZXVlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMzM5IDE1LjQ2NEg0Ljc3YTMuMjQ4IDMuMjQ4IDAgMCAxLTMuMjQ1LTMuMjQ0VjQuNTQ5SDB2LTFoMi41MjZ2OC42N2EyLjI0NyAyLjI0NyAwIDAgMCAyLjI0NSAyLjI0NWg2LjU2OGEyLjI0NyAyLjI0NyAwIDAgMCAyLjI0NC0yLjI0NFYzLjU0OWgyLjQ1NXYxaC0xLjQ1NXY3LjY3YTMuMjQ3IDMuMjQ3IDAgMCAxLTMuMjQ0IDMuMjQ1Wm0uNTEzLTUuOTYydjEuMDk1bC0zLjg0OCAxLjcyLTMuODUtMS43MlY5LjUwMmwzLjg1IDEuNzIgMy44NDgtMS43MlptMC00LjI1MXYxLjA5NWwtMy44NDggMS43Mi0zLjg1LTEuNzJWNS4yNWwzLjg1IDEuNzIgMy44NDgtMS43MlptMC00LjI1MXYxLjA5NWwtMy44NDggMS43Mi0zLjg1LTEuNzJWMWwzLjg1IDEuNzJMMTEuODUyIDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dzdGFzaFF1ZXVlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1hZ25ldCA9IGZ1bmN0aW9uIEV1aUljb25NYWduZXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjU1MiAxMC43MWEzLjAwOCAzLjAwOCAwIDAgMCA0LjE5LjczOGwxLjY0Mi0xLjE1IDEuMTUgMS42NDItMS42NDMgMS4xNWE1LjAxMyA1LjAxMyAwIDEgMS01Ljc1LTguMjEybDEuNjQyLTEuMTUgMS4xNSAxLjY0My0xLjY0MiAxLjE1YTMuMDA3IDMuMDA3IDAgMCAwLS43MzkgNC4xODlabTguMjk2LTIuMTM3IDEuMTUgMS42NDMtMS42NDMgMS4xNDktMS4xNS0xLjY0MiAxLjY0My0xLjE1Wm0tNC42LTYuNTcxIDEuMTUgMS42NDMtMS42NDMgMS4xNS0xLjE1LTEuNjQyIDEuNjQyLTEuMTUxWm0xLjk3IDEuMDY4TDkuMDcgMS40MjhhMS4wMDMgMS4wMDMgMCAwIDAtMS4zOTctLjI0NkwzLjU2NiA0LjA1N0E1Ljk5NSA1Ljk5NSAwIDAgMCAxLjA5MiA3Ljk0YTUuOTkzIDUuOTkzIDAgMCAwIC45OTYgNC40OTUgNS45OSA1Ljk5IDAgMCAwIDMuODgzIDIuNDczIDUuOTkxIDUuOTkxIDAgMCAwIDQuNDk1LS45OTZsNC4xMDctMi44NzVjLjQ1NC0uMzE4LjU2My0uOTQzLjI0Ni0xLjM5NmwtMS4xNS0xLjY0M2ExLjAwMiAxLjAwMiAwIDAgMC0xLjM5Ni0uMjQ2bC00LjEwNyAyLjg3NWEyLjAwMiAyLjAwMiAwIDAgMS0xLjQ5OC4zMzIgMiAyIDAgMCAxLTEuNjI3LTIuMzIzYy4wOS0uNTA1LjM3MS0uOTc2LjgyNC0xLjI5NGw0LjEwNy0yLjg3NmMuNDU0LS4zMTcuNTY0LS45NDIuMjQ2LTEuMzk2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWFnbmV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb24gPSBmdW5jdGlvbiBFdWlJY29uTWFnbmlmeVdpdGhFeGNsYW1hdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTE1LjE0MyAxNS44NS0zLjg3Mi0zLjg3MmEuNS41IDAgMCAxLS4wMzQtLjczOCA2LjAxIDYuMDEgMCAwIDAgMC04LjQ4NiA2LjAwNCA2LjAwNCAwIDAgMC04LjQ4NCAwIDYuMDEgNi4wMSAwIDAgMCAwIDguNDg2IDUuOTYgNS45NiAwIDAgMCA0LjI0MiAxLjc1Ny41LjUgMCAwIDEgMCAxIDYuOTU1IDYuOTU1IDAgMCAxLTQuOTQ5LTIuMDVjLTIuNzI4LTIuNzMtMi43MjgtNy4xNzEgMC05LjkgMi43MjgtMi43MyA3LjE2OC0yLjczIDkuODk4IDAgMi42MDkgMi42MSAyLjcyMyA2Ljc4NS4zNDIgOS41MzJsMy41NjUgMy41NjRhLjUwMi41MDIgMCAwIDEtLjcwOC43MDhaTTYuMjU0IDNsLjI3NyA1LjA2M2guOTM1TDcuNzU0IDNoLTEuNVptLjIyMiA3LjU0OGEuNzI3LjcyNyAwIDAgMCAuNTMzLjIyMi43MTcuNzE3IDAgMCAwIC41Mi0uMjIuNzE1LjcxNSAwIDAgMCAuMjI1LS41My43MTYuNzE2IDAgMCAwLS4yMjItLjUzNC43MjQuNzI0IDAgMCAwLS41MjMtLjIxNi43MzEuNzMxIDAgMCAwLS41MzMuMjE5LjcxOS43MTkgMCAwIDAtLjIyMi41M2MwIC4yMDUuMDc0LjM4LjIyMi41MjlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1hZ25pZnlXaXRoTWludXMgPSBmdW5jdGlvbiBFdWlJY29uTWFnbmlmeVdpdGhNaW51cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA2YS41LjUgMCAwIDEgMCAxaC02YS41LjUgMCAwIDEgMC0xaDZabS43NCA0Ljc0YzAtLjExNy4wNC0uMjI1LjEwNy0uMzFBNS40NzggNS40NzggMCAwIDAgMTIgNi41IDUuNSA1LjUgMCAxIDAgNi41IDEyYS41LjUgMCAxIDEgMCAxIDYuNSA2LjUgMCAxIDEgNC45MzYtMi4yN2w0LjQxOSA0LjQxOGEuNS41IDAgMCAxLS43MDcuNzA3bC00Ljc2OC00Ljc2OGEuNDk5LjQ5OSAwIDAgMS0uMTQtLjM0N1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1hZ25pZnlXaXRoTWludXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWFnbmlmeVdpdGhQbHVzID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25pZnlXaXRoUGx1cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgNmgyLjVhLjUuNSAwIDAgMSAwIDFIN3YyLjVhLjUuNSAwIDAgMS0xIDBWN0gzLjVhLjUuNSAwIDAgMSAwLTFINlYzLjVhLjUuNSAwIDAgMSAxIDBWNlptMy4yNCA0Ljc0YzAtLjExNy4wNC0uMjI1LjEwNy0uMzFBNS40NzggNS40NzggMCAwIDAgMTIgNi41IDUuNSA1LjUgMCAxIDAgNi41IDEyYS41LjUgMCAxIDEgMCAxIDYuNSA2LjUgMCAxIDEgNC45MzYtMi4yN2w0LjQxOSA0LjQxOGEuNS41IDAgMCAxLS43MDcuNzA3bC00Ljc2OC00Ljc2OGEuNDk5LjQ5OSAwIDAgMS0uMTQtLjM0N1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1hZ25pZnlXaXRoUGx1czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NYXBNYXJrZXIgPSBmdW5jdGlvbiBFdWlJY29uTWFwTWFya2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41NSAxNC4yMjRhLjUwMi41MDIgMCAwIDAgLjg5NyAwbDQtOGEuNS41IDAgMCAwIC4wNTMtLjIzNSA0LjY3MiA0LjY3MiAwIDAgMC0uMDg0LS43MDUgNS41MzggNS41MzggMCAwIDAtLjUwNS0xLjUxMkMxMS4xODkgMi4zNjIgOS45MDYgMS41IDggMS41Yy0xLjkwNiAwLTMuMTkuODYyLTMuOTEgMi4yNzItLjI0OC40ODUtLjQxLjk5OC0uNTA2IDEuNTEyLS4wNTguMzEtLjA4LjU1NC0uMDg0LjcwNWEuNS41IDAgMCAwIC4wNTMuMjM1bDMuOTk3IDhaTTggNWExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJabS0zLjQ5My44OTVjLjAwOS0uMTA2LjAyNy0uMjUzLjA2LS40MjkuMDc5LS40MjQuMjEzLS44NDguNDEzLTEuMjM4QzUuNTM3IDMuMTM4IDYuNDg3IDIuNSA4IDIuNWMxLjUxMyAwIDIuNDYzLjYzOCAzLjAyIDEuNzI4LjIuMzkuMzM0LjgxNC40MTMgMS4yMzguMDMzLjE3Ni4wNTEuMzIzLjA2LjQzTDggMTIuODgxIDQuNTA3IDUuODk1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWFwTWFya2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1lbW9yeSA9IGZ1bmN0aW9uIEV1aUljb25NZW1vcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDEwaDJWNkg3ek0zIDEwaDJWNkgzek0xMS4wMjUgMTBoMlY2aC0yek0zLjUgMTMuNzVoMXYtMi40aC0xek02LjE3NSAxMy43NWgxLjAwMXYtMi40SDYuMTc1ek04Ljg1IDEzLjc1aDF2LTIuNGgtMXpNMTEuNTI1IDEzLjc1aDF2LTIuNGgtMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgM3Y3LjA1aDF2My42OThoMXYtMy42OTloMTJ2My42OTloMXYtMy42OTloMVYzSDBabTEgNmgxNFY0SDF2NVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbW9yeTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NZW51ID0gZnVuY3Rpb24gRXVpSWNvbk1lbnUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDJoMTZ2MkgwVjJabTAgNWgxNnYySDBWN1ptMTYgNUgwdjJoMTZ2LTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZW51OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1lbnVEb3duID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVEb3duKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA3LjVjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwIDEtLjQ4Ny0uNDEyTDMgNy41YzAtLjI3Ni4yMTYtLjUuNDk1LS41aDIuMDFjLjI0MyAwIC40NDUuMTgzLjQ4Ny40MTJMNiA3LjVaTTMuNTEgNGEuNTEzLjUxMyAwIDAgMS0uNTAyLS40MTJMMyAzLjVjMC0uMjc2LjIyOC0uNS41MS0uNWg4Ljk4Yy4yNSAwIC40NTkuMTgzLjUwMi40MTJMMTMgMy41YzAgLjI3Ni0uMjI4LjUtLjUxLjVIOC40OTN2Ny43OTJsMi4wNi0yLjA2YS41LjUgMCAxIDEgLjcwNy43MDdMOS4xNCAxMi41NkExLjQ5NiAxLjQ5NiAwIDAgMSA4LjAyNiAxM0w3Ljk5MyAxM2EuNTAxLjUwMSAwIDAgMS0uMTE4LS4wMTQgMS40OTMgMS40OTMgMCAwIDEtLjg1Ny0uNDI2bC0yLjEyMi0yLjEyYS41LjUgMCAwIDEgLjcwOC0uNzA4bDEuODg5IDEuODlWNEgzLjUxWk0xMyA3LjVjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwIDEtLjQ4Ny0uNDEyTDEwIDcuNWMwLS4yNzYuMjE2LS41LjQ5NS0uNWgyLjAxYy4yNDMgMCAuNDQ1LjE4My40ODcuNDEyTDEzIDcuNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVEb3duOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1lbnVMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS4wMTQgNy4zODJhLjUwMS41MDEgMCAwIDAtLjAxMy4xNTJjLS4wMTQuNC4xMzMuODA2LjQzOSAxLjExMmwyLjEyIDIuMTIyYS41LjUgMCAxIDAgLjcwOC0uNzA4TDIuMjA4IDhIMTQuNWEuNS41IDAgMCAwIDAtMUgyLjM3OWwxLjg4OS0xLjg5YS41LjUgMCAwIDAtLjcwNy0uNzA2TDEuNDQgNi41MjRjLS4yNDEuMjQyLS4zODMuNTQ0LS40MjYuODU4Wk0xNC41IDNoLTdhLjUuNSAwIDAgMCAwIDFoN2EuNS41IDAgMCAwIDAtMVptMCA4aC03YS41LjUgMCAxIDAgMCAxaDdhLjUuNSAwIDEgMCAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZW51TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NZW51UmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uTWVudVJpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuOTg2IDcuMzgyYS41MDEuNTAxIDAgMCAxIC4wMTMuMTUyYy4wMTQuNC0uMTMzLjgwNi0uNDM5IDEuMTEybC0yLjEyIDIuMTIyYS41LjUgMCAxIDEtLjcwOC0uNzA4TDEzLjc5MiA4SDEuNWEuNS41IDAgMCAxIDAtMWgxMi4xMjFsLTEuODg5LTEuODlhLjUuNSAwIDAgMSAuNzA3LS43MDZsMi4xMjEgMi4xMmMuMjQxLjI0Mi4zODMuNTQ0LjQyNi44NThaTTEuNSAzaDdhLjUuNSAwIDAgMSAwIDFoLTdhLjUuNSAwIDAgMSAwLTFabTAgOGg3YS41LjUgMCAxIDEgMCAxaC03YS41LjUgMCAxIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudVJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1lbnVVcCA9IGZ1bmN0aW9uIEV1aUljb25NZW51VXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4wMSA4LjVjMC0uMjc2LjIxNi0uNS40OTUtLjVoMi4wMWMuMjQzIDAgLjQ0NS4xODMuNDg3LjQxMmwuMDA4LjA4OGMwIC4yNzYtLjIxNi41LS40OTUuNWgtMi4wMWEuNTAzLjUwMyAwIDAgMS0uNDg3LS40MTJMMTAuMDEgOC41Wk0xMi41IDEyYy4yNSAwIC40NTkuMTgzLjUwMi40MTJsLjAwOC4wODhjMCAuMjc2LS4yMjguNS0uNTEuNUgzLjUyYS41MTMuNTEzIDAgMCAxLS41MDItLjQxMkwzLjAxIDEyLjVjMC0uMjc2LjIyOC0uNS41MS0uNWgzLjk4N1Y0LjIwOGwtMi4wNiAyLjA2YS41LjUgMCAxIDEtLjcwNy0uNzA3TDYuODYgMy40NEExLjQ5NiAxLjQ5NiAwIDAgMSA3Ljk3NCAzTDguMDA3IDNjLjA0IDAgLjA4LjAwNS4xMTguMDE0LjMxNC4wNDMuNjE2LjE4NS44NTcuNDI2bDIuMTIyIDIuMTJhLjUuNSAwIDAgMS0uNzA4LjcwOGwtMS44ODktMS44OVYxMkgxMi41Wk0zIDguNWMwLS4yNzYuMjE2LS41LjQ5NS0uNWgyLjAxYy4yNDMgMCAuNDQ1LjE4My40ODcuNDEyTDYgOC41YzAgLjI3Ni0uMjE2LjUtLjQ5NS41aC0yLjAxYS41MDMuNTAzIDAgMCAxLS40ODctLjQxMkwzIDguNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVVcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NZXJnZSA9IGZ1bmN0aW9uIEV1aUljb25NZXJnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMzUyIDZIMi41YS41LjUgMCAwIDEgMC0xaDQuODUyTDUuMTIgMi43MjFjLS4xOC0uMTgzLS4xNTUtLjQ2LjA1NS0uNjE2YS41NTEuNTUxIDAgMCAxIC43MDUuMDQ4bDMgMy4wNjJjLjE2LjE2NC4xNi40MDUgMCAuNTdsLTMgMy4wNjJBLjUzMi41MzIgMCAwIDEgNS41IDlhLjU0LjU0IDAgMCAxLS4zMjUtLjEwNmMtLjIxLS4xNTctLjIzNS0uNDMzLS4wNTUtLjYxNkw3LjM1MiA2Wm0xLjI5NiA0SDEzLjVhLjUuNSAwIDAgMSAwIDFIOC42NDhsMi4yMzIgMi4yNzhjLjE4LjE4My4xNTUuNDYtLjA1NS42MTdBLjU0LjU0IDAgMCAxIDEwLjUgMTRhLjUzMi41MzIgMCAwIDEtLjM4LS4xNTNsLTMtMy4wNjNhLjM5Ny4zOTcgMCAwIDEgMC0uNTY4bDMtMy4wNjNhLjU1MS41NTEgMCAwIDEgLjcwNS0uMDQ3Yy4yMS4xNTYuMjM1LjQzMy4wNTUuNjE2TDguNjQ4IDEwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVyZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWluaW1pemUgPSBmdW5jdGlvbiBFdWlJY29uTWluaW1pemUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xLjE0NiAxNC4xNDYgNC00YS41LjUgMCAwIDEgLjc2NS42MzhsLS4wNTcuMDctNCA0YS41LjUgMCAwIDEtLjc2NS0uNjM4bC4wNTctLjA3IDQtNC00IDRaTTYuNSA4QTEuNSAxLjUgMCAwIDEgOCA5LjV2M2EuNS41IDAgMSAxLTEgMHYtM2EuNS41IDAgMCAwLS41LS41aC0zYS41LjUgMCAwIDEgMC0xaDNabTItNWEuNS41IDAgMCAxIC41LjV2M2EuNS41IDAgMCAwIC41LjVoM2EuNS41IDAgMSAxIDAgMWgtM0ExLjUgMS41IDAgMCAxIDggNi41di0zYS41LjUgMCAwIDEgLjUtLjVabTEuNjUxIDIuMTQ2IDQtNGEuNS41IDAgMCAxIC43NjUuNjM4bC0uMDU3LjA3LTQgNGEuNS41IDAgMCAxLS43NjUtLjYzOGwuMDU3LS4wNyA0LTQtNCA0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWluaW1pemU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWludXMgPSBmdW5jdGlvbiBFdWlJY29uTWludXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJyZWN0XCIsIHtcbiAgICB3aWR0aDogMTAsXG4gICAgaGVpZ2h0OiAxLjUsXG4gICAgeDogMyxcbiAgICB5OiA3LjI1LFxuICAgIHJ4OiAwLjVcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NaW51czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NaW51c0luQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvbk1pbnVzSW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy41IDBDMTEuNjM2IDAgMTUgMy4zNjQgMTUgNy41UzExLjYzNiAxNSA3LjUgMTUgMCAxMS42MzYgMCA3LjUgMy4zNjQgMCA3LjUgMFptMCAuODgyYTYuNjE4IDYuNjE4IDAgMSAwIDAgMTMuMjM2QTYuNjE4IDYuNjE4IDAgMCAwIDcuNS44ODJaTTMuNSA3aDhhLjUuNSAwIDEgMSAwIDFoLThhLjUuNSAwIDAgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NaW51c0luQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1pbnVzSW5DaXJjbGVGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMEMxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwWm0tNCA3YS41LjUgMCAwIDAgMCAxaDhhLjUuNSAwIDEgMCAwLTFoLThaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NaW51c0luQ2lyY2xlRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1pbnVzSW5TcXVhcmUgPSBmdW5jdGlvbiBFdWlJY29uTWludXNJblNxdWFyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjYxMSA3SDQuMzljLS4yMTYgMC0uMzkuMjI0LS4zOS41cy4xNzQuNS4zODkuNWg2LjIyMmMuMjE1IDAgLjM4OS0uMjI0LjM4OS0uNXMtLjE3NC0uNS0uMzg5LS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEgM2EyIDIgMCAwIDEgMi0yaDlhMiAyIDAgMCAxIDIgMnY5YTIgMiAwIDAgMS0yIDJIM2EyIDIgMCAwIDEtMi0yVjNabTItMWg5YTEgMSAwIDAgMSAxIDF2OWExIDEgMCAwIDEtMSAxSDNhMSAxIDAgMCAxLTEtMVYzYTEgMSAwIDAgMSAxLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NaW51c0luU3F1YXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1sQ2xhc3NpZmljYXRpb25Kb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTZ2NWgyLjAzOGExMy4xNzkgMTMuMTc5IDAgMCAwIDAgMkg3djVINXYtNUgwdi0yaDV2LTVoMnpNNyAwdjVoNXYySDd2NUg1VjdIMFY1aDVWMGgyem0xNiAwdjVoNXYyaC01djIuMDM4YTEzLjE3OSAxMy4xNzkgMCAwIDAtMiAwVjdoLTVWNWg1VjBoMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDEwYzMuMDczIDAgNS44NzcgMS4xNTUgOCAzLjA1NnYzLjI1MkE5LjgyIDkuODIgMCAxIDAgMTYuMzA3IDMwaC0zLjI1MUExMS45NTUgMTEuOTU1IDAgMCAxIDEwIDIyYzAtNi42MjcgNS4zNzMtMTIgMTItMTJ6bTEgOHYzaDN2MmgtM3YzaC0ydi0zaC0zdi0yaDN2LTNoMnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NbENyZWF0ZUFkdmFuY2VkSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ3JlYXRlQWR2YW5jZWRKb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmgtMmMwLTcuNzMyLTYuMjY4LTE0LTE0LTE0UzIgOC4yNjggMiAxNnM2LjI2OCAxNCAxNCAxNHYyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcgMjB2MTJoLTJWMjBoMnptLTUgNHY4aC0ydi04aDJ6bTEwLTJ2MTBoLTJWMjJoMnpNMTcgOXY2aDZ2MmgtNnY2aC0ydi02SDl2LTJoNlY5aDJ6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlQWR2YW5jZWRKb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENyZWF0ZU11bHRpTWV0cmljSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAyNGE0IDQgMCAxIDEgMCA4IDQgNCAwIDAgMSAwLTh6bTI0IDBhNCA0IDAgMSAxIDAgOCA0IDQgMCAwIDEgMC04ek00IDI2YTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNHptMjQgMGEyIDIgMCAxIDAgMCA0IDIgMiAwIDAgMCAwLTR6TTE3IDl2Nmg2djJoLTZ2NmgtMnYtNkg5di0yaDZWOWgyek00IDBhNCA0IDAgMSAxIDAgOCA0IDQgMCAwIDEgMC04em0yNCAwYTQgNCAwIDEgMSAwIDggNCA0IDAgMCAxIDAtOHptMCAyYTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNHpNNCAyYTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuMDc4IDI5LjA1Yy4xMDIuNjc3LjMgMS4zMjIuNTgyIDEuOTJBMTUuOTYzIDE1Ljk2MyAwIDAgMSAxNiAzMmMtMS45OTMgMC0zLjktLjM2NC01LjY2LTEuMDMuMjgxLS41OTguNDgtMS4yNDMuNTgyLTEuOTIgMS41NzQuNjE0IDMuMjg3Ljk1IDUuMDc4Ljk1IDEuNzkxIDAgMy41MDQtLjMzNiA1LjA3OC0uOTV6bTkuODkyLTE4LjcxQTE1Ljk2MyAxNS45NjMgMCAwIDEgMzIgMTZjMCAxLjk5My0uMzY0IDMuOS0xLjAzIDUuNjZhNi45NDggNi45NDggMCAwIDAtMS45Mi0uNTgyYy42MTQtMS41NzQuOTUtMy4yODcuOTUtNS4wNzggMC0xLjc5MS0uMzM2LTMuNTA0LS45NS01LjA3OGE2Ljk0OCA2Ljk0OCAwIDAgMCAxLjkyLS41ODJ6bS0yOS45NCAwYy41OTguMjgxIDEuMjQzLjQ4IDEuOTIuNTgyQTEzLjk2NSAxMy45NjUgMCAwIDAgMiAxNmMwIDEuNzkxLjMzNiAzLjUwNC45NSA1LjA3OC0uNjc3LjEwMi0xLjMyMi4zLTEuOTIuNTgyQTE1Ljk2NCAxNS45NjQgMCAwIDEgMCAxNmMwLTEuOTkzLjM2NC0zLjkgMS4wMy01LjY2ek0xNiAwYzEuOTkzIDAgMy45LjM2NCA1LjY2IDEuMDNhNi45NDggNi45NDggMCAwIDAtLjU4MiAxLjkyQTEzLjk2NSAxMy45NjUgMCAwIDAgMTYgMmMtMS43OTEgMC0zLjUwNC4zMzYtNS4wNzguOTVhNi45NDggNi45NDggMCAwIDAtLjU4Mi0xLjkyQTE1Ljk2NCAxNS45NjQgMCAwIDEgMTYgMHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlTXVsdGlNZXRyaWNKb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ3JlYXRlUG9wdWxhdGlvbkpvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBjNS41MjMgMCAxMCA0LjQ3NyAxMCAxMHMtNC40NzcgMTAtMTAgMTBTNiAxNS41MjMgNiAxMCAxMC40NzcgMCAxNiAwem0wIDJhOCA4IDAgMSAwIDAgMTYgOCA4IDAgMCAwIDAtMTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjQgMTkuMjg4Yy40OTIuNDAyIDEuMDE1Ljc2NiAxLjU2NiAxLjA4N0w3LjI2IDIzLjY4MmE0IDQgMCAxIDEtMS40MzctMS4yNDNsMi41NzgtMy4xNTF6bTE1LjIgMCAyLjU3NyAzLjE1YTQgNCAwIDEgMS0xLjQzNyAxLjI0M2wtMi43MDYtMy4zMDZhMTIuMDMyIDEyLjAzMiAwIDAgMCAxLjU2NS0xLjA4N3pNNCAyNGEyIDIgMCAxIDAgMCA0IDIgMiAwIDAgMCAwLTR6bTI0IDBhMiAyIDAgMSAwIDAgNCAyIDIgMCAwIDAgMC00ek0xNyA2djNoM3YyaC0zdjNoLTJ2LTNoLTNWOWgzVjZoMnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1sQ3JlYXRlU2luZ2xlTWV0cmljSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ3JlYXRlU2luZ2xlTWV0cmljSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMzJDNy4xNjMgMzIgMCAyNC44MzcgMCAxNlM3LjE2MyAwIDE2IDBzMTYgNy4xNjMgMTYgMTZhMTYgMTYgMCAwIDEtMTYgMTZabTAtMzBDOC4yNjggMiAyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTQgMTQtNi4yNjggMTQtMTRBMTQgMTQgMCAwIDAgMTYgMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzIDE1aC02VjloLTJ2Nkg5djJoNnY2aDJ2LTZoNnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWxEYXRhVmlzdWFsaXplciA9IGZ1bmN0aW9uIEV1aUljb25NbERhdGFWaXN1YWxpemVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAyMHYxMGgxMHYySDBWMjBoMnptMzAgMHYxMkgyMHYtMmgxMFYyMGgyek0xMiA0YTggOCAwIDEgMSAwIDE2IDggOCAwIDAgMSAwLTE2em0wIDJhNiA2IDAgMSAwIDAgMTIgNiA2IDAgMCAwIDAtMTJ6bTAtNnYySDJ2MTBIMFYwaDEyem0yMCAwdjEyaC0yVjJIMjBWMGgxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjk5NyAxMi4yNTFjLS4wMTcuNjg5LS4xMDQgMS4zNi0uMjUzIDIuMDA2YTYgNiAwIDEgMS03LjQ4NyA3LjQ4N2MtLjY0Ni4xNS0xLjMxNy4yMzYtMi4wMDYuMjUzYTggOCAwIDEgMCA5Ljc0Ni05Ljc0NnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxEYXRhVmlzdWFsaXplcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NbE91dGxpZXJEZXRlY3Rpb25Kb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxPdXRsaWVyRGV0ZWN0aW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAxMnY2aDZ2Mkgwdi04aDJ6bTE4IDB2OGgtOHYtMmg2di02aDJ6TTggMHYySDJ2NkgwVjBoOHptMTIgMHY4aC0yVjJoLTZWMGg4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjRhNCA0IDAgMSAxIDAgOCA0IDQgMCAwIDEgMC04em0xMiAwYTQgNCAwIDEgMSAwIDggNCA0IDAgMCAxIDAtOHptLTEyIDEuNzVhMi4yNSAyLjI1IDAgMSAwIDAgNC41IDIuMjUgMi4yNSAwIDAgMCAwLTQuNXptMTIgMGEyLjI1IDIuMjUgMCAxIDAgMCA0LjUgMi4yNSAyLjI1IDAgMCAwIDAtNC41ek0yOCAxMmE0IDQgMCAxIDEgMCA4IDQgNCAwIDAgMSAwLTh6bTAgMS43NWEyLjI1IDIuMjUgMCAxIDAgMCA0LjUgMi4yNSAyLjI1IDAgMCAwIDAtNC41ek0xMCA2YTQgNCAwIDEgMSAwIDggNCA0IDAgMCAxIDAtOHptMCAxLjc1YTIuMjUgMi4yNSAwIDEgMCAwIDQuNSAyLjI1IDIuMjUgMCAwIDAgMC00LjV6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sT3V0bGllckRldGVjdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NbFJlZ3Jlc3Npb25Kb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxSZWdyZXNzaW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjQgMGE4IDggMCAxIDEtNC45MDYgMTQuMzJsLTQuNzc0IDQuNzc0YTggOCAwIDEgMS0xLjQxNC0xLjQxNGw0Ljc3NC00Ljc3NEE4IDggMCAwIDEgMjQgMHpNOCAxOGE2IDYgMCAxIDAgMCAxMiA2IDYgMCAwIDAgMC0xMnpNMjQgMmE2IDYgMCAxIDAgMCAxMiA2IDYgMCAwIDAgMC0xMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMyIDIwdjEySDIwVjIwaDEyem0tMiAyaC04djhoOHYtOHpNMTIgMHYxMkgwVjBoMTJ6bS0yIDJIMnY4aDhWMnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxSZWdyZXNzaW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1vYmlsZSA9IGZ1bmN0aW9uIEV1aUljb25Nb2JpbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDIuNWEuNS41IDAgMCAxIC41LS41aDNhLjUuNSAwIDAgMSAwIDFoLTNhLjUuNSAwIDAgMS0uNS0uNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjUgMEExLjUgMS41IDAgMCAwIDMgMS41djEzQTEuNSAxLjUgMCAwIDAgNC41IDE2aDdhMS41IDEuNSAwIDAgMCAxLjUtMS41di0xM0ExLjUgMS41IDAgMCAwIDExLjUgMGgtN1pNNCAxLjVhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgLjUuNVY0SDRWMS41Wk00IDEzdjEuNWEuNS41IDAgMCAwIC41LjVoN2EuNS41IDAgMCAwIC41LS41VjEzSDRabTAtMWg4VjVINHY3WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1vYmlsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Nb29uID0gZnVuY3Rpb24gRXVpSWNvbk1vb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04Ljc5NiA5LjA0OGMtMS41NTItMi4yMzgtMS4xOTktNS4zMjMuNjEtOC4xLTMuNDctLjEyLTYuNiAyLjIzMi03LjI2OSA1LjY3Mi0uNzQyIDMuODIgMS44MyA3LjUzMyA1Ljc0OSA4LjI5NGE3LjIyNiA3LjIyNiAwIDAgMCA3LjUyNi0zLjIxOGMtMi43OTQuMTc3LTUuMjctLjcxMS02LjYxNi0yLjY0OFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1vb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTW92ZSA9IGZ1bmN0aW9uIEV1aUljb25Nb3ZlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuODgzIDcuNjQ0YS41LjUgMCAwIDEgLjAwNi43MDdsLTEuOTg0IDIuMDE2YS41LjUgMCAwIDEtLjg1Ni0uMzQ3bC0uMDA5LTEuMDA0LTMuMDI0LjAyNFYxMmgxYS41LjUgMCAwIDEgLjM1NC44NTRsLTIgMmEuNS41IDAgMCAxLS43MDcgMGwtMi0yQS41LjUgMCAwIDEgNi4wMTYgMTJoMVY5LjA1N2wtMy4wMDguMDI0LjAwOC45OTVhLjUuNSAwIDAgMS0uODUuMzZMMS4xNDggOC40NTRhLjUuNSAwIDAgMS0uMDA1LS43MDdMMy4xMjcgNS43M2EuNS41IDAgMCAxIC44NTcuMzQ3bC4wMDggMS4wMDQgMy4wMjQtLjAyNVY0aC0xYS41LjUgMCAwIDEtLjM1My0uODU0bDItMmEuNS41IDAgMCAxIC43MDcgMGwyIDJhLjUuNSAwIDAgMS0uMzU0Ljg1NGgtMXYzLjA0bDMuMDA4LS4wMjQtLjAwOC0uOTk2YS41LjUgMCAwIDEgLjg1LS4zNmwyLjAxNyAxLjk4NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1vdmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTmFtZXNwYWNlID0gZnVuY3Rpb24gRXVpSWNvbk5hbWVzcGFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDFoMTR2MTRIMVYxem0xMyAxMnYxSDJWMmgxMnYxMXpNNiA2aDR2NEg2VjZ6bS0xIDVWNWg2djZINXpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25OYW1lc3BhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTmVzdGVkID0gZnVuY3Rpb24gRXVpSWNvbk5lc3RlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuNSAxYS41LjUgMCAwIDEgMCAxSDMuMDA2QzIuNDUgMiAyIDIuNDUgMiAzLjAwNnY5Ljk4OEMyIDEzLjU1IDIuNDUgMTQgMy4wMDYgMTRINS41YS41LjUgMCAxIDEgMCAxSDMuMDA2QTIuMDA1IDIuMDA1IDAgMCAxIDEgMTIuOTk0VjMuMDA2QzEgMS44OTggMS44OTcgMSAzLjAwNiAxSDUuNVptNy40OTQgMGMxLjA1OSAwIDEuOTI0LjgxOCAyIDEuODU2bC4wMDYuMTV2OS45ODhhMi4wMDUgMi4wMDUgMCAwIDEtMS44NTYgMmwtLjE1LjAwNkgxMC41YS41LjUgMCAwIDEtLjA5LS45OTJMMTAuNSAxNGgyLjQ5NGMuNTE2IDAgLjk0MS0uMzg4IDEtLjg4OGwuMDA2LS4xMThWMy4wMDZjMC0uNTE2LS4zODgtLjk0MS0uODg4LTFMMTIuOTk0IDJIMTAuNWEuNS41IDAgMCAxLS4wOS0uOTkyTDEwLjUgMWgyLjQ5NFpNNSA3YTEgMSAwIDEgMSAwIDIgMSAxIDAgMCAxIDAtMlptMyAwYTEgMSAwIDEgMSAwIDIgMSAxIDAgMCAxIDAtMlptMyAwYTEgMSAwIDEgMSAwIDIgMSAxIDAgMCAxIDAtMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk5lc3RlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25OZXdDaGF0ID0gZnVuY3Rpb24gRXVpSWNvbk5ld0NoYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDRhLjUuNSAwIDAgMSAuNS41VjZIMTBhLjUuNSAwIDAgMSAwIDFIOC41djEuNWEuNS41IDAgMCAxLTEgMFY3SDZhLjUuNSAwIDAgMSAwLTFoMS41VjQuNUEuNS41IDAgMCAxIDggNFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDRhMi41IDIuNSAwIDAgMSAyLjUtMi41aDlBMi41IDIuNSAwIDAgMSAxNSA0djVhMi41IDIuNSAwIDAgMS0yLjUgMi41SDcuNzA3TDQuNSAxNC43MDdWMTEuNWgtMUEyLjUgMi41IDAgMCAxIDEgOVY0Wm0yLjUtMS41QTEuNSAxLjUgMCAwIDAgMiA0djVhMS41IDEuNSAwIDAgMCAxLjUgMS41aDJ2MS43OTNMNy4yOTMgMTAuNUgxMi41QTEuNSAxLjUgMCAwIDAgMTQgOVY0YTEuNSAxLjUgMCAwIDAtMS41LTEuNWgtOVpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25OZXdDaGF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk5vZGUgPSBmdW5jdGlvbiBFdWlJY29uTm9kZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxLjQ0M2ExIDEgMCAwIDAtMSAwTDIuNTcyIDQuMjlhMSAxIDAgMCAwLS41Ljg2NnY1LjY5YTEgMSAwIDAgMCAuNS44NjZMNy41IDE0LjU1N2ExIDEgMCAwIDAgMSAwbDQuOTI4LTIuODQ2YTEgMSAwIDAgMCAuNS0uODY2di01LjY5YTEgMSAwIDAgMC0uNS0uODY2TDguNSAxLjQ0M1pNOSAuNTc3bDQuOTI4IDIuODQ2YTIgMiAwIDAgMSAxIDEuNzMydjUuNjlhMiAyIDAgMCAxLTEgMS43MzJMOSAxNS40MjNhMiAyIDAgMCAxLTIgMGwtNC45MjgtMi44NDZhMiAyIDAgMCAxLTEtMS43MzJ2LTUuNjlhMiAyIDAgMCAxIDEtMS43MzJMNyAuNTc3YTIgMiAwIDAgMSAyIDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ob2RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk51bWJlciA9IGZ1bmN0aW9uIEV1aUljb25OdW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy44MDggMTAuMTk3SDYuNzk2TDUuODU5IDEzSDQuNDg1bC45MzctMi44MDNIMy45NjZsLjIxOS0xLjI1aDEuNjQ3bC42MDgtMS44MDVINC45OTFsLjIyNi0xLjI1MWgxLjY0bC45NS0yLjg0NGgxLjM2OGwtLjk1IDIuODQ0aDEuMDE4bC45NS0yLjg0NGgxLjM3NGwtLjk1IDIuODQ0aDEuNTFsLS4yMTggMS4yNWgtMS43MDJsLS42MDggMS44MDVoMS40OTdsLS4yMTkgMS4yNTFIOS4xODJMOC4yNTIgMTNINi44NzhsLjkzLTIuODAzem0tLjYwMi0xLjI1aDEuMDEybC42MTUtMS44MDVINy44MTRsLS42MDggMS44MDR6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25OdW1iZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uT2ZmbGluZSA9IGZ1bmN0aW9uIEV1aUljb25PZmZsaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtNi41MTcgMTIuMjcxIDEuMjU0LTEuMjU0YTEuNSAxLjUgMCAxIDEtMS4yNTQgMS4yNTRabTIuOTQ1LTIuOTQ0Ljc0LS43NGMuMzYxLjIwOC42OTQuNDY3Ljk4Ny43NzJhLjUuNSAwIDAgMS0uNzIxLjY5MyAzLjQyNCAzLjQyNCAwIDAgMC0xLjAwNi0uNzI1Wm0yLjE2Mi0yLjE2My43MTYtLjcxNWMuMzA4LjIzMi41OTkuNDkuODcuNzcyYS41LjUgMCAxIDEtLjcyMi42OTIgNi4yNiA2LjI2IDAgMCAwLS44NjQtLjc0OVpNNy4wNjEgNi4wN0E2LjE5OCA2LjE5OCAwIDAgMCAzLjU0IDcuODg1YS41LjUgMCAwIDEtLjcxNy0uNjk3IDcuMTk5IDcuMTk5IDAgMCAxIDUuMzA5LTIuMTg3bC0xLjA3IDEuMDdabTYuNjcyLTEuMDE0LjcxLS43MWMuMjc0LjIzLjUzNi40NzYuNzg2LjczNmEuNS41IDAgMCAxLS43MjEuNjkyIDkuMSA5LjEgMCAwIDAtLjc3NS0uNzE4Wm0tMy44MDctMS44NUE5LjA2IDkuMDYgMCAwIDAgOCAzYTguOTkgOC45OSAwIDAgMC02LjQ2OSAyLjczNC41LjUgMCAxIDEtLjcxNy0uNjk3QTkuOTkgOS45OSAwIDAgMSA4IDJjLjk0NCAwIDEuODY4LjEzMSAyLjc1LjM4MmwtLjgyNC44MjRaTTggMTNhLjUuNSAwIDEgMCAwLTEgLjUuNSAwIDAgMCAwIDFabS01LjQyNCAxYS41LjUgMCAwIDEtLjcwNy0uNzA3TDE0LjE0NiAxLjE0NmEuNS41IDAgMCAxIC43MDguNzA4TDIuNTc2IDE0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uT2ZmbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25PbmxpbmUgPSBmdW5jdGlvbiBFdWlJY29uT25saW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNGExLjUgMS41IDAgMSAxIDAtMyAxLjUgMS41IDAgMCAxIDAgM1ptMC0xYS41LjUgMCAxIDAgMC0xIC41LjUgMCAwIDAgMCAxWm0zLjE4OS0zLjY0YS41LjUgMCAwIDEtLjcyMS42OTJBMy40MDggMy40MDggMCAwIDAgOCA5Yy0uOTM3IDAtMS44MTMuMzc4LTIuNDUzIDEuMDM3YS41LjUgMCAwIDEtLjcxNy0uNjk3QTQuNDA4IDQuNDA4IDAgMCAxIDggOGMxLjIyIDAgMi4zNjEuNDk3IDMuMTg5IDEuMzZabTIuMDItMi4xNGEuNS41IDAgMSAxLS43MjEuNjkzQTYuMiA2LjIgMCAwIDAgOCA2YTYuMTk5IDYuMTk5IDAgMCAwLTQuNDYgMS44ODUuNS41IDAgMCAxLS43MTgtLjY5N0E3LjE5OSA3LjE5OSAwIDAgMSA4IDVhNy4yIDcuMiAwIDAgMSA1LjIxIDIuMjJabTIuMDItMi4xMzhhLjUuNSAwIDAgMS0uNzIxLjY5MkE4Ljk5IDguOTkgMCAwIDAgOCAzYTguOTkgOC45OSAwIDAgMC02LjQ2OSAyLjczNC41LjUgMCAxIDEtLjcxNy0uNjk3QTkuOTkgOS45OSAwIDAgMSA4IDJhOS45OSA5Ljk5IDAgMCAxIDcuMjMgMy4wODJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25PbmxpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGFja2FnZSA9IGZ1bmN0aW9uIEV1aUljb25QYWNrYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTQuNDQ3IDMuNzI0LTYtM2ExIDEgMCAwIDAtLjg5NCAwbC02IDNBMSAxIDAgMCAwIDEgNC42MTh2Ni43NjRhMSAxIDAgMCAwIC41NTMuODk0bDYgM2ExIDEgMCAwIDAgLjg5NCAwbDYtM2ExIDEgMCAwIDAgLjU1My0uODk0VjQuNjE4YTEgMSAwIDAgMC0uNTUzLS44OTRaTTUuODcxIDUuODk3bDUuMzQzLTIuNjcyIDIuMTU4IDEuMDc5TDggNi45NDNaTTggMS42MThsMi4wOTYgMS4wNDgtNS4zNTMgMi42NzctMi4xMTUtMS4wMzlaTTIgNS4xMWwyLjI1IDEuMTA1VjlhLjUuNSAwIDAgMCAxIDBWNi43MDZMNy41IDcuODExdjYuMzIxTDIgMTEuMzgyWm02LjUgOS4wMjJ2LTYuMzJMMTQgNS4xMXY2LjI3MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhY2thZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGFnZVNlbGVjdCA9IGZ1bmN0aW9uIEV1aUljb25QYWdlU2VsZWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMgMWExIDEgMCAwIDAtMSAxdjEyYTEgMSAwIDAgMCAxIDFoNWE0Ljk5NSA0Ljk5NSAwIDAgMS0uNTg0LTFIM1YyaDd2MmExIDEgMCAwIDAgMSAxaDJ2Mi4xYy4zNDguMDcuNjgyLjE3NyAxIC4zMTZWNGExIDEgMCAwIDAtLjI5My0uNzA3bC0yLTJBMSAxIDAgMCAwIDExIDFIM3ptMTMgMTFhNCA0IDAgMSAxLTggMCA0IDQgMCAwIDEgOCAwem0tMS42NDYtMS4zNTRhLjUuNSAwIDAgMSAwIC43MDhsLTIuNSAyLjVhLjUuNSAwIDAgMS0uNzA4IDBsLTEtMWEuNS41IDAgMCAxIC43MDgtLjcwOGwuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMCAxIC43MDggMHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhZ2VTZWxlY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGFnZXNTZWxlY3QgPSBmdW5jdGlvbiBFdWlJY29uUGFnZXNTZWxlY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyAxYTEgMSAwIDAgMSAxLTFoOGExIDEgMCAwIDEgLjcwNy4yOTNsMiAyQTEgMSAwIDAgMSAxNSAzdjVhNC45OTUgNC45OTUgMCAwIDAtMS0uNTg0VjRoLTJhMSAxIDAgMCAxLTEtMVYxSDR2MTJoMy4xYy4wNy4zNDguMTc3LjY4Mi4zMTYgMUg0YTEgMSAwIDAgMS0xLTFWMXptNSAxNEgyVjJhMSAxIDAgMCAwLTEgMXYxMmExIDEgMCAwIDAgMSAxaDdhNS4wMjkgNS4wMjkgMCAwIDEtMS0xem04LTNhNCA0IDAgMSAxLTggMCA0IDQgMCAwIDEgOCAwem0tMS42NDYtMS4zNTRhLjUuNSAwIDAgMSAwIC43MDhsLTIuNSAyLjVhLjUuNSAwIDAgMS0uNzA4IDBsLTEtMWEuNS41IDAgMCAxIC43MDgtLjcwOGwuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMCAxIC43MDggMHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhZ2VzU2VsZWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBhaW50ID0gZnVuY3Rpb24gRXVpSWNvblBhaW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTkzIDguMTdjMCAuODMtLjY3MyAxLjUwNy0xLjQ5OSAxLjUwN0g1LjQ5OEExLjUwNSAxLjUwNSAwIDAgMSAzLjk5OSA4LjE3VjYuNjYyaDcuOTk0VjguMTdabS0yLjk5OCA1Ljk5OGMwIC40NTUtLjQ0OC44MjctLjk5OS44MjctLjU1IDAtMS0uMzcyLTEtLjgyN3YtMy40ODZoMnYzLjQ4NlpNNCA1LjY1OGgxLjI2MlYxLjAwNUg0djQuNjUzWm0yLjI2MSAwaDEuMjQ0VjEuMDA1SDYuMjZ2NC42NTNabTIuMjQ0IDBoMS4yMzVWMS4wMDVIOC41MDR2NC42NTNabTIuMjM0IDBoMS4yNTRWMS4wMDVoLTEuMjU0djQuNjUzWk0zLjAwOCAwIDMgOC4xN2EyLjUwOSAyLjUwOSAwIDAgMCAyLjQ5OCAyLjUxMmguNXYzLjQ4NmMwIDEuMDEuODk2IDEuODMyIDEuOTk4IDEuODMyIDEuMTAyIDAgMS45OTgtLjgyMiAxLjk5OC0xLjgzMnYtMy40ODZoLjVhMi41MDkgMi41MDkgMCAwIDAgMi40OTgtMi41MTJMMTMgMEgzLjAwOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhaW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBhbGV0dGUgPSBmdW5jdGlvbiBFdWlJY29uUGFsZXR0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgOWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTIgMmExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBaTTUgNmExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTQtMmExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBabTIgMmExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDFhNyA3IDAgMCAwIDAgMTRoMmEyIDIgMCAxIDAgMC00IDEgMSAwIDEgMSAwLTJoMy45OEMxNC41MTUgOSAxNSA4LjU4MyAxNSA4YTcgNyAwIDAgMC03LTdaTTIgOGE2IDYgMCAwIDEgMTItLjAwNS4wMzUuMDM1IDAgMCAxLS4wMi4wMDVIMTBhMiAyIDAgMSAwIDAgNCAxIDEgMCAxIDEgMCAySDhhNiA2IDAgMCAxLTYtNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhbGV0dGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGFwZXJDbGlwID0gZnVuY3Rpb24gRXVpSWNvblBhcGVyQ2xpcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuODQgMi4wMTkgMy4wNDYgOC41N2MtLjk4Ny45NTItMS4xMzMgMi41MTctLjE5OSAzLjUxNi45NTEgMS4wMjEgMi41OCAxLjEwNiAzLjY0LjE5LjAzNC0uMDMuMDY4LS4wNjEuMS0uMDkybDUuNjU1LTUuNDUyYS40ODQuNDg0IDAgMCAwIDAtLjcwMy41My41MyAwIDAgMC0uNzI5IDBMNS45MiAxMS40MjFjLS41NzIuNTUxLTEuNTA1LjY1Ny0yLjEzMS4xNjNhMS40NTUgMS40NTUgMCAwIDEtLjExOC0yLjIxMWw2Ljg5OS02LjY1MWEyLjY0NiAyLjY0NiAwIDAgMSAzLjY0NCAwIDIuNDIyIDIuNDIyIDAgMCAxIDAgMy41MTNMNy4zIDEyLjkwMWMtMS4zMzMgMS4yODUtMy40OTcgMS40OTMtNC45NS4zMzYtMS41NC0xLjIyLTEuNzY0LTMuNDExLS41LTQuODk3YTMuMzMgMy4zMyAwIDAgMSAuMjM4LS4yNTJsNS43OC01LjU3MmEuNDg0LjQ4NCAwIDAgMCAwLS43MDMuNTMuNTMgMCAwIDAtLjczIDBsLTUuNzggNS41NzJhNC4zNiA0LjM2IDAgMCAwIDAgNi4zMjRjMi4xODggMi4xMDkgNS4yMDIgMS4zMSA2LjY2LS4wOTVsNi45MjUtNi42NzZhMy4zOSAzLjM5IDAgMCAwIDAtNC45MkMxMy41MzQuNjYgMTEuMjUuNjYgOS44NDEgMi4wMTl6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYXBlckNsaXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGFydGlhbCA9IGZ1bmN0aW9uIEV1aUljb25QYXJ0aWFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi42NjQgMTQuODcxYTcgNyAwIDAgMS0yLjQyLTEyLjc3OC41LjUgMCAwIDEgLjYxMi4wNmMuNDU2LjQzMSA4LjIxNiA4LjIxMiA4Ljk4IDkuMDAyYS41LjUgMCAwIDEgLjA2My42MTggNy4wMDIgNy4wMDIgMCAwIDEtNy4yMzUgMy4wOThabTYuMTY4LTMuMzEyYTE5NjEuNzMzIDE5NjEuNzMzIDAgMCAwLTguMzc3LTguNCA2IDYgMCAxIDAgOC4zNzggOC40Wm0yLjA5NS0yLjU0OGEuNS41IDAgMSAxLS45OS0uMTQ0Yy4wMS0uMDY2LjAxLS4wNjYuMDE4LS4xMzNhNi4wMDcgNi4wMDcgMCAwIDAtLjAzNC0xLjcxNC41LjUgMCAxIDEgLjk4Ny0uMTYzYy4xMDguNjU1LjEyMiAxLjMyNi4wNCAxLjk5OWwtLjAyMS4xNTVabS0xLjI3My01LjEzOGEuNS41IDAgMSAxLS44MDguNTkgNi4wMjYgNi4wMjYgMCAwIDAtMS4zMDQtMS4zMDguNS41IDAgMCAxIC41OS0uODA2IDcuMDI2IDcuMDI2IDAgMCAxIDEuNTIyIDEuNTI0Wk05LjE2OSAxLjA5OGEuNS41IDAgMSAxLS4xNjYuOTg2IDYuMTA1IDYuMTA1IDAgMCAwLTEuODQ5LS4wMjYuNS41IDAgMCAxLS4xNC0uOTkgNy4wMiA3LjAyIDAgMCAxIDIuMTU1LjAzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFydGlhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QYXVzZSA9IGZ1bmN0aW9uIEV1aUljb25QYXVzZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMmExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDEgMCAyIDBWM2ExIDEgMCAwIDAtMS0xem02IDBhMSAxIDAgMCAwLTEgMXYxMGExIDEgMCAxIDAgMiAwVjNhMSAxIDAgMCAwLTEtMXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhdXNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBheW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uUGF5bWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41ODYgMi41ODZBMiAyIDAgMCAwIDAgNGgxYTEgMSAwIDAgMSAxLTFWMmEyIDIgMCAwIDAtMS40MTQuNTg2Wk0yIDJoMTAuNWEuNS41IDAgMCAxIDAgMUgyVjJaTTAgNGgxdjYuNWEuNS41IDAgMCAxLTEgMFY0Wm0yLjU4Ni41ODZBMiAyIDAgMCAwIDIgNmgxYTEgMSAwIDAgMSAxLTFWNGEyIDIgMCAwIDAtMS40MTQuNTg2Wm0wIDguODI4QTIgMiAwIDAgMSAyIDEyaDFhMSAxIDAgMCAwIDEgMXYxYTIgMiAwIDAgMS0xLjQxNC0uNTg2Wm0xMi44MjgtOC44MjhBMiAyIDAgMCAxIDE2IDZoLTFhMSAxIDAgMCAwLTEtMVY0YTIgMiAwIDAgMSAxLjQxNC41ODZabTAgOC44MjhBMiAyIDAgMCAwIDE2IDEyaC0xYTEgMSAwIDAgMS0xIDF2MWEyIDIgMCAwIDAgMS40MTQtLjU4NlpNNCA0aDEwdjFINHpNMyA3aDEydjFIM3ptMSA2aDEwdjFINHpNMiA2aDF2Nkgyem0xMyAwaDF2NmgtMXptLTUuNSA0YS41LjUgMCAwIDEgMCAxSDcuNDk2YS41LjUgMCAwIDEgMC0xSDkuNVptNCAwYS41LjUgMCAwIDEgMCAxaC0yLjAwNGEuNS41IDAgMCAxIDAtMUgxMy41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGF5bWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QZW5jaWwgPSBmdW5jdGlvbiBFdWlJY29uUGVuY2lsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuMTQ4IDMuMTQ4IDExIDJsLTkgOXYzaDNsOS05LTEuMTQ0LTEuMTQ0LTguMDAyIDcuOTk4YS41MDIuNTAyIDAgMCAxLS43MDggMCAuNTAyLjUwMiAwIDAgMSAwLS43MDhsOC4wMDItNy45OThaTTExIDFjLjI1NiAwIC41MTIuMDk4LjcwNy4yOTNsMyAzYS45OTkuOTk5IDAgMCAxIDAgMS40MTRsLTkgOUEuOTk3Ljk5NyAwIDAgMSA1IDE1SDJhMSAxIDAgMCAxLTEtMXYtM2MwLS4yNjUuMTA1LS41Mi4yOTMtLjcwN2w5LTlBLjk5Ny45OTcgMCAwIDEgMTEgMVpNNSAxNEgydi0zbDMgM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBlbmNpbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QZXJjZW50ID0gZnVuY3Rpb24gRXVpSWNvblBlcmNlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNSA4YzEuMTA1IDAgMi0xLjEyIDItMi41UzYuMTA1IDMgNSAzIDMgNC4xMiAzIDUuNSAzLjg5NSA4IDUgOHptMC0xYy4zNTYgMCAxLS40NTIgMS0xLjVTNS4zNTYgNCA1IDRzLTEgLjQ1Mi0xIDEuNVM0LjY0NCA3IDUgN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjUgM0gxMkw1LjUgMTNINGw2LjUtMTB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMgMTAuNWMwIDEuMzgtLjg5NSAyLjUtMiAyLjVzLTItMS4xMi0yLTIuNVM5Ljg5NSA4IDExIDhzMiAxLjEyIDIgMi41em0tMSAwYzAgMS4wNDgtLjY0NCAxLjUtMSAxLjVzLTEtLjQ1Mi0xLTEuNS42NDQtMS41IDEtMS41IDEgLjQ1MiAxIDEuNXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBlcmNlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGluID0gZnVuY3Rpb24gRXVpSWNvblBpbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDExaDQuNWEuNS41IDAgMSAwIDAtMWgtMTBhLjUuNSAwIDAgMCAwIDFIN3Y0LjI1YzAgLjQxNC4yMjQuNzUuNS43NXMuNS0uMzM2LjUtLjc1VjExWk00IDRoMXY2SDRWNFptNiAwaDF2NmgtMVY0Wk00LjI4NiAyQzQuMDggMiA0IDIuMDYzIDQgMnYxYzAtLjA2My4wOCAwIC4yODYgMGg2LjQyOEMxMC45MiAzIDExIDIuOTM3IDExIDNWMmMwIC4wNjMtLjA4IDAtLjI4NiAwSDQuMjg2Wm0wLTFoNi40MjhDMTEuNDI0IDEgMTIgMS40NDggMTIgMnYxYzAgLjU1Mi0uNTc2IDEtMS4yODYgMUg0LjI4NkMzLjU3NiA0IDMgMy41NTIgMyAzVjJjMC0uNTUyLjU3Ni0xIDEuMjg2LTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QaW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGluRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblBpbkZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTFoNC41YS41LjUgMCAxIDAgMC0xaC0xMGEuNS41IDAgMSAwIDAgMUg4djQuMjVjMCAuNDE0LjIyNC43NS41Ljc1cy41LS4zMzYuNS0uNzVWMTFaTTUgNGg3djZINVY0Wm0uMjg2LTNoNi40MjhDMTIuNDI0IDEgMTMgMS40NDggMTMgMnYxYzAgLjU1Mi0uNTc2IDEtMS4yODYgMUg1LjI4NkM0LjU3NiA0IDQgMy41NTIgNCAzVjJjMC0uNTUyLjU3Ni0xIDEuMjg2LTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QaW5GaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGlwZUJyZWFrcyA9IGZ1bmN0aW9uIEV1aUljb25QaXBlQnJlYWtzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAzaDkuNWEyLjUgMi41IDAgMCAxIDAgNUg2djFMNCA3LjUgNiA2djFoNS41YTEuNSAxLjUgMCAwIDAgMC0zSDJWM1ptMSAzSDJ2M2gxVjZabTAgNEgydjNoMXYtM1ptMyAwLTIgMS41TDYgMTN2LTFoNS41YTIuNSAyLjUgMCAwIDAgMi4xNjUtMy43NSAzLjQ5NyAzLjQ5NyAwIDAgMS0uODY1LjVBMS41IDEuNSAwIDAgMSAxMS41IDExSDZ2LTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QaXBlQnJlYWtzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBpcGVOb0JyZWFrcyA9IGZ1bmN0aW9uIEV1aUljb25QaXBlTm9CcmVha3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDJIN3YzaDFWNGgzVjNIOFYyWm0tNSA4SDJ2M2gxdi0xaDN2LTFIM3YtMVptNCAwaDF2MWgzdjFIOHYxSDd2LTNabTYgMGgtMXYzaDF2LTFoMXYtMWgtMXYtMVpNNSA2aDF2MWgzdjFINnYxSDVWNlptNiAwaC0xdjNoMVY4aDNWN2gtM1Y2Wm0xLTRoMXYxaDF2MWgtMXYxaC0xVjJaTTYgM0gydjFoNFYzWk0yIDdoMnYxSDJWN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBpcGVOb0JyZWFrczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QaXZvdCA9IGZ1bmN0aW9uIEV1aUljb25QaXZvdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yLjg5IDEzLjg0NyAxMS4yMzkgNS41YS41MjIuNTIyIDAgMCAwLS43MzctLjczN0wyLjE1NCAxMy4xMWEuNTIyLjUyMiAwIDAgMCAuNzM4LjczOFpNMTQgNi42OTZhLjUyMi41MjIgMCAxIDEtMS4wNDMgMHYtMy4xM2EuNTIyLjUyMiAwIDAgMC0uNTIyLS41MjNoLTMuMTNhLjUyMi41MjIgMCAxIDEgMC0xLjA0M2gzLjEzQzEzLjI5OSAyIDE0IDIuNyAxNCAzLjU2NXYzLjEzWlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBpdm90OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBsYXkgPSBmdW5jdGlvbiBFdWlJY29uUGxheShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNjA4IDMuMDYzQzQuMzQ1IDIuODk1IDQgMy4wODkgNCAzLjQxOHY5LjE2N2MwIC4zMjkuMzQ1LjUyMy42MDguMzU2bDcuMi00LjU4NGEuNDI2LjQyNiAwIDAgMCAwLS43MTFsLTcuMi00LjU4M1ptLjUzOC0uODQ0IDcuMiA0LjU4M2ExLjQyNiAxLjQyNiAwIDAgMSAwIDIuMzk5bC03LjIgNC41ODNDNC4yMSAxNC4zOCAzIDEzLjY5NiAzIDEyLjU4NVYzLjQxOEMzIDIuMzA3IDQuMjEgMS42MjQgNS4xNDYgMi4yMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsYXk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGxheUZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25QbGF5RmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTIuMzQ1IDYuODAxLTcuMi00LjU4MUM0LjIxIDEuNjI1IDMgMi4zMDggMyAzLjQxOXY5LjE2MmMwIDEuMTExIDEuMjEgMS43OTQgMi4xNDYgMS4xOTlsNy4yLTQuNTgxYTEuNDI1IDEuNDI1IDAgMCAwIDAtMi4zOTh6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbGF5RmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBsdXMgPSBmdW5jdGlvbiBFdWlJY29uUGx1cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMjUgM2EuNS41IDAgMCAxIC41LjV2My43NWgzLjc1YS41LjUgMCAwIDEgLjUuNXYuNWEuNS41IDAgMCAxLS41LjVIOC43NXYzLjc1YS41LjUgMCAwIDEtLjUuNWgtLjVhLjUuNSAwIDAgMS0uNS0uNVY4Ljc1SDMuNWEuNS41IDAgMCAxLS41LS41di0uNWEuNS41IDAgMCAxIC41LS41aDMuNzVWMy41YS41LjUgMCAwIDEgLjUtLjVoLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBsdXNJbkNpcmNsZSA9IGZ1bmN0aW9uIEV1aUljb25QbHVzSW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCA3aDMuNWEuNS41IDAgMSAxIDAgMUg4djMuNWEuNS41IDAgMSAxLTEgMFY4SDMuNWEuNS41IDAgMCAxIDAtMUg3VjMuNWEuNS41IDAgMCAxIDEgMFY3Wm0tLjUtN0MxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwWm0wIC44ODJhNi42MTggNi42MTggMCAxIDAgMCAxMy4yMzZBNi42MTggNi42MTggMCAwIDAgNy41Ljg4MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsdXNJbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QbHVzSW5DaXJjbGVGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uUGx1c0luQ2lyY2xlRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA3VjMuNWEuNS41IDAgMCAwLTEgMFY3SDMuNWEuNS41IDAgMCAwIDAgMUg3djMuNWEuNS41IDAgMSAwIDEgMFY4aDMuNWEuNS41IDAgMSAwIDAtMUg4Wm0tLjUgOGE3LjUgNy41IDAgMSAxIDAtMTUgNy41IDcuNSAwIDAgMSAwIDE1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGx1c0luQ2lyY2xlRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBsdXNJblNxdWFyZSA9IGZ1bmN0aW9uIEV1aUljb25QbHVzSW5TcXVhcmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDQuMzg5VjdoMi42MTFjLjIxNSAwIC4zODkuMjI0LjM4OS41cy0uMTc0LjUtLjM4OS41SDh2Mi42MTFjMCAuMjE1LS4yMjQuMzg5LS41LjM4OXMtLjUtLjE3NC0uNS0uMzg5VjhINC4zODlDNC4xNzQgOCA0IDcuNzc2IDQgNy41cy4xNzQtLjUuMzg5LS41SDdWNC4zODlDNyA0LjE3NCA3LjIyNCA0IDcuNSA0cy41LjE3NC41LjM4OVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDNhMiAyIDAgMCAxIDItMmg5YTIgMiAwIDAgMSAyIDJ2OWEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlYzWm0yLTFoOWExIDEgMCAwIDEgMSAxdjlhMSAxIDAgMCAxLTEgMUgzYTEgMSAwIDAgMS0xLTFWM2ExIDEgMCAwIDEgMS0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGx1c0luU3F1YXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBvcG91dCA9IGZ1bmN0aW9uIEV1aUljb25Qb3BvdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA4LjVhLjUuNSAwIDEgMSAxIDBWMTJhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDMuNWEuNS41IDAgMCAxIDAgMUg0YTEgMSAwIDAgMC0xIDF2OGExIDEgMCAwIDAgMSAxaDhhMSAxIDAgMCAwIDEtMVY4LjVabS01LjEyLjMzOWEuNS41IDAgMSAxLS43MDYtLjcwN0wxMy4zMDUgMkgxMC41YS41LjUgMCAxIDEgMC0xSDE0YTEgMSAwIDAgMSAxIDF2My41YS41LjUgMCAxIDEtMSAwVjIuNzJMNy44OCA4LjgzOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBvcG91dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QdXNoID0gZnVuY3Rpb24gRXVpSWNvblB1c2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjE3MSA1LjE1IDEwLjExNCA3SDEuNTU2QzEuMjQ5IDcgMSA3LjIyNCAxIDcuNXMuMjQ5LjUuNTU2LjVoOC41MjZsLTEuOTEgMS44MmEuNTIuNTIgMCAwIDAgMCAuNzdjLjIyNy4yMTMuNi4yMTMuODI4IDBsMi4wNS0xLjk1YTEuNTUyIDEuNTUyIDAgMCAwIDAtMi4zMUw5IDQuMzhhLjYxNy42MTcgMCAwIDAtLjgyOSAwIC41Mi41MiAwIDAgMCAwIC43N3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuODA0IDEyLjc5MkEuOTkzLjk5MyAwIDAgMSA2IDExLjgyVjEwSDV2MS44MjZjMCAuOTQ1LjY3MyAxLjc2IDEuNjA4IDEuOTQ1bDYgMS4xOUExLjk5MiAxLjk5MiAwIDAgMCAxNSAxMy4wMTZWMS45ODRBMiAyIDAgMCAwIDEyLjYwOC4wNGwtNiAxLjE5QzUuNjczIDEuNDE1IDUgMi4yMyA1IDMuMTc1VjVoMVYzLjE4YzAtLjQ3Mi4zMzYtLjg3OS44MDQtLjk3Mmw2LTEuMTg5QTEgMSAwIDAgMSAxNCAxLjk5MXYxMS4wMThhLjk5NS45OTUgMCAwIDEtMS4xOTYuOTcybC02LTEuMTl6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QdXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uUXVlc3Rpb25JbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTRBNiA2IDAgMSAxIDggMmE2IDYgMCAwIDEgMCAxMlptMC0xQTUgNSAwIDEgMCA4IDNhNSA1IDAgMCAwIDAgMTBabS0uMTg2LTEuMDY1QS43ODUuNzg1IDAgMCAxIDcgMTEuMTJjMC0uNDguMzQtLjgyLjgxNC0uODIuNDc1IDAgLjgwOS4zNC44MDkuODIgMCAuNDc1LS4zMzQuODE1LS44MDkuODE1Wk01LjkgNi4zMTdDNS45NiA1LjE2OCA2Ljc1NSA0LjQgOC4wNDggNC40YzEuMjE4IDAgMi4wOTEuNzU5IDIuMDkxIDEuOCAwIC43MzYtLjM2IDEuMzA0LTEuMDMgMS43MDctLjU2LjMzLS43MTcuNTYtLjcxNyAxLjAyMnYuMzA1bC0uMS4xSDcuNDdsLS4xLS4xdi0uNDMxYy0uMDA1LS42NDYuMzAyLTEuMTA0Ljk4Ny0xLjUxNC41MjctLjMyMi43MDgtLjU5LjcwOC0xLjA0NyAwLS41MzYtLjQxNi0uOTEtMS4wNS0uOTEtLjY1MiAwLTEuMDY0LjM3NC0xLjExMi45OThsLS4xLjA5Mkg2bC0uMS0uMTA1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUXVlc3Rpb25JbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25RdW90ZSA9IGZ1bmN0aW9uIEV1aUljb25RdW90ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuODQ4IDIuNDdhMSAxIDAgMCAxLS4zMTggMS4zNzhBNy4yODQgNy4yODQgMCAwIDAgMy43NSA3LjAxIDMgMyAwIDEgMSAxIDEwdi0uMDI3YTMuNTIxIDMuNTIxIDAgMCAxIC4wMS0uMjMyYy4wMDktLjE1LjAyNy0uMzYuMDYyLS42MTguMDctLjUxMy4yMDctMS4yMi40ODQtMi4wMTQuNTUyLTEuNTkgMS42Ny0zLjU1NSAzLjkxNC00Ljk1N2ExIDEgMCAwIDEgMS4zNzguMzE4em03IDBhMSAxIDAgMCAxLS4zMTggMS4zNzggNy4yODMgNy4yODMgMCAwIDAtMi43OCAzLjE2MkEzIDMgMCAxIDEgOCAxMHYtLjAyN2EzLjUyMSAzLjUyMSAwIDAgMSAuMDEtLjIzMmMuMDA5LS4xNS4wMjctLjM2LjA2Mi0uNjE4LjA3LS41MTMuMjA3LTEuMjIuNDg0LTIuMDE0LjU1Mi0xLjU5IDEuNjctMy41NTUgMy45MTQtNC45NTdhMSAxIDAgMCAxIDEuMzc4LjMxOHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblF1b3RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblJlZnJlc2ggPSBmdW5jdGlvbiBFdWlJY29uUmVmcmVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjIyOCAyLjk0MmEuNS41IDAgMSAxLS41MzguODQyQTUgNSAwIDEgMCAxMyA4YS41LjUgMCAxIDEgMSAwIDYgNiAwIDEgMS0yLjc3Mi01LjA1OFpNMTQgMS41djNBMS41IDEuNSAwIDAgMSAxMi41IDZoLTNhLjUuNSAwIDAgMSAwLTFoM2EuNS41IDAgMCAwIC41LS41di0zYS41LjUgMCAxIDEgMSAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUmVmcmVzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25SZXBvcnRlciA9IGZ1bmN0aW9uIEV1aUljb25SZXBvcnRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjY4NC44OTUgNi4wNzQuMzU4YTEgMSAwIDAgMC0xLjI5Ni43NTNMNC4yIDRIMi41YS41LjUgMCAwIDAgMCAxaDEuNjI2YTQuMDA3IDQuMDA3IDAgMCAwIC4xMSAyLjM1OWwtMi4wNzItLjM0NUExIDEgMCAwIDAgMSA4djFjLjM2NCAwIC43MDYuMDk3IDEgLjI2OFY4bDEgLjE2NyAxLjg1OS4zMSAyLjE2My4zNi40NzguMDh2NkwyIDE0di0xLjI2OEExLjk5IDEuOTkgMCAwIDEgMSAxM3YxYTEgMSAwIDAgMCAuODM2Ljk4Nmw2IDFjLjEwOC4wMTguMjIuMDE4LjMyOCAwbDYtMUExIDEgMCAwIDAgMTUgMTR2LTFhMS45OSAxLjk5IDAgMCAxLTEtLjI2OFYxNGwtNS41LjkxN3YtNmwuNDc4LS4wOCAyLjE2My0uMzZMMTMgOC4xNjYgMTQgOHYxLjI2OEExLjk5IDEuOTkgMCAwIDEgMTUgOVY4YTEgMSAwIDAgMC0xLjE2NC0uOTg2bC0yLjA3My4zNDVBMy45OTEgMy45OTEgMCAwIDAgMTEuODc0IDVIMTMuNWEuNS41IDAgMCAwIDAtMWgtMS43bC0uNTc4LTIuODlBMSAxIDAgMCAwIDkuOTI1LjM1OUw4LjMxNi44OTVhMSAxIDAgMCAxLS42MzIgMHptMi44OCA2LjY2NEEzLjAxMyAzLjAxMyAwIDAgMCAxMC44MyA1SDUuMTdhMy4wMTMgMy4wMTMgMCAwIDAgLjI2NiAyLjU1OUw4IDcuOTg2bDIuNTY0LS40Mjd6TTEwLjggNEg5LjJMOSAzbDEuNS0uNS4zIDEuNXpNMSAxMmExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJ6bTE0IDBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUmVwb3J0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUmV0dXJuS2V5ID0gZnVuY3Rpb24gRXVpSWNvblJldHVybktleShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjk5NCA0YzEuMDU5IDAgMS45MjQuODE4IDIgMS44NTZsLjAwNi4xNXYxLjk4OGEyLjAwNSAyLjAwNSAwIDAgMS0xLjg1NiAyTDEyIDEwSDMuNDg0bDEuOTEgMS44MmEuNTIuNTIgMCAwIDEgMCAuNzcuNjE2LjYxNiAwIDAgMS0uODI5IDBsLTIuMDUtMS45NWExLjU1MSAxLjU1MSAwIDAgMSAwLTIuMzFsMi4wNS0xLjk1YS42MTcuNjE3IDAgMCAxIC44MyAwIC41Mi41MiAwIDAgMSAwIC43N0wzLjQ1IDlIMTJjLjUxNC0uMDAzLjkzNS0uMzkuOTkzLS44ODhMMTMgNy45OTRWNi4wMDZjMC0uNTE2LS4zODgtLjk0MS0uODg4LTFMMTEuOTk0IDVIOS41YS41LjUgMCAwIDEtLjA5LS45OTJMOS41IDRoMi40OTR6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25SZXR1cm5LZXk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU2F2ZSA9IGZ1bmN0aW9uIEV1aUljb25TYXZlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4wMDggMkgyLjI4MmMtLjE4MSAwLS4yNDUuMDAyLS4yNzUuMDA3LS4wMDUuMDMtLjAwNy4wOTQtLjAwNy4yNzV2MTEuNDM2YzAgLjE4MS4wMDIuMjQ1LjAwNy4yNzUuMDMuMDA1LjA5NC4wMDcuMjc1LjAwN2gxMS40MzZjLjE4MSAwIC4yNDUtLjAwMi4yNzUtLjAwNy4wMDUtLjAzLjAwNy0uMDk0LjAwNy0uMjc1VjQuNjJjMC0uMTMtLjAwMS0uMTgtLjAwNC0uMjA0YTIuNjU0IDIuNjU0IDAgMCAwLS4xNDEtLjE0N0wxMS43MyAyLjE0NWEyLjY1NCAyLjY1NCAwIDAgMC0uMTQ3LS4xNDFBMi42NTQgMi42NTQgMCAwIDAgMTEuMzggMmgtLjM4OGMuMDA1LjA4LjAwOC4xNzIuMDA4LjI4MnYyLjQzNmMwIC40NDYtLjA0Ni42MDctLjEzNC43N2EuOTA5LjkwOSAwIDAgMS0uMzc4LjM3OGMtLjE2My4wODgtLjMyNC4xMzQtLjc3LjEzNEg2LjI4MmMtLjQ0NiAwLS42MDctLjA0Ni0uNzctLjEzNGEuOTA5LjkwOSAwIDAgMS0uMzc4LS4zNzhDNS4wNDYgNS4zMjUgNSA1LjE2NCA1IDQuNzE4VjIuMjgyYzAtLjExLjAwMy0uMjAyLjAwOC0uMjgyWk0yLjI4MiAxaDkuMDk4Yy4yNTkgMCAuMzQ4LjAxLjQ0Ny4wMzJhLjg3Ljg3IDAgMCAxIC4yNzMuMTEzYy4wODYuMDU0LjE1Ni4xMS4zMzguMjkzbDIuMTI0IDIuMTI0Yy4xODIuMTgyLjIzOS4yNTIuMjkzLjMzOGEuODcuODcgMCAwIDEgLjExMy4yNzNjLjAyMy4xLjAzMi4xODguMDMyLjQ0N3Y5LjA5OGMwIC40NDYtLjA0Ni42MDctLjEzNC43N2EuOTA5LjkwOSAwIDAgMS0uMzc4LjM3OGMtLjE2My4wODgtLjMyNC4xMzQtLjc3LjEzNEgyLjI4MmMtLjQ0NiAwLS42MDctLjA0Ni0uNzctLjEzNGEuOTA5LjkwOSAwIDAgMS0uMzc4LS4zNzhjLS4wODgtLjE2My0uMTM0LS4zMjQtLjEzNC0uNzdWMi4yODJjMC0uNDQ2LjA0Ni0uNjA3LjEzNC0uNzdhLjkwOS45MDkgMCAwIDEgLjM3OC0uMzc4Yy4xNjMtLjA4OC4zMjQtLjEzNC43Ny0uMTM0Wk02IDIuMjgydjIuNDM2YzAgLjE4MS4wMDIuMjQ1LjAwNy4yNzUuMDMuMDA1LjA5NC4wMDcuMjc1LjAwN2gzLjQzNmMuMTgxIDAgLjI0NS0uMDAyLjI3NS0uMDA3LjAwNS0uMDMuMDA3LS4wOTQuMDA3LS4yNzVWMi4yODJjMC0uMTgxLS4wMDItLjI0NS0uMDA3LS4yNzVBMi4yNDggMi4yNDggMCAwIDAgOS43MTggMkg2LjI4MmMtLjE4MSAwLS4yNDUuMDAyLS4yNzUuMDA3LS4wMDUuMDMtLjAwNy4wOTQtLjAwNy4yNzVaTTggMTJhMiAyIDAgMSAxIDAtNCAyIDIgMCAwIDEgMCA0Wm0wLTFhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2F2ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TY2FsZSA9IGZ1bmN0aW9uIEV1aUljb25TY2FsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi41IDEyYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0tMiAwYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0tMiAwYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm00LTJhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabS0yIDBhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabTItMWEuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptMC0zYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0tMiAyYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0tMiAwYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0wIDJhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabS0yIDJhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabS0yIDBhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabTItMmEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptNi02YS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0tMiAyYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2NhbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvblNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTExLjI3MSAxMS45NzggMy44NzIgMy44NzNhLjUwMi41MDIgMCAwIDAgLjcwOCAwIC41MDIuNTAyIDAgMCAwIDAtLjcwOGwtMy41NjUtMy41NjRjMi4zOC0yLjc0NyAyLjI2Ny02LjkyMy0uMzQyLTkuNTMyLTIuNzMtMi43My03LjE3LTIuNzMtOS44OTggMC0yLjcyOCAyLjcyOS0yLjcyOCA3LjE3IDAgOS45YTYuOTU1IDYuOTU1IDAgMCAwIDQuOTQ5IDIuMDUuNS41IDAgMCAwIDAtMSA1Ljk2IDUuOTYgMCAwIDEtNC4yNDItMS43NTcgNi4wMSA2LjAxIDAgMCAxIDAtOC40ODZjMi4zMzctMi4zNCA2LjE0My0yLjM0IDguNDg0IDBhNi4wMSA2LjAxIDAgMCAxIDAgOC40ODYuNS41IDAgMCAwIC4wMzQuNzM4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNlY3VyaXR5U2lnbmFsID0gZnVuY3Rpb24gRXVpSWNvblNlY3VyaXR5U2lnbmFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjg3NSAzLjQxOGE2IDYgMCAxIDAgLjcwNy43MDdsLTIuNDYgMi40Ni0xLjE1NiAxLjE1NmExIDEgMCAxIDEtLjcwNy0uNzA3bC43NTctLjc1N2EyIDIgMCAwIDAtMi40MyAzLjEzNy41LjUgMCAxIDEtLjcwNy43MDcgMyAzIDAgMCAxIDMuODYtNC41NjdsLjcxNC0uNzE0QTQgNCAwIDEgMCA4IDEyYS41LjUgMCAxIDEgMCAxIDUgNSAwIDEgMSAzLjE2NC04Ljg3MWwuNzEtLjcxem0uNzA5LS43MDlhNyA3IDAgMSAwIC43MDcuNzA3bC4zNjYtLjM2NmEuNS41IDAgMSAwLS43MDctLjcwN2wtLjM2Ni4zNjZ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWN1cml0eVNpZ25hbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TZWN1cml0eVNpZ25hbERldGVjdGVkID0gZnVuY3Rpb24gRXVpSWNvblNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuNjU3IDMuMDVhLjUuNSAwIDAgMC0uNzA3LS43MDdsLS4zNjYuMzY2QTcgNyAwIDEgMCA4IDE1YTQuOTk0IDQuOTk0IDAgMCAxLS41OTctMS4wMyA2IDYgMCAxIDEgNC40NzEtMTAuNTUybC0uNzEuNzFhNSA1IDAgMSAwLTQuMDggOC43ODggNS4wMjcgNS4wMjcgMCAwIDEtLjA4Mi0xLjA0MkE0LjAwMiA0LjAwMiAwIDAgMSA4IDRhMy45OCAzLjk4IDAgMCAxIDIuNDUzLjg0bC0uNzE1LjcxNGEzIDMgMCAwIDAtMy44NiA0LjU2Ny41LjUgMCAxIDAgLjcwOC0uNzA3IDIgMiAwIDAgMSAyLjQzLTMuMTM3bC0uNzU3Ljc1N2ExIDEgMCAxIDAgLjcwNy43MDdsMS4xNTUtMS4xNTUgMi40Ni0yLjQ2YTUuOTcyIDUuOTcyIDAgMCAxIDEuMzkgMy4yNzdjLjM2Ny4xNTguNzEzLjM2IDEuMDI5LjU5NyAwLTEuNjM2LS41Ny0zLjI3MS0xLjcxLTQuNTg0bC4zNjctLjM2NnpNMTYgMTJhNCA0IDAgMSAxLTggMCA0IDQgMCAwIDEgOCAwem0tNCAuNWEuNTc3LjU3NyAwIDAgMS0uNTctLjQ5NWwtLjI5LTIuMDE1YS44NjcuODY3IDAgMSAxIDEuNzE4IDBsLS4yODggMi4wMTVhLjU3Ny41NzcgMCAwIDEtLjU3LjQ5NXptMCAyLjVhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2VjdXJpdHlTaWduYWxEZXRlY3RlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkID0gZnVuY3Rpb24gRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuNjU3IDMuMDVhLjUuNSAwIDEgMC0uNzA3LS43MDdsLS4zNjYuMzY2QTcgNyAwIDEgMCA4IDE1YTQuOTk0IDQuOTk0IDAgMCAxLS41OTctMS4wMyA2IDYgMCAxIDEgNC40NzEtMTAuNTUybC0uNzEuNzFhNSA1IDAgMSAwLTQuMDggOC43ODggNS4wMjggNS4wMjggMCAwIDEtLjA4Mi0xLjA0MkE0LjAwMiA0LjAwMiAwIDAgMSA4IDRhMy45OCAzLjk4IDAgMCAxIDIuNDUzLjg0bC0uNzE1LjcxNGEzIDMgMCAwIDAtMy44NiA0LjU2Ny41LjUgMCAxIDAgLjcwOC0uNzA3IDIgMiAwIDAgMSAyLjQzLTMuMTM3bC0uNzU3Ljc1N2ExIDEgMCAxIDAgLjcwNy43MDdsMS4xNTUtMS4xNTUgMi40Ni0yLjQ2YTUuOTcyIDUuOTcyIDAgMCAxIDEuMzkgMy4yNzdjLjM2Ny4xNTguNzEzLjM2IDEuMDI5LjU5NyAwLTEuNjM2LS41Ny0zLjI3MS0xLjcxLTQuNTg0bC4zNjctLjM2NnpNMTYgMTJhNCA0IDAgMSAxLTggMCA0IDQgMCAwIDEgOCAwem0tMS42NDYtMS4zNTRhLjUuNSAwIDAgMSAwIC43MDdsLTIuNSAyLjVhLjUuNSAwIDAgMS0uNzA4IDBsLTEtMWEuNS41IDAgMCAxIC43MDgtLjcwN2wuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMCAxIC43MDggMHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU2Vzc2lvblZpZXdlciA9IGZ1bmN0aW9uIEV1aUljb25TZXNzaW9uVmlld2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA2aDF2MUg0VjZ6bTIgMkg1VjdoMXYxem0wIDFWOGgxdjFINnptLTEgMVY5aDF2MUg1em0wIDB2MUg0di0xaDF6bTIgMGg0djFIN3YtMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDNhMSAxIDAgMCAxIDEtMWgxMmExIDEgMCAwIDEgMSAxdjEwYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjN6bTEgMWgxMnY5SDJWNHpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZXNzaW9uVmlld2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNoYXJkID0gZnVuY3Rpb24gRXVpSWNvblNoYXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4xMzQgNy4wMzEgOCAxMi43NjRsMi44NjYtNS43MzNMOCAyLjAxNiA1LjEzNCA3LjAzWk04IDBsNCA3LTQgOC00LTggNC03WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2hhcmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU2hhcmUgPSBmdW5jdGlvbiBFdWlJY29uU2hhcmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDYuODF2Ni4zOGMwIC40OTMuNDQ4LjkuOTkyLjloNy4wMTZjLjU0MyAwIC45OTItLjQwNi45OTItLjlWNi44MWMwLS40OTMtLjQ0OC0uOS0uOTkyLS45SDMuOTkyYy0uNTQzIDAtLjk5Mi40MDYtLjk5Mi45Wk02IDV2LjkxaDNWNWgyLjAwOEMxMi4xMDggNSAxMyA1LjgxOCAxMyA2LjgxdjYuMzhjMCAxLS45IDEuODEtMS45OTIgMS44MUgzLjk5MkMyLjg5MiAxNSAyIDE0LjE4MiAyIDEzLjE5VjYuODFDMiA1LjgxIDIuOSA1IDMuOTkyIDVINlptMS45OTctMy41NTJBLjUwNi41MDYgMCAwIDEgOCAxLjV2OGEuNS41IDAgMCAxLTEgMHYtOGEuNTEuNTEgMCAwIDEgMC0uMDE3TDUuMTggMy4zOTRhLjUyLjUyIDAgMCAxLS43NyAwIC42MTcuNjE3IDAgMCAxIDAtLjgyOUw2LjM2LjUxNWExLjU1MiAxLjU1MiAwIDAgMSAyLjMxIDBsMS45NSAyLjA1Yy4yMTQuMjI5LjIxNC42MDEgMCAuODNhLjUyLjUyIDAgMCAxLS43NyAwTDcuOTk3IDEuNDQ3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2hhcmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU2luZ2xlTWV0cmljVmlld2VyID0gZnVuY3Rpb24gRXVpSWNvblNpbmdsZU1ldHJpY1ZpZXdlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNSAxYS41LjUgMCAwIDEgLjUuNVYxNGgxMi41YS41LjUgMCAwIDEgMCAxaC0xM2EuNS41IDAgMCAxLS41LS41di0xM2EuNS41IDAgMCAxIC41LS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuOTM1IDYuNjUyYS42LjYgMCAwIDAtLjk1MS0uMDYyTDkgMTBsLTIuNzQ3LS45MTZhLjYuNiAwIDAgMC0uNDg1LjA0N0wzIDEwLjY5djEuODFhLjUuNSAwIDAgMCAuNS41aDExYS41LjUgMCAwIDAgLjUtLjVWOS43NWwtMi4wNjUtMy4wOThaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy4wMjMgMi43NThhLjYuNiAwIDAgMC0uOTg3LS4wNzdMOC4zODggNy4yMDNsLTIuMDkzLS44M2EuNi42IDAgMCAwLS41NTIuMDU4TDMuMjIxIDguMDk4YS40OS40OSAwIDAgMC0uMTM4LjY4My41LjUgMCAwIDAgLjY4OS4xMzZsMi4zNDktMS41NTIgMi41ODIgMS4wMjQgMy43NDYtNC42NDMgMS42MjMgMi44MTdjLjEzNi4yMzcuNDQuMzE5LjY3OC4xODRhLjQ5LjQ5IDAgMCAwIC4xODQtLjY3MmwtMS45MS0zLjMxN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNpbmdsZU1ldHJpY1ZpZXdlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Tbm93Zmxha2UgPSBmdW5jdGlvbiBFdWlJY29uU25vd2ZsYWtlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuMDA3LjVhLjUuNSAwIDAgMSAxIDB2Mi4wMjRhLjk5OS45OTkgMCAwIDAgLjI2OC0uMjI3bDEuMDI3LTEuMjMzYS41LjUgMCAwIDEgLjc2OS42NEw4LjI3NSAzLjg2YS45OTkuOTk5IDAgMCAxLS4yNjguMjI3djIuNTQ4bDIuMjA3LTEuMjc0YzAtLjExNC4wMi0uMjMxLjA2Mi0uMzQ2bC45NjgtMi42MzJhLjUuNSAwIDEgMSAuOTM4LjM0NWwtLjU1NCAxLjUwNmEuOTk4Ljk5OCAwIDAgMC0uMDYyLjM0NmwxLjc1My0xLjAxMmEuNS41IDAgMSAxIC41Ljg2NmwtMS43NTMgMS4wMTJjLjEuMDU3LjIxLjA5OC4zMy4xMTlsMS41ODIuMjczYS41LjUgMCAxIDEtLjE3Ljk4NmwtMi43NjQtLjQ3OGExIDEgMCAwIDEtLjMzLS4xMkw4LjUwNiA3LjVsMi4yMDcgMS4yNzRhMSAxIDAgMCAxIC4zMy0uMTE5bDIuNzY0LS40NzhhLjUuNSAwIDEgMSAuMTcuOTg2bC0xLjU4Mi4yNzNhLjk5OS45OTkgMCAwIDAtLjMzLjEybDEuNzUzIDEuMDExYS41LjUgMCAxIDEtLjUuODY2bC0xLjc1My0xLjAxMmMwIC4xMTUuMDIuMjMxLjA2Mi4zNDZsLjU1NCAxLjUwNmEuNS41IDAgMCAxLS45MzguMzQ1bC0uOTY4LTIuNjMyYS45OTkuOTk5IDAgMCAxLS4wNjItLjM0Nkw4LjAwNyA4LjM2NnYyLjU0OGMuMDk4LjA1OC4xOS4xMzMuMjY4LjIyN2wxLjc5NiAyLjE1NWEuNS41IDAgMCAxLS43NjkuNjRsLTEuMDI3LTEuMjMzYS45OTkuOTk5IDAgMCAwLS4yNjgtLjIyNlYxNC41YS41LjUgMCAwIDEtMSAwdi0yLjAyNGEuOTk5Ljk5OSAwIDAgMC0uMjY5LjIyN2wtMS4wMjcgMS4yMzNhLjUuNSAwIDAgMS0uNzY4LS42NGwxLjc5NS0yLjE1NWEuOTk5Ljk5OSAwIDAgMSAuMjY5LS4yMjdWOC4zNjZMNC44IDkuNjRjMCAuMTE0LS4wMi4yMzEtLjA2Mi4zNDZsLS45NjkgMi42MzJhLjUuNSAwIDEgMS0uOTM4LS4zNDVsLjU1NC0xLjUwNmExIDEgMCAwIDAgLjA2Mi0uMzQ2bC0xLjc1MyAxLjAxMmEuNS41IDAgMCAxLS41LS44NjZsMS43NTMtMS4wMTJhLjk5OS45OTkgMCAwIDAtLjMzLS4xMTlsLTEuNTgyLS4yNzNhLjUuNSAwIDAgMSAuMTctLjk4NmwyLjc2NC40NzhjLjEyLjAyLjIzMi4wNjIuMzMuMTJMNi41MDggNy41IDQuMyA2LjIyNmEuOTk5Ljk5OSAwIDAgMS0uMzMuMTE5bC0yLjc2NS40NzhhLjUuNSAwIDEgMS0uMTctLjk4NmwxLjU4Mi0uMjczYS45OTkuOTk5IDAgMCAwIC4zMy0uMTJMMS4xOTQgNC40MzRhLjUuNSAwIDEgMSAuNS0uODY2bDEuNzUzIDEuMDEyYzAtLjExNC0uMDItLjIzMS0uMDYyLS4zNDZMMi44MyAyLjcyN2EuNS41IDAgMSAxIC45MzgtLjM0NWwuOTY5IDIuNjMyYS45OTkuOTk5IDAgMCAxIC4wNjIuMzQ2bDIuMjA3IDEuMjc0VjQuMDg2YTEgMSAwIDAgMS0uMjY5LS4yMjdMNC45NDMgMS43MDRhLjUuNSAwIDAgMSAuNzY4LS42NGwxLjAyNyAxLjIzM2MuMDc5LjA5NC4xNy4xNy4yNjkuMjI3Vi41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU25vd2ZsYWtlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNvcnRBc2NlbmRpbmcgPSBmdW5jdGlvbiBFdWlJY29uU29ydEFzY2VuZGluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMuODU0IDMuMTQ2YS41LjUgMCAwIDAtLjcwOCAwbC0yIDJhLjUuNSAwIDEgMCAuNzA4LjcwOEwzIDQuNzA3VjExLjVhLjUuNSAwIDAgMCAxIDBWNC43MDdsMS4xNDYgMS4xNDdhLjUuNSAwIDEgMCAuNzA4LS43MDhsLTItMlpNOCA0LjVhLjUuNSAwIDAgMSAuNS0uNWg2YS41LjUgMCAwIDEgMCAxaC02YS41LjUgMCAwIDEtLjUtLjVaTTguNSA3YS41LjUgMCAwIDAgMCAxaDRhLjUuNSAwIDAgMCAwLTFoLTRaTTggMTAuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnRBc2NlbmRpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU29ydERlc2NlbmRpbmcgPSBmdW5jdGlvbiBFdWlJY29uU29ydERlc2NlbmRpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDEwLjI5M1YzLjVhLjUuNSAwIDAgMC0xIDB2Ni43OTNMMS44NTQgOS4xNDZhLjUuNSAwIDEgMC0uNzA4LjcwOGwyIDJhLjUuNSAwIDAgMCAuNzA4IDBsMi0yYS41LjUgMCAxIDAtLjcwOC0uNzA4TDQgMTAuMjkzWk04IDQuNWEuNS41IDAgMCAxIC41LS41aDZhLjUuNSAwIDAgMSAwIDFoLTZhLjUuNSAwIDAgMS0uNS0uNVpNOC41IDdhLjUuNSAwIDAgMCAwIDFoNGEuNS41IDAgMCAwIDAtMWgtNFpNOCAxMC41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydERlc2NlbmRpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU29ydExlZnQgPSBmdW5jdGlvbiBFdWlJY29uU29ydExlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNC4zMDggN2g4LjEzNmMuMzA3IDAgLjU1Ni4yMjQuNTU2LjVzLS4yNDkuNS0uNTU2LjVINC4zMDhsNC4wOTYgNC4wOTZhLjUuNSAwIDAgMS0uNzA3LjcwN0wzLjQ1NCA4LjU2MWExLjQ5NCAxLjQ5NCAwIDAgMS0uNDMzLS45MjUuNDU0LjQ1NCAwIDAgMSAwLS4yNzJjLjAzLS4zMzguMTc1LS42NjYuNDMzLS45MjVsNC4yNDMtNC4yNDJhLjUuNSAwIDEgMSAuNzA3LjcwN0w0LjMwOCA3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydExlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU29ydFJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvblNvcnRSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjY5MiA3SDMuNTU2QzMuMjQ5IDcgMyA3LjIyNCAzIDcuNXMuMjQ5LjUuNTU2LjVoOC4xMzZsLTQuMDk2IDQuMDk2YS41LjUgMCAwIDAgLjcwNy43MDdsNC4yNDMtNC4yNDJjLjI1OC0uMjU5LjQwMy0uNTg3LjQzMy0uOTI1YS40NTQuNDU0IDAgMCAwIDAtLjI3MiAxLjQ5NCAxLjQ5NCAwIDAgMC0uNDMzLS45MjVMOC4zMDMgMi4xOTdhLjUuNSAwIDEgMC0uNzA3LjcwN0wxMS42OTIgN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnRSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Tb3J0RG93biA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0RG93bihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTEuNjkyVjMuNTU2QzcgMy4yNDkgNy4yMjQgMyA3LjUgM3MuNS4yNDkuNS41NTZ2OC4xMzZsNC4wOTYtNC4wOTZhLjUuNSAwIDAgMSAuNzA3LjcwN2wtNC4yNDIgNC4yNDNhMS40OTQgMS40OTQgMCAwIDEtLjkyNS40MzMuNDU0LjQ1NCAwIDAgMS0uMjcyIDAgMS40OTQgMS40OTQgMCAwIDEtLjkyNS0uNDMzTDIuMTk3IDguMzAzYS41LjUgMCAxIDEgLjcwNy0uNzA3TDcgMTEuNjkyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydERvd247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU29ydFVwID0gZnVuY3Rpb24gRXVpSWNvblNvcnRVcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNC4yMDd2OC4yMzdjMCAuMzA3LS4yMjQuNTU2LS41LjU1NnMtLjUtLjI0OS0uNS0uNTU2VjQuMjA3TDIuOTA0IDguMzAzYS41LjUgMCAwIDEtLjcwNy0uNzA3bDQuMjQyLTQuMjQyYTEuNSAxLjUgMCAwIDEgMi4xMjIgMGw0LjI0MiA0LjI0MmEuNS41IDAgMSAxLS43MDcuNzA3TDggNC4yMDdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0VXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU29ydGFibGUgPSBmdW5jdGlvbiBFdWlJY29uU29ydGFibGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDEyLjc4NlYzLjJMMy42MDQgNi41OTZhLjUuNSAwIDAgMS0uNzA4LS43MDdsMy41MzYtMy41MzVhMS41IDEuNSAwIDAgMSAyLjEyMSAwbDMuNTM2IDMuNTM1YS41LjUgMCAwIDEtLjcwNy43MDdMOCAzLjIxNHY5LjU1N2wzLjM4Mi0zLjM4MmEuNS41IDAgMCAxIC43MDcuNzA3bC0zLjUzNiAzLjUzNmExLjUgMS41IDAgMCAxLTIuMTIxIDBsLTMuNTM2LTMuNTM2YS41LjUgMCAwIDEgLjcwOC0uNzA3TDcgMTIuNzg2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydGFibGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3BhY2VzID0gZnVuY3Rpb24gRXVpSWNvblNwYWNlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDNIM3YzaDNWM1pNMyAyYTEgMSAwIDAgMC0xIDF2M2ExIDEgMCAwIDAgMSAxaDNhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFIM1ptMyA4SDN2M2gzdi0zWk0zIDlhMSAxIDAgMCAwLTEgMXYzYTEgMSAwIDAgMCAxIDFoM2ExIDEgMCAwIDAgMS0xdi0zYTEgMSAwIDAgMC0xLTFIM1ptMTAtNmgtM3YzaDNWM1ptLTMtMWExIDEgMCAwIDAtMSAxdjNhMSAxIDAgMCAwIDEgMWgzYTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xaC0zWm0zIDhoLTN2M2gzdi0zWm0tMy0xYTEgMSAwIDAgMC0xIDF2M2ExIDEgMCAwIDAgMSAxaDNhMSAxIDAgMCAwIDEtMXYtM2ExIDEgMCAwIDAtMS0xaC0zWlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNwYWNlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TcGFya2xlcyA9IGZ1bmN0aW9uIEV1aUljb25TcGFya2xlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm01LjAxNiA0LjM4My4wMzUtLjA5M2EuNDkyLjQ5MiAwIDAgMSAuODk4IDBsLjAzNS4wOTNjLjA0OC4xMjguMDcyLjE5Mi4wOTcuMjUzYTUuOSA1LjkgMCAwIDAgMy41MzYgMy4zOGwuMDkzLjAzNWEuNDkyLjQ5MiAwIDAgMSAwIC44OThsLS4wOTMuMDM1YTUuOSA1LjkgMCAwIDAtMy41MzYgMy4zOGMtLjAyNS4wNi0uMDQ5LjEyNS0uMDk3LjI1M2wtLjAzNS4wOTNhLjQ5Mi40OTIgMCAwIDEtLjg5OCAwbC0uMDM1LS4wOTNjLS4wNDgtLjEyOC0uMDcyLS4xOTItLjA5Ny0uMjUzYTUuOSA1LjkgMCAwIDAtMy41MzYtMy4zOCAyLjE3NSAyLjE3NSAwIDAgMS0uMDkzLS4wMzUuNDkyLjQ5MiAwIDAgMSAwLS44OThsLjA5My0uMDM1Yy4xMjgtLjA0OC4xOTItLjA3Mi4yNTMtLjA5N2E1LjkgNS45IDAgMCAwIDMuMzgtMy41MzZabTYuNzY5LTIuMjEzYS45NjguOTY4IDAgMCAxIC4wMTYtLjA0MS4yMTkuMjE5IDAgMCAxIC4zOTggMCAyLjYyMiAyLjYyMiAwIDAgMCAxLjUxOCAxLjYxM2wuMTEzLjA0M2EuMjcyLjI3MiAwIDAgMSAuMDQuMDE2LjIxOS4yMTkgMCAwIDEgMCAuMzk4LjI3Mi4yNzIgMCAwIDEtLjA0LjAxNmwtLjExMy4wNDNhMi42MjIgMi42MjIgMCAwIDAtMS41MDIgMS41NzIuOTY4Ljk2OCAwIDAgMS0uMDE2LjA0LjIxOS4yMTkgMCAwIDEtLjM5OCAwIDIuNjIyIDIuNjIyIDAgMCAwLTEuNTE4LTEuNjEzbC0uMTEzLS4wNDJhLjI3Mi4yNzIgMCAwIDEtLjA0LS4wMTYuMjE5LjIxOSAwIDAgMSAwLS4zOTguMjcyLjI3MiAwIDAgMSAuMDQtLjAxNmwuMTEzLS4wNDNhMi42MjIgMi42MjIgMCAwIDAgMS41MDItMS41NzJabS0uNTU1IDguMDQzLjAyLS4wNTJhLjI3My4yNzMgMCAwIDEgLjUgMGwuMDIuMDUyLjA1My4xNGEzLjI3NSAzLjI3NSAwIDAgMCAxLjgyNCAxLjgyNGwuMTQuMDU0Yy4wMy4wMS4wNDQuMDE2LjA1Mi4wMmEuMjczLjI3MyAwIDAgMSAwIC40OTggMS4yNDggMS4yNDggMCAwIDEtLjA1Mi4wMmMtLjA3LjAyNy0uMTA3LjA0LS4xNC4wNTRhMy4yNzkgMy4yNzkgMCAwIDAtMS44MjQgMS44MjRsLS4wNTQuMTRhLjQwOS40MDkgMCAwIDEtLjAyLjA1Mi4yNzMuMjczIDAgMCAxLS40OTggMCAxLjI0OCAxLjI0OCAwIDAgMS0uMDItLjA1MmMtLjAyNy0uMDctLjA0LS4xMDctLjA1NC0uMTRhMy4yNzkgMy4yNzkgMCAwIDAtMS44MjQtMS44MjRsLS4xNC0uMDU0YTEuMjQgMS4yNCAwIDAgMS0uMDUyLS4wMi4yNzMuMjczIDAgMCAxIDAtLjQ5OCAxLjI0IDEuMjQgMCAwIDEgLjA1Mi0uMDJsLjE0LS4wNTRhMy4yNzkgMy4yNzkgMCAwIDAgMS44MjQtMS44MjRsLjA1NC0uMTRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TcGFya2xlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdGFyUGx1c0VtcHR5ID0gZnVuY3Rpb24gRXVpSWNvblN0YXJQbHVzRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAgMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAgMCAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAgMCAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAgMCA2IDJtOCA4aDJ2MWgtMnYyaC0xdi0yaC0ydi0xaDJWOGgxdjJaTTYgM2MuMDczIDAgLjA5NS4wNDkuMTA0LjA3bDEuMjY3IDIuNzgzLjE2Mi4zNTYuMzg3LjA1NSAyLjk3OC40MjVjLjAxNy4wMDIuMDcxLjAxLjA5NS4wOGEuMTE2LjExNiAwIDAgMS0uMDI5LjEyNkw4Ljc2MiA5LjEyMWwtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAgMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMCAxLS4wNTUtLjAxNmwtMi41NzgtMS40NjlMNiAxMS4zMTRsLS4zNTQuMjAxLTIuNTc5IDEuNDY5YS4xMDMuMTAzIDAgMCAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwIDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMCAxLS4wMjktLjEyNi4xMDguMTA4IDAgMCAxIC4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM1LjkwNSAzLjA1IDUuOTI3IDMgNiAzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhclBsdXNFbXB0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdGFyUGx1c0ZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdGFyUGx1c0ZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNCAxMGgydjFoLTJ2MmgtMXYtMmgtMnYtMWgyVjhoMXYyWk02IDJhLjg2Ljg2IDAgMCAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMCAwIDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMCAwIC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMCAwIDYgMlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhclBsdXNGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3RhckVtcHR5ID0gZnVuY3Rpb24gRXVpSWNvblN0YXJFbXB0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDJhLjg2Ljg2IDAgMCAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMCAwIDQuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMOCAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMCAwIC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMCAwIDggMm0wIDFjLjA3MyAwIC4wOTUuMDQ5LjEwNC4wN2wxLjI2NyAyLjc4My4xNjIuMzU2LjM4Ny4wNTUgMi45NzguNDI1Yy4wMTcuMDAyLjA3MS4wMS4wOTUuMDhhLjExNi4xMTYgMCAwIDEtLjAyOS4xMjZsLTIuMjAyIDIuMjI2LS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwIDEtLjA5MS4wNDYuMTA2LjEwNiAwIDAgMS0uMDU1LS4wMTZsLTIuNTc4LTEuNDY5TDggMTEuMzE0bC0uMzU0LjIwMS0yLjU3OSAxLjQ2OWEuMTAzLjEwMyAwIDAgMS0uMDU0LjAxNi4xMjcuMTI3IDAgMCAxLS4wOTEtLjA0NmMtLjAyMy0uMDI4LS4wMy0uMDU4LS4wMjQtLjA5OGwuNTM2LTMuMTEyLjA2My0uMzYyLS4yNTktLjI2MS0yLjIwMi0yLjIyNmEuMTE2LjExNiAwIDAgMS0uMDI5LS4xMjYuMTA4LjEwOCAwIDAgMSAuMDk0LS4wOGwyLjk4LS40MjUuMzg2LS4wNTUuMTYyLS4zNTYgMS4yNjctMi43ODZDNy45MDUgMy4wNSA3LjkyNyAzIDggM1wiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhckVtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0YXJFbXB0eVNwYWNlID0gZnVuY3Rpb24gRXVpSWNvblN0YXJFbXB0eVNwYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMmEuODYuODYgMCAwIDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwIDAgMi44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw2IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwIDAgLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwIDAgNiAybTAgMWMuMDczIDAgLjA5NS4wNDkuMTA0LjA3bDEuMjY3IDIuNzgzLjE2Mi4zNTYuMzg3LjA1NSAyLjk3OC40MjVjLjAxNy4wMDIuMDcxLjAxLjA5NS4wOGEuMTE2LjExNiAwIDAgMS0uMDI5LjEyNkw4Ljc2MiA5LjEyMWwtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAgMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMCAxLS4wNTUtLjAxNmwtMi41NzgtMS40NjlMNiAxMS4zMTRsLS4zNTQuMjAxLTIuNTc5IDEuNDY5YS4xMDMuMTAzIDAgMCAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwIDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMCAxLS4wMjktLjEyNi4xMDguMTA4IDAgMCAxIC4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM1LjkwNSAzLjA1IDUuOTI3IDMgNiAzXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyRW1wdHlTcGFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdGFyRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblN0YXJGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAyYS44Ni44NiAwIDAgMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAgMCA0Ljg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDggMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAgMCAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAgMCA4IDJcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3RhckZpbGxlZFNwYWNlID0gZnVuY3Rpb24gRXVpSWNvblN0YXJGaWxsZWRTcGFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJhLjg2Ljg2IDAgMCAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMCAwIDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMCAwIC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMCAwIDYgMlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhckZpbGxlZFNwYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0YXJNaW51c0VtcHR5ID0gZnVuY3Rpb24gRXVpSWNvblN0YXJNaW51c0VtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMmEuODYuODYgMCAwIDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwIDAgMi44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw2IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwIDAgLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwIDAgNiAybTAgMWMuMDczIDAgLjA5NS4wNDkuMTA0LjA3bDEuMjY3IDIuNzgzLjE2Mi4zNTYuMzg3LjA1NSAyLjk3OC40MjVjLjAxNy4wMDIuMDcxLjAxLjA5NS4wOGEuMTE2LjExNiAwIDAgMS0uMDI5LjEyNkw4Ljc2MiA5LjEyMWwtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAgMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMCAxLS4wNTUtLjAxNmwtMi41NzgtMS40NjlMNiAxMS4zMTRsLS4zNTQuMjAxLTIuNTc5IDEuNDY5YS4xMDMuMTAzIDAgMCAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwIDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMCAxLS4wMjktLjEyNi4xMDguMTA4IDAgMCAxIC4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM1LjkwNSAzLjA1IDUuOTI3IDMgNiAzWm0xMCA3djFoLTV2LTFoNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJNaW51c0VtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0YXJNaW51c0ZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdGFyTWludXNGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAgMSAuNzkyLjUxMWwxLjMzIDIuOTI0IDMuMTI4LjQ0NmMuNzEuMTAyIDEuMDAxLjk3Ni40OTYgMS40ODdMOS40MzMgOS43MDRsLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAgMSA5LjEzNiAxNGEuODYyLjg2MiAwIDAgMS0uNDI5LS4xMTZMNiAxMi4zNDJsLTIuNzA3IDEuNTQyYS44NjIuODYyIDAgMCAxLS40My4xMTYuODc3Ljg3NyAwIDAgMS0uODU5LTEuMDI3bC41NjMtMy4yNjlMLjI1NCA3LjM2OEMtLjI1IDYuODU3LjA0IDUuOTgzLjc1IDUuODhsMy4xMjgtLjQ0NiAxLjMzLTIuOTIzQS44Ni44NiAwIDAgMSA2IDJabTEwIDh2MWgtNXYtMWg1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3Rhck1pbnVzRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0YXRzID0gZnVuY3Rpb24gRXVpSWNvblN0YXRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMTR2LTRoMXY0aDVWNWgxdjlhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF2LTJoMXYyaDZabTQuODUzLTEwLjE0Ni0yLjk5OSAzYTEuNSAxLjUgMCAwIDEtMi41MzggMS41NjhsLTIuNzE0LjkwNEw0IDkuNTI3YTEuNSAxLjUgMCAxIDEtLjMxNi0uOTQ4TDcgNy40NzNhMS41IDEuNSAwIDAgMSAyLjE0Ni0xLjMyN2wzLTNhMS41IDEuNSAwIDEgMSAuNzA3LjcwN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXRzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0b3AgPSBmdW5jdGlvbiBFdWlJY29uU3RvcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00IDJoOGEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yWm0wIDFhMSAxIDAgMCAwLTEgMXY4YTEgMSAwIDAgMCAxIDFoOGExIDEgMCAwIDAgMS0xVjRhMSAxIDAgMCAwLTEtMUg0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RvcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdG9wRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblN0b3BGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJyZWN0XCIsIHtcbiAgICB3aWR0aDogMTIsXG4gICAgaGVpZ2h0OiAxMixcbiAgICB4OiAyLFxuICAgIHk6IDIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIHJ4OiAyXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RvcEZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdG9wU2xhc2ggPSBmdW5jdGlvbiBFdWlJY29uU3RvcFNsYXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuMjU5IDMuMDM0QTEuMDAxIDEuMDAxIDAgMCAwIDEyIDNINGExIDEgMCAwIDAtMSAxdjhjMCAuMDkuMDEyLjE3Ni4wMzQuMjU5bDkuMjI1LTkuMjI1Wm0uNzA3LjcwNy05LjIyNSA5LjIyNWMuMDgzLjAyMi4xNy4wMzQuMjU5LjAzNGg4YTEgMSAwIDAgMCAxLTFWNGMwLS4wOS0uMDEyLS4xNzYtLjAzNC0uMjU5Wk00IDJoOGEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RvcFNsYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0b3JhZ2UgPSBmdW5jdGlvbiBFdWlJY29uU3RvcmFnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTIgNmExIDEgMCAwIDEtMS0xVjJhMSAxIDAgMCAxIDEtMWgxMmExIDEgMCAwIDEgMSAxdjNhMSAxIDAgMCAxLTEgMUgyWm0xMyAydjNhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTFWOGExIDEgMCAwIDEgMS0xaDEyYTEgMSAwIDAgMSAxIDFabTEtM1YyYTIgMiAwIDAgMC0yLTJIMmEyIDIgMCAwIDAtMiAydjNjMCAuNjAxLjI3MSAxLjEzMy42OSAxLjVDLjI3MSA2Ljg2NyAwIDcuMzk5IDAgOHYzYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4YzAtLjYwMS0uMjcxLTEuMTMzLS42ODktMS41LjQxOC0uMzY3LjY4OS0uODk5LjY4OS0xLjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJjaXJjbGVcIiwge1xuICAgIGN4OiA0LjUsXG4gICAgY3k6IDkuNSxcbiAgICByOiAxLjVcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJjaXJjbGVcIiwge1xuICAgIGN4OiA0LjUsXG4gICAgY3k6IDMuNSxcbiAgICByOiAxLjVcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA4aDF2M2gtMXpNMTAgOGgxdjNoLTF6TTEyIDJoMXYzaC0xek0xMCAyaDF2M2gtMXpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdG9yYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0cmluZyA9IGZ1bmN0aW9uIEV1aUljb25TdHJpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOS4yOTcgMyA4LjkzIDUuMTAyaDEuMzUxbC0uMzIgMS44MjhIOC42MDlsLS42NTYgMy44ODNjLS4wMzYuMjY1LS4wMi40NjYuMDUuNjAxLjA3MS4xMzUuMjQ3LjIwOC41MjguMjE5LjExLjAwNS4zMzQtLjAwOC42NzItLjA0TDkuMDE2IDEzLjVhNC4xNiA0LjE2IDAgMCAxLTEuMzgzLjE5NWMtLjc5Ny0uMDEtMS4zOTMtLjI0NC0xLjc5LS43MDMtLjM5NS0uNDU4LS41NTctMS4wOC0uNDg0LTEuODY3bC42ODgtNC4xOTVINWwuMzEzLTEuODI4aDEuMDQ2TDYuNzI3IDNoMi41N3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0cmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdWJtb2R1bGUgPSBmdW5jdGlvbiBFdWlJY29uU3VibW9kdWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMkgxdjEyaDNWN2ExIDEgMCAwIDEgMS0xaDVhMSAxIDAgMCAxIDEgMXYxaDRWNEg3Yy0uNjIxIDAtMS0uMzc5LTEtMVYyWm0xMCA2djZhMSAxIDAgMCAxLTEgMUgxYTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xaDUuMjVhLjc1Ljc1IDAgMCAxIC43NS43NWwtLjAwNC4yMDZDNi45OSAyLjMxNyA2Ljk3NCAzIDcgM2g4YTEgMSAwIDAgMSAxIDF2NFptLTEgMWgtNGExIDEgMCAwIDEtMS0xVjdINXY3aDEwVjlaTTIgNC41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41Wk02LjUgOWEuNS41IDAgMCAwIDAgMWgyYS41LjUgMCAwIDAgMC0xaC0yWlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN1Ym1vZHVsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdW4gPSBmdW5jdGlvbiBFdWlJY29uU3VuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgOGE0IDQgMCAxIDEtOCAwIDQgNCAwIDAgMSA4IDBaTTcuMjUuNzVhLjc1Ljc1IDAgMCAxIDEuNSAwdjEuNWEuNzUuNzUgMCAxIDEtMS41IDBWLjc1Wm0wIDEzYS43NS43NSAwIDAgMSAxLjUgMHYxLjVhLjc1Ljc1IDAgMCAxLTEuNSAwdi0xLjVabTUuMzQ2LTExLjQwN2EuNzUuNzUgMCAwIDEgMS4wNiAxLjA2bC0xLjA2IDEuMDYxYS43NS43NSAwIDAgMS0xLjA2LTEuMDZsMS4wNi0xLjA2Wm0tOS4xOTIgOS4xOTNhLjc1Ljc1IDAgMSAxIDEuMDYgMS4wNmwtMS4wNiAxLjA2YS43NS43NSAwIDAgMS0xLjA2LTEuMDZsMS4wNi0xLjA2Wk0uNzUgOC43NWEuNzUuNzUgMCAwIDEgMC0xLjVoMS41YS43NS43NSAwIDEgMSAwIDEuNUguNzVabTEzIDBhLjc1Ljc1IDAgMCAxIDAtMS41aDEuNWEuNzUuNzUgMCAwIDEgMCAxLjVoLTEuNVpNMi4zNDMgMy40MDRhLjc1Ljc1IDAgMSAxIDEuMDYtMS4wNmwxLjA2MSAxLjA2YS43NS43NSAwIDAgMS0xLjA2IDEuMDZsLTEuMDYtMS4wNlptOS4xOTMgOS4xOTJhLjc1Ljc1IDAgMCAxIDEuMDYtMS4wNmwxLjA2IDEuMDZhLjc1Ljc1IDAgMCAxLTEuMDYgMS4wNmwtMS4wNi0xLjA2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3VuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN3YXRjaElucHV0ID0gZnVuY3Rpb24gRXVpSWNvblN3YXRjaElucHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgd2lkdGg6IDEyLFxuICAgIGhlaWdodDogMTIsXG4gICAgeDogMixcbiAgICB5OiAyLFxuICAgIHJ4OiAzXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgd2lkdGg6IDExLFxuICAgIGhlaWdodDogMTEsXG4gICAgeDogMi41LFxuICAgIHk6IDIuNSxcbiAgICBjbGFzc05hbWU6IFwiZXVpU3dhdGNoSW5wdXRfX3N0cm9rZVwiLFxuICAgIHJ4OiAyXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3dhdGNoSW5wdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3ltbGluayA9IGZ1bmN0aW9uIEV1aUljb25TeW1saW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEwLjggMEgyYTEgMSAwIDAgMC0xIDF2OGwxLTFWMWg4djMuNWEuNS41IDAgMCAwIC41LjVIMTR2MTBIMnYtMWEzLjUgMy41IDAgMCAxIDMuNS0zLjVIOFYxM2wzLTMtMy0zdjIuNUg1LjVBNC41IDQuNSAwIDAgMCAxIDE0djFhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xVjQuNDI5YzAtLjI1Ni0uMDk4LS41MDMtLjI3NC0uNjg5bC0zLjItMy40MjhBMS4wMDIgMS4wMDIgMCAwIDAgMTAuOCAwWlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN5bWxpbms7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVGFibGVPZkNvbnRlbnRzID0gZnVuY3Rpb24gRXVpSWNvblRhYmxlT2ZDb250ZW50cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEgMXYxNGgxNFYxSDF6TTAgMGgxNnYxNkgwVjB6bTkgMXYxNGgxVjFIOXpNMyAzLjVoNHYtMUgzdjF6bTAgM2g0di0xSDN2MXptMCAzaDR2LTFIM3YxelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFibGVPZkNvbnRlbnRzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRhYmxlRGVuc2l0eUNvbXBhY3QgPSBmdW5jdGlvbiBFdWlJY29uVGFibGVEZW5zaXR5Q29tcGFjdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDN2MTFhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MVptLTEgMFYyYTEgMSAwIDAgMC0xLTFIMmExIDEgMCAwIDAtMSAxdjFoMTRabTAgMUgxdjEwYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMVY0Wk00LjQ5NiA3YS41LjUgMCAwIDEgMCAxSDIuNDk1YS41LjUgMCAwIDEgMC0xaDIuMDAxWm01LjIxOCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCA4IDYgNy43NzYgNiA3LjVzLjEyOC0uNS4yODYtLjVoMy40MjhaTTQuNDk2IDVhLjUuNSAwIDAgMSAwIDFIMi40OTVhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTUuMjE4IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDYgNiA1Ljc3NiA2IDUuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOFpNNC40OTYgOWEuNS41IDAgMCAxIDAgMUgyLjQ5NWEuNS41IDAgMCAxIDAtMWgyLjAwMVptNS4yMTggMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggMTAgNiA5Ljc3NiA2IDkuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOFptLTUuMjE4IDJhLjUuNSAwIDAgMSAwIDFIMi40OTVhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTUuMjE4IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEyIDYgMTEuNzc2IDYgMTEuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOFptLTUuMjE4IDJhLjUuNSAwIDAgMSAwIDFIMi40OTVhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTktNmEuNS41IDAgMCAxIDAgMWgtMi4wMDFhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTAtMmEuNS41IDAgMCAxIDAgMWgtMi4wMDFhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTAgNGEuNS41IDAgMCAxIDAgMWgtMi4wMDFhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTAgMmEuNS41IDAgMCAxIDAgMWgtMi4wMDFhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTAgMmEuNS41IDAgMCAxIDAgMWgtMi4wMDFhLjUuNSAwIDAgMSAwLTFoMi4wMDFabS0zLjc4MiAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxNCA2IDEzLjc3NiA2IDEzLjVzLjEyOC0uNS4yODYtLjVoMy40MjhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkID0gZnVuY3Rpb24gRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgM3YxMWEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlYyYTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnYxWm0tMSAwVjJhMSAxIDAgMCAwLTEtMUgyYTEgMSAwIDAgMC0xIDF2MWgxNFptMCAxSDF2MTBhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xVjRaTTQuNSA3YS41LjUgMCAwIDEgMCAxSDIuNDk2YS41LjUgMCAxIDEgMC0xSDQuNVptOSAwYS41LjUgMCAxIDEgMCAxaC02YS41LjUgMCAwIDEgMC0xaDZabS05IDRhLjUuNSAwIDEgMSAwIDFIMi40OTZhLjUuNSAwIDEgMSAwLTFINC41Wm05IDBhLjUuNSAwIDEgMSAwIDFoLTZhLjUuNSAwIDEgMSAwLTFoNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlOb3JtYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzdjExYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjFabS0xIDBWMmExIDEgMCAwIDAtMS0xSDJhMSAxIDAgMCAwLTEgMXYxaDE0Wm0wIDFIMXYxMGExIDEgMCAwIDAgMSAxaDEyYTEgMSAwIDAgMCAxLTFWNFpNNC41IDZhLjUuNSAwIDAgMSAwIDFIMi40OTZhLjUuNSAwIDEgMSAwLTFINC41Wm01LjIxNCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCA3IDYgNi43NzYgNiA2LjVzLjEyOC0uNS4yODYtLjVoMy40MjhaTTQuNSA5YS41LjUgMCAwIDEgMCAxSDIuNDk2YS41LjUgMCAxIDEgMC0xSDQuNVptNS4yMTQgMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggMTAgNiA5Ljc3NiA2IDkuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOFpNNC41IDEyYS41LjUgMCAxIDEgMCAxSDIuNDk2YS41LjUgMCAxIDEgMC0xSDQuNVptOS02YS41LjUgMCAxIDEgMCAxaC0yLjAwNGEuNS41IDAgMCAxIDAtMUgxMy41Wm0wIDNhLjUuNSAwIDEgMSAwIDFoLTIuMDA0YS41LjUgMCAwIDEgMC0xSDEzLjVabTAgM2EuNS41IDAgMSAxIDAgMWgtMi4wMDRhLjUuNSAwIDAgMSAwLTFIMTMuNVptLTMuNzg2IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEzIDYgMTIuNzc2IDYgMTIuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UYWcgPSBmdW5jdGlvbiBFdWlJY29uVGFnKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4yNTQgMTQuOTcuOTk2IDkuNzEyYy0uMzE1LS4zMTYtLjM5Ny0uNDYzLS40NS0uNjRhLjkwOS45MDkgMCAwIDEgMC0uNTM0Yy4wNTMtLjE3Ny4xMzUtLjMyNC40NS0uNjRMNy40MyAxLjQ2NmMuMTgyLS4xODMuMjUyLS4yNC4zMzgtLjI5M2EuODcuODcgMCAwIDEgLjI3My0uMTEzYy4wOTktLjAyMy4xODgtLjAzMi40NDYtLjAzMmg1LjE3M2MuNDQ1IDAgLjYwNy4wNDYuNzcuMTMzLjE2Mi4wODcuMjkuMjE0LjM3Ny4zNzcuMDg4LjE2Mi4xMzQuMzI0LjEzNi43NjlsLjAxNSA1LjE1YzAgLjI1OS0uMDA5LjM0OC0uMDMyLjQ0OGEuODcuODcgMCAwIDEtLjExMi4yNzNjLS4wNTQuMDg3LS4xMTEuMTU3LS4yOTQuMzRMOC4wNjcgMTQuOTdjLS4zMTUuMzE1LS40NjIuMzk2LS42MzkuNDVhLjkwOS45MDkgMCAwIDEtLjUzNSAwYy0uMTc2LS4wNTQtLjMyNC0uMTM1LS42MzktLjQ1Wm0xLjEwNi0uNzA3IDYuNDUzLTYuNDUzYy4wOTItLjA5Mi4xMjYtLjEyOC4xNDEtLjE0Ny4wMDMtLjAyNS4wMDQtLjA3NC4wMDQtLjIwNGwtLjAxNS01LjE1YzAtLjE4MS0uMDAzLS4yNDUtLjAwOS0uMjc1YTIuMjQ3IDIuMjQ3IDAgMCAwLS4yNzQtLjAwN0g4LjQ4N2MtLjEzIDAtLjE3OS4wMDEtLjIwMy4wMDQtLjAyLjAxNS0uMDU1LjA1LS4xNDcuMTQxTDEuNzAzIDguNjA2YTIuMjQ4IDIuMjQ4IDAgMCAwLS4xODkuMmMuMDE3LjAyNC4wNjEuMDcuMTkuMTk4bDUuMjU3IDUuMjU5Yy4xMjguMTI4LjE3NS4xNzEuMi4xODguMDI0LS4wMTcuMDcxLS4wNi4yLS4xODhabTQuOTcyLTEwLjYwN2EyIDIgMCAxIDEtMi44MjggMi44MjggMiAyIDAgMCAxIDIuODI4LTIuODI4Wm0tLjcwNy43MDdhMSAxIDAgMSAwLTEuNDE0IDEuNDE0IDEgMSAwIDAgMCAxLjQxNC0xLjQxNFpNNi44MDcgMTEuMjggNC42ODYgOS4xNTlhLjUuNSAwIDEgMSAuNzA3LS43MDdsMi4xMjEgMi4xMmEuNS41IDAgMSAxLS43MDcuNzA4Wm0xLjQxNC0xLjQxNC0yLjEyLTIuMTIyYS41LjUgMCAxIDEgLjcwNi0uNzA3TDguOTI4IDkuMTZhLjUuNSAwIDEgMS0uNzA3LjcwN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRhZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UZWFyID0gZnVuY3Rpb24gRXVpSWNvblRlYXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1MyAxLjc3NmEuNS41IDAgMCAxIC44OTQgMGw0IDhhLjUuNSAwIDAgMSAuMDUzLjIzNWMtLjAwNC4xNS0uMDI2LjM5Ni0uMDg0LjcwNWE1LjUzOCA1LjUzOCAwIDAgMS0uNTA1IDEuNTEyQzExLjE4OSAxMy42MzggOS45MDYgMTQuNSA4IDE0LjVjLTEuOTA2IDAtMy4xOS0uODYyLTMuOTEtMi4yNzJhNS41MzggNS41MzggMCAwIDEtLjUwNi0xLjUxMiA0LjY3MiA0LjY3MiAwIDAgMS0uMDg0LS43MDUuNS41IDAgMCAxIC4wNTMtLjIzNWw0LThabS0zLjA0NiA4LjMyOWMuMDA5LjEwNi4wMjcuMjUzLjA2LjQyOS4wNzkuNDI0LjIxMy44NDguNDEzIDEuMjM4QzUuNTM3IDEyLjg2MiA2LjQ4NyAxMy41IDggMTMuNWMxLjUxMyAwIDIuNDYzLS42MzggMy4wMi0xLjcyOC4yLS4zOS4zMzQtLjgxNC40MTMtMS4yMzguMDMzLS4xNzYuMDUxLS4zMjMuMDYtLjQzTDggMy4xMTlsLTMuNDkzIDYuOTg3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGVhcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UZW1wZXJhdHVyZSA9IGZ1bmN0aW9uIEV1aUljb25UZW1wZXJhdHVyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxNWEzLjUgMy41IDAgMCAxLTEuNzUtNi41MzJMNyA4LjMyNFYyLjVBMS40OTYgMS40OTYgMCAwIDEgOS45MDggMkg4LjV2MUgxMHYxSDguNXYxSDEwdjFIOC41djFIMTB2MS4zMjRsLjI1LjE0NEEzLjUgMy41IDAgMCAxIDguNSAxNU0xMSA3Ljc1OFYyLjVhMi41IDIuNSAwIDEgMC01IDB2NS4yNThhNC41IDQuNSAwIDEgMCA1IDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSA5YTIuNSAyLjUgMCAxIDEgMCA1IDIuNSAyLjUgMCAwIDEgMC01XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UZW1wZXJhdHVyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UaW1lUmVmcmVzaCA9IGZ1bmN0aW9uIEV1aUljb25UaW1lUmVmcmVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi44MDkgOC44MDdhNC41IDQuNSAwIDAgMS01LjU3Mi01Ljc1QTUgNSAwIDAgMCAzLjA0IDkuMzFhLjUuNSAwIDAgMS0uOTY2LjI1OSA2IDYgMCAwIDEgNS42NzItNy41NTMgNC41IDQuNSAwIDEgMSA2LjExNyA2LjMxMyA2LjAwMiA2LjAwMiAwIDAgMS03LjgwMyA1LjQwOS41LjUgMCAxIDEgLjMwMy0uOTU0IDUuMDAxIDUuMDAxIDAgMCAwIDYuNDQ1LTMuOTc5Wk0xMS44NTkgNUgxMy41YS41LjUgMCAwIDAgMC0xSDEyVjEuNWEuNS41IDAgMCAwLTEgMHYzYS41LjUgMCAwIDAgLjUuNWguMzZaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMy43NTcgMTUuODQ4LS43NzYtMi44OTdhMS41IDEuNSAwIDAgMSAxLjA2LTEuODM4bDIuODk4LS43NzZhLjUuNSAwIDEgMSAuMjU5Ljk2NmwtMi44OTguNzc2YS41LjUgMCAwIDAtLjM1My42MTNsLjc3NiAyLjg5OGEuNS41IDAgMCAxLS45NjYuMjU4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGltZVJlZnJlc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVGltZWxpbmUgPSBmdW5jdGlvbiBFdWlJY29uVGltZWxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNyA0LjVhLjUuNSAwIDAgMCAxIDBWNGgxYTEgMSAwIDAgMCAxLTFWMWExIDEgMCAwIDAtMS0xSDZhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDFoMXYuNXpNOSAxSDZ2MmgzVjF6TTIgNy41YS41LjUgMCAxIDEgMSAwIC41LjUgMCAwIDEtMSAwek0yLjUgOWExLjUgMS41IDAgMCAxLTEuNDE1LTFILjVhLjUuNSAwIDAgMSAwLTFoLjU4NWExLjUgMS41IDAgMCAxIDIuODMgMGgyLjE3YTEuNSAxLjUgMCAwIDEgMi44MyAwaDIuMTdhMS41IDEuNSAwIDAgMSAyLjgzIDBoLjU4NWEuNS41IDAgMCAxIDAgMWgtLjU4NWExLjUgMS41IDAgMCAxLTIuODMgMGgtMi4xN2ExLjUgMS41IDAgMCAxLTIuODMgMGgtMi4xN0ExLjUgMS41IDAgMCAxIDIuNSA5ek0xMyA3LjVhLjUuNSAwIDEgMC0xIDAgLjUuNSAwIDAgMCAxIDB6bS01IDBhLjUuNSAwIDEgMC0xIDAgLjUuNSAwIDAgMCAxIDB6TTIuNSAxMGEuNS41IDAgMCAwLS41LjV2LjVIMWExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMWgzYTEgMSAwIDAgMCAxLTF2LTJhMSAxIDAgMCAwLTEtMUgzdi0uNWEuNS41IDAgMCAwLS41LS41ek00IDE0di0ySDF2Mmgzem04LTMuNWEuNS41IDAgMCAxIDEgMHYuNWgxYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0zYTEgMSAwIDAgMS0xLTF2LTJhMSAxIDAgMCAxIDEtMWgxdi0uNXptMiAyLjV2MWgtM3YtMmgzdjF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UaW1lbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UaW1lbGluZVdpdGhBcnJvdyA9IGZ1bmN0aW9uIEV1aUljb25UaW1lbGluZVdpdGhBcnJvdyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03Ljg1NCA0Ljg1NEEuNS41IDAgMCAxIDcgNC41VjRINmExIDEgMCAwIDEtMS0xVjFhMSAxIDAgMCAxIDEtMWgzYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDh2LjVhLjUuNSAwIDAgMS0uMTQ2LjM1NFpNNiAzVjFoM3YySDZaTTIuMTQ2IDkuMTQ2QS41LjUgMCAwIDAgMiA5LjV2LjVIMWExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMWgzYTEgMSAwIDAgMCAxLTF2LTJhMSAxIDAgMCAwLTEtMUgzdi0uNWEuNS41IDAgMCAwLS44NTQtLjM1NFpNNCAxM3YtMkgxdjJoM1pNMTEuNSAxNWE0LjUgNC41IDAgMSAwIDAtOSA0LjUgNC41IDAgMCAwIDAgOVptLjM1NC02Ljg1NCAyIDJhLjUuNSAwIDAgMSAwIC43MDhsLTIgMmEuNS41IDAgMCAxLS43MDctLjcwOEwxMi4yOTMgMTFIOS41YS41LjUgMCAwIDEgMC0xaDIuNzkzbC0xLjE0Ni0xLjE0NmEuNS41IDAgMSAxIC43MDctLjcwOFpNOC4zMzcgNkgzLjkxNWExLjUgMS41IDAgMCAwLTIuODMgMEguNWEuNS41IDAgMCAwIDAgMWguNTg1YTEuNSAxLjUgMCAwIDAgMi44MyAwaDMuMzQyYy4zMTQtLjM4LjY3Ny0uNzE2IDEuMDgtMVpNMiA2LjVhLjUuNSAwIDEgMSAxIDAgLjUuNSAwIDAgMS0xIDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UaW1lbGluZVdpdGhBcnJvdzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UaW1lc2xpZGVyID0gZnVuY3Rpb24gRXVpSWNvblRpbWVzbGlkZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy45MjMgOEE1LjkzIDUuOTMgMCAwIDAgOCAyLjA3NyA1LjkzIDUuOTMgMCAwIDAgMi4wNzcgOGE1LjkzIDUuOTMgMCAwIDAgNi4yOTYgNS45MTJjLjMyOC0uMDIxLjYyNS4yMjcuNjI1LjU1NmEuNTA0LjUwNCAwIDAgMS0uNDU4LjUxMSA3IDcgMCAxIDEgNi40My02LjMzM2MtLjAzNi4zOTgtLjQ4Ny41OC0uODE3LjM1NGEuNTk1LjU5NSAwIDAgMS0uMjQ4LS41NGMuMDEyLS4xNTIuMDE4LS4zMDUuMDE4LS40NnptMS42ODQgMy4yLTQuMzItMy4wNTVjLS41Ni0uMzk2LTEuMjg3LjA1OS0xLjI4Ny44djYuMTA4YzAgLjc0LjcyNiAxLjE5NiAxLjI4Ny44bDQuMzItMy4wNTVjLjUyNC0uMzcuNTI0LTEuMjI4IDAtMS41OTh6TTcuNDYyIDcuNDYySDQuNzY5YS41MzkuNTM5IDAgMCAwIDAgMS4wNzZIOEEuNTM5LjUzOSAwIDAgMCA4LjUzOCA4VjMuNjkyYS41MzkuNTM5IDAgMCAwLTEuMDc2IDB2My43N3pcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UaW1lc2xpZGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuQWxpYXMgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5BbGlhcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk05LjA3NSA2Ljk1M2EuNS41IDAgMSAxLS43MDcuNzA3IDEuNSAxLjUgMCAwIDAtMi4xMjIgMEw0LjEyNSA5Ljc4MmExLjUgMS41IDAgMSAwIDIuMTIxIDIuMTIxbDEuMTQ1LTEuMTQ0YS41LjUgMCAwIDEgLjcwNy43MDdMNi45NTMgMTIuNjFhMi41IDIuNSAwIDEgMS0zLjUzNS0zLjUzNWwyLjEyMS0yLjEyMmEyLjUgMi41IDAgMCAxIDMuNTM2IDBabTMuNTM1LTMuNTM1YTIuNSAyLjUgMCAwIDEgMCAzLjUzNUwxMC40OSA5LjA3NWEyLjUgMi41IDAgMCAxLTMuNTM2IDAgLjUuNSAwIDEgMSAuNzA3LS43MDggMS41IDEuNSAwIDAgMCAyLjEyMiAwbDIuMTIxLTIuMTJhMS41IDEuNSAwIDEgMC0yLjEyMS0yLjEyMkw4LjYzNyA1LjI2OWEuNS41IDAgMSAxLS43MDctLjcwN2wxLjE0NS0xLjE0NGEyLjUgMi41IDAgMCAxIDMuNTM1IDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkFsaWFzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuQW5ub3RhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkFubm90YXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC4xNSAzLjM5MmMyLjc5NyAwIDQuNTI0IDEuNjQ0IDQuNTE3IDQuMjg5LjAwNyAxLjgxNi0uNzA4IDIuODkzLTIuMjEgMy4wMDQtLjkwOC4wNzYtMS4wODEtLjI4Ny0xLjE1Ny0uNzI1aC0uMDQxYy0uMTYzLjQyLS45NjQuNzMyLTEuNzQ0LjY4My0xLjA1My0uMDY1LTIuMDgyLS44NDItMi4wOS0yLjU3Mi4wMDgtMS43MiAxLjA3MS0yLjQ0MSAxLjk1OS0yLjU4Ni44MDQtLjEzNSAxLjU5OC4xNTggMS43MjMuNDYyaC4wNTF2LS4zODZoMS4xOTV2My40NTJjLjAwNy4zLjEyOC40MjUuMzA0LjQyNS40IDAgLjY3Ny0uNTgzLjY3My0xLjg2MS4wMDQtMi4zNzYtMS43MDUtMi45MTQtMy4xODctMi45MTQtMi4zNCAwLTMuNDE1IDEuNTIyLTMuNDIyIDMuMzg3LjAwNyAyLjEyNyAxLjIyIDMuMjc3IDMuNDMzIDMuMjc3LjgwOCAwIDEuNTk4LS4xNzYgMi4wMDYtLjM0OWwuMzkzIDEuMTIyYy0uNDM1LjI3LTEuNDE5LjUwOC0yLjQ5My41MDgtMi45OCAwLTQuNzIzLTEuNjYtNC43MjctNC40OTYuMDA0LTIuODA0IDEuNzQ4LTQuNzIgNC44MTctNC43MlpNNy45NjQgNi43OWMtLjc2IDAtMS4xODUuNDU5LTEuMTg4IDEuMjQuMDAzLjY4My4zIDEuMzMyIDEuMjAyIDEuMzMyLjgyMSAwIDEuMDk0LS40NzMgMS4wNzctMS4zNDMtLjAwNC0uNzE4LS4yMDQtMS4yMy0xLjA5MS0xLjIzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Bbm5vdGF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuQXJyYXkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5BcnJheShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjM5MiAxMlY0aDIuNzEzdjEuMTRoLTEuMjF2NS43MmgxLjIxVjEySDQuMzkyWm03LjY5Mi04djhIOS4zN3YtMS4xNGgxLjIwOVY1LjE0SDkuMzdWNGgyLjcxNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQXJyYXk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5CaW5hcnkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5CaW5hcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIgNEg0djhoOFY0Wk04LjUgNS41aC0zdjVoM3YtNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQmluYXJ5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuQm9vbGVhbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkJvb2xlYW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxM0E1IDUgMCAxIDEgOCAzYTUgNSAwIDAgMSAwIDEwWm0tMi44MjgtMi4xNzJhNCA0IDAgMCAxIDUuNjU2LTUuNjU2Yy4wMDQuMDEzLTUuNjQ1IDUuNjc0LTUuNjU2IDUuNjU2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Cb29sZWFuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuQ2xhc3MgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5DbGFzcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS4zMzMgNy4wMjdIOS4zNzVjLS4wNTYtLjcwOC0uNDgtMS4xODctMS4yMjItMS4xODctLjk3MiAwLTEuNS44MDYtMS41IDIuMTYgMCAxLjQzLjU0NSAyLjE2IDEuNDg2IDIuMTYuNzA4IDAgMS4xMzktLjQxNSAxLjIzNi0xLjA4bDEuOTU4LjAxNUMxMS4yMzYgMTAuNDE4IDEwLjE4MSAxMiA4LjA5NyAxMmMtMS45NTggMC0zLjQzLTEuNDEtMy40My00IDAtMi42IDEuNTE0LTQgMy40My00IDEuNzkyIDAgMy4wODQgMS4wOTUgMy4yMzYgMy4wMjdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkNsYXNzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyA0YTEgMSAwIDAgMSAxLTFoOGExIDEgMCAwIDEgMSAxdjUuOTk2YTEgMSAwIDAgMS0xIDFoLTEuNjYxTDcuNCAxMy4yQS4yNS4yNSAwIDAgMSA3IDEzdi0yLjAwNEg0YTEgMSAwIDAgMS0xLTFWNHptMS41IDFhLjUuNSAwIDAgMSAuNS0uNWg2YS41LjUgMCAwIDEgLjUuNXY0YS41LjUgMCAwIDEtLjUuNWgtLjlMOCAxMVY5LjVINWEuNS41IDAgMCAxLS41LS41VjV6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi43NSA2YTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMnptMi41IDBhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuQ29uc3RhbnQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Db25zdGFudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm05LjQxNCAzLjc1NyAyLjgyOSAyLjgyOWEyIDIgMCAwIDEgMCAyLjgyOGwtMi44MjkgMi44MjlhMiAyIDAgMCAxLTIuODI4IDBMMy43NTcgOS40MTRhMiAyIDAgMCAxIDAtMi44MjhsMi44MjktMi44MjlhMiAyIDAgMCAxIDIuODI4IDBabS0xLjc0NyAyLjkxYTEgMSAwIDAgMC0xIDF2LjY2NmExIDEgMCAwIDAgMSAxaC42NjZhMSAxIDAgMCAwIDEtMXYtLjY2NmExIDEgMCAwIDAtMS0xaC0uNjY2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Db25zdGFudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkRhdGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5EYXRlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzIDExLjU2N0MxMyAxMi4zNiAxMi4zNiAxMyAxMS41NjcgMTNINC40MzNDMy42NCAxMyAzIDEyLjM2IDMgMTEuNTY3VjQuNDMzQzMgMy42NCAzLjY0IDMgNC40MzMgM0g2di0uNDk1YS41MS41MSAwIDAgMSAuNDEyLS40OTdMNi41IDJjLjI3NiAwIC41LjIxNC41LjUwNVYzaDJ2LS40OTVhLjUxLjUxIDAgMCAxIC40MTItLjQ5N0w5LjUgMmMuMjc2IDAgLjUuMjE0LjUuNTA1VjNoMS41NjdDMTIuMzYgMyAxMyAzLjY0IDEzIDQuNDMzdjcuMTM0Wk00IDZ2NS4zM2MwIC4zNy4zLjY3LjY3LjY3aDYuNjZjLjM3IDAgLjY3LS4zLjY3LS42N1Y2SDRabTEuNSA0Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMNiAxMC41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDUuNSAxMWEuNTA1LjUwNSAwIDAgMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw1LjUgMTBaTTggMTBjLjI0NSAwIC40NS4xODMuNDkyLjQxMmwuMDA4LjA4OGMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw4IDExYS41MDUuNTA1IDAgMCAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDggMTBabTIuNSAwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMMTEgMTAuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5MkwxMC41IDExYS41MDUuNTA1IDAgMCAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDEwLjUgMTBabS01LTEuNWMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDYgOWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw1LjUgOS41QS41MDUuNTA1IDAgMCAxIDUgOWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw1LjUgOC41Wm0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDguNSA5YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDggOS41YS41MDUuNTA1IDAgMCAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDggOC41Wm0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDExIDljMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMMTAuNSA5LjVBLjUwNS41MDUgMCAwIDEgMTAgOWMwLS4yNDUuMTgzLS40NS40MTItLjQ5MkwxMC41IDguNVpNNS41IDdjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw2IDcuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw1LjUgOGEuNTA1LjUwNSAwIDAgMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw1LjUgN1pNOCA3Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMOC41IDcuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw4IDhhLjUwNS41MDUgMCAwIDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMOCA3Wm0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDExIDcuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5MkwxMC41IDhhLjUwNS41MDUgMCAwIDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMMTAuNSA3Wk00IDVoOHYtLjMzYzAtLjM3LS4zLS42Ny0uNjctLjY3SDQuNjdDNC4zIDQgNCA0LjMgNCA0LjY3VjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkRhdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5EaW1lbnNpb24gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5EaW1lbnNpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAxMC41YS41LjUgMCAwIDAtMSAwdjFhLjUuNSAwIDAgMCAuNS41aDFhLjUuNSAwIDAgMCAwLTFIMTJ2LS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMgMTJoMy4wNzhjLjcyOCAwIDEuMzctLjEyNyAxLjkyNC0uMzgzYTMuNSAzLjUgMCAxIDAgMi4wNTMtMy4zMDZjLjAwNS0uMTAxLjAwOC0uMjA1LjAwOC0uMzExIDAtLjgzMy0uMTY1LTEuNTQ4LS40OTMtMi4xNDVBMy4zMDkgMy4zMDkgMCAwIDAgOC4xOCA0LjQ4QzcuNTggNC4xNiA2Ljg3IDQgNi4wNDcgNEgzdjhabTYuNzg3LTIuMzIxQTIuNSAyLjUgMCAwIDAgMTEuNSAxNGEyLjUgMi41IDAgMSAwLTEuNzEzLTQuMzIxWk02IDEwLjE1NmgtLjgyOFY1Ljg0NGguNzY2Yy40MTYgMCAuNzY4LjA2NCAxLjA1NC4xOTEuMjkuMTI4LjUwOC4zNDguNjU2LjY2LjE1MS4zMTMuMjI3Ljc0OC4yMjcgMS4zMDUgMCAuNTU3LS4wNzQuOTkyLS4yMjMgMS4zMDVhMS4yOSAxLjI5IDAgMCAxLS42NC42NmMtLjI3OS4xMjctLjYxNi4xOTEtMS4wMTIuMTkxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5EaW1lbnNpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5FbGVtZW50ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRWxlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm03LjM5IDkuNzM2LTEuMDQxLjk0TDMuMjU4IDhsMy4wOS0yLjY3NyAxLjA0MS45NC0yLjAzMiAxLjcyMnYuMDNsMi4wMzIgMS43MjFabTIuNzc3Ljk0LTEuMDQtLjk0IDIuMDMyLTEuNzIxdi0uMDNMOS4xMjYgNi4yNjRsMS4wNC0uOTRMMTMuMjU5IDhsLTMuMDkxIDIuNjc3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5FbGVtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuRW51bSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVudW0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS4yMTEgMTJWNGg1LjU3OHYxLjU3SDcuMTQ1djEuNjQxaDMuMzU5djEuNTc0SDcuMTQ1djEuNjQ1aDMuNjQ0VjEyelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5FbnVtOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuRW51bU1lbWJlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVudW1NZW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy42ODIgMTJWOS4yNDdsMS4wMjMtLjg2MWEuNS41IDAgMCAwLS4wMDMtLjc2OGwtMS4wMi0uODQ0VjRoNS41Nzh2MS41N0g5LjYxNXYxLjY0aDMuMzZ2MS41NzVoLTMuMzZ2MS42NDVoMy42NDVWMTJINy42ODJabS43NDMtNC4xMDNhLjEzOC4xMzggMCAwIDEgMCAuMjA2TDYuMTU4IDkuOTdhLjEzMy4xMzMgMCAwIDEtLjIxOC0uMTAzdi0uOTM0SDIuODczQS4xMzMuMTMzIDAgMCAxIDIuNzQgOC44VjcuMmMwLS4wNzQuMDYtLjEzMy4xMzMtLjEzM0g1Ljk0di0uOTM0YS4xMzMuMTMzIDAgMCAxIC4yMTgtLjEwM2wyLjI2NyAxLjg2N1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRW51bU1lbWJlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkV2ZW50ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRXZlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuMjI1IDUuNjU2YzAgLjQyMy0uMTA2Ljc5LS4zMTggMS4xMDItLjIxMS4zMTEtLjUxLjU3LS44OTguNzc1YTUuNDM1IDUuNDM1IDAgMCAxLTEuMzkyLjQ4NWMtLjU0LjExNy0xLjE0LjE5My0xLjc5OC4yMjlhNi4wNDcgNi4wNDcgMCAwIDAtLjAzNS42N2MwIC4yNTguMDIuNTEuMDYyLjc1Ny4wNC4yNDcuMTE0LjQ2NC4yMi42NTJzLjI1LjM0LjQzMi40NTguNDE0LjE3Ni42OTYuMTc2Yy4yMTEgMCAuNDY3LS4wNDQuNzY2LS4xMzIuMy0uMDg4LjYyLS4yNDQuOTYtLjQ2Ny4xMDYtLjA3LjE5Mi0uMTI5LjI1Ni0uMTc2YS4zNjUuMzY1IDAgMCAxIC4yMi0uMDdjLjExOCAwIC4xOTcuMDYxLjIzOC4xODVhLjk5Ljk5IDAgMCAxIC4wNjIuMjU1IDcuMSA3LjEgMCAwIDEtLjU3My40NjcgNC45MyA0LjkzIDAgMCAxLS43NzUuNDY3Yy0uMjg4LjE0MS0uNi4yNjEtLjkzNC4zNjEtLjMzNS4xLS42NzguMTUtMS4wMy4xNS0uNTQxIDAtLjk4Mi0uMDg4LTEuMzIyLS4yNjRhMi4wNzIgMi4wNzIgMCAwIDEtLjc5My0uNjg4IDIuNjI2IDIuNjI2IDAgMCAxLS4zODgtLjkzMyA0Ljk0OSA0Ljk0OSAwIDAgMS0uMTA2LTEuMDA1YzAtLjYzNC4xMDMtMS4yNTcuMzA5LTEuODY4LjIwNS0uNjEuNDk5LTEuMTU3Ljg4LTEuNjM4LjM4My0uNDgyLjgzOC0uODcgMS4zNjYtMS4xNjNBMy41NjcgMy41NjcgMCAwIDEgOS4wOTMgNGMuNTk5IDAgMS4xMDQuMTI2IDEuNTE1LjM3OS40MTEuMjUyLjYxNy42NzguNjE3IDEuMjc3Wm0tMi40NjctLjk1MWMtLjIyMyAwLS40MzUuMDgtLjYzNS4yMzgtLjIuMTU4LS4zODEuMzczLS41NDYuNjQzLS4xNjQuMjctLjMwNS41NzgtLjQyMy45MjVhNi40MiA2LjQyIDAgMCAwLS4yNjQgMS4xMDFjLjQ3LS4wNDcuODYzLS4xMzUgMS4xOC0uMjY0LjMxOC0uMTMuNTctLjI4NS43NTgtLjQ2Ny4xODgtLjE4Mi4zMjMtLjM4OC40MDUtLjYxNy4wODMtLjIyOS4xMjQtLjQ2Ny4xMjQtLjcxMyAwLS4yNy0uMDU2LS40NzktLjE2OC0uNjI2YS41MTkuNTE5IDAgMCAwLS40MzEtLjIyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5FdmVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkV4Y2VwdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkV4Y2VwdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNDYxIDcuMzFoMy4wNTVhLjc0Ljc0IDAgMCAxIC42NiAxLjA3NGwtMi4xNDEgNC4yMTFhLjc0Ljc0IDAgMSAxLTEuMzE5LS42N0w5LjMxIDguNzlINi4yNTZhLjc0Ljc0IDAgMCAxLS42Ni0xLjA3NWwyLjE5LTQuMzFhLjc0Ljc0IDAgMCAxIDEuMzE5LjY3TDcuNDYxIDcuMzFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkV4Y2VwdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkZpZWxkID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRmllbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS4yNyAxMlY0aDUuNDZ2MS41N0g3LjIwM3YxLjY0MWgzLjE4djEuNTc0aC0zLjE4VjEyelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GaWVsZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkZpbGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5GaWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44NjcgMi42NjdINGEuNjY3LjY2NyAwIDAgMC0uNjY3LjY2NnY5LjMzNGMwIC4zNjguMjk5LjY2Ni42NjcuNjY2aDhhLjY2Ny42NjcgMCAwIDAgLjY2Ny0uNjY2VjUuNjE5YS42NjkuNjY5IDAgMCAwLS4xODMtLjQ1OWwtMi4xMzMtMi4yODVhLjY2OC42NjggMCAwIDAtLjQ4NC0uMjA4bTEuNDY2IDRWMTJINC42NjdWNGg0djIuMzMzYzAgLjE4NC4xNDkuMzM0LjMzMy4zMzRoMi4zMzNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkZpbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5GbGF0dGVuZWQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5GbGF0dGVuZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjI1IDNhLjI1LjI1IDAgMCAwLS4yNS4yNXYyYzAgLjEzOC4xMTIuMjUuMjUuMjVoOS41YS4yNS4yNSAwIDAgMCAuMjUtLjI1di0yYS4yNS4yNSAwIDAgMC0uMjUtLjI1aC05LjV6bTAgMy43NUEuMjUuMjUgMCAwIDAgMyA3djJjMCAuMTM4LjExMi4yNS4yNS4yNUg1LjVBLjI1LjI1IDAgMCAwIDUuNzUgOVY3YS4yNS4yNSAwIDAgMC0uMjUtLjI1SDMuMjV6bS0uMjUgNGEuMjUuMjUgMCAwIDEgLjI1LS4yNUg1LjVhLjI1LjI1IDAgMCAxIC4yNS4yNXYyYS4yNS4yNSAwIDAgMS0uMjUuMjVIMy4yNWEuMjUuMjUgMCAwIDEtLjI1LS4yNXYtMnptMy4zMS0uNzI3Yy0uMDgyLS4wNzMtLjA4Mi0uMjI0IDAtLjI5NmwzLjA1NC0yLjY4M2EuMTcuMTcgMCAwIDEgLjE5LS4wMjZjLjA2NC4wMzIuMTA0LjEuMTA0LjE3NHYxLjM0MWwzLjE2MS0uMDE2Yy4xIDAgLjE4LjA4Ni4xOC4xOTJ2Mi4zYzAgLjEwNS0uMDguMTkxLS4xOC4xOTFsLTMuMTYxLjAxN3YxLjM0MWMwIC4wNzQtLjA0LjE0Mi0uMTAzLjE3NGEuMTcuMTcgMCAwIDEtLjE5LS4wMjVMNi4zMSAxMC4wMjN6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkZsYXR0ZW5lZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkZ1bmN0aW9uID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRnVuY3Rpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuMjY2IDQuMTVWNS42M2EyLjQxIDIuNDEgMCAwIDAtLjg1OS0uMTQ1Yy0uNjkyIDAtMS4wNjUuMzQ2LTEuMTc3IDEuMDQzbC0uMTEuNjI1aDEuODI4djEuNDRIOC45MjFsLS4yMDQgMS4xMTVDOC40NTUgMTEuMzI1IDcuNTE3IDEyIDUuOSAxMmMtLjQ2OSAwLS44ODItLjA2MS0xLjE2Ni0uMTY3di0xLjQ5NWMuMjczLjExNy41OTEuMTc4LjkwMy4xNzguNjU5IDAgMS4wMS0uMjkgMS4xMjctMS4wMTVsLjE1Ny0uOTFINS4yNDdWNy4xNTJoMS44MzdsLjE4OC0uODQyQzcuNTM0IDQuNzE0IDguNDMyIDQgMTAuMTkgNGMuMzkgMCAuODUzLjA2NyAxLjA3Ni4xNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5HZW8gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5HZW8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAzYzEuNjM2IDAgMy4wODguNzg1IDQgMiAuNjI4LjgzNiAxIDEuODc1IDEgM2E0Ljk3OCA0Ljk3OCAwIDAgMS0uOTk5IDNIMTJhNC45OTIgNC45OTIgMCAwIDEtNCAyIDQuOTkyIDQuOTkyIDAgMCAxLTQtMS45OTlWMTFhNSA1IDAgMCAxIDQtOFptLjk0OCA4SDcuMDUyYy4yNzcuNjI2LjYyMyAxIC45NDggMSAuMzI1IDAgLjY3LS4zNzQuOTQ4LTFaTTYgMTFsLS42NDUuMDAxYy4yNzQuMjQyLjU4MS40NDYuOTE0LjYwNkE1LjQ0NSA1LjQ0NSAwIDAgMSA2IDExLjAwMVptNC42NDUuMDAxSDEwYTUuNTEgNS41MSAwIDAgMS0uMjY5LjYwNmMuMzMzLS4xNi42NC0uMzY0LjkxNC0uNjA2Wm0tNS4xMzMtMi41SDQuMDMxYy4wNjguNTQuMjQzIDEuMDQ4LjUwNSAxLjVoMS4xNzJhOS4xODYgOS4xODYgMCAwIDEtLjE5Ni0xLjVabTMuOTc1IDBINi41MTNjLjAzLjU0NC4xMDQgMS4wNS4yMSAxLjVoMi41NTNjLjEwNy0uNDUuMTgyLS45NTYuMjEtMS41Wm0yLjQ4MiAwaC0xLjQ4MWE5LjE4NiA5LjE4NiAwIDAgMS0uMTk2IDEuNWgxLjE3MmMuMjYyLS40NTIuNDM3LS45Ni41MDUtMS41Wk01LjcwOCA2IDQuNTM1IDZjLS4yNjEuNDUyLS40MzcuOTYtLjUwNCAxLjVoMS40ODFBOS4xODcgOS4xODcgMCAwIDEgNS43MDggNlptMy41NjggMEg2LjcyNGMtLjEwNy40NDktLjE4Mi45NTUtLjIxIDEuNDk5aDIuOTczYTguNDc5IDguNDc5IDAgMCAwLS4yMS0xLjVaTTExLjQ2NSA2aC0xLjE3M2MuMTAyLjQ2Ny4xNy45NzIuMTk2IDEuNWgxLjQ4MWEzLjk3NCAzLjk3NCAwIDAgMC0uNTA0LTEuNVpNNi4yNjkgNC4zOTNsLS4xMjQuMDYyYy0uMjg2LjE1LS41NTEuMzMzLS43OS41NDVINmE1LjUxIDUuNTEgMCAwIDEgLjI2OS0uNjA3Wk04IDRjLS4zMjYgMC0uNjcxLjM3NS0uOTQ4IDFoMS44OTZDOC42NzEgNC4zNzYgOC4zMjYgNCA4IDRabTEuNzMuMzkzLjAzOC4wNzFjLjA4My4xNjguMTYxLjM0Ny4yMzIuNTM2aC42NDZhNC4wMDYgNC4wMDYgMCAwIDAtLjkxNS0uNjA3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5HZW87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5IaXN0b2dyYW0gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5IaXN0b2dyYW0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDNoNHY1aDJWNS41aDRWMTNIMy4wMDF2LTFIM1Yzem0xIDloMlY0SDR2OHptMyAwaDJWOUg3djN6bTMgMGgyVjYuNWgtMlYxMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuSGlzdG9ncmFtOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuSVAgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5JUChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMSAzYTIgMiAwIDAgMSAyIDJ2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNlptLTEgMkg4djZoMVY5LjAxNGgxYy4yOTgtLjAxMyAyIDAgMi0yLjAxOCAwLTEuNzQtMS4zMTQtMS45NTItMS44MjUtMS45ODdMMTAgNVpNNiA1SDV2NmgxVjVabTQgLjk4NGMuNjY3IDAgMSAuMzM2IDEgMS4wMDhDMTEgNy42NjQgMTAuNjY3IDggMTAgOEg5VjUuOTg0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5JUDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkludGVyZmFjZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkludGVyZmFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04Ljk2NyAxMC42NTNoMS43MjdWMTJINS4zMDZ2LTEuMzQ3aDEuNzI3VjUuMzQ3SDUuMzA2VjRoNS4zODh2MS4zNDdIOC45Njd2NS4zMDZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkludGVyZmFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkpvaW4gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Kb2luKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSA0LjV2MS4wMjVjMCAxLjI2OS0xLjE4NSAxLjkwOC0yLjExMiAxLjczN2EuNzUuNzUgMCAxIDAgMCAxLjQ3NWMuOTI3LS4xNyAyLjExMi40NyAyLjExMiAxLjczOXYxLjAyM2g0di0xLjAwNWEyLjUgMi41IDAgMCAxIDAtNC45ODhWNC41aC00Wk0xMyA0YTEgMSAwIDAgMC0xLTFIN2ExIDEgMCAwIDAtMSAxdjEuNTI1YzAgLjE3Mi0uMTcyLjI5My0uMzQxLjI2MmEyLjI1IDIuMjUgMCAxIDAgMCA0LjQyNmMuMTctLjAzMS4zNDEuMDkuMzQxLjI2MlYxMmExIDEgMCAwIDAgMSAxaDVhMSAxIDAgMCAwIDEtMVY5LjAwNGEuMTYuMTYgMCAwIDAtLjA0LS4xMDVjLS4xMDktLjEyNS0uNTk0LS4xNi0uNzMyLS4wNjhhMSAxIDAgMSAxIDAtMS42NjJjLjEzOC4wOTIuNjIzLjA1Ny43MzItLjA2OGEuMTYuMTYgMCAwIDAgLjA0LS4xMDVWNFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkpvaW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5LZXkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5LZXkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIuNjY3IDYuNTQyQTMuMjA4IDMuMjA4IDAgMCAxIDguODYgOS42OTRsLS40MzguNDkyYS40MzcuNDM3IDAgMCAxLS4zMjcuMTQ3aC0uNjc4di43M2EuNDM3LjQzNyAwIDAgMS0uNDM4LjQzN0g2LjI1di43M2EuNDM3LjQzNyAwIDAgMS0uNDM4LjQzN0gzLjc3MmEuNDM3LjQzNyAwIDAgMS0uNDM4LS40Mzh2LTEuNDIzYzAtLjExNi4wNDYtLjIyNy4xMjgtLjMxbDIuOTUtMi45NDlhMy4yMDggMy4yMDggMCAwIDEgMy4wNDctNC4yMTQgMy4yMDIgMy4yMDIgMCAwIDEgMy4yMDkgMy4yMDlabS0zLjIwOS0uODc1YS44NzUuODc1IDAgMSAwIDEuNzUgMCAuODc1Ljg3NSAwIDAgMC0xLjc1IDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbktleTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbktleXdvcmQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5LZXl3b3JkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMzMgMTAuMjhjLS4xMi4wNC0uMjkuMDctLjQyLjA3LS4yMyAwLS40My0uMDgtLjUzLS4zbC0uNjMtMS4zNCAyLjMyLTIuODFIOS4zTDcuNzYgNy45M2gtLjA5TDguMjIgNEg2LjU5bC0xLjA1IDcuNWgxLjYzbC4yNy0xLjk0aC4xbC40MyAxLjEyYy4yNy43MS43NC45MiAxLjMzLjkyLjIzIDAgLjYtLjA0Ljg2LS4xMWwuMTctMS4yMXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuS2V5d29yZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbk1ldGhvZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1ldGhvZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zLjMzMyAxMS4wMjdWNS4wNWgyLjA1OXYxLjEzNmguMDYzYy4yNS0uNzQ3Ljg5MS0xLjIxNCAxLjcyOC0xLjIxNC44NDggMCAxLjUyNC40ODMgMS42NSAxLjIxNGguMDYzYy4yMDQtLjczMS45MjctMS4yMTQgMS44MjItMS4yMTQgMS4xNTUgMCAxLjk0OS43OTggMS45NDkgMi4wMjN2NC4wM2gtMi4xNjlWNy41NDJjMC0uNTIxLS4yOS0uODQtLjczOC0uODRzLS43MjMuMzE5LS43MjMuODR2My40ODZINi45NjNWNy41NGMwLS41MjEtLjI5LS44NC0uNzM5LS44NC0uNDQ3IDAtLjcyMi4zMTktLjcyMi44NHYzLjQ4NkgzLjMzM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTWV0aG9kOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuTWV0cmljQ291bnRlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1ldHJpY0NvdW50ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAxMC41YS41LjUgMCAwIDAtMSAwdjFhLjUuNSAwIDAgMCAuNS41aDFhLjUuNSAwIDAgMCAwLTFIMTJ2LS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggM2g0djUuMDM1QTMuNSAzLjUgMCAxIDEgOC4zMzcgMTNIMlY5aDNWNmgzVjNabTEuMDUgOWEyLjUgMi41IDAgMSAxIDQuOTAyLTEgMi41IDIuNSAwIDAgMS00LjkwMiAxWk0xMSA4LjAzNWEzLjQ5IDMuNDkgMCAwIDAtMiAxLjAxNlY0aDJ2NC4wMzVaTTggMTJINlY3aDJ2NVptLTMgMHYtMkgzdjJoMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTWV0cmljQ291bnRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbk1ldHJpY0dhdWdlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTWV0cmljR2F1Z2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAxMC41YS41LjUgMCAwIDAtMSAwdjFhLjUuNSAwIDAgMCAuNS41aDFhLjUuNSAwIDAgMCAwLTFIMTJ2LS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgM0gydjEwaDYuMzM3QTMuNSAzLjUgMCAxIDAgMTIgOC4wMzVWNUg4djJINlYzWm01IDUuMDM1VjZIOXYzLjA1YTMuNDkgMy40OSAwIDAgMSAyLTEuMDE1Wk05IDExLjVhMi41IDIuNSAwIDEgMSA1LjAwMiAwQTIuNSAyLjUgMCAwIDEgOSAxMS41Wk04IDhINnY0aDJWOFpNNSA0SDN2OGgyVjRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1ldHJpY0dhdWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuTW9kdWxlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTW9kdWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOCAyIDUuMTk2IDN2LjE3OGwtLjg2Ni40NjhWNS41TDggMyAzLjY3IDUuNXY1TDggMTNsNC4zMy0yLjVWNS43N2wuODY2LS40NzRWMTFMOCAxNGwtNS4xOTYtM1Y1TDggMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMjQzIDQuNDI5IDkuNTk3IDcuMDQgOCA3LjkyOCAzLjc0MyA1LjU2M2EuNS41IDAgMSAwLS40ODYuODc0TDcuNSA4Ljc5NFYxMy41aDFWOC43OTRsNC4yNDMtMi4zNTdhLjUwOC41MDggMCAwIDAgLjA2LS4wNGwuMzkyLS4yMDJWNS4wNDdsLS45MTcuNTA1YS41NzMuNTczIDAgMCAwLS4wMi4wMWwtLjEwNi4wNi0uMTkxLjEwNS0xLjM1NS43NTMtNC44NDktMi45MDktLjUxNC44NThaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1vZHVsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbk5hbWVzcGFjZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk5hbWVzcGFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTcuNTU2IDguNDE2LS44MDQtMS42OGgtLjAzNnY1LjY0SDVWNGgxLjk5MmwyLjI5MiAzLjk2LjgwNCAxLjY4aC4wMzZWNGgxLjcxNnY4LjM3Nkg5Ljg0OGwtMi4yOTItMy45NlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTmFtZXNwYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuTmVzdGVkID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTmVzdGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSAzYzEuMDQ0IDAgMS45MTMuNzU3IDEuOTk0IDEuNzM2bC4wMDYuMTQ5djYuMjNjMCAxLS44MiAxLjgwNS0xLjg0NSAxLjg4TDExIDEzSDkuNTAxYS41LjUgMCAwIDEtLjA5LS45OTJsLjA5LS4wMDhIMTFjLjUyIDAgLjkzNy0uMzUuOTkzLS43ODNsLjAwNy0uMTAydi02LjIzYzAtLjQ0NS0uMzc5LS44MjctLjg4Mi0uODc5TDExIDRIOS41YS41LjUgMCAwIDEtLjA5LS45OTJMOS41IDNIMTFaTTYuNSAzYS41LjUgMCAwIDEgLjA5Ljk5Mkw2LjUgNEg1Yy0uNTIgMC0uOTM3LjM1LS45OTMuNzgzTDQgNC44ODV2Ni4yM2MwIC40NDUuMzc5LjgyNy44ODIuODc5TDUgMTJoMS41YS41LjUgMCAwIDEgLjA5Ljk5Mkw2LjUgMTNINWMtMS4wNDQgMC0xLjkxMy0uNzU3LTEuOTk0LTEuNzM2TDMgMTEuMTE1di02LjIzYzAtMSAuODItMS44MDUgMS44NDUtMS44OEw1IDNoMS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS44NjQgNy4yNWEuNzE0LjcxNCAwIDEgMSAwIDEuNDI5LjcxNC43MTQgMCAwIDEgMC0xLjQyOVptMi4xNDMgMGEuNzE0LjcxNCAwIDEgMSAwIDEuNDI5LjcxNC43MTQgMCAwIDEgMC0xLjQyOVptMi4xNDMgMGEuNzE0LjcxNCAwIDEgMSAwIDEuNDI5LjcxNC43MTQgMCAwIDEgMC0xLjQyOVpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk5lc3RlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbk51bGwgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OdWxsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtNS4wMDIgMTIuNDEyLS45NjIuOTYyYTEgMSAwIDAgMS0xLjQxNC0xLjQxNGwuOTYyLS45NjJhNS4zMzMgNS4zMzMgMCAwIDEgNy40MS03LjQxbC45NjItLjk2MmExIDEgMCAxIDEgMS40MTQgMS40MTRsLS45NjIuOTYyYTUuMzMzIDUuMzMzIDAgMCAxLTcuNDEgNy40MVptLjk2Ni0uOTY2YTQgNCAwIDAgMCA1LjQ3OC01LjQ3OGwtNS40NzggNS40NzhabS0xLjQxNC0xLjQxNCA1LjQ3OC01LjQ3OGE0IDQgMCAwIDAtNS40NzggNS40NzhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk51bGw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5OdW1iZXIgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OdW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjggOS44MTJoLS44NDJsLS43OCAyLjMzNUg1LjAzMWwuNzgtMi4zMzVINC42bC4xODItMS4wNDNoMS4zNzNsLjUwNy0xLjUwNEg1LjQ1NGwuMTg4LTEuMDQyaDEuMzY3bC43OTItMi4zN0g4Ljk0bC0uNzkyIDIuMzdoLjg0OWwuNzkyLTIuMzdoMS4xNDVsLS43OTIgMi4zN0gxMS40bC0uMTgyIDEuMDQySDkuOEw5LjI5MyA4Ljc3aDEuMjQ4bC0uMTgzIDEuMDQzSDguOTQ2bC0uNzc1IDIuMzM1SDcuMDI2TDcuOCA5LjgxMlptLS41LTEuMDQzaC44NDJsLjUxMy0xLjUwNGgtLjg0OUw3LjMgOC43N1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTnVtYmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuT2JqZWN0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuT2JqZWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNjMgMTJjLTEuMjk0IDAtMi4zODMtLjEwNS0yLjM4My0xLjgwMlY5LjZjMC0uNjM4LS4yNDctLjkxNC0uOTgtLjkxNHYtMS4zN2MuNzMzIDAgLjk4LS4yOC45OC0uOTE1di0uNkM0LjI0NyA0LjEwNSA1LjMzNiA0IDYuNjMxIDR2MS4xNGMtLjc1OSAwLS44ODYuMjcyLS44ODYuODQzdi44MTNjMCAuNDc5LS4yMjUuOTM2LTEuMjEyIDEuMTMzdi4xNDJjLjk4Ny4xOTcgMS4yMTIuNjU0IDEuMjEyIDEuMTMzdi44MTNjMCAuNTcuMTI3Ljg0NC44ODYuODQ0VjEyWm0yLjI2Ni04YzEuMjk1IDAgMi4zODQuMTA1IDIuMzg0IDEuODAyVjYuNGMwIC42MzguMjQ3LjkxNC45OC45MTR2MS4zN2MtLjczMyAwLS45OC4yOC0uOTguOTE1di42QzExLjI4IDExLjg5NSAxMC4xOSAxMiA4Ljg5NiAxMnYtMS4xNGMuNzU5IDAgLjg4Ni0uMjcyLjg4Ni0uODQzdi0uODEzYzAtLjQ3OS4yMjUtLjkzNiAxLjIxMi0xLjEzM1Y3LjkzYy0uOTg3LS4xOTctMS4yMTItLjY1NC0xLjIxMi0xLjEzM3YtLjgxM2MwLS41Ny0uMTI3LS44NDQtLjg4Ni0uODQ0VjRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk9iamVjdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbk9wZXJhdG9yID0gZnVuY3Rpb24gRXVpSWNvblRva2VuT3BlcmF0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi42NjcgOC4wMDJjMC0xLjUuMzk0LTIuNzQzIDEuMjQ4LTMuODIyaDEuNDM3Yy0uNjUyLjgtMS4xNCAyLjM4OC0xLjE0IDMuODIyIDAgMS40My40ODggMy4wMTggMS4xNCAzLjgxOEgzLjkxNWMtLjg1NC0xLjA4LTEuMjQ4LTIuMzIyLTEuMjQ4LTMuODE4Wk02Ljc3IDkuOTk4bC0uODE4LS44MDMgMS4yMy0xLjE5Ny0xLjIzLTEuMjAzLjgzLS43OTMgMS4yMjEgMS4xOTNMOS4yMyA2LjAwMmwuODE4Ljc5My0xLjIyNyAxLjIgMS4yMjcgMS4yLS44MTguODAzTDggOC43OTUgNi43NyA5Ljk5OFptNi41NjMtMmMwIDEuNS0uMzk0IDIuNzQzLTEuMjQ4IDMuODIyaC0xLjQzN2MuNjUyLS44IDEuMTQtMi4zODggMS4xNC0zLjgyMiAwLTEuNDMtLjQ4OC0zLjAxOC0xLjE0LTMuODE4aDEuNDM3Yy44NTQgMS4wOCAxLjI0OCAyLjMyMiAxLjI0OCAzLjgxOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuT3BlcmF0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5QYWNrYWdlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUGFja2FnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm04LjA0OSAzLjc4NSAzLjg1MiAxLjAwNi00LjA0OSAxLjEwM0w0IDQuNzkxbDMuOTUxLTEuMDA2YS4xOS4xOSAwIDAgMSAuMDk4IDBabS4wNzMgMi42NTQgNC41NDUtMS4zMDZ2NS40NWwtLjEzMS4xODQtNC40MTQgMS40NTVWNi40MzlabS00Ljc4OSA0LjE0NVY1LjE4OEw3LjQ5OCA2LjQxdjUuODFsLTQuMDM0LTEuNDUzLS4xMy0uMTgzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5QYWNrYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuUGFyYW1ldGVyID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUGFyYW1ldGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuODg5IDEyVjRoMy4zMDRjMS43OTcgMCAyLjkyMiAxLjExNyAyLjkxOCAyLjc3LjAwNCAxLjY1Mi0xLjE0NCAyLjc0Ni0yLjk3NiAyLjc0Nkg2LjgyMlYxMkg0Ljg5Wm0xLjkzMy00LjAwOGguOTUzYy44NjggMCAxLjMzNi0uNDcyIDEuMzMyLTEuMjIyLjAwNC0uNzMtLjQ2NC0xLjIxMS0xLjMzMi0xLjIxMWgtLjk1M3YyLjQzM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUGFyYW1ldGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuUGVyY29sYXRvciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblBlcmNvbGF0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS41IDdhMS41IDEuNSAwIDEgMCAwLTMgMS41IDEuNSAwIDAgMCAwIDNabTAgMWEyLjUgMi41IDAgMSAwIDAtNSAyLjUgMi41IDAgMCAwIDAgNVpNMTEgOWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTAgMWEyIDIgMCAxIDAgMC00IDIgMiAwIDAgMCAwIDRabS0yLjUgMS41YS41LjUgMCAxIDEtMSAwIC41LjUgMCAwIDEgMSAwWm0xIDBhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDBaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5QZXJjb2xhdG9yOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuUHJvcGVydHkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Qcm9wZXJ0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljg4OSAxMlY0aDMuMzA0YzEuNzk3IDAgMi45MjIgMS4xMTcgMi45MTggMi43Ny4wMDQgMS42NTItMS4xNDQgMi43NDYtMi45NzYgMi43NDZINi44MjJWMTJINC44OVptMS45MzMtNC4wMDhoLjk1M2MuODY4IDAgMS4zMzYtLjQ3MiAxLjMzMi0xLjIyMi4wMDQtLjczLS40NjQtMS4yMTEtMS4zMzItMS4yMTFoLS45NTN2Mi40MzNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblByb3BlcnR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuUmFuZ2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SYW5nZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44MiA1LjExNmEuNS41IDAgMCAwLS43MDQuNzA0bC4wNjQuMDY0TDExLjcxOSA4bC0yLjU0IDIuMTE2YS41LjUgMCAwIDAtLjExNC42M2wuMDUuMDc0YS41LjUgMCAwIDAgLjYzLjExNWwuMDc1LS4wNSAzLTIuNWEuNS41IDAgMCAwIC4wNzEtLjY5N2wtLjA3LS4wNzItMy0yLjVaTTYuMTggNS4xMTZhLjUuNSAwIDAgMSAuNzA0LjcwNGwtLjA2NC4wNjRMNC4yODEgOGwyLjU0IDIuMTE2YS41LjUgMCAwIDEgLjExNC42M2wtLjA1LjA3NGEuNS41IDAgMCAxLS42My4xMTVsLS4wNzUtLjA1LTMtMi41YS41LjUgMCAwIDEtLjA3MS0uNjk3bC4wNy0uMDcyIDMtMi41WlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmFuZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblJhbmtGZWF0dXJlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNHY4aC0yVjZIOXY0SDV2MkgzVjhoNFY0aDZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblJhbmtGZWF0dXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNHY4aC0yVjZIOXY0SDV2MkgzVjhoNFY0aDZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblJhbmtGZWF0dXJlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblJlcG8gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SZXBvKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguNTMzIDkuMDY3Yy0xLjc5MiAwLTIuMzc4LjcyLTIuNTcgMS4xOTRhMS42MDEgMS42MDEgMCAxIDEtMS4xNjMtLjAzN1Y1Ljc3NmExLjU5NSAxLjU5NSAwIDAgMS0xLjA2Ny0xLjUxYzAtLjg4NS43MTUtMS42IDEuNi0xLjYuODg2IDAgMS42LjcxNSAxLjYgMS42IDAgLjctLjQ0MiAxLjI5MS0xLjA2NiAxLjUxdjIuODIxQzYuMzM2IDguMjUxIDcuMDE5IDggOCA4YzEuNDI0IDAgMS44OTktLjcxNSAyLjA1My0xLjE5YTEuNjAzIDEuNjAzIDAgMCAxLS45ODYtMS40NzdjMC0uODg1LjcxNC0xLjYgMS42LTEuNi44ODUgMCAxLjYuNzE1IDEuNiAxLjZhMS41OSAxLjU5IDAgMCAxLTEuMTE1IDEuNTI2Yy0uMTM5Ljc2Mi0uNjU2IDIuMjA4LTIuNjE5IDIuMjA4Wm0tMy4yIDIuMTMzYS41MzUuNTM1IDAgMCAwLS41MzMuNTMzYzAgLjI5NC4yNC41MzQuNTMzLjUzNGEuNTM1LjUzNSAwIDAgMCAwLTEuMDY3Wm0wLTcuNDY3YS41MzUuNTM1IDAgMCAwLS41MzMuNTM0YzAgLjI5My4yNC41MzMuNTMzLjUzMy4yOTQgMCAuNTM0LS4yNC41MzQtLjUzM2EuNTM1LjUzNSAwIDAgMC0uNTM0LS41MzRaTTEwLjY2NyA0LjhhLjUzNS41MzUgMCAwIDAtLjUzNC41MzMuNTM1LjUzNSAwIDAgMCAxLjA2NyAwIC41MzUuNTM1IDAgMCAwLS41MzMtLjUzM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmVwbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblNlYXJjaFR5cGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5TZWFyY2hUeXBlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4yNyA3LjVhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwWk04Ljc3IDcuNWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuNzAyIDEwLjY4MmE0LjUwMSA0LjUwMSAwIDAgMS01Ljc5Ni40ODJMNC4yOCAxMi43ODlhLjc1Ljc1IDAgMCAxLTEuMDYtMS4wNkw0Ljg0NyAxMC4xYTQuNTAxIDQuNTAxIDAgMSAxIDYuODU1LjU4MVptLTUuMzA0LTEuMDZhMyAzIDAgMSAwIDQuMjQzLTQuMjQzQTMgMyAwIDAgMCA2LjM5OCA5LjYyWlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuU2VhcmNoVHlwZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblNlbWFudGljVGV4dCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblNlbWFudGljVGV4dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMi41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMUgzdjEwaDEuNWEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41di0xMVpNMTMuNSAyYS41LjUgMCAwIDEgLjUuNXYxMWEuNS41IDAgMCAxLS41LjVoLTJhLjUuNSAwIDAgMSAwLTFIMTNWM2gtMS41YS41LjUgMCAwIDEgMC0xaDJaTTkuMDk4IDQuNWwtLjI0NCAxLjM5M2guODk2bC0uMjEyIDEuMjExaC0uODk2bC0uNDM1IDIuNTc0Yy0uMDI0LjE3Ni0uMDEzLjMwOC4wMzQuMzk4LjA0Ni4wOS4xNjMuMTM4LjM1LjE0NS4wNzIuMDA0LjIyLS4wMDUuNDQ1LS4wMjZMOC45MSAxMS40NmEyLjc1IDIuNzUgMCAwIDEtLjkxNi4xMjljLS41MjgtLjAwNy0uOTIzLS4xNjItMS4xODYtLjQ2Ni0uMjYyLS4zMDQtLjM3LS43MTYtLjMyLTEuMjM3bC40NTUtMi43OEg2LjI1bC4yMDctMS4yMTJoLjY5NEw3LjM5NCA0LjVoMS43MDRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblNlbWFudGljVGV4dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblNoYXBlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU2hhcGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMgMTB2M2gtM3YtMUg2djFIM3YtM2gxVjZIM1YzaDN2MWg0VjNoM3YzaC0xdjRoMVptLTggMUg0djFoMXYtMVptNyAwaC0xdjFoMXYtMVpNNSA0SDR2MWgxVjRabTcgMGgtMXYxaDFWNFptLTEgMmgtMVY1SDZ2MUg1djRoMXYxaDR2LTFoMVY2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TaGFwZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblN0cmluZyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblN0cmluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTkuMTQ3IDQuMjk3LS4yNTUgMS40NTVoLjkzNmwtLjIyMiAxLjI2NmgtLjkzNWwtLjQ1NSAyLjY4OGMtLjAyNS4xODQtLjAxMy4zMjMuMDM2LjQxNy4wNDguMDkzLjE3LjE0NC4zNjUuMTUxLjA3NS4wMDQuMjMtLjAwNS40NjUtLjAyN2wtLjEzIDEuMzJjLS4zLjA5Ny0uNjE4LjE0Mi0uOTU3LjEzNS0uNTUyLS4wMDctLjk2NS0uMTctMS4yMzktLjQ4Ny0uMjc0LS4zMTctLjM4Ni0uNzQ4LS4zMzUtMS4yOTNsLjQ3Ni0yLjkwNGgtLjcyNWwuMjE2LTEuMjY2aC43MjVsLjI1NC0xLjQ1NWgxLjc4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TdHJpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5TdHJ1Y3QgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5TdHJ1Y3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNC42NjcgNC42NjdoMi42NjZ2Mi42NjZINC42NjdWNC42NjdabTAgNGgyLjY2NnYyLjY2Nkg0LjY2N1Y4LjY2N1ptNC00aDIuNjY2djIuNjY2SDguNjY3VjQuNjY3Wm0wIDRoMi42NjZ2Mi42NjZIOC42NjdWOC42NjdaTTMuMzMzIDMuMzMzdjkuMzM0aDkuMzM0VjMuMzMzSDMuMzMzWm0wLTEuMzMzaDkuMzM0QzEzLjQwMyAyIDE0IDIuNTk3IDE0IDMuMzMzdjkuMzM0YzAgLjczNi0uNTk3IDEuMzMzLTEuMzMzIDEuMzMzSDMuMzMzQTEuMzMzIDEuMzMzIDAgMCAxIDIgMTIuNjY3VjMuMzMzQzIgMi41OTcgMi41OTcgMiAzLjMzMyAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TdHJ1Y3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5TeW1ib2wgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5TeW1ib2woX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjMxNiAxNGE2IDYgMCAxIDEgMC0xMiA2IDYgMCAwIDEgMCAxMlptMC0xLjMzM2E0LjY2NyA0LjY2NyAwIDEgMCAwLTkuMzM0IDQuNjY3IDQuNjY3IDAgMCAwIDAgOS4zMzRabTIuMTktNS43MmgxLjE0M2MuMDE5IDEuNDQ4LS43OTMgMi4zMzgtMS45MjIgMi4zMzgtLjYzMiAwLTEuMTk0LS4yNjctMS43MDYtLjgxMS0uMzYtLjM5Ny0uNjM2LS41NzYtMS0uNTc2LS41MTcgMC0uODQ5LjM1NS0uODg1IDEuMDgzSDQuOTgzYy4wMTQtMS40Ny44NTgtMi4zMTQgMS45NS0yLjMxNC41OTUgMCAxLjEyNS4yNDkgMS42NzguODAyLjM5Mi4zODIuNjQxLjU5NSAxLjAzOC41OTUuNDg0IDAgLjg1Ny0uMzIzLjg1Ny0xLjExNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuU3ltYm9sOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuVGFnID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVGFnKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgOGExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNCA0YTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDYuOTg5YTEgMSAwIDAgMCAuODI1LS40MzZsMi4wNS0zYTEgMSAwIDAgMCAwLTEuMTI4bC0yLjA1LTNBMSAxIDAgMCAwIDEwLjk5IDRINFptLjc1IDEuMjVhLjUuNSAwIDAgMC0uNS41djQuNWEuNS41IDAgMCAwIC41LjVoNS43NDVhLjUuNSAwIDAgMCAuNDA1LS4yMDZsMS42MzYtMi4yNWEuNS41IDAgMCAwIDAtLjU4OEwxMC45IDUuNDU2YS41LjUgMCAwIDAtLjQwNS0uMjA2SDQuNzVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblRhZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblRleHQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5UZXh0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOS4xNDcgNC4yOTctLjI1NSAxLjQ1NWguOTM2bC0uMjIyIDEuMjY2aC0uOTM1bC0uNDU1IDIuNjg4Yy0uMDI1LjE4NC0uMDEzLjMyMy4wMzYuNDE3LjA0OC4wOTMuMTcuMTQ0LjM2NS4xNTEuMDc1LjAwNC4yMy0uMDA1LjQ2NS0uMDI3bC0uMTMgMS4zMmMtLjMuMDk3LS42MTguMTQyLS45NTcuMTM1LS41NTItLjAwNy0uOTY1LS4xNy0xLjIzOS0uNDg3LS4yNzQtLjMxNy0uMzg2LS43NDgtLjMzNS0xLjI5M2wuNDc2LTIuOTA0aC0uNzI1bC4yMTYtMS4yNjZoLjcyNWwuMjU0LTEuNDU1aDEuNzhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblRleHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5Ub2tlbkNvdW50ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVG9rZW5Db3VudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNEgzdjNoNVY0Wk0xMyA5SDh2M2g1VjlaTTEwIDRoM3YzaC0zVjRaTTYgOUgzdjNoM1Y5WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Ub2tlbkNvdW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuVmFyaWFibGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5WYXJpYWJsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm02LjY0OSA0LjY2NyAxLjMyNiA0LjdoLjA1bDEuMzI2LTQuN2gxLjk4MmwtMi4xMzQgNi42NjZINi44MDFMNC42NjcgNC42Njd6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblZhcmlhYmxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuVmVjdG9yRGVuc2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5WZWN0b3JEZW5zZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMi41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMUgzdjEwaDEuNWEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41di0xMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgNWExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBabTAgM2ExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBabS0xIDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm00LTdhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWk04IDlhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm0xIDJhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWm0yLTVhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm0xIDJhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWm0tMSA0YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjUgMmEuNS41IDAgMCAxIC41LjV2MTFhLjUuNSAwIDAgMS0uNS41aC0yYS41LjUgMCAwIDEgMC0xSDEzVjNoLTEuNWEuNS41IDAgMCAxIDAtMWgyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5WZWN0b3JEZW5zZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblZlY3RvclNwYXJzZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblZlY3RvclNwYXJzZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMi41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMUgzdjEwaDEuNWEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41di0xMVpNOCA2YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptMCA2YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgOGExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBabTUgMWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy41IDJhLjUuNSAwIDAgMSAuNS41djExYS41LjUgMCAwIDEtLjUuNWgtMmEuNS41IDAgMCAxIDAtMUgxM1YzaC0xLjVhLjUuNSAwIDAgMSAwLTFoMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuVmVjdG9yU3BhcnNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRyYWluaW5nID0gZnVuY3Rpb24gRXVpSWNvblRyYWluaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMzg2IDkuODM2YTIuNSAyLjUgMCAxIDEgMy42MTEuNjY3QzE1LjIxMiAxMS4xNzMgMTYgMTIuNDYgMTYgMTR2MS41YS41LjUgMCAxIDEtMSAwVjE0YzAtMS43MjQtMS4yNzYtMy0zLTMtLjkxIDAtMS4yOTgtLjAyLTEuODA1LS4xMjItMS4yNS0uMjU0LTIuMzMzLTEtMy41ODUtMi41NjZhLjUuNSAwIDEgMSAuNzgtLjYyNGMuOSAxLjEyNCAxLjY1MyAxLjc0IDIuNDM0IDIuMDQzLjE1NS4wNTIuMzQ1LjA4My41NjIuMTA1Wm0xLjc4NS4xMjhjLjA4My4wMS4xNjcuMDIxLjI1MS4wMzRMMTIuNSAxMGExLjUgMS41IDAgMSAwLS4zMy0uMDM2Wk05Ljc4IDExLjk3YS41LjUgMCAwIDEgLjUuNWMwIC4wNzYtLjA0Ny4yMjYtLjA1LjIzMS0uMTc5LjM4LS4yMy43NzQtLjIzIDEuMzAydjEuNWEuNS41IDAgMSAxLTEgMHYtMS41YzAtLjY1Ny4wNzItMS4xODYuMzA3LTEuNjk2YS41LjUgMCAwIDEgLjQ3My0uMzM3Wk01Ljk1OCA1Ljc3MmEuNS41IDAgMCAxLS43OC42MjVMMy4xMSAzLjgxMmEuNS41IDAgMSAxIC43OC0uNjI0bDIuMDY4IDIuNTg0Wk0xIDExaDUuNWEuNS41IDAgMSAxIDAgMWgtNmEuNS41IDAgMCAxLS41LS41Vi41QS41LjUgMCAwIDEgLjUgMGgxMmEuNS41IDAgMCAxIC41LjV2M2EuNS41IDAgMSAxLTEgMFYxSDF2MTBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UcmFpbmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UcmFuc2l0aW9uTGVmdEluID0gZnVuY3Rpb24gRXVpSWNvblRyYW5zaXRpb25MZWZ0SW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4xNDYgNS44NTRhLjUuNSAwIDAgMSAuNzA4LS43MDhsMiAyYS41LjUgMCAwIDEgMCAuNzA4bC0yIDJhLjUuNSAwIDAgMS0uNzA4LS43MDhMMTEuMjkzIDhINy41YS41LjUgMCAwIDEgMC0xaDMuNzkzbC0xLjE0Ny0xLjE0NlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yIDBoMTFhMiAyIDAgMCAxIDIgMnYxMWEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlYyYTIgMiAwIDAgMSAyLTJabTIuNzA3IDFINXYxLjI5M2wtNCA0VjQuNzA3TDQuNzA3IDFaTTYgMTRWMWg3YTEgMSAwIDAgMSAxIDF2MTFhMSAxIDAgMCAxLTEgMUg2Wm0tMS0xLjI5M1YxNEgzLjcwN0w1IDEyLjcwN1ptMC0zdjEuNTg2TDIuMjkzIDE0SDJhMSAxIDAgMCAxLS44MzgtLjQ1NEw1IDkuNzA3Wm0wLTN2MS41ODZsLTQgNHYtMS41ODZsNC00Wm0wLTN2MS41ODZsLTQgNFY3LjcwN2w0LTRaTTMuMjkzIDFIMmExIDEgMCAwIDAtMSAxdjEuMjkzTDMuMjkzIDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UcmFuc2l0aW9uTGVmdEluOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRyYW5zaXRpb25MZWZ0T3V0ID0gZnVuY3Rpb24gRXVpSWNvblRyYW5zaXRpb25MZWZ0T3V0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44NTQgNS44NTRhLjUuNSAwIDAgMC0uNzA4LS43MDhsLTIgMmEuNS41IDAgMCAwIDAgLjcwOGwyIDJhLjUuNSAwIDAgMCAuNzA4LS43MDhMOC43MDcgOEgxMi41YS41LjUgMCAwIDAgMC0xSDguNzA3bDEuMTQ3LTEuMTQ2WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIgMGgxMWEyIDIgMCAwIDEgMiAydjExYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMlptMi43MDcgMUg1djEuMjkzbC00IDRWNC43MDdMNC43MDcgMVpNNiAxNFYxaDdhMSAxIDAgMCAxIDEgMXYxMWExIDEgMCAwIDEtMSAxSDZabS0xLTEuMjkzVjE0SDMuNzA3TDUgMTIuNzA3Wm0wLTN2MS41ODZMMi4yOTMgMTRIMmExIDEgMCAwIDEtLjgzOC0uNDU0TDUgOS43MDdabTAtM3YxLjU4NmwtNCA0di0xLjU4Nmw0LTRabTAtM3YxLjU4NmwtNCA0VjcuNzA3bDQtNFpNMy4yOTMgMUgyYTEgMSAwIDAgMC0xIDF2MS4yOTNMMy4yOTMgMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRyYW5zaXRpb25MZWZ0T3V0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRyYW5zaXRpb25Ub3BJbiA9IGZ1bmN0aW9uIEV1aUljb25UcmFuc2l0aW9uVG9wSW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjE0NiAxMC4xNDZhLjUuNSAwIDAgMSAuNzA4LjcwOGwtMiAyYS41LjUgMCAwIDEtLjcwOCAwbC0yLTJhLjUuNSAwIDAgMSAuNzA4LS43MDhMNyAxMS4yOTNWNy41YS41LjUgMCAwIDEgMSAwdjMuNzkzbDEuMTQ2LTEuMTQ3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE1IDJ2MTFhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yaDExYTIgMiAwIDAgMSAyIDJabS0xIDIuNzA3VjVoLTEuMjkzbC00LTRoMS41ODZMMTQgNC43MDdaTTEgNmgxM3Y3YTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjZabTEuMjkzLTFIMVYzLjcwN0wyLjI5MyA1Wm0zIDBIMy43MDdMMSAyLjI5M1YyYTEgMSAwIDAgMSAuNDU1LS44MzhMNS4yOTMgNVptMyAwSDYuNzA3bC00LTRoMS41ODZsNCA0Wm0zIDBIOS43MDdsLTQtNGgxLjU4Nmw0IDRaTTE0IDMuMjkzVjJhMSAxIDAgMCAwLTEtMWgtMS4yOTNMMTQgMy4yOTNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UcmFuc2l0aW9uVG9wSW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVHJhbnNpdGlvblRvcE91dCA9IGZ1bmN0aW9uIEV1aUljb25UcmFuc2l0aW9uVG9wT3V0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS4xNDYgOS44NTRhLjUuNSAwIDAgMCAuNzA4LS43MDhsLTItMmEuNS41IDAgMCAwLS43MDggMGwtMiAyYS41LjUgMCAxIDAgLjcwOC43MDhMNyA4LjcwN1YxMi41YS41LjUgMCAwIDAgMSAwVjguNzA3bDEuMTQ2IDEuMTQ3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE1IDJ2MTFhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yaDExYTIgMiAwIDAgMSAyIDJabS0xIDIuNzA3VjVoLTEuMjkzbC00LTRoMS41ODZMMTQgNC43MDdaTTEgNmgxM3Y3YTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjZabTEuMjkzLTFIMVYzLjcwN0wyLjI5MyA1Wm0zIDBIMy43MDdMMSAyLjI5M1YyYTEgMSAwIDAgMSAuNDU1LS44MzhMNS4yOTMgNVptMyAwSDYuNzA3bC00LTRoMS41ODZsNCA0Wm0zIDBIOS43MDdsLTQtNGgxLjU4Nmw0IDRaTTE0IDMuMjkzVjJhMSAxIDAgMCAwLTEtMWgtMS4yOTNMMTQgMy4yOTNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UcmFuc2l0aW9uVG9wT3V0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRyYXNoID0gZnVuY3Rpb24gRXVpSWNvblRyYXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEgM2g1djFIMFYzaDVWMWExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXYyWm0tNy4wNTYgOEg3djFINC4xbC4zOTIgMi41MTljLjA0Mi4yNjkuMjU0LjQ1OC40OTMuNDU4aDYuMDNjLjIzOSAwIC40NTEtLjE4OS40OTMtLjQ1OGwxLjQ5OC05LjU3NkgxNGwtMS41MDQgOS43M2MtLjExNi43NDctLjc0IDEuMzA0LTEuNDgxIDEuMzA0aC02LjAzYy0uNzQxIDAtMS4zNjUtLjU1Ny0xLjQ4MS0xLjMwNGwtMS41MTEtOS43M0g5VjUuOTVIMy4xNTdMMy40NzYgOEg4djFIMy42MzJsLjMxMiAyWk02IDNoNFYxSDZ2MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRyYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblVuZm9sZCA9IGZ1bmN0aW9uIEV1aUljb25VbmZvbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjE0IDMuODA4IDcuNTMgMS41MWEuNjcuNjcgMCAwIDEgLjk0MiAwbDIuMzg5IDIuMjk4Yy4yNi4yNTYuNjg1LjI1Ni45NDQgMGEuNjUuNjUgMCAwIDAgMC0uOTNMOS40MTYuNTc4YTIuMDIgMi4wMiAwIDAgMC0yLjgzMiAwbC0yLjM4OCAyLjNhLjY1LjY1IDAgMCAwIDAgLjkzYy4yNi4yNTYuNjgzLjI1Ni45NDQgMHptMCA4LjM4NCAyLjM5IDIuMjk4YS42Ny42NyAwIDAgMCAuOTQyIDBsMi4zODktMi4yOThhLjY3Ny42NzcgMCAwIDEgLjk0NCAwIC42NS42NSAwIDAgMSAwIC45M2wtMi4zODggMi4zYTIuMDIgMi4wMiAwIDAgMS0yLjgzMiAwbC0yLjM4OC0yLjNhLjY1LjY1IDAgMCAxIDAtLjkzLjY3Ny42NzcgMCAwIDEgLjk0NCAwek0xNiA2SDB2NGgxNlY2ek0xIDlWN2gxNHYySDF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25VbmZvbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVW5saW5rID0gZnVuY3Rpb24gRXVpSWNvblVubGluayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNTY1IDEwLjgzYS41LjUgMCAxIDEgLjgxOS41NzNsLTEuODc3IDIuNjhjLS45NjMgMS4zNzYtMy4wMiAxLjU1LTQuNTg4LjQ1Qy4zNSAxMy40MzYtLjE5MSAxMS40NDUuNzczIDEwLjA3TDMuNjQgNS45NzNjLjk2My0xLjM3NSAzLjAxOS0xLjU0OCA0LjU4Ny0uNDVhLjUuNSAwIDEgMS0uNTczLjgyQzYuNTA5IDUuNTQgNS4wOCA1LjY2IDQuNDYgNi41NDZsLTIuODY4IDQuMDk1Yy0uNjIxLjg4Ny0uMjQ1IDIuMjcuOSAzLjA3MyAxLjE0Ni44MDIgMi41NzUuNjgyIDMuMTk2LS4yMDVsMS44NzctMi42OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuODkyIDMuNDNhLjUuNSAwIDEgMS0uNTc0LS44MTlMMTAgLjczNGMxLjM3Ni0uOTYzIDMuMzY3LS40MjIgNC40NjUgMS4xNDYgMS4wOTggMS41NjkuOTI2IDMuNjI1LS40NSA0LjU4OEw5LjkxOCA5LjMzNmMtMS4zNzUuOTYzLTMuMzY2LjQyMi00LjQ2NC0xLjE0NmEuNS41IDAgMSAxIC44MTktLjU3NGMuODAyIDEuMTQ2IDIuMTg1IDEuNTIyIDMuMDcyLjlMMTMuNDQgNS42NWMuODg2LS42MjEgMS4wMDYtMi4wNS4yMDQtMy4xOTUtLjgwMi0xLjE0Ni0yLjE4Ni0xLjUyMi0zLjA3Mi0uOUw3Ljg5MiAzLjQzek02IC41djNhLjUuNSAwIDAgMS0xIDB2LTNhLjUuNSAwIDAgMSAxIDB6TTEuMDU4IDIuMjNsMi40NTggMS43MmEuNS41IDAgMCAxLS41NzQuODJMLjQ4NCAzLjA1YS41LjUgMCAxIDEgLjU3NC0uODJ6bTEyIDcuMDkzIDIuNDU3IDEuNzJhLjUuNSAwIDEgMS0uNTczLjgybC0yLjQ1Ny0xLjcyYS41LjUgMCAxIDEgLjU3My0uODJ6bS0yLjA5OSAxLjE4MXYzYS41LjUgMCAxIDEtMSAwdi0zYS41LjUgMCAxIDEgMSAwelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVW5saW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblVzZXIgPSBmdW5jdGlvbiBFdWlJY29uVXNlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDlhNCA0IDAgMSAwIDAtOCA0IDQgMCAwIDAgMCA4Wm0wLTFhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1IDE0LjI5MUE5LjA1MyA5LjA1MyAwIDAgMCA4IDExYTkuMDUzIDkuMDUzIDAgMCAwLTcgMy4yOTFsLjcxNS43MUE4LjA0NyA4LjA0NyAwIDAgMSA4IDExLjk5NiA4LjA0NyA4LjA0NyAwIDAgMSAxNC4yODYgMTVsLjcxNC0uNzFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Vc2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblVzZXJBdmF0YXIgPSBmdW5jdGlvbiBFdWlJY29uVXNlckF2YXRhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTgsXG4gICAgaGVpZ2h0OiAxOCxcbiAgICB2aWV3Qm94OiBcIjAgMCAxOCAxOFwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNjg5IDExLjEzMmMxLjE1NSAxLjIyMiAxLjk1MyAyLjg3OSAyLjE4MyA0Ljc0OGExLjAwNyAxLjAwNyAwIDAgMS0xIDEuMTJIMy4wMDdhMS4wMDUgMS4wMDUgMCAwIDEtMS0xLjEyYy4yMy0xLjg3IDEuMDI4LTMuNTI2IDIuMTgzLTQuNzQ4LjI0Ny4yMjguNTA1LjQ0Mi43ODIuNjMzLTEuMDM4IDEuMDY5LTEuNzY1IDIuNTUtMS45NzIgNC4yMzdMMTQuODcyIDE2Yy0uMjA0LTEuNjg2LS45My0zLjE2Ni0xLjk2Ni00LjIzNWE3LjAxIDcuMDEgMCAwIDAgLjc4My0uNjMzWk04LjkzOSAxYzEuOSAwIDMgMiA0LjM4IDIuNjMzYTIuNDgzIDIuNDgzIDAgMCAxLTEuODguODY3Yy0uMjk4IDAtLjU3OS0uMDYtLjg0NC0uMTU3QTMuNzI2IDMuNzI2IDAgMCAxIDcuNjkgNS43NWMtMS4zOTUgMC0zLjc1LjI1LTMuMjQ1LTEuOTAzQzUuOTQgMyA2Ljk1MiAxIDguOTQgMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguOTQgMmMyLjIwNSAwIDQgMS43OTQgNCA0cy0xLjc5NSA0LTQgNGMtMi4yMDcgMC00LTEuNzk0LTQtNHMxLjc5My00IDQtNG0wIDlBNSA1IDAgMSAwIDguOTM3Ljk5OSA1IDUgMCAwIDAgOC45NCAxMVwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVzZXJBdmF0YXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVXNlcnMgPSBmdW5jdGlvbiBFdWlJY29uVXNlcnMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS40ODIgNC4zNDRhMiAyIDAgMSAwLTIuOTYzIDBjLS4wOC4wNDItLjE1Ni4wODctLjIzLjEzNi0uNDU3LjMwNS0uNzUuNzA0LS45MzMgMS4wNzNBMy40NTcgMy40NTcgMCAwIDAgMSA2Ljk3OFY5YTEgMSAwIDAgMCAxIDFoMi41YTMuNjkgMy42OSAwIDAgMSAuNjg0LS45NjJMNS4xNzEgOUgyVjdzMC0yIDItMmMxLjAwNyAwIDEuNTA3LjUwNyAxLjc1NSAxLjAxLjIyNS0uMjU0LjQ5My0uNDcuNzkzLS42MzZhMi43MTcgMi43MTcgMCAwIDAtMS4wNjYtMS4wM3pNNCA0YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMnptMTAgNmgtMi41YTMuNjg0IDMuNjg0IDAgMCAwLS42ODQtLjk2MkwxMC44MjkgOUgxNFY3czAtMi0yLTJjLTEuMDA3IDAtMS41MDcuNTA3LTEuNzU1IDEuMDFhMy4wMTIgMy4wMTIgMCAwIDAtLjc5My0uNjM2IDIuNzE2IDIuNzE2IDAgMCAxIDEuMDY2LTEuMDMgMiAyIDAgMSAxIDIuOTYzIDBjLjA4LjA0Mi4xNTYuMDg3LjIzLjEzNi40NTcuMzA1Ljc1LjcwNC45MzMgMS4wNzNBMy40NTMgMy40NTMgMCAwIDEgMTUgNi45NDRWOWExIDEgMCAwIDEtMSAxem0tMi02YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMCA4YzAgLjUxNy0uMTk2Ljk4OS0uNTE4IDEuMzQ0YTIuNzU1IDIuNzU1IDAgMCAxIDEuMTYzIDEuMjFBMy40NTMgMy40NTMgMCAwIDEgMTEgMTEuOTc3VjE0YTEgMSAwIDAgMS0xIDFINmExIDEgMCAwIDEtMS0xdi0yLjAyMmEyLjAwNSAyLjAwNSAwIDAgMSAuMDA2LS4xMzUgMy40NTYgMy40NTYgMCAwIDEgLjM1LTEuMjkgMi43NTUgMi43NTUgMCAwIDEgMS4xNjItMS4yMUEyIDIgMCAxIDEgMTAgOHptLTQgNHYyaDR2LTJzMC0yLTItMi0yIDItMiAyem0zLTRhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVXNlcnM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmVjdG9yID0gZnVuY3Rpb24gRXVpSWNvblZlY3RvcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjUgMTFWNUgxMVYzLjVINVY1SDMuNXY2SDV2MS41aDZWMTFoMS41Wm0xIDBIMTV2NGgtNHYtMS41SDVWMTVIMXYtNGgxLjVWNUgxVjFoNHYxLjVoNlYxaDR2NGgtMS41djZaTTQgNFYySDJ2MmgyWm04IDBoMlYyaC0ydjJaTTIgMTRoMnYtMkgydjJabTEwIDBoMnYtMmgtMnYyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmVjdG9yOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpZGVvUGxheWVyID0gZnVuY3Rpb24gRXVpSWNvblZpZGVvUGxheWVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAxLjk5NEMwIC44OTMuODk1IDAgMS45OTQgMGgxMi4wMTJDMTUuMTA3IDAgMTYgLjg5NSAxNiAxLjk5NHYxMi4wMTJBMS45OTUgMS45OTUgMCAwIDEgMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMCAxIDAgMTQuMDA2VjEuOTk0Wm0xIDB2MTIuMDEyYzAgLjU0OC40NDYuOTk0Ljk5NC45OTRoMTIuMDEyYS45OTUuOTk1IDAgMCAwIC45OTQtLjk5NFYxLjk5NEEuOTk1Ljk5NSAwIDAgMCAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAgMCAxIDEuOTk0Wk0xIDRoMTR2MUgxVjRabTEuNS0xYS41LjUgMCAwIDEgMC0xaDFhLjUuNSAwIDAgMSAwIDFoLTFabTMgMGEuNS41IDAgMCAxIDAtMWgxYS41LjUgMCAwIDEgMCAxaC0xWm00Ljk0NyA2LjEwNmExIDEgMCAwIDEgMCAxLjc4OGwtMyAyQTEgMSAwIDAgMSA2IDEyVjhhMSAxIDAgMCAxIDEuNDQ3LS44OTRsMyAyWk0xMCAxMCA3IDh2NGwzLTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaWRlb1BsYXllcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNBcmVhID0gZnVuY3Rpb24gRXVpSWNvblZpc0FyZWEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDEzaDEwVjkuOTEzbC0yLjU3MS0yLjgyNkw4LjU2IDguNzUzYS41LjUgMCAwIDEtLjcyOC0uMDY3TDQuNDQ4IDQuMzE3IDMgNi4xOTFWMTNabTUuMjk1LTUuMzUgMS44MzctMS42NGEuNS41IDAgMCAxIC43MDMuMDM3bDMuMDM1IDMuMzM2YS41LjUgMCAwIDEgLjEzLjMzN3YzLjc4YS41LjUgMCAwIDEtLjUuNWgtMTFhLjUuNSAwIDAgMS0uNS0uNVY2LjAyYS41LjUgMCAwIDEgLjEwNC0uMzA1bDEuOTQ3LTIuNTJhLjUuNSAwIDAgMSAuNzkxLS4wMDFMOC4yOTUgNy42NVpNMSAxNWgxMy41YS41LjUgMCAxIDEgMCAxSC41YS41LjUgMCAwIDEtLjUtLjV2LTE0YS41LjUgMCAwIDEgMSAwVjE1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQXJlYTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNBcmVhU3RhY2tlZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNBcmVhU3RhY2tlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDFhLjUuNSAwIDAgMSAuNS41VjE1aDEzLjVhLjUuNSAwIDEgMSAwIDFILjVhLjUuNSAwIDAgMS0uNS0uNXYtMTRBLjUuNSAwIDAgMSAuNSAxWm00LjM0MiAyLjE5NEw4LjI5NSA3LjY1bDEuODM3LTEuNjRhLjUuNSAwIDAgMSAuNzAzLjAzN2wzLjAzNSAzLjMzNmEuNS41IDAgMCAxIC4xMy4zMzd2My43OGEuNS41IDAgMCAxLS41LjVoLTExYS41LjUgMCAwIDEtLjUtLjVWNi4wMmEuNS41IDAgMCAxIC4xMDQtLjMwNWwxLjk0Ny0yLjUyYS41LjUgMCAwIDEgLjc5MS0uMDAxWm0tLjM5NCAxLjEyM0wzIDYuMTkxdjQuMTAxbDEuMTQ2LTEuMTQ2YS41LjUgMCAwIDEgLjQ5My0uMTI2bC4wODUuMDMzTDguNSAxMC45NGwxLjc3Ni0uODg4YS41LjUgMCAwIDEgLjM2LS4wMzRsLjA4OC4wMzRMMTMgMTEuMTlWOS45MTNsLTIuNTcxLTIuODI2TDguNTYgOC43NTNhLjUuNSAwIDAgMS0uNzI4LS4wNjdMNC40NDggNC4zMTdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNBcmVhU3RhY2tlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNCYXJIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvblZpc0Jhckhvcml6b250YWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgMTBoLTZhLjUuNSAwIDAgMSAwLTFIOFY2SDIuNWEuNS41IDAgMCAxIDAtMUgxM1YySDIuNWEuNS41IDAgMCAxIDAtMWgxMWEuNS41IDAgMCAxIC41LjV2NGEuNS41IDAgMCAxLS41LjVIOXYzaDIuNWEuNS41IDAgMCAxIC41LjV2NGEuNS41IDAgMCAxLS41LjVoLTlhLjUuNSAwIDEgMSAwLTFIMTF2LTNIOC41Wk0wIC41YS41LjUgMCAxIDEgMSAwdjE0YS41LjUgMCAxIDEtMSAwVi41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFySG9yaXpvbnRhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNCYXJIb3Jpem9udGFsU3RhY2tlZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNCYXJIb3Jpem9udGFsU3RhY2tlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDBhLjUuNSAwIDAgMSAuNS41djE0YS41LjUgMCAxIDEtMSAwVi41QS41LjUgMCAwIDEgLjUgMFptMTMgMWEuNS41IDAgMCAxIC41LjV2NGEuNS41IDAgMCAxLS41LjVIOXYzaDIuNWEuNS41IDAgMCAxIC41LjV2NGEuNS41IDAgMCAxLS41LjVoLTlhLjUuNSAwIDEgMSAwLTFIOXYtM0gyLjVhLjUuNSAwIDAgMSAwLTFINlY2SDIuNWEuNS41IDAgMCAxIDAtMUgxMFYySDIuNWEuNS41IDAgMCAxIDAtMWgxMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0Jhckhvcml6b250YWxTdGFja2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc0JhclZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvblZpc0JhclZlcnRpY2FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgNy41djZhLjUuNSAwIDEgMS0xIDBWOEg2djUuNWEuNS41IDAgMSAxLTEgMFYzSDJ2MTAuNWEuNS41IDAgMSAxLTEgMHYtMTFhLjUuNSAwIDAgMSAuNS0uNWg0YS41LjUgMCAwIDEgLjUuNVY3aDNWNC41YS41LjUgMCAwIDEgLjUtLjVoNGEuNS41IDAgMCAxIC41LjV2OWEuNS41IDAgMSAxLTEgMFY1aC0zdjIuNVpNLjUgMTZhLjUuNSAwIDEgMSAwLTFoMTRhLjUuNSAwIDEgMSAwIDFILjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNCYXJWZXJ0aWNhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNCYXJWZXJ0aWNhbFN0YWNrZWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzQmFyVmVydGljYWxTdGFja2VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuNSAxNWEuNS41IDAgMSAxIDAgMUguNWEuNS41IDAgMSAxIDAtMWgxNFptLTktMTNhLjUuNSAwIDAgMSAuNS41TDUuOTk5IDdIOVY0LjVhLjUuNSAwIDAgMSAuNS0uNWg0YS41LjUgMCAwIDEgLjUuNXY5YS41LjUgMCAxIDEtMSAwVjdoLTN2Ni41YS41LjUgMCAwIDEtLjQxLjQ5Mkw5LjUgMTRhLjUuNSAwIDAgMS0uNS0uNVYxMEg2djMuNWEuNS41IDAgMCAxLS45OTIuMDlMNSAxMy41VjZIMnY3LjVhLjUuNSAwIDEgMS0xIDB2LTExYS41LjUgMCAwIDEgLjUtLjVoNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0JhclZlcnRpY2FsU3RhY2tlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNHYXVnZSA9IGZ1bmN0aW9uIEV1aUljb25WaXNHYXVnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTEyLjg3NyA1Ljg0Ny0xLjAyIDEuMDJhLjUuNSAwIDAgMS0uNzA4LS43MDdsMS4xLTEuMDk5Yy0uMDUtLjA1My0uMS0uMTA2LS4xNTItLjE1N0E2LjQ3MSA2LjQ3MSAwIDAgMCA4IDMuMDE5VjQuNWEuNS41IDAgMCAxLTEgMFYzLjAxOWE2LjQ3IDYuNDcgMCAwIDAtNC4yNjEgMi4wNTVsMS4wNyAxLjA3MWEuNS41IDAgMCAxLS43MDYuNzA3bC0uOTktLjk5QTYuNDYgNi40NiAwIDAgMCAxLjAxOCAxMEgyLjVhLjUuNSAwIDEgMSAwIDFIMS4xNzRjLjA4My4zNTMuMTk2LjY5Ny4zMzcgMS4wM2EuNS41IDAgMSAxLS45MjIuMzlBNy40ODcgNy40ODcgMCAwIDEgMCA5LjVhNy40ODMgNy40ODMgMCAwIDEgMi4xOTctNS4zMDRBNy40ODcgNy40ODcgMCAwIDEgNy41IDJhNy40ODcgNy40ODcgMCAwIDEgNS4zMDQgMi4xOTdBNy40ODMgNy40ODMgMCAwIDEgMTUgOS41YTcuNDg3IDcuNDg3IDAgMCAxLS41OSAyLjkyLjUuNSAwIDAgMS0uOTItLjM5Yy4xNC0uMzMzLjI1My0uNjc3LjMzNi0xLjAzSDEyLjVhLjUuNSAwIDEgMSAwLTFoMS40ODFhNi40ODMgNi40ODMgMCAwIDAtMS4xMDQtNC4xNTNabS02LjA0MSA1LjMxN2EuOTkzLjk5MyAwIDAgMS0uMDEtMS40MDRjLjM4NC0uMzg1IDIuODgyLTIuMDAyIDMuMTQ5LTEuNzM1LjI2Ny4yNjctMS4zNSAyLjc2NS0xLjczNSAzLjE1YS45OTMuOTkzIDAgMCAxLTEuNDA0LS4wMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0dhdWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc0dvYWwgPSBmdW5jdGlvbiBFdWlJY29uVmlzR29hbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjcyNSAzLjY1M2E2IDYgMCAwIDEgMi44NDcgNy41NzYuNS41IDAgMCAxLS45MjgtLjM3MiA1IDUgMCAxIDAtOS4yOTMtLjAxNC41LjUgMCAwIDEtLjIxOC42MTlMMS4zOSAxMi40N2EuNS41IDAgMCAxLS43MDgtLjIzQTcuOTkgNy45OSAwIDAgMSAwIDlhOCA4IDAgMCAxIDExLjIxMi03LjMyOS41LjUgMCAwIDEgLjIzNC43MDRsLS43MjEgMS4yNzhabS0uOTMzLS4zOC41LS44ODlhNyA3IDAgMCAwLTguOTAyIDguOTNsLjg4Ni0uNTExYTYgNiAwIDAgMSA3LjUxNi03LjUzWk02LjczIDkuNDY3YTEuNzUgMS43NSAwIDEgMSAyLjUzOSAwIDIgMiAwIDEgMS0yLjUzOSAwWk04IDEyLjAxM2ExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTAtM2EuNzUuNzUgMCAxIDAgMC0xLjUuNzUuNzUgMCAwIDAgMCAxLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNHb2FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc0xpbmUgPSBmdW5jdGlvbiBFdWlJY29uVmlzTGluZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjY1NCAzLjQ4Yy4yNDguMjI1LjU1Mi4zODkuODg4LjQ2N0wxMS4yNCA5LjQzYTEuOTkgMS45OSAwIDAgMC0uOTE1LS40MDRsMi4zMy01LjU0N1pNOS4xNDYgOS4xOWEyLjAwOCAyLjAwOCAwIDAgMC0uNzY5LjY0bC0xLjU3Mi0yYy4zMTEtLjEzNi41ODEtLjM1Ljc4NS0uNjE4bDEuNTU2IDEuOTc4Wk01LjU4MSA3Ljk1NmwtMi4xMzQgNC4yNjhhLjUuNSAwIDAgMS0uODk0LS40NDhsMi4xMzQtNC4yNjhjLjI1LjIyLjU1Ny4zNzYuODk0LjQ0OFpNMSAxNWgxMy41YS41LjUgMCAxIDEgMCAxSC41YS41LjUgMCAwIDEtLjUtLjV2LTE0YS41LjUgMCAwIDEgMSAwVjE1Wm01LThhMSAxIDAgMSAxIDAtMiAxIDEgMCAwIDEgMCAyWm00IDVhMSAxIDAgMSAxIDAtMiAxIDEgMCAwIDEgMCAyWm00LTlhMSAxIDAgMSAxIDAtMiAxIDEgMCAwIDEgMCAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzTGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNNYXBDb29yZGluYXRlID0gZnVuY3Rpb24gRXVpSWNvblZpc01hcENvb3JkaW5hdGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjUgMTVDNS43NyAxNSAyIDkuOTcgMiA2LjU5NSAyIDMuNTA3IDQuNDYgMSA3LjUgMVMxMyAzLjUwNyAxMyA2LjU5NUMxMyA5Ljk3IDkuMjMgMTUgNy41IDE1Wm0wLTFjLjI4NiAwIDEuNDgtMS4wNDQgMi40NTktMi4zNUMxMS4yMTkgOS45NjkgMTIgOC4xNTMgMTIgNi41OTYgMTIgNC4wNTUgOS45ODMgMiA3LjUgMlMzIDQuMDU1IDMgNi41OTVjMCAxLjU1Ny43OCAzLjM3MyAyLjA0MSA1LjA1NkM2LjAyIDEyLjk1NiA3LjIxNCAxNCA3LjUgMTRabTAtNC45OTZhMi41IDIuNSAwIDEgMSAwLTUgMi41IDIuNSAwIDAgMSAwIDVabTAtMWExLjUgMS41IDAgMSAwIDAtMyAxLjUgMS41IDAgMCAwIDAgM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc01hcENvb3JkaW5hdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzTWFwUmVnaW9uID0gZnVuY3Rpb24gRXVpSWNvblZpc01hcFJlZ2lvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNSAyLjMwOXY4LjY5YS40OTkuNDk5IDAgMCAxLS4wMzIuMTc2TDkuNSAxMi42OTFWMy44MDlsLTMtMS41Wm0tMS0uMDRMMiAzLjgyNXY4LjkwNmwzLjUyNy0xLjU2OGEuNS41IDAgMCAxLS4wMjctLjE2NFYyLjI3Wm0uMjc0LTEuMjE2YS40OTguNDk4IDAgMCAxIC40NzEuMDFsMy43NjggMS44ODQgNC4yODQtMS45MDRBLjUuNSAwIDAgMSAxNSAxLjV2MTBhLjUuNSAwIDAgMS0uMjk3LjQ1N2wtNC41IDJhLjUuNSAwIDAgMS0uNDI3LS4wMWwtMy43ODktMS44OTQtNC4yODMgMS45MDRhLjUuNSAwIDAgMS0uNzAzLS40NTd2LTEwYS41LjUgMCAwIDEgLjI5Ny0uNDU3bDQuNDc2LTEuOTlaTTEwLjUgMy44MjV2OC45MDZsMy41LTEuNTU2VjIuMjdsLTMuNSAxLjU1NlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc01hcFJlZ2lvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNNZXRyaWMgPSBmdW5jdGlvbiBFdWlJY29uVmlzTWV0cmljKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41MzIgNy4zNGEyLjE2MSAyLjE2MSAwIDEgMSAyLjkzNiAwIDIuNzQ2IDIuNzQ2IDAgMSAxLTIuOTM2IDBaTTIgMGgxMmEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMlptMCAxYTEgMSAwIDAgMC0xIDF2MTJhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xVjJhMSAxIDAgMCAwLTEtMUgyWm02IDUuOTE1YTEuMTYxIDEuMTYxIDAgMSAwIDAtMi4zMjIgMS4xNjEgMS4xNjEgMCAwIDAgMCAyLjMyMlptMCA0LjQ5MmExLjc0NiAxLjc0NiAwIDEgMCAwLTMuNDkyIDEuNzQ2IDEuNzQ2IDAgMCAwIDAgMy40OTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNNZXRyaWM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzUGllID0gZnVuY3Rpb24gRXVpSWNvblZpc1BpZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNSA5YS41LjUgMCAwIDEtLjUtLjVWMy4wMjNBNS41IDUuNSAwIDEgMCAxMS45NzggOUg2LjVaTTcgOGg1LjVhLjUuNSAwIDAgMSAuNS41QTYuNSA2LjUgMCAxIDEgNi41IDJhLjUuNSAwIDAgMSAuNS41VjhabTItNi45NzJWNmg0Ljk3MkMxMy42OTYgMy41NTIgMTEuNDQ4IDEuMzA0IDkgMS4wMjhaTTE0LjUgN2gtNmEuNS41IDAgMCAxLS41LS41di02YS41LjUgMCAwIDEgLjUtLjVDMTEuODUzIDAgMTUgMy4xNDcgMTUgNi41YS41LjUgMCAwIDEtLjUuNVpNNi4xNDYgOC44NTRhLjUuNSAwIDEgMSAuNzA4LS43MDhsNCA0YS41LjUgMCAwIDEtLjcwOC43MDhsLTQtNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1BpZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNUYWJsZSA9IGZ1bmN0aW9uIEV1aUljb25WaXNUYWJsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDN2MTFhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MVptLTEgMFYyYTEgMSAwIDAgMC0xLTFIMmExIDEgMCAwIDAtMSAxdjFoMTRabTAgMUgxdjEwYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMVY0Wk00LjUgNmEuNS41IDAgMCAxIDAgMUgyLjQ5NmEuNS41IDAgMSAxIDAtMUg0LjVabTkgMGEuNS41IDAgMSAxIDAgMWgtNmEuNS41IDAgMCAxIDAtMWg2Wm0tOSAzYS41LjUgMCAwIDEgMCAxSDIuNDk2YS41LjUgMCAxIDEgMC0xSDQuNVptOSAwYS41LjUgMCAxIDEgMCAxaC02YS41LjUgMCAwIDEgMC0xaDZabS05IDNhLjUuNSAwIDEgMSAwIDFIMi40OTZhLjUuNSAwIDEgMSAwLTFINC41Wm05IDBhLjUuNSAwIDEgMSAwIDFoLTZhLjUuNSAwIDEgMSAwLTFoNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1RhYmxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc1RhZ0Nsb3VkID0gZnVuY3Rpb24gRXVpSWNvblZpc1RhZ0Nsb3VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS41IDkuMDQ3YS41LjUgMCAxIDAgMCAxaDEzYS41LjUgMCAwIDAgMC0xaC0xM1ptMC0xaDEzYTEuNSAxLjUgMCAwIDEgMCAzaC0xM2ExLjUgMS41IDAgMCAxIDAtM1pNMTAgMTNhLjUuNSAwIDEgMSAwIDFINGEuNS41IDAgMSAxIDAtMWg2Wk04LjAwMSAyLjAxNWEuNS41IDAgMSAxLS4wMDIgMWwtNS0uMDE1YS41LjUgMCAxIDEgLjAwMy0xbDUgLjAxNVpNMTQgNWEuNS41IDAgMSAxIDAgMUg2YS41LjUgMCAwIDEgMC0xaDhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUYWdDbG91ZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNUZXh0ID0gZnVuY3Rpb24gRXVpSWNvblZpc1RleHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgNXY2aDJhLjUuNSAwIDEgMSAwIDFoLTVhLjUuNSAwIDEgMSAwLTFoMlY1SDV2LjVhLjUuNSAwIDAgMS0xIDB2LTFhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgLjUuNTFsLS4wMjEgMWEuNS41IDAgMSAxLTEtLjAybC4wMS0uNDlIOC41Wk0xIDE1aDEuNWEuNS41IDAgMSAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41di0xLjk5NmEuNS41IDAgMCAxIDEgMFYxNVpNMSAxdjEuNDk3YS41LjUgMCAxIDEtMSAwVi41QS41LjUgMCAwIDEgLjUgMGgyYS41LjUgMCAwIDEgMCAxSDFabTE0IDBoLTEuNDk1YS41LjUgMCAwIDEgMC0xSDE1LjVhLjUuNSAwIDAgMSAuNS41djJhLjUuNSAwIDEgMS0xIDBWMVptMCAxNHYtMS41YS41LjUgMCAxIDEgMSAwdjJhLjUuNSAwIDAgMS0uNS41aC0yYS41LjUgMCAxIDEgMC0xSDE1Wk0wIDYuNWEuNS41IDAgMCAxIDEgMHYzYS41LjUgMCAwIDEtMSAwdi0zWk05LjUgMGEuNS41IDAgMCAxIDAgMWgtM2EuNS41IDAgMCAxIDAtMWgzWk0xNSA2LjVhLjUuNSAwIDEgMSAxIDB2M2EuNS41IDAgMSAxLTEgMHYtM1pNOS41IDE1YS41LjUgMCAxIDEgMCAxaC0zYS41LjUgMCAxIDEgMC0xaDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUZXh0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc1RpbWVsaW9uID0gZnVuY3Rpb24gRXVpSWNvblZpc1RpbWVsaW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuODg0IDEuODAyYzEuMTcxLS4zMDkgMi4yMi0uMjQgMy4xMDMuMDcuMjk1LjEwNC41MDcuMjEyLjYzMS4yOTJsLjE2NC4xMDYuMDQ4LjE4OGMuMjc4IDEuMDY2LjIgMi4xNzUtLjA5MSAzLjIzYTYuNzI4IDYuNzI4IDAgMCAxLS4xOTQuNTk4Yy4wMzUuMTIuMDc0LjI3My4xMTIuNDU0LjIyNyAxLjA2NS4yNDcgMi4xOTMtLjA4IDMuMjY3YTQuODU1IDQuODU1IDAgMCAxLS41MzQgMS4xNzVjLS4zMjQuNTE0LS43Ljk1NC0xLjExNyAxLjMyMy0uODA2LjcxMi0xLjYxNiAxLjA3MS0yLjIzNSAxLjIwNi0uMTQuMTc5LS4zNDYuMzgxLS42MjkuNTc4LS42NDMuNDQ3LTEuNDkzLjcxMS0yLjU2MS43MTEtMS4wNyAwLTEuOTItLjI2NC0yLjU2My0uNzExYTIuODc0IDIuODc0IDAgMCAxLS42MjktLjU3OGMtLjYxOC0uMTM0LTEuNDI4LS40OTMtMi4yMzItMS4yMDMtLjQxOS0uMzctLjc5Ni0uODEtMS4xMi0xLjMyNmE0Ljg1NSA0Ljg1NSAwIDAgMS0uNTM0LTEuMTc1Qy4wOTYgOC45MzMuMTE2IDcuODA1LjM0MyA2Ljc0YTYuNzQgNi43NCAwIDAgMSAuMTEyLS40NTQgNi43MjggNi43MjggMCAwIDEtLjE5NC0uNTk4Qy0uMDMgNC42MzMtLjEwOCAzLjUyNC4xNyAyLjQ1OGwuMDQ4LS4xODguMTY0LS4xMDZjLjEyNC0uMDguMzM2LS4xODguNjMtLjI5MS44ODUtLjMxIDEuOTMzLS4zOCAzLjEwNC0uMDcuMTg0LS4xMDguNDM0LS4yMy43NDgtLjM0OEM1LjYxNiAxLjE3IDYuNDk3IDEgNy41MDEgMWMxLjAwMiAwIDEuODgzLjE3IDIuNjM0LjQ1NS4zMTUuMTE5LjU2NS4yNC43NS4zNDdabTMuMDI3IDEuMTE2YTMuMTMgMy4xMyAwIDAgMC0uMjU1LS4xMDJjLS43NDktLjI2My0xLjY2LS4zMDktMi43MDguMDA3bC0uMjM4LjA3Mi0uMjAxLS4xNDdjLS4xMS0uMDgtLjM1NC0uMjE3LS43MjgtLjM1OEM5LjE0IDIuMTQ3IDguMzggMiA3LjUwMSAyYy0uODggMC0xLjY0MS4xNDctMi4yODMuMzktLjM3My4xNDEtLjYxNy4yNzgtLjcyNy4zNThsLS4yLjE0Ny0uMjQtLjA3MmMtMS4wNDgtLjMxNi0xLjk1OC0uMjctMi43MDctLjAwN2EzLjEzIDMuMTMgMCAwIDAtLjI1NS4xMDJjLS4xNjcuODEyLS4wOTQgMS42NzQuMTM2IDIuNTAzLjA4NC4zMDMuMTY2LjUyNC4yMTcuNjM3bC4wODIuMTgyLS4wNjYuMTljLS4wMzIuMDktLjA4NC4yNy0uMTM3LjUxOC0uMTk1LjkxNC0uMjEyIDEuODguMDU5IDIuNzY3LjEuMzMzLjI0MS42NDUuNDIzLjkzNS4yNzMuNDM0LjU4OC44MDEuOTM2IDEuMTA4LjQzNC4zODMuODk4LjY1NSAxLjM2LjgzNC4yNy4xMDUuNDc0LjE1NS41NzUuMTdsLjI0OC4wMzQuMTIuMjJjLjA1MS4wOTEuMTk5LjI2Ni40NjYuNDUyLjQ3Ni4zMyAxLjEyNy41MzIgMS45OTMuNTMyLjg2NSAwIDEuNTE2LS4yMDIgMS45OS0uNTMyLjI2OC0uMTg2LjQxNi0uMzYuNDY2LS40NTJsLjEyMS0uMjIuMjQ4LS4wMzRjLjEwMS0uMDE1LjMwNS0uMDY1LjU3Ni0uMTcuNDYyLS4xOC45MjctLjQ1MiAxLjM2Mi0uODM2LjM0Ny0uMzA3LjY2LS42NzQuOTMzLTEuMTA3LjE4Mi0uMjkuMzIyLS42MDEuNDIzLS45MzQuMjcxLS44ODcuMjU0LTEuODUzLjA2LTIuNzY3YTQuNTk3IDQuNTk3IDAgMCAwLS4xMzgtLjUxOWwtLjA2Ni0uMTg5LjA4Mi0uMTgyYy4wNS0uMTEzLjEzMy0uMzM0LjIxNy0uNjM3LjIzLS44MjkuMzAzLTEuNjkxLjEzNi0yLjUwM1pNNSA1LjAwOGMuMDA0LjE4MS0uMDQ4LjM2NC0uMjY0LjYxNi0uNDI4LjQ5OC0uOTg1LjQ4OC0xLjQzMS4wNDktLjMyNi0uMzIxLS4zMjUtLjczMi0uMjktMS4wNDcuMDg1LS43Ni43NDgtLjcyMiAxLjI2Mi0uNDQuNDg2LjI3LjcxNy42MTYuNzIzLjgyM1ptNSAwYy4wMDYtLjIwNi4yMzctLjU1My43MjQtLjgyMS41MTQtLjI4MyAxLjE3Ni0uMzIxIDEuMjYuNDQuMDM2LjMxNC4wMzguNzI1LS4yODggMS4wNDYtLjQ0Ni40NC0xLjAwNS40NDktMS40MzMtLjA1LS4yMTctLjI1LS4yNjctLjQzNC0uMjYzLS42MTRaTTcuNSA4Yy0uNTAzIDAtLjk3Ni0uMjQtMS4zNzUtLjY3Mi0uMzk4LS40MzItLjU5Mi0xLjEyNiAwLTEuNTI4LjM4NC0uMjU5IDEuMDgyLS4zIDEuMzc1LS4zLjI5NCAwIC45OTEuMDQxIDEuMzc1LjMuNTkzLjQwMi4zOTcgMS4wOTYgMCAxLjUyOEM4LjQ3NyA3Ljc2IDguMDAyIDggNy41IDhabTAgMWMuODA4IDAgMi42NTYuOTk0IDIuNDkgMi4wNzQtLjE1My45OTMtMi4xMTQuOTI1LTIuNDkuOTI1LS4zNzQgMC0yLjMzNi4wNjgtMi40OS0uOTI1QzQuODQ1IDkuOTk0IDYuNjkzIDkgNy41IDlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUaW1lbGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNWZWdhID0gZnVuY3Rpb24gRXVpSWNvblZpc1ZlZ2EoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjQxNCA4LjAzNiA0Ljg5IDEwLjUxYS41LjUgMCAwIDEtLjcwNy43MDhMMS4zNTQgOC4zODlhLjUuNSAwIDAgMSAwLS43MDdsMi44MjgtMi44MjhhLjUuNSAwIDEgMSAuNzA3LjcwN0wyLjQxNCA4LjAzNlptOC43NjggMi40NzQgMi40NzUtMi40NzQtMi40NzUtMi40NzVhLjUuNSAwIDAgMSAuNzA3LS43MDdsMi44MjkgMi44MjhhLjUuNSAwIDAgMSAwIC43MDdsLTIuODI5IDIuODI5YS41LjUgMCAxIDEtLjcwNy0uNzA4Wk04LjU1OSAyLjUwNmEuNS41IDAgMCAxIC45ODEuMTlMNy40NDEgMTMuNDk0YS41LjUgMCAwIDEtLjk4MS0uMTlMOC41NTkgMi41MDZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNWZWdhOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc1Zpc3VhbEJ1aWxkZXIgPSBmdW5jdGlvbiBFdWlJY29uVmlzVmlzdWFsQnVpbGRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuODM3IDdjLjExLjkzLjE2NSAxLjg4Ni4xNjUgMi44NjlWMTMuNWEuNS41IDAgMSAxLTEgMFY5Ljg2OUEyMy4zIDIzLjMgMCAwIDAgOC44MyA3SDcuMjljLS4xOTUgMS4wNC0uMjkyIDEuOTg1LS4yOTIgMi44MzVWMTMuNWEuNS41IDAgMSAxLTEgMFY5LjgzNWMwLS44NjQuMDkyLTEuODA5LjI3Ni0yLjgzNUgyLjVhLjUuNSAwIDAgMS0uNDk1LS41N2MuMjg1LTIuMDIzIDEuNjI2LTMuMzU4IDMuOTMxLTMuOTYgMS45NjctLjUxNCA0LjIyLS42MDYgNi43NTYtLjI3OEExLjUgMS41IDAgMCAxIDE0IDMuNjc5VjUuNUExLjUgMS41IDAgMCAxIDEyLjUgN0g5LjgzN1ptLS41NjktMUgxMi41YS41LjUgMCAwIDAgLjUtLjVWMy42OGEuNS41IDAgMCAwLS40MzYtLjQ5N2MtMi40MTYtLjMxMS00LjU0LS4yMjUtNi4zNzUuMjU0QzQuNDk0IDMuODggMy40OTEgNC43MjQgMy4xMTcgNkg5LjI2OFpNMiAxMHYzLjVhLjUuNSAwIDEgMS0xIDB2LTRhLjUuNSAwIDAgMSAuNS0uNWgzYS41LjUgMCAwIDEgLjUuNXY0YS41LjUgMCAxIDEtMSAwVjEwSDJabTEwIDMuNWEuNS41IDAgMSAxLTEgMHYtMmEuNS41IDAgMCAxIC41LS41aDNhLjUuNSAwIDAgMSAuNS41djJhLjUuNSAwIDEgMS0xIDBWMTJoLTJ2MS41Wk0xLjAxNiAxNi4wMjZhLjUuNSAwIDAgMSAwLTFIMTVhLjUuNSAwIDEgMSAwIDFIMS4wMTZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNWaXN1YWxCdWlsZGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbldhcm5pbmcgPSBmdW5jdGlvbiBFdWlJY29uV2FybmluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTguNTUgOS41MDIuMzUtMy41MDdhLjkwNS45MDUgMCAxIDAtMS44IDBsLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAwIDEuMSAwWk05IDEyYTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguODY0IDEuNDk2YTEgMSAwIDAgMC0xLjcyOCAwbC03IDEyQTEgMSAwIDAgMCAxIDE1aDE0YTEgMSAwIDAgMCAuODY0LTEuNTA0bC03LTEyWk0xIDE0IDggMmw3IDEySDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25XYXJuaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbldhcm5pbmdGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uV2FybmluZ0ZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDFhMSAxIDAgMCAxIC44NjQuNDk2bDcgMTJBMSAxIDAgMCAxIDE1IDE1SDFhMSAxIDAgMCAxLS44NjQtMS41MDRsNy0xMkExIDEgMCAwIDEgOCAxWm0uOSA0Ljk5NS0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDBMNy4xIDUuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwWk04IDEzYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbldhcm5pbmdGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uV29yZFdyYXAgPSBmdW5jdGlvbiBFdWlJY29uV29yZFdyYXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDNoMTJ2MUgyVjN6bTAgOGg2djFIMnYtMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgN2g5LjV2LjVWN2guMDM5bC4wODMuMDA1YTIuOTU4IDIuOTU4IDAgMCAxIDEuMTAyLjI5OGMuMzA5LjE1NC42MzMuMzk0Ljg4Ljc2My4yNDguMzczLjM5Ni44NDcuMzk2IDEuNDM0IDAgLjU4OC0uMTQ4IDEuMDYxLS4zOTYgMS40MzRhMi4yNTcgMi4yNTcgMCAwIDEtLjg4Ljc2MyAyLjk1NyAyLjk1NyAwIDAgMS0xLjE4NS4zMDJoLS4wMjVsLS4wMDkuMDAxaC0uMDAzcy0uMDAyIDAtLjAwMi0uNXYuNUgxMXYxbC0yLTEuNSAyLTEuNXYxaC41MDZsLjA0NC0uMDAzYTEuOTU5IDEuOTU5IDAgMCAwIC43MjYtLjE5NWMuMTkxLS4wOTUuMzY3LS4yMy40OTUtLjQyMy4xMjctLjE5LjIyOS0uNDY2LjIyOS0uODc5cy0uMTAyLS42ODktLjIyOS0uODc5YTEuMjU2IDEuMjU2IDAgMCAwLS40OTUtLjQyNCAxLjk1OCAxLjk1OCAwIDAgMC0uNzctLjE5N0gyVjd6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Xb3JkV3JhcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Xb3JkV3JhcERpc2FibGVkID0gZnVuY3Rpb24gRXVpSWNvbldvcmRXcmFwRGlzYWJsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAzLjUgMTIgMnYxSDJ2MWgxMHYxbDItMS41ek0xMiA5VjhIMlY3aDEwVjZsMiAxLjVMMTIgOXptMCAzdjFsMi0xLjUtMi0xLjV2MUgydjFoMTB6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Xb3JkV3JhcERpc2FibGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbldyZW5jaCA9IGZ1bmN0aW9uIEV1aUljb25XcmVuY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm02LjkxOCA5Ljc0NiA0LjUzNyA0LjUzN2EyIDIgMCAxIDAgMi44MjgtMi44MjlsLTMuMTU3LTMuMTU2YS41LjUgMCAwIDEgLjcwOC0uNzA4bDMuMTU2IDMuMTU3YTMgMyAwIDEgMS00LjI0MyA0LjI0M2wtNC45NDktNC45NWE1LjAwMSA1LjAwMSAwIDAgMS01LjIyLTcuMTA2LjUuNSAwIDAgMSAuODA1LS4xMzhMMy42NzYgNS4wOWExIDEgMCAxIDAgMS40MTUtMS40MTRMMi43OTcgMS4zODJhLjUuNSAwIDAgMSAuMTM4LS44MDUgNS4wMDEgNS4wMDEgMCAxIDEgMy45ODMgOS4xNjlaTTEuMjI2IDQuMDU0YTQuMDAyIDQuMDAyIDAgMCAwIDYuNjkzIDMuODY1IDQgNCAwIDAgMC0zLjg2NS02LjY5M2wxLjc0NCAxLjc0M2EyIDIgMCAxIDEtMi44MjkgMi44MjhMMS4yMjYgNC4wNTRabTEwLjIyOSA4LjgxNGExIDEgMCAxIDEgMS40MTQtMS40MTQgMSAxIDAgMCAxLTEuNDE0IDEuNDE0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uV3JlbmNoOyIsICJpbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTAgZnJvbSAnLi9hc3NldHMvYWNjZXNzaWJpbGl0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEgZnJvbSAnLi9hc3NldHMvYWdncmVnYXRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMiBmcm9tICcuL2Fzc2V0cy9hbGVydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZUV2ZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNCBmcm9tICcuL2Fzc2V0cy9hbmFseXplX2V2ZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNSBmcm9tICcuL2Fzc2V0cy9hbm5vdGF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNiBmcm9tICcuL2Fzc2V0cy9hbm9tYWx5X2NoYXJ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNyBmcm9tICcuL2Fzc2V0cy9hbm9tYWx5X3N3aW1fbGFuZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTggZnJvbSAnLi9hc3NldHMvYXBtX3RyYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOSBmcm9tICcuL2Fzc2V0cy9hcHBfYWRkX2RhdGEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMCBmcm9tICcuL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMSBmcm9tICcuL2Fzc2V0cy9hcHBfYWdlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMiBmcm9tICcuL2Fzc2V0cy9hcHBfYXBtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMgZnJvbSAnLi9hc3NldHMvYXBwX2FwcF9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNCBmcm9tICcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUgZnJvbSAnLi9hc3NldHMvYXBwX2NhbnZhcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2IGZyb20gJy4vYXNzZXRzL2FwcF9jYXNlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3IGZyb20gJy4vYXNzZXRzL2FwcF9jb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTggZnJvbSAnLi9hc3NldHMvYXBwX2NvbnNvbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOSBmcm9tICcuL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwIGZyb20gJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMSBmcm9tICcuL2Fzc2V0cy9hcHBfZGV2dG9vbHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMiBmcm9tICcuL2Fzc2V0cy9hcHBfZGlzY292ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMyBmcm9tICcuL2Fzc2V0cy9hcHBfZW1zLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQgZnJvbSAnLi9hc3NldHMvYXBwX2ZpbGViZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUgZnJvbSAnLi9hc3NldHMvYXBwX2ZsZWV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjYgZnJvbSAnLi9hc3NldHMvYXBwX2dpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3IGZyb20gJy4vYXNzZXRzL2FwcF9ncmFwaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4IGZyb20gJy4vYXNzZXRzL2FwcF9ncm9rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkgZnJvbSAnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9tYW5hZ2VtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzEgZnJvbSAnLi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMiBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzMgZnJvbSAnLi9hc3NldHMvYXBwX2xlbnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNCBmcm9tICcuL2Fzc2V0cy9hcHBfbG9ncy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1IGZyb20gJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYgZnJvbSAnLi9hc3NldHMvYXBwX21ldHJpY2JlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNyBmcm9tICcuL2Fzc2V0cy9hcHBfbWV0cmljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4IGZyb20gJy4vYXNzZXRzL2FwcF9tbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5IGZyb20gJy4vYXNzZXRzL2FwcF9tb25pdG9yaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDAgZnJvbSAnLi9hc3NldHMvYXBwX25vdGVib29rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDEgZnJvbSAnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MiBmcm9tICcuL2Fzc2V0cy9hcHBfcGlwZWxpbmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MyBmcm9tICcuL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQgZnJvbSAnLi9hc3NldHMvYXBwX3JlcG9ydGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1IGZyb20gJy4vYXNzZXRzL2FwcF9zYXZlZF9vYmplY3RzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYgZnJvbSAnLi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eV9hbmFseXRpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OSBmcm9tICcuL2Fzc2V0cy9hcHBfc3BhY2VzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAgZnJvbSAnLi9hc3NldHMvYXBwX3NxbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxIGZyb20gJy4vYXNzZXRzL2FwcF90aW1lbGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyIGZyb20gJy4vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzIGZyb20gJy4vYXNzZXRzL2FwcF91cHRpbWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NCBmcm9tICcuL2Fzc2V0cy9hcHBfdXNlcnNfcm9sZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NSBmcm9tICcuL2Fzc2V0cy9hcHBfdmlzdWFsaXplLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTYgZnJvbSAnLi9hc3NldHMvYXBwX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3IGZyb20gJy4vYXNzZXRzL2FwcF93YXRjaGVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTggZnJvbSAnLi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OSBmcm9tICcuL2Fzc2V0cy9hcHBzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAgZnJvbSAnLi9hc3NldHMvYXJyb3dFbmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MSBmcm9tICcuL2Fzc2V0cy9hcnJvd1N0YXJ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIgZnJvbSAnLi9hc3NldHMvYXJyb3dfZG93bi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzIGZyb20gJy4vYXNzZXRzL2Fycm93X2xlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NCBmcm9tICcuL2Fzc2V0cy9hcnJvd19yaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1IGZyb20gJy4vYXNzZXRzL2Fycm93X3VwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYgZnJvbSAnLi9hc3NldHMvYXJ0aWNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3IGZyb20gJy4vYXNzZXRzL2FzdGVyaXNrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjggZnJvbSAnLi9hc3NldHMvYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OSBmcm9tICcuL2Fzc2V0cy9iZWFrZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MCBmcm9tICcuL2Fzc2V0cy9iZWxsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzEgZnJvbSAnLi9hc3NldHMvYmVsbFNsYXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIgZnJvbSAnLi9hc3NldHMvYmV0YS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczIGZyb20gJy4vYXNzZXRzL2JvbHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NCBmcm9tICcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUgZnJvbSAnLi9hc3NldHMvYm94ZXNfdmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NiBmcm9tICcuL2Fzc2V0cy9icmFuY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NyBmcm9tICcuL2Fzc2V0cy9icmFuY2hVc2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzggZnJvbSAnLi9hc3NldHMvYnJvb20uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OSBmcm9tICcuL2Fzc2V0cy9icnVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwIGZyb20gJy4vYXNzZXRzL2J1Zy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxIGZyb20gJy4vYXNzZXRzL2J1bGxzZXllLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIgZnJvbSAnLi9hc3NldHMvY2FsZW5kYXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MyBmcm9tICcuL2Fzc2V0cy9jaGFuZ2VfcG9pbnRfZGV0ZWN0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQgZnJvbSAnLi9hc3NldHMvY2hlY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NSBmcm9tICcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODYgZnJvbSAnLi9hc3NldHMvY2hlZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NyBmcm9tICcuL2Fzc2V0cy9jbGlja0xlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OCBmcm9tICcuL2Fzc2V0cy9jbGlja1JpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkgZnJvbSAnLi9hc3NldHMvY2xvY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MCBmcm9tICcuL2Fzc2V0cy9jbG9ja0NvdW50ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MSBmcm9tICcuL2Fzc2V0cy9jbG91ZERyaXp6bGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MiBmcm9tICcuL2Fzc2V0cy9jbG91ZFN0b3JteS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkzIGZyb20gJy4vYXNzZXRzL2Nsb3VkU3VubnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NCBmcm9tICcuL2Fzc2V0cy9jbHVzdGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTUgZnJvbSAnLi9hc3NldHMvY29sb3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NiBmcm9tICcuL2Fzc2V0cy9jb21wdXRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTcgZnJvbSAnLi9hc3NldHMvY29uc29sZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4IGZyb20gJy4vYXNzZXRzL2NvbnRhaW5lci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5IGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMCBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMSBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QmVsb3cuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDIgZnJvbSAnLi9hc3NldHMvY29udGludWl0eVdpdGhpbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMyBmcm9tICcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA0IGZyb20gJy4vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA1IGZyb20gJy4vYXNzZXRzL2NvcHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDYgZnJvbSAnLi9hc3NldHMvY29weV9jbGlwYm9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDcgZnJvbSAnLi9hc3NldHMvY3Jvc3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDggZnJvbSAnLi9hc3NldHMvY3Jvc3NJbkNpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwOSBmcm9tICcuL2Fzc2V0cy9jcm9zc19pbl9jaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTAgZnJvbSAnLi9hc3NldHMvY3Jvc3NoYWlycy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMSBmcm9tICcuL2Fzc2V0cy9jdXJyZW5jeS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMiBmcm9tICcuL2Fzc2V0cy9jdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTMgZnJvbSAnLi9hc3NldHMvZGF0YWJhc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTQgZnJvbSAnLi9hc3NldHMvZGVza3RvcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExNSBmcm9tICcuL2Fzc2V0cy9kaWZmLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE2IGZyb20gJy4vYXNzZXRzL2Rpc2N1c3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTcgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTggZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRFZGl0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE5IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50YXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjAgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTIxIGZyb20gJy4vYXNzZXRzL2RvdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyMiBmcm9tICcuL2Fzc2V0cy9kb3RJbkNpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyMyBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjQgZnJvbSAnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNSBmcm9tICcuL2Fzc2V0cy9kb3dubG9hZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjggZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTI5IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMxIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzQgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM1IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzYgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM3IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzggZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDEgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2JvbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDIgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0NCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0NSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0NiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaXRhbGljLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ3IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ4IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDkgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3JlZG8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTAgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3N0cmlrZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdGFibGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTIgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3VuZGVybGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1NCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTUgZnJvbSAnLi9hc3NldHMvZW1haWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTYgZnJvbSAnLi9hc3NldHMvZW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTcgZnJvbSAnLi9hc3NldHMvZW5kcG9pbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTggZnJvbSAnLi9hc3NldHMvZXFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU5IGZyb20gJy4vYXNzZXRzL2VyYXNlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MCBmcm9tICcuL2Fzc2V0cy9lcnJvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MSBmcm9tICcuL2Fzc2V0cy9lcnJvckZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MiBmcm9tICcuL2Fzc2V0cy9lc3FsVmlzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYzIGZyb20gJy4vYXNzZXRzL2V4aXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjQgZnJvbSAnLi9hc3NldHMvZXhwYW5kLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY1IGZyb20gJy4vYXNzZXRzL2V4cGFuZE1pbmkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjYgZnJvbSAnLi9hc3NldHMvZXhwb3J0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY3IGZyb20gJy4vYXNzZXRzL2V5ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2OCBmcm9tICcuL2Fzc2V0cy9leWVfY2xvc2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY5IGZyb20gJy4vYXNzZXRzL2ZhY2VfaGFwcHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzAgZnJvbSAnLi9hc3NldHMvZmFjZV9uZXV0cmFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTcxIGZyb20gJy4vYXNzZXRzL2ZhY2Vfc2FkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTcyIGZyb20gJy4vYXNzZXRzL2ZpZWxkX3N0YXRpc3RpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzMgZnJvbSAnLi9hc3NldHMvZmlsdGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc0IGZyb20gJy4vYXNzZXRzL2ZpbHRlckV4Y2x1ZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzUgZnJvbSAnLi9hc3NldHMvZmlsdGVySWdub3JlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc2IGZyb20gJy4vYXNzZXRzL2ZpbHRlckluQ2lyY2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc3IGZyb20gJy4vYXNzZXRzL2ZpbHRlckluY2x1ZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzggZnJvbSAnLi9hc3NldHMvZmxhZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3OSBmcm9tICcuL2Fzc2V0cy9mb2xkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTgwIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jaGVjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4MSBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTgyIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4MyBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfb3Blbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4NCBmcm9tICcuL2Fzc2V0cy9mcmFtZU5leHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODUgZnJvbSAnLi9hc3NldHMvZnJhbWVQcmV2aW91cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4NiBmcm9tICcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4NyBmcm9tICcuL2Fzc2V0cy9mdWxsX3NjcmVlbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4OCBmcm9tICcuL2Fzc2V0cy9mdW5jdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4OSBmcm9tICcuL2Fzc2V0cy9nZWFyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTkwIGZyb20gJy4vYXNzZXRzL2dsYXNzZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTEgZnJvbSAnLi9hc3NldHMvZ2xvYmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTIgZnJvbSAnLi9hc3NldHMvZ3JhYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5MyBmcm9tICcuL2Fzc2V0cy9ncmFiT21uaWRpcmVjdGlvbmFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk0IGZyb20gJy4vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5NSBmcm9tICcuL2Fzc2V0cy9ncmFkaWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5NiBmcm9tICcuL2Fzc2V0cy9ncmlkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk3IGZyb20gJy4vYXNzZXRzL2hlYXJ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk4IGZyb20gJy4vYXNzZXRzL2hlYXRtYXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTkgZnJvbSAnLi9hc3NldHMvaGVscC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwMCBmcm9tICcuL2Fzc2V0cy9ob21lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAxIGZyb20gJy4vYXNzZXRzL2lJbkNpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwMiBmcm9tICcuL2Fzc2V0cy9pbWFnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwMyBmcm9tICcuL2Fzc2V0cy9pbXBvcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDQgZnJvbSAnLi9hc3NldHMvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDUgZnJvbSAnLi9hc3NldHMvaW5kZXhUZW1wb3JhcnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDYgZnJvbSAnLi9hc3NldHMvaW5kZXhfY2xvc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDcgZnJvbSAnLi9hc3NldHMvaW5kZXhfZWRpdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwOCBmcm9tICcuL2Fzc2V0cy9pbmRleF9mbHVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwOSBmcm9tICcuL2Fzc2V0cy9pbmRleF9tYXBwaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjEwIGZyb20gJy4vYXNzZXRzL2luZGV4X29wZW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTEgZnJvbSAnLi9hc3NldHMvaW5kZXhfcnVudGltZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxMiBmcm9tICcuL2Fzc2V0cy9pbmRleF9zZXR0aW5ncy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxMyBmcm9tICcuL2Fzc2V0cy9pbmZpbml0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxNCBmcm9tICcuL2Fzc2V0cy9pbnB1dE91dHB1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxNSBmcm9tICcuL2Fzc2V0cy9pbnNwZWN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjE2IGZyb20gJy4vYXNzZXRzL2ludmVydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxNyBmcm9tICcuL2Fzc2V0cy9pcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxOCBmcm9tICcuL2Fzc2V0cy9pc3N1ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxOSBmcm9tICcuL2Fzc2V0cy9rZXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjAgZnJvbSAnLi9hc3NldHMva2V5Ym9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjEgZnJvbSAnLi9hc3NldHMva3FsX2ZpZWxkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjIyIGZyb20gJy4vYXNzZXRzL2txbF9mdW5jdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyMyBmcm9tICcuL2Fzc2V0cy9rcWxfb3BlcmFuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyNCBmcm9tICcuL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjUgZnJvbSAnLi9hc3NldHMva3FsX3ZhbHVlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI2IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI3IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjggZnJvbSAnLi9hc3NldHMvbGF1bmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI5IGZyb20gJy4vYXNzZXRzL2xheWVycy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzMCBmcm9tICcuL2Fzc2V0cy9sZXR0ZXJpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzEgZnJvbSAnLi9hc3NldHMvbGluZURhc2hlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzMiBmcm9tICcuL2Fzc2V0cy9saW5lRG90dGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMzIGZyb20gJy4vYXNzZXRzL2xpbmVTb2xpZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNCBmcm9tICcuL2Fzc2V0cy9saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM1IGZyb20gJy4vYXNzZXRzL2xpc3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzYgZnJvbSAnLi9hc3NldHMvbGlzdF9hZGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzcgZnJvbSAnLi9hc3NldHMvbG9jay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzOCBmcm9tICcuL2Fzc2V0cy9sb2NrT3Blbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzOSBmcm9tICcuL2Fzc2V0cy9sb2dfcGF0dGVybl9hbmFseXNpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MCBmcm9tICcuL2Fzc2V0cy9sb2dfcmF0ZV9hbmFseXNpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2FwYWNoZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2FwcF9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDQgZnJvbSAnLi9hc3NldHMvbG9nb19hd3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDUgZnJvbSAnLi9hc3NldHMvbG9nb19hd3NfbW9uby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2F6dXJlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ3IGZyb20gJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9uby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0OCBmcm9tICcuL2Fzc2V0cy9sb2dvX2JlYXRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ5IGZyb20gJy4vYXNzZXRzL2xvZ29fYnVzaW5lc3NfYW5hbHl0aWNzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUwIGZyb20gJy4vYXNzZXRzL2xvZ29fY2VwaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2Nsb3VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUyIGZyb20gJy4vYXNzZXRzL2xvZ29fY2xvdWRfZWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUzIGZyb20gJy4vYXNzZXRzL2xvZ29fY29kZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvZGVzYW5kYm94LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU1IGZyb20gJy4vYXNzZXRzL2xvZ29fY291Y2hiYXNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU2IGZyb20gJy4vYXNzZXRzL2xvZ29fZG9ja2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU3IGZyb20gJy4vYXNzZXRzL2xvZ29fZHJvcHdpemFyZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1OCBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTkgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjYwIGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpY3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2VudGVycHJpc2Vfc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjYyIGZyb20gJy4vYXNzZXRzL2xvZ29fZXRjZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2djcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2djcF9tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY1IGZyb20gJy4vYXNzZXRzL2xvZ29fZ2l0aHViLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY2IGZyb20gJy4vYXNzZXRzL2xvZ29fZ21haWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjcgZnJvbSAnLi9hc3NldHMvbG9nb19nb2xhbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjggZnJvbSAnLi9hc3NldHMvbG9nb19nb29nbGVfZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2OSBmcm9tICcuL2Fzc2V0cy9sb2dvX2hhcHJveHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzAgZnJvbSAnLi9hc3NldHMvbG9nb19pYm0uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzEgZnJvbSAnLi9hc3NldHMvbG9nb19pYm1fbW9uby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2thZmthLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjczIGZyb20gJy4vYXNzZXRzL2xvZ29fa2liYW5hLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjc0IGZyb20gJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2xvZ2dpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzYgZnJvbSAnLi9hc3NldHMvbG9nb19sb2dzdGFzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3NyBmcm9tICcuL2Fzc2V0cy9sb2dvX21hcHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzggZnJvbSAnLi9hc3NldHMvbG9nb19tZW1jYWNoZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzkgZnJvbSAnLi9hc3NldHMvbG9nb19tZXRyaWNzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgwIGZyb20gJy4vYXNzZXRzL2xvZ29fbW9uZ29kYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MSBmcm9tICcuL2Fzc2V0cy9sb2dvX215c3FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgyIGZyb20gJy4vYXNzZXRzL2xvZ29fbmdpbnguanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODMgZnJvbSAnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg0IGZyb20gJy4vYXNzZXRzL2xvZ29fb3NxdWVyeS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NSBmcm9tICcuL2Fzc2V0cy9sb2dvX3BocC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NiBmcm9tICcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg3IGZyb20gJy4vYXNzZXRzL2xvZ29fcHJvbWV0aGV1cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4OCBmcm9tICcuL2Fzc2V0cy9sb2dvX3JhYmJpdG1xLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg5IGZyb20gJy4vYXNzZXRzL2xvZ29fcmVkaXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTAgZnJvbSAnLi9hc3NldHMvbG9nb19zZWN1cml0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5MSBmcm9tICcuL2Fzc2V0cy9sb2dvX3NpdGVfc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkyIGZyb20gJy4vYXNzZXRzL2xvZ29fc2tldGNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkzIGZyb20gJy4vYXNzZXRzL2xvZ29fc2xhY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTQgZnJvbSAnLi9hc3NldHMvbG9nb191cHRpbWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTUgZnJvbSAnLi9hc3NldHMvbG9nb192dWxuZXJhYmlsaXR5X21hbmFnZW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTYgZnJvbSAnLi9hc3NldHMvbG9nb193ZWJob29rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk3IGZyb20gJy4vYXNzZXRzL2xvZ29fd2luZG93cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5OCBmcm9tICcuL2Fzc2V0cy9sb2dvX3dvcmtwbGFjZV9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTkgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAwIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX2lmLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAxIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX2lucHV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAyIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX291dHB1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwMyBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9xdWV1ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNCBmcm9tICcuL2Fzc2V0cy9tYWduZXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDUgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNiBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aE1pbnVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA3IGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoUGx1cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwOCBmcm9tICcuL2Fzc2V0cy9tYXBfbWFya2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA5IGZyb20gJy4vYXNzZXRzL21lbW9yeS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxMCBmcm9tICcuL2Fzc2V0cy9tZW51LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzExIGZyb20gJy4vYXNzZXRzL21lbnVEb3duLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzEyIGZyb20gJy4vYXNzZXRzL21lbnVMZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzEzIGZyb20gJy4vYXNzZXRzL21lbnVSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxNCBmcm9tICcuL2Fzc2V0cy9tZW51VXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTUgZnJvbSAnLi9hc3NldHMvbWVyZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTYgZnJvbSAnLi9hc3NldHMvbWluaW1pemUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTcgZnJvbSAnLi9hc3NldHMvbWludXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTggZnJvbSAnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE5IGZyb20gJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZV9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjAgZnJvbSAnLi9hc3NldHMvbWludXNfaW5fc3F1YXJlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIxIGZyb20gJy4vYXNzZXRzL21sX2NsYXNzaWZpY2F0aW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMiBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIzIGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI0IGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9wb3B1bGF0aW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyNSBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjYgZnJvbSAnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI3IGZyb20gJy4vYXNzZXRzL21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyOCBmcm9tICcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyOSBmcm9tICcuL2Fzc2V0cy9tb2JpbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzAgZnJvbSAnLi9hc3NldHMvbW9vbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzMSBmcm9tICcuL2Fzc2V0cy9tb3ZlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzMyIGZyb20gJy4vYXNzZXRzL25hbWVzcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzMyBmcm9tICcuL2Fzc2V0cy9uZXN0ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzQgZnJvbSAnLi9hc3NldHMvbmV3X2NoYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzUgZnJvbSAnLi9hc3NldHMvbm9kZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzNiBmcm9tICcuL2Fzc2V0cy9udW1iZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzcgZnJvbSAnLi9hc3NldHMvb2ZmbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzOCBmcm9tICcuL2Fzc2V0cy9vbmxpbmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzkgZnJvbSAnLi9hc3NldHMvcGFja2FnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0MCBmcm9tICcuL2Fzc2V0cy9wYWdlU2VsZWN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQxIGZyb20gJy4vYXNzZXRzL3BhZ2VzU2VsZWN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQyIGZyb20gJy4vYXNzZXRzL3BhaW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQzIGZyb20gJy4vYXNzZXRzL3BhbGV0dGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDQgZnJvbSAnLi9hc3NldHMvcGFwZXJfY2xpcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NSBmcm9tICcuL2Fzc2V0cy9wYXJ0aWFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ2IGZyb20gJy4vYXNzZXRzL3BhdXNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ3IGZyb20gJy4vYXNzZXRzL3BheW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDggZnJvbSAnLi9hc3NldHMvcGVuY2lsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ5IGZyb20gJy4vYXNzZXRzL3BlcmNlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTAgZnJvbSAnLi9hc3NldHMvcGluLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzUxIGZyb20gJy4vYXNzZXRzL3Bpbl9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTIgZnJvbSAnLi9hc3NldHMvcGlwZUJyZWFrcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1MyBmcm9tICcuL2Fzc2V0cy9waXBlTm9CcmVha3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTQgZnJvbSAnLi9hc3NldHMvcGl2b3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTUgZnJvbSAnLi9hc3NldHMvcGxheS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1NiBmcm9tICcuL2Fzc2V0cy9wbGF5RmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU3IGZyb20gJy4vYXNzZXRzL3BsdXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTggZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTkgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYwIGZyb20gJy4vYXNzZXRzL3BsdXNfaW5fc3F1YXJlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYxIGZyb20gJy4vYXNzZXRzL3BvcG91dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MiBmcm9tICcuL2Fzc2V0cy9wdXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYzIGZyb20gJy4vYXNzZXRzL3F1ZXN0aW9uX2luX2NpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NCBmcm9tICcuL2Fzc2V0cy9xdW90ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NSBmcm9tICcuL2Fzc2V0cy9yZWZyZXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY2IGZyb20gJy4vYXNzZXRzL3JlcG9ydGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY3IGZyb20gJy4vYXNzZXRzL3JldHVybl9rZXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjggZnJvbSAnLi9hc3NldHMvc2F2ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2OSBmcm9tICcuL2Fzc2V0cy9zY2FsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3MCBmcm9tICcuL2Fzc2V0cy9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzEgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzIgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxEZXRlY3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3MyBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc0IGZyb20gJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzUgZnJvbSAnLi9hc3NldHMvc2hhcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzYgZnJvbSAnLi9hc3NldHMvc2hhcmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzcgZnJvbSAnLi9hc3NldHMvc2luZ2xlX21ldHJpY192aWV3ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzggZnJvbSAnLi9hc3NldHMvc25vd2ZsYWtlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc5IGZyb20gJy4vYXNzZXRzL3NvcnRBc2NlbmRpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODAgZnJvbSAnLi9hc3NldHMvc29ydERlc2NlbmRpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODEgZnJvbSAnLi9hc3NldHMvc29ydExlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODIgZnJvbSAnLi9hc3NldHMvc29ydFJpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzgzIGZyb20gJy4vYXNzZXRzL3NvcnRfZG93bi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NCBmcm9tICcuL2Fzc2V0cy9zb3J0X3VwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg1IGZyb20gJy4vYXNzZXRzL3NvcnRhYmxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg2IGZyb20gJy4vYXNzZXRzL3NwYWNlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NyBmcm9tICcuL2Fzc2V0cy9zcGFya2xlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4OCBmcm9tICcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg5IGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkwIGZyb20gJy4vYXNzZXRzL3N0YXJfZW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTEgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5MiBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5MyBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5NCBmcm9tICcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk1IGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk2IGZyb20gJy4vYXNzZXRzL3N0YXRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk3IGZyb20gJy4vYXNzZXRzL3N0b3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTggZnJvbSAnLi9hc3NldHMvc3RvcF9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTkgZnJvbSAnLi9hc3NldHMvc3RvcF9zbGFzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMCBmcm9tICcuL2Fzc2V0cy9zdG9yYWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDAxIGZyb20gJy4vYXNzZXRzL3N0cmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMiBmcm9tICcuL2Fzc2V0cy9zdWJtb2R1bGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDMgZnJvbSAnLi9hc3NldHMvc3VuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDA0IGZyb20gJy4vYXNzZXRzL3N3YXRjaF9pbnB1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNSBmcm9tICcuL2Fzc2V0cy9zeW1saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDA2IGZyb20gJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNyBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDggZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwOSBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxMCBmcm9tICcuL2Fzc2V0cy90YWcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTEgZnJvbSAnLi9hc3NldHMvdGVhci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxMiBmcm9tICcuL2Fzc2V0cy90ZW1wZXJhdHVyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxMyBmcm9tICcuL2Fzc2V0cy90aW1lUmVmcmVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNCBmcm9tICcuL2Fzc2V0cy90aW1lbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNSBmcm9tICcuL2Fzc2V0cy90aW1lbGluZVdpdGhBcnJvdy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNiBmcm9tICcuL2Fzc2V0cy90aW1lc2xpZGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE3IGZyb20gJy4vYXNzZXRzL3Rva2VuQWxpYXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTggZnJvbSAnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE5IGZyb20gJy4vYXNzZXRzL3Rva2VuQXJyYXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjAgZnJvbSAnLi9hc3NldHMvdG9rZW5CaW5hcnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjEgZnJvbSAnLi9hc3NldHMvdG9rZW5Cb29sZWFuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDIyIGZyb20gJy4vYXNzZXRzL3Rva2VuQ2xhc3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjMgZnJvbSAnLi9hc3NldHMvdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI0IGZyb20gJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjUgZnJvbSAnLi9hc3NldHMvdG9rZW5EYXRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI2IGZyb20gJy4vYXNzZXRzL3Rva2VuRGltZW5zaW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI3IGZyb20gJy4vYXNzZXRzL3Rva2VuRWxlbWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyOCBmcm9tICcuL2Fzc2V0cy90b2tlbkVudW0uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjkgZnJvbSAnLi9hc3NldHMvdG9rZW5FbnVtTWVtYmVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMwIGZyb20gJy4vYXNzZXRzL3Rva2VuRXZlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzEgZnJvbSAnLi9hc3NldHMvdG9rZW5FeGNlcHRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzIgZnJvbSAnLi9hc3NldHMvdG9rZW5GaWVsZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzMyBmcm9tICcuL2Fzc2V0cy90b2tlbkZpbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzQgZnJvbSAnLi9hc3NldHMvdG9rZW5GbGF0dGVuZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzUgZnJvbSAnLi9hc3NldHMvdG9rZW5GdW5jdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzNiBmcm9tICcuL2Fzc2V0cy90b2tlbkdlby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzNyBmcm9tICcuL2Fzc2V0cy90b2tlbkhpc3RvZ3JhbS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzOCBmcm9tICcuL2Fzc2V0cy90b2tlbklQLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM5IGZyb20gJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQwIGZyb20gJy4vYXNzZXRzL3Rva2VuSm9pbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MSBmcm9tICcuL2Fzc2V0cy90b2tlbktleS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MiBmcm9tICcuL2Fzc2V0cy90b2tlbktleXdvcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDMgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRob2QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDQgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRyaWNDb3VudGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ1IGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDYgZnJvbSAnLi9hc3NldHMvdG9rZW5Nb2R1bGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDcgZnJvbSAnLi9hc3NldHMvdG9rZW5OYW1lc3BhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDggZnJvbSAnLi9hc3NldHMvdG9rZW5OZXN0ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDkgZnJvbSAnLi9hc3NldHMvdG9rZW5OdWxsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDUwIGZyb20gJy4vYXNzZXRzL3Rva2VuTnVtYmVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDUxIGZyb20gJy4vYXNzZXRzL3Rva2VuT2JqZWN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDUyIGZyb20gJy4vYXNzZXRzL3Rva2VuT3BlcmF0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTMgZnJvbSAnLi9hc3NldHMvdG9rZW5QYWNrYWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU0IGZyb20gJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU1IGZyb20gJy4vYXNzZXRzL3Rva2VuUGVyY29sYXRvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NiBmcm9tICcuL2Fzc2V0cy90b2tlblByb3BlcnR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU3IGZyb20gJy4vYXNzZXRzL3Rva2VuUmFuZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTggZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OSBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MCBmcm9tICcuL2Fzc2V0cy90b2tlblJlcG8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjEgZnJvbSAnLi9hc3NldHMvdG9rZW5TZWFyY2hUeXBlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYyIGZyb20gJy4vYXNzZXRzL3Rva2VuU2VtYW50aWNUZXh0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYzIGZyb20gJy4vYXNzZXRzL3Rva2VuU2hhcGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjQgZnJvbSAnLi9hc3NldHMvdG9rZW5TdHJpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjUgZnJvbSAnLi9hc3NldHMvdG9rZW5TdHJ1Y3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjYgZnJvbSAnLi9hc3NldHMvdG9rZW5TeW1ib2wuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjcgZnJvbSAnLi9hc3NldHMvdG9rZW5UYWcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjggZnJvbSAnLi9hc3NldHMvdG9rZW5UZXh0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY5IGZyb20gJy4vYXNzZXRzL3Rva2VuVG9rZW5Db3VudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MCBmcm9tICcuL2Fzc2V0cy90b2tlblZhcmlhYmxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDcxIGZyb20gJy4vYXNzZXRzL3Rva2VuVmVjdG9yRGVuc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzIgZnJvbSAnLi9hc3NldHMvdG9rZW5WZWN0b3JTcGFyc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzMgZnJvbSAnLi9hc3NldHMvdHJhaW5pbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzQgZnJvbSAnLi9hc3NldHMvdHJhbnNpdGlvbkxlZnRJbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NSBmcm9tICcuL2Fzc2V0cy90cmFuc2l0aW9uTGVmdE91dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NiBmcm9tICcuL2Fzc2V0cy90cmFuc2l0aW9uVG9wSW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzcgZnJvbSAnLi9hc3NldHMvdHJhbnNpdGlvblRvcE91dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OCBmcm9tICcuL2Fzc2V0cy90cmFzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OSBmcm9tICcuL2Fzc2V0cy91bmZvbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODAgZnJvbSAnLi9hc3NldHMvdW5saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDgxIGZyb20gJy4vYXNzZXRzL3VzZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODIgZnJvbSAnLi9hc3NldHMvdXNlckF2YXRhci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MyBmcm9tICcuL2Fzc2V0cy91c2Vycy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NCBmcm9tICcuL2Fzc2V0cy92ZWN0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODUgZnJvbSAnLi9hc3NldHMvdmlkZW9QbGF5ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODYgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODcgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4OCBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODkgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTAgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MSBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTIgZnJvbSAnLi9hc3NldHMvdmlzX2dhdWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDkzIGZyb20gJy4vYXNzZXRzL3Zpc19nb2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk0IGZyb20gJy4vYXNzZXRzL3Zpc19saW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk1IGZyb20gJy4vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NiBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NyBmcm9tICcuL2Fzc2V0cy92aXNfbWV0cmljLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk4IGZyb20gJy4vYXNzZXRzL3Zpc19waWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTkgZnJvbSAnLi9hc3NldHMvdmlzX3RhYmxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAwIGZyb20gJy4vYXNzZXRzL3Zpc190YWdfY2xvdWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDEgZnJvbSAnLi9hc3NldHMvdmlzX3RleHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDIgZnJvbSAnLi9hc3NldHMvdmlzX3RpbWVsaW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAzIGZyb20gJy4vYXNzZXRzL3Zpc192ZWdhLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA0IGZyb20gJy4vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwNSBmcm9tICcuL2Fzc2V0cy93YXJuaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA2IGZyb20gJy4vYXNzZXRzL3dhcm5pbmdGaWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDcgZnJvbSAnLi9hc3NldHMvd29yZFdyYXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDggZnJvbSAnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwOSBmcm9tICcuL2Fzc2V0cy93cmVuY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTAgZnJvbSAnLi9hc3NldHMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxMSBmcm9tICcuL2Fzc2V0cy9hZ2dyZWdhdGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTIgZnJvbSAnLi9hc3NldHMvYWxlcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTMgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZUV2ZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE0IGZyb20gJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTUgZnJvbSAnLi9hc3NldHMvYW5ub3RhdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNiBmcm9tICcuL2Fzc2V0cy9hbm9tYWx5X2NoYXJ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE3IGZyb20gJy4vYXNzZXRzL2Fub21hbHlfc3dpbV9sYW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE4IGZyb20gJy4vYXNzZXRzL2FwbV90cmFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxOSBmcm9tICcuL2Fzc2V0cy9hcHBfYWRkX2RhdGEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjAgZnJvbSAnLi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIxIGZyb20gJy4vYXNzZXRzL2FwcF9hZ2VudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyMiBmcm9tICcuL2Fzc2V0cy9hcHBfYXBtJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIzIGZyb20gJy4vYXNzZXRzL2FwcF9hcHBfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI0IGZyb20gJy4vYXNzZXRzL2FwcF9hdWRpdGJlYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjUgZnJvbSAnLi9hc3NldHMvYXBwX2NhbnZhcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyNiBmcm9tICcuL2Fzc2V0cy9hcHBfY2FzZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjcgZnJvbSAnLi9hc3NldHMvYXBwX2NvZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjggZnJvbSAnLi9hc3NldHMvYXBwX2NvbnNvbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjkgZnJvbSAnLi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzAgZnJvbSAnLi9hc3NldHMvYXBwX2Rhc2hib2FyZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzMSBmcm9tICcuL2Fzc2V0cy9hcHBfZGV2dG9vbHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzIgZnJvbSAnLi9hc3NldHMvYXBwX2Rpc2NvdmVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMzIGZyb20gJy4vYXNzZXRzL2FwcF9lbXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzQgZnJvbSAnLi9hc3NldHMvYXBwX2ZpbGViZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM1IGZyb20gJy4vYXNzZXRzL2FwcF9mbGVldCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzNiBmcm9tICcuL2Fzc2V0cy9hcHBfZ2lzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM3IGZyb20gJy4vYXNzZXRzL2FwcF9ncmFwaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzOCBmcm9tICcuL2Fzc2V0cy9hcHBfZ3Jvayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzOSBmcm9tICcuL2Fzc2V0cy9hcHBfaGVhcnRiZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQwIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9tYW5hZ2VtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQxIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQyIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDMgZnJvbSAnLi9hc3NldHMvYXBwX2xlbnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDQgZnJvbSAnLi9hc3NldHMvYXBwX2xvZ3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDUgZnJvbSAnLi9hc3NldHMvYXBwX21hbmFnZW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDYgZnJvbSAnLi9hc3NldHMvYXBwX21ldHJpY2JlYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDcgZnJvbSAnLi9hc3NldHMvYXBwX21ldHJpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDggZnJvbSAnLi9hc3NldHMvYXBwX21sJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ5IGZyb20gJy4vYXNzZXRzL2FwcF9tb25pdG9yaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUwIGZyb20gJy4vYXNzZXRzL2FwcF9ub3RlYm9vayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1MSBmcm9tICcuL2Fzc2V0cy9hcHBfcGFja2V0YmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1MiBmcm9tICcuL2Fzc2V0cy9hcHBfcGlwZWxpbmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTMgZnJvbSAnLi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1NCBmcm9tICcuL2Fzc2V0cy9hcHBfcmVwb3J0aW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU1IGZyb20gJy4vYXNzZXRzL2FwcF9zYXZlZF9vYmplY3RzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU2IGZyb20gJy4vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTcgZnJvbSAnLi9hc3NldHMvYXBwX3NlY3VyaXR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU4IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eV9hbmFseXRpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTkgZnJvbSAnLi9hc3NldHMvYXBwX3NwYWNlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2MCBmcm9tICcuL2Fzc2V0cy9hcHBfc3FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTYxIGZyb20gJy4vYXNzZXRzL2FwcF90aW1lbGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2MiBmcm9tICcuL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjMgZnJvbSAnLi9hc3NldHMvYXBwX3VwdGltZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NCBmcm9tICcuL2Fzc2V0cy9hcHBfdXNlcnNfcm9sZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjUgZnJvbSAnLi9hc3NldHMvYXBwX3Zpc3VhbGl6ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NiBmcm9tICcuL2Fzc2V0cy9hcHBfdnVsbmVyYWJpbGl0eV9tYW5hZ2VtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY3IGZyb20gJy4vYXNzZXRzL2FwcF93YXRjaGVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY4IGZyb20gJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY5IGZyb20gJy4vYXNzZXRzL2FwcHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzAgZnJvbSAnLi9hc3NldHMvYXJyb3dFbmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzEgZnJvbSAnLi9hc3NldHMvYXJyb3dTdGFydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3MiBmcm9tICcuL2Fzc2V0cy9hcnJvd19kb3duJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTczIGZyb20gJy4vYXNzZXRzL2Fycm93X2xlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzQgZnJvbSAnLi9hc3NldHMvYXJyb3dfcmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzUgZnJvbSAnLi9hc3NldHMvYXJyb3dfdXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzYgZnJvbSAnLi9hc3NldHMvYXJ0aWNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3NyBmcm9tICcuL2Fzc2V0cy9hc3Rlcmlzayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3OCBmcm9tICcuL2Fzc2V0cy9hdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3OSBmcm9tICcuL2Fzc2V0cy9iZWFrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODAgZnJvbSAnLi9hc3NldHMvYmVsbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MSBmcm9tICcuL2Fzc2V0cy9iZWxsU2xhc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODIgZnJvbSAnLi9hc3NldHMvYmV0YSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MyBmcm9tICcuL2Fzc2V0cy9ib2x0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg0IGZyb20gJy4vYXNzZXRzL2JveGVzX2hvcml6b250YWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODUgZnJvbSAnLi9hc3NldHMvYm94ZXNfdmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODYgZnJvbSAnLi9hc3NldHMvYnJhbmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg3IGZyb20gJy4vYXNzZXRzL2JyYW5jaFVzZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODggZnJvbSAnLi9hc3NldHMvYnJvb20nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODkgZnJvbSAnLi9hc3NldHMvYnJ1c2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTAgZnJvbSAnLi9hc3NldHMvYnVnJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTkxIGZyb20gJy4vYXNzZXRzL2J1bGxzZXllJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTkyIGZyb20gJy4vYXNzZXRzL2NhbGVuZGFyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTkzIGZyb20gJy4vYXNzZXRzL2NoYW5nZV9wb2ludF9kZXRlY3Rpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTQgZnJvbSAnLi9hc3NldHMvY2hlY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTUgZnJvbSAnLi9hc3NldHMvY2hlY2tJbkNpcmNsZUZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5NiBmcm9tICcuL2Fzc2V0cy9jaGVlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5NyBmcm9tICcuL2Fzc2V0cy9jbGlja0xlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTggZnJvbSAnLi9hc3NldHMvY2xpY2tSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5OSBmcm9tICcuL2Fzc2V0cy9jbG9jayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwMCBmcm9tICcuL2Fzc2V0cy9jbG9ja0NvdW50ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDEgZnJvbSAnLi9hc3NldHMvY2xvdWREcml6emxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAyIGZyb20gJy4vYXNzZXRzL2Nsb3VkU3Rvcm15JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAzIGZyb20gJy4vYXNzZXRzL2Nsb3VkU3VubnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDQgZnJvbSAnLi9hc3NldHMvY2x1c3Rlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNSBmcm9tICcuL2Fzc2V0cy9jb2xvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNiBmcm9tICcuL2Fzc2V0cy9jb21wdXRlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA3IGZyb20gJy4vYXNzZXRzL2NvbnNvbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDggZnJvbSAnLi9hc3NldHMvY29udGFpbmVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA5IGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxMCBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxMSBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QmVsb3cnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTIgZnJvbSAnLi9hc3NldHMvY29udGludWl0eVdpdGhpbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxMyBmcm9tICcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE0IGZyb20gJy4vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE1IGZyb20gJy4vYXNzZXRzL2NvcHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTYgZnJvbSAnLi9hc3NldHMvY29weV9jbGlwYm9hcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTcgZnJvbSAnLi9hc3NldHMvY3Jvc3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTggZnJvbSAnLi9hc3NldHMvY3Jvc3NJbkNpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxOSBmcm9tICcuL2Fzc2V0cy9jcm9zc19pbl9jaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjAgZnJvbSAnLi9hc3NldHMvY3Jvc3NoYWlycyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyMSBmcm9tICcuL2Fzc2V0cy9jdXJyZW5jeSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyMiBmcm9tICcuL2Fzc2V0cy9jdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjMgZnJvbSAnLi9hc3NldHMvZGF0YWJhc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjQgZnJvbSAnLi9hc3NldHMvZGVza3RvcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyNSBmcm9tICcuL2Fzc2V0cy9kaWZmJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI2IGZyb20gJy4vYXNzZXRzL2Rpc2N1c3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjcgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjggZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRFZGl0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI5IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50YXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzAgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjMxIGZyb20gJy4vYXNzZXRzL2RvdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzMiBmcm9tICcuL2Fzc2V0cy9kb3RJbkNpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzMyBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzQgZnJvbSAnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzNSBmcm9tICcuL2Fzc2V0cy9kb3dubG9hZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzNiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzNyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzggZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjM5IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQxIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDQgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ1IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDYgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ3IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDggZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0OSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTEgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2JvbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTIgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1NCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1NSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1NiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaXRhbGljJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU3IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU4IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTkgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3JlZG8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjAgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3N0cmlrZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2MSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdGFibGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjIgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3VuZGVybGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2NCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjUgZnJvbSAnLi9hc3NldHMvZW1haWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjYgZnJvbSAnLi9hc3NldHMvZW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjcgZnJvbSAnLi9hc3NldHMvZW5kcG9pbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjggZnJvbSAnLi9hc3NldHMvZXFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY5IGZyb20gJy4vYXNzZXRzL2VyYXNlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3MCBmcm9tICcuL2Fzc2V0cy9lcnJvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3MSBmcm9tICcuL2Fzc2V0cy9lcnJvckZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3MiBmcm9tICcuL2Fzc2V0cy9lc3FsVmlzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjczIGZyb20gJy4vYXNzZXRzL2V4aXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzQgZnJvbSAnLi9hc3NldHMvZXhwYW5kJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc1IGZyb20gJy4vYXNzZXRzL2V4cGFuZE1pbmknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzYgZnJvbSAnLi9hc3NldHMvZXhwb3J0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc3IGZyb20gJy4vYXNzZXRzL2V5ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3OCBmcm9tICcuL2Fzc2V0cy9leWVfY2xvc2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc5IGZyb20gJy4vYXNzZXRzL2ZhY2VfaGFwcHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODAgZnJvbSAnLi9hc3NldHMvZmFjZV9uZXV0cmFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjgxIGZyb20gJy4vYXNzZXRzL2ZhY2Vfc2FkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjgyIGZyb20gJy4vYXNzZXRzL2ZpZWxkX3N0YXRpc3RpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODMgZnJvbSAnLi9hc3NldHMvZmlsdGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg0IGZyb20gJy4vYXNzZXRzL2ZpbHRlckV4Y2x1ZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODUgZnJvbSAnLi9hc3NldHMvZmlsdGVySWdub3JlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg2IGZyb20gJy4vYXNzZXRzL2ZpbHRlckluQ2lyY2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg3IGZyb20gJy4vYXNzZXRzL2ZpbHRlckluY2x1ZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODggZnJvbSAnLi9hc3NldHMvZmxhZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4OSBmcm9tICcuL2Fzc2V0cy9mb2xkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkwIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jaGVjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MSBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkyIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MyBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfb3Blbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5NCBmcm9tICcuL2Fzc2V0cy9mcmFtZU5leHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTUgZnJvbSAnLi9hc3NldHMvZnJhbWVQcmV2aW91cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5NiBmcm9tICcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5NyBmcm9tICcuL2Fzc2V0cy9mdWxsX3NjcmVlbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5OCBmcm9tICcuL2Fzc2V0cy9mdW5jdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5OSBmcm9tICcuL2Fzc2V0cy9nZWFyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAwIGZyb20gJy4vYXNzZXRzL2dsYXNzZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDEgZnJvbSAnLi9hc3NldHMvZ2xvYmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDIgZnJvbSAnLi9hc3NldHMvZ3JhYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwMyBmcm9tICcuL2Fzc2V0cy9ncmFiT21uaWRpcmVjdGlvbmFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA0IGZyb20gJy4vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwNSBmcm9tICcuL2Fzc2V0cy9ncmFkaWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwNiBmcm9tICcuL2Fzc2V0cy9ncmlkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA3IGZyb20gJy4vYXNzZXRzL2hlYXJ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA4IGZyb20gJy4vYXNzZXRzL2hlYXRtYXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDkgZnJvbSAnLi9hc3NldHMvaGVscCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxMCBmcm9tICcuL2Fzc2V0cy9ob21lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzExIGZyb20gJy4vYXNzZXRzL2lJbkNpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxMiBmcm9tICcuL2Fzc2V0cy9pbWFnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxMyBmcm9tICcuL2Fzc2V0cy9pbXBvcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTQgZnJvbSAnLi9hc3NldHMvaW5kZXgnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTUgZnJvbSAnLi9hc3NldHMvaW5kZXhUZW1wb3JhcnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTYgZnJvbSAnLi9hc3NldHMvaW5kZXhfY2xvc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTcgZnJvbSAnLi9hc3NldHMvaW5kZXhfZWRpdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxOCBmcm9tICcuL2Fzc2V0cy9pbmRleF9mbHVzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxOSBmcm9tICcuL2Fzc2V0cy9pbmRleF9tYXBwaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIwIGZyb20gJy4vYXNzZXRzL2luZGV4X29wZW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjEgZnJvbSAnLi9hc3NldHMvaW5kZXhfcnVudGltZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyMiBmcm9tICcuL2Fzc2V0cy9pbmRleF9zZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyMyBmcm9tICcuL2Fzc2V0cy9pbmZpbml0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyNCBmcm9tICcuL2Fzc2V0cy9pbnB1dE91dHB1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyNSBmcm9tICcuL2Fzc2V0cy9pbnNwZWN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI2IGZyb20gJy4vYXNzZXRzL2ludmVydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyNyBmcm9tICcuL2Fzc2V0cy9pcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyOCBmcm9tICcuL2Fzc2V0cy9pc3N1ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyOSBmcm9tICcuL2Fzc2V0cy9rZXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzAgZnJvbSAnLi9hc3NldHMva2V5Ym9hcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzEgZnJvbSAnLi9hc3NldHMva3FsX2ZpZWxkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzMyIGZyb20gJy4vYXNzZXRzL2txbF9mdW5jdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczMyBmcm9tICcuL2Fzc2V0cy9rcWxfb3BlcmFuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNCBmcm9tICcuL2Fzc2V0cy9rcWxfc2VsZWN0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzUgZnJvbSAnLi9hc3NldHMva3FsX3ZhbHVlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM2IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM3IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzggZnJvbSAnLi9hc3NldHMvbGF1bmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM5IGZyb20gJy4vYXNzZXRzL2xheWVycyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MCBmcm9tICcuL2Fzc2V0cy9sZXR0ZXJpbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDEgZnJvbSAnLi9hc3NldHMvbGluZURhc2hlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MiBmcm9tICcuL2Fzc2V0cy9saW5lRG90dGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQzIGZyb20gJy4vYXNzZXRzL2xpbmVTb2xpZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0NCBmcm9tICcuL2Fzc2V0cy9saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ1IGZyb20gJy4vYXNzZXRzL2xpc3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDYgZnJvbSAnLi9hc3NldHMvbGlzdF9hZGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDcgZnJvbSAnLi9hc3NldHMvbG9jayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0OCBmcm9tICcuL2Fzc2V0cy9sb2NrT3Blbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0OSBmcm9tICcuL2Fzc2V0cy9sb2dfcGF0dGVybl9hbmFseXNpcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MCBmcm9tICcuL2Fzc2V0cy9sb2dfcmF0ZV9hbmFseXNpcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2FwYWNoZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2FwcF9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTQgZnJvbSAnLi9hc3NldHMvbG9nb19hd3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTUgZnJvbSAnLi9hc3NldHMvbG9nb19hd3NfbW9ubyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2F6dXJlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU3IGZyb20gJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9ubyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1OCBmcm9tICcuL2Fzc2V0cy9sb2dvX2JlYXRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU5IGZyb20gJy4vYXNzZXRzL2xvZ29fYnVzaW5lc3NfYW5hbHl0aWNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYwIGZyb20gJy4vYXNzZXRzL2xvZ29fY2VwaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2Nsb3VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYyIGZyb20gJy4vYXNzZXRzL2xvZ29fY2xvdWRfZWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYzIGZyb20gJy4vYXNzZXRzL2xvZ29fY29kZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvZGVzYW5kYm94JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY1IGZyb20gJy4vYXNzZXRzL2xvZ29fY291Y2hiYXNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY2IGZyb20gJy4vYXNzZXRzL2xvZ29fZG9ja2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY3IGZyb20gJy4vYXNzZXRzL2xvZ29fZHJvcHdpemFyZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2OCBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjkgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzcwIGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpY3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2VudGVycHJpc2Vfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzcyIGZyb20gJy4vYXNzZXRzL2xvZ29fZXRjZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2djcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2djcF9tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc1IGZyb20gJy4vYXNzZXRzL2xvZ29fZ2l0aHViJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc2IGZyb20gJy4vYXNzZXRzL2xvZ29fZ21haWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzcgZnJvbSAnLi9hc3NldHMvbG9nb19nb2xhbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzggZnJvbSAnLi9hc3NldHMvbG9nb19nb29nbGVfZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3OSBmcm9tICcuL2Fzc2V0cy9sb2dvX2hhcHJveHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODAgZnJvbSAnLi9hc3NldHMvbG9nb19pYm0nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODEgZnJvbSAnLi9hc3NldHMvbG9nb19pYm1fbW9ubyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2thZmthJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzgzIGZyb20gJy4vYXNzZXRzL2xvZ29fa2liYW5hJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg0IGZyb20gJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2xvZ2dpbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODYgZnJvbSAnLi9hc3NldHMvbG9nb19sb2dzdGFzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4NyBmcm9tICcuL2Fzc2V0cy9sb2dvX21hcHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODggZnJvbSAnLi9hc3NldHMvbG9nb19tZW1jYWNoZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODkgZnJvbSAnLi9hc3NldHMvbG9nb19tZXRyaWNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkwIGZyb20gJy4vYXNzZXRzL2xvZ29fbW9uZ29kYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5MSBmcm9tICcuL2Fzc2V0cy9sb2dvX215c3FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkyIGZyb20gJy4vYXNzZXRzL2xvZ29fbmdpbngnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTMgZnJvbSAnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk0IGZyb20gJy4vYXNzZXRzL2xvZ29fb3NxdWVyeSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5NSBmcm9tICcuL2Fzc2V0cy9sb2dvX3BocCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5NiBmcm9tICcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk3IGZyb20gJy4vYXNzZXRzL2xvZ29fcHJvbWV0aGV1cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5OCBmcm9tICcuL2Fzc2V0cy9sb2dvX3JhYmJpdG1xJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk5IGZyb20gJy4vYXNzZXRzL2xvZ29fcmVkaXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDAgZnJvbSAnLi9hc3NldHMvbG9nb19zZWN1cml0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwMSBmcm9tICcuL2Fzc2V0cy9sb2dvX3NpdGVfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAyIGZyb20gJy4vYXNzZXRzL2xvZ29fc2tldGNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAzIGZyb20gJy4vYXNzZXRzL2xvZ29fc2xhY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDQgZnJvbSAnLi9hc3NldHMvbG9nb191cHRpbWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDUgZnJvbSAnLi9hc3NldHMvbG9nb192dWxuZXJhYmlsaXR5X21hbmFnZW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDYgZnJvbSAnLi9hc3NldHMvbG9nb193ZWJob29rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODA3IGZyb20gJy4vYXNzZXRzL2xvZ29fd2luZG93cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwOCBmcm9tICcuL2Fzc2V0cy9sb2dvX3dvcmtwbGFjZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDkgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEwIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX2lmJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODExIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX2lucHV0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEyIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX291dHB1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxMyBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9xdWV1ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNCBmcm9tICcuL2Fzc2V0cy9tYWduZXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTUgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNiBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aE1pbnVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE3IGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoUGx1cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxOCBmcm9tICcuL2Fzc2V0cy9tYXBfbWFya2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE5IGZyb20gJy4vYXNzZXRzL21lbW9yeSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyMCBmcm9tICcuL2Fzc2V0cy9tZW51JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIxIGZyb20gJy4vYXNzZXRzL21lbnVEb3duJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIyIGZyb20gJy4vYXNzZXRzL21lbnVMZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIzIGZyb20gJy4vYXNzZXRzL21lbnVSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyNCBmcm9tICcuL2Fzc2V0cy9tZW51VXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjUgZnJvbSAnLi9hc3NldHMvbWVyZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjYgZnJvbSAnLi9hc3NldHMvbWluaW1pemUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjcgZnJvbSAnLi9hc3NldHMvbWludXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjggZnJvbSAnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI5IGZyb20gJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZV9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzAgZnJvbSAnLi9hc3NldHMvbWludXNfaW5fc3F1YXJlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMxIGZyb20gJy4vYXNzZXRzL21sX2NsYXNzaWZpY2F0aW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzMiBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMzIGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM0IGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9wb3B1bGF0aW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNSBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzYgZnJvbSAnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM3IGZyb20gJy4vYXNzZXRzL21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzOCBmcm9tICcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzOSBmcm9tICcuL2Fzc2V0cy9tb2JpbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDAgZnJvbSAnLi9hc3NldHMvbW9vbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0MSBmcm9tICcuL2Fzc2V0cy9tb3ZlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQyIGZyb20gJy4vYXNzZXRzL25hbWVzcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0MyBmcm9tICcuL2Fzc2V0cy9uZXN0ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDQgZnJvbSAnLi9hc3NldHMvbmV3X2NoYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDUgZnJvbSAnLi9hc3NldHMvbm9kZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0NiBmcm9tICcuL2Fzc2V0cy9udW1iZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDcgZnJvbSAnLi9hc3NldHMvb2ZmbGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0OCBmcm9tICcuL2Fzc2V0cy9vbmxpbmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDkgZnJvbSAnLi9hc3NldHMvcGFja2FnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MCBmcm9tICcuL2Fzc2V0cy9wYWdlU2VsZWN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODUxIGZyb20gJy4vYXNzZXRzL3BhZ2VzU2VsZWN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODUyIGZyb20gJy4vYXNzZXRzL3BhaW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODUzIGZyb20gJy4vYXNzZXRzL3BhbGV0dGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTQgZnJvbSAnLi9hc3NldHMvcGFwZXJfY2xpcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1NSBmcm9tICcuL2Fzc2V0cy9wYXJ0aWFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODU2IGZyb20gJy4vYXNzZXRzL3BhdXNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODU3IGZyb20gJy4vYXNzZXRzL3BheW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTggZnJvbSAnLi9hc3NldHMvcGVuY2lsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODU5IGZyb20gJy4vYXNzZXRzL3BlcmNlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjAgZnJvbSAnLi9hc3NldHMvcGluJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODYxIGZyb20gJy4vYXNzZXRzL3Bpbl9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjIgZnJvbSAnLi9hc3NldHMvcGlwZUJyZWFrcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2MyBmcm9tICcuL2Fzc2V0cy9waXBlTm9CcmVha3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjQgZnJvbSAnLi9hc3NldHMvcGl2b3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjUgZnJvbSAnLi9hc3NldHMvcGxheSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2NiBmcm9tICcuL2Fzc2V0cy9wbGF5RmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY3IGZyb20gJy4vYXNzZXRzL3BsdXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjggZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjkgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODcwIGZyb20gJy4vYXNzZXRzL3BsdXNfaW5fc3F1YXJlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODcxIGZyb20gJy4vYXNzZXRzL3BvcG91dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MiBmcm9tICcuL2Fzc2V0cy9wdXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODczIGZyb20gJy4vYXNzZXRzL3F1ZXN0aW9uX2luX2NpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3NCBmcm9tICcuL2Fzc2V0cy9xdW90ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3NSBmcm9tICcuL2Fzc2V0cy9yZWZyZXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc2IGZyb20gJy4vYXNzZXRzL3JlcG9ydGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc3IGZyb20gJy4vYXNzZXRzL3JldHVybl9rZXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzggZnJvbSAnLi9hc3NldHMvc2F2ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3OSBmcm9tICcuL2Fzc2V0cy9zY2FsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4MCBmcm9tICcuL2Fzc2V0cy9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODEgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODIgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxEZXRlY3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4MyBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg0IGZyb20gJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODUgZnJvbSAnLi9hc3NldHMvc2hhcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODYgZnJvbSAnLi9hc3NldHMvc2hhcmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODcgZnJvbSAnLi9hc3NldHMvc2luZ2xlX21ldHJpY192aWV3ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODggZnJvbSAnLi9hc3NldHMvc25vd2ZsYWtlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg5IGZyb20gJy4vYXNzZXRzL3NvcnRBc2NlbmRpbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTAgZnJvbSAnLi9hc3NldHMvc29ydERlc2NlbmRpbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTEgZnJvbSAnLi9hc3NldHMvc29ydExlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTIgZnJvbSAnLi9hc3NldHMvc29ydFJpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkzIGZyb20gJy4vYXNzZXRzL3NvcnRfZG93bic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5NCBmcm9tICcuL2Fzc2V0cy9zb3J0X3VwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk1IGZyb20gJy4vYXNzZXRzL3NvcnRhYmxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk2IGZyb20gJy4vYXNzZXRzL3NwYWNlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5NyBmcm9tICcuL2Fzc2V0cy9zcGFya2xlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5OCBmcm9tICcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk5IGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAwIGZyb20gJy4vYXNzZXRzL3N0YXJfZW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDEgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMiBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMyBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwNCBmcm9tICcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTA1IGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTA2IGZyb20gJy4vYXNzZXRzL3N0YXRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTA3IGZyb20gJy4vYXNzZXRzL3N0b3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDggZnJvbSAnLi9hc3NldHMvc3RvcF9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDkgZnJvbSAnLi9hc3NldHMvc3RvcF9zbGFzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxMCBmcm9tICcuL2Fzc2V0cy9zdG9yYWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTExIGZyb20gJy4vYXNzZXRzL3N0cmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxMiBmcm9tICcuL2Fzc2V0cy9zdWJtb2R1bGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MTMgZnJvbSAnLi9hc3NldHMvc3VuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTE0IGZyb20gJy4vYXNzZXRzL3N3YXRjaF9pbnB1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxNSBmcm9tICcuL2Fzc2V0cy9zeW1saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTE2IGZyb20gJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxNyBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MTggZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxOSBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyMCBmcm9tICcuL2Fzc2V0cy90YWcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MjEgZnJvbSAnLi9hc3NldHMvdGVhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyMiBmcm9tICcuL2Fzc2V0cy90ZW1wZXJhdHVyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyMyBmcm9tICcuL2Fzc2V0cy90aW1lUmVmcmVzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyNCBmcm9tICcuL2Fzc2V0cy90aW1lbGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyNSBmcm9tICcuL2Fzc2V0cy90aW1lbGluZVdpdGhBcnJvdyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyNiBmcm9tICcuL2Fzc2V0cy90aW1lc2xpZGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTI3IGZyb20gJy4vYXNzZXRzL3Rva2VuQWxpYXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MjggZnJvbSAnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTI5IGZyb20gJy4vYXNzZXRzL3Rva2VuQXJyYXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MzAgZnJvbSAnLi9hc3NldHMvdG9rZW5CaW5hcnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MzEgZnJvbSAnLi9hc3NldHMvdG9rZW5Cb29sZWFuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTMyIGZyb20gJy4vYXNzZXRzL3Rva2VuQ2xhc3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MzMgZnJvbSAnLi9hc3NldHMvdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTM0IGZyb20gJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MzUgZnJvbSAnLi9hc3NldHMvdG9rZW5EYXRlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTM2IGZyb20gJy4vYXNzZXRzL3Rva2VuRGltZW5zaW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTM3IGZyb20gJy4vYXNzZXRzL3Rva2VuRWxlbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkzOCBmcm9tICcuL2Fzc2V0cy90b2tlbkVudW0nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MzkgZnJvbSAnLi9hc3NldHMvdG9rZW5FbnVtTWVtYmVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTQwIGZyb20gJy4vYXNzZXRzL3Rva2VuRXZlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NDEgZnJvbSAnLi9hc3NldHMvdG9rZW5FeGNlcHRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NDIgZnJvbSAnLi9hc3NldHMvdG9rZW5GaWVsZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0MyBmcm9tICcuL2Fzc2V0cy90b2tlbkZpbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NDQgZnJvbSAnLi9hc3NldHMvdG9rZW5GbGF0dGVuZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NDUgZnJvbSAnLi9hc3NldHMvdG9rZW5GdW5jdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0NiBmcm9tICcuL2Fzc2V0cy90b2tlbkdlbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0NyBmcm9tICcuL2Fzc2V0cy90b2tlbkhpc3RvZ3JhbSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0OCBmcm9tICcuL2Fzc2V0cy90b2tlbklQJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTQ5IGZyb20gJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTUwIGZyb20gJy4vYXNzZXRzL3Rva2VuSm9pbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk1MSBmcm9tICcuL2Fzc2V0cy90b2tlbktleSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk1MiBmcm9tICcuL2Fzc2V0cy90b2tlbktleXdvcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTMgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRob2QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTQgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRyaWNDb3VudGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTU1IGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTYgZnJvbSAnLi9hc3NldHMvdG9rZW5Nb2R1bGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTcgZnJvbSAnLi9hc3NldHMvdG9rZW5OYW1lc3BhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTggZnJvbSAnLi9hc3NldHMvdG9rZW5OZXN0ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTkgZnJvbSAnLi9hc3NldHMvdG9rZW5OdWxsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTYwIGZyb20gJy4vYXNzZXRzL3Rva2VuTnVtYmVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTYxIGZyb20gJy4vYXNzZXRzL3Rva2VuT2JqZWN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTYyIGZyb20gJy4vYXNzZXRzL3Rva2VuT3BlcmF0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NjMgZnJvbSAnLi9hc3NldHMvdG9rZW5QYWNrYWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTY0IGZyb20gJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTY1IGZyb20gJy4vYXNzZXRzL3Rva2VuUGVyY29sYXRvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2NiBmcm9tICcuL2Fzc2V0cy90b2tlblByb3BlcnR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTY3IGZyb20gJy4vYXNzZXRzL3Rva2VuUmFuZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NjggZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2OSBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk3MCBmcm9tICcuL2Fzc2V0cy90b2tlblJlcG8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzEgZnJvbSAnLi9hc3NldHMvdG9rZW5TZWFyY2hUeXBlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTcyIGZyb20gJy4vYXNzZXRzL3Rva2VuU2VtYW50aWNUZXh0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTczIGZyb20gJy4vYXNzZXRzL3Rva2VuU2hhcGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzQgZnJvbSAnLi9hc3NldHMvdG9rZW5TdHJpbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzUgZnJvbSAnLi9hc3NldHMvdG9rZW5TdHJ1Y3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzYgZnJvbSAnLi9hc3NldHMvdG9rZW5TeW1ib2wnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzcgZnJvbSAnLi9hc3NldHMvdG9rZW5UYWcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzggZnJvbSAnLi9hc3NldHMvdG9rZW5UZXh0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTc5IGZyb20gJy4vYXNzZXRzL3Rva2VuVG9rZW5Db3VudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4MCBmcm9tICcuL2Fzc2V0cy90b2tlblZhcmlhYmxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTgxIGZyb20gJy4vYXNzZXRzL3Rva2VuVmVjdG9yRGVuc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5ODIgZnJvbSAnLi9hc3NldHMvdG9rZW5WZWN0b3JTcGFyc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5ODMgZnJvbSAnLi9hc3NldHMvdHJhaW5pbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5ODQgZnJvbSAnLi9hc3NldHMvdHJhbnNpdGlvbkxlZnRJbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4NSBmcm9tICcuL2Fzc2V0cy90cmFuc2l0aW9uTGVmdE91dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4NiBmcm9tICcuL2Fzc2V0cy90cmFuc2l0aW9uVG9wSW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5ODcgZnJvbSAnLi9hc3NldHMvdHJhbnNpdGlvblRvcE91dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4OCBmcm9tICcuL2Fzc2V0cy90cmFzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4OSBmcm9tICcuL2Fzc2V0cy91bmZvbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTAgZnJvbSAnLi9hc3NldHMvdW5saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTkxIGZyb20gJy4vYXNzZXRzL3VzZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTIgZnJvbSAnLi9hc3NldHMvdXNlckF2YXRhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5MyBmcm9tICcuL2Fzc2V0cy91c2Vycyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5NCBmcm9tICcuL2Fzc2V0cy92ZWN0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTUgZnJvbSAnLi9hc3NldHMvdmlkZW9QbGF5ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTYgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTcgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5OCBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTkgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAwIGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAxIGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDIgZnJvbSAnLi9hc3NldHMvdmlzX2dhdWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAwMyBmcm9tICcuL2Fzc2V0cy92aXNfZ29hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDQgZnJvbSAnLi9hc3NldHMvdmlzX2xpbmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA1IGZyb20gJy4vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDYgZnJvbSAnLi9hc3NldHMvdmlzX21hcF9yZWdpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA3IGZyb20gJy4vYXNzZXRzL3Zpc19tZXRyaWMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA4IGZyb20gJy4vYXNzZXRzL3Zpc19waWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA5IGZyb20gJy4vYXNzZXRzL3Zpc190YWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTAgZnJvbSAnLi9hc3NldHMvdmlzX3RhZ19jbG91ZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTEgZnJvbSAnLi9hc3NldHMvdmlzX3RleHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDEyIGZyb20gJy4vYXNzZXRzL3Zpc190aW1lbGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTMgZnJvbSAnLi9hc3NldHMvdmlzX3ZlZ2EnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE0IGZyb20gJy4vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTUgZnJvbSAnLi9hc3NldHMvd2FybmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTYgZnJvbSAnLi9hc3NldHMvd2FybmluZ0ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTcgZnJvbSAnLi9hc3NldHMvd29yZFdyYXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE4IGZyb20gJy4vYXNzZXRzL3dvcmRXcmFwRGlzYWJsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE5IGZyb20gJy4vYXNzZXRzL3dyZW5jaCc7XG5jb25zdCBfRHluYW1pY0ltcG9ydE1vZHVsZU1hcCA9IHsnLi9hc3NldHMvYWNjZXNzaWJpbGl0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUwLCcuL2Fzc2V0cy9hZ2dyZWdhdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMSwnLi9hc3NldHMvYWxlcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMiwnLi9hc3NldHMvYW5hbHl6ZUV2ZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMsJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNCwnLi9hc3NldHMvYW5ub3RhdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1LCcuL2Fzc2V0cy9hbm9tYWx5X2NoYXJ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYsJy4vYXNzZXRzL2Fub21hbHlfc3dpbV9sYW5lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcsJy4vYXNzZXRzL2FwbV90cmFjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4LCcuL2Fzc2V0cy9hcHBfYWRkX2RhdGEuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOSwnLi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwLCcuL2Fzc2V0cy9hcHBfYWdlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEsJy4vYXNzZXRzL2FwcF9hcG0uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIsJy4vYXNzZXRzL2FwcF9hcHBfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzLCcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0LCcuL2Fzc2V0cy9hcHBfY2FudmFzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1LCcuL2Fzc2V0cy9hcHBfY2FzZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYsJy4vYXNzZXRzL2FwcF9jb2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3LCcuL2Fzc2V0cy9hcHBfY29uc29sZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOCwnLi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTksJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAsJy4vYXNzZXRzL2FwcF9kZXZ0b29scy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMSwnLi9hc3NldHMvYXBwX2Rpc2NvdmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyLCcuL2Fzc2V0cy9hcHBfZW1zLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzLCcuL2Fzc2V0cy9hcHBfZmlsZWJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQsJy4vYXNzZXRzL2FwcF9mbGVldC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNSwnLi9hc3NldHMvYXBwX2dpcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNiwnLi9hc3NldHMvYXBwX2dyYXBoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3LCcuL2Fzc2V0cy9hcHBfZ3Jvay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOCwnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOSwnLi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAsJy4vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxLCcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyLCcuL2Fzc2V0cy9hcHBfbGVucy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMywnLi9hc3NldHMvYXBwX2xvZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQsJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1LCcuL2Fzc2V0cy9hcHBfbWV0cmljYmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNiwnLi9hc3NldHMvYXBwX21ldHJpY3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzcsJy4vYXNzZXRzL2FwcF9tbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOCwnLi9hc3NldHMvYXBwX21vbml0b3JpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzksJy4vYXNzZXRzL2FwcF9ub3RlYm9vay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MCwnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDEsJy4vYXNzZXRzL2FwcF9waXBlbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MiwnLi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MywnLi9hc3NldHMvYXBwX3JlcG9ydGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NCwnLi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUsJy4vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDYsJy4vYXNzZXRzL2FwcF9zZWN1cml0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NywnLi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OCwnLi9hc3NldHMvYXBwX3NwYWNlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OSwnLi9hc3NldHMvYXBwX3NxbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MCwnLi9hc3NldHMvYXBwX3RpbWVsaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxLCcuL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIsJy4vYXNzZXRzL2FwcF91cHRpbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTMsJy4vYXNzZXRzL2FwcF91c2Vyc19yb2xlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NCwnLi9hc3NldHMvYXBwX3Zpc3VhbGl6ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NSwnLi9hc3NldHMvYXBwX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NiwnLi9hc3NldHMvYXBwX3dhdGNoZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcsJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4LCcuL2Fzc2V0cy9hcHBzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5LCcuL2Fzc2V0cy9hcnJvd0VuZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MCwnLi9hc3NldHMvYXJyb3dTdGFydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MSwnLi9hc3NldHMvYXJyb3dfZG93bi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MiwnLi9hc3NldHMvYXJyb3dfbGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MywnLi9hc3NldHMvYXJyb3dfcmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQsJy4vYXNzZXRzL2Fycm93X3VwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1LCcuL2Fzc2V0cy9hcnRpY2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2LCcuL2Fzc2V0cy9hc3Rlcmlzay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NywnLi9hc3NldHMvYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgsJy4vYXNzZXRzL2JlYWtlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OSwnLi9hc3NldHMvYmVsbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MCwnLi9hc3NldHMvYmVsbFNsYXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxLCcuL2Fzc2V0cy9iZXRhLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyLCcuL2Fzc2V0cy9ib2x0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczLCcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0LCcuL2Fzc2V0cy9ib3hlc192ZXJ0aWNhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NSwnLi9hc3NldHMvYnJhbmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2LCcuL2Fzc2V0cy9icmFuY2hVc2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3LCcuL2Fzc2V0cy9icm9vbS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OCwnLi9hc3NldHMvYnJ1c2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzksJy4vYXNzZXRzL2J1Zy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MCwnLi9hc3NldHMvYnVsbHNleWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODEsJy4vYXNzZXRzL2NhbGVuZGFyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyLCcuL2Fzc2V0cy9jaGFuZ2VfcG9pbnRfZGV0ZWN0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzLCcuL2Fzc2V0cy9jaGVjay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NCwnLi9hc3NldHMvY2hlY2tJbkNpcmNsZUZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NSwnLi9hc3NldHMvY2hlZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODYsJy4vYXNzZXRzL2NsaWNrTGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NywnLi9hc3NldHMvY2xpY2tSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OCwnLi9hc3NldHMvY2xvY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODksJy4vYXNzZXRzL2Nsb2NrQ291bnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MCwnLi9hc3NldHMvY2xvdWREcml6emxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxLCcuL2Fzc2V0cy9jbG91ZFN0b3JteS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MiwnLi9hc3NldHMvY2xvdWRTdW5ueS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MywnLi9hc3NldHMvY2x1c3Rlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NCwnLi9hc3NldHMvY29sb3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTUsJy4vYXNzZXRzL2NvbXB1dGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTYsJy4vYXNzZXRzL2NvbnNvbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTcsJy4vYXNzZXRzL2NvbnRhaW5lci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OCwnLi9hc3NldHMvY29udGludWl0eUFib3ZlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk5LCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAsJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDEsJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAyLCcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMywnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA0LCcuL2Fzc2V0cy9jb3B5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwNSwnLi9hc3NldHMvY29weV9jbGlwYm9hcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA2LCcuL2Fzc2V0cy9jcm9zcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDcsJy4vYXNzZXRzL2Nyb3NzSW5DaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA4LCcuL2Fzc2V0cy9jcm9zc19pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA5LCcuL2Fzc2V0cy9jcm9zc2hhaXJzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExMCwnLi9hc3NldHMvY3VycmVuY3kuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTExLCcuL2Fzc2V0cy9jdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEyLCcuL2Fzc2V0cy9kYXRhYmFzZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTMsJy4vYXNzZXRzL2Rlc2t0b3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE0LCcuL2Fzc2V0cy9kaWZmLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExNSwnLi9hc3NldHMvZGlzY3Vzcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTYsJy4vYXNzZXRzL2RvY3VtZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExNywnLi9hc3NldHMvZG9jdW1lbnRFZGl0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExOCwnLi9hc3NldHMvZG9jdW1lbnRhdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTksJy4vYXNzZXRzL2RvY3VtZW50cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjAsJy4vYXNzZXRzL2RvdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjEsJy4vYXNzZXRzL2RvdEluQ2lyY2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMiwnLi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMywnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjQsJy4vYXNzZXRzL2Rvd25sb2FkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyNSwnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI2LCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI3LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI4LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI5LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzMCwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzMSwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMyLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMzLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM0LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzNSwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzNiwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzcsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM4LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzksJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDAsJy4vYXNzZXRzL2VkaXRvcl9ib2xkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MSwnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDIsJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MywnLi9hc3NldHMvZWRpdG9yX2NvbW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ0LCcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDUsJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ2LCcuL2Fzc2V0cy9lZGl0b3JfbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDcsJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ4LCcuL2Fzc2V0cy9lZGl0b3JfcmVkby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDksJy4vYXNzZXRzL2VkaXRvcl9zdHJpa2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTUwLCcuL2Fzc2V0cy9lZGl0b3JfdGFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTUxLCcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MiwnLi9hc3NldHMvZWRpdG9yX3VuZG8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTUzLCcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU0LCcuL2Fzc2V0cy9lbWFpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTUsJy4vYXNzZXRzL2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1NiwnLi9hc3NldHMvZW5kcG9pbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU3LCcuL2Fzc2V0cy9lcWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU4LCcuL2Fzc2V0cy9lcmFzZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU5LCcuL2Fzc2V0cy9lcnJvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjAsJy4vYXNzZXRzL2Vycm9yRmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2MSwnLi9hc3NldHMvZXNxbFZpcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjIsJy4vYXNzZXRzL2V4aXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYzLCcuL2Fzc2V0cy9leHBhbmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY0LCcuL2Fzc2V0cy9leHBhbmRNaW5pLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2NSwnLi9hc3NldHMvZXhwb3J0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2NiwnLi9hc3NldHMvZXllLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2NywnLi9hc3NldHMvZXllX2Nsb3NlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjgsJy4vYXNzZXRzL2ZhY2VfaGFwcHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY5LCcuL2Fzc2V0cy9mYWNlX25ldXRyYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcwLCcuL2Fzc2V0cy9mYWNlX3NhZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzEsJy4vYXNzZXRzL2ZpZWxkX3N0YXRpc3RpY3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcyLCcuL2Fzc2V0cy9maWx0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTczLCcuL2Fzc2V0cy9maWx0ZXJFeGNsdWRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3NCwnLi9hc3NldHMvZmlsdGVySWdub3JlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3NSwnLi9hc3NldHMvZmlsdGVySW5DaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc2LCcuL2Fzc2V0cy9maWx0ZXJJbmNsdWRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3NywnLi9hc3NldHMvZmxhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzgsJy4vYXNzZXRzL2ZvbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc5LCcuL2Fzc2V0cy9mb2xkZXJfY2hlY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgwLCcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4MSwnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4MiwnLi9hc3NldHMvZm9sZGVyX29wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgzLCcuL2Fzc2V0cy9mcmFtZU5leHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg0LCcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4NSwnLi9hc3NldHMvZnVsbFNjcmVlbkV4aXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg2LCcuL2Fzc2V0cy9mdWxsX3NjcmVlbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODcsJy4vYXNzZXRzL2Z1bmN0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4OCwnLi9hc3NldHMvZ2Vhci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODksJy4vYXNzZXRzL2dsYXNzZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkwLCcuL2Fzc2V0cy9nbG9iZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTEsJy4vYXNzZXRzL2dyYWIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkyLCcuL2Fzc2V0cy9ncmFiT21uaWRpcmVjdGlvbmFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MywnLi9hc3NldHMvZ3JhYl9ob3Jpem9udGFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5NCwnLi9hc3NldHMvZ3JhZGllbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk1LCcuL2Fzc2V0cy9ncmlkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5NiwnLi9hc3NldHMvaGVhcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk3LCcuL2Fzc2V0cy9oZWF0bWFwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5OCwnLi9hc3NldHMvaGVscC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTksJy4vYXNzZXRzL2hvbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAwLCcuL2Fzc2V0cy9pSW5DaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAxLCcuL2Fzc2V0cy9pbWFnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDIsJy4vYXNzZXRzL2ltcG9ydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDMsJy4vYXNzZXRzL2luZGV4LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwNCwnLi9hc3NldHMvaW5kZXhUZW1wb3JhcnkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA1LCcuL2Fzc2V0cy9pbmRleF9jbG9zZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDYsJy4vYXNzZXRzL2luZGV4X2VkaXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA3LCcuL2Fzc2V0cy9pbmRleF9mbHVzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDgsJy4vYXNzZXRzL2luZGV4X21hcHBpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA5LCcuL2Fzc2V0cy9pbmRleF9vcGVuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMCwnLi9hc3NldHMvaW5kZXhfcnVudGltZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTEsJy4vYXNzZXRzL2luZGV4X3NldHRpbmdzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMiwnLi9hc3NldHMvaW5maW5pdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjEzLCcuL2Fzc2V0cy9pbnB1dE91dHB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTQsJy4vYXNzZXRzL2luc3BlY3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE1LCcuL2Fzc2V0cy9pbnZlcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE2LCcuL2Fzc2V0cy9pcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTcsJy4vYXNzZXRzL2lzc3VlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxOCwnLi9hc3NldHMva2V5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxOSwnLi9hc3NldHMva2V5Ym9hcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIwLCcuL2Fzc2V0cy9rcWxfZmllbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIxLCcuL2Fzc2V0cy9rcWxfZnVuY3Rpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIyLCcuL2Fzc2V0cy9rcWxfb3BlcmFuZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjMsJy4vYXNzZXRzL2txbF9zZWxlY3Rvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjQsJy4vYXNzZXRzL2txbF92YWx1ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjUsJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNiwnLi9hc3NldHMva3ViZXJuZXRlc1BvZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjcsJy4vYXNzZXRzL2xhdW5jaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjgsJy4vYXNzZXRzL2xheWVycy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjksJy4vYXNzZXRzL2xldHRlcmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzAsJy4vYXNzZXRzL2xpbmVEYXNoZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjMxLCcuL2Fzc2V0cy9saW5lRG90dGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMiwnLi9hc3NldHMvbGluZVNvbGlkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMywnLi9hc3NldHMvbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzQsJy4vYXNzZXRzL2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM1LCcuL2Fzc2V0cy9saXN0X2FkZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzYsJy4vYXNzZXRzL2xvY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM3LCcuL2Fzc2V0cy9sb2NrT3Blbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzgsJy4vYXNzZXRzL2xvZ19wYXR0ZXJuX2FuYWx5c2lzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzOSwnLi9hc3NldHMvbG9nX3JhdGVfYW5hbHlzaXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQwLCcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDEsJy4vYXNzZXRzL2xvZ29fYXBhY2hlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0MiwnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0MywnLi9hc3NldHMvbG9nb19hd3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ0LCcuL2Fzc2V0cy9sb2dvX2F3c19tb25vLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0NSwnLi9hc3NldHMvbG9nb19henVyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDYsJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDcsJy4vYXNzZXRzL2xvZ29fYmVhdHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ4LCcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDksJy4vYXNzZXRzL2xvZ29fY2VwaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTAsJy4vYXNzZXRzL2xvZ29fY2xvdWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUxLCcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTIsJy4vYXNzZXRzL2xvZ29fY29kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTMsJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU0LCcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTUsJy4vYXNzZXRzL2xvZ29fZG9ja2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NiwnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NywnLi9hc3NldHMvbG9nb19lbGFzdGljLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1OCwnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1OSwnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MCwnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjEsJy4vYXNzZXRzL2xvZ29fZXRjZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjIsJy4vYXNzZXRzL2xvZ29fZ2NwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MywnLi9hc3NldHMvbG9nb19nY3BfbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjQsJy4vYXNzZXRzL2xvZ29fZ2l0aHViLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NSwnLi9hc3NldHMvbG9nb19nbWFpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjYsJy4vYXNzZXRzL2xvZ29fZ29sYW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NywnLi9hc3NldHMvbG9nb19nb29nbGVfZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjgsJy4vYXNzZXRzL2xvZ29faGFwcm94eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjksJy4vYXNzZXRzL2xvZ29faWJtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3MCwnLi9hc3NldHMvbG9nb19pYm1fbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzEsJy4vYXNzZXRzL2xvZ29fa2Fma2EuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjcyLCcuL2Fzc2V0cy9sb2dvX2tpYmFuYS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzMsJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzQsJy4vYXNzZXRzL2xvZ29fbG9nZ2luZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzUsJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc2LCcuL2Fzc2V0cy9sb2dvX21hcHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc3LCcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzgsJy4vYXNzZXRzL2xvZ29fbWV0cmljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzksJy4vYXNzZXRzL2xvZ29fbW9uZ29kYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODAsJy4vYXNzZXRzL2xvZ29fbXlzcWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgxLCcuL2Fzc2V0cy9sb2dvX25naW54LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4MiwnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4MywnLi9hc3NldHMvbG9nb19vc3F1ZXJ5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NCwnLi9hc3NldHMvbG9nb19waHAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg1LCcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NiwnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NywnLi9hc3NldHMvbG9nb19yYWJiaXRtcS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODgsJy4vYXNzZXRzL2xvZ29fcmVkaXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg5LCcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MCwnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTEsJy4vYXNzZXRzL2xvZ29fc2tldGNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MiwnLi9hc3NldHMvbG9nb19zbGFjay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTMsJy4vYXNzZXRzL2xvZ29fdXB0aW1lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NCwnLi9hc3NldHMvbG9nb192dWxuZXJhYmlsaXR5X21hbmFnZW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk1LCcuL2Fzc2V0cy9sb2dvX3dlYmhvb2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk2LCcuL2Fzc2V0cy9sb2dvX3dpbmRvd3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk3LCcuL2Fzc2V0cy9sb2dvX3dvcmtwbGFjZV9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk4LCcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk5LCcuL2Fzc2V0cy9sb2dzdGFzaF9pZi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDAsJy4vYXNzZXRzL2xvZ3N0YXNoX2lucHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwMSwnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwMiwnLi9hc3NldHMvbG9nc3Rhc2hfcXVldWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAzLCcuL2Fzc2V0cy9tYWduZXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA0LCcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwNSwnLi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDYsJy4vYXNzZXRzL21hZ25pZnlXaXRoUGx1cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDcsJy4vYXNzZXRzL21hcF9tYXJrZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA4LCcuL2Fzc2V0cy9tZW1vcnkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA5LCcuL2Fzc2V0cy9tZW51LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxMCwnLi9hc3NldHMvbWVudURvd24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzExLCcuL2Fzc2V0cy9tZW51TGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTIsJy4vYXNzZXRzL21lbnVSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTMsJy4vYXNzZXRzL21lbnVVcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTQsJy4vYXNzZXRzL21lcmdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxNSwnLi9hc3NldHMvbWluaW1pemUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE2LCcuL2Fzc2V0cy9taW51cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTcsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTgsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZV9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE5LCcuL2Fzc2V0cy9taW51c19pbl9zcXVhcmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIwLCcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIxLCcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMiwnLi9hc3NldHMvbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIzLCcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI0LCcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI1LCcuL2Fzc2V0cy9tbF9kYXRhX3Zpc3VhbGl6ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI2LCcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI3LCcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjgsJy4vYXNzZXRzL21vYmlsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjksJy4vYXNzZXRzL21vb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzMwLCcuL2Fzc2V0cy9tb3ZlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzMSwnLi9hc3NldHMvbmFtZXNwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzMiwnLi9hc3NldHMvbmVzdGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzMywnLi9hc3NldHMvbmV3X2NoYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM0LCcuL2Fzc2V0cy9ub2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzNSwnLi9hc3NldHMvbnVtYmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzNiwnLi9hc3NldHMvb2ZmbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzcsJy4vYXNzZXRzL29ubGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzgsJy4vYXNzZXRzL3BhY2thZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM5LCcuL2Fzc2V0cy9wYWdlU2VsZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0MCwnLi9hc3NldHMvcGFnZXNTZWxlY3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQxLCcuL2Fzc2V0cy9wYWludC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDIsJy4vYXNzZXRzL3BhbGV0dGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQzLCcuL2Fzc2V0cy9wYXBlcl9jbGlwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NCwnLi9hc3NldHMvcGFydGlhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDUsJy4vYXNzZXRzL3BhdXNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NiwnLi9hc3NldHMvcGF5bWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDcsJy4vYXNzZXRzL3BlbmNpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDgsJy4vYXNzZXRzL3BlcmNlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ5LCcuL2Fzc2V0cy9waW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUwLCcuL2Fzc2V0cy9waW5fZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1MSwnLi9hc3NldHMvcGlwZUJyZWFrcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTIsJy4vYXNzZXRzL3BpcGVOb0JyZWFrcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTMsJy4vYXNzZXRzL3Bpdm90LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NCwnLi9hc3NldHMvcGxheS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTUsJy4vYXNzZXRzL3BsYXlGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU2LCcuL2Fzc2V0cy9wbHVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NywnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU4LCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU5LCcuL2Fzc2V0cy9wbHVzX2luX3NxdWFyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjAsJy4vYXNzZXRzL3BvcG91dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjEsJy4vYXNzZXRzL3B1c2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzYyLCcuL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzYzLCcuL2Fzc2V0cy9xdW90ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjQsJy4vYXNzZXRzL3JlZnJlc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY1LCcuL2Fzc2V0cy9yZXBvcnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjYsJy4vYXNzZXRzL3JldHVybl9rZXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY3LCcuL2Fzc2V0cy9zYXZlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2OCwnLi9hc3NldHMvc2NhbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY5LCcuL2Fzc2V0cy9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzcwLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzEsJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzcyLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3MywnLi9hc3NldHMvc2Vzc2lvblZpZXdlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzQsJy4vYXNzZXRzL3NoYXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3NSwnLi9hc3NldHMvc2hhcmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc2LCcuL2Fzc2V0cy9zaW5nbGVfbWV0cmljX3ZpZXdlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzcsJy4vYXNzZXRzL3Nub3dmbGFrZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzgsJy4vYXNzZXRzL3NvcnRBc2NlbmRpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc5LCcuL2Fzc2V0cy9zb3J0RGVzY2VuZGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODAsJy4vYXNzZXRzL3NvcnRMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4MSwnLi9hc3NldHMvc29ydFJpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4MiwnLi9hc3NldHMvc29ydF9kb3duLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4MywnLi9hc3NldHMvc29ydF91cC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODQsJy4vYXNzZXRzL3NvcnRhYmxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4NSwnLi9hc3NldHMvc3BhY2VzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4NiwnLi9hc3NldHMvc3BhcmtsZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg3LCcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4OCwnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg5LCcuL2Fzc2V0cy9zdGFyX2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MCwnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTEsJy4vYXNzZXRzL3N0YXJfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MiwnLi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzkzLCcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5NCwnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk1LCcuL2Fzc2V0cy9zdGF0cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTYsJy4vYXNzZXRzL3N0b3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk3LCcuL2Fzc2V0cy9zdG9wX2ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTgsJy4vYXNzZXRzL3N0b3Bfc2xhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk5LCcuL2Fzc2V0cy9zdG9yYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwMCwnLi9hc3NldHMvc3RyaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwMSwnLi9hc3NldHMvc3VibW9kdWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwMiwnLi9hc3NldHMvc3VuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwMywnLi9hc3NldHMvc3dhdGNoX2lucHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNCwnLi9hc3NldHMvc3ltbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDUsJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDYsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDcsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDA4LCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDksJy4vYXNzZXRzL3RhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTAsJy4vYXNzZXRzL3RlYXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDExLCcuL2Fzc2V0cy90ZW1wZXJhdHVyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTIsJy4vYXNzZXRzL3RpbWVSZWZyZXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxMywnLi9hc3NldHMvdGltZWxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE0LCcuL2Fzc2V0cy90aW1lbGluZVdpdGhBcnJvdy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTUsJy4vYXNzZXRzL3RpbWVzbGlkZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE2LCcuL2Fzc2V0cy90b2tlbkFsaWFzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxNywnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxOCwnLi9hc3NldHMvdG9rZW5BcnJheS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTksJy4vYXNzZXRzL3Rva2VuQmluYXJ5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyMCwnLi9hc3NldHMvdG9rZW5Cb29sZWFuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyMSwnLi9hc3NldHMvdG9rZW5DbGFzcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjIsJy4vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjMsJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI0LCcuL2Fzc2V0cy90b2tlbkRhdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI1LCcuL2Fzc2V0cy90b2tlbkRpbWVuc2lvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjYsJy4vYXNzZXRzL3Rva2VuRWxlbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjcsJy4vYXNzZXRzL3Rva2VuRW51bS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjgsJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjksJy4vYXNzZXRzL3Rva2VuRXZlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDMwLCcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzEsJy4vYXNzZXRzL3Rva2VuRmllbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDMyLCcuL2Fzc2V0cy90b2tlbkZpbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDMzLCcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzQsJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDM1LCcuL2Fzc2V0cy90b2tlbkdlby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzYsJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzNywnLi9hc3NldHMvdG9rZW5JUC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzgsJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzOSwnLi9hc3NldHMvdG9rZW5Kb2luLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MCwnLi9hc3NldHMvdG9rZW5LZXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQxLCcuL2Fzc2V0cy90b2tlbktleXdvcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQyLCcuL2Fzc2V0cy90b2tlbk1ldGhvZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDMsJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDQsJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ1LCcuL2Fzc2V0cy90b2tlbk1vZHVsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDYsJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NywnLi9hc3NldHMvdG9rZW5OZXN0ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ4LCcuL2Fzc2V0cy90b2tlbk51bGwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ5LCcuL2Fzc2V0cy90b2tlbk51bWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTAsJy4vYXNzZXRzL3Rva2VuT2JqZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MSwnLi9hc3NldHMvdG9rZW5PcGVyYXRvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTIsJy4vYXNzZXRzL3Rva2VuUGFja2FnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTMsJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NCwnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NSwnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTYsJy4vYXNzZXRzL3Rva2VuUmFuZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU3LCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OCwnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU5LCcuL2Fzc2V0cy90b2tlblJlcG8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDYwLCcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDYxLCcuL2Fzc2V0cy90b2tlblNlbWFudGljVGV4dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjIsJy4vYXNzZXRzL3Rva2VuU2hhcGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDYzLCcuL2Fzc2V0cy90b2tlblN0cmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjQsJy4vYXNzZXRzL3Rva2VuU3RydWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NSwnLi9hc3NldHMvdG9rZW5TeW1ib2wuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY2LCcuL2Fzc2V0cy90b2tlblRhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjcsJy4vYXNzZXRzL3Rva2VuVGV4dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjgsJy4vYXNzZXRzL3Rva2VuVG9rZW5Db3VudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjksJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDcwLCcuL2Fzc2V0cy90b2tlblZlY3RvckRlbnNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MSwnLi9hc3NldHMvdG9rZW5WZWN0b3JTcGFyc2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDcyLCcuL2Fzc2V0cy90cmFpbmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzMsJy4vYXNzZXRzL3RyYW5zaXRpb25MZWZ0SW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc0LCcuL2Fzc2V0cy90cmFuc2l0aW9uTGVmdE91dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzUsJy4vYXNzZXRzL3RyYW5zaXRpb25Ub3BJbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzYsJy4vYXNzZXRzL3RyYW5zaXRpb25Ub3BPdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc3LCcuL2Fzc2V0cy90cmFzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzgsJy4vYXNzZXRzL3VuZm9sZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzksJy4vYXNzZXRzL3VubGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODAsJy4vYXNzZXRzL3VzZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgxLCcuL2Fzc2V0cy91c2VyQXZhdGFyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MiwnLi9hc3NldHMvdXNlcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgzLCcuL2Fzc2V0cy92ZWN0b3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg0LCcuL2Fzc2V0cy92aWRlb1BsYXllci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODUsJy4vYXNzZXRzL3Zpc19hcmVhLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NiwnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODcsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODgsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4OSwnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTAsJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTEsJy4vYXNzZXRzL3Zpc19nYXVnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTIsJy4vYXNzZXRzL3Zpc19nb2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MywnLi9hc3NldHMvdmlzX2xpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk0LCcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk1LCcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTYsJy4vYXNzZXRzL3Zpc19tZXRyaWMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk3LCcuL2Fzc2V0cy92aXNfcGllLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OCwnLi9hc3NldHMvdmlzX3RhYmxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OSwnLi9hc3NldHMvdmlzX3RhZ19jbG91ZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDAsJy4vYXNzZXRzL3Zpc190ZXh0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMSwnLi9hc3NldHMvdmlzX3RpbWVsaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMiwnLi9hc3NldHMvdmlzX3ZlZ2EuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAzLCcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTA0LCcuL2Fzc2V0cy93YXJuaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwNSwnLi9hc3NldHMvd2FybmluZ0ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDYsJy4vYXNzZXRzL3dvcmRXcmFwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwNywnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDgsJy4vYXNzZXRzL3dyZW5jaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDksJy4vYXNzZXRzL2FjY2Vzc2liaWxpdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEwLCcuL2Fzc2V0cy9hZ2dyZWdhdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTExLCcuL2Fzc2V0cy9hbGVydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTIsJy4vYXNzZXRzL2FuYWx5emVFdmVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTMsJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTE0LCcuL2Fzc2V0cy9hbm5vdGF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNSwnLi9hc3NldHMvYW5vbWFseV9jaGFydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTYsJy4vYXNzZXRzL2Fub21hbHlfc3dpbV9sYW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNywnLi9hc3NldHMvYXBtX3RyYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxOCwnLi9hc3NldHMvYXBwX2FkZF9kYXRhJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxOSwnLi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyMCwnLi9hc3NldHMvYXBwX2FnZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyMSwnLi9hc3NldHMvYXBwX2FwbSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjIsJy4vYXNzZXRzL2FwcF9hcHBfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyMywnLi9hc3NldHMvYXBwX2F1ZGl0YmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjQsJy4vYXNzZXRzL2FwcF9jYW52YXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI1LCcuL2Fzc2V0cy9hcHBfY2FzZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI2LCcuL2Fzc2V0cy9hcHBfY29kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjcsJy4vYXNzZXRzL2FwcF9jb25zb2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyOCwnLi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI5LCcuL2Fzc2V0cy9hcHBfZGFzaGJvYXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzMCwnLi9hc3NldHMvYXBwX2RldnRvb2xzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzMSwnLi9hc3NldHMvYXBwX2Rpc2NvdmVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzMiwnLi9hc3NldHMvYXBwX2Vtcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzMsJy4vYXNzZXRzL2FwcF9maWxlYmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzQsJy4vYXNzZXRzL2FwcF9mbGVldCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzUsJy4vYXNzZXRzL2FwcF9naXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM2LCcuL2Fzc2V0cy9hcHBfZ3JhcGgnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM3LCcuL2Fzc2V0cy9hcHBfZ3Jvayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzgsJy4vYXNzZXRzL2FwcF9oZWFydGJlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM5LCcuL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDAsJy4vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0MSwnLi9hc3NldHMvYXBwX2luZGV4X3JvbGx1cCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDIsJy4vYXNzZXRzL2FwcF9sZW5zJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0MywnLi9hc3NldHMvYXBwX2xvZ3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ0LCcuL2Fzc2V0cy9hcHBfbWFuYWdlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDUsJy4vYXNzZXRzL2FwcF9tZXRyaWNiZWF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0NiwnLi9hc3NldHMvYXBwX21ldHJpY3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ3LCcuL2Fzc2V0cy9hcHBfbWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ4LCcuL2Fzc2V0cy9hcHBfbW9uaXRvcmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDksJy4vYXNzZXRzL2FwcF9ub3RlYm9vayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTAsJy4vYXNzZXRzL2FwcF9wYWNrZXRiZWF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MSwnLi9hc3NldHMvYXBwX3BpcGVsaW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MiwnLi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTMsJy4vYXNzZXRzL2FwcF9yZXBvcnRpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU0LCcuL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTUsJy4vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU2LCcuL2Fzc2V0cy9hcHBfc2VjdXJpdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU3LCcuL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1OCwnLi9hc3NldHMvYXBwX3NwYWNlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTksJy4vYXNzZXRzL2FwcF9zcWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYwLCcuL2Fzc2V0cy9hcHBfdGltZWxpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYxLCcuL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYyLCcuL2Fzc2V0cy9hcHBfdXB0aW1lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MywnLi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2NCwnLi9hc3NldHMvYXBwX3Zpc3VhbGl6ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjUsJy4vYXNzZXRzL2FwcF92dWxuZXJhYmlsaXR5X21hbmFnZW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY2LCcuL2Fzc2V0cy9hcHBfd2F0Y2hlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjcsJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2OCwnLi9hc3NldHMvYXBwcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjksJy4vYXNzZXRzL2Fycm93RW5kJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3MCwnLi9hc3NldHMvYXJyb3dTdGFydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzEsJy4vYXNzZXRzL2Fycm93X2Rvd24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcyLCcuL2Fzc2V0cy9hcnJvd19sZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3MywnLi9hc3NldHMvYXJyb3dfcmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc0LCcuL2Fzc2V0cy9hcnJvd191cCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzUsJy4vYXNzZXRzL2FydGljbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc2LCcuL2Fzc2V0cy9hc3Rlcmlzayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzcsJy4vYXNzZXRzL2F0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3OCwnLi9hc3NldHMvYmVha2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3OSwnLi9hc3NldHMvYmVsbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODAsJy4vYXNzZXRzL2JlbGxTbGFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODEsJy4vYXNzZXRzL2JldGEnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTgyLCcuL2Fzc2V0cy9ib2x0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4MywnLi9hc3NldHMvYm94ZXNfaG9yaXpvbnRhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODQsJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4NSwnLi9hc3NldHMvYnJhbmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4NiwnLi9hc3NldHMvYnJhbmNoVXNlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODcsJy4vYXNzZXRzL2Jyb29tJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4OCwnLi9hc3NldHMvYnJ1c2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg5LCcuL2Fzc2V0cy9idWcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkwLCcuL2Fzc2V0cy9idWxsc2V5ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTEsJy4vYXNzZXRzL2NhbGVuZGFyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5MiwnLi9hc3NldHMvY2hhbmdlX3BvaW50X2RldGVjdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTMsJy4vYXNzZXRzL2NoZWNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NCwnLi9hc3NldHMvY2hlY2tJbkNpcmNsZUZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTUsJy4vYXNzZXRzL2NoZWVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NiwnLi9hc3NldHMvY2xpY2tMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NywnLi9hc3NldHMvY2xpY2tSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTgsJy4vYXNzZXRzL2Nsb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5OSwnLi9hc3NldHMvY2xvY2tDb3VudGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwMCwnLi9hc3NldHMvY2xvdWREcml6emxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwMSwnLi9hc3NldHMvY2xvdWRTdG9ybXknOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAyLCcuL2Fzc2V0cy9jbG91ZFN1bm55JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwMywnLi9hc3NldHMvY2x1c3Rlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDQsJy4vYXNzZXRzL2NvbG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNSwnLi9hc3NldHMvY29tcHV0ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDYsJy4vYXNzZXRzL2NvbnNvbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA3LCcuL2Fzc2V0cy9jb250YWluZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA4LCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA5LCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTAsJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTEsJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEyLCcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxMywnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE0LCcuL2Fzc2V0cy9jb3B5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxNSwnLi9hc3NldHMvY29weV9jbGlwYm9hcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE2LCcuL2Fzc2V0cy9jcm9zcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTcsJy4vYXNzZXRzL2Nyb3NzSW5DaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE4LCcuL2Fzc2V0cy9jcm9zc19pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE5LCcuL2Fzc2V0cy9jcm9zc2hhaXJzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyMCwnLi9hc3NldHMvY3VycmVuY3knOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIxLCcuL2Fzc2V0cy9jdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIyLCcuL2Fzc2V0cy9kYXRhYmFzZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjMsJy4vYXNzZXRzL2Rlc2t0b3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI0LCcuL2Fzc2V0cy9kaWZmJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNSwnLi9hc3NldHMvZGlzY3Vzcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjYsJy4vYXNzZXRzL2RvY3VtZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNywnLi9hc3NldHMvZG9jdW1lbnRFZGl0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyOCwnLi9hc3NldHMvZG9jdW1lbnRhdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjksJy4vYXNzZXRzL2RvY3VtZW50cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzAsJy4vYXNzZXRzL2RvdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzEsJy4vYXNzZXRzL2RvdEluQ2lyY2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMiwnLi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMywnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzQsJy4vYXNzZXRzL2Rvd25sb2FkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzNSwnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM2LCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM3LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM4LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM5LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0MCwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0MSwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQyLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQzLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ0LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0NSwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0NiwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDcsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ4LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDksJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTAsJy4vYXNzZXRzL2VkaXRvcl9ib2xkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1MSwnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTIsJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1MywnLi9hc3NldHMvZWRpdG9yX2NvbW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU0LCcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTUsJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU2LCcuL2Fzc2V0cy9lZGl0b3JfbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTcsJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU4LCcuL2Fzc2V0cy9lZGl0b3JfcmVkbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTksJy4vYXNzZXRzL2VkaXRvcl9zdHJpa2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYwLCcuL2Fzc2V0cy9lZGl0b3JfdGFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYxLCcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2MiwnLi9hc3NldHMvZWRpdG9yX3VuZG8nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYzLCcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY0LCcuL2Fzc2V0cy9lbWFpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjUsJy4vYXNzZXRzL2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2NiwnLi9hc3NldHMvZW5kcG9pbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY3LCcuL2Fzc2V0cy9lcWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY4LCcuL2Fzc2V0cy9lcmFzZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY5LCcuL2Fzc2V0cy9lcnJvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzAsJy4vYXNzZXRzL2Vycm9yRmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3MSwnLi9hc3NldHMvZXNxbFZpcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzIsJy4vYXNzZXRzL2V4aXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjczLCcuL2Fzc2V0cy9leHBhbmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc0LCcuL2Fzc2V0cy9leHBhbmRNaW5pJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NSwnLi9hc3NldHMvZXhwb3J0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NiwnLi9hc3NldHMvZXllJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NywnLi9hc3NldHMvZXllX2Nsb3NlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzgsJy4vYXNzZXRzL2ZhY2VfaGFwcHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc5LCcuL2Fzc2V0cy9mYWNlX25ldXRyYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgwLCcuL2Fzc2V0cy9mYWNlX3NhZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODEsJy4vYXNzZXRzL2ZpZWxkX3N0YXRpc3RpY3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgyLCcuL2Fzc2V0cy9maWx0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgzLCcuL2Fzc2V0cy9maWx0ZXJFeGNsdWRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NCwnLi9hc3NldHMvZmlsdGVySWdub3JlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NSwnLi9hc3NldHMvZmlsdGVySW5DaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjg2LCcuL2Fzc2V0cy9maWx0ZXJJbmNsdWRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NywnLi9hc3NldHMvZmxhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODgsJy4vYXNzZXRzL2ZvbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjg5LCcuL2Fzc2V0cy9mb2xkZXJfY2hlY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNjkwLCcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5MSwnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5MiwnLi9hc3NldHMvZm9sZGVyX29wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjkzLCcuL2Fzc2V0cy9mcmFtZU5leHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk0LCcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5NSwnLi9hc3NldHMvZnVsbFNjcmVlbkV4aXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk2LCcuL2Fzc2V0cy9mdWxsX3NjcmVlbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTcsJy4vYXNzZXRzL2Z1bmN0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5OCwnLi9hc3NldHMvZ2Vhcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTksJy4vYXNzZXRzL2dsYXNzZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAwLCcuL2Fzc2V0cy9nbG9iZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDEsJy4vYXNzZXRzL2dyYWInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAyLCcuL2Fzc2V0cy9ncmFiT21uaWRpcmVjdGlvbmFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwMywnLi9hc3NldHMvZ3JhYl9ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNCwnLi9hc3NldHMvZ3JhZGllbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA1LCcuL2Fzc2V0cy9ncmlkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNiwnLi9hc3NldHMvaGVhcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA3LCcuL2Fzc2V0cy9oZWF0bWFwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwOCwnLi9hc3NldHMvaGVscCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDksJy4vYXNzZXRzL2hvbWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzEwLCcuL2Fzc2V0cy9pSW5DaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzExLCcuL2Fzc2V0cy9pbWFnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTIsJy4vYXNzZXRzL2ltcG9ydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTMsJy4vYXNzZXRzL2luZGV4JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNCwnLi9hc3NldHMvaW5kZXhUZW1wb3JhcnknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE1LCcuL2Fzc2V0cy9pbmRleF9jbG9zZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTYsJy4vYXNzZXRzL2luZGV4X2VkaXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE3LCcuL2Fzc2V0cy9pbmRleF9mbHVzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTgsJy4vYXNzZXRzL2luZGV4X21hcHBpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE5LCcuL2Fzc2V0cy9pbmRleF9vcGVuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMCwnLi9hc3NldHMvaW5kZXhfcnVudGltZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjEsJy4vYXNzZXRzL2luZGV4X3NldHRpbmdzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMiwnLi9hc3NldHMvaW5maW5pdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzIzLCcuL2Fzc2V0cy9pbnB1dE91dHB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjQsJy4vYXNzZXRzL2luc3BlY3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI1LCcuL2Fzc2V0cy9pbnZlcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI2LCcuL2Fzc2V0cy9pcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjcsJy4vYXNzZXRzL2lzc3VlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyOCwnLi9hc3NldHMva2V5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyOSwnLi9hc3NldHMva2V5Ym9hcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMwLCcuL2Fzc2V0cy9rcWxfZmllbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMxLCcuL2Fzc2V0cy9rcWxfZnVuY3Rpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMyLCcuL2Fzc2V0cy9rcWxfb3BlcmFuZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzMsJy4vYXNzZXRzL2txbF9zZWxlY3Rvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzQsJy4vYXNzZXRzL2txbF92YWx1ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzUsJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczNiwnLi9hc3NldHMva3ViZXJuZXRlc1BvZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzcsJy4vYXNzZXRzL2xhdW5jaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzgsJy4vYXNzZXRzL2xheWVycyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzksJy4vYXNzZXRzL2xldHRlcmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDAsJy4vYXNzZXRzL2xpbmVEYXNoZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQxLCcuL2Fzc2V0cy9saW5lRG90dGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MiwnLi9hc3NldHMvbGluZVNvbGlkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MywnLi9hc3NldHMvbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDQsJy4vYXNzZXRzL2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ1LCcuL2Fzc2V0cy9saXN0X2FkZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDYsJy4vYXNzZXRzL2xvY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ3LCcuL2Fzc2V0cy9sb2NrT3Blbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDgsJy4vYXNzZXRzL2xvZ19wYXR0ZXJuX2FuYWx5c2lzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0OSwnLi9hc3NldHMvbG9nX3JhdGVfYW5hbHlzaXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzUwLCcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTEsJy4vYXNzZXRzL2xvZ29fYXBhY2hlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1MiwnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1MywnLi9hc3NldHMvbG9nb19hd3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU0LCcuL2Fzc2V0cy9sb2dvX2F3c19tb25vJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1NSwnLi9hc3NldHMvbG9nb19henVyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTYsJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTcsJy4vYXNzZXRzL2xvZ29fYmVhdHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU4LCcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTksJy4vYXNzZXRzL2xvZ29fY2VwaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjAsJy4vYXNzZXRzL2xvZ29fY2xvdWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzYxLCcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjIsJy4vYXNzZXRzL2xvZ29fY29kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjMsJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY0LCcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjUsJy4vYXNzZXRzL2xvZ29fZG9ja2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2NiwnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2NywnLi9hc3NldHMvbG9nb19lbGFzdGljJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2OCwnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2OSwnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3MCwnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzEsJy4vYXNzZXRzL2xvZ29fZXRjZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzIsJy4vYXNzZXRzL2xvZ29fZ2NwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3MywnLi9hc3NldHMvbG9nb19nY3BfbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzQsJy4vYXNzZXRzL2xvZ29fZ2l0aHViJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3NSwnLi9hc3NldHMvbG9nb19nbWFpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzYsJy4vYXNzZXRzL2xvZ29fZ29sYW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3NywnLi9hc3NldHMvbG9nb19nb29nbGVfZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzgsJy4vYXNzZXRzL2xvZ29faGFwcm94eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzksJy4vYXNzZXRzL2xvZ29faWJtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MCwnLi9hc3NldHMvbG9nb19pYm1fbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODEsJy4vYXNzZXRzL2xvZ29fa2Fma2EnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgyLCcuL2Fzc2V0cy9sb2dvX2tpYmFuYSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODMsJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODQsJy4vYXNzZXRzL2xvZ29fbG9nZ2luZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODUsJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg2LCcuL2Fzc2V0cy9sb2dvX21hcHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg3LCcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODgsJy4vYXNzZXRzL2xvZ29fbWV0cmljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODksJy4vYXNzZXRzL2xvZ29fbW9uZ29kYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTAsJy4vYXNzZXRzL2xvZ29fbXlzcWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkxLCcuL2Fzc2V0cy9sb2dvX25naW54JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5MiwnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5MywnLi9hc3NldHMvbG9nb19vc3F1ZXJ5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NCwnLi9hc3NldHMvbG9nb19waHAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk1LCcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NiwnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NywnLi9hc3NldHMvbG9nb19yYWJiaXRtcSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTgsJy4vYXNzZXRzL2xvZ29fcmVkaXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk5LCcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwMCwnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDEsJy4vYXNzZXRzL2xvZ29fc2tldGNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwMiwnLi9hc3NldHMvbG9nb19zbGFjayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDMsJy4vYXNzZXRzL2xvZ29fdXB0aW1lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwNCwnLi9hc3NldHMvbG9nb192dWxuZXJhYmlsaXR5X21hbmFnZW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA1LCcuL2Fzc2V0cy9sb2dvX3dlYmhvb2snOl9EeW5hbWljSW1wb3J0TW9kdWxlODA2LCcuL2Fzc2V0cy9sb2dvX3dpbmRvd3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA3LCcuL2Fzc2V0cy9sb2dvX3dvcmtwbGFjZV9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA4LCcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODA5LCcuL2Fzc2V0cy9sb2dzdGFzaF9pZic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTAsJy4vYXNzZXRzL2xvZ3N0YXNoX2lucHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMSwnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMiwnLi9hc3NldHMvbG9nc3Rhc2hfcXVldWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODEzLCcuL2Fzc2V0cy9tYWduZXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODE0LCcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxNSwnLi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTYsJy4vYXNzZXRzL21hZ25pZnlXaXRoUGx1cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTcsJy4vYXNzZXRzL21hcF9tYXJrZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODE4LCcuL2Fzc2V0cy9tZW1vcnknOl9EeW5hbWljSW1wb3J0TW9kdWxlODE5LCcuL2Fzc2V0cy9tZW51JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyMCwnLi9hc3NldHMvbWVudURvd24nOl9EeW5hbWljSW1wb3J0TW9kdWxlODIxLCcuL2Fzc2V0cy9tZW51TGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjIsJy4vYXNzZXRzL21lbnVSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjMsJy4vYXNzZXRzL21lbnVVcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjQsJy4vYXNzZXRzL21lcmdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyNSwnLi9hc3NldHMvbWluaW1pemUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODI2LCcuL2Fzc2V0cy9taW51cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjcsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjgsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZV9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODI5LCcuL2Fzc2V0cy9taW51c19pbl9zcXVhcmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODMwLCcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlODMxLCcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzMiwnLi9hc3NldHMvbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlODMzLCcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlODM0LCcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlODM1LCcuL2Fzc2V0cy9tbF9kYXRhX3Zpc3VhbGl6ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODM2LCcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlODM3LCcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzgsJy4vYXNzZXRzL21vYmlsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzksJy4vYXNzZXRzL21vb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlODQwLCcuL2Fzc2V0cy9tb3ZlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0MSwnLi9hc3NldHMvbmFtZXNwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0MiwnLi9hc3NldHMvbmVzdGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0MywnLi9hc3NldHMvbmV3X2NoYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ0LCcuL2Fzc2V0cy9ub2RlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0NSwnLi9hc3NldHMvbnVtYmVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0NiwnLi9hc3NldHMvb2ZmbGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDcsJy4vYXNzZXRzL29ubGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDgsJy4vYXNzZXRzL3BhY2thZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ5LCcuL2Fzc2V0cy9wYWdlU2VsZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1MCwnLi9hc3NldHMvcGFnZXNTZWxlY3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUxLCcuL2Fzc2V0cy9wYWludCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTIsJy4vYXNzZXRzL3BhbGV0dGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUzLCcuL2Fzc2V0cy9wYXBlcl9jbGlwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1NCwnLi9hc3NldHMvcGFydGlhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTUsJy4vYXNzZXRzL3BhdXNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1NiwnLi9hc3NldHMvcGF5bWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTcsJy4vYXNzZXRzL3BlbmNpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTgsJy4vYXNzZXRzL3BlcmNlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODU5LCcuL2Fzc2V0cy9waW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlODYwLCcuL2Fzc2V0cy9waW5fZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2MSwnLi9hc3NldHMvcGlwZUJyZWFrcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjIsJy4vYXNzZXRzL3BpcGVOb0JyZWFrcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjMsJy4vYXNzZXRzL3Bpdm90JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2NCwnLi9hc3NldHMvcGxheSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjUsJy4vYXNzZXRzL3BsYXlGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY2LCcuL2Fzc2V0cy9wbHVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2NywnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY4LCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY5LCcuL2Fzc2V0cy9wbHVzX2luX3NxdWFyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzAsJy4vYXNzZXRzL3BvcG91dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzEsJy4vYXNzZXRzL3B1c2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcyLCcuL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODczLCcuL2Fzc2V0cy9xdW90ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzQsJy4vYXNzZXRzL3JlZnJlc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODc1LCcuL2Fzc2V0cy9yZXBvcnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzYsJy4vYXNzZXRzL3JldHVybl9rZXknOl9EeW5hbWljSW1wb3J0TW9kdWxlODc3LCcuL2Fzc2V0cy9zYXZlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3OCwnLi9hc3NldHMvc2NhbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODc5LCcuL2Fzc2V0cy9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODgwLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODEsJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODgyLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4MywnLi9hc3NldHMvc2Vzc2lvblZpZXdlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODQsJy4vYXNzZXRzL3NoYXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NSwnLi9hc3NldHMvc2hhcmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODg2LCcuL2Fzc2V0cy9zaW5nbGVfbWV0cmljX3ZpZXdlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODcsJy4vYXNzZXRzL3Nub3dmbGFrZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODgsJy4vYXNzZXRzL3NvcnRBc2NlbmRpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODg5LCcuL2Fzc2V0cy9zb3J0RGVzY2VuZGluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTAsJy4vYXNzZXRzL3NvcnRMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5MSwnLi9hc3NldHMvc29ydFJpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5MiwnLi9hc3NldHMvc29ydF9kb3duJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5MywnLi9hc3NldHMvc29ydF91cCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTQsJy4vYXNzZXRzL3NvcnRhYmxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NSwnLi9hc3NldHMvc3BhY2VzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NiwnLi9hc3NldHMvc3BhcmtsZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk3LCcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5OCwnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk5LCcuL2Fzc2V0cy9zdGFyX2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwMCwnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDEsJy4vYXNzZXRzL3N0YXJfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwMiwnLi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAzLCcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwNCwnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA1LCcuL2Fzc2V0cy9zdGF0cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDYsJy4vYXNzZXRzL3N0b3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA3LCcuL2Fzc2V0cy9zdG9wX2ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDgsJy4vYXNzZXRzL3N0b3Bfc2xhc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA5LCcuL2Fzc2V0cy9zdG9yYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxMCwnLi9hc3NldHMvc3RyaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxMSwnLi9hc3NldHMvc3VibW9kdWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxMiwnLi9hc3NldHMvc3VuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxMywnLi9hc3NldHMvc3dhdGNoX2lucHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxNCwnLi9hc3NldHMvc3ltbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MTUsJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MTYsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MTcsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTE4LCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MTksJy4vYXNzZXRzL3RhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MjAsJy4vYXNzZXRzL3RlYXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTIxLCcuL2Fzc2V0cy90ZW1wZXJhdHVyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MjIsJy4vYXNzZXRzL3RpbWVSZWZyZXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyMywnLi9hc3NldHMvdGltZWxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTI0LCcuL2Fzc2V0cy90aW1lbGluZVdpdGhBcnJvdyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MjUsJy4vYXNzZXRzL3RpbWVzbGlkZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTI2LCcuL2Fzc2V0cy90b2tlbkFsaWFzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyNywnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyOCwnLi9hc3NldHMvdG9rZW5BcnJheSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MjksJy4vYXNzZXRzL3Rva2VuQmluYXJ5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTkzMCwnLi9hc3NldHMvdG9rZW5Cb29sZWFuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkzMSwnLi9hc3NldHMvdG9rZW5DbGFzcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzIsJy4vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzMsJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTM0LCcuL2Fzc2V0cy90b2tlbkRhdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTM1LCcuL2Fzc2V0cy90b2tlbkRpbWVuc2lvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzYsJy4vYXNzZXRzL3Rva2VuRWxlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzcsJy4vYXNzZXRzL3Rva2VuRW51bSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzgsJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzksJy4vYXNzZXRzL3Rva2VuRXZlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQwLCcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NDEsJy4vYXNzZXRzL3Rva2VuRmllbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQyLCcuL2Fzc2V0cy90b2tlbkZpbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQzLCcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NDQsJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQ1LCcuL2Fzc2V0cy90b2tlbkdlbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NDYsJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk0NywnLi9hc3NldHMvdG9rZW5JUCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NDgsJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk0OSwnLi9hc3NldHMvdG9rZW5Kb2luJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk1MCwnLi9hc3NldHMvdG9rZW5LZXknOl9EeW5hbWljSW1wb3J0TW9kdWxlOTUxLCcuL2Fzc2V0cy90b2tlbktleXdvcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTUyLCcuL2Fzc2V0cy90b2tlbk1ldGhvZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NTMsJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NTQsJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTU1LCcuL2Fzc2V0cy90b2tlbk1vZHVsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NTYsJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk1NywnLi9hc3NldHMvdG9rZW5OZXN0ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTU4LCcuL2Fzc2V0cy90b2tlbk51bGwnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTU5LCcuL2Fzc2V0cy90b2tlbk51bWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NjAsJy4vYXNzZXRzL3Rva2VuT2JqZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2MSwnLi9hc3NldHMvdG9rZW5PcGVyYXRvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NjIsJy4vYXNzZXRzL3Rva2VuUGFja2FnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NjMsJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2NCwnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2NSwnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NjYsJy4vYXNzZXRzL3Rva2VuUmFuZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTY3LCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2OCwnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTY5LCcuL2Fzc2V0cy90b2tlblJlcG8nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTcwLCcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTcxLCcuL2Fzc2V0cy90b2tlblNlbWFudGljVGV4dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NzIsJy4vYXNzZXRzL3Rva2VuU2hhcGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTczLCcuL2Fzc2V0cy90b2tlblN0cmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NzQsJy4vYXNzZXRzL3Rva2VuU3RydWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTk3NSwnLi9hc3NldHMvdG9rZW5TeW1ib2wnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTc2LCcuL2Fzc2V0cy90b2tlblRhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NzcsJy4vYXNzZXRzL3Rva2VuVGV4dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NzgsJy4vYXNzZXRzL3Rva2VuVG9rZW5Db3VudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NzksJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTgwLCcuL2Fzc2V0cy90b2tlblZlY3RvckRlbnNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk4MSwnLi9hc3NldHMvdG9rZW5WZWN0b3JTcGFyc2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTgyLCcuL2Fzc2V0cy90cmFpbmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5ODMsJy4vYXNzZXRzL3RyYW5zaXRpb25MZWZ0SW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTg0LCcuL2Fzc2V0cy90cmFuc2l0aW9uTGVmdE91dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5ODUsJy4vYXNzZXRzL3RyYW5zaXRpb25Ub3BJbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5ODYsJy4vYXNzZXRzL3RyYW5zaXRpb25Ub3BPdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTg3LCcuL2Fzc2V0cy90cmFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5ODgsJy4vYXNzZXRzL3VuZm9sZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5ODksJy4vYXNzZXRzL3VubGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OTAsJy4vYXNzZXRzL3VzZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTkxLCcuL2Fzc2V0cy91c2VyQXZhdGFyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk5MiwnLi9hc3NldHMvdXNlcnMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTkzLCcuL2Fzc2V0cy92ZWN0b3InOl9EeW5hbWljSW1wb3J0TW9kdWxlOTk0LCcuL2Fzc2V0cy92aWRlb1BsYXllcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OTUsJy4vYXNzZXRzL3Zpc19hcmVhJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk5NiwnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OTcsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OTgsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk5OSwnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAwLCcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAwMSwnLi9hc3NldHMvdmlzX2dhdWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDIsJy4vYXNzZXRzL3Zpc19nb2FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDMsJy4vYXNzZXRzL3Zpc19saW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDQsJy4vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA1LCcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA2LCcuL2Fzc2V0cy92aXNfbWV0cmljJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDcsJy4vYXNzZXRzL3Zpc19waWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAwOCwnLi9hc3NldHMvdmlzX3RhYmxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDksJy4vYXNzZXRzL3Zpc190YWdfY2xvdWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxMCwnLi9hc3NldHMvdmlzX3RleHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxMSwnLi9hc3NldHMvdmlzX3RpbWVsaW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTIsJy4vYXNzZXRzL3Zpc192ZWdhJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTMsJy4vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE0LCcuL2Fzc2V0cy93YXJuaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTUsJy4vYXNzZXRzL3dhcm5pbmdGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxNiwnLi9hc3NldHMvd29yZFdyYXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxNywnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE4LCcuL2Fzc2V0cy93cmVuY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxOX07XG5mdW5jdGlvbiBfRHluYW1pY0ltcG9ydChwYXRoKSB7Y29uc3QgbW9kPV9EeW5hbWljSW1wb3J0TW9kdWxlTWFwW3BhdGhdO2lmKG1vZCkge21vZFtTeW1ib2wudG9TdHJpbmdUYWddPSdNb2R1bGUnO31yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vZCk7fVxudmFyIF9leGNsdWRlZCA9IFtcInR5cGVcIiwgXCJzaXplXCIsIFwiY29sb3JcIiwgXCJjbGFzc05hbWVcIiwgXCJ0YWJJbmRleFwiLCBcInRpdGxlXCIsIFwib25JY29uTG9hZFwiLCBcInN0eWxlXCIsIFwic3R5bGVzTWVtb2l6ZXJcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgdHlwZVRvUGF0aE1hcCB9IGZyb20gJy4vaWNvbl9tYXAnO1xuaW1wb3J0IHsgaWNvbiBhcyBlbXB0eSB9IGZyb20gJy4vYXNzZXRzL2VtcHR5JztcbmltcG9ydCB7IGVucXVldWVTdGF0ZUNoYW5nZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciwgd2l0aEV1aVN0eWxlc01lbW9pemVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuZXhwb3J0IHsgQ09MT1JTIH0gZnJvbSAnLi9uYW1lZF9jb2xvcnMnO1xuaW1wb3J0IHsgaXNOYW1lZENvbG9yIH0gZnJvbSAnLi9uYW1lZF9jb2xvcnMnO1xuaW1wb3J0IHsgZXVpSWNvblN0eWxlcyB9IGZyb20gJy4vaWNvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBnZXRJc0FwcEljb24gPSBmdW5jdGlvbiBnZXRJc0FwcEljb24oaWNvblR5cGUpIHtcbiAgaWYgKHR5cGVvZiBpY29uVHlwZSAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgaWYgKGljb25UeXBlID09PSAnZGF0YVZpc3VhbGl6ZXInKSByZXR1cm4gdHJ1ZTsgLy8gU3BlY2lhbCBjYXNlXG4gIGlmIChpY29uVHlwZS5pbmRleE9mKCdkYXRhOicpID09PSAwKSByZXR1cm4gZmFsc2U7IC8vIElubGluZSBkYXRhIFVSSXMgc2hvdWxkIGJlIHNob3J0LWNpcmN1aXRlZCBmb3IgcGVyZm9ybWFuY2VcbiAgcmV0dXJuIGljb25UeXBlLmVuZHNXaXRoKCdBcHAnKSB8fCBpY29uVHlwZS5lbmRzV2l0aCgnSm9iJyk7XG59O1xuZXhwb3J0IHZhciBUWVBFUyA9IGtleXNPZih0eXBlVG9QYXRoTWFwKTtcblxuLy8gV2UgYWNjZXB0IGFyYml0cmFyeSBjb2xvciBzdHJpbmdzLCB3aGljaCBhcmUgaW1wb3NzaWJsZSB0byB0eXBlLlxuXG5leHBvcnQgdmFyIFNJWkVTID0gWydvcmlnaW5hbCcsICdzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcbmZ1bmN0aW9uIGlzRXVpSWNvblR5cGUoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdzdHJpbmcnICYmIHR5cGVUb1BhdGhNYXAuaGFzT3duUHJvcGVydHkoeCk7XG59XG5mdW5jdGlvbiBnZXRJbml0aWFsSWNvbihpY29uKSB7XG4gIGlmIChpY29uID09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChpc0V1aUljb25UeXBlKGljb24pKSB7XG4gICAgaWYgKGljb25Db21wb25lbnRDYWNoZS5oYXNPd25Qcm9wZXJ0eShpY29uKSkge1xuICAgICAgcmV0dXJuIGljb25Db21wb25lbnRDYWNoZVtpY29uXTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gaWNvbjtcbn1cbnZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCk7XG52YXIgaWNvbkNvbXBvbmVudENhY2hlID0ge307XG5leHBvcnQgdmFyIGNsZWFySWNvbkNvbXBvbmVudENhY2hlID0gZnVuY3Rpb24gY2xlYXJJY29uQ29tcG9uZW50Q2FjaGUoaWNvblR5cGUpIHtcbiAgaWYgKGljb25UeXBlICE9IG51bGwpIHtcbiAgICBkZWxldGUgaWNvbkNvbXBvbmVudENhY2hlW2ljb25UeXBlXTtcbiAgfSBlbHNlIHtcbiAgICBpY29uQ29tcG9uZW50Q2FjaGUgPSB7fTtcbiAgfVxufTtcbmV4cG9ydCB2YXIgYXBwZW5kSWNvbkNvbXBvbmVudENhY2hlID0gZnVuY3Rpb24gYXBwZW5kSWNvbkNvbXBvbmVudENhY2hlKGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwKSB7XG4gIGZvciAodmFyIGljb25UeXBlIGluIGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwKSB7XG4gICAgaWYgKGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwLmhhc093blByb3BlcnR5KGljb25UeXBlKSkge1xuICAgICAgaWNvbkNvbXBvbmVudENhY2hlW2ljb25UeXBlXSA9IGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwW2ljb25UeXBlXTtcbiAgICB9XG4gIH1cbn07XG5leHBvcnQgdmFyIEV1aUljb25DbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpSWNvbkNsYXNzKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlJY29uQ2xhc3MpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlJY29uQ2xhc3MsIFtwcm9wc10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpc01vdW50ZWRcIiwgZmFsc2UpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJsb2FkSWNvbkNvbXBvbmVudFwiLCBmdW5jdGlvbiAoaWNvblR5cGUpIHtcbiAgICAgIGlmIChpY29uQ29tcG9uZW50Q2FjaGUuaGFzT3duUHJvcGVydHkoaWNvblR5cGUpKSB7XG4gICAgICAgIC8vIGV4aXN0cyBpbiBjYWNoZVxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBuZWVkZWRMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpY29uOiBpY29uQ29tcG9uZW50Q2FjaGVbaWNvblR5cGVdXG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5vbkljb25Mb2FkKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIF9EeW5hbWljSW1wb3J0KGAuL2Fzc2V0cy8ke3R5cGVUb1BhdGhNYXBbaWNvblR5cGVdfWApLnRoZW4oZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGljb24gPSBfcmVmLmljb247XG4gICAgICAgIGljb25Db21wb25lbnRDYWNoZVtpY29uVHlwZV0gPSBpY29uO1xuICAgICAgICBlbnF1ZXVlU3RhdGVDaGFuZ2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChfdGhpcy5pc01vdW50ZWQgJiYgX3RoaXMucHJvcHMudHlwZSA9PT0gaWNvblR5cGUpIHtcbiAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgaWNvbjogaWNvbixcbiAgICAgICAgICAgICAgaWNvblRpdGxlOiBpY29uVHlwZSxcbiAgICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICAgICAgfSwgX3RoaXMub25JY29uTG9hZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkljb25Mb2FkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBvbkljb25Mb2FkID0gX3RoaXMucHJvcHMub25JY29uTG9hZDtcbiAgICAgIGlmIChvbkljb25Mb2FkKSB7XG4gICAgICAgIG9uSWNvbkxvYWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG4gICAgdmFyIGluaXRpYWxJY29uID0gZ2V0SW5pdGlhbEljb24odHlwZSk7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBpY29uOiBpbml0aWFsSWNvbixcbiAgICAgIGljb25UaXRsZTogdW5kZWZpbmVkLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIG5lZWRlZExvYWRpbmc6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aUljb25DbGFzcywgX1B1cmVDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUljb25DbGFzcywgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLmlzTW91bnRlZCA9IHRydWU7XG4gICAgICB2YXIgdHlwZSA9IHRoaXMucHJvcHMudHlwZTtcbiAgICAgIGlmIChpc0V1aUljb25UeXBlKHR5cGUpICYmIHRoaXMuc3RhdGUuaWNvbiA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIG5lZWRlZExvYWRpbmc6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxvYWRJY29uQ29tcG9uZW50KHR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkljb25Mb2FkKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICB2YXIgdHlwZSA9IHRoaXMucHJvcHMudHlwZTtcbiAgICAgIGlmICh0eXBlICE9PSBwcmV2UHJvcHMudHlwZSkge1xuICAgICAgICBpZiAoaXNFdWlJY29uVHlwZSh0eXBlKSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgbmVlZGVkTG9hZGluZzogaWNvbkNvbXBvbmVudENhY2hlLmhhc093blByb3BlcnR5KHR5cGUpLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sb2FkSWNvbkNvbXBvbmVudCh0eXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGljb246IHR5cGUsXG4gICAgICAgICAgICBuZWVkZWRMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIHR5cGUgPSBfdGhpcyRwcm9wcy50eXBlLFxuICAgICAgICBfdGhpcyRwcm9wcyRzaXplID0gX3RoaXMkcHJvcHMuc2l6ZSxcbiAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF90aGlzJHByb3BzJHNpemUsXG4gICAgICAgIGNvbG9yID0gX3RoaXMkcHJvcHMuY29sb3IsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgdGFiSW5kZXggPSBfdGhpcyRwcm9wcy50YWJJbmRleCxcbiAgICAgICAgdGl0bGUgPSBfdGhpcyRwcm9wcy50aXRsZSxcbiAgICAgICAgb25JY29uTG9hZCA9IF90aGlzJHByb3BzLm9uSWNvbkxvYWQsXG4gICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHMuc3R5bGUsXG4gICAgICAgIHN0eWxlc01lbW9pemVyID0gX3RoaXMkcHJvcHMuc3R5bGVzTWVtb2l6ZXIsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRzdGF0ZS5pc0xvYWRpbmcsXG4gICAgICAgIG5lZWRlZExvYWRpbmcgPSBfdGhpcyRzdGF0ZS5uZWVkZWRMb2FkaW5nLFxuICAgICAgICBpY29uVGl0bGUgPSBfdGhpcyRzdGF0ZS5pY29uVGl0bGU7XG4gICAgICB2YXIgaXNMb2FkZWQgPSAhaXNMb2FkaW5nICYmIG5lZWRlZExvYWRpbmc7XG4gICAgICB2YXIgaXNDdXN0b21Db2xvciA9IGNvbG9yICYmICFpc05hbWVkQ29sb3IoY29sb3IpO1xuICAgICAgdmFyIG9wdGlvbmFsQ3VzdG9tU3R5bGVzID0gaXNDdXN0b21Db2xvciA/IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0sIHN0eWxlKSA6IHN0eWxlO1xuXG4gICAgICAvLyBUaGVzZSBpY29ucyBhcmUgYSBsaXR0bGUgc3BlY2lhbCBhbmQgZ2V0IHNvbWUgZXh0cmEgQ1NTIGZsZXhpYmlsaXR5XG4gICAgICB2YXIgaXNBcHBJY29uID0gZ2V0SXNBcHBJY29uKHR5cGUpO1xuICAgICAgLy8gQXBwIGNvbG9yIHN0eWxlcyBhcmUgb25seSBhcHBsaWVkIGlmIG5vIGNvbG9yIGlzIHBhc3NlZCBvciBpZiBjb2xvcj1cImRlZmF1bHRcIiBpcyBwYXNzZWRcbiAgICAgIHZhciBhcHBJY29uSGFzQ29sb3IgPSBjb2xvciAmJiBjb2xvciAhPT0gJ2RlZmF1bHQnO1xuXG4gICAgICAvLyBUaGUgRWxhc3RpYyBsb2dvIHNob3VsZCBiZSBhbiBvdXRsaW5lIGluIHRleHQgYW5kIGdob3N0IG1vZGVcbiAgICAgIHZhciBpc0VsYXN0aWNMb2dvT3V0bGluZSA9IHR5cGUgPT09ICdsb2dvRWxhc3RpYycgJiYgKGNvbG9yID09PSAnZ2hvc3QnIHx8IGNvbG9yID09PSAndGV4dCcpO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlJY29uJywgY2xhc3NOYW1lKTtcblxuICAgICAgLy8gRW1vdGlvbiBzdHlsZXNcbiAgICAgIHZhciBzdHlsZXMgPSBzdHlsZXNNZW1vaXplcihldWlJY29uU3R5bGVzKTtcbiAgICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUljb24sIHN0eWxlc1tzaXplXSwgY29sb3IgJiYgaXNOYW1lZENvbG9yKGNvbG9yKSAmJiBzdHlsZXNbY29sb3JdLCBpc0N1c3RvbUNvbG9yICYmIHN0eWxlcy5jdXN0b21Db2xvciwgaXNFbGFzdGljTG9nb091dGxpbmUgJiYgc3R5bGVzLmxvZ29FbGFzdGljT3V0bGluZSwgaXNBcHBJY29uICYmICFhcHBJY29uSGFzQ29sb3IgJiYgc3R5bGVzLmFwcCwgaXNMb2FkaW5nICYmIHN0eWxlcy5pc0xvYWRpbmcsICFpc0xvYWRpbmcgJiYgbmVlZGVkTG9hZGluZyAmJiBzdHlsZXMuaXNMb2FkZWRdO1xuICAgICAgdmFyIGljb24gPSB0aGlzLnN0YXRlLmljb24gfHwgZW1wdHk7XG4gICAgICBpZiAodHlwZW9mIGljb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiaW1nXCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBhbHQ6IHRpdGxlID8gdGl0bGUgOiAnJyxcbiAgICAgICAgICBzcmM6IGljb24sXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXhcbiAgICAgICAgfSwgcmVzdCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIFN2ZyA9IGljb247XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gYXJpYS1sYWJlbCwgYXJpYS1sYWJlbGxlZGJ5LCBvciB0aXRsZSBpdCBnZXRzIGFyaWEtaGlkZGVuIHRydWVcbiAgICAgICAgdmFyIGlzQXJpYUhpZGRlbiA9ICEodGhpcy5wcm9wc1snYXJpYS1sYWJlbCddIHx8IHRoaXMucHJvcHNbJ2FyaWEtbGFiZWxsZWRieSddIHx8IHRoaXMucHJvcHMudGl0bGUpO1xuXG4gICAgICAgIC8vIElmIG5vIGFyaWEtbGFiZWwgb3IgYXJpYS1sYWJlbGxlZGJ5IGlzIHByb3ZpZGVkIGJ1dCB0aGVyZSdzIGEgdGl0bGUsIGEgdGl0bGVJZCBpcyBnZW5lcmF0ZWRcbiAgICAgICAgLy8gIFRoZSBzdmcgYXJpYS1sYWJlbGxlZGJ5IGF0dHJpYnV0ZSBnZXRzIHRoaXMgdGl0bGVJZFxuICAgICAgICAvLyAgVGhlIHN2ZyB0aXRsZSBlbGVtZW50IGdldHMgdGhpcyB0aXRsZUlkIGFzIGFuIGlkXG4gICAgICAgIHZhciB0aXRsZUlkID0gIXRoaXMucHJvcHNbJ2FyaWEtbGFiZWwnXSAmJiAhdGhpcy5wcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10gJiYgdGl0bGUgPyB7XG4gICAgICAgICAgdGl0bGVJZDogZ2VuZXJhdGVJZCgpXG4gICAgICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFN2ZywgX2V4dGVuZHMoe1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICBzdHlsZTogb3B0aW9uYWxDdXN0b21TdHlsZXMsXG4gICAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgICAgdGl0bGU6IHRpdGxlXG4gICAgICAgIH0sIHRpdGxlSWQsIHtcbiAgICAgICAgICBcImRhdGEtaWNvbi10eXBlXCI6IGljb25UaXRsZSxcbiAgICAgICAgICBcImRhdGEtaXMtbG9hZGVkXCI6IGlzTG9hZGVkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICBcImRhdGEtaXMtbG9hZGluZ1wiOiBpc0xvYWRpbmcgfHwgdW5kZWZpbmVkXG4gICAgICAgIH0sIHJlc3QsIHtcbiAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IGlzQXJpYUhpZGRlbiB8fCByZXN0WydhcmlhLWhpZGRlbiddXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbn0oUHVyZUNvbXBvbmVudCk7XG5FdWlJY29uQ2xhc3MucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBgRW51bWAgaXMgYW55IG9mIHRoZSBuYW1lZCBpY29ucyBsaXN0ZWQgaW4gdGhlIGRvY3MsIGBzdHJpbmdgIGlzIHVzdWFsbHkgYSBVUkwgdG8gYW4gU1ZHIGZpbGUsIGFuZCBgZWxlbWVudFR5cGVgIGlzIGFueSBSZWFjdCBTVkcgY29tcG9uZW50XG4gICAgICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgICAqIE9uZSBvZiBFVUkncyBjb2xvciBwYWxldHRlIG9yIGEgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jb2xvcl92YWx1ZS5cbiAgICAgICAqIE5vdGUgdGhhdCBjb2xvcmluZyBvbmx5IHdvcmtzIGlmIHlvdXIgU1ZHIGlzIHJlbW92ZWQgb2YgZmlsbCBhdHRyaWJ1dGVzLlxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIE5vdGUgdGhhdCBldmVyeSBzaXplIG90aGVyIHRoYW4gYG9yaWdpbmFsYCBhc3N1bWVzIHRoZSBwcm92aWRlZCBTVkcgc2l0cyBvbiBhIHNxdWFyZSB2aWV3Ym94LlxuICAgICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogRGVzY3JpcHRpdmUgdGl0bGUgZm9yIG5hbWluZyB0aGUgaWNvbiBiYXNlZCBvbiBpdHMgdXNlXG4gICAgICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAgICogQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHRpdGxlIGVsZW1lbnRcbiAgICAgICAqL1xuICB0aXRsZUlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgICAqIEl0cyB2YWx1ZSBzaG91bGQgYmUgb25lIG9yIG1vcmUgZWxlbWVudCBJRHNcbiAgICAgICAqL1xuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgICAqIENhbGxiYWNrIHdoZW4gdGhlIGljb24gaGFzIGJlZW4gbG9hZGVkICYgcmVuZGVyZWRcbiAgICAgICAqL1xuICBvbkljb25Mb2FkOiBQcm9wVHlwZXMuZnVuY1xufTtcbmV4cG9ydCB2YXIgRXVpSWNvbiA9IHdpdGhFdWlTdHlsZXNNZW1vaXplcihFdWlJY29uQ2xhc3MpOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIHR5cGVUb1BhdGhNYXAgPSB7XG4gIGFjY2Vzc2liaWxpdHk6ICdhY2Nlc3NpYmlsaXR5JyxcbiAgYWRkRGF0YUFwcDogJ2FwcF9hZGRfZGF0YScsXG4gIGFkdmFuY2VkU2V0dGluZ3NBcHA6ICdhcHBfYWR2YW5jZWRfc2V0dGluZ3MnLFxuICBhZ2VudEFwcDogJ2FwcF9mbGVldCcsXG4gIGFnZ3JlZ2F0ZTogJ2FnZ3JlZ2F0ZScsXG4gIGFuYWx5emVFdmVudDogJ2FuYWx5emVFdmVudCcsXG4gIGFubm90YXRpb246ICdhbm5vdGF0aW9uJyxcbiAgYW5vbWFseUNoYXJ0OiAnYW5vbWFseV9jaGFydCcsXG4gIGFub21hbHlTd2ltTGFuZTogJ2Fub21hbHlfc3dpbV9sYW5lJyxcbiAgYXBtQXBwOiAnYXBwX2FwbScsXG4gIGFwbVRyYWNlOiAnYXBtX3RyYWNlJyxcbiAgYXBwU2VhcmNoQXBwOiAnYXBwX2FwcF9zZWFyY2gnLFxuICBhcHBzOiAnYXBwcycsXG4gIGFycm93RG93bjogJ2Fycm93X2Rvd24nLFxuICBhcnJvd0xlZnQ6ICdhcnJvd19sZWZ0JyxcbiAgYXJyb3dSaWdodDogJ2Fycm93X3JpZ2h0JyxcbiAgYXJyb3dVcDogJ2Fycm93X3VwJyxcbiAgYXJyb3dTdGFydDogJ2Fycm93U3RhcnQnLFxuICBhcnJvd0VuZDogJ2Fycm93RW5kJyxcbiAgYXJ0aWNsZTogJ2FydGljbGUnLFxuICBhc3RlcmlzazogJ2FzdGVyaXNrJyxcbiAgYXQ6ICdhdCcsXG4gIGF1ZGl0YmVhdEFwcDogJ2FwcF9hdWRpdGJlYXQnLFxuICBiZWFrZXI6ICdiZWFrZXInLFxuICBiZWxsOiAnYmVsbCcsXG4gIGJlbGxTbGFzaDogJ2JlbGxTbGFzaCcsXG4gIGJldGE6ICdiZXRhJyxcbiAgYm9sdDogJ2JvbHQnLFxuICBib3hlc0hvcml6b250YWw6ICdib3hlc19ob3Jpem9udGFsJyxcbiAgYm94ZXNWZXJ0aWNhbDogJ2JveGVzX3ZlcnRpY2FsJyxcbiAgYnJhbmNoOiAnYnJhbmNoJyxcbiAgYnJhbmNoVXNlcjogJ2JyYW5jaFVzZXInLFxuICBicm9vbTogJ2Jyb29tJyxcbiAgYnJ1c2g6ICdicnVzaCcsXG4gIGJ1ZzogJ2J1ZycsXG4gIGJ1bGxzZXllOiAnYnVsbHNleWUnLFxuICBjYWxlbmRhcjogJ2NhbGVuZGFyJyxcbiAgY2FudmFzQXBwOiAnYXBwX2NhbnZhcycsXG4gIGNhc2VzQXBwOiAnYXBwX2Nhc2VzJyxcbiAgY2hhbmdlUG9pbnREZXRlY3Rpb246ICdjaGFuZ2VfcG9pbnRfZGV0ZWN0aW9uJyxcbiAgY2hlY2s6ICdjaGVjaycsXG4gIGNoZWNrSW5DaXJjbGVGaWxsZWQ6ICdjaGVja0luQ2lyY2xlRmlsbGVkJyxcbiAgY2hlZXI6ICdjaGVlcicsXG4gIGNsYXNzaWZpY2F0aW9uSm9iOiAnbWxfY2xhc3NpZmljYXRpb25fam9iJyxcbiAgY2xpY2tMZWZ0OiAnY2xpY2tMZWZ0JyxcbiAgY2xpY2tSaWdodDogJ2NsaWNrUmlnaHQnLFxuICBjbG9jazogJ2Nsb2NrJyxcbiAgY2xvY2tDb3VudGVyOiAnY2xvY2tDb3VudGVyJyxcbiAgY2xvdWREcml6emxlOiAnY2xvdWREcml6emxlJyxcbiAgY2xvdWRTdG9ybXk6ICdjbG91ZFN0b3JteScsXG4gIGNsb3VkU3Vubnk6ICdjbG91ZFN1bm55JyxcbiAgY2x1c3RlcjogJ2NsdXN0ZXInLFxuICBjb2RlQXBwOiAnYXBwX2NvZGUnLFxuICBjb2xvcjogJ2NvbG9yJyxcbiAgY29tcHV0ZTogJ2NvbXB1dGUnLFxuICBjb25zb2xlOiAnY29uc29sZScsXG4gIGNvbnNvbGVBcHA6ICdhcHBfY29uc29sZScsXG4gIGNvbnRhaW5lcjogJ2NvbnRhaW5lcicsXG4gIGNvbnRpbnVpdHlBYm92ZTogJ2NvbnRpbnVpdHlBYm92ZScsXG4gIGNvbnRpbnVpdHlBYm92ZUJlbG93OiAnY29udGludWl0eUFib3ZlQmVsb3cnLFxuICBjb250aW51aXR5QmVsb3c6ICdjb250aW51aXR5QmVsb3cnLFxuICBjb250aW51aXR5V2l0aGluOiAnY29udGludWl0eVdpdGhpbicsXG4gIGNvbnRyb2xzSG9yaXpvbnRhbDogJ2NvbnRyb2xzX2hvcml6b250YWwnLFxuICBjb250cm9sc1ZlcnRpY2FsOiAnY29udHJvbHNfdmVydGljYWwnLFxuICBjb3B5OiAnY29weScsXG4gIGNvcHlDbGlwYm9hcmQ6ICdjb3B5X2NsaXBib2FyZCcsXG4gIGNyZWF0ZUFkdmFuY2VkSm9iOiAnbWxfY3JlYXRlX2FkdmFuY2VkX2pvYicsXG4gIGNyZWF0ZU11bHRpTWV0cmljSm9iOiAnbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2InLFxuICBjcmVhdGVQb3B1bGF0aW9uSm9iOiAnbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iJyxcbiAgY3JlYXRlU2luZ2xlTWV0cmljSm9iOiAnbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iJyxcbiAgY3Jvc3M6ICdjcm9zcycsXG4gIGNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwOiAnYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24nLFxuICBjcm9zc0luQ2lyY2xlOiAnY3Jvc3NfaW5fY2lyY2xlJyxcbiAgY3Jvc3NoYWlyczogJ2Nyb3NzaGFpcnMnLFxuICBjdXJyZW5jeTogJ2N1cnJlbmN5JyxcbiAgY3V0OiAnY3V0JyxcbiAgZGFzaGJvYXJkQXBwOiAnYXBwX2Rhc2hib2FyZCcsXG4gIGRhdGFWaXN1YWxpemVyOiAnbWxfZGF0YV92aXN1YWxpemVyJyxcbiAgZGF0YWJhc2U6ICdkYXRhYmFzZScsXG4gIGRlc2t0b3A6ICdkZXNrdG9wJyxcbiAgZGV2VG9vbHNBcHA6ICdhcHBfZGV2dG9vbHMnLFxuICBkaWZmOiAnZGlmZicsXG4gIGRpc2NvdmVyQXBwOiAnYXBwX2Rpc2NvdmVyJyxcbiAgZGlzY3VzczogJ2Rpc2N1c3MnLFxuICBkb2N1bWVudDogJ2RvY3VtZW50JyxcbiAgZG9jdW1lbnRFZGl0OiAnZG9jdW1lbnRFZGl0JyxcbiAgZG9jdW1lbnRhdGlvbjogJ2RvY3VtZW50YXRpb24nLFxuICBkb2N1bWVudHM6ICdkb2N1bWVudHMnLFxuICBkb3Q6ICdkb3QnLFxuICBkb3RJbkNpcmNsZTogJ2RvdEluQ2lyY2xlJyxcbiAgZG91YmxlQXJyb3dMZWZ0OiAnZG91YmxlQXJyb3dMZWZ0JyxcbiAgZG91YmxlQXJyb3dSaWdodDogJ2RvdWJsZUFycm93UmlnaHQnLFxuICBkb3dubG9hZDogJ2Rvd25sb2FkJyxcbiAgZWRpdG9yQWxpZ25DZW50ZXI6ICdlZGl0b3JfYWxpZ25fY2VudGVyJyxcbiAgZWRpdG9yQWxpZ25MZWZ0OiAnZWRpdG9yX2FsaWduX2xlZnQnLFxuICBlZGl0b3JBbGlnblJpZ2h0OiAnZWRpdG9yX2FsaWduX3JpZ2h0JyxcbiAgZWRpdG9yQm9sZDogJ2VkaXRvcl9ib2xkJyxcbiAgZWRpdG9yQ2hlY2tsaXN0OiAnZWRpdG9yX2NoZWNrbGlzdCcsXG4gIGVkaXRvckNvZGVCbG9jazogJ2VkaXRvcl9jb2RlX2Jsb2NrJyxcbiAgZWRpdG9yQ29tbWVudDogJ2VkaXRvcl9jb21tZW50JyxcbiAgZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWw6ICdlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCcsXG4gIGVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbDogJ2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCcsXG4gIGVkaXRvckhlYWRpbmc6ICdlZGl0b3JfaGVhZGluZycsXG4gIGVkaXRvckl0YWxpYzogJ2VkaXRvcl9pdGFsaWMnLFxuICBlZGl0b3JJdGVtQWxpZ25Cb3R0b206ICdlZGl0b3JJdGVtQWxpZ25Cb3R0b20nLFxuICBlZGl0b3JJdGVtQWxpZ25DZW50ZXI6ICdlZGl0b3JJdGVtQWxpZ25DZW50ZXInLFxuICBlZGl0b3JJdGVtQWxpZ25MZWZ0OiAnZWRpdG9ySXRlbUFsaWduTGVmdCcsXG4gIGVkaXRvckl0ZW1BbGlnbk1pZGRsZTogJ2VkaXRvckl0ZW1BbGlnbk1pZGRsZScsXG4gIGVkaXRvckl0ZW1BbGlnblJpZ2h0OiAnZWRpdG9ySXRlbUFsaWduUmlnaHQnLFxuICBlZGl0b3JJdGVtQWxpZ25Ub3A6ICdlZGl0b3JJdGVtQWxpZ25Ub3AnLFxuICBlZGl0b3JMaW5rOiAnZWRpdG9yX2xpbmsnLFxuICBlZGl0b3JPcmRlcmVkTGlzdDogJ2VkaXRvcl9vcmRlcmVkX2xpc3QnLFxuICBlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQ6ICdlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQnLFxuICBlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0OiAnZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCcsXG4gIGVkaXRvclBvc2l0aW9uVG9wTGVmdDogJ2VkaXRvclBvc2l0aW9uVG9wTGVmdCcsXG4gIGVkaXRvclBvc2l0aW9uVG9wUmlnaHQ6ICdlZGl0b3JQb3NpdGlvblRvcFJpZ2h0JyxcbiAgZWRpdG9yUmVkbzogJ2VkaXRvcl9yZWRvJyxcbiAgZWRpdG9yU3RyaWtlOiAnZWRpdG9yX3N0cmlrZScsXG4gIGVkaXRvclRhYmxlOiAnZWRpdG9yX3RhYmxlJyxcbiAgZWRpdG9yVW5kZXJsaW5lOiAnZWRpdG9yX3VuZGVybGluZScsXG4gIGVkaXRvclVuZG86ICdlZGl0b3JfdW5kbycsXG4gIGVkaXRvclVub3JkZXJlZExpc3Q6ICdlZGl0b3JfdW5vcmRlcmVkX2xpc3QnLFxuICBlbWFpbDogJ2VtYWlsJyxcbiAgZW1wdHk6ICdlbXB0eScsXG4gIGVtc0FwcDogJ2FwcF9lbXMnLFxuICBlbmRwb2ludDogJ2VuZHBvaW50JyxcbiAgZXFsOiAnZXFsJyxcbiAgZXJhc2VyOiAnZXJhc2VyJyxcbiAgZXJyb3I6ICdlcnJvcicsXG4gIGVycm9yRmlsbGVkOiAnZXJyb3JGaWxsZWQnLFxuICBlc3FsVmlzOiAnZXNxbFZpcycsXG4gIGV4aXQ6ICdleGl0JyxcbiAgZXhwYW5kOiAnZXhwYW5kJyxcbiAgZXhwYW5kTWluaTogJ2V4cGFuZE1pbmknLFxuICBleHBvcnRBY3Rpb246ICdleHBvcnQnLFxuICBleWU6ICdleWUnLFxuICBleWVDbG9zZWQ6ICdleWVfY2xvc2VkJyxcbiAgZmFjZUhhcHB5OiAnZmFjZV9oYXBweScsXG4gIGZhY2VOZXV0cmFsOiAnZmFjZV9uZXV0cmFsJyxcbiAgZmFjZVNhZDogJ2ZhY2Vfc2FkJyxcbiAgZmllbGRTdGF0aXN0aWNzOiAnZmllbGRfc3RhdGlzdGljcycsXG4gIGZpbGViZWF0QXBwOiAnYXBwX2ZpbGViZWF0JyxcbiAgZmlsdGVyOiAnZmlsdGVyJyxcbiAgZmlsdGVyRXhjbHVkZTogJ2ZpbHRlckV4Y2x1ZGUnLFxuICBmaWx0ZXJJZ25vcmU6ICdmaWx0ZXJJZ25vcmUnLFxuICBmaWx0ZXJJbmNsdWRlOiAnZmlsdGVySW5jbHVkZScsXG4gIGZpbHRlckluQ2lyY2xlOiAnZmlsdGVySW5DaXJjbGUnLFxuICBmbGFnOiAnZmxhZycsXG4gIGZsZWV0QXBwOiAnYXBwX2FnZW50JyxcbiAgZm9sZDogJ2ZvbGQnLFxuICBmb2xkZXJDaGVjazogJ2ZvbGRlcl9jaGVjaycsXG4gIGZvbGRlckNsb3NlZDogJ2ZvbGRlcl9jbG9zZWQnLFxuICBmb2xkZXJFeGNsYW1hdGlvbjogJ2ZvbGRlcl9leGNsYW1hdGlvbicsXG4gIGZvbGRlck9wZW46ICdmb2xkZXJfb3BlbicsXG4gIGZyYW1lTmV4dDogJ2ZyYW1lTmV4dCcsXG4gIGZyYW1lUHJldmlvdXM6ICdmcmFtZVByZXZpb3VzJyxcbiAgZnVsbFNjcmVlbjogJ2Z1bGxfc2NyZWVuJyxcbiAgZnVsbFNjcmVlbkV4aXQ6ICdmdWxsU2NyZWVuRXhpdCcsXG4gIGZ1bmN0aW9uOiAnZnVuY3Rpb24nLFxuICBnZWFyOiAnZ2VhcicsXG4gIGdpc0FwcDogJ2FwcF9naXMnLFxuICBnbGFzc2VzOiAnZ2xhc3NlcycsXG4gIGdsb2JlOiAnZ2xvYmUnLFxuICBncmFiOiAnZ3JhYicsXG4gIGdyYWJIb3Jpem9udGFsOiAnZ3JhYl9ob3Jpem9udGFsJyxcbiAgZ3JhYk9tbmlkaXJlY3Rpb25hbDogJ2dyYWJPbW5pZGlyZWN0aW9uYWwnLFxuICBncmFkaWVudDogJ2dyYWRpZW50JyxcbiAgZ3JhcGhBcHA6ICdhcHBfZ3JhcGgnLFxuICBncmlkOiAnZ3JpZCcsXG4gIGdyb2tBcHA6ICdhcHBfZ3JvaycsXG4gIGhlYXJ0OiAnaGVhcnQnLFxuICBoZWFydGJlYXRBcHA6ICdhcHBfaGVhcnRiZWF0JyxcbiAgaGVhdG1hcDogJ2hlYXRtYXAnLFxuICBoZWxwOiAnaGVscCcsXG4gIGhvbWU6ICdob21lJyxcbiAgaUluQ2lyY2xlOiAnaUluQ2lyY2xlJyxcbiAgaW1hZ2U6ICdpbWFnZScsXG4gIGltcG9ydEFjdGlvbjogJ2ltcG9ydCcsXG4gIGluZGV4OiAnaW5kZXgnLFxuICBpbmRleENsb3NlOiAnaW5kZXhfY2xvc2UnLFxuICBpbmRleEVkaXQ6ICdpbmRleF9lZGl0JyxcbiAgaW5kZXhGbHVzaDogJ2luZGV4X2ZsdXNoJyxcbiAgaW5kZXhNYW5hZ2VtZW50QXBwOiAnYXBwX2luZGV4X21hbmFnZW1lbnQnLFxuICBpbmRleE1hcHBpbmc6ICdpbmRleF9tYXBwaW5nJyxcbiAgaW5kZXhPcGVuOiAnaW5kZXhfb3BlbicsXG4gIGluZGV4UGF0dGVybkFwcDogJ2FwcF9pbmRleF9wYXR0ZXJuJyxcbiAgaW5kZXhSb2xsdXBBcHA6ICdhcHBfaW5kZXhfcm9sbHVwJyxcbiAgaW5kZXhSdW50aW1lOiAnaW5kZXhfcnVudGltZScsXG4gIGluZGV4U2V0dGluZ3M6ICdpbmRleF9zZXR0aW5ncycsXG4gIGluZGV4VGVtcG9yYXJ5OiAnaW5kZXhUZW1wb3JhcnknLFxuICBpbmZpbml0eTogJ2luZmluaXR5JyxcbiAgaW5wdXRPdXRwdXQ6ICdpbnB1dE91dHB1dCcsXG4gIGluc3BlY3Q6ICdpbnNwZWN0JyxcbiAgaW52ZXJ0OiAnaW52ZXJ0JyxcbiAgaXA6ICdpcCcsXG4gIGtleTogJ2tleScsXG4gIGtleWJvYXJkOiAna2V5Ym9hcmQnLFxuICBrcWxGaWVsZDogJ2txbF9maWVsZCcsXG4gIGtxbEZ1bmN0aW9uOiAna3FsX2Z1bmN0aW9uJyxcbiAga3FsT3BlcmFuZDogJ2txbF9vcGVyYW5kJyxcbiAga3FsU2VsZWN0b3I6ICdrcWxfc2VsZWN0b3InLFxuICBrcWxWYWx1ZTogJ2txbF92YWx1ZScsXG4gIGt1YmVybmV0ZXNOb2RlOiAna3ViZXJuZXRlc05vZGUnLFxuICBrdWJlcm5ldGVzUG9kOiAna3ViZXJuZXRlc1BvZCcsXG4gIGxhdW5jaDogJ2xhdW5jaCcsXG4gIGxheWVyczogJ2xheWVycycsXG4gIGxlbnNBcHA6ICdhcHBfbGVucycsXG4gIGxldHRlcmluZzogJ2xldHRlcmluZycsXG4gIGxpbmVEYXNoZWQ6ICdsaW5lRGFzaGVkJyxcbiAgbGluZURvdHRlZDogJ2xpbmVEb3R0ZWQnLFxuICBsaW5lU29saWQ6ICdsaW5lU29saWQnLFxuICBsaW5rOiAnbGluaycsXG4gIGxpc3Q6ICdsaXN0JyxcbiAgbGlzdEFkZDogJ2xpc3RfYWRkJyxcbiAgbG9jazogJ2xvY2snLFxuICBsb2NrT3BlbjogJ2xvY2tPcGVuJyxcbiAgbG9nUGF0dGVybkFuYWx5c2lzOiAnbG9nX3BhdHRlcm5fYW5hbHlzaXMnLFxuICBsb2dSYXRlQW5hbHlzaXM6ICdsb2dfcmF0ZV9hbmFseXNpcycsXG4gIGxvZ29BV1M6ICdsb2dvX2F3cycsXG4gIGxvZ29BV1NNb25vOiAnbG9nb19hd3NfbW9ubycsXG4gIGxvZ29BZXJvc3Bpa2U6ICdsb2dvX2Flcm9zcGlrZScsXG4gIGxvZ29BcGFjaGU6ICdsb2dvX2FwYWNoZScsXG4gIGxvZ29BcHBTZWFyY2g6ICdsb2dvX2FwcF9zZWFyY2gnLFxuICBsb2dvQXp1cmU6ICdsb2dvX2F6dXJlJyxcbiAgbG9nb0F6dXJlTW9ubzogJ2xvZ29fYXp1cmVfbW9ubycsXG4gIGxvZ29CZWF0czogJ2xvZ29fYmVhdHMnLFxuICBsb2dvQnVzaW5lc3NBbmFseXRpY3M6ICdsb2dvX2J1c2luZXNzX2FuYWx5dGljcycsXG4gIGxvZ29DZXBoOiAnbG9nb19jZXBoJyxcbiAgbG9nb0Nsb3VkOiAnbG9nb19jbG91ZCcsXG4gIGxvZ29DbG91ZEVudGVycHJpc2U6ICdsb2dvX2Nsb3VkX2VjZScsXG4gIGxvZ29Db2RlOiAnbG9nb19jb2RlJyxcbiAgbG9nb0NvZGVzYW5kYm94OiAnbG9nb19jb2Rlc2FuZGJveCcsXG4gIGxvZ29Db3VjaGJhc2U6ICdsb2dvX2NvdWNoYmFzZScsXG4gIGxvZ29Eb2NrZXI6ICdsb2dvX2RvY2tlcicsXG4gIGxvZ29Ecm9wd2l6YXJkOiAnbG9nb19kcm9wd2l6YXJkJyxcbiAgbG9nb0VsYXN0aWM6ICdsb2dvX2VsYXN0aWMnLFxuICBsb2dvRWxhc3RpY1N0YWNrOiAnbG9nb19lbGFzdGljX3N0YWNrJyxcbiAgbG9nb0VsYXN0aWNzZWFyY2g6ICdsb2dvX2VsYXN0aWNzZWFyY2gnLFxuICBsb2dvRW50ZXJwcmlzZVNlYXJjaDogJ2xvZ29fZW50ZXJwcmlzZV9zZWFyY2gnLFxuICBsb2dvRXRjZDogJ2xvZ29fZXRjZCcsXG4gIGxvZ29HQ1A6ICdsb2dvX2djcCcsXG4gIGxvZ29HQ1BNb25vOiAnbG9nb19nY3BfbW9ubycsXG4gIGxvZ29HaXRodWI6ICdsb2dvX2dpdGh1YicsXG4gIGxvZ29HbWFpbDogJ2xvZ29fZ21haWwnLFxuICBsb2dvR29sYW5nOiAnbG9nb19nb2xhbmcnLFxuICBsb2dvR29vZ2xlRzogJ2xvZ29fZ29vZ2xlX2cnLFxuICBsb2dvSEFwcm94eTogJ2xvZ29faGFwcm94eScsXG4gIGxvZ29JQk06ICdsb2dvX2libScsXG4gIGxvZ29JQk1Nb25vOiAnbG9nb19pYm1fbW9ubycsXG4gIGxvZ29LYWZrYTogJ2xvZ29fa2Fma2EnLFxuICBsb2dvS2liYW5hOiAnbG9nb19raWJhbmEnLFxuICBsb2dvS3ViZXJuZXRlczogJ2xvZ29fa3ViZXJuZXRlcycsXG4gIGxvZ29Mb2dnaW5nOiAnbG9nb19sb2dnaW5nJyxcbiAgbG9nb0xvZ3N0YXNoOiAnbG9nb19sb2dzdGFzaCcsXG4gIGxvZ29NYXBzOiAnbG9nb19tYXBzJyxcbiAgbG9nb01lbWNhY2hlZDogJ2xvZ29fbWVtY2FjaGVkJyxcbiAgbG9nb01ldHJpY3M6ICdsb2dvX21ldHJpY3MnLFxuICBsb2dvTW9uZ29kYjogJ2xvZ29fbW9uZ29kYicsXG4gIGxvZ29NeVNRTDogJ2xvZ29fbXlzcWwnLFxuICBsb2dvTmdpbng6ICdsb2dvX25naW54JyxcbiAgbG9nb09ic2VydmFiaWxpdHk6ICdsb2dvX29ic2VydmFiaWxpdHknLFxuICBsb2dvT3NxdWVyeTogJ2xvZ29fb3NxdWVyeScsXG4gIGxvZ29QaHA6ICdsb2dvX3BocCcsXG4gIGxvZ29Qb3N0Z3JlczogJ2xvZ29fcG9zdGdyZXMnLFxuICBsb2dvUHJvbWV0aGV1czogJ2xvZ29fcHJvbWV0aGV1cycsXG4gIGxvZ29SYWJiaXRtcTogJ2xvZ29fcmFiYml0bXEnLFxuICBsb2dvUmVkaXM6ICdsb2dvX3JlZGlzJyxcbiAgbG9nb1NlY3VyaXR5OiAnbG9nb19zZWN1cml0eScsXG4gIGxvZ29TaXRlU2VhcmNoOiAnbG9nb19zaXRlX3NlYXJjaCcsXG4gIGxvZ29Ta2V0Y2g6ICdsb2dvX3NrZXRjaCcsXG4gIGxvZ29TbGFjazogJ2xvZ29fc2xhY2snLFxuICBsb2dvVXB0aW1lOiAnbG9nb191cHRpbWUnLFxuICBsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnQ6ICdsb2dvX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudCcsXG4gIGxvZ29XZWJob29rOiAnbG9nb193ZWJob29rJyxcbiAgbG9nb1dpbmRvd3M6ICdsb2dvX3dpbmRvd3MnLFxuICBsb2dvV29ya3BsYWNlU2VhcmNoOiAnbG9nb193b3JrcGxhY2Vfc2VhcmNoJyxcbiAgbG9nc0FwcDogJ2FwcF9sb2dzJyxcbiAgbG9nc3Rhc2hGaWx0ZXI6ICdsb2dzdGFzaF9maWx0ZXInLFxuICBsb2dzdGFzaElmOiAnbG9nc3Rhc2hfaWYnLFxuICBsb2dzdGFzaElucHV0OiAnbG9nc3Rhc2hfaW5wdXQnLFxuICBsb2dzdGFzaE91dHB1dDogJ2xvZ3N0YXNoX291dHB1dCcsXG4gIGxvZ3N0YXNoUXVldWU6ICdsb2dzdGFzaF9xdWV1ZScsXG4gIG1hY2hpbmVMZWFybmluZ0FwcDogJ2FwcF9tbCcsXG4gIG1hZ25ldDogJ21hZ25ldCcsXG4gIG1hZ25pZnlXaXRoRXhjbGFtYXRpb246ICdtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uJyxcbiAgbWFnbmlmeVdpdGhNaW51czogJ21hZ25pZnlXaXRoTWludXMnLFxuICBtYWduaWZ5V2l0aFBsdXM6ICdtYWduaWZ5V2l0aFBsdXMnLFxuICBtYW5hZ2VtZW50QXBwOiAnYXBwX21hbmFnZW1lbnQnLFxuICBtYXBNYXJrZXI6ICdtYXBfbWFya2VyJyxcbiAgbWVtb3J5OiAnbWVtb3J5JyxcbiAgbWVudTogJ21lbnUnLFxuICBtZW51RG93bjogJ21lbnVEb3duJyxcbiAgbWVudUxlZnQ6ICdtZW51TGVmdCcsXG4gIG1lbnVSaWdodDogJ21lbnVSaWdodCcsXG4gIG1lbnVVcDogJ21lbnVVcCcsXG4gIG1lcmdlOiAnbWVyZ2UnLFxuICBtZXRyaWNiZWF0QXBwOiAnYXBwX21ldHJpY2JlYXQnLFxuICBtZXRyaWNzQXBwOiAnYXBwX21ldHJpY3MnLFxuICBtaW5pbWl6ZTogJ21pbmltaXplJyxcbiAgbWludXM6ICdtaW51cycsXG4gIG1pbnVzSW5DaXJjbGU6ICdtaW51c19pbl9jaXJjbGUnLFxuICBtaW51c0luQ2lyY2xlRmlsbGVkOiAnbWludXNfaW5fY2lyY2xlX2ZpbGxlZCcsXG4gIG1pbnVzSW5TcXVhcmU6ICdtaW51c19pbl9zcXVhcmUnLFxuICBtb2JpbGU6ICdtb2JpbGUnLFxuICBtb25pdG9yaW5nQXBwOiAnYXBwX21vbml0b3JpbmcnLFxuICBtb29uOiAnbW9vbicsXG4gIG1vdmU6ICdtb3ZlJyxcbiAgbmFtZXNwYWNlOiAnbmFtZXNwYWNlJyxcbiAgbmVzdGVkOiAnbmVzdGVkJyxcbiAgbmV3Q2hhdDogJ25ld19jaGF0JyxcbiAgbm9kZTogJ25vZGUnLFxuICBub3RlYm9va0FwcDogJ2FwcF9ub3RlYm9vaycsXG4gIG51bWJlcjogJ251bWJlcicsXG4gIG9mZmxpbmU6ICdvZmZsaW5lJyxcbiAgb25saW5lOiAnb25saW5lJyxcbiAgb3V0bGllckRldGVjdGlvbkpvYjogJ21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYicsXG4gIHBhY2thZ2U6ICdwYWNrYWdlJyxcbiAgcGFja2V0YmVhdEFwcDogJ2FwcF9wYWNrZXRiZWF0JyxcbiAgcGFnZVNlbGVjdDogJ3BhZ2VTZWxlY3QnLFxuICBwYWdlc1NlbGVjdDogJ3BhZ2VzU2VsZWN0JyxcbiAgcGFsZXR0ZTogJ3BhbGV0dGUnLFxuICBwYXBlckNsaXA6ICdwYXBlcl9jbGlwJyxcbiAgcGFydGlhbDogJ3BhcnRpYWwnLFxuICBwYXVzZTogJ3BhdXNlJyxcbiAgcGF5bWVudDogJ3BheW1lbnQnLFxuICBwZW5jaWw6ICdwZW5jaWwnLFxuICBwZXJjZW50OiAncGVyY2VudCcsXG4gIHBpbjogJ3BpbicsXG4gIHBpbkZpbGxlZDogJ3Bpbl9maWxsZWQnLFxuICBwaXBlQnJlYWtzOiAncGlwZUJyZWFrcycsXG4gIHBpcGVsaW5lQXBwOiAnYXBwX3BpcGVsaW5lJyxcbiAgcGlwZU5vQnJlYWtzOiAncGlwZU5vQnJlYWtzJyxcbiAgcGl2b3Q6ICdwaXZvdCcsXG4gIHBsYXk6ICdwbGF5JyxcbiAgcGxheUZpbGxlZDogJ3BsYXlGaWxsZWQnLFxuICBwbHVzOiAncGx1cycsXG4gIHBsdXNJbkNpcmNsZTogJ3BsdXNfaW5fY2lyY2xlJyxcbiAgcGx1c0luQ2lyY2xlRmlsbGVkOiAncGx1c19pbl9jaXJjbGVfZmlsbGVkJyxcbiAgcGx1c0luU3F1YXJlOiAncGx1c19pbl9zcXVhcmUnLFxuICBwb3BvdXQ6ICdwb3BvdXQnLFxuICBwdXNoOiAncHVzaCcsXG4gIHF1ZXN0aW9uSW5DaXJjbGU6ICdxdWVzdGlvbl9pbl9jaXJjbGUnLFxuICBxdW90ZTogJ3F1b3RlJyxcbiAgcmVjZW50bHlWaWV3ZWRBcHA6ICdhcHBfcmVjZW50bHlfdmlld2VkJyxcbiAgcmVmcmVzaDogJ3JlZnJlc2gnLFxuICByZWdyZXNzaW9uSm9iOiAnbWxfcmVncmVzc2lvbl9qb2InLFxuICByZXBvcnRlcjogJ3JlcG9ydGVyJyxcbiAgcmVwb3J0aW5nQXBwOiAnYXBwX3JlcG9ydGluZycsXG4gIHJldHVybktleTogJ3JldHVybl9rZXknLFxuICBzYXZlOiAnc2F2ZScsXG4gIHNhdmVkT2JqZWN0c0FwcDogJ2FwcF9zYXZlZF9vYmplY3RzJyxcbiAgc2NhbGU6ICdzY2FsZScsXG4gIHNlYXJjaDogJ3NlYXJjaCcsXG4gIHNlYXJjaFByb2ZpbGVyQXBwOiAnYXBwX3NlYXJjaF9wcm9maWxlcicsXG4gIHNlY3VyaXR5QW5hbHl0aWNzQXBwOiAnYXBwX3NlY3VyaXR5X2FuYWx5dGljcycsXG4gIHNlY3VyaXR5QXBwOiAnYXBwX3NlY3VyaXR5JyxcbiAgc2VjdXJpdHlTaWduYWw6ICdzZWN1cml0eVNpZ25hbCcsXG4gIHNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQ6ICdzZWN1cml0eVNpZ25hbERldGVjdGVkJyxcbiAgc2VjdXJpdHlTaWduYWxSZXNvbHZlZDogJ3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQnLFxuICBzZXNzaW9uVmlld2VyOiAnc2Vzc2lvblZpZXdlcicsXG4gIHNoYXJkOiAnc2hhcmQnLFxuICBzaGFyZTogJ3NoYXJlJyxcbiAgc2luZ2xlTWV0cmljVmlld2VyOiAnc2luZ2xlX21ldHJpY192aWV3ZXInLFxuICBzbm93Zmxha2U6ICdzbm93Zmxha2UnLFxuICBzb3J0QXNjZW5kaW5nOiAnc29ydEFzY2VuZGluZycsXG4gIHNvcnREZXNjZW5kaW5nOiAnc29ydERlc2NlbmRpbmcnLFxuICBzb3J0RG93bjogJ3NvcnRfZG93bicsXG4gIHNvcnRMZWZ0OiAnc29ydExlZnQnLFxuICBzb3J0UmlnaHQ6ICdzb3J0UmlnaHQnLFxuICBzb3J0VXA6ICdzb3J0X3VwJyxcbiAgc29ydGFibGU6ICdzb3J0YWJsZScsXG4gIHNwYWNlczogJ3NwYWNlcycsXG4gIHNwYWNlc0FwcDogJ2FwcF9zcGFjZXMnLFxuICBzcGFya2xlczogJ3NwYXJrbGVzJyxcbiAgc3FsQXBwOiAnYXBwX3NxbCcsXG4gIHN0YXJFbXB0eTogJ3N0YXJfZW1wdHknLFxuICBzdGFyRW1wdHlTcGFjZTogJ3N0YXJfZW1wdHlfc3BhY2UnLFxuICBzdGFyRmlsbGVkOiAnc3Rhcl9maWxsZWQnLFxuICBzdGFyRmlsbGVkU3BhY2U6ICdzdGFyX2ZpbGxlZF9zcGFjZScsXG4gIHN0YXJNaW51c0VtcHR5OiAnc3Rhcl9taW51c19lbXB0eScsXG4gIHN0YXJNaW51c0ZpbGxlZDogJ3N0YXJfbWludXNfZmlsbGVkJyxcbiAgc3RhclBsdXNFbXB0eTogJ3N0YXJQbHVzRW1wdHknLFxuICBzdGFyUGx1c0ZpbGxlZDogJ3N0YXJQbHVzRmlsbGVkJyxcbiAgc3RhdHM6ICdzdGF0cycsXG4gIHN0b3A6ICdzdG9wJyxcbiAgc3RvcEZpbGxlZDogJ3N0b3BfZmlsbGVkJyxcbiAgc3RvcFNsYXNoOiAnc3RvcF9zbGFzaCcsXG4gIHN0b3JhZ2U6ICdzdG9yYWdlJyxcbiAgc3RyaW5nOiAnc3RyaW5nJyxcbiAgc3VibW9kdWxlOiAnc3VibW9kdWxlJyxcbiAgc3VuOiAnc3VuJyxcbiAgc3dhdGNoSW5wdXQ6ICdzd2F0Y2hfaW5wdXQnLFxuICAvLyBVbmRvY3VtZW50ZWQgb24gcHVycG9zZS4gSGFzIGFuIGV4dHJhIHN0cm9rZSBmb3IgRXVpQ29sb3JQaWNrZXJcbiAgc3ltbGluazogJ3N5bWxpbmsnLFxuICB0YWJsZURlbnNpdHlDb21wYWN0OiAndGFibGVfZGVuc2l0eV9jb21wYWN0JyxcbiAgdGFibGVEZW5zaXR5RXhwYW5kZWQ6ICd0YWJsZV9kZW5zaXR5X2V4cGFuZGVkJyxcbiAgdGFibGVEZW5zaXR5Tm9ybWFsOiAndGFibGVfZGVuc2l0eV9ub3JtYWwnLFxuICB0YWJsZU9mQ29udGVudHM6ICd0YWJsZU9mQ29udGVudHMnLFxuICB0YWc6ICd0YWcnLFxuICB0ZWFyOiAndGVhcicsXG4gIHRlbXBlcmF0dXJlOiAndGVtcGVyYXR1cmUnLFxuICB0aW1lbGluZTogJ3RpbWVsaW5lJyxcbiAgdGltZWxpbmVXaXRoQXJyb3c6ICd0aW1lbGluZVdpdGhBcnJvdycsXG4gIHRpbWVsaW9uQXBwOiAnYXBwX3RpbWVsaW9uJyxcbiAgdGltZVJlZnJlc2g6ICd0aW1lUmVmcmVzaCcsXG4gIHRpbWVzbGlkZXI6ICd0aW1lc2xpZGVyJyxcbiAgdHJhaW5pbmc6ICd0cmFpbmluZycsXG4gIHRyYW5zaXRpb25MZWZ0SW46ICd0cmFuc2l0aW9uTGVmdEluJyxcbiAgdHJhbnNpdGlvbkxlZnRPdXQ6ICd0cmFuc2l0aW9uTGVmdE91dCcsXG4gIHRyYW5zaXRpb25Ub3BJbjogJ3RyYW5zaXRpb25Ub3BJbicsXG4gIHRyYW5zaXRpb25Ub3BPdXQ6ICd0cmFuc2l0aW9uVG9wT3V0JyxcbiAgdHJhc2g6ICd0cmFzaCcsXG4gIHVuZm9sZDogJ3VuZm9sZCcsXG4gIHVubGluazogJ3VubGluaycsXG4gIHVwZ3JhZGVBc3Npc3RhbnRBcHA6ICdhcHBfdXBncmFkZV9hc3Npc3RhbnQnLFxuICB1cHRpbWVBcHA6ICdhcHBfdXB0aW1lJyxcbiAgdXNlcjogJ3VzZXInLFxuICB1c2VyQXZhdGFyOiAndXNlckF2YXRhcicsXG4gIHVzZXJzOiAndXNlcnMnLFxuICB1c2Vyc1JvbGVzQXBwOiAnYXBwX3VzZXJzX3JvbGVzJyxcbiAgdmVjdG9yOiAndmVjdG9yJyxcbiAgdmlkZW9QbGF5ZXI6ICd2aWRlb1BsYXllcicsXG4gIHZpc0FyZWE6ICd2aXNfYXJlYScsXG4gIHZpc0FyZWFTdGFja2VkOiAndmlzX2FyZWFfc3RhY2tlZCcsXG4gIHZpc0Jhckhvcml6b250YWw6ICd2aXNfYmFyX2hvcml6b250YWwnLFxuICB2aXNCYXJIb3Jpem9udGFsU3RhY2tlZDogJ3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJyxcbiAgdmlzQmFyVmVydGljYWw6ICd2aXNfYmFyX3ZlcnRpY2FsJyxcbiAgdmlzQmFyVmVydGljYWxTdGFja2VkOiAndmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkJyxcbiAgdmlzR2F1Z2U6ICd2aXNfZ2F1Z2UnLFxuICB2aXNHb2FsOiAndmlzX2dvYWwnLFxuICB2aXNMaW5lOiAndmlzX2xpbmUnLFxuICB2aXNNYXBDb29yZGluYXRlOiAndmlzX21hcF9jb29yZGluYXRlJyxcbiAgdmlzTWFwUmVnaW9uOiAndmlzX21hcF9yZWdpb24nLFxuICB2aXNNZXRyaWM6ICd2aXNfbWV0cmljJyxcbiAgdmlzUGllOiAndmlzX3BpZScsXG4gIHZpc1RhYmxlOiAndmlzX3RhYmxlJyxcbiAgdmlzVGFnQ2xvdWQ6ICd2aXNfdGFnX2Nsb3VkJyxcbiAgdmlzVGV4dDogJ3Zpc190ZXh0JyxcbiAgdmlzVGltZWxpb246ICd2aXNfdGltZWxpb24nLFxuICB2aXNWZWdhOiAndmlzX3ZlZ2EnLFxuICB2aXNWaXN1YWxCdWlsZGVyOiAndmlzX3Zpc3VhbF9idWlsZGVyJyxcbiAgdmlzdWFsaXplQXBwOiAnYXBwX3Zpc3VhbGl6ZScsXG4gIHZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwOiAnYXBwX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudCcsXG4gIHdhcm5pbmc6ICd3YXJuaW5nJyxcbiAgd2FybmluZ0ZpbGxlZDogJ3dhcm5pbmdGaWxsZWQnLFxuICBhbGVydDogJ3dhcm5pbmcnLFxuICAvLyBOT1RFOiBUaGlzIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcyBmb3IgYHdhcm5pbmdgLCBhZGRlZCBmb3IgbGVnYWN5IGNvbXBhdGFiaWxpdHkgd2l0aCBFbGFzdGljIENoYXJ0c1xuICB3YXRjaGVzQXBwOiAnYXBwX3dhdGNoZXMnLFxuICB3b3JkV3JhcDogJ3dvcmRXcmFwJyxcbiAgd29yZFdyYXBEaXNhYmxlZDogJ3dvcmRXcmFwRGlzYWJsZWQnLFxuICB3b3JrcGxhY2VTZWFyY2hBcHA6ICdhcHBfd29ya3BsYWNlX3NlYXJjaCcsXG4gIHdyZW5jaDogJ3dyZW5jaCcsXG4gIC8vIFRva2VuIEljb24gSW1wb3J0c1xuICB0b2tlbkFsaWFzOiAndG9rZW5BbGlhcycsXG4gIHRva2VuQW5ub3RhdGlvbjogJ3Rva2VuQW5ub3RhdGlvbicsXG4gIHRva2VuQXJyYXk6ICd0b2tlbkFycmF5JyxcbiAgdG9rZW5CaW5hcnk6ICd0b2tlbkJpbmFyeScsXG4gIHRva2VuQm9vbGVhbjogJ3Rva2VuQm9vbGVhbicsXG4gIHRva2VuQ2xhc3M6ICd0b2tlbkNsYXNzJyxcbiAgdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyOiAndG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyJyxcbiAgdG9rZW5Db25zdGFudDogJ3Rva2VuQ29uc3RhbnQnLFxuICB0b2tlbkRhdGU6ICd0b2tlbkRhdGUnLFxuICB0b2tlbkRpbWVuc2lvbjogJ3Rva2VuRGltZW5zaW9uJyxcbiAgdG9rZW5FbGVtZW50OiAndG9rZW5FbGVtZW50JyxcbiAgdG9rZW5FbnVtOiAndG9rZW5FbnVtJyxcbiAgdG9rZW5FbnVtTWVtYmVyOiAndG9rZW5FbnVtTWVtYmVyJyxcbiAgdG9rZW5FdmVudDogJ3Rva2VuRXZlbnQnLFxuICB0b2tlbkV4Y2VwdGlvbjogJ3Rva2VuRXhjZXB0aW9uJyxcbiAgdG9rZW5GaWVsZDogJ3Rva2VuRmllbGQnLFxuICB0b2tlbkZpbGU6ICd0b2tlbkZpbGUnLFxuICB0b2tlbkZsYXR0ZW5lZDogJ3Rva2VuRmxhdHRlbmVkJyxcbiAgdG9rZW5GdW5jdGlvbjogJ3Rva2VuRnVuY3Rpb24nLFxuICB0b2tlbkdlbzogJ3Rva2VuR2VvJyxcbiAgdG9rZW5IaXN0b2dyYW06ICd0b2tlbkhpc3RvZ3JhbScsXG4gIHRva2VuSW50ZXJmYWNlOiAndG9rZW5JbnRlcmZhY2UnLFxuICB0b2tlbklQOiAndG9rZW5JUCcsXG4gIHRva2VuSm9pbjogJ3Rva2VuSm9pbicsXG4gIHRva2VuS2V5OiAndG9rZW5LZXknLFxuICB0b2tlbktleXdvcmQ6ICd0b2tlbktleXdvcmQnLFxuICB0b2tlbk1ldGhvZDogJ3Rva2VuTWV0aG9kJyxcbiAgdG9rZW5NZXRyaWNDb3VudGVyOiAndG9rZW5NZXRyaWNDb3VudGVyJyxcbiAgdG9rZW5NZXRyaWNHYXVnZTogJ3Rva2VuTWV0cmljR2F1Z2UnLFxuICB0b2tlbk1vZHVsZTogJ3Rva2VuTW9kdWxlJyxcbiAgdG9rZW5OYW1lc3BhY2U6ICd0b2tlbk5hbWVzcGFjZScsXG4gIHRva2VuTmVzdGVkOiAndG9rZW5OZXN0ZWQnLFxuICB0b2tlbk51bGw6ICd0b2tlbk51bGwnLFxuICB0b2tlbk51bWJlcjogJ3Rva2VuTnVtYmVyJyxcbiAgdG9rZW5PYmplY3Q6ICd0b2tlbk9iamVjdCcsXG4gIHRva2VuT3BlcmF0b3I6ICd0b2tlbk9wZXJhdG9yJyxcbiAgdG9rZW5QYWNrYWdlOiAndG9rZW5QYWNrYWdlJyxcbiAgdG9rZW5QYXJhbWV0ZXI6ICd0b2tlblBhcmFtZXRlcicsXG4gIHRva2VuUGVyY29sYXRvcjogJ3Rva2VuUGVyY29sYXRvcicsXG4gIHRva2VuUHJvcGVydHk6ICd0b2tlblByb3BlcnR5JyxcbiAgdG9rZW5SYW5nZTogJ3Rva2VuUmFuZ2UnLFxuICB0b2tlblJhbmtGZWF0dXJlOiAndG9rZW5SYW5rRmVhdHVyZScsXG4gIHRva2VuUmFua0ZlYXR1cmVzOiAndG9rZW5SYW5rRmVhdHVyZXMnLFxuICB0b2tlblJlcG86ICd0b2tlblJlcG8nLFxuICB0b2tlblNlYXJjaFR5cGU6ICd0b2tlblNlYXJjaFR5cGUnLFxuICB0b2tlblNlbWFudGljVGV4dDogJ3Rva2VuU2VtYW50aWNUZXh0JyxcbiAgdG9rZW5TaGFwZTogJ3Rva2VuU2hhcGUnLFxuICB0b2tlblN0cmluZzogJ3Rva2VuU3RyaW5nJyxcbiAgdG9rZW5TdHJ1Y3Q6ICd0b2tlblN0cnVjdCcsXG4gIHRva2VuU3ltYm9sOiAndG9rZW5TeW1ib2wnLFxuICB0b2tlblRhZzogJ3Rva2VuVGFnJyxcbiAgdG9rZW5UZXh0OiAndG9rZW5UZXh0JyxcbiAgdG9rZW5Ub2tlbkNvdW50OiAndG9rZW5Ub2tlbkNvdW50JyxcbiAgdG9rZW5WYXJpYWJsZTogJ3Rva2VuVmFyaWFibGUnLFxuICB0b2tlblZlY3RvckRlbnNlOiAndG9rZW5WZWN0b3JEZW5zZScsXG4gIHRva2VuRGVuc2VWZWN0b3I6ICd0b2tlblZlY3RvckRlbnNlJyxcbiAgLy8gTk9URTogVGhpcyBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMgZm9yIGB0b2tlblZlY3RvckRlbnNlYCwgYWRkZWQgZm9yIGxlZ2FjeSBjb21wYXRhYmlsaXR5XG4gIHRva2VuVmVjdG9yU3BhcnNlOiAndG9rZW5WZWN0b3JTcGFyc2UnXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJ3JlYWN0LWRvbSc7XG52YXIgX3F1ZXVlID0gW107XG5mdW5jdGlvbiBwcm9jZXNzUXVldWUoKSB7XG4gIC8vIHRoZSBxdWV1ZWQgZnVuY3Rpb25zIHRyaWdnZXIgcmVhY3Qgc2V0U3RhdGVzIHdoaWNoLCBpZiB1bmJhdGNoZWQsXG4gIC8vIGVhY2ggY2F1c2UgYSBmdWxsIHVwZGF0ZS0+cmVuZGVyLT5kb20gcGFzcyBfcGVyIGZ1bmN0aW9uX1xuICAvLyBpbnN0ZWFkLCB0ZWxsIFJlYWN0IHRvIHdhaXQgdW50aWwgYWxsIHVwZGF0ZXMgYXJlIGZpbmlzaGVkIGJlZm9yZSByZS1yZW5kZXJpbmdcbiAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3F1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBfcXVldWVbaV0oKTtcbiAgICB9XG4gICAgX3F1ZXVlLmxlbmd0aCA9IDA7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVucXVldWVTdGF0ZUNoYW5nZShmbikge1xuICBpZiAoX3F1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHNldFRpbWVvdXQocHJvY2Vzc1F1ZXVlKTtcbiAgfVxuICBfcXVldWUucHVzaChmbik7XG59IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgQ09MT1JTID0gWydkZWZhdWx0JywgJ3ByaW1hcnknLCAnc3VjY2VzcycsICdhY2NlbnQnLCAnd2FybmluZycsICdkYW5nZXInLCAndGV4dCcsICdzdWJkdWVkJywgJ2dob3N0JywgJ2luaGVyaXQnXTtcbmV4cG9ydCBmdW5jdGlvbiBpc05hbWVkQ29sb3IobmFtZSkge1xuICByZXR1cm4gQ09MT1JTLmluY2x1ZGVzKG5hbWUpO1xufSIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0O1xuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChlLCB0KSB7IHJldHVybiB0IHx8ICh0ID0gZS5zbGljZSgwKSksIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUodCkgfSB9KSk7IH1cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcywga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbFNpemVDU1MsIGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGljb25Mb2FkaW5nT3BhY2l0eSA9IDAuMDU7XG52YXIgaWNvbkxvYWRpbmcgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgMCUge1xcbiAgICBvcGFjaXR5OiBcIiwgXCI7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG5cIl0pKSwgaWNvbkxvYWRpbmdPcGFjaXR5KTtcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIm5qZDc0OS1sb2dvRWxhc3RpY091dGxpbmVcIixcbiAgc3R5bGVzOiBcIipbZmlsbF17ZmlsbDpub25lIWltcG9ydGFudDt9Lm91dGxpbmV7ZmlsbDpjdXJyZW50Q29sb3IhaW1wb3J0YW50O307bGFiZWw6bG9nb0VsYXN0aWNPdXRsaW5lO1wiXG59IDoge1xuICBuYW1lOiBcIm5qZDc0OS1sb2dvRWxhc3RpY091dGxpbmVcIixcbiAgc3R5bGVzOiBcIipbZmlsbF17ZmlsbDpub25lIWltcG9ydGFudDt9Lm91dGxpbmV7ZmlsbDpjdXJyZW50Q29sb3IhaW1wb3J0YW50O307bGFiZWw6bG9nb0VsYXN0aWNPdXRsaW5lO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIlxufSA6IHtcbiAgbmFtZTogXCJ1YWNqYzUtaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiY29sb3I6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUljb25TdHlsZXMgPSBmdW5jdGlvbiBldWlJY29uU3R5bGVzKF9yZWYzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJY29uOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDpjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLCAwKTsuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYXJrZXN0U2hhZGUsIFwiO307bGFiZWw6ZXVpSWNvbjtcIiksXG4gICAgLy8gQ29sb3JzXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0LCBcIjs7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhbmdlclRleHQsIFwiOztsYWJlbDpkYW5nZXI7XCIpLFxuICAgIGdob3N0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7KltmaWxsXSwuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOmdob3N0O1wiKSxcbiAgICBwcmltYXJ5OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7O2xhYmVsOnByaW1hcnk7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1Y2Nlc3NUZXh0LCBcIjs7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQsIFwiOztsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICB0ZXh0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50aXRsZSwgXCI7KltmaWxsXSwuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOnRleHQ7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLndhcm5pbmdUZXh0LCBcIjs7bGFiZWw6d2FybmluZztcIiksXG4gICAgaW5oZXJpdDogX3JlZjIsXG4gICAgZGVmYXVsdDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpkZWZhdWx0O1wiKSxcbiAgICBjdXN0b21Db2xvcjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpjdXN0b21Db2xvcjtcIiksXG4gICAgbG9nb0VsYXN0aWNPdXRsaW5lOiBfcmVmLFxuICAgIC8vIFNpemVzXG4gICAgb3JpZ2luYWw6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6b3JpZ2luYWw7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1MoZXVpVGhlbWUuc2l6ZS5tKSwgXCI7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhldWlUaGVtZS5zaXplLmJhc2UpLCBcIjtsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGV1aVRoZW1lLnNpemUubCksIFwiO2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGV1aVRoZW1lLnNpemUueGwpLCBcIjtsYWJlbDp4bDtcIiksXG4gICAgeHhsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGV1aVRoZW1lLnNpemUueHhsKSwgXCI7bGFiZWw6eHhsO1wiKSxcbiAgICAvLyBWYXJpYW50c1xuICAgIC8vIEFwcCBpY29ucyBhcmUgdHdvLXRvbmVkLiBUaGlzIHByb3ZpZGVzIHRoZSBiYXNlIGNvbG9yLlxuICAgIGFwcDogLyojX19QVVJFX18qL2NzcyhcImZpbGw6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjsuZXVpSWNvbl9fZmlsbFNlY29uZGFyeXtmaWxsOlwiLCBldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQsIFwiO307bGFiZWw6YXBwO1wiKSxcbiAgICBsb2dvOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmxvZ287XCIpLFxuICAgIC8vIExvYWRpbmcgc3RhdGVzXG4gICAgaXNMb2FkaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwib3BhY2l0eTpcIiwgaWNvbkxvYWRpbmdPcGFjaXR5LCBcIjtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcjtib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLCBcIjs7bGFiZWw6aXNMb2FkaW5nO1wiKSxcbiAgICBpc0xvYWRlZDogLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInthbmltYXRpb246XCIsIGljb25Mb2FkaW5nLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLm5vcm1hbCwgXCIgZWFzZS1pbiAwcyAxIGZvcndhcmRzO307bGFiZWw6aXNMb2FkZWQ7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aUkxOG5Db25zdW1lciB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgSTE4bkNvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L2NvbnRleHQnO1xuaW1wb3J0IHsgcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW4gfSBmcm9tICcuL2kxOG5fdXRpbCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZnVuY3Rpb24gZXJyb3JPbk1pc3NpbmdWYWx1ZXModG9rZW4pIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiSTE4biBtYXBwaW5nIGZvciB0b2tlbiBcXFwiXCIuY29uY2F0KHRva2VuLCBcIlxcXCIgaXMgYSBmb3JtYXR0aW5nIGZ1bmN0aW9uIGJ1dCBubyB2YWx1ZXMgd2VyZSBwcm92aWRlZC5cIikpO1xufVxuZnVuY3Rpb24gbG9va3VwVG9rZW4ob3B0aW9ucykge1xuICB2YXIgdG9rZW4gPSBvcHRpb25zLnRva2VuLFxuICAgIGkxOG5NYXBwaW5nID0gb3B0aW9ucy5pMThuTWFwcGluZyxcbiAgICB2YWx1ZURlZmF1bHQgPSBvcHRpb25zLnZhbHVlRGVmYXVsdCxcbiAgICBpMThuTWFwcGluZ0Z1bmMgPSBvcHRpb25zLmkxOG5NYXBwaW5nRnVuYyxcbiAgICB2YWx1ZXMgPSBvcHRpb25zLnZhbHVlcyxcbiAgICByZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgdmFyIHJlbmRlcmFibGUgPSBpMThuTWFwcGluZyAmJiBpMThuTWFwcGluZ1t0b2tlbl0gfHwgdmFsdWVEZWZhdWx0O1xuICBpZiAodHlwZW9mIHJlbmRlcmFibGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAodmFsdWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBlcnJvck9uTWlzc2luZ1ZhbHVlcyh0b2tlbik7XG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmUgVHlwZVNjcmlwdCBjb21wbGFpbnMgdGhhdCBgREVGQVVMVGAgZG9lc24ndCBoYXZlIGEgY2FsbCBzaWduYXR1cmUgYnV0IHdlIHZlcmlmaWVkIGByZW5kZXJhYmxlYCBpcyBhIGZ1bmN0aW9uXG4gICAgdmFyIHJlbmRlcmVkID0gcmVuZGVyYWJsZSh2YWx1ZXMpO1xuICAgIHJldHVybiBpMThuTWFwcGluZ0Z1bmMgJiYgdHlwZW9mIHJlbmRlcmVkID09PSAnc3RyaW5nJyA/IGkxOG5NYXBwaW5nRnVuYyhyZW5kZXJlZCkgOiByZW5kZXJlZDtcbiAgfSBlbHNlIGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVuZGVyYWJsZSAhPT0gJ3N0cmluZycpIHtcbiAgICBpZiAoaTE4bk1hcHBpbmdGdW5jICYmIHR5cGVvZiB2YWx1ZURlZmF1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZW5kZXJhYmxlID0gaTE4bk1hcHBpbmdGdW5jKHZhbHVlRGVmYXVsdCk7XG4gICAgfVxuICAgIC8vIHRoZXJlJ3MgYSBob2xlIGluIHRoZSB0eXBpbmdzIGhlcmUgYXMgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgaTE4bk1hcHBpbmdGdW5jXG4gICAgLy8gcmV0dXJuZWQgdGhlIHNhbWUgdHlwZSBvZiB0aGUgZGVmYXVsdCB2YWx1ZSwgYnV0IHdlIG5lZWQgdG8ga2VlcCB0aGF0IGFzc3VtcHRpb25cbiAgICByZXR1cm4gcmVuZGVyYWJsZTtcbiAgfVxuICB2YXIgY2hpbGRyZW4gPSBwcm9jZXNzU3RyaW5nVG9DaGlsZHJlbihyZW5kZXJhYmxlLCB2YWx1ZXMsIGkxOG5NYXBwaW5nRnVuYyk7XG4gIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gbGlrZXdpc2UsIGBwcm9jZXNzU3RyaW5nVG9DaGlsZHJlbmAgcmV0dXJucyBhIHN0cmluZyBvciBSZWFjdENoaWxkW10gZGVwZW5kaW5nIG9uXG4gICAgLy8gdGhlIHR5cGUgb2YgYHZhbHVlc2AsIHNvIHdlIHdpbGwgbWFrZSB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBkZWZhdWx0IHZhbHVlIGlzIGNvcnJlY3QuXG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG4gIHZhciBDb21wb25lbnQgPSByZW5kZXIgPyByZW5kZXIoY2hpbGRyZW4pIDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBjaGlsZHJlbik7XG4gIH07XG5cbiAgLy8gc2FtZSByZWFzb25zIGFzIGFib3ZlLCB3ZSBjYW4ndCBwcm9taXNlIHRoZSB0cmFuc2Zvcm1zIG1hdGNoIHRoZSBkZWZhdWx0J3MgdHlwZVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCB2YWx1ZXMpO1xufVxuZnVuY3Rpb24gaXNJMThuVG9rZW5zU2hhcGUoeCkge1xuICByZXR1cm4geC50b2tlbnMgIT0gbnVsbDtcbn1cblxuLy8gTXVzdCB1c2UgdGhlIGdlbmVyaWNzIDxUIGV4dGVuZHMge30+XG4vLyBJZiBpbnN0ZWFkIHR5cGVkIHdpdGggUmVhY3QuRnVuY3Rpb25Db21wb25lbnQgdGhlcmUgaXNuJ3QgZmVlZGJhY2sgZ2l2ZW4gYmFjayB0byB0aGUgZGV2XG4vLyB3aGVuIHVzaW5nIGEgYHZhbHVlc2Agb2JqZWN0IHdpdGggYSByZW5kZXJlciBjYWxsYmFjay5cbnZhciBFdWlJMThuID0gZnVuY3Rpb24gRXVpSTE4bihwcm9wcykge1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChpMThuQ29uZmlnKSB7XG4gICAgdmFyIG1hcHBpbmcgPSBpMThuQ29uZmlnLm1hcHBpbmcsXG4gICAgICBtYXBwaW5nRnVuYyA9IGkxOG5Db25maWcubWFwcGluZ0Z1bmMsXG4gICAgICByZW5kZXIgPSBpMThuQ29uZmlnLnJlbmRlcjtcbiAgICBpZiAoaXNJMThuVG9rZW5zU2hhcGUocHJvcHMpKSB7XG4gICAgICByZXR1cm4gcHJvcHMuY2hpbGRyZW4ocHJvcHMudG9rZW5zLm1hcChmdW5jdGlvbiAodG9rZW4sIGlkeCkge1xuICAgICAgICByZXR1cm4gbG9va3VwVG9rZW4oe1xuICAgICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgICBpMThuTWFwcGluZzogbWFwcGluZyxcbiAgICAgICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgICAgIHZhbHVlRGVmYXVsdDogcHJvcHMuZGVmYXVsdHNbaWR4XSxcbiAgICAgICAgICB2YWx1ZXM6IHByb3BzLnZhbHVlcyxcbiAgICAgICAgICByZW5kZXI6IHJlbmRlclxuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgdmFyIHRva2VuVmFsdWUgPSBsb29rdXBUb2tlbih7XG4gICAgICB0b2tlbjogcHJvcHMudG9rZW4sXG4gICAgICBpMThuTWFwcGluZzogbWFwcGluZyxcbiAgICAgIHZhbHVlRGVmYXVsdDogcHJvcHMuZGVmYXVsdCxcbiAgICAgIGkxOG5NYXBwaW5nRnVuYzogbWFwcGluZ0Z1bmMsXG4gICAgICB2YWx1ZXM6IHByb3BzLnZhbHVlcyxcbiAgICAgIHJlbmRlcjogcmVuZGVyXG4gICAgfSk7XG4gICAgaWYgKHByb3BzLmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gcHJvcHMuY2hpbGRyZW4odG9rZW5WYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0b2tlblZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vLyBBIHNpbmdsZSBkZWZhdWx0IGNvdWxkIGJlIGEgc3RyaW5nLCByZWFjdCBjaGlsZCwgb3IgcmVuZGVyIGZ1bmN0aW9uXG5cbi8vIEFuIGFycmF5IHdpdGggbXVsdGlwbGUgZGVmYXVsdHMgY2FuIG9ubHkgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyBvciBlbGVtZW50c1xuXG5mdW5jdGlvbiB1c2VFdWlJMThuKCkge1xuICB2YXIgaTE4bkNvbmZpZyA9IHVzZUNvbnRleHQoSTE4bkNvbnRleHQpO1xuICB2YXIgbWFwcGluZyA9IGkxOG5Db25maWcubWFwcGluZyxcbiAgICBtYXBwaW5nRnVuYyA9IGkxOG5Db25maWcubWFwcGluZ0Z1bmMsXG4gICAgcmVuZGVyID0gaTE4bkNvbmZpZy5yZW5kZXI7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBwcm9wcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBwcm9wc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuICBpZiAodHlwZW9mIHByb3BzWzBdID09PSAnc3RyaW5nJykge1xuICAgIHZhciBfdG9rZW4gPSBwcm9wc1swXSxcbiAgICAgIF9kZWZhdWx0VmFsdWUgPSBwcm9wc1sxXSxcbiAgICAgIF92YWx1ZXMgPSBwcm9wc1syXTtcbiAgICByZXR1cm4gbG9va3VwVG9rZW4oe1xuICAgICAgdG9rZW46IF90b2tlbixcbiAgICAgIGkxOG5NYXBwaW5nOiBtYXBwaW5nLFxuICAgICAgdmFsdWVEZWZhdWx0OiBfZGVmYXVsdFZhbHVlLFxuICAgICAgaTE4bk1hcHBpbmdGdW5jOiBtYXBwaW5nRnVuYyxcbiAgICAgIHZhbHVlczogX3ZhbHVlcyxcbiAgICAgIHJlbmRlcjogcmVuZGVyXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9yZWYgPSBwcm9wcyxcbiAgICAgIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICBfdG9rZW5zID0gX3JlZjJbMF0sXG4gICAgICBfZGVmYXVsdFZhbHVlcyA9IF9yZWYyWzFdO1xuICAgIHJldHVybiBfdG9rZW5zLm1hcChmdW5jdGlvbiAodG9rZW4sIGlkeCkge1xuICAgICAgcmV0dXJuIGxvb2t1cFRva2VuKHtcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBpMThuTWFwcGluZzogbWFwcGluZyxcbiAgICAgICAgdmFsdWVEZWZhdWx0OiBfZGVmYXVsdFZhbHVlc1tpZHhdLFxuICAgICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgICByZW5kZXI6IHJlbmRlclxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbmV4cG9ydCB7IEV1aUkxOG4sIHVzZUV1aUkxOG4gfTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEkxOG5Db250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe30pO1xudmFyIEV1aUkxOG5Qcm92aWRlciA9IEkxOG5Db250ZXh0LlByb3ZpZGVyLFxuICBFdWlJMThuQ29uc3VtZXIgPSBJMThuQ29udGV4dC5Db25zdW1lcjtcbnZhciBFdWlDb250ZXh0ID0gZnVuY3Rpb24gRXVpQ29udGV4dChfcmVmKSB7XG4gIHZhciBfcmVmJGkxOG4gPSBfcmVmLmkxOG4sXG4gICAgaTE4biA9IF9yZWYkaTE4biA9PT0gdm9pZCAwID8ge30gOiBfcmVmJGkxOG4sXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogaTE4blxuICB9LCBjaGlsZHJlbik7XG59O1xuRXVpQ29udGV4dC5wcm9wVHlwZXMgPSB7XG4gIGkxOG46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbWFwcGluZzogUHJvcFR5cGVzLnNoYXBlKHt9KSxcbiAgICBtYXBwaW5nRnVuYzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICAgKiBTb21lIGJyb3dzZXJzJyB0cmFuc2xhdGlvbiBmZWF0dXJlcyBkb24ndCB3b3JrIHdpdGggYSByZW5kZXJlZCBgPEZyYWdtZW50PmAgY29tcG9uZW50LlxuICAgICAgICogVGhlIGByZW5kZXJgIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gcGFzcyBpbiBhbm90aGVyIGNvbXBvbmVudCBpbnN0ZWFkLCBlLmcuIGA8ZGl2PmBcbiAgICAgICAqL1xuICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9ybWF0TnVtYmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmb3JtYXREYXRlVGltZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbG9jYWxlOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXG59O1xuZXhwb3J0IHsgRXVpQ29udGV4dCwgRXVpSTE4bkNvbnN1bWVyLCBJMThuQ29udGV4dCB9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjbG9uZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0Jvb2xlYW4sIGlzU3RyaW5nLCBpc051bWJlciwgaXNVbmRlZmluZWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQm9vbGVhbih2YWx1ZSkgfHwgaXNTdHJpbmcodmFsdWUpIHx8IGlzTnVtYmVyKHZhbHVlKSB8fCBpc1VuZGVmaW5lZCh2YWx1ZSk7XG59XG5mdW5jdGlvbiBoYXNQcm9wTmFtZShjaGlsZCkge1xuICByZXR1cm4gY2hpbGQgPyBfdHlwZW9mKGNoaWxkKSA9PT0gJ29iamVjdCcgJiYgY2hpbGQuaGFzT3duUHJvcGVydHkoJ3Byb3BOYW1lJykgOiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlcyBwbGFjZWhvbGRlciB2YWx1ZXMgaW4gYGlucHV0YCB3aXRoIHRoZWlyIG1hdGNoaW5nIHZhbHVlIGluIGB2YWx1ZXNgXG4gKiBlLmcuIGlucHV0OidIZWxsbywge25hbWV9JyB3aWxsIHJlcGxhY2UgYHtuYW1lfWAgd2l0aCBgdmFsdWVzW25hbWVdYFxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge1JlbmRlcmFibGVWYWx1ZXN9IHZhbHVlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaTE4bk1hcHBpbmdGdW5jXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgUmVhY3QuUmVhY3RDaGlsZFtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW4oaW5wdXQsIHZhbHVlcywgaTE4bk1hcHBpbmdGdW5jKSB7XG4gIHZhciBjaGlsZHJlbiA9IFtdO1xuICB2YXIgY2hpbGQ7XG4gIGZ1bmN0aW9uIGFwcGVuZENoYXJUb0NoaWxkKGNoYXIpIHtcbiAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc3RhcnRpbmcgYSBuZXcgc3RyaW5nIGxpdGVyYWxcbiAgICAgIGNoaWxkID0gY2hhcjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGV4aXN0aW5nIHN0cmluZyBsaXRlcmFsXG4gICAgICBjaGlsZCA9IGNoaWxkICsgY2hhcjtcbiAgICB9IGVsc2UgaWYgKGhhc1Byb3BOYW1lKGNoaWxkKSkge1xuICAgICAgLy8gYWRkaW5nIHRvIHRoZSBwcm9wTmFtZSBvZiBhIHZhbHVlcyBsb29rdXBcbiAgICAgIGNoaWxkLnByb3BOYW1lID0gY2hpbGQucHJvcE5hbWUgKyBjaGFyO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBhcHBlbmRWYWx1ZVRvQ2hpbGRyZW4odmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoaXNFbGVtZW50KHZhbHVlKSkge1xuICAgICAgLy8gYW4gYXJyYXkgd2l0aCBhbnkgUmVhY3RFbGVtZW50cyB3aWxsIGJlIGtlcHQgYXMgYW4gYXJyYXlcbiAgICAgIC8vIHNvIHRoZXkgbmVlZCB0byBiZSBhc3NpZ25lZCBhIGtleVxuICAgICAgY2hpbGRyZW4ucHVzaCggLyojX19QVVJFX18qL2Nsb25lRWxlbWVudCh2YWx1ZSwge1xuICAgICAgICBrZXk6IGNoaWxkcmVuLmxlbmd0aFxuICAgICAgfSkpO1xuICAgIH0gZWxzZSBpZiAoaGFzUHJvcE5hbWUodmFsdWUpKSB7XG4gICAgICAvLyB0aGlzIHdvbid0IGJlIGNhbGxlZCwgcHJvcE5hbWUgY2hpbGRyZW4gYXJlIGNvbnZlcnRlZCB0byBhIFJlYWN0Q2hpbGQgYmVmb3JlIGNhbGxpbmcgdGhpc1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBldmVyeXRoaW5nIGVsc2UgY2FuIGdvIHN0cmFpZ2h0IGluXG4gICAgICBpZiAoaTE4bk1hcHBpbmdGdW5jICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IGkxOG5NYXBwaW5nRnVuYyh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBjaGlsZHJlbi5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB3ZSBkb24ndCBlbmNvdW50ZXIgYSBub24tcHJpbWl0aXZlXG4gIC8vIHRoZW4gYGNoaWxkcmVuYCBjYW4gYmUgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIGF0IHRoZSBlbmRcbiAgdmFyIGVuY291bnRlcmVkTm9uUHJpbWl0aXZlID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hhciA9IGlucHV0W2ldO1xuICAgIGlmIChjaGFyID09PSAnXFxcXCcpIHtcbiAgICAgIC8vIHBlZWsgYXQgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGtub3cgaWYgdGhpcyBpcyBhbiBlc2NhcGVcbiAgICAgIHZhciBuZXh0Q2hhciA9IGlucHV0W2kgKyAxXTtcbiAgICAgIHZhciBjaGFyVG9BZGQgPSBjaGFyOyAvLyBpZiB0aGlzIGlzbid0IGFuIGVzY2FwZSBzZXF1ZW5jZSB0aGVuIHdlIHdpbGwgYWRkIHRoZSBiYWNrc2xhc2hcblxuICAgICAgaWYgKG5leHRDaGFyID09PSAneycgfHwgbmV4dENoYXIgPT09ICd9Jykge1xuICAgICAgICAvLyBlc2NhcGluZyBhIGJyYWNlXG4gICAgICAgIGkgKz0gMTsgLy8gYWR2YW5jZSBwYXNzZWQgdGhlIGJyYWNlXG4gICAgICAgIGNoYXJUb0FkZCA9IGlucHV0W2ldO1xuICAgICAgfVxuICAgICAgYXBwZW5kQ2hhclRvQ2hpbGQoY2hhclRvQWRkKTtcbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICd7Jykge1xuICAgICAgYXBwZW5kVmFsdWVUb0NoaWxkcmVuKGNoaWxkKTtcbiAgICAgIGNoaWxkID0ge1xuICAgICAgICBwcm9wTmFtZTogJydcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSAnfScpIHtcbiAgICAgIHZhciBwcm9wTmFtZSA9IGNoaWxkLnByb3BOYW1lO1xuICAgICAgaWYgKCF2YWx1ZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIktleSBcXFwiXCIuY29uY2F0KHByb3BOYW1lLCBcIlxcXCIgbm90IGZvdW5kIGluIFwiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkodmFsdWVzLCBudWxsLCAyKSkpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHZhbHVlc1twcm9wTmFtZV07XG4gICAgICBlbmNvdW50ZXJlZE5vblByaW1pdGl2ZSA9IGVuY291bnRlcmVkTm9uUHJpbWl0aXZlIHx8ICFpc1ByaW1pdGl2ZShwcm9wVmFsdWUpO1xuICAgICAgYXBwZW5kVmFsdWVUb0NoaWxkcmVuKHByb3BWYWx1ZSk7XG4gICAgICBjaGlsZCA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kQ2hhclRvQ2hpbGQoY2hhcik7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5jbHVkZSBhbnkgcmVtYWluaW5nIGNoaWxkIHZhbHVlXG4gIGFwcGVuZFZhbHVlVG9DaGlsZHJlbihjaGlsZCk7XG4gIHJldHVybiBlbmNvdW50ZXJlZE5vblByaW1pdGl2ZSA/IGNoaWxkcmVuIDogY2hpbGRyZW4uam9pbignJyk7XG59IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmV4cG9ydCB2YXIgdXNlTG9hZGluZ0FyaWFMYWJlbCA9IGZ1bmN0aW9uIHVzZUxvYWRpbmdBcmlhTGFiZWwoKSB7XG4gIHJldHVybiB1c2VFdWlJMThuKCdldWlMb2FkaW5nU3RyaW5ncy5hcmlhTGFiZWwnLCAnTG9hZGluZycpO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcInNpemVcIiwgXCJjbGFzc05hbWVcIiwgXCJhcmlhLWxhYmVsXCIsIFwiY29sb3JcIiwgXCJzdHlsZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VMb2FkaW5nQXJpYUxhYmVsIH0gZnJvbSAnLi9fbG9hZGluZ19zdHJpbmdzJztcbmltcG9ydCB7IGV1aUxvYWRpbmdTcGlubmVyU3R5bGVzLCBldWlTcGlubmVyQm9yZGVyQ29sb3JzQ1NTIH0gZnJvbSAnLi9sb2FkaW5nX3NwaW5uZXIuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcbmV4cG9ydCB2YXIgRXVpTG9hZGluZ1NwaW5uZXIgPSBmdW5jdGlvbiBFdWlMb2FkaW5nU3Bpbm5lcihfcmVmKSB7XG4gIHZhciBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXSxcbiAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlMb2FkaW5nU3Bpbm5lcicsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlMb2FkaW5nU3Bpbm5lclN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUxvYWRpbmdTcGlubmVyLCBzdHlsZXNbc2l6ZV1dO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgY3VzdG9tQ29sb3JTdHlsZSA9IGNvbG9yID8gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZSksIHt9LCB7XG4gICAgYm9yZGVyQ29sb3I6IGV1aVNwaW5uZXJCb3JkZXJDb2xvcnNDU1MoZXVpVGhlbWUsIGNvbG9yKVxuICB9KSA6IHN0eWxlO1xuICB2YXIgZGVmYXVsdExhYmVsID0gdXNlTG9hZGluZ0FyaWFMYWJlbCgpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBzdHlsZTogY3VzdG9tQ29sb3JTdHlsZSxcbiAgICByb2xlOiBcInByb2dyZXNzYmFyXCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCB8fCBkZWZhdWx0TGFiZWxcbiAgfSwgcmVzdCkpO1xufTtcbkV1aUxvYWRpbmdTcGlubmVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIGJvcmRlciBhbmQgaGlnaGxpZ2h0LlxuICAgICAgICogRWFjaCBrZXkgYWNjZXB0cyBhbnkgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlIGFzIGEgYHN0cmluZ2BcbiAgICAgICAqIFNlZSAjRXVpTG9hZGluZ1NwaW5uZXJDb2xvclxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJvcmRlcjogUHJvcFR5cGVzLmFueSxcbiAgICBoaWdobGlnaHQ6IFByb3BUeXBlcy5hbnlcbiAgfSlcbn07IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKGUsIHQpIHsgcmV0dXJuIHQgfHwgKHQgPSBlLnNsaWNlKDApKSwgT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZSh0KSB9IH0pKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcywga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSwgbG9naWNhbFNpemVDU1MsIGxvZ2ljYWxTaG9ydGhhbmRDU1MsIG1hdGhXaXRoVW5pdHMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgX2xvYWRpbmdTcGlubmVyID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIGZyb20ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG5cXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcXG4gIH1cXG5cIl0pKSk7XG52YXIgc3Bpbm5lclNpemVzID0ge1xuICBzOiAnbScsXG4gIG06ICdiYXNlJyxcbiAgbDogJ2wnLFxuICB4bDogJ3hsJyxcbiAgeHhsOiAneHhsJ1xufTtcbmV4cG9ydCB2YXIgZXVpU3Bpbm5lckJvcmRlckNvbG9yc0NTUyA9IGZ1bmN0aW9uIGV1aVNwaW5uZXJCb3JkZXJDb2xvcnNDU1MoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICB2YXIgY29sb3JzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIF9jb2xvcnMkYm9yZGVyID0gY29sb3JzLmJvcmRlcixcbiAgICBib3JkZXIgPSBfY29sb3JzJGJvcmRlciA9PT0gdm9pZCAwID8gZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUgOiBfY29sb3JzJGJvcmRlcixcbiAgICBfY29sb3JzJGhpZ2hsaWdodCA9IGNvbG9ycy5oaWdobGlnaHQsXG4gICAgaGlnaGxpZ2h0ID0gX2NvbG9ycyRoaWdobGlnaHQgPT09IHZvaWQgMCA/IGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5IDogX2NvbG9ycyRoaWdobGlnaHQ7XG4gIHJldHVybiBcIlwiLmNvbmNhdChoaWdobGlnaHQsIFwiIFwiKS5jb25jYXQoYm9yZGVyLCBcIiBcIikuY29uY2F0KGJvcmRlciwgXCIgXCIpLmNvbmNhdChib3JkZXIpO1xufTtcbmV4cG9ydCB2YXIgZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMgPSBmdW5jdGlvbiBldWlMb2FkaW5nU3Bpbm5lclN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUxvYWRpbmdTcGlubmVyOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci50aGljaywgXCI7XCIsIGxvZ2ljYWxTaG9ydGhhbmRDU1MoJ2JvcmRlci1jb2xvcicsIGV1aVNwaW5uZXJCb3JkZXJDb2xvcnNDU1MoZXVpVGhlbWVDb250ZXh0KSksIFwiIFwiLCBldWlDYW5BbmltYXRlLCBcInthbmltYXRpb246XCIsIF9sb2FkaW5nU3Bpbm5lciwgXCIgMC42cyBpbmZpbml0ZSBsaW5lYXI7fTtsYWJlbDpldWlMb2FkaW5nU3Bpbm5lcjtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnNdLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5zXSksIFwiIGJvcmRlci13aWR0aDpcIiwgbWF0aFdpdGhVbml0cyhldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICogMS41O1xuICAgIH0pLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5tXSwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMubV0pLCBcIiBib3JkZXItd2lkdGg6XCIsIG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAqIDEuNTtcbiAgICB9KSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1MoZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMubF0sIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLmxdKSwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnhsXSwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMueGxdKSwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICB4eGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1MoZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMueHhsXSwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMueHhsXSksIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpQnV0dG9uRGlzcGxheUNvbnRlbnRTdHlsZXMgPSBmdW5jdGlvbiBldWlCdXR0b25EaXNwbGF5Q29udGVudFN0eWxlcyhfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUJ1dHRvbkRpc3BsYXlDb250ZW50OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIGRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Z2FwOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpldWlCdXR0b25EaXNwbGF5Q29udGVudDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBVUkwgZnJvbSAndXJsLXBhcnNlJztcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUhyZWYoaHJlZikge1xuICAvLyBjaGVjayBocmVmIGFuZCB0cmVhdCBpdCBhcyBpbnZhbGlkIGlmIGl0IHVzZXMgdGhlIGphdmFzY3JpcHQ6IHByb3RvY29sXG4gIHZhciBwYXJ0cyA9IG5ldyBVUkwoaHJlZik7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zY3JpcHQtdXJsXG4gIHJldHVybiBwYXJ0cy5wcm90b2NvbCAhPT0gJ2phdmFzY3JpcHQ6Jztcbn0iLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaWNvblR5cGVcIiwgXCJpY29uU2lkZVwiLCBcImljb25TaXplXCIsIFwiY29sb3JcIiwgXCJzaXplXCIsIFwiZmx1c2hcIiwgXCJpc0Rpc2FibGVkXCIsIFwiZGlzYWJsZWRcIiwgXCJpc0xvYWRpbmdcIiwgXCJocmVmXCIsIFwidGFyZ2V0XCIsIFwicmVsXCIsIFwidHlwZVwiLCBcImJ1dHRvblJlZlwiLCBcImNvbnRlbnRQcm9wc1wiLCBcInRleHRQcm9wc1wiLCBcImlzU2VsZWN0ZWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMsIGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkRpc3BsYXlDb250ZW50IH0gZnJvbSAnLi4vYnV0dG9uX2Rpc3BsYXkvX2J1dHRvbl9kaXNwbGF5X2NvbnRlbnQnO1xuaW1wb3J0IHsgdXNlRXVpQnV0dG9uQ29sb3JDU1MgfSBmcm9tICcuLi8uLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucy9idXR0b24nO1xuaW1wb3J0IHsgaXNCdXR0b25EaXNhYmxlZCB9IGZyb20gJy4uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheSc7XG5pbXBvcnQgeyBldWlCdXR0b25FbXB0eVN0eWxlcyB9IGZyb20gJy4vYnV0dG9uX2VtcHR5LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsneHMnLCAncycsICdtJ107XG5leHBvcnQgdmFyIEZMVVNIX1RZUEVTID0gWydsZWZ0JywgJ3JpZ2h0JywgJ2JvdGgnXTtcblxuLyoqXG4gKiBFeHRlbmRzIEV1aUJ1dHRvbkNvbnRlbnRQcm9wcyB3aGljaCBwcm92aWRlc1xuICogYGljb25UeXBlYCwgYGljb25TaWRlYCwgYW5kIGB0ZXh0UHJvcHNgXG4gKi9cblxuZXhwb3J0IHZhciBFdWlCdXR0b25FbXB0eSA9IGZ1bmN0aW9uIEV1aUJ1dHRvbkVtcHR5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBpY29uVHlwZSA9IF9yZWYuaWNvblR5cGUsXG4gICAgX3JlZiRpY29uU2lkZSA9IF9yZWYuaWNvblNpZGUsXG4gICAgaWNvblNpZGUgPSBfcmVmJGljb25TaWRlID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmJGljb25TaWRlLFxuICAgIF9yZWYkaWNvblNpemUgPSBfcmVmLmljb25TaXplLFxuICAgIGljb25TaXplID0gX3JlZiRpY29uU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRpY29uU2l6ZSxcbiAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdwcmltYXJ5JyA6IF9yZWYkY29sb3IsXG4gICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICBmbHVzaCA9IF9yZWYuZmx1c2gsXG4gICAgX2lzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIGlzTG9hZGluZyA9IF9yZWYuaXNMb2FkaW5nLFxuICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgcmVsID0gX3JlZi5yZWwsXG4gICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgIGJ1dHRvblJlZiA9IF9yZWYuYnV0dG9uUmVmLFxuICAgIGNvbnRlbnRQcm9wcyA9IF9yZWYuY29udGVudFByb3BzLFxuICAgIHRleHRQcm9wcyA9IF9yZWYudGV4dFByb3BzLFxuICAgIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNEaXNhYmxlZCA9IGlzQnV0dG9uRGlzYWJsZWQoe1xuICAgIGlzRGlzYWJsZWQ6IF9pc0Rpc2FibGVkIHx8IGRpc2FibGVkLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdcbiAgfSk7XG4gIHZhciBidXR0b25Db2xvclN0eWxlcyA9IHVzZUV1aUJ1dHRvbkNvbG9yQ1NTKHtcbiAgICBkaXNwbGF5OiAnZW1wdHknXG4gIH0pO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpQnV0dG9uRW1wdHlTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlCdXR0b25FbXB0eSwgc3R5bGVzW3NpemVdLCBidXR0b25Db2xvclN0eWxlc1tpc0Rpc2FibGVkID8gJ2Rpc2FibGVkJyA6IGNvbG9yXSwgZmx1c2ggJiYgc3R5bGVzLmZsdXNoLCBmbHVzaCAmJiBzdHlsZXNbZmx1c2hdLCBpc0Rpc2FibGVkICYmIHN0eWxlcy5pc0Rpc2FibGVkXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25FbXB0eScsIGNsYXNzTmFtZSk7XG4gIHZhciBjb250ZW50Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkVtcHR5X19jb250ZW50JywgY29udGVudFByb3BzID09PSBudWxsIHx8IGNvbnRlbnRQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29udGVudFByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciB0ZXh0Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkVtcHR5X190ZXh0JywgdGV4dFByb3BzICYmIHRleHRQcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgaW5uZXJOb2RlID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25EaXNwbGF5Q29udGVudCwgX2V4dGVuZHMoe1xuICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaWNvblR5cGU6IGljb25UeXBlLFxuICAgIGljb25TaWRlOiBpY29uU2lkZSxcbiAgICBpY29uU2l6ZTogc2l6ZSA9PT0gJ3hzJyA/ICdzJyA6IGljb25TaXplLFxuICAgIHRleHRQcm9wczogdGV4dFByb3BzID09PSBmYWxzZSA/IGZhbHNlIDogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0ZXh0UHJvcHMpLCB7fSwge1xuICAgICAgY2xhc3NOYW1lOiB0ZXh0Q2xhc3NOYW1lc1xuICAgIH0pXG4gIH0sIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY29udGVudFByb3BzKSwge30sIHtcbiAgICBjbGFzc05hbWU6IGNvbnRlbnRDbGFzc05hbWVzXG4gIH0pKSwgY2hpbGRyZW4pO1xuXG4gIC8vIDxhPiBlbGVtZW50cyBkb24ndCByZXNwZWN0IHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZS4gU28gaWYgd2UncmUgZGlzYWJsZWQsIHdlJ2xsIGp1c3QgcHJldGVuZFxuICAvLyB0aGlzIGlzIGEgYnV0dG9uIGFuZCBwaWdneWJhY2sgb2ZmIGl0cyBkaXNhYmxlZCBzdHlsZXMuXG4gIGlmIChocmVmICYmICFpc0Rpc2FibGVkKSB7XG4gICAgdmFyIHNlY3VyZVJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgaW5uZXJOb2RlKTtcbiAgfVxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgcmVmOiBidXR0b25SZWYsXG4gICAgXCJhcmlhLXByZXNzZWRcIjogaXNTZWxlY3RlZFxuICB9LCByZXN0KSwgaW5uZXJOb2RlKTtcbn07XG5FdWlCdXR0b25FbXB0eS5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBBbnkgb2YgdGhlIG5hbWVkIGNvbG9yIHBhbGV0dGUgb3B0aW9ucy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICBmbHVzaDogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICovXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICovXG4gIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW3VuZGVmaW5lZF0pXSksXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dC9jaGlsZHJlbiBvbmx5IChub3QgaWNvbilcbiAgICAgKlxuICAgICAqIFRoaXMgc3BhbiB3cmFwcGVyIGNhbiBiZSByZW1vdmVkIGJ5IHBhc3NpbmcgYHRleHRQcm9wcz17ZmFsc2V9YC5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxTaG9ydGhhbmRDU1MsIGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlCdXR0b25EaXNwbGF5U3R5bGVzIH0gZnJvbSAnLi4vYnV0dG9uX2Rpc3BsYXkvX2J1dHRvbl9kaXNwbGF5LnN0eWxlcyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxbHl3YmlkLWZsdXNoXCIsXG4gIHN0eWxlczogXCJwYWRkaW5nLWlubGluZTowO2xhYmVsOmZsdXNoO1wiXG59IDoge1xuICBuYW1lOiBcIjFseXdiaWQtZmx1c2hcIixcbiAgc3R5bGVzOiBcInBhZGRpbmctaW5saW5lOjA7bGFiZWw6Zmx1c2g7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpQnV0dG9uRW1wdHlTdHlsZXMgPSBmdW5jdGlvbiBldWlCdXR0b25FbXB0eVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuXG4gIC8vIEV1aUJ1dHRvbkVtcHR5IHVzZXMgdGhlIHNhbWUgc2l6ZS9mb250IHN0eWxpbmcgYXMgRXVpQnV0dG9uRGlzcGxheSxcbiAgLy8gYnV0IGRvZXMgbm90IHNoYXJlIGVub3VnaCBvZiB0aGUgc2FtZSBjb2xvcnMvcHJvcHMgdG8gdGhlIHBvaW50XG4gIC8vIG9mIHVzaW5nIHRoZSBhY3R1YWwgY29tcG9uZW50IC0gc28gd2UnbGwgcmV1c2UgaXRzIHN0eWxlcyBpbnN0ZWFkXG4gIHZhciBkaXNwbGF5U3R5bGVzID0gZXVpQnV0dG9uRGlzcGxheVN0eWxlcyhldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIGV1aUJ1dHRvbkVtcHR5OiAvKiNfX1BVUkVfXyovY3NzKGRpc3BsYXlTdHlsZXMuZXVpQnV0dG9uRGlzcGxheSwgXCIgXCIsIGxvZ2ljYWxTaG9ydGhhbmRDU1MoJ3BhZGRpbmcnLCBcIjAgXCIuY29uY2F0KGV1aVRoZW1lLnNpemUucykpLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24tZHVyYXRpb246XCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIjt9O2xhYmVsOmV1aUJ1dHRvbkVtcHR5O1wiKSxcbiAgICBpc0Rpc2FibGVkOiBkaXNwbGF5U3R5bGVzLmlzRGlzYWJsZWQsXG4gICAgLy8gU2l6ZXNcbiAgICB4czogZGlzcGxheVN0eWxlcy54cyxcbiAgICBzOiBkaXNwbGF5U3R5bGVzLnMsXG4gICAgbTogZGlzcGxheVN0eWxlcy5tLFxuICAgIC8vIEZsdXNoIHNpZGVzXG4gICAgZmx1c2g6IF9yZWYsXG4gICAgbGVmdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXJnaW4tcmlnaHQnLCBldWlUaGVtZS5zaXplLnMpLCBcIjs7bGFiZWw6bGVmdDtcIiksXG4gICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCBldWlUaGVtZS5zaXplLnMpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpLFxuICAgIGJvdGg6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6Ym90aDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaXplXCIsIFwiY29sb3JcIiwgXCJpc0Rpc2FibGVkXCIsIFwiZGlzYWJsZWRcIiwgXCJocmVmXCIsIFwidHlwZVwiLCBcImRpc3BsYXlcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJzaXplXCIsIFwiYnV0dG9uUmVmXCIsIFwiaXNTZWxlY3RlZFwiLCBcImlzTG9hZGluZ1wiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vLi4vbG9hZGluZyc7XG5pbXBvcnQgeyB1c2VFdWlCdXR0b25Db2xvckNTUywgdXNlRXVpQnV0dG9uRm9jdXNDU1MgfSBmcm9tICcuLi8uLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucy9idXR0b24nO1xuaW1wb3J0IHsgaXNCdXR0b25EaXNhYmxlZCB9IGZyb20gJy4uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheSc7XG5pbXBvcnQgeyBldWlCdXR0b25JY29uU3R5bGVzLCBfZW1wdHlIb3ZlclN0eWxlcyB9IGZyb20gJy4vYnV0dG9uX2ljb24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWyd4cycsICdzJywgJ20nXTtcbmV4cG9ydCB2YXIgRElTUExBWVMgPSBbJ2Jhc2UnLCAnZW1wdHknLCAnZmlsbCddO1xuZXhwb3J0IHZhciBFdWlCdXR0b25JY29uID0gZnVuY3Rpb24gRXVpQnV0dG9uSWNvbihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBpY29uVHlwZSA9IF9yZWYuaWNvblR5cGUsXG4gICAgX3JlZiRpY29uU2l6ZSA9IF9yZWYuaWNvblNpemUsXG4gICAgaWNvblNpemUgPSBfcmVmJGljb25TaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJGljb25TaXplLFxuICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ3ByaW1hcnknIDogX3JlZiRjb2xvcixcbiAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgX3JlZiRkaXNwbGF5ID0gX3JlZi5kaXNwbGF5LFxuICAgIGRpc3BsYXkgPSBfcmVmJGRpc3BsYXkgPT09IHZvaWQgMCA/ICdlbXB0eScgOiBfcmVmJGRpc3BsYXksXG4gICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgcmVsID0gX3JlZi5yZWwsXG4gICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICd4cycgOiBfcmVmJHNpemUsXG4gICAgYnV0dG9uUmVmID0gX3JlZi5idXR0b25SZWYsXG4gICAgaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICBpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc0Rpc2FibGVkID0gaXNCdXR0b25EaXNhYmxlZCh7XG4gICAgaXNEaXNhYmxlZDogX2lzRGlzYWJsZWQgfHwgZGlzYWJsZWQsXG4gICAgaHJlZjogaHJlZixcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ1xuICB9KTtcbiAgdmFyIGFyaWFIaWRkZW4gPSByZXN0WydhcmlhLWhpZGRlbiddO1xuICB2YXIgaXNBcmlhSGlkZGVuID0gYXJpYUhpZGRlbiA9PT0gJ3RydWUnIHx8IGFyaWFIaWRkZW4gPT09IHRydWU7XG4gIGlmICghcmVzdFsnYXJpYS1sYWJlbCddICYmICFyZXN0WydhcmlhLWxhYmVsbGVkYnknXSAmJiAhaXNBcmlhSGlkZGVuKSB7XG4gICAgY29uc29sZS53YXJuKFwiRXVpQnV0dG9uSWNvbiByZXF1aXJlcyBhcmlhLWxhYmVsIG9yIGFyaWEtbGFiZWxsZWRieSB0byBiZSBzcGVjaWZpZWQgYmVjYXVzZSBpY29uLW9ubHlcXG4gICAgICBidXR0b25zIGFyZSBzY3JlZW4tcmVhZGVyLWluYWNjZXNzaWJsZSB3aXRob3V0IHRoZW0uXCIpO1xuICB9XG4gIHZhciBidXR0b25Db2xvclN0eWxlcyA9IHVzZUV1aUJ1dHRvbkNvbG9yQ1NTKHtcbiAgICBkaXNwbGF5OiBkaXNwbGF5XG4gIH0pO1xuICB2YXIgYnV0dG9uRm9jdXNTdHlsZSA9IHVzZUV1aUJ1dHRvbkZvY3VzQ1NTKCk7XG4gIHZhciBlbXB0eUhvdmVyU3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoX2VtcHR5SG92ZXJTdHlsZXMpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpQnV0dG9uSWNvblN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUJ1dHRvbkljb24sIHN0eWxlc1tzaXplXSwgYnV0dG9uQ29sb3JTdHlsZXNbaXNEaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBjb2xvcl0sIGJ1dHRvbkZvY3VzU3R5bGUsIGRpc3BsYXkgPT09ICdlbXB0eScgJiYgIWlzRGlzYWJsZWQgJiYgZW1wdHlIb3ZlclN0eWxlc1tjb2xvcl0sIGlzRGlzYWJsZWQgJiYgc3R5bGVzLmlzRGlzYWJsZWRdO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkljb24nLCBjbGFzc05hbWUpO1xuXG4gIC8vIEFkZCBhbiBpY29uIHRvIHRoZSBidXR0b24gaWYgb25lIGV4aXN0cy5cbiAgdmFyIGJ1dHRvbkljb247XG4gIGlmIChpY29uVHlwZSAmJiAhaXNMb2FkaW5nKSB7XG4gICAgYnV0dG9uSWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUJ1dHRvbkljb25fX2ljb25cIixcbiAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgc2l6ZTogaWNvblNpemUsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcbiAgICB9KTtcbiAgfVxuICBpZiAoaWNvblR5cGUgJiYgaXNMb2FkaW5nKSB7XG4gICAgLy8gYG9yaWdpbmFsYCBzaXplIGRvZXNuJ3QgZXhpc3QgaW4gYEV1aUxvYWRpbmdTcGlubmVyYFxuICAgIC8vIHdoZW4gdGhlIGBpY29uU2l6ZWAgaXMgYG9yaWdpbmFsYCB3ZSBkb24ndCBwYXNzIGFueSBzaXplIHRvIHRoZSBgRXVpTG9hZGluZ1NwaW5uZXJgXG4gICAgLy8gc28gaXQgZ2V0cyB0aGUgZGVmYXVsdCBzaXplXG4gICAgdmFyIGxvYWRpbmdTaXplID0gaWNvblNpemUgPT09ICdvcmlnaW5hbCcgPyB1bmRlZmluZWQgOiBpY29uU2l6ZTtcblxuICAgIC8vIFdoZW4gdGhlIGJ1dHRvbiBpcyBkaXNhYmxlZCB0aGUgdGV4dCBnZXRzIGdyYXlcbiAgICAvLyBhbmQgaW4gc29tZSBidXR0b25zIHRoZSBiYWNrZ3JvdW5kIGdldHMgYSBsaWdodCBncmF5XG4gICAgLy8gZm9yIGJldHRlciBjb250cmFzdCB3ZSB3YW50IHRvIGNoYW5nZSB0aGUgYm9yZGVyIG9mIHRoZSBzcGlubmVyXG4gICAgLy8gdG8gaGF2ZSB0aGUgc2FtZSBjb2xvciBvZiB0aGUgdGV4dC4gVGhpcyB3YXkgd2UgZW5zdXJlIHRoZSBib3JkZXJzXG4gICAgLy8gYXJlIGFsd2F5cyB2aXNpYmxlLiBUaGUgZGVmYXVsdCBzcGlubmVyIGNvbG9yIGNvdWxkIGJlIHZlcnkgbGlnaHQuXG4gICAgdmFyIGxvYWRpbmdTcGlubmVyQ29sb3IgPSBpc0Rpc2FibGVkID8ge1xuICAgICAgYm9yZGVyOiAnY3VycmVudGNvbG9yJ1xuICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgYnV0dG9uSWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpTG9hZGluZ1NwaW5uZXIsIHtcbiAgICAgIHNpemU6IGxvYWRpbmdTaXplLFxuICAgICAgY29sb3I6IGxvYWRpbmdTcGlubmVyQ29sb3JcbiAgICB9KTtcbiAgfVxuXG4gIC8vIDxhPiBlbGVtZW50cyBkb24ndCByZXNwZWN0IHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZS4gU28gaWYgd2UncmUgZGlzYWJsZWQsIHdlJ2xsIGp1c3QgcHJldGVuZFxuICAvLyB0aGlzIGlzIGEgYnV0dG9uIGFuZCBwaWdneWJhY2sgb2ZmIGl0cyBkaXNhYmxlZCBzdHlsZXMuXG4gIGlmIChocmVmICYmICFpc0Rpc2FibGVkKSB7XG4gICAgdmFyIHNlY3VyZVJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIHRhYkluZGV4OiBpc0FyaWFIaWRkZW4gPyAtMSA6IHVuZGVmaW5lZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgYnV0dG9uSWNvbik7XG4gIH1cbiAgdmFyIGJ1dHRvblR5cGU7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICB0YWJJbmRleDogaXNBcmlhSGlkZGVuID8gLTEgOiB1bmRlZmluZWQsXG4gICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIFwiYXJpYS1wcmVzc2VkXCI6IGlzU2VsZWN0ZWQsXG4gICAgdHlwZTogdHlwZSxcbiAgICByZWY6IGJ1dHRvblJlZlxuICB9LCByZXN0KSwgYnV0dG9uSWNvbik7XG59O1xuRXVpQnV0dG9uSWNvbi5wcm9wVHlwZXMgPSB7XG4gIHR5cGU6IFByb3BUeXBlcy5hbnksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBBbnkgb2YgdGhlIG5hbWVkIGNvbG9yIHBhbGV0dGUgb3B0aW9ucy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT3ZlcmFsbCBzaXplIG9mIGJ1dHRvbi5cbiAgICAgKiBNYXRjaGVzIHRoZSBzaXplcyBvZiBvdGhlciBFdWlCdXR0b25zXG4gICAgICovXG4gIC8qKlxuICAgICAqIE92ZXJhbGwgc2l6ZSBvZiBidXR0b24uXG4gICAgICogTWF0Y2hlcyB0aGUgc2l6ZXMgb2Ygb3RoZXIgRXVpQnV0dG9uc1xuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBTaXplIG9mIHRoZSBpY29uIG9ubHkuXG4gICAgICogVGhpcyB3aWxsIG5vdCBhZmZlY3QgdGhlIG92ZXJhbGwgc2l6ZSBvZiB0aGUgYnV0dG9uXG4gICAgICovXG4gIGljb25TaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc3BsYXkgc3R5bGUgZm9yIG1hdGNoaW5nIG90aGVyIEV1aUJ1dHRvbiB0eXBlcy5cbiAgICAgKiBgYmFzZWAgaXMgZXF1aXZhbGVudCB0byBhIHR5cGljYWwgRXVpQnV0dG9uXG4gICAgICogYGZpbGxgIGlzIGVxdWl2YWxlbnQgdG8gYSBmaWxsZWQgRXVpQnV0dG9uXG4gICAgICogYGVtcHR5YCAoZGVmYXVsdCkgaXMgZXF1aXZhbGVudCB0byBhbiBFdWlCdXR0b25FbXB0eVxuICAgICAqL1xuICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXNwbGF5IHN0eWxlIGZvciBtYXRjaGluZyBvdGhlciBFdWlCdXR0b24gdHlwZXMuXG4gICAgICogYGJhc2VgIGlzIGVxdWl2YWxlbnQgdG8gYSB0eXBpY2FsIEV1aUJ1dHRvblxuICAgICAqIGBmaWxsYCBpcyBlcXVpdmFsZW50IHRvIGEgZmlsbGVkIEV1aUJ1dHRvblxuICAgICAqIGBlbXB0eWAgKGRlZmF1bHQpIGlzIGVxdWl2YWxlbnQgdG8gYW4gRXVpQnV0dG9uRW1wdHlcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsU2l6ZUNTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IEJVVFRPTl9DT0xPUlMsIGV1aUJ1dHRvbkVtcHR5Q29sb3IsIGV1aUJ1dHRvblNpemVNYXAgfSBmcm9tICcuLi8uLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucy9idXR0b24nO1xuaW1wb3J0IHsgZXVpQnV0dG9uQmFzZUNTUyB9IGZyb20gJy4uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheS5zdHlsZXMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiODU5NXA5LWlzRGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImN1cnNvcjpub3QtYWxsb3dlZDtsYWJlbDppc0Rpc2FibGVkO1wiXG59IDoge1xuICBuYW1lOiBcIjg1OTVwOS1pc0Rpc2FibGVkXCIsXG4gIHN0eWxlczogXCJjdXJzb3I6bm90LWFsbG93ZWQ7bGFiZWw6aXNEaXNhYmxlZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlCdXR0b25JY29uU3R5bGVzID0gZnVuY3Rpb24gZXVpQnV0dG9uSWNvblN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIHNpemVzID0gZXVpQnV0dG9uU2l6ZU1hcChldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIGV1aUJ1dHRvbkljb246IC8qI19fUFVSRV9fKi9jc3MoZXVpQnV0dG9uQmFzZUNTUygpLCBcImRpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7Jj5zdmd7cG9pbnRlci1ldmVudHM6bm9uZTt9O2xhYmVsOmV1aUJ1dHRvbkljb247XCIpLFxuICAgIGlzRGlzYWJsZWQ6IF9yZWYsXG4gICAgLy8gU2l6ZXNcbiAgICB4czogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhzaXplcy54cy5oZWlnaHQpLCBcIiBib3JkZXItcmFkaXVzOlwiLCBzaXplcy54cy5yYWRpdXMsIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhzaXplcy5zLmhlaWdodCksIFwiIGJvcmRlci1yYWRpdXM6XCIsIHNpemVzLnMucmFkaXVzLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhzaXplcy5tLmhlaWdodCksIFwiIGJvcmRlci1yYWRpdXM6XCIsIHNpemVzLm0ucmFkaXVzLCBcIjs7bGFiZWw6bTtcIilcbiAgfTtcbn07XG5leHBvcnQgdmFyIF9lbXB0eUhvdmVyU3R5bGVzID0gZnVuY3Rpb24gX2VtcHR5SG92ZXJTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiBCVVRUT05fQ09MT1JTLnJlZHVjZShmdW5jdGlvbiAoc3R5bGVzLCBjb2xvcikge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlcyksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIGNvbG9yLCAvKiNfX1BVUkVfXyovY3NzKFwiJjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlCdXR0b25FbXB0eUNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLmJhY2tncm91bmRDb2xvciwgXCI7fVwiKSkpO1xuICB9LCB7fSk7XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlubmVyVGV4dChpbm5lclRleHRGYWxsYmFjaykge1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgcmVmID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRSZWYgPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKGlubmVyVGV4dEZhbGxiYWNrKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgaW5uZXJUZXh0ID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRJbm5lclRleHQgPSBfdXNlU3RhdGU0WzFdO1xuICB2YXIgdXBkYXRlSW5uZXJUZXh0ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUpIHJldHVybjtcbiAgICBzZXRJbm5lclRleHQoXG4gICAgLy8gQ2hlY2sgZm9yIGBpbm5lclRleHRgIGltcGxlbWVudGF0aW9uIHJhdGhlciB0aGFuIGEgc2ltcGxlIE9SIGNoZWNrXG4gICAgLy8gYmVjYXVzZSBpbiByZWFsIGNhc2VzIHRoZSByZXN1bHQgb2YgYGlubmVyVGV4dGAgY291bGQgY29ycmVjdGx5IGJlIGBudWxsYFxuICAgIC8vIHdoaWxlIHRoZSByZXN1bHQgb2YgYHRleHRDb250ZW50YCBjb3VsZCBjb3JyZWN0bHkgYmUgbm9uLWBudWxsYCBkdWUgdG9cbiAgICAvLyBkaWZmZXJpbmcgcmVsaWFuY2Ugb24gYnJvd3NlciBsYXlvdXQgY2FsY3VsYXRpb25zLlxuICAgIC8vIFdlIHByZWZlciB0aGUgcmVzdWx0IG9mIGBpbm5lclRleHRgLCBpZiBhdmFpbGFibGUuXG4gICAgJ2lubmVyVGV4dCcgaW4gbm9kZSA/IG5vZGUuaW5uZXJUZXh0IDogbm9kZS50ZXh0Q29udGVudCB8fCBpbm5lclRleHRGYWxsYmFjayk7XG4gIH0sIFtpbm5lclRleHRGYWxsYmFja10pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnNMaXN0KSB7XG4gICAgICBpZiAobXV0YXRpb25zTGlzdC5sZW5ndGgpIHVwZGF0ZUlubmVyVGV4dChyZWYpO1xuICAgIH0pO1xuICAgIGlmIChyZWYpIHtcbiAgICAgIHVwZGF0ZUlubmVyVGV4dChyZWYpO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShyZWYsIHtcbiAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9LCBbcmVmLCB1cGRhdGVJbm5lclRleHRdKTtcbiAgcmV0dXJuIFtzZXRSZWYsIGlubmVyVGV4dF07XG59XG5leHBvcnQgdmFyIEV1aUlubmVyVGV4dCA9IGZ1bmN0aW9uIEV1aUlubmVyVGV4dChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgZmFsbGJhY2sgPSBfcmVmLmZhbGxiYWNrO1xuICB2YXIgX3VzZUlubmVyVGV4dCA9IHVzZUlubmVyVGV4dChmYWxsYmFjayksXG4gICAgX3VzZUlubmVyVGV4dDIgPSBfc2xpY2VkVG9BcnJheShfdXNlSW5uZXJUZXh0LCAyKSxcbiAgICByZWYgPSBfdXNlSW5uZXJUZXh0MlswXSxcbiAgICBpbm5lclRleHQgPSBfdXNlSW5uZXJUZXh0MlsxXTtcbiAgcmV0dXJuIGNoaWxkcmVuKHJlZiwgaW5uZXJUZXh0KTtcbn07XG5FdWlJbm5lclRleHQucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZmFsbGJhY2s6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgc2hhZGUsIHRpbnQsIGRhcmtlbiwgdHJhbnNwYXJlbnRpemUsIG1ha2VIaWdoQ29udHJhc3RDb2xvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIG1hdGhXaXRoVW5pdHMsIGV1aUNhbkFuaW1hdGUsIGV1aUZvbnRTaXplIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpQnV0dG9uQ29sb3IgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5cbi8vIFRoZXJlIGFyZSBtdWx0aXBsZSBjb21wb25lbnRzIHRoYXQgb25seSBuZWVkIHRoZSBmb3JtIG1heC13aWR0aCBzaXplICZcbi8vIGRvbid0IG5lZWQgdGhlIGV4dHJhIG92ZXJoZWFkL2NvbG9yIGNvbXB1dGluZyBleHBlbnNlIG9mIGV2ZXJ5IGZvcm0gdmFyLlxuLy8gRm9yIG1pY3JvcGVyZiwgd2UncmUgbWFraW5nIHRoaXMgaXRzIG93biB1dGlsXG5leHBvcnQgdmFyIGV1aUZvcm1NYXhXaWR0aCA9IGZ1bmN0aW9uIGV1aUZvcm1NYXhXaWR0aChfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLnNpemUuYmFzZSwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4geCAqIDI1O1xuICB9KTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1WYXJpYWJsZXMgPSBmdW5jdGlvbiBldWlGb3JtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcbiAgdmFyIGlzQ29sb3JEYXJrID0gY29sb3JNb2RlID09PSAnREFSSyc7XG4gIHZhciBiYWNrZ3JvdW5kQ29sb3IgPSBpc0NvbG9yRGFyayA/IHNoYWRlKGV1aVRoZW1lLmNvbG9ycy5saWdodGVzdFNoYWRlLCAwLjQpIDogdGludChldWlUaGVtZS5jb2xvcnMubGlnaHRlc3RTaGFkZSwgMC42KTtcbiAgdmFyIGNvbnRyb2xIZWlnaHQgPSBldWlUaGVtZS5zaXplLnh4bDtcbiAgdmFyIGNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0ID0gZXVpVGhlbWUuc2l6ZS54bDtcbiAgdmFyIHNpemVzID0ge1xuICAgIG1heFdpZHRoOiBldWlGb3JtTWF4V2lkdGgoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBjb250cm9sSGVpZ2h0OiBjb250cm9sSGVpZ2h0LFxuICAgIGNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0OiBjb250cm9sQ29tcHJlc3NlZEhlaWdodCxcbiAgICBjb250cm9sUGFkZGluZzogZXVpVGhlbWUuc2l6ZS5tLFxuICAgIGNvbnRyb2xDb21wcmVzc2VkUGFkZGluZzogZXVpVGhlbWUuc2l6ZS5zLFxuICAgIGNvbnRyb2xCb3JkZXJSYWRpdXM6IGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLFxuICAgIGNvbnRyb2xDb21wcmVzc2VkQm9yZGVyUmFkaXVzOiBldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLFxuICAgIGljb25BZmZvcmRhbmNlOiBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLnNpemUuYmFzZSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICogMS41O1xuICAgIH0pLFxuICAgIGljb25Db21wcmVzc2VkQWZmb3JkYW5jZTogbWF0aFdpdGhVbml0cyhldWlUaGVtZS5zaXplLm0sIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAqIDEuNTtcbiAgICB9KVxuICB9O1xuICB2YXIgY29sb3JzID0ge1xuICAgIHRleHRDb2xvcjogZXVpVGhlbWUuY29sb3JzLnRleHQsXG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYmFja2dyb3VuZERpc2FibGVkQ29sb3I6IGRhcmtlbihldWlUaGVtZS5jb2xvcnMubGlnaHRlc3RTaGFkZSwgMC4wNSksXG4gICAgYmFja2dyb3VuZFJlYWRPbmx5Q29sb3I6IGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLFxuICAgIGJvcmRlckNvbG9yOiB0cmFuc3BhcmVudGl6ZShjb2xvck1vZGUgPT09ICdEQVJLJyA/IGV1aVRoZW1lLmNvbG9ycy5naG9zdCA6IGRhcmtlbihldWlUaGVtZS5ib3JkZXIuY29sb3IsIDQpLCAwLjEpLFxuICAgIGNvbnRyb2xEaXNhYmxlZENvbG9yOiBldWlUaGVtZS5jb2xvcnMubWVkaXVtU2hhZGUsXG4gICAgY29udHJvbEJveFNoYWRvdzogJzAgMCB0cmFuc3BhcmVudCcsXG4gICAgY29udHJvbFBsYWNlaG9sZGVyVGV4dDogbWFrZUhpZ2hDb250cmFzdENvbG9yKGV1aVRoZW1lLmNvbG9ycy5zdWJkdWVkVGV4dCkoYmFja2dyb3VuZENvbG9yKSxcbiAgICBhcHBlbmRQcmVwZW5kQmFja2dyb3VuZDogaXNDb2xvckRhcmsgPyBzaGFkZShldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSwgMC4xNSkgOiB0aW50KGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAwLjUpXG4gIH07XG4gIHZhciBjb250cm9sTGF5b3V0ID0ge1xuICAgIGNvbnRyb2xMYXlvdXRHcm91cElucHV0SGVpZ2h0OiBtYXRoV2l0aFVuaXRzKGNvbnRyb2xIZWlnaHQsIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAtIDI7XG4gICAgfSksXG4gICAgY29udHJvbExheW91dEdyb3VwSW5wdXRDb21wcmVzc2VkSGVpZ2h0OiBtYXRoV2l0aFVuaXRzKGNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0LCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggLSAyO1xuICAgIH0pLFxuICAgIGNvbnRyb2xMYXlvdXRHcm91cElucHV0Q29tcHJlc3NlZEJvcmRlclJhZGl1czogZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbFxuICB9O1xuICB2YXIgaWNvblNpemVzID0ge1xuICAgIGNvbnRyb2xJY29uU2l6ZToge1xuICAgICAgczogZXVpVGhlbWUuc2l6ZS5tLFxuICAgICAgbTogZXVpVGhlbWUuc2l6ZS5iYXNlLFxuICAgICAgbDogZXVpVGhlbWUuc2l6ZS5sLFxuICAgICAgeGw6IGV1aVRoZW1lLnNpemUueGwsXG4gICAgICB4eGw6IGV1aVRoZW1lLnNpemUueHhsXG4gICAgfVxuICB9O1xuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzaXplcyksIGNvbG9ycyksIGljb25TaXplcyksIGNvbnRyb2xMYXlvdXQpLCB7fSwge1xuICAgIGFuaW1hdGlvblRpbWluZzogXCJcIi5jb25jYXQoZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIGVhc2UtaW5cIilcbiAgfSk7XG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ29udHJvbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1Db250cm9sU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZm9ybSA9IGV1aUZvcm1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIHtcbiAgICBzaGFyZWQ6IFwiXFxuICAgICAgXCIuY29uY2F0KGV1aUZvcm1Db250cm9sVGV4dChldWlUaGVtZUNvbnRleHQpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQoZXVpRm9ybUNvbnRyb2xEZWZhdWx0U2hhZG93KGV1aVRoZW1lQ29udGV4dCksIFwiXFxuICAgIFwiKSxcbiAgICAvLyBTaXplc1xuICAgIHVuY29tcHJlc3NlZDogXCJcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0JywgZm9ybS5jb250cm9sSGVpZ2h0KSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCBmb3JtLmNvbnRyb2xQYWRkaW5nKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctbGVmdCcsIFwiY2FsYyhcIi5jb25jYXQoZm9ybS5jb250cm9sUGFkZGluZywgXCIgKyAoXCIpLmNvbmNhdChmb3JtLmljb25BZmZvcmRhbmNlLCBcIiAqIHZhcigtLWV1aUZvcm1Db250cm9sTGVmdEljb25zQ291bnQsIDApKSlcIikpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1yaWdodCcsIFwiY2FsYyhcIi5jb25jYXQoZm9ybS5jb250cm9sUGFkZGluZywgXCIgKyAoXCIpLmNvbmNhdChmb3JtLmljb25BZmZvcmRhbmNlLCBcIiAqIHZhcigtLWV1aUZvcm1Db250cm9sUmlnaHRJY29uc0NvdW50LCAwKSkpXCIpKSwgXCJcXG4gICAgICBib3JkZXItcmFkaXVzOiBcIikuY29uY2F0KGZvcm0uY29udHJvbEJvcmRlclJhZGl1cywgXCI7XFxuICAgIFwiKSxcbiAgICBjb21wcmVzc2VkOiBcIlxcbiAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCBmb3JtLmNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0KSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCBmb3JtLmNvbnRyb2xDb21wcmVzc2VkUGFkZGluZyksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBcImNhbGMoXCIuY29uY2F0KGZvcm0uY29udHJvbENvbXByZXNzZWRQYWRkaW5nLCBcIiArIChcIikuY29uY2F0KGZvcm0uaWNvbkNvbXByZXNzZWRBZmZvcmRhbmNlLCBcIiAqIHZhcigtLWV1aUZvcm1Db250cm9sTGVmdEljb25zQ291bnQsIDApKSlcIikpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1yaWdodCcsIFwiY2FsYyhcIi5jb25jYXQoZm9ybS5jb250cm9sQ29tcHJlc3NlZFBhZGRpbmcsIFwiICsgKFwiKS5jb25jYXQoZm9ybS5pY29uQ29tcHJlc3NlZEFmZm9yZGFuY2UsIFwiICogdmFyKC0tZXVpRm9ybUNvbnRyb2xSaWdodEljb25zQ291bnQsIDApKSlcIikpLCBcIlxcbiAgICAgIGJvcmRlci1yYWRpdXM6IFwiKS5jb25jYXQoZm9ybS5jb250cm9sQ29tcHJlc3NlZEJvcmRlclJhZGl1cywgXCI7XFxuICAgIFwiKSxcbiAgICAvLyBJbiBncm91cFxuICAgIGluR3JvdXA6IFwiXFxuICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiXFxuICAgICAgYm94LXNoYWRvdzogbm9uZTtcXG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xcbiAgICBcIiksXG4gICAgLy8gV2lkdGhzXG4gICAgZm9ybVdpZHRoOiBcIlxcbiAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCBmb3JtLm1heFdpZHRoKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCJcXG4gICAgXCIpLFxuICAgIGZ1bGxXaWR0aDogXCJcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCJcXG4gICAgXCIpLFxuICAgIC8vIFN0YXRlc1xuICAgIGludmFsaWQ6IGV1aUZvcm1Db250cm9sSW52YWxpZFN0eWxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIGZvY3VzOiBldWlGb3JtQ29udHJvbEZvY3VzU3R5bGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgZGlzYWJsZWQ6IGV1aUZvcm1Db250cm9sRGlzYWJsZWRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICByZWFkT25seTogZXVpRm9ybUNvbnRyb2xSZWFkT25seVN0eWxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIGF1dG9GaWxsOiBldWlGb3JtQ29udHJvbEF1dG9GaWxsU3R5bGVzKGV1aVRoZW1lQ29udGV4dClcbiAgfTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sVGV4dCA9IGZ1bmN0aW9uIGV1aUZvcm1Db250cm9sVGV4dChldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgX2V1aUZvbnRTaXplID0gZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLFxuICAgIGZvbnRTaXplID0gX2V1aUZvbnRTaXplLmZvbnRTaXplO1xuICB2YXIgZm9ybSA9IGV1aUZvcm1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIFwiXFxuICAgIGZvbnQtZmFtaWx5OiBcIi5jb25jYXQoZXVpVGhlbWUuZm9udC5mYW1pbHksIFwiO1xcbiAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZm9udFNpemUsIFwiO1xcbiAgICBjb2xvcjogXCIpLmNvbmNhdChmb3JtLnRleHRDb2xvciwgXCI7XFxuXFxuICAgIFwiKS5jb25jYXQoZXVpUGxhY2Vob2xkZXJQZXJCcm93c2VyKFwiXFxuICAgICAgY29sb3I6IFwiLmNvbmNhdChmb3JtLmNvbnRyb2xQbGFjZWhvbGRlclRleHQsIFwiO1xcbiAgICAgIG9wYWNpdHk6IDE7XFxuICAgIFwiKSksIFwiXFxuICBcIik7XG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ29udHJvbERlZmF1bHRTaGFkb3cgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbERlZmF1bHRTaGFkb3coZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgX3JlZjIkd2l0aEJvcmRlciA9IF9yZWYyLndpdGhCb3JkZXIsXG4gICAgd2l0aEJvcmRlciA9IF9yZWYyJHdpdGhCb3JkZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiR3aXRoQm9yZGVyLFxuICAgIF9yZWYyJHdpdGhCYWNrZ3JvdW5kID0gX3JlZjIud2l0aEJhY2tncm91bmQsXG4gICAgd2l0aEJhY2tncm91bmQgPSBfcmVmMiR3aXRoQmFja2dyb3VuZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJHdpdGhCYWNrZ3JvdW5kLFxuICAgIF9yZWYyJHdpdGhCYWNrZ3JvdW5kQyA9IF9yZWYyLndpdGhCYWNrZ3JvdW5kQ29sb3IsXG4gICAgd2l0aEJhY2tncm91bmRDb2xvciA9IF9yZWYyJHdpdGhCYWNrZ3JvdW5kQyA9PT0gdm9pZCAwID8gd2l0aEJhY2tncm91bmQgOiBfcmVmMiR3aXRoQmFja2dyb3VuZEMsXG4gICAgX3JlZjIkd2l0aEJhY2tncm91bmRBID0gX3JlZjIud2l0aEJhY2tncm91bmRBbmltYXRpb24sXG4gICAgd2l0aEJhY2tncm91bmRBbmltYXRpb24gPSBfcmVmMiR3aXRoQmFja2dyb3VuZEEgPT09IHZvaWQgMCA/IHdpdGhCYWNrZ3JvdW5kIDogX3JlZjIkd2l0aEJhY2tncm91bmRBO1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBmb3JtID0gZXVpRm9ybVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpO1xuXG4gIC8vIFdlIHVzZSBpbnNldCBib3gtc2hhZG93IGluc3RlYWQgb2YgYm9yZGVyIHRvIHNraXAgZXh0cmEgaGVpZ2h0IGNhbGN1bGF0aW9uc1xuICB2YXIgYm9yZGVyID0gXCJcXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCBcIi5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIFwiKS5jb25jYXQoZm9ybS5ib3JkZXJDb2xvciwgXCI7XFxuICBcIikudHJpbSgpO1xuICB2YXIgYmFja2dyb3VuZENvbG9yID0gXCJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogXCIuY29uY2F0KGZvcm0uYmFja2dyb3VuZENvbG9yLCBcIjtcXG4gIFwiKS50cmltKCk7XG4gIHZhciBiYWNrZ3JvdW5kR3JhZGllbnQgPSBcIlxcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDAlIDEwMCU7XFxuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsXFxuICAgICAgdmFyKC0tZXVpRm9ybUNvbnRyb2xTdGF0ZUNvbG9yKSxcXG4gICAgICB2YXIoLS1ldWlGb3JtQ29udHJvbFN0YXRlQ29sb3IpIFwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpY2ssIFwiLFxcbiAgICAgIHRyYW5zcGFyZW50IFwiKS5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaWNrLCBcIixcXG4gICAgICB0cmFuc3BhcmVudCAxMDAlXFxuICAgICk7XFxuICBcIikudHJpbSgpO1xuICB2YXIgYmFja2dyb3VuZEFuaW1hdGlvbiA9IFwiXFxuICAgIFwiLmNvbmNhdChldWlDYW5BbmltYXRlLCBcIiB7XFxuICAgICAgdHJhbnNpdGlvbjpcXG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2UgXCIpLmNvbmNhdChmb3JtLmFuaW1hdGlvblRpbWluZywgXCIsXFxuICAgICAgICBiYWNrZ3JvdW5kLXNpemUgXCIpLmNvbmNhdChmb3JtLmFuaW1hdGlvblRpbWluZywgXCIsXFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIFwiKS5jb25jYXQoZm9ybS5hbmltYXRpb25UaW1pbmcsIFwiO1xcbiAgICB9XFxuICBcIikudHJpbSgpO1xuICByZXR1cm4gXCJcXG4gICAgXCIuY29uY2F0KHdpdGhCb3JkZXIgPyBib3JkZXIgOiAnJywgXCJcXG4gICAgXCIpLmNvbmNhdCh3aXRoQmFja2dyb3VuZENvbG9yID8gYmFja2dyb3VuZENvbG9yIDogJycsIFwiXFxuICAgIFwiKS5jb25jYXQod2l0aEJhY2tncm91bmQgPyBiYWNrZ3JvdW5kR3JhZGllbnQgOiAnJywgXCJcXG4gICAgXCIpLmNvbmNhdCh3aXRoQmFja2dyb3VuZEFuaW1hdGlvbiA/IGJhY2tncm91bmRBbmltYXRpb24gOiAnJywgXCJcXG4gIFwiKTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sRm9jdXNTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbEZvY3VzU3R5bGVzKF9yZWYzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYzLmNvbG9yTW9kZTtcbiAgcmV0dXJuIFwiXFxuICAtLWV1aUZvcm1Db250cm9sU3RhdGVDb2xvcjogXCIuY29uY2F0KGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCBcIjtcXG4gIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQoY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSwgMC40KSA6IGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLCBcIjtcXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlO1xcbiAgb3V0bGluZTogbm9uZTsgLyogUmVtb3ZlIGFsbCBvdXRsaW5lcyBhbmQgcmVseSBvbiBvdXIgb3duIGJvdHRvbSBib3JkZXIgZ3JhZGllbnQgKi9cXG5cIik7XG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ29udHJvbEludmFsaWRTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbEludmFsaWRTdHlsZXMoX3JlZjQpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjQuZXVpVGhlbWU7XG4gIHJldHVybiBcIlxcbiAgLS1ldWlGb3JtQ29udHJvbFN0YXRlQ29sb3I6IFwiLmNvbmNhdChldWlUaGVtZS5jb2xvcnMuZGFuZ2VyLCBcIjtcXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlO1xcblwiKTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sRGlzYWJsZWRTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbERpc2FibGVkU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZm9ybSA9IGV1aUZvcm1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIFwiXFxuICAgIGNvbG9yOiBcIi5jb25jYXQoZm9ybS5jb250cm9sRGlzYWJsZWRDb2xvciwgXCI7XFxuICAgIC8qIFJlcXVpcmVkIGZvciBTYWZhcmkgKi9cXG4gICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IFwiKS5jb25jYXQoZm9ybS5jb250cm9sRGlzYWJsZWRDb2xvciwgXCI7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQoZm9ybS5iYWNrZ3JvdW5kRGlzYWJsZWRDb2xvciwgXCI7XFxuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICAgIC0tZXVpRm9ybUNvbnRyb2xTdGF0ZUNvbG9yOiB0cmFuc3BhcmVudDtcXG5cXG4gICAgXCIpLmNvbmNhdChldWlQbGFjZWhvbGRlclBlckJyb3dzZXIoXCJcXG4gICAgICBjb2xvcjogXCIuY29uY2F0KGZvcm0uY29udHJvbERpc2FibGVkQ29sb3IsIFwiO1xcbiAgICAgIG9wYWNpdHk6IDE7XFxuICAgIFwiKSksIFwiXFxuICBcIik7XG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ29udHJvbFJlYWRPbmx5U3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUNvbnRyb2xSZWFkT25seVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGZvcm0gPSBldWlGb3JtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHJldHVybiBcIlxcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XFxuICAgIGNvbG9yOiBcIi5jb25jYXQoZm9ybS50ZXh0Q29sb3IsIFwiO1xcbiAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogXCIpLmNvbmNhdChmb3JtLnRleHRDb2xvciwgXCI7IC8qIFJlcXVpcmVkIGZvciBTYWZhcmkgKi9cXG5cXG4gICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdChmb3JtLmJhY2tncm91bmRSZWFkT25seUNvbG9yLCBcIjtcXG4gICAgLS1ldWlGb3JtQ29udHJvbFN0YXRlQ29sb3I6IHRyYW5zcGFyZW50O1xcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUNvbnRyb2xBdXRvRmlsbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1Db250cm9sQXV0b0ZpbGxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuXG4gIC8vIE1ha2UgdGhlIHRleHQgY29sb3Igc2xpZ2h0bHkgbGVzcyBwcm9taW5lbnQgdGhhbiB0aGUgZGVmYXVsdCBjb2xvcnMudGV4dFxuICB2YXIgdGV4dENvbG9yID0gZXVpVGhlbWUuY29sb3JzLmRhcmtlc3RTaGFkZTtcbiAgdmFyIF9ldWlCdXR0b25Db2xvciA9IGV1aUJ1dHRvbkNvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ3ByaW1hcnknKSxcbiAgICBiYWNrZ3JvdW5kQ29sb3IgPSBfZXVpQnV0dG9uQ29sb3IuYmFja2dyb3VuZENvbG9yO1xuICB2YXIgdGludGVkQmFja2dyb3VuZENvbG9yID0gY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShiYWNrZ3JvdW5kQ29sb3IsIDAuNSkgOiB0aW50KGJhY2tncm91bmRDb2xvciwgMC43KTtcbiAgLy8gSGFja3kgd29ya2Fyb3VuZCB0byBiYWNrZ3JvdW5kLWNvbG9yLCBzaW5jZSBDaHJvbWUgZG9lc24ndCBub3JtYWxseSBhbGxvdyBvdmVycmlkaW5nIGl0cyBzdHlsZXNcbiAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvOmF1dG9maWxsI3NlY3QxXG4gIHZhciBiYWNrZ3JvdW5kU2hhZG93ID0gXCJpbnNldCAwIDAgMCAxMDB2dyBcIi5jb25jYXQodGludGVkQmFja2dyb3VuZENvbG9yKTtcblxuICAvLyBSZS1jcmVhdGUgdGhlIGJvcmRlciwgc2luY2UgdGhlIGFib3ZlIHdlYmtpdCBib3ggc2hhZG93IG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBib3JkZXIgYm94LXNoYWRvd1xuICAvLyArIGNoYW5nZSB0aGUgYm9yZGVyIGNvbG9yIHRvIG1hdGNoIHN0YXRlcywgc2luY2UgdGhlIHVuZGVybGluZSBiYWNrZ3JvdW5kIGdyYWRpZW50IG5vIGxvbmdlciB3b3Jrc1xuICB2YXIgYm9yZGVyQ29sb3IgPSB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMucHJpbWFyeVRleHQsIDAuMik7XG4gIHZhciBpbnZhbGlkQm9yZGVyID0gZXVpVGhlbWUuY29sb3JzLmRhbmdlcjtcbiAgdmFyIGJvcmRlclNoYWRvdyA9IGZ1bmN0aW9uIGJvcmRlclNoYWRvdyhjb2xvcikge1xuICAgIHJldHVybiBcImluc2V0IDAgMCAwIFwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgXCIpLmNvbmNhdChjb2xvcik7XG4gIH07XG5cbiAgLy8gVGhlc2Ugc3R5bGVzIG9ubHkgYXBwbHkvb3ZlcnJpZGUgQ2hyb21lL3dlYmtpdCBicm93c2VycyAtIEZpcmVmb3ggZG9lcyBub3Qgc2V0IGF1dG9maWxsIHN0eWxlc1xuICByZXR1cm4gXCJcXG4gICAgJjotd2Via2l0LWF1dG9maWxsIHtcXG4gICAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogXCIuY29uY2F0KHRleHRDb2xvciwgXCI7XFxuICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiBcIikuY29uY2F0KGJvcmRlclNoYWRvdyhib3JkZXJDb2xvciksIFwiLCBcIikuY29uY2F0KGJhY2tncm91bmRTaGFkb3csIFwiO1xcblxcbiAgICAgICY6aW52YWxpZCB7XFxuICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IFwiKS5jb25jYXQoYm9yZGVyU2hhZG93KGludmFsaWRCb3JkZXIpLCBcIiwgXCIpLmNvbmNhdChiYWNrZ3JvdW5kU2hhZG93LCBcIjtcXG4gICAgICB9XFxuICAgIH1cXG4gIFwiKTtcbn07XG52YXIgZXVpUGxhY2Vob2xkZXJQZXJCcm93c2VyID0gZnVuY3Rpb24gZXVpUGxhY2Vob2xkZXJQZXJCcm93c2VyKGNvbnRlbnQpIHtcbiAgcmV0dXJuIFwiXFxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsgXCIuY29uY2F0KGNvbnRlbnQsIFwiIH1cXG4gICY6Oi1tb3otcGxhY2Vob2xkZXIgeyBcIikuY29uY2F0KGNvbnRlbnQsIFwiIH1cXG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHsgXCIpLmNvbmNhdChjb250ZW50LCBcIiB9XFxuICAmOi1tb3otcGxhY2Vob2xkZXIgeyBcIikuY29uY2F0KGNvbnRlbnQsIFwiIH1cXG4gICY6OnBsYWNlaG9sZGVyIHsgXCIpLmNvbmNhdChjb250ZW50LCBcIiB9XFxuXCIpO1xufTtcblxuLyoqXG4gKiBTZWxlY3Rpb24gY3VzdG9tIGNvbnRyb2xzIC0gY2hlY2tib3hlcywgcmFkaW9zLCBhbmQgc3dpdGNoZXNcbiAqL1xuXG5leHBvcnQgdmFyIGV1aUZvcm1DdXN0b21Db250cm9sVmFyaWFibGVzID0gZnVuY3Rpb24gZXVpRm9ybUN1c3RvbUNvbnRyb2xWYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICB2YXIgc2l6ZXMgPSB7XG4gICAgY29udHJvbDogZXVpVGhlbWUuc2l6ZS5iYXNlLFxuICAgIGxpbmVIZWlnaHQ6IGV1aVRoZW1lLnNpemUubCxcbiAgICBsYWJlbEdhcDogZXVpVGhlbWUuc2l6ZS5zXG4gIH07XG4gIHZhciBjb2xvcnMgPSB7XG4gICAgdW5zZWxlY3RlZDogZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsXG4gICAgdW5zZWxlY3RlZEJvcmRlcjogY29sb3JNb2RlID09PSAnREFSSycgPyB0aW50KGV1aVRoZW1lLmNvbG9ycy5saWdodGVzdFNoYWRlLCAwLjMxKSAvLyBXQ0FHIEFBIHJlcXVpcmVtZW50c1xuICAgIDogc2hhZGUoZXVpVGhlbWUuY29sb3JzLmxpZ2h0ZXN0U2hhZGUsIDAuNCksXG4gICAgc2VsZWN0ZWQ6IGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LFxuICAgIHNlbGVjdGVkSWNvbjogZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsXG4gICAgZGlzYWJsZWQ6IGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLFxuICAgIGRpc2FibGVkSWNvbjogZXVpVGhlbWUuY29sb3JzLmRhcmtTaGFkZSxcbiAgICBkaXNhYmxlZExhYmVsOiBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0IC8vIExpZ2h0ZXIgdGhhbiBmb3JtVmFycy5kaXNhYmxlZENvbG9yIGJlY2F1c2UgaXQgdHlwaWNhbGx5IGRvZXNuJ3QgaGF2ZSBhcyBkYXJrIGEgYmFja2dyb3VuZFxuICB9O1xuICB2YXIgYW5pbWF0aW9uID0ge1xuICAgIHNwZWVkOiBldWlUaGVtZS5hbmltYXRpb24uZmFzdCxcbiAgICBlYXNpbmc6ICdlYXNlLWluJ1xuICB9O1xuICByZXR1cm4ge1xuICAgIHNpemVzOiBzaXplcyxcbiAgICBjb2xvcnM6IGNvbG9ycyxcbiAgICBhbmltYXRpb246IGFuaW1hdGlvblxuICB9O1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUN1c3RvbUNvbnRyb2xTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ3VzdG9tQ29udHJvbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgY29udHJvbFZhcnMgPSBldWlGb3JtQ3VzdG9tQ29udHJvbFZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgY2VudGVyV2l0aExhYmVsID0gbWF0aFdpdGhVbml0cyhbY29udHJvbFZhcnMuc2l6ZXMubGluZUhlaWdodCwgY29udHJvbFZhcnMuc2l6ZXMuY29udHJvbF0sIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgcmV0dXJuICh4IC0geSkgLyAyO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB3cmFwcGVyOiBcIlxcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAgIFwiLFxuICAgIGlucHV0OiB7XG4gICAgICBmYXV4SW5wdXQ6IFwiXFxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICBcIi5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0JywgY29udHJvbFZhcnMuc2l6ZXMuY29udHJvbCksIFwiXFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgY29udHJvbFZhcnMuc2l6ZXMuY29udHJvbCksIFwiXFxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcblxcbiAgICAgICAgJjpoYXMoaW5wdXQ6Zm9jdXMtdmlzaWJsZSkge1xcbiAgICAgICAgICBvdXRsaW5lOiBcIikuY29uY2F0KGV1aVRoZW1lLmZvY3VzLndpZHRoLCBcIiBzb2xpZCBcIikuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy5zZWxlY3RlZCwgXCI7XFxuICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiBcIikuY29uY2F0KGV1aVRoZW1lLmZvY3VzLndpZHRoLCBcIjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIFwiKS5jb25jYXQoZXVpQ2FuQW5pbWF0ZSwgXCIge1xcbiAgICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yLCBjb2xvcjtcXG4gICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogXCIpLmNvbmNhdChjb250cm9sVmFycy5hbmltYXRpb24uc3BlZWQsIFwiO1xcbiAgICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogXCIpLmNvbmNhdChjb250cm9sVmFycy5hbmltYXRpb24uZWFzaW5nLCBcIjtcXG4gICAgICAgIH1cXG4gICAgICBcIiksXG4gICAgICAvLyBUT0RPOiBSZXZlcnQgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvNzk4MVxuICAgICAgLy8gb25jZSBodHRwczovL2dpdGh1Yi5jb20vZHBlcmluaS9ud3NhcGkvaXNzdWVzLzEyM1xuICAgICAgLy8gaGFzIGJlZW4gZml4ZWQsIGFuZCByZXN0b3JlIGAmOmhhcygrIGxhYmVsKWAgc2VsZWN0b3JcbiAgICAgIGhhc0xhYmVsOiBcIlxcbiAgICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBjZW50ZXJXaXRoTGFiZWwpLCBcIlxcbiAgICAgIFwiKSxcbiAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgc2VsZWN0ZWQ6IFwiXFxuICAgICAgICAgIGNvbG9yOiBcIi5jb25jYXQoY29udHJvbFZhcnMuY29sb3JzLnNlbGVjdGVkSWNvbiwgXCI7XFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQoY29udHJvbFZhcnMuY29sb3JzLnNlbGVjdGVkLCBcIjtcXG4gICAgICAgIFwiKSxcbiAgICAgICAgdW5zZWxlY3RlZDogXCJcXG4gICAgICAgICAgY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIi5jb25jYXQoY29udHJvbFZhcnMuY29sb3JzLnVuc2VsZWN0ZWQsIFwiO1xcbiAgICAgICAgICBib3JkZXI6IFwiKS5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIFwiKS5jb25jYXQoY29udHJvbFZhcnMuY29sb3JzLnVuc2VsZWN0ZWRCb3JkZXIsIFwiO1xcblxcbiAgICAgICAgICAmOmhhcyhpbnB1dDpmb2N1cykge1xcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogXCIpLmNvbmNhdChjb250cm9sVmFycy5jb2xvcnMuc2VsZWN0ZWQsIFwiO1xcbiAgICAgICAgICB9XFxuICAgICAgICBcIilcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlZDoge1xuICAgICAgICBzZWxlY3RlZDogXCJcXG4gICAgICAgICAgbGFiZWw6IGRpc2FibGVkO1xcbiAgICAgICAgICBjb2xvcjogXCIuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy5kaXNhYmxlZEljb24sIFwiO1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIikuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy5kaXNhYmxlZCwgXCI7XFxuICAgICAgICBcIiksXG4gICAgICAgIHVuc2VsZWN0ZWQ6IFwiXFxuICAgICAgICAgIGxhYmVsOiBkaXNhYmxlZDtcXG4gICAgICAgICAgY29sb3I6IFwiLmNvbmNhdChjb250cm9sVmFycy5jb2xvcnMuZGlzYWJsZWQsIFwiO1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIikuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy5kaXNhYmxlZCwgXCI7XFxuICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICAgICAgICBcIilcbiAgICAgIH0sXG4gICAgICAvLyBMb29rcyBiZXR0ZXIgY2VudGVyZWQgYXQgZGlmZmVyZW50IHpvb20gbGV2ZWxzIHRoYW4ganVzdCA8RXVpSWNvbiBzaXplPVwic1wiIC8+XG4gICAgICBpY29uOiBcIlxcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KTtcXG4gICAgICBcIixcbiAgICAgIC8vIEhpZGRlbiBpbnB1dCBzaXRzIG9uIHRvcCBvZiB0aGUgdmlzaWJsZSBlbGVtZW50XG4gICAgICBoaWRkZW5JbnB1dDogXCJcXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIGluc2V0OiAwO1xcbiAgICAgICAgb3BhY2l0eTogMCAhaW1wb3J0YW50O1xcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcblxcbiAgICAgICAgJjpkaXNhYmxlZCB7XFxuICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICAgICAgICB9XFxuICAgICAgXCJcbiAgICB9LFxuICAgIGxhYmVsOiB7XG4gICAgICBsYWJlbDogXCJcXG4gICAgICAgIC8qIE5lZWRzIHRvIHVzZSBwYWRkaW5nIGFuZCBub3QgZmxleCBnYXAgZm9yIGV4dHJhIG1vdXNlIGNsaWNrIGFyZWEgKi9cXG4gICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBjb250cm9sVmFycy5zaXplcy5sYWJlbEdhcCksIFwiXFxuICAgICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChjb250cm9sVmFycy5zaXplcy5saW5lSGVpZ2h0LCBcIjtcXG4gICAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJykuZm9udFNpemUsIFwiO1xcbiAgICAgIFwiKSxcbiAgICAgIGVuYWJsZWQ6IFwiXFxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgXCIsXG4gICAgICBkaXNhYmxlZDogXCJcXG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICAgICAgICBjb2xvcjogXCIuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy5kaXNhYmxlZExhYmVsLCBcIjtcXG4gICAgICBcIilcbiAgICB9XG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJhbmNob3JDbGFzc05hbWVcIiwgXCJhbmNob3JQcm9wc1wiLCBcImNvbnRlbnRcIiwgXCJ0aXRsZVwiLCBcImRlbGF5XCIsIFwiZGlzcGxheVwiLCBcInJlcG9zaXRpb25PblNjcm9sbFwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGZpbmRQb3BvdmVyUG9zaXRpb24sIGh0bWxJZEdlbmVyYXRvciwga2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGVucXVldWVTdGF0ZUNoYW5nZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlYWN0JztcbmltcG9ydCB7IEV1aVJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyJztcbmltcG9ydCB7IEV1aVBvcnRhbCB9IGZyb20gJy4uL3BvcnRhbCc7XG5pbXBvcnQgeyBFdWlUb29sVGlwUG9wb3ZlciB9IGZyb20gJy4vdG9vbF90aXBfcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlUb29sVGlwQW5jaG9yIH0gZnJvbSAnLi90b29sX3RpcF9hbmNob3InO1xuaW1wb3J0IHsgRXVpVG9vbFRpcEFycm93IH0gZnJvbSAnLi90b29sX3RpcF9hcnJvdyc7XG5pbXBvcnQgeyB0b29sVGlwTWFuYWdlciB9IGZyb20gJy4vdG9vbF90aXBfbWFuYWdlcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBQT1NJVElPTlMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xudmFyIERJU1BMQVlTID0gWydpbmxpbmVCbG9jaycsICdibG9jayddO1xudmFyIGRlbGF5VG9Nc01hcCA9IHtcbiAgcmVndWxhcjogMjUwLFxuICBsb25nOiAyNTAgKiA1XG59O1xudmFyIERFRkFVTFRfVE9PTFRJUF9TVFlMRVMgPSB7XG4gIC8vIHBvc2l0aW9uIHRoZSB0b29sdGlwIGNvbnRlbnQgbmVhciB0aGUgdG9wLWxlZnRcbiAgLy8gY29ybmVyIG9mIHRoZSB3aW5kb3cgc28gaXQgY2FuJ3QgY3JlYXRlIHNjcm9sbGJhcnNcbiAgLy8gNTAsNTAgYmVjYXVzZSB3aG8ga25vd3Mgd2hhdCBuZWdhdGl2ZSBtYXJnaW5zLCBwYWRkaW5nLCBldGNcbiAgdG9wOiA1MCxcbiAgbGVmdDogNTAsXG4gIC8vIGp1c3QgaW4gY2FzZSwgYXZvaWQgYW55IHBvdGVudGlhbCBmbGlja2VyIGJ5IGhpZGluZ1xuICAvLyB0aGUgdG9vbHRpcCBiZWZvcmUgaXQgaXMgcG9zaXRpb25lZFxuICBvcGFjaXR5OiAwLFxuICAvLyBwcmV2ZW50IGFjY2lkZW50YWwgbW91c2UgaW50ZXJhY3Rpb24gd2hpbGUgcG9zaXRpb25pbmdcbiAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbn07XG5leHBvcnQgdmFyIEV1aVRvb2xUaXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpVG9vbFRpcCgpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVRvb2xUaXApO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aVRvb2xUaXAsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIl9pc01vdW50ZWRcIiwgZmFsc2UpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJhbmNob3JcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInBvcG92ZXJcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRpbWVvdXRJZFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzdGF0ZVwiLCB7XG4gICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZSxcbiAgICAgIGNhbGN1bGF0ZWRQb3NpdGlvbjogX3RoaXMucHJvcHMucG9zaXRpb24sXG4gICAgICB0b29sVGlwU3R5bGVzOiBERUZBVUxUX1RPT0xUSVBfU1RZTEVTLFxuICAgICAgYXJyb3dTdHlsZXM6IHVuZGVmaW5lZCxcbiAgICAgIGlkOiBfdGhpcy5wcm9wcy5pZCB8fCBodG1sSWRHZW5lcmF0b3IoKSgpXG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNsZWFyQW5pbWF0aW9uVGltZW91dFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMudGltZW91dElkKSB7XG4gICAgICAgIF90aGlzLnRpbWVvdXRJZCA9IGNsZWFyVGltZW91dChfdGhpcy50aW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0ZXN0QW5jaG9yXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHdoZW4gdGhlIHRvb2x0aXAgaXMgdmlzaWJsZSwgdGhpcyBjaGVja3MgaWYgdGhlIGFuY2hvciBpcyBzdGlsbCBwYXJ0IG9mIGRvY3VtZW50XG4gICAgICAvLyB0aGlzIGZpeGVzIHdoZW4gdGhlIHJlYWN0IHJvb3QgaXMgcmVtb3ZlZCBmcm9tIHRoZSBkb20gd2l0aG91dCB1bm1vdW50aW5nXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzExMDVcbiAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNvbnRhaW5zKF90aGlzLmFuY2hvcikgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIHRoZSBhbmNob3IgaXMgbm8gbG9uZ2VyIHBhcnQgb2YgYGRvY3VtZW50YFxuICAgICAgICBfdGhpcy5oaWRlVG9vbFRpcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKF90aGlzLnN0YXRlLnZpc2libGUpIHtcbiAgICAgICAgICAvLyBpZiBzdGlsbCB2aXNpYmxlLCBrZWVwIGNoZWNraW5nXG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLnRlc3RBbmNob3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNldEFuY2hvclJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICByZXR1cm4gX3RoaXMuYW5jaG9yID0gcmVmO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZXRQb3BvdmVyUmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIHJldHVybiBfdGhpcy5wb3BvdmVyID0gcmVmO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzaG93VG9vbFRpcFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIV90aGlzLnRpbWVvdXRJZCkge1xuICAgICAgICBfdGhpcy50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbnF1ZXVlU3RhdGVDaGFuZ2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRvb2xUaXBNYW5hZ2VyLnJlZ2lzdGVyVG9vbHRpcChfdGhpcy5oaWRlVG9vbFRpcCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGRlbGF5VG9Nc01hcFtfdGhpcy5wcm9wcy5kZWxheV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwb3NpdGlvblRvb2xUaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlcXVlc3RlZFBvc2l0aW9uID0gX3RoaXMucHJvcHMucG9zaXRpb247XG4gICAgICBpZiAoIV90aGlzLmFuY2hvciB8fCAhX3RoaXMucG9wb3Zlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgX2ZpbmRQb3BvdmVyUG9zaXRpb24gPSBmaW5kUG9wb3ZlclBvc2l0aW9uKHtcbiAgICAgICAgICBhbmNob3I6IF90aGlzLmFuY2hvcixcbiAgICAgICAgICBwb3BvdmVyOiBfdGhpcy5wb3BvdmVyLFxuICAgICAgICAgIHBvc2l0aW9uOiByZXF1ZXN0ZWRQb3NpdGlvbixcbiAgICAgICAgICBvZmZzZXQ6IDE2LFxuICAgICAgICAgIC8vIG9mZnNldCBwb3BvdmVyIDE2cHggZnJvbSB0aGUgYW5jaG9yXG4gICAgICAgICAgYXJyb3dDb25maWc6IHtcbiAgICAgICAgICAgIGFycm93V2lkdGg6IDEyLFxuICAgICAgICAgICAgYXJyb3dCdWZmZXI6IDRcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBwb3NpdGlvbiA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLnBvc2l0aW9uLFxuICAgICAgICBsZWZ0ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24ubGVmdCxcbiAgICAgICAgdG9wID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24udG9wLFxuICAgICAgICBhcnJvdyA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLmFycm93O1xuXG4gICAgICAvLyBJZiBlbmNyb2FjaGluZyB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgd2luZG93OlxuICAgICAgLy8gV2hlbiBgcHJvcHMuY29udGVudGAgY2hhbmdlcyBhbmQgaXMgbG9uZ2VyIHRoYW4gYHByZXZQcm9wcy5jb250ZW50YCwgdGhlIHRvb2x0aXAgd2lkdGggcmVtYWlucyBhbmRcbiAgICAgIC8vIHRoZSByZXNpemVPYnNlcnZlciBjYWxsYmFjayB3aWxsIGZpcmUgdHdpY2UgKG9uY2UgZm9yIHZlcnRpY2FsIHJlc2l6ZSBjYXVzZWQgYnkgdGV4dCBsaW5lIHdyYXBwaW5nLFxuICAgICAgLy8gb25jZSBmb3IgYSBzdWJzZXF1ZW50IHBvc2l0aW9uIGNvcnJlY3Rpb24pIGFuZCBjYXVzZSBhIGZsYXNoIHJlcmVuZGVyIGFuZCByZXBvc2l0aW9uLlxuICAgICAgLy8gVG8gcHJldmVudCB0aGlzLCB3ZSBjYW4gb3JpZW50IGZyb20gdGhlIHJpZ2h0IHNvIHRoYXQgdGV4dCBsaW5lIHdyYXBwaW5nIGRvZXMgbm90IG9jY3VyLCBuZWdhdGluZ1xuICAgICAgLy8gdGhlIHNlY29uZCByZXNpemVPYnNlcnZlciBjYWxsYmFjayBjYWxsLlxuICAgICAgdmFyIHdpbmRvd1dpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgdmFyIHVzZVJpZ2h0VmFsdWUgPSB3aW5kb3dXaWR0aCAvIDIgPCBsZWZ0O1xuICAgICAgdmFyIHRvb2xUaXBTdHlsZXMgPSB7XG4gICAgICAgIHRvcDogdG9wLFxuICAgICAgICBsZWZ0OiB1c2VSaWdodFZhbHVlID8gJ2F1dG8nIDogbGVmdCxcbiAgICAgICAgcmlnaHQ6IHVzZVJpZ2h0VmFsdWUgPyB3aW5kb3dXaWR0aCAtIGxlZnQgLSBfdGhpcy5wb3BvdmVyLm9mZnNldFdpZHRoIDogJ2F1dG8nXG4gICAgICB9O1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBjYWxjdWxhdGVkUG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICB0b29sVGlwU3R5bGVzOiB0b29sVGlwU3R5bGVzLFxuICAgICAgICBhcnJvd1N0eWxlczogYXJyb3dcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJoaWRlVG9vbFRpcFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5jbGVhckFuaW1hdGlvblRpbWVvdXQoKTtcbiAgICAgIGVucXVldWVTdGF0ZUNoYW5nZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5faXNNb3VudGVkKSB7XG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICB0b29sVGlwU3R5bGVzOiBERUZBVUxUX1RPT0xUSVBfU1RZTEVTLFxuICAgICAgICAgICAgYXJyb3dTdHlsZXM6IHVuZGVmaW5lZFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRvb2xUaXBNYW5hZ2VyLmRlcmVnaXN0ZXJUb29sVGlwKF90aGlzLmhpZGVUb29sVGlwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBfdGhpcy5zaG93VG9vbFRpcCgpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkJsdXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuaGlkZVRvb2xUaXAoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Fc2NhcGVLZXlcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkVTQ0FQRSkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pOyAvLyBBbGxvd3MgbW91c2luZyBvdmVyIGJhY2sgaW50byB0aGUgdG9vbHRpcCB0byB3b3JrIGNvcnJlY3RseVxuICAgICAgICBfdGhpcy5oaWRlVG9vbFRpcCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbk1vdXNlT3V0XCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gUHJldmVudCBtb3VzaW5nIG92ZXIgY2hpbGRyZW4gZnJvbSBoaWRpbmcgdGhlIHRvb2x0aXAgYnkgdGVzdGluZyBmb3Igd2hldGhlciB0aGUgbW91c2UgaGFzXG4gICAgICAvLyBsZWZ0IHRoZSBhbmNob3IgZm9yIGEgbm9uLWNoaWxkLlxuICAgICAgaWYgKF90aGlzLmFuY2hvciA9PT0gZXZlbnQucmVsYXRlZFRhcmdldCB8fCBfdGhpcy5hbmNob3IgIT0gbnVsbCAmJiAhX3RoaXMuYW5jaG9yLmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgIGlmICghX3RoaXMuc3RhdGUuaGFzRm9jdXMpIHtcbiAgICAgICAgICBfdGhpcy5oaWRlVG9vbFRpcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoX3RoaXMucHJvcHMub25Nb3VzZU91dCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbk1vdXNlT3V0KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aVRvb2xUaXAsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aVRvb2xUaXAsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLnByb3BzLnJlcG9zaXRpb25PblNjcm9sbCkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblRvb2xUaXAsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuY2xlYXJBbmltYXRpb25UaW1lb3V0KCk7XG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uVG9vbFRpcCwgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIGlmIChwcmV2U3RhdGUudmlzaWJsZSA9PT0gZmFsc2UgJiYgdGhpcy5zdGF0ZS52aXNpYmxlID09PSB0cnVlKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnRlc3RBbmNob3IpO1xuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGUgc2Nyb2xsIGxpc3RlbmVyXG4gICAgICBpZiAocHJldlByb3BzLnJlcG9zaXRpb25PblNjcm9sbCAhPT0gdGhpcy5wcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Ub29sVGlwLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblRvb2xUaXAsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIGFuY2hvckNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmFuY2hvckNsYXNzTmFtZSxcbiAgICAgICAgYW5jaG9yUHJvcHMgPSBfdGhpcyRwcm9wcy5hbmNob3JQcm9wcyxcbiAgICAgICAgY29udGVudCA9IF90aGlzJHByb3BzLmNvbnRlbnQsXG4gICAgICAgIHRpdGxlID0gX3RoaXMkcHJvcHMudGl0bGUsXG4gICAgICAgIGRlbGF5ID0gX3RoaXMkcHJvcHMuZGVsYXksXG4gICAgICAgIGRpc3BsYXkgPSBfdGhpcyRwcm9wcy5kaXNwbGF5LFxuICAgICAgICByZXBvc2l0aW9uT25TY3JvbGwgPSBfdGhpcyRwcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBhcnJvd1N0eWxlcyA9IF90aGlzJHN0YXRlLmFycm93U3R5bGVzLFxuICAgICAgICBpZCA9IF90aGlzJHN0YXRlLmlkLFxuICAgICAgICB0b29sVGlwU3R5bGVzID0gX3RoaXMkc3RhdGUudG9vbFRpcFN0eWxlcyxcbiAgICAgICAgdmlzaWJsZSA9IF90aGlzJHN0YXRlLnZpc2libGUsXG4gICAgICAgIGNhbGN1bGF0ZWRQb3NpdGlvbiA9IF90aGlzJHN0YXRlLmNhbGN1bGF0ZWRQb3NpdGlvbjtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVG9vbFRpcCcsIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgYW5jaG9yQ2xhc3NlcyA9IGNsYXNzTmFtZXMoYW5jaG9yQ2xhc3NOYW1lLCBhbmNob3JQcm9wcyA9PT0gbnVsbCB8fCBhbmNob3JQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYW5jaG9yUHJvcHMuY2xhc3NOYW1lKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXBBbmNob3IsIF9leHRlbmRzKHt9LCBhbmNob3JQcm9wcywge1xuICAgICAgICByZWY6IHRoaXMuc2V0QW5jaG9yUmVmLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBvbkZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5vbkVzY2FwZUtleSxcbiAgICAgICAgb25Nb3VzZU92ZXI6IHRoaXMuc2hvd1Rvb2xUaXAsXG4gICAgICAgIG9uTW91c2VPdXQ6IHRoaXMub25Nb3VzZU91dCxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBjbGFzc05hbWU6IGFuY2hvckNsYXNzZXMsXG4gICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXG4gICAgICAgIGlzVmlzaWJsZTogdmlzaWJsZVxuICAgICAgfSksIGNoaWxkcmVuKSwgdmlzaWJsZSAmJiAoY29udGVudCB8fCB0aXRsZSkgJiYgX19fRW1vdGlvbkpTWChFdWlQb3J0YWwsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcFBvcG92ZXIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBzdHlsZTogdG9vbFRpcFN0eWxlcyxcbiAgICAgICAgcG9zaXRpb25Ub29sVGlwOiB0aGlzLnBvc2l0aW9uVG9vbFRpcCxcbiAgICAgICAgcG9wb3ZlclJlZjogdGhpcy5zZXRQb3BvdmVyUmVmLFxuICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgcm9sZTogXCJ0b29sdGlwXCIsXG4gICAgICAgIGNhbGN1bGF0ZWRQb3NpdGlvbjogY2FsY3VsYXRlZFBvc2l0aW9uXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlUb29sVGlwQXJyb3csIHtcbiAgICAgICAgc3R5bGU6IGFycm93U3R5bGVzLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpVG9vbFRpcF9fYXJyb3dcIixcbiAgICAgICAgcG9zaXRpb246IGNhbGN1bGF0ZWRQb3NpdGlvblxuICAgICAgfSksIF9fX0Vtb3Rpb25KU1goRXVpUmVzaXplT2JzZXJ2ZXIsIHtcbiAgICAgICAgb25SZXNpemU6IHRoaXMucG9zaXRpb25Ub29sVGlwXG4gICAgICB9LCBmdW5jdGlvbiAocmVzaXplUmVmKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICByZWY6IHJlc2l6ZVJlZlxuICAgICAgICB9LCBjb250ZW50KTtcbiAgICAgIH0pKSkpO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aVRvb2xUaXAsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgcG9zaXRpb246ICd0b3AnLFxuICBkZWxheTogJ3JlZ3VsYXInLFxuICBkaXNwbGF5OiAnaW5saW5lQmxvY2snXG59KTtcbkV1aVRvb2xUaXAucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgc3BhbiB3cmFwcGluZyB0aGUgdHJpZ2dlci5cbiAgICAgKi9cbiAgYW5jaG9yQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgc3BhbiB3cmFwcGluZyB0aGUgdHJpZ2dlci5cbiAgICAgKi9cbiAgYW5jaG9yUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIC8qKlxuICAgICAqIFRoZSBpbi12aWV3IHRyaWdnZXIgZm9yIHlvdXIgdG9vbHRpcC5cbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSB0b29sdGlwIGl0c2VsZiwgbm90IHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFRoZSBtYWluIGNvbnRlbnQgb2YgeW91ciB0b29sdGlwLlxuICAgICAqL1xuICBjb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogQ29tbW9uIGRpc3BsYXkgYWx0ZXJuYXRpdmVzIGZvciB0aGUgYW5jaG9yIHdyYXBwZXJcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogRGVsYXkgYmVmb3JlIHNob3dpbmcgdG9vbHRpcC4gR29vZCBmb3IgcmVwZWF0YWJsZSBpdGVtcy5cbiAgICAgKi9cbiAgZGVsYXk6IFByb3BUeXBlcy5vbmVPZihbXCJyZWd1bGFyXCIsIFwibG9uZ1wiXSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgdGl0bGUgZm9yIHlvdXIgdG9vbHRpcC5cbiAgICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBVbmxlc3MgeW91IHByb3ZpZGUgb25lLCB0aGlzIHdpbGwgYmUgcmFuZG9tbHkgZ2VuZXJhdGVkLlxuICAgICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogU3VnZ2VzdGVkIHBvc2l0aW9uLiBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20gZm9yIGl0IHRoaXMgd2lsbCBiZSBjaGFuZ2VkLlxuICAgICAqL1xuICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAsIHRoZSB0b29sdGlwJ3MgcG9zaXRpb24gaXMgcmUtY2FsY3VsYXRlZCB3aGVuIHRoZSB1c2VyXG4gICAgICogc2Nyb2xscy4gVGhpcyBzdXBwb3J0cyBoYXZpbmcgZml4ZWQtcG9zaXRpb24gdG9vbHRpcCBhbmNob3JzLlxuICAgICAqXG4gICAgICogV2hlbiBuZXN0aW5nIGFuIGBFdWlUb29sdGlwYCBpbiBhIHNjcm9sbGFibGUgY29udGFpbmVyLCBgcmVwb3NpdGlvbk9uU2Nyb2xsYCBzaG91bGQgYmUgYHRydWVgXG4gICAgICovXG4gIHJlcG9zaXRpb25PblNjcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIElmIHN1cHBsaWVkLCBjYWxsZWQgd2hlbiBtb3VzZSBtb3ZlbWVudCBjYXVzZXMgdGhlIHRvb2wgdGlwIHRvIGJlXG4gICAgICogaGlkZGVuLlxuICAgICAqL1xuICBvbk1vdXNlT3V0OiBQcm9wVHlwZXMuZnVuYyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlcic7XG5leHBvcnQgdmFyIGhhc1Jlc2l6ZU9ic2VydmVyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5SZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgdmFyIEV1aVJlc2l6ZU9ic2VydmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRXVpT2JzZXJ2ZXIpIHtcbiAgZnVuY3Rpb24gRXVpUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlSZXNpemVPYnNlcnZlcik7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpUmVzaXplT2JzZXJ2ZXIsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm5hbWVcIiwgJ0V1aVJlc2l6ZU9ic2VydmVyJyk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0YXRlXCIsIHtcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIHdpZHRoOiAwXG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uUmVzaXplXCIsIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgICAgZW50cnkgPSBfcmVmMlswXTtcbiAgICAgIHZhciBfZW50cnkkYm9yZGVyQm94U2l6ZSQgPSBlbnRyeS5ib3JkZXJCb3hTaXplWzBdLFxuICAgICAgICB3aWR0aCA9IF9lbnRyeSRib3JkZXJCb3hTaXplJC5pbmxpbmVTaXplLFxuICAgICAgICBoZWlnaHQgPSBfZW50cnkkYm9yZGVyQm94U2l6ZSQuYmxvY2tTaXplO1xuXG4gICAgICAvLyBDaGVjayBmb3IgYWN0dWFsIHJlc2l6ZSBldmVudFxuICAgICAgaWYgKF90aGlzLnN0YXRlLmhlaWdodCA9PT0gaGVpZ2h0ICYmIF90aGlzLnN0YXRlLndpZHRoID09PSB3aWR0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBfdGhpcy5wcm9wcy5vblJlc2l6ZSh7XG4gICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICB3aWR0aDogd2lkdGhcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYmVnaW5PYnNlcnZlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRoZSBzdXBlcmNsYXNzIGNoZWNrcyB0aGF0IGNoaWxkTm9kZSBpcyBub3QgbnVsbCBiZWZvcmUgaW52b2tpbmdcbiAgICAgIC8vIGJlZ2luT2JzZXJ2ZSgpXG4gICAgICB2YXIgY2hpbGROb2RlID0gX3RoaXMuY2hpbGROb2RlO1xuICAgICAgX3RoaXMub2JzZXJ2ZXIgPSBtYWtlUmVzaXplT2JzZXJ2ZXIoY2hpbGROb2RlLCBfdGhpcy5vblJlc2l6ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlSZXNpemVPYnNlcnZlciwgX0V1aU9ic2VydmVyKTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlSZXNpemVPYnNlcnZlcik7XG59KEV1aU9ic2VydmVyKTtcbnZhciBtYWtlUmVzaXplT2JzZXJ2ZXIgPSBmdW5jdGlvbiBtYWtlUmVzaXplT2JzZXJ2ZXIobm9kZSwgY2FsbGJhY2spIHtcbiAgdmFyIG9ic2VydmVyO1xuICBpZiAoaGFzUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICBvYnNlcnZlciA9IG5ldyB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICAgIG9ic2VydmVyLm9ic2VydmUobm9kZSk7XG4gIH1cbiAgcmV0dXJuIG9ic2VydmVyO1xufTtcbmV4cG9ydCB2YXIgdXNlUmVzaXplT2JzZXJ2ZXIgPSBmdW5jdGlvbiB1c2VSZXNpemVPYnNlcnZlcihjb250YWluZXIsIGRpbWVuc2lvbikge1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoe1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9KSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBzaXplID0gX3VzZVN0YXRlMlswXSxcbiAgICBfc2V0U2l6ZSA9IF91c2VTdGF0ZTJbMV07XG5cbiAgLy8gX2N1cnJlbnREaW1lbnNpb25zIGFuZCBfc2V0U2l6ZSBhcmUgdXNlZCB0byBvbmx5IHN0b3JlIHRoZVxuICAvLyBuZXcgc3RhdGUgKGFuZCB0cmlnZ2VyIGEgcmUtcmVuZGVyKSB3aGVuIHRoZSBuZXcgZGltZW5zaW9ucyBhY3R1YWxseSBkaWZmZXJcbiAgdmFyIF9jdXJyZW50RGltZW5zaW9ucyA9IHVzZVJlZihzaXplKTtcbiAgdmFyIHNldFNpemUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZGltZW5zaW9ucykge1xuICAgIHZhciBkb2VzV2lkdGhNYXR0ZXIgPSBkaW1lbnNpb24gIT09ICdoZWlnaHQnO1xuICAgIHZhciBkb2VzSGVpZ2h0TWF0dGVyID0gZGltZW5zaW9uICE9PSAnd2lkdGgnO1xuICAgIGlmIChkb2VzV2lkdGhNYXR0ZXIgJiYgX2N1cnJlbnREaW1lbnNpb25zLmN1cnJlbnQud2lkdGggIT09IGRpbWVuc2lvbnMud2lkdGggfHwgZG9lc0hlaWdodE1hdHRlciAmJiBfY3VycmVudERpbWVuc2lvbnMuY3VycmVudC5oZWlnaHQgIT09IGRpbWVuc2lvbnMuaGVpZ2h0KSB7XG4gICAgICBfY3VycmVudERpbWVuc2lvbnMuY3VycmVudCA9IGRpbWVuc2lvbnM7XG4gICAgICBfc2V0U2l6ZShkaW1lbnNpb25zKTtcbiAgICB9XG4gIH0sIFtkaW1lbnNpb25dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29udGFpbmVyICE9IG51bGwpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IG1ha2VSZXNpemVPYnNlcnZlcihjb250YWluZXIsIGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMSksXG4gICAgICAgICAgZW50cnkgPSBfcmVmNFswXTtcbiAgICAgICAgdmFyIF9lbnRyeSRib3JkZXJCb3hTaXplJDIgPSBlbnRyeS5ib3JkZXJCb3hTaXplWzBdLFxuICAgICAgICAgIGlubGluZVNpemUgPSBfZW50cnkkYm9yZGVyQm94U2l6ZSQyLmlubGluZVNpemUsXG4gICAgICAgICAgYmxvY2tTaXplID0gX2VudHJ5JGJvcmRlckJveFNpemUkMi5ibG9ja1NpemU7XG4gICAgICAgIHNldFNpemUoe1xuICAgICAgICAgIHdpZHRoOiBpbmxpbmVTaXplLFxuICAgICAgICAgIGhlaWdodDogYmxvY2tTaXplXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb2JzZXJ2ZXIgJiYgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U2l6ZSh7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDBcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2NvbnRhaW5lciwgc2V0U2l6ZV0pO1xuICByZXR1cm4gc2l6ZTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIEV1aU9ic2VydmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aU9ic2VydmVyKCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpT2JzZXJ2ZXIpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aU9ic2VydmVyLCBbXS5jb25jYXQoYXJncykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJuYW1lXCIsICdFdWlPYnNlcnZlcicpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjaGlsZE5vZGVcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9ic2VydmVyXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ1cGRhdGVDaGlsZE5vZGVcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgaWYgKF90aGlzLmNoaWxkTm9kZSA9PT0gcmVmKSByZXR1cm47IC8vIG5vZGUgaGFzbid0IGNoYW5nZWRcblxuICAgICAgLy8gaWYgdGhlcmUncyBhbiBleGlzdGluZyBvYnNlcnZlciBkaXNjb25uZWN0IGl0XG4gICAgICBpZiAoX3RoaXMub2JzZXJ2ZXIgIT0gbnVsbCkge1xuICAgICAgICBfdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgIF90aGlzLm9ic2VydmVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIF90aGlzLmNoaWxkTm9kZSA9IHJlZjtcbiAgICAgIGlmIChfdGhpcy5jaGlsZE5vZGUgIT0gbnVsbCkge1xuICAgICAgICBfdGhpcy5iZWdpbk9ic2VydmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYmVnaW5PYnNlcnZlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXVpT2JzZXJ2ZXIgaGFzIG5vIGRlZmF1bHQgb2JzZXJ2YXRpb24gbWV0aG9kJyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlPYnNlcnZlciwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpT2JzZXJ2ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuY2hpbGROb2RlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiXCIuY29uY2F0KHRoaXMubmFtZSwgXCIgZGlkIG5vdCByZWNlaXZlIGEgcmVmXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5vYnNlcnZlciAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiBwcm9wcy5jaGlsZHJlbih0aGlzLnVwZGF0ZUNoaWxkTm9kZSk7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIE5PVEU6IFdlIGNhbid0IHRlc3QgdGhpcyBjb21wb25lbnQgYmVjYXVzZSBFbnp5bWUgZG9lc24ndCBzdXBwb3J0IHJlbmRlcmluZ1xuICogaW50byBwb3J0YWxzLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgRXVpTmVzdGVkVGhlbWVDb250ZXh0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlUHJvcHNXaXRoQ29tcG9uZW50RGVmYXVsdHMgfSBmcm9tICcuLi9wcm92aWRlci9jb21wb25lbnRfZGVmYXVsdHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBJTlNFUlRfUE9TSVRJT05TID0gWydhZnRlcicsICdiZWZvcmUnXTtcbnZhciBpbnNlcnRQb3NpdGlvbnMgPSB7XG4gIGFmdGVyOiAnYWZ0ZXJlbmQnLFxuICBiZWZvcmU6ICdiZWZvcmViZWdpbidcbn07XG5leHBvcnQgdmFyIEV1aVBvcnRhbCA9IGZ1bmN0aW9uIEV1aVBvcnRhbChwcm9wcykge1xuICB2YXIgcHJvcHNXaXRoRGVmYXVsdHMgPSB1c2VQcm9wc1dpdGhDb21wb25lbnREZWZhdWx0cygnRXVpUG9ydGFsJywgcHJvcHMpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3J0YWxDbGFzcywgcHJvcHNXaXRoRGVmYXVsdHMpO1xufTtcbkV1aVBvcnRhbC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBgRXVpUG9ydGFsYCB3aWxsIGluc2VydCBpdHNlbGZcbiAgICAgKiBpbnRvIHRoZSBlbmQgb2YgdGhlIGBkb2N1bWVudC5ib2R5YCBieSBkZWZhdWx0XG4gICAgICovXG4gIGluc2VydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzaWJsaW5nOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgcG9zaXRpb246IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAgICogT3B0aW9uYWwgcmVmIGNhbGxiYWNrXG4gICAgICovXG4gIHBvcnRhbFJlZjogUHJvcFR5cGVzLmZ1bmNcbn07XG5leHBvcnQgdmFyIEV1aVBvcnRhbENsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aVBvcnRhbENsYXNzKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlQb3J0YWxDbGFzcyk7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aVBvcnRhbENsYXNzLCBbcHJvcHNdKTtcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHBvcnRhbE5vZGU6IG51bGxcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpUG9ydGFsQ2xhc3MsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aVBvcnRhbENsYXNzLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBpbnNlcnQgPSB0aGlzLnByb3BzLmluc2VydDtcbiAgICAgIHZhciBwb3J0YWxOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBwb3J0YWxOb2RlLmRhdGFzZXQuZXVpcG9ydGFsID0gJ3RydWUnO1xuICAgICAgaWYgKGluc2VydCA9PSBudWxsKSB7XG4gICAgICAgIC8vIG5vIGluc2VydGlvbiBkZWZpbmVkLCBhcHBlbmQgdG8gYm9keVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBvcnRhbE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaW5zZXJ0aW5nIGJlZm9yZSBvciBhZnRlciBhbiBlbGVtZW50XG4gICAgICAgIHZhciBzaWJsaW5nID0gaW5zZXJ0LnNpYmxpbmcsXG4gICAgICAgICAgcG9zaXRpb24gPSBpbnNlcnQucG9zaXRpb247XG4gICAgICAgIHNpYmxpbmcuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KGluc2VydFBvc2l0aW9uc1twb3NpdGlvbl0sIHBvcnRhbE5vZGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRUaGVtZUNvbG9yKHBvcnRhbE5vZGUpO1xuICAgICAgdGhpcy51cGRhdGVQb3J0YWxSZWYocG9ydGFsTm9kZSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aXRoIHBvcnRhbE5vZGUgdG8gaW50ZW50aW9uYWxseSB0cmlnZ2VyIGNvbXBvbmVudCByZXJlbmRlclxuICAgICAgLy8gYW5kIGNhbGwgY3JlYXRlUG9ydGFsIHdpdGggY29ycmVjdCByb290IGVsZW1lbnQgaW4gcmVuZGVyKClcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwb3J0YWxOb2RlOiBwb3J0YWxOb2RlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB2YXIgcG9ydGFsTm9kZSA9IHRoaXMuc3RhdGUucG9ydGFsTm9kZTtcbiAgICAgIGlmIChwb3J0YWxOb2RlICE9PSBudWxsICYmIHBvcnRhbE5vZGUgIT09IHZvaWQgMCAmJiBwb3J0YWxOb2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgcG9ydGFsTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHBvcnRhbE5vZGUpO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVQb3J0YWxSZWYobnVsbCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSBpbmhlcml0ZWQgY29sb3Igb2YgdGhlIHBvcnRhbCBiYXNlZCBvbiB0aGUgd3JhcHBpbmcgRXVpVGhlbWVQcm92aWRlclxuICB9LCB7XG4gICAga2V5OiBcInNldFRoZW1lQ29sb3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0VGhlbWVDb2xvcihwb3J0YWxOb2RlKSB7XG4gICAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICAgIHZhciBfdGhpcyRjb250ZXh0ID0gdGhpcy5jb250ZXh0LFxuICAgICAgICAgIGhhc0RpZmZlcmVudENvbG9yRnJvbUdsb2JhbFRoZW1lID0gX3RoaXMkY29udGV4dC5oYXNEaWZmZXJlbnRDb2xvckZyb21HbG9iYWxUaGVtZSxcbiAgICAgICAgICBjb2xvckNsYXNzTmFtZSA9IF90aGlzJGNvbnRleHQuY29sb3JDbGFzc05hbWU7XG4gICAgICAgIGlmIChoYXNEaWZmZXJlbnRDb2xvckZyb21HbG9iYWxUaGVtZSAmJiB0aGlzLnByb3BzLmluc2VydCA9PSBudWxsKSB7XG4gICAgICAgICAgcG9ydGFsTm9kZS5jbGFzc0xpc3QuYWRkKGNvbG9yQ2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1cGRhdGVQb3J0YWxSZWZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlUG9ydGFsUmVmKHJlZikge1xuICAgICAgaWYgKHRoaXMucHJvcHMucG9ydGFsUmVmKSB7XG4gICAgICAgIHRoaXMucHJvcHMucG9ydGFsUmVmKHJlZik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgcG9ydGFsTm9kZSA9IHRoaXMuc3RhdGUucG9ydGFsTm9kZTtcbiAgICAgIGlmICghcG9ydGFsTm9kZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3JlYXRlUG9ydGFsKHRoaXMucHJvcHMuY2hpbGRyZW4sIHBvcnRhbE5vZGUpO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aVBvcnRhbENsYXNzLCBcImNvbnRleHRUeXBlXCIsIEV1aU5lc3RlZFRoZW1lQ29udGV4dCk7XG5FdWlQb3J0YWxDbGFzcy5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBgRXVpUG9ydGFsYCB3aWxsIGluc2VydCBpdHNlbGZcbiAgICAgKiBpbnRvIHRoZSBlbmQgb2YgdGhlIGBkb2N1bWVudC5ib2R5YCBieSBkZWZhdWx0XG4gICAgICovXG4gIGluc2VydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzaWJsaW5nOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgcG9zaXRpb246IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAgICogT3B0aW9uYWwgcmVmIGNhbGxiYWNrXG4gICAgICovXG4gIHBvcnRhbFJlZjogUHJvcFR5cGVzLmZ1bmNcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuLy8gRGVjbGFyaW5nIGFzIGEgc3RhdGljIGNvbnN0IGZvciByZWZlcmVuY2UgaW50ZWdyaXR5L3JlZHVjaW5nIHJlcmVuZGVyc1xudmFyIGVtcHR5RGVmYXVsdHMgPSB7fTtcblxuLypcbiAqIENvbnRleHRcbiAqL1xuZXhwb3J0IHZhciBFdWlDb21wb25lbnREZWZhdWx0c0NvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChlbXB0eURlZmF1bHRzKTtcblxuLypcbiAqIENvbXBvbmVudFxuICovXG5cbmV4cG9ydCB2YXIgRXVpQ29tcG9uZW50RGVmYXVsdHNQcm92aWRlciA9IGZ1bmN0aW9uIEV1aUNvbXBvbmVudERlZmF1bHRzUHJvdmlkZXIoX3JlZikge1xuICB2YXIgX3JlZiRjb21wb25lbnREZWZhdWx0ID0gX3JlZi5jb21wb25lbnREZWZhdWx0cyxcbiAgICBjb21wb25lbnREZWZhdWx0cyA9IF9yZWYkY29tcG9uZW50RGVmYXVsdCA9PT0gdm9pZCAwID8gZW1wdHlEZWZhdWx0cyA6IF9yZWYkY29tcG9uZW50RGVmYXVsdCxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbXBvbmVudERlZmF1bHRzQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb21wb25lbnREZWZhdWx0c1xuICB9LCBjaGlsZHJlbik7XG59O1xuXG4vKlxuICogSG9va3NcbiAqL1xuRXVpQ29tcG9uZW50RGVmYXVsdHNQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbXBvbmVudERlZmF1bHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogUHJvdmlkZSBhIGdsb2JhbCBjb25maWd1cmF0aW9uIGZvciBFdWlQb3J0YWwncyBkZWZhdWx0IGluc2VydGlvbiBwb3NpdGlvbi5cbiAgICAgICAqL1xuICAgIEV1aVBvcnRhbDogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFByb3ZpZGUgYSBnbG9iYWwgY29uZmlndXJhdGlvbiBmb3IgRXVpRm9jdXNUcmFwJ3MgYGdhcE1vZGVgIGFuZCBgY3Jvc3NGcmFtZWAgcHJvcHNcbiAgICAgICAqL1xuICAgIEV1aUZvY3VzVHJhcDogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFByb3ZpZGUgZ2xvYmFsIHNldHRpbmdzIGZvciBFdWlUYWJsZVBhZ2luYXRpb24ncyBwcm9wcyB0aGF0IGFmZmVjdCBwYWdlIHNpemVcbiAgICAgICAqIC8gdGhlIHJvd3MgcGVyIHBhZ2Ugc2VsZWN0aW9uLlxuICAgICAgICpcbiAgICAgICAqIFRoZXNlIGRlZmF1bHRzIHdpbGwgYmUgaW5oZXJpdGVkIGFsbCB0YWJsZSBhbmQgZ3JpZCBjb21wb25lbnRzIHRoYXQgdXRpbGl6ZSBFdWlUYWJsZVBhZ2luYXRpb24uXG4gICAgICAgKi9cbiAgICBFdWlUYWJsZVBhZ2luYXRpb246IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBQcm92aWRlIGEgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZm9yIEV1aVRhYmxlJ3MgYHJlc3BvbnNpdmVCcmVha3BvaW50YCBwcm9wLiBEZWZhdWx0cyB0byBgJ3MnYC5cbiAgICAgICAqXG4gICAgICAgKiBEZWZhdWx0cyB3aWxsIGJlIGluaGVyaXRlZCBieSBhbGwgYEV1aUJhc2ljVGFibGVgcyBhbmQgYEV1aUluTWVtb3J5VGFibGVgcy5cbiAgICAgICAqL1xuICAgIEV1aVRhYmxlOiBQcm9wVHlwZXMuYW55XG4gIH0pXG59O1xuZXhwb3J0IHZhciB1c2VDb21wb25lbnREZWZhdWx0cyA9IGZ1bmN0aW9uIHVzZUNvbXBvbmVudERlZmF1bHRzKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChFdWlDb21wb25lbnREZWZhdWx0c0NvbnRleHQpO1xufTtcblxuLy8gTWVyZ2UgaW5kaXZpZHVhbCBjb21wb25lbnQgcHJvcHMgd2l0aCBjb21wb25lbnQgZGVmYXVsdHNcbmV4cG9ydCB2YXIgdXNlUHJvcHNXaXRoQ29tcG9uZW50RGVmYXVsdHMgPSBmdW5jdGlvbiB1c2VQcm9wc1dpdGhDb21wb25lbnREZWZhdWx0cyhjb21wb25lbnROYW1lLCBwcm9wcykge1xuICB2YXIgX2NvbnRleHQkY29tcG9uZW50TmFtO1xuICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoRXVpQ29tcG9uZW50RGVmYXVsdHNDb250ZXh0KTtcbiAgdmFyIGNvbXBvbmVudERlZmF1bHRzID0gKF9jb250ZXh0JGNvbXBvbmVudE5hbSA9IGNvbnRleHRbY29tcG9uZW50TmFtZV0pICE9PSBudWxsICYmIF9jb250ZXh0JGNvbXBvbmVudE5hbSAhPT0gdm9pZCAwID8gX2NvbnRleHQkY29tcG9uZW50TmFtIDogZW1wdHlEZWZhdWx0cztcbiAgcmV0dXJuIHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNvbXBvbmVudERlZmF1bHRzKSwgcHJvcHMpO1xuICB9LCBbY29tcG9uZW50RGVmYXVsdHMsIHByb3BzXSk7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJ0aXRsZVwiLCBcImNsYXNzTmFtZVwiLCBcInBvc2l0aW9uVG9vbFRpcFwiLCBcInBvcG92ZXJSZWZcIiwgXCJjYWxjdWxhdGVkUG9zaXRpb25cIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpVG9vbFRpcFN0eWxlcyB9IGZyb20gJy4vdG9vbF90aXAuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRvb2xUaXBQb3BvdmVyID0gZnVuY3Rpb24gRXVpVG9vbFRpcFBvcG92ZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBwb3NpdGlvblRvb2xUaXAgPSBfcmVmLnBvc2l0aW9uVG9vbFRpcCxcbiAgICBwb3BvdmVyUmVmID0gX3JlZi5wb3BvdmVyUmVmLFxuICAgIGNhbGN1bGF0ZWRQb3NpdGlvbiA9IF9yZWYuY2FsY3VsYXRlZFBvc2l0aW9uLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHBvcG92ZXIgPSB1c2VSZWYoKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVRvb2xUaXBTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUb29sVGlwLCBjYWxjdWxhdGVkUG9zaXRpb24gJiYgc3R5bGVzW2NhbGN1bGF0ZWRQb3NpdGlvbl1dO1xuICB2YXIgdXBkYXRlRGltZW5zaW9ucyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQmVjYXVzZSBvZiB0aGlzIGRlbGF5LCBzb21ldGltZXMgYHBvc2l0aW9uVG9vbFRpcGAgYmVjb21lcyB1bmF2YWlsYWJsZS5cbiAgICAgIGlmIChwb3BvdmVyLmN1cnJlbnQpIHtcbiAgICAgICAgcG9zaXRpb25Ub29sVGlwKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtwb3NpdGlvblRvb2xUaXBdKTtcbiAgdmFyIHNldFBvcG92ZXJSZWYgPSBmdW5jdGlvbiBzZXRQb3BvdmVyUmVmKHJlZikge1xuICAgIGlmIChwb3BvdmVyUmVmKSB7XG4gICAgICBwb3BvdmVyUmVmKHJlZik7XG4gICAgfVxuICB9O1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnZXVpQm9keS1oYXNQb3J0YWxDb250ZW50Jyk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZURpbWVuc2lvbnMpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2V1aUJvZHktaGFzUG9ydGFsQ29udGVudCcpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZURpbWVuc2lvbnMpO1xuICAgIH07XG4gIH0sIFt1cGRhdGVEaW1lbnNpb25zXSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVG9vbFRpcFBvcG92ZXInLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHJlZjogc2V0UG9wb3ZlclJlZixcbiAgICBcImRhdGEtcG9zaXRpb25cIjogY2FsY3VsYXRlZFBvc2l0aW9uXG4gIH0sIHJlc3QpLCB0aXRsZSAmJiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjc3M6IHN0eWxlcy5ldWlUb29sVGlwX190aXRsZSxcbiAgICBjbGFzc05hbWU6IFwiZXVpVG9vbFRpcF9fdGl0bGVcIlxuICB9LCB0aXRsZSksIGNoaWxkcmVuKTtcbn07XG5FdWlUb29sVGlwUG9wb3Zlci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBwb3NpdGlvblRvb2xUaXA6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICBwb3BvdmVyUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2FsY3VsYXRlZFBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKVxufTsiLCAidmFyIF90ZW1wbGF0ZU9iamVjdCwgX3RlbXBsYXRlT2JqZWN0MjtcbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoZSwgdCkgeyByZXR1cm4gdCB8fCAodCA9IGUuc2xpY2UoMCkpLCBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHQpIH0gfSkpOyB9XG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxTaXplQ1NTLCBldWlGb250U2l6ZSwgZXVpQ2FuQW5pbWF0ZSwgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IENPTE9SX01PREVTX1NUQU5EQVJELCB0aW50LCBzaGFkZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVNoYWRvdyB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0nO1xuZXhwb3J0IHZhciBldWlUb29sVGlwQmFja2dyb3VuZENvbG9yID0gZnVuY3Rpb24gZXVpVG9vbFRpcEJhY2tncm91bmRDb2xvcihldWlUaGVtZSwgY29sb3JNb2RlKSB7XG4gIHJldHVybiBjb2xvck1vZGUgPT09IENPTE9SX01PREVTX1NUQU5EQVJELmRhcmsgPyBzaGFkZShldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSwgMSkgOiB0aW50KGV1aVRoZW1lLmNvbG9ycy5mdWxsU2hhZGUsIDAuMjUpO1xufTtcbmV4cG9ydCB2YXIgZXVpVG9vbFRpcEJvcmRlckNvbG9yID0gZnVuY3Rpb24gZXVpVG9vbFRpcEJvcmRlckNvbG9yKGV1aVRoZW1lLCBjb2xvck1vZGUpIHtcbiAgcmV0dXJuIGNvbG9yTW9kZSA9PT0gQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyayA/IHNoYWRlKGV1aVRoZW1lLmNvbG9ycy5mdWxsU2hhZGUsIDAuOCkgOiB0aW50KGV1aVRoZW1lLmNvbG9ycy5mdWxsU2hhZGUsIDAuMzUpO1xufTtcbnZhciBldWlUb29sVGlwQW5pbWF0aW9uVmVydGljYWwgPSBmdW5jdGlvbiBldWlUb29sVGlwQW5pbWF0aW9uVmVydGljYWwoc2l6ZSkge1xuICByZXR1cm4ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgMCUge1xcbiAgICAgICAgb3BhY2l0eTogMDtcXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShcIiwgXCIpO1xcbiAgICB9XFxuXFxuICAgIDEwMCUge1xcbiAgICAgICAgb3BhY2l0eTogMTtcXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG4gICAgfVxcblwiXSkpLCBzaXplKTtcbn07XG52YXIgZXVpVG9vbFRpcEFuaW1hdGlvbkhvcml6b250YWwgPSBmdW5jdGlvbiBldWlUb29sVGlwQW5pbWF0aW9uSG9yaXpvbnRhbChzaXplKSB7XG4gIHJldHVybiBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0MiB8fCAoX3RlbXBsYXRlT2JqZWN0MiA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgIDAlIHtcXG4gICAgICAgIG9wYWNpdHk6IDA7XFxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoXCIsIFwiKTtcXG4gICAgfVxcblxcbiAgICAxMDAlIHtcXG4gICAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XFxuICAgIH1cXG5cIl0pKSwgc2l6ZSk7XG59O1xuZXhwb3J0IHZhciBldWlUb29sVGlwU3R5bGVzID0gZnVuY3Rpb24gZXVpVG9vbFRpcFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGU7XG4gIHZhciBhbmltYXRpb25UaW1pbmcgPSBcIlwiLmNvbmNhdChldWlUaGVtZS5hbmltYXRpb24uc2xvdywgXCIgZWFzZS1vdXQgMHMgZm9yd2FyZHNcIik7XG4gIC8vIFNoaWZ0IGFycm93IDFweCBtb3JlIHRoYW4gaGFsZiBpdHMgc2l6ZSB0byBhY2NvdW50IGZvciBib3JkZXIgcmFkaXVzXG4gIHZhciBhcnJvd1NpemUgPSBldWlUaGVtZS5zaXplLm07XG4gIHZhciBhcnJvd1BsdXNTaXplID0gbWF0aFdpdGhVbml0cyhhcnJvd1NpemUsIGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuICh4IC8gMiArIDEpICogLTE7XG4gIH0pO1xuICB2YXIgYXJyb3dNaW51c1NpemUgPSBtYXRoV2l0aFVuaXRzKGFycm93U2l6ZSwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gKHggLyAyIC0gMSkgKiAtMTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVRvb2xUaXA6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCksIFwiIGJvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUb29sVGlwQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lLCBjb2xvck1vZGUpLCBcIjtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmdob3N0LCBcIjt6LWluZGV4OlwiLCBldWlUaGVtZS5sZXZlbHMudG9hc3QsIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMjU2cHgnKSwgXCIgb3ZlcmZsb3ctd3JhcDpicmVhay13b3JkO3BhZGRpbmc6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCIgcG9zaXRpb246YWJzb2x1dGU7W2NsYXNzKj0nZXVpSG9yaXpvbnRhbFJ1bGUnXXtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUb29sVGlwQm9yZGVyQ29sb3IoZXVpVGhlbWUsIGNvbG9yTW9kZSksIFwiO307bGFiZWw6ZXVpVG9vbFRpcDtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiOztsYWJlbDpzO1wiKSxcbiAgICAvLyBQb3NpdGlvbnNcbiAgICB0b3A6IC8qI19fUFVSRV9fKi9jc3MoZXVpQ2FuQW5pbWF0ZSwgXCJ7YW5pbWF0aW9uOlwiLCBldWlUb29sVGlwQW5pbWF0aW9uVmVydGljYWwoXCItXCIuY29uY2F0KGV1aVRoZW1lLnNpemUuYmFzZSkpLCBcIiBcIiwgYW5pbWF0aW9uVGltaW5nLCBcIjt9O2xhYmVsOnRvcDtcIiksXG4gICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgZXVpVG9vbFRpcEFuaW1hdGlvblZlcnRpY2FsKGV1aVRoZW1lLnNpemUuYmFzZSksIFwiIFwiLCBhbmltYXRpb25UaW1pbmcsIFwiO307bGFiZWw6Ym90dG9tO1wiKSxcbiAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgZXVpVG9vbFRpcEFuaW1hdGlvbkhvcml6b250YWwoXCItXCIuY29uY2F0KGV1aVRoZW1lLnNpemUuYmFzZSkpLCBcIiBcIiwgYW5pbWF0aW9uVGltaW5nLCBcIjt9O2xhYmVsOmxlZnQ7XCIpLFxuICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgZXVpVG9vbFRpcEFuaW1hdGlvbkhvcml6b250YWwoZXVpVGhlbWUuc2l6ZS5iYXNlKSwgXCIgXCIsIGFuaW1hdGlvblRpbWluZywgXCI7fTtsYWJlbDpyaWdodDtcIiksXG4gICAgLy8gQXJyb3dcbiAgICBldWlUb29sVGlwX19hcnJvdzogLyojX19QVVJFX18qL2NzcyhcImNvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7Ym9yZGVyLXJhZGl1czpcIiwgbWF0aFdpdGhVbml0cyhldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggLyAyO1xuICAgIH0pLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUb29sVGlwQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lLCBjb2xvck1vZGUpLCBcIjtcIiwgbG9naWNhbFNpemVDU1MoYXJyb3dTaXplLCBhcnJvd1NpemUpLCBcIjs7bGFiZWw6ZXVpVG9vbFRpcF9fYXJyb3c7XCIpLFxuICAgIGFycm93UG9zaXRpb25zOiB7XG4gICAgICB0b3A6IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWShcIiwgYXJyb3dQbHVzU2l6ZSwgXCIpIHJvdGF0ZVooNDVkZWcpOztsYWJlbDp0b3A7XCIpLFxuICAgICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVkoXCIsIGFycm93TWludXNTaXplLCBcIikgcm90YXRlWig0NWRlZyk7O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVgoXCIsIGFycm93UGx1c1NpemUsIFwiKSByb3RhdGVaKDQ1ZGVnKTs7bGFiZWw6bGVmdDtcIiksXG4gICAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVYKFwiLCBhcnJvd01pbnVzU2l6ZSwgXCIpIHJvdGF0ZVooNDVkZWcpOztsYWJlbDpyaWdodDtcIilcbiAgICB9LFxuICAgIC8vIFRpdGxlXG4gICAgZXVpVG9vbFRpcF9fdGl0bGU6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQuYm9sZCwgXCI7XCIsIGxvZ2ljYWxDU1MoJ2JvcmRlci1ib3R0b20nLCBcInNvbGlkIFwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgXCIpLmNvbmNhdChldWlUb29sVGlwQm9yZGVyQ29sb3IoZXVpVGhlbWUsIGNvbG9yTW9kZSkpKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctYm90dG9tJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiOztsYWJlbDpldWlUb29sVGlwX190aXRsZTtcIilcbiAgfTtcbn07XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJmemlsbmstaW5saW5lQmxvY2tcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6aW5saW5lLWJsb2NrO2xhYmVsOmlubGluZUJsb2NrO1wiXG59IDoge1xuICBuYW1lOiBcImZ6aWxuay1pbmxpbmVCbG9ja1wiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7bGFiZWw6aW5saW5lQmxvY2s7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxNGFjZXV5LWJsb2NrXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmJsb2NrO2xhYmVsOmJsb2NrO1wiXG59IDoge1xuICBuYW1lOiBcIjE0YWNldXktYmxvY2tcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6YmxvY2s7bGFiZWw6YmxvY2s7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxczNpM3A1LWV1aVRvb2xUaXBBbmNob3JcIixcbiAgc3R5bGVzOiBcIipbZGlzYWJsZWRde3BvaW50ZXItZXZlbnRzOm5vbmU7fTtsYWJlbDpldWlUb29sVGlwQW5jaG9yO1wiXG59IDoge1xuICBuYW1lOiBcIjFzM2kzcDUtZXVpVG9vbFRpcEFuY2hvclwiLFxuICBzdHlsZXM6IFwiKltkaXNhYmxlZF17cG9pbnRlci1ldmVudHM6bm9uZTt9O2xhYmVsOmV1aVRvb2xUaXBBbmNob3I7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpVG9vbFRpcEFuY2hvclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRvb2xUaXBBbmNob3JTdHlsZXMoKSB7XG4gIHJldHVybiB7XG4gICAgLy8gRWxlbWVudHNcbiAgICBldWlUb29sVGlwQW5jaG9yOiBfcmVmMyxcbiAgICAvLyBWYXJpYW50c1xuICAgIGJsb2NrOiBfcmVmMixcbiAgICBpbmxpbmVCbG9jazogX3JlZlxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcIm9uQmx1clwiLCBcIm9uRm9jdXNcIiwgXCJvbk1vdXNlT3ZlclwiLCBcIm9uTW91c2VPdXRcIiwgXCJpZFwiLCBcImNsYXNzTmFtZVwiLCBcImNoaWxkcmVuXCIsIFwiZGlzcGxheVwiLCBcImlzVmlzaWJsZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZXVpVG9vbFRpcEFuY2hvclN0eWxlcyB9IGZyb20gJy4vdG9vbF90aXAuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRvb2xUaXBBbmNob3IgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfb25CbHVyID0gX3JlZi5vbkJsdXIsXG4gICAgX29uRm9jdXMgPSBfcmVmLm9uRm9jdXMsXG4gICAgb25Nb3VzZU92ZXIgPSBfcmVmLm9uTW91c2VPdmVyLFxuICAgIG9uTW91c2VPdXQgPSBfcmVmLm9uTW91c2VPdXQsXG4gICAgaWQgPSBfcmVmLmlkLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBkaXNwbGF5ID0gX3JlZi5kaXNwbGF5LFxuICAgIGlzVmlzaWJsZSA9IF9yZWYuaXNWaXNpYmxlLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGFuY2hvckNzcyA9IGV1aVRvb2xUaXBBbmNob3JTdHlsZXMoKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFthbmNob3JDc3MuZXVpVG9vbFRpcEFuY2hvciwgYW5jaG9yQ3NzW2Rpc3BsYXldXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUb29sVGlwQW5jaG9yJywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvbW91c2UtZXZlbnRzLWhhdmUta2V5LWV2ZW50c1xuICAgIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgY3NzOiBjc3NTdHlsZXNcbiAgICB9LCByZXN0LCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBvbk1vdXNlT3Zlcjogb25Nb3VzZU92ZXIsXG4gICAgICBvbk1vdXNlT3V0OiBvbk1vdXNlT3V0XG4gICAgfSksIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgIG9uRm9jdXM6IGZ1bmN0aW9uIG9uRm9jdXMoZSkge1xuICAgICAgICBfb25Gb2N1cygpO1xuICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkZvY3VzICYmIGNoaWxkcmVuLnByb3BzLm9uRm9jdXMoZSk7XG4gICAgICB9LFxuICAgICAgb25CbHVyOiBmdW5jdGlvbiBvbkJsdXIoZSkge1xuICAgICAgICBfb25CbHVyKCk7XG4gICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1ciAmJiBjaGlsZHJlbi5wcm9wcy5vbkJsdXIoZSk7XG4gICAgICB9LFxuICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBpc1Zpc2libGUgPyBjbGFzc05hbWVzKGlkLCBjaGlsZHJlbi5wcm9wc1snYXJpYS1kZXNjcmliZWRieSddKSA6IGNoaWxkcmVuLnByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J11cbiAgICB9KSlcbiAgKTtcbn0pO1xuRXVpVG9vbFRpcEFuY2hvci5wcm9wVHlwZXMgPSB7XG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgaXNWaXNpYmxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXG59O1xuRXVpVG9vbFRpcEFuY2hvci5kaXNwbGF5TmFtZSA9ICdFdWlUb29sVGlwQW5jaG9yJzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInBvc2l0aW9uXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlUb29sVGlwU3R5bGVzIH0gZnJvbSAnLi90b29sX3RpcC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVG9vbFRpcEFycm93ID0gZnVuY3Rpb24gRXVpVG9vbFRpcEFycm93KF9yZWYpIHtcbiAgdmFyIHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpVG9vbFRpcFN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRvb2xUaXBfX2Fycm93LCBzdHlsZXMuYXJyb3dQb3NpdGlvbnNbcG9zaXRpb25dXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHByb3BzKSk7XG59O1xuRXVpVG9vbFRpcEFycm93LnByb3BUeXBlcyA9IHtcbiAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl0pLmlzUmVxdWlyZWRcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8qKlxuICogTWFuYWdlciB1dGlsaXR5IHRoYXQgZW5zdXJlcyBvbmx5IG9uZSB0b29sdGlwIGlzIHZpc2libGUgYXQgYSB0aW1lXG4gKlxuICogVVggcmF0aW9uYWxlIChwcmltYXJpbHkgZm9yIG1vdXNlLW9ubHkgdXNlcnMpOlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9raWJhbmEvaXNzdWVzLzE0NDQ4MlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzU4ODNcbiAqL1xudmFyIFRvb2xUaXBNYW5hZ2VyID0gLyojX19QVVJFX18qL19jcmVhdGVDbGFzcyhmdW5jdGlvbiBUb29sVGlwTWFuYWdlcigpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRvb2xUaXBNYW5hZ2VyKTtcbiAgLy8gV2UgdXNlIGEgc2V0IGluc3RlYWQgb2YgYSBzaW5nbGUgdmFyIGp1c3QgaW4gY2FzZVxuICAvLyBtdWx0aXBsZSB0b29sdGlwcyBhcmUgcmVnaXN0ZXJlZCB2aWEgYXN5bmMgc2hlbmFuaWdhbnNcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidG9vbFRpcHNUb0hpZGVcIiwgbmV3IFNldCgpKTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicmVnaXN0ZXJUb29sdGlwXCIsIGZ1bmN0aW9uIChoaWRlQ2FsbGJhY2spIHtcbiAgICBfdGhpcy50b29sVGlwc1RvSGlkZS5mb3JFYWNoKGZ1bmN0aW9uIChoaWRlKSB7XG4gICAgICByZXR1cm4gaGlkZSgpO1xuICAgIH0pO1xuICAgIF90aGlzLnRvb2xUaXBzVG9IaWRlLmNsZWFyKCk7XG4gICAgX3RoaXMudG9vbFRpcHNUb0hpZGUuYWRkKGhpZGVDYWxsYmFjayk7XG4gIH0pO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkZXJlZ2lzdGVyVG9vbFRpcFwiLCBmdW5jdGlvbiAoaGlkZUNhbGxiYWNrKSB7XG4gICAgX3RoaXMudG9vbFRpcHNUb0hpZGUuZGVsZXRlKGhpZGVDYWxsYmFjayk7XG4gIH0pO1xufSk7XG5leHBvcnQgdmFyIHRvb2xUaXBNYW5hZ2VyID0gbmV3IFRvb2xUaXBNYW5hZ2VyKCk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0eXBlXCIsIFwiYXJpYS1sYWJlbFwiLCBcImNvbG9yXCIsIFwic2l6ZVwiLCBcImljb25Qcm9wc1wiLCBcInBvc2l0aW9uXCIsIFwiZGVsYXlcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi90b29sX3RpcCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlJY29uVGlwID0gZnVuY3Rpb24gRXVpSWNvblRpcChfcmVmKSB7XG4gIHZhciBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ3F1ZXN0aW9uSW5DaXJjbGUnIDogX3JlZiR0eXBlLFxuICAgIGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXSxcbiAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBpY29uUHJvcHMgPSBfcmVmLmljb25Qcm9wcyxcbiAgICBfcmVmJHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICBwb3NpdGlvbiA9IF9yZWYkcG9zaXRpb24gPT09IHZvaWQgMCA/ICd0b3AnIDogX3JlZiRwb3NpdGlvbixcbiAgICBfcmVmJGRlbGF5ID0gX3JlZi5kZWxheSxcbiAgICBkZWxheSA9IF9yZWYkZGVsYXkgPT09IHZvaWQgMCA/ICdyZWd1bGFyJyA6IF9yZWYkZGVsYXksXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZGVmYXVsdEFyaWFMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aUljb25UaXAuZGVmYXVsdEFyaWFMYWJlbCcsICdJbmZvJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIF9leHRlbmRzKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgZGVsYXk6IGRlbGF5XG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIF9leHRlbmRzKHtcbiAgICB0YWJJbmRleDogMCxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbG9yOiBjb2xvcixcbiAgICBzaXplOiBzaXplLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwgfHwgZGVmYXVsdEFyaWFMYWJlbFxuICB9LCBpY29uUHJvcHMpKSk7XG59O1xuRXVpSWNvblRpcC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSBzcGFuIHdyYXBwaW5nIHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBhbmNob3JDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSBzcGFuIHdyYXBwaW5nIHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBhbmNob3JQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHRvb2x0aXAgaXRzZWxmLCBub3QgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogVGhlIG1haW4gY29udGVudCBvZiB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBDb21tb24gZGlzcGxheSBhbHRlcm5hdGl2ZXMgZm9yIHRoZSBhbmNob3Igd3JhcHBlclxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCB0aXRsZSBmb3IgeW91ciB0b29sdGlwLlxuICAgICAqL1xuICB0aXRsZTogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIFVubGVzcyB5b3UgcHJvdmlkZSBvbmUsIHRoaXMgd2lsbCBiZSByYW5kb21seSBnZW5lcmF0ZWQuXG4gICAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCwgdGhlIHRvb2x0aXAncyBwb3NpdGlvbiBpcyByZS1jYWxjdWxhdGVkIHdoZW4gdGhlIHVzZXJcbiAgICAgKiBzY3JvbGxzLiBUaGlzIHN1cHBvcnRzIGhhdmluZyBmaXhlZC1wb3NpdGlvbiB0b29sdGlwIGFuY2hvcnMuXG4gICAgICpcbiAgICAgKiBXaGVuIG5lc3RpbmcgYW4gYEV1aVRvb2x0aXBgIGluIGEgc2Nyb2xsYWJsZSBjb250YWluZXIsIGByZXBvc2l0aW9uT25TY3JvbGxgIHNob3VsZCBiZSBgdHJ1ZWBcbiAgICAgKi9cbiAgcmVwb3NpdGlvbk9uU2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSWYgc3VwcGxpZWQsIGNhbGxlZCB3aGVuIG1vdXNlIG1vdmVtZW50IGNhdXNlcyB0aGUgdG9vbCB0aXAgdG8gYmVcbiAgICAgKiBoaWRkZW4uXG4gICAgICovXG4gIG9uTW91c2VPdXQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBFeHBsYWluIHdoYXQgdGhpcyBpY29uIG1lYW5zIGZvciBzY3JlZW4gcmVhZGVycy5cbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBUaGUgaWNvbiBjb2xvci5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFRoZSBpY29uIHR5cGUuXG4gICAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIFRoZSBpY29uIHNpemUuXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFBhc3MgY2VydGFpbiBwcm9wcyBkb3duIHRvIGBFdWlJY29uYFxuICAgICAqL1xuICAvLyBFdWlJY29uVGlwJ3MgYHR5cGVgIGlzIHBhc3NlZCB0byBFdWlJY29uLCBzbyB3ZSB3YW50IHRvIGV4Y2x1ZGUgYHR5cGVgIGZyb21cbiAgLy8gaWNvblByb3BzOyBob3dldmVyLCBkdWUgdG8gVFMncyBiaXZhcmlhbnQgZnVuY3Rpb24gYXJndW1lbnRzIGB0eXBlYCBjb3VsZCBiZVxuICAvLyBwYXNzZWQgd2l0aG91dCBhbnkgZXJyb3IvZmVlZGJhY2sgc28gd2UgZXhwbGljaXRseSBzZXQgaXQgdG8gYG5ldmVyYCB0eXBlXG4gIGljb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLy8gVGhpcyBhcmUgY29waWVkIGZyb20gRXVpVG9vbFRpcFByb3BzLCBidXQgbWFkZSBvcHRpb25hbC4gRGVmYXVsdHNcbiAgLy8gYXJlIGFwcGxpZWQgYmVsb3cuXG4gIGRlbGF5OiBQcm9wVHlwZXMuYW55LFxuICBwb3NpdGlvbjogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNvbXBvbmVudFwiLCBcInNpemVcIiwgXCJjb2xvclwiLCBcImdyb3dcIiwgXCJ0ZXh0QWxpZ25cIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlUZXh0Q29sb3IgfSBmcm9tICcuL3RleHRfY29sb3InO1xuaW1wb3J0IHsgRXVpVGV4dEFsaWduIH0gZnJvbSAnLi90ZXh0X2FsaWduJztcbmltcG9ydCB7IGV1aVRleHRTdHlsZXMgfSBmcm9tICcuL3RleHQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFRFWFRfU0laRVMgPSBbJ3hzJywgJ3MnLCAnbScsICdyZWxhdGl2ZSddO1xuZXhwb3J0IHZhciBFdWlUZXh0ID0gZnVuY3Rpb24gRXVpVGV4dChfcmVmKSB7XG4gIHZhciBfcmVmJGNvbXBvbmVudCA9IF9yZWYuY29tcG9uZW50LFxuICAgIGNvbXBvbmVudCA9IF9yZWYkY29tcG9uZW50ID09PSB2b2lkIDAgPyAnZGl2JyA6IF9yZWYkY29tcG9uZW50LFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIF9yZWYkZ3JvdyA9IF9yZWYuZ3JvdyxcbiAgICBncm93ID0gX3JlZiRncm93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRncm93LFxuICAgIHRleHRBbGlnbiA9IF9yZWYudGV4dEFsaWduLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUZXh0U3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dCwgIWdyb3cgPyBzdHlsZXMuY29uc3RyYWluZWRXaWR0aCA6IHVuZGVmaW5lZCwgc3R5bGVzW3NpemVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUZXh0JywgY2xhc3NOYW1lKTtcbiAgdmFyIENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgdmFyIHRleHQgPSBfX19FbW90aW9uSlNYKENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICBpZiAoY29sb3IpIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlUZXh0Q29sb3IsIHtcbiAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY2xvbmVFbGVtZW50OiB0cnVlXG4gICAgfSwgdGV4dCk7XG4gIH1cbiAgaWYgKHRleHRBbGlnbikge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aVRleHRBbGlnbiwge1xuICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsXG4gICAgICB0ZXh0QWxpZ246IHRleHRBbGlnbixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNsb25lRWxlbWVudDogdHJ1ZVxuICAgIH0sIHRleHQpO1xuICB9XG4gIHJldHVybiB0ZXh0O1xufTtcbkV1aVRleHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBUaGUgSFRNTCBlbGVtZW50L3RhZyB0byByZW5kZXIuXG4gICAgICAgKiBVc2Ugd2l0aCBjYXJlIHdoZW4gbmVzdGluZyBtdWx0aXBsZSBjb21wb25lbnRzIHRvIGVuc3VyZSB2YWxpZCBYSFRNTDpcbiAgICAgICAqIC0gYDxkaXY+YCBhbmQgb3RoZXIgYmxvY2sgdGFncyBhcmUgbm90IHZhbGlkIHRvIHVzZSBpbnNpZGUgYDxwPmAuIElmIHVzaW5nIHRoZSBgPHA+YCB0YWcsIHdlIHJlY29tbWVuZCBwYXNzaW5nIHN0cmluZ3MvdGV4dCBvbmx5LlxuICAgICAgICogLSBgPHNwYW4+YCBpcyB2YWxpZCB0byBiZSBuZXN0ZWQgaW4gYW55IHRhZywgYW5kIGNhbiBoYXZlIGFueSB0YWcgbmVzdGVkIHdpdGhpbiBpdC5cbiAgICAgICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIiwgXCJzcGFuXCIsIFwicFwiXSksXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzIG9yIGEgYGhleGAsIGByZ2JgIG9yIGByZ2JhYCB2YWx1ZS5cbiAgICAgKiBAZGVmYXVsdCBpbmhlcml0XG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBBcHBsaWVzIGhvcml6b250YWwgdGV4dCBhbGlnbm1lbnRcbiAgICAgKiBAZGVmYXVsdCBsZWZ0XG4gICAgICovXG4gIHRleHRBbGlnbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBEZXRlcm1pbmVzIHRoZSB0ZXh0IHNpemUuIENob29zZSBgcmVsYXRpdmVgIHRvIGNvbnRyb2wgdGhlIGBmb250LXNpemVgIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBhIHBhcmVudCBjb250YWluZXIuXG4gICAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgZ3JvdzogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiY2xvbmVFbGVtZW50XCIsIFwic3R5bGVcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzLCBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpVGV4dENvbG9yU3R5bGVzIH0gZnJvbSAnLi90ZXh0X2NvbG9yLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDT0xPUlMgPSBbJ2RlZmF1bHQnLCAnc3ViZHVlZCcsICdzdWNjZXNzJywgJ2FjY2VudCcsICdkYW5nZXInLCAnd2FybmluZycsICdnaG9zdCcsICdpbmhlcml0J107XG5leHBvcnQgdmFyIF9pc05hbWVkQ29sb3IgPSBmdW5jdGlvbiBfaXNOYW1lZENvbG9yKGNvbG9yKSB7XG4gIHJldHVybiBDT0xPUlMuaW5jbHVkZXMoY29sb3IpO1xufTtcbmV4cG9ydCB2YXIgRXVpVGV4dENvbG9yID0gZnVuY3Rpb24gRXVpVGV4dENvbG9yKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdkZWZhdWx0JyA6IF9yZWYkY29sb3IsXG4gICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICBDb21wb25lbnQgPSBfcmVmJGNvbXBvbmVudCA9PT0gdm9pZCAwID8gJ3NwYW4nIDogX3JlZiRjb21wb25lbnQsXG4gICAgX3JlZiRjbG9uZUVsZW1lbnQgPSBfcmVmLmNsb25lRWxlbWVudCxcbiAgICBjbG9uZUVsZW1lbnQgPSBfcmVmJGNsb25lRWxlbWVudCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNsb25lRWxlbWVudCxcbiAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNOYW1lZENvbG9yID0gX2lzTmFtZWRDb2xvcihjb2xvcik7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUZXh0Q29sb3JTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUZXh0Q29sb3IsIGlzTmFtZWRDb2xvciA/IHN0eWxlc1tjb2xvcl0gOiBzdHlsZXMuY3VzdG9tQ29sb3JdO1xuXG4gIC8vIFdlJ3JlIGNoZWNraW5nIGlmIGlzIGEgY3VzdG9tIGNvbG9yLlxuICAvLyBJZiBpdCBpcyBhIGN1c3RvbSBjb2xvciB3ZSBzZXQgdGhlIGBjb2xvcmAgb2YgdGhlIGAuZXVpVGV4dENvbG9yYCBkaXYgdG8gdGhhdCBjdXN0b20gY29sb3IuXG4gIC8vIFRoaXMgd2F5IHRoZSBjaGlsZHJlbiB0ZXh0IGVsZW1lbnRzIGNhbiBgaW5oZXJpdGAgdGhhdCBjb2xvciBhbmQgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kcyBjYW4gZ2V0IHRoYXQgYGN1cnJlbnRDb2xvcmAuXG4gIHZhciBldWlUZXh0U3R5bGUgPSAhaXNOYW1lZENvbG9yID8gX29iamVjdFNwcmVhZCh7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0sIHN0eWxlKSA6IF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKTtcbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgc3R5bGU6IGV1aVRleHRTdHlsZVxuICB9LCByZXN0KTtcbiAgaWYgKCAvKiNfX1BVUkVfXyovaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNsb25lRWxlbWVudCkge1xuICAgIHZhciBjaGlsZHJlblN0eWxlID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjaGlsZHJlbi5wcm9wcy5zdHlsZSksIGV1aVRleHRTdHlsZSk7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudFdpdGhDc3MoY2hpbGRyZW4sIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgc3R5bGU6IGNoaWxkcmVuU3R5bGVcbiAgICB9KSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBwcm9wcywgY2hpbGRyZW4pO1xuICB9XG59O1xuRXVpVGV4dENvbG9yLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogVGhlIEhUTUwgZWxlbWVudC90YWcgdG8gcmVuZGVyLlxuICAgICAgICogVXNlIHdpdGggY2FyZSB3aGVuIG5lc3RpbmcgbXVsdGlwbGUgY29tcG9uZW50cyB0byBlbnN1cmUgdmFsaWQgWEhUTUw6XG4gICAgICAgKiAtIGA8ZGl2PmAgYW5kIG90aGVyIGJsb2NrIHRhZ3MgYXJlIG5vdCB2YWxpZCB0byB1c2UgaW5zaWRlIGA8cD5gLiBJZiB1c2luZyB0aGUgYDxwPmAgdGFnLCB3ZSByZWNvbW1lbmQgcGFzc2luZyBzdHJpbmdzL3RleHQgb25seS5cbiAgICAgICAqIC0gYDxzcGFuPmAgaXMgdmFsaWQgdG8gYmUgbmVzdGVkIGluIGFueSB0YWcsIGFuZCBjYW4gaGF2ZSBhbnkgdGFnIG5lc3RlZCB3aXRoaW4gaXQuXG4gICAgICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCIsIFwic3BhblwiLCBcInBcIl0pLFxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRleHQgc3R5bGluZyB0byB0aGUgY2hpbGQgZWxlbWVudCBpbnN0ZWFkIG9mIHJlbmRlcmluZyBhIHBhcmVudCB3cmFwcGVyLlxuICAgICAqIENhbiBvbmx5IGJlIHVzZWQgd2hlbiB3cmFwcGluZyBhICpzaW5nbGUqIGNoaWxkIGVsZW1lbnQvdGFnLCBhbmQgbm90IHJhdyB0ZXh0LlxuICAgICAqL1xuICBjbG9uZUVsZW1lbnQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9ycyBvciBhIGBoZXhgLCBgcmdiYCBvciBgcmdiYWAgdmFsdWUuXG4gICAgICogQGRlZmF1bHQgaW5oZXJpdFxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIlxufSA6IHtcbiAgbmFtZTogXCJ1YWNqYzUtaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiY29sb3I6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVRleHRDb2xvclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRleHRDb2xvclN0eWxlcyhfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUZXh0Q29sb3I6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZXVpVGV4dENvbG9yO1wiKSxcbiAgICBkZWZhdWx0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjs7bGFiZWw6ZGVmYXVsdDtcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQsIFwiOztsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICBzdWNjZXNzOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5zdWNjZXNzVGV4dCwgXCI7O2xhYmVsOnN1Y2Nlc3M7XCIpLFxuICAgIGFjY2VudDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuYWNjZW50VGV4dCwgXCI7O2xhYmVsOmFjY2VudDtcIiksXG4gICAgZGFuZ2VyOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYW5nZXJUZXh0LCBcIjs7bGFiZWw6ZGFuZ2VyO1wiKSxcbiAgICB3YXJuaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy53YXJuaW5nVGV4dCwgXCI7O2xhYmVsOndhcm5pbmc7XCIpLFxuICAgIGdob3N0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCIhaW1wb3J0YW50OztsYWJlbDpnaG9zdDtcIiksXG4gICAgaW5oZXJpdDogX3JlZixcbiAgICBjdXN0b21Db2xvcjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpjdXN0b21Db2xvcjtcIikgLy8gSGFuZGxlZCBieSBgc3R5bGVgIHRhZyAtIHRoaXMgaXMganVzdCBoZXJlIGZvciBhIGNsYXNzTmFtZSBob29rXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb21wb25lbnRcIiwgXCJ0ZXh0QWxpZ25cIiwgXCJjbG9uZUVsZW1lbnRcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGNsb25lRWxlbWVudFdpdGhDc3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlUZXh0QWxpZ25TdHlsZXMgYXMgc3R5bGVzIH0gZnJvbSAnLi90ZXh0X2FsaWduLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBBTElHTk1FTlRTID0gWydsZWZ0JywgJ3JpZ2h0JywgJ2NlbnRlciddO1xuZXhwb3J0IHZhciBFdWlUZXh0QWxpZ24gPSBmdW5jdGlvbiBFdWlUZXh0QWxpZ24oX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIF9yZWYkY29tcG9uZW50ID0gX3JlZi5jb21wb25lbnQsXG4gICAgQ29tcG9uZW50ID0gX3JlZiRjb21wb25lbnQgPT09IHZvaWQgMCA/ICdkaXYnIDogX3JlZiRjb21wb25lbnQsXG4gICAgX3JlZiR0ZXh0QWxpZ24gPSBfcmVmLnRleHRBbGlnbixcbiAgICB0ZXh0QWxpZ24gPSBfcmVmJHRleHRBbGlnbiA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZiR0ZXh0QWxpZ24sXG4gICAgX3JlZiRjbG9uZUVsZW1lbnQgPSBfcmVmLmNsb25lRWxlbWVudCxcbiAgICBjbG9uZUVsZW1lbnQgPSBfcmVmJGNsb25lRWxlbWVudCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNsb25lRWxlbWVudCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRleHRBbGlnbiwgc3R5bGVzW3RleHRBbGlnbl1dO1xuICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KTtcbiAgaWYgKCAvKiNfX1BVUkVfXyovaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNsb25lRWxlbWVudCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBwcm9wcyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBwcm9wcywgY2hpbGRyZW4pO1xuICB9XG59O1xuRXVpVGV4dEFsaWduLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogVGhlIEhUTUwgZWxlbWVudC90YWcgdG8gcmVuZGVyLlxuICAgICAgICogVXNlIHdpdGggY2FyZSB3aGVuIG5lc3RpbmcgbXVsdGlwbGUgY29tcG9uZW50cyB0byBlbnN1cmUgdmFsaWQgWEhUTUw6XG4gICAgICAgKiAtIGA8ZGl2PmAgYW5kIG90aGVyIGJsb2NrIHRhZ3MgYXJlIG5vdCB2YWxpZCB0byB1c2UgaW5zaWRlIGA8cD5gLiBJZiB1c2luZyB0aGUgYDxwPmAgdGFnLCB3ZSByZWNvbW1lbmQgcGFzc2luZyBzdHJpbmdzL3RleHQgb25seS5cbiAgICAgICAqIC0gYDxzcGFuPmAgaXMgdmFsaWQgdG8gYmUgbmVzdGVkIGluIGFueSB0YWcsIGFuZCBjYW4gaGF2ZSBhbnkgdGFnIG5lc3RlZCB3aXRoaW4gaXQuXG4gICAgICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCIsIFwic3BhblwiLCBcInBcIl0pLFxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRleHQgc3R5bGluZyB0byB0aGUgY2hpbGQgZWxlbWVudCBpbnN0ZWFkIG9mIHJlbmRlcmluZyBhIHBhcmVudCB3cmFwcGVyLlxuICAgICAqIENhbiBvbmx5IGJlIHVzZWQgd2hlbiB3cmFwcGluZyBhICpzaW5nbGUqIGNoaWxkIGVsZW1lbnQvdGFnLCBhbmQgbm90IHJhdyB0ZXh0LlxuICAgICAqL1xuICBjbG9uZUVsZW1lbnQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBBcHBsaWVzIGhvcml6b250YWwgdGV4dCBhbGlnbm1lbnRcbiAgICAgKiBAZGVmYXVsdCBsZWZ0XG4gICAgICovXG4gIHRleHRBbGlnbjogUHJvcFR5cGVzLmFueVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbFRleHRBbGlnbkNTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpVGV4dEFsaWduU3R5bGVzID0ge1xuICBldWlUZXh0QWxpZ246IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZXVpVGV4dEFsaWduO1wiKSxcbiAgbGVmdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiOztsYWJlbDpsZWZ0O1wiKSxcbiAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygncmlnaHQnKSwgXCI7O2xhYmVsOnJpZ2h0O1wiKSxcbiAgY2VudGVyOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIjs7bGFiZWw6Y2VudGVyO1wiKVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9jdXNSaW5nLCBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlMaW5rQ1NTID0gZnVuY3Rpb24gZXVpTGlua0NTUyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4gXCJcXG4gICAgZm9udC13ZWlnaHQ6IFwiLmNvbmNhdChldWlUaGVtZS5mb250LndlaWdodC5tZWRpdW0sIFwiO1xcbiAgICBcIikuY29uY2F0KGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2xlZnQnKSwgXCJcXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgIH1cXG5cXG4gICAgJjpmb2N1cyB7XFxuICAgICAgXCIpLmNvbmNhdChldWlGb2N1c1JpbmcoZXVpVGhlbWVDb250ZXh0LCAnb3V0c2V0JyksIFwiXFxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgICAgdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzczogXCIpLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpY2ssIFwiO1xcbiAgICB9XFxuICBcIik7XG59O1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiOW5qYmk1LWRpc2FibGVkXCIsXG4gIHN0eWxlczogXCJmb250LXdlaWdodDppbmhlcml0OyY6aG92ZXJ7Y3Vyc29yOmF1dG87fSY6aG92ZXIsJjpmb2N1cywmOnRhcmdldHt0ZXh0LWRlY29yYXRpb246bm9uZTt9O2xhYmVsOmRpc2FibGVkO1wiXG59IDoge1xuICBuYW1lOiBcIjluamJpNS1kaXNhYmxlZFwiLFxuICBzdHlsZXM6IFwiZm9udC13ZWlnaHQ6aW5oZXJpdDsmOmhvdmVye2N1cnNvcjphdXRvO30mOmhvdmVyLCY6Zm9jdXMsJjp0YXJnZXR7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fTtsYWJlbDpkaXNhYmxlZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlMaW5rU3R5bGVzID0gZnVuY3Rpb24gZXVpTGlua1N0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUxpbms6IC8qI19fUFVSRV9fKi9jc3MoZXVpTGlua0NTUyhldWlUaGVtZUNvbnRleHQpLCBcIiB1c2VyLXNlbGVjdDp0ZXh0OyZbdGFyZ2V0PSdfYmxhbmsnXXtwb3NpdGlvbjpyZWxhdGl2ZTt9O2xhYmVsOmV1aUxpbms7XCIpLFxuICAgIGRpc2FibGVkOiBfcmVmLFxuICAgIC8vIENvbG9yIHN0eWxlc1xuICAgIHByaW1hcnk6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCksIFwiO2xhYmVsOnByaW1hcnk7XCIpLFxuICAgIHN1YmR1ZWQ6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5zdWJkdWVkVGV4dCksIFwiO2xhYmVsOnN1YmR1ZWQ7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5zdWNjZXNzVGV4dCksIFwiO2xhYmVsOnN1Y2Nlc3M7XCIpLFxuICAgIGFjY2VudDogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLmFjY2VudFRleHQpLCBcIjtsYWJlbDphY2NlbnQ7XCIpLFxuICAgIGRhbmdlcjogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLmRhbmdlclRleHQpLCBcIjtsYWJlbDpkYW5nZXI7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy53YXJuaW5nVGV4dCksIFwiO2xhYmVsOndhcm5pbmc7XCIpLFxuICAgIGdob3N0OiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuZ2hvc3QpLCBcIjtsYWJlbDpnaG9zdDtcIiksXG4gICAgdGV4dDogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLnRleHQpLCBcIjtsYWJlbDp0ZXh0O1wiKVxuICB9O1xufTtcbnZhciBfY29sb3JDU1MgPSBmdW5jdGlvbiBfY29sb3JDU1MoY29sb3IpIHtcbiAgcmV0dXJuIFwiXFxuICAgIGNvbG9yOiBcIi5jb25jYXQoY29sb3IsIFwiO1xcblxcbiAgICAmOnRhcmdldCB7XFxuICAgICAgY29sb3I6IGRhcmtlbihcIikuY29uY2F0KGNvbG9yLCBcIiwgMTAlKTtcXG4gICAgfVxcbiAgXCIpO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlUZXh0QnJlYWtXb3JkLCBldWlGb250U2l6ZSwgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxuLyoqXG4gKiBNaXhpblxuICovXG5cbmV4cG9ydCB2YXIgZXVpVGl0bGUgPSBmdW5jdGlvbiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIHNjYWxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnbSc7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIHRpdGxlU2NhbGVUb0ZvbnRTaXplU2NhbGVNYXAgPSB7XG4gICAgeHh4czogJ3hzJyxcbiAgICB4eHM6ICdzJyxcbiAgICB4czogJ20nLFxuICAgIHM6ICdsJyxcbiAgICBtOiAneGwnLFxuICAgIGw6ICd4eGwnXG4gIH07XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgdGl0bGVTY2FsZVRvRm9udFNpemVTY2FsZU1hcFtzY2FsZV0sIG9wdGlvbnMpKSwge30sIHtcbiAgICBmb250V2VpZ2h0OiBldWlUaGVtZS5mb250LndlaWdodFtldWlUaGVtZS5mb250LnRpdGxlLndlaWdodF0sXG4gICAgY29sb3I6IGV1aVRoZW1lLmNvbG9ycy50aXRsZVxuICB9KTtcbn07XG5cbi8qKlxuICogU3R5bGVzXG4gKi9cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjF4MnFzYjEtdXBwZXJjYXNlXCIsXG4gIHN0eWxlczogXCJ0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGFiZWw6dXBwZXJjYXNlO1wiXG59IDoge1xuICBuYW1lOiBcIjF4MnFzYjEtdXBwZXJjYXNlXCIsXG4gIHN0eWxlczogXCJ0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGFiZWw6dXBwZXJjYXNlO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVRpdGxlU3R5bGVzID0gZnVuY3Rpb24gZXVpVGl0bGVTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiB7XG4gICAgZXVpVGl0bGU6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dEJyZWFrV29yZCgpLCBcIiAmKyZ7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUuc2l6ZS5sKSwgXCI7fTtsYWJlbDpldWlUaXRsZTtcIiksXG4gICAgdXBwZXJjYXNlOiBfcmVmLFxuICAgIC8vIFNpemVzXG4gICAgeHh4czogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJyksIFwiOztsYWJlbDp4eHhzO1wiKSxcbiAgICB4eHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJyksIFwiOztsYWJlbDp4eHM7XCIpLFxuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIjs7bGFiZWw6bDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxTaG9ydGhhbmRDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MsIGV1aUZvbnRTaXplLCBldWlCYWNrZ3JvdW5kQ29sb3IsIG1hdGhXaXRoVW5pdHMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlMaW5rQ1NTIH0gZnJvbSAnLi4vbGluay9saW5rLnN0eWxlcyc7XG5pbXBvcnQgeyBldWlUaXRsZSB9IGZyb20gJy4uL3RpdGxlL3RpdGxlLnN0eWxlcyc7XG5cbi8qKlxuICogVE9ETzogTWFrZSB0aGlzIGEgZ2xvYmFsIHZhbHVlIHNvIGl0IGNhbiBiZSBzZXQgYnkgdGhlbWU/XG4gKi9cbmV4cG9ydCB2YXIgZXVpVGV4dENvbnN0cmFpbmVkTWF4V2lkdGggPSAnbWF4KDY0Y2gsIDc1JSknO1xuXG4vKipcbiAqIE1peGluc1xuICovXG5leHBvcnQgdmFyIGV1aVRleHQgPSBmdW5jdGlvbiBldWlUZXh0KGV1aVRoZW1lKSB7XG4gIHZhciBpbmhlcml0Q29sb3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIGNvbG9yOiBpbmhlcml0Q29sb3IgPyAnaW5oZXJpdCcgOiBldWlUaGVtZS5jb2xvcnMudGV4dCxcbiAgICBmb250V2VpZ2h0OiBldWlUaGVtZS5mb250LndlaWdodC5yZWd1bGFyXG4gIH07XG59O1xuXG4vLyBJbnRlcm5hbCB1dGlsaXR5IGZvciBFdWlUZXh0IHNjYWxlcy9zaXplc1xudmFyIGV1aVNjYWxlVGV4dCA9IGZ1bmN0aW9uIGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIG9wdGlvbnMpIHtcbiAgdmFyIF9ldWlGb250U2l6ZSA9IGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ20nLCBvcHRpb25zKSxcbiAgICBmb250U2l6ZSA9IF9ldWlGb250U2l6ZS5mb250U2l6ZSxcbiAgICBsaW5lSGVpZ2h0ID0gX2V1aUZvbnRTaXplLmxpbmVIZWlnaHQ7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIHVuaXQgPSBvcHRpb25zLnVuaXQsXG4gICAgX2N1c3RvbVNjYWxlID0gb3B0aW9ucy5jdXN0b21TY2FsZTtcbiAgdmFyIGxpbmVIZWlnaHRTaXplID0gdW5pdCA9PT0gJ2VtJyA/IFwiXCIuY29uY2F0KGxpbmVIZWlnaHQsIFwiZW1cIikgOiBsaW5lSGVpZ2h0O1xuICB2YXIgaGVhZGluZ3MgPSB7XG4gICAgaDE6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ2wnLCBvcHRpb25zKSxcbiAgICBoMjogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbScsIG9wdGlvbnMpLFxuICAgIGgzOiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdzJywgb3B0aW9ucyksXG4gICAgaDQ6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJywgb3B0aW9ucyksXG4gICAgaDU6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4cycsIG9wdGlvbnMpLFxuICAgIGg2OiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJywgb3B0aW9ucylcbiAgfTtcbiAgLy8gR2VuZXJhdGUgbWFyZ2lucyBmb3IgaGVhZGluZ3MgYmFzZWQgb24gY3VzdG9tU2NhbGUgKG5vdCBvbiBoZWFkaW5nIGxldmVsKVxuICB2YXIgY3VzdG9tU2NhbGUgPSBfY3VzdG9tU2NhbGUgPT09ICd4eHhzJyA/ICd4eHMnIDogX2N1c3RvbVNjYWxlIHx8ICdtJztcbiAgdmFyIG1hcmdpblNpemUgPSBldWlUaGVtZS5zaXplW2N1c3RvbVNjYWxlXTtcbiAgdmFyIGhlYWRpbmdNYXJnaW5Ub3AgPSBtYXRoV2l0aFVuaXRzKG1hcmdpblNpemUsIGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHggKiAyO1xuICB9KTtcbiAgdmFyIGhlYWRpbmdNYXJnaW5Cb3R0b20gPSBtYXJnaW5TaXplO1xuICB2YXIgYmxvY2tRdW90ZUJvcmRlcldpZHRoID0gbWF0aFdpdGhVbml0cyhmb250U2l6ZSwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4geCAvIDQ7XG4gIH0pO1xuICByZXR1cm4gXCJcXG4gICAgZm9udC1zaXplOiBcIi5jb25jYXQoZm9udFNpemUsIFwiO1xcbiAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChsaW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgaDEge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oMS5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDEubGluZUhlaWdodCwgXCI7XFxuICAgIH1cXG4gICAgaDE6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgIH1cXG5cXG4gICAgaDIge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oMi5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDIubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoMyB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmgzLmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oMy5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGg0IHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDQuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmg0LmxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGVhZGluZ01hcmdpblRvcCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgaDUge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oNS5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDUubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoNiB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmg2LmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oNi5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHAsXFxuICAgIGRsLFxcbiAgICBibG9ja3F1b3RlLFxcbiAgICBwcmUsXFxuICAgID4gdWwsXFxuICAgID4gb2wge1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGxpbmVIZWlnaHRTaXplKSwgXCJcXG4gICAgfVxcblxcbiAgICB1bCxcXG4gICAgb2wge1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCBsaW5lSGVpZ2h0U2l6ZSksIFwiXFxuICAgIH1cXG5cXG4gICAgLyogVGhlIHN0eWxlcyBvZiB0aGUgbmVzdGVkIG9yZGVyZWQgbGlzdHMgZm9sbG93IHRoZSBzdHlsZSBvZiBHaXRIdWJcXG4gICAgICAgd2hpY2ggaXMgY29tbW9ubHkgdXNlZCBpbiBNYXJrZG93biBvciBNRFggZm9ybWF0dGluZy4gKi9cXG4gICAgb2wgb2wsXFxuICAgIHVsIG9sIHtcXG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IGxvd2VyLXJvbWFuO1xcbiAgICB9XFxuXFxuICAgIHVsIHVsIG9sLFxcbiAgICB1bCBvbCBvbCxcXG4gICAgb2wgdWwgb2wsXFxuICAgIG9sIG9sIG9sIHtcXG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IGxvd2VyLWFscGhhO1xcbiAgICB9XFxuICBcXG4gICAgYmxvY2txdW90ZSB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGZvbnRTaXplLCBcIjtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxTaG9ydGhhbmRDU1MoJ3BhZGRpbmcnLCBcIjAgXCIuY29uY2F0KGZvbnRTaXplKSksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdib3JkZXItbGVmdC13aWR0aCcsIGJsb2NrUXVvdGVCb3JkZXJXaWR0aCksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgZm9udFNpemUpLCBcIlxcbiAgICB9XFxuXFxuICAgIGRkICsgZHQge1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGZvbnRTaXplKSwgXCJcXG4gICAgfVxcblxcbiAgICBkdCxcXG4gICAgLmV1aS1kZWZpbml0aW9uTGlzdFJldmVyc2UgZGQge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChmb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQobGluZUhlaWdodCwgXCI7XFxuICAgIH1cXG5cXG4gICAgLmV1aS1kZWZpbml0aW9uTGlzdFJldmVyc2UgZHQge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICd4cycsIG9wdGlvbnMpLmZvbnRTaXplLCBcIjtcXG4gICAgICBjb2xvcjogXCIpLmNvbmNhdChldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7XFxuICAgIH1cXG5cXG4gICAgc21hbGwge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJywgb3B0aW9ucykuZm9udFNpemUsIFwiO1xcbiAgICB9XFxuXFxuICAgIHByZTpub3QoLmV1aUNvZGVCbG9ja19fcHJlKSB7XFxuICAgICAgcGFkZGluZzogXCIpLmNvbmNhdChsaW5lSGVpZ2h0U2l6ZSwgXCI7XFxuICAgIH1cXG5cXG4gICAgY29kZTpub3QoLmV1aUNvZGUpOm5vdCguZXVpQ29kZUJsb2NrX19jb2RlKSAge1xcbiAgICAgIGZvbnQtc2l6ZTogLjllbTsgLyogOTAlIG9mIHBhcmVudCBmb250IHNpemUgKi9cXG4gICAgfVxcbiAgICBcIikuY29uY2F0KFxuICAvLyB3aGVuIHRleHRTaXplIGlzICdtJywgdGhlICdrYmQnIGVsZW1lbnQgZ2V0cyBhIGxpbmUgYmV0d2VlbiB0aGUgdGV4dCBhbmQgdGhlIGJvcmRlci1ib3R0b21cbiAgX2N1c3RvbVNjYWxlID09PSAnbScgPyBcIlxcbiAgICBrYmQge1xcbiAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWJvdHRvbScsIGV1aVRoZW1lLnNpemUueHMpLCBcIlxcbiAgICAgIC8qIEVuc3VyZXMgdGhlIHNoYXBlIHN0aWxsIGxvb2tzIGxpa2UgYSBzcXVhcmUgd2hlbiBvbmx5IG9uZSBjaGFyYWN0ZXIgKi9cXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21pbi13aWR0aCcsIGV1aVRoZW1lLnNpemUubCksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCJcXG4gICAgfVxcbiAgICBcXG4gICAga2JkOjphZnRlciB7XFxuICAgICAgY29udGVudDogJyc7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdib3JkZXItYm90dG9tJywgXCJcIi5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIFwiKS5jb25jYXQoZXVpVGhlbWUuY29sb3JzLnRleHQpKSwgXCJcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdib3R0b20nLCBldWlUaGVtZS5zaXplLnh4cyksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdsZWZ0JywgMCksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiXFxuICAgIH1cIikgOiAnJywgXCJcXG4gIFwiKTtcbn07XG5cbi8qKlxuICogU3R5bGVzXG4gKi9cbmV4cG9ydCB2YXIgZXVpVGV4dFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRleHRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUZXh0OiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHQoZXVpVGhlbWUsIHRydWUpLCBcImNsZWFyOmJvdGg7YTpub3QoW2NsYXNzXSl7XCIsIGV1aUxpbmtDU1MoZXVpVGhlbWVDb250ZXh0KSwgXCI7fXVse2xpc3Qtc3R5bGU6ZGlzYzt9b2x7bGlzdC1zdHlsZTpkZWNpbWFsO31ibG9ja3F1b3Rle2JvcmRlci1pbmxpbmUtc3RhcnQtY29sb3I6XCIsIGV1aVRoZW1lLmJvcmRlci5jb2xvciwgXCI7Ym9yZGVyLWlubGluZS1zdGFydC1zdHlsZTpzb2xpZDt9YmxvY2txdW90ZTpub3QoLmV1aU1hcmtkb3duRm9ybWF0X19ibG9ja3F1b3RlKXtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1YmR1ZWRUZXh0LCBcIjt9aDF7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ2wnKSwgXCI7fWgye1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdtJyksIFwiO31oM3tcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIjt9aDQsZHR7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiO31oNXtcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJyksIFwiO31oNntcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHh4cycpLCBcIiB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7fWgxLGgyLGgzLGg0LGg1LGg2LGR0e2NvbG9yOmluaGVyaXQ7fXByZTpub3QoLmV1aUNvZGVCbG9ja19fcHJlKXt3aGl0ZS1zcGFjZTpwcmUtd3JhcDtiYWNrZ3JvdW5kOlwiLCBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAnc3ViZHVlZCcpLCBcIjtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO31wcmU6bm90KC5ldWlDb2RlQmxvY2tfX3ByZSkscHJlOm5vdCguZXVpQ29kZUJsb2NrX19wcmUpIGNvZGV7ZGlzcGxheTpibG9jazt9PjpsYXN0LWNoaWxke1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgJzAgIWltcG9ydGFudCcpLCBcIjt9a2Jke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLXZlcnRpY2FsJywgZXVpVGhlbWUuc2l6ZS54eHMpLCBcIiBcIiwgbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiIGxpbmUtaGVpZ2h0OjE7Ym9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgc29saWQgXCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjtib3JkZXItcmFkaXVzOlwiLCBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLmJvcmRlci5yYWRpdXMuc21hbGwsIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAvIDI7XG4gICAgfSksIFwiO307bGFiZWw6ZXVpVGV4dDtcIiksXG4gICAgY29uc3RyYWluZWRXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCBldWlUZXh0Q29uc3RyYWluZWRNYXhXaWR0aCksIFwiOztsYWJlbDpjb25zdHJhaW5lZFdpZHRoO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgY3VzdG9tU2NhbGU6ICdtJ1xuICAgIH0pLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhldWlTY2FsZVRleHQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICBjdXN0b21TY2FsZTogJ3MnXG4gICAgfSksIFwiOztsYWJlbDpzO1wiKSxcbiAgICB4czogLyojX19QVVJFX18qL2NzcyhldWlTY2FsZVRleHQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICBjdXN0b21TY2FsZTogJ3hzJ1xuICAgIH0pLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHJlbGF0aXZlOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgIHVuaXQ6ICdlbSdcbiAgICB9KSwgXCI7O2xhYmVsOnJlbGF0aXZlO1wiKVxuICB9O1xufTsiLCAiaW1wb3J0IHsgQ29tcG9uZW50LCBjcmVhdGVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIERldGVjdCBFbGVtZW50IFJlc2l6ZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zZGVjaW1hL2phdmFzY3JpcHQtZGV0ZWN0LWVsZW1lbnQtcmVzaXplXG4gKiBTZWJhc3RpYW4gRGVjaW1hXG4gKlxuICogRm9ya2VkIGZyb20gdmVyc2lvbiAwLjUuMzsgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zOlxuICogMSkgR3VhcmQgYWdhaW5zdCB1bnNhZmUgJ3dpbmRvdycgYW5kICdkb2N1bWVudCcgcmVmZXJlbmNlcyAodG8gc3VwcG9ydCBTU1IpLlxuICogMikgRGVmZXIgaW5pdGlhbGl6YXRpb24gY29kZSB2aWEgYSB0b3AtbGV2ZWwgZnVuY3Rpb24gd3JhcHBlciAodG8gc3VwcG9ydCBTU1IpLlxuICogMykgQXZvaWQgdW5uZWNlc3NhcnkgcmVmbG93cyBieSBub3QgbWVhc3VyaW5nIHNpemUgZm9yIHNjcm9sbCBldmVudHMgYnViYmxpbmcgZnJvbSBjaGlsZHJlbi5cbiAqIDQpIEFkZCBub25jZSBmb3Igc3R5bGUgZWxlbWVudC5cbiAqIDUpIFVzZSAnZXhwb3J0JyBzdGF0ZW1lbnQgb3ZlciAnbW9kdWxlLmV4cG9ydHMnIGFzc2lnbm1lbnRcbiAqKi9cblxuLy8gQ2hlY2sgYGRvY3VtZW50YCBhbmQgYHdpbmRvd2AgaW4gY2FzZSBvZiBzZXJ2ZXItc2lkZSByZW5kZXJpbmdcbmxldCB3aW5kb3dPYmplY3Q7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICB3aW5kb3dPYmplY3QgPSB3aW5kb3c7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gIHdpbmRvd09iamVjdCA9IHNlbGY7XG59IGVsc2Uge1xuICB3aW5kb3dPYmplY3QgPSBnbG9iYWw7XG59XG5sZXQgY2FuY2VsRnJhbWUgPSBudWxsO1xubGV0IHJlcXVlc3RGcmFtZSA9IG51bGw7XG5jb25zdCBUSU1FT1VUX0RVUkFUSU9OID0gMjA7XG5jb25zdCBjbGVhclRpbWVvdXRGbiA9IHdpbmRvd09iamVjdC5jbGVhclRpbWVvdXQ7XG5jb25zdCBzZXRUaW1lb3V0Rm4gPSB3aW5kb3dPYmplY3Quc2V0VGltZW91dDtcbmNvbnN0IGNhbmNlbEFuaW1hdGlvbkZyYW1lRm4gPSB3aW5kb3dPYmplY3QuY2FuY2VsQW5pbWF0aW9uRnJhbWUgfHwgd2luZG93T2JqZWN0Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZTtcbmNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuID0gd2luZG93T2JqZWN0LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3dPYmplY3QubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5pZiAoY2FuY2VsQW5pbWF0aW9uRnJhbWVGbiA9PSBudWxsIHx8IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuID09IG51bGwpIHtcbiAgLy8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvbid0IHN1cHBvcnQgYW5pbWF0aW9uIGZyYW1lLFxuICAvLyBmYWxsYmFjayB0byBhIHNldFRpbWVvdXQgYmFzZWQgYXBwcm9hY2guXG4gIGNhbmNlbEZyYW1lID0gY2xlYXJUaW1lb3V0Rm47XG4gIHJlcXVlc3RGcmFtZSA9IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZVZpYVNldFRpbWVvdXQoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gc2V0VGltZW91dEZuKGNhbGxiYWNrLCBUSU1FT1VUX0RVUkFUSU9OKTtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIENvdW50ZXIgaW50dWl0aXZlbHksIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgYW5pbWF0aW9uIGZyYW1lcyBjYW4gYmUgdHJpY2tpZXIuXG4gIC8vIENocm9tZSdzIFwiVGhyb3R0bGUgbm9uLXZpc2libGUgY3Jvc3Mtb3JpZ2luIGlmcmFtZXNcIiBmbGFnIGNhbiBwcmV2ZW50IHJBRnMgZnJvbSBiZWluZyBjYWxsZWQuXG4gIC8vIEluIHRoaXMgY2FzZSwgd2Ugc2hvdWxkIGZhbGxiYWNrIHRvIGEgc2V0VGltZW91dCgpIGltcGxlbWVudGF0aW9uLlxuICBjYW5jZWxGcmFtZSA9IGZ1bmN0aW9uIGNhbmNlbEZyYW1lKFthbmltYXRpb25GcmFtZUlELCB0aW1lb3V0SURdKSB7XG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWVGbihhbmltYXRpb25GcmFtZUlEKTtcbiAgICBjbGVhclRpbWVvdXRGbih0aW1lb3V0SUQpO1xuICB9O1xuICByZXF1ZXN0RnJhbWUgPSBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVXaXRoU2V0VGltZW91dEZhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgYW5pbWF0aW9uRnJhbWVJRCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuKGZ1bmN0aW9uIGFuaW1hdGlvbkZyYW1lQ2FsbGJhY2soKSB7XG4gICAgICBjbGVhclRpbWVvdXRGbih0aW1lb3V0SUQpO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0Rm4oZnVuY3Rpb24gdGltZW91dENhbGxiYWNrKCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWVGbihhbmltYXRpb25GcmFtZUlEKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSwgVElNRU9VVF9EVVJBVElPTik7XG4gICAgcmV0dXJuIFthbmltYXRpb25GcmFtZUlELCB0aW1lb3V0SURdO1xuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlRGV0ZWN0RWxlbWVudFJlc2l6ZShub25jZSkge1xuICBsZXQgYW5pbWF0aW9uS2V5ZnJhbWVzO1xuICBsZXQgYW5pbWF0aW9uTmFtZTtcbiAgbGV0IGFuaW1hdGlvblN0YXJ0RXZlbnQ7XG4gIGxldCBhbmltYXRpb25TdHlsZTtcbiAgbGV0IGNoZWNrVHJpZ2dlcnM7XG4gIGxldCByZXNldFRyaWdnZXJzO1xuICBsZXQgc2Nyb2xsTGlzdGVuZXI7XG4gIGNvbnN0IGF0dGFjaEV2ZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmF0dGFjaEV2ZW50O1xuICBpZiAoIWF0dGFjaEV2ZW50KSB7XG4gICAgcmVzZXRUcmlnZ2VycyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICBjb25zdCB0cmlnZ2VycyA9IGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLFxuICAgICAgICBleHBhbmQgPSB0cmlnZ2Vycy5maXJzdEVsZW1lbnRDaGlsZCxcbiAgICAgICAgY29udHJhY3QgPSB0cmlnZ2Vycy5sYXN0RWxlbWVudENoaWxkLFxuICAgICAgICBleHBhbmRDaGlsZCA9IGV4cGFuZC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgIGNvbnRyYWN0LnNjcm9sbExlZnQgPSBjb250cmFjdC5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnRyYWN0LnNjcm9sbFRvcCA9IGNvbnRyYWN0LnNjcm9sbEhlaWdodDtcbiAgICAgIGV4cGFuZENoaWxkLnN0eWxlLndpZHRoID0gZXhwYW5kLm9mZnNldFdpZHRoICsgMSArIFwicHhcIjtcbiAgICAgIGV4cGFuZENoaWxkLnN0eWxlLmhlaWdodCA9IGV4cGFuZC5vZmZzZXRIZWlnaHQgKyAxICsgXCJweFwiO1xuICAgICAgZXhwYW5kLnNjcm9sbExlZnQgPSBleHBhbmQuc2Nyb2xsV2lkdGg7XG4gICAgICBleHBhbmQuc2Nyb2xsVG9wID0gZXhwYW5kLnNjcm9sbEhlaWdodDtcbiAgICB9O1xuICAgIGNoZWNrVHJpZ2dlcnMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0V2lkdGggIT09IGVsZW1lbnQuX19yZXNpemVMYXN0X18ud2lkdGggfHwgZWxlbWVudC5vZmZzZXRIZWlnaHQgIT09IGVsZW1lbnQuX19yZXNpemVMYXN0X18uaGVpZ2h0O1xuICAgIH07XG4gICAgc2Nyb2xsTGlzdGVuZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgLy8gRG9uJ3QgbWVhc3VyZSAod2hpY2ggZm9yY2VzKSByZWZsb3cgZm9yIHNjcm9sbHMgdGhhdCBoYXBwZW4gaW5zaWRlIG9mIGNoaWxkcmVuIVxuICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSAmJiB0eXBlb2YgZS50YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YgPT09IFwiZnVuY3Rpb25cIiAmJiBlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihcImNvbnRyYWN0LXRyaWdnZXJcIikgPCAwICYmIGUudGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKFwiZXhwYW5kLXRyaWdnZXJcIikgPCAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzO1xuICAgICAgcmVzZXRUcmlnZ2Vycyh0aGlzKTtcbiAgICAgIGlmICh0aGlzLl9fcmVzaXplUkFGX18pIHtcbiAgICAgICAgY2FuY2VsRnJhbWUodGhpcy5fX3Jlc2l6ZVJBRl9fKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX19yZXNpemVSQUZfXyA9IHJlcXVlc3RGcmFtZShmdW5jdGlvbiBhbmltYXRpb25GcmFtZSgpIHtcbiAgICAgICAgaWYgKGNoZWNrVHJpZ2dlcnMoZWxlbWVudCkpIHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLndpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLmhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hSZXNpemVMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgZm4uY2FsbChlbGVtZW50LCBlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qIERldGVjdCBDU1MgQW5pbWF0aW9ucyBzdXBwb3J0IHRvIGRldGVjdCBlbGVtZW50IGRpc3BsYXkvcmUtYXR0YWNoICovXG4gICAgbGV0IGFuaW1hdGlvbiA9IGZhbHNlO1xuICAgIGxldCBrZXlmcmFtZXByZWZpeCA9IFwiXCI7XG4gICAgYW5pbWF0aW9uU3RhcnRFdmVudCA9IFwiYW5pbWF0aW9uc3RhcnRcIjtcbiAgICBjb25zdCBkb21QcmVmaXhlcyA9IFwiV2Via2l0IE1veiBPIG1zXCIuc3BsaXQoXCIgXCIpO1xuICAgIGxldCBzdGFydEV2ZW50cyA9IFwid2Via2l0QW5pbWF0aW9uU3RhcnQgYW5pbWF0aW9uc3RhcnQgb0FuaW1hdGlvblN0YXJ0IE1TQW5pbWF0aW9uU3RhcnRcIi5zcGxpdChcIiBcIik7XG4gICAgbGV0IHBmeCA9IFwiXCI7XG4gICAge1xuICAgICAgY29uc3QgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZha2VlbGVtZW50XCIpO1xuICAgICAgaWYgKGVsbS5zdHlsZS5hbmltYXRpb25OYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhbmltYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tUHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZWxtLnN0eWxlW2RvbVByZWZpeGVzW2ldICsgXCJBbmltYXRpb25OYW1lXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBmeCA9IGRvbVByZWZpeGVzW2ldO1xuICAgICAgICAgICAga2V5ZnJhbWVwcmVmaXggPSBcIi1cIiArIHBmeC50b0xvd2VyQ2FzZSgpICsgXCItXCI7XG4gICAgICAgICAgICBhbmltYXRpb25TdGFydEV2ZW50ID0gc3RhcnRFdmVudHNbaV07XG4gICAgICAgICAgICBhbmltYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGFuaW1hdGlvbk5hbWUgPSBcInJlc2l6ZWFuaW1cIjtcbiAgICBhbmltYXRpb25LZXlmcmFtZXMgPSBcIkBcIiArIGtleWZyYW1lcHJlZml4ICsgXCJrZXlmcmFtZXMgXCIgKyBhbmltYXRpb25OYW1lICsgXCIgeyBmcm9tIHsgb3BhY2l0eTogMDsgfSB0byB7IG9wYWNpdHk6IDA7IH0gfSBcIjtcbiAgICBhbmltYXRpb25TdHlsZSA9IGtleWZyYW1lcHJlZml4ICsgXCJhbmltYXRpb246IDFtcyBcIiArIGFuaW1hdGlvbk5hbWUgKyBcIjsgXCI7XG4gIH1cbiAgY29uc3QgY3JlYXRlU3R5bGVzID0gZnVuY3Rpb24gKGRvYykge1xuICAgIGlmICghZG9jLmdldEVsZW1lbnRCeUlkKFwiZGV0ZWN0RWxlbWVudFJlc2l6ZVwiKSkge1xuICAgICAgLy9vcGFjaXR5OjAgd29ya3MgYXJvdW5kIGEgY2hyb21lIGJ1ZyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mjg2MzYwXG4gICAgICBjb25zdCBjc3MgPSAoYW5pbWF0aW9uS2V5ZnJhbWVzID8gYW5pbWF0aW9uS2V5ZnJhbWVzIDogXCJcIikgKyBcIi5yZXNpemUtdHJpZ2dlcnMgeyBcIiArIChhbmltYXRpb25TdHlsZSA/IGFuaW1hdGlvblN0eWxlIDogXCJcIikgKyBcInZpc2liaWxpdHk6IGhpZGRlbjsgb3BhY2l0eTogMDsgfSBcIiArICcucmVzaXplLXRyaWdnZXJzLCAucmVzaXplLXRyaWdnZXJzID4gZGl2LCAuY29udHJhY3QtdHJpZ2dlcjpiZWZvcmUgeyBjb250ZW50OiBcIiBcIjsgZGlzcGxheTogYmxvY2s7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBvdmVyZmxvdzogaGlkZGVuOyB6LWluZGV4OiAtMTsgfSAucmVzaXplLXRyaWdnZXJzID4gZGl2IHsgYmFja2dyb3VuZDogI2VlZTsgb3ZlcmZsb3c6IGF1dG87IH0gLmNvbnRyYWN0LXRyaWdnZXI6YmVmb3JlIHsgd2lkdGg6IDIwMCU7IGhlaWdodDogMjAwJTsgfScsXG4gICAgICAgIGhlYWQgPSBkb2MuaGVhZCB8fCBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLFxuICAgICAgICBzdHlsZSA9IGRvYy5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgICBzdHlsZS5pZCA9IFwiZGV0ZWN0RWxlbWVudFJlc2l6ZVwiO1xuICAgICAgc3R5bGUudHlwZSA9IFwidGV4dC9jc3NcIjtcbiAgICAgIGlmIChub25jZSAhPSBudWxsKSB7XG4gICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICAgIH1cbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgYWRkUmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiAoZWxlbWVudCwgZm4pIHtcbiAgICBpZiAoYXR0YWNoRXZlbnQpIHtcbiAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoXCJvbnJlc2l6ZVwiLCBmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18pIHtcbiAgICAgICAgY29uc3QgZG9jID0gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICBjb25zdCBlbGVtZW50U3R5bGUgPSB3aW5kb3dPYmplY3QuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSAmJiBlbGVtZW50U3R5bGUucG9zaXRpb24gPT09IFwic3RhdGljXCIpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZVN0eWxlcyhkb2MpO1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fID0ge307XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXyA9IFtdO1xuICAgICAgICAoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18gPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuY2xhc3NOYW1lID0gXCJyZXNpemUtdHJpZ2dlcnNcIjtcbiAgICAgICAgY29uc3QgZXhwYW5kVHJpZ2dlciA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBleHBhbmRUcmlnZ2VyLmNsYXNzTmFtZSA9IFwiZXhwYW5kLXRyaWdnZXJcIjtcbiAgICAgICAgZXhwYW5kVHJpZ2dlci5hcHBlbmRDaGlsZChkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0VHJpZ2dlciA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBjb250cmFjdFRyaWdnZXIuY2xhc3NOYW1lID0gXCJjb250cmFjdC10cmlnZ2VyXCI7XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLmFwcGVuZENoaWxkKGV4cGFuZFRyaWdnZXIpO1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5hcHBlbmRDaGlsZChjb250cmFjdFRyaWdnZXIpO1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fKTtcbiAgICAgICAgcmVzZXRUcmlnZ2VycyhlbGVtZW50KTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHNjcm9sbExpc3RlbmVyLCB0cnVlKTtcblxuICAgICAgICAvKiBMaXN0ZW4gZm9yIGEgY3NzIGFuaW1hdGlvbiB0byBkZXRlY3QgZWxlbWVudCBkaXNwbGF5L3JlLWF0dGFjaCAqL1xuICAgICAgICBpZiAoYW5pbWF0aW9uU3RhcnRFdmVudCkge1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyA9IGZ1bmN0aW9uIGFuaW1hdGlvbkxpc3RlbmVyKGUpIHtcbiAgICAgICAgICAgIGlmIChlLmFuaW1hdGlvbk5hbWUgPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgcmVzZXRUcmlnZ2VycyhlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLmFkZEV2ZW50TGlzdGVuZXIoYW5pbWF0aW9uU3RhcnRFdmVudCwgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLnB1c2goZm4pO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcmVtb3ZlUmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiAoZWxlbWVudCwgZm4pIHtcbiAgICBpZiAoYXR0YWNoRXZlbnQpIHtcbiAgICAgIGVsZW1lbnQuZGV0YWNoRXZlbnQoXCJvbnJlc2l6ZVwiLCBmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5zcGxpY2UoZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmluZGV4T2YoZm4pLCAxKTtcbiAgICAgIGlmICghZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmxlbmd0aCkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgc2Nyb2xsTGlzdGVuZXIsIHRydWUpO1xuICAgICAgICBpZiAoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fKSB7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhbmltYXRpb25TdGFydEV2ZW50LCBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18pO1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyA9ICFlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIFByZWFjdCBjb21wYXQ7IHNlZSBkZXZlbG9waXQvcHJlYWN0LWNvbXBhdC9pc3N1ZXMvMjI4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiB7XG4gICAgYWRkUmVzaXplTGlzdGVuZXIsXG4gICAgcmVtb3ZlUmVzaXplTGlzdGVuZXJcbiAgfTtcbn1cblxuY2xhc3MgQXV0b1NpemVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBoZWlnaHQ6IHRoaXMucHJvcHMuZGVmYXVsdEhlaWdodCB8fCAwLFxuICAgICAgc2NhbGVkSGVpZ2h0OiB0aGlzLnByb3BzLmRlZmF1bHRIZWlnaHQgfHwgMCxcbiAgICAgIHNjYWxlZFdpZHRoOiB0aGlzLnByb3BzLmRlZmF1bHRXaWR0aCB8fCAwLFxuICAgICAgd2lkdGg6IHRoaXMucHJvcHMuZGVmYXVsdFdpZHRoIHx8IDBcbiAgICB9O1xuICAgIHRoaXMuX2F1dG9TaXplciA9IG51bGw7XG4gICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSA9IG51bGw7XG4gICAgdGhpcy5fcGFyZW50Tm9kZSA9IG51bGw7XG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIHRoaXMuX3RpbWVvdXRJZCA9IG51bGw7XG4gICAgdGhpcy5fb25SZXNpemUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl90aW1lb3V0SWQgPSBudWxsO1xuICAgICAgY29uc3Qge1xuICAgICAgICBkaXNhYmxlSGVpZ2h0LFxuICAgICAgICBkaXNhYmxlV2lkdGgsXG4gICAgICAgIG9uUmVzaXplXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICh0aGlzLl9wYXJlbnROb2RlKSB7XG4gICAgICAgIC8vIEd1YXJkIGFnYWluc3QgQXV0b1NpemVyIGNvbXBvbmVudCBiZWluZyByZW1vdmVkIGZyb20gdGhlIERPTSBpbW1lZGlhdGVseSBhZnRlciBiZWluZyBhZGRlZC5cbiAgICAgICAgLy8gVGhpcyBjYW4gcmVzdWx0IGluIGludmFsaWQgc3R5bGUgdmFsdWVzIHdoaWNoIGNhbiByZXN1bHQgaW4gTmFOIHZhbHVlcyBpZiB3ZSBkb24ndCBoYW5kbGUgdGhlbS5cbiAgICAgICAgLy8gU2VlIGlzc3VlICMxNTAgZm9yIG1vcmUgY29udGV4dC5cblxuICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX3BhcmVudE5vZGUpIHx8IHt9O1xuICAgICAgICBjb25zdCBwYWRkaW5nTGVmdCA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0xlZnQgfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdSaWdodCB8fCBcIjBcIik7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdUb3AgfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nQm90dG9tIHx8IFwiMFwiKTtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuX3BhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHNjYWxlZEhlaWdodCA9IHJlY3QuaGVpZ2h0IC0gcGFkZGluZ1RvcCAtIHBhZGRpbmdCb3R0b207XG4gICAgICAgIGNvbnN0IHNjYWxlZFdpZHRoID0gcmVjdC53aWR0aCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0O1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLl9wYXJlbnROb2RlLm9mZnNldEhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuX3BhcmVudE5vZGUub2Zmc2V0V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDtcbiAgICAgICAgaWYgKCFkaXNhYmxlSGVpZ2h0ICYmICh0aGlzLnN0YXRlLmhlaWdodCAhPT0gaGVpZ2h0IHx8IHRoaXMuc3RhdGUuc2NhbGVkSGVpZ2h0ICE9PSBzY2FsZWRIZWlnaHQpIHx8ICFkaXNhYmxlV2lkdGggJiYgKHRoaXMuc3RhdGUud2lkdGggIT09IHdpZHRoIHx8IHRoaXMuc3RhdGUuc2NhbGVkV2lkdGggIT09IHNjYWxlZFdpZHRoKSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBzY2FsZWRIZWlnaHQsXG4gICAgICAgICAgICBzY2FsZWRXaWR0aFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZXNpemUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgb25SZXNpemUoe1xuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHNjYWxlZEhlaWdodCxcbiAgICAgICAgICAgICAgc2NhbGVkV2lkdGgsXG4gICAgICAgICAgICAgIHdpZHRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX3NldFJlZiA9IGF1dG9TaXplciA9PiB7XG4gICAgICB0aGlzLl9hdXRvU2l6ZXIgPSBhdXRvU2l6ZXI7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBub25jZVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9hdXRvU2l6ZXIgPyB0aGlzLl9hdXRvU2l6ZXIucGFyZW50Tm9kZSA6IG51bGw7XG4gICAgaWYgKHBhcmVudE5vZGUgIT0gbnVsbCAmJiBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQgJiYgcGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3ICYmIHBhcmVudE5vZGUgaW5zdGFuY2VvZiBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuSFRNTEVsZW1lbnQpIHtcbiAgICAgIC8vIERlbGF5IGFjY2VzcyBvZiBwYXJlbnROb2RlIHVudGlsIG1vdW50LlxuICAgICAgLy8gVGhpcyBoYW5kbGVzIGVkZ2UtY2FzZXMgd2hlcmUgdGhlIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIHVubW91bnRlZCBiZWZvcmUgaXRzIHJlZiBoYXMgYmVlbiBzZXQsXG4gICAgICAvLyBBcyB3ZWxsIGFzIGxpYnJhcmllcyBsaWtlIHJlYWN0LWxpdGUgd2hpY2ggaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBsaWZlY3ljbGUuXG4gICAgICB0aGlzLl9wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcblxuICAgICAgLy8gVXNlIFJlc2l6ZU9ic2VydmVyIGZyb20gdGhlIHNhbWUgY29udGV4dCB3aGVyZSBwYXJlbnROb2RlICh3aGljaCB3ZSB3aWxsIG9ic2VydmUpIHdhcyBkZWZpbmVkXG4gICAgICAvLyBVc2luZyBqdXN0IGdsb2JhbCBjYW4gcmVzdWx0IGludG8gb25SZXNpemUgZXZlbnRzIG5vdCBiZWluZyBlbWl0dGVkIGluIGNhc2VzIHdpdGggbXVsdGlwbGUgcmVhbG1zXG4gICAgICBjb25zdCBSZXNpemVPYnNlcnZlckluc3RhbmNlID0gcGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LlJlc2l6ZU9ic2VydmVyO1xuICAgICAgaWYgKFJlc2l6ZU9ic2VydmVySW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlckluc3RhbmNlKCgpID0+IHtcbiAgICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IFwiUmVzaXplT2JzZXJ2ZXIgbG9vcCBsaW1pdCBleGNlZWRlZFwiIGVycm9yO1xuICAgICAgICAgIC8vIGNvdWxkIGJlIHRyaWdnZXJlZCBpZiB0aGUgc3RhdGUgdXBkYXRlIGNhdXNlcyB0aGUgUmVzaXplT2JzZXJ2ZXIgaGFuZGxlciB0byBydW4gbG9uZy5cbiAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplci9pc3N1ZXMvNTVcbiAgICAgICAgICB0aGlzLl90aW1lb3V0SWQgPSBzZXRUaW1lb3V0KHRoaXMuX29uUmVzaXplLCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUocGFyZW50Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEZWZlciByZXF1aXJpbmcgcmVzaXplIGhhbmRsZXIgaW4gb3JkZXIgdG8gc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgICAgIC8vIFNlZSBpc3N1ZSAjNDFcbiAgICAgICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSA9IGNyZWF0ZURldGVjdEVsZW1lbnRSZXNpemUobm9uY2UpO1xuICAgICAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplLmFkZFJlc2l6ZUxpc3RlbmVyKHBhcmVudE5vZGUsIHRoaXMuX29uUmVzaXplKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29uUmVzaXplKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLl9wYXJlbnROb2RlKSB7XG4gICAgICBpZiAodGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSkge1xuICAgICAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplLnJlbW92ZVJlc2l6ZUxpc3RlbmVyKHRoaXMuX3BhcmVudE5vZGUsIHRoaXMuX29uUmVzaXplKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl90aW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fcmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBkZWZhdWx0SGVpZ2h0LFxuICAgICAgZGVmYXVsdFdpZHRoLFxuICAgICAgZGlzYWJsZUhlaWdodCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVdpZHRoID0gZmFsc2UsXG4gICAgICBkb05vdEJhaWxPdXRPbkVtcHR5Q2hpbGRyZW4gPSBmYWxzZSxcbiAgICAgIG5vbmNlLFxuICAgICAgb25SZXNpemUsXG4gICAgICBzdHlsZSA9IHt9LFxuICAgICAgdGFnTmFtZSA9IFwiZGl2XCIsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgaGVpZ2h0LFxuICAgICAgc2NhbGVkSGVpZ2h0LFxuICAgICAgc2NhbGVkV2lkdGgsXG4gICAgICB3aWR0aFxuICAgIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gT3V0ZXIgZGl2IHNob3VsZCBub3QgZm9yY2Ugd2lkdGgvaGVpZ2h0IHNpbmNlIHRoYXQgbWF5IHByZXZlbnQgY29udGFpbmVycyBmcm9tIHNocmlua2luZy5cbiAgICAvLyBJbm5lciBjb21wb25lbnQgc2hvdWxkIG92ZXJmbG93IGFuZCB1c2UgY2FsY3VsYXRlZCB3aWR0aC9oZWlnaHQuXG4gICAgLy8gU2VlIGlzc3VlICM2OCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICBjb25zdCBvdXRlclN0eWxlID0ge1xuICAgICAgb3ZlcmZsb3c6IFwidmlzaWJsZVwiXG4gICAgfTtcbiAgICBjb25zdCBjaGlsZFBhcmFtcyA9IHt9O1xuXG4gICAgLy8gQXZvaWQgcmVuZGVyaW5nIGNoaWxkcmVuIGJlZm9yZSB0aGUgaW5pdGlhbCBtZWFzdXJlbWVudHMgaGF2ZSBiZWVuIGNvbGxlY3RlZC5cbiAgICAvLyBBdCBiZXN0IHRoaXMgd291bGQganVzdCBiZSB3YXN0aW5nIGN5Y2xlcy5cbiAgICBsZXQgYmFpbG91dE9uQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICBpZiAoIWRpc2FibGVIZWlnaHQpIHtcbiAgICAgIGlmIChoZWlnaHQgPT09IDApIHtcbiAgICAgICAgYmFpbG91dE9uQ2hpbGRyZW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgb3V0ZXJTdHlsZS5oZWlnaHQgPSAwO1xuICAgICAgY2hpbGRQYXJhbXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgY2hpbGRQYXJhbXMuc2NhbGVkSGVpZ2h0ID0gc2NhbGVkSGVpZ2h0O1xuICAgIH1cbiAgICBpZiAoIWRpc2FibGVXaWR0aCkge1xuICAgICAgaWYgKHdpZHRoID09PSAwKSB7XG4gICAgICAgIGJhaWxvdXRPbkNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG91dGVyU3R5bGUud2lkdGggPSAwO1xuICAgICAgY2hpbGRQYXJhbXMud2lkdGggPSB3aWR0aDtcbiAgICAgIGNoaWxkUGFyYW1zLnNjYWxlZFdpZHRoID0gc2NhbGVkV2lkdGg7XG4gICAgfVxuICAgIGlmIChkb05vdEJhaWxPdXRPbkVtcHR5Q2hpbGRyZW4pIHtcbiAgICAgIGJhaWxvdXRPbkNoaWxkcmVuID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIHtcbiAgICAgIHJlZjogdGhpcy5fc2V0UmVmLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgLi4ub3V0ZXJTdHlsZSxcbiAgICAgICAgLi4uc3R5bGVcbiAgICAgIH0sXG4gICAgICAuLi5yZXN0XG4gICAgfSwgIWJhaWxvdXRPbkNoaWxkcmVuICYmIGNoaWxkcmVuKGNoaWxkUGFyYW1zKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIZWlnaHRBbmRXaWR0aFByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcyAmJiBwcm9wcy5kaXNhYmxlSGVpZ2h0ICE9PSB0cnVlICYmIHByb3BzLmRpc2FibGVXaWR0aCAhPT0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGlzSGVpZ2h0T25seVByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcyAmJiBwcm9wcy5kaXNhYmxlSGVpZ2h0ICE9PSB0cnVlICYmIHByb3BzLmRpc2FibGVXaWR0aCA9PT0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGlzV2lkdGhPbmx5UHJvcHMocHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzICYmIHByb3BzLmRpc2FibGVIZWlnaHQgPT09IHRydWUgJiYgcHJvcHMuZGlzYWJsZVdpZHRoICE9PSB0cnVlO1xufVxuXG5leHBvcnQgeyBBdXRvU2l6ZXIgYXMgZGVmYXVsdCwgaXNIZWlnaHRBbmRXaWR0aFByb3BzLCBpc0hlaWdodE9ubHlQcm9wcywgaXNXaWR0aE9ubHlQcm9wcyB9O1xuIiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IEF1dG9TaXplciBmcm9tICdyZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyJztcbmV4cG9ydCB2YXIgRXVpQXV0b1NpemVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQXV0b1NpemVyKSB7XG4gIGZ1bmN0aW9uIEV1aUF1dG9TaXplcigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQXV0b1NpemVyKTtcbiAgICByZXR1cm4gX2NhbGxTdXBlcih0aGlzLCBFdWlBdXRvU2l6ZXIsIGFyZ3VtZW50cyk7XG4gIH1cbiAgX2luaGVyaXRzKEV1aUF1dG9TaXplciwgX0F1dG9TaXplcik7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpQXV0b1NpemVyKTtcbn0oQXV0b1NpemVyKTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY29sb3JcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaWRlXCIsIFwiY2xhc3NOYW1lXCIsIFwiaXNEaXNhYmxlZFwiLCBcIm9uQ2xpY2tcIiwgXCJpY29uT25DbGlja1wiLCBcIm9uQ2xpY2tBcmlhTGFiZWxcIiwgXCJpY29uT25DbGlja0FyaWFMYWJlbFwiLCBcImNsb3NlQnV0dG9uUHJvcHNcIiwgXCJocmVmXCIsIFwicmVsXCIsIFwidGFyZ2V0XCIsIFwic3R5bGVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMsIGdldFNlY3VyZVJlbEZvclRhcmdldCwgd2NhZ0NvbnRyYXN0TWluIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsgRXVpSW5uZXJUZXh0IH0gZnJvbSAnLi4vaW5uZXJfdGV4dCc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBnZXRUZXh0Q29sb3IsIGdldENvbG9yQ29udHJhc3QsIGdldElzVmFsaWRDb2xvciB9IGZyb20gJy4vY29sb3JfdXRpbHMnO1xuaW1wb3J0IHsgZXVpQmFkZ2VTdHlsZXMgfSBmcm9tICcuL2JhZGdlLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBJQ09OX1NJREVTID0gWydsZWZ0JywgJ3JpZ2h0J107XG5leHBvcnQgdmFyIENPTE9SUyA9IFsnZGVmYXVsdCcsICdob2xsb3cnLCAncHJpbWFyeScsICdzdWNjZXNzJywgJ2FjY2VudCcsICd3YXJuaW5nJywgJ2RhbmdlciddO1xuZXhwb3J0IHZhciBFdWlCYWRnZSA9IGZ1bmN0aW9uIEV1aUJhZGdlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdkZWZhdWx0JyA6IF9yZWYkY29sb3IsXG4gICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgIF9yZWYkaWNvblNpZGUgPSBfcmVmLmljb25TaWRlLFxuICAgIGljb25TaWRlID0gX3JlZiRpY29uU2lkZSA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZiRpY29uU2lkZSxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgIGljb25PbkNsaWNrID0gX3JlZi5pY29uT25DbGljayxcbiAgICBvbkNsaWNrQXJpYUxhYmVsID0gX3JlZi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgIGljb25PbkNsaWNrQXJpYUxhYmVsID0gX3JlZi5pY29uT25DbGlja0FyaWFMYWJlbCxcbiAgICBjbG9zZUJ1dHRvblByb3BzID0gX3JlZi5jbG9zZUJ1dHRvblByb3BzLFxuICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgcmVsID0gX3JlZi5yZWwsXG4gICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgaXNEaXNhYmxlZCA9IF9pc0Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcbiAgdmFyIGlzTmFtZWRDb2xvciA9IENPTE9SUy5pbmNsdWRlcyhjb2xvcik7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBjdXN0b21Db2xvclN0eWxlcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIC8vIERpc2FibGVkIGJhZGdlcyBzaG91bGQgbm90IGhhdmUgY3VzdG9tIGNvbG9yc1xuICAgIGlmIChpc0Rpc2FibGVkKSByZXR1cm4gc3R5bGU7XG4gICAgLy8gTmFtZWQgY29sb3JzIHNldCB0aGVpciBzdHlsZXMgdmlhIEVtb3Rpb24gQ1NTIGFuZCBub3QgaW5saW5lIHN0eWxlc1xuICAgIGlmIChpc05hbWVkQ29sb3IpIHJldHVybiBzdHlsZTtcblxuICAgIC8vIERvIG91ciBiZXN0IHRvIGVuc3VyZSBjdXN0b20gY29sb3JzIHByb3ZpZGUgc3VmZmljaWVudCBjb250cmFzdFxuICAgIHRyeSB7XG4gICAgICAvLyBTZXQgZGFyayBvciBsaWdodCB0ZXh0IGNvbG9yIGJhc2VkIHVwb24gYmVzdCBjb250cmFzdFxuICAgICAgdmFyIHRleHRDb2xvciA9IGdldFRleHRDb2xvcihldWlUaGVtZSwgY29sb3IpO1xuXG4gICAgICAvLyBDaGVjayB0aGUgY29udHJhc3QgcmF0aW8uIElmIGl0J3MgbG93IGNvbnRyYXN0LCBlbWl0IGEgY29uc29sZSBhd3JuaW5nXG4gICAgICB2YXIgY29udHJhc3RSYXRpbyA9IGdldENvbG9yQ29udHJhc3QodGV4dENvbG9yLCBjb2xvcik7XG4gICAgICBpZiAoY29udHJhc3RSYXRpbyA8IHdjYWdDb250cmFzdE1pbikge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJXYXJuaW5nOiBcIi5jb25jYXQoY29sb3IsIFwiIGJhZGdlIGhhcyBhIGxvdyBjb250cmFzdCBvZiBcIikuY29uY2F0KGNvbnRyYXN0UmF0aW8udG9GaXhlZCgyKSwgXCIuIFNob3VsZCBiZSBhYm92ZSBcIikuY29uY2F0KHdjYWdDb250cmFzdE1pbiwgXCIuXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgJy0tZXVpQmFkZ2VCYWNrZ3JvdW5kQ29sb3InOiBjb2xvcixcbiAgICAgICAgJy0tZXVpQmFkZ2VUZXh0Q29sb3InOiB0ZXh0Q29sb3JcbiAgICAgIH0sIHN0eWxlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICghZ2V0SXNWYWxpZENvbG9yKGNvbG9yKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0V1aUJhZGdlIGV4cGVjdHMgYSB2YWxpZCBjb2xvci4gVGhpcyBjYW4gZWl0aGVyIGJlIGEgdGhyZWUgb3Igc2l4ICcgKyBcImNoYXJhY3RlciBoZXggdmFsdWUsIHJnYihhKSB2YWx1ZSwgaHN2IHZhbHVlLCBob2xsb3csIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBcIi5jb25jYXQoQ09MT1JTLCBcIi4gXCIpICsgXCJJbnN0ZWFkIGdvdCBcIi5jb25jYXQoY29sb3IsIFwiLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbY29sb3IsIGlzTmFtZWRDb2xvciwgaXNEaXNhYmxlZCwgc3R5bGUsIGV1aVRoZW1lXSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlCYWRnZVN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUJhZGdlXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGlzRGlzYWJsZWQgPyBbc3R5bGVzLmRpc2FibGVkXSA6IFtpc05hbWVkQ29sb3IgJiYgc3R5bGVzW2NvbG9yXSwgIWljb25PbkNsaWNrICYmIChvbkNsaWNrIHx8IGhyZWYpICYmIHN0eWxlcy5jbGlja2FibGVdKSk7XG4gIHZhciB0ZXh0Q3NzU3R5bGVzID0gW3N0eWxlcy50ZXh0LmV1aUJhZGdlX190ZXh0LCAob25DbGljayB8fCBocmVmKSAmJiAhaXNEaXNhYmxlZCAmJiBzdHlsZXMudGV4dC5jbGlja2FibGVdO1xuICB2YXIgaWNvbkNzc1N0eWxlcyA9IFtzdHlsZXMuaWNvbi5ldWlCYWRnZV9faWNvbiwgc3R5bGVzLmljb25baWNvblNpZGVdXTtcbiAgdmFyIGljb25CdXR0b25Dc3NTdHlsZXMgPSBbc3R5bGVzLmljb25CdXR0b24uZXVpQmFkZ2VfX2ljb25CdXR0b24sIHN0eWxlcy5pY29uQnV0dG9uW2ljb25TaWRlXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQmFkZ2UnLCBjbGFzc05hbWUpO1xuICB2YXIgY2xvc2VDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQmFkZ2VfX2ljb24nLCBjbG9zZUJ1dHRvblByb3BzID09PSBudWxsIHx8IGNsb3NlQnV0dG9uUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsb3NlQnV0dG9uUHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIEVsZW1lbnQgPSBocmVmICYmICFpc0Rpc2FibGVkID8gJ2EnIDogJ2J1dHRvbic7XG4gIHZhciByZWxPYmogPSB7fTtcbiAgaWYgKGhyZWYgJiYgIWlzRGlzYWJsZWQpIHtcbiAgICByZWxPYmouaHJlZiA9IGhyZWY7XG4gICAgcmVsT2JqLnRhcmdldCA9IHRhcmdldDtcbiAgICByZWxPYmoucmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gIH1cbiAgaWYgKG9uQ2xpY2spIHtcbiAgICByZWxPYmoub25DbGljayA9IG9uQ2xpY2s7XG4gIH1cbiAgdmFyIG9wdGlvbmFsSWNvbiA9IG51bGw7XG4gIGlmIChpY29uVHlwZSkge1xuICAgIGlmIChpY29uT25DbGljaykge1xuICAgICAgaWYgKCFpY29uT25DbGlja0FyaWFMYWJlbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1doZW4gcGFzc2luZyB0aGUgaWNvbk9uQ2xpY2sgcHJvcHMgdG8gRXVpQmFkZ2UsIHlvdSBtdXN0IGFsc28gcHJvdmlkZSBpY29uT25DbGlja0FyaWFMYWJlbCcpO1xuICAgICAgfVxuICAgICAgb3B0aW9uYWxJY29uID0gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCB7XG4gICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9faWNvbkJ1dHRvblwiLFxuICAgICAgICBjc3M6IGljb25CdXR0b25Dc3NTdHlsZXMsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBpY29uT25DbGlja0FyaWFMYWJlbCxcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIHRpdGxlOiBpY29uT25DbGlja0FyaWFMYWJlbCxcbiAgICAgICAgb25DbGljazogaWNvbk9uQ2xpY2tcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwgX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgICAgc2l6ZTogXCJzXCIsXG4gICAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG4gICAgICB9LCBjbG9zZUJ1dHRvblByb3BzLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xvc2VDbGFzc05hbWVzLFxuICAgICAgICBjc3M6IFtdLmNvbmNhdChpY29uQ3NzU3R5bGVzLCBbY2xvc2VCdXR0b25Qcm9wcyA9PT0gbnVsbCB8fCBjbG9zZUJ1dHRvblByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbG9zZUJ1dHRvblByb3BzLmNzc10pXG4gICAgICB9KSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25hbEljb24gPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgdHlwZTogaWNvblR5cGUsXG4gICAgICAgIHNpemU6IGNoaWxkcmVuID8gJ3MnIDogJ20nLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2ljb25cIixcbiAgICAgICAgY3NzOiBpY29uQ3NzU3R5bGVzLFxuICAgICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGlmIChvbkNsaWNrICYmICFvbkNsaWNrQXJpYUxhYmVsKSB7XG4gICAgY29uc29sZS53YXJuKCdXaGVuIHBhc3Npbmcgb25DbGljayB0byBFdWlCYWRnZSwgeW91IG11c3QgYWxzbyBwcm92aWRlIG9uQ2xpY2tBcmlhTGFiZWwnKTtcbiAgfVxuICB2YXIgY29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2NvbnRlbnRcIixcbiAgICBjc3M6IHN0eWxlcy5ldWlCYWRnZV9fY29udGVudFxuICB9LCBpY29uU2lkZSA9PT0gJ2xlZnQnICYmIG9wdGlvbmFsSWNvbiwgY2hpbGRyZW4gJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fdGV4dFwiLFxuICAgIGNzczogdGV4dENzc1N0eWxlc1xuICB9LCBjaGlsZHJlbiksIGljb25TaWRlID09PSAncmlnaHQnICYmIG9wdGlvbmFsSWNvbik7XG4gIGlmIChpY29uT25DbGljaykge1xuICAgIHJldHVybiBvbkNsaWNrIHx8IGhyZWYgPyBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIHN0eWxlOiBjdXN0b21Db2xvclN0eWxlc1xuICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fY29udGVudFwiLFxuICAgICAgY3NzOiBzdHlsZXMuZXVpQmFkZ2VfX2NvbnRlbnRcbiAgICB9LCBpY29uU2lkZSA9PT0gJ2xlZnQnICYmIG9wdGlvbmFsSWNvbiwgX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2NoaWxkQnV0dG9uXCIsXG4gICAgICAgIGNzczogc3R5bGVzLmV1aUJhZGdlX19jaGlsZEJ1dHRvbixcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBvbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgdGl0bGU6IGlubmVyVGV4dFxuICAgICAgfSwgcmVsT2JqLCByZXN0KSwgY2hpbGRyZW4pO1xuICAgIH0pLCBpY29uU2lkZSA9PT0gJ3JpZ2h0JyAmJiBvcHRpb25hbEljb24pKSA6IF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCBudWxsLCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgIHN0eWxlOiBjdXN0b21Db2xvclN0eWxlcyxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlc3QpLCBjb250ZW50KTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChvbkNsaWNrIHx8IGhyZWYpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IG9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgIHN0eWxlOiBjdXN0b21Db2xvclN0eWxlcyxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlbE9iaiwgcmVzdCksIGNvbnRlbnQpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICBzdHlsZTogY3VzdG9tQ29sb3JTdHlsZXMsXG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICB0aXRsZTogaW5uZXJUZXh0XG4gICAgICB9LCByZXN0KSwgY29udGVudCk7XG4gICAgfSk7XG4gIH1cbn07XG5FdWlCYWRnZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIEFjY2VwdHMgYW55IHN0cmluZyBmcm9tIG91ciBpY29uIGxpYnJhcnlcbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIFRoZSBzaWRlIG9mIHRoZSBiYWRnZSB0aGUgaWNvbiBzaG91bGQgc2l0XG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBY2NlcHRzIGVpdGhlciBvdXIgcGFsZXR0ZSBjb2xvcnMgKHByaW1hcnksIHN1Y2Nlc3MgLi5ldGMpIG9yIGEgaGV4IHZhbHVlIGAjRkZGRkZGYCwgYCMwMDBgLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogV2lsbCBvdmVycmlkZSBhbnkgY29sb3IgcGFzc2VkIHRocm91Z2ggdGhlIGBjb2xvcmAgcHJvcC5cbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFByb3BzIHBhc3NlZCB0byB0aGUgY2xvc2UgYnV0dG9uLlxuICAgICAqL1xuICBjbG9zZUJ1dHRvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIGljb24gd2l0aGluIHRoZSBiYWRnZVxuICAgICAqL1xuICBpY29uT25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgaWNvbk9uQ2xpY2sgYnV0dG9uXG4gICAgICovXG4gIGljb25PbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gdGhlIGJhZGdlIGl0c2VsZlxuICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBvbkNsaWNrIGJ1dHRvblxuICAgICAqL1xuICBvbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuZXhwb3J0IHZhciBnZXRFdmVudFBvc2l0aW9uID0gZnVuY3Rpb24gZ2V0RXZlbnRQb3NpdGlvbihsb2NhdGlvbiwgY29udGFpbmVyKSB7XG4gIHZhciB4ID0gbG9jYXRpb24ueCxcbiAgICB5ID0gbG9jYXRpb24ueTtcbiAgdmFyIF9jb250YWluZXIkZ2V0Qm91bmRpbiA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICB3aWR0aCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi53aWR0aCxcbiAgICBoZWlnaHQgPSBfY29udGFpbmVyJGdldEJvdW5kaW4uaGVpZ2h0LFxuICAgIGxlZnQgPSBfY29udGFpbmVyJGdldEJvdW5kaW4ubGVmdCxcbiAgICB0b3AgPSBfY29udGFpbmVyJGdldEJvdW5kaW4udG9wO1xuICB2YXIgbGVmdFBvcyA9IHggLSAobGVmdCArIHdpbmRvdy5wYWdlWE9mZnNldCk7XG4gIHZhciB0b3BQb3MgPSB5IC0gKHRvcCArIHdpbmRvdy5wYWdlWU9mZnNldCk7XG4gIGlmIChsZWZ0UG9zIDwgMCkge1xuICAgIGxlZnRQb3MgPSAwO1xuICB9IGVsc2UgaWYgKGxlZnRQb3MgPiB3aWR0aCkge1xuICAgIGxlZnRQb3MgPSB3aWR0aDtcbiAgfVxuICBpZiAodG9wUG9zIDwgMCkge1xuICAgIHRvcFBvcyA9IDA7XG4gIH0gZWxzZSBpZiAodG9wUG9zID4gaGVpZ2h0KSB7XG4gICAgdG9wUG9zID0gaGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgbGVmdDogbGVmdFBvcyxcbiAgICB0b3A6IHRvcFBvcyxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn07XG5leHBvcnQgdmFyIEhFWF9GQUxMQkFDSyA9ICcnO1xuZXhwb3J0IHZhciBIU1ZfRkFMTEJBQ0sgPSBbMCwgMCwgMF07XG5leHBvcnQgdmFyIFJHQl9GQUxMQkFDSyA9IFtOYU4sIE5hTiwgTmFOLCAxXTtcbmV4cG9ydCB2YXIgUkdCX0pPSU4gPSAnLCAnO1xuXG4vLyBHaXZlbiBhIHN0cmluZywgdGhpcyBhdHRlbXB0cyB0byByZXR1cm4gYSBmb3JtYXQgdGhhdCBjYW4gYmUgY29uc3VtZWQgYnkgY2hyb21hLWpzXG5leHBvcnQgdmFyIHBhcnNlQ29sb3IgPSBmdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0KSB7XG4gIHZhciBwYXJzZWQ7XG4gIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuICBpZiAoaW5wdXQuaW5kZXhPZignLCcpID4gMCkge1xuICAgIGlmICghL15bXFxzLC4wLTldKiQvLnRlc3QoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHJnYiA9IGlucHV0LnRyaW0oKS5zcGxpdCgnLCcpLmZpbHRlcihmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuIG4gIT09ICcnO1xuICAgIH0pLm1hcChOdW1iZXIpO1xuICAgIHBhcnNlZCA9IHJnYi5sZW5ndGggPiAyICYmIHJnYi5sZW5ndGggPCA1ID8gcmdiIDogSEVYX0ZBTExCQUNLO1xuICB9IGVsc2Uge1xuICAgIHBhcnNlZCA9IGlucHV0O1xuICB9XG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG4vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGlucHV0IHdpbGwgcmV0dXJuIGEgdmFsaWQgY2hyb21hLWpzIG9iamVjdCB3aGVuIGRlc2lnbmF0ZWQgYXMgb25lIG9mXG4vLyB0aGUgYWNjZXB0YWJsZSBmb3JtYXRzOiBoZXgsIHJnYiwgcmdiYVxuZXhwb3J0IHZhciBjaHJvbWFWYWxpZCA9IGZ1bmN0aW9uIGNocm9tYVZhbGlkKGNvbG9yKSB7XG4gIHZhciBwYXJzZWQgPSBjb2xvcjtcbiAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXJzZWQgPSBwYXJzZUNvbG9yKGNvbG9yKTtcbiAgfVxuICBpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoX3R5cGVvZihwYXJzZWQpID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBjaHJvbWEudmFsaWQocGFyc2VkLCAncmdiJykgfHwgY2hyb21hLnZhbGlkKHBhcnNlZCwgJ3JnYmEnKTtcbiAgfVxuICByZXR1cm4gY2hyb21hLnZhbGlkKGNvbG9yLCAnaGV4Jyk7XG59O1xuXG4vLyBHaXZlbiBhbiBpbnB1dCBhbmQgb3BhY2l0eSBjb25maWd1cmF0aW9uLCB0aGlzIHJldHVybnMgYSB2YWxpZCBjaHJvbWEtanMgb2JqZWN0XG5leHBvcnQgdmFyIGdldENocm9tYUNvbG9yID0gZnVuY3Rpb24gZ2V0Q2hyb21hQ29sb3IoaW5wdXQpIHtcbiAgdmFyIGFsbG93T3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gIHZhciBwYXJzZWQgPSBwYXJzZUNvbG9yKGlucHV0KTtcbiAgaWYgKHBhcnNlZCAmJiBjaHJvbWFWYWxpZChwYXJzZWQpKSB7XG4gICAgLy8gdHlwZSBndWFyZCBmb3IgdGhlIGZ1bmN0aW9uIG92ZXJsb2FkXG4gICAgdmFyIGNocm9tYUNvbG9yID0gX3R5cGVvZihwYXJzZWQpID09PSAnb2JqZWN0JyA/IGNocm9tYShwYXJzZWQpIDogY2hyb21hKHBhcnNlZCk7XG4gICAgaWYgKCFhbGxvd09wYWNpdHkgJiYgY2hyb21hQ29sb3IuYWxwaGEoKSA8IDEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY2hyb21hQ29sb3I7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vLyBHaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGgga2V5IHZhbHVlIHBhaXJzIHN0b3AvY29sb3IgcmV0dXJucyBhIGNzcyBsaW5lYXItZ3JhZGllbnRcbi8vIE9yIGdpdmVuIGFuIGFycmF5IG9mIGhleCBjb2xvcnMgcmV0dXJucyBhIGNzcyBsaW5lYXItZ3JhZGllbnRcbmV4cG9ydCB2YXIgZ2V0TGluZWFyR3JhZGllbnQgPSBmdW5jdGlvbiBnZXRMaW5lYXJHcmFkaWVudChwYWxldHRlKSB7XG4gIHZhciBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbiA9IHBhbGV0dGUubGVuZ3RoIC0gMTtcbiAgdmFyIGxpbmVhckdyYWRpZW50O1xuICB2YXIgcGFsZXR0ZUhhc1N0b3BzID0gcGFsZXR0ZS5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIF90eXBlb2YoaXRlbSkgPT09ICdvYmplY3QnO1xuICB9KTtcbiAgaWYgKHBhbGV0dGVIYXNTdG9wcykge1xuICAgIHZhciBwYWxldHRlQ29sb3JTdG9wID0gcGFsZXR0ZTtcbiAgICBsaW5lYXJHcmFkaWVudCA9IFwibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQocGFsZXR0ZUNvbG9yU3RvcFswXS5jb2xvciwgXCIgMCUsXCIpO1xuICAgIHZhciBsYXN0Q29sb3JTdG9wRGVjaW1hbCA9IDEwMCAvIHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLnN0b3A7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbjsgaSsrKSB7XG4gICAgICBsaW5lYXJHcmFkaWVudCA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVDb2xvclN0b3BbaV0uY29sb3IsIFwiIFwiKS5jb25jYXQoTWF0aC5mbG9vcihwYWxldHRlQ29sb3JTdG9wW2ldLnN0b3AgKiBsYXN0Q29sb3JTdG9wRGVjaW1hbCksIFwiJSxcIik7XG4gICAgfVxuICAgIHZhciBsaW5lYXJHcmFkaWVudFN0eWxlID0gXCJcIi5jb25jYXQobGluZWFyR3JhZGllbnQsIFwiIFwiKS5jb25jYXQocGFsZXR0ZUNvbG9yU3RvcFtsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbl0uY29sb3IsIFwiIDEwMCUpXCIpO1xuICAgIHJldHVybiBsaW5lYXJHcmFkaWVudFN0eWxlO1xuICB9IGVsc2Uge1xuICAgIGxpbmVhckdyYWRpZW50ID0gXCJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIFwiLmNvbmNhdChwYWxldHRlWzBdLCBcIiAwJSxcIik7XG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uOyBfaSsrKSB7XG4gICAgICBsaW5lYXJHcmFkaWVudCA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVbX2ldLCBcIiBcIikuY29uY2F0KE1hdGguZmxvb3IoMTAwICogX2kgLyBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbiksIFwiJSxcIik7XG4gICAgfVxuICAgIHZhciBfbGluZWFyR3JhZGllbnRTdHlsZSA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLCBcIiAxMDAlKVwiKTtcbiAgICByZXR1cm4gX2xpbmVhckdyYWRpZW50U3R5bGU7XG4gIH1cbn07XG5cbi8vIEdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBrZXkgdmFsdWUgcGFpcnMgc3RvcC9jb2xvciBvciBhbiBhcnJheSBvZiBoZXggY29sb3JzXG4vLyByZXR1cm5zIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBrZXkgdmFsdWUgcGFpcnMgY29sb3Ivd2lkdGhcbmV4cG9ydCB2YXIgZ2V0Rml4ZWRMaW5lYXJHcmFkaWVudCA9IGZ1bmN0aW9uIGdldEZpeGVkTGluZWFyR3JhZGllbnQocGFsZXR0ZSkge1xuICB2YXIgcGFsZXR0ZUhhc1N0b3BzID0gcGFsZXR0ZS5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIF90eXBlb2YoaXRlbSkgPT09ICdvYmplY3QnO1xuICB9KTtcbiAgaWYgKHBhbGV0dGVIYXNTdG9wcykge1xuICAgIHZhciBwYWxldHRlQ29sb3JTdG9wID0gcGFsZXR0ZTtcbiAgICB2YXIgZml4ZWRMaW5lYXJHcmFkaWVudFdpdGhTdG9wcyA9IHBhbGV0dGVDb2xvclN0b3AubWFwKGZ1bmN0aW9uIChjb2xvclN0b3AsIGluZGV4KSB7XG4gICAgICB2YXIgbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb24gPSBwYWxldHRlLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgbGFzdENvbG9yU3RvcERlY2ltYWwgPSAxMDAgLyBwYWxldHRlQ29sb3JTdG9wW2xhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uXS5zdG9wO1xuICAgICAgdmFyIGlzRmlyc3RDb2xvclN0b3AgPSBpbmRleCA9PT0gMDtcbiAgICAgIHZhciBwcmV2aW91c0NvbG9yU3RvcFdpZHRoO1xuICAgICAgaWYgKGlzRmlyc3RDb2xvclN0b3ApIHtcbiAgICAgICAgcHJldmlvdXNDb2xvclN0b3BXaWR0aCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmV2aW91c0NvbG9yU3RvcFdpZHRoID0gTWF0aC5mbG9vcihwYWxldHRlQ29sb3JTdG9wW2luZGV4IC0gMV0uc3RvcCAqIGxhc3RDb2xvclN0b3BEZWNpbWFsKTtcbiAgICAgIH1cbiAgICAgIHZhciBjdXJyZW50Q29sb3JTdG9wV2lkdGggPSBNYXRoLmZsb29yKGNvbG9yU3RvcC5zdG9wICogbGFzdENvbG9yU3RvcERlY2ltYWwpO1xuICAgICAgdmFyIGNvbG9yU3RvcFdpZHRoID0gY3VycmVudENvbG9yU3RvcFdpZHRoIC0gcHJldmlvdXNDb2xvclN0b3BXaWR0aDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiBjb2xvclN0b3AuY29sb3IsXG4gICAgICAgIHdpZHRoOiBcIlwiLmNvbmNhdChjb2xvclN0b3BXaWR0aCwgXCIlXCIpXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBmaXhlZExpbmVhckdyYWRpZW50V2l0aFN0b3BzO1xuICB9IGVsc2Uge1xuICAgIHZhciBfcGFsZXR0ZUNvbG9yU3RvcCA9IHBhbGV0dGU7XG4gICAgdmFyIHBhbGV0dGVXaWR0aCA9IDEwMCAvIHBhbGV0dGUubGVuZ3RoO1xuICAgIHZhciBmaXhlZExpbmVhckdyYWRpZW50V2lkdGhBdXRvID0gX3BhbGV0dGVDb2xvclN0b3AubWFwKGZ1bmN0aW9uIChoZXhDb2RlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogaGV4Q29kZSxcbiAgICAgICAgd2lkdGg6IFwiXCIuY29uY2F0KHBhbGV0dGVXaWR0aCwgXCIlXCIpXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBmaXhlZExpbmVhckdyYWRpZW50V2lkdGhBdXRvO1xuICB9XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBpc0NvbG9yRGFyaywgdGludCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUJ1dHRvbkNvbG9yLCBldWlCdXR0b25GaWxsQ29sb3IgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5pbXBvcnQgeyBjaHJvbWFWYWxpZCwgcGFyc2VDb2xvciB9IGZyb20gJy4uL2NvbG9yX3BpY2tlci91dGlscyc7XG5leHBvcnQgdmFyIGV1aUJhZGdlQ29sb3JzID0gZnVuY3Rpb24gZXVpQmFkZ2VDb2xvcnMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICByZXR1cm4ge1xuICAgIC8vIENvbG9ycyBzaGFyZWQgYmV0d2VlbiBidXR0b25zIGFuZCBiYWRnZXNcbiAgICBwcmltYXJ5OiBldWlCdXR0b25GaWxsQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAncHJpbWFyeScpLFxuICAgIHN1Y2Nlc3M6IGV1aUJ1dHRvbkZpbGxDb2xvcihldWlUaGVtZUNvbnRleHQsICdzdWNjZXNzJyksXG4gICAgd2FybmluZzogZXVpQnV0dG9uRmlsbENvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ3dhcm5pbmcnKSxcbiAgICBkYW5nZXI6IGV1aUJ1dHRvbkZpbGxDb2xvcihldWlUaGVtZUNvbnRleHQsICdkYW5nZXInKSxcbiAgICBhY2NlbnQ6IGV1aUJ1dHRvbkZpbGxDb2xvcihldWlUaGVtZUNvbnRleHQsICdhY2NlbnQnKSxcbiAgICBkaXNhYmxlZDogZXVpQnV0dG9uQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAnZGlzYWJsZWQnKSxcbiAgICAvLyBDb2xvcnMgdW5pcXVlIHRvIGJhZGdlc1xuICAgIGRlZmF1bHQ6IGdldEJhZGdlQ29sb3JzKGV1aVRoZW1lQ29udGV4dCwgZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUpLFxuICAgIC8vIEhvbGxvdyBoYXMgYSBib3JkZXIgYW5kIGlzIHVzZWQgZm9yIGF1dG9jb21wbGV0ZXJzIGFuZCBiZXRhIGJhZGdlc1xuICAgIGhvbGxvdzogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBnZXRCYWRnZUNvbG9ycyhldWlUaGVtZUNvbnRleHQsIGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlKSksIHt9LCB7XG4gICAgICBib3JkZXJDb2xvcjogY29sb3JNb2RlID09PSAnREFSSycgPyB0aW50KGV1aVRoZW1lLmJvcmRlci5jb2xvciwgMC4xNSkgOiBldWlUaGVtZS5ib3JkZXIuY29sb3JcbiAgICB9KSxcbiAgICAvLyBDb2xvcnMgdXNlZCBieSBiZXRhIGFuZCBub3RpZmljYXRpb24gYmFkZ2VzXG4gICAgc3ViZHVlZDogZ2V0QmFkZ2VDb2xvcnMoZXVpVGhlbWVDb250ZXh0LCB0aW50KGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAwLjMpKSxcbiAgICBhY2NlbnRUZXh0OiBnZXRCYWRnZUNvbG9ycyhldWlUaGVtZUNvbnRleHQsIGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0KVxuICB9O1xufTtcbmV4cG9ydCB2YXIgZ2V0QmFkZ2VDb2xvcnMgPSBmdW5jdGlvbiBnZXRCYWRnZUNvbG9ycyhldWlUaGVtZUNvbnRleHQsIGJhY2tncm91bmRDb2xvcikge1xuICB2YXIgY29sb3IgPSBnZXRUZXh0Q29sb3IoZXVpVGhlbWVDb250ZXh0LCBiYWNrZ3JvdW5kQ29sb3IpO1xuICByZXR1cm4ge1xuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgIGNvbG9yOiBjb2xvclxuICB9O1xufTtcbmV4cG9ydCB2YXIgZ2V0VGV4dENvbG9yID0gZnVuY3Rpb24gZ2V0VGV4dENvbG9yKF9yZWYsIGJnQ29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgdmFyIHRleHRDb2xvciA9IGlzQ29sb3JEYXJrLmFwcGx5KHZvaWQgMCwgX3RvQ29uc3VtYWJsZUFycmF5KGNocm9tYShiZ0NvbG9yKS5yZ2IoKSkpID8gZXVpVGhlbWUuY29sb3JzLmdob3N0IDogZXVpVGhlbWUuY29sb3JzLmluaztcbiAgcmV0dXJuIHRleHRDb2xvcjtcbn07XG5leHBvcnQgdmFyIGdldENvbG9yQ29udHJhc3QgPSBmdW5jdGlvbiBnZXRDb2xvckNvbnRyYXN0KHRleHRDb2xvciwgY29sb3IpIHtcbiAgcmV0dXJuIGNocm9tYS5jb250cmFzdCh0ZXh0Q29sb3IsIGNvbG9yKTtcbn07XG5leHBvcnQgdmFyIGdldElzVmFsaWRDb2xvciA9IGZ1bmN0aW9uIGdldElzVmFsaWRDb2xvcihjb2xvcikge1xuICByZXR1cm4gY2hyb21hVmFsaWQocGFyc2VDb2xvcihjb2xvciB8fCAnJykgfHwgJycpO1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUsIGV1aUZvY3VzUmluZywgZXVpVGV4dFRydW5jYXRlLCBsb2dpY2FsQ1NTLCBsb2dpY2FsU2hvcnRoYW5kQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlCYWRnZUNvbG9ycyB9IGZyb20gJy4vY29sb3JfdXRpbHMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWh3NXZjNC1jbGlja2FibGVcIixcbiAgc3R5bGVzOiBcImN1cnNvcjpwb2ludGVyO2xhYmVsOmNsaWNrYWJsZTtcIlxufSA6IHtcbiAgbmFtZTogXCIxaHc1dmM0LWNsaWNrYWJsZVwiLFxuICBzdHlsZXM6IFwiY3Vyc29yOnBvaW50ZXI7bGFiZWw6Y2xpY2thYmxlO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUJhZGdlU3R5bGVzID0gZnVuY3Rpb24gZXVpQmFkZ2VTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIGJhZGdlQ29sb3JzID0gZXVpQmFkZ2VDb2xvcnMoZXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIHNldEJhZGdlQ29sb3JWYXJzID0gZnVuY3Rpb24gc2V0QmFkZ2VDb2xvclZhcnMoY29sb3JzKSB7XG4gICAgcmV0dXJuIFwiXFxuICAgIC0tZXVpQmFkZ2VUZXh0Q29sb3I6IFwiLmNvbmNhdChjb2xvcnMuY29sb3IsIFwiO1xcbiAgICAtLWV1aUJhZGdlQmFja2dyb3VuZENvbG9yOiBcIikuY29uY2F0KGNvbG9ycy5iYWNrZ3JvdW5kQ29sb3IsIFwiO1xcbiAgXCIpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGV1aUJhZGdlOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO1wiLCBsb2dpY2FsU2hvcnRoYW5kQ1NTKCdwYWRkaW5nJywgXCIwIFwiLmNvbmNhdChldWlUaGVtZS5zaXplLnMpKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiIGZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnKS5mb250U2l6ZSwgXCI7bGluZS1oZWlnaHQ6XCIsIG1hdGhXaXRoVW5pdHMoXG4gICAgLy8gQWNjb3VudCBmb3IgdGhlIGJvcmRlclxuICAgIFtldWlUaGVtZS5zaXplLmJhc2UsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluXSwgZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ICsgeSAqIDI7XG4gICAgfSksIFwiO2ZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodC5tZWRpdW0sIFwiO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6ZGVmYXVsdDtib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOlwiLCBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggLyAyO1xuICAgIH0pLCBcIjtcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcImNvbG9yOnZhcigtLWV1aUJhZGdlVGV4dENvbG9yLCBcIiwgYmFkZ2VDb2xvcnMuZGVmYXVsdC5jb2xvciwgXCIpO2JhY2tncm91bmQtY29sb3I6dmFyKFxcbiAgICAgICAgLS1ldWlCYWRnZUJhY2tncm91bmRDb2xvcixcXG4gICAgICAgIFwiLCBiYWRnZUNvbG9ycy5kZWZhdWx0LmJhY2tncm91bmRDb2xvciwgXCJcXG4gICAgICApOyo6OnNlbGVjdGlvbntjb2xvcjp2YXIoXFxuICAgICAgICAgIC0tZXVpQmFkZ2VCYWNrZ3JvdW5kQ29sb3IsXFxuICAgICAgICAgIFwiLCBiYWRnZUNvbG9ycy5kZWZhdWx0LmJhY2tncm91bmRDb2xvciwgXCJcXG4gICAgICAgICk7YmFja2dyb3VuZC1jb2xvcjp2YXIoXFxuICAgICAgICAgIC0tZXVpQmFkZ2VUZXh0Q29sb3IsXFxuICAgICAgICAgIFwiLCBiYWRnZUNvbG9ycy5kZWZhdWx0LmNvbG9yLCBcIlxcbiAgICAgICAgKTt9Jjpmb2N1cy13aXRoaW57XCIsIGV1aUZvY3VzUmluZyhldWlUaGVtZUNvbnRleHQpLCBcIjt9JisuZXVpQmFkZ2V7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgZXVpVGhlbWUuc2l6ZS54cyksIFwiO307bGFiZWw6ZXVpQmFkZ2U7XCIpLFxuICAgIGNsaWNrYWJsZTogLyojX19QVVJFX18qL2NzcyhcIiY6bm90KDpkaXNhYmxlZCl7Jjpob3ZlciwmOmZvY3Vze3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fX0mOmZvY3Vze1wiLCBldWlGb2N1c1JpbmcoZXVpVGhlbWVDb250ZXh0KSwgXCI7fSY6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO307bGFiZWw6Y2xpY2thYmxlO1wiKSxcbiAgICAvLyBDb2xvcnNcbiAgICBkZWZhdWx0OiAvKiNfX1BVUkVfXyovY3NzKHNldEJhZGdlQ29sb3JWYXJzKGJhZGdlQ29sb3JzLmRlZmF1bHQpLCBcIjtsYWJlbDpkZWZhdWx0O1wiKSxcbiAgICBob2xsb3c6IC8qI19fUFVSRV9fKi9jc3Moc2V0QmFkZ2VDb2xvclZhcnMoYmFkZ2VDb2xvcnMuaG9sbG93KSwgXCIgYm9yZGVyLWNvbG9yOlwiLCBiYWRnZUNvbG9ycy5ob2xsb3cuYm9yZGVyQ29sb3IsIFwiOztsYWJlbDpob2xsb3c7XCIpLFxuICAgIHByaW1hcnk6IC8qI19fUFVSRV9fKi9jc3Moc2V0QmFkZ2VDb2xvclZhcnMoYmFkZ2VDb2xvcnMucHJpbWFyeSksIFwiO2xhYmVsOnByaW1hcnk7XCIpLFxuICAgIGFjY2VudDogLyojX19QVVJFX18qL2NzcyhzZXRCYWRnZUNvbG9yVmFycyhiYWRnZUNvbG9ycy5hY2NlbnQpLCBcIjtsYWJlbDphY2NlbnQ7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3Moc2V0QmFkZ2VDb2xvclZhcnMoYmFkZ2VDb2xvcnMud2FybmluZyksIFwiO2xhYmVsOndhcm5pbmc7XCIpLFxuICAgIGRhbmdlcjogLyojX19QVVJFX18qL2NzcyhzZXRCYWRnZUNvbG9yVmFycyhiYWRnZUNvbG9ycy5kYW5nZXIpLCBcIjtsYWJlbDpkYW5nZXI7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3Moc2V0QmFkZ2VDb2xvclZhcnMoYmFkZ2VDb2xvcnMuc3VjY2VzcyksIFwiO2xhYmVsOnN1Y2Nlc3M7XCIpLFxuICAgIGRpc2FibGVkOiAvKiNfX1BVUkVfXyovY3NzKHNldEJhZGdlQ29sb3JWYXJzKGJhZGdlQ29sb3JzLmRpc2FibGVkKSwgXCIqOjpzZWxlY3Rpb257Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLCBcIjt9O2xhYmVsOmRpc2FibGVkO1wiKSxcbiAgICAvLyBDb250ZW50IHdyYXBwZXJcbiAgICBldWlCYWRnZV9fY29udGVudDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKFxuICAgIC8vIEVuc3VyZSBwcm9wZXIgaGVpZ2h0IGluIGNhc2Ugb2YganVzdCBkaXNwbGF5aW5nIGFuIGljb25cbiAgICAnbWluLWhlaWdodCcsIFwiXCIuY29uY2F0KG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gZXVpVGhlbWUuYmFzZSArIHggKiAyO1xuICAgIH0pKSksIFwiIGRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuOztsYWJlbDpldWlCYWRnZV9fY29udGVudDtcIiksXG4gICAgLy8gVGV4dFxuICAgIHRleHQ6IHtcbiAgICAgIGV1aUJhZGdlX190ZXh0OiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHRUcnVuY2F0ZSgpLCBcIiBjdXJzb3I6aW5oZXJpdDs7bGFiZWw6ZXVpQmFkZ2VfX3RleHQ7XCIpLFxuICAgICAgY2xpY2thYmxlOiBfcmVmXG4gICAgfSxcbiAgICAvLyBJY29uXG4gICAgaWNvbjoge1xuICAgICAgZXVpQmFkZ2VfX2ljb246IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZXVpQmFkZ2VfX2ljb247XCIpLFxuICAgICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCImOm5vdCg6b25seS1jaGlsZCl7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgZXVpVGhlbWUuc2l6ZS54cyksIFwiO307bGFiZWw6cmlnaHQ7XCIpLFxuICAgICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcIiY6bm90KDpvbmx5LWNoaWxkKXtcIiwgbG9naWNhbENTUygnbWFyZ2luLXJpZ2h0JywgZXVpVGhlbWUuc2l6ZS54cyksIFwiO307bGFiZWw6bGVmdDtcIilcbiAgICB9LFxuICAgIC8vIENsaWNrYWJsZSBpY29ucyAoaWNvbk9uQ2xpY2spXG4gICAgaWNvbkJ1dHRvbjoge1xuICAgICAgZXVpQmFkZ2VfX2ljb25CdXR0b246IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXNpemU6MDsmOmZvY3Vze2JhY2tncm91bmQtY29sb3I6XCIsIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgMC44KSwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5pbmssIFwiO2JvcmRlci1yYWRpdXM6XCIsIG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggLyAyO1xuICAgICAgfSksIFwiO30mOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDt9LmV1aUJhZGdlX19pY29ue21hcmdpbjowIWltcG9ydGFudDt9O2xhYmVsOmV1aUJhZGdlX19pY29uQnV0dG9uO1wiKSxcbiAgICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgZXVpVGhlbWUuc2l6ZS54cyksIFwiOztsYWJlbDpyaWdodDtcIiksXG4gICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21hcmdpbi1yaWdodCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIjs7bGFiZWw6bGVmdDtcIilcbiAgICB9LFxuICAgIC8vIFVzZWQgaW4gYmFkZ2VzIHdpdGggYm90aCBvbkNsaWNrICYgaWNvbk9uQ2xpY2tcbiAgICBldWlCYWRnZV9fY2hpbGRCdXR0b246IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dFRydW5jYXRlKCksIFwiIHRleHQtYWxpZ246aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDsmOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDt9Jjpub3QoOmRpc2FibGVkKXsmOmhvdmVyLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9fTtsYWJlbDpldWlCYWRnZV9fY2hpbGRCdXR0b247XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwibGFiZWxcIiwgXCJjb2xvclwiLCBcInRvb2x0aXBDb250ZW50XCIsIFwidG9vbHRpcFBvc2l0aW9uXCIsIFwiYW5jaG9yUHJvcHNcIiwgXCJ0aXRsZVwiLCBcImljb25UeXBlXCIsIFwib25DbGlja1wiLCBcIm9uQ2xpY2tBcmlhTGFiZWxcIiwgXCJocmVmXCIsIFwicmVsXCIsIFwidGFyZ2V0XCIsIFwic2l6ZVwiLCBcImFsaWdubWVudFwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi8uLi90b29sX3RpcCc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBldWlCZXRhQmFkZ2VTdHlsZXMgfSBmcm9tICcuL2JldGFfYmFkZ2Uuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIENPTE9SUyA9IFsnYWNjZW50JywgJ3N1YmR1ZWQnLCAnaG9sbG93J107XG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nXTtcbmV4cG9ydCB2YXIgQUxJR05NRU5UUyA9IFsnYmFzZWxpbmUnLCAnbWlkZGxlJ107XG5cbi8vIGBsYWJlbGAgcHJvcCBjYW4gYmUgYSBgUmVhY3ROb2RlYCBvbmx5IGlmIGB0aXRsZWAgb3IgYHRvb2x0aXBDb250ZW50YCBpcyBwcm92aWRlZFxuXG4vLyBNdXN0IGJlIGB0eXBlYCBpbnN0ZWFkIG9mIGBpbnRlcmZhY2VgXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzYwODVcblxuZXhwb3J0IHZhciBFdWlCZXRhQmFkZ2UgPSBmdW5jdGlvbiBFdWlCZXRhQmFkZ2UoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2hvbGxvdycgOiBfcmVmJGNvbG9yLFxuICAgIHRvb2x0aXBDb250ZW50ID0gX3JlZi50b29sdGlwQ29udGVudCxcbiAgICBfcmVmJHRvb2x0aXBQb3NpdGlvbiA9IF9yZWYudG9vbHRpcFBvc2l0aW9uLFxuICAgIHRvb2x0aXBQb3NpdGlvbiA9IF9yZWYkdG9vbHRpcFBvc2l0aW9uID09PSB2b2lkIDAgPyAndG9wJyA6IF9yZWYkdG9vbHRpcFBvc2l0aW9uLFxuICAgIGFuY2hvclByb3BzID0gX3JlZi5hbmNob3JQcm9wcyxcbiAgICB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgb25DbGlja0FyaWFMYWJlbCA9IF9yZWYub25DbGlja0FyaWFMYWJlbCxcbiAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgIHJlbCA9IF9yZWYucmVsLFxuICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgX3JlZiRhbGlnbm1lbnQgPSBfcmVmLmFsaWdubWVudCxcbiAgICBhbGlnbm1lbnQgPSBfcmVmJGFsaWdubWVudCA9PT0gdm9pZCAwID8gJ2Jhc2VsaW5lJyA6IF9yZWYkYWxpZ25tZW50LFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHNpbmdsZUxldHRlciA9ICEhKHR5cGVvZiBsYWJlbCA9PT0gJ3N0cmluZycgJiYgbGFiZWwubGVuZ3RoID09PSAxKTtcbiAgdmFyIGlzQ2lyY3VsYXIgPSBpY29uVHlwZSB8fCBzaW5nbGVMZXR0ZXI7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQmV0YUJhZGdlJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUJldGFCYWRnZVN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUJldGFCYWRnZSwgc3R5bGVzW2NvbG9yXSwgc3R5bGVzW3NpemVdLCBzdHlsZXNbYWxpZ25tZW50XSwgaXNDaXJjdWxhciA/IHN0eWxlcy5iYWRnZVNpemVzLmNpcmNsZVtzaXplXSA6IHN0eWxlcy5iYWRnZVNpemVzLmRlZmF1bHRbc2l6ZV1dO1xuICB2YXIgaWNvbjtcbiAgaWYgKGljb25UeXBlKSB7XG4gICAgaWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgY3NzOiBzdHlsZXMuZXVpQmV0YUJhZGdlX19pY29uLFxuICAgICAgY2xhc3NOYW1lOiBcImV1aUJldGFCYWRnZV9faWNvblwiLFxuICAgICAgdHlwZTogaWNvblR5cGUsXG4gICAgICBzaXplOiBzaXplID09PSAnbScgPyAnbScgOiAncycsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcbiAgICB9KTtcbiAgfVxuICB2YXIgRWxlbWVudCA9IGhyZWYgPyAnYScgOiAnYnV0dG9uJztcbiAgdmFyIHJlbE9iaiA9IHt9O1xuICBpZiAoaHJlZikge1xuICAgIHJlbE9iai5ocmVmID0gaHJlZjtcbiAgICByZWxPYmoudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHJlbE9iai5yZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgfVxuICBpZiAob25DbGljaykge1xuICAgIHJlbE9iai5vbkNsaWNrID0gb25DbGljaztcbiAgfVxuICB2YXIgY29udGVudDtcbiAgaWYgKG9uQ2xpY2sgfHwgaHJlZikge1xuICAgIGNvbnRlbnQgPSBfX19FbW90aW9uSlNYKEVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBvbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICB0aXRsZTogdHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyA/IGxhYmVsIDogdGl0bGVcbiAgICB9LCByZWxPYmosIHJlc3QpLCBpY29uIHx8IGxhYmVsKTtcbiAgICBpZiAodG9vbHRpcENvbnRlbnQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIHtcbiAgICAgICAgcG9zaXRpb246IHRvb2x0aXBQb3NpdGlvbixcbiAgICAgICAgY29udGVudDogdG9vbHRpcENvbnRlbnQsXG4gICAgICAgIHRpdGxlOiB0aXRsZSB8fCBsYWJlbCxcbiAgICAgICAgYW5jaG9yUHJvcHM6IGFuY2hvclByb3BzXG4gICAgICB9LCBjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIGFuY2hvclByb3BzLCBjb250ZW50KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRvb2x0aXBDb250ZW50KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgICAgIHBvc2l0aW9uOiB0b29sdGlwUG9zaXRpb24sXG4gICAgICAgIGNvbnRlbnQ6IHRvb2x0aXBDb250ZW50LFxuICAgICAgICB0aXRsZTogdGl0bGUgfHwgbGFiZWwsXG4gICAgICAgIGFuY2hvclByb3BzOiBhbmNob3JQcm9wc1xuICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICB0YWJJbmRleDogMCxcbiAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgfSwgcmVzdCksIGljb24gfHwgbGFiZWwpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNwYW5UaXRsZSA9IHRpdGxlIHx8IGxhYmVsO1xuICAgICAgaWYgKHNwYW5UaXRsZSAmJiB0eXBlb2Ygc3BhblRpdGxlICE9PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJPbmx5IHN0cmluZyB0aXRsZXMgYXJlIHBlcm1pdHRlZCBvbiBiYWRnZXMgdGhhdCBkbyBub3QgdXNlIHRvb2x0aXBzLiBGb3VuZDogXCIuY29uY2F0KF90eXBlb2Yoc3BhblRpdGxlKSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIGFuY2hvclByb3BzLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgdGl0bGU6IHNwYW5UaXRsZSxcbiAgICAgICAgY3NzOiBjc3NTdHlsZXNcbiAgICAgIH0sIHJlc3QpLCBpY29uIHx8IGxhYmVsKSk7XG4gICAgfVxuICB9XG59O1xuRXVpQmV0YUJhZGdlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICovXG4gIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBTdXBwbHkgYW4gaWNvbiB0eXBlIGlmIHRoZSBiYWRnZSBzaG91bGQganVzdCBiZSBhbiBpY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBPbmUgd29yZCBsYWJlbCBsaWtlIFwiQmV0YVwiIG9yIFwiTGFiXCJcbiAgICAgKi9cbiAgLyoqXG4gICAgICogT25lIHdvcmQgbGFiZWwgbGlrZSBcIkJldGFcIiBvciBcIkxhYlwiXG4gICAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogQ29udGVudCBmb3IgdGhlIHRvb2x0aXBcbiAgICAgKi9cbiAgdG9vbHRpcENvbnRlbnQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZF0pXSksXG4gIC8qKlxuICAgICAqIEN1c3RvbSBwb3NpdGlvbiBvZiB0aGUgdG9vbHRpcFxuICAgICAqL1xuICB0b29sdGlwUG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl0pLFxuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgc3BhbiB3cmFwcGluZyB0aGUgYmFkZ2VcbiAgICAgKi9cbiAgYW5jaG9yUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIC8qKlxuICAgICAqIE9wdGlvbmFsIHRpdGxlIHdpbGwgYmUgc3VwcGxpZWQgYXMgdG9vbHRpcCB0aXRsZSBvciB0aXRsZSBhdHRyaWJ1dGVcbiAgICAgKiBvdGhlcndpc2UgdGhlIGxhYmVsIHdpbGwgYmUgdXNlZFxuICAgICAqL1xuICB0aXRsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nXSldKSxcbiAgLyoqXG4gICAgICogQWNjZXB0cyBhY2NlbnQsIHN1YmR1ZWQgYW5kIGhvbGxvdy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIGB2ZXJ0aWNhbC1hbGlnbmAgQ1NTIHByb3BlcnR5XG4gICAgICovXG4gIGFsaWdubWVudDogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgZXVpRm9jdXNSaW5nLCBldWlGb250U2l6ZUZyb21TY2FsZSwgZXVpVGV4dFRydW5jYXRlLCBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpQmFkZ2VDb2xvcnMgfSBmcm9tICcuLi9jb2xvcl91dGlscyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJsMW5tZTctbWlkZGxlXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGFiZWw6bWlkZGxlO1wiXG59IDoge1xuICBuYW1lOiBcImwxbm1lNy1taWRkbGVcIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOm1pZGRsZTtsYWJlbDptaWRkbGU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxOWhleGh5LWJhc2VsaW5lXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtsYWJlbDpiYXNlbGluZTtcIlxufSA6IHtcbiAgbmFtZTogXCIxOWhleGh5LWJhc2VsaW5lXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtsYWJlbDpiYXNlbGluZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInB6cHFxZy1ldWlCZXRhQmFkZ2VfX2ljb25cIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwgLTFweCk7bGFiZWw6ZXVpQmV0YUJhZGdlX19pY29uO1wiXG59IDoge1xuICBuYW1lOiBcInB6cHFxZy1ldWlCZXRhQmFkZ2VfX2ljb25cIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwgLTFweCk7bGFiZWw6ZXVpQmV0YUJhZGdlX19pY29uO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUJldGFCYWRnZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUJldGFCYWRnZVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGU7XG4gIHZhciBiYWRnZUNvbG9ycyA9IGV1aUJhZGdlQ29sb3JzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHJldHVybiB7XG4gICAgZXVpQmV0YUJhZGdlOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjtjdXJzb3I6ZGVmYXVsdDtmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQuYm9sZCwgXCI7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOjAuMDVlbTt0ZXh0LWFsaWduOmNlbnRlcjtcIiwgZXVpVGV4dFRydW5jYXRlKCksIFwiICY6Zm9jdXN7XCIsIGV1aUZvY3VzUmluZyhldWlUaGVtZUNvbnRleHQsICdvdXRzZXQnLCB7XG4gICAgICBjb2xvcjogY29sb3JNb2RlID09PSAnREFSSycgPyBldWlUaGVtZS5jb2xvcnMuZ2hvc3QgOiBldWlUaGVtZS5jb2xvcnMuaW5rXG4gICAgfSksIFwiO307bGFiZWw6ZXVpQmV0YUJhZGdlO1wiKSxcbiAgICAvLyBDb2xvcnNcbiAgICBhY2NlbnQ6IC8qI19fUFVSRV9fKi9jc3MoYmFkZ2VDb2xvcnMuYWNjZW50VGV4dCwgXCI7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBzdWJkdWVkOiAvKiNfX1BVUkVfXyovY3NzKGJhZGdlQ29sb3JzLnN1YmR1ZWQsIFwiO2xhYmVsOnN1YmR1ZWQ7XCIpLFxuICAgIGhvbGxvdzogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBiYWRnZUNvbG9ycy5ob2xsb3cuY29sb3IsIFwiO2JhY2tncm91bmQtY29sb3I6XCIsIGJhZGdlQ29sb3JzLmhvbGxvdy5iYWNrZ3JvdW5kQ29sb3IsIFwiO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgXCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBcIiwgYmFkZ2VDb2xvcnMuaG9sbG93LmJvcmRlckNvbG9yLCBcIjs7bGFiZWw6aG9sbG93O1wiKSxcbiAgICAvLyBGb250IHNpemVzXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhcImZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemVGcm9tU2NhbGUoJ3hzJywgZXVpVGhlbWUpLCBcIjtsaW5lLWhlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhcImZvbnQtc2l6ZTowLjYyNXJlbTtsaW5lLWhlaWdodDpcIiwgbWF0aFdpdGhVbml0cyhldWlUaGVtZS5zaXplLnhzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggKyBldWlUaGVtZS5iYXNlO1xuICAgIH0pLCBcIjs7bGFiZWw6cztcIiksXG4gICAgLy8gUGFkZGluZy93aWR0aCBzaXplc1xuICAgIGJhZGdlU2l6ZXM6IHtcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgbTogXCJcXG4gICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLmJhc2UpKSxcbiAgICAgICAgczogXCJcXG4gICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLm0pKVxuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gaXQncyBqdXN0IGFuIGljb24gb3IgYSBzaW5nbGUgbGV0dGVyLCBtYWtlIHRoZSBiYWRnZSBhIGNpcmNsZVxuICAgICAgY2lyY2xlOiB7XG4gICAgICAgIG06IFwiXFxuICAgICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsIGV1aVRoZW1lLnNpemUubCksIFwiXFxuICAgICAgICBcIiksXG4gICAgICAgIHM6IFwiXFxuICAgICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsIG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuc2l6ZS54cywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4geCArIGV1aVRoZW1lLmJhc2U7XG4gICAgICAgIH0pKSwgXCJcXG4gICAgICAgIFwiKVxuICAgICAgfVxuICAgIH0sXG4gICAgZXVpQmV0YUJhZGdlX19pY29uOiBfcmVmMyxcbiAgICAvLyBBbGlnbm1lbnRzXG4gICAgYmFzZWxpbmU6IF9yZWYyLFxuICAgIG1pZGRsZTogX3JlZlxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY29sb3JcIiwgXCJjbGFzc05hbWVcIiwgXCJocmVmXCIsIFwiZXh0ZXJuYWxcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJ0eXBlXCIsIFwib25DbGlja1wiLCBcImRpc2FibGVkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsgRXVpRXh0ZXJuYWxMaW5rSWNvbiB9IGZyb20gJy4vZXh0ZXJuYWxfbGlua19pY29uJztcbmltcG9ydCB7IGV1aUxpbmtTdHlsZXMgfSBmcm9tICcuL2xpbmsuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIENPTE9SUyA9IFsncHJpbWFyeScsICdzdWJkdWVkJywgJ3N1Y2Nlc3MnLCAnYWNjZW50JywgJ2RhbmdlcicsICd3YXJuaW5nJywgJ3RleHQnLCAnZ2hvc3QnXTtcbnZhciBFdWlMaW5rID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ3ByaW1hcnknIDogX3JlZiRjb2xvcixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgIGV4dGVybmFsID0gX3JlZi5leHRlcm5hbCxcbiAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICByZWwgPSBfcmVmLnJlbCxcbiAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICBfZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUxpbmtTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlMaW5rXTtcbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgZGlzYWJsZWQgPSBfZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICBpZiAoaHJlZiA9PT0gdW5kZWZpbmVkIHx8ICFpc0hyZWZWYWxpZCkge1xuICAgIHZhciBidXR0b25Qcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlMaW5rJywgY2xhc3NOYW1lKSxcbiAgICAgIGNzczogW2Nzc1N0eWxlcywgZGlzYWJsZWQgPyBbc3R5bGVzLmRpc2FibGVkXSA6IHN0eWxlc1tjb2xvcl1dLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgICB9LCByZXN0KTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IHJlZlxuICAgIH0sIGJ1dHRvblByb3BzKSwgY2hpbGRyZW4pO1xuICB9XG4gIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgIGhyZWY6IGhyZWYsXG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgcmVsOiByZWxcbiAgfSk7XG4gIHZhciBhbmNob3JQcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpTGluaycsIGNsYXNzTmFtZSksXG4gICAgY3NzOiBbY3NzU3R5bGVzLCBzdHlsZXNbY29sb3JdXSxcbiAgICBocmVmOiBocmVmLFxuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIHJlbDogc2VjdXJlUmVsLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2tcbiAgfSwgcmVzdCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWZcbiAgfSwgYW5jaG9yUHJvcHMpLCBjaGlsZHJlbiwgX19fRW1vdGlvbkpTWChFdWlFeHRlcm5hbExpbmtJY29uLCB7XG4gICAgZXh0ZXJuYWw6IGV4dGVybmFsLFxuICAgIHRhcmdldDogdGFyZ2V0XG4gIH0pKTtcbn0pO1xuRXVpTGluay5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwicmVzZXRcIiwgXCJzdWJtaXRcIl0pLFxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9ycy5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gc2hvdyBhbiBpY29uIGluZGljYXRpbmcgdGhhdCBpdCBpcyBhbiBleHRlcm5hbCBsaW5rO1xuICAgICAqIERlZmF1bHRzIHRvIHRydWUgaWYgYHRhcmdldD1cIl9ibGFua1wiYFxuICAgICAqL1xuICBleHRlcm5hbDogUHJvcFR5cGVzLmJvb2xcbn07XG5FdWlMaW5rLmRpc3BsYXlOYW1lID0gJ0V1aUxpbmsnO1xuZXhwb3J0IHsgRXVpTGluayB9OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGFyZ2V0XCIsIFwiZXh0ZXJuYWxcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGxvZ2ljYWxTdHlsZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcblxuLyoqXG4gKiBEUlkgdXRpbCBmb3IgaW5kaWNhdGluZyBleHRlcm5hbCBsaW5rcyBib3RoIHZpYSBpY29uIGFuZCB0b1xuICogc2NyZWVuIHJlYWRlcnMuIFVzZWQgaW50ZXJuYWxseSBieSBhdCBFdWlMaW5rIGFuZCBFdWlMaXN0R3JvdXBJdGVtXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaWNvblN0eWxlID0gZnVuY3Rpb24gaWNvblN0eWxlKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIGxvZ2ljYWxTdHlsZSgnbWFyZ2luLWxlZnQnLCBldWlUaGVtZS5zaXplLnhzKTtcbn07XG5leHBvcnQgdmFyIEV1aUV4dGVybmFsTGlua0ljb24gPSBmdW5jdGlvbiBFdWlFeHRlcm5hbExpbmtJY29uKF9yZWYyKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmMi50YXJnZXQsXG4gICAgZXh0ZXJuYWwgPSBfcmVmMi5leHRlcm5hbCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQpO1xuICB2YXIgaWNvbkNzc1N0eWxlID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoaWNvblN0eWxlKTtcbiAgdmFyIHNob3dFeHRlcm5hbExpbmtJY29uID0gdGFyZ2V0ID09PSAnX2JsYW5rJyAmJiBleHRlcm5hbCAhPT0gZmFsc2UgfHwgZXh0ZXJuYWwgPT09IHRydWU7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBzaG93RXh0ZXJuYWxMaW5rSWNvbiAmJiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUljb24sIF9leHRlbmRzKHtcbiAgICBjc3M6IGljb25Dc3NTdHlsZSxcbiAgICBzaXplOiBcInNcIixcbiAgICB0eXBlOiBcInBvcG91dFwiLFxuICAgIHJvbGU6IFwicHJlc2VudGF0aW9uXCJcbiAgfSwgcmVzdCkpLCB0YXJnZXQgPT09ICdfYmxhbmsnID8gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICB0b2tlbjogXCJldWlFeHRlcm5hbExpbmtJY29uLm5ld1RhcmdldC5zY3JlZW5SZWFkZXJPbmx5VGV4dFwiLFxuICAgIGRlZmF1bHQ6IFwiKGV4dGVybmFsLCBvcGVucyBpbiBhIG5ldyB0YWIgb3Igd2luZG93KVwiXG4gIH0pKSkgOiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aUV4dGVybmFsTGlua0ljb24uZXh0ZXJuYWxUYXJnZXQuc2NyZWVuUmVhZGVyT25seVRleHRcIixcbiAgICBkZWZhdWx0OiBcIihleHRlcm5hbClcIlxuICB9KSkpKSkpO1xufTtcbkV1aUV4dGVybmFsTGlua0ljb24ucHJvcFR5cGVzID0ge1xuICB0YXJnZXQ6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIHNob3cgYW4gaWNvbiBpbmRpY2F0aW5nIHRoYXQgaXQgaXMgYW4gZXh0ZXJuYWwgbGluaztcbiAgICAgKiBEZWZhdWx0cyB0byB0cnVlIGlmIGB0YXJnZXQ9XCJfYmxhbmtcImBcbiAgICAgKi9cbiAgZXh0ZXJuYWw6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjbG9zZVBvcG92ZXJcIiwgXCJhbmNob3JQb3NpdGlvblwiLCBcImF0dGFjaFRvQW5jaG9yXCIsIFwicmVwb3NpdGlvblRvQ3Jvc3NBeGlzXCIsIFwiZGlzcGxheVwiLCBcInBhbmVsUGFkZGluZ1NpemVcIiwgXCJjbG9zZU9uU2Nyb2xsXCIsIFwib3duRm9jdXNcIiwgXCJkaXNhYmxlRm9jdXNUcmFwXCIsIFwiZm9jdXNUcmFwUHJvcHNcIiwgXCJpbnB1dFwiLCBcImZ1bGxXaWR0aFwiLCBcInBhbmVsTWluV2lkdGhcIiwgXCJvblBhbmVsUmVzaXplXCIsIFwiaW5wdXRSZWZcIiwgXCJwYW5lbFJlZlwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlUmVmLCBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB0YWJiYWJsZSB9IGZyb20gJ3RhYmJhYmxlJztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBrZXlzLCB1c2VDb21iaW5lZFJlZnMsIHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlUmVzaXplT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXInO1xuaW1wb3J0IHsgRXVpRm9jdXNUcmFwIH0gZnJvbSAnLi4vZm9jdXNfdHJhcCc7XG5pbXBvcnQgeyBldWlGb3JtTWF4V2lkdGggfSBmcm9tICcuLi9mb3JtL2Zvcm0uc3R5bGVzJztcbmltcG9ydCB7IEV1aVBvcG92ZXIgfSBmcm9tICcuL3BvcG92ZXInO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbi8vIFVzZWQgYnkgY2hpbGQgY29tcG9uZW50cyB0aGF0IHdhbnQgdG8ga25vdyB0aGUgcGFyZW50IHBvcG92ZXIgd2lkdGhcbmV4cG9ydCB2YXIgRXVpSW5wdXRQb3BvdmVyV2lkdGhDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoMCk7XG5leHBvcnQgdmFyIEV1aUlucHV0UG9wb3ZlciA9IGZ1bmN0aW9uIEV1aUlucHV0UG9wb3ZlcihfcmVmKSB7XG4gIHZhciBfcHJvcHMkcGFuZWxQcm9wcztcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBjbG9zZVBvcG92ZXIgPSBfcmVmLmNsb3NlUG9wb3ZlcixcbiAgICBfcmVmJGFuY2hvclBvc2l0aW9uID0gX3JlZi5hbmNob3JQb3NpdGlvbixcbiAgICBhbmNob3JQb3NpdGlvbiA9IF9yZWYkYW5jaG9yUG9zaXRpb24gPT09IHZvaWQgMCA/ICdkb3duTGVmdCcgOiBfcmVmJGFuY2hvclBvc2l0aW9uLFxuICAgIF9yZWYkYXR0YWNoVG9BbmNob3IgPSBfcmVmLmF0dGFjaFRvQW5jaG9yLFxuICAgIGF0dGFjaFRvQW5jaG9yID0gX3JlZiRhdHRhY2hUb0FuY2hvciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkYXR0YWNoVG9BbmNob3IsXG4gICAgX3JlZiRyZXBvc2l0aW9uVG9Dcm9zID0gX3JlZi5yZXBvc2l0aW9uVG9Dcm9zc0F4aXMsXG4gICAgcmVwb3NpdGlvblRvQ3Jvc3NBeGlzID0gX3JlZiRyZXBvc2l0aW9uVG9Dcm9zID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkcmVwb3NpdGlvblRvQ3JvcyxcbiAgICBfcmVmJGRpc3BsYXkgPSBfcmVmLmRpc3BsYXksXG4gICAgZGlzcGxheSA9IF9yZWYkZGlzcGxheSA9PT0gdm9pZCAwID8gJ2Jsb2NrJyA6IF9yZWYkZGlzcGxheSxcbiAgICBfcmVmJHBhbmVsUGFkZGluZ1NpemUgPSBfcmVmLnBhbmVsUGFkZGluZ1NpemUsXG4gICAgcGFuZWxQYWRkaW5nU2l6ZSA9IF9yZWYkcGFuZWxQYWRkaW5nU2l6ZSA9PT0gdm9pZCAwID8gJ3MnIDogX3JlZiRwYW5lbFBhZGRpbmdTaXplLFxuICAgIF9yZWYkY2xvc2VPblNjcm9sbCA9IF9yZWYuY2xvc2VPblNjcm9sbCxcbiAgICBjbG9zZU9uU2Nyb2xsID0gX3JlZiRjbG9zZU9uU2Nyb2xsID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY2xvc2VPblNjcm9sbCxcbiAgICBfcmVmJG93bkZvY3VzID0gX3JlZi5vd25Gb2N1cyxcbiAgICBvd25Gb2N1cyA9IF9yZWYkb3duRm9jdXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRvd25Gb2N1cyxcbiAgICBfcmVmJGRpc2FibGVGb2N1c1RyYXAgPSBfcmVmLmRpc2FibGVGb2N1c1RyYXAsXG4gICAgZGlzYWJsZUZvY3VzVHJhcCA9IF9yZWYkZGlzYWJsZUZvY3VzVHJhcCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGRpc2FibGVGb2N1c1RyYXAsXG4gICAgZm9jdXNUcmFwUHJvcHMgPSBfcmVmLmZvY3VzVHJhcFByb3BzLFxuICAgIGlucHV0ID0gX3JlZi5pbnB1dCxcbiAgICBfcmVmJGZ1bGxXaWR0aCA9IF9yZWYuZnVsbFdpZHRoLFxuICAgIGZ1bGxXaWR0aCA9IF9yZWYkZnVsbFdpZHRoID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkZnVsbFdpZHRoLFxuICAgIF9yZWYkcGFuZWxNaW5XaWR0aCA9IF9yZWYucGFuZWxNaW5XaWR0aCxcbiAgICBwYW5lbE1pbldpZHRoID0gX3JlZiRwYW5lbE1pbldpZHRoID09PSB2b2lkIDAgPyAwIDogX3JlZiRwYW5lbE1pbldpZHRoLFxuICAgIG9uUGFuZWxSZXNpemUgPSBfcmVmLm9uUGFuZWxSZXNpemUsXG4gICAgX2lucHV0UmVmID0gX3JlZi5pbnB1dFJlZixcbiAgICBfcGFuZWxSZWYgPSBfcmVmLnBhbmVsUmVmLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NuYW1lcygnZXVpSW5wdXRQb3BvdmVyJywgY2xhc3NOYW1lKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIGZvcm1NYXhXaWR0aCA9IGV1aUZvcm1NYXhXaWR0aChldWlUaGVtZSk7XG5cbiAgLyoqXG4gICAqIFJlZiBzZXR1cFxuICAgKi9cblxuICB2YXIgcG9wb3ZlckNsYXNzUmVmID0gdXNlUmVmKG51bGwpO1xuICAvLyBUaGUgaW5wdXRFbCBzdGF0ZSBlbnN1cmVzIHRoYXQgd2lkdGggaXMgY29ycmVjdGx5IHRyYWNrZWQgb24gaW5pdGlhbCBsb2FkXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBpbnB1dEVsID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRJbnB1dEVsID0gX3VzZVN0YXRlMlsxXTtcbiAgLy8gVGhlIHBhbmVsRWwgc3RhdGUgZW5zdXJlcyB0aGF0IHdpZHRoIGlzIGNvcnJlY3RseSBzZXQgZXZlcnkgdGltZSB0aGUgcG9wb3ZlciBvcGVuc1xuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKG51bGwpLFxuICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICBwYW5lbEVsID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRQYW5lbEVsID0gX3VzZVN0YXRlNFsxXTtcbiAgdmFyIGlucHV0UmVmID0gdXNlQ29tYmluZWRSZWZzKFtzZXRJbnB1dEVsLCBfaW5wdXRSZWZdKTtcbiAgdmFyIHBhbmVsUmVmID0gdXNlQ29tYmluZWRSZWZzKFtzZXRQYW5lbEVsLCBfcGFuZWxSZWZdKTtcblxuICAvKipcbiAgICogU2l6aW5nL3dpZHRoIGxvZ2ljXG4gICAqL1xuXG4gIHZhciBpbnB1dFdpZHRoID0gdXNlUmVzaXplT2JzZXJ2ZXIoaW5wdXRFbCwgJ3dpZHRoJykud2lkdGg7XG4gIHZhciBwYW5lbFdpZHRoID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGlucHV0V2lkdGggPCBwYW5lbE1pbldpZHRoID8gcGFuZWxNaW5XaWR0aCA6IGlucHV0V2lkdGg7XG4gIH0sIFtwYW5lbE1pbldpZHRoLCBpbnB1dFdpZHRoXSk7XG5cbiAgLy8gUmVzaXplIGNhbGxiYWNrXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgb25QYW5lbFJlc2l6ZSA9PT0gbnVsbCB8fCBvblBhbmVsUmVzaXplID09PSB2b2lkIDAgfHwgb25QYW5lbFJlc2l6ZShwYW5lbFdpZHRoKTtcbiAgfSwgW3BhbmVsV2lkdGgsIG9uUGFuZWxSZXNpemVdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocGFuZWxFbCkge1xuICAgICAgLy8gV2UgaGF2ZSB0byBtb2RpZnkgdGhlIHBvcG92ZXIgcGFuZWwgRE9NIG5vZGUgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZ1xuICAgICAgLy8gYHBhbmVsU3R5bGVgLCBhcyB0aGVyZSdzIHNvbWUgd2VpcmQgcG9zaXRpb25pbmcgYnVncyBvbiByZXNpemUgb3RoZXJ3aXNlXG4gICAgICBwYW5lbEVsLnN0eWxlLmlubGluZVNpemUgPSBcIlwiLmNvbmNhdChwYW5lbFdpZHRoLCBcInB4XCIpO1xuICAgIH1cbiAgfSwgW3BhbmVsRWwsIHBhbmVsV2lkdGhdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGlzIGZpcmVzIG9uIGFsbCBpbnB1dCB3aWR0aCBjaGFuZ2VzIHJlZ2FyZGxlc3Mgb2YgbWluaW11bSBzaXplLCBiZWNhdXNlIG9uXG4gICAgLy8gcmlnaHQvY2VudGVyIGFuY2hvcmVkIHBvcG92ZXJzLCB0aGUgaW5wdXQgd2lkdGggYWZmZWN0cyB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcG92ZXJcbiAgICBpZiAocGFuZWxFbCkge1xuICAgICAgdmFyIF9wb3BvdmVyQ2xhc3NSZWYkY3VycjtcbiAgICAgIChfcG9wb3ZlckNsYXNzUmVmJGN1cnIgPSBwb3BvdmVyQ2xhc3NSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3BvcG92ZXJDbGFzc1JlZiRjdXJyID09PSB2b2lkIDAgfHwgX3BvcG92ZXJDbGFzc1JlZiRjdXJyLnBvc2l0aW9uUG9wb3ZlckZsdWlkKCk7XG4gICAgfVxuICB9LCBbaW5wdXRXaWR0aCwgcGFuZWxFbF0pO1xuXG4gIC8qKlxuICAgKiBQb3BvdmVyIHRhYiB0byBjbG9zZSBsb2dpY1xuICAgKi9cblxuICB2YXIgcGFuZWxQcm9wc09uS2V5RG93biA9IChfcHJvcHMkcGFuZWxQcm9wcyA9IHByb3BzLnBhbmVsUHJvcHMpID09PSBudWxsIHx8IF9wcm9wcyRwYW5lbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcHJvcHMkcGFuZWxQcm9wcy5vbktleURvd247XG4gIHZhciBvbktleURvd24gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBwYW5lbFByb3BzT25LZXlEb3duID09PSBudWxsIHx8IHBhbmVsUHJvcHNPbktleURvd24gPT09IHZvaWQgMCB8fCBwYW5lbFByb3BzT25LZXlEb3duKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLlRBQikge1xuICAgICAgaWYgKGRpc2FibGVGb2N1c1RyYXApIHtcbiAgICAgICAgaWYgKCFvd25Gb2N1cykge1xuICAgICAgICAgIGNsb3NlUG9wb3ZlcigpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdGFiYmFibGVJdGVtcyA9IHRhYmJhYmxlKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmZpbHRlcihmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICByZXR1cm4gIWVsLmhhc0F0dHJpYnV0ZSgnZGF0YS1mb2N1cy1ndWFyZCcpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0YWJiYWJsZUl0ZW1zLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICB2YXIgdGFiYmluZ0Zyb21MYXN0SXRlbUluUG9wb3ZlciA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRhYmJhYmxlSXRlbXNbdGFiYmFibGVJdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRhYmJpbmdGcm9tTGFzdEl0ZW1JblBvcG92ZXIpIHtcbiAgICAgICAgICBjbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2Rpc2FibGVGb2N1c1RyYXAsIG93bkZvY3VzLCBjbG9zZVBvcG92ZXIsIHBhbmVsUHJvcHNPbktleURvd25dKTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgY2xvc2Ugb24gc2Nyb2xsIGJlaGF2aW9yXG4gICAqL1xuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2hlbiB0aGUgcG9wb3ZlciBvcGVucywgYWRkIGEgc2Nyb2xsIGxpc3RlbmVyIHRvIHRoZSBwYWdlICgmIHJlbW92ZSBpdCBhZnRlcilcbiAgICBpZiAoY2xvc2VPblNjcm9sbCAmJiBwYW5lbEVsKSB7XG4gICAgICB2YXIgY2xvc2VQb3BvdmVyT25TY3JvbGwgPSBmdW5jdGlvbiBjbG9zZVBvcG92ZXJPblNjcm9sbChldmVudCkge1xuICAgICAgICB2YXIgc2Nyb2xsVGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgIC8vIEJhc2ljIGV4aXN0ZW5jZSBjaGVja1xuICAgICAgICBpZiAoIXBhbmVsRWwgfHwgIWlucHV0RWwgfHwgIXNjcm9sbFRhcmdldCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBEbyBub3QgY2xvc2UgdGhlIHBvcG92ZXIgaWYgdGhlIGlucHV0IG9yIHBvcG92ZXIgaXRzZWxmIHdhcyBzY3JvbGxlZFxuICAgICAgICBpZiAocGFuZWxFbC5jb250YWlucyhzY3JvbGxUYXJnZXQpIHx8IGlucHV0RWwuY29udGFpbnMoc2Nyb2xsVGFyZ2V0KSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaXJlZm94IHdpbGwgdHJpZ2dlciBhIHNjcm9sbCBldmVudCBpbiBtYW55IGNvbW1vbiBzaXR1YXRpb25zIChlLmcuIGRvY3Mgc2lkZSBuYXYpXG4gICAgICAgIC8vIHdoZW4gdGhlIG9wdGlvbnMgbGlzdCBkaXYgaXMgYXBwZW5kZWQgdG8gdGhlIERPTS4gVG8gd29yayBhcm91bmQgdGhpcywgd2Ugc2hvdWxkXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBlbGVtZW50IHRoYXQgc2Nyb2xsZWQgYWN0dWFsbHkgY29udGFpbnMvd2lsbCBhZmZlY3QgdGhlIGlucHV0XG4gICAgICAgIGlmICghc2Nyb2xsVGFyZ2V0LmNvbnRhaW5zKGlucHV0RWwpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNsb3NlUG9wb3ZlcigpO1xuICAgICAgfTtcblxuICAgICAgLy8gS2liYW5hIEN5cHJlc3MgdGVzdHMgdHJpZ2dlciBhIHNjcm9sbCBldmVudCBpbiBtYW55IGNvbW1vbiBzaXR1YXRpb25zIHdoZW4gdGhlIG9wdGlvbnMgbGlzdCBkaXYgaXMgYXBwZW5kZWRcbiAgICAgIC8vIHRvIHRoZSBET007IGluIHRlc3RpbmcgaXQgd2FzIGFsd2F5cyB3aXRoaW4gMTAwbXMsIGJ1dCBzZXR0aW5nIGEgdGltZW91dCBoZXJlIGZvciA1MDBtcyB0byBiZSBzYWZlXG4gICAgICB2YXIgdGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjbG9zZVBvcG92ZXJPblNjcm9sbCwge1xuICAgICAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICAgICAgLy8gZm9yIGJldHRlciBwZXJmb3JtYW5jZSBhcyB3ZSB3b24ndCBjYWxsIHByZXZlbnREZWZhdWx0XG4gICAgICAgICAgY2FwdHVyZTogdHJ1ZSAvLyBzY3JvbGwgZXZlbnRzIGRvbid0IGJ1YmJsZSwgdGhleSBtdXN0IGJlIGNhcHR1cmVkIGluc3RlYWRcbiAgICAgICAgfSk7XG4gICAgICB9LCA1MDApO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNsb3NlUG9wb3Zlck9uU2Nyb2xsLCB7XG4gICAgICAgICAgY2FwdHVyZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2Nsb3NlT25TY3JvbGwsIGNsb3NlUG9wb3ZlciwgcGFuZWxFbCwgaW5wdXRFbF0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogLyojX19QVVJFX18qL2NzcyhmdWxsV2lkdGggPyB1bmRlZmluZWQgOiBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCBmb3JtTWF4V2lkdGgpLCBcIjtsYWJlbDpFdWlJbnB1dFBvcG92ZXI7XCIpLFxuICAgIGRpc3BsYXk6IGRpc3BsYXksXG4gICAgYnV0dG9uOiBpbnB1dCxcbiAgICBwb3BvdmVyUmVmOiBpbnB1dFJlZixcbiAgICBwYW5lbFJlZjogcGFuZWxSZWYsXG4gICAgcmVmOiBwb3BvdmVyQ2xhc3NSZWYsXG4gICAgY2xvc2VQb3BvdmVyOiBjbG9zZVBvcG92ZXIsXG4gICAgYW5jaG9yUG9zaXRpb246IGFuY2hvclBvc2l0aW9uLFxuICAgIGF0dGFjaFRvQW5jaG9yOiBhdHRhY2hUb0FuY2hvcixcbiAgICByZXBvc2l0aW9uVG9Dcm9zc0F4aXM6IHJlcG9zaXRpb25Ub0Nyb3NzQXhpcyxcbiAgICBwYW5lbFBhZGRpbmdTaXplOiBwYW5lbFBhZGRpbmdTaXplLFxuICAgIG93bkZvY3VzOiBvd25Gb2N1c1xuICB9LCBwcm9wcywge1xuICAgIHBhbmVsUHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMucGFuZWxQcm9wcyksIHt9LCB7XG4gICAgICBvbktleURvd246IG9uS2V5RG93blxuICAgIH0pXG4gIH0pLCBfX19FbW90aW9uSlNYKEV1aUZvY3VzVHJhcCwgX2V4dGVuZHMoe1xuICAgIGNsaWNrT3V0c2lkZURpc2FibGVzOiB0cnVlLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlRm9jdXNUcmFwXG4gIH0sIGZvY3VzVHJhcFByb3BzKSwgX19fRW1vdGlvbkpTWChFdWlJbnB1dFBvcG92ZXJXaWR0aENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogcGFuZWxXaWR0aFxuICB9LCBjaGlsZHJlbikpKTtcbn07XG5FdWlJbnB1dFBvcG92ZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQWxpZ25tZW50IG9mIHRoZSBwb3BvdmVyIHJlbGF0aXZlIHRvIHRoZSBpbnB1dFxuICAgICAqL1xuICBhbmNob3JQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcImRvd25MZWZ0XCIsIFwiZG93blJpZ2h0XCIsIFwiZG93bkNlbnRlclwiXSksXG4gIGRpc2FibGVGb2N1c1RyYXA6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBBbGxvd3MgYXV0b21hdGljYWxseSBjbG9zaW5nIHRoZSBpbnB1dCBwb3BvdmVyIG9uIHBhZ2Ugc2Nyb2xsXG4gICAgICovXG4gIGNsb3NlT25TY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBpbnB1dDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmFueSxcbiAgb25QYW5lbFJlc2l6ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsICoqRXVpSW5wdXRQb3BvdmVycyoqIGluaGVyaXQgdGhlIHNhbWUgd2lkdGggYXMgdGhlIHBhc3NlZCBpbnB1dCBlbGVtZW50LlxuICAgICAqIEhvd2V2ZXIsIGlmIHRoZSBpbnB1dCB3aWR0aCBpcyB0b28gc21hbGwsIHlvdSBjYW4gcGFzcyBhIG1pbmltdW0gcGFuZWwgd2lkdGhcbiAgICAgKiAodGhhdCBzaG91bGQgYmUgYmFzZWQgb24gdGhlIHBvcG92ZXIgY29udGVudCkuXG4gICAgICovXG4gIHBhbmVsTWluV2lkdGg6IFByb3BUeXBlcy5udW1iZXJcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsaWNrT3V0c2lkZURpc2FibGVzXCIsIFwiZGlzYWJsZWRcIiwgXCJyZXR1cm5Gb2N1c1wiLCBcIm5vSXNvbGF0aW9uXCIsIFwic2Nyb2xsTG9ja1wiLCBcImdhcE1vZGVcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRm9jdXNPbiB9IGZyb20gJ3JlYWN0LWZvY3VzLW9uJztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbEJhciB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyJztcbmltcG9ydCB7IGZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlUHJvcHNXaXRoQ29tcG9uZW50RGVmYXVsdHMgfSBmcm9tICcuLi9wcm92aWRlci9jb21wb25lbnRfZGVmYXVsdHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9jdXNUcmFwID0gZnVuY3Rpb24gRXVpRm9jdXNUcmFwKHByb3BzKSB7XG4gIHZhciBwcm9wc1dpdGhEZWZhdWx0cyA9IHVzZVByb3BzV2l0aENvbXBvbmVudERlZmF1bHRzKCdFdWlGb2N1c1RyYXAnLCBwcm9wcyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvY3VzVHJhcENsYXNzLCBwcm9wc1dpdGhEZWZhdWx0cyk7XG59O1xuRXVpRm9jdXNUcmFwLnByb3BUeXBlcyA9IHtcbiAgLy8gRm9yIHNvbWUgcmVhc29uLCBTdG9yeWJvb2sgZG9lc24ndCByZWdpc3RlciB0aGVzZSBwcm9wcyBpZiB0aGV5J3JlIFBpY2s8PidkXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBzdHlsZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBXaGV0aGVyIGBvbkNsaWNrT3V0c2lkZWAgc2hvdWxkIGJlIGNhbGxlZCBvbiBtb3VzZXVwIGluc3RlYWQgb2YgbW91c2Vkb3duLlxuICAgICAqIFRoaXMgZmxhZyBjYW4gYmUgdXNlZCB0byBwcmV2ZW50IGNvbmZsaWN0cyB3aXRoIG91dHNpZGUgdG9nZ2xlIGJ1dHRvbnMgYnkgZGVsYXlpbmcgdGhlIGNsb3NpbmcgY2xpY2sgY2FsbGJhY2suXG4gICAgICovXG4gIGNsb3NlT25Nb3VzZXVwOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQ2xpY2tpbmcgb3V0c2lkZSB0aGUgdHJhcCBhcmVhIHdpbGwgZGlzYWJsZSB0aGUgdHJhcFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIGNsaWNrT3V0c2lkZURpc2FibGVzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIGVsZW1lbnQgdGhhdCB3aWxsIGdldCBmb2N1cyB3aGVuIHRoZSB0cmFwIGlzIGluaXRpYXRlZFxuICAgICAqL1xuICBpbml0aWFsRm9jdXM6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIGlmIGBzY3JvbGxMb2NrYCBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGJvZHkncyBzY3JvbGxiYXIgd2lkdGggd2lsbCBiZSBwcmVzZXJ2ZWQgb24gbG9ja1xuICAgICAqIHZpYSB0aGUgYGdhcE1vZGVgIENTUyBwcm9wZXJ0eS4gRGVwZW5kaW5nIG9uIHlvdXIgY3VzdG9tIENTUywgeW91IG1heSBwcmVmZXIgdG8gdXNlXG4gICAgICogYG1hcmdpbmAgaW5zdGVhZCBvZiBgcGFkZGluZ2AuXG4gICAgICogQGRlZmF1bHQgcGFkZGluZ1xuICAgICAqL1xuICBnYXBNb2RlOiBQcm9wVHlwZXMub25lT2YoW1wicGFkZGluZ1wiLCBcIm1hcmdpblwiXSksXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgZm9jdXMgdHJhcHBpbmcgYmV0d2VlbiBpZnJhbWVzLlxuICAgICAqIEJ5IGRlZmF1bHQsIEV1aUZvY3VzVHJhcCBhbGxvd3MgZm9jdXMgdG8gbGVhdmUgaWZyYW1lcyBhbmQgbW92ZSB0byBlbGVtZW50cyBvdXRzaWRlIG9mIGl0LlxuICAgICAqIFNldCB0byBgdHJ1ZWAgaWYgeW91IHdhbnQgZm9jdXMgdG8gcmVtYWluIHRyYXBwZWQgd2l0aGluIHRoZSBpZnJhbWUuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgY3Jvc3NGcmFtZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgc2Nyb2xsTG9jazogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICBub0lzb2xhdGlvbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICByZXR1cm5Gb2N1czogUHJvcFR5cGVzLmFueVxufTtcbnZhciBFdWlGb2N1c1RyYXBDbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlGb2N1c1RyYXBDbGFzcygpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUZvY3VzVHJhcENsYXNzKTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlGb2N1c1RyYXBDbGFzcywgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic3RhdGVcIiwge1xuICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogZmFsc2VcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibGFzdEludGVyY2VwdGVkRXZlbnRcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInByZXZlbnRGb2N1c0V4aXRcIiwgZmFsc2UpO1xuICAgIC8vIFByb2dyYW1tYXRpY2FsbHkgc2V0cyBmb2N1cyBvbiBhIG5lc3RlZCBET00gbm9kZTsgb3B0aW9uYWxcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2V0SW5pdGlhbEZvY3VzXCIsIGZ1bmN0aW9uIChpbml0aWFsRm9jdXMpIHtcbiAgICAgIGlmICghaW5pdGlhbEZvY3VzKSByZXR1cm47XG4gICAgICB2YXIgbm9kZSA9IGZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmKGluaXRpYWxGb2N1cyk7XG4gICAgICBpZiAoIW5vZGUpIHJldHVybjtcbiAgICAgIC8vIGBkYXRhLWF1dG9mb2N1c2AgaXMgcGFydCBvZiB0aGUgJ3JlYWN0LWZvY3VzLW9uJyBBUElcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWF1dG9mb2N1cycsICd0cnVlJyk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uTW91c2V1cE91dHNpZGVcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIF90aGlzLnJlbW92ZU1vdXNldXBMaXN0ZW5lcigpO1xuICAgICAgLy8gVGltZW91dCBnaXZlcyBwcmVjZWRlbmNlIHRvIHRoZSBjb25zdW1lciB0byBpbml0aWF0ZSBjbG9zZSBpZiBpdCBoYXMgdG9nZ2xlIGJlaGF2aW9yLlxuICAgICAgLy8gT3RoZXJ3aXNlIHRoaXMgZXZlbnQgbWF5IG9jY3VyIGZpcnN0IGFuZCB0aGUgY29uc3VtZXIgdG9nZ2xlIHdpbGwgcmVvcGVuIHRoZSBmbHlvdXQuXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uQ2xpY2tPdSwgX3RoaXMkcHJvcHM7XG4gICAgICAgIHJldHVybiAoX3RoaXMkcHJvcHMkb25DbGlja091ID0gKF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMpLm9uQ2xpY2tPdXRzaWRlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkNsaWNrT3UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uQ2xpY2tPdS5jYWxsKF90aGlzJHByb3BzLCBlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJhZGRNb3VzZXVwTGlzdGVuZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF90aGlzLm9uTW91c2V1cE91dHNpZGUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVtb3ZlTW91c2V1cExpc3RlbmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgX3RoaXMub25Nb3VzZXVwT3V0c2lkZSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImhhbmRsZU91dHNpZGVDbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgb25DbGlja091dHNpZGUgPSBfdGhpcyRwcm9wczIub25DbGlja091dHNpZGUsXG4gICAgICAgIGNsaWNrT3V0c2lkZURpc2FibGVzID0gX3RoaXMkcHJvcHMyLmNsaWNrT3V0c2lkZURpc2FibGVzLFxuICAgICAgICBjbG9zZU9uTW91c2V1cCA9IF90aGlzJHByb3BzMi5jbG9zZU9uTW91c2V1cDtcbiAgICAgIGlmIChjbGlja091dHNpZGVEaXNhYmxlcykge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkNsaWNrT3V0c2lkZSkge1xuICAgICAgICBjbG9zZU9uTW91c2V1cCA/IF90aGlzLmFkZE1vdXNldXBMaXN0ZW5lcigpIDogb25DbGlja091dHNpZGUoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpRm9jdXNUcmFwQ2xhc3MsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUZvY3VzVHJhcENsYXNzLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbEZvY3VzKHRoaXMucHJvcHMuaW5pdGlhbEZvY3VzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMuZGlzYWJsZWQgPT09IHRydWUgJiYgdGhpcy5wcm9wcy5kaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5yZW1vdmVNb3VzZXVwTGlzdGVuZXIoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMy5jaGlsZHJlbixcbiAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXMgPSBfdGhpcyRwcm9wczMuY2xpY2tPdXRzaWRlRGlzYWJsZXMsXG4gICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMzLmRpc2FibGVkLFxuICAgICAgICByZXR1cm5Gb2N1cyA9IF90aGlzJHByb3BzMy5yZXR1cm5Gb2N1cyxcbiAgICAgICAgbm9Jc29sYXRpb24gPSBfdGhpcyRwcm9wczMubm9Jc29sYXRpb24sXG4gICAgICAgIHNjcm9sbExvY2sgPSBfdGhpcyRwcm9wczMuc2Nyb2xsTG9jayxcbiAgICAgICAgZ2FwTW9kZSA9IF90aGlzJHByb3BzMy5nYXBNb2RlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMywgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBpc0Rpc2FibGVkID0gZGlzYWJsZWQgfHwgdGhpcy5zdGF0ZS5oYXNCZWVuRGlzYWJsZWRCeUNsaWNrO1xuICAgICAgdmFyIGZvY3VzT25Qcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyxcbiAgICAgICAgbm9Jc29sYXRpb246IG5vSXNvbGF0aW9uLFxuICAgICAgICBlbmFibGVkOiAhaXNEaXNhYmxlZFxuICAgICAgfSwgcmVzdCksIHt9LCB7XG4gICAgICAgIG9uQ2xpY2tPdXRzaWRlOiB0aGlzLmhhbmRsZU91dHNpZGVDbGljayxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGBzY3JvbGxMb2NrYCBzaG91bGQgYWx3YXlzIGJlIHVuc2V0IG9uIEZvY3VzT24sIGFzIGl0IGNhbiBwcmV2ZW50IHNjcm9sbGluZyBvblxuICAgICAgICAgKiBwb3J0YWxzIChpLmUuIHBvcG92ZXJzLCBjb21ib2JveGVzLCBkcm9wZG93biBtZW51cywgZXRjLikgd2l0aGluIG1vZGFscyAmIGZseW91dHNcbiAgICAgICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L3JlYWN0LWZvY3VzLW9uL2lzc3Vlcy80OVxuICAgICAgICAgKi9cbiAgICAgICAgc2Nyb2xsTG9jazogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRm9jdXNPbiwgZm9jdXNPblByb3BzLCBjaGlsZHJlbiwgIWlzRGlzYWJsZWQgJiYgc2Nyb2xsTG9jayAmJiBfX19FbW90aW9uSlNYKFJlbW92ZVNjcm9sbEJhciwge1xuICAgICAgICBnYXBNb2RlOiBnYXBNb2RlXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpRm9jdXNUcmFwQ2xhc3MsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY2xpY2tPdXRzaWRlRGlzYWJsZXM6IGZhbHNlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIHJldHVybkZvY3VzOiB0cnVlLFxuICBub0lzb2xhdGlvbjogdHJ1ZSxcbiAgc2Nyb2xsTG9jazogZmFsc2UsXG4gIGNyb3NzRnJhbWU6IGZhbHNlLFxuICBnYXBNb2RlOiAncGFkZGluZycgLy8gRVVJIGRlZmF1bHRzIHRvIHBhZGRpbmcgYmVjYXVzZSBLaWJhbmEncyBib2R5L2xheW91dCBDU1MgaWdub3JlcyBgbWFyZ2luYFxufSk7XG5FdWlGb2N1c1RyYXBDbGFzcy5wcm9wVHlwZXMgPSB7XG4gIC8vIEZvciBzb21lIHJlYXNvbiwgU3Rvcnlib29rIGRvZXNuJ3QgcmVnaXN0ZXIgdGhlc2UgcHJvcHMgaWYgdGhleSdyZSBQaWNrPD4nZFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgc3R5bGU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogV2hldGhlciBgb25DbGlja091dHNpZGVgIHNob3VsZCBiZSBjYWxsZWQgb24gbW91c2V1cCBpbnN0ZWFkIG9mIG1vdXNlZG93bi5cbiAgICAgKiBUaGlzIGZsYWcgY2FuIGJlIHVzZWQgdG8gcHJldmVudCBjb25mbGljdHMgd2l0aCBvdXRzaWRlIHRvZ2dsZSBidXR0b25zIGJ5IGRlbGF5aW5nIHRoZSBjbG9zaW5nIGNsaWNrIGNhbGxiYWNrLlxuICAgICAqL1xuICBjbG9zZU9uTW91c2V1cDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIENsaWNraW5nIG91dHNpZGUgdGhlIHRyYXAgYXJlYSB3aWxsIGRpc2FibGUgdGhlIHRyYXBcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICBjbGlja091dHNpZGVEaXNhYmxlczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byBlbGVtZW50IHRoYXQgd2lsbCBnZXQgZm9jdXMgd2hlbiB0aGUgdHJhcCBpcyBpbml0aWF0ZWRcbiAgICAgKi9cbiAgaW5pdGlhbEZvY3VzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBpZiBgc2Nyb2xsTG9ja2AgaXMgc2V0IHRvIHRydWUsIHRoZSBib2R5J3Mgc2Nyb2xsYmFyIHdpZHRoIHdpbGwgYmUgcHJlc2VydmVkIG9uIGxvY2tcbiAgICAgKiB2aWEgdGhlIGBnYXBNb2RlYCBDU1MgcHJvcGVydHkuIERlcGVuZGluZyBvbiB5b3VyIGN1c3RvbSBDU1MsIHlvdSBtYXkgcHJlZmVyIHRvIHVzZVxuICAgICAqIGBtYXJnaW5gIGluc3RlYWQgb2YgYHBhZGRpbmdgLlxuICAgICAqIEBkZWZhdWx0IHBhZGRpbmdcbiAgICAgKi9cbiAgZ2FwTW9kZTogUHJvcFR5cGVzLm9uZU9mKFtcInBhZGRpbmdcIiwgXCJtYXJnaW5cIl0pLFxuICAvKipcbiAgICAgKiBDb25maWd1cmVzIGZvY3VzIHRyYXBwaW5nIGJldHdlZW4gaWZyYW1lcy5cbiAgICAgKiBCeSBkZWZhdWx0LCBFdWlGb2N1c1RyYXAgYWxsb3dzIGZvY3VzIHRvIGxlYXZlIGlmcmFtZXMgYW5kIG1vdmUgdG8gZWxlbWVudHMgb3V0c2lkZSBvZiBpdC5cbiAgICAgKiBTZXQgdG8gYHRydWVgIGlmIHlvdSB3YW50IGZvY3VzIHRvIHJlbWFpbiB0cmFwcGVkIHdpdGhpbiB0aGUgaWZyYW1lLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIGNyb3NzRnJhbWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIHNjcm9sbExvY2s6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgbm9Jc29sYXRpb246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgcmV0dXJuRm9jdXM6IFByb3BUeXBlcy5hbnlcbn07IiwgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcbiAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICB9XG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICB0W3BdID0gc1twXTtcbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICB9XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcbiAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XG4gIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XG4gIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xuICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcbiAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xuICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcbiAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xuICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XG4gICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xuICAgICAgfVxuICB9XG4gIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcbiAgZG9uZSA9IHRydWU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xuICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcbiAgfVxuICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XG4gIHJldHVybiBjb29rZWQ7XG59O1xuXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59O1xuXG52YXIgb3duS2V5cyA9IGZ1bmN0aW9uKG8pIHtcbiAgb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgdmFyIGFyID0gW107XG4gICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICByZXR1cm4gYXI7XG4gIH07XG4gIHJldHVybiBvd25LZXlzKG8pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcbiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBvd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZSwgaW5uZXI7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XG4gICAgICBpZiAoYXN5bmMpIGlubmVyID0gZGlzcG9zZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xuICAgIGlmIChpbm5lcikgZGlzcG9zZSA9IGZ1bmN0aW9uKCkgeyB0cnkgeyBpbm5lci5jYWxsKHRoaXMpOyB9IGNhdGNoIChlKSB7IHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgfSB9O1xuICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XG4gIH1cbiAgZWxzZSBpZiAoYXN5bmMpIHtcbiAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xuICBmdW5jdGlvbiBmYWlsKGUpIHtcbiAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XG4gICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcbiAgfVxuICB2YXIgciwgcyA9IDA7XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKHIgPSBlbnYuc3RhY2sucG9wKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghci5hc3luYyAmJiBzID09PSAxKSByZXR1cm4gcyA9IDAsIGVudi5zdGFjay5wdXNoKHIpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQpO1xuICAgICAgICBpZiAoci5kaXNwb3NlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IHIuZGlzcG9zZS5jYWxsKHIudmFsdWUpO1xuICAgICAgICAgIGlmIChyLmFzeW5jKSByZXR1cm4gcyB8PSAyLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBzIHw9IDE7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocyA9PT0gMSkgcmV0dXJuIGVudi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudi5lcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uKHBhdGgsIHByZXNlcnZlSnN4KSB7XG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcLlxcLj9cXC8vLnRlc3QocGF0aCkpIHtcbiAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLih0c3gpJHwoKD86XFwuZCk/KSgoPzpcXC5bXi4vXSs/KT8pXFwuKFtjbV0/KXRzJC9pLCBmdW5jdGlvbiAobSwgdHN4LCBkLCBleHQsIGNtKSB7XG4gICAgICAgICAgcmV0dXJuIHRzeCA/IHByZXNlcnZlSnN4ID8gXCIuanN4XCIgOiBcIi5qc1wiIDogZCAmJiAoIWV4dCB8fCAhY20pID8gbSA6IChkICsgZXh0ICsgXCIuXCIgKyBjbS50b0xvd2VyQ2FzZSgpICsgXCJqc1wiKTtcbiAgICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZXh0ZW5kcyxcbiAgX19hc3NpZ24sXG4gIF9fcmVzdCxcbiAgX19kZWNvcmF0ZSxcbiAgX19wYXJhbSxcbiAgX19lc0RlY29yYXRlLFxuICBfX3J1bkluaXRpYWxpemVycyxcbiAgX19wcm9wS2V5LFxuICBfX3NldEZ1bmN0aW9uTmFtZSxcbiAgX19tZXRhZGF0YSxcbiAgX19hd2FpdGVyLFxuICBfX2dlbmVyYXRvcixcbiAgX19jcmVhdGVCaW5kaW5nLFxuICBfX2V4cG9ydFN0YXIsXG4gIF9fdmFsdWVzLFxuICBfX3JlYWQsXG4gIF9fc3ByZWFkLFxuICBfX3NwcmVhZEFycmF5cyxcbiAgX19zcHJlYWRBcnJheSxcbiAgX19hd2FpdCxcbiAgX19hc3luY0dlbmVyYXRvcixcbiAgX19hc3luY0RlbGVnYXRvcixcbiAgX19hc3luY1ZhbHVlcyxcbiAgX19tYWtlVGVtcGxhdGVPYmplY3QsXG4gIF9faW1wb3J0U3RhcixcbiAgX19pbXBvcnREZWZhdWx0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4sXG4gIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxuICBfX2Rpc3Bvc2VSZXNvdXJjZXMsXG4gIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uLFxufTtcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRm9jdXNPbiBhcyBSZWFjdEZvY3VzT24gfSBmcm9tICcuL1VJJztcbmltcG9ydCBTaWRlQ2FyIGZyb20gJy4vc2lkZWNhcic7XG52YXIgUmVxdWlyZVNpZGVDYXIgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCBfX2Fzc2lnbih7fSwgcHJvcHMpKTtcbn07XG5leHBvcnQgdmFyIEZvY3VzT24gPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7IHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0Rm9jdXNPbiwgX19hc3NpZ24oe30sIHByb3BzLCB7IHJlZjogcmVmLCBzaWRlQ2FyOiBSZXF1aXJlU2lkZUNhciB9KSk7IH0pO1xuIiwgImltcG9ydCB7IF9fYXNzaWduLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbCB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwvVUknO1xuaW1wb3J0IFJlYWN0Rm9jdXNMb2NrIGZyb20gJ3JlYWN0LWZvY3VzLWxvY2svVUknO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xudmFyIFBSRVZFTlRfU0NST0xMID0geyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH07XG5leHBvcnQgdmFyIEZvY3VzT24gPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcGFyZW50UmVmKSB7XG4gICAgdmFyIF9hID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpLCBsb2NrUHJvcHMgPSBfYVswXSwgc2V0TG9ja1Byb3BzID0gX2FbMV07XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGF1dG9Gb2N1cyA9IHByb3BzLmF1dG9Gb2N1cywgc2hhcmRzID0gcHJvcHMuc2hhcmRzLCBjcm9zc0ZyYW1lID0gcHJvcHMuY3Jvc3NGcmFtZSwgX2IgPSBwcm9wcy5lbmFibGVkLCBlbmFibGVkID0gX2IgPT09IHZvaWQgMCA/IHRydWUgOiBfYiwgX2MgPSBwcm9wcy5zY3JvbGxMb2NrLCBzY3JvbGxMb2NrID0gX2MgPT09IHZvaWQgMCA/IHRydWUgOiBfYywgX2QgPSBwcm9wcy5mb2N1c0xvY2ssIGZvY3VzTG9jayA9IF9kID09PSB2b2lkIDAgPyB0cnVlIDogX2QsIF9lID0gcHJvcHMucmV0dXJuRm9jdXMsIHJldHVybkZvY3VzID0gX2UgPT09IHZvaWQgMCA/IHRydWUgOiBfZSwgaW5lcnQgPSBwcm9wcy5pbmVydCwgYWxsb3dQaW5jaFpvb20gPSBwcm9wcy5hbGxvd1BpbmNoWm9vbSwgc2lkZUNhciA9IHByb3BzLnNpZGVDYXIsIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgc2hvdWxkSWdub3JlID0gcHJvcHMuc2hvdWxkSWdub3JlLCBwcmV2ZW50U2Nyb2xsT25Gb2N1cyA9IHByb3BzLnByZXZlbnRTY3JvbGxPbkZvY3VzLCBzdHlsZSA9IHByb3BzLnN0eWxlLCBhcyA9IHByb3BzLmFzLCBnYXBNb2RlID0gcHJvcHMuZ2FwTW9kZSwgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJhdXRvRm9jdXNcIiwgXCJzaGFyZHNcIiwgXCJjcm9zc0ZyYW1lXCIsIFwiZW5hYmxlZFwiLCBcInNjcm9sbExvY2tcIiwgXCJmb2N1c0xvY2tcIiwgXCJyZXR1cm5Gb2N1c1wiLCBcImluZXJ0XCIsIFwiYWxsb3dQaW5jaFpvb21cIiwgXCJzaWRlQ2FyXCIsIFwiY2xhc3NOYW1lXCIsIFwic2hvdWxkSWdub3JlXCIsIFwicHJldmVudFNjcm9sbE9uRm9jdXNcIiwgXCJzdHlsZVwiLCBcImFzXCIsIFwiZ2FwTW9kZVwiXSk7XG4gICAgdmFyIFNpZGVDYXIgPSBzaWRlQ2FyO1xuICAgIHZhciBvbkFjdGl2YXRpb24gPSBsb2NrUHJvcHMub25BY3RpdmF0aW9uLCBvbkRlYWN0aXZhdGlvbiA9IGxvY2tQcm9wcy5vbkRlYWN0aXZhdGlvbiwgcmVzdFByb3BzID0gX19yZXN0KGxvY2tQcm9wcywgW1wib25BY3RpdmF0aW9uXCIsIFwib25EZWFjdGl2YXRpb25cIl0pO1xuICAgIHZhciBhcHBsaWVkTG9ja1Byb3BzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3RQcm9wcyksIHsgYXM6IGFzLFxuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIHNpZGVDYXI6IHNpZGVDYXIsXG4gICAgICAgIHNoYXJkczogc2hhcmRzLFxuICAgICAgICBhbGxvd1BpbmNoWm9vbTogYWxsb3dQaW5jaFpvb20sXG4gICAgICAgIGdhcE1vZGU6IGdhcE1vZGUsXG4gICAgICAgIGluZXJ0OiBpbmVydCwgZW5hYmxlZDogZW5hYmxlZCAmJiBzY3JvbGxMb2NrIH0pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdEZvY3VzTG9jaywgeyByZWY6IHBhcmVudFJlZiwgc2lkZUNhcjogc2lkZUNhciwgZGlzYWJsZWQ6ICEobG9ja1Byb3BzICYmIGVuYWJsZWQgJiYgZm9jdXNMb2NrKSwgcmV0dXJuRm9jdXM6IHJldHVybkZvY3VzLCBhdXRvRm9jdXM6IGF1dG9Gb2N1cywgc2hhcmRzOiBzaGFyZHMsIGNyb3NzRnJhbWU6IGNyb3NzRnJhbWUsIG9uQWN0aXZhdGlvbjogb25BY3RpdmF0aW9uLCBvbkRlYWN0aXZhdGlvbjogb25EZWFjdGl2YXRpb24sIGNsYXNzTmFtZTogY2xhc3NOYW1lLCB3aGl0ZUxpc3Q6IHNob3VsZElnbm9yZSwgbG9ja1Byb3BzOiBhcHBsaWVkTG9ja1Byb3BzLCBmb2N1c09wdGlvbnM6IHByZXZlbnRTY3JvbGxPbkZvY3VzID8gUFJFVkVOVF9TQ1JPTEwgOiB1bmRlZmluZWQsIGFzOiBSZW1vdmVTY3JvbGwgfSwgY2hpbGRyZW4pLFxuICAgICAgICBlbmFibGVkICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGVDYXIsIF9fYXNzaWduKHt9LCByZXN0LCB7IHNpZGVDYXI6IGVmZmVjdENhciwgc2V0TG9ja1Byb3BzOiBzZXRMb2NrUHJvcHMsIHNoYXJkczogc2hhcmRzIH0pKSkpKTtcbn0pO1xuZXhwb3J0ICogZnJvbSAnLi9yZUV4cG9ydHMnO1xuIiwgImltcG9ydCB7IF9fYXNzaWduLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZ1bGxXaWR0aENsYXNzTmFtZSwgemVyb1JpZ2h0Q2xhc3NOYW1lIH0gZnJvbSAncmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvY29uc3RhbnRzJztcbmltcG9ydCB7IHVzZU1lcmdlUmVmcyB9IGZyb20gJ3VzZS1jYWxsYmFjay1yZWYnO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xudmFyIG5vdGhpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuO1xufTtcbi8qKlxuICogUmVtb3ZlcyBzY3JvbGxiYXIgZnJvbSB0aGUgcGFnZSBhbmQgY29udGFpbiB0aGUgc2Nyb2xsIHdpdGhpbiB0aGUgTG9ja1xuICovXG52YXIgUmVtb3ZlU2Nyb2xsID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHBhcmVudFJlZikge1xuICAgIHZhciByZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgdmFyIF9hID0gUmVhY3QudXNlU3RhdGUoe1xuICAgICAgICBvblNjcm9sbENhcHR1cmU6IG5vdGhpbmcsXG4gICAgICAgIG9uV2hlZWxDYXB0dXJlOiBub3RoaW5nLFxuICAgICAgICBvblRvdWNoTW92ZUNhcHR1cmU6IG5vdGhpbmcsXG4gICAgfSksIGNhbGxiYWNrcyA9IF9hWzBdLCBzZXRDYWxsYmFja3MgPSBfYVsxXTtcbiAgICB2YXIgZm9yd2FyZFByb3BzID0gcHJvcHMuZm9yd2FyZFByb3BzLCBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHJlbW92ZVNjcm9sbEJhciA9IHByb3BzLnJlbW92ZVNjcm9sbEJhciwgZW5hYmxlZCA9IHByb3BzLmVuYWJsZWQsIHNoYXJkcyA9IHByb3BzLnNoYXJkcywgc2lkZUNhciA9IHByb3BzLnNpZGVDYXIsIG5vSXNvbGF0aW9uID0gcHJvcHMubm9Jc29sYXRpb24sIGluZXJ0ID0gcHJvcHMuaW5lcnQsIGFsbG93UGluY2hab29tID0gcHJvcHMuYWxsb3dQaW5jaFpvb20sIF9iID0gcHJvcHMuYXMsIENvbnRhaW5lciA9IF9iID09PSB2b2lkIDAgPyAnZGl2JyA6IF9iLCBnYXBNb2RlID0gcHJvcHMuZ2FwTW9kZSwgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiZm9yd2FyZFByb3BzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJyZW1vdmVTY3JvbGxCYXJcIiwgXCJlbmFibGVkXCIsIFwic2hhcmRzXCIsIFwic2lkZUNhclwiLCBcIm5vSXNvbGF0aW9uXCIsIFwiaW5lcnRcIiwgXCJhbGxvd1BpbmNoWm9vbVwiLCBcImFzXCIsIFwiZ2FwTW9kZVwiXSk7XG4gICAgdmFyIFNpZGVDYXIgPSBzaWRlQ2FyO1xuICAgIHZhciBjb250YWluZXJSZWYgPSB1c2VNZXJnZVJlZnMoW3JlZiwgcGFyZW50UmVmXSk7XG4gICAgdmFyIGNvbnRhaW5lclByb3BzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3QpLCBjYWxsYmFja3MpO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgZW5hYmxlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCB7IHNpZGVDYXI6IGVmZmVjdENhciwgcmVtb3ZlU2Nyb2xsQmFyOiByZW1vdmVTY3JvbGxCYXIsIHNoYXJkczogc2hhcmRzLCBub0lzb2xhdGlvbjogbm9Jc29sYXRpb24sIGluZXJ0OiBpbmVydCwgc2V0Q2FsbGJhY2tzOiBzZXRDYWxsYmFja3MsIGFsbG93UGluY2hab29tOiAhIWFsbG93UGluY2hab29tLCBsb2NrUmVmOiByZWYsIGdhcE1vZGU6IGdhcE1vZGUgfSkpLFxuICAgICAgICBmb3J3YXJkUHJvcHMgPyAoUmVhY3QuY2xvbmVFbGVtZW50KFJlYWN0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY29udGFpbmVyUHJvcHMpLCB7IHJlZjogY29udGFpbmVyUmVmIH0pKSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChDb250YWluZXIsIF9fYXNzaWduKHt9LCBjb250YWluZXJQcm9wcywgeyBjbGFzc05hbWU6IGNsYXNzTmFtZSwgcmVmOiBjb250YWluZXJSZWYgfSksIGNoaWxkcmVuKSkpKTtcbn0pO1xuUmVtb3ZlU2Nyb2xsLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIHJlbW92ZVNjcm9sbEJhcjogdHJ1ZSxcbiAgICBpbmVydDogZmFsc2UsXG59O1xuUmVtb3ZlU2Nyb2xsLmNsYXNzTmFtZXMgPSB7XG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGhDbGFzc05hbWUsXG4gICAgemVyb1JpZ2h0OiB6ZXJvUmlnaHRDbGFzc05hbWUsXG59O1xuZXhwb3J0IHsgUmVtb3ZlU2Nyb2xsIH07XG4iLCAiZXhwb3J0IHZhciB6ZXJvUmlnaHRDbGFzc05hbWUgPSAncmlnaHQtc2Nyb2xsLWJhci1wb3NpdGlvbic7XG5leHBvcnQgdmFyIGZ1bGxXaWR0aENsYXNzTmFtZSA9ICd3aWR0aC1iZWZvcmUtc2Nyb2xsLWJhcic7XG5leHBvcnQgdmFyIG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSA9ICd3aXRoLXNjcm9sbC1iYXJzLWhpZGRlbic7XG4vKipcbiAqIE5hbWUgb2YgYSBDU1MgdmFyaWFibGUgY29udGFpbmluZyB0aGUgYW1vdW50IG9mIFwiaGlkZGVuXCIgc2Nyb2xsYmFyXG4gKiAhIG1pZ2h0IGJlIHVuZGVmaW5lZCAhIHVzZSB3aWxsIGZhbGxiYWNrIVxuICovXG5leHBvcnQgdmFyIHJlbW92ZWRCYXJTaXplVmFyaWFibGUgPSAnLS1yZW1vdmVkLWJvZHktc2Nyb2xsLWJhci1zaXplJztcbiIsICIvKipcbiAqIEFzc2lnbnMgYSB2YWx1ZSBmb3IgYSBnaXZlbiByZWYsIG5vIG1hdHRlciBvZiB0aGUgcmVmIGZvcm1hdFxuICogQHBhcmFtIHtSZWZPYmplY3R9IHJlZiAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gb3IgcmVmIG9iamVjdFxuICogQHBhcmFtIHZhbHVlIC0gYSBuZXcgdmFsdWVcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvdXNlLWNhbGxiYWNrLXJlZiNhc3NpZ25yZWZcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZWZPYmplY3QgPSB1c2VSZWYoKTtcbiAqIGNvbnN0IHJlZkZuID0gKHJlZikgPT4gey4uLi59XG4gKlxuICogYXNzaWduUmVmKHJlZk9iamVjdCwgXCJyZWZWYWx1ZVwiKTtcbiAqIGFzc2lnblJlZihyZWZGbiwgXCJyZWZWYWx1ZVwiKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnblJlZihyZWYsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVmKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVmKSB7XG4gICAgICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZWY7XG59XG4iLCAiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIGNyZWF0ZXMgYSBNdXRhYmxlUmVmIHdpdGggcmVmIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIGluaXRpYWwgcmVmIHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIGEgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdmFsdWUgY2hhbmdlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZWYgPSB1c2VDYWxsYmFja1JlZigwLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiBjb25zb2xlLmxvZyhvbGRWYWx1ZSwgJy0+JywgbmV3VmFsdWUpO1xuICogcmVmLmN1cnJlbnQgPSAxO1xuICogLy8gcHJpbnRzIDAgLT4gMVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2hvb2tzLXJlZmVyZW5jZS5odG1sI3VzZXJlZlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L3VzZS1jYWxsYmFjay1yZWYjdXNlY2FsbGJhY2tyZWYtLS10by1yZXBsYWNlLXJlYWN0dXNlcmVmXG4gKiBAcmV0dXJucyB7TXV0YWJsZVJlZk9iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNhbGxiYWNrUmVmKGluaXRpYWxWYWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgcmVmID0gdXNlU3RhdGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgdmFsdWU6IGluaXRpYWxWYWx1ZSxcbiAgICAgICAgLy8gbGFzdCBjYWxsYmFja1xuICAgICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgICAgIC8vIFwibWVtb2l6ZWRcIiBwdWJsaWMgaW50ZXJmYWNlXG4gICAgICAgIGZhY2FkZToge1xuICAgICAgICAgICAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZi52YWx1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgY3VycmVudCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0ID0gcmVmLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0ICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZWYudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVmLmNhbGxiYWNrKHZhbHVlLCBsYXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0pOyB9KVswXTtcbiAgICAvLyB1cGRhdGUgY2FsbGJhY2tcbiAgICByZWYuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICByZXR1cm4gcmVmLmZhY2FkZTtcbn1cbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBhc3NpZ25SZWYgfSBmcm9tICcuL2Fzc2lnblJlZic7XG5pbXBvcnQgeyB1c2VDYWxsYmFja1JlZiB9IGZyb20gJy4vdXNlUmVmJztcbnZhciB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBSZWFjdC51c2VMYXlvdXRFZmZlY3QgOiBSZWFjdC51c2VFZmZlY3Q7XG52YXIgY3VycmVudFZhbHVlcyA9IG5ldyBXZWFrTWFwKCk7XG4vKipcbiAqIE1lcmdlcyB0d28gb3IgbW9yZSByZWZzIHRvZ2V0aGVyIHByb3ZpZGluZyBhIHNpbmdsZSBpbnRlcmZhY2UgdG8gc2V0IHRoZWlyIHZhbHVlXG4gKiBAcGFyYW0ge1JlZk9iamVjdHxSZWZ9IHJlZnNcbiAqIEByZXR1cm5zIHtNdXRhYmxlUmVmT2JqZWN0fSAtIGEgbmV3IHJlZiwgd2hpY2ggdHJhbnNsYXRlcyBhbGwgY2hhbmdlcyB0byB7cmVmc31cbiAqXG4gKiBAc2VlIHtAbGluayBtZXJnZVJlZnN9IGEgdmVyc2lvbiB3aXRob3V0IGJ1aXQtaW4gbWVtb2l6YXRpb25cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI3VzZW1lcmdlcmVmc1xuICogQGV4YW1wbGVcbiAqIGNvbnN0IENvbXBvbmVudCA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcbiAqICAgY29uc3Qgb3duUmVmID0gdXNlUmVmKCk7XG4gKiAgIGNvbnN0IGRvbVJlZiA9IHVzZU1lcmdlUmVmcyhbcmVmLCBvd25SZWZdKTsgLy8gXHVEODNEXHVEQzQ4IG1lcmdlIHRvZ2V0aGVyXG4gKiAgIHJldHVybiA8ZGl2IHJlZj17ZG9tUmVmfT4uLi48L2Rpdj5cbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lcmdlUmVmcyhyZWZzLCBkZWZhdWx0VmFsdWUpIHtcbiAgICB2YXIgY2FsbGJhY2tSZWYgPSB1c2VDYWxsYmFja1JlZihkZWZhdWx0VmFsdWUgfHwgbnVsbCwgZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIHJldHVybiByZWZzLmZvckVhY2goZnVuY3Rpb24gKHJlZikgeyByZXR1cm4gYXNzaWduUmVmKHJlZiwgbmV3VmFsdWUpOyB9KTtcbiAgICB9KTtcbiAgICAvLyBoYW5kbGUgcmVmcyBjaGFuZ2VzIC0gYWRkZWQgb3IgcmVtb3ZlZFxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2xkVmFsdWUgPSBjdXJyZW50VmFsdWVzLmdldChjYWxsYmFja1JlZik7XG4gICAgICAgIGlmIChvbGRWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIHByZXZSZWZzXzEgPSBuZXcgU2V0KG9sZFZhbHVlKTtcbiAgICAgICAgICAgIHZhciBuZXh0UmVmc18xID0gbmV3IFNldChyZWZzKTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50XzEgPSBjYWxsYmFja1JlZi5jdXJyZW50O1xuICAgICAgICAgICAgcHJldlJlZnNfMS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW5leHRSZWZzXzEuaGFzKHJlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduUmVmKHJlZiwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBuZXh0UmVmc18xLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICAgIGlmICghcHJldlJlZnNfMS5oYXMocmVmKSkge1xuICAgICAgICAgICAgICAgICAgICBhc3NpZ25SZWYocmVmLCBjdXJyZW50XzEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRWYWx1ZXMuc2V0KGNhbGxiYWNrUmVmLCByZWZzKTtcbiAgICB9LCBbcmVmc10pO1xuICAgIHJldHVybiBjYWxsYmFja1JlZjtcbn1cbiIsICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgfVxuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxuICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xuICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XG4gIHZhciBfLCBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XG4gICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcbiAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XG4gIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xuICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgICAgIHJba10gPSBhW2pdO1xuICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XG4gIHZhciBpLCBwO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xuICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxuICByZXR1cm4gY29va2VkO1xufTtcblxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufTtcblxudmFyIG93bktleXMgPSBmdW5jdGlvbihvKSB7XG4gIG93bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgIHZhciBhciA9IFtdO1xuICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgcmV0dXJuIGFyO1xuICB9O1xuICByZXR1cm4gb3duS2V5cyhvKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xuICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcbiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudiwgdmFsdWUsIGFzeW5jKSB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XG4gICAgdmFyIGRpc3Bvc2UsIGlubmVyO1xuICAgIGlmIChhc3luYykge1xuICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG4gICAgfVxuICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcbiAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgICAgaWYgKGFzeW5jKSBpbm5lciA9IGRpc3Bvc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcbiAgICBpZiAoaW5uZXIpIGRpc3Bvc2UgPSBmdW5jdGlvbigpIHsgdHJ5IHsgaW5uZXIuY2FsbCh0aGlzKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7IH0gfTtcbiAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xuICB9XG4gIGVsc2UgaWYgKGFzeW5jKSB7XG4gICAgZW52LnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGlzcG9zZVJlc291cmNlcyhlbnYpIHtcbiAgZnVuY3Rpb24gZmFpbChlKSB7XG4gICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xuICAgIGVudi5oYXNFcnJvciA9IHRydWU7XG4gIH1cbiAgdmFyIHIsIHMgPSAwO1xuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHdoaWxlIChyID0gZW52LnN0YWNrLnBvcCgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXIuYXN5bmMgJiYgcyA9PT0gMSkgcmV0dXJuIHMgPSAwLCBlbnYuc3RhY2sucHVzaChyKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0KTtcbiAgICAgICAgaWYgKHIuZGlzcG9zZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSByLmRpc3Bvc2UuY2FsbChyLnZhbHVlKTtcbiAgICAgICAgICBpZiAoci5hc3luYykgcmV0dXJuIHMgfD0gMiwgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgcyB8PSAxO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMgPT09IDEpIHJldHVybiBlbnYuaGFzRXJyb3IgPyBQcm9taXNlLnJlamVjdChlbnYuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xuICB9XG4gIHJldHVybiBuZXh0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbihwYXRoLCBwcmVzZXJ2ZUpzeCkge1xuICBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIgJiYgL15cXC5cXC4/XFwvLy50ZXN0KHBhdGgpKSB7XG4gICAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC4odHN4KSR8KCg/OlxcLmQpPykoKD86XFwuW14uL10rPyk/KVxcLihbY21dPyl0cyQvaSwgZnVuY3Rpb24gKG0sIHRzeCwgZCwgZXh0LCBjbSkge1xuICAgICAgICAgIHJldHVybiB0c3ggPyBwcmVzZXJ2ZUpzeCA/IFwiLmpzeFwiIDogXCIuanNcIiA6IGQgJiYgKCFleHQgfHwgIWNtKSA/IG0gOiAoZCArIGV4dCArIFwiLlwiICsgY20udG9Mb3dlckNhc2UoKSArIFwianNcIik7XG4gICAgICB9KTtcbiAgfVxuICByZXR1cm4gcGF0aDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fZXNEZWNvcmF0ZSxcbiAgX19ydW5Jbml0aWFsaXplcnMsXG4gIF9fcHJvcEtleSxcbiAgX19zZXRGdW5jdGlvbk5hbWUsXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxuICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbixcbn07XG4iLCAiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tIFwidHNsaWJcIjtcbmZ1bmN0aW9uIEl0b0koYSkge1xuICAgIHJldHVybiBhO1xufVxuZnVuY3Rpb24gaW5uZXJDcmVhdGVNZWRpdW0oZGVmYXVsdHMsIG1pZGRsZXdhcmUpIHtcbiAgICBpZiAobWlkZGxld2FyZSA9PT0gdm9pZCAwKSB7IG1pZGRsZXdhcmUgPSBJdG9JOyB9XG4gICAgdmFyIGJ1ZmZlciA9IFtdO1xuICAgIHZhciBhc3NpZ25lZCA9IGZhbHNlO1xuICAgIHZhciBtZWRpdW0gPSB7XG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChhc3NpZ25lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWNhcjogY291bGQgbm90IGByZWFkYCBmcm9tIGFuIGBhc3NpZ25lZGAgbWVkaXVtLiBgcmVhZGAgY291bGQgYmUgdXNlZCBvbmx5IHdpdGggYHVzZU1lZGl1bWAuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJbYnVmZmVyLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgICAgICB9LFxuICAgICAgICB1c2VNZWRpdW06IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IG1pZGRsZXdhcmUoZGF0YSwgYXNzaWduZWQpO1xuICAgICAgICAgICAgYnVmZmVyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggIT09IGl0ZW07IH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgYXNzaWduU3luY01lZGl1bTogZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBhc3NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBjYnMgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gW107XG4gICAgICAgICAgICAgICAgY2JzLmZvckVhY2goY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyID0ge1xuICAgICAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uICh4KSB7IHJldHVybiBjYih4KTsgfSxcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlcjsgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGFzc2lnbk1lZGl1bTogZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBhc3NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgcGVuZGluZ1F1ZXVlID0gW107XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBjYnMgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gW107XG4gICAgICAgICAgICAgICAgY2JzLmZvckVhY2goY2IpO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IGJ1ZmZlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBleGVjdXRlUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIGN5Y2xlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihleGVjdXRlUXVldWUpOyB9O1xuICAgICAgICAgICAgY3ljbGUoKTtcbiAgICAgICAgICAgIGJ1ZmZlciA9IHtcbiAgICAgICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUucHVzaCh4KTtcbiAgICAgICAgICAgICAgICAgICAgY3ljbGUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24gKGZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUgPSBwZW5kaW5nUXVldWUuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gbWVkaXVtO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSkge1xuICAgIGlmIChtaWRkbGV3YXJlID09PSB2b2lkIDApIHsgbWlkZGxld2FyZSA9IEl0b0k7IH1cbiAgICByZXR1cm4gaW5uZXJDcmVhdGVNZWRpdW0oZGVmYXVsdHMsIG1pZGRsZXdhcmUpO1xufVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaWRlY2FyTWVkaXVtKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBtZWRpdW0gPSBpbm5lckNyZWF0ZU1lZGl1bShudWxsKTtcbiAgICBtZWRpdW0ub3B0aW9ucyA9IF9fYXNzaWduKHsgYXN5bmM6IHRydWUsIHNzcjogZmFsc2UgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG1lZGl1bTtcbn1cbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgU2lkZUNhciA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzaWRlQ2FyID0gX2Euc2lkZUNhciwgcmVzdCA9IF9fcmVzdChfYSwgW1wic2lkZUNhclwiXSk7XG4gICAgaWYgKCFzaWRlQ2FyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWNhcjogcGxlYXNlIHByb3ZpZGUgYHNpZGVDYXJgIHByb3BlcnR5IHRvIGltcG9ydCB0aGUgcmlnaHQgY2FyJyk7XG4gICAgfVxuICAgIHZhciBUYXJnZXQgPSBzaWRlQ2FyLnJlYWQoKTtcbiAgICBpZiAoIVRhcmdldCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZGVjYXIgbWVkaXVtIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYXJnZXQsIF9fYXNzaWduKHt9LCByZXN0KSk7XG59O1xuU2lkZUNhci5pc1NpZGVDYXJFeHBvcnQgPSB0cnVlO1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydFNpZGVjYXIobWVkaXVtLCBleHBvcnRlZCkge1xuICAgIG1lZGl1bS51c2VNZWRpdW0oZXhwb3J0ZWQpO1xuICAgIHJldHVybiBTaWRlQ2FyO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZGVjYXJNZWRpdW0gfSBmcm9tICd1c2Utc2lkZWNhcic7XG5leHBvcnQgdmFyIGVmZmVjdENhciA9IGNyZWF0ZVNpZGVjYXJNZWRpdW0oKTtcbiIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IG5vZGUsIGJvb2wsIHN0cmluZywgYW55LCBhcnJheU9mLCBvbmVPZlR5cGUsIG9iamVjdCwgZnVuYyB9IGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgRk9DVVNfRElTQUJMRUQsIEZPQ1VTX0dST1VQIH0gZnJvbSAnZm9jdXMtbG9jay9jb25zdGFudHMnO1xuaW1wb3J0IHsgdXNlTWVyZ2VSZWZzIH0gZnJvbSAndXNlLWNhbGxiYWNrLXJlZic7XG5pbXBvcnQgeyBoaWRkZW5HdWFyZCB9IGZyb20gJy4vRm9jdXNHdWFyZCc7XG5pbXBvcnQgeyBtZWRpdW1Gb2N1cywgbWVkaXVtQmx1ciwgbWVkaXVtU2lkZWNhciB9IGZyb20gJy4vbWVkaXVtJztcbmltcG9ydCB7IGZvY3VzU2NvcGUgfSBmcm9tICcuL3Njb3BlJztcbnZhciBlbXB0eUFycmF5ID0gW107XG52YXIgRm9jdXNMb2NrID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gRm9jdXNMb2NrVUkocHJvcHMsIHBhcmVudFJlZikge1xuICB2YXIgX2V4dGVuZHMyO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoKSxcbiAgICByZWFsT2JzZXJ2ZWQgPSBfdXNlU3RhdGVbMF0sXG4gICAgc2V0T2JzZXJ2ZWQgPSBfdXNlU3RhdGVbMV07XG4gIHZhciBvYnNlcnZlZCA9IHVzZVJlZigpO1xuICB2YXIgaXNBY3RpdmUgPSB1c2VSZWYoZmFsc2UpO1xuICB2YXIgb3JpZ2luYWxGb2N1c2VkRWxlbWVudCA9IHVzZVJlZihudWxsKTtcbiAgdmFyIF91c2VTdGF0ZTIgPSB1c2VTdGF0ZSh7fSksXG4gICAgdXBkYXRlID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgX3Byb3BzJGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQsXG4gICAgZGlzYWJsZWQgPSBfcHJvcHMkZGlzYWJsZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJGRpc2FibGVkLFxuICAgIF9wcm9wcyRub0ZvY3VzR3VhcmRzID0gcHJvcHMubm9Gb2N1c0d1YXJkcyxcbiAgICBub0ZvY3VzR3VhcmRzID0gX3Byb3BzJG5vRm9jdXNHdWFyZHMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJG5vRm9jdXNHdWFyZHMsXG4gICAgX3Byb3BzJHBlcnNpc3RlbnRGb2N1ID0gcHJvcHMucGVyc2lzdGVudEZvY3VzLFxuICAgIHBlcnNpc3RlbnRGb2N1cyA9IF9wcm9wcyRwZXJzaXN0ZW50Rm9jdSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcHJvcHMkcGVyc2lzdGVudEZvY3UsXG4gICAgX3Byb3BzJGNyb3NzRnJhbWUgPSBwcm9wcy5jcm9zc0ZyYW1lLFxuICAgIGNyb3NzRnJhbWUgPSBfcHJvcHMkY3Jvc3NGcmFtZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyRjcm9zc0ZyYW1lLFxuICAgIF9wcm9wcyRhdXRvRm9jdXMgPSBwcm9wcy5hdXRvRm9jdXMsXG4gICAgYXV0b0ZvY3VzID0gX3Byb3BzJGF1dG9Gb2N1cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyRhdXRvRm9jdXMsXG4gICAgYWxsb3dUZXh0U2VsZWN0aW9uID0gcHJvcHMuYWxsb3dUZXh0U2VsZWN0aW9uLFxuICAgIGdyb3VwID0gcHJvcHMuZ3JvdXAsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIHdoaXRlTGlzdCA9IHByb3BzLndoaXRlTGlzdCxcbiAgICBoYXNQb3NpdGl2ZUluZGljZXMgPSBwcm9wcy5oYXNQb3NpdGl2ZUluZGljZXMsXG4gICAgX3Byb3BzJHNoYXJkcyA9IHByb3BzLnNoYXJkcyxcbiAgICBzaGFyZHMgPSBfcHJvcHMkc2hhcmRzID09PSB2b2lkIDAgPyBlbXB0eUFycmF5IDogX3Byb3BzJHNoYXJkcyxcbiAgICBfcHJvcHMkYXMgPSBwcm9wcy5hcyxcbiAgICBDb250YWluZXIgPSBfcHJvcHMkYXMgPT09IHZvaWQgMCA/ICdkaXYnIDogX3Byb3BzJGFzLFxuICAgIF9wcm9wcyRsb2NrUHJvcHMgPSBwcm9wcy5sb2NrUHJvcHMsXG4gICAgY29udGFpbmVyUHJvcHMgPSBfcHJvcHMkbG9ja1Byb3BzID09PSB2b2lkIDAgPyB7fSA6IF9wcm9wcyRsb2NrUHJvcHMsXG4gICAgU2lkZUNhciA9IHByb3BzLnNpZGVDYXIsXG4gICAgX3Byb3BzJHJldHVybkZvY3VzID0gcHJvcHMucmV0dXJuRm9jdXMsXG4gICAgc2hvdWxkUmV0dXJuRm9jdXMgPSBfcHJvcHMkcmV0dXJuRm9jdXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJHJldHVybkZvY3VzLFxuICAgIGZvY3VzT3B0aW9ucyA9IHByb3BzLmZvY3VzT3B0aW9ucyxcbiAgICBvbkFjdGl2YXRpb25DYWxsYmFjayA9IHByb3BzLm9uQWN0aXZhdGlvbixcbiAgICBvbkRlYWN0aXZhdGlvbkNhbGxiYWNrID0gcHJvcHMub25EZWFjdGl2YXRpb247XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUoe30pLFxuICAgIGlkID0gX3VzZVN0YXRlM1swXTtcbiAgdmFyIG9uQWN0aXZhdGlvbiA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIGNhcHR1cmVGb2N1c1Jlc3RvcmUgPSBfcmVmLmNhcHR1cmVGb2N1c1Jlc3RvcmU7XG4gICAgaWYgKCFvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQpIHtcbiAgICAgIHZhciBfZG9jdW1lbnQ7XG4gICAgICB2YXIgYWN0aXZlRWxlbWVudCA9IChfZG9jdW1lbnQgPSBkb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50ID0gYWN0aXZlRWxlbWVudDtcbiAgICAgIGlmIChhY3RpdmVFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgIG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudCA9IGNhcHR1cmVGb2N1c1Jlc3RvcmUoYWN0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvYnNlcnZlZC5jdXJyZW50ICYmIG9uQWN0aXZhdGlvbkNhbGxiYWNrKSB7XG4gICAgICBvbkFjdGl2YXRpb25DYWxsYmFjayhvYnNlcnZlZC5jdXJyZW50KTtcbiAgICB9XG4gICAgaXNBY3RpdmUuY3VycmVudCA9IHRydWU7XG4gICAgdXBkYXRlKCk7XG4gIH0sIFtvbkFjdGl2YXRpb25DYWxsYmFja10pO1xuICB2YXIgb25EZWFjdGl2YXRpb24gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgaXNBY3RpdmUuY3VycmVudCA9IGZhbHNlO1xuICAgIGlmIChvbkRlYWN0aXZhdGlvbkNhbGxiYWNrKSB7XG4gICAgICBvbkRlYWN0aXZhdGlvbkNhbGxiYWNrKG9ic2VydmVkLmN1cnJlbnQpO1xuICAgIH1cbiAgICB1cGRhdGUoKTtcbiAgfSwgW29uRGVhY3RpdmF0aW9uQ2FsbGJhY2tdKTtcbiAgdmFyIHJldHVybkZvY3VzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGFsbG93RGVmZXIpIHtcbiAgICB2YXIgZm9jdXNSZXN0b3JlID0gb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50O1xuICAgIGlmIChmb2N1c1Jlc3RvcmUpIHtcbiAgICAgIHZhciByZXR1cm5Gb2N1c1RvID0gKHR5cGVvZiBmb2N1c1Jlc3RvcmUgPT09ICdmdW5jdGlvbicgPyBmb2N1c1Jlc3RvcmUoKSA6IGZvY3VzUmVzdG9yZSkgfHwgZG9jdW1lbnQuYm9keTtcbiAgICAgIHZhciBob3dUb1JldHVybkZvY3VzID0gdHlwZW9mIHNob3VsZFJldHVybkZvY3VzID09PSAnZnVuY3Rpb24nID8gc2hvdWxkUmV0dXJuRm9jdXMocmV0dXJuRm9jdXNUbykgOiBzaG91bGRSZXR1cm5Gb2N1cztcbiAgICAgIGlmIChob3dUb1JldHVybkZvY3VzKSB7XG4gICAgICAgIHZhciByZXR1cm5Gb2N1c09wdGlvbnMgPSB0eXBlb2YgaG93VG9SZXR1cm5Gb2N1cyA9PT0gJ29iamVjdCcgPyBob3dUb1JldHVybkZvY3VzIDogdW5kZWZpbmVkO1xuICAgICAgICBvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBpZiAoYWxsb3dEZWZlcikge1xuICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybkZvY3VzVG8uZm9jdXMocmV0dXJuRm9jdXNPcHRpb25zKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm5Gb2N1c1RvLmZvY3VzKHJldHVybkZvY3VzT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzaG91bGRSZXR1cm5Gb2N1c10pO1xuICB2YXIgb25Gb2N1cyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChpc0FjdGl2ZS5jdXJyZW50KSB7XG4gICAgICBtZWRpdW1Gb2N1cy51c2VNZWRpdW0oZXZlbnQpO1xuICAgIH1cbiAgfSwgW10pO1xuICB2YXIgb25CbHVyID0gbWVkaXVtQmx1ci51c2VNZWRpdW07XG4gIHZhciBzZXRPYnNlcnZlTm9kZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdPYnNlcnZlZCkge1xuICAgIGlmIChvYnNlcnZlZC5jdXJyZW50ICE9PSBuZXdPYnNlcnZlZCkge1xuICAgICAgb2JzZXJ2ZWQuY3VycmVudCA9IG5ld09ic2VydmVkO1xuICAgICAgc2V0T2JzZXJ2ZWQobmV3T2JzZXJ2ZWQpO1xuICAgIH1cbiAgfSwgW10pO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2YgYWxsb3dUZXh0U2VsZWN0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS53YXJuKCdSZWFjdC1Gb2N1cy1Mb2NrOiBhbGxvd1RleHRTZWxlY3Rpb24gaXMgZGVwcmVjYXRlZCBhbmQgZW5hYmxlZCBieSBkZWZhdWx0Jyk7XG4gICAgfVxuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIW9ic2VydmVkLmN1cnJlbnQgJiYgdHlwZW9mIENvbnRhaW5lciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRm9jdXNMb2NrOiBjb3VsZCBub3Qgb2J0YWluIHJlZiB0byBpbnRlcm5hbCBub2RlJyk7XG4gICAgICB9XG4gICAgfSwgW10pO1xuICB9XG4gIHZhciBsb2NrUHJvcHMgPSBfZXh0ZW5kcygoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltGT0NVU19ESVNBQkxFRF0gPSBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBfZXh0ZW5kczJbRk9DVVNfR1JPVVBdID0gZ3JvdXAsIF9leHRlbmRzMiksIGNvbnRhaW5lclByb3BzKTtcbiAgdmFyIGhhc0xlYWRpbmdHdWFyZHMgPSBub0ZvY3VzR3VhcmRzICE9PSB0cnVlO1xuICB2YXIgaGFzVGFpbGluZ0d1YXJkcyA9IGhhc0xlYWRpbmdHdWFyZHMgJiYgbm9Gb2N1c0d1YXJkcyAhPT0gJ3RhaWwnO1xuICB2YXIgbWVyZ2VkUmVmID0gdXNlTWVyZ2VSZWZzKFtwYXJlbnRSZWYsIHNldE9ic2VydmVOb2RlXSk7XG4gIHZhciBmb2N1c1Njb3BlVmFsdWUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2JzZXJ2ZWQ6IG9ic2VydmVkLFxuICAgICAgc2hhcmRzOiBzaGFyZHMsXG4gICAgICBlbmFibGVkOiAhZGlzYWJsZWQsXG4gICAgICBhY3RpdmU6IGlzQWN0aXZlLmN1cnJlbnRcbiAgICB9O1xuICB9LCBbZGlzYWJsZWQsIGlzQWN0aXZlLmN1cnJlbnQsIHNoYXJkcywgcmVhbE9ic2VydmVkXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgaGFzTGVhZGluZ0d1YXJkcyAmJiBbXG4gIC8qI19fUFVSRV9fKi9cbiAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLWZpcnN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiAwLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSwgaGFzUG9zaXRpdmVJbmRpY2VzID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJndWFyZC1uZWFyZXN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiAxLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSA6IG51bGxdLCAhZGlzYWJsZWQgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwge1xuICAgIGlkOiBpZCxcbiAgICBzaWRlQ2FyOiBtZWRpdW1TaWRlY2FyLFxuICAgIG9ic2VydmVkOiByZWFsT2JzZXJ2ZWQsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIHBlcnNpc3RlbnRGb2N1czogcGVyc2lzdGVudEZvY3VzLFxuICAgIGNyb3NzRnJhbWU6IGNyb3NzRnJhbWUsXG4gICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgd2hpdGVMaXN0OiB3aGl0ZUxpc3QsXG4gICAgc2hhcmRzOiBzaGFyZHMsXG4gICAgb25BY3RpdmF0aW9uOiBvbkFjdGl2YXRpb24sXG4gICAgb25EZWFjdGl2YXRpb246IG9uRGVhY3RpdmF0aW9uLFxuICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyxcbiAgICBmb2N1c09wdGlvbnM6IGZvY3VzT3B0aW9ucyxcbiAgICBub0ZvY3VzR3VhcmRzOiBub0ZvY3VzR3VhcmRzXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250YWluZXIsIF9leHRlbmRzKHtcbiAgICByZWY6IG1lcmdlZFJlZlxuICB9LCBsb2NrUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBvbkJsdXI6IG9uQmx1cixcbiAgICBvbkZvY3VzOiBvbkZvY3VzXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChmb2N1c1Njb3BlLlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGZvY3VzU2NvcGVWYWx1ZVxuICB9LCBjaGlsZHJlbikpLCBoYXNUYWlsaW5nR3VhcmRzICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IDAsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pKTtcbn0pO1xuRm9jdXNMb2NrLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgY2hpbGRyZW46IG5vZGUsXG4gIGRpc2FibGVkOiBib29sLFxuICByZXR1cm5Gb2N1czogb25lT2ZUeXBlKFtib29sLCBvYmplY3QsIGZ1bmNdKSxcbiAgZm9jdXNPcHRpb25zOiBvYmplY3QsXG4gIG5vRm9jdXNHdWFyZHM6IGJvb2wsXG4gIGhhc1Bvc2l0aXZlSW5kaWNlczogYm9vbCxcbiAgYWxsb3dUZXh0U2VsZWN0aW9uOiBib29sLFxuICBhdXRvRm9jdXM6IGJvb2wsXG4gIHBlcnNpc3RlbnRGb2N1czogYm9vbCxcbiAgY3Jvc3NGcmFtZTogYm9vbCxcbiAgZ3JvdXA6IHN0cmluZyxcbiAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gIHdoaXRlTGlzdDogZnVuYyxcbiAgc2hhcmRzOiBhcnJheU9mKGFueSksXG4gIGFzOiBvbmVPZlR5cGUoW3N0cmluZywgZnVuYywgb2JqZWN0XSksXG4gIGxvY2tQcm9wczogb2JqZWN0LFxuICBvbkFjdGl2YXRpb246IGZ1bmMsXG4gIG9uRGVhY3RpdmF0aW9uOiBmdW5jLFxuICBzaWRlQ2FyOiBhbnkuaXNSZXF1aXJlZFxufSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgRm9jdXNMb2NrOyIsICIvKipcbiAqIGRlZmluZXMgYSBmb2N1cyBncm91cFxuICovXG5leHBvcnQgdmFyIEZPQ1VTX0dST1VQID0gJ2RhdGEtZm9jdXMtbG9jayc7XG4vKipcbiAqIGRpc2FibGVzIGVsZW1lbnQgZGlzY292ZXJ5IGluc2lkZSBhIGdyb3VwIG1hcmtlZCBieSBrZXlcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19ESVNBQkxFRCA9ICdkYXRhLWZvY3VzLWxvY2stZGlzYWJsZWQnO1xuLyoqXG4gKiBhbGxvd3MgdW5jb250cm9sbGVkIGZvY3VzIHdpdGhpbiB0aGUgbWFya2VkIGFyZWEsIGVmZmVjdGl2ZWx5IGRpc2FibGluZyBmb2N1cyBsb2NrIGZvciBpdCdzIGNvbnRlbnRcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19BTExPVyA9ICdkYXRhLW5vLWZvY3VzLWxvY2snO1xuLyoqXG4gKiBpbnN0cnVjdHMgYXV0b2ZvY3VzIGVuZ2luZSB0byBwaWNrIGRlZmF1bHQgYXV0b2ZvY3VzIGluc2lkZSBhIGdpdmVuIG5vZGVcbiAqIGNhbiBiZSBzZXQgb24gdGhlIGVsZW1lbnQgb3IgY29udGFpbmVyXG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfQVVUTyA9ICdkYXRhLWF1dG9mb2N1cy1pbnNpZGUnO1xuLyoqXG4gKiBpbnN0cnVjdHMgYXV0b2ZvY3VzIHRvIGlnbm9yZSBlbGVtZW50cyB3aXRoaW4gYSBnaXZlbiBub2RlXG4gKiBjYW4gYmUgc2V0IG9uIHRoZSBlbGVtZW50IG9yIGNvbnRhaW5lclxuICovXG5leHBvcnQgdmFyIEZPQ1VTX05PX0FVVE9GT0NVUyA9ICdkYXRhLW5vLWF1dG9mb2N1cyc7XG4iLCAiaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmV4cG9ydCB2YXIgaGlkZGVuR3VhcmQgPSB7XG4gIHdpZHRoOiAnMXB4JyxcbiAgaGVpZ2h0OiAnMHB4JyxcbiAgcGFkZGluZzogMCxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgdG9wOiAnMXB4JyxcbiAgbGVmdDogJzFweCdcbn07XG52YXIgSW5Gb2N1c0d1YXJkID0gZnVuY3Rpb24gSW5Gb2N1c0d1YXJkKF9yZWYpIHtcbiAgdmFyIF9yZWYkY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNoaWxkcmVuID0gX3JlZiRjaGlsZHJlbiA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYkY2hpbGRyZW47XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJndWFyZC1maXJzdFwiLFxuICAgIFwiZGF0YS1mb2N1cy1ndWFyZFwiOiB0cnVlLFxuICAgIFwiZGF0YS1mb2N1cy1hdXRvLWd1YXJkXCI6IHRydWUsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pLCBjaGlsZHJlbiwgY2hpbGRyZW4gJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJndWFyZC1sYXN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgXCJkYXRhLWZvY3VzLWF1dG8tZ3VhcmRcIjogdHJ1ZSxcbiAgICBzdHlsZTogaGlkZGVuR3VhcmRcbiAgfSkpO1xufTtcbkluRm9jdXNHdWFyZC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZVxufSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgSW5Gb2N1c0d1YXJkOyIsICJpbXBvcnQgeyBjcmVhdGVNZWRpdW0sIGNyZWF0ZVNpZGVjYXJNZWRpdW0gfSBmcm9tICd1c2Utc2lkZWNhcic7XG5leHBvcnQgdmFyIG1lZGl1bUZvY3VzID0gY3JlYXRlTWVkaXVtKHt9LCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgY3VycmVudFRhcmdldCA9IF9yZWYuY3VycmVudFRhcmdldDtcbiAgcmV0dXJuIHtcbiAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICBjdXJyZW50VGFyZ2V0OiBjdXJyZW50VGFyZ2V0XG4gIH07XG59KTtcbmV4cG9ydCB2YXIgbWVkaXVtQmx1ciA9IGNyZWF0ZU1lZGl1bSgpO1xuZXhwb3J0IHZhciBtZWRpdW1FZmZlY3QgPSBjcmVhdGVNZWRpdW0oKTtcbmV4cG9ydCB2YXIgbWVkaXVtU2lkZWNhciA9IGNyZWF0ZVNpZGVjYXJNZWRpdW0oe1xuICBhc3luYzogdHJ1ZSxcbiAgc3NyOiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG59KTsiLCAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgZm9jdXNTY29wZSA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7IiwgImV4cG9ydCBmdW5jdGlvbiBkZWZlckFjdGlvbihhY3Rpb24pIHtcbiAgc2V0VGltZW91dChhY3Rpb24sIDEpO1xufVxuZXhwb3J0IHZhciBpbmxpbmVQcm9wID0gZnVuY3Rpb24gaW5saW5lUHJvcChuYW1lLCB2YWx1ZSkge1xuICB2YXIgb2JqID0ge307XG4gIG9ialtuYW1lXSA9IHZhbHVlO1xuICByZXR1cm4gb2JqO1xufTtcbmV4cG9ydCB2YXIgZXh0cmFjdFJlZiA9IGZ1bmN0aW9uIGV4dHJhY3RSZWYocmVmKSB7XG4gIHJldHVybiByZWYgJiYgJ2N1cnJlbnQnIGluIHJlZiA/IHJlZi5jdXJyZW50IDogcmVmO1xufTsiLCAiaW1wb3J0IEZvY3VzTG9ja1VJIGZyb20gJy4vTG9jayc7XG5pbXBvcnQgQXV0b0ZvY3VzSW5zaWRlIGZyb20gJy4vQXV0b0ZvY3VzSW5zaWRlJztcbmltcG9ydCBNb3ZlRm9jdXNJbnNpZGUsIHsgdXNlRm9jdXNJbnNpZGUgfSBmcm9tICcuL01vdmVGb2N1c0luc2lkZSc7XG5pbXBvcnQgRnJlZUZvY3VzSW5zaWRlIGZyb20gJy4vRnJlZUZvY3VzSW5zaWRlJztcbmltcG9ydCBJbkZvY3VzR3VhcmQgZnJvbSAnLi9Gb2N1c0d1YXJkJztcbmltcG9ydCB7IHVzZUZvY3VzQ29udHJvbGxlciwgdXNlRm9jdXNTY29wZSB9IGZyb20gJy4vdXNlLWZvY3VzLXNjb3BlJztcbmltcG9ydCB7IHVzZUZvY3VzU3RhdGUgfSBmcm9tICcuL3VzZS1mb2N1cy1zdGF0ZSc7XG5leHBvcnQgeyBBdXRvRm9jdXNJbnNpZGUsIE1vdmVGb2N1c0luc2lkZSwgRnJlZUZvY3VzSW5zaWRlLCBJbkZvY3VzR3VhcmQsIEZvY3VzTG9ja1VJLCB1c2VGb2N1c0luc2lkZSwgdXNlRm9jdXNDb250cm9sbGVyLCB1c2VGb2N1c1Njb3BlLCB1c2VGb2N1c1N0YXRlIH07XG5leHBvcnQgZGVmYXVsdCBGb2N1c0xvY2tVSTsiLCAiaW1wb3J0IHsgY3JlYXRlU2lkZWNhck1lZGl1bSB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmV4cG9ydCB2YXIgZWZmZWN0Q2FyID0gY3JlYXRlU2lkZWNhck1lZGl1bSgpO1xuZXhwb3J0IHZhciBmb2N1c0hpZGRlbk1hcmtlciA9ICdkYXRhLWZvY3VzLW9uLWhpZGRlbic7XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgd2l0aFNpZGVFZmZlY3QgZnJvbSAncmVhY3QtY2xpZW50c2lkZS1lZmZlY3QnO1xuaW1wb3J0IHsgbW92ZUZvY3VzSW5zaWRlLCBmb2N1c0luc2lkZSwgZm9jdXNJc0hpZGRlbiwgZXhwYW5kRm9jdXNhYmxlTm9kZXMsIGdldEZvY3VzYWJsZU5vZGVzLCBmb2N1c05leHRFbGVtZW50LCBmb2N1c1ByZXZFbGVtZW50LCBmb2N1c0ZpcnN0RWxlbWVudCwgZm9jdXNMYXN0RWxlbWVudCwgY2FwdHVyZUZvY3VzUmVzdG9yZSB9IGZyb20gJ2ZvY3VzLWxvY2snO1xuaW1wb3J0IHsgZGVmZXJBY3Rpb24sIGV4dHJhY3RSZWYgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgbWVkaXVtRm9jdXMsIG1lZGl1bUJsdXIsIG1lZGl1bUVmZmVjdCB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBmb2N1c09uQm9keSA9IGZ1bmN0aW9uIGZvY3VzT25Cb2R5KCkge1xuICByZXR1cm4gZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keTtcbn07XG52YXIgaXNGcmVlRm9jdXMgPSBmdW5jdGlvbiBpc0ZyZWVGb2N1cygpIHtcbiAgcmV0dXJuIGZvY3VzT25Cb2R5KCkgfHwgZm9jdXNJc0hpZGRlbigpO1xufTtcbnZhciBsYXN0QWN0aXZlVHJhcCA9IG51bGw7XG52YXIgbGFzdEFjdGl2ZUZvY3VzID0gbnVsbDtcbnZhciB0cnlSZXN0b3JlRm9jdXMgPSBmdW5jdGlvbiB0cnlSZXN0b3JlRm9jdXMoKSB7XG4gIHJldHVybiBudWxsO1xufTtcbnZhciBsYXN0UG9ydGFsZWRFbGVtZW50ID0gbnVsbDtcbnZhciBmb2N1c1dhc091dHNpZGVXaW5kb3cgPSBmYWxzZTtcbnZhciB3aW5kb3dGb2N1c2VkID0gZmFsc2U7XG52YXIgZGVmYXVsdFdoaXRlbGlzdCA9IGZ1bmN0aW9uIGRlZmF1bHRXaGl0ZWxpc3QoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBmb2N1c1doaXRlbGlzdGVkID0gZnVuY3Rpb24gZm9jdXNXaGl0ZWxpc3RlZChhY3RpdmVFbGVtZW50KSB7XG4gIHJldHVybiAobGFzdEFjdGl2ZVRyYXAud2hpdGVMaXN0IHx8IGRlZmF1bHRXaGl0ZWxpc3QpKGFjdGl2ZUVsZW1lbnQpO1xufTtcbnZhciByZWNvcmRQb3J0YWwgPSBmdW5jdGlvbiByZWNvcmRQb3J0YWwob2JzZXJ2ZXJOb2RlLCBwb3J0YWxlZEVsZW1lbnQpIHtcbiAgbGFzdFBvcnRhbGVkRWxlbWVudCA9IHtcbiAgICBvYnNlcnZlck5vZGU6IG9ic2VydmVyTm9kZSxcbiAgICBwb3J0YWxlZEVsZW1lbnQ6IHBvcnRhbGVkRWxlbWVudFxuICB9O1xufTtcbnZhciBmb2N1c0lzUG9ydGFsZWRQYWlyID0gZnVuY3Rpb24gZm9jdXNJc1BvcnRhbGVkUGFpcihlbGVtZW50KSB7XG4gIHJldHVybiBsYXN0UG9ydGFsZWRFbGVtZW50ICYmIGxhc3RQb3J0YWxlZEVsZW1lbnQucG9ydGFsZWRFbGVtZW50ID09PSBlbGVtZW50O1xufTtcbmZ1bmN0aW9uIGF1dG9HdWFyZChzdGFydEluZGV4LCBlbmQsIHN0ZXAsIGFsbE5vZGVzKSB7XG4gIHZhciBsYXN0R3VhcmQgPSBudWxsO1xuICB2YXIgaSA9IHN0YXJ0SW5kZXg7XG4gIGRvIHtcbiAgICB2YXIgaXRlbSA9IGFsbE5vZGVzW2ldO1xuICAgIGlmIChpdGVtLmd1YXJkKSB7XG4gICAgICBpZiAoaXRlbS5ub2RlLmRhdGFzZXQuZm9jdXNBdXRvR3VhcmQpIHtcbiAgICAgICAgbGFzdEd1YXJkID0gaXRlbTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGl0ZW0ubG9ja0l0ZW0pIHtcbiAgICAgIGlmIChpICE9PSBzdGFydEluZGV4KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RHdWFyZCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSB3aGlsZSAoKGkgKz0gc3RlcCkgIT09IGVuZCk7XG4gIGlmIChsYXN0R3VhcmQpIHtcbiAgICBsYXN0R3VhcmQubm9kZS50YWJJbmRleCA9IDA7XG4gIH1cbn1cbnZhciBmb2N1c1dhc091dHNpZGUgPSBmdW5jdGlvbiBmb2N1c1dhc091dHNpZGUoY3Jvc3NGcmFtZU9wdGlvbikge1xuICBpZiAoY3Jvc3NGcmFtZU9wdGlvbikge1xuICAgIHJldHVybiBCb29sZWFuKGZvY3VzV2FzT3V0c2lkZVdpbmRvdyk7XG4gIH1cbiAgcmV0dXJuIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9PT0gJ21lYW53aGlsZSc7XG59O1xudmFyIGNoZWNrSW5Ib3N0ID0gZnVuY3Rpb24gY2hlY2tJbkhvc3QoY2hlY2ssIGVsLCBib3VuZGFyeSkge1xuICByZXR1cm4gZWwgJiYgKGVsLmhvc3QgPT09IGNoZWNrICYmICghZWwuYWN0aXZlRWxlbWVudCB8fCBib3VuZGFyeS5jb250YWlucyhlbC5hY3RpdmVFbGVtZW50KSkgfHwgZWwucGFyZW50Tm9kZSAmJiBjaGVja0luSG9zdChjaGVjaywgZWwucGFyZW50Tm9kZSwgYm91bmRhcnkpKTtcbn07XG52YXIgd2l0aGluSG9zdCA9IGZ1bmN0aW9uIHdpdGhpbkhvc3QoYWN0aXZlRWxlbWVudCwgd29ya2luZ0FyZWEpIHtcbiAgcmV0dXJuIHdvcmtpbmdBcmVhLnNvbWUoZnVuY3Rpb24gKGFyZWEpIHtcbiAgICByZXR1cm4gY2hlY2tJbkhvc3QoYWN0aXZlRWxlbWVudCwgYXJlYSwgYXJlYSk7XG4gIH0pO1xufTtcbnZhciBnZXROb2RlRm9jdXNhYmxlcyA9IGZ1bmN0aW9uIGdldE5vZGVGb2N1c2FibGVzKG5vZGVzKSB7XG4gIHJldHVybiBnZXRGb2N1c2FibGVOb2Rlcyhub2RlcywgbmV3IE1hcCgpKTtcbn07XG52YXIgaXNOb3RGb2N1c2FibGUgPSBmdW5jdGlvbiBpc05vdEZvY3VzYWJsZShub2RlKSB7XG4gIHJldHVybiAhZ2V0Tm9kZUZvY3VzYWJsZXMoW25vZGUucGFyZW50Tm9kZV0pLnNvbWUoZnVuY3Rpb24gKGVsKSB7XG4gICAgcmV0dXJuIGVsLm5vZGUgPT09IG5vZGU7XG4gIH0pO1xufTtcbnZhciBhY3RpdmF0ZVRyYXAgPSBmdW5jdGlvbiBhY3RpdmF0ZVRyYXAoKSB7XG4gIHZhciByZXN1bHQgPSBmYWxzZTtcbiAgaWYgKGxhc3RBY3RpdmVUcmFwKSB7XG4gICAgdmFyIF9sYXN0QWN0aXZlVHJhcCA9IGxhc3RBY3RpdmVUcmFwLFxuICAgICAgb2JzZXJ2ZWQgPSBfbGFzdEFjdGl2ZVRyYXAub2JzZXJ2ZWQsXG4gICAgICBwZXJzaXN0ZW50Rm9jdXMgPSBfbGFzdEFjdGl2ZVRyYXAucGVyc2lzdGVudEZvY3VzLFxuICAgICAgYXV0b0ZvY3VzID0gX2xhc3RBY3RpdmVUcmFwLmF1dG9Gb2N1cyxcbiAgICAgIHNoYXJkcyA9IF9sYXN0QWN0aXZlVHJhcC5zaGFyZHMsXG4gICAgICBjcm9zc0ZyYW1lID0gX2xhc3RBY3RpdmVUcmFwLmNyb3NzRnJhbWUsXG4gICAgICBmb2N1c09wdGlvbnMgPSBfbGFzdEFjdGl2ZVRyYXAuZm9jdXNPcHRpb25zLFxuICAgICAgbm9Gb2N1c0d1YXJkcyA9IF9sYXN0QWN0aXZlVHJhcC5ub0ZvY3VzR3VhcmRzO1xuICAgIHZhciB3b3JraW5nTm9kZSA9IG9ic2VydmVkIHx8IGxhc3RQb3J0YWxlZEVsZW1lbnQgJiYgbGFzdFBvcnRhbGVkRWxlbWVudC5wb3J0YWxlZEVsZW1lbnQ7XG4gICAgaWYgKGZvY3VzT25Cb2R5KCkgJiYgbGFzdEFjdGl2ZUZvY3VzICYmIGxhc3RBY3RpdmVGb2N1cyAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGxhc3RBY3RpdmVGb2N1cykgfHwgaXNOb3RGb2N1c2FibGUobGFzdEFjdGl2ZUZvY3VzKSkge1xuICAgICAgICB2YXIgbmV3VGFyZ2V0ID0gdHJ5UmVzdG9yZUZvY3VzKCk7XG4gICAgICAgIGlmIChuZXdUYXJnZXQpIHtcbiAgICAgICAgICBuZXdUYXJnZXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKHdvcmtpbmdOb2RlKSB7XG4gICAgICB2YXIgd29ya2luZ0FyZWEgPSBbd29ya2luZ05vZGVdLmNvbmNhdChzaGFyZHMubWFwKGV4dHJhY3RSZWYpLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICB2YXIgc2hvdWxkRm9yY2VSZXN0b3JlRm9jdXMgPSBmdW5jdGlvbiBzaG91bGRGb3JjZVJlc3RvcmVGb2N1cygpIHtcbiAgICAgICAgaWYgKCFmb2N1c1dhc091dHNpZGUoY3Jvc3NGcmFtZSkgfHwgIW5vRm9jdXNHdWFyZHMgfHwgIWxhc3RBY3RpdmVGb2N1cyB8fCB3aW5kb3dGb2N1c2VkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBub2RlcyA9IGdldE5vZGVGb2N1c2FibGVzKHdvcmtpbmdBcmVhKTtcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IG5vZGVzLmZpbmRJbmRleChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgIHZhciBub2RlID0gX3JlZi5ub2RlO1xuICAgICAgICAgIHJldHVybiBub2RlID09PSBsYXN0QWN0aXZlRm9jdXM7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbGFzdEluZGV4ID09PSAwIHx8IGxhc3RJbmRleCA9PT0gbm9kZXMubGVuZ3RoIC0gMTtcbiAgICAgIH07XG4gICAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgZm9jdXNXaGl0ZWxpc3RlZChhY3RpdmVFbGVtZW50KSkge1xuICAgICAgICBpZiAocGVyc2lzdGVudEZvY3VzIHx8IHNob3VsZEZvcmNlUmVzdG9yZUZvY3VzKCkgfHwgIWlzRnJlZUZvY3VzKCkgfHwgIWxhc3RBY3RpdmVGb2N1cyAmJiBhdXRvRm9jdXMpIHtcbiAgICAgICAgICBpZiAod29ya2luZ05vZGUgJiYgIShmb2N1c0luc2lkZSh3b3JraW5nQXJlYSkgfHwgYWN0aXZlRWxlbWVudCAmJiB3aXRoaW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdBcmVhKSB8fCBmb2N1c0lzUG9ydGFsZWRQYWlyKGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdOb2RlKSkpIHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudCAmJiAhbGFzdEFjdGl2ZUZvY3VzICYmIGFjdGl2ZUVsZW1lbnQgJiYgIWF1dG9Gb2N1cykge1xuICAgICAgICAgICAgICBpZiAoYWN0aXZlRWxlbWVudC5ibHVyKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzdWx0ID0gbW92ZUZvY3VzSW5zaWRlKHdvcmtpbmdBcmVhLCBsYXN0QWN0aXZlRm9jdXMsIHtcbiAgICAgICAgICAgICAgICBmb2N1c09wdGlvbnM6IGZvY3VzT3B0aW9uc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgbGFzdFBvcnRhbGVkRWxlbWVudCA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBsYXN0QWN0aXZlRm9jdXMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgIGlmIChsYXN0QWN0aXZlRm9jdXMgIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgICAgIHRyeVJlc3RvcmVGb2N1cyA9IGNhcHR1cmVGb2N1c1Jlc3RvcmUobGFzdEFjdGl2ZUZvY3VzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9jdXNXYXNPdXRzaWRlV2luZG93ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkb2N1bWVudCAmJiBhY3RpdmVFbGVtZW50ICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZvY3VzLWF1dG8tZ3VhcmRdJykpIHtcbiAgICAgICAgdmFyIG5ld0FjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICB2YXIgYWxsTm9kZXMgPSBleHBhbmRGb2N1c2FibGVOb2Rlcyh3b3JraW5nQXJlYSk7XG4gICAgICAgIHZhciBmb2N1c2VkSW5kZXggPSBhbGxOb2Rlcy5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSBfcmVmMi5ub2RlO1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9KS5pbmRleE9mKG5ld0FjdGl2ZUVsZW1lbnQpO1xuICAgICAgICBpZiAoZm9jdXNlZEluZGV4ID4gLTEpIHtcbiAgICAgICAgICBhbGxOb2Rlcy5maWx0ZXIoZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgICAgICB2YXIgZ3VhcmQgPSBfcmVmMy5ndWFyZCxcbiAgICAgICAgICAgICAgbm9kZSA9IF9yZWYzLm5vZGU7XG4gICAgICAgICAgICByZXR1cm4gZ3VhcmQgJiYgbm9kZS5kYXRhc2V0LmZvY3VzQXV0b0d1YXJkO1xuICAgICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IF9yZWY0Lm5vZGU7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3RhYkluZGV4Jyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXV0b0d1YXJkKGZvY3VzZWRJbmRleCwgYWxsTm9kZXMubGVuZ3RoLCArMSwgYWxsTm9kZXMpO1xuICAgICAgICAgIGF1dG9HdWFyZChmb2N1c2VkSW5kZXgsIC0xLCAtMSwgYWxsTm9kZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xudmFyIG9uVHJhcCA9IGZ1bmN0aW9uIG9uVHJhcChldmVudCkge1xuICBpZiAoYWN0aXZhdGVUcmFwKCkgJiYgZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IGZ1bmN0aW9uIG9uQmx1cigpIHtcbiAgcmV0dXJuIGRlZmVyQWN0aW9uKGFjdGl2YXRlVHJhcCk7XG59O1xudmFyIG9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKGV2ZW50KSB7XG4gIHZhciBzb3VyY2UgPSBldmVudC50YXJnZXQ7XG4gIHZhciBjdXJyZW50Tm9kZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gIGlmICghY3VycmVudE5vZGUuY29udGFpbnMoc291cmNlKSkge1xuICAgIHJlY29yZFBvcnRhbChjdXJyZW50Tm9kZSwgc291cmNlKTtcbiAgfVxufTtcbnZhciBGb2N1c1dhdGNoZXIgPSBmdW5jdGlvbiBGb2N1c1dhdGNoZXIoKSB7XG4gIHJldHVybiBudWxsO1xufTtcbnZhciBGb2N1c1RyYXAgPSBmdW5jdGlvbiBGb2N1c1RyYXAoX3JlZjUpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjUuY2hpbGRyZW47XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25Gb2N1czogb25Gb2N1c1xuICB9LCBjaGlsZHJlbik7XG59O1xuRm9jdXNUcmFwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRcbn0gOiB7fTtcbnZhciBvbldpbmRvd0ZvY3VzID0gZnVuY3Rpb24gb25XaW5kb3dGb2N1cygpIHtcbiAgd2luZG93Rm9jdXNlZCA9IHRydWU7XG59O1xudmFyIG9uV2luZG93Qmx1ciA9IGZ1bmN0aW9uIG9uV2luZG93Qmx1cigpIHtcbiAgd2luZG93Rm9jdXNlZCA9IGZhbHNlO1xuICBmb2N1c1dhc091dHNpZGVXaW5kb3cgPSAnanVzdCc7XG4gIGRlZmVyQWN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICBmb2N1c1dhc091dHNpZGVXaW5kb3cgPSAnbWVhbndoaWxlJztcbiAgfSk7XG59O1xudmFyIGF0dGFjaEhhbmRsZXIgPSBmdW5jdGlvbiBhdHRhY2hIYW5kbGVyKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgb25UcmFwKTtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBvbkJsdXIpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbldpbmRvd0ZvY3VzKTtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbldpbmRvd0JsdXIpO1xufTtcbnZhciBkZXRhY2hIYW5kbGVyID0gZnVuY3Rpb24gZGV0YWNoSGFuZGxlcigpIHtcbiAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIG9uVHJhcCk7XG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0Jywgb25CbHVyKTtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgb25XaW5kb3dGb2N1cyk7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgb25XaW5kb3dCbHVyKTtcbn07XG5mdW5jdGlvbiByZWR1Y2VQcm9wc1RvU3RhdGUocHJvcHNMaXN0KSB7XG4gIHJldHVybiBwcm9wc0xpc3QuZmlsdGVyKGZ1bmN0aW9uIChfcmVmNikge1xuICAgIHZhciBkaXNhYmxlZCA9IF9yZWY2LmRpc2FibGVkO1xuICAgIHJldHVybiAhZGlzYWJsZWQ7XG4gIH0pO1xufVxudmFyIGZvY3VzTG9ja0FQSSA9IHtcbiAgbW92ZUZvY3VzSW5zaWRlOiBtb3ZlRm9jdXNJbnNpZGUsXG4gIGZvY3VzSW5zaWRlOiBmb2N1c0luc2lkZSxcbiAgZm9jdXNOZXh0RWxlbWVudDogZm9jdXNOZXh0RWxlbWVudCxcbiAgZm9jdXNQcmV2RWxlbWVudDogZm9jdXNQcmV2RWxlbWVudCxcbiAgZm9jdXNGaXJzdEVsZW1lbnQ6IGZvY3VzRmlyc3RFbGVtZW50LFxuICBmb2N1c0xhc3RFbGVtZW50OiBmb2N1c0xhc3RFbGVtZW50LFxuICBjYXB0dXJlRm9jdXNSZXN0b3JlOiBjYXB0dXJlRm9jdXNSZXN0b3JlXG59O1xuZnVuY3Rpb24gaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCh0cmFwcykge1xuICB2YXIgdHJhcCA9IHRyYXBzLnNsaWNlKC0xKVswXTtcbiAgaWYgKHRyYXAgJiYgIWxhc3RBY3RpdmVUcmFwKSB7XG4gICAgYXR0YWNoSGFuZGxlcigpO1xuICB9XG4gIHZhciBsYXN0VHJhcCA9IGxhc3RBY3RpdmVUcmFwO1xuICB2YXIgc2FtZVRyYXAgPSBsYXN0VHJhcCAmJiB0cmFwICYmIHRyYXAuaWQgPT09IGxhc3RUcmFwLmlkO1xuICBsYXN0QWN0aXZlVHJhcCA9IHRyYXA7XG4gIGlmIChsYXN0VHJhcCAmJiAhc2FtZVRyYXApIHtcbiAgICBsYXN0VHJhcC5vbkRlYWN0aXZhdGlvbigpO1xuICAgIGlmICghdHJhcHMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmNykge1xuICAgICAgdmFyIGlkID0gX3JlZjcuaWQ7XG4gICAgICByZXR1cm4gaWQgPT09IGxhc3RUcmFwLmlkO1xuICAgIH0pLmxlbmd0aCkge1xuICAgICAgbGFzdFRyYXAucmV0dXJuRm9jdXMoIXRyYXApO1xuICAgIH1cbiAgfVxuICBpZiAodHJhcCkge1xuICAgIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG4gICAgaWYgKCFzYW1lVHJhcCB8fCBsYXN0VHJhcC5vYnNlcnZlZCAhPT0gdHJhcC5vYnNlcnZlZCkge1xuICAgICAgdHJhcC5vbkFjdGl2YXRpb24oZm9jdXNMb2NrQVBJKTtcbiAgICB9XG4gICAgYWN0aXZhdGVUcmFwKHRydWUpO1xuICAgIGRlZmVyQWN0aW9uKGFjdGl2YXRlVHJhcCk7XG4gIH0gZWxzZSB7XG4gICAgZGV0YWNoSGFuZGxlcigpO1xuICAgIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG4gIH1cbn1cbm1lZGl1bUZvY3VzLmFzc2lnblN5bmNNZWRpdW0ob25Gb2N1cyk7XG5tZWRpdW1CbHVyLmFzc2lnbk1lZGl1bShvbkJsdXIpO1xubWVkaXVtRWZmZWN0LmFzc2lnbk1lZGl1bShmdW5jdGlvbiAoY2IpIHtcbiAgcmV0dXJuIGNiKGZvY3VzTG9ja0FQSSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IHdpdGhTaWRlRWZmZWN0KHJlZHVjZVByb3BzVG9TdGF0ZSwgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCkoRm9jdXNXYXRjaGVyKTsiLCAiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7XG4gIH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbmV4cG9ydCB7IF9zZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2UodCwgbykge1xuICB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoby5wcm90b3R5cGUpLCB0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHQsIHNldFByb3RvdHlwZU9mKHQsIG8pO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzTG9vc2UgYXMgZGVmYXVsdCB9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufVxuZXhwb3J0IHsgX3R5cGVvZiBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiO1xufVxuZXhwb3J0IHsgdG9Qcm9wZXJ0eUtleSBhcyBkZWZhdWx0IH07IiwgImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7XG4gIHJldHVybiAociA9IHRvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xuICAgIHZhbHVlOiB0LFxuICAgIGVudW1lcmFibGU6ICEwLFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgd3JpdGFibGU6ICEwXG4gIH0pIDogZVtyXSA9IHQsIGU7XG59XG5leHBvcnQgeyBfZGVmaW5lUHJvcGVydHkgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSc7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5JztcbmltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiB3aXRoU2lkZUVmZmVjdChyZWR1Y2VQcm9wc1RvU3RhdGUsIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGlmICh0eXBlb2YgcmVkdWNlUHJvcHNUb1N0YXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHJlZHVjZVByb3BzVG9TdGF0ZSB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50IHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoV3JhcHBlZENvbXBvbmVudCkge1xuICAgIHJldHVybiBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKFdyYXBwZWRDb21wb25lbnQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBpZiAodHlwZW9mIFdyYXBwZWRDb21wb25lbnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBXcmFwcGVkQ29tcG9uZW50IHRvIGJlIGEgUmVhY3QgY29tcG9uZW50LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBtb3VudGVkSW5zdGFuY2VzID0gW107XG4gICAgdmFyIHN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZW1pdENoYW5nZSgpIHtcbiAgICAgIHN0YXRlID0gcmVkdWNlUHJvcHNUb1N0YXRlKG1vdW50ZWRJbnN0YW5jZXMubWFwKGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UucHJvcHM7XG4gICAgICB9KSk7XG4gICAgICBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50KHN0YXRlKTtcbiAgICB9XG5cbiAgICB2YXIgU2lkZUVmZmVjdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgICAgIF9pbmhlcml0c0xvb3NlKFNpZGVFZmZlY3QsIF9QdXJlQ29tcG9uZW50KTtcblxuICAgICAgZnVuY3Rpb24gU2lkZUVmZmVjdCgpIHtcbiAgICAgICAgcmV0dXJuIF9QdXJlQ29tcG9uZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gVHJ5IHRvIHVzZSBkaXNwbGF5TmFtZSBvZiB3cmFwcGVkIGNvbXBvbmVudFxuICAgICAgU2lkZUVmZmVjdC5wZWVrID0gZnVuY3Rpb24gcGVlaygpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfTtcblxuICAgICAgdmFyIF9wcm90byA9IFNpZGVFZmZlY3QucHJvdG90eXBlO1xuXG4gICAgICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgbW91bnRlZEluc3RhbmNlcy5wdXNoKHRoaXMpO1xuICAgICAgICBlbWl0Q2hhbmdlKCk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgICBlbWl0Q2hhbmdlKCk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gbW91bnRlZEluc3RhbmNlcy5pbmRleE9mKHRoaXMpO1xuICAgICAgICBtb3VudGVkSW5zdGFuY2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCB0aGlzLnByb3BzKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBTaWRlRWZmZWN0O1xuICAgIH0oUHVyZUNvbXBvbmVudCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoU2lkZUVmZmVjdCwgXCJkaXNwbGF5TmFtZVwiLCBcIlNpZGVFZmZlY3QoXCIgKyBnZXREaXNwbGF5TmFtZShXcmFwcGVkQ29tcG9uZW50KSArIFwiKVwiKTtcblxuICAgIHJldHVybiBTaWRlRWZmZWN0O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU2lkZUVmZmVjdDtcbiIsICIvKlxuSUUxMSBzdXBwb3J0XG4gKi9cbmV4cG9ydCB2YXIgdG9BcnJheSA9IGZ1bmN0aW9uIChhKSB7XG4gICAgdmFyIHJldCA9IEFycmF5KGEubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcmV0W2ldID0gYVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG5leHBvcnQgdmFyIGFzQXJyYXkgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gKEFycmF5LmlzQXJyYXkoYSkgPyBhIDogW2FdKTsgfTtcbmV4cG9ydCB2YXIgZ2V0Rmlyc3QgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gKEFycmF5LmlzQXJyYXkoYSkgPyBhWzBdIDogYSk7IH07XG4iLCAiaW1wb3J0IHsgRk9DVVNfTk9fQVVUT0ZPQ1VTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbnZhciBpc0VsZW1lbnRIaWRkZW4gPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIHdlIGNhbiBtZWFzdXJlIG9ubHkgXCJlbGVtZW50c1wiXG4gICAgLy8gY29uc2lkZXIgb3RoZXJzIGFzIFwidmlzaWJsZVwiXG4gICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKTtcbiAgICBpZiAoIWNvbXB1dGVkU3R5bGUgfHwgIWNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdkaXNwbGF5JykgPT09ICdub25lJyB8fCBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3Zpc2liaWxpdHknKSA9PT0gJ2hpZGRlbicpO1xufTtcbnZhciBnZXRQYXJlbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAvLyBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIGNhbiBhbHNvIHBvaW50IG9uIFNoYWRvd1Jvb3QuIEluIHRoaXMgY2FzZSAuaG9zdCB3aWxsIHBvaW50IG9uIHRoZSBuZXh0IG5vZGVcbiAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlICYmIG5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFXG4gICAgICAgID8gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5ob3N0XG4gICAgICAgIDogbm9kZS5wYXJlbnROb2RlO1xufTtcbnZhciBpc1RvcE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbm9kZSA9PT0gZG9jdW1lbnQgfHwgKG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFKTtcbn07XG52YXIgaXNJbmVydCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLmhhc0F0dHJpYnV0ZSgnaW5lcnQnKTsgfTtcbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGVzdGluZy1saWJyYXJ5L2plc3QtZG9tL2Jsb2IvbWFpbi9zcmMvdG8tYmUtdmlzaWJsZS5qc1xuICovXG52YXIgaXNWaXNpYmxlVW5jYWNoZWQgPSBmdW5jdGlvbiAobm9kZSwgY2hlY2tQYXJlbnQpIHtcbiAgICByZXR1cm4gIW5vZGUgfHwgaXNUb3BOb2RlKG5vZGUpIHx8ICghaXNFbGVtZW50SGlkZGVuKG5vZGUpICYmICFpc0luZXJ0KG5vZGUpICYmIGNoZWNrUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpKTtcbn07XG5leHBvcnQgdmFyIGlzVmlzaWJsZUNhY2hlZCA9IGZ1bmN0aW9uICh2aXNpYmlsaXR5Q2FjaGUsIG5vZGUpIHtcbiAgICB2YXIgY2FjaGVkID0gdmlzaWJpbGl0eUNhY2hlLmdldChub2RlKTtcbiAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGlzVmlzaWJsZVVuY2FjaGVkKG5vZGUsIGlzVmlzaWJsZUNhY2hlZC5iaW5kKHVuZGVmaW5lZCwgdmlzaWJpbGl0eUNhY2hlKSk7XG4gICAgdmlzaWJpbGl0eUNhY2hlLnNldChub2RlLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIGlzQXV0b0ZvY3VzQWxsb3dlZFVuY2FjaGVkID0gZnVuY3Rpb24gKG5vZGUsIGNoZWNrUGFyZW50KSB7XG4gICAgcmV0dXJuIG5vZGUgJiYgIWlzVG9wTm9kZShub2RlKSA/IChpc0F1dG9Gb2N1c0FsbG93ZWQobm9kZSkgPyBjaGVja1BhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKSA6IGZhbHNlKSA6IHRydWU7XG59O1xuZXhwb3J0IHZhciBpc0F1dG9Gb2N1c0FsbG93ZWRDYWNoZWQgPSBmdW5jdGlvbiAoY2FjaGUsIG5vZGUpIHtcbiAgICB2YXIgY2FjaGVkID0gY2FjaGUuZ2V0KG5vZGUpO1xuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gaXNBdXRvRm9jdXNBbGxvd2VkVW5jYWNoZWQobm9kZSwgaXNBdXRvRm9jdXNBbGxvd2VkQ2FjaGVkLmJpbmQodW5kZWZpbmVkLCBjYWNoZSkpO1xuICAgIGNhY2hlLnNldChub2RlLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuZXhwb3J0IHZhciBnZXREYXRhc2V0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5vZGUuZGF0YXNldDtcbn07XG5leHBvcnQgdmFyIGlzSFRNTEJ1dHRvbkVsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZS50YWdOYW1lID09PSAnQlVUVE9OJzsgfTtcbmV4cG9ydCB2YXIgaXNIVE1MSW5wdXRFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ0lOUFVUJzsgfTtcbmV4cG9ydCB2YXIgaXNSYWRpb0VsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkgJiYgbm9kZS50eXBlID09PSAncmFkaW8nO1xufTtcbmV4cG9ydCB2YXIgbm90SGlkZGVuSW5wdXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiAhKChpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkgfHwgaXNIVE1MQnV0dG9uRWxlbWVudChub2RlKSkgJiYgKG5vZGUudHlwZSA9PT0gJ2hpZGRlbicgfHwgbm9kZS5kaXNhYmxlZCkpO1xufTtcbmV4cG9ydCB2YXIgaXNBdXRvRm9jdXNBbGxvd2VkID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgYXR0cmlidXRlID0gbm9kZS5nZXRBdHRyaWJ1dGUoRk9DVVNfTk9fQVVUT0ZPQ1VTKTtcbiAgICByZXR1cm4gIVt0cnVlLCAndHJ1ZScsICcnXS5pbmNsdWRlcyhhdHRyaWJ1dGUpO1xufTtcbmV4cG9ydCB2YXIgaXNHdWFyZCA9IGZ1bmN0aW9uIChub2RlKSB7IHZhciBfYTsgcmV0dXJuIEJvb2xlYW4obm9kZSAmJiAoKF9hID0gZ2V0RGF0YXNldChub2RlKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzR3VhcmQpKTsgfTtcbmV4cG9ydCB2YXIgaXNOb3RBR3VhcmQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gIWlzR3VhcmQobm9kZSk7IH07XG5leHBvcnQgdmFyIGlzRGVmaW5lZCA9IGZ1bmN0aW9uICh4KSB7IHJldHVybiBCb29sZWFuKHgpOyB9O1xuIiwgImltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbmV4cG9ydCB2YXIgdGFiU29ydCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgdmFyIGFUYWIgPSBNYXRoLm1heCgwLCBhLnRhYkluZGV4KTtcbiAgICB2YXIgYlRhYiA9IE1hdGgubWF4KDAsIGIudGFiSW5kZXgpO1xuICAgIHZhciB0YWJEaWZmID0gYVRhYiAtIGJUYWI7XG4gICAgdmFyIGluZGV4RGlmZiA9IGEuaW5kZXggLSBiLmluZGV4O1xuICAgIGlmICh0YWJEaWZmKSB7XG4gICAgICAgIGlmICghYVRhYikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFiVGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhYkRpZmYgfHwgaW5kZXhEaWZmO1xufTtcbnZhciBnZXRUYWJJbmRleCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKG5vZGUudGFiSW5kZXggPCAwKSB7XG4gICAgICAgIC8vIGFsbCBcImZvY3VzYWJsZVwiIGVsZW1lbnRzIGFyZSBhbHJlYWR5IHByZXNlbGVjdGVkXG4gICAgICAgIC8vIGJ1dCBzb21lIG1pZ2h0IGhhdmUgaW1wbGljaXQgbmVnYXRpdmUgdGFiSW5kZXhcbiAgICAgICAgLy8gcmV0dXJuIDAgZm9yIDxhdWRpbyB3aXRob3V0IHRhYkluZGV4IGF0dHJpYnV0ZSAtIGl0IGlzIFwidGFiYmFibGVcIlxuICAgICAgICBpZiAoIW5vZGUuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZS50YWJJbmRleDtcbn07XG5leHBvcnQgdmFyIG9yZGVyQnlUYWJJbmRleCA9IGZ1bmN0aW9uIChub2RlcywgZmlsdGVyTmVnYXRpdmUsIGtlZXBHdWFyZHMpIHtcbiAgICByZXR1cm4gdG9BcnJheShub2RlcylcbiAgICAgICAgLm1hcChmdW5jdGlvbiAobm9kZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIHRhYkluZGV4ID0gZ2V0VGFiSW5kZXgobm9kZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgdGFiSW5kZXg6IGtlZXBHdWFyZHMgJiYgdGFiSW5kZXggPT09IC0xID8gKChub2RlLmRhdGFzZXQgfHwge30pLmZvY3VzR3VhcmQgPyAwIDogLTEpIDogdGFiSW5kZXgsXG4gICAgICAgIH07XG4gICAgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gIWZpbHRlck5lZ2F0aXZlIHx8IGRhdGEudGFiSW5kZXggPj0gMDsgfSlcbiAgICAgICAgLnNvcnQodGFiU29ydCk7XG59O1xuIiwgIi8qKlxuICogbGlzdCBvZiB0aGUgb2JqZWN0IHRvIGJlIGNvbnNpZGVyZWQgYXMgZm9jdXNhYmxlXG4gKi9cbmV4cG9ydCB2YXIgdGFiYmFibGVzID0gW1xuICAgICdidXR0b246ZW5hYmxlZCcsXG4gICAgJ3NlbGVjdDplbmFibGVkJyxcbiAgICAndGV4dGFyZWE6ZW5hYmxlZCcsXG4gICAgJ2lucHV0OmVuYWJsZWQnLFxuICAgIC8vIGVsZW1lbnRzIHdpdGggZXhwbGljaXQgcm9sZXMgd2lsbCBhbHNvIHVzZSBleHBsaWNpdCB0YWJpbmRleFxuICAgIC8vICdbcm9sZT1cImJ1dHRvblwiXScsXG4gICAgJ2FbaHJlZl0nLFxuICAgICdhcmVhW2hyZWZdJyxcbiAgICAnc3VtbWFyeScsXG4gICAgJ2lmcmFtZScsXG4gICAgJ29iamVjdCcsXG4gICAgJ2VtYmVkJyxcbiAgICAnYXVkaW9bY29udHJvbHNdJyxcbiAgICAndmlkZW9bY29udHJvbHNdJyxcbiAgICAnW3RhYmluZGV4XScsXG4gICAgJ1tjb250ZW50ZWRpdGFibGVdJyxcbiAgICAnW2F1dG9mb2N1c10nLFxuXTtcbiIsICJpbXBvcnQgeyBGT0NVU19BVVRPIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbmltcG9ydCB7IHRhYmJhYmxlcyB9IGZyb20gJy4vdGFiYmFibGVzJztcbnZhciBxdWVyeVRhYmJhYmxlcyA9IHRhYmJhYmxlcy5qb2luKCcsJyk7XG52YXIgcXVlcnlHdWFyZFRhYmJhYmxlcyA9IFwiXCIuY29uY2F0KHF1ZXJ5VGFiYmFibGVzLCBcIiwgW2RhdGEtZm9jdXMtZ3VhcmRdXCIpO1xudmFyIGdldEZvY3VzYWJsZXNXaXRoU2hhZG93RG9tID0gZnVuY3Rpb24gKHBhcmVudCwgd2l0aEd1YXJkcykge1xuICAgIHJldHVybiB0b0FycmF5KChwYXJlbnQuc2hhZG93Um9vdCB8fCBwYXJlbnQpLmNoaWxkcmVuKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoY2hpbGQubWF0Y2hlcyh3aXRoR3VhcmRzID8gcXVlcnlHdWFyZFRhYmJhYmxlcyA6IHF1ZXJ5VGFiYmFibGVzKSA/IFtjaGlsZF0gOiBbXSwgZ2V0Rm9jdXNhYmxlc1dpdGhTaGFkb3dEb20oY2hpbGQpKTtcbiAgICB9LCBbXSk7XG59O1xudmFyIGdldEZvY3VzYWJsZXNXaXRoSUZyYW1lID0gZnVuY3Rpb24gKHBhcmVudCwgd2l0aEd1YXJkcykge1xuICAgIHZhciBfYTtcbiAgICAvLyBjb250ZW50RG9jdW1lbnQgb2YgaWZyYW1lIHdpbGwgYmUgbnVsbCBpZiBjdXJyZW50IG9yaWdpbiBjYW5ub3QgYWNjZXNzIGl0XG4gICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50ICYmICgoX2EgPSBwYXJlbnQuY29udGVudERvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYm9keSkpIHtcbiAgICAgICAgcmV0dXJuIGdldEZvY3VzYWJsZXMoW3BhcmVudC5jb250ZW50RG9jdW1lbnQuYm9keV0sIHdpdGhHdWFyZHMpO1xuICAgIH1cbiAgICByZXR1cm4gW3BhcmVudF07XG59O1xuZXhwb3J0IHZhciBnZXRGb2N1c2FibGVzID0gZnVuY3Rpb24gKHBhcmVudHMsIHdpdGhHdWFyZHMpIHtcbiAgICByZXR1cm4gcGFyZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGFyZW50KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIGZvY3VzYWJsZVdpdGhTaGFkb3dEb20gPSBnZXRGb2N1c2FibGVzV2l0aFNoYWRvd0RvbShwYXJlbnQsIHdpdGhHdWFyZHMpO1xuICAgICAgICB2YXIgZm9jdXNhYmxlV2l0aElmcmFtZXMgPSAoX2EgPSBbXSkuY29uY2F0LmFwcGx5KF9hLCBmb2N1c2FibGVXaXRoU2hhZG93RG9tLm1hcChmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZ2V0Rm9jdXNhYmxlc1dpdGhJRnJhbWUobm9kZSwgd2l0aEd1YXJkcyk7IH0pKTtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoXG4gICAgICAgIC8vIGFkZCBhbGwgdGFiYmFibGVzIGluc2lkZSBhbmQgd2l0aGluIHNoYWRvdyBET01zIGluIERPTSBvcmRlclxuICAgICAgICBmb2N1c2FibGVXaXRoSWZyYW1lcywgXG4gICAgICAgIC8vIGFkZCBpZiBub2RlIGlzIHRhYmJhYmxlIGl0c2VsZlxuICAgICAgICBwYXJlbnQucGFyZW50Tm9kZVxuICAgICAgICAgICAgPyB0b0FycmF5KHBhcmVudC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnlUYWJiYWJsZXMpKS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUgPT09IHBhcmVudDsgfSlcbiAgICAgICAgICAgIDogW10pO1xuICAgIH0sIFtdKTtcbn07XG4vKipcbiAqIHJldHVybiBhIGxpc3Qgb2YgZm9jdXNhYmxlIG5vZGVzIHdpdGhpbiBhbiBhcmVhIG1hcmtlZCBhcyBcImF1dG8tZm9jdXNhYmxlXCJcbiAqIEBwYXJhbSBwYXJlbnRcbiAqL1xuZXhwb3J0IHZhciBnZXRQYXJlbnRBdXRvZm9jdXNhYmxlcyA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICB2YXIgcGFyZW50Rm9jdXMgPSBwYXJlbnQucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfQVVUTywgXCJdXCIpKTtcbiAgICByZXR1cm4gdG9BcnJheShwYXJlbnRGb2N1cylcbiAgICAgICAgLm1hcChmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZ2V0Rm9jdXNhYmxlcyhbbm9kZV0pOyB9KVxuICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5vZGVzKSB7IHJldHVybiBhY2MuY29uY2F0KG5vZGVzKTsgfSwgW10pO1xufTtcbiIsICJpbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG5pbXBvcnQgeyBpc0F1dG9Gb2N1c0FsbG93ZWRDYWNoZWQsIGlzVmlzaWJsZUNhY2hlZCwgbm90SGlkZGVuSW5wdXQgfSBmcm9tICcuL2lzJztcbmltcG9ydCB7IG9yZGVyQnlUYWJJbmRleCB9IGZyb20gJy4vdGFiT3JkZXInO1xuaW1wb3J0IHsgZ2V0Rm9jdXNhYmxlcywgZ2V0UGFyZW50QXV0b2ZvY3VzYWJsZXMgfSBmcm9tICcuL3RhYlV0aWxzJztcbi8qKlxuICogZ2l2ZW4gbGlzdCBvZiBmb2N1c2FibGUgZWxlbWVudHMga2VlcHMgdGhlIG9uZXMgdXNlciBjYW4gaW50ZXJhY3Qgd2l0aFxuICogQHBhcmFtIG5vZGVzXG4gKiBAcGFyYW0gdmlzaWJpbGl0eUNhY2hlXG4gKi9cbmV4cG9ydCB2YXIgZmlsdGVyRm9jdXNhYmxlID0gZnVuY3Rpb24gKG5vZGVzLCB2aXNpYmlsaXR5Q2FjaGUpIHtcbiAgICByZXR1cm4gdG9BcnJheShub2RlcylcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gaXNWaXNpYmxlQ2FjaGVkKHZpc2liaWxpdHlDYWNoZSwgbm9kZSk7IH0pXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vdEhpZGRlbklucHV0KG5vZGUpOyB9KTtcbn07XG5leHBvcnQgdmFyIGZpbHRlckF1dG9Gb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZXMsIGNhY2hlKSB7XG4gICAgaWYgKGNhY2hlID09PSB2b2lkIDApIHsgY2FjaGUgPSBuZXcgTWFwKCk7IH1cbiAgICByZXR1cm4gdG9BcnJheShub2RlcykuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBpc0F1dG9Gb2N1c0FsbG93ZWRDYWNoZWQoY2FjaGUsIG5vZGUpOyB9KTtcbn07XG4vKipcbiAqICFfX1dBUk5JTkdfXyEgTG93IGxldmVsIEFQSS5cbiAqIEByZXR1cm5zIGFsbCB0YWJiYWJsZSBub2Rlc1xuICpcbiAqIEBzZWUge0BsaW5rIGdldEZvY3VzYWJsZU5vZGVzfSB0byBnZXQgYW55IGZvY3VzYWJsZSBlbGVtZW50XG4gKlxuICogQHBhcmFtIHRvcE5vZGVzIC0gYXJyYXkgb2YgdG9wIGxldmVsIEhUTUxFbGVtZW50cyB0byBzZWFyY2ggaW5zaWRlXG4gKiBAcGFyYW0gdmlzaWJpbGl0eUNhY2hlIC0gYW4gY2FjaGUgdG8gc3RvcmUgaW50ZXJtZWRpYXRlIG1lYXN1cmVtZW50cy4gRXhwZWN0ZWQgdG8gYmUgYSBmcmVzaCBgbmV3IE1hcGAgb24gZXZlcnkgY2FsbFxuICovXG5leHBvcnQgdmFyIGdldFRhYmJhYmxlTm9kZXMgPSBmdW5jdGlvbiAodG9wTm9kZXMsIHZpc2liaWxpdHlDYWNoZSwgd2l0aEd1YXJkcykge1xuICAgIHJldHVybiBvcmRlckJ5VGFiSW5kZXgoZmlsdGVyRm9jdXNhYmxlKGdldEZvY3VzYWJsZXModG9wTm9kZXMsIHdpdGhHdWFyZHMpLCB2aXNpYmlsaXR5Q2FjaGUpLCB0cnVlLCB3aXRoR3VhcmRzKTtcbn07XG4vKipcbiAqICFfX1dBUk5JTkdfXyEgTG93IGxldmVsIEFQSS5cbiAqXG4gKiBAcmV0dXJucyBhbnl0aGluZyBcImZvY3VzYWJsZVwiLCBub3Qgb25seSB0YWJiYWJsZS4gVGhlIGRpZmZlcmVuY2UgaXMgaW4gYHRhYkluZGV4PS0xYFxuICogKHdpdGhvdXQgZ3VhcmRzLCBhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCBleHBlY3RlZCB0byBiZSBldmVyIGZvY3VzZWQpXG4gKlxuICogQHNlZSB7QGxpbmsgZ2V0VGFiYmFibGVOb2Rlc30gdG8gZ2V0IG9ubHkgdGFiYmxlIG5vZGVzIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gdG9wTm9kZXMgLSBhcnJheSBvZiB0b3AgbGV2ZWwgSFRNTEVsZW1lbnRzIHRvIHNlYXJjaCBpbnNpZGVcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGUgLSBhbiBjYWNoZSB0byBzdG9yZSBpbnRlcm1lZGlhdGUgbWVhc3VyZW1lbnRzLiBFeHBlY3RlZCB0byBiZSBhIGZyZXNoIGBuZXcgTWFwYCBvbiBldmVyeSBjYWxsXG4gKi9cbmV4cG9ydCB2YXIgZ2V0Rm9jdXNhYmxlTm9kZXMgPSBmdW5jdGlvbiAodG9wTm9kZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiBvcmRlckJ5VGFiSW5kZXgoZmlsdGVyRm9jdXNhYmxlKGdldEZvY3VzYWJsZXModG9wTm9kZXMpLCB2aXNpYmlsaXR5Q2FjaGUpLCBmYWxzZSk7XG59O1xuLyoqXG4gKiByZXR1cm4gbGlzdCBvZiBub2RlcyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gYmUgYXV0by1mb2N1c2VkXG4gKiBAcGFyYW0gdG9wTm9kZVxuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZVxuICovXG5leHBvcnQgdmFyIHBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKHRvcE5vZGUsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiBmaWx0ZXJGb2N1c2FibGUoZ2V0UGFyZW50QXV0b2ZvY3VzYWJsZXModG9wTm9kZSksIHZpc2liaWxpdHlDYWNoZSk7XG59O1xuLypcbiAqIERldGVybWluZXMgaWYgZWxlbWVudCBpcyBjb250YWluZWQgaW4gc2NvcGUsIGluY2x1ZGluZyBuZXN0ZWQgc2hhZG93IERPTXNcbiAqL1xuZXhwb3J0IHZhciBjb250YWlucyA9IGZ1bmN0aW9uIChzY29wZSwgZWxlbWVudCkge1xuICAgIGlmIChzY29wZS5zaGFkb3dSb290KSB7XG4gICAgICAgIHJldHVybiBjb250YWlucyhzY29wZS5zaGFkb3dSb290LCBlbGVtZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc2NvcGUpLmNvbnRhaW5zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihzY29wZSkuY29udGFpbnMuY2FsbChzY29wZSwgZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b0FycmF5KHNjb3BlLmNoaWxkcmVuKS5zb21lKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWZyYW1lQm9keSA9IChfYSA9IGNoaWxkLmNvbnRlbnREb2N1bWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmJvZHk7XG4gICAgICAgICAgICAgICAgaWYgKGlmcmFtZUJvZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKGlmcmFtZUJvZHksIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29udGFpbnMoY2hpbGQsIGVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuIiwgImltcG9ydCB7IEZPQ1VTX0RJU0FCTEVELCBGT0NVU19HUk9VUCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhc0FycmF5LCB0b0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG4vKipcbiAqIGluIGNhc2Ugb2YgbXVsdGlwbGUgbm9kZXMgbmVzdGVkIGluc2lkZSBlYWNoIG90aGVyXG4gKiBrZWVwcyBvbmx5IHRvcCBvbmVzXG4gKiB0aGlzIGlzIE8obmxvZ24pXG4gKiBAcGFyYW0gbm9kZXNcbiAqIEByZXR1cm5zIHsqfVxuICovXG52YXIgZmlsdGVyTmVzdGVkID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gICAgdmFyIGNvbnRhaW5lZCA9IG5ldyBTZXQoKTtcbiAgICB2YXIgbCA9IG5vZGVzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkgKz0gMSkge1xuICAgICAgICBmb3IgKHZhciBqID0gaSArIDE7IGogPCBsOyBqICs9IDEpIHtcbiAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IG5vZGVzW2ldLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5vZGVzW2pdKTtcbiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UgKi9cbiAgICAgICAgICAgIGlmICgocG9zaXRpb24gJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVkLmFkZChqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgocG9zaXRpb24gJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TKSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb250YWluZWQuYWRkKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoZnVuY3Rpb24gKF8sIGluZGV4KSB7IHJldHVybiAhY29udGFpbmVkLmhhcyhpbmRleCk7IH0pO1xufTtcbi8qKlxuICogZmluZHMgdG9wIG1vc3QgcGFyZW50IGZvciBhIG5vZGVcbiAqIEBwYXJhbSBub2RlXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xudmFyIGdldFRvcFBhcmVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZSA/IGdldFRvcFBhcmVudChub2RlLnBhcmVudE5vZGUpIDogbm9kZTtcbn07XG4vKipcbiAqIHJldHVybnMgYWxsIFwiZm9jdXMgY29udGFpbmVyc1wiIGluc2lkZSBhIGdpdmVuIG5vZGVcbiAqIEBwYXJhbSBub2RlIC0gbm9kZSBvciBub2RlcyB0byBsb29rIGluc2lkZVxuICogQHJldHVybnMgRWxlbWVudFtdXG4gKi9cbmV4cG9ydCB2YXIgZ2V0QWxsQWZmZWN0ZWROb2RlcyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIG5vZGVzID0gYXNBcnJheShub2RlKTtcbiAgICByZXR1cm4gbm9kZXMuZmlsdGVyKEJvb2xlYW4pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjdXJyZW50Tm9kZSkge1xuICAgICAgICB2YXIgZ3JvdXAgPSBjdXJyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoRk9DVVNfR1JPVVApO1xuICAgICAgICBhY2MucHVzaC5hcHBseShhY2MsIChncm91cFxuICAgICAgICAgICAgPyBmaWx0ZXJOZXN0ZWQodG9BcnJheShnZXRUb3BQYXJlbnQoY3VycmVudE5vZGUpLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbXCIuY29uY2F0KEZPQ1VTX0dST1VQLCBcIj1cXFwiXCIpLmNvbmNhdChncm91cCwgXCJcXFwiXTpub3QoW1wiKS5jb25jYXQoRk9DVVNfRElTQUJMRUQsIFwiPVxcXCJkaXNhYmxlZFxcXCJdKVwiKSkpKVxuICAgICAgICAgICAgOiBbY3VycmVudE5vZGVdKSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pO1xufTtcbiIsICJleHBvcnQgdmFyIHNhZmVQcm9iZSA9IGZ1bmN0aW9uIChjYikge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjYigpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn07XG4iLCAiLyoqXG4gKiByZXR1cm5zIGFjdGl2ZSBlbGVtZW50IGZyb20gZG9jdW1lbnQgb3IgZnJvbSBuZXN0ZWQgc2hhZG93ZG9tc1xuICovXG5pbXBvcnQgeyBzYWZlUHJvYmUgfSBmcm9tICcuL3NhZmUnO1xuLyoqXG4gKiByZXR1cm5zIGN1cnJlbnQgYWN0aXZlIGVsZW1lbnQuIElmIHRoZSBhY3RpdmUgZWxlbWVudCBpcyBhIFwiY29udGFpbmVyXCIgaXRzZWxmKHNoYWRvd1Jvb3Qgb3IgaWZyYW1lKSByZXR1cm5zIGFjdGl2ZSBlbGVtZW50IGluc2lkZSBpdFxuICogQHBhcmFtIFtpbkRvY3VtZW50XVxuICovXG5leHBvcnQgdmFyIGdldEFjdGl2ZUVsZW1lbnQgPSBmdW5jdGlvbiAoaW5Eb2N1bWVudCkge1xuICAgIGlmIChpbkRvY3VtZW50ID09PSB2b2lkIDApIHsgaW5Eb2N1bWVudCA9IGRvY3VtZW50OyB9XG4gICAgaWYgKCFpbkRvY3VtZW50IHx8ICFpbkRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBpbkRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIChhY3RpdmVFbGVtZW50LnNoYWRvd1Jvb3RcbiAgICAgICAgPyBnZXRBY3RpdmVFbGVtZW50KGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdClcbiAgICAgICAgOiBhY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgJiYgc2FmZVByb2JlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFjdGl2ZUVsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudDsgfSlcbiAgICAgICAgICAgID8gZ2V0QWN0aXZlRWxlbWVudChhY3RpdmVFbGVtZW50LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpXG4gICAgICAgICAgICA6IGFjdGl2ZUVsZW1lbnQpO1xufTtcbiIsICJpbXBvcnQgeyBjb250YWlucyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QWxsQWZmZWN0ZWROb2RlcyB9IGZyb20gJy4vdXRpbHMvYWxsLWFmZmVjdGVkJztcbmltcG9ydCB7IGdldEZpcnN0LCB0b0FycmF5IH0gZnJvbSAnLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBnZXRBY3RpdmVFbGVtZW50IH0gZnJvbSAnLi91dGlscy9nZXRBY3RpdmVFbGVtZW50JztcbnZhciBmb2N1c0luRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWUsIGFjdGl2ZUVsZW1lbnQpIHsgcmV0dXJuIGZyYW1lID09PSBhY3RpdmVFbGVtZW50OyB9O1xudmFyIGZvY3VzSW5zaWRlSWZyYW1lID0gZnVuY3Rpb24gKHRvcE5vZGUsIGFjdGl2ZUVsZW1lbnQpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0b0FycmF5KHRvcE5vZGUucXVlcnlTZWxlY3RvckFsbCgnaWZyYW1lJykpLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGZvY3VzSW5GcmFtZShub2RlLCBhY3RpdmVFbGVtZW50KTsgfSkpO1xufTtcbi8qKlxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUsIGlmIHRoZSBjdXJyZW50IGZvY3VzIGlzIGluc2lkZSBnaXZlbiBub2RlIG9yIG5vZGVzLlxuICogU3VwcG9ydHMgbm9kZXMgaGlkZGVuIGluc2lkZSBzaGFkb3dEb21cbiAqL1xuZXhwb3J0IHZhciBmb2N1c0luc2lkZSA9IGZ1bmN0aW9uICh0b3BOb2RlLCBhY3RpdmVFbGVtZW50KSB7XG4gICAgLy8gY29uc3QgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGdldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICBpZiAoYWN0aXZlRWxlbWVudCA9PT0gdm9pZCAwKSB7IGFjdGl2ZUVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KGdldEZpcnN0KHRvcE5vZGUpLm93bmVyRG9jdW1lbnQpOyB9XG4gICAgaWYgKCFhY3RpdmVFbGVtZW50IHx8IChhY3RpdmVFbGVtZW50LmRhdGFzZXQgJiYgYWN0aXZlRWxlbWVudC5kYXRhc2V0LmZvY3VzR3VhcmQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGdldEFsbEFmZmVjdGVkTm9kZXModG9wTm9kZSkuc29tZShmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gY29udGFpbnMobm9kZSwgYWN0aXZlRWxlbWVudCkgfHwgZm9jdXNJbnNpZGVJZnJhbWUobm9kZSwgYWN0aXZlRWxlbWVudCk7XG4gICAgfSk7XG59O1xuIiwgImltcG9ydCB7IEZPQ1VTX0FMTE9XIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgY29udGFpbnMgfSBmcm9tICcuL3V0aWxzL0RPTXV0aWxzJztcbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL3V0aWxzL2FycmF5JztcbmltcG9ydCB7IGdldEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQnO1xuLyoqXG4gKiBjaGVja3MgaWYgZm9jdXMgaXMgaGlkZGVuIEZST00gdGhlIGZvY3VzLWxvY2tcbiAqIGllIGNvbnRhaW5lZCBpbnNpZGUgYSBub2RlIGZvY3VzLWxvY2sgc2hhbGwgaWdub3JlXG4gKlxuICogVGhpcyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gY291cGxlZCB3aXRoIHtAbGluayBGT0NVU19BTExPV30gY29uc3RhbnRcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gZm9jdXMgaXMgY3VycmVudGx5IGlzIGluIFwiYWxsb3dcIiBhcmVhXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNJc0hpZGRlbiA9IGZ1bmN0aW9uIChpbkRvY3VtZW50KSB7XG4gICAgaWYgKGluRG9jdW1lbnQgPT09IHZvaWQgMCkgeyBpbkRvY3VtZW50ID0gZG9jdW1lbnQ7IH1cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoaW5Eb2N1bWVudCk7XG4gICAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gdGhpcyBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgRk9DVVNfQUxMT1cgd2l0aGluIHNoYWRvdyBkb21cbiAgICByZXR1cm4gdG9BcnJheShpbkRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbXCIuY29uY2F0KEZPQ1VTX0FMTE9XLCBcIl1cIikpKS5zb21lKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBjb250YWlucyhub2RlLCBhY3RpdmVFbGVtZW50KTsgfSk7XG59O1xuIiwgImltcG9ydCB7IGlzUmFkaW9FbGVtZW50IH0gZnJvbSAnLi9pcyc7XG52YXIgZmluZFNlbGVjdGVkUmFkaW8gPSBmdW5jdGlvbiAobm9kZSwgbm9kZXMpIHtcbiAgICByZXR1cm4gbm9kZXNcbiAgICAgICAgLmZpbHRlcihpc1JhZGlvRWxlbWVudClcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLm5hbWUgPT09IG5vZGUubmFtZTsgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLmNoZWNrZWQ7IH0pWzBdIHx8IG5vZGU7XG59O1xuZXhwb3J0IHZhciBjb3JyZWN0Tm9kZSA9IGZ1bmN0aW9uIChub2RlLCBub2Rlcykge1xuICAgIGlmIChpc1JhZGlvRWxlbWVudChub2RlKSAmJiBub2RlLm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRTZWxlY3RlZFJhZGlvKG5vZGUsIG5vZGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBnaXZpbmcgYSBzZXQgb2YgcmFkaW8gaW5wdXRzIGtlZXBzIG9ubHkgc2VsZWN0ZWQgKHRhYmJhYmxlKSBvbmVzXG4gKiBAcGFyYW0gbm9kZXNcbiAqL1xuZXhwb3J0IHZhciBjb3JyZWN0Tm9kZXMgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICAvLyBJRTExIGhhcyBubyBTZXQoYXJyYXkpIGNvbnN0cnVjdG9yXG4gICAgdmFyIHJlc3VsdFNldCA9IG5ldyBTZXQoKTtcbiAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiByZXN1bHRTZXQuYWRkKGNvcnJlY3ROb2RlKG5vZGUsIG5vZGVzKSk7IH0pO1xuICAgIC8vIHVzaW5nIGZpbHRlciB0byBzdXBwb3J0IElFMTFcbiAgICByZXR1cm4gbm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiByZXN1bHRTZXQuaGFzKG5vZGUpOyB9KTtcbn07XG4iLCAiaW1wb3J0IHsgY29ycmVjdE5vZGUgfSBmcm9tICcuL2NvcnJlY3RGb2N1cyc7XG5leHBvcnQgdmFyIHBpY2tGaXJzdEZvY3VzID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gICAgaWYgKG5vZGVzWzBdICYmIG5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcmV0dXJuIGNvcnJlY3ROb2RlKG5vZGVzWzBdLCBub2Rlcyk7XG4gICAgfVxuICAgIHJldHVybiBub2Rlc1swXTtcbn07XG5leHBvcnQgdmFyIHBpY2tGb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZXMsIG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZXMuaW5kZXhPZihjb3JyZWN0Tm9kZShub2RlLCBub2RlcykpO1xufTtcbiIsICJpbXBvcnQgeyBjb3JyZWN0Tm9kZXMgfSBmcm9tICcuL3V0aWxzL2NvcnJlY3RGb2N1cyc7XG5pbXBvcnQgeyBwaWNrRm9jdXNhYmxlIH0gZnJvbSAnLi91dGlscy9maXJzdEZvY3VzJztcbmltcG9ydCB7IGlzR3VhcmQgfSBmcm9tICcuL3V0aWxzL2lzJztcbmV4cG9ydCB2YXIgTkVXX0ZPQ1VTID0gJ05FV19GT0NVUyc7XG4vKipcbiAqIE1haW4gc29sdmVyIGZvciB0aGUgXCJmaW5kIG5leHQgZm9jdXNcIiBxdWVzdGlvblxuICogQHBhcmFtIGlubmVyTm9kZXMgLSB1c2VkIHRvIGNvbnRyb2wgXCJyZXR1cm4gZm9jdXNcIlxuICogQHBhcmFtIGlubmVyVGFiYmFibGVzIC0gdXNlZCB0byBjb250cm9sIFwiYXV0b2ZvY3VzXCJcbiAqIEBwYXJhbSBvdXRlck5vZGVzXG4gKiBAcGFyYW0gYWN0aXZlRWxlbWVudFxuICogQHBhcmFtIGxhc3ROb2RlXG4gKiBAcmV0dXJucyB7bnVtYmVyfHN0cmluZ3x1bmRlZmluZWR8Kn1cbiAqL1xuZXhwb3J0IHZhciBuZXdGb2N1cyA9IGZ1bmN0aW9uIChpbm5lck5vZGVzLCBpbm5lclRhYmJhYmxlcywgb3V0ZXJOb2RlcywgYWN0aXZlRWxlbWVudCwgbGFzdE5vZGUpIHtcbiAgICB2YXIgY250ID0gaW5uZXJOb2Rlcy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0Rm9jdXMgPSBpbm5lck5vZGVzWzBdO1xuICAgIHZhciBsYXN0Rm9jdXMgPSBpbm5lck5vZGVzW2NudCAtIDFdO1xuICAgIHZhciBpc09uR3VhcmQgPSBpc0d1YXJkKGFjdGl2ZUVsZW1lbnQpO1xuICAgIC8vIGZvY3VzIGlzIGluc2lkZVxuICAgIGlmIChhY3RpdmVFbGVtZW50ICYmIGlubmVyTm9kZXMuaW5kZXhPZihhY3RpdmVFbGVtZW50KSA+PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBhY3RpdmVJbmRleCA9IGFjdGl2ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCA/IG91dGVyTm9kZXMuaW5kZXhPZihhY3RpdmVFbGVtZW50KSA6IC0xO1xuICAgIHZhciBsYXN0SW5kZXggPSBsYXN0Tm9kZSA/IG91dGVyTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiBhY3RpdmVJbmRleDtcbiAgICB2YXIgbGFzdE5vZGVJbnNpZGUgPSBsYXN0Tm9kZSA/IGlubmVyTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiAtMTtcbiAgICAvLyBubyBhY3RpdmUgZm9jdXMgKG9yIGZvY3VzIGlzIG9uIHRoZSBib2R5KVxuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgLy8ga25vd24gZmFsbGJhY2tcbiAgICAgICAgaWYgKGxhc3ROb2RlSW5zaWRlICE9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBORVdfRk9DVVM7XG4gICAgfVxuICAgIC8vIG5ldyBmb2N1cywgbm90aGluZyB0byBjYWxjdWxhdGVcbiAgICBpZiAobGFzdE5vZGVJbnNpZGUgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBORVdfRk9DVVM7XG4gICAgfVxuICAgIHZhciBpbmRleERpZmYgPSBhY3RpdmVJbmRleCAtIGxhc3RJbmRleDtcbiAgICB2YXIgZmlyc3ROb2RlSW5kZXggPSBvdXRlck5vZGVzLmluZGV4T2YoZmlyc3RGb2N1cyk7XG4gICAgdmFyIGxhc3ROb2RlSW5kZXggPSBvdXRlck5vZGVzLmluZGV4T2YobGFzdEZvY3VzKTtcbiAgICB2YXIgY29ycmVjdGVkTm9kZXMgPSBjb3JyZWN0Tm9kZXMob3V0ZXJOb2Rlcyk7XG4gICAgdmFyIGN1cnJlbnRGb2N1c2FibGVJbmRleCA9IGFjdGl2ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCA/IGNvcnJlY3RlZE5vZGVzLmluZGV4T2YoYWN0aXZlRWxlbWVudCkgOiAtMTtcbiAgICB2YXIgcHJldmlvdXNGb2N1c2FibGVJbmRleCA9IGxhc3ROb2RlID8gY29ycmVjdGVkTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiBjdXJyZW50Rm9jdXNhYmxlSW5kZXg7XG4gICAgdmFyIHRhYmJhYmxlTm9kZXMgPSBjb3JyZWN0ZWROb2Rlcy5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUudGFiSW5kZXggPj0gMDsgfSk7XG4gICAgdmFyIGN1cnJlbnRUYWJiYWJsZUluZGV4ID0gYWN0aXZlRWxlbWVudCAhPT0gdW5kZWZpbmVkID8gdGFiYmFibGVOb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpIDogLTE7XG4gICAgdmFyIHByZXZpb3VzVGFiYmFibGVJbmRleCA9IGxhc3ROb2RlID8gdGFiYmFibGVOb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IGN1cnJlbnRUYWJiYWJsZUluZGV4O1xuICAgIHZhciBmb2N1c0luZGV4RGlmZiA9IGN1cnJlbnRUYWJiYWJsZUluZGV4ID49IDAgJiYgcHJldmlvdXNUYWJiYWJsZUluZGV4ID49IDBcbiAgICAgICAgPyAvLyBvbGQvbmV3IGFyZSB0YWJiYWJsZXMsIG1lYXN1cmUgZGlzdGFuY2UgaW4gdGFiYmFibGUgc3BhY2VcbiAgICAgICAgICAgIHByZXZpb3VzVGFiYmFibGVJbmRleCAtIGN1cnJlbnRUYWJiYWJsZUluZGV4XG4gICAgICAgIDogLy8gb3IgZWxzZSBtZWFzdXJlIGluIGZvY3VzYWJsZSBzcGFjZVxuICAgICAgICAgICAgcHJldmlvdXNGb2N1c2FibGVJbmRleCAtIGN1cnJlbnRGb2N1c2FibGVJbmRleDtcbiAgICAvLyBvbGQgZm9jdXNcbiAgICBpZiAoIWluZGV4RGlmZiAmJiBsYXN0Tm9kZUluc2lkZSA+PSAwKSB7XG4gICAgICAgIHJldHVybiBsYXN0Tm9kZUluc2lkZTtcbiAgICB9XG4gICAgLy8gbm8gdGFiYmFibGUgZWxlbWVudHMsIGF1dG9mb2N1cyBpcyBub3QgcG9zc2libGVcbiAgICBpZiAoaW5uZXJUYWJiYWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGFuIGVkZ2UgY2FzZSB3aXRoIG5vIHRhYmJhYmxlIGVsZW1lbnRzXG4gICAgICAgIC8vIHJldHVybiB0aGUgbGFzdCBmb2N1c2FibGUgb25lXG4gICAgICAgIC8vIHdpdGggc29tZSBwcm9iYWJpbGl0eSB0aGlzIHdpbGwgcHJldmVudCBmb2N1cyBmcm9tIGN5Y2xpbmcgYWNyb3NzIHRoZSBsb2NrLCBidXQgdGhlcmUgaXMgbm8gdGFiYmFsZSBlbGVtZW50cyB0byBjeWNsZSB0b1xuICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgfVxuICAgIHZhciByZXR1cm5GaXJzdE5vZGUgPSBwaWNrRm9jdXNhYmxlKGlubmVyTm9kZXMsIGlubmVyVGFiYmFibGVzWzBdKTtcbiAgICB2YXIgcmV0dXJuTGFzdE5vZGUgPSBwaWNrRm9jdXNhYmxlKGlubmVyTm9kZXMsIGlubmVyVGFiYmFibGVzW2lubmVyVGFiYmFibGVzLmxlbmd0aCAtIDFdKTtcbiAgICAvLyBmaXJzdCBlbGVtZW50XG4gICAgaWYgKGFjdGl2ZUluZGV4IDw9IGZpcnN0Tm9kZUluZGV4ICYmIGlzT25HdWFyZCAmJiBNYXRoLmFicyhpbmRleERpZmYpID4gMSkge1xuICAgICAgICByZXR1cm4gcmV0dXJuTGFzdE5vZGU7XG4gICAgfVxuICAgIC8vIGxhc3QgZWxlbWVudFxuICAgIGlmIChhY3RpdmVJbmRleCA+PSBsYXN0Tm9kZUluZGV4ICYmIGlzT25HdWFyZCAmJiBNYXRoLmFicyhpbmRleERpZmYpID4gMSkge1xuICAgICAgICByZXR1cm4gcmV0dXJuRmlyc3ROb2RlO1xuICAgIH1cbiAgICAvLyBqdW1wIG91dCwgYnV0IG5vdCBvbiB0aGUgZ3VhcmRcbiAgICBpZiAoaW5kZXhEaWZmICYmIE1hdGguYWJzKGZvY3VzSW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgIH1cbiAgICAvLyBmb2N1cyBhYm92ZSBsb2NrXG4gICAgaWYgKGFjdGl2ZUluZGV4IDw9IGZpcnN0Tm9kZUluZGV4KSB7XG4gICAgICAgIHJldHVybiByZXR1cm5MYXN0Tm9kZTtcbiAgICB9XG4gICAgLy8gZm9jdXMgYmVsb3cgbG9ja1xuICAgIGlmIChhY3RpdmVJbmRleCA+IGxhc3ROb2RlSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkZpcnN0Tm9kZTtcbiAgICB9XG4gICAgLy8gaW5kZXggaXMgaW5zaWRlIHRhYiBvcmRlciwgYnV0IG91dHNpZGUgTG9ja1xuICAgIGlmIChpbmRleERpZmYpIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKGluZGV4RGlmZikgPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChjbnQgKyBsYXN0Tm9kZUluc2lkZSArIGluZGV4RGlmZikgJSBjbnQ7XG4gICAgfVxuICAgIC8vIGRvIG5vdGhpbmdcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsICJpbXBvcnQgeyBmaWx0ZXJBdXRvRm9jdXNhYmxlIH0gZnJvbSAnLi9ET011dGlscyc7XG5pbXBvcnQgeyBwaWNrRmlyc3RGb2N1cyB9IGZyb20gJy4vZmlyc3RGb2N1cyc7XG5pbXBvcnQgeyBnZXREYXRhc2V0IH0gZnJvbSAnLi9pcyc7XG52YXIgZmluZEF1dG9Gb2N1c2VkID0gZnVuY3Rpb24gKGF1dG9Gb2N1c2FibGVzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIGF1dG9mb2N1cyA9IChfYSA9IGdldERhdGFzZXQobm9kZSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hdXRvZm9jdXM7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgbm9kZS5hdXRvZm9jdXMgfHxcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAoYXV0b2ZvY3VzICE9PSB1bmRlZmluZWQgJiYgYXV0b2ZvY3VzICE9PSAnZmFsc2UnKSB8fFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIGF1dG9Gb2N1c2FibGVzLmluZGV4T2Yobm9kZSkgPj0gMCk7XG4gICAgfTtcbn07XG5leHBvcnQgdmFyIHBpY2tBdXRvZm9jdXMgPSBmdW5jdGlvbiAobm9kZXNJbmRleGVzLCBvcmRlcmVkTm9kZXMsIGdyb3Vwcykge1xuICAgIHZhciBub2RlcyA9IG5vZGVzSW5kZXhlcy5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSk7XG4gICAgdmFyIGF1dG9Gb2N1c2FibGUgPSBmaWx0ZXJBdXRvRm9jdXNhYmxlKG5vZGVzLmZpbHRlcihmaW5kQXV0b0ZvY3VzZWQoZ3JvdXBzKSkpO1xuICAgIGlmIChhdXRvRm9jdXNhYmxlICYmIGF1dG9Gb2N1c2FibGUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBwaWNrRmlyc3RGb2N1cyhhdXRvRm9jdXNhYmxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHBpY2tGaXJzdEZvY3VzKGZpbHRlckF1dG9Gb2N1c2FibGUob3JkZXJlZE5vZGVzKSk7XG59O1xuIiwgImltcG9ydCB7IHBhcmVudEF1dG9mb2N1c2FibGVzIH0gZnJvbSAnLi9ET011dGlscyc7XG5pbXBvcnQgeyBjb250YWlucyB9IGZyb20gJy4vRE9NdXRpbHMnO1xuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJy4vYXJyYXknO1xudmFyIGdldFBhcmVudHMgPSBmdW5jdGlvbiAobm9kZSwgcGFyZW50cykge1xuICAgIGlmIChwYXJlbnRzID09PSB2b2lkIDApIHsgcGFyZW50cyA9IFtdOyB9XG4gICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgZ2V0UGFyZW50cyhub2RlLnBhcmVudE5vZGUuaG9zdCB8fCBub2RlLnBhcmVudE5vZGUsIHBhcmVudHMpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyZW50cztcbn07XG4vKipcbiAqIGZpbmRzIGEgcGFyZW50IGZvciBib3RoIG5vZGVBIGFuZCBub2RlQlxuICogQHBhcmFtIG5vZGVBXG4gKiBAcGFyYW0gbm9kZUJcbiAqIEByZXR1cm5zIHtib29sZWFufCp9XG4gKi9cbmV4cG9ydCB2YXIgZ2V0Q29tbW9uUGFyZW50ID0gZnVuY3Rpb24gKG5vZGVBLCBub2RlQikge1xuICAgIHZhciBwYXJlbnRzQSA9IGdldFBhcmVudHMobm9kZUEpO1xuICAgIHZhciBwYXJlbnRzQiA9IGdldFBhcmVudHMobm9kZUIpO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJlbnRzQS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIgY3VycmVudFBhcmVudCA9IHBhcmVudHNBW2ldO1xuICAgICAgICBpZiAocGFyZW50c0IuaW5kZXhPZihjdXJyZW50UGFyZW50KSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IHZhciBnZXRUb3BDb21tb25QYXJlbnQgPSBmdW5jdGlvbiAoYmFzZUFjdGl2ZUVsZW1lbnQsIGxlZnRFbnRyeSwgcmlnaHRFbnRyaWVzKSB7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnRzID0gYXNBcnJheShiYXNlQWN0aXZlRWxlbWVudCk7XG4gICAgdmFyIGxlZnRFbnRyaWVzID0gYXNBcnJheShsZWZ0RW50cnkpO1xuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gYWN0aXZlRWxlbWVudHNbMF07XG4gICAgdmFyIHRvcENvbW1vbiA9IGZhbHNlO1xuICAgIGxlZnRFbnRyaWVzLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICB0b3BDb21tb24gPSBnZXRDb21tb25QYXJlbnQodG9wQ29tbW9uIHx8IGVudHJ5LCBlbnRyeSkgfHwgdG9wQ29tbW9uO1xuICAgICAgICByaWdodEVudHJpZXMuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKHN1YkVudHJ5KSB7XG4gICAgICAgICAgICB2YXIgY29tbW9uID0gZ2V0Q29tbW9uUGFyZW50KGFjdGl2ZUVsZW1lbnQsIHN1YkVudHJ5KTtcbiAgICAgICAgICAgIGlmIChjb21tb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRvcENvbW1vbiB8fCBjb250YWlucyhjb21tb24sIHRvcENvbW1vbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wQ29tbW9uID0gY29tbW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wQ29tbW9uID0gZ2V0Q29tbW9uUGFyZW50KGNvbW1vbiwgdG9wQ29tbW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIFRPRE86IGFkZCBhc3NlcnQgaGVyZT9cbiAgICByZXR1cm4gdG9wQ29tbW9uO1xufTtcbi8qKlxuICogcmV0dXJuIGxpc3Qgb2Ygbm9kZXMgd2hpY2ggYXJlIGV4cGVjdGVkIHRvIGJlIGF1dG9mb2N1c2VkIGluc2lkZSBhIGdpdmVuIHRvcCBub2Rlc1xuICogQHBhcmFtIGVudHJpZXNcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGVcbiAqL1xuZXhwb3J0IHZhciBhbGxQYXJlbnRBdXRvZm9jdXNhYmxlcyA9IGZ1bmN0aW9uIChlbnRyaWVzLCB2aXNpYmlsaXR5Q2FjaGUpIHtcbiAgICByZXR1cm4gZW50cmllcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbm9kZSkgeyByZXR1cm4gYWNjLmNvbmNhdChwYXJlbnRBdXRvZm9jdXNhYmxlcyhub2RlLCB2aXNpYmlsaXR5Q2FjaGUpKTsgfSwgW10pO1xufTtcbiIsICJpbXBvcnQgeyBORVdfRk9DVVMsIG5ld0ZvY3VzIH0gZnJvbSAnLi9zb2x2ZXInO1xuaW1wb3J0IHsgZ2V0Rm9jdXNhYmxlTm9kZXMgfSBmcm9tICcuL3V0aWxzL0RPTXV0aWxzJztcbmltcG9ydCB7IGdldEFsbEFmZmVjdGVkTm9kZXMgfSBmcm9tICcuL3V0aWxzL2FsbC1hZmZlY3RlZCc7XG5pbXBvcnQgeyBhc0FycmF5LCBnZXRGaXJzdCB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgcGlja0F1dG9mb2N1cyB9IGZyb20gJy4vdXRpbHMvYXV0by1mb2N1cyc7XG5pbXBvcnQgeyBnZXRBY3RpdmVFbGVtZW50IH0gZnJvbSAnLi91dGlscy9nZXRBY3RpdmVFbGVtZW50JztcbmltcG9ydCB7IGlzRGVmaW5lZCwgaXNOb3RBR3VhcmQgfSBmcm9tICcuL3V0aWxzL2lzJztcbmltcG9ydCB7IGFsbFBhcmVudEF1dG9mb2N1c2FibGVzLCBnZXRUb3BDb21tb25QYXJlbnQgfSBmcm9tICcuL3V0aWxzL3BhcmVudGluZyc7XG52YXIgcmVvcmRlck5vZGVzID0gZnVuY3Rpb24gKHNyY05vZGVzLCBkc3ROb2Rlcykge1xuICAgIHZhciByZW1hcCA9IG5ldyBNYXAoKTtcbiAgICAvLyBubyBTZXQoZHN0Tm9kZXMpIGZvciBJRTExIDooXG4gICAgZHN0Tm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoZW50aXR5KSB7IHJldHVybiByZW1hcC5zZXQoZW50aXR5Lm5vZGUsIGVudGl0eSk7IH0pO1xuICAgIC8vIHJlbWFwIHRvIGRzdE5vZGVzXG4gICAgcmV0dXJuIHNyY05vZGVzLm1hcChmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gcmVtYXAuZ2V0KG5vZGUpOyB9KS5maWx0ZXIoaXNEZWZpbmVkKTtcbn07XG4vKipcbiAqIGNvbnRhaW5zIHRoZSBtYWluIGxvZ2ljIG9mIHRoZSBgZm9jdXMtbG9ja2AgcGFja2FnZS5cbiAqXG4gKiAhIHlvdSBwcm9iYWJseSBkb250IG5lZWQgdGhpcyBmdW5jdGlvbiAhXG4gKlxuICogZ2l2ZW4gdG9wIG5vZGUocykgYW5kIHRoZSBsYXN0IGFjdGl2ZSBlbGVtZW50IHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYmUgZm9jdXNlZCBuZXh0XG4gKiBAcmV0dXJucyBlbGVtZW50IHdoaWNoIHNob3VsZCBiZSBmb2N1c2VkIHRvIG1vdmUgZm9jdXMgaW5zaWRlXG4gKiBAcGFyYW0gdG9wTm9kZVxuICogQHBhcmFtIGxhc3ROb2RlXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNTb2x2ZXIgPSBmdW5jdGlvbiAodG9wTm9kZSwgbGFzdE5vZGUpIHtcbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoYXNBcnJheSh0b3BOb2RlKS5sZW5ndGggPiAwID8gZG9jdW1lbnQgOiBnZXRGaXJzdCh0b3BOb2RlKS5vd25lckRvY3VtZW50KTtcbiAgICB2YXIgZW50cmllcyA9IGdldEFsbEFmZmVjdGVkTm9kZXModG9wTm9kZSkuZmlsdGVyKGlzTm90QUd1YXJkKTtcbiAgICB2YXIgY29tbW9uUGFyZW50ID0gZ2V0VG9wQ29tbW9uUGFyZW50KGFjdGl2ZUVsZW1lbnQgfHwgdG9wTm9kZSwgdG9wTm9kZSwgZW50cmllcyk7XG4gICAgdmFyIHZpc2liaWxpdHlDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICB2YXIgYW55Rm9jdXNhYmxlID0gZ2V0Rm9jdXNhYmxlTm9kZXMoZW50cmllcywgdmlzaWJpbGl0eUNhY2hlKTtcbiAgICB2YXIgaW5uZXJFbGVtZW50cyA9IGFueUZvY3VzYWJsZS5maWx0ZXIoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZTtcbiAgICAgICAgcmV0dXJuIGlzTm90QUd1YXJkKG5vZGUpO1xuICAgIH0pO1xuICAgIGlmICghaW5uZXJFbGVtZW50c1swXSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgb3V0ZXJOb2RlcyA9IGdldEZvY3VzYWJsZU5vZGVzKFtjb21tb25QYXJlbnRdLCB2aXNpYmlsaXR5Q2FjaGUpLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgb3JkZXJlZElubmVyRWxlbWVudHMgPSByZW9yZGVyTm9kZXMob3V0ZXJOb2RlcywgaW5uZXJFbGVtZW50cyk7XG4gICAgLy8gY29sbGVjdCBpbm5lciBmb2N1c2FibGUgYW5kIHNlcGFyYXRlbHkgdGFiYmFibGVzXG4gICAgdmFyIGlubmVyRm9jdXNhYmxlcyA9IG9yZGVyZWRJbm5lckVsZW1lbnRzLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgaW5uZXJUYWJiYWJsZSA9IG9yZGVyZWRJbm5lckVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIHRhYkluZGV4ID0gX2EudGFiSW5kZXg7XG4gICAgICAgIHJldHVybiB0YWJJbmRleCA+PSAwO1xuICAgIH0pLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgbmV3SWQgPSBuZXdGb2N1cyhpbm5lckZvY3VzYWJsZXMsIGlubmVyVGFiYmFibGUsIG91dGVyTm9kZXMsIGFjdGl2ZUVsZW1lbnQsIGxhc3ROb2RlKTtcbiAgICBpZiAobmV3SWQgPT09IE5FV19GT0NVUykge1xuICAgICAgICB2YXIgZm9jdXNOb2RlID0gXG4gICAgICAgIC8vIGZpcnN0IHRyeSBvbmx5IHRhYmJhYmxlLCBhbmQgdGhlIGZhbGxiYWNrIHRvIGFsbCBmb2N1c2FibGUsIGFzIGxvbmcgYXMgYXQgbGVhc3Qgb25lIGVsZW1lbnQgc2hvdWxkIGJlIHBpY2tlZCBmb3IgZm9jdXNcbiAgICAgICAgcGlja0F1dG9mb2N1cyhhbnlGb2N1c2FibGUsIGlubmVyVGFiYmFibGUsIGFsbFBhcmVudEF1dG9mb2N1c2FibGVzKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSkpIHx8XG4gICAgICAgICAgICBwaWNrQXV0b2ZvY3VzKGFueUZvY3VzYWJsZSwgaW5uZXJGb2N1c2FibGVzLCBhbGxQYXJlbnRBdXRvZm9jdXNhYmxlcyhlbnRyaWVzLCB2aXNpYmlsaXR5Q2FjaGUpKTtcbiAgICAgICAgaWYgKGZvY3VzTm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbm9kZTogZm9jdXNOb2RlIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZvY3VzLWxvY2s6IGNhbm5vdCBmaW5kIGFueSBub2RlIHRvIG1vdmUgZm9jdXMgaW50bycpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAobmV3SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmV3SWQ7XG4gICAgfVxuICAgIHJldHVybiBvcmRlcmVkSW5uZXJFbGVtZW50c1tuZXdJZF07XG59O1xuIiwgImltcG9ydCB7IGdldEFsbEFmZmVjdGVkTm9kZXMgfSBmcm9tICcuL3V0aWxzL2FsbC1hZmZlY3RlZCc7XG5pbXBvcnQgeyBpc0d1YXJkLCBpc05vdEFHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgZ2V0VG9wQ29tbW9uUGFyZW50IH0gZnJvbSAnLi91dGlscy9wYXJlbnRpbmcnO1xuaW1wb3J0IHsgb3JkZXJCeVRhYkluZGV4IH0gZnJvbSAnLi91dGlscy90YWJPcmRlcic7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVzIH0gZnJvbSAnLi91dGlscy90YWJVdGlscyc7XG4vKipcbiAqIHRyYXZlcnNlcyBhbGwgcmVsYXRlZCBub2RlcyAoaW5jbHVkaW5nIGdyb3VwcykgcmV0dXJuaW5nIGEgbGlzdCBvZiBhbGwgbm9kZXMob3V0ZXIgYW5kIGludGVybmFsKSB3aXRoIG1ldGEgaW5mb3JtYXRpb25cbiAqIFRoaXMgaXMgbG93LWxldmVsIEFQSSFcbiAqIEByZXR1cm5zIGxpc3Qgb2YgZm9jdXNhYmxlIGVsZW1lbnRzIGluc2lkZSBhIGdpdmVuIHRvcCghKSBub2RlLlxuICogQHNlZSB7QGxpbmsgZ2V0Rm9jdXNhYmxlTm9kZXN9IHByb3ZpZGluZyBhIHNpbXBsZXIgQVBJXG4gKi9cbmV4cG9ydCB2YXIgZXhwYW5kRm9jdXNhYmxlTm9kZXMgPSBmdW5jdGlvbiAodG9wTm9kZSkge1xuICAgIHZhciBlbnRyaWVzID0gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5maWx0ZXIoaXNOb3RBR3VhcmQpO1xuICAgIHZhciBjb21tb25QYXJlbnQgPSBnZXRUb3BDb21tb25QYXJlbnQodG9wTm9kZSwgdG9wTm9kZSwgZW50cmllcyk7XG4gICAgdmFyIG91dGVyTm9kZXMgPSBvcmRlckJ5VGFiSW5kZXgoZ2V0Rm9jdXNhYmxlcyhbY29tbW9uUGFyZW50XSwgdHJ1ZSksIHRydWUsIHRydWUpO1xuICAgIHZhciBpbm5lckVsZW1lbnRzID0gZ2V0Rm9jdXNhYmxlcyhlbnRyaWVzLCBmYWxzZSk7XG4gICAgcmV0dXJuIG91dGVyTm9kZXMubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGUsIGluZGV4ID0gX2EuaW5kZXg7XG4gICAgICAgIHJldHVybiAoe1xuICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIGxvY2tJdGVtOiBpbm5lckVsZW1lbnRzLmluZGV4T2Yobm9kZSkgPj0gMCxcbiAgICAgICAgICAgIGd1YXJkOiBpc0d1YXJkKG5vZGUpLFxuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG4iLCAiZXhwb3J0IHZhciBmb2N1c09uID0gZnVuY3Rpb24gKHRhcmdldCwgZm9jdXNPcHRpb25zKSB7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgLy8gbm90IGNsZWFyIGhvdywgYnV0IGlzIHBvc3NpYmxlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvZm9jdXMtbG9jay9pc3N1ZXMvNTNcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoJ2ZvY3VzJyBpbiB0YXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0LmZvY3VzKGZvY3VzT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmICgnY29udGVudFdpbmRvdycgaW4gdGFyZ2V0ICYmIHRhcmdldC5jb250ZW50V2luZG93KSB7XG4gICAgICAgIHRhcmdldC5jb250ZW50V2luZG93LmZvY3VzKCk7XG4gICAgfVxufTtcbiIsICJpbXBvcnQgeyBmb2N1c09uIH0gZnJvbSAnLi9jb21tYW5kcyc7XG5pbXBvcnQgeyBmb2N1c1NvbHZlciB9IGZyb20gJy4vZm9jdXNTb2x2ZXInO1xudmFyIGd1YXJkQ291bnQgPSAwO1xudmFyIGxvY2tEaXNhYmxlZCA9IGZhbHNlO1xuLyoqXG4gKiBUaGUgbWFpbiBmdW5jdGlvbmFsaXR5IG9mIHRoZSBmb2N1cy1sb2NrIHBhY2thZ2VcbiAqXG4gKiBDb250YWlucyBmb2N1cyBhdCBhIGdpdmVuIG5vZGUuXG4gKiBUaGUgbGFzdCBmb2N1c2VkIGVsZW1lbnQgd2lsbCBoZWxwIHRvIGRldGVybWluZSB3aGljaCBlbGVtZW50KGZpcnN0IG9yIGxhc3QpIHNob3VsZCBiZSBmb2N1c2VkLlxuICogVGhlIGZvdW5kIGVsZW1lbnQgd2lsbCBiZSBmb2N1c2VkLlxuICpcbiAqIFRoaXMgaXMgb25lIHRpbWUgYWN0aW9uIChtb3ZlKSwgbm90IGEgcGVyc2lzdGVudCBmb2N1cy1sb2NrXG4gKlxuICogSFRNTCBtYXJrZXJzIChzZWUge0BsaW5rIGltcG9ydCgnLi9jb25zdGFudHMnKS5GT0NVU19BVVRPfSBjb25zdGFudHMpIGNhbiBjb250cm9sIGF1dG9mb2N1c1xuICogQHNlZSB7QGxpbmsgZm9jdXNTb2x2ZXJ9IGZvciB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IHdpdGhvdXQgYXV0b2ZvY3VzXG4gKi9cbmV4cG9ydCB2YXIgbW92ZUZvY3VzSW5zaWRlID0gZnVuY3Rpb24gKHRvcE5vZGUsIGxhc3ROb2RlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgZm9jdXNhYmxlID0gZm9jdXNTb2x2ZXIodG9wTm9kZSwgbGFzdE5vZGUpO1xuICAgIC8vIGdsb2JhbCBsb2NhbCBzaWRlIGVmZmVjdCB0byBjb3VudGFpbiByZWN1cnNpdmUgbG9jayBhY3RpdmF0aW9uIGFuZCByZXNvbHZlIGZvY3VzLWZpZ2h0aW5nXG4gICAgaWYgKGxvY2tEaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChmb2N1c2FibGUpIHtcbiAgICAgICAgLyoqICtGT0NVUy1GSUdIVElORyBwcmV2ZW50aW9uICoqL1xuICAgICAgICBpZiAoZ3VhcmRDb3VudCA+IDIpIHtcbiAgICAgICAgICAgIC8vIHdlIGhhdmUgcmVjdXJzaXZlIGVudGVyZWQgYmFjayB0aGUgbG9jayBhY3RpdmF0aW9uXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGb2N1c0xvY2s6IGZvY3VzLWZpZ2h0aW5nIGRldGVjdGVkLiBPbmx5IG9uZSBmb2N1cyBtYW5hZ2VtZW50IHN5c3RlbSBjb3VsZCBiZSBhY3RpdmUuICcgK1xuICAgICAgICAgICAgICAgICdTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS9mb2N1cy1sb2NrLyNmb2N1cy1maWdodGluZycpO1xuICAgICAgICAgICAgbG9ja0Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxvY2tEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZ3VhcmRDb3VudCsrO1xuICAgICAgICBmb2N1c09uKGZvY3VzYWJsZS5ub2RlLCBvcHRpb25zLmZvY3VzT3B0aW9ucyk7XG4gICAgICAgIGd1YXJkQ291bnQtLTtcbiAgICB9XG59O1xuIiwgImltcG9ydCB7IGdldFRhYmJhYmxlTm9kZXMgfSBmcm9tICcuL3V0aWxzL0RPTXV0aWxzJztcbmZ1bmN0aW9uIHdlYWtSZWYodmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyAjNjggU2FmYXJpIDE0LjEgZG9udCBoYXZlIGl0IHlldFxuICAgIC8vIEZJWE1FOiByZW1vdmUgaW4gMjAyNVxuICAgIGlmICh0eXBlb2YgV2Vha1JlZiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlIHx8IG51bGw7IH07XG4gICAgfVxuICAgIHZhciB3ID0gdmFsdWUgPyBuZXcgV2Vha1JlZih2YWx1ZSkgOiBudWxsO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiAodyA9PT0gbnVsbCB8fCB3ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3LmRlcmVmKCkpIHx8IG51bGw7IH07XG59XG5leHBvcnQgdmFyIHJlY29yZEVsZW1lbnRMb2NhdGlvbiA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCAmJiBjdXJyZW50RWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIGN1cnJlbnQ6IHdlYWtSZWYoY3VycmVudEVsZW1lbnQpLFxuICAgICAgICAgICAgcGFyZW50OiB3ZWFrUmVmKGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQpLFxuICAgICAgICAgICAgbGVmdDogd2Vha1JlZihjdXJyZW50RWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSxcbiAgICAgICAgICAgIHJpZ2h0OiB3ZWFrUmVmKGN1cnJlbnRFbGVtZW50Lm5leHRFbGVtZW50U2libGluZyksXG4gICAgICAgIH0pO1xuICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGVsZW1lbnQ6IHdlYWtSZWYoZWxlbWVudCksXG4gICAgICAgIHN0YWNrOiBzdGFjayxcbiAgICAgICAgb3duZXJEb2N1bWVudDogZWxlbWVudC5vd25lckRvY3VtZW50LFxuICAgIH07XG59O1xudmFyIHJlc3RvcmVGb2N1c1RvID0gZnVuY3Rpb24gKGxvY2F0aW9uKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBzdGFjayA9IGxvY2F0aW9uLnN0YWNrLCBvd25lckRvY3VtZW50ID0gbG9jYXRpb24ub3duZXJEb2N1bWVudDtcbiAgICB2YXIgdmlzaWJpbGl0eUNhY2hlID0gbmV3IE1hcCgpO1xuICAgIGZvciAodmFyIF9pID0gMCwgc3RhY2tfMSA9IHN0YWNrOyBfaSA8IHN0YWNrXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBsaW5lID0gc3RhY2tfMVtfaV07XG4gICAgICAgIHZhciBwYXJlbnRfMSA9IChfYSA9IGxpbmUucGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChsaW5lKTtcbiAgICAgICAgLy8gaXMgaXQgc3RpbGwgaGVyZT9cbiAgICAgICAgaWYgKHBhcmVudF8xICYmIG93bmVyRG9jdW1lbnQuY29udGFpbnMocGFyZW50XzEpKSB7XG4gICAgICAgICAgICB2YXIgbGVmdCA9IChfYiA9IGxpbmUubGVmdCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwobGluZSk7XG4gICAgICAgICAgICB2YXIgc2F2ZWRDdXJyZW50ID0gbGluZS5jdXJyZW50KCk7XG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IHBhcmVudF8xLmNvbnRhaW5zKHNhdmVkQ3VycmVudCkgPyBzYXZlZEN1cnJlbnQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB2YXIgcmlnaHQgPSAoX2MgPSBsaW5lLnJpZ2h0KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuY2FsbChsaW5lKTtcbiAgICAgICAgICAgIHZhciBmb2N1c2FibGVzID0gZ2V0VGFiYmFibGVOb2RlcyhbcGFyZW50XzFdLCB2aXNpYmlsaXR5Q2FjaGUpO1xuICAgICAgICAgICAgdmFyIGFpbSA9IFxuICAgICAgICAgICAgLy8gdGhhdCBpcyBlbGVtZW50IGl0c2VsZlxuICAgICAgICAgICAgKF9lID0gKF9kID0gY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50ICE9PSB2b2lkIDAgPyBjdXJyZW50IDogXG4gICAgICAgICAgICAvLyBvciBzb21ldGhpbmcgaW4gaXQncyBwbGFjZVxuICAgICAgICAgICAgbGVmdCA9PT0gbnVsbCB8fCBsZWZ0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsZWZ0Lm5leHRFbGVtZW50U2libGluZykgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogXG4gICAgICAgICAgICAvLyBvciBzb21lYm9keSB0byB0aGUgcmlnaHQsIHN0aWxsIGNsb3NlIGVub3VnaFxuICAgICAgICAgICAgcmlnaHQpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IFxuICAgICAgICAgICAgLy8gb3Igc29tZWJvZHkgdG8gdGhlIGxlZnQsIHNvbWV0aGluZz9cbiAgICAgICAgICAgIGxlZnQ7XG4gICAgICAgICAgICB3aGlsZSAoYWltKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2YgPSAwLCBmb2N1c2FibGVzXzEgPSBmb2N1c2FibGVzOyBfZiA8IGZvY3VzYWJsZXNfMS5sZW5ndGg7IF9mKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvY3VzYWJsZSA9IGZvY3VzYWJsZXNfMVtfZl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChhaW0gPT09IG51bGwgfHwgYWltID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhaW0uY29udGFpbnMoZm9jdXNhYmxlLm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlLm5vZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWltID0gYWltLm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb2N1c2FibGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHBhcmVudCBjb250YWlucyBhIGZvY3VzYWJsZSAtIG1vdmUgdGhlcmVcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlc1swXS5ub2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vdGhpbmcgbWF0Y2hlZFxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBDYXB0dXJlcyB0aGUgY3VycmVudCBmb2N1c2VkIGVsZW1lbnQgdG8gcmVzdG9yZSBmb2N1cyBhcyBjbG9zZSBhcyBwb3NzaWJsZSBpbiB0aGUgZnV0dXJlXG4gKiBIYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGZvY3VzZWQgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIERPTSBvciBubyBsb25nZXIgZm9jdXNhYmxlXG4gKiBtb3ZpbmcgZm9jdXMgdG8gdGhlIGNsb3Nlc3QgZm9jdXNhYmxlIGVsZW1lbnRcbiAqIEBwYXJhbSB0YXJnZXRFbGVtZW50IC0gZWxlbWVudCB3aGVyZSBmb2N1cyBzaG91bGQgYmUgcmVzdG9yZWRcbiAqIEByZXR1cm5zIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgbmV3IGVsZW1lbnQgdG8gZm9jdXNcbiAqL1xuZXhwb3J0IHZhciBjYXB0dXJlRm9jdXNSZXN0b3JlID0gZnVuY3Rpb24gKHRhcmdldEVsZW1lbnQpIHtcbiAgICB2YXIgbG9jYXRpb24gPSByZWNvcmRFbGVtZW50TG9jYXRpb24odGFyZ2V0RWxlbWVudCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJlc3RvcmVGb2N1c1RvKGxvY2F0aW9uKTtcbiAgICB9O1xufTtcbiIsICJpbXBvcnQgeyBmb2N1c09uIH0gZnJvbSAnLi9jb21tYW5kcyc7XG5pbXBvcnQgeyBnZXRUYWJiYWJsZU5vZGVzLCBjb250YWlucywgZ2V0Rm9jdXNhYmxlTm9kZXMgfSBmcm9tICcuL3V0aWxzL0RPTXV0aWxzJztcbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICcuL3V0aWxzL2FycmF5Jztcbi8qKlxuICogZm9yIGEgZ2l2ZW4gYGVsZW1lbnRgIGluIGEgZ2l2ZW4gYHNjb3BlYCByZXR1cm5zIGZvY3VzYWJsZSBzaWJsaW5nc1xuICogQHBhcmFtIGVsZW1lbnQgLSBiYXNlIGVsZW1lbnRcbiAqIEBwYXJhbSBzY29wZSAtIGNvbW1vbiBwYXJlbnQuIENhbiBiZSBkb2N1bWVudCwgYnV0IGJldHRlciB0byBuYXJyb3cgaXQgZG93biBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICogQHJldHVybnMge3ByZXYsbmV4dH0gLSByZWZlcmVuY2VzIHRvIGEgZm9jdXNhYmxlIGVsZW1lbnQgYmVmb3JlIGFuZCBhZnRlclxuICogQHJldHVybnMgdW5kZWZpbmVkIC0gaWYgb3BlcmF0aW9uIGlzIG5vdCBhcHBsaWNhYmxlXG4gKi9cbmV4cG9ydCB2YXIgZ2V0UmVsYXRpdmVGb2N1c2FibGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgc2NvcGUsIHVzZVRhYmJhYmxlcykge1xuICAgIGlmICghZWxlbWVudCB8fCAhc2NvcGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignbm8gZWxlbWVudCBvciBzY29wZSBnaXZlbicpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHZhciBzaGFyZHMgPSBhc0FycmF5KHNjb3BlKTtcbiAgICBpZiAoc2hhcmRzLmV2ZXJ5KGZ1bmN0aW9uIChzaGFyZCkgeyByZXR1cm4gIWNvbnRhaW5zKHNoYXJkLCBlbGVtZW50KTsgfSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQWN0aXZlIGVsZW1lbnQgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgc2NvcGUnKTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICB2YXIgZm9jdXNhYmxlcyA9IHVzZVRhYmJhYmxlc1xuICAgICAgICA/IGdldFRhYmJhYmxlTm9kZXMoc2hhcmRzLCBuZXcgTWFwKCkpXG4gICAgICAgIDogZ2V0Rm9jdXNhYmxlTm9kZXMoc2hhcmRzLCBuZXcgTWFwKCkpO1xuICAgIHZhciBjdXJyZW50ID0gZm9jdXNhYmxlcy5maW5kSW5kZXgoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZTtcbiAgICAgICAgcmV0dXJuIG5vZGUgPT09IGVsZW1lbnQ7XG4gICAgfSk7XG4gICAgaWYgKGN1cnJlbnQgPT09IC0xKSB7XG4gICAgICAgIC8vIGFuIGVkZ2UgY2FzZSwgd2hlbiBhbmNob3IgZWxlbWVudCBpcyBub3QgZm91bmRcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJldjogZm9jdXNhYmxlc1tjdXJyZW50IC0gMV0sXG4gICAgICAgIG5leHQ6IGZvY3VzYWJsZXNbY3VycmVudCArIDFdLFxuICAgICAgICBmaXJzdDogZm9jdXNhYmxlc1swXSxcbiAgICAgICAgbGFzdDogZm9jdXNhYmxlc1tmb2N1c2FibGVzLmxlbmd0aCAtIDFdLFxuICAgIH07XG59O1xudmFyIGdldEJvdW5kYXJ5ID0gZnVuY3Rpb24gKHNoYXJkcywgdXNlVGFiYmFibGVzKSB7XG4gICAgdmFyIHNldCA9IHVzZVRhYmJhYmxlc1xuICAgICAgICA/IGdldFRhYmJhYmxlTm9kZXMoYXNBcnJheShzaGFyZHMpLCBuZXcgTWFwKCkpXG4gICAgICAgIDogZ2V0Rm9jdXNhYmxlTm9kZXMoYXNBcnJheShzaGFyZHMpLCBuZXcgTWFwKCkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGZpcnN0OiBzZXRbMF0sXG4gICAgICAgIGxhc3Q6IHNldFtzZXQubGVuZ3RoIC0gMV0sXG4gICAgfTtcbn07XG52YXIgZGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgc2NvcGU6IGRvY3VtZW50LmJvZHksXG4gICAgICAgIGN5Y2xlOiB0cnVlLFxuICAgICAgICBvbmx5VGFiYmFibGU6IHRydWUsXG4gICAgfSwgb3B0aW9ucyk7XG59O1xudmFyIG1vdmVGb2N1cyA9IGZ1bmN0aW9uIChmcm9tRWxlbWVudCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBuZXdPcHRpb25zID0gZGVmYXVsdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgdmFyIHNvbHV0aW9uID0gZ2V0UmVsYXRpdmVGb2N1c2FibGUoZnJvbUVsZW1lbnQsIG5ld09wdGlvbnMuc2NvcGUsIG5ld09wdGlvbnMub25seVRhYmJhYmxlKTtcbiAgICBpZiAoIXNvbHV0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRhcmdldCA9IGNiKHNvbHV0aW9uLCBuZXdPcHRpb25zLmN5Y2xlKTtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGZvY3VzT24odGFyZ2V0Lm5vZGUsIG5ld09wdGlvbnMuZm9jdXNPcHRpb25zKTtcbiAgICB9XG59O1xuLyoqXG4gKiBmb2N1c2VzIG5leHQgZWxlbWVudCBpbiB0aGUgdGFiLW9yZGVyXG4gKiBAcGFyYW0gZnJvbUVsZW1lbnQgLSBjb21tb24gcGFyZW50IHRvIHNjb3BlIGFjdGl2ZSBlbGVtZW50IHNlYXJjaCBvciB0YWIgY3ljbGUgb3JkZXJcbiAqIEBwYXJhbSB7Rm9jdXNOZXh0T3B0aW9uc30gW29wdGlvbnNdIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzTmV4dEVsZW1lbnQgPSBmdW5jdGlvbiAoZnJvbUVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIG1vdmVGb2N1cyhmcm9tRWxlbWVudCwgb3B0aW9ucywgZnVuY3Rpb24gKF9hLCBjeWNsZSkge1xuICAgICAgICB2YXIgbmV4dCA9IF9hLm5leHQsIGZpcnN0ID0gX2EuZmlyc3Q7XG4gICAgICAgIHJldHVybiBuZXh0IHx8IChjeWNsZSAmJiBmaXJzdCk7XG4gICAgfSk7XG59O1xuLyoqXG4gKiBmb2N1c2VzIHByZXYgZWxlbWVudCBpbiB0aGUgdGFiIG9yZGVyXG4gKiBAcGFyYW0gZnJvbUVsZW1lbnQgLSBjb21tb24gcGFyZW50IHRvIHNjb3BlIGFjdGl2ZSBlbGVtZW50IHNlYXJjaCBvciB0YWIgY3ljbGUgb3JkZXJcbiAqIEBwYXJhbSB7Rm9jdXNOZXh0T3B0aW9uc30gW29wdGlvbnNdIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzUHJldkVsZW1lbnQgPSBmdW5jdGlvbiAoZnJvbUVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIG1vdmVGb2N1cyhmcm9tRWxlbWVudCwgb3B0aW9ucywgZnVuY3Rpb24gKF9hLCBjeWNsZSkge1xuICAgICAgICB2YXIgcHJldiA9IF9hLnByZXYsIGxhc3QgPSBfYS5sYXN0O1xuICAgICAgICByZXR1cm4gcHJldiB8fCAoY3ljbGUgJiYgbGFzdCk7XG4gICAgfSk7XG59O1xudmFyIHBpY2tCb3VuZGFyeSA9IGZ1bmN0aW9uIChzY29wZSwgb3B0aW9ucywgd2hhdCkge1xuICAgIHZhciBfYTtcbiAgICB2YXIgYm91bmRhcnkgPSBnZXRCb3VuZGFyeShzY29wZSwgKF9hID0gb3B0aW9ucy5vbmx5VGFiYmFibGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWUpO1xuICAgIHZhciBub2RlID0gYm91bmRhcnlbd2hhdF07XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgICAgZm9jdXNPbihub2RlLm5vZGUsIG9wdGlvbnMuZm9jdXNPcHRpb25zKTtcbiAgICB9XG59O1xuLyoqXG4gKiBmb2N1c2VzIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHRhYi1vcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBvcHRpb25zIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzRmlyc3RFbGVtZW50ID0gZnVuY3Rpb24gKHNjb3BlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICBwaWNrQm91bmRhcnkoc2NvcGUsIG9wdGlvbnMsICdmaXJzdCcpO1xufTtcbi8qKlxuICogZm9jdXNlcyBsYXN0IGVsZW1lbnQgaW4gdGhlIHRhYiBvcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBvcHRpb25zIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzTGFzdEVsZW1lbnQgPSBmdW5jdGlvbiAoc2NvcGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHBpY2tCb3VuZGFyeShzY29wZSwgb3B0aW9ucywgJ2xhc3QnKTtcbn07XG4iLCAiaW1wb3J0IHsgZXhwb3J0U2lkZWNhciB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmltcG9ydCBGb2N1c1RyYXAgZnJvbSAnLi9UcmFwJztcbmltcG9ydCB7IG1lZGl1bVNpZGVjYXIgfSBmcm9tICcuL21lZGl1bSc7XG5leHBvcnQgZGVmYXVsdCBleHBvcnRTaWRlY2FyKG1lZGl1bVNpZGVjYXIsIEZvY3VzVHJhcCk7IiwgImltcG9ydCB7IF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbEJhciB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyJztcbmltcG9ydCB7IHN0eWxlU2luZ2xldG9uIH0gZnJvbSAncmVhY3Qtc3R5bGUtc2luZ2xldG9uJztcbmltcG9ydCB7IG5vblBhc3NpdmUgfSBmcm9tICcuL2FnZ3Jlc2l2ZUNhcHR1cmUnO1xuaW1wb3J0IHsgaGFuZGxlU2Nyb2xsLCBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZCB9IGZyb20gJy4vaGFuZGxlU2Nyb2xsJztcbmV4cG9ydCB2YXIgZ2V0VG91Y2hYWSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnY2hhbmdlZFRvdWNoZXMnIGluIGV2ZW50ID8gW2V2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFgsIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFldIDogWzAsIDBdO1xufTtcbmV4cG9ydCB2YXIgZ2V0RGVsdGFYWSA9IGZ1bmN0aW9uIChldmVudCkgeyByZXR1cm4gW2V2ZW50LmRlbHRhWCwgZXZlbnQuZGVsdGFZXTsgfTtcbnZhciBleHRyYWN0UmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgIHJldHVybiByZWYgJiYgJ2N1cnJlbnQnIGluIHJlZiA/IHJlZi5jdXJyZW50IDogcmVmO1xufTtcbnZhciBkZWx0YUNvbXBhcmUgPSBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4geFswXSA9PT0geVswXSAmJiB4WzFdID09PSB5WzFdOyB9O1xudmFyIGdlbmVyYXRlU3R5bGUgPSBmdW5jdGlvbiAoaWQpIHsgcmV0dXJuIFwiXFxuICAuYmxvY2staW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQsIFwiIHtwb2ludGVyLWV2ZW50czogbm9uZTt9XFxuICAuYWxsb3ctaW50ZXJhY3Rpdml0eS1cIikuY29uY2F0KGlkLCBcIiB7cG9pbnRlci1ldmVudHM6IGFsbDt9XFxuXCIpOyB9O1xudmFyIGlkQ291bnRlciA9IDA7XG52YXIgbG9ja1N0YWNrID0gW107XG5leHBvcnQgZnVuY3Rpb24gUmVtb3ZlU2Nyb2xsU2lkZUNhcihwcm9wcykge1xuICAgIHZhciBzaG91bGRQcmV2ZW50UXVldWUgPSBSZWFjdC51c2VSZWYoW10pO1xuICAgIHZhciB0b3VjaFN0YXJ0UmVmID0gUmVhY3QudXNlUmVmKFswLCAwXSk7XG4gICAgdmFyIGFjdGl2ZUF4aXMgPSBSZWFjdC51c2VSZWYoKTtcbiAgICB2YXIgaWQgPSBSZWFjdC51c2VTdGF0ZShpZENvdW50ZXIrKylbMF07XG4gICAgdmFyIFN0eWxlID0gUmVhY3QudXNlU3RhdGUoc3R5bGVTaW5nbGV0b24pWzBdO1xuICAgIHZhciBsYXN0UHJvcHMgPSBSZWFjdC51c2VSZWYocHJvcHMpO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxhc3RQcm9wcy5jdXJyZW50ID0gcHJvcHM7XG4gICAgfSwgW3Byb3BzXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHByb3BzLmluZXJ0KSB7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJibG9jay1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpO1xuICAgICAgICAgICAgdmFyIGFsbG93XzEgPSBfX3NwcmVhZEFycmF5KFtwcm9wcy5sb2NrUmVmLmN1cnJlbnRdLCAocHJvcHMuc2hhcmRzIHx8IFtdKS5tYXAoZXh0cmFjdFJlZiksIHRydWUpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgIGFsbG93XzEuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5hZGQoXCJhbGxvdy1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpOyB9KTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwiYmxvY2staW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQpKTtcbiAgICAgICAgICAgICAgICBhbGxvd18xLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5jbGFzc0xpc3QucmVtb3ZlKFwiYWxsb3ctaW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQpKTsgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9LCBbcHJvcHMuaW5lcnQsIHByb3BzLmxvY2tSZWYuY3VycmVudCwgcHJvcHMuc2hhcmRzXSk7XG4gICAgdmFyIHNob3VsZENhbmNlbEV2ZW50ID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50LCBwYXJlbnQpIHtcbiAgICAgICAgaWYgKCgndG91Y2hlcycgaW4gZXZlbnQgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPT09IDIpIHx8IChldmVudC50eXBlID09PSAnd2hlZWwnICYmIGV2ZW50LmN0cmxLZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gIWxhc3RQcm9wcy5jdXJyZW50LmFsbG93UGluY2hab29tO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b3VjaCA9IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICB2YXIgdG91Y2hTdGFydCA9IHRvdWNoU3RhcnRSZWYuY3VycmVudDtcbiAgICAgICAgdmFyIGRlbHRhWCA9ICdkZWx0YVgnIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFYIDogdG91Y2hTdGFydFswXSAtIHRvdWNoWzBdO1xuICAgICAgICB2YXIgZGVsdGFZID0gJ2RlbHRhWScgaW4gZXZlbnQgPyBldmVudC5kZWx0YVkgOiB0b3VjaFN0YXJ0WzFdIC0gdG91Y2hbMV07XG4gICAgICAgIHZhciBjdXJyZW50QXhpcztcbiAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgdmFyIG1vdmVEaXJlY3Rpb24gPSBNYXRoLmFicyhkZWx0YVgpID4gTWF0aC5hYnMoZGVsdGFZKSA/ICdoJyA6ICd2JztcbiAgICAgICAgLy8gYWxsb3cgaG9yaXpvbnRhbCB0b3VjaCBtb3ZlIG9uIFJhbmdlIGlucHV0cy4gVGhleSB3aWxsIG5vdCBjYXVzZSBhbnkgc2Nyb2xsXG4gICAgICAgIGlmICgndG91Y2hlcycgaW4gZXZlbnQgJiYgbW92ZURpcmVjdGlvbiA9PT0gJ2gnICYmIHRhcmdldC50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24gPSBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZChtb3ZlRGlyZWN0aW9uLCB0YXJnZXQpO1xuICAgICAgICBpZiAoIWNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBjdXJyZW50QXhpcyA9IG1vdmVEaXJlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50QXhpcyA9IG1vdmVEaXJlY3Rpb24gPT09ICd2JyA/ICdoJyA6ICd2JztcbiAgICAgICAgICAgIGNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24gPSBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZChtb3ZlRGlyZWN0aW9uLCB0YXJnZXQpO1xuICAgICAgICAgICAgLy8gb3RoZXIgYXhpcyBtaWdodCBiZSBub3Qgc2Nyb2xsYWJsZVxuICAgICAgICB9XG4gICAgICAgIGlmICghY2FuQmVTY3JvbGxlZEluTWFpbkRpcmVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYWN0aXZlQXhpcy5jdXJyZW50ICYmICdjaGFuZ2VkVG91Y2hlcycgaW4gZXZlbnQgJiYgKGRlbHRhWCB8fCBkZWx0YVkpKSB7XG4gICAgICAgICAgICBhY3RpdmVBeGlzLmN1cnJlbnQgPSBjdXJyZW50QXhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN1cnJlbnRBeGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FuY2VsaW5nQXhpcyA9IGFjdGl2ZUF4aXMuY3VycmVudCB8fCBjdXJyZW50QXhpcztcbiAgICAgICAgcmV0dXJuIGhhbmRsZVNjcm9sbChjYW5jZWxpbmdBeGlzLCBwYXJlbnQsIGV2ZW50LCBjYW5jZWxpbmdBeGlzID09PSAnaCcgPyBkZWx0YVggOiBkZWx0YVksIHRydWUpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2hvdWxkUHJldmVudCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfZXZlbnQpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0gX2V2ZW50O1xuICAgICAgICBpZiAoIWxvY2tTdGFjay5sZW5ndGggfHwgbG9ja1N0YWNrW2xvY2tTdGFjay5sZW5ndGggLSAxXSAhPT0gU3R5bGUpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgbGFzdCBhY3RpdmVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsdGEgPSAnZGVsdGFZJyBpbiBldmVudCA/IGdldERlbHRhWFkoZXZlbnQpIDogZ2V0VG91Y2hYWShldmVudCk7XG4gICAgICAgIHZhciBzb3VyY2VFdmVudCA9IHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50LmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5uYW1lID09PSBldmVudC50eXBlICYmIChlLnRhcmdldCA9PT0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnRhcmdldCA9PT0gZS5zaGFkb3dQYXJlbnQpICYmIGRlbHRhQ29tcGFyZShlLmRlbHRhLCBkZWx0YSk7IH0pWzBdO1xuICAgICAgICAvLyBzZWxmIGV2ZW50LCBhbmQgc2hvdWxkIGJlIGNhbmNlbGVkXG4gICAgICAgIGlmIChzb3VyY2VFdmVudCAmJiBzb3VyY2VFdmVudC5zaG91bGQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdXRzaWRlIG9yIHNoYXJkIGV2ZW50XG4gICAgICAgIGlmICghc291cmNlRXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBzaGFyZE5vZGVzID0gKGxhc3RQcm9wcy5jdXJyZW50LnNoYXJkcyB8fCBbXSlcbiAgICAgICAgICAgICAgICAubWFwKGV4dHJhY3RSZWYpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUuY29udGFpbnMoZXZlbnQudGFyZ2V0KTsgfSk7XG4gICAgICAgICAgICB2YXIgc2hvdWxkU3RvcCA9IHNoYXJkTm9kZXMubGVuZ3RoID4gMCA/IHNob3VsZENhbmNlbEV2ZW50KGV2ZW50LCBzaGFyZE5vZGVzWzBdKSA6ICFsYXN0UHJvcHMuY3VycmVudC5ub0lzb2xhdGlvbjtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdG9wKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmNhbmNlbGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgdmFyIHNob3VsZENhbmNlbCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuYW1lLCBkZWx0YSwgdGFyZ2V0LCBzaG91bGQpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0geyBuYW1lOiBuYW1lLCBkZWx0YTogZGVsdGEsIHRhcmdldDogdGFyZ2V0LCBzaG91bGQ6IHNob3VsZCwgc2hhZG93UGFyZW50OiBnZXRPdXRlcm1vc3RTaGFkb3dQYXJlbnQodGFyZ2V0KSB9O1xuICAgICAgICBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5wdXNoKGV2ZW50KTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudCA9IHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50LmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSAhPT0gZXZlbnQ7IH0pO1xuICAgICAgICB9LCAxKTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNjcm9sbFRvdWNoU3RhcnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdG91Y2hTdGFydFJlZi5jdXJyZW50ID0gZ2V0VG91Y2hYWShldmVudCk7XG4gICAgICAgIGFjdGl2ZUF4aXMuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNjcm9sbFdoZWVsID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHNob3VsZENhbmNlbChldmVudC50eXBlLCBnZXREZWx0YVhZKGV2ZW50KSwgZXZlbnQudGFyZ2V0LCBzaG91bGRDYW5jZWxFdmVudChldmVudCwgcHJvcHMubG9ja1JlZi5jdXJyZW50KSk7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxUb3VjaE1vdmUgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsKGV2ZW50LnR5cGUsIGdldFRvdWNoWFkoZXZlbnQpLCBldmVudC50YXJnZXQsIHNob3VsZENhbmNlbEV2ZW50KGV2ZW50LCBwcm9wcy5sb2NrUmVmLmN1cnJlbnQpKTtcbiAgICB9LCBbXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG9ja1N0YWNrLnB1c2goU3R5bGUpO1xuICAgICAgICBwcm9wcy5zZXRDYWxsYmFja3Moe1xuICAgICAgICAgICAgb25TY3JvbGxDYXB0dXJlOiBzY3JvbGxXaGVlbCxcbiAgICAgICAgICAgIG9uV2hlZWxDYXB0dXJlOiBzY3JvbGxXaGVlbCxcbiAgICAgICAgICAgIG9uVG91Y2hNb3ZlQ2FwdHVyZTogc2Nyb2xsVG91Y2hNb3ZlLFxuICAgICAgICB9KTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBzaG91bGRQcmV2ZW50LCBub25QYXNzaXZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBzY3JvbGxUb3VjaFN0YXJ0LCBub25QYXNzaXZlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvY2tTdGFjayA9IGxvY2tTdGFjay5maWx0ZXIoZnVuY3Rpb24gKGluc3QpIHsgcmV0dXJuIGluc3QgIT09IFN0eWxlOyB9KTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBzaG91bGRQcmV2ZW50LCBub25QYXNzaXZlKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBzY3JvbGxUb3VjaFN0YXJ0LCBub25QYXNzaXZlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHJlbW92ZVNjcm9sbEJhciA9IHByb3BzLnJlbW92ZVNjcm9sbEJhciwgaW5lcnQgPSBwcm9wcy5pbmVydDtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIGluZXJ0ID8gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IGdlbmVyYXRlU3R5bGUoaWQpIH0pIDogbnVsbCxcbiAgICAgICAgcmVtb3ZlU2Nyb2xsQmFyID8gUmVhY3QuY3JlYXRlRWxlbWVudChSZW1vdmVTY3JvbGxCYXIsIHsgZ2FwTW9kZTogcHJvcHMuZ2FwTW9kZSB9KSA6IG51bGwpKTtcbn1cbmZ1bmN0aW9uIGdldE91dGVybW9zdFNoYWRvd1BhcmVudChub2RlKSB7XG4gICAgdmFyIHNoYWRvd1BhcmVudCA9IG51bGw7XG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICBzaGFkb3dQYXJlbnQgPSBub2RlLmhvc3Q7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBzaGFkb3dQYXJlbnQ7XG59XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVTaW5nbGV0b24gfSBmcm9tICdyZWFjdC1zdHlsZS1zaW5nbGV0b24nO1xuaW1wb3J0IHsgZnVsbFdpZHRoQ2xhc3NOYW1lLCB6ZXJvUmlnaHRDbGFzc05hbWUsIG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSwgcmVtb3ZlZEJhclNpemVWYXJpYWJsZSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldEdhcFdpZHRoIH0gZnJvbSAnLi91dGlscyc7XG52YXIgU3R5bGUgPSBzdHlsZVNpbmdsZXRvbigpO1xuZXhwb3J0IHZhciBsb2NrQXR0cmlidXRlID0gJ2RhdGEtc2Nyb2xsLWxvY2tlZCc7XG4vLyBpbXBvcnRhbnQgdGlwIC0gb25jZSB3ZSBtZWFzdXJlIHNjcm9sbEJhciB3aWR0aCBhbmQgcmVtb3ZlIHRoZW1cbi8vIHdlIGNvdWxkIG5vdCByZXBlYXQgdGhpcyBvcGVyYXRpb25cbi8vIHRodXMgd2UgYXJlIHVzaW5nIHN0eWxlLXNpbmdsZXRvbiAtIG9ubHkgdGhlIGZpcnN0IFwieWV0IGNvcnJlY3RcIiBzdHlsZSB3aWxsIGJlIGFwcGxpZWQuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24gKF9hLCBhbGxvd1JlbGF0aXZlLCBnYXBNb2RlLCBpbXBvcnRhbnQpIHtcbiAgICB2YXIgbGVmdCA9IF9hLmxlZnQsIHRvcCA9IF9hLnRvcCwgcmlnaHQgPSBfYS5yaWdodCwgZ2FwID0gX2EuZ2FwO1xuICAgIGlmIChnYXBNb2RlID09PSB2b2lkIDApIHsgZ2FwTW9kZSA9ICdtYXJnaW4nOyB9XG4gICAgcmV0dXJuIFwiXFxuICAuXCIuY29uY2F0KG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSwgXCIge1xcbiAgIG92ZXJmbG93OiBoaWRkZW4gXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgIHBhZGRpbmctcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIGJvZHlbXCIpLmNvbmNhdChsb2NrQXR0cmlidXRlLCBcIl0ge1xcbiAgICBvdmVyZmxvdzogaGlkZGVuIFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcXG4gICAgXCIpLmNvbmNhdChbXG4gICAgICAgIGFsbG93UmVsYXRpdmUgJiYgXCJwb3NpdGlvbjogcmVsYXRpdmUgXCIuY29uY2F0KGltcG9ydGFudCwgXCI7XCIpLFxuICAgICAgICBnYXBNb2RlID09PSAnbWFyZ2luJyAmJlxuICAgICAgICAgICAgXCJcXG4gICAgcGFkZGluZy1sZWZ0OiBcIi5jb25jYXQobGVmdCwgXCJweDtcXG4gICAgcGFkZGluZy10b3A6IFwiKS5jb25jYXQodG9wLCBcInB4O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiBcIikuY29uY2F0KHJpZ2h0LCBcInB4O1xcbiAgICBtYXJnaW4tbGVmdDowO1xcbiAgICBtYXJnaW4tdG9wOjA7XFxuICAgIG1hcmdpbi1yaWdodDogXCIpLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgICBcIiksXG4gICAgICAgIGdhcE1vZGUgPT09ICdwYWRkaW5nJyAmJiBcInBhZGRpbmctcmlnaHQ6IFwiLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1wiKSxcbiAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJycpLCBcIlxcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIHtcXG4gICAgcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoZnVsbFdpZHRoQ2xhc3NOYW1lLCBcIiB7XFxuICAgIG1hcmdpbi1yaWdodDogXCIpLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIC5cIikuY29uY2F0KHplcm9SaWdodENsYXNzTmFtZSwgXCIge1xcbiAgICByaWdodDogMCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIgLlwiKS5jb25jYXQoZnVsbFdpZHRoQ2xhc3NOYW1lLCBcIiB7XFxuICAgIG1hcmdpbi1yaWdodDogMCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIGJvZHlbXCIpLmNvbmNhdChsb2NrQXR0cmlidXRlLCBcIl0ge1xcbiAgICBcIikuY29uY2F0KHJlbW92ZWRCYXJTaXplVmFyaWFibGUsIFwiOiBcIikuY29uY2F0KGdhcCwgXCJweDtcXG4gIH1cXG5cIik7XG59O1xudmFyIGdldEN1cnJlbnRVc2VDb3VudGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjb3VudGVyID0gcGFyc2VJbnQoZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUobG9ja0F0dHJpYnV0ZSkgfHwgJzAnLCAxMCk7XG4gICAgcmV0dXJuIGlzRmluaXRlKGNvdW50ZXIpID8gY291bnRlciA6IDA7XG59O1xuZXhwb3J0IHZhciB1c2VMb2NrQXR0cmlidXRlID0gZnVuY3Rpb24gKCkge1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUsIChnZXRDdXJyZW50VXNlQ291bnRlcigpICsgMSkudG9TdHJpbmcoKSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbmV3Q291bnRlciA9IGdldEN1cnJlbnRVc2VDb3VudGVyKCkgLSAxO1xuICAgICAgICAgICAgaWYgKG5ld0NvdW50ZXIgPD0gMCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUobG9ja0F0dHJpYnV0ZSwgbmV3Q291bnRlci50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG59O1xuLyoqXG4gKiBSZW1vdmVzIHBhZ2Ugc2Nyb2xsYmFyIGFuZCBibG9ja3MgcGFnZSBzY3JvbGwgd2hlbiBtb3VudGVkXG4gKi9cbmV4cG9ydCB2YXIgUmVtb3ZlU2Nyb2xsQmFyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIG5vUmVsYXRpdmUgPSBfYS5ub1JlbGF0aXZlLCBub0ltcG9ydGFudCA9IF9hLm5vSW1wb3J0YW50LCBfYiA9IF9hLmdhcE1vZGUsIGdhcE1vZGUgPSBfYiA9PT0gdm9pZCAwID8gJ21hcmdpbicgOiBfYjtcbiAgICB1c2VMb2NrQXR0cmlidXRlKCk7XG4gICAgLypcbiAgICAgZ2FwIHdpbGwgYmUgbWVhc3VyZWQgb24gZXZlcnkgY29tcG9uZW50IG1vdW50XG4gICAgIGhvd2V2ZXIgaXQgd2lsbCBiZSB1c2VkIG9ubHkgYnkgdGhlIFwiZmlyc3RcIiBpbnZvY2F0aW9uXG4gICAgIGR1ZSB0byBzaW5nbGV0b24gbmF0dXJlIG9mIDxTdHlsZVxuICAgICAqL1xuICAgIHZhciBnYXAgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldEdhcFdpZHRoKGdhcE1vZGUpOyB9LCBbZ2FwTW9kZV0pO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlLCB7IHN0eWxlczogZ2V0U3R5bGVzKGdhcCwgIW5vUmVsYXRpdmUsIGdhcE1vZGUsICFub0ltcG9ydGFudCA/ICchaW1wb3J0YW50JyA6ICcnKSB9KTtcbn07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVzaGVldFNpbmdsZXRvbiB9IGZyb20gJy4vc2luZ2xldG9uJztcbi8qKlxuICogY3JlYXRlcyBhIGhvb2sgdG8gY29udHJvbCBzdHlsZSBzaW5nbGV0b25cbiAqIEBzZWUge0BsaW5rIHN0eWxlU2luZ2xldG9ufSBmb3IgYSBzYWZlciBjb21wb25lbnQgdmVyc2lvblxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgdXNlU3R5bGUgPSBzdHlsZUhvb2tTaW5nbGV0b24oKTtcbiAqIC8vL1xuICogdXNlU3R5bGUoJ2JvZHkgeyBvdmVyZmxvdzogaGlkZGVufScpO1xuICovXG5leHBvcnQgdmFyIHN0eWxlSG9va1NpbmdsZXRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXQgPSBzdHlsZXNoZWV0U2luZ2xldG9uKCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdHlsZXMsIGlzRHluYW1pYykge1xuICAgICAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2hlZXQuYWRkKHN0eWxlcyk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNoZWV0LnJlbW92ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgW3N0eWxlcyAmJiBpc0R5bmFtaWNdKTtcbiAgICB9O1xufTtcbiIsICJ2YXIgY3VycmVudE5vbmNlO1xuZXhwb3J0IHZhciBzZXROb25jZSA9IGZ1bmN0aW9uIChub25jZSkge1xuICAgIGN1cnJlbnROb25jZSA9IG5vbmNlO1xufTtcbmV4cG9ydCB2YXIgZ2V0Tm9uY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGN1cnJlbnROb25jZSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE5vbmNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gX193ZWJwYWNrX25vbmNlX187XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwgImltcG9ydCB7IGdldE5vbmNlIH0gZnJvbSAnZ2V0LW5vbmNlJztcbmZ1bmN0aW9uIG1ha2VTdHlsZVRhZygpIHtcbiAgICBpZiAoIWRvY3VtZW50KVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICB0YWcudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgdmFyIG5vbmNlID0gZ2V0Tm9uY2UoKTtcbiAgICBpZiAobm9uY2UpIHtcbiAgICAgICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBub25jZSk7XG4gICAgfVxuICAgIHJldHVybiB0YWc7XG59XG5mdW5jdGlvbiBpbmplY3RTdHlsZXModGFnLCBjc3MpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHRhZy5zdHlsZVNoZWV0KSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGFnLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbnNlcnRTdHlsZVRhZyh0YWcpIHtcbiAgICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHRhZyk7XG59XG5leHBvcnQgdmFyIHN0eWxlc2hlZXRTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBzdHlsZXNoZWV0ID0gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBhZGQ6IGZ1bmN0aW9uIChzdHlsZSkge1xuICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICgoc3R5bGVzaGVldCA9IG1ha2VTdHlsZVRhZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBpbmplY3RTdHlsZXMoc3R5bGVzaGVldCwgc3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnRTdHlsZVRhZyhzdHlsZXNoZWV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY291bnRlci0tO1xuICAgICAgICAgICAgaWYgKCFjb3VudGVyICYmIHN0eWxlc2hlZXQpIHtcbiAgICAgICAgICAgICAgICBzdHlsZXNoZWV0LnBhcmVudE5vZGUgJiYgc3R5bGVzaGVldC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlc2hlZXQpO1xuICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59O1xuIiwgImltcG9ydCB7IHN0eWxlSG9va1NpbmdsZXRvbiB9IGZyb20gJy4vaG9vayc7XG4vKipcbiAqIGNyZWF0ZSBhIENvbXBvbmVudCB0byBhZGQgc3R5bGVzIG9uIGRlbWFuZFxuICogLSBzdHlsZXMgYXJlIGFkZGVkIHdoZW4gZmlyc3QgaW5zdGFuY2UgaXMgbW91bnRlZFxuICogLSBzdHlsZXMgYXJlIHJlbW92ZWQgd2hlbiB0aGUgbGFzdCBpbnN0YW5jZSBpcyB1bm1vdW50ZWRcbiAqIC0gY2hhbmdpbmcgc3R5bGVzIGluIHJ1bnRpbWUgZG9lcyBub3RoaW5nIHVubGVzcyBkeW5hbWljIGlzIHNldC4gQnV0IHdpdGggbXVsdGlwbGUgY29tcG9uZW50cyB0aGF0IGNhbiBsZWFkIHRvIHRoZSB1bmRlZmluZWQgYmVoYXZpb3JcbiAqL1xuZXhwb3J0IHZhciBzdHlsZVNpbmdsZXRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXNlU3R5bGUgPSBzdHlsZUhvb2tTaW5nbGV0b24oKTtcbiAgICB2YXIgU2hlZXQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIHN0eWxlcyA9IF9hLnN0eWxlcywgZHluYW1pYyA9IF9hLmR5bmFtaWM7XG4gICAgICAgIHVzZVN0eWxlKHN0eWxlcywgZHluYW1pYyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIFNoZWV0O1xufTtcbiIsICJleHBvcnQgdmFyIHplcm9HYXAgPSB7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgZ2FwOiAwLFxufTtcbnZhciBwYXJzZSA9IGZ1bmN0aW9uICh4KSB7IHJldHVybiBwYXJzZUludCh4IHx8ICcnLCAxMCkgfHwgMDsgfTtcbnZhciBnZXRPZmZzZXQgPSBmdW5jdGlvbiAoZ2FwTW9kZSkge1xuICAgIHZhciBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpO1xuICAgIHZhciBsZWZ0ID0gY3NbZ2FwTW9kZSA9PT0gJ3BhZGRpbmcnID8gJ3BhZGRpbmdMZWZ0JyA6ICdtYXJnaW5MZWZ0J107XG4gICAgdmFyIHRvcCA9IGNzW2dhcE1vZGUgPT09ICdwYWRkaW5nJyA/ICdwYWRkaW5nVG9wJyA6ICdtYXJnaW5Ub3AnXTtcbiAgICB2YXIgcmlnaHQgPSBjc1tnYXBNb2RlID09PSAncGFkZGluZycgPyAncGFkZGluZ1JpZ2h0JyA6ICdtYXJnaW5SaWdodCddO1xuICAgIHJldHVybiBbcGFyc2UobGVmdCksIHBhcnNlKHRvcCksIHBhcnNlKHJpZ2h0KV07XG59O1xuZXhwb3J0IHZhciBnZXRHYXBXaWR0aCA9IGZ1bmN0aW9uIChnYXBNb2RlKSB7XG4gICAgaWYgKGdhcE1vZGUgPT09IHZvaWQgMCkgeyBnYXBNb2RlID0gJ21hcmdpbic7IH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHplcm9HYXA7XG4gICAgfVxuICAgIHZhciBvZmZzZXRzID0gZ2V0T2Zmc2V0KGdhcE1vZGUpO1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgIHZhciB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IG9mZnNldHNbMF0sXG4gICAgICAgIHRvcDogb2Zmc2V0c1sxXSxcbiAgICAgICAgcmlnaHQ6IG9mZnNldHNbMl0sXG4gICAgICAgIGdhcDogTWF0aC5tYXgoMCwgd2luZG93V2lkdGggLSBkb2N1bWVudFdpZHRoICsgb2Zmc2V0c1syXSAtIG9mZnNldHNbMF0pLFxuICAgIH07XG59O1xuIiwgInZhciBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IHZhciBub25QYXNzaXZlID0gcGFzc2l2ZVN1cHBvcnRlZCA/IHsgcGFzc2l2ZTogZmFsc2UgfSA6IGZhbHNlO1xuIiwgInZhciBhbHdheXNDb250YWluc1Njcm9sbCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gdGV4dGFyZWEgd2lsbCBhbHdheXMgX2NvbnRhaW5fIHNjcm9sbCBpbnNpZGUgc2VsZi4gSXQgb25seSBjYW4gYmUgaGlkZGVuXG4gICAgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJztcbn07XG52YXIgZWxlbWVudENhbkJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAobm9kZSwgb3ZlcmZsb3cpIHtcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG4gICAgcmV0dXJuIChcbiAgICAvLyBub3Qtbm90LXNjcm9sbGFibGVcbiAgICBzdHlsZXNbb3ZlcmZsb3ddICE9PSAnaGlkZGVuJyAmJlxuICAgICAgICAvLyBjb250YWlucyBzY3JvbGwgaW5zaWRlIHNlbGZcbiAgICAgICAgIShzdHlsZXMub3ZlcmZsb3dZID09PSBzdHlsZXMub3ZlcmZsb3dYICYmICFhbHdheXNDb250YWluc1Njcm9sbChub2RlKSAmJiBzdHlsZXNbb3ZlcmZsb3ddID09PSAndmlzaWJsZScpKTtcbn07XG52YXIgZWxlbWVudENvdWxkQmVWU2Nyb2xsZWQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZWxlbWVudENhbkJlU2Nyb2xsZWQobm9kZSwgJ292ZXJmbG93WScpOyB9O1xudmFyIGVsZW1lbnRDb3VsZEJlSFNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGVsZW1lbnRDYW5CZVNjcm9sbGVkKG5vZGUsICdvdmVyZmxvd1gnKTsgfTtcbmV4cG9ydCB2YXIgbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHZhciBjdXJyZW50ID0gbm9kZTtcbiAgICBkbyB7XG4gICAgICAgIC8vIFNraXAgb3ZlciBzaGFkb3cgcm9vdFxuICAgICAgICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgIT09ICd1bmRlZmluZWQnICYmIGN1cnJlbnQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBpc1Njcm9sbGFibGUgPSBlbGVtZW50Q291bGRCZVNjcm9sbGVkKGF4aXMsIGN1cnJlbnQpO1xuICAgICAgICBpZiAoaXNTY3JvbGxhYmxlKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBnZXRTY3JvbGxWYXJpYWJsZXMoYXhpcywgY3VycmVudCksIHNjcm9sbEhlaWdodCA9IF9hWzFdLCBjbGllbnRIZWlnaHQgPSBfYVsyXTtcbiAgICAgICAgICAgIGlmIChzY3JvbGxIZWlnaHQgPiBjbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnROb2RlO1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudCAhPT0gb3duZXJEb2N1bWVudC5ib2R5KTtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xudmFyIGdldFZTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2Nyb2xsVG9wID0gX2Euc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgPSBfYS5zY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCA9IF9hLmNsaWVudEhlaWdodDtcbiAgICByZXR1cm4gW1xuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgICAgY2xpZW50SGVpZ2h0LFxuICAgIF07XG59O1xudmFyIGdldEhTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2Nyb2xsTGVmdCA9IF9hLnNjcm9sbExlZnQsIHNjcm9sbFdpZHRoID0gX2Euc2Nyb2xsV2lkdGgsIGNsaWVudFdpZHRoID0gX2EuY2xpZW50V2lkdGg7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsV2lkdGgsXG4gICAgICAgIGNsaWVudFdpZHRoLFxuICAgIF07XG59O1xudmFyIGVsZW1lbnRDb3VsZEJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHJldHVybiBheGlzID09PSAndicgPyBlbGVtZW50Q291bGRCZVZTY3JvbGxlZChub2RlKSA6IGVsZW1lbnRDb3VsZEJlSFNjcm9sbGVkKG5vZGUpO1xufTtcbnZhciBnZXRTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHJldHVybiBheGlzID09PSAndicgPyBnZXRWU2Nyb2xsVmFyaWFibGVzKG5vZGUpIDogZ2V0SFNjcm9sbFZhcmlhYmxlcyhub2RlKTtcbn07XG52YXIgZ2V0RGlyZWN0aW9uRmFjdG9yID0gZnVuY3Rpb24gKGF4aXMsIGRpcmVjdGlvbikge1xuICAgIC8qKlxuICAgICAqIElmIHRoZSBlbGVtZW50J3MgZGlyZWN0aW9uIGlzIHJ0bCAocmlnaHQtdG8tbGVmdCksIHRoZW4gc2Nyb2xsTGVmdCBpcyAwIHdoZW4gdGhlIHNjcm9sbGJhciBpcyBhdCBpdHMgcmlnaHRtb3N0IHBvc2l0aW9uLFxuICAgICAqIGFuZCB0aGVuIGluY3JlYXNpbmdseSBuZWdhdGl2ZSBhcyB5b3Ugc2Nyb2xsIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgY29udGVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L3Njcm9sbExlZnRcbiAgICAgKi9cbiAgICByZXR1cm4gYXhpcyA9PT0gJ2gnICYmIGRpcmVjdGlvbiA9PT0gJ3J0bCcgPyAtMSA6IDE7XG59O1xuZXhwb3J0IHZhciBoYW5kbGVTY3JvbGwgPSBmdW5jdGlvbiAoYXhpcywgZW5kVGFyZ2V0LCBldmVudCwgc291cmNlRGVsdGEsIG5vT3ZlcnNjcm9sbCkge1xuICAgIHZhciBkaXJlY3Rpb25GYWN0b3IgPSBnZXREaXJlY3Rpb25GYWN0b3IoYXhpcywgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZW5kVGFyZ2V0KS5kaXJlY3Rpb24pO1xuICAgIHZhciBkZWx0YSA9IGRpcmVjdGlvbkZhY3RvciAqIHNvdXJjZURlbHRhO1xuICAgIC8vIGZpbmQgc2Nyb2xsYWJsZSB0YXJnZXRcbiAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHZhciB0YXJnZXRJbkxvY2sgPSBlbmRUYXJnZXQuY29udGFpbnModGFyZ2V0KTtcbiAgICB2YXIgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gZmFsc2U7XG4gICAgdmFyIGlzRGVsdGFQb3NpdGl2ZSA9IGRlbHRhID4gMDtcbiAgICB2YXIgYXZhaWxhYmxlU2Nyb2xsID0gMDtcbiAgICB2YXIgYXZhaWxhYmxlU2Nyb2xsVG9wID0gMDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBfYSA9IGdldFNjcm9sbFZhcmlhYmxlcyhheGlzLCB0YXJnZXQpLCBwb3NpdGlvbiA9IF9hWzBdLCBzY3JvbGxfMSA9IF9hWzFdLCBjYXBhY2l0eSA9IF9hWzJdO1xuICAgICAgICB2YXIgZWxlbWVudFNjcm9sbCA9IHNjcm9sbF8xIC0gY2FwYWNpdHkgLSBkaXJlY3Rpb25GYWN0b3IgKiBwb3NpdGlvbjtcbiAgICAgICAgaWYgKHBvc2l0aW9uIHx8IGVsZW1lbnRTY3JvbGwpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Q291bGRCZVNjcm9sbGVkKGF4aXMsIHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVTY3JvbGwgKz0gZWxlbWVudFNjcm9sbDtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVTY3JvbGxUb3AgKz0gcG9zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICB9IHdoaWxlIChcbiAgICAvLyBwb3J0YWxlZCBjb250ZW50XG4gICAgKCF0YXJnZXRJbkxvY2sgJiYgdGFyZ2V0ICE9PSBkb2N1bWVudC5ib2R5KSB8fFxuICAgICAgICAvLyBzZWxmIGNvbnRlbnRcbiAgICAgICAgKHRhcmdldEluTG9jayAmJiAoZW5kVGFyZ2V0LmNvbnRhaW5zKHRhcmdldCkgfHwgZW5kVGFyZ2V0ID09PSB0YXJnZXQpKSk7XG4gICAgLy8gaGFuZGxlIGVwc2lsb24gYXJvdW5kIDAgKG5vbiBzdGFuZGFyZCB6b29tIGxldmVscylcbiAgICBpZiAoaXNEZWx0YVBvc2l0aXZlICYmXG4gICAgICAgICgobm9PdmVyc2Nyb2xsICYmIE1hdGguYWJzKGF2YWlsYWJsZVNjcm9sbCkgPCAxKSB8fCAoIW5vT3ZlcnNjcm9sbCAmJiBkZWx0YSA+IGF2YWlsYWJsZVNjcm9sbCkpKSB7XG4gICAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpc0RlbHRhUG9zaXRpdmUgJiZcbiAgICAgICAgKChub092ZXJzY3JvbGwgJiYgTWF0aC5hYnMoYXZhaWxhYmxlU2Nyb2xsVG9wKSA8IDEpIHx8ICghbm9PdmVyc2Nyb2xsICYmIC1kZWx0YSA+IGF2YWlsYWJsZVNjcm9sbFRvcCkpKSB7XG4gICAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBzaG91bGRDYW5jZWxTY3JvbGw7XG59O1xuIiwgImltcG9ydCB7IGV4cG9ydFNpZGVjYXIgfSBmcm9tICd1c2Utc2lkZWNhcic7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGxTaWRlQ2FyIH0gZnJvbSAnLi9TaWRlRWZmZWN0JztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbmV4cG9ydCBkZWZhdWx0IGV4cG9ydFNpZGVjYXIoZWZmZWN0Q2FyLCBSZW1vdmVTY3JvbGxTaWRlQ2FyKTtcbiIsICJpbXBvcnQgeyBfX3NwcmVhZEFycmF5cyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaGlkZU90aGVycyB9IGZyb20gJ2FyaWEtaGlkZGVuJztcbmltcG9ydCB7IEludGVyYWN0aXZpdHlEaXNhYmxlciB9IGZyb20gJy4vSW50ZXJhY3Rpdml0eURpc2FibGVyJztcbmltcG9ydCB7IGZvY3VzSGlkZGVuTWFya2VyIH0gZnJvbSAnLi9tZWRpdW0nO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xudmFyIGV4dHJhY3RSZWYgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgcmV0dXJuICdjdXJyZW50JyBpbiByZWYgPyByZWYuY3VycmVudCA6IHJlZjtcbn07XG5leHBvcnQgZnVuY3Rpb24gRWZmZWN0KF9hKSB7XG4gICAgdmFyIHNldExvY2tQcm9wcyA9IF9hLnNldExvY2tQcm9wcywgb25Fc2NhcGVLZXkgPSBfYS5vbkVzY2FwZUtleSwgb25DbGlja091dHNpZGUgPSBfYS5vbkNsaWNrT3V0c2lkZSwgc2hhcmRzID0gX2Euc2hhcmRzLCBvbkFjdGl2YXRpb24gPSBfYS5vbkFjdGl2YXRpb24sIG9uRGVhY3RpdmF0aW9uID0gX2Eub25EZWFjdGl2YXRpb24sIG5vSXNvbGF0aW9uID0gX2Eubm9Jc29sYXRpb247XG4gICAgdmFyIF9iID0gdXNlU3RhdGUodW5kZWZpbmVkKSwgYWN0aXZlTm9kZSA9IF9iWzBdLCBzZXRBY3RpdmVOb2RlID0gX2JbMV07XG4gICAgdmFyIGxhc3RFdmVudFRhcmdldCA9IHVzZVJlZihudWxsKTtcbiAgICB2YXIgbW91c2VUb3VjaGVzID0gdXNlUmVmKDApO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvbktleURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgIGlmICgoZXZlbnQuY29kZSA9PT0gJ0VzY2FwZScgfHxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudC5rZXlDb2RlID09PSAyNykgJiZcbiAgICAgICAgICAgICAgICAgICAgb25Fc2NhcGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgb25Fc2NhcGVLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fFxuICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgfHxcbiAgICAgICAgICAgICAgICAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50ICYmIGV2ZW50LmJ1dHRvbiAhPT0gMCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hhcmRzICYmXG4gICAgICAgICAgICAgICAgc2hhcmRzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoZXh0cmFjdFJlZilcbiAgICAgICAgICAgICAgICAgICAgLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChub2RlICYmIG5vZGUuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPT09IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvbkNsaWNrT3V0c2lkZSkge1xuICAgICAgICAgICAgICAgIG9uQ2xpY2tPdXRzaWRlKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgb25Nb3VzZURvd24oZXZlbnQpO1xuICAgICAgICAgICAgbW91c2VUb3VjaGVzLmN1cnJlbnQgPSBldmVudC50b3VjaGVzLmxlbmd0aDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIG1vdXNlVG91Y2hlcy5jdXJyZW50ID0gZXZlbnQudG91Y2hlcy5sZW5ndGg7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uTW91c2VEb3duKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Nb3VzZURvd24pO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSwgW2FjdGl2ZU5vZGUsIG9uQ2xpY2tPdXRzaWRlLCBvbkVzY2FwZUtleV0pO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChhY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICBpZiAob25BY3RpdmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgb25BY3RpdmF0aW9uKGFjdGl2ZU5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAob25EZWFjdGl2YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgb25EZWFjdGl2YXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSwgWyEhYWN0aXZlTm9kZV0pO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdW5kbyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH07XG4gICAgICAgIHZhciB1bm1vdW50ZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIG9uTm9kZUFjdGl2YXRpb24gPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKCFub0lzb2xhdGlvbikge1xuICAgICAgICAgICAgICAgIF91bmRvID0gaGlkZU90aGVycyhfX3NwcmVhZEFycmF5cyhbbm9kZV0sIChzaGFyZHMgfHwgW10pLm1hcChleHRyYWN0UmVmKSksIGRvY3VtZW50LmJvZHksIGZvY3VzSGlkZGVuTWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEFjdGl2ZU5vZGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZTsgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvbk5vZGVEZWFjdGl2YXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdW5kbygpO1xuICAgICAgICAgICAgaWYgKCF1bm1vdW50ZWQpIHtcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVOb2RlKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXRMb2NrUHJvcHMoe1xuICAgICAgICAgICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblRvdWNoU3RhcnQ6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkFjdGl2YXRpb246IG9uTm9kZUFjdGl2YXRpb24sXG4gICAgICAgICAgICBvbkRlYWN0aXZhdGlvbjogb25Ob2RlRGVhY3RpdmF0aW9uXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdW5tb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldExvY2tQcm9wcyhmYWxzZSk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEludGVyYWN0aXZpdHlEaXNhYmxlciwgbnVsbCk7XG59XG4iLCAidmFyIGdldERlZmF1bHRQYXJlbnQgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHNhbXBsZVRhcmdldCA9IEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXRbMF0gOiBvcmlnaW5hbFRhcmdldDtcbiAgICByZXR1cm4gc2FtcGxlVGFyZ2V0Lm93bmVyRG9jdW1lbnQuYm9keTtcbn07XG52YXIgY291bnRlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG52YXIgdW5jb250cm9sbGVkTm9kZXMgPSBuZXcgV2Vha01hcCgpO1xudmFyIG1hcmtlck1hcCA9IHt9O1xudmFyIGxvY2tDb3VudCA9IDA7XG52YXIgdW53cmFwSG9zdCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUgJiYgKG5vZGUuaG9zdCB8fCB1bndyYXBIb3N0KG5vZGUucGFyZW50Tm9kZSkpO1xufTtcbnZhciBjb3JyZWN0VGFyZ2V0cyA9IGZ1bmN0aW9uIChwYXJlbnQsIHRhcmdldHMpIHtcbiAgICByZXR1cm4gdGFyZ2V0c1xuICAgICAgICAubWFwKGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKHBhcmVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb3JyZWN0ZWRUYXJnZXQgPSB1bndyYXBIb3N0KHRhcmdldCk7XG4gICAgICAgIGlmIChjb3JyZWN0ZWRUYXJnZXQgJiYgcGFyZW50LmNvbnRhaW5zKGNvcnJlY3RlZFRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JyZWN0ZWRUYXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcignYXJpYS1oaWRkZW4nLCB0YXJnZXQsICdpbiBub3QgY29udGFpbmVkIGluc2lkZScsIHBhcmVudCwgJy4gRG9pbmcgbm90aGluZycpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiBCb29sZWFuKHgpOyB9KTtcbn07XG4vKipcbiAqIE1hcmtzIGV2ZXJ5dGhpbmcgZXhjZXB0IGdpdmVuIG5vZGUob3Igbm9kZXMpIGFzIGFyaWEtaGlkZGVuXG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBFbGVtZW50W119IG9yaWdpbmFsVGFyZ2V0IC0gZWxlbWVudHMgdG8ga2VlcCBvbiB0aGUgcGFnZVxuICogQHBhcmFtIFtwYXJlbnROb2RlXSAtIHRvcCBlbGVtZW50LCBkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW21hcmtlck5hbWVdIC0gYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIGV2ZXJ5IG5vZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbY29udHJvbEF0dHJpYnV0ZV0gLSBodG1sIEF0dHJpYnV0ZSB0byBjb250cm9sXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xudmFyIGFwcGx5QXR0cmlidXRlVG9PdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUsIGNvbnRyb2xBdHRyaWJ1dGUpIHtcbiAgICB2YXIgdGFyZ2V0cyA9IGNvcnJlY3RUYXJnZXRzKHBhcmVudE5vZGUsIEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXQgOiBbb3JpZ2luYWxUYXJnZXRdKTtcbiAgICBpZiAoIW1hcmtlck1hcFttYXJrZXJOYW1lXSkge1xuICAgICAgICBtYXJrZXJNYXBbbWFya2VyTmFtZV0gPSBuZXcgV2Vha01hcCgpO1xuICAgIH1cbiAgICB2YXIgbWFya2VyQ291bnRlciA9IG1hcmtlck1hcFttYXJrZXJOYW1lXTtcbiAgICB2YXIgaGlkZGVuTm9kZXMgPSBbXTtcbiAgICB2YXIgZWxlbWVudHNUb0tlZXAgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGVsZW1lbnRzVG9TdG9wID0gbmV3IFNldCh0YXJnZXRzKTtcbiAgICB2YXIga2VlcCA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICBpZiAoIWVsIHx8IGVsZW1lbnRzVG9LZWVwLmhhcyhlbCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50c1RvS2VlcC5hZGQoZWwpO1xuICAgICAgICBrZWVwKGVsLnBhcmVudE5vZGUpO1xuICAgIH07XG4gICAgdGFyZ2V0cy5mb3JFYWNoKGtlZXApO1xuICAgIHZhciBkZWVwID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICBpZiAoIXBhcmVudCB8fCBlbGVtZW50c1RvU3RvcC5oYXMocGFyZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwocGFyZW50LmNoaWxkcmVuLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRzVG9LZWVwLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgIGRlZXAobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IG5vZGUuZ2V0QXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWxyZWFkeUhpZGRlbiA9IGF0dHIgIT09IG51bGwgJiYgYXR0ciAhPT0gJ2ZhbHNlJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ZXJWYWx1ZSA9IChjb3VudGVyTWFwLmdldChub2RlKSB8fCAwKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXJWYWx1ZSA9IChtYXJrZXJDb3VudGVyLmdldChub2RlKSB8fCAwKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXJNYXAuc2V0KG5vZGUsIGNvdW50ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlckNvdW50ZXIuc2V0KG5vZGUsIG1hcmtlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuTm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXJWYWx1ZSA9PT0gMSAmJiBhbHJlYWR5SGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmNvbnRyb2xsZWROb2Rlcy5zZXQobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hcmtlclZhbHVlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShtYXJrZXJOYW1lLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxyZWFkeUhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoY29udHJvbEF0dHJpYnV0ZSwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdhcmlhLWhpZGRlbjogY2Fubm90IG9wZXJhdGUgb24gJywgbm9kZSwgZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGRlZXAocGFyZW50Tm9kZSk7XG4gICAgZWxlbWVudHNUb0tlZXAuY2xlYXIoKTtcbiAgICBsb2NrQ291bnQrKztcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBoaWRkZW5Ob2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICB2YXIgY291bnRlclZhbHVlID0gY291bnRlck1hcC5nZXQobm9kZSkgLSAxO1xuICAgICAgICAgICAgdmFyIG1hcmtlclZhbHVlID0gbWFya2VyQ291bnRlci5nZXQobm9kZSkgLSAxO1xuICAgICAgICAgICAgY291bnRlck1hcC5zZXQobm9kZSwgY291bnRlclZhbHVlKTtcbiAgICAgICAgICAgIG1hcmtlckNvdW50ZXIuc2V0KG5vZGUsIG1hcmtlclZhbHVlKTtcbiAgICAgICAgICAgIGlmICghY291bnRlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1bmNvbnRyb2xsZWROb2Rlcy5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoY29udHJvbEF0dHJpYnV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVuY29udHJvbGxlZE5vZGVzLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbWFya2VyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShtYXJrZXJOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvY2tDb3VudC0tO1xuICAgICAgICBpZiAoIWxvY2tDb3VudCkge1xuICAgICAgICAgICAgLy8gY2xlYXJcbiAgICAgICAgICAgIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgY291bnRlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICB1bmNvbnRyb2xsZWROb2RlcyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICBtYXJrZXJNYXAgPSB7fTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuLyoqXG4gKiBNYXJrcyBldmVyeXRoaW5nIGV4Y2VwdCBnaXZlbiBub2RlKG9yIG5vZGVzKSBhcyBhcmlhLWhpZGRlblxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xuZXhwb3J0IHZhciBoaWRlT3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKSB7XG4gICAgaWYgKG1hcmtlck5hbWUgPT09IHZvaWQgMCkgeyBtYXJrZXJOYW1lID0gJ2RhdGEtYXJpYS1oaWRkZW4nOyB9XG4gICAgdmFyIHRhcmdldHMgPSBBcnJheS5mcm9tKEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXQgOiBbb3JpZ2luYWxUYXJnZXRdKTtcbiAgICB2YXIgYWN0aXZlUGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgZ2V0RGVmYXVsdFBhcmVudChvcmlnaW5hbFRhcmdldCk7XG4gICAgaWYgKCFhY3RpdmVQYXJlbnROb2RlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9O1xuICAgIH1cbiAgICAvLyB3ZSBzaG91bGQgbm90IGhpZGUgYXJpYUxpdmUgZWxlbWVudHMgLSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L2FyaWEtaGlkZGVuL2lzc3Vlcy8xMFxuICAgIHRhcmdldHMucHVzaC5hcHBseSh0YXJnZXRzLCBBcnJheS5mcm9tKGFjdGl2ZVBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2FyaWEtbGl2ZV0nKSkpO1xuICAgIHJldHVybiBhcHBseUF0dHJpYnV0ZVRvT3RoZXJzKHRhcmdldHMsIGFjdGl2ZVBhcmVudE5vZGUsIG1hcmtlck5hbWUsICdhcmlhLWhpZGRlbicpO1xufTtcbi8qKlxuICogTWFya3MgZXZlcnl0aGluZyBleGNlcHQgZ2l2ZW4gbm9kZShvciBub2RlcykgYXMgaW5lcnRcbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbmV4cG9ydCB2YXIgaW5lcnRPdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpIHtcbiAgICBpZiAobWFya2VyTmFtZSA9PT0gdm9pZCAwKSB7IG1hcmtlck5hbWUgPSAnZGF0YS1pbmVydC1lZCc7IH1cbiAgICB2YXIgYWN0aXZlUGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgZ2V0RGVmYXVsdFBhcmVudChvcmlnaW5hbFRhcmdldCk7XG4gICAgaWYgKCFhY3RpdmVQYXJlbnROb2RlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9O1xuICAgIH1cbiAgICByZXR1cm4gYXBwbHlBdHRyaWJ1dGVUb090aGVycyhvcmlnaW5hbFRhcmdldCwgYWN0aXZlUGFyZW50Tm9kZSwgbWFya2VyTmFtZSwgJ2luZXJ0Jyk7XG59O1xuLyoqXG4gKiBAcmV0dXJucyBpZiBjdXJyZW50IGJyb3dzZXIgc3VwcG9ydHMgaW5lcnRcbiAqL1xuZXhwb3J0IHZhciBzdXBwb3J0c0luZXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIEhUTUxFbGVtZW50LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgnaW5lcnQnKTtcbn07XG4vKipcbiAqIEF1dG9tYXRpYyBmdW5jdGlvbiB0byBcInN1cHByZXNzXCIgRE9NIGVsZW1lbnRzIC0gX2hpZGVfIG9yIF9pbmVydF8gaW4gdGhlIGJlc3QgcG9zc2libGUgd2F5XG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBFbGVtZW50W119IG9yaWdpbmFsVGFyZ2V0IC0gZWxlbWVudHMgdG8ga2VlcCBvbiB0aGUgcGFnZVxuICogQHBhcmFtIFtwYXJlbnROb2RlXSAtIHRvcCBlbGVtZW50LCBkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW21hcmtlck5hbWVdIC0gYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIGV2ZXJ5IG5vZGVcbiAqIEByZXR1cm4ge1VuZG99IHVuZG8gY29tbWFuZFxuICovXG5leHBvcnQgdmFyIHN1cHByZXNzT3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKSB7XG4gICAgaWYgKG1hcmtlck5hbWUgPT09IHZvaWQgMCkgeyBtYXJrZXJOYW1lID0gJ2RhdGEtc3VwcHJlc3NlZCc7IH1cbiAgICByZXR1cm4gKHN1cHBvcnRzSW5lcnQoKSA/IGluZXJ0T3RoZXJzIDogaGlkZU90aGVycykob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpO1xufTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBzdHlsZVNpbmdsZXRvbiB9IGZyb20gJ3JlYWN0LXN0eWxlLXNpbmdsZXRvbic7XG5pbXBvcnQgeyBmb2N1c0hpZGRlbk1hcmtlciB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBTdHlsZSA9IHN0eWxlU2luZ2xldG9uKCk7XG52YXIgc3R5bGVzID0gXCJcXG4gW1wiICsgZm9jdXNIaWRkZW5NYXJrZXIgKyBcIl0ge1xcbiAgIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XFxuIH1cXG5cIjtcbmV4cG9ydCB2YXIgSW50ZXJhY3Rpdml0eURpc2FibGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IHN0eWxlcyB9KTsgfTtcbiIsICJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0ICdyZWFjdC1mb2N1cy1sb2NrL3NpZGVjYXInO1xuaW1wb3J0ICdyZWFjdC1yZW1vdmUtc2Nyb2xsL3NpZGVjYXInO1xuaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSAnLi9FZmZlY3QnO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xuZXhwb3J0IGRlZmF1bHQgZXhwb3J0U2lkZWNhcihlZmZlY3RDYXIsIEVmZmVjdCk7XG4iLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImFuY2hvclBvc2l0aW9uXCIsIFwiYnV0dG9uXCIsIFwiaW5zZXJ0XCIsIFwiaXNPcGVuXCIsIFwib3duRm9jdXNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNsb3NlUG9wb3ZlclwiLCBcInBhbmVsQ2xhc3NOYW1lXCIsIFwicGFuZWxQYWRkaW5nU2l6ZVwiLCBcInBhbmVsUHJvcHNcIiwgXCJwYW5lbFJlZlwiLCBcInBhbmVsU3R5bGVcIiwgXCJwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dFwiLCBcInBvcG92ZXJSZWZcIiwgXCJoYXNBcnJvd1wiLCBcImFycm93Q2hpbGRyZW5cIiwgXCJyZXBvc2l0aW9uT25TY3JvbGxcIiwgXCJyZXBvc2l0aW9uVG9Dcm9zc0F4aXNcIiwgXCJoYXNEcmFnRHJvcFwiLCBcInpJbmRleFwiLCBcImF0dGFjaFRvQW5jaG9yXCIsIFwiZGlzcGxheVwiLCBcIm9mZnNldFwiLCBcIm9uUG9zaXRpb25DaGFuZ2VcIiwgXCJidWZmZXJcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwiY29udGFpbmVyXCIsIFwiZm9jdXNUcmFwUHJvcHNcIiwgXCJpbml0aWFsRm9jdXNcIiwgXCJ0YWJJbmRleFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZm9jdXNhYmxlIH0gZnJvbSAndGFiYmFibGUnO1xuaW1wb3J0IHsgRXVpRm9jdXNUcmFwIH0gZnJvbSAnLi4vZm9jdXNfdHJhcCc7XG5pbXBvcnQgeyBrZXlzLCBnZXRUcmFuc2l0aW9uVGltaW5ncywgZ2V0V2FpdER1cmF0aW9uLCBwZXJmb3JtT25GcmFtZSwgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgc2V0TXVsdGlwbGVSZWZzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaG9va3MvdXNlQ29tYmluZWRSZWZzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aVBvcnRhbCB9IGZyb20gJy4uL3BvcnRhbCc7XG5pbXBvcnQgeyBFdWlNdXRhdGlvbk9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvbXV0YXRpb25fb2JzZXJ2ZXInO1xuaW1wb3J0IHsgZmluZFBvcG92ZXJQb3NpdGlvbiwgZ2V0RWxlbWVudFpJbmRleCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IgfSBmcm9tICcuLi9vdXRzaWRlX2NsaWNrX2RldGVjdG9yJztcbmltcG9ydCB7IEV1aVBvcG92ZXJBcnJvdyB9IGZyb20gJy4vcG9wb3Zlcl9hcnJvdyc7XG5pbXBvcnQgeyBldWlQb3BvdmVyU3R5bGVzIH0gZnJvbSAnLi9wb3BvdmVyLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlQb3BvdmVyUGFuZWwgfSBmcm9tICcuL3BvcG92ZXJfcGFuZWwnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgcG9wb3ZlckFuY2hvclBvc2l0aW9uID0gWyd1cENlbnRlcicsICd1cExlZnQnLCAndXBSaWdodCcsICdkb3duQ2VudGVyJywgJ2Rvd25MZWZ0JywgJ2Rvd25SaWdodCcsICdsZWZ0Q2VudGVyJywgJ2xlZnRVcCcsICdsZWZ0RG93bicsICdyaWdodENlbnRlcicsICdyaWdodFVwJywgJ3JpZ2h0RG93biddO1xudmFyIGFuY2hvclBvc2l0aW9uVG9Qb3BvdmVyUG9zaXRpb25NYXAgPSB7XG4gIHVwOiAndG9wJyxcbiAgcmlnaHQ6ICdyaWdodCcsXG4gIGRvd246ICdib3R0b20nLFxuICBsZWZ0OiAnbGVmdCdcbn07XG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wb3ZlclBvc2l0aW9uRnJvbUFuY2hvclBvc2l0aW9uKGFuY2hvclBvc2l0aW9uKSB7XG4gIC8vIG1hcHMgdGhlIGFuY2hvciBwb3NpdGlvbiB0byB0aGUgbWF0Y2hpbmcgcG9wb3ZlciBwb3NpdGlvblxuICAvLyBlLmcuIFwidXBMZWZ0XCIgLT4gXCJ0b3BcIiwgXCJkb3duUmlnaHRcIiAtPiBcImJvdHRvbVwiXG5cbiAgLy8gZXh0cmFjdCB0aGUgZmlyc3QgcG9zaXRpb25hbCB3b3JkIGZyb20gYW5jaG9yUG9zaXRpb246XG4gIC8vIHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIChcIiBeIFwiKSBvZiBhbmNob3JQb3NpdGlvbiBhbmRcbiAgLy8gY2FwdHVyZXMgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIChcIiAoLio/KSBcIikgdW50aWwgdGhlXG4gIC8vIGZpcnN0IGNhcGl0YWwgbGV0dGVyIChcIiBbQS1aXSBcIikgaXMgZW5jb3VudGVyZWRcbiAgdmFyIF9yZWYgPSBhbmNob3JQb3NpdGlvbi5tYXRjaCgvXiguKj8pW0EtWl0vKSxcbiAgICBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgIHByaW1hcnlQb3NpdGlvbiA9IF9yZWYyWzFdO1xuICByZXR1cm4gYW5jaG9yUG9zaXRpb25Ub1BvcG92ZXJQb3NpdGlvbk1hcFtwcmltYXJ5UG9zaXRpb25dO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcG92ZXJBbGlnbkZyb21BbmNob3JQb3NpdGlvbihhbmNob3JQb3NpdGlvbikge1xuICAvLyBtYXBzIHRoZSBncmF2aXR5IHRvIHRoZSBtYXRjaGluZyBwb3BvdmVyIHBvc2l0aW9uXG4gIC8vIGUuZy4gXCJ1cExlZnRcIiAtPiBcImxlZnRcIiwgXCJyaWdodERvd25cIiAtPiBcImJvdHRvbVwiXG5cbiAgLy8gZXh0cmFjdCB0aGUgc2Vjb25kIHBvc2l0aW9uYWwgd29yZCBmcm9tIGFuY2hvclBvc2l0aW9uOlxuICAvLyBzdGFydHMgYSBjYXB0dXJlIGdyb3VwIGF0IHRoZSBmaXJzdCBjYXBpdGFsIGxldHRlclxuICAvLyBhbmQgaW5jbHVkZXMgZXZlcnl0aGluZyBhZnRlciBpdFxuICB2YXIgX3JlZjMgPSBhbmNob3JQb3NpdGlvbi5tYXRjaCgvKFtBLVpdLiopLyksXG4gICAgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksXG4gICAgYWxpZ24gPSBfcmVmNFsxXTtcblxuICAvLyB0aGlzIHBlcmZvcm1zIHR3byB0YXNrczpcbiAgLy8gMS4gbm9ybWFsaXplcyB0aGUgYWxpZ24gcG9zaXRpb24gYnkgbG93ZXJjYXNpbmcgaXRcbiAgLy8gMi4gYGNlbnRlcmAgZG9lc24ndCBleGlzdCBpbiB0aGUgbG9va3VwIG1hcCB3aGljaCBjb252ZXJ0cyBpdCB0byBgdW5kZWZpbmVkYCBtZWFuaW5nIG5vIGFsaWduXG4gIHJldHVybiBhbmNob3JQb3NpdGlvblRvUG9wb3ZlclBvc2l0aW9uTWFwW2FsaWduLnRvTG93ZXJDYXNlKCldO1xufVxudmFyIERFRkFVTFRfUE9QT1ZFUl9TVFlMRVMgPSB7XG4gIHRvcDogNTAsXG4gIGxlZnQ6IDUwXG59O1xudmFyIHJldHVybkZvY3VzQ29uZmlnID0ge1xuICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG59O1xudmFyIGNsb3NpbmdUcmFuc2l0aW9uVGltZSA9IDI1MDsgLy8gVE9ETzogRFJZIG91dCB2YXIgd2hlbiBjb252ZXJ0aW5nIHRvIENTUy1pbi1KU1xuXG5leHBvcnQgdmFyIEV1aVBvcG92ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpUG9wb3Zlcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpUG9wb3Zlcik7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aVBvcG92ZXIsIFtwcm9wc10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZXNwb3NpdGlvblRpbWVvdXRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic3RyYW5kZWRGb2N1c1RpbWVvdXRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2xvc2luZ1RyYW5zaXRpb25UaW1lb3V0XCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWVcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYnV0dG9uXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwYW5lbFwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZGVzY3JpcHRpb25JZFwiLCBodG1sSWRHZW5lcmF0b3IoKSgpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2xvc2VQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pc09wZW4pIHtcbiAgICAgICAgX3RoaXMucHJvcHMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uRXNjYXBlS2V5XCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLmlzT3Blbikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgX3RoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgIF90aGlzLmhhbmRsZVN0cmFuZGVkRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaGFuZGxlU3RyYW5kZWRGb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zdHJhbmRlZEZvY3VzVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gSWYgYHJldHVybkZvY3VzYCBmYWlsZWQgYW5kIGZvY3VzIHdhcyBzdHJhbmRlZCxcbiAgICAgICAgLy8gYXR0ZW1wdCB0byBtYW51YWxseSByZXN0b3JlIGZvY3VzIHRvIHRoZSB0b2dnbGUgYnV0dG9uLlxuICAgICAgICAvLyBUaGUgc3RyYW5kZWQgZm9jdXMgaXMgZWl0aGVyIGluIG1vc3QgY2FzZXMgb24gYm9keSBidXRcbiAgICAgICAgLy8gaXQgd2lsbCBiZSBvbiB0aGUgcGFuZWwgaW5zdGVhZCBvbiBtb3VudCB3aGVuIGlzT3Blbj10cnVlXG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IF90aGlzLnBhbmVsKSB7XG4gICAgICAgICAgaWYgKCFfdGhpcy5idXR0b24pIHJldHVybjtcbiAgICAgICAgICB2YXIgZm9jdXNhYmxlSXRlbXMgPSBmb2N1c2FibGUoX3RoaXMuYnV0dG9uKTtcbiAgICAgICAgICBpZiAoIWZvY3VzYWJsZUl0ZW1zLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgIHZhciB0b2dnbGVCdXR0b24gPSBmb2N1c2FibGVJdGVtc1swXTtcbiAgICAgICAgICB0b2dnbGVCdXR0b24uZm9jdXMocmV0dXJuRm9jdXNDb25maWcpO1xuICAgICAgICB9XG4gICAgICB9LCBjbG9zaW5nVHJhbnNpdGlvblRpbWUpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkVTQ0FQRSkge1xuICAgICAgICBfdGhpcy5vbkVzY2FwZUtleShldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQ2xpY2tPdXRzaWRlXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gb25seSBjbG9zZSB0aGUgcG9wb3ZlciBpZiB0aGUgZXZlbnQgc291cmNlIGlzbid0IHRoZSBhbmNob3IgYnV0dG9uXG4gICAgICAvLyBvdGhlcndpc2UsIGl0IGlzIHVwIHRvIHRoZSBhbmNob3IgdG8gdG9nZ2xlIHRoZSBwb3BvdmVyJ3Mgb3BlbiBzdGF0dXNcbiAgICAgIGlmIChfdGhpcy5idXR0b24gJiYgX3RoaXMuYnV0dG9uLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgPT09IGZhbHNlKSB7XG4gICAgICAgIF90aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbk9wZW5Qb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNsZWFyVGltZW91dChfdGhpcy5zdHJhbmRlZEZvY3VzVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQoX3RoaXMuY2xvc2luZ1RyYW5zaXRpb25UaW1lb3V0KTtcbiAgICAgIGlmIChfdGhpcy5jbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKF90aGlzLmNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWUpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhpcyBzdGF0ZSBhIGJlYXQgYWZ0ZXIgdGhlIHJlbmRlciB0YWtlcyBwbGFjZSwgc28gdGhhdCB0aGUgQ1NTXG4gICAgICAvLyB0cmFuc2l0aW9uIGNhbiB0YWtlIGVmZmVjdC5cbiAgICAgIF90aGlzLmNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzT3BlbmluZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBmb3IgZWFjaCBjaGlsZCBlbGVtZW50IG9mIGB0aGlzLnBhbmVsYCwgZmluZCBhbnkgdHJhbnNpdGlvbiBkdXJhdGlvbiB3ZSBzaG91bGQgd2FpdCBmb3IgYmVmb3JlIHN0YWJpbGl6aW5nXG4gICAgICB2YXIgX0FycmF5JHByb3RvdHlwZSRzbGljID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoX3RoaXMucGFuZWwgPyBbX3RoaXMucGFuZWxdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoQXJyYXkuZnJvbShfdGhpcy5wYW5lbC5jaGlsZHJlbikpKSA6IFtdKS5yZWR1Y2UoZnVuY3Rpb24gKF9yZWY1LCBlbGVtZW50KSB7XG4gICAgICAgICAgdmFyIGR1cmF0aW9uTWF0Y2ggPSBfcmVmNS5kdXJhdGlvbk1hdGNoLFxuICAgICAgICAgICAgZGVsYXlNYXRjaCA9IF9yZWY1LmRlbGF5TWF0Y2g7XG4gICAgICAgICAgdmFyIHRyYW5zaXRpb25UaW1pbmdzID0gZ2V0VHJhbnNpdGlvblRpbWluZ3MoZWxlbWVudCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGR1cmF0aW9uTWF0Y2g6IE1hdGgubWF4KGR1cmF0aW9uTWF0Y2gsIHRyYW5zaXRpb25UaW1pbmdzLmR1cmF0aW9uTWF0Y2gpLFxuICAgICAgICAgICAgZGVsYXlNYXRjaDogTWF0aC5tYXgoZGVsYXlNYXRjaCwgdHJhbnNpdGlvblRpbWluZ3MuZGVsYXlNYXRjaClcbiAgICAgICAgICB9O1xuICAgICAgICB9LCB7XG4gICAgICAgICAgZHVyYXRpb25NYXRjaDogMCxcbiAgICAgICAgICBkZWxheU1hdGNoOiAwXG4gICAgICAgIH0pLFxuICAgICAgICBkdXJhdGlvbk1hdGNoID0gX0FycmF5JHByb3RvdHlwZSRzbGljLmR1cmF0aW9uTWF0Y2gsXG4gICAgICAgIGRlbGF5TWF0Y2ggPSBfQXJyYXkkcHJvdG90eXBlJHNsaWMuZGVsYXlNYXRjaDtcbiAgICAgIGNsZWFyVGltZW91dChfdGhpcy5yZXNwb3NpdGlvblRpbWVvdXQpO1xuICAgICAgX3RoaXMucmVzcG9zaXRpb25UaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNPcGVuU3RhYmxlOiB0cnVlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGR1cmF0aW9uTWF0Y2ggKyBkZWxheU1hdGNoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25NdXRhdGlvblwiLCBmdW5jdGlvbiAocmVjb3Jkcykge1xuICAgICAgdmFyIHdhaXREdXJhdGlvbiA9IGdldFdhaXREdXJhdGlvbihyZWNvcmRzKTtcbiAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkKCk7XG4gICAgICBwZXJmb3JtT25GcmFtZSh3YWl0RHVyYXRpb24sIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicG9zaXRpb25Qb3BvdmVyXCIsIGZ1bmN0aW9uIChhbGxvd0VuZm9yY2VQb3NpdGlvbikge1xuICAgICAgaWYgKF90aGlzLmJ1dHRvbiA9PSBudWxsIHx8IF90aGlzLnBhbmVsID09IG51bGwpIHJldHVybjtcbiAgICAgIHZhciBfcmVmNiA9IF90aGlzLnByb3BzLFxuICAgICAgICBhbmNob3JQb3NpdGlvbiA9IF9yZWY2LmFuY2hvclBvc2l0aW9uLFxuICAgICAgICBfcmVmNiRvZmZzZXQgPSBfcmVmNi5vZmZzZXQsXG4gICAgICAgIG9mZnNldCA9IF9yZWY2JG9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9yZWY2JG9mZnNldDtcbiAgICAgIHZhciBwb3NpdGlvbiA9IGdldFBvcG92ZXJQb3NpdGlvbkZyb21BbmNob3JQb3NpdGlvbihhbmNob3JQb3NpdGlvbik7XG4gICAgICB2YXIgZm9yY2VQb3NpdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIGlmIChhbGxvd0VuZm9yY2VQb3NpdGlvbiAmJiBfdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgJiYgX3RoaXMuc3RhdGUub3BlblBvc2l0aW9uICE9IG51bGwpIHtcbiAgICAgICAgcG9zaXRpb24gPSBfdGhpcy5zdGF0ZS5vcGVuUG9zaXRpb247XG4gICAgICAgIGZvcmNlUG9zaXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIF9maW5kUG9wb3ZlclBvc2l0aW9uID0gZmluZFBvcG92ZXJQb3NpdGlvbih7XG4gICAgICAgICAgY29udGFpbmVyOiBfdGhpcy5wcm9wcy5jb250YWluZXIsXG4gICAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICAgIGZvcmNlUG9zaXRpb246IGZvcmNlUG9zaXRpb24sXG4gICAgICAgICAgYWxpZ246IGdldFBvcG92ZXJBbGlnbkZyb21BbmNob3JQb3NpdGlvbihhbmNob3JQb3NpdGlvbiksXG4gICAgICAgICAgYW5jaG9yOiBfdGhpcy5idXR0b24sXG4gICAgICAgICAgcG9wb3ZlcjogX3RoaXMucGFuZWwsXG4gICAgICAgICAgb2Zmc2V0OiBfdGhpcy5wcm9wcy5hdHRhY2hUb0FuY2hvciA/IG9mZnNldCA6IF90aGlzLnByb3BzLmhhc0Fycm93ID8gMTYgKyBvZmZzZXQgOiA4ICsgb2Zmc2V0LFxuICAgICAgICAgIGFycm93Q29uZmlnOiBfdGhpcy5wcm9wcy5oYXNBcnJvdyA/IHtcbiAgICAgICAgICAgIGFycm93V2lkdGg6IDI0LFxuICAgICAgICAgICAgYXJyb3dCdWZmZXI6IDEwXG4gICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIGFycm93V2lkdGg6IDAsXG4gICAgICAgICAgICBhcnJvd0J1ZmZlcjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmV0dXJuQm91bmRpbmdCb3g6IF90aGlzLnByb3BzLmF0dGFjaFRvQW5jaG9yLFxuICAgICAgICAgIGFsbG93Q3Jvc3NBeGlzOiBfdGhpcy5wcm9wcy5yZXBvc2l0aW9uVG9Dcm9zc0F4aXMsXG4gICAgICAgICAgYnVmZmVyOiBfdGhpcy5wcm9wcy5idWZmZXJcbiAgICAgICAgfSksXG4gICAgICAgIHRvcCA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLnRvcCxcbiAgICAgICAgbGVmdCA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLmxlZnQsXG4gICAgICAgIGZvdW5kUG9zaXRpb24gPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5wb3NpdGlvbixcbiAgICAgICAgYXJyb3cgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5hcnJvdztcblxuICAgICAgLy8gdGhlIHBvcG92ZXIncyB6LWluZGV4IG11c3QgaW5oZXJpdCBmcm9tIHRoZSBidXR0b25cbiAgICAgIC8vIHRoaXMga2VlcHMgYSBidXR0b24ncyBwb3BvdmVyIHVuZGVyIGEgZmx5b3V0IHRoYXQgd291bGQgY292ZXIgdGhlIGJ1dHRvblxuICAgICAgLy8gYnV0IGEgcG9wb3ZlciB0cmlnZ2VyZWQgaW5zaWRlIGEgZmx5b3V0IHdpbGwgYXBwZWFyIG92ZXIgdGhhdCBmbHlvdXRcbiAgICAgIHZhciB6SW5kZXhQcm9wID0gX3RoaXMucHJvcHMuekluZGV4O1xuICAgICAgdmFyIHpJbmRleCA9IHpJbmRleFByb3AgPT0gbnVsbCA/IGdldEVsZW1lbnRaSW5kZXgoX3RoaXMuYnV0dG9uLCBfdGhpcy5wYW5lbCkgKyAyMDAwIDogekluZGV4UHJvcDtcbiAgICAgIHZhciBwb3BvdmVyU3R5bGVzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBfdGhpcy5wcm9wcy5wYW5lbFN0eWxlKSwge30sIHtcbiAgICAgICAgdG9wOiB0b3AsXG4gICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgIHpJbmRleDogekluZGV4XG4gICAgICB9KTtcbiAgICAgIHZhciB3aWxsUmVuZGVyQXJyb3cgPSAhX3RoaXMucHJvcHMuYXR0YWNoVG9BbmNob3IgJiYgX3RoaXMucHJvcHMuaGFzQXJyb3c7XG4gICAgICB2YXIgYXJyb3dTdHlsZXMgPSB3aWxsUmVuZGVyQXJyb3cgPyBhcnJvdyA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBhcnJvd1Bvc2l0aW9uID0gZm91bmRQb3NpdGlvbjtcbiAgICAgIF90aGlzLnByb3BzLm9uUG9zaXRpb25DaGFuZ2UgJiYgX3RoaXMucHJvcHMub25Qb3NpdGlvbkNoYW5nZShhcnJvd1Bvc2l0aW9uKTtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcG9wb3ZlclN0eWxlczogcG9wb3ZlclN0eWxlcyxcbiAgICAgICAgYXJyb3dTdHlsZXM6IGFycm93U3R5bGVzLFxuICAgICAgICBhcnJvd1Bvc2l0aW9uOiBhcnJvd1Bvc2l0aW9uLFxuICAgICAgICBvcGVuUG9zaXRpb246IGZvdW5kUG9zaXRpb25cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwb3NpdGlvblBvcG92ZXJGaXhlZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5wb3NpdGlvblBvcG92ZXIodHJ1ZSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInBvc2l0aW9uUG9wb3ZlckZsdWlkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3ZlcihmYWxzZSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInBhbmVsUmVmXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5wYW5lbCA9IG5vZGU7XG4gICAgICBfdGhpcy5wcm9wcy5wYW5lbFJlZiAmJiBfdGhpcy5wcm9wcy5wYW5lbFJlZihub2RlKTtcbiAgICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgICAgLy8gcGFuZWwgaGFzIHVubW91bnRlZCwgcmVzdG9yZSB0aGUgc3RhdGUgZGVmYXVsdHNcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHBvcG92ZXJTdHlsZXM6IERFRkFVTFRfUE9QT1ZFUl9TVFlMRVMsXG4gICAgICAgICAgYXJyb3dTdHlsZXM6IHt9LFxuICAgICAgICAgIGFycm93UG9zaXRpb246IG51bGwsXG4gICAgICAgICAgb3BlblBvc2l0aW9uOiBudWxsLFxuICAgICAgICAgIGlzT3BlblN0YWJsZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBfdGhpcy5wb3NpdGlvblBvcG92ZXJGbHVpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwYW5lbCBpcyBjb21pbmcgaW50byBleGlzdGVuY2VcbiAgICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyRmx1aWQoKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZsdWlkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicG9wb3ZlclJlZlwiLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgX3RoaXMuYnV0dG9uID0gbm9kZTtcbiAgICAgIHNldE11bHRpcGxlUmVmcyhbX3RoaXMucHJvcHMucG9wb3ZlclJlZl0sIG5vZGUpO1xuICAgIH0pO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgcHJldlByb3BzOiB7XG4gICAgICAgIGlzT3BlbjogcHJvcHMuaXNPcGVuXG4gICAgICB9LFxuICAgICAgc3VwcHJlc3NpbmdQb3BvdmVyOiBwcm9wcy5pc09wZW4sXG4gICAgICAvLyBvbmx5IHN1cHByZXNzIGlmIGNyZWF0ZWQgd2l0aCBpc09wZW49dHJ1ZVxuICAgICAgaXNDbG9zaW5nOiBmYWxzZSxcbiAgICAgIGlzT3BlbmluZzogZmFsc2UsXG4gICAgICBwb3BvdmVyU3R5bGVzOiBERUZBVUxUX1BPUE9WRVJfU1RZTEVTLFxuICAgICAgYXJyb3dTdHlsZXM6IHt9LFxuICAgICAgYXJyb3dQb3NpdGlvbjogbnVsbCxcbiAgICAgIG9wZW5Qb3NpdGlvbjogbnVsbCxcbiAgICAgIC8vIG9uY2UgYSBzdGFibGUgcG9zaXRpb24gaGFzIGJlZW4gZm91bmQsIGtlZXAgdGhlIGNvbnRlbnRzIG9uIHRoYXQgc2lkZVxuICAgICAgaXNPcGVuU3RhYmxlOiBmYWxzZSAvLyB3YWl0IGZvciBhbnkgaW5pdGlhbCBvcGVuaW5nIHRyYW5zaXRpb25zIHRvIGZpbmlzaCBiZWZvcmUgbWFya2luZyBhcyBzdGFibGVcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpUG9wb3ZlciwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpUG9wb3ZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIGlmICh0aGlzLnN0YXRlLnN1cHByZXNzaW5nUG9wb3Zlcikge1xuICAgICAgICAvLyBjb21wb25lbnQgd2FzIGNyZWF0ZWQgd2l0aCBpc09wZW49dHJ1ZTsgbm93IHRoYXQgaXQncyBtb3VudGVkXG4gICAgICAgIC8vIHN0b3Agc3VwcHJlc3NpbmcgYW5kIHN0YXJ0IG9wZW5pbmdcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc3VwcHJlc3NpbmdQb3BvdmVyOiBmYWxzZSxcbiAgICAgICAgICBpc09wZW5pbmc6IHRydWVcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5vbk9wZW5Qb3BvdmVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgLy8gVGhlIHBvcG92ZXIgaXMgYmVpbmcgb3BlbmVkLlxuICAgICAgaWYgKCFwcmV2UHJvcHMuaXNPcGVuICYmIHRoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub25PcGVuUG9wb3ZlcigpO1xuICAgICAgfVxuXG4gICAgICAvLyBlbnN1cmUgcmVjYWxjdWxhdGlvbiBvZiBwYW5lbCBwb3NpdGlvbiBvbiBwcm9wIHVwZGF0ZXNcbiAgICAgIGlmICh0aGlzLnByb3BzLmlzT3BlbiAmJiAocHJldlByb3BzLmFuY2hvclBvc2l0aW9uICE9PSB0aGlzLnByb3BzLmFuY2hvclBvc2l0aW9uIHx8IHByZXZQcm9wcy5idWZmZXIgIT09IHRoaXMucHJvcHMuYnVmZmVyIHx8IHByZXZQcm9wcy5vZmZzZXQgIT09IHRoaXMucHJvcHMub2Zmc2V0IHx8IHByZXZQcm9wcy5wYW5lbFBhZGRpbmdTaXplICE9PSB0aGlzLnByb3BzLnBhbmVsUGFkZGluZ1NpemUpKSB7XG4gICAgICAgIHRoaXMucG9zaXRpb25Qb3BvdmVyRmx1aWQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIHNjcm9sbCBsaXN0ZW5lclxuICAgICAgaWYgKHByZXZQcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwgIT09IHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnJlcG9zaXRpb25PblNjcm9sbCkge1xuICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHBvcG92ZXIgaXMgYmVpbmcgY2xvc2VkLlxuICAgICAgaWYgKHByZXZQcm9wcy5pc09wZW4gJiYgIXRoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBqdXN0IGNsb3NlZCB0aGUgcG9wb3ZlciwgcXVldWUgdXAgdGhlIHJlbW92YWwgb2YgdGhlIGNvbnRlbnQgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIHRyYW5zaXRpb24gaXMgY29tcGxldGUuXG4gICAgICAgIHRoaXMuY2xvc2luZ1RyYW5zaXRpb25UaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpc0Nsb3Npbmc6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNsb3NpbmdUcmFuc2l0aW9uVGltZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQsIHRydWUpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVzcG9zaXRpb25UaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN0cmFuZGVkRm9jdXNUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NpbmdUcmFuc2l0aW9uVGltZW91dCk7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF9wYW5lbFByb3BzJHRhYkluZGV4LFxuICAgICAgICBfdGhpczQgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgYW5jaG9yUG9zaXRpb24gPSBfdGhpcyRwcm9wcy5hbmNob3JQb3NpdGlvbixcbiAgICAgICAgYnV0dG9uID0gX3RoaXMkcHJvcHMuYnV0dG9uLFxuICAgICAgICBpbnNlcnQgPSBfdGhpcyRwcm9wcy5pbnNlcnQsXG4gICAgICAgIGlzT3BlbiA9IF90aGlzJHByb3BzLmlzT3BlbixcbiAgICAgICAgb3duRm9jdXMgPSBfdGhpcyRwcm9wcy5vd25Gb2N1cyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICBjbG9zZVBvcG92ZXIgPSBfdGhpcyRwcm9wcy5jbG9zZVBvcG92ZXIsXG4gICAgICAgIHBhbmVsQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMucGFuZWxDbGFzc05hbWUsXG4gICAgICAgIHBhbmVsUGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wcy5wYW5lbFBhZGRpbmdTaXplLFxuICAgICAgICBwYW5lbFByb3BzID0gX3RoaXMkcHJvcHMucGFuZWxQcm9wcyxcbiAgICAgICAgcGFuZWxSZWYgPSBfdGhpcyRwcm9wcy5wYW5lbFJlZixcbiAgICAgICAgcGFuZWxTdHlsZSA9IF90aGlzJHByb3BzLnBhbmVsU3R5bGUsXG4gICAgICAgIHBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0ID0gX3RoaXMkcHJvcHMucG9wb3ZlclNjcmVlblJlYWRlclRleHQsXG4gICAgICAgIHBvcG92ZXJSZWYgPSBfdGhpcyRwcm9wcy5wb3BvdmVyUmVmLFxuICAgICAgICBoYXNBcnJvdyA9IF90aGlzJHByb3BzLmhhc0Fycm93LFxuICAgICAgICBhcnJvd0NoaWxkcmVuID0gX3RoaXMkcHJvcHMuYXJyb3dDaGlsZHJlbixcbiAgICAgICAgcmVwb3NpdGlvbk9uU2Nyb2xsID0gX3RoaXMkcHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsLFxuICAgICAgICByZXBvc2l0aW9uVG9Dcm9zc0F4aXMgPSBfdGhpcyRwcm9wcy5yZXBvc2l0aW9uVG9Dcm9zc0F4aXMsXG4gICAgICAgIGhhc0RyYWdEcm9wID0gX3RoaXMkcHJvcHMuaGFzRHJhZ0Ryb3AsXG4gICAgICAgIHpJbmRleCA9IF90aGlzJHByb3BzLnpJbmRleCxcbiAgICAgICAgYXR0YWNoVG9BbmNob3IgPSBfdGhpcyRwcm9wcy5hdHRhY2hUb0FuY2hvcixcbiAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgIG9mZnNldCA9IF90aGlzJHByb3BzLm9mZnNldCxcbiAgICAgICAgb25Qb3NpdGlvbkNoYW5nZSA9IF90aGlzJHByb3BzLm9uUG9zaXRpb25DaGFuZ2UsXG4gICAgICAgIGJ1ZmZlciA9IF90aGlzJHByb3BzLmJ1ZmZlcixcbiAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHNbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgYXJpYUxhYmVsbGVkQnkgPSBfdGhpcyRwcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10sXG4gICAgICAgIGNvbnRhaW5lciA9IF90aGlzJHByb3BzLmNvbnRhaW5lcixcbiAgICAgICAgZm9jdXNUcmFwUHJvcHMgPSBfdGhpcyRwcm9wcy5mb2N1c1RyYXBQcm9wcyxcbiAgICAgICAgaW5pdGlhbEZvY3VzUHJvcCA9IF90aGlzJHByb3BzLmluaXRpYWxGb2N1cyxcbiAgICAgICAgX3RhYkluZGV4UHJvcCA9IF90aGlzJHByb3BzLnRhYkluZGV4LFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIHRhYkluZGV4UHJvcCA9IChfcGFuZWxQcm9wcyR0YWJJbmRleCA9IHBhbmVsUHJvcHMgPT09IG51bGwgfHwgcGFuZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFuZWxQcm9wcy50YWJJbmRleCkgIT09IG51bGwgJiYgX3BhbmVsUHJvcHMkdGFiSW5kZXggIT09IHZvaWQgMCA/IF9wYW5lbFByb3BzJHRhYkluZGV4IDogX3RhYkluZGV4UHJvcDtcbiAgICAgIHZhciBzdHlsZXMgPSBldWlQb3BvdmVyU3R5bGVzKCk7XG4gICAgICB2YXIgcG9wb3ZlclN0eWxlcyA9IFtzdHlsZXMuZXVpUG9wb3Zlciwge1xuICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LFxuICAgICAgICBsYWJlbDogZGlzcGxheVxuICAgICAgfV07XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBvcG92ZXInLCB7XG4gICAgICAgICdldWlQb3BvdmVyLWlzT3Blbic6IHRoaXMuc3RhdGUuaXNPcGVuaW5nXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIHNob3dBcnJvdyA9IGhhc0Fycm93ICYmICFhdHRhY2hUb0FuY2hvcjtcbiAgICAgIHZhciBwYW5lbDtcbiAgICAgIGlmICghdGhpcy5zdGF0ZS5zdXBwcmVzc2luZ1BvcG92ZXIgJiYgKGlzT3BlbiB8fCB0aGlzLnN0YXRlLmlzQ2xvc2luZykpIHtcbiAgICAgICAgdmFyIHRhYkluZGV4ID0gdGFiSW5kZXhQcm9wO1xuICAgICAgICB2YXIgaW5pdGlhbEZvY3VzID0gaW5pdGlhbEZvY3VzUHJvcDtcbiAgICAgICAgdmFyIGFyaWFEZXNjcmliZWRieTtcbiAgICAgICAgdmFyIGFyaWFMaXZlO1xuICAgICAgICB2YXIgcGFuZWxBcmlhTW9kYWwgPSBwYW5lbFByb3BzICE9PSBudWxsICYmIHBhbmVsUHJvcHMgIT09IHZvaWQgMCAmJiBwYW5lbFByb3BzLmhhc093blByb3BlcnR5KCdhcmlhLW1vZGFsJykgPyBwYW5lbFByb3BzWydhcmlhLW1vZGFsJ10gOiAndHJ1ZSc7XG4gICAgICAgIHZhciBwYW5lbFJvbGUgPSBwYW5lbFByb3BzICE9PSBudWxsICYmIHBhbmVsUHJvcHMgIT09IHZvaWQgMCAmJiBwYW5lbFByb3BzLmhhc093blByb3BlcnR5KCdyb2xlJykgPyBwYW5lbFByb3BzLnJvbGUgOiAnZGlhbG9nJztcbiAgICAgICAgaWYgKG93bkZvY3VzIHx8IHBhbmVsQXJpYU1vZGFsICE9PSAndHJ1ZScpIHtcbiAgICAgICAgICB0YWJJbmRleCA9IHRhYkluZGV4UHJvcCAhPT0gbnVsbCAmJiB0YWJJbmRleFByb3AgIT09IHZvaWQgMCA/IHRhYkluZGV4UHJvcCA6IDA7XG4gICAgICAgICAgYXJpYUxpdmUgPSAnb2ZmJztcbiAgICAgICAgICBpZiAoIWluaXRpYWxGb2N1cykge1xuICAgICAgICAgICAgaW5pdGlhbEZvY3VzID0gZnVuY3Rpb24gaW5pdGlhbEZvY3VzKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXM0LnBhbmVsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJpYUxpdmUgPSAnYXNzZXJ0aXZlJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZm9jdXNUcmFwU2NyZWVuUmVhZGVyVGV4dDtcbiAgICAgICAgaWYgKG93bkZvY3VzIHx8IHBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0KSB7XG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5ID0gdGhpcy5kZXNjcmlwdGlvbklkO1xuICAgICAgICAgIGZvY3VzVHJhcFNjcmVlblJlYWRlclRleHQgPSBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmRlc2NyaXB0aW9uSWRcbiAgICAgICAgICB9LCBvd25Gb2N1cyAmJiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVBvcG92ZXIuc2NyZWVuUmVhZGVyQW5ub3VuY2VtZW50XCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIllvdSBhcmUgaW4gYSBkaWFsb2cuIFByZXNzIEVzY2FwZSwgb3IgdGFwL2NsaWNrIG91dHNpZGUgdGhlIGRpYWxvZyB0byBjbG9zZS5cIlxuICAgICAgICAgIH0pLCBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXR1cm5Gb2N1cyA9IHRoaXMuc3RhdGUuaXNPcGVuU3RhYmxlID8gcmV0dXJuRm9jdXNDb25maWcgOiBmYWxzZTtcbiAgICAgICAgcGFuZWwgPSBfX19FbW90aW9uSlNYKEV1aVBvcnRhbCwgaW5zZXJ0ICYmIHtcbiAgICAgICAgICBpbnNlcnQ6IGluc2VydFxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUZvY3VzVHJhcCwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNsaWNrT3V0c2lkZURpc2FibGVzOiB0cnVlLFxuICAgICAgICAgIG9uQ2xpY2tPdXRzaWRlOiB0aGlzLm9uQ2xpY2tPdXRzaWRlLFxuICAgICAgICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyAvLyBJZ25vcmUgdGVtcG9yYXJ5IHN0YXRlIG9mIGluZGVjaXNpdmUgZm9jdXNcbiAgICAgICAgICAsXG4gICAgICAgICAgaW5pdGlhbEZvY3VzOiBpbml0aWFsRm9jdXMsXG4gICAgICAgICAgb25Fc2NhcGVLZXk6IHRoaXMub25Fc2NhcGVLZXksXG4gICAgICAgICAgZGlzYWJsZWQ6ICFvd25Gb2N1cyB8fCAhdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgfHwgdGhpcy5zdGF0ZS5pc0Nsb3NpbmdcbiAgICAgICAgfSwgZm9jdXNUcmFwUHJvcHMpLCBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXJQYW5lbCwgX2V4dGVuZHMoe30sIHBhbmVsUHJvcHMsIHtcbiAgICAgICAgICBwYW5lbFJlZjogdGhpcy5wYW5lbFJlZixcbiAgICAgICAgICBpc09wZW46IHRoaXMuc3RhdGUuaXNPcGVuaW5nLFxuICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLnN0YXRlLmFycm93UG9zaXRpb24sXG4gICAgICAgICAgaXNBdHRhY2hlZDogYXR0YWNoVG9BbmNob3IsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHBhbmVsQ2xhc3NOYW1lLCBwYW5lbFByb3BzID09PSBudWxsIHx8IHBhbmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhbmVsUHJvcHMuY2xhc3NOYW1lKSxcbiAgICAgICAgICBoYXNEcmFnRHJvcDogaGFzRHJhZ0Ryb3AsXG4gICAgICAgICAgaGFzU2hhZG93OiBmYWxzZSxcbiAgICAgICAgICBwYWRkaW5nU2l6ZTogcGFuZWxQYWRkaW5nU2l6ZSxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICAgICAgXCJhcmlhLWxpdmVcIjogYXJpYUxpdmUsXG4gICAgICAgICAgcm9sZTogcGFuZWxSb2xlLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsbGVkQnksXG4gICAgICAgICAgXCJhcmlhLW1vZGFsXCI6IHBhbmVsQXJpYU1vZGFsLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAgICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGhpcy5zdGF0ZS5wb3BvdmVyU3R5bGVzKSwge30sIHtcbiAgICAgICAgICAgIC8vIEFkZGluZyBgd2lsbC1jaGFuZ2VgIHRvIHJlZHVjZSByaXNrIG9mIGEgYmx1cnJ5IGFuaW1hdGlvbiBpbiBDaHJvbWUgODYrXG4gICAgICAgICAgICB3aWxsQ2hhbmdlOiAhdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgPyAndHJhbnNmb3JtLCBvcGFjaXR5JyA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pLCBzaG93QXJyb3cgJiYgdGhpcy5zdGF0ZS5hcnJvd1Bvc2l0aW9uICYmIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlckFycm93LCB7XG4gICAgICAgICAgcG9zaXRpb246IHRoaXMuc3RhdGUuYXJyb3dQb3NpdGlvbixcbiAgICAgICAgICBzdHlsZTogdGhpcy5zdGF0ZS5hcnJvd1N0eWxlc1xuICAgICAgICB9LCBhcnJvd0NoaWxkcmVuKSwgZm9jdXNUcmFwU2NyZWVuUmVhZGVyVGV4dCwgX19fRW1vdGlvbkpTWChFdWlNdXRhdGlvbk9ic2VydmVyLCB7XG4gICAgICAgICAgb2JzZXJ2ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICAgICAgLy8gZWxlbWVudCBhdHRyaWJ1dGUgY2hhbmdlc1xuICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICAgICAgLy8gYWRkZWQvcmVtb3ZlZCBlbGVtZW50c1xuICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIC8vIHRleHQgY2hhbmdlc1xuICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSAvLyB3YXRjaCBhbGwgY2hpbGQgZWxlbWVudHNcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uTXV0YXRpb246IHRoaXMub25NdXRhdGlvblxuICAgICAgICB9LCBmdW5jdGlvbiAobXV0YXRpb25SZWYpIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgICByZWY6IG11dGF0aW9uUmVmXG4gICAgICAgICAgfSwgY2hpbGRyZW4pO1xuICAgICAgICB9KSkpKTtcbiAgICAgIH1cblxuICAgICAgLy8gcmVhY3QtZm9jdXMtb24gYW5kIHJlbGF0ZWQgZG8gbm90IHJlZ2lzdGVyIG91dHNpZGUgY2xpY2sgZGV0ZWN0aW9uXG4gICAgICAvLyB3aGVuIGRpc2FibGVkLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGNvbmRpdGlvbmFsbHkgY2hlY2sgZm9yIHRoYXQgb3Vyc2VsdmVzXG4gICAgICBpZiAob3duRm9jdXMpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNzczogcG9wb3ZlclN0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgcmVmOiB0aGlzLnBvcG92ZXJSZWZcbiAgICAgICAgfSwgcmVzdCksIGJ1dHRvbiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gbnVsbCA6IGJ1dHRvbiwgcGFuZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IsIHtcbiAgICAgICAgICBvbk91dHNpZGVDbGljazogdGhpcy5jbG9zZVBvcG92ZXJcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY3NzOiBwb3BvdmVyU3R5bGVzLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICByZWY6IHRoaXMucG9wb3ZlclJlZixcbiAgICAgICAgICBvbktleURvd246IHRoaXMub25LZXlEb3duXG4gICAgICAgIH0sIHJlc3QpLCBidXR0b24gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IG51bGwgOiBidXR0b24sIHBhbmVsKSk7XG4gICAgICB9XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByZXZTdGF0ZS5wcmV2UHJvcHMuaXNPcGVuICYmICFuZXh0UHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJldlByb3BzOiB7XG4gICAgICAgICAgICBpc09wZW46IG5leHRQcm9wcy5pc09wZW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGlzQ2xvc2luZzogdHJ1ZSxcbiAgICAgICAgICBpc09wZW5pbmc6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAocHJldlN0YXRlLnByZXZQcm9wcy5pc09wZW4gIT09IG5leHRQcm9wcy5pc09wZW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcmV2UHJvcHM6IHtcbiAgICAgICAgICAgIGlzT3BlbjogbmV4dFByb3BzLmlzT3BlblxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aVBvcG92ZXIsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgaXNPcGVuOiBmYWxzZSxcbiAgb3duRm9jdXM6IHRydWUsXG4gIHJlcG9zaXRpb25Ub0Nyb3NzQXhpczogdHJ1ZSxcbiAgYW5jaG9yUG9zaXRpb246ICdkb3duQ2VudGVyJyxcbiAgcGFuZWxQYWRkaW5nU2l6ZTogJ20nLFxuICBoYXNBcnJvdzogdHJ1ZSxcbiAgZGlzcGxheTogJ2lubGluZS1ibG9jaydcbn0pO1xuRXVpUG9wb3Zlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIEFsaWdubWVudCBvZiB0aGUgcG9wb3ZlciBhbmQgYXJyb3cgcmVsYXRpdmUgdG8gdGhlIGJ1dHRvblxuICAgICAqL1xuICBhbmNob3JQb3NpdGlvbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogU3R5bGUgYW5kIHBvc2l0aW9uIGFsdGVyYXRpb24gZm9yIGFycm93LWxlc3MgYXR0YWNobWVudC5cbiAgICAgKiBJbnRlbmRlZCBmb3IgdXNlIHdpdGggaW5wdXRzIGFzIGFuY2hvcnMsIGUuZy4gRXVpSW5wdXRQb3BvdmVyXG4gICAgICovXG4gIGF0dGFjaFRvQW5jaG9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogVHJpZ2dlcmluZyBlbGVtZW50IGZvciB3aGljaCB0byBhbGlnbiB0aGUgcG9wb3ZlciB0b1xuICAgICAqL1xuICBidXR0b246IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaGFuZGxlIGhpZGluZyBvZiB0aGUgcG9wb3ZlclxuICAgICAqL1xuICBjbG9zZVBvcG92ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIFJlc3RyaWN0IHRoZSBwb3BvdmVyJ3MgcG9zaXRpb24gd2l0aGluIHRoaXMgZWxlbWVudFxuICAgICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIENTUyBkaXNwbGF5IHR5cGUgZm9yIGJvdGggdGhlIHBvcG92ZXIgYW5kIGFuY2hvclxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIEV1aUZvY3VzVHJhcFxuICAgICAqL1xuICBmb2N1c1RyYXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogU2hvdyBhcnJvdyBpbmRpY2F0aW5nIHRvIG9yaWdpbmF0aW5nIGJ1dHRvblxuICAgICAqL1xuICBoYXNBcnJvdzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFNwZWNpZmllcyB3aGF0IGVsZW1lbnQgc2hvdWxkIGluaXRpYWxseSBoYXZlIGZvY3VzOyBDYW4gYmUgYSBET01cbiAgICAgKiBub2RlLCBvciBhIHNlbGVjdG9yIHN0cmluZyAod2hpY2ggd2lsbCBiZSBwYXNzZWQgdG9cbiAgICAgKiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCkgdG8gZmluZCB0aGUgRE9NIG5vZGUpLCBvciBhIGZ1bmN0aW9uIHRoYXRcbiAgICAgKiByZXR1cm5zIGEgRE9NIG5vZGUuXG4gICAgICpcbiAgICAgKiBJZiBub3QgcGFzc2VkLCBpbml0aWFsIGZvY3VzIGRlZmF1bHRzIHRvIHRoZSBwb3BvdmVyIHBhbmVsLlxuICAgICAqL1xuICBpbml0aWFsRm9jdXM6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFBhc3NlZCBkaXJlY3RseSB0byBFdWlQb3J0YWwgZm9yIERPTSBwb3NpdGlvbmluZy4gQm90aCBwcm9wZXJ0aWVzIGFyZVxuICAgICAqIHJlcXVpcmVkIGlmIHByb3AgaXMgc3BlY2lmaWVkXG4gICAgICovXG4gIGluc2VydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzaWJsaW5nOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJiZWZvcmVcIiwgXCJhZnRlclwiXSkuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAgICogVmlzaWJpbGl0eSBzdGF0ZSBvZiB0aGUgcG9wb3ZlclxuICAgICAqL1xuICBpc09wZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBUcmFwcyB0YWIgZm9jdXMgd2l0aGluIHRoZSBwb3BvdmVyIGNvbnRlbnRzXG4gICAgICovXG4gIG93bkZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQ3VzdG9tIGNsYXNzIGFkZGVkIHRvIHRoZSBFdWlQYW5lbCBjb250YWluaW5nIHRoZSBwb3BvdmVyIGNvbnRlbnRzXG4gICAgICovXG4gIHBhbmVsQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBFdWlQYW5lbCBwYWRkaW5nIG9uIGFsbCBzaWRlc1xuICAgICAqL1xuICBwYW5lbFBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBTdGFuZGFyZCBET00gYHN0eWxlYCBhdHRyaWJ1dGUuIFBhc3NlZCB0byB0aGUgRXVpUGFuZWxcbiAgICAgKi9cbiAgcGFuZWxTdHlsZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byBFdWlQYW5lbC4gU2VlICNFdWlQb3BvdmVyUGFuZWxQcm9wc1xuICAgICAqL1xuICBwYW5lbFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIl0pLFxuICAgIC8qKlxuICAgICAgICogUGFkZGluZyBmb3IgYWxsIGZvdXIgc2lkZXNcbiAgICAgICAqL1xuICAgIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogQ29ybmVyIGJvcmRlciByYWRpdXNcbiAgICAgICAqL1xuICAgIGJvcmRlclJhZGl1czogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFdoZW4gdHJ1ZSB0aGUgcGFuZWwgd2lsbCBncm93IGluIGhlaWdodCB0byBtYXRjaCBgRXVpRmxleEl0ZW1gXG4gICAgICAgKi9cbiAgICBncm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwYW5lbFJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgcGFuZWxSZWY6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIE9wdGlvbmFsIHNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zIHRvIGFubm91bmNlIHVwb24gcG9wb3ZlciBvcGVuLFxuICAgICAqIGluIGFkZGl0aW9uIHRvIEVVSSdzIGRlZmF1bHQgcG9wb3ZlciBpbnN0cnVjdGlvbnMgZm9yIEVzY2FwZSBvbiBjbG9zZS5cbiAgICAgKiBVc2VmdWwgZm9yIHBvcG92ZXJzIHRoYXQgbWF5IGhhdmUgYWRkaXRpb25hbCBrZXlib2FyZCBjYXBhYmlsaXRpZXMgc3VjaCBhc1xuICAgICAqIGFycm93IG5hdmlnYXRpb24uXG4gICAgICovXG4gIHBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRdKSxcbiAgcG9wb3ZlclJlZjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAsIHRoZSBwb3BvdmVyJ3MgcG9zaXRpb24gaXMgcmUtY2FsY3VsYXRlZCB3aGVuIHRoZSB1c2VyXG4gICAgICogc2Nyb2xscywgdGhpcyBzdXBwb3J0cyBoYXZpbmcgZml4ZWQtcG9zaXRpb24gcG9wb3ZlciBhbmNob3JzLiBXaGVuIG5lc3RpbmdcbiAgICAgKiBhbiBgRXVpUG9wb3ZlcmAgaW4gYSBzY3JvbGxhYmxlIGNvbnRhaW5lciwgYHJlcG9zaXRpb25PblNjcm9sbGAgc2hvdWxkIGJlIGB0cnVlYFxuICAgICAqL1xuICByZXBvc2l0aW9uT25TY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBwb3BvdmVycyB3aWxsIGF0dGVtcHQgdG8gcG9zaXRpb24gdGhlbXNlbHZlcyBhbG9uZyB0aGUgaW5pdGlhbFxuICAgICAqIGF4aXMgc3BlY2lmaWVkLiBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20gZWl0aGVyIHZlcnRpY2FsbHkgb3IgaG9yaXpvbnRhbGx5XG4gICAgICogaG93ZXZlciwgdGhlIHBvcG92ZXIgd2lsbCBhdHRlbXB0IHRvIHJlcG9zaXRpb24gaXRzZWxmIGFsb25nIHRoZSBzZWNvbmRhcnlcbiAgICAgKiBjcm9zcyBheGlzIGlmIHRoZXJlIGlzIHJvb20gdGhlcmUgaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIElmIHlvdSBkbyBub3Qgbm90IHdhbnQgdGhpcyByZXBvc2l0aW9uaW5nIHRvIG9jY3VyIChhbmQgaXQgaXMgYWNjZXB0YWJsZSBmb3JcbiAgICAgKiB0aGUgcG9wb3ZlciB0byBhcHBlYXIgb2Zmc2NyZWVuKSwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICByZXBvc2l0aW9uVG9Dcm9zc0F4aXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBNdXN0IGJlIHNldCB0byB0cnVlIGlmIHVzaW5nIGBFdWlEcmFnRHJvcENvbnRleHRgIHdpdGhpbiBhIHBvcG92ZXIsXG4gICAgICogb3RoZXJ3aXNlIHlvdXIgbmVzdGVkIGRyYWcgJiBkcm9wIHdpbGwgaGF2ZSBpbmNvcnJlY3QgcG9zaXRpb25pbmdcbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIC0gdXNlIGB1c2VQb3J0YWxgIHByb3Agb24gY2hpbGRyZW4gYEV1aURyYWdnYWJsZWAgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgICAqL1xuICBoYXNEcmFnRHJvcDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHBvcG92ZXIgY29udGVudCBpbmhlcml0cyB0aGUgei1pbmRleCBvZiB0aGUgYW5jaG9yXG4gICAgICogY29tcG9uZW50OyBwYXNzIGB6SW5kZXhgIHRvIG92ZXJyaWRlXG4gICAgICovXG4gIHpJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAgICogRGlzdGFuY2UgYXdheSBmcm9tIHRoZSBhbmNob3IgdGhhdCB0aGUgcG9wb3ZlciB3aWxsIHJlbmRlclxuICAgICAqL1xuICBvZmZzZXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgICAqIE1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlciBhbmQgdGhlIGJvdW5kaW5nIGNvbnRhaW5lcjtcbiAgICAgKiBQYXNzIGFuIGFycmF5IG9mIDQgdmFsdWVzIHRvIGFkanVzdCBlYWNoIHNpZGUgZGlmZmVyZW50bHk6IGBbdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XWBcbiAgICAgKiBAZGVmYXVsdCAxNlxuICAgICAqL1xuICBidWZmZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIEVsZW1lbnQgdG8gcGFzcyBhcyB0aGUgY2hpbGQgZWxlbWVudCBvZiB0aGUgYXJyb3c7XG4gICAgICogVXNlIGNhc2UgaXMgdHlwaWNhbGx5IGxpbWl0ZWQgdG8gYW4gYWNjb21wYW55aW5nIGBFdWlCZWFjb25gXG4gICAgICovXG4gIGFycm93Q2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBQcm92aWRlIGEgbmFtZSB0byB0aGUgcG9wb3ZlciBwYW5lbFxuICAgICAqL1xuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogQWx0ZXJuYXRpdmUgb3B0aW9uIHRvIGBhcmlhLWxhYmVsYCB0aGF0IHRha2VzIGFuIGBpZGAuXG4gICAgICogVXN1YWxseSB0YWtlcyB0aGUgYGlkYCBvZiB0aGUgcG9wb3ZlciB0aXRsZVxuICAgICAqL1xuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBGdW5jdGlvbiBjYWxsYmFjayBmb3Igd2hlbiB0aGUgcG9wb3ZlciBwb3NpdG9uIGNoYW5nZXNcbiAgICAgKi9cbiAgb25Qb3NpdGlvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXInO1xuZXhwb3J0IHZhciBFdWlNdXRhdGlvbk9ic2VydmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRXVpT2JzZXJ2ZXIpIHtcbiAgZnVuY3Rpb24gRXVpTXV0YXRpb25PYnNlcnZlcigpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aU11dGF0aW9uT2JzZXJ2ZXIpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aU11dGF0aW9uT2JzZXJ2ZXIsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm5hbWVcIiwgJ0V1aU11dGF0aW9uT2JzZXJ2ZXInKTtcbiAgICAvLyB0aGUgYG9uTXV0YXRpb25gIHByb3AgbWF5IGNoYW5nZSB3aGlsZSB0aGUgb2JzZXJ2ZXIgaXMgYm91bmQsIGFic3RyYWN0aW5nXG4gICAgLy8gaXQgb3V0IGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBtZWFucyB0aGUgY3VycmVudCBgb25NdXRhdGlvbmAgdmFsdWUgaXMgdXNlZFxuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbk11dGF0aW9uXCIsIGZ1bmN0aW9uIChyZWNvcmRzLCBvYnNlcnZlcikge1xuICAgICAgX3RoaXMucHJvcHMub25NdXRhdGlvbihyZWNvcmRzLCBvYnNlcnZlcik7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImJlZ2luT2JzZXJ2ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY2hpbGROb2RlID0gX3RoaXMuY2hpbGROb2RlO1xuICAgICAgX3RoaXMub2JzZXJ2ZXIgPSBtYWtlTXV0YXRpb25PYnNlcnZlcihjaGlsZE5vZGUsIF90aGlzLnByb3BzLm9ic2VydmVyT3B0aW9ucywgX3RoaXMub25NdXRhdGlvbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlNdXRhdGlvbk9ic2VydmVyLCBfRXVpT2JzZXJ2ZXIpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aU11dGF0aW9uT2JzZXJ2ZXIpO1xufShFdWlPYnNlcnZlcik7XG52YXIgbWFrZU11dGF0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiBtYWtlTXV0YXRpb25PYnNlcnZlcihub2RlLCBfb2JzZXJ2ZXJPcHRpb25zLCBjYWxsYmFjaykge1xuICAvLyBUaGUgTXV0YXRpb25PYnNlcnZlciBwb2x5ZmlsbCB1c2VkIGluIEtpYmFuYSAoZm9yIEplc3QpIGltcGxlbWVudHNcbiAgLy8gYW4gb2xkZXIgc3BlYyBpbiB3aGljaCBzcGVjaWZ5aW5nIGBhdHRyaWJ1dGVPbGRWYWx1ZWAgb3IgYGF0dHJpYnV0ZUZpbHRlcmBcbiAgLy8gd2l0aG91dCBzcGVjaWZ5aW5nIGBhdHRyaWJ1dGVzYCByZXN1bHRzIGluIGEgYFN5bnRheEVycm9yYC5cbiAgLy8gVGhlIGZvbGxvd2luZyBsb2dpYyBwYXRjaGVzIHRoZSBuZXdlciBzcGVjIGluIHdoaWNoIGBhdHRyaWJ1dGVzOiB0cnVlYCBjYW4gYmVcbiAgLy8gaW1wbGllZCB3aGVuIGFwcHJvcHJpYXRlIChgYXR0cmlidXRlT2xkVmFsdWVgIG9yIGBhdHRyaWJ1dGVGaWx0ZXJgIGlzIHNwZWNpZmllZCkuXG4gIHZhciBvYnNlcnZlck9wdGlvbnMgPSBfb2JqZWN0U3ByZWFkKHt9LCBfb2JzZXJ2ZXJPcHRpb25zKTtcbiAgdmFyIG5lZWRzQXR0cmlidXRlcyA9IG9ic2VydmVyT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYXR0cmlidXRlT2xkVmFsdWUnKSB8fCBvYnNlcnZlck9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2F0dHJpYnV0ZUZpbHRlcicpO1xuICBpZiAobmVlZHNBdHRyaWJ1dGVzICYmICFvYnNlcnZlck9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2F0dHJpYnV0ZXMnKSkge1xuICAgIG9ic2VydmVyT3B0aW9ucy5hdHRyaWJ1dGVzID0gdHJ1ZTtcbiAgfVxuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG4gIG9ic2VydmVyLm9ic2VydmUobm9kZSwgb2JzZXJ2ZXJPcHRpb25zKTtcbiAgcmV0dXJuIG9ic2VydmVyO1xufTtcbmV4cG9ydCB2YXIgdXNlTXV0YXRpb25PYnNlcnZlciA9IGZ1bmN0aW9uIHVzZU11dGF0aW9uT2JzZXJ2ZXIoY29udGFpbmVyLCBjYWxsYmFjaywgb2JzZXJ2ZXJPcHRpb25zKSB7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvbnRhaW5lciAhPSBudWxsKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBtYWtlTXV0YXRpb25PYnNlcnZlcihjb250YWluZXIsIG9ic2VydmVyT3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH07XG4gICAgfVxuICB9LFxuICAvLyBpZ25vcmUgY2hhbmdpbmcgb2JzZXJ2ZXJPcHRpb25zXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBbY29udGFpbmVyLCBjYWxsYmFja10pO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgQ2hpbGRyZW4sIGNsb25lRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5leHBvcnQgdmFyIEV1aU91dHNpZGVDbGlja0RldGVjdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aU91dHNpZGVDbGlja0RldGVjdG9yKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvcik7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aU91dHNpZGVDbGlja0RldGVjdG9yLCBbcHJvcHNdKTtcblxuICAgIC8vIHRoZSBpZCBpcyB1c2VkIHRvIGlkZW50aWZ5IHdoaWNoIEV1aU91dHNpZGVDbGlja0RldGVjdG9yXG4gICAgLy8gaXMgdGhlIHNvdXJjZSBvZiBhIGNsaWNrIGV2ZW50OyBhcyB0aGUgY2xpY2sgZXZlbnQgYnViYmxlc1xuICAgIC8vIHVwIGFuZCByZWFjaGVzIHRoZSBjbGljayBkZXRlY3RvcidzIGNoaWxkIGNvbXBvbmVudCB0aGVcbiAgICAvLyBpZCB2YWx1ZSBpcyBzdGFtcGVkIG9uIHRoZSBldmVudC4gVGhpcyBpZCBpcyBpbnNwZWN0ZWRcbiAgICAvLyBpbiB0aGUgZG9jdW1lbnQncyBjbGljayBoYW5kbGVyLCBhbmQgaWYgdGhlIGlkIGRvZXNuJ3RcbiAgICAvLyBleGlzdCBvciBkb2Vzbid0IG1hdGNoIHRoaXMgZGV0ZWN0b3IncyBpZCwgdGhlbiB0cmlnZ2VyXG4gICAgLy8gdGhlIG91dHNpZGVDbGljayBjYWxsYmFjay5cbiAgICAvL1xuICAgIC8vIFRha2luZyB0aGlzIGFwcHJvYWNoIGluc3RlYWQgb2YgY2hlY2tpbmcgaWYgdGhlIGV2ZW50J3NcbiAgICAvLyB0YXJnZXQgZWxlbWVudCBleGlzdHMgaW4gdGhpcyBjb21wb25lbnQncyBET00gc3ViLXRyZWUgaXNcbiAgICAvLyBuZWNlc3NhcnkgZm9yIGhhbmRsaW5nIGNsaWNrcyBvcmlnaW5hdGluZyBmcm9tIGNoaWxkcmVuXG4gICAgLy8gcmVuZGVyZWQgdGhyb3VnaCBSZWFjdCdzIHBvcnRhbHMgKEV1aVBvcnRhbCkuIFRoZSBpZCB0cmFja2luZ1xuICAgIC8vIHdvcmtzIGJlY2F1c2UgUmVhY3QgZ3VhcmFudGVlcyB0aGUgZXZlbnQgYnViYmxlcyB0aHJvdWdoIHRoZVxuICAgIC8vIHZpcnR1YWwgRE9NIGFuZCBleGVjdXRlcyBFdWlDbGlja0RldGVjdG9yJ3Mgb25DbGljayBoYW5kbGVyLFxuICAgIC8vIHN0YW1waW5nIHRoZSBpZCBldmVuIHRob3VnaCB0aGUgZXZlbnQgb3JpZ2luYXRlcyBvdXRzaWRlXG4gICAgLy8gdGhpcyBjb21wb25lbnQncyByZWlmaWVkIERPTSB0cmVlLlxuICAgIC8vIFdlIGFyZSB3b3JraW5nIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBhIGNsaWNrIGV2ZW50IGlzXG4gICAgLy8gZXF1aXZhbGVudCB0byBhIHNlcXVlbnRpYWwsIGNvbXBvdW5kIHByZXNzIGFuZCByZWxlYXNlIG9mXG4gICAgLy8gdGhlIHBvaW50aW5nIGRldmljZSAobW91c2UsIGZpbmdlciwgc3R5bHVzLCBldGMuKS5cbiAgICAvLyBBIGNsaWNrIGV2ZW50J3MgdGFyZ2V0IGNhbiBiZSBpbXByZWNpc2UsIGFzIHRoZSB2YWx1ZSB3aWxsIGJlXG4gICAgLy8gdGhlIGNsb3Nlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBwcmVzcyAobW91c2Vkb3duLCB0b3VjaHN0YXJ0KVxuICAgIC8vIGFuZCByZWxlYXNlIChtb3VzZXVwLCB0b3VjaGVuZCkgZXZlbnRzIChvZnRlbiA8Ym9keSAvPikgaWZcbiAgICAvLyB0aGUgdGhlIHRhcmdldCBvZiBlYWNoIGV2ZW50IGRpZmZlcnMuXG4gICAgLy8gV2UgbmVlZCB0aGUgYWN0dWFsIGV2ZW50IHRhcmdldHMgdG8gbWFrZSB0aGUgY29ycmVjdCBkZWNpc2lvbnNcbiAgICAvLyBhYm91dCB1c2VyIGludGVudGlvbi4gU28sIGNvbnNpZGVyIHRoZSBkb3duL3N0YXJ0IGFuZCB1cC9lbmRcbiAgICAvLyBpdGVtcyBiZWxvdyBhcyB0aGUgZGVjb25zdHJ1Y3Rpb24gb2YgYSBjbGljayBldmVudC5cbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaWRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2FwdHVyZWREb3duSWRzXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQ2xpY2tPdXRzaWRlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzLmlzRGlzYWJsZWQsXG4gICAgICAgIG9uT3V0c2lkZUNsaWNrID0gX3RoaXMkcHJvcHMub25PdXRzaWRlQ2xpY2s7XG4gICAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBbXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGV2ZW50ID0gZTtcbiAgICAgIGlmIChldmVudC5ldWlHZW5lcmF0ZWRCeSAmJiBldmVudC5ldWlHZW5lcmF0ZWRCeS5pbmNsdWRlcyhfdGhpcy5pZCkgfHwgX3RoaXMuY2FwdHVyZWREb3duSWRzLmluY2x1ZGVzKF90aGlzLmlkKSkge1xuICAgICAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBbXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gW107XG4gICAgICByZXR1cm4gb25PdXRzaWRlQ2xpY2soZXZlbnQpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkNoaWxkQ2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50LCBjYikge1xuICAgICAgLy8gdG8gc3VwcG9ydCBuZXN0ZWQgY2xpY2sgZGV0ZWN0b3JzLCBidWlsZCBhbiBhcnJheVxuICAgICAgLy8gb2YgZGV0ZWN0b3IgaWRzIHRoYXQgaGF2ZSBiZWVuIGVuY291bnRlcmVkO1xuICAgICAgaWYgKGV2ZW50Lm5hdGl2ZUV2ZW50Lmhhc093blByb3BlcnR5KCdldWlHZW5lcmF0ZWRCeScpKSB7XG4gICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmV1aUdlbmVyYXRlZEJ5LnB1c2goX3RoaXMuaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuZXVpR2VuZXJhdGVkQnkgPSBbX3RoaXMuaWRdO1xuICAgICAgfVxuICAgICAgaWYgKGNiKSBjYihldmVudCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQ2hpbGRNb3VzZURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5vbkNoaWxkQ2xpY2soZXZlbnQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBuYXRpdmVFdmVudCA9IGUubmF0aXZlRXZlbnQ7XG4gICAgICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IG5hdGl2ZUV2ZW50LmV1aUdlbmVyYXRlZEJ5O1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Nb3VzZURvd24pIF90aGlzLnByb3BzLm9uTW91c2VEb3duKGUpO1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Ub3VjaFN0YXJ0KSBfdGhpcy5wcm9wcy5vblRvdWNoU3RhcnQoZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25DaGlsZE1vdXNlVXBcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5vbkNoaWxkQ2xpY2soZXZlbnQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5vbk1vdXNlVXApIF90aGlzLnByb3BzLm9uTW91c2VVcChlKTtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVG91Y2hFbmQpIF90aGlzLnByb3BzLm9uVG91Y2hFbmQoZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfdGhpcy5pZCA9IGh0bWxJZEdlbmVyYXRvcigpKCk7XG4gICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gW107XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25DbGlja091dHNpZGUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uQ2xpY2tPdXRzaWRlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbkNsaWNrT3V0c2lkZSk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25DbGlja091dHNpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0aGlzLnByb3BzLmNoaWxkcmVuLnByb3BzKSwge1xuICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbkNoaWxkTW91c2VEb3duLFxuICAgICAgICBvblRvdWNoU3RhcnQ6IHRoaXMub25DaGlsZE1vdXNlRG93bixcbiAgICAgICAgb25Nb3VzZVVwOiB0aGlzLm9uQ2hpbGRNb3VzZVVwLFxuICAgICAgICBvblRvdWNoRW5kOiB0aGlzLm9uQ2hpbGRNb3VzZVVwXG4gICAgICB9KTtcbiAgICAgIHZhciBjaGlsZCA9IENoaWxkcmVuLm9ubHkodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChjaGlsZCwgcHJvcHMpO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcbiAgb25PdXRzaWRlQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvbk1vdXNlRG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uTW91c2VVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVG91Y2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVG91Y2hFbmQ6IFByb3BUeXBlcy5mdW5jXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJwb3NpdGlvblwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGV1aVBvcG92ZXJBcnJvd1N0eWxlcyB9IGZyb20gJy4vX3BvcG92ZXJfYXJyb3cuc3R5bGVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgUE9TSVRJT05TID0gWyd0b3AnLCAnbGVmdCcsICdyaWdodCcsICdib3R0b20nXTtcbmV4cG9ydCB2YXIgRXVpUG9wb3ZlckFycm93ID0gZnVuY3Rpb24gRXVpUG9wb3ZlckFycm93KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpUG9wb3ZlckFycm93U3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpUG9wb3ZlckFycm93LCBzdHlsZXNbcG9zaXRpb25dXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogXCJldWlQb3BvdmVyX19hcnJvd1wiLFxuICAgIFwiZGF0YS1wb3BvdmVyLWFycm93XCI6IHBvc2l0aW9uLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpUG9wb3ZlckFycm93LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxzLCBsb2dpY2FsU2l6ZUNTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgcG9wb3ZlckFycm93U2l6ZSA9ICdtJztcbmV4cG9ydCB2YXIgZXVpUG9wb3ZlckFycm93U3R5bGVzID0gZnVuY3Rpb24gZXVpUG9wb3ZlckFycm93U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBib3JkZXJDb2xvciA9ICd2YXIoLS1ldWlQb3BvdmVyQmFja2dyb3VuZENvbG9yKSc7XG4gIHZhciBhcnJvd1NpemUgPSBldWlUaGVtZS5zaXplW3BvcG92ZXJBcnJvd1NpemVdO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlQb3BvdmVyQXJyb3c6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbFNpemVDU1MoMCwgMCksIFwiJjo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxTaXplQ1NTKDAsIDApLCBcIjt9O2xhYmVsOmV1aVBvcG92ZXJBcnJvdztcIiksXG4gICAgLy8gUE9TSVRJT05TXG4gICAgdG9wOiAvKiNfX1BVUkVfXyovY3NzKFwiJjo6YmVmb3Jle1wiLCBsb2dpY2Fscy5ib3R0b20sIFwiOi1cIiwgYXJyb3dTaXplLCBcIjtcIiwgbG9naWNhbHNbJ2JvcmRlci1sZWZ0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLXJpZ2h0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLXRvcCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCBcIiwgYm9yZGVyQ29sb3IsIFwiO307bGFiZWw6dG9wO1wiKSxcbiAgICBib3R0b206IC8qI19fUFVSRV9fKi9jc3MoXCImOjpiZWZvcmV7XCIsIGxvZ2ljYWxzLnRvcCwgXCI6LVwiLCBhcnJvd1NpemUsIFwiO1wiLCBsb2dpY2Fsc1snYm9yZGVyLWxlZnQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItcmlnaHQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItYm90dG9tJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIFwiLCBib3JkZXJDb2xvciwgXCI7fTtsYWJlbDpib3R0b207XCIpLFxuICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoXCImOjpiZWZvcmV7XCIsIGxvZ2ljYWxzLnRvcCwgXCI6NTAlO1wiLCBsb2dpY2Fscy5yaWdodCwgXCI6LVwiLCBhcnJvd1NpemUsIFwiO1wiLCBsb2dpY2Fsc1snYm9yZGVyLXRvcCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1ib3R0b20nXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItbGVmdCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCBcIiwgYm9yZGVyQ29sb3IsIFwiO307bGFiZWw6bGVmdDtcIiksXG4gICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCImOjpiZWZvcmV7XCIsIGxvZ2ljYWxzLnRvcCwgXCI6NTAlO1wiLCBsb2dpY2Fscy5sZWZ0LCBcIjotXCIsIGFycm93U2l6ZSwgXCI7XCIsIGxvZ2ljYWxzWydib3JkZXItdG9wJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLWJvdHRvbSddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1yaWdodCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCBcIiwgYm9yZGVyQ29sb3IsIFwiO307bGFiZWw6cmlnaHQ7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlQb3BvdmVyU3R5bGVzID0gZnVuY3Rpb24gZXVpUG9wb3ZlclN0eWxlcygpIHtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlIGFuY2hvciB3cmFwcGVyXG4gICAgZXVpUG9wb3ZlcjogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmV1aVBvcG92ZXI7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJpc09wZW5cIiwgXCJpc0F0dGFjaGVkXCIsIFwiaGFzRHJhZ0Ryb3BcIiwgXCJwb3NpdGlvblwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpUGFuZWwgfSBmcm9tICcuLi8uLi9wYW5lbC9wYW5lbCc7XG5pbXBvcnQgeyBldWlQb3BvdmVyUGFuZWxTdHlsZXMgfSBmcm9tICcuL19wb3BvdmVyX3BhbmVsLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIERFRkFVTFRfUEFORUxfUEFERElOR19TSVpFID0gJ2wnO1xuZXhwb3J0IHZhciBFdWlQb3BvdmVyUGFuZWxDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe1xuICBwYWRkaW5nU2l6ZTogREVGQVVMVF9QQU5FTF9QQURESU5HX1NJWkVcbn0pO1xuLyoqXG4gKiAqSU5URVJOQUwgT05MWSpcbiAqIFB1cmVseSBmb3IgcmUtdXNlIG9mIHN0eWxpbmdcbiAqL1xuZXhwb3J0IHZhciBFdWlQb3BvdmVyUGFuZWwgPSBmdW5jdGlvbiBFdWlQb3BvdmVyUGFuZWwoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGlzT3BlbiA9IF9yZWYuaXNPcGVuLFxuICAgIGlzQXR0YWNoZWQgPSBfcmVmLmlzQXR0YWNoZWQsXG4gICAgaGFzRHJhZ0Ryb3AgPSBfcmVmLmhhc0RyYWdEcm9wLFxuICAgIHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUG9wb3Zlcl9fcGFuZWwnLCBjbGFzc05hbWUpO1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIGNzc1N0eWxlcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdHlsZXMgPSBldWlQb3BvdmVyUGFuZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgICB2YXIgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBzaGFyZWRTdHlsZXMgPSBbc3R5bGVzLmV1aVBvcG92ZXJfX3BhbmVsLCBzdHlsZXNbY29sb3JNb2RlXSwgaXNPcGVuICYmIHN0eWxlcy5pc09wZW5dO1xuICAgIGlmIChoYXNEcmFnRHJvcCkge1xuICAgICAgcmV0dXJuIFtdLmNvbmNhdChzaGFyZWRTdHlsZXMsIFtzdHlsZXMuaGFzRHJhZ0Ryb3AuaGFzRHJhZ0Ryb3AsIHBvc2l0aW9uICYmIHN0eWxlcy5oYXNEcmFnRHJvcFtwb3NpdGlvbl1dKTtcbiAgICB9XG4gICAgaWYgKGlzQXR0YWNoZWQpIHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQoc2hhcmVkU3R5bGVzLCBbc3R5bGVzLmlzQXR0YWNoZWQuaXNBdHRhY2hlZCwgcG9zaXRpb24gJiYgc3R5bGVzLmlzQXR0YWNoZWRbcG9zaXRpb25dXSk7XG4gICAgfVxuICAgIHJldHVybiBbXS5jb25jYXQoc2hhcmVkU3R5bGVzLCBbc3R5bGVzLmhhc1RyYW5zZm9ybS5oYXNUcmFuc2Zvcm0sIGlzT3BlbiAmJiBwb3NpdGlvbiAmJiBzdHlsZXMuaGFzVHJhbnNmb3JtW3Bvc2l0aW9uXV0pO1xuICB9LCBbZXVpVGhlbWVDb250ZXh0LCBpc09wZW4sIHBvc2l0aW9uLCBpc0F0dGFjaGVkLCBoYXNEcmFnRHJvcF0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyUGFuZWxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHtcbiAgICAgIHBhZGRpbmdTaXplOiByZXN0LnBhZGRpbmdTaXplIHx8IERFRkFVTFRfUEFORUxfUEFERElOR19TSVpFXG4gICAgfVxuICB9LCBfX19FbW90aW9uSlNYKEV1aVBhbmVsLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIFwiZGF0YS1wb3BvdmVyLXBhbmVsXCI6IHRydWUsXG4gICAgXCJkYXRhLXBvcG92ZXItb3BlblwiOiBpc09wZW4gfHwgdW5kZWZpbmVkXG4gIH0sIHJlc3QpLCBjaGlsZHJlbikpO1xufTtcbkV1aVBvcG92ZXJQYW5lbC5wcm9wVHlwZXMgPSB7XG4gIGVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIl0pLFxuICAvKipcbiAgICAgKiBQYWRkaW5nIGZvciBhbGwgZm91ciBzaWRlc1xuICAgICAqL1xuICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQ29ybmVyIGJvcmRlciByYWRpdXNcbiAgICAgKi9cbiAgYm9yZGVyUmFkaXVzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBXaGVuIHRydWUgdGhlIHBhbmVsIHdpbGwgZ3JvdyBpbiBoZWlnaHQgdG8gbWF0Y2ggYEV1aUZsZXhJdGVtYFxuICAgICAqL1xuICBncm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgcGFuZWxSZWY6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBpc09wZW46IFByb3BUeXBlcy5ib29sLFxuICBpc0F0dGFjaGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtudWxsXSldKSxcbiAgaGFzRHJhZ0Ryb3A6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJwYWRkaW5nU2l6ZVwiLCBcImJvcmRlclJhZGl1c1wiLCBcImNvbG9yXCIsIFwiaGFzU2hhZG93XCIsIFwiaGFzQm9yZGVyXCIsIFwiZ3Jvd1wiLCBcInBhbmVsUmVmXCIsIFwiZWxlbWVudFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MsIHVzZUV1aVBhZGRpbmdDU1MsIEJBQ0tHUk9VTkRfQ09MT1JTLCBQQURESU5HX1NJWkVTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IGV1aVBhbmVsU3R5bGVzIH0gZnJvbSAnLi9wYW5lbC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBQQURESU5HX1NJWkVTO1xuXG4vLyBFeHBvcnRlZCBwYWRkaW5nIHNpemVzIGFuZCBjbGFzcyBuYW1lcyBuZWNlc3NhcnkgZm9yIEV1aVBvcG92ZXIgYW5kIEV1aUNhcmQuXG4vLyBXaGljaCBjdXJyZW50bHkgd2lsbCBvbmx5IG1haW50YWluIHN1cHBvcnQgZm9yIHRoZSBvcmlnaW5hbCB2YWx1ZXMgdW50aWwgY29udmVyc2lvbi5cbnZhciBwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBub25lOiBudWxsLFxuICBzOiAncGFkZGluZ1NtYWxsJyxcbiAgbTogJ3BhZGRpbmdNZWRpdW0nLFxuICBsOiAncGFkZGluZ0xhcmdlJ1xufTtcbnZhciBfU0laRVMgPSBrZXlzT2YocGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCk7XG5leHBvcnQgdmFyIEJPUkRFUl9SQURJSSA9IFsnbm9uZScsICdtJ107XG5leHBvcnQgdmFyIENPTE9SUyA9IEJBQ0tHUk9VTkRfQ09MT1JTO1xuZXhwb3J0IHZhciBFdWlQYW5lbCA9IGZ1bmN0aW9uIEV1aVBhbmVsKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJHBhZGRpbmdTaXplID0gX3JlZi5wYWRkaW5nU2l6ZSxcbiAgICBwYWRkaW5nU2l6ZSA9IF9yZWYkcGFkZGluZ1NpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkcGFkZGluZ1NpemUsXG4gICAgX3JlZiRib3JkZXJSYWRpdXMgPSBfcmVmLmJvcmRlclJhZGl1cyxcbiAgICBib3JkZXJSYWRpdXMgPSBfcmVmJGJvcmRlclJhZGl1cyA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRib3JkZXJSYWRpdXMsXG4gICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncGxhaW4nIDogX3JlZiRjb2xvcixcbiAgICBfcmVmJGhhc1NoYWRvdyA9IF9yZWYuaGFzU2hhZG93LFxuICAgIGhhc1NoYWRvdyA9IF9yZWYkaGFzU2hhZG93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRoYXNTaGFkb3csXG4gICAgX3JlZiRoYXNCb3JkZXIgPSBfcmVmLmhhc0JvcmRlcixcbiAgICBoYXNCb3JkZXIgPSBfcmVmJGhhc0JvcmRlciA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGhhc0JvcmRlcixcbiAgICBfcmVmJGdyb3cgPSBfcmVmLmdyb3csXG4gICAgZ3JvdyA9IF9yZWYkZ3JvdyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkZ3JvdyxcbiAgICBwYW5lbFJlZiA9IF9yZWYucGFuZWxSZWYsXG4gICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIC8vIFNoYWRvd3MgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHRoZXJlJ3MgYSB3aGl0ZSBiYWNrZ3JvdW5kIChwbGFpbilcbiAgdmFyIGNhbkhhdmVTaGFkb3cgPSAhaGFzQm9yZGVyICYmIGNvbG9yID09PSAncGxhaW4nO1xuICB2YXIgY2FuSGF2ZUJvcmRlciA9IGNvbG9yID09PSAncGxhaW4nIHx8IGNvbG9yID09PSAndHJhbnNwYXJlbnQnO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpUGFuZWxTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlQYW5lbCwgZ3JvdyAmJiBzdHlsZXMuZ3Jvdywgc3R5bGVzLnJhZGl1c1tib3JkZXJSYWRpdXNdLCB1c2VFdWlQYWRkaW5nQ1NTKClbcGFkZGluZ1NpemVdLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MoKVtjb2xvcl0sIGNhbkhhdmVTaGFkb3cgJiYgaGFzU2hhZG93ID09PSB0cnVlICYmIHN0eWxlcy5oYXNTaGFkb3csIGNhbkhhdmVCb3JkZXIgJiYgaGFzQm9yZGVyID09PSB0cnVlICYmIHN0eWxlcy5oYXNCb3JkZXIsIHJlc3Qub25DbGljayAmJiBzdHlsZXMuaXNDbGlja2FibGVdO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBhbmVsJywgXCJldWlQYW5lbC0tXCIuY29uY2F0KGNvbG9yKSwgX2RlZmluZVByb3BlcnR5KHt9LCBcImV1aVBhbmVsLS1cIi5jb25jYXQocGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcFtwYWRkaW5nU2l6ZV0pLCBwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwW3BhZGRpbmdTaXplXSksIGNsYXNzTmFtZSk7XG4gIGlmIChyZXN0Lm9uQ2xpY2sgJiYgZWxlbWVudCAhPT0gJ2RpdicpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IHBhbmVsUmVmLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY3NzOiBjc3NTdHlsZXNcbiAgICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICB9XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHBhbmVsUmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVBhbmVsLnByb3BUeXBlcyA9IHtcbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImJ1dHRvblwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIl0pXSksXG4gIC8qKlxuICAgICAqIEFkZHMgYSBtZWRpdW0gc2hhZG93IHRvIHRoZSBwYW5lbDtcbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW5cImBcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQWRkcyBhIG1lZGl1bSBzaGFkb3cgdG8gdGhlIHBhbmVsO1xuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpblwiYFxuICAgICAqL1xuICBoYXNTaGFkb3c6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBBZGRzIGEgc2xpZ2h0IDFweCBib3JkZXIgb24gYWxsIGVkZ2VzLlxuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpbiB8IHRyYW5zcGFyZW50XCJgXG4gICAgICovXG4gIC8qKlxuICAgICAqIEFkZHMgYSBzbGlnaHQgMXB4IGJvcmRlciBvbiBhbGwgZWRnZXMuXG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluIHwgdHJhbnNwYXJlbnRcImBcbiAgICAgKi9cbiAgaGFzQm9yZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogUGFkZGluZyBmb3IgYWxsIGZvdXIgc2lkZXNcbiAgICAgKi9cbiAgLyoqXG4gICAgICogUGFkZGluZyBmb3IgYWxsIGZvdXIgc2lkZXNcbiAgICAgKi9cbiAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIENvcm5lciBib3JkZXIgcmFkaXVzXG4gICAgICovXG4gIC8qKlxuICAgICAqIENvcm5lciBib3JkZXIgcmFkaXVzXG4gICAgICovXG4gIGJvcmRlclJhZGl1czogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogV2hlbiB0cnVlIHRoZSBwYW5lbCB3aWxsIGdyb3cgaW4gaGVpZ2h0IHRvIG1hdGNoIGBFdWlGbGV4SXRlbWBcbiAgICAgKi9cbiAgLyoqXG4gICAgICogV2hlbiB0cnVlIHRoZSBwYW5lbCB3aWxsIGdyb3cgaW4gaGVpZ2h0IHRvIG1hdGNoIGBFdWlGbGV4SXRlbWBcbiAgICAgKi9cbiAgZ3JvdzogUHJvcFR5cGVzLmJvb2wsXG4gIHBhbmVsUmVmOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBwYW5lbDtcbiAgICAgKiBVc3VhbGx5IGEgbGlnaHRlbmVkIGZvcm0gb2YgdGhlIGJyYW5kIGNvbG9yc1xuICAgICAqL1xuICAvKipcbiAgICAgKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBwYW5lbDtcbiAgICAgKiBVc3VhbGx5IGEgbGlnaHRlbmVkIGZvcm0gb2YgdGhlIGJyYW5kIGNvbG9yc1xuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aVNoYWRvdyB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbmltcG9ydCB7IGV1aUNhbkFuaW1hdGUsIGxvZ2ljYWxDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxMjJsdzBlLWdyb3dcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOmdyb3c7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTIybHcwZS1ncm93XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDpncm93O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWtrN29kaS1ldWlQYW5lbFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjA7bGFiZWw6ZXVpUGFuZWw7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWtrN29kaS1ldWlQYW5lbFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjA7bGFiZWw6ZXVpUGFuZWw7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpUGFuZWxTdHlsZXMgPSBmdW5jdGlvbiBldWlQYW5lbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlQYW5lbDogX3JlZjIsXG4gICAgZ3JvdzogX3JlZixcbiAgICBoYXNTaGFkb3c6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7O2xhYmVsOmhhc1NoYWRvdztcIiksXG4gICAgaGFzQm9yZGVyOiAvKiNfX1BVUkVfXyovY3NzKFwiYm9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIudGhpbiwgXCI7O2xhYmVsOmhhc0JvcmRlcjtcIiksXG4gICAgcmFkaXVzOiB7XG4gICAgICBub25lOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOm5vbmU7XCIpLFxuICAgICAgbTogLyojX19QVVJFX18qL2NzcyhcImJvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBcIjs7bGFiZWw6bTtcIilcbiAgICB9LFxuICAgIC8vIFNldHVwIGludGVyYWN0aXZlIGJlaGF2aW9yXG4gICAgaXNDbGlja2FibGU6IC8qI19fUFVSRV9fKi9jc3MoZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpib3gtc2hhZG93IFwiLCBldWlUaGVtZS5hbmltYXRpb24uZmFzdCwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIix0cmFuc2Zvcm0gXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO30mOmVuYWJsZWR7ZGlzcGxheTpibG9jaztcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiBcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIjt9Jjpob3ZlciwmOmZvY3Vze1wiLCBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIiB0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTtjdXJzb3I6cG9pbnRlcjt9O2xhYmVsOmlzQ2xpY2thYmxlO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpU2hhZG93LCBldWlTaGFkb3dGbGF0LCBldWlTaGFkb3dNZWRpdW0gfSBmcm9tICcuLi8uLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5pbXBvcnQgeyBnZXRTaGFkb3dDb2xvciB9IGZyb20gJy4uLy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zJztcbmltcG9ydCB7IHRpbnQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlLCBsb2dpY2FsQ1NTLCBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBvcGVuQW5pbWF0aW9uVGltaW5nID0gJ3Nsb3cnO1xuXG4vKipcbiAqIDEuIENhbiBleHBhbmQgZnVydGhlciwgYnV0IGl0IGxvb2tzIHdlaXJkIGlmIGl0J3Mgc21hbGxlciB0aGFuIHRoZSBvcmlnaW5hdGluZyBidXR0b24uXG4gKiAyLiBBbmltYXRpb24gaGFwcGVucyBvbiB0aGUgcGFuZWwuIEJ1dCBkb24ndCBhbmltYXRlIHBvc2l0aW9uIHdoZW4gdXNpbmcgdGhlIGF0dGFjaGVkIG1vZGUgbGlrZSBmb3IgaW5wdXRzXG4gKiAzLiBNYWtlIHN1cmUgdGhlIHBhbmVsIHN0YXlzIHdpdGhpbiB0aGUgd2luZG93LlxuICogNC4gTWFrZSB0aGUgcG9wb3ZlciBsaWdodGVyIG9uIGRhcmsgbW9kZSAodG9vIGhhcmQgdG8gZGlzdGluZ3Vpc2ggZnJvbSBwbGFpbiBiZ3Mgb3RoZXJ3aXNlKSwgYW5kIHNldCBhIENTUyB2YXIgZm9yIHRoZSBhcnJvdyB0byB1c2VcbiAqL1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiajV5Nnl4LWlzT3BlblwiLFxuICBzdHlsZXM6IFwib3BhY2l0eToxO3BvaW50ZXItZXZlbnRzOmF1dG87bGFiZWw6aXNPcGVuO1wiXG59IDoge1xuICBuYW1lOiBcImo1eTZ5eC1pc09wZW5cIixcbiAgc3R5bGVzOiBcIm9wYWNpdHk6MTtwb2ludGVyLWV2ZW50czphdXRvO2xhYmVsOmlzT3BlbjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlQb3BvdmVyUGFuZWxTdHlsZXMgPSBmdW5jdGlvbiBldWlQb3BvdmVyUGFuZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICB2YXIgdHJhbnNsYXRlRGlzdGFuY2UgPSBldWlUaGVtZS5zaXplLnM7XG4gIHZhciBhbmltYXRpb25TcGVlZCA9IGV1aVRoZW1lLmFuaW1hdGlvbltvcGVuQW5pbWF0aW9uVGltaW5nXTtcbiAgdmFyIG9wYWNpdHlUcmFuc2l0aW9uID0gXCJvcGFjaXR5IFwiLmNvbmNhdChldWlUaGVtZS5hbmltYXRpb24uYm91bmNlLCBcIiBcIikuY29uY2F0KGFuaW1hdGlvblNwZWVkKTtcbiAgdmFyIHRyYW5zZm9ybVRyYW5zaXRpb24gPSBcInRyYW5zZm9ybSBcIi5jb25jYXQoZXVpVGhlbWUuYW5pbWF0aW9uLmJvdW5jZSwgXCIgXCIpLmNvbmNhdChtYXRoV2l0aFVuaXRzKGFuaW1hdGlvblNwZWVkLCBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB4ICsgMTAwO1xuICB9KSk7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVBvcG92ZXJfX3BhbmVsOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxDU1MoJ21pbi13aWR0aCcsIFwiXCIuY29uY2F0KGV1aVRoZW1lLmJhc2UgKiA3LCBcInB4XCIpKSwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgXCJjYWxjKDEwMHZ3IC0gXCIuY29uY2F0KGV1aVRoZW1lLnNpemUueGwsIFwiKVwiKSksIFwiYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47cG9pbnRlci1ldmVudHM6bm9uZTtvcGFjaXR5OjA7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1ldWlQb3BvdmVyQmFja2dyb3VuZENvbG9yKTtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpcIiwgb3BhY2l0eVRyYW5zaXRpb24sIFwiLFwiLCB0cmFuc2Zvcm1UcmFuc2l0aW9uLCBcIjt9Jjpmb2N1c3tvdXRsaW5lLW9mZnNldDowO307bGFiZWw6ZXVpUG9wb3Zlcl9fcGFuZWw7XCIpLFxuICAgIGlzT3BlbjogX3JlZixcbiAgICAvKiA0ICovXG4gICAgbGlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCItLWV1aVBvcG92ZXJCYWNrZ3JvdW5kQ29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLCBcIjs7bGFiZWw6bGlnaHQ7XCIpLFxuICAgIGRhcms6IC8qI19fUFVSRV9fKi9jc3MoXCItLWV1aVBvcG92ZXJCYWNrZ3JvdW5kQ29sb3I6XCIsIHRpbnQoZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsIDAuMDI1KSwgXCI7O2xhYmVsOmRhcms7XCIpLFxuICAgIC8vIFJlZ3VsYXIgcG9wb3ZlciB3aXRoIGFuIGFycm93LCBhIHRyYW5zZm9ybSBhbmltYXRpb24vdHJhbnNpdGlvbiwgYW5kIGFcbiAgICAvLyBkcm9wIHNoYWRvdyB2aWEgYGZpbHRlcmAgKHdoaWNoIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB0aGUgYXJyb3cpXG4gICAgaGFzVHJhbnNmb3JtOiB7XG4gICAgICBoYXNUcmFuc2Zvcm06IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKSB0cmFuc2xhdGVYKDApIHRyYW5zbGF0ZVooMCk7XCIsIGV1aVNoYWRvd01lZGl1bShldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgcHJvcGVydHk6ICdmaWx0ZXInXG4gICAgICB9KSwgXCIgXCIsIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246XCIsIG9wYWNpdHlUcmFuc2l0aW9uLCBcIixcIiwgdHJhbnNmb3JtVHJhbnNpdGlvbiwgXCI7fTtsYWJlbDpoYXNUcmFuc2Zvcm07XCIpLFxuICAgICAgLy8gUG9zaXRpb25zXG4gICAgICB0b3A6IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWShcIiwgdHJhbnNsYXRlRGlzdGFuY2UsIFwiKSB0cmFuc2xhdGVaKDApOztsYWJlbDp0b3A7XCIpLFxuICAgICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVkoLVwiLCB0cmFuc2xhdGVEaXN0YW5jZSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVgoXCIsIHRyYW5zbGF0ZURpc3RhbmNlLCBcIikgdHJhbnNsYXRlWigwKTs7bGFiZWw6bGVmdDtcIiksXG4gICAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVYKC1cIiwgdHJhbnNsYXRlRGlzdGFuY2UsIFwiKSB0cmFuc2xhdGVaKDApOztsYWJlbDpyaWdodDtcIilcbiAgICB9LFxuICAgIC8vIE5vIGFycm93LCB0cmFuc2Zvcm0sIG9yIGZpbHRlcnNcbiAgICBpc0F0dGFjaGVkOiB7XG4gICAgICBpc0F0dGFjaGVkOiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246XCIsIG9wYWNpdHlUcmFuc2l0aW9uLCBcIjt9O2xhYmVsOmlzQXR0YWNoZWQ7XCIpLFxuICAgICAgdG9wOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvd0ZsYXQoZXVpVGhlbWVDb250ZXh0KSwgXCI7O2xhYmVsOnRvcDtcIiksXG4gICAgICBib3R0b206IC8qI19fUFVSRV9fKi9jc3MoZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgICBnZXQgbGVmdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm90dG9tO1xuICAgICAgfSxcbiAgICAgIGdldCByaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm90dG9tO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy8gSGFzIGFuIGFycm93LCBidXQgY2Fubm90IGhhdmUgdHJhbnNmb3JtIG9yIGZpbHRlciBDU1MgLSB0aGV5IGNyZWF0ZSBhXG4gICAgLy8gc3RhY2tpbmcgY29udGV4dCB0aGF0IG1lc3NlcyB1cCB0aGUgZHJhZy9kcm9wIGZpeGVkIHBvc2l0aW9uaW5nXG4gICAgaGFzRHJhZ0Ryb3A6IHtcbiAgICAgIGhhc0RyYWdEcm9wOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvd01lZGl1bShldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgcHJvcGVydHk6ICdib3gtc2hhZG93J1xuICAgICAgfSksIFwiIFwiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOlwiLCBvcGFjaXR5VHJhbnNpdGlvbiwgXCI7fTtsYWJlbDpoYXNEcmFnRHJvcDtcIiksXG4gICAgICAvLyBUaGUgb2Zmc2V0IHRyYW5zZm9ybXMgbXVzdCBiZSByZWNyZWF0ZWQgaW4gbWFyZ2luc1xuICAgICAgdG9wOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrLXN0YXJ0OlwiLCB0cmFuc2xhdGVEaXN0YW5jZSwgXCI7O2xhYmVsOnRvcDtcIiksXG4gICAgICBib3R0b206IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2stc3RhcnQ6LVwiLCB0cmFuc2xhdGVEaXN0YW5jZSwgXCI7LmV1aVBvcG92ZXJfX2Fycm93e2ZpbHRlcjpkcm9wLXNoYWRvdyhcXG4gICAgICAgICAgICAwIC02cHggNnB4IFwiLCBnZXRTaGFkb3dDb2xvcihldWlUaGVtZS5jb2xvcnMuc2hhZG93LCAwLjEyLCBjb2xvck1vZGUpLCBcIlxcbiAgICAgICAgICApO307bGFiZWw6Ym90dG9tO1wiKSxcbiAgICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4taW5saW5lLXN0YXJ0OlwiLCB0cmFuc2xhdGVEaXN0YW5jZSwgXCI7LmV1aVBvcG92ZXJfX2Fycm93e2ZpbHRlcjpkcm9wLXNoYWRvdyhcXG4gICAgICAgICAgICA2cHggMCA2cHggXCIsIGdldFNoYWRvd0NvbG9yKGV1aVRoZW1lLmNvbG9ycy5zaGFkb3csIDAuMTIsIGNvbG9yTW9kZSksIFwiXFxuICAgICAgICAgICk7fTtsYWJlbDpsZWZ0O1wiKSxcbiAgICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWlubGluZS1zdGFydDotXCIsIHRyYW5zbGF0ZURpc3RhbmNlLCBcIjsuZXVpUG9wb3Zlcl9fYXJyb3d7ZmlsdGVyOmRyb3Atc2hhZG93KFxcbiAgICAgICAgICAgIC02cHggMCA2cHggXCIsIGdldFNoYWRvd0NvbG9yKGV1aVRoZW1lLmNvbG9ycy5zaGFkb3csIDAuMTIsIGNvbG9yTW9kZSksIFwiXFxuICAgICAgICAgICk7fTtsYWJlbDpyaWdodDtcIilcbiAgICB9XG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJjb2xvclwiLCBcInNpemVcIiwgXCJpY29uVHlwZVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaGVhZGluZ1wiLCBcIm9uRGlzbWlzc1wiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpQnV0dG9uSWNvbiB9IGZyb20gJy4uL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQgeyBFdWlQYW5lbCB9IGZyb20gJy4uL3BhbmVsJztcbmltcG9ydCB7IEV1aVNwYWNlciB9IGZyb20gJy4uL3NwYWNlcic7XG5pbXBvcnQgeyBFdWlUaXRsZSB9IGZyb20gJy4uL3RpdGxlJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGV1aUNhbGxPdXRTdHlsZXMsIGV1aUNhbGxPdXRIZWFkZXJTdHlsZXMgfSBmcm9tICcuL2NhbGxfb3V0LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDT0xPUlMgPSBbJ3ByaW1hcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJywgJ2RhbmdlciddO1xuZXhwb3J0IHZhciBIRUFESU5HUyA9IFsnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAncCddO1xuZXhwb3J0IHZhciBFdWlDYWxsT3V0ID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ3ByaW1hcnknIDogX3JlZiRjb2xvcixcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRoZWFkaW5nID0gX3JlZi5oZWFkaW5nLFxuICAgIGhlYWRpbmcgPSBfcmVmJGhlYWRpbmcgPT09IHZvaWQgMCA/ICdwJyA6IF9yZWYkaGVhZGluZyxcbiAgICBvbkRpc21pc3MgPSBfcmVmLm9uRGlzbWlzcyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlDYWxsT3V0U3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpQ2FsbE91dCwgb25EaXNtaXNzICYmIHN0eWxlcy5oYXNEaXNtaXNzQnV0dG9uLmhhc0RpbWlzc0J1dHRvbiwgb25EaXNtaXNzICYmIHN0eWxlcy5oYXNEaXNtaXNzQnV0dG9uW3NpemVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDYWxsT3V0JywgX2RlZmluZVByb3BlcnR5KHt9LCBcImV1aUNhbGxPdXQtLVwiLmNvbmNhdChjb2xvciksIGNvbG9yKSwgY2xhc3NOYW1lKTtcbiAgdmFyIGRpc21pc3NCdXR0b24gPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIW9uRGlzbWlzcykgcmV0dXJuO1xuICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmRpc21pc3NCdXR0b24uZXVpQ2FsbE91dF9fZGlzbWlzc0J1dHRvbiwgc3R5bGVzLmRpc21pc3NCdXR0b25bc2l6ZV1dO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aUNhbGxPdXQuZGlzbWlzc0FyaWFMYWJlbFwiLFxuICAgICAgZGVmYXVsdDogXCJEaXNtaXNzIHRoaXMgY2FsbG91dFwiXG4gICAgfSwgZnVuY3Rpb24gKGRpc21pc3NBcmlhTGFiZWwpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkljb24sIHtcbiAgICAgICAgaWNvblR5cGU6IFwiY3Jvc3NcIixcbiAgICAgICAgb25DbGljazogb25EaXNtaXNzLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogZGlzbWlzc0FyaWFMYWJlbCxcbiAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aURpc21pc3NDYWxsb3V0QnV0dG9uXCJcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCBbb25EaXNtaXNzLCBzdHlsZXMsIGNvbG9yLCBzaXplXSk7XG4gIHZhciBoZWFkZXJTdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlDYWxsT3V0SGVhZGVyU3R5bGVzKTtcbiAgdmFyIGhlYWRlciA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGl0bGUpIHJldHVybjtcbiAgICB2YXIgSCA9IGhlYWRpbmc7XG4gICAgdmFyIGNzc1N0eWxlcyA9IFtoZWFkZXJTdHlsZXMuZXVpQ2FsbE91dEhlYWRlciwgaGVhZGVyU3R5bGVzW2NvbG9yXV07XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGl0bGUsIHtcbiAgICAgIHNpemU6IHNpemUgPT09ICdzJyA/ICd4eHMnIDogJ3hzJyxcbiAgICAgIGNzczogY3NzU3R5bGVzXG4gICAgfSwgX19fRW1vdGlvbkpTWChILCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQ2FsbE91dEhlYWRlcl9fdGl0bGVcIlxuICAgIH0sIGljb25UeXBlICYmIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgY3NzOiBoZWFkZXJTdHlsZXMuZXVpQ2FsbE91dF9faWNvbixcbiAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgc2l6ZTogXCJtXCIsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgY29sb3I6IFwiaW5oZXJpdFwiXG4gICAgfSksIHRpdGxlKSk7XG4gIH0sIFt0aXRsZSwgaGVhZGluZywgaWNvblR5cGUsIHNpemUsIGNvbG9yLCBoZWFkZXJTdHlsZXNdKTtcbiAgdmFyIG9wdGlvbmFsQ2hpbGRyZW4gPSBjaGlsZHJlbiAmJiBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICBzaXplOiBzaXplID09PSAncycgPyAneHMnIDogJ3MnLFxuICAgIGNvbG9yOiBcImRlZmF1bHRcIlxuICB9LCBjaGlsZHJlbik7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBhbmVsLCBfZXh0ZW5kcyh7XG4gICAgYm9yZGVyUmFkaXVzOiBcIm5vbmVcIixcbiAgICBjb2xvcjogY29sb3IsXG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgcGFkZGluZ1NpemU6IHNpemUgPT09ICdzJyA/ICdzJyA6ICdtJyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgcGFuZWxSZWY6IHJlZixcbiAgICBncm93OiBmYWxzZVxuICB9LCByZXN0KSxcbiAgLy8gTm90ZTogdGhlIERPTSBwb3NpdGlvbiBvZiB0aGUgZGlzbWlzcyBidXR0b24gbWF0dGVycyB0byBzY3JlZW4gcmVhZGVyIHVzZXJzLlxuICAvLyBXZSBnZW5lcmFsbHkgd2FudCB0aGVtIHRvIGhhdmUgc29tZSBjb250ZXh0IG9mIF93aGF0XyB0aGV5J3JlIGRpc21pc3NpbmcsXG4gIC8vIGluc3RlYWQgb2YgbmF2aWdhdGluZyB0byB0aGUgZGlzbWlzcyBidXR0b24gZmlyc3QgYmVmb3JlIHRoZSBjYWxsb3V0IGNvbnRlbnRcbiAgaGVhZGVyICYmIG9wdGlvbmFsQ2hpbGRyZW4gPyBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBoZWFkZXIsIGRpc21pc3NCdXR0b24sIF9fX0Vtb3Rpb25KU1goRXVpU3BhY2VyLCB7XG4gICAgc2l6ZTogXCJzXCJcbiAgfSksIG9wdGlvbmFsQ2hpbGRyZW4pIDogX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgaGVhZGVyIHx8IG9wdGlvbmFsQ2hpbGRyZW4sIGRpc21pc3NCdXR0b24pKTtcbn0pO1xuRXVpQ2FsbE91dC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICB0aXRsZTogUHJvcFR5cGVzLm5vZGUsXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgaGVhZGluZzogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBQYXNzaW5nIGFuIGBvbkRpc21pc3NgIGNhbGxiYWNrIHdpbGwgcmVuZGVyIGEgY3Jvc3MgaW4gdGhlIHRvcCByaWdodCBoYW5kIGNvcm5lclxuICAgICAgICogb2YgdGhlIGNhbGxvdXQuXG4gICAgICAgKlxuICAgICAgICogVGhpcyBjYWxsYmFjayBmaXJlcyB3aGVuIHVzZXJzIGNsaWNrIHRoaXMgYnV0dG9uLCB3aGljaCBhbGxvd3MgY29uZGl0aW9uYWxseVxuICAgICAgICogcmVtb3ZpbmcgdGhlIGNhbGxvdXQgb3Igb3RoZXIgYWN0aW9ucy5cbiAgICAgICAqL1xuICBvbkRpc21pc3M6IFByb3BUeXBlcy5mdW5jXG59O1xuRXVpQ2FsbE91dC5kaXNwbGF5TmFtZSA9ICdFdWlDYWxsT3V0JzsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcInNpemVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpU3BhY2VyU3R5bGVzIH0gZnJvbSAnLi9zcGFjZXIuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWyd4cycsICdzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcbmV4cG9ydCB2YXIgRXVpU3BhY2VyID0gZnVuY3Rpb24gRXVpU3BhY2VyKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbCcgOiBfcmVmJHNpemUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpU3BhY2VyU3R5bGVzKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTcGFjZXInLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiZXVpU3BhY2VyLS1cIi5jb25jYXQoc2l6ZSksIHNpemUpLCBjbGFzc05hbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlTcGFjZXIsIHN0eWxlc1tzaXplXV07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcmVzdCkpO1xufTtcbkV1aVNwYWNlci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBzaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FscyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE5MXhpMW4tZXVpU3BhY2VyXCIsXG4gIHN0eWxlczogXCJmbGV4LXNocmluazowO2xhYmVsOmV1aVNwYWNlcjtcIlxufSA6IHtcbiAgbmFtZTogXCIxOTF4aTFuLWV1aVNwYWNlclwiLFxuICBzdHlsZXM6IFwiZmxleC1zaHJpbms6MDtsYWJlbDpldWlTcGFjZXI7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpU3BhY2VyU3R5bGVzID0gZnVuY3Rpb24gZXVpU3BhY2VyU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVNwYWNlcjogX3JlZixcbiAgICAvLyBTaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUueHMsIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2Fscy5oZWlnaHQsIFwiOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICB4eGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wic2l6ZVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwidGV4dFRyYW5zZm9ybVwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcywgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRpdGxlU3R5bGVzIH0gZnJvbSAnLi90aXRsZS5zdHlsZXMnO1xuZXhwb3J0IHZhciBUSVRMRV9TSVpFUyA9IFsneHh4cycsICd4eHMnLCAneHMnLCAncycsICdtJywgJ2wnXTtcbmV4cG9ydCB2YXIgVEVYVF9UUkFOU0ZPUk0gPSBbJ3VwcGVyY2FzZSddO1xuZXhwb3J0IHZhciBFdWlUaXRsZSA9IGZ1bmN0aW9uIEV1aVRpdGxlKF9yZWYpIHtcbiAgdmFyIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHRleHRUcmFuc2Zvcm0gPSBfcmVmLnRleHRUcmFuc2Zvcm0sXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGl0bGVTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUaXRsZSwgdGV4dFRyYW5zZm9ybSA/IHN0eWxlc1t0ZXh0VHJhbnNmb3JtXSA6IHVuZGVmaW5lZCwgc3R5bGVzW3NpemVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUaXRsZScsIGNsYXNzTmFtZSwgY2hpbGRyZW4ucHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpO1xuICByZXR1cm4gY2xvbmVFbGVtZW50V2l0aENzcyhjaGlsZHJlbiwgcHJvcHMpO1xufTtcbkV1aVRpdGxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICB0ZXh0VHJhbnNmb3JtOiBQcm9wVHlwZXMuYW55LFxuICBpZDogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE3M3Y4YTQtZXVpQ2FsbE91dF9fZGlzbWlzc0J1dHRvblwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246YWJzb2x1dGU7bGFiZWw6ZXVpQ2FsbE91dF9fZGlzbWlzc0J1dHRvbjtcIlxufSA6IHtcbiAgbmFtZTogXCIxNzN2OGE0LWV1aUNhbGxPdXRfX2Rpc21pc3NCdXR0b25cIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOmFic29sdXRlO2xhYmVsOmV1aUNhbGxPdXRfX2Rpc21pc3NCdXR0b247XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxOTJraW4wLWV1aUNhbGxPdXRcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO2xhYmVsOmV1aUNhbGxPdXQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTkya2luMC1ldWlDYWxsT3V0XCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpyZWxhdGl2ZTtsYWJlbDpldWlDYWxsT3V0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUNhbGxPdXRTdHlsZXMgPSBmdW5jdGlvbiBldWlDYWxsT3V0U3R5bGVzKF9yZWYzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUNhbGxPdXQ6IF9yZWYyLFxuICAgIGhhc0Rpc21pc3NCdXR0b246IHtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IG9ubHkgdGhlIHRvcC1tb3N0IChmaXJzdC1jaGlsZCkgdGl0bGUgb3IgY2hpbGQgdGV4dFxuICAgICAgLy8gaGFzIGEgcGFkZGluZy1yaWdodCBvbiBpdCAodG8gYWNjb3VudCBmb3IgdGhlIGRpc21pc3MgYnV0dG9uKVxuICAgICAgaGFzRGltaXNzQnV0dG9uOiAvKiNfX1BVUkVfXyovY3NzKFwiJj46Zmlyc3QtY2hpbGQ6aXMoLmV1aVRpdGxlKSwmPjpmaXJzdC1jaGlsZDppcyguZXVpVGV4dCk+OmZpcnN0LWNoaWxke1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLXJpZ2h0JywgZXVpVGhlbWUuc2l6ZS5iYXNlKSwgXCI7fTtsYWJlbDpoYXNEaW1pc3NCdXR0b247XCIpLFxuICAgICAgLy8gRW5zdXJlIHRoZSBjYWxsb3V0IGFsd2F5cyBoYXMgZW5vdWdoIGhlaWdodCBmb3IgdGhlIGJ1dHRvblxuICAgICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtaW4taGVpZ2h0JywgZXVpVGhlbWUuc2l6ZS54bCksIFwiOztsYWJlbDpzO1wiKSxcbiAgICAgIG06IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWluLWhlaWdodCcsIGV1aVRoZW1lLnNpemUueHhsKSwgXCI7O2xhYmVsOm07XCIpXG4gICAgfSxcbiAgICBkaXNtaXNzQnV0dG9uOiB7XG4gICAgICBldWlDYWxsT3V0X19kaXNtaXNzQnV0dG9uOiBfcmVmLFxuICAgICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd0b3AnLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3JpZ2h0JywgZXVpVGhlbWUuc2l6ZS54cyksIFwiOztsYWJlbDpzO1wiKSxcbiAgICAgIG06IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygndG9wJywgZXVpVGhlbWUuc2l6ZS5zKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3JpZ2h0JywgZXVpVGhlbWUuc2l6ZS5zKSwgXCI7O2xhYmVsOm07XCIpXG4gICAgfVxuICB9O1xufTtcbmV4cG9ydCB2YXIgZXVpQ2FsbE91dEhlYWRlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNhbGxPdXRIZWFkZXJTdHlsZXMoX3JlZjQpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpQ2FsbE91dEhlYWRlcjogLyojX19QVVJFX18qL2NzcyhcImZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodC5tZWRpdW0sIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgJzAgIWltcG9ydGFudCdcbiAgICAvLyBJbiBjYXNlIGl0J3MgbmVzdGVkIGluc2lkZSBFdWlUZXh0XG4gICAgKSwgXCI7O2xhYmVsOmV1aUNhbGxPdXRIZWFkZXI7XCIpLFxuICAgIHByaW1hcnk6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnlUZXh0LCBcIjs7bGFiZWw6cHJpbWFyeTtcIiksXG4gICAgc3VjY2VzczogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQsIFwiOztsYWJlbDpzdWNjZXNzO1wiKSxcbiAgICB3YXJuaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy53YXJuaW5nVGV4dCwgXCI7O2xhYmVsOndhcm5pbmc7XCIpLFxuICAgIGRhbmdlcjogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGFuZ2VyVGV4dCwgXCI7O2xhYmVsOmRhbmdlcjtcIiksXG4gICAgZXVpQ2FsbE91dF9faWNvbjogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOnJlbGF0aXZlO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCAnLTFweCcpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLXJpZ2h0JywgZXVpVGhlbWUuc2l6ZS5zKSwgXCI7O2xhYmVsOmV1aUNhbGxPdXRfX2ljb247XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJpc0Rpc2FibGVkXCIsIFwidGl0bGVcIiwgXCJ0aXRsZUVsZW1lbnRcIiwgXCJ0aXRsZVNpemVcIiwgXCJpY29uXCIsIFwiaW1hZ2VcIiwgXCJjaGlsZHJlblwiLCBcImZvb3RlclwiLCBcIm9uQ2xpY2tcIiwgXCJocmVmXCIsIFwicmVsXCIsIFwidGFyZ2V0XCIsIFwidGV4dEFsaWduXCIsIFwiYmV0YUJhZGdlUHJvcHNcIiwgXCJsYXlvdXRcIiwgXCJzZWxlY3RhYmxlXCIsIFwiZGlzcGxheVwiLCBcInBhZGRpbmdTaXplXCJdLFxuICBfZXhjbHVkZWQyID0gW1wiYW5jaG9yUHJvcHNcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIHVzZUV1aVRoZW1lLCBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlR2VuZXJhdGVkSHRtbElkIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQgeyBFdWlUaXRsZSB9IGZyb20gJy4uL3RpdGxlJztcbmltcG9ydCB7IEV1aUJldGFCYWRnZSB9IGZyb20gJy4uL2JhZGdlL2JldGFfYmFkZ2UnO1xuaW1wb3J0IHsgRXVpUGFuZWwgfSBmcm9tICcuLi9wYW5lbCc7XG5pbXBvcnQgeyBFdWlTcGFjZXIgfSBmcm9tICcuLi9zcGFjZXInO1xuaW1wb3J0IHsgRXVpQ2FyZFNlbGVjdCB9IGZyb20gJy4vY2FyZF9zZWxlY3QnO1xuaW1wb3J0IHsgZXVpQ2FyZEJldGFCYWRnZVN0eWxlcywgZXVpQ2FyZFN0eWxlcywgZXVpQ2FyZFRleHRTdHlsZXMgfSBmcm9tICcuL2NhcmQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEFMSUdOTUVOVFMgPSBbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0J107XG5cbi8qKlxuICogQ2VydGFpbiBwcm9wcyBhcmUgb25seSBhbGxvd2VkIHdoZW4gdGhlIGxheW91dCBpcyB2ZXJ0aWNhbFxuICovXG5cbmV4cG9ydCB2YXIgRXVpQ2FyZCA9IGZ1bmN0aW9uIEV1aUNhcmQoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgZGVzY3JpcHRpb24gPSBfcmVmLmRlc2NyaXB0aW9uLFxuICAgIF9pc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICBfcmVmJHRpdGxlRWxlbWVudCA9IF9yZWYudGl0bGVFbGVtZW50LFxuICAgIHRpdGxlRWxlbWVudCA9IF9yZWYkdGl0bGVFbGVtZW50ID09PSB2b2lkIDAgPyAncCcgOiBfcmVmJHRpdGxlRWxlbWVudCxcbiAgICBfcmVmJHRpdGxlU2l6ZSA9IF9yZWYudGl0bGVTaXplLFxuICAgIHRpdGxlU2l6ZSA9IF9yZWYkdGl0bGVTaXplID09PSB2b2lkIDAgPyAncycgOiBfcmVmJHRpdGxlU2l6ZSxcbiAgICBpY29uID0gX3JlZi5pY29uLFxuICAgIGltYWdlID0gX3JlZi5pbWFnZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgZm9vdGVyID0gX3JlZi5mb290ZXIsXG4gICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgIHJlbCA9IF9yZWYucmVsLFxuICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgIF9yZWYkdGV4dEFsaWduID0gX3JlZi50ZXh0QWxpZ24sXG4gICAgdGV4dEFsaWduID0gX3JlZiR0ZXh0QWxpZ24gPT09IHZvaWQgMCA/ICdjZW50ZXInIDogX3JlZiR0ZXh0QWxpZ24sXG4gICAgYmV0YUJhZGdlUHJvcHMgPSBfcmVmLmJldGFCYWRnZVByb3BzLFxuICAgIF9yZWYkbGF5b3V0ID0gX3JlZi5sYXlvdXQsXG4gICAgbGF5b3V0ID0gX3JlZiRsYXlvdXQgPT09IHZvaWQgMCA/ICd2ZXJ0aWNhbCcgOiBfcmVmJGxheW91dCxcbiAgICBzZWxlY3RhYmxlID0gX3JlZi5zZWxlY3RhYmxlLFxuICAgIGRpc3BsYXkgPSBfcmVmLmRpc3BsYXksXG4gICAgX3JlZiRwYWRkaW5nU2l6ZSA9IF9yZWYucGFkZGluZ1NpemUsXG4gICAgcGFkZGluZ1NpemUgPSBfcmVmJHBhZGRpbmdTaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHBhZGRpbmdTaXplLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgaXNEaXNhYmxlZCA9IF9pc0Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcbiAgdmFyIGlzQ2xpY2thYmxlID0gIWlzRGlzYWJsZWQgJiYgKG9uQ2xpY2sgfHwgaHJlZiB8fCBzZWxlY3RhYmxlICYmICFzZWxlY3RhYmxlLmlzRGlzYWJsZWQpO1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUNhcmRTdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBwYWRkaW5nU2l6ZSk7XG4gIHZhciBjYXJkU3R5bGVzID0gW3N0eWxlcy5jYXJkLmV1aUNhcmQsXG4gIC8vIFRleHQgYWxpZ25tZW50IHNob3VsZCBhbHdheXMgYmUgbGVmdCB3aGVuIGhvcml6b250YWxcbiAgc3R5bGVzLmNhcmQuYWxpZ25lZFtsYXlvdXQgPT09ICdob3Jpem9udGFsJyA/ICdsZWZ0JyA6IHRleHRBbGlnbl0sIGlzRGlzYWJsZWQgJiYgc3R5bGVzLmNhcmQuZGlzYWJsZWRdO1xuICB2YXIgY29udGVudFN0eWxlcyA9IFtzdHlsZXMuY29udGVudC5ldWlDYXJkX19jb250ZW50LCBzdHlsZXMuY29udGVudC5sYXlvdXRbbGF5b3V0XV07XG4gIHZhciBtYWluU3R5bGVzID0gW3N0eWxlcy5tYWluLmV1aUNhcmRfX21haW4sIHN0eWxlcy5tYWluLmxheW91dFtsYXlvdXRdXTtcbiAgdmFyIHRleHRTdHlsZXMgPSBldWlDYXJkVGV4dFN0eWxlcyhldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgdGV4dENTUyA9IFt0ZXh0U3R5bGVzLmV1aUNhcmRfX3RleHQsXG4gIC8vIFRleHQgYWxpZ25tZW50IHNob3VsZCBhbHdheXMgYmUgbGVmdCB3aGVuIGhvcml6b250YWxcbiAgdGV4dFN0eWxlcy5hbGlnbmVkW2xheW91dCA9PT0gJ2hvcml6b250YWwnID8gJ2xlZnQnIDogdGV4dEFsaWduXSwgaXNDbGlja2FibGUgJiYgdGV4dFN0eWxlcy5pbnRlcmFjdGl2ZSwgaXNEaXNhYmxlZCAmJiB0ZXh0U3R5bGVzLmRpc2FibGVkXTtcblxuICAvKipcbiAgICogRm9yIGExMXksIHdlIHNpbXVsYXRlIHRoZSBzYW1lIGNsaWNrIHRoYXQncyBwcm92aWRlZCBvbiB0aGUgdGl0bGUgd2hlbiBjbGlja2luZyB0aGUgd2hvbGUgY2FyZFxuICAgKiB3aXRob3V0IGhhdmluZyB0byBtYWtlIHRoZSB3aG9sZSBjYXJkIGEgYnV0dG9uIG9yIGFuY2hvciB0YWcuXG4gICAqICpDYXJkIEFjY2Vzc2liaWxpdHk6IFRoZSByZWR1bmRhbnQgY2xpY2sgZXZlbnQgaHR0cHM6Ly9pbmNsdXNpdmUtY29tcG9uZW50cy5kZXNpZ24vY2FyZHMvKlxuICAgKi9cbiAgdmFyIGxpbmsgPSBudWxsO1xuICB2YXIgb3V0ZXJPbkNsaWNrID0gZnVuY3Rpb24gb3V0ZXJPbkNsaWNrKGUpIHtcbiAgICBpZiAobGluayAmJiBsaW5rICE9PSBlLnRhcmdldCAmJiAhbGluay5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICB9XG4gIH07XG4gIGlmIChsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgIGlmIChpbWFnZSB8fCBmb290ZXIgfHwgdGV4dEFsaWduICE9PSAnY2VudGVyJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFdWlDYXJkOiBgbGF5b3V0PVwiaG9yaXpvbnRhbFwiYCBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBpbWFnZWAsIGBmb290ZXJgLCBvciBgdGV4dEFsaWduYC4nKTtcbiAgICB9XG4gIH1cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDYXJkJywgY2xhc3NOYW1lKTtcbiAgdmFyIGFyaWFJZCA9IHVzZUdlbmVyYXRlZEh0bWxJZCgpO1xuICB2YXIgYXJpYURlc2MgPSBkZXNjcmlwdGlvbiA/IFwiXCIuY29uY2F0KGFyaWFJZCwgXCJEZXNjcmlwdGlvblwiKSA6ICcnO1xuXG4gIC8qKlxuICAgKiBUb3AgYXJlYSBjb250YWluaW5nIGltYWdlLCBpY29uIG9yIGJvdGhcbiAgICovXG5cbiAgdmFyIGltYWdlTm9kZTtcbiAgaWYgKGltYWdlICYmIGxheW91dCA9PT0gJ3ZlcnRpY2FsJykge1xuICAgIGlmICggLyojX19QVVJFX18qL2lzVmFsaWRFbGVtZW50KGltYWdlKSB8fCB0eXBlb2YgaW1hZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgaW1hZ2VTdHlsZXMgPSBbc3R5bGVzLmltYWdlLmV1aUNhcmRfX2ltYWdlLCBkaXNwbGF5ID09PSAndHJhbnNwYXJlbnQnICYmIHN0eWxlcy5pbWFnZS50cmFuc3BhcmVudF07XG4gICAgICBpbWFnZU5vZGUgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2ltYWdlXCIsXG4gICAgICAgIGNzczogaW1hZ2VTdHlsZXNcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChpbWFnZSkgPyBpbWFnZSA6IF9fX0Vtb3Rpb25KU1goXCJpbWdcIiwge1xuICAgICAgICBzcmM6IGltYWdlLFxuICAgICAgICBhbHQ6IFwiXCJcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW1hZ2VOb2RlID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgdmFyIGljb25Ob2RlO1xuICBpZiAoaWNvbikge1xuICAgIHZhciBpY29uU3R5bGVzID0gW3N0eWxlcy5pY29uLmV1aUNhcmRfX2ljb24sIHN0eWxlcy5pY29uLmxheW91dFtsYXlvdXRdLCBpbWFnZU5vZGUgJiYgc3R5bGVzLmljb24ud2l0aEltYWdlXTtcbiAgICBpY29uTm9kZSA9IGNsb25lRWxlbWVudFdpdGhDc3MoaWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGljb24ucHJvcHMuY2xhc3NOYW1lLCAnZXVpQ2FyZF9faWNvbicpLFxuICAgICAgY3NzOiBpY29uU3R5bGVzXG4gICAgfSk7XG4gIH1cbiAgdmFyIG9wdGlvbmFsQ2FyZFRvcDtcbiAgaWYgKGltYWdlTm9kZSB8fCBpY29uTm9kZSkge1xuICAgIHZhciB0b3BTdHlsZXMgPSBbc3R5bGVzLnRvcC5ldWlDYXJkX190b3AsIHN0eWxlcy50b3AubGF5b3V0W2xheW91dF0sIGlzRGlzYWJsZWQgJiYgc3R5bGVzLnRvcC5kaXNhYmxlZF07XG4gICAgb3B0aW9uYWxDYXJkVG9wID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fdG9wXCIsXG4gICAgICBjc3M6IHRvcFN0eWxlc1xuICAgIH0sIGltYWdlTm9kZSwgaWNvbk5vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIEV1aUJldGFCYWRnZVxuICAgKi9cblxuICB2YXIgb3B0aW9uYWxCZXRhQmFkZ2U7XG4gIHZhciBvcHRpb25hbEJldGFCYWRnZUlEID0gJyc7XG4gIHZhciBvcHRpb25hbEJldGFDU1M7XG4gIGlmIChiZXRhQmFkZ2VQcm9wcyAhPT0gbnVsbCAmJiBiZXRhQmFkZ2VQcm9wcyAhPT0gdm9pZCAwICYmIGJldGFCYWRnZVByb3BzLmxhYmVsKSB7XG4gICAgdmFyIGJldGFTdHlsZXMgPSBldWlDYXJkQmV0YUJhZGdlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwgcGFkZGluZ1NpemUpO1xuICAgIG9wdGlvbmFsQmV0YUNTUyA9IGJldGFTdHlsZXMuaGFzQmV0YUJhZGdlO1xuICAgIHZhciBhbmNob3JQcm9wcyA9IGJldGFCYWRnZVByb3BzLmFuY2hvclByb3BzLFxuICAgICAgY2xlYW5lZEJldGFCYWRnZVByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGJldGFCYWRnZVByb3BzLCBfZXhjbHVkZWQyKTtcbiAgICB2YXIgYW5jaG9yQ1NTID0gW2JldGFTdHlsZXMuZXVpQ2FyZF9fYmV0YUJhZGdlQW5jaG9yLCBhbmNob3JQcm9wcyA9PT0gbnVsbCB8fCBhbmNob3JQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYW5jaG9yUHJvcHMuY3NzXTtcbiAgICB2YXIgYmFkZ2VDU1MgPSBbYmV0YVN0eWxlcy5ldWlDYXJkX19iZXRhQmFkZ2UsIGJldGFCYWRnZVByb3BzID09PSBudWxsIHx8IGJldGFCYWRnZVByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBiZXRhQmFkZ2VQcm9wcy5jc3NdO1xuICAgIG9wdGlvbmFsQmV0YUJhZGdlSUQgPSBcIlwiLmNvbmNhdChhcmlhSWQsIFwiQmV0YUJhZGdlXCIpO1xuICAgIG9wdGlvbmFsQmV0YUJhZGdlID0gX19fRW1vdGlvbkpTWChFdWlCZXRhQmFkZ2UsIF9leHRlbmRzKHtcbiAgICAgIGNvbG9yOiBpc0Rpc2FibGVkICYmICFiZXRhQmFkZ2VQcm9wcy5vbkNsaWNrICYmICFiZXRhQmFkZ2VQcm9wcy5ocmVmID8gJ3N1YmR1ZWQnIDogJ2hvbGxvdydcbiAgICB9LCBjbGVhbmVkQmV0YUJhZGdlUHJvcHMsIHtcbiAgICAgIGNzczogYmFkZ2VDU1MsXG4gICAgICBhbmNob3JQcm9wczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhbmNob3JQcm9wcyksIHt9LCB7XG4gICAgICAgIGNzczogYW5jaG9yQ1NTXG4gICAgICB9KSxcbiAgICAgIGlkOiBvcHRpb25hbEJldGFCYWRnZUlEXG4gICAgfSkpO1xuXG4gICAgLy8gSW5jcmVhc2UgcGFkZGluZyBzaXplIHdoZW4gdGhlcmUgaXMgYSBiZXRhIGJhZGdlIHVubGVzcyBpdCdzIGFscmVhZHkgZGV0ZXJtaW5lZFxuICAgIC8vIHBhZGRpbmdTaXplID0gcGFkZGluZ1NpemUgfHwgJ2wnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHNlbGVjdGFibGUgYnV0dG9uXG4gICAqL1xuXG4gIGlmIChzZWxlY3RhYmxlICYmIGlzRGlzYWJsZWQgJiYgc2VsZWN0YWJsZS5pc0Rpc2FibGVkID09PSB1bmRlZmluZWQpIHtcbiAgICBzZWxlY3RhYmxlLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG4gIHZhciBvcHRpb25hbFNlbGVjdEJ1dHRvbjtcbiAgaWYgKHNlbGVjdGFibGUpIHtcbiAgICBvcHRpb25hbFNlbGVjdEJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHBhZGRpbmdTaXplICE9PSAnbm9uZScgJiYgX19fRW1vdGlvbkpTWChFdWlTcGFjZXIsIHtcbiAgICAgIHNpemU6IHBhZGRpbmdTaXplIHx8ICdtJ1xuICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aUNhcmRTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBcIlwiLmNvbmNhdChhcmlhSWQsIFwiVGl0bGUgXCIpLmNvbmNhdChhcmlhRGVzYylcbiAgICB9LCBzZWxlY3RhYmxlLCB7XG4gICAgICBidXR0b25SZWY6IGZ1bmN0aW9uIGJ1dHRvblJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0pKSk7XG4gIH1cbiAgdmFyIFRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbWVudDtcblxuICAvKipcbiAgICogV3JhcHMgdGhlIHRpdGxlIHdpdGggdGhlIGxpbmsgKDxhPikgb3IgYnV0dG9uLlxuICAgKiBUaGlzIG1ha2VzIHRoZSB0aXRsZSBlbGVtZW50IGExMXkgZnJpZW5kbHkgYW5kIGdldHMgZGVzY3JpYmVkIGJ5IGl0cyBjb250ZW50IGlmIGl0cyBpbnRlcmFjdGFibGUuXG4gICAqL1xuXG4gIHZhciB0aGVUaXRsZTtcbiAgaWYgKCFpc0Rpc2FibGVkICYmIGhyZWYpIHtcbiAgICB0aGVUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJhXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX190aXRsZUFuY2hvclwiLFxuICAgICAgY3NzOiB0ZXh0Q1NTLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzYyxcbiAgICAgIHJlbDogZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgICAgaHJlZjogaHJlZixcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgIHJlbDogcmVsXG4gICAgICB9KSxcbiAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgbGluayA9IG5vZGU7XG4gICAgICB9XG4gICAgfSwgdGl0bGUpO1xuICB9IGVsc2UgaWYgKGlzRGlzYWJsZWQgfHwgb25DbGljaykge1xuICAgIHRoZVRpdGxlID0gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fdGl0bGVCdXR0b25cIixcbiAgICAgIGNzczogdGV4dENTUyxcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBcIlwiLmNvbmNhdChvcHRpb25hbEJldGFCYWRnZUlELCBcIiBcIikuY29uY2F0KGFyaWFEZXNjKSxcbiAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgbGluayA9IG5vZGU7XG4gICAgICB9XG4gICAgfSwgdGl0bGUpO1xuICB9IGVsc2Uge1xuICAgIHRoZVRpdGxlID0gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgY3NzOiB0ZXh0Q1NTXG4gICAgfSwgdGl0bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoaWxkcmVuIGFuZC9vciBEZXNjcmlwdGlvbiBjb250ZW50XG4gICAqL1xuICB2YXIgb3B0aW9uYWxDaGlsZHJlbjtcbiAgaWYgKGNoaWxkcmVuKSB7XG4gICAgdmFyIGNoaWxkcmVuU3R5bGVzID0gW3N0eWxlcy5ldWlDYXJkX19jaGlsZHJlbl07XG4gICAgb3B0aW9uYWxDaGlsZHJlbiA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY3NzOiBjaGlsZHJlblN0eWxlc1xuICAgIH0sIGNoaWxkcmVuKTtcbiAgfVxuICB2YXIgb3B0aW9uYWxEZXNjcmlwdGlvbjtcbiAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgdmFyIGRlc2NyaXB0aW9uU3R5bGVzID0gW3N0eWxlcy5ldWlDYXJkX19kZXNjcmlwdGlvbl07XG4gICAgb3B0aW9uYWxEZXNjcmlwdGlvbiA9IF9fX0Vtb3Rpb25KU1goRXVpVGV4dCwge1xuICAgICAgaWQ6IGFyaWFEZXNjLFxuICAgICAgc2l6ZTogXCJzXCIsXG4gICAgICBjc3M6IGRlc2NyaXB0aW9uU3R5bGVzXG4gICAgfSwgX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgZGVzY3JpcHRpb24pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb290ZXIgY29udGVudFxuICAgKi9cbiAgdmFyIG9wdGlvbmFsRm9vdGVyO1xuICBpZiAobGF5b3V0ID09PSAndmVydGljYWwnICYmIGZvb3Rlcikge1xuICAgIHZhciBmb290ZXJTdHlsZXMgPSBbc3R5bGVzLmV1aUNhcmRfX2Zvb3Rlcl07XG4gICAgb3B0aW9uYWxGb290ZXIgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIGNzczogZm9vdGVyU3R5bGVzXG4gICAgfSwgZm9vdGVyKTtcbiAgfVxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQYW5lbCwgX2V4dGVuZHMoe1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogW10uY29uY2F0KGNhcmRTdHlsZXMsIFtvcHRpb25hbEJldGFDU1NdKSxcbiAgICBvbkNsaWNrOiBpc0NsaWNrYWJsZSA/IG91dGVyT25DbGljayA6IHVuZGVmaW5lZCxcbiAgICBjb2xvcjogaXNEaXNhYmxlZCA/ICdzdWJkdWVkJyA6IGRpc3BsYXksXG4gICAgaGFzU2hhZG93OiBpc0Rpc2FibGVkIHx8IGRpc3BsYXkgPyBmYWxzZSA6IHRydWUsXG4gICAgaGFzQm9yZGVyOiBkaXNwbGF5ID8gZmFsc2UgOiB1bmRlZmluZWQsXG4gICAgcGFkZGluZ1NpemU6IHBhZGRpbmdTaXplXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fbWFpblwiLFxuICAgIGNzczogbWFpblN0eWxlc1xuICB9LCBvcHRpb25hbENhcmRUb3AsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19jb250ZW50XCIsXG4gICAgY3NzOiBjb250ZW50U3R5bGVzXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpVGl0bGUsIHtcbiAgICBpZDogXCJcIi5jb25jYXQoYXJpYUlkLCBcIlRpdGxlXCIpLFxuICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX190aXRsZVwiLFxuICAgIHNpemU6IHRpdGxlU2l6ZVxuICB9LCBfX19FbW90aW9uSlNYKFRpdGxlRWxlbWVudCwgbnVsbCwgdGhlVGl0bGUpKSwgb3B0aW9uYWxEZXNjcmlwdGlvbiwgb3B0aW9uYWxDaGlsZHJlbiksIG9wdGlvbmFsQmV0YUJhZGdlLCBvcHRpb25hbEZvb3RlciksIG9wdGlvbmFsU2VsZWN0QnV0dG9uKTtcbn07XG5FdWlDYXJkLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICAgKiBDaGFuZ2UgdG8gXCJob3Jpem9udGFsXCIgaWYgeW91IG5lZWQgdGhlIGljb24gdG8gYmUgbGVmdCBvZiB0aGUgY29udGVudC5cbiAgICAgICAqIEhvcml6b250YWwgbGF5b3V0cyBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBpbWFnZWAsIGBmb290ZXJgLCBvciBgdGV4dEFsaWduYC5cbiAgICAgICAqL1xuICBsYXlvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJ2ZXJ0aWNhbFwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJob3Jpem9udGFsXCJdKS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogQ2hhbmdlcyBhbGlnbm1lbnQgb2YgdGhlIHRpdGxlIGFuZCBkZXNjcmlwdGlvblxuICAgICAgICovXG4gIHRleHRBbGlnbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGFueSBjb21iaW5hdGlvbiBvZiBlbGVtZW50c1xuICAgICAgICovXG4gIGZvb3RlcjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAgICogQWNjZXB0cyBhIHVybCBpbiBzdHJpbmcgZm9ybSBvciBSZWFjdEVsZW1lbnQgZm9yIGEgY3VzdG9tIGltYWdlIGNvbXBvbmVudFxuICAgICAgICovXG4gIGltYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBDYXJkcyBhcmUgcmVxdWlyZWQgdG8gaGF2ZSBhdCBsZWFzdCBhIHRpdGxlIGFuZCBhIGRlc2NyaXB0aW9uIGFuZC9vciBjaGlsZHJlblxuICAgICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB0aGUgdGl0bGUncyBoZWFkaW5nIGVsZW1lbnRcbiAgICAgICAqL1xuICB0aXRsZUVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJoMlwiLCBcImgzXCIsIFwiaDRcIiwgXCJoNVwiLCBcImg2XCIsIFwic3BhblwiLCBcInBcIl0pLFxuICAvKipcbiAgICAgICAqIERldGVybWluZXMgdGhlIHRpdGxlJ3Mgc2l6ZSwgbWF0Y2hpbmcgdGhhdCBvZiBFdWlUaXRsZS5cbiAgICAgICAqIFRob3VnaCwgY2FyZCB0aXRsZXMgY2FuJ3QgYmUgdG9vIGxhcmdlIG9yIHNtYWxsIHJlbGF0aXZlIHRvIHRoZSBkZXNjcmlwdGlvbiB0ZXh0LlxuICAgICAgICovXG4gIHRpdGxlU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJ4c1wiXSksXG4gIC8qKlxuICAgICAgICogUGxhY2VkIHdpdGhpbiBhIHNtYWxsIEV1aVRleHQgYDxwPmAgdGFnXG4gICAgICAgKi9cbiAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogQWNjZXB0cyBhbiBgPEV1aUljb24+YCBub2RlIG9yIGBudWxsYFxuICAgICAgICovXG4gIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSksXG4gIC8qKlxuICAgICAgICogQ3VzdG9tIGNoaWxkcmVuXG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgICAqIFVzZSBvbmx5IGlmIHlvdSB3YW50IHRvIGZvcmVnbyBhIGJ1dHRvbiBpbiB0aGUgZm9vdGVyIGFuZCBtYWtlIHRoZSB3aG9sZSBjYXJkIGNsaWNrYWJsZVxuICAgICAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgICAqIEFkZHMgYSBiYWRnZSB0byB0b3Agb2YgdGhlIGNhcmQgdG8gbGFiZWwgaXQgYXMgXCJCZXRhXCIgb3Igb3RoZXIgbm9uLUdBIHN0YXRlLlxuICAgICAgICogQWNjZXB0cyBhbGwgdGhlIHByb3BzIG9mIFtFdWlCZXRhQmFkZ2VdKCMvZGlzcGxheS9iYWRnZSNiZXRhLWJhZGdlLXR5cGUpLCB3aGVyZSBgbGFiZWxgIGlzIHJlcXVpcmVkLlxuICAgICAgICovXG4gIGJldGFCYWRnZVByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIHRoZSBiYWRnZSBpdHNlbGZcbiAgICAgICAqL1xuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBvbkNsaWNrIGJ1dHRvblxuICAgICAgICovXG4gICAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLyoqXG4gICAgICAgKiBTdXBwbHkgYW4gaWNvbiB0eXBlIGlmIHRoZSBiYWRnZSBzaG91bGQganVzdCBiZSBhbiBpY29uXG4gICAgICAgKi9cbiAgICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgICAvKipcbiAgICAgICAqIE9uZSB3b3JkIGxhYmVsIGxpa2UgXCJCZXRhXCIgb3IgXCJMYWJcIlxuICAgICAgICovXG4gICAgLyoqXG4gICAgICAgKiBPbmUgd29yZCBsYWJlbCBsaWtlIFwiQmV0YVwiIG9yIFwiTGFiXCJcbiAgICAgICAqL1xuICAgIGxhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgICAvKipcbiAgICAgICAqIENvbnRlbnQgZm9yIHRoZSB0b29sdGlwXG4gICAgICAgKi9cbiAgICB0b29sdGlwQ29udGVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXSldKSxcbiAgICAvKipcbiAgICAgICAqIEN1c3RvbSBwb3NpdGlvbiBvZiB0aGUgdG9vbHRpcFxuICAgICAgICovXG4gICAgdG9vbHRpcFBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKSxcbiAgICAvKipcbiAgICAgICAqIFBhc3NlcyBvbnRvIHRoZSBzcGFuIHdyYXBwaW5nIHRoZSBiYWRnZVxuICAgICAgICovXG4gICAgYW5jaG9yUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGNzczogUHJvcFR5cGVzLmFueVxuICAgIH0pLFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgdGl0bGUgd2lsbCBiZSBzdXBwbGllZCBhcyB0b29sdGlwIHRpdGxlIG9yIHRpdGxlIGF0dHJpYnV0ZVxuICAgICAgICogb3RoZXJ3aXNlIHRoZSBsYWJlbCB3aWxsIGJlIHVzZWRcbiAgICAgICAqL1xuICAgIHRpdGxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmddKV0pLFxuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBhY2NlbnQsIHN1YmR1ZWQgYW5kIGhvbGxvdy5cbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICAgIHNpemU6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBTZXRzIHRoZSBgdmVydGljYWwtYWxpZ25gIENTUyBwcm9wZXJ0eVxuICAgICAgICovXG4gICAgYWxpZ25tZW50OiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICAvKipcbiAgICAgICAqIE1hdGNoZXMgdG8gdGhlIGNvbG9yIHByb3BlcnR5IG9mIEV1aVBhbmVsLiBJZiBkZWZpbmVkLCByZW1vdmVzIGFueSBib3JkZXIgJiBzaGFkb3cuXG4gICAgICAgKiBMZWF2ZSBhcyBgdW5kZWZpbmVkYCB0byBkaXNwbGF5IGFzIGEgZGVmYXVsdCBwYW5lbC5cbiAgICAgICAqIFNlbGVjdGFibGUgY2FyZHMgd2lsbCBhbHdheXMgZGlzcGxheSBhcyBhIGRlZmF1bHQgcGFuZWwuXG4gICAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBQYWRkaW5nIGFwcGxpZWQgYXJvdW5kIHRoZSBjb250ZW50IG9mIHRoZSBjYXJkXG4gICAgICAgKi9cbiAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogQWRkcyBhIGJ1dHRvbiB0byB0aGUgYm90dG9tIG9mIHRoZSBjYXJkIHRvIGFsbG93IGZvciBpbi1wbGFjZSBzZWxlY3Rpb25cbiAgICAgICAqL1xuICBzZWxlY3RhYmxlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAgIC8qKlxuICAgICAgICogTWFrZSBidXR0b24gYSBzb2xpZCBjb2xvciBmb3IgcHJvbWluZW5jZVxuICAgICAgICovXG4gICAgLyoqXG4gICAgICAgKiBNYWtlIGJ1dHRvbiBhIHNvbGlkIGNvbG9yIGZvciBwcm9taW5lbmNlXG4gICAgICAgKi9cbiAgICBmaWxsOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIEFueSBvZiB0aGUgbmFtZWQgY29sb3IgcGFsZXR0ZSBvcHRpb25zLlxuICAgICAgICovXG4gICAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBVc2Ugc2l6ZSBgc2AgaW4gY29uZmluZWQgc3BhY2VzXG4gICAgICAgKi9cbiAgICAvKipcbiAgICAgICAqIFVzZSBzaXplIGBzYCBpbiBjb25maW5lZCBzcGFjZXNcbiAgICAgICAqL1xuICAgIHNpemU6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAgICovXG4gICAgLyoqXG4gICAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAgICovXG4gICAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIGVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJhXCIsIFwiYnV0dG9uXCIsIFwic3BhblwiXSksXG4gICAgLyoqXG4gICAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgICAqL1xuICAgIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogRXh0ZW5kcyB0aGUgYnV0dG9uIHRvIDEwMCUgd2lkdGhcbiAgICAgICAqL1xuICAgIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBtaW5pbXVtIHdpZHRoXG4gICAgICAgKi9cbiAgICBtaW5XaWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgICAvKipcbiAgICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAqL1xuICAgIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICAgKi9cbiAgICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGNzczogUHJvcFR5cGVzLmFueVxuICAgIH0pLFxuICAgIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICAgIHR5cGU6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgICAqL1xuICAgIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgICAqL1xuICAgIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbdW5kZWZpbmVkXSldKSxcbiAgICAvKipcbiAgICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dC9jaGlsZHJlbiBvbmx5IChub3QgaWNvbilcbiAgICAgICAqXG4gICAgICAgKiBUaGlzIHNwYW4gd3JhcHBlciBjYW4gYmUgcmVtb3ZlZCBieSBwYXNzaW5nIGB0ZXh0UHJvcHM9e2ZhbHNlfWAuXG4gICAgICAgKi9cbiAgICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgICBpY29uU2l6ZTogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgLyoqXG4gICAgICAgKiBVc2UgYSBib3JkZXIgc3R5bGUgb2YgY2FyZCBpbnN0ZWFkIG9mIHNoYWRvd1xuICAgICAgICovXG4gIGhhc0JvcmRlcjogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJpc1NlbGVjdGVkXCIsIFwiaXNEaXNhYmxlZFwiLCBcImRpc2FibGVkXCIsIFwiY29sb3JcIiwgXCJjaGlsZHJlblwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IEV1aUJ1dHRvbiB9IGZyb20gJy4uLy4uL2J1dHRvbi9idXR0b24nO1xuaW1wb3J0IHsgZXVpQ2FyZFNlbGVjdFN0eWxlcyB9IGZyb20gJy4vY2FyZF9zZWxlY3Quc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNhcmRTZWxlY3QgPSBmdW5jdGlvbiBFdWlDYXJkU2VsZWN0KF9yZWYpIHtcbiAgdmFyIF9yZWYkaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICBpc1NlbGVjdGVkID0gX3JlZiRpc1NlbGVjdGVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaXNTZWxlY3RlZCxcbiAgICBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUNhcmRTZWxlY3RTdHlsZXMoKTtcbiAgdmFyIGJhc2VDU1MgPSBbc3R5bGVzLmV1aUNhcmRTZWxlY3RdO1xuICB2YXIgY2hpbGQgPSBldWlDYXJkU2VsZWN0YWJsZVRleHQoaXNTZWxlY3RlZCwgaXNEaXNhYmxlZCB8fCBkaXNhYmxlZCwgY2hpbGRyZW4pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCdXR0b24sIF9leHRlbmRzKHtcbiAgICBjc3M6IGJhc2VDU1MsXG4gICAgY29sb3I6IGV1aUNhcmRTZWxlY3RhYmxlQ29sb3IoY29sb3IsIGlzU2VsZWN0ZWQpLFxuICAgIHNpemU6IFwibVwiLFxuICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQgfHwgZGlzYWJsZWQsXG4gICAgaWNvblR5cGU6IGlzU2VsZWN0ZWQgPyAnY2hlY2snIDogdW5kZWZpbmVkLFxuICAgIHJvbGU6IFwic3dpdGNoXCIsXG4gICAgXCJhcmlhLWNoZWNrZWRcIjogaXNTZWxlY3RlZCxcbiAgICBmdWxsV2lkdGg6IHRydWVcbiAgfSwgcmVzdCksIGNoaWxkKTtcbn07XG5FdWlDYXJkU2VsZWN0LnByb3BUeXBlcyA9IHtcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogTWFrZSBidXR0b24gYSBzb2xpZCBjb2xvciBmb3IgcHJvbWluZW5jZVxuICAgICAqL1xuICAvKipcbiAgICAgKiBNYWtlIGJ1dHRvbiBhIHNvbGlkIGNvbG9yIGZvciBwcm9taW5lbmNlXG4gICAgICovXG4gIGZpbGw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBBbnkgb2YgdGhlIG5hbWVkIGNvbG9yIHBhbGV0dGUgb3B0aW9ucy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFVzZSBzaXplIGBzYCBpbiBjb25maW5lZCBzcGFjZXNcbiAgICAgKi9cbiAgLyoqXG4gICAgICogVXNlIHNpemUgYHNgIGluIGNvbmZpbmVkIHNwYWNlc1xuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImFcIiwgXCJidXR0b25cIiwgXCJzcGFuXCJdKSxcbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogRXh0ZW5kcyB0aGUgYnV0dG9uIHRvIDEwMCUgd2lkdGhcbiAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWluaW11bSB3aWR0aFxuICAgICAqL1xuICBtaW5XaWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICovXG4gIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgc3R5bGU6IFByb3BUeXBlcy5hbnksXG4gIHR5cGU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFt1bmRlZmluZWRdKV0pLFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQvY2hpbGRyZW4gb25seSAobm90IGljb24pXG4gICAgICpcbiAgICAgKiBUaGlzIHNwYW4gd3JhcHBlciBjYW4gYmUgcmVtb3ZlZCBieSBwYXNzaW5nIGB0ZXh0UHJvcHM9e2ZhbHNlfWAuXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5hbnlcbn07XG5mdW5jdGlvbiBldWlDYXJkU2VsZWN0YWJsZVRleHQoaXNTZWxlY3RlZCwgaXNEaXNhYmxlZCwgY2hpbGRyZW4pIHtcbiAgaWYgKGNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG4gIHZhciB0ZXh0O1xuICBpZiAoaXNTZWxlY3RlZCkge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aUNhcmRTZWxlY3Quc2VsZWN0ZWRcIixcbiAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0ZWRcIlxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlDYXJkU2VsZWN0LnVuYXZhaWxhYmxlXCIsXG4gICAgICBkZWZhdWx0OiBcIlVuYXZhaWxhYmxlXCJcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlDYXJkU2VsZWN0LnNlbGVjdFwiLFxuICAgICAgZGVmYXVsdDogXCJTZWxlY3RcIlxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0ZXh0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV1aUNhcmRTZWxlY3RhYmxlQ29sb3IoY29sb3IsIGlzU2VsZWN0ZWQpIHtcbiAgdmFyIGNhbGN1bGF0ZWRDb2xvcjtcbiAgaWYgKGNvbG9yKSB7XG4gICAgY2FsY3VsYXRlZENvbG9yID0gY29sb3I7XG4gIH0gZWxzZSBpZiAoaXNTZWxlY3RlZCkge1xuICAgIGNhbGN1bGF0ZWRDb2xvciA9ICdzdWNjZXNzJztcbiAgfSBlbHNlIHtcbiAgICBjYWxjdWxhdGVkQ29sb3IgPSAndGV4dCc7XG4gIH1cbiAgcmV0dXJuIGNhbGN1bGF0ZWRDb2xvcjtcbn0iLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiYW9nbDQtZXVpQ2FyZFNlbGVjdFwiLFxuICBzdHlsZXM6IFwidHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50O2FsaWduLXNlbGY6ZmxleC1lbmQ7bGFiZWw6ZXVpQ2FyZFNlbGVjdDtcIlxufSA6IHtcbiAgbmFtZTogXCJhb2dsNC1ldWlDYXJkU2VsZWN0XCIsXG4gIHN0eWxlczogXCJ0cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7YWxpZ24tc2VsZjpmbGV4LWVuZDtsYWJlbDpldWlDYXJkU2VsZWN0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUNhcmRTZWxlY3RTdHlsZXMgPSBmdW5jdGlvbiBldWlDYXJkU2VsZWN0U3R5bGVzKCkge1xuICByZXR1cm4ge1xuICAgIGV1aUNhcmRTZWxlY3Q6IF9yZWZcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aVBhZGRpbmdTaXplLCBldWlTdXBwb3J0c0hhcywgbG9naWNhbENTUywgbG9naWNhbHMsIGxvZ2ljYWxUZXh0QWxpZ25DU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlCdXR0b25Db2xvciB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbnZhciBwYWRkaW5nS2V5ID0gJ20nO1xudmFyIGhhbGZQYWRkaW5nS2V5ID0gJ3MnO1xuXG4vKipcbiAqIDEuIEZvb3RlciBpcyBhbHdheXMgYXQgdGhlIGJvdHRvbS5cbiAqIDMuIEhvcml6b250YWwgbGF5b3V0cyBzaG91bGQgYWx3YXlzIHRvcCBsZWZ0IGFsaWduIG5vIG1hdHRlciB0aGUgdGV4dEFsaWduIHByb3BcbiAqIDQuIEVuc3VyZXMgdGhlIGNvbnRlbnRzIGFsd2F5cyBzdHJldGNoIG5vIG1hdHRlciB0aGUgZmxleCBsYXlvdXRcbiAqL1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInJleW11bi1kaXNhYmxlZFwiLFxuICBzdHlsZXM6IFwiZmlsdGVyOmdyYXlzY2FsZSgxMDAlKTtsYWJlbDpkaXNhYmxlZDtcIlxufSA6IHtcbiAgbmFtZTogXCJyZXltdW4tZGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImZpbHRlcjpncmF5c2NhbGUoMTAwJSk7bGFiZWw6ZGlzYWJsZWQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJjcjN3ejctZXVpQ2FyZF9fY29udGVudFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6ZXVpQ2FyZF9fY29udGVudDtcIlxufSA6IHtcbiAgbmFtZTogXCJjcjN3ejctZXVpQ2FyZF9fY29udGVudFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6ZXVpQ2FyZF9fY29udGVudDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY0ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFrdzB5eG4taG9yaXpvbnRhbFwiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bGFiZWw6aG9yaXpvbnRhbDtcIlxufSA6IHtcbiAgbmFtZTogXCIxa3cweXhuLWhvcml6b250YWxcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2xhYmVsOmhvcml6b250YWw7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJvbW5rMmwtdmVydGljYWxcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsYWJlbDp2ZXJ0aWNhbDtcIlxufSA6IHtcbiAgbmFtZTogXCJvbW5rMmwtdmVydGljYWxcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsYWJlbDp2ZXJ0aWNhbDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY2ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFseXZkcGYtZXVpQ2FyZF9fbWFpblwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2lubGluZS1zaXplOjEwMCU7ZmxleC1ncm93OjE7bGFiZWw6ZXVpQ2FyZF9fbWFpbjtcIlxufSA6IHtcbiAgbmFtZTogXCIxbHl2ZHBmLWV1aUNhcmRfX21haW5cIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6ZmxleDtpbmxpbmUtc2l6ZToxMDAlO2ZsZXgtZ3JvdzoxO2xhYmVsOmV1aUNhcmRfX21haW47XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpQ2FyZFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNhcmRTdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBwYWRkaW5nU2l6ZSkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBwYWRkaW5nQW1vdW50ID0gZXVpUGFkZGluZ1NpemUoZXVpVGhlbWVDb250ZXh0LCBwYWRkaW5nU2l6ZSk7XG4gIHZhciBzcGFjaW5nID0gZXVpUGFkZGluZ1NpemUoZXVpVGhlbWVDb250ZXh0LCBwYWRkaW5nS2V5KTtcbiAgdmFyIGhhbGZTcGFjaW5nID0gZXVpUGFkZGluZ1NpemUoZXVpVGhlbWVDb250ZXh0LCBoYWxmUGFkZGluZ0tleSk7XG4gIHJldHVybiB7XG4gICAgY2FyZDoge1xuICAgICAgZXVpQ2FyZDogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsmOmhhcyhcXG4gICAgICAgICAgICBbY2xhc3MqPSdldWlDYXJkX190ZXh0J11bY2xhc3MqPSctaW50ZXJhY3RpdmUnXTpmb2N1czpmb2N1cy12aXNpYmxlXFxuICAgICAgICAgICl7b3V0bGluZTpcIiwgZXVpVGhlbWUuZm9jdXMud2lkdGgsIFwiIHNvbGlkIGN1cnJlbnRDb2xvcjt9O2xhYmVsOmV1aUNhcmQ7XCIpLFxuICAgICAgYWxpZ25lZDoge1xuICAgICAgICBjZW50ZXI6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiIGFsaWduLWl0ZW1zOmNlbnRlcjs7bGFiZWw6Y2VudGVyO1wiKSxcbiAgICAgICAgbGVmdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiIGFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7O2xhYmVsOmxlZnQ7XCIpLFxuICAgICAgICByaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdyaWdodCcpLCBcIiBhbGlnbi1pdGVtczpmbGV4LWVuZDs7bGFiZWw6cmlnaHQ7XCIpXG4gICAgICB9LFxuICAgICAgZGlzYWJsZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpQnV0dG9uQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAnZGlzYWJsZWQnKSwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZFRleHQsIFwiOztsYWJlbDpkaXNhYmxlZDtcIilcbiAgICB9LFxuICAgIG1haW46IHtcbiAgICAgIGV1aUNhcmRfX21haW46IF9yZWY2LFxuICAgICAgbGF5b3V0OiB7XG4gICAgICAgIHZlcnRpY2FsOiBfcmVmNSxcbiAgICAgICAgaG9yaXpvbnRhbDogX3JlZjRcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgIGV1aUNhcmRfX2NvbnRlbnQ6IF9yZWYzLFxuICAgICAgbGF5b3V0OiB7XG4gICAgICAgIHZlcnRpY2FsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOnZlcnRpY2FsO1wiKSxcbiAgICAgICAgaG9yaXpvbnRhbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICdhdXRvJyksIFwiOztsYWJlbDpob3Jpem9udGFsO1wiKVxuICAgICAgfVxuICAgIH0sXG4gICAgZXVpQ2FyZF9fY2hpbGRyZW46IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhhbGZTcGFjaW5nKSwgXCI7O2xhYmVsOmV1aUNhcmRfX2NoaWxkcmVuO1wiKSxcbiAgICBldWlDYXJkX19kZXNjcmlwdGlvbjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGFsZlNwYWNpbmcpLCBcIjs7bGFiZWw6ZXVpQ2FyZF9fZGVzY3JpcHRpb247XCIpLFxuICAgIGV1aUNhcmRfX2Zvb3RlcjogLyojX19QVVJFX18qL2NzcyhcImZsZXgtZ3JvdzowO1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBzcGFjaW5nKSwgXCI7O2xhYmVsOmV1aUNhcmRfX2Zvb3RlcjtcIiksXG4gICAgdG9wOiB7XG4gICAgICBldWlDYXJkX190b3A6IC8qI19fUFVSRV9fKi9jc3MoXCJmbGV4LWdyb3c6MDtmb250LXNpemU6MDtwb3NpdGlvbjpyZWxhdGl2ZTtcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIHNwYWNpbmcpLCBcIjs7bGFiZWw6ZXVpQ2FyZF9fdG9wO1wiKSxcbiAgICAgIGxheW91dDoge1xuICAgICAgICB2ZXJ0aWNhbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDp2ZXJ0aWNhbDtcIiksXG4gICAgICAgIGhvcml6b250YWw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnYXV0bycpLCBcIjs7bGFiZWw6aG9yaXpvbnRhbDtcIilcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlZDogX3JlZjJcbiAgICB9LFxuICAgIGltYWdlOiB7XG4gICAgICBldWlDYXJkX19pbWFnZTogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtcIiwgbG9naWNhbENTUygnd2lkdGgnLCBcImNhbGMoMTAwJSArIChcIi5jb25jYXQocGFkZGluZ0Ftb3VudCwgXCIgKiAyKSlcIikpLCBcIiBcIiwgbG9naWNhbENTUygnbGVmdCcsIFwiLVwiLmNvbmNhdChwYWRkaW5nQW1vdW50KSksIFwiIFwiLCBsb2dpY2FsQ1NTKCd0b3AnLCBcIi1cIi5jb25jYXQocGFkZGluZ0Ftb3VudCkpLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgXCItXCIuY29uY2F0KHBhZGRpbmdBbW91bnQpKSwgbG9naWNhbENTUygnYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cycsIFwiY2FsYyhcIi5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIFwiIC0gXCIpLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIpXCIpKSwgXCIgXCIsIGxvZ2ljYWxzWydib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyddLCBcIjpjYWxjKFwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSwgXCIgLSBcIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiKTtpbWd7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7fTtsYWJlbDpldWlDYXJkX19pbWFnZTtcIiksXG4gICAgICB0cmFuc3BhcmVudDogLyojX19QVVJFX18qL2NzcyhcImJvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBcIjs7bGFiZWw6dHJhbnNwYXJlbnQ7XCIpXG4gICAgfSxcbiAgICBpY29uOiB7XG4gICAgICBldWlDYXJkX19pY29uOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmV1aUNhcmRfX2ljb247XCIpLFxuICAgICAgd2l0aEltYWdlOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxDU1MoJ3RvcCcsICc1MCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCAnNTAlJyksIFwidHJhbnNmb3JtOnRyYW5zbGF0ZShcXG4gICAgICAgICAgLTUwJSxcXG4gICAgICAgICAgY2FsYygtNTAlICsgLVwiLCBwYWRkaW5nQW1vdW50LCBcIilcXG4gICAgICAgICkhaW1wb3J0YW50OztsYWJlbDp3aXRoSW1hZ2U7XCIpLFxuICAgICAgbGF5b3V0OiB7XG4gICAgICAgIHZlcnRpY2FsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoYWxmU3BhY2luZyksIFwiOztsYWJlbDp2ZXJ0aWNhbDtcIiksXG4gICAgICAgIGhvcml6b250YWw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLXJpZ2h0Jywgc3BhY2luZyksIFwiOztsYWJlbDpob3Jpem9udGFsO1wiKVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJyOGFnemctZXVpQ2FyZF9fdGV4dFwiLFxuICBzdHlsZXM6IFwiZm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOmluaGVyaXQ7bGFiZWw6ZXVpQ2FyZF9fdGV4dDtcIlxufSA6IHtcbiAgbmFtZTogXCJyOGFnemctZXVpQ2FyZF9fdGV4dFwiLFxuICBzdHlsZXM6IFwiZm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOmluaGVyaXQ7bGFiZWw6ZXVpQ2FyZF9fdGV4dDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlDYXJkVGV4dFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNhcmRUZXh0U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpQ2FyZF9fdGV4dDogX3JlZixcbiAgICBpbnRlcmFjdGl2ZTogLyojX19QVVJFX18qL2NzcyhcIm91dGxpbmUtb2Zmc2V0OlwiLCBldWlUaGVtZS5zaXplLnh4cywgXCI7LmV1aUNhcmQ6aG92ZXIgJiwuZXVpQ2FyZDpmb2N1cyAmLCY6aG92ZXIsJjpmb2N1c3t0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO31cIiwgZXVpU3VwcG9ydHNIYXMsIFwie291dGxpbmU6bm9uZSFpbXBvcnRhbnQ7fTtsYWJlbDppbnRlcmFjdGl2ZTtcIiksXG4gICAgYWxpZ25lZDoge1xuICAgICAgY2VudGVyOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIjs7bGFiZWw6Y2VudGVyO1wiKSxcbiAgICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIjs7bGFiZWw6bGVmdDtcIiksXG4gICAgICByaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdyaWdodCcpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpXG4gICAgfSxcbiAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0LCBcIjs7bGFiZWw6ZGlzYWJsZWQ7XCIpXG4gIH07XG59O1xuZXhwb3J0IHZhciBldWlDYXJkQmV0YUJhZGdlU3R5bGVzID0gZnVuY3Rpb24gZXVpQ2FyZEJldGFCYWRnZVN0eWxlcyhldWlUaGVtZUNvbnRleHQsIHBhZGRpbmdTaXplKSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIHBhZGRpbmcgPSBldWlQYWRkaW5nU2l6ZShldWlUaGVtZUNvbnRleHQsIHBhZGRpbmdTaXplKTtcbiAgcmV0dXJuIHtcbiAgICBoYXNCZXRhQmFkZ2U6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzp2aXNpYmxlO1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLXRvcCcsIFwiY2FsYyhcIi5jb25jYXQocGFkZGluZywgXCIgKyBcIikuY29uY2F0KGV1aVRoZW1lLnNpemUucywgXCIpXCIpKSwgXCI7O2xhYmVsOmhhc0JldGFCYWRnZTtcIiksXG4gICAgZXVpQ2FyZF9fYmV0YUJhZGdlQW5jaG9yOiAvKiNfX1BVUkVfXyovY3NzKFwibGluZS1oZWlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygndG9wJywgJzAnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCAnNTAlJyksIFwiIHRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSk7ei1pbmRleDozO1wiLCBsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCAnbWluKDMwJSwgMTEycHgpJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCBcImNhbGMoMTAwJSAtIChcIi5jb25jYXQocGFkZGluZywgXCIgKiAyKSlcIikpLCBcIjs7bGFiZWw6ZXVpQ2FyZF9fYmV0YUJhZGdlQW5jaG9yO1wiKSxcbiAgICBldWlDYXJkX19iZXRhQmFkZ2U6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZXVpQ2FyZF9fYmV0YUJhZGdlO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImlkXCIsIFwiY2hlY2tlZFwiLCBcImxhYmVsXCIsIFwib25DaGFuZ2VcIiwgXCJ0eXBlXCIsIFwiZGlzYWJsZWRcIiwgXCJyZWFkT25seVwiLCBcImluZGV0ZXJtaW5hdGVcIiwgXCJpbnB1dFJlZlwiLCBcImxhYmVsUHJvcHNcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlQ29tYmluZWRSZWZzLCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IGV1aUNoZWNrYm94U3R5bGVzIH0gZnJvbSAnLi9jaGVja2JveC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ2hlY2tib3ggPSBmdW5jdGlvbiBFdWlDaGVja2JveChfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBpZCA9IF9yZWYuaWQsXG4gICAgX3JlZiRjaGVja2VkID0gX3JlZi5jaGVja2VkLFxuICAgIGNoZWNrZWQgPSBfcmVmJGNoZWNrZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRjaGVja2VkLFxuICAgIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICBvbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXG4gICAgdHlwZSA9IF9yZWYudHlwZSxcbiAgICBfcmVmJGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBkaXNhYmxlZCA9IF9yZWYkZGlzYWJsZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRkaXNhYmxlZCxcbiAgICBfcmVmJHJlYWRPbmx5ID0gX3JlZi5yZWFkT25seSxcbiAgICByZWFkT25seSA9IF9yZWYkcmVhZE9ubHkgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRyZWFkT25seSxcbiAgICBfcmVmJGluZGV0ZXJtaW5hdGUgPSBfcmVmLmluZGV0ZXJtaW5hdGUsXG4gICAgaW5kZXRlcm1pbmF0ZSA9IF9yZWYkaW5kZXRlcm1pbmF0ZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGluZGV0ZXJtaW5hdGUsXG4gICAgaW5wdXRSZWYgPSBfcmVmLmlucHV0UmVmLFxuICAgIGxhYmVsUHJvcHMgPSBfcmVmLmxhYmVsUHJvcHMsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNoZWNrYm94JywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUNoZWNrYm94U3R5bGVzKTtcbiAgdmFyIGlucHV0U3R5bGVzID0gW3N0eWxlcy5pbnB1dC5ldWlDaGVja2JveF9fc3F1YXJlLCAhIWxhYmVsICYmIHN0eWxlcy5pbnB1dC5oYXNMYWJlbCwgZGlzYWJsZWQgPyBjaGVja2VkIHx8IGluZGV0ZXJtaW5hdGUgPyBzdHlsZXMuaW5wdXQuZGlzYWJsZWQuc2VsZWN0ZWQgOiBzdHlsZXMuaW5wdXQuZGlzYWJsZWQudW5zZWxlY3RlZCA6IGNoZWNrZWQgfHwgaW5kZXRlcm1pbmF0ZSA/IHN0eWxlcy5pbnB1dC5lbmFibGVkLnNlbGVjdGVkIDogc3R5bGVzLmlucHV0LmVuYWJsZWQudW5zZWxlY3RlZCwgcmVhZE9ubHkgJiYgc3R5bGVzLmlucHV0LnJlYWRPbmx5XTtcbiAgdmFyIGxhYmVsQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNoZWNrYm94X19sYWJlbCcsIGxhYmVsUHJvcHMgPT09IG51bGwgfHwgbGFiZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFiZWxQcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgbGFiZWxTdHlsZXMgPSBbc3R5bGVzLmxhYmVsLmV1aUNoZWNrYm94X19sYWJlbCwgZGlzYWJsZWQgPyBzdHlsZXMubGFiZWwuZGlzYWJsZWQgOiBzdHlsZXMubGFiZWwuZW5hYmxlZCwgcmVhZE9ubHkgJiYgc3R5bGVzLmxhYmVsLnJlYWRPbmx5LCBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuY3NzXTtcbiAgdmFyIGljb25TdHlsZXMgPSBbc3R5bGVzLmlucHV0Lmljb24uZXVpQ2hlY2tib3hfX2ljb24sIGluZGV0ZXJtaW5hdGUgPyBzdHlsZXMuaW5wdXQuaWNvbi5pbmRldGVybWluYXRlIDogc3R5bGVzLmlucHV0Lmljb24uY2hlY2tdO1xuXG4gIC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0L2NoZWNrYm94I2luZGV0ZXJtaW5hdGVfc3RhdGVfY2hlY2tib3hlc1xuICB2YXIgc2V0SW5kZXRlcm1pbmF0ZVN0YXRlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgaWYgKGlucHV0KSBpbnB1dC5pbmRldGVybWluYXRlID0gaW5kZXRlcm1pbmF0ZTtcbiAgfSwgW2luZGV0ZXJtaW5hdGVdKTtcbiAgdmFyIHJlZnMgPSB1c2VDb21iaW5lZFJlZnMoW2lucHV0UmVmLCBzZXRJbmRldGVybWluYXRlU3RhdGVdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNzczogc3R5bGVzLmV1aUNoZWNrYm94LFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjc3M6IGlucHV0U3R5bGVzLFxuICAgIGNsYXNzTmFtZTogXCJldWlDaGVja2JveF9fc3F1YXJlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgY3NzOiBpY29uU3R5bGVzLFxuICAgIHR5cGU6IGluZGV0ZXJtaW5hdGUgPyAnc3RvcEZpbGxlZCcgOiBjaGVja2VkID8gJ2NoZWNrJyA6ICdlbXB0eSdcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJpbnB1dFwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBzdHlsZXMuaW5wdXQuZXVpQ2hlY2tib3hfX2lucHV0LFxuICAgIGNsYXNzTmFtZTogXCJldWlDaGVja2JveF9faW5wdXRcIixcbiAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgaWQ6IGlkLFxuICAgIGNoZWNrZWQ6IGNoZWNrZWQsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICByZWFkT25seTogcmVhZE9ubHksXG4gICAgcmVmOiByZWZzXG4gIH0sIHJlc3QpKSksIGxhYmVsICYmIF9fX0Vtb3Rpb25KU1goXCJsYWJlbFwiLCBfZXh0ZW5kcyh7fSwgbGFiZWxQcm9wcywge1xuICAgIGNzczogbGFiZWxTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBsYWJlbENsYXNzZXMsXG4gICAgaHRtbEZvcjogaWRcbiAgfSksIGxhYmVsKSk7XG59O1xuRXVpQ2hlY2tib3gucHJvcFR5cGVzID0ge1xuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjaGVja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgLy8gb3ZlcnJpZGluZyB0byBtYWtlIGl0IHJlcXVpcmVkXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGluZGV0ZXJtaW5hdGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8bGFiZWwvPlxuICAgICAqL1xuICBsYWJlbFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9ybUN1c3RvbUNvbnRyb2xTdHlsZXMsIGV1aUZvcm1DdXN0b21Db250cm9sVmFyaWFibGVzIH0gZnJvbSAnLi4vZm9ybS5zdHlsZXMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMW04b2I5Yi1yZWFkT25seVwiLFxuICBzdHlsZXM6IFwiY3Vyc29yOmRlZmF1bHQ7bGFiZWw6cmVhZE9ubHk7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMW04b2I5Yi1yZWFkT25seVwiLFxuICBzdHlsZXM6IFwiY3Vyc29yOmRlZmF1bHQ7bGFiZWw6cmVhZE9ubHk7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJ1NTRnbHYtaW5kZXRlcm1pbmF0ZVwiLFxuICBzdHlsZXM6IFwidHJhbnNmb3JtOnNjYWxlKDAuNSk7bGFiZWw6aW5kZXRlcm1pbmF0ZTtcIlxufSA6IHtcbiAgbmFtZTogXCJ1NTRnbHYtaW5kZXRlcm1pbmF0ZVwiLFxuICBzdHlsZXM6IFwidHJhbnNmb3JtOnNjYWxlKDAuNSk7bGFiZWw6aW5kZXRlcm1pbmF0ZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlDaGVja2JveFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNoZWNrYm94U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBjb250cm9sU3R5bGVzID0gZXVpRm9ybUN1c3RvbUNvbnRyb2xTdHlsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIF9ldWlGb3JtQ3VzdG9tQ29udHJvbCA9IGV1aUZvcm1DdXN0b21Db250cm9sVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgdW5zZWxlY3RlZEJvcmRlciA9IF9ldWlGb3JtQ3VzdG9tQ29udHJvbC5jb2xvcnMudW5zZWxlY3RlZEJvcmRlcjtcbiAgcmV0dXJuIHtcbiAgICBldWlDaGVja2JveDogLyojX19QVVJFX18qL2Nzcyhjb250cm9sU3R5bGVzLndyYXBwZXIsIFwiO2xhYmVsOmV1aUNoZWNrYm94O1wiKSxcbiAgICBpbnB1dDoge1xuICAgICAgZXVpQ2hlY2tib3hfX3NxdWFyZTogLyojX19QVVJFX18qL2Nzcyhjb250cm9sU3R5bGVzLmlucHV0LmZhdXhJbnB1dCwgXCIgYm9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCwgXCI7O2xhYmVsOmV1aUNoZWNrYm94X19zcXVhcmU7XCIpLFxuICAgICAgaGFzTGFiZWw6IGNvbnRyb2xTdHlsZXMuaW5wdXQuaGFzTGFiZWwsXG4gICAgICAvLyBTa2lwIGNzc2BgIGNsYXNzTmFtZSBnZW5lcmF0aW9uXG4gICAgICBlbmFibGVkOiB7XG4gICAgICAgIHNlbGVjdGVkOiAvKiNfX1BVUkVfXyovY3NzKGNvbnRyb2xTdHlsZXMuaW5wdXQuZW5hYmxlZC5zZWxlY3RlZCwgXCI7bGFiZWw6c2VsZWN0ZWQ7XCIpLFxuICAgICAgICB1bnNlbGVjdGVkOiAvKiNfX1BVUkVfXyovY3NzKGNvbnRyb2xTdHlsZXMuaW5wdXQuZW5hYmxlZC51bnNlbGVjdGVkLCBcIjtsYWJlbDp1bnNlbGVjdGVkO1wiKVxuICAgICAgfSxcbiAgICAgIGRpc2FibGVkOiB7XG4gICAgICAgIHNlbGVjdGVkOiAvKiNfX1BVUkVfXyovY3NzKGNvbnRyb2xTdHlsZXMuaW5wdXQuZGlzYWJsZWQuc2VsZWN0ZWQsIFwiO2xhYmVsOnNlbGVjdGVkO1wiKSxcbiAgICAgICAgdW5zZWxlY3RlZDogLyojX19QVVJFX18qL2Nzcyhjb250cm9sU3R5bGVzLmlucHV0LmRpc2FibGVkLnVuc2VsZWN0ZWQsIFwiO2xhYmVsOnVuc2VsZWN0ZWQ7XCIpXG4gICAgICB9LFxuICAgICAgLy8gUmVhZG9ubHkgY2hlY2tib3hlcyBhcmUgdXNlZCBieSBFdWlNYXJrZG93bkVkaXRvclxuICAgICAgLy8gTWFpbnRhaW4gdGhlIGluaXRpYWwgY29sb3IgdG8gZW5mb3JjZSB0aGF0IGNsaWNrcyBhcmUgbm90IGRvaW5nIGFueXRoaW5nXG4gICAgICByZWFkT25seTogLyojX19QVVJFX18qL2NzcyhcIiY6aGFzKGlucHV0OmZvY3VzLXZpc2libGUpe291dGxpbmU6XCIsIGV1aVRoZW1lLmZvY3VzLndpZHRoLCBcIiBzb2xpZCBcIiwgdW5zZWxlY3RlZEJvcmRlciwgXCI7fSY6aGFzKGlucHV0OmZvY3VzKXtib3JkZXItY29sb3I6XCIsIHVuc2VsZWN0ZWRCb3JkZXIsIFwiO307bGFiZWw6cmVhZE9ubHk7XCIpLFxuICAgICAgaWNvbjoge1xuICAgICAgICBldWlDaGVja2JveF9faWNvbjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlDaGVja2JveF9faWNvbjtcIiksXG4gICAgICAgIGNoZWNrOiAvKiNfX1BVUkVfXyovY3NzKGNvbnRyb2xTdHlsZXMuaW5wdXQuaWNvbiwgXCIgc3Ryb2tlOmN1cnJlbnRDb2xvcjs7bGFiZWw6Y2hlY2s7XCIpLFxuICAgICAgICBpbmRldGVybWluYXRlOiBfcmVmMlxuICAgICAgfSxcbiAgICAgIGV1aUNoZWNrYm94X19pbnB1dDogLyojX19QVVJFX18qL2Nzcyhjb250cm9sU3R5bGVzLmlucHV0LmhpZGRlbklucHV0LCBcIiAmW3JlYWRvbmx5XXtjdXJzb3I6ZGVmYXVsdDt9O2xhYmVsOmV1aUNoZWNrYm94X19pbnB1dDtcIilcbiAgICB9LFxuICAgIGxhYmVsOiB7XG4gICAgICBldWlDaGVja2JveF9fbGFiZWw6IC8qI19fUFVSRV9fKi9jc3MoY29udHJvbFN0eWxlcy5sYWJlbC5sYWJlbCwgXCI7bGFiZWw6ZXVpQ2hlY2tib3hfX2xhYmVsO1wiKSxcbiAgICAgIGVuYWJsZWQ6IGNvbnRyb2xTdHlsZXMubGFiZWwuZW5hYmxlZCxcbiAgICAgIGRpc2FibGVkOiAvKiNfX1BVUkVfXyovY3NzKGNvbnRyb2xTdHlsZXMubGFiZWwuZGlzYWJsZWQsIFwiO2xhYmVsOmRpc2FibGVkO1wiKSxcbiAgICAgIHJlYWRPbmx5OiBfcmVmXG4gICAgfVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImZvbnRXZWlnaHRcIl07XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSwgZXVpVGV4dEJyZWFrV29yZCB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVRpdGxlIH0gZnJvbSAnLi4vLi4vdGl0bGUvdGl0bGUuc3R5bGVzJztcbmV4cG9ydCB2YXIgZXVpRm9ybUxhYmVsID0gZnVuY3Rpb24gZXVpRm9ybUxhYmVsKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIC8vIEV4Y2x1ZGUgdGhlIGZvbnRXZWlnaHQgZnJvbSB0aGUgdGl0bGUsIHNpbmNlIHdlJ3JlIHNldHRpbmcgb3VyIG93biBsYXRlclxuICB2YXIgX2V1aVRpdGxlID0gZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHh4cycpLFxuICAgIF8gPSBfZXVpVGl0bGUuZm9udFdlaWdodCxcbiAgICBfdGl0bGVTdHlsZXMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX2V1aVRpdGxlLCBfZXhjbHVkZWQpO1xuICAvLyBTaW5jZSB3ZSdyZSBub3QgcmV0dXJuaW5nIGEgY3NzYGAgc3RyaW5nICh0byBhdm9pZCBnZW5lcmF0aW5nIGFuIGV4dHJhIEVtb3Rpb25cbiAgLy8gY2xhc3NOYW1lKSwgd2UgbmVlZCB0byBtYW51YWxseSBzZXJpYWxpemUgdGhlIHN0eWxlIG9iamVjdCBpbnRvIGEgc3RyaW5nXG4gIHZhciB0aXRsZVN0eWxlcyA9IHNlcmlhbGl6ZVN0eWxlcyhbX3RpdGxlU3R5bGVzXSkuc3R5bGVzO1xuICByZXR1cm4gXCJcXG4gICAgXCIuY29uY2F0KHRpdGxlU3R5bGVzLCBcIlxcbiAgICBmb250LXdlaWdodDogXCIpLmNvbmNhdChldWlUaGVtZS5mb250LndlaWdodC5zZW1pQm9sZCwgXCI7XFxuICAgIFwiKS5jb25jYXQoZXVpVGV4dEJyZWFrV29yZCgpLCBcIlxcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUxhYmVsU3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUxhYmVsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpRm9ybUxhYmVsOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvcm1MYWJlbChldWlUaGVtZUNvbnRleHQpLCBcIiBkaXNwbGF5OmlubGluZS1ibG9jaztcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpjb2xvciBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCI7fTtsYWJlbDpldWlGb3JtTGFiZWw7XCIpLFxuICAgIC8vIFNraXAgY3NzYGAgdG8gYXZvaWQgZ2VuZXJhdGluZyBhbiBleHRyYSBFbW90aW9uIGNsYXNzTmFtZVxuICAgIC8vIFVzZSA6d2hlcmUgdG8gcmVkdWNlIHNwZWNpZmljaXR5ICYgbWFrZSB0aGUgQ1NTIGVhc2llciB0byBvdmVycmlkZSBieSBwcmVwZW5kL2FwcGVuZCBub2Rlc1xuICAgIG5vdERpc2FibGVkOiBcIlxcbiAgICAgICY6d2hlcmUoW2Zvcl0pIHtcXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICB9XFxuICAgIFwiLFxuICAgIGludmFsaWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhbmdlciwgXCI7O2xhYmVsOmludmFsaWQ7XCIpLFxuICAgIC8vIEZvY3VzZWQgc3RhdGUgc2hvdWxkIG92ZXJyaWRlIGludmFsaWQgc3RhdGVcbiAgICBmb2N1c2VkOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCBcIjs7bGFiZWw6Zm9jdXNlZDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJndXR0ZXJTaXplXCIsIFwiYWxpZ25JdGVtc1wiLCBcInJlc3BvbnNpdmVcIiwgXCJqdXN0aWZ5Q29udGVudFwiLCBcImRpcmVjdGlvblwiLCBcIndyYXBcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUZsZXhHcm91cFN0eWxlcyB9IGZyb20gJy4vZmxleF9ncm91cC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgR1VUVEVSX1NJWkVTID0gWydub25lJywgJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJ107XG5leHBvcnQgdmFyIEFMSUdOX0lURU1TID0gWydzdHJldGNoJywgJ2ZsZXhTdGFydCcsICdmbGV4RW5kJywgJ2NlbnRlcicsICdiYXNlbGluZSddO1xuZXhwb3J0IHZhciBKVVNUSUZZX0NPTlRFTlRTID0gWydmbGV4U3RhcnQnLCAnZmxleEVuZCcsICdjZW50ZXInLCAnc3BhY2VCZXR3ZWVuJywgJ3NwYWNlQXJvdW5kJywgJ3NwYWNlRXZlbmx5J107XG5leHBvcnQgdmFyIERJUkVDVElPTlMgPSBbJ3JvdycsICdyb3dSZXZlcnNlJywgJ2NvbHVtbicsICdjb2x1bW5SZXZlcnNlJ107XG52YXIgRXVpRmxleEdyb3VwSW50ZXJuYWwgPSBmdW5jdGlvbiBFdWlGbGV4R3JvdXBJbnRlcm5hbChfcmVmLCByZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkY29tcG9uZW50ID0gX3JlZi5jb21wb25lbnQsXG4gICAgY29tcG9uZW50ID0gX3JlZiRjb21wb25lbnQgPT09IHZvaWQgMCA/ICdkaXYnIDogX3JlZiRjb21wb25lbnQsXG4gICAgX3JlZiRndXR0ZXJTaXplID0gX3JlZi5ndXR0ZXJTaXplLFxuICAgIGd1dHRlclNpemUgPSBfcmVmJGd1dHRlclNpemUgPT09IHZvaWQgMCA/ICdsJyA6IF9yZWYkZ3V0dGVyU2l6ZSxcbiAgICBfcmVmJGFsaWduSXRlbXMgPSBfcmVmLmFsaWduSXRlbXMsXG4gICAgYWxpZ25JdGVtcyA9IF9yZWYkYWxpZ25JdGVtcyA9PT0gdm9pZCAwID8gJ3N0cmV0Y2gnIDogX3JlZiRhbGlnbkl0ZW1zLFxuICAgIF9yZWYkcmVzcG9uc2l2ZSA9IF9yZWYucmVzcG9uc2l2ZSxcbiAgICByZXNwb25zaXZlID0gX3JlZiRyZXNwb25zaXZlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRyZXNwb25zaXZlLFxuICAgIF9yZWYkanVzdGlmeUNvbnRlbnQgPSBfcmVmLmp1c3RpZnlDb250ZW50LFxuICAgIGp1c3RpZnlDb250ZW50ID0gX3JlZiRqdXN0aWZ5Q29udGVudCA9PT0gdm9pZCAwID8gJ2ZsZXhTdGFydCcgOiBfcmVmJGp1c3RpZnlDb250ZW50LFxuICAgIF9yZWYkZGlyZWN0aW9uID0gX3JlZi5kaXJlY3Rpb24sXG4gICAgZGlyZWN0aW9uID0gX3JlZiRkaXJlY3Rpb24gPT09IHZvaWQgMCA/ICdyb3cnIDogX3JlZiRkaXJlY3Rpb24sXG4gICAgX3JlZiR3cmFwID0gX3JlZi53cmFwLFxuICAgIHdyYXAgPSBfcmVmJHdyYXAgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiR3cmFwLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUZsZXhHcm91cFN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUZsZXhHcm91cCwgcmVzcG9uc2l2ZSAmJiAhZGlyZWN0aW9uLmluY2x1ZGVzKCdjb2x1bW4nKSAmJiBzdHlsZXMucmVzcG9uc2l2ZSwgd3JhcCAmJiBzdHlsZXMud3JhcCwgc3R5bGVzLmd1dHRlclNpemVzW2d1dHRlclNpemVdLCBzdHlsZXMuanVzdGlmeUNvbnRlbnRbanVzdGlmeUNvbnRlbnRdLCBzdHlsZXMuYWxpZ25JdGVtc1thbGlnbkl0ZW1zXSwgc3R5bGVzLmRpcmVjdGlvbltkaXJlY3Rpb25dXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGbGV4R3JvdXAnLCBjbGFzc05hbWUpO1xuXG4gIC8vIENhc3QgYGNvbXBvbmVudGAgdG8gRnVuY3Rpb25Db21wb25lbnQgdG8gc2ltcGxpZnkgaXRzIHR5cGUuXG4gIC8vIE5vdGUgdGhhdCBGdW5jdGlvbkNvbXBvbmVudCB0eXBlIGlzIHVzZWQgaGVyZSBmb3IgcHVyZWx5IHR5cGluZ1xuICAvLyBjb252ZW5pZW5jZSBzaW5jZSB3ZSBzcGVjaWZ5IHRoZSByZXR1cm4gdHlwZSBhYm92ZSwgYW5kIGZ1bmN0aW9uXG4gIC8vIGNvbXBvbmVudHMgZG9uJ3Qgc3VwcG9ydCBgcmVmYHMsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyIGluIHRoaXMgY2FzZS5cbiAgdmFyIENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIHJlZjogcmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9KSk7XG59O1xuXG4vLyBDYXN0IGZvcndhcmRSZWYgcmV0dXJuIHR5cGUgdG8gd29yayB3aXRoIHRoZSBnZW5lcmljIFRDb21wb25lbnQgdHlwZVxuLy8gYW5kIG5vdCBmYWxsYmFjayB0byBpbXBsaWNpdCBhbnkgdHlwaW5nXG5leHBvcnQgdmFyIEV1aUZsZXhHcm91cCA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKEV1aUZsZXhHcm91cEludGVybmFsKTtcbkV1aUZsZXhHcm91cC5kaXNwbGF5TmFtZSA9ICdFdWlGbGV4R3JvdXAnOyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlNYXhCcmVha3BvaW50LCBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwibjRoZGtnLWNvbHVtblJldmVyc2VcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlO2xhYmVsOmNvbHVtblJldmVyc2U7XCJcbn0gOiB7XG4gIG5hbWU6IFwibjRoZGtnLWNvbHVtblJldmVyc2VcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlO2xhYmVsOmNvbHVtblJldmVyc2U7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJsbDhrbXEtY29sdW1uXCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpjb2x1bW47bGFiZWw6Y29sdW1uO1wiXG59IDoge1xuICBuYW1lOiBcImxsOGttcS1jb2x1bW5cIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsYWJlbDpjb2x1bW47XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxdm5pem8xLXJvd1JldmVyc2VcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2xhYmVsOnJvd1JldmVyc2U7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXZuaXpvMS1yb3dSZXZlcnNlXCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtsYWJlbDpyb3dSZXZlcnNlO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTVtdmptby1yb3dcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOnJvdztsYWJlbDpyb3c7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTVtdmptby1yb3dcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOnJvdztsYWJlbDpyb3c7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJucTVqOXUtYmFzZWxpbmVcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmJhc2VsaW5lO2xhYmVsOmJhc2VsaW5lO1wiXG59IDoge1xuICBuYW1lOiBcIm5xNWo5dS1iYXNlbGluZVwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6YmFzZWxpbmU7bGFiZWw6YmFzZWxpbmU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI4MzkxZGItY2VudGVyXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpjZW50ZXI7bGFiZWw6Y2VudGVyO1wiXG59IDoge1xuICBuYW1lOiBcIjgzOTFkYi1jZW50ZXJcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmNlbnRlcjtsYWJlbDpjZW50ZXI7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxNGo2ZXI0LWZsZXhFbmRcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmZsZXgtZW5kO2xhYmVsOmZsZXhFbmQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTRqNmVyNC1mbGV4RW5kXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpmbGV4LWVuZDtsYWJlbDpmbGV4RW5kO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjggPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMW1tdGp2Yi1mbGV4U3RhcnRcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bGFiZWw6ZmxleFN0YXJ0O1wiXG59IDoge1xuICBuYW1lOiBcIjFtbXRqdmItZmxleFN0YXJ0XCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2xhYmVsOmZsZXhTdGFydDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY5ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjF1d2M0b2otc3RyZXRjaFwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6c3RyZXRjaDtsYWJlbDpzdHJldGNoO1wiXG59IDoge1xuICBuYW1lOiBcIjF1d2M0b2otc3RyZXRjaFwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6c3RyZXRjaDtsYWJlbDpzdHJldGNoO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjEwID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFtMWJ5cS1jZW50ZXJcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpjZW50ZXI7bGFiZWw6Y2VudGVyO1wiXG59IDoge1xuICBuYW1lOiBcIjFtMWJ5cS1jZW50ZXJcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpjZW50ZXI7bGFiZWw6Y2VudGVyO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjExID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE2bGt1NTQtc3BhY2VBcm91bmRcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7bGFiZWw6c3BhY2VBcm91bmQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTZsa3U1NC1zcGFjZUFyb3VuZFwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZDtsYWJlbDpzcGFjZUFyb3VuZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYxMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxaDE2YmdyLXNwYWNlQmV0d2VlblwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGFiZWw6c3BhY2VCZXR3ZWVuO1wiXG59IDoge1xuICBuYW1lOiBcIjFoMTZiZ3Itc3BhY2VCZXR3ZWVuXCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsYWJlbDpzcGFjZUJldHdlZW47XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMTMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwianlrd3NpLXNwYWNlRXZlbmx5XCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtZXZlbmx5O2xhYmVsOnNwYWNlRXZlbmx5O1wiXG59IDoge1xuICBuYW1lOiBcImp5a3dzaS1zcGFjZUV2ZW5seVwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OnNwYWNlLWV2ZW5seTtsYWJlbDpzcGFjZUV2ZW5seTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYxNCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxbmZ1cXd3LWZsZXhFbmRcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpmbGV4LWVuZDtsYWJlbDpmbGV4RW5kO1wiXG59IDoge1xuICBuYW1lOiBcIjFuZnVxd3ctZmxleEVuZFwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2xhYmVsOmZsZXhFbmQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMTUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiZTltaWl2LWZsZXhTdGFydFwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bGFiZWw6ZmxleFN0YXJ0O1wiXG59IDoge1xuICBuYW1lOiBcImU5bWlpdi1mbGV4U3RhcnRcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2xhYmVsOmZsZXhTdGFydDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYxNiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJxZzV5Yzktd3JhcFwiLFxuICBzdHlsZXM6IFwiZmxleC13cmFwOndyYXA7bGFiZWw6d3JhcDtcIlxufSA6IHtcbiAgbmFtZTogXCJxZzV5Yzktd3JhcFwiLFxuICBzdHlsZXM6IFwiZmxleC13cmFwOndyYXA7bGFiZWw6d3JhcDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYxNyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI0cXV4bTQtZXVpRmxleEdyb3VwXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6c3RyZXRjaDtmbGV4LWdyb3c6MTtsYWJlbDpldWlGbGV4R3JvdXA7XCJcbn0gOiB7XG4gIG5hbWU6IFwiNHF1eG00LWV1aUZsZXhHcm91cFwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZmxleC1ncm93OjE7bGFiZWw6ZXVpRmxleEdyb3VwO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUZsZXhHcm91cFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZsZXhHcm91cFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUZsZXhHcm91cDogX3JlZjE3LFxuICAgIHJlc3BvbnNpdmU6IC8qI19fUFVSRV9fKi9jc3MoZXVpTWF4QnJlYWtwb2ludChldWlUaGVtZUNvbnRleHQsICdtJyksIFwie2ZsZXgtd3JhcDp3cmFwOyY+LmV1aUZsZXhJdGVte1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIGZsZXgtYmFzaXM6MTAwJTt9fTtsYWJlbDpyZXNwb25zaXZlO1wiKSxcbiAgICB3cmFwOiBfcmVmMTYsXG4gICAgZ3V0dGVyU2l6ZXM6IHtcbiAgICAgIG5vbmU6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6bm9uZTtcIiksXG4gICAgICB4czogLyojX19QVVJFX18qL2NzcyhcImdhcDpcIiwgZXVpVGhlbWUuc2l6ZS54cywgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7O2xhYmVsOnM7XCIpLFxuICAgICAgbTogLyojX19QVVJFX18qL2NzcyhcImdhcDpcIiwgZXVpVGhlbWUuc2l6ZS5iYXNlLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgICBsOiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLmwsIFwiOztsYWJlbDpsO1wiKSxcbiAgICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLnh4bCwgXCI7O2xhYmVsOnhsO1wiKVxuICAgIH0sXG4gICAganVzdGlmeUNvbnRlbnQ6IHtcbiAgICAgIGZsZXhTdGFydDogX3JlZjE1LFxuICAgICAgZmxleEVuZDogX3JlZjE0LFxuICAgICAgc3BhY2VFdmVubHk6IF9yZWYxMyxcbiAgICAgIHNwYWNlQmV0d2VlbjogX3JlZjEyLFxuICAgICAgc3BhY2VBcm91bmQ6IF9yZWYxMSxcbiAgICAgIGNlbnRlcjogX3JlZjEwXG4gICAgfSxcbiAgICBhbGlnbkl0ZW1zOiB7XG4gICAgICBzdHJldGNoOiBfcmVmOSxcbiAgICAgIGZsZXhTdGFydDogX3JlZjgsXG4gICAgICBmbGV4RW5kOiBfcmVmNyxcbiAgICAgIGNlbnRlcjogX3JlZjYsXG4gICAgICBiYXNlbGluZTogX3JlZjVcbiAgICB9LFxuICAgIGRpcmVjdGlvbjoge1xuICAgICAgcm93OiBfcmVmNCxcbiAgICAgIHJvd1JldmVyc2U6IF9yZWYzLFxuICAgICAgY29sdW1uOiBfcmVmMixcbiAgICAgIGNvbHVtblJldmVyc2U6IF9yZWZcbiAgICB9XG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJncm93XCIsIFwiY29tcG9uZW50XCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBldWlGbGV4SXRlbVN0eWxlcyBhcyBzdHlsZXMgfSBmcm9tICcuL2ZsZXhfaXRlbS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBWQUxJRF9HUk9XX1ZBTFVFUyA9IFtudWxsLCB1bmRlZmluZWQsIHRydWUsIGZhbHNlLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF07XG52YXIgRXVpRmxleEl0ZW1JbnRlcm5hbCA9IGZ1bmN0aW9uIEV1aUZsZXhJdGVtSW50ZXJuYWwoX3JlZiwgcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRncm93ID0gX3JlZi5ncm93LFxuICAgIGdyb3cgPSBfcmVmJGdyb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGdyb3csXG4gICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICBjb21wb25lbnQgPSBfcmVmJGNvbXBvbmVudCA9PT0gdm9pZCAwID8gJ2RpdicgOiBfcmVmJGNvbXBvbmVudCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKFZBTElEX0dST1dfVkFMVUVTLmluZGV4T2YoZ3JvdykgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9wIGBncm93YCBwYXNzZWQgdG8gYEV1aUZsZXhJdGVtYCBtdXN0IGJlIGEgYm9vbGVhbiBvciBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMTAsIHJlY2VpdmVkIGBcIi5jb25jYXQoZ3JvdywgXCJgXCIpKTtcbiAgICB9XG4gIH0sIFtncm93XSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUZsZXhJdGVtLCAhZ3JvdyA/IHN0eWxlcy5ncm93WmVybyA6IHN0eWxlcy5ncm93LCBncm93ICYmICh0eXBlb2YgZ3JvdyA9PT0gJ251bWJlcicgPyBzdHlsZXMuZ3Jvd1NpemVzW2dyb3ddIDogc3R5bGVzLmdyb3dTaXplc1snMSddKV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRmxleEl0ZW0nLCBjbGFzc05hbWUpO1xuXG4gIC8vIENhc3QgYGNvbXBvbmVudGAgdG8gRnVuY3Rpb25Db21wb25lbnQgdG8gc2ltcGxpZnkgaXRzIHR5cGUuXG4gIC8vIE5vdGUgdGhhdCBGdW5jdGlvbkNvbXBvbmVudCB0eXBlIGlzIHVzZWQgaGVyZSBmb3IgcHVyZWx5IHR5cGluZ1xuICAvLyBjb252ZW5pZW5jZSBzaW5jZSB3ZSBzcGVjaWZ5IHRoZSByZXR1cm4gdHlwZSBhYm92ZSwgYW5kIGZ1bmN0aW9uXG4gIC8vIGNvbXBvbmVudHMgZG9uJ3Qgc3VwcG9ydCBgcmVmYHMsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyIGluIHRoaXMgY2FzZS5cbiAgdmFyIENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIHJlZjogcmVmLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9KSwgY2hpbGRyZW4pO1xufTtcblxuLy8gQ2FzdCBmb3J3YXJkUmVmIHJldHVybiB0eXBlIHRvIHdvcmsgd2l0aCB0aGUgZ2VuZXJpYyBUQ29tcG9uZW50IHR5cGVcbi8vIGFuZCBub3QgZmFsbGJhY2sgdG8gaW1wbGljaXQgYW55IHR5cGluZ1xuZXhwb3J0IHZhciBFdWlGbGV4SXRlbSA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKEV1aUZsZXhJdGVtSW50ZXJuYWwpO1xuRXVpRmxleEl0ZW0uZGlzcGxheU5hbWUgPSAnRXVpRmxleEl0ZW0nOyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgdmFyIGV1aUZsZXhJdGVtU3R5bGVzID0ge1xuICAvLyAxLiBBbGxvdyBFdWlQYW5lbHMgdG8gZXhwYW5kIHRvIGZpbGwgdGhlIGl0ZW0uXG4gIGV1aUZsZXhJdGVtOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgbmFtZTogXCIxOWhmNDRuLWV1aUZsZXhJdGVtXCIsXG4gICAgc3R5bGVzOiBcImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bGFiZWw6ZXVpRmxleEl0ZW07XCJcbiAgfSA6IHtcbiAgICBuYW1lOiBcIjE5aGY0NG4tZXVpRmxleEl0ZW1cIixcbiAgICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsYWJlbDpldWlGbGV4SXRlbTtcIixcbiAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgfSxcbiAgZ3Jvd1plcm86IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICBuYW1lOiBcIjFwYXQ3bjAtZ3Jvd1plcm9cIixcbiAgICBzdHlsZXM6IFwiZmxleC1ncm93OjA7ZmxleC1iYXNpczphdXRvO2xhYmVsOmdyb3daZXJvO1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCIxcGF0N24wLWdyb3daZXJvXCIsXG4gICAgc3R5bGVzOiBcImZsZXgtZ3JvdzowO2ZsZXgtYmFzaXM6YXV0bztsYWJlbDpncm93WmVybztcIixcbiAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgfSxcbiAgZ3JvdzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgIG5hbWU6IFwidHI0d2VyLWdyb3dcIixcbiAgICBzdHlsZXM6IFwiZmxleC1iYXNpczowJTtsYWJlbDpncm93O1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCJ0cjR3ZXItZ3Jvd1wiLFxuICAgIHN0eWxlczogXCJmbGV4LWJhc2lzOjAlO2xhYmVsOmdyb3c7XCIsXG4gICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gIH0sXG4gIGdyb3dTaXplczoge1xuICAgICcxJzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgICAgbmFtZTogXCIxdjZ1eW9qLTFcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDoxO1wiXG4gICAgfSA6IHtcbiAgICAgIG5hbWU6IFwiMXY2dXlvai0xXCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6MTtcIixcbiAgICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICAgIH0sXG4gICAgJzInOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgICBuYW1lOiBcIjFsODZ4eGgtMlwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3JvdzoyO2xhYmVsOjI7XCJcbiAgICB9IDoge1xuICAgICAgbmFtZTogXCIxbDg2eHhoLTJcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6MjtsYWJlbDoyO1wiLFxuICAgICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gICAgfSxcbiAgICAnMyc6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICAgIG5hbWU6IFwiMXNsNzlheS0zXCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjM7bGFiZWw6MztcIlxuICAgIH0gOiB7XG4gICAgICBuYW1lOiBcIjFzbDc5YXktM1wiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3JvdzozO2xhYmVsOjM7XCIsXG4gICAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgICB9LFxuICAgICc0JzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgICAgbmFtZTogXCJrNHBuc2ctNFwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo0O2xhYmVsOjQ7XCJcbiAgICB9IDoge1xuICAgICAgbmFtZTogXCJrNHBuc2ctNFwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo0O2xhYmVsOjQ7XCIsXG4gICAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgICB9LFxuICAgICc1JzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgICAgbmFtZTogXCIxY3g1ZnhzLTVcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6NTtsYWJlbDo1O1wiXG4gICAgfSA6IHtcbiAgICAgIG5hbWU6IFwiMWN4NWZ4cy01XCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjU7bGFiZWw6NTtcIixcbiAgICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICAgIH0sXG4gICAgJzYnOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgICBuYW1lOiBcIjFpbjlpaXktNlwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo2O2xhYmVsOjY7XCJcbiAgICB9IDoge1xuICAgICAgbmFtZTogXCIxaW45aWl5LTZcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6NjtsYWJlbDo2O1wiLFxuICAgICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gICAgfSxcbiAgICAnNyc6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICAgIG5hbWU6IFwiZnZoM256LTdcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6NztsYWJlbDo3O1wiXG4gICAgfSA6IHtcbiAgICAgIG5hbWU6IFwiZnZoM256LTdcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6NztsYWJlbDo3O1wiLFxuICAgICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gICAgfSxcbiAgICAnOCc6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICAgIG5hbWU6IFwiZmpkZ3pjLThcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6ODtsYWJlbDo4O1wiXG4gICAgfSA6IHtcbiAgICAgIG5hbWU6IFwiZmpkZ3pjLThcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6ODtsYWJlbDo4O1wiLFxuICAgICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gICAgfSxcbiAgICAnOSc6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICAgIG5hbWU6IFwiMXR5cjhwNi05XCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93Ojk7bGFiZWw6OTtcIlxuICAgIH0gOiB7XG4gICAgICBuYW1lOiBcIjF0eXI4cDYtOVwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo5O2xhYmVsOjk7XCIsXG4gICAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgICB9LFxuICAgICcxMCc6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICAgIG5hbWU6IFwibjdwb2xmLTEwXCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjEwO2xhYmVsOjEwO1wiXG4gICAgfSA6IHtcbiAgICAgIG5hbWU6IFwibjdwb2xmLTEwXCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjEwO2xhYmVsOjEwO1wiLFxuICAgICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gICAgfVxuICB9XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBGb3JtQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHtcbiAgZGVmYXVsdEZ1bGxXaWR0aDogZmFsc2Vcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUZvcm1Db250ZXh0KCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChGb3JtQ29udGV4dCk7XG59IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgQ2hpbGRyZW4sIGNsb25lRWxlbWVudCwgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5mdW5jdGlvbiBpc011dGFibGVSZWYocmVmKSB7XG4gIHJldHVybiByZWYgIT0gbnVsbCAmJiByZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKTtcbn1cblxuLyoqXG4gKiBUaGUgYEV1aVZhbGlkYXRhYmxlQ29udHJvbGAgY29tcG9uZW50IHNob3VsZCBiZSB1c2VkIGluIHNjZW5hcmlvcyB3aGVyZVxuICogd2UgY2FuIHJlbmRlciB0aGUgdmFsaWRhdGVkIGA8aW5wdXQ+YCBhcyBpdHMgZGlyZWN0IGNoaWxkLlxuICovXG5cbmV4cG9ydCB2YXIgRXVpVmFsaWRhdGFibGVDb250cm9sID0gZnVuY3Rpb24gRXVpVmFsaWRhdGFibGVDb250cm9sKF9yZWYpIHtcbiAgdmFyIGlzSW52YWxpZCA9IF9yZWYuaXNJbnZhbGlkLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgLy8gTm90ZSB0aGF0IHRoaXMgbXVzdCBiZSBzdGF0ZSBhbmQgbm90IGEgcmVmIHRvIGNhdXNlIGEgcmVyZW5kZXIvc2V0IGludmFsaWQgc3RhdGUgb24gaW5pdGlhbCBtb3VudFxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgY29udHJvbCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0Q29udHJvbCA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBjaGlsZCA9IENoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRSZWYgPSBjaGlsZC5yZWY7XG4gIHZhciByZXBsYWNlZFJlZiA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgc2V0Q29udHJvbChlbGVtZW50KTtcblxuICAgIC8vIENhbGwgdGhlIG9yaWdpbmFsIHJlZiwgaWYgYW55XG4gICAgaWYgKHR5cGVvZiBjaGlsZFJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2hpbGRSZWYoZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChpc011dGFibGVSZWYoY2hpbGRSZWYpKSB7XG4gICAgICBjaGlsZFJlZi5jdXJyZW50ID0gZWxlbWVudDtcbiAgICB9XG4gIH0sIFtjaGlsZFJlZl0pO1xuICB1c2VTZXRDb250cm9sVmFsaWRpdHkoe1xuICAgIGNvbnRyb2xFbDogY29udHJvbCxcbiAgICBpc0ludmFsaWQ6IGlzSW52YWxpZFxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICByZWY6IHJlcGxhY2VkUmVmLFxuICAgICdhcmlhLWludmFsaWQnOiBpc0ludmFsaWQgfHwgY2hpbGQucHJvcHNbJ2FyaWEtaW52YWxpZCddXG4gIH0pO1xufTtcblxuLyoqXG4gKiBUaGUgYFVzZUV1aVZhbGlkYXRhYmxlQ29udHJvbGAgaG9vayBzaG91bGQgYmUgdXNlZCBpbiBzY2VuYXJpb3Mgd2hlcmVcbiAqIHdlICpjYW5ub3QqIGNvbnRyb2wgd2hlcmUgdGhlIHZhbGlkYXRlZCBgPGlucHV0PmAgaXMgcmVuZGVyZWQgKGUuZy4sIFJlYWN0RGF0ZVBpY2tlcilcbiAqIGFuZCBpbnN0ZWFkIG5lZWQgdG8gYWNjZXNzIHRoZSBpbnB1dCB2aWEgYSByZWYgYW5kIHBhc3MgdGhlIGVsZW1lbnQgaW4gZGlyZWN0bHlcbiAqL1xuRXVpVmFsaWRhdGFibGVDb250cm9sLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHJlZjogUHJvcFR5cGVzLmFueVxuICB9KS5pc1JlcXVpcmVkXG59O1xuZXhwb3J0IHZhciB1c2VFdWlWYWxpZGF0YWJsZUNvbnRyb2wgPSBmdW5jdGlvbiB1c2VFdWlWYWxpZGF0YWJsZUNvbnRyb2woX3JlZjIpIHtcbiAgdmFyIGlzSW52YWxpZCA9IF9yZWYyLmlzSW52YWxpZCxcbiAgICBjb250cm9sRWwgPSBfcmVmMi5jb250cm9sRWw7XG4gIHVzZVNldENvbnRyb2xWYWxpZGl0eSh7XG4gICAgY29udHJvbEVsOiBjb250cm9sRWwsXG4gICAgaXNJbnZhbGlkOiBpc0ludmFsaWRcbiAgfSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFjb250cm9sRWwpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIGlzSW52YWxpZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBjb250cm9sRWwuc2V0QXR0cmlidXRlKCdhcmlhLWludmFsaWQnLCBTdHJpbmcoaXNJbnZhbGlkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2xFbC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcpO1xuICAgIH1cbiAgfSwgW2lzSW52YWxpZCwgY29udHJvbEVsXSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIGBzZXRDdXN0b21WYWxpZGl0eWAgaGVscGVyXG4gKi9cbnZhciB1c2VTZXRDb250cm9sVmFsaWRpdHkgPSBmdW5jdGlvbiB1c2VTZXRDb250cm9sVmFsaWRpdHkoX3JlZjMpIHtcbiAgdmFyIGNvbnRyb2xFbCA9IF9yZWYzLmNvbnRyb2xFbCxcbiAgICBpc0ludmFsaWQgPSBfcmVmMy5pc0ludmFsaWQ7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvbnRyb2xFbCA9PSBudWxsIHx8IHR5cGVvZiBjb250cm9sRWwuc2V0Q3VzdG9tVmFsaWRpdHkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzSW52YWxpZCkge1xuICAgICAgY29udHJvbEVsLnNldEN1c3RvbVZhbGlkaXR5KCdJbnZhbGlkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2xFbC5zZXRDdXN0b21WYWxpZGl0eSgnJyk7XG4gICAgfVxuICB9LCBbaXNJbnZhbGlkLCBjb250cm9sRWxdKTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJpbnB1dElkXCIsIFwiY2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIiwgXCJpY29uXCIsIFwiaWNvbnNQb3NpdGlvblwiLCBcImNsZWFyXCIsIFwiaXNEcm9wZG93blwiLCBcImlzTG9hZGluZ1wiLCBcImlzSW52YWxpZFwiLCBcImlzRGlzYWJsZWRcIiwgXCJyZWFkT25seVwiLCBcImNvbXByZXNzZWRcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCIsIFwiaXNEZWxpbWl0ZWRcIiwgXCJ3cmFwcGVyUHJvcHNcIiwgXCJmdWxsV2lkdGhcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUZvcm1MYWJlbCB9IGZyb20gJy4uL2Zvcm1fbGFiZWwnO1xuaW1wb3J0IHsgdXNlRm9ybUNvbnRleHQgfSBmcm9tICcuLi9ldWlfZm9ybV9jb250ZXh0JztcbmltcG9ydCB7IGdldEljb25BZmZvcmRhbmNlU3R5bGVzLCBpc1JpZ2h0U2lkZUljb24gfSBmcm9tICcuL19udW1faWNvbnMnO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9pY29ucyc7XG5pbXBvcnQgeyBldWlGb3JtQ29udHJvbExheW91dFN0eWxlcywgZXVpRm9ybUNvbnRyb2xMYXlvdXRTaWRlTm9kZVN0eWxlcyB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXQgPSBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dChwcm9wcykge1xuICB2YXIgX3VzZUZvcm1Db250ZXh0ID0gdXNlRm9ybUNvbnRleHQoKSxcbiAgICBkZWZhdWx0RnVsbFdpZHRoID0gX3VzZUZvcm1Db250ZXh0LmRlZmF1bHRGdWxsV2lkdGg7XG4gIHZhciBpbnB1dElkID0gcHJvcHMuaW5wdXRJZCxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpY29uID0gcHJvcHMuaWNvbixcbiAgICBfcHJvcHMkaWNvbnNQb3NpdGlvbiA9IHByb3BzLmljb25zUG9zaXRpb24sXG4gICAgaWNvbnNQb3NpdGlvbiA9IF9wcm9wcyRpY29uc1Bvc2l0aW9uID09PSB2b2lkIDAgPyAnYWJzb2x1dGUnIDogX3Byb3BzJGljb25zUG9zaXRpb24sXG4gICAgY2xlYXIgPSBwcm9wcy5jbGVhcixcbiAgICBpc0Ryb3Bkb3duID0gcHJvcHMuaXNEcm9wZG93bixcbiAgICBpc0xvYWRpbmcgPSBwcm9wcy5pc0xvYWRpbmcsXG4gICAgaXNJbnZhbGlkID0gcHJvcHMuaXNJbnZhbGlkLFxuICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkLFxuICAgIHJlYWRPbmx5ID0gcHJvcHMucmVhZE9ubHksXG4gICAgY29tcHJlc3NlZCA9IHByb3BzLmNvbXByZXNzZWQsXG4gICAgcHJlcGVuZCA9IHByb3BzLnByZXBlbmQsXG4gICAgYXBwZW5kID0gcHJvcHMuYXBwZW5kLFxuICAgIGlzRGVsaW1pdGVkID0gcHJvcHMuaXNEZWxpbWl0ZWQsXG4gICAgd3JhcHBlclByb3BzID0gcHJvcHMud3JhcHBlclByb3BzLFxuICAgIF9wcm9wcyRmdWxsV2lkdGggPSBwcm9wcy5mdWxsV2lkdGgsXG4gICAgZnVsbFdpZHRoID0gX3Byb3BzJGZ1bGxXaWR0aCA9PT0gdm9pZCAwID8gZGVmYXVsdEZ1bGxXaWR0aCA6IF9wcm9wcyRmdWxsV2lkdGgsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzR3JvdXAgPSAhIShwcmVwZW5kIHx8IGFwcGVuZCB8fCBpc0RlbGltaXRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUNvbnRyb2xMYXlvdXQnLCB7XG4gICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0LS1ncm91cCc6IGlzR3JvdXAgJiYgIWlzRGVsaW1pdGVkLFxuICAgICdldWlGb3JtQ29udHJvbExheW91dC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXQtcmVhZE9ubHknOiByZWFkT25seVxuICB9LCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpRm9ybUNvbnRyb2xMYXlvdXRTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlGb3JtQ29udHJvbExheW91dCwgY29tcHJlc3NlZCA/IHN0eWxlcy5jb21wcmVzc2VkIDogc3R5bGVzLnVuY29tcHJlc3NlZCwgZnVsbFdpZHRoID8gc3R5bGVzLmZ1bGxXaWR0aCA6IHN0eWxlcy5mb3JtV2lkdGhdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoaXNHcm91cCA/IFtzdHlsZXMuZ3JvdXAuZ3JvdXAsIGNvbXByZXNzZWQgPyBzdHlsZXMuZ3JvdXAuY29tcHJlc3NlZCA6IHN0eWxlcy5ncm91cC51bmNvbXByZXNzZWRdIDogW10pKTtcbiAgdmFyIGNoaWxkcmVuV3JhcHBlclN0eWxlcyA9IFtzdHlsZXMuY2hpbGRyZW4uZXVpRm9ybUNvbnRyb2xMYXlvdXRfX2NoaWxkcmVuV3JhcHBlciwgaXNHcm91cCAmJiBzdHlsZXMuY2hpbGRyZW4uaW5Hcm91cCwgaXNHcm91cCAmJiAhYXBwZW5kICYmIHN0eWxlcy5jaGlsZHJlbi5wcmVwZW5kT25seSwgaXNHcm91cCAmJiAhcHJlcGVuZCAmJiBzdHlsZXMuY2hpbGRyZW4uYXBwZW5kT25seSwgd3JhcHBlclByb3BzID09PSBudWxsIHx8IHdyYXBwZXJQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd3JhcHBlclByb3BzLmNzc107XG4gIHZhciBoYXNEcm9wZG93bkljb24gPSAhcmVhZE9ubHkgJiYgIWlzRGlzYWJsZWQgJiYgaXNEcm9wZG93bjtcbiAgdmFyIGhhc1JpZ2h0SWNvbiA9IGlzUmlnaHRTaWRlSWNvbihpY29uKTtcbiAgdmFyIGhhc0xlZnRJY29uID0gaWNvbiAmJiAhaGFzUmlnaHRJY29uO1xuICB2YXIgaGFzUmlnaHRJY29ucyA9IGhhc1JpZ2h0SWNvbiB8fCBjbGVhciB8fCBpc0xvYWRpbmcgfHwgaXNJbnZhbGlkIHx8IGhhc0Ryb3Bkb3duSWNvbjtcbiAgdmFyIGljb25BZmZvcmRhbmNlU3R5bGVzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGljb25zUG9zaXRpb24gPT09ICdzdGF0aWMnKSByZXR1cm47IC8vIFN0YXRpYyBpY29ucyBkb24ndCBuZWVkIHBhZGRpbmcgYWZmb3JkYW5jZVxuXG4gICAgcmV0dXJuIGdldEljb25BZmZvcmRhbmNlU3R5bGVzKHtcbiAgICAgIGljb246IGljb24sXG4gICAgICBjbGVhcjogY2xlYXIsXG4gICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZCxcbiAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgaXNEcm9wZG93bjogaGFzRHJvcGRvd25JY29uXG4gICAgfSk7XG4gIH0sIFtpY29uc1Bvc2l0aW9uLCBpY29uLCBjbGVhciwgaXNJbnZhbGlkLCBpc0xvYWRpbmcsIGhhc0Ryb3Bkb3duSWNvbl0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0U2lkZU5vZGVzLCB7XG4gICAgc2lkZTogXCJwcmVwZW5kXCIsXG4gICAgbm9kZXM6IHByZXBlbmQsXG4gICAgaW5wdXRJZDogaW5wdXRJZCxcbiAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHt9LCB3cmFwcGVyUHJvcHMsIHtcbiAgICBjc3M6IGNoaWxkcmVuV3JhcHBlclN0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aUZvcm1Db250cm9sTGF5b3V0X19jaGlsZHJlbldyYXBwZXInLCB3cmFwcGVyUHJvcHMgPT09IG51bGwgfHwgd3JhcHBlclByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3cmFwcGVyUHJvcHMuY2xhc3NOYW1lKSxcbiAgICBzdHlsZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBpY29uQWZmb3JkYW5jZVN0eWxlcyksIHdyYXBwZXJQcm9wcyA9PT0gbnVsbCB8fCB3cmFwcGVyUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdyYXBwZXJQcm9wcy5zdHlsZSlcbiAgfSksIGhhc0xlZnRJY29uICYmIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucywge1xuICAgIHNpZGU6IFwibGVmdFwiLFxuICAgIGljb246IGljb24sXG4gICAgaWNvbnNQb3NpdGlvbjogaWNvbnNQb3NpdGlvbixcbiAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkLFxuICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgfSksIGNoaWxkcmVuLCBoYXNSaWdodEljb25zICYmIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucywge1xuICAgIHNpZGU6IFwicmlnaHRcIixcbiAgICBpY29uOiBoYXNSaWdodEljb24gPyBpY29uIDogdW5kZWZpbmVkLFxuICAgIGljb25zUG9zaXRpb246IGljb25zUG9zaXRpb24sXG4gICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICBjbGVhcjogY2xlYXIsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaXNJbnZhbGlkOiBpc0ludmFsaWQsXG4gICAgaXNEcm9wZG93bjogaGFzRHJvcGRvd25JY29uLFxuICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgfSkpLCBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0U2lkZU5vZGVzLCB7XG4gICAgc2lkZTogXCJhcHBlbmRcIixcbiAgICBub2RlczogYXBwZW5kLFxuICAgIGlucHV0SWQ6IGlucHV0SWQsXG4gICAgY29tcHJlc3NlZDogY29tcHJlc3NlZFxuICB9KSk7XG59O1xuXG4vKipcbiAqIEludGVybmFsIHN1YmNvbXBvbmVudCB1dGlsaXR5IGZvciBwcmVwZW5kL2FwcGVuZCBub2Rlc1xuICovXG5FdWlGb3JtQ29udHJvbExheW91dC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBiZWZvcmUgY2hpbGRyZW4uXG4gICAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICAgKi9cbiAgcHJlcGVuZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBhZnRlciBjaGlsZHJlbi5cbiAgICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAgIHNpZGU6IFByb3BUeXBlcy5hbnksXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gICAgcmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxuICB9KS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGljb25zIGFyZSBhYnNvbHV0ZWx5IG9yIHN0YXRpY2FsbHkgcmVuZGVyZWQuIEZvciBzaW5nbGUgaW5wdXRzLFxuICAgICAgICogYWJzb2x1dGUgcmVuZGVyaW5nIGlzIHR5cGljYWxseSBwcmVmZXJyZWQuXG4gICAgICAgKiBAZGVmYXVsdCBhYnNvbHV0ZVxuICAgICAgICovXG4gIGljb25zUG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJhYnNvbHV0ZVwiLCBcInN0YXRpY1wiXSksXG4gIGNsZWFyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSlcbiAgfSksXG4gIC8qKlxuICAgICAgICogRXhwYW5kIHRvIGZpbGwgMTAwJSBvZiB0aGUgcGFyZW50LlxuICAgICAgICogRGVmYXVsdHMgdG8gYGZ1bGxXaWR0aGAgcHJvcCBvZiBgPEV1aUZvcm0+YC5cbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogQ29udHJvbHMgdGhlIGFkZGluZyBvZiBhbmQgdmlzaWJpbGl0eSBvZiBhIGRvd24gYXJyb3cgaWNvblxuICAgICAgICovXG4gIGlzRHJvcGRvd246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIENvbm5lY3RzIHRoZSBwcmVwZW5kIGFuZCBhcHBlbmQgbGFiZWxzIHRvIHRoZSBpbnB1dFxuICAgICAgICovXG4gIGlucHV0SWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAgICogQWxsb3dzIHBhc3Npbmcgb3B0aW9uYWwgYWRkaXRpb25hbCBwcm9wcyB0byBgLmV1aUZvcm1Db250cm9sTGF5b3V0X19jaGlsZHJlbldyYXBwZXJgXG4gICAgICAgKi9cbiAgd3JhcHBlclByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICAvLyBJbnRlcm5hbCBwcm9wIHVzZWQgYnkgRXVpRm9ybUNvbnRyb2xMYXlvdXREZWxpbWl0ZWRcbiAgaXNEZWxpbWl0ZWQ6IFByb3BUeXBlcy5ib29sXG59O1xudmFyIEV1aUZvcm1Db250cm9sTGF5b3V0U2lkZU5vZGVzID0gZnVuY3Rpb24gRXVpRm9ybUNvbnRyb2xMYXlvdXRTaWRlTm9kZXMoX3JlZikge1xuICB2YXIgc2lkZSA9IF9yZWYuc2lkZSxcbiAgICBub2RlcyA9IF9yZWYubm9kZXMsXG4gICAgaW5wdXRJZCA9IF9yZWYuaW5wdXRJZCxcbiAgICBjb21wcmVzc2VkID0gX3JlZi5jb21wcmVzc2VkO1xuICB2YXIgY2xhc3NOYW1lID0gXCJldWlGb3JtQ29udHJvbExheW91dF9fXCIuY29uY2F0KHNpZGUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpRm9ybUNvbnRyb2xMYXlvdXRTaWRlTm9kZVN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUZvcm1Db250cm9sTGF5b3V0X19zaWRlLCBzdHlsZXNbc2lkZV0sIGNvbXByZXNzZWQgPyBzdHlsZXMuY29tcHJlc3NlZCA6IHN0eWxlcy51bmNvbXByZXNzZWRdO1xuICBpZiAoIW5vZGVzKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0sIFJlYWN0LkNoaWxkcmVuLm1hcChub2RlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gdHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnID8gX19fRW1vdGlvbkpTWChFdWlGb3JtTGFiZWwsIHtcbiAgICAgIGh0bWxGb3I6IGlucHV0SWRcbiAgICB9LCBub2RlKSA6IG5vZGU7XG4gIH0pKTtcbn07XG5FdWlGb3JtQ29udHJvbExheW91dFNpZGVOb2Rlcy5wcm9wVHlwZXMgPSB7XG4gIHNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJhcHBlbmRcIiwgXCJwcmVwZW5kXCJdKS5pc1JlcXVpcmVkLFxuICBub2RlczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuICAvLyBGb3Igc29tZSBiaXphcnJlIHJlYXNvbiBpZiB5b3UgbWFrZSB0aGlzIHRoZSBgY2hpbGRyZW5gIHByb3AgaW5zdGVhZCwgUmVhY3QgZG9lc24ndCBwcm9wZXJseSBvdmVycmlkZSBjbG9uZWQga2V5cyA6fFxuICBpbnB1dElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInR5cGVcIiwgXCJpc0ZvY3VzZWRcIiwgXCJpc0ludmFsaWRcIiwgXCJpc0Rpc2FibGVkXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpRm9ybUxhYmVsU3R5bGVzIH0gZnJvbSAnLi9mb3JtX2xhYmVsLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtTGFiZWwgPSBmdW5jdGlvbiBFdWlGb3JtTGFiZWwoX3JlZikge1xuICB2YXIgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdsYWJlbCcgOiBfcmVmJHR5cGUsXG4gICAgaXNGb2N1c2VkID0gX3JlZi5pc0ZvY3VzZWQsXG4gICAgaXNJbnZhbGlkID0gX3JlZi5pc0ludmFsaWQsXG4gICAgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpRm9ybUxhYmVsU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRm9ybUxhYmVsLCAhaXNEaXNhYmxlZCAmJiBzdHlsZXMubm90RGlzYWJsZWQsIGlzSW52YWxpZCAmJiBzdHlsZXMuaW52YWxpZCwgaXNGb2N1c2VkICYmIHN0eWxlcy5mb2N1c2VkXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtTGFiZWwnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpRm9ybUxhYmVsLWlzRm9jdXNlZCc6IGlzRm9jdXNlZCxcbiAgICAnZXVpRm9ybUxhYmVsLWlzSW52YWxpZCc6IGlzSW52YWxpZCxcbiAgICAnZXVpRm9ybUxhYmVsLWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkXG4gIH0pO1xuICBpZiAodHlwZSA9PT0gJ2xlZ2VuZCcpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxlZ2VuZFwiLCBfZXh0ZW5kcyh7XG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsYWJlbFwiLCBfZXh0ZW5kcyh7XG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH1cbn07XG5FdWlGb3JtTGFiZWwucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBEZWZhdWx0IHR5cGUgaXMgYSBgbGFiZWxgIGJ1dCBjYW4gYmUgY2hhbmdlZCB0byBhIGBsZWdlbmRgXG4gICAgICogaWYgdXNpbmcgaW5zaWRlIGEgYGZpZWxkc2V0YC5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogRGVmYXVsdCB0eXBlIGlzIGEgYGxhYmVsYCBidXQgY2FuIGJlIGNoYW5nZWQgdG8gYSBgbGVnZW5kYFxuICAgICAqIGlmIHVzaW5nIGluc2lkZSBhIGBmaWVsZHNldGAuXG4gICAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiLCBcImxlZ2VuZFwiXSldKSwgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImxlZ2VuZFwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImxhYmVsXCIsIFwibGVnZW5kXCJdKV0pXSksXG4gIGlzRm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIENoYW5nZXMgYGN1cnNvcmAgdG8gYGRlZmF1bHRgLlxuICAgICAqL1xuICAvKipcbiAgICAgKiBDaGFuZ2VzIGBjdXJzb3JgIHRvIGBkZWZhdWx0YC5cbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wicmVmXCIsIFwic2lkZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0X2NsZWFyX2J1dHRvbic7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24gfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXRfY3VzdG9tX2ljb24nO1xuaW1wb3J0IHsgZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29uc1N0eWxlcyB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9pY29ucy5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgSUNPTl9TSURFUyA9IFsnbGVmdCcsICdyaWdodCddO1xuZXhwb3J0IHZhciBpc0ljb25TaGFwZSA9IGZ1bmN0aW9uIGlzSWNvblNoYXBlKGljb24pIHtcbiAgcmV0dXJuICEhaWNvbiAmJiBpY29uLmhhc093blByb3BlcnR5KCd0eXBlJyk7XG59O1xuZXhwb3J0IHZhciBFdWlGb3JtQ29udHJvbExheW91dEljb25zID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMpO1xuICAgIHJldHVybiBfY2FsbFN1cGVyKHRoaXMsIEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgX2luaGVyaXRzKEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wcyRzaWRlID0gX3RoaXMkcHJvcHMuc2lkZSxcbiAgICAgICAgc2lkZSA9IF90aGlzJHByb3BzJHNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF90aGlzJHByb3BzJHNpZGUsXG4gICAgICAgIF90aGlzJHByb3BzJGljb25zUG9zaSA9IF90aGlzJHByb3BzLmljb25zUG9zaXRpb24sXG4gICAgICAgIGljb25zUG9zaXRpb24gPSBfdGhpcyRwcm9wcyRpY29uc1Bvc2kgPT09IHZvaWQgMCA/ICdhYnNvbHV0ZScgOiBfdGhpcyRwcm9wcyRpY29uc1Bvc2ksXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wcy5jb21wcmVzc2VkLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMuaXNEaXNhYmxlZDtcbiAgICAgIHZhciBjdXN0b21JY29uID0gdGhpcy5yZW5kZXJDdXN0b21JY29uKCk7XG4gICAgICB2YXIgbG9hZGluZ1NwaW5uZXIgPSB0aGlzLnJlbmRlckxvYWRpbmdTcGlubmVyKCk7XG4gICAgICB2YXIgY2xlYXJCdXR0b24gPSB0aGlzLnJlbmRlckNsZWFyQnV0dG9uKCk7XG4gICAgICB2YXIgaW52YWxpZEljb24gPSB0aGlzLnJlbmRlckludmFsaWRJY29uKCk7XG4gICAgICB2YXIgZHJvcGRvd25JY29uID0gdGhpcy5yZW5kZXJEcm9wZG93bkljb24oKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciwgbnVsbCwgZnVuY3Rpb24gKHN0eWxlc01lbW9pemVyKSB7XG4gICAgICAgIHZhciBzdHlsZXMgPSBzdHlsZXNNZW1vaXplcihldWlGb3JtQ29udHJvbExheW91dEljb25zU3R5bGVzKTtcbiAgICAgICAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucywgY29tcHJlc3NlZCA/IHN0eWxlcy5jb21wcmVzc2VkIDogc3R5bGVzLnVuY29tcHJlc3NlZF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShpY29uc1Bvc2l0aW9uID09PSAnYWJzb2x1dGUnID8gW3N0eWxlcy5wb3NpdGlvbi5hYnNvbHV0ZS5hYnNvbHV0ZSwgY29tcHJlc3NlZCA/IHN0eWxlcy5wb3NpdGlvbi5hYnNvbHV0ZS5jb21wcmVzc2VkW3NpZGVdIDogc3R5bGVzLnBvc2l0aW9uLmFic29sdXRlLnVuY29tcHJlc3NlZFtzaWRlXV0gOiBbc3R5bGVzLnBvc2l0aW9uLnN0YXRpYy5zdGF0aWMsIGNvbXByZXNzZWQgPyBzdHlsZXMucG9zaXRpb24uc3RhdGljLmNvbXByZXNzZWQgOiBzdHlsZXMucG9zaXRpb24uc3RhdGljLnVuY29tcHJlc3NlZF0pLCBbaXNEaXNhYmxlZCAmJiBzdHlsZXMuZGlzYWJsZWRdKTtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dEljb25zXCJcbiAgICAgICAgfSwgY2xlYXJCdXR0b24sIGxvYWRpbmdTcGlubmVyLCBpbnZhbGlkSWNvbiwgY3VzdG9tSWNvbiwgZHJvcGRvd25JY29uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJDdXN0b21JY29uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckN1c3RvbUljb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgaWNvbiA9IF90aGlzJHByb3BzMi5pY29uLFxuICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMyLmNvbXByZXNzZWQsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczIuaXNEaXNhYmxlZDtcbiAgICAgIGlmICghaWNvbikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gTm9ybWFsaXplIHRoZSBpY29uIHRvIGFuIG9iamVjdCBpZiBpdCdzIGEgc3RyaW5nLlxuICAgICAgdmFyIGljb25Qcm9wcyA9IGlzSWNvblNoYXBlKGljb24pID8gaWNvbiA6IHtcbiAgICAgICAgdHlwZTogaWNvblxuICAgICAgfTtcbiAgICAgIHZhciBpY29uUmVmID0gaWNvblByb3BzLnJlZixcbiAgICAgICAgc2lkZSA9IGljb25Qcm9wcy5zaWRlLFxuICAgICAgICBpY29uUmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhpY29uUHJvcHMsIF9leGNsdWRlZCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24sIF9leHRlbmRzKHtcbiAgICAgICAgc2l6ZTogY29tcHJlc3NlZCA/ICdzJyA6ICdtJyxcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIGljb25SZWY6IGljb25SZWZcbiAgICAgIH0sIGljb25SZXN0KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckRyb3Bkb3duSWNvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJEcm9wZG93bkljb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgaXNEcm9wZG93biA9IF90aGlzJHByb3BzMy5pc0Ryb3Bkb3duLFxuICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMzLmNvbXByZXNzZWQsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczMuaXNEaXNhYmxlZDtcbiAgICAgIGlmICghaXNEcm9wZG93bikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiwge1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nLFxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgdHlwZTogXCJhcnJvd0Rvd25cIlxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckxvYWRpbmdTcGlubmVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckxvYWRpbmdTcGlubmVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzNC5pc0xvYWRpbmcsXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczQuY29tcHJlc3NlZDtcbiAgICAgIGlmICghaXNMb2FkaW5nKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpTG9hZGluZ1NwaW5uZXIsIHtcbiAgICAgICAgc2l6ZTogY29tcHJlc3NlZCA/ICdzJyA6ICdtJ1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckNsZWFyQnV0dG9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckNsZWFyQnV0dG9uKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNsZWFyID0gX3RoaXMkcHJvcHM1LmNsZWFyLFxuICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHM1LmNvbXByZXNzZWQsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczUuaXNEaXNhYmxlZDtcbiAgICAgIGlmICghY2xlYXIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uLCBfZXh0ZW5kcyh7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbScsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkXG4gICAgICB9LCBjbGVhcikpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJbnZhbGlkSWNvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJbnZhbGlkSWNvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wczYuaXNJbnZhbGlkLFxuICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHM2LmNvbXByZXNzZWQ7XG4gICAgICBpZiAoIWlzSW52YWxpZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgc2l6ZTogY29tcHJlc3NlZCA/ICdzJyA6ICdtJyxcbiAgICAgICAgY29sb3I6IFwiZGFuZ2VyXCIsXG4gICAgICAgIHR5cGU6IFwid2FybmluZ1wiXG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbkV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMucHJvcFR5cGVzID0ge1xuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAgIHNpZGU6IFByb3BUeXBlcy5hbnksXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gICAgcmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxuICB9KS5pc1JlcXVpcmVkXSksXG4gIHNpZGU6IFByb3BUeXBlcy5hbnksXG4gIGljb25zUG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJhYnNvbHV0ZVwiLCBcInN0YXRpY1wiXSksXG4gIGNsZWFyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSlcbiAgfSksXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzRHJvcGRvd246IFByb3BUeXBlcy5ib29sLFxuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJvbkNsaWNrXCIsIFwic2l6ZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uU3R5bGVzIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0X2NsZWFyX2J1dHRvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b25TdHlsZXMpO1xuICB2YXIgaWNvblN0eWxlcyA9IFtzdHlsZXMuZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbl9faWNvbiwgc3R5bGVzLnNpemVbc2l6ZV1dO1xuICB2YXIgYXJpYUxhYmVsID0gdXNlRXVpSTE4bignZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbi5sYWJlbCcsICdDbGVhciBpbnB1dCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBjc3M6IHN0eWxlcy5ldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWxcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIGNzczogaWNvblN0eWxlcyxcbiAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbl9faWNvblwiLFxuICAgIHR5cGU6IFwiY3Jvc3NcIixcbiAgICBzaXplOiBzaXplXG4gIH0pKTtcbn07XG5FdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvblN0eWxlcyA9IGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b25TdHlsZXMoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlO1xuICB2YXIgYmFja2dyb3VuZENvbG9yID0gY29sb3JNb2RlID09PSAnREFSSycgPyBldWlUaGVtZS5jb2xvcnMuZGFya1NoYWRlIDogZXVpVGhlbWUuY29sb3JzLm1lZGl1bVNoYWRlO1xuICByZXR1cm4ge1xuICAgIGV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b246IC8qI19fUFVSRV9fKi9jc3MoXCJwb2ludGVyLWV2ZW50czphbGw7YmFja2dyb3VuZC1jb2xvcjpcIiwgYmFja2dyb3VuZENvbG9yLCBcIjtib3JkZXItcmFkaXVzOjUwJTtsaW5lLWhlaWdodDowOyY6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZCwgXCI7fTtsYWJlbDpldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uO1wiKSxcbiAgICBldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uX19pY29uOiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnNjYWxlKDAuNSk7ZmlsbDpcIiwgZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsIFwiO3N0cm9rZTpcIiwgZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsIFwiOztsYWJlbDpldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uX19pY29uO1wiKSxcbiAgICBzaXplOiB7XG4gICAgICBzOiAvKiNfX1BVUkVfXyovY3NzKFwic3Ryb2tlLXdpZHRoOlwiLCBldWlUaGVtZS5zaXplLnhzLCBcIjs7bGFiZWw6cztcIiksXG4gICAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwic3Ryb2tlLXdpZHRoOlwiLCBldWlUaGVtZS5zaXplLnh4cywgXCI7O2xhYmVsOm07XCIpXG4gICAgfVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcIm9uQ2xpY2tcIiwgXCJ0eXBlXCIsIFwiaWNvblJlZlwiLCBcInNpemVcIiwgXCJjb2xvclwiLCBcImRpc2FibGVkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24gPSBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICB0eXBlID0gX3JlZi50eXBlLFxuICAgIGljb25SZWYgPSBfcmVmLmljb25SZWYsXG4gICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24nLCBjbGFzc05hbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24sIG9uQ2xpY2sgPyBzdHlsZXMuY2xpY2thYmxlIDogc3R5bGVzLnVuY2xpY2thYmxlXTtcbiAgaWYgKG9uQ2xpY2spIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgcmVmOiBpY29uUmVmXG4gICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbl9faWNvblwiLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgIHNpemU6IHNpemUsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgY29sb3I6IGNvbG9yXG4gICAgfSkpO1xuICB9XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHJlZjogaWNvblJlZlxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbl9faWNvblwiLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbG9yOiBjb2xvclxuICB9KSk7XG59O1xuRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgaWNvblJlZjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSlcbn07XG52YXIgc3R5bGVzID0ge1xuICBldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb246IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICBuYW1lOiBcIjdkMW1hOC1ldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb25cIixcbiAgICBzdHlsZXM6IFwiZm9udC1zaXplOjA7bGFiZWw6ZXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uO1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCI3ZDFtYTgtZXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uXCIsXG4gICAgc3R5bGVzOiBcImZvbnQtc2l6ZTowO2xhYmVsOmV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbjtcIixcbiAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgfSxcbiAgLy8gU2tpcCBjc3NgYCBoZXJlIHRvIGF2b2lkIGdlbmVyYXRpbmcgYW4gRW1vdGlvbiBjbGFzc05hbWVcbiAgdW5jbGlja2FibGU6IFwiXFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgXCIsXG4gIGNsaWNrYWJsZTogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgIG5hbWU6IFwiMWo4d2d4ai1jbGlja2FibGVcIixcbiAgICBzdHlsZXM6IFwicG9pbnRlci1ldmVudHM6YWxsOyY6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOmN1cnJlbnRDb2xvcjt9O2xhYmVsOmNsaWNrYWJsZTtcIlxuICB9IDoge1xuICAgIG5hbWU6IFwiMWo4d2d4ai1jbGlja2FibGVcIixcbiAgICBzdHlsZXM6IFwicG9pbnRlci1ldmVudHM6YWxsOyY6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOmN1cnJlbnRDb2xvcjt9O2xhYmVsOmNsaWNrYWJsZTtcIixcbiAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgfVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aUZvcm1WYXJpYWJsZXMgfSBmcm9tICcuLi9mb3JtLnN0eWxlcyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIzbGY5YzQtZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29uc1wiLFxuICBzdHlsZXM6IFwicG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2xhYmVsOmV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnM7XCJcbn0gOiB7XG4gIG5hbWU6IFwiM2xmOWM0LWV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnNcIixcbiAgc3R5bGVzOiBcInBvaW50ZXItZXZlbnRzOm5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtsYWJlbDpldWlGb3JtQ29udHJvbExheW91dEljb25zO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnNTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbExheW91dEljb25zU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgX2V1aUZvcm1WYXJpYWJsZXMgPSBldWlGb3JtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgY29udHJvbFBhZGRpbmcgPSBfZXVpRm9ybVZhcmlhYmxlcy5jb250cm9sUGFkZGluZyxcbiAgICBjb250cm9sQ29tcHJlc3NlZFBhZGRpbmcgPSBfZXVpRm9ybVZhcmlhYmxlcy5jb250cm9sQ29tcHJlc3NlZFBhZGRpbmcsXG4gICAgY29udHJvbERpc2FibGVkQ29sb3IgPSBfZXVpRm9ybVZhcmlhYmxlcy5jb250cm9sRGlzYWJsZWRDb2xvcjtcbiAgcmV0dXJuIHtcbiAgICBldWlGb3JtQ29udHJvbExheW91dEljb25zOiBfcmVmLFxuICAgIHVuY29tcHJlc3NlZDogXCJcXG4gICAgICBnYXA6IFwiLmNvbmNhdChtYXRoV2l0aFVuaXRzKGNvbnRyb2xQYWRkaW5nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggLyAyO1xuICAgIH0pLCBcIjtcXG4gICAgXCIpLFxuICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIG1hdGhXaXRoVW5pdHMoY29udHJvbENvbXByZXNzZWRQYWRkaW5nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggLyAyO1xuICAgIH0pLCBcIjs7bGFiZWw6Y29tcHJlc3NlZDtcIiksXG4gICAgZGlzYWJsZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6XCIsIGNvbnRyb2xEaXNhYmxlZENvbG9yLCBcIjs7bGFiZWw6ZGlzYWJsZWQ7XCIpLFxuICAgIHBvc2l0aW9uOiB7XG4gICAgICBhYnNvbHV0ZToge1xuICAgICAgICBhYnNvbHV0ZTogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd2ZXJ0aWNhbCcsIDApLCBcIjs7bGFiZWw6YWJzb2x1dGU7XCIpLFxuICAgICAgICB1bmNvbXByZXNzZWQ6IHtcbiAgICAgICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwiei1pbmRleDoxO1wiLCBsb2dpY2FsQ1NTKCdsZWZ0JywgY29udHJvbFBhZGRpbmcpLCBcIjs7bGFiZWw6bGVmdDtcIiksXG4gICAgICAgICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygncmlnaHQnLCBjb250cm9sUGFkZGluZyksIFwiOztsYWJlbDpyaWdodDtcIilcbiAgICAgICAgfSxcbiAgICAgICAgY29tcHJlc3NlZDoge1xuICAgICAgICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJ6LWluZGV4OjE7XCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCBjb250cm9sQ29tcHJlc3NlZFBhZGRpbmcpLCBcIjs7bGFiZWw6bGVmdDtcIiksXG4gICAgICAgICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygncmlnaHQnLCBjb250cm9sQ29tcHJlc3NlZFBhZGRpbmcpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzdGF0aWM6IHtcbiAgICAgICAgc3RhdGljOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246c3RhdGljO1wiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCAnMTAwJScpLCBcIiBhbGlnbi1zZWxmOnN0cmV0Y2g7ZmxleC1ncm93OjA7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsICcxMDAlJyksIFwiOztsYWJlbDpzdGF0aWM7XCIpLFxuICAgICAgICB1bmNvbXByZXNzZWQ6IGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGNvbnRyb2xQYWRkaW5nKSxcbiAgICAgICAgY29tcHJlc3NlZDogbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgY29udHJvbENvbXByZXNzZWRQYWRkaW5nKVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgaXNJY29uU2hhcGUgfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXRfaWNvbnMnO1xuZXhwb3J0IHZhciBpc1JpZ2h0U2lkZUljb24gPSBmdW5jdGlvbiBpc1JpZ2h0U2lkZUljb24oaWNvbikge1xuICByZXR1cm4gISFpY29uICYmIGlzSWNvblNoYXBlKGljb24pICYmIGljb24uc2lkZSA9PT0gJ3JpZ2h0Jztcbn07XG5leHBvcnQgdmFyIGdldEljb25BZmZvcmRhbmNlU3R5bGVzID0gZnVuY3Rpb24gZ2V0SWNvbkFmZm9yZGFuY2VTdHlsZXMoX3JlZikge1xuICB2YXIgaWNvbiA9IF9yZWYuaWNvbixcbiAgICBjbGVhciA9IF9yZWYuY2xlYXIsXG4gICAgaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgaXNJbnZhbGlkID0gX3JlZi5pc0ludmFsaWQsXG4gICAgaXNEcm9wZG93biA9IF9yZWYuaXNEcm9wZG93bjtcbiAgdmFyIGNzc1ZhcmlhYmxlcyA9IHtcbiAgICAnLS1ldWlGb3JtQ29udHJvbExlZnRJY29uc0NvdW50JzogMCxcbiAgICAnLS1ldWlGb3JtQ29udHJvbFJpZ2h0SWNvbnNDb3VudCc6IDBcbiAgfTtcbiAgaWYgKGljb24pIHtcbiAgICBpZiAoaXNSaWdodFNpZGVJY29uKGljb24pKSB7XG4gICAgICBjc3NWYXJpYWJsZXNbJy0tZXVpRm9ybUNvbnRyb2xSaWdodEljb25zQ291bnQnXSsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBjc3NWYXJpYWJsZXNbJy0tZXVpRm9ybUNvbnRyb2xMZWZ0SWNvbnNDb3VudCddKys7XG4gICAgfVxuICB9XG4gIGlmIChjbGVhcikgY3NzVmFyaWFibGVzWyctLWV1aUZvcm1Db250cm9sUmlnaHRJY29uc0NvdW50J10rKztcbiAgaWYgKGlzTG9hZGluZykgY3NzVmFyaWFibGVzWyctLWV1aUZvcm1Db250cm9sUmlnaHRJY29uc0NvdW50J10rKztcbiAgaWYgKGlzSW52YWxpZCkgY3NzVmFyaWFibGVzWyctLWV1aUZvcm1Db250cm9sUmlnaHRJY29uc0NvdW50J10rKztcbiAgaWYgKGlzRHJvcGRvd24pIGNzc1ZhcmlhYmxlc1snLS1ldWlGb3JtQ29udHJvbFJpZ2h0SWNvbnNDb3VudCddKys7XG4gIHZhciBmaWx0ZXJlZCA9IE9iamVjdC5lbnRyaWVzKGNzc1ZhcmlhYmxlcykuZmlsdGVyKGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciBfcmVmMyA9IF9zbGljZWRUb0FycmF5KF9yZWYyLCAyKSxcbiAgICAgIGNvdW50ID0gX3JlZjNbMV07XG4gICAgcmV0dXJuIGNvdW50ID4gMDtcbiAgfSk7XG4gIHJldHVybiBmaWx0ZXJlZC5sZW5ndGggPyBPYmplY3QuZnJvbUVudHJpZXMoZmlsdGVyZWQpIDogdW5kZWZpbmVkO1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpVGV4dFRydW5jYXRlLCBsb2dpY2FsQ1NTLCBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpRm9ybVZhcmlhYmxlcyB9IGZyb20gJy4uL2Zvcm0uc3R5bGVzJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjF3MTBuMW0taW5Hcm91cFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO2xhYmVsOmluR3JvdXA7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXcxMG4xbS1pbkdyb3VwXCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47bGFiZWw6aW5Hcm91cDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFsYmZhNm0tZXVpRm9ybUNvbnRyb2xMYXlvdXRfX2NoaWxkcmVuV3JhcHBlclwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmU7bGFiZWw6ZXVpRm9ybUNvbnRyb2xMYXlvdXRfX2NoaWxkcmVuV3JhcHBlcjtcIlxufSA6IHtcbiAgbmFtZTogXCIxbGJmYTZtLWV1aUZvcm1Db250cm9sTGF5b3V0X19jaGlsZHJlbldyYXBwZXJcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO2xhYmVsOmV1aUZvcm1Db250cm9sTGF5b3V0X19jaGlsZHJlbldyYXBwZXI7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUNvbnRyb2xMYXlvdXRTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbExheW91dFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgZm9ybSA9IGV1aUZvcm1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIHtcbiAgICBldWlGb3JtQ29udHJvbExheW91dDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlGb3JtQ29udHJvbExheW91dDtcIiksXG4gICAgLy8gU2tpcCB0aGUgY3NzYGAgb24gdGhlIGRlZmF1bHQgaGVpZ2h0IHRvIGF2b2lkIGdlbmVyYXRpbmcgYSBjbGFzc05hbWVcbiAgICB1bmNvbXByZXNzZWQ6IFwiXFxuICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGZvcm0uY29udHJvbEhlaWdodCksIFwiXFxuICAgIFwiKSxcbiAgICBjb21wcmVzc2VkOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGZvcm0uY29udHJvbENvbXByZXNzZWRIZWlnaHQpLCBcIjs7bGFiZWw6Y29tcHJlc3NlZDtcIiksXG4gICAgLy8gU2tpcCB0aGUgY3NzYGAgb24gdGhlIGRlZmF1bHQgd2lkdGggdG8gYXZvaWQgZ2VuZXJhdGluZyBhIGNsYXNzTmFtZVxuICAgIGZvcm1XaWR0aDogXCJcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygnbWF4LXdpZHRoJywgZm9ybS5tYXhXaWR0aCksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiXFxuICAgIFwiKSxcbiAgICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIiksXG4gICAgZ3JvdXA6IHtcbiAgICAgIGdyb3VwOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOnN0cmV0Y2g7Ym9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgc29saWQgXCIsIGZvcm0uYm9yZGVyQ29sb3IsIFwiO2JhY2tncm91bmQtY29sb3I6XCIsIGZvcm0uYmFja2dyb3VuZENvbG9yLCBcIjtvdmVyZmxvdzpoaWRkZW47Pip7XCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiO307bGFiZWw6Z3JvdXA7XCIpLFxuICAgICAgLy8gU2tpcHBpbmcgY3NzYGAgdG8gYXZvaWQgcmVwZWF0ZWQgY29tcHJlc3NlZC91bmNvbXByZXNzZWQgY2xhc3NOYW1lc1xuICAgICAgdW5jb21wcmVzc2VkOiBcIlxcbiAgICAgICAgYm9yZGVyLXJhZGl1czogXCIuY29uY2F0KGZvcm0uY29udHJvbEJvcmRlclJhZGl1cywgXCI7XFxuICAgICAgXCIpLFxuICAgICAgY29tcHJlc3NlZDogXCJcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IFwiLmNvbmNhdChmb3JtLmNvbnRyb2xDb21wcmVzc2VkQm9yZGVyUmFkaXVzLCBcIjtcXG4gICAgICBcIilcbiAgICB9LFxuICAgIGNoaWxkcmVuOiB7XG4gICAgICBldWlGb3JtQ29udHJvbExheW91dF9fY2hpbGRyZW5XcmFwcGVyOiBfcmVmMixcbiAgICAgIGluR3JvdXA6IF9yZWYsXG4gICAgICBwcmVwZW5kT25seTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdib3JkZXItdG9wLXJpZ2h0LXJhZGl1cycsICdpbmhlcml0JyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cycsICdpbmhlcml0JyksIFwiOztsYWJlbDpwcmVwZW5kT25seTtcIiksXG4gICAgICBhcHBlbmRPbmx5OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnLCAnaW5oZXJpdCcpLCBcIiBcIiwgbG9naWNhbENTUygnYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cycsICdpbmhlcml0JyksIFwiOztsYWJlbDphcHBlbmRPbmx5O1wiKVxuICAgIH1cbiAgfTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sTGF5b3V0U2lkZU5vZGVTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbExheW91dFNpZGVOb2RlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBmb3JtID0gZXVpRm9ybVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgdW5jb21wcmVzc2VkSGVpZ2h0ID0gbWF0aFdpdGhVbml0cyhbZm9ybS5jb250cm9sSGVpZ2h0LCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbl0sIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgcmV0dXJuIHggLSB5ICogMjtcbiAgfSk7XG4gIHZhciBjb21wcmVzc2VkSGVpZ2h0ID0gbWF0aFdpdGhVbml0cyhbZm9ybS5jb250cm9sQ29tcHJlc3NlZEhlaWdodCwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW5dLCBmdW5jdGlvbiAoeCwgeSkge1xuICAgIHJldHVybiB4IC0geSAqIDI7XG4gIH0pO1xuICB2YXIgYnV0dG9ucyA9ICcqOmlzKC5ldWlCdXR0b24sIC5ldWlCdXR0b25FbXB0eSwgLmV1aUJ1dHRvbkljb24pJztcbiAgdmFyIHRleHQgPSAnKjppcyguZXVpRm9ybUxhYmVsLCAuZXVpVGV4dCknO1xuICByZXR1cm4ge1xuICAgIGV1aUZvcm1Db250cm9sTGF5b3V0X19zaWRlOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiIFwiLCBldWlUZXh0VHJ1bmNhdGUoJzUwJScpLCBcIiBmbGV4LXNocmluazowO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOlwiLCBldWlUaGVtZS5zaXplLnhzLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBmb3JtLmFwcGVuZFByZXBlbmRCYWNrZ3JvdW5kLCBcIjtcIiwgYnV0dG9ucywgXCJ7dHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50OyY6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDotXCIsIGV1aVRoZW1lLmZvY3VzLndpZHRoLCBcIjt9fVwiLCB0ZXh0LCBcIntjdXJzb3I6ZGVmYXVsdDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt9Jjpub3QoOmhhcyg+IFwiLCBidXR0b25zLCBcIjpmaXJzdC1jaGlsZCwgPiAqOmZpcnN0LWNoaWxkID4gXCIsIGJ1dHRvbnMsIFwiKSl7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctbGVmdCcsIGV1aVRoZW1lLnNpemUucyksIFwiO30mOm5vdCg6aGFzKD4gXCIsIGJ1dHRvbnMsIFwiOmxhc3QtY2hpbGQsID4gKjpsYXN0LWNoaWxkID4gXCIsIGJ1dHRvbnMsIFwiKSl7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctcmlnaHQnLCBldWlUaGVtZS5zaXplLnMpLCBcIjt9O2xhYmVsOmV1aUZvcm1Db250cm9sTGF5b3V0X19zaWRlO1wiKSxcbiAgICBhcHBlbmQ6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6YXBwZW5kO1wiKSxcbiAgICBwcmVwZW5kOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOnByZXBlbmQ7XCIpLFxuICAgIHVuY29tcHJlc3NlZDogXCJcXG4gICAgICBcIi5jb25jYXQodGV4dCwgXCIge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnhzKSwgXCJcXG4gICAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KHVuY29tcHJlc3NlZEhlaWdodCwgXCI7XFxuICAgICAgfVxcblxcbiAgICAgIFwiKS5jb25jYXQoYnV0dG9ucywgXCIge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCB1bmNvbXByZXNzZWRIZWlnaHQpLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAuZXVpQnV0dG9uSWNvbiB7XFxuICAgICAgICBmbGV4LXNocmluazogMDtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCBldWlUaGVtZS5zaXplLnhsKSwgXCJcXG4gICAgICB9XFxuICAgIFwiKSxcbiAgICBjb21wcmVzc2VkOiAvKiNfX1BVUkVfXyovY3NzKHRleHQsIFwie1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnh4cyksIFwiIGxpbmUtaGVpZ2h0OlwiLCBjb21wcmVzc2VkSGVpZ2h0LCBcIjt9XCIsIGJ1dHRvbnMsIFwie1wiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBjb21wcmVzc2VkSGVpZ2h0KSwgXCI7fS5ldWlCdXR0b25JY29ue2ZsZXgtc2hyaW5rOjA7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgZXVpVGhlbWUuc2l6ZS54bCksIFwiO307bGFiZWw6Y29tcHJlc3NlZDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJzdHlsZXNNZW1vaXplclwiLCBcImNsYXNzTmFtZVwiLCBcImlkXCIsIFwibmFtZVwiLCBcInBsYWNlaG9sZGVyXCIsIFwiaXNJbnZhbGlkXCIsIFwiZGlzYWJsZWRcIiwgXCJmdWxsV2lkdGhcIiwgXCJpc0xvYWRpbmdcIiwgXCJpbnB1dFJlZlwiLCBcImluY3JlbWVudGFsXCIsIFwiY29tcHJlc3NlZFwiLCBcIm9uU2VhcmNoXCIsIFwiaXNDbGVhcmFibGVcIiwgXCJhcHBlbmRcIiwgXCJwcmVwZW5kXCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5cywgd2l0aEV1aVN0eWxlc01lbW9pemVyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQnJvd3NlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Jyb3dzZXInO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXQgfSBmcm9tICcuLi9mb3JtX2NvbnRyb2xfbGF5b3V0JztcbmltcG9ydCB7IEV1aVZhbGlkYXRhYmxlQ29udHJvbCB9IGZyb20gJy4uL3ZhbGlkYXRhYmxlX2NvbnRyb2wnO1xuaW1wb3J0IHsgRm9ybUNvbnRleHQgfSBmcm9tICcuLi9ldWlfZm9ybV9jb250ZXh0JztcbmltcG9ydCB7IGV1aUZpZWxkU2VhcmNoU3R5bGVzIH0gZnJvbSAnLi9maWVsZF9zZWFyY2guc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaXNTZWFyY2hTdXBwb3J0ZWQgPSBmYWxzZTtcbmV4cG9ydCB2YXIgRXVpRmllbGRTZWFyY2hDbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlGaWVsZFNlYXJjaENsYXNzKCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRmllbGRTZWFyY2hDbGFzcyk7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpRmllbGRTZWFyY2hDbGFzcywgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic3RhdGVcIiwge1xuICAgICAgdmFsdWU6IF90aGlzLnByb3BzLnZhbHVlIHx8IFN0cmluZyhfdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgfHwgJycpXG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImlucHV0RWxlbWVudFwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2xlYW51cHNcIiwgW10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkNsZWFyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGNsZWFyIHRoZSBmaWVsZCdzIHZhbHVlXG5cbiAgICAgIC8vIDEuIFJlYWN0IGRvZXNuJ3QgbGlzdGVuIGZvciBgY2hhbmdlYCBldmVudHMsIGluc3RlYWQgaXQgbWFwcyBgaW5wdXRgIGV2ZW50cyB0byBgY2hhbmdlYFxuICAgICAgLy8gMi4gUmVhY3Qgb25seSBmaXJlcyB0aGUgbWFwcGVkIGBjaGFuZ2VgIGV2ZW50IGlmIHRoZSBlbGVtZW50J3MgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAgIC8vIDMuIEFuIGlucHV0J3MgdmFsdWUgaXMsIGluIGFkZGl0aW9uIHRvIG90aGVyIG1ldGhvZHMsIHRyYWNrZWQgYnkgaW50ZXJjZXB0aW5nIGVsZW1lbnQudmFsdWUgPSAnLi4uJ1xuICAgICAgLy9cbiAgICAgIC8vIFNvIHdlIGhhdmUgdG8gZ28gYmVsb3cgdGhlIGVsZW1lbnQncyB2YWx1ZSBzZXR0ZXIgdG8gYXZvaWQgUmVhY3QgaW50ZXJjZXB0aW5nIGl0LFxuICAgICAgLy8gb25seSB0aGVuIHdpbGwgUmVhY3QgdHJlYXQgdGhlIHZhbHVlIGFzIGRpZmZlcmVudCBhbmQgZmlyZSBpdHMgYGNoYW5nZWAgZXZlbnRcbiAgICAgIC8vXG4gICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMzg5MjU0Ny93aGF0LWlzLXRoZS1iZXN0LXdheS10by10cmlnZ2VyLW9uY2hhbmdlLWV2ZW50LWluLXJlYWN0LWpzXG4gICAgICB2YXIgbmF0aXZlSW5wdXRWYWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsICd2YWx1ZScpO1xuICAgICAgdmFyIG5hdGl2ZUlucHV0VmFsdWVTZXR0ZXIgPSBuYXRpdmVJbnB1dFZhbHVlID8gbmF0aXZlSW5wdXRWYWx1ZS5zZXQgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAobmF0aXZlSW5wdXRWYWx1ZVNldHRlcikge1xuICAgICAgICBuYXRpdmVJbnB1dFZhbHVlU2V0dGVyLmNhbGwoX3RoaXMuaW5wdXRFbGVtZW50LCAnJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGRpc3BhdGNoIGlucHV0IGV2ZW50XG4gICAgICB2YXIgZXZlbnQgPSBuZXcgRXZlbnQoJ2lucHV0Jywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBpZiAoX3RoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICAgIF90aGlzLmlucHV0RWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgLy8gc2V0IGZvY3VzIG9uIHRoZSBzZWFyY2ggZmllbGRcbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIF90aGlzLmlucHV0RWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJykpO1xuICAgICAgfVxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0pO1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGluY3JlbWVudGFsID0gX3RoaXMkcHJvcHMuaW5jcmVtZW50YWwsXG4gICAgICAgIG9uU2VhcmNoID0gX3RoaXMkcHJvcHMub25TZWFyY2g7XG4gICAgICBpZiAob25TZWFyY2ggJiYgaW5jcmVtZW50YWwpIHtcbiAgICAgICAgb25TZWFyY2goJycpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZXRSZWZcIiwgZnVuY3Rpb24gKGlucHV0RWxlbWVudCkge1xuICAgICAgX3RoaXMuaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtZW50O1xuICAgICAgaWYgKF90aGlzLnByb3BzLmlucHV0UmVmKSB7XG4gICAgICAgIF90aGlzLnByb3BzLmlucHV0UmVmKGlucHV0RWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uS2V5VXBcIiwgZnVuY3Rpb24gKGV2ZW50LCBpbmNyZW1lbnRhbCwgb25TZWFyY2gpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgfSk7XG4gICAgICBpZiAoX3RoaXMucHJvcHMub25LZXlVcCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbktleVVwKGV2ZW50KTtcbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvblNlYXJjaCAmJiAoZXZlbnQua2V5ICE9PSBrZXlzLkVOVEVSICYmIGluY3JlbWVudGFsIHx8IGV2ZW50LmtleSA9PT0ga2V5cy5FTlRFUiAmJiAhaXNTZWFyY2hTdXBwb3J0ZWQpKSB7XG4gICAgICAgIG9uU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlGaWVsZFNlYXJjaENsYXNzLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlGaWVsZFNlYXJjaENsYXNzLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgaWYgKCF0aGlzLmlucHV0RWxlbWVudCkgcmV0dXJuO1xuICAgICAgaXNTZWFyY2hTdXBwb3J0ZWQgPSBCcm93c2VyLmlzRXZlbnRTdXBwb3J0ZWQoJ3NlYXJjaCcsIHRoaXMuaW5wdXRFbGVtZW50KTtcbiAgICAgIGlmIChpc1NlYXJjaFN1cHBvcnRlZCkge1xuICAgICAgICB2YXIgb25TZWFyY2ggPSBmdW5jdGlvbiBvblNlYXJjaChldmVudCkge1xuICAgICAgICAgIGlmIChfdGhpczIucHJvcHMub25TZWFyY2gpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgICAgICAgICBfdGhpczIucHJvcHMub25TZWFyY2goZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlYXJjaCcsIG9uU2VhcmNoKTtcbiAgICAgICAgdGhpcy5jbGVhbnVwcy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIV90aGlzMi5pbnB1dEVsZW1lbnQpIHJldHVybjtcbiAgICAgICAgICBfdGhpczIuaW5wdXRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NlYXJjaCcsIG9uU2VhcmNoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiBvbkNoYW5nZShldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC52YWx1ZSAhPT0gX3RoaXMyLnN0YXRlLnZhbHVlKSB7XG4gICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHZhbHVlOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoX3RoaXMyLnByb3BzLm9uU2VhcmNoKSB7XG4gICAgICAgICAgICBfdGhpczIucHJvcHMub25TZWFyY2goZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNoYW5nZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhbnVwcy5mb3JFYWNoKGZ1bmN0aW9uIChjbGVhbnVwKSB7XG4gICAgICAgIHJldHVybiBjbGVhbnVwKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgdmFyIF9yZWYgPSB0aGlzLmNvbnRleHQsXG4gICAgICAgIGRlZmF1bHRGdWxsV2lkdGggPSBfcmVmLmRlZmF1bHRGdWxsV2lkdGg7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgc3R5bGVzTWVtb2l6ZXIgPSBfdGhpcyRwcm9wczIuc3R5bGVzTWVtb2l6ZXIsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgIGlkID0gX3RoaXMkcHJvcHMyLmlkLFxuICAgICAgICBuYW1lID0gX3RoaXMkcHJvcHMyLm5hbWUsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHMyLnBsYWNlaG9sZGVyLFxuICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wczIuaXNJbnZhbGlkLFxuICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzMi5kaXNhYmxlZCxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGZ1bGxXaWR0ID0gX3RoaXMkcHJvcHMyLmZ1bGxXaWR0aCxcbiAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHMyJGZ1bGxXaWR0ID09PSB2b2lkIDAgPyBkZWZhdWx0RnVsbFdpZHRoIDogX3RoaXMkcHJvcHMyJGZ1bGxXaWR0LFxuICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczIuaXNMb2FkaW5nLFxuICAgICAgICBpbnB1dFJlZiA9IF90aGlzJHByb3BzMi5pbnB1dFJlZixcbiAgICAgICAgaW5jcmVtZW50YWwgPSBfdGhpcyRwcm9wczIuaW5jcmVtZW50YWwsXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczIuY29tcHJlc3NlZCxcbiAgICAgICAgb25TZWFyY2ggPSBfdGhpcyRwcm9wczIub25TZWFyY2gsXG4gICAgICAgIF9pc0NsZWFyYWJsZSA9IF90aGlzJHByb3BzMi5pc0NsZWFyYWJsZSxcbiAgICAgICAgYXBwZW5kID0gX3RoaXMkcHJvcHMyLmFwcGVuZCxcbiAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzMi5wcmVwZW5kLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMucHJvcHMudmFsdWU7XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMudmFsdWUgIT09ICdzdHJpbmcnKSB2YWx1ZSA9IHRoaXMuc3RhdGUudmFsdWU7XG5cbiAgICAgIC8vIFNldCBhY3R1YWwgdmFsdWUgb2YgaXNDbGVhcmFibGUgaWYgdmFsdWUgZXhpc3RzIGFzIHdlbGxcbiAgICAgIHZhciBpc0NsZWFyYWJsZSA9IEJvb2xlYW4oX2lzQ2xlYXJhYmxlICYmIHZhbHVlICYmICFyZXN0LnJlYWRPbmx5ICYmICFkaXNhYmxlZCk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZpZWxkU2VhcmNoJywge1xuICAgICAgICAnZXVpRmllbGRTZWFyY2gtaXNMb2FkaW5nJzogaXNMb2FkaW5nLFxuICAgICAgICAnZXVpRmllbGRTZWFyY2gtaXNDbGVhcmFibGUnOiBpc0NsZWFyYWJsZSxcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLWlzSW52YWxpZCc6IGlzSW52YWxpZFxuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBzdHlsZXMgPSBzdHlsZXNNZW1vaXplcihldWlGaWVsZFNlYXJjaFN0eWxlcyk7XG4gICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlGaWVsZFNlYXJjaCwgY29tcHJlc3NlZCA/IHN0eWxlcy5jb21wcmVzc2VkIDogc3R5bGVzLnVuY29tcHJlc3NlZCwgZnVsbFdpZHRoID8gc3R5bGVzLmZ1bGxXaWR0aCA6IHN0eWxlcy5mb3JtV2lkdGgsIChwcmVwZW5kIHx8IGFwcGVuZCkgJiYgc3R5bGVzLmluR3JvdXBdO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlGaWVsZFNlYXJjaC5jbGVhclNlYXJjaEJ1dHRvbkxhYmVsXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiQ2xlYXIgc2VhcmNoIGlucHV0XCJcbiAgICAgIH0sIGZ1bmN0aW9uIChjbGVhclNlYXJjaEJ1dHRvbkxhYmVsKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0LCB7XG4gICAgICAgICAgaWNvbjogXCJzZWFyY2hcIixcbiAgICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZCxcbiAgICAgICAgICBpc0Rpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICBjbGVhcjogaXNDbGVhcmFibGUgPyB7XG4gICAgICAgICAgICBvbkNsaWNrOiBfdGhpczMub25DbGVhcixcbiAgICAgICAgICAgICdhcmlhLWxhYmVsJzogY2xlYXJTZWFyY2hCdXR0b25MYWJlbCxcbiAgICAgICAgICAgICdkYXRhLXRlc3Qtc3Viaic6ICdjbGVhclNlYXJjaEJ1dHRvbidcbiAgICAgICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICAgICAgYXBwZW5kOiBhcHBlbmQsXG4gICAgICAgICAgcHJlcGVuZDogcHJlcGVuZFxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aVZhbGlkYXRhYmxlQ29udHJvbCwge1xuICAgICAgICAgIGlzSW52YWxpZDogaXNJbnZhbGlkXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJpbnB1dFwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgdHlwZTogXCJzZWFyY2hcIixcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICAgIG9uS2V5VXA6IGZ1bmN0aW9uIG9uS2V5VXAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5vbktleVVwKGUsIGluY3JlbWVudGFsLCBvblNlYXJjaCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgcmVmOiBfdGhpczMuc2V0UmVmXG4gICAgICAgIH0sIHJlc3QpKSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpRmllbGRTZWFyY2hDbGFzcywgXCJjb250ZXh0VHlwZVwiLCBGb3JtQ29udGV4dCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpRmllbGRTZWFyY2hDbGFzcywgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBpbmNyZW1lbnRhbDogZmFsc2UsXG4gIGNvbXByZXNzZWQ6IGZhbHNlLFxuICBpc0NsZWFyYWJsZTogdHJ1ZVxufSk7XG5FdWlGaWVsZFNlYXJjaENsYXNzLnByb3BUeXBlcyA9IHtcbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogRXhwYW5kIHRvIGZpbGwgMTAwJSBvZiB0aGUgcGFyZW50LlxuICAgICAqIERlZmF1bHRzIHRvIGBmdWxsV2lkdGhgIHByb3Agb2YgYDxFdWlGb3JtPmAuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBbRW50ZXJdIE9SIG9uIGNoYW5nZSBpZiB0aGUgaW5jcmVtZW50YWwgcHJvcCBpcyBgdHJ1ZWAuXG4gICAgICogSWYgeW91IGRvbid0IG5lZWQgdGhlIG9uW0VudGVyXSBmdW5jdGlvbmFsaXR5LCBwcmVmZXIgdXNpbmcgb25DaGFuZ2VcbiAgICAgKi9cbiAgb25TZWFyY2g6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCB0aGUgc2VhcmNoIHdpbGwgYmUgZXhlY3V0ZWQgKHRoYXQgaXMsIHRoZSBgb25TZWFyY2hgIHdpbGwgYmUgY2FsbGVkKSBhcyB0aGVcbiAgICAgKiB1c2VyIHR5cGVzLlxuICAgICAqL1xuICBpbmNyZW1lbnRhbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIHdoZW4gYHRydWVgIGNyZWF0ZXMgYSBzaG9ydGVyIGhlaWdodCBpbnB1dFxuICAgICAqL1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBTaG93cyBhIGJ1dHRvbiB0aGF0IHF1aWNrbHkgY2xlYXJzIGFueSBpbnB1dFxuICAgICAqL1xuICBpc0NsZWFyYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBiZWZvcmUgaW5wdXRcbiAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICovXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGFmdGVyIGlucHV0LlxuICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59O1xuZXhwb3J0IHZhciBFdWlGaWVsZFNlYXJjaCA9IHdpdGhFdWlTdHlsZXNNZW1vaXplcihFdWlGaWVsZFNlYXJjaENsYXNzKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gV2UgZG9uJ3Qgbm9ybWFsbHkgdXNlICdJJyBwcmVmaXhlcywgdGhpcyBmaWxlIGlzIGFuIGV4Y2VwdGlvblxuXG52YXIgQnJvd3NlckltcGwgPSB7XG4gIGlzRXZlbnRTdXBwb3J0ZWQ6IGZ1bmN0aW9uIGlzRXZlbnRTdXBwb3J0ZWQobmFtZSwgZWxlbWVudCkge1xuICAgIHJldHVybiBcIm9uXCIuY29uY2F0KG5hbWUpIGluIGVsZW1lbnQ7XG4gIH1cbn07XG5leHBvcnQgdmFyIEJyb3dzZXIgPSBPYmplY3QuZnJlZXplKEJyb3dzZXJJbXBsKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9ybUNvbnRyb2xTdHlsZXMgfSBmcm9tICcuLi9mb3JtLnN0eWxlcyc7XG5leHBvcnQgdmFyIGV1aUZpZWxkU2VhcmNoU3R5bGVzID0gZnVuY3Rpb24gZXVpRmllbGRTZWFyY2hTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBmb3JtU3R5bGVzID0gZXVpRm9ybUNvbnRyb2xTdHlsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIHtcbiAgICBldWlGaWVsZFNlYXJjaDogLyojX19QVVJFX18qL2NzcyhcIi13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7Jjo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiwmOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO31cIiwgZm9ybVN0eWxlcy5zaGFyZWQsIFwiICY6aW52YWxpZHtcIiwgZm9ybVN0eWxlcy5pbnZhbGlkLCBcIjt9Jjpmb2N1c3tcIiwgZm9ybVN0eWxlcy5mb2N1cywgXCI7fSY6ZGlzYWJsZWR7XCIsIGZvcm1TdHlsZXMuZGlzYWJsZWQsIFwiO30mW3JlYWRPbmx5XXtcIiwgZm9ybVN0eWxlcy5yZWFkT25seSwgXCI7fSY6YXV0b2ZpbGx7XCIsIGZvcm1TdHlsZXMuYXV0b0ZpbGwsIFwiO307bGFiZWw6ZXVpRmllbGRTZWFyY2g7XCIpLFxuICAgIC8vIFNraXAgdGhlIGNzcygpIG9uIHRoZSBkZWZhdWx0IGhlaWdodCB0byBhdm9pZCBnZW5lcmF0aW5nIGEgY2xhc3NOYW1lXG4gICAgdW5jb21wcmVzc2VkOiBmb3JtU3R5bGVzLnVuY29tcHJlc3NlZCxcbiAgICBjb21wcmVzc2VkOiAvKiNfX1BVUkVfXyovY3NzKGZvcm1TdHlsZXMuY29tcHJlc3NlZCwgXCI7bGFiZWw6Y29tcHJlc3NlZDtcIiksXG4gICAgLy8gU2tpcCB0aGUgY3NzKCkgb24gdGhlIGRlZmF1bHQgd2lkdGggdG8gYXZvaWQgZ2VuZXJhdGluZyBhIGNsYXNzTmFtZVxuICAgIGZvcm1XaWR0aDogZm9ybVN0eWxlcy5mb3JtV2lkdGgsXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGZvcm1TdHlsZXMuZnVsbFdpZHRoLCBcIjtsYWJlbDpmdWxsV2lkdGg7XCIpLFxuICAgIC8vIExheW91dCBtb2RpZmllcnNcbiAgICBpbkdyb3VwOiAvKiNfX1BVUkVfXyovY3NzKGZvcm1TdHlsZXMuaW5Hcm91cCwgXCI7bGFiZWw6aW5Hcm91cDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlGb3JtRXJyb3JUZXh0U3R5bGVzIH0gZnJvbSAnLi9mb3JtX2Vycm9yX3RleHQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1FcnJvclRleHQgPSBmdW5jdGlvbiBFdWlGb3JtRXJyb3JUZXh0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUVycm9yVGV4dCcsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlGb3JtRXJyb3JUZXh0U3R5bGVzKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogc3R5bGVzLmV1aUZvcm1FcnJvclRleHQsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIFwiYXJpYS1saXZlXCI6IFwicG9saXRlXCJcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlGb3JtRXJyb3JUZXh0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvbnRTaXplLCBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlGb3JtRXJyb3JUZXh0U3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUVycm9yVGV4dFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUZvcm1FcnJvclRleHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygncGFkZGluZy10b3AnLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgXCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiIGNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGFuZ2VyLCBcIjs7bGFiZWw6ZXVpRm9ybUVycm9yVGV4dDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlGb3JtSGVscFRleHRTdHlsZXMgfSBmcm9tICcuL2Zvcm1faGVscF90ZXh0LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtSGVscFRleHQgPSBmdW5jdGlvbiBFdWlGb3JtSGVscFRleHQoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtSGVscFRleHQnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpRm9ybUhlbHBUZXh0U3R5bGVzKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogc3R5bGVzLmV1aUZvcm1IZWxwVGV4dCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlGb3JtSGVscFRleHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aUZvcm1IZWxwVGV4dFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1IZWxwVGV4dFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUZvcm1IZWxwVGV4dDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdwYWRkaW5nLXRvcCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIiBcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnKSwgXCIgY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYXJrU2hhZGUsIFwiOztsYWJlbDpldWlGb3JtSGVscFRleHQ7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIiwgXCJoZWxwVGV4dFwiLCBcImlzSW52YWxpZFwiLCBcImVycm9yXCIsIFwibGFiZWxcIiwgXCJsYWJlbFR5cGVcIiwgXCJsYWJlbEFwcGVuZFwiLCBcImhhc0VtcHR5TGFiZWxTcGFjZVwiLCBcImZ1bGxXaWR0aFwiLCBcImRlc2NyaWJlZEJ5SWRzXCIsIFwiZGlzcGxheVwiLCBcImhhc0NoaWxkTGFiZWxcIiwgXCJpZFwiLCBcImlzRGlzYWJsZWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIENoaWxkcmVuLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUdlbmVyYXRlZEh0bWxJZCwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlTcGFjZXIgfSBmcm9tICcuLi8uLi9zcGFjZXInO1xuaW1wb3J0IHsgRXVpRm9ybUhlbHBUZXh0IH0gZnJvbSAnLi4vZm9ybV9oZWxwX3RleHQnO1xuaW1wb3J0IHsgRXVpRm9ybUVycm9yVGV4dCB9IGZyb20gJy4uL2Zvcm1fZXJyb3JfdGV4dCc7XG5pbXBvcnQgeyBFdWlGb3JtTGFiZWwgfSBmcm9tICcuLi9mb3JtX2xhYmVsJztcbmltcG9ydCB7IHVzZUZvcm1Db250ZXh0IH0gZnJvbSAnLi4vZXVpX2Zvcm1fY29udGV4dCc7XG5pbXBvcnQgeyBldWlGb3JtUm93U3R5bGVzIH0gZnJvbSAnLi9mb3JtX3Jvdy5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRElTUExBWVMgPSBbJ3JvdycsICdjb2x1bW5Db21wcmVzc2VkJywgJ2NlbnRlcicsICdjZW50ZXJDb21wcmVzc2VkJyxcbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqL1xuJ2NvbHVtbkNvbXByZXNzZWRTd2l0Y2gnLFxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICovXG4ncm93Q29tcHJlc3NlZCddO1xuZXhwb3J0IHZhciBFdWlGb3JtUm93ID0gZnVuY3Rpb24gRXVpRm9ybVJvdyhfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgaGVscFRleHQgPSBfcmVmLmhlbHBUZXh0LFxuICAgIGlzSW52YWxpZCA9IF9yZWYuaXNJbnZhbGlkLFxuICAgIGVycm9yID0gX3JlZi5lcnJvcixcbiAgICBsYWJlbCA9IF9yZWYubGFiZWwsXG4gICAgX3JlZiRsYWJlbFR5cGUgPSBfcmVmLmxhYmVsVHlwZSxcbiAgICBsYWJlbFR5cGUgPSBfcmVmJGxhYmVsVHlwZSA9PT0gdm9pZCAwID8gJ2xhYmVsJyA6IF9yZWYkbGFiZWxUeXBlLFxuICAgIGxhYmVsQXBwZW5kID0gX3JlZi5sYWJlbEFwcGVuZCxcbiAgICBfcmVmJGhhc0VtcHR5TGFiZWxTcGEgPSBfcmVmLmhhc0VtcHR5TGFiZWxTcGFjZSxcbiAgICBoYXNFbXB0eUxhYmVsU3BhY2UgPSBfcmVmJGhhc0VtcHR5TGFiZWxTcGEgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRoYXNFbXB0eUxhYmVsU3BhLFxuICAgIF9mdWxsV2lkdGggPSBfcmVmLmZ1bGxXaWR0aCxcbiAgICBkZXNjcmliZWRCeUlkcyA9IF9yZWYuZGVzY3JpYmVkQnlJZHMsXG4gICAgX3JlZiRkaXNwbGF5ID0gX3JlZi5kaXNwbGF5LFxuICAgIGRpc3BsYXkgPSBfcmVmJGRpc3BsYXkgPT09IHZvaWQgMCA/ICdyb3cnIDogX3JlZiRkaXNwbGF5LFxuICAgIF9yZWYkaGFzQ2hpbGRMYWJlbCA9IF9yZWYuaGFzQ2hpbGRMYWJlbCxcbiAgICBoYXNDaGlsZExhYmVsID0gX3JlZiRoYXNDaGlsZExhYmVsID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRoYXNDaGlsZExhYmVsLFxuICAgIHByb3BzSWQgPSBfcmVmLmlkLFxuICAgIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgX3VzZUZvcm1Db250ZXh0ID0gdXNlRm9ybUNvbnRleHQoKSxcbiAgICBkZWZhdWx0RnVsbFdpZHRoID0gX3VzZUZvcm1Db250ZXh0LmRlZmF1bHRGdWxsV2lkdGg7XG4gIHZhciBmdWxsV2lkdGggPSBfZnVsbFdpZHRoICE9PSBudWxsICYmIF9mdWxsV2lkdGggIT09IHZvaWQgMCA/IF9mdWxsV2lkdGggOiBkZWZhdWx0RnVsbFdpZHRoO1xuICB2YXIgaWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoe1xuICAgIGNvbmRpdGlvbmFsSWQ6IHByb3BzSWRcbiAgfSk7XG4gIHZhciBoYXNMYWJlbCA9IGxhYmVsIHx8IGxhYmVsQXBwZW5kO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGlzRm9jdXNlZCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0SXNGb2N1c2VkID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIG9uRm9jdXNXaXRoaW4gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNldElzRm9jdXNlZCh0cnVlKTtcbiAgfSwgW10pO1xuICB2YXIgb25CbHVyV2l0aGluID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzZXRJc0ZvY3VzZWQoZmFsc2UpO1xuICB9LCBbXSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybVJvdycsIHtcbiAgICAnZXVpRm9ybVJvdy0taGFzRW1wdHlMYWJlbFNwYWNlJzogaGFzRW1wdHlMYWJlbFNwYWNlLFxuICAgICdldWlGb3JtUm93LS1oYXNMYWJlbCc6IGhhc0xhYmVsXG4gIH0sIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlGb3JtUm93U3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRm9ybVJvdywgZnVsbFdpZHRoID8gc3R5bGVzLmZ1bGxXaWR0aCA6IHN0eWxlcy5mb3JtV2lkdGgsIHN0eWxlc1tkaXNwbGF5XV07XG4gIHZhciBvcHRpb25hbEhlbHBUZXh0cyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmICghaGVscFRleHQpIHJldHVybjtcbiAgICB2YXIgaGVscFRleHRzID0gQXJyYXkuaXNBcnJheShoZWxwVGV4dCkgPyBoZWxwVGV4dCA6IFtoZWxwVGV4dF07XG4gICAgcmV0dXJuIGhlbHBUZXh0cy5tYXAoZnVuY3Rpb24gKGhlbHBUZXh0LCBpKSB7XG4gICAgICB2YXIga2V5ID0gdHlwZW9mIGhlbHBUZXh0ID09PSAnc3RyaW5nJyA/IGhlbHBUZXh0IDogaTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1IZWxwVGV4dCwge1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgaWQ6IFwiXCIuY29uY2F0KGlkLCBcIi1oZWxwLVwiKS5jb25jYXQoaSksXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtUm93X190ZXh0XCJcbiAgICAgIH0sIGhlbHBUZXh0KTtcbiAgICB9KTtcbiAgfSwgW2hlbHBUZXh0LCBpZF0pO1xuICB2YXIgb3B0aW9uYWxFcnJvcnMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIShlcnJvciAmJiBpc0ludmFsaWQpKSByZXR1cm47XG4gICAgdmFyIGVycm9yVGV4dHMgPSBBcnJheS5pc0FycmF5KGVycm9yKSA/IGVycm9yIDogW2Vycm9yXTtcbiAgICByZXR1cm4gZXJyb3JUZXh0cy5tYXAoZnVuY3Rpb24gKGVycm9yLCBpKSB7XG4gICAgICB2YXIga2V5ID0gdHlwZW9mIGVycm9yID09PSAnc3RyaW5nJyA/IGVycm9yIDogaTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1FcnJvclRleHQsIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGlkOiBcIlwiLmNvbmNhdChpZCwgXCItZXJyb3ItXCIpLmNvbmNhdChpKSxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX3RleHRcIlxuICAgICAgfSwgZXJyb3IpO1xuICAgIH0pO1xuICB9LCBbZXJyb3IsIGlzSW52YWxpZCwgaWRdKTtcbiAgdmFyIGFyaWFEZXNjcmliZWRCeSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBkZXNjcmliaW5nSWRzID0gX3RvQ29uc3VtYWJsZUFycmF5KGRlc2NyaWJlZEJ5SWRzIHx8IFtdKTtcbiAgICBpZiAob3B0aW9uYWxIZWxwVGV4dHMgIT09IG51bGwgJiYgb3B0aW9uYWxIZWxwVGV4dHMgIT09IHZvaWQgMCAmJiBvcHRpb25hbEhlbHBUZXh0cy5sZW5ndGgpIHtcbiAgICAgIG9wdGlvbmFsSGVscFRleHRzLmZvckVhY2goZnVuY3Rpb24gKG9wdGlvbmFsSGVscFRleHQpIHtcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJpbmdJZHMucHVzaChvcHRpb25hbEhlbHBUZXh0LnByb3BzLmlkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAob3B0aW9uYWxFcnJvcnMgIT09IG51bGwgJiYgb3B0aW9uYWxFcnJvcnMgIT09IHZvaWQgMCAmJiBvcHRpb25hbEVycm9ycy5sZW5ndGgpIHtcbiAgICAgIG9wdGlvbmFsRXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIHJldHVybiBkZXNjcmliaW5nSWRzLnB1c2goZXJyb3IucHJvcHMuaWQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChkZXNjcmliaW5nSWRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRlc2NyaWJpbmdJZHMuam9pbignICcpO1xuICAgIH1cbiAgfSwgW2Rlc2NyaWJlZEJ5SWRzLCBvcHRpb25hbEhlbHBUZXh0cywgb3B0aW9uYWxFcnJvcnNdKTtcbiAgdmFyIGZpZWxkID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9yZWYyLCBfY2hpbGQkcHJvcHMkZGlzYWJsZWQ7XG4gICAgdmFyIGNoaWxkID0gQ2hpbGRyZW4ub25seShjaGlsZHJlbik7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIC8vIEFsbG93IHRoZSBjaGlsZCdzIGRpc2FibGVkIG9yIGlzRGlzYWJsZWQgcHJvcCB0byBzdXBlcmNlZGUgdGhlIGBpc0Rpc2FibGVkYFxuICAgICAgZGlzYWJsZWQ6IChfcmVmMiA9IChfY2hpbGQkcHJvcHMkZGlzYWJsZWQgPSBjaGlsZC5wcm9wcy5kaXNhYmxlZCkgIT09IG51bGwgJiYgX2NoaWxkJHByb3BzJGRpc2FibGVkICE9PSB2b2lkIDAgPyBfY2hpbGQkcHJvcHMkZGlzYWJsZWQgOiBjaGlsZC5wcm9wcy5pc0Rpc2FibGVkKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiBpc0Rpc2FibGVkLFxuICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBhcmlhRGVzY3JpYmVkQnlcbiAgICB9KTtcbiAgfSwgW2NoaWxkcmVuLCBpZCwgaXNEaXNhYmxlZCwgYXJpYURlc2NyaWJlZEJ5XSk7XG4gIHZhciBFbGVtZW50ID0gbGFiZWxUeXBlID09PSAnbGVnZW5kJyA/ICdmaWVsZHNldCcgOiAnZGl2JztcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBpZDogXCJcIi5jb25jYXQoaWQsIFwiLXJvd1wiKVxuICB9LCByZXN0KSwgaGFzTGFiZWwgPyBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fbGFiZWxXcmFwcGVyXCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlGb3JtTGFiZWwsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fbGFiZWxcIixcbiAgICBcImFyaWEtaW52YWxpZFwiOiBpc0ludmFsaWQsXG4gICAgaXNJbnZhbGlkOiBpc0ludmFsaWQsXG4gICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZCAmJiAhaXNEaXNhYmxlZCxcbiAgICBpZDogXCJcIi5jb25jYXQoaWQsIFwiLWxhYmVsXCIpXG4gICAgLy8gRXhjbHVzaXZlVW5pb24gc2hlbmFuaWdhbnNcbiAgfSwgbGFiZWxUeXBlID09PSAnbGVnZW5kJyA/IHtcbiAgICB0eXBlOiBsYWJlbFR5cGVcbiAgfSA6IHtcbiAgICB0eXBlOiBsYWJlbFR5cGUsXG4gICAgaHRtbEZvcjogaGFzQ2hpbGRMYWJlbCA/IGlkIDogdW5kZWZpbmVkXG4gIH0pLCBsYWJlbCksIGxhYmVsQXBwZW5kICYmICcgJywgbGFiZWxBcHBlbmQpIDogaGFzRW1wdHlMYWJlbFNwYWNlICYmIF9fX0Vtb3Rpb25KU1goRXVpU3BhY2VyLCB7XG4gICAgc2l6ZTogXCJtXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX2xhYmVsV3JhcHBlclwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fZmllbGRXcmFwcGVyXCIsXG4gICAgb25Gb2N1czogb25Gb2N1c1dpdGhpbixcbiAgICBvbkJsdXI6IG9uQmx1cldpdGhpblxuICB9LCBmaWVsZCwgb3B0aW9uYWxFcnJvcnMsIG9wdGlvbmFsSGVscFRleHRzKSk7XG59O1xuRXVpRm9ybVJvdy5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIERlZmF1bHRzIHRvIHJlbmRlcmluZyBhIGA8bGFiZWw+YCBidXQgaWYgcGFzc2VkIGAnbGVnZW5kJ2AgZm9yIGxhYmVsVHlwZSxcbiAgICAgKiB3aWxsIHJlbmRlciBib3RoIGEgYDxsZWdlbmQ+YCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRhaW5lciBhcyBhIGA8ZmllbGRzZXQ+YFxuICAgICAqL1xuICBsYWJlbFR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJsZWdlbmRcIl0pXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiAtIGBjb2x1bW5Db21wcmVzc2VkYCBjcmVhdGVzIGEgY29tcHJlc3NlZCBhbmQgaG9yaXpvbnRhbCBsYXlvdXRcbiAgICAgKiAtIGBjb2x1bW5Db21wcmVzc2VkU3dpdGNoYCAtICoqZGVwcmVjYXRlZCoqLCB1c2UgYGNvbHVtbkNvbXByZXNzZWRgIGluc3RlYWRcbiAgICAgKiAtIGBjZW50ZXJgL2BjZW50ZXJDb21wcmVzc2VkYCBoZWxwcyBhbGlnbiBub24taW5wdXQgY29udGVudCBiZXR0ZXIgd2l0aCBpbmxpbmUgZm9ybSBsYXlvdXRzXG4gICAgICogLSBgcm93Q29tcHJlc3NlZGAgLSAqKmRlcHJlY2F0ZWQqKiwgZG9lcyBub3QgY3VycmVudGx5IGFmZmVjdCBzdHlsaW5nXG4gICAgICovXG4gIC8qKlxuICAgICAqIC0gYGNvbHVtbkNvbXByZXNzZWRgIGNyZWF0ZXMgYSBjb21wcmVzc2VkIGFuZCBob3Jpem9udGFsIGxheW91dFxuICAgICAqIC0gYGNvbHVtbkNvbXByZXNzZWRTd2l0Y2hgIC0gKipkZXByZWNhdGVkKiosIHVzZSBgY29sdW1uQ29tcHJlc3NlZGAgaW5zdGVhZFxuICAgICAqIC0gYGNlbnRlcmAvYGNlbnRlckNvbXByZXNzZWRgIGhlbHBzIGFsaWduIG5vbi1pbnB1dCBjb250ZW50IGJldHRlciB3aXRoIGlubGluZSBmb3JtIGxheW91dHNcbiAgICAgKiAtIGByb3dDb21wcmVzc2VkYCAtICoqZGVwcmVjYXRlZCoqLCBkb2VzIG5vdCBjdXJyZW50bHkgYWZmZWN0IHN0eWxpbmdcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogVXNlZnVsIGZvciBpbmxpbmUgZm9ybSBsYXlvdXRzLCBwcmltYXJpbHkgZm9yIGNvbnRlbnQgdGhhdFxuICAgICAqIG5lZWRzIHRvIGJlIGFsaWduZWQgd2l0aCBpbnB1dHMgYnV0IGRvZXMgbm90IG5lZWQgYSBsYWJlbFxuICAgICAqL1xuICAvKipcbiAgICAgKiBVc2VmdWwgZm9yIGlubGluZSBmb3JtIGxheW91dHMsIHByaW1hcmlseSBmb3IgY29udGVudCB0aGF0XG4gICAgICogbmVlZHMgdG8gYmUgYWxpZ25lZCB3aXRoIGlucHV0cyBidXQgZG9lcyBub3QgbmVlZCBhIGxhYmVsXG4gICAgICovXG4gIGhhc0VtcHR5TGFiZWxTcGFjZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEV4cGFuZCB0byBmaWxsIDEwMCUgb2YgdGhlIHBhcmVudC5cbiAgICAgKiBEZWZhdWx0cyB0byBgZnVsbFdpZHRoYCBwcm9wIG9mIGA8RXVpRm9ybT5gLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIC8qKlxuICAgICAqIEV4cGFuZCB0byBmaWxsIDEwMCUgb2YgdGhlIHBhcmVudC5cbiAgICAgKiBEZWZhdWx0cyB0byBgZnVsbFdpZHRoYCBwcm9wIG9mIGA8RXVpRm9ybT5gLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIElEcyBvZiBhZGRpdGlvbmFsIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHBhcnQgb2YgY2hpbGRyZW4ncyBgYXJpYS1kZXNjcmliZWRieWBcbiAgICAgKi9cbiAgLyoqXG4gICAgICogSURzIG9mIGFkZGl0aW9uYWwgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUgcGFydCBvZiBjaGlsZHJlbidzIGBhcmlhLWRlc2NyaWJlZGJ5YFxuICAgICAqL1xuICBkZXNjcmliZWRCeUlkczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkKSxcbiAgLyoqXG4gICAgICogRXNjYXBlIGhhdGNoIHRvIG5vdCByZW5kZXIgZHVwbGljYXRlIGxhYmVscyBpZiB0aGUgY2hpbGQgYWxzbyByZW5kZXJzIGEgbGFiZWxcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRXNjYXBlIGhhdGNoIHRvIG5vdCByZW5kZXIgZHVwbGljYXRlIGxhYmVscyBpZiB0aGUgY2hpbGQgYWxzbyByZW5kZXJzIGEgbGFiZWxcbiAgICAgKi9cbiAgaGFzQ2hpbGRMYWJlbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIEFkZHMgYW4gZXh0cmEgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIGZvcm0gbGFiZWwgd2l0aG91dFxuICAgICAqIGJlaW5nIGNvbnRhaW5lZCBpbnNpZGUgdGhlIGZvcm0gbGFiZWwuIEdvb2QgZm9yIHRoaW5nc1xuICAgICAqIGxpa2UgZG9jdW1lbnRhdGlvbiBsaW5rcy5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogQWRkcyBhbiBleHRyYSBub2RlIHRvIHRoZSByaWdodCBvZiB0aGUgZm9ybSBsYWJlbCB3aXRob3V0XG4gICAgICogYmVpbmcgY29udGFpbmVkIGluc2lkZSB0aGUgZm9ybSBsYWJlbC4gR29vZCBmb3IgdGhpbmdzXG4gICAgICogbGlrZSBkb2N1bWVudGF0aW9uIGxpbmtzLlxuICAgICAqL1xuICBsYWJlbEFwcGVuZDogUHJvcFR5cGVzLmFueSxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIGVycm9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqICBBZGRzIGEgc2luZ2xlIG5vZGUvc3RyaW5nIG9yIGFuIGFycmF5IG9mIG5vZGVzL3N0cmluZ3MgYmVsb3cgdGhlIGlucHV0XG4gICAgICovXG4gIC8qKlxuICAgICAqICBBZGRzIGEgc2luZ2xlIG5vZGUvc3RyaW5nIG9yIGFuIGFycmF5IG9mIG5vZGVzL3N0cmluZ3MgYmVsb3cgdGhlIGlucHV0XG4gICAgICovXG4gIGhlbHBUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqICBQYXNzZWQgYWxvbmcgdG8gdGhlIGxhYmVsIGVsZW1lbnQ7IGFuZCB0byB0aGUgY2hpbGQgZmllbGQgZWxlbWVudCB3aGVuIGBkaXNhYmxlZGAgZG9lc24ndCBhbHJlYWR5IGV4aXN0IG9uIHRoZSBjaGlsZCBmaWVsZCBlbGVtZW50LlxuICAgICAqL1xuICAvKipcbiAgICAgKiAgUGFzc2VkIGFsb25nIHRvIHRoZSBsYWJlbCBlbGVtZW50OyBhbmQgdG8gdGhlIGNoaWxkIGZpZWxkIGVsZW1lbnQgd2hlbiBgZGlzYWJsZWRgIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBvbiB0aGUgY2hpbGQgZmllbGQgZWxlbWVudC5cbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlGb3JtVmFyaWFibGVzIH0gZnJvbSAnLi4vZm9ybS5zdHlsZXMnO1xuZXhwb3J0IHZhciBldWlGb3JtUm93U3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybVJvd1N0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgX2V1aUZvcm1WYXJpYWJsZXMgPSBldWlGb3JtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgbWF4V2lkdGggPSBfZXVpRm9ybVZhcmlhYmxlcy5tYXhXaWR0aCxcbiAgICBjb250cm9sSGVpZ2h0ID0gX2V1aUZvcm1WYXJpYWJsZXMuY29udHJvbEhlaWdodCxcbiAgICBjb250cm9sQ29tcHJlc3NlZEhlaWdodCA9IF9ldWlGb3JtVmFyaWFibGVzLmNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0O1xuICByZXR1cm4ge1xuICAgIGV1aUZvcm1Sb3c6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmZsZXg7Ky5ldWlCdXR0b257XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBldWlUaGVtZS5zaXplLmJhc2UpLCBcIjt9O2xhYmVsOmV1aUZvcm1Sb3c7XCIpLFxuICAgIC8vIFNraXAgY3NzYGAgdG8gYXZvaWQgZ2VuZXJhdGluZyBhbiBFbW90aW9uIGNsYXNzTmFtZVxuICAgIGZvcm1XaWR0aDogXCJcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygnbWF4LXdpZHRoJywgbWF4V2lkdGgpLCBcIlxcbiAgICBcIiksXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsV2lkdGg7XCIpLFxuICAgIC8vIFNraXAgY3NzYGAgdG8gYXZvaWQgZ2VuZXJhdGluZyBhbiBleHRyYSBjbGFzc05hbWVcbiAgICByb3c6IFwiXFxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgICByb3ctZ2FwOiBcIi5jb25jYXQoZXVpVGhlbWUuc2l6ZS54cywgXCI7XFxuXFxuICAgICAgLmV1aUZvcm1Sb3dfX2xhYmVsV3JhcHBlciB7XFxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICAgIH1cXG5cXG4gICAgICArIC5ldWlGb3JtUm93IHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGV1aVRoZW1lLnNpemUuYmFzZSksIFwiXFxuICAgICAgfVxcbiAgICBcIiksXG4gICAgLy8gTm8gZGlmZmVyZW5jZSBmcm9tIHRoZSB1bmNvbXByZXNzZWQgcm93IGZvciB0aGlzIGN1cnJlbnQgdGhlbWUgQUZBSUNUXG4gICAgLy8gVE9ETzogRGVwcmVjYXRlIHByb3BcbiAgICBnZXQgcm93Q29tcHJlc3NlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdztcbiAgICB9LFxuICAgIGNvbHVtbkNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6c3RyZXRjaDtjb2x1bW4tZ2FwOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOy5ldWlGb3JtUm93X19sYWJlbHtoeXBoZW5zOmF1dG87fS5ldWlGb3JtUm93X19sYWJlbFdyYXBwZXJ7ZmxleC1iYXNpczpjYWxjKDMzJSAtIFwiLCBldWlUaGVtZS5zaXplLnMsIFwiKTtcIiwgbG9naWNhbENTUygnbWluLXdpZHRoJywgMCksIFwiIGxpbmUtaGVpZ2h0OlwiLCBjb250cm9sQ29tcHJlc3NlZEhlaWdodCwgXCI7fS5ldWlGb3JtUm93X19maWVsZFdyYXBwZXJ7ZmxleC1iYXNpczo2NyU7XCIsIGxvZ2ljYWxDU1MoJ21pbi13aWR0aCcsIDApLCBcIjt9Ky5ldWlGb3JtUm93e1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgZXVpVGhlbWUuc2l6ZS5zKSwgXCI7fSY6aGFzKC5ldWlTd2l0Y2gpeyY6bm90KDpmaXJzdC1jaGlsZCl7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBldWlUaGVtZS5zaXplLm0pLCBcIjt9Jjpub3QoOmxhc3QtY2hpbGQpe1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgZXVpVGhlbWUuc2l6ZS5tKSwgXCI7fS5ldWlGb3JtUm93X19sYWJlbFdyYXBwZXJ7bGluZS1oZWlnaHQ6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7fX07bGFiZWw6Y29sdW1uQ29tcHJlc3NlZDtcIiksXG4gICAgLy8gSGFuZGxlZCBieSA6aGFzIENTUyBub3cgcmF0aGVyIHRoYW4gYSBzZXBhcmF0ZSBtb2RpZmllci9wcm9wXG4gICAgLy8gVE9ETzogRGVwcmVjYXRlIHByb3BcbiAgICBnZXQgY29sdW1uQ29tcHJlc3NlZFN3aXRjaCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbkNvbXByZXNzZWQ7XG4gICAgfSxcbiAgICAvLyBDZW50ZXIgZGlzcGxheSBpcyBwcmltYXJpbHkgZm9yIGlubGluZSBmb3JtIHJvd3MsIHdoaWNoIG1heSBoYXZlIGhhdmVcbiAgICAvLyBmaWVsZCBjb250ZW50IHRoYXQgaXMgc2hvcnRlciB0aGFuIGZvcm0gY29udHJvbHMgKGUuZy4gc3dpdGNoZXMsIHRleHQpLFxuICAgIC8vIGFuZCBzaG91bGQgdmVydGljYWxseSBjZW50ZXIgc2FpZCBjb250ZW50XG4gICAgY2VudGVyRGlzcGxheUNzczogZnVuY3Rpb24gY2VudGVyRGlzcGxheUNzcyhjb21wcmVzc2VkKSB7XG4gICAgICByZXR1cm4gXCJcXG4gICAgICAuZXVpRm9ybVJvd19fZmllbGRXcmFwcGVyIHtcXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ21pbi1oZWlnaHQnLCBjb21wcmVzc2VkID8gY29udHJvbENvbXByZXNzZWRIZWlnaHQgOiBjb250cm9sSGVpZ2h0KSwgXCJcXG4gICAgICB9XFxuICAgIFwiKTtcbiAgICB9LFxuICAgIGdldCBjZW50ZXIoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2Nzcyh0aGlzLnJvdywgXCIgXCIsIHRoaXMuY2VudGVyRGlzcGxheUNzcyhmYWxzZSksIFwiOztsYWJlbDpjZW50ZXI7XCIpO1xuICAgIH0sXG4gICAgZ2V0IGNlbnRlckNvbXByZXNzZWQoKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2Nzcyh0aGlzLnJvdywgXCIgXCIsIHRoaXMuY2VudGVyRGlzcGxheUNzcyh0cnVlKSwgXCI7O2xhYmVsOmNlbnRlckNvbXByZXNzZWQ7XCIpO1xuICAgIH1cbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJzaXplXCIsIFwibWFyZ2luXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUhvcml6b250YWxSdWxlU3R5bGVzIH0gZnJvbSAnLi9ob3Jpem9udGFsX3J1bGUuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydmdWxsJywgJ2hhbGYnLCAncXVhcnRlciddO1xuZXhwb3J0IHZhciBNQVJHSU5TID0gWydub25lJywgJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJywgJ3h4bCddO1xuZXhwb3J0IHZhciBFdWlIb3Jpem9udGFsUnVsZSA9IGZ1bmN0aW9uIEV1aUhvcml6b250YWxSdWxlKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnZnVsbCcgOiBfcmVmJHNpemUsXG4gICAgX3JlZiRtYXJnaW4gPSBfcmVmLm1hcmdpbixcbiAgICBtYXJnaW4gPSBfcmVmJG1hcmdpbiA9PT0gdm9pZCAwID8gJ2wnIDogX3JlZiRtYXJnaW4sXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUhvcml6b250YWxSdWxlJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUhvcml6b250YWxSdWxlU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpSG9yaXpvbnRhbFJ1bGUsIHN0eWxlc1tzaXplXSwgc3R5bGVzW21hcmdpbl1dO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImhyXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCkpO1xufTtcbkV1aUhvcml6b250YWxSdWxlLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgd2lkdGggb2YgdGhlIEhSLlxuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICBtYXJnaW46IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlIb3Jpem9udGFsUnVsZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUhvcml6b250YWxSdWxlU3R5bGVzKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlIb3Jpem9udGFsUnVsZTogLyojX19QVVJFX18qL2NzcyhcImJvcmRlcjpub25lO1wiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiksIFwiIGJhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmJvcmRlci5jb2xvciwgXCI7ZmxleC1zaHJpbms6MDtmbGV4LWdyb3c6MDs7bGFiZWw6ZXVpSG9yaXpvbnRhbFJ1bGU7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgZnVsbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsO1wiKSxcbiAgICBoYWxmOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzUwJScpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLWhvcml6b250YWwnLCAnYXV0bycpLCBcIjs7bGFiZWw6aGFsZjtcIiksXG4gICAgcXVhcnRlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcyNSUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ob3Jpem9udGFsJywgJ2F1dG8nKSwgXCI7O2xhYmVsOnF1YXJ0ZXI7XCIpLFxuICAgIC8vIE1hcmdpbnNcbiAgICBub25lOiAnJyxcbiAgICB4czogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUubSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUubCwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLnhsLCBcIjs7bGFiZWw6eGw7XCIpLFxuICAgIHh4bDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wic3R5bGVzTWVtb2l6ZXJcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcIm9uQ2xvc2VcIiwgXCJ0aXRsZVwiLCBcIm9uSGVpZ2h0Q2hhbmdlXCIsIFwidHJhbnNpdGlvblR5cGVcIiwgXCJ0cmFuc2l0aW9uRGlyZWN0aW9uXCIsIFwib25UcmFuc2l0aW9uQ29tcGxldGVcIiwgXCJvblVzZUtleWJvYXJkVG9OYXZpZ2F0ZVwiLCBcIml0ZW1zXCIsIFwiaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXhcIiwgXCJzaG93TmV4dFBhbmVsXCIsIFwic2hvd1ByZXZpb3VzUGFuZWxcIiwgXCJzaXplXCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB0YWJiYWJsZSB9IGZyb20gJ3RhYmJhYmxlJztcbmltcG9ydCB7IHdpdGhFdWlTdHlsZXNNZW1vaXplciwga2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSB9IGZyb20gJy4vY29udGV4dF9tZW51X2l0ZW0nO1xuaW1wb3J0IHsgZXVpQ29udGV4dE1lbnVQYW5lbFN0eWxlcyB9IGZyb20gJy4vY29udGV4dF9tZW51X3BhbmVsLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsncycsICdtJ107XG5leHBvcnQgdmFyIEV1aUNvbnRleHRNZW51UGFuZWxDbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlDb250ZXh0TWVudVBhbmVsQ2xhc3MocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbnRleHRNZW51UGFuZWxDbGFzcyk7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aUNvbnRleHRNZW51UGFuZWxDbGFzcywgW3Byb3BzXSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIl9pc01vdW50ZWRcIiwgZmFsc2UpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJiYWNrQnV0dG9uXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwYW5lbFwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaW5pdGlhbFBvcG92ZXJQYXJlbnRcIiwgbnVsbCk7XG4gICAgLy8gRmluZCBhbGwgdGFiYmFibGUgbWVudSBpdGVtcyBvbiBib3RoIHBhbmVsIGluaXQgYW5kXG4gICAgLy8gd2hlbmV2ZXIgYG1lbnVJdGVtc2AgcmVzZXRzIHdoZW4gYHByb3BzLml0ZW1zYCBjaGFuZ2VzXG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImZpbmRNZW51SXRlbXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJGl0ZW1zO1xuICAgICAgaWYgKCFfdGhpcy5wYW5lbCkgcmV0dXJuO1xuICAgICAgaWYgKCEoKF90aGlzJHByb3BzJGl0ZW1zID0gX3RoaXMucHJvcHMuaXRlbXMpICE9PSBudWxsICYmIF90aGlzJHByb3BzJGl0ZW1zICE9PSB2b2lkIDAgJiYgX3RoaXMkcHJvcHMkaXRlbXMubGVuZ3RoKSkgcmV0dXJuOyAvLyBXZSBvbmx5IG5lZWQgbWVudSBpdGVtcy9hcnJvdyBrZXkgbmF2aWdhdGlvbiBmb3IgdGhlIGBpdGVtc2AgQVBJXG4gICAgICBpZiAoX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCkgcmV0dXJuOyAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgbWVudSBpdGVtcywgbm8gbmVlZCB0byBjb250aW51ZVxuXG4gICAgICB2YXIgdGFiYmFibGVJdGVtcyA9IHRhYmJhYmxlKF90aGlzLnBhbmVsKTtcbiAgICAgIGlmICh0YWJiYWJsZUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbWVudUl0ZW1zOiB0YWJiYWJsZUl0ZW1zXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJmb2N1c01lbnVJdGVtXCIsIGZ1bmN0aW9uIChkaXJlY3Rpb24pIHtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSRtZW51SXRlbXM7XG4gICAgICB2YXIgaW5kZXhPZmZzZXQgPSBkaXJlY3Rpb24gPT09ICd1cCcgPyAtMSA6IDE7XG4gICAgICB2YXIgbmV4dEZvY3VzZWRJdGVtSW5kZXg7XG4gICAgICBpZiAoX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgdXNlcidzIGtleWJvYXJkIG5hdmlnYXRpb24gb2YgdGhlIG1lbnUsIHRoZW4gd2UnbGwgZm9jdXNcbiAgICAgICAgLy8gZWl0aGVyIHRoZSBmaXJzdCBvciBsYXN0IGl0ZW0uXG4gICAgICAgIG5leHRGb2N1c2VkSXRlbUluZGV4ID0gZGlyZWN0aW9uID09PSAndXAnID8gX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCAtIDEgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dEZvY3VzZWRJdGVtSW5kZXggPSBfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ICsgaW5kZXhPZmZzZXQ7XG4gICAgICAgIGlmIChuZXh0Rm9jdXNlZEl0ZW1JbmRleCA8IDApIHtcbiAgICAgICAgICBuZXh0Rm9jdXNlZEl0ZW1JbmRleCA9IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKG5leHRGb2N1c2VkSXRlbUluZGV4ID09PSBfdGhpcy5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgbmV4dEZvY3VzZWRJdGVtSW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZvY3VzZWRJdGVtSW5kZXg6IG5leHRGb2N1c2VkSXRlbUluZGV4XG4gICAgICB9KTtcbiAgICAgIChfdGhpcyRzdGF0ZSRtZW51SXRlbXMgPSBfdGhpcy5zdGF0ZS5tZW51SXRlbXNbbmV4dEZvY3VzZWRJdGVtSW5kZXhdKSA9PT0gbnVsbCB8fCBfdGhpcyRzdGF0ZSRtZW51SXRlbXMgPT09IHZvaWQgMCB8fCBfdGhpcyRzdGF0ZSRtZW51SXRlbXMuZm9jdXMoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gSWYgdGhpcyBwYW5lbCBjb250YWlucyBpdGVtcyB5b3UgY2FuIHVzZSB0aGUgbGVmdCBhcnJvdyBrZXkgdG8gZ28gYmFjayBhdCBhbnkgdGltZS5cbiAgICAgIC8vIEJ1dCBpZiBpdCBkb2Vzbid0IGNvbnRhaW4gaXRlbXMsIHRoZW4geW91IGhhdmUgdG8gZm9jdXMgb24gdGhlIGJhY2sgYnV0dG9uIHNwZWNpZmljYWxseSxcbiAgICAgIC8vIHNpbmNlIHRoZXJlIGNvdWxkIGJlIGNvbnRlbnQgaW5zaWRlIHRoZSBwYW5lbCB3aGljaCByZXF1aXJlcyB1c2Ugb2YgdGhlIGxlZnQgYXJyb3cga2V5LFxuICAgICAgLy8gZS5nLiB0ZXh0IGlucHV0cy5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzLml0ZW1zLFxuICAgICAgICBvbkNsb3NlID0gX3RoaXMkcHJvcHMub25DbG9zZSxcbiAgICAgICAgc2hvd1ByZXZpb3VzUGFuZWwgPSBfdGhpcyRwcm9wcy5zaG93UHJldmlvdXNQYW5lbDtcbiAgICAgIGlmIChvbkNsb3NlICYmIChpdGVtcyAhPT0gbnVsbCAmJiBpdGVtcyAhPT0gdm9pZCAwICYmIGl0ZW1zLmxlbmd0aCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBfdGhpcy5iYWNrQnV0dG9uIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IF90aGlzLnBhbmVsKSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkFSUk9XX0xFRlQpIHtcbiAgICAgICAgICBpZiAoc2hvd1ByZXZpb3VzUGFuZWwpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHNob3dQcmV2aW91c1BhbmVsKCk7XG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpdGVtcyAhPT0gbnVsbCAmJiBpdGVtcyAhPT0gdm9pZCAwICYmIGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgIGNhc2Uga2V5cy5UQUI6XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyBOT1RFOiBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlzIHN0YWxlIGlmIG5vdCB3cmFwcGVkIGluIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgICAgICAgICB2YXIgZm9jdXNlZEl0ZW1JbmRleCA9IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3luYyBvdXIgaW50ZXJuYWwgc3RhdGUgd2l0aCB0aGUgdXNlciB0YWJiaW5nIHRocm91Z2ggaXRlbXNcbiAgICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGZvY3VzZWRJdGVtSW5kZXg6IGZvY3VzZWRJdGVtSW5kZXggPj0gMCAmJiBmb2N1c2VkSXRlbUluZGV4IDwgX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCA/IGZvY3VzZWRJdGVtSW5kZXggOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2Uga2V5cy5BUlJPV19VUDpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBfdGhpcy5mb2N1c01lbnVJdGVtKCd1cCcpO1xuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIGtleXMuQVJST1dfRE9XTjpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBfdGhpcy5mb2N1c01lbnVJdGVtKCdkb3duJyk7XG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2Uga2V5cy5BUlJPV19SSUdIVDpcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5zaG93TmV4dFBhbmVsKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLnNob3dOZXh0UGFuZWwob25DbG9zZSAmJiBfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ID8gX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCAtIDEgLy8gQWNjb3VudCBmb3IgcGFuZWwgdGl0bGUgYmFjayBidXR0b25cbiAgICAgICAgICAgICAgOiBfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4KTtcbiAgICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlY2xhaW1Qb3BvdmVyRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB3YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXI6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIF90aGlzLnRha2VJbml0aWFsRm9jdXMoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25UcmFuc2l0aW9uQ29tcGxldGVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uVHJhbnNpdGlvbkNvbXBsZXRlKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uVHJhbnNpdGlvbkNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInBhbmVsUmVmXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5wYW5lbCA9IG5vZGU7XG4gICAgICBfdGhpcy51cGRhdGVIZWlnaHQoKTtcbiAgICAgIF90aGlzLmdldEluaXRpYWxQb3BvdmVyUGFyZW50KCk7XG4gICAgICBfdGhpcy5maW5kTWVudUl0ZW1zKCk7XG4gICAgfSk7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBwcmV2UHJvcHM6IHtcbiAgICAgICAgaXRlbXM6IF90aGlzLnByb3BzLml0ZW1zXG4gICAgICB9LFxuICAgICAgbWVudUl0ZW1zOiBbXSxcbiAgICAgIGZvY3VzZWRJdGVtSW5kZXg6IHByb3BzLm9uQ2xvc2UgJiYgcHJvcHMuaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXggIT0gbnVsbCAmJiBwcm9wcy5pbml0aWFsRm9jdXNlZEl0ZW1JbmRleCAhPT0gLTEgPyBwcm9wcy5pbml0aWFsRm9jdXNlZEl0ZW1JbmRleCArIDEgLy8gQWNjb3VudCBmb3IgcGFuZWwgdGl0bGUgYmFjayBidXR0b25cbiAgICAgIDogcHJvcHMuaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXgsXG4gICAgICBjdXJyZW50SGVpZ2h0OiB1bmRlZmluZWQsXG4gICAgICB3YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXI6IGZhbHNlLFxuICAgICAgdG9va0luaXRpYWxGb2N1czogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpQ29udGV4dE1lbnVQYW5lbENsYXNzLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlDb250ZXh0TWVudVBhbmVsQ2xhc3MsIFt7XG4gICAga2V5OiBcInRha2VJbml0aWFsRm9jdXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdGFrZUluaXRpYWxGb2N1cygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgLy8gR2l2ZSBwb3NpdGlvbmluZyB0aW1lIHRvIHJlbmRlciBiZWZvcmUgZm9jdXMgaXMgYXBwbGllZC4gT3RoZXJ3aXNlIHBhZ2UganVtcHMuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIV90aGlzMi5faXNNb3VudGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRG9uJ3QgdGFrZSBmb2N1cyB5ZXQgaWYgRXVpQ29udGV4dE1lbnUgaXMgaW4gYSBwb3BvdmVyXG4gICAgICAgIC8vIGFuZCB0aGUgcG9wb3ZlciBpcyBpbml0aWFsbHkgb3BlbmluZy90cmFuc2l0aW9uaW5nIGluXG4gICAgICAgIGlmIChfdGhpczIuaW5pdGlhbFBvcG92ZXJQYXJlbnQgJiYgX3RoaXMyLnN0YXRlLndhaXRpbmdGb3JJbml0aWFsUG9wb3Zlcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldHRpbmcgZm9jdXMgd2hpbGUgdHJhbnNpdGlvbmluZyBjYXVzZXMgdGhlIGFuaW1hdGlvbiB0byBnbGl0Y2gsIHNvIHdlIGhhdmUgdG8gd2FpdFxuICAgICAgICAvLyB1bnRpbCBpdCdzIGZpbmlzaGVkIGJlZm9yZSB3ZSBmb2N1cyBhbnl0aGluZy5cbiAgICAgICAgaWYgKF90aGlzMi5wcm9wcy50cmFuc2l0aW9uVHlwZSkge1xuICAgICAgICAgIHZhciBfdGhpczIkcGFuZWw7XG4gICAgICAgICAgLy8gSWYgdGhlIHBhbmVsIGlzIHRyYW5zaXRpb25pbmcsIHNldCBmb2N1cyB0byB0aGUgcGFuZWwgc28gdGhhdCB1c2VycyB1c2luZ1xuICAgICAgICAgIC8vIGFycm93IGtleXMgdGhhdCBhcmUgZmFzdCBjbGlja2VycyBkb24ndCBhY2NpZGVudGFsbHkgZ2V0IHN0cmFuZGVkIGZvY3VzXG4gICAgICAgICAgLy8gb3IgdHJpZ2dlciBrZXlzdHJva2VzIHdoZW4gaXQgc2hvdWxkbid0XG4gICAgICAgICAgKF90aGlzMiRwYW5lbCA9IF90aGlzMi5wYW5lbCkgPT09IG51bGwgfHwgX3RoaXMyJHBhbmVsID09PSB2b2lkIDAgfHwgX3RoaXMyJHBhbmVsLmZvY3VzKHtcbiAgICAgICAgICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbml0aWFsIGZvY3VzIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZCwgbm8gbmVlZCB0byBjb250aW51ZSBhbmQgcG90ZW50aWFsbHkgaGlqYWNrL2ZvY3VzIGZpZ2h0XG4gICAgICAgIGlmIChfdGhpczIuc3RhdGUudG9va0luaXRpYWxGb2N1cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGBpbml0aWFsRm9jdXNlZEl0ZW1JbmRleD17LTF9YCBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gcHJldmVudGluZyBpbml0aWFsIGl0ZW0gZm9jdXMgaXMgZGVzaXJlZFxuICAgICAgICBpZiAoX3RoaXMyLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgLy8gUmVzZXR0aW5nIHRoZSBmb2N1c2VkSXRlbUluZGV4IHRvIDAgYWxsb3dzIGtleWJvYXJkIHVwL2Rvd24gYmVoYXZpb3IgdG9cbiAgICAgICAgICAvLyBzdGlsbCB3b3JrIGNvcnJlY3RseSBsYXRlciBpZiB0aGUgcGFuZWwgaXMgbWFudWFsbHkgdGFiYmVkIGludG9cbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHRvb2tJbml0aWFsRm9jdXM6IHRydWUsXG4gICAgICAgICAgICBmb2N1c2VkSXRlbUluZGV4OiAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhbiBpdGVtIHNob3VsZCBiZSBmb2N1c2VkLCBmb2N1cyBpdCAoaWYgaXQgZXhpc3RzKVxuICAgICAgICBpZiAoX3RoaXMyLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggIT0gbnVsbCAmJiBfdGhpczIuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBmb2N1c2VkSXRlbSA9IF90aGlzMi5zdGF0ZS5tZW51SXRlbXNbX3RoaXMyLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXhdO1xuICAgICAgICAgIGlmIChmb2N1c2VkSXRlbSkge1xuICAgICAgICAgICAgZm9jdXNlZEl0ZW0uZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHRoZSBiYWNrIGJ1dHRvbiBwYW5lbCB0aXRsZSBpcyBwcmVzZW50LCBmb2N1cyBpdFxuICAgICAgICBpZiAoX3RoaXMyLmJhY2tCdXR0b24pIHtcbiAgICAgICAgICAvLyBGb2N1cyB0aGUgYmFjayBidXR0b24gZm9yIGJvdGggYGl0ZW1zYCBhbmQgYGNoaWxkcmVuYCBBUElzXG4gICAgICAgICAgX3RoaXMyLmJhY2tCdXR0b24uZm9jdXMoKTtcbiAgICAgICAgICAvLyBJZiBgaXRlbXNgLCBlbnN1cmUgb3VyIGZvY3VzZWQgaXRlbSBpbmRleCBpcyBjb3JyZWN0XG4gICAgICAgICAgaWYgKF90aGlzMi5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBmb2N1c2VkSXRlbUluZGV4OiAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb2N1cyBvbiB0aGUgcGFuZWwgYXMgYSBsYXN0IHJlc29ydC5cbiAgICAgICAgaWYgKF90aGlzMi5wYW5lbCAmJiAhX3RoaXMyLnBhbmVsLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgX3RoaXMyLnBhbmVsLmZvY3VzKCk7XG4gICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHRvb2tJbml0aWFsRm9jdXM6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoXywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJldlN0YXRlLm1lbnVJdGVtcyAhPT0gdGhpcy5zdGF0ZS5tZW51SXRlbXMpIHtcbiAgICAgICAgdGhpcy5maW5kTWVudUl0ZW1zKCk7XG4gICAgICB9XG4gICAgICAvLyBGb2N1cyBpc24ndCBhbHdheXMgcmVhZHkgdG8gYmUgdGFrZW4gb24gbW91bnQsIHNvIHdlIG5lZWQgdG8gY2FsbCBpdFxuICAgICAgLy8gb24gdXBkYXRlIGFzIHdlbGwganVzdCBpbiBjYXNlXG4gICAgICB0aGlzLnRha2VJbml0aWFsRm9jdXMoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAvLyBJZiBFdWlDb250ZXh0TWVudSBpcyB1c2VkIHdpdGhpbiBhbiBFdWlQb3BvdmVyLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIEV1aVBvcG92ZXIgdG86XG4gICAgICAvLyAxLiBDb3JyZWN0bHkgc2V0IGl0cyBgcmV0dXJuRm9jdXNgIHRvIHRoZSB0b2dnbGluZyBidXR0b24sXG4gICAgICAvLyAgICBzbyBmb2N1cyBpcyBjb3JyZWN0bHkgcmVzdG9yZWQgdG8gdGhlIHBvcG92ZXIgdG9nZ2xlIG9uIGNsb3NlXG4gICAgICAvLyAyLiBGaW5pc2ggaXRzIHJlYWN0LWZvY3VzLW9uIGBhdXRvRm9jdXNgIGJlaGF2aW9yIGFmdGVyIHRyYW5zaXRpb25pbmcgaW4sXG4gICAgICAvLyAgICBzbyB0aGUgcGFuZWwgY2FuIGhhbmRsZSBpdHMgb3duIGZvY3VzIHdpdGhvdXQgZm9jdXMgZmlnaHRpbmdcbiAgICAgIGlmICh0aGlzLmluaXRpYWxQb3BvdmVyUGFyZW50KSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFBvcG92ZXJQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLnJlY2xhaW1Qb3BvdmVyRm9jdXMsIHtcbiAgICAgICAgICBvbmNlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50YWtlSW5pdGlhbEZvY3VzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRpbml0aWFsUG9wb3ZlclA7XG4gICAgICAoX3RoaXMkaW5pdGlhbFBvcG92ZXJQID0gdGhpcy5pbml0aWFsUG9wb3ZlclBhcmVudCkgPT09IG51bGwgfHwgX3RoaXMkaW5pdGlhbFBvcG92ZXJQID09PSB2b2lkIDAgfHwgX3RoaXMkaW5pdGlhbFBvcG92ZXJQLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5yZWNsYWltUG9wb3ZlckZvY3VzKTtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1cGRhdGVIZWlnaHRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlSGVpZ2h0KCkge1xuICAgICAgdmFyIGN1cnJlbnRIZWlnaHQgPSB0aGlzLnBhbmVsID8gdGhpcy5wYW5lbC5jbGllbnRIZWlnaHQgOiAwO1xuICAgICAgaWYgKHRoaXMuc3RhdGUuaGVpZ2h0ICE9PSBjdXJyZW50SGVpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uSGVpZ2h0Q2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vbkhlaWdodENoYW5nZShjdXJyZW50SGVpZ2h0KTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGhlaWdodDogY3VycmVudEhlaWdodFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEluaXRpYWxQb3BvdmVyUGFyZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEluaXRpYWxQb3BvdmVyUGFyZW50KCkge1xuICAgICAgdmFyIF9wYXJlbnQkcGFyZW50Tm9kZTtcbiAgICAgIC8vIElmIGB0cmFuc2l0aW9uVHlwZWAgZXhpc3RzLCB0aGF0IG1lYW5zIHdlJ3JlIG5hdmlnYXRpbmcgYmV0d2VlbiBwYW5lbHNcbiAgICAgIC8vIGFuZCB0aGUgaW5pdGlhbCBwb3BvdmVyIGhhcyBhbHJlYWR5IGxvYWRlZCwgc28gd2Ugc2hvdWxkbid0IG5lZWQgdGhpcyBsb2dpY1xuICAgICAgaWYgKHRoaXMucHJvcHMudHJhbnNpdGlvblR5cGUpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5wYW5lbCkgcmV0dXJuO1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFuZWwucGFyZW50Tm9kZTtcbiAgICAgIGlmICghcGFyZW50KSByZXR1cm47XG4gICAgICB2YXIgaGFzRXVpQ29udGV4dE1lbnVQYXJlbnQgPSBwYXJlbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdldWlDb250ZXh0TWVudScpO1xuXG4gICAgICAvLyBJdCdzIHBvc3NpYmxlIHRvIHVzZSBhbiBFdWlDb250ZXh0TWVudVBhbmVsIGRpcmVjdGx5IGluIGEgcG9wb3ZlciB3aXRob3V0XG4gICAgICAvLyBhbiBFdWlDb250ZXh0TWVudSwgc28gd2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0IHdoZW4gc2VhcmNoaW5nIHBhcmVudCBub2Rlc1xuICAgICAgdmFyIHBvcG92ZXJQYXJlbnQgPSBoYXNFdWlDb250ZXh0TWVudVBhcmVudCA/IHBhcmVudCA9PT0gbnVsbCB8fCBwYXJlbnQgPT09IHZvaWQgMCB8fCAoX3BhcmVudCRwYXJlbnROb2RlID0gcGFyZW50LnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9wYXJlbnQkcGFyZW50Tm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BhcmVudCRwYXJlbnROb2RlLnBhcmVudE5vZGUgOiBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgIGlmICghcG9wb3ZlclBhcmVudCkgcmV0dXJuO1xuICAgICAgdmFyIGhhc1BvcG92ZXJQYXJlbnQgPSAhIXBvcG92ZXJQYXJlbnQuZGF0YXNldC5wb3BvdmVyUGFuZWw7XG4gICAgICBpZiAoIWhhc1BvcG92ZXJQYXJlbnQpIHJldHVybjtcbiAgICAgIHRoaXMuaW5pdGlhbFBvcG92ZXJQYXJlbnQgPSBwb3BvdmVyUGFyZW50O1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHdhaXRpbmdGb3JJbml0aWFsUG9wb3ZlcjogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBzdHlsZXNNZW1vaXplciA9IF90aGlzJHByb3BzMi5zdHlsZXNNZW1vaXplcixcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczIuY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgIG9uQ2xvc2UgPSBfdGhpcyRwcm9wczIub25DbG9zZSxcbiAgICAgICAgdGl0bGUgPSBfdGhpcyRwcm9wczIudGl0bGUsXG4gICAgICAgIG9uSGVpZ2h0Q2hhbmdlID0gX3RoaXMkcHJvcHMyLm9uSGVpZ2h0Q2hhbmdlLFxuICAgICAgICB0cmFuc2l0aW9uVHlwZSA9IF90aGlzJHByb3BzMi50cmFuc2l0aW9uVHlwZSxcbiAgICAgICAgdHJhbnNpdGlvbkRpcmVjdGlvbiA9IF90aGlzJHByb3BzMi50cmFuc2l0aW9uRGlyZWN0aW9uLFxuICAgICAgICBvblRyYW5zaXRpb25Db21wbGV0ZSA9IF90aGlzJHByb3BzMi5vblRyYW5zaXRpb25Db21wbGV0ZSxcbiAgICAgICAgb25Vc2VLZXlib2FyZFRvTmF2aWdhdGUgPSBfdGhpcyRwcm9wczIub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUsXG4gICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMyLml0ZW1zLFxuICAgICAgICBpbml0aWFsRm9jdXNlZEl0ZW1JbmRleCA9IF90aGlzJHByb3BzMi5pbml0aWFsRm9jdXNlZEl0ZW1JbmRleCxcbiAgICAgICAgc2hvd05leHRQYW5lbCA9IF90aGlzJHByb3BzMi5zaG93TmV4dFBhbmVsLFxuICAgICAgICBzaG93UHJldmlvdXNQYW5lbCA9IF90aGlzJHByb3BzMi5zaG93UHJldmlvdXNQYW5lbCxcbiAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzMi5zaXplLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29udGV4dE1lbnVQYW5lbCcsIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgc3R5bGVzID0gc3R5bGVzTWVtb2l6ZXIoZXVpQ29udGV4dE1lbnVQYW5lbFN0eWxlcyk7XG4gICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlDb250ZXh0TWVudVBhbmVsLCB0cmFuc2l0aW9uRGlyZWN0aW9uICYmIHRyYW5zaXRpb25UeXBlICYmIHN0eWxlc1t0cmFuc2l0aW9uRGlyZWN0aW9uXVt0cmFuc2l0aW9uVHlwZV1dO1xuICAgICAgdmFyIHBhbmVsVGl0bGUgPSB0aXRsZSAmJiBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51SXRlbSwge1xuICAgICAgICBjc3M6IHN0eWxlcy5ldWlDb250ZXh0TWVudVBhbmVsX190aXRsZSxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51UGFuZWxfX3RpdGxlXCIsXG4gICAgICAgIG9uQ2xpY2s6IG9uQ2xvc2UsXG4gICAgICAgIGJ1dHRvblJlZjogZnVuY3Rpb24gYnV0dG9uUmVmKG5vZGUpIHtcbiAgICAgICAgICBpZiAob25DbG9zZSkgX3RoaXMzLmJhY2tCdXR0b24gPSBub2RlO1xuICAgICAgICB9LFxuICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IG9uQ2xvc2UgPyAnY29udGV4dE1lbnVQYW5lbFRpdGxlQnV0dG9uJyA6ICdjb250ZXh0TWVudVBhbmVsVGl0bGUnLFxuICAgICAgICBpY29uOiBvbkNsb3NlICYmICdhcnJvd0xlZnQnXG4gICAgICB9LCB0aXRsZSk7XG4gICAgICB2YXIgY29udGVudCA9IGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA/IGl0ZW1zLm1hcChmdW5jdGlvbiAoTWVudUl0ZW0pIHtcbiAgICAgICAgdmFyIGNsb25lUHJvcHMgPSB7fTtcbiAgICAgICAgaWYgKHNpemUpIHtcbiAgICAgICAgICBjbG9uZVByb3BzLnNpemUgPSBzaXplO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNZW51SXRlbS50eXBlID09PSBFdWlDb250ZXh0TWVudUl0ZW0gPyAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KE1lbnVJdGVtLCBjbG9uZVByb3BzKSA6IE1lbnVJdGVtO1xuICAgICAgfSkgOiBjaGlsZHJlbjtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgcmVmOiB0aGlzLnBhbmVsUmVmLFxuICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBvbktleURvd246IHRoaXMub25LZXlEb3duLFxuICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgIG9uQW5pbWF0aW9uRW5kOiB0aGlzLm9uVHJhbnNpdGlvbkNvbXBsZXRlXG4gICAgICB9LCByZXN0KSwgcGFuZWxUaXRsZSwgX19fRW1vdGlvbkpTWChFdWlSZXNpemVPYnNlcnZlciwge1xuICAgICAgICBvblJlc2l6ZTogZnVuY3Rpb24gb25SZXNpemUoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMy51cGRhdGVIZWlnaHQoKTtcbiAgICAgICAgfVxuICAgICAgfSwgZnVuY3Rpb24gKHJlc2l6ZVJlZikge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgcmVmOiByZXNpemVSZWZcbiAgICAgICAgfSwgY29udGVudCk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFyIG5lZWRzVXBkYXRlID0gZmFsc2U7XG4gICAgICB2YXIgbmV4dFN0YXRlID0ge307XG5cbiAgICAgIC8vIENsZWFyIHJlZnMgdG8gbWVudUl0ZW1zIGlmIHdlJ3JlIGdldHRpbmcgbmV3IG9uZXMuXG4gICAgICBpZiAobmV4dFByb3BzLml0ZW1zICE9PSBwcmV2U3RhdGUucHJldlByb3BzLml0ZW1zKSB7XG4gICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgbmV4dFN0YXRlLm1lbnVJdGVtcyA9IFtdO1xuICAgICAgICBuZXh0U3RhdGUucHJldlByb3BzID0ge1xuICAgICAgICAgIGl0ZW1zOiBuZXh0UHJvcHMuaXRlbXNcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkc1VwZGF0ZSkge1xuICAgICAgICByZXR1cm4gbmV4dFN0YXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpQ29udGV4dE1lbnVQYW5lbENsYXNzLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGl0ZW1zOiBbXVxufSk7XG5FdWlDb250ZXh0TWVudVBhbmVsQ2xhc3MucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBEZXRlcm1pbmVzIHRoZSBpbml0aWFsbHkgZm9jdXNlZCBtZW51IGl0ZW0gZm9yIGtleWJvYXJkIGFuZCBzY3JlZW4gcmVhZGVyIHVzZXJzLlxuICAgICAgICpcbiAgICAgICAqIENhbiBiZSBzZXQgdG8gYC0xYCB0byBwcmV2ZW50IGF1dG9mb2N1cyAoYW4gdW5jb21tb24gY2FzZSB0aGF0IG11c3QgaGF2ZVxuICAgICAgICoga2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSBhY2NvdW50ZWQgZm9yIG1hbnVhbGx5IGlmIHVzZWQpXG4gICAgICAgKi9cbiAgaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGl0ZW1zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkKSxcbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uSGVpZ2h0Q2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25UcmFuc2l0aW9uQ29tcGxldGU6IFByb3BUeXBlcy5mdW5jLFxuICBvblVzZUtleWJvYXJkVG9OYXZpZ2F0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIHNob3dOZXh0UGFuZWw6IFByb3BUeXBlcy5mdW5jLFxuICBzaG93UHJldmlvdXNQYW5lbDogUHJvcFR5cGVzLmZ1bmMsXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcbiAgdHJhbnNpdGlvbkRpcmVjdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcIm5leHRcIiwgXCJwcmV2aW91c1wiXSksXG4gIHRyYW5zaXRpb25UeXBlOiBQcm9wVHlwZXMub25lT2YoW1wiaW5cIiwgXCJvdXRcIl0pLFxuICAvKipcbiAgICAgICAqIEFsdGVycyB0aGUgc2l6ZSBvZiB0aGUgaXRlbXMgYW5kIHRoZSB0aXRsZVxuICAgICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnlcbn07XG5leHBvcnQgdmFyIEV1aUNvbnRleHRNZW51UGFuZWwgPSB3aXRoRXVpU3R5bGVzTWVtb2l6ZXIoRXVpQ29udGV4dE1lbnVQYW5lbENsYXNzKTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaGFzUGFuZWxcIiwgXCJpY29uXCIsIFwiYnV0dG9uUmVmXCIsIFwiZGlzYWJsZWRcIiwgXCJsYXlvdXRBbGlnblwiLCBcInRvb2xUaXBDb250ZW50XCIsIFwidG9vbFRpcFByb3BzXCIsIFwiaHJlZlwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInNpemVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzLCBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIGNsb25lRWxlbWVudFdpdGhDc3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IGV1aUNvbnRleHRNZW51SXRlbVN0eWxlcyB9IGZyb20gJy4vY29udGV4dF9tZW51X2l0ZW0uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nXTtcbnZhciBsYXlvdXRBbGlnblRvQ2xhc3NOYW1lcyA9IHtcbiAgY2VudGVyOiBudWxsLFxuICB0b3A6ICdldWlDb250ZXh0TWVudV9faXRlbUxheW91dC0tdG9wJyxcbiAgYm90dG9tOiAnZXVpQ29udGV4dE1lbnVfX2l0ZW1MYXlvdXQtLWJvdHRvbSdcbn07XG5leHBvcnQgdmFyIExBWU9VVF9BTElHTiA9IGtleXNPZihsYXlvdXRBbGlnblRvQ2xhc3NOYW1lcyk7XG5leHBvcnQgdmFyIEV1aUNvbnRleHRNZW51SXRlbSA9IGZ1bmN0aW9uIEV1aUNvbnRleHRNZW51SXRlbShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgaGFzUGFuZWwgPSBfcmVmLmhhc1BhbmVsLFxuICAgIGljb24gPSBfcmVmLmljb24sXG4gICAgYnV0dG9uUmVmID0gX3JlZi5idXR0b25SZWYsXG4gICAgX2Rpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBfcmVmJGxheW91dEFsaWduID0gX3JlZi5sYXlvdXRBbGlnbixcbiAgICBsYXlvdXRBbGlnbiA9IF9yZWYkbGF5b3V0QWxpZ24gPT09IHZvaWQgMCA/ICdjZW50ZXInIDogX3JlZiRsYXlvdXRBbGlnbixcbiAgICB0b29sVGlwQ29udGVudCA9IF9yZWYudG9vbFRpcENvbnRlbnQsXG4gICAgdG9vbFRpcFByb3BzID0gX3JlZi50b29sVGlwUHJvcHMsXG4gICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICByZWwgPSBfcmVmLnJlbCxcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgZGlzYWJsZWQgPSBfZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbnRleHRNZW51SXRlbScsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlDb250ZXh0TWVudUl0ZW1TdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlDb250ZXh0TWVudUl0ZW0sIHN0eWxlcy5zaXplc1tzaXplXSwgc3R5bGVzLmxheW91dEFsaWduW2xheW91dEFsaWduXSwgZGlzYWJsZWQgJiYgc3R5bGVzLmRpc2FibGVkXTtcbiAgdmFyIGljb25JbnN0YW5jZSA9IGljb24gJiYgKHR5cGVvZiBpY29uID09PSAnc3RyaW5nJyA/IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IGljb24sXG4gICAgc2l6ZTogXCJtXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X19pY29uXCIsXG4gICAgY3NzOiBzdHlsZXMuZXVpQ29udGV4dE1lbnVfX2ljb24sXG4gICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcbiAgfSkgOlxuICAvLyBBc3N1bWUgaXQncyBhbHJlYWR5IGFuIGluc3RhbmNlIG9mIGFuIGljb24uXG4gIGNsb25lRWxlbWVudFdpdGhDc3MoaWNvbiwge1xuICAgIGNzczogc3R5bGVzLmV1aUNvbnRleHRNZW51X19pY29uXG4gIH0pKTtcbiAgdmFyIGFycm93ID0gaGFzUGFuZWwgJiYgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJhcnJvd1JpZ2h0XCIsXG4gICAgc2l6ZTogXCJtXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X19hcnJvd1wiLFxuICAgIGNzczogc3R5bGVzLmV1aUNvbnRleHRNZW51SXRlbV9fYXJyb3dcbiAgfSk7XG4gIHZhciB0ZXh0U3R5bGVzID0gW3N0eWxlcy50ZXh0LmV1aUNvbnRleHRNZW51SXRlbV9fdGV4dCwgc2l6ZSA9PT0gJ3MnICYmIHN0eWxlcy50ZXh0LnNdO1xuICB2YXIgYnV0dG9uQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIGljb25JbnN0YW5jZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudUl0ZW1fX3RleHRcIixcbiAgICBjc3M6IHRleHRTdHlsZXNcbiAgfSwgY2hpbGRyZW4pLCBhcnJvdyk7XG4gIHZhciBidXR0b247XG4gIC8vIDxhPiBlbGVtZW50cyBkb24ndCByZXNwZWN0IHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZS4gU28gaWYgd2UncmUgZGlzYWJsZWQsIHdlJ2xsIGp1c3QgcHJldGVuZFxuICAvLyB0aGlzIGlzIGEgYnV0dG9uIGFuZCBwaWdneWJhY2sgb2ZmIGl0cyBkaXNhYmxlZCBzdHlsZXMuXG4gIGlmIChocmVmICYmICFkaXNhYmxlZCkge1xuICAgIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgICBidXR0b24gPSBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgYnV0dG9uQ29udGVudCk7XG4gIH0gZWxzZSBpZiAoaHJlZiB8fCByZXN0Lm9uQ2xpY2sgfHwgdG9vbFRpcENvbnRlbnQpIHtcbiAgICBidXR0b24gPSBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgIHJlZjogYnV0dG9uUmVmXG4gICAgfSwgcmVzdCksIGJ1dHRvbkNvbnRlbnQpO1xuICB9IGVsc2Uge1xuICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICByZWY6IGJ1dHRvblJlZlxuICAgIH0sIHJlc3QpLCBidXR0b25Db250ZW50KTtcbiAgfVxuICBpZiAodG9vbFRpcENvbnRlbnQpIHtcbiAgICB2YXIgYW5jaG9yQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aS1kaXNwbGF5QmxvY2snLCB0b29sVGlwUHJvcHMgPT09IG51bGwgfHwgdG9vbFRpcFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0b29sVGlwUHJvcHMuYW5jaG9yQ2xhc3NOYW1lKTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCBfZXh0ZW5kcyh7XG4gICAgICBwb3NpdGlvbjogXCJyaWdodFwiXG4gICAgfSwgdG9vbFRpcFByb3BzLCB7XG4gICAgICBhbmNob3JDbGFzc05hbWU6IGFuY2hvckNsYXNzZXMsXG4gICAgICBjb250ZW50OiB0b29sVGlwQ29udGVudFxuICAgIH0pLCBidXR0b24pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidXR0b247XG4gIH1cbn07XG5FdWlDb250ZXh0TWVudUl0ZW0ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcbiAgaGFzUGFuZWw6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFJlcXVpcmVkIGlmIHVzaW5nIGEgdG9vbHRpcC4gQWRkIGFuIG9wdGlvbmFsIHRvb2x0aXAgb24gaG92ZXJcbiAgICAgKi9cbiAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBPcHRpb25hbCBjb25maWd1cmF0aW9uIHRvIHBhc3MgdG8gdGhlIHVuZGVybHlpbmcgW0V1aVRvb2xUaXBdKC8jL2Rpc3BsYXkvdG9vbHRpcCkuXG4gICAgICogQWNjZXB0cyBhbnkgcHJvcCB0aGF0IEV1aVRvb2xUaXAgZG9lcywgZXhjZXB0IGZvciBgY29udGVudGAgYW5kIGBjaGlsZHJlbmAuXG4gICAgICovXG4gIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIEhvdyB0byBhbGlnbiBpY29uIHdpdGggY29udGVudCBvZiBidXR0b25cbiAgICAgKi9cbiAgbGF5b3V0QWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJjZW50ZXJcIiwgXCJ0b3BcIiwgXCJib3R0b21cIl0pLFxuICAvKipcbiAgICAgKiBSZWR1Y2UgdGhlIHNpemUgdG8gYHNgIHdoZW4gaW4gbmVlZCBvZiBhIG1vcmUgY29tcHJlc3NlZCBtZW51XG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MsIGV1aUZvbnRTaXplIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiNGFrNHM4LWV1aUNvbnRleHRNZW51SXRlbV9fYXJyb3dcIixcbiAgc3R5bGVzOiBcImFsaWduLXNlbGY6ZmxleC1lbmQ7bGFiZWw6ZXVpQ29udGV4dE1lbnVJdGVtX19hcnJvdztcIlxufSA6IHtcbiAgbmFtZTogXCI0YWs0czgtZXVpQ29udGV4dE1lbnVJdGVtX19hcnJvd1wiLFxuICBzdHlsZXM6IFwiYWxpZ24tc2VsZjpmbGV4LWVuZDtsYWJlbDpldWlDb250ZXh0TWVudUl0ZW1fX2Fycm93O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwibzFnZzIyLWV1aUNvbnRleHRNZW51SXRlbV9fdGV4dFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO2xhYmVsOmV1aUNvbnRleHRNZW51SXRlbV9fdGV4dDtcIlxufSA6IHtcbiAgbmFtZTogXCJvMWdnMjItZXVpQ29udGV4dE1lbnVJdGVtX190ZXh0XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47bGFiZWw6ZXVpQ29udGV4dE1lbnVJdGVtX190ZXh0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWx6b2hjcy1ldWlDb250ZXh0TWVudV9faWNvblwiLFxuICBzdHlsZXM6IFwiZmxleC1zaHJpbms6MDtsYWJlbDpldWlDb250ZXh0TWVudV9faWNvbjtcIlxufSA6IHtcbiAgbmFtZTogXCIxbHpvaGNzLWV1aUNvbnRleHRNZW51X19pY29uXCIsXG4gIHN0eWxlczogXCJmbGV4LXNocmluazowO2xhYmVsOmV1aUNvbnRleHRNZW51X19pY29uO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMW1zYWV0Mi1ib3R0b21cIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmZsZXgtZW5kO2xhYmVsOmJvdHRvbTtcIlxufSA6IHtcbiAgbmFtZTogXCIxbXNhZXQyLWJvdHRvbVwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6ZmxleC1lbmQ7bGFiZWw6Ym90dG9tO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWdud2J2ZC10b3BcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bGFiZWw6dG9wO1wiXG59IDoge1xuICBuYW1lOiBcIjFnbndidmQtdG9wXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2xhYmVsOnRvcDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY2ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjgzOTFkYi1jZW50ZXJcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmNlbnRlcjtsYWJlbDpjZW50ZXI7XCJcbn0gOiB7XG4gIG5hbWU6IFwiODM5MWRiLWNlbnRlclwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6Y2VudGVyO2xhYmVsOmNlbnRlcjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlDb250ZXh0TWVudUl0ZW1TdHlsZXMgPSBmdW5jdGlvbiBldWlDb250ZXh0TWVudUl0ZW1TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlDb250ZXh0TWVudUl0ZW06IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmZsZXg7Z2FwOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiO1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIFwiLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiIGNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7b3V0bGluZS1vZmZzZXQ6LVwiLCBldWlUaGVtZS5mb2N1cy53aWR0aCwgXCI7Jjp3aGVyZShhLCBidXR0b24pOm5vdCg6ZGlzYWJsZWQpeyY6aG92ZXIsJjpmb2N1c3t0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30mOmZvY3Vze2JhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmZvY3VzLmJhY2tncm91bmRDb2xvciwgXCI7fX07bGFiZWw6ZXVpQ29udGV4dE1lbnVJdGVtO1wiKSxcbiAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0LCBcIjtjdXJzb3I6ZGVmYXVsdDs7bGFiZWw6ZGlzYWJsZWQ7XCIpLFxuICAgIGxheW91dEFsaWduOiB7XG4gICAgICBjZW50ZXI6IF9yZWY2LFxuICAgICAgdG9wOiBfcmVmNSxcbiAgICAgIGJvdHRvbTogX3JlZjRcbiAgICB9LFxuICAgIHNpemVzOiB7XG4gICAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwicGFkZGluZzpcIiwgZXVpVGhlbWUuc2l6ZS5tLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgICBzOiAvKiNfX1BVUkVfXyovY3NzKFwicGFkZGluZzpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6cztcIilcbiAgICB9LFxuICAgIC8vIENoaWxkcmVuXG4gICAgZXVpQ29udGV4dE1lbnVfX2ljb246IF9yZWYzLFxuICAgIHRleHQ6IHtcbiAgICAgIGV1aUNvbnRleHRNZW51SXRlbV9fdGV4dDogX3JlZjIsXG4gICAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7O2xhYmVsOnM7XCIpXG4gICAgfSxcbiAgICBldWlDb250ZXh0TWVudUl0ZW1fX2Fycm93OiBfcmVmXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBtYXRoV2l0aFVuaXRzLCBldWlDYW5BbmltYXRlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlDb250ZXh0TWVudVZhcmlhYmxlcyA9IGZ1bmN0aW9uIGV1aUNvbnRleHRNZW51VmFyaWFibGVzKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBwYW5lbFdpZHRoOiBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLnNpemUuYmFzZSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICogMTY7XG4gICAgfSlcbiAgfTtcbn07XG5leHBvcnQgdmFyIGV1aUNvbnRleHRNZW51U3R5bGVzID0gZnVuY3Rpb24gZXVpQ29udGV4dE1lbnVTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIF9ldWlDb250ZXh0TWVudVZhcmlhYiA9IGV1aUNvbnRleHRNZW51VmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgcGFuZWxXaWR0aCA9IF9ldWlDb250ZXh0TWVudVZhcmlhYi5wYW5lbFdpZHRoO1xuICByZXR1cm4ge1xuICAgIGV1aUNvbnRleHRNZW51OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgcGFuZWxXaWR0aCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIiBwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIFwiO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOmhlaWdodCBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCI7fTtsYWJlbDpldWlDb250ZXh0TWVudTtcIilcbiAgfTtcbn07IiwgInZhciBfdGVtcGxhdGVPYmplY3QsIF90ZW1wbGF0ZU9iamVjdDIsIF90ZW1wbGF0ZU9iamVjdDMsIF90ZW1wbGF0ZU9iamVjdDQ7XG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKGUsIHQpIHsgcmV0dXJuIHQgfHwgKHQgPSBlLnNsaWNlKDApKSwgT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZSh0KSB9IH0pKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBldWlDYW50QW5pbWF0ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVRpdGxlIH0gZnJvbSAnLi4vdGl0bGUvdGl0bGUuc3R5bGVzJztcbmltcG9ydCB7IGV1aUNvbnRleHRNZW51VmFyaWFibGVzIH0gZnJvbSAnLi9jb250ZXh0X21lbnUuc3R5bGVzJztcbmV4cG9ydCB2YXIgZXVpQ29udGV4dE1lbnVQYW5lbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNvbnRleHRNZW51UGFuZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIF9ldWlDb250ZXh0TWVudVZhcmlhYiA9IGV1aUNvbnRleHRNZW51VmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgcGFuZWxXaWR0aCA9IF9ldWlDb250ZXh0TWVudVZhcmlhYi5wYW5lbFdpZHRoO1xuICB2YXIgYW5pbWF0aW9ucyA9IHtcbiAgICB0cmFuc2l0aW9uaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwicG9pbnRlci1ldmVudHM6bm9uZTthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzO2FuaW1hdGlvbi1kdXJhdGlvbjpcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLm5vcm1hbCwgXCI7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO1wiLCBldWlDYW50QW5pbWF0ZSwgXCJ7YW5pbWF0aW9uLWR1cmF0aW9uOjBzO307bGFiZWw6dHJhbnNpdGlvbmluZztcIiksXG4gICAgaW5MZWZ0OiBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICAgIDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKFwiLCBcIik7IH1cXG4gICAgICAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9XFxuICAgIFwiXSkpLCBwYW5lbFdpZHRoKSxcbiAgICBvdXRMZWZ0OiBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0MiB8fCAoX3RlbXBsYXRlT2JqZWN0MiA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgICAgMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH1cXG4gICAgICAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC1cIiwgXCIpOyB9XFxuICAgIFwiXSkpLCBwYW5lbFdpZHRoKSxcbiAgICBpblJpZ2h0OiBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0MyB8fCAoX3RlbXBsYXRlT2JqZWN0MyA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgICAgMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLVwiLCBcIik7IH1cXG4gICAgICAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9XFxuICAgIFwiXSkpLCBwYW5lbFdpZHRoKSxcbiAgICBvdXRSaWdodDoga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdDQgfHwgKF90ZW1wbGF0ZU9iamVjdDQgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICAgIDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9XFxuICAgICAgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWChcIiwgXCIpOyB9XFxuICAgIFwiXSkpLCBwYW5lbFdpZHRoKVxuICB9O1xuICByZXR1cm4ge1xuICAgIGV1aUNvbnRleHRNZW51UGFuZWw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiB2aXNpYmlsaXR5OnZpc2libGU7b3V0bGluZS1vZmZzZXQ6LVwiLCBldWlUaGVtZS5mb2N1cy53aWR0aCwgXCI7Jjpmb2N1c3tvdXRsaW5lOm5vbmU7fTtsYWJlbDpldWlDb250ZXh0TWVudVBhbmVsO1wiKSxcbiAgICAvLyBQYW5lbCBhbmltYXRpb25zXG4gICAgbmV4dDoge1xuICAgICAgaW46IC8qI19fUFVSRV9fKi9jc3MoYW5pbWF0aW9ucy50cmFuc2l0aW9uaW5nLCBcIiBhbmltYXRpb24tbmFtZTpcIiwgYW5pbWF0aW9ucy5pbkxlZnQsIFwiOztsYWJlbDppbjtcIiksXG4gICAgICBvdXQ6IC8qI19fUFVSRV9fKi9jc3MoYW5pbWF0aW9ucy50cmFuc2l0aW9uaW5nLCBcIiBhbmltYXRpb24tbmFtZTpcIiwgYW5pbWF0aW9ucy5vdXRMZWZ0LCBcIjs7bGFiZWw6b3V0O1wiKVxuICAgIH0sXG4gICAgcHJldmlvdXM6IHtcbiAgICAgIGluOiAvKiNfX1BVUkVfXyovY3NzKGFuaW1hdGlvbnMudHJhbnNpdGlvbmluZywgXCIgYW5pbWF0aW9uLW5hbWU6XCIsIGFuaW1hdGlvbnMuaW5SaWdodCwgXCI7O2xhYmVsOmluO1wiKSxcbiAgICAgIG91dDogLyojX19QVVJFX18qL2NzcyhhbmltYXRpb25zLnRyYW5zaXRpb25pbmcsIFwiIGFuaW1hdGlvbi1uYW1lOlwiLCBhbmltYXRpb25zLm91dFJpZ2h0LCBcIjs7bGFiZWw6b3V0O1wiKVxuICAgIH0sXG4gICAgLy8gQ2hpbGRyZW5cbiAgICBldWlDb250ZXh0TWVudVBhbmVsX190aXRsZTogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHMnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2JvcmRlci1ib3R0b20nLCBldWlUaGVtZS5ib3JkZXIudGhpbiksIFwiICY6ZW5hYmxlZDpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnVuc2V0O307bGFiZWw6ZXVpQ29udGV4dE1lbnVQYW5lbF9fdGl0bGU7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wibGFiZWxcIiwgXCJpZFwiLCBcImNoZWNrZWRcIiwgXCJkaXNhYmxlZFwiLCBcImNvbXByZXNzZWRcIiwgXCJtaW5pXCIsIFwib25DaGFuZ2VcIiwgXCJjbGFzc05hbWVcIiwgXCJzaG93TGFiZWxcIiwgXCJ0eXBlXCIsIFwibGFiZWxQcm9wc1wiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlR2VuZXJhdGVkSHRtbElkLCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IGV1aVN3aXRjaFN0eWxlcyB9IGZyb20gJy4vc3dpdGNoLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTd2l0Y2ggPSBmdW5jdGlvbiBFdWlTd2l0Y2goX3JlZikge1xuICB2YXIgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgIGlkID0gX3JlZi5pZCxcbiAgICBjaGVja2VkID0gX3JlZi5jaGVja2VkLFxuICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBjb21wcmVzc2VkID0gX3JlZi5jb21wcmVzc2VkLFxuICAgIG1pbmkgPSBfcmVmLm1pbmksXG4gICAgb25DaGFuZ2UgPSBfcmVmLm9uQ2hhbmdlLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkc2hvd0xhYmVsID0gX3JlZi5zaG93TGFiZWwsXG4gICAgc2hvd0xhYmVsID0gX3JlZiRzaG93TGFiZWwgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHNob3dMYWJlbCxcbiAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgbGFiZWxQcm9wcyA9IF9yZWYubGFiZWxQcm9wcyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzd2l0Y2hJZCA9IHVzZUdlbmVyYXRlZEh0bWxJZCh7XG4gICAgY29uZGl0aW9uYWxJZDogaWRcbiAgfSk7XG4gIHZhciBsYWJlbElkID0gdXNlR2VuZXJhdGVkSHRtbElkKHtcbiAgICBjb25kaXRpb25hbElkOiBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuaWRcbiAgfSk7XG4gIHZhciBvbkNsaWNrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGV2ZW50ID0gZTtcbiAgICBldmVudC50YXJnZXQuY2hlY2tlZCA9ICFjaGVja2VkO1xuICAgIG9uQ2hhbmdlKGV2ZW50KTtcbiAgfSwgW2NoZWNrZWQsIGRpc2FibGVkLCBvbkNoYW5nZV0pO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVN3aXRjaCcsIGNsYXNzTmFtZSk7XG4gIHZhciBsYWJlbENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTd2l0Y2hfX2xhYmVsJywgbGFiZWxQcm9wcyA9PT0gbnVsbCB8fCBsYWJlbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYWJlbFByb3BzLmNsYXNzTmFtZSk7XG4gIGlmIChzaG93TGFiZWwgPT09IGZhbHNlICYmIHR5cGVvZiBsYWJlbCAhPT0gJ3N0cmluZycpIHtcbiAgICBjb25zb2xlLndhcm4oJ0V1aVN3aXRjaCBgbGFiZWxgIG11c3QgYmUgYSBzdHJpbmcgd2hlbiBgc2hvd0xhYmVsYCBpcyBmYWxzZS4nKTtcbiAgfVxuICB2YXIgc2l6ZSA9IG1pbmkgPyAnbWluaScgOiBjb21wcmVzc2VkID8gJ2NvbXByZXNzZWQnIDogJ3VuY29tcHJlc3NlZCc7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlTd2l0Y2hTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlTd2l0Y2gsIGRpc2FibGVkID8gc3R5bGVzLmRpc2FibGVkIDogc3R5bGVzLmVuYWJsZWRdO1xuICB2YXIgYnV0dG9uU3R5bGVzID0gW3N0eWxlcy5idXR0b24uZXVpU3dpdGNoX19idXR0b24sIHN0eWxlcy5idXR0b25bc2l6ZV1dO1xuICB2YXIgYm9keVN0eWxlcyA9IFtzdHlsZXMuYm9keS5ldWlTd2l0Y2hfX2JvZHksIGRpc2FibGVkID8gc3R5bGVzLmJvZHkuZGlzYWJsZWRbc2l6ZV0gOiBjaGVja2VkID8gc3R5bGVzLmJvZHkub24gOiBzdHlsZXMuYm9keS5vZmZdO1xuICB2YXIgaWNvbnNTdHlsZXMgPSBbc3R5bGVzLmljb25zLmV1aVN3aXRjaF9faWNvbnMsIGNoZWNrZWQgPyBzdHlsZXMuaWNvbnMub24gOiBzdHlsZXMuaWNvbnMub2ZmLCBkaXNhYmxlZCA/IHN0eWxlcy5pY29ucy5kaXNhYmxlZCA6IHN0eWxlcy5pY29ucy5lbmFibGVkXTtcbiAgdmFyIHRodW1iU3R5bGVzID0gW3N0eWxlcy50aHVtYi5ldWlTd2l0Y2hfX3RodW1iLCBjaGVja2VkID8gc3R5bGVzLnRodW1iLm9uW3NpemVdIDogc3R5bGVzLnRodW1iLm9mZl0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShkaXNhYmxlZCA/IFtzdHlsZXMudGh1bWIuZGlzYWJsZWQuZGlzYWJsZWQsIHN0eWxlcy50aHVtYi5kaXNhYmxlZFtzaXplXV0gOiBbc3R5bGVzLnRodW1iLmVuYWJsZWQuZW5hYmxlZCwgc3R5bGVzLnRodW1iLmVuYWJsZWRbc2l6ZV1dKSk7XG4gIHZhciBsYWJlbFN0eWxlcyA9IFtzdHlsZXMubGFiZWwuZXVpU3dpdGNoX19sYWJlbCwgc3R5bGVzLmxhYmVsW3NpemVdLCBkaXNhYmxlZCAmJiBzdHlsZXMubGFiZWwuZGlzYWJsZWQsIGxhYmVsUHJvcHMgPT09IG51bGwgfHwgbGFiZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFiZWxQcm9wcy5jc3NdO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIGlkOiBzd2l0Y2hJZCxcbiAgICBcImFyaWEtY2hlY2tlZFwiOiBjaGVja2VkIHx8IGZhbHNlLFxuICAgIGNzczogYnV0dG9uU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2J1dHRvblwiLFxuICAgIHJvbGU6IFwic3dpdGNoXCIsXG4gICAgdHlwZTogdHlwZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBcImFyaWEtbGFiZWxcIjogc2hvd0xhYmVsID8gdW5kZWZpbmVkIDogbGFiZWwsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogc2hvd0xhYmVsID8gbGFiZWxJZCA6IHVuZGVmaW5lZFxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNzczogYm9keVN0eWxlcyxcbiAgICBjbGFzc05hbWU6IFwiZXVpU3dpdGNoX19ib2R5XCJcbiAgfSwgIShjb21wcmVzc2VkIHx8IG1pbmkpICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjc3M6IGljb25zU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2ljb25zXCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJjaGVja1wiLFxuICAgIHNpemU6IFwibVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICB0eXBlOiBcImNyb3NzXCIsXG4gICAgc2l6ZTogXCJtXCJcbiAgfSkpKSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNzczogdGh1bWJTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBcImV1aVN3aXRjaF9fdGh1bWJcIlxuICB9KSksIHNob3dMYWJlbCAmJlxuICAvLyA8YnV0dG9uPiArIDxsYWJlbD4gaGFzIHBvb3Igc2NyZWVuIHJlYWRlciBzdXBwb3J0LlxuICAvLyBDbGljayBoYW5kbGVyIGFkZGVkIHRvIHNpbXVsYXRlIG5hdHVyYWwsIHNlY29uZGFyeSA8bGFiZWw+IGludGVyYWN0aXZpdHkuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS1lbGVtZW50LWludGVyYWN0aW9uc1xuICBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7fSwgbGFiZWxQcm9wcywge1xuICAgIGNzczogbGFiZWxTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBsYWJlbENsYXNzZXMsXG4gICAgaWQ6IGxhYmVsSWQsXG4gICAgb25DbGljazogb25DbGlja1xuICB9KSwgbGFiZWwpKTtcbn07XG5FdWlTd2l0Y2gucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBXaGV0aGVyIHRvIHJlbmRlciB0aGUgdGV4dCBsYWJlbFxuICAgICAgICovXG4gIHNob3dMYWJlbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogTXVzdCBiZSBhIHN0cmluZyBpZiBgc2hvd0xhYmVsYCBwcm9wIGlzIGZhbHNlXG4gICAgICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogQ29tcHJlc3NlZCBzd2l0Y2hlcyBhcmUgc21hbGxlciBhbmQgY29udGFpbiBubyBpY29uIHNpZ25pZmllcnNcbiAgICAgICAqL1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBsYWJlbCdzIGA8c3BhbiAvPmBcbiAgICAgICAqL1xuICBsYWJlbFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICAvKipcbiAgICAgICAqIE1pbmkgc3R5bGluZyBpcyBzaW1pbGFyIHRvIGNvbXByZXNzZWQsIGJ1dCBldmVuIHNtYWxsZXIuXG4gICAgICAgKiBJdCdzIHVuZG9jdW1lbnRlZCBiZWNhdXNlIGl0IGhhcyB2ZXJ5IHNwZWNpZmljIHVzZXMuXG4gICAgICAgKi9cbiAgbWluaTogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHRpbnQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlLCBldWlGb2N1c1JpbmcsIGV1aUZvbnRTaXplLCBsb2dpY2FsQ1NTLCBsb2dpY2FsU2l6ZUNTUywgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aUZvcm1DdXN0b21Db250cm9sVmFyaWFibGVzIH0gZnJvbSAnLi4vZm9ybS5zdHlsZXMnO1xudmFyIGV1aVN3aXRjaFZhcnMgPSBmdW5jdGlvbiBldWlTd2l0Y2hWYXJzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBmb3JtVmFycyA9IGV1aUZvcm1DdXN0b21Db250cm9sVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBjb2xvcnMgPSB7XG4gICAgb246IGZvcm1WYXJzLmNvbG9ycy5zZWxlY3RlZCxcbiAgICBvZmY6IGZvcm1WYXJzLmNvbG9ycy51bnNlbGVjdGVkQm9yZGVyLFxuICAgIGRpc2FibGVkOiBmb3JtVmFycy5jb2xvcnMuZGlzYWJsZWQsXG4gICAgdGh1bWI6IGZvcm1WYXJzLmNvbG9ycy5zZWxlY3RlZEljb24sXG4gICAgdGh1bWJCb3JkZXI6IGZvcm1WYXJzLmNvbG9ycy51bnNlbGVjdGVkQm9yZGVyLFxuICAgIHRodW1iQm9yZGVyRGlzYWJsZWQ6IGZvcm1WYXJzLmNvbG9ycy51bnNlbGVjdGVkQm9yZGVyXG4gIH07XG4gIHZhciBzaXplcyA9IHtcbiAgICB1bmNvbXByZXNzZWQ6IHtcbiAgICAgIGhlaWdodDogbWF0aFdpdGhVbml0cyhldWlUaGVtZS5zaXplLmJhc2UsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICogMS4yNTtcbiAgICAgIH0pLFxuICAgICAgd2lkdGg6IG1hdGhXaXRoVW5pdHMoW2V1aVRoZW1lLnNpemUueHhsLCBldWlUaGVtZS5zaXplLnhzXSwgZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgcmV0dXJuIHggKyB5O1xuICAgICAgfSksXG4gICAgICB0aHVtYlNjYWxlczoge1xuICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgICBob3ZlcjogMS4wNSxcbiAgICAgICAgYWN0aXZlOiAwLjlcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbXByZXNzZWQ6IHtcbiAgICAgIGhlaWdodDogZXVpVGhlbWUuc2l6ZS5iYXNlLFxuICAgICAgd2lkdGg6IG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuc2l6ZS5iYXNlLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAqIDEuNzU7XG4gICAgICB9KSxcbiAgICAgIHRodW1iU2NhbGVzOiB7XG4gICAgICAgIGRlZmF1bHQ6IDAuOSxcbiAgICAgICAgaG92ZXI6IDAuOTUsXG4gICAgICAgIGFjdGl2ZTogMC44XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXQgbWluaSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogbWF0aFdpdGhVbml0cyh0aGlzLnVuY29tcHJlc3NlZC5oZWlnaHQsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIHggLyAyO1xuICAgICAgICB9KSxcbiAgICAgICAgd2lkdGg6IG1hdGhXaXRoVW5pdHModGhpcy51bmNvbXByZXNzZWQud2lkdGgsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIHggLyAyO1xuICAgICAgICB9KSxcbiAgICAgICAgdGh1bWJTY2FsZXM6IHtcbiAgICAgICAgICBkZWZhdWx0OiAwLjgsXG4gICAgICAgICAgaG92ZXI6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhY3RpdmU6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgdmFyIGFuaW1hdGlvbiA9IHtcbiAgICBzcGVlZDogZXVpVGhlbWUuYW5pbWF0aW9uLm5vcm1hbCxcbiAgICBlYXNpbmc6IGV1aVRoZW1lLmFuaW1hdGlvbi5ib3VuY2VcbiAgfTtcbiAgdmFyIGxhYmVsID0ge1xuICAgIGRpc2FibGVkOiBmb3JtVmFycy5jb2xvcnMuZGlzYWJsZWRMYWJlbCxcbiAgICBnYXA6IGZvcm1WYXJzLnNpemVzLmxhYmVsR2FwXG4gIH07XG4gIHJldHVybiB7XG4gICAgc2l6ZXM6IHNpemVzLFxuICAgIGNvbG9yczogY29sb3JzLFxuICAgIGFuaW1hdGlvbjogYW5pbWF0aW9uLFxuICAgIGxhYmVsOiBsYWJlbFxuICB9O1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJiODZwbnctZGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImN1cnNvcjpub3QtYWxsb3dlZDtsYWJlbDpkaXNhYmxlZDtcIlxufSA6IHtcbiAgbmFtZTogXCJiODZwbnctZGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImN1cnNvcjpub3QtYWxsb3dlZDtsYWJlbDpkaXNhYmxlZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImVnNjhwcC1ldWlTd2l0Y2hcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDsvKiBSZXF1aXJlZCBmb3IgaW5saW5lLWZsZXggQ1NTIHRvIG5vdCByZW5kZXIgYW4gZXh0cmEgMi0zcHggb2Ygc3RydXQgaGVpZ2h0XFxuICAgICAgICogQHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjc1MzY0NjEvNDI5NDQ2MiAqL3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtsYWJlbDpldWlTd2l0Y2g7XCJcbn0gOiB7XG4gIG5hbWU6IFwiZWc2OHBwLWV1aVN3aXRjaFwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0Oy8qIFJlcXVpcmVkIGZvciBpbmxpbmUtZmxleCBDU1MgdG8gbm90IHJlbmRlciBhbiBleHRyYSAyLTNweCBvZiBzdHJ1dCBoZWlnaHRcXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNzUzNjQ2MS80Mjk0NDYyICovdmVydGljYWwtYWxpZ246bWlkZGxlO2xhYmVsOmV1aVN3aXRjaDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlTd2l0Y2hTdHlsZXMgPSBmdW5jdGlvbiBldWlTd2l0Y2hTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBzd2l0Y2hWYXJzID0gZXVpU3dpdGNoVmFycyhldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIGV1aVN3aXRjaDogX3JlZjMsXG4gICAgLy8gU2tpcCBjc3NgYCB0byBhdm9pZCBnZW5lcmF0aW5nIGFuIGV4dHJhIEVtb3Rpb24gY2xhc3NOYW1lXG4gICAgZW5hYmxlZDogXCJcXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIFwiLFxuICAgIGRpc2FibGVkOiBfcmVmMixcbiAgICBidXR0b246IGJ1dHRvblN0eWxlcyhldWlUaGVtZUNvbnRleHQsIHN3aXRjaFZhcnMpLFxuICAgIC8vIFRoZSB0cmFjayBib2R5IG11c3QgYmUgc2VwYXJhdGUgZnJvbSB0aGUgYnV0dG9uIHdyYXBwZXIsIGJlY2F1c2UgdGhlXG4gICAgLy8gaWNvbnMgaGF2ZSB0aGVpciBvdmVyZmxvdyBoaWRkZW4gb3V0c2lkZSB0aGUgYnV0dG9uLCBidXQgdGhlIHRodW1iIGRvZXNuJ3RcbiAgICBib2R5OiBib2R5U3R5bGVzKGV1aVRoZW1lQ29udGV4dCwgc3dpdGNoVmFycyksXG4gICAgaWNvbnM6IGljb25TdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBzd2l0Y2hWYXJzKSxcbiAgICB0aHVtYjogdGh1bWJTdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBzd2l0Y2hWYXJzKSxcbiAgICBsYWJlbDogbGFiZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBzd2l0Y2hWYXJzKVxuICB9O1xufTtcbnZhciBidXR0b25TdHlsZXMgPSBmdW5jdGlvbiBidXR0b25TdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBzd2l0Y2hWYXJzKSB7XG4gIHZhciBfc3dpdGNoVmFycyRzaXplcyA9IHN3aXRjaFZhcnMuc2l6ZXMsXG4gICAgdW5jb21wcmVzc2VkID0gX3N3aXRjaFZhcnMkc2l6ZXMudW5jb21wcmVzc2VkLFxuICAgIGNvbXByZXNzZWQgPSBfc3dpdGNoVmFycyRzaXplcy5jb21wcmVzc2VkLFxuICAgIG1pbmkgPSBfc3dpdGNoVmFycyRzaXplcy5taW5pO1xuICByZXR1cm4ge1xuICAgIGV1aVN3aXRjaF9fYnV0dG9uOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1zaHJpbms6MDtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjppbmhlcml0O1wiLCBldWlGb2N1c1JpbmcoZXVpVGhlbWVDb250ZXh0LCAnb3V0c2V0JyksIFwiOztsYWJlbDpldWlTd2l0Y2hfX2J1dHRvbjtcIiksXG4gICAgLy8gU2tpcCBjc3NgYCB0byBhdm9pZCBnZW5lcmF0aW5nIGFuIEVtb3Rpb24gY2xhc3NOYW1lXG4gICAgdW5jb21wcmVzc2VkOiBcIlxcbiAgICAgIFwiLmNvbmNhdChsb2dpY2FsU2l6ZUNTUyh1bmNvbXByZXNzZWQud2lkdGgsIHVuY29tcHJlc3NlZC5oZWlnaHQpLCBcIlxcbiAgICAgIGJvcmRlci1yYWRpdXM6IFwiKS5jb25jYXQodW5jb21wcmVzc2VkLmhlaWdodCwgXCI7XFxuICAgIFwiKSxcbiAgICBjb21wcmVzc2VkOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGNvbXByZXNzZWQud2lkdGgsIGNvbXByZXNzZWQuaGVpZ2h0KSwgXCIgYm9yZGVyLXJhZGl1czpcIiwgY29tcHJlc3NlZC5oZWlnaHQsIFwiOztsYWJlbDpjb21wcmVzc2VkO1wiKSxcbiAgICBtaW5pOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKG1pbmkud2lkdGgsIG1pbmkuaGVpZ2h0KSwgXCIgYm9yZGVyLXJhZGl1czpcIiwgbWluaS5oZWlnaHQsIFwiOztsYWJlbDptaW5pO1wiKVxuICB9O1xufTtcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE5Y3d1NnYtZXVpU3dpdGNoX19ib2R5XCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO292ZXJmbG93OmhpZGRlbjtib3JkZXItcmFkaXVzOmluaGVyaXQ7cG9pbnRlci1ldmVudHM6bm9uZTtsYWJlbDpldWlTd2l0Y2hfX2JvZHk7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTljd3U2di1ldWlTd2l0Y2hfX2JvZHlcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO2xhYmVsOmV1aVN3aXRjaF9fYm9keTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIGJvZHlTdHlsZXMgPSBmdW5jdGlvbiBib2R5U3R5bGVzKF9yZWY0LCBfcmVmNSkge1xuICB2YXIgY29sb3JNb2RlID0gX3JlZjQuY29sb3JNb2RlO1xuICB2YXIgY29sb3JzID0gX3JlZjUuY29sb3JzO1xuICAvLyBUaGlzIGlzIHByb2JhYmx5IHZlcnkgZXh0cmEsIGJ1dCB0aGUgdmlzdWFsIHdlaWdodCBvZiB0aGUgZGVmYXVsdFxuICAvLyBkaXNhYmxlZCBjdXN0b20gY29udHJvbCBmZWVscyBkaWZmZXJlbnQgaW4gbGlnaHQgbW9kZSBkZXBlbmRpbmdcbiAgLy8gb24gdGhlIHNpemUgb2YgdGhlIHN3aXRjaCwgc28gSSdtIHRpbnRpbmcgaXQgYmFzZWQgb24gdGhhdC5cbiAgLy8gR290dGEganVzdGlmeSBteSBzdHVwaWRseSBleHBlbnNpdmUgYXJ0IGRlZ3JlZSFcbiAgdmFyIF9jYWxjdWxhdGVEaXNhYmxlZENvbG9yID0gZnVuY3Rpb24gX2NhbGN1bGF0ZURpc2FibGVkQ29sb3IodGludEFtb3VudCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3NzKFwibGFiZWw6ZGlzYWJsZWQ7YmFja2dyb3VuZC1jb2xvcjpcIiwgY29sb3JNb2RlID09PSAnREFSSycgPyBjb2xvcnMuZGlzYWJsZWQgOiB0aW50KGNvbG9ycy5kaXNhYmxlZCwgdGludEFtb3VudCksIFwiO1wiKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBldWlTd2l0Y2hfX2JvZHk6IF9yZWYsXG4gICAgb246IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCBjb2xvcnMub24sIFwiOztsYWJlbDpvbjtcIiksXG4gICAgb2ZmOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgY29sb3JzLm9mZiwgXCI7O2xhYmVsOm9mZjtcIiksXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIHVuY29tcHJlc3NlZDogX2NhbGN1bGF0ZURpc2FibGVkQ29sb3IoMC41KSxcbiAgICAgIGNvbXByZXNzZWQ6IF9jYWxjdWxhdGVEaXNhYmxlZENvbG9yKDAuMjUpLFxuICAgICAgbWluaTogX2NhbGN1bGF0ZURpc2FibGVkQ29sb3IoMClcbiAgICB9XG4gIH07XG59O1xudmFyIGljb25TdHlsZXMgPSBmdW5jdGlvbiBpY29uU3R5bGVzKF9yZWY2LCBfcmVmNykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmNi5ldWlUaGVtZTtcbiAgdmFyIGNvbG9ycyA9IF9yZWY3LmNvbG9ycyxcbiAgICBhbmltYXRpb24gPSBfcmVmNy5hbmltYXRpb247XG4gIHJldHVybiB7XG4gICAgZXVpU3dpdGNoX19pY29uczogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd2ZXJ0aWNhbCcsIDApLCBcIiBcIiwgbG9naWNhbENTUygnbGVmdCcsICctNTAlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcyMDAlJyksIFwiIGRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kO2FsaWduLWl0ZW1zOmNlbnRlcjtcIiwgbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiIFwiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uLXByb3BlcnR5Omluc2V0LWlubGluZS1zdGFydDt0cmFuc2l0aW9uLWR1cmF0aW9uOlwiLCBhbmltYXRpb24uc3BlZWQsIFwiO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOlwiLCBhbmltYXRpb24uZWFzaW5nLCBcIjt9O2xhYmVsOmV1aVN3aXRjaF9faWNvbnM7XCIpLFxuICAgIG9uOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2xlZnQnLCAnLTI1JScpLCBcIjs7bGFiZWw6b247XCIpLFxuICAgIG9mZjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdsZWZ0JywgJy03NSUnKSwgXCI7O2xhYmVsOm9mZjtcIiksXG4gICAgZW5hYmxlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBjb2xvcnMudGh1bWIsIFwiOztsYWJlbDplbmFibGVkO1wiKSxcbiAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBjb2xvcnMudGh1bWJCb3JkZXJEaXNhYmxlZCwgXCI7O2xhYmVsOmRpc2FibGVkO1wiKVxuICB9O1xufTtcbnZhciB0aHVtYlN0eWxlcyA9IGZ1bmN0aW9uIHRodW1iU3R5bGVzKF9yZWY4LCBzd2l0Y2hWYXJzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWY4LmV1aVRoZW1lO1xuICB2YXIgc2l6ZXMgPSBzd2l0Y2hWYXJzLnNpemVzLFxuICAgIGNvbG9ycyA9IHN3aXRjaFZhcnMuY29sb3JzLFxuICAgIGFuaW1hdGlvbiA9IHN3aXRjaFZhcnMuYW5pbWF0aW9uO1xuICB2YXIgdW5jb21wcmVzc2VkID0gc2l6ZXMudW5jb21wcmVzc2VkLFxuICAgIGNvbXByZXNzZWQgPSBzaXplcy5jb21wcmVzc2VkLFxuICAgIG1pbmkgPSBzaXplcy5taW5pO1xuICB2YXIgX2NhbGN1bGF0ZVNjYWxlID0gZnVuY3Rpb24gX2NhbGN1bGF0ZVNjYWxlKHNpemUsIGhvdmVyQWN0aXZlU3RhdGVzKSB7XG4gICAgdmFyIGJhc2VTY2FsZSA9IFwidHJhbnNmb3JtOiBzY2FsZShcIi5jb25jYXQoc2l6ZXNbc2l6ZV0udGh1bWJTY2FsZXMuZGVmYXVsdCwgXCIpO1wiKTtcbiAgICB2YXIgc3RhdGVzID0gaG92ZXJBY3RpdmVTdGF0ZXMgPyBcIlxcbiAgICAgIC5ldWlTd2l0Y2g6aG92ZXIgJiB7XFxuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKFwiLmNvbmNhdChzaXplc1tzaXplXS50aHVtYlNjYWxlcy5ob3ZlciwgXCIpO1xcbiAgICAgIH1cXG4gICAgICAuZXVpU3dpdGNoOmFjdGl2ZSAmIHtcXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoXCIpLmNvbmNhdChzaXplc1tzaXplXS50aHVtYlNjYWxlcy5hY3RpdmUsIFwiKTtcXG4gICAgICB9XCIpIDogJyc7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KGJhc2VTY2FsZSkuY29uY2F0KHN0YXRlcyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgZXVpU3dpdGNoX190aHVtYjogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd2ZXJ0aWNhbCcsIDApLCBcIiBhc3BlY3QtcmF0aW86MTtcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnZml0LWNvbnRlbnQnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiIGJvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7XCIsIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb24tcHJvcGVydHk6aW5zZXQtaW5saW5lLXN0YXJ0LHRyYW5zZm9ybSxiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcjt0cmFuc2l0aW9uLWR1cmF0aW9uOlwiLCBhbmltYXRpb24uc3BlZWQsIFwiO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOlwiLCBhbmltYXRpb24uZWFzaW5nLCBcIjt9O2xhYmVsOmV1aVN3aXRjaF9fdGh1bWI7XCIpLFxuICAgIG9mZjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdsZWZ0JywgMCksIFwiOztsYWJlbDpvZmY7XCIpLFxuICAgIGdldCBvbigpIHtcbiAgICAgIC8vIHJpZ2h0OiAwIHdvcmtzIGJ1dCBkb2Vzbid0IHRyYW5zaXRpb24vYW5pbWF0ZSwgc28gd2UgbmVlZCB0b1xuICAgICAgLy8gbWFudWFsbHkgY2FsY3VsYXRlIHRoZSBsZWZ0IHBvc2l0aW9uIHBlciBzd2l0Y2ggc2l6ZVxuICAgICAgdmFyIF9jYWxjdWxhdGVMZWZ0ID0gZnVuY3Rpb24gX2NhbGN1bGF0ZUxlZnQoYm9keVdpZHRoLCB0aHVtYldpZHRoKSB7XG4gICAgICAgIHZhciBsZWZ0UG9zaXRpb24gPSBtYXRoV2l0aFVuaXRzKFtib2R5V2lkdGgsIHRodW1iV2lkdGhdLCBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgICAgIHJldHVybiB4IC0geTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3NzKFwibGFiZWw6b247XCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCBsZWZ0UG9zaXRpb24pLCBcIjtcIik7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdW5jb21wcmVzc2VkOiBfY2FsY3VsYXRlTGVmdCh1bmNvbXByZXNzZWQud2lkdGgsIHVuY29tcHJlc3NlZC5oZWlnaHQpLFxuICAgICAgICBjb21wcmVzc2VkOiBfY2FsY3VsYXRlTGVmdChjb21wcmVzc2VkLndpZHRoLCBjb21wcmVzc2VkLmhlaWdodCksXG4gICAgICAgIG1pbmk6IF9jYWxjdWxhdGVMZWZ0KG1pbmkud2lkdGgsIG1pbmkuaGVpZ2h0KVxuICAgICAgfTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IHtcbiAgICAgIGVuYWJsZWQ6IFwiXFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIi5jb25jYXQoY29sb3JzLnRodW1iLCBcIjtcXG4gICAgICAgIGJvcmRlcjogXCIpLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgc29saWQgXCIpLmNvbmNhdChjb2xvcnMudGh1bWJCb3JkZXIsIFwiO1xcbiAgICAgIFwiKSxcbiAgICAgIHVuY29tcHJlc3NlZDogX2NhbGN1bGF0ZVNjYWxlKCd1bmNvbXByZXNzZWQnLCB0cnVlKSxcbiAgICAgIGNvbXByZXNzZWQ6IF9jYWxjdWxhdGVTY2FsZSgnY29tcHJlc3NlZCcsIHRydWUpLFxuICAgICAgbWluaTogX2NhbGN1bGF0ZVNjYWxlKCdtaW5pJywgZmFsc2UpXG4gICAgfSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgZGlzYWJsZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjpcIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIFwiLCBjb2xvcnMudGh1bWJCb3JkZXJEaXNhYmxlZCwgXCI7O2xhYmVsOmRpc2FibGVkO1wiKSxcbiAgICAgIHVuY29tcHJlc3NlZDogX2NhbGN1bGF0ZVNjYWxlKCd1bmNvbXByZXNzZWQnLCBmYWxzZSksXG4gICAgICBjb21wcmVzc2VkOiBfY2FsY3VsYXRlU2NhbGUoJ2NvbXByZXNzZWQnLCBmYWxzZSksXG4gICAgICBtaW5pOiBfY2FsY3VsYXRlU2NhbGUoJ21pbmknLCBmYWxzZSlcbiAgICB9XG4gIH07XG59O1xudmFyIGxhYmVsU3R5bGVzID0gZnVuY3Rpb24gbGFiZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBfcmVmOSkge1xuICB2YXIgc2l6ZXMgPSBfcmVmOS5zaXplcyxcbiAgICBsYWJlbCA9IF9yZWY5LmxhYmVsO1xuICB2YXIgdW5jb21wcmVzc2VkID0gc2l6ZXMudW5jb21wcmVzc2VkLFxuICAgIGNvbXByZXNzZWQgPSBzaXplcy5jb21wcmVzc2VkLFxuICAgIG1pbmkgPSBzaXplcy5taW5pO1xuICByZXR1cm4ge1xuICAgIGV1aVN3aXRjaF9fbGFiZWw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgbGFiZWwuZ2FwKSwgXCI7O2xhYmVsOmV1aVN3aXRjaF9fbGFiZWw7XCIpLFxuICAgIC8vIFNraXAgY3NzYGAgdG8gYXZvaWQgZ2VuZXJhdGluZyBhbiBFbW90aW9uIGNsYXNzTmFtZVxuICAgIHVuY29tcHJlc3NlZDogXCJcXG4gICAgICBmb250LXNpemU6IFwiLmNvbmNhdChldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJykuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KHVuY29tcHJlc3NlZC5oZWlnaHQsIFwiO1xcbiAgICBcIiksXG4gICAgY29tcHJlc3NlZDogLyojX19QVVJFX18qL2NzcyhcImZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLmZvbnRTaXplLCBcIjtsaW5lLWhlaWdodDpcIiwgY29tcHJlc3NlZC5oZWlnaHQsIFwiOztsYWJlbDpjb21wcmVzc2VkO1wiKSxcbiAgICBtaW5pOiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC1zaXplOlwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICd4cycpLmZvbnRTaXplLCBcIjtsaW5lLWhlaWdodDpcIiwgbWluaS5oZWlnaHQsIFwiOztsYWJlbDptaW5pO1wiKSxcbiAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBsYWJlbC5kaXNhYmxlZCwgXCI7O2xhYmVsOmRpc2FibGVkO1wiKVxuICB9O1xufTsiLCAiaW1wb3J0IGNyZWF0ZUVtb3Rpb24gZnJvbSAnLi4vY3JlYXRlLWluc3RhbmNlL2Rpc3QvZW1vdGlvbi1jc3MtY3JlYXRlLWluc3RhbmNlLmVzbS5qcyc7XG5pbXBvcnQgJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vdXRpbHMnO1xuXG52YXIgX2NyZWF0ZUVtb3Rpb24gPSBjcmVhdGVFbW90aW9uKHtcbiAga2V5OiAnY3NzJ1xufSksXG4gICAgZmx1c2ggPSBfY3JlYXRlRW1vdGlvbi5mbHVzaCxcbiAgICBoeWRyYXRlID0gX2NyZWF0ZUVtb3Rpb24uaHlkcmF0ZSxcbiAgICBjeCA9IF9jcmVhdGVFbW90aW9uLmN4LFxuICAgIG1lcmdlID0gX2NyZWF0ZUVtb3Rpb24ubWVyZ2UsXG4gICAgZ2V0UmVnaXN0ZXJlZFN0eWxlcyA9IF9jcmVhdGVFbW90aW9uLmdldFJlZ2lzdGVyZWRTdHlsZXMsXG4gICAgaW5qZWN0R2xvYmFsID0gX2NyZWF0ZUVtb3Rpb24uaW5qZWN0R2xvYmFsLFxuICAgIGtleWZyYW1lcyA9IF9jcmVhdGVFbW90aW9uLmtleWZyYW1lcyxcbiAgICBjc3MgPSBfY3JlYXRlRW1vdGlvbi5jc3MsXG4gICAgc2hlZXQgPSBfY3JlYXRlRW1vdGlvbi5zaGVldCxcbiAgICBjYWNoZSA9IF9jcmVhdGVFbW90aW9uLmNhY2hlO1xuXG5leHBvcnQgeyBjYWNoZSwgY3NzLCBjeCwgZmx1c2gsIGdldFJlZ2lzdGVyZWRTdHlsZXMsIGh5ZHJhdGUsIGluamVjdEdsb2JhbCwga2V5ZnJhbWVzLCBtZXJnZSwgc2hlZXQgfTtcbiIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIiwgXCJoZWFkZXJaaW5kZXhMb2NhdGlvblwiLCBcIm1hc2tSZWZcIl07XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGN4IH0gZnJvbSAnQGVtb3Rpb24vY3NzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyB1c2VDb21iaW5lZFJlZnMsIHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpUG9ydGFsIH0gZnJvbSAnLi4vcG9ydGFsJztcbmltcG9ydCB7IGV1aU92ZXJsYXlNYXNrU3R5bGVzIH0gZnJvbSAnLi9vdmVybGF5X21hc2suc3R5bGVzJztcbmltcG9ydCB7IGV1aU92ZXJsYXlNYXNrQm9keVN0eWxlcyB9IGZyb20gJy4vb3ZlcmxheV9tYXNrX2JvZHkuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aU92ZXJsYXlNYXNrID0gZnVuY3Rpb24gRXVpT3ZlcmxheU1hc2soX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIF9yZWYkaGVhZGVyWmluZGV4TG9jYSA9IF9yZWYuaGVhZGVyWmluZGV4TG9jYXRpb24sXG4gICAgaGVhZGVyWmluZGV4TG9jYXRpb24gPSBfcmVmJGhlYWRlclppbmRleExvY2EgPT09IHZvaWQgMCA/ICdhYm92ZScgOiBfcmVmJGhlYWRlclppbmRleExvY2EsXG4gICAgbWFza1JlZiA9IF9yZWYubWFza1JlZixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBvdmVybGF5TWFza05vZGUgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldE92ZXJsYXlNYXNrTm9kZSA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBjb21iaW5lZE1hc2tSZWYgPSB1c2VDb21iaW5lZFJlZnMoW3NldE92ZXJsYXlNYXNrTm9kZSwgbWFza1JlZl0pO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpT3ZlcmxheU1hc2tTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gY3goW3N0eWxlcy5ldWlPdmVybGF5TWFzaywgc3R5bGVzW1wiXCIuY29uY2F0KGhlYWRlclppbmRleExvY2F0aW9uLCBcIkhlYWRlclwiKV1dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIW92ZXJsYXlNYXNrTm9kZSkgcmV0dXJuO1xuICAgIGtleXNPZihyZXN0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVzdFtrZXldICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmhhbmRsZWQgcHJvcGVydHkgdHlwZS4gRXVpT3ZlcmxheU1hc2sgcHJvcGVydHkgXCIuY29uY2F0KGtleSwgXCIgaXMgbm90IGEgc3RyaW5nLlwiKSk7XG4gICAgICB9XG4gICAgICBpZiAob3ZlcmxheU1hc2tOb2RlKSB7XG4gICAgICAgIG92ZXJsYXlNYXNrTm9kZS5zZXRBdHRyaWJ1dGUoa2V5LCByZXN0W2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbb3ZlcmxheU1hc2tOb2RlXSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG5cbiAgLy8gTm90ZTogVXNlIGBjbGFzc0xpc3QuYWRkL3JlbW92ZWAgaW5zdGVhZCBvZiBzZXR0aW5nIHRoZSBlbnRpcmUgYGNsYXNzTmFtZWBcbiAgLy8gc28gYXMgbm90IHRvIG92ZXJyaWRlIGFueSBleGlzdGluZyBjbGFzc2VzIHNldCBieSBgRXVpUG9ydGFsYFxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChvdmVybGF5TWFza05vZGUpIHtcbiAgICAgIG92ZXJsYXlNYXNrTm9kZS5jbGFzc0xpc3QuYWRkKCdldWlPdmVybGF5TWFzaycsIGNzc1N0eWxlcyk7XG4gICAgICBvdmVybGF5TWFza05vZGUuZGF0YXNldC5yZWxhdGl2ZVRvSGVhZGVyID0gaGVhZGVyWmluZGV4TG9jYXRpb247XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3ZlcmxheU1hc2tOb2RlLmNsYXNzTGlzdC5yZW1vdmUoY3NzU3R5bGVzKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbb3ZlcmxheU1hc2tOb2RlLCBjc3NTdHlsZXMsIGhlYWRlclppbmRleExvY2F0aW9uXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNsYXNzTmFtZSAmJiBvdmVybGF5TWFza05vZGUpIHtcbiAgICAgIHZhciBfb3ZlcmxheU1hc2tOb2RlJGNsYXM7XG4gICAgICB2YXIgY2xhc3NOYW1lQXJncyA9IGNsYXNzTmFtZS5zcGxpdCgnICcpOyAvLyBUaGUgYGNsYXNzTGlzdGAgQVBJIGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZSBjbGFzc2VzIGluIHRoZSBzYW1lIHN0cmluZ1xuICAgICAgKF9vdmVybGF5TWFza05vZGUkY2xhcyA9IG92ZXJsYXlNYXNrTm9kZS5jbGFzc0xpc3QpLmFkZC5hcHBseShfb3ZlcmxheU1hc2tOb2RlJGNsYXMsIF90b0NvbnN1bWFibGVBcnJheShjbGFzc05hbWVBcmdzKSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX292ZXJsYXlNYXNrTm9kZSRjbGFzMjtcbiAgICAgICAgcmV0dXJuIChfb3ZlcmxheU1hc2tOb2RlJGNsYXMyID0gb3ZlcmxheU1hc2tOb2RlLmNsYXNzTGlzdCkucmVtb3ZlLmFwcGx5KF9vdmVybGF5TWFza05vZGUkY2xhczIsIF90b0NvbnN1bWFibGVBcnJheShjbGFzc05hbWVBcmdzKSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW292ZXJsYXlNYXNrTm9kZSwgY2xhc3NOYW1lXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBvcnRhbCwge1xuICAgIHBvcnRhbFJlZjogY29tYmluZWRNYXNrUmVmXG4gIH0sIF9fX0Vtb3Rpb25KU1goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBldWlPdmVybGF5TWFza0JvZHlTdHlsZXNcbiAgfSksIGNoaWxkcmVuKTtcbn07XG5FdWlPdmVybGF5TWFzay5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBtYXNrIHZpc3VhbGx5IHNpdCBhYm92ZSBvciBiZWxvdyB0aGUgRXVpSGVhZGVyIChjb250cm9sbGVkIGJ5IHotaW5kZXgpXG4gICAgICovXG4gIGhlYWRlclppbmRleExvY2F0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiYWJvdmVcIiwgXCJiZWxvd1wiXSksXG4gIC8qKlxuICAgICAqIFJlYWN0IHJlZiB0byBiZSBwYXNzZWQgdG8gdGhlIHdyYXBwaW5nIGNvbnRhaW5lclxuICAgICAqL1xuICBtYXNrUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9jc3MnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgZXVpQW5pbUZhZGVJbiB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuZXhwb3J0IHZhciBldWlPdmVybGF5TWFza1N0eWxlcyA9IGZ1bmN0aW9uIGV1aU92ZXJsYXlNYXNrU3R5bGVzKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlPdmVybGF5TWFzazogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmZpeGVkO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCAwKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCAwKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3JpZ2h0JywgMCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdib3R0b20nLCAwKSwgXCIgZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWJvdHRvbScsICcxMHZoJyksIFwiIGFuaW1hdGlvbjpcIiwgZXVpQW5pbUZhZGVJbiwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBlYXNlLWluO2JhY2tncm91bmQ6XCIsIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5pbmssIDAuNSksIFwiOztsYWJlbDpldWlPdmVybGF5TWFzaztcIiksXG4gICAgYWJvdmVIZWFkZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJ6LWluZGV4OlwiLCBldWlUaGVtZS5sZXZlbHMubWFzaywgXCI7O2xhYmVsOmFib3ZlSGVhZGVyO1wiKSxcbiAgICBiZWxvd0hlYWRlcjogLyojX19QVVJFX18qL2NzcyhcInotaW5kZXg6XCIsIGV1aVRoZW1lLmxldmVscy5tYXNrQmVsb3dIZWFkZXIsIFwiO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCAndmFyKC0tZXVpRml4ZWRIZWFkZXJzT2Zmc2V0LCAwKScpLCBcIjs7bGFiZWw6YmVsb3dIZWFkZXI7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgdmFyIGV1aU92ZXJsYXlNYXNrQm9keVN0eWxlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxMzExNjAtZXVpT3ZlcmxheU1hc2tCb2R5U3R5bGVzXCIsXG4gIHN0eWxlczogXCJib2R5e292ZXJmbG93OmhpZGRlbjt9O2xhYmVsOmV1aU92ZXJsYXlNYXNrQm9keVN0eWxlcztcIlxufSA6IHtcbiAgbmFtZTogXCIxMzExNjAtZXVpT3ZlcmxheU1hc2tCb2R5U3R5bGVzXCIsXG4gIHN0eWxlczogXCJib2R5e292ZXJmbG93OmhpZGRlbjt9O2xhYmVsOmV1aU92ZXJsYXlNYXNrQm9keVN0eWxlcztcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59OyIsICJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHtcbiAgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICByZXR1cm4gZTtcbn1cbmV4cG9ydCB7IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgYXMgZGVmYXVsdCB9OyIsICJ2YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBsYXN0VGhpcztcbiAgICB2YXIgbGFzdEFyZ3MgPSBbXTtcbiAgICB2YXIgbGFzdFJlc3VsdDtcbiAgICB2YXIgY2FsbGVkT25jZSA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIG1lbW9pemVkKCkge1xuICAgICAgICB2YXIgbmV3QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbmV3QXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsZWRPbmNlICYmIGxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgbGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsYXN0UmVzdWx0ID0gcmVzdWx0Rm4uYXBwbHkodGhpcywgbmV3QXJncyk7XG4gICAgICAgIGNhbGxlZE9uY2UgPSB0cnVlO1xuICAgICAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgICAgIGxhc3RBcmdzID0gbmV3QXJncztcbiAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBtZW1vaXplZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZU9uZTtcbiIsICJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCAiLy8gQGZsb3dcblxuLy8gQW5pbWF0aW9uIGZyYW1lIGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHNldFRpbWVvdXQuXG4vLyBJbnNwaXJlZCBieSBKb2UgTGFtYmVydCwgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vam9lbGFtYmVydC8xMDAyMTE2I2ZpbGUtcmVxdWVzdHRpbWVvdXQtanNcblxuY29uc3QgaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3cgPVxuICB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG5cbmNvbnN0IG5vdyA9IGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93XG4gID8gKCkgPT4gcGVyZm9ybWFuY2Uubm93KClcbiAgOiAoKSA9PiBEYXRlLm5vdygpO1xuXG5leHBvcnQgdHlwZSBUaW1lb3V0SUQgPSB7fFxuICBpZDogQW5pbWF0aW9uRnJhbWVJRCxcbnx9O1xuXG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsVGltZW91dCh0aW1lb3V0SUQ6IFRpbWVvdXRJRCkge1xuICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lb3V0SUQuaWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdFRpbWVvdXQoY2FsbGJhY2s6IEZ1bmN0aW9uLCBkZWxheTogbnVtYmVyKTogVGltZW91dElEIHtcbiAgY29uc3Qgc3RhcnQgPSBub3coKTtcblxuICBmdW5jdGlvbiB0aWNrKCkge1xuICAgIGlmIChub3coKSAtIHN0YXJ0ID49IGRlbGF5KSB7XG4gICAgICBjYWxsYmFjay5jYWxsKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aW1lb3V0SUQuaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGltZW91dElEOiBUaW1lb3V0SUQgPSB7XG4gICAgaWQ6IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKSxcbiAgfTtcblxuICByZXR1cm4gdGltZW91dElEO1xufVxuIiwgIi8vIEBmbG93XG5cbmxldCBzaXplOiBudW1iZXIgPSAtMTtcblxuLy8gVGhpcyB1dGlsaXR5IGNvcGllZCBmcm9tIFwiZG9tLWhlbHBlcnNcIiBwYWNrYWdlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjcm9sbGJhclNpemUocmVjYWxjdWxhdGU/OiBib29sZWFuID0gZmFsc2UpOiBudW1iZXIge1xuICBpZiAoc2l6ZSA9PT0gLTEgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBzdHlsZSA9IGRpdi5zdHlsZTtcbiAgICBzdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBzdHlsZS5oZWlnaHQgPSAnNTBweCc7XG4gICAgc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5hcHBlbmRDaGlsZChkaXYpO1xuXG4gICAgc2l6ZSA9IGRpdi5vZmZzZXRXaWR0aCAtIGRpdi5jbGllbnRXaWR0aDtcblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5yZW1vdmVDaGlsZChkaXYpO1xuICB9XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCB0eXBlIFJUTE9mZnNldFR5cGUgPVxuICB8ICduZWdhdGl2ZSdcbiAgfCAncG9zaXRpdmUtZGVzY2VuZGluZydcbiAgfCAncG9zaXRpdmUtYXNjZW5kaW5nJztcblxubGV0IGNhY2hlZFJUTFJlc3VsdDogUlRMT2Zmc2V0VHlwZSB8IG51bGwgPSBudWxsO1xuXG4vLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4vLyBDaHJvbWUgZG9lcyBub3Qgc2VlbSB0byBhZGhlcmU7IGl0cyBzY3JvbGxMZWZ0IHZhbHVlcyBhcmUgcG9zaXRpdmUgKG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbi8vIFNhZmFyaSdzIGVsYXN0aWMgYm91bmNlIG1ha2VzIGRldGVjdGluZyB0aGlzIGV2ZW4gbW9yZSBjb21wbGljYXRlZCB3cnQgcG90ZW50aWFsIGZhbHNlIHBvc2l0aXZlcy5cbi8vIFRoZSBzYWZlc3Qgd2F5IHRvIGNoZWNrIHRoaXMgaXMgdG8gaW50ZW50aW9uYWxseSBzZXQgYSBuZWdhdGl2ZSBvZmZzZXQsXG4vLyBhbmQgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgc3Vic2VxdWVudCBcInNjcm9sbFwiIGV2ZW50IG1hdGNoZXMgdGhlIG5lZ2F0aXZlIG9mZnNldC5cbi8vIElmIGl0IGRvZXMgbm90IG1hdGNoLCB0aGVuIHdlIGNhbiBhc3N1bWUgYSBub24tc3RhbmRhcmQgUlRMIHNjcm9sbCBpbXBsZW1lbnRhdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSVExPZmZzZXRUeXBlKHJlY2FsY3VsYXRlPzogYm9vbGVhbiA9IGZhbHNlKTogUlRMT2Zmc2V0VHlwZSB7XG4gIGlmIChjYWNoZWRSVExSZXN1bHQgPT09IG51bGwgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICBjb25zdCBvdXRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IG91dGVyU3R5bGUgPSBvdXRlckRpdi5zdHlsZTtcbiAgICBvdXRlclN0eWxlLndpZHRoID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgICBvdXRlclN0eWxlLmRpcmVjdGlvbiA9ICdydGwnO1xuXG4gICAgY29uc3QgaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBpbm5lclN0eWxlID0gaW5uZXJEaXYuc3R5bGU7XG4gICAgaW5uZXJTdHlsZS53aWR0aCA9ICcxMDBweCc7XG4gICAgaW5uZXJTdHlsZS5oZWlnaHQgPSAnMTAwcHgnO1xuXG4gICAgb3V0ZXJEaXYuYXBwZW5kQ2hpbGQoaW5uZXJEaXYpO1xuXG4gICAgKChkb2N1bWVudC5ib2R5OiBhbnkpOiBIVE1MQm9keUVsZW1lbnQpLmFwcGVuZENoaWxkKG91dGVyRGl2KTtcblxuICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID4gMCkge1xuICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRlckRpdi5zY3JvbGxMZWZ0ID0gMTtcbiAgICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID09PSAwKSB7XG4gICAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICduZWdhdGl2ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtYXNjZW5kaW5nJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAoKGRvY3VtZW50LmJvZHk6IGFueSk6IEhUTUxCb2R5RWxlbWVudCkucmVtb3ZlQ2hpbGQob3V0ZXJEaXYpO1xuXG4gICAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG59XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNhbmNlbFRpbWVvdXQsIHJlcXVlc3RUaW1lb3V0IH0gZnJvbSAnLi90aW1lcic7XG5pbXBvcnQgeyBnZXRTY3JvbGxiYXJTaXplLCBnZXRSVExPZmZzZXRUeXBlIH0gZnJvbSAnLi9kb21IZWxwZXJzJztcblxuaW1wb3J0IHR5cGUgeyBUaW1lb3V0SUQgfSBmcm9tICcuL3RpbWVyJztcblxudHlwZSBEaXJlY3Rpb24gPSAnbHRyJyB8ICdydGwnO1xuZXhwb3J0IHR5cGUgU2Nyb2xsVG9BbGlnbiA9ICdhdXRvJyB8ICdzbWFydCcgfCAnY2VudGVyJyB8ICdzdGFydCcgfCAnZW5kJztcblxudHlwZSBpdGVtU2l6ZSA9IG51bWJlciB8ICgoaW5kZXg6IG51bWJlcikgPT4gbnVtYmVyKTtcblxudHlwZSBSZW5kZXJDb21wb25lbnRQcm9wczxUPiA9IHt8XG4gIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gIGRhdGE6IFQsXG4gIGlzU2Nyb2xsaW5nPzogYm9vbGVhbixcbiAgcm93SW5kZXg6IG51bWJlcixcbiAgc3R5bGU6IE9iamVjdCxcbnx9O1xuZXhwb3J0IHR5cGUgUmVuZGVyQ29tcG9uZW50PFQ+ID0gUmVhY3QkQ29tcG9uZW50VHlwZTxcbiAgJFNoYXBlPFJlbmRlckNvbXBvbmVudFByb3BzPFQ+PlxuPjtcblxudHlwZSBTY3JvbGxEaXJlY3Rpb24gPSAnZm9yd2FyZCcgfCAnYmFja3dhcmQnO1xuXG50eXBlIE9uSXRlbXNSZW5kZXJlZENhbGxiYWNrID0gKHtcbiAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICBvdmVyc2NhblJvd1N0b3BJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVSb3dTdGFydEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVSb3dTdG9wSW5kZXg6IG51bWJlcixcbn0pID0+IHZvaWQ7XG50eXBlIE9uU2Nyb2xsQ2FsbGJhY2sgPSAoe1xuICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhbixcbiAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbn0pID0+IHZvaWQ7XG5cbnR5cGUgU2Nyb2xsRXZlbnQgPSBTeW50aGV0aWNFdmVudDxIVE1MRGl2RWxlbWVudD47XG50eXBlIEl0ZW1TdHlsZUNhY2hlID0geyBba2V5OiBzdHJpbmddOiBPYmplY3QgfTtcblxudHlwZSBPdXRlclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIGNsYXNzTmFtZTogc3RyaW5nIHwgdm9pZCxcbiAgb25TY3JvbGw6IFNjcm9sbEV2ZW50ID0+IHZvaWQsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbnR5cGUgSW5uZXJQcm9wcyA9IHt8XG4gIGNoaWxkcmVuOiBSZWFjdCROb2RlLFxuICBzdHlsZToge1xuICAgIFtzdHJpbmddOiBtaXhlZCxcbiAgfSxcbnx9O1xuXG5leHBvcnQgdHlwZSBQcm9wczxUPiA9IHt8XG4gIGNoaWxkcmVuOiBSZW5kZXJDb21wb25lbnQ8VD4sXG4gIGNsYXNzTmFtZT86IHN0cmluZyxcbiAgY29sdW1uQ291bnQ6IG51bWJlcixcbiAgY29sdW1uV2lkdGg6IGl0ZW1TaXplLFxuICBkaXJlY3Rpb246IERpcmVjdGlvbixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGluaXRpYWxTY3JvbGxMZWZ0PzogbnVtYmVyLFxuICBpbml0aWFsU2Nyb2xsVG9wPzogbnVtYmVyLFxuICBpbm5lclJlZj86IGFueSxcbiAgaW5uZXJFbGVtZW50VHlwZT86IHN0cmluZyB8IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PElubmVyUHJvcHMsIGFueT4sXG4gIGlubmVyVGFnTmFtZT86IHN0cmluZywgLy8gZGVwcmVjYXRlZFxuICBpdGVtRGF0YTogVCxcbiAgaXRlbUtleT86IChwYXJhbXM6IHt8XG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBkYXRhOiBULFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gIHx9KSA9PiBhbnksXG4gIG9uSXRlbXNSZW5kZXJlZD86IE9uSXRlbXNSZW5kZXJlZENhbGxiYWNrLFxuICBvblNjcm9sbD86IE9uU2Nyb2xsQ2FsbGJhY2ssXG4gIG91dGVyUmVmPzogYW55LFxuICBvdXRlckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8T3V0ZXJQcm9wcywgYW55PixcbiAgb3V0ZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ29sdW1uQ291bnQ/OiBudW1iZXIsXG4gIG92ZXJzY2FuQ29sdW1uc0NvdW50PzogbnVtYmVyLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ291bnQ/OiBudW1iZXIsIC8vIGRlcHJlY2F0ZWRcbiAgb3ZlcnNjYW5Sb3dDb3VudD86IG51bWJlcixcbiAgb3ZlcnNjYW5Sb3dzQ291bnQ/OiBudW1iZXIsIC8vIGRlcHJlY2F0ZWRcbiAgcm93Q291bnQ6IG51bWJlcixcbiAgcm93SGVpZ2h0OiBpdGVtU2l6ZSxcbiAgc3R5bGU/OiBPYmplY3QsXG4gIHVzZUlzU2Nyb2xsaW5nOiBib29sZWFuLFxuICB3aWR0aDogbnVtYmVyLFxufH07XG5cbnR5cGUgU3RhdGUgPSB7fFxuICBpbnN0YW5jZTogYW55LFxuICBpc1Njcm9sbGluZzogYm9vbGVhbixcbiAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG4gIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG58fTtcblxudHlwZSBnZXRJdGVtT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgZ2V0SXRlbVNpemUgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlUHJvcHM6IGFueSkgPT4gbnVtYmVyO1xudHlwZSBHZXRPZmZzZXRGb3JJdGVtQW5kQWxpZ25tZW50ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnksXG4gIHNjcm9sbGJhclNpemU6IG51bWJlclxuKSA9PiBudW1iZXI7XG50eXBlIEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBvZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEluaXRJbnN0YW5jZVByb3BzID0gKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KSA9PiBhbnk7XG50eXBlIFZhbGlkYXRlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4pID0+IHZvaWQ7XG5cbmNvbnN0IElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCA9IDE1MDtcblxuY29uc3QgZGVmYXVsdEl0ZW1LZXkgPSAoeyBjb2x1bW5JbmRleCwgZGF0YSwgcm93SW5kZXggfSkgPT5cbiAgYCR7cm93SW5kZXh9OiR7Y29sdW1uSW5kZXh9YDtcblxuLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5sZXQgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbnVsbDtcbmxldCBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG51bGw7XG5sZXQgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG5ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lID0gbmV3IFdlYWtTZXQoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBnZXRDb2x1bW5XaWR0aCxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCxcbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50LFxuICBnZXRSb3dIZWlnaHQsXG4gIGdldFJvd09mZnNldCxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gIHZhbGlkYXRlUHJvcHMsXG59OiB7fFxuICBnZXRDb2x1bW5PZmZzZXQ6IGdldEl0ZW1PZmZzZXQsXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IEdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gIGdldENvbHVtbldpZHRoOiBnZXRJdGVtU2l6ZSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6IGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aDogZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IEdldE9mZnNldEZvckl0ZW1BbmRBbGlnbm1lbnQsXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogR2V0T2Zmc2V0Rm9ySXRlbUFuZEFsaWdubWVudCxcbiAgZ2V0Um93T2Zmc2V0OiBnZXRJdGVtT2Zmc2V0LFxuICBnZXRSb3dIZWlnaHQ6IGdldEl0ZW1TaXplLFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiBHZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBpbml0SW5zdGFuY2VQcm9wczogSW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGJvb2xlYW4sXG4gIHZhbGlkYXRlUHJvcHM6IFZhbGlkYXRlUHJvcHMsXG58fSkge1xuICByZXR1cm4gY2xhc3MgR3JpZDxUPiBleHRlbmRzIFB1cmVDb21wb25lbnQ8UHJvcHM8VD4sIFN0YXRlPiB7XG4gICAgX2luc3RhbmNlUHJvcHM6IGFueSA9IGluaXRJbnN0YW5jZVByb3BzKHRoaXMucHJvcHMsIHRoaXMpO1xuICAgIF9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkOiBUaW1lb3V0SUQgfCBudWxsID0gbnVsbDtcbiAgICBfb3V0ZXJSZWY6ID9IVE1MRGl2RWxlbWVudDtcblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgc3RhdGU6IFN0YXRlID0ge1xuICAgICAgaW5zdGFuY2U6IHRoaXMsXG4gICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICBzY3JvbGxMZWZ0OlxuICAgICAgICB0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbExlZnRcbiAgICAgICAgICA6IDAsXG4gICAgICBzY3JvbGxUb3A6XG4gICAgICAgIHR5cGVvZiB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3AgPT09ICdudW1iZXInXG4gICAgICAgICAgPyB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3BcbiAgICAgICAgICA6IDAsXG4gICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICB9O1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wczxUPikge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICBuZXh0UHJvcHM6IFByb3BzPFQ+LFxuICAgICAgcHJldlN0YXRlOiBTdGF0ZVxuICAgICk6ICRTaGFwZTxTdGF0ZT4gfCBudWxsIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG8oe1xuICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcCxcbiAgICB9OiB7XG4gICAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICB9KTogdm9pZCB7XG4gICAgICBpZiAoc2Nyb2xsTGVmdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzY3JvbGxUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxUb3ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChzY3JvbGxMZWZ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gcHJldlN0YXRlLnNjcm9sbExlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjcm9sbFRvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsVG9wID0gcHJldlN0YXRlLnNjcm9sbFRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJlxuICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHRydWUsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsVG9wIDwgc2Nyb2xsVG9wID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH1cblxuICAgIHNjcm9sbFRvSXRlbSh7XG4gICAgICBhbGlnbiA9ICdhdXRvJyxcbiAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgcm93SW5kZXgsXG4gICAgfToge1xuICAgICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgICBjb2x1bW5JbmRleD86IG51bWJlcixcbiAgICAgIHJvd0luZGV4PzogbnVtYmVyLFxuICAgIH0pOiB2b2lkIHtcbiAgICAgIGNvbnN0IHsgY29sdW1uQ291bnQsIGhlaWdodCwgcm93Q291bnQsIHdpZHRoIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AgfSA9IHRoaXMuc3RhdGU7XG4gICAgICBjb25zdCBzY3JvbGxiYXJTaXplID0gZ2V0U2Nyb2xsYmFyU2l6ZSgpO1xuXG4gICAgICBpZiAoY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb2x1bW5JbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkluZGV4LCBjb2x1bW5Db3VudCAtIDEpKTtcbiAgICAgIH1cbiAgICAgIGlmIChyb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJvd0luZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93SW5kZXgsIHJvd0NvdW50IC0gMSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldyxcbiAgICAgIC8vIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IHZpc2libGUuXG4gICAgICAvLyBCdXQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBzaXplIHdoZW4gaXQncyBhY3R1YWxseSB2aXNpYmxlLlxuICAgICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbGJhclNpemUgPVxuICAgICAgICBlc3RpbWF0ZWRUb3RhbFdpZHRoID4gd2lkdGggPyBzY3JvbGxiYXJTaXplIDogMDtcbiAgICAgIGNvbnN0IHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgIGVzdGltYXRlZFRvdGFsSGVpZ2h0ID4gaGVpZ2h0ID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG8oe1xuICAgICAgICBzY3JvbGxMZWZ0OlxuICAgICAgICAgIGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KFxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgYWxpZ24sXG4gICAgICAgICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFRvcDpcbiAgICAgICAgICByb3dJbmRleCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudChcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgICAgIGFsaWduLFxuICAgICAgICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzLFxuICAgICAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJTaXplXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogc2Nyb2xsVG9wLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IGluaXRpYWxTY3JvbGxMZWZ0LCBpbml0aWFsU2Nyb2xsVG9wIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBvdXRlclJlZiA9ICgodGhpcy5fb3V0ZXJSZWY6IGFueSk6IEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbExlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsVG9wID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IGluaXRpYWxTY3JvbGxUb3A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgY29uc3QgeyBkaXJlY3Rpb24gfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNjcm9sbExlZnQsIHNjcm9sbFRvcCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgLy8gU28gd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBtaW1pYyBpdC5cbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNvbnN0IHsgY2xpZW50V2lkdGgsIHNjcm9sbFdpZHRoIH0gPSBvdXRlclJlZjtcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHNjcm9sbExlZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgY29sdW1uQ291bnQsXG4gICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBpbm5lclJlZixcbiAgICAgICAgaW5uZXJFbGVtZW50VHlwZSxcbiAgICAgICAgaW5uZXJUYWdOYW1lLFxuICAgICAgICBpdGVtRGF0YSxcbiAgICAgICAgaXRlbUtleSA9IGRlZmF1bHRJdGVtS2V5LFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICBvdXRlclRhZ05hbWUsXG4gICAgICAgIHJvd0NvdW50LFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgdXNlSXNTY3JvbGxpbmcsXG4gICAgICAgIHdpZHRoLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGlzU2Nyb2xsaW5nIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBjb25zdCBbXG4gICAgICAgIGNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgIGNvbHVtblN0b3BJbmRleCxcbiAgICAgIF0gPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpO1xuICAgICAgY29uc3QgW3Jvd1N0YXJ0SW5kZXgsIHJvd1N0b3BJbmRleF0gPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKTtcblxuICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgIGlmIChjb2x1bW5Db3VudCA+IDAgJiYgcm93Q291bnQpIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBsZXQgcm93SW5kZXggPSByb3dTdGFydEluZGV4O1xuICAgICAgICAgIHJvd0luZGV4IDw9IHJvd1N0b3BJbmRleDtcbiAgICAgICAgICByb3dJbmRleCsrXG4gICAgICAgICkge1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBsZXQgY29sdW1uSW5kZXggPSBjb2x1bW5TdGFydEluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXggPD0gY29sdW1uU3RvcEluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXgrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGtleTogaXRlbUtleSh7IGNvbHVtbkluZGV4LCBkYXRhOiBpdGVtRGF0YSwgcm93SW5kZXggfSksXG4gICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHRoaXMuX2dldEl0ZW1TdHlsZShyb3dJbmRleCwgY29sdW1uSW5kZXgpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVhZCB0aGlzIHZhbHVlIEFGVEVSIGl0ZW1zIGhhdmUgYmVlbiBjcmVhdGVkLFxuICAgICAgLy8gU28gdGhlaXIgYWN0dWFsIHNpemVzIChpZiB2YXJpYWJsZSkgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi5cbiAgICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIG91dGVyRWxlbWVudFR5cGUgfHwgb3V0ZXJUYWdOYW1lIHx8ICdkaXYnLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIG9uU2Nyb2xsOiB0aGlzLl9vblNjcm9sbCxcbiAgICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGhlaWdodDogZXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBpc1Njcm9sbGluZyA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHdpZHRoOiBlc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkOiAoXG4gICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVSb3dTdG9wSW5kZXg6IG51bWJlclxuICAgICkgPT4gdm9pZDtcbiAgICBfY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoXG4gICAgICAoXG4gICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4OiBudW1iZXJcbiAgICAgICkgPT5cbiAgICAgICAgKCh0aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZDogYW55KTogT25JdGVtc1JlbmRlcmVkQ2FsbGJhY2spKHtcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxPblNjcm9sbDogKFxuICAgICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25TY3JvbGw6IGFueSk6IE9uU2Nyb2xsQ2FsbGJhY2spKHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGNvbnN0IHsgY29sdW1uQ291bnQsIG9uSXRlbXNSZW5kZXJlZCwgb25TY3JvbGwsIHJvd0NvdW50IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIG9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50ID4gMCkge1xuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIF0gPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpO1xuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4LFxuICAgICAgICAgIF0gPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKFxuICAgICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoXG4gICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIF9nZXRJdGVtU3R5bGU6IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiBPYmplY3Q7XG4gICAgX2dldEl0ZW1TdHlsZSA9IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogT2JqZWN0ID0+IHtcbiAgICAgIGNvbnN0IHsgY29sdW1uV2lkdGgsIGRpcmVjdGlvbiwgcm93SGVpZ2h0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBpdGVtU3R5bGVDYWNoZSA9IHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGNvbHVtbldpZHRoLFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvbixcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiByb3dIZWlnaHRcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fToke2NvbHVtbkluZGV4fWA7XG5cbiAgICAgIGxldCBzdHlsZTtcbiAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGdldENvbHVtbk9mZnNldChcbiAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICBpdGVtU3R5bGVDYWNoZVtrZXldID0gc3R5bGUgPSB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgbGVmdDogaXNSdGwgPyB1bmRlZmluZWQgOiBvZmZzZXQsXG4gICAgICAgICAgcmlnaHQ6IGlzUnRsID8gb2Zmc2V0IDogdW5kZWZpbmVkLFxuICAgICAgICAgIHRvcDogZ2V0Um93T2Zmc2V0KHRoaXMucHJvcHMsIHJvd0luZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICBoZWlnaHQ6IGdldFJvd0hlaWdodCh0aGlzLnByb3BzLCByb3dJbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgd2lkdGg6IGdldENvbHVtbldpZHRoKHRoaXMucHJvcHMsIGNvbHVtbkluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH07XG5cbiAgICBfZ2V0SXRlbVN0eWxlQ2FjaGU6IChfOiBhbnksIF9fOiBhbnksIF9fXzogYW55KSA9PiBJdGVtU3R5bGVDYWNoZTtcbiAgICBfZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKChfOiBhbnksIF9fOiBhbnksIF9fXzogYW55KSA9PiAoe30pKTtcblxuICAgIF9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbHVtbkNvdW50LFxuICAgICAgICBvdmVyc2NhbkNvbHVtbkNvdW50LFxuICAgICAgICBvdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICAgICAgb3ZlcnNjYW5Db3VudCxcbiAgICAgICAgcm93Q291bnQsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiwgaXNTY3JvbGxpbmcsIHNjcm9sbExlZnQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQ291bnRSZXNvbHZlZDogbnVtYmVyID1cbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5Db3VudCB8fCBvdmVyc2NhbkNvbHVtbnNDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0b3BJbmRleCA9IGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKVxuICAgICAgICAgIDogMTtcbiAgICAgIGNvbnN0IG92ZXJzY2FuRm9yd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSxcbiAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc3RvcEluZGV4LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBfZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29sdW1uQ291bnQsXG4gICAgICAgIG92ZXJzY2FuQ291bnQsXG4gICAgICAgIG92ZXJzY2FuUm93Q291bnQsXG4gICAgICAgIG92ZXJzY2FuUm93c0NvdW50LFxuICAgICAgICByb3dDb3VudCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZywgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sIHNjcm9sbFRvcCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgY29uc3Qgb3ZlcnNjYW5Db3VudFJlc29sdmVkOiBudW1iZXIgPVxuICAgICAgICBvdmVyc2NhblJvd0NvdW50IHx8IG92ZXJzY2FuUm93c0NvdW50IHx8IG92ZXJzY2FuQ291bnQgfHwgMTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID09PSAwIHx8IHJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBzdG9wSW5kZXggPSBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG4gICAgICBjb25zdCBvdmVyc2NhbkZvcndhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKVxuICAgICAgICAgIDogMTtcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLFxuICAgICAgICBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzdG9wSW5kZXgsXG4gICAgICBdO1xuICAgIH1cblxuICAgIF9vblNjcm9sbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xpZW50SGVpZ2h0LFxuICAgICAgICBjbGllbnRXaWR0aCxcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgfSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJlxuICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBkaXJlY3Rpb24gfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuICAgICAgICBsZXQgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oY2FsY3VsYXRlZFNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRTY3JvbGxUb3AgPSBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIE1hdGgubWluKHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogY2FsY3VsYXRlZFNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBjYWxjdWxhdGVkU2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfb3V0ZXJSZWZTZXR0ZXIgPSAocmVmOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgb3V0ZXJSZWYgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIHRoaXMuX291dGVyUmVmID0gKChyZWY6IGFueSk6IEhUTUxEaXZFbGVtZW50KTtcblxuICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgb3V0ZXJSZWYgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmXG4gICAgICAgIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JylcbiAgICAgICkge1xuICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChcbiAgICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZyxcbiAgICAgICAgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXNTY3JvbGxpbmc6IGZhbHNlIH0sICgpID0+IHtcbiAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICB0aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufVxuXG5jb25zdCB2YWxpZGF0ZVNoYXJlZFByb3BzID0gKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgZGlyZWN0aW9uLFxuICAgIGhlaWdodCxcbiAgICBpbm5lclRhZ05hbWUsXG4gICAgb3V0ZXJUYWdOYW1lLFxuICAgIG92ZXJzY2FuQ29sdW1uc0NvdW50LFxuICAgIG92ZXJzY2FuQ291bnQsXG4gICAgb3ZlcnNjYW5Sb3dzQ291bnQsXG4gICAgd2lkdGgsXG4gIH06IFByb3BzPGFueT4sXG4gIHsgaW5zdGFuY2UgfTogU3RhdGVcbik6IHZvaWQgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2Ygb3ZlcnNjYW5Db3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgJiYgIWRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBvdmVyc2NhbkNvdW50IHByb3AgaGFzIGJlZW4gZGVwcmVjYXRlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgb3ZlcnNjYW5Db2x1bW5Db3VudCBhbmQgb3ZlcnNjYW5Sb3dDb3VudCBwcm9wcyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3ZlcnNjYW5Db2x1bW5zQ291bnQgPT09ICdudW1iZXInIHx8XG4gICAgICB0eXBlb2Ygb3ZlcnNjYW5Sb3dzQ291bnQgPT09ICdudW1iZXInXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ICYmXG4gICAgICAgICFkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudC5oYXMoaW5zdGFuY2UpXG4gICAgICApIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgb3ZlcnNjYW5Db2x1bW5zQ291bnQgYW5kIG92ZXJzY2FuUm93c0NvdW50IHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBvdmVyc2NhbkNvbHVtbkNvdW50IGFuZCBvdmVyc2NhblJvd0NvdW50IHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICtcbiAgICAgICAgICBgXCIke2NoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiZGlyZWN0aW9uXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiBvciBcInJ0bFwiLiAnICtcbiAgICAgICAgICAgIGBcIiR7ZGlyZWN0aW9ufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnR3JpZHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciB3aWR0aC4gJyArXG4gICAgICAgICAgYFwiJHt3aWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB3aWR0aH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICtcbiAgICAgICAgICBgXCIke2hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHR9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH1cbiAgfVxufTtcbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgY3JlYXRlR3JpZENvbXBvbmVudCBmcm9tICcuL2NyZWF0ZUdyaWRDb21wb25lbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFByb3BzLCBTY3JvbGxUb0FsaWduIH0gZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuY29uc3QgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFID0gNTA7XG5cbnR5cGUgVmFyaWFibGVTaXplUHJvcHMgPSB7fFxuICBlc3RpbWF0ZWRDb2x1bW5XaWR0aDogbnVtYmVyLFxuICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IG51bWJlcixcbiAgLi4uUHJvcHM8YW55Pixcbnx9O1xuXG50eXBlIGl0ZW1TaXplR2V0dGVyID0gKGluZGV4OiBudW1iZXIpID0+IG51bWJlcjtcbnR5cGUgSXRlbVR5cGUgPSAnY29sdW1uJyB8ICdyb3cnO1xuXG50eXBlIEl0ZW1NZXRhZGF0YSA9IHt8XG4gIG9mZnNldDogbnVtYmVyLFxuICBzaXplOiBudW1iZXIsXG58fTtcbnR5cGUgSXRlbU1ldGFkYXRhTWFwID0geyBbaW5kZXg6IG51bWJlcl06IEl0ZW1NZXRhZGF0YSB9O1xudHlwZSBJbnN0YW5jZVByb3BzID0ge3xcbiAgY29sdW1uTWV0YWRhdGFNYXA6IEl0ZW1NZXRhZGF0YU1hcCxcbiAgZXN0aW1hdGVkQ29sdW1uV2lkdGg6IG51bWJlcixcbiAgZXN0aW1hdGVkUm93SGVpZ2h0OiBudW1iZXIsXG4gIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4OiBudW1iZXIsXG4gIGxhc3RNZWFzdXJlZFJvd0luZGV4OiBudW1iZXIsXG4gIHJvd01ldGFkYXRhTWFwOiBJdGVtTWV0YWRhdGFNYXAsXG58fTtcblxuY29uc3QgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQgPSAoXG4gIHsgcm93Q291bnQgfTogUHJvcHM8YW55PixcbiAgeyByb3dNZXRhZGF0YU1hcCwgZXN0aW1hdGVkUm93SGVpZ2h0LCBsYXN0TWVhc3VyZWRSb3dJbmRleCB9OiBJbnN0YW5jZVByb3BzXG4pID0+IHtcbiAgbGV0IHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDtcblxuICAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gcm93Q291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRSb3dJbmRleCA9IHJvd0NvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSAwKSB7XG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gcm93TWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkUm93SW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgY29uc3QgbnVtVW5tZWFzdXJlZEl0ZW1zID0gcm93Q291bnQgLSBsYXN0TWVhc3VyZWRSb3dJbmRleCAtIDE7XG4gIGNvbnN0IHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkUm93SGVpZ2h0O1xuXG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxuY29uc3QgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCA9IChcbiAgeyBjb2x1bW5Db3VudCB9OiBQcm9wczxhbnk+LFxuICB7XG4gICAgY29sdW1uTWV0YWRhdGFNYXAsXG4gICAgZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXgsXG4gIH06IEluc3RhbmNlUHJvcHNcbikgPT4ge1xuICBsZXQgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSAwO1xuXG4gIC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSBjb2x1bW5Db3VudCkge1xuICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gY29sdW1uQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID49IDApIHtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBjb2x1bW5NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRDb2x1bW5JbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICBjb25zdCBudW1Vbm1lYXN1cmVkSXRlbXMgPSBjb2x1bW5Db3VudCAtIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4IC0gMTtcbiAgY29uc3QgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRDb2x1bW5XaWR0aDtcblxuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbmNvbnN0IGdldEl0ZW1NZXRhZGF0YSA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuKTogSXRlbU1ldGFkYXRhID0+IHtcbiAgbGV0IGl0ZW1NZXRhZGF0YU1hcCwgaXRlbVNpemUsIGxhc3RNZWFzdXJlZEluZGV4O1xuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9ICgocHJvcHMuY29sdW1uV2lkdGg6IGFueSk6IGl0ZW1TaXplR2V0dGVyKTtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9ICgocHJvcHMucm93SGVpZ2h0OiBhbnkpOiBpdGVtU2l6ZUdldHRlcik7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB9XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIGxldCBzaXplID0gaXRlbVNpemUoaSk7XG5cbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBzaXplLFxuICAgICAgfTtcblxuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW0gPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIG9mZnNldDogbnVtYmVyXG4pID0+IHtcbiAgbGV0IGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXg7XG4gIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIGNvbnN0IGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPVxuICAgIGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKFxuICAgICAgaXRlbVR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCxcbiAgICAgIDAsXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKFxuICAgICAgaXRlbVR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIGhpZ2g6IG51bWJlcixcbiAgbG93OiBudW1iZXIsXG4gIG9mZnNldDogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICBjb25zdCBtaWRkbGUgPSBsb3cgKyBNYXRoLmZsb29yKChoaWdoIC0gbG93KSAvIDIpO1xuICAgIGNvbnN0IGN1cnJlbnRPZmZzZXQgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICBpdGVtVHlwZSxcbiAgICAgIHByb3BzLFxuICAgICAgbWlkZGxlLFxuICAgICAgaW5zdGFuY2VQcm9wc1xuICAgICkub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgaW5kZXg6IG51bWJlcixcbiAgb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IGl0ZW1Db3VudCA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLmNvbHVtbkNvdW50IDogcHJvcHMucm93Q291bnQ7XG4gIGxldCBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKFxuICAgIGluZGV4IDwgaXRlbUNvdW50ICYmXG4gICAgZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldFxuICApIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICBpdGVtVHlwZSxcbiAgICBwcm9wcyxcbiAgICBpbnN0YW5jZVByb3BzLFxuICAgIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSxcbiAgICBNYXRoLmZsb29yKGluZGV4IC8gMiksXG4gICAgb2Zmc2V0XG4gICk7XG59O1xuXG5jb25zdCBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IHNpemUgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy53aWR0aCA6IHByb3BzLmhlaWdodDtcbiAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuXG4gIC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gIC8vIFRvIGVuc3VyZSBpdCByZWZsZWN0cyBhY3R1YWwgbWVhc3VyZW1lbnRzIGluc3RlYWQgb2YganVzdCBlc3RpbWF0ZXMuXG4gIGNvbnN0IGVzdGltYXRlZFRvdGFsU2l6ZSA9XG4gICAgaXRlbVR5cGUgPT09ICdjb2x1bW4nXG4gICAgICA/IGdldEVzdGltYXRlZFRvdGFsV2lkdGgocHJvcHMsIGluc3RhbmNlUHJvcHMpXG4gICAgICA6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHByb3BzLCBpbnN0YW5jZVByb3BzKTtcblxuICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1heChcbiAgICAwLFxuICAgIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpXG4gICk7XG4gIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgIDAsXG4gICAgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBzY3JvbGxiYXJTaXplICsgaXRlbU1ldGFkYXRhLnNpemVcbiAgKTtcblxuICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAoYWxpZ24pIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuICAgIGNhc2UgJ2F1dG8nOlxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgfVxuICB9XG59O1xuXG5jb25zdCBWYXJpYWJsZVNpemVHcmlkID0gY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCxcblxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGZpbmROZWFyZXN0SXRlbSgnY29sdW1uJywgcHJvcHMsIGluc3RhbmNlUHJvcHMsIHNjcm9sbExlZnQpLFxuXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IGNvbHVtbkNvdW50LCB3aWR0aCB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICAnY29sdW1uJyxcbiAgICAgIHByb3BzLFxuICAgICAgc3RhcnRJbmRleCxcbiAgICAgIGluc3RhbmNlUHJvcHNcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbExlZnQgKyB3aWR0aDtcblxuICAgIGxldCBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgbGV0IHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgY29sdW1uQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG5cbiAgZ2V0Q29sdW1uV2lkdGg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXBbaW5kZXhdLnNpemUsXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG5cbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT5cbiAgICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChcbiAgICAgICdjb2x1bW4nLFxuICAgICAgcHJvcHMsXG4gICAgICBpbmRleCxcbiAgICAgIGFsaWduLFxuICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIHNjcm9sbGJhclNpemVcbiAgICApLFxuXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoXG4gICAgICAncm93JyxcbiAgICAgIHByb3BzLFxuICAgICAgaW5kZXgsXG4gICAgICBhbGlnbixcbiAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBzY3JvbGxiYXJTaXplXG4gICAgKSxcblxuICBnZXRSb3dPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQsXG5cbiAgZ2V0Um93SGVpZ2h0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwW2luZGV4XS5zaXplLFxuXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBmaW5kTmVhcmVzdEl0ZW0oJ3JvdycsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxUb3ApLFxuXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHsgcm93Q291bnQsIGhlaWdodCB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICAncm93JyxcbiAgICAgIHByb3BzLFxuICAgICAgc3RhcnRJbmRleCxcbiAgICAgIGluc3RhbmNlUHJvcHNcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbFRvcCArIGhlaWdodDtcblxuICAgIGxldCBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgbGV0IHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgcm93Q291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG5cbiAgaW5pdEluc3RhbmNlUHJvcHMocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlOiBhbnkpOiBJbnN0YW5jZVByb3BzIHtcbiAgICBjb25zdCB7XG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCxcbiAgICAgIGVzdGltYXRlZFJvd0hlaWdodCxcbiAgICB9ID0gKChwcm9wczogYW55KTogVmFyaWFibGVTaXplUHJvcHMpO1xuXG4gICAgY29uc3QgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGNvbHVtbk1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoOiBlc3RpbWF0ZWRDb2x1bW5XaWR0aCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IGVzdGltYXRlZFJvd0hlaWdodCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleDogLTEsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleDogLTEsXG4gICAgICByb3dNZXRhZGF0YU1hcDoge30sXG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJDb2x1bW5JbmRleCA9IChcbiAgICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZT86IGJvb2xlYW4gPSB0cnVlXG4gICAgKSA9PiB7XG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7IGNvbHVtbkluZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlclJvd0luZGV4ID0gKFxuICAgICAgcm93SW5kZXg6IG51bWJlcixcbiAgICAgIHNob3VsZEZvcmNlVXBkYXRlPzogYm9vbGVhbiA9IHRydWVcbiAgICApID0+IHtcbiAgICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzKHsgcm93SW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlIH0pO1xuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyA9ICh7XG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlLFxuICAgIH06IHtcbiAgICAgIGNvbHVtbkluZGV4PzogbnVtYmVyLFxuICAgICAgcm93SW5kZXg/OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZTogYm9vbGVhbixcbiAgICB9KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbkluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gTWF0aC5taW4oXG4gICAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleCAtIDFcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygcm93SW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4LFxuICAgICAgICAgIHJvd0luZGV4IC0gMVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcblxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBjb2x1bW5XaWR0aCwgcm93SGVpZ2h0IH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAgIGBcIiR7XG4gICAgICAgICAgICAgIGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoXG4gICAgICAgICAgICB9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJyb3dIZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgK1xuICAgICAgICAgICAgYFwiJHtyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBWYXJpYWJsZVNpemVHcmlkO1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjYW5jZWxUaW1lb3V0LCByZXF1ZXN0VGltZW91dCB9IGZyb20gJy4vdGltZXInO1xuaW1wb3J0IHsgZ2V0U2Nyb2xsYmFyU2l6ZSwgZ2V0UlRMT2Zmc2V0VHlwZSB9IGZyb20gJy4vZG9tSGVscGVycyc7XG5cbmltcG9ydCB0eXBlIHsgVGltZW91dElEIH0gZnJvbSAnLi90aW1lcic7XG5cbmV4cG9ydCB0eXBlIFNjcm9sbFRvQWxpZ24gPSAnYXV0bycgfCAnc21hcnQnIHwgJ2NlbnRlcicgfCAnc3RhcnQnIHwgJ2VuZCc7XG5cbnR5cGUgaXRlbVNpemUgPSBudW1iZXIgfCAoKGluZGV4OiBudW1iZXIpID0+IG51bWJlcik7XG4vLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb25zIFwiaG9yaXpvbnRhbFwiIGFuZCBcInZlcnRpY2FsXCJcbnR5cGUgRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJyB8ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG50eXBlIExheW91dCA9ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG5cbnR5cGUgUmVuZGVyQ29tcG9uZW50UHJvcHM8VD4gPSB7fFxuICBkYXRhOiBULFxuICBpbmRleDogbnVtYmVyLFxuICBpc1Njcm9sbGluZz86IGJvb2xlYW4sXG4gIHN0eWxlOiBPYmplY3QsXG58fTtcbnR5cGUgUmVuZGVyQ29tcG9uZW50PFQ+ID0gUmVhY3QkQ29tcG9uZW50VHlwZTwkU2hhcGU8UmVuZGVyQ29tcG9uZW50UHJvcHM8VD4+PjtcblxudHlwZSBTY3JvbGxEaXJlY3Rpb24gPSAnZm9yd2FyZCcgfCAnYmFja3dhcmQnO1xuXG50eXBlIG9uSXRlbXNSZW5kZXJlZENhbGxiYWNrID0gKHtcbiAgb3ZlcnNjYW5TdGFydEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVTdGFydEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVTdG9wSW5kZXg6IG51bWJlcixcbn0pID0+IHZvaWQ7XG50eXBlIG9uU2Nyb2xsQ2FsbGJhY2sgPSAoe1xuICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhbixcbn0pID0+IHZvaWQ7XG5cbnR5cGUgU2Nyb2xsRXZlbnQgPSBTeW50aGV0aWNFdmVudDxIVE1MRGl2RWxlbWVudD47XG50eXBlIEl0ZW1TdHlsZUNhY2hlID0geyBbaW5kZXg6IG51bWJlcl06IE9iamVjdCB9O1xuXG50eXBlIE91dGVyUHJvcHMgPSB7fFxuICBjaGlsZHJlbjogUmVhY3QkTm9kZSxcbiAgY2xhc3NOYW1lOiBzdHJpbmcgfCB2b2lkLFxuICBvblNjcm9sbDogU2Nyb2xsRXZlbnQgPT4gdm9pZCxcbiAgc3R5bGU6IHtcbiAgICBbc3RyaW5nXTogbWl4ZWQsXG4gIH0sXG58fTtcblxudHlwZSBJbm5lclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbmV4cG9ydCB0eXBlIFByb3BzPFQ+ID0ge3xcbiAgY2hpbGRyZW46IFJlbmRlckNvbXBvbmVudDxUPixcbiAgY2xhc3NOYW1lPzogc3RyaW5nLFxuICBkaXJlY3Rpb246IERpcmVjdGlvbixcbiAgaGVpZ2h0OiBudW1iZXIgfCBzdHJpbmcsXG4gIGluaXRpYWxTY3JvbGxPZmZzZXQ/OiBudW1iZXIsXG4gIGlubmVyUmVmPzogYW55LFxuICBpbm5lckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8SW5uZXJQcm9wcywgYW55PixcbiAgaW5uZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIGl0ZW1Db3VudDogbnVtYmVyLFxuICBpdGVtRGF0YTogVCxcbiAgaXRlbUtleT86IChpbmRleDogbnVtYmVyLCBkYXRhOiBUKSA9PiBhbnksXG4gIGl0ZW1TaXplOiBpdGVtU2l6ZSxcbiAgbGF5b3V0OiBMYXlvdXQsXG4gIG9uSXRlbXNSZW5kZXJlZD86IG9uSXRlbXNSZW5kZXJlZENhbGxiYWNrLFxuICBvblNjcm9sbD86IG9uU2Nyb2xsQ2FsbGJhY2ssXG4gIG91dGVyUmVmPzogYW55LFxuICBvdXRlckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8T3V0ZXJQcm9wcywgYW55PixcbiAgb3V0ZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ291bnQ6IG51bWJlcixcbiAgc3R5bGU/OiBPYmplY3QsXG4gIHVzZUlzU2Nyb2xsaW5nOiBib29sZWFuLFxuICB3aWR0aDogbnVtYmVyIHwgc3RyaW5nLFxufH07XG5cbnR5cGUgU3RhdGUgPSB7fFxuICBpbnN0YW5jZTogYW55LFxuICBpc1Njcm9sbGluZzogYm9vbGVhbixcbiAgc2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG58fTtcblxudHlwZSBHZXRJdGVtT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0SXRlbVNpemUgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlUHJvcHM6IGFueSkgPT4gbnVtYmVyO1xudHlwZSBHZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RhcnRJbmRleEZvck9mZnNldCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIG9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgc3RhcnRJbmRleDogbnVtYmVyLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgSW5pdEluc3RhbmNlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlOiBhbnkpID0+IGFueTtcbnR5cGUgVmFsaWRhdGVQcm9wcyA9IChwcm9wczogUHJvcHM8YW55PikgPT4gdm9pZDtcblxuY29uc3QgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMID0gMTUwO1xuXG5jb25zdCBkZWZhdWx0SXRlbUtleSA9IChpbmRleDogbnVtYmVyLCBkYXRhOiBhbnkpID0+IGluZGV4O1xuXG4vLyBJbiBERVYgbW9kZSwgdGhpcyBTZXQgaGVscHMgdXMgb25seSBsb2cgYSB3YXJuaW5nIG9uY2UgcGVyIGNvbXBvbmVudCBpbnN0YW5jZS5cbi8vIFRoaXMgYXZvaWRzIHNwYW1taW5nIHRoZSBjb25zb2xlIGV2ZXJ5IHRpbWUgYSByZW5kZXIgaGFwcGVucy5cbmxldCBkZXZXYXJuaW5nc0RpcmVjdGlvbiA9IG51bGw7XG5sZXQgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSBuZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSA9IG5ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQsXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0SXRlbVNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50LFxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBpbml0SW5zdGFuY2VQcm9wcyxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSxcbiAgdmFsaWRhdGVQcm9wcyxcbn06IHt8XG4gIGdldEl0ZW1PZmZzZXQ6IEdldEl0ZW1PZmZzZXQsXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZTogR2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRJdGVtU2l6ZTogR2V0SXRlbVNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiBHZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogR2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IEluaXRJbnN0YW5jZVByb3BzLFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBib29sZWFuLFxuICB2YWxpZGF0ZVByb3BzOiBWYWxpZGF0ZVByb3BzLFxufH0pIHtcbiAgcmV0dXJuIGNsYXNzIExpc3Q8VD4gZXh0ZW5kcyBQdXJlQ29tcG9uZW50PFByb3BzPFQ+LCBTdGF0ZT4ge1xuICAgIF9pbnN0YW5jZVByb3BzOiBhbnkgPSBpbml0SW5zdGFuY2VQcm9wcyh0aGlzLnByb3BzLCB0aGlzKTtcbiAgICBfb3V0ZXJSZWY6ID9IVE1MRGl2RWxlbWVudDtcbiAgICBfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZDogVGltZW91dElEIHwgbnVsbCA9IG51bGw7XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgICBsYXlvdXQ6ICd2ZXJ0aWNhbCcsXG4gICAgICBvdmVyc2NhbkNvdW50OiAyLFxuICAgICAgdXNlSXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgIH07XG5cbiAgICBzdGF0ZTogU3RhdGUgPSB7XG4gICAgICBpbnN0YW5jZTogdGhpcyxcbiAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgIHNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgc2Nyb2xsT2Zmc2V0OlxuICAgICAgICB0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0XG4gICAgICAgICAgOiAwLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wczxUPikge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICBuZXh0UHJvcHM6IFByb3BzPFQ+LFxuICAgICAgcHJldlN0YXRlOiBTdGF0ZVxuICAgICk6ICRTaGFwZTxTdGF0ZT4gfCBudWxsIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG8oc2Nyb2xsT2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIHNjcm9sbE9mZnNldCk7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9JdGVtKGluZGV4OiBudW1iZXIsIGFsaWduOiBTY3JvbGxUb0FsaWduID0gJ2F1dG8nKTogdm9pZCB7XG4gICAgICBjb25zdCB7IGl0ZW1Db3VudCwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxPZmZzZXQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpKTtcblxuICAgICAgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LCB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cbiAgICAgIC8vIFRoaXMgaXMgYW4gZWRnZSBjYXNlIGZvciBsaXN0czsgbm9ybWFsbHkgdGhleSBvbmx5IHNjcm9sbCBpbiB0aGUgZG9taW5hbnQgZGlyZWN0aW9uLlxuICAgICAgbGV0IHNjcm9sbGJhclNpemUgPSAwO1xuICAgICAgaWYgKHRoaXMuX291dGVyUmVmKSB7XG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuICAgICAgICBpZiAobGF5b3V0ID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxXaWR0aCA+IG91dGVyUmVmLmNsaWVudFdpZHRoXG4gICAgICAgICAgICAgID8gZ2V0U2Nyb2xsYmFyU2l6ZSgpXG4gICAgICAgICAgICAgIDogMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY3JvbGxiYXJTaXplID1cbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbEhlaWdodCA+IG91dGVyUmVmLmNsaWVudEhlaWdodFxuICAgICAgICAgICAgICA/IGdldFNjcm9sbGJhclNpemUoKVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxUbyhcbiAgICAgICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoXG4gICAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBhbGlnbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICBzY3JvbGxiYXJTaXplXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiwgaW5pdGlhbFNjcm9sbE9mZnNldCwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBsYXlvdXQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNjcm9sbE9mZnNldCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBzY3JvbGxXaWR0aCB9ID0gb3V0ZXJSZWY7XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgaW5uZXJSZWYsXG4gICAgICAgIGlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgIGlubmVyVGFnTmFtZSxcbiAgICAgICAgaXRlbUNvdW50LFxuICAgICAgICBpdGVtRGF0YSxcbiAgICAgICAgaXRlbUtleSA9IGRlZmF1bHRJdGVtS2V5LFxuICAgICAgICBsYXlvdXQsXG4gICAgICAgIG91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgIG91dGVyVGFnTmFtZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICB3aWR0aCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICBjb25zdCBpc0hvcml6b250YWwgPVxuICAgICAgICBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgICAgY29uc3Qgb25TY3JvbGwgPSBpc0hvcml6b250YWxcbiAgICAgICAgPyB0aGlzLl9vblNjcm9sbEhvcml6b250YWxcbiAgICAgICAgOiB0aGlzLl9vblNjcm9sbFZlcnRpY2FsO1xuXG4gICAgICBjb25zdCBbc3RhcnRJbmRleCwgc3RvcEluZGV4XSA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKTtcblxuICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnRJbmRleDsgaW5kZXggPD0gc3RvcEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgIGtleTogaXRlbUtleShpbmRleCwgaXRlbURhdGEpLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUoaW5kZXgpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2JyxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBvblNjcm9sbCxcbiAgICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGhlaWdodDogaXNIb3Jpem9udGFsID8gJzEwMCUnIDogZXN0aW1hdGVkVG90YWxTaXplLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gZXN0aW1hdGVkVG90YWxTaXplIDogJzEwMCUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkOiAoXG4gICAgICBvdmVyc2NhblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVN0b3BJbmRleDogbnVtYmVyXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShcbiAgICAgIChcbiAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVTdG9wSW5kZXg6IG51bWJlclxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkOiBhbnkpOiBvbkl0ZW1zUmVuZGVyZWRDYWxsYmFjaykoe1xuICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4LFxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBfY2FsbE9uU2Nyb2xsOiAoXG4gICAgICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25TY3JvbGw6IGFueSk6IG9uU2Nyb2xsQ2FsbGJhY2spKHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgeyBpdGVtQ291bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgICAgY29uc3QgW1xuICAgICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVTdG9wSW5kZXgsXG4gICAgICAgICAgXSA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKFxuICAgICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVTdG9wSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoXG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIF9nZXRJdGVtU3R5bGU6IChpbmRleDogbnVtYmVyKSA9PiBPYmplY3Q7XG4gICAgX2dldEl0ZW1TdHlsZSA9IChpbmRleDogbnVtYmVyKTogT2JqZWN0ID0+IHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBpdGVtU2l6ZSwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBpdGVtU3R5bGVDYWNoZSA9IHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGl0ZW1TaXplLFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGxheW91dCxcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb25cbiAgICAgICk7XG5cbiAgICAgIGxldCBzdHlsZTtcbiAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcbiAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtpbmRleF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBnZXRJdGVtT2Zmc2V0KHRoaXMucHJvcHMsIGluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGdldEl0ZW1TaXplKHRoaXMucHJvcHMsIGluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcblxuICAgICAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID1cbiAgICAgICAgICBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgICAgICBjb25zdCBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICAgIGNvbnN0IG9mZnNldEhvcml6b250YWwgPSBpc0hvcml6b250YWwgPyBvZmZzZXQgOiAwO1xuICAgICAgICBpdGVtU3R5bGVDYWNoZVtpbmRleF0gPSBzdHlsZSA9IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICBsZWZ0OiBpc1J0bCA/IHVuZGVmaW5lZCA6IG9mZnNldEhvcml6b250YWwsXG4gICAgICAgICAgcmlnaHQ6IGlzUnRsID8gb2Zmc2V0SG9yaXpvbnRhbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0b3A6ICFpc0hvcml6b250YWwgPyBvZmZzZXQgOiAwLFxuICAgICAgICAgIGhlaWdodDogIWlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuXG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlOiAoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gSXRlbVN0eWxlQ2FjaGU7XG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZSgoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gKHt9KSk7XG5cbiAgICBfZ2V0UmFuZ2VUb1JlbmRlcigpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICBjb25zdCB7IGl0ZW1Db3VudCwgb3ZlcnNjYW5Db3VudCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaXNTY3JvbGxpbmcsIHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsT2Zmc2V0IH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoaXRlbUNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBzdG9wSW5kZXggPSBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50KVxuICAgICAgICAgIDogMTtcbiAgICAgIGNvbnN0IG92ZXJzY2FuRm9yd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudClcbiAgICAgICAgICA6IDE7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSxcbiAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHN0b3BJbmRleCxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgX29uU2Nyb2xsSG9yaXpvbnRhbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgY2xpZW50V2lkdGgsIHNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIH0gPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4ge1xuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGRpcmVjdGlvbiB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBsZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cbiAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihzY3JvbGxPZmZzZXQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfb25TY3JvbGxWZXJ0aWNhbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgY2xpZW50SGVpZ2h0LCBzY3JvbGxIZWlnaHQsIHNjcm9sbFRvcCB9ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cbiAgICAgICAgY29uc3Qgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfTtcblxuICAgIF9vdXRlclJlZlNldHRlciA9IChyZWY6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgeyBvdXRlclJlZiB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgdGhpcy5fb3V0ZXJSZWYgPSAoKHJlZjogYW55KTogSFRNTERpdkVsZW1lbnQpO1xuXG4gICAgICBpZiAodHlwZW9mIG91dGVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG91dGVyUmVmKHJlZik7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBvdXRlclJlZiAhPSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBvdXRlclJlZiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgb3V0ZXJSZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKVxuICAgICAgKSB7XG4gICAgICAgIG91dGVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IHJlcXVlc3RUaW1lb3V0KFxuICAgICAgICB0aGlzLl9yZXNldElzU2Nyb2xsaW5nLFxuICAgICAgICBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIF9yZXNldElzU2Nyb2xsaW5nID0gKCkgPT4ge1xuICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpc1Njcm9sbGluZzogZmFsc2UgfSwgKCkgPT4ge1xuICAgICAgICAvLyBDbGVhciBzdHlsZSBjYWNoZSBhZnRlciBzdGF0ZSB1cGRhdGUgaGFzIGJlZW4gY29tbWl0dGVkLlxuICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgIHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xLCBudWxsKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG59XG5cbi8vIE5PVEU6IEkgY29uc2lkZXJlZCBmdXJ0aGVyIHdyYXBwaW5nIGluZGl2aWR1YWwgaXRlbXMgd2l0aCBhIHB1cmUgTGlzdEl0ZW0gY29tcG9uZW50LlxuLy8gVGhpcyB3b3VsZCBhdm9pZCBldmVyIGNhbGxpbmcgdGhlIHJlbmRlciBmdW5jdGlvbiBmb3IgdGhlIHNhbWUgaW5kZXggbW9yZSB0aGFuIG9uY2UsXG4vLyBCdXQgaXQgd291bGQgYWxzbyBhZGQgdGhlIG92ZXJoZWFkIG9mIGEgbG90IG9mIGNvbXBvbmVudHMvZmliZXJzLlxuLy8gSSBhc3N1bWUgcGVvcGxlIGFscmVhZHkgZG8gdGhpcyAocmVuZGVyIGZ1bmN0aW9uIHJldHVybmluZyBhIGNsYXNzIGNvbXBvbmVudCksXG4vLyBTbyBteSBkb2luZyBpdCB3b3VsZCBqdXN0IHVubmVjZXNzYXJpbHkgZG91YmxlIHRoZSB3cmFwcGVycy5cblxuY29uc3QgdmFsaWRhdGVTaGFyZWRQcm9wcyA9IChcbiAge1xuICAgIGNoaWxkcmVuLFxuICAgIGRpcmVjdGlvbixcbiAgICBoZWlnaHQsXG4gICAgbGF5b3V0LFxuICAgIGlubmVyVGFnTmFtZSxcbiAgICBvdXRlclRhZ05hbWUsXG4gICAgd2lkdGgsXG4gIH06IFByb3BzPGFueT4sXG4gIHsgaW5zdGFuY2UgfTogU3RhdGVcbik6IHZvaWQgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICBpZiAoZGV2V2FybmluZ3NEaXJlY3Rpb24gJiYgIWRldldhcm5pbmdzRGlyZWN0aW9uLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgICBkZXZXYXJuaW5nc0RpcmVjdGlvbi5hZGQoaW5zdGFuY2UpO1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICdUaGUgZGlyZWN0aW9uIHByb3Agc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIChkZWZhdWx0KSBvciBcInJ0bFwiLiAnICtcbiAgICAgICAgICAgICAgJ1BsZWFzZSB1c2UgdGhlIGxheW91dCBwcm9wIHRvIHNwZWNpZnkgXCJ2ZXJ0aWNhbFwiIChkZWZhdWx0KSBvciBcImhvcml6b250YWxcIiBvcmllbnRhdGlvbi4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArXG4gICAgICAgICAgICBgXCIke2RpcmVjdGlvbn1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGxheW91dCkge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwibGF5b3V0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJob3Jpem9udGFsXCIgb3IgXCJ2ZXJ0aWNhbFwiLiAnICtcbiAgICAgICAgICAgIGBcIiR7bGF5b3V0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICtcbiAgICAgICAgICBgXCIke2NoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaXNIb3Jpem9udGFsICYmIHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQW4gaW52YWxpZCBcIndpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdIb3Jpem9udGFsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgK1xuICAgICAgICAgIGBcIiR7d2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGh9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWlzSG9yaXpvbnRhbCAmJiB0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdWZXJ0aWNhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArXG4gICAgICAgICAgYFwiJHtoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUxpc3RDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVMaXN0Q29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbmNvbnN0IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSA9IDUwO1xuXG50eXBlIFZhcmlhYmxlU2l6ZVByb3BzID0ge3xcbiAgZXN0aW1hdGVkSXRlbVNpemU6IG51bWJlcixcbiAgLi4uUHJvcHM8YW55Pixcbnx9O1xuXG50eXBlIGl0ZW1TaXplR2V0dGVyID0gKGluZGV4OiBudW1iZXIpID0+IG51bWJlcjtcblxudHlwZSBJdGVtTWV0YWRhdGEgPSB7fFxuICBvZmZzZXQ6IG51bWJlcixcbiAgc2l6ZTogbnVtYmVyLFxufH07XG50eXBlIEluc3RhbmNlUHJvcHMgPSB7fFxuICBpdGVtTWV0YWRhdGFNYXA6IHsgW2luZGV4OiBudW1iZXJdOiBJdGVtTWV0YWRhdGEgfSxcbiAgZXN0aW1hdGVkSXRlbVNpemU6IG51bWJlcixcbiAgbGFzdE1lYXN1cmVkSW5kZXg6IG51bWJlcixcbnx9O1xuXG5jb25zdCBnZXRJdGVtTWV0YWRhdGEgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4pOiBJdGVtTWV0YWRhdGEgPT4ge1xuICBjb25zdCB7IGl0ZW1TaXplIH0gPSAoKHByb3BzOiBhbnkpOiBWYXJpYWJsZVNpemVQcm9wcyk7XG4gIGNvbnN0IHsgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleCB9ID0gaW5zdGFuY2VQcm9wcztcblxuICBpZiAoaW5kZXggPiBsYXN0TWVhc3VyZWRJbmRleCkge1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgICAgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBsYXN0TWVhc3VyZWRJbmRleCArIDE7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgbGV0IHNpemUgPSAoKGl0ZW1TaXplOiBhbnkpOiBpdGVtU2l6ZUdldHRlcikoaSk7XG5cbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBzaXplLFxuICAgICAgfTtcblxuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IGluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW0gPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBvZmZzZXQ6IG51bWJlclxuKSA9PiB7XG4gIGNvbnN0IHsgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleCB9ID0gaW5zdGFuY2VQcm9wcztcblxuICBjb25zdCBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID1cbiAgICBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICAgIHByb3BzLFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4LFxuICAgICAgMCxcbiAgICAgIG9mZnNldFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBoaWdoOiBudW1iZXIsXG4gIGxvdzogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICBjb25zdCBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBtaWRkbGUsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2ggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBpbmRleDogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgY29uc3QgeyBpdGVtQ291bnQgfSA9IHByb3BzO1xuICBsZXQgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChcbiAgICBpbmRleCA8IGl0ZW1Db3VudCAmJlxuICAgIGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldFxuICApIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICBwcm9wcyxcbiAgICBpbnN0YW5jZVByb3BzLFxuICAgIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSxcbiAgICBNYXRoLmZsb29yKGluZGV4IC8gMiksXG4gICAgb2Zmc2V0XG4gICk7XG59O1xuXG5jb25zdCBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAoXG4gIHsgaXRlbUNvdW50IH06IFByb3BzPGFueT4sXG4gIHsgaXRlbU1ldGFkYXRhTWFwLCBlc3RpbWF0ZWRJdGVtU2l6ZSwgbGFzdE1lYXN1cmVkSW5kZXggfTogSW5zdGFuY2VQcm9wc1xuKSA9PiB7XG4gIGxldCB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgPSAwO1xuXG4gIC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG4gIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSBpdGVtQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGl0ZW1Db3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgY29uc3QgbnVtVW5tZWFzdXJlZEl0ZW1zID0gaXRlbUNvdW50IC0gbGFzdE1lYXN1cmVkSW5kZXggLSAxO1xuICBjb25zdCB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZEl0ZW1TaXplO1xuXG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbmNvbnN0IFZhcmlhYmxlU2l6ZUxpc3QgPSBjcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0LFxuXG4gIGdldEl0ZW1TaXplOiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZSxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG5cbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgeyBkaXJlY3Rpb24sIGhlaWdodCwgbGF5b3V0LCB3aWR0aCB9ID0gcHJvcHM7XG5cbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICBjb25zdCBzaXplID0gKCgoaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQpOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuXG4gICAgLy8gR2V0IGVzdGltYXRlZCB0b3RhbCBzaXplIGFmdGVyIEl0ZW1NZXRhZGF0YSBpcyBjb21wdXRlZCxcbiAgICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsU2l6ZSA9IGdldEVzdGltYXRlZFRvdGFsU2l6ZShwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG5cbiAgICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBpdGVtTWV0YWRhdGEuc2l6ZSArIHNjcm9sbGJhclNpemVcbiAgICApO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmXG4gICAgICAgIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplXG4gICAgICApIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGZpbmROZWFyZXN0SXRlbShwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KSxcblxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IGRpcmVjdGlvbiwgaGVpZ2h0LCBpdGVtQ291bnQsIGxheW91dCwgd2lkdGggfSA9IHByb3BzO1xuXG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbE9mZnNldCArIHNpemU7XG5cbiAgICBsZXQgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIGxldCBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGl0ZW1Db3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KTogSW5zdGFuY2VQcm9wcyB7XG4gICAgY29uc3QgeyBlc3RpbWF0ZWRJdGVtU2l6ZSB9ID0gKChwcm9wczogYW55KTogVmFyaWFibGVTaXplUHJvcHMpO1xuXG4gICAgY29uc3QgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRJdGVtU2l6ZTogZXN0aW1hdGVkSXRlbVNpemUgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXg6IC0xLFxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kZXggPSAoXG4gICAgICBpbmRleDogbnVtYmVyLFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGU/OiBib29sZWFuID0gdHJ1ZVxuICAgICkgPT4ge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IE1hdGgubWluKFxuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4LFxuICAgICAgICBpbmRleCAtIDFcbiAgICAgICk7XG5cbiAgICAgIC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IG9wdGltaXplIGZ1cnRoZXIgYnkgb25seSBldmljdGluZyBzdHlsZXMgYWZ0ZXIgdGhpcyBpbmRleCxcbiAgICAgIC8vIEJ1dCBzaW5jZSBzdHlsZXMgYXJlIG9ubHkgY2FjaGVkIHdoaWxlIHNjcm9sbGluZyBpcyBpbiBwcm9ncmVzcy1cbiAgICAgIC8vIEl0IHNlZW1zIGFuIHVubmVjZXNzYXJ5IG9wdGltaXphdGlvbi5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhhdCByZXNldEFmdGVySW5kZXgoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2Nyb2xsaW5nLlxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGZhbHNlLFxuXG4gIHZhbGlkYXRlUHJvcHM6ICh7IGl0ZW1TaXplIH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtU2l6ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAgIGBcIiR7aXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemV9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFZhcmlhYmxlU2l6ZUxpc3Q7XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUdyaWRDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlR3JpZENvbXBvbmVudCc7XG5cbmNvbnN0IEZpeGVkU2l6ZUdyaWQgPSBjcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0OiAoeyBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldENvbHVtbldpZHRoOiAoeyBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKSxcblxuICBnZXRSb3dPZmZzZXQ6ICh7IHJvd0hlaWdodCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSxcblxuICBnZXRSb3dIZWlnaHQ6ICh7IHJvd0hlaWdodCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6ICh7IHJvd0NvdW50LCByb3dIZWlnaHQgfTogUHJvcHM8YW55PikgPT5cbiAgICAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAqIHJvd0NvdW50LFxuXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6ICh7IGNvbHVtbkNvdW50LCBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+KSA9PlxuICAgICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgKiBjb2x1bW5Db3VudCxcblxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IChcbiAgICB7IGNvbHVtbkNvdW50LCBjb2x1bW5XaWR0aCwgd2lkdGggfTogUHJvcHM8YW55PixcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiB0eXBlb2YgdW5kZWZpbmVkLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGxhc3RDb2x1bW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBjb2x1bW5Db3VudCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgLSB3aWR0aFxuICAgICk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5taW4oXG4gICAgICBsYXN0Q29sdW1uT2Zmc2V0LFxuICAgICAgY29sdW1uSW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICBjb25zdCBtaW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBjb2x1bW5JbmRleCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgLVxuICAgICAgICB3aWR0aCArXG4gICAgICAgIHNjcm9sbGJhclNpemUgK1xuICAgICAgICAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0IC0gd2lkdGggJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQgKyB3aWR0aCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgY29uc3QgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbCh3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RDb2x1bW5PZmZzZXQgKyBNYXRoLmZsb29yKHdpZHRoIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdENvbHVtbk9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsTGVmdDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IChcbiAgICB7IHJvd0hlaWdodCwgaGVpZ2h0LCByb3dDb3VudCB9OiBQcm9wczxhbnk+LFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogdHlwZW9mIHVuZGVmaW5lZCxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsYXN0Um93T2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgcm93Q291bnQgKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAtIGhlaWdodFxuICAgICk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5taW4oXG4gICAgICBsYXN0Um93T2Zmc2V0LFxuICAgICAgcm93SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgcm93SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAtXG4gICAgICAgIGhlaWdodCArXG4gICAgICAgIHNjcm9sbGJhclNpemUgK1xuICAgICAgICAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWluT2Zmc2V0IC0gaGVpZ2h0ICYmIHNjcm9sbFRvcCA8PSBtYXhPZmZzZXQgKyBoZWlnaHQpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIGNvbnN0IG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgbWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdFJvd09mZnNldCArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdFJvd09mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbFRvcDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsVG9wIDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICB7IGNvbHVtbldpZHRoLCBjb2x1bW5Db3VudCB9OiBQcm9wczxhbnk+LFxuICAgIHNjcm9sbExlZnQ6IG51bWJlclxuICApOiBudW1iZXIgPT5cbiAgICBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgY29sdW1uQ291bnQgLSAxLFxuICAgICAgICBNYXRoLmZsb29yKHNjcm9sbExlZnQgLyAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpKVxuICAgICAgKVxuICAgICksXG5cbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogKFxuICAgIHsgY29sdW1uV2lkdGgsIGNvbHVtbkNvdW50LCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxMZWZ0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsZWZ0ID0gc3RhcnRJbmRleCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgbnVtVmlzaWJsZUNvbHVtbnMgPSBNYXRoLmNlaWwoXG4gICAgICAod2lkdGggKyBzY3JvbGxMZWZ0IC0gbGVmdCkgLyAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGNvbHVtbkNvdW50IC0gMSxcbiAgICAgICAgc3RhcnRJbmRleCArIG51bVZpc2libGVDb2x1bW5zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgICApXG4gICAgKTtcbiAgfSxcblxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgeyByb3dIZWlnaHQsIHJvd0NvdW50IH06IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsVG9wOiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4ocm93Q291bnQgLSAxLCBNYXRoLmZsb29yKHNjcm9sbFRvcCAvICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpKSlcbiAgICApLFxuXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICB7IHJvd0hlaWdodCwgcm93Q291bnQsIGhlaWdodCB9OiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxUb3A6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHRvcCA9IHN0YXJ0SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBudW1WaXNpYmxlUm93cyA9IE1hdGguY2VpbChcbiAgICAgIChoZWlnaHQgKyBzY3JvbGxUb3AgLSB0b3ApIC8gKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgcm93Q291bnQgLSAxLFxuICAgICAgICBzdGFydEluZGV4ICsgbnVtVmlzaWJsZVJvd3MgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICAgIClcbiAgICApO1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+KTogYW55IHtcbiAgICAvLyBOb29wXG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBjb2x1bW5XaWR0aCwgcm93SGVpZ2h0IH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgK1xuICAgICAgICAgICAgYFwiJHtcbiAgICAgICAgICAgICAgY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGhcbiAgICAgICAgICAgIH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArXG4gICAgICAgICAgICBgXCIke3Jvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHR9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZpeGVkU2l6ZUdyaWQ7XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUxpc3RDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVMaXN0Q29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbnR5cGUgSW5zdGFuY2VQcm9wcyA9IGFueTtcblxuY29uc3QgRml4ZWRTaXplTGlzdCA9IGNyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0OiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldEl0ZW1TaXplOiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6ICh7IGl0ZW1Db3VudCwgaXRlbVNpemUgfTogUHJvcHM8YW55PikgPT5cbiAgICAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpICogaXRlbUNvdW50LFxuXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiAoXG4gICAgeyBkaXJlY3Rpb24sIGhlaWdodCwgaXRlbUNvdW50LCBpdGVtU2l6ZSwgbGF5b3V0LCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICBjb25zdCBzaXplID0gKCgoaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQpOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IGxhc3RJdGVtT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgaXRlbUNvdW50ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSAtIHNpemVcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgbGFzdEl0ZW1PZmZzZXQsXG4gICAgICBpbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGluZGV4ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSAtXG4gICAgICAgIHNpemUgK1xuICAgICAgICAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpICtcbiAgICAgICAgc2Nyb2xsYmFyU2l6ZVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiZcbiAgICAgICAgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemVcbiAgICAgICkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIGNhc2UgJ2NlbnRlcic6IHtcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICBjb25zdCBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMlxuICAgICAgICApO1xuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKHNpemUgLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0SXRlbU9mZnNldCArIE1hdGguZmxvb3Ioc2l6ZSAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RJdGVtT2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgeyBpdGVtQ291bnQsIGl0ZW1TaXplIH06IFByb3BzPGFueT4sXG4gICAgb2Zmc2V0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgTWF0aC5mbG9vcihvZmZzZXQgLyAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpKSlcbiAgICApLFxuXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICB7IGRpcmVjdGlvbiwgaGVpZ2h0LCBpdGVtQ291bnQsIGl0ZW1TaXplLCBsYXlvdXQsIHdpZHRoIH06IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRJbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBudW1WaXNpYmxlSXRlbXMgPSBNYXRoLmNlaWwoXG4gICAgICAoc2l6ZSArIHNjcm9sbE9mZnNldCAtIG9mZnNldCkgLyAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGl0ZW1Db3VudCAtIDEsXG4gICAgICAgIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlSXRlbXMgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICAgIClcbiAgICApO1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+KTogYW55IHtcbiAgICAvLyBOb29wXG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+KTogdm9pZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICtcbiAgICAgICAgICAgIGBcIiR7aXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemV9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZpeGVkU2l6ZUxpc3Q7XG4iLCAiLy8gQGZsb3dcblxuLy8gUHVsbGVkIGZyb20gcmVhY3QtY29tcGF0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3ByZWFjdC1jb21wYXQvYmxvYi83YzVkZTAwZTdjODVlMmZmZDAxMWJmM2FmMDI4OTliNjNmNjk5ZDNhL3NyYy9pbmRleC5qcyNMMzQ5XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaGFsbG93RGlmZmVycyhwcmV2OiBPYmplY3QsIG5leHQ6IE9iamVjdCk6IGJvb2xlYW4ge1xuICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gcHJldikge1xuICAgIGlmICghKGF0dHJpYnV0ZSBpbiBuZXh0KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBuZXh0KSB7XG4gICAgaWYgKHByZXZbYXR0cmlidXRlXSAhPT0gbmV4dFthdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBzaGFsbG93RGlmZmVycyBmcm9tICcuL3NoYWxsb3dEaWZmZXJzJztcblxuLy8gQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW8oKS5cbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RtZW1vXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcmVFcXVhbChcbiAgcHJldlByb3BzOiBPYmplY3QsXG4gIG5leHRQcm9wczogT2JqZWN0XG4pOiBib29sZWFuIHtcbiAgY29uc3QgeyBzdHlsZTogcHJldlN0eWxlLCAuLi5wcmV2UmVzdCB9ID0gcHJldlByb3BzO1xuICBjb25zdCB7IHN0eWxlOiBuZXh0U3R5bGUsIC4uLm5leHRSZXN0IH0gPSBuZXh0UHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICAhc2hhbGxvd0RpZmZlcnMocHJldlN0eWxlLCBuZXh0U3R5bGUpICYmICFzaGFsbG93RGlmZmVycyhwcmV2UmVzdCwgbmV4dFJlc3QpXG4gICk7XG59XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGFyZUVxdWFsIGZyb20gJy4vYXJlRXF1YWwnO1xuaW1wb3J0IHNoYWxsb3dEaWZmZXJzIGZyb20gJy4vc2hhbGxvd0RpZmZlcnMnO1xuXG4vLyBDdXN0b20gc2hvdWxkQ29tcG9uZW50VXBkYXRlIGZvciBjbGFzcyBjb21wb25lbnRzLlxuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1jb21wb25lbnQuaHRtbCNzaG91bGRjb21wb25lbnR1cGRhdGVcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShcbiAgbmV4dFByb3BzOiBPYmplY3QsXG4gIG5leHRTdGF0ZTogT2JqZWN0XG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAhYXJlRXF1YWwodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBuZXh0U3RhdGUpXG4gICk7XG59XG4iLCAidmFyIF9leGNsdWRlZCA9IFtcImRhdGEtdGVzdC1zdWJqXCIsIFwiYXN5bmNcIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wcmVzc2VkXCIsIFwiY3VzdG9tT3B0aW9uVGV4dFwiLCBcImZ1bGxXaWR0aFwiLCBcImlkXCIsIFwiaW5wdXRSZWZcIiwgXCJpc0Nhc2VTZW5zaXRpdmVcIiwgXCJpc0NsZWFyYWJsZVwiLCBcImlzRGlzYWJsZWRcIiwgXCJpc0ludmFsaWRcIiwgXCJpc0xvYWRpbmdcIiwgXCJub1N1Z2dlc3Rpb25zXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkNyZWF0ZU9wdGlvblwiLCBcIm9uU2VhcmNoQ2hhbmdlXCIsIFwib3B0aW9uc1wiLCBcInBsYWNlaG9sZGVyXCIsIFwicmVuZGVyT3B0aW9uXCIsIFwicm93SGVpZ2h0XCIsIFwic2VsZWN0ZWRPcHRpb25zXCIsIFwic2luZ2xlU2VsZWN0aW9uXCIsIFwicHJlcGVuZFwiLCBcInNvcnRNYXRjaGVzQnlcIiwgXCJkZWxpbWl0ZXJcIiwgXCJhcHBlbmRcIiwgXCJhdXRvRm9jdXNcIiwgXCJ0cnVuY2F0aW9uUHJvcHNcIiwgXCJpbnB1dFBvcG92ZXJQcm9wc1wiLCBcIm9wdGlvbk1hdGNoZXJcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIEVsZW1lbnRzIHdpdGhpbiBFdWlDb21ib0JveCB3aGljaCB3b3VsZCBub3JtYWxseSBiZSB0YWJiYWJsZSAoaW5wdXRzLCBidXR0b25zKSBoYXZlIGJlZW4gcmVtb3ZlZFxuICogZnJvbSB0aGUgdGFiIG9yZGVyIHdpdGggdGFiaW5kZXg9ey0xfSBzbyB0aGF0IHdlIGNhbiBjb250cm9sIHRoZSBrZXlib2FyZCBuYXZpZ2F0aW9uIGludGVyZmFjZS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgUmVuZGVyV2l0aEV1aVRoZW1lLCBodG1sSWRHZW5lcmF0b3IsIGtleXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBsb2dpY2FsU3R5bGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBFdWlJbnB1dFBvcG92ZXIgfSBmcm9tICcuLi9wb3BvdmVyJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGV1aUZvcm1NYXhXaWR0aCB9IGZyb20gJy4uL2Zvcm0vZm9ybS5zdHlsZXMnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hpbmdPcHRpb25zLCBmbGF0dGVuT3B0aW9uR3JvdXBzLCBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlLCB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHksIGNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIgfSBmcm9tICcuL21hdGNoaW5nX29wdGlvbnMnO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hJbnB1dCB9IGZyb20gJy4vY29tYm9fYm94X2lucHV0L2NvbWJvX2JveF9pbnB1dCc7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbnNMaXN0IH0gZnJvbSAnLi9jb21ib19ib3hfb3B0aW9uc19saXN0JztcbmltcG9ydCB7IGV1aUNvbWJvQm94U3R5bGVzIGFzIHN0eWxlcyB9IGZyb20gJy4vY29tYm9fYm94LnN0eWxlcyc7XG5cbi8qKlxuICogQmVjYXVzZSBvZiBob3cgVHlwZVNjcmlwdCdzIExpYnJhcnlNYW5hZ2VkQXR0cmlidXRlcyBpcyBkZXNpZ25lZCB0byBoYW5kbGUgZGVmYXVsdFByb3BzIChodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9yZWxlYXNlLW5vdGVzL3R5cGVzY3JpcHQtMy0wLmh0bWwjc3VwcG9ydC1mb3ItZGVmYXVsdHByb3BzLWluLWpzeClcbiAqIHdlIGNhbid0IGRpcmVjdGx5IGV4cG9ydCB0aGUgYWJvdmUgUHJvcHMgZGVmaW5pdGlvbnMsIGFzIHRoZSBkZWZhdWx0ZWQgdmFsdWVzIGFyZSBub3QgbWFkZSBvcHRpb25hbFxuICogYXMgaXQgaXNuJ3QgcHJvY2Vzc2VkIGJ5IExpYnJhcnlNYW5hZ2VkQXR0cmlidXRlcy4gVG8gZ2V0IGFyb3VuZCB0aGlzLCB3ZTpcbiAqIC0gcmVtb3ZlIHRoZSBwcm9wcyB3aGljaCBoYXZlIGRlZmF1bHQgdmFsdWVzIGFwcGxpZWRcbiAqICAgLSBhZGRpdGlvbmFsbHkgcmUtZGVmaW5lIGBvcHRpb25zYCBhbmQgYHNlbGVjdGVkT3B0aW9uc2AgZGVmYXVsdHMsIG5lY2Vzc2FyeSBhcyBzdGF0aWMgbWVtYmVycyBjYW4ndCBhY2Nlc3MgZ2VuZXJpY3MgYW5kIGJlY29tZSBuZXZlcltdXG4gKiAtIGV4cG9ydCAoUHJvcHMgLSBEZWZhdWx0cykgJiBQYXJ0aWFsPERlZmF1bHRzPlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGluaXRpYWxTZWFyY2hWYWx1ZSA9ICcnO1xuZXhwb3J0IHZhciBFdWlDb21ib0JveCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlDb21ib0JveCgpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbWJvQm94KTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlDb21ib0JveCwgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic3RhdGVcIiwge1xuICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IC0xLFxuICAgICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgICAgaXNMaXN0T3BlbjogZmFsc2UsXG4gICAgICBtYXRjaGluZ09wdGlvbnM6IGdldE1hdGNoaW5nT3B0aW9ucyh7XG4gICAgICAgIG9wdGlvbnM6IF90aGlzLnByb3BzLm9wdGlvbnMsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uczogX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzZWFyY2hWYWx1ZTogaW5pdGlhbFNlYXJjaFZhbHVlLFxuICAgICAgICBvcHRpb25NYXRjaGVyOiBfdGhpcy5wcm9wcy5vcHRpb25NYXRjaGVyLFxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmU6IF90aGlzLnByb3BzLmlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgaXNQcmVGaWx0ZXJlZDogX3RoaXMucHJvcHMuYXN5bmMsXG4gICAgICAgIHNob3dQcmV2U2VsZWN0ZWQ6IEJvb2xlYW4oX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uKSxcbiAgICAgICAgc29ydE1hdGNoZXNCeTogX3RoaXMucHJvcHMuc29ydE1hdGNoZXNCeVxuICAgICAgfSksXG4gICAgICBzZWFyY2hWYWx1ZTogaW5pdGlhbFNlYXJjaFZhbHVlXG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJvb3RJZFwiLCBodG1sSWRHZW5lcmF0b3IoKSk7XG4gICAgLy8gUmVmc1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjb21ib0JveFJlZkluc3RhbmNlXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjb21ib0JveFJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNlYXJjaElucHV0UmVmSW5zdGFuY2VcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNlYXJjaElucHV0UmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgdmFyIF90aGlzJHByb3BzJGlucHV0UmVmLCBfdGhpcyRwcm9wcztcbiAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgICAoX3RoaXMkcHJvcHMkaW5wdXRSZWYgPSAoX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcykuaW5wdXRSZWYpID09PSBudWxsIHx8IF90aGlzJHByb3BzJGlucHV0UmVmID09PSB2b2lkIDAgfHwgX3RoaXMkcHJvcHMkaW5wdXRSZWYuY2FsbChfdGhpcyRwcm9wcywgcmVmKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibGlzdFJlZkluc3RhbmNlXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJsaXN0UmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMubGlzdFJlZkluc3RhbmNlID0gcmVmO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvcGVuTGlzdFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzTGlzdE9wZW46IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjbG9zZUxpc3RcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuY2xlYXJBY3RpdmVPcHRpb24oKTtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNMaXN0T3BlbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleFwiLCBmdW5jdGlvbiAoYW1vdW50KSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gb3B0aW9ucyBhdmFpbGFibGUsIGRvIG5vdGhpbmcuXG4gICAgICBpZiAoIV90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3JlZi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfcmVmLm1hdGNoaW5nT3B0aW9ucztcbiAgICAgICAgdmFyIG5leHRBY3RpdmVPcHRpb25JbmRleDtcbiAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgdXNlcidzIGtleWJvYXJkIG5hdmlnYXRpb24gb2YgdGhlIG1lbnUsIHRoZW4gd2UnbGwgZm9jdXNcbiAgICAgICAgICAvLyBlaXRoZXIgdGhlIGZpcnN0IG9yIGxhc3QgaXRlbS5cbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhbW91bnQgPCAwID8gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAtIDEgOiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IGFjdGl2ZU9wdGlvbkluZGV4ICsgYW1vdW50O1xuICAgICAgICAgIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA9PT0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHcm91cCB0aXRsZXMgYXJlIGluY2x1ZGVkIGluIG9wdGlvbiBsaXN0IGJ1dCBhcmUgbm90IHNlbGVjdGFibGVcbiAgICAgICAgLy8gU2tpcCBncm91cCB0aXRsZSBvcHRpb25zXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBhbW91bnQgPiAwID8gMSA6IC0xO1xuICAgICAgICB3aGlsZSAobWF0Y2hpbmdPcHRpb25zW25leHRBY3RpdmVPcHRpb25JbmRleF0uaXNHcm91cExhYmVsT3B0aW9uKSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbmV4dEFjdGl2ZU9wdGlvbkluZGV4ICsgZGlyZWN0aW9uO1xuICAgICAgICAgIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA9PT0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogbmV4dEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaGFzQWN0aXZlT3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCA+IC0xICYmIF90aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4IDwgX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmxlbmd0aDtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2xlYXJBY3RpdmVPcHRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogLTFcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjbGVhclNlYXJjaFZhbHVlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLm9uU2VhcmNoQ2hhbmdlKCcnKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYWRkQ3VzdG9tT3B0aW9uXCIsIGZ1bmN0aW9uIChpc0NvbnRhaW5lckJsdXIsIHNlYXJjaFZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IF90aGlzJHByb3BzMi5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgIG9uQ3JlYXRlT3B0aW9uID0gX3RoaXMkcHJvcHMyLm9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMyLm9wdGlvbnMsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMi5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzMi5zaW5nbGVTZWxlY3Rpb247XG4gICAgICB2YXIgbWF0Y2hlZE9wdGlvbiA9IF90aGlzLmRvZXNTZWFyY2hNYXRjaE9ubHlPcHRpb24oKTtcbiAgICAgIGlmIChtYXRjaGVkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vbkFkZE9wdGlvbihtYXRjaGVkT3B0aW9uLCBpc0NvbnRhaW5lckJsdXIpO1xuICAgICAgfVxuICAgICAgaWYgKCFvbkNyZWF0ZU9wdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIERvbid0IGJvdGhlciB0cnlpbmcgdG8gY3JlYXRlIGFuIG9wdGlvbiBpZiB0aGUgdXNlciBoYXNuJ3QgdHlwZWQgYW55dGhpbmcuXG4gICAgICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRG9uJ3QgY3JlYXRlIHRoZSB2YWx1ZSBpZiBpdCdzIGFscmVhZHkgYmVlbiBzZWxlY3RlZC5cbiAgICAgIGlmIChnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKHtcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlOiBpc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnNcbiAgICAgIH0pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIG5ldyBjdXN0b20gcGlsbCBpZiB0aGlzIGlzIGN1c3RvbSBpbnB1dCwgZXZlbiBpZiBpdCBwYXJ0aWFsbHkgbWF0Y2hlcyBhbiBvcHRpb24uXG4gICAgICB2YXIgaXNPcHRpb25DcmVhdGVkID0gb25DcmVhdGVPcHRpb24oc2VhcmNoVmFsdWUsIGZsYXR0ZW5PcHRpb25Hcm91cHMob3B0aW9ucykpO1xuXG4gICAgICAvLyBFeHBlY3QgdGhlIGNvbnN1bWVyIHRvIGJlIGV4cGxpY2l0IGluIHJlamVjdGluZyBhIGN1c3RvbSBvcHRpb24uXG4gICAgICBpZiAoaXNPcHRpb25DcmVhdGVkID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBfdGhpcy5jbGVhclNlYXJjaFZhbHVlKCk7XG4gICAgICBpZiAoQm9vbGVhbihzaW5nbGVTZWxlY3Rpb24pKSB7XG4gICAgICAgIC8vIEFkZGluZyBhIGN1c3RvbSBvcHRpb24gdG8gYSBzaW5nbGUgc2VsZWN0IHRoYXQgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBsaXN0IG9mIG9wdGlvbnNcbiAgICAgICAgX3RoaXMuY2xvc2VMaXN0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImRvZXNTZWFyY2hNYXRjaE9ubHlPcHRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGlzQ2FzZVNlbnNpdGl2ZSA9IF90aGlzLnByb3BzLmlzQ2FzZVNlbnNpdGl2ZTtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IF90aGlzLnN0YXRlLFxuICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRzdGF0ZS5tYXRjaGluZ09wdGlvbnMsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkc3RhdGUuc2VhcmNoVmFsdWU7XG4gICAgICBpZiAoIW1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHJldHVybjtcbiAgICAgIHZhciBpc01hdGNoV2l0aEdyb3VwID0gbWF0Y2hpbmdPcHRpb25zWzBdLmlzR3JvdXBMYWJlbE9wdGlvbjtcbiAgICAgIHZhciBpc09ubHlPcHRpb24gPSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoID09PSAoaXNNYXRjaFdpdGhHcm91cCA/IDIgOiAxKTtcbiAgICAgIGlmICghaXNPbmx5T3B0aW9uKSByZXR1cm47XG4gICAgICB2YXIgbWF0Y2hlZE9wdGlvbiA9IG1hdGNoaW5nT3B0aW9uc1tpc01hdGNoV2l0aEdyb3VwID8gMSA6IDBdO1xuICAgICAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hTdWJqZWN0ID0gdHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5KG1hdGNoZWRPcHRpb24ubGFiZWwsIGlzQ2FzZVNlbnNpdGl2ZSk7XG4gICAgICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gdHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5KHNlYXJjaFZhbHVlLCBpc0Nhc2VTZW5zaXRpdmUpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRTZWFyY2hTdWJqZWN0ID09PSBub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRPcHRpb247XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImFyZUFsbE9wdGlvbnNTZWxlY3RlZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczMub3B0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMzLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgYXN5bmMgPSBfdGhpcyRwcm9wczMuYXN5bmMsXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IF90aGlzJHByb3BzMy5pc0Nhc2VTZW5zaXRpdmU7XG4gICAgICAvLyBBc3N1bWUgaWYgdGhpcyBpcyBhc3luYyB0aGVuIHRoZXJlIGNvdWxkIGJlIGluZmluaXRlIG9wdGlvbnMuXG4gICAgICBpZiAoYXN5bmMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGZsYXR0ZW5PcHRpb25zID0gZmxhdHRlbk9wdGlvbkdyb3VwcyhvcHRpb25zKS5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pLCB7fSwge1xuICAgICAgICAgIGxhYmVsOiB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkob3B0aW9uLmxhYmVsLnRyaW0oKSwgaXNDYXNlU2Vuc2l0aXZlKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdmFyIG51bWJlck9mU2VsZWN0ZWRPcHRpb25zID0gMDtcbiAgICAgIHNlbGVjdGVkT3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgbGFiZWwgPSBfcmVmMi5sYWJlbDtcbiAgICAgICAgdmFyIHRyaW1tZWRMYWJlbCA9IHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eShsYWJlbC50cmltKCksIGlzQ2FzZVNlbnNpdGl2ZSk7XG4gICAgICAgIGlmIChmbGF0dGVuT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgIHJldHVybiBvcHRpb24ubGFiZWwgPT09IHRyaW1tZWRMYWJlbDtcbiAgICAgICAgfSkgIT09IC0xKSBudW1iZXJPZlNlbGVjdGVkT3B0aW9ucyArPSAxO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmxhdHRlbk9wdGlvbnMubGVuZ3RoID09PSBudW1iZXJPZlNlbGVjdGVkT3B0aW9ucztcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Db21ib0JveEZvY3VzXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJG9uRm9jdXMsIF90aGlzJHByb3BzNDtcbiAgICAgIChfdGhpcyRwcm9wcyRvbkZvY3VzID0gKF90aGlzJHByb3BzNCA9IF90aGlzLnByb3BzKS5vbkZvY3VzKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkZvY3VzID09PSB2b2lkIDAgfHwgX3RoaXMkcHJvcHMkb25Gb2N1cy5jYWxsKF90aGlzJHByb3BzNCwgZXZlbnQpO1xuICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZXRDdXN0b21PcHRpb25zXCIsIGZ1bmN0aW9uIChpc0NvbnRhaW5lckJsdXIpIHtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IF90aGlzLnN0YXRlLnNlYXJjaFZhbHVlO1xuICAgICAgdmFyIGRlbGltaXRlciA9IF90aGlzLnByb3BzLmRlbGltaXRlcjtcbiAgICAgIGlmIChkZWxpbWl0ZXIpIHtcbiAgICAgICAgc2VhcmNoVmFsdWUuc3BsaXQoZGVsaW1pdGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICBpZiAob3B0aW9uLmxlbmd0aCA+IDApIF90aGlzLmFkZEN1c3RvbU9wdGlvbihpc0NvbnRhaW5lckJsdXIsIG9wdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuYWRkQ3VzdG9tT3B0aW9uKGlzQ29udGFpbmVyQmx1ciwgc2VhcmNoVmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkNvbnRhaW5lckJsdXJcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBjbG9zZSB0aGUgb3B0aW9ucyBsaXN0LCB1bmxlc3MgdGhlIHVzZXIgY2xpY2tlZCBvbiBhbiBvcHRpb25cbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICAgIHZhciBmb2N1c2VkSW5PcHRpb25zTGlzdCA9IHJlbGF0ZWRUYXJnZXQgJiYgX3RoaXMubGlzdFJlZkluc3RhbmNlICYmIF90aGlzLmxpc3RSZWZJbnN0YW5jZS5jb250YWlucyhyZWxhdGVkVGFyZ2V0KTtcbiAgICAgIHZhciBmb2N1c2VkSW5JbnB1dCA9IHJlbGF0ZWRUYXJnZXQgJiYgX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSAmJiBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpO1xuICAgICAgaWYgKCFmb2N1c2VkSW5PcHRpb25zTGlzdCAmJiAhZm9jdXNlZEluSW5wdXQpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uQmx1ciwgX3RoaXMkcHJvcHM1O1xuICAgICAgICAoX3RoaXMkcHJvcHMkb25CbHVyID0gKF90aGlzJHByb3BzNSA9IF90aGlzLnByb3BzKS5vbkJsdXIpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uQmx1ciA9PT0gdm9pZCAwIHx8IF90aGlzJHByb3BzJG9uQmx1ci5jYWxsKF90aGlzJHByb3BzNSwgZXZlbnQpO1xuICAgICAgICBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJZiB0aGUgdXNlciB0YWJzIGF3YXkgb3IgY2hhbmdlcyBmb2N1cyB0byBhbm90aGVyIGVsZW1lbnQsIHRha2Ugd2hhdGV2ZXIgaW5wdXQgdGhleSd2ZVxuICAgICAgICAvLyB0eXBlZCBhbmQgY29udmVydCBpdCBpbnRvIGEgcGlsbCwgdG8gcHJldmVudCB0aGUgY29tYm8gYm94IGZyb20gbG9va2luZyBsaWtlIGEgdGV4dCBpbnB1dC5cbiAgICAgICAgaWYgKCFfdGhpcy5oYXNBY3RpdmVPcHRpb24oKSkge1xuICAgICAgICAgIF90aGlzLnNldEN1c3RvbU9wdGlvbnModHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZm9jdXNlZEluT3B0aW9uc0xpc3QpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL2lzc3Vlcy81MTc5XG4gICAgICAgIC8vIG5lZWQgdG8gcmVzdG9yZSBmb2N1cyB0byB0aGUgaW5wdXQgYm94IHdoZW4gY2xpY2tpbmcgbm9uLWludGVyYWN0aXZlIGVsZW1lbnRzXG5cbiAgICAgICAgLy8gZmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgY2FsbGluZyAuZm9jdXMoKSBkdXJpbmcgYSBibHVyIGV2ZW50XG4gICAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzNTc5XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF90aGlzJHNlYXJjaElucHV0UmVmSTtcbiAgICAgICAgICAoX3RoaXMkc2VhcmNoSW5wdXRSZWZJID0gX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkgPT09IG51bGwgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJID09PSB2b2lkIDAgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkb25LZXlEb3duLCBfdGhpcyRwcm9wczY7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaXNEaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgZXZlbnQucGVyc2lzdCgpOyAvLyBUT0RPOiBSZW1vdmUgb25jZSBSZWFjdCAxNiBzdXBwb3J0IGlzIGRyb3BwZWRcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19VUDpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgtMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGtleXMuQVJST1dfRE9XTjpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Uga2V5cy5FU0NBUEU6XG4gICAgICAgICAgaWYgKF90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIF90aGlzLmNsb3NlTGlzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBrZXlzLkVOVEVSOlxuICAgICAgICAgIC8vIERvIG5vdCBibG9jayBlbnRlciBrZXlwcmVzc2VzIGZvciB0aGUgY2xlYXIgYnV0dG9uIG9yIGRlbGV0ZSBzZWxlY3Rpb24gYnV0dG9uc1xuICAgICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGlmIChfdGhpcy5oYXNBY3RpdmVPcHRpb24oKSkge1xuICAgICAgICAgICAgICBfdGhpcy5vbkFkZE9wdGlvbihfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnNbX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXhdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIF90aGlzLnNldEN1c3RvbU9wdGlvbnMoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBrZXlzLlRBQjpcbiAgICAgICAgICAvLyBEaXNhbGxvdyB0YWJiaW5nIHdoZW4gdGhlIHVzZXIgaXMgbmF2aWdhdGluZyB0aGUgb3B0aW9ucy5cbiAgICAgICAgICBpZiAoX3RoaXMuaGFzQWN0aXZlT3B0aW9uKCkgJiYgX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAoX3RoaXMkcHJvcHMkb25LZXlEb3duID0gKF90aGlzJHByb3BzNiA9IF90aGlzLnByb3BzKS5vbktleURvd24pID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uS2V5RG93biA9PT0gdm9pZCAwIHx8IF90aGlzJHByb3BzJG9uS2V5RG93bi5jYWxsKF90aGlzJHByb3BzNiwgZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbk9wdGlvbkVudGVyS2V5XCIsIGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgIF90aGlzLm9uQWRkT3B0aW9uKG9wdGlvbik7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uT3B0aW9uQ2xpY2tcIiwgZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgX3RoaXMub25BZGRPcHRpb24ob3B0aW9uKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25BZGRPcHRpb25cIiwgZnVuY3Rpb24gKGFkZGVkT3B0aW9uLCBpc0NvbnRhaW5lckJsdXIpIHtcbiAgICAgIGlmIChhZGRlZE9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHM3Lm9uQ2hhbmdlLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczcuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb25Qcm9wID0gX3RoaXMkcHJvcHM3LnNpbmdsZVNlbGVjdGlvbjtcbiAgICAgIHZhciBzaW5nbGVTZWxlY3Rpb24gPSBCb29sZWFuKHNpbmdsZVNlbGVjdGlvblByb3ApO1xuICAgICAgdmFyIGNoYW5nZU9wdGlvbnMgPSBzaW5nbGVTZWxlY3Rpb24gPyBbYWRkZWRPcHRpb25dIDogc2VsZWN0ZWRPcHRpb25zLmNvbmNhdChhZGRlZE9wdGlvbik7XG4gICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwIHx8IG9uQ2hhbmdlKGNoYW5nZU9wdGlvbnMpO1xuICAgICAgX3RoaXMuY2xlYXJTZWFyY2hWYWx1ZSgpO1xuICAgICAgX3RoaXMuY2xlYXJBY3RpdmVPcHRpb24oKTtcbiAgICAgIGlmICghaXNDb250YWluZXJCbHVyKSB7XG4gICAgICAgIHZhciBfdGhpcyRzZWFyY2hJbnB1dFJlZkkyO1xuICAgICAgICAoX3RoaXMkc2VhcmNoSW5wdXRSZWZJMiA9IF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpID09PSBudWxsIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSTIgPT09IHZvaWQgMCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkkyLmZvY3VzKCk7XG4gICAgICB9XG4gICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLmNsb3NlTGlzdCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmluZGV4T2YoYWRkZWRPcHRpb24pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvblJlbW92ZU9wdGlvblwiLCBmdW5jdGlvbiAocmVtb3ZlZE9wdGlvbikge1xuICAgICAgdmFyIF90aGlzJHByb3BzOCA9IF90aGlzLnByb3BzLFxuICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzOC5vbkNoYW5nZSxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM4LnNlbGVjdGVkT3B0aW9ucztcbiAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgfHwgb25DaGFuZ2Uoc2VsZWN0ZWRPcHRpb25zLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24gIT09IHJlbW92ZWRPcHRpb247XG4gICAgICB9KSk7XG4gICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjbGVhclNlbGVjdGVkT3B0aW9uc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkb25DaGFuZ2UsIF90aGlzJHByb3BzOSwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJMztcbiAgICAgIChfdGhpcyRwcm9wcyRvbkNoYW5nZSA9IChfdGhpcyRwcm9wczkgPSBfdGhpcy5wcm9wcykub25DaGFuZ2UpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uQ2hhbmdlID09PSB2b2lkIDAgfHwgX3RoaXMkcHJvcHMkb25DaGFuZ2UuY2FsbChfdGhpcyRwcm9wczksIFtdKTtcblxuICAgICAgLy8gQ2xpY2tpbmcgdGhlIGNsZWFyIGJ1dHRvbiB3aWxsIGFsc28gY2F1c2UgaXQgdG8gZGlzYXBwZWFyLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBmb2N1c1xuICAgICAgLy8gc2hpZnRpbmcgdW5leHBlY3RlZGx5IHRvIHRoZSBib2R5IGVsZW1lbnQgc28gd2Ugc2V0IGl0IHRvIHRoZSBpbnB1dCB3aGljaCBpcyBtb3JlIHJlYXNvbmFibGUsXG4gICAgICAoX3RoaXMkc2VhcmNoSW5wdXRSZWZJMyA9IF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpID09PSBudWxsIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSTMgPT09IHZvaWQgMCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkkzLmZvY3VzKCk7XG4gICAgICBpZiAoIV90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Db21ib0JveENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRzZWFyY2hJbnB1dFJlZkk0O1xuICAgICAgLy8gV2hlbiB0aGUgdXNlciBjbGlja3MgYW55d2hlcmUgb24gdGhlIGJveCwgZW50ZXIgdGhlIGludGVyYWN0aW9uIHN0YXRlLlxuICAgICAgKF90aGlzJHNlYXJjaElucHV0UmVmSTQgPSBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSA9PT0gbnVsbCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkk0ID09PSB2b2lkIDAgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJNC5mb2N1cygpO1xuXG4gICAgICAvLyBJZiB0aGUgdXNlciBkb2VzIHRoaXMgZnJvbSBhIHN0YXRlIGluIHdoaWNoIGFuIG9wdGlvbiBoYXMgZm9jdXMsIHRoZW4gd2UgbmVlZCB0byByZXNldCBpdCBvciBjbGVhciBpdC5cbiAgICAgIGlmIChCb29sZWFuKF90aGlzLnByb3BzLnNpbmdsZVNlbGVjdGlvbikgJiYgX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb25JbmRleCA9IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgIHJldHVybiBvcHRpb24ubGFiZWwgPT09IF90aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9uc1swXS5sYWJlbCAmJiBvcHRpb24ua2V5ID09PSBfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnNbMF0ua2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBzZWxlY3RlZE9wdGlvbkluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuY2xlYXJBY3RpdmVPcHRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25PcGVuTGlzdENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRzZWFyY2hJbnB1dFJlZkk1O1xuICAgICAgKF90aGlzJHNlYXJjaElucHV0UmVmSTUgPSBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSA9PT0gbnVsbCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkk1ID09PSB2b2lkIDAgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJNS5mb2N1cygpO1xuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uT3B0aW9uTGlzdFNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkc2VhcmNoSW5wdXRSZWZJNjtcbiAgICAgIChfdGhpcyRzZWFyY2hJbnB1dFJlZkk2ID0gX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkgPT09IG51bGwgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJNiA9PT0gdm9pZCAwIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSTYuZm9jdXMoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25TZWFyY2hDaGFuZ2VcIiwgZnVuY3Rpb24gKHNlYXJjaFZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMCA9IF90aGlzLnByb3BzLFxuICAgICAgICBvblNlYXJjaENoYW5nZSA9IF90aGlzJHByb3BzMTAub25TZWFyY2hDaGFuZ2UsXG4gICAgICAgIGRlbGltaXRlciA9IF90aGlzJHByb3BzMTAuZGVsaW1pdGVyO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWVcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNlYXJjaFZhbHVlICYmIF90aGlzLnN0YXRlLmlzTGlzdE9wZW4gPT09IGZhbHNlKSB7XG4gICAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob25TZWFyY2hDaGFuZ2UpIHtcbiAgICAgICAgICB2YXIgaGFzTWF0Y2hpbmdPcHRpb25zID0gX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmxlbmd0aCA+IDA7XG4gICAgICAgICAgb25TZWFyY2hDaGFuZ2Uoc2VhcmNoVmFsdWUsIGhhc01hdGNoaW5nT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGRlbGltaXRlciAmJiBzZWFyY2hWYWx1ZS5lbmRzV2l0aChkZWxpbWl0ZXIpKSB7XG4gICAgICAgIF90aGlzLnNldEN1c3RvbU9wdGlvbnMoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpQ29tYm9Cb3gsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUNvbWJvQm94LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGRhdGFUZXN0U3ViaiA9IF90aGlzJHByb3BzMTFbJ2RhdGEtdGVzdC1zdWJqJ10sXG4gICAgICAgIGFzeW5jID0gX3RoaXMkcHJvcHMxMS5hc3luYyxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMxMS5jbGFzc05hbWUsXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczExLmNvbXByZXNzZWQsXG4gICAgICAgIGN1c3RvbU9wdGlvblRleHQgPSBfdGhpcyRwcm9wczExLmN1c3RvbU9wdGlvblRleHQsXG4gICAgICAgIGZ1bGxXaWR0aCA9IF90aGlzJHByb3BzMTEuZnVsbFdpZHRoLFxuICAgICAgICBpZCA9IF90aGlzJHByb3BzMTEuaWQsXG4gICAgICAgIGlucHV0UmVmID0gX3RoaXMkcHJvcHMxMS5pbnB1dFJlZixcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlID0gX3RoaXMkcHJvcHMxMS5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgIGlzQ2xlYXJhYmxlID0gX3RoaXMkcHJvcHMxMS5pc0NsZWFyYWJsZSxcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMTEuaXNEaXNhYmxlZCxcbiAgICAgICAgaXNJbnZhbGlkID0gX3RoaXMkcHJvcHMxMS5pc0ludmFsaWQsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMTEuaXNMb2FkaW5nLFxuICAgICAgICBub1N1Z2dlc3Rpb25zID0gX3RoaXMkcHJvcHMxMS5ub1N1Z2dlc3Rpb25zLFxuICAgICAgICBvbkJsdXIgPSBfdGhpcyRwcm9wczExLm9uQmx1cixcbiAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wczExLm9uQ2hhbmdlLFxuICAgICAgICBvbkNyZWF0ZU9wdGlvbiA9IF90aGlzJHByb3BzMTEub25DcmVhdGVPcHRpb24sXG4gICAgICAgIG9uU2VhcmNoQ2hhbmdlID0gX3RoaXMkcHJvcHMxMS5vblNlYXJjaENoYW5nZSxcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMTEub3B0aW9ucyxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczExLnBsYWNlaG9sZGVyLFxuICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczExLnJlbmRlck9wdGlvbixcbiAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHMxMS5yb3dIZWlnaHQsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMTEuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczExLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzMTEucHJlcGVuZCxcbiAgICAgICAgc29ydE1hdGNoZXNCeSA9IF90aGlzJHByb3BzMTEuc29ydE1hdGNoZXNCeSxcbiAgICAgICAgZGVsaW1pdGVyID0gX3RoaXMkcHJvcHMxMS5kZWxpbWl0ZXIsXG4gICAgICAgIGFwcGVuZCA9IF90aGlzJHByb3BzMTEuYXBwZW5kLFxuICAgICAgICBhdXRvRm9jdXMgPSBfdGhpcyRwcm9wczExLmF1dG9Gb2N1cyxcbiAgICAgICAgdHJ1bmNhdGlvblByb3BzID0gX3RoaXMkcHJvcHMxMS50cnVuY2F0aW9uUHJvcHMsXG4gICAgICAgIGlucHV0UG9wb3ZlclByb3BzID0gX3RoaXMkcHJvcHMxMS5pbnB1dFBvcG92ZXJQcm9wcyxcbiAgICAgICAgb3B0aW9uTWF0Y2hlciA9IF90aGlzJHByb3BzMTEub3B0aW9uTWF0Y2hlcixcbiAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHMxMVsnYXJpYS1sYWJlbCddLFxuICAgICAgICBhcmlhTGFiZWxsZWRieSA9IF90aGlzJHByb3BzMTFbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMTEsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRzdGF0ZTIuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgIGhhc0ZvY3VzID0gX3RoaXMkc3RhdGUyLmhhc0ZvY3VzLFxuICAgICAgICBpc0xpc3RPcGVuID0gX3RoaXMkc3RhdGUyLmlzTGlzdE9wZW4sXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkc3RhdGUyLnNlYXJjaFZhbHVlLFxuICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRzdGF0ZTIubWF0Y2hpbmdPcHRpb25zO1xuXG4gICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIElEIGlmIHVzZXJzIGRvbid0IHBhc3Mgb25lIGFzIGEgcHJvcFxuICAgICAgdmFyIGlucHV0SWQgPSBpZCAhPT0gbnVsbCAmJiBpZCAhPT0gdm9pZCAwID8gaWQgOiB0aGlzLnJvb3RJZCgnX2V1aS1jb21ib2JveC1pZCcpO1xuXG4gICAgICAvLyBWaXN1YWxseSBpbmRpY2F0ZSB0aGUgY29tYm9ib3ggaXMgaW4gYW4gaW52YWxpZCBzdGF0ZSBpZiBpdCBoYXMgbG9zdCBmb2N1cyBidXQgdGhlcmUgaXMgdGV4dCBlbnRlcmVkIGluIHRoZSBpbnB1dC5cbiAgICAgIC8vIFdoZW4gY3VzdG9tIG9wdGlvbnMgYXJlIGRpc2FibGVkIGFuZCB0aGUgdXNlciBsZWF2ZXMgdGhlIGNvbWJvIGJveCBhZnRlciBlbnRlcmluZyB0ZXh0IHRoYXQgZG9lcyBub3QgbWF0Y2ggYW55XG4gICAgICAvLyBvcHRpb25zLCB0aGlzIHRlbGxzIHRoZSB1c2VyIHRoYXQgdGhleSd2ZSBlbnRlcmVkIGludmFsaWQgaW5wdXQuXG4gICAgICB2YXIgbWFya0FzSW52YWxpZCA9ICEhKGlzSW52YWxpZCB8fCAoaGFzRm9jdXMgPT09IGZhbHNlIHx8IGlzTGlzdE9wZW4gPT09IGZhbHNlKSAmJiBzZWFyY2hWYWx1ZSk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbWJvQm94JywgY2xhc3NOYW1lLCB7XG4gICAgICAgICdldWlDb21ib0JveC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAgICAgJ2V1aUNvbWJvQm94LWlzSW52YWxpZCc6IG1hcmtBc0ludmFsaWQsXG4gICAgICAgICdldWlDb21ib0JveC1pc09wZW4nOiBpc0xpc3RPcGVuXG4gICAgICB9KTtcbiAgICAgIHZhciB2YWx1ZSA9IHNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24gKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbi5sYWJlbDtcbiAgICAgIH0pLmpvaW4oJywgJyk7XG4gICAgICB2YXIgb3B0aW9uc0xpc3Q7XG4gICAgICBpZiAoIW5vU3VnZ2VzdGlvbnMgJiYgaXNMaXN0T3Blbikge1xuICAgICAgICB2YXIgb3B0aW9uc0xpc3REYXRhVGVzdFN1YmogPSBkYXRhVGVzdFN1YmogPyBcIlwiLmNvbmNhdChkYXRhVGVzdFN1YmosIFwiLW9wdGlvbnNMaXN0XCIpIDogdW5kZWZpbmVkO1xuICAgICAgICBvcHRpb25zTGlzdCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94Lmxpc3Rib3hBcmlhTGFiZWxcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkNob29zZSBmcm9tIHRoZSBmb2xsb3dpbmcgb3B0aW9uc1wiXG4gICAgICAgIH0sIGZ1bmN0aW9uIChsaXN0Ym94QXJpYUxhYmVsKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwge1xuICAgICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IF90aGlzMi5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICAgIGFyZUFsbE9wdGlvbnNTZWxlY3RlZDogX3RoaXMyLmFyZUFsbE9wdGlvbnNTZWxlY3RlZCgpLFxuICAgICAgICAgICAgY3VzdG9tT3B0aW9uVGV4dDogY3VzdG9tT3B0aW9uVGV4dCxcbiAgICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogb3B0aW9uc0xpc3REYXRhVGVzdFN1YmosXG4gICAgICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgICAgIGlzQ2FzZVNlbnNpdGl2ZTogaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgICAgICBsaXN0UmVmOiBfdGhpczIubGlzdFJlZkNhbGxiYWNrLFxuICAgICAgICAgICAgbWF0Y2hpbmdPcHRpb25zOiBtYXRjaGluZ09wdGlvbnMsXG4gICAgICAgICAgICBvbkNsb3NlTGlzdDogX3RoaXMyLmNsb3NlTGlzdCxcbiAgICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uOiBvbkNyZWF0ZU9wdGlvbixcbiAgICAgICAgICAgIG9uT3B0aW9uQ2xpY2s6IF90aGlzMi5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgICAgb25PcHRpb25FbnRlcktleTogX3RoaXMyLm9uT3B0aW9uRW50ZXJLZXksXG4gICAgICAgICAgICBvblNjcm9sbDogX3RoaXMyLm9uT3B0aW9uTGlzdFNjcm9sbCxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3Rpb246IHNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICAgIHJlbmRlck9wdGlvbjogcmVuZGVyT3B0aW9uLFxuICAgICAgICAgICAgcm9vdElkOiBfdGhpczIucm9vdElkLFxuICAgICAgICAgICAgcm93SGVpZ2h0OiByb3dIZWlnaHQsXG4gICAgICAgICAgICBzY3JvbGxUb0luZGV4OiBhY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgICAgZGVsaW1pdGVyOiBkZWxpbWl0ZXIsXG4gICAgICAgICAgICBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlOiBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgbGlzdGJveEFyaWFMYWJlbDogbGlzdGJveEFyaWFMYWJlbCxcbiAgICAgICAgICAgIHRydW5jYXRpb25Qcm9wczogdHJ1bmNhdGlvblByb3BzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEV1aUNvbWJvQm94IGZvbGxvd3MgdGhlIFdBSS1BUklBIDEuMiBzcGVjIGZvciBlZGl0YWJsZSBjb21ib2JveGVzXG4gICAgICAgICAqIHdpdGggbGlzdCBhdXRvY29tcGxldGUuIFRoaXMgcGF0dGVybiBpcyBhbiBpbXByb3ZlbWVudCBvbiB0aGUgdXNlclxuICAgICAgICAgKiBleHBlcmllbmNlIGZvciBzY3JlZW4gcmVhZGVycyBvdmVyIHRoZSBXQUktQVJJQSAxLjEgcGF0dGVybi5cbiAgICAgICAgICpcbiAgICAgICAgICogaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjIvZXhhbXBsZXMvY29tYm9ib3gvY29tYm9ib3gtYXV0b2NvbXBsZXRlLWxpc3QuaHRtbFxuICAgICAgICAgKi9cbiAgICAgICAgX19fRW1vdGlvbkpTWChSZW5kZXJXaXRoRXVpVGhlbWUsIG51bGwsIGZ1bmN0aW9uIChldWlUaGVtZSkge1xuICAgICAgICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUNvbWJvQm94LCBmdWxsV2lkdGggPyBzdHlsZXMuZnVsbFdpZHRoIDogbG9naWNhbFN0eWxlKCdtYXgtd2lkdGgnLCBldWlGb3JtTWF4V2lkdGgoZXVpVGhlbWUpKV07XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgY3NzOiBjc3NTdHlsZXNcbiAgICAgICAgICB9LCByZXN0LCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGRhdGFUZXN0U3ViaixcbiAgICAgICAgICAgIG9uS2V5RG93bjogX3RoaXMyLm9uS2V5RG93bixcbiAgICAgICAgICAgIG9uQmx1cjogX3RoaXMyLm9uQ29udGFpbmVyQmx1cixcbiAgICAgICAgICAgIHJlZjogX3RoaXMyLmNvbWJvQm94UmVmQ2FsbGJhY2tcbiAgICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlJbnB1dFBvcG92ZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgICAgICAgICAgcGFuZWxQYWRkaW5nU2l6ZTogXCJub25lXCIsXG4gICAgICAgICAgICBkaXNhYmxlRm9jdXNUcmFwOiB0cnVlLFxuICAgICAgICAgICAgY2xvc2VPblNjcm9sbDogdHJ1ZVxuICAgICAgICAgIH0sIGlucHV0UG9wb3ZlclByb3BzLCB7XG4gICAgICAgICAgICBpc09wZW46IGlzTGlzdE9wZW4sXG4gICAgICAgICAgICBjbG9zZVBvcG92ZXI6IF90aGlzMi5jbG9zZUxpc3QsXG4gICAgICAgICAgICBpbnB1dDogX19fRW1vdGlvbkpTWChFdWlDb21ib0JveElucHV0LCB7XG4gICAgICAgICAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICAgICAgICAgIGZvY3VzZWRPcHRpb25JZDogX3RoaXMyLmhhc0FjdGl2ZU9wdGlvbigpID8gX3RoaXMyLnJvb3RJZChcIl9vcHRpb24tXCIuY29uY2F0KF90aGlzMi5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCkpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgICAgICAgaGFzU2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCxcbiAgICAgICAgICAgICAgaWQ6IGlucHV0SWQsXG4gICAgICAgICAgICAgIGlucHV0UmVmOiBfdGhpczIuc2VhcmNoSW5wdXRSZWZDYWxsYmFjayxcbiAgICAgICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgaXNMaXN0T3BlbjogaXNMaXN0T3BlbixcbiAgICAgICAgICAgICAgbm9JY29uOiAhIW5vU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczIub25TZWFyY2hDaGFuZ2UsXG4gICAgICAgICAgICAgIG9uQ2xlYXI6IGlzQ2xlYXJhYmxlICYmICFpc0Rpc2FibGVkID8gX3RoaXMyLmNsZWFyU2VsZWN0ZWRPcHRpb25zIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBvbkNsaWNrOiBfdGhpczIub25Db21ib0JveENsaWNrLFxuICAgICAgICAgICAgICBvbkNsb3NlTGlzdENsaWNrOiBfdGhpczIuY2xvc2VMaXN0LFxuICAgICAgICAgICAgICBvbkZvY3VzOiBfdGhpczIub25Db21ib0JveEZvY3VzLFxuICAgICAgICAgICAgICBvbk9wZW5MaXN0Q2xpY2s6IF90aGlzMi5vbk9wZW5MaXN0Q2xpY2ssXG4gICAgICAgICAgICAgIG9uUmVtb3ZlT3B0aW9uOiBfdGhpczIub25SZW1vdmVPcHRpb24sXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgcm9vdElkOiBfdGhpczIucm9vdElkLFxuICAgICAgICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgICAgICBzaW5nbGVTZWxlY3Rpb246IHNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICBhcHBlbmQ6IHNpbmdsZVNlbGVjdGlvbiA/IGFwcGVuZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcHJlcGVuZDogc2luZ2xlU2VsZWN0aW9uID8gcHJlcGVuZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgICAgICAgIGlzSW52YWxpZDogbWFya0FzSW52YWxpZCxcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbGxlZGJ5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pLCBvcHRpb25zTGlzdCkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YXIgYXN5bmMgPSBuZXh0UHJvcHMuYXN5bmMsXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IG5leHRQcm9wcy5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgIG9wdGlvbnMgPSBuZXh0UHJvcHMub3B0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gbmV4dFByb3BzLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gbmV4dFByb3BzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgc29ydE1hdGNoZXNCeSA9IG5leHRQcm9wcy5zb3J0TWF0Y2hlc0J5LFxuICAgICAgICBvcHRpb25NYXRjaGVyID0gbmV4dFByb3BzLm9wdGlvbk1hdGNoZXI7XG4gICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSBwcmV2U3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gcHJldlN0YXRlLnNlYXJjaFZhbHVlO1xuXG4gICAgICAvLyBDYWxjdWxhdGUgYW5kIGNhY2hlIHRoZSBvcHRpb25zIHdoaWNoIG1hdGNoIHRoZSBzZWFyY2hWYWx1ZSwgYmVjYXVzZSB3ZSB1c2UgdGhpcyBpbmZvcm1hdGlvblxuICAgICAgLy8gaW4gbXVsdGlwbGUgcGxhY2VzIGFuZCBpdCB3b3VsZCBiZSBleHBlbnNpdmUgdG8gY2FsY3VsYXRlIHJlcGVhdGVkbHkuXG4gICAgICB2YXIgbWF0Y2hpbmdPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKHtcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlOiBpc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQ6IGFzeW5jLFxuICAgICAgICBzaG93UHJldlNlbGVjdGVkOiBCb29sZWFuKHNpbmdsZVNlbGVjdGlvbiksXG4gICAgICAgIHNvcnRNYXRjaGVzQnk6IHNvcnRNYXRjaGVzQnksXG4gICAgICAgIG9wdGlvbk1hdGNoZXI6IG9wdGlvbk1hdGNoZXJcbiAgICAgIH0pO1xuICAgICAgdmFyIHN0YXRlVXBkYXRlID0ge1xuICAgICAgICBtYXRjaGluZ09wdGlvbnM6IG1hdGNoaW5nT3B0aW9uc1xuICAgICAgfTtcbiAgICAgIGlmIChhY3RpdmVPcHRpb25JbmRleCA+PSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHN0YXRlVXBkYXRlLmFjdGl2ZU9wdGlvbkluZGV4ID0gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGVVcGRhdGU7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpQ29tYm9Cb3gsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgYXN5bmM6IGZhbHNlLFxuICBjb21wcmVzc2VkOiBmYWxzZSxcbiAgZnVsbFdpZHRoOiBmYWxzZSxcbiAgaXNDbGVhcmFibGU6IHRydWUsXG4gIG9wdGlvbnM6IFtdLFxuICBzZWxlY3RlZE9wdGlvbnM6IFtdLFxuICBzaW5nbGVTZWxlY3Rpb246IGZhbHNlLFxuICBwcmVwZW5kOiB1bmRlZmluZWQsXG4gIGFwcGVuZDogdW5kZWZpbmVkLFxuICBzb3J0TWF0Y2hlc0J5OiAnbm9uZScsXG4gIG9wdGlvbk1hdGNoZXI6IGNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIoKVxufSk7XG5FdWlDb21ib0JveC5wcm9wVHlwZXMgPSB7XG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgbGlzdCBvZiBvcHRpb25zIGFzeW5jaHJvbm91c2x5XG4gICAgICovXG4gIGFzeW5jOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFdoZW4gYHRydWVgIGNyZWF0ZXMgYSBzaG9ydGVyIGhlaWdodCBpbnB1dFxuICAgICAqL1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCBleHBhbmRzIHRvIHRoZSBlbnRpcmUgd2lkdGggYXZhaWxhYmxlXG4gICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBTaG93cyBhIGJ1dHRvbiB0aGF0IHF1aWNrbHkgY2xlYXJzIGFueSBpbnB1dFxuICAgICAqL1xuICBpc0NsZWFyYWJsZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIGlucHV0XG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBTd2FwcyB0aGUgZHJvcGRvd24gb3B0aW9ucyBmb3IgYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogRG9lc24ndCBzaG93IHRoZSBzdWdnZXN0aW9ucyBsaXN0L2Ryb3Bkb3duXG4gICAgICovXG4gIG5vU3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5ib29sLFxuICBvbkJsdXI6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIENhbGxlZCBldmVyeSB0aW1lIHRoZSBxdWVyeSBpbiB0aGUgY29tYm8gYm94IGlzIHBhcnNlZFxuICAgICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5hbnksXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQ2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIHRleHQgcXVlcnkgaW4gdGhlIHNlYXJjaCBib3ggaXMgcGFyc2VkXG4gICAgICovXG4gIG9uU2VhcmNoQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogU2V0cyB0aGUgcGxhY2Vob2xkZXIgb2YgdGhlIGlucHV0XG4gICAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBFdmVyeSBvcHRpb24gbXVzdCBiZSB0aGUgc2FtZSBoZWlnaHQgYW5kIG11c3QgYmUgZXhwbGljaXRseSBzZXQgaWYgdXNpbmcgYSBjdXN0b20gcmVuZGVyXG4gICAgICovXG4gIHJvd0hlaWdodDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgb25seSBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGEgc2luZ2xlIG9wdGlvbi4gU2V0IHRvIGB7IGFzUGxhaW5UZXh0OiB0cnVlIH1gIHRvIG5vdCByZW5kZXIgaW5wdXQgc2VsZWN0aW9uIGFzIHBpbGxzXG4gICAgICovXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhc1BsYWluVGV4dDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIERpc3BsYXkgbWF0Y2hpbmcgb3B0aW9ucyBieTpcbiAgICAgKiBgc3RhcnRzV2l0aGA6IG1vdmVzIGl0ZW1zIHRoYXQgc3RhcnQgd2l0aCBzZWFyY2ggdmFsdWUgdG8gdG9wIG9mIHRoZSBsaXN0O1xuICAgICAqIGBub25lYDogZG9uJ3QgY2hhbmdlIHRoZSBzb3J0IG9yZGVyIG9mIGluaXRpYWwgb2JqZWN0XG4gICAgICovXG4gIHNvcnRNYXRjaGVzQnk6IFByb3BUeXBlcy5vbmVPZihbXCJub25lXCIsIFwic3RhcnRzV2l0aFwiXSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogV2hldGhlciB0byBtYXRjaCBvcHRpb25zIHdpdGggY2FzZSBzZW5zaXRpdml0eS5cbiAgICAgKi9cbiAgaXNDYXNlU2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT3B0aW9uYWwgY3VzdG9tIG9wdGlvbiBtYXRjaGVyIGZ1bmN0aW9uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IGV4YWN0RXF1YWxpdHlNYXRjaGVyOiBFdWlDb21ib0JveE9wdGlvbk1hdGNoZXIgPSAoeyBvcHRpb24sIHNlYXJjaFZhbHVlIH0pID0+IHtcbiAgICAgKiAgIHJldHVybiBvcHRpb24ubGFiZWwgPT09IHNlYXJjaFZhbHVlO1xuICAgICAqIH1cbiAgICAgKi9cbiAgb3B0aW9uTWF0Y2hlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBiZWZvcmUgaW5wdXQuIEl0IHdvbid0IHNob3cgaWYgYHNpbmdsZVNlbGVjdGlvbmAgaXMgc2V0IHRvIGBmYWxzZWAuXG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYWZ0ZXIgaW5wdXQuIEl0IHdvbid0IHNob3cgaWYgYHNpbmdsZVNlbGVjdGlvbmAgaXMgc2V0IHRvIGBmYWxzZWAuXG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEEgc3BlY2lhbCBjaGFyYWN0ZXIgdG8gdXNlIGFzIGEgdmFsdWUgc2VwYXJhdG9yLiBUeXBpY2FsbHkgYSBjb21tYSBgLGBcbiAgICAgKi9cbiAgZGVsaW1pdGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgaW5wdXQgc2hvdWxkIGhhdmUgZm9jdXMgd2hlbiB0aGUgY29tcG9uZW50IGxvYWRzXG4gICAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFJlcXVpcmVkIHdoZW4gcmVuZGVyaW5nIHdpdGhvdXQgYSB2aXNpYmxlIGxhYmVsIGZyb20gW0V1aUZvcm1Sb3ddKC8jL2Zvcm1zL2Zvcm0tbGF5b3V0cykuXG4gICAgICovXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBSZWZlcmVuY2UgSUQgb2YgYSB0ZXh0IGVsZW1lbnQgY29udGFpbmluZyB0aGUgdmlzaWJsZSBsYWJlbCBmb3IgdGhlIGNvbWJvIGJveCB3aGVuIG5vdFxuICAgICAqIHN1cHBsaWVkIGJ5IGBhcmlhLWxhYmVsYCBvciBmcm9tIFtFdWlGb3JtUm93XSgvIy9mb3Jtcy9mb3JtLWxheW91dHMpLlxuICAgICAqL1xuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBFdWlDb21ib0JveCB3aWxsIHRydW5jYXRlIG9wdGlvbiBsYWJlbHMgYXQgdGhlIGVuZCBvZlxuICAgICAqIHRoZSBzdHJpbmcuIFlvdSBjYW4gdXNlIHBhc3MgaW4gYSBjdXN0b20gdHJ1bmNhdGlvbiBjb25maWd1cmF0aW9uIHRoYXRcbiAgICAgKiBhY2NlcHRzIGFueSBbRXVpVGV4dFRydW5jYXRlXSgvIy91dGlsaXRpZXMvdGV4dC10cnVuY2F0aW9uKSBwcm9wLFxuICAgICAqIGV4Y2VwdCBmb3IgYHRleHRgIGFuZCBgY2hpbGRyZW5gLlxuICAgICAqXG4gICAgICogTm90ZTogd2hlbiBzZWFyY2hpbmcsIGN1c3RvbSB0cnVuY2F0aW9uIHByb3BzIGFyZSBpZ25vcmVkLiBUaGUgaGlnaGxpZ2h0ZWQgc2VhcmNoXG4gICAgICogdGV4dCB3aWxsIGFsd2F5cyB0YWtlIHByZWNlZGVuY2UuXG4gICAgICovXG4gIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQWxsb3dzIGN1c3RvbWl6aW5nIHRoZSB1bmRlcmx5aW5nIEV1aUlucHV0UG9wb3ZlciBjb21wb25lbnRcbiAgICAgKiAoZXhjZXB0IGZvciBwcm9wcyB0aGF0IGNvbnRyb2wgc3RhdGUpLlxuICAgICAqL1xuICBpbnB1dFBvcG92ZXJQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkgPSBmdW5jdGlvbiB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkoc3RyaW5nLCBpc0Nhc2VTZW5zaXRpdmUpIHtcbiAgcmV0dXJuIGlzQ2FzZVNlbnNpdGl2ZSA/IHN0cmluZyA6IHN0cmluZy50b0xvd2VyQ2FzZSgpO1xufTtcbmV4cG9ydCB2YXIgZmxhdHRlbk9wdGlvbkdyb3VwcyA9IGZ1bmN0aW9uIGZsYXR0ZW5PcHRpb25Hcm91cHMob3B0aW9uc09yR3JvdXBzKSB7XG4gIHJldHVybiBvcHRpb25zT3JHcm91cHMucmVkdWNlKGZ1bmN0aW9uIChvcHRpb25zLCBvcHRpb25Pckdyb3VwKSB7XG4gICAgaWYgKG9wdGlvbk9yR3JvdXAub3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuY29uY2F0KG9wdGlvbk9yR3JvdXAub3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMucHVzaChvcHRpb25Pckdyb3VwKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0sIFtdKTtcbn07XG5leHBvcnQgdmFyIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUgPSBmdW5jdGlvbiBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKF9yZWYpIHtcbiAgdmFyIGlzQ2FzZVNlbnNpdGl2ZSA9IF9yZWYuaXNDYXNlU2Vuc2l0aXZlLFxuICAgIHNlYXJjaFZhbHVlID0gX3JlZi5zZWFyY2hWYWx1ZSxcbiAgICBzZWxlY3RlZE9wdGlvbnMgPSBfcmVmLnNlbGVjdGVkT3B0aW9ucyxcbiAgICBvcHRpb25LZXkgPSBfcmVmLm9wdGlvbktleTtcbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eShzZWFyY2hWYWx1ZSwgaXNDYXNlU2Vuc2l0aXZlKTtcbiAgcmV0dXJuIHNlbGVjdGVkT3B0aW9ucy5maW5kKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICB2YXIgbm9ybWFsaXplZE9wdGlvbiA9IHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eShvcHRpb24ubGFiZWwsIGlzQ2FzZVNlbnNpdGl2ZSk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRPcHRpb24gPT09IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSAmJiAoIW9wdGlvbktleSB8fCBvcHRpb24ua2V5ID09PSBvcHRpb25LZXkpO1xuICB9KTtcbn07XG52YXIgY29sbGVjdE1hdGNoaW5nT3B0aW9uID0gZnVuY3Rpb24gY29sbGVjdE1hdGNoaW5nT3B0aW9uKF9yZWYyKSB7XG4gIHZhciBhY2N1bXVsYXRvciA9IF9yZWYyLmFjY3VtdWxhdG9yLFxuICAgIG9wdGlvbiA9IF9yZWYyLm9wdGlvbixcbiAgICBzZWxlY3RlZE9wdGlvbnMgPSBfcmVmMi5zZWxlY3RlZE9wdGlvbnMsXG4gICAgc2VhcmNoVmFsdWUgPSBfcmVmMi5zZWFyY2hWYWx1ZSxcbiAgICBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBfcmVmMi5ub3JtYWxpemVkU2VhcmNoVmFsdWUsXG4gICAgaXNDYXNlU2Vuc2l0aXZlID0gX3JlZjIuaXNDYXNlU2Vuc2l0aXZlLFxuICAgIGlzUHJlRmlsdGVyZWQgPSBfcmVmMi5pc1ByZUZpbHRlcmVkLFxuICAgIHNob3dQcmV2U2VsZWN0ZWQgPSBfcmVmMi5zaG93UHJldlNlbGVjdGVkLFxuICAgIG9wdGlvbk1hdGNoZXIgPSBfcmVmMi5vcHRpb25NYXRjaGVyO1xuICAvLyBPbmx5IHNob3cgb3B0aW9ucyB3aGljaCBoYXZlbid0IHlldCBiZWVuIHNlbGVjdGVkIHVubGVzcyByZXF1ZXN0ZWQuXG4gIHZhciBzZWxlY3RlZE9wdGlvbiA9IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoe1xuICAgIGlzQ2FzZVNlbnNpdGl2ZTogaXNDYXNlU2Vuc2l0aXZlLFxuICAgIHNlYXJjaFZhbHVlOiBvcHRpb24ubGFiZWwsXG4gICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgb3B0aW9uS2V5OiBvcHRpb24ua2V5XG4gIH0pO1xuICBpZiAoc2VsZWN0ZWRPcHRpb24gJiYgIXNob3dQcmV2U2VsZWN0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJZiB0aGUgb3B0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBwcmUtZmlsdGVyZWQgdGhlbiB3ZSBjYW4gc2tpcCBmaWx0ZXJpbmcgYWdhaW5zdCB0aGUgc2VhcmNoIHZhbHVlLlxuICBpZiAoaXNQcmVGaWx0ZXJlZCkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBpc01hdGNoaW5nID0gb3B0aW9uTWF0Y2hlcih7XG4gICAgb3B0aW9uOiBvcHRpb24sXG4gICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZTogbm9ybWFsaXplZFNlYXJjaFZhbHVlLFxuICAgIGlzQ2FzZVNlbnNpdGl2ZTogaXNDYXNlU2Vuc2l0aXZlICE9PSBudWxsICYmIGlzQ2FzZVNlbnNpdGl2ZSAhPT0gdm9pZCAwID8gaXNDYXNlU2Vuc2l0aXZlIDogdHJ1ZVxuICB9KTtcbiAgaWYgKGlzTWF0Y2hpbmcpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gIH1cbn07XG5leHBvcnQgdmFyIGdldE1hdGNoaW5nT3B0aW9ucyA9IGZ1bmN0aW9uIGdldE1hdGNoaW5nT3B0aW9ucyhfcmVmMykge1xuICB2YXIgb3B0aW9ucyA9IF9yZWYzLm9wdGlvbnMsXG4gICAgc2VsZWN0ZWRPcHRpb25zID0gX3JlZjMuc2VsZWN0ZWRPcHRpb25zLFxuICAgIHNlYXJjaFZhbHVlID0gX3JlZjMuc2VhcmNoVmFsdWUsXG4gICAgb3B0aW9uTWF0Y2hlciA9IF9yZWYzLm9wdGlvbk1hdGNoZXIsXG4gICAgX3JlZjMkaXNDYXNlU2Vuc2l0aXZlID0gX3JlZjMuaXNDYXNlU2Vuc2l0aXZlLFxuICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IF9yZWYzJGlzQ2FzZVNlbnNpdGl2ZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMyRpc0Nhc2VTZW5zaXRpdmUsXG4gICAgX3JlZjMkaXNQcmVGaWx0ZXJlZCA9IF9yZWYzLmlzUHJlRmlsdGVyZWQsXG4gICAgaXNQcmVGaWx0ZXJlZCA9IF9yZWYzJGlzUHJlRmlsdGVyZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjMkaXNQcmVGaWx0ZXJlZCxcbiAgICBfcmVmMyRzaG93UHJldlNlbGVjdGUgPSBfcmVmMy5zaG93UHJldlNlbGVjdGVkLFxuICAgIHNob3dQcmV2U2VsZWN0ZWQgPSBfcmVmMyRzaG93UHJldlNlbGVjdGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjMkc2hvd1ByZXZTZWxlY3RlLFxuICAgIF9yZWYzJHNvcnRNYXRjaGVzQnkgPSBfcmVmMy5zb3J0TWF0Y2hlc0J5LFxuICAgIHNvcnRNYXRjaGVzQnkgPSBfcmVmMyRzb3J0TWF0Y2hlc0J5ID09PSB2b2lkIDAgPyAnbm9uZScgOiBfcmVmMyRzb3J0TWF0Y2hlc0J5O1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gdHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5KHNlYXJjaFZhbHVlLnRyaW0oKSwgaXNDYXNlU2Vuc2l0aXZlKTtcbiAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IFtdO1xuICBvcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIGlmIChvcHRpb24ub3B0aW9ucykge1xuICAgICAgdmFyIG1hdGNoaW5nT3B0aW9uc0Zvckdyb3VwID0gW107XG4gICAgICBvcHRpb24ub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cE9wdGlvbikge1xuICAgICAgICBjb2xsZWN0TWF0Y2hpbmdPcHRpb24oe1xuICAgICAgICAgIGFjY3VtdWxhdG9yOiBtYXRjaGluZ09wdGlvbnNGb3JHcm91cCxcbiAgICAgICAgICBvcHRpb246IGdyb3VwT3B0aW9uLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICBub3JtYWxpemVkU2VhcmNoVmFsdWU6IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSxcbiAgICAgICAgICBpc0Nhc2VTZW5zaXRpdmU6IGlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgICBpc1ByZUZpbHRlcmVkOiBpc1ByZUZpbHRlcmVkLFxuICAgICAgICAgIHNob3dQcmV2U2VsZWN0ZWQ6IHNob3dQcmV2U2VsZWN0ZWQsXG4gICAgICAgICAgb3B0aW9uTWF0Y2hlcjogb3B0aW9uTWF0Y2hlclxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG1hdGNoaW5nT3B0aW9uc0Zvckdyb3VwLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gQWRkIG9wdGlvbiBmb3IgZ3JvdXAgbGFiZWxcbiAgICAgICAgbWF0Y2hpbmdPcHRpb25zLnB1c2goe1xuICAgICAgICAgIGtleTogb3B0aW9uLmtleSxcbiAgICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsLFxuICAgICAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBhcHBlbmQ6IG9wdGlvbi5hcHBlbmQsXG4gICAgICAgICAgcHJlcGVuZDogb3B0aW9uLnByZXBlbmRcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFkZCBtYXRjaGluZyBvcHRpb25zIGZvciBncm91cFxuICAgICAgICAvLyB1c2UgY29uY2F0IG92ZXIgc3ByZWFkaW5nIHRvIHN1cHBvcnQgbGFyZ2UgYXJyYXlzIC0gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL2RlbW8vamF2YXNjcmlwdC1hcmd1bWVudC1jb3VudFxuICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBtYXRjaGluZ09wdGlvbnMuY29uY2F0KG1hdGNoaW5nT3B0aW9uc0Zvckdyb3VwKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29sbGVjdE1hdGNoaW5nT3B0aW9uKHtcbiAgICAgICAgYWNjdW11bGF0b3I6IG1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgb3B0aW9uOiBvcHRpb24sXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZTogbm9ybWFsaXplZFNlYXJjaFZhbHVlLFxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmU6IGlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgaXNQcmVGaWx0ZXJlZDogaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgc2hvd1ByZXZTZWxlY3RlZDogc2hvd1ByZXZTZWxlY3RlZCxcbiAgICAgICAgb3B0aW9uTWF0Y2hlcjogb3B0aW9uTWF0Y2hlclxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgaWYgKHNvcnRNYXRjaGVzQnkgPT09ICdzdGFydHNXaXRoJykge1xuICAgIHZhciByZWZPYmogPSB7XG4gICAgICBzdGFydFdpdGg6IFtdLFxuICAgICAgb3RoZXJzOiBbXVxuICAgIH07XG4gICAgbWF0Y2hpbmdPcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgdmFyIG5vcm1hbGl6ZWRMYWJlbCA9IHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eShvYmplY3QubGFiZWwsIGlzQ2FzZVNlbnNpdGl2ZSk7XG4gICAgICBpZiAobm9ybWFsaXplZExhYmVsLnN0YXJ0c1dpdGgobm9ybWFsaXplZFNlYXJjaFZhbHVlKSkge1xuICAgICAgICByZWZPYmouc3RhcnRXaXRoLnB1c2gob2JqZWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZk9iai5vdGhlcnMucHVzaChvYmplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlZk9iai5zdGFydFdpdGgpLCBfdG9Db25zdW1hYmxlQXJyYXkocmVmT2JqLm90aGVycykpO1xuICB9XG4gIHJldHVybiBtYXRjaGluZ09wdGlvbnM7XG59O1xuXG4vKipcbiAqIFBhcnRpYWwgc3RyaW5nIGVxdWFsaXR5IG9wdGlvbiBtYXRjaGVyIGZvciBFdWlDb21ib0JveC5cbiAqIEl0IG1hdGNoZXMgYWxsIG9wdGlvbnMgd2l0aCBsYWJlbHMgaW5jbHVkaW5nIHRoZSBzZWFyY2hlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCB2YXIgY3JlYXRlUGFydGlhbFN0cmluZ0VxdWFsaXR5T3B0aW9uTWF0Y2hlciA9IGZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIoKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICB2YXIgb3B0aW9uID0gX3JlZjQub3B0aW9uLFxuICAgICAgaXNDYXNlU2Vuc2l0aXZlID0gX3JlZjQuaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gX3JlZjQubm9ybWFsaXplZFNlYXJjaFZhbHVlO1xuICAgIGlmICghbm9ybWFsaXplZFNlYXJjaFZhbHVlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIG5vcm1hbGl6ZWRPcHRpb24gPSB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkob3B0aW9uLmxhYmVsLnRyaW0oKSwgaXNDYXNlU2Vuc2l0aXZlKTtcbiAgICByZXR1cm4gbm9ybWFsaXplZE9wdGlvbi5pbmNsdWRlcyhub3JtYWxpemVkU2VhcmNoVmFsdWUpO1xuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImtleVwiLCBcImxhYmVsXCIsIFwiY29sb3JcIiwgXCJvbkNsaWNrXCIsIFwiYXBwZW5kXCIsIFwicHJlcGVuZFwiLCBcInRydW5jYXRpb25Qcm9wc1wiLCBcInRvb2xUaXBDb250ZW50XCIsIFwidG9vbFRpcFByb3BzXCJdO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXMsIENhbnZhc1RleHRVdGlscywgUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uLy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXQgfSBmcm9tICcuLi8uLi9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQnO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hPcHRpb25BcHBlbmRQcmVwZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hQaWxsIH0gZnJvbSAnLi9jb21ib19ib3hfcGlsbCc7XG5pbXBvcnQgeyBldWlDb21ib0JveElucHV0U3R5bGVzIH0gZnJvbSAnLi9jb21ib19ib3hfaW5wdXQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94SW5wdXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3hJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbWJvQm94SW5wdXQpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aUNvbWJvQm94SW5wdXQsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0YXRlXCIsIHtcbiAgICAgIGlucHV0V2lkdGg6IDIsXG4gICAgICBoYXNGb2N1czogZmFsc2VcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwid2lkdGhVdGlsc1wiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpbnB1dFJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChlbCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJGlucHV0UmVmLCBfdGhpcyRwcm9wcztcbiAgICAgIF90aGlzLndpZHRoVXRpbHMgPSBuZXcgQ2FudmFzVGV4dFV0aWxzKHtcbiAgICAgICAgY29udGFpbmVyOiBlbFxuICAgICAgfSk7XG4gICAgICAoX3RoaXMkcHJvcHMkaW5wdXRSZWYgPSAoX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcykuaW5wdXRSZWYpID09PSBudWxsIHx8IF90aGlzJHByb3BzJGlucHV0UmVmID09PSB2b2lkIDAgfHwgX3RoaXMkcHJvcHMkaW5wdXRSZWYuY2FsbChfdGhpcyRwcm9wcywgZWwpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ1cGRhdGVJbnB1dFNpemVcIiwgZnVuY3Rpb24gKGlucHV0VmFsdWUpIHtcbiAgICAgIGlmICghX3RoaXMud2lkdGhVdGlscykgcmV0dXJuO1xuICAgICAgaWYgKF90aGlzLmFzUGxhaW5UZXh0KSByZXR1cm47XG4gICAgICBfdGhpcy53aWR0aFV0aWxzLnNldFRleHRUb0NoZWNrKGlucHV0VmFsdWUpO1xuICAgICAgLy8gQ2FudmFzIGhhcyBtaW51dGUgc3VicGl4ZWwgZGlmZmVyZW5jZXMgaW4gcmVuZGVyaW5nIGNvbXBhcmVkIHRvIERPTVxuICAgICAgLy8gV2UnbGwgYnVmZmVyIHRoZSBpbnB1dCBieSB+MnB4IGp1c3QgdG8gZW5zdXJlIHN1ZmZpY2llbnQgd2lkdGhcbiAgICAgIHZhciBpbnB1dFdpZHRoID0gTWF0aC5jZWlsKF90aGlzLndpZHRoVXRpbHMudGV4dFdpZHRoKSArIDI7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlucHV0V2lkdGg6IGlucHV0V2lkdGhcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMucHJvcHMub25Gb2N1cyhldmVudCk7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25CbHVyXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uQmx1cikge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgICAgfVxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMyLnNlYXJjaFZhbHVlLFxuICAgICAgICBoYXNTZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuaGFzU2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBvblJlbW92ZU9wdGlvbiA9IF90aGlzJHByb3BzMi5vblJlbW92ZU9wdGlvbixcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMyLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgaXNMaXN0T3BlbiA9IF90aGlzJHByb3BzMi5pc0xpc3RPcGVuLFxuICAgICAgICBvbk9wZW5MaXN0Q2xpY2sgPSBfdGhpcyRwcm9wczIub25PcGVuTGlzdENsaWNrLFxuICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMi5vbkNoYW5nZTtcbiAgICAgIHZhciBzZWFyY2hJc0VtcHR5ID0gIXNlYXJjaFZhbHVlLmxlbmd0aDtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuQkFDS1NQQUNFKSB7XG4gICAgICAgIC8vIFdoZW4gYmFja3NwYWNpbmcgaW4gYSBwbGFpbiB0ZXh0IGNvbWJvYm94LCBjaGFuZ2Ugbm9ybWFsbHkgYW5kIHJlbW92ZSB0aGUgc2VsZWN0aW9uXG4gICAgICAgIGlmIChfdGhpcy5hc1BsYWluVGV4dCkge1xuICAgICAgICAgIG9uQ2hhbmdlKGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWUpO1xuICAgICAgICAgIGlmIChoYXNTZWxlY3RlZE9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9uUmVtb3ZlT3B0aW9uKHNlbGVjdGVkT3B0aW9uc1tzZWxlY3RlZE9wdGlvbnMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBXaGVuIGJhY2tzcGFjaW5nIGZyb20gYW4gZW1wdHkgaW5wdXQsIGRlbGV0ZSB0aGUgbGFzdCBwaWxsIG9wdGlvbiBpbiB0aGUgbGlzdFxuICAgICAgICBlbHNlIGlmIChzZWFyY2hJc0VtcHR5ICYmIGhhc1NlbGVjdGVkT3B0aW9ucykge1xuICAgICAgICAgIG9uUmVtb3ZlT3B0aW9uKHNlbGVjdGVkT3B0aW9uc1tzZWxlY3RlZE9wdGlvbnMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgIGlmICghIXNpbmdsZVNlbGVjdGlvbiAmJiAhaXNMaXN0T3Blbikge1xuICAgICAgICAgICAgb25PcGVuTGlzdENsaWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlbmRlclBpbGxzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERvbid0IHJlbmRlciBhIHBpbGwgZm9yIHBsYWluIHRleHQgY29tYm9ib3hlcyAtIHVzZSB0aGUgaW5wdXQgaW5zdGVhZFxuICAgICAgaWYgKF90aGlzLmFzUGxhaW5UZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgIC8vIERvbid0IHJlbmRlciB0aGUgc2luZ2xlIHBpbGwgc2VsZWN0aW9uIHdoaWxlIHNlYXJjaGluZ1xuICAgICAgaWYgKF90aGlzLnByb3BzLnNpbmdsZVNlbGVjdGlvbiAmJiBfdGhpcy5wcm9wcy5zZWFyY2hWYWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczMuaXNEaXNhYmxlZCxcbiAgICAgICAgb25SZW1vdmVPcHRpb24gPSBfdGhpcyRwcm9wczMub25SZW1vdmVPcHRpb247XG4gICAgICBpZiAoIXNlbGVjdGVkT3B0aW9ucyB8fCAhc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHZhciBrZXkgPSBvcHRpb24ua2V5LFxuICAgICAgICAgIGxhYmVsID0gb3B0aW9uLmxhYmVsLFxuICAgICAgICAgIGNvbG9yID0gb3B0aW9uLmNvbG9yLFxuICAgICAgICAgIG9uQ2xpY2sgPSBvcHRpb24ub25DbGljayxcbiAgICAgICAgICBhcHBlbmQgPSBvcHRpb24uYXBwZW5kLFxuICAgICAgICAgIHByZXBlbmQgPSBvcHRpb24ucHJlcGVuZCxcbiAgICAgICAgICB0cnVuY2F0aW9uUHJvcHMgPSBvcHRpb24udHJ1bmNhdGlvblByb3BzLFxuICAgICAgICAgIHRvb2xUaXBDb250ZW50ID0gb3B0aW9uLnRvb2xUaXBDb250ZW50LFxuICAgICAgICAgIHRvb2xUaXBQcm9wcyA9IG9wdGlvbi50b29sVGlwUHJvcHMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvcHRpb24sIF9leGNsdWRlZCk7XG4gICAgICAgIHZhciBwaWxsT25DbG9zZSA9IGlzRGlzYWJsZWQgfHwgX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uIHx8IG9uQ2xpY2sgPyB1bmRlZmluZWQgOiBvblJlbW92ZU9wdGlvbjtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hQaWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3B0aW9uOiBvcHRpb24sXG4gICAgICAgICAgb25DbG9zZTogcGlsbE9uQ2xvc2UsXG4gICAgICAgICAga2V5OiBrZXkgIT09IG51bGwgJiYga2V5ICE9PSB2b2lkIDAgPyBrZXkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgICAgIG9uQ2xpY2tBcmlhTGFiZWw6IG9uQ2xpY2sgPyAnQ2hhbmdlJyA6IHVuZGVmaW5lZFxuICAgICAgICB9LCByZXN0KSwgbGFiZWwpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlDb21ib0JveElucHV0LCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveElucHV0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgaWYgKHByZXZQcm9wcy5zZWFyY2hWYWx1ZSAhPT0gdGhpcy5wcm9wcy5zZWFyY2hWYWx1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0U2l6ZSh0aGlzLnByb3BzLnNlYXJjaFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYXNQbGFpblRleHRcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciBzaW5nbGVTZWxlY3Rpb24gPSB0aGlzLnByb3BzLnNpbmdsZVNlbGVjdGlvbjtcbiAgICAgIHZhciBpc1NpbmdsZVNlbGVjdGlvbkNvbmZpZyA9IHNpbmdsZVNlbGVjdGlvbiAmJiBfdHlwZW9mKHNpbmdsZVNlbGVjdGlvbikgPT09ICdvYmplY3QnO1xuICAgICAgcmV0dXJuICEhKGlzU2luZ2xlU2VsZWN0aW9uQ29uZmlnICYmIHNpbmdsZVNlbGVjdGlvbi5hc1BsYWluVGV4dCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNlYXJjaFZhbHVlXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczQuc2VhcmNoVmFsdWUsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzNC5zZWxlY3RlZE9wdGlvbnM7XG4gICAgICBpZiAodGhpcy5hc1BsYWluVGV4dCkge1xuICAgICAgICB2YXIgX3NlbGVjdGVkT3B0aW9ucyQ7XG4gICAgICAgIHJldHVybiBzZWFyY2hWYWx1ZSB8fCAoc2VsZWN0ZWRPcHRpb25zID09PSBudWxsIHx8IHNlbGVjdGVkT3B0aW9ucyA9PT0gdm9pZCAwIHx8IChfc2VsZWN0ZWRPcHRpb25zJCA9IHNlbGVjdGVkT3B0aW9uc1swXSkgPT09IG51bGwgfHwgX3NlbGVjdGVkT3B0aW9ucyQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zZWxlY3RlZE9wdGlvbnMkLmxhYmVsKSB8fCAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZWFyY2hWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczUuY29tcHJlc3NlZCxcbiAgICAgICAgZm9jdXNlZE9wdGlvbklkID0gX3RoaXMkcHJvcHM1LmZvY3VzZWRPcHRpb25JZCxcbiAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHM1LmZ1bGxXaWR0aCxcbiAgICAgICAgaGFzU2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM1Lmhhc1NlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczUuaWQsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczUuaXNEaXNhYmxlZCxcbiAgICAgICAgaXNMaXN0T3BlbiA9IF90aGlzJHByb3BzNS5pc0xpc3RPcGVuLFxuICAgICAgICBub0ljb24gPSBfdGhpcyRwcm9wczUubm9JY29uLFxuICAgICAgICBfb25DaGFuZ2UgPSBfdGhpcyRwcm9wczUub25DaGFuZ2UsXG4gICAgICAgIG9uQ2xlYXIgPSBfdGhpcyRwcm9wczUub25DbGVhcixcbiAgICAgICAgb25DbGljayA9IF90aGlzJHByb3BzNS5vbkNsaWNrLFxuICAgICAgICBvbkZvY3VzID0gX3RoaXMkcHJvcHM1Lm9uRm9jdXMsXG4gICAgICAgIG9uQ2xvc2VMaXN0Q2xpY2sgPSBfdGhpcyRwcm9wczUub25DbG9zZUxpc3RDbGljayxcbiAgICAgICAgb25PcGVuTGlzdENsaWNrID0gX3RoaXMkcHJvcHM1Lm9uT3Blbkxpc3RDbGljayxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczUucGxhY2Vob2xkZXIsXG4gICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzNS5yb290SWQsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHM1LnNlYXJjaFZhbHVlLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczUuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczUuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICB2YWx1ZSA9IF90aGlzJHByb3BzNS52YWx1ZSxcbiAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzNS5wcmVwZW5kLFxuICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wczUuYXBwZW5kLFxuICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczUuaXNMb2FkaW5nLFxuICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wczUuaXNJbnZhbGlkLFxuICAgICAgICBhdXRvRm9jdXMgPSBfdGhpcyRwcm9wczUuYXV0b0ZvY3VzLFxuICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wczVbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgYXJpYUxhYmVsbGVkYnkgPSBfdGhpcyRwcm9wczVbJ2FyaWEtbGFiZWxsZWRieSddO1xuICAgICAgdmFyIHJlbW92ZU9wdGlvbk1lc3NhZ2U7XG4gICAgICB2YXIgcmVtb3ZlT3B0aW9uTWVzc2FnZUlkO1xuICAgICAgaWYgKHRoaXMuc3RhdGUuaGFzRm9jdXMpIHtcbiAgICAgICAgdmFyIHJlYWRQbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyID8gXCJcIi5jb25jYXQocGxhY2Vob2xkZXIsIFwiLlwiKSA6ICcnO1xuICAgICAgICB2YXIgcmVtb3ZlT3B0aW9uTWVzc2FnZUNvbnRlbnQgPSBcIkNvbWJvIGJveC4gU2VsZWN0ZWQuIFwiLmNvbmNhdChzZWFyY2hWYWx1ZSA/IFwiXCIuY29uY2F0KHNlYXJjaFZhbHVlLCBcIi4gU2VsZWN0ZWQuIFwiKSA6ICcnKS5jb25jYXQoc2VsZWN0ZWRPcHRpb25zICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAwID8gXCJcIi5jb25jYXQodmFsdWUsIFwiLiBQcmVzcyBCYWNrc3BhY2UgdG8gZGVsZXRlIFwiKS5jb25jYXQoc2VsZWN0ZWRPcHRpb25zW3NlbGVjdGVkT3B0aW9ucy5sZW5ndGggLSAxXS5sYWJlbCwgXCIuIFwiKSA6ICcnLCBcIkNvbWJvIGJveCBpbnB1dC4gXCIpLmNvbmNhdChyZWFkUGxhY2Vob2xkZXIsIFwiIFR5cGUgc29tZSB0ZXh0IG9yLCB0byBkaXNwbGF5IGEgbGlzdCBvZiBjaG9pY2VzLCBwcmVzcyBEb3duIEFycm93LiBcIikgKyAnVG8gZXhpdCB0aGUgbGlzdCBvZiBjaG9pY2VzLCBwcmVzcyBFc2NhcGUuJztcbiAgICAgICAgcmVtb3ZlT3B0aW9uTWVzc2FnZUlkID0gcm9vdElkKCdyZW1vdmVPcHRpb25NZXNzYWdlJyk7XG5cbiAgICAgICAgLy8gYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCIgd2lsbCByZWFkIHRoaXMgbWVzc2FnZSBhbG91ZCBpbW1lZGlhdGVseSBvbmNlIGl0IGVudGVycyB0aGUgRE9NLlxuICAgICAgICAvLyBXZSdsbCByZW5kZXIgdG8gdGhlIERPTSB3aGVuIHRoZSBpbnB1dCBnYWlucyBmb2N1cyBhbmQgcmVtb3ZlIGl0IHdoZW4gdGhlIGlucHV0IGxvc2VzIGZvY3VzLlxuICAgICAgICAvLyBXZSdsbCB1c2UgYXJpYS1oaWRkZW4gdG8gcHJldmVudCBkZWZhdWx0IGFyaWEgaW5mb3JtYXRpb24gZnJvbSBiZWluZyByZWFkIGJ5IHRoZSBzY3JlZW5cbiAgICAgICAgLy8gcmVhZGVyLlxuICAgICAgICByZW1vdmVPcHRpb25NZXNzYWdlID0gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIixcbiAgICAgICAgICBpZDogcmVtb3ZlT3B0aW9uTWVzc2FnZUlkXG4gICAgICAgIH0sIHJlbW92ZU9wdGlvbk1lc3NhZ2VDb250ZW50KSk7XG4gICAgICB9XG4gICAgICB2YXIgaXNJbkdyb3VwID0gc2luZ2xlU2VsZWN0aW9uICYmIChwcmVwZW5kIHx8IGFwcGVuZCk7XG4gICAgICB2YXIgc2hvd1BsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIgJiYgIShzZWxlY3RlZE9wdGlvbnMgIT09IG51bGwgJiYgc2VsZWN0ZWRPcHRpb25zICE9PSB2b2lkIDAgJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkgJiYgIXNlYXJjaFZhbHVlO1xuICAgICAgdmFyIGNsaWNrUHJvcHMgPSB7fTtcbiAgICAgIGlmICghaXNEaXNhYmxlZCAmJiBvbkNsZWFyICYmIGhhc1NlbGVjdGVkT3B0aW9ucykge1xuICAgICAgICBjbGlja1Byb3BzLmNsZWFyID0ge1xuICAgICAgICAgICdkYXRhLXRlc3Qtc3Viaic6ICdjb21ib0JveENsZWFyQnV0dG9uJyxcbiAgICAgICAgICBvbkNsaWNrOiBvbkNsZWFyXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgaWNvbjtcbiAgICAgIGlmICghbm9JY29uICYmICFpc0Rpc2FibGVkKSB7XG4gICAgICAgIGljb24gPSB7XG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBpc0xpc3RPcGVuID8gJ0Nsb3NlIGxpc3Qgb2Ygb3B0aW9ucycgOiAnT3BlbiBsaXN0IG9mIG9wdGlvbnMnLFxuICAgICAgICAgICdkYXRhLXRlc3Qtc3Viaic6ICdjb21ib0JveFRvZ2dsZUxpc3RCdXR0b24nLFxuICAgICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIG9uQ2xpY2s6IGlzTGlzdE9wZW4gJiYgIWlzRGlzYWJsZWQgPyBvbkNsb3NlTGlzdENsaWNrIDogb25PcGVuTGlzdENsaWNrLFxuICAgICAgICAgIHNpZGU6ICdyaWdodCcsXG4gICAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICAgIHR5cGU6ICdhcnJvd0Rvd24nXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgd3JhcENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb21ib0JveF9faW5wdXRXcmFwJywge1xuICAgICAgICAnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcC0tcGxhaW5UZXh0JzogdGhpcy5hc1BsYWluVGV4dFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZW5kZXJXaXRoRXVpU3R5bGVzTWVtb2l6ZXIsIG51bGwsIGZ1bmN0aW9uIChzdHlsZXNNZW1vaXplcikge1xuICAgICAgICB2YXIgc3R5bGVzID0gc3R5bGVzTWVtb2l6ZXIoZXVpQ29tYm9Cb3hJbnB1dFN0eWxlcyk7XG4gICAgICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUNvbWJvQm94SW5wdXRXcmFwcGVyLCAhc2luZ2xlU2VsZWN0aW9uICYmIHN0eWxlcy5tdWx0aVNlbGVjdCwgY29tcHJlc3NlZCA/IHN0eWxlcy5jb21wcmVzc2VkIDogc3R5bGVzLnVuY29tcHJlc3NlZF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShfdGhpczIuYXNQbGFpblRleHQgfHwgc2hvd1BsYWNlaG9sZGVyID8gW3N0eWxlcy5wbGFpblRleHQucGxhaW5UZXh0LCBjb21wcmVzc2VkID8gc3R5bGVzLnBsYWluVGV4dC5jb21wcmVzc2VkIDogc3R5bGVzLnBsYWluVGV4dC51bmNvbXByZXNzZWRdIDogW10pLCBbaXNEaXNhYmxlZCA/IHN0eWxlcy5kaXNhYmxlZCA6IGlzSW52YWxpZCA/IHN0eWxlcy5pbnZhbGlkIDogaXNMaXN0T3BlbiA/IHN0eWxlcy5vcGVuIDogdW5kZWZpbmVkLCBpc0luR3JvdXAgJiYgc3R5bGVzLmluR3JvdXBdKTtcbiAgICAgICAgdmFyIGZvcm1MYXlvdXRTdHlsZXMgPSBbc3R5bGVzLmZvcm1MYXlvdXQuZXVpQ29tYm9Cb3hfX2Zvcm1Db250cm9sTGF5b3V0LCAhc2luZ2xlU2VsZWN0aW9uICYmIHN0eWxlcy5mb3JtTGF5b3V0Lm11bHRpU2VsZWN0XTtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXQsIF9leHRlbmRzKHtcbiAgICAgICAgICBpY29uOiBpY29uXG4gICAgICAgIH0sIGNsaWNrUHJvcHMsIHtcbiAgICAgICAgICBpbnB1dElkOiBpZCxcbiAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZCxcbiAgICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgICAgcHJlcGVuZDogcHJlcGVuZCxcbiAgICAgICAgICBhcHBlbmQ6IGFwcGVuZCxcbiAgICAgICAgICBjc3M6IGZvcm1MYXlvdXRTdHlsZXNcbiAgICAgICAgfSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICAgIGNsYXNzTmFtZTogd3JhcENsYXNzZXMsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNvbWJvQm94SW5wdXRcIixcbiAgICAgICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgICAgIHRhYkluZGV4OiAtMSAvLyBiZWNvbWVzIG9uQmx1ciBldmVudCdzIHJlbGF0ZWRUYXJnZXQsIG90aGVyd2lzZSByZWxhdGVkVGFyZ2V0IGlzIG51bGwgd2hlbiBjbGlja2luZyBvbiB0aGlzIGRpdlxuICAgICAgICB9LCBfdGhpczIucmVuZGVyUGlsbHMoKSwgX19fRW1vdGlvbkpTWChFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQsIHtcbiAgICAgICAgICBvcHRpb246IF90aGlzMi5hc1BsYWluVGV4dCA/IHNlbGVjdGVkT3B0aW9ucyA9PT0gbnVsbCB8fCBzZWxlY3RlZE9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkT3B0aW9uc1swXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjbGFzc05hbWVQcmVmaXg6IFwiZXVpQ29tYm9Cb3hQbGFpblRleHRTZWxlY3Rpb25cIixcbiAgICAgICAgICBtYXJnaW5TaXplOiBcInh4c1wiXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJpbnB1dFwiLCB7XG4gICAgICAgICAgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjogZm9jdXNlZE9wdGlvbklkLFxuICAgICAgICAgIFwiYXJpYS1hdXRvY29tcGxldGVcIjogXCJsaXN0XCIsXG4gICAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IGlzTGlzdE9wZW4gPyByb290SWQoJ2xpc3Rib3gnKSA6ICcnLFxuICAgICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBpc0xpc3RPcGVuLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsbGVkYnksXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogaXNJbnZhbGlkLFxuICAgICAgICAgIGNzczogc3R5bGVzLmV1aUNvbWJvQm94SW5wdXQsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94X19pbnB1dFwiLFxuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjb21ib0JveFNlYXJjaElucHV0XCIsXG4gICAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIG9uQmx1cjogX3RoaXMyLm9uQmx1cixcbiAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfb25DaGFuZ2UoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRm9jdXM6IF90aGlzMi5vbkZvY3VzLFxuICAgICAgICAgIG9uS2V5RG93bjogX3RoaXMyLm9uS2V5RG93bixcbiAgICAgICAgICByZWY6IF90aGlzMi5pbnB1dFJlZkNhbGxiYWNrLFxuICAgICAgICAgIHJvbGU6IFwiY29tYm9ib3hcIixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgaW5saW5lU2l6ZTogX3RoaXMyLmFzUGxhaW5UZXh0IHx8IHNob3dQbGFjZWhvbGRlciA/ICcxMDAlJyA6IF90aGlzMi5zdGF0ZS5pbnB1dFdpZHRoXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogc2hvd1BsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdmFsdWU6IF90aGlzMi5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICAgICAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCJcbiAgICAgICAgICAvLyBGb3JjZSB0aGUgbWVudSB0byByZS1vcGVuIG9uIGV2ZXJ5IGlucHV0IGNsaWNrIC0gb25seSBuZWNlc3Nhcnkgd2hlbiBwbGFpbiB0ZXh0XG4gICAgICAgICAgLFxuICAgICAgICAgIG9uQ2xpY2s6IF90aGlzMi5hc1BsYWluVGV4dCA/IG9uRm9jdXMgOiB1bmRlZmluZWQgLy8gVHlwZSBzaGVuYW5pZ2FucyAtIGV2ZW50IHNob3VsZCBiZSBtb3N0bHkgdGhlIHNhbWVcbiAgICAgICAgfSkpLCByZW1vdmVPcHRpb25NZXNzYWdlKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbkV1aUNvbWJvQm94SW5wdXQucHJvcFR5cGVzID0ge1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBmb2N1c2VkT3B0aW9uSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIGhhc1NlbGVjdGVkT3B0aW9uczogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuYW55LFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNMaXN0T3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgbm9JY29uOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBvbkJsdXI6IFByb3BUeXBlcy5hbnksXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkNsZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25DbG9zZUxpc3RDbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBvbk9wZW5MaXN0Q2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uUmVtb3ZlT3B0aW9uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgcm9vdElkOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIHNlYXJjaFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHNlbGVjdGVkT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAgIC8qKlxuICAgICAgICAgKiBPcHRpb25hbCBjdXN0b20gdG9vbHRpcCBjb250ZW50IGZvciB0aGUgYnV0dG9uXG4gICAgICAgICAqL1xuICAgICAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgLyoqXG4gICAgICAgICAqIE9wdGlvbmFsIHByb3BzIHRvIHBhc3MgdG8gdGhlIHVuZGVybHlpbmcgKipbRXVpVG9vbFRpcF0oLyMvZGlzcGxheS90b29sdGlwKSoqXG4gICAgICAgICAqL1xuICAgICAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIGN1c3RvbSB0b29sdGlwIGNvbnRlbnQgZm9yIHRoZSBidXR0b25cbiAgICAgICAqL1xuICAgIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIHByb3BzIHRvIHBhc3MgdG8gdGhlIHVuZGVybHlpbmcgKipbRXVpVG9vbFRpcF0oLyMvZGlzcGxheS90b29sdGlwKSoqXG4gICAgICAgKi9cbiAgICB0b29sVGlwUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgc2luZ2xlU2VsZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFzUGxhaW5UZXh0OiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkXSksXG4gIHRvZ2dsZUJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgYXBwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5pbXBvcnQgeyBjc3MgYXMgX2NzcyB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBsb2dpY2FsU3R5bGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuLyoqXG4gKiBEUlkgdXRpbCBmb3IgcmVuZGVyaW5nIGFuIG9wdGlvbiB3aXRoIGl0cyBwcmVwZW5kIGFuZCBhcHBlbmQgcHJvcGVydGllc1xuICovXG5leHBvcnQgdmFyIEV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZCA9IGZ1bmN0aW9uIEV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgb3B0aW9uID0gX3JlZi5vcHRpb24sXG4gICAgY2xhc3NOYW1lUHJlZml4ID0gX3JlZi5jbGFzc05hbWVQcmVmaXgsXG4gICAgX3JlZiRtYXJnaW5TaXplID0gX3JlZi5tYXJnaW5TaXplLFxuICAgIG1hcmdpblNpemUgPSBfcmVmJG1hcmdpblNpemUgPT09IHZvaWQgMCA/ICd4cycgOiBfcmVmJG1hcmdpblNpemU7XG4gIHZhciBfdXNlRXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpLFxuICAgIGV1aVRoZW1lID0gX3VzZUV1aVRoZW1lLmV1aVRoZW1lO1xuICB2YXIgbWFyZ2luID0gZXVpVGhlbWUuc2l6ZVttYXJnaW5TaXplXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIChvcHRpb24gPT09IG51bGwgfHwgb3B0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb24ucHJlcGVuZCkgJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoY2xhc3NOYW1lUHJlZml4LCBcIl9fcHJlcGVuZFwiKSxcbiAgICBjc3M6IC8qI19fUFVSRV9fKi9fY3NzKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbG9naWNhbFN0eWxlKCdtYXJnaW4tcmlnaHQnLCBtYXJnaW4pKSwgY2VudGVySWNvbnMpLCBcIjtsYWJlbDpFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQ7XCIpXG4gIH0sIG9wdGlvbi5wcmVwZW5kKSwgY2hpbGRyZW4sIChvcHRpb24gPT09IG51bGwgfHwgb3B0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb24uYXBwZW5kKSAmJiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChjbGFzc05hbWVQcmVmaXgsIFwiX19hcHBlbmRcIiksXG4gICAgY3NzOiAvKiNfX1BVUkVfXyovX2Nzcyhfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGxvZ2ljYWxTdHlsZSgnbWFyZ2luLWxlZnQnLCBtYXJnaW4pKSwgY2VudGVySWNvbnMpLCBcIjtsYWJlbDpFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQ7XCIpXG4gIH0sIG9wdGlvbi5hcHBlbmQpKTtcbn07XG5cbi8vIEZpeCB2ZXJ0aWNhbCBhbGlnbm1lbnQgb2YgRXVpSWNvbnMgaW4gcHJlcGVuZC9hcHBlbmQgbm9kZXNcbnZhciBjZW50ZXJJY29ucyA9IHtcbiAgJy5ldWlJY29uJzoge1xuICAgIGRpc3BsYXk6ICdibG9jaydcbiAgfVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJvbkNsaWNrXCIsIFwib25DbGlja0FyaWFMYWJlbFwiLCBcIm9uQ2xvc2VcIiwgXCJvcHRpb25cIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpQmFkZ2UgfSBmcm9tICcuLi8uLi9iYWRnZSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBldWlDb21ib0JveFBpbGxTdHlsZXMgfSBmcm9tICcuL2NvbWJvX2JveF9waWxsLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDb21ib0JveFBpbGwgPSBmdW5jdGlvbiBFdWlDb21ib0JveFBpbGwoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2hvbGxvdycgOiBfcmVmJGNvbG9yLFxuICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgb25DbGlja0FyaWFMYWJlbCA9IF9yZWYub25DbGlja0FyaWFMYWJlbCxcbiAgICBvbkNsb3NlID0gX3JlZi5vbkNsb3NlLFxuICAgIG9wdGlvbiA9IF9yZWYub3B0aW9uLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb21ib0JveFBpbGwnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpQ29tYm9Cb3hQaWxsU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IHN0eWxlcy5ldWlDb21ib0JveFBpbGw7XG4gIHZhciBvbkNsaWNrUHJvcHMgPSBvbkNsaWNrICYmIG9uQ2xpY2tBcmlhTGFiZWwgPyB7XG4gICAgb25DbGljazogb25DbGljayxcbiAgICBvbkNsaWNrQXJpYUxhYmVsOiBvbkNsaWNrQXJpYUxhYmVsXG4gIH0gOiB7fTtcbiAgdmFyIGNvbnRlbnQgPSBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZCwge1xuICAgIG9wdGlvbjogb3B0aW9uLFxuICAgIGNsYXNzTmFtZVByZWZpeDogXCJldWlDb21ib0JveFBpbGxcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aS10ZXh0VHJ1bmNhdGVcIlxuICB9LCBjaGlsZHJlbikpO1xuICBpZiAob25DbG9zZSkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94UGlsbC5yZW1vdmVTZWxlY3Rpb25cIixcbiAgICAgIGRlZmF1bHQ6IFwiUmVtb3ZlIHtjaGlsZHJlbn0gZnJvbSBzZWxlY3Rpb24gaW4gdGhpcyBncm91cFwiLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChyZW1vdmVTZWxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aUNvbWJvQm94UGlsbFwiLFxuICAgICAgICBpY29uT25DbGljazogZnVuY3Rpb24gaWNvbk9uQ2xpY2soKSB7XG4gICAgICAgICAgcmV0dXJuIG9uQ2xvc2Uob3B0aW9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgaWNvbk9uQ2xpY2tBcmlhTGFiZWw6IHJlbW92ZVNlbGVjdGlvbixcbiAgICAgICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICAgICAgaWNvblR5cGU6IFwiY3Jvc3NcIixcbiAgICAgICAgdGl0bGU6IGNoaWxkcmVuXG4gICAgICB9LCBvbkNsaWNrUHJvcHMsIHJlc3QpLCBjb250ZW50KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjb2xvcjogY29sb3IsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aUNvbWJvQm94UGlsbFwiLFxuICAgIHRpdGxlOiBjaGlsZHJlblxuICB9LCByZXN0LCBvbkNsaWNrUHJvcHMpLCBjb250ZW50KTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIG1hdGhXaXRoVW5pdHMgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aUNvbWJvQm94UGlsbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNvbWJvQm94UGlsbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuXG4gIC8vIEVuc3VyZSB0aGUgaW5wdXQgZG9lc24ndCBkcm9wIHRvIHRoZSBuZXh0IGxpbmUgd2hlbiB0aGUgRXVpQmFkZ2UgaGFzIGEgdmVyeSBsb25nIHRleHRcbiAgdmFyIHBpbGxNYXhXaWR0aCA9IFwiY2FsYygxMDAlIC0gXCIuY29uY2F0KGV1aVRoZW1lLnNpemUueHhzLCBcIiAtIFwiKS5jb25jYXQoZXVpVGhlbWUuc2l6ZS5iYXNlLCBcIilcIik7XG4gIHZhciBwaWxsSGVpZ2h0ID0gbWF0aFdpdGhVbml0cyhldWlUaGVtZS5zaXplLmwsIGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHggLSAyO1xuICB9KTtcbiAgdmFyIHBpbGxMaW5lSGVpZ2h0ID0gbWF0aFdpdGhVbml0cyhwaWxsSGVpZ2h0LCBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB4IC0gMjtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgZXVpQ29tYm9Cb3hQaWxsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsIHBpbGxNYXhXaWR0aCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBwaWxsSGVpZ2h0KSwgXCIgbGluZS1oZWlnaHQ6XCIsIHBpbGxMaW5lSGVpZ2h0LCBcIjt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtcIiwgbG9naWNhbENTUygnbWFyZ2luLXZlcnRpY2FsJywgJzFweCcpLCBcIiYrLmV1aUJhZGdle1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tbGVmdCcsIDApLCBcIjt9LmV1aUJhZGdlX190ZXh0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7LmV1aUljb257ZGlzcGxheTpibG9jazt9fTtsYWJlbDpldWlDb21ib0JveFBpbGw7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpRm9ybUNvbnRyb2xTdHlsZXMsIGV1aUZvcm1Db250cm9sRGVmYXVsdFNoYWRvdywgZXVpRm9ybUNvbnRyb2xUZXh0IH0gZnJvbSAnLi4vLi4vZm9ybS9mb3JtLnN0eWxlcyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJrZWR1MWgtcGxhaW5UZXh0XCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpjZW50ZXI7Y3Vyc29yOnRleHQ7bGFiZWw6cGxhaW5UZXh0O1wiXG59IDoge1xuICBuYW1lOiBcImtlZHUxaC1wbGFpblRleHRcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6dGV4dDtsYWJlbDpwbGFpblRleHQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJka3pyMWctbXVsdGlTZWxlY3RcIixcbiAgc3R5bGVzOiBcImZsZXgtd3JhcDp3cmFwO2xhYmVsOm11bHRpU2VsZWN0O1wiXG59IDoge1xuICBuYW1lOiBcImRrenIxZy1tdWx0aVNlbGVjdFwiLFxuICBzdHlsZXM6IFwiZmxleC13cmFwOndyYXA7bGFiZWw6bXVsdGlTZWxlY3Q7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpQ29tYm9Cb3hJbnB1dFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNvbWJvQm94SW5wdXRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIGZvcm1TdHlsZXMgPSBldWlGb3JtQ29udHJvbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIC8vIFdyYXBwZXIgd2hpY2ggdmlzdWFsbHkgbWltaWNzIGEgZm9ybSBjb250cm9sXG4gICAgZXVpQ29tYm9Cb3hJbnB1dFdyYXBwZXI6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9ybUNvbnRyb2xEZWZhdWx0U2hhZG93KGV1aVRoZW1lQ29udGV4dCksIFwiIGRpc3BsYXk6ZmxleDs7bGFiZWw6ZXVpQ29tYm9Cb3hJbnB1dFdyYXBwZXI7XCIpLFxuICAgIG11bHRpU2VsZWN0OiBfcmVmMixcbiAgICB1bmNvbXByZXNzZWQ6IFwiXFxuICAgICAgXCIuY29uY2F0KGZvcm1TdHlsZXMudW5jb21wcmVzc2VkLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0JywgJ2F1dG8nKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCBldWlUaGVtZS5zaXplLnMpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgZXVpVGhlbWUuc2l6ZS5zKSwgXCJcXG4gICAgICBjb2x1bW4tZ2FwOiBcIikuY29uY2F0KGV1aVRoZW1lLnNpemUucywgXCI7XFxuICAgICAgcm93LWdhcDogXCIpLmNvbmNhdChldWlUaGVtZS5zaXplLnhzLCBcIjtcXG4gICAgXCIpLFxuICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoZm9ybVN0eWxlcy5jb21wcmVzc2VkLCBcIiBcIiwgbG9naWNhbENTUygnaGVpZ2h0JywgJ2F1dG8nKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctbGVmdCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIiBjb2x1bW4tZ2FwOlwiLCBldWlUaGVtZS5zaXplLnhzLCBcIjtyb3ctZ2FwOlwiLCBldWlUaGVtZS5zaXplLnh4cywgXCI7O2xhYmVsOmNvbXByZXNzZWQ7XCIpLFxuICAgIHBsYWluVGV4dDoge1xuICAgICAgcGxhaW5UZXh0OiBfcmVmLFxuICAgICAgY29tcHJlc3NlZDogXCJcXG4gICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBldWlUaGVtZS5zaXplLnMpLCBcIlxcbiAgICAgIFwiKSxcbiAgICAgIHVuY29tcHJlc3NlZDogXCJcXG4gICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBldWlUaGVtZS5zaXplLm0pLCBcIlxcbiAgICAgIFwiKVxuICAgIH0sXG4gICAgaW52YWxpZDogLyojX19QVVJFX18qL2Nzcyhmb3JtU3R5bGVzLmludmFsaWQsIFwiO2xhYmVsOmludmFsaWQ7XCIpLFxuICAgIGRpc2FibGVkOiAvKiNfX1BVUkVfXyovY3NzKGZvcm1TdHlsZXMuZGlzYWJsZWQsIFwiO2xhYmVsOmRpc2FibGVkO1wiKSxcbiAgICBvcGVuOiAvKiNfX1BVUkVfXyovY3NzKGZvcm1TdHlsZXMuZm9jdXMsIFwiO2xhYmVsOm9wZW47XCIpLFxuICAgIGluR3JvdXA6IC8qI19fUFVSRV9fKi9jc3MoZm9ybVN0eWxlcy5pbkdyb3VwLCBcIjtsYWJlbDppbkdyb3VwO1wiKSxcbiAgICAvLyBBY3R1YWwgaW5wdXQgZWxlbWVudCwgd2hpY2ggaGFzIHZhcmlhYmxlIHdpZHRoIGRlcGVuZGluZyBvbiBpdHMgdmFsdWVcbiAgICBldWlDb21ib0JveElucHV0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGV1aVRoZW1lLnNpemUubCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCAnMnB4JyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBldWlGb3JtQ29udHJvbFRleHQoZXVpVGhlbWVDb250ZXh0KSwgXCIgYmFja2dyb3VuZDp0cmFuc3BhcmVudDsmOmRpc2FibGVke2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0LCBcIjt9YXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXI6bm9uZSFpbXBvcnRhbnQ7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudDtvdXRsaW5lOm5vbmUhaW1wb3J0YW50OztsYWJlbDpldWlDb21ib0JveElucHV0O1wiKSxcbiAgICAvLyBFdWlGb3JtQ29udHJvbExheW91dCBvdmVycmlkZXNcbiAgICBmb3JtTGF5b3V0OiB7XG4gICAgICBldWlDb21ib0JveF9fZm9ybUNvbnRyb2xMYXlvdXQ6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZXVpQ29tYm9Cb3hfX2Zvcm1Db250cm9sTGF5b3V0O1wiKSxcbiAgICAgIC8vIEFsbG93IHRoZSBmb3JtIGNvbnRyb2wgdG8gZXhwYW5kIHRvIGFueSBoZWlnaHQgdG8gYWNjb21tb2RhdGUgbXVsdGlwbGUgcm93cyBvZiBwaWxsc1xuICAgICAgbXVsdGlTZWxlY3Q6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnaGVpZ2h0JywgJ2F1dG8nKSwgXCI7O2xhYmVsOm11bHRpU2VsZWN0O1wiKVxuICAgIH1cbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImtleVwiLCBcImlzR3JvdXBMYWJlbE9wdGlvblwiLCBcImxhYmVsXCIsIFwidmFsdWVcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCIsIFwidHJ1bmNhdGlvblByb3BzXCJdLFxuICBfZXhjbHVkZWQzID0gW1wiZGF0YS10ZXN0LXN1YmpcIiwgXCJhY3RpdmVPcHRpb25JbmRleFwiLCBcImFyZUFsbE9wdGlvbnNTZWxlY3RlZFwiLCBcImN1c3RvbU9wdGlvblRleHRcIiwgXCJmdWxsV2lkdGhcIiwgXCJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlXCIsIFwiaXNDYXNlU2Vuc2l0aXZlXCIsIFwiaXNMb2FkaW5nXCIsIFwibGlzdFJlZlwiLCBcIm1hdGNoaW5nT3B0aW9uc1wiLCBcIm9uQ2xvc2VMaXN0XCIsIFwib25DcmVhdGVPcHRpb25cIiwgXCJvbk9wdGlvbkNsaWNrXCIsIFwib25PcHRpb25FbnRlcktleVwiLCBcIm9uU2Nyb2xsXCIsIFwib3B0aW9uc1wiLCBcInJlbmRlck9wdGlvblwiLCBcInJvb3RJZFwiLCBcInJvd0hlaWdodFwiLCBcInNjcm9sbFRvSW5kZXhcIiwgXCJzZWFyY2hWYWx1ZVwiLCBcInNlbGVjdGVkT3B0aW9uc1wiLCBcInNpbmdsZVNlbGVjdGlvblwiLCBcImRlbGltaXRlclwiLCBcInRydW5jYXRpb25Qcm9wc1wiLCBcImxpc3Rib3hBcmlhTGFiZWxcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEZpeGVkU2l6ZUxpc3QgfSBmcm9tICdyZWFjdC13aW5kb3cnO1xuaW1wb3J0IHsgUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uLy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpSGlnaGxpZ2h0IH0gZnJvbSAnLi4vLi4vaGlnaGxpZ2h0JztcbmltcG9ydCB7IEV1aU1hcmsgfSBmcm9tICcuLi8uLi9tYXJrJztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi8uLi90ZXh0JztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlGaWx0ZXJTZWxlY3RJdGVtIH0gZnJvbSAnLi4vLi4vZmlsdGVyX2dyb3VwL2ZpbHRlcl9zZWxlY3RfaXRlbSc7XG5pbXBvcnQgeyBFdWlCYWRnZSB9IGZyb20gJy4uLy4uL2JhZGdlJztcbmltcG9ydCB7IEV1aVRleHRUcnVuY2F0ZSB9IGZyb20gJy4uLy4uL3RleHRfdHJ1bmNhdGUnO1xuaW1wb3J0IHsgRXVpSW5wdXRQb3BvdmVyV2lkdGhDb250ZXh0IH0gZnJvbSAnLi4vLi4vcG9wb3Zlci9pbnB1dF9wb3BvdmVyJztcbmltcG9ydCB7IEV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEV1aUNvbWJvQm94VGl0bGUgfSBmcm9tICcuL2NvbWJvX2JveF90aXRsZSc7XG5pbXBvcnQgeyBldWlDb21ib0JveE9wdGlvbkxpc3RTdHlsZXMsIExJU1RfTUFYX0hFSUdIVCB9IGZyb20gJy4vY29tYm9fYm94X29wdGlvbnNfbGlzdC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBoaXRFbnRlckJhZGdlID0gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwge1xuICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2VudGVyQmFkZ2VcIixcbiAgY29sb3I6IFwiaG9sbG93XCIsXG4gIGljb25UeXBlOiBcInJldHVybktleVwiLFxuICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiXG59KTtcbmV4cG9ydCB2YXIgRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlDb21ib0JveE9wdGlvbnNMaXN0KCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCk7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibGlzdFJlZlwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2V0TGlzdFJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5saXN0UmVmID0gcmVmO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJMaXN0SW5uZXJFbGVtZW50XCIsIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgICAgICBcImFyaWEtbGFiZWxcIjogX3RoaXMucHJvcHMubGlzdGJveEFyaWFMYWJlbCxcbiAgICAgICAgaWQ6IF90aGlzLnByb3BzLnJvb3RJZCgnbGlzdGJveCcpLFxuICAgICAgICByb2xlOiBcImxpc3Rib3hcIixcbiAgICAgICAgdGFiSW5kZXg6IFwiMFwiXG4gICAgICB9KSwgY2hpbGRyZW4pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJMaXN0Um93XCIsIGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgdmFyIF9vcHRpb24ka2V5O1xuICAgICAgdmFyIGRhdGEgPSBfcmVmMi5kYXRhLFxuICAgICAgICBpbmRleCA9IF9yZWYyLmluZGV4LFxuICAgICAgICBzdHlsZSA9IF9yZWYyLnN0eWxlO1xuICAgICAgdmFyIG9wdGlvbiA9IGRhdGFbaW5kZXhdO1xuICAgICAgdmFyIGtleSA9IG9wdGlvbi5rZXksXG4gICAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbiA9IG9wdGlvbi5pc0dyb3VwTGFiZWxPcHRpb24sXG4gICAgICAgIGxhYmVsID0gb3B0aW9uLmxhYmVsLFxuICAgICAgICB2YWx1ZSA9IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgcHJlcGVuZCA9IG9wdGlvbi5wcmVwZW5kLFxuICAgICAgICBhcHBlbmQgPSBvcHRpb24uYXBwZW5kLFxuICAgICAgICBfdHJ1bmNhdGlvblByb3BzID0gb3B0aW9uLnRydW5jYXRpb25Qcm9wcyxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvcHRpb24sIF9leGNsdWRlZDIpO1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHMub25PcHRpb25DbGljayxcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wcy5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHMucmVuZGVyT3B0aW9uLFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzLnNlYXJjaFZhbHVlLFxuICAgICAgICByb290SWQgPSBfdGhpcyRwcm9wcy5yb290SWQ7XG4gICAgICB2YXIgaGFzVHJ1bmNhdGlvblByb3BzID0gX3RoaXMucHJvcHMudHJ1bmNhdGlvblByb3BzIHx8IF90cnVuY2F0aW9uUHJvcHM7XG4gICAgICB2YXIgdHJ1bmNhdGlvblByb3BzID0gaGFzVHJ1bmNhdGlvblByb3BzID8gLy8gSW5kaXZpZHVhbCB0cnVuY2F0aW9uIHNldHRpbmdzIHNob3VsZCBvdmVycmlkZSBjb21wb25lbnQgcHJvcFxuICAgICAgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBfdGhpcy5wcm9wcy50cnVuY2F0aW9uUHJvcHMpLCBfdHJ1bmNhdGlvblByb3BzKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChpc0dyb3VwTGFiZWxPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGtleToga2V5ICE9PSBudWxsICYmIGtleSAhPT0gdm9pZCAwID8ga2V5IDogbGFiZWwsXG4gICAgICAgICAgc3R5bGU6IHN0eWxlXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hUaXRsZSwgbnVsbCwgcHJlcGVuZCwgbGFiZWwsIGFwcGVuZCkpO1xuICAgICAgfVxuICAgICAgdmFyIGNoZWNrZWQgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggJiYgc2VsZWN0ZWRPcHRpb25zWzBdLmxhYmVsID09PSBsYWJlbCAmJiBzZWxlY3RlZE9wdGlvbnNbMF0ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgY2hlY2tlZCA9ICdvbic7XG4gICAgICB9XG4gICAgICB2YXIgb3B0aW9uSXNGb2N1c2VkID0gYWN0aXZlT3B0aW9uSW5kZXggPT09IGluZGV4O1xuICAgICAgdmFyIG9wdGlvbklzRGlzYWJsZWQgPSBvcHRpb24uaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykgJiYgb3B0aW9uLmRpc2FibGVkID09PSB0cnVlO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRmlsdGVyU2VsZWN0SXRlbSwgX2V4dGVuZHMoe1xuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIGtleTogKF9vcHRpb24ka2V5ID0gb3B0aW9uLmtleSkgIT09IG51bGwgJiYgX29wdGlvbiRrZXkgIT09IHZvaWQgMCA/IF9vcHRpb24ka2V5IDogb3B0aW9uLmxhYmVsLFxuICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgIGlmIChvbk9wdGlvbkNsaWNrKSB7XG4gICAgICAgICAgICBvbk9wdGlvbkNsaWNrKG9wdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBpc0ZvY3VzZWQ6IG9wdGlvbklzRm9jdXNlZCxcbiAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgc2hvd0ljb25zOiBzaW5nbGVTZWxlY3Rpb24gPyB0cnVlIDogZmFsc2UsXG4gICAgICAgIGlkOiByb290SWQoXCJfb3B0aW9uLVwiLmNvbmNhdChpbmRleCkpLFxuICAgICAgICB0aXRsZTogbGFiZWxcbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQsIHtcbiAgICAgICAgb3B0aW9uOiBvcHRpb24sXG4gICAgICAgIGNsYXNzTmFtZVByZWZpeDogXCJldWlDb21ib0JveE9wdGlvblwiLFxuICAgICAgICBtYXJnaW5TaXplOiBcInNcIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2NvbnRlbnRcIlxuICAgICAgfSwgcmVuZGVyT3B0aW9uID8gcmVuZGVyT3B0aW9uKG9wdGlvbiwgc2VhcmNoVmFsdWUsICdldWlDb21ib0JveE9wdGlvbl9fcmVuZGVyT3B0aW9uJykgOiBfdGhpcy5yZW5kZXJUcnVuY2F0ZWRPcHRpb24obGFiZWwsIHRydW5jYXRpb25Qcm9wcykpKSwgb3B0aW9uSXNGb2N1c2VkICYmICFvcHRpb25Jc0Rpc2FibGVkID8gaGl0RW50ZXJCYWRnZSA6IG51bGwpKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib3B0aW9uV2lkdGhcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2V0T3B0aW9uV2lkdGhcIiwgZnVuY3Rpb24gKHdpZHRoKSB7XG4gICAgICBfdGhpcy5vcHRpb25XaWR0aCA9IHdpZHRoO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZW5kZXJUcnVuY2F0ZWRPcHRpb25cIiwgZnVuY3Rpb24gKHRleHQsIHRydW5jYXRpb25Qcm9wcykge1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gX3RoaXMucHJvcHMuc2VhcmNoVmFsdWUudHJpbSgpO1xuICAgICAgaWYgKCF0cnVuY2F0aW9uUHJvcHMgJiYgIXNlYXJjaFZhbHVlKSB7XG4gICAgICAgIC8vIERlZmF1bHQgdG8gQ1NTIHRleHQtb3ZlcmZsb3dcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICB9XG4gICAgICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRleHRUcnVuY2F0ZSwgX2V4dGVuZHMoe1xuICAgICAgICAgIHdpZHRoOiBfdGhpcy5vcHRpb25XaWR0aCxcbiAgICAgICAgICBvblJlc2l6ZTogX3RoaXMuc2V0T3B0aW9uV2lkdGhcbiAgICAgICAgfSwgdHJ1bmNhdGlvblByb3BzLCB7XG4gICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICB9KSwgZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB2YXIgc2VhcmNoUG9zaXRpb25TdGFydCA9IF90aGlzLnByb3BzLmlzQ2FzZVNlbnNpdGl2ZSA/IHRleHQuaW5kZXhPZihzZWFyY2hWYWx1ZSkgOiB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIHZhciBzZWFyY2hQb3NpdGlvbkNlbnRlciA9IHNlYXJjaFBvc2l0aW9uU3RhcnQgKyBNYXRoLmZsb29yKHNlYXJjaFZhbHVlLmxlbmd0aCAvIDIpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGV4dFRydW5jYXRlLCBfZXh0ZW5kcyh7XG4gICAgICAgIHdpZHRoOiBfdGhpcy5vcHRpb25XaWR0aCxcbiAgICAgICAgb25SZXNpemU6IF90aGlzLnNldE9wdGlvbldpZHRoXG4gICAgICB9LCB0cnVuY2F0aW9uUHJvcHMsIHtcbiAgICAgICAgLy8gV2hlbiBzZWFyY2hpbmcsIGRvbid0IGFsbG93IG92ZXJyaWRpbmcgdGhlIHRydW5jYXRpb24gc2V0dGluZ3NcbiAgICAgICAgdHJ1bmNhdGlvbjogXCJzdGFydEVuZFwiLFxuICAgICAgICB0cnVuY2F0aW9uUG9zaXRpb246IHNlYXJjaFBvc2l0aW9uQ2VudGVyLFxuICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICB9KSwgZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHRleHQubGVuZ3RoID49IHNlYXJjaFZhbHVlLmxlbmd0aCA/IF9fX0Vtb3Rpb25KU1goRXVpSGlnaGxpZ2h0LCB7XG4gICAgICAgICAgc2VhcmNoOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICBzdHJpY3Q6IF90aGlzLnByb3BzLmlzQ2FzZVNlbnNpdGl2ZVxuICAgICAgICB9LCB0ZXh0KSA6XG4gICAgICAgIC8vIElmIHRoZSBhdmFpbGFibGUgdHJ1bmNhdGVkIHRleHQgaXMgc2hvcnRlciB0aGFuIHRoZSBmdWxsIHNlYXJjaCBzdHJpbmcsXG4gICAgICAgIC8vIGp1c3QgaGlnaGxpZ2h0IHRoZSBlbnRpcmUgdHJ1bmNhdGVkIHRleHRcbiAgICAgICAgX19fRW1vdGlvbkpTWChFdWlNYXJrLCBudWxsLCB0ZXh0KSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICBpZiAodGhpcy5saXN0UmVmICYmIHR5cGVvZiB0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSBwcmV2UHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgICAgdGhpcy5saXN0UmVmLnNjcm9sbFRvSXRlbSh0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4LCAnYXV0bycpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgZGF0YVRlc3RTdWJqID0gX3RoaXMkcHJvcHMyWydkYXRhLXRlc3Qtc3ViaiddLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgYXJlQWxsT3B0aW9uc1NlbGVjdGVkID0gX3RoaXMkcHJvcHMyLmFyZUFsbE9wdGlvbnNTZWxlY3RlZCxcbiAgICAgICAgY3VzdG9tT3B0aW9uVGV4dCA9IF90aGlzJHByb3BzMi5jdXN0b21PcHRpb25UZXh0LFxuICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wczIuZnVsbFdpZHRoLFxuICAgICAgICBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMyLmdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUsXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IF90aGlzJHByb3BzMi5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMi5pc0xvYWRpbmcsXG4gICAgICAgIGxpc3RSZWYgPSBfdGhpcyRwcm9wczIubGlzdFJlZixcbiAgICAgICAgbWF0Y2hpbmdPcHRpb25zID0gX3RoaXMkcHJvcHMyLm1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgb25DbG9zZUxpc3QgPSBfdGhpcyRwcm9wczIub25DbG9zZUxpc3QsXG4gICAgICAgIG9uQ3JlYXRlT3B0aW9uID0gX3RoaXMkcHJvcHMyLm9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHMyLm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgIG9uT3B0aW9uRW50ZXJLZXkgPSBfdGhpcyRwcm9wczIub25PcHRpb25FbnRlcktleSxcbiAgICAgICAgb25TY3JvbGwgPSBfdGhpcyRwcm9wczIub25TY3JvbGwsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczIub3B0aW9ucyxcbiAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHMyLnJlbmRlck9wdGlvbixcbiAgICAgICAgcm9vdElkID0gX3RoaXMkcHJvcHMyLnJvb3RJZCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHMyLnJvd0hlaWdodCxcbiAgICAgICAgc2Nyb2xsVG9JbmRleCA9IF90aGlzJHByb3BzMi5zY3JvbGxUb0luZGV4LFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzMi5zZWFyY2hWYWx1ZSxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMyLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMyLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgZGVsaW1pdGVyID0gX3RoaXMkcHJvcHMyLmRlbGltaXRlcixcbiAgICAgICAgdHJ1bmNhdGlvblByb3BzID0gX3RoaXMkcHJvcHMyLnRydW5jYXRpb25Qcm9wcyxcbiAgICAgICAgbGlzdGJveEFyaWFMYWJlbCA9IF90aGlzJHByb3BzMi5saXN0Ym94QXJpYUxhYmVsLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkMyk7XG4gICAgICB2YXIgZW1wdHlTdGF0ZUNvbnRlbnQ7XG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChFdWlGbGV4R3JvdXAsIHtcbiAgICAgICAgICBndXR0ZXJTaXplOiBcInNcIixcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICByZXNwb25zaXZlOiBmYWxzZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgICAgZ3JvdzogZmFsc2VcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgICAgIHNpemU6IFwibVwiXG4gICAgICAgIH0pKSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgICAgICAgIGdyb3c6IGZhbHNlXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3QubG9hZGluZ09wdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkxvYWRpbmcgb3B0aW9uc1wiXG4gICAgICAgIH0pKSk7XG4gICAgICB9IGVsc2UgaWYgKHNlYXJjaFZhbHVlICYmIG1hdGNoaW5nT3B0aW9ucyAmJiBtYXRjaGluZ09wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChvbkNyZWF0ZU9wdGlvbiAmJiBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKSB7XG4gICAgICAgICAgaWYgKGRlbGltaXRlciAmJiBzZWFyY2hWYWx1ZS5pbmNsdWRlcyhkZWxpbWl0ZXIpKSB7XG4gICAgICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2NvbnRlbnRXcmFwcGVyXCJcbiAgICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19lbXB0eVN0YXRlVGV4dFwiXG4gICAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5kZWxpbWl0ZXJNZXNzYWdlXCIsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IFwiQWRkIGVhY2ggaXRlbSBzZXBhcmF0ZWQgYnkge2RlbGltaXRlcn1cIixcbiAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIGRlbGltaXRlcilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLCBoaXRFbnRlckJhZGdlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkT3B0aW9uRm9yVmFsdWUgPSBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKHtcbiAgICAgICAgICAgICAgaXNDYXNlU2Vuc2l0aXZlOiBpc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uRm9yVmFsdWUpIHtcbiAgICAgICAgICAgICAgLy8gRGlzYWxsb3cgZHVwbGljYXRlIGN1c3RvbSBvcHRpb25zLlxuICAgICAgICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3QuYWxyZWFkeUFkZGVkXCIsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXCJ7bGFiZWx9IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWRcIixcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIHNlbGVjdGVkT3B0aW9uRm9yVmFsdWUubGFiZWwpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgaGlnaGxpZ2h0U2VhcmNoVmFsdWUgPSBmdW5jdGlvbiBoaWdobGlnaHRTZWFyY2hWYWx1ZSh0ZXh0LCBzZWFyY2hWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKC8oXFx7c2VhcmNoVmFsdWV9KS8sICdnaScpO1xuICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IHRleHQuc3BsaXQocmVnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19lbXB0eVN0YXRlVGV4dFwiXG4gICAgICAgICAgICAgICAgfSwgcGFydHMubWFwKGZ1bmN0aW9uIChwYXJ0LCBpZHgpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0Lm1hdGNoKHJlZykgPyBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBpZHhcbiAgICAgICAgICAgICAgICAgIH0sIHNlYXJjaFZhbHVlKSA6IHBhcnQ7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgICAgICAgICB9LCBjdXN0b21PcHRpb25UZXh0ID8gaGlnaGxpZ2h0U2VhcmNoVmFsdWUoY3VzdG9tT3B0aW9uVGV4dCwgc2VhcmNoVmFsdWUpIDogX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmNyZWF0ZUN1c3RvbU9wdGlvblwiLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiQWRkIHtzZWFyY2hWYWx1ZX0gYXMgYSBjdXN0b20gb3B0aW9uXCIsXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICBzZWFyY2hWYWx1ZTogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWFyY2hWYWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pKSwgaGl0RW50ZXJCYWRnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0Lm5vTWF0Y2hpbmdPcHRpb25zXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIntzZWFyY2hWYWx1ZX0gZG9lc24ndCBtYXRjaCBhbnkgb3B0aW9uc1wiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIHNlYXJjaFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0Lm5vQXZhaWxhYmxlT3B0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVGhlcmUgYXJlbid0IGFueSBvcHRpb25zIGF2YWlsYWJsZVwiXG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJlQWxsT3B0aW9uc1NlbGVjdGVkKSB7XG4gICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5hbGxPcHRpb25zU2VsZWN0ZWRcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIllvdSd2ZSBzZWxlY3RlZCBhbGwgYXZhaWxhYmxlIG9wdGlvbnNcIlxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICB2YXIgbnVtVmlzaWJsZU9wdGlvbnMgPSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIDwgNyA/IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggOiA3O1xuICAgICAgdmFyIGhlaWdodCA9IG51bVZpc2libGVPcHRpb25zICogKHJvd0hlaWdodCArIDEpOyAvLyBBZGQgb25lIGZvciB0aGUgYm9yZGVyXG5cbiAgICAgIC8vIGJvdW5kZWQgYnkgbWF4LWhlaWdodCBvZiAuZXVpQ29tYm9Cb3hPcHRpb25zTGlzdFxuICAgICAgdmFyIGJvdW5kZWRIZWlnaHQgPSBoZWlnaHQgPiBMSVNUX01BWF9IRUlHSFQgPyBMSVNUX01BWF9IRUlHSFQgOiBoZWlnaHQ7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZW5kZXJXaXRoRXVpU3R5bGVzTWVtb2l6ZXIsIG51bGwsIGZ1bmN0aW9uIChzdHlsZXNNZW1vaXplcikge1xuICAgICAgICB2YXIgc3R5bGVzID0gc3R5bGVzTWVtb2l6ZXIoZXVpQ29tYm9Cb3hPcHRpb25MaXN0U3R5bGVzKTtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNzczogc3R5bGVzLmV1aUNvbWJvQm94T3B0aW9uTGlzdCxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdFwiLFxuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogY2xhc3NOYW1lcygnY29tYm9Cb3hPcHRpb25zTGlzdCcsIGRhdGFUZXN0U3ViaiksXG4gICAgICAgICAgcmVmOiBsaXN0UmVmXG4gICAgICAgIH0sIHJlc3QpLCBlbXB0eVN0YXRlQ29udGVudCA/IF9fX0Vtb3Rpb25KU1goRXVpVGV4dCwge1xuICAgICAgICAgIHNpemU6IFwieHNcIixcbiAgICAgICAgICBjc3M6IHN0eWxlcy5ldWlDb21ib0JveE9wdGlvbnNMaXN0X19lbXB0eSxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdF9fZW1wdHlcIlxuICAgICAgICB9LCBlbXB0eVN0YXRlQ29udGVudCkgOiBfX19FbW90aW9uSlNYKEZpeGVkU2l6ZUxpc3QsIHtcbiAgICAgICAgICBjc3M6IHN0eWxlcy5ldWlDb21ib0JveE9wdGlvbkxpc3RfX3ZpcnR1YWxpemF0aW9uLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0X192aXJ0dWFsaXphdGlvblwiLFxuICAgICAgICAgIGhlaWdodDogYm91bmRlZEhlaWdodCxcbiAgICAgICAgICBvblNjcm9sbDogb25TY3JvbGwsXG4gICAgICAgICAgaXRlbUNvdW50OiBtYXRjaGluZ09wdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIGl0ZW1TaXplOiByb3dIZWlnaHQsXG4gICAgICAgICAgaXRlbURhdGE6IG1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgICByZWY6IF90aGlzMi5zZXRMaXN0UmVmLFxuICAgICAgICAgIGlubmVyRWxlbWVudFR5cGU6IF90aGlzMi5MaXN0SW5uZXJFbGVtZW50LFxuICAgICAgICAgIHdpZHRoOiBfdGhpczIuY29udGV4dFxuICAgICAgICB9LCBfdGhpczIuTGlzdFJvdykpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwgXCJjb250ZXh0VHlwZVwiLCBFdWlJbnB1dFBvcG92ZXJXaWR0aENvbnRleHQpO1xuX2RlZmluZVByb3BlcnR5KEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgJ2RhdGEtdGVzdC1zdWJqJzogJycsXG4gIHJvd0hlaWdodDogMjksXG4gIC8vIHJvdyBoZWlnaHQgb2YgZGVmYXVsdCBvcHRpb24gcmVuZGVyZXJcbiAgaXNDYXNlU2Vuc2l0aXZlOiBmYWxzZVxufSk7XG5FdWlDb21ib0JveE9wdGlvbnNMaXN0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGFjdGl2ZU9wdGlvbkluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBhcmVBbGxPcHRpb25zU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBsaXN0Ym94QXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjdXN0b20gdGV4dCBvcHRpb24uIFlvdSBjYW4gdXNlIGB7c2VhcmNoVmFsdWV9YCBpbnNpZGUgeW91ciBzdHJpbmcgdG8gYmV0dGVyIGN1c3RvbWl6ZSB5b3VyIHRleHQuXG4gICAgICogSXQgd29uJ3Qgc2hvdyBpZiB0aGVyZSdzIG5vIG9uQ3JlYXRlT3B0aW9uLlxuICAgICAqL1xuICBjdXN0b21PcHRpb25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcbiAgaXNDYXNlU2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgbGlzdFJlZjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBtYXRjaGluZ09wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgICAvKipcbiAgICAgICAgICogT3B0aW9uYWwgY3VzdG9tIHRvb2x0aXAgY29udGVudCBmb3IgdGhlIGJ1dHRvblxuICAgICAgICAgKi9cbiAgICAgIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIC8qKlxuICAgICAgICAgKiBPcHRpb25hbCBwcm9wcyB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nICoqW0V1aVRvb2xUaXBdKC8jL2Rpc3BsYXkvdG9vbHRpcCkqKlxuICAgICAgICAgKi9cbiAgICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gICAgfSkuaXNSZXF1aXJlZCksXG4gICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBjdXN0b20gdG9vbHRpcCBjb250ZW50IGZvciB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBwcm9wcyB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nICoqW0V1aVRvb2xUaXBdKC8jL2Rpc3BsYXkvdG9vbHRpcCkqKlxuICAgICAgICovXG4gICAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIG9uQ2xvc2VMaXN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkNyZWF0ZU9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uT3B0aW9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvbk9wdGlvbkVudGVyS2V5OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TY3JvbGw6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFycmF5IG9mIEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uIG9iamVjdHMuIFNlZSAjRXVpQ29tYm9Cb3hPcHRpb25PcHRpb25cbiAgICAgKi9cbiAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAgIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gICAgfSkuaXNSZXF1aXJlZCksXG4gICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuICByZW5kZXJPcHRpb246IFByb3BUeXBlcy5mdW5jLFxuICByb290SWQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgcm93SGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHNjcm9sbFRvSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIHNlYXJjaFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHNlbGVjdGVkT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAgIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gICAgfSkuaXNSZXF1aXJlZCksXG4gICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXNQbGFpblRleHQ6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgZGVsaW1pdGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInNlYXJjaFwiLCBcInN0cmljdFwiLCBcImhpZ2hsaWdodEFsbFwiLCBcImhhc1NjcmVlblJlYWRlckhlbHBUZXh0XCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEV1aU1hcmsgfSBmcm9tICcuLi9tYXJrJztcbmltcG9ydCB7IEhpZ2hsaWdodEFsbCB9IGZyb20gJy4vX2hpZ2hsaWdodF9hbGwnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0Rmlyc3QgfSBmcm9tICcuL19oaWdobGlnaHRfZmlyc3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSGlnaGxpZ2h0ID0gZnVuY3Rpb24gRXVpSGlnaGxpZ2h0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBzZWFyY2ggPSBfcmVmLnNlYXJjaCxcbiAgICBfcmVmJHN0cmljdCA9IF9yZWYuc3RyaWN0LFxuICAgIHN0cmljdCA9IF9yZWYkc3RyaWN0ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkc3RyaWN0LFxuICAgIF9yZWYkaGlnaGxpZ2h0QWxsID0gX3JlZi5oaWdobGlnaHRBbGwsXG4gICAgaGlnaGxpZ2h0QWxsID0gX3JlZiRoaWdobGlnaHRBbGwgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRoaWdobGlnaHRBbGwsXG4gICAgX3JlZiRoYXNTY3JlZW5SZWFkZXJIID0gX3JlZi5oYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCxcbiAgICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCA9IF9yZWYkaGFzU2NyZWVuUmVhZGVySCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkaGFzU2NyZWVuUmVhZGVySCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBoYXNTZWFyY2ggPSBzZWFyY2ggJiYgc2VhcmNoLmxlbmd0aCA+IDA7XG4gIHZhciBIaWdobGlnaHRDb21wb25lbnQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgQ29tcG9uZW50ID0gZnVuY3Rpb24gQ29tcG9uZW50KF9yZWYyKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbjtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aU1hcmssIHtcbiAgICAgICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQ6IGhhc1NjcmVlblJlYWRlckhlbHBUZXh0XG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfTtcbiAgICBDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgICAgY2hpbGRyZW46IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICAgIH07XG4gICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gJ19IaWdobGlnaHRDb21wb25lbnQnO1xuICAgIHJldHVybiBDb21wb25lbnQ7XG4gIH0sIFtoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dF0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0sIHJlc3QpLCBjaGlsZHJlbiAmJiBoYXNTZWFyY2ggPyBoaWdobGlnaHRBbGwgPyBfX19FbW90aW9uSlNYKEhpZ2hsaWdodEFsbCwge1xuICAgIHNlYXJjaFZhbHVlOiBzZWFyY2gsXG4gICAgc2VhcmNoU3ViamVjdDogY2hpbGRyZW4sXG4gICAgaXNTdHJpY3Q6IHN0cmljdCxcbiAgICBoaWdobGlnaHRDb21wb25lbnQ6IEhpZ2hsaWdodENvbXBvbmVudFxuICB9KSA6IF9fX0Vtb3Rpb25KU1goSGlnaGxpZ2h0Rmlyc3QsIHtcbiAgICBzZWFyY2hWYWx1ZTogc2VhcmNoLFxuICAgIHNlYXJjaFN1YmplY3Q6IGNoaWxkcmVuLFxuICAgIGlzU3RyaWN0OiBzdHJpY3QsXG4gICAgaGlnaGxpZ2h0Q29tcG9uZW50OiBIaWdobGlnaHRDb21wb25lbnRcbiAgfSkgOiBjaGlsZHJlbik7XG59O1xuRXVpSGlnaGxpZ2h0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogc3RyaW5nIHRvIGhpZ2hsaWdodCBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgICAqIFdoYXQgdG8gc2VhcmNoIGZvci5cbiAgICAgICAqXG4gICAgICAgKiBBbGxvd3MgcGFzc2luZyBhbiBhcnJheSBvZiBzdHJpbmdzIChzZWFyY2hpbmcgYnkgbXVsdGlwbGUgc2VwYXJhdGVcbiAgICAgICAqIHdvcmRzIG9yIHBocmFzZXMpICoqb25seSoqIGlmIGBoaWdobGlnaHRBbGxgIGlzIGFsc28gc2V0IHRvIGB0cnVlYC5cbiAgICAgICAqL1xuICBzZWFyY2g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICAgKiBTaG91bGQgdGhlIHNlYXJjaCBiZSBzdHJpY3Qgb3Igbm90XG4gICAgICAgKi9cbiAgc3RyaWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBTaG91bGQgaGlnaGxpZ2h0IGFsbCBtYXRjaGVzXG4gICAgICAgKi9cbiAgaGlnaGxpZ2h0QWxsOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaGFzU2NyZWVuUmVhZGVySGVscFRleHRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aU1hcmtTdHlsZXMsIGV1aU1hcmtTY3JlZW5SZWFkZXJTdHlsZXMgfSBmcm9tICcuL21hcmsuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aU1hcmsgPSBmdW5jdGlvbiBFdWlNYXJrKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJGhhc1NjcmVlblJlYWRlckggPSBfcmVmLmhhc1NjcmVlblJlYWRlckhlbHBUZXh0LFxuICAgIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0ID0gX3JlZiRoYXNTY3JlZW5SZWFkZXJIID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRoYXNTY3JlZW5SZWFkZXJILFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlNYXJrJywgY2xhc3NOYW1lKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aU1hcmtTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgaGlnaGxpZ2h0U3RhcnQgPSB1c2VFdWlJMThuKCdldWlNYXJrLmhpZ2hsaWdodFN0YXJ0JywgJ2hpZ2hsaWdodCBzdGFydCcpO1xuICB2YXIgaGlnaGxpZ2h0RW5kID0gdXNlRXVpSTE4bignZXVpTWFyay5oaWdobGlnaHRFbmQnLCAnaGlnaGxpZ2h0IGVuZCcpO1xuICB2YXIgc2NyZWVuUmVhZGVyU3R5bGVzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGV1aU1hcmtTY3JlZW5SZWFkZXJTdHlsZXMoaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVuZCk7XG4gIH0sIFtoaWdobGlnaHRTdGFydCwgaGlnaGxpZ2h0RW5kXSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aU1hcmssIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0ICYmIHNjcmVlblJlYWRlclN0eWxlcy5oYXNTY3JlZW5SZWFkZXJIZWxwVGV4dF07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwibWFya1wiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpTWFyay5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFNldCB0byBgZmFsc2VgIHRvIHJlbW92ZSB0aGUgQ1NTIDpiZWZvcmUgYW5kIDphZnRlclxuICAgICAgICogc2NyZWVuIHJlYWRlciBoZWxwZXIgdGV4dFxuICAgICAgICovXG4gIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmV4cG9ydCB2YXIgZXVpTWFya1N0eWxlcyA9IGZ1bmN0aW9uIGV1aU1hcmtTdHlsZXMoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlO1xuICAvLyBUT0RPOiBXYXMgJGV1aUZvY3VzQmFja2dyb3VuZENvbG9yXG4gIHZhciB0cmFuc3BhcmVuY3kgPSB7XG4gICAgTElHSFQ6IDAuMSxcbiAgICBEQVJLOiAwLjNcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBldWlNYXJrOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIHRyYW5zcGFyZW5jeVtjb2xvck1vZGVdKSwgXCI7Zm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0LmJvbGQsIFwiO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7O2xhYmVsOmV1aU1hcms7XCIpXG4gIH07XG59O1xuZXhwb3J0IHZhciBldWlNYXJrU2NyZWVuUmVhZGVyU3R5bGVzID0gZnVuY3Rpb24gZXVpTWFya1NjcmVlblJlYWRlclN0eWxlcyhoaWdobGlnaHRTdGFydCwgaGlnaGxpZ2h0RW5kKSB7XG4gIHJldHVybiB7XG4gICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQ6IC8qI19fUFVSRV9fKi9jc3MoXCImOjpiZWZvcmUsJjo6YWZ0ZXJ7XCIsIGV1aVNjcmVlblJlYWRlck9ubHkoKSwgXCI7fSY6OmJlZm9yZXtjb250ZW50OicgW1wiLCBoaWdobGlnaHRTdGFydCwgXCJdICc7fSY6OmFmdGVye2NvbnRlbnQ6JyBbXCIsIGhpZ2hsaWdodEVuZCwgXCJdICc7fTtsYWJlbDpoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dDtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoL2VzY2FwZVJlZ0V4cCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuLyoqXG4gKiBJbnRlcm5hbCBzdWJjb21wb25lbnQgd2l0aCBsb2dpYyBmb3IgaGlnaGxpZ2h0aW5nIGFsbCBvY2N1cnJlbmNlc1xuICogb2YgYSBzZWFyY2ggdmFsdWUgd2l0aGluIGEgc3ViamVjdFxuICpcbiAqIFVzZXMgcmVnZXggcmF0aGVyIHRoYW4gaW5kZXhPZi93aGlsZSBsb29wcyBmb3IgZWFzaWVyIGRldiBtYWludGFpbmFiaWxpdHlcbiAqL1xuZXhwb3J0IHZhciBIaWdobGlnaHRBbGwgPSBmdW5jdGlvbiBIaWdobGlnaHRBbGwoX3JlZikge1xuICB2YXIgc2VhcmNoU3ViamVjdCA9IF9yZWYuc2VhcmNoU3ViamVjdCxcbiAgICBfc2VhcmNoVmFsdWUgPSBfcmVmLnNlYXJjaFZhbHVlLFxuICAgIGlzU3RyaWN0ID0gX3JlZi5pc1N0cmljdCxcbiAgICBfcmVmJGhpZ2hsaWdodENvbXBvbmUgPSBfcmVmLmhpZ2hsaWdodENvbXBvbmVudCxcbiAgICBIaWdobGlnaHRDb21wb25lbnQgPSBfcmVmJGhpZ2hsaWdodENvbXBvbmUgPT09IHZvaWQgMCA/ICdtYXJrJyA6IF9yZWYkaGlnaGxpZ2h0Q29tcG9uZTtcbiAgdmFyIHNlYXJjaFZhbHVlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoX3NlYXJjaFZhbHVlKSA/IF9zZWFyY2hWYWx1ZS5tYXAoZXNjYXBlUmVnRXhwKS5qb2luKCd8JykgOiBlc2NhcGVSZWdFeHAoX3NlYXJjaFZhbHVlKTtcbiAgfSwgW19zZWFyY2hWYWx1ZV0pO1xuICB2YXIgY2h1bmtzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cChzZWFyY2hWYWx1ZSwgaXNTdHJpY3QgPyAnZycgOiAnZ2knKTtcbiAgICB2YXIgbWF0Y2hlcyA9IF90b0NvbnN1bWFibGVBcnJheShzZWFyY2hTdWJqZWN0Lm1hdGNoQWxsKHJlZ2V4KSkubWFwKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IG1hdGNoLmluZGV4IHx8IDAsXG4gICAgICAgIGVuZDogKG1hdGNoLmluZGV4IHx8IDApICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBmaWxsSW5DaHVua3MobWF0Y2hlcywgc2VhcmNoU3ViamVjdC5sZW5ndGgpO1xuICB9LCBbc2VhcmNoVmFsdWUsIHNlYXJjaFN1YmplY3QsIGlzU3RyaWN0XSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaHVua3MubWFwKGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHZhciBlbmQgPSBjaHVuay5lbmQsXG4gICAgICBoaWdobGlnaHQgPSBjaHVuay5oaWdobGlnaHQsXG4gICAgICBzdGFydCA9IGNodW5rLnN0YXJ0O1xuICAgIHZhciB2YWx1ZSA9IHNlYXJjaFN1YmplY3Quc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuICAgIHJldHVybiBoaWdobGlnaHQgPyBfX19FbW90aW9uSlNYKEhpZ2hsaWdodENvbXBvbmVudCwge1xuICAgICAga2V5OiBzdGFydFxuICAgIH0sIHZhbHVlKSA6IHZhbHVlO1xuICB9KSk7XG59O1xuXG4vKipcbiAqIENodW5rIHV0aWxpdHlcbiAqL1xuSGlnaGxpZ2h0QWxsLnByb3BUeXBlcyA9IHtcbiAgc2VhcmNoVmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgc2VhcmNoU3ViamVjdDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpc1N0cmljdDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaGlnaGxpZ2h0Q29tcG9uZW50OiBQcm9wVHlwZXMuYW55XG59O1xudmFyIGZpbGxJbkNodW5rcyA9IGZ1bmN0aW9uIGZpbGxJbkNodW5rcyhjaHVua3NUb0hpZ2hsaWdodCwgdG90YWxMZW5ndGgpIHtcbiAgdmFyIGFsbENodW5rcyA9IFtdO1xuICB2YXIgYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKHN0YXJ0LCBlbmQsIGhpZ2hsaWdodCkge1xuICAgIGlmIChlbmQgLSBzdGFydCA+IDApIHtcbiAgICAgIGFsbENodW5rcy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICBlbmQ6IGVuZCxcbiAgICAgICAgaGlnaGxpZ2h0OiBoaWdobGlnaHRcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgaWYgKGNodW5rc1RvSGlnaGxpZ2h0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGFwcGVuZCgwLCB0b3RhbExlbmd0aCwgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsYXN0SW5kZXggPSAwO1xuICAgIGNodW5rc1RvSGlnaGxpZ2h0LmZvckVhY2goZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICBhcHBlbmQobGFzdEluZGV4LCBjaHVuay5zdGFydCwgZmFsc2UpO1xuICAgICAgYXBwZW5kKGNodW5rLnN0YXJ0LCBjaHVuay5lbmQsIHRydWUpO1xuICAgICAgbGFzdEluZGV4ID0gY2h1bmsuZW5kO1xuICAgIH0pO1xuICAgIGFwcGVuZChsYXN0SW5kZXgsIHRvdGFsTGVuZ3RoLCBmYWxzZSk7XG4gIH1cbiAgcmV0dXJuIGFsbENodW5rcztcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuLyoqXG4gKiBJbnRlcm5hbCBzdWJjb21wb25lbnQgd2l0aCBsb2dpYyBmb3IgaGlnaGxpZ2h0aW5nIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2VcbiAqIG9mIGEgc2VhcmNoIHZhbHVlIHdpdGhpbiBhIHN1YmplY3RcbiAqXG4gKiBVc2VzIGluZGV4T2YgZm9yIHBlcmZvcm1hbmNlICh3aGljaCBkb2VzIG1hdHRlciBmb3IsIGUuZy4gRXVpU2VsZWN0YWJsZSBzZWFyY2hpbmcpXG4gKi9cbmV4cG9ydCB2YXIgSGlnaGxpZ2h0Rmlyc3QgPSBmdW5jdGlvbiBIaWdobGlnaHRGaXJzdChfcmVmKSB7XG4gIHZhciBzZWFyY2hTdWJqZWN0ID0gX3JlZi5zZWFyY2hTdWJqZWN0LFxuICAgIHNlYXJjaFZhbHVlID0gX3JlZi5zZWFyY2hWYWx1ZSxcbiAgICBpc1N0cmljdCA9IF9yZWYuaXNTdHJpY3QsXG4gICAgX3JlZiRoaWdobGlnaHRDb21wb25lID0gX3JlZi5oaWdobGlnaHRDb21wb25lbnQsXG4gICAgSGlnaGxpZ2h0Q29tcG9uZW50ID0gX3JlZiRoaWdobGlnaHRDb21wb25lID09PSB2b2lkIDAgPyAnbWFyaycgOiBfcmVmJGhpZ2hsaWdodENvbXBvbmU7XG4gIGlmIChBcnJheS5pc0FycmF5KHNlYXJjaFZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIG11bHRpcGxlIHNlYXJjaCBzdHJpbmdzIHdpdGhvdXQgYGhpZ2hsaWdodEFsbGAgZW5hYmxlZCcpO1xuICB9XG4gIHZhciBub3JtYWxpemVkU2VhcmNoU3ViamVjdCA9IGlzU3RyaWN0ID8gc2VhcmNoU3ViamVjdCA6IHNlYXJjaFN1YmplY3QudG9Mb3dlckNhc2UoKTtcbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IGlzU3RyaWN0ID8gc2VhcmNoVmFsdWUgOiBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICB2YXIgaW5kZXhPZk1hdGNoID0gbm9ybWFsaXplZFNlYXJjaFN1YmplY3QuaW5kZXhPZihub3JtYWxpemVkU2VhcmNoVmFsdWUpO1xuICBpZiAoaW5kZXhPZk1hdGNoID09PSAtMSkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBzZWFyY2hTdWJqZWN0KTtcbiAgfVxuICB2YXIgcHJlTWF0Y2ggPSBzZWFyY2hTdWJqZWN0LnN1YnN0cmluZygwLCBpbmRleE9mTWF0Y2gpO1xuICB2YXIgbWF0Y2ggPSBzZWFyY2hTdWJqZWN0LnN1YnN0cmluZyhpbmRleE9mTWF0Y2gsIGluZGV4T2ZNYXRjaCArIHNlYXJjaFZhbHVlLmxlbmd0aCk7XG4gIHZhciBwb3N0TWF0Y2ggPSBzZWFyY2hTdWJqZWN0LnN1YnN0cmluZyhpbmRleE9mTWF0Y2ggKyBzZWFyY2hWYWx1ZS5sZW5ndGgpO1xuICByZXR1cm4gKFxuICAgIC8vIE5vdGU6IFJlYWN0IDE2LzE3IHdpbGwgcmVuZGVyIGVtcHR5IHN0cmluZ3MgaW4gdGhlIERPTS4gVGhlXG4gICAgLy8gYHx8IHVuZGVmaW5lZGAgcHJldmVudHMgdGhpcyAmIGtlZXBzIHNuYXBzaG90cyB0aGUgc2FtZSBmb3IgYWxsIHZlcnNpb25zXG4gICAgX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgcHJlTWF0Y2ggfHwgdW5kZWZpbmVkLCBfX19FbW90aW9uSlNYKEhpZ2hsaWdodENvbXBvbmVudCwgbnVsbCwgbWF0Y2gpLCBwb3N0TWF0Y2ggfHwgdW5kZWZpbmVkKVxuICApO1xufTtcbkhpZ2hsaWdodEZpcnN0LnByb3BUeXBlcyA9IHtcbiAgc2VhcmNoVmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgc2VhcmNoU3ViamVjdDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpc1N0cmljdDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaGlnaGxpZ2h0Q29tcG9uZW50OiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGhlbWVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiY2hlY2tlZFwiLCBcImlzRm9jdXNlZFwiLCBcInNob3dJY29uc1wiLCBcInRvb2xUaXBDb250ZW50XCIsIFwidG9vbFRpcFByb3BzXCIsIFwic3R5bGVcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIGNyZWF0ZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgd2l0aEV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IGV1aUZpbHRlclNlbGVjdEl0ZW1TdHlsZXMgfSBmcm9tICcuL2ZpbHRlcl9zZWxlY3RfaXRlbS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciByZXNvbHZlSWNvbkFuZENvbG9yID0gZnVuY3Rpb24gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSB7XG4gIGlmICghY2hlY2tlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBpY29uOiAnZW1wdHknXG4gICAgfTtcbiAgfVxuICByZXR1cm4gY2hlY2tlZCA9PT0gJ29uJyA/IHtcbiAgICBpY29uOiAnY2hlY2snLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfSA6IHtcbiAgICBpY29uOiAnY3Jvc3MnLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfTtcbn07XG5cbi8qKlxuICogVE9ETzogVGhpcyBjb21wb25lbnQgc2hvdWxkIHJlbW92ZWQgaW4gZmF2b3Igb2YgRXVpU2VsZWN0YWJsZSB1c2FnZVxuICogb25jZSBFdWlDb21ib0JveCBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gZG9nZm9vZCBFdWlTZWxlY3RhYmxlLlxuICpcbiAqIEBkZXByZWNhdGVkIC0gVXNlIEV1aVNlbGVjdGFibGUgaW5zdGVhZFxuICovXG5leHBvcnQgdmFyIEV1aUZpbHRlclNlbGVjdEl0ZW1DbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MoKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aUZpbHRlclNlbGVjdEl0ZW1DbGFzcywgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYnV0dG9uUmVmXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0b29sdGlwUmVmXCIsIC8qI19fUFVSRV9fKi9jcmVhdGVSZWYoKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0YXRlXCIsIHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJmb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMuYnV0dG9uUmVmKSB7XG4gICAgICAgIF90aGlzLmJ1dHRvblJlZi5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0b2dnbGVUb29sVGlwXCIsIGZ1bmN0aW9uIChpc0ZvY3VzZWQpIHtcbiAgICAgIGlmIChpc0ZvY3VzZWQpIHtcbiAgICAgICAgdmFyIF90aGlzJHRvb2x0aXBSZWY7XG4gICAgICAgIChfdGhpcyR0b29sdGlwUmVmID0gX3RoaXMudG9vbHRpcFJlZikgPT09IG51bGwgfHwgX3RoaXMkdG9vbHRpcFJlZiA9PT0gdm9pZCAwIHx8IChfdGhpcyR0b29sdGlwUmVmID0gX3RoaXMkdG9vbHRpcFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdGhpcyR0b29sdGlwUmVmID09PSB2b2lkIDAgfHwgX3RoaXMkdG9vbHRpcFJlZi5zaG93VG9vbFRpcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF90aGlzJHRvb2x0aXBSZWYyO1xuICAgICAgICAoX3RoaXMkdG9vbHRpcFJlZjIgPSBfdGhpcy50b29sdGlwUmVmKSA9PT0gbnVsbCB8fCBfdGhpcyR0b29sdGlwUmVmMiA9PT0gdm9pZCAwIHx8IChfdGhpcyR0b29sdGlwUmVmMiA9IF90aGlzJHRvb2x0aXBSZWYyLmN1cnJlbnQpID09PSBudWxsIHx8IF90aGlzJHRvb2x0aXBSZWYyID09PSB2b2lkIDAgfHwgX3RoaXMkdG9vbHRpcFJlZjIuaGlkZVRvb2xUaXAoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaGFzRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLmhhc0ZvY3VzO1xuICAgIH0pO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpRmlsdGVyU2VsZWN0SXRlbUNsYXNzLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIHRoZW1lID0gX3RoaXMkcHJvcHMudGhlbWUsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5kaXNhYmxlZCxcbiAgICAgICAgY2hlY2tlZCA9IF90aGlzJHByb3BzLmNoZWNrZWQsXG4gICAgICAgIGlzRm9jdXNlZCA9IF90aGlzJHByb3BzLmlzRm9jdXNlZCxcbiAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHMuc2hvd0ljb25zLFxuICAgICAgICB0b29sVGlwQ29udGVudCA9IF90aGlzJHByb3BzLnRvb2xUaXBDb250ZW50LFxuICAgICAgICB0b29sVGlwUHJvcHMgPSBfdGhpcyRwcm9wcy50b29sVGlwUHJvcHMsXG4gICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHMuc3R5bGUsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgc3R5bGVzID0gZXVpRmlsdGVyU2VsZWN0SXRlbVN0eWxlcyh0aGVtZSk7XG4gICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlGaWx0ZXJTZWxlY3RJdGVtLCBpc0ZvY3VzZWQgJiYgc3R5bGVzLmlzRm9jdXNlZF07XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZpbHRlclNlbGVjdEl0ZW0nLCBjbGFzc05hbWUpO1xuICAgICAgdmFyIGhhc1Rvb2xUaXAgPVxuICAgICAgLy8gd2UncmUgdXNpbmcgaXNWYWxpZEVsZW1lbnQgaGVyZSBhcyBFdWlUb29sVGlwQW5jaG9yIHVzZXNcbiAgICAgIC8vIGNsb25lRWxlbWVudCB0byBlbmhhbmNlIHRoZSBlbGVtZW50IHdpdGggcmVxdWlyZWQgYXR0cmlidXRlc1xuICAgICAgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJiAhZGlzYWJsZWQgJiYgdG9vbFRpcENvbnRlbnQ7XG4gICAgICB2YXIgYW5jaG9yUHJvcHMgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoaGFzVG9vbFRpcCkge1xuICAgICAgICB2YXIgX3Rvb2xUaXBQcm9wcyRhbmNob3JQLCBfdG9vbFRpcFByb3BzJGFuY2hvclAyO1xuICAgICAgICB2YXIgYW5jaG9yU3R5bGVzID0gdG9vbFRpcFByb3BzICE9PSBudWxsICYmIHRvb2xUaXBQcm9wcyAhPT0gdm9pZCAwICYmIChfdG9vbFRpcFByb3BzJGFuY2hvclAgPSB0b29sVGlwUHJvcHMuYW5jaG9yUHJvcHMpICE9PSBudWxsICYmIF90b29sVGlwUHJvcHMkYW5jaG9yUCAhPT0gdm9pZCAwICYmIF90b29sVGlwUHJvcHMkYW5jaG9yUC5zdHlsZSA/IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdG9vbFRpcFByb3BzID09PSBudWxsIHx8IHRvb2xUaXBQcm9wcyA9PT0gdm9pZCAwIHx8IChfdG9vbFRpcFByb3BzJGFuY2hvclAyID0gdG9vbFRpcFByb3BzLmFuY2hvclByb3BzKSA9PT0gbnVsbCB8fCBfdG9vbFRpcFByb3BzJGFuY2hvclAyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdG9vbFRpcFByb3BzJGFuY2hvclAyLnN0eWxlKSwgc3R5bGUpIDogc3R5bGU7XG4gICAgICAgIGFuY2hvclByb3BzID0gdG9vbFRpcFByb3BzICE9PSBudWxsICYmIHRvb2xUaXBQcm9wcyAhPT0gdm9pZCAwICYmIHRvb2xUaXBQcm9wcy5hbmNob3JQcm9wcyA/IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdG9vbFRpcFByb3BzLmFuY2hvclByb3BzKSwge30sIHtcbiAgICAgICAgICBzdHlsZTogYW5jaG9yU3R5bGVzXG4gICAgICAgIH0pIDoge1xuICAgICAgICAgIHN0eWxlOiBzdHlsZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRvZ2dsZVRvb2xUaXAoaXNGb2N1c2VkICE9PSBudWxsICYmIGlzRm9jdXNlZCAhPT0gdm9pZCAwID8gaXNGb2N1c2VkIDogZmFsc2UpO1xuICAgICAgfVxuICAgICAgdmFyIGljb25Ob2RlO1xuICAgICAgaWYgKHNob3dJY29ucykge1xuICAgICAgICB2YXIgX3Jlc29sdmVJY29uQW5kQ29sb3IgPSByZXNvbHZlSWNvbkFuZENvbG9yKGNoZWNrZWQpLFxuICAgICAgICAgIGljb24gPSBfcmVzb2x2ZUljb25BbmRDb2xvci5pY29uLFxuICAgICAgICAgIGNvbG9yID0gX3Jlc29sdmVJY29uQW5kQ29sb3IuY29sb3I7XG4gICAgICAgIGljb25Ob2RlID0gX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgICAgICAgIGdyb3c6IGZhbHNlXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgICB0eXBlOiBpY29uXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIHZhciBvcHRpb25JdGVtID0gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKF9yZWYpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLmJ1dHRvblJlZiA9IF9yZWY7XG4gICAgICAgIH0sXG4gICAgICAgIHJvbGU6IFwib3B0aW9uXCIsXG4gICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiBpc0ZvY3VzZWQsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IGRpc2FibGVkLFxuICAgICAgICBzdHlsZTogIWhhc1Rvb2xUaXAgPyBzdHlsZSA6IHVuZGVmaW5lZFxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgIGd1dHRlclNpemU6IFwic1wiLFxuICAgICAgICBjb21wb25lbnQ6IFwic3BhblwiLFxuICAgICAgICByZXNwb25zaXZlOiBmYWxzZVxuICAgICAgfSwgaWNvbk5vZGUsIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZpbHRlclNlbGVjdEl0ZW1fX2NvbnRlbnQgZXVpLXRleHRUcnVuY2F0ZVwiLFxuICAgICAgICBjb21wb25lbnQ6IFwic3BhblwiXG4gICAgICB9LCBjaGlsZHJlbikpKTtcbiAgICAgIHJldHVybiBoYXNUb29sVGlwID8gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogdGhpcy50b29sdGlwUmVmLFxuICAgICAgICBkaXNwbGF5OiBcImJsb2NrXCIsXG4gICAgICAgIGNvbnRlbnQ6IHRvb2xUaXBDb250ZW50LFxuICAgICAgICBwb3NpdGlvbjogXCJsZWZ0XCJcbiAgICAgIH0sIHRvb2xUaXBQcm9wcywge1xuICAgICAgICBhbmNob3JQcm9wczogYW5jaG9yUHJvcHNcbiAgICAgIH0pLCBvcHRpb25JdGVtKSA6IG9wdGlvbkl0ZW07XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgLSBVc2UgRXVpU2VsZWN0YWJsZSBpbnN0ZWFkXG4gKi9cbl9kZWZpbmVQcm9wZXJ0eShFdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgc2hvd0ljb25zOiB0cnVlXG59KTtcbkV1aUZpbHRlclNlbGVjdEl0ZW1DbGFzcy5wcm9wVHlwZXMgPSB7XG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5vbmVPZihbXCJvblwiLCBcIm9mZlwiXSksXG4gIHNob3dJY29uczogUHJvcFR5cGVzLmJvb2wsXG4gIGlzRm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTtcbmV4cG9ydCB2YXIgRXVpRmlsdGVyU2VsZWN0SXRlbSA9IHdpdGhFdWlUaGVtZShFdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MpOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxTaG9ydGhhbmRDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MsIGV1aUZvbnRTaXplIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlGaWx0ZXJTZWxlY3RJdGVtU3R5bGVzID0gZnVuY3Rpb24gZXVpRmlsdGVyU2VsZWN0SXRlbVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgZm9jdXNTdHlsZXMgPSBcIlxcbiAgICBjb2xvcjogXCIuY29uY2F0KGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCBcIjtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdChldWlUaGVtZS5mb2N1cy5iYWNrZ3JvdW5kQ29sb3IsIFwiO1xcbiAgICBvdXRsaW5lLW9mZnNldDogLVwiKS5jb25jYXQoZXVpVGhlbWUuZm9jdXMud2lkdGgsIFwiO1xcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG5cXG4gICAgJjpkaXNhYmxlZCB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdCh0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWQsIDAuMSksIFwiO1xcbiAgICB9XFxuICBcIik7XG4gIHJldHVybiB7XG4gICAgZXVpRmlsdGVyU2VsZWN0SXRlbTogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6YmxvY2s7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgXCIsIGxvZ2ljYWxTaG9ydGhhbmRDU1MoJ3BhZGRpbmcnLCBcIlwiLmNvbmNhdChldWlUaGVtZS5zaXplLnhzLCBcIiBcIikuY29uY2F0KGV1aVRoZW1lLnNpemUubSkpLCBcIiBcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIiBcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIiBjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO1wiLCBsb2dpY2FsQ1NTKCdib3JkZXItYm90dG9tJywgXCJcIi5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIFwiKS5jb25jYXQoZXVpVGhlbWUuY29sb3JzLmxpZ2h0ZXN0U2hhZGUpKSwgXCIgJjpob3ZlcntjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30mOmZvY3Vze1wiLCBmb2N1c1N0eWxlcywgXCI7fSY6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0LCBcIjt9O2xhYmVsOmV1aUZpbHRlclNlbGVjdEl0ZW07XCIpLFxuICAgIGlzRm9jdXNlZDogLyojX19QVVJFX18qL2Nzcyhmb2N1c1N0eWxlcywgXCI7O2xhYmVsOmlzRm9jdXNlZDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ3aWR0aFwiLCBcIm9uUmVzaXplXCJdLFxuICBfZXhjbHVkZWQyID0gW1wid2lkdGhcIiwgXCJjaGlsZHJlblwiLCBcInRleHRcIiwgXCJ0cnVuY2F0aW9uXCIsIFwidHJ1bmNhdGlvbk9mZnNldFwiLCBcInRydW5jYXRpb25Qb3NpdGlvblwiLCBcImVsbGlwc2lzXCIsIFwiY2FsY3VsYXRpb25EZWxheU1zXCIsIFwiY29udGFpbmVyUmVmXCIsIFwiY2xhc3NOYW1lXCJdLFxuICBfZXhjbHVkZWQzID0gW1wib25SZXNpemVcIl07XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VDb21iaW5lZFJlZnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlSZXNpemVPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyL3Jlc2l6ZV9vYnNlcnZlcic7XG5pbXBvcnQgeyBUcnVuY2F0aW9uVXRpbHMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGV1aVRleHRUcnVuY2F0ZVN0eWxlcyBhcyBzdHlsZXMgfSBmcm9tICcuL3RleHRfdHJ1bmNhdGUuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgVFJVTkNBVElPTl9UWVBFUyA9IFsnZW5kJywgJ3N0YXJ0JywgJ3N0YXJ0RW5kJywgJ21pZGRsZSddO1xuZXhwb3J0IHZhciBFdWlUZXh0VHJ1bmNhdGUgPSBmdW5jdGlvbiBFdWlUZXh0VHJ1bmNhdGUoX3JlZikge1xuICB2YXIgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgIG9uUmVzaXplID0gX3JlZi5vblJlc2l6ZSxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gd2lkdGggIT0gbnVsbCA/IF9fX0Vtb3Rpb25KU1goRXVpVGV4dFRydW5jYXRlV2l0aFdpZHRoLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IHdpZHRoXG4gIH0sIHByb3BzKSkgOiBfX19FbW90aW9uSlNYKEV1aVRleHRUcnVuY2F0ZVdpdGhSZXNpemVPYnNlcnZlciwgX2V4dGVuZHMoe1xuICAgIG9uUmVzaXplOiBvblJlc2l6ZVxuICB9LCBwcm9wcykpO1xufTtcbkV1aVRleHRUcnVuY2F0ZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFRoZSBmdWxsIHRleHQgc3RyaW5nIHRvIHRydW5jYXRlXG4gICAgICAgKi9cbiAgdGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgICAqIFRoZSB0cnVuY2F0aW9uIHR5cGUgZGVzaXJlZC4gRGV0ZXJtaW5lcyB3aGVyZSB0aGUgZWxsaXBzZXMgYXJlIHBsYWNlZC5cbiAgICAgICAqL1xuICB0cnVuY2F0aW9uOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFRoaXMgcHJvcCAqKm9ubHkqKiBhcHBsaWVzIHRvIHRoZSBgc3RhcnRgIGFuZCBgZW5kYCB0cnVuY2F0aW9uIHR5cGVzLlxuICAgICAgICogSXQgYWxsb3dzIHByZXNlcnZpbmcgYSBjZXJ0YWluIG51bWJlciBvZiBjaGFyYWN0ZXJzIG9mIGVpdGhlciB0aGVcbiAgICAgICAqIHN0YXJ0aW5nIG9yIGVuZGluZyB0ZXh0LlxuICAgICAgICpcbiAgICAgICAqIElmIHRoZSBwYXNzZWQgb2Zmc2V0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgdGV4dCBsZW5ndGgsXG4gICAgICAgKiB0aGUgb2Zmc2V0IHdpbGwgYmUgaWdub3JlZC5cbiAgICAgICAqL1xuICB0cnVuY2F0aW9uT2Zmc2V0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICAgICAqIFRoaXMgcHJvcCAqKm9ubHkqKiBhcHBsaWVzIHRvIHRoZSBgc3RhcnRFbmRgIHRydW5jYXRpb24gdHlwZS5cbiAgICAgICAqIEl0IGFsbG93cyBjdXN0b21pemluZyB0aGUgYW5jaG9yIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5ZWQgdGV4dCxcbiAgICAgICAqIHdoaWNoIG90aGVyd2lzZSBkZWZhdWx0cyB0byB0aGUgbWlkZGxlIG9mIHRoZSB0ZXh0IHN0cmluZy5cbiAgICAgICAqXG4gICAgICAgKiBUaGUgcHJpbWFyeSB1c2UgY2FzZSBmb3IgdGhpcyBwcm9wIGZvciBpcyBzZWFyY2ggaGlnaGxpZ2h0aW5nIC0gZS5nLiwgaWZcbiAgICAgICAqIGEgdXNlciBzZWFyY2hlcyBmb3IgYSBzcGVjaWZpYyB3b3JkIGluIHRoZSB0ZXh0LCBwYXNzIHRoZSBpbmRleCBvZiB0aGF0XG4gICAgICAgKiBmb3VuZCB3b3JkIHRvIGVuc3VyZSBpdCBpcyBhbHdheXMgdmlzaWJsZS5cbiAgICAgICAqXG4gICAgICAgKiBUaGlzIGJlaGF2aW9yIHdpbGwgaW50ZWxsaWdlbnRseSBkZXRlY3Qgd2hlbiBwb3NpdGlvbnMgYXJlIGNsb3NlIHRvIHRoZSBzdGFydFxuICAgICAgICogb3IgZW5kIG9mIHRoZSB0ZXh0LCBhbmQgb21pdCBsZWFkaW5nIG9yIHRyYWlsaW5nIGVsbGlwc2VzIHdoZW4gbmVjZXNzYXJ5LlxuICAgICAgICogSWYgdGhlIHBhc3NlZCBwb3NpdGlvbiBpcyBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIHRleHQgbGVuZ3RoLFxuICAgICAgICogdGhlIHRydW5jYXRpb24gd2lsbCBzaW1wbHkgZGVmYXVsdCB0byBgc3RhcnRgIGluc3RlYWQuXG4gICAgICAgKi9cbiAgdHJ1bmNhdGlvblBvc2l0aW9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICAgICAqIERlZmF1bHRzIHRvIHRoZSBob3Jpem9udGFsIGVsbGlwc2lzIGNoYXJhY3Rlci5cbiAgICAgICAqIENhbiBiZSBvcHRpb25hbGx5IGNvbmZpZ3VyZWQgdG8gdXNlIG90aGVyIHB1bmN0dWF0aW9uLFxuICAgICAgICogZS5nLiBzcGFjZXMsIGJyYWNrZXRzLCBoeXBoZW5zLCBhc3Rlcmlza3MsIGV0Yy5cbiAgICAgICAqL1xuICBlbGxpcHNpczogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICAgKiBCeSBkZWZhdWx0LCBFdWlUZXh0VHJ1bmNhdGUgd2lsbCByZW5kZXIgYSByZXNpemUgb2JzZXJ2ZXIgdG8gZGV0ZWN0IHRoZVxuICAgICAgICogYXZhaWxhYmxlIHdpZHRoIGl0IGhhcy4gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgKGUuZy4gbXVsdGlwbGUgdHJ1bmNhdGVkXG4gICAgICAgKiB0ZXh0IGl0ZW1zIHdpdGhpbiB0aGUgc2FtZSBjb250YWluZXIpLCB5b3UgbWF5IG9wdCB0byBwYXNzIGluIHlvdXIgb3duXG4gICAgICAgKiBjb250YWluZXIgd2lkdGgsIHdoaWNoIHdpbGwgc2tpcCBpbml0aWFsaXppbmcgYSByZXNpemUgb2JzZXJ2ZXIuXG4gICAgICAgKi9cbiAgd2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgICAgICogT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCBmaXJlcyB3aGVuIHRoZSBkZWZhdWx0IHJlc2l6ZXIgb2JzZXJ2ZXIgYm90aCBtb3VudHMgYW5kXG4gICAgICAgKiByZWdpc3RlcnMgYSBzaXplIGNoYW5nZS4gVGhpcyBjYWxsYmFjayB3aWxsICoqbm90KiogZmlyZSBpZiBgd2lkdGhgIGlzIHBhc3NlZC5cbiAgICAgICAqL1xuICBvblJlc2l6ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAgICogQnkgZGVmYXVsdCwgRXVpVGV4dFRydW5jYXRlIHdpbGwgcmVuZGVyIHRoZSB0cnVuY2F0ZWQgc3RyaW5nIGRpcmVjdGx5LlxuICAgICAgICogWW91IGNhbiBvcHRpb25hbGx5IHBhc3MgYSByZW5kZXIgcHJvcCBmdW5jdGlvbiB0byB0aGUgY29tcG9uZW50LCB3aGljaFxuICAgICAgICogYWxsb3dzIGZvciBtb3JlIGZsZXhpYmxlIHRleHQgcmVuZGVyaW5nLCBlLmcuIGFkZGluZyBjdXN0b20gbWFya3VwXG4gICAgICAgKiBvciBoaWdobGlnaHRpbmdcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAgICogRm9yIHNvbWUgZWRnZSBjYXNlIHNjZW5hcmlvcywgRXVpVGV4dFRydW5jYXRlJ3MgY2FsY3VsYXRpb25zIG1heSBiZSBvZmYgdW50aWxcbiAgICAgICAqIGZvbnRzIGFyZSBkb25lIGxvYWRpbmcgb3IgbGF5b3V0IGlzIGRvbmUgc2hpZnRpbmcgb3Igc2V0dGxpbmcuIEFkZGluZyBhIGRlbGF5XG4gICAgICAgKiBtYXkgaGVscCByZXNvbHZlIGFueSByZW5kZXJpbmcgaXNzdWVzLlxuICAgICAgICovXG4gIGNhbGN1bGF0aW9uRGVsYXlNczogUHJvcFR5cGVzLm51bWJlclxufTtcbnZhciBFdWlUZXh0VHJ1bmNhdGVXaXRoV2lkdGggPSBmdW5jdGlvbiBFdWlUZXh0VHJ1bmNhdGVXaXRoV2lkdGgoX3JlZjIpIHtcbiAgdmFyIHdpZHRoID0gX3JlZjIud2lkdGgsXG4gICAgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICB0ZXh0ID0gX3JlZjIudGV4dCxcbiAgICBfcmVmMiR0cnVuY2F0aW9uID0gX3JlZjIudHJ1bmNhdGlvbixcbiAgICBfdHJ1bmNhdGlvbiA9IF9yZWYyJHRydW5jYXRpb24gPT09IHZvaWQgMCA/ICdlbmQnIDogX3JlZjIkdHJ1bmNhdGlvbixcbiAgICBfcmVmMiR0cnVuY2F0aW9uT2Zmc2UgPSBfcmVmMi50cnVuY2F0aW9uT2Zmc2V0LFxuICAgIF90cnVuY2F0aW9uT2Zmc2V0ID0gX3JlZjIkdHJ1bmNhdGlvbk9mZnNlID09PSB2b2lkIDAgPyAwIDogX3JlZjIkdHJ1bmNhdGlvbk9mZnNlLFxuICAgIHRydW5jYXRpb25Qb3NpdGlvbiA9IF9yZWYyLnRydW5jYXRpb25Qb3NpdGlvbixcbiAgICBfcmVmMiRlbGxpcHNpcyA9IF9yZWYyLmVsbGlwc2lzLFxuICAgIGVsbGlwc2lzID0gX3JlZjIkZWxsaXBzaXMgPT09IHZvaWQgMCA/ICdcdTIwMjYnIDogX3JlZjIkZWxsaXBzaXMsXG4gICAgY2FsY3VsYXRpb25EZWxheU1zID0gX3JlZjIuY2FsY3VsYXRpb25EZWxheU1zLFxuICAgIGNvbnRhaW5lclJlZiA9IF9yZWYyLmNvbnRhaW5lclJlZixcbiAgICBjbGFzc05hbWUgPSBfcmVmMi5jbGFzc05hbWUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgX2V4Y2x1ZGVkMik7XG4gIC8vIE5vdGU6IFRoaXMgbmVlZHMgdG8gYmUgYSBzdGF0ZSBhbmQgbm90IGEgcmVmIHRvIHRyaWdnZXIgYSByZXJlbmRlciBvbiBtb3VudFxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgY29udGFpbmVyRWwgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldENvbnRhaW5lckVsID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIHJlZnMgPSB1c2VDb21iaW5lZFJlZnMoW3NldENvbnRhaW5lckVsLCBjb250YWluZXJSZWZdKTtcblxuICAvLyBJZiBuZWNlc3NhcnksIHdhaXQgYSB0aWNrIG9uIG1vdW50IGJlZm9yZSB0cnVuY2F0aW5nXG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUoIWNhbGN1bGF0aW9uRGVsYXlNcyksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIHJlYWR5ID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRSZWFkeSA9IF91c2VTdGF0ZTRbMV07XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNhbGN1bGF0aW9uRGVsYXlNcykge1xuICAgICAgdmFyIHRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNldFJlYWR5KHRydWUpO1xuICAgICAgfSwgY2FsY3VsYXRpb25EZWxheU1zKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2NhbGN1bGF0aW9uRGVsYXlNc10pO1xuXG4gIC8vIEhhbmRsZSBleGNlcHRpb25zIHdoZXJlIHdlIG5lZWQgdG8gb3ZlcnJpZGUgdGhlIHBhc3NlZCBwcm9wc1xuICB2YXIgX3VzZU1lbW8gPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0cnVuY2F0aW9uID0gX3RydW5jYXRpb247XG4gICAgICB2YXIgdHJ1bmNhdGlvbk9mZnNldCA9IDA7XG4gICAgICBpZiAoX3RydW5jYXRpb24gPT09ICdlbmQnIHx8IF90cnVuY2F0aW9uID09PSAnc3RhcnQnKSB7XG4gICAgICAgIGlmICgwIDwgX3RydW5jYXRpb25PZmZzZXQgJiYgX3RydW5jYXRpb25PZmZzZXQgPCB0ZXh0Lmxlbmd0aCkge1xuICAgICAgICAgIHRydW5jYXRpb25PZmZzZXQgPSBfdHJ1bmNhdGlvbk9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChfdHJ1bmNhdGlvbiA9PT0gJ3N0YXJ0RW5kJyAmJiB0cnVuY2F0aW9uUG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgICBpZiAodHJ1bmNhdGlvblBvc2l0aW9uIDw9IDApIHtcbiAgICAgICAgICB0cnVuY2F0aW9uID0gJ2VuZCc7XG4gICAgICAgIH0gZWxzZSBpZiAodHJ1bmNhdGlvblBvc2l0aW9uID49IHRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgdHJ1bmNhdGlvbiA9ICdzdGFydCc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRydW5jYXRpb246IHRydW5jYXRpb24sXG4gICAgICAgIHRydW5jYXRpb25PZmZzZXQ6IHRydW5jYXRpb25PZmZzZXRcbiAgICAgIH07XG4gICAgfSwgW190cnVuY2F0aW9uLCBfdHJ1bmNhdGlvbk9mZnNldCwgdHJ1bmNhdGlvblBvc2l0aW9uLCB0ZXh0Lmxlbmd0aF0pLFxuICAgIHRydW5jYXRpb24gPSBfdXNlTWVtby50cnVuY2F0aW9uLFxuICAgIHRydW5jYXRpb25PZmZzZXQgPSBfdXNlTWVtby50cnVuY2F0aW9uT2Zmc2V0O1xuICB2YXIgdHJ1bmNhdGVkVGV4dCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciB0cnVuY2F0ZWRUZXh0ID0gJyc7XG4gICAgaWYgKCFyZWFkeSB8fCAhY29udGFpbmVyRWwpIHJldHVybiB0ZXh0O1xuICAgIGlmICghd2lkdGgpIHJldHVybiB0cnVuY2F0ZWRUZXh0O1xuICAgIHZhciB1dGlscyA9IG5ldyBUcnVuY2F0aW9uVXRpbHMoe1xuICAgICAgZnVsbFRleHQ6IHRleHQsXG4gICAgICBlbGxpcHNpczogZWxsaXBzaXMsXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lckVsLFxuICAgICAgYXZhaWxhYmxlV2lkdGg6IHdpZHRoXG4gICAgfSk7XG4gICAgaWYgKHV0aWxzLmNoZWNrSWZUcnVuY2F0aW9uSXNOZWVkZWQoKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRydW5jYXRlZFRleHQgPSB0ZXh0O1xuICAgIH0gZWxzZSBpZiAodXRpbHMuY2hlY2tTdWZmaWNpZW50RWxsaXBzaXNXaWR0aCh0cnVuY2F0aW9uKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRydW5jYXRlZFRleHQgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoICh0cnVuY2F0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IHV0aWxzLnRydW5jYXRlRW5kKHRydW5jYXRpb25PZmZzZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IHV0aWxzLnRydW5jYXRlU3RhcnQodHJ1bmNhdGlvbk9mZnNldCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N0YXJ0RW5kJzpcbiAgICAgICAgICBpZiAodHJ1bmNhdGlvblBvc2l0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIHRydW5jYXRlZFRleHQgPSB1dGlscy50cnVuY2F0ZVN0YXJ0RW5kQXRNaWRkbGUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IHV0aWxzLnRydW5jYXRlU3RhcnRFbmRBdFBvc2l0aW9uKHRydW5jYXRpb25Qb3NpdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICAgIHRydW5jYXRlZFRleHQgPSB1dGlscy50cnVuY2F0ZU1pZGRsZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1bmNhdGVkVGV4dDtcbiAgfSwgW3JlYWR5LCB3aWR0aCwgdGV4dCwgdHJ1bmNhdGlvbiwgdHJ1bmNhdGlvbk9mZnNldCwgdHJ1bmNhdGlvblBvc2l0aW9uLCBlbGxpcHNpcywgY29udGFpbmVyRWxdKTtcbiAgdmFyIGlzVHJ1bmNhdGluZyA9IHRydW5jYXRlZFRleHQgIT09IHRleHQ7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aVRleHRUcnVuY2F0ZScsIGNsYXNzTmFtZSksXG4gICAgY3NzOiBzdHlsZXMuZXVpVGV4dFRydW5jYXRlLFxuICAgIHJlZjogcmVmcyxcbiAgICB0aXRsZTogaXNUcnVuY2F0aW5nID8gdGV4dCA6IHVuZGVmaW5lZFxuICB9LCByZXN0KSwgaXNUcnVuY2F0aW5nID8gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUZXh0VHJ1bmNhdGVfX3RydW5jYXRlZFRleHRcIixcbiAgICBjc3M6IHN0eWxlcy5ldWlUZXh0VHJ1bmNhdGVfX3RydW5jYXRlZFRleHQsXG4gICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0cnVuY2F0ZWRUZXh0XCJcbiAgfSwgY2hpbGRyZW4gPyBjaGlsZHJlbih0cnVuY2F0ZWRUZXh0KSA6IHRydW5jYXRlZFRleHQpLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRleHRUcnVuY2F0ZV9fZnVsbFRleHRcIixcbiAgICBjc3M6IHN0eWxlcy5ldWlUZXh0VHJ1bmNhdGVfX2Z1bGxUZXh0LFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJmdWxsVGV4dFwiXG4gIH0sIHRleHQpKSA6IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGV4dFRydW5jYXRlX19mdWxsVGV4dFwiLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJmdWxsVGV4dFwiXG4gIH0sIGNoaWxkcmVuID8gY2hpbGRyZW4odGV4dCkgOiB0ZXh0KSk7XG59O1xuRXVpVGV4dFRydW5jYXRlV2l0aFdpZHRoLnByb3BUeXBlcyA9IHtcbiAgd2lkdGg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgY29udGFpbmVyUmVmOiBQcm9wVHlwZXMuYW55XG59O1xudmFyIEV1aVRleHRUcnVuY2F0ZVdpdGhSZXNpemVPYnNlcnZlciA9IGZ1bmN0aW9uIEV1aVRleHRUcnVuY2F0ZVdpdGhSZXNpemVPYnNlcnZlcihfcmVmMykge1xuICB2YXIgX29uUmVzaXplID0gX3JlZjMub25SZXNpemUsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjMsIF9leGNsdWRlZDMpO1xuICB2YXIgX3VzZVN0YXRlNSA9IHVzZVN0YXRlKDApLFxuICAgIF91c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU1LCAyKSxcbiAgICB3aWR0aCA9IF91c2VTdGF0ZTZbMF0sXG4gICAgc2V0V2lkdGggPSBfdXNlU3RhdGU2WzFdO1xuICB2YXIgb25SZXNpemUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICB2YXIgd2lkdGggPSBfcmVmNC53aWR0aDtcbiAgICBzZXRXaWR0aCh3aWR0aCk7XG4gICAgX29uUmVzaXplID09PSBudWxsIHx8IF9vblJlc2l6ZSA9PT0gdm9pZCAwIHx8IF9vblJlc2l6ZSh3aWR0aCk7XG4gIH0sIFtfb25SZXNpemVdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUmVzaXplT2JzZXJ2ZXIsIHtcbiAgICBvblJlc2l6ZTogb25SZXNpemVcbiAgfSwgZnVuY3Rpb24gKHJlZikge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRleHRUcnVuY2F0ZVdpdGhXaWR0aCwgX2V4dGVuZHMoe1xuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgY29udGFpbmVyUmVmOiByZWZcbiAgICB9LCBwcm9wcywge1xuICAgICAgXCJkYXRhLXJlc2l6ZS1vYnNlcnZlclwiOiBcInRydWVcIlxuICAgIH0pKTtcbiAgfSk7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiZnVsbFRleHRcIiwgXCJlbGxpcHNpc1wiLCBcImF2YWlsYWJsZVdpZHRoXCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXQoKSB7IHJldHVybiBfZ2V0ID0gXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgUmVmbGVjdCAmJiBSZWZsZWN0LmdldCA/IFJlZmxlY3QuZ2V0LmJpbmQoKSA6IGZ1bmN0aW9uIChlLCB0LCByKSB7IHZhciBwID0gX3N1cGVyUHJvcEJhc2UoZSwgdCk7IGlmIChwKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwLCB0KTsgcmV0dXJuIG4uZ2V0ID8gbi5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoIDwgMyA/IGUgOiByKSA6IG4udmFsdWU7IH0gfSwgX2dldC5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfc3VwZXJQcm9wQmFzZSh0LCBvKSB7IGZvciAoOyAhe30uaGFzT3duUHJvcGVydHkuY2FsbCh0LCBvKSAmJiBudWxsICE9PSAodCA9IF9nZXRQcm90b3R5cGVPZih0KSk7KTsgcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgQ2FudmFzVGV4dFV0aWxzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FudmFzJztcbi8qKlxuICogVXRpbGl0aWVzIGZvciB0cnVuY2F0aW5nIHR5cGVzIGF0IHZhcmlvdXMgcG9zaXRpb25zLCBhcyB3ZWxsIGFzXG4gKiBkZXRlcm1pbmluZyB3aGV0aGVyIHRydW5jYXRpb24gaXMgcG9zc2libGUgb3IgZXZlbiBuZWNlc3NhcnkuXG4gKi9cbmV4cG9ydCB2YXIgVHJ1bmNhdGlvblV0aWxzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ2FudmFzVGV4dFV0aWxzKSB7XG4gIGZ1bmN0aW9uIFRydW5jYXRpb25VdGlscyhfcmVmKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIHZhciBmdWxsVGV4dCA9IF9yZWYuZnVsbFRleHQsXG4gICAgICBlbGxpcHNpcyA9IF9yZWYuZWxsaXBzaXMsXG4gICAgICBfYXZhaWxhYmxlV2lkdGggPSBfcmVmLmF2YWlsYWJsZVdpZHRoLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcnVuY2F0aW9uVXRpbHMpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBUcnVuY2F0aW9uVXRpbHMsIFtyZXN0XSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImZ1bGxUZXh0XCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImVsbGlwc2lzXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImF2YWlsYWJsZVdpZHRoXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogUGVyZm9ybWFuY2UgdXRpbGl0aWVzXG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImRlYnVnUGVyZm9ybWFuY2VcIiwgZmFsc2UpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJkZWJ1Z0NvdW50ZXJcIiwgMCk7XG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdXRpbHMgZm9yIGNhbGN1bGF0aW5nIGEgcmF0aW8gYmFzZWQgb24gdGhlIHBhc3NlZCBhdmFpbGFibGUgd2lkdGhcbiAgICAgKiB2cyB0aGUgZnVsbCB0ZXh0IHdpZHRoLlxuICAgICAqIFRoaXMgcmF0aW8gaXMgdXNlZCB0byBnZXQgYW4gaW5pdGlhbCBfYXBwcm94aW1hdGVfIHRleHQgc3RyaW5nIHRoYXQgc2hvdWxkXG4gICAgICogYmUgc2xpZ2h0bHkgb3ZlciB0aGUgYXZhaWxhYmxlIHdpZHRoLCB3aGljaCB3ZSBjYW4gdGhlbiByZW1vdmUgZnJvbVxuICAgICAqIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIgdW50aWwgdGhlIHRleHQganVzdCBmaXRzIHdpdGhpbiB0aGUgYXZhaWxhYmxlIHdpZHRoLlxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ3aWR0aFJhdGlvXCIsIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZXRUZXh0V2lkdGhSYXRpb1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGV4dCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogX3RoaXMuZnVsbFRleHQ7XG4gICAgICB2YXIgdGV4dFRvT2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnJztcbiAgICAgIC8vIEFjY291bnQgZm9yIHJlZHVjZWQgYXZhaWxhYmxlIHdpZHRoIGR1ZSB0byAoZS5nLikgdHJ1bmNhdGlvbiBvZmZzZXRcbiAgICAgIHZhciBhdmFpbGFibGVXaWR0aCA9IF90aGlzLmF2YWlsYWJsZVdpZHRoO1xuICAgICAgaWYgKHRleHRUb09mZnNldCkge1xuICAgICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayh0ZXh0VG9PZmZzZXQpO1xuICAgICAgICBhdmFpbGFibGVXaWR0aCA9IGF2YWlsYWJsZVdpZHRoIC0gX3RoaXMudGV4dFdpZHRoO1xuICAgICAgfVxuICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2sodGV4dCk7XG4gICAgICBfdGhpcy53aWR0aFJhdGlvID0gYXZhaWxhYmxlV2lkdGggLyBfdGhpcy50ZXh0V2lkdGg7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImdldFRleHRGcm9tUmF0aW9cIiwgZnVuY3Rpb24gKHRleHQsIHR5cGUpIHtcbiAgICAgIHZhciBjaGFyYWN0ZXJSYXRpbyA9IE1hdGguY2VpbCh0ZXh0Lmxlbmd0aCAqIF90aGlzLndpZHRoUmF0aW8pO1xuICAgICAgdmFyIGluZGV4ID0gdHlwZSA9PT0gJ3N0YXJ0JyA/IHRleHQubGVuZ3RoIC0gY2hhcmFjdGVyUmF0aW8gOiBjaGFyYWN0ZXJSYXRpbztcbiAgICAgIHZhciBfc3BsaXRUZXh0JGF0ID0gc3BsaXRUZXh0KHRleHQpLmF0KGluZGV4KSxcbiAgICAgICAgX3NwbGl0VGV4dCRhdDIgPSBfc2xpY2VkVG9BcnJheShfc3BsaXRUZXh0JGF0LCAyKSxcbiAgICAgICAgZW5kID0gX3NwbGl0VGV4dCRhdDJbMF0sXG4gICAgICAgIHN0YXJ0ID0gX3NwbGl0VGV4dCRhdDJbMV07XG4gICAgICByZXR1cm4gdHlwZSA9PT0gJ3N0YXJ0JyA/IHN0YXJ0IDogZW5kO1xuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIEVhcmx5IHJldHVybiBjaGVja3NcbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2hlY2tJZlRydW5jYXRpb25Jc05lZWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayhfdGhpcy5mdWxsVGV4dCk7XG4gICAgICBpZiAoX3RoaXMuYXZhaWxhYmxlV2lkdGggPj0gX3RoaXMudGV4dFdpZHRoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2hlY2tTdWZmaWNpZW50RWxsaXBzaXNXaWR0aFwiLCBmdW5jdGlvbiAodHJ1bmNhdGlvbikge1xuICAgICAgdmFyIHRleHRUb0NoZWNrID0gdHJ1bmNhdGlvbiA9PT0gJ3N0YXJ0RW5kJyA/IFwiXCIuY29uY2F0KF90aGlzLmVsbGlwc2lzLCBcIiBcIikuY29uY2F0KF90aGlzLmVsbGlwc2lzKSAvLyBzdGFydEVuZCBuZWVkcyBhIGxpdHRsZSBtb3JlIHNwYWNlXG4gICAgICA6IF90aGlzLmVsbGlwc2lzO1xuICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2sodGV4dFRvQ2hlY2spO1xuICAgICAgaWYgKF90aGlzLnRleHRXaWR0aCA+PSBfdGhpcy5hdmFpbGFibGVXaWR0aCAqIDAuOSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgdHJ1bmNhdGlvbiBlbGxpcHNpcyBpcyBsYXJnZXIgdGhhbiB0aGUgYXZhaWxhYmxlIHdpZHRoLiBObyB0ZXh0IGNhbiBiZSByZW5kZXJlZC4nKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjaGVja1RydW5jYXRpb25PZmZzZXRXaWR0aFwiLCBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2sodGV4dCk7XG4gICAgICBpZiAoX3RoaXMudGV4dFdpZHRoID4gX3RoaXMuYXZhaWxhYmxlV2lkdGgpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIHBhc3NlZCB0cnVuY2F0aW9uT2Zmc2V0IGlzIHRvbyBsYXJnZSBmb3IgdGhlIGF2YWlsYWJsZSB3aWR0aC4gVHJ1bmNhdGluZyB0aGUgb2Zmc2V0IGluc3RlYWQuJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBUcnVuY2F0aW9uIHR5cGVzIGxvZ2ljLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zXG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRydW5jYXRlU3RhcnRcIiwgZnVuY3Rpb24gKHRydW5jYXRpb25PZmZzZXQpIHtcbiAgICAgIHZhciB0cnVuY2F0ZWRUZXh0ID0gX3RoaXMuZnVsbFRleHQ7XG4gICAgICB2YXIgbGVhZGluZ1RleHQgPSAnJztcbiAgICAgIHZhciBjb21iaW5lZFRleHQgPSBmdW5jdGlvbiBjb21iaW5lZFRleHQoKSB7XG4gICAgICAgIHJldHVybiBsZWFkaW5nVGV4dCArIHRydW5jYXRlZFRleHQ7XG4gICAgICB9O1xuICAgICAgaWYgKHRydW5jYXRpb25PZmZzZXQpIHtcbiAgICAgICAgdmFyIF9zcGxpdFRleHQkYXQzID0gc3BsaXRUZXh0KF90aGlzLmZ1bGxUZXh0KS5hdCh0cnVuY2F0aW9uT2Zmc2V0KTtcbiAgICAgICAgdmFyIF9zcGxpdFRleHQkYXQ0ID0gX3NsaWNlZFRvQXJyYXkoX3NwbGl0VGV4dCRhdDMsIDIpO1xuICAgICAgICBsZWFkaW5nVGV4dCA9IF9zcGxpdFRleHQkYXQ0WzBdO1xuICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gX3NwbGl0VGV4dCRhdDRbMV07XG4gICAgICAgIHZhciB3aWR0aENoZWNrID0gbGVhZGluZ1RleHQgKyBfdGhpcy5lbGxpcHNpcztcbiAgICAgICAgaWYgKF90aGlzLmNoZWNrVHJ1bmNhdGlvbk9mZnNldFdpZHRoKHdpZHRoQ2hlY2spID09PSBmYWxzZSkge1xuICAgICAgICAgIHRydW5jYXRlZFRleHQgPSBsZWFkaW5nVGV4dDtcbiAgICAgICAgICBsZWFkaW5nVGV4dCA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCB0ZXh0IHdpZHRoIHJhdGlvIHdpZHRoIGFjY291bnRpbmcgZm9yIGFueSB0cnVuY2F0aW9uIG9mZnNldCB0ZXh0LFxuICAgICAgLy8gYW5kIGd1ZXNzdGltYXRlIGFuIGluaXRpYWwgdHJ1bmNhdGVkIHN0cmluZ1xuICAgICAgX3RoaXMuc2V0VGV4dFdpZHRoUmF0aW8odHJ1bmNhdGVkVGV4dCwgbGVhZGluZ1RleHQpO1xuICAgICAgdHJ1bmNhdGVkVGV4dCA9IF90aGlzLmdldFRleHRGcm9tUmF0aW8odHJ1bmNhdGVkVGV4dCwgJ3N0YXJ0Jyk7XG4gICAgICBsZWFkaW5nVGV4dCArPSBfdGhpcy5lbGxpcHNpcztcbiAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKGNvbWJpbmVkVGV4dCgpKTtcbiAgICAgIHdoaWxlIChfdGhpcy50ZXh0V2lkdGggPiBfdGhpcy5hdmFpbGFibGVXaWR0aCkge1xuICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gcmVtb3ZlRmlyc3RDaGFyYWN0ZXIodHJ1bmNhdGVkVGV4dCk7XG4gICAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKGNvbWJpbmVkVGV4dCgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21iaW5lZFRleHQoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidHJ1bmNhdGVFbmRcIiwgZnVuY3Rpb24gKHRydW5jYXRpb25PZmZzZXQpIHtcbiAgICAgIHZhciB0cnVuY2F0ZWRUZXh0ID0gX3RoaXMuZnVsbFRleHQ7XG4gICAgICB2YXIgdHJhaWxpbmdUZXh0ID0gJyc7XG4gICAgICB2YXIgY29tYmluZWRUZXh0ID0gZnVuY3Rpb24gY29tYmluZWRUZXh0KCkge1xuICAgICAgICByZXR1cm4gdHJ1bmNhdGVkVGV4dCArIHRyYWlsaW5nVGV4dDtcbiAgICAgIH07XG4gICAgICBpZiAodHJ1bmNhdGlvbk9mZnNldCkge1xuICAgICAgICB2YXIgaW5kZXggPSBfdGhpcy5mdWxsVGV4dC5sZW5ndGggLSB0cnVuY2F0aW9uT2Zmc2V0O1xuICAgICAgICB2YXIgX3NwbGl0VGV4dCRhdDUgPSBzcGxpdFRleHQoX3RoaXMuZnVsbFRleHQpLmF0KGluZGV4KTtcbiAgICAgICAgdmFyIF9zcGxpdFRleHQkYXQ2ID0gX3NsaWNlZFRvQXJyYXkoX3NwbGl0VGV4dCRhdDUsIDIpO1xuICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gX3NwbGl0VGV4dCRhdDZbMF07XG4gICAgICAgIHRyYWlsaW5nVGV4dCA9IF9zcGxpdFRleHQkYXQ2WzFdO1xuICAgICAgICB2YXIgd2lkdGhDaGVjayA9IF90aGlzLmVsbGlwc2lzICsgdHJhaWxpbmdUZXh0O1xuICAgICAgICBpZiAoX3RoaXMuY2hlY2tUcnVuY2F0aW9uT2Zmc2V0V2lkdGgod2lkdGhDaGVjaykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IHRyYWlsaW5nVGV4dDtcbiAgICAgICAgICB0cmFpbGluZ1RleHQgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBHZXQgdGV4dCB3aWR0aCByYXRpbyB3aWR0aCBhY2NvdW50aW5nIGZvciBhbnkgdHJ1bmNhdGlvbiBvZmZzZXQgdGV4dCxcbiAgICAgIC8vIGFuZCBndWVzc3RpbWF0ZSBhbiBpbml0aWFsIHRydW5jYXRlZCBzdHJpbmdcbiAgICAgIF90aGlzLnNldFRleHRXaWR0aFJhdGlvKHRydW5jYXRlZFRleHQsIHRyYWlsaW5nVGV4dCk7XG4gICAgICB0cnVuY2F0ZWRUZXh0ID0gX3RoaXMuZ2V0VGV4dEZyb21SYXRpbyh0cnVuY2F0ZWRUZXh0LCAnZW5kJyk7XG4gICAgICB0cmFpbGluZ1RleHQgPSBfdGhpcy5lbGxpcHNpcyArIHRyYWlsaW5nVGV4dDtcbiAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKGNvbWJpbmVkVGV4dCgpKTtcbiAgICAgIHdoaWxlIChfdGhpcy50ZXh0V2lkdGggPiBfdGhpcy5hdmFpbGFibGVXaWR0aCkge1xuICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gcmVtb3ZlTGFzdENoYXJhY3Rlcih0cnVuY2F0ZWRUZXh0KTtcbiAgICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2soY29tYmluZWRUZXh0KCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbWJpbmVkVGV4dCgpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0cnVuY2F0ZVN0YXJ0RW5kQXRQb3NpdGlvblwiLCBmdW5jdGlvbiAodHJ1bmNhdGlvblBvc2l0aW9uKSB7XG4gICAgICAvLyBTcGxpdCB0aGUgdGV4dCBmcm9tIHRoZSBhbmNob3IgcG9zaXRpb24sIHVzaW5nIHRoZSB3aWR0aCByYXRpb1xuICAgICAgLy8gdG8gZ2V0IHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIGluZGljZXMgZnJvbSB0aGUgcG9zaXRpb25cbiAgICAgIF90aGlzLnNldFRleHRXaWR0aFJhdGlvKCk7XG4gICAgICB2YXIgY2hhcmFjdGVyUmF0aW8gPSBNYXRoLmZsb29yKF90aGlzLmZ1bGxUZXh0Lmxlbmd0aCAqIF90aGlzLndpZHRoUmF0aW8gLyAyKTtcbiAgICAgIHZhciB0cnVuY2F0ZVN0YXJ0ID0gdHJ1bmNhdGlvblBvc2l0aW9uIC0gY2hhcmFjdGVyUmF0aW87XG4gICAgICB2YXIgdHJ1bmNhdGVFbmQgPSB0cnVuY2F0aW9uUG9zaXRpb24gKyBjaGFyYWN0ZXJSYXRpbztcblxuICAgICAgLy8gSWYgZWl0aGVyIG9mIHRoZSBhcHByb3hpbWF0ZSBzdGFydC9lbmQgdHJ1bmNhdGlvbiBpbmRpY2VzIGdvIGJleW9uZCB0aGVcbiAgICAgIC8vIGJvdW5kcyBvZiB0aGUgYWN0dWFsIHRleHQsIHdlIGNhbiBzaW1wbHkgdXNlIGVuZCBvciBzdGFydCB0cnVuY2F0aW9uIGluc3RlYWRcbiAgICAgIGlmICh0cnVuY2F0ZVN0YXJ0IDwgMCkge1xuICAgICAgICByZXR1cm4gX3RoaXMudHJ1bmNhdGVFbmQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0cnVuY2F0ZUVuZCA+PSBfdGhpcy5mdWxsVGV4dC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnRydW5jYXRlU3RhcnQoKTtcbiAgICAgIH1cbiAgICAgIHZhciB0cnVuY2F0ZWRUZXh0ID0gX3RoaXMuZnVsbFRleHQuc3Vic3RyaW5nKHRydW5jYXRlU3RhcnQsIHRydW5jYXRlRW5kKTtcbiAgICAgIHZhciBjb21iaW5lZFRleHQgPSBmdW5jdGlvbiBjb21iaW5lZFRleHQoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5lbGxpcHNpcyArIHRydW5jYXRlZFRleHQgKyBfdGhpcy5lbGxpcHNpcztcbiAgICAgIH07XG4gICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayhjb21iaW5lZFRleHQoKSk7XG4gICAgICB2YXIgYWx0ZXJuYXRpbmc7XG4gICAgICB3aGlsZSAoX3RoaXMudGV4dFdpZHRoID4gX3RoaXMuYXZhaWxhYmxlV2lkdGgpIHtcbiAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IGFsdGVybmF0aW5nID8gcmVtb3ZlTGFzdENoYXJhY3Rlcih0cnVuY2F0ZWRUZXh0KSA6IHJlbW92ZUZpcnN0Q2hhcmFjdGVyKHRydW5jYXRlZFRleHQpO1xuICAgICAgICBhbHRlcm5hdGluZyA9ICFhbHRlcm5hdGluZztcbiAgICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2soY29tYmluZWRUZXh0KCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbWJpbmVkVGV4dCgpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0cnVuY2F0ZVN0YXJ0RW5kQXRNaWRkbGVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG1pZGRsZVBvc2l0aW9uID0gTWF0aC5mbG9vcihfdGhpcy5mdWxsVGV4dC5sZW5ndGggLyAyKTtcbiAgICAgIHJldHVybiBfdGhpcy50cnVuY2F0ZVN0YXJ0RW5kQXRQb3NpdGlvbihtaWRkbGVQb3NpdGlvbik7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRydW5jYXRlTWlkZGxlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBtaWRkbGVQb3NpdGlvbiA9IE1hdGguZmxvb3IoX3RoaXMuZnVsbFRleHQubGVuZ3RoIC8gMik7XG4gICAgICB2YXIgX3NwbGl0VGV4dCRhdDcgPSBzcGxpdFRleHQoX3RoaXMuZnVsbFRleHQpLmF0KG1pZGRsZVBvc2l0aW9uKSxcbiAgICAgICAgX3NwbGl0VGV4dCRhdDggPSBfc2xpY2VkVG9BcnJheShfc3BsaXRUZXh0JGF0NywgMiksXG4gICAgICAgIGZpcnN0SGFsZiA9IF9zcGxpdFRleHQkYXQ4WzBdLFxuICAgICAgICBzZWNvbmRIYWxmID0gX3NwbGl0VGV4dCRhdDhbMV07XG4gICAgICBfdGhpcy5zZXRUZXh0V2lkdGhSYXRpbygpO1xuICAgICAgZmlyc3RIYWxmID0gX3RoaXMuZ2V0VGV4dEZyb21SYXRpbyhmaXJzdEhhbGYsICdlbmQnKTtcbiAgICAgIHNlY29uZEhhbGYgPSBfdGhpcy5nZXRUZXh0RnJvbVJhdGlvKHNlY29uZEhhbGYsICdzdGFydCcpO1xuICAgICAgdmFyIGNvbWJpbmVkVGV4dCA9IGZ1bmN0aW9uIGNvbWJpbmVkVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0SGFsZiArIF90aGlzLmVsbGlwc2lzICsgc2Vjb25kSGFsZjtcbiAgICAgIH07XG4gICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayhjb21iaW5lZFRleHQoKSk7XG4gICAgICB2YXIgYWx0ZXJuYXRpbmc7XG4gICAgICB3aGlsZSAoX3RoaXMudGV4dFdpZHRoID4gX3RoaXMuYXZhaWxhYmxlV2lkdGgpIHtcbiAgICAgICAgYWx0ZXJuYXRpbmcgPSAhYWx0ZXJuYXRpbmc7XG4gICAgICAgIGlmIChhbHRlcm5hdGluZykge1xuICAgICAgICAgIGZpcnN0SGFsZiA9IHJlbW92ZUxhc3RDaGFyYWN0ZXIoZmlyc3RIYWxmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWNvbmRIYWxmID0gcmVtb3ZlRmlyc3RDaGFyYWN0ZXIoc2Vjb25kSGFsZik7XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2soY29tYmluZWRUZXh0KCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbWJpbmVkVGV4dCgpO1xuICAgIH0pO1xuICAgIF90aGlzLmZ1bGxUZXh0ID0gZnVsbFRleHQ7XG4gICAgX3RoaXMuZWxsaXBzaXMgPSBlbGxpcHNpcztcbiAgICBfdGhpcy5hdmFpbGFibGVXaWR0aCA9IF9hdmFpbGFibGVXaWR0aDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKFRydW5jYXRpb25VdGlscywgX0NhbnZhc1RleHRVdGlscyk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoVHJ1bmNhdGlvblV0aWxzLCBbe1xuICAgIGtleTogXCJ0ZXh0V2lkdGhcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnUGVyZm9ybWFuY2UpIHtcbiAgICAgICAgdGhpcy5kZWJ1Z0NvdW50ZXIrKztcbiAgICAgIH1cbiAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihUcnVuY2F0aW9uVXRpbHMucHJvdG90eXBlKSwgXCJ0ZXh0V2lkdGhcIiwgdGhpcyk7XG4gICAgfVxuICB9XSk7XG59KENhbnZhc1RleHRVdGlscyk7XG5cbi8qKlxuICogRFJZIGNoYXJhY3Rlci9zdWJzdHJpbmcgdXRpbHNcbiAqL1xuXG52YXIgcmVtb3ZlTGFzdENoYXJhY3RlciA9IGZ1bmN0aW9uIHJlbW92ZUxhc3RDaGFyYWN0ZXIodGV4dCkge1xuICByZXR1cm4gdGV4dC5zdWJzdHJpbmcoMCwgdGV4dC5sZW5ndGggLSAxKTtcbn07XG52YXIgcmVtb3ZlRmlyc3RDaGFyYWN0ZXIgPSBmdW5jdGlvbiByZW1vdmVGaXJzdENoYXJhY3Rlcih0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnN1YnN0cmluZygxKTtcbn07XG52YXIgc3BsaXRUZXh0ID0gZnVuY3Rpb24gc3BsaXRUZXh0KHRleHQpIHtcbiAgcmV0dXJuIHtcbiAgICBhdDogZnVuY3Rpb24gYXQoaW5kZXgpIHtcbiAgICAgIHJldHVybiBbdGV4dC5zdWJzdHJpbmcoMCwgaW5kZXgpLCB0ZXh0LnN1YnN0cmluZyhpbmRleCldO1xuICAgIH1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmV4cG9ydCB2YXIgZXVpVGV4dFRydW5jYXRlU3R5bGVzID0ge1xuICBldWlUZXh0VHJ1bmNhdGU6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICBuYW1lOiBcIjdvNXFuei1ldWlUZXh0VHJ1bmNhdGVcIixcbiAgICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDtsYWJlbDpldWlUZXh0VHJ1bmNhdGU7XCJcbiAgfSA6IHtcbiAgICBuYW1lOiBcIjdvNXFuei1ldWlUZXh0VHJ1bmNhdGVcIixcbiAgICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDtsYWJlbDpldWlUZXh0VHJ1bmNhdGU7XCIsXG4gICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gIH0sXG4gIC8qKlxuICAgKiBUaGUgYmVsb3cgQ1NTIGlzIGEgaGFjayB0byBnZXQgZG91YmxlIGNsaWNraW5nIGFuZCBzZWxlY3RpbmcgdGhlICpmdWxsKiB0ZXh0XG4gICAqIGluc3RlYWQgb2YgdGhlIHRydW5jYXRlZCB0ZXh0ICh1c2VmdWwgZm9yIGNvcHlpbmcvcGFzdGluZywgYW5kIG1pbWljcyBob3dcbiAgICogYHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzYCB3b3JrcykuXG4gICAqXG4gICAqIFJlYWwgdGFsazogSSdtIGxvd2tleSBhbWF6ZWQgaXQgd29ya3MgYW5kIGl0IHdvdWxkbid0IHN1cnByaXNlIG1lIGlmIHdlIHJhbiBpbnRvXG4gICAqIGNyb3NzLWJyb3dzZXIgaXNzdWVzIHdpdGggdGhpcyBhdCBzb21lIHBvaW50LiBIb3BlZnVsbHkgQ1NTIG5hdGl2ZWx5IGltcGxlbWVudHNcbiAgICogY3VzdG9tIHRleHQgdHJ1bmNhdGlvbiBzb21lIGRheSAoaHR0cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMvaXNzdWVzLzM5MzcpXG4gICAqIGFuZCB0aGVyZSdsbCBiZSBubyBuZWVkIGZvciB0aGUgZW50aXJlIGNvbXBvbmVudCBhdCB0aGF0IHBvaW50IFx1RDgzRFx1REU0RlxuICAgKi9cbiAgLy8gTWFrZXMgdGhlIHRydW5jYXRlZCB0ZXh0IHVuc2VsZWN0YWJsZS91bi1jbGlja2FibGVcbiAgZXVpVGV4dFRydW5jYXRlX190cnVuY2F0ZWRUZXh0OiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgbmFtZTogXCIxc2p4a2IxLWV1aVRleHRUcnVuY2F0ZV9fdHJ1bmNhdGVkVGV4dFwiLFxuICAgIHN0eWxlczogXCJ1c2VyLXNlbGVjdDpub25lO3BvaW50ZXItZXZlbnRzOm5vbmU7bGFiZWw6ZXVpVGV4dFRydW5jYXRlX190cnVuY2F0ZWRUZXh0O1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCIxc2p4a2IxLWV1aVRleHRUcnVuY2F0ZV9fdHJ1bmNhdGVkVGV4dFwiLFxuICAgIHN0eWxlczogXCJ1c2VyLXNlbGVjdDpub25lO3BvaW50ZXItZXZlbnRzOm5vbmU7bGFiZWw6ZXVpVGV4dFRydW5jYXRlX190cnVuY2F0ZWRUZXh0O1wiLFxuICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICB9LFxuICAvLyBQb3NpdGlvbnMgdGhlIGZ1bGwgdGV4dCBvbiB0b3Agb2YgdGhlIHRydW5jYXRlZCB0ZXh0IChzbyB0aGF0IGNsaWNraW5nIHRhcmdldHMgaXQpXG4gIC8vIGFuZCBnaXZlcyBpdCBhIGNvbG9yIG9wYWNpdHkgb2YgMCBzbyB0aGF0IGl0J3Mgbm90IGFjdHVhbGx5IHZpc2libGVcbiAgZXVpVGV4dFRydW5jYXRlX19mdWxsVGV4dDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgIG5hbWU6IFwiMTljOWdxaS1ldWlUZXh0VHJ1bmNhdGVfX2Z1bGxUZXh0XCIsXG4gICAgc3R5bGVzOiBcInBvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7b3ZlcmZsb3c6aGlkZGVuO2NvbG9yOnJnYmEoMCwgMCwgMCwgMCk7QHN1cHBvcnRzICgtd2Via2l0LWh5cGhlbnM6IG5vbmUpe3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7fTtsYWJlbDpldWlUZXh0VHJ1bmNhdGVfX2Z1bGxUZXh0O1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCIxOWM5Z3FpLWV1aVRleHRUcnVuY2F0ZV9fZnVsbFRleHRcIixcbiAgICBzdHlsZXM6IFwicG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtvdmVyZmxvdzpoaWRkZW47Y29sb3I6cmdiYSgwLCAwLCAwLCAwKTtAc3VwcG9ydHMgKC13ZWJraXQtaHlwaGVuczogbm9uZSl7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt9O2xhYmVsOmV1aVRleHRUcnVuY2F0ZV9fZnVsbFRleHQ7XCIsXG4gICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gIH1cbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInN0eWxlXCIsIFwibGluZXNcIiwgXCJjbG9uZUVsZW1lbnRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGlzVmFsaWRFbGVtZW50LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBzdHlsZXMgPSB7XG4gIGV1aVRleHRCbG9ja1RydW5jYXRlOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgbmFtZTogXCIxY2ZtM2dlLWV1aVRleHRCbG9ja1RydW5jYXRlXCIsXG4gICAgc3R5bGVzOiBcImRpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsOy13ZWJraXQtbGluZS1jbGFtcDowO292ZXJmbG93OmhpZGRlbjtsYWJlbDpldWlUZXh0QmxvY2tUcnVuY2F0ZTtcIlxuICB9IDoge1xuICAgIG5hbWU6IFwiMWNmbTNnZS1ldWlUZXh0QmxvY2tUcnVuY2F0ZVwiLFxuICAgIHN0eWxlczogXCJkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWxpbmUtY2xhbXA6MDtvdmVyZmxvdzpoaWRkZW47bGFiZWw6ZXVpVGV4dEJsb2NrVHJ1bmNhdGU7XCIsXG4gICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gIH1cbn07XG5leHBvcnQgdmFyIEV1aVRleHRCbG9ja1RydW5jYXRlID0gZnVuY3Rpb24gRXVpVGV4dEJsb2NrVHJ1bmNhdGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICBsaW5lcyA9IF9yZWYubGluZXMsXG4gICAgY2xvbmVFbGVtZW50ID0gX3JlZi5jbG9uZUVsZW1lbnQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRleHRCbG9ja1RydW5jYXRlJywgY2xhc3NOYW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IHN0eWxlcy5ldWlUZXh0QmxvY2tUcnVuY2F0ZTtcbiAgdmFyIGlubGluZVN0eWxlcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIFdlYmtpdExpbmVDbGFtcDogbGluZXNcbiAgICB9LCBzdHlsZSk7XG4gIH0sIFtsaW5lcywgc3R5bGVdKTtcbiAgaWYgKCAvKiNfX1BVUkVfXyovaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNsb25lRWxlbWVudCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCB7XG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIHN0eWxlOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNoaWxkcmVuLnByb3BzLnN0eWxlKSwgaW5saW5lU3R5bGVzKSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhjaGlsZHJlbi5wcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMpXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICBzdHlsZTogaW5saW5lU3R5bGVzXG4gICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgfVxufTtcbkV1aVRleHRCbG9ja1RydW5jYXRlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogTnVtYmVyIG9mIGxpbmVzIG9mIHRleHQgdG8gdHJ1bmNhdGUgdG9cbiAgICAgICAqL1xuICBsaW5lczogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgICAqIEFwcGxpZXMgc3R5bGluZyB0byB0aGUgY2hpbGQgZWxlbWVudCBpbnN0ZWFkIG9mIHJlbmRlcmluZyBhIHBhcmVudCB3cmFwcGVyIGBkaXZgLlxuICAgICAgICogQ2FuIG9ubHkgYmUgdXNlZCB3aGVuIHdyYXBwaW5nIGEgKnNpbmdsZSogY2hpbGQgZWxlbWVudC90YWcsIGFuZCBub3QgcmF3IHRleHQuXG4gICAgICAgKi9cbiAgY2xvbmVFbGVtZW50OiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94VGl0bGUgPSBmdW5jdGlvbiBFdWlDb21ib0JveFRpdGxlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveFRpdGxlXCJcbiAgfSwgY2hpbGRyZW4pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbWF0aFdpdGhVbml0cywgZXVpU2Nyb2xsQmFyU3R5bGVzLCBldWlUZXh0QnJlYWtXb3JkLCBldWlUZXh0VHJ1bmNhdGUgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlUaXRsZSB9IGZyb20gJy4uLy4uL3RpdGxlL3RpdGxlLnN0eWxlcyc7XG5leHBvcnQgdmFyIExJU1RfTUFYX0hFSUdIVCA9IDIwMDtcbmV4cG9ydCB2YXIgZXVpQ29tYm9Cb3hPcHRpb25MaXN0U3R5bGVzID0gZnVuY3Rpb24gZXVpQ29tYm9Cb3hPcHRpb25MaXN0U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpQ29tYm9Cb3hPcHRpb25MaXN0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21heC1oZWlnaHQnLCBcIlwiLmNvbmNhdChMSVNUX01BWF9IRUlHSFQsIFwicHhcIikpLCBcIiBvdmVyZmxvdzpoaWRkZW47LmV1aVRleHRUcnVuY2F0ZXtwb2ludGVyLWV2ZW50czpub25lO30uZXVpQ29tYm9Cb3hPcHRpb25fX2NvbnRlbnRXcmFwcGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7fS5ldWlDb21ib0JveE9wdGlvbl9fY29udGVudHtmbGV4OjE7dGV4dC1hbGlnbjpzdGFydDtcIiwgZXVpVGV4dFRydW5jYXRlKCksIFwiO30uZXVpQ29tYm9Cb3hPcHRpb25fX2VtcHR5U3RhdGVUZXh0e2ZsZXg6MTt0ZXh0LWFsaWduOnN0YXJ0O1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgMCksIFwiO30uZXVpQ29tYm9Cb3hPcHRpb25fX2VudGVyQmFkZ2V7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgZXVpVGhlbWUuc2l6ZS54cyksIFwiO30uZXVpQ29tYm9Cb3hUaXRsZXtkaXNwbGF5OmZsZXg7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGV1aVRoZW1lLnNpemUucyksIGxvZ2ljYWxDU1MoJ3BhZGRpbmctdG9wJywgbWF0aFdpdGhVbml0cyhldWlUaGVtZS5zaXplLnMsIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCArIDE7XG4gICAgfSkpLCBcIiBcIiwgbG9naWNhbENTUygncGFkZGluZy1ib3R0b20nLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgXCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4eHMnKSwgXCI7fTtsYWJlbDpldWlDb21ib0JveE9wdGlvbkxpc3Q7XCIpLFxuICAgIGV1aUNvbWJvQm94T3B0aW9uTGlzdF9fdmlydHVhbGl6YXRpb246IC8qI19fUFVSRV9fKi9jc3MoZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCksIFwiOztsYWJlbDpldWlDb21ib0JveE9wdGlvbkxpc3RfX3ZpcnR1YWxpemF0aW9uO1wiKSxcbiAgICBldWlDb21ib0JveE9wdGlvbnNMaXN0X19lbXB0eTogLyojX19QVVJFX18qL2NzcyhcInBhZGRpbmc6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7dGV4dC1hbGlnbjpjZW50ZXI7XCIsIGV1aVRleHRCcmVha1dvcmQoKSwgXCI7O2xhYmVsOmV1aUNvbWJvQm94T3B0aW9uc0xpc3RfX2VtcHR5O1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpQ29tYm9Cb3hTdHlsZXMgPSB7XG4gIGV1aUNvbWJvQm94OiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsICdhdXRvJyksIFwiOztsYWJlbDpldWlDb21ib0JveDtcIiksXG4gIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImFjdGl2ZVBhZ2VcIiwgXCJpdGVtc1BlclBhZ2VcIiwgXCJpdGVtc1BlclBhZ2VPcHRpb25zXCIsIFwic2hvd1BlclBhZ2VPcHRpb25zXCIsIFwib25DaGFuZ2VJdGVtc1BlclBhZ2VcIiwgXCJvbkNoYW5nZVBhZ2VcIiwgXCJwYWdlQ291bnRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5IH0gZnJvbSAnLi4vLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSwgRXVpQ29udGV4dE1lbnVQYW5lbCB9IGZyb20gJy4uLy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtIH0gZnJvbSAnLi4vLi4vZmxleCc7XG5pbXBvcnQgeyBFdWlQYWdpbmF0aW9uIH0gZnJvbSAnLi4vLi4vcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBFdWlQb3BvdmVyIH0gZnJvbSAnLi4vLi4vcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyB1c2VQcm9wc1dpdGhDb21wb25lbnREZWZhdWx0cyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVyL2NvbXBvbmVudF9kZWZhdWx0cyc7XG5pbXBvcnQgeyBldWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cyB9IGZyb20gJy4vdGFibGVfcGFnaW5hdGlvbl9kZWZhdWx0cyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVBhZ2luYXRpb24gPSBmdW5jdGlvbiBFdWlUYWJsZVBhZ2luYXRpb24ocHJvcHMpIHtcbiAgdmFyIF91c2VQcm9wc1dpdGhDb21wb25lbiA9IHVzZVByb3BzV2l0aENvbXBvbmVudERlZmF1bHRzKCdFdWlUYWJsZVBhZ2luYXRpb24nLCBwcm9wcyksXG4gICAgYWN0aXZlUGFnZSA9IF91c2VQcm9wc1dpdGhDb21wb25lbi5hY3RpdmVQYWdlLFxuICAgIF91c2VQcm9wc1dpdGhDb21wb25lbjIgPSBfdXNlUHJvcHNXaXRoQ29tcG9uZW4uaXRlbXNQZXJQYWdlLFxuICAgIGl0ZW1zUGVyUGFnZSA9IF91c2VQcm9wc1dpdGhDb21wb25lbjIgPT09IHZvaWQgMCA/IGV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzLml0ZW1zUGVyUGFnZSA6IF91c2VQcm9wc1dpdGhDb21wb25lbjIsXG4gICAgX3VzZVByb3BzV2l0aENvbXBvbmVuMyA9IF91c2VQcm9wc1dpdGhDb21wb25lbi5pdGVtc1BlclBhZ2VPcHRpb25zLFxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMgPSBfdXNlUHJvcHNXaXRoQ29tcG9uZW4zID09PSB2b2lkIDAgPyBldWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cy5pdGVtc1BlclBhZ2VPcHRpb25zIDogX3VzZVByb3BzV2l0aENvbXBvbmVuMyxcbiAgICBfdXNlUHJvcHNXaXRoQ29tcG9uZW40ID0gX3VzZVByb3BzV2l0aENvbXBvbmVuLnNob3dQZXJQYWdlT3B0aW9ucyxcbiAgICBzaG93UGVyUGFnZU9wdGlvbnMgPSBfdXNlUHJvcHNXaXRoQ29tcG9uZW40ID09PSB2b2lkIDAgPyBldWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cy5zaG93UGVyUGFnZU9wdGlvbnMgOiBfdXNlUHJvcHNXaXRoQ29tcG9uZW40LFxuICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlID0gX3VzZVByb3BzV2l0aENvbXBvbmVuLm9uQ2hhbmdlSXRlbXNQZXJQYWdlLFxuICAgIG9uQ2hhbmdlUGFnZSA9IF91c2VQcm9wc1dpdGhDb21wb25lbi5vbkNoYW5nZVBhZ2UsXG4gICAgcGFnZUNvdW50ID0gX3VzZVByb3BzV2l0aENvbXBvbmVuLnBhZ2VDb3VudCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF91c2VQcm9wc1dpdGhDb21wb25lbiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBpc1BvcG92ZXJPcGVuID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRJc1BvcG92ZXJPcGVuID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIHRvZ2dsZVBvcG92ZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgc2V0SXNQb3BvdmVyT3BlbihmdW5jdGlvbiAoaXNPcGVuKSB7XG4gICAgICByZXR1cm4gIWlzT3BlbjtcbiAgICB9KTtcbiAgfSwgW10pO1xuICB2YXIgY2xvc2VQb3BvdmVyID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHNldElzUG9wb3Zlck9wZW4oZmFsc2UpO1xuICB9LCBbXSk7XG4gIHZhciBidXR0b24gPSBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkVtcHR5LCB7XG4gICAgc2l6ZTogXCJ4c1wiLFxuICAgIGNvbG9yOiBcInRleHRcIixcbiAgICBpY29uVHlwZTogXCJhcnJvd0Rvd25cIixcbiAgICBpY29uU2lkZTogXCJyaWdodFwiLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0YWJsZVBhZ2luYXRpb25Qb3BvdmVyQnV0dG9uXCIsXG4gICAgb25DbGljazogdG9nZ2xlUG9wb3ZlclxuICB9LCBpdGVtc1BlclBhZ2UgPT09IDAgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICB0b2tlbjogXCJldWlUYWJsZVBhZ2luYXRpb24uYWxsUm93c1wiLFxuICAgIGRlZmF1bHQ6IFwiU2hvd2luZyBhbGwgcm93c1wiXG4gIH0pIDogX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLnJvd3NQZXJQYWdlXCIsXG4gICAgZGVmYXVsdDogXCJSb3dzIHBlciBwYWdlXCJcbiAgfSksIFwiOiBcIiwgaXRlbXNQZXJQYWdlKSk7XG4gIHZhciBpdGVtcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpdGVtc1BlclBhZ2VPcHRpb25zLm1hcChmdW5jdGlvbiAoaXRlbXNQZXJQYWdlT3B0aW9uKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIHtcbiAgICAgICAga2V5OiBpdGVtc1BlclBhZ2VPcHRpb24sXG4gICAgICAgIGljb246IGl0ZW1zUGVyUGFnZU9wdGlvbiA9PT0gaXRlbXNQZXJQYWdlID8gJ2NoZWNrJyA6ICdlbXB0eScsXG4gICAgICAgIFwiYXJpYS1jdXJyZW50XCI6IGl0ZW1zUGVyUGFnZU9wdGlvbiA9PT0gaXRlbXNQZXJQYWdlID8gJ3RydWUnIDogdW5kZWZpbmVkLFxuICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgIGNsb3NlUG9wb3ZlcigpO1xuICAgICAgICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlID09PSBudWxsIHx8IG9uQ2hhbmdlSXRlbXNQZXJQYWdlID09PSB2b2lkIDAgfHwgb25DaGFuZ2VJdGVtc1BlclBhZ2UoaXRlbXNQZXJQYWdlT3B0aW9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlUGFnaW5hdGlvbi1cIi5jb25jYXQoaXRlbXNQZXJQYWdlT3B0aW9uLCBcIi1yb3dzXCIpXG4gICAgICB9LCBpdGVtc1BlclBhZ2VPcHRpb24gPT09IDAgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLnJvd3NQZXJQYWdlT3B0aW9uU2hvd0FsbFJvd3NcIixcbiAgICAgICAgZGVmYXVsdDogXCJTaG93IGFsbCByb3dzXCJcbiAgICAgIH0pIDogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRhYmxlUGFnaW5hdGlvbi5yb3dzUGVyUGFnZU9wdGlvblwiLFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICByb3dzUGVyUGFnZTogaXRlbXNQZXJQYWdlT3B0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IFwie3Jvd3NQZXJQYWdlfSByb3dzXCJcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfSwgW2l0ZW1zUGVyUGFnZU9wdGlvbnMsIGl0ZW1zUGVyUGFnZSwgb25DaGFuZ2VJdGVtc1BlclBhZ2UsIGNsb3NlUG9wb3Zlcl0pO1xuICB2YXIgaXRlbXNQZXJQYWdlUG9wb3ZlciA9IF9fX0Vtb3Rpb25KU1goRXVpUG9wb3Zlciwge1xuICAgIGJ1dHRvbjogYnV0dG9uLFxuICAgIGlzT3BlbjogaXNQb3BvdmVyT3BlbixcbiAgICBjbG9zZVBvcG92ZXI6IGNsb3NlUG9wb3ZlcixcbiAgICBwYW5lbFBhZGRpbmdTaXplOiBcIm5vbmVcIixcbiAgICBhbmNob3JQb3NpdGlvbjogXCJ1cFJpZ2h0XCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudVBhbmVsLCB7XG4gICAgaXRlbXM6IGl0ZW1zLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0YWJsZVBhZ2luYXRpb25Sb3dPcHRpb25zXCJcbiAgfSkpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGbGV4R3JvdXAsIHtcbiAgICBqdXN0aWZ5Q29udGVudDogXCJzcGFjZUJldHdlZW5cIixcbiAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgIHJlc3BvbnNpdmU6IGZhbHNlLFxuICAgIHdyYXA6IHRydWUsXG4gICAgZ3V0dGVyU2l6ZTogXCJzXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aS14U2Nyb2xsXCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIHNob3dQZXJQYWdlT3B0aW9ucyAmJiBpdGVtc1BlclBhZ2VQb3BvdmVyKSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIGl0ZW1zUGVyUGFnZSA+IDAgJiYgX19fRW1vdGlvbkpTWChFdWlQYWdpbmF0aW9uLCBfZXh0ZW5kcyh7XG4gICAgcGFnZUNvdW50OiBwYWdlQ291bnQsXG4gICAgYWN0aXZlUGFnZTogYWN0aXZlUGFnZSxcbiAgICBvblBhZ2VDbGljazogb25DaGFuZ2VQYWdlXG4gIH0sIHJlc3QpKSkpO1xufTtcbkV1aVRhYmxlUGFnaW5hdGlvbi5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIE9wdGlvbiB0byBjb21wbGV0ZWx5IGhpZGUgdGhlIFwiUm93cyBwZXIgcGFnZVwiIHNlbGVjdG9yLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICBzaG93UGVyUGFnZU9wdGlvbnM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBDdXJyZW50IHNlbGVjdGlvbiBmb3IgXCJSb3dzIHBlciBwYWdlXCIuXG4gICAgICogUGFzcyBgMGAgdG8gZGlzcGxheSB0aGUgc2VsZWN0ZWQgXCJTaG93IGFsbFwiIG9wdGlvbiBhbmQgaGlkZSB0aGUgcGFnaW5hdGlvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gIGl0ZW1zUGVyUGFnZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAgICogQ3VzdG9tIGFycmF5IG9mIG9wdGlvbnMgZm9yIFwiUm93cyBwZXIgcGFnZVwiLlxuICAgICAqIFBhc3MgYDBgIGFzIG9uZSBvZiB0aGUgb3B0aW9ucyB0byBjcmVhdGUgYSBcIlNob3cgYWxsXCIgb3B0aW9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgWzEwLCAyNSwgNTBdXG4gICAgICovXG4gIGl0ZW1zUGVyUGFnZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCksXG4gIC8qKlxuICAgICAqIENsaWNrIGhhbmRsZXIgdGhhdCBwYXNzZXMgYmFjayBzZWxlY3RlZCBgcGFnZVNpemVgIG51bWJlclxuICAgICAqL1xuICBvbkNoYW5nZUl0ZW1zUGVyUGFnZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2hhbmdlUGFnZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIFJlcXVpcmVzIHRoZSBgaWRgIG9mIHRoZSB0YWJsZSBiZWluZyBjb250cm9sbGVkXG4gICAgICovXG4gIFwiYXJpYS1jb250cm9sc1wiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcInBhZ2VDb3VudFwiLCBcImFjdGl2ZVBhZ2VcIiwgXCJvblBhZ2VDbGlja1wiLCBcImNvbXByZXNzZWRcIiwgXCJhcmlhLWNvbnRyb2xzXCIsIFwicmVzcG9uc2l2ZVwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlQYWdpbmF0aW9uQnV0dG9uIH0gZnJvbSAnLi9wYWdpbmF0aW9uX2J1dHRvbic7XG5pbXBvcnQgeyBFdWlJMThuLCB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQgeyBFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cgfSBmcm9tICcuL3BhZ2luYXRpb25fYnV0dG9uX2Fycm93JztcbmltcG9ydCB7IHVzZUlzV2l0aGluQnJlYWtwb2ludHMsIHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgZXVpUGFnaW5hdGlvblN0eWxlcyB9IGZyb20gJy4vcGFnaW5hdGlvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBNQVhfVklTSUJMRV9QQUdFUyA9IDU7XG52YXIgTlVNQkVSX1NVUlJPVU5ESU5HX1BBR0VTID0gTWF0aC5mbG9vcihNQVhfVklTSUJMRV9QQUdFUyAqIDAuNSk7XG5leHBvcnQgdmFyIEV1aVBhZ2luYXRpb24gPSBmdW5jdGlvbiBFdWlQYWdpbmF0aW9uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkcGFnZUNvdW50ID0gX3JlZi5wYWdlQ291bnQsXG4gICAgcGFnZUNvdW50ID0gX3JlZiRwYWdlQ291bnQgPT09IHZvaWQgMCA/IDEgOiBfcmVmJHBhZ2VDb3VudCxcbiAgICBfcmVmJGFjdGl2ZVBhZ2UgPSBfcmVmLmFjdGl2ZVBhZ2UsXG4gICAgYWN0aXZlUGFnZSA9IF9yZWYkYWN0aXZlUGFnZSA9PT0gdm9pZCAwID8gMCA6IF9yZWYkYWN0aXZlUGFnZSxcbiAgICBfcmVmJG9uUGFnZUNsaWNrID0gX3JlZi5vblBhZ2VDbGljayxcbiAgICBvblBhZ2VDbGljayA9IF9yZWYkb25QYWdlQ2xpY2sgPT09IHZvaWQgMCA/IGZ1bmN0aW9uICgpIHt9IDogX3JlZiRvblBhZ2VDbGljayxcbiAgICBfY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICBhcmlhQ29udHJvbHMgPSBfcmVmWydhcmlhLWNvbnRyb2xzJ10sXG4gICAgX3JlZiRyZXNwb25zaXZlID0gX3JlZi5yZXNwb25zaXZlLFxuICAgIHJlc3BvbnNpdmUgPSBfcmVmJHJlc3BvbnNpdmUgPT09IHZvaWQgMCA/IFsneHMnLCAncyddIDogX3JlZiRyZXNwb25zaXZlLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzUmVzcG9uc2l2ZSA9IHVzZUlzV2l0aGluQnJlYWtwb2ludHMocmVzcG9uc2l2ZSwgISFyZXNwb25zaXZlKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVBhZ2luYXRpb25TdHlsZXMoZXVpVGhlbWUpO1xuXG4gIC8vIEZvcmNlIHRvIGBjb21wcmVzc2VkYCB2ZXJzaW9uIGlmIHNwZWNpZmllZCBvciB3aXRoaW4gdGhlIHJlc3BvbnNpdmUgYnJlYWtwb2ludHNcbiAgdmFyIGNvbXByZXNzZWQgPSBfY29tcHJlc3NlZCB8fCBpc1Jlc3BvbnNpdmU7XG4gIHZhciBzYWZlQ2xpY2sgPSBmdW5jdGlvbiBzYWZlQ2xpY2soZSwgcGFnZUluZGV4KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChhcmlhQ29udHJvbHMpIHtcbiAgICAgIHZhciBjb250cm9sbGVkRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFyaWFDb250cm9scyk7XG4gICAgICBpZiAoY29udHJvbGxlZEVsZW1lbnQpIHtcbiAgICAgICAgY29udHJvbGxlZEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgb25QYWdlQ2xpY2socGFnZUluZGV4KTtcbiAgfTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQYWdpbmF0aW9uJywgY2xhc3NOYW1lKTtcbiAgdmFyIGZpcnN0QnV0dG9uID0gKHBhZ2VDb3VudCA8IDEgfHwgY29tcHJlc3NlZCkgJiYgX19fRW1vdGlvbkpTWChFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3csIHtcbiAgICB0eXBlOiBcImZpcnN0XCIsXG4gICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gc2FmZUNsaWNrKGUsIDApO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGFjdGl2ZVBhZ2UgPT09IDBcbiAgfSk7XG4gIHZhciBwcmV2aW91c0J1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LCB7XG4gICAgdHlwZTogXCJwcmV2aW91c1wiLFxuICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBhY3RpdmVQYWdlIC0gMSk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gMFxuICB9KTtcbiAgdmFyIG5leHRCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwibmV4dFwiLFxuICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBhY3RpdmVQYWdlICsgMSk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gLTEgfHwgYWN0aXZlUGFnZSA9PT0gcGFnZUNvdW50IC0gMVxuICB9KTtcbiAgdmFyIGxhc3RCdXR0b24gPSAocGFnZUNvdW50IDwgMSB8fCBjb21wcmVzc2VkKSAmJiBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwibGFzdFwiLFxuICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBwYWdlQ291bnQgPyBwYWdlQ291bnQgLSAxIDogLTEpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGFjdGl2ZVBhZ2UgPT09IC0xIHx8IGFjdGl2ZVBhZ2UgPT09IHBhZ2VDb3VudCAtIDFcbiAgfSk7XG4gIHZhciBjZW50ZXJQYWdlQ291bnQ7XG4gIGlmIChwYWdlQ291bnQpIHtcbiAgICB2YXIgc2hhcmVkQnV0dG9uUHJvcHMgPSB7XG4gICAgICBhY3RpdmVQYWdlOiBhY3RpdmVQYWdlLFxuICAgICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgICBzYWZlQ2xpY2s6IHNhZmVDbGljayxcbiAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgfTtcbiAgICBpZiAoY29tcHJlc3NlZCkge1xuICAgICAgY2VudGVyUGFnZUNvdW50ID0gX19fRW1vdGlvbkpTWChFdWlUZXh0LCB7XG4gICAgICAgIHNpemU6IFwic1wiLFxuICAgICAgICBjc3M6IHN0eWxlcy5ldWlQYWdpbmF0aW9uX19jb21wcmVzc2VkVGV4dCxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25fX2NvbXByZXNzZWRUZXh0XCJcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlQYWdpbmF0aW9uLnBhZ2VPZlRvdGFsQ29tcHJlc3NlZFwiLFxuICAgICAgICBkZWZhdWx0OiBcIntwYWdlfSBvZiB7dG90YWx9XCIsXG4gICAgICAgIHZhbHVlczoge1xuICAgICAgICAgIHBhZ2U6IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIGFjdGl2ZVBhZ2UgKyAxKSxcbiAgICAgICAgICB0b3RhbDogX19fRW1vdGlvbkpTWChcInNwYW5cIiwgbnVsbCwgcGFnZUNvdW50KVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwYWdlcyA9IFtdO1xuICAgICAgdmFyIGZpcnN0UGFnZUluUmFuZ2UgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihhY3RpdmVQYWdlIC0gTlVNQkVSX1NVUlJPVU5ESU5HX1BBR0VTLCBwYWdlQ291bnQgLSBNQVhfVklTSUJMRV9QQUdFUykpO1xuICAgICAgdmFyIGxhc3RQYWdlSW5SYW5nZSA9IE1hdGgubWluKHBhZ2VDb3VudCwgZmlyc3RQYWdlSW5SYW5nZSArIE1BWF9WSVNJQkxFX1BBR0VTKTtcbiAgICAgIGZvciAodmFyIGkgPSBmaXJzdFBhZ2VJblJhbmdlLCBpbmRleCA9IDA7IGkgPCBsYXN0UGFnZUluUmFuZ2U7IGkrKywgaW5kZXgrKykge1xuICAgICAgICBwYWdlcy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBwYWdlSW5kZXg6IGksXG4gICAgICAgICAga2V5OiBpXG4gICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgfVxuICAgICAgdmFyIGZpcnN0UGFnZUJ1dHRvbnMgPSBbXTtcbiAgICAgIGlmIChmaXJzdFBhZ2VJblJhbmdlID4gMCkge1xuICAgICAgICBmaXJzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICBrZXk6IDBcbiAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG4gICAgICAgIGlmIChmaXJzdFBhZ2VJblJhbmdlID4gMSAmJiBmaXJzdFBhZ2VJblJhbmdlICE9PSAyKSB7XG4gICAgICAgICAgZmlyc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAga2V5OiBcInN0YXJ0aW5nRWxsaXBzZXNcIixcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb24uZmlyc3RSYW5nZUFyaWFMYWJlbFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJTa2lwcGluZyBwYWdlcyAyIHRvIHtsYXN0UGFnZX1cIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBsYXN0UGFnZTogZmlyc3RQYWdlSW5SYW5nZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZ1bmN0aW9uIChmaXJzdFJhbmdlQXJpYUxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIHtcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGZpcnN0UmFuZ2VBcmlhTGFiZWwsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uX19pdGVtXCIsXG4gICAgICAgICAgICAgIGNzczogc3R5bGVzLmV1aVBhZ2luYXRpb25fX2VsbGlwc2lzXG4gICAgICAgICAgICB9LCBcIlxcdTIwMjZcIik7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpcnN0UGFnZUluUmFuZ2UgPT09IDIpIHtcbiAgICAgICAgICBmaXJzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgcGFnZUluZGV4OiAxLFxuICAgICAgICAgICAga2V5OiAxXG4gICAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBsYXN0UGFnZUJ1dHRvbnMgPSBbXTtcbiAgICAgIGlmIChsYXN0UGFnZUluUmFuZ2UgPCBwYWdlQ291bnQpIHtcbiAgICAgICAgaWYgKGxhc3RQYWdlSW5SYW5nZSArIDEgPT09IHBhZ2VDb3VudCAtIDEpIHtcbiAgICAgICAgICBsYXN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CdXR0b25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IGxhc3RQYWdlSW5SYW5nZSxcbiAgICAgICAgICAgIGtleTogbGFzdFBhZ2VJblJhbmdlXG4gICAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobGFzdFBhZ2VJblJhbmdlIDwgcGFnZUNvdW50IC0gMSkge1xuICAgICAgICAgIGxhc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAga2V5OiBcImVuZGluZ0VsbGlwc2VzXCIsXG4gICAgICAgICAgICB0b2tlbjogXCJldWlQYWdpbmF0aW9uLmxhc3RSYW5nZUFyaWFMYWJlbFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJTa2lwcGluZyBwYWdlcyB7Zmlyc3RQYWdlfSB0byB7bGFzdFBhZ2V9XCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgZmlyc3RQYWdlOiBsYXN0UGFnZUluUmFuZ2UgKyAxLFxuICAgICAgICAgICAgICBsYXN0UGFnZTogcGFnZUNvdW50IC0gMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZ1bmN0aW9uIChsYXN0UmFuZ2VBcmlhTGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwge1xuICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogbGFzdFJhbmdlQXJpYUxhYmVsLFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpUGFnaW5hdGlvbl9faXRlbVwiLFxuICAgICAgICAgICAgICBjc3M6IHN0eWxlcy5ldWlQYWdpbmF0aW9uX19lbGxpcHNpc1xuICAgICAgICAgICAgfSwgXCJcXHUyMDI2XCIpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CdXR0b25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgcGFnZUluZGV4OiBwYWdlQ291bnQgLSAxLFxuICAgICAgICAgIGtleTogcGFnZUNvdW50IC0gMVxuICAgICAgICB9LCBzaGFyZWRCdXR0b25Qcm9wcykpKTtcbiAgICAgIH1cbiAgICAgIHZhciBzZWxlY3RhYmxlUGFnZXMgPSBwYWdlcztcbiAgICAgIHZhciBhY2Nlc3NpYmxlTmFtZSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdFsnYXJpYS1sYWJlbCddICYmIHtcbiAgICAgICAgJ2FyaWEtbGFiZWwnOiByZXN0WydhcmlhLWxhYmVsJ11cbiAgICAgIH0pLCByZXN0WydhcmlhLWxhYmVsbGVkYnknXSAmJiB7XG4gICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiByZXN0WydhcmlhLWxhYmVsbGVkYnknXVxuICAgICAgfSk7XG4gICAgICBjZW50ZXJQYWdlQ291bnQgPSBfX19FbW90aW9uSlNYKFwidWxcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpUGFnaW5hdGlvbl9fbGlzdFwiLFxuICAgICAgICBjc3M6IHN0eWxlcy5ldWlQYWdpbmF0aW9uX19saXN0XG4gICAgICB9LCBhY2Nlc3NpYmxlTmFtZSksIGZpcnN0UGFnZUJ1dHRvbnMsIHNlbGVjdGFibGVQYWdlcywgbGFzdFBhZ2VCdXR0b25zKTtcbiAgICB9XG4gIH1cblxuICAvLyBBbGwgdGhlIGkxOG4gc3RyaW5ncyB1c2VkIHRvIGJ1aWxkIHRoZSB3aG9sZSBTUi1vbmx5IHRleHRcbiAgdmFyIGxhc3RMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24ubGFzdCcsICdMYXN0Jyk7XG4gIHZhciBwYWdlTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLnBhZ2UnLCAnUGFnZScpO1xuICB2YXIgb2ZMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24ub2YnLCAnb2YnKTtcbiAgdmFyIGNvbGxlY3Rpb25MYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24uY29sbGVjdGlvbicsICdjb2xsZWN0aW9uJyk7XG4gIHZhciBmcm9tRW5kTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLmZyb21FbmRMYWJlbCcsICdmcm9tIGVuZCcpO1xuXG4gIC8vIEJhc2VkIG9uIHRoZSBgYWN0aXZlUGFnZWAgY291bnQsIGJ1aWxkIHRoZSBmcm9udCBvZiB0aGUgU1Itb25seSB0ZXh0XG4gIC8vIGkuZS4gYFBhZ2UgMWAsIGBQYWdlIDIgZnJvbSBlbmRgLCBgTGFzdCBQYWdlYFxuICB2YXIgYWNjZXNzaWJsZVBhZ2VTdHJpbmcgPSBmdW5jdGlvbiBhY2Nlc3NpYmxlUGFnZVN0cmluZygpIHtcbiAgICBpZiAoYWN0aXZlUGFnZSA8IC0xKSByZXR1cm4gXCJcIi5jb25jYXQocGFnZUxhYmVsLCBcIiBcIikuY29uY2F0KE1hdGguYWJzKGFjdGl2ZVBhZ2UpLCBcIiBcIikuY29uY2F0KGZyb21FbmRMYWJlbCk7XG4gICAgaWYgKGFjdGl2ZVBhZ2UgPT09IC0xKSByZXR1cm4gXCJcIi5jb25jYXQobGFzdExhYmVsLCBcIiBcIikuY29uY2F0KHBhZ2VMYWJlbCk7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHBhZ2VMYWJlbCwgXCIgXCIpLmNvbmNhdChhY3RpdmVQYWdlICsgMSk7XG4gIH07XG5cbiAgLy8gSWYgYHBhZ2VDb3VudGAgaXMgdW5rbm93biBjYWxsIGl0IGBjb2xsZWN0aW9uYFxuICB2YXIgYWNjZXNzaWJsZUNvbGxlY3Rpb25TdHJpbmcgPSBwYWdlQ291bnQgPT09IDAgPyBjb2xsZWN0aW9uTGFiZWwgOiBwYWdlQ291bnQudG9TdHJpbmcoKTtcblxuICAvLyBDcmVhdGUgdGhlIHdob2xlIHN0cmluZyB3aXRoIHRvdGFsIHBhZ2VDb3VudCBvciBgY29sbGVjdGlvbmBcbiAgdmFyIGFjY2Vzc2libGVQYWdlQ291bnQgPSBcIlwiLmNvbmNhdChhY2Nlc3NpYmxlUGFnZVN0cmluZygpLCBcIiBcIikuY29uY2F0KG9mTGFiZWwsIFwiIFwiKS5jb25jYXQoYWNjZXNzaWJsZUNvbGxlY3Rpb25TdHJpbmcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcIm5hdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBzdHlsZXMuZXVpUGFnaW5hdGlvbixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIFwiYXJpYS1hdG9taWNcIjogXCJ0cnVlXCIsXG4gICAgXCJhcmlhLXJlbGV2YW50XCI6IFwiYWRkaXRpb25zIHRleHRcIixcbiAgICByb2xlOiBcInN0YXR1c1wiXG4gIH0sIGFjY2Vzc2libGVQYWdlQ291bnQpKSwgZmlyc3RCdXR0b24sIHByZXZpb3VzQnV0dG9uLCBjZW50ZXJQYWdlQ291bnQsIG5leHRCdXR0b24sIGxhc3RCdXR0b24pO1xufTtcbkV1aVBhZ2luYXRpb24ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcy5cbiAgICAgKiBQYXNzIGAwYCBpZiB0b3RhbCBjb3VudCBpcyB1bmtub3duLlxuICAgICAqL1xuICBwYWdlQ291bnQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHBhZ2UgdXNpbmcgYSB6ZXJvIGJhc2VkIGluZGV4LlxuICAgICAqIFNvIGlmIHlvdSBzZXQgdGhlIGFjdGl2ZVBhZ2UgdG8gMSwgaXQgd2lsbCBhY3RpdmF0ZSB0aGUgc2Vjb25kIHBhZ2UuXG4gICAgICogUGFzcyBgLTFgIGZvciBmb3JjaW5nIHRvIGxhc3QgcGFnZS5cbiAgICAgKi9cbiAgYWN0aXZlUGFnZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAgICogQ2xpY2sgaGFuZGxlciB0aGF0IHBhc3NlcyBiYWNrIHRoZSBpbnRlcm5hbGx5IGNhbGN1bGF0ZWQgYGFjdGl2ZVBhZ2VgIGluZGV4XG4gICAgICovXG4gIG9uUGFnZUNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogSWYgdHJ1ZSwgd2lsbCBvbmx5IHNob3cgbmV4dC9wcmV2IGFycm93cyBhbmQgc2ltcGxpZmllZCBudW1iZXIgc2V0LlxuICAgICAqL1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSWYgcGFzc2VkIGluLCBwYXNzZXMgdmFsdWUgdGhyb3VnaCB0byBlYWNoIGJ1dHRvbiB0byBzZXQgYXJpYS1jb250cm9scy5cbiAgICAgKi9cbiAgXCJhcmlhLWNvbnRyb2xzXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIEF1dG9tYXRpY2FsbHkgcmVkdWNlcyB0byB0aGUgYGNvbXByZXNzZWRgIHZlcnNpb24gb24gc21hbGxlciBzY3JlZW5zLlxuICAgICAqIFJlbW92ZSBjb21wbGV0ZWx5IHdpdGggYGZhbHNlYCBvciBwcm92aWRlIHlvdXIgb3duIGxpc3Qgb2YgcmVzcG9uc2l2ZSBicmVha3BvaW50cy5cbiAgICAgKi9cbiAgcmVzcG9uc2l2ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKVxufTtcbnZhciBQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciA9IGZ1bmN0aW9uIFBhZ2luYXRpb25CdXR0b25XcmFwcGVyKF9yZWYyKSB7XG4gIHZhciBwYWdlSW5kZXggPSBfcmVmMi5wYWdlSW5kZXgsXG4gICAgX3JlZjIkaW5MaXN0ID0gX3JlZjIuaW5MaXN0LFxuICAgIGluTGlzdCA9IF9yZWYyJGluTGlzdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGluTGlzdCxcbiAgICBhY3RpdmVQYWdlID0gX3JlZjIuYWN0aXZlUGFnZSxcbiAgICBwYWdlQ291bnQgPSBfcmVmMi5wYWdlQ291bnQsXG4gICAgYXJpYUNvbnRyb2xzID0gX3JlZjIuYXJpYUNvbnRyb2xzLFxuICAgIHNhZmVDbGljayA9IF9yZWYyLnNhZmVDbGljayxcbiAgICBkaXNhYmxlZCA9IF9yZWYyLmRpc2FibGVkO1xuICB2YXIgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlQYWdpbmF0aW9uQnV0dG9uLCB7XG4gICAgaXNBY3RpdmU6IHBhZ2VJbmRleCA9PT0gYWN0aXZlUGFnZSxcbiAgICB0b3RhbFBhZ2VzOiBwYWdlQ291bnQsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gc2FmZUNsaWNrKGUsIHBhZ2VJbmRleCk7XG4gICAgfSxcbiAgICBwYWdlSW5kZXg6IHBhZ2VJbmRleCxcbiAgICBcImFyaWEtY29udHJvbHNcIjogYXJpYUNvbnRyb2xzLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICB9KTtcbiAgaWYgKGluTGlzdCkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25fX2l0ZW1cIlxuICAgIH0sIGJ1dHRvbik7XG4gIH1cbiAgcmV0dXJuIGJ1dHRvbjtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpc0FjdGl2ZVwiLCBcInBhZ2VJbmRleFwiLCBcInRvdGFsUGFnZXNcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uRW1wdHkgfSBmcm9tICcuLi9idXR0b24nO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlQYWdpbmF0aW9uQnV0dG9uU3R5bGVzIH0gZnJvbSAnLi9wYWdpbmF0aW9uX2J1dHRvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpUGFnaW5hdGlvbkJ1dHRvbiA9IGZ1bmN0aW9uIEV1aVBhZ2luYXRpb25CdXR0b24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgaXNBY3RpdmUgPSBfcmVmLmlzQWN0aXZlLFxuICAgIHBhZ2VJbmRleCA9IF9yZWYucGFnZUluZGV4LFxuICAgIHRvdGFsUGFnZXMgPSBfcmVmLnRvdGFsUGFnZXMsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpUGFnaW5hdGlvbkJ1dHRvblN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBwYWdpbmF0aW9uQnV0dG9uQ3NzID0gW3N0eWxlcy5ldWlQYWdpbmF0aW9uQnV0dG9uLCBpc0FjdGl2ZSAmJiBzdHlsZXMuaXNBY3RpdmVdO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBhZ2luYXRpb25CdXR0b24nLCBjbGFzc05hbWUpO1xuICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBwYWdpbmF0aW9uQnV0dG9uQ3NzLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBzaXplOiAncycsXG4gICAgY29sb3I6ICd0ZXh0JyxcbiAgICAnZGF0YS10ZXN0LXN1YmonOiBcInBhZ2luYXRpb24tYnV0dG9uLVwiLmNvbmNhdChwYWdlSW5kZXgpLFxuICAgIGlzRGlzYWJsZWQ6IGlzQWN0aXZlXG4gIH0sIGlzQWN0aXZlICYmIHtcbiAgICAnYXJpYS1jdXJyZW50JzogdHJ1ZVxuICB9KSwgcmVzdFsnYXJpYS1jb250cm9scyddICYmIHtcbiAgICBocmVmOiBcIiNcIi5jb25jYXQocmVzdFsnYXJpYS1jb250cm9scyddKVxuICB9KSwgcmVzdCk7XG4gIHZhciBwYWdlTnVtYmVyID0gcGFnZUluZGV4ICsgMTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb25CdXR0b24ubG9uZ1BhZ2VTdHJpbmdcIixcbiAgICBkZWZhdWx0OiBcIlBhZ2Uge3BhZ2V9IG9mIHt0b3RhbFBhZ2VzfVwiLFxuICAgIHZhbHVlczoge1xuICAgICAgcGFnZTogcGFnZU51bWJlcixcbiAgICAgIHRvdGFsUGFnZXM6IHRvdGFsUGFnZXNcbiAgICB9XG4gIH0sIGZ1bmN0aW9uIChsb25nUGFnZVN0cmluZykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb25CdXR0b24uc2hvcnRQYWdlU3RyaW5nXCIsXG4gICAgICBkZWZhdWx0OiBcIlBhZ2Uge3BhZ2V9XCIsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgcGFnZTogcGFnZU51bWJlclxuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChzaG9ydFBhZ2VTdHJpbmcpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkVtcHR5LCBfZXh0ZW5kcyh7XG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiB0b3RhbFBhZ2VzID8gbG9uZ1BhZ2VTdHJpbmcgOiBzaG9ydFBhZ2VTdHJpbmdcbiAgICAgIH0sIHByb3BzKSwgcGFnZU51bWJlcik7XG4gICAgfSk7XG4gIH0pO1xufTtcbkV1aVBhZ2luYXRpb25CdXR0b24ucHJvcFR5cGVzID0ge1xuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogQW55IG9mIHRoZSBuYW1lZCBjb2xvciBwYWxldHRlIG9wdGlvbnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG4gIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cbiAgZmx1c2g6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHlwZTogUHJvcFR5cGVzLmFueSxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFt1bmRlZmluZWRdKV0pLFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQvY2hpbGRyZW4gb25seSAobm90IGljb24pXG4gICAgICpcbiAgICAgKiBUaGlzIHNwYW4gd3JhcHBlciBjYW4gYmUgcmVtb3ZlZCBieSBwYXNzaW5nIGB0ZXh0UHJvcHM9e2ZhbHNlfWAuXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBpc0FjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gIHBhZ2VJbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICB0b3RhbFBhZ2VzOiBQcm9wVHlwZXMubnVtYmVyXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgdmFyIGV1aVBhZ2luYXRpb25CdXR0b25TdHlsZXMgPSBmdW5jdGlvbiBldWlQYWdpbmF0aW9uQnV0dG9uU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVBhZ2luYXRpb25CdXR0b246IC8qI19fUFVSRV9fKi9jc3MoXCJvdXRsaW5lLW9mZnNldDotXCIsIGV1aVRoZW1lLmZvY3VzLndpZHRoLCBcIjs7bGFiZWw6ZXVpUGFnaW5hdGlvbkJ1dHRvbjtcIiksXG4gICAgLy8gU3RhdGVzXG4gICAgaXNBY3RpdmU6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQuYm9sZCwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCBcIjsmLCY6aG92ZXJ7Y3Vyc29yOmRlZmF1bHQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9O2xhYmVsOmlzQWN0aXZlO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbl9pY29uJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVBhZ2luYXRpb25CdXR0b25TdHlsZXMgfSBmcm9tICcuL3BhZ2luYXRpb25fYnV0dG9uLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHR5cGVUb0ljb25UeXBlTWFwID0ge1xuICBmaXJzdDogJ2Fycm93U3RhcnQnLFxuICBwcmV2aW91czogJ2Fycm93TGVmdCcsXG4gIG5leHQ6ICdhcnJvd1JpZ2h0JyxcbiAgbGFzdDogJ2Fycm93RW5kJ1xufTtcbmV4cG9ydCB2YXIgVFlQRVMgPSBrZXlzT2YodHlwZVRvSWNvblR5cGVNYXApO1xuZXhwb3J0IHZhciBFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cgPSBmdW5jdGlvbiBFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3coX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgdHlwZSA9IF9yZWYudHlwZSxcbiAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgYXJpYUNvbnRyb2xzID0gX3JlZi5hcmlhQ29udHJvbHMsXG4gICAgb25DbGljayA9IF9yZWYub25DbGljaztcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVBhZ2luYXRpb25CdXR0b25TdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgbGFiZWxzID0ge1xuICAgIGZpcnN0OiB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cuZmlyc3RQYWdlJywgJ0ZpcnN0IHBhZ2UnKSxcbiAgICBwcmV2aW91czogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LnByZXZpb3VzUGFnZScsICdQcmV2aW91cyBwYWdlJyksXG4gICAgbmV4dDogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93Lm5leHRQYWdlJywgJ05leHQgcGFnZScpLFxuICAgIGxhc3Q6IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5sYXN0UGFnZScsICdMYXN0IHBhZ2UnKVxuICB9O1xuICB2YXIgYnV0dG9uUHJvcHMgPSB7fTtcbiAgaWYgKGFyaWFDb250cm9scyAmJiAhZGlzYWJsZWQpIHtcbiAgICBidXR0b25Qcm9wcy5ocmVmID0gXCIjXCIuY29uY2F0KGFyaWFDb250cm9scyk7XG4gICAgYnV0dG9uUHJvcHNbJ2FyaWEtY29udHJvbHMnXSA9IGFyaWFDb250cm9scztcbiAgfVxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCdXR0b25JY29uLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBzdHlsZXMuZXVpUGFnaW5hdGlvbkJ1dHRvbixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aVBhZ2luYXRpb25BcnJvd0J1dHRvbicsIGNsYXNzTmFtZSksXG4gICAgY29sb3I6IFwidGV4dFwiLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBsYWJlbHNbdHlwZV0sXG4gICAgdGl0bGU6IGRpc2FibGVkID8gdW5kZWZpbmVkIDogbGFiZWxzW3R5cGVdLFxuICAgIGlzRGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInBhZ2luYXRpb24tYnV0dG9uLVwiLmNvbmNhdCh0eXBlKSxcbiAgICBpY29uVHlwZTogdHlwZVRvSWNvblR5cGVNYXBbdHlwZV1cbiAgfSwgYnV0dG9uUHJvcHMpKTtcbn07XG5FdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cucHJvcFR5cGVzID0ge1xuICB0eXBlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgYXJpYUNvbnRyb2xzOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrLCBldWlTY3JvbGxCYXJTdHlsZXMsIGV1aUZvbnRTaXplIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWRiZDJyYy1ldWlQYWdpbmF0aW9uX19saXN0XCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7bGFiZWw6ZXVpUGFnaW5hdGlvbl9fbGlzdDtcIlxufSA6IHtcbiAgbmFtZTogXCIxZGJkMnJjLWV1aVBhZ2luYXRpb25fX2xpc3RcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTtsYWJlbDpldWlQYWdpbmF0aW9uX19saXN0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVBhZ2luYXRpb25TdHlsZXMgPSBmdW5jdGlvbiBldWlQYWdpbmF0aW9uU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVBhZ2luYXRpb246IC8qI19fUFVSRV9fKi9jc3MoZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCksIFwiIGRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7XCIsIGxvZ2ljYWxDU1NXaXRoRmFsbGJhY2soJ292ZXJmbG93LXknLCAnaGlkZGVuJyksIFwiIFwiLCBsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrKCdvdmVyZmxvdy14JywgJ2F1dG8nKSwgXCI7O2xhYmVsOmV1aVBhZ2luYXRpb247XCIpLFxuICAgIC8vIEVsZW1lbnRzXG4gICAgZXVpUGFnaW5hdGlvbl9fY29tcHJlc3NlZFRleHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtsaW5lLWhlaWdodDoxOz5zcGFue1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4taG9yaXpvbnRhbCcsIGV1aVRoZW1lLnNpemUucyksIFwiIGZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodC5zZW1pQm9sZCwgXCI7JjpmaXJzdC1vZi10eXBle2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMucHJpbWFyeVRleHQsIFwiO319O2xhYmVsOmV1aVBhZ2luYXRpb25fX2NvbXByZXNzZWRUZXh0O1wiKSxcbiAgICBldWlQYWdpbmF0aW9uX19saXN0OiBfcmVmLFxuICAgIGV1aVBhZ2luYXRpb25fX2VsbGlwc2lzOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZFRleHQsIFwiO2ZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLmZvbnRTaXplLCBcIjtcIiwgbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS5zKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGV1aVRoZW1lLnNpemUubCksIFwiOztsYWJlbDpldWlQYWdpbmF0aW9uX19lbGxpcHNpcztcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbXBvbmVudERlZmF1bHRzIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXIvY29tcG9uZW50X2RlZmF1bHRzJztcbi8qKlxuICogVGFibGUgcGFnaW5hdGlvbiBwcm9wIGRlZmF1bHRzIGxpdmUgaW4gYSBzZXBhcmF0ZSBmaWxlIGJlY2F1c2VcbiAqIHRoZXknbGwgYmUgcmV1c2VkIGJ5IGJhc2ljIHRhYmxlcyBhbmQgZGF0YWdyaWRzIGFzIGZhbGxiYWNrc1xuICovXG5cbmV4cG9ydCB2YXIgZXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMgPSB7XG4gIGl0ZW1zUGVyUGFnZTogMTAsXG4gIGl0ZW1zUGVyUGFnZU9wdGlvbnM6IFsxMCwgMjUsIDUwXSxcbiAgc2hvd1BlclBhZ2VPcHRpb25zOiB0cnVlXG59O1xuZXhwb3J0IHZhciB1c2VFdWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cyA9IGZ1bmN0aW9uIHVzZUV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzKCkge1xuICB2YXIgY29uc3VtZXJEZWZhdWx0cyA9IHVzZUNvbXBvbmVudERlZmF1bHRzKCkuRXVpVGFibGVQYWdpbmF0aW9uO1xuICByZXR1cm4gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMpLCBjb25zdW1lckRlZmF1bHRzKTtcbiAgfSwgW2NvbnN1bWVyRGVmYXVsdHNdKTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJhbGlnblwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic3R5bGVcIiwgXCJjb21wcmVzc2VkXCIsIFwiZGVzY3JpcHRpb25Qcm9wc1wiLCBcImxpc3RJdGVtc1wiLCBcInRleHRTdHlsZVwiLCBcInRpdGxlUHJvcHNcIiwgXCJ0eXBlXCIsIFwicm93R3V0dGVyU2l6ZVwiLCBcImNvbHVtbkd1dHRlclNpemVcIiwgXCJjb2x1bW5XaWR0aHNcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzLCB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpRGVzY3JpcHRpb25MaXN0Q29udGV4dCB9IGZyb20gJy4vZGVzY3JpcHRpb25fbGlzdF9jb250ZXh0JztcbmltcG9ydCB7IEV1aURlc2NyaXB0aW9uTGlzdFRpdGxlIH0gZnJvbSAnLi9kZXNjcmlwdGlvbl9saXN0X3RpdGxlJztcbmltcG9ydCB7IEV1aURlc2NyaXB0aW9uTGlzdERlc2NyaXB0aW9uIH0gZnJvbSAnLi9kZXNjcmlwdGlvbl9saXN0X2Rlc2NyaXB0aW9uJztcbmltcG9ydCB7IGV1aURlc2NyaXB0aW9uTGlzdFN0eWxlcyB9IGZyb20gJy4vZGVzY3JpcHRpb25fbGlzdC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRGVzY3JpcHRpb25MaXN0ID0gZnVuY3Rpb24gRXVpRGVzY3JpcHRpb25MaXN0KF9yZWYpIHtcbiAgdmFyIF9yZWYkYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgIGFsaWduID0gX3JlZiRhbGlnbiA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZiRhbGlnbixcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIF9yZWYkY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICBjb21wcmVzc2VkID0gX3JlZiRjb21wcmVzc2VkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY29tcHJlc3NlZCxcbiAgICBkZXNjcmlwdGlvblByb3BzID0gX3JlZi5kZXNjcmlwdGlvblByb3BzLFxuICAgIGxpc3RJdGVtcyA9IF9yZWYubGlzdEl0ZW1zLFxuICAgIF9yZWYkdGV4dFN0eWxlID0gX3JlZi50ZXh0U3R5bGUsXG4gICAgdGV4dFN0eWxlID0gX3JlZiR0ZXh0U3R5bGUgPT09IHZvaWQgMCA/ICdub3JtYWwnIDogX3JlZiR0ZXh0U3R5bGUsXG4gICAgdGl0bGVQcm9wcyA9IF9yZWYudGl0bGVQcm9wcyxcbiAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgX3R5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdyb3cnIDogX3JlZiR0eXBlLFxuICAgIF9yZWYkcm93R3V0dGVyU2l6ZSA9IF9yZWYucm93R3V0dGVyU2l6ZSxcbiAgICByb3dHdXR0ZXJTaXplID0gX3JlZiRyb3dHdXR0ZXJTaXplID09PSB2b2lkIDAgPyAncycgOiBfcmVmJHJvd0d1dHRlclNpemUsXG4gICAgX3JlZiRjb2x1bW5HdXR0ZXJTaXplID0gX3JlZi5jb2x1bW5HdXR0ZXJTaXplLFxuICAgIGNvbHVtbkd1dHRlclNpemUgPSBfcmVmJGNvbHVtbkd1dHRlclNpemUgPT09IHZvaWQgMCA/ICdzJyA6IF9yZWYkY29sdW1uR3V0dGVyU2l6ZSxcbiAgICBjb2x1bW5XaWR0aHMgPSBfcmVmLmNvbHVtbldpZHRocyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzaG93UmVzcG9uc2l2ZUNvbHVtbnMgPSB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzKFsneHMnLCAncyddKTtcbiAgdmFyIHR5cGUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoX3R5cGUgPT09ICdyZXNwb25zaXZlQ29sdW1uJykge1xuICAgICAgcmV0dXJuIHNob3dSZXNwb25zaXZlQ29sdW1ucyA/ICdyb3cnIDogJ2NvbHVtbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBfdHlwZTtcbiAgICB9XG4gIH0sIFtfdHlwZSwgc2hvd1Jlc3BvbnNpdmVDb2x1bW5zXSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlEZXNjcmlwdGlvbkxpc3RTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlEZXNjcmlwdGlvbkxpc3QsIHN0eWxlc1t0eXBlXSwgc3R5bGVzW2FsaWduXSwgdHlwZSA9PT0gJ2NvbHVtbicgJiYgc3R5bGVzLnJvd0dhcFtyb3dHdXR0ZXJTaXplXSwgdHlwZSA9PT0gJ2NvbHVtbicgJiYgc3R5bGVzLmNvbHVtbkdhcFtjb2x1bW5HdXR0ZXJTaXplXV07XG4gIHZhciBpbmxpbmVTdHlsZXMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2NvbHVtbicgJiYgY29sdW1uV2lkdGhzKSB7XG4gICAgICAvLyBMZWF2ZSBzdHJpbmcgdmFsdWVzIGFzIGlzIC0gZS5nLiBpZiBhIGNvbnN1bWVyIHBhc3NlcyBpbiBhIHNwZWNpZmljICcyMDBweCcgb3IgJ21pbm1heCgpJ1xuICAgICAgdmFyIGNvbnZlcnROdW1iZXJzVG9GciA9IGZ1bmN0aW9uIGNvbnZlcnROdW1iZXJzVG9Gcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IFwiXCIuY29uY2F0KHZhbHVlLCBcImZyXCIpIDogdmFsdWU7XG4gICAgICB9O1xuICAgICAgdmFyIHRpdGxlV2lkdGggPSBjb252ZXJ0TnVtYmVyc1RvRnIoY29sdW1uV2lkdGhzWzBdKTtcbiAgICAgIHZhciBkZXNjcmlwdGlvbldpZHRoID0gY29udmVydE51bWJlcnNUb0ZyKGNvbHVtbldpZHRoc1sxXSk7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwiXCIuY29uY2F0KHRpdGxlV2lkdGgsIFwiIFwiKS5jb25jYXQoZGVzY3JpcHRpb25XaWR0aClcbiAgICAgIH0sIHN0eWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9LCBbc3R5bGUsIHR5cGUsIGNvbHVtbldpZHRoc10pO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aURlc2NyaXB0aW9uTGlzdCcsIGNsYXNzTmFtZSk7XG4gIHZhciByZW5kZXJlZExpc3RJdGVtcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmIChsaXN0SXRlbXMpIHtcbiAgICAgIHJldHVybiBsaXN0SXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gW19fX0Vtb3Rpb25KU1goRXVpRGVzY3JpcHRpb25MaXN0VGl0bGUsIF9leHRlbmRzKHtcbiAgICAgICAgICBrZXk6IFwidGl0bGUtXCIuY29uY2F0KGluZGV4KVxuICAgICAgICB9LCB0aXRsZVByb3BzKSwgaXRlbS50aXRsZSksIF9fX0Vtb3Rpb25KU1goRXVpRGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb24sIF9leHRlbmRzKHtcbiAgICAgICAgICBrZXk6IFwiZGVzY3JpcHRpb24tXCIuY29uY2F0KGluZGV4KVxuICAgICAgICB9LCBkZXNjcmlwdGlvblByb3BzKSwgaXRlbS5kZXNjcmlwdGlvbildO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbbGlzdEl0ZW1zLCBkZXNjcmlwdGlvblByb3BzLCB0aXRsZVByb3BzXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aURlc2NyaXB0aW9uTGlzdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZToge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICB0ZXh0U3R5bGU6IHRleHRTdHlsZSxcbiAgICAgIGFsaWduOiBhbGlnbixcbiAgICAgIHJvd0d1dHRlclNpemU6IHJvd0d1dHRlclNpemVcbiAgICB9XG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJkbFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIHN0eWxlOiBpbmxpbmVTdHlsZXNcbiAgfSwgcmVzdCwge1xuICAgIFwiZGF0YS10eXBlXCI6IF90eXBlXG4gIH0pLCBsaXN0SXRlbXMgPyByZW5kZXJlZExpc3RJdGVtcyA6IGNoaWxkcmVuKSk7XG59O1xuRXVpRGVzY3JpcHRpb25MaXN0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGxpc3RJdGVtczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICB0aXRsZTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRcbiAgfSkuaXNSZXF1aXJlZCksXG4gIC8qKlxuICAgICAqIFRleHQgYWxpZ25tZW50XG4gICAgICovXG4gIGFsaWduOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBTbWFsbGVyIHRleHQgYW5kIGNvbmRlbnNlZCBzcGFjaW5nXG4gICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBIb3cgc2hvdWxkIHRoZSBjb250ZW50IGJlIHN0eWxlZCwgYnkgZGVmYXVsdFxuICAgICAqIHRoaXMgd2lsbCBlbXBoYXNpemUgdGhlIHRpdGxlXG4gICAgICovXG4gIHRleHRTdHlsZTogUHJvcFR5cGVzLm9uZU9mKFtcIm5vcm1hbFwiLCBcInJldmVyc2VcIl0pLFxuICAvKipcbiAgICAgKiBIb3cgZWFjaCBpdGVtIHNob3VsZCBiZSBsYWlkIG91dFxuICAgICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBQcm9wcyBvYmplY3QgdG8gYmUgcGFzc2VkIHRvIGBFdWlEZXNjcmlwdGlvbkxpc3RUaXRsZWBcbiAgICAgKi9cbiAgdGl0bGVQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgLyoqXG4gICAgICogUHJvcHMgb2JqZWN0IHRvIGJlIHBhc3NlZCB0byBgRXVpRGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb25gXG4gICAgICovXG4gIGRlc2NyaXB0aW9uUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIC8qKlxuICAgICAqIEFsbG93cyBjdXN0b21pemluZyB0aGUgdmVydGljYWwgc3BhY2luZyBiZXR3ZWVuIHJvd3MuXG4gICAgICovXG4gIHJvd0d1dHRlclNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFsbG93cyBjdXN0b21pemluZyB0aGUgaG9yaXpvbnRhbCBzcGFjaW5nIGJldHdlZW4gY29sdW1ucy5cbiAgICAgKlxuICAgICAqIE9ubHkgYXBwbGllcyB0byBgY29sdW1uYCBhbmQgYHJlc3BvbnNpdmVDb2x1bW5gIHR5cGVzLlxuICAgICAqL1xuICBjb2x1bW5HdXR0ZXJTaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBbGxvd3MgY3VzdG9taXppbmcgc3BlY2lmaWMgY29sdW1uIHdpZHRocyAoZS5nLiBgWycxMDBweCcsICcyMDBweCddYCkuIFRoZSBmaXJzdFxuICAgICAqIGFycmF5IHZhbHVlIGFwcGxpZXMgdG8gdGhlIHRpdGxlIGNvbHVtbiwgYW5kIHRoZSBzZWNvbmQgYXBwbGllcyB0byB0aGUgZGVzY3JpcHRpb24gY29sdW1uLlxuICAgICAqXG4gICAgICogUGFzc2luZyBudW1iZXJzIGluc3RlYWQgb2YgQ1NTIHdpZHRoIHN0cmluZ3Mgd2lsbCB1c2UgYSByYXRpbyBvZiB3aWR0aHMuXG4gICAgICogRm9yIGV4YW1wbGUsIFsxLCAzXSB3aWxsIHJlbmRlciBhIGRlc2NyaXB0aW9uIGNvbHVtbiAzeCB0aGUgd2lkdGggb2YgdGhlIHRpdGxlIGNvbHVtbi5cbiAgICAgKiBJbiBvdGhlciB3b3JkcywgZGVzY3JpcHRpb25zIHdpbGwgaGF2ZSBhIHdpZHRoIG9mIGA3NSVgIGFuZCB0aXRsZXMgd2lsbCBoYXZlIGEgd2lkdGggb2YgYDI1JWAuXG4gICAgICpcbiAgICAgKiBPbmx5IGFwcGxpZXMgdG8gYGNvbHVtbmAgYW5kIGByZXNwb25zaXZlQ29sdW1uYCB0eXBlcy5cbiAgICAgKlxuICAgICAqIF9BZHZhbmNlZCB1c2FnZSBub3RlOl8gY29sdW1uIHdpZHRoIHN0cmluZ3MgYWxzbyBhY2NlcHQgW0NTUyBncmlkIHNwZWNpYWwgdW5pdHMsXG4gICAgICogc2l6aW5nLCBrZXl3b3JkcywgYW5kIHNpemluZyBmdW5jdGlvbnNdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL2NvbXBsZXRlLWd1aWRlLWdyaWQvI2FhLXNwZWNpYWwtdW5pdHMtZnVuY3Rpb25zKS5cbiAgICAgKi9cbiAgY29sdW1uV2lkdGhzOiBQcm9wVHlwZXMuYW55XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBjb250ZXh0RGVmYXVsdHMgPSB7XG4gIHR5cGU6ICdyb3cnLFxuICB0ZXh0U3R5bGU6ICdub3JtYWwnLFxuICBhbGlnbjogJ2xlZnQnLFxuICByb3dHdXR0ZXJTaXplOiAncydcbn07XG5leHBvcnQgdmFyIEV1aURlc2NyaXB0aW9uTGlzdENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChjb250ZXh0RGVmYXVsdHMpOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlEZXNjcmlwdGlvbkxpc3RDb250ZXh0IH0gZnJvbSAnLi9kZXNjcmlwdGlvbl9saXN0X2NvbnRleHQnO1xuaW1wb3J0IHsgZXVpRGVzY3JpcHRpb25MaXN0VGl0bGVTdHlsZXMgfSBmcm9tICcuL2Rlc2NyaXB0aW9uX2xpc3RfdGl0bGUuc3R5bGVzJztcblxuLy8gRXhwb3J0IHJlcXVpcmVkIGZvciBjb3JyZWN0IGluZmVyZW5jZSBieSBIT0NzXG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlEZXNjcmlwdGlvbkxpc3RUaXRsZSA9IGZ1bmN0aW9uIEV1aURlc2NyaXB0aW9uTGlzdFRpdGxlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfdXNlQ29udGV4dCA9IHVzZUNvbnRleHQoRXVpRGVzY3JpcHRpb25MaXN0Q29udGV4dCksXG4gICAgdHlwZSA9IF91c2VDb250ZXh0LnR5cGUsXG4gICAgdGV4dFN0eWxlID0gX3VzZUNvbnRleHQudGV4dFN0eWxlLFxuICAgIGNvbXByZXNzZWQgPSBfdXNlQ29udGV4dC5jb21wcmVzc2VkLFxuICAgIGFsaWduID0gX3VzZUNvbnRleHQuYWxpZ24sXG4gICAgcm93R3V0dGVyU2l6ZSA9IF91c2VDb250ZXh0LnJvd0d1dHRlclNpemU7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlEZXNjcmlwdGlvbkxpc3RUaXRsZVN0eWxlcyk7XG4gIHZhciBjb25kaXRpb25hbFN0eWxlcyA9IGNvbXByZXNzZWQgJiYgdGV4dFN0eWxlICE9PSAncmV2ZXJzZScgPyBbc3R5bGVzLmZvbnRTdHlsZXMuY29tcHJlc3NlZF0gOiBbc3R5bGVzLmZvbnRTdHlsZXNbdGV4dFN0eWxlXV07XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2lubGluZSc6XG4gICAgICBjb25kaXRpb25hbFN0eWxlcyA9IGNvbXByZXNzZWQgPyBbc3R5bGVzLmlubGluZVN0eWxlcy5jb21wcmVzc2VkXSA6IFtzdHlsZXMuaW5saW5lU3R5bGVzLm5vcm1hbF07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyb3cnOlxuICAgICAgY29uZGl0aW9uYWxTdHlsZXMucHVzaChzdHlsZXNbcm93R3V0dGVyU2l6ZV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uJzpcbiAgICAgIGlmIChhbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgY29uZGl0aW9uYWxTdHlsZXMucHVzaChzdHlsZXMucmlnaHQpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRGVzY3JpcHRpb25MaXN0X190aXRsZSwgc3R5bGVzW3R5cGVdXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNvbmRpdGlvbmFsU3R5bGVzKSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRGVzY3JpcHRpb25MaXN0X190aXRsZScsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZHRcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aURlc2NyaXB0aW9uTGlzdFRpdGxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvbnRTaXplLCBldWlUZXh0QnJlYWtXb3JkLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpVGl0bGUgfSBmcm9tICcuLi90aXRsZS90aXRsZS5zdHlsZXMnO1xuZXhwb3J0IHZhciBldWlEZXNjcmlwdGlvbkxpc3RUaXRsZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aURlc2NyaXB0aW9uTGlzdFRpdGxlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcbiAgcmV0dXJuIHtcbiAgICBldWlEZXNjcmlwdGlvbkxpc3RfX3RpdGxlOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHRCcmVha1dvcmQoKSwgXCI7O2xhYmVsOmV1aURlc2NyaXB0aW9uTGlzdF9fdGl0bGU7XCIpLFxuICAgIC8vIFR5cGVzXG4gICAgcm93OiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOnJvdztcIiksXG4gICAgY29sdW1uOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmNvbHVtbjtcIiksXG4gICAgaW5saW5lOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTppbmxpbmU7Ym9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCwgXCI7Zm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0Lm1lZGl1bSwgXCI7YmFja2dyb3VuZC1jb2xvcjpcIiwgY29sb3JNb2RlID09PSAnREFSSycgPyBldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSA6IGV1aVRoZW1lLmNvbG9ycy5saWdodGVzdFNoYWRlLCBcIjtcIiwgbG9naWNhbENTUygnbWFyZ2luLXZlcnRpY2FsJywgJzAnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiIFwiLCBjb2xvck1vZGUgPT09ICdEQVJLJyAmJiBcImNvbG9yOiBcIi5jb25jYXQoZXVpVGhlbWUuY29sb3JzLnRpdGxlLCBcIjtcIiksIFwiJjpmaXJzdC1vZi10eXBle1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tbGVmdCcsICcwJyksIFwiO307bGFiZWw6aW5saW5lO1wiKSxcbiAgICAvLyBUaGlzIG5lc3RlZCBibG9jayBoYW5kbGVzIGp1c3QgdGhlIGZvbnQgc3R5bGluZyBiYXNlZCBvbiBjb21wcmVzc2VkIGFuZCByZXZlcnNlXG4gICAgZm9udFN0eWxlczoge1xuICAgICAgbm9ybWFsOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiOztsYWJlbDpub3JtYWw7XCIpLFxuICAgICAgcmV2ZXJzZTogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiOztsYWJlbDpyZXZlcnNlO1wiKSxcbiAgICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJyksIFwiOztsYWJlbDpjb21wcmVzc2VkO1wiKVxuICAgIH0sXG4gICAgLy8gSW5saW5lIHR5cGVzXG4gICAgaW5saW5lU3R5bGVzOiB7XG4gICAgICBub3JtYWw6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIiBcIiwgbG9naWNhbENTUygncGFkZGluZy12ZXJ0aWNhbCcsICcxcHgnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIjs7bGFiZWw6bm9ybWFsO1wiKSxcbiAgICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJykuZm9udFNpemUsIFwiO2xpbmUtaGVpZ2h0OlwiLCBldWlUaGVtZS5mb250LmxpbmVIZWlnaHRNdWx0aXBsaWVyLCBcIjtcIiwgbG9naWNhbENTUygncGFkZGluZy12ZXJ0aWNhbCcsICcwJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7O2xhYmVsOmNvbXByZXNzZWQ7XCIpXG4gICAgfSxcbiAgICAvLyBBbGlnbm1lbnRcbiAgICByaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdyaWdodCcpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpLFxuICAgIC8vIEd1dHRlclxuICAgIC8vIEFkZCBtYXJnaW4gb25seSB0byB0aGUgbm9uLWZpcnN0IDxkdD4uXG4gICAgczogLyojX19QVVJFX18qL2NzcyhcIiY6bm90KDpmaXJzdC1vZi10eXBlKXtcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGV1aVRoZW1lLnNpemUucyksIFwiO307bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhcIiY6bm90KDpmaXJzdC1vZi10eXBlKXtcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGV1aVRoZW1lLnNpemUuYmFzZSksIFwiO307bGFiZWw6bTtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aURlc2NyaXB0aW9uTGlzdENvbnRleHQgfSBmcm9tICcuL2Rlc2NyaXB0aW9uX2xpc3RfY29udGV4dCc7XG5pbXBvcnQgeyBldWlEZXNjcmlwdGlvbkxpc3REZXNjcmlwdGlvblN0eWxlcyB9IGZyb20gJy4vZGVzY3JpcHRpb25fbGlzdF9kZXNjcmlwdGlvbi5zdHlsZXMnO1xuXG4vLyBFeHBvcnQgcmVxdWlyZWQgZm9yIGNvcnJlY3QgaW5mZXJlbmNlIGJ5IEhPQ3NcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aURlc2NyaXB0aW9uTGlzdERlc2NyaXB0aW9uID0gZnVuY3Rpb24gRXVpRGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb24oX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIF91c2VDb250ZXh0ID0gdXNlQ29udGV4dChFdWlEZXNjcmlwdGlvbkxpc3RDb250ZXh0KSxcbiAgICB0eXBlID0gX3VzZUNvbnRleHQudHlwZSxcbiAgICB0ZXh0U3R5bGUgPSBfdXNlQ29udGV4dC50ZXh0U3R5bGUsXG4gICAgY29tcHJlc3NlZCA9IF91c2VDb250ZXh0LmNvbXByZXNzZWQsXG4gICAgYWxpZ24gPSBfdXNlQ29udGV4dC5hbGlnbjtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aURlc2NyaXB0aW9uTGlzdERlc2NyaXB0aW9uU3R5bGVzKTtcbiAgdmFyIGNvbmRpdGlvbmFsU3R5bGVzID0gY29tcHJlc3NlZCAmJiB0ZXh0U3R5bGUgPT09ICdyZXZlcnNlJyA/IFtzdHlsZXMuZm9udFN0eWxlcy5jb21wcmVzc2VkXSA6IFtzdHlsZXMuZm9udFN0eWxlc1t0ZXh0U3R5bGVdXTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnaW5saW5lJzpcbiAgICAgIGNvbmRpdGlvbmFsU3R5bGVzID0gY29tcHJlc3NlZCA/IFtzdHlsZXMuaW5saW5lU3R5bGVzLmNvbXByZXNzZWRdIDogW3N0eWxlcy5pbmxpbmVTdHlsZXMubm9ybWFsXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbic6XG4gICAgICBpZiAoYWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIGNvbmRpdGlvbmFsU3R5bGVzLnB1c2goc3R5bGVzLmxlZnQpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRGVzY3JpcHRpb25MaXN0X19kZXNjcmlwdGlvbiwgc3R5bGVzW3R5cGVdXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNvbmRpdGlvbmFsU3R5bGVzKSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRGVzY3JpcHRpb25MaXN0X19kZXNjcmlwdGlvbicsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGRcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aURlc2NyaXB0aW9uTGlzdERlc2NyaXB0aW9uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvbnRTaXplLCBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpVGl0bGUgfSBmcm9tICcuLi90aXRsZS90aXRsZS5zdHlsZXMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXluOWdpZy1pbmxpbmVcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6aW5saW5lO2xhYmVsOmlubGluZTtcIlxufSA6IHtcbiAgbmFtZTogXCIxeW45Z2lnLWlubGluZVwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmU7bGFiZWw6aW5saW5lO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aURlc2NyaXB0aW9uTGlzdERlc2NyaXB0aW9uU3R5bGVzID0gZnVuY3Rpb24gZXVpRGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb25TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiB7XG4gICAgZXVpRGVzY3JpcHRpb25MaXN0X19kZXNjcmlwdGlvbjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlEZXNjcmlwdGlvbkxpc3RfX2Rlc2NyaXB0aW9uO1wiKSxcbiAgICAvLyBUeXBlc1xuICAgIHJvdzogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpyb3c7XCIpLFxuICAgIGNvbHVtbjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpjb2x1bW47XCIpLFxuICAgIGlubGluZTogX3JlZixcbiAgICAvLyBUaGlzIG5lc3RlZCBibG9jayBoYW5kbGVzIGp1c3QgdGhlIGZvbnQgc3R5bGluZyBiYXNlZCBvbiBjb21wcmVzc2VkIGFuZCByZXZlcnNlXG4gICAgZm9udFN0eWxlczoge1xuICAgICAgbm9ybWFsOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7O2xhYmVsOm5vcm1hbDtcIiksXG4gICAgICByZXZlcnNlOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiOztsYWJlbDpyZXZlcnNlO1wiKSxcbiAgICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJyksIFwiOztsYWJlbDpjb21wcmVzc2VkO1wiKVxuICAgIH0sXG4gICAgLy8gTmVzdGVkIGlubGluZSBzdHlsZXMgZm9yIHR5cGUgYW5kIGZvbnRcbiAgICBpbmxpbmVTdHlsZXM6IHtcbiAgICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnKSwgXCI7O2xhYmVsOmNvbXByZXNzZWQ7XCIpLFxuICAgICAgbm9ybWFsOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7O2xhYmVsOm5vcm1hbDtcIilcbiAgICB9LFxuICAgIC8vIENvbHVtbiB0eXBlcyBzaG91bGQgYWxpZ24gZGVzY3JpcHRpb24gdGV4dCB0byB0aGUgbGVmdCB3aGVuIEV1aURlY3JpcHRpb25MaXN0IGlzIGNlbnRlcmVkXG4gICAgbGVmdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiOztsYWJlbDpsZWZ0O1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbFRleHRBbGlnbkNTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInpyNWZoYy1jb2x1bW5cIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KGF1dG8sIG1heC1jb250ZW50KSBtaW5tYXgoYXV0bywgbWF4LWNvbnRlbnQpO2FsaWduLWl0ZW1zOmJhc2VsaW5lO2xhYmVsOmNvbHVtbjtcIlxufSA6IHtcbiAgbmFtZTogXCJ6cjVmaGMtY29sdW1uXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heChhdXRvLCBtYXgtY29udGVudCkgbWlubWF4KGF1dG8sIG1heC1jb250ZW50KTthbGlnbi1pdGVtczpiYXNlbGluZTtsYWJlbDpjb2x1bW47XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpRGVzY3JpcHRpb25MaXN0U3R5bGVzID0gZnVuY3Rpb24gZXVpRGVzY3JpcHRpb25MaXN0U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4ge1xuICAgIGV1aURlc2NyaXB0aW9uTGlzdDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlEZXNjcmlwdGlvbkxpc3Q7XCIpLFxuICAgIC8vIFR5cGVzXG4gICAgcm93OiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOnJvdztcIiksXG4gICAgaW5saW5lOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmlubGluZTtcIiksXG4gICAgY29sdW1uOiBfcmVmLFxuICAgIGNvbHVtbkdhcDoge1xuICAgICAgczogLyojX19QVVJFX18qL2NzcyhcImNvbHVtbi1nYXA6XCIsIGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJjb2x1bW4tZ2FwOlwiLCBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOm07XCIpXG4gICAgfSxcbiAgICByb3dHYXA6IHtcbiAgICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJyb3ctZ2FwOlwiLCBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6cztcIiksXG4gICAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwicm93LWdhcDpcIiwgZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLnNpemUubSwgXCI7O2xhYmVsOm07XCIpXG4gICAgfSxcbiAgICAvLyBBbGlnbm1lbnRcbiAgICBjZW50ZXI6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiOztsYWJlbDpjZW50ZXI7XCIpLFxuICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIjs7bGFiZWw6bGVmdDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJpc1NlbGVjdGVkXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGV1aVRhYlN0eWxlcywgZXVpVGFiQ29udGVudFN0eWxlcyB9IGZyb20gJy4vdGFiLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlUYWJzQ29udGV4dCB9IGZyb20gJy4vdGFic19jb250ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYiA9IGZ1bmN0aW9uIEV1aVRhYihfcmVmKSB7XG4gIHZhciBpc1NlbGVjdGVkID0gX3JlZi5pc1NlbGVjdGVkLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgcmVsID0gX3JlZi5yZWwsXG4gICAgcHJlcGVuZCA9IF9yZWYucHJlcGVuZCxcbiAgICBhcHBlbmQgPSBfcmVmLmFwcGVuZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfdXNlQ29udGV4dCA9IHVzZUNvbnRleHQoRXVpVGFic0NvbnRleHQpLFxuICAgIHNpemUgPSBfdXNlQ29udGV4dC5zaXplLFxuICAgIGV4cGFuZCA9IF91c2VDb250ZXh0LmV4cGFuZDtcbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgZGlzYWJsZWQgPSBfZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuXG4gIC8vIEtlZXAgQ1NTIGNsYXNzbmFtZXMgZm9yIHJlZmVyZW5jZVxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYicsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWItaXNTZWxlY3RlZCc6IGlzU2VsZWN0ZWRcbiAgfSk7XG4gIHZhciB0YWJTdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJTdHlsZXMpO1xuICB2YXIgY3NzVGFiU3R5bGVzID0gW3RhYlN0eWxlcy5ldWlUYWIsIGV4cGFuZCAmJiB0YWJTdHlsZXMuZXhwYW5kZWQsIGRpc2FibGVkICYmIHRhYlN0eWxlcy5kaXNhYmxlZC5kaXNhYmxlZCwgaXNTZWxlY3RlZCAmJiAoZGlzYWJsZWQgPyB0YWJTdHlsZXMuZGlzYWJsZWQuc2VsZWN0ZWQgOiB0YWJTdHlsZXMuc2VsZWN0ZWQpXTtcbiAgdmFyIHRhYkNvbnRlbnRTdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJDb250ZW50U3R5bGVzKTtcbiAgdmFyIGNzc1RhYkNvbnRlbnRTdHlsZXMgPSBbdGFiQ29udGVudFN0eWxlcy5ldWlUYWJfX2NvbnRlbnQsIHNpemUgJiYgdGFiQ29udGVudFN0eWxlc1tzaXplXV07XG4gIHZhciBwcmVwZW5kTm9kZSA9IHByZXBlbmQgJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX3ByZXBlbmRcIlxuICB9LCBwcmVwZW5kKTtcbiAgdmFyIGFwcGVuZE5vZGUgPSBhcHBlbmQgJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX2FwcGVuZFwiXG4gIH0sIGFwcGVuZCk7XG5cbiAgLy8gIDxhPiBlbGVtZW50cyBkb24ndCByZXNwZWN0IHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZS4gU28gaWYgd2UncmUgZGlzYWJsZWQsIHdlJ2xsIGp1c3QgcHJldGVuZFxuICAvLyAgdGhpcyBpcyBhIGJ1dHRvbiBhbmQgcGlnZ3liYWNrIG9mZiBpdHMgZGlzYWJsZWQgc3R5bGVzLlxuICBpZiAoaHJlZiAmJiAhZGlzYWJsZWQpIHtcbiAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICAgIHJvbGU6IFwidGFiXCIsXG4gICAgICBcImFyaWEtc2VsZWN0ZWRcIjogISFpc1NlbGVjdGVkLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY3NzOiBjc3NUYWJTdHlsZXMsXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHNlY3VyZVJlbFxuICAgIH0sIHJlc3QpLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVRhYl9fY29udGVudCBldWktdGV4dFRydW5jYXRlXCIsXG4gICAgICBjc3M6IGNzc1RhYkNvbnRlbnRTdHlsZXNcbiAgICB9LCBjaGlsZHJlbiksIGFwcGVuZE5vZGUpO1xuICB9XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcInRhYlwiLFxuICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAhIWlzU2VsZWN0ZWQsXG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NUYWJTdHlsZXMsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gIH0sIHJlc3QpLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX2NvbnRlbnQgZXVpLXRleHRUcnVuY2F0ZVwiLFxuICAgIGNzczogY3NzVGFiQ29udGVudFN0eWxlc1xuICB9LCBjaGlsZHJlbiksIGFwcGVuZE5vZGUpO1xufTtcbkV1aVRhYi5wcm9wVHlwZXMgPSB7XG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFBsYWNlcyBjb250ZW50IGJlZm9yZSB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICovXG4gIC8qKlxuICAgICAqIFBsYWNlcyBjb250ZW50IGJlZm9yZSB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICovXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBQbGFjZXMgY29udGVudCBhZnRlciB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICovXG4gIC8qKlxuICAgICAqIFBsYWNlcyBjb250ZW50IGFmdGVyIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBtYXRoV2l0aFVuaXRzLCBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjEwdHNvNzgtZXhwYW5kZWRcIixcbiAgc3R5bGVzOiBcImZsZXgtYmFzaXM6MCU7ZmxleC1ncm93OjE7anVzdGlmeS1jb250ZW50OmNlbnRlcjtsYWJlbDpleHBhbmRlZDtcIlxufSA6IHtcbiAgbmFtZTogXCIxMHRzbzc4LWV4cGFuZGVkXCIsXG4gIHN0eWxlczogXCJmbGV4LWJhc2lzOjAlO2ZsZXgtZ3JvdzoxO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGFiZWw6ZXhwYW5kZWQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpVGFiU3R5bGVzID0gZnVuY3Rpb24gZXVpVGFiU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVRhYjogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6ZmxleDtjdXJzb3I6cG9pbnRlcjtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjtcIiwgbG9naWNhbENTUygncGFkZGluZy12ZXJ0aWNhbCcsIDApLCBcIiBcIiwgbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiZm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0LnNlbWlCb2xkLCBcIjtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRpdGxlLCBcIjsmOmZvY3Vze291dGxpbmUtb2Zmc2V0Oi1cIiwgZXVpVGhlbWUuZm9jdXMud2lkdGgsIFwiO307bGFiZWw6ZXVpVGFiO1wiKSxcbiAgICAvLyB2YXJpYXRpb25zXG4gICAgZXhwYW5kZWQ6IF9yZWYsXG4gICAgc2VsZWN0ZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJib3gtc2hhZG93Omluc2V0IDAgLVwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpY2ssIFwiIDAgXCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCBcIjtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnlUZXh0LCBcIjs7bGFiZWw6c2VsZWN0ZWQ7XCIpLFxuICAgIGRpc2FibGVkOiB7XG4gICAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2NzcyhcImN1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRpc2FibGVkVGV4dCwgXCI7O2xhYmVsOmRpc2FibGVkO1wiKSxcbiAgICAgIHNlbGVjdGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiYm94LXNoYWRvdzppbnNldCAwIC1cIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaWNrLCBcIiAwIFwiLCBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0LCBcIjs7bGFiZWw6c2VsZWN0ZWQ7XCIpXG4gICAgfVxuICB9O1xufTtcbmV4cG9ydCB2YXIgZXVpVGFiQ29udGVudFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRhYkNvbnRlbnRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUYWJfX2NvbnRlbnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHRbZXVpVGhlbWUuZm9udC50aXRsZS53ZWlnaHRdLCBcIjs7bGFiZWw6ZXVpVGFiX19jb250ZW50O1wiKSxcbiAgICAvLyBzaXplc1xuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJykuZm9udFNpemUsIFwiO2xpbmUtaGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplLnhsLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhcImZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLmZvbnRTaXplLCBcIjtsaW5lLWhlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC1zaXplOlwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdtJykuZm9udFNpemUsIFwiO2xpbmUtaGVpZ2h0OlwiLCBtYXRoV2l0aFVuaXRzKFtldWlUaGVtZS5zaXplLnhsLCBldWlUaGVtZS5zaXplLnNdLCBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgcmV0dXJuIHggKyB5O1xuICAgIH0pLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ2wnKS5mb250U2l6ZSwgXCI7bGluZS1oZWlnaHQ6XCIsIG1hdGhXaXRoVW5pdHMoW2V1aVRoZW1lLnNpemUueHh4bCwgZXVpVGhlbWUuc2l6ZS5zXSwgZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ICsgeTtcbiAgICB9KSwgXCI7O2xhYmVsOnhsO1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgY29udGV4dERlZmF1bHRzID0ge1xuICBleHBhbmQ6IGZhbHNlLFxuICBzaXplOiAnbSdcbn07XG5leHBvcnQgdmFyIEV1aVRhYnNDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoY29udGV4dERlZmF1bHRzKTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYm90dG9tQm9yZGVyXCIsIFwiZXhwYW5kXCIsIFwic2l6ZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpVGFic1N0eWxlcyB9IGZyb20gJy4vdGFicy5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpVGFic0NvbnRleHQgfSBmcm9tICcuL3RhYnNfY29udGV4dCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsncycsICdtJywgJ2wnLCAneGwnXTtcbmV4cG9ydCB2YXIgRXVpVGFicyA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJGJvdHRvbUJvcmRlciA9IF9yZWYuYm90dG9tQm9yZGVyLFxuICAgIGJvdHRvbUJvcmRlciA9IF9yZWYkYm90dG9tQm9yZGVyID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRib3R0b21Cb3JkZXIsXG4gICAgX3JlZiRleHBhbmQgPSBfcmVmLmV4cGFuZCxcbiAgICBleHBhbmQgPSBfcmVmJGV4cGFuZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGV4cGFuZCxcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJzJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRhYnNTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUYWJzLCBzdHlsZXNbc2l6ZV0sIGJvdHRvbUJvcmRlciAmJiBzdHlsZXMuYm90dG9tQm9yZGVyXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCBjaGlsZHJlbiAmJiB7XG4gICAgcm9sZTogJ3RhYmxpc3QnXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aVRhYnNDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHtcbiAgICAgIGV4cGFuZDogZXhwYW5kLFxuICAgICAgc2l6ZTogc2l6ZVxuICAgIH1cbiAgfSwgY2hpbGRyZW4pKTtcbn0pO1xuRXVpVGFicy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgICAqIEV2ZW5seSBzdHJldGNoZXMgZWFjaCB0YWIgdG8gZmlsbCB0aGVcbiAgICAgICAqIGhvcml6b250YWwgc3BhY2VcbiAgICAgICAqL1xuICBleHBhbmQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIEFkZHMgYSBib3R0b20gYm9yZGVyIHRvIHNlcGFyYXRlIGl0IGZyb20gdGhlIGNvbnRlbnQgYWZ0ZXJcbiAgICAgICAqL1xuICBib3R0b21Cb3JkZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIFNpemVzIGFmZmVjdCBib3RoIGZvbnQgc2l6ZSBhbmQgb3ZlcmFsbCBzaXplLlxuICAgICAgICogT25seSB1c2UgdGhlIGB4bGAgc2l6ZSB3aGVuIGRpc3BsYXllZCBhcyBwYWdlIHRpdGxlcy5cbiAgICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55XG59O1xuRXVpVGFicy5kaXNwbGF5TmFtZSA9ICdFdWlUYWJzJzsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbENTU1dpdGhGYWxsYmFjayB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpVGFic1N0eWxlcyA9IGZ1bmN0aW9uIGV1aVRhYnNTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUYWJzOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTpmbGV4O1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIiBcIiwgbG9naWNhbENTU1dpdGhGYWxsYmFjaygnb3ZlcmZsb3cteCcsICdhdXRvJyksIFwiIFwiLCBsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrKCdvdmVyZmxvdy15JywgJ2hpZGRlbicpLCBcIiBwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4LXNocmluazowOztsYWJlbDpldWlUYWJzO1wiKSxcbiAgICBib3R0b21Cb3JkZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJib3gtc2hhZG93Omluc2V0IDAgLVwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgMCBcIiwgZXVpVGhlbWUuYm9yZGVyLmNvbG9yLCBcIjs7bGFiZWw6Ym90dG9tQm9yZGVyO1wiKSxcbiAgICAvLyBzaXplc1xuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIGV1aVRoZW1lLnNpemUubSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIGV1aVRoZW1lLnNpemUubCwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLnhsLCBcIjs7bGFiZWw6eGw7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZXhwYW5kXCIsIFwiaW5pdGlhbFNlbGVjdGVkVGFiXCIsIFwib25UYWJDbGlja1wiLCBcInNlbGVjdGVkVGFiXCIsIFwic2l6ZVwiLCBcInRhYnNcIiwgXCJhdXRvRm9jdXNcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJpZFwiLCBcIm5hbWVcIiwgXCJjb250ZW50XCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjcmVhdGVSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlUYWJzIH0gZnJvbSAnLi4vdGFicyc7XG5pbXBvcnQgeyBFdWlUYWIgfSBmcm9tICcuLi90YWInO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbi8qKlxuICogTWFya2VkIGFzIGNvbnN0IHNvIHR5cGUgaXMgYFsnaW5pdGlhbCcsICdzZWxlY3RlZCddYCBpbnN0ZWFkIG9mIGBzdHJpbmdbXWBcbiAqL1xuZXhwb3J0IHZhciBBVVRPRk9DVVMgPSBbJ2luaXRpYWwnLCAnc2VsZWN0ZWQnXTtcbmV4cG9ydCB2YXIgRXVpVGFiYmVkQ29udGVudCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlUYWJiZWRDb250ZW50KHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlUYWJiZWRDb250ZW50KTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpVGFiYmVkQ29udGVudCwgW3Byb3BzXSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJvb3RJZFwiLCBodG1sSWRHZW5lcmF0b3IoKSgpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidGFic1JlZlwiLCAvKiNfX1BVUkVfXyovY3JlYXRlUmVmKCkpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJmb2N1c1RhYlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGFyZ2V0VGFiID0gX3RoaXMudGFic1JlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCIjXCIuY29uY2F0KF90aGlzLnN0YXRlLnNlbGVjdGVkVGFiSWQpKTtcbiAgICAgIHRhcmdldFRhYi5mb2N1cygpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpbml0aWFsaXplRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pbkZvY3VzICYmIF90aGlzLnByb3BzLmF1dG9Gb2N1cyA9PT0gJ3NlbGVjdGVkJykge1xuICAgICAgICAvLyBNdXN0IHdhaXQgZm9yIHNldFN0YXRlIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyBgLmZvY3VzKClgXG4gICAgICAgIC8vIGFzIHRoZSBmb2N1cyBjYWxsIHRyaWdnZXJzIGEgYmx1ciBvbiB0aGUgZmlyc3QgdGFiXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpbkZvY3VzOiB0cnVlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5mb2N1c1RhYigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVtb3ZlRm9jdXNcIiwgZnVuY3Rpb24gKGJsdXJFdmVudCkge1xuICAgICAgLy8gb25seSBzZXQgaW5Gb2N1cyB0byBmYWxzZSBpZiB0aGUgd3JhcHBpbmcgZGl2IGRvZXNuJ3QgY29udGFpbiB0aGUgbm93LWZvY3VzaW5nIGVsZW1lbnRcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gYmx1ckV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IGJsdXJFdmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgICAgaWYgKGN1cnJlbnRUYXJnZXQuY29udGFpbnMocmVsYXRlZFRhcmdldCkgPT09IGZhbHNlKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpbkZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25UYWJDbGlja1wiLCBmdW5jdGlvbiAoc2VsZWN0ZWRUYWIpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICBvblRhYkNsaWNrID0gX3RoaXMkcHJvcHMub25UYWJDbGljayxcbiAgICAgICAgZXh0ZXJuYWxTZWxlY3RlZFRhYiA9IF90aGlzJHByb3BzLnNlbGVjdGVkVGFiO1xuICAgICAgaWYgKG9uVGFiQ2xpY2spIHtcbiAgICAgICAgb25UYWJDbGljayhzZWxlY3RlZFRhYik7XG4gICAgICB9XG5cbiAgICAgIC8vIE9ubHkgdHJhY2sgc2VsZWN0aW9uIHN0YXRlIGlmIGl0J3Mgbm90IGNvbnRyb2xsZWQgZXh0ZXJuYWxseS5cbiAgICAgIGlmICghZXh0ZXJuYWxTZWxlY3RlZFRhYikge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc2VsZWN0ZWRUYWJJZDogc2VsZWN0ZWRUYWIuaWRcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLmZvY3VzVGFiKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBpbml0aWFsU2VsZWN0ZWRUYWIgPSBwcm9wcy5pbml0aWFsU2VsZWN0ZWRUYWIsXG4gICAgICBfc2VsZWN0ZWRUYWIgPSBwcm9wcy5zZWxlY3RlZFRhYixcbiAgICAgIHRhYnMgPSBwcm9wcy50YWJzO1xuXG4gICAgLy8gT25seSB0cmFjayBzZWxlY3Rpb24gc3RhdGUgaWYgaXQncyBub3QgY29udHJvbGxlZCBleHRlcm5hbGx5LlxuICAgIHZhciBzZWxlY3RlZFRhYklkO1xuICAgIGlmICghX3NlbGVjdGVkVGFiKSB7XG4gICAgICBzZWxlY3RlZFRhYklkID0gKGluaXRpYWxTZWxlY3RlZFRhYiA9PT0gbnVsbCB8fCBpbml0aWFsU2VsZWN0ZWRUYWIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGluaXRpYWxTZWxlY3RlZFRhYi5pZCkgfHwgdGFic1swXS5pZDtcbiAgICB9XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzZWxlY3RlZFRhYklkOiBzZWxlY3RlZFRhYklkLFxuICAgICAgaW5Gb2N1czogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpVGFiYmVkQ29udGVudCwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpVGFiYmVkQ29udGVudCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgIGV4cGFuZCA9IF90aGlzJHByb3BzMi5leHBhbmQsXG4gICAgICAgIGluaXRpYWxTZWxlY3RlZFRhYiA9IF90aGlzJHByb3BzMi5pbml0aWFsU2VsZWN0ZWRUYWIsXG4gICAgICAgIG9uVGFiQ2xpY2sgPSBfdGhpcyRwcm9wczIub25UYWJDbGljayxcbiAgICAgICAgZXh0ZXJuYWxTZWxlY3RlZFRhYiA9IF90aGlzJHByb3BzMi5zZWxlY3RlZFRhYixcbiAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzMi5zaXplLFxuICAgICAgICB0YWJzID0gX3RoaXMkcHJvcHMyLnRhYnMsXG4gICAgICAgIGF1dG9Gb2N1cyA9IF90aGlzJHByb3BzMi5hdXRvRm9jdXMsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuXG4gICAgICAvLyBBbGxvdyB0aGUgY29uc3VtZXIgdG8gY29udHJvbCB0YWIgc2VsZWN0aW9uLlxuICAgICAgdmFyIHNlbGVjdGVkVGFiID0gZXh0ZXJuYWxTZWxlY3RlZFRhYiB8fCB0YWJzLmZpbmQoZnVuY3Rpb24gKHRhYikge1xuICAgICAgICByZXR1cm4gdGFiLmlkID09PSBfdGhpczIuc3RhdGUuc2VsZWN0ZWRUYWJJZDtcbiAgICAgIH0pIHx8IHRhYnNbMF07IC8vIEZhbGwgYmFjayB0byB0aGUgZmlyc3QgdGFiIGlmIGEgc2VsZWN0ZWQgdGFiIGNhbid0IGJlIGZvdW5kXG5cbiAgICAgIHZhciBzZWxlY3RlZFRhYkNvbnRlbnQgPSBzZWxlY3RlZFRhYi5jb250ZW50LFxuICAgICAgICBzZWxlY3RlZFRhYklkID0gc2VsZWN0ZWRUYWIuaWQ7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlUYWJzLCB7XG4gICAgICAgIHJlZjogdGhpcy50YWJzUmVmLFxuICAgICAgICBleHBhbmQ6IGV4cGFuZCxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgICAgb25Gb2N1czogdGhpcy5pbml0aWFsaXplRm9jdXMsXG4gICAgICAgIG9uQmx1cjogdGhpcy5yZW1vdmVGb2N1c1xuICAgICAgfSwgdGFicy5tYXAoZnVuY3Rpb24gKHRhYikge1xuICAgICAgICB2YXIgaWQgPSB0YWIuaWQsXG4gICAgICAgICAgbmFtZSA9IHRhYi5uYW1lLFxuICAgICAgICAgIGNvbnRlbnQgPSB0YWIuY29udGVudCxcbiAgICAgICAgICB0YWJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyh0YWIsIF9leGNsdWRlZDIpO1xuICAgICAgICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIGtleTogaWQsXG4gICAgICAgICAgaWQ6IGlkXG4gICAgICAgIH0sIHRhYlByb3BzKSwge30sIHtcbiAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5vblRhYkNsaWNrKHRhYik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpc1NlbGVjdGVkOiB0YWIgPT09IHNlbGVjdGVkVGFiLFxuICAgICAgICAgICdhcmlhLWNvbnRyb2xzJzogXCJcIi5jb25jYXQoX3RoaXMyLnJvb3RJZClcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYiwgcHJvcHMsIG5hbWUpO1xuICAgICAgfSkpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgcm9sZTogXCJ0YWJwYW5lbFwiLFxuICAgICAgICBpZDogXCJcIi5jb25jYXQodGhpcy5yb290SWQpLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBzZWxlY3RlZFRhYklkXG4gICAgICB9LCBzZWxlY3RlZFRhYkNvbnRlbnQpKTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlUYWJiZWRDb250ZW50LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGF1dG9Gb2N1czogJ2luaXRpYWwnXG59KTtcbkV1aVRhYmJlZENvbnRlbnQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBXaGVuIHRhYmJpbmcgaW50byB0aGUgdGFicywgc2V0IHRoZSBmb2N1cyBvbiBgaW5pdGlhbGAgZm9yIHRoZSBmaXJzdCB0YWIsXG4gICAgICAgKiBvciBgc2VsZWN0ZWRgIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRhYi4gQmVzdCB1c2UgY2FzZSBpcyBmb3IgaW5zaWRlIG9mXG4gICAgICAgKiBvdmVybGF5IGNvbnRlbnQgbGlrZSBwb3BvdmVycyBvciBmbHlvdXRzLlxuICAgICAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLm9uZU9mKFtcImluaXRpYWxcIiwgXCJzZWxlY3RlZFwiXSksXG4gIC8qKlxuICAgICAgICogRXZlbmx5IHN0cmV0Y2hlcyBlYWNoIHRhYiB0byBmaWxsIHRoZSBob3Jpem9udGFsIHNwYWNlXG4gICAgICAgKi9cbiAgZXhwYW5kOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBVc2UgdGhpcyBwcm9wIHRvIHNldCB0aGUgaW5pdGlhbGx5IHNlbGVjdGVkIHRhYiB3aGlsZSBsZXR0aW5nIHRoZSB0YWJiZWQgY29udGVudCBjb21wb25lbnRcbiAgICAgICAqIGNvbnRyb2wgc2VsZWN0aW9uIHN0YXRlIGludGVybmFsbHlcbiAgICAgICAqL1xuICBpbml0aWFsU2VsZWN0ZWRUYWI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogUGxhY2VzIGNvbnRlbnQgYmVmb3JlIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAgICovXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICAgKiBQbGFjZXMgY29udGVudCBhZnRlciB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgICAqL1xuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIG9uVGFiQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgICAqIFVzZSB0aGlzIHByb3AgaWYgeW91IHdhbnQgdG8gY29udHJvbCBzZWxlY3Rpb24gc3RhdGUgd2l0aGluIHRoZSBvd25lciBjb21wb25lbnRcbiAgICAgICAqL1xuICBzZWxlY3RlZFRhYjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgY29udGVudDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBFYWNoIHRhYiBuZWVkcyBpZCBhbmQgY29udGVudCBwcm9wZXJ0aWVzLCBzbyB3ZSBjYW4gYXNzb2NpYXRlIGl0IHdpdGggaXRzIHBhbmVsIGZvciBhY2Nlc3NpYmlsaXR5LlxuICAgICAgICogVGhlIG5hbWUgcHJvcGVydHkgKGEgbm9kZSkgaXMgYWxzbyByZXF1aXJlZCB0byBkaXNwbGF5IHRvIHRoZSB1c2VyLlxuICAgICAgICovXG4gIHRhYnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZFxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmV4cG9ydCB2YXIgRXVpRGVsYXlSZW5kZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpRGVsYXlSZW5kZXIocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aURlbGF5UmVuZGVyKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpRGVsYXlSZW5kZXIsIFtwcm9wc10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJkZWxheUlEXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRvQmVEZWxheWVkXCIsIHRydWUpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzdGFydERlbGF5aW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoX3RoaXMuZGVsYXlJRCk7XG4gICAgICBfdGhpcy50b0JlRGVsYXllZCA9IHRydWU7XG4gICAgICBfdGhpcy5kZWxheUlEID0gd2luZG93LnNldFRpbWVvdXQoX3RoaXMuc3RvcERlbGF5aW5nLCBfdGhpcy5wcm9wcy5kZWxheSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0b3BEZWxheWluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KF90aGlzLmRlbGF5SUQpO1xuICAgICAgX3RoaXMudG9CZURlbGF5ZWQgPSBmYWxzZTtcbiAgICAgIF90aGlzLnNob3VsZFVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgdG9nZ2xlOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlEZWxheVJlbmRlciwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpRGVsYXlSZW5kZXIsIFt7XG4gICAga2V5OiBcInNob3VsZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRVcGRhdGUoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciB0b2dnbGUgPSBfcmVmLnRvZ2dsZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b2dnbGU6ICF0b2dnbGVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuc3RhcnREZWxheWluZygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzaG91bGRDb21wb25lbnRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgICAgaWYgKHRoaXMudG9CZURlbGF5ZWQpIHtcbiAgICAgICAgdGhpcy5zdGFydERlbGF5aW5nKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLnN0b3BEZWxheWluZygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdGhpcy50b0JlRGVsYXllZCA9IHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gIXRoaXMudG9CZURlbGF5ZWQgPyB0aGlzLnByb3BzLmNoaWxkcmVuIDogbnVsbDtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlEZWxheVJlbmRlciwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBkZWxheTogNTAwXG59KTtcbkV1aURlbGF5UmVuZGVyLnByb3BUeXBlcyA9IHtcbiAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJ0ZXh0U2l6ZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlIZWFsdGhTdHlsZXMgfSBmcm9tICcuL2hlYWx0aC5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uL2ZsZXgnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgVEVYVF9TSVpFUyA9IFsneHMnLCAncycsICdtJywgJ2luaGVyaXQnXTtcbmV4cG9ydCB2YXIgRXVpSGVhbHRoID0gZnVuY3Rpb24gRXVpSGVhbHRoKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgX3JlZiR0ZXh0U2l6ZSA9IF9yZWYudGV4dFNpemUsXG4gICAgdGV4dFNpemUgPSBfcmVmJHRleHRTaXplID09PSB2b2lkIDAgPyAncycgOiBfcmVmJHRleHRTaXplLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUhlYWx0aFN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUhlYWx0aCwgc3R5bGVzW3RleHRTaXplXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSGVhbHRoJywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlGbGV4R3JvdXAsIHtcbiAgICBndXR0ZXJTaXplOiBcInhzXCIsXG4gICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICByZXNwb25zaXZlOiBmYWxzZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJkb3RcIixcbiAgICBjb2xvcjogY29sb3JcbiAgfSkpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgY2hpbGRyZW4pKSk7XG59O1xuRXVpSGVhbHRoLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIGRvdCBpY29uLlxuICAgICAgICogSXQgYWNjZXB0cyBhbnkgYEljb25Db2xvcmA6IGBkZWZhdWx0YCwgYHByaW1hcnlgLCBgc3VjY2Vzc2AsIGBhY2NlbnRgLCBgd2FybmluZ2AsIGBkYW5nZXJgLCBgdGV4dGAsXG4gICAgICAgKiBgc3ViZHVlZGAgb3IgYGdob3N0YDsgb3IgYW55IHZhbGlkIENTUyBjb2xvciB2YWx1ZSBhcyBhIGBzdHJpbmdgXG4gICAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogTWF0Y2hlcyB0aGUgdGV4dCBzY2FsZXMgb2YgRXVpVGV4dC5cbiAgICAgICAqIFRoZSBgaW5oZXJpdGAgc3R5bGUgd2lsbCBnZXQgaXRzIGZvbnQgc2l6ZSBmcm9tIHRoZSBwYXJlbnQgZWxlbWVudFxuICAgICAgICovXG4gIHRleHRTaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFxaG9qcmktaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiZm9udC1zaXplOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIlxufSA6IHtcbiAgbmFtZTogXCIxcWhvanJpLWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImZvbnQtc2l6ZTppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJqOHVoY2stZXVpSGVhbHRoXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmlubGluZS1ibG9jaztsYWJlbDpldWlIZWFsdGg7XCJcbn0gOiB7XG4gIG5hbWU6IFwiajh1aGNrLWV1aUhlYWx0aFwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7bGFiZWw6ZXVpSGVhbHRoO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUhlYWx0aFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUhlYWx0aFN0eWxlcyhldWlUaGVtZSkge1xuICByZXR1cm4ge1xuICAgIGV1aUhlYWx0aDogX3JlZjIsXG4gICAgLy8gVGV4dCBzaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lLCAneHMnKSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lLCAncycpLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZSwgJ20nKSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGluaGVyaXQ6IF9yZWZcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJhbHRcIiwgXCJ1cmxcIiwgXCJzcmNcIiwgXCJzaXplXCIsIFwiaGFzU2hhZG93XCIsIFwic3R5bGVcIiwgXCJ3cmFwcGVyUHJvcHNcIiwgXCJmdWxsU2NyZWVuSWNvbkNvbG9yXCIsIFwiYWxsb3dGdWxsU2NyZWVuXCIsIFwiY2FwdGlvblwiLCBcImZsb2F0XCIsIFwibWFyZ2luXCIsIFwib25GdWxsU2NyZWVuXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUltYWdlV3JhcHBlciB9IGZyb20gJy4vaW1hZ2Vfd3JhcHBlcic7XG5pbXBvcnQgeyBldWlJbWFnZVN0eWxlcyB9IGZyb20gJy4vaW1hZ2Uuc3R5bGVzJztcbmltcG9ydCB7IEV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIgfSBmcm9tICcuL2ltYWdlX2Z1bGxzY3JlZW5fd3JhcHBlcic7XG5pbXBvcnQgeyBTSVpFUyB9IGZyb20gJy4vaW1hZ2VfdHlwZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSW1hZ2UgPSBmdW5jdGlvbiBFdWlJbWFnZShfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBhbHQgPSBfcmVmLmFsdCxcbiAgICB1cmwgPSBfcmVmLnVybCxcbiAgICBzcmMgPSBfcmVmLnNyYyxcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ29yaWdpbmFsJyA6IF9yZWYkc2l6ZSxcbiAgICBoYXNTaGFkb3cgPSBfcmVmLmhhc1NoYWRvdyxcbiAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgd3JhcHBlclByb3BzID0gX3JlZi53cmFwcGVyUHJvcHMsXG4gICAgZnVsbFNjcmVlbkljb25Db2xvciA9IF9yZWYuZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICBhbGxvd0Z1bGxTY3JlZW4gPSBfcmVmLmFsbG93RnVsbFNjcmVlbixcbiAgICBjYXB0aW9uID0gX3JlZi5jYXB0aW9uLFxuICAgIGZsb2F0ID0gX3JlZi5mbG9hdCxcbiAgICBtYXJnaW4gPSBfcmVmLm1hcmdpbixcbiAgICBvbkZ1bGxTY3JlZW4gPSBfcmVmLm9uRnVsbFNjcmVlbixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgaXNGdWxsU2NyZWVuID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRJc0Z1bGxTY3JlZW4gPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgaXNOYW1lZFNpemUgPSB0eXBlb2Ygc2l6ZSA9PT0gJ3N0cmluZycgJiYgU0laRVMuaW5jbHVkZXMoc2l6ZSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSW1hZ2UnLCBjbGFzc05hbWUpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpSW1hZ2VTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZSwgaXNOYW1lZFNpemUgJiYgc3R5bGVzW3NpemVdLCAhaXNOYW1lZFNpemUgJiYgc3R5bGVzLmN1c3RvbVNpemUsIGhhc1NoYWRvdyAmJiBzdHlsZXMuaGFzU2hhZG93XTtcbiAgdmFyIGNzc0lzRnVsbFNjcmVlblN0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2UsIHN0eWxlcy5pc0Z1bGxTY3JlZW5dO1xuICB2YXIgaXNDdXN0b21TaXplID0gIWlzTmFtZWRTaXplICYmIHNpemUgIT09ICdvcmlnaW5hbCc7XG4gIHZhciBjdXN0b21TaXplID0gdHlwZW9mIHNpemUgPT09ICdzdHJpbmcnID8gc2l6ZSA6IFwiXCIuY29uY2F0KHNpemUsIFwicHhcIik7XG4gIHZhciBpbWFnZVN0eWxlV2l0aEN1c3RvbVNpemUgPSBpc0N1c3RvbVNpemUgPyBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKSwge30sIHtcbiAgICBtYXhXaWR0aDogY3VzdG9tU2l6ZSxcbiAgICBtYXhIZWlnaHQ6IGN1c3RvbVNpemVcbiAgfSkgOiBzdHlsZTtcbiAgdmFyIGlzRnVsbFdpZHRoID0gc2l6ZSA9PT0gJ2Z1bGxXaWR0aCc7XG4gIHZhciBjb21tb25XcmFwcGVyUHJvcHMgPSB7XG4gICAgaGFzU2hhZG93OiBoYXNTaGFkb3csXG4gICAgd3JhcHBlclByb3BzOiB3cmFwcGVyUHJvcHMsXG4gICAgc2V0SXNGdWxsU2NyZWVuOiBzZXRJc0Z1bGxTY3JlZW4sXG4gICAgZnVsbFNjcmVlbkljb25Db2xvcjogZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICBpc0Z1bGxXaWR0aDogaXNGdWxsV2lkdGgsXG4gICAgYWxsb3dGdWxsU2NyZWVuOiBhbGxvd0Z1bGxTY3JlZW4sXG4gICAgYWx0OiBhbHQsXG4gICAgY2FwdGlvbjogY2FwdGlvbixcbiAgICBmbG9hdDogZmxvYXQsXG4gICAgbWFyZ2luOiBtYXJnaW4sXG4gICAgb25GdWxsU2NyZWVuOiBvbkZ1bGxTY3JlZW5cbiAgfTtcbiAgdmFyIGNvbW1vbkltZ1Byb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHNyYzogc3JjIHx8IHVybFxuICB9LCByZXN0KTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VXcmFwcGVyLCBjb21tb25XcmFwcGVyUHJvcHMsIF9fX0Vtb3Rpb25KU1goXCJpbWdcIiwgX2V4dGVuZHMoe1xuICAgIGFsdDogYWx0LFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIHN0eWxlOiBpbWFnZVN0eWxlV2l0aEN1c3RvbVNpemVcbiAgfSwgY29tbW9uSW1nUHJvcHMpKSksIGFsbG93RnVsbFNjcmVlbiAmJiBpc0Z1bGxTY3JlZW4gJiYgX19fRW1vdGlvbkpTWChFdWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyLCBjb21tb25XcmFwcGVyUHJvcHMsIF9fX0Vtb3Rpb25KU1goXCJpbWdcIiwgX2V4dGVuZHMoe1xuICAgIGFsdDogYWx0LFxuICAgIGNzczogY3NzSXNGdWxsU2NyZWVuU3R5bGVzLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9LCBjb21tb25JbWdQcm9wcykpKSk7XG59O1xuRXVpSW1hZ2UucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBSZXF1aXJlcyBlaXRoZXIgYHNyY2Agb3IgYHVybGAgYnV0IGRlZmF1bHRzIHRvIHVzaW5nIGBzcmNgIGlmIGJvdGggYXJlIHByb3ZpZGVkXG4gICAgICAgKi9cbiAgc3JjOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB1cmw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAgICogQWx0IHRleHQgc2hvdWxkIGRlc2NyaWJlIHRoZSBpbWFnZSB0byBhaWQgc2NyZWVuIHJlYWRlciB1c2Vycy4gU2VlXG4gICAgICAgKiBodHRwczovL3dlYmFpbS5vcmcvdGVjaG5pcXVlcy9hbHR0ZXh0LyBmb3IgYSBndWlkZSBvbiB3cml0aW5nXG4gICAgICAgKiBlZmZlY3RpdmUgYWx0IHRleHQuXG4gICAgICAgKlxuICAgICAgICogSWYgbm8gbWVhbmluZ2Z1bCBkZXNjcmlwdGlvbiBleGlzdHMsIG9yIGlmIHRoZSBpbWFnZSBpcyBhZGVxdWF0ZWx5XG4gICAgICAgKiBkZXNjcmliZWQgYnkgdGhlIHN1cnJvdW5kaW5nIHRleHQsIHBhc3MgYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgICovXG4gIGFsdDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgICAqIFByb3ZpZGVzIGEgdmlzaWJsZSBjYXB0aW9uIHRvIHRoZSBpbWFnZVxuICAgICAgICovXG4gIGNhcHRpb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgICAqIEFjY2VwdHMgYHNgIC8gYG1gIC8gYGxgIC8gYHhsYCAvIGBvcmlnaW5hbGAgLyBgZnVsbFdpZHRoYCAvIG9yIGEgQ1NTIHNpemUgb2YgYG51bWJlcmAgb3IgYHN0cmluZ2AuXG4gICAgICAgKiBgZnVsbFdpZHRoYCB3aWxsIHNldCB0aGUgZmlndXJlIHRvIHN0cmV0Y2ggdG8gMTAwJSBvZiBpdHMgY29udGFpbmVyLlxuICAgICAgICogYHN0cmluZ2AgYW5kIGBudW1iZXJgIHR5cGVzIHdpbGwgbWF4IGJvdGggdGhlIHdpZHRoIG9yIGhlaWdodCwgd2hpY2hldmVyIGlzIGdyZWF0ZXIuXG4gICAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIEZsb2F0IHRoZSBpbWFnZSB0byB0aGUgbGVmdCBvciByaWdodC4gVXNlZnVsIGluIGxhcmdlIHRleHQgYmxvY2tzLlxuICAgICAgICovXG4gIGZsb2F0OiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIE1hcmdpbiBhcm91bmQgdGhlIGltYWdlLlxuICAgICAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAgKGRlZmF1bHQpIHdpbGwgYXBwbHkgYSBzbGlnaHQgc2hhZG93IHRvIHRoZSBpbWFnZVxuICAgICAgICovXG4gIGhhc1NoYWRvdzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogV2hlbiBzZXQgdG8gYHRydWVgIHdpbGwgbWFrZSB0aGUgaW1hZ2UgY2xpY2thYmxlIHRvIGEgbGFyZ2VyIHZlcnNpb25cbiAgICAgICAqL1xuICBhbGxvd0Z1bGxTY3JlZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIENhbGxiYWNrIHdoZW4gdGhlIGltYWdlIGlzIGNsaWNrZWQgYW5kIGBhbGxvd0Z1bGxTY3JlZW5gIGlzIGB0cnVlYFxuICAgICAgICovXG4gIG9uRnVsbFNjcmVlbjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAgICogQ2hhbmdlcyB0aGUgY29sb3Igb2YgdGhlIGljb24gdGhhdCBmbG9hdHMgYWJvdmUgdGhlIGltYWdlIHdoZW4gaXQgY2FuIGJlIGNsaWNrZWQgdG8gZnVsbHNjcmVlbi5cbiAgICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIGBsaWdodGAgaXMgZmluZSB1bmxlc3MgeW91ciBpbWFnZSBoYXMgYSB3aGl0ZSBiYWNrZ3JvdW5kLCBpbiB3aGljaCBjYXNlIHlvdSBzaG91bGQgY2hhbmdlIGl0IHRvIGBkYXJrYC5cbiAgICAgICAqL1xuICBmdWxsU2NyZWVuSWNvbkNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wibGlnaHRcIiwgXCJkYXJrXCJdKSxcbiAgLyoqXG4gICAgICAgKiBQcm9wcyB0byBhZGQgdG8gdGhlIHdyYXBwaW5nIGZpZ3VyZSBlbGVtZW50XG4gICAgICAgKi9cbiAgd3JhcHBlclByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pXG59OyIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VJbm5lclRleHQgfSBmcm9tICcuLi9pbm5lcl90ZXh0JztcbmltcG9ydCB7IGV1aUltYWdlV3JhcHBlclN0eWxlcyB9IGZyb20gJy4vaW1hZ2Vfd3JhcHBlci5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpSW1hZ2VCdXR0b24gfSBmcm9tICcuL2ltYWdlX2J1dHRvbic7XG5pbXBvcnQgeyBFdWlJbWFnZUNhcHRpb24gfSBmcm9tICcuL2ltYWdlX2NhcHRpb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSW1hZ2VXcmFwcGVyID0gZnVuY3Rpb24gRXVpSW1hZ2VXcmFwcGVyKF9yZWYpIHtcbiAgdmFyIGFsdCA9IF9yZWYuYWx0LFxuICAgIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgYWxsb3dGdWxsU2NyZWVuID0gX3JlZi5hbGxvd0Z1bGxTY3JlZW4sXG4gICAgZmxvYXQgPSBfcmVmLmZsb2F0LFxuICAgIG1hcmdpbiA9IF9yZWYubWFyZ2luLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBzZXRJc0Z1bGxTY3JlZW4gPSBfcmVmLnNldElzRnVsbFNjcmVlbixcbiAgICB3cmFwcGVyUHJvcHMgPSBfcmVmLndyYXBwZXJQcm9wcyxcbiAgICBmdWxsU2NyZWVuSWNvbkNvbG9yID0gX3JlZi5mdWxsU2NyZWVuSWNvbkNvbG9yLFxuICAgIGlzRnVsbFdpZHRoID0gX3JlZi5pc0Z1bGxXaWR0aCxcbiAgICBvbkZ1bGxTY3JlZW4gPSBfcmVmLm9uRnVsbFNjcmVlbjtcbiAgdmFyIG9wZW5GdWxsU2NyZWVuID0gZnVuY3Rpb24gb3BlbkZ1bGxTY3JlZW4oKSB7XG4gICAgc2V0SXNGdWxsU2NyZWVuKHRydWUpO1xuICAgIG9uRnVsbFNjcmVlbiA9PT0gbnVsbCB8fCBvbkZ1bGxTY3JlZW4gPT09IHZvaWQgMCB8fCBvbkZ1bGxTY3JlZW4odHJ1ZSk7XG4gIH07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSW1hZ2VXcmFwcGVyJywgd3JhcHBlclByb3BzICYmIHdyYXBwZXJQcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpSW1hZ2VXcmFwcGVyU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc0ZpZ3VyZVN0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2VXcmFwcGVyLCBmbG9hdCAmJiBzdHlsZXNbZmxvYXRdLCBtYXJnaW4gJiYgc3R5bGVzW21hcmdpbl0sIGFsbG93RnVsbFNjcmVlbiAmJiBzdHlsZXMuYWxsb3dGdWxsU2NyZWVuLCBpc0Z1bGxXaWR0aCAmJiBzdHlsZXMuZnVsbFdpZHRoLCB3cmFwcGVyUHJvcHMgPT09IG51bGwgfHwgd3JhcHBlclByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3cmFwcGVyUHJvcHMuY3NzXTtcbiAgdmFyIF91c2VJbm5lclRleHQgPSB1c2VJbm5lclRleHQoKSxcbiAgICBfdXNlSW5uZXJUZXh0MiA9IF9zbGljZWRUb0FycmF5KF91c2VJbm5lclRleHQsIDIpLFxuICAgIG9wdGlvbmFsQ2FwdGlvblJlZiA9IF91c2VJbm5lclRleHQyWzBdLFxuICAgIG9wdGlvbmFsQ2FwdGlvblRleHQgPSBfdXNlSW5uZXJUZXh0MlsxXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJmaWd1cmVcIiwgX2V4dGVuZHMoe1xuICAgIFwiYXJpYS1sYWJlbFwiOiBvcHRpb25hbENhcHRpb25UZXh0XG4gIH0sIHdyYXBwZXJQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc0ZpZ3VyZVN0eWxlc1xuICB9KSwgYWxsb3dGdWxsU2NyZWVuID8gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJbWFnZUJ1dHRvbiwge1xuICAgIGhhc0FsdDogISFhbHQsXG4gICAgaGFzU2hhZG93OiBoYXNTaGFkb3csXG4gICAgb25DbGljazogb3BlbkZ1bGxTY3JlZW4sXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImFjdGl2YXRlRnVsbFNjcmVlbkJ1dHRvblwiLFxuICAgIGlzRnVsbFdpZHRoOiBpc0Z1bGxXaWR0aCxcbiAgICBmdWxsU2NyZWVuSWNvbkNvbG9yOiBmdWxsU2NyZWVuSWNvbkNvbG9yXG4gIH0sIGNoaWxkcmVuKSkgOiBjaGlsZHJlbiwgX19fRW1vdGlvbkpTWChFdWlJbWFnZUNhcHRpb24sIHtcbiAgICByZWY6IG9wdGlvbmFsQ2FwdGlvblJlZixcbiAgICBjYXB0aW9uOiBjYXB0aW9uXG4gIH0pKTtcbn07XG5FdWlJbWFnZVdyYXBwZXIucHJvcFR5cGVzID0ge1xuICBpc0Z1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgc2V0SXNGdWxsU2NyZWVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlNaW5CcmVha3BvaW50LCBsb2dpY2FsQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBsb2dpY2FsU2lkZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImdhY25tYy1hbGxvd0Z1bGxTY3JlZW5cIixcbiAgc3R5bGVzOiBcIiY6aG92ZXIgW2NsYXNzKj0nZXVpSW1hZ2VDYXB0aW9uJ117dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9O2xhYmVsOmFsbG93RnVsbFNjcmVlbjtcIlxufSA6IHtcbiAgbmFtZTogXCJnYWNubWMtYWxsb3dGdWxsU2NyZWVuXCIsXG4gIHN0eWxlczogXCImOmhvdmVyIFtjbGFzcyo9J2V1aUltYWdlQ2FwdGlvbidde3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fTtsYWJlbDphbGxvd0Z1bGxTY3JlZW47XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpSW1hZ2VXcmFwcGVyU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VXcmFwcGVyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUltYWdlV3JhcHBlcjogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6aW5saW5lLWJsb2NrO1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIiBcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwibGluZS1oZWlnaHQ6MDtmbGV4LXNocmluazowOztsYWJlbDpldWlJbWFnZVdyYXBwZXI7XCIpLFxuICAgIGFsbG93RnVsbFNjcmVlbjogX3JlZixcbiAgICAvLyBNYXJnaW5zXG4gICAgczogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbjpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbjpcIiwgZXVpVGhlbWUuc2l6ZS5iYXNlLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbjpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW46XCIsIGV1aVRoZW1lLnNpemUueGwsIFwiOztsYWJlbDp4bDtcIiksXG4gICAgLy8gRmxvYXRzXG4gICAgLy8gMTogTG9naWNhbCBwcm9wZXJ0aWVzL3ZhbHVlcyBpbiBgZmxvYXRgIGlzIGN1cnJlbnRseSBub3QgeWV0IHN1cHBvcnRlZCBieSBhbGwgYnJvd3NlcnMgdy9vIGZsYWdzXG4gICAgLy8gQHNlZSBodHRwczovL2Nhbml1c2UuY29tL21kbi1jc3NfcHJvcGVydGllc19mbG9hdF9mbG93X3JlbGF0aXZlX3ZhbHVlcyBmb3Igd2hlbiB3ZSBjYW4gcmVtb3ZlIGxlZnQvcmlnaHQgZmFsbGJhY2tzXG4gICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhldWlNaW5CcmVha3BvaW50KGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCJ7ZmxvYXQ6bGVmdDtmbG9hdDpcIiwgbG9naWNhbFNpZGUubGVmdCwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgJzAnKSwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCAnMCcpLCBcIjt9O2xhYmVsOmxlZnQ7XCIpLFxuICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKGV1aU1pbkJyZWFrcG9pbnQoZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIntmbG9hdDpyaWdodDtmbG9hdDpcIiwgbG9naWNhbFNpZGUucmlnaHQsIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tcmlnaHQnLCAnMCcpLCBcIjtcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsICcwJyksIFwiO307bGFiZWw6cmlnaHQ7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJoYXNBbHRcIiwgXCJoYXNTaGFkb3dcIiwgXCJjaGlsZHJlblwiLCBcIm9uQ2xpY2tcIiwgXCJvbktleURvd25cIiwgXCJpc0Z1bGxTY3JlZW5cIiwgXCJpc0Z1bGxXaWR0aFwiLCBcImZ1bGxTY3JlZW5JY29uQ29sb3JcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGV1aUltYWdlQnV0dG9uU3R5bGVzLCBldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMgfSBmcm9tICcuL2ltYWdlX2J1dHRvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBmdWxsU2NyZWVuSWNvbkNvbG9yTWFwID0ge1xuICBsaWdodDogJ2dob3N0JyxcbiAgZGFyazogJ2RlZmF1bHQnXG59O1xuZXhwb3J0IHZhciBFdWlJbWFnZUJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUltYWdlQnV0dG9uKF9yZWYpIHtcbiAgdmFyIGhhc0FsdCA9IF9yZWYuaGFzQWx0LFxuICAgIGhhc1NoYWRvdyA9IF9yZWYuaGFzU2hhZG93LFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgIG9uS2V5RG93biA9IF9yZWYub25LZXlEb3duLFxuICAgIGlzRnVsbFNjcmVlbiA9IF9yZWYuaXNGdWxsU2NyZWVuLFxuICAgIGlzRnVsbFdpZHRoID0gX3JlZi5pc0Z1bGxXaWR0aCxcbiAgICBfcmVmJGZ1bGxTY3JlZW5JY29uQ28gPSBfcmVmLmZ1bGxTY3JlZW5JY29uQ29sb3IsXG4gICAgZnVsbFNjcmVlbkljb25Db2xvciA9IF9yZWYkZnVsbFNjcmVlbkljb25DbyA9PT0gdm9pZCAwID8gJ2xpZ2h0JyA6IF9yZWYkZnVsbFNjcmVlbkljb25DbyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBidXR0b25TdHlsZXMgPSBldWlJbWFnZUJ1dHRvblN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NCdXR0b25TdHlsZXMgPSBbYnV0dG9uU3R5bGVzLmV1aUltYWdlQnV0dG9uLCBoYXNTaGFkb3cgPyBidXR0b25TdHlsZXMuaGFzU2hhZG93SG92ZXIgOiBidXR0b25TdHlsZXMuc2hhZG93SG92ZXIsICFpc0Z1bGxTY3JlZW4gJiYgaXNGdWxsV2lkdGggJiYgYnV0dG9uU3R5bGVzLmZ1bGxXaWR0aF07XG4gIHZhciBpY29uU3R5bGVzID0gZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc0ljb25TdHlsZXMgPSBbaWNvblN0eWxlcy5ldWlJbWFnZUJ1dHRvbl9faWNvbiwgaWNvblN0eWxlcy5vcGVuRnVsbFNjcmVlbl07XG4gIHZhciBvcGVuRnVsbFNjcmVlbkluc3RydWN0aW9ucyA9IHVzZUV1aUkxOG4oJ2V1aUltYWdlQnV0dG9uLm9wZW5GdWxsU2NyZWVuJywgJ0NsaWNrIHRvIG9wZW4gdGhpcyBpbWFnZSBpbiBmdWxsc2NyZWVuIG1vZGUnKTtcbiAgdmFyIGNsb3NlRnVsbFNjcmVlbkluc3RydWN0aW9ucyA9IHVzZUV1aUkxOG4oJ2V1aUltYWdlQnV0dG9uLmNsb3NlRnVsbFNjcmVlbicsICdQcmVzcyBFc2NhcGUgb3IgY2xpY2sgdG8gY2xvc2UgaW1hZ2UgZnVsbHNjcmVlbiBtb2RlJyk7XG4gIHZhciBpY29uQ29sb3IgPSBmdWxsU2NyZWVuSWNvbkNvbG9yTWFwW2Z1bGxTY3JlZW5JY29uQ29sb3JdO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBjc3M6IGNzc0J1dHRvblN0eWxlcyxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uS2V5RG93bjogb25LZXlEb3duXG4gIH0sIHJlc3QpLCBpc0Z1bGxTY3JlZW4gJiZcbiAgLy8gSW4gZnVsbHNjcmVlbiBtb2RlLCBpbnN0cnVjdGlvbnMgc2hvdWxkIGNvbWUgZmlyc3QgdG8gYWxsb3cgc2NyZWVuIHJlYWRlclxuICAvLyB1c2VycyB0byBxdWlja2x5IGV4aXQgdnMuIHBvdGVudGlhbGx5IHJlYWRpbmcgb3V0IGxvbmcvdW5za2lwcGFibGUgYWx0IHRleHRcbiAgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBjbG9zZUZ1bGxTY3JlZW5JbnN0cnVjdGlvbnMsIGhhc0FsdCAmJiAnIFx1MjAxNCAnKSksIGNoaWxkcmVuLCAhaXNGdWxsU2NyZWVuICYmIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNzczogY3NzSWNvblN0eWxlc1xuICB9LCBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGhhc0FsdCAmJiAnIFx1MjAxNCAnLCBvcGVuRnVsbFNjcmVlbkluc3RydWN0aW9ucykpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICB0eXBlOiBcImZ1bGxTY3JlZW5cIixcbiAgICBjb2xvcjogaWNvbkNvbG9yXG4gIH0pKSkpO1xufTtcbkV1aUltYWdlQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgaGFzQWx0OiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuICBpc0Z1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaXNGdWxsU2NyZWVuOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9jdXNSaW5nLCBsb2dpY2FsQ1NTLCBldWlDYW5BbmltYXRlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpU2hhZG93IH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuZXhwb3J0IHZhciBldWlJbWFnZUJ1dHRvblN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlQnV0dG9uU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUltYWdlQnV0dG9uOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjptYXRjaC1wYXJlbnQ7bGluZS1oZWlnaHQ6MDsmOjpiZWZvcmV7b3BhY2l0eTowO2NvbnRlbnQ6Jyc7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO319Jjpob3ZlciwmOmZvY3VzeyY6OmJlZm9yZXtvcGFjaXR5OjE7fVtjbGFzcyo9J2V1aUltYWdlQnV0dG9uX19pY29uJ117b3BhY2l0eToxO319Jjpmb2N1c3tcIiwgZXVpRm9jdXNSaW5nKGV1aVRoZW1lQ29udGV4dCwgJ291dHNldCcpLCBcIjt9O2xhYmVsOmV1aUltYWdlQnV0dG9uO1wiKSxcbiAgICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKSxcbiAgICBzaGFkb3dIb3ZlcjogLyojX19QVVJFX18qL2NzcyhcIiY6OmJlZm9yZXtcIiwgZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7fTtsYWJlbDpzaGFkb3dIb3ZlcjtcIiksXG4gICAgaGFzU2hhZG93SG92ZXI6IC8qI19fUFVSRV9fKi9jc3MoXCImOjpiZWZvcmV7XCIsIGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdtJyksIFwiO307bGFiZWw6aGFzU2hhZG93SG92ZXI7XCIpXG4gIH07XG59O1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwieGo0ZHNhLWNsb3NlRnVsbFNjcmVlblwiLFxuICBzdHlsZXM6IFwicG9pbnRlci1ldmVudHM6bm9uZTtsYWJlbDpjbG9zZUZ1bGxTY3JlZW47XCJcbn0gOiB7XG4gIG5hbWU6IFwieGo0ZHNhLWNsb3NlRnVsbFNjcmVlblwiLFxuICBzdHlsZXM6IFwicG9pbnRlci1ldmVudHM6bm9uZTtsYWJlbDpjbG9zZUZ1bGxTY3JlZW47XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJbWFnZUJ1dHRvbl9faWNvbjogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCBldWlUaGVtZS5zaXplLmJhc2UpLCBcIiBcIiwgbG9naWNhbENTUygncmlnaHQnLCBldWlUaGVtZS5zaXplLmJhc2UpLCBcIjs7bGFiZWw6ZXVpSW1hZ2VCdXR0b25fX2ljb247XCIpLFxuICAgIG9wZW5GdWxsU2NyZWVuOiAvKiNfX1BVUkVfXyovY3NzKFwib3BhY2l0eTowO2N1cnNvcjpwb2ludGVyO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5zbG93LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO307bGFiZWw6b3BlbkZ1bGxTY3JlZW47XCIpLFxuICAgIGNsb3NlRnVsbFNjcmVlbjogX3JlZlxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUltYWdlQ2FwdGlvblN0eWxlcyB9IGZyb20gJy4vaW1hZ2VfY2FwdGlvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSW1hZ2VDYXB0aW9uID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2FwdGlvbiA9IF9yZWYuY2FwdGlvbixcbiAgICBfcmVmJGlzT25PdmVybGF5TWFzayA9IF9yZWYuaXNPbk92ZXJsYXlNYXNrLFxuICAgIGlzT25PdmVybGF5TWFzayA9IF9yZWYkaXNPbk92ZXJsYXlNYXNrID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaXNPbk92ZXJsYXlNYXNrO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpSW1hZ2VDYXB0aW9uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2VDYXB0aW9uLCBpc09uT3ZlcmxheU1hc2sgJiYgc3R5bGVzLmlzT25PdmVybGF5TWFza107XG4gIHJldHVybiBjYXB0aW9uID8gX19fRW1vdGlvbkpTWChcImZpZ2NhcHRpb25cIiwge1xuICAgIHJlZjogcmVmLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIGNhcHRpb24pIDogbnVsbDtcbn0pO1xuRXVpSW1hZ2VDYXB0aW9uLnByb3BUeXBlcyA9IHtcbiAgaXNPbk92ZXJsYXlNYXNrOiBQcm9wVHlwZXMuYm9vbFxufTtcbkV1aUltYWdlQ2FwdGlvbi5kaXNwbGF5TmFtZSA9ICdFdWlJbWFnZUNhcHRpb24nOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSwgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuZXhwb3J0IHZhciBldWlJbWFnZUNhcHRpb25TdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZUNhcHRpb25TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VDYXB0aW9uOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7O2xhYmVsOmV1aUltYWdlQ2FwdGlvbjtcIiksXG4gICAgaXNPbk92ZXJsYXlNYXNrOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7dGV4dC1zaGFkb3c6MCAxcHggMnB4IFwiLCB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMuaW5rLCAwLjYpLCBcIjtbY2xhc3MqPSdldWlMaW5rJ117Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7fTtsYWJlbDppc09uT3ZlcmxheU1hc2s7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpU2hhZG93IH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuZXhwb3J0IHZhciBldWlJbWFnZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4ge1xuICAgIGV1aUltYWdlOiAvKiNfX1BVUkVfXyovY3NzKFwidmVydGljYWwtYWxpZ246bWlkZGxlO1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIiAmLFtjbGFzcyo9J2V1aVRleHQnXSAme1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgMCksIFwiO307bGFiZWw6ZXVpSW1hZ2U7XCIpLFxuICAgIC8vIFZhcmlhdGlvbnNcbiAgICBpc0Z1bGxTY3JlZW46IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTtcIiwgbG9naWNhbENTUygnbWF4LWhlaWdodCcsICc4MHZoJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnODB2dycpLCBcIjs7bGFiZWw6aXNGdWxsU2NyZWVuO1wiKSxcbiAgICBoYXNTaGFkb3c6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7O2xhYmVsOmhhc1NoYWRvdztcIiksXG4gICAgLy8gU2l6ZXNcbiAgICAvLyBUaGVzZSBzaXplcyBhcmUgbW9zdGx5IHN1Z2dlc3Rpb25zLiBEb24ndCBsb29rIHRvbyBoYXJkIGZvciBtZWFuaW5nIGluIHRoZWlyIHZhbHVlcy5cbiAgICAvLyBTaXplIGlzIGFwcGxpZWQgdG8gdGhlIGltYWdlLCByYXRoZXIgdGhhbiB0aGUgd3JhcHBlciBmaWd1cmUgdG8gd29yayBiZXR0ZXIgd2l0aCBmbG9hdHNcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMHB4JyksIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzIwMHB4JyksIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzM2MHB4JyksIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICc2MDBweCcpLCBcIjs7bGFiZWw6eGw7XCIpLFxuICAgIG9yaWdpbmFsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJ2F1dG8nKSwgXCI7O2xhYmVsOm9yaWdpbmFsO1wiKSxcbiAgICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKSxcbiAgICBjdXN0b21TaXplOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJ2F1dG8nKSwgXCI7O2xhYmVsOmN1c3RvbVNpemU7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpRm9jdXNUcmFwIH0gZnJvbSAnLi4vZm9jdXNfdHJhcCc7XG5pbXBvcnQgeyBFdWlPdmVybGF5TWFzayB9IGZyb20gJy4uL292ZXJsYXlfbWFzayc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSwga2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsgZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlclN0eWxlcyB9IGZyb20gJy4vaW1hZ2VfZnVsbHNjcmVlbl93cmFwcGVyLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUJ1dHRvbiB9IGZyb20gJy4vaW1hZ2VfYnV0dG9uJztcbmltcG9ydCB7IGV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyB9IGZyb20gJy4vaW1hZ2VfYnV0dG9uLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUNhcHRpb24gfSBmcm9tICcuL2ltYWdlX2NhcHRpb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlciA9IGZ1bmN0aW9uIEV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIoX3JlZikge1xuICB2YXIgYWx0ID0gX3JlZi5hbHQsXG4gICAgaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgY2FwdGlvbiA9IF9yZWYuY2FwdGlvbixcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgc2V0SXNGdWxsU2NyZWVuID0gX3JlZi5zZXRJc0Z1bGxTY3JlZW4sXG4gICAgd3JhcHBlclByb3BzID0gX3JlZi53cmFwcGVyUHJvcHMsXG4gICAgaXNGdWxsV2lkdGggPSBfcmVmLmlzRnVsbFdpZHRoLFxuICAgIGZ1bGxTY3JlZW5JY29uQ29sb3IgPSBfcmVmLmZ1bGxTY3JlZW5JY29uQ29sb3IsXG4gICAgb25GdWxsU2NyZWVuID0gX3JlZi5vbkZ1bGxTY3JlZW47XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlciwgd3JhcHBlclByb3BzID09PSBudWxsIHx8IHdyYXBwZXJQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd3JhcHBlclByb3BzLmNzc107XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlcicsIHdyYXBwZXJQcm9wcyAmJiB3cmFwcGVyUHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIG9uS2V5RG93biA9IGZ1bmN0aW9uIG9uS2V5RG93bihldmVudCkge1xuICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuRVNDQVBFKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjbG9zZUZ1bGxTY3JlZW4oKTtcbiAgICB9XG4gIH07XG4gIHZhciBjbG9zZUZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBjbG9zZUZ1bGxTY3JlZW4oKSB7XG4gICAgc2V0SXNGdWxsU2NyZWVuKGZhbHNlKTtcbiAgICBvbkZ1bGxTY3JlZW4gPT09IG51bGwgfHwgb25GdWxsU2NyZWVuID09PSB2b2lkIDAgfHwgb25GdWxsU2NyZWVuKGZhbHNlKTtcbiAgfTtcbiAgdmFyIF91c2VJbm5lclRleHQgPSB1c2VJbm5lclRleHQoKSxcbiAgICBfdXNlSW5uZXJUZXh0MiA9IF9zbGljZWRUb0FycmF5KF91c2VJbm5lclRleHQsIDIpLFxuICAgIG9wdGlvbmFsQ2FwdGlvblJlZiA9IF91c2VJbm5lclRleHQyWzBdLFxuICAgIG9wdGlvbmFsQ2FwdGlvblRleHQgPSBfdXNlSW5uZXJUZXh0MlsxXTtcbiAgdmFyIGljb25TdHlsZXMgPSBldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzSWNvblN0eWxlcyA9IFtpY29uU3R5bGVzLmV1aUltYWdlQnV0dG9uX19pY29uLCBpY29uU3R5bGVzLmNsb3NlRnVsbFNjcmVlbl07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aU92ZXJsYXlNYXNrLCB7XG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImZ1bGxTY3JlZW5PdmVybGF5TWFza1wiXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpRm9jdXNUcmFwLCB7XG4gICAgc2Nyb2xsTG9jazogdHJ1ZSxcbiAgICBwcmV2ZW50U2Nyb2xsT25Gb2N1czogdHJ1ZSxcbiAgICBvbkNsaWNrT3V0c2lkZTogY2xvc2VGdWxsU2NyZWVuXG4gIH0sIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJmaWd1cmVcIiwgX2V4dGVuZHMoe1xuICAgIFwiYXJpYS1sYWJlbFwiOiBvcHRpb25hbENhcHRpb25UZXh0XG4gIH0sIHdyYXBwZXJQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9KSwgX19fRW1vdGlvbkpTWChFdWlJbWFnZUJ1dHRvbiwge1xuICAgIGhhc0FsdDogISFhbHQsXG4gICAgaGFzU2hhZG93OiBoYXNTaGFkb3csXG4gICAgb25DbGljazogY2xvc2VGdWxsU2NyZWVuLFxuICAgIG9uS2V5RG93bjogb25LZXlEb3duLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJkZWFjdGl2YXRlRnVsbFNjcmVlbkJ1dHRvblwiLFxuICAgIGlzRnVsbFNjcmVlbjogdHJ1ZSxcbiAgICBpc0Z1bGxXaWR0aDogaXNGdWxsV2lkdGgsXG4gICAgZnVsbFNjcmVlbkljb25Db2xvcjogZnVsbFNjcmVlbkljb25Db2xvclxuICB9LCBjaGlsZHJlbiksIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VDYXB0aW9uLCB7XG4gICAgY2FwdGlvbjogY2FwdGlvbixcbiAgICByZWY6IG9wdGlvbmFsQ2FwdGlvblJlZixcbiAgICBpc09uT3ZlcmxheU1hc2s6IHRydWVcbiAgfSkpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICB0eXBlOiBcImZ1bGxTY3JlZW5FeGl0XCIsXG4gICAgY29sb3I6IFwiZ2hvc3RcIixcbiAgICBjc3M6IGNzc0ljb25TdHlsZXNcbiAgfSkpKSk7XG59O1xuRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlci5wcm9wVHlwZXMgPSB7XG4gIGlzRnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBzZXRJc0Z1bGxTY3JlZW46IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MsIGV1aUNhbkFuaW1hdGUsIGV1aUFuaW1TbGlkZUluVXAgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXJTdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXI6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWF4LWhlaWdodCcsICc4MHZoJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnODB2dycpLCBcIiBcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwibGluZS1oZWlnaHQ6MDtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7YW5pbWF0aW9uOlwiLCBldWlBbmltU2xpZGVJblVwKGV1aVRoZW1lLnNpemUueHh4eGwpLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmV4dHJhU2xvdywgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ib3VuY2UsIFwiO30mOmhvdmVyIFtjbGFzcyo9J2V1aUltYWdlQ2FwdGlvbidde3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fTtsYWJlbDpldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsV2lkdGg7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nLCAnbCcsICd4bCcsICdmdWxsV2lkdGgnLCAnb3JpZ2luYWwnXTtcbnZhciBGTE9BVFMgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbnZhciBNQVJHSU5TID0gWydzJywgJ20nLCAnbCcsICd4bCddOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpVGhlbWVQcm92aWRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGVtaXRFdWlQcm92aWRlcldhcm5pbmcgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS93YXJuaW5nJztcbmltcG9ydCB7IGNhY2hlIGFzIGZhbGxiYWNrQ2FjaGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbW90aW9uL2Nzcyc7XG5pbXBvcnQgeyBFdWlHbG9iYWxTdHlsZXMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZy9yZXNldC9nbG9iYWxfc3R5bGVzJztcbmltcG9ydCB7IEV1aVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcvdXRpbGl0eS91dGlsaXR5JztcbmltcG9ydCB7IEV1aVRoZW1lQW1zdGVyZGFtIH0gZnJvbSAnLi4vLi4vdGhlbWVzJztcbmltcG9ydCB7IEV1aUNhY2hlUHJvdmlkZXIgfSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCB7IEV1aVN5c3RlbUNvbG9yTW9kZVByb3ZpZGVyIH0gZnJvbSAnLi9zeXN0ZW1fY29sb3JfbW9kZSc7XG5pbXBvcnQgeyBFdWlQcm92aWRlck5lc3RlZENoZWNrLCB1c2VJc05lc3RlZEV1aVByb3ZpZGVyIH0gZnJvbSAnLi9uZXN0ZWQnO1xuaW1wb3J0IHsgRXVpQ29tcG9uZW50RGVmYXVsdHNQcm92aWRlciB9IGZyb20gJy4vY29tcG9uZW50X2RlZmF1bHRzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaXNFbW90aW9uQ2FjaGVPYmplY3QgPSBmdW5jdGlvbiBpc0Vtb3Rpb25DYWNoZU9iamVjdChvYmopIHtcbiAgcmV0dXJuIG9iai5oYXNPd25Qcm9wZXJ0eSgna2V5Jyk7XG59O1xuZXhwb3J0IHZhciBFdWlQcm92aWRlciA9IGZ1bmN0aW9uIEV1aVByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIF9kZWZhdWx0Q2FjaGU7XG4gIHZhciBfcmVmJGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICBjYWNoZSA9IF9yZWYkY2FjaGUgPT09IHZvaWQgMCA/IGZhbGxiYWNrQ2FjaGUgOiBfcmVmJGNhY2hlLFxuICAgIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgIHRoZW1lID0gX3JlZiR0aGVtZSA9PT0gdm9pZCAwID8gRXVpVGhlbWVBbXN0ZXJkYW0gOiBfcmVmJHRoZW1lLFxuICAgIF9yZWYkZ2xvYmFsU3R5bGVzID0gX3JlZi5nbG9iYWxTdHlsZXMsXG4gICAgR2xvYmFscyA9IF9yZWYkZ2xvYmFsU3R5bGVzID09PSB2b2lkIDAgPyBFdWlHbG9iYWxTdHlsZXMgOiBfcmVmJGdsb2JhbFN0eWxlcyxcbiAgICBfcmVmJHV0aWxpdHlDbGFzc2VzID0gX3JlZi51dGlsaXR5Q2xhc3NlcyxcbiAgICBVdGlsaXRpZXMgPSBfcmVmJHV0aWxpdHlDbGFzc2VzID09PSB2b2lkIDAgPyBFdWlVdGlsaXR5Q2xhc3NlcyA6IF9yZWYkdXRpbGl0eUNsYXNzZXMsXG4gICAgY29sb3JNb2RlID0gX3JlZi5jb2xvck1vZGUsXG4gICAgbW9kaWZ5ID0gX3JlZi5tb2RpZnksXG4gICAgY29tcG9uZW50RGVmYXVsdHMgPSBfcmVmLmNvbXBvbmVudERlZmF1bHRzLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIGlzTmVzdGVkID0gdXNlSXNOZXN0ZWRFdWlQcm92aWRlcigpO1xuICBpZiAoaXNOZXN0ZWQpIHtcbiAgICB2YXIgcHJvdmlkZXJNZXNzYWdlID0gXCJgRXVpUHJvdmlkZXJgIHNob3VsZCBub3QgYmUgbmVzdGVkIG9yIHVzZWQgbW9yZSB0aGFuIG9uY2UsIG90aGVyIHRoYW4gYXQgdGhlIHRvcCBsZXZlbCBvZiB5b3VyIGFwcC5cXG4gICAgVXNlIGBFdWlUaGVtZVByb3ZpZGVyYCBpbnN0ZWFkIGZvciBuZXN0ZWQgY29tcG9uZW50LWxldmVsIHRoZW1pbmc6IGh0dHBzOi8vZWxhLnN0L2V1aXByb3ZpZGVyLlwiO1xuICAgIGVtaXRFdWlQcm92aWRlcldhcm5pbmcocHJvdmlkZXJNZXNzYWdlKTtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgdmFyIGRlZmF1bHRDYWNoZTtcbiAgdmFyIGdsb2JhbENhY2hlO1xuICB2YXIgdXRpbGl0eUNhY2hlO1xuICBpZiAoY2FjaGUpIHtcbiAgICBpZiAoaXNFbW90aW9uQ2FjaGVPYmplY3QoY2FjaGUpKSB7XG4gICAgICBjYWNoZS5jb21wYXQgPSB0cnVlO1xuICAgICAgZGVmYXVsdENhY2hlID0gY2FjaGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjYWNoZS5kZWZhdWx0KSB7XG4gICAgICAgIGNhY2hlLmRlZmF1bHQuY29tcGF0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHRDYWNoZSA9IGNhY2hlLmRlZmF1bHQ7XG4gICAgICBpZiAoY2FjaGUuZ2xvYmFsKSB7XG4gICAgICAgIGNhY2hlLmdsb2JhbC5jb21wYXQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgZ2xvYmFsQ2FjaGUgPSBjYWNoZS5nbG9iYWw7XG4gICAgICBpZiAoY2FjaGUudXRpbGl0eSkge1xuICAgICAgICBjYWNoZS51dGlsaXR5LmNvbXBhdCA9IHRydWU7XG4gICAgICB9XG4gICAgICB1dGlsaXR5Q2FjaGUgPSBjYWNoZS51dGlsaXR5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQcm92aWRlck5lc3RlZENoZWNrLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUNhY2hlUHJvdmlkZXIsIHtcbiAgICBjYWNoZTogKF9kZWZhdWx0Q2FjaGUgPSBkZWZhdWx0Q2FjaGUpICE9PSBudWxsICYmIF9kZWZhdWx0Q2FjaGUgIT09IHZvaWQgMCA/IF9kZWZhdWx0Q2FjaGUgOiBmYWxsYmFja0NhY2hlXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpU3lzdGVtQ29sb3JNb2RlUHJvdmlkZXIsIG51bGwsIGZ1bmN0aW9uIChzeXN0ZW1Db2xvck1vZGUpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUaGVtZVByb3ZpZGVyLCB7XG4gICAgICB0aGVtZTogdGhlbWUgIT09IG51bGwgJiYgdGhlbWUgIT09IHZvaWQgMCA/IHRoZW1lIDogdW5kZWZpbmVkLFxuICAgICAgY29sb3JNb2RlOiBjb2xvck1vZGUgIT09IG51bGwgJiYgY29sb3JNb2RlICE9PSB2b2lkIDAgPyBjb2xvck1vZGUgOiBzeXN0ZW1Db2xvck1vZGUsXG4gICAgICBtb2RpZnk6IG1vZGlmeVxuICAgIH0sIHRoZW1lICYmIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpQ2FjaGVQcm92aWRlciwge1xuICAgICAgY2FjaGU6IGdsb2JhbENhY2hlLFxuICAgICAgY2hpbGRyZW46IEdsb2JhbHMgJiYgX19fRW1vdGlvbkpTWChHbG9iYWxzLCBudWxsKVxuICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aUNhY2hlUHJvdmlkZXIsIHtcbiAgICAgIGNhY2hlOiB1dGlsaXR5Q2FjaGUsXG4gICAgICBjaGlsZHJlbjogVXRpbGl0aWVzICYmIF9fX0Vtb3Rpb25KU1goVXRpbGl0aWVzLCBudWxsKVxuICAgIH0pKSwgX19fRW1vdGlvbkpTWChFdWlDb21wb25lbnREZWZhdWx0c1Byb3ZpZGVyLCB7XG4gICAgICBjb21wb25lbnREZWZhdWx0czogY29tcG9uZW50RGVmYXVsdHNcbiAgICB9LCBjaGlsZHJlbikpO1xuICB9KSkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS9ob29rcyc7XG5pbXBvcnQgeyBldWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hY2Nlc3NpYmlsaXR5L3NjcmVlbl9yZWFkZXJfb25seS9zY3JlZW5fcmVhZGVyX29ubHkuc3R5bGVzJztcbmltcG9ydCB7IGV1aUZ1bGxIZWlnaHQsIGV1aVRleHRCcmVha1dvcmQsIGV1aVRleHRUcnVuY2F0ZSwgZXVpTnVtYmVyRm9ybWF0LCBldWlTY3JvbGxCYXJTdHlsZXMsIGV1aVlTY3JvbGwsIGV1aVhTY3JvbGwsIGV1aVlTY3JvbGxXaXRoU2hhZG93cywgZXVpWFNjcm9sbFdpdGhTaGFkb3dzLCBldWlCcmVha3BvaW50IH0gZnJvbSAnLi4vbWl4aW5zJztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgZ2xvYmFsU3R5bGVzID0gZnVuY3Rpb24gZ2xvYmFsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4gLyojX19QVVJFX18qL2NzcyhcIi5ldWlTY3JlZW5SZWFkZXJPbmx5e1wiLCBldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO30uZXVpLWFsaWduQmFzZWxpbmV7dmVydGljYWwtYWxpZ246YmFzZWxpbmUhaW1wb3J0YW50O30uZXVpLWFsaWduQm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbSFpbXBvcnRhbnQ7fS5ldWktYWxpZ25NaWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlIWltcG9ydGFudDt9LmV1aS1hbGlnblRvcHt2ZXJ0aWNhbC1hbGlnbjp0b3AhaW1wb3J0YW50O30uZXVpLWRpc3BsYXlCbG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt9LmV1aS1kaXNwbGF5SW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudDt9LmV1aS1kaXNwbGF5SW5saW5lQmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50O30uZXVpLWZ1bGxXaWR0aHtkaXNwbGF5OmJsb2NrIWltcG9ydGFudDtcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJSAhaW1wb3J0YW50JyksIFwiO30uZXVpLWZ1bGxIZWlnaHR7XCIsIGV1aUZ1bGxIZWlnaHQoKSwgXCI7fS5ldWktdGV4dENlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnQ7fS5ldWktdGV4dExlZnR7dGV4dC1hbGlnbjpzdGFydCFpbXBvcnRhbnQ7fS5ldWktdGV4dFJpZ2h0e3RleHQtYWxpZ246ZW5kIWltcG9ydGFudDt9LmV1aS10ZXh0Tm9XcmFwe3doaXRlLXNwYWNlOm5vd3JhcCFpbXBvcnRhbnQ7fS5ldWktdGV4dEluaGVyaXRDb2xvcntjb2xvcjppbmhlcml0IWltcG9ydGFudDt9LmV1aS10ZXh0QnJlYWtXb3Jke1wiLCBldWlUZXh0QnJlYWtXb3JkKCksIFwiO30uZXVpLXRleHRCcmVha0FsbHtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQhaW1wb3J0YW50O3dvcmQtYnJlYWs6YnJlYWstYWxsIWltcG9ydGFudDt9LmV1aS10ZXh0QnJlYWtOb3JtYWx7b3ZlcmZsb3ctd3JhcDpub3JtYWwhaW1wb3J0YW50O3dvcmQtd3JhcDpub3JtYWwhaW1wb3J0YW50O3dvcmQtYnJlYWs6bm9ybWFsIWltcG9ydGFudDt9LmV1aS10ZXh0VHJ1bmNhdGV7XCIsIGV1aVRleHRUcnVuY2F0ZSgpLCBcIjt9LmV1aS10ZXh0TnVtYmVye1wiLCBldWlOdW1iZXJGb3JtYXQoZXVpVGhlbWVDb250ZXh0KSwgXCI7fS5ldWktc2Nyb2xsQmFye1wiLCBldWlTY3JvbGxCYXJTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSwgXCI7fS5ldWkteVNjcm9sbHtcIiwgZXVpWVNjcm9sbChldWlUaGVtZUNvbnRleHQpLCBcIjt9LmV1aS14U2Nyb2xse1wiLCBldWlYU2Nyb2xsKGV1aVRoZW1lQ29udGV4dCksIFwiO30uZXVpLXlTY3JvbGxXaXRoU2hhZG93c3tcIiwgZXVpWVNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lQ29udGV4dCksIFwiO30uZXVpLXhTY3JvbGxXaXRoU2hhZG93c3tcIiwgZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lQ29udGV4dCksIFwiO31bY2xhc3MqPSdldWktc2hvd0Zvcidde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnQ7fVwiLCBPYmplY3Qua2V5cyhldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUuYnJlYWtwb2ludCkubWFwKGZ1bmN0aW9uIChzaXplKSB7XG4gICAgcmV0dXJuIFwiXFxuICAgICAgLmV1aS1oaWRlRm9yLS1cIi5jb25jYXQoc2l6ZSwgXCIge1xcbiAgICAgICAgXCIpLmNvbmNhdChldWlCcmVha3BvaW50KGV1aVRoZW1lQ29udGV4dCwgW3NpemVdKSwgXCIge1xcbiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIC5ldWktc2hvd0Zvci0tXCIpLmNvbmNhdChzaXplLCBcIiB7XFxuICAgICAgICBcIikuY29uY2F0KGV1aUJyZWFrcG9pbnQoZXVpVGhlbWVDb250ZXh0LCBbc2l6ZV0pLCBcIiB7XFxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICAuZXVpLXNob3dGb3ItLVwiKS5jb25jYXQoc2l6ZSwgXCItLWJsb2NrIHtcXG4gICAgICAgIFwiKS5jb25jYXQoZXVpQnJlYWtwb2ludChldWlUaGVtZUNvbnRleHQsIFtzaXplXSksIFwiIHtcXG4gICAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgLmV1aS1zaG93Rm9yLS1cIikuY29uY2F0KHNpemUsIFwiLS1pbmxpbmVCbG9jayB7XFxuICAgICAgICBcIikuY29uY2F0KGV1aUJyZWFrcG9pbnQoZXVpVGhlbWVDb250ZXh0LCBbc2l6ZV0pLCBcIiB7XFxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICAuZXVpLXNob3dGb3ItLVwiKS5jb25jYXQoc2l6ZSwgXCItLWZsZXgge1xcbiAgICAgICAgXCIpLmNvbmNhdChldWlCcmVha3BvaW50KGV1aVRoZW1lQ29udGV4dCwgW3NpemVdKSwgXCIge1xcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICAgICAgICB9XFxuICAgICAgfVwiKTtcbiAgfSksIFwiOztsYWJlbDpnbG9iYWxTdHlsZXM7XCIpO1xufTtcbmV4cG9ydCB2YXIgRXVpVXRpbGl0eUNsYXNzZXMgPSBmdW5jdGlvbiBFdWlVdGlsaXR5Q2xhc3NlcygpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBnbG9iYWxTdHlsZXMoZXVpVGhlbWUpXG4gIH0pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENhY2hlUHJvdmlkZXIgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDYWNoZVByb3ZpZGVyID0gZnVuY3Rpb24gRXVpQ2FjaGVQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gY2hpbGRyZW4gJiYgY2FjaGUgPyBfX19FbW90aW9uSlNYKENhY2hlUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2FjaGVcbiAgfSwgY2hpbGRyZW4pIDogX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pO1xufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuZXhwb3J0IHZhciBDT0xPUl9NT0RFX01FRElBX1FVRVJZID0gJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknO1xuZXhwb3J0IHZhciBFdWlTeXN0ZW1Db2xvck1vZGVQcm92aWRlciA9IGZ1bmN0aW9uIEV1aVN5c3RlbUNvbG9yTW9kZVByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgLy8gQ2hlY2sgdHlwZW9mIGFuZCB1c2Ugb3B0aW9uYWwgY2hhaW5pbmcgZm9yIFNTUiBvciB0ZXN0IGVudmlyb25tZW50c1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF93aW5kb3ckbWF0Y2hNZWRpYSwgX3dpbmRvdztcbiAgICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAoX3dpbmRvdyRtYXRjaE1lZGlhID0gKF93aW5kb3cgPSB3aW5kb3cpLm1hdGNoTWVkaWEpICE9PSBudWxsICYmIF93aW5kb3ckbWF0Y2hNZWRpYSAhPT0gdm9pZCAwICYmIChfd2luZG93JG1hdGNoTWVkaWEgPSBfd2luZG93JG1hdGNoTWVkaWEuY2FsbChfd2luZG93LCBDT0xPUl9NT0RFX01FRElBX1FVRVJZKSkgIT09IG51bGwgJiYgX3dpbmRvdyRtYXRjaE1lZGlhICE9PSB2b2lkIDAgJiYgX3dpbmRvdyRtYXRjaE1lZGlhLm1hdGNoZXMgPyAnREFSSycgOiAnTElHSFQnO1xuICAgIH0pLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHN5c3RlbUNvbG9yTW9kZSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0U3lzdGVtQ29sb3JNb2RlID0gX3VzZVN0YXRlMlsxXTtcblxuICAvLyBMaXN0ZW4gZm9yIHN5c3RlbSBjaGFuZ2VzXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF93aW5kb3ckbWF0Y2hNZWRpYTIsIF93aW5kb3cyLCBfd2luZG93JG1hdGNoTWVkaWEyJGMsIF93aW5kb3ckbWF0Y2hNZWRpYTIkYzI7XG4gICAgdmFyIGV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBldmVudExpc3RlbmVyKGV2ZW50KSB7XG4gICAgICBzZXRTeXN0ZW1Db2xvck1vZGUoZXZlbnQubWF0Y2hlcyA/ICdEQVJLJyA6ICdMSUdIVCcpO1xuICAgIH07XG5cbiAgICAvLyBPcHRpb25hbCBjaGFpbmluZyBoZXJlIGlzIGZvciB0ZXN0IGVudmlyb25tZW50cyAtIFNTUiBzaG91bGQgbm90IHJ1biB1c2VFZmZlY3RcbiAgICAoX3dpbmRvdyRtYXRjaE1lZGlhMiA9IChfd2luZG93MiA9IHdpbmRvdykubWF0Y2hNZWRpYSkgPT09IG51bGwgfHwgX3dpbmRvdyRtYXRjaE1lZGlhMiA9PT0gdm9pZCAwIHx8IChfd2luZG93JG1hdGNoTWVkaWEyJGMgPSAoX3dpbmRvdyRtYXRjaE1lZGlhMiRjMiA9IF93aW5kb3ckbWF0Y2hNZWRpYTIuY2FsbChfd2luZG93MiwgQ09MT1JfTU9ERV9NRURJQV9RVUVSWSkpLmFkZEV2ZW50TGlzdGVuZXIpID09PSBudWxsIHx8IF93aW5kb3ckbWF0Y2hNZWRpYTIkYyA9PT0gdm9pZCAwIHx8IF93aW5kb3ckbWF0Y2hNZWRpYTIkYy5jYWxsKF93aW5kb3ckbWF0Y2hNZWRpYTIkYzIsICdjaGFuZ2UnLCBldmVudExpc3RlbmVyKTtcblxuICAgIC8vIENsZWFuIHVwIHRoZSBsaXN0ZW5lciBvbiB1bm1vdW50XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfd2luZG93JG1hdGNoTWVkaWEzLCBfd2luZG93MywgX3dpbmRvdyRtYXRjaE1lZGlhMyRjLCBfd2luZG93JG1hdGNoTWVkaWEzJGMyO1xuICAgICAgKF93aW5kb3ckbWF0Y2hNZWRpYTMgPSAoX3dpbmRvdzMgPSB3aW5kb3cpLm1hdGNoTWVkaWEpID09PSBudWxsIHx8IF93aW5kb3ckbWF0Y2hNZWRpYTMgPT09IHZvaWQgMCB8fCAoX3dpbmRvdyRtYXRjaE1lZGlhMyRjID0gKF93aW5kb3ckbWF0Y2hNZWRpYTMkYzIgPSBfd2luZG93JG1hdGNoTWVkaWEzLmNhbGwoX3dpbmRvdzMsIENPTE9SX01PREVfTUVESUFfUVVFUlkpKS5yZW1vdmVFdmVudExpc3RlbmVyKSA9PT0gbnVsbCB8fCBfd2luZG93JG1hdGNoTWVkaWEzJGMgPT09IHZvaWQgMCB8fCBfd2luZG93JG1hdGNoTWVkaWEzJGMuY2FsbChfd2luZG93JG1hdGNoTWVkaWEzJGMyLCAnY2hhbmdlJywgZXZlbnRMaXN0ZW5lcik7XG4gICAgfTtcbiAgfSwgW10pO1xuICByZXR1cm4gY2hpbGRyZW4oc3lzdGVtQ29sb3JNb2RlKTtcbn07XG5FdWlTeXN0ZW1Db2xvck1vZGVQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBUaGlzIHV0aWwgY3JlYXRlcyBhIGNvbnRleHQgZm9yIEV1aVByb3ZpZGVycyB0byB1c2UgYW5kIGRldGVybWluZSBpZiB0aGV5J3JlXG4gKiB0aGUgb25seSAodG9wLW1vc3QpIEV1aVByb3ZpZGVyIGluIHRoZSBhcHAuIElmIHRoZXkgYXJlbid0IChpLmUuLCB0aGV5J3JlXG4gKiBuZXN0ZWQgd2l0aGluIGFub3RoZXIgRXVpUHJvdmlkZXIpIHdlIHNob3VsZCB0aHJvdyBhIHdhcm5pbmcgYW5kIG5vdFxuICogcmVuZGVyIGluc3RhbnRpYXRlIHRoZSBuZXN0ZWQgRXVpUHJvdmlkZXIuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aU5lc3RlZFByb3ZpZGVyQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KGZhbHNlKTtcbmV4cG9ydCB2YXIgRXVpUHJvdmlkZXJOZXN0ZWRDaGVjayA9IGZ1bmN0aW9uIEV1aVByb3ZpZGVyTmVzdGVkQ2hlY2soX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlOZXN0ZWRQcm92aWRlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxuICB9LCBjaGlsZHJlbik7XG59O1xuZXhwb3J0IHZhciB1c2VJc05lc3RlZEV1aVByb3ZpZGVyID0gZnVuY3Rpb24gdXNlSXNOZXN0ZWRFdWlQcm92aWRlcigpIHtcbiAgcmV0dXJuICEhdXNlQ29udGV4dChFdWlOZXN0ZWRQcm92aWRlckNvbnRleHQpO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwib3B0aW9uc1wiLCBcIm9uQ2hhbmdlXCIsIFwib25BY3RpdmVPcHRpb25DaGFuZ2VcIiwgXCJzZWFyY2hhYmxlXCIsIFwic2VhcmNoUHJvcHNcIiwgXCJzaW5nbGVTZWxlY3Rpb25cIiwgXCJpc0xvYWRpbmdcIiwgXCJsaXN0UHJvcHNcIiwgXCJyZW5kZXJPcHRpb25cIiwgXCJoZWlnaHRcIiwgXCJhbGxvd0V4Y2x1c2lvbnNcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBcImxvYWRpbmdNZXNzYWdlXCIsIFwibm9NYXRjaGVzTWVzc2FnZVwiLCBcImVtcHR5TWVzc2FnZVwiLCBcImVycm9yTWVzc2FnZVwiLCBcInNlbGVjdGFibGVTY3JlZW5SZWFkZXJUZXh0XCIsIFwiaXNQcmVGaWx0ZXJlZFwiLCBcIm9wdGlvbk1hdGNoZXJcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBcIm9uQ2hhbmdlXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiaW5wdXRSZWZcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBcImlzVmlydHVhbGl6ZWRcIiwgXCJyb3dIZWlnaHRcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgY3JlYXRlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzLCBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciB9IGZyb20gJy4uL2xvYWRpbmcnO1xuaW1wb3J0IHsgRXVpU3BhY2VyIH0gZnJvbSAnLi4vc3BhY2VyJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlckxpdmUsIEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aVNlbGVjdGFibGVTZWFyY2ggfSBmcm9tICcuL3NlbGVjdGFibGVfc2VhcmNoJztcbmltcG9ydCB7IEV1aVNlbGVjdGFibGVNZXNzYWdlIH0gZnJvbSAnLi9zZWxlY3RhYmxlX21lc3NhZ2UnO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZUxpc3QgfSBmcm9tICcuL3NlbGVjdGFibGVfbGlzdCc7XG5pbXBvcnQgeyBjcmVhdGVQYXJ0aWFsU3RyaW5nRXF1YWxpdHlPcHRpb25NYXRjaGVyLCBnZXRNYXRjaGluZ09wdGlvbnMgfSBmcm9tICcuL21hdGNoaW5nX29wdGlvbnMnO1xuaW1wb3J0IHsgZXVpU2VsZWN0YWJsZVN0eWxlcyBhcyBzdHlsZXMgfSBmcm9tICcuL3NlbGVjdGFibGUuc3R5bGVzJztcblxuLy8gVGhlIGBzZWFyY2hhYmxlYCBwcm9wIGhhcyBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIGExMXkuXG4vLyBXaGVuIHByZXNlbnQsIHdlIGVmZmVjdGl2ZWx5IGNoYW5nZSBmcm9tIGFkaGVyaW5nXG4vLyB0byB0aGUgQVJJQSBgbGlzdGJveGAgc3BlYyAoaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjIvI0xpc3Rib3gpXG4vLyB0byB0aGUgQVJJQSBgY29tYm9ib3hgIHNwZWMgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4yLyNjb21ib2JveClcbi8vIGFuZCAocmUpaW1wbGVtZW50IGFsbCByZWxldmFudCBhdHRyaWJ1dGVzIGFuZCBrZXlib2FyZCBpbnRlcmFjdGlvbnMuXG4vLyBUYWtlIG5vdGUgb2YgbG9naWMgdGhhdCByZWxpZXMgb24gYHNlYXJjaGFibGVgIHRvIGVuc3VyZSB0aGF0IGFueVxuLy8gbW9kaWZpY2F0aW9ucyByZW1haW4gaW4gYWxpZ25tZW50LlxuLy9cbi8vIGBzZWFyY2hQcm9wc2AgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIHdoZW4gYHNlYXJjaGFibGVgIGlzIHRydWVcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpU2VsZWN0YWJsZShwcm9wcykge1xuICAgIHZhciBfc2VhcmNoUHJvcHMkb25DaGFuZ2U7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlTZWxlY3RhYmxlKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpU2VsZWN0YWJsZSwgW3Byb3BzXSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImlucHV0UmVmXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjb250YWluZXJSZWZcIiwgLyojX19QVVJFX18qL2NyZWF0ZVJlZigpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib3B0aW9uc0xpc3RSZWZcIiwgLyojX19QVVJFX18qL2NyZWF0ZVJlZigpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicHJldmVudE9uRm9jdXNcIiwgZmFsc2UpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyb290SWRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibWVzc2FnZUNvbnRlbnRJZFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJsaXN0SWRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaXNGb2N1c09uU2VhcmNoT3JMaXN0Qm94XCIsIGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgIHZhciBfdGhpcyRvcHRpb25zTGlzdFJlZiQ7XG4gICAgICB2YXIgc2VhcmNoSGFzRm9jdXMgPSBfdGhpcy5wcm9wcy5zZWFyY2hhYmxlICYmIHRhcmdldCA9PT0gX3RoaXMuaW5wdXRSZWY7XG4gICAgICB2YXIgbGlzdEJveCA9IChfdGhpcyRvcHRpb25zTGlzdFJlZiQgPSBfdGhpcy5vcHRpb25zTGlzdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdGhpcyRvcHRpb25zTGlzdFJlZiQgPT09IHZvaWQgMCB8fCAoX3RoaXMkb3B0aW9uc0xpc3RSZWYkID0gX3RoaXMkb3B0aW9uc0xpc3RSZWYkLmxpc3RCb3hSZWYpID09PSBudWxsIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkb3B0aW9uc0xpc3RSZWYkLnBhcmVudEVsZW1lbnQ7XG4gICAgICB2YXIgbGlzdEJveENvbnRhaW5zRm9jdXMgPSB0YXJnZXQgaW5zdGFuY2VvZiBOb2RlICYmIChsaXN0Qm94ID09PSBudWxsIHx8IGxpc3RCb3ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxpc3RCb3guY29udGFpbnModGFyZ2V0KSk7XG4gICAgICB2YXIgbGlzdEJveEhhc0ZvY3VzID0gdGFyZ2V0ID09PSBsaXN0Qm94IHx8IGxpc3RCb3hDb250YWluc0ZvY3VzO1xuICAgICAgcmV0dXJuIHNlYXJjaEhhc0ZvY3VzIHx8IGxpc3RCb3hIYXNGb2N1cztcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Nb3VzZURvd25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQnlwYXNzIG9uRm9jdXMgd2hlbiBhIGNsaWNrIGV2ZW50IG9yaWdpbmF0ZXMgZnJvbSB0aGlzLmNvbnRhaW5lclJlZi5cbiAgICAgIC8vIFByZXZlbnRzIG9uRm9jdXMgZnJvbSBzY3JvbGxpbmcgYXdheSBmcm9tIGEgY2xpY2tlZCBvcHRpb24gYW5kIG5lZ2F0aW5nIHRoZSBzZWxlY3Rpb24gZXZlbnQuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzQxNDdcbiAgICAgIF90aGlzLnByZXZlbnRPbkZvY3VzID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Gb2N1c1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5wcmV2ZW50T25Gb2N1cykge1xuICAgICAgICBfdGhpcy5wcmV2ZW50T25Gb2N1cyA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIV90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zLmxlbmd0aCB8fCBfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCAmJiAhX3RoaXMuaXNGb2N1c09uU2VhcmNoT3JMaXN0Qm94KGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGZpcnN0U2VsZWN0ZWQgPSBfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gb3B0aW9uLmNoZWNrZWQgJiYgIW9wdGlvbi5kaXNhYmxlZCAmJiAhb3B0aW9uLmlzR3JvdXBMYWJlbDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpcnN0U2VsZWN0ZWQgPiAtMSkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IGZpcnN0U2VsZWN0ZWQsXG4gICAgICAgICAgaXNGb2N1c2VkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuICFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5pc0dyb3VwTGFiZWw7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgaXNGb2N1c2VkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgb3B0aW9uc0xpc3QgPSBfdGhpcy5vcHRpb25zTGlzdFJlZi5jdXJyZW50O1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGUgdXNlciBpcyBpbnRlcmFjdGluZyB3aXRoIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gc2VhcmNoYm94IG9yIHNlbGVjdGlvbiBsaXN0LiBJZiBzbywgdGhlIHVzZXIgbWF5IGJlIGF0dGVtcHRpbmcgdG9cbiAgICAgIC8vIGludGVyYWN0IHdpdGggdGhlIHNlYXJjaCBjbGVhciBidXR0b24gb3IgYSB0b3RhbGx5IGN1c3RvbSBidXR0b24sXG4gICAgICAvLyBhbmQgbGlzdGJveCBrZXlib2FyZCBuYXZpZ2F0aW9uL3NlbGVjdGlvbiBzaG91bGQgbm90IGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmICghX3RoaXMuaXNGb2N1c09uU2VhcmNoT3JMaXN0Qm94KGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiB1bmRlZmluZWQsXG4gICAgICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX1VQOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgX3RoaXMuaW5jcmVtZW50QWN0aXZlT3B0aW9uSW5kZXgoLTEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGtleXMuQVJST1dfRE9XTjpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIF90aGlzLmluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4KDEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZvciBub24tc2VhcmNoYWJsZSBpbnN0YW5jZXMsIFNQQUNFIGludGVyYWN0aW9uIHNob3VsZCBhbGlnbiB3aXRoXG4gICAgICAgIC8vIHRoZSB1c2VyIGV4cGVjdGF0aW9uIG9mIHNlbGVjdGlvbiB0b2dnbGluZyAoZS5nLiwgaW5wdXRbdHlwZT1jaGVja2JveF0pLlxuICAgICAgICAvLyBFTlRFUiBpcyBhbHNvIGEgdmFsaWQgc2VsZWN0aW9uIG1lY2hhbmlzbSBpbiB0aGlzIGNhc2UuXG4gICAgICAgIGNhc2Uga2V5cy5FTlRFUjpcbiAgICAgICAgY2FzZSBrZXlzLlNQQUNFOlxuICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5zZWFyY2hhYmxlKSB7XG4gICAgICAgICAgICAvLyBGb3Igc2VhcmNoYWJsZSBpbnN0YW5jZXMsIFNQQUNFIGlzIHJlc2VydmVkIGFzIGEgY2hhcmFjdGVyIGZvciBmaWx0ZXJpbmdcbiAgICAgICAgICAgIC8vIHZpYSB0aGUgaW5wdXQgYm94LCBhbmQgYXMgc3VjaCBvbmx5IEVOVEVSIHdpbGwgdG9nZ2xlIHNlbGVjdGlvbi5cbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IF90aGlzLmlucHV0UmVmICYmIGV2ZW50LmtleSA9PT0ga2V5cy5TUEFDRSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgaWYgKF90aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGwgJiYgb3B0aW9uc0xpc3QpIHtcbiAgICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTsgLy8gTk9URTogVGhpcyBpcyBuZWVkZWQgZm9yIFJlYWN0IHYxNiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgb3B0aW9uc0xpc3Qub25BZGRPclJlbW92ZU9wdGlvbihfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9uc1tfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleF0sIGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Uga2V5cy5BTFQ6XG4gICAgICAgIGNhc2Uga2V5cy5TSElGVDpcbiAgICAgICAgY2FzZSBrZXlzLkNUUkw6XG4gICAgICAgIGNhc2Uga2V5cy5NRVRBOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiB1bmRlZmluZWRcbiAgICAgICAgICB9LCBfdGhpcy5vbkZvY3VzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaW5jcmVtZW50QWN0aXZlT3B0aW9uSW5kZXhcIiwgZnVuY3Rpb24gKGFtb3VudCkge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMgYXZhaWxhYmxlLCBkbyBub3RoaW5nLlxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3JlZi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICB2aXNpYmxlT3B0aW9ucyA9IF9yZWYudmlzaWJsZU9wdGlvbnM7XG4gICAgICAgIHZhciBuZXh0QWN0aXZlT3B0aW9uSW5kZXg7XG4gICAgICAgIGlmIChhY3RpdmVPcHRpb25JbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1c2VyJ3Mga2V5Ym9hcmQgbmF2aWdhdGlvbiBvZiB0aGUgbWVudSwgdGhlbiB3ZSdsbCBmb2N1c1xuICAgICAgICAgIC8vIGVpdGhlciB0aGUgZmlyc3Qgb3IgbGFzdCBpdGVtLlxuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IGFtb3VudCA8IDAgPyB2aXNpYmxlT3B0aW9ucy5sZW5ndGggLSAxIDogMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhY3RpdmVPcHRpb25JbmRleCArIGFtb3VudDtcbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA9PT0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdyb3VwIHRpdGxlcyBhbmQgZGlzYWJsZWQgb3B0aW9ucyBhcmUgaW5jbHVkZWQgaW4gb3B0aW9uIGxpc3QgYnV0IGFyZSBub3Qgc2VsZWN0YWJsZVxuICAgICAgICB2YXIgZGlyZWN0aW9uID0gYW1vdW50ID4gMCA/IDEgOiAtMTtcbiAgICAgICAgd2hpbGUgKHZpc2libGVPcHRpb25zW25leHRBY3RpdmVPcHRpb25JbmRleF0uaXNHcm91cExhYmVsIHx8IHZpc2libGVPcHRpb25zW25leHRBY3RpdmVPcHRpb25JbmRleF0uZGlzYWJsZWQpIHtcbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBuZXh0QWN0aXZlT3B0aW9uSW5kZXggKyBkaXJlY3Rpb247XG4gICAgICAgICAgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IHZpc2libGVPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IHZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogbmV4dEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25TZWFyY2hDaGFuZ2VcIiwgZnVuY3Rpb24gKHNlYXJjaFZhbHVlLCB2aXNpYmxlT3B0aW9ucykge1xuICAgICAgdmFyIF90aGlzJHByb3BzJHNlYXJjaFBybywgX3RoaXMkcHJvcHMkc2VhcmNoUHJvMjtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICB2aXNpYmxlT3B0aW9uczogdmlzaWJsZU9wdGlvbnMsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiB1bmRlZmluZWRcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLnN0YXRlLmlzRm9jdXNlZCkge1xuICAgICAgICAgIF90aGlzLm9uRm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAoX3RoaXMkcHJvcHMkc2VhcmNoUHJvID0gX3RoaXMucHJvcHMuc2VhcmNoUHJvcHMpID09PSBudWxsIHx8IF90aGlzJHByb3BzJHNlYXJjaFBybyA9PT0gdm9pZCAwIHx8IChfdGhpcyRwcm9wcyRzZWFyY2hQcm8yID0gX3RoaXMkcHJvcHMkc2VhcmNoUHJvLm9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRzZWFyY2hQcm8yID09PSB2b2lkIDAgfHwgX3RoaXMkcHJvcHMkc2VhcmNoUHJvMi5jYWxsKF90aGlzJHByb3BzJHNlYXJjaFBybywgc2VhcmNoVmFsdWUsIHZpc2libGVPcHRpb25zKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Db250YWluZXJCbHVyXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAvLyBJZ25vcmUgYmx1ciBldmVudHMgd2hlbiBtb3ZpbmcgZnJvbSBzZWFyY2ggdG8gb3B0aW9uIHRvIGF2b2lkIGFjdGl2ZU9wdGlvbkluZGV4IGNvbmZsaWN0c1xuICAgICAgaWYgKF90aGlzLmlzRm9jdXNPblNlYXJjaE9yTGlzdEJveChlLnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uT3B0aW9uQ2xpY2tcIiwgZnVuY3Rpb24gKG9wdGlvbnMsIGV2ZW50LCBjbGlja2VkT3B0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgaXNQcmVGaWx0ZXJlZCA9IF90aGlzJHByb3BzLmlzUHJlRmlsdGVyZWQsXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2UsXG4gICAgICAgIG9wdGlvbk1hdGNoZXIgPSBfdGhpcyRwcm9wcy5vcHRpb25NYXRjaGVyO1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gX3RoaXMuc3RhdGUuc2VhcmNoVmFsdWU7XG4gICAgICB2YXIgdmlzaWJsZU9wdGlvbnMgPSBnZXRNYXRjaGluZ09wdGlvbnMoe1xuICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUgIT09IG51bGwgJiYgc2VhcmNoVmFsdWUgIT09IHZvaWQgMCA/IHNlYXJjaFZhbHVlIDogJycsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQ6ICEhaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBbXSxcbiAgICAgICAgb3B0aW9uTWF0Y2hlcjogb3B0aW9uTWF0Y2hlclxuICAgICAgfSk7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZpc2libGVPcHRpb25zOiB2aXNpYmxlT3B0aW9uc1xuICAgICAgfSk7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2Uob3B0aW9ucywgZXZlbnQsIGNsaWNrZWRPcHRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzY3JvbGxUb0l0ZW1cIiwgZnVuY3Rpb24gKGluZGV4LCBhbGlnbikge1xuICAgICAgdmFyIF90aGlzJG9wdGlvbnNMaXN0UmVmJDI7XG4gICAgICAoX3RoaXMkb3B0aW9uc0xpc3RSZWYkMiA9IF90aGlzLm9wdGlvbnNMaXN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJDIgPT09IHZvaWQgMCB8fCAoX3RoaXMkb3B0aW9uc0xpc3RSZWYkMiA9IF90aGlzJG9wdGlvbnNMaXN0UmVmJDIubGlzdFJlZikgPT09IG51bGwgfHwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkMiA9PT0gdm9pZCAwIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJDIuc2Nyb2xsVG9JdGVtKGluZGV4LCBhbGlnbik7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm1ha2VPcHRpb25JZFwiLCBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgIHJldHVybiBpbmRleCAhPSBudWxsID8gXCJcIi5jb25jYXQoX3RoaXMubGlzdElkLCBcIl9vcHRpb24tXCIpLmNvbmNhdChpbmRleCkgOiAnJztcbiAgICB9KTtcbiAgICBfdGhpcy5yb290SWQgPSBwcm9wcy5pZCA/IGZ1bmN0aW9uIChzdWZmaXgpIHtcbiAgICAgIHJldHVybiBcIlwiLmNvbmNhdChwcm9wcy5pZCkuY29uY2F0KHN1ZmZpeCA/IFwiX1wiLmNvbmNhdChzdWZmaXgpIDogJycpO1xuICAgIH0gOiBodG1sSWRHZW5lcmF0b3IoKTtcbiAgICBfdGhpcy5saXN0SWQgPSBfdGhpcy5yb290SWQoJ2xpc3Rib3gnKTtcbiAgICBfdGhpcy5tZXNzYWdlQ29udGVudElkID0gX3RoaXMucm9vdElkKCdtZXNzYWdlQ29udGVudCcpO1xuICAgIHZhciBfb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMsXG4gICAgICBzaW5nbGVTZWxlY3Rpb24gPSBwcm9wcy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICBfaXNQcmVGaWx0ZXJlZCA9IHByb3BzLmlzUHJlRmlsdGVyZWQsXG4gICAgICBzZWFyY2hQcm9wcyA9IHByb3BzLnNlYXJjaFByb3BzO1xuICAgIHZhciBpbml0aWFsU2VhcmNoVmFsdWUgPSAoc2VhcmNoUHJvcHMgPT09IG51bGwgfHwgc2VhcmNoUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlYXJjaFByb3BzLnZhbHVlKSB8fCBTdHJpbmcoKHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWFyY2hQcm9wcy5kZWZhdWx0VmFsdWUpIHx8ICcnKTtcbiAgICB2YXIgX3Zpc2libGVPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKHtcbiAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgc2VhcmNoVmFsdWU6IGluaXRpYWxTZWFyY2hWYWx1ZSxcbiAgICAgIGlzUHJlRmlsdGVyZWQ6ICEhX2lzUHJlRmlsdGVyZWQsXG4gICAgICBzZWxlY3RlZE9wdGlvbnM6IFtdLFxuICAgICAgb3B0aW9uTWF0Y2hlcjogcHJvcHMub3B0aW9uTWF0Y2hlclxuICAgIH0pO1xuICAgIHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgfHwgKF9zZWFyY2hQcm9wcyRvbkNoYW5nZSA9IHNlYXJjaFByb3BzLm9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfc2VhcmNoUHJvcHMkb25DaGFuZ2UgPT09IHZvaWQgMCB8fCBfc2VhcmNoUHJvcHMkb25DaGFuZ2UuY2FsbChzZWFyY2hQcm9wcywgaW5pdGlhbFNlYXJjaFZhbHVlLCBfdmlzaWJsZU9wdGlvbnMpO1xuXG4gICAgLy8gZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzaW5nbGUgb3B0aW9uIGlzIGFjdGl2ZSBpZiBpdCBpcyBpbiB0aGUgdmlzaWJsZU9wdGlvbnNcbiAgICB2YXIgc2VsZWN0ZWRPcHRpb25zID0gX29wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb24uY2hlY2tlZDtcbiAgICB9KTtcbiAgICB2YXIgX2FjdGl2ZU9wdGlvbkluZGV4O1xuICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKF92aXNpYmxlT3B0aW9ucy5pbmNsdWRlcyhzZWxlY3RlZE9wdGlvbnNbMF0pKSB7XG4gICAgICAgIF9hY3RpdmVPcHRpb25JbmRleCA9IF92aXNpYmxlT3B0aW9ucy5pbmRleE9mKHNlbGVjdGVkT3B0aW9uc1swXSk7XG4gICAgICB9XG4gICAgfVxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IF9hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgIHNlYXJjaFZhbHVlOiBpbml0aWFsU2VhcmNoVmFsdWUsXG4gICAgICB2aXNpYmxlT3B0aW9uczogX3Zpc2libGVPcHRpb25zLFxuICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlTZWxlY3RhYmxlLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlTZWxlY3RhYmxlLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJldlN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSB0aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4KSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRvbkFjdGl2ZU8sIF90aGlzJHByb3BzMjtcbiAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbiA9IHRoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbCA/IHRoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnNbdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleF0gOiBudWxsO1xuICAgICAgICAoX3RoaXMkcHJvcHMkb25BY3RpdmVPID0gKF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMpLm9uQWN0aXZlT3B0aW9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkFjdGl2ZU8gPT09IHZvaWQgMCB8fCBfdGhpcyRwcm9wcyRvbkFjdGl2ZU8uY2FsbChfdGhpcyRwcm9wczIsIGFjdGl2ZU9wdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMy5jaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMzLmNsYXNzTmFtZSxcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMy5vcHRpb25zLFxuICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMy5vbkNoYW5nZSxcbiAgICAgICAgb25BY3RpdmVPcHRpb25DaGFuZ2UgPSBfdGhpcyRwcm9wczMub25BY3RpdmVPcHRpb25DaGFuZ2UsXG4gICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wczMuc2VhcmNoYWJsZSxcbiAgICAgICAgc2VhcmNoUHJvcHMgPSBfdGhpcyRwcm9wczMuc2VhcmNoUHJvcHMsXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzMy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMy5pc0xvYWRpbmcsXG4gICAgICAgIGxpc3RQcm9wcyA9IF90aGlzJHByb3BzMy5saXN0UHJvcHMsXG4gICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzMy5yZW5kZXJPcHRpb24sXG4gICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzMy5oZWlnaHQsXG4gICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzMy5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzM1snYXJpYS1sYWJlbCddLFxuICAgICAgICBhcmlhRGVzY3JpYmVkYnkgPSBfdGhpcyRwcm9wczNbJ2FyaWEtZGVzY3JpYmVkYnknXSxcbiAgICAgICAgbG9hZGluZ01lc3NhZ2UgPSBfdGhpcyRwcm9wczMubG9hZGluZ01lc3NhZ2UsXG4gICAgICAgIG5vTWF0Y2hlc01lc3NhZ2UgPSBfdGhpcyRwcm9wczMubm9NYXRjaGVzTWVzc2FnZSxcbiAgICAgICAgZW1wdHlNZXNzYWdlID0gX3RoaXMkcHJvcHMzLmVtcHR5TWVzc2FnZSxcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gX3RoaXMkcHJvcHMzLmVycm9yTWVzc2FnZSxcbiAgICAgICAgc2VsZWN0YWJsZVNjcmVlblJlYWRlclRleHQgPSBfdGhpcyRwcm9wczMuc2VsZWN0YWJsZVNjcmVlblJlYWRlclRleHQsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQgPSBfdGhpcyRwcm9wczMuaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgb3B0aW9uTWF0Y2hlciA9IF90aGlzJHByb3BzMy5vcHRpb25NYXRjaGVyLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMywgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkc3RhdGUuc2VhcmNoVmFsdWUsXG4gICAgICAgIHZpc2libGVPcHRpb25zID0gX3RoaXMkc3RhdGUudmlzaWJsZU9wdGlvbnMsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXg7XG5cbiAgICAgIC8vIFNvbWUgbWVzc3kgZGVzdHJ1Y3R1cmluZyBoZXJlIHRvIHJlbW92ZSBhcmlhLWxhYmVsL2Rlc2NyaWJlZGJ5IGZyb20gc2VhcmNoUHJvcHMgYW5kIGxpc3RQcm9wc1xuICAgICAgLy8gTWFkZSBtZXNzaWVyIGJ5IHNvbWUgVFMgcmVxdWlyZW1lbnRzXG4gICAgICAvLyBUaGUgYXJpYSBhdHRyaWJ1dGVzIGFyZSB0aGVuIHVzZWQgaW4gZ2V0QWNjZXNzaWJsZU5hbWUoKSB0byBwbGFjZSB0aGVtIHdoZXJlIHRoZXkgbmVlZCB0byBnb1xuICAgICAgdmFyIHVua25vd25BY2Nlc3NpYmxlTmFtZSA9IHtcbiAgICAgICAgJ2FyaWEtbGFiZWwnOiB1bmRlZmluZWQsXG4gICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgdmFyIF9yZWYyID0gc2VhcmNoUHJvcHMgfHwgdW5rbm93bkFjY2Vzc2libGVOYW1lLFxuICAgICAgICBzZWFyY2hBcmlhTGFiZWwgPSBfcmVmMlsnYXJpYS1sYWJlbCddLFxuICAgICAgICBzZWFyY2hBcmlhRGVzY3JpYmVkYnkgPSBfcmVmMlsnYXJpYS1kZXNjcmliZWRieSddLFxuICAgICAgICBwcm9wc09uQ2hhbmdlID0gX3JlZjIub25DaGFuZ2UsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF9yZWYyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgaW5wdXRSZWYgPSBfcmVmMi5pbnB1dFJlZixcbiAgICAgICAgY2xlYW5lZFNlYXJjaFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQyKTtcbiAgICAgIHZhciBfcmVmMyA9IGxpc3RQcm9wcyB8fCB1bmtub3duQWNjZXNzaWJsZU5hbWUsXG4gICAgICAgIGxpc3RBcmlhTGFiZWwgPSBfcmVmM1snYXJpYS1sYWJlbCddLFxuICAgICAgICBsaXN0QXJpYURlc2NyaWJlZGJ5ID0gX3JlZjNbJ2FyaWEtZGVzY3JpYmVkYnknXSxcbiAgICAgICAgaXNWaXJ0dWFsaXplZCA9IF9yZWYzLmlzVmlydHVhbGl6ZWQsXG4gICAgICAgIHJvd0hlaWdodCA9IF9yZWYzLnJvd0hlaWdodCxcbiAgICAgICAgY2xlYW5lZExpc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMywgX2V4Y2x1ZGVkMyk7XG4gICAgICB2YXIgdmlydHVhbGl6ZWRQcm9wcztcbiAgICAgIGlmIChpc1ZpcnR1YWxpemVkID09PSBmYWxzZSkge1xuICAgICAgICB2aXJ0dWFsaXplZFByb3BzID0ge1xuICAgICAgICAgIGlzVmlydHVhbGl6ZWQ6IGlzVmlydHVhbGl6ZWRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAocm93SGVpZ2h0ICE9IG51bGwpIHtcbiAgICAgICAgdmlydHVhbGl6ZWRQcm9wcyA9IHtcbiAgICAgICAgICByb3dIZWlnaHQ6IHJvd0hlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlJywgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVNlbGVjdGFibGUsIGhlaWdodCA9PT0gJ2Z1bGwnICYmIHN0eWxlcy5mdWxsSGVpZ2h0XTtcblxuICAgICAgLyoqIENyZWF0ZSBtZXNzYWdlIGNvbnRlbnQgdGhhdCByZXBsYWNlcyB0aGUgbGlzdCBpZiBubyBvcHRpb25zIGFyZSBhdmFpbGFibGUgKHlldCkgKi9cbiAgICAgIHZhciBtZXNzYWdlQ29udGVudDtcbiAgICAgIGlmIChlcnJvck1lc3NhZ2UgIT0gbnVsbCkge1xuICAgICAgICBtZXNzYWdlQ29udGVudCA9IHR5cGVvZiBlcnJvck1lc3NhZ2UgPT09ICdzdHJpbmcnID8gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgZXJyb3JNZXNzYWdlKSA6IGVycm9yTWVzc2FnZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgIGlmIChsb2FkaW5nTWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBsb2FkaW5nTWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpTG9hZGluZ1NwaW5uZXIsIHtcbiAgICAgICAgICAgIHNpemU6IFwibVwiXG4gICAgICAgICAgfSksIF9fX0Vtb3Rpb25KU1goRXVpU3BhY2VyLCB7XG4gICAgICAgICAgICBzaXplOiBcInhzXCJcbiAgICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgbG9hZGluZ01lc3NhZ2UgfHwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlLmxvYWRpbmdPcHRpb25zXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIkxvYWRpbmcgb3B0aW9uc1wiXG4gICAgICAgICAgfSkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQobG9hZGluZ01lc3NhZ2UsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaWQ6IHRoaXMubWVzc2FnZUNvbnRlbnRJZFxuICAgICAgICAgIH0sIGxvYWRpbmdNZXNzYWdlLnByb3BzKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2VhcmNoVmFsdWUgJiYgdmlzaWJsZU9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChub01hdGNoZXNNZXNzYWdlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG5vTWF0Y2hlc01lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBub01hdGNoZXNNZXNzYWdlIHx8IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5ub01hdGNoaW5nT3B0aW9uc1wiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJ7c2VhcmNoVmFsdWV9IGRvZXNuJ3QgbWF0Y2ggYW55IG9wdGlvbnNcIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBzZWFyY2hWYWx1ZTogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWFyY2hWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KG5vTWF0Y2hlc01lc3NhZ2UsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaWQ6IHRoaXMubWVzc2FnZUNvbnRlbnRJZFxuICAgICAgICAgIH0sIG5vTWF0Y2hlc01lc3NhZ2UucHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGVtcHR5TWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBlbXB0eU1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBlbXB0eU1lc3NhZ2UgfHwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlLm5vQXZhaWxhYmxlT3B0aW9uc1wiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJObyBvcHRpb25zIGF2YWlsYWJsZVwiXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChlbXB0eU1lc3NhZ2UsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaWQ6IHRoaXMubWVzc2FnZUNvbnRlbnRJZFxuICAgICAgICAgIH0sIGVtcHR5TWVzc2FnZS5wcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlcmUgYXJlIGxvdHMgb2Ygd2F5cyB0byBhZGQgYW4gYWNjZXNzaWJsZSBuYW1lXG4gICAgICAgKiBVc3VhbGx5IHdlIHdhbnQgdGhlIHNhbWUgbmFtZSBmb3IgdGhlIGlucHV0IGFuZCB0aGUgbGlzdGJveCAod2hpY2ggaXMgYWRkZWQgYnkgYXJpYS1sYWJlbC9kZXNjcmliZWRieSlcbiAgICAgICAqIEJ1dCB5b3UgY2FuIGFsd2F5cyBvdmVycmlkZSBpdCB1c2luZyBzZWFyY2hQcm9wcyBvciBsaXN0UHJvcHNcbiAgICAgICAqIFRoaXMgZmluZHMgdGhlIGNvcnJlY3QgbmFtZSB0byB1c2VcbiAgICAgICAqXG4gICAgICAgKiBUT0RPOiBUaGlzIGRvZXNuJ3QgaGFuZGxlIGJlaW5nIGxhYmVsbGVkICg8bGFiZWwgZm9yPVwiaWRPZklucHV0XCI+KVxuICAgICAgICovXG4gICAgICB2YXIgZ2V0QWNjZXNzaWJsZU5hbWUgPSBmdW5jdGlvbiBnZXRBY2Nlc3NpYmxlTmFtZShwcm9wcywgbWVzc2FnZUNvbnRlbnRJZCkge1xuICAgICAgICBpZiAocHJvcHMgJiYgcHJvcHNbJ2FyaWEtbGFiZWwnXSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6IHByb3BzWydhcmlhLWxhYmVsJ11cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHZhciBtZXNzYWdlQ29udGVudElkU3RyaW5nID0gbWVzc2FnZUNvbnRlbnRJZCA/IFwiIFwiLmNvbmNhdChtZXNzYWdlQ29udGVudElkKSA6ICcnO1xuICAgICAgICBpZiAocHJvcHMgJiYgcHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IFwiXCIuY29uY2F0KHByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J10pLmNvbmNhdChtZXNzYWdlQ29udGVudElkU3RyaW5nKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyaWFMYWJlbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyaWFEZXNjcmliZWRieSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IFwiXCIuY29uY2F0KGFyaWFEZXNjcmliZWRieSkuY29uY2F0KG1lc3NhZ2VDb250ZW50SWRTdHJpbmcpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge307XG4gICAgICB9O1xuICAgICAgdmFyIHNlYXJjaEFjY2Vzc2libGVOYW1lID0gZ2V0QWNjZXNzaWJsZU5hbWUoc2VhcmNoUHJvcHMsIHRoaXMubWVzc2FnZUNvbnRlbnRJZCk7XG4gICAgICB2YXIgc2VhcmNoSGFzQWNjZXNzaWJsZU5hbWUgPSBCb29sZWFuKE9iamVjdC5rZXlzKHNlYXJjaEFjY2Vzc2libGVOYW1lKS5sZW5ndGgpO1xuICAgICAgdmFyIHNlYXJjaCA9IHNlYXJjaGFibGUgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW5zOiBbJ2V1aVNlbGVjdGFibGUuc2NyZWVuUmVhZGVySW5zdHJ1Y3Rpb25zJywgJ2V1aVNlbGVjdGFibGUucGxhY2Vob2xkZXJOYW1lJ10sXG4gICAgICAgIGRlZmF1bHRzOiBbJ1VzZSB0aGUgVXAgYW5kIERvd24gYXJyb3cga2V5cyB0byBtb3ZlIGZvY3VzIG92ZXIgb3B0aW9ucy4gUHJlc3MgRW50ZXIgdG8gc2VsZWN0LiBQcmVzcyBFc2NhcGUgdG8gY29sbGFwc2Ugb3B0aW9ucy4nLCAnRmlsdGVyIG9wdGlvbnMnXVxuICAgICAgfSwgZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgICAgIHZhciBfcmVmNSA9IF9zbGljZWRUb0FycmF5KF9yZWY0LCAyKSxcbiAgICAgICAgICBzY3JlZW5SZWFkZXJJbnN0cnVjdGlvbnMgPSBfcmVmNVswXSxcbiAgICAgICAgICBwbGFjZWhvbGRlck5hbWUgPSBfcmVmNVsxXTtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpU2VsZWN0YWJsZVNlYXJjaCwgX2V4dGVuZHMoe1xuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBsaXN0QXJpYURlc2NyaWJlZGJ5SWQsXG4gICAgICAgICAga2V5OiBcImxpc3RTZWFyY2hcIixcbiAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICBvbkNoYW5nZTogX3RoaXMyLm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIGxpc3RJZDogX3RoaXMyLm9wdGlvbnNMaXN0UmVmLmN1cnJlbnQgPyBfdGhpczIubGlzdElkIDogdW5kZWZpbmVkIC8vIE9ubHkgcGFzcyB0aGUgbGlzdElkIGlmIGl0IGV4aXN0cyBvbiB0aGUgcGFnZVxuICAgICAgICAgICxcbiAgICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBfdGhpczIubWFrZU9wdGlvbklkKGFjdGl2ZU9wdGlvbkluZGV4KSAvLyB0aGUgY3VycmVudCBmYXV4LWZvY3VzZWQgb3B0aW9uXG4gICAgICAgICAgLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlck5hbWUsXG4gICAgICAgICAgaXNQcmVGaWx0ZXJlZDogISFpc1ByZUZpbHRlcmVkLFxuICAgICAgICAgIG9wdGlvbk1hdGNoZXI6IG9wdGlvbk1hdGNoZXIsXG4gICAgICAgICAgaW5wdXRSZWY6IGZ1bmN0aW9uIGlucHV0UmVmKG5vZGUpIHtcbiAgICAgICAgICAgIHZhciBfc2VhcmNoUHJvcHMkaW5wdXRSZWY7XG4gICAgICAgICAgICBfdGhpczIuaW5wdXRSZWYgPSBub2RlO1xuICAgICAgICAgICAgc2VhcmNoUHJvcHMgPT09IG51bGwgfHwgc2VhcmNoUHJvcHMgPT09IHZvaWQgMCB8fCAoX3NlYXJjaFByb3BzJGlucHV0UmVmID0gc2VhcmNoUHJvcHMuaW5wdXRSZWYpID09PSBudWxsIHx8IF9zZWFyY2hQcm9wcyRpbnB1dFJlZiA9PT0gdm9pZCAwIHx8IF9zZWFyY2hQcm9wcyRpbnB1dFJlZi5jYWxsKHNlYXJjaFByb3BzLCBub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHNlYXJjaEhhc0FjY2Vzc2libGVOYW1lID8gc2VhcmNoQWNjZXNzaWJsZU5hbWUgOiB7XG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBwbGFjZWhvbGRlck5hbWVcbiAgICAgICAgfSwgY2xlYW5lZFNlYXJjaFByb3BzKSksIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgIGlkOiBsaXN0QXJpYURlc2NyaWJlZGJ5SWRcbiAgICAgICAgfSwgc2VsZWN0YWJsZVNjcmVlblJlYWRlclRleHQsIFwiIFwiLCBzY3JlZW5SZWFkZXJJbnN0cnVjdGlvbnMpKSk7XG4gICAgICB9KSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciByZXN1bHRzTGVuZ3RoID0gdmlzaWJsZU9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuICFvcHRpb24uZGlzYWJsZWQ7XG4gICAgICB9KS5sZW5ndGg7XG4gICAgICB2YXIgbGlzdFNjcmVlblJlYWRlclN0YXR1cyA9IHNlYXJjaGFibGUgJiYgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUuc2VhcmNoUmVzdWx0c1wiLFxuICAgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdChfcmVmNikge1xuICAgICAgICAgIHZhciByZXN1bHRzTGVuZ3RoID0gX3JlZjYucmVzdWx0c0xlbmd0aDtcbiAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQocmVzdWx0c0xlbmd0aCwgXCIgcmVzdWx0XCIpLmNvbmNhdChyZXN1bHRzTGVuZ3RoID09PSAxID8gJycgOiAncycsIFwiIGF2YWlsYWJsZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgcmVzdWx0c0xlbmd0aDogcmVzdWx0c0xlbmd0aFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHZhciBsaXN0QXJpYURlc2NyaWJlZGJ5SWQgPSB0aGlzLnJvb3RJZCgnaW5zdHJ1Y3Rpb25zJyk7XG4gICAgICB2YXIgbGlzdEFjY2Vzc2libGVOYW1lID0gZ2V0QWNjZXNzaWJsZU5hbWUobGlzdFByb3BzLCBsaXN0QXJpYURlc2NyaWJlZGJ5SWQpO1xuICAgICAgdmFyIGxpc3RIYXNBY2Nlc3NpYmxlTmFtZSA9IEJvb2xlYW4oT2JqZWN0LmtleXMobGlzdEFjY2Vzc2libGVOYW1lKS5sZW5ndGgpO1xuICAgICAgdmFyIGxpc3QgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5wbGFjZWhvbGRlck5hbWVcIixcbiAgICAgICAgZGVmYXVsdDogXCJGaWx0ZXIgb3B0aW9uc1wiXG4gICAgICB9LCBmdW5jdGlvbiAocGxhY2Vob2xkZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBzZWFyY2hhYmxlICYmIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyTGl2ZSwge1xuICAgICAgICAgIGlzQWN0aXZlOiBtZXNzYWdlQ29udGVudCAhPSBudWxsIHx8IGFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGxcbiAgICAgICAgfSwgbWVzc2FnZUNvbnRlbnQgfHwgbGlzdFNjcmVlblJlYWRlclN0YXR1cyksIG1lc3NhZ2VDb250ZW50ID8gX19fRW1vdGlvbkpTWChFdWlTZWxlY3RhYmxlTWVzc2FnZSwge1xuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJldWlTZWxlY3RhYmxlTWVzc2FnZVwiLFxuICAgICAgICAgIGlkOiBfdGhpczIubWVzc2FnZUNvbnRlbnRJZCxcbiAgICAgICAgICBib3JkZXJlZDogbGlzdFByb3BzICYmIGxpc3RQcm9wcy5ib3JkZXJlZFxuICAgICAgICB9LCBtZXNzYWdlQ29udGVudCkgOiBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVMaXN0LCBfZXh0ZW5kcyh7XG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aVNlbGVjdGFibGVMaXN0XCIsXG4gICAgICAgICAga2V5OiBcImxpc3RcIixcbiAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHZpc2libGVPcHRpb25zOiB2aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgaXNQcmVGaWx0ZXJlZDogaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgc2V0QWN0aXZlT3B0aW9uSW5kZXg6IGZ1bmN0aW9uIHNldEFjdGl2ZU9wdGlvbkluZGV4KGluZGV4LCBjYikge1xuICAgICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IGluZGV4XG4gICAgICAgICAgICB9LCBjYik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrOiBfdGhpczIub25PcHRpb25DbGljayxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb246IHNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICByZWY6IF90aGlzMi5vcHRpb25zTGlzdFJlZixcbiAgICAgICAgICByZW5kZXJPcHRpb246IHJlbmRlck9wdGlvbixcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICBhbGxvd0V4Y2x1c2lvbnM6IGFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgICBzZWFyY2hhYmxlOiBzZWFyY2hhYmxlLFxuICAgICAgICAgIG1ha2VPcHRpb25JZDogX3RoaXMyLm1ha2VPcHRpb25JZCxcbiAgICAgICAgICBsaXN0SWQ6IF90aGlzMi5saXN0SWRcbiAgICAgICAgfSwgbGlzdEhhc0FjY2Vzc2libGVOYW1lID8gbGlzdEFjY2Vzc2libGVOYW1lIDogc2VhcmNoYWJsZSAmJiB7XG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBwbGFjZWhvbGRlck5hbWVcbiAgICAgICAgfSwgY2xlYW5lZExpc3RQcm9wcywgdmlydHVhbGl6ZWRQcm9wcykpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IHRoaXMuY29udGFpbmVyUmVmLFxuICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBvbktleURvd246IHRoaXMub25LZXlEb3duLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25Db250YWluZXJCbHVyLFxuICAgICAgICBvbkZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIG9uTW91c2VEb3duOiB0aGlzLm9uTW91c2VEb3duXG4gICAgICB9LCByZXN0KSwgY2hpbGRyZW4gJiYgY2hpbGRyZW4obGlzdCwgc2VhcmNoKSk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFyIF9zdGF0ZVVwZGF0ZSRzZWFyY2hWYTtcbiAgICAgIHZhciBvcHRpb25zID0gbmV4dFByb3BzLm9wdGlvbnMsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQgPSBuZXh0UHJvcHMuaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgc2VhcmNoUHJvcHMgPSBuZXh0UHJvcHMuc2VhcmNoUHJvcHMsXG4gICAgICAgIG9wdGlvbk1hdGNoZXIgPSBuZXh0UHJvcHMub3B0aW9uTWF0Y2hlcjtcbiAgICAgIHZhciBhY3RpdmVPcHRpb25JbmRleCA9IHByZXZTdGF0ZS5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgc2VhcmNoVmFsdWUgPSBwcmV2U3RhdGUuc2VhcmNoVmFsdWU7XG4gICAgICB2YXIgc3RhdGVVcGRhdGUgPSB7XG4gICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IGFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICB9O1xuICAgICAgaWYgKChzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VhcmNoUHJvcHMudmFsdWUpICE9IG51bGwgJiYgc2VhcmNoUHJvcHMudmFsdWUgIT09IHNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHN0YXRlVXBkYXRlLnNlYXJjaFZhbHVlID0gc2VhcmNoUHJvcHMudmFsdWU7XG4gICAgICB9XG4gICAgICBzdGF0ZVVwZGF0ZS52aXNpYmxlT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyh7XG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIHNlYXJjaFZhbHVlOiAoX3N0YXRlVXBkYXRlJHNlYXJjaFZhID0gc3RhdGVVcGRhdGUuc2VhcmNoVmFsdWUpICE9PSBudWxsICYmIF9zdGF0ZVVwZGF0ZSRzZWFyY2hWYSAhPT0gdm9pZCAwID8gX3N0YXRlVXBkYXRlJHNlYXJjaFZhIDogJycsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQ6ICEhaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBbXSxcbiAgICAgICAgb3B0aW9uTWF0Y2hlcjogb3B0aW9uTWF0Y2hlclxuICAgICAgfSk7XG4gICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbCAmJiBhY3RpdmVPcHRpb25JbmRleCA+PSBzdGF0ZVVwZGF0ZS52aXNpYmxlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGVVcGRhdGUuYWN0aXZlT3B0aW9uSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZVVwZGF0ZTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlTZWxlY3RhYmxlLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIG9wdGlvbnM6IFtdLFxuICBzaW5nbGVTZWxlY3Rpb246IGZhbHNlLFxuICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgaXNQcmVGaWx0ZXJlZDogZmFsc2UsXG4gIG9wdGlvbk1hdGNoZXI6IGNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIoKVxufSk7XG5FdWlTZWxlY3RhYmxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogSG9va3MgdXAgYSBzZWFyY2ggYm94IHRvIGZpbHRlciB0aGUgbGlzdCAoYm9vbGVhbilcbiAgICAgICAqL1xuICBzZWFyY2hhYmxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAgICogUGFzc2VzIHByb3BzIGRvd24gdG8gdGhlIGBFdWlGaWVsZFNlYXJjaGAuXG4gICAgICAgKiBTZWUgI0V1aVNlbGVjdGFibGVTZWFyY2hQcm9wc1xuICAgICAgICovXG4gIHNlYXJjaFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIEZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIGBsaXN0YCBub2RlIGFuZCB0aGVuXG4gICAgICAgKiB0aGUgYHNlYXJjaGAgbm9kZSAoaWYgYHNlYXJjaGFibGVgIGlzIGFwcGxpZWQpXG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgICAqIEFycmF5IG9mIEV1aVNlbGVjdGFibGVPcHRpb24gb2JqZWN0cy4gU2VlICNFdWlTZWxlY3RhYmxlT3B0aW9uUHJvcHNcbiAgICAgICAqL1xuICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgYGJvb2xlYW5gLlxuICAgICAgICogU2V0IHRvIGB0cnVlYCB0byBpbmRpY2F0ZSBvYmplY3QgaXMganVzdCBhIGdyb3VwaW5nIGxhYmVsLCBub3QgYSBzZWxlY3RhYmxlIGl0ZW1cbiAgICAgICAqL1xuICAgIGlzR3JvdXBMYWJlbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBWaXNpYmxlIGxhYmVsIG9mIG9wdGlvbi5cbiAgICAgICAqIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBpdGVtcyBpZiBga2V5YCBpcyBub3Qgc3VwcGxpZWRcbiAgICAgICAqL1xuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWxseSBjaGFuZ2UgdGhlIHNlYXJjaGFibGUgdGVybSBieSBwYXNzaW5nIGEgZGlmZmVyZW50IHN0cmluZyBvdGhlciB0aGFuIHRoZSBgbGFiZWxgLlxuICAgICAgICogQmVzdCB1c2VkIHdoZW4gY3JlYXRpbmcgYSBjdXN0b20gYG9wdGlvblJlbmRlcmAgdG8gc2VwYXJhdGUgdGhlIGxhYmVsIGZyb20gbWV0YWRhdGEgYnV0IGFsbG93aW5nIHRvIHNlYXJjaCBvbiBib3RoXG4gICAgICAgKi9cbiAgICBzZWFyY2hhYmxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLyoqXG4gICAgICAgKiBNdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgaXRlbXMuXG4gICAgICAgKiBXaWxsIGJlIHVzZWQgdG8gbWF0Y2ggb3B0aW9ucyBpbnN0ZWFkIG9mIGBsYWJlbGBcbiAgICAgICAqL1xuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvKipcbiAgICAgICAqIExlYXZlIGB1bmRlZmluZWRgIHRvIGluZGljYXRlIG5vdCBzZWxlY3RlZC4gUGFzcyBhIHN0cmluZyBvZlxuICAgICAgICogJ29uJyB0byBpbmRpY2F0ZSBpbmNsdXNpb24sICdvZmYnIHRvIGluZGljYXRlIGV4Y2x1c2lvbixcbiAgICAgICAqIG9yICdtaXhlZCcgdG8gaW5kaWNhdGUgaW5jbHVzaW9uIGZvciBzb21lLlxuICAgICAgICovXG4gICAgY2hlY2tlZDogUHJvcFR5cGVzLmFueSxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBOb2RlIHRvIGFkZCBiZXR3ZWVuIHRoZSBzZWxlY3Rpb24gaWNvbiBhbmQgdGhlIGxhYmVsXG4gICAgICAgKi9cbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAvKipcbiAgICAgICAqIE5vZGUgdG8gYWRkIHRvIHRoZSBmYXIgcmlnaHQgb2YgdGhlIGl0ZW1cbiAgICAgICAqL1xuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgcmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbiBkYXRhIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgYHJlbmRlck9wdGlvbnNgIGVsZW1lbnQuXG4gICAgICAgKiBCeXBhc3MgYEV1aVNlbGVjdGFibGVJdGVtYCBhbmQgYXZvaWQgRE9NIGF0dHJpYnV0ZSB3YXJuaW5ncy5cbiAgICAgICAqL1xuICAgIGRhdGE6IFByb3BUeXBlcy5zaGFwZSh7fSksXG4gICAgLyoqXG4gICAgICAgKiBIb3cgdG8gaGFuZGxlIGxvbmcgdGV4dCB3aXRoaW4gdGhlIGl0ZW0uXG4gICAgICAgKiBXcmFwcGluZyBvbmx5IHdvcmtzIGlmIGBpc1ZpcnR1YWxpemF0aW9uYCBpcyBmYWxzZS5cbiAgICAgICAqIEBkZWZhdWx0ICd0cnVuY2F0ZSdcbiAgICAgICAqL1xuICAgIHRleHRXcmFwOiBQcm9wVHlwZXMub25lT2YoW1widHJ1bmNhdGVcIiwgXCJ3cmFwXCJdKSxcbiAgICAvKipcbiAgICAgICAqIElmIHRleHRXcmFwIGlzIHNldCB0byBgdHJ1bmNhdGVgLCB5b3UgY2FuIHBhc3MgYSBjdXN0b20gdHJ1bmNhdGlvbiBjb25maWd1cmF0aW9uXG4gICAgICAgKiB0aGF0IGFjY2VwdHMgYW55IFtFdWlUZXh0VHJ1bmNhdGVdKC8jL3V0aWxpdGllcy90ZXh0LXRydW5jYXRpb24pIHByb3AgZXhjZXB0IGZvclxuICAgICAgICogYHRleHRgIGFuZCBgY2hpbGRyZW5gLlxuICAgICAgICpcbiAgICAgICAqIE5vdGU6IHdoZW4gc2VhcmNoaW5nLCBjdXN0b20gdHJ1bmNhdGlvbiBwcm9wcyBhcmUgaWdub3JlZC4gVGhlIGhpZ2hsaWdodGVkIHNlYXJjaFxuICAgICAgICogdGV4dCB3aWxsIGFsd2F5cyB0YWtlIHByZWNlZGVuY2UuXG4gICAgICAgKi9cbiAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBjdXN0b20gdG9vbHRpcCBjb250ZW50IGZvciB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBwcm9wcyB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nICoqW0V1aVRvb2xUaXBdKC8jL2Rpc3BsYXkvdG9vbHRpcCkqKlxuICAgICAgICovXG4gICAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAgICogUGFzc2VzIGJhY2sgdGhlIGFsdGVyZWQgYG9wdGlvbnNgIGFycmF5IHdpdGggc2VsZWN0ZWQgb3B0aW9ucyBoYXZpbmcgYGNoZWNrZWQ6ICdvbidgLlxuICAgICAgICogQWxzbyBwYXNzZXMgYmFjayB0aGUgUmVhY3QgY2xpY2sva2V5Ym9hcmQgZXZlbnQgYXMgYSBzZWNvbmQgYXJndW1lbnQsXG4gICAgICAgKiBhbmQgdGhlIG9wdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgb25DaGFuZ2UgZXZlbnQgYXMgYSB0aGlyZCBhcmd1bWVudC5cbiAgICAgICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAgICogUGFzc2VzIGJhY2sgdGhlIGN1cnJlbnQgYWN0aXZlIG9wdGlvbiB3aGVuZXZlciB0aGUgdXNlciBjaGFuZ2VzIHRoZSBjdXJyZW50bHlcbiAgICAgICAqIGhpZ2hsaWdodGVkIG9wdGlvbiB2aWEga2V5Ym9hcmQgbmF2aWdhdGlvbiBvciBzZWFyY2hpbmcuXG4gICAgICAgKi9cbiAgb25BY3RpdmVPcHRpb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgICAqIFNldHMgdGhlIHNpbmdsZSBzZWxlY3Rpb24gcG9saWN5IG9mXG4gICAgICAgKiBgZmFsc2VgOiBhbGxvd3MgbXVsdGlwbGUgc2VsZWN0aW9uXG4gICAgICAgKiBgdHJ1ZWA6IG9ubHkgYWxsb3dzIG9uZSBzZWxlY3Rpb25cbiAgICAgICAqIGBhbHdheXNgOiBjYW4gYW5kIG11c3QgaGF2ZSBvbmx5IG9uZSBzZWxlY3Rpb25cbiAgICAgICAqL1xuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhbHdheXNcIl0pLCBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogQWxsb3dzIG1hcmtpbmcgb3B0aW9ucyBhcyBgY2hlY2tlZD0nb2ZmJ2AgYXMgd2VsbCBhcyBgJ29uJ2BcbiAgICAgICAqL1xuICBhbGxvd0V4Y2x1c2lvbnM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIFNob3cgYW4gbG9hZGluZyBpbmRpY2F0b3Igd2hpbGUgeW91IGxvYWQgYW5kIGhvb2sgdXAgeW91ciBkYXRhXG4gICAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBTZXRzIHRoZSBtYXggaGVpZ2h0IGluIHBpeGVscyBvciBwYXNzIGBmdWxsYCB0byBhbGxvd1xuICAgICAgICogdGhlIHdob2xlIGdyb3VwIHRvIGZpbGwgdGhlIGhlaWdodCBvZiBpdHMgY29udGFpbmVyIGFuZFxuICAgICAgICogYWxsb3dzIHRoZSBsaXN0IGdyb3cgYXMgd2VsbFxuICAgICAgICovXG4gIGhlaWdodDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW1wiZnVsbFwiXSldKSxcbiAgLyoqXG4gICAgICAgKiBTZWUgI0V1aVNlbGVjdGFibGVPcHRpb25zTGlzdFxuICAgICAgICovXG4gIGxpc3RQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBDdXN0b20gcmVuZGVyIGZ1bmN0aW9uIGZvciBlYWNoIG9wdGlvbi5cbiAgICAgICAqIFJldHVybnMgYChvcHRpb24sIHNlYXJjaFZhbHVlKWBcbiAgICAgICAqL1xuICByZW5kZXJPcHRpb246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgICAqIEN1c3RvbWl6ZSB0aGUgbG9hZGluZyBtZXNzYWdlLiBQYXNzIGEgc3RyaW5nIHRvIHNpbXBseSBjaGFuZ2UgdGhlIHRleHQsXG4gICAgICAgKiBvciBhIG5vZGUgdG8gcmVwbGFjZSB0aGUgd2hvbGUgY29udGVudC5cbiAgICAgICAqL1xuICBsb2FkaW5nTWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogQ3VzdG9taXplIHRoZSBubyBtYXRjaGVzIG1lc3NhZ2UuIFBhc3MgYSBzdHJpbmcgdG8gc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCxcbiAgICAgICAqIG9yIGEgbm9kZSB0byByZXBsYWNlIHRoZSB3aG9sZSBjb250ZW50LlxuICAgICAgICovXG4gIG5vTWF0Y2hlc01lc3NhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIEN1c3RvbWl6ZSB0aGUgZW1wdHkgbWVzc2FnZS4gUGFzcyBhIHN0cmluZyB0byBzaW1wbHkgY2hhbmdlIHRoZSB0ZXh0LFxuICAgICAgICogb3IgYSBub2RlIHRvIHJlcGxhY2UgdGhlIHdob2xlIGNvbnRlbnQuXG4gICAgICAgKi9cbiAgZW1wdHlNZXNzYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBBZGQgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICAgICAqIFRoZSBtZXNzYWdlIHdpbGwgYmUgc2hvd24gd2hlbiB0aGUgdmFsdWUgaXMgbm90IGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAgICAgICAqIFBhc3MgYSBzdHJpbmcgdG8gc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCwgb3IgYSBub2RlIHRvIHJlcGxhY2UgdGhlIHdob2xlIGNvbnRlbnQuXG4gICAgICAgKlxuICAgICAgICogYGVycm9yTWVzc2FnZT17aGFzRXJyb3JzID8gJ015IGVycm9yIG1lc3NhZ2UnIDogbnVsbH1gXG4gICAgICAgKi9cbiAgZXJyb3JNZXNzYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSksXG4gIC8qKlxuICAgICAgICogQ29udHJvbCB3aGV0aGVyIG9yIG5vdCBvcHRpb25zIGdldCBmaWx0ZXJlZCBpbnRlcm5hbGx5IChpLmUuLCB3aGV0aGVyIGZpbHRlcmluZyBpc1xuICAgICAgICogaGFuZGxlZCBieSBFVUkgb3IgYnkgeW91LCB0aGUgY29uc3VtZXIpLlxuICAgICAgICogSWYgc2V0IHRvIGB0cnVlYCwgYWxsIHBhc3NlZCBgb3B0aW9uc2Agd2lsbCBiZSBkaXNwbGF5ZWQgcmVnYXJkbGVzcyBvZiB0aGUgdXNlcidzXG4gICAgICAgKiBzZWFyY2ggaW5wdXQuXG4gICAgICAgKlxuICAgICAgICogQWRkaXRpb25hbGx5IGFsbG93cyBwYXNzaW5nIGEgY29uZmlndXJhdGlvbiBvYmplY3Qgd2hpY2ggZW5hYmxlcyB0dXJuaW5nIG9mZlxuICAgICAgICogc2VhcmNoIGhpZ2hsaWdodGluZyBpZiBuZWVkZWQuXG4gICAgICAgKlxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICBpc1ByZUZpbHRlcmVkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhpZ2hsaWdodFNlYXJjaDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIE9wdGlvbmFsIHNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zIHRvIGFubm91bmNlIHVwb24gZm9jdXMvaW50ZXJhY3Rpb24uIFRoaXMgdGV4dCBpcyByZWFkIG91dFxuICAgICAgICogYWZ0ZXIgdGhlIGBFdWlTZWxlY3RhYmxlYCBsYWJlbCBhbmQgYSBicmllZiBwYXVzZSwgYnV0IGJlZm9yZSB0aGUgZGVmYXVsdCBrZXlib2FyZCBpbnN0cnVjdGlvbnMgZm9yXG4gICAgICAgKiBpbnRlcmFjdGluZyB3aXRoIGEgc2VsZWN0YWJsZSBhcmUgcmVhZCBvdXQuXG4gICAgICAgKi9cbiAgc2VsZWN0YWJsZVNjcmVlblJlYWRlclRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAgICogT3B0aW9uYWwgY3VzdG9tIG9wdGlvbiBtYXRjaGVyIGZ1bmN0aW9uXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqIGNvbnN0IGV4YWN0RXF1YWxpdHlNYXRjaGVyOiBFdWlTZWxlY3RhYmxlT3B0aW9uTWF0Y2hlciA9ICh7IG9wdGlvbiwgc2VhcmNoVmFsdWUgfSkgPT4ge1xuICAgICAgICogICByZXR1cm4gb3B0aW9uLmxhYmVsID09PSBzZWFyY2hWYWx1ZTtcbiAgICAgICAqIH1cbiAgICAgICAqL1xuICBvcHRpb25NYXRjaGVyOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcIm9uQ2hhbmdlXCIsIFwib3B0aW9uc1wiLCBcInZhbHVlXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJpc1ByZUZpbHRlcmVkXCIsIFwibGlzdElkXCIsIFwiY2xhc3NOYW1lXCIsIFwib3B0aW9uTWF0Y2hlclwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlGaWVsZFNlYXJjaCB9IGZyb20gJy4uLy4uL2Zvcm0nO1xuaW1wb3J0IHsgZ2V0TWF0Y2hpbmdPcHRpb25zIH0gZnJvbSAnLi4vbWF0Y2hpbmdfb3B0aW9ucyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlU2VhcmNoID0gZnVuY3Rpb24gRXVpU2VsZWN0YWJsZVNlYXJjaChfcmVmKSB7XG4gIHZhciBvbkNoYW5nZUNhbGxiYWNrID0gX3JlZi5vbkNoYW5nZSxcbiAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcbiAgICBwbGFjZWhvbGRlciA9IF9yZWYucGxhY2Vob2xkZXIsXG4gICAgaXNQcmVGaWx0ZXJlZCA9IF9yZWYuaXNQcmVGaWx0ZXJlZCxcbiAgICBsaXN0SWQgPSBfcmVmLmxpc3RJZCxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBvcHRpb25NYXRjaGVyID0gX3JlZi5vcHRpb25NYXRjaGVyLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgc2VhcmNoVmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICB2YXIgbWF0Y2hpbmdPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKHtcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICBpc1ByZUZpbHRlcmVkOiBpc1ByZUZpbHRlcmVkLFxuICAgICAgb3B0aW9uTWF0Y2hlcjogb3B0aW9uTWF0Y2hlclxuICAgIH0pO1xuICAgIG9uQ2hhbmdlQ2FsbGJhY2soc2VhcmNoVmFsdWUsIG1hdGNoaW5nT3B0aW9ucyk7XG4gIH0sIFtvcHRpb25zLCBpc1ByZUZpbHRlcmVkLCBvbkNoYW5nZUNhbGxiYWNrLCBvcHRpb25NYXRjaGVyXSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZVNlYXJjaCcsIGNsYXNzTmFtZSk7XG4gIHZhciBhcmlhUHJvcHNJZkxpc3RJc1ByZXNlbnQgPSBsaXN0SWQgPyB7XG4gICAgcm9sZTogJ2NvbWJvYm94JyxcbiAgICAnYXJpYS1hdXRvY29tcGxldGUnOiAnbGlzdCcsXG4gICAgJ2FyaWEtZXhwYW5kZWQnOiB0cnVlLFxuICAgICdhcmlhLWNvbnRyb2xzJzogbGlzdElkLFxuICAgICdhcmlhLW93bnMnOiBsaXN0SWQgLy8gbGVnYWN5IGF0dHJpYnV0ZSBidXQgc2hpbXMgc3VwcG9ydCBmb3IgbmVhcmx5IGV2ZXJ5dGhpbmcgYXRtXG4gIH0gOiB1bmRlZmluZWQ7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZpZWxkU2VhcmNoLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIGluY3JlbWVudGFsOiB0cnVlLFxuICAgIGZ1bGxXaWR0aDogdHJ1ZSxcbiAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gICAgXCJhcmlhLWhhc3BvcHVwXCI6IFwibGlzdGJveFwiXG4gIH0sIGFyaWFQcm9wc0lmTGlzdElzUHJlc2VudCwgcmVzdCkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxudmFyIGdldFNlYXJjaGFibGVMYWJlbCA9IGZ1bmN0aW9uIGdldFNlYXJjaGFibGVMYWJlbChvcHRpb24pIHtcbiAgdmFyIG5vcm1hbGl6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgdmFyIHNlYXJjaGFibGVMYWJlbCA9IG9wdGlvbi5zZWFyY2hhYmxlTGFiZWwgfHwgb3B0aW9uLmxhYmVsO1xuICByZXR1cm4gbm9ybWFsaXplID8gc2VhcmNoYWJsZUxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogc2VhcmNoYWJsZUxhYmVsO1xufTtcbnZhciBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlID0gZnVuY3Rpb24gZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShzZWFyY2hWYWx1ZSwgc2VsZWN0ZWRPcHRpb25zKSB7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmZpbmQoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIHJldHVybiBnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uKSA9PT0gbm9ybWFsaXplZFNlYXJjaFZhbHVlO1xuICB9KTtcbn07XG52YXIgY29sbGVjdE1hdGNoaW5nT3B0aW9uID0gZnVuY3Rpb24gY29sbGVjdE1hdGNoaW5nT3B0aW9uKF9yZWYpIHtcbiAgdmFyIHNlbGVjdGVkT3B0aW9ucyA9IF9yZWYuc2VsZWN0ZWRPcHRpb25zLFxuICAgIGlzUHJlRmlsdGVyZWQgPSBfcmVmLmlzUHJlRmlsdGVyZWQsXG4gICAgb3B0aW9uID0gX3JlZi5vcHRpb24sXG4gICAgYWNjdW11bGF0b3IgPSBfcmVmLmFjY3VtdWxhdG9yLFxuICAgIHNlYXJjaFZhbHVlID0gX3JlZi5zZWFyY2hWYWx1ZSxcbiAgICBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBfcmVmLm5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSxcbiAgICBvcHRpb25NYXRjaGVyID0gX3JlZi5vcHRpb25NYXRjaGVyO1xuICAvLyBEb24ndCBzaG93IG9wdGlvbnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQgaWZcbiAgLy8gdGhlIHNlbGVjdGVkT3B0aW9ucyBsaXN0IGV4aXN0c1xuICBpZiAoc2VsZWN0ZWRPcHRpb25zKSB7XG4gICAgdmFyIHNlbGVjdGVkT3B0aW9uID0gZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uLCBmYWxzZSksIHNlbGVjdGVkT3B0aW9ucyk7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgdGhlIG9wdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJlZmlsdGVyZWQgdGhlbiB3ZSBjYW4gc2tpcCBmaWx0ZXJpbmcgYWdhaW5zdCB0aGUgc2VhcmNoIHZhbHVlLlxuICAvLyBUT0RPOiBJIHN0aWxsIGRvbid0IHF1aXRlIHVuZGVyc3RhbmQgaG93IHRoaXMgd29ya3Mgd2hlbiBob29rZWQgdXAgdG8gYXN5bmNcbiAgaWYgKGlzUHJlRmlsdGVyZWQpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghbm9ybWFsaXplZFNlYXJjaFZhbHVlKSB7XG4gICAgYWNjdW11bGF0b3IucHVzaChvcHRpb24pO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgaXNNYXRjaGluZyA9IG9wdGlvbk1hdGNoZXIoe1xuICAgIG9wdGlvbjogb3B0aW9uLFxuICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICBub3JtYWxpemVkU2VhcmNoVmFsdWU6IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZVxuICB9KTtcbiAgaWYgKGlzTWF0Y2hpbmcpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gIH1cbn07XG5leHBvcnQgdmFyIGdldE1hdGNoaW5nT3B0aW9ucyA9IGZ1bmN0aW9uIGdldE1hdGNoaW5nT3B0aW9ucyhfcmVmMikge1xuICB2YXIgc2VhcmNoVmFsdWUgPSBfcmVmMi5zZWFyY2hWYWx1ZSxcbiAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICBpc1ByZUZpbHRlcmVkID0gX3JlZjIuaXNQcmVGaWx0ZXJlZCxcbiAgICBfcmVmMiRzZWxlY3RlZE9wdGlvbnMgPSBfcmVmMi5zZWxlY3RlZE9wdGlvbnMsXG4gICAgc2VsZWN0ZWRPcHRpb25zID0gX3JlZjIkc2VsZWN0ZWRPcHRpb25zID09PSB2b2lkIDAgPyBbXSA6IF9yZWYyJHNlbGVjdGVkT3B0aW9ucyxcbiAgICBvcHRpb25NYXRjaGVyID0gX3JlZjIub3B0aW9uTWF0Y2hlcjtcbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBtYXRjaGluZ09wdGlvbnMgPSBbXTtcbiAgb3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICBjb2xsZWN0TWF0Y2hpbmdPcHRpb24oe1xuICAgICAgYWNjdW11bGF0b3I6IG1hdGNoaW5nT3B0aW9ucyxcbiAgICAgIG9wdGlvbjogb3B0aW9uLFxuICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgbm9ybWFsaXplZFNlYXJjaFZhbHVlOiBub3JtYWxpemVkU2VhcmNoVmFsdWUsXG4gICAgICBpc1ByZUZpbHRlcmVkOiBpc1ByZUZpbHRlcmVkLFxuICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICBvcHRpb25NYXRjaGVyOiBvcHRpb25NYXRjaGVyXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gbWF0Y2hpbmdPcHRpb25zO1xufTtcblxuLyoqXG4gKiBQYXJ0aWFsIHN0cmluZyBlcXVhbGl0eSBvcHRpb24gbWF0Y2hlciBmb3IgRXVpU2VsZWN0YWJsZVxuICogSXQgbWF0Y2hlcyBhbGwgb3B0aW9ucyB3aXRoIGxhYmVscyBpbmNsdWRpbmcgdGhlIHNlYXJjaGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IHZhciBjcmVhdGVQYXJ0aWFsU3RyaW5nRXF1YWxpdHlPcHRpb25NYXRjaGVyID0gZnVuY3Rpb24gY3JlYXRlUGFydGlhbFN0cmluZ0VxdWFsaXR5T3B0aW9uTWF0Y2hlcigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChfcmVmMykge1xuICAgIHZhciBvcHRpb24gPSBfcmVmMy5vcHRpb24sXG4gICAgICBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBfcmVmMy5ub3JtYWxpemVkU2VhcmNoVmFsdWU7XG4gICAgdmFyIG5vcm1hbGl6ZWRPcHRpb24gPSBnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uKTtcbiAgICByZXR1cm4gbm9ybWFsaXplZE9wdGlvbi5pbmNsdWRlcyhub3JtYWxpemVkU2VhcmNoVmFsdWUpO1xuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYm9yZGVyZWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gJy4uLy4uL3RleHQnO1xuaW1wb3J0IHsgZXVpU2VsZWN0YWJsZU1lc3NhZ2VTdHlsZXMgfSBmcm9tICcuL3NlbGVjdGFibGVfbWVzc2FnZS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU2VsZWN0YWJsZU1lc3NhZ2UgPSBmdW5jdGlvbiBFdWlTZWxlY3RhYmxlTWVzc2FnZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRib3JkZXJlZCA9IF9yZWYuYm9yZGVyZWQsXG4gICAgYm9yZGVyZWQgPSBfcmVmJGJvcmRlcmVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkYm9yZGVyZWQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVNZXNzYWdlJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVNlbGVjdGFibGVNZXNzYWdlU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpU2VsZWN0YWJsZU1lc3NhZ2UsIGJvcmRlcmVkICYmIHN0eWxlcy5ib3JkZXJlZF07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRleHQsIF9leHRlbmRzKHtcbiAgICBjb2xvcjogXCJzdWJkdWVkXCIsXG4gICAgc2l6ZTogXCJ4c1wiLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVNlbGVjdGFibGVNZXNzYWdlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogTWF0Y2ggdGhpcyB0byB0aGUgYGxpc3RQcm9wcy5ib3JkZXJlZGAgcHJvcGVydHkgb2YgeW91ciBgRXVpU2VsZWN0YWJsZWAgaW5zdGFuY2VcbiAgICAgICAqL1xuICBib3JkZXJlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmV4cG9ydCB2YXIgZXVpU2VsZWN0YWJsZU1lc3NhZ2VTdHlsZXMgPSBmdW5jdGlvbiBldWlTZWxlY3RhYmxlTWVzc2FnZVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVNlbGVjdGFibGVNZXNzYWdlOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiO3RleHQtYWxpZ246Y2VudGVyO3dvcmQtd3JhcDpicmVhay13b3JkOztsYWJlbDpldWlTZWxlY3RhYmxlTWVzc2FnZTtcIiksXG4gICAgLy8gTWF0Y2ggYm9yZGVyIGZyb20gc2VsZWN0YWJsZV9saXN0XG4gICAgYm9yZGVyZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJvdmVyZmxvdzpoaWRkZW47Ym9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIudGhpbiwgXCI7Ym9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIFwiOztsYWJlbDpib3JkZXJlZDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJkYXRhXCJdLFxuICBfZXhjbHVkZWQyID0gW1wibGFiZWxcIiwgXCJpc0dyb3VwTGFiZWxcIiwgXCJjaGVja2VkXCIsIFwiZGlzYWJsZWRcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCIsIFwicmVmXCIsIFwia2V5XCIsIFwic2VhcmNoYWJsZUxhYmVsXCIsIFwiZGF0YVwiLCBcInRydW5jYXRpb25Qcm9wc1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcImNsYXNzTmFtZVwiLCBcIm9wdGlvbnNcIiwgXCJzZWFyY2hWYWx1ZVwiLCBcIm9uT3B0aW9uQ2xpY2tcIiwgXCJyZW5kZXJPcHRpb25cIiwgXCJoZWlnaHRcIiwgXCJ3aW5kb3dQcm9wc1wiLCBcInJvd0hlaWdodFwiLCBcImFjdGl2ZU9wdGlvbkluZGV4XCIsIFwibWFrZU9wdGlvbklkXCIsIFwic2hvd0ljb25zXCIsIFwic2luZ2xlU2VsZWN0aW9uXCIsIFwidmlzaWJsZU9wdGlvbnNcIiwgXCJhbGxvd0V4Y2x1c2lvbnNcIiwgXCJib3JkZXJlZFwiLCBcInBhZGRpbmdTaXplXCIsIFwic2VhcmNoYWJsZVwiLCBcIm9uRm9jdXNCYWRnZVwiLCBcImxpc3RJZFwiLCBcInNldEFjdGl2ZU9wdGlvbkluZGV4XCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJyb2xlXCIsIFwiaXNQcmVGaWx0ZXJlZFwiLCBcImlzVmlydHVhbGl6ZWRcIiwgXCJ0ZXh0V3JhcFwiLCBcInRydW5jYXRpb25Qcm9wc1wiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgbWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRml4ZWRTaXplTGlzdCwgYXJlRXF1YWwgfSBmcm9tICdyZWFjdC13aW5kb3cnO1xuaW1wb3J0IHsgUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpQXV0b1NpemVyIH0gZnJvbSAnLi4vLi4vYXV0b19zaXplcic7XG5pbXBvcnQgeyBFdWlIaWdobGlnaHQgfSBmcm9tICcuLi8uLi9oaWdobGlnaHQnO1xuaW1wb3J0IHsgRXVpTWFyayB9IGZyb20gJy4uLy4uL21hcmsnO1xuaW1wb3J0IHsgRXVpVGV4dFRydW5jYXRlIH0gZnJvbSAnLi4vLi4vdGV4dF90cnVuY2F0ZSc7XG5pbXBvcnQgeyBFdWlTZWxlY3RhYmxlTGlzdEl0ZW0gfSBmcm9tICcuL3NlbGVjdGFibGVfbGlzdF9pdGVtJztcbmltcG9ydCB7IGV1aVNlbGVjdGFibGVMaXN0U3R5bGVzIH0gZnJvbSAnLi9zZWxlY3RhYmxlX2xpc3Quc3R5bGVzJztcblxuLy8gQ29uc3VtZXIgQ29uZmlndXJhYmxlIFByb3BzIHZpYSBgRXVpU2VsZWN0YWJsZS5saXN0UHJvcHNgXG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlTGlzdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlTZWxlY3RhYmxlTGlzdChwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpU2VsZWN0YWJsZUxpc3QpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlTZWxlY3RhYmxlTGlzdCwgW3Byb3BzXSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImFuaW1hdGlvbkZyYW1lSWRcIiwgdm9pZCAwKTtcbiAgICAvLyBjb3VudGVyIGZvciB0cmFja2luZyBsaXN0IHJlbmRlcnMgYW5kIGVuc3VyaW5nIHJlcmVuZGVyc1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJsaXN0Um93UmVyZW5kZXJcIiwgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImxpc3RSZWZcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImxpc3RCb3hSZWZcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNldExpc3RSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMubGlzdFJlZiA9IHJlZjtcbiAgICAgIGlmIChyZWYgJiYgX3RoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgICAgcmVmLnNjcm9sbFRvSXRlbShfdGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCwgJ2F1dG8nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVtb3ZlU2Nyb2xsYWJsZVRhYlN0b3BcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgLy8gRmlyZWZveCBhZGRzIGEgdGFiIHN0b3AgZm9yIHNjcm9sbGFibGUgY29udGFpbmVyc1xuICAgICAgLy8gV2UgaGFuZGxlIHRoaXMgaW5zaWRlIHNvIG5lZWQgdG8gc3RvcCBmaXJlZm94IGZyb20gZG9pbmcgaXRzIHRoaW5nXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNldExpc3RCb3hSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMubGlzdEJveFJlZiA9IHJlZjtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICBsaXN0SWQgPSBfdGhpcyRwcm9wcy5saXN0SWQsXG4gICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wcy5zZWFyY2hhYmxlLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wcy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgIGFyaWFMYWJlbGxlZGJ5ID0gX3RoaXMkcHJvcHNbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICBhcmlhRGVzY3JpYmVkYnkgPSBfdGhpcyRwcm9wc1snYXJpYS1kZXNjcmliZWRieSddO1xuICAgICAgaWYgKHJlZikge1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdpZCcsIGxpc3RJZCk7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbGlzdGJveCcpO1xuICAgICAgICBpZiAoc2VhcmNoYWJsZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uICE9PSAnYWx3YXlzJyAmJiBzaW5nbGVTZWxlY3Rpb24gIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJywgJ3RydWUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmlhTGFiZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGFyaWFMYWJlbCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyaWFMYWJlbGxlZGJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGFyaWFMYWJlbGxlZGJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyaWFEZXNjcmliZWRieSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgYXJpYURlc2NyaWJlZGJ5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIFRoaXMgdXRpbGl0eSBpcyBuZWNlc3NhcnkgdG8gZXhjbHVkZSBncm91cCBsYWJlbHMgZnJvbSB0aGUgYXJpYSBzZXQgY291bnRcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2FsY3VsYXRlQXJpYVNldEF0dHJzXCIsIGZ1bmN0aW9uIChvcHRpb25BcnJheSkge1xuICAgICAgdmFyIGFyaWFQb3NJblNldE1hcCA9IHt9O1xuICAgICAgdmFyIGxhdGVzdEFyaWFQb3NJbmRleCA9IDA7XG4gICAgICBvcHRpb25BcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24sIGluZGV4KSB7XG4gICAgICAgIGlmICghb3B0aW9uLmlzR3JvdXBMYWJlbCkge1xuICAgICAgICAgIGxhdGVzdEFyaWFQb3NJbmRleCsrO1xuICAgICAgICAgIGFyaWFQb3NJblNldE1hcFtpbmRleF0gPSBsYXRlc3RBcmlhUG9zSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXJpYVBvc0luU2V0TWFwOiBhcmlhUG9zSW5TZXRNYXAsXG4gICAgICAgIGFyaWFTZXRTaXplOiBsYXRlc3RBcmlhUG9zSW5kZXhcbiAgICAgIH07XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIkxpc3RSb3dcIiwgLyojX19QVVJFX18qL21lbW8oZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBfb3B0aW9uJHRleHRXcmFwO1xuICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGEsXG4gICAgICAgIGluZGV4ID0gX3JlZi5pbmRleCxcbiAgICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlO1xuICAgICAgdmFyIG9wdGlvbiA9IGRhdGFbaW5kZXhdO1xuICAgICAgdmFyIG9wdGlvbkRhdGEgPSBvcHRpb24uZGF0YSxcbiAgICAgICAgX29wdGlvbiA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvcHRpb24sIF9leGNsdWRlZCk7XG4gICAgICB2YXIgbGFiZWwgPSBvcHRpb24ubGFiZWwsXG4gICAgICAgIGlzR3JvdXBMYWJlbCA9IG9wdGlvbi5pc0dyb3VwTGFiZWwsXG4gICAgICAgIGNoZWNrZWQgPSBvcHRpb24uY2hlY2tlZCxcbiAgICAgICAgZGlzYWJsZWQgPSBvcHRpb24uZGlzYWJsZWQsXG4gICAgICAgIHByZXBlbmQgPSBvcHRpb24ucHJlcGVuZCxcbiAgICAgICAgYXBwZW5kID0gb3B0aW9uLmFwcGVuZCxcbiAgICAgICAgcmVmID0gb3B0aW9uLnJlZixcbiAgICAgICAga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgICAgc2VhcmNoYWJsZUxhYmVsID0gb3B0aW9uLnNlYXJjaGFibGVMYWJlbCxcbiAgICAgICAgX2RhdGEgPSBvcHRpb24uZGF0YSxcbiAgICAgICAgX3RydW5jYXRpb25Qcm9wcyA9IG9wdGlvbi50cnVuY2F0aW9uUHJvcHMsXG4gICAgICAgIG9wdGlvblJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9uLCBfZXhjbHVkZWQyKTtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczIuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzMi5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgIG9uRm9jdXNCYWRnZSA9IF90aGlzJHByb3BzMi5vbkZvY3VzQmFkZ2UsXG4gICAgICAgIHBhZGRpbmdTaXplID0gX3RoaXMkcHJvcHMyLnBhZGRpbmdTaXplLFxuICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wczIuc2hvd0ljb25zLFxuICAgICAgICBtYWtlT3B0aW9uSWQgPSBfdGhpcyRwcm9wczIubWFrZU9wdGlvbklkLFxuICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczIucmVuZGVyT3B0aW9uLFxuICAgICAgICBzZXRBY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMi5zZXRBY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzMi5zZWFyY2hhYmxlLFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzMi5zZWFyY2hWYWx1ZSxcbiAgICAgICAgaXNQcmVGaWx0ZXJlZCA9IF90aGlzJHByb3BzMi5pc1ByZUZpbHRlcmVkLFxuICAgICAgICBpc1ZpcnR1YWxpemVkID0gX3RoaXMkcHJvcHMyLmlzVmlydHVhbGl6ZWQ7XG4gICAgICBpZiAoaXNHcm91cExhYmVsKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciwgbnVsbCwgZnVuY3Rpb24gKHN0eWxlc01lbW9pemVyKSB7XG4gICAgICAgICAgdmFyIHN0eWxlcyA9IHN0eWxlc01lbW9pemVyKGV1aVNlbGVjdGFibGVMaXN0U3R5bGVzKTtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIHJvbGU6IFwicHJlc2VudGF0aW9uXCIsXG4gICAgICAgICAgICBjc3M6IHN0eWxlcy5ldWlTZWxlY3RhYmxlTGlzdF9fZ3JvdXBMYWJlbCxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdF9fZ3JvdXBMYWJlbFwiLFxuICAgICAgICAgICAgc3R5bGU6IHN0eWxlXG4gICAgICAgICAgfSwgb3B0aW9uUmVzdCksIHByZXBlbmQsIGxhYmVsLCBhcHBlbmQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHZhciBpZCA9IG1ha2VPcHRpb25JZChpbmRleCk7XG4gICAgICB2YXIgaXNGb2N1c2VkID0gYWN0aXZlT3B0aW9uSW5kZXggPT09IGluZGV4O1xuXG4gICAgICAvLyBTZWFyY2ggaGlnaGxpZ2h0aW5nXG4gICAgICB2YXIgaGFzU2VhcmNoID0gISFzZWFyY2hWYWx1ZTtcbiAgICAgIHZhciBoaWdobGlnaHRTZWFyY2ggPSBoYXNTZWFyY2ggJiYgKF90eXBlb2YoaXNQcmVGaWx0ZXJlZCkgPT09ICdvYmplY3QnID8gaXNQcmVGaWx0ZXJlZC5oaWdobGlnaHRTZWFyY2ggIT09IGZhbHNlIDogdHJ1ZSk7XG5cbiAgICAgIC8vIFRleHQgd3JhcHBpbmdcbiAgICAgIHZhciBjYW5XcmFwID0gIWlzVmlydHVhbGl6ZWQ7XG4gICAgICB2YXIgX3RleHRXcmFwID0gKF9vcHRpb24kdGV4dFdyYXAgPSBvcHRpb24udGV4dFdyYXApICE9PSBudWxsICYmIF9vcHRpb24kdGV4dFdyYXAgIT09IHZvaWQgMCA/IF9vcHRpb24kdGV4dFdyYXAgOiBfdGhpcy5wcm9wcy50ZXh0V3JhcDtcbiAgICAgIHZhciB0ZXh0V3JhcCA9IGNhbldyYXAgPyBfdGV4dFdyYXAgOiAndHJ1bmNhdGUnO1xuXG4gICAgICAvLyBUcnVuY2F0aW9uIGNvbmZpZyAoaWYgYW55KS4gSWYgbm9uZSwgQ1NTIHRydW5jYXRpb24gaXMgdXNlZFxuICAgICAgdmFyIHRydW5jYXRpb25Qcm9wcyA9IHRleHRXcmFwID09PSAndHJ1bmNhdGUnID8gX3RoaXMuZ2V0VHJ1bmNhdGlvblByb3BzKG9wdGlvbiwgaGlnaGxpZ2h0U2VhcmNoLCBpc0ZvY3VzZWQpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpU2VsZWN0YWJsZUxpc3RJdGVtLCBfZXh0ZW5kcyh7XG4gICAgICAgIGtleTogaWQsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24gb25Nb3VzZURvd24oKSB7XG4gICAgICAgICAgc2V0QWN0aXZlT3B0aW9uSW5kZXgoaW5kZXgpO1xuICAgICAgICB9LFxuICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQucGVyc2lzdCgpOyAvLyBOT1RFOiBUaGlzIGlzIG5lZWRlZCBmb3IgUmVhY3QgdjE2IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgX3RoaXMub25BZGRPclJlbW92ZU9wdGlvbihvcHRpb24sIGV2ZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgIHRpdGxlOiBzZWFyY2hhYmxlTGFiZWwgfHwgbGFiZWwsXG4gICAgICAgIGNoZWNrZWQ6IGNoZWNrZWQsXG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgcHJlcGVuZDogcHJlcGVuZCxcbiAgICAgICAgYXBwZW5kOiBhcHBlbmQsXG4gICAgICAgIFwiYXJpYS1wb3NpbnNldFwiOiBfdGhpcy5zdGF0ZS5hcmlhUG9zSW5TZXRNYXBbaW5kZXhdLFxuICAgICAgICBcImFyaWEtc2V0c2l6ZVwiOiBfdGhpcy5zdGF0ZS5hcmlhU2V0U2l6ZSxcbiAgICAgICAgb25Gb2N1c0JhZGdlOiBvbkZvY3VzQmFkZ2UsXG4gICAgICAgIGFsbG93RXhjbHVzaW9uczogYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICBzaG93SWNvbnM6IHNob3dJY29ucyxcbiAgICAgICAgcGFkZGluZ1NpemU6IHBhZGRpbmdTaXplLFxuICAgICAgICBzZWFyY2hhYmxlOiBzZWFyY2hhYmxlLFxuICAgICAgICB0ZXh0V3JhcDogdGV4dFdyYXBcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBjb21wbGV4XG4gICAgICB9LCBvcHRpb25SZXN0KSwgcmVuZGVyT3B0aW9uID8gcmVuZGVyT3B0aW9uKCAvLyBAdHMtaWdub3JlIGNvbXBsZXhcbiAgICAgIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgX29wdGlvbiksIG9wdGlvbkRhdGEpLCBzZWFyY2hWYWx1ZSkgOiBoaWdobGlnaHRTZWFyY2ggPyBfdGhpcy5yZW5kZXJTZWFyY2hlZFRleHQobGFiZWwsIHRydW5jYXRpb25Qcm9wcykgOiB0cnVuY2F0aW9uUHJvcHMgPyBfdGhpcy5yZW5kZXJUcnVuY2F0ZWRUZXh0KGxhYmVsLCB0cnVuY2F0aW9uUHJvcHMpIDogbGFiZWwpO1xuICAgIH0sIGFyZUVxdWFsKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlbmRlclZpcnR1YWxpemVkTGlzdFwiLCBmdW5jdGlvbiAobGlzdENsYXNzZXMpIHtcbiAgICAgIGlmICghX3RoaXMucHJvcHMuaXNWaXJ0dWFsaXplZCkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSBfdGhpcy5zdGF0ZSxcbiAgICAgICAgb3B0aW9uQXJyYXkgPSBfdGhpcyRzdGF0ZS5vcHRpb25BcnJheSxcbiAgICAgICAgaXRlbURhdGEgPSBfdGhpcyRzdGF0ZS5pdGVtRGF0YTtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgd2luZG93UHJvcHMgPSBfdGhpcyRwcm9wczMud2luZG93UHJvcHMsXG4gICAgICAgIGZvcmNlZEhlaWdodCA9IF90aGlzJHByb3BzMy5oZWlnaHQsXG4gICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzMy5yb3dIZWlnaHQ7XG4gICAgICB2YXIgaGVpZ2h0SXNGdWxsID0gZm9yY2VkSGVpZ2h0ID09PSAnZnVsbCc7XG4gICAgICB2YXIgdmlydHVhbGl6YXRpb25Qcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBjbGFzc05hbWU6IGxpc3RDbGFzc2VzLFxuICAgICAgICByZWY6IF90aGlzLnNldExpc3RSZWYsXG4gICAgICAgIG91dGVyUmVmOiBfdGhpcy5yZW1vdmVTY3JvbGxhYmxlVGFiU3RvcCxcbiAgICAgICAgaW5uZXJSZWY6IF90aGlzLnNldExpc3RCb3hSZWYsXG4gICAgICAgIGlubmVyRWxlbWVudFR5cGU6ICd1bCcsXG4gICAgICAgIGl0ZW1Db3VudDogb3B0aW9uQXJyYXkubGVuZ3RoLFxuICAgICAgICBpdGVtRGF0YTogaXRlbURhdGEsXG4gICAgICAgIGl0ZW1TaXplOiByb3dIZWlnaHQsXG4gICAgICAgICdkYXRhLXNraXAtYXhlJzogJ3Njcm9sbGFibGUtcmVnaW9uLWZvY3VzYWJsZSdcbiAgICAgIH0sIHdpbmRvd1Byb3BzKTtcblxuICAgICAgLy8gQ2FsY3VsYXRlZCBoZWlnaHQgaXMgb25seSB1c2VkIGlmIGhlaWdodCBpcyBub3QgZnVsbFxuICAgICAgdmFyIGNhbGN1bGF0ZWRIZWlnaHQgPSAhaGVpZ2h0SXNGdWxsID8gZm9yY2VkSGVpZ2h0IHx8IDAgOiAwO1xuXG4gICAgICAvLyBJZiBjYWxjdWxhdGVkSGVpZ2h0IGlzIHN0aWxsIGZhbHN5LCB0aGVuIGNhbGN1bGF0ZSBpdFxuICAgICAgaWYgKCFoZWlnaHRJc0Z1bGwgJiYgIWNhbGN1bGF0ZWRIZWlnaHQpIHtcbiAgICAgICAgdmFyIG1heFZpc2libGVPcHRpb25zID0gNztcbiAgICAgICAgdmFyIG51bVZpc2libGVPcHRpb25zID0gb3B0aW9uQXJyYXkubGVuZ3RoO1xuICAgICAgICB2YXIgbnVtVmlzaWJsZU1vcmVUaGFuTWF4ID0gb3B0aW9uQXJyYXkubGVuZ3RoID4gbWF4VmlzaWJsZU9wdGlvbnM7XG4gICAgICAgIGlmIChudW1WaXNpYmxlTW9yZVRoYW5NYXgpIHtcbiAgICAgICAgICAvLyBTaG93IG9ubHkgaGFsZiBvZiB0aGUgbGFzdCBvbmUgdG8gaW5kaWNhdGUgdGhlcmUncyBtb3JlIHRvIHNjcm9sbCB0b1xuICAgICAgICAgIGNhbGN1bGF0ZWRIZWlnaHQgPSAobWF4VmlzaWJsZU9wdGlvbnMgLSAwLjUpICogcm93SGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGN1bGF0ZWRIZWlnaHQgPSBudW1WaXNpYmxlT3B0aW9ucyAqIHJvd0hlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhlaWdodElzRnVsbCA/IF9fX0Vtb3Rpb25KU1goRXVpQXV0b1NpemVyLCB7XG4gICAgICAgIG9uUmVzaXplOiBfdGhpcy5jYWxjdWxhdGVEZWZhdWx0T3B0aW9uV2lkdGhcbiAgICAgIH0sIGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgd2lkdGggPSBfcmVmMi53aWR0aCxcbiAgICAgICAgICBoZWlnaHQgPSBfcmVmMi5oZWlnaHQ7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZpeGVkU2l6ZUxpc3QsIF9leHRlbmRzKHtcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICAgICAgfSwgdmlydHVhbGl6YXRpb25Qcm9wcyksIF90aGlzLkxpc3RSb3cpO1xuICAgICAgfSkgOiBfX19FbW90aW9uSlNYKEV1aUF1dG9TaXplciwge1xuICAgICAgICBkaXNhYmxlSGVpZ2h0OiB0cnVlLFxuICAgICAgICBvblJlc2l6ZTogX3RoaXMuY2FsY3VsYXRlRGVmYXVsdE9wdGlvbldpZHRoXG4gICAgICB9LCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgdmFyIHdpZHRoID0gX3JlZjMud2lkdGg7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZpeGVkU2l6ZUxpc3QsIF9leHRlbmRzKHtcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBjYWxjdWxhdGVkSGVpZ2h0XG4gICAgICAgIH0sIHZpcnR1YWxpemF0aW9uUHJvcHMpLCBfdGhpcy5MaXN0Um93KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJmb3JjZVZpcnR1YWxpemVkTGlzdFJvd1JlcmVuZGVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXRlbURhdGE6IF9vYmplY3RTcHJlYWQoe30sIF90aGlzLnN0YXRlLm9wdGlvbkFycmF5KVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gRXVpVGV4dFRydW5jYXRlIGlzIGV4cGVuc2l2ZSBwZXJmLXdpc2UgLSB3ZSB1c2Ugc2V2ZXJhbCB1dGlsaXRpZXMgaGVyZSB0b1xuICAgIC8vIG9mZnNldCBpdHMgcGVyZm9ybWFuY2UgY29zdFxuICAgIC8vIGFuZCBjcmVhdGVzIGEgcmVzaXplIG9ic2VydmVyIGZvclxuICAgIC8vIGVhY2ggaW5kaXZpZHVhbCBpdGVtLiBUaGlzIGxvZ2ljIHRyaWVzIHRvIG9mZnNldCB0aGlzIHBlcmZvcm1hbmNlIGhpdCBieVxuICAgIC8vIGd1ZXNzdGltYXRpbmcgYSBkZWZhdWx0IHdpZHRoIGZvciBlYWNoIG9wdGlvblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJmb2N1c0JhZGdlT2Zmc2V0XCIsIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjYWxjdWxhdGVEZWZhdWx0T3B0aW9uV2lkdGhcIiwgZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgICB2YXIgY29udGFpbmVyV2lkdGggPSBfcmVmNC53aWR0aDtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgdHJ1bmNhdGlvblByb3BzID0gX3RoaXMkcHJvcHM0LnRydW5jYXRpb25Qcm9wcyxcbiAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzNC5zZWFyY2hhYmxlLFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzNC5zZWFyY2hWYWx1ZTtcblxuICAgICAgLy8gSWYgaXQncyBub3QgbGlrZWx5IHdlJ2xsIG5lZWQgdG8gdXNlIEV1aVRleHRUcnVuY2F0ZSwgZG9uJ3Qgc2V0IHN0YXRlL3JlcmVuZGVyIG9uIGV2ZXJ5IHBhbmVsIHJlc2l6ZVxuICAgICAgdmFyIG1heVRydW5jYXRlID0gc2VhcmNoYWJsZSB8fCB0cnVuY2F0aW9uUHJvcHM7XG4gICAgICBpZiAoIW1heVRydW5jYXRlKSByZXR1cm47XG4gICAgICB2YXIgcGFkZGluZ09mZnNldCA9IF90aGlzLnByb3BzLnBhZGRpbmdTaXplID09PSAnbm9uZScgPyAwIDogMjQ7IC8vIERlZmF1bHRzIHRvICdzJ1xuICAgICAgdmFyIGNoZWNrZWRJY29uT2Zmc2V0ID0gX3RoaXMucHJvcHMuc2hvd0ljb25zID09PSBmYWxzZSA/IDAgOiAyODsgLy8gRGVmYXVsdHMgdG8gdHJ1ZVxuICAgICAgX3RoaXMuZm9jdXNCYWRnZU9mZnNldCA9IF90aGlzLnByb3BzLm9uRm9jdXNCYWRnZSA9PT0gZmFsc2UgPyAwIDogNDY7XG5cbiAgICAgIC8vIFdhaXQgYSB0aWNrIGZvciB0aGUgbGlzdGJveCByZWYgdG8gdXBkYXRlIGJlZm9yZSBwcm9jZWVkaW5nXG4gICAgICBfdGhpcy5hbmltYXRpb25GcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNjcm9sbGJhck9mZnNldCA9IF90aGlzLmxpc3RCb3hSZWYgPyBjb250YWluZXJXaWR0aCAtIF90aGlzLmxpc3RCb3hSZWYub2Zmc2V0V2lkdGggOiAwO1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgZGVmYXVsdE9wdGlvbldpZHRoOiBjb250YWluZXJXaWR0aCAtIHNjcm9sbGJhck9mZnNldCAtIHBhZGRpbmdPZmZzZXQgLSBjaGVja2VkSWNvbk9mZnNldFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBQb3RlbnRpYWxseSBmb3JjZSBsaXN0IHJvd3MgdG8gcmVyZW5kZXIgb24gZHluYW1pYyByZXNpemUgYXMgd2VsbCxcbiAgICAgICAgLy8gYnV0IHRyeSB0byBkbyBpdCBhcyBsaWdodGx5IGFzIHBvc3NpYmxlXG4gICAgICAgIGlmICh0cnVuY2F0aW9uUHJvcHMgfHwgc2VhcmNoYWJsZSAmJiBzZWFyY2hWYWx1ZSkge1xuICAgICAgICAgIF90aGlzLmZvcmNlVmlydHVhbGl6ZWRMaXN0Um93UmVyZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImdldFRydW5jYXRpb25Qcm9wc1wiLCBmdW5jdGlvbiAob3B0aW9uLCBoaWdobGlnaHRTZWFyY2gsIGlzRm9jdXNlZCkge1xuICAgICAgLy8gSW5kaXZpZHVhbCB0cnVuY2F0aW9uIHNldHRpbmdzIHNob3VsZCBvdmVycmlkZSBjb21wb25lbnQtd2lkZSBzZXR0aW5nc1xuICAgICAgdmFyIHRydW5jYXRpb25Qcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgX3RoaXMucHJvcHMudHJ1bmNhdGlvblByb3BzKSwgb3B0aW9uLnRydW5jYXRpb25Qcm9wcyk7XG5cbiAgICAgIC8vIElmIHdlJ3JlIG5vdCBhY3R1YWxseSB1c2luZyBFdWlUZXh0VHJ1bmNhdGUsIG5vIG5lZWQgdG8gY29udGludWVcbiAgICAgIHZhciBoYXNDb21wbGV4VHJ1bmNhdGlvbiA9IGhpZ2hsaWdodFNlYXJjaCB8fCBPYmplY3Qua2V5cyh0cnVuY2F0aW9uUHJvcHMpLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoIWhhc0NvbXBsZXhUcnVuY2F0aW9uKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciB3ZSBjYW4gdXNlIHRoZSBvcHRpbWl6ZWQgZGVmYXVsdCBvcHRpb24gd2lkdGhcbiAgICAgIHZhciBkZWZhdWx0T3B0aW9uV2lkdGggPSBfdGhpcy5zdGF0ZS5kZWZhdWx0T3B0aW9uV2lkdGg7XG4gICAgICB2YXIgdXNlRGVmYXVsdFdpZHRoID0gIW9wdGlvbi5hcHBlbmQgJiYgIW9wdGlvbi5wcmVwZW5kO1xuICAgICAgdmFyIGRlZmF1bHRXaWR0aCA9IHVzZURlZmF1bHRXaWR0aCAmJiBkZWZhdWx0T3B0aW9uV2lkdGggPyBpc0ZvY3VzZWQgPyBkZWZhdWx0T3B0aW9uV2lkdGggLSBfdGhpcy5mb2N1c0JhZGdlT2Zmc2V0IDogZGVmYXVsdE9wdGlvbldpZHRoIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICB3aWR0aDogZGVmYXVsdFdpZHRoXG4gICAgICB9LCB0cnVuY2F0aW9uUHJvcHMpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZW5kZXJTZWFyY2hlZFRleHRcIiwgZnVuY3Rpb24gKHRleHQsIHRydW5jYXRpb25Qcm9wcykge1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gX3RoaXMucHJvcHMuc2VhcmNoVmFsdWU7XG5cbiAgICAgIC8vIElmIHRydW5jYXRpb25Qcm9wcyBpcyB1bmRlZmluZWQsIHdlJ3JlIHVzaW5nIG5vbi12aXJ0dWFsaXplZCB0ZXh0IHdyYXBwaW5nXG4gICAgICBpZiAoIXRydW5jYXRpb25Qcm9wcykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlIaWdobGlnaHQsIHtcbiAgICAgICAgICBzZWFyY2g6IHNlYXJjaFZhbHVlXG4gICAgICAgIH0sIHRleHQpO1xuICAgICAgfVxuICAgICAgdmFyIHNlYXJjaFBvc2l0aW9uU3RhcnQgPSB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIHZhciBzZWFyY2hQb3NpdGlvbkNlbnRlciA9IHNlYXJjaFBvc2l0aW9uU3RhcnQgKyBNYXRoLmZsb29yKHNlYXJjaFZhbHVlLmxlbmd0aCAvIDIpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGV4dFRydW5jYXRlLCBfZXh0ZW5kcyh7fSwgdHJ1bmNhdGlvblByb3BzLCB7XG4gICAgICAgIC8vIFdoZW4gc2VhcmNoaW5nLCBkb24ndCBhbGxvdyBvdmVycmlkaW5nIHRoZSB0cnVuY2F0aW9uIHNldHRpbmdzXG4gICAgICAgIHRydW5jYXRpb246IFwic3RhcnRFbmRcIixcbiAgICAgICAgdHJ1bmNhdGlvblBvc2l0aW9uOiBzZWFyY2hQb3NpdGlvbkNlbnRlcixcbiAgICAgICAgdGV4dDogdGV4dFxuICAgICAgfSksIGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCB0ZXh0Lmxlbmd0aCA+PSBzZWFyY2hWYWx1ZS5sZW5ndGggPyBfX19FbW90aW9uSlNYKEV1aUhpZ2hsaWdodCwge1xuICAgICAgICAgIHNlYXJjaDogc2VhcmNoVmFsdWVcbiAgICAgICAgfSwgdGV4dCkgOlxuICAgICAgICAvLyBJZiB0aGUgYXZhaWxhYmxlIHRydW5jYXRlZCB0ZXh0IGlzIHNob3J0ZXIgdGhhbiB0aGUgZnVsbCBzZWFyY2ggc3RyaW5nLFxuICAgICAgICAvLyBqdXN0IGhpZ2hsaWdodCB0aGUgZW50aXJlIHRydW5jYXRlZCB0ZXh0XG4gICAgICAgIF9fX0Vtb3Rpb25KU1goRXVpTWFyaywgbnVsbCwgdGV4dCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlbmRlclRydW5jYXRlZFRleHRcIiwgZnVuY3Rpb24gKHRleHQsIHRydW5jYXRpb25Qcm9wcykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gRm9yIHNvbWUgYml6YXJyZSByZWFzb24sIHRydW5jYXRpb24gaW4gRXVpU2VsZWN0YWJsZSBpcyBvZmYgb24gaW5pdGlhbCBtb3VudFxuICAgICAgICAvLyAoYnV0IG5vdCBvbiByZXJlbmRlcikgZm9yIFNhZmFyaSBhbmQgX3NvbWVfIHRydW5jYXRpb24gdHlwZXMgaW4gRmlyZWZveCA6fFxuICAgICAgICAvLyBXYWl0aW5nIGEgdGljayBiZWZvcmUgY2FsY3VsYXRpbmcgdHJ1bmNhdGlvbiBzZWVtcyB0byBzbW9vdGggb3ZlciB0aGUgaXNzdWVcbiAgICAgICAgX19fRW1vdGlvbkpTWChFdWlUZXh0VHJ1bmNhdGUsIF9leHRlbmRzKHtcbiAgICAgICAgICBjYWxjdWxhdGlvbkRlbGF5TXM6IDJcbiAgICAgICAgfSwgdHJ1bmNhdGlvblByb3BzLCB7XG4gICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICB9KSwgZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQWRkT3JSZW1vdmVPcHRpb25cIiwgZnVuY3Rpb24gKG9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIGlmIChvcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IF90aGlzLnByb3BzLFxuICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wczUuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM1Lm9wdGlvbnMsXG4gICAgICAgIF90aGlzJHByb3BzNSR2aXNpYmxlTyA9IF90aGlzJHByb3BzNS52aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgdmlzaWJsZU9wdGlvbnMgPSBfdGhpcyRwcm9wczUkdmlzaWJsZU8gPT09IHZvaWQgMCA/IG9wdGlvbnMgOiBfdGhpcyRwcm9wczUkdmlzaWJsZU87XG4gICAgICBfdGhpcy5wcm9wcy5zZXRBY3RpdmVPcHRpb25JbmRleCh2aXNpYmxlT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICAgIHZhciBsYWJlbCA9IF9yZWY1LmxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWwgPT09IG9wdGlvbi5sYWJlbDtcbiAgICAgIH0pLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChvcHRpb24uY2hlY2tlZCA9PT0gJ29uJyAmJiBhbGxvd0V4Y2x1c2lvbnMpIHtcbiAgICAgICAgICBfdGhpcy5vbkV4Y2x1ZGVPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLmNoZWNrZWQgPT09ICdvbicgfHwgb3B0aW9uLmNoZWNrZWQgPT09ICdvZmYnKSB7XG4gICAgICAgICAgX3RoaXMub25SZW1vdmVPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMub25BZGRPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkFkZE9wdGlvblwiLCBmdW5jdGlvbiAoYWRkZWRPcHRpb24sIGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczYub25PcHRpb25DbGljayxcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzNi5vcHRpb25zLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczYuc2luZ2xlU2VsZWN0aW9uO1xuICAgICAgdmFyIGNoYW5nZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBhZGRlZE9wdGlvbik7XG4gICAgICB2YXIgdXBkYXRlZE9wdGlvbnMgPSBvcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIC8vIGlmIHNpbmdsZVNlbGVjdGlvbiBpcyBlbmFibGVkLCB1bmNoZWNrIGFueSBzZWxlY3RlZCBvcHRpb24ocylcbiAgICAgICAgdmFyIHVwZGF0ZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pO1xuICAgICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlIHVwZGF0ZWRPcHRpb24uY2hlY2tlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoaXMgaXMgdGhlIG5vdy1zZWxlY3RlZCBvcHRpb24sIGNoZWNrIGl0XG4gICAgICAgIGlmIChvcHRpb24gPT09IGFkZGVkT3B0aW9uKSB7XG4gICAgICAgICAgdXBkYXRlZE9wdGlvbi5jaGVja2VkID0gJ29uJztcbiAgICAgICAgICBjaGFuZ2VkT3B0aW9uID0gdXBkYXRlZE9wdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXBkYXRlZE9wdGlvbjtcbiAgICAgIH0pO1xuICAgICAgb25PcHRpb25DbGljayh1cGRhdGVkT3B0aW9ucywgZXZlbnQsIGNoYW5nZWRPcHRpb24pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvblJlbW92ZU9wdGlvblwiLCBmdW5jdGlvbiAocmVtb3ZlZE9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzNy5vbk9wdGlvbkNsaWNrLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczcuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM3Lm9wdGlvbnM7XG4gICAgICB2YXIgY2hhbmdlZE9wdGlvbiA9IF9vYmplY3RTcHJlYWQoe30sIHJlbW92ZWRPcHRpb24pO1xuICAgICAgdmFyIHVwZGF0ZWRPcHRpb25zID0gb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICB2YXIgdXBkYXRlZE9wdGlvbiA9IF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbik7XG4gICAgICAgIGlmIChvcHRpb24gPT09IHJlbW92ZWRPcHRpb24gJiYgc2luZ2xlU2VsZWN0aW9uICE9PSAnYWx3YXlzJykge1xuICAgICAgICAgIGRlbGV0ZSB1cGRhdGVkT3B0aW9uLmNoZWNrZWQ7XG4gICAgICAgICAgY2hhbmdlZE9wdGlvbiA9IHVwZGF0ZWRPcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRPcHRpb247XG4gICAgICB9KTtcbiAgICAgIG9uT3B0aW9uQ2xpY2sodXBkYXRlZE9wdGlvbnMsIGV2ZW50LCBjaGFuZ2VkT3B0aW9uKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25FeGNsdWRlT3B0aW9uXCIsIGZ1bmN0aW9uIChleGNsdWRlZE9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzOC5vbk9wdGlvbkNsaWNrLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM4Lm9wdGlvbnM7XG4gICAgICB2YXIgY2hhbmdlZE9wdGlvbiA9IF9vYmplY3RTcHJlYWQoe30sIGV4Y2x1ZGVkT3B0aW9uKTtcbiAgICAgIHZhciB1cGRhdGVkT3B0aW9ucyA9IG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pO1xuICAgICAgICBpZiAob3B0aW9uID09PSBleGNsdWRlZE9wdGlvbikge1xuICAgICAgICAgIHVwZGF0ZWRPcHRpb24uY2hlY2tlZCA9ICdvZmYnO1xuICAgICAgICAgIGNoYW5nZWRPcHRpb24gPSB1cGRhdGVkT3B0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cGRhdGVkT3B0aW9uO1xuICAgICAgfSk7XG4gICAgICBvbk9wdGlvbkNsaWNrKHVwZGF0ZWRPcHRpb25zLCBldmVudCwgY2hhbmdlZE9wdGlvbik7XG4gICAgfSk7XG4gICAgdmFyIF9vcHRpb25BcnJheSA9IHByb3BzLnZpc2libGVPcHRpb25zIHx8IHByb3BzLm9wdGlvbnM7XG4gICAgX3RoaXMuc3RhdGUgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIGRlZmF1bHRPcHRpb25XaWR0aDogMCxcbiAgICAgIG9wdGlvbkFycmF5OiBfb3B0aW9uQXJyYXksXG4gICAgICBpdGVtRGF0YTogX29iamVjdFNwcmVhZCh7fSwgX29wdGlvbkFycmF5KVxuICAgIH0sIF90aGlzLmNhbGN1bGF0ZUFyaWFTZXRBdHRycyhfb3B0aW9uQXJyYXkpKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aVNlbGVjdGFibGVMaXN0LCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlTZWxlY3RhYmxlTGlzdCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAvLyBlbnN1cmUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGlzIGNhbmNlbGVkIG9uIHVubW91bnQgYXNcbiAgICAgIC8vIGl0IGNvdWxkIHBvdGVudGlhbGx5IHJ1biBvbiBhIG5leHQgdGljayBvdGhlcndpc2VcbiAgICAgIGlmICh0aGlzLmFuaW1hdGlvbkZyYW1lSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmFuaW1hdGlvbkZyYW1lSWQpO1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkZyYW1lSWQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNob3VsZENvbXBvbmVudFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM5ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHM5LmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHM5LnNob3dJY29ucyxcbiAgICAgICAgcGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wczkucGFkZGluZ1NpemUsXG4gICAgICAgIHRleHRXcmFwID0gX3RoaXMkcHJvcHM5LnRleHRXcmFwLFxuICAgICAgICBvbkZvY3VzQmFkZ2UgPSBfdGhpcyRwcm9wczkub25Gb2N1c0JhZGdlLFxuICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHM5LnNlYXJjaGFibGU7XG5cbiAgICAgIC8vIHVzaW5nIHNob3VsZENvbXBvbmVudFVwZGF0ZSB0byBkZXRlcm1pbmUgbmVlZGVkIHJlcmVuZGVyIGJlZm9yZSBhY3R1YWwgcmVyZW5kZXJcbiAgICAgIC8vIHdpdGhvdXQgbmVlZGluZyBzdGF0ZSB1cGRhdGVzIG9yIGxhZ2dpbmcgYmVoaW5kIG9uIHVwZGF0ZXNcbiAgICAgIGlmIChuZXh0UHJvcHMuYWxsb3dFeGNsdXNpb25zICE9PSBhbGxvd0V4Y2x1c2lvbnMgfHwgbmV4dFByb3BzLnNob3dJY29ucyAhPT0gc2hvd0ljb25zIHx8IG5leHRQcm9wcy5wYWRkaW5nU2l6ZSAhPT0gcGFkZGluZ1NpemUgfHwgbmV4dFByb3BzLnRleHRXcmFwICE9PSB0ZXh0V3JhcCB8fCBuZXh0UHJvcHMub25Gb2N1c0JhZGdlICE9PSBvbkZvY3VzQmFkZ2UgfHwgbmV4dFByb3BzLnNlYXJjaGFibGUgIT09IHNlYXJjaGFibGUpIHtcbiAgICAgICAgdGhpcy5saXN0Um93UmVyZW5kZXIgKz0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIF90aGlzJHByb3BzMTAgPSB0aGlzLnByb3BzLFxuICAgICAgICBpc1ZpcnR1YWxpemVkID0gX3RoaXMkcHJvcHMxMC5pc1ZpcnR1YWxpemVkLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMTAuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgIHZpc2libGVPcHRpb25zID0gX3RoaXMkcHJvcHMxMC52aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMTAub3B0aW9ucyxcbiAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHMxMC5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgIHNob3dJY29ucyA9IF90aGlzJHByb3BzMTAuc2hvd0ljb25zLFxuICAgICAgICBwYWRkaW5nU2l6ZSA9IF90aGlzJHByb3BzMTAucGFkZGluZ1NpemUsXG4gICAgICAgIHRleHRXcmFwID0gX3RoaXMkcHJvcHMxMC50ZXh0V3JhcCxcbiAgICAgICAgb25Gb2N1c0JhZGdlID0gX3RoaXMkcHJvcHMxMC5vbkZvY3VzQmFkZ2UsXG4gICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wczEwLnNlYXJjaGFibGU7XG4gICAgICBpZiAocHJldlByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSBhY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgICB2YXIgbWFrZU9wdGlvbklkID0gdGhpcy5wcm9wcy5tYWtlT3B0aW9uSWQ7XG4gICAgICAgIGlmICh0aGlzLmxpc3RCb3hSZWYgJiYgdGhpcy5wcm9wcy5zZWFyY2hhYmxlICE9PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5saXN0Qm94UmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgbWFrZU9wdGlvbklkKGFjdGl2ZU9wdGlvbkluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3RpdmVPcHRpb25JbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBpZiAoaXNWaXJ0dWFsaXplZCkge1xuICAgICAgICAgICAgdmFyIF90aGlzJGxpc3RSZWY7XG4gICAgICAgICAgICAoX3RoaXMkbGlzdFJlZiA9IHRoaXMubGlzdFJlZikgPT09IG51bGwgfHwgX3RoaXMkbGlzdFJlZiA9PT0gdm9pZCAwIHx8IF90aGlzJGxpc3RSZWYuc2Nyb2xsVG9JdGVtKGFjdGl2ZU9wdGlvbkluZGV4LCAnYXV0bycpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkbGlzdEJveFJlZjtcbiAgICAgICAgICAgIHZhciBhY3RpdmVPcHRpb25JZCA9IFwiI1wiLmNvbmNhdChtYWtlT3B0aW9uSWQoYWN0aXZlT3B0aW9uSW5kZXgpKTtcbiAgICAgICAgICAgIHZhciBhY3RpdmVPcHRpb25FbCA9IChfdGhpcyRsaXN0Qm94UmVmID0gdGhpcy5saXN0Qm94UmVmKSA9PT0gbnVsbCB8fCBfdGhpcyRsaXN0Qm94UmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRsaXN0Qm94UmVmLnF1ZXJ5U2VsZWN0b3IoYWN0aXZlT3B0aW9uSWQpO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbkVsKSB7XG4gICAgICAgICAgICAgIHZhciBfYWN0aXZlT3B0aW9uRWwkc2Nyb2w7XG4gICAgICAgICAgICAgIC8vIFRPRE86IHdlIGNhbiByZW1vdmUgc2Nyb2xsSW50b1ZpZXcncyBjb25kaXRpb25hbCBjaGFpbmluZyBvbmNlIGpzZG9tIHN0dWJzIGl0XG4gICAgICAgICAgICAgIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pzZG9tL2pzZG9tL2lzc3Vlcy8xNjk1XG4gICAgICAgICAgICAgIChfYWN0aXZlT3B0aW9uRWwkc2Nyb2wgPSBhY3RpdmVPcHRpb25FbC5zY3JvbGxJbnRvVmlldykgPT09IG51bGwgfHwgX2FjdGl2ZU9wdGlvbkVsJHNjcm9sID09PSB2b2lkIDAgfHwgX2FjdGl2ZU9wdGlvbkVsJHNjcm9sLmNhbGwoYWN0aXZlT3B0aW9uRWwsIHtcbiAgICAgICAgICAgICAgICBibG9jazogJ25lYXJlc3QnXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIG9wdGlvbkFycmF5ID0gdmlzaWJsZU9wdGlvbnMgfHwgb3B0aW9ucztcbiAgICAgIGlmIChwcmV2UHJvcHMudmlzaWJsZU9wdGlvbnMgIT09IHZpc2libGVPcHRpb25zIHx8IHByZXZQcm9wcy5vcHRpb25zICE9PSBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgb3B0aW9uQXJyYXk6IG9wdGlvbkFycmF5LFxuICAgICAgICAgIGl0ZW1EYXRhOiBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb25BcnJheSlcbiAgICAgICAgfSwgdGhpcy5jYWxjdWxhdGVBcmlhU2V0QXR0cnMob3B0aW9uQXJyYXkpKSk7XG4gICAgICB9IGVsc2UgaWYgKGlzVmlydHVhbGl6ZWQpIHtcbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgTGlzdFJvdyB1cGRhdGVzIGJhc2VkIG9uIGl0ZW0gcHJvcHNcbiAgICAgICAgaWYgKHByZXZQcm9wcy5hbGxvd0V4Y2x1c2lvbnMgIT09IGFsbG93RXhjbHVzaW9ucyB8fCBwcmV2UHJvcHMuc2hvd0ljb25zICE9PSBzaG93SWNvbnMgfHwgcHJldlByb3BzLnBhZGRpbmdTaXplICE9PSBwYWRkaW5nU2l6ZSB8fCBwcmV2UHJvcHMudGV4dFdyYXAgIT09IHRleHRXcmFwIHx8IHByZXZQcm9wcy5vbkZvY3VzQmFkZ2UgIT09IG9uRm9jdXNCYWRnZSB8fCBwcmV2UHJvcHMuc2VhcmNoYWJsZSAhPT0gc2VhcmNoYWJsZSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXRlbURhdGE6IF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbkFycmF5KVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczExID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMxMS5jbGFzc05hbWUsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczExLm9wdGlvbnMsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMxMS5zZWFyY2hWYWx1ZSxcbiAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzMTEub25PcHRpb25DbGljayxcbiAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHMxMS5yZW5kZXJPcHRpb24sXG4gICAgICAgIGZvcmNlZEhlaWdodCA9IF90aGlzJHByb3BzMTEuaGVpZ2h0LFxuICAgICAgICB3aW5kb3dQcm9wcyA9IF90aGlzJHByb3BzMTEud2luZG93UHJvcHMsXG4gICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzMTEucm93SGVpZ2h0LFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMTEuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgIG1ha2VPcHRpb25JZCA9IF90aGlzJHByb3BzMTEubWFrZU9wdGlvbklkLFxuICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wczExLnNob3dJY29ucyxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMxMS5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIHZpc2libGVPcHRpb25zID0gX3RoaXMkcHJvcHMxMS52aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHMxMS5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgIGJvcmRlcmVkID0gX3RoaXMkcHJvcHMxMS5ib3JkZXJlZCxcbiAgICAgICAgcGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wczExLnBhZGRpbmdTaXplLFxuICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMxMS5zZWFyY2hhYmxlLFxuICAgICAgICBvbkZvY3VzQmFkZ2UgPSBfdGhpcyRwcm9wczExLm9uRm9jdXNCYWRnZSxcbiAgICAgICAgbGlzdElkID0gX3RoaXMkcHJvcHMxMS5saXN0SWQsXG4gICAgICAgIHNldEFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMxMS5zZXRBY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHMxMVsnYXJpYS1sYWJlbCddLFxuICAgICAgICBhcmlhTGFiZWxsZWRieSA9IF90aGlzJHByb3BzMTFbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICBhcmlhRGVzY3JpYmVkYnkgPSBfdGhpcyRwcm9wczExWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgIHJvbGUgPSBfdGhpcyRwcm9wczExLnJvbGUsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQgPSBfdGhpcyRwcm9wczExLmlzUHJlRmlsdGVyZWQsXG4gICAgICAgIGlzVmlydHVhbGl6ZWQgPSBfdGhpcyRwcm9wczExLmlzVmlydHVhbGl6ZWQsXG4gICAgICAgIHRleHRXcmFwID0gX3RoaXMkcHJvcHMxMS50ZXh0V3JhcCxcbiAgICAgICAgdHJ1bmNhdGlvblByb3BzID0gX3RoaXMkcHJvcHMxMS50cnVuY2F0aW9uUHJvcHMsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMxMSwgX2V4Y2x1ZGVkMyk7XG4gICAgICB2YXIgaGVpZ2h0SXNGdWxsID0gZm9yY2VkSGVpZ2h0ID09PSAnZnVsbCc7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0JywgY2xhc3NOYW1lKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciwgbnVsbCwgZnVuY3Rpb24gKHN0eWxlc01lbW9pemVyKSB7XG4gICAgICAgIHZhciBzdHlsZXMgPSBzdHlsZXNNZW1vaXplcihldWlTZWxlY3RhYmxlTGlzdFN0eWxlcyk7XG4gICAgICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVNlbGVjdGFibGVMaXN0LCBoZWlnaHRJc0Z1bGwgJiYgc3R5bGVzLmZ1bGxIZWlnaHQsIGJvcmRlcmVkICYmIHN0eWxlcy5ib3JkZXJlZF07XG4gICAgICAgIHZhciBsaXN0Q2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0X19saXN0Jywgc3R5bGVzLmV1aVNlbGVjdGFibGVMaXN0X19saXN0KTtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgICB9LCByZXN0KSwgaXNWaXJ0dWFsaXplZCA/IF90aGlzMi5yZW5kZXJWaXJ0dWFsaXplZExpc3QobGlzdENsYXNzZXMpIDogX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBsaXN0Q2xhc3NlcyxcbiAgICAgICAgICBzdHlsZTogIWhlaWdodElzRnVsbCA/IHtcbiAgICAgICAgICAgIGJsb2NrU2l6ZTogZm9yY2VkSGVpZ2h0XG4gICAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZWY6IF90aGlzMi5yZW1vdmVTY3JvbGxhYmxlVGFiU3RvcFxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKFwidWxcIiwge1xuICAgICAgICAgIHJlZjogX3RoaXMyLnNldExpc3RCb3hSZWZcbiAgICAgICAgfSwgX3RoaXMyLnN0YXRlLm9wdGlvbkFycmF5Lm1hcChmdW5jdGlvbiAoXywgaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoX3RoaXMyLkxpc3RSb3csIHtcbiAgICAgICAgICAgIGtleTogXCJcIi5jb25jYXQoaW5kZXgsIFwiLVwiKS5jb25jYXQoX3RoaXMyLmxpc3RSb3dSZXJlbmRlciksXG4gICAgICAgICAgICBkYXRhOiBfdGhpczIuc3RhdGUub3B0aW9uQXJyYXksXG4gICAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgICB9LCBudWxsKTtcbiAgICAgICAgfSkpKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlTZWxlY3RhYmxlTGlzdCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICByb3dIZWlnaHQ6IDMyLFxuICBzZWFyY2hWYWx1ZTogJycsXG4gIGlzVmlydHVhbGl6ZWQ6IHRydWVcbn0pO1xuRXVpU2VsZWN0YWJsZUxpc3QucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBUaGUgaW5kZXggb2YgdGhlIG9wdGlvbiB0byBiZSBoaWdobGlnaHRlZCBhcyBwc2V1ZG8tZm9jdXNlZDtcbiAgICAgICAqIEdvb2QgZm9yIHVzZSB3aGVuIG9ubHkgb25lIHNlbGVjdGlvbiBpcyBhbGxvd2VkIGFuZCBuZWVkaW5nIHRvIG9wZW5cbiAgICAgICAqIGRpcmVjdGx5IHRvIHRoYXQgb3B0aW9uXG4gICAgICAgKi9cbiAgYWN0aXZlT3B0aW9uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgICAgICogU2hvdyB0aGUgY2hlY2svY3Jvc3Mgc2VsZWN0aW9uIGluZGljYXRvciBpY29uc1xuICAgICAgICovXG4gIHNob3dJY29uczogUHJvcFR5cGVzLmJvb2wsXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFsd2F5c1wiXSksIFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBBbnkgcHJvcHMgdG8gc2VuZCBzcGVjaWZpY2FsbHkgdG8gdGhlIHJlYWN0LXdpbmRvdyBgRml4ZWRTaXplTGlzdGBcbiAgICAgICAqL1xuICB3aW5kb3dQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBBZGRzIGEgYm9yZGVyIGFyb3VuZCB0aGUgbGlzdCB0byBpbmRpY2F0ZSB0aGUgYm91bmRzO1xuICAgICAgICogVXNlZnVsIHdoZW4gdGhlIGxpc3Qgc2Nyb2xscywgb3RoZXJ3aXNlIHVzZSB5b3VyIG93biBjb250YWluZXJcbiAgICAgICAqL1xuICBib3JkZXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogV2hlbiBlbmFibGVkIGJ5IHNldHRpbmcgdG8gZWl0aGVyIGB0cnVlYCBvciBwYXNzaW5nIGN1c3RvbSB0ZXh0LFxuICAgICAgICogc2hvd3MgYSBob2xsb3cgYmFkZ2UgYXMgYW4gYXBwZW5kIChmYXIgcmlnaHQpIHdoZW4gdGhlIGl0ZW0gaXMgZm9jdXNlZC5cbiAgICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgd2hlbiBgdHJ1ZWAgaXMgYFx1MjFBOSB0byBzZWxlY3QvZGVzZWxlY3QvaW5jbHVkZS9leGNsdWRlYFxuICAgICAgICovXG4gIG9uRm9jdXNCYWRnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW55IHN0cmluZyBmcm9tIG91ciBpY29uIGxpYnJhcnlcbiAgICAgICAqL1xuICAgIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogVGhlIHNpZGUgb2YgdGhlIGJhZGdlIHRoZSBpY29uIHNob3VsZCBzaXRcbiAgICAgICAqL1xuICAgIGljb25TaWRlOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBlaXRoZXIgb3VyIHBhbGV0dGUgY29sb3JzIChwcmltYXJ5LCBzdWNjZXNzIC4uZXRjKSBvciBhIGhleCB2YWx1ZSBgI0ZGRkZGRmAsIGAjMDAwYC5cbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogV2lsbCBvdmVycmlkZSBhbnkgY29sb3IgcGFzc2VkIHRocm91Z2ggdGhlIGBjb2xvcmAgcHJvcC5cbiAgICAgICAqL1xuICAgIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogUHJvcHMgcGFzc2VkIHRvIHRoZSBjbG9zZSBidXR0b24uXG4gICAgICAgKi9cbiAgICBjbG9zZUJ1dHRvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIGljb24gd2l0aGluIHRoZSBiYWRnZVxuICAgICAgICovXG4gICAgaWNvbk9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBpY29uT25DbGljayBidXR0b25cbiAgICAgICAqL1xuICAgIGljb25PbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIHRoZSBiYWRnZSBpdHNlbGZcbiAgICAgICAqL1xuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBvbkNsaWNrIGJ1dHRvblxuICAgICAgICovXG4gICAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWw6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIFBhZGRpbmcgZm9yIHRoZSBsaXN0IGl0ZW1zLlxuICAgICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIEhvdyB0byBoYW5kbGUgbG9uZyB0ZXh0IHdpdGhpbiB0aGUgaXRlbS5cbiAgICAgICAqIFdyYXBwaW5nIG9ubHkgd29ya3MgaWYgdmlydHVhbGl6YXRpb24gaXMgb2ZmLlxuICAgICAgICovXG4gIHRleHRXcmFwOiBQcm9wVHlwZXMub25lT2YoW1widHJ1bmNhdGVcIiwgXCJ3cmFwXCJdKSxcbiAgLyoqXG4gICAgICAgKiBJZiB0ZXh0V3JhcCBpcyBzZXQgdG8gYHRydW5jYXRlYCwgeW91IGNhbiBwYXNzIGEgY3VzdG9tIHRydW5jYXRpb24gY29uZmlndXJhdGlvblxuICAgICAgICogdGhhdCBhY2NlcHRzIGFueSBbRXVpVGV4dFRydW5jYXRlXSgvIy91dGlsaXRpZXMvdGV4dC10cnVuY2F0aW9uKSBwcm9wIGV4Y2VwdCBmb3JcbiAgICAgICAqIGB0ZXh0YCBhbmQgYGNoaWxkcmVuYC5cbiAgICAgICAqXG4gICAgICAgKiBOb3RlOiB3aGVuIHNlYXJjaGluZywgY3VzdG9tIHRydW5jYXRpb24gcHJvcHMgYXJlIGlnbm9yZWQuIFRoZSBoaWdobGlnaHRlZCBzZWFyY2hcbiAgICAgICAqIHRleHQgd2lsbCBhbHdheXMgdGFrZSBwcmVjZWRlbmNlLlxuICAgICAgICovXG4gIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBVc2UgdmlydHVhbGl6ZWQgcmVuZGVyaW5nIGZvciBsaXN0IGl0ZW1zIHdpdGggYHJlYWN0LXdpbmRvd2AuXG4gICAgICAgKiBTZXRzIGVhY2ggcm93J3MgaGVpZ2h0IHRvIHRoZSB2YWx1ZSBvZiBgcm93SGVpZ2h0YC5cbiAgICAgICAqL1xuICBpc1ZpcnR1YWxpemVkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3RydWVdKSwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiAgVGhlIGhlaWdodCBvZiBlYWNoIG9wdGlvbiBpbiBwaXhlbHMuIERlZmF1bHRzIHRvIGAzMmAuXG4gICAgICAgKiAgSGFzIG5vIGVmZmVjdCBpZiBgaXNWaXJ0dWFsaXplZD1mYWxzZWAuXG4gICAgICAgKi9cbiAgcm93SGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICAgKiBBbGwgcG9zc2libGUgb3B0aW9uc1xuICAgICAqL1xuICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgYGJvb2xlYW5gLlxuICAgICAgICogU2V0IHRvIGB0cnVlYCB0byBpbmRpY2F0ZSBvYmplY3QgaXMganVzdCBhIGdyb3VwaW5nIGxhYmVsLCBub3QgYSBzZWxlY3RhYmxlIGl0ZW1cbiAgICAgICAqL1xuICAgIGlzR3JvdXBMYWJlbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBWaXNpYmxlIGxhYmVsIG9mIG9wdGlvbi5cbiAgICAgICAqIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBpdGVtcyBpZiBga2V5YCBpcyBub3Qgc3VwcGxpZWRcbiAgICAgICAqL1xuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWxseSBjaGFuZ2UgdGhlIHNlYXJjaGFibGUgdGVybSBieSBwYXNzaW5nIGEgZGlmZmVyZW50IHN0cmluZyBvdGhlciB0aGFuIHRoZSBgbGFiZWxgLlxuICAgICAgICogQmVzdCB1c2VkIHdoZW4gY3JlYXRpbmcgYSBjdXN0b20gYG9wdGlvblJlbmRlcmAgdG8gc2VwYXJhdGUgdGhlIGxhYmVsIGZyb20gbWV0YWRhdGEgYnV0IGFsbG93aW5nIHRvIHNlYXJjaCBvbiBib3RoXG4gICAgICAgKi9cbiAgICBzZWFyY2hhYmxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLyoqXG4gICAgICAgKiBNdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgaXRlbXMuXG4gICAgICAgKiBXaWxsIGJlIHVzZWQgdG8gbWF0Y2ggb3B0aW9ucyBpbnN0ZWFkIG9mIGBsYWJlbGBcbiAgICAgICAqL1xuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvKipcbiAgICAgICAqIExlYXZlIGB1bmRlZmluZWRgIHRvIGluZGljYXRlIG5vdCBzZWxlY3RlZC4gUGFzcyBhIHN0cmluZyBvZlxuICAgICAgICogJ29uJyB0byBpbmRpY2F0ZSBpbmNsdXNpb24sICdvZmYnIHRvIGluZGljYXRlIGV4Y2x1c2lvbixcbiAgICAgICAqIG9yICdtaXhlZCcgdG8gaW5kaWNhdGUgaW5jbHVzaW9uIGZvciBzb21lLlxuICAgICAgICovXG4gICAgY2hlY2tlZDogUHJvcFR5cGVzLmFueSxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBOb2RlIHRvIGFkZCBiZXR3ZWVuIHRoZSBzZWxlY3Rpb24gaWNvbiBhbmQgdGhlIGxhYmVsXG4gICAgICAgKi9cbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAvKipcbiAgICAgICAqIE5vZGUgdG8gYWRkIHRvIHRoZSBmYXIgcmlnaHQgb2YgdGhlIGl0ZW1cbiAgICAgICAqL1xuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgcmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbiBkYXRhIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgYHJlbmRlck9wdGlvbnNgIGVsZW1lbnQuXG4gICAgICAgKiBCeXBhc3MgYEV1aVNlbGVjdGFibGVJdGVtYCBhbmQgYXZvaWQgRE9NIGF0dHJpYnV0ZSB3YXJuaW5ncy5cbiAgICAgICAqL1xuICAgIGRhdGE6IFByb3BUeXBlcy5zaGFwZSh7fSksXG4gICAgLyoqXG4gICAgICAgKiBIb3cgdG8gaGFuZGxlIGxvbmcgdGV4dCB3aXRoaW4gdGhlIGl0ZW0uXG4gICAgICAgKiBXcmFwcGluZyBvbmx5IHdvcmtzIGlmIGBpc1ZpcnR1YWxpemF0aW9uYCBpcyBmYWxzZS5cbiAgICAgICAqIEBkZWZhdWx0ICd0cnVuY2F0ZSdcbiAgICAgICAqL1xuICAgIHRleHRXcmFwOiBQcm9wVHlwZXMub25lT2YoW1widHJ1bmNhdGVcIiwgXCJ3cmFwXCJdKSxcbiAgICAvKipcbiAgICAgICAqIElmIHRleHRXcmFwIGlzIHNldCB0byBgdHJ1bmNhdGVgLCB5b3UgY2FuIHBhc3MgYSBjdXN0b20gdHJ1bmNhdGlvbiBjb25maWd1cmF0aW9uXG4gICAgICAgKiB0aGF0IGFjY2VwdHMgYW55IFtFdWlUZXh0VHJ1bmNhdGVdKC8jL3V0aWxpdGllcy90ZXh0LXRydW5jYXRpb24pIHByb3AgZXhjZXB0IGZvclxuICAgICAgICogYHRleHRgIGFuZCBgY2hpbGRyZW5gLlxuICAgICAgICpcbiAgICAgICAqIE5vdGU6IHdoZW4gc2VhcmNoaW5nLCBjdXN0b20gdHJ1bmNhdGlvbiBwcm9wcyBhcmUgaWdub3JlZC4gVGhlIGhpZ2hsaWdodGVkIHNlYXJjaFxuICAgICAgICogdGV4dCB3aWxsIGFsd2F5cyB0YWtlIHByZWNlZGVuY2UuXG4gICAgICAgKi9cbiAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBjdXN0b20gdG9vbHRpcCBjb250ZW50IGZvciB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBwcm9wcyB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nICoqW0V1aVRvb2xUaXBdKC8jL2Rpc3BsYXkvdG9vbHRpcCkqKlxuICAgICAgICovXG4gICAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIEZpbHRlcmVkIG9wdGlvbnMgbGlzdCAoaWYgYXBwbGljYWJsZSlcbiAgICAgKi9cbiAgdmlzaWJsZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3RydWVdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWFyY2hhYmxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNoZWNrZWQ6IFByb3BUeXBlcy5hbnksXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgcmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBkYXRhOiBQcm9wVHlwZXMuc2hhcGUoe30pLFxuICAgIHRleHRXcmFwOiBQcm9wVHlwZXMub25lT2YoW1widHJ1bmNhdGVcIiwgXCJ3cmFwXCJdKSxcbiAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueVxuICB9KS5pc1JlcXVpcmVkKSxcbiAgLyoqXG4gICAgICogU2VhcmNoIHZhbHVlIHRvIGhpZ2hsaWdodCBvbiB0aGUgb3B0aW9uIHJlbmRlclxuICAgICAqL1xuICBzZWFyY2hWYWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhcnJheSBvZiBvcHRpb25zIHdpdGggYWx0ZXJlZCBjaGVja2VkIHN0YXRlLCB0aGUgY2xpY2sva2V5Ym9hcmQgZXZlbnQsXG4gICAgICogYW5kIHRoZSBvcHRpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIGNsaWNrL2tleWJvYXJkIGV2ZW50XG4gICAgICovXG4gIG9uT3B0aW9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIEN1c3RvbSByZW5kZXIgZm9yIHRoZSBsYWJlbCBwb3J0aW9uIG9mIHRoZSBvcHRpb247XG4gICAgICogVGFrZXMgKG9wdGlvbiwgc2VhcmNoVmFsdWUpLCByZXR1cm5zIFJlYWN0Tm9kZVxuICAgICAqL1xuICByZW5kZXJPcHRpb246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXggaGVpZ2h0IGluIHBpeGVscyBvciBwYXNzIGBmdWxsYCB0byBhbGxvd1xuICAgICAqIHRoZSB3aG9sZSBncm91cCB0byBmaWxsIHRoZSBoZWlnaHQgb2YgaXRzIGNvbnRhaW5lciBhbmRcbiAgICAgKiBhbGxvd3MgdGhlIGxpc3QgZ3JvdyBhcyB3ZWxsXG4gICAgICovXG4gIGhlaWdodDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW1wiZnVsbFwiXSldKSxcbiAgLyoqXG4gICAgICogQWxsb3cgY3ljbGluZyB0aHJvdWdoIHRoZSBvbiwgb2ZmIGFuZCB1bmRlZmluZWQgc3RhdGUgb2Ygb3B0aW9uLmNoZWNrZWRcbiAgICAgKiBhbmQgbm90IGp1c3Qgb24gYW5kIHVuZGVmaW5lZFxuICAgICAqL1xuICBhbGxvd0V4Y2x1c2lvbnM6IFByb3BUeXBlcy5ib29sLFxuICBzZWFyY2hhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNQcmVGaWx0ZXJlZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBoaWdobGlnaHRTZWFyY2g6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgbWFrZU9wdGlvbklkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBsaXN0SWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc2V0QWN0aXZlT3B0aW9uSW5kZXg6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiY2hlY2tlZFwiLCBcImlzRm9jdXNlZFwiLCBcInNob3dJY29uc1wiLCBcInByZXBlbmRcIiwgXCJhcHBlbmRcIiwgXCJhbGxvd0V4Y2x1c2lvbnNcIiwgXCJvbkZvY3VzQmFkZ2VcIiwgXCJwYWRkaW5nU2l6ZVwiLCBcInJvbGVcIiwgXCJzZWFyY2hhYmxlXCIsIFwidGV4dFdyYXBcIiwgXCJ0b29sVGlwQ29udGVudFwiLCBcInRvb2xUaXBQcm9wc1wiLCBcImFyaWEtZGVzY3JpYmVkYnlcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlCYWRnZSB9IGZyb20gJy4uLy4uL2JhZGdlJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi8uLi90b29sX3RpcCc7XG5pbXBvcnQgeyBldWlTZWxlY3RhYmxlTGlzdEl0ZW1TdHlsZXMgfSBmcm9tICcuL3NlbGVjdGFibGVfbGlzdF9pdGVtLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZnVuY3Rpb24gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSB7XG4gIHN3aXRjaCAoY2hlY2tlZCkge1xuICAgIGNhc2UgJ29uJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGljb246ICdjaGVjaycsXG4gICAgICAgIGNvbG9yOiAndGV4dCdcbiAgICAgIH07XG4gICAgY2FzZSAnb2ZmJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGljb246ICdjcm9zcycsXG4gICAgICAgIGNvbG9yOiAndGV4dCdcbiAgICAgIH07XG4gICAgY2FzZSAnbWl4ZWQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvbjogJ21pbnVzJyxcbiAgICAgICAgY29sb3I6ICd0ZXh0J1xuICAgICAgfTtcbiAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvbjogJ2VtcHR5J1xuICAgICAgfTtcbiAgfVxufVxuZXhwb3J0IHZhciBQQURESU5HX1NJWkVTID0gWydub25lJywgJ3MnXTtcbmV4cG9ydCB2YXIgRXVpU2VsZWN0YWJsZUxpc3RJdGVtID0gZnVuY3Rpb24gRXVpU2VsZWN0YWJsZUxpc3RJdGVtKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgY2hlY2tlZCA9IF9yZWYuY2hlY2tlZCxcbiAgICBpc0ZvY3VzZWQgPSBfcmVmLmlzRm9jdXNlZCxcbiAgICBfcmVmJHNob3dJY29ucyA9IF9yZWYuc2hvd0ljb25zLFxuICAgIHNob3dJY29ucyA9IF9yZWYkc2hvd0ljb25zID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRzaG93SWNvbnMsXG4gICAgcHJlcGVuZCA9IF9yZWYucHJlcGVuZCxcbiAgICBhcHBlbmQgPSBfcmVmLmFwcGVuZCxcbiAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfcmVmLmFsbG93RXhjbHVzaW9ucyxcbiAgICBfcmVmJG9uRm9jdXNCYWRnZSA9IF9yZWYub25Gb2N1c0JhZGdlLFxuICAgIG9uRm9jdXNCYWRnZSA9IF9yZWYkb25Gb2N1c0JhZGdlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRvbkZvY3VzQmFkZ2UsXG4gICAgX3JlZiRwYWRkaW5nU2l6ZSA9IF9yZWYucGFkZGluZ1NpemUsXG4gICAgcGFkZGluZ1NpemUgPSBfcmVmJHBhZGRpbmdTaXplID09PSB2b2lkIDAgPyAncycgOiBfcmVmJHBhZGRpbmdTaXplLFxuICAgIF9yZWYkcm9sZSA9IF9yZWYucm9sZSxcbiAgICByb2xlID0gX3JlZiRyb2xlID09PSB2b2lkIDAgPyAnb3B0aW9uJyA6IF9yZWYkcm9sZSxcbiAgICBzZWFyY2hhYmxlID0gX3JlZi5zZWFyY2hhYmxlLFxuICAgIF9yZWYkdGV4dFdyYXAgPSBfcmVmLnRleHRXcmFwLFxuICAgIHRleHRXcmFwID0gX3JlZiR0ZXh0V3JhcCA9PT0gdm9pZCAwID8gJ3RydW5jYXRlJyA6IF9yZWYkdGV4dFdyYXAsXG4gICAgdG9vbFRpcENvbnRlbnQgPSBfcmVmLnRvb2xUaXBDb250ZW50LFxuICAgIHRvb2xUaXBQcm9wcyA9IF9yZWYudG9vbFRpcFByb3BzLFxuICAgIF9hcmlhRGVzY3JpYmVkQnkgPSBfcmVmWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0SXRlbScsIHtcbiAgICAnZXVpU2VsZWN0YWJsZUxpc3RJdGVtLWlzRm9jdXNlZCc6IGlzRm9jdXNlZFxuICB9LCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpU2VsZWN0YWJsZUxpc3RJdGVtU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpU2VsZWN0YWJsZUxpc3RJdGVtLCBzdHlsZXMucGFkZGluZ1twYWRkaW5nU2l6ZV1dO1xuICB2YXIgdGV4dFN0eWxlcyA9IFtzdHlsZXMuZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0LCBzdHlsZXMudGV4dFdyYXBbdGV4dFdyYXBdXTtcbiAgdmFyIG9wdGlvbkljb24gPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2hvd0ljb25zKSB7XG4gICAgICB2YXIgX3Jlc29sdmVJY29uQW5kQ29sb3IgPSByZXNvbHZlSWNvbkFuZENvbG9yKGNoZWNrZWQpLFxuICAgICAgICBpY29uID0gX3Jlc29sdmVJY29uQW5kQ29sb3IuaWNvbixcbiAgICAgICAgY29sb3IgPSBfcmVzb2x2ZUljb25BbmRDb2xvci5jb2xvcjtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgY3NzOiBzdHlsZXMuZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19pY29uLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19pY29uXCIsXG4gICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgdHlwZTogaWNvblxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbc2hvd0ljb25zLCBjaGVja2VkLCBzdHlsZXNdKTtcbiAgdmFyIHByZXBlbmROb2RlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHByZXBlbmQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNzczogc3R5bGVzLmV1aVNlbGVjdGFibGVMaXN0SXRlbV9fcHJlcGVuZCxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fcHJlcGVuZFwiXG4gICAgICB9LCBwcmVwZW5kKTtcbiAgICB9XG4gIH0sIFtwcmVwZW5kLCBzdHlsZXNdKTtcbiAgdmFyIG9uRm9jdXNCYWRnZU5vZGUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZGVmYXVsdE9uRm9jdXNCYWRnZVByb3BzID0ge1xuICAgICAgJ2FyaWEtaGlkZGVuJzogdHJ1ZSxcbiAgICAgIGljb25UeXBlOiAncmV0dXJuS2V5JyxcbiAgICAgIGljb25TaWRlOiAnbGVmdCcsXG4gICAgICBjb2xvcjogJ2hvbGxvdydcbiAgICB9O1xuICAgIGlmIChvbkZvY3VzQmFkZ2UgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX29uRm9jdXNCYWRnZVwiXG4gICAgICB9LCBkZWZhdWx0T25Gb2N1c0JhZGdlUHJvcHMpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvbkZvY3VzQmFkZ2UgIT09ICdib29sZWFuJyAmJiAhIW9uRm9jdXNCYWRnZSkge1xuICAgICAgdmFyIF9jaGlsZHJlbiA9IG9uRm9jdXNCYWRnZS5jaGlsZHJlbixcbiAgICAgICAgX2NsYXNzTmFtZSA9IG9uRm9jdXNCYWRnZS5jbGFzc05hbWUsXG4gICAgICAgIHJlc3RCYWRnZVByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9uRm9jdXNCYWRnZSwgX2V4Y2x1ZGVkMik7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0SXRlbV9fb25Gb2N1c0JhZGdlJywgX2NsYXNzTmFtZSlcbiAgICAgIH0sIGRlZmF1bHRPbkZvY3VzQmFkZ2VQcm9wcywgcmVzdEJhZGdlUHJvcHMpLCBfY2hpbGRyZW4pO1xuICAgIH1cbiAgfSwgW29uRm9jdXNCYWRnZV0pO1xuICB2YXIgc2hvd09uRm9jdXNCYWRnZSA9ICEhKGlzRm9jdXNlZCAmJiAhZGlzYWJsZWQgJiYgb25Gb2N1c0JhZGdlTm9kZSk7XG4gIHZhciBhcHBlbmROb2RlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGFwcGVuZCB8fCBzaG93T25Gb2N1c0JhZGdlKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjc3M6IHN0eWxlcy5ldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2FwcGVuZCxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fYXBwZW5kXCJcbiAgICAgIH0sIGFwcGVuZCwgXCIgXCIsIHNob3dPbkZvY3VzQmFkZ2UgPyBvbkZvY3VzQmFkZ2VOb2RlIDogbnVsbCk7XG4gICAgfVxuICB9LCBbYXBwZW5kLCBzaG93T25Gb2N1c0JhZGdlLCBvbkZvY3VzQmFkZ2VOb2RlLCBzdHlsZXNdKTtcbiAgdmFyIHNjcmVlblJlYWRlclRleHQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgdmFyIGluc3RydWN0aW9ucztcbiAgICB2YXIgc2NyZWVuUmVhZGVyU3RyaW5ncyA9IHtcbiAgICAgIGNoZWNrZWQ6IHtcbiAgICAgICAgc3RhdGU6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5jaGVja2VkT3B0aW9uXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJDaGVja2VkIG9wdGlvbi5cIlxuICAgICAgICB9KSxcbiAgICAgICAgaW5zdHJ1Y3Rpb25zOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uY2hlY2tPcHRpb25JbnN0cnVjdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRvIGNoZWNrIHRoaXMgb3B0aW9uLCBwcmVzcyBFbnRlci5cIlxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIHVuY2hlY2tlZDoge1xuICAgICAgICBpbnN0cnVjdGlvbnM6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS51bmNoZWNrT3B0aW9uSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUbyB1bmNoZWNrIHRoaXMgb3B0aW9uLCBwcmVzcyBFbnRlci5cIlxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIGV4Y2x1ZGVkOiB7XG4gICAgICAgIHN0YXRlOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uZXhjbHVkZWRPcHRpb25cIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkV4Y2x1ZGVkIG9wdGlvbi5cIlxuICAgICAgICB9KSxcbiAgICAgICAgaW5zdHJ1Y3Rpb25zOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uZXhjbHVkZU9wdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gZXhjbHVkZSB0aGlzIG9wdGlvbiwgcHJlc3MgRW50ZXIuXCJcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICBtaXhlZDoge1xuICAgICAgICBzdGF0ZTogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLm1peGVkT3B0aW9uXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJNaXhlZCAoaW5kZXRlcm1pbmF0ZSkgb3B0aW9uLlwiXG4gICAgICAgIH0pLFxuICAgICAgICBpbnN0cnVjdGlvbnM6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5taXhlZE9wdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gY2hlY2sgdGhpcyBvcHRpb24gZm9yIGFsbCwgcHJlc3MgRW50ZXIgb25jZS5cIlxuICAgICAgICB9KSxcbiAgICAgICAgdW5jaGVja0luc3RydWN0aW9uczogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLm1peGVkT3B0aW9uVW5jaGVja0luc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gdW5jaGVjayB0aGlzIG9wdGlvbiBmb3IgYWxsLCBwcmVzcyBFbnRlciB0d2ljZS5cIlxuICAgICAgICB9KSxcbiAgICAgICAgZXhjbHVkZUluc3RydWN0aW9uczogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLm1peGVkT3B0aW9uRXhjbHVkZUluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gZXhjbHVkZSB0aGlzIG9wdGlvbiBmb3IgYWxsLCBwcmVzcyBFbnRlciB0d2ljZS5cIlxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH07XG4gICAgc3dpdGNoIChjaGVja2VkKSB7XG4gICAgICBjYXNlICdvbic6XG4gICAgICAgIHN0YXRlID0gc2NyZWVuUmVhZGVyU3RyaW5ncy5jaGVja2VkLnN0YXRlO1xuICAgICAgICBpbnN0cnVjdGlvbnMgPSBhbGxvd0V4Y2x1c2lvbnMgPyBzY3JlZW5SZWFkZXJTdHJpbmdzLmV4Y2x1ZGVkLmluc3RydWN0aW9ucyA6IHNlYXJjaGFibGUgPyBzY3JlZW5SZWFkZXJTdHJpbmdzLnVuY2hlY2tlZC5pbnN0cnVjdGlvbnMgOiB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb2ZmJzpcbiAgICAgICAgc3RhdGUgPSBzY3JlZW5SZWFkZXJTdHJpbmdzLmV4Y2x1ZGVkLnN0YXRlO1xuICAgICAgICBpbnN0cnVjdGlvbnMgPSBzY3JlZW5SZWFkZXJTdHJpbmdzLnVuY2hlY2tlZC5pbnN0cnVjdGlvbnM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWl4ZWQnOlxuICAgICAgICBzdGF0ZSA9IHNjcmVlblJlYWRlclN0cmluZ3MubWl4ZWQuc3RhdGU7XG4gICAgICAgIGluc3RydWN0aW9ucyA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHNjcmVlblJlYWRlclN0cmluZ3MubWl4ZWQuaW5zdHJ1Y3Rpb25zLCAnICcsIGFsbG93RXhjbHVzaW9ucyA/IHNjcmVlblJlYWRlclN0cmluZ3MubWl4ZWQuZXhjbHVkZUluc3RydWN0aW9ucyA6IHNjcmVlblJlYWRlclN0cmluZ3MubWl4ZWQudW5jaGVja0luc3RydWN0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpbnN0cnVjdGlvbnMgPSBhbGxvd0V4Y2x1c2lvbnMgfHwgc2VhcmNoYWJsZSA/IHNjcmVlblJlYWRlclN0cmluZ3MuY2hlY2tlZC5pbnN0cnVjdGlvbnMgOiB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUgfHwgaW5zdHJ1Y3Rpb25zID8gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIG51bGwsIHN0YXRlIHx8IGluc3RydWN0aW9ucyA/ICcuICcgOiBudWxsLCBzdGF0ZSwgc3RhdGUgJiYgaW5zdHJ1Y3Rpb25zID8gJyAnIDogbnVsbCwgaW5zdHJ1Y3Rpb25zKSkgOiBudWxsO1xuICB9LCBbY2hlY2tlZCwgc2VhcmNoYWJsZSwgYWxsb3dFeGNsdXNpb25zXSk7XG5cbiAgLy8gYXJpYS1jaGVja2VkIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCByb2xlPVwiY2hlY2tib3hcIiBidXRcbiAgLy8gdGhlIE1ETiBkb2N1bWVudGF0aW9uIGxpc3RzIGl0IGFzIGEgcG9zc2liaWxpdHkgZm9yIHJvbGU9XCJvcHRpb25cIi5cbiAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FjY2Vzc2liaWxpdHkvQVJJQS9BdHRyaWJ1dGVzL2FyaWEtY2hlY2tlZFxuICAvLyBhbmQgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQWNjZXNzaWJpbGl0eS9BUklBL1JvbGVzL29wdGlvbl9yb2xlXG4gIHZhciBhcmlhQ2hlY2tlZCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciByb2xlc1RoYXRDYW5CZU1peGVkID0gWydvcHRpb24nLCAnY2hlY2tib3gnLCAnbWVudWl0ZW1jaGVja2JveCddO1xuICAgIHZhciByb2xlc1RoYXRDYW5CZUNoZWNrZWQgPSBbXS5jb25jYXQocm9sZXNUaGF0Q2FuQmVNaXhlZCwgWydyYWRpbycsICdtZW51aXRlbXJhZGlvJywgJ3N3aXRjaCddKTtcbiAgICBpZiAoIXJvbGVzVGhhdENhbkJlQ2hlY2tlZC5pbmNsdWRlcyhyb2xlKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBzd2l0Y2ggKGNoZWNrZWQpIHtcbiAgICAgIGNhc2UgJ29uJzpcbiAgICAgIGNhc2UgJ29mZic6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnbWl4ZWQnOlxuICAgICAgICBpZiAocm9sZXNUaGF0Q2FuQmVNaXhlZC5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiAnbWl4ZWQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSwgW3JvbGUsIGNoZWNrZWRdKTtcbiAgdmFyIGhhc1Rvb2xUaXAgPSAhIXRvb2xUaXBDb250ZW50ICYmICFkaXNhYmxlZDtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG51bGwpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHRvb2x0aXBSZWYgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldFRvb2x0aXBSZWYgPSBfdXNlU3RhdGUyWzFdOyAvLyBOZWVkcyB0byBiZSBzdGF0ZSBhbmQgbm90IGEgcmVmIHRvIHRyaWdnZXIgdXNlRWZmZWN0XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUoX2FyaWFEZXNjcmliZWRCeSksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIGFyaWFEZXNjcmliZWRCeSA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0QXJpYURlc2NyaWJlZEJ5ID0gX3VzZVN0YXRlNFsxXTtcblxuICAvLyBNYW51YWxseSB0cmlnZ2VyIHRoZSB0b29sdGlwIG9uIGtleWJvYXJkIGZvY3VzXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0b29sdGlwUmVmKSByZXR1cm47XG4gICAgaWYgKGlzRm9jdXNlZCkge1xuICAgICAgdG9vbHRpcFJlZi5zaG93VG9vbFRpcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b29sdGlwUmVmLmhpZGVUb29sVGlwKCk7XG4gICAgfVxuICB9LCBbaXNGb2N1c2VkLCB0b29sdGlwUmVmXSk7XG5cbiAgLy8gTWFudWFsbHkgc2V0IHRoZSBgYXJpYS1kZXNjcmliZWRieWAgaWQgb24gdGhlIDxsaT4gd3JhcHBlclxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICh0b29sdGlwUmVmKSB7XG4gICAgICB2YXIgdG9vbHRpcElkID0gdG9vbHRpcFJlZi5zdGF0ZS5pZDtcbiAgICAgIHNldEFyaWFEZXNjcmliZWRCeShjbGFzc05hbWVzKHRvb2x0aXBJZCwgX2FyaWFEZXNjcmliZWRCeSkpO1xuICAgIH1cbiAgfSwgW3Rvb2x0aXBSZWYsIF9hcmlhRGVzY3JpYmVkQnldKTtcbiAgdmFyIGNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY3NzOiBzdHlsZXMuZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19jb250ZW50LFxuICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2NvbnRlbnRcIlxuICB9LCBvcHRpb25JY29uLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNzczogdGV4dFN0eWxlcyxcbiAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0XCJcbiAgfSwgY2hpbGRyZW4sIHNjcmVlblJlYWRlclRleHQpLCBhcHBlbmROb2RlKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsaVwiLCBfZXh0ZW5kcyh7XG4gICAgcm9sZTogcm9sZSxcbiAgICBcImFyaWEtZGlzYWJsZWRcIjogZGlzYWJsZWQsXG4gICAgXCJhcmlhLWNoZWNrZWRcIjogYXJpYUNoZWNrZWQgLy8gV2hldGhlciB0aGUgaXRlbSBpcyBcImNoZWNrZWRcIlxuICAgICxcbiAgICBcImFyaWEtc2VsZWN0ZWRcIjogIWRpc2FibGVkICYmIGlzRm9jdXNlZCAvLyBXaGV0aGVyIHRoZSBpdGVtIGhhcyBrZXlib2FyZCBmb2N1cyBwZXIgVzMgc3BlY1xuICAgICxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCwge1xuICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkQnlcbiAgfSksIGhhc1Rvb2xUaXAgPyBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIF9leHRlbmRzKHtcbiAgICByZWY6IHNldFRvb2x0aXBSZWYsXG4gICAgY29udGVudDogdG9vbFRpcENvbnRlbnQsXG4gICAgYW5jaG9yQ2xhc3NOYW1lOiBcImV1aS1mdWxsV2lkdGhcIixcbiAgICBwb3NpdGlvbjogXCJsZWZ0XCJcbiAgfSwgdG9vbFRpcFByb3BzKSwgY29udGVudCkgOiBjb250ZW50KTtcbn07XG5FdWlTZWxlY3RhYmxlTGlzdEl0ZW0ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgICAqIEFwcGxpZXMgYW4gaWNvbiBhbmQgdmlzdWFsIHN0eWxpbmcgdG8gYWN0aXZhdGVkIGl0ZW1zXG4gICAgICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBTaG93cyBpY29ucyBiYXNlZCBvbiBgY2hlY2tlZGAgdHlwZVxuICAgICAgICovXG4gIHNob3dJY29uczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogSGlnaGxpZ2h0cyB0aGUgaXRlbSBmb3IgcHNldWRvIGZvY3VzXG4gICAgICAgKi9cbiAgaXNGb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgYWxsb3dFeGNsdXNpb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBXaGVuIGVuYWJsZWQgYnkgc2V0dGluZyB0byBlaXRoZXIgYHRydWVgIG9yIHBhc3NpbmcgY3VzdG9tIGEgY3VzdG9tIGJhZGdlLFxuICAgICAgICogc2hvd3MgYSBob2xsb3cgYmFkZ2UgYXMgYW4gYXBwZW5kIChmYXIgcmlnaHQpIHdoZW4gdGhlIGl0ZW0gaXMgZm9jdXNlZC5cbiAgICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgd2hlbiBgdHJ1ZWAgaXMgYFx1MjFBOSB0byBzZWxlY3QvZGVzZWxlY3QvaW5jbHVkZS9leGNsdWRlYFxuICAgICAgICovXG4gIG9uRm9jdXNCYWRnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW55IHN0cmluZyBmcm9tIG91ciBpY29uIGxpYnJhcnlcbiAgICAgICAqL1xuICAgIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogVGhlIHNpZGUgb2YgdGhlIGJhZGdlIHRoZSBpY29uIHNob3VsZCBzaXRcbiAgICAgICAqL1xuICAgIGljb25TaWRlOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBlaXRoZXIgb3VyIHBhbGV0dGUgY29sb3JzIChwcmltYXJ5LCBzdWNjZXNzIC4uZXRjKSBvciBhIGhleCB2YWx1ZSBgI0ZGRkZGRmAsIGAjMDAwYC5cbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogV2lsbCBvdmVycmlkZSBhbnkgY29sb3IgcGFzc2VkIHRocm91Z2ggdGhlIGBjb2xvcmAgcHJvcC5cbiAgICAgICAqL1xuICAgIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogUHJvcHMgcGFzc2VkIHRvIHRoZSBjbG9zZSBidXR0b24uXG4gICAgICAgKi9cbiAgICBjbG9zZUJ1dHRvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIGljb24gd2l0aGluIHRoZSBiYWRnZVxuICAgICAgICovXG4gICAgaWNvbk9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBpY29uT25DbGljayBidXR0b25cbiAgICAgICAqL1xuICAgIGljb25PbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIHRoZSBiYWRnZSBpdHNlbGZcbiAgICAgICAqL1xuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBvbkNsaWNrIGJ1dHRvblxuICAgICAgICovXG4gICAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWw6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIFBhZGRpbmcgZm9yIHRoZSBsaXN0IGl0ZW1zLlxuICAgICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFdoZXRoZXIgdGhlIGBFdWlTZWxlY3RhYmxlYCBpbnN0YW5jZSBpcyBzZWFyY2hhYmxlLlxuICAgICAgICogV2hlbiB0cnVlLCB0aGUgU3BhY2Uga2V5IHdpbGwgbm90IHRvZ2dsZSBzZWxlY3Rpb24sIGFzIGl0IHdpbGwgdHlwZSBpbnRvIHRoZSBzZWFyY2ggYm94IGluc3RlYWQuIFNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zIHdpbGwgYmUgYWRkZWQgaW5zdHJ1Y3RpbmcgdXNlcnMgdG8gdXNlIHRoZSBFbnRlciBrZXkgdG8gc2VsZWN0IGl0ZW1zLlxuICAgICAgICogV2hlbiBmYWxzZSwgdGhlIFNwYWNlIGtleSB3aWxsIHRvZ2dsZSBpdGVtIHNlbGVjdGlvbi4gTm8gZXh0cmEgc2NyZWVuIHJlYWRlciBpbnN0cnVjdGlvbnMgd2lsbCBiZSBhZGRlZCwgYXMgU3BhY2UgdG8gdG9nZ2xlIGlzIGEgZ2VuZXJhbGx5IHN0YW5kYXJkIGZvciBtb3N0IHNlbGVjdC9jaGVja2VkIGVsZW1lbnRzLlxuICAgICAgICovXG4gIHNlYXJjaGFibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIEF0dHJpYnV0ZSBhcHBsaWVkIHRoZSBvcHRpb24gYDxsaT5gLlxuICAgICAgICogSWYgc2V0IHRvIGEgcm9sZSB0aGF0IGFsbG93cyBbYXJpYS1jaGVja2VkXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BY2Nlc3NpYmlsaXR5L0FSSUEvQXR0cmlidXRlcy9hcmlhLWNoZWNrZWQpLFxuICAgICAgICogYGFyaWEtY2hlY2tlZGAgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZWQuXG4gICAgICAgKi9cbiAgcm9sZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBIb3cgdG8gaGFuZGxlIGxvbmcgdGV4dCB3aXRoaW4gdGhlIGl0ZW0uXG4gICAgICAgKiBXcmFwcGluZyBvbmx5IHdvcmtzIGlmIHZpcnR1YWxpemF0aW9uIGlzIG9mZi5cbiAgICAgICAqL1xuICB0ZXh0V3JhcDogUHJvcFR5cGVzLm9uZU9mKFtcInRydW5jYXRlXCIsIFwid3JhcFwiXSksXG4gIC8qKlxuICAgICAgICogT3B0aW9uYWwgY3VzdG9tIHRvb2x0aXAgY29udGVudCBmb3IgdGhlIGJ1dHRvblxuICAgICAgICovXG4gIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBwcm9wcyB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nICoqW0V1aVRvb2xUaXBdKC8jL2Rpc3BsYXkvdG9vbHRpcCkqKlxuICAgICAgICovXG4gIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSwgZXVpVGV4dFRydW5jYXRlLCBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlTZWxlY3RhYmxlTGlzdEl0ZW1WYXJpYWJsZXMgPSBmdW5jdGlvbiBldWlTZWxlY3RhYmxlTGlzdEl0ZW1WYXJpYWJsZXMoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHZhciBsaWdodGVyQm9yZGVyID0gdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuYm9yZGVyLmNvbG9yLCAwLjQpO1xuICByZXR1cm4ge1xuICAgIGJvcmRlcjogXCJcIi5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIFwiKS5jb25jYXQobGlnaHRlckJvcmRlciksXG4gICAgcGFkZGluZ0hvcml6b250YWw6IGV1aVRoZW1lLnNpemUubSxcbiAgICBwYWRkaW5nVmVydGljYWw6IGV1aVRoZW1lLnNpemUueHNcbiAgfTtcbn07XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxcm5lbnJ0LWV1aVNlbGVjdGFibGVMaXN0SXRlbV9fdGV4dFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6ZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0O1wiXG59IDoge1xuICBuYW1lOiBcIjFybmVucnQtZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDpldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3RleHQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpU2VsZWN0YWJsZUxpc3RJdGVtU3R5bGVzID0gZnVuY3Rpb24gZXVpU2VsZWN0YWJsZUxpc3RJdGVtU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBfZXVpU2VsZWN0YWJsZUxpc3RJdGUgPSBldWlTZWxlY3RhYmxlTGlzdEl0ZW1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBib3JkZXIgPSBfZXVpU2VsZWN0YWJsZUxpc3RJdGUuYm9yZGVyLFxuICAgIHBhZGRpbmdIb3Jpem9udGFsID0gX2V1aVNlbGVjdGFibGVMaXN0SXRlLnBhZGRpbmdIb3Jpem9udGFsLFxuICAgIHBhZGRpbmdWZXJ0aWNhbCA9IF9ldWlTZWxlY3RhYmxlTGlzdEl0ZS5wYWRkaW5nVmVydGljYWw7XG4gIHJldHVybiB7XG4gICAgZXVpU2VsZWN0YWJsZUxpc3RJdGVtOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTppbmxpbmUtZmxleDtcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiBsaW5lLWhlaWdodDpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAnbScpLmxpbmVIZWlnaHQsIFwiO2ZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLmZvbnRTaXplLCBcIjt0ZXh0LWFsaWduOnN0YXJ0O2N1cnNvcjpwb2ludGVyO292ZXJmbG93OmhpZGRlbjsmOm5vdCg6bGFzdC1vZi10eXBlKXtcIiwgbG9naWNhbENTUygnYm9yZGVyLWJvdHRvbScsIGJvcmRlciksIFwiO30mW2FyaWEtZGlzYWJsZWQ9J3RydWUnXXtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRpc2FibGVkVGV4dCwgXCI7Y3Vyc29yOm5vdC1hbGxvd2VkO30mOmhvdmVyLCYuZXVpU2VsZWN0YWJsZUxpc3RJdGVtLWlzRm9jdXNlZHsmOm5vdChbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddKXtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnlUZXh0LCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUaGVtZS5mb2N1cy5iYWNrZ3JvdW5kQ29sb3IsIFwiOy5ldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3RleHR7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9fX07bGFiZWw6ZXVpU2VsZWN0YWJsZUxpc3RJdGVtO1wiKSxcbiAgICBwYWRkaW5nOiB7XG4gICAgICBub25lOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOm5vbmU7XCIpLFxuICAgICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdwYWRkaW5nLXZlcnRpY2FsJywgcGFkZGluZ1ZlcnRpY2FsKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIHBhZGRpbmdIb3Jpem9udGFsKSwgXCI7O2xhYmVsOnM7XCIpXG4gICAgfSxcbiAgICAvLyBDaGlsZCBlbGVtZW50c1xuXG4gICAgZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19jb250ZW50OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjs7bGFiZWw6ZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19jb250ZW50O1wiKSxcbiAgICBldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3RleHQ6IF9yZWYsXG4gICAgdGV4dFdyYXA6IHtcbiAgICAgIHRydW5jYXRlOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHRUcnVuY2F0ZSgpLCBcIjtsYWJlbDp0cnVuY2F0ZTtcIiksXG4gICAgICB3cmFwOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOndyYXA7XCIpXG4gICAgfSxcbiAgICBldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3ByZXBlbmQ6IC8qI19fUFVSRV9fKi9jc3MoXCJmbGV4LXNocmluazowO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tcmlnaHQnLCBwYWRkaW5nSG9yaXpvbnRhbCksIFwiOztsYWJlbDpldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3ByZXBlbmQ7XCIpLFxuICAgIGV1aVNlbGVjdGFibGVMaXN0SXRlbV9fYXBwZW5kOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1zaHJpbms6MDtcIiwgbG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCBwYWRkaW5nSG9yaXpvbnRhbCksIFwiOztsYWJlbDpldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2FwcGVuZDtcIiksXG4gICAgZ2V0IGV1aVNlbGVjdGFibGVMaXN0SXRlbV9faWNvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmV1aVNlbGVjdGFibGVMaXN0SXRlbV9fcHJlcGVuZDtcbiAgICB9XG4gIH07XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG4vLyAuZXVpU2VsZWN0YWJsZUxpc3RfX2xpc3QgcmVxdWlyZXMgYSBzdGF0aWMgdmFuaWxsYSBjbGFzc05hbWVcbi8vIGFzIGl0J3MgcGFzc2VkIGRvd24gdG8gcmVhY3Qtd2luZG93J3MgdmlydHVhbGl6YXRpb24gbGlicmFyeVxuaW1wb3J0IHsgY3NzIGFzIGNsYXNzTmFtZUNzcyB9IGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGV1aVlTY3JvbGxXaXRoU2hhZG93cywgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVRpdGxlIH0gZnJvbSAnLi4vLi4vdGl0bGUvdGl0bGUuc3R5bGVzJztcbmltcG9ydCB7IGV1aVNlbGVjdGFibGVMaXN0SXRlbVZhcmlhYmxlcyB9IGZyb20gJy4vc2VsZWN0YWJsZV9saXN0X2l0ZW0uc3R5bGVzJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFnaXU4ajUtZnVsbEhlaWdodFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6ZnVsbEhlaWdodDtcIlxufSA6IHtcbiAgbmFtZTogXCIxZ2l1OGo1LWZ1bGxIZWlnaHRcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOmZ1bGxIZWlnaHQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpU2VsZWN0YWJsZUxpc3RTdHlsZXMgPSBmdW5jdGlvbiBldWlTZWxlY3RhYmxlTGlzdFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgaXRlbVZhcnMgPSBldWlTZWxlY3RhYmxlTGlzdEl0ZW1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIHtcbiAgICBldWlTZWxlY3RhYmxlTGlzdDogLyojX19QVVJFX18qL2NzcyhcIiY6aGFzKDpmb2N1cy12aXNpYmxlKXtcIiwgZXVpRm9jdXNSaW5nKGV1aVRoZW1lQ29udGV4dCwgJ291dHNldCcpLCBcIjt9O2xhYmVsOmV1aVNlbGVjdGFibGVMaXN0O1wiKSxcbiAgICBmdWxsSGVpZ2h0OiBfcmVmLFxuICAgIGJvcmRlcmVkOiAvKiNfX1BVUkVfXyovY3NzKFwib3ZlcmZsb3c6aGlkZGVuO2JvcmRlcjpcIiwgZXVpVGhlbWUuYm9yZGVyLnRoaW4sIFwiO2JvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBcIjs7bGFiZWw6Ym9yZGVyZWQ7XCIpLFxuICAgIGV1aVNlbGVjdGFibGVMaXN0X19saXN0OiAvKiNfX1BVUkVfXyovY2xhc3NOYW1lQ3NzKGV1aVlTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZUNvbnRleHQpLCBcIiAmOmZvY3VzLCY+dWw6Zm9jdXN7b3V0bGluZTpub25lO307bGFiZWw6ZXVpU2VsZWN0YWJsZUxpc3RfX2xpc3Q7XCIpLFxuICAgIGV1aVNlbGVjdGFibGVMaXN0X19ncm91cExhYmVsOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4eHMnKSwgXCIgZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtcIiwgbG9naWNhbENTUygnYm9yZGVyLWJvdHRvbScsIGl0ZW1WYXJzLmJvcmRlciksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLXZlcnRpY2FsJywgaXRlbVZhcnMucGFkZGluZ1ZlcnRpY2FsKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGl0ZW1WYXJzLnBhZGRpbmdIb3Jpem9udGFsKSwgXCI7O2xhYmVsOmV1aVNlbGVjdGFibGVMaXN0X19ncm91cExhYmVsO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpU2VsZWN0YWJsZVN0eWxlcyA9IHtcbiAgZXVpU2VsZWN0YWJsZTogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgIG5hbWU6IFwiMXNkMHF2LWV1aVNlbGVjdGFibGVcIixcbiAgICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsYWJlbDpldWlTZWxlY3RhYmxlO1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCIxc2QwcXYtZXVpU2VsZWN0YWJsZVwiLFxuICAgIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2xhYmVsOmV1aVNlbGVjdGFibGU7XCIsXG4gICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gIH0sXG4gIGZ1bGxIZWlnaHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnaGVpZ2h0JywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxIZWlnaHQ7XCIpXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wcmVzc2VkXCIsIFwidGFibGVMYXlvdXRcIiwgXCJyZXNwb25zaXZlQnJlYWtwb2ludFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VJc0V1aVRhYmxlUmVzcG9uc2l2ZSwgRXVpVGFibGVJc1Jlc3BvbnNpdmVDb250ZXh0IH0gZnJvbSAnLi9tb2JpbGUvcmVzcG9uc2l2ZV9jb250ZXh0JztcbmltcG9ydCB7IGV1aVRhYmxlU3R5bGVzIH0gZnJvbSAnLi90YWJsZS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGUgPSBmdW5jdGlvbiBFdWlUYWJsZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICBfcmVmJHRhYmxlTGF5b3V0ID0gX3JlZi50YWJsZUxheW91dCxcbiAgICB0YWJsZUxheW91dCA9IF9yZWYkdGFibGVMYXlvdXQgPT09IHZvaWQgMCA/ICdmaXhlZCcgOiBfcmVmJHRhYmxlTGF5b3V0LFxuICAgIHJlc3BvbnNpdmVCcmVha3BvaW50ID0gX3JlZi5yZXNwb25zaXZlQnJlYWtwb2ludCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSB1c2VJc0V1aVRhYmxlUmVzcG9uc2l2ZShyZXNwb25zaXZlQnJlYWtwb2ludCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGUnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFibGVTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUYWJsZSwgc3R5bGVzLmxheW91dFt0YWJsZUxheW91dF0sICghY29tcHJlc3NlZCB8fCBpc1Jlc3BvbnNpdmUpICYmIHN0eWxlcy51bmNvbXByZXNzZWQsIGNvbXByZXNzZWQgJiYgIWlzUmVzcG9uc2l2ZSAmJiBzdHlsZXMuY29tcHJlc3NlZCwgaXNSZXNwb25zaXZlID8gc3R5bGVzLm1vYmlsZSA6IHN0eWxlcy5kZXNrdG9wXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0YWJsZVwiLCBfZXh0ZW5kcyh7XG4gICAgdGFiSW5kZXg6IC0xLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlUYWJsZUlzUmVzcG9uc2l2ZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogaXNSZXNwb25zaXZlXG4gIH0sIGNoaWxkcmVuKSk7XG59O1xuRXVpVGFibGUucHJvcFR5cGVzID0ge1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogTmFtZWQgYnJlYWtwb2ludC4gQmVsb3cgdGhpcyBzaXplLCB0aGUgdGFibGUgd2lsbCBjb2xsYXBzZVxuICAgICAqIGludG8gcmVzcG9uc2l2ZSBjYXJkcy5cbiAgICAgKlxuICAgICAqIFBhc3MgYGZhbHNlYCB0byBuZXZlciBjb2xsYXBzZSB0byBhIG1vYmlsZSB2aWV3LCBvciBpbnZlcnNlbHksXG4gICAgICogYHRydWVgIHRvIGFsd2F5cyByZW5kZXIgbW9iaWxlLWZyaWVuZGx5IGNhcmRzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgbVxuICAgICAqL1xuICByZXNwb25zaXZlQnJlYWtwb2ludDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIHRhYmxlLWxheW91dCBDU1MgcHJvcGVydHlcbiAgICAgKi9cbiAgdGFibGVMYXlvdXQ6IFByb3BUeXBlcy5vbmVPZihbXCJmaXhlZFwiLCBcImF1dG9cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUlzV2l0aGluTWluQnJlYWtwb2ludCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUNvbXBvbmVudERlZmF1bHRzIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXIvY29tcG9uZW50X2RlZmF1bHRzJztcbmV4cG9ydCB2YXIgREVGQVVMVF9UQUJMRV9CUkVBS1BPSU5UID0gJ20nO1xuXG4vKipcbiAqIFVzZWQgYnkgcGFyZW50L3RvcC1sZXZlbCB0YWJsZSBjb21wb25lbnRzIHRvIGRldGVybWluZSBpc1Jlc3BvbnNpdmUgc3RhdGVcbiAqIGJhc2VkIG9uIHRoZSBwYXNzZWQgYnJlYWtwb2ludFxuICovXG5leHBvcnQgdmFyIHVzZUlzRXVpVGFibGVSZXNwb25zaXZlID0gZnVuY3Rpb24gdXNlSXNFdWlUYWJsZVJlc3BvbnNpdmUoY29tcG9uZW50UHJvcCkge1xuICB2YXIgX3VzZUNvbXBvbmVudERlZmF1bHRzLCBfcmVmO1xuICB2YXIgY29tcG9uZW50RGVmYXVsdCA9IChfdXNlQ29tcG9uZW50RGVmYXVsdHMgPSB1c2VDb21wb25lbnREZWZhdWx0cygpLkV1aVRhYmxlKSA9PT0gbnVsbCB8fCBfdXNlQ29tcG9uZW50RGVmYXVsdHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF91c2VDb21wb25lbnREZWZhdWx0cy5yZXNwb25zaXZlQnJlYWtwb2ludDtcbiAgdmFyIGJyZWFrcG9pbnQgPSAoX3JlZiA9IGNvbXBvbmVudFByb3AgIT09IG51bGwgJiYgY29tcG9uZW50UHJvcCAhPT0gdm9pZCAwID8gY29tcG9uZW50UHJvcCA6IGNvbXBvbmVudERlZmF1bHQpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBERUZBVUxUX1RBQkxFX0JSRUFLUE9JTlQ7XG4gIHZhciBpc0Jvb2xlYW4gPSB0eXBlb2YgYnJlYWtwb2ludCA9PT0gJ2Jvb2xlYW4nO1xuXG4gIC8vIE5vdGU6IHdlJ3JlIHVzaW5nIGAhdXNlSXNXaXRoaW5NaW5CcmVha3BvaW50YCBoZXJlIGluc3RlYWQgb2YgYHVzZUlzV2l0aGluTWF4QnJlYWtwb2ludGBcbiAgLy8gYmVjYXVzZSBpdCBtb3JlIGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIHNpbmdsZSBicmVha3BvaW50IGF0IHdoaWNoIHRhYmxlcyBjb2xsYXBzZVxuICB2YXIgaXNSZXNwb25zaXZlID0gIXVzZUlzV2l0aGluTWluQnJlYWtwb2ludChpc0Jvb2xlYW4gPyAnJyA6IGJyZWFrcG9pbnQpO1xuICByZXR1cm4gaXNCb29sZWFuID8gYnJlYWtwb2ludCA6IGlzUmVzcG9uc2l2ZTtcbn07XG5cbi8qKlxuICogQ29udGV4dCBzZXQgYnkgcGFyZW50IHRhYmxlIGNvbXBvbmVudHNcbiAqIEhvb2sgdXNlZCBieSBjZWxscyB0byBmZXRjaCBwYXJlbnQgaXNSZXNwb25zaXZlIHN0YXRlXG4gKi9cbmV4cG9ydCB2YXIgRXVpVGFibGVJc1Jlc3BvbnNpdmVDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoZmFsc2UpO1xuZXhwb3J0IHZhciB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSA9IGZ1bmN0aW9uIHVzZUV1aVRhYmxlSXNSZXNwb25zaXZlKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChFdWlUYWJsZUlzUmVzcG9uc2l2ZUNvbnRleHQpO1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUsIGV1aU51bWJlckZvcm1hdCwgbG9naWNhbENTUywgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpVGFibGVWYXJpYWJsZXMgPSBmdW5jdGlvbiBldWlUYWJsZVZhcmlhYmxlcyhfcmVmNCkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmNC5ldWlUaGVtZTtcbiAgdmFyIGNlbGxDb250ZW50UGFkZGluZyA9IGV1aVRoZW1lLnNpemUucztcbiAgdmFyIGNvbXByZXNzZWRDZWxsQ29udGVudFBhZGRpbmcgPSBldWlUaGVtZS5zaXplLnhzO1xuICB2YXIgbW9iaWxlU2l6ZXMgPSB7XG4gICAgYWN0aW9uczoge1xuICAgICAgd2lkdGg6IGV1aVRoZW1lLnNpemUueHhsLFxuICAgICAgb2Zmc2V0OiBtYXRoV2l0aFVuaXRzKGNlbGxDb250ZW50UGFkZGluZywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggKiAyO1xuICAgICAgfSlcbiAgICB9LFxuICAgIGNoZWNrYm94OiB7XG4gICAgICB3aWR0aDogbWF0aFdpdGhVbml0cyhbZXVpVGhlbWUuc2l6ZS54bCwgZXVpVGhlbWUuc2l6ZS54c10sIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgICAgIHJldHVybiB4ICsgeTtcbiAgICAgIH0pLFxuICAgICAgb2Zmc2V0OiBtYXRoV2l0aFVuaXRzKGNlbGxDb250ZW50UGFkZGluZywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggLyAyO1xuICAgICAgfSlcbiAgICB9XG4gIH07XG4gIHZhciBjaGVja2JveFNpemUgPSBldWlUaGVtZS5zaXplLnhsO1xuICByZXR1cm4ge1xuICAgIGNlbGxDb250ZW50UGFkZGluZzogY2VsbENvbnRlbnRQYWRkaW5nLFxuICAgIGNvbXByZXNzZWRDZWxsQ29udGVudFBhZGRpbmc6IGNvbXByZXNzZWRDZWxsQ29udGVudFBhZGRpbmcsXG4gICAgbW9iaWxlU2l6ZXM6IG1vYmlsZVNpemVzLFxuICAgIGNoZWNrYm94U2l6ZTogY2hlY2tib3hTaXplXG4gIH07XG59O1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiZ3QydjFjLW1vYmlsZVwiLFxuICBzdHlsZXM6IFwidGhlYWR7ZGlzcGxheTpub25lO310Zm9vdHtkaXNwbGF5Om5vbmU7fTtsYWJlbDptb2JpbGU7XCJcbn0gOiB7XG4gIG5hbWU6IFwiZ3QydjFjLW1vYmlsZVwiLFxuICBzdHlsZXM6IFwidGhlYWR7ZGlzcGxheTpub25lO310Zm9vdHtkaXNwbGF5Om5vbmU7fTtsYWJlbDptb2JpbGU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxOHVvbGpjLWF1dG9cIixcbiAgc3R5bGVzOiBcInRhYmxlLWxheW91dDphdXRvO2xhYmVsOmF1dG87XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTh1b2xqYy1hdXRvXCIsXG4gIHN0eWxlczogXCJ0YWJsZS1sYXlvdXQ6YXV0bztsYWJlbDphdXRvO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWZtNnpmdy1maXhlZFwiLFxuICBzdHlsZXM6IFwidGFibGUtbGF5b3V0OmZpeGVkO2xhYmVsOmZpeGVkO1wiXG59IDoge1xuICBuYW1lOiBcIjFmbTZ6ZnctZml4ZWRcIixcbiAgc3R5bGVzOiBcInRhYmxlLWxheW91dDpmaXhlZDtsYWJlbDpmaXhlZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlUYWJsZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRhYmxlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBfZXVpVGFibGVWYXJpYWJsZXMgPSBldWlUYWJsZVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIGNlbGxDb250ZW50UGFkZGluZyA9IF9ldWlUYWJsZVZhcmlhYmxlcy5jZWxsQ29udGVudFBhZGRpbmcsXG4gICAgY29tcHJlc3NlZENlbGxDb250ZW50UGFkZGluZyA9IF9ldWlUYWJsZVZhcmlhYmxlcy5jb21wcmVzc2VkQ2VsbENvbnRlbnRQYWRkaW5nO1xuICByZXR1cm4ge1xuICAgIGV1aVRhYmxlOiAvKiNfX1BVUkVfXyovY3NzKGV1aU51bWJlckZvcm1hdChldWlUaGVtZUNvbnRleHQpLCBcIiBcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiBib3JkZXI6bm9uZTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7YmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsIFwiOztsYWJlbDpldWlUYWJsZTtcIiksXG4gICAgbGF5b3V0OiB7XG4gICAgICBmaXhlZDogX3JlZjMsXG4gICAgICBhdXRvOiBfcmVmMlxuICAgIH0sXG4gICAgLyoqXG4gICAgICogMS4gVGhlIHBhZGRpbmcgb24gdGhlIGAuZXVpVGFibGVDZWxsQ29udGVudGAgZGl2IGFsbG93cyB0aGUgZWxsaXBzaXMgdG8gc2hvdyBpZiB0aGVcbiAgICAgKiBjb250ZW50IGlzIHRydW5jYXRlZC4gSWYgdGhlIHBhZGRpbmcgd2FzIG9uIHRoZSBjZWxsLCB0aGUgZWxsaXBzaXMgd291bGQgYmUgY3JvcHBlZC5cbiAgICAgKiAyLiBUaGUgYDp3aGVyZSgpYCBzZWxlY3RvciBzZXRzIHRoZSBzcGVjaWZpY2l0eSB0byAwLCBhbGxvd2luZyBjb25zdW1lcnMgdG8gbW9yZSBlYXNpbHlcbiAgICAgKiBvdmVycmlkZSBvdXIgQ1NTIGlmIG5lZWRlZFxuICAgICAqL1xuICAgIHVuY29tcHJlc3NlZDogLyojX19QVVJFX18qL2NzcyhcImZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLmZvbnRTaXplLCBcIjtsaW5lLWhlaWdodDpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAnbScpLmxpbmVIZWlnaHQsIFwiOyYgOndoZXJlKC5ldWlUYWJsZUNlbGxDb250ZW50KXtwYWRkaW5nOlwiLCBjZWxsQ29udGVudFBhZGRpbmcsIFwiO307bGFiZWw6dW5jb21wcmVzc2VkO1wiKSxcbiAgICBjb21wcmVzc2VkOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiJiA6d2hlcmUoLmV1aVRhYmxlQ2VsbENvbnRlbnQpe3BhZGRpbmc6XCIsIGNvbXByZXNzZWRDZWxsQ29udGVudFBhZGRpbmcsIFwiO307bGFiZWw6Y29tcHJlc3NlZDtcIiksXG4gICAgLyoqXG4gICAgICogUmVzcG9uc2l2ZS9tb2JpbGUgdnMgZGVza3RvcCBzdHlsZXNcbiAgICAgKiBJbmRpdmlkdWFsIHJvdy9jZWxscyBoYW5kbGUgdGhlaXIgb3duIGRlc2t0b3AgdnMgbW9iaWxlIHN0eWxlc1xuICAgICAqL1xuICAgIGRlc2t0b3A6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZGVza3RvcDtcIiksXG4gICAgbW9iaWxlOiBfcmVmXG4gIH07XG59O1xuXG4vLyBUaGUgdGFibGUgY2FwdGlvbiBuZWVkcyB0byBub3QgYmUgYWJzb2x1dGVseSBwb3NpdGlvbmVkLCBiZWNhdXNlIGZvciBzb21lIHJlYXNvblxuLy8gaXQgY2F1c2VzIHdlaXJkIGxheW91dCBpc3N1ZXMvZG91YmxlIGJvcmRlcnMgd2hlbiB1c2VkIHdpdGhpbiBhIDx0YWJsZT5cbi8vIEFsc28gbmVlZHMgdG8gYmUgIWltcG9ydGFudCB0byBvdmVycmlkZSBldWlTY3JlZW5SZWFkZXJPbmx5IGFic29sdXRlIHBvc2l0aW9uaW5nXG5leHBvcnQgdmFyIGV1aVRhYmxlQ2FwdGlvblN0eWxlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxaG5pbzk4LWV1aVRhYmxlQ2FwdGlvblN0eWxlc1wiLFxuICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmUhaW1wb3J0YW50O2xhYmVsOmV1aVRhYmxlQ2FwdGlvblN0eWxlcztcIlxufSA6IHtcbiAgbmFtZTogXCIxaG5pbzk4LWV1aVRhYmxlQ2FwdGlvblN0eWxlc1wiLFxuICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmUhaW1wb3J0YW50O2xhYmVsOmV1aVRhYmxlQ2FwdGlvblN0eWxlcztcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJib2R5UmVmXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVCb2R5ID0gZnVuY3Rpb24gRXVpVGFibGVCb2R5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBib2R5UmVmID0gX3JlZi5ib2R5UmVmLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0Ym9keVwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgcmVmOiBib2R5UmVmXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpVGFibGVCb2R5LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGJvZHlSZWY6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlRm9vdGVyID0gZnVuY3Rpb24gRXVpVGFibGVGb290ZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0Zm9vdFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBudWxsLCBjaGlsZHJlbikpO1xufTtcbkV1aVRhYmxlRm9vdGVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImFsaWduXCIsIFwiY2xhc3NOYW1lXCIsIFwid2lkdGhcIiwgXCJzdHlsZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMsIExFRlRfQUxJR05NRU5UIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRXVpVGFibGVDZWxsQ29udGVudCB9IGZyb20gJy4vX3RhYmxlX2NlbGxfY29udGVudCc7XG5pbXBvcnQgeyBldWlUYWJsZUhlYWRlckZvb3RlckNlbGxTdHlsZXMgfSBmcm9tICcuL3RhYmxlX2NlbGxzX3NoYXJlZC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVGb290ZXJDZWxsID0gZnVuY3Rpb24gRXVpVGFibGVGb290ZXJDZWxsKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBfcmVmJGFsaWduID0gX3JlZi5hbGlnbixcbiAgICBhbGlnbiA9IF9yZWYkYWxpZ24gPT09IHZvaWQgMCA/IExFRlRfQUxJR05NRU5UIDogX3JlZiRhbGlnbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUZvb3RlckNlbGwnLCBjbGFzc05hbWUpO1xuICB2YXIgaW5saW5lU3R5bGVzID0gcmVzb2x2ZVdpZHRoQXNTdHlsZShzdHlsZSwgd2lkdGgpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFibGVIZWFkZXJGb290ZXJDZWxsU3R5bGVzKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0ZFwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBzdHlsZXMuZXVpVGFibGVGb290ZXJDZWxsLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBzdHlsZTogaW5saW5lU3R5bGVzXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlQ2VsbENvbnRlbnQsIHtcbiAgICBhbGlnbjogYWxpZ24sXG4gICAgdHJ1bmNhdGVUZXh0OiB0cnVlLFxuICAgIHRleHRPbmx5OiB0cnVlXG4gIH0sIGNoaWxkcmVuKSk7XG59O1xuRXVpVGFibGVGb290ZXJDZWxsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGFsaWduOiBQcm9wVHlwZXMuYW55LFxuICB3aWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKVxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcIndpZHRoXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIFdBUk5JTkdfTUVTU0FHRSA9ICdUd28gYHdpZHRoYCBwcm9wZXJ0aWVzIHdlcmUgcHJvdmlkZWQuIFByb3ZpZGUgb25seSBvbmUgb2YgYHN0eWxlLndpZHRoYCBvciBgd2lkdGhgIHRvIGF2b2lkIGNvbmZsaWN0cy4nO1xuZXhwb3J0IHZhciByZXNvbHZlV2lkdGhBc1N0eWxlID0gZnVuY3Rpb24gcmVzb2x2ZVdpZHRoQXNTdHlsZSgpIHtcbiAgdmFyIHN0eWxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIHdpZHRoID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBzdHlsZVdpZHRoID0gc3R5bGUud2lkdGgsXG4gICAgc3R5bGVSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHN0eWxlLCBfZXhjbHVkZWQpO1xuICB2YXIgYXR0cldpZHRoID0gd2lkdGg7XG4gIGlmIChhdHRyV2lkdGggIT0gbnVsbCAmJiAodHlwZW9mIGF0dHJXaWR0aCA9PT0gJ251bWJlcicgfHwgIWlzTmFOKE51bWJlcihhdHRyV2lkdGgpKSkgLy8gdHJhbnNmb3JtIHtudW1iZXJ9IG9yIHVuaXRsZXNzICdudW1iZXInIHRvIHB4IHN0cmluZ1xuICApIHtcbiAgICBhdHRyV2lkdGggPSBcIlwiLmNvbmNhdChhdHRyV2lkdGgsIFwicHhcIik7XG4gIH1cbiAgaWYgKHN0eWxlV2lkdGggJiYgYXR0cldpZHRoKSB7XG4gICAgY29uc29sZS53YXJuKFdBUk5JTkdfTUVTU0FHRSk7XG4gIH1cbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgc3R5bGVSZXN0KSwge30sIHtcbiAgICB3aWR0aDogYXR0cldpZHRoIHx8IHN0eWxlV2lkdGhcbiAgfSk7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJhbGlnblwiLCBcInRleHRPbmx5XCIsIFwidHJ1bmNhdGVUZXh0XCIsIFwiaGFzQWN0aW9uc1wiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBMRUZUX0FMSUdOTUVOVCwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZWRpY2F0ZSc7XG5pbXBvcnQgeyBFdWlUZXh0QmxvY2tUcnVuY2F0ZSB9IGZyb20gJy4uL3RleHRfdHJ1bmNhdGUnO1xuaW1wb3J0IHsgdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUgfSBmcm9tICcuL21vYmlsZS9yZXNwb25zaXZlX2NvbnRleHQnO1xuaW1wb3J0IHsgZXVpVGFibGVDZWxsQ29udGVudFN0eWxlcyB9IGZyb20gJy4vX3RhYmxlX2NlbGxfY29udGVudC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVDZWxsQ29udGVudCA9IGZ1bmN0aW9uIEV1aVRhYmxlQ2VsbENvbnRlbnQoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgIGFsaWduID0gX3JlZiRhbGlnbiA9PT0gdm9pZCAwID8gTEVGVF9BTElHTk1FTlQgOiBfcmVmJGFsaWduLFxuICAgIHRleHRPbmx5ID0gX3JlZi50ZXh0T25seSxcbiAgICBfcmVmJHRydW5jYXRlVGV4dCA9IF9yZWYudHJ1bmNhdGVUZXh0LFxuICAgIHRydW5jYXRlVGV4dCA9IF9yZWYkdHJ1bmNhdGVUZXh0ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkdHJ1bmNhdGVUZXh0LFxuICAgIGhhc0FjdGlvbnMgPSBfcmVmLmhhc0FjdGlvbnMsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNSZXNwb25zaXZlID0gdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUoKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRhYmxlQ2VsbENvbnRlbnRTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUYWJsZUNlbGxDb250ZW50LCBzdHlsZXNbYWxpZ25dLCB0cnVuY2F0ZVRleHQgPT09IHRydWUgJiYgc3R5bGVzLnRydW5jYXRlVGV4dCwgdHJ1bmNhdGVUZXh0ID09PSBmYWxzZSAmJiBzdHlsZXMud3JhcFRleHRdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoaGFzQWN0aW9ucyA/IFtzdHlsZXMuaGFzQWN0aW9ucy5hY3Rpb25zLCAhaXNSZXNwb25zaXZlICYmIHN0eWxlcy5oYXNBY3Rpb25zLmRlc2t0b3AsIGlzUmVzcG9uc2l2ZSAmJiBoYXNBY3Rpb25zICE9PSAnY3VzdG9tJyAmJiBzdHlsZXMuaGFzQWN0aW9ucy5tb2JpbGVdIDogW10pKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUNlbGxDb250ZW50JywgY2xhc3NOYW1lKTtcbiAgdmFyIHJlbmRlcmVkQ2hpbGRyZW4gPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGV4dENsYXNzZXMgPSAnZXVpVGFibGVDZWxsQ29udGVudF9fdGV4dCc7XG4gICAgaWYgKGlzT2JqZWN0KHRydW5jYXRlVGV4dCkgJiYgdHJ1bmNhdGVUZXh0LmxpbmVzKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUZXh0QmxvY2tUcnVuY2F0ZSwge1xuICAgICAgICBsaW5lczogdHJ1bmNhdGVUZXh0LmxpbmVzLFxuICAgICAgICBjbG9uZUVsZW1lbnQ6IHRydWVcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiB0ZXh0Q2xhc3Nlc1xuICAgICAgfSwgY2hpbGRyZW4pKTtcbiAgICB9XG4gICAgaWYgKHRleHRPbmx5ID09PSB0cnVlIHx8IHRydW5jYXRlVGV4dCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiB0ZXh0Q2xhc3Nlc1xuICAgICAgfSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH0sIFtjaGlsZHJlbiwgdGV4dE9ubHksIHRydW5jYXRlVGV4dF0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCByZW5kZXJlZENoaWxkcmVuKTtcbn07XG5FdWlUYWJsZUNlbGxDb250ZW50LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHRydW5jYXRlVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBsaW5lczogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG4gIH0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW251bGxdKV0pXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlUZXh0VHJ1bmNhdGUsIGV1aVRleHRCcmVha1dvcmQsIGxvZ2ljYWxUZXh0QWxpZ25DU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxdDFwdGxjLW1vYmlsZVwiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MDtsYWJlbDptb2JpbGU7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXQxcHRsYy1tb2JpbGVcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjA7bGFiZWw6bW9iaWxlO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwibzl0ZGpkLWRlc2t0b3BcIixcbiAgc3R5bGVzOiBcImZsZXgtd3JhcDp3cmFwO2xhYmVsOmRlc2t0b3A7XCJcbn0gOiB7XG4gIG5hbWU6IFwibzl0ZGpkLWRlc2t0b3BcIixcbiAgc3R5bGVzOiBcImZsZXgtd3JhcDp3cmFwO2xhYmVsOmRlc2t0b3A7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxeDN4M2poLWNlbnRlclwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtsYWJlbDpjZW50ZXI7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXgzeDNqaC1jZW50ZXJcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7bGFiZWw6Y2VudGVyO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXZzaWQyZC1ldWlUYWJsZUNlbGxDb250ZW50XCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2xhYmVsOmV1aVRhYmxlQ2VsbENvbnRlbnQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXZzaWQyZC1ldWlUYWJsZUNlbGxDb250ZW50XCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2xhYmVsOmV1aVRhYmxlQ2VsbENvbnRlbnQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpVGFibGVDZWxsQ29udGVudFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRhYmxlQ2VsbENvbnRlbnRTdHlsZXMoX3JlZjUpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjUuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpVGFibGVDZWxsQ29udGVudDogX3JlZjQsXG4gICAgLy8gQWxpZ25cbiAgICBsZWZ0OiBudWxsLFxuICAgIC8vIERlZmF1bHQsIG5vIENTUyBuZWVkZWRcbiAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhcImp1c3RpZnktY29udGVudDpmbGV4LWVuZDtcIiwgbG9naWNhbFRleHRBbGlnbkNTUygncmlnaHQnKSwgXCI7O2xhYmVsOnJpZ2h0O1wiKSxcbiAgICBjZW50ZXI6IF9yZWYzLFxuICAgIC8vIFRleHQgd3JhcHBpbmdcbiAgICB0cnVuY2F0ZVRleHQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dFRydW5jYXRlKCksIFwiLmV1aVRhYmxlQ2VsbENvbnRlbnRfX3RleHR7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7fTtsYWJlbDp0cnVuY2F0ZVRleHQ7XCIpLFxuICAgIHdyYXBUZXh0OiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHRCcmVha1dvcmQoKSwgXCI7O2xhYmVsOndyYXBUZXh0O1wiKSxcbiAgICAvLyBBY3Rpb24gY2VsbHNcbiAgICBoYXNBY3Rpb25zOiB7XG4gICAgICBhY3Rpb25zOiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDphY3Rpb25zO1wiKSxcbiAgICAgIGRlc2t0b3A6IF9yZWYyLFxuICAgICAgbW9iaWxlOiBfcmVmXG4gICAgfVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBtYWtlSGlnaENvbnRyYXN0Q29sb3IsIHRpbnRPclNoYWRlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUsIGxvZ2ljYWxDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlUYWJsZVZhcmlhYmxlcyB9IGZyb20gJy4vdGFibGUuc3R5bGVzJztcbmV4cG9ydCB2YXIgZXVpVGFibGVIZWFkZXJGb290ZXJDZWxsU3R5bGVzID0gZnVuY3Rpb24gZXVpVGFibGVIZWFkZXJGb290ZXJDZWxsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcblxuICAvLyBldWlGb250U2l6ZSByZXR1cm5zIGFuIG9iamVjdCwgc28gd2Uga2VlcCBvYmplY3Qgbm90YXRpb24gaGVyZSB0byBtZXJnZSBpbnRvIGNzc2BgXG4gIHZhciBzaGFyZWRTdHlsZXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJykpLCB7fSwge1xuICAgIGZvbnRXZWlnaHQ6IGV1aVRoZW1lLmZvbnQud2VpZ2h0LnNlbWlCb2xkLFxuICAgIGNvbG9yOiBldWlUaGVtZS5jb2xvcnMudGl0bGUsXG4gICAgdmVydGljYWxBbGlnbjogJ21pZGRsZSdcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgZXVpVGFibGVIZWFkZXJDZWxsOiAvKiNfX1BVUkVfXyovY3NzKHNoYXJlZFN0eWxlcywgXCI7O2xhYmVsOmV1aVRhYmxlSGVhZGVyQ2VsbDtcIiksXG4gICAgZXVpVGFibGVIZWFkZXJDZWxsX19jb250ZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLnhzLCBcIjs7bGFiZWw6ZXVpVGFibGVIZWFkZXJDZWxsX19jb250ZW50O1wiKSxcbiAgICBldWlUYWJsZUhlYWRlckNlbGxfX2J1dHRvbjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIGZvbnQtd2VpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDsuZXVpVGFibGVTb3J0SWNvbi0tc29ydGFibGV7Y29sb3I6XCIsIG1ha2VIaWdoQ29udHJhc3RDb2xvcihcbiAgICAvLyBUaW50IGl0IGFyYml0cmFyaWx5IGhpZ2gsIHRoZSBjb250cmFzdCB1dGlsIHdpbGwgdGFrZSBjYXJlIG9mIGxvd2VyaW5nIGJhY2sgZG93biB0byBXQ0FHXG4gICAgdGludE9yU2hhZGUoZXVpVGhlbWUuY29sb3JzLnN1YmR1ZWRUZXh0LCAwLjksIGNvbG9yTW9kZSksIDMgLy8gMzoxIHJhdGlvIGZyb20gaHR0cHM6Ly93d3cudzMub3JnL1dBSS9XQ0FHMjIvVW5kZXJzdGFuZGluZy9ub24tdGV4dC1jb250cmFzdC5odG1sXG4gICAgKShldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSksIFwiO30mOmhvdmVyLCY6Zm9jdXN7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsuZXVpVGFibGVTb3J0SWNvbi0tc29ydGFibGV7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7fX07bGFiZWw6ZXVpVGFibGVIZWFkZXJDZWxsX19idXR0b247XCIpLFxuICAgIGV1aVRhYmxlRm9vdGVyQ2VsbDogLyojX19QVVJFX18qL2NzcyhzaGFyZWRTdHlsZXMsIFwiIGJhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5saWdodGVzdFNoYWRlLCBcIjs7bGFiZWw6ZXVpVGFibGVGb290ZXJDZWxsO1wiKVxuICB9O1xufTtcbmV4cG9ydCB2YXIgZXVpVGFibGVDZWxsQ2hlY2tib3hTdHlsZXMgPSBmdW5jdGlvbiBldWlUYWJsZUNlbGxDaGVja2JveFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgX2V1aVRhYmxlVmFyaWFibGVzID0gZXVpVGFibGVWYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBjZWxsQ29udGVudFBhZGRpbmcgPSBfZXVpVGFibGVWYXJpYWJsZXMuY2VsbENvbnRlbnRQYWRkaW5nLFxuICAgIG1vYmlsZVNpemVzID0gX2V1aVRhYmxlVmFyaWFibGVzLm1vYmlsZVNpemVzLFxuICAgIGNoZWNrYm94U2l6ZSA9IF9ldWlUYWJsZVZhcmlhYmxlcy5jaGVja2JveFNpemU7XG4gIHZhciBzaGFyZWRDaGVja2JveFN0eWxlcyA9IFwiXFxuICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsIGNoZWNrYm94U2l6ZSksIFwiXFxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBcIik7XG4gIHJldHVybiB7XG4gICAgZXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3g6IC8qI19fUFVSRV9fKi9jc3Moc2hhcmVkQ2hlY2tib3hTdHlsZXMsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2xlZnQnKSwgXCI7O2xhYmVsOmV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94O1wiKSxcbiAgICBldWlUYWJsZVJvd0NlbGxDaGVja2JveDogLyojX19QVVJFX18qL2NzcyhzaGFyZWRDaGVja2JveFN0eWxlcywgXCI7O2xhYmVsOmV1aVRhYmxlUm93Q2VsbENoZWNrYm94O1wiKSxcbiAgICBkZXNrdG9wOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2JvcmRlci12ZXJ0aWNhbCcsIGV1aVRoZW1lLmJvcmRlci50aGluKSwgXCI7O2xhYmVsOmRlc2t0b3A7XCIpLFxuICAgIG1vYmlsZTogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCBjZWxsQ29udGVudFBhZGRpbmcpLCBcIiBcIiwgbG9naWNhbENTUygnbGVmdCcsIG1vYmlsZVNpemVzLmNoZWNrYm94Lm9mZnNldCksIFwiOztsYWJlbDptb2JpbGU7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJ3cmFwV2l0aFRhYmxlUm93XCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXIgPSBmdW5jdGlvbiBFdWlUYWJsZUhlYWRlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiR3cmFwV2l0aFRhYmxlUm93ID0gX3JlZi53cmFwV2l0aFRhYmxlUm93LFxuICAgIHdyYXBXaXRoVGFibGVSb3cgPSBfcmVmJHdyYXBXaXRoVGFibGVSb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHdyYXBXaXRoVGFibGVSb3csXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRoZWFkXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCByZXN0KSwgd3JhcFdpdGhUYWJsZVJvdyA/IF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBudWxsLCBjaGlsZHJlbikgOiBjaGlsZHJlbik7XG59O1xuRXVpVGFibGVIZWFkZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBDaGlsZHJlbiBtdXN0IGJlIHZhbGlkIERPTSBzdHJ1Y3R1cmUgcmVzaWRpbmcgd2l0aGluIGA8dGhlYWQ+YC5cbiAgICAgICAqIFVzZSBgPHRkPiB8IDx0aD5gIGJ5IGRlZmF1bHQsIG9yIGA8dHI+PHRoLz48L3RyPmAgd2hlbiBgd3JhcFdpdGhUYWJsZVJvdz1mYWxzZWBcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAgICogQXV0b21hdGljYWxseSBhZGRzIGEgd3JhcHBpbmcgYDx0cj5gIGVsZW1lbnQgYXJvdW5kIHRoZSBjaGlsZHJlblxuICAgICAgICovXG4gIHdyYXBXaXRoVGFibGVSb3c6IFByb3BUeXBlcy5ib29sXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJhbGlnblwiLCBcIm9uU29ydFwiLCBcImlzU29ydGVkXCIsIFwiaXNTb3J0QXNjZW5kaW5nXCIsIFwiY2xhc3NOYW1lXCIsIFwic2NvcGVcIiwgXCJtb2JpbGVPcHRpb25zXCIsIFwid2lkdGhcIiwgXCJzdHlsZVwiLCBcInJlYWRPbmx5XCIsIFwiZGVzY3JpcHRpb25cIiwgXCJhcHBlbmRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzLCBMRUZUX0FMSUdOTUVOVCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUgfSBmcm9tICcuL21vYmlsZS9yZXNwb25zaXZlX2NvbnRleHQnO1xuaW1wb3J0IHsgRXVpVGFibGVDZWxsQ29udGVudCB9IGZyb20gJy4vX3RhYmxlX2NlbGxfY29udGVudCc7XG5pbXBvcnQgeyBldWlUYWJsZUhlYWRlckZvb3RlckNlbGxTdHlsZXMgfSBmcm9tICcuL3RhYmxlX2NlbGxzX3NoYXJlZC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBDZWxsQ29udGVudHMgPSBmdW5jdGlvbiBDZWxsQ29udGVudHMoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgIGRlc2NyaXB0aW9uID0gX3JlZi5kZXNjcmlwdGlvbixcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2FuU29ydCA9IF9yZWYuY2FuU29ydCxcbiAgICBpc1NvcnRlZCA9IF9yZWYuaXNTb3J0ZWQsXG4gICAgaXNTb3J0QXNjZW5kaW5nID0gX3JlZi5pc1NvcnRBc2NlbmRpbmc7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlQ2VsbENvbnRlbnQsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBhbGlnbjogYWxpZ24sXG4gICAgdGV4dE9ubHk6IGZhbHNlLFxuICAgIHRydW5jYXRlVGV4dDogbnVsbFxuICB9LCBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpVGFibGVIZWFkZXJDZWxsLnRpdGxlVGV4dFdpdGhEZXNjXCIsXG4gICAgICBkZWZhdWx0OiBcIntpbm5lclRleHR9OyB7ZGVzY3JpcHRpb259XCIsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgaW5uZXJUZXh0OiBpbm5lclRleHQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uICh0aXRsZVRleHRXaXRoRGVzYykge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgdGl0bGU6IGRlc2NyaXB0aW9uID8gdGl0bGVUZXh0V2l0aERlc2MgOiBpbm5lclRleHQsXG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpLXRleHRUcnVuY2F0ZVwiXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfSk7XG4gIH0pLCBkZXNjcmlwdGlvbiAmJiBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIGRlc2NyaXB0aW9uKSksIGlzU29ydGVkID8gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlU29ydEljb25cIixcbiAgICB0eXBlOiBpc1NvcnRBc2NlbmRpbmcgPyAnc29ydFVwJyA6ICdzb3J0RG93bicsXG4gICAgc2l6ZTogXCJtXCJcbiAgfSkgOiBjYW5Tb3J0ID8gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlU29ydEljb24gZXVpVGFibGVTb3J0SWNvbi0tc29ydGFibGVcIixcbiAgICB0eXBlOiBcInNvcnRhYmxlXCIsXG4gICAgc2l6ZTogXCJtXCIsXG4gICAgY29sb3I6IFwic3ViZHVlZFwiIC8vIFRpbnRlZCBhIGJpdCBmdXJ0aGVyIHZpYSBDU1NcbiAgfSkgOiBudWxsKTtcbn07XG5leHBvcnQgdmFyIEV1aVRhYmxlSGVhZGVyQ2VsbCA9IGZ1bmN0aW9uIEV1aVRhYmxlSGVhZGVyQ2VsbChfcmVmMikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICBfcmVmMiRhbGlnbiA9IF9yZWYyLmFsaWduLFxuICAgIGFsaWduID0gX3JlZjIkYWxpZ24gPT09IHZvaWQgMCA/IExFRlRfQUxJR05NRU5UIDogX3JlZjIkYWxpZ24sXG4gICAgb25Tb3J0ID0gX3JlZjIub25Tb3J0LFxuICAgIGlzU29ydGVkID0gX3JlZjIuaXNTb3J0ZWQsXG4gICAgaXNTb3J0QXNjZW5kaW5nID0gX3JlZjIuaXNTb3J0QXNjZW5kaW5nLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYyLmNsYXNzTmFtZSxcbiAgICBzY29wZSA9IF9yZWYyLnNjb3BlLFxuICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmMi5tb2JpbGVPcHRpb25zLFxuICAgIHdpZHRoID0gX3JlZjIud2lkdGgsXG4gICAgc3R5bGUgPSBfcmVmMi5zdHlsZSxcbiAgICByZWFkT25seSA9IF9yZWYyLnJlYWRPbmx5LFxuICAgIGRlc2NyaXB0aW9uID0gX3JlZjIuZGVzY3JpcHRpb24sXG4gICAgYXBwZW5kID0gX3JlZjIuYXBwZW5kLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJsZUhlYWRlckZvb3RlckNlbGxTdHlsZXMpO1xuICB2YXIgaXNSZXNwb25zaXZlID0gdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUoKTtcbiAgdmFyIGhpZGVGb3JEZXNrdG9wID0gIWlzUmVzcG9uc2l2ZSAmJiAobW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLm9ubHkpO1xuICB2YXIgaGlkZUZvck1vYmlsZSA9IGlzUmVzcG9uc2l2ZSAmJiAobW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLnNob3cpID09PSBmYWxzZTtcbiAgaWYgKGhpZGVGb3JEZXNrdG9wIHx8IGhpZGVGb3JNb2JpbGUpIHJldHVybiBudWxsO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlSGVhZGVyQ2VsbCcsIGNsYXNzTmFtZSk7XG4gIHZhciBpbmxpbmVTdHlsZXMgPSByZXNvbHZlV2lkdGhBc1N0eWxlKHN0eWxlLCB3aWR0aCk7XG4gIHZhciBDZWxsQ29tcG9uZW50ID0gY2hpbGRyZW4gPyAndGgnIDogJ3RkJztcbiAgdmFyIGNlbGxTY29wZSA9IENlbGxDb21wb25lbnQgPT09ICd0aCcgPyBzY29wZSAhPT0gbnVsbCAmJiBzY29wZSAhPT0gdm9pZCAwID8gc2NvcGUgOiAnY29sJyA6IHVuZGVmaW5lZDsgLy8gYHNjb3BlYCBpcyBvbmx5IHZhbGlkIG9uIGB0aGAgZWxlbWVudHNcblxuICB2YXIgY2FuU29ydCA9ICEhKG9uU29ydCAmJiAhcmVhZE9ubHkpO1xuICB2YXIgYXJpYVNvcnRWYWx1ZTtcbiAgaWYgKGlzU29ydGVkKSB7XG4gICAgYXJpYVNvcnRWYWx1ZSA9IGlzU29ydEFzY2VuZGluZyA/ICdhc2NlbmRpbmcnIDogJ2Rlc2NlbmRpbmcnO1xuICB9IGVsc2UgaWYgKGNhblNvcnQpIHtcbiAgICBhcmlhU29ydFZhbHVlID0gJ25vbmUnO1xuICB9XG4gIHZhciBjZWxsQ29udGVudHNQcm9wcyA9IHtcbiAgICBjc3M6IHN0eWxlcy5ldWlUYWJsZUhlYWRlckNlbGxfX2NvbnRlbnQsXG4gICAgYWxpZ246IGFsaWduLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICBjYW5Tb3J0OiBjYW5Tb3J0LFxuICAgIGlzU29ydGVkOiBpc1NvcnRlZCxcbiAgICBpc1NvcnRBc2NlbmRpbmc6IGlzU29ydEFzY2VuZGluZyxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgfTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ2VsbENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGNzczogc3R5bGVzLmV1aVRhYmxlSGVhZGVyQ2VsbCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc2NvcGU6IGNlbGxTY29wZSxcbiAgICByb2xlOiBcImNvbHVtbmhlYWRlclwiLFxuICAgIFwiYXJpYS1zb3J0XCI6IGFyaWFTb3J0VmFsdWUsXG4gICAgc3R5bGU6IGlubGluZVN0eWxlc1xuICB9LCByZXN0KSwgY2FuU29ydCA/IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgY3NzOiBzdHlsZXMuZXVpVGFibGVIZWFkZXJDZWxsX19idXR0b24sXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlckJ1dHRvbicsIHtcbiAgICAgICdldWlUYWJsZUhlYWRlckJ1dHRvbi1pc1NvcnRlZCc6IGlzU29ydGVkXG4gICAgfSksXG4gICAgb25DbGljazogb25Tb3J0LFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0YWJsZUhlYWRlclNvcnRCdXR0b25cIlxuICB9LCBfX19FbW90aW9uSlNYKENlbGxDb250ZW50cywgY2VsbENvbnRlbnRzUHJvcHMpKSA6IF9fX0Vtb3Rpb25KU1goQ2VsbENvbnRlbnRzLCBjZWxsQ29udGVudHNQcm9wcyksIGFwcGVuZCk7XG59O1xuRXVpVGFibGVIZWFkZXJDZWxsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGFsaWduOiBQcm9wVHlwZXMuYW55LFxuICBpc1NvcnRBc2NlbmRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBpc1NvcnRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG1vYmlsZU9wdGlvbnM6IFByb3BUeXBlcy5hbnksXG4gIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG4gIHNjb3BlOiBQcm9wVHlwZXMuYW55LFxuICB3aWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKSxcbiAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAgICogU2hvd3MgdGhlIHNvcnQgaW5kaWNhdG9yIGJ1dCByZW1vdmVzIHRoZSBidXR0b25cbiAgICAgICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogQ29udGVudCByZW5kZXJlZCBvdXRzaWRlIHRoZSB2aXNpYmxlIGNlbGwgY29udGVudCB3cmFwcGVyLiBVc2VmdWwgZm9yLCBlLmcuIHNjcmVlbiByZWFkZXIgdGV4dC5cbiAgICAgICAqXG4gICAgICAgKiBVc2VkIGJ5IEV1aUJhc2ljVGFibGUgdG8gcmVuZGVyIGhpZGRlbiBjb3B5IG1hcmtlcnNcbiAgICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJzY29wZVwiLCBcInN0eWxlXCIsIFwid2lkdGhcIiwgXCJhcHBlbmRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZXVpVGFibGVDZWxsQ2hlY2tib3hTdHlsZXMgfSBmcm9tICcuL3RhYmxlX2NlbGxzX3NoYXJlZC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3ggPSBmdW5jdGlvbiBFdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRzY29wZSA9IF9yZWYuc2NvcGUsXG4gICAgc2NvcGUgPSBfcmVmJHNjb3BlID09PSB2b2lkIDAgPyAnY29sJyA6IF9yZWYkc2NvcGUsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICBhcHBlbmQgPSBfcmVmLmFwcGVuZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3gnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFibGVDZWxsQ2hlY2tib3hTdHlsZXMpO1xuICB2YXIgaW5saW5lU3R5bGVzID0gcmVzb2x2ZVdpZHRoQXNTdHlsZShzdHlsZSwgd2lkdGgpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRoXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IHN0eWxlcy5ldWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc2NvcGU6IHNjb3BlLFxuICAgIHN0eWxlOiBpbmxpbmVTdHlsZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNlbGxDb250ZW50XCJcbiAgfSwgY2hpbGRyZW4pLCBhcHBlbmQpO1xufTtcbkV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHdpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZF0pLFxuICBzY29wZTogUHJvcFR5cGVzLmFueSxcbiAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwicmVzcG9uc2l2ZUJyZWFrcG9pbnRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlSXNFdWlUYWJsZVJlc3BvbnNpdmUgfSBmcm9tICcuL3Jlc3BvbnNpdmVfY29udGV4dCc7XG5pbXBvcnQgeyBldWlUYWJsZUhlYWRlck1vYmlsZVN0eWxlcyB9IGZyb20gJy4vdGFibGVfaGVhZGVyX21vYmlsZS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXJNb2JpbGUgPSBmdW5jdGlvbiBFdWlUYWJsZUhlYWRlck1vYmlsZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgcmVzcG9uc2l2ZUJyZWFrcG9pbnQgPSBfcmVmLnJlc3BvbnNpdmVCcmVha3BvaW50LFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzUmVzcG9uc2l2ZSA9IHVzZUlzRXVpVGFibGVSZXNwb25zaXZlKHJlc3BvbnNpdmVCcmVha3BvaW50KTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRhYmxlSGVhZGVyTW9iaWxlU3R5bGVzKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlck1vYmlsZScsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBpc1Jlc3BvbnNpdmUgPyBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBzdHlsZXMuZXVpVGFibGVIZWFkZXJNb2JpbGVcbiAgfSwgcmVzdCksIGNoaWxkcmVuKSA6IG51bGw7XG59O1xuRXVpVGFibGVIZWFkZXJNb2JpbGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuZXhwb3J0IHZhciBldWlUYWJsZUhlYWRlck1vYmlsZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRhYmxlSGVhZGVyTW9iaWxlU3R5bGVzKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUYWJsZUhlYWRlck1vYmlsZTogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpiYXNlbGluZTtwYWRkaW5nLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpldWlUYWJsZUhlYWRlck1vYmlsZTtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJhbmNob3JQb3NpdGlvblwiLCBcIml0ZW1zXCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uRW1wdHkgfSBmcm9tICcuLi8uLi9idXR0b24vYnV0dG9uX2VtcHR5JztcbmltcG9ydCB7IEV1aVBvcG92ZXIgfSBmcm9tICcuLi8uLi9wb3BvdmVyJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51UGFuZWwgfSBmcm9tICcuLi8uLi9jb250ZXh0X21lbnUnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpVGFibGVTb3J0TW9iaWxlSXRlbSB9IGZyb20gJy4vdGFibGVfc29ydF9tb2JpbGVfaXRlbSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVNvcnRNb2JpbGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpVGFibGVTb3J0TW9iaWxlKCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpVGFibGVTb3J0TW9iaWxlKTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlUYWJsZVNvcnRNb2JpbGUsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0YXRlXCIsIHtcbiAgICAgIGlzUG9wb3Zlck9wZW46IGZhbHNlXG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQnV0dG9uQ2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc1BvcG92ZXJPcGVuOiAhX3RoaXMuc3RhdGUuaXNQb3BvdmVyT3BlblxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNsb3NlUG9wb3ZlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzUG9wb3Zlck9wZW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICAvLyBBbGlnbnMgdGhlIGJ1dHRvbiB0byB0aGUgcmlnaHQgZXZlbiB3aGVuIGl0J3MgdGhlIG9ubHkgZWxlbWVudCBwcmVzZW50XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImV1aVRhYmxlU29ydE1vYmlsZVN0eWxlc1wiLCB7XG4gICAgICBtYXJnaW5JbmxpbmVTdGFydDogJ2F1dG8nLFxuICAgICAgbGFiZWw6ICdldWlUYWJsZVNvcnRNb2JpbGUnXG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlUYWJsZVNvcnRNb2JpbGUsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aVRhYmxlU29ydE1vYmlsZSwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgYW5jaG9yUG9zaXRpb24gPSBfdGhpcyRwcm9wcy5hbmNob3JQb3NpdGlvbixcbiAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wcy5pdGVtcyxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVTb3J0TW9iaWxlJywgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBtb2JpbGVTb3J0QnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgICAgICBpY29uVHlwZTogXCJhcnJvd0Rvd25cIixcbiAgICAgICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICAgICAgb25DbGljazogdGhpcy5vbkJ1dHRvbkNsaWNrLmJpbmQodGhpcyksXG4gICAgICAgIGZsdXNoOiBcInJpZ2h0XCIsXG4gICAgICAgIHNpemU6IFwieHNcIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRhYmxlU29ydE1vYmlsZS5zb3J0aW5nXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiU29ydGluZ1wiXG4gICAgICB9KSk7XG4gICAgICB2YXIgbW9iaWxlU29ydFBvcG92ZXIgPSBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXIsIF9leHRlbmRzKHtcbiAgICAgICAgYnV0dG9uOiBtb2JpbGVTb3J0QnV0dG9uLFxuICAgICAgICBpc09wZW46IHRoaXMuc3RhdGUuaXNQb3BvdmVyT3BlbixcbiAgICAgICAgY2xvc2VQb3BvdmVyOiB0aGlzLmNsb3NlUG9wb3ZlcixcbiAgICAgICAgYW5jaG9yUG9zaXRpb246IGFuY2hvclBvc2l0aW9uIHx8ICdkb3duUmlnaHQnLFxuICAgICAgICBwYW5lbFBhZGRpbmdTaXplOiBcIm5vbmVcIlxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVQYW5lbCwge1xuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIG1pbldpZHRoOiAyMDBcbiAgICAgICAgfSxcbiAgICAgICAgaXRlbXM6IGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA/IGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlU29ydE1vYmlsZUl0ZW0sIHtcbiAgICAgICAgICAgIGtleTogaXRlbS5rZXksXG4gICAgICAgICAgICBvblNvcnQ6IGl0ZW0ub25Tb3J0LFxuICAgICAgICAgICAgaXNTb3J0ZWQ6IGl0ZW0uaXNTb3J0ZWQsXG4gICAgICAgICAgICBpc1NvcnRBc2NlbmRpbmc6IGl0ZW0uaXNTb3J0QXNjZW5kaW5nXG4gICAgICAgICAgfSwgaXRlbS5uYW1lKTtcbiAgICAgICAgfSkgOiB1bmRlZmluZWRcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBjc3M6IHRoaXMuZXVpVGFibGVTb3J0TW9iaWxlU3R5bGVzXG4gICAgICB9LCBtb2JpbGVTb3J0UG9wb3Zlcik7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5FdWlUYWJsZVNvcnRNb2JpbGUucHJvcFR5cGVzID0ge1xuICBhbmNob3JQb3NpdGlvbjogUHJvcFR5cGVzLmFueSxcbiAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5hbnksXG4gICAgb25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBpc1NvcnRlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNTb3J0QXNjZW5kaW5nOiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcIm9uU29ydFwiLCBcImlzU29ydGVkXCIsIFwiaXNTb3J0QXNjZW5kaW5nXCIsIFwiY2xhc3NOYW1lXCIsIFwiYXJpYUxhYmVsXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlDb250ZXh0TWVudUl0ZW0gfSBmcm9tICcuLi8uLi9jb250ZXh0X21lbnUnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVTb3J0TW9iaWxlSXRlbSA9IGZ1bmN0aW9uIEV1aVRhYmxlU29ydE1vYmlsZUl0ZW0oX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIG9uU29ydCA9IF9yZWYub25Tb3J0LFxuICAgIGlzU29ydGVkID0gX3JlZi5pc1NvcnRlZCxcbiAgICBpc1NvcnRBc2NlbmRpbmcgPSBfcmVmLmlzU29ydEFzY2VuZGluZyxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBhcmlhTGFiZWwgPSBfcmVmLmFyaWFMYWJlbCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzb3J0SWNvbiA9ICdlbXB0eSc7XG4gIGlmIChpc1NvcnRlZCkge1xuICAgIHNvcnRJY29uID0gaXNTb3J0QXNjZW5kaW5nID8gJ3NvcnRVcCcgOiAnc29ydERvd24nO1xuICB9XG4gIHZhciBidXR0b25DbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVTb3J0TW9iaWxlSXRlbScsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZVNvcnRNb2JpbGVJdGVtLWlzU29ydGVkJzogaXNTb3J0ZWRcbiAgfSk7XG4gIHZhciBjb2x1bW5UaXRsZSA9IGFyaWFMYWJlbCA/IGFyaWFMYWJlbCA6IGNoaWxkcmVuO1xuICB2YXIgc3RhdGVmdWxBcmlhTGFiZWwgPSBcIlNvcnQgXCIuY29uY2F0KGNvbHVtblRpdGxlLCBcIiBcIikuY29uY2F0KGlzU29ydEFzY2VuZGluZyA/ICdkZXNjZW5kaW5nJyA6ICdhc2NlbmRpbmcnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVJdGVtLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBidXR0b25DbGFzc2VzLFxuICAgIGljb246IHNvcnRJY29uLFxuICAgIG9uQ2xpY2s6IG9uU29ydCxcbiAgICBcImFyaWEtbGFiZWxcIjogc3RhdGVmdWxBcmlhTGFiZWxcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZVNvcnRNb2JpbGVJdGVtLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8ga25vdyB3aGVuIGFuIGl0ZW0gaGFzIGJlZW4gY2xpY2tlZFxuICAgICAqL1xuICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgY3VycmVudCBvcHRpb24gaXMgdGhlIHNvcnRlZCBvbiBjb2x1bW5cbiAgICAgKi9cbiAgaXNTb3J0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hpY2ggZGlyZWN0aW9uIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBzb3J0ZWQgb25cbiAgICAgKi9cbiAgaXNTb3J0QXNjZW5kaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaGFzU2VsZWN0aW9uXCIsIFwiaXNTZWxlY3RlZFwiLCBcImlzU2VsZWN0YWJsZVwiLCBcImhhc0FjdGlvbnNcIiwgXCJpc0V4cGFuZGVkUm93XCIsIFwiaXNFeHBhbmRhYmxlXCIsIFwib25DbGlja1wiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5cywgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSB9IGZyb20gJy4vbW9iaWxlL3Jlc3BvbnNpdmVfY29udGV4dCc7XG5pbXBvcnQgeyBldWlUYWJsZVJvd1N0eWxlcyB9IGZyb20gJy4vdGFibGVfcm93LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVJvdyA9IGZ1bmN0aW9uIEV1aVRhYmxlUm93KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBoYXNTZWxlY3Rpb24gPSBfcmVmLmhhc1NlbGVjdGlvbixcbiAgICBpc1NlbGVjdGVkID0gX3JlZi5pc1NlbGVjdGVkLFxuICAgIGlzU2VsZWN0YWJsZSA9IF9yZWYuaXNTZWxlY3RhYmxlLFxuICAgIGhhc0FjdGlvbnMgPSBfcmVmLmhhc0FjdGlvbnMsXG4gICAgaXNFeHBhbmRlZFJvdyA9IF9yZWYuaXNFeHBhbmRlZFJvdyxcbiAgICBpc0V4cGFuZGFibGUgPSBfcmVmLmlzRXhwYW5kYWJsZSxcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzUmVzcG9uc2l2ZSA9IHVzZUV1aVRhYmxlSXNSZXNwb25zaXZlKCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJsZVJvd1N0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBpc1Jlc3BvbnNpdmUgPyBbc3R5bGVzLmV1aVRhYmxlUm93LCBzdHlsZXMubW9iaWxlLm1vYmlsZSwgaXNTZWxlY3RlZCAmJiBzdHlsZXMubW9iaWxlLnNlbGVjdGVkLCBpc0V4cGFuZGVkUm93ICYmIHN0eWxlcy5tb2JpbGUuZXhwYW5kZWQsIChoYXNBY3Rpb25zID09PSB0cnVlIHx8IGlzRXhwYW5kYWJsZSB8fCBpc0V4cGFuZGVkUm93KSAmJiBzdHlsZXMubW9iaWxlLmhhc1JpZ2h0Q29sdW1uLCBoYXNTZWxlY3Rpb24gJiYgc3R5bGVzLm1vYmlsZS5oYXNMZWZ0Q29sdW1uXSA6IFtzdHlsZXMuZXVpVGFibGVSb3csIHN0eWxlcy5kZXNrdG9wLmRlc2t0b3AsIGlzU2VsZWN0ZWQgJiYgc3R5bGVzLmRlc2t0b3Auc2VsZWN0ZWQsIGlzRXhwYW5kZWRSb3cgJiYgc3R5bGVzLmRlc2t0b3AuZXhwYW5kZWQsIG9uQ2xpY2sgJiYgc3R5bGVzLmRlc2t0b3AuY2xpY2thYmxlLCBpc0V4cGFuZGVkUm93ICYmIGhhc1NlbGVjdGlvbiAmJiBzdHlsZXMuZGVza3RvcC5jaGVja2JveE9mZnNldF07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVSb3cnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVSb3ctaXNTZWxlY3RhYmxlJzogaXNTZWxlY3RhYmxlLFxuICAgICdldWlUYWJsZVJvdy1pc1NlbGVjdGVkJzogaXNTZWxlY3RlZCxcbiAgICAnZXVpVGFibGVSb3ctaGFzQWN0aW9ucyc6IGhhc0FjdGlvbnMsXG4gICAgJ2V1aVRhYmxlUm93LWlzRXhwYW5kZWRSb3cnOiBpc0V4cGFuZGVkUm93LFxuICAgICdldWlUYWJsZVJvdy1pc0V4cGFuZGFibGUnOiBpc0V4cGFuZGFibGUsXG4gICAgJ2V1aVRhYmxlUm93LWlzQ2xpY2thYmxlJzogb25DbGlja1xuICB9KTtcbiAgaWYgKCFvbkNsaWNrKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBfZXh0ZW5kcyh7XG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH1cbiAgdmFyIG9uS2V5RG93biA9IGZ1bmN0aW9uIG9uS2V5RG93bihldmVudCkge1xuICAgIC8vIFByZXZlbnQgYSBzY3JvbGwgZnJvbSBvY2N1cnJpbmcgaWYgdGhlIHVzZXIgaGFzIGhpdCBzcGFjZS5cbiAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLlNQQUNFKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9O1xuICB2YXIgb25LZXlVcCA9IGZ1bmN0aW9uIG9uS2V5VXAoZXZlbnQpIHtcbiAgICAvLyBTdXBwb3J0IGtleWJvYXJkIGFjY2Vzc2liaWxpdHkgYnkgZW11bGF0aW5nIG1vdXNlIGNsaWNrIG9uIEVOVEVSIG9yIFNQQUNFIGtleXByZXNzLlxuICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuRU5URVIgfHwgZXZlbnQua2V5ID09PSBrZXlzLlNQQUNFKSB7XG4gICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidHJcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uS2V5RG93bjogb25LZXlEb3duLFxuICAgIG9uS2V5VXA6IG9uS2V5VXAsXG4gICAgdGFiSW5kZXg6IDBcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZVJvdy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHRhYmxlIGhhcyBhIHNpbmdsZSBjb2x1bW4gb2YgY2hlY2tib3hlcyBmb3Igc2VsZWN0aW5nXG4gICAgICogcm93cyAodXNlZCBmb3IgbW9iaWxlIHN0eWxpbmcpXG4gICAgICovXG4gIGhhc1NlbGVjdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBjdXJyZW50IHJvdydzIGNoZWNrYm94IGlzIHNlbGVjdGFibGUgLyBub3QgZGlzYWJsZWRcbiAgICAgKi9cbiAgaXNTZWxlY3RhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoZSBjdXJyZW50IHJvdyBoYXMgYmVlbiBzZWxlY3RlZFxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSB0YWJsZSBoYXMgYSBkZWRpY2F0ZWQgY29sdW1uIGZvciBhY3Rpb25zXG4gICAgICogKHVzZWQgZm9yIG1vYmlsZSBzdHlsaW5nIGFuZCBkZXNrdG9wIGFjdGlvbiBob3ZlciBiZWhhdmlvcilcbiAgICAgKi9cbiAgaGFzQWN0aW9uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImN1c3RvbVwiXSldKSxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSByb3cgd2lsbCBoYXZlIGFuIGV4cGFuZGVkIHJvd1xuICAgICAqL1xuICBpc0V4cGFuZGFibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHJvdyB3aWxsIGJlIHRoZSBleHBhbmRlZCByb3dcbiAgICAgKi9cbiAgaXNFeHBhbmRlZFJvdzogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKGUsIHQpIHsgcmV0dXJuIHQgfHwgKHQgPSBlLnNsaWNlKDApKSwgT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZSh0KSB9IH0pKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB0aW50LCBzaGFkZSwgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlLCBldWlCYWNrZ3JvdW5kQ29sb3IsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlTaGFkb3cgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5pbXBvcnQgeyBldWlUYWJsZVZhcmlhYmxlcyB9IGZyb20gJy4vdGFibGUuc3R5bGVzJztcbmV4cG9ydCB2YXIgZXVpVGFibGVSb3dTdHlsZXMgPSBmdW5jdGlvbiBldWlUYWJsZVJvd1N0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgcm93Q29sb3JzID0gX3Jvd0NvbG9yVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBleHBhbmRlZEFuaW1hdGlvbkNzcyA9IF9leHBhbmRlZFJvd0FuaW1hdGlvbihldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgX2V1aVRhYmxlVmFyaWFibGVzID0gZXVpVGFibGVWYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBjZWxsQ29udGVudFBhZGRpbmcgPSBfZXVpVGFibGVWYXJpYWJsZXMuY2VsbENvbnRlbnRQYWRkaW5nLFxuICAgIG1vYmlsZVNpemVzID0gX2V1aVRhYmxlVmFyaWFibGVzLm1vYmlsZVNpemVzLFxuICAgIGNoZWNrYm94U2l6ZSA9IF9ldWlUYWJsZVZhcmlhYmxlcy5jaGVja2JveFNpemU7XG4gIHJldHVybiB7XG4gICAgZXVpVGFibGVSb3c6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZXVpVGFibGVSb3c7XCIpLFxuICAgIGRlc2t0b3A6IHtcbiAgICAgIGRlc2t0b3A6IC8qI19fUFVSRV9fKi9jc3MoXCImOmhvdmVye2JhY2tncm91bmQtY29sb3I6XCIsIHJvd0NvbG9ycy5ob3ZlciwgXCI7fTtsYWJlbDpkZXNrdG9wO1wiKSxcbiAgICAgIGV4cGFuZGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgcm93Q29sb3JzLmhvdmVyLCBcIjtcIiwgZXhwYW5kZWRBbmltYXRpb25Dc3MsIFwiOztsYWJlbDpleHBhbmRlZDtcIiksXG4gICAgICBjbGlja2FibGU6IC8qI19fUFVSRV9fKi9jc3MoXCImOmhvdmVye2JhY2tncm91bmQtY29sb3I6XCIsIHJvd0NvbG9ycy5jbGlja2FibGUuaG92ZXIsIFwiO2N1cnNvcjpwb2ludGVyO30mOmZvY3Vze2JhY2tncm91bmQtY29sb3I6XCIsIHJvd0NvbG9ycy5jbGlja2FibGUuZm9jdXMsIFwiO307bGFiZWw6Y2xpY2thYmxlO1wiKSxcbiAgICAgIHNlbGVjdGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiJiwmKy5ldWlUYWJsZVJvdy1pc0V4cGFuZGVkUm93e2JhY2tncm91bmQtY29sb3I6XCIsIHJvd0NvbG9ycy5zZWxlY3RlZC5jb2xvciwgXCI7fSY6aG92ZXIsJjpob3ZlcisuZXVpVGFibGVSb3ctaXNFeHBhbmRlZFJvd3tiYWNrZ3JvdW5kLWNvbG9yOlwiLCByb3dDb2xvcnMuc2VsZWN0ZWQuaG92ZXIsIFwiO307bGFiZWw6c2VsZWN0ZWQ7XCIpLFxuICAgICAgLy8gT2Zmc2V0IGV4cGFuZGVkICYgc2VsZWN0YWJsZSByb3dzIGJ5IHRoZSBjaGVja2JveCB3aWR0aCB0byBsaW5lIHVwIGNvbnRlbnQgd2l0aCB0aGUgMm5kIGNvbHVtblxuICAgICAgLy8gU2V0IG9uIHRoZSBgPHRkPmAgYmVjYXVzZSBwYWRkaW5nIGNhbid0IGJlIGFwcGxpZWQgdG8gYDx0cj5gIGVsZW1lbnRzIGRpcmVjdGx5XG4gICAgICBjaGVja2JveE9mZnNldDogLyojX19QVVJFX18qL2NzcyhcIiY+LmV1aVRhYmxlUm93Q2VsbDpmaXJzdC1jaGlsZHtcIiwgbG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgY2hlY2tib3hTaXplKSwgXCI7fTtsYWJlbDpjaGVja2JveE9mZnNldDtcIilcbiAgICB9LFxuICAgIG1vYmlsZToge1xuICAgICAgbW9iaWxlOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO3BhZGRpbmc6XCIsIGNlbGxDb250ZW50UGFkZGluZywgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBjZWxsQ29udGVudFBhZGRpbmcpLCBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIiBiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAncGxhaW4nKSwgXCI7Ym9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIFwiOztsYWJlbDptb2JpbGU7XCIpLFxuICAgICAgc2VsZWN0ZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCImLCYrLmV1aVRhYmxlUm93LWlzRXhwYW5kZWRSb3d7YmFja2dyb3VuZC1jb2xvcjpcIiwgcm93Q29sb3JzLnNlbGVjdGVkLmNvbG9yLCBcIjt9O2xhYmVsOnNlbGVjdGVkO1wiKSxcbiAgICAgIC8qKlxuICAgICAgICogTGVmdCBjb2x1bW4gb2Zmc2V0IChubyBib3JkZXIpXG4gICAgICAgKiBVc2VkIGZvciBzZWxlY3Rpb24gY2hlY2tib3gsIHdoaWNoIHdpbGwgYmUgYWJzb2x1dGVseSBwb3NpdGlvbmVkXG4gICAgICAgKi9cbiAgICAgIGhhc0xlZnRDb2x1bW46IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgbW9iaWxlU2l6ZXMuY2hlY2tib3gud2lkdGgpLCBcIjs7bGFiZWw6aGFzTGVmdENvbHVtbjtcIiksXG4gICAgICAvKipcbiAgICAgICAqIFJpZ2h0IGNvbHVtbiBzdHlsZXMgKyBib3JkZXJcbiAgICAgICAqIFVzZWQgZm9yIGNlbGwgYWN0aW9ucyBhbmQgcm93IGV4cGFuZGVyIGFycm93XG4gICAgICAgKi9cbiAgICAgIGhhc1JpZ2h0Q29sdW1uOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3BhZGRpbmctcmlnaHQnLCBtb2JpbGVTaXplcy5hY3Rpb25zLndpZHRoKSwgXCIgJjo6YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygndmVydGljYWwnLCAwKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3JpZ2h0JywgbW9iaWxlU2l6ZXMuYWN0aW9ucy53aWR0aCksIFwiIFwiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluKSwgXCIgYmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpVGhlbWUuYm9yZGVyLmNvbG9yLCBcIjt9O2xhYmVsOmhhc1JpZ2h0Q29sdW1uO1wiKSxcbiAgICAgIC8qKlxuICAgICAgICogQm90dG9tIG9mIGNhcmQgLSBleHBhbmRlZCByb3dzXG4gICAgICAgKi9cbiAgICAgIGV4cGFuZGVkOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBcIi1cIi5jb25jYXQobW9iaWxlU2l6ZXMuYWN0aW9ucy5vZmZzZXQpKSwgbG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgY2VsbENvbnRlbnRQYWRkaW5nKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2JvcmRlci10b3AnLCBldWlUaGVtZS5ib3JkZXIudGhpbiksIFwiIFwiLCBsb2dpY2FsQ1NTKCdib3JkZXItdG9wLWxlZnQtcmFkaXVzJywgMCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdib3JkZXItdG9wLXJpZ2h0LXJhZGl1cycsIDApLCBcIj4uZXVpVGFibGVSb3dDZWxse1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiO31cIiwgZXhwYW5kZWRBbmltYXRpb25Dc3MsIFwiOztsYWJlbDpleHBhbmRlZDtcIilcbiAgICB9XG4gIH07XG59O1xudmFyIF9leHBhbmRlZFJvd0FuaW1hdGlvbiA9IGZ1bmN0aW9uIF9leHBhbmRlZFJvd0FuaW1hdGlvbihfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIC8vIERvIG5vdCBhdHRlbXB0IHRvIGFuaW1hdGUgdG8gaGVpZ2h0IGF1dG8gLSBkb3duIHRoYXQgcm9hZCBkcmFnb25zIGxpZVxuICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9wdWxsLzY4MjZcbiAgdmFyIGV4cGFuZFJvdyA9IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgIDAlIHtcXG4gICAgICBvcGFjaXR5OiAwO1xcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtXCIsIFwiKTtcXG4gICAgfVxcbiAgICAxMDAlIHtcXG4gICAgICBvcGFjaXR5OiAxO1xcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG4gICAgfVxcbiAgXCJdKSksIGV1aVRoZW1lLnNpemUubSk7XG5cbiAgLy8gQW5pbWF0aW9uIG11c3QgYmUgb24gdGhlIGNvbnRlbnRzIGRpdiBpbnNpZGUsIG5vdCB0aGUgcm93IGl0c2VsZlxuICByZXR1cm4gLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInsuZXVpVGFibGVDZWxsQ29udGVudHthbmltYXRpb246XCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiIDEgbm9ybWFsIG5vbmUgXCIsIGV4cGFuZFJvdywgXCI7fX1cIik7XG59O1xudmFyIF9yb3dDb2xvclZhcmlhYmxlcyA9IGZ1bmN0aW9uIF9yb3dDb2xvclZhcmlhYmxlcyhfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmMi5jb2xvck1vZGU7XG4gIHJldHVybiB7XG4gICAgaG92ZXI6IGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gZXVpVGhlbWUuY29sb3JzLmxpZ2h0ZXN0U2hhZGUgOiB0aW50KGV1aVRoZW1lLmNvbG9ycy5saWdodGVzdFNoYWRlLCAwLjUpLFxuICAgIHNlbGVjdGVkOiB7XG4gICAgICBjb2xvcjogY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgMC43KSA6IHRpbnQoZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIDAuOTYpLFxuICAgICAgaG92ZXI6IGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gc2hhZGUoZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIDAuNzUpIDogdGludChldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgMC45KVxuICAgIH0sXG4gICAgY2xpY2thYmxlOiB7XG4gICAgICBob3ZlcjogdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIDAuMDUpLFxuICAgICAgZm9jdXM6IHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCAwLjEpXG4gICAgfVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImFsaWduXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJ0cnVuY2F0ZVRleHRcIiwgXCJzZXRTY29wZVJvd1wiLCBcInRleHRPbmx5XCIsIFwiaGFzQWN0aW9uc1wiLCBcImlzRXhwYW5kZXJcIiwgXCJzdHlsZVwiLCBcIndpZHRoXCIsIFwidmFsaWduXCIsIFwibW9iaWxlT3B0aW9uc1wiLCBcImFwcGVuZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMsIExFRlRfQUxJR05NRU5UIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUgfSBmcm9tICcuL21vYmlsZS9yZXNwb25zaXZlX2NvbnRleHQnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRXVpVGFibGVDZWxsQ29udGVudCB9IGZyb20gJy4vX3RhYmxlX2NlbGxfY29udGVudCc7XG5pbXBvcnQgeyBldWlUYWJsZVJvd0NlbGxTdHlsZXMgfSBmcm9tICcuL3RhYmxlX3Jvd19jZWxsLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVJvd0NlbGwgPSBmdW5jdGlvbiBFdWlUYWJsZVJvd0NlbGwoX3JlZikge1xuICB2YXIgX3JlZiRhbGlnbiA9IF9yZWYuYWxpZ24sXG4gICAgYWxpZ24gPSBfcmVmJGFsaWduID09PSB2b2lkIDAgPyBMRUZUX0FMSUdOTUVOVCA6IF9yZWYkYWxpZ24sXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHRydW5jYXRlVGV4dCA9IF9yZWYudHJ1bmNhdGVUZXh0LFxuICAgIHNldFNjb3BlUm93ID0gX3JlZi5zZXRTY29wZVJvdyxcbiAgICBfcmVmJHRleHRPbmx5ID0gX3JlZi50ZXh0T25seSxcbiAgICB0ZXh0T25seSA9IF9yZWYkdGV4dE9ubHkgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHRleHRPbmx5LFxuICAgIGhhc0FjdGlvbnMgPSBfcmVmLmhhc0FjdGlvbnMsXG4gICAgaXNFeHBhbmRlciA9IF9yZWYuaXNFeHBhbmRlcixcbiAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgIF9yZWYkdmFsaWduID0gX3JlZi52YWxpZ24sXG4gICAgdmFsaWduID0gX3JlZiR2YWxpZ24gPT09IHZvaWQgMCA/ICdtaWRkbGUnIDogX3JlZiR2YWxpZ24sXG4gICAgbW9iaWxlT3B0aW9ucyA9IF9yZWYubW9iaWxlT3B0aW9ucyxcbiAgICBhcHBlbmQgPSBfcmVmLmFwcGVuZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSgpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFibGVSb3dDZWxsU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGFibGVSb3dDZWxsLCBzZXRTY29wZVJvdyAmJiBzdHlsZXMucm93SGVhZGVyLCBpc0V4cGFuZGVyICYmIHN0eWxlcy5pc0V4cGFuZGVyLCBoYXNBY3Rpb25zICYmIHN0eWxlcy5oYXNBY3Rpb25zLCBzdHlsZXNbdmFsaWduXV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShpc1Jlc3BvbnNpdmUgPyBbc3R5bGVzLm1vYmlsZS5tb2JpbGUsIChtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vYmlsZU9wdGlvbnMuZW5sYXJnZSkgJiYgc3R5bGVzLm1vYmlsZS5lbmxhcmdlLCBoYXNBY3Rpb25zID09PSAnY3VzdG9tJyAmJiBzdHlsZXMubW9iaWxlLmN1c3RvbUFjdGlvbnMsIGhhc0FjdGlvbnMgPT09IHRydWUgJiYgc3R5bGVzLm1vYmlsZS5hY3Rpb25zLCBpc0V4cGFuZGVyICYmIHN0eWxlcy5tb2JpbGUuZXhwYW5kZXJdIDogW3N0eWxlcy5kZXNrdG9wLmRlc2t0b3AsIGhhc0FjdGlvbnMgJiYgc3R5bGVzLmRlc2t0b3AuYWN0aW9uc10pKTtcbiAgdmFyIGNlbGxDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVSb3dDZWxsJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taGFzQWN0aW9ucyc6IGhhc0FjdGlvbnMsXG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taXNFeHBhbmRlcic6IGlzRXhwYW5kZXJcbiAgfSk7XG4gIHZhciB3aWR0aFZhbHVlID0gaXNSZXNwb25zaXZlID8gaGFzQWN0aW9ucyB8fCBpc0V4cGFuZGVyID8gdW5kZWZpbmVkIC8vIE9uIG1vYmlsZSwgYWN0aW9ucyBhcmUgc2hpZnRlZCB0byBhIHJpZ2h0IGNvbHVtbiB2aWEgQ1NTXG4gIDogbW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLndpZHRoIDogd2lkdGg7XG4gIHZhciBzdHlsZU9iaiA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoVmFsdWUpO1xuICB2YXIgRWxlbWVudCA9IHNldFNjb3BlUm93ID8gJ3RoJyA6ICd0ZCc7XG4gIHZhciBzaGFyZWRQcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIHNjb3BlOiBzZXRTY29wZVJvdyA/ICdyb3cnIDogdW5kZWZpbmVkLFxuICAgIHN0eWxlOiBzdHlsZU9iaixcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KTtcbiAgdmFyIHNoYXJlZENvbnRlbnRQcm9wcyA9IHtcbiAgICBhbGlnbjogYWxpZ24sXG4gICAgdGV4dE9ubHk6IHRleHRPbmx5LFxuICAgIHRydW5jYXRlVGV4dDogdHJ1bmNhdGVUZXh0LFxuICAgIGhhc0FjdGlvbnM6IGhhc0FjdGlvbnMgfHwgaXNFeHBhbmRlclxuICB9O1xuICBpZiAoaXNSZXNwb25zaXZlKSB7XG4gICAgLy8gTW9iaWxlIHZpZXdcbiAgICBpZiAoKG1vYmlsZU9wdGlvbnMgPT09IG51bGwgfHwgbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbW9iaWxlT3B0aW9ucy5zaG93KSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX21vYmlsZU9wdGlvbnMkYWxpZ24sIF9tb2JpbGVPcHRpb25zJHRydW5jYSwgX21vYmlsZU9wdGlvbnMkdGV4dE9uO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNlbGxDbGFzc2VzXG4gICAgICB9LCBzaGFyZWRQcm9wcyksIChtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vYmlsZU9wdGlvbnMuaGVhZGVyKSAmJiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlUm93Q2VsbF9fbW9iaWxlSGVhZGVyXCIsXG4gICAgICAgIGNzczogc3R5bGVzLmV1aVRhYmxlUm93Q2VsbF9fbW9iaWxlSGVhZGVyXG4gICAgICB9LCBtb2JpbGVPcHRpb25zLmhlYWRlciksIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVDZWxsQ29udGVudCwgX2V4dGVuZHMoe30sIHNoYXJlZENvbnRlbnRQcm9wcywge1xuICAgICAgICBhbGlnbjogKF9tb2JpbGVPcHRpb25zJGFsaWduID0gbW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLmFsaWduKSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyRhbGlnbiAhPT0gdm9pZCAwID8gX21vYmlsZU9wdGlvbnMkYWxpZ24gOiAnbGVmdCcgLy8gRGVmYXVsdCB0byBsZWZ0IGFsaWduZWQgbW9iaWxlIGNlbGxzLCB1bmxlc3MgY29uc3VtZXJzIHNwZWNpZmljYWxseSBzZXQgYW4gYWxpZ25tZW50IGZvciBtb2JpbGVcbiAgICAgICAgLFxuICAgICAgICB0cnVuY2F0ZVRleHQ6IChfbW9iaWxlT3B0aW9ucyR0cnVuY2EgPSBtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vYmlsZU9wdGlvbnMudHJ1bmNhdGVUZXh0KSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyR0cnVuY2EgIT09IHZvaWQgMCA/IF9tb2JpbGVPcHRpb25zJHRydW5jYSA6IHRydW5jYXRlVGV4dCxcbiAgICAgICAgdGV4dE9ubHk6IChfbW9iaWxlT3B0aW9ucyR0ZXh0T24gPSBtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vYmlsZU9wdGlvbnMudGV4dE9ubHkpICE9PSBudWxsICYmIF9tb2JpbGVPcHRpb25zJHRleHRPbiAhPT0gdm9pZCAwID8gX21vYmlsZU9wdGlvbnMkdGV4dE9uIDogdGV4dE9ubHlcbiAgICAgIH0pLCAobW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLnJlbmRlcikgfHwgY2hpbGRyZW4pLCBhcHBlbmQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBEZXNrdG9wIHZpZXdcbiAgICBpZiAobW9iaWxlT3B0aW9ucyAhPT0gbnVsbCAmJiBtb2JpbGVPcHRpb25zICE9PSB2b2lkIDAgJiYgbW9iaWxlT3B0aW9ucy5vbmx5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNlbGxDbGFzc2VzXG4gICAgICB9LCBzaGFyZWRQcm9wcyksIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVDZWxsQ29udGVudCwgc2hhcmVkQ29udGVudFByb3BzLCBjaGlsZHJlbiksIGFwcGVuZCk7XG4gICAgfVxuICB9XG59O1xuRXVpVGFibGVSb3dDZWxsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFZlcnRpY2FsIGFsaWdubWVudCBvZiB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuICAgICAqL1xuICB2YWxpZ246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjZWxsIHNob3VsZCBiZSBtYXJrZWQgYXMgdGhlIGhlYWRpbmcgZm9yIGl0cyByb3dcbiAgICAgKi9cbiAgc2V0U2NvcGVSb3c6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGNlbGwgaXMgZGVkaWNhdGVkIHRvIHJvdyBhY3Rpb25zXG4gICAgICogKHVzZWQgZm9yIG1vYmlsZSBzdHlsaW5nIGFuZCBkZXNrdG9wIGFjdGlvbiBob3ZlciBiZWhhdmlvcilcbiAgICAgKi9cbiAgaGFzQWN0aW9uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImN1c3RvbVwiXSldKSxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gaXMgZGVkaWNhdGVkIGFzIHRoZSBleHBhbmRhYmxlIHJvdyB0b2dnbGVcbiAgICAgKi9cbiAgaXNFeHBhbmRlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE1vYmlsZSBvcHRpb25zIGZvciBkaXNwbGF5aW5nIGRpZmZlcmVudGx5IGF0IHNtYWxsIHNjcmVlbnM7XG4gICAgICogU2VlICNFdWlUYWJsZVJvd0NlbGxNb2JpbGVPcHRpb25zU2hhcGVcbiAgICAgKi9cbiAgbW9iaWxlT3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIElmIGZhbHNlLCB3aWxsIG5vdCByZW5kZXIgdGhlIGNlbGwgYXQgYWxsIGZvciBtb2JpbGVcbiAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAqL1xuICAgIHNob3c6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogT25seSBzaG93IGZvciBtb2JpbGU/IElmIHRydWUsIHdpbGwgbm90IHJlbmRlciB0aGUgY29sdW1uIGF0IGFsbCBmb3IgZGVza3RvcFxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgIG9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogQ3VzdG9tIHJlbmRlci9jaGlsZHJlbiBpZiBkaWZmZXJlbnQgZnJvbSBkZXNrdG9wXG4gICAgICAgKi9cbiAgICByZW5kZXI6IFByb3BUeXBlcy5ub2RlLFxuICAgIC8qKlxuICAgICAgICogVGhlIGNvbHVtbidzIGhlYWRlciBmb3IgdXNlIGluIG1vYmlsZSB2aWV3IChhdXRvbWF0aWNhbGx5IHBhc3NlZCBkb3duXG4gICAgICAgKiB3aGVuIHVzaW5nIGBFdWlCYXNpY1RhYmxlYCkuXG4gICAgICAgKiBPciBwYXNzIGBmYWxzZWAgdG8gbm90IHNob3cgYSBoZWFkZXIgYXQgYWxsLlxuICAgICAgICovXG4gICAgaGVhZGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXSksXG4gICAgLyoqXG4gICAgICAgKiBJbmNyZWFzZSB0ZXh0IHNpemUgY29tcGFyZWQgdG8gcmVzdCBvZiBjZWxsc1xuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgIGVubGFyZ2U6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogQXBwbGllcyB0aGUgdmFsdWUgdG8gdGhlIHdpZHRoIG9mIHRoZSBjZWxsIGluIG1vYmlsZSB2aWV3ICh0eXBpY2FsbHkgNTAlKVxuICAgICAgICogQGRlZmF1bHQgNTAlXG4gICAgICAgKi9cbiAgICB3aWR0aDogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIEhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSB0ZXh0IGluIHRoZSBjZWxsXG4gICAgICAgKi9cbiAgICBhbGlnbjogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSB0ZXh0IHdyYXBwZXIgYXJvdW5kIGNlbGwgY29udGVudCB0aGF0IGhlbHBzIHdvcmQgYnJlYWsgb3IgdHJ1bmNhdGVcbiAgICAgICAqIGxvbmcgdGV4dCBjb3JyZWN0bHkuXG4gICAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICAgKi9cbiAgICB0ZXh0T25seTogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGNvbHVtbiBzaG91bGQgdHJ1bmNhdGUgb3ZlcmZsb3dpbmcgdGV4dCBjb250ZW50LlxuICAgICAgICogLSBTZXQgdG8gYHRydWVgIHRvIGVuYWJsZSBzaW5nbGUtbGluZSB0cnVuY2F0aW9uLlxuICAgICAgICogLSBUbyBlbmFibGUgbXVsdGktbGluZSB0cnVuY2F0aW9uLCB1c2UgYSBjb25maWd1cmF0aW9uIG9iamVjdCB3aXRoIGBsaW5lc2BcbiAgICAgICAqIHNldCB0byBhIG51bWJlciBvZiBsaW5lcyB0byB0cnVuY2F0ZSB0by5cbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgICB0cnVuY2F0ZVRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBsaW5lczogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZF0pXG4gIH0pLFxuICAvKipcbiAgICAgKiBDb250ZW50IHJlbmRlcmVkIG91dHNpZGUgdGhlIHZpc2libGUgY2VsbCBjb250ZW50IHdyYXBwZXIuIFVzZWZ1bCBmb3IsIGUuZy4gc2NyZWVuIHJlYWRlciB0ZXh0LlxuICAgICAqXG4gICAgICogVXNlZCBieSBFdWlCYXNpY1RhYmxlIHRvIHJlbmRlciBoaWRkZW4gY29weSBtYXJrZXJzXG4gICAgICovXG4gIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIEhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSB0ZXh0IGluIHRoZSBjZWxsXG4gICAgICovXG4gIGFsaWduOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBDcmVhdGVzIGEgdGV4dCB3cmFwcGVyIGFyb3VuZCBjZWxsIGNvbnRlbnQgdGhhdCBoZWxwcyB3b3JkIGJyZWFrIG9yIHRydW5jYXRlXG4gICAgICogbG9uZyB0ZXh0IGNvcnJlY3RseS5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gIHRleHRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjb2x1bW4gc2hvdWxkIHRydW5jYXRlIG92ZXJmbG93aW5nIHRleHQgY29udGVudC5cbiAgICAgKiAtIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIHNpbmdsZS1saW5lIHRydW5jYXRpb24uXG4gICAgICogLSBUbyBlbmFibGUgbXVsdGktbGluZSB0cnVuY2F0aW9uLCB1c2UgYSBjb25maWd1cmF0aW9uIG9iamVjdCB3aXRoIGBsaW5lc2BcbiAgICAgKiBzZXQgdG8gYSBudW1iZXIgb2YgbGluZXMgdG8gdHJ1bmNhdGUgdG8uXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgdHJ1bmNhdGVUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGxpbmVzOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICB3aWR0aDogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSwgZXVpRm9udFNpemUsIGV1aVRleHRUcnVuY2F0ZSwgbG9naWNhbENTUywgbG9naWNhbFRleHRBbGlnbkNTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVRhYmxlVmFyaWFibGVzIH0gZnJvbSAnLi90YWJsZS5zdHlsZXMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWFtdmR5Ni1ib3R0b21cIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOmJvdHRvbTtsYWJlbDpib3R0b207XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWFtdmR5Ni1ib3R0b21cIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOmJvdHRvbTtsYWJlbDpib3R0b207XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIyZjc2NGUtdG9wXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjp0b3A7bGFiZWw6dG9wO1wiXG59IDoge1xuICBuYW1lOiBcIjJmNzY0ZS10b3BcIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOnRvcDtsYWJlbDp0b3A7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxOWhleGh5LWJhc2VsaW5lXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtsYWJlbDpiYXNlbGluZTtcIlxufSA6IHtcbiAgbmFtZTogXCIxOWhleGh5LWJhc2VsaW5lXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtsYWJlbDpiYXNlbGluZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY0ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImwxbm1lNy1taWRkbGVcIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOm1pZGRsZTtsYWJlbDptaWRkbGU7XCJcbn0gOiB7XG4gIG5hbWU6IFwibDFubWU3LW1pZGRsZVwiLFxuICBzdHlsZXM6IFwidmVydGljYWwtYWxpZ246bWlkZGxlO2xhYmVsOm1pZGRsZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlUYWJsZVJvd0NlbGxTdHlsZXMgPSBmdW5jdGlvbiBldWlUYWJsZVJvd0NlbGxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIF9ldWlUYWJsZVZhcmlhYmxlcyA9IGV1aVRhYmxlVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgbW9iaWxlU2l6ZXMgPSBfZXVpVGFibGVWYXJpYWJsZXMubW9iaWxlU2l6ZXM7XG5cbiAgLy8gVW5zZXRzIHRoZSBleHRyYSBzdHJ1dCBjYXVzZWQgYnkgaW5saW5lLWJsb2NrIGRpc3BsYXkgb2YgYnV0dG9ucy9pY29ucy90b29sdGlwcy5cbiAgLy8gV2l0aG91dCB0aGlzLCB0aGUgcm93IGhlaWdodCBqdW1wcyB3aGVuZXZlciBhY3Rpb25zIGFyZSBkaXNhYmxlZC5cbiAgdmFyIGhhc0ljb25zID0gXCJsaW5lLWhlaWdodDogMTtcIjtcbiAgcmV0dXJuIHtcbiAgICBldWlUYWJsZVJvd0NlbGw6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiOztsYWJlbDpldWlUYWJsZVJvd0NlbGw7XCIpLFxuICAgIHJvd0hlYWRlcjogLyojX19QVVJFX18qL2NzcyhcImZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodC5yZWd1bGFyLCBcIjtcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIjs7bGFiZWw6cm93SGVhZGVyO1wiKSxcbiAgICBpc0V4cGFuZGVyOiAvKiNfX1BVUkVfXyovY3NzKGhhc0ljb25zLCBcIjs7bGFiZWw6aXNFeHBhbmRlcjtcIiksXG4gICAgaGFzQWN0aW9uczogLyojX19QVVJFX18qL2NzcyhoYXNJY29ucywgXCI7O2xhYmVsOmhhc0FjdGlvbnM7XCIpLFxuICAgIC8vIHZhbGlnblxuICAgIG1pZGRsZTogX3JlZjQsXG4gICAgYmFzZWxpbmU6IF9yZWYzLFxuICAgIHRvcDogX3JlZjIsXG4gICAgYm90dG9tOiBfcmVmLFxuICAgIGRlc2t0b3A6IHtcbiAgICAgIGRlc2t0b3A6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnYm9yZGVyLXZlcnRpY2FsJywgZXVpVGhlbWUuYm9yZGVyLnRoaW4pLCBcIjs7bGFiZWw6ZGVza3RvcDtcIiksXG4gICAgICBhY3Rpb25zOiAvKiNfX1BVUkVfXyovY3NzKFwiLmV1aUJhc2ljVGFibGVBY3Rpb24tc2hvd09uSG92ZXJ7b3BhY2l0eTowO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ub3JtYWwsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCI7fX0mOmZvY3VzLXdpdGhpbiwuZXVpVGFibGVSb3ctaGFzQWN0aW9uczpob3ZlciAmey5ldWlCYXNpY1RhYmxlQWN0aW9uLXNob3dPbkhvdmVye29wYWNpdHk6MTt9fTtsYWJlbDphY3Rpb25zO1wiKVxuICAgIH0sXG4gICAgbW9iaWxlOiB7XG4gICAgICBtb2JpbGU6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWluLXdpZHRoJywgJzUwJScpLCBcIjs7bGFiZWw6bW9iaWxlO1wiKSxcbiAgICAgIGVubGFyZ2U6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIjs7bGFiZWw6ZW5sYXJnZTtcIiksXG4gICAgICByaWdodENvbHVtbkNvbnRlbnQ6IFwiXFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICBcIi5jb25jYXQobG9naWNhbENTUygncmlnaHQnLCAwKSwgXCJcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWluLXdpZHRoJywgJzAnKSwgXCJcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCBtb2JpbGVTaXplcy5hY3Rpb25zLndpZHRoKSwgXCJcXG4gICAgICBcIiksXG4gICAgICBnZXQgYWN0aW9ucygpIHtcbiAgICAgICAgLy8gTm90ZTogVmlzaWJsZS1vbi1ob3ZlciBhY3Rpb25zIG9uIGRlc2t0b3AgYWx3YXlzIHNob3cgb24gbW9iaWxlXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3NzKHRoaXMucmlnaHRDb2x1bW5Db250ZW50LCBcIiBcIiwgbG9naWNhbENTUygndG9wJywgbW9iaWxlU2l6ZXMuYWN0aW9ucy5vZmZzZXQpLCBcIjs7bGFiZWw6YWN0aW9ucztcIik7XG4gICAgICB9LFxuICAgICAgZ2V0IGV4cGFuZGVyKCkge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL2Nzcyh0aGlzLnJpZ2h0Q29sdW1uQ29udGVudCwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2JvdHRvbScsIG1vYmlsZVNpemVzLmFjdGlvbnMub2Zmc2V0KSwgXCI7O2xhYmVsOmV4cGFuZGVyO1wiKTtcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIEN1c3RvbSBhY3Rpb25zIG1heSBub3QgYmUgaWNvbnMgYW5kIHRoZXJlZm9yZSBtYXkgbm90IGZpdCBpbiBhIGNvbHVtblxuICAgICAgICogSWYgdGhleSdyZSB0aGUgbGFzdCBjZWxsLCB3ZSBjYW4gY3JlYXRlIGEgcHNldWRvIFwicm93XCIvXCJib3JkZXItdG9wXCJcbiAgICAgICAqIHRoYXQgbWltaWNrcyB0aGUgdmlzdWFsIHNlcGFyYXRpb24gdGhhdCB0aGUgcmlnaHQgY29sdW1uIGhhc1xuICAgICAgICovXG4gICAgICBjdXN0b21BY3Rpb25zOiAvKiNfX1BVUkVfXyovY3NzKFwiJjpsYXN0LWNoaWxke1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiICY6OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCdob3Jpem9udGFsJywgMCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiksIFwiIGJhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmJvcmRlci5jb2xvciwgXCI7fS5ldWlUYWJsZUNlbGxDb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7fX07bGFiZWw6Y3VzdG9tQWN0aW9ucztcIilcbiAgICB9LFxuICAgIGV1aVRhYmxlUm93Q2VsbF9fbW9iaWxlSGVhZGVyOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHRUcnVuY2F0ZSgpLCBcIiBmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnLCB7XG4gICAgICBjdXN0b21TY2FsZTogJ3h4cydcbiAgICB9KS5mb250U2l6ZSwgXCI7ZGlzcGxheTpibG9jaztjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhcmtTaGFkZSwgXCI7cGFkZGluZzpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjtwYWRkaW5nLWJsb2NrLWVuZDowO21hcmdpbi1ibG9jay1lbmQ6LVwiLCBldWlUaGVtZS5zaXplLnMsIFwiOy5ldWlUYWJsZVJvd0NlbGw6bm90KDpvbmx5LWNoaWxkKSAme1wiLCBsb2dpY2FsQ1NTKCdtaW4taGVpZ2h0JywgZXVpVGhlbWUuc2l6ZS5sKSwgXCI7fTtsYWJlbDpldWlUYWJsZVJvd0NlbGxfX21vYmlsZUhlYWRlcjtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImFwcGVuZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSB9IGZyb20gJy4vbW9iaWxlL3Jlc3BvbnNpdmVfY29udGV4dCc7XG5pbXBvcnQgeyBldWlUYWJsZUNlbGxDaGVja2JveFN0eWxlcyB9IGZyb20gJy4vdGFibGVfY2VsbHNfc2hhcmVkLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVJvd0NlbGxDaGVja2JveCA9IGZ1bmN0aW9uIEV1aVRhYmxlUm93Q2VsbENoZWNrYm94KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBhcHBlbmQgPSBfcmVmLmFwcGVuZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSgpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFibGVDZWxsQ2hlY2tib3hTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUYWJsZVJvd0NlbGxDaGVja2JveCwgaXNSZXNwb25zaXZlID8gc3R5bGVzLm1vYmlsZSA6IHN0eWxlcy5kZXNrdG9wXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZVJvd0NlbGxDaGVja2JveCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGRcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlQ2VsbENvbnRlbnRcIlxuICB9LCBjaGlsZHJlbiksIGFwcGVuZCk7XG59O1xuRXVpVGFibGVSb3dDZWxsQ2hlY2tib3gucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImxvYWRpbmdcIiwgXCJpdGVtc1wiLCBcIml0ZW1JZFwiLCBcImNvbHVtbnNcIiwgXCJwYWdpbmF0aW9uXCIsIFwic29ydGluZ1wiLCBcInNlbGVjdGlvblwiLCBcIm9uQ2hhbmdlXCIsIFwiZXJyb3JcIiwgXCJub0l0ZW1zTWVzc2FnZVwiLCBcImNvbXByZXNzZWRcIiwgXCJpdGVtSWRUb0V4cGFuZGVkUm93TWFwXCIsIFwicmVzcG9uc2l2ZUJyZWFrcG9pbnRcIiwgXCJyb3dQcm9wc1wiLCBcImNlbGxQcm9wc1wiLCBcInRhYmxlQ2FwdGlvblwiLCBcInJvd0hlYWRlclwiLCBcInRhYmxlTGF5b3V0XCJdLFxuICBfZXhjbHVkZWQyID0gW1wiYWxpZ25cIiwgXCJyZW5kZXJcIiwgXCJkYXRhVHlwZVwiLCBcImlzRXhwYW5kZXJcIiwgXCJ0ZXh0T25seVwiLCBcIm5hbWVcIiwgXCJmaWVsZFwiLCBcImRlc2NyaXB0aW9uXCIsIFwic29ydGFibGVcIiwgXCJmb290ZXJcIiwgXCJtb2JpbGVPcHRpb25zXCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZm9ybWF0QXV0bywgZm9ybWF0Qm9vbGVhbiwgZm9ybWF0RGF0ZSwgZm9ybWF0TnVtYmVyLCBmb3JtYXRUZXh0LCBMRUZUX0FMSUdOTUVOVCwgUklHSFRfQUxJR05NRU5ULCBTb3J0RGlyZWN0aW9uLCBSZW5kZXJXaXRoRXVpVGhlbWUsIE92ZXJyaWRlQ29waWVkVGFidWxhckNvbnRlbnQsIHRhYnVsYXJDb3B5TWFya2VycyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb2JqZWN0cyc7XG5pbXBvcnQgeyBFdWlDaGVja2JveCB9IGZyb20gJy4uL2Zvcm0nO1xuaW1wb3J0IHsgRXVpQ29tcG9uZW50RGVmYXVsdHNDb250ZXh0IH0gZnJvbSAnLi4vcHJvdmlkZXIvY29tcG9uZW50X2RlZmF1bHRzJztcbmltcG9ydCB7IGV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzIH0gZnJvbSAnLi4vdGFibGUvdGFibGVfcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBFdWlUYWJsZSwgRXVpVGFibGVCb2R5LCBFdWlUYWJsZUZvb3RlciwgRXVpVGFibGVGb290ZXJDZWxsLCBFdWlUYWJsZUhlYWRlciwgRXVpVGFibGVIZWFkZXJDZWxsLCBFdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCwgRXVpVGFibGVIZWFkZXJNb2JpbGUsIEV1aVRhYmxlUm93LCBFdWlUYWJsZVJvd0NlbGwsIEV1aVRhYmxlUm93Q2VsbENoZWNrYm94LCBFdWlUYWJsZVNvcnRNb2JpbGUgfSBmcm9tICcuLi90YWJsZSc7XG5pbXBvcnQgeyBldWlUYWJsZUNhcHRpb25TdHlsZXMgfSBmcm9tICcuLi90YWJsZS90YWJsZS5zdHlsZXMnO1xuaW1wb3J0IHsgQ29sbGFwc2VkSXRlbUFjdGlvbnMgfSBmcm9tICcuL2NvbGxhcHNlZF9pdGVtX2FjdGlvbnMnO1xuaW1wb3J0IHsgRXhwYW5kZWRJdGVtQWN0aW9ucyB9IGZyb20gJy4vZXhwYW5kZWRfaXRlbV9hY3Rpb25zJztcbmltcG9ydCB7IFBhZ2luYXRpb25CYXIgfSBmcm9tICcuL3BhZ2luYXRpb25fYmFyJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aURlbGF5UmVuZGVyIH0gZnJvbSAnLi4vZGVsYXlfcmVuZGVyJztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgZXVpQmFzaWNUYWJsZUJvZHlMb2FkaW5nLCBzYWZhcmlMb2FkaW5nV29ya2Fyb3VuZCB9IGZyb20gJy4vYmFzaWNfdGFibGUuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgZGF0YVR5cGVzUHJvZmlsZXMgPSB7XG4gIGF1dG86IHtcbiAgICBhbGlnbjogTEVGVF9BTElHTk1FTlQsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXRBdXRvKHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIHN0cmluZzoge1xuICAgIGFsaWduOiBMRUZUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFRleHQodmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgbnVtYmVyOiB7XG4gICAgYWxpZ246IFJJR0hUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBib29sZWFuOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0Qm9vbGVhbih2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBkYXRlOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG59O1xudmFyIERBVEFfVFlQRVMgPSBPYmplY3Qua2V5cyhkYXRhVHlwZXNQcm9maWxlcyk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZCkge1xuICBpZiAoaXRlbUlkKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oaXRlbUlkKSkge1xuICAgICAgcmV0dXJuIGl0ZW1JZChpdGVtKTtcbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZSBuZXZlciBtaW5kIGFib3V0IHRoZSBpbmRleCBzaWduYXR1cmVcbiAgICByZXR1cm4gaXRlbVtpdGVtSWRdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRSb3dQcm9wcyhpdGVtLCByb3dQcm9wcykge1xuICBpZiAocm93UHJvcHMpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihyb3dQcm9wcykpIHtcbiAgICAgIHJldHVybiByb3dQcm9wcyhpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd1Byb3BzO1xuICB9XG4gIHJldHVybiB7fTtcbn1cbmZ1bmN0aW9uIGdldENlbGxQcm9wcyhpdGVtLCBjb2x1bW4sIGNlbGxQcm9wcykge1xuICBpZiAoY2VsbFByb3BzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oY2VsbFByb3BzKSkge1xuICAgICAgcmV0dXJuIGNlbGxQcm9wcyhpdGVtLCBjb2x1bW4pO1xuICAgIH1cbiAgICByZXR1cm4gY2VsbFByb3BzO1xuICB9XG4gIHJldHVybiB7fTtcbn1cbmZ1bmN0aW9uIGdldENvbHVtbkZvb3Rlcihjb2x1bW4sIF9yZWYpIHtcbiAgdmFyIGl0ZW1zID0gX3JlZi5pdGVtcyxcbiAgICBwYWdpbmF0aW9uID0gX3JlZi5wYWdpbmF0aW9uO1xuICB2YXIgX3JlZjIgPSBjb2x1bW4sXG4gICAgZm9vdGVyID0gX3JlZjIuZm9vdGVyO1xuICBpZiAoZm9vdGVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZm9vdGVyKSkge1xuICAgICAgcmV0dXJuIGZvb3Rlcih7XG4gICAgICAgIGl0ZW1zOiBpdGVtcyxcbiAgICAgICAgcGFnaW5hdGlvbjogcGFnaW5hdGlvblxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmb290ZXI7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGhhc1BhZ2luYXRpb24oeCkge1xuICByZXR1cm4geC5oYXNPd25Qcm9wZXJ0eSgncGFnaW5hdGlvbicpICYmICEheC5wYWdpbmF0aW9uO1xufVxuZXhwb3J0IHZhciBFdWlCYXNpY1RhYmxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aUJhc2ljVGFibGUocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUJhc2ljVGFibGUpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlCYXNpY1RhYmxlLCBbcHJvcHNdKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidGFibGVJZFwiLCBodG1sSWRHZW5lcmF0b3IoJ19fdGFibGUnKSgpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2VsZWN0QWxsSWRHZW5lcmF0b3JcIiwgaHRtbElkR2VuZXJhdG9yKCdfc2VsZWN0aW9uX2NvbHVtbi1jaGVja2JveCcpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVuZGVyU2VsZWN0QWxsXCIsIGZ1bmN0aW9uIChpc01vYmlsZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMuaXRlbXMsXG4gICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzLnNlbGVjdGlvbjtcbiAgICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBzZWxlY3RhYmxlSXRlbXMgPSBpdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuICFzZWxlY3Rpb24uc2VsZWN0YWJsZSB8fCBzZWxlY3Rpb24uc2VsZWN0YWJsZShpdGVtKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGNoZWNrZWQgPSBfdGhpcy5zdGF0ZS5zZWxlY3Rpb24gJiYgc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aCA+IDAgJiYgX3RoaXMuc3RhdGUuc2VsZWN0aW9uLmxlbmd0aCA9PT0gc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aDtcbiAgICAgIHZhciBpbmRldGVybWluYXRlID0gIWNoZWNrZWQgJiYgX3RoaXMuc3RhdGUuc2VsZWN0aW9uICYmIHNlbGVjdGFibGVJdGVtcy5sZW5ndGggPiAwICYmIF90aGlzLnN0YXRlLnNlbGVjdGlvbi5sZW5ndGggPiAwO1xuICAgICAgdmFyIGRpc2FibGVkID0gc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCAmJiAhaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNlbGVjdGlvbihzZWxlY3RhYmxlSXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNlbGVjdGlvbihbXSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuczogWydldWlCYXNpY1RhYmxlLnNlbGVjdEFsbFJvd3MnLCAnZXVpQmFzaWNUYWJsZS5kZXNlbGVjdFJvd3MnXSxcbiAgICAgICAgZGVmYXVsdHM6IFsnU2VsZWN0IGFsbCByb3dzJywgJ0Rlc2VsZWN0IHJvd3MnXVxuICAgICAgfSwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAyKSxcbiAgICAgICAgICBzZWxlY3RBbGxSb3dzID0gX3JlZjRbMF0sXG4gICAgICAgICAgZGVzZWxlY3RSb3dzID0gX3JlZjRbMV07XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNoZWNrYm94LCB7XG4gICAgICAgICAgaWQ6IF90aGlzLnNlbGVjdEFsbElkR2VuZXJhdG9yKCksXG4gICAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgICBpbmRldGVybWluYXRlOiBpbmRldGVybWluYXRlLFxuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNoZWNrYm94U2VsZWN0QWxsXCIsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGNoZWNrZWQgfHwgaW5kZXRlcm1pbmF0ZSA/IGRlc2VsZWN0Um93cyA6IHNlbGVjdEFsbFJvd3MsXG4gICAgICAgICAgdGl0bGU6IGNoZWNrZWQgfHwgaW5kZXRlcm1pbmF0ZSA/IGRlc2VsZWN0Um93cyA6IHNlbGVjdEFsbFJvd3MsXG4gICAgICAgICAgbGFiZWw6IGlzTW9iaWxlID8gc2VsZWN0QWxsUm93cyA6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVuZGVyQ29weUNoYXJcIiwgZnVuY3Rpb24gKGNvbHVtbkluZGV4KSB7XG4gICAgICB2YXIgaXNMYXN0Q29sdW1uID0gY29sdW1uSW5kZXggPT09IF90aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICAgIHJldHVybiBpc0xhc3RDb2x1bW4gPyB0YWJ1bGFyQ29weU1hcmtlcnMuaGlkZGVuTmV3bGluZSA6IHRhYnVsYXJDb3B5TWFya2Vycy5oaWRkZW5UYWI7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlc29sdmVDb2x1bW5Tb3J0RGlyZWN0aW9uXCIsIGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHZhciBzb3J0aW5nID0gX3RoaXMucHJvcHMuc29ydGluZztcbiAgICAgIHZhciBfcmVmNSA9IGNvbHVtbixcbiAgICAgICAgc29ydGFibGUgPSBfcmVmNS5zb3J0YWJsZSxcbiAgICAgICAgZmllbGQgPSBfcmVmNS5maWVsZCxcbiAgICAgICAgbmFtZSA9IF9yZWY1Lm5hbWU7XG4gICAgICBpZiAoIXNvcnRpbmcgfHwgIXNvcnRpbmcuc29ydCB8fCAhc29ydGFibGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHNvcnRpbmcuc29ydC5maWVsZCA9PT0gZmllbGQgfHwgc29ydGluZy5zb3J0LmZpZWxkID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiBzb3J0aW5nLnNvcnQuZGlyZWN0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZXNvbHZlQ29sdW1uT25Tb3J0XCIsIGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHZhciBzb3J0aW5nID0gX3RoaXMucHJvcHMuc29ydGluZztcbiAgICAgIHZhciBfcmVmNiA9IGNvbHVtbixcbiAgICAgICAgc29ydGFibGUgPSBfcmVmNi5zb3J0YWJsZSxcbiAgICAgICAgbmFtZSA9IF9yZWY2Lm5hbWU7XG4gICAgICBpZiAoIXNvcnRpbmcgfHwgIXNvcnRhYmxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghX3RoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFzaWNUYWJsZSBpcyBjb25maWd1cmVkIHRvIGJlIHNvcnRhYmxlIG9uIGNvbHVtbiBbXCIuY29uY2F0KG5hbWUsIFwiXSBidXRcXG4gICAgICAgICAgW29uQ2hhbmdlXSBpcyBub3QgY29uZmlndXJlZC4gVGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkIHRvIGhhbmRsZSB0aGUgc29ydCByZXF1ZXN0c1wiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub25Db2x1bW5Tb3J0Q2hhbmdlKGNvbHVtbik7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgLy8gdXNlZCBmb3IgY2hlY2tpbmcgaWYgIGluaXRpYWwgc2VsZWN0aW9uIGlzIHJlbmRlcmVkXG4gICAgICBpbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0aW9uOiBbXVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlCYXNpY1RhYmxlLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlCYXNpY1RhYmxlLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuZ2V0SW5pdGlhbFNlbGVjdGlvbigpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInBhZ2VTaXplXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgX3JlZjcsIF90aGlzJHByb3BzJHBhZ2luYXRpbywgX3RoaXMkcHJvcHMkcGFnaW5hdGlvMiwgX3RoaXMkY29udGV4dCRFdWlUYWJsO1xuICAgICAgcmV0dXJuIChfcmVmNyA9IChfdGhpcyRwcm9wcyRwYWdpbmF0aW8gPSAoX3RoaXMkcHJvcHMkcGFnaW5hdGlvMiA9IHRoaXMucHJvcHMucGFnaW5hdGlvbikgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkcGFnaW5hdGlvMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkcGFnaW5hdGlvMi5wYWdlU2l6ZSkgIT09IG51bGwgJiYgX3RoaXMkcHJvcHMkcGFnaW5hdGlvICE9PSB2b2lkIDAgPyBfdGhpcyRwcm9wcyRwYWdpbmF0aW8gOiAoX3RoaXMkY29udGV4dCRFdWlUYWJsID0gdGhpcy5jb250ZXh0LkV1aVRhYmxlUGFnaW5hdGlvbikgPT09IG51bGwgfHwgX3RoaXMkY29udGV4dCRFdWlUYWJsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRjb250ZXh0JEV1aVRhYmwuaXRlbXNQZXJQYWdlKSAhPT0gbnVsbCAmJiBfcmVmNyAhPT0gdm9pZCAwID8gX3JlZjcgOiBldWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cy5pdGVtc1BlclBhZ2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzU2VsZWN0aW9uQ29udHJvbGxlZFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJHNlbGVjdGlvbjtcbiAgICAgIHJldHVybiAhISgoX3RoaXMkcHJvcHMkc2VsZWN0aW9uID0gdGhpcy5wcm9wcy5zZWxlY3Rpb24pICE9PSBudWxsICYmIF90aGlzJHByb3BzJHNlbGVjdGlvbiAhPT0gdm9pZCAwICYmIF90aGlzJHByb3BzJHNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEluaXRpYWxTZWxlY3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SW5pdGlhbFNlbGVjdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uQ29udHJvbGxlZCkgcmV0dXJuO1xuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0aW9uICYmIHRoaXMucHJvcHMuc2VsZWN0aW9uLmluaXRpYWxTZWxlY3RlZCAmJiAhdGhpcy5zdGF0ZS5pbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQgJiYgdGhpcy5wcm9wcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5wcm9wcy5zZWxlY3Rpb24uaW5pdGlhbFNlbGVjdGVkLFxuICAgICAgICAgIGluaXRpYWxTZWxlY3Rpb25SZW5kZXJlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYnVpbGRDcml0ZXJpYVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZENyaXRlcmlhKHByb3BzKSB7XG4gICAgICB2YXIgY3JpdGVyaWEgPSB7fTtcbiAgICAgIGlmIChoYXNQYWdpbmF0aW9uKHByb3BzKSkge1xuICAgICAgICBjcml0ZXJpYS5wYWdlID0ge1xuICAgICAgICAgIGluZGV4OiBwcm9wcy5wYWdpbmF0aW9uLnBhZ2VJbmRleCxcbiAgICAgICAgICBzaXplOiB0aGlzLnBhZ2VTaXplXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuc29ydGluZykge1xuICAgICAgICBjcml0ZXJpYS5zb3J0ID0gcHJvcHMuc29ydGluZy5zb3J0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyaXRlcmlhO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjaGFuZ2VTZWxlY3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hhbmdlU2VsZWN0aW9uKGNoYW5nZWRTZWxlY3Rpb24pIHtcbiAgICAgIHZhciBfc2VsZWN0aW9uJG9uU2VsZWN0aW87XG4gICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5wcm9wcy5zZWxlY3Rpb247XG4gICAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuO1xuICAgICAgKF9zZWxlY3Rpb24kb25TZWxlY3RpbyA9IHNlbGVjdGlvbi5vblNlbGVjdGlvbkNoYW5nZSkgPT09IG51bGwgfHwgX3NlbGVjdGlvbiRvblNlbGVjdGlvID09PSB2b2lkIDAgfHwgX3NlbGVjdGlvbiRvblNlbGVjdGlvLmNhbGwoc2VsZWN0aW9uLCBjaGFuZ2VkU2VsZWN0aW9uKTtcbiAgICAgIGlmICghdGhpcy5pc1NlbGVjdGlvbkNvbnRyb2xsZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc2VsZWN0aW9uOiBjaGFuZ2VkU2VsZWN0aW9uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhclNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhclNlbGVjdGlvbigpIHtcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKFtdKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25QYWdlU2l6ZUNoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvblBhZ2VTaXplQ2hhbmdlKHNpemUpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHZhciBjdXJyZW50Q3JpdGVyaWEgPSB0aGlzLmJ1aWxkQ3JpdGVyaWEodGhpcy5wcm9wcyk7XG4gICAgICB2YXIgY3JpdGVyaWEgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGN1cnJlbnRDcml0ZXJpYSksIHt9LCB7XG4gICAgICAgIHBhZ2U6IHtcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICAvLyB3aGVuIHBhZ2Ugc2l6ZSBjaGFuZ2VzLCB3ZSB0YWtlIHRoZSB1c2VyIGJhY2sgdG8gdGhlIGZpcnN0IHBhZ2VcbiAgICAgICAgICBzaXplOiBzaXplXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShjcml0ZXJpYSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uUGFnZUNoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvblBhZ2VDaGFuZ2UoaW5kZXgpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHZhciBjdXJyZW50Q3JpdGVyaWEgPSB0aGlzLmJ1aWxkQ3JpdGVyaWEodGhpcy5wcm9wcyk7XG4gICAgICB2YXIgY3JpdGVyaWEgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGN1cnJlbnRDcml0ZXJpYSksIHt9LCB7XG4gICAgICAgIHBhZ2U6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudENyaXRlcmlhLnBhZ2UpLCB7fSwge1xuICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGNyaXRlcmlhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25Db2x1bW5Tb3J0Q2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ29sdW1uU29ydENoYW5nZShjb2x1bW4pIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHZhciBjdXJyZW50Q3JpdGVyaWEgPSB0aGlzLmJ1aWxkQ3JpdGVyaWEodGhpcy5wcm9wcyk7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gU29ydERpcmVjdGlvbi5BU0M7XG4gICAgICBpZiAoY3VycmVudENyaXRlcmlhICYmIGN1cnJlbnRDcml0ZXJpYS5zb3J0ICYmIChjdXJyZW50Q3JpdGVyaWEuc29ydC5maWVsZCA9PT0gY29sdW1uLmZpZWxkIHx8IGN1cnJlbnRDcml0ZXJpYS5zb3J0LmZpZWxkID09PSBjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gU29ydERpcmVjdGlvbi5yZXZlcnNlKGN1cnJlbnRDcml0ZXJpYS5zb3J0LmRpcmVjdGlvbik7XG4gICAgICB9XG4gICAgICB2YXIgY3JpdGVyaWEgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGN1cnJlbnRDcml0ZXJpYSksIHt9LCB7XG4gICAgICAgIC8vIHJlc2V0dGluZyB0aGUgcGFnZSBpZiB0aGUgY3JpdGVyaWEgaGFzIG9uZVxuICAgICAgICBwYWdlOiAhY3VycmVudENyaXRlcmlhLnBhZ2UgPyB1bmRlZmluZWQgOiB7XG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgc2l6ZTogY3VycmVudENyaXRlcmlhLnBhZ2Uuc2l6ZVxuICAgICAgICB9LFxuICAgICAgICBzb3J0OiB7XG4gICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCB8fCBjb2x1bW4ubmFtZSxcbiAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgY29tcGxleCByZWxhdGlvbnNoaXAgYmV0d2VlbiBwYWdpbmF0aW9uJ3MgZXhpc3RlbmNlIGFuZCBjcml0ZXJpYSwgdGhlIGNvZGUgbG9naWMgZW5zdXJlcyB0aGlzIGlzIGNvcnJlY3RseSBtYWludGFpbmVkXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoY3JpdGVyaWEpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgIGxvYWRpbmcgPSBfdGhpcyRwcm9wczIubG9hZGluZyxcbiAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wczIuaXRlbXMsXG4gICAgICAgIGl0ZW1JZCA9IF90aGlzJHByb3BzMi5pdGVtSWQsXG4gICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczIuY29sdW1ucyxcbiAgICAgICAgcGFnaW5hdGlvbiA9IF90aGlzJHByb3BzMi5wYWdpbmF0aW9uLFxuICAgICAgICBzb3J0aW5nID0gX3RoaXMkcHJvcHMyLnNvcnRpbmcsXG4gICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzMi5zZWxlY3Rpb24sXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMyLm9uQ2hhbmdlLFxuICAgICAgICBlcnJvciA9IF90aGlzJHByb3BzMi5lcnJvcixcbiAgICAgICAgbm9JdGVtc01lc3NhZ2UgPSBfdGhpcyRwcm9wczIubm9JdGVtc01lc3NhZ2UsXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczIuY29tcHJlc3NlZCxcbiAgICAgICAgaXRlbUlkVG9FeHBhbmRlZFJvd01hcCA9IF90aGlzJHByb3BzMi5pdGVtSWRUb0V4cGFuZGVkUm93TWFwLFxuICAgICAgICByZXNwb25zaXZlQnJlYWtwb2ludCA9IF90aGlzJHByb3BzMi5yZXNwb25zaXZlQnJlYWtwb2ludCxcbiAgICAgICAgcm93UHJvcHMgPSBfdGhpcyRwcm9wczIucm93UHJvcHMsXG4gICAgICAgIGNlbGxQcm9wcyA9IF90aGlzJHByb3BzMi5jZWxsUHJvcHMsXG4gICAgICAgIHRhYmxlQ2FwdGlvbiA9IF90aGlzJHByb3BzMi50YWJsZUNhcHRpb24sXG4gICAgICAgIHJvd0hlYWRlciA9IF90aGlzJHByb3BzMi5yb3dIZWFkZXIsXG4gICAgICAgIHRhYmxlTGF5b3V0ID0gX3RoaXMkcHJvcHMyLnRhYmxlTGF5b3V0LFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQmFzaWNUYWJsZScsIHtcbiAgICAgICAgJ2V1aUJhc2ljVGFibGUtbG9hZGluZyc6IGxvYWRpbmdcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgdGFibGUgPSB0aGlzLnJlbmRlclRhYmxlKCk7XG4gICAgICB2YXIgcGFnaW5hdGlvbkJhciA9IHRoaXMucmVuZGVyUGFnaW5hdGlvbkJhcigpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgIH0sIHJlc3QpLCB0YWJsZSwgcGFnaW5hdGlvbkJhcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczMuY29tcHJlc3NlZCxcbiAgICAgICAgcmVzcG9uc2l2ZUJyZWFrcG9pbnQgPSBfdGhpcyRwcm9wczMucmVzcG9uc2l2ZUJyZWFrcG9pbnQsXG4gICAgICAgIHRhYmxlTGF5b3V0ID0gX3RoaXMkcHJvcHMzLnRhYmxlTGF5b3V0LFxuICAgICAgICBsb2FkaW5nID0gX3RoaXMkcHJvcHMzLmxvYWRpbmc7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlck1vYmlsZSwge1xuICAgICAgICByZXNwb25zaXZlQnJlYWtwb2ludDogcmVzcG9uc2l2ZUJyZWFrcG9pbnRcbiAgICAgIH0sIHRoaXMucmVuZGVyU2VsZWN0QWxsKHRydWUpLCB0aGlzLnJlbmRlclRhYmxlTW9iaWxlU29ydCgpKSwgX19fRW1vdGlvbkpTWChPdmVycmlkZUNvcGllZFRhYnVsYXJDb250ZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlLCB7XG4gICAgICAgIGlkOiB0aGlzLnRhYmxlSWQsXG4gICAgICAgIHRhYmxlTGF5b3V0OiB0YWJsZUxheW91dCxcbiAgICAgICAgcmVzcG9uc2l2ZUJyZWFrcG9pbnQ6IHJlc3BvbnNpdmVCcmVha3BvaW50LFxuICAgICAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkLFxuICAgICAgICBjc3M6IGxvYWRpbmcgJiYgc2FmYXJpTG9hZGluZ1dvcmthcm91bmRcbiAgICAgIH0sIHRoaXMucmVuZGVyVGFibGVDYXB0aW9uKCksIHRoaXMucmVuZGVyVGFibGVIZWFkKCksIHRoaXMucmVuZGVyVGFibGVCb2R5KCksIHRoaXMucmVuZGVyVGFibGVGb290ZXIoKSkpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVNb2JpbGVTb3J0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlTW9iaWxlU29ydCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczQuY29sdW1ucyxcbiAgICAgICAgc29ydGluZyA9IF90aGlzJHByb3BzNC5zb3J0aW5nO1xuICAgICAgdmFyIGl0ZW1zID0gW107XG4gICAgICBpZiAoIXNvcnRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbiwgaW5kZXgpIHtcbiAgICAgICAgdmFyIF9jb2x1bW47XG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgJiYgc29ydGluZy5zb3J0ICYmICEhc29ydGluZy5lbmFibGVBbGxDb2x1bW5zICYmIGNvbHVtbi5zb3J0YWJsZSA9PSBudWxsKSB7XG4gICAgICAgICAgY29sdW1uID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjb2x1bW4pLCB7fSwge1xuICAgICAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbHVtbi5zb3J0YWJsZSB8fCAoKF9jb2x1bW4gPSBjb2x1bW4pID09PSBudWxsIHx8IF9jb2x1bW4gPT09IHZvaWQgMCB8fCAoX2NvbHVtbiA9IF9jb2x1bW4ubW9iaWxlT3B0aW9ucykgPT09IG51bGwgfHwgX2NvbHVtbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NvbHVtbi5zaG93KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNvcnREaXJlY3Rpb24gPSBfdGhpczIucmVzb2x2ZUNvbHVtblNvcnREaXJlY3Rpb24oY29sdW1uKTtcbiAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAga2V5OiBcIl9kYXRhX3NfXCIuY29uY2F0KFN0cmluZyhjb2x1bW4uZmllbGQpLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICBvblNvcnQ6IF90aGlzMi5yZXNvbHZlQ29sdW1uT25Tb3J0KGNvbHVtbiksXG4gICAgICAgICAgaXNTb3J0ZWQ6ICEhc29ydERpcmVjdGlvbixcbiAgICAgICAgICBpc1NvcnRBc2NlbmRpbmc6IHNvcnREaXJlY3Rpb24gPyBTb3J0RGlyZWN0aW9uLmlzQXNjKHNvcnREaXJlY3Rpb24pIDogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gaXRlbXMubGVuZ3RoID8gX19fRW1vdGlvbkpTWChFdWlUYWJsZVNvcnRNb2JpbGUsIHtcbiAgICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgICB9KSA6IG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlQ2FwdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUNhcHRpb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wczUuaXRlbXMsXG4gICAgICAgIHBhZ2luYXRpb24gPSBfdGhpcyRwcm9wczUucGFnaW5hdGlvbixcbiAgICAgICAgdGFibGVDYXB0aW9uID0gX3RoaXMkcHJvcHM1LnRhYmxlQ2FwdGlvbjtcbiAgICAgIHZhciBpdGVtQ291bnQgPSBpdGVtcy5sZW5ndGg7XG4gICAgICB2YXIgdG90YWxJdGVtQ291bnQgPSBwYWdpbmF0aW9uID8gcGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCA6IGl0ZW1Db3VudDtcbiAgICAgIHZhciBwYWdlID0gcGFnaW5hdGlvbiA/IHBhZ2luYXRpb24ucGFnZUluZGV4ICsgMSA6IDE7XG4gICAgICB2YXIgcGFnZUNvdW50ID0gcGFnaW5hdGlvbiA/IE1hdGguY2VpbChwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50IC8gdGhpcy5wYWdlU2l6ZSkgOiAxO1xuICAgICAgdmFyIGNhcHRpb25FbGVtZW50O1xuICAgICAgaWYgKHRhYmxlQ2FwdGlvbikge1xuICAgICAgICBpZiAocGFnaW5hdGlvbikge1xuICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlQ2FwdGlvbldpdGhQYWdpbmF0aW9uXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcInt0YWJsZUNhcHRpb259OyBQYWdlIHtwYWdlfSBvZiB7cGFnZUNvdW50fS5cIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICB0YWJsZUNhcHRpb246IHRhYmxlQ2FwdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICAgICAgcGFnZUNvdW50OiBwYWdlQ291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXB0aW9uRWxlbWVudCA9IHRhYmxlQ2FwdGlvbjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHBhZ2luYXRpb24pIHtcbiAgICAgICAgICBpZiAocGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUudGFibGVBdXRvQ2FwdGlvbldpdGhQYWdpbmF0aW9uXCIsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IFwiVGhpcyB0YWJsZSBjb250YWlucyB7aXRlbUNvdW50fSByb3dzIG91dCBvZiB7dG90YWxJdGVtQ291bnR9IHJvd3M7IFBhZ2Uge3BhZ2V9IG9mIHtwYWdlQ291bnR9LlwiLFxuICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICB0b3RhbEl0ZW1Db3VudDogdG90YWxJdGVtQ291bnQsXG4gICAgICAgICAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnQsXG4gICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICAgICAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS50YWJsZVNpbXBsZUF1dG9DYXB0aW9uV2l0aFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgICAgZGVmYXVsdDogXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3M7IFBhZ2Uge3BhZ2V9IG9mIHtwYWdlQ291bnR9LlwiLFxuICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudCxcbiAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXB0aW9uRWxlbWVudCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS50YWJsZUF1dG9DYXB0aW9uV2l0aG91dFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiVGhpcyB0YWJsZSBjb250YWlucyB7aXRlbUNvdW50fSByb3dzLlwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGl0ZW1Db3VudDogaXRlbUNvdW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJjYXB0aW9uXCIsIHtcbiAgICAgICAgY3NzOiBldWlUYWJsZUNhcHRpb25TdHlsZXMsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNhcHRpb25cIlxuICAgICAgfSwgdGFidWxhckNvcHlNYXJrZXJzLmhpZGRlbk5vQ29weUJvdW5kYXJ5LCBfX19FbW90aW9uSlNYKEV1aURlbGF5UmVuZGVyLCBudWxsLCBjYXB0aW9uRWxlbWVudCksIHRhYnVsYXJDb3B5TWFya2Vycy5oaWRkZW5Ob0NvcHlCb3VuZGFyeSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZUhlYWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyVGFibGVIZWFkKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNi5jb2x1bW5zLFxuICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczYuc2VsZWN0aW9uO1xuICAgICAgdmFyIGhlYWRlcnMgPSBbXTtcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3gsIHtcbiAgICAgICAgICBrZXk6IFwiX3NlbGVjdGlvbl9jb2x1bW5faFwiLFxuICAgICAgICAgIGFwcGVuZDogdGhpcy5yZW5kZXJDb3B5Q2hhcigtMSlcbiAgICAgICAgfSwgdGhpcy5yZW5kZXJTZWxlY3RBbGwoZmFsc2UpKSk7XG4gICAgICB9XG4gICAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbiwgaW5kZXgpIHtcbiAgICAgICAgdmFyIF9yZWY4ID0gY29sdW1uLFxuICAgICAgICAgIGZpZWxkID0gX3JlZjguZmllbGQsXG4gICAgICAgICAgd2lkdGggPSBfcmVmOC53aWR0aCxcbiAgICAgICAgICBuYW1lID0gX3JlZjgubmFtZSxcbiAgICAgICAgICBhbGlnbiA9IF9yZWY4LmFsaWduLFxuICAgICAgICAgIGRhdGFUeXBlID0gX3JlZjguZGF0YVR5cGUsXG4gICAgICAgICAgc29ydGFibGUgPSBfcmVmOC5zb3J0YWJsZSxcbiAgICAgICAgICBtb2JpbGVPcHRpb25zID0gX3JlZjgubW9iaWxlT3B0aW9ucyxcbiAgICAgICAgICByZWFkT25seSA9IF9yZWY4LnJlYWRPbmx5LFxuICAgICAgICAgIGRlc2NyaXB0aW9uID0gX3JlZjguZGVzY3JpcHRpb247XG4gICAgICAgIHZhciBjb2x1bW5BbGlnbiA9IGFsaWduIHx8IF90aGlzMy5nZXRBbGlnbkZvckRhdGFUeXBlKGRhdGFUeXBlKTtcbiAgICAgICAgdmFyIHNoYXJlZFByb3BzID0ge1xuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgbW9iaWxlT3B0aW9uczogbW9iaWxlT3B0aW9ucyxcbiAgICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgICAgYXBwZW5kOiBfdGhpczMucmVuZGVyQ29weUNoYXIoaW5kZXgpXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYWN0aW9ucyBjb2x1bW5cbiAgICAgICAgaWYgKGNvbHVtbi5hY3Rpb25zKSB7XG4gICAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsLCBfZXh0ZW5kcyh7fSwgc2hhcmVkUHJvcHMsIHtcbiAgICAgICAgICAgIGtleTogXCJfYWN0aW9uc19oX1wiLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgICBhbGlnbjogXCJyaWdodFwiXG4gICAgICAgICAgfSksIG5hbWUpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb21wdXRlZCBjb2x1bW5cbiAgICAgICAgaWYgKCFjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICB2YXIgX3NvcnRpbmcgPSB7fTtcbiAgICAgICAgICAvLyBjb21wdXRlZCBjb2x1bW5zIGFyZSBvbmx5IHNvcnRhYmxlIGlmIHRoZWlyIGBzb3J0YWJsZWAgaXMgYSBmdW5jdGlvblxuICAgICAgICAgIGlmIChfdGhpczMucHJvcHMuc29ydGluZyAmJiB0eXBlb2Ygc29ydGFibGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBzb3J0RGlyZWN0aW9uID0gX3RoaXMzLnJlc29sdmVDb2x1bW5Tb3J0RGlyZWN0aW9uKGNvbHVtbik7XG4gICAgICAgICAgICBfc29ydGluZy5pc1NvcnRlZCA9ICEhc29ydERpcmVjdGlvbjtcbiAgICAgICAgICAgIF9zb3J0aW5nLmlzU29ydEFzY2VuZGluZyA9IHNvcnREaXJlY3Rpb24gPyBTb3J0RGlyZWN0aW9uLmlzQXNjKHNvcnREaXJlY3Rpb24pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgX3NvcnRpbmcub25Tb3J0ID0gX3RoaXMzLnJlc29sdmVDb2x1bW5PblNvcnQoY29sdW1uKTtcbiAgICAgICAgICAgIF9zb3J0aW5nLnJlYWRPbmx5ID0gX3RoaXMzLnByb3BzLnNvcnRpbmcucmVhZE9ubHkgfHwgcmVhZE9ubHk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGhlYWRlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyQ2VsbCwgX2V4dGVuZHMoe30sIHNoYXJlZFByb3BzLCB7XG4gICAgICAgICAgICBrZXk6IFwiX2NvbXB1dGVkX2NvbHVtbl9oX1wiLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidGFibGVIZWFkZXJDZWxsX1wiLmNvbmNhdCh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgPyBuYW1lIDogJycsIFwiX1wiKS5jb25jYXQoaW5kZXgpXG4gICAgICAgICAgfSwgX3NvcnRpbmcpLCBuYW1lKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmllbGQgZGF0YSBjb2x1bW5cbiAgICAgICAgdmFyIHNvcnRpbmcgPSB7fTtcbiAgICAgICAgaWYgKF90aGlzMy5wcm9wcy5zb3J0aW5nKSB7XG4gICAgICAgICAgaWYgKF90aGlzMy5wcm9wcy5zb3J0aW5nLnNvcnQgJiYgISFfdGhpczMucHJvcHMuc29ydGluZy5lbmFibGVBbGxDb2x1bW5zICYmIGNvbHVtbi5zb3J0YWJsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb2x1bW4gPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNvbHVtbiksIHt9LCB7XG4gICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIF9yZWY5ID0gY29sdW1uLFxuICAgICAgICAgICAgX3NvcnRhYmxlID0gX3JlZjkuc29ydGFibGU7XG4gICAgICAgICAgaWYgKF9zb3J0YWJsZSkge1xuICAgICAgICAgICAgdmFyIF9zb3J0RGlyZWN0aW9uID0gX3RoaXMzLnJlc29sdmVDb2x1bW5Tb3J0RGlyZWN0aW9uKGNvbHVtbik7XG4gICAgICAgICAgICBzb3J0aW5nLmlzU29ydGVkID0gISFfc29ydERpcmVjdGlvbjtcbiAgICAgICAgICAgIHNvcnRpbmcuaXNTb3J0QXNjZW5kaW5nID0gX3NvcnREaXJlY3Rpb24gPyBTb3J0RGlyZWN0aW9uLmlzQXNjKF9zb3J0RGlyZWN0aW9uKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHNvcnRpbmcub25Tb3J0ID0gX3RoaXMzLnJlc29sdmVDb2x1bW5PblNvcnQoY29sdW1uKTtcbiAgICAgICAgICAgIHNvcnRpbmcucmVhZE9ubHkgPSBfdGhpczMucHJvcHMuc29ydGluZy5yZWFkT25seSB8fCByZWFkT25seTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsLCBfZXh0ZW5kcyh7fSwgc2hhcmVkUHJvcHMsIHtcbiAgICAgICAgICBrZXk6IFwiX2RhdGFfaF9cIi5jb25jYXQoU3RyaW5nKGZpZWxkKSwgXCJfXCIpLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyQ2VsbF9cIi5jb25jYXQoU3RyaW5nKGZpZWxkKSwgXCJfXCIpLmNvbmNhdChpbmRleClcbiAgICAgICAgfSwgc29ydGluZyksIG5hbWUpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXIsIG51bGwsIGhlYWRlcnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZUZvb3RlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUZvb3RlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSB0aGlzLnByb3BzLFxuICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzNy5pdGVtcyxcbiAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNy5jb2x1bW5zLFxuICAgICAgICBwYWdpbmF0aW9uID0gX3RoaXMkcHJvcHM3LnBhZ2luYXRpb24sXG4gICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzNy5zZWxlY3Rpb247XG4gICAgICB2YXIgZm9vdGVycyA9IFtdO1xuICAgICAgdmFyIGhhc0RlZmluZWRGb290ZXIgPSBmYWxzZTtcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFuIGVtcHR5IGNlbGwgdG8gY29tcGVuc2F0ZSBmb3IgYWRkaXRpb25hbCBzZWxlY3Rpb24gY29sdW1uXG4gICAgICAgIGZvb3RlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlRm9vdGVyQ2VsbCwge1xuICAgICAgICAgIGtleTogXCJfc2VsZWN0aW9uX2NvbHVtbl9mXCJcbiAgICAgICAgfSwgdW5kZWZpbmVkKSk7XG4gICAgICB9XG4gICAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICB2YXIgZm9vdGVyID0gZ2V0Q29sdW1uRm9vdGVyKGNvbHVtbiwge1xuICAgICAgICAgIGl0ZW1zOiBpdGVtcyxcbiAgICAgICAgICBwYWdpbmF0aW9uOiBwYWdpbmF0aW9uXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX3JlZjEwID0gY29sdW1uLFxuICAgICAgICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmMTAubW9iaWxlT3B0aW9ucyxcbiAgICAgICAgICBmaWVsZCA9IF9yZWYxMC5maWVsZCxcbiAgICAgICAgICBhbGlnbiA9IF9yZWYxMC5hbGlnbjtcbiAgICAgICAgaWYgKG1vYmlsZU9wdGlvbnMgIT09IG51bGwgJiYgbW9iaWxlT3B0aW9ucyAhPT0gdm9pZCAwICYmIG1vYmlsZU9wdGlvbnMub25seSkge1xuICAgICAgICAgIHJldHVybjsgLy8gZXhjbHVkZSBjb2x1bW5zIHRoYXQgb25seSBleGlzdCBmb3IgbW9iaWxlIGhlYWRlcnNcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9vdGVyKSB7XG4gICAgICAgICAgZm9vdGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVGb290ZXJDZWxsLCB7XG4gICAgICAgICAgICBrZXk6IFwiZm9vdGVyX1wiLmNvbmNhdChTdHJpbmcoZmllbGQpLCBcIl9cIikuY29uY2F0KGZvb3RlcnMubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICBhbGlnbjogYWxpZ25cbiAgICAgICAgICB9LCBmb290ZXIpKTtcbiAgICAgICAgICBoYXNEZWZpbmVkRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb290ZXIgaXMgdW5kZWZpbmVkLCBzbyBjcmVhdGUgYW4gZW1wdHkgY2VsbCB0byBwcmVzZXJ2ZSBsYXlvdXRcbiAgICAgICAgICBmb290ZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUZvb3RlckNlbGwsIHtcbiAgICAgICAgICAgIGtleTogXCJmb290ZXJfZW1wdHlfXCIuY29uY2F0KGZvb3RlcnMubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICBhbGlnbjogYWxpZ25cbiAgICAgICAgICB9LCB1bmRlZmluZWQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZm9vdGVycy5sZW5ndGggJiYgaGFzRGVmaW5lZEZvb3RlciA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVGb290ZXIsIG51bGwsIGZvb3RlcnMpIDogbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVCb2R5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlQm9keSgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzOCA9IHRoaXMucHJvcHMsXG4gICAgICAgIGVycm9yID0gX3RoaXMkcHJvcHM4LmVycm9yLFxuICAgICAgICBsb2FkaW5nID0gX3RoaXMkcHJvcHM4LmxvYWRpbmcsXG4gICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHM4Lml0ZW1zO1xuICAgICAgdmFyIGNvbnRlbnQ7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29udGVudCA9IHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRlbnQgPSB0aGlzLnJlbmRlckVtcHR5TWVzc2FnZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGVudCA9IGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICAvLyBpZiB0aGVyZSdzIHBhZ2luYXRpb24gdGhlIGl0ZW0ncyBpbmRleCBtdXN0IGJlIGFkanVzdGVkIHRvIHRoZSB3aGVyZSBpdCBpcyBpbiB0aGUgd2hvbGUgZGF0YXNldFxuICAgICAgICAgIHZhciB0YWJsZUl0ZW1JbmRleCA9IGhhc1BhZ2luYXRpb24oX3RoaXM0LnByb3BzKSAmJiBfdGhpczQucGFnZVNpemUgPiAwID8gX3RoaXM0LnByb3BzLnBhZ2luYXRpb24ucGFnZUluZGV4ICogX3RoaXM0LnBhZ2VTaXplICsgaW5kZXggOiBpbmRleDtcbiAgICAgICAgICByZXR1cm4gX3RoaXM0LnJlbmRlckl0ZW1Sb3coaXRlbSwgdGFibGVJdGVtSW5kZXgsIGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZW5kZXJXaXRoRXVpVGhlbWUsIG51bGwsIGZ1bmN0aW9uICh0aGVtZSkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZUJvZHksIHtcbiAgICAgICAgICBjc3M6IGxvYWRpbmcgJiYgZXVpQmFzaWNUYWJsZUJvZHlMb2FkaW5nKHRoZW1lKVxuICAgICAgICB9LCBjb250ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJFcnJvck1lc3NhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyRXJyb3JNZXNzYWdlKGVycm9yKSB7XG4gICAgICB2YXIgY29sU3BhbiA9IHRoaXMucHJvcHMuY29sdW1ucy5sZW5ndGggKyAodGhpcy5wcm9wcy5zZWxlY3Rpb24gPyAxIDogMCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvdywgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIHtcbiAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGNvbFNwYW46IGNvbFNwYW4sXG4gICAgICAgIG1vYmlsZU9wdGlvbnM6IHtcbiAgICAgICAgICB3aWR0aDogJzEwMCUnXG4gICAgICAgIH1cbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICB0eXBlOiBcIm1pbnVzSW5DaXJjbGVcIixcbiAgICAgICAgY29sb3I6IFwiZGFuZ2VyXCJcbiAgICAgIH0pLCBcIiBcIiwgZXJyb3IpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRW1wdHlNZXNzYWdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckVtcHR5TWVzc2FnZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHM5LmNvbHVtbnMsXG4gICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzOS5zZWxlY3Rpb24sXG4gICAgICAgIG5vSXRlbXNNZXNzYWdlID0gX3RoaXMkcHJvcHM5Lm5vSXRlbXNNZXNzYWdlO1xuICAgICAgdmFyIGNvbFNwYW4gPSBjb2x1bW5zLmxlbmd0aCArIChzZWxlY3Rpb24gPyAxIDogMCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvdywgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIHtcbiAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGNvbFNwYW46IGNvbFNwYW4sXG4gICAgICAgIG1vYmlsZU9wdGlvbnM6IHtcbiAgICAgICAgICB3aWR0aDogJzEwMCUnXG4gICAgICAgIH1cbiAgICAgIH0sIG5vSXRlbXNNZXNzYWdlKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1Sb3dcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbVJvdyhpdGVtLCByb3dJbmRleCwgZGlzcGxheWVkUm93SW5kZXgpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTAgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHMxMC5jb2x1bW5zLFxuICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczEwLnNlbGVjdGlvbixcbiAgICAgICAgcm93SGVhZGVyID0gX3RoaXMkcHJvcHMxMC5yb3dIZWFkZXIsXG4gICAgICAgIGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXAgPSBfdGhpcyRwcm9wczEwLml0ZW1JZFRvRXhwYW5kZWRSb3dNYXA7XG4gICAgICB2YXIgY2VsbHMgPSBbXTtcbiAgICAgIHZhciBpdGVtSWRDYWxsYmFjayA9IHRoaXMucHJvcHMuaXRlbUlkO1xuICAgICAgdmFyIGl0ZW1JZCA9IGdldEl0ZW1JZChpdGVtLCBpdGVtSWRDYWxsYmFjaykgIT0gbnVsbCA/IGdldEl0ZW1JZChpdGVtLCBpdGVtSWRDYWxsYmFjaykgOiByb3dJbmRleDtcbiAgICAgIHZhciBzZWxlY3RlZCA9ICFzZWxlY3Rpb24gPyBmYWxzZSA6IHRoaXMuc3RhdGUuc2VsZWN0aW9uICYmICEhdGhpcy5zdGF0ZS5zZWxlY3Rpb24uZmluZChmdW5jdGlvbiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgIHJldHVybiBnZXRJdGVtSWQoc2VsZWN0ZWRJdGVtLCBpdGVtSWRDYWxsYmFjaykgPT09IGl0ZW1JZDtcbiAgICAgIH0pO1xuICAgICAgdmFyIHJvd1NlbGVjdGlvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyRyZW5kZXJJdGVtU2VsZWMgPSB0aGlzLnJlbmRlckl0ZW1TZWxlY3Rpb25DZWxsKGl0ZW1JZCwgaXRlbSwgc2VsZWN0ZWQsIGRpc3BsYXllZFJvd0luZGV4KSxcbiAgICAgICAgICBfdGhpcyRyZW5kZXJJdGVtU2VsZWMyID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkcmVuZGVySXRlbVNlbGVjLCAyKSxcbiAgICAgICAgICBjaGVja2JveENlbGwgPSBfdGhpcyRyZW5kZXJJdGVtU2VsZWMyWzBdLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRyZW5kZXJJdGVtU2VsZWMyWzFdO1xuICAgICAgICBjZWxscy5wdXNoKGNoZWNrYm94Q2VsbCk7XG4gICAgICAgIHJvd1NlbGVjdGlvbkRpc2FibGVkID0gISFpc0Rpc2FibGVkO1xuICAgICAgfVxuICAgICAgdmFyIGhhc0FjdGlvbnMgPSBmYWxzZTtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uLCBjb2x1bW5JbmRleCkge1xuICAgICAgICB2YXIgY29sdW1uQWN0aW9ucyA9IGNvbHVtbi5hY3Rpb25zO1xuICAgICAgICBpZiAoY29sdW1uQWN0aW9ucykge1xuICAgICAgICAgIHZhciBoYXNDdXN0b21BY3Rpb25zID0gY29sdW1uQWN0aW9ucy5zb21lKGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiAhIWFjdGlvbi5yZW5kZXI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2VsbHMucHVzaChfdGhpczUucmVuZGVySXRlbUFjdGlvbnNDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCwgcm93SW5kZXgsIGhhc0N1c3RvbUFjdGlvbnMpKTtcbiAgICAgICAgICAvLyBBIHRhYmxlIHRoZW9yZXRpY2FsbHkgY291bGQgaGF2ZSBib3RoIGN1c3RvbSBhbmQgZGVmYXVsdCBhY3Rpb24gaXRlbXNcbiAgICAgICAgICAvLyBJZiBpdCBoYXMgYm90aCwgZGVmYXVsdCBhY3Rpb24gbW9iaWxlIHJvdyBzdHlsZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgY3VzdG9tXG4gICAgICAgICAgaGFzQWN0aW9ucyA9ICFoYXNBY3Rpb25zICYmIGhhc0N1c3RvbUFjdGlvbnMgPyAnY3VzdG9tJyA6IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgdmFyIGZpZWxkRGF0YUNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgICBjZWxscy5wdXNoKF90aGlzNS5yZW5kZXJJdGVtRmllbGREYXRhQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIGZpZWxkRGF0YUNvbHVtbi5maWVsZCA9PT0gcm93SGVhZGVyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2VsbHMucHVzaChfdGhpczUucmVuZGVySXRlbUNvbXB1dGVkQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIE9jY3VweSBmdWxsIHdpZHRoIG9mIHRhYmxlLCB0YWtpbmcgY2hlY2tib3ggJiBtb2JpbGUgb25seSBjb2x1bW5zIGludG8gYWNjb3VudC5cbiAgICAgIHZhciBleHBhbmRlZFJvd0NvbFNwYW4gPSBzZWxlY3Rpb24gPyBjb2x1bW5zLmxlbmd0aCArIDEgOiBjb2x1bW5zLmxlbmd0aDtcbiAgICAgIHZhciBtb2JpbGVPbmx5Q29scyA9IGNvbHVtbnMucmVkdWNlKGZ1bmN0aW9uIChudW0sIGNvbHVtbikge1xuICAgICAgICB2YXIgX21vYmlsZU9wdGlvbnM7XG4gICAgICAgIHJldHVybiBjb2x1bW4gIT09IG51bGwgJiYgY29sdW1uICE9PSB2b2lkIDAgJiYgKF9tb2JpbGVPcHRpb25zID0gY29sdW1uLm1vYmlsZU9wdGlvbnMpICE9PSBudWxsICYmIF9tb2JpbGVPcHRpb25zICE9PSB2b2lkIDAgJiYgX21vYmlsZU9wdGlvbnMub25seSA/IG51bSArIDEgOiBudW0gKyAwOyAvLyBCV0Mgb25seVxuICAgICAgfSwgMCk7XG4gICAgICBleHBhbmRlZFJvd0NvbFNwYW4gPSBleHBhbmRlZFJvd0NvbFNwYW4gLSBtb2JpbGVPbmx5Q29scztcblxuICAgICAgLy8gV2UnbGwgdXNlIHRoZSBJRCB0byBhc3NvY2lhdGUgdGhlIGV4cGFuZGVkIHJvdyB3aXRoIHRoZSBvcmlnaW5hbC5cbiAgICAgIHZhciBoYXNFeHBhbmRlZFJvdyA9IGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXAgPT09IG51bGwgfHwgaXRlbUlkVG9FeHBhbmRlZFJvd01hcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaXRlbUlkVG9FeHBhbmRlZFJvd01hcC5oYXNPd25Qcm9wZXJ0eShpdGVtSWQpO1xuICAgICAgdmFyIGV4cGFuZGVkUm93SWQgPSBoYXNFeHBhbmRlZFJvdyA/IFwicm93X1wiLmNvbmNhdChpdGVtSWQsIFwiX2V4cGFuc2lvblwiKSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBleHBhbmRlZFJvdyA9IGhhc0V4cGFuZGVkUm93ID8gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvdywge1xuICAgICAgICBpZDogZXhwYW5kZWRSb3dJZCxcbiAgICAgICAgaXNFeHBhbmRlZFJvdzogdHJ1ZSxcbiAgICAgICAgaGFzU2VsZWN0aW9uOiAhIXNlbGVjdGlvblxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIHtcbiAgICAgICAgY29sU3BhbjogZXhwYW5kZWRSb3dDb2xTcGFuLFxuICAgICAgICB0ZXh0T25seTogZmFsc2UsXG4gICAgICAgIGFwcGVuZDogdGFidWxhckNvcHlNYXJrZXJzLmhpZGRlbk5ld2xpbmVcbiAgICAgIH0sIGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXBbaXRlbUlkXSkpIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIHJvd1Byb3BzQ2FsbGJhY2sgPSB0aGlzLnByb3BzLnJvd1Byb3BzO1xuICAgICAgdmFyIHJvd1Byb3BzID0gZ2V0Um93UHJvcHMoaXRlbSwgcm93UHJvcHNDYWxsYmFjayk7XG4gICAgICB2YXIgcm93ID0gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvdywgX2V4dGVuZHMoe1xuICAgICAgICBcImFyaWEtb3duc1wiOiBleHBhbmRlZFJvd0lkLFxuICAgICAgICBoYXNTZWxlY3Rpb246ICEhc2VsZWN0aW9uLFxuICAgICAgICBpc1NlbGVjdGFibGU6ICFyb3dTZWxlY3Rpb25EaXNhYmxlZCxcbiAgICAgICAgaXNTZWxlY3RlZDogc2VsZWN0ZWQsXG4gICAgICAgIGhhc0FjdGlvbnM6IGhhc0FjdGlvbnMsXG4gICAgICAgIGlzRXhwYW5kYWJsZTogaGFzRXhwYW5kZWRSb3dcbiAgICAgIH0sIHJvd1Byb3BzKSwgY2VsbHMpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIHtcbiAgICAgICAga2V5OiBcInJvd19cIi5jb25jYXQoaXRlbUlkKVxuICAgICAgfSwgcm93LCBleHBhbmRlZFJvdyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1TZWxlY3Rpb25DZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1TZWxlY3Rpb25DZWxsKGl0ZW1JZCwgaXRlbSwgc2VsZWN0ZWQsIGRpc3BsYXllZFJvd0luZGV4KSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcbiAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnByb3BzLnNlbGVjdGlvbjtcbiAgICAgIHZhciBrZXkgPSBcIl9zZWxlY3Rpb25fY29sdW1uX1wiLmNvbmNhdChpdGVtSWQpO1xuICAgICAgdmFyIGNoZWNrZWQgPSBzZWxlY3RlZDtcbiAgICAgIHZhciBkaXNhYmxlZCA9IHNlbGVjdGlvbi5zZWxlY3RhYmxlICYmICFzZWxlY3Rpb24uc2VsZWN0YWJsZShpdGVtKTtcbiAgICAgIHZhciB0aXRsZSA9IHNlbGVjdGlvbi5zZWxlY3RhYmxlTWVzc2FnZSAmJiBzZWxlY3Rpb24uc2VsZWN0YWJsZU1lc3NhZ2UoIWRpc2FibGVkLCBpdGVtKTtcbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgIF90aGlzNi5jaGFuZ2VTZWxlY3Rpb24oW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShfdGhpczYuc3RhdGUuc2VsZWN0aW9uKSwgW2l0ZW1dKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGl0ZW1JZENhbGxiYWNrID0gX3RoaXM2LnByb3BzLml0ZW1JZDtcbiAgICAgICAgICBfdGhpczYuY2hhbmdlU2VsZWN0aW9uKF90aGlzNi5zdGF0ZS5zZWxlY3Rpb24ucmVkdWNlKGZ1bmN0aW9uIChzZWxlY3Rpb24sIHNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgaWYgKGdldEl0ZW1JZChzZWxlY3RlZEl0ZW0sIGl0ZW1JZENhbGxiYWNrKSAhPT0gaXRlbUlkKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGlvbi5wdXNoKHNlbGVjdGVkSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uO1xuICAgICAgICAgIH0sIFtdKSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gW19fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsQ2hlY2tib3gsIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGFwcGVuZDogdGhpcy5yZW5kZXJDb3B5Q2hhcigtMSlcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnNlbGVjdFRoaXNSb3dcIixcbiAgICAgICAgZGVmYXVsdDogXCJTZWxlY3Qgcm93IHtpbmRleH1cIixcbiAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgaW5kZXg6IGRpc3BsYXllZFJvd0luZGV4ICsgMVxuICAgICAgICB9XG4gICAgICB9LCBmdW5jdGlvbiAoc2VsZWN0VGhpc1Jvdykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDaGVja2JveCwge1xuICAgICAgICAgIGlkOiBcIlwiLmNvbmNhdChfdGhpczYudGFibGVJZCkuY29uY2F0KGtleSwgXCItY2hlY2tib3hcIiksXG4gICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgIGNoZWNrZWQ6IGNoZWNrZWQsXG4gICAgICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgICAgICAgIHRpdGxlOiB0aXRsZSB8fCBzZWxlY3RUaGlzUm93LFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiB0aXRsZSB8fCBzZWxlY3RUaGlzUm93LFxuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjaGVja2JveFNlbGVjdFJvdy1cIi5jb25jYXQoaXRlbUlkKVxuICAgICAgICB9KTtcbiAgICAgIH0pKSwgZGlzYWJsZWRdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQWN0aW9uc0NlbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbUFjdGlvbnNDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCwgcm93SW5kZXgsIGhhc0N1c3RvbUFjdGlvbnMpIHtcbiAgICAgIC8vIERpc2FibGUgYWxsIGFjdGlvbnMgaWYgYW55IHJvdyhzKSBhcmUgc2VsZWN0ZWRcbiAgICAgIHZhciBhbGxEaXNhYmxlZCA9IHRoaXMuc3RhdGUuc2VsZWN0aW9uLmxlbmd0aCA+IDA7XG4gICAgICB2YXIgYWN0dWFsQWN0aW9ucyA9IGNvbHVtbi5hY3Rpb25zLmZpbHRlcihmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiAhYWN0aW9uLmF2YWlsYWJsZSB8fCBhY3Rpb24uYXZhaWxhYmxlKGl0ZW0pO1xuICAgICAgfSk7XG4gICAgICBpZiAoYWN0dWFsQWN0aW9ucy5sZW5ndGggPiAyKSB7XG4gICAgICAgIGlmIChhbGxEaXNhYmxlZCkge1xuICAgICAgICAgIC8vIElmIGFsbCBhY3Rpb25zIGFyZSBkaXNhYmxlZCwgZG8gbm90IHNob3cgYW55IGFjdGlvbnMgYnV0IHRoZSBwb3BvdmVyIHRvZ2dsZVxuICAgICAgICAgIGFjdHVhbEFjdGlvbnMgPSBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpZiBhbnkgb2YgdGhlIGFjdGlvbnMgYGlzUHJpbWFyeWAsIGFkZCB0aGVtIGlubGluZSBhcyB3ZWxsLCBidXQgb25seSB0aGUgZmlyc3QgMixcbiAgICAgICAgICAvLyB3aGljaCB3ZSdsbCBmb3JjZSB0byBvbmx5IHNob3cgb24gaG92ZXIgZm9yIGRlc2t0b3Agdmlld3NcbiAgICAgICAgICB2YXIgcHJpbWFyeUFjdGlvbnMgPSBhY3R1YWxBY3Rpb25zLmZpbHRlcihmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLmlzUHJpbWFyeTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhY3R1YWxBY3Rpb25zID0gcHJpbWFyeUFjdGlvbnMuc2xpY2UoMCwgMikubWFwKGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFjdGlvbiksIHt9LCB7XG4gICAgICAgICAgICAgIHNob3dPbkhvdmVyOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgbW9yZSB0aGFuIDEgYWN0aW9uLCB3ZSBkb24ndCBzaG93IHRoZW0gYWxsIGluIHRoZSBjZWxsLCBpbnN0ZWFkIHdlXG4gICAgICAgIC8vIHB1dCB0aGVtIGFsbCBpbiBhIHBvcG92ZXIgdG9vbC4gVGhpcyBlZmZlY3RpdmVseSBtZWFucyB3ZSBjYW4gb25seSBoYXZlIGEgbWF4aW11bVxuICAgICAgICAvLyBvZiBvbmUgdG9vbCBwZXIgcm93IChpdCdzIGVpdGhlciBhbmQgbm9ybWFsIGFjdGlvbiwgb3IgaXQncyBhIHBvcG92ZXIgdGhhdCBzaG93cyBtdWx0aXBsZSBhY3Rpb25zKVxuICAgICAgICAvL1xuICAgICAgICAvLyBoZXJlIHdlIGNyZWF0ZSBhIHNpbmdsZSBjdXN0b20gYWN0aW9uIHRoYXQgdHJpZ2dlcnMgdGhlIHBvcG92ZXIgd2l0aCBhbGwgdGhlIGNvbmZpZ3VyZWQgYWN0aW9uc1xuXG4gICAgICAgIGFjdHVhbEFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgbmFtZTogJ0FsbCBhY3Rpb25zJyxcbiAgICAgICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChDb2xsYXBzZWRJdGVtQWN0aW9ucywge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFzaWNUYWJsZV9fY29sbGFwc2VkQWN0aW9uc1wiLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBjb2x1bW4uYWN0aW9ucyxcbiAgICAgICAgICAgICAgYWN0aW9uc0Rpc2FibGVkOiBhbGxEaXNhYmxlZCxcbiAgICAgICAgICAgICAgaXRlbUlkOiBpdGVtSWQsXG4gICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgIGRpc3BsYXllZFJvd0luZGV4OiByb3dJbmRleFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHZhciBrZXkgPSBcInJlY29yZF9hY3Rpb25zX1wiLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoY29sdW1uSW5kZXgpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsLCB7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBhbGlnbjogXCJyaWdodFwiLFxuICAgICAgICB0ZXh0T25seTogZmFsc2UsXG4gICAgICAgIGhhc0FjdGlvbnM6IGhhc0N1c3RvbUFjdGlvbnMgPyAnY3VzdG9tJyA6IHRydWUsXG4gICAgICAgIGFwcGVuZDogdGhpcy5yZW5kZXJDb3B5Q2hhcihjb2x1bW5JbmRleClcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXhwYW5kZWRJdGVtQWN0aW9ucywge1xuICAgICAgICBhY3Rpb25zOiBhY3R1YWxBY3Rpb25zLFxuICAgICAgICBhY3Rpb25zRGlzYWJsZWQ6IGFsbERpc2FibGVkLFxuICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgaXRlbTogaXRlbVxuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtRmllbGREYXRhQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtRmllbGREYXRhQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIHNldFNjb3BlUm93KSB7XG4gICAgICB2YXIgZmllbGQgPSBjb2x1bW4uZmllbGQsXG4gICAgICAgIHJlbmRlciA9IGNvbHVtbi5yZW5kZXIsXG4gICAgICAgIGRhdGFUeXBlID0gY29sdW1uLmRhdGFUeXBlO1xuICAgICAgdmFyIGtleSA9IFwiX2RhdGFfY29sdW1uX1wiLmNvbmNhdChTdHJpbmcoZmllbGQpLCBcIl9cIikuY29uY2F0KGl0ZW1JZCwgXCJfXCIpLmNvbmNhdChjb2x1bW5JbmRleCk7XG4gICAgICB2YXIgY29udGVudFJlbmRlcmVyID0gcmVuZGVyIHx8IHRoaXMuZ2V0UmVuZGVyZXJGb3JEYXRhVHlwZShkYXRhVHlwZSk7XG4gICAgICB2YXIgdmFsdWUgPSBnZXQoaXRlbSwgZmllbGQpO1xuICAgICAgdmFyIGNvbnRlbnQgPSBjb250ZW50UmVuZGVyZXIodmFsdWUsIGl0ZW0pO1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVySXRlbUNlbGwoaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCwga2V5LCBjb250ZW50LCBzZXRTY29wZVJvdyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1Db21wdXRlZENlbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbUNvbXB1dGVkQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgpIHtcbiAgICAgIHZhciByZW5kZXIgPSBjb2x1bW4ucmVuZGVyO1xuICAgICAgdmFyIGtleSA9IFwiX2NvbXB1dGVkX2NvbHVtbl9cIi5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGNvbHVtbkluZGV4KTtcbiAgICAgIHZhciBjb250ZW50UmVuZGVyZXIgPSByZW5kZXIgfHwgdGhpcy5nZXRSZW5kZXJlckZvckRhdGFUeXBlKCk7XG4gICAgICB2YXIgY29udGVudCA9IGNvbnRlbnRSZW5kZXJlcihpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckl0ZW1DZWxsKGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIGtleSwgY29udGVudCwgZmFsc2UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4LCBrZXksIGNvbnRlbnQsIHNldFNjb3BlUm93KSB7XG4gICAgICB2YXIgX21vYmlsZU9wdGlvbnMkcmVuZGVyLCBfbW9iaWxlT3B0aW9ucyRoZWFkZXI7XG4gICAgICB2YXIgX3JlZjExID0gY29sdW1uLFxuICAgICAgICBhbGlnbiA9IF9yZWYxMS5hbGlnbixcbiAgICAgICAgcmVuZGVyID0gX3JlZjExLnJlbmRlcixcbiAgICAgICAgZGF0YVR5cGUgPSBfcmVmMTEuZGF0YVR5cGUsXG4gICAgICAgIGlzRXhwYW5kZXIgPSBfcmVmMTEuaXNFeHBhbmRlcixcbiAgICAgICAgdGV4dE9ubHkgPSBfcmVmMTEudGV4dE9ubHksXG4gICAgICAgIG5hbWUgPSBfcmVmMTEubmFtZSxcbiAgICAgICAgZmllbGQgPSBfcmVmMTEuZmllbGQsXG4gICAgICAgIGRlc2NyaXB0aW9uID0gX3JlZjExLmRlc2NyaXB0aW9uLFxuICAgICAgICBzb3J0YWJsZSA9IF9yZWYxMS5zb3J0YWJsZSxcbiAgICAgICAgZm9vdGVyID0gX3JlZjExLmZvb3RlcixcbiAgICAgICAgbW9iaWxlT3B0aW9ucyA9IF9yZWYxMS5tb2JpbGVPcHRpb25zLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYxMSwgX2V4Y2x1ZGVkMik7XG4gICAgICB2YXIgY29sdW1uQWxpZ24gPSBhbGlnbiB8fCB0aGlzLmdldEFsaWduRm9yRGF0YVR5cGUoZGF0YVR5cGUpO1xuICAgICAgdmFyIGNlbGxQcm9wc0NhbGxiYWNrID0gdGhpcy5wcm9wcy5jZWxsUHJvcHM7XG4gICAgICB2YXIgY2VsbFByb3BzID0gZ2V0Q2VsbFByb3BzKGl0ZW0sIGNvbHVtbiwgY2VsbFByb3BzQ2FsbGJhY2spO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgIGlzRXhwYW5kZXI6IGlzRXhwYW5kZXIsXG4gICAgICAgIHRleHRPbmx5OiB0ZXh0T25seSB8fCAhcmVuZGVyLFxuICAgICAgICBzZXRTY29wZVJvdzogc2V0U2NvcGVSb3csXG4gICAgICAgIG1vYmlsZU9wdGlvbnM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbW9iaWxlT3B0aW9ucyksIHt9LCB7XG4gICAgICAgICAgcmVuZGVyOiBtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCB8fCAoX21vYmlsZU9wdGlvbnMkcmVuZGVyID0gbW9iaWxlT3B0aW9ucy5yZW5kZXIpID09PSBudWxsIHx8IF9tb2JpbGVPcHRpb25zJHJlbmRlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogX21vYmlsZU9wdGlvbnMkcmVuZGVyLmNhbGwobW9iaWxlT3B0aW9ucywgaXRlbSksXG4gICAgICAgICAgaGVhZGVyOiAoX21vYmlsZU9wdGlvbnMkaGVhZGVyID0gbW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLmhlYWRlcikgIT09IG51bGwgJiYgX21vYmlsZU9wdGlvbnMkaGVhZGVyICE9PSB2b2lkIDAgPyBfbW9iaWxlT3B0aW9ucyRoZWFkZXIgOiBuYW1lXG4gICAgICAgIH0pXG4gICAgICB9LCBjZWxsUHJvcHMsIHJlc3QsIHtcbiAgICAgICAgYXBwZW5kOiB0aGlzLnJlbmRlckNvcHlDaGFyKGNvbHVtbkluZGV4KVxuICAgICAgfSksIGNvbnRlbnQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZW5kZXJlckZvckRhdGFUeXBlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVyRm9yRGF0YVR5cGUoKSB7XG4gICAgICB2YXIgZGF0YVR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdhdXRvJztcbiAgICAgIHZhciBwcm9maWxlID0gZGF0YVR5cGVzUHJvZmlsZXNbZGF0YVR5cGVdO1xuICAgICAgaWYgKCFwcm9maWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZGF0YVR5cGUgW1wiLmNvbmNhdChkYXRhVHlwZSwgXCJdLiBUaGUgc3VwcG9ydGVkIGRhdGEgdHlwZXMgYXJlIFtcIikuY29uY2F0KERBVEFfVFlQRVMuam9pbignLCAnKSwgXCJdXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9maWxlLnJlbmRlcjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0QWxpZ25Gb3JEYXRhVHlwZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBbGlnbkZvckRhdGFUeXBlKCkge1xuICAgICAgdmFyIGRhdGFUeXBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnYXV0byc7XG4gICAgICB2YXIgcHJvZmlsZSA9IGRhdGFUeXBlc1Byb2ZpbGVzW2RhdGFUeXBlXTtcbiAgICAgIGlmICghcHJvZmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlIFtcIi5jb25jYXQoZGF0YVR5cGUsIFwiXS4gVGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzIGFyZSBbXCIpLmNvbmNhdChEQVRBX1RZUEVTLmpvaW4oJywgJyksIFwiXVwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZmlsZS5hbGlnbjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyUGFnaW5hdGlvbkJhclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJQYWdpbmF0aW9uQmFyKCkge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGVycm9yID0gX3RoaXMkcHJvcHMxMS5lcnJvcixcbiAgICAgICAgcGFnaW5hdGlvbiA9IF90aGlzJHByb3BzMTEucGFnaW5hdGlvbixcbiAgICAgICAgdGFibGVDYXB0aW9uID0gX3RoaXMkcHJvcHMxMS50YWJsZUNhcHRpb24sXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMxMS5vbkNoYW5nZTtcbiAgICAgIGlmICghZXJyb3IgJiYgcGFnaW5hdGlvbiAmJiBwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50ID4gMCkge1xuICAgICAgICBpZiAoIW9uQ2hhbmdlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIEJhc2ljIFRhYmxlIGlzIGNvbmZpZ3VyZWQgd2l0aCBwYWdpbmF0aW9uIGJ1dCBbb25DaGFuZ2VdIGlzXFxuICAgICAgICBub3QgY29uZmlndXJlZC4gVGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkIHRvIGhhbmRsZSBwYWdpbmF0aW9uIGNoYW5nZXNcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUudGFibGVQYWdpbmF0aW9uXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJQYWdpbmF0aW9uIGZvciB0YWJsZToge3RhYmxlQ2FwdGlvbn1cIixcbiAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgIHRhYmxlQ2FwdGlvbjogdGFibGVDYXB0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAodGFibGVQYWdpbmF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJhciwge1xuICAgICAgICAgICAgcGFnaW5hdGlvbjogcGFnaW5hdGlvbixcbiAgICAgICAgICAgIG9uUGFnZVNpemVDaGFuZ2U6IF90aGlzNy5vblBhZ2VTaXplQ2hhbmdlLmJpbmQoX3RoaXM3KSxcbiAgICAgICAgICAgIG9uUGFnZUNoYW5nZTogX3RoaXM3Lm9uUGFnZUNoYW5nZS5iaW5kKF90aGlzNyksXG4gICAgICAgICAgICBcImFyaWEtY29udHJvbHNcIjogX3RoaXM3LnRhYmxlSWQsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogdGFibGVQYWdpbmF0aW9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIGlmICghbmV4dFByb3BzLnNlbGVjdGlvbikge1xuICAgICAgICAvLyBuZXh0IHByb3BzIGRvZXNuJ3QgaGF2ZSBhIHNlbGVjdGlvbiwgcmVzZXQgb3VyIHN0YXRlXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2VsZWN0aW9uOiBbXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIGNvbnRyb2xsZWRTZWxlY3Rpb24gPSBuZXh0UHJvcHMuc2VsZWN0aW9uLnNlbGVjdGVkO1xuICAgICAgdmFyIHVuZmlsdGVyZWRTZWxlY3Rpb24gPSBjb250cm9sbGVkU2VsZWN0aW9uICE9PSBudWxsICYmIGNvbnRyb2xsZWRTZWxlY3Rpb24gIT09IHZvaWQgMCA/IGNvbnRyb2xsZWRTZWxlY3Rpb24gOiBwcmV2U3RhdGUuc2VsZWN0aW9uO1xuXG4gICAgICAvLyBFbnN1cmUgd2UncmUgbm90IGluY2x1ZGluZyBzZWxlY3Rpb25zIHRoYXQgYXJlbid0IGluIHRoZVxuICAgICAgLy8gY3VycmVudCBgaXRlbXNgIGFycmF5IChhZmZlY3RlZCBieSBwYWdpbmF0aW9uKVxuICAgICAgdmFyIGl0ZW1JZCA9IG5leHRQcm9wcy5pdGVtSWQsXG4gICAgICAgIGl0ZW1zID0gbmV4dFByb3BzLml0ZW1zO1xuICAgICAgdmFyIHNlbGVjdGlvbiA9IHVuZmlsdGVyZWRTZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uIChzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbmRJbmRleChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBnZXRJdGVtSWQoaXRlbSwgaXRlbUlkKSA9PT0gZ2V0SXRlbUlkKHNlbGVjdGVkSXRlbSwgaXRlbUlkKTtcbiAgICAgICAgfSkgIT09IC0xO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIHNvbWUgc2VsZWN0ZWQgaXRlbXMgd2VyZSBmaWx0ZXJlZCBvdXQsIHVwZGF0ZSBzdGF0ZSBhbmQgY2FsbGJhY2tcbiAgICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoICE9PSB1bmZpbHRlcmVkU2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICB2YXIgX25leHRQcm9wcyRzZWxlY3Rpb24kLCBfbmV4dFByb3BzJHNlbGVjdGlvbjtcbiAgICAgICAgKF9uZXh0UHJvcHMkc2VsZWN0aW9uJCA9IChfbmV4dFByb3BzJHNlbGVjdGlvbiA9IG5leHRQcm9wcy5zZWxlY3Rpb24pLm9uU2VsZWN0aW9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfbmV4dFByb3BzJHNlbGVjdGlvbiQgPT09IHZvaWQgMCB8fCBfbmV4dFByb3BzJHNlbGVjdGlvbiQuY2FsbChfbmV4dFByb3BzJHNlbGVjdGlvbiwgc2VsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZWxlY3Rpb246IHNlbGVjdGlvblxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBBbHdheXMgdXBkYXRlIHNlbGVjdGlvbiBzdGF0ZSBmcm9tIHByb3BzIGlmIGNvbnRyb2xsZWRcbiAgICAgIGlmIChjb250cm9sbGVkU2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb25cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aUJhc2ljVGFibGUsIFwiY29udGV4dFR5cGVcIiwgRXVpQ29tcG9uZW50RGVmYXVsdHNDb250ZXh0KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlCYXNpY1RhYmxlLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHRhYmxlTGF5b3V0OiAnZml4ZWQnLFxuICBub0l0ZW1zTWVzc2FnZTogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS5ub0l0ZW1zTWVzc2FnZVwiLFxuICAgIGRlZmF1bHQ6IFwiTm8gaXRlbXMgZm91bmRcIlxuICB9KVxufSk7XG5FdWlCYXNpY1RhYmxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyBob3cgdG8gZXh0cmFjdCBhIHVuaXF1ZSBJRCBmcm9tIGVhY2ggaXRlbSwgdXNlZCBmb3Igc2VsZWN0aW9ucyAmIGV4cGFuZGVkIHJvd3NcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRGVzY3JpYmVzIGhvdyB0byBleHRyYWN0IGEgdW5pcXVlIElEIGZyb20gZWFjaCBpdGVtLCB1c2VkIGZvciBzZWxlY3Rpb25zICYgZXhwYW5kZWQgcm93c1xuICAgICAqL1xuICBpdGVtSWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIFJvdyBleHBhbnNpb24gdXNlcyB0aGUgaXRlbUlkIHByb3AgdG8gaWRlbnRpZnkgZWFjaCByb3dcbiAgICAgKi9cbiAgLyoqXG4gICAgICogUm93IGV4cGFuc2lvbiB1c2VzIHRoZSBpdGVtSWQgcHJvcCB0byBpZGVudGlmeSBlYWNoIHJvd1xuICAgICAqL1xuICBpdGVtSWRUb0V4cGFuZGVkUm93TWFwOiBQcm9wVHlwZXMuc2hhcGUoe30pLFxuICAvKipcbiAgICAgKiBBIGxpc3Qgb2Ygb2JqZWN0cyB0byBhcHBlYXIgaW4gdGhlIHRhYmxlIC0gYW4gaXRlbSBwZXIgcm93XG4gICAgICovXG4gIC8qKlxuICAgICAqIEEgbGlzdCBvZiBvYmplY3RzIHRvIGFwcGVhciBpbiB0aGUgdGFibGUgLSBhbiBpdGVtIHBlciByb3dcbiAgICAgKi9cbiAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gYEV1aVRhYmxlUm93Q2VsbGBcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQXBwbGllZCB0byBgRXVpVGFibGVSb3dDZWxsYFxuICAgICAqL1xuICBjZWxsUHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBvbmUgb2YgdGhlIG9iamVjdHM6ICNFdWlUYWJsZUZpZWxkRGF0YUNvbHVtblR5cGUsICNFdWlUYWJsZUNvbXB1dGVkQ29sdW1uVHlwZSBvciAjRXVpVGFibGVBY3Rpb25zQ29sdW1uVHlwZS5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygb25lIG9mIHRoZSBvYmplY3RzOiAjRXVpVGFibGVGaWVsZERhdGFDb2x1bW5UeXBlLCAjRXVpVGFibGVDb21wdXRlZENvbHVtblR5cGUgb3IgI0V1aVRhYmxlQWN0aW9uc0NvbHVtblR5cGUuXG4gICAgICovXG4gIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBIGZpZWxkIG9mIHRoZSBpdGVtIChtYXkgYmUgYSBuZXN0ZWQgZmllbGQpXG4gICAgICAgKi9cbiAgICAvLyB0eXBlIGhhY2sgdXNlZCBmb3IgYmV0dGVyIGF1dG9jb21wbGV0ZSBzdXBwb3J0XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yOTcyOVxuICAgIGZpZWxkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgLy8gc3VwcG9ydHMgb3V0ZXIuaW5uZXIga2V5IHBhdGhzXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgLyoqXG4gICAgICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBjb2x1bW4gKHdpbGwgYmUgcHJlc2VudGVkIGFzIGEgdGl0bGUgb3ZlciB0aGUgY29sdW1uIGhlYWRlcilcbiAgICAgICAqL1xuICAgIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8qKlxuICAgICAgICogRGVzY3JpYmVzIHRoZSBkYXRhIHR5cGVzIG9mIHRoZSBkaXNwbGF5ZWQgdmFsdWUgKHNlcnZlcyBhcyBhIHJlbmRlcmluZyBoaW50IGZvciB0aGUgdGFibGUpXG4gICAgICAgKi9cbiAgICBkYXRhVHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImF1dG9cIiwgXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJib29sZWFuXCIsIFwiZGF0ZVwiXSksXG4gICAgLyoqXG4gICAgICAgKiBBIENTUyB3aWR0aCBwcm9wZXJ0eS4gSGludHMgZm9yIHRoZSByZXF1aXJlZCB3aWR0aCBvZiB0aGUgY29sdW1uIChlLmcuIFwiMzAlXCIsIFwiMTAwcHhcIiwgZXRjLi4pXG4gICAgICAgKi9cbiAgICB3aWR0aDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvKipcbiAgICAgICAqIERlZmluZXMgd2hldGhlciB0aGUgdXNlciBjYW4gc29ydCBvbiB0aGlzIGNvbHVtbi4gSWYgYSBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSB0byBzb3J0IGFnYWluc3RcbiAgICAgICAqL1xuICAgIHNvcnRhYmxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gICAgLyoqXG4gICAgICAgKiBEaXNhYmxlcyB0aGUgdXNlcidzIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSBzb3J0LCBidXQgd2lsbCBzdGlsbFxuICAgICAgICogc2hvdyB0aGUgY3VycmVudCBzb3J0IGRpcmVjdGlvbiBpbiB0aGUgY29sdW1uIGhlYWRlclxuICAgICAgICovXG4gICAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogRGVmaW5lcyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgdGhlIGNvbHVtblxuICAgICAgICogQGRlZmF1bHQgbGVmdFxuICAgICAgICovXG4gICAgYWxpZ246IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGEgdGV4dCB3cmFwcGVyIGFyb3VuZCBjZWxsIGNvbnRlbnQgdGhhdCBoZWxwcyB3b3JkIGJyZWFrIG9yIHRydW5jYXRlXG4gICAgICAgKiBsb25nIHRleHQgY29ycmVjdGx5LlxuICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICovXG4gICAgdGV4dE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjb2x1bW4gc2hvdWxkIHRydW5jYXRlIG92ZXJmbG93aW5nIHRleHQgY29udGVudC5cbiAgICAgICAqIC0gU2V0IHRvIGB0cnVlYCB0byBlbmFibGUgc2luZ2xlLWxpbmUgdHJ1bmNhdGlvbi5cbiAgICAgICAqIC0gVG8gZW5hYmxlIG11bHRpLWxpbmUgdHJ1bmNhdGlvbiwgdXNlIGEgY29uZmlndXJhdGlvbiBvYmplY3Qgd2l0aCBgbGluZXNgXG4gICAgICAgKiBzZXQgdG8gYSBudW1iZXIgb2YgbGluZXMgdG8gdHJ1bmNhdGUgdG8uXG4gICAgICAgKi9cbiAgICB0cnVuY2F0ZVRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBsaW5lczogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogQWxsb3dzIGNvbmZpZ3VyaW5nIGN1c3RvbSByZW5kZXIgb3B0aW9ucyBvciBhcHBlYXJhbmNlcyBmb3IgY29sdW1uIGNlbGxzXG4gICAgICAgKiB3aGVuIHRoZSB0YWJsZSByZXNwb25zaXZlbHkgY29sbGFwc2VzIGludG8gYSBtb2JpbGUtZnJpZW5kbHkgdmlld1xuICAgICAgICovXG4gICAgbW9iaWxlT3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmNcbiAgICB9KSxcbiAgICAvKipcbiAgICAgICAqIERlc2NyaWJlIGEgY3VzdG9tIHJlbmRlcmVyIGZ1bmN0aW9uIGZvciB0aGUgY29udGVudFxuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIENvbnRlbnQgdG8gZGlzcGxheSBpbiB0aGUgZm9vdGVyIGJlbmVhdGggdGhpcyBjb2x1bW5cbiAgICAgICAqL1xuICAgIGZvb3RlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gICAgLyoqXG4gICAgICAgKiBJZiBwYXNzaW5nIGBpdGVtSWRUb0V4cGFuZGVkUm93TWFwYCB0byB5b3VyIHRhYmxlLCBzZXQgdGhpcyBmbGFnIHRvIGB0cnVlYFxuICAgICAgICogZm9yIHRoZSBjdXN0b20gY29sdW1uIG9yIGNlbGwgdXNlZCB0byB0b2dnbGUgdGhlIGV4cGFuZGVkIHJvdy5cbiAgICAgICAqL1xuICAgIGlzRXhwYW5kZXI6IFByb3BUeXBlcy5ib29sLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgICAqIEEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyB0aGUgdmFsdWUgZm9yIGVhY2ggaXRlbSBhbmQgcmVuZGVycyBpdFxuICAgICAgICAgKi9cbiAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgLyoqXG4gICAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGNvbHVtblxuICAgICAgICAgKi9cbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZSxcbiAgICAvKipcbiAgICAgICAgICogSWYgcHJvdmlkZWQsIGFsbG93cyB0aGlzIGNvbHVtbiB0byBiZSBzb3J0ZWQgb24uIE11c3QgcmV0dXJuIHRoZSB2YWx1ZSB0byBzb3J0IGFnYWluc3QuXG4gICAgICAgICAqL1xuICAgIHNvcnRhYmxlOiBQcm9wVHlwZXMuZnVuY1xuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogQW4gYXJyYXkgb2Ygb25lIG9mIHRoZSBvYmplY3RzOiAjRGVmYXVsdEl0ZW1BY3Rpb24gb3IgI0N1c3RvbUl0ZW1BY3Rpb25cbiAgICAgICAqL1xuICAgIGFjdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgICAvKipcbiAgICAgICAgICogVGhlIHR5cGUgb2YgYWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImJ1dHRvblwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJpY29uXCJdKS5pc1JlcXVpcmVkXSksXG4gICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgY29sb3Igb2YgdGhlIGJ1dHRvblxuICAgICAgICAgKi9cbiAgICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcbiAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBhY3Rpb24gKHdpbGwgcmVuZGVyIGFzIHZpc2libGUgdGV4dCBpZiByZW5kZXJlZCB3aXRoaW4gYSBjb2xsYXBzZWQgbWVudSlcbiAgICAgICAgICovXG4gICAgICAvKipcbiAgICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgYWN0aW9uICh3aWxsIHJlbmRlciBhcyB2aXNpYmxlIHRleHQgaWYgcmVuZGVyZWQgd2l0aGluIGEgY29sbGFwc2VkIG1lbnUpXG4gICAgICAgICAqL1xuICAgICAgbmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgICAvKipcbiAgICAgICAgICogRGVzY3JpYmVzIHRoZSBhY3Rpb24gKHdpbGwgcmVuZGVyIGFzIHRvb2x0aXAgY29udGVudClcbiAgICAgICAgICovXG4gICAgICAvKipcbiAgICAgICAgICogRGVzY3JpYmVzIHRoZSBhY3Rpb24gKHdpbGwgcmVuZGVyIGFzIHRvb2x0aXAgY29udGVudClcbiAgICAgICAgICovXG4gICAgICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGhhbmRsZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgYWN0aW9uLiBQYXNzZXMgYmFjayB0aGUgY3VycmVudCByb3dcbiAgICAgICAgICogaXRlbSBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIGFuZCB0aGUgb3JpZ2luYXRpbmcgUmVhY3QgY2xpY2sgZXZlbnRcbiAgICAgICAgICogYXMgYSBzZWNvbmQgYXJndW1lbnQuXG4gICAgICAgICAqL1xuICAgICAgLyoqXG4gICAgICAgICAqIEEgaGFuZGxlciBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBhY3Rpb24uIFBhc3NlcyBiYWNrIHRoZSBjdXJyZW50IHJvd1xuICAgICAgICAgKiBpdGVtIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgYW5kIHRoZSBvcmlnaW5hdGluZyBSZWFjdCBjbGljayBldmVudFxuICAgICAgICAgKiBhcyBhIHNlY29uZCBhcmd1bWVudC5cbiAgICAgICAgICovXG4gICAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGhyZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICAgICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBhdmFpbGFibGVcbiAgICAgICAgICovXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICAgKi9cbiAgICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGVuYWJsZWRcbiAgICAgICAgICovXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGVuYWJsZWRcbiAgICAgICAgICovXG4gICAgICBlbmFibGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gICAgICAvKipcbiAgICAgICAgICogSWYgbW9yZSB0aGFuIDMgYWN0aW9ucyBhcmUgcGFzc2VkLCAyIHByaW1hcnkgYWN0aW9ucyB3aWxsIHNob3cgKG9uIGhvdmVyKVxuICAgICAgICAgKiBuZXh0IHRvIGFuIGV4cGFuc2lvbiBtZW51IG9mIGFsbCBhY3Rpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBPbiBtb2JpbGUsIHByaW1hcnkgYWN0aW9ucyB3aWxsIGJlIHR1Y2tlZCBhd2F5IGluIHRoZSBleHBhbnNpb24gbWVudSBmb3Igc3BhY2UuXG4gICAgICAgICAqL1xuICAgICAgLyoqXG4gICAgICAgICAqIElmIG1vcmUgdGhhbiAzIGFjdGlvbnMgYXJlIHBhc3NlZCwgMiBwcmltYXJ5IGFjdGlvbnMgd2lsbCBzaG93IChvbiBob3ZlcilcbiAgICAgICAgICogbmV4dCB0byBhbiBleHBhbnNpb24gbWVudSBvZiBhbGwgYWN0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogT24gbW9iaWxlLCBwcmltYXJ5IGFjdGlvbnMgd2lsbCBiZSB0dWNrZWQgYXdheSBpbiB0aGUgZXhwYW5zaW9uIG1lbnUgZm9yIHNwYWNlLlxuICAgICAgICAgKi9cbiAgICAgIGlzUHJpbWFyeTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAvKipcbiAgICAgICAgICogQWxsb3dzIG9ubHkgc2hvd2luZyB0aGUgYWN0aW9uIG9uIG1vdXNlIGhvdmVyIG9yIGtleWJvYXJkIGZvY3VzLlxuICAgICAgICAgKiBJZiBtb3JlIHRoYW4gMyBhY3Rpb25zIGFyZSBwYXNzZWQsIHRoaXMgd2lsbCBhbHdheXMgYmUgdHJ1ZSBmb3IgYGlzUHJpbWFyeWAgYWN0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogSGFzIG5vIGVmZmVjdCBvbiBtb2JpbGUsIG9yIGlmIGBoYXNBY3Rpb25zYCBpcyBub3Qgc2V0LlxuICAgICAgICAgKi9cbiAgICAgIC8qKlxuICAgICAgICAgKiBBbGxvd3Mgb25seSBzaG93aW5nIHRoZSBhY3Rpb24gb24gbW91c2UgaG92ZXIgb3Iga2V5Ym9hcmQgZm9jdXMuXG4gICAgICAgICAqIElmIG1vcmUgdGhhbiAzIGFjdGlvbnMgYXJlIHBhc3NlZCwgdGhpcyB3aWxsIGFsd2F5cyBiZSB0cnVlIGZvciBgaXNQcmltYXJ5YCBhY3Rpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBIYXMgbm8gZWZmZWN0IG9uIG1vYmlsZSwgb3IgaWYgYGhhc0FjdGlvbnNgIGlzIG5vdCBzZXQuXG4gICAgICAgICAqL1xuICAgICAgc2hvd09uSG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICAgICAgLyoqXG4gICAgICAgICAqIEFzc29jaWF0ZXMgYW4gaWNvbiB3aXRoIHRoZSBidXR0b25cbiAgICAgICAgICovXG4gICAgICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG4gICAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIC8qKlxuICAgICAgICAgKiBBbGxvd3MgcmVuZGVyaW5nIGEgdG90YWxseSBjdXN0b20gYWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgdGhhdCBkZWZpbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBhdmFpbGFibGVcbiAgICAgICAgICovXG4gICAgICBhdmFpbGFibGU6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgdGhhdCBkZWZpbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgICAqL1xuICAgICAgZW5hYmxlZDogUHJvcFR5cGVzLmZ1bmNcbiAgICB9KS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgICAvKipcbiAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGNvbHVtblxuICAgICAgICovXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGVcbiAgfSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLFxuICAvKipcbiAgICAgKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXlcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5XG4gICAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBEZXNjcmliZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHRhYmxlLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgY2FwdGlvbiB3aWxsIGJlIFwiVGhpcyB0YWJsZSBjb250YWlucyB7aXRlbUNvdW50fSByb3dzLlwiXG4gICAgICovXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyB0aGUgY29udGVudCBvZiB0aGUgdGFibGUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjYXB0aW9uIHdpbGwgYmUgXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3MuXCJcbiAgICAgKi9cbiAgdGFibGVDYXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hpY2ggY29sdW1uIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBpZGVudGlmeWluZyBjZWxsIGluIGVhY2ggcm93LiBTaG91bGQgbWF0Y2ggYSBcImZpZWxkXCIgcHJvcCBpbiBGaWVsZERhdGFDb2x1bW5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoaWNoIGNvbHVtbiBzaG91bGQgYmUgdXNlZCBhcyB0aGUgaWRlbnRpZnlpbmcgY2VsbCBpbiBlYWNoIHJvdy4gU2hvdWxkIG1hdGNoIGEgXCJmaWVsZFwiIHByb3AgaW4gRmllbGREYXRhQ29sdW1uXG4gICAgICovXG4gIHJvd0hlYWRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogUHJvdmlkZXMgYW4gaW5maW5pdGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICAgKi9cbiAgLyoqXG4gICAgICogUHJvdmlkZXMgYW4gaW5maW5pdGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICAgKi9cbiAgbG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE1lc3NhZ2UgdG8gZGlzcGxheSBpZiB0YWJsZSBpcyBlbXB0eVxuICAgICAqL1xuICAvKipcbiAgICAgKiBNZXNzYWdlIHRvIGRpc3BsYXkgaWYgdGFibGUgaXMgZW1wdHlcbiAgICAgKi9cbiAgbm9JdGVtc01lc3NhZ2U6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbmV2ZXIgcGFnaW5hdGlvbiBvciBzb3J0aW5nIGNoYW5nZXMgKHRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgd2hlbiBlaXRoZXIgcGFnaW5hdGlvbiBvciBzb3J0aW5nIGlzIGNvbmZpZ3VyZWQpLiBTZWUgI0NyaXRlcmlhIG9yICNDcml0ZXJpYVdpdGhQYWdpbmF0aW9uXG4gICAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogQ29uZmlndXJlcyAjUGFnaW5hdGlvblxuICAgICAqL1xuICBwYWdpbmF0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3VuZGVmaW5lZF0pLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogVGhlIGN1cnJlbnQgcGFnZSAoemVyby1iYXNlZCkgaW5kZXhcbiAgICAgICAqL1xuICAgIHBhZ2VJbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIC8qKlxuICAgICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIHNob3duIGluIGEgc2luZ2xlIHBhZ2UuXG4gICAgICAgKiBQYXNzIGAwYCB0byBkaXNwbGF5IHRoZSBzZWxlY3RlZCBcIlNob3cgYWxsXCIgb3B0aW9uIGFuZCBoaWRlIHRoZSBwYWdpbmF0aW9uLlxuICAgICAgICpcbiAgICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICAgKi9cbiAgICBwYWdlU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICAvKipcbiAgICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgdGhlIHBhZ2UgaXMgXCJzbGljZWRcIiBvZlxuICAgICAgICovXG4gICAgdG90YWxJdGVtQ291bnQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICAvKipcbiAgICAgICAqIENvbmZpZ3VyZXMgdGhlIHBhZ2Ugc2l6ZSBkcm9wZG93biBvcHRpb25zLlxuICAgICAgICogUGFzcyBgMGAgYXMgb25lIG9mIHRoZSBvcHRpb25zIHRvIGNyZWF0ZSBhIFwiU2hvdyBhbGxcIiBvcHRpb24uXG4gICAgICAgKlxuICAgICAgICogQGRlZmF1bHQgWzEwLCAyNSwgNTBdXG4gICAgICAgKi9cbiAgICBwYWdlU2l6ZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCksXG4gICAgLyoqXG4gICAgICAgKiBTZXQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgcGFnZSBzaXplIGRyb3Bkb3duXG4gICAgICAgKlxuICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICovXG4gICAgc2hvd1BlclBhZ2VPcHRpb25zOiBQcm9wVHlwZXMuYm9vbFxuICB9KV0pLFxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd2BcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQXBwbGllZCB0byBgRXVpVGFibGVSb3dgXG4gICAgICovXG4gIHJvd1Byb3BzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogQ29uZmlndXJlcyAjRXVpVGFibGVTZWxlY3Rpb25UeXBlXG4gICAgICovXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU2VsZWN0aW9uVHlwZVxuICAgICAqL1xuICBzZWxlY3Rpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGl0ZW0gc2VsZWN0aW9uIGNoYW5nZXMuXG4gICAgICAgKlxuICAgICAgICogUmVxdWlyZWQgaWYgYHNlbGVjdGVkYCBpcyBwYXNzZWQuXG4gICAgICAgKi9cbiAgICBvblNlbGVjdGlvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHBlciBpdGVtIHRvIGluZGljYXRlIHdoZXRoZXIgaXQgaXMgc2VsZWN0YWJsZVxuICAgICAgICovXG4gICAgc2VsZWN0YWJsZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHBlciBpdGVtIHRvIHJldHJpZXZlIGEgbWVzc2FnZSBmb3IgaXRzIHNlbGVjdGFibGUgc3RhdGUuXG4gICAgICAgKiBXZSBkaXNwbGF5IHRoZXNlIG1lc3NhZ2VzIGFzIGEgdG9vbHRpcCBvbiBhbiB1bnNlbGVjdGFibGUgY2hlY2tib3hcbiAgICAgICAqL1xuICAgIHNlbGVjdGFibGVNZXNzYWdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIFNldHMgaW5pdGlhbGx5IHNlbGVjdGVkIGl0ZW1zLiBVc2UgZm9yIHVuY29udHJvbGxlZCBzZWxlY3Rpb24gYmVoYXZpb3IgKGNoZWNrYm94XG4gICAgICAgKiB3aWxsIG9ubHkgY2hhbmdlIGZyb20gdXNlciBpbnB1dCwgYW5kIG5vdCBmcm9tIGRldmVsb3BlciBjb250cm9sKS5cbiAgICAgICAqXG4gICAgICAgKiBUaGlzIHByb3Agd2lsbCBiZSBpZ25vcmVkIGlmIGBzZWxlY3RlZGAgaXMgcGFzc2VkLlxuICAgICAgICovXG4gICAgaW5pdGlhbFNlbGVjdGVkOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgIC8qKlxuICAgICAgICogVXNlZCBmb3IgY29udHJvbGxlZCBzZWxlY3Rpb24gYmVoYXZpb3IsIGUuZy4gd2hlbiB5b3Ugd2FudCB0byBwcm9ncmFtbWF0aWNhbGx5XG4gICAgICAgKiBjb250cm9sIHdoaWNoIHNlbGVjdGlvbiBjaGVja2JveGVzIGFyZSBjaGVja2VkLCBhbmQgd2hpY2ggYXJlIG5vdC5cbiAgICAgICAqL1xuICAgIHNlbGVjdGVkOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpXG4gIH0pLFxuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNFdWlUYWJsZVNvcnRpbmdUeXBlXG4gICAgICovXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU29ydGluZ1R5cGVcbiAgICAgKi9cbiAgc29ydGluZzogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEluZGljYXRlcyB0aGUgcHJvcGVydHkvZmllbGQgdG8gc29ydCBvblxuICAgICAgICovXG4gICAgc29ydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGZpZWxkOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZihbXCJhc2NcIiwgXCJkZXNjXCJdKS5pc1JlcXVpcmVkXG4gICAgfSksXG4gICAgLyoqXG4gICAgICAgKiBFbmFibGVzL2Rpc2FibGVzIHVuc29ydGluZyBvZiB0YWJsZSBjb2x1bW5zLiBTdXBwb3J0ZWQgYnkgRXVpSW5NZW1vcnlUYWJsZS5cbiAgICAgICAqL1xuICAgIGFsbG93TmV1dHJhbFNvcnQ6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogRW5hYmxlcyB0aGUgZGVmYXVsdCBzb3J0aW5nIGFiaWxpdHkgZm9yIGVhY2ggY29sdW1uLlxuICAgICAgICovXG4gICAgZW5hYmxlQWxsQ29sdW1uczogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBEaXNhYmxlcyB0aGUgdXNlcidzIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSBzb3J0IGJ1dCBzdGlsbCBzaG93cyB0aGUgY3VycmVudCBkaXJlY3Rpb25cbiAgICAgICAqL1xuICAgIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbFxuICB9KSxcbiAgLyoqXG4gICAgICogU2V0cyB0aGUgdGFibGUtbGF5b3V0IENTUyBwcm9wZXJ0eS4gTm90ZSB0aGF0IGF1dG8gdGFibGVMYXlvdXQgcHJldmVudHMgdHJ1bmNhdGVUZXh0IGZyb20gd29ya2luZyBwcm9wZXJseS5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgdGFibGUtbGF5b3V0IENTUyBwcm9wZXJ0eS4gTm90ZSB0aGF0IGF1dG8gdGFibGVMYXlvdXQgcHJldmVudHMgdHJ1bmNhdGVUZXh0IGZyb20gd29ya2luZyBwcm9wZXJseS5cbiAgICAgKi9cbiAgdGFibGVMYXlvdXQ6IFByb3BUeXBlcy5vbmVPZihbXCJmaXhlZFwiLCBcImF1dG9cIl0pXG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlDb250ZXh0TWVudUl0ZW0sIEV1aUNvbnRleHRNZW51UGFuZWwgfSBmcm9tICcuLi9jb250ZXh0X21lbnUnO1xuaW1wb3J0IHsgRXVpUG9wb3ZlciB9IGZyb20gJy4uL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpQnV0dG9uSWNvbiB9IGZyb20gJy4uL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi4vdG9vbF90aXAnO1xuaW1wb3J0IHsgdXNlRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgaXNDdXN0b21JdGVtQWN0aW9uLCBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uIH0gZnJvbSAnLi9hY3Rpb25fdHlwZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ29sbGFwc2VkSXRlbUFjdGlvbnMgPSBmdW5jdGlvbiBDb2xsYXBzZWRJdGVtQWN0aW9ucyhfcmVmKSB7XG4gIHZhciBhY3Rpb25zID0gX3JlZi5hY3Rpb25zLFxuICAgIGl0ZW1JZCA9IF9yZWYuaXRlbUlkLFxuICAgIGl0ZW0gPSBfcmVmLml0ZW0sXG4gICAgYWN0aW9uc0Rpc2FibGVkID0gX3JlZi5hY3Rpb25zRGlzYWJsZWQsXG4gICAgZGlzcGxheWVkUm93SW5kZXggPSBfcmVmLmRpc3BsYXllZFJvd0luZGV4LFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHBvcG92ZXJPcGVuID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRQb3BvdmVyT3BlbiA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBjbG9zZVBvcG92ZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNldFBvcG92ZXJPcGVuKGZhbHNlKTtcbiAgfSwgW10pO1xuICB2YXIgYWxsQWN0aW9uc1Rvb2x0aXAgPSB1c2VFdWlJMThuKCdldWlDb2xsYXBzZWRJdGVtQWN0aW9ucy5hbGxBY3Rpb25zVG9vbHRpcCcsICdBbGwgYWN0aW9ucycpO1xuICB2YXIgYWxsQWN0aW9uc0J1dHRvbkFyaWFMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aUNvbGxhcHNlZEl0ZW1BY3Rpb25zLmFsbEFjdGlvbnMnLCAnQWxsIGFjdGlvbnMsIHJvdyB7aW5kZXh9Jywge1xuICAgIGluZGV4OiBkaXNwbGF5ZWRSb3dJbmRleCArIDFcbiAgfSk7XG4gIHZhciBhbGxBY3Rpb25zQnV0dG9uRGlzYWJsZWRBcmlhTGFiZWwgPSB1c2VFdWlJMThuKCdldWlDb2xsYXBzZWRJdGVtQWN0aW9ucy5hbGxBY3Rpb25zRGlzYWJsZWQnLCAnSW5kaXZpZHVhbCBpdGVtIGFjdGlvbnMgYXJlIGRpc2FibGVkIHdoZW4gcm93cyBhcmUgYmVpbmcgc2VsZWN0ZWQuJyk7XG4gIHZhciBjb250cm9scyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBhY3Rpb25zLnJlZHVjZShmdW5jdGlvbiAoY29udHJvbHMsIGFjdGlvbiwgaW5kZXgpIHtcbiAgICAgIHZhciBfYWN0aW9uJGF2YWlsYWJsZSwgX2FjdGlvbiRhdmFpbGFibGUyO1xuICAgICAgdmFyIGF2YWlsYWJsZSA9IChfYWN0aW9uJGF2YWlsYWJsZSA9IChfYWN0aW9uJGF2YWlsYWJsZTIgPSBhY3Rpb24uYXZhaWxhYmxlKSA9PT0gbnVsbCB8fCBfYWN0aW9uJGF2YWlsYWJsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hY3Rpb24kYXZhaWxhYmxlMi5jYWxsKGFjdGlvbiwgaXRlbSkpICE9PSBudWxsICYmIF9hY3Rpb24kYXZhaWxhYmxlICE9PSB2b2lkIDAgPyBfYWN0aW9uJGF2YWlsYWJsZSA6IHRydWU7XG4gICAgICBpZiAoIWF2YWlsYWJsZSkgcmV0dXJuIGNvbnRyb2xzO1xuICAgICAgdmFyIGVuYWJsZWQgPSBhY3Rpb24uZW5hYmxlZCA9PSBudWxsIHx8IGFjdGlvbi5lbmFibGVkKGl0ZW0pO1xuICAgICAgaWYgKGlzQ3VzdG9tSXRlbUFjdGlvbihhY3Rpb24pKSB7XG4gICAgICAgIHZhciBjdXN0b21BY3Rpb24gPSBhY3Rpb247XG4gICAgICAgIHZhciBhY3Rpb25Db250cm9sID0gY3VzdG9tQWN0aW9uLnJlbmRlcihpdGVtLCBlbmFibGVkKTtcbiAgICAgICAgY29udHJvbHMucHVzaChcbiAgICAgICAgLy8gRG8gbm90IHB1dCB0aGUgYG9uQ2xpY2tgIG9uIHRoZSBFdWlDb250ZXh0TWVudUl0ZW0gaXRzZWxmIC0gb3RoZXJ3aXNlXG4gICAgICAgIC8vIGl0IHJlbmRlcnMgYSA8YnV0dG9uPiB0YWcgaW5zdGVhZCBvZiBhIDxkaXY+LCBhbmQgd2UgZW5kIHVwIHdpdGggbmVzdGVkXG4gICAgICAgIC8vIGludGVyYWN0aXZlIGVsZW1lbnRzXG4gICAgICAgIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVJdGVtLCB7XG4gICAgICAgICAga2V5OiBpbmRleCxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFzaWNUYWJsZV9fY29sbGFwc2VkQ3VzdG9tQWN0aW9uXCJcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgIG9uQ2xpY2s6IGNsb3NlUG9wb3ZlclxuICAgICAgICB9LCBhY3Rpb25Db250cm9sKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGljb24gPSBhY3Rpb24uaWNvbiA/IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkoYWN0aW9uLmljb24pIDogdW5kZWZpbmVkO1xuICAgICAgICB2YXIgYnV0dG9uQ29udGVudCA9IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkoYWN0aW9uLm5hbWUpO1xuICAgICAgICB2YXIgdG9vbFRpcENvbnRlbnQgPSBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uKGl0ZW0pKGFjdGlvbi5kZXNjcmlwdGlvbik7XG4gICAgICAgIHZhciBocmVmID0gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKShhY3Rpb24uaHJlZik7XG4gICAgICAgIHZhciBkYXRhVGVzdFN1YmogPSBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uKGl0ZW0pKGFjdGlvblsnZGF0YS10ZXN0LXN1YmonXSk7XG4gICAgICAgIHZhciBfb25DbGljayA9IGFjdGlvbi5vbkNsaWNrLFxuICAgICAgICAgIHRhcmdldCA9IGFjdGlvbi50YXJnZXQ7XG4gICAgICAgIGNvbnRyb2xzLnB1c2goX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIHtcbiAgICAgICAgICBrZXk6IGluZGV4LFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlCYXNpY1RhYmxlX19jb2xsYXBzZWRBY3Rpb25cIixcbiAgICAgICAgICBkaXNhYmxlZDogIWVuYWJsZWQgJiYgIWFjdGlvbnNEaXNhYmxlZCxcbiAgICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgIGljb246IGljb24sXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBkYXRhVGVzdFN1YmosXG4gICAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICAgICAgICAgICAgZXZlbnQucGVyc2lzdCgpO1xuICAgICAgICAgICAgX29uQ2xpY2sgPT09IG51bGwgfHwgX29uQ2xpY2sgPT09IHZvaWQgMCB8fCBfb25DbGljayhpdGVtLCBldmVudCk7XG4gICAgICAgICAgICAvLyBBbGxvdyBjb25zdW1lciBldmVudHMgdG8gcHJldmVudCB0aGUgcG9wb3ZlciBmcm9tIGNsb3NpbmcgaWYgbmVjZXNzYXJ5XG4gICAgICAgICAgICBpZiAoIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIGNsb3NlUG9wb3ZlcigpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdG9vbFRpcENvbnRlbnQ6IHRvb2xUaXBDb250ZW50LFxuICAgICAgICAgIHRvb2xUaXBQcm9wczoge1xuICAgICAgICAgICAgZGVsYXk6ICdsb25nJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgYnV0dG9uQ29udGVudCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRyb2xzO1xuICAgIH0sIFtdKTtcbiAgfSwgW2FjdGlvbnMsIGFjdGlvbnNEaXNhYmxlZCwgaXRlbSwgY2xvc2VQb3BvdmVyXSk7XG4gIHZhciBwb3BvdmVyQnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25JY29uLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFjdGlvbnNEaXNhYmxlZCA/IGFsbEFjdGlvbnNCdXR0b25EaXNhYmxlZEFyaWFMYWJlbCA6IGFsbEFjdGlvbnNCdXR0b25BcmlhTGFiZWwsXG4gICAgdGl0bGU6IGFjdGlvbnNEaXNhYmxlZCA/IGFsbEFjdGlvbnNCdXR0b25EaXNhYmxlZEFyaWFMYWJlbCA6IHVuZGVmaW5lZCxcbiAgICBpY29uVHlwZTogXCJib3hlc0hvcml6b250YWxcIixcbiAgICBjb2xvcjogXCJ0ZXh0XCIsXG4gICAgaXNEaXNhYmxlZDogYWN0aW9uc0Rpc2FibGVkLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICByZXR1cm4gc2V0UG9wb3Zlck9wZW4oZnVuY3Rpb24gKGlzT3Blbikge1xuICAgICAgICByZXR1cm4gIWlzT3BlbjtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aUNvbGxhcHNlZEl0ZW1BY3Rpb25zQnV0dG9uXCJcbiAgfSk7XG4gIHZhciB3aXRoVG9vbHRpcCA9ICFhY3Rpb25zRGlzYWJsZWQgJiYgX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgY29udGVudDogYWxsQWN0aW9uc1Rvb2x0aXAsXG4gICAgZGVsYXk6IFwibG9uZ1wiXG4gIH0sIHBvcG92ZXJCdXR0b24pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgaWQ6IFwiXCIuY29uY2F0KGl0ZW1JZCwgXCItYWN0aW9uc1wiKSxcbiAgICBpc09wZW46IHBvcG92ZXJPcGVuLFxuICAgIGJ1dHRvbjogd2l0aFRvb2x0aXAgfHwgcG9wb3ZlckJ1dHRvbixcbiAgICBjbG9zZVBvcG92ZXI6IGNsb3NlUG9wb3ZlcixcbiAgICBwYW5lbFBhZGRpbmdTaXplOiBcIm5vbmVcIixcbiAgICBhbmNob3JQb3NpdGlvbjogXCJsZWZ0Q2VudGVyXCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudVBhbmVsLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUJhc2ljVGFibGVfX2NvbGxhcHNlZEFjdGlvbnNcIixcbiAgICBpdGVtczogY29udHJvbHNcbiAgfSkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciBpc0N1c3RvbUl0ZW1BY3Rpb24gPSBmdW5jdGlvbiBpc0N1c3RvbUl0ZW1BY3Rpb24oYWN0aW9uKSB7XG4gIHJldHVybiBhY3Rpb24uaGFzT3duUHJvcGVydHkoJ3JlbmRlcicpO1xufTtcbmV4cG9ydCB2YXIgY2FsbFdpdGhJdGVtSWZGdW5jdGlvbiA9IGZ1bmN0aW9uIGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkge1xuICByZXR1cm4gZnVuY3Rpb24gKHByb3ApIHtcbiAgICByZXR1cm4gdHlwZW9mIHByb3AgPT09ICdmdW5jdGlvbicgPyBwcm9wKGl0ZW0pIDogcHJvcDtcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IERlZmF1bHRJdGVtQWN0aW9uIH0gZnJvbSAnLi9kZWZhdWx0X2l0ZW1fYWN0aW9uJztcbmltcG9ydCB7IEN1c3RvbUl0ZW1BY3Rpb24gfSBmcm9tICcuL2N1c3RvbV9pdGVtX2FjdGlvbic7XG5pbXBvcnQgeyBpc0N1c3RvbUl0ZW1BY3Rpb24gfSBmcm9tICcuL2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFeHBhbmRlZEl0ZW1BY3Rpb25zID0gZnVuY3Rpb24gRXhwYW5kZWRJdGVtQWN0aW9ucyhfcmVmKSB7XG4gIHZhciBhY3Rpb25zID0gX3JlZi5hY3Rpb25zLFxuICAgIGl0ZW1JZCA9IF9yZWYuaXRlbUlkLFxuICAgIGl0ZW0gPSBfcmVmLml0ZW0sXG4gICAgYWN0aW9uc0Rpc2FibGVkID0gX3JlZi5hY3Rpb25zRGlzYWJsZWQsXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWU7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBhY3Rpb25zLnJlZHVjZShmdW5jdGlvbiAodG9vbHMsIGFjdGlvbiwgaW5kZXgpIHtcbiAgICB2YXIgYXZhaWxhYmxlID0gYWN0aW9uLmF2YWlsYWJsZSA/IGFjdGlvbi5hdmFpbGFibGUoaXRlbSkgOiB0cnVlO1xuICAgIGlmICghYXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gdG9vbHM7XG4gICAgfVxuICAgIHZhciBlbmFibGVkID0gYWN0aW9uLmVuYWJsZWQgPT0gbnVsbCB8fCBhY3Rpb24uZW5hYmxlZChpdGVtKTtcbiAgICB2YXIga2V5ID0gXCJpdGVtX2FjdGlvbl9cIi5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGluZGV4KTtcbiAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCB7XG4gICAgICAnZXVpQmFzaWNUYWJsZUFjdGlvbi1zaG93T25Ib3Zlcic6IGFjdGlvbi5zaG93T25Ib3ZlclxuICAgIH0pO1xuICAgIGlmIChpc0N1c3RvbUl0ZW1BY3Rpb24oYWN0aW9uKSkge1xuICAgICAgLy8gY3VzdG9tIGFjdGlvbiBoYXMgYSByZW5kZXIgZnVuY3Rpb25cbiAgICAgIHRvb2xzLnB1c2goX19fRW1vdGlvbkpTWChDdXN0b21JdGVtQWN0aW9uLCB7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQgJiYgIWFjdGlvbnNEaXNhYmxlZCxcbiAgICAgICAgaXRlbTogaXRlbVxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b29scy5wdXNoKF9fX0Vtb3Rpb25KU1goRGVmYXVsdEl0ZW1BY3Rpb24sIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQgJiYgIWFjdGlvbnNEaXNhYmxlZCxcbiAgICAgICAgaXRlbTogaXRlbVxuICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gdG9vbHM7XG4gIH0sIFtdKSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSwgRXVpQnV0dG9uSWNvbiB9IGZyb20gJy4uL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi4vdG9vbF90aXAnO1xuaW1wb3J0IHsgdXNlR2VuZXJhdGVkSHRtbElkIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uIH0gZnJvbSAnLi9hY3Rpb25fdHlwZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRGVmYXVsdEl0ZW1BY3Rpb24gPSBmdW5jdGlvbiBEZWZhdWx0SXRlbUFjdGlvbihfcmVmKSB7XG4gIHZhciBhY3Rpb24gPSBfcmVmLmFjdGlvbixcbiAgICBlbmFibGVkID0gX3JlZi5lbmFibGVkLFxuICAgIGl0ZW0gPSBfcmVmLml0ZW0sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWU7XG4gIGlmICghYWN0aW9uLm9uQ2xpY2sgJiYgIWFjdGlvbi5ocmVmKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHJlbmRlciBpdGVtIGFjdGlvbiBbXCIuY29uY2F0KGFjdGlvbi5uYW1lLCBcIl0uIE1pc3NpbmcgcmVxdWlyZWQgJ29uQ2xpY2snIGNhbGxiYWNrXFxuICAgICAgb3IgJ2hyZWYnIHN0cmluZy4gSWYgeW91IHdhbnQgdG8gcHJvdmlkZSBhIGN1c3RvbSBhY3Rpb24gY29udHJvbCwgbWFrZSBzdXJlIHRvIGRlZmluZSB0aGUgJ3JlbmRlcicgY2FsbGJhY2tcIikpO1xuICB9XG4gIHZhciBvbkNsaWNrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKCFhY3Rpb24ub25DbGljaykgcmV0dXJuO1xuICAgIGV2ZW50LnBlcnNpc3QoKTsgLy8gVE9ETzogUmVtb3ZlIG9uY2UgUmVhY3QgMTYgc3VwcG9ydCBpcyBkcm9wcGVkXG4gICAgYWN0aW9uLm9uQ2xpY2soaXRlbSwgZXZlbnQpO1xuICB9LCBbYWN0aW9uLm9uQ2xpY2ssIGl0ZW1dKTtcbiAgdmFyIGNvbG9yID0gYWN0aW9uLmNvbG9yID8gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKShhY3Rpb24uY29sb3IpIDogJ3ByaW1hcnknO1xuICB2YXIgaWNvbiA9IGFjdGlvbi5pY29uID8gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKShhY3Rpb24uaWNvbikgOiB1bmRlZmluZWQ7XG4gIHZhciBhY3Rpb25Db250ZW50ID0gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKShhY3Rpb24ubmFtZSk7XG4gIHZhciB0b29sdGlwQ29udGVudCA9IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkoYWN0aW9uLmRlc2NyaXB0aW9uKTtcbiAgdmFyIGhyZWYgPSBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uKGl0ZW0pKGFjdGlvbi5ocmVmKTtcbiAgdmFyIGRhdGFUZXN0U3ViaiA9IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkoYWN0aW9uWydkYXRhLXRlc3Qtc3ViaiddKTtcbiAgdmFyIGFyaWFMYWJlbElkID0gdXNlR2VuZXJhdGVkSHRtbElkKCk7XG4gIHZhciBhcmlhTGFiZWxsZWRCeTtcbiAgdmFyIGJ1dHRvbjtcbiAgaWYgKGFjdGlvbi50eXBlID09PSAnaWNvbicpIHtcbiAgICBpZiAoIWljb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCByZW5kZXIgaXRlbSBhY3Rpb24gW1wiLmNvbmNhdChhY3Rpb24ubmFtZSwgXCJdLiBJdCBpcyBjb25maWd1cmVkIHRvIHJlbmRlciBhcyBhbiBpY29uIGJ1dCBub1xcbiAgICAgIGljb24gaXMgcHJvdmlkZWQuIE1ha2Ugc3VyZSB0byBzZXQgdGhlICdpY29uJyBwcm9wZXJ0eSBvZiB0aGUgYWN0aW9uXCIpKTtcbiAgICB9XG4gICAgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25JY29uLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbElkLFxuICAgICAgaXNEaXNhYmxlZDogIWVuYWJsZWQsXG4gICAgICBjb2xvcjogY29sb3IsXG4gICAgICBpY29uVHlwZTogaWNvbixcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiBhY3Rpb24udGFyZ2V0LFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBkYXRhVGVzdFN1YmpcbiAgICAgIC8vIElmIGFjdGlvbiBpcyBkaXNhYmxlZCwgdGhlIG5vcm1hbCB0b29sdGlwIGNhbid0IHNob3cgLSBhdHRlbXB0IHRvXG4gICAgICAvLyBwcm92aWRlIHNvbWUgYW1vdW50IG9mIGFmZm9yZGFuY2Ugd2l0aCBhIGJyb3dzZXIgdGl0bGUgdG9vbHRpcFxuICAgICAgLFxuICAgICAgdGl0bGU6ICFlbmFibGVkID8gdG9vbHRpcENvbnRlbnQgOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgICAvLyBhY3Rpb25Db250ZW50IChhY3Rpb24ubmFtZSkgaXMgYSBSZWFjdE5vZGUgYW5kIG11c3QgYmUgcmVuZGVyZWRcbiAgICAvLyB0byBhbiBlbGVtZW50IGFuZCByZWZlcmVuY2VkIGJ5IElEIGZvciBzY3JlZW4gcmVhZGVyc1xuICAgIGFyaWFMYWJlbGxlZEJ5ID0gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICBpZDogYXJpYUxhYmVsSWRcbiAgICB9LCBhY3Rpb25Db250ZW50KSk7XG4gIH0gZWxzZSB7XG4gICAgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICBzaXplOiBcInNcIixcbiAgICAgIGlzRGlzYWJsZWQ6ICFlbmFibGVkLFxuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgaWNvblR5cGU6IGljb24sXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogYWN0aW9uLnRhcmdldCxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogZGF0YVRlc3RTdWJqLFxuICAgICAgZmx1c2g6IFwicmlnaHRcIlxuICAgIH0sIGFjdGlvbkNvbnRlbnQpO1xuICB9XG4gIHJldHVybiBlbmFibGVkID8gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgY29udGVudDogdG9vbHRpcENvbnRlbnQsXG4gICAgZGVsYXk6IFwibG9uZ1wiXG4gIH0sIGJ1dHRvbiksIGFyaWFMYWJlbGxlZEJ5KSA6IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIGJ1dHRvbiwgYXJpYUxhYmVsbGVkQnkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEN1c3RvbUl0ZW1BY3Rpb24gPSBmdW5jdGlvbiBDdXN0b21JdGVtQWN0aW9uKF9yZWYpIHtcbiAgdmFyIGFjdGlvbiA9IF9yZWYuYWN0aW9uLFxuICAgIGVuYWJsZWQgPSBfcmVmLmVuYWJsZWQsXG4gICAgaXRlbSA9IF9yZWYuaXRlbSxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0sIGFjdGlvbi5yZW5kZXIoaXRlbSwgZW5hYmxlZCkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aVNwYWNlciB9IGZyb20gJy4uL3NwYWNlcic7XG5pbXBvcnQgeyBFdWlUYWJsZVBhZ2luYXRpb24sIHVzZUV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzIH0gZnJvbSAnLi4vdGFibGUvdGFibGVfcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBQYWdpbmF0aW9uQmFyID0gZnVuY3Rpb24gUGFnaW5hdGlvbkJhcihfcmVmKSB7XG4gIHZhciBwYWdpbmF0aW9uID0gX3JlZi5wYWdpbmF0aW9uLFxuICAgIG9uUGFnZVNpemVDaGFuZ2UgPSBfcmVmLm9uUGFnZVNpemVDaGFuZ2UsXG4gICAgb25QYWdlQ2hhbmdlID0gX3JlZi5vblBhZ2VDaGFuZ2UsXG4gICAgYXJpYUNvbnRyb2xzID0gX3JlZlsnYXJpYS1jb250cm9scyddLFxuICAgIGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXTtcbiAgdmFyIGRlZmF1bHRzID0gdXNlRXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMoKTtcbiAgdmFyIHBhZ2VJbmRleCA9IHBhZ2luYXRpb24ucGFnZUluZGV4LFxuICAgIHRvdGFsSXRlbUNvdW50ID0gcGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCxcbiAgICBfcGFnaW5hdGlvbiRwYWdlU2l6ZSA9IHBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgcGFnZVNpemUgPSBfcGFnaW5hdGlvbiRwYWdlU2l6ZSA9PT0gdm9pZCAwID8gZGVmYXVsdHMuaXRlbXNQZXJQYWdlIDogX3BhZ2luYXRpb24kcGFnZVNpemUsXG4gICAgX3BhZ2luYXRpb24kcGFnZVNpemVPID0gcGFnaW5hdGlvbi5wYWdlU2l6ZU9wdGlvbnMsXG4gICAgcGFnZVNpemVPcHRpb25zID0gX3BhZ2luYXRpb24kcGFnZVNpemVPID09PSB2b2lkIDAgPyBkZWZhdWx0cy5pdGVtc1BlclBhZ2VPcHRpb25zIDogX3BhZ2luYXRpb24kcGFnZVNpemVPLFxuICAgIF9wYWdpbmF0aW9uJHNob3dQZXJQYSA9IHBhZ2luYXRpb24uc2hvd1BlclBhZ2VPcHRpb25zLFxuICAgIHNob3dQZXJQYWdlT3B0aW9ucyA9IF9wYWdpbmF0aW9uJHNob3dQZXJQYSA9PT0gdm9pZCAwID8gZGVmYXVsdHMuc2hvd1BlclBhZ2VPcHRpb25zIDogX3BhZ2luYXRpb24kc2hvd1BlclBhO1xuICB2YXIgcGFnZUNvdW50ID0gcGFnZVNpemUgPyBNYXRoLmNlaWwodG90YWxJdGVtQ291bnQgLyBwYWdlU2l6ZSkgOiAxO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChwYWdlQ291bnQgPCBwYWdlSW5kZXggKyAxKSB7XG4gICAgICBvblBhZ2VDaGFuZ2UgPT09IG51bGwgfHwgb25QYWdlQ2hhbmdlID09PSB2b2lkIDAgfHwgb25QYWdlQ2hhbmdlKHBhZ2VDb3VudCAtIDEpO1xuICAgIH1cbiAgfSwgW3BhZ2VDb3VudCwgb25QYWdlQ2hhbmdlLCBwYWdlSW5kZXhdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlTcGFjZXIsIHtcbiAgICBzaXplOiBcIm1cIlxuICB9KSwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVBhZ2luYXRpb24sIHtcbiAgICBhY3RpdmVQYWdlOiBwYWdlSW5kZXgsXG4gICAgc2hvd1BlclBhZ2VPcHRpb25zOiBzaG93UGVyUGFnZU9wdGlvbnMsXG4gICAgaXRlbXNQZXJQYWdlOiBwYWdlU2l6ZSxcbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zOiBwYWdlU2l6ZU9wdGlvbnMsXG4gICAgcGFnZUNvdW50OiBwYWdlQ291bnQsXG4gICAgb25DaGFuZ2VJdGVtc1BlclBhZ2U6IG9uUGFnZVNpemVDaGFuZ2UsXG4gICAgb25DaGFuZ2VQYWdlOiBvblBhZ2VDaGFuZ2UsXG4gICAgXCJhcmlhLWNvbnRyb2xzXCI6IGFyaWFDb250cm9scyxcbiAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsXG4gIH0pKTtcbn07IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKGUsIHQpIHsgcmV0dXJuIHQgfHwgKHQgPSBlLnNsaWNlKDApKSwgT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZSh0KSB9IH0pKTsgfVxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBldWlDYW50QW5pbWF0ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciB0YWJsZUxvYWRpbmdMaW5lID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIGZyb20ge1xcbiAgICBcIiwgXCJcXG4gICAgXCIsIFwiXFxuICB9XFxuXFxuICAyMCUge1xcbiAgICBcIiwgXCJcXG4gICAgXCIsIFwiXFxuICB9XFxuXFxuICA4MCUge1xcbiAgICBcIiwgXCJcXG4gICAgXCIsIFwiXFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgXCIsIFwiXFxuICAgIFwiLCBcIlxcbiAgfVxcblwiXSkpLCBsb2dpY2FsQ1NTKCdsZWZ0JywgMCksIGxvZ2ljYWxDU1MoJ3dpZHRoJywgMCksIGxvZ2ljYWxDU1MoJ2xlZnQnLCAwKSwgbG9naWNhbENTUygnd2lkdGgnLCAnNDAlJyksIGxvZ2ljYWxDU1MoJ2xlZnQnLCAnNjAlJyksIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzQwJScpLCBsb2dpY2FsQ1NTKCdsZWZ0JywgJzEwMCUnKSwgbG9naWNhbENTUygnd2lkdGgnLCAwKSk7XG5leHBvcnQgdmFyIGV1aUJhc2ljVGFibGVCb2R5TG9hZGluZyA9IGZ1bmN0aW9uIGV1aUJhc2ljVGFibGVCb2R5TG9hZGluZyhfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuOyY6OmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OicnO1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpY2spLCBcIiBiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgXCI7YW5pbWF0aW9uOlwiLCB0YWJsZUxvYWRpbmdMaW5lLCBcIiAxcyBsaW5lYXIgaW5maW5pdGU7XCIsIGV1aUNhbnRBbmltYXRlLCBcInthbmltYXRpb24tZHVyYXRpb246MnM7fX07bGFiZWw6ZXVpQmFzaWNUYWJsZUJvZHlMb2FkaW5nO1wiKTtcbn07XG5cbi8vIEZpeCB0byBtYWtlIHRoZSBsb2FkaW5nIGluZGljYXRvciBwb3NpdGlvbiBjb3JyZWN0bHkgaW4gU2FmYXJpXG4vLyBGb3Igd2hhdGV2ZXIgYW5ub3lpbmcgcmVhc29uLCBTYWZhcmkgZG9lc24ndCByZXNwZWN0IGBwb3NpdGlvbjogcmVsYXRpdmU7YFxuLy8gb24gYHRib2R5YCB3aXRob3V0IGBwb3NpdGlvbjogcmVsYXRpdmVgIG9uIHRoZSBwYXJlbnQgYHRhYmxlYFxuZXhwb3J0IHZhciBzYWZhcmlMb2FkaW5nV29ya2Fyb3VuZCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI2eGJudzQtc2FmYXJpTG9hZGluZ1dvcmthcm91bmRcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO2xhYmVsOnNhZmFyaUxvYWRpbmdXb3JrYXJvdW5kO1wiXG59IDoge1xuICBuYW1lOiBcIjZ4Ym53NC1zYWZhcmlMb2FkaW5nV29ya2Fyb3VuZFwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmU7bGFiZWw6c2FmYXJpTG9hZGluZ1dvcmthcm91bmQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTsiLCAiZXhwb3J0IHZhciBTdWJzY3JpYmFibGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdWJzY3JpYmFibGUoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTdWJzY3JpYmFibGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNhbGxiYWNrID0gbGlzdGVuZXIgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChjYWxsYmFjayk7XG4gICAgdGhpcy5vblN1YnNjcmliZSgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5saXN0ZW5lcnMgPSBfdGhpcy5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBjYWxsYmFjaztcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5vblVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8uaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gaGFzTGlzdGVuZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5sZW5ndGggPiAwO1xuICB9O1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkgey8vIERvIG5vdGhpbmdcbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7Ly8gRG8gbm90aGluZ1xuICB9O1xuXG4gIHJldHVybiBTdWJzY3JpYmFibGU7XG59KCk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuLy8gVFlQRVNcbi8vIFVUSUxTXG5leHBvcnQgdmFyIGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpIHtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmdW5jdGlvbmFsVXBkYXRlKHVwZGF0ZXIsIGlucHV0KSB7XG4gIHJldHVybiB0eXBlb2YgdXBkYXRlciA9PT0gJ2Z1bmN0aW9uJyA/IHVwZGF0ZXIoaW5wdXQpIDogdXBkYXRlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGltZW91dCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwICYmIHZhbHVlICE9PSBJbmZpbml0eTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVRdWVyeUtleUFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlKGFycmF5MSwgYXJyYXkyKSB7XG4gIHJldHVybiBhcnJheTEuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIGFycmF5Mi5pbmRleE9mKHgpID09PSAtMTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUF0KGFycmF5LCBpbmRleCwgdmFsdWUpIHtcbiAgdmFyIGNvcHkgPSBhcnJheS5zbGljZSgwKTtcbiAgY29weVtpbmRleF0gPSB2YWx1ZTtcbiAgcmV0dXJuIGNvcHk7XG59XG5leHBvcnQgZnVuY3Rpb24gdGltZVVudGlsU3RhbGUodXBkYXRlZEF0LCBzdGFsZVRpbWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHVwZGF0ZWRBdCArIChzdGFsZVRpbWUgfHwgMCkgLSBEYXRlLm5vdygpLCAwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIGlmICghaXNRdWVyeUtleShhcmcxKSkge1xuICAgIHJldHVybiBhcmcxO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhcmcyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmczLCB7XG4gICAgICBxdWVyeUtleTogYXJnMSxcbiAgICAgIHF1ZXJ5Rm46IGFyZzJcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIHF1ZXJ5S2V5OiBhcmcxXG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXV0YXRpb25BcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKGlzUXVlcnlLZXkoYXJnMSkpIHtcbiAgICBpZiAodHlwZW9mIGFyZzIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMywge1xuICAgICAgICBtdXRhdGlvbktleTogYXJnMSxcbiAgICAgICAgbXV0YXRpb25GbjogYXJnMlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgICBtdXRhdGlvbktleTogYXJnMVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhcmcxID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgICBtdXRhdGlvbkZuOiBhcmcxXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzEpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIHJldHVybiBpc1F1ZXJ5S2V5KGFyZzEpID8gW19leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgcXVlcnlLZXk6IGFyZzFcbiAgfSksIGFyZzNdIDogW2FyZzEgfHwge30sIGFyZzJdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXV0YXRpb25GaWx0ZXJBcmdzKGFyZzEsIGFyZzIpIHtcbiAgcmV0dXJuIGlzUXVlcnlLZXkoYXJnMSkgPyBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIG11dGF0aW9uS2V5OiBhcmcxXG4gIH0pIDogYXJnMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXBRdWVyeVN0YXR1c0ZpbHRlcihhY3RpdmUsIGluYWN0aXZlKSB7XG4gIGlmIChhY3RpdmUgPT09IHRydWUgJiYgaW5hY3RpdmUgPT09IHRydWUgfHwgYWN0aXZlID09IG51bGwgJiYgaW5hY3RpdmUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnYWxsJztcbiAgfSBlbHNlIGlmIChhY3RpdmUgPT09IGZhbHNlICYmIGluYWN0aXZlID09PSBmYWxzZSkge1xuICAgIHJldHVybiAnbm9uZSc7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXQgdGhpcyBwb2ludCwgYWN0aXZlfGluYWN0aXZlIGNhbiBvbmx5IGJlIHRydWV8ZmFsc2Ugb3IgZmFsc2V8dHJ1ZVxuICAgIC8vIHNvLCB3aGVuIG9ubHkgb25lIHZhbHVlIGlzIHByb3ZpZGVkLCB0aGUgbWlzc2luZyBvbmUgaGFzIHRvIGJlIHRoZSBuZWdhdGVkIHZhbHVlXG4gICAgdmFyIGlzQWN0aXZlID0gYWN0aXZlICE9IG51bGwgPyBhY3RpdmUgOiAhaW5hY3RpdmU7XG4gICAgcmV0dXJuIGlzQWN0aXZlID8gJ2FjdGl2ZScgOiAnaW5hY3RpdmUnO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSkge1xuICB2YXIgYWN0aXZlID0gZmlsdGVycy5hY3RpdmUsXG4gICAgICBleGFjdCA9IGZpbHRlcnMuZXhhY3QsXG4gICAgICBmZXRjaGluZyA9IGZpbHRlcnMuZmV0Y2hpbmcsXG4gICAgICBpbmFjdGl2ZSA9IGZpbHRlcnMuaW5hY3RpdmUsXG4gICAgICBwcmVkaWNhdGUgPSBmaWx0ZXJzLnByZWRpY2F0ZSxcbiAgICAgIHF1ZXJ5S2V5ID0gZmlsdGVycy5xdWVyeUtleSxcbiAgICAgIHN0YWxlID0gZmlsdGVycy5zdGFsZTtcblxuICBpZiAoaXNRdWVyeUtleShxdWVyeUtleSkpIHtcbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChxdWVyeS5xdWVyeUhhc2ggIT09IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgcXVlcnkub3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShxdWVyeS5xdWVyeUtleSwgcXVlcnlLZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdmFyIHF1ZXJ5U3RhdHVzRmlsdGVyID0gbWFwUXVlcnlTdGF0dXNGaWx0ZXIoYWN0aXZlLCBpbmFjdGl2ZSk7XG5cbiAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnbm9uZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgIT09ICdhbGwnKSB7XG4gICAgdmFyIGlzQWN0aXZlID0gcXVlcnkuaXNBY3RpdmUoKTtcblxuICAgIGlmIChxdWVyeVN0YXR1c0ZpbHRlciA9PT0gJ2FjdGl2ZScgJiYgIWlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnaW5hY3RpdmUnICYmIGlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdGFsZSA9PT0gJ2Jvb2xlYW4nICYmIHF1ZXJ5LmlzU3RhbGUoKSAhPT0gc3RhbGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGZldGNoaW5nID09PSAnYm9vbGVhbicgJiYgcXVlcnkuaXNGZXRjaGluZygpICE9PSBmZXRjaGluZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcmVkaWNhdGUgJiYgIXByZWRpY2F0ZShxdWVyeSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKSB7XG4gIHZhciBleGFjdCA9IGZpbHRlcnMuZXhhY3QsXG4gICAgICBmZXRjaGluZyA9IGZpbHRlcnMuZmV0Y2hpbmcsXG4gICAgICBwcmVkaWNhdGUgPSBmaWx0ZXJzLnByZWRpY2F0ZSxcbiAgICAgIG11dGF0aW9uS2V5ID0gZmlsdGVycy5tdXRhdGlvbktleTtcblxuICBpZiAoaXNRdWVyeUtleShtdXRhdGlvbktleSkpIHtcbiAgICBpZiAoIW11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChoYXNoUXVlcnlLZXkobXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkgIT09IGhhc2hRdWVyeUtleShtdXRhdGlvbktleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5LCBtdXRhdGlvbktleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGZldGNoaW5nID09PSAnYm9vbGVhbicgJiYgbXV0YXRpb24uc3RhdGUuc3RhdHVzID09PSAnbG9hZGluZycgIT09IGZldGNoaW5nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZWRpY2F0ZSAmJiAhcHJlZGljYXRlKG11dGF0aW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgb3B0aW9ucykge1xuICB2YXIgaGFzaEZuID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucXVlcnlLZXlIYXNoRm4pIHx8IGhhc2hRdWVyeUtleTtcbiAgcmV0dXJuIGhhc2hGbihxdWVyeUtleSk7XG59XG4vKipcbiAqIERlZmF1bHQgcXVlcnkga2V5cyBoYXNoIGZ1bmN0aW9uLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoUXVlcnlLZXkocXVlcnlLZXkpIHtcbiAgdmFyIGFzQXJyYXkgPSBlbnN1cmVRdWVyeUtleUFycmF5KHF1ZXJ5S2V5KTtcbiAgcmV0dXJuIHN0YWJsZVZhbHVlSGFzaChhc0FycmF5KTtcbn1cbi8qKlxuICogSGFzaGVzIHRoZSB2YWx1ZSBpbnRvIGEgc3RhYmxlIGhhc2guXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YWJsZVZhbHVlSGFzaCh2YWx1ZSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIGZ1bmN0aW9uIChfLCB2YWwpIHtcbiAgICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWwpID8gT2JqZWN0LmtleXModmFsKS5zb3J0KCkucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWxba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pIDogdmFsO1xuICB9KTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGtleSBgYmAgcGFydGlhbGx5IG1hdGNoZXMgd2l0aCBrZXkgYGFgLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2hLZXkoYSwgYikge1xuICByZXR1cm4gcGFydGlhbERlZXBFcXVhbChlbnN1cmVRdWVyeUtleUFycmF5KGEpLCBlbnN1cmVRdWVyeUtleUFycmF5KGIpKTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGBiYCBwYXJ0aWFsbHkgbWF0Y2hlcyB3aXRoIGBhYC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbERlZXBFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGEgJiYgYiAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuICFPYmplY3Qua2V5cyhiKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiAhcGFydGlhbERlZXBFcXVhbChhW2tleV0sIGJba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBgYWAgaWYgYGJgIGlzIGRlZXBseSBlcXVhbC5cbiAqIElmIG5vdCwgaXQgd2lsbCByZXBsYWNlIGFueSBkZWVwbHkgZXF1YWwgY2hpbGRyZW4gb2YgYGJgIHdpdGggdGhvc2Ugb2YgYGFgLlxuICogVGhpcyBjYW4gYmUgdXNlZCBmb3Igc3RydWN0dXJhbCBzaGFyaW5nIGJldHdlZW4gSlNPTiB2YWx1ZXMgZm9yIGV4YW1wbGUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VFcXVhbERlZXAoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiBhO1xuICB9XG5cbiAgdmFyIGFycmF5ID0gQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpO1xuXG4gIGlmIChhcnJheSB8fCBpc1BsYWluT2JqZWN0KGEpICYmIGlzUGxhaW5PYmplY3QoYikpIHtcbiAgICB2YXIgYVNpemUgPSBhcnJheSA/IGEubGVuZ3RoIDogT2JqZWN0LmtleXMoYSkubGVuZ3RoO1xuICAgIHZhciBiSXRlbXMgPSBhcnJheSA/IGIgOiBPYmplY3Qua2V5cyhiKTtcbiAgICB2YXIgYlNpemUgPSBiSXRlbXMubGVuZ3RoO1xuICAgIHZhciBjb3B5ID0gYXJyYXkgPyBbXSA6IHt9O1xuICAgIHZhciBlcXVhbEl0ZW1zID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYlNpemU7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGFycmF5ID8gaSA6IGJJdGVtc1tpXTtcbiAgICAgIGNvcHlba2V5XSA9IHJlcGxhY2VFcXVhbERlZXAoYVtrZXldLCBiW2tleV0pO1xuXG4gICAgICBpZiAoY29weVtrZXldID09PSBhW2tleV0pIHtcbiAgICAgICAgZXF1YWxJdGVtcysrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhU2l6ZSA9PT0gYlNpemUgJiYgZXF1YWxJdGVtcyA9PT0gYVNpemUgPyBhIDogY29weTtcbiAgfVxuXG4gIHJldHVybiBiO1xufVxuLyoqXG4gKiBTaGFsbG93IGNvbXBhcmUgb2JqZWN0cy4gT25seSB3b3JrcyB3aXRoIG9iamVjdHMgdGhhdCBhbHdheXMgaGF2ZSB0aGUgc2FtZSBwcm9wZXJ0aWVzLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RXF1YWxPYmplY3RzKGEsIGIpIHtcbiAgaWYgKGEgJiYgIWIgfHwgYiAmJiAhYSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGtleSBpbiBhKSB7XG4gICAgaWYgKGFba2V5XSAhPT0gYltrZXldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59IC8vIENvcGllZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1wbGFpbi1vYmplY3RcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qobykge1xuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiBoYXMgbW9kaWZpZWQgY29uc3RydWN0b3JcblxuXG4gIHZhciBjdG9yID0gby5jb25zdHJ1Y3RvcjtcblxuICBpZiAodHlwZW9mIGN0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSWYgaGFzIG1vZGlmaWVkIHByb3RvdHlwZVxuXG5cbiAgdmFyIHByb3QgPSBjdG9yLnByb3RvdHlwZTtcblxuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShwcm90KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiBjb25zdHJ1Y3RvciBkb2VzIG5vdCBoYXZlIGFuIE9iamVjdC1zcGVjaWZpYyBtZXRob2RcblxuXG4gIGlmICghcHJvdC5oYXNPd25Qcm9wZXJ0eSgnaXNQcm90b3R5cGVPZicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIE1vc3QgbGlrZWx5IGEgcGxhaW4gT2JqZWN0XG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaGFzT2JqZWN0UHJvdG90eXBlKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1F1ZXJ5S2V5KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRXJyb3I7XG59XG5leHBvcnQgZnVuY3Rpb24gc2xlZXAodGltZW91dCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpO1xuICB9KTtcbn1cbi8qKlxuICogU2NoZWR1bGVzIGEgbWljcm90YXNrLlxuICogVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHNjaGVkdWxlIHN0YXRlIHVwZGF0ZXMgYWZ0ZXIgcmVuZGVyaW5nLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZU1pY3JvdGFzayhjYWxsYmFjaykge1xuICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGNhbGxiYWNrKS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJvcnRDb250cm9sbGVyKCkge1xuICBpZiAodHlwZW9mIEFib3J0Q29udHJvbGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIH1cbn0iLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG5pbXBvcnQgeyBpc1NlcnZlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHZhciBGb2N1c01hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoRm9jdXNNYW5hZ2VyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBGb2N1c01hbmFnZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcblxuICAgIF90aGlzLnNldHVwID0gZnVuY3Rpb24gKG9uRm9jdXMpIHtcbiAgICAgIHZhciBfd2luZG93O1xuXG4gICAgICBpZiAoIWlzU2VydmVyICYmICgoX3dpbmRvdyA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIG9uRm9jdXMoKTtcbiAgICAgICAgfTsgLy8gTGlzdGVuIHRvIHZpc2liaWxsaXR5Y2hhbmdlIGFuZCBmb2N1c1xuXG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIEJlIHN1cmUgdG8gdW5zdWJzY3JpYmUgaWYgYSBuZXcgaGFuZGxlciBpcyBzZXRcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGxpc3RlbmVyKTtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBGb2N1c01hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5jbGVhbnVwKSB7XG4gICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIodGhpcy5zZXR1cCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHZhciBfdGhpcyRjbGVhbnVwO1xuXG4gICAgICAoX3RoaXMkY2xlYW51cCA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAuY2FsbCh0aGlzKTtcbiAgICAgIHRoaXMuY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyKHNldHVwKSB7XG4gICAgdmFyIF90aGlzJGNsZWFudXAyLFxuICAgICAgICBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5zZXR1cCA9IHNldHVwO1xuICAgIChfdGhpcyRjbGVhbnVwMiA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5jbGVhbnVwID0gc2V0dXAoZnVuY3Rpb24gKGZvY3VzZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIF90aGlzMi5zZXRGb2N1c2VkKGZvY3VzZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMyLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0Rm9jdXNlZCA9IGZ1bmN0aW9uIHNldEZvY3VzZWQoZm9jdXNlZCkge1xuICAgIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XG5cbiAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgdGhpcy5vbkZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNGb2N1c2VkID0gZnVuY3Rpb24gaXNGb2N1c2VkKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5mb2N1c2VkID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvY3VzZWQ7XG4gICAgfSAvLyBkb2N1bWVudCBnbG9iYWwgY2FuIGJlIHVuYXZhaWxhYmxlIGluIHJlYWN0IG5hdGl2ZVxuXG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIFt1bmRlZmluZWQsICd2aXNpYmxlJywgJ3ByZXJlbmRlciddLmluY2x1ZGVzKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSk7XG4gIH07XG5cbiAgcmV0dXJuIEZvY3VzTWFuYWdlcjtcbn0oU3Vic2NyaWJhYmxlKTtcbmV4cG9ydCB2YXIgZm9jdXNNYW5hZ2VyID0gbmV3IEZvY3VzTWFuYWdlcigpOyIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIE9ubGluZU1hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoT25saW5lTWFuYWdlciwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gT25saW5lTWFuYWdlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc2V0dXAgPSBmdW5jdGlvbiAob25PbmxpbmUpIHtcbiAgICAgIHZhciBfd2luZG93O1xuXG4gICAgICBpZiAoIWlzU2VydmVyICYmICgoX3dpbmRvdyA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIG9uT25saW5lKCk7XG4gICAgICAgIH07IC8vIExpc3RlbiB0byBvbmxpbmVcblxuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQmUgc3VyZSB0byB1bnN1YnNjcmliZSBpZiBhIG5ldyBoYW5kbGVyIGlzIHNldFxuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBsaXN0ZW5lcik7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBPbmxpbmVNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuY2xlYW51cCkge1xuICAgICAgdGhpcy5zZXRFdmVudExpc3RlbmVyKHRoaXMuc2V0dXApO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB2YXIgX3RoaXMkY2xlYW51cDtcblxuICAgICAgKF90aGlzJGNsZWFudXAgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwLmNhbGwodGhpcyk7XG4gICAgICB0aGlzLmNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gc2V0RXZlbnRMaXN0ZW5lcihzZXR1cCkge1xuICAgIHZhciBfdGhpcyRjbGVhbnVwMixcbiAgICAgICAgX3RoaXMyID0gdGhpcztcblxuICAgIHRoaXMuc2V0dXAgPSBzZXR1cDtcbiAgICAoX3RoaXMkY2xlYW51cDIgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwMi5jYWxsKHRoaXMpO1xuICAgIHRoaXMuY2xlYW51cCA9IHNldHVwKGZ1bmN0aW9uIChvbmxpbmUpIHtcbiAgICAgIGlmICh0eXBlb2Ygb25saW5lID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgX3RoaXMyLnNldE9ubGluZShvbmxpbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMyLm9uT25saW5lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE9ubGluZSA9IGZ1bmN0aW9uIHNldE9ubGluZShvbmxpbmUpIHtcbiAgICB0aGlzLm9ubGluZSA9IG9ubGluZTtcblxuICAgIGlmIChvbmxpbmUpIHtcbiAgICAgIHRoaXMub25PbmxpbmUoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzT25saW5lID0gZnVuY3Rpb24gaXNPbmxpbmUoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLm9ubGluZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gdGhpcy5vbmxpbmU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBuYXZpZ2F0b3Iub25MaW5lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvci5vbkxpbmU7XG4gIH07XG5cbiAgcmV0dXJuIE9ubGluZU1hbmFnZXI7XG59KFN1YnNjcmliYWJsZSk7XG5leHBvcnQgdmFyIG9ubGluZU1hbmFnZXIgPSBuZXcgT25saW5lTWFuYWdlcigpOyIsICJpbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnLi91dGlscyc7XG5cbmZ1bmN0aW9uIGRlZmF1bHRSZXRyeURlbGF5KGZhaWx1cmVDb3VudCkge1xuICByZXR1cm4gTWF0aC5taW4oMTAwMCAqIE1hdGgucG93KDIsIGZhaWx1cmVDb3VudCksIDMwMDAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mICh2YWx1ZSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWUuY2FuY2VsKSA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydCB2YXIgQ2FuY2VsbGVkRXJyb3IgPSBmdW5jdGlvbiBDYW5jZWxsZWRFcnJvcihvcHRpb25zKSB7XG4gIHRoaXMucmV2ZXJ0ID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZXZlcnQ7XG4gIHRoaXMuc2lsZW50ID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5zaWxlbnQ7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsbGVkRXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQ2FuY2VsbGVkRXJyb3I7XG59IC8vIENMQVNTXG5cbmV4cG9ydCB2YXIgUmV0cnllciA9IGZ1bmN0aW9uIFJldHJ5ZXIoY29uZmlnKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIGNhbmNlbFJldHJ5ID0gZmFsc2U7XG4gIHZhciBjYW5jZWxGbjtcbiAgdmFyIGNvbnRpbnVlRm47XG4gIHZhciBwcm9taXNlUmVzb2x2ZTtcbiAgdmFyIHByb21pc2VSZWplY3Q7XG4gIHRoaXMuYWJvcnQgPSBjb25maWcuYWJvcnQ7XG5cbiAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbiAoY2FuY2VsT3B0aW9ucykge1xuICAgIHJldHVybiBjYW5jZWxGbiA9PSBudWxsID8gdm9pZCAwIDogY2FuY2VsRm4oY2FuY2VsT3B0aW9ucyk7XG4gIH07XG5cbiAgdGhpcy5jYW5jZWxSZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjYW5jZWxSZXRyeSA9IHRydWU7XG4gIH07XG5cbiAgdGhpcy5jb250aW51ZVJldHJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIGNhbmNlbFJldHJ5ID0gZmFsc2U7XG4gIH07XG5cbiAgdGhpcy5jb250aW51ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICB9O1xuXG4gIHRoaXMuZmFpbHVyZUNvdW50ID0gMDtcbiAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICB0aGlzLmlzUmVzb2x2ZWQgPSBmYWxzZTtcbiAgdGhpcy5pc1RyYW5zcG9ydENhbmNlbGFibGUgPSBmYWxzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKG91dGVyUmVzb2x2ZSwgb3V0ZXJSZWplY3QpIHtcbiAgICBwcm9taXNlUmVzb2x2ZSA9IG91dGVyUmVzb2x2ZTtcbiAgICBwcm9taXNlUmVqZWN0ID0gb3V0ZXJSZWplY3Q7XG4gIH0pO1xuXG4gIHZhciByZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSh2YWx1ZSkge1xuICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgX3RoaXMuaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25TdWNjZXNzKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRpbnVlRm4oKTtcbiAgICAgIHByb21pc2VSZXNvbHZlKHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHJlamVjdCA9IGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkge1xuICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgX3RoaXMuaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uRXJyb3IodmFsdWUpO1xuICAgICAgY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICAgICAgcHJvbWlzZVJlamVjdCh2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwYXVzZSA9IGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoY29udGludWVSZXNvbHZlKSB7XG4gICAgICBjb250aW51ZUZuID0gY29udGludWVSZXNvbHZlO1xuICAgICAgX3RoaXMuaXNQYXVzZWQgPSB0cnVlO1xuICAgICAgY29uZmlnLm9uUGF1c2UgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vblBhdXNlKCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBjb250aW51ZUZuID0gdW5kZWZpbmVkO1xuICAgICAgX3RoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIGNvbmZpZy5vbkNvbnRpbnVlID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25Db250aW51ZSgpO1xuICAgIH0pO1xuICB9OyAvLyBDcmVhdGUgbG9vcCBmdW5jdGlvblxuXG5cbiAgdmFyIHJ1biA9IGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAvLyBEbyBub3RoaW5nIGlmIGFscmVhZHkgcmVzb2x2ZWRcbiAgICBpZiAoX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9taXNlT3JWYWx1ZTsgLy8gRXhlY3V0ZSBxdWVyeVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gY29uZmlnLmZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH0gLy8gQ3JlYXRlIGNhbGxiYWNrIHRvIGNhbmNlbCB0aGlzIGZldGNoXG5cblxuICAgIGNhbmNlbEZuID0gZnVuY3Rpb24gY2FuY2VsRm4oY2FuY2VsT3B0aW9ucykge1xuICAgICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICAgIHJlamVjdChuZXcgQ2FuY2VsbGVkRXJyb3IoY2FuY2VsT3B0aW9ucykpO1xuICAgICAgICBfdGhpcy5hYm9ydCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMuYWJvcnQoKTsgLy8gQ2FuY2VsIHRyYW5zcG9ydCBpZiBzdXBwb3J0ZWRcblxuICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHByb21pc2VPclZhbHVlKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwcm9taXNlT3JWYWx1ZS5jYW5jZWwoKTtcbiAgICAgICAgICB9IGNhdGNoIChfdW51c2VkKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTsgLy8gQ2hlY2sgaWYgdGhlIHRyYW5zcG9ydCBsYXllciBzdXBwb3J0IGNhbmNlbGxhdGlvblxuXG5cbiAgICBfdGhpcy5pc1RyYW5zcG9ydENhbmNlbGFibGUgPSBpc0NhbmNlbGFibGUocHJvbWlzZU9yVmFsdWUpO1xuICAgIFByb21pc2UucmVzb2x2ZShwcm9taXNlT3JWYWx1ZSkudGhlbihyZXNvbHZlKS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIHZhciBfY29uZmlnJHJldHJ5LCBfY29uZmlnJHJldHJ5RGVsYXk7XG5cbiAgICAgIC8vIFN0b3AgaWYgdGhlIGZldGNoIGlzIGFscmVhZHkgcmVzb2x2ZWRcbiAgICAgIGlmIChfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRG8gd2UgbmVlZCB0byByZXRyeSB0aGUgcmVxdWVzdD9cblxuXG4gICAgICB2YXIgcmV0cnkgPSAoX2NvbmZpZyRyZXRyeSA9IGNvbmZpZy5yZXRyeSkgIT0gbnVsbCA/IF9jb25maWckcmV0cnkgOiAzO1xuICAgICAgdmFyIHJldHJ5RGVsYXkgPSAoX2NvbmZpZyRyZXRyeURlbGF5ID0gY29uZmlnLnJldHJ5RGVsYXkpICE9IG51bGwgPyBfY29uZmlnJHJldHJ5RGVsYXkgOiBkZWZhdWx0UmV0cnlEZWxheTtcbiAgICAgIHZhciBkZWxheSA9IHR5cGVvZiByZXRyeURlbGF5ID09PSAnZnVuY3Rpb24nID8gcmV0cnlEZWxheShfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKSA6IHJldHJ5RGVsYXk7XG4gICAgICB2YXIgc2hvdWxkUmV0cnkgPSByZXRyeSA9PT0gdHJ1ZSB8fCB0eXBlb2YgcmV0cnkgPT09ICdudW1iZXInICYmIF90aGlzLmZhaWx1cmVDb3VudCA8IHJldHJ5IHx8IHR5cGVvZiByZXRyeSA9PT0gJ2Z1bmN0aW9uJyAmJiByZXRyeShfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKTtcblxuICAgICAgaWYgKGNhbmNlbFJldHJ5IHx8ICFzaG91bGRSZXRyeSkge1xuICAgICAgICAvLyBXZSBhcmUgZG9uZSBpZiB0aGUgcXVlcnkgZG9lcyBub3QgbmVlZCB0byBiZSByZXRyaWVkXG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuZmFpbHVyZUNvdW50Kys7IC8vIE5vdGlmeSBvbiBmYWlsXG5cbiAgICAgIGNvbmZpZy5vbkZhaWwgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkZhaWwoX3RoaXMuZmFpbHVyZUNvdW50LCBlcnJvcik7IC8vIERlbGF5XG5cbiAgICAgIHNsZWVwKGRlbGF5KSAvLyBQYXVzZSBpZiB0aGUgZG9jdW1lbnQgaXMgbm90IHZpc2libGUgb3Igd2hlbiB0aGUgZGV2aWNlIGlzIG9mZmxpbmVcbiAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgfHwgIW9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICAgIHJldHVybiBwYXVzZSgpO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNhbmNlbFJldHJ5KSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBydW4oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07IC8vIFN0YXJ0IGxvb3BcblxuXG4gIHJ1bigpO1xufTsiLCAiaW1wb3J0IHsgc2NoZWR1bGVNaWNyb3Rhc2sgfSBmcm9tICcuL3V0aWxzJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTm90aWZ5TWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE5vdGlmeU1hbmFnZXIoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMudHJhbnNhY3Rpb25zID0gMDtcblxuICAgIHRoaXMubm90aWZ5Rm4gPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcblxuICAgIHRoaXMuYmF0Y2hOb3RpZnlGbiA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE5vdGlmeU1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5iYXRjaCA9IGZ1bmN0aW9uIGJhdGNoKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICB0aGlzLnRyYW5zYWN0aW9ucysrO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25zLS07XG5cbiAgICAgIGlmICghdGhpcy50cmFuc2FjdGlvbnMpIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLnNjaGVkdWxlID0gZnVuY3Rpb24gc2NoZWR1bGUoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb25zKSB7XG4gICAgICB0aGlzLnF1ZXVlLnB1c2goY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2hlZHVsZU1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLm5vdGlmeUZuKGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQWxsIGNhbGxzIHRvIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIHdpbGwgYmUgYmF0Y2hlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmF0Y2hDYWxscyA9IGZ1bmN0aW9uIGJhdGNoQ2FsbHMoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FsbGJhY2suYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgcXVldWUgPSB0aGlzLnF1ZXVlO1xuICAgIHRoaXMucXVldWUgPSBbXTtcblxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLmJhdGNoTm90aWZ5Rm4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHF1ZXVlLmZvckVhY2goZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfdGhpczMubm90aWZ5Rm4oY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBub3RpZnkgZnVuY3Rpb24uXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yIGV4YW1wbGUgd3JhcCBub3RpZmljYXRpb25zIHdpdGggYFJlYWN0LmFjdGAgd2hpbGUgcnVubmluZyB0ZXN0cy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0Tm90aWZ5RnVuY3Rpb24gPSBmdW5jdGlvbiBzZXROb3RpZnlGdW5jdGlvbihmbikge1xuICAgIHRoaXMubm90aWZ5Rm4gPSBmbjtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBmdW5jdGlvbiB0byBiYXRjaCBub3RpZmljYXRpb25zIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgdGljay5cbiAgICogQnkgZGVmYXVsdCBSZWFjdCBRdWVyeSB3aWxsIHVzZSB0aGUgYmF0Y2ggZnVuY3Rpb24gcHJvdmlkZWQgYnkgUmVhY3RET00gb3IgUmVhY3QgTmF0aXZlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXRCYXRjaE5vdGlmeUZ1bmN0aW9uID0gZnVuY3Rpb24gc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbihmbikge1xuICAgIHRoaXMuYmF0Y2hOb3RpZnlGbiA9IGZuO1xuICB9O1xuXG4gIHJldHVybiBOb3RpZnlNYW5hZ2VyO1xufSgpOyAvLyBTSU5HTEVUT05cblxuZXhwb3J0IHZhciBub3RpZnlNYW5hZ2VyID0gbmV3IE5vdGlmeU1hbmFnZXIoKTsiLCAiLy8gVFlQRVNcbi8vIEZVTkNUSU9OU1xudmFyIGxvZ2dlciA9IGNvbnNvbGU7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyKCkge1xuICByZXR1cm4gbG9nZ2VyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldExvZ2dlcihuZXdMb2dnZXIpIHtcbiAgbG9nZ2VyID0gbmV3TG9nZ2VyO1xufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGdldEFib3J0Q29udHJvbGxlciwgZnVuY3Rpb25hbFVwZGF0ZSwgaXNWYWxpZFRpbWVvdXQsIG5vb3AsIHJlcGxhY2VFcXVhbERlZXAsIHRpbWVVbnRpbFN0YWxlLCBlbnN1cmVRdWVyeUtleUFycmF5IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IFJldHJ5ZXIsIGlzQ2FuY2VsbGVkRXJyb3IgfSBmcm9tICcuL3JldHJ5ZXInOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBRdWVyeSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFF1ZXJ5KGNvbmZpZykge1xuICAgIHRoaXMuYWJvcnRTaWduYWxDb25zdW1lZCA9IGZhbHNlO1xuICAgIHRoaXMuaGFkT2JzZXJ2ZXJzID0gZmFsc2U7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGNvbmZpZy5kZWZhdWx0T3B0aW9ucztcbiAgICB0aGlzLnNldE9wdGlvbnMoY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5jYWNoZSA9IGNvbmZpZy5jYWNoZTtcbiAgICB0aGlzLnF1ZXJ5S2V5ID0gY29uZmlnLnF1ZXJ5S2V5O1xuICAgIHRoaXMucXVlcnlIYXNoID0gY29uZmlnLnF1ZXJ5SGFzaDtcbiAgICB0aGlzLmluaXRpYWxTdGF0ZSA9IGNvbmZpZy5zdGF0ZSB8fCB0aGlzLmdldERlZmF1bHRTdGF0ZSh0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmluaXRpYWxTdGF0ZTtcbiAgICB0aGlzLm1ldGEgPSBjb25maWcubWV0YTtcbiAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldE9wdGlvbnMgPSBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMkb3B0aW9ucyRjYWNoZVRpO1xuXG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe30sIHRoaXMuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIHRoaXMubWV0YSA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubWV0YTsgLy8gRGVmYXVsdCB0byA1IG1pbnV0ZXMgaWYgbm90IGNhY2hlIHRpbWUgaXMgc2V0XG5cbiAgICB0aGlzLmNhY2hlVGltZSA9IE1hdGgubWF4KHRoaXMuY2FjaGVUaW1lIHx8IDAsIChfdGhpcyRvcHRpb25zJGNhY2hlVGkgPSB0aGlzLm9wdGlvbnMuY2FjaGVUaW1lKSAhPSBudWxsID8gX3RoaXMkb3B0aW9ucyRjYWNoZVRpIDogNSAqIDYwICogMTAwMCk7XG4gIH07XG5cbiAgX3Byb3RvLnNldERlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zO1xuICB9O1xuXG4gIF9wcm90by5zY2hlZHVsZUdjID0gZnVuY3Rpb24gc2NoZWR1bGVHYygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuXG4gICAgaWYgKGlzVmFsaWRUaW1lb3V0KHRoaXMuY2FjaGVUaW1lKSkge1xuICAgICAgdGhpcy5nY1RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMub3B0aW9uYWxSZW1vdmUoKTtcbiAgICAgIH0sIHRoaXMuY2FjaGVUaW1lKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyR2NUaW1lb3V0ID0gZnVuY3Rpb24gY2xlYXJHY1RpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMuZ2NUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5nY1RpbWVvdXQpO1xuICAgICAgdGhpcy5nY1RpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vcHRpb25hbFJlbW92ZSA9IGZ1bmN0aW9uIG9wdGlvbmFsUmVtb3ZlKCkge1xuICAgIGlmICghdGhpcy5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5pc0ZldGNoaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmhhZE9ic2VydmVycykge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNhY2hlLnJlbW92ZSh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldERhdGEgPSBmdW5jdGlvbiBzZXREYXRhKHVwZGF0ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMkb3B0aW9ucyRpc0RhdGFFLCBfdGhpcyRvcHRpb25zO1xuXG4gICAgdmFyIHByZXZEYXRhID0gdGhpcy5zdGF0ZS5kYXRhOyAvLyBHZXQgdGhlIG5ldyBkYXRhXG5cbiAgICB2YXIgZGF0YSA9IGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgcHJldkRhdGEpOyAvLyBVc2UgcHJldiBkYXRhIGlmIGFuIGlzRGF0YUVxdWFsIGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIHJldHVybnMgYHRydWVgXG5cbiAgICBpZiAoKF90aGlzJG9wdGlvbnMkaXNEYXRhRSA9IChfdGhpcyRvcHRpb25zID0gdGhpcy5vcHRpb25zKS5pc0RhdGFFcXVhbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkaXNEYXRhRS5jYWxsKF90aGlzJG9wdGlvbnMsIHByZXZEYXRhLCBkYXRhKSkge1xuICAgICAgZGF0YSA9IHByZXZEYXRhO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgICAgLy8gU3RydWN0dXJhbGx5IHNoYXJlIGRhdGEgYmV0d2VlbiBwcmV2IGFuZCBuZXcgZGF0YSBpZiBuZWVkZWRcbiAgICAgIGRhdGEgPSByZXBsYWNlRXF1YWxEZWVwKHByZXZEYXRhLCBkYXRhKTtcbiAgICB9IC8vIFNldCBkYXRhIGFuZCBtYXJrIGl0IGFzIGNhY2hlZFxuXG5cbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnVwZGF0ZWRBdFxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9O1xuXG4gIF9wcm90by5zZXRTdGF0ZSA9IGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlLCBzZXRTdGF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdzZXRTdGF0ZScsXG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRTdGF0ZU9wdGlvbnM6IHNldFN0YXRlT3B0aW9uc1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWwgPSBmdW5jdGlvbiBjYW5jZWwob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyO1xuXG4gICAgdmFyIHByb21pc2UgPSB0aGlzLnByb21pc2U7XG4gICAgKF90aGlzJHJldHJ5ZXIgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyLmNhbmNlbChvcHRpb25zKTtcbiAgICByZXR1cm4gcHJvbWlzZSA/IHByb21pc2UudGhlbihub29wKS5jYXRjaChub29wKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgdGhpcy5jYW5jZWwoe1xuICAgICAgc2lsZW50OiB0cnVlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh0aGlzLmluaXRpYWxTdGF0ZSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzQWN0aXZlID0gZnVuY3Rpb24gaXNBY3RpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXJzLnNvbWUoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICByZXR1cm4gb2JzZXJ2ZXIub3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNGZXRjaGluZyA9IGZ1bmN0aW9uIGlzRmV0Y2hpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNGZXRjaGluZztcbiAgfTtcblxuICBfcHJvdG8uaXNTdGFsZSA9IGZ1bmN0aW9uIGlzU3RhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCB8fCAhdGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0IHx8IHRoaXMub2JzZXJ2ZXJzLnNvbWUoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICByZXR1cm4gb2JzZXJ2ZXIuZ2V0Q3VycmVudFJlc3VsdCgpLmlzU3RhbGU7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzU3RhbGVCeVRpbWUgPSBmdW5jdGlvbiBpc1N0YWxlQnlUaW1lKHN0YWxlVGltZSkge1xuICAgIGlmIChzdGFsZVRpbWUgPT09IHZvaWQgMCkge1xuICAgICAgc3RhbGVUaW1lID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkIHx8ICF0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgfHwgIXRpbWVVbnRpbFN0YWxlKHRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCwgc3RhbGVUaW1lKTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXIyO1xuXG4gICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc2hvdWxkRmV0Y2hPbldpbmRvd0ZvY3VzKCk7XG4gICAgfSk7XG5cbiAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLnJlZmV0Y2goKTtcbiAgICB9IC8vIENvbnRpbnVlIGZldGNoIGlmIGN1cnJlbnRseSBwYXVzZWRcblxuXG4gICAgKF90aGlzJHJldHJ5ZXIyID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllcjIuY29udGludWUoKTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjM7XG5cbiAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC5zaG91bGRGZXRjaE9uUmVjb25uZWN0KCk7XG4gICAgfSk7XG5cbiAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLnJlZmV0Y2goKTtcbiAgICB9IC8vIENvbnRpbnVlIGZldGNoIGlmIGN1cnJlbnRseSBwYXVzZWRcblxuXG4gICAgKF90aGlzJHJldHJ5ZXIzID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllcjMuY29udGludWUoKTtcbiAgfTtcblxuICBfcHJvdG8uYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgICAgdGhpcy5oYWRPYnNlcnZlcnMgPSB0cnVlOyAvLyBTdG9wIHRoZSBxdWVyeSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkXG5cbiAgICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcbiAgICAgIHRoaXMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ29ic2VydmVyQWRkZWQnLFxuICAgICAgICBxdWVyeTogdGhpcyxcbiAgICAgICAgb2JzZXJ2ZXI6IG9ic2VydmVyXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZU9ic2VydmVyID0gZnVuY3Rpb24gcmVtb3ZlT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcikgIT09IC0xKSB7XG4gICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPT0gb2JzZXJ2ZXI7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCF0aGlzLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgLy8gSWYgdGhlIHRyYW5zcG9ydCBsYXllciBkb2VzIG5vdCBzdXBwb3J0IGNhbmNlbGxhdGlvblxuICAgICAgICAvLyB3ZSdsbCBsZXQgdGhlIHF1ZXJ5IGNvbnRpbnVlIHNvIHRoZSByZXN1bHQgY2FuIGJlIGNhY2hlZFxuICAgICAgICBpZiAodGhpcy5yZXRyeWVyKSB7XG4gICAgICAgICAgaWYgKHRoaXMucmV0cnllci5pc1RyYW5zcG9ydENhbmNlbGFibGUgfHwgdGhpcy5hYm9ydFNpZ25hbENvbnN1bWVkKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsKHtcbiAgICAgICAgICAgICAgcmV2ZXJ0OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXRyeWVyLmNhbmNlbFJldHJ5KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2FjaGVUaW1lKSB7XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jYWNoZS5yZW1vdmUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5jYWNoZS5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnb2JzZXJ2ZXJSZW1vdmVkJyxcbiAgICAgICAgcXVlcnk6IHRoaXMsXG4gICAgICAgIG9ic2VydmVyOiBvYnNlcnZlclxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5nZXRPYnNlcnZlcnNDb3VudCA9IGZ1bmN0aW9uIGdldE9ic2VydmVyc0NvdW50KCkge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVycy5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmludmFsaWRhdGUgPSBmdW5jdGlvbiBpbnZhbGlkYXRlKCkge1xuICAgIGlmICghdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ2ludmFsaWRhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoID0gZnVuY3Rpb24gZmV0Y2gob3B0aW9ucywgZmV0Y2hPcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXMsXG4gICAgICAgIF90aGlzJG9wdGlvbnMkYmVoYXZpbyxcbiAgICAgICAgX2NvbnRleHQkZmV0Y2hPcHRpb25zLFxuICAgICAgICBfYWJvcnRDb250cm9sbGVyJGFib3I7XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5pc0ZldGNoaW5nKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0ICYmIChmZXRjaE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoT3B0aW9ucy5jYW5jZWxSZWZldGNoKSkge1xuICAgICAgICAvLyBTaWxlbnRseSBjYW5jZWwgY3VycmVudCBmZXRjaCBpZiB0aGUgdXNlciB3YW50cyB0byBjYW5jZWwgcmVmZXRjaGVzXG4gICAgICAgIHRoaXMuY2FuY2VsKHtcbiAgICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJvbWlzZSkge1xuICAgICAgICB2YXIgX3RoaXMkcmV0cnllcjQ7XG5cbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgcmV0cmllcyB0aGF0IHdlcmUgcG90ZW50aWFsbHkgY2FuY2VsbGVkIGR1ZSB0byB1bm1vdW50cyBjYW4gY29udGludWVcbiAgICAgICAgKF90aGlzJHJldHJ5ZXI0ID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllcjQuY29udGludWVSZXRyeSgpOyAvLyBSZXR1cm4gY3VycmVudCBwcm9taXNlIGlmIHdlIGFyZSBhbHJlYWR5IGZldGNoaW5nXG5cbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgICAgIH1cbiAgICB9IC8vIFVwZGF0ZSBjb25maWcgaWYgcGFzc2VkLCBvdGhlcndpc2UgdGhlIGNvbmZpZyBmcm9tIHRoZSBsYXN0IGV4ZWN1dGlvbiBpcyB1c2VkXG5cblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgfSAvLyBVc2UgdGhlIG9wdGlvbnMgZnJvbSB0aGUgZmlyc3Qgb2JzZXJ2ZXIgd2l0aCBhIHF1ZXJ5IGZ1bmN0aW9uIGlmIG5vIGZ1bmN0aW9uIGlzIGZvdW5kLlxuICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZSBxdWVyeSBpcyBoeWRyYXRlZCBvciBjcmVhdGVkIHdpdGggc2V0UXVlcnlEYXRhLlxuXG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5xdWVyeUZuKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4Lm9wdGlvbnMucXVlcnlGbjtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKG9ic2VydmVyLm9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBxdWVyeUtleSA9IGVuc3VyZVF1ZXJ5S2V5QXJyYXkodGhpcy5xdWVyeUtleSk7XG4gICAgdmFyIGFib3J0Q29udHJvbGxlciA9IGdldEFib3J0Q29udHJvbGxlcigpOyAvLyBDcmVhdGUgcXVlcnkgZnVuY3Rpb24gY29udGV4dFxuXG4gICAgdmFyIHF1ZXJ5Rm5Db250ZXh0ID0ge1xuICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgcGFnZVBhcmFtOiB1bmRlZmluZWQsXG4gICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeUZuQ29udGV4dCwgJ3NpZ25hbCcsIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgaWYgKGFib3J0Q29udHJvbGxlcikge1xuICAgICAgICAgIF90aGlzMi5hYm9ydFNpZ25hbENvbnN1bWVkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7IC8vIENyZWF0ZSBmZXRjaCBmdW5jdGlvblxuXG4gICAgdmFyIGZldGNoRm4gPSBmdW5jdGlvbiBmZXRjaEZuKCkge1xuICAgICAgaWYgKCFfdGhpczIub3B0aW9ucy5xdWVyeUZuKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTWlzc2luZyBxdWVyeUZuJyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzMi5hYm9ydFNpZ25hbENvbnN1bWVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gX3RoaXMyLm9wdGlvbnMucXVlcnlGbihxdWVyeUZuQ29udGV4dCk7XG4gICAgfTsgLy8gVHJpZ2dlciBiZWhhdmlvciBob29rXG5cblxuICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgZmV0Y2hPcHRpb25zOiBmZXRjaE9wdGlvbnMsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgIGZldGNoRm46IGZldGNoRm4sXG4gICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICB9O1xuXG4gICAgaWYgKChfdGhpcyRvcHRpb25zJGJlaGF2aW8gPSB0aGlzLm9wdGlvbnMuYmVoYXZpb3IpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGJlaGF2aW8ub25GZXRjaCkge1xuICAgICAgdmFyIF90aGlzJG9wdGlvbnMkYmVoYXZpbzI7XG5cbiAgICAgIChfdGhpcyRvcHRpb25zJGJlaGF2aW8yID0gdGhpcy5vcHRpb25zLmJlaGF2aW9yKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRiZWhhdmlvMi5vbkZldGNoKGNvbnRleHQpO1xuICAgIH0gLy8gU3RvcmUgc3RhdGUgaW4gY2FzZSB0aGUgY3VycmVudCBmZXRjaCBuZWVkcyB0byBiZSByZXZlcnRlZFxuXG5cbiAgICB0aGlzLnJldmVydFN0YXRlID0gdGhpcy5zdGF0ZTsgLy8gU2V0IHRvIGZldGNoaW5nIHN0YXRlIGlmIG5vdCBhbHJlYWR5IGluIGl0XG5cbiAgICBpZiAoIXRoaXMuc3RhdGUuaXNGZXRjaGluZyB8fCB0aGlzLnN0YXRlLmZldGNoTWV0YSAhPT0gKChfY29udGV4dCRmZXRjaE9wdGlvbnMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9ucy5tZXRhKSkge1xuICAgICAgdmFyIF9jb250ZXh0JGZldGNoT3B0aW9uczI7XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnZmV0Y2gnLFxuICAgICAgICBtZXRhOiAoX2NvbnRleHQkZmV0Y2hPcHRpb25zMiA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zMi5tZXRhXG4gICAgICB9KTtcbiAgICB9IC8vIFRyeSB0byBmZXRjaCB0aGUgZGF0YVxuXG5cbiAgICB0aGlzLnJldHJ5ZXIgPSBuZXcgUmV0cnllcih7XG4gICAgICBmbjogY29udGV4dC5mZXRjaEZuLFxuICAgICAgYWJvcnQ6IGFib3J0Q29udHJvbGxlciA9PSBudWxsID8gdm9pZCAwIDogKF9hYm9ydENvbnRyb2xsZXIkYWJvciA9IGFib3J0Q29udHJvbGxlci5hYm9ydCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hYm9ydENvbnRyb2xsZXIkYWJvci5iaW5kKGFib3J0Q29udHJvbGxlciksXG4gICAgICBvblN1Y2Nlc3M6IGZ1bmN0aW9uIG9uU3VjY2VzcyhkYXRhKSB7XG4gICAgICAgIF90aGlzMi5zZXREYXRhKGRhdGEpOyAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcblxuXG4gICAgICAgIF90aGlzMi5jYWNoZS5jb25maWcub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczIuY2FjaGUuY29uZmlnLm9uU3VjY2VzcyhkYXRhLCBfdGhpczIpOyAvLyBSZW1vdmUgcXVlcnkgYWZ0ZXIgZmV0Y2hpbmcgaWYgY2FjaGUgdGltZSBpcyAwXG5cbiAgICAgICAgaWYgKF90aGlzMi5jYWNoZVRpbWUgPT09IDApIHtcbiAgICAgICAgICBfdGhpczIub3B0aW9uYWxSZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uRXJyb3I6IGZ1bmN0aW9uIG9uRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgLy8gT3B0aW1pc3RpY2FsbHkgdXBkYXRlIHN0YXRlIGlmIG5lZWRlZFxuICAgICAgICBpZiAoIShpc0NhbmNlbGxlZEVycm9yKGVycm9yKSAmJiBlcnJvci5zaWxlbnQpKSB7XG4gICAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNDYW5jZWxsZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgICAgICBfdGhpczIuY2FjaGUuY29uZmlnLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzMi5jYWNoZS5jb25maWcub25FcnJvcihlcnJvciwgX3RoaXMyKTsgLy8gTG9nIGVycm9yXG5cbiAgICAgICAgICBnZXRMb2dnZXIoKS5lcnJvcihlcnJvcik7XG4gICAgICAgIH0gLy8gUmVtb3ZlIHF1ZXJ5IGFmdGVyIGZldGNoaW5nIGlmIGNhY2hlIHRpbWUgaXMgMFxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5jYWNoZVRpbWUgPT09IDApIHtcbiAgICAgICAgICBfdGhpczIub3B0aW9uYWxSZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uRmFpbDogZnVuY3Rpb24gb25GYWlsKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdmYWlsZWQnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uUGF1c2U6IGZ1bmN0aW9uIG9uUGF1c2UoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ3BhdXNlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvbkNvbnRpbnVlOiBmdW5jdGlvbiBvbkNvbnRpbnVlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdjb250aW51ZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcmV0cnk6IGNvbnRleHQub3B0aW9ucy5yZXRyeSxcbiAgICAgIHJldHJ5RGVsYXk6IGNvbnRleHQub3B0aW9ucy5yZXRyeURlbGF5XG4gICAgfSk7XG4gICAgdGhpcy5wcm9taXNlID0gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8uZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnJlZHVjZXIodGhpcy5zdGF0ZSwgYWN0aW9uKTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5vYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIub25RdWVyeVVwZGF0ZShhY3Rpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzMy5jYWNoZS5ub3RpZnkoe1xuICAgICAgICBxdWVyeTogX3RoaXMzLFxuICAgICAgICB0eXBlOiAncXVlcnlVcGRhdGVkJyxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb25cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXREZWZhdWx0U3RhdGUgPSBmdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUob3B0aW9ucykge1xuICAgIHZhciBkYXRhID0gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGEgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmluaXRpYWxEYXRhKCkgOiBvcHRpb25zLmluaXRpYWxEYXRhO1xuICAgIHZhciBoYXNJbml0aWFsRGF0YSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhICE9PSAndW5kZWZpbmVkJztcbiAgICB2YXIgaW5pdGlhbERhdGFVcGRhdGVkQXQgPSBoYXNJbml0aWFsRGF0YSA/IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0ID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCgpIDogb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA6IDA7XG4gICAgdmFyIGhhc0RhdGEgPSB0eXBlb2YgZGF0YSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBkYXRhVXBkYXRlQ291bnQ6IDAsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBoYXNEYXRhID8gaW5pdGlhbERhdGFVcGRhdGVkQXQgIT0gbnVsbCA/IGluaXRpYWxEYXRhVXBkYXRlZEF0IDogRGF0ZS5ub3coKSA6IDAsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGVycm9yVXBkYXRlQ291bnQ6IDAsXG4gICAgICBlcnJvclVwZGF0ZWRBdDogMCxcbiAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgZmV0Y2hNZXRhOiBudWxsLFxuICAgICAgaXNGZXRjaGluZzogZmFsc2UsXG4gICAgICBpc0ludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgIHN0YXR1czogaGFzRGF0YSA/ICdzdWNjZXNzJyA6ICdpZGxlJ1xuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLnJlZHVjZXIgPSBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgICB2YXIgX2FjdGlvbiRtZXRhLCBfYWN0aW9uJGRhdGFVcGRhdGVkQXQ7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IHN0YXRlLmZldGNoRmFpbHVyZUNvdW50ICsgMVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAncGF1c2UnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNQYXVzZWQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2NvbnRpbnVlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZmV0Y2gnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgZmV0Y2hNZXRhOiAoX2FjdGlvbiRtZXRhID0gYWN0aW9uLm1ldGEpICE9IG51bGwgPyBfYWN0aW9uJG1ldGEgOiBudWxsLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IHRydWUsXG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICAgIH0sICFzdGF0ZS5kYXRhVXBkYXRlZEF0ICYmIHtcbiAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBkYXRhOiBhY3Rpb24uZGF0YSxcbiAgICAgICAgICBkYXRhVXBkYXRlQ291bnQ6IHN0YXRlLmRhdGFVcGRhdGVDb3VudCArIDEsXG4gICAgICAgICAgZGF0YVVwZGF0ZWRBdDogKF9hY3Rpb24kZGF0YVVwZGF0ZWRBdCA9IGFjdGlvbi5kYXRhVXBkYXRlZEF0KSAhPSBudWxsID8gX2FjdGlvbiRkYXRhVXBkYXRlZEF0IDogRGF0ZS5ub3coKSxcbiAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0ludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgdmFyIGVycm9yID0gYWN0aW9uLmVycm9yO1xuXG4gICAgICAgIGlmIChpc0NhbmNlbGxlZEVycm9yKGVycm9yKSAmJiBlcnJvci5yZXZlcnQgJiYgdGhpcy5yZXZlcnRTdGF0ZSkge1xuICAgICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgdGhpcy5yZXZlcnRTdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgIGVycm9yVXBkYXRlQ291bnQ6IHN0YXRlLmVycm9yVXBkYXRlQ291bnQgKyAxLFxuICAgICAgICAgIGVycm9yVXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCArIDEsXG4gICAgICAgICAgaXNGZXRjaGluZzogZmFsc2UsXG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogJ2Vycm9yJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnaW52YWxpZGF0ZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc0ludmFsaWRhdGVkOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdzZXRTdGF0ZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIGFjdGlvbi5zdGF0ZSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5O1xufSgpOyIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleUJ5T3B0aW9ucywgbWF0Y2hRdWVyeSwgcGFyc2VGaWx0ZXJBcmdzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG4vLyBDTEFTU1xuZXhwb3J0IHZhciBRdWVyeUNhY2hlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKFF1ZXJ5Q2FjaGUsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIFF1ZXJ5Q2FjaGUoY29uZmlnKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5jb25maWcgPSBjb25maWcgfHwge307XG4gICAgX3RoaXMucXVlcmllcyA9IFtdO1xuICAgIF90aGlzLnF1ZXJpZXNNYXAgPSB7fTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnlDYWNoZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkID0gZnVuY3Rpb24gYnVpbGQoY2xpZW50LCBvcHRpb25zLCBzdGF0ZSkge1xuICAgIHZhciBfb3B0aW9ucyRxdWVyeUhhc2g7XG5cbiAgICB2YXIgcXVlcnlLZXkgPSBvcHRpb25zLnF1ZXJ5S2V5O1xuICAgIHZhciBxdWVyeUhhc2ggPSAoX29wdGlvbnMkcXVlcnlIYXNoID0gb3B0aW9ucy5xdWVyeUhhc2gpICE9IG51bGwgPyBfb3B0aW9ucyRxdWVyeUhhc2ggOiBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIG9wdGlvbnMpO1xuICAgIHZhciBxdWVyeSA9IHRoaXMuZ2V0KHF1ZXJ5SGFzaCk7XG5cbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICBxdWVyeSA9IG5ldyBRdWVyeSh7XG4gICAgICAgIGNhY2hlOiB0aGlzLFxuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIHF1ZXJ5SGFzaDogcXVlcnlIYXNoLFxuICAgICAgICBvcHRpb25zOiBjbGllbnQuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKSxcbiAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICBkZWZhdWx0T3B0aW9uczogY2xpZW50LmdldFF1ZXJ5RGVmYXVsdHMocXVlcnlLZXkpLFxuICAgICAgICBtZXRhOiBvcHRpb25zLm1ldGFcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGQocXVlcnkpO1xuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfTtcblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKHF1ZXJ5KSB7XG4gICAgaWYgKCF0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXSkge1xuICAgICAgdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF0gPSBxdWVyeTtcbiAgICAgIHRoaXMucXVlcmllcy5wdXNoKHF1ZXJ5KTtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3F1ZXJ5QWRkZWQnLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKHF1ZXJ5KSB7XG4gICAgdmFyIHF1ZXJ5SW5NYXAgPSB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXTtcblxuICAgIGlmIChxdWVyeUluTWFwKSB7XG4gICAgICBxdWVyeS5kZXN0cm95KCk7XG4gICAgICB0aGlzLnF1ZXJpZXMgPSB0aGlzLnF1ZXJpZXMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBxdWVyeTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocXVlcnlJbk1hcCA9PT0gcXVlcnkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdxdWVyeVJlbW92ZWQnLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgX3RoaXMyLnJlbW92ZShxdWVyeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHF1ZXJ5SGFzaCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXNNYXBbcXVlcnlIYXNoXTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXM7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmQgPSBmdW5jdGlvbiBmaW5kKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBpZiAodHlwZW9mIGZpbHRlcnMuZXhhY3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBmaWx0ZXJzLmV4YWN0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzLmZpbmQoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmRBbGwgPSBmdW5jdGlvbiBmaW5kQWxsKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhmaWx0ZXJzKS5sZW5ndGggPiAwID8gdGhpcy5xdWVyaWVzLmZpbHRlcihmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgIHJldHVybiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KTtcbiAgICB9KSA6IHRoaXMucXVlcmllcztcbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KGV2ZW50KSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczQucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5vbkZvY3VzKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkub25PbmxpbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeUNhY2hlO1xufShTdWJzY3JpYmFibGUpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgUmV0cnllciB9IGZyb20gJy4vcmV0cnllcic7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi91dGlscyc7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIE11dGF0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTXV0YXRpb24oY29uZmlnKSB7XG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe30sIGNvbmZpZy5kZWZhdWx0T3B0aW9ucywgY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMubXV0YXRpb25JZCA9IGNvbmZpZy5tdXRhdGlvbklkO1xuICAgIHRoaXMubXV0YXRpb25DYWNoZSA9IGNvbmZpZy5tdXRhdGlvbkNhY2hlO1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5zdGF0ZSA9IGNvbmZpZy5zdGF0ZSB8fCBnZXREZWZhdWx0U3RhdGUoKTtcbiAgICB0aGlzLm1ldGEgPSBjb25maWcubWV0YTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBNdXRhdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldFN0YXRlID0gZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUpIHtcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdzZXRTdGF0ZScsXG4gICAgICBzdGF0ZTogc3RhdGVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAhPT0gb2JzZXJ2ZXI7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAodGhpcy5yZXRyeWVyKSB7XG4gICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsKCk7XG4gICAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2UudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbnRpbnVlID0gZnVuY3Rpb24gX2NvbnRpbnVlKCkge1xuICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgIHRoaXMucmV0cnllci5jb250aW51ZSgpO1xuICAgICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZSA9IGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBkYXRhO1xuICAgIHZhciByZXN0b3JlZCA9IHRoaXMuc3RhdGUuc3RhdHVzID09PSAnbG9hZGluZyc7XG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIGlmICghcmVzdG9yZWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnbG9hZGluZycsXG4gICAgICAgIHZhcmlhYmxlczogdGhpcy5vcHRpb25zLnZhcmlhYmxlc1xuICAgICAgfSk7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbk11dGF0ZShfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vbk11dGF0ZSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vbk11dGF0ZShfdGhpcy5zdGF0ZS52YXJpYWJsZXMpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBpZiAoY29udGV4dCAhPT0gX3RoaXMuc3RhdGUuY29udGV4dCkge1xuICAgICAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgICB2YXJpYWJsZXM6IF90aGlzLnN0YXRlLnZhcmlhYmxlc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5leGVjdXRlTXV0YXRpb24oKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgIGRhdGEgPSByZXN1bHQ7IC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuXG4gICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uU3VjY2VzcyhkYXRhLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQsIF90aGlzKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblNldHRsZWQoZGF0YSwgbnVsbCwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uRXJyb3IoZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCwgX3RoaXMpOyAvLyBMb2cgZXJyb3JcblxuICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uRXJyb3IoZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCh1bmRlZmluZWQsIGVycm9yLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICB9KTtcblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlTXV0YXRpb24gPSBmdW5jdGlvbiBleGVjdXRlTXV0YXRpb24oKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXMsXG4gICAgICAgIF90aGlzJG9wdGlvbnMkcmV0cnk7XG5cbiAgICB0aGlzLnJldHJ5ZXIgPSBuZXcgUmV0cnllcih7XG4gICAgICBmbjogZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMubXV0YXRpb25Gbikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTm8gbXV0YXRpb25GbiBmb3VuZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90aGlzMi5vcHRpb25zLm11dGF0aW9uRm4oX3RoaXMyLnN0YXRlLnZhcmlhYmxlcyk7XG4gICAgICB9LFxuICAgICAgb25GYWlsOiBmdW5jdGlvbiBvbkZhaWwoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25QYXVzZTogZnVuY3Rpb24gb25QYXVzZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAncGF1c2UnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGludWU6IGZ1bmN0aW9uIG9uQ29udGludWUoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2NvbnRpbnVlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogKF90aGlzJG9wdGlvbnMkcmV0cnkgPSB0aGlzLm9wdGlvbnMucmV0cnkpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJHJldHJ5IDogMCxcbiAgICAgIHJldHJ5RGVsYXk6IHRoaXMub3B0aW9ucy5yZXRyeURlbGF5XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHJlZHVjZXIodGhpcy5zdGF0ZSwgYWN0aW9uKTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5vYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIub25NdXRhdGlvblVwZGF0ZShhY3Rpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzMy5tdXRhdGlvbkNhY2hlLm5vdGlmeShfdGhpczMpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNdXRhdGlvbjtcbn0oKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUoKSB7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogdW5kZWZpbmVkLFxuICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBmYWlsdXJlQ291bnQ6IDAsXG4gICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgIHN0YXR1czogJ2lkbGUnLFxuICAgIHZhcmlhYmxlczogdW5kZWZpbmVkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mYWlsdXJlQ291bnQgKyAxXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3BhdXNlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNQYXVzZWQ6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnY29udGludWUnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGNvbnRleHQ6IGFjdGlvbi5jb250ZXh0LFxuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgIHN0YXR1czogJ2xvYWRpbmcnLFxuICAgICAgICB2YXJpYWJsZXM6IGFjdGlvbi52YXJpYWJsZXNcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGRhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdlcnJvcic6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IGFjdGlvbi5lcnJvcixcbiAgICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mYWlsdXJlQ291bnQgKyAxLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgIHN0YXR1czogJ2Vycm9yJ1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdzZXRTdGF0ZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBhY3Rpb24uc3RhdGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgTXV0YXRpb24gfSBmcm9tICcuL211dGF0aW9uJztcbmltcG9ydCB7IG1hdGNoTXV0YXRpb24sIG5vb3AgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTXV0YXRpb25DYWNoZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShNdXRhdGlvbkNhY2hlLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBNdXRhdGlvbkNhY2hlKGNvbmZpZykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIF90aGlzLm11dGF0aW9ucyA9IFtdO1xuICAgIF90aGlzLm11dGF0aW9uSWQgPSAwO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBNdXRhdGlvbkNhY2hlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYnVpbGQgPSBmdW5jdGlvbiBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgdmFyIG11dGF0aW9uID0gbmV3IE11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uQ2FjaGU6IHRoaXMsXG4gICAgICBtdXRhdGlvbklkOiArK3RoaXMubXV0YXRpb25JZCxcbiAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgZGVmYXVsdE9wdGlvbnM6IG9wdGlvbnMubXV0YXRpb25LZXkgPyBjbGllbnQuZ2V0TXV0YXRpb25EZWZhdWx0cyhvcHRpb25zLm11dGF0aW9uS2V5KSA6IHVuZGVmaW5lZCxcbiAgICAgIG1ldGE6IG9wdGlvbnMubWV0YVxuICAgIH0pO1xuICAgIHRoaXMuYWRkKG11dGF0aW9uKTtcbiAgICByZXR1cm4gbXV0YXRpb247XG4gIH07XG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChtdXRhdGlvbikge1xuICAgIHRoaXMubXV0YXRpb25zLnB1c2gobXV0YXRpb24pO1xuICAgIHRoaXMubm90aWZ5KG11dGF0aW9uKTtcbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKG11dGF0aW9uKSB7XG4gICAgdGhpcy5tdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICE9PSBtdXRhdGlvbjtcbiAgICB9KTtcbiAgICBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICB0aGlzLm5vdGlmeShtdXRhdGlvbik7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5tdXRhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgICAgX3RoaXMyLnJlbW92ZShtdXRhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsKCkge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZmluZCA9IGZ1bmN0aW9uIGZpbmQoZmlsdGVycykge1xuICAgIGlmICh0eXBlb2YgZmlsdGVycy5leGFjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpbHRlcnMuZXhhY3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucy5maW5kKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5maW5kQWxsID0gZnVuY3Rpb24gZmluZEFsbChmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgIHJldHVybiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KG11dGF0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIobXV0YXRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHRoaXMucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdGhpcy5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHZhciBwYXVzZWRNdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnN0YXRlLmlzUGF1c2VkO1xuICAgIH0pO1xuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBwYXVzZWRNdXRhdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChwcm9taXNlLCBtdXRhdGlvbikge1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gbXV0YXRpb24uY29udGludWUoKS5jYXRjaChub29wKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBQcm9taXNlLnJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE11dGF0aW9uQ2FjaGU7XG59KFN1YnNjcmliYWJsZSk7IiwgImltcG9ydCB7IGlzQ2FuY2VsYWJsZSB9IGZyb20gJy4vcmV0cnllcic7XG5pbXBvcnQgeyBnZXRBYm9ydENvbnRyb2xsZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCBmdW5jdGlvbiBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKSB7XG4gIHJldHVybiB7XG4gICAgb25GZXRjaDogZnVuY3Rpb24gb25GZXRjaChjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmZldGNoRm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfY29udGV4dCRmZXRjaE9wdGlvbnMsIF9jb250ZXh0JGZldGNoT3B0aW9uczIsIF9jb250ZXh0JGZldGNoT3B0aW9uczMsIF9jb250ZXh0JGZldGNoT3B0aW9uczQsIF9jb250ZXh0JHN0YXRlJGRhdGEsIF9jb250ZXh0JHN0YXRlJGRhdGEyO1xuXG4gICAgICAgIHZhciByZWZldGNoUGFnZSA9IChfY29udGV4dCRmZXRjaE9wdGlvbnMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IChfY29udGV4dCRmZXRjaE9wdGlvbnMyID0gX2NvbnRleHQkZmV0Y2hPcHRpb25zLm1ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMyLnJlZmV0Y2hQYWdlO1xuICAgICAgICB2YXIgZmV0Y2hNb3JlID0gKF9jb250ZXh0JGZldGNoT3B0aW9uczMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IChfY29udGV4dCRmZXRjaE9wdGlvbnM0ID0gX2NvbnRleHQkZmV0Y2hPcHRpb25zMy5tZXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zNC5mZXRjaE1vcmU7XG4gICAgICAgIHZhciBwYWdlUGFyYW0gPSBmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5wYWdlUGFyYW07XG4gICAgICAgIHZhciBpc0ZldGNoaW5nTmV4dFBhZ2UgPSAoZmV0Y2hNb3JlID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE1vcmUuZGlyZWN0aW9uKSA9PT0gJ2ZvcndhcmQnO1xuICAgICAgICB2YXIgaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSA9IChmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5kaXJlY3Rpb24pID09PSAnYmFja3dhcmQnO1xuICAgICAgICB2YXIgb2xkUGFnZXMgPSAoKF9jb250ZXh0JHN0YXRlJGRhdGEgPSBjb250ZXh0LnN0YXRlLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRzdGF0ZSRkYXRhLnBhZ2VzKSB8fCBbXTtcbiAgICAgICAgdmFyIG9sZFBhZ2VQYXJhbXMgPSAoKF9jb250ZXh0JHN0YXRlJGRhdGEyID0gY29udGV4dC5zdGF0ZS5kYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkc3RhdGUkZGF0YTIucGFnZVBhcmFtcykgfHwgW107XG4gICAgICAgIHZhciBhYm9ydENvbnRyb2xsZXIgPSBnZXRBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgdmFyIGFib3J0U2lnbmFsID0gYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICB2YXIgbmV3UGFnZVBhcmFtcyA9IG9sZFBhZ2VQYXJhbXM7XG4gICAgICAgIHZhciBjYW5jZWxsZWQgPSBmYWxzZTsgLy8gR2V0IHF1ZXJ5IGZ1bmN0aW9uXG5cbiAgICAgICAgdmFyIHF1ZXJ5Rm4gPSBjb250ZXh0Lm9wdGlvbnMucXVlcnlGbiB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdNaXNzaW5nIHF1ZXJ5Rm4nKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgYnVpbGROZXdQYWdlcyA9IGZ1bmN0aW9uIGJ1aWxkTmV3UGFnZXMocGFnZXMsIHBhcmFtLCBwYWdlLCBwcmV2aW91cykge1xuICAgICAgICAgIG5ld1BhZ2VQYXJhbXMgPSBwcmV2aW91cyA/IFtwYXJhbV0uY29uY2F0KG5ld1BhZ2VQYXJhbXMpIDogW10uY29uY2F0KG5ld1BhZ2VQYXJhbXMsIFtwYXJhbV0pO1xuICAgICAgICAgIHJldHVybiBwcmV2aW91cyA/IFtwYWdlXS5jb25jYXQocGFnZXMpIDogW10uY29uY2F0KHBhZ2VzLCBbcGFnZV0pO1xuICAgICAgICB9OyAvLyBDcmVhdGUgZnVuY3Rpb24gdG8gZmV0Y2ggYSBwYWdlXG5cblxuICAgICAgICB2YXIgZmV0Y2hQYWdlID0gZnVuY3Rpb24gZmV0Y2hQYWdlKHBhZ2VzLCBtYW51YWwsIHBhcmFtLCBwcmV2aW91cykge1xuICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnQ2FuY2VsbGVkJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3VuZGVmaW5lZCcgJiYgIW1hbnVhbCAmJiBwYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGFnZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBxdWVyeUZuQ29udGV4dCA9IHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBjb250ZXh0LnF1ZXJ5S2V5LFxuICAgICAgICAgICAgc2lnbmFsOiBhYm9ydFNpZ25hbCxcbiAgICAgICAgICAgIHBhZ2VQYXJhbTogcGFyYW0sXG4gICAgICAgICAgICBtZXRhOiBjb250ZXh0Lm1ldGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZhciBxdWVyeUZuUmVzdWx0ID0gcXVlcnlGbihxdWVyeUZuQ29udGV4dCk7XG4gICAgICAgICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUocXVlcnlGblJlc3VsdCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkTmV3UGFnZXMocGFnZXMsIHBhcmFtLCBwYWdlLCBwcmV2aW91cyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHF1ZXJ5Rm5SZXN1bHQpKSB7XG4gICAgICAgICAgICB2YXIgcHJvbWlzZUFzQW55ID0gcHJvbWlzZTtcbiAgICAgICAgICAgIHByb21pc2VBc0FueS5jYW5jZWwgPSBxdWVyeUZuUmVzdWx0LmNhbmNlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcHJvbWlzZTsgLy8gRmV0Y2ggZmlyc3QgcGFnZT9cblxuICAgICAgICBpZiAoIW9sZFBhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2UoW10pO1xuICAgICAgICB9IC8vIEZldGNoIG5leHQgcGFnZT9cbiAgICAgICAgZWxzZSBpZiAoaXNGZXRjaGluZ05leHRQYWdlKSB7XG4gICAgICAgICAgICB2YXIgbWFudWFsID0gdHlwZW9mIHBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgICB2YXIgcGFyYW0gPSBtYW51YWwgPyBwYWdlUGFyYW0gOiBnZXROZXh0UGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgb2xkUGFnZXMpO1xuICAgICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShvbGRQYWdlcywgbWFudWFsLCBwYXJhbSk7XG4gICAgICAgICAgfSAvLyBGZXRjaCBwcmV2aW91cyBwYWdlP1xuICAgICAgICAgIGVsc2UgaWYgKGlzRmV0Y2hpbmdQcmV2aW91c1BhZ2UpIHtcbiAgICAgICAgICAgICAgdmFyIF9tYW51YWwgPSB0eXBlb2YgcGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJztcblxuICAgICAgICAgICAgICB2YXIgX3BhcmFtID0gX21hbnVhbCA/IHBhZ2VQYXJhbSA6IGdldFByZXZpb3VzUGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgb2xkUGFnZXMpO1xuXG4gICAgICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2Uob2xkUGFnZXMsIF9tYW51YWwsIF9wYXJhbSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IC8vIFJlZmV0Y2ggcGFnZXNcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICBuZXdQYWdlUGFyYW1zID0gW107XG4gICAgICAgICAgICAgICAgICB2YXIgbWFudWFsID0gdHlwZW9mIGNvbnRleHQub3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtID09PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRGZXRjaEZpcnN0UGFnZSA9IHJlZmV0Y2hQYWdlICYmIG9sZFBhZ2VzWzBdID8gcmVmZXRjaFBhZ2Uob2xkUGFnZXNbMF0sIDAsIG9sZFBhZ2VzKSA6IHRydWU7IC8vIEZldGNoIGZpcnN0IHBhZ2VcblxuICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNob3VsZEZldGNoRmlyc3RQYWdlID8gZmV0Y2hQYWdlKFtdLCBtYW51YWwsIG9sZFBhZ2VQYXJhbXNbMF0pIDogUHJvbWlzZS5yZXNvbHZlKGJ1aWxkTmV3UGFnZXMoW10sIG9sZFBhZ2VQYXJhbXNbMF0sIG9sZFBhZ2VzWzBdKSk7IC8vIEZldGNoIHJlbWFpbmluZyBwYWdlc1xuXG4gICAgICAgICAgICAgICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHBhZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZEZldGNoTmV4dFBhZ2UgPSByZWZldGNoUGFnZSAmJiBvbGRQYWdlc1tpXSA/IHJlZmV0Y2hQYWdlKG9sZFBhZ2VzW2ldLCBpLCBvbGRQYWdlcykgOiB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEZldGNoTmV4dFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcGFyYW0yID0gbWFudWFsID8gb2xkUGFnZVBhcmFtc1tpXSA6IGdldE5leHRQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBwYWdlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaFBhZ2UocGFnZXMsIG1hbnVhbCwgX3BhcmFtMik7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShidWlsZE5ld1BhZ2VzKHBhZ2VzLCBvbGRQYWdlUGFyYW1zW2ldLCBvbGRQYWdlc1tpXSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgb2xkUGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvb3AoaSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgIHZhciBmaW5hbFByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHBhZ2VzKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhZ2VzOiBwYWdlcyxcbiAgICAgICAgICAgIHBhZ2VQYXJhbXM6IG5ld1BhZ2VQYXJhbXNcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGZpbmFsUHJvbWlzZUFzQW55ID0gZmluYWxQcm9taXNlO1xuXG4gICAgICAgIGZpbmFsUHJvbWlzZUFzQW55LmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgIGFib3J0Q29udHJvbGxlciA9PSBudWxsID8gdm9pZCAwIDogYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG5cbiAgICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHByb21pc2UpKSB7XG4gICAgICAgICAgICBwcm9taXNlLmNhbmNlbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZmluYWxQcm9taXNlO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dFBhZ2VQYXJhbShvcHRpb25zLCBwYWdlcykge1xuICByZXR1cm4gb3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0ocGFnZXNbcGFnZXMubGVuZ3RoIC0gMV0sIHBhZ2VzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2aW91c1BhZ2VQYXJhbShvcHRpb25zLCBwYWdlcykge1xuICByZXR1cm4gb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbSA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbShwYWdlc1swXSwgcGFnZXMpO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgaXMgYSBuZXh0IHBhZ2UuXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXh0UGFnZShvcHRpb25zLCBwYWdlcykge1xuICBpZiAob3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtICYmIEFycmF5LmlzQXJyYXkocGFnZXMpKSB7XG4gICAgdmFyIG5leHRQYWdlUGFyYW0gPSBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKTtcbiAgICByZXR1cm4gdHlwZW9mIG5leHRQYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnICYmIG5leHRQYWdlUGFyYW0gIT09IG51bGwgJiYgbmV4dFBhZ2VQYXJhbSAhPT0gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgcHJldmlvdXMgcGFnZS5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ByZXZpb3VzUGFnZShvcHRpb25zLCBwYWdlcykge1xuICBpZiAob3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbSAmJiBBcnJheS5pc0FycmF5KHBhZ2VzKSkge1xuICAgIHZhciBwcmV2aW91c1BhZ2VQYXJhbSA9IGdldFByZXZpb3VzUGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKTtcbiAgICByZXR1cm4gdHlwZW9mIHByZXZpb3VzUGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJyAmJiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gbnVsbCAmJiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gZmFsc2U7XG4gIH1cbn0iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBoYXNoUXVlcnlLZXksIG5vb3AsIHBhcnNlRmlsdGVyQXJncywgcGFyc2VRdWVyeUFyZ3MsIHBhcnRpYWxNYXRjaEtleSwgaGFzaFF1ZXJ5S2V5QnlPcHRpb25zIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBRdWVyeUNhY2hlIH0gZnJvbSAnLi9xdWVyeUNhY2hlJztcbmltcG9ydCB7IE11dGF0aW9uQ2FjaGUgfSBmcm9tICcuL211dGF0aW9uQ2FjaGUnO1xuaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSAnLi9mb2N1c01hbmFnZXInO1xuaW1wb3J0IHsgb25saW5lTWFuYWdlciB9IGZyb20gJy4vb25saW5lTWFuYWdlcic7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IGluZmluaXRlUXVlcnlCZWhhdmlvciB9IGZyb20gJy4vaW5maW5pdGVRdWVyeUJlaGF2aW9yJztcbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5Q2xpZW50ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUXVlcnlDbGllbnQoY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7XG4gICAgICBjb25maWcgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLnF1ZXJ5Q2FjaGUgPSBjb25maWcucXVlcnlDYWNoZSB8fCBuZXcgUXVlcnlDYWNoZSgpO1xuICAgIHRoaXMubXV0YXRpb25DYWNoZSA9IGNvbmZpZy5tdXRhdGlvbkNhY2hlIHx8IG5ldyBNdXRhdGlvbkNhY2hlKCk7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGNvbmZpZy5kZWZhdWx0T3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLnF1ZXJ5RGVmYXVsdHMgPSBbXTtcbiAgICB0aGlzLm11dGF0aW9uRGVmYXVsdHMgPSBbXTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeUNsaWVudC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm1vdW50ID0gZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMudW5zdWJzY3JpYmVGb2N1cyA9IGZvY3VzTWFuYWdlci5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5vbkZvY3VzKCk7XG5cbiAgICAgICAgX3RoaXMucXVlcnlDYWNoZS5vbkZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy51bnN1YnNjcmliZU9ubGluZSA9IG9ubGluZU1hbmFnZXIuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgJiYgb25saW5lTWFuYWdlci5pc09ubGluZSgpKSB7XG4gICAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUub25PbmxpbmUoKTtcblxuICAgICAgICBfdGhpcy5xdWVyeUNhY2hlLm9uT25saW5lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnVubW91bnQgPSBmdW5jdGlvbiB1bm1vdW50KCkge1xuICAgIHZhciBfdGhpcyR1bnN1YnNjcmliZUZvY3UsIF90aGlzJHVuc3Vic2NyaWJlT25saTtcblxuICAgIChfdGhpcyR1bnN1YnNjcmliZUZvY3UgPSB0aGlzLnVuc3Vic2NyaWJlRm9jdXMpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyR1bnN1YnNjcmliZUZvY3UuY2FsbCh0aGlzKTtcbiAgICAoX3RoaXMkdW5zdWJzY3JpYmVPbmxpID0gdGhpcy51bnN1YnNjcmliZU9ubGluZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHVuc3Vic2NyaWJlT25saS5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5pc0ZldGNoaW5nID0gZnVuY3Rpb24gaXNGZXRjaGluZyhhcmcxLCBhcmcyKSB7XG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzWzBdO1xuXG4gICAgZmlsdGVycy5mZXRjaGluZyA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmxlbmd0aDtcbiAgfTtcblxuICBfcHJvdG8uaXNNdXRhdGluZyA9IGZ1bmN0aW9uIGlzTXV0YXRpbmcoZmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9uQ2FjaGUuZmluZEFsbChfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgZmV0Y2hpbmc6IHRydWVcbiAgICB9KSkubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyeURhdGEgPSBmdW5jdGlvbiBnZXRRdWVyeURhdGEocXVlcnlLZXksIGZpbHRlcnMpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlDYWNoZSRmaW5kO1xuXG4gICAgcmV0dXJuIChfdGhpcyRxdWVyeUNhY2hlJGZpbmQgPSB0aGlzLnF1ZXJ5Q2FjaGUuZmluZChxdWVyeUtleSwgZmlsdGVycykpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeUNhY2hlJGZpbmQuc3RhdGUuZGF0YTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcmllc0RhdGEgPSBmdW5jdGlvbiBnZXRRdWVyaWVzRGF0YShxdWVyeUtleU9yRmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5Q2FjaGUoKS5maW5kQWxsKHF1ZXJ5S2V5T3JGaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBxdWVyeUtleSA9IF9yZWYucXVlcnlLZXksXG4gICAgICAgICAgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICAgICAgdmFyIGRhdGEgPSBzdGF0ZS5kYXRhO1xuICAgICAgcmV0dXJuIFtxdWVyeUtleSwgZGF0YV07XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJ5RGF0YSA9IGZ1bmN0aW9uIHNldFF1ZXJ5RGF0YShxdWVyeUtleSwgdXBkYXRlciwgb3B0aW9ucykge1xuICAgIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MocXVlcnlLZXkpO1xuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKHBhcnNlZE9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2FjaGUuYnVpbGQodGhpcywgZGVmYXVsdGVkT3B0aW9ucykuc2V0RGF0YSh1cGRhdGVyLCBvcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcmllc0RhdGEgPSBmdW5jdGlvbiBzZXRRdWVyaWVzRGF0YShxdWVyeUtleU9yRmlsdGVycywgdXBkYXRlciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzMi5nZXRRdWVyeUNhY2hlKCkuZmluZEFsbChxdWVyeUtleU9yRmlsdGVycykubWFwKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgcXVlcnlLZXkgPSBfcmVmMi5xdWVyeUtleTtcbiAgICAgICAgcmV0dXJuIFtxdWVyeUtleSwgX3RoaXMyLnNldFF1ZXJ5RGF0YShxdWVyeUtleSwgdXBkYXRlciwgb3B0aW9ucyldO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5U3RhdGUgPSBmdW5jdGlvbiBnZXRRdWVyeVN0YXRlKHF1ZXJ5S2V5LCBmaWx0ZXJzKSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDI7XG5cbiAgICByZXR1cm4gKF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDIgPSB0aGlzLnF1ZXJ5Q2FjaGUuZmluZChxdWVyeUtleSwgZmlsdGVycykpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeUNhY2hlJGZpbmQyLnN0YXRlO1xuICB9O1xuXG4gIF9wcm90by5yZW1vdmVRdWVyaWVzID0gZnVuY3Rpb24gcmVtb3ZlUXVlcmllcyhhcmcxLCBhcmcyKSB7XG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MyID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczJbMF07XG5cbiAgICB2YXIgcXVlcnlDYWNoZSA9IHRoaXMucXVlcnlDYWNoZTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeUNhY2hlLnJlbW92ZShxdWVyeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXRRdWVyaWVzID0gZnVuY3Rpb24gcmVzZXRRdWVyaWVzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzMyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3MzWzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczNbMV07XG5cbiAgICB2YXIgcXVlcnlDYWNoZSA9IHRoaXMucXVlcnlDYWNoZTtcblxuICAgIHZhciByZWZldGNoRmlsdGVycyA9IF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICBhY3RpdmU6IHRydWVcbiAgICB9KTtcblxuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5yZXNldCgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX3RoaXMzLnJlZmV0Y2hRdWVyaWVzKHJlZmV0Y2hGaWx0ZXJzLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsUXVlcmllcyA9IGZ1bmN0aW9uIGNhbmNlbFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3M0ID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczRbMF0sXG4gICAgICAgIF9wYXJzZUZpbHRlckFyZ3M0JCA9IF9wYXJzZUZpbHRlckFyZ3M0WzFdLFxuICAgICAgICBjYW5jZWxPcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczQkID09PSB2b2lkIDAgPyB7fSA6IF9wYXJzZUZpbHRlckFyZ3M0JDtcblxuICAgIGlmICh0eXBlb2YgY2FuY2VsT3B0aW9ucy5yZXZlcnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjYW5jZWxPcHRpb25zLnJldmVydCA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM0LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBxdWVyeS5jYW5jZWwoY2FuY2VsT3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH07XG5cbiAgX3Byb3RvLmludmFsaWRhdGVRdWVyaWVzID0gZnVuY3Rpb24gaW52YWxpZGF0ZVF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfcmVmMyxcbiAgICAgICAgX2ZpbHRlcnMkcmVmZXRjaEFjdGl2LFxuICAgICAgICBfZmlsdGVycyRyZWZldGNoSW5hY3QsXG4gICAgICAgIF90aGlzNSA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczUgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNVswXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M1WzFdO1xuXG4gICAgdmFyIHJlZmV0Y2hGaWx0ZXJzID0gX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIC8vIGlmIGZpbHRlcnMucmVmZXRjaEFjdGl2ZSBpcyBub3QgcHJvdmlkZWQgYW5kIGZpbHRlcnMuYWN0aXZlIGlzIGV4cGxpY2l0bHkgZmFsc2UsXG4gICAgICAvLyBlLmcuIGludmFsaWRhdGVRdWVyaWVzKHsgYWN0aXZlOiBmYWxzZSB9KSwgd2UgZG9uJ3Qgd2FudCB0byByZWZldGNoIGFjdGl2ZSBxdWVyaWVzXG4gICAgICBhY3RpdmU6IChfcmVmMyA9IChfZmlsdGVycyRyZWZldGNoQWN0aXYgPSBmaWx0ZXJzLnJlZmV0Y2hBY3RpdmUpICE9IG51bGwgPyBfZmlsdGVycyRyZWZldGNoQWN0aXYgOiBmaWx0ZXJzLmFjdGl2ZSkgIT0gbnVsbCA/IF9yZWYzIDogdHJ1ZSxcbiAgICAgIGluYWN0aXZlOiAoX2ZpbHRlcnMkcmVmZXRjaEluYWN0ID0gZmlsdGVycy5yZWZldGNoSW5hY3RpdmUpICE9IG51bGwgPyBfZmlsdGVycyRyZWZldGNoSW5hY3QgOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5pbnZhbGlkYXRlKCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF90aGlzNS5yZWZldGNoUXVlcmllcyhyZWZldGNoRmlsdGVycywgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlZmV0Y2hRdWVyaWVzID0gZnVuY3Rpb24gcmVmZXRjaFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3M2ID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczZbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNlsxXTtcblxuICAgIHZhciBwcm9taXNlcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzNi5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubWFwKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICByZXR1cm4gcXVlcnkuZmV0Y2godW5kZWZpbmVkLCBfZXh0ZW5kcyh7fSwgb3B0aW9ucywge1xuICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgIHJlZmV0Y2hQYWdlOiBmaWx0ZXJzID09IG51bGwgPyB2b2lkIDAgOiBmaWx0ZXJzLnJlZmV0Y2hQYWdlXG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKG5vb3ApO1xuXG4gICAgaWYgKCEob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy50aHJvd09uRXJyb3IpKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hRdWVyeSA9IGZ1bmN0aW9uIGZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MoYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMocGFyc2VkT3B0aW9ucyk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YW5uZXJsaW5zbGV5L3JlYWN0LXF1ZXJ5L2lzc3Vlcy82NTJcblxuICAgIGlmICh0eXBlb2YgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucmV0cnkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgcXVlcnkgPSB0aGlzLnF1ZXJ5Q2FjaGUuYnVpbGQodGhpcywgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHF1ZXJ5LmlzU3RhbGVCeVRpbWUoZGVmYXVsdGVkT3B0aW9ucy5zdGFsZVRpbWUpID8gcXVlcnkuZmV0Y2goZGVmYXVsdGVkT3B0aW9ucykgOiBQcm9taXNlLnJlc29sdmUocXVlcnkuc3RhdGUuZGF0YSk7XG4gIH07XG5cbiAgX3Byb3RvLnByZWZldGNoUXVlcnkgPSBmdW5jdGlvbiBwcmVmZXRjaFF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoSW5maW5pdGVRdWVyeSA9IGZ1bmN0aW9uIGZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgICBwYXJzZWRPcHRpb25zLmJlaGF2aW9yID0gaW5maW5pdGVRdWVyeUJlaGF2aW9yKCk7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hRdWVyeShwYXJzZWRPcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8ucHJlZmV0Y2hJbmZpbml0ZVF1ZXJ5ID0gZnVuY3Rpb24gcHJlZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsTXV0YXRpb25zID0gZnVuY3Rpb24gY2FuY2VsTXV0YXRpb25zKCkge1xuICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM3Lm11dGF0aW9uQ2FjaGUuZ2V0QWxsKCkubWFwKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgICByZXR1cm4gbXV0YXRpb24uY2FuY2VsKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc3VtZVBhdXNlZE11dGF0aW9ucyA9IGZ1bmN0aW9uIHJlc3VtZVBhdXNlZE11dGF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNdXRhdGlvbkNhY2hlKCkucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGVNdXRhdGlvbiA9IGZ1bmN0aW9uIGV4ZWN1dGVNdXRhdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZS5idWlsZCh0aGlzLCBvcHRpb25zKS5leGVjdXRlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5Q2FjaGUgPSBmdW5jdGlvbiBnZXRRdWVyeUNhY2hlKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2FjaGU7XG4gIH07XG5cbiAgX3Byb3RvLmdldE11dGF0aW9uQ2FjaGUgPSBmdW5jdGlvbiBnZXRNdXRhdGlvbkNhY2hlKCkge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9uQ2FjaGU7XG4gIH07XG5cbiAgX3Byb3RvLmdldERlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdE9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNldERlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyeURlZmF1bHRzID0gZnVuY3Rpb24gc2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSwgb3B0aW9ucykge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLnF1ZXJ5RGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIGhhc2hRdWVyeUtleShxdWVyeUtleSkgPT09IGhhc2hRdWVyeUtleSh4LnF1ZXJ5S2V5KTtcbiAgICB9KTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlcnlEZWZhdWx0cy5wdXNoKHtcbiAgICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyeURlZmF1bHRzID0gZnVuY3Rpb24gZ2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSkge1xuICAgIHZhciBfdGhpcyRxdWVyeURlZmF1bHRzJGY7XG5cbiAgICByZXR1cm4gcXVlcnlLZXkgPyAoX3RoaXMkcXVlcnlEZWZhdWx0cyRmID0gdGhpcy5xdWVyeURlZmF1bHRzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwYXJ0aWFsTWF0Y2hLZXkocXVlcnlLZXksIHgucXVlcnlLZXkpO1xuICAgIH0pKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcXVlcnlEZWZhdWx0cyRmLmRlZmF1bHRPcHRpb25zIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIF9wcm90by5zZXRNdXRhdGlvbkRlZmF1bHRzID0gZnVuY3Rpb24gc2V0TXV0YXRpb25EZWZhdWx0cyhtdXRhdGlvbktleSwgb3B0aW9ucykge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLm11dGF0aW9uRGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIGhhc2hRdWVyeUtleShtdXRhdGlvbktleSkgPT09IGhhc2hRdWVyeUtleSh4Lm11dGF0aW9uS2V5KTtcbiAgICB9KTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXV0YXRpb25EZWZhdWx0cy5wdXNoKHtcbiAgICAgICAgbXV0YXRpb25LZXk6IG11dGF0aW9uS2V5LFxuICAgICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5nZXRNdXRhdGlvbkRlZmF1bHRzID0gZnVuY3Rpb24gZ2V0TXV0YXRpb25EZWZhdWx0cyhtdXRhdGlvbktleSkge1xuICAgIHZhciBfdGhpcyRtdXRhdGlvbkRlZmF1bHQ7XG5cbiAgICByZXR1cm4gbXV0YXRpb25LZXkgPyAoX3RoaXMkbXV0YXRpb25EZWZhdWx0ID0gdGhpcy5tdXRhdGlvbkRlZmF1bHRzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwYXJ0aWFsTWF0Y2hLZXkobXV0YXRpb25LZXksIHgubXV0YXRpb25LZXkpO1xuICAgIH0pKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkbXV0YXRpb25EZWZhdWx0LmRlZmF1bHRPcHRpb25zIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0UXVlcnlPcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucy5xdWVyaWVzLCB0aGlzLmdldFF1ZXJ5RGVmYXVsdHMob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5xdWVyeUtleSksIG9wdGlvbnMsIHtcbiAgICAgIF9kZWZhdWx0ZWQ6IHRydWVcbiAgICB9KTtcblxuICAgIGlmICghZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2ggJiYgZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUtleSkge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2ggPSBoYXNoUXVlcnlLZXlCeU9wdGlvbnMoZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUtleSwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmF1bHRlZE9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdE11dGF0aW9uT3B0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRNdXRhdGlvbk9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLl9kZWZhdWx0ZWQpIHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucy5tdXRhdGlvbnMsIHRoaXMuZ2V0TXV0YXRpb25EZWZhdWx0cyhvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLm11dGF0aW9uS2V5KSwgb3B0aW9ucywge1xuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHRoaXMucXVlcnlDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMubXV0YXRpb25DYWNoZS5jbGVhcigpO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeUNsaWVudDtcbn0oKTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IGlzU2VydmVyLCBpc1ZhbGlkVGltZW91dCwgbm9vcCwgcmVwbGFjZUVxdWFsRGVlcCwgc2hhbGxvd0VxdWFsT2JqZWN0cywgdGltZVVudGlsU3RhbGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSAnLi9mb2N1c01hbmFnZXInO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgaXNDYW5jZWxsZWRFcnJvciB9IGZyb20gJy4vcmV0cnllcic7XG5leHBvcnQgdmFyIFF1ZXJ5T2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoUXVlcnlPYnNlcnZlciwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gUXVlcnlPYnNlcnZlcihjbGllbnQsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICBfdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICBfdGhpcy50cmFja2VkUHJvcHMgPSBbXTtcbiAgICBfdGhpcy5zZWxlY3RFcnJvciA9IG51bGw7XG5cbiAgICBfdGhpcy5iaW5kTWV0aG9kcygpO1xuXG4gICAgX3RoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeU9ic2VydmVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYmluZE1ldGhvZHMgPSBmdW5jdGlvbiBiaW5kTWV0aG9kcygpIHtcbiAgICB0aGlzLnJlbW92ZSA9IHRoaXMucmVtb3ZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZWZldGNoID0gdGhpcy5yZWZldGNoLmJpbmQodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7XG4gICAgaWYgKHRoaXMubGlzdGVuZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5jdXJyZW50UXVlcnkuYWRkT2JzZXJ2ZXIodGhpcyk7XG5cbiAgICAgIGlmIChzaG91bGRGZXRjaE9uTW91bnQodGhpcy5jdXJyZW50UXVlcnksIHRoaXMub3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2goKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVUaW1lcnMoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5saXN0ZW5lcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNob3VsZEZldGNoT25SZWNvbm5lY3QgPSBmdW5jdGlvbiBzaG91bGRGZXRjaE9uUmVjb25uZWN0KCkge1xuICAgIHJldHVybiBzaG91bGRGZXRjaE9uKHRoaXMuY3VycmVudFF1ZXJ5LCB0aGlzLm9wdGlvbnMsIHRoaXMub3B0aW9ucy5yZWZldGNoT25SZWNvbm5lY3QpO1xuICB9O1xuXG4gIF9wcm90by5zaG91bGRGZXRjaE9uV2luZG93Rm9jdXMgPSBmdW5jdGlvbiBzaG91bGRGZXRjaE9uV2luZG93Rm9jdXMoKSB7XG4gICAgcmV0dXJuIHNob3VsZEZldGNoT24odGhpcy5jdXJyZW50UXVlcnksIHRoaXMub3B0aW9ucywgdGhpcy5vcHRpb25zLnJlZmV0Y2hPbldpbmRvd0ZvY3VzKTtcbiAgfTtcblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbiAgICB0aGlzLmNsZWFyVGltZXJzKCk7XG4gICAgdGhpcy5jdXJyZW50UXVlcnkucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE9wdGlvbnMgPSBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMsIG5vdGlmeU9wdGlvbnMpIHtcbiAgICB2YXIgcHJldk9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHByZXZRdWVyeSA9IHRoaXMuY3VycmVudFF1ZXJ5O1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuY2xpZW50LmRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyhvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGVuYWJsZWQgdG8gYmUgYSBib29sZWFuJyk7XG4gICAgfSAvLyBLZWVwIHByZXZpb3VzIHF1ZXJ5IGtleSBpZiB0aGUgdXNlciBkb2VzIG5vdCBzdXBwbHkgb25lXG5cblxuICAgIGlmICghdGhpcy5vcHRpb25zLnF1ZXJ5S2V5KSB7XG4gICAgICB0aGlzLm9wdGlvbnMucXVlcnlLZXkgPSBwcmV2T3B0aW9ucy5xdWVyeUtleTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVF1ZXJ5KCk7XG4gICAgdmFyIG1vdW50ZWQgPSB0aGlzLmhhc0xpc3RlbmVycygpOyAvLyBGZXRjaCBpZiB0aGVyZSBhcmUgc3Vic2NyaWJlcnNcblxuICAgIGlmIChtb3VudGVkICYmIHNob3VsZEZldGNoT3B0aW9uYWxseSh0aGlzLmN1cnJlbnRRdWVyeSwgcHJldlF1ZXJ5LCB0aGlzLm9wdGlvbnMsIHByZXZPcHRpb25zKSkge1xuICAgICAgdGhpcy5leGVjdXRlRmV0Y2goKTtcbiAgICB9IC8vIFVwZGF0ZSByZXN1bHRcblxuXG4gICAgdGhpcy51cGRhdGVSZXN1bHQobm90aWZ5T3B0aW9ucyk7IC8vIFVwZGF0ZSBzdGFsZSBpbnRlcnZhbCBpZiBuZWVkZWRcblxuICAgIGlmIChtb3VudGVkICYmICh0aGlzLmN1cnJlbnRRdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSBwcmV2T3B0aW9ucy5lbmFibGVkIHx8IHRoaXMub3B0aW9ucy5zdGFsZVRpbWUgIT09IHByZXZPcHRpb25zLnN0YWxlVGltZSkpIHtcbiAgICAgIHRoaXMudXBkYXRlU3RhbGVUaW1lb3V0KCk7XG4gICAgfVxuXG4gICAgdmFyIG5leHRSZWZldGNoSW50ZXJ2YWwgPSB0aGlzLmNvbXB1dGVSZWZldGNoSW50ZXJ2YWwoKTsgLy8gVXBkYXRlIHJlZmV0Y2ggaW50ZXJ2YWwgaWYgbmVlZGVkXG5cbiAgICBpZiAobW91bnRlZCAmJiAodGhpcy5jdXJyZW50UXVlcnkgIT09IHByZXZRdWVyeSB8fCB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gcHJldk9wdGlvbnMuZW5hYmxlZCB8fCBuZXh0UmVmZXRjaEludGVydmFsICE9PSB0aGlzLmN1cnJlbnRSZWZldGNoSW50ZXJ2YWwpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVJlZmV0Y2hJbnRlcnZhbChuZXh0UmVmZXRjaEludGVydmFsKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE9wdGltaXN0aWNSZXN1bHQgPSBmdW5jdGlvbiBnZXRPcHRpbWlzdGljUmVzdWx0KG9wdGlvbnMpIHtcbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuY2xpZW50LmRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyhvcHRpb25zKTtcbiAgICB2YXIgcXVlcnkgPSB0aGlzLmNsaWVudC5nZXRRdWVyeUNhY2hlKCkuYnVpbGQodGhpcy5jbGllbnQsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJlc3VsdChxdWVyeSwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gIH07XG5cbiAgX3Byb3RvLmdldEN1cnJlbnRSZXN1bHQgPSBmdW5jdGlvbiBnZXRDdXJyZW50UmVzdWx0KCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRSZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLnRyYWNrUmVzdWx0ID0gZnVuY3Rpb24gdHJhY2tSZXN1bHQocmVzdWx0LCBkZWZhdWx0ZWRPcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgdHJhY2tlZFJlc3VsdCA9IHt9O1xuXG4gICAgdmFyIHRyYWNrUHJvcCA9IGZ1bmN0aW9uIHRyYWNrUHJvcChrZXkpIHtcbiAgICAgIGlmICghX3RoaXMyLnRyYWNrZWRQcm9wcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIF90aGlzMi50cmFja2VkUHJvcHMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRyYWNrZWRSZXN1bHQsIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICB0cmFja1Byb3Aoa2V5KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGRlZmF1bHRlZE9wdGlvbnMudXNlRXJyb3JCb3VuZGFyeSB8fCBkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlKSB7XG4gICAgICB0cmFja1Byb3AoJ2Vycm9yJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYWNrZWRSZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLmdldE5leHRSZXN1bHQgPSBmdW5jdGlvbiBnZXROZXh0UmVzdWx0KG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgdW5zdWJzY3JpYmUgPSBfdGhpczMuc3Vic2NyaWJlKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgaWYgKCFyZXN1bHQuaXNGZXRjaGluZykge1xuICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgICBpZiAocmVzdWx0LmlzRXJyb3IgJiYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMudGhyb3dPbkVycm9yKSkge1xuICAgICAgICAgICAgcmVqZWN0KHJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXRDdXJyZW50UXVlcnkgPSBmdW5jdGlvbiBnZXRDdXJyZW50UXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFF1ZXJ5O1xuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgdGhpcy5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLnJlbW92ZSh0aGlzLmN1cnJlbnRRdWVyeSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlZmV0Y2ggPSBmdW5jdGlvbiByZWZldGNoKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaChfZXh0ZW5kcyh7fSwgb3B0aW9ucywge1xuICAgICAgbWV0YToge1xuICAgICAgICByZWZldGNoUGFnZTogb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZWZldGNoUGFnZVxuICAgICAgfVxuICAgIH0pKTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hPcHRpbWlzdGljID0gZnVuY3Rpb24gZmV0Y2hPcHRpbWlzdGljKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5jbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpO1xuICAgIHZhciBxdWVyeSA9IHRoaXMuY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLmNsaWVudCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHF1ZXJ5LmZldGNoKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM0LmNyZWF0ZVJlc3VsdChxdWVyeSwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoID0gZnVuY3Rpb24gZmV0Y2goZmV0Y2hPcHRpb25zKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlRmV0Y2goZmV0Y2hPcHRpb25zKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNS51cGRhdGVSZXN1bHQoKTtcblxuICAgICAgcmV0dXJuIF90aGlzNS5jdXJyZW50UmVzdWx0O1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlRmV0Y2ggPSBmdW5jdGlvbiBleGVjdXRlRmV0Y2goZmV0Y2hPcHRpb25zKSB7XG4gICAgLy8gTWFrZSBzdXJlIHdlIHJlZmVyZW5jZSB0aGUgbGF0ZXN0IHF1ZXJ5IGFzIHRoZSBjdXJyZW50IG9uZSBtaWdodCBoYXZlIGJlZW4gcmVtb3ZlZFxuICAgIHRoaXMudXBkYXRlUXVlcnkoKTsgLy8gRmV0Y2hcblxuICAgIHZhciBwcm9taXNlID0gdGhpcy5jdXJyZW50UXVlcnkuZmV0Y2godGhpcy5vcHRpb25zLCBmZXRjaE9wdGlvbnMpO1xuXG4gICAgaWYgKCEoZmV0Y2hPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE9wdGlvbnMudGhyb3dPbkVycm9yKSkge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuY2F0Y2gobm9vcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVN0YWxlVGltZW91dCA9IGZ1bmN0aW9uIHVwZGF0ZVN0YWxlVGltZW91dCgpIHtcbiAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgIHRoaXMuY2xlYXJTdGFsZVRpbWVvdXQoKTtcblxuICAgIGlmIChpc1NlcnZlciB8fCB0aGlzLmN1cnJlbnRSZXN1bHQuaXNTdGFsZSB8fCAhaXNWYWxpZFRpbWVvdXQodGhpcy5vcHRpb25zLnN0YWxlVGltZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGltZSA9IHRpbWVVbnRpbFN0YWxlKHRoaXMuY3VycmVudFJlc3VsdC5kYXRhVXBkYXRlZEF0LCB0aGlzLm9wdGlvbnMuc3RhbGVUaW1lKTsgLy8gVGhlIHRpbWVvdXQgaXMgc29tZXRpbWVzIHRyaWdnZXJlZCAxIG1zIGJlZm9yZSB0aGUgc3RhbGUgdGltZSBleHBpcmF0aW9uLlxuICAgIC8vIFRvIG1pdGlnYXRlIHRoaXMgaXNzdWUgd2UgYWx3YXlzIGFkZCAxIG1zIHRvIHRoZSB0aW1lb3V0LlxuXG4gICAgdmFyIHRpbWVvdXQgPSB0aW1lICsgMTtcbiAgICB0aGlzLnN0YWxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIV90aGlzNi5jdXJyZW50UmVzdWx0LmlzU3RhbGUpIHtcbiAgICAgICAgX3RoaXM2LnVwZGF0ZVJlc3VsdCgpO1xuICAgICAgfVxuICAgIH0sIHRpbWVvdXQpO1xuICB9O1xuXG4gIF9wcm90by5jb21wdXRlUmVmZXRjaEludGVydmFsID0gZnVuY3Rpb24gY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpIHtcbiAgICB2YXIgX3RoaXMkb3B0aW9ucyRyZWZldGNoO1xuXG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLm9wdGlvbnMucmVmZXRjaEludGVydmFsID09PSAnZnVuY3Rpb24nID8gdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCh0aGlzLmN1cnJlbnRSZXN1bHQuZGF0YSwgdGhpcy5jdXJyZW50UXVlcnkpIDogKF90aGlzJG9wdGlvbnMkcmVmZXRjaCA9IHRoaXMub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWwpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJHJlZmV0Y2ggOiBmYWxzZTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlUmVmZXRjaEludGVydmFsID0gZnVuY3Rpb24gdXBkYXRlUmVmZXRjaEludGVydmFsKG5leHRJbnRlcnZhbCkge1xuICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgdGhpcy5jbGVhclJlZmV0Y2hJbnRlcnZhbCgpO1xuICAgIHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCA9IG5leHRJbnRlcnZhbDtcblxuICAgIGlmIChpc1NlcnZlciB8fCB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9PT0gZmFsc2UgfHwgIWlzVmFsaWRUaW1lb3V0KHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCkgfHwgdGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZWZldGNoSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpczcub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWxJbkJhY2tncm91bmQgfHwgZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpKSB7XG4gICAgICAgIF90aGlzNy5leGVjdXRlRmV0Y2goKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLmN1cnJlbnRSZWZldGNoSW50ZXJ2YWwpO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVUaW1lcnMgPSBmdW5jdGlvbiB1cGRhdGVUaW1lcnMoKSB7XG4gICAgdGhpcy51cGRhdGVTdGFsZVRpbWVvdXQoKTtcbiAgICB0aGlzLnVwZGF0ZVJlZmV0Y2hJbnRlcnZhbCh0aGlzLmNvbXB1dGVSZWZldGNoSW50ZXJ2YWwoKSk7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyVGltZXJzID0gZnVuY3Rpb24gY2xlYXJUaW1lcnMoKSB7XG4gICAgdGhpcy5jbGVhclN0YWxlVGltZW91dCgpO1xuICAgIHRoaXMuY2xlYXJSZWZldGNoSW50ZXJ2YWwoKTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXJTdGFsZVRpbWVvdXQgPSBmdW5jdGlvbiBjbGVhclN0YWxlVGltZW91dCgpIHtcbiAgICBpZiAodGhpcy5zdGFsZVRpbWVvdXRJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RhbGVUaW1lb3V0SWQpO1xuICAgICAgdGhpcy5zdGFsZVRpbWVvdXRJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyUmVmZXRjaEludGVydmFsID0gZnVuY3Rpb24gY2xlYXJSZWZldGNoSW50ZXJ2YWwoKSB7XG4gICAgaWYgKHRoaXMucmVmZXRjaEludGVydmFsSWQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yZWZldGNoSW50ZXJ2YWxJZCk7XG4gICAgICB0aGlzLnJlZmV0Y2hJbnRlcnZhbElkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY3JlYXRlUmVzdWx0ID0gZnVuY3Rpb24gY3JlYXRlUmVzdWx0KHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgdmFyIHByZXZRdWVyeSA9IHRoaXMuY3VycmVudFF1ZXJ5O1xuICAgIHZhciBwcmV2T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgcHJldlJlc3VsdCA9IHRoaXMuY3VycmVudFJlc3VsdDtcbiAgICB2YXIgcHJldlJlc3VsdFN0YXRlID0gdGhpcy5jdXJyZW50UmVzdWx0U3RhdGU7XG4gICAgdmFyIHByZXZSZXN1bHRPcHRpb25zID0gdGhpcy5jdXJyZW50UmVzdWx0T3B0aW9ucztcbiAgICB2YXIgcXVlcnlDaGFuZ2UgPSBxdWVyeSAhPT0gcHJldlF1ZXJ5O1xuICAgIHZhciBxdWVyeUluaXRpYWxTdGF0ZSA9IHF1ZXJ5Q2hhbmdlID8gcXVlcnkuc3RhdGUgOiB0aGlzLmN1cnJlbnRRdWVyeUluaXRpYWxTdGF0ZTtcbiAgICB2YXIgcHJldlF1ZXJ5UmVzdWx0ID0gcXVlcnlDaGFuZ2UgPyB0aGlzLmN1cnJlbnRSZXN1bHQgOiB0aGlzLnByZXZpb3VzUXVlcnlSZXN1bHQ7XG4gICAgdmFyIHN0YXRlID0gcXVlcnkuc3RhdGU7XG4gICAgdmFyIGRhdGFVcGRhdGVkQXQgPSBzdGF0ZS5kYXRhVXBkYXRlZEF0LFxuICAgICAgICBlcnJvciA9IHN0YXRlLmVycm9yLFxuICAgICAgICBlcnJvclVwZGF0ZWRBdCA9IHN0YXRlLmVycm9yVXBkYXRlZEF0LFxuICAgICAgICBpc0ZldGNoaW5nID0gc3RhdGUuaXNGZXRjaGluZyxcbiAgICAgICAgc3RhdHVzID0gc3RhdGUuc3RhdHVzO1xuICAgIHZhciBpc1ByZXZpb3VzRGF0YSA9IGZhbHNlO1xuICAgIHZhciBpc1BsYWNlaG9sZGVyRGF0YSA9IGZhbHNlO1xuICAgIHZhciBkYXRhOyAvLyBPcHRpbWlzdGljYWxseSBzZXQgcmVzdWx0IGluIGZldGNoaW5nIHN0YXRlIGlmIG5lZWRlZFxuXG4gICAgaWYgKG9wdGlvbnMub3B0aW1pc3RpY1Jlc3VsdHMpIHtcbiAgICAgIHZhciBtb3VudGVkID0gdGhpcy5oYXNMaXN0ZW5lcnMoKTtcbiAgICAgIHZhciBmZXRjaE9uTW91bnQgPSAhbW91bnRlZCAmJiBzaG91bGRGZXRjaE9uTW91bnQocXVlcnksIG9wdGlvbnMpO1xuICAgICAgdmFyIGZldGNoT3B0aW9uYWxseSA9IG1vdW50ZWQgJiYgc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHF1ZXJ5LCBwcmV2UXVlcnksIG9wdGlvbnMsIHByZXZPcHRpb25zKTtcblxuICAgICAgaWYgKGZldGNoT25Nb3VudCB8fCBmZXRjaE9wdGlvbmFsbHkpIHtcbiAgICAgICAgaXNGZXRjaGluZyA9IHRydWU7XG5cbiAgICAgICAgaWYgKCFkYXRhVXBkYXRlZEF0KSB7XG4gICAgICAgICAgc3RhdHVzID0gJ2xvYWRpbmcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBLZWVwIHByZXZpb3VzIGRhdGEgaWYgbmVlZGVkXG5cblxuICAgIGlmIChvcHRpb25zLmtlZXBQcmV2aW91c0RhdGEgJiYgIXN0YXRlLmRhdGFVcGRhdGVDb3VudCAmJiAocHJldlF1ZXJ5UmVzdWx0ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UXVlcnlSZXN1bHQuaXNTdWNjZXNzKSAmJiBzdGF0dXMgIT09ICdlcnJvcicpIHtcbiAgICAgIGRhdGEgPSBwcmV2UXVlcnlSZXN1bHQuZGF0YTtcbiAgICAgIGRhdGFVcGRhdGVkQXQgPSBwcmV2UXVlcnlSZXN1bHQuZGF0YVVwZGF0ZWRBdDtcbiAgICAgIHN0YXR1cyA9IHByZXZRdWVyeVJlc3VsdC5zdGF0dXM7XG4gICAgICBpc1ByZXZpb3VzRGF0YSA9IHRydWU7XG4gICAgfSAvLyBTZWxlY3QgZGF0YSBpZiBuZWVkZWRcbiAgICBlbHNlIGlmIChvcHRpb25zLnNlbGVjdCAmJiB0eXBlb2Ygc3RhdGUuZGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gTWVtb2l6ZSBzZWxlY3QgcmVzdWx0XG4gICAgICAgIGlmIChwcmV2UmVzdWx0ICYmIHN0YXRlLmRhdGEgPT09IChwcmV2UmVzdWx0U3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHRTdGF0ZS5kYXRhKSAmJiBvcHRpb25zLnNlbGVjdCA9PT0gdGhpcy5zZWxlY3RGbikge1xuICAgICAgICAgIGRhdGEgPSB0aGlzLnNlbGVjdFJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RGbiA9IG9wdGlvbnMuc2VsZWN0O1xuICAgICAgICAgICAgZGF0YSA9IG9wdGlvbnMuc2VsZWN0KHN0YXRlLmRhdGEpO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJ1Y3R1cmFsU2hhcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IHJlcGxhY2VFcXVhbERlZXAocHJldlJlc3VsdCA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdC5kYXRhLCBkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RSZXN1bHQgPSBkYXRhO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgfSBjYXRjaCAoc2VsZWN0RXJyb3IpIHtcbiAgICAgICAgICAgIGdldExvZ2dlcigpLmVycm9yKHNlbGVjdEVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RXJyb3IgPSBzZWxlY3RFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVXNlIHF1ZXJ5IGRhdGFcbiAgICAgIGVsc2Uge1xuICAgICAgICAgIGRhdGEgPSBzdGF0ZS5kYXRhO1xuICAgICAgICB9IC8vIFNob3cgcGxhY2Vob2xkZXIgZGF0YSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRhdGEgPT09ICd1bmRlZmluZWQnICYmIChzdGF0dXMgPT09ICdsb2FkaW5nJyB8fCBzdGF0dXMgPT09ICdpZGxlJykpIHtcbiAgICAgIHZhciBwbGFjZWhvbGRlckRhdGE7IC8vIE1lbW9pemUgcGxhY2Vob2xkZXIgZGF0YVxuXG4gICAgICBpZiAoKHByZXZSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHQuaXNQbGFjZWhvbGRlckRhdGEpICYmIG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhID09PSAocHJldlJlc3VsdE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHRPcHRpb25zLnBsYWNlaG9sZGVyRGF0YSkpIHtcbiAgICAgICAgcGxhY2Vob2xkZXJEYXRhID0gcHJldlJlc3VsdC5kYXRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGxhY2Vob2xkZXJEYXRhID0gdHlwZW9mIG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEoKSA6IG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnNlbGVjdCAmJiB0eXBlb2YgcGxhY2Vob2xkZXJEYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSBvcHRpb25zLnNlbGVjdChwbGFjZWhvbGRlckRhdGEpO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJ1Y3R1cmFsU2hhcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJEYXRhID0gcmVwbGFjZUVxdWFsRGVlcChwcmV2UmVzdWx0ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UmVzdWx0LmRhdGEsIHBsYWNlaG9sZGVyRGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgIH0gY2F0Y2ggKHNlbGVjdEVycm9yKSB7XG4gICAgICAgICAgICBnZXRMb2dnZXIoKS5lcnJvcihzZWxlY3RFcnJvcik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVycm9yID0gc2VsZWN0RXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgcGxhY2Vob2xkZXJEYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzdGF0dXMgPSAnc3VjY2Vzcyc7XG4gICAgICAgIGRhdGEgPSBwbGFjZWhvbGRlckRhdGE7XG4gICAgICAgIGlzUGxhY2Vob2xkZXJEYXRhID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RFcnJvcikge1xuICAgICAgZXJyb3IgPSB0aGlzLnNlbGVjdEVycm9yO1xuICAgICAgZGF0YSA9IHRoaXMuc2VsZWN0UmVzdWx0O1xuICAgICAgZXJyb3JVcGRhdGVkQXQgPSBEYXRlLm5vdygpO1xuICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICBpc0xvYWRpbmc6IHN0YXR1cyA9PT0gJ2xvYWRpbmcnLFxuICAgICAgaXNTdWNjZXNzOiBzdGF0dXMgPT09ICdzdWNjZXNzJyxcbiAgICAgIGlzRXJyb3I6IHN0YXR1cyA9PT0gJ2Vycm9yJyxcbiAgICAgIGlzSWRsZTogc3RhdHVzID09PSAnaWRsZScsXG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogZGF0YVVwZGF0ZWRBdCxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgIGVycm9yVXBkYXRlZEF0OiBlcnJvclVwZGF0ZWRBdCxcbiAgICAgIGZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQsXG4gICAgICBlcnJvclVwZGF0ZUNvdW50OiBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50LFxuICAgICAgaXNGZXRjaGVkOiBzdGF0ZS5kYXRhVXBkYXRlQ291bnQgPiAwIHx8IHN0YXRlLmVycm9yVXBkYXRlQ291bnQgPiAwLFxuICAgICAgaXNGZXRjaGVkQWZ0ZXJNb3VudDogc3RhdGUuZGF0YVVwZGF0ZUNvdW50ID4gcXVlcnlJbml0aWFsU3RhdGUuZGF0YVVwZGF0ZUNvdW50IHx8IHN0YXRlLmVycm9yVXBkYXRlQ291bnQgPiBxdWVyeUluaXRpYWxTdGF0ZS5lcnJvclVwZGF0ZUNvdW50LFxuICAgICAgaXNGZXRjaGluZzogaXNGZXRjaGluZyxcbiAgICAgIGlzUmVmZXRjaGluZzogaXNGZXRjaGluZyAmJiBzdGF0dXMgIT09ICdsb2FkaW5nJyxcbiAgICAgIGlzTG9hZGluZ0Vycm9yOiBzdGF0dXMgPT09ICdlcnJvcicgJiYgc3RhdGUuZGF0YVVwZGF0ZWRBdCA9PT0gMCxcbiAgICAgIGlzUGxhY2Vob2xkZXJEYXRhOiBpc1BsYWNlaG9sZGVyRGF0YSxcbiAgICAgIGlzUHJldmlvdXNEYXRhOiBpc1ByZXZpb3VzRGF0YSxcbiAgICAgIGlzUmVmZXRjaEVycm9yOiBzdGF0dXMgPT09ICdlcnJvcicgJiYgc3RhdGUuZGF0YVVwZGF0ZWRBdCAhPT0gMCxcbiAgICAgIGlzU3RhbGU6IGlzU3RhbGUocXVlcnksIG9wdGlvbnMpLFxuICAgICAgcmVmZXRjaDogdGhpcy5yZWZldGNoLFxuICAgICAgcmVtb3ZlOiB0aGlzLnJlbW92ZVxuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8uc2hvdWxkTm90aWZ5TGlzdGVuZXJzID0gZnVuY3Rpb24gc2hvdWxkTm90aWZ5TGlzdGVuZXJzKHJlc3VsdCwgcHJldlJlc3VsdCkge1xuICAgIGlmICghcHJldlJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIG5vdGlmeU9uQ2hhbmdlUHJvcHMgPSBfdGhpcyRvcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHMsXG4gICAgICAgIG5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zID0gX3RoaXMkb3B0aW9ucy5ub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucztcblxuICAgIGlmICghbm90aWZ5T25DaGFuZ2VQcm9wcyAmJiAhbm90aWZ5T25DaGFuZ2VQcm9wc0V4Y2x1c2lvbnMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChub3RpZnlPbkNoYW5nZVByb3BzID09PSAndHJhY2tlZCcgJiYgIXRoaXMudHJhY2tlZFByb3BzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGluY2x1ZGVkUHJvcHMgPSBub3RpZnlPbkNoYW5nZVByb3BzID09PSAndHJhY2tlZCcgPyB0aGlzLnRyYWNrZWRQcm9wcyA6IG5vdGlmeU9uQ2hhbmdlUHJvcHM7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlc3VsdCkuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgdHlwZWRLZXkgPSBrZXk7XG4gICAgICB2YXIgY2hhbmdlZCA9IHJlc3VsdFt0eXBlZEtleV0gIT09IHByZXZSZXN1bHRbdHlwZWRLZXldO1xuICAgICAgdmFyIGlzSW5jbHVkZWQgPSBpbmNsdWRlZFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBpbmNsdWRlZFByb3BzLnNvbWUoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IGtleTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGlzRXhjbHVkZWQgPSBub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucyA9PSBudWxsID8gdm9pZCAwIDogbm90aWZ5T25DaGFuZ2VQcm9wc0V4Y2x1c2lvbnMuc29tZShmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCA9PT0ga2V5O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY2hhbmdlZCAmJiAhaXNFeGNsdWRlZCAmJiAoIWluY2x1ZGVkUHJvcHMgfHwgaXNJbmNsdWRlZCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVJlc3VsdCA9IGZ1bmN0aW9uIHVwZGF0ZVJlc3VsdChub3RpZnlPcHRpb25zKSB7XG4gICAgdmFyIHByZXZSZXN1bHQgPSB0aGlzLmN1cnJlbnRSZXN1bHQ7XG4gICAgdGhpcy5jdXJyZW50UmVzdWx0ID0gdGhpcy5jcmVhdGVSZXN1bHQodGhpcy5jdXJyZW50UXVlcnksIHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5jdXJyZW50UmVzdWx0U3RhdGUgPSB0aGlzLmN1cnJlbnRRdWVyeS5zdGF0ZTtcbiAgICB0aGlzLmN1cnJlbnRSZXN1bHRPcHRpb25zID0gdGhpcy5vcHRpb25zOyAvLyBPbmx5IG5vdGlmeSBpZiBzb21ldGhpbmcgaGFzIGNoYW5nZWRcblxuICAgIGlmIChzaGFsbG93RXF1YWxPYmplY3RzKHRoaXMuY3VycmVudFJlc3VsdCwgcHJldlJlc3VsdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIERldGVybWluZSB3aGljaCBjYWxsYmFja3MgdG8gdHJpZ2dlclxuXG5cbiAgICB2YXIgZGVmYXVsdE5vdGlmeU9wdGlvbnMgPSB7XG4gICAgICBjYWNoZTogdHJ1ZVxuICAgIH07XG5cbiAgICBpZiAoKG5vdGlmeU9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG5vdGlmeU9wdGlvbnMubGlzdGVuZXJzKSAhPT0gZmFsc2UgJiYgdGhpcy5zaG91bGROb3RpZnlMaXN0ZW5lcnModGhpcy5jdXJyZW50UmVzdWx0LCBwcmV2UmVzdWx0KSkge1xuICAgICAgZGVmYXVsdE5vdGlmeU9wdGlvbnMubGlzdGVuZXJzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLm5vdGlmeShfZXh0ZW5kcyh7fSwgZGVmYXVsdE5vdGlmeU9wdGlvbnMsIG5vdGlmeU9wdGlvbnMpKTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlUXVlcnkgPSBmdW5jdGlvbiB1cGRhdGVRdWVyeSgpIHtcbiAgICB2YXIgcXVlcnkgPSB0aGlzLmNsaWVudC5nZXRRdWVyeUNhY2hlKCkuYnVpbGQodGhpcy5jbGllbnQsIHRoaXMub3B0aW9ucyk7XG5cbiAgICBpZiAocXVlcnkgPT09IHRoaXMuY3VycmVudFF1ZXJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByZXZRdWVyeSA9IHRoaXMuY3VycmVudFF1ZXJ5O1xuICAgIHRoaXMuY3VycmVudFF1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5jdXJyZW50UXVlcnlJbml0aWFsU3RhdGUgPSBxdWVyeS5zdGF0ZTtcbiAgICB0aGlzLnByZXZpb3VzUXVlcnlSZXN1bHQgPSB0aGlzLmN1cnJlbnRSZXN1bHQ7XG5cbiAgICBpZiAodGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgcHJldlF1ZXJ5ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UXVlcnkucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7XG4gICAgICBxdWVyeS5hZGRPYnNlcnZlcih0aGlzKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uUXVlcnlVcGRhdGUgPSBmdW5jdGlvbiBvblF1ZXJ5VXBkYXRlKGFjdGlvbikge1xuICAgIHZhciBub3RpZnlPcHRpb25zID0ge307XG5cbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09ICdzdWNjZXNzJykge1xuICAgICAgbm90aWZ5T3B0aW9ucy5vblN1Y2Nlc3MgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09ICdlcnJvcicgJiYgIWlzQ2FuY2VsbGVkRXJyb3IoYWN0aW9uLmVycm9yKSkge1xuICAgICAgbm90aWZ5T3B0aW9ucy5vbkVycm9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVJlc3VsdChub3RpZnlPcHRpb25zKTtcblxuICAgIGlmICh0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRpbWVycygpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KG5vdGlmeU9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgLy8gRmlyc3QgdHJpZ2dlciB0aGUgY29uZmlndXJhdGlvbiBjYWxsYmFja3NcbiAgICAgIGlmIChub3RpZnlPcHRpb25zLm9uU3VjY2Vzcykge1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uU3VjY2VzcyhfdGhpczguY3VycmVudFJlc3VsdC5kYXRhKTtcbiAgICAgICAgX3RoaXM4Lm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczgub3B0aW9ucy5vblNldHRsZWQoX3RoaXM4LmN1cnJlbnRSZXN1bHQuZGF0YSwgbnVsbCk7XG4gICAgICB9IGVsc2UgaWYgKG5vdGlmeU9wdGlvbnMub25FcnJvcikge1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczgub3B0aW9ucy5vbkVycm9yKF90aGlzOC5jdXJyZW50UmVzdWx0LmVycm9yKTtcbiAgICAgICAgX3RoaXM4Lm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczgub3B0aW9ucy5vblNldHRsZWQodW5kZWZpbmVkLCBfdGhpczguY3VycmVudFJlc3VsdC5lcnJvcik7XG4gICAgICB9IC8vIFRoZW4gdHJpZ2dlciB0aGUgbGlzdGVuZXJzXG5cblxuICAgICAgaWYgKG5vdGlmeU9wdGlvbnMubGlzdGVuZXJzKSB7XG4gICAgICAgIF90aGlzOC5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgICBsaXN0ZW5lcihfdGhpczguY3VycmVudFJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgICAgfSAvLyBUaGVuIHRoZSBjYWNoZSBsaXN0ZW5lcnNcblxuXG4gICAgICBpZiAobm90aWZ5T3B0aW9ucy5jYWNoZSkge1xuICAgICAgICBfdGhpczguY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5ub3RpZnkoe1xuICAgICAgICAgIHF1ZXJ5OiBfdGhpczguY3VycmVudFF1ZXJ5LFxuICAgICAgICAgIHR5cGU6ICdvYnNlcnZlclJlc3VsdHNVcGRhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gUXVlcnlPYnNlcnZlcjtcbn0oU3Vic2NyaWJhYmxlKTtcblxuZnVuY3Rpb24gc2hvdWxkTG9hZE9uTW91bnQocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2UgJiYgIXF1ZXJ5LnN0YXRlLmRhdGFVcGRhdGVkQXQgJiYgIShxdWVyeS5zdGF0ZS5zdGF0dXMgPT09ICdlcnJvcicgJiYgb3B0aW9ucy5yZXRyeU9uTW91bnQgPT09IGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKSB7XG4gIHJldHVybiBzaG91bGRMb2FkT25Nb3VudChxdWVyeSwgb3B0aW9ucykgfHwgcXVlcnkuc3RhdGUuZGF0YVVwZGF0ZWRBdCA+IDAgJiYgc2hvdWxkRmV0Y2hPbihxdWVyeSwgb3B0aW9ucywgb3B0aW9ucy5yZWZldGNoT25Nb3VudCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEZldGNoT24ocXVlcnksIG9wdGlvbnMsIGZpZWxkKSB7XG4gIGlmIChvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlKSB7XG4gICAgdmFyIHZhbHVlID0gdHlwZW9mIGZpZWxkID09PSAnZnVuY3Rpb24nID8gZmllbGQocXVlcnkpIDogZmllbGQ7XG4gICAgcmV0dXJuIHZhbHVlID09PSAnYWx3YXlzJyB8fCB2YWx1ZSAhPT0gZmFsc2UgJiYgaXNTdGFsZShxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEZldGNoT3B0aW9uYWxseShxdWVyeSwgcHJldlF1ZXJ5LCBvcHRpb25zLCBwcmV2T3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZSAmJiAocXVlcnkgIT09IHByZXZRdWVyeSB8fCBwcmV2T3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSkgJiYgKCFvcHRpb25zLnN1c3BlbnNlIHx8IHF1ZXJ5LnN0YXRlLnN0YXR1cyAhPT0gJ2Vycm9yJykgJiYgaXNTdGFsZShxdWVyeSwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGlzU3RhbGUocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHF1ZXJ5LmlzU3RhbGVCeVRpbWUob3B0aW9ucy5zdGFsZVRpbWUpO1xufSIsICJpbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmV4cG9ydCB2YXIgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgPSBSZWFjdERPTS51bnN0YWJsZV9iYXRjaGVkVXBkYXRlczsiLCAiaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgfSBmcm9tICcuL3JlYWN0QmF0Y2hlZFVwZGF0ZXMnO1xubm90aWZ5TWFuYWdlci5zZXRCYXRjaE5vdGlmeUZ1bmN0aW9uKHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKTsiLCAiZXhwb3J0IHZhciBsb2dnZXIgPSBjb25zb2xlOyIsICJpbXBvcnQgeyBzZXRMb2dnZXIgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbnNldExvZ2dlcihsb2dnZXIpOyIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIGRlZmF1bHRDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbnZhciBRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoZmFsc2UpOyAvLyBpZiBjb250ZXh0U2hhcmluZyBpcyBvbiwgd2Ugc2hhcmUgdGhlIGZpcnN0IGFuZCBhdCBsZWFzdCBvbmVcbi8vIGluc3RhbmNlIG9mIHRoZSBjb250ZXh0IGFjcm9zcyB0aGUgd2luZG93XG4vLyB0byBlbnN1cmUgdGhhdCBpZiBSZWFjdCBRdWVyeSBpcyB1c2VkIGFjcm9zc1xuLy8gZGlmZmVyZW50IGJ1bmRsZXMgb3IgbWljcm9mcm9udGVuZHMgdGhleSB3aWxsXG4vLyBhbGwgdXNlIHRoZSBzYW1lICoqaW5zdGFuY2UqKiBvZiBjb250ZXh0LCByZWdhcmRsZXNzXG4vLyBvZiBtb2R1bGUgc2NvcGluZy5cblxuZnVuY3Rpb24gZ2V0UXVlcnlDbGllbnRDb250ZXh0KGNvbnRleHRTaGFyaW5nKSB7XG4gIGlmIChjb250ZXh0U2hhcmluZyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICghd2luZG93LlJlYWN0UXVlcnlDbGllbnRDb250ZXh0KSB7XG4gICAgICB3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQgPSBkZWZhdWx0Q29udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gd2luZG93LlJlYWN0UXVlcnlDbGllbnRDb250ZXh0O1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRDb250ZXh0O1xufVxuXG5leHBvcnQgdmFyIHVzZVF1ZXJ5Q2xpZW50ID0gZnVuY3Rpb24gdXNlUXVlcnlDbGllbnQoKSB7XG4gIHZhciBxdWVyeUNsaWVudCA9IFJlYWN0LnVzZUNvbnRleHQoZ2V0UXVlcnlDbGllbnRDb250ZXh0KFJlYWN0LnVzZUNvbnRleHQoUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dCkpKTtcblxuICBpZiAoIXF1ZXJ5Q2xpZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBRdWVyeUNsaWVudCBzZXQsIHVzZSBRdWVyeUNsaWVudFByb3ZpZGVyIHRvIHNldCBvbmUnKTtcbiAgfVxuXG4gIHJldHVybiBxdWVyeUNsaWVudDtcbn07XG5leHBvcnQgdmFyIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgPSBmdW5jdGlvbiBRdWVyeUNsaWVudFByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNsaWVudCA9IF9yZWYuY2xpZW50LFxuICAgICAgX3JlZiRjb250ZXh0U2hhcmluZyA9IF9yZWYuY29udGV4dFNoYXJpbmcsXG4gICAgICBjb250ZXh0U2hhcmluZyA9IF9yZWYkY29udGV4dFNoYXJpbmcgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRjb250ZXh0U2hhcmluZyxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBjbGllbnQubW91bnQoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgY2xpZW50LnVubW91bnQoKTtcbiAgICB9O1xuICB9LCBbY2xpZW50XSk7XG4gIHZhciBDb250ZXh0ID0gZ2V0UXVlcnlDbGllbnRDb250ZXh0KGNvbnRleHRTaGFyaW5nKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dFNoYXJpbmdcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjbGllbnRcbiAgfSwgY2hpbGRyZW4pKTtcbn07IiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIENPTlRFWFRcblxuZnVuY3Rpb24gY3JlYXRlVmFsdWUoKSB7XG4gIHZhciBfaXNSZXNldCA9IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIGNsZWFyUmVzZXQ6IGZ1bmN0aW9uIGNsZWFyUmVzZXQoKSB7XG4gICAgICBfaXNSZXNldCA9IGZhbHNlO1xuICAgIH0sXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgX2lzUmVzZXQgPSB0cnVlO1xuICAgIH0sXG4gICAgaXNSZXNldDogZnVuY3Rpb24gaXNSZXNldCgpIHtcbiAgICAgIHJldHVybiBfaXNSZXNldDtcbiAgICB9XG4gIH07XG59XG5cbnZhciBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeUNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChjcmVhdGVWYWx1ZSgpKTsgLy8gSE9PS1xuXG5leHBvcnQgdmFyIHVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkoKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dCk7XG59OyAvLyBDT01QT05FTlRcblxuZXhwb3J0IHZhciBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSA9IGZ1bmN0aW9uIFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIHZhbHVlID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVZhbHVlKCk7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB2YWx1ZVxuICB9LCB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbih2YWx1ZSkgOiBjaGlsZHJlbik7XG59OyIsICJleHBvcnQgZnVuY3Rpb24gc2hvdWxkVGhyb3dFcnJvcihzdXNwZW5zZSwgX3VzZUVycm9yQm91bmRhcnksIHBhcmFtcykge1xuICAvLyBBbGxvdyB1c2VFcnJvckJvdW5kYXJ5IGZ1bmN0aW9uIHRvIG92ZXJyaWRlIHRocm93aW5nIGJlaGF2aW9yIG9uIGEgcGVyLWVycm9yIGJhc2lzXG4gIGlmICh0eXBlb2YgX3VzZUVycm9yQm91bmRhcnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gX3VzZUVycm9yQm91bmRhcnkuYXBwbHkodm9pZCAwLCBwYXJhbXMpO1xuICB9IC8vIEFsbG93IHVzZUVycm9yQm91bmRhcnkgdG8gb3ZlcnJpZGUgc3VzcGVuc2UncyB0aHJvd2luZyBiZWhhdmlvclxuXG5cbiAgaWYgKHR5cGVvZiBfdXNlRXJyb3JCb3VuZGFyeSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gX3VzZUVycm9yQm91bmRhcnk7IC8vIElmIHN1c3BlbnNlIGlzIGVuYWJsZWQgZGVmYXVsdCB0byB0aHJvd2luZyBlcnJvcnNcblxuICByZXR1cm4gISFzdXNwZW5zZTtcbn0iLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuLi9jb3JlL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkgfSBmcm9tICcuL1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5JztcbmltcG9ydCB7IHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSAnLi9RdWVyeUNsaWVudFByb3ZpZGVyJztcbmltcG9ydCB7IHNob3VsZFRocm93RXJyb3IgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCBmdW5jdGlvbiB1c2VCYXNlUXVlcnkob3B0aW9ucywgT2JzZXJ2ZXIpIHtcbiAgdmFyIG1vdW50ZWRSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuXG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSgwKSxcbiAgICAgIGZvcmNlVXBkYXRlID0gX1JlYWN0JHVzZVN0YXRlWzFdO1xuXG4gIHZhciBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHZhciBlcnJvclJlc2V0Qm91bmRhcnkgPSB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSgpO1xuICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHF1ZXJ5Q2xpZW50LmRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyhvcHRpb25zKTsgLy8gTWFrZSBzdXJlIHJlc3VsdHMgYXJlIG9wdGltaXN0aWNhbGx5IHNldCBpbiBmZXRjaGluZyBzdGF0ZSBiZWZvcmUgc3Vic2NyaWJpbmcgb3IgdXBkYXRpbmcgb3B0aW9uc1xuXG4gIGRlZmF1bHRlZE9wdGlvbnMub3B0aW1pc3RpY1Jlc3VsdHMgPSB0cnVlOyAvLyBJbmNsdWRlIGNhbGxiYWNrcyBpbiBiYXRjaCByZW5kZXJzXG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMub25FcnJvcikge1xuICAgIGRlZmF1bHRlZE9wdGlvbnMub25FcnJvciA9IG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhkZWZhdWx0ZWRPcHRpb25zLm9uRXJyb3IpO1xuICB9XG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMub25TdWNjZXNzKSB7XG4gICAgZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MgPSBub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MpO1xuICB9XG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkKSB7XG4gICAgZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQgPSBub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQpO1xuICB9XG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UpIHtcbiAgICAvLyBBbHdheXMgc2V0IHN0YWxlIHRpbWUgd2hlbiB1c2luZyBzdXNwZW5zZSB0byBwcmV2ZW50XG4gICAgLy8gZmV0Y2hpbmcgYWdhaW4gd2hlbiBkaXJlY3RseSBtb3VudGluZyBhZnRlciBzdXNwZW5kaW5nXG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lID0gMTAwMDtcbiAgICB9IC8vIFNldCBjYWNoZSB0aW1lIHRvIDEgaWYgdGhlIG9wdGlvbiBoYXMgYmVlbiBzZXQgdG8gMFxuICAgIC8vIHdoZW4gdXNpbmcgc3VzcGVuc2UgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wIG9mIGZldGNoZXNcblxuXG4gICAgaWYgKGRlZmF1bHRlZE9wdGlvbnMuY2FjaGVUaW1lID09PSAwKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLmNhY2hlVGltZSA9IDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UgfHwgZGVmYXVsdGVkT3B0aW9ucy51c2VFcnJvckJvdW5kYXJ5KSB7XG4gICAgLy8gUHJldmVudCByZXRyeWluZyBmYWlsZWQgcXVlcnkgaWYgdGhlIGVycm9yIGJvdW5kYXJ5IGhhcyBub3QgYmVlbiByZXNldCB5ZXRcbiAgICBpZiAoIWVycm9yUmVzZXRCb3VuZGFyeS5pc1Jlc2V0KCkpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucmV0cnlPbk1vdW50ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTIgPSBSZWFjdC51c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZlcihxdWVyeUNsaWVudCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gIH0pLFxuICAgICAgb2JzZXJ2ZXIgPSBfUmVhY3QkdXNlU3RhdGUyWzBdO1xuXG4gIHZhciByZXN1bHQgPSBvYnNlcnZlci5nZXRPcHRpbWlzdGljUmVzdWx0KGRlZmF1bHRlZE9wdGlvbnMpO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIG1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgZXJyb3JSZXNldEJvdW5kYXJ5LmNsZWFyUmVzZXQoKTtcbiAgICB2YXIgdW5zdWJzY3JpYmUgPSBvYnNlcnZlci5zdWJzY3JpYmUobm90aWZ5TWFuYWdlci5iYXRjaENhbGxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChtb3VudGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgZm9yY2VVcGRhdGUoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4geCArIDE7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pKTsgLy8gVXBkYXRlIHJlc3VsdCB0byBtYWtlIHN1cmUgd2UgZGlkIG5vdCBtaXNzIGFueSBxdWVyeSB1cGRhdGVzXG4gICAgLy8gYmV0d2VlbiBjcmVhdGluZyB0aGUgb2JzZXJ2ZXIgYW5kIHN1YnNjcmliaW5nIHRvIGl0LlxuXG4gICAgb2JzZXJ2ZXIudXBkYXRlUmVzdWx0KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICB9LCBbZXJyb3JSZXNldEJvdW5kYXJ5LCBvYnNlcnZlcl0pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIERvIG5vdCBub3RpZnkgb24gdXBkYXRlcyBiZWNhdXNlIG9mIGNoYW5nZXMgaW4gdGhlIG9wdGlvbnMgYmVjYXVzZVxuICAgIC8vIHRoZXNlIGNoYW5nZXMgc2hvdWxkIGFscmVhZHkgYmUgcmVmbGVjdGVkIGluIHRoZSBvcHRpbWlzdGljIHJlc3VsdC5cbiAgICBvYnNlcnZlci5zZXRPcHRpb25zKGRlZmF1bHRlZE9wdGlvbnMsIHtcbiAgICAgIGxpc3RlbmVyczogZmFsc2VcbiAgICB9KTtcbiAgfSwgW2RlZmF1bHRlZE9wdGlvbnMsIG9ic2VydmVyXSk7IC8vIEhhbmRsZSBzdXNwZW5zZVxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlICYmIHJlc3VsdC5pc0xvYWRpbmcpIHtcbiAgICB0aHJvdyBvYnNlcnZlci5mZXRjaE9wdGltaXN0aWMoZGVmYXVsdGVkT3B0aW9ucykudGhlbihmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MoZGF0YSk7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQoZGF0YSwgbnVsbCk7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBlcnJvclJlc2V0Qm91bmRhcnkuY2xlYXJSZXNldCgpO1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBkZWZhdWx0ZWRPcHRpb25zLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkKHVuZGVmaW5lZCwgZXJyb3IpO1xuICAgIH0pO1xuICB9IC8vIEhhbmRsZSBlcnJvciBib3VuZGFyeVxuXG5cbiAgaWYgKHJlc3VsdC5pc0Vycm9yICYmICFlcnJvclJlc2V0Qm91bmRhcnkuaXNSZXNldCgpICYmICFyZXN1bHQuaXNGZXRjaGluZyAmJiBzaG91bGRUaHJvd0Vycm9yKGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UsIGRlZmF1bHRlZE9wdGlvbnMudXNlRXJyb3JCb3VuZGFyeSwgW3Jlc3VsdC5lcnJvciwgb2JzZXJ2ZXIuZ2V0Q3VycmVudFF1ZXJ5KCldKSkge1xuICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgfSAvLyBIYW5kbGUgcmVzdWx0IHByb3BlcnR5IHVzYWdlIHRyYWNraW5nXG5cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5ub3RpZnlPbkNoYW5nZVByb3BzID09PSAndHJhY2tlZCcpIHtcbiAgICByZXN1bHQgPSBvYnNlcnZlci50cmFja1Jlc3VsdChyZXN1bHQsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn0iLCAiaW1wb3J0IHsgUXVlcnlPYnNlcnZlciB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgcGFyc2VRdWVyeUFyZ3MgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IHVzZUJhc2VRdWVyeSB9IGZyb20gJy4vdXNlQmFzZVF1ZXJ5JzsgLy8gSE9PS1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpO1xuICByZXR1cm4gdXNlQmFzZVF1ZXJ5KHBhcnNlZE9wdGlvbnMsIFF1ZXJ5T2JzZXJ2ZXIpO1xufSIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlCYWRnZSwgRXVpSWNvbiB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWJQcmVzZW50YXRpb25Qcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uL3N0eWxlL3RzNG5mZGlTdHlsZXMvdHM0bmZkaUJyZWFkY3J1bWJTdHlsZS5jc3NcIjtcblxuZnVuY3Rpb24gQnJlYWRjcnVtYlByZXNlbnRhdGlvbihwcm9wczogQnJlYWRjcnVtYlByZXNlbnRhdGlvblByb3BzKSB7XG4gIGNvbnN0IGZpbmFsQ2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lIHx8IFwidHM0bmZkaS1icmVhZGNydW1iLXN0eWxlXCI7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PlxuICAgICAgICA8c3BhblxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSlcbiAgICAgICAgICAgICAgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3koXG4gICAgICAgICAgICAgICAgcHJvcHMub250b2xvZ3lJZCB8fCBcIlwiLFxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHJvbGU9XCJidXR0b25cIiAvLyBJbXByb3ZlIGFjY2Vzc2liaWxpdHlcbiAgICAgICAgICB0YWJJbmRleD17MH0gLy8gTWFrZSBpdCBmb2N1c2FibGVcbiAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikgZS5jdXJyZW50VGFyZ2V0LmNsaWNrKCk7XG4gICAgICAgICAgfX0gLy8gSGFuZGxlIGtleWJvYXJkIG5hdmlnYXRpb25cbiAgICAgICAgPlxuICAgICAgICAgIDxFdWlCYWRnZVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgcHJvcHMub250b2xvZ3lJZFxuICAgICAgICAgICAgICAgID8gXCJicmVhZGNydW1iIGNsaWNrYWJsZS1icmVhZGNydW1iXCJcbiAgICAgICAgICAgICAgICA6IFwiYnJlYWRjcnVtYlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2xvcj17cHJvcHMuY29sb3JGaXJzdCB8fCBcInByaW1hcnlcIn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7cHJvcHMub250b2xvZ3lOYW1lXG4gICAgICAgICAgICAgID8gcHJvcHMub250b2xvZ3lOYW1lLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgOiBcIk5vIG9udG9sb2d5IG5hbWUgYXZhaWxhYmxlXCJ9XG4gICAgICAgICAgPC9FdWlCYWRnZT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICAmbmJzcDtcbiAgICAgICAgPEV1aUljb24gdHlwZT1cImFycm93UmlnaHRcIiAvPlxuICAgICAgICAmbmJzcDtcbiAgICAgICAgPEV1aUJhZGdlIGNsYXNzTmFtZT1cImJyZWFkY3J1bWJcIiBjb2xvcj17cHJvcHMuY29sb3JTZWNvbmQgfHwgXCJzdWNjZXNzXCJ9PlxuICAgICAgICAgIHtwcm9wcy5zaG9ydEZvcm1cbiAgICAgICAgICAgID8gcHJvcHMuc2hvcnRGb3JtLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIDogXCJObyBzaG9ydCBmb3JtIGF2YWlsYWJsZVwifVxuICAgICAgICA8L0V1aUJhZGdlPlxuICAgICAgPC9zcGFuPlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpQ2FyZCwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgT250b2xvZ2llcyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBEYXRhQ29udGVudFdpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuZnVuY3Rpb24gRGF0YUNvbnRlbnRXaWRnZXQocHJvcHM6IERhdGFDb250ZW50V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGksIHBhcmFtZXRlciwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YTogb250b2xvZ2llc0RhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgZGF0YVVwZGF0ZWRBdCxcbiAgfSA9IHVzZVF1ZXJ5PE9udG9sb2dpZXM+KFtcIm9udG9sb2dpZXNEYXRhXCIsIGFwaSwgcGFyYW1ldGVyXSwgYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybiBvbHNBcGkuZ2V0T250b2xvZ2llc0RhdGEocHJvcHMucGFyYW1ldGVyKTtcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEV1aUNhcmRcbiAgICAgICAgdGl0bGU9XCJEYXRhIENvbnRlbnRcIlxuICAgICAgICBkZXNjcmlwdGlvbj17XG4gICAgICAgICAgZGF0YVVwZGF0ZWRBdFxuICAgICAgICAgICAgPyBgVXBkYXRlZCAke25ldyBEYXRlKGRhdGFVcGRhdGVkQXQpLnRvTG9jYWxlU3RyaW5nKCl9YFxuICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgIH1cbiAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICA+XG4gICAgICAgIDxFdWlUZXh0IHsuLi5yZXN0fT5cbiAgICAgICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD5ObyBkYXRhIGNvbnRlbnQgYXZhaWxhYmxlPC9FdWlUZXh0Pn1cbiAgICAgICAgICB7aXNMb2FkaW5nID8gKFxuICAgICAgICAgICAgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJzXCIgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICB7b250b2xvZ2llc0RhdGE/LmdldFRvdGFsT250b2xvZ2llcygpID8gKFxuICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgIHtvbnRvbG9naWVzRGF0YT8uZ2V0VG90YWxPbnRvbG9naWVzKCkudG9Mb2NhbGVTdHJpbmcoKX17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICBvbnRvbG9naWVzIGFuZCB0ZXJtaW5vbG9naWVzXG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19PlxuICAgICAgICAgICAgICAgICAgb250b2xvZ3kgbnVtYmVyIG5vdCBhdmFpbGFibGVcbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7b250b2xvZ2llc0RhdGE/LmdldE51bUNsYXNzZXMoKSA/IChcbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICB7b250b2xvZ2llc0RhdGE/LmdldE51bUNsYXNzZXMoKS50b0xvY2FsZVN0cmluZygpfSB0ZXJtc1xuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPGxpIHN0eWxlPXt7IGZvbnRTdHlsZTogXCJpdGFsaWNcIiB9fT5cbiAgICAgICAgICAgICAgICAgIHRlcm0gbnVtYmVyIG5vdCBhdmFpbGFibGVcbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7b250b2xvZ2llc0RhdGE/LmdldE51bVByb3BlcnRpZXMoKSA/IChcbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICB7b250b2xvZ2llc0RhdGE/LmdldE51bVByb3BlcnRpZXMoKS50b0xvY2FsZVN0cmluZygpfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxsaSBzdHlsZT17eyBmb250U3R5bGU6IFwiaXRhbGljXCIgfX0+XG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0eSBudW1iZXIgbm90IGF2YWlsYWJsZVxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtvbnRvbG9naWVzRGF0YT8uZ2V0TnVtSW5kaXZpZHVhbHMoKSA/IChcbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICB7b250b2xvZ2llc0RhdGE/LmdldE51bUluZGl2aWR1YWxzKCkudG9Mb2NhbGVTdHJpbmcoKX17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsc1xuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPGxpIHN0eWxlPXt7IGZvbnRTdHlsZTogXCJpdGFsaWNcIiB9fT5cbiAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgbnVtYmVyIG5vdCBhdmFpbGFibGVcbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7LyogPGxpPlZlcnNpb24ge05PVF9BVkFJTEFCTEV9PC9saT4gKi99e1wiIFwifVxuICAgICAgICAgICAgICB7LyogVE9ETyBob3cgdG8gZ2V0IEFQSSB2ZXJzaW9uPyAqL31cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgPC9FdWlDYXJkPlxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEYXRhQ29udGVudChcbiAgcHJvcHM6IERhdGFDb250ZW50V2lkZ2V0UHJvcHMsXG4gIGNvbnRhaW5lcjogYW55LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZERhdGFDb250ZW50V2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWREYXRhQ29udGVudFdpZGdldChwcm9wczogRGF0YUNvbnRlbnRXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxEYXRhQ29udGVudFdpZGdldCBhcGk9e3Byb3BzLmFwaX0gcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9IC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRGF0YUNvbnRlbnRXaWRnZXQsIGNyZWF0ZURhdGFDb250ZW50IH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7IFJlYWN0RWxlbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgRXVpQ2FyZCxcbiAgRXVpRmxleEl0ZW0sXG4gIEV1aUxvYWRpbmdTcGlubmVyLFxuICBFdWlQcm92aWRlcixcbiAgRXVpU3BhY2VyLFxuICBFdWlUZXh0LFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge1xuICBhc0FycmF5LFxuICBjYXBpdGFsaXplLFxuICBkZUNhbWVsQ2FzZSxcbiAgZGVVbmRlcnNjb3JlLFxuICBnZXRFbnRpdHlUeXBlTmFtZSxcbiAgcmFuZG9tU3RyaW5nLFxuICBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXksXG59IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtcbiAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYLFxuICBnZXRFbnRpdHlMaW5rSlNYLFxuICBnZXRSZWlmaWVkSlNYLFxuICBnZXRUb29sdGlwLFxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nXCI7XG5pbXBvcnQge1xuICBQcm9wZXJ0eSxcbiAgVGhpbmcsXG4gIENsYXNzLFxuICBFbnRpdHksXG4gIEluZGl2aWR1YWwsXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge1xuICBpc0NsYXNzLFxuICBpc1Byb3BlcnR5LFxuICBpc0luZGl2aWR1YWwsXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgRW50aXR5SW5mb1dpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgREVGQVVMVF9IQVNfVElUTEUgPSB0cnVlO1xuXG5mdW5jdGlvbiBFbnRpdHlJbmZvV2lkZ2V0KHByb3BzOiBFbnRpdHlJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBjb25zdCB7XG4gICAgYXBpLFxuICAgIGlyaSxcbiAgICBvbnRvbG9neUlkLFxuICAgIGhhc1RpdGxlID0gREVGQVVMVF9IQVNfVElUTEUsXG4gICAgZW50aXR5VHlwZSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgc2hvd0JhZGdlcyxcbiAgICB1c2VMZWdhY3ksXG4gICAgb25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgIG9uTmF2aWdhdGVUb09udG9sb2d5LFxuICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBlbnRpdHksXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdFbnRpdHksXG4gICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NFbnRpdHksXG4gICAgaXNFcnJvcjogaXNFcnJvckVudGl0eSxcbiAgICBlcnJvcjogZXJyb3JFbnRpdHksXG4gIH0gPSB1c2VRdWVyeShbXCJlbnRpdHlJbmZvXCIsIHByb3BzXSwgKCkgPT4ge1xuICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KFxuICAgICAgaXJpLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBwYXJhbWV0ZXIsXG4gICAgICB1c2VMZWdhY3lcbiAgICApO1xuICB9KTtcblxuICBmdW5jdGlvbiBnZXRMYWJlbFNlY3Rpb24oZW50aXR5OiBFbnRpdHkpOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7ZW50aXR5LmdldExhYmVsKCkgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDxiPkxhYmVsOjwvYj5cbiAgICAgICAgICAgICAge2VudGl0eS5nZXRMYWJlbCgpfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxFdWlTcGFjZXIgLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTeW5vbnltc1NlY3Rpb24oZW50aXR5OiBFbnRpdHkpOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7ZW50aXR5LmdldFN5bm9ueW1zKCkubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgPGI+U3lub255bXM6PC9iPlxuICAgICAgICAgICAgICB7ZW50aXR5LmdldFN5bm9ueW1zKCkubGVuZ3RoID4gMSA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICB7ZW50aXR5LmdldFN5bm9ueW1zKCkubWFwKChzeW5vbnltKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17c3lub255bS52YWx1ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRSZWlmaWVkSlNYKGVudGl0eSwgc3lub255bSwgc2hvd0JhZGdlcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICB7Z2V0UmVpZmllZEpTWChlbnRpdHksIGVudGl0eS5nZXRTeW5vbnltcygpWzBdLCBzaG93QmFkZ2VzLCB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRIYXNLZXlTZWN0aW9uKHRlcm06IENsYXNzKTogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCBrZXlzID0gdGVybS5nZXRIYXNLZXkoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2tleXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgPGI+SGFzIEtleTo8L2I+XG4gICAgICAgICAgICAgIHtrZXlzLmxlbmd0aCA+IDEgPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAge2tleXMubWFwKChrZXlzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgIDxwPjwvcD5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICAgICAgICAgIHRlcm0sXG4gICAgICAgICAgICAgICAgICAgIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSxcbiAgICAgICAgICAgICAgICAgICAga2V5c1swXSxcbiAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFN1YnNldHNTZWN0aW9uKHRlcm06IENsYXNzKTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge3Rlcm0uZ2V0U3Vic2V0cygpLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDxiPkluIFN1YnNldHM6PC9iPlxuICAgICAgICAgICAgICB7dGVybS5nZXRTdWJzZXRzKCkubGVuZ3RoID4gMSA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICB7dGVybS5nZXRTdWJzZXRzKCkubWFwKChzdWJzZXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9IGlkPXtzdWJzZXQgKyByYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChcbiAgICAgICAgICAgICAgICAgICAgdGVybSxcbiAgICAgICAgICAgICAgICAgICAgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgICB0ZXJtLmdldFN1YnNldHMoKVswXSxcbiAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFByb3BlcnR5Q2hhcmFjdGVyaXN0aWNzU2VjdGlvbihwcm9wZXJ0eTogUHJvcGVydHkpOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IGNoYXJhY3RlcmlzdGljcyA9IHByb3BlcnR5XG4gICAgICAuZ2V0UmRmVHlwZXMoKVxuICAgICAgLm1hcCgodHlwZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjRnVuY3Rpb25hbFByb3BlcnR5XCI6IFwiRnVuY3Rpb25hbFwiLFxuICAgICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjSW52ZXJzZUZ1bmN0aW9uYWxQcm9wZXJ0eVwiOlxuICAgICAgICAgICAgXCJJbnZlcnNlIEZ1bmN0aW9uYWxcIixcbiAgICAgICAgICBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1RyYW5zaXRpdmVQcm9wZXJ0eVwiOiBcIlRyYW5zaXRpdmVcIixcbiAgICAgICAgICBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1N5bW1ldHJpY1Byb3BlcnR5XCI6IFwiU3ltbWV0cmljXCIsXG4gICAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNBc3ltbWV0cmljUHJvcGVydHlcIjogXCJBc3ltbWV0cmljXCIsXG4gICAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNSZWZsZXhpdmVQcm9wZXJ0eVwiOiBcIlJlZmxleGl2ZVwiLFxuICAgICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjSXJyZWZsZXhpdmVQcm9wZXJ0eVwiOiBcIklycmVmbGV4aXZlXCIsXG4gICAgICAgIH1bdHlwZV07XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigodHlwZSkgPT4gISF0eXBlKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7Y2hhcmFjdGVyaXN0aWNzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDxiPkNoYXJhY3RlcmlzdGljczo8L2I+XG4gICAgICAgICAgICAgIHtjaGFyYWN0ZXJpc3RpY3MubGVuZ3RoID4gMSA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICB7Y2hhcmFjdGVyaXN0aWNzXG4gICAgICAgICAgICAgICAgICAgICAgLm1hcCgoY2hhcmFjdGVyaXN0aWMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2NoYXJhY3RlcmlzdGljfTwvbGk+O1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKX1cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPHA+e2NoYXJhY3RlcmlzdGljc1swXX08L3A+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERvbWFpblNlY3Rpb24ocHJvcGVydHk6IFByb3BlcnR5KTogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCBkb21haW5zID0gcHJvcGVydHkuZ2V0RG9tYWluKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtkb21haW5zLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDxiPkRvbWFpbjo8L2I+XG4gICAgICAgICAgICAgIHtkb21haW5zLmxlbmd0aCA+IDEgPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAge2RvbWFpbnMubWFwKChkb21haW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgPHA+PC9wPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgICAgICAgIGRvbWFpbnNbMF0sXG4gICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRSYW5nZVNlY3Rpb24ocHJvcGVydHk6IFByb3BlcnR5KTogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCByYW5nZXMgPSBwcm9wZXJ0eS5nZXRSYW5nZSgpO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7cmFuZ2VzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxiPlJhbmdlOjwvYj5cbiAgICAgICAgICAgIHtyYW5nZXMubGVuZ3RoID4gMSA/IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICB7cmFuZ2VzLm1hcCgocmFuZ2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgPHA+PC9wPlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgICAgICByYW5nZXNbMF0sXG4gICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LFxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbFByb3BlcnR5QXNzZXJ0aW9uc1NlY3Rpb24oXG4gICAgaW5kaXZpZHVhbDogSW5kaXZpZHVhbFxuICApOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IHByb3BlcnR5SXJpcyA9IE9iamVjdC5rZXlzKGluZGl2aWR1YWwucHJvcGVydGllcyk7XG4gICAgY29uc3QgbmVnYXRpdmVQcm9wZXJ0aWVzID0gcHJvcGVydHlJcmlzLmZpbHRlcigoa2V5KSA9PlxuICAgICAga2V5LnN0YXJ0c1dpdGgoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiKVxuICAgICk7XG4gICAgY29uc3Qgb2JqZWN0UHJvcGVydGllcyA9IHByb3BlcnR5SXJpcy5maWx0ZXIoXG4gICAgICAoa2V5KSA9PlxuICAgICAgICBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGtleSkgJiZcbiAgICAgICAgaW5kaXZpZHVhbFxuICAgICAgICAgIC5nZXRMaW5rZWRFbnRpdGllcygpXG4gICAgICAgICAgLmdldChrZXkpXG4gICAgICAgICAgPy50eXBlLmluZGV4T2YoXCJvYmplY3RQcm9wZXJ0eVwiKSAhPT0gLTFcbiAgICApO1xuICAgIGNvbnN0IGRhdGFQcm9wZXJ0aWVzID0gcHJvcGVydHlJcmlzLmZpbHRlcihcbiAgICAgIChrZXkpID0+XG4gICAgICAgIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoa2V5KSAmJlxuICAgICAgICBpbmRpdmlkdWFsXG4gICAgICAgICAgLmdldExpbmtlZEVudGl0aWVzKClcbiAgICAgICAgICAuZ2V0KGtleSlcbiAgICAgICAgICA/LnR5cGUuaW5kZXhPZihcImRhdGFQcm9wZXJ0eVwiKSAhPT0gLTFcbiAgICApO1xuICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uczogUmVhY3RFbGVtZW50W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgaXJpIG9mIG9iamVjdFByb3BlcnRpZXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGFzQXJyYXkoaW5kaXZpZHVhbC5wcm9wZXJ0aWVzW2lyaV0pO1xuICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbnMucHVzaChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgICAgaW5kaXZpZHVhbCxcbiAgICAgICAgICAgICAgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICBpcmksXG4gICAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7dHlwZW9mIHYgPT09IFwic3RyaW5nXCIgJiYgdi5pbmNsdWRlcyhcImh0dHBcIikgPyAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIiB9fT5cbiAgICAgICAgICAgICAgICAgICYjOTY1NjtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1goXG4gICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsLFxuICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgdixcbiAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgZ2V0VG9vbHRpcChcbiAgICAgICAgICAgICAgICB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgPyB2XG4gICAgICAgICAgICAgICAgICA6IHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHYpICYmIHYudmFsdWVcbiAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkodi52YWx1ZSlcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkodilcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGlyaSBvZiBkYXRhUHJvcGVydGllcykge1xuICAgICAgY29uc3QgdmFsdWVzID0gYXNBcnJheShpbmRpdmlkdWFsLnByb3BlcnRpZXNbaXJpXSk7XG4gICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgIHByb3BlcnR5QXNzZXJ0aW9ucy5wdXNoKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgICBpbmRpdmlkdWFsLFxuICAgICAgICAgICAgICBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgIGlyaSxcbiAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwiIH19PlxuICAgICAgICAgICAgICAgICAgJiM5NjU2O1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChcbiAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWwsXG4gICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgICAgICB2LFxuICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgbmVnYXRpdmVQcm9wZXJ0aWVzKSB7XG4gICAgICBjb25zdCBpcmkgPSBrZXkuc2xpY2UoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiLmxlbmd0aCk7XG4gICAgICBjb25zdCBsaW5rZWRFbnRpdHkgPSBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGlyaSk7XG4gICAgICBjb25zdCBoYXNEYXRhUHJvcGVydHkgPSBsaW5rZWRFbnRpdHk/LnR5cGUuaW5kZXhPZihcImRhdGFQcm9wZXJ0eVwiKSAhPT0gLTE7XG4gICAgICBjb25zdCBoYXNPYmplY3RQcm9wZXJ0eSA9XG4gICAgICAgIGxpbmtlZEVudGl0eT8udHlwZS5pbmRleE9mKFwib2JqZWN0UHJvcGVydHlcIikgIT09IC0xO1xuICAgICAgY29uc3QgdmFsdWVzID0gYXNBcnJheShpbmRpdmlkdWFsLnByb3BlcnRpZXNba2V5XSk7XG5cbiAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcbiAgICAgICAgcHJvcGVydHlBc3NlcnRpb25zLnB1c2goXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxpIHN0eWxlPXt7IGNvbG9yOiBcInB1cnBsZVwiIH19Pm5vdDwvaT57XCIgXCJ9XG4gICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgICBpbmRpdmlkdWFsLFxuICAgICAgICAgICAgICBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgIGlyaSxcbiAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHt0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiAmJiB2LmluY2x1ZGVzKFwiaHR0cFwiKSA/IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwiIH19PlxuICAgICAgICAgICAgICAgICAgJiM5NjU2O1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChcbiAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWwsXG4gICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgICAgICB2LFxuICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogaGFzT2JqZWN0UHJvcGVydHkgPyAoXG4gICAgICAgICAgICAgIGdldFRvb2x0aXAoXG4gICAgICAgICAgICAgICAgdHlwZW9mIHYgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgID8gdlxuICAgICAgICAgICAgICAgICAgOiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2KSAmJiB2LnZhbHVlXG4gICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHYudmFsdWUpXG4gICAgICAgICAgICAgICAgICA6IEpTT04uc3RyaW5naWZ5KHYpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkgOiBoYXNEYXRhUHJvcGVydHkgPyAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIiB9fT5cbiAgICAgICAgICAgICAgICAgICYjOTY1NjtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1goXG4gICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsLFxuICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgdixcbiAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtwcm9wZXJ0eUFzc2VydGlvbnMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgPGI+UHJvcGVydHkgYXNzZXJ0aW9uczo8L2I+XG4gICAgICAgICAgICAgIHtwcm9wZXJ0eUFzc2VydGlvbnMubGVuZ3RoID4gMSA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICB7cHJvcGVydHlBc3NlcnRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgLm1hcCgocGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e3BhfTwvbGk+O1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKX1cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPHA+e3Byb3BlcnR5QXNzZXJ0aW9uc1swXX08L3A+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFubm90YXRpb25TZWN0aW9uKHRoaW5nOiBUaGluZyk6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHt0aGluZy5nZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpLm1hcCgoYW5ub0tleSwgaW5kZXgsIGFycikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFubm9zID0gdGhpbmcuZ2V0QW5ub3RhdGlvbkJ5SWQoYW5ub0tleSk7XG4gICAgICAgICAgaWYgKGFubm9zLmxlbmd0aCA9PSAwKSByZXR1cm4gPD48Lz47XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfSBrZXk9e2Fubm9LZXl9PlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAge2NhcGl0YWxpemUoXG4gICAgICAgICAgICAgICAgICAgIGRlVW5kZXJzY29yZShcbiAgICAgICAgICAgICAgICAgICAgICBkZUNhbWVsQ2FzZSh0aGluZy5nZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGFubm9LZXkpKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgICB7YW5ub3MubGVuZ3RoID4gMSA/IChcbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICB7YW5ub3MubWFwKChhbm5vdGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gaWQ9e2Fubm90YXRpb24udmFsdWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRSZWlmaWVkSlNYKHRoaW5nLCBhbm5vdGF0aW9uLCBzaG93QmFkZ2VzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgPHA+PC9wPlxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxwIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0UmVpZmllZEpTWCh0aGluZywgYW5ub3NbMF0sIHNob3dCYWRnZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RXVpQ2FyZFxuICAgICAgICB0aXRsZT17XG4gICAgICAgICAgaGFzVGl0bGVcbiAgICAgICAgICAgID8gKGVudGl0eVR5cGVcbiAgICAgICAgICAgICAgICA/IGNhcGl0YWxpemUoZ2V0RW50aXR5VHlwZU5hbWUoZW50aXR5VHlwZSkpXG4gICAgICAgICAgICAgICAgOiBpc1N1Y2Nlc3NFbnRpdHkgJiYgZW50aXR5XG4gICAgICAgICAgICAgICAgPyBjYXBpdGFsaXplKGVudGl0eS5nZXRUeXBlKCkpXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArIFwiIEluZm9ybWF0aW9uXCJcbiAgICAgICAgICAgIDogXCJcIlxuICAgICAgICB9XG4gICAgICAgIGxheW91dD1cImhvcml6b250YWxcIlxuICAgICAgPlxuICAgICAgICB7aXNMb2FkaW5nRW50aXR5ICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXtcInNcIn0gLz59XG4gICAgICAgIHtpc1N1Y2Nlc3NFbnRpdHkgJiYgZW50aXR5ICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICAgIDxFdWlUZXh0IHsuLi5yZXN0fT5cbiAgICAgICAgICAgIHtnZXRMYWJlbFNlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgIHtnZXRTeW5vbnltc1NlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgIHtpc0NsYXNzKGVudGl0eSkgJiYgKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtnZXRTdWJzZXRzU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgIHtnZXRIYXNLZXlTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAge2lzUHJvcGVydHkoZW50aXR5KSAmJiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2dldFByb3BlcnR5Q2hhcmFjdGVyaXN0aWNzU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgIHtnZXREb21haW5TZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAge2dldFJhbmdlU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtpc0luZGl2aWR1YWwoZW50aXR5KSAmJiAoXG4gICAgICAgICAgICAgIDw+e2dldEluZGl2aWR1YWxQcm9wZXJ0eUFzc2VydGlvbnNTZWN0aW9uKGVudGl0eSl9PC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2dldEFubm90YXRpb25TZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICApfVxuICAgICAgICB7aXNFcnJvckVudGl0eSAmJiAoXG4gICAgICAgICAgPEV1aVRleHQ+XG4gICAgICAgICAgICB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yRW50aXR5LCBcImluZm9ybWF0aW9uXCIpfVxuICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgKX1cbiAgICAgIDwvRXVpQ2FyZD5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW50aXR5SW5mbyhcbiAgcHJvcHM6IEVudGl0eUluZm9XaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBhbnksXG4gIGNhbGxiYWNrPzogKCkgPT4gdm9pZFxuKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkRW50aXRpeUluZm9XaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEVudGl0aXlJbmZvV2lkZ2V0KHByb3BzOiBFbnRpdHlJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8RW50aXR5SW5mb1dpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgaGFzVGl0bGU9e3Byb3BzLmhhc1RpdGxlfVxuICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgc2hvd0JhZGdlcz17cHJvcHMuc2hvd0JhZGdlc31cbiAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRW50aXR5SW5mb1dpZGdldCwgY3JlYXRlRW50aXR5SW5mbyB9O1xuIiwgImltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IFJlYWN0LCB7IFJlYWN0RWxlbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpSWNvblRpcCwgRXVpSWNvbiB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IGFzQXJyYXksIGluZmVyVHlwZUZyb21UeXBlQXJyYXksIHJhbmRvbVN0cmluZyB9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IExpbmtlZEVudGl0aWVzIGZyb20gXCIuL0xpbmtlZEVudGl0aWVzXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5pbXBvcnQgXCIuLi9zdHlsZS90c3NTdHlsZXMuY3NzXCI7XG5pbXBvcnQgeyBPbk5hdmlnYXRlcyB9IGZyb20gXCIuLi9hcHAvdHlwZXNcIjtcblxuY29uc3QgREVGQVVMVF9TSE9XX0JBREdFUyA9IHRydWU7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sdGlwKHRleHQ6IHN0cmluZyk6IFJlYWN0RWxlbWVudCB7XG4gIHJldHVybiA8RXVpSWNvblRpcCB0eXBlPXtcImlJbkNpcmNsZVwifSBjb2xvcj17XCJzdWJkdWVkXCJ9IGNvbnRlbnQ9e3RleHR9IC8+O1xufVxuXG4vKipcbiAqIE9OTFkgVVNBQkxFIFdJVEggVjItQVBJIEVOVElUSUVTXG4gKlxuICogUmV0dXJucyBSZWlmaWVkIGF4aW9tcyBhcyBKU1ggZWxlbWVudCAoc2ltaWxhciB0byBNZXRhZGF0YVRvb2x0aXAgY29tcG9uZW50IGluIG9sczQgcHJvamVjdClcbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHkgdGhlIHN1cnJvdW5kaW5nIGVudGl0eSBvZiB0aGUgYXhpb21zIGFycmF5IChmb3IgZXZlbnR1YWwgbGFiZWwgZmV0Y2hpbmcpXG4gKiBAcGFyYW0gYXhpb21zRGljdCB0aGUgZW50aXRpZXMgYXhpb21zIGluIHRoZSBmb3JtYXQgcmV0dXJuZWQgYnkgUmVpZmllZDo6Z2V0TWV0YWRhdGEoKVxuICogQHJldHVybnMgUmVhY3RFbGVtZW50IHRoZSBheGlvbXMgaW4gSlNYIGZvcm1hdCB0byBkaXNwbGF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBeGlvbXNJbmZvcm1hdGlvbkpTWChcbiAgcGFyZW50RW50aXR5OiBUaGluZyxcbiAgYXhpb21zRGljdDogYW55IHwgbnVsbFxuKTogUmVhY3RFbGVtZW50IHtcbiAgY29uc3QgYXhpb21zVGV4dCA9IE9iamVjdC5rZXlzKGF4aW9tc0RpY3QpXG4gICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHBhcmVudEVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLmdldExhYmVsRm9ySXJpKGtleSkgfHwga2V5O1xuICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiBcIipcIiArIGF4aW9tc0RpY3Rba2V5XSArIFwiIChcIiArIGxhYmVsICsgXCIpXCI7XG4gICAgICB9IGVsc2UgcmV0dXJuIFwiXCI7XG4gICAgfSlcbiAgICAuam9pbihcIlxcblwiKTtcblxuICByZXR1cm4gZ2V0VG9vbHRpcChheGlvbXNUZXh0KTtcbn1cblxuLyoqXG4gKiBPTkxZIFVTQUJMRSBXSVRIIFYyLUFQSSBFTlRJVElFU1xuICpcbiAqIFJldHVybnMgYSBsYWJlbGVkIGVudGl0eSBsaW5rIGFzIEpTWCBlbGVtZW50XG4gKiBAcGFyYW0gcGFyZW50RW50aXR5IHRoZSBlbnRpdHkgb2JqZWN0IGluIHdoaWNoIHRoZSBsaW5rZWQgZW50aXR5IGV4aXN0c1xuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzIHRoZSBsaW5rZWRFbnRpdGllcyBvYmplY3QgKGV4aXN0cyBhcyBwYXJhbSBiZWNhdXNlIGl0IGlzIG5lY2Vzc2FyeSB0aGF0IHRoZSBlbnRpdHkgaGFzIGEgbGlua2VkRW50aXRpZXMgYmxvY2sgaW4gcHJvcGVydGllcylcbiAqIEBwYXJhbSBpcmkgICB0aGUgZW50aXRpZXMnIGlyaVxuICogQHBhcmFtIHNob3dCYWRnZXMgICAgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKiBAcmV0dXJucyBSZWFjdEVsZW1lbnQgdGhlIGVudGl0eSBsaW5rIEpTWFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50aXR5TGlua0pTWChcbiAgcGFyZW50RW50aXR5OiBUaGluZyxcbiAgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzLFxuICBpcmk6IHN0cmluZyxcbiAgc2hvd0JhZGdlczogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMsXG4gIC8qVE9ETzogY2hhbmdlIHRvIHVzaW5nIChlbnRpdHkgOiBFbnRpdHlEYXRhKSBsYXRlciovIG9uTmF2aWdhdGVzOiBPbk5hdmlnYXRlc1xuKTogUmVhY3RFbGVtZW50IHtcbiAgY29uc3QgbGFiZWwgPVxuICAgIGxpbmtlZEVudGl0aWVzLmdldExhYmVsRm9ySXJpKGlyaSkgfHwgaXJpLnNwbGl0KFwiL1wiKS5wb3AoKSB8fCBpcmk7XG4gIGNvbnN0IGxpbmtlZEVudGl0eSA9IGxpbmtlZEVudGl0aWVzLmdldChpcmkpO1xuICBjb25zdCBsb2NhbE9udG9sb2d5ID0gcGFyZW50RW50aXR5LmdldE9udG9sb2d5SWQoKTtcblxuICAvLyByZWZlcmVuY2UgdG8gc2VsZjoganVzdCBkaXNwbGF5IGxhYmVsIGJlY2F1c2Ugd2UgYXJlIGFscmVhZHkgb24gdGhhdCBwYWdlXG4gIGlmIChwYXJlbnRFbnRpdHkuZ2V0VHlwZSgpICE9PSBcIm9udG9sb2d5XCIgJiYgaXJpID09PSBwYXJlbnRFbnRpdHk/LmdldElyaSgpKSB7XG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cImhpZ2hsaWdodFwiPntwYXJlbnRFbnRpdHkuZ2V0TGFiZWwoKX08L3NwYW4+O1xuICB9XG5cbiAgaWYgKCFsaW5rZWRFbnRpdHkpIHtcbiAgICBpZiAoaXJpLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8YSBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBocmVmPXtpcml9PlxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgPC9hPlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU28gZmFyIG9ubHkga25vd24gb2NjdXJyZW5jZSBvZiB0aGlzIGJyYW5jaCBpcyBmb3Igb3dsI1RoaW5nXG4gICAgICByZXR1cm4gPHNwYW4+e2xhYmVsfTwvc3Bhbj47XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3RoZXJEZWZpbmVkQnkgPSBsaW5rZWRFbnRpdHlbXCJkZWZpbmVkQnlcIl1cbiAgICA/IGxpbmtlZEVudGl0eVtcImRlZmluZWRCeVwiXS5maWx0ZXIoKGVsZW06IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gZWxlbSAhPT0gbG9jYWxPbnRvbG9neTtcbiAgICAgIH0pXG4gICAgOiBbXTtcbiAgY29uc3QgbGlua2VkRW50aXR5VHlwZSA9IGxpbmtlZEVudGl0eVtcInR5cGVcIl1cbiAgICA/IGluZmVyVHlwZUZyb21UeXBlQXJyYXkobGlua2VkRW50aXR5W1widHlwZVwiXSlcbiAgICA6IHBhcmVudEVudGl0eS5nZXRUeXBlKCk7XG5cbiAgLy8gc2VlIGh0dHBzOi8vZ2l0bGFiLnpibWVkLmRlL2ttL3NlbWxvb2twL29sczQvLS9ibG9iL2Rldi9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9FbnRpdHlMaW5rLnRzeCBmb3Igb3JpZ2luYWwgcmVmZXJlbmNlXG4gIGlmIChvdGhlckRlZmluZWRCeS5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAobGlua2VkRW50aXR5W1wiaGFzTG9jYWxEZWZpbml0aW9uXCJdKSB7XG4gICAgICAvLyBzaG93IDxsYWJlbD4gPG9udG9sb2d5SWQ+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhpcyBvbnRvbG9neSBhbmQgPG9udG9sb2d5SWQ+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoZSBkZWZpbmluZyBvbnRvbG9neVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJjbGlja2FibGVcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eShcbiAgICAgICAgICAgICAgICAgIGxvY2FsT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICBsaW5rZWRFbnRpdHlUeXBlLFxuICAgICAgICAgICAgICAgICAgeyBpcmksIGxhYmVsIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAge3Nob3dCYWRnZXMgPyAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSlcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3koXG4gICAgICAgICAgICAgICAgICAgICAgb3RoZXJEZWZpbmVkQnlbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgbGlua2VkRW50aXR5VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICB7IGlyaSwgbGFiZWwgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgICB7b3RoZXJEZWZpbmVkQnlbMF0udG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IDxsYWJlbD4gPG9udG9sb2d5SWQ+IGxpbmtpbmcgdG8gdGhlIHRlcm0gaW4gdGhlIGRlZmluaW5nIG9udG9sb2d5XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkpXG4gICAgICAgICAgICAgICAgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KFxuICAgICAgICAgICAgICAgICAgb3RoZXJEZWZpbmVkQnlbMF0sXG4gICAgICAgICAgICAgICAgICBsaW5rZWRFbnRpdHlUeXBlLFxuICAgICAgICAgICAgICAgICAgeyBpcmksIGxhYmVsIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAge3Nob3dCYWRnZXMgPyAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSlcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3koXG4gICAgICAgICAgICAgICAgICAgICAgb3RoZXJEZWZpbmVkQnlbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgbGlua2VkRW50aXR5VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICB7IGlyaSwgbGFiZWwgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgICB7b3RoZXJEZWZpbmVkQnlbMF0udG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvdGhlckRlZmluZWRCeS5sZW5ndGggPiAxKSB7XG4gICAgaWYgKGxpbmtlZEVudGl0eVtcImhhc0xvY2FsRGVmaW5pdGlvblwiXSkge1xuICAgICAgLy8gc2hvdyA8bGFiZWw+IDxvbnRvbG9neUlkMT4gPG9udG9sb2d5SWQyPiAuLi4gPG9udG9sb2d5SWROPiB3aGVyZSA8bGFiZWw+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoaXMgb250b2xvZ3kgYW5kIDxvbnRvbG9neUlkST4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhhdCBkZWZpbmluZyBvbnRvbG9neVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJjbGlja2FibGVcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eShcbiAgICAgICAgICAgICAgICAgIGxvY2FsT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICBsaW5rZWRFbnRpdHlUeXBlLFxuICAgICAgICAgICAgICAgICAgeyBpcmksIGxhYmVsIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAge3Nob3dCYWRnZXMgPyAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAge290aGVyRGVmaW5lZEJ5Lm1hcCgoZWxlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibm8tZGVjb3JhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kpXG4gICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VkRW50aXR5VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpcmksIGxhYmVsIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2VsZW0udG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IDxsYWJlbD48SUNPTj4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybXMnIGlyaSBhbmQgPElDT04+IGxpbmtzIHRvIGRpc2FtYmlndWF0aW9uIHBhZ2VcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPGEgY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgaHJlZj17aXJpfT5cbiAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAge3Nob3dCYWRnZXMgPyAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIlxuICAgICAgICAgICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSlcbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlKGxpbmtlZEVudGl0eVR5cGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICBpcmksXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgPEV1aUljb24gdHlwZT17XCJzZWFyY2hcIn0gc2l6ZT17XCJzXCJ9IC8+XG4gICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgIHtvdGhlckRlZmluZWRCeS5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgIHtcIm9udG9sb2dpZXNcIn1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAobGlua2VkRW50aXR5W1wiaGFzTG9jYWxEZWZpbml0aW9uXCJdKSB7XG4gICAgICAvLyBzaG93IDxsYWJlbD4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybSBpbiB0aGlzIG9udG9sb2d5XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkpXG4gICAgICAgICAgICAgICAgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KFxuICAgICAgICAgICAgICAgICAgbG9jYWxPbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgIGxpbmtlZEVudGl0eVR5cGUsXG4gICAgICAgICAgICAgICAgICB7IGlyaSwgbGFiZWwgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocGFyc2VJbnQobGlua2VkRW50aXR5W1wibnVtQXBwZWFyc0luXCJdKSA+IDApIHtcbiAgICAgICAgLy8gc2hvdyA8bGFiZWw+PElDT04+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm1zJyBpcmkgYW5kIDxJQ09OPiBsaW5rcyB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e2lyaX0+XG4gICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIHtzaG93QmFkZ2VzID8gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIlxuICAgICAgICAgICAgICAgICAga2V5PXtyYW5kb21TdHJpbmcoKX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUobGlua2VkRW50aXR5VHlwZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxFdWlJY29uIHR5cGU9e1wic2VhcmNoXCJ9IHNpemU9e1wic1wifSAvPlxuICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAge2xpbmtlZEVudGl0eVtcIm51bUFwcGVhcnNJblwiXX1cbiAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgIHtwYXJzZUludChsaW5rZWRFbnRpdHlbXCJudW1BcHBlYXJzSW5cIl0pID4gMVxuICAgICAgICAgICAgICAgICAgICAgID8gXCJvbnRvbG9naWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwib250b2xvZ3lcIn1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNob3cgcmF3IGlyaVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8YSBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBocmVmPXtsaW5rZWRFbnRpdHlbXCJ1cmxcIl0gfHwgaXJpfT5cbiAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE9OTFkgVVNBQkxFIFdJVEggVjItQVBJIEVOVElUSUVTXG4gKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIG9uZSBlbGVtZW50IG9mIGEgc2VjdGlvbnMnIGxpc3QsIHBvc3NpYmx5IGluIGEgcmVjdXJzaXZlIGZhc2hpb24gYnkgcGFyc2luZyB0aGUgcmVzcG9uc2Ugb2JqZWN0IGF0IHRoZSBjdXJyZW50UmVzcG9uc2VQYXRoIHRvIHNob3cgTWFuY2hlc3RlciBzeW50YXguXG4gKiBAcGFyYW0gcGFyZW50RW50aXR5IHRoZSBlbnRpdHkgb2JqZWN0IHBvc3Nlc3NpbmcgdGhlIHdob2xlIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzIHRoZSBsaW5rZWRFbnRpdGllcyBvYmplY3QgKGV4aXN0cyBhcyBwYXJhbSBiZWNhdXNlIGl0IGlzIG5lY2Vzc2FyeSB0aGF0IHRoZSBlbnRpdHkgaGFzIGEgbGlua2VkRW50aXRpZXMgYmxvY2sgaW4gcHJvcGVydGllcylcbiAqIEBwYXJhbSBjdXJyZW50UmVzcG9uc2VQYXRoIHRoZSBjdXJyZW50IHN1Yi1vYmplY3Qgb2YgdGhlIHBhcmVudEVudGl0aWVzIHJlc3BvbnNlIG9iamVjdCBwYXJzZWQgYXMgY2xhc3MgZXhwcmVzc2lvblxuICogQHBhcmFtIHNob3dCYWRnZXMgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKiBAcmV0dXJucyBSZWFjdEVsZW1lbnQgdGhlIGNsYXNzIGV4cHJlc3Npb24gSlNYXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gIHBhcmVudEVudGl0eTogVGhpbmcsXG4gIGxpbmtlZEVudGl0aWVzOiBMaW5rZWRFbnRpdGllcyxcbiAgY3VycmVudFJlc3BvbnNlUGF0aDogYW55LFxuICBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUyxcbiAgLypUT0RPOiBjaGFuZ2UgdG8gdXNpbmcgKGVudGl0eSA6IEVudGl0eURhdGEpIGxhdGVyKi8gb25OYXZpZ2F0ZXM6IE9uTmF2aWdhdGVzXG4pOiBSZWFjdEVsZW1lbnQge1xuICBsZXQgcmVzdWx0ID0gPD48Lz47XG5cbiAgLy8gbWVyZ2UgbGlua2VkRW50aXRpZXMgb2YgY3VycmVudFJlc3BvbnNlUGF0aCBpZiBjdXJyZW50UmVzcG9uc2VQYXRoLmxpbmtlZEVudGl0aWVzIGlzIG5vdCB1bmRlZmluZWRcbiAgbGlua2VkRW50aXRpZXMgPSBsaW5rZWRFbnRpdGllcy5tZXJnZVdpdGgoY3VycmVudFJlc3BvbnNlUGF0aC5saW5rZWRFbnRpdGllcyk7XG5cbiAgaWYgKHR5cGVvZiBjdXJyZW50UmVzcG9uc2VQYXRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmVzdWx0ID0gZ2V0RW50aXR5TGlua0pTWChcbiAgICAgIHBhcmVudEVudGl0eSxcbiAgICAgIGxpbmtlZEVudGl0aWVzLFxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aCxcbiAgICAgIHNob3dCYWRnZXMsXG4gICAgICBvbk5hdmlnYXRlc1xuICAgICk7XG4gIH0gZWxzZSBpZiAoXG4gICAgdHlwZW9mIGN1cnJlbnRSZXNwb25zZVBhdGggPT09IFwib2JqZWN0XCIgJiZcbiAgICAhQXJyYXkuaXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoKSAmJlxuICAgIEFycmF5LmlzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aFtcInR5cGVcIl0pICYmXG4gICAgY3VycmVudFJlc3BvbnNlUGF0aFtcInR5cGVcIl0uaW5kZXhPZihcInJlaWZpY2F0aW9uXCIpICE9PSAtMVxuICApIHtcbiAgICAvLyBUT0RPOiBDb25jYXQgd2l0aCBlbHNlIHBhcnQ/IFNlZSByZWxhdGVkRnJvbSAoTWFuY2hlc3RlciBzeW50YXggZG9lcyBub3QgZ2V0IGRpc3BsYXllZCwgYnV0IG5laXRoZXIgaW4gb2xzNClcbiAgICAvLyBjdXJyZW50IHJlc3BvbnNlIHBhdGggaXMgcmVpZmljYXRpb25cbiAgICByZXN1bHQgPSBnZXRSZWlmaWVkSlNYKFxuICAgICAgcGFyZW50RW50aXR5LFxuICAgICAgUmVpZmllZC5mcm9tSnNvbjxhbnk+KGN1cnJlbnRSZXNwb25zZVBhdGgpWzBdLFxuICAgICAgc2hvd0JhZGdlcyxcbiAgICAgIG9uTmF2aWdhdGVzXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB0eXBlID09PSBcIm9iamVjdFwiXG4gICAgY29uc3Qgc29tZVZhbHVlc0Zyb20gPVxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3NvbWVWYWx1ZXNGcm9tXCJdO1xuICAgIGNvbnN0IGFsbFZhbHVlc0Zyb20gPVxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2FsbFZhbHVlc0Zyb21cIl07XG4gICAgY29uc3QgaW50ZXJzZWN0aW9uT2YgPSBhc0FycmF5KFxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludGVyc2VjdGlvbk9mXCJdXG4gICAgKTtcbiAgICBjb25zdCB1bmlvbk9mID0gYXNBcnJheShcbiAgICAgIGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN1bmlvbk9mXCJdXG4gICAgKTtcbiAgICBjb25zdCBoYXNWYWx1ZSA9XG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzVmFsdWVcIl07XG4gICAgY29uc3QgbWluQ2FyZGluYWxpdHkgPVxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21pbkNhcmRpbmFsaXR5XCJdIHx8XG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1xuICAgICAgICBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21pblF1YWxpZmllZENhcmRpbmFsaXR5XCJcbiAgICAgIF07XG4gICAgY29uc3QgbWF4Q2FyZGluYWxpdHkgPVxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21heENhcmRpbmFsaXR5XCJdIHx8XG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1xuICAgICAgICBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21heFF1YWxpZmllZENhcmRpbmFsaXR5XCJcbiAgICAgIF07XG4gICAgY29uc3QgY2FyZGluYWxpdHkgPVxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2NhcmRpbmFsaXR5XCJdIHx8XG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcXVhbGlmaWVkQ2FyZGluYWxpdHlcIl07XG4gICAgY29uc3QgaGFzU2VsZiA9XG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzU2VsZlwiXTtcbiAgICBjb25zdCBjb21wbGVtZW50T2YgPVxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2NvbXBsZW1lbnRPZlwiXTtcbiAgICBjb25zdCBvbmVPZiA9IGFzQXJyYXkoXG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjb25lT2ZcIl1cbiAgICApO1xuICAgIGNvbnN0IGludmVyc2VPZiA9XG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW52ZXJzZU9mXCJdO1xuICAgIGNvbnN0IG9uUHJvcGVydHkgPVxuICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI29uUHJvcGVydHlcIl07XG4gICAgY29uc3Qgb25EYXRhVHlwZSA9XG4gICAgICBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjb25EYXRhdHlwZVwiXTtcblxuICAgIGlmIChvbkRhdGFUeXBlKSB7XG4gICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgIGdldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgb25EYXRhVHlwZSxcbiAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICksXG4gICAgICBdO1xuXG4gICAgICBjb25zdCB3aXRoUmVzdHJpY3Rpb25zID0gYXNBcnJheShcbiAgICAgICAgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3dpdGhSZXN0cmljdGlvbnNcIl1cbiAgICAgICk7XG4gICAgICBpZiAod2l0aFJlc3RyaWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVsZW1lbnRzLnB1c2goPD5bPC8+KTtcblxuICAgICAgICBsZXQgaXNGaXJzdCA9IHRydWU7XG4gICAgICAgIGZvciAoY29uc3QgcmVzdHJpY3Rpb24gb2Ygd2l0aFJlc3RyaWN0aW9ucykge1xuICAgICAgICAgIGlmIChpc0ZpcnN0KSBpc0ZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgZWxzZSBlbGVtZW50cy5wdXNoKDw+LCZuYnNwOzwvPik7XG5cbiAgICAgICAgICBjb25zdCBtaW5FeGNsdXNpdmUgPVxuICAgICAgICAgICAgcmVzdHJpY3Rpb25bXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtaW5FeGNsdXNpdmVcIl07XG4gICAgICAgICAgY29uc3QgbWluSW5jbHVzaXZlID1cbiAgICAgICAgICAgIHJlc3RyaWN0aW9uW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjbWluSW5jbHVzaXZlXCJdO1xuICAgICAgICAgIGNvbnN0IG1heEV4Y2x1c2l2ZSA9XG4gICAgICAgICAgICByZXN0cmljdGlvbltcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI21heEV4Y2x1c2l2ZVwiXTtcbiAgICAgICAgICBjb25zdCBtYXhJbmNsdXNpdmUgPVxuICAgICAgICAgICAgcmVzdHJpY3Rpb25bXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtYXhJbmNsdXNpdmVcIl07XG5cbiAgICAgICAgICBpZiAobWluRXhjbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+Jmd0OyB7bWluRXhjbHVzaXZlfTwvPik7XG4gICAgICAgICAgZWxzZSBpZiAobWluSW5jbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+JmdlOyB7bWluSW5jbHVzaXZlfTwvPik7XG4gICAgICAgICAgZWxzZSBpZiAobWF4RXhjbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+Jmx0OyB7bWF4RXhjbHVzaXZlfTwvPik7XG4gICAgICAgICAgZWxzZSBpZiAobWF4SW5jbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+JmxlOyB7bWF4SW5jbHVzaXZlfTwvPik7XG4gICAgICAgIH1cblxuICAgICAgICBlbGVtZW50cy5wdXNoKDw+XTwvPik7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7ZWxlbWVudHMubWFwKChlbGVtKSA9PiAoXG4gICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57ZWxlbX08L3NwYW4+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvPlxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHNvbWVWYWx1ZXNGcm9tKSB7XG4gICAgICByZXN1bHQgPSAoXG4gICAgICAgIDw+XG4gICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgIHBhcmVudEVudGl0eSxcbiAgICAgICAgICAgIGxpbmtlZEVudGl0aWVzLFxuICAgICAgICAgICAgb25Qcm9wZXJ0eSxcbiAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICBvbk5hdmlnYXRlc1xuICAgICAgICAgICl9XG4gICAgICAgICAgPGkgc3R5bGU9e3sgY29sb3I6IFwicHVycGxlXCIgfX0+IHNvbWUgPC9pPlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIGFzQXJyYXkoc29tZVZhbHVlc0Zyb20pWzBdLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoYWxsVmFsdWVzRnJvbSkge1xuICAgICAgcmVzdWx0ID0gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIG9uUHJvcGVydHksXG4gICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICApfVxuICAgICAgICAgIDxpIHN0eWxlPXt7IGNvbG9yOiBcInB1cnBsZVwiIH19PiBvbmx5IDwvaT5cbiAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgcGFyZW50RW50aXR5LFxuICAgICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgICBhc0FycmF5KGFsbFZhbHVlc0Zyb20pWzBdLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaW50ZXJzZWN0aW9uT2YubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZWxlbWVudHM6IFJlYWN0RWxlbWVudFtdID0gW1xuICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICYjNDA7XG4gICAgICAgIDwvc3Bhbj4sXG4gICAgICBdO1xuICAgICAgZm9yIChjb25zdCBlbGVtIG9mIGludGVyc2VjdGlvbk9mKSB7XG4gICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgZWxlbWVudHMucHVzaCg8aT4gYW5kIDwvaT4pO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgcGFyZW50RW50aXR5LFxuICAgICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgICBlbGVtLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZWxlbWVudHMucHVzaCg8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPiYjNDE7PC9zcGFuPik7XG4gICAgICByZXN1bHQgPSAoXG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIHtlbGVtZW50cy5tYXAoKGVsZW0pID0+IChcbiAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PntlbGVtfTwvc3Bhbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHVuaW9uT2YubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZWxlbWVudHM6IFJlYWN0RWxlbWVudFtdID0gW1xuICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICYjNDA7XG4gICAgICAgIDwvc3Bhbj4sXG4gICAgICBdO1xuICAgICAgZm9yIChjb25zdCBlbGVtIG9mIHVuaW9uT2YpIHtcbiAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBlbGVtZW50cy5wdXNoKDxpPiBvciA8L2k+KTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgIGdldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgIHBhcmVudEVudGl0eSxcbiAgICAgICAgICAgIGxpbmtlZEVudGl0aWVzLFxuICAgICAgICAgICAgZWxlbSxcbiAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICBvbk5hdmlnYXRlc1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnRzLnB1c2goPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj4mIzQxOzwvc3Bhbj4pO1xuICAgICAgcmVzdWx0ID0gKFxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICB7ZWxlbWVudHMubWFwKChlbGVtKSA9PiAoXG4gICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57ZWxlbX08L3NwYW4+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChoYXNWYWx1ZSkge1xuICAgICAgcmVzdWx0ID0gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIG9uUHJvcGVydHksXG4gICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICApfVxuICAgICAgICAgIDxpIHN0eWxlPXt7IGNvbG9yOiBcInB1cnBsZVwiIH19PiB2YWx1ZSA8L2k+XG4gICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgIHBhcmVudEVudGl0eSxcbiAgICAgICAgICAgIGxpbmtlZEVudGl0aWVzLFxuICAgICAgICAgICAgYXNBcnJheShoYXNWYWx1ZSlbMF0sXG4gICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtaW5DYXJkaW5hbGl0eSkge1xuICAgICAgcmVzdWx0ID0gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIG9uUHJvcGVydHksXG4gICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICApfVxuICAgICAgICAgIDxpIHN0eWxlPXt7IGNvbG9yOiBcInB1cnBsZVwiIH19PiBtaW4gPC9pPlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIGFzQXJyYXkobWluQ2FyZGluYWxpdHkpWzBdLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAobWF4Q2FyZGluYWxpdHkpIHtcbiAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgcGFyZW50RW50aXR5LFxuICAgICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgICBvblByb3BlcnR5LFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKX1cbiAgICAgICAgICA8aSBzdHlsZT17eyBjb2xvcjogXCJwdXJwbGVcIiB9fT4gbWF4IDwvaT5cbiAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgcGFyZW50RW50aXR5LFxuICAgICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgICBhc0FycmF5KG1heENhcmRpbmFsaXR5KVswXSxcbiAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICBvbk5hdmlnYXRlc1xuICAgICAgICAgICl9XG4gICAgICAgIDwvPlxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGNhcmRpbmFsaXR5KSB7XG4gICAgICByZXN1bHQgPSAoXG4gICAgICAgIDw+XG4gICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgIHBhcmVudEVudGl0eSxcbiAgICAgICAgICAgIGxpbmtlZEVudGl0aWVzLFxuICAgICAgICAgICAgb25Qcm9wZXJ0eSxcbiAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICBvbk5hdmlnYXRlc1xuICAgICAgICAgICl9XG4gICAgICAgICAgPGkgc3R5bGU9e3sgY29sb3I6IFwicHVycGxlXCIgfX0+IGV4YWN0bHkgPC9pPlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIGFzQXJyYXkoY2FyZGluYWxpdHkpWzBdLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaGFzU2VsZikge1xuICAgICAgcmVzdWx0ID0gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIG9uUHJvcGVydHksXG4gICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICApfVxuICAgICAgICAgIDxpIHN0eWxlPXt7IGNvbG9yOiBcInB1cnBsZVwiIH19PiBTZWxmIDwvaT5cbiAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgcGFyZW50RW50aXR5LFxuICAgICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgICBhc0FycmF5KGhhc1NlbGYpWzBdLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoY29tcGxlbWVudE9mKSB7XG4gICAgICByZXN1bHQgPSAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPGk+bm90IDwvaT5cbiAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKFxuICAgICAgICAgICAgcGFyZW50RW50aXR5LFxuICAgICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgICBhc0FycmF5KGNvbXBsZW1lbnRPZilbMF0sXG4gICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChvbmVPZi5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgJiMxMjM7XG4gICAgICAgIDwvc3Bhbj4sXG4gICAgICBdO1xuICAgICAgZm9yIChjb25zdCBlbGVtIG9mIG9uZU9mKSB7XG4gICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICYjNDQ7Jm5ic3A7XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgIGdldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgIHBhcmVudEVudGl0eSxcbiAgICAgICAgICAgIGxpbmtlZEVudGl0aWVzLFxuICAgICAgICAgICAgZWxlbSxcbiAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICBvbk5hdmlnYXRlc1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnRzLnB1c2goPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj4mIzEyNTs8L3NwYW4+KTtcbiAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAge2VsZW1lbnRzLm1hcCgoZWxlbSkgPT4gKFxuICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e2VsZW19PC9zcGFuPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaW52ZXJzZU9mKSB7XG4gICAgICByZXN1bHQgPSAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPGkgc3R5bGU9e3sgY29sb3I6IFwicHVycGxlXCIgfX0+aW52ZXJzZSA8L2k+XG4gICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICYjNDA7XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIGludmVyc2VPZixcbiAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICBvbk5hdmlnYXRlc1xuICAgICAgICAgICl9XG4gICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICYjNDE7XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgYW4gYXJyYXkgb2Ygc2VjdGlvbiBsaXN0IGVsZW1lbnRzIHNwZWNpZmllZCBhdCBgY3VycmVudFJlc3BvbnNlUGF0aGBcbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHlcbiAqIEBwYXJhbSBsaW5rZWRFbnRpdGllc1xuICogQHBhcmFtIGFycmF5XG4gKiBAcGFyYW0gc2hvd0JhZGdlc1xuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWN0aW9uTGlzdEpTWChcbiAgcGFyZW50RW50aXR5OiBUaGluZyxcbiAgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzLFxuICBhcnJheTogYW55W10sXG4gIHNob3dCYWRnZXM6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTLFxuICAvKlRPRE86IGNoYW5nZSB0byB1c2luZyAoZW50aXR5IDogRW50aXR5RGF0YSkgbGF0ZXIqLyBvbk5hdmlnYXRlczogT25OYXZpZ2F0ZXNcbik6IFJlYWN0RWxlbWVudCB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHthcnJheS5sZW5ndGggPT09IDEgPyAoXG4gICAgICAgIDxwPlxuICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSxcbiAgICAgICAgICAgIGFycmF5WzBdLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9wPlxuICAgICAgKSA6IChcbiAgICAgICAgPHVsPlxuICAgICAgICAgIHthcnJheS5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICAgICAgICBwYXJlbnRFbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSxcbiAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC91bD5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59XG5cbi8qKlxuICogSW5zZXJ0cyBsaW5rcyBpbnRvIHRleHQgKHBvdGVudGlhbGx5IHdpdGggbGFiZWwgaW5zdGVhZCBvZiBsaW5rIGRpc3BsYXllZCBpZiBsaW5rIGV4aXN0cyBhcyBrZXkgaW5zaWRlIGxpbmtlZEVudGl0aWVzKSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIEpTWCBlbGVtZW50XG4gKiBAcGFyYW0gcGFyZW50RW50aXR5IHRoZSBlbnRpdHkgb2JqZWN0IHBvc3Nlc3NpbmcgdGhlIHdob2xlIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHRleHQgdGhlIHRleHQgdG8gaW5zZXJ0IGxpbmtzIGludG9cbiAqIEBwYXJhbSBsaW5rZWRFbnRpdGllcyB0aGUgbGlua2VkRW50aXRpZXMgb2JqZWN0IChpZiB1bmRlZmluZWQsIG5vIGxhYmVscyBhcmUgaW5mZXJyZWQpXG4gKiBAcGFyYW0gc2hvd0JhZGdlcyBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiBiYWRnZXMgc2hvdWxkIGJlIHNob3duXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMgZnVuY3Rpb25zIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBjbGlja2FibGUgaXRlbXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIGVudGl0aWVzIG5hbWVcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gb250b2xvZ3kgYmFkZ2VcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGEgZGlzYW1iaWd1YXRpb24gYmFkZ2VcbiAqL1xuZnVuY3Rpb24gYWRkTGlua3NUb1RleHQoXG4gIHBhcmVudEVudGl0eTogVGhpbmcsXG4gIHRleHQ6IHN0cmluZyxcbiAgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzIHwgdW5kZWZpbmVkLFxuICBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUyxcbiAgLypUT0RPOiBjaGFuZ2UgdG8gdXNpbmcgKGVudGl0eSA6IEVudGl0eURhdGEpIGxhdGVyKi8gb25OYXZpZ2F0ZXM6IE9uTmF2aWdhdGVzXG4pIHtcbiAgY29uc3QgbGlua3NUb1NwbGljZTogQXJyYXk8e1xuICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgZW5kOiBudW1iZXI7XG4gICAgbGluazogUmVhY3RFbGVtZW50O1xuICB9PiA9IFtdO1xuXG4gIGlmIChsaW5rZWRFbnRpdGllcykge1xuICAgIGZvciAoY29uc3QgZW50aXR5SWQgb2YgT2JqZWN0LmtleXMobGlua2VkRW50aXRpZXMubGlua2VkRW50aXRpZXMpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgbiA9IHRleHQuaW5kZXhPZihlbnRpdHlJZCwgMCk7XG4gICAgICAgIG4gIT09IC0xO1xuICAgICAgICBuID0gdGV4dC5pbmRleE9mKGVudGl0eUlkLCBuKVxuICAgICAgKSB7XG4gICAgICAgIGxpbmtzVG9TcGxpY2UucHVzaCh7XG4gICAgICAgICAgc3RhcnQ6IG4sXG4gICAgICAgICAgZW5kOiBuICsgZW50aXR5SWQubGVuZ3RoLFxuICAgICAgICAgIGxpbms6IGdldEVudGl0eUxpbmtKU1goXG4gICAgICAgICAgICBwYXJlbnRFbnRpdHksXG4gICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgIGVudGl0eUlkLFxuICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbiArPSBlbnRpdHlJZC5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdXJsUmUgPSAvW0Etel0rOlxcL1xcL1teXFxzXSsvZztcbiAgZm9yIChsZXQgbWF0Y2ggPSB1cmxSZS5leGVjKHRleHQpOyBtYXRjaDsgbWF0Y2ggPSB1cmxSZS5leGVjKHRleHQpKSB7XG4gICAgY29uc3QgdXJsID0gbWF0Y2hbMF07XG4gICAgLy8gY29uc29sZS5sb2coXCJmb3VuZCBtYXRjaCBcIiArIHVybCk7XG5cbiAgICBsaW5rc1RvU3BsaWNlLnB1c2goe1xuICAgICAgc3RhcnQ6IG1hdGNoLmluZGV4LFxuICAgICAgZW5kOiBtYXRjaC5pbmRleCArIHVybC5sZW5ndGgsXG4gICAgICBsaW5rOiAoXG4gICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e3VybH0+XG4gICAgICAgICAgICB7dXJsfVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKSxcbiAgICB9KTtcbiAgfVxuXG4gIGxpbmtzVG9TcGxpY2Uuc29ydCgoYSwgYikgPT4gYS5zdGFydCAtIGIuc3RhcnQpO1xuXG4gIHJlbW92ZU92ZXJsYXBwaW5nOiBmb3IgKGxldCBuID0gMDsgbiA8IGxpbmtzVG9TcGxpY2UubGVuZ3RoOyApIHtcbiAgICBmb3IgKGxldCBuMiA9IG4gKyAxOyBuMiA8IGxpbmtzVG9TcGxpY2UubGVuZ3RoOyArK24yKSB7XG4gICAgICBjb25zdCBzcGxpY2VBID0gbGlua3NUb1NwbGljZVtuXTtcbiAgICAgIGNvbnN0IHNwbGljZUIgPSBsaW5rc1RvU3BsaWNlW24yXTtcblxuICAgICAgaWYgKHNwbGljZUEgPT09IHNwbGljZUIpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBUaGUgc3BsaWNlcyBvdmVybGFwIGlmIG5laXRoZXIgZW5kcyBiZWZvcmUgdGhlIG90aGVyIHN0YXJ0c1xuICAgICAgaWYgKHNwbGljZUEuZW5kID49IHNwbGljZUIuc3RhcnQgJiYgc3BsaWNlQi5lbmQgPj0gc3BsaWNlQS5zdGFydCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlJlbW92aW5nIG92ZXJsYXBwaW5nXCIpO1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgc2hvcnRlciBsaW5rIG9mIGJvdGhcbiAgICAgICAgaWYgKHNwbGljZUEuZW5kIC0gc3BsaWNlQS5zdGFydCA8IHNwbGljZUIuZW5kIC0gc3BsaWNlQi5zdGFydCkge1xuICAgICAgICAgIGxpbmtzVG9TcGxpY2Uuc3BsaWNlKG4sIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmtzVG9TcGxpY2Uuc3BsaWNlKG4yLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZSByZW1vdmVPdmVybGFwcGluZztcbiAgICAgIH1cbiAgICB9XG4gICAgKytuO1xuICB9XG5cbiAgaWYgKGxpbmtzVG9TcGxpY2UubGVuZ3RoID09PSAwKSByZXR1cm4gPD57dGV4dH08Lz47XG5cbiAgY29uc3QgcmVzOiBSZWFjdEVsZW1lbnRbXSA9IFtdO1xuICBsZXQgbiA9IDA7XG5cbiAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzVG9TcGxpY2UpIHtcbiAgICByZXMucHVzaCg8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57dGV4dC5zdWJzdHJpbmcobiwgbGluay5zdGFydCl9PC9zcGFuPik7XG4gICAgcmVzLnB1c2gobGluay5saW5rKTtcbiAgICBuID0gbGluay5lbmQ7XG4gIH1cbiAgcmVzLnB1c2goPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e3RleHQuc2xpY2Uobil9PC9zcGFuPik7XG5cbiAgcmV0dXJuIDw+e3Jlc308Lz47XG59XG5cbi8qKlxuICogUmVuZGVycyBhIGdpdmVuIFJlaWZpZWRcbiAqIEBwYXJhbSBlbnRpdHkgdGhlIGVudGl0eSB0aGUgUmVpZmllZCBleGlzdHMgaW5cbiAqIEBwYXJhbSByZWlmaWVkIHRoZSBSZWlmaWVkXG4gKiBAcGFyYW0gc2hvd0JhZGdlcyBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiBiYWRnZXMgc2hvdWxkIGJlIHNob3duXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMgZnVuY3Rpb25zIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBjbGlja2FibGUgaXRlbXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIGVudGl0aWVzIG5hbWVcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gb250b2xvZ3kgYmFkZ2VcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGEgZGlzYW1iaWd1YXRpb24gYmFkZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlaWZpZWRKU1goXG4gIGVudGl0eTogVGhpbmcsXG4gIHJlaWZpZWQ6IFJlaWZpZWQ8YW55PixcbiAgc2hvd0JhZGdlczogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMsXG4gIC8qVE9ETzogY2hhbmdlIHRvIHVzaW5nIChlbnRpdHkgOiBFbnRpdHlEYXRhKSBsYXRlciovIG9uTmF2aWdhdGVzOiBPbk5hdmlnYXRlc1xuKTogUmVhY3RFbGVtZW50IHtcbiAgZnVuY3Rpb24gZ2V0VmFsdWVKU1godmFsdWU6IFJlaWZpZWQ8YW55Pik6IFJlYWN0RWxlbWVudCB7XG4gICAgY29uc3QgbGlua2VkRW50aXRpZXMgPSBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKTtcblxuICAgIC8vIGxpbmtlZEVudGl0aWVzIG5vdCBleGlzdGVudCBvbiBlbnRpdHkgKC0+IHByb2JhYmx5IGxlZ2FjeSBhcGkgdmVyc2lvbilcbiAgICBpZiAoT2JqZWN0LmtleXMobGlua2VkRW50aXRpZXMubGlua2VkRW50aXRpZXMpLmxlbmd0aCA9PSAwKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlLnZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIGFkZExpbmtzVG9UZXh0KFxuICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICB2YWx1ZS52YWx1ZS50b1N0cmluZygpLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBzaG91bGQgbm90IGhhcHBlbiwgcHJvdmUgdGhhdCB0aGlzIGlzIG5ldmVyIHRoZSBjYXNlXG4gICAgICAgIHJldHVybiA8PntKU09OLnN0cmluZ2lmeSh2YWx1ZS52YWx1ZSl9PC8+O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsaW5rZWRFbnRpdHkgPSBsaW5rZWRFbnRpdGllcy5nZXQodmFsdWUudmFsdWUpO1xuXG4gICAgICBpZiAobGlua2VkRW50aXR5KSB7XG4gICAgICAgIHJldHVybiBnZXRFbnRpdHlMaW5rSlNYKFxuICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgaWYgKGVudGl0eS5nZXRUeXBlKCkgPT0gXCJvbnRvbG9neVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gPD57SlNPTi5zdHJpbmdpZnkodmFsdWUudmFsdWUpfTwvPjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBsaW5rZWRFbnRpdGllcyxcbiAgICAgICAgICAgICAgdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYWRkTGlua3NUb1RleHQoXG4gICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICB2YWx1ZS52YWx1ZS50b1N0cmluZygpLFxuICAgICAgICAgICAgbGlua2VkRW50aXRpZXMsXG4gICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgb25OYXZpZ2F0ZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2dldFZhbHVlSlNYKHJlaWZpZWQpfVxuICAgICAgJm5ic3A7XG4gICAgICB7cmVpZmllZC5oYXNNZXRhZGF0YSgpICYmXG4gICAgICAgIGdldEF4aW9tc0luZm9ybWF0aW9uSlNYKGVudGl0eSwgcmVpZmllZC5nZXRNZXRhZGF0YSgpKX1cbiAgICA8Lz5cbiAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlCdXR0b24sIEV1aVByb3ZpZGVyIH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgSnNvbkFwaVdpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyIH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5cbmZ1bmN0aW9uIEpzb25BcGlXaWRnZXQocHJvcHM6IEpzb25BcGlXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaVF1ZXJ5LCBidXR0b25UZXh0LCBidXR0b25TaXplIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxFdWlCdXR0b24gaHJlZj17YXBpUXVlcnl9IHRhcmdldD1cIl9ibGFua1wiIHNpemU9e2J1dHRvblNpemUgfHwgXCJtXCJ9PlxuICAgICAge2J1dHRvblRleHR9XG4gICAgPC9FdWlCdXR0b24+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUpzb25BcGkoXG4gIHByb3BzOiBKc29uQXBpV2lkZ2V0UHJvcHMsXG4gIGNvbnRhaW5lcjogRWxlbWVudCxcbiAgY2FsbGJhY2s/OiAoKSA9PiB2b2lkXG4pIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRKc29uQXBpV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRKc29uQXBpV2lkZ2V0KHByb3BzOiBKc29uQXBpV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8SnNvbkFwaVdpZGdldFxuICAgICAgICAgIGFwaVF1ZXJ5PXtwcm9wcy5hcGlRdWVyeX1cbiAgICAgICAgICBidXR0b25UZXh0PXtwcm9wcy5idXR0b25UZXh0fVxuICAgICAgICAgIGJ1dHRvblNpemU9e3Byb3BzLmJ1dHRvblNpemV9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgSnNvbkFwaVdpZGdldCwgY3JlYXRlSnNvbkFwaSB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIEV1aUxvYWRpbmdTcGlubmVyLFxuICBFdWlQcm92aWRlcixcbiAgRXVpQmFkZ2UsXG4gIEV1aUljb24sXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWJXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGlzRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQnJlYWRjcnVtYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBCcmVhZGNydW1iV2lkZ2V0KHByb3BzOiBCcmVhZGNydW1iV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBvbnRvbG9neUlkLFxuICAgIGlyaSxcbiAgICBlbnRpdHlUeXBlLFxuICAgIGNvbG9yRmlyc3QsXG4gICAgY29sb3JTZWNvbmQsXG4gICAgcGFyYW1ldGVyLFxuICAgIHVzZUxlZ2FjeSxcbiAgICBvbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICBjbGFzc05hbWUsXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nLCBpc1N1Y2Nlc3MsIGlzRXJyb3IsIGVycm9yIH0gPSB1c2VRdWVyeShcbiAgICBbXCJicmVhZGNydW1iXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoXG4gICAgICAgIGlyaSxcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB1c2VMZWdhY3lcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmcgJiYgKFxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpXG4gICAgICAgICAgICAgICAgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3koXG4gICAgICAgICAgICAgICAgICBwcm9wcy5vbnRvbG9neUlkIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIiAvLyBJbXByb3ZlIGFjY2Vzc2liaWxpdHlcbiAgICAgICAgICAgIHRhYkluZGV4PXswfSAvLyBNYWtlIGl0IGZvY3VzYWJsZVxuICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikgZS5jdXJyZW50VGFyZ2V0LmNsaWNrKCk7XG4gICAgICAgICAgICB9fSAvLyBIYW5kbGUga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxFdWlCYWRnZVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgICAgICAgIHByb3BzLm9udG9sb2d5SWRcbiAgICAgICAgICAgICAgICAgID8gXCJicmVhZGNydW1iIGNsaWNrYWJsZS1icmVhZGNydW1iXCJcbiAgICAgICAgICAgICAgICAgIDogXCJicmVhZGNydW1iXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb2xvcj17Y29sb3JGaXJzdCB8fCAocHJvcHMub250b2xvZ3lJZCA/IFwicHJpbWFyeVwiIDogXCJ3YXJuaW5nXCIpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7cHJvcHMub250b2xvZ3lJZD8udG9VcHBlckNhc2UoKSB8fCAoXG4gICAgICAgICAgICAgICAgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9e1wic1wifSAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9FdWlCYWRnZT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgPEV1aUljb24gdHlwZT1cImFycm93UmlnaHRcIiAvPlxuICAgICAgICAgICZuYnNwO1xuICAgICAgICAgIDxFdWlCYWRnZSBjbGFzc05hbWU9XCJicmVhZGNydW1iXCIgY29sb3I9e2NvbG9yU2Vjb25kIHx8IFwid2FybmluZ1wifT5cbiAgICAgICAgICAgIHs8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT17XCJzXCJ9IC8+fVxuICAgICAgICAgIDwvRXVpQmFkZ2U+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICl9XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiYgaXNFbnRpdHkoZGF0YSkgJiYgKFxuICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgIG9udG9sb2d5TmFtZT17ZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgc2hvcnRGb3JtPXtkYXRhLmdldFNob3J0Rm9ybSgpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e29udG9sb2d5SWQgfHwgZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgY29sb3JGaXJzdD17Y29sb3JGaXJzdH1cbiAgICAgICAgICBjb2xvclNlY29uZD17Y29sb3JTZWNvbmR9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtpc0Vycm9yICYmIChcbiAgICAgICAgPEJyZWFkY3J1bWJQcmVzZW50YXRpb25cbiAgICAgICAgICBvbnRvbG9neU5hbWU9e1xuICAgICAgICAgICAgcHJvcHMub250b2xvZ3lJZD8udG9VcHBlckNhc2UoKSB8fFxuICAgICAgICAgICAgKGRhdGEgJiYgZGF0YS5nZXRPbnRvbG9neUlkKCkudG9VcHBlckNhc2UoKSkgfHxcbiAgICAgICAgICAgIGdldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJvbnRvbG9neVwiKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzaG9ydEZvcm09e1xuICAgICAgICAgICAgZGF0YSAmJiBkYXRhLmdldFNob3J0Rm9ybSgpID8gZGF0YS5nZXRTaG9ydEZvcm0oKS50b1VwcGVyQ2FzZSgpIDogXCJcIlxuICAgICAgICAgIH1cbiAgICAgICAgICBvbnRvbG9neUlkPXtvbnRvbG9neUlkIHx8IChkYXRhID8gZGF0YS5nZXRPbnRvbG9neUlkKCkgOiBcIlwiKX1cbiAgICAgICAgICBjb2xvckZpcnN0PXtcbiAgICAgICAgICAgIGNvbG9yRmlyc3QgfHxcbiAgICAgICAgICAgIChwcm9wcy5vbnRvbG9neUlkIHx8IChkYXRhICYmIGRhdGEuZ2V0T250b2xvZ3lJZCgpKVxuICAgICAgICAgICAgICA/IFwicHJpbWFyeVwiXG4gICAgICAgICAgICAgIDogXCJkYW5nZXJcIilcbiAgICAgICAgICB9XG4gICAgICAgICAgY29sb3JTZWNvbmQ9e1xuICAgICAgICAgICAgY29sb3JTZWNvbmQgfHwgKGRhdGEgJiYgZGF0YS5nZXRTaG9ydEZvcm0oKSA/IFwic3VjY2Vzc1wiIDogXCJkYW5nZXJcIilcbiAgICAgICAgICB9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnJlYWRjcnVtYihcbiAgcHJvcHM6IEJyZWFkY3J1bWJXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEJyZWFkY3J1bWJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEJyZWFkY3J1bWJXaWRnZXQocHJvcHM6IEJyZWFkY3J1bWJXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiIGdsb2JhbFN0eWxlcz17ZmFsc2V9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxCcmVhZGNydW1iV2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIGNvbG9yRmlyc3Q9e3Byb3BzLmNvbG9yRmlyc3R9XG4gICAgICAgICAgY29sb3JTZWNvbmQ9e3Byb3BzLmNvbG9yU2Vjb25kfVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBCcmVhZGNydW1iV2lkZ2V0LCBjcmVhdGVCcmVhZGNydW1iIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBEZXNjcmlwdGlvbldpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgRGVzY3JpcHRpb25QcmVzZW50YXRpb24gfSBmcm9tIFwiLi9EZXNjcmlwdGlvblByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgTk9fREVTQ1JJUFRJT04gPSBcIk5vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZS5cIjtcblxuZnVuY3Rpb24gRGVzY3JpcHRpb25XaWRnZXQocHJvcHM6IERlc2NyaXB0aW9uV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBvbnRvbG9neUlkLFxuICAgIGlyaSxcbiAgICBkZXNjVGV4dCxcbiAgICB0aGluZ1R5cGUsXG4gICAgcGFyYW1ldGVyLFxuICAgIHVzZUxlZ2FjeSxcbiAgICBjbGFzc05hbWUsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNFcnJvciwgZXJyb3IgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXCJkZXNjcmlwdGlvblwiLCBhcGksIHBhcmFtZXRlciwgdGhpbmdUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChcbiAgICAgICAgaXJpLFxuICAgICAgICB0aGluZ1R5cGUsXG4gICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgdXNlTGVnYWN5XG4gICAgICApO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxEZXNjcmlwdGlvblByZXNlbnRhdGlvblxuICAgICAgZGVzY3JpcHRpb249e2RhdGEgPyBkYXRhLmdldERlc2NyaXB0aW9uKCkgOiBOT19ERVNDUklQVElPTn1cbiAgICAgIGRlc2NUZXh0PXtkZXNjVGV4dH1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICBlcnJvcj17aXNFcnJvciA/IGVycm9yIDogbnVsbH1cbiAgICAgIHsuLi5yZXN0fVxuICAgIC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlc2NyaXB0aW9uKFxuICBwcm9wczogRGVzY3JpcHRpb25XaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZERlc2NyaXB0aW9uV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWREZXNjcmlwdGlvbldpZGdldChwcm9wczogRGVzY3JpcHRpb25XaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiIGdsb2JhbFN0eWxlcz17ZmFsc2V9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxEZXNjcmlwdGlvbldpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgZGVzY1RleHQ9e3Byb3BzLmRlc2NUZXh0fVxuICAgICAgICAgIHRoaW5nVHlwZT17cHJvcHMudGhpbmdUeXBlfVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIGNvbG9yPXtwcm9wcy5jb2xvcn1cbiAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBEZXNjcmlwdGlvbldpZGdldCwgY3JlYXRlRGVzY3JpcHRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IERlc2NyaXB0aW9uUHJlc2VudGF0aW9uUHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uL3N0eWxlL3RzNG5mZGlTdHlsZXMvdHM0bmZkaURlc2NyaXB0aW9uU3R5bGUuY3NzXCI7XG5cbmZ1bmN0aW9uIERlc2NyaXB0aW9uUHJlc2VudGF0aW9uKHByb3BzOiBEZXNjcmlwdGlvblByZXNlbnRhdGlvblByb3BzKSB7XG4gIGNvbnN0IHsgZGVzY1RleHQsIGRlc2NyaXB0aW9uLCBpc0xvYWRpbmcsIGVycm9yLCBjbGFzc05hbWUgfSA9IHByb3BzO1xuICBjb25zdCBmaW5hbENsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcInRzNG5mZGktZGVzY3JpcHRpb24tc3R5bGVcIjtcblxuICBjb25zdCByZW5kZXJDb250ZW50ID0gKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPjtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiZGVzY3JpcHRpb25cIil9PC9FdWlUZXh0PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gPEV1aVRleHQ+e2Rlc2NUZXh0IHx8IGRlc2NyaXB0aW9ufTwvRXVpVGV4dD47XG4gIH07XG4gIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PntyZW5kZXJDb250ZW50KCl9PC9kaXY+O1xufVxuXG5leHBvcnQgeyBEZXNjcmlwdGlvblByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpRmxleEl0ZW0sIEV1aUxpbmssIEV1aVByb3ZpZGVyLCBFdWlCdXR0b25JY29uIH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgSXJpV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge1xuICBpc0V1aUJ1dHRvbkNvbG9yLFxuICBpc0V1aUxpbmtDb2xvcixcbiAgaXNIZXhDb2xvcixcbiAgaXNSZ2JDb2xvcixcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uL3N0eWxlL3RzNG5mZGlTdHlsZXMvdHM0bmZkaUlyaVN0eWxlLmNzc1wiO1xuXG5mdW5jdGlvbiBJcmlXaWRnZXQocHJvcHM6IElyaVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpcmksXG4gICAgaXJpVGV4dCxcbiAgICBjb2xvcixcbiAgICBleHRlcm5hbEljb24sXG4gICAgdXJsUHJlZml4LFxuICAgIGNvcHlCdXR0b24sXG4gICAgY2xhc3NOYW1lLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHVybFByZWZpeEV4aXN0ID1cbiAgICB0eXBlb2YgdXJsUHJlZml4ICE9PSBcInVuZGVmaW5lZFwiICYmIHVybFByZWZpeCAhPT0gXCJcIiA/IHRydWUgOiBmYWxzZTtcbiAgY29uc3QgaXJpVXJsID0gdXJsUHJlZml4RXhpc3QgPyB1cmxQcmVmaXggKyBlbmNvZGVVUklDb21wb25lbnQoaXJpKSA6IGlyaTtcbiAgY29uc3QgZmluYWxDbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJ0czRuZmRpLWlyaS1zdHlsZVwiO1xuXG4gIGNvbnN0IENvcHlMaW5rQnV0dG9uID0gKCkgPT4ge1xuICAgIGlmICghY29waWVkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PlxuICAgICAgICAgIDxFdWlCdXR0b25JY29uXG4gICAgICAgICAgICBkaXNwbGF5PVwiYmFzZVwiXG4gICAgICAgICAgICBpY29uVHlwZT1cImNvcHlcIlxuICAgICAgICAgICAga2V5PXtcImNvcHktYnRuXCJ9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBcIjVweFwiLFxuICAgICAgICAgICAgICBtYXJnaW5SaWdodDogXCI1cHhcIixcbiAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgY29sb3IgJiYgKGlzSGV4Q29sb3IoY29sb3IpIHx8IGlzUmdiQ29sb3IoY29sb3IpKSA/IGNvbG9yIDogXCJcIixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlCdXR0b25Db2xvcihjb2xvcikgPyBjb2xvciA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaXJpVXJsKTtcbiAgICAgICAgICAgICAgc2V0Q29waWVkKHRydWUpO1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRDb3BpZWQoZmFsc2UpO1xuICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPjwvRXVpQnV0dG9uSWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfT5cbiAgICAgICAgPEV1aUJ1dHRvbkljb25cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgbWFyZ2luTGVmdDogXCI1cHhcIixcbiAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICBjb2xvciAmJiAoaXNIZXhDb2xvcihjb2xvcikgfHwgaXNSZ2JDb2xvcihjb2xvcikpID8gY29sb3IgOiBcIlwiLFxuICAgICAgICAgIH19XG4gICAgICAgICAgZGlzcGxheT1cImJhc2VcIlxuICAgICAgICAgIGljb25UeXBlPVwiY2hlY2tcIlxuICAgICAgICAgIGtleT17XCJjb3B5LWJ0blwifVxuICAgICAgICAgIGNvbG9yPXtjb2xvciAmJiBpc0V1aUxpbmtDb2xvcihjb2xvcikgPyBjb2xvciA6IHVuZGVmaW5lZH1cbiAgICAgICAgPjwvRXVpQnV0dG9uSWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfT5cbiAgICAgICAge2NvcHlCdXR0b24gPT09IFwibGVmdFwiICYmIDxDb3B5TGlua0J1dHRvbiAvPn1cbiAgICAgICAgPEV1aUxpbmtcbiAgICAgICAgICBocmVmPXtpcmlVcmx9XG4gICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgIGNvbG9yICYmIChpc0hleENvbG9yKGNvbG9yKSB8fCBpc1JnYkNvbG9yKGNvbG9yKSkgPyBjb2xvciA6IFwiXCIsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgICAgZXh0ZXJuYWw9e2V4dGVybmFsSWNvbn1cbiAgICAgICAgPlxuICAgICAgICAgIHtpcmlUZXh0ID8gaXJpVGV4dCA6IGlyaX1cbiAgICAgICAgPC9FdWlMaW5rPlxuICAgICAgICB7Y29weUJ1dHRvbiA9PT0gXCJyaWdodFwiICYmIDxDb3B5TGlua0J1dHRvbiAvPn1cbiAgICAgIDwvZGl2PlxuICAgIDwvRXVpRmxleEl0ZW0+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUlyaShcbiAgcHJvcHM6IElyaVdpZGdldFByb3BzLFxuICBjb250YWluZXI6IEVsZW1lbnQsXG4gIGNhbGxiYWNrPzogKCkgPT4gdm9pZFxuKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkSXJpV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRJcmlXaWRnZXQocHJvcHM6IElyaVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCIgZ2xvYmFsU3R5bGVzPXtmYWxzZX0+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPElyaVdpZGdldFxuICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgIGlyaVRleHQ9e3Byb3BzLmlyaVRleHR9XG4gICAgICAgICAgY29sb3I9e3Byb3BzLmNvbG9yfVxuICAgICAgICAgIGV4dGVybmFsSWNvbj17cHJvcHMuZXh0ZXJuYWxJY29ufVxuICAgICAgICAgIHVybFByZWZpeD17cHJvcHMudXJsUHJlZml4fVxuICAgICAgICAgIGNvcHlCdXR0b249e3Byb3BzLmNvcHlCdXR0b259XG4gICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgSXJpV2lkZ2V0LCBjcmVhdGVJcmkgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnkgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBUYWJXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9UYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgRW50aXR5VHlwZU5hbWUsIGlzRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBUYWJXaWRnZXQocHJvcHM6IFRhYldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpcmksXG4gICAgYXBpLFxuICAgIG9udG9sb2d5SWQsXG4gICAgZW50aXR5VHlwZSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5LFxuICAgIGhpZXJhcmNoeVRhYixcbiAgICBjcm9zc1JlZlRhYixcbiAgICB0ZXJtaW5vbG9neUluZm9UYWIsXG4gICAgYWx0TmFtZXNUYWIsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNTdWNjZXNzLCBpc0Vycm9yLCBlcnJvciB9ID0gdXNlUXVlcnk8RW50aXR5PihcbiAgICBbXCJ0YWJkYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoXG4gICAgICAgIGlyaSxcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB1c2VMZWdhY3lcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG4gIGZ1bmN0aW9uIHJlbmRlcihkYXRhOiBFbnRpdHkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFRhYlByZXNlbnRhdGlvblxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgZGF0YT17ZGF0YX1cbiAgICAgICAgaXJpPXtpcml9XG4gICAgICAgIGFwaT17YXBpfVxuICAgICAgICB1c2VMZWdhY3k9e3VzZUxlZ2FjeX1cbiAgICAgICAgZW50aXR5VHlwZT17ZGF0YS5nZXRUeXBlKCkgYXMgRW50aXR5VHlwZU5hbWV9XG4gICAgICAgIG9udG9sb2d5SWQ9e29udG9sb2d5SWQgPyBvbnRvbG9neUlkIDogZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgIGhpZXJhcmNoeVRhYj17aGllcmFyY2h5VGFifVxuICAgICAgICBjcm9zc1JlZlRhYj17Y3Jvc3NSZWZUYWJ9XG4gICAgICAgIHRlcm1pbm9sb2d5SW5mb1RhYj17dGVybWlub2xvZ3lJbmZvVGFifVxuICAgICAgICBhbHROYW1lc1RhYj17YWx0TmFtZXNUYWJ9XG4gICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZT17cHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfVxuICAgICAgICBoaWVyYXJjaHlQcmVmZXJyZWRSb290cz17cHJvcHMuaGllcmFyY2h5UHJlZmVycmVkUm9vdHN9XG4gICAgICAgIGhpZXJhcmNoeUtlZXBFeHBhbnNpb25TdGF0ZXM9e3Byb3BzLmhpZXJhcmNoeUtlZXBFeHBhbnNpb25TdGF0ZXN9XG4gICAgICAgIGhpZXJhcmNoeVNob3dTaWJsaW5nc09uSW5pdD17cHJvcHMuaGllcmFyY2h5U2hvd1NpYmxpbmdzT25Jbml0fVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiAoXG4gICAgICAgIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiZGVzY3JpcHRpb25cIil9PC9FdWlUZXh0PlxuICAgICAgKX1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiA8Pntpc0VudGl0eShkYXRhKSA/IHJlbmRlcihkYXRhKSA6IG51bGx9PC8+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUYWIoXG4gIHByb3BzOiBUYWJXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFRhYldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkVGFiV2lkZ2V0KHByb3BzOiBUYWJXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiIGdsb2JhbFN0eWxlcz17ZmFsc2V9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxUYWJXaWRnZXRcbiAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgYWx0TmFtZXNUYWI9e3Byb3BzLmFsdE5hbWVzVGFifVxuICAgICAgICAgIGhpZXJhcmNoeVRhYj17cHJvcHMuaGllcmFyY2h5VGFifVxuICAgICAgICAgIGNyb3NzUmVmVGFiPXtwcm9wcy5jcm9zc1JlZlRhYn1cbiAgICAgICAgICB0ZXJtaW5vbG9neUluZm9UYWI9e3Byb3BzLnRlcm1pbm9sb2d5SW5mb1RhYn1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgICAgaGllcmFyY2h5UHJlZmVycmVkUm9vdHM9e3Byb3BzLmhpZXJhcmNoeVByZWZlcnJlZFJvb3RzfVxuICAgICAgICAgIGhpZXJhcmNoeUtlZXBFeHBhbnNpb25TdGF0ZXM9e3Byb3BzLmhpZXJhcmNoeUtlZXBFeHBhbnNpb25TdGF0ZXN9XG4gICAgICAgICAgaGllcmFyY2h5U2hvd1NpYmxpbmdzT25Jbml0PXtwcm9wcy5oaWVyYXJjaHlTaG93U2libGluZ3NPbkluaXR9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgVGFiV2lkZ2V0LCBjcmVhdGVUYWIgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlUYWJiZWRDb250ZW50IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7XG4gIGlzRW50aXR5LFxuICBpc0luZGl2aWR1YWwsXG4gIGlzUHJvcGVydHksXG59IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9Dcm9zc1JlZldpZGdldC9Dcm9zc1JlZlRhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL1JlaWZpZWRcIjtcbmltcG9ydCB7IFRhYlByZXNlbnRhdGlvblByb3BzIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgT250b2xvZ3lJbmZvV2lkZ2V0IH0gZnJvbSBcIi4uLy4uL09udG9sb2d5SW5mb1dpZGdldFwiO1xuaW1wb3J0IHsgSGllcmFyY2h5V2lkZ2V0IH0gZnJvbSBcIi4vSGllcmFyY2h5V2lkZ2V0XCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi9zdHlsZS90czRuZmRpU3R5bGVzL3RzNG5mZGlUYWJTdHlsZS5jc3NcIjtcblxuZnVuY3Rpb24gVGFiUHJlc2VudGF0aW9uKHByb3BzOiBUYWJQcmVzZW50YXRpb25Qcm9wcykge1xuICBmdW5jdGlvbiByZW5kZXIoZGF0YTogRW50aXR5KSB7XG4gICAgY29uc3QgZmluYWxDbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgfHwgXCJ0czRuZmRpLXRhYi1zdHlsZVwiO1xuICAgIGNvbnN0IHRhYnMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gc2hvdyB0aGUgdGFicy4gVGhlcmVmb3JlLCB1bmRlZmluZWQgZ2V0cyB0cmVhdGVkIGFzIHRydXRoeS5cbiAgICAgKi9cbiAgICBpZiAocHJvcHMuYWx0TmFtZXNUYWIgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5hbHROYW1lc1RhYikge1xuICAgICAgdGFicy5wdXNoKHtcbiAgICAgICAgY29udGVudDogKFxuICAgICAgICAgIDxBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb25cbiAgICAgICAgICAgIHN5bm9ueW1zPXtcbiAgICAgICAgICAgICAgZGF0YSA/IGRhdGEuZ2V0U3lub255bXMoKS5tYXAoKHN5bm9ueW0pID0+IHN5bm9ueW0udmFsdWUpIDogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlzTG9hZGluZz17cHJvcHMuaXNMb2FkaW5nfVxuICAgICAgICAgICAgZXJyb3I9e3Byb3BzLmVycm9yfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtmaW5hbENsYXNzTmFtZX0tYWx0TmFtZVRhYmB9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSxcbiAgICAgICAgaWQ6IFwidGFiMVwiLFxuICAgICAgICBuYW1lOiBcIkFsdGVybmF0aXZlIE5hbWVzXCIsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuaGllcmFyY2h5VGFiID09PSB1bmRlZmluZWQgfHwgcHJvcHMuaGllcmFyY2h5VGFiKSB7XG4gICAgICB0YWJzLnB1c2goe1xuICAgICAgICBjb250ZW50OiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIHsvKiBUT0RPOiBJcyBvdmVyZmxvdzogXCJhdXRvXCIgd2FudGVkPyAqL31cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgb3ZlcmZsb3c6IFwiYXV0b1wiIH19PlxuICAgICAgICAgICAgICA8SGllcmFyY2h5V2lkZ2V0XG4gICAgICAgICAgICAgICAgLy8gYmFja2VuZF90eXBlIGFuZCBhcGlLZXkgbWlzc2luZyBoZXJlLiBJZiBUYWJXaWRnZXQvIE1ldGFkYXRhV2lkZ2V0IHNoYWxsIGJlIHVzZWQgZm9yIG90aGVyIGJhY2tlbmQgdHlwZXMgbGF0ZXIsIHRoaXMgaGFzIHRvIGJlIHByb3ZpZGVkXG4gICAgICAgICAgICAgICAgYXBpVXJsPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgb250b2xvZ3lJZD17XG4gICAgICAgICAgICAgICAgICBwcm9wcy5vbnRvbG9neUlkIHx8XG4gICAgICAgICAgICAgICAgICAoZGF0YSAmJiBkYXRhLmdldE9udG9sb2d5SWQoKSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgID8gZGF0YS5nZXRPbnRvbG9neUlkKClcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICBwcmVmZXJyZWRSb290cz17cHJvcHMuaGllcmFyY2h5UHJlZmVycmVkUm9vdHN9XG4gICAgICAgICAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0PXtwcm9wcy5oaWVyYXJjaHlTaG93U2libGluZ3NPbkluaXR9XG4gICAgICAgICAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlcz17cHJvcHMuaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlc31cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2ZpbmFsQ2xhc3NOYW1lfS1oaWVyYXJjaHlgfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgICksXG4gICAgICAgIGlkOiBcInRhYjJcIixcbiAgICAgICAgbmFtZTogXCJIaWVyYXJjaHlcIixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5jcm9zc1JlZlRhYiA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmNyb3NzUmVmVGFiKSB7XG4gICAgICB0YWJzLnB1c2goe1xuICAgICAgICBjb250ZW50OiAoXG4gICAgICAgICAgPENyb3NzUmVmVGFiUHJlc2VudGF0aW9uXG4gICAgICAgICAgICBjcm9zc3JlZnM9e1xuICAgICAgICAgICAgICBkYXRhXG4gICAgICAgICAgICAgICAgPyBSZWlmaWVkLmZyb21Kc29uKGRhdGEuZ2V0Q3Jvc3NSZWZlcmVuY2VzKCkpLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc0xvYWRpbmc9e3Byb3BzLmlzTG9hZGluZ31cbiAgICAgICAgICAgIGVycm9yPXtwcm9wcy5lcnJvcn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7ZmluYWxDbGFzc05hbWV9LWNyb3NzUmVmYH1cbiAgICAgICAgICAvPlxuICAgICAgICApLFxuICAgICAgICBpZDogXCJ0YWIzXCIsXG4gICAgICAgIG5hbWU6IFwiQ3Jvc3MgcmVmZXJlbmNlc1wiLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnRlcm1pbm9sb2d5SW5mb1RhYiA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLnRlcm1pbm9sb2d5SW5mb1RhYikge1xuICAgICAgdGFicy5wdXNoKHtcbiAgICAgICAgY29udGVudDogKFxuICAgICAgICAgIDxPbnRvbG9neUluZm9XaWRnZXRcbiAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWQgfHwgZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgIHBhcmFtZXRlcj17XCJcIn1cbiAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgc2hvd0JhZGdlcz17ZmFsc2V9XG4gICAgICAgICAgICBoYXNUaXRsZT17ZmFsc2V9XG4gICAgICAgICAgICB3aWR0aD17NjAwfVxuICAgICAgICAgIC8+XG4gICAgICAgICksXG4gICAgICAgIGlkOiBcInRhYjRcIixcbiAgICAgICAgbmFtZTogYEFib3V0ICR7cHJvcHMub250b2xvZ3lJZD8udG9VcHBlckNhc2UoKX1gLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRhYnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvKipcbiAgICAgICAqIEV1aVRhYmJlZENvbnRlbnQgY29tcG9uZW50IHJhaXNlcyBleGNlcHRpb24gaWYgbm8gdGFiIGlzIHByb3ZpZGVkLlxuICAgICAgICovXG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfT5cbiAgICAgICAgPEV1aVRhYmJlZENvbnRlbnQgc2l6ZT1cInNcIiB0YWJzPXt0YWJzfSAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0VudGl0eShwcm9wcy5kYXRhKSB8fFxuICAgICAgaXNQcm9wZXJ0eShwcm9wcy5kYXRhKSB8fFxuICAgICAgaXNJbmRpdmlkdWFsKHByb3BzLmRhdGEpXG4gICAgICAgID8gcmVuZGVyKHByb3BzLmRhdGEpXG4gICAgICAgIDogbnVsbH1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IHsgVGFiUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgRXVpRmxleEdyb3VwLFxuICBFdWlGbGV4SXRlbSxcbiAgRXVpTG9hZGluZ1NwaW5uZXIsXG4gIEV1aVBhbmVsLFxuICBFdWlUZXh0LFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcmVzZW50YXRpb25Qcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vLi4vLi4vc3R5bGUvdHM0bmZkaVN0eWxlcy90czRuZmRpQWx0TmFtZVRhYlN0eWxlLmNzc1wiO1xuXG5mdW5jdGlvbiBBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24oXG4gIHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcmVzZW50YXRpb25Qcm9wc1xuKSB7XG4gIGNvbnN0IGZpbmFsQ2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lIHx8IFwidHM0bmZkaS1hbHROYW1lVGFiLXN0eWxlXCI7XG5cbiAgZnVuY3Rpb24gcmVuZGVyQWx0TGFiZWwoKSB7XG4gICAgaWYgKHByb3BzLmlzTG9hZGluZykge1xuICAgICAgcmV0dXJuIDxFdWlMb2FkaW5nU3Bpbm5lciAvPjtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZXJyb3IpIHtcbiAgICAgIDxFdWlUZXh0PlxuICAgICAgICB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KHByb3BzLmVycm9yLCBcImFsdGVybmF0aXZlIG5hbWVzXCIpfVxuICAgICAgPC9FdWlUZXh0PjtcbiAgICB9XG4gICAgaWYgKHByb3BzLnN5bm9ueW1zICYmIHByb3BzLnN5bm9ueW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBwcm9wcy5zeW5vbnltcy5tYXAoKHZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgPEV1aUZsZXhJdGVtIGtleT17dmFsdWUgKyBpbmRleH0+e3ZhbHVlfTwvRXVpRmxleEl0ZW0+XG4gICAgICApKTtcbiAgICB9XG4gICAgcmV0dXJuIDxFdWlUZXh0Pk5vIGFsdGVybmF0aXZlIG5hbWVzIGV4aXN0LjwvRXVpVGV4dD47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0+XG4gICAgICA8RXVpUGFuZWw+XG4gICAgICAgIDxFdWlGbGV4R3JvdXAgc3R5bGU9e3sgcGFkZGluZzogMTAgfX0gZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAge3JlbmRlckFsdExhYmVsKCl9XG4gICAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgICAgPC9FdWlQYW5lbD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgRXVpRmxleEdyb3VwLFxuICBFdWlGbGV4SXRlbSxcbiAgRXVpTG9hZGluZ1NwaW5uZXIsXG4gIEV1aVBhbmVsLFxuICBFdWlUZXh0LFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBDcm9zc1JlZlByZXNlbnRhdGlvblByb3BzIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi8uLi9zdHlsZS90czRuZmRpU3R5bGVzL3RzNG5mZGlDcm9zc1JlZlN0eWxlLmNzc1wiO1xuXG5mdW5jdGlvbiBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbihwcm9wczogQ3Jvc3NSZWZQcmVzZW50YXRpb25Qcm9wcykge1xuICBjb25zdCBmaW5hbENsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSB8fCBcInRzNG5mZGktYWx0TmFtZVRhYi1zdHlsZVwiO1xuXG4gIGZ1bmN0aW9uIHJlbmRlckNyb3NzUmVmcyhjcm9zc3JlZnM6IGFueSkge1xuICAgIGlmIChwcm9wcy5pc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybiA8RXVpTG9hZGluZ1NwaW5uZXIgLz47XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmVycm9yKSB7XG4gICAgICA8RXVpVGV4dD5cbiAgICAgICAge2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShwcm9wcy5lcnJvciwgXCJjcm9zcyByZWZlcmVuY2VzXCIpfVxuICAgICAgPC9FdWlUZXh0PjtcbiAgICB9XG5cbiAgICBpZiAoY3Jvc3NyZWZzICYmIGNyb3NzcmVmcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3Jvc3NyZWZzPy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4gKFxuICAgICAgICA8RXVpRmxleEl0ZW0ga2V5PXtpbmRleH0+e2l0ZW19PC9FdWlGbGV4SXRlbT5cbiAgICAgICkpO1xuICAgIH1cbiAgICByZXR1cm4gPEV1aVRleHQ+Tm8gY3Jvc3MgcmVmZXJlbmNlcyBleGlzdC48L0V1aVRleHQ+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PlxuICAgICAgPEV1aVBhbmVsPlxuICAgICAgICA8PlxuICAgICAgICAgIDxFdWlGbGV4R3JvdXAgc3R5bGU9e3sgcGFkZGluZzogNyB9fSBkaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIHtyZW5kZXJDcm9zc1JlZnMocHJvcHMuY3Jvc3NyZWZzKX1cbiAgICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgICAgPC8+XG4gICAgICA8L0V1aVBhbmVsPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgeyBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCwgeyBSZWFjdEVsZW1lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIEV1aUNhcmQsXG4gIEV1aUZsZXhJdGVtLFxuICBFdWlMb2FkaW5nU3Bpbm5lcixcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aVNwYWNlcixcbiAgRXVpVGV4dCxcbn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgT250b2xvZ3ksIFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7XG4gIGNhcGl0YWxpemUsXG4gIGRlQ2FtZWxDYXNlLFxuICBkZVVuZGVyc2NvcmUsXG4gIHJhbmRvbVN0cmluZyxcbn0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge1xuICBnZXRFbnRpdHlMaW5rSlNYLFxuICBnZXRSZWlmaWVkSlNYLFxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IE9udG9sb2d5SW5mb1dpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCBcIi4uLy4uLy4uL3N0eWxlL3RzNG5mZGlTdHlsZXMvdHM0bmZkaU9udG9sb2d5SW5mb1N0eWxlLmNzc1wiO1xuXG5jb25zdCBERUZBVUxUX0hBU19USVRMRSA9IHRydWU7XG5cbmZ1bmN0aW9uIE9udG9sb2d5SW5mb1dpZGdldChwcm9wczogT250b2xvZ3lJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIG9udG9sb2d5SWQsXG4gICAgYXBpLFxuICAgIHBhcmFtZXRlcixcbiAgICBoYXNUaXRsZSA9IERFRkFVTFRfSEFTX1RJVExFLFxuICAgIHVzZUxlZ2FjeSxcbiAgICBzaG93QmFkZ2VzLFxuICAgIGNsYXNzTmFtZSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuICBjb25zdCBvbk5hdmlnYXRlcyA9IHtcbiAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gIH07XG4gIGNvbnN0IGZpbmFsQ2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwidHM0bmZkaS1vbnRvbG9neXktaW5mby1zdHlsZVwiO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBvbnRvbG9neSxcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ09udG9sb2d5LFxuICAgIGlzU3VjY2VzczogaXNTdWNjZXNzT250b2xvZ3ksXG4gICAgaXNFcnJvcjogaXNFcnJvck9udG9sb2d5LFxuICAgIGVycm9yOiBlcnJvck9udG9sb2d5LFxuICB9ID0gdXNlUXVlcnkoW1wib250b2xvZ3lJbmZvXCIsIHByb3BzXSwgKCkgPT4ge1xuICAgIHJldHVybiBvbHNBcGkuZ2V0T250b2xvZ3lPYmplY3Qob250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICB9KTtcblxuICBmdW5jdGlvbiBnZXRPbnRvbG9neUlyaVNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgeyhvbnRvbG9neS5nZXRJcmkoKSB8fCBvbnRvbG9neS5nZXRPbnRvbG9neVB1cmwoKSkgJiYgKFxuICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxiPk9udG9sb2d5IElSSTo8L2I+XG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBpZD17XCJvbnRvbG9neUlyaVwifVxuICAgICAgICAgICAgICAgIGhyZWY9e29udG9sb2d5LmdldElyaSgpIHx8IG9udG9sb2d5LmdldE9udG9sb2d5UHVybCgpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge29udG9sb2d5LmdldElyaSgpIHx8IG9udG9sb2d5LmdldE9udG9sb2d5UHVybCgpfVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRWZXJzaW9uSXJpU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7b250b2xvZ3kuZ2V0VmVyc2lvbklyaSgpICYmIChcbiAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8Yj5WZXJzaW9uIElSSTo8L2I+XG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgPGEgaWQ9e1widmVyc2lvbklyaVwifSBocmVmPXtvbnRvbG9neS5nZXRWZXJzaW9uSXJpKCl9PlxuICAgICAgICAgICAgICAgIHtvbnRvbG9neS5nZXRWZXJzaW9uSXJpKCl9XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldExhc3RMb2FkU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7b250b2xvZ3kuZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpICYmIChcbiAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8Yj5MYXN0IGxvYWRlZDo8L2I+XG4gICAgICAgICAgICA8cD57bmV3IERhdGUob250b2xvZ3kuZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpKS50b1N0cmluZygpfTwvcD5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE9udG9sb2d5SWRTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSk6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtvbnRvbG9neS5nZXRPbnRvbG9neUlkKCkgJiYgKFxuICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxiPk9udG9sb2d5IElEOjwvYj5cbiAgICAgICAgICAgIDxwPntvbnRvbG9neS5nZXRPbnRvbG9neUlkKCl9PC9wPlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VmVyc2lvblNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge29udG9sb2d5LmdldFZlcnNpb24oKSAmJiAoXG4gICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgPGI+VmVyc2lvbjo8L2I+XG4gICAgICAgICAgICA8cD57b250b2xvZ3kuZ2V0VmVyc2lvbigpfTwvcD5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE51bUNsYXNzZXNTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSk6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtvbnRvbG9neS5nZXROdW1DbGFzc2VzKCkgJiYgKFxuICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxiPk51bWJlciBvZiBjbGFzc2VzOjwvYj5cbiAgICAgICAgICAgIDxwPntvbnRvbG9neS5nZXROdW1DbGFzc2VzKCkudG9Mb2NhbGVTdHJpbmcoKX08L3A+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDcmVhdG9yc1NlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge29udG9sb2d5LmdldENyZWF0b3JzKCkubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgPGI+Q3JlYXRvcnM6PC9iPlxuICAgICAgICAgICAgICB7b250b2xvZ3kuZ2V0Q3JlYXRvcnMoKS5sZW5ndGggPiAxID8gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgIHtvbnRvbG9neS5nZXRDcmVhdG9ycygpLm1hcCgoY3JlYXRvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtjcmVhdG9yICsgcmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neS5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChcbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5LmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5LmdldENyZWF0b3JzKClbMF0sXG4gICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMsXG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8RXVpU3BhY2VyIC8+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QW5ub3RhdGlvblNlY3Rpb24odGhpbmc6IFRoaW5nKTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge3RoaW5nLmdldEFubm90YXRpb25QcmVkaWNhdGVzKCkubWFwKChhbm5vS2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgYW5ub3MgPSB0aGluZy5nZXRBbm5vdGF0aW9uQnlJZChhbm5vS2V5KTtcbiAgICAgICAgICBpZiAoYW5ub3MubGVuZ3RoID09IDApIHJldHVybiA8PjwvPjtcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9IGtleT17YW5ub0tleX0+XG4gICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgIHtjYXBpdGFsaXplKFxuICAgICAgICAgICAgICAgICAgZGVVbmRlcnNjb3JlKFxuICAgICAgICAgICAgICAgICAgICBkZUNhbWVsQ2FzZSh0aGluZy5nZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGFubm9LZXkpKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgIHthbm5vcy5sZW5ndGggPiAxID8gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgIHthbm5vcy5tYXAoKGFubm90YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9IGlkPXthbm5vdGF0aW9uLnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2dldFJlaWZpZWRKU1goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgIDxwPjwvcD5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8cCBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgIHtnZXRSZWlmaWVkSlNYKHRoaW5nLCBhbm5vc1swXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PlxuICAgICAgPEV1aUNhcmRcbiAgICAgICAgdGl0bGU9e2hhc1RpdGxlID8gXCJPbnRvbG9neSBJbmZvcm1hdGlvblwiIDogXCJcIn1cbiAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICAgIHN0eWxlPXtwcm9wcy53aWR0aCA/IHsgd2lkdGg6IHByb3BzLndpZHRoIH0gOiB7fX1cbiAgICAgID5cbiAgICAgICAge2lzTG9hZGluZ09udG9sb2d5ICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXtcInNcIn0gLz59XG4gICAgICAgIHtpc1N1Y2Nlc3NPbnRvbG9neSAmJiBvbnRvbG9neSAhPT0gdW5kZWZpbmVkICYmIChcbiAgICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG4gICAgICAgICAgICB7Z2V0T250b2xvZ3lJcmlTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgIHtnZXRWZXJzaW9uSXJpU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICB7Z2V0TGFzdExvYWRTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLyogVE9ETzogRG8gd2Ugd2FudCB0aGUgZm9sbG93aW5nIG9uIHRoZSBpbmZvcm1hdGlvbiB3aWRnZXQ/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYmkgZG9lcyBub3QgaGF2ZSB0aGVtIHRoZXJlLCBidXQgb24gb3RoZXIgcGFydHMgb2YgdGhlIGVudGl0eSBwYWdlICovXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2dldE9udG9sb2d5SWRTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICB7Z2V0VmVyc2lvblNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgIHtnZXROdW1DbGFzc2VzU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgey8qe2dldENyZWF0b3JzU2VjdGlvbihlbnRpdHlJbmZvKX0qL1xuICAgICAgICAgICAgICAgIC8qIHJlZHVuZGFudCBhcyBpdCdzIGxpc3RlZCBpbiBhbm5vdGF0aW9ucyBhbnl3YXkgKi99XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7Z2V0QW5ub3RhdGlvblNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgKX1cbiAgICAgICAge2lzRXJyb3JPbnRvbG9neSAmJiAoXG4gICAgICAgICAgPEV1aVRleHQ+XG4gICAgICAgICAgICB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yT250b2xvZ3ksIFwiaW5mb3JtYXRpb25cIil9XG4gICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICApfVxuICAgICAgPC9FdWlDYXJkPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPbnRvbG9neUluZm8oXG4gIHByb3BzOiBPbnRvbG9neUluZm9XaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZE9udG9sb2d5SW5mb1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkT250b2xvZ3lJbmZvV2lkZ2V0KHByb3BzOiBPbnRvbG9neUluZm9XaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxPbnRvbG9neUluZm9XaWRnZXRcbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgIHNob3dCYWRnZXM9e3Byb3BzLnNob3dCYWRnZXN9XG4gICAgICAgICAgaGFzVGl0bGU9e3Byb3BzLmhhc1RpdGxlfVxuICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e3Byb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBPbnRvbG9neUluZm9XaWRnZXQsIGNyZWF0ZU9udG9sb2d5SW5mbyB9O1xuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlUmVkdWNlciB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgRXVpTG9hZGluZ1NwaW5uZXIsXG4gIEV1aVRleHQsXG4gIEV1aUljb24sXG4gIEV1aVByb3ZpZGVyLFxuICBFdWlDYXJkLFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgSGllcmFyY2h5LCBUcmVlTm9kZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzL0hpZXJhcmNoeVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgU2tvc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvU2tvc0FwaVwiO1xuaW1wb3J0IHsgSGllcmFyY2h5QnVpbGRlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHsgT250b1BvcnRhbEFwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvT250b1BvcnRhbEFwaVwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vLi4vLi4vc3R5bGUvdHNzU3R5bGVzLmNzc1wiO1xuaW1wb3J0IHsgcmFuZG9tU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBIaWVyYXJjaHlXaWRnZXRQcm9wcywgRW50aXR5RGF0YSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGlzSW5kaXZpZHVhbFR5cGVOYW1lIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi8uLi9zdHlsZS90czRuZmRpU3R5bGVzL3RzNG5mZGlIaWVyYXJjaHlTdHlsZS5jc3NcIjtcblxuZXhwb3J0IGNvbnN0IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMgPSB7XG4gIElOQ0xVREVfT0JTT0xFVEVfRU5USVRJRVM6IGZhbHNlLFxuICBQUkVGRVJSRURfUk9PVFM6IGZhbHNlLFxuICBLRUVQX0VYUEFOU0lPTl9TVEFURVM6IGZhbHNlLFxuICBTSE9XX1NJQkxJTkdTX09OX0lOSVQ6IGZhbHNlLFxuICBVU0VfTEVHQUNZOiBmYWxzZSxcbn0gYXMgY29uc3Q7XG5cbi8vIFRPRE86IHVzZSBvZiBlbnRpdHlUeXBlIGhhcyB0byBiZSByZXZpZXdlZC4gQ3VycmVudGx5IGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZW50aXR5VHlwZSBvZiB0aGUgaGllcmFyY2h5IGFuZCB0aGUgc3BlY2lmaWMgZW50aXR5IGluc2lkZSBpdCBhbHdheXMgbWF0Y2ggKG5vdCBuZWNlc3NhcmlseSB0cnVlIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzLCBidXQgdGhlc2UgaGF2ZSB0byBiZSByZXZpZXdlZCBhbnl3YXlzKVxuZnVuY3Rpb24gVHJlZUxpbmsocHJvcHM6IHtcbiAgZW50aXR5RGF0YTogRW50aXR5RGF0YTtcbiAgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nO1xuICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gIGVudGl0eVR5cGU/OiBzdHJpbmc7XG4gIG9uTmF2aWdhdGVUb0VudGl0eT86IChcbiAgICBvbnRvbG9neUlkOiBzdHJpbmcsXG4gICAgZW50aXR5VHlwZT86IHN0cmluZyxcbiAgICBlbnRpdHk/OiBFbnRpdHlEYXRhXG4gICkgPT4gdm9pZDtcbiAgb25OYXZpZ2F0ZVRvT250b2xvZ3k/OiAoXG4gICAgb250b2xvZ3lJZDogc3RyaW5nLFxuICAgIGVudGl0eVR5cGU/OiBzdHJpbmcsXG4gICAgZW50aXR5PzogRW50aXR5RGF0YVxuICApID0+IHZvaWQ7XG4gIGhpZ2hsaWdodDogYm9vbGVhbjtcbn0pIHtcbiAgbGV0IGRlZmluZWRCeTogc3RyaW5nW10gPSBwcm9wcy5lbnRpdHlEYXRhLmRlZmluZWRCeSB8fCBbXTtcbiAgaWYgKGRlZmluZWRCeS5pbmNsdWRlcyhwcm9wcy5vbnRvbG9neUlkKSkgZGVmaW5lZEJ5ID0gW107XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtwcm9wcy5oaWdobGlnaHQgPyBcImhpZ2hsaWdodFwiIDogdW5kZWZpbmVkfT5cbiAgICAgICAge3Byb3BzLmNoaWxkUmVsYXRpb25Ub1BhcmVudCA9PVxuICAgICAgICAgIFwiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0JGT18wMDAwMDUwXCIgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5JbmxpbmVTdGFydDogXCIxLjVweFwiLCBtYXJnaW5Ub3A6IFwiMi41cHhcIiB9fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdXJyb3VuZENpcmNsZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICZuYnNwO1AmbmJzcDtcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICB7cHJvcHMuY2hpbGRSZWxhdGlvblRvUGFyZW50ID09XG4gICAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZVwiICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luSW5saW5lU3RhcnQ6IFwiMS41cHhcIiwgbWFyZ2luVG9wOiBcIjIuNXB4XCIgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3Vycm91bmRDaXJjbGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBJXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHkpXG4gICAgICAgICAgICAgIHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eShcbiAgICAgICAgICAgICAgICBwcm9wcy5vbnRvbG9neUlkLFxuICAgICAgICAgICAgICAgIHByb3BzLmVudGl0eVR5cGUgfHwgXCJcIixcbiAgICAgICAgICAgICAgICBwcm9wcy5lbnRpdHlEYXRhXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuPiB7cHJvcHMuZW50aXR5RGF0YS5sYWJlbCB8fCBwcm9wcy5lbnRpdHlEYXRhLmlyaX0gPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHtkZWZpbmVkQnkubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgJm5ic3A7XG4gICAgICAgICAge2RlZmluZWRCeS5tYXAoKGRlZmluaW5nT250b2xvZ3kpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e2Ake3Byb3BzLmVudGl0eURhdGEuaXJpfToke2RlZmluaW5nT250b2xvZ3l9YH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KFxuICAgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcHMuZW50aXR5VHlwZSB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmVudGl0eURhdGFcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICAgIHtkZWZpbmluZ09udG9sb2d5LnRvVXBwZXJDYXNlKCl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSGllcmFyY2h5V2lkZ2V0KHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcykge1xuICBjb25zdCB7XG4gICAgYXBpVXJsLFxuICAgIGJhY2tlbmRUeXBlLFxuICAgIGFwaUtleSxcbiAgICBvbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgb25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgaXJpLFxuICAgIG9udG9sb2d5SWQsXG4gICAgZW50aXR5VHlwZSxcbiAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMuSU5DTFVERV9PQlNPTEVURV9FTlRJVElFUyxcbiAgICBwcmVmZXJyZWRSb290cyA9IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMuUFJFRkVSUkVEX1JPT1RTLFxuICAgIGtlZXBFeHBhbnNpb25TdGF0ZXMgPSBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTLktFRVBfRVhQQU5TSU9OX1NUQVRFUyxcbiAgICBzaG93U2libGluZ3NPbkluaXQgPSBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTLlNIT1dfU0lCTElOR1NfT05fSU5JVCxcbiAgICB1c2VMZWdhY3kgPSBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTLlVTRV9MRUdBQ1ksXG4gICAgY2xhc3NOYW1lLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGZpbmFsQ2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwidHM0bmZkaS1oaWVyYXJjaHktc3R5bGVcIjtcblxuICAvLyB1c2VkIHRvIG1hbnVhbGx5IHJlcmVuZGVyIHRoZSBjb21wb25lbnQgb24gdXBkYXRlIG9mIGhpZXJhcmNoeSAoYXMgaGllcmFyY2h5IG9iamVjdCBpcyBuZXN0ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIHN0YXRlIHZhcmlhYmxlIGl0c2VsZilcbiAgY29uc3QgWywgZm9yY2VVcGRhdGVdID0gdXNlUmVkdWNlcihcbiAgICAoeCkgPT4geCArICgxICUgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLFxuICAgIDBcbiAgKTtcblxuICBjb25zdCBhcGk6IEhpZXJhcmNoeUJ1aWxkZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBzd2l0Y2ggKGJhY2tlbmRUeXBlKSB7XG4gICAgICBjYXNlIFwib2xzXCI6XG4gICAgICAgIHJldHVybiBuZXcgT2xzQXBpKGFwaVVybCk7XG4gICAgICBjYXNlIFwic2tvc21vc1wiOlxuICAgICAgICByZXR1cm4gbmV3IFNrb3NBcGkoYXBpVXJsKTtcbiAgICAgIGNhc2UgXCJvbnRvcG9ydGFsXCI6XG4gICAgICAgIHJldHVybiBuZXcgT250b1BvcnRhbEFwaShhcGlVcmwsIGFwaUtleSB8fCBcIlwiKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuZXcgT2xzQXBpKGFwaVVybCk7XG4gICAgfVxuICB9LCBbYXBpVXJsLCBiYWNrZW5kVHlwZSwgYXBpS2V5XSk7XG5cbiAgY29uc3QgeyBkYXRhOiBoaWVyYXJjaHksIGlzU3VjY2VzczogaXNTdWNjZXNzSGllcmFyY2h5IH0gPSB1c2VRdWVyeShcbiAgICBbXG4gICAgICBcImhpZXJhcmNoeVNlbUxvb2tQXCIsXG4gICAgICBpcmksXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIHByZWZlcnJlZFJvb3RzLFxuICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgdXNlTGVnYWN5LFxuICAgIF0sXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0TmV3SGllcmFyY2h5KCkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFwaS5idWlsZEhpZXJhcmNoeVdpdGhJcmkoe1xuICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgICBpcmk6IGlyaSxcbiAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcbiAgICAgICAgcHJlZmVycmVkUm9vdHM6IHByZWZlcnJlZFJvb3RzLFxuICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgIHNob3dTaWJsaW5nc09uSW5pdDogc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICAgIH0pO1xuICAgIH1cbiAgKTtcblxuICBjb25zdCB0b2dnbGVOb2RlID0gdXNlQ2FsbGJhY2soXG4gICAgKG5vZGU6IFRyZWVOb2RlKSA9PiB7XG4gICAgICBpZiAoIShoaWVyYXJjaHkgaW5zdGFuY2VvZiBIaWVyYXJjaHkpKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkhpZXJhcmNoeSBvYmplY3Qgd2FzIHVuZGVmaW5lZCB3aGlsZSB0cnlpbmcgdG8gZXhwYW5kIGEgdHJlZSBub2RlLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uXCJcbiAgICAgICAgKTtcblxuICAgICAgLy8gVE9ETzogaW5kaXZpZHVhbCBoaWVyYXJjaGllcyBhcmUgZnJvemVuIGZvciBub3cgKGJlZm9yZSB1bmRvaW5nLCBjb3JyZWN0IGNoaWxkIGxvYWRpbmcgaGFzIHRvIGJlIGltcGxlbWVudGVkIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzKVxuICAgICAgaWYgKGhpZXJhcmNoeS5lbnRpdHlUeXBlICYmIGlzSW5kaXZpZHVhbFR5cGVOYW1lKGhpZXJhcmNoeS5lbnRpdHlUeXBlKSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICAvLyB0b2dnbGUgZXhwYW5zaW9uIHN0YXRlIGFuZCBmb3JjZSBjb21wb25lbnQgdG8gcmVyZW5kZXIgYWZ0ZXJ3YXJkXG4gICAgICBub2RlLmV4cGFuZGVkID0gIW5vZGUuZXhwYW5kZWQ7XG5cbiAgICAgIC8vIGZldGNoIG5lZWRlZCBpbmZvcm1hdGlvbiBhbmQgcmVyZW5kZXIgYWdhaW4gaWYgbmVlZGVkXG4gICAgICBpZiAobm9kZS5leHBhbmRlZCkge1xuICAgICAgICBub2RlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICBmb3JjZVVwZGF0ZSgpO1xuXG4gICAgICAgIGhpZXJhcmNoeS5mZXRjaEluZm9ybWF0aW9uRm9yRXhwYW5zaW9uKG5vZGUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIG5vZGUubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIGZvcmNlVXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgaGllcmFyY2h5LmNsb3NlTm9kZShub2RlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoaWVyYXJjaHldXG4gICk7XG5cbiAgZnVuY3Rpb24gcmVuZGVyVHJlZU5vZGUoXG4gICAgaGllcmFyY2h5OiBIaWVyYXJjaHksXG4gICAgbm9kZTogVHJlZU5vZGUsXG4gICAgZHJhd0xpbmU/OiBib29sZWFuXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICA8RXVpVGV4dD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGhlaWdodDogXCIyNHB4XCIgfX0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICAgICAgICAgICAgICBib3JkZXJMZWZ0OiBcIjFweCBkb3R0ZWQgYmxhY2tcIixcbiAgICAgICAgICAgICAgICBib3JkZXJCb3R0b206IFwiMXB4IGRvdHRlZCBibGFja1wiLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEycHhcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMTZweFwiLFxuICAgICAgICAgICAgICAgIGxlZnQ6IFwiNS41cHhcIixcbiAgICAgICAgICAgICAgICB0b3A6IFwiLTFweFwiLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgYm9yZGVyTGVmdDogZHJhd0xpbmUgPyBcIjFweCBkb3R0ZWQgYmxhY2tcIiA6IFwiXCIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IFwiMTJweFwiLFxuICAgICAgICAgICAgICAgIGhlaWdodDogXCI5cHhcIixcbiAgICAgICAgICAgICAgICBsZWZ0OiBcIjUuNXB4XCIsXG4gICAgICAgICAgICAgICAgdG9wOiBcIjBweFwiLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLCB0b3A6IFwiLTIycHhcIiB9fT5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgeyFub2RlLmVudGl0eURhdGEuaGFzQ2hpbGRyZW4gPyAoXG4gICAgICAgICAgICAgICAgICA8RXVpSWNvbiB0eXBlPXtcImVtcHR5XCJ9IC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3t9fVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlTm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEV1aUljb25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPXtub2RlLmV4cGFuZGVkID8gXCJhcnJvd0Rvd25cIiA6IFwiYXJyb3dSaWdodFwifVxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9e1wic1wifVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgPFRyZWVMaW5rXG4gICAgICAgICAgICAgICAgZW50aXR5RGF0YT17bm9kZS5lbnRpdHlEYXRhfVxuICAgICAgICAgICAgICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudD17bm9kZS5jaGlsZFJlbGF0aW9uVG9QYXJlbnR9XG4gICAgICAgICAgICAgICAgb250b2xvZ3lJZD17aGllcmFyY2h5Lm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgZW50aXR5VHlwZT17aGllcmFyY2h5LmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtvbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodD17bm9kZS5lbnRpdHlEYXRhLmlyaSA9PSBoaWVyYXJjaHk/Lm1haW5FbnRpdHlJcml9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICB7bm9kZS5lbnRpdHlEYXRhLm51bURlc2NlbmRhbnRzICE9IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIG5vZGUuZW50aXR5RGF0YS5udW1EZXNjZW5kYW50cyA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6IFwiZ3JheVwiIH19PlxuICAgICAgICAgICAgICAgICAgICAoe25vZGUuZW50aXR5RGF0YS5udW1EZXNjZW5kYW50cy50b0xvY2FsZVN0cmluZygpfSlcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAge25vZGUuZXhwYW5kZWQgJiYgKFxuICAgICAgICAgIDx1bCBzdHlsZT17eyBtYXJnaW5CbG9ja0VuZDogXCIwXCIsIG1hcmdpbklubGluZVN0YXJ0OiBcIjUuNXB4XCIgfX0+XG4gICAgICAgICAgICB7bm9kZS5sb2FkaW5nID8gKFxuICAgICAgICAgICAgICA8RXVpTG9hZGluZ1NwaW5uZXJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLCBsZWZ0OiBcIjEzcHhcIiwgdG9wOiBcIjVweFwiIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICBub2RlLmxvYWRlZENoaWxkcmVuLm1hcCgoY2hpbGQsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyTGVmdDogZHJhd0xpbmUgPyBcIjFweCBkb3R0ZWQgYmxhY2tcIiA6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IFwiMXJlbVwiLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cmVuZGVyVHJlZU5vZGUoXG4gICAgICAgICAgICAgICAgICAgICAgaGllcmFyY2h5LFxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgIGlkeCA8IG5vZGUubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0+XG4gICAgICA8RXVpQ2FyZFxuICAgICAgICB0aXRsZT17XCJcIn1cbiAgICAgICAgbGF5b3V0PXtcImhvcml6b250YWxcIn1cbiAgICAgICAgc3R5bGU9e3sgb3ZlcmZsb3dYOiBcImF1dG9cIiwgb3ZlcmZsb3dZOiBcImhpZGRlblwiIH19XG4gICAgICA+XG4gICAgICAgIHtpc1N1Y2Nlc3NIaWVyYXJjaHkgJiYgaGllcmFyY2h5ICE9IHVuZGVmaW5lZCA/IChcbiAgICAgICAgICA8RXVpVGV4dCBzdHlsZT17eyB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiIH19PlxuICAgICAgICAgICAge1wiIFwifVxuICAgICAgICAgICAgey8qIC8vIFRPRE86IERvZXMgbm90IGdldCBkaXNwbGF5ZWQgY29ycmVjdGx5IG9uIHN0b3J5Ym9vayBtYWluIHBhZ2UgKi99XG4gICAgICAgICAgICB7aGllcmFyY2h5LnJvb3RzLm1hcCgocm9vdE5vZGUsIGlkeCkgPT5cbiAgICAgICAgICAgICAgcmVuZGVyVHJlZU5vZGUoXG4gICAgICAgICAgICAgICAgaGllcmFyY2h5LFxuICAgICAgICAgICAgICAgIHJvb3ROb2RlLFxuICAgICAgICAgICAgICAgIGlkeCA8IGhpZXJhcmNoeS5yb290cy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxFdWlMb2FkaW5nU3Bpbm5lciAvPlxuICAgICAgICApfVxuICAgICAgPC9FdWlDYXJkPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIaWVyYXJjaHkoXG4gIHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEhpZXJhcmNoeVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkSGllcmFyY2h5V2lkZ2V0KHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiIGdsb2JhbFN0eWxlcz17ZmFsc2V9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxIaWVyYXJjaHlXaWRnZXRcbiAgICAgICAgICBhcGlVcmw9e3Byb3BzLmFwaVVybH1cbiAgICAgICAgICBhcGlLZXk9e3Byb3BzLmFwaUtleX1cbiAgICAgICAgICBiYWNrZW5kVHlwZT17cHJvcHMuYmFja2VuZFR5cGV9XG4gICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzPXtwcm9wcy5pbmNsdWRlT2Jzb2xldGVFbnRpdGllc31cbiAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICBwcmVmZXJyZWRSb290cz17cHJvcHMucHJlZmVycmVkUm9vdHN9XG4gICAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlcz17cHJvcHMua2VlcEV4cGFuc2lvblN0YXRlc31cbiAgICAgICAgICBzaG93U2libGluZ3NPbkluaXQ9e3Byb3BzLnNob3dTaWJsaW5nc09uSW5pdH1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgSGllcmFyY2h5V2lkZ2V0LCBjcmVhdGVIaWVyYXJjaHkgfTtcbiIsICJpbXBvcnQgYXhpb3MsIHsgQXhpb3NJbnN0YW5jZSwgQXhpb3NSZXF1ZXN0Q29uZmlnIH0gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQge1xuICBCdWlsZEhpZXJhcmNoeVByb3BzLFxuICBIaWVyYXJjaHlCdWlsZGVyLFxuICBIaWVyYXJjaHlJcmlQcm9wLFxuICBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wcyxcbn0gZnJvbSBcIi4vSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHtcbiAgSGllcmFyY2h5LFxuICBQYXJlbnRDaGlsZFJlbGF0aW9uLFxuICBUcmVlTm9kZSxcbn0gZnJvbSBcIi4uL21vZGVsL2ludGVyZmFjZXMvSGllcmFyY2h5XCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IHsgRW50aXR5RGF0YSB9IGZyb20gXCIuLi9hcHAvdHlwZXNcIjtcblxudHlwZSBUb3BDb25jZXB0ID0ge1xuICB1cmk6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHRvcENvbmNlcHRPZj86IHN0cmluZztcbiAgaGFzQ2hpbGRyZW46IGJvb2xlYW47XG4gIG5vdGF0aW9uPzogc3RyaW5nO1xufTtcblxudHlwZSBMYWJlbEFuZFVyaUFuZENoaWxkcmVuID0ge1xuICB1cmk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaGFzQ2hpbGRyZW46IGJvb2xlYW47XG4gIG5vdGF0aW9uPzogc3RyaW5nO1xufTtcblxudHlwZSBIaWVyYXJjaHlSZXN1bHQgPSB7XG4gIHVyaTogc3RyaW5nO1xuICBwcmVmTGFiZWw6IHN0cmluZztcbiAgdG9wPzogc3RyaW5nO1xuICBicm9hZGVyPzogc3RyaW5nW107XG4gIG5hcnJvd2VyPzogTGFiZWxBbmRVcmlBbmRDaGlsZHJlbltdO1xufTtcblxudHlwZSBQcmVmQW5kVXJpQW5kQ2hpbGRyZW4gPSB7XG4gIHVyaTogc3RyaW5nO1xuICBwcmVmTGFiZWw6IHN0cmluZztcbiAgaGFzQ2hpbGRyZW46IGJvb2xlYW47XG4gIG5vdGF0aW9uPzogc3RyaW5nO1xufTtcblxuYWJzdHJhY3QgY2xhc3MgU2tvc0VudGl0eURhdGFCdWlsZGVyIHtcbiAgc3RhdGljIGZyb21Ub3BDb25jZXB0KG9iajogVG9wQ29uY2VwdCk6IEVudGl0eURhdGEge1xuICAgIHJldHVybiB7XG4gICAgICBpcmk6IG9iai51cmksXG4gICAgICBsYWJlbDogb2JqLmxhYmVsLFxuICAgICAgaGFzQ2hpbGRyZW46IG9iai5oYXNDaGlsZHJlbixcbiAgICAgIHBhcmVudHM6IFtdLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZnJvbUhpZXJhcmNoeVJlc3VsdChvYmo6IEhpZXJhcmNoeVJlc3VsdCk6IEVudGl0eURhdGEge1xuICAgIHJldHVybiB7XG4gICAgICBpcmk6IG9iai51cmksXG4gICAgICBsYWJlbDogb2JqLnByZWZMYWJlbCxcbiAgICAgIGhhc0NoaWxkcmVuOiBvYmoubmFycm93ZXIgIT0gdW5kZWZpbmVkICYmIG9iai5uYXJyb3dlci5sZW5ndGggPiAwLFxuICAgICAgcGFyZW50czogUmVpZmllZC5mcm9tSnNvbihvYmouYnJvYWRlciksXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUHJlZkFuZFVyaUFuZENoaWxkcmVuKFxuICAgIG9iajogUHJlZkFuZFVyaUFuZENoaWxkcmVuLFxuICAgIHBhcmVudHM/OiBzdHJpbmdbXVxuICApOiBFbnRpdHlEYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXJpOiBvYmoudXJpLFxuICAgICAgbGFiZWw6IG9iai5wcmVmTGFiZWwsXG4gICAgICBoYXNDaGlsZHJlbjogb2JqLmhhc0NoaWxkcmVuLFxuICAgICAgcGFyZW50czogUmVpZmllZC5mcm9tSnNvbihwYXJlbnRzKSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZyb21MYWJlbEFuZFVyaUFuZENoaWxkcmVuKFxuICAgIG9iajogTGFiZWxBbmRVcmlBbmRDaGlsZHJlbixcbiAgICBwYXJlbnRzPzogc3RyaW5nW11cbiAgKTogRW50aXR5RGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlyaTogb2JqLnVyaSxcbiAgICAgIGxhYmVsOiBvYmoubGFiZWwsXG4gICAgICBoYXNDaGlsZHJlbjogb2JqLmhhc0NoaWxkcmVuLFxuICAgICAgcGFyZW50czogUmVpZmllZC5mcm9tSnNvbihwYXJlbnRzKSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTa29zQXBpIGltcGxlbWVudHMgSGllcmFyY2h5QnVpbGRlciB7XG4gIHByaXZhdGUgYXhpb3NJbnN0YW5jZTogQXhpb3NJbnN0YW5jZTtcblxuICBjb25zdHJ1Y3RvcihhcGk6IHN0cmluZykge1xuICAgIHRoaXMuYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgICBiYXNlVVJMOiBhcGksXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIC8vIENvbnRlbnRfVHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsIC8vIGxlYWRzIHRvIHByZWZsaWdodCBlcnJvclxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbWFrZUNhbGwoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWc8bmV2ZXI+IHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldCh1cmwsIGNvbmZpZykpLmRhdGE7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYnVpbGRIaWVyYXJjaHlXaXRoSXJpKFxuICAgIHByb3BzOiBCdWlsZEhpZXJhcmNoeVByb3BzICYgSGllcmFyY2h5SXJpUHJvcFxuICApOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuICAgIGNvbnN0IHsgaXJpLCBvbnRvbG9neUlkLCBzaG93U2libGluZ3NPbkluaXQgfSA9IHByb3BzO1xuXG4gICAgaWYgKCFvbnRvbG9neUlkKVxuICAgICAgdGhyb3cgRXJyb3IoXCJvbnRvbG9neUlkIGhhcyB0byBiZSBzcGVjaWZpZWQgZm9yIFNLT1MgQVBJLlwiKTtcblxuICAgIGNvbnN0IHJvb3RFbnRpdGllczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPiA9IG5ldyBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICBQYXJlbnRDaGlsZFJlbGF0aW9uW11cbiAgICA+KCk7XG4gICAgY29uc3QgZW50aXRpZXNEYXRhOiBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhPiA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhPigpO1xuICAgIGNvbnN0IGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBvbkluaXRpYWxQYXRoOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBvbmx5IHVzZWQgaWYgc2hvd1NpYmxpbmdzT25Jbml0ID09IGZhbHNlXG5cbiAgICBpZiAoaXJpKSB7XG4gICAgICBjb25zdCBicm9hZGVyVHJhbnNpdGl2ZTogSGllcmFyY2h5UmVzdWx0W10gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgICBgLyR7b250b2xvZ3lJZH0vaGllcmFyY2h5YCxcbiAgICAgICAgeyBwYXJhbXM6IHsgdXJpOiBpcmksIGxhbmc6IFwiZW5cIiwgZm9ybWF0OiBcImFwcGxpY2F0aW9uL2pzb25cIiB9IH1cbiAgICAgICkudGhlbigob2JqKSA9PlxuICAgICAgICBPYmplY3Qua2V5cyhvYmpbXCJicm9hZGVyVHJhbnNpdGl2ZVwiXSkubWFwKFxuICAgICAgICAgIChrZXkpID0+IG9ialtcImJyb2FkZXJUcmFuc2l0aXZlXCJdW2tleV1cbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgLy8gc3RvcmVzIGFsbCBlbnRpdGllcyBhcHBlYXJpbmcgaW4gYnJvYWRlclRyYW5zaXRpdmVcbiAgICAgIC8vY29uc3QgZW50aXRpZXM6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+ID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+KClcblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIGJyb2FkZXJUcmFuc2l0aXZlKSB7XG4gICAgICAgIGNvbnN0IG5vZGVEYXRhOiBFbnRpdHlEYXRhID1cbiAgICAgICAgICBTa29zRW50aXR5RGF0YUJ1aWxkZXIuZnJvbUhpZXJhcmNoeVJlc3VsdChub2RlKTtcblxuICAgICAgICBlbnRpdGllc0RhdGEuc2V0KG5vZGVEYXRhLmlyaSwgbm9kZURhdGEpO1xuICAgICAgICBpZiAobm9kZS50b3ApIHJvb3RFbnRpdGllcy5wdXNoKG5vZGVEYXRhLmlyaSk7XG5cbiAgICAgICAgaWYgKCFzaG93U2libGluZ3NPbkluaXQpIG9uSW5pdGlhbFBhdGguYWRkKG5vZGVEYXRhLmlyaSk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgYnJvYWRlclRyYW5zaXRpdmUpIHtcbiAgICAgICAgaWYgKG5vZGUubmFycm93ZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRyZW46IEVudGl0eURhdGFbXSA9IFtdO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2Ygbm9kZS5uYXJyb3dlcikge1xuICAgICAgICAgICAgbGV0IGNoaWxkTm9kZURhdGEgPSBlbnRpdGllc0RhdGEuZ2V0KGNoaWxkTm9kZS51cmkpO1xuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZURhdGEgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZURhdGEgPSBTa29zRW50aXR5RGF0YUJ1aWxkZXIuZnJvbUxhYmVsQW5kVXJpQW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgY2hpbGROb2RlLFxuICAgICAgICAgICAgICAgIFtub2RlLnVyaV1cbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBlbnRpdGllc0RhdGEuc2V0KGNoaWxkTm9kZURhdGEuaXJpLCBjaGlsZE5vZGVEYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgaWYgKCFjaGlsZE5vZGVEYXRhLnBhcmVudHMubWFwKChyKSA9PiByLnZhbHVlKS5pbmNsdWRlcyhub2RlLnVyaSkpXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZURhdGEucGFyZW50cykge1xuICAgICAgICAgICAgICAgICAgY2hpbGROb2RlRGF0YS5wYXJlbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIC4uLlJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihub2RlLnVyaSlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZE5vZGVEYXRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGlsZHJlbi5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgKGEubGFiZWwgfHwgYS5pcmkpLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCB8fCBiLmlyaSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KFxuICAgICAgICAgICAgbm9kZS51cmksXG4gICAgICAgICAgICBjaGlsZHJlbi5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgY2hpbGRJcmk6IGMuaXJpIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50LmFkZChub2RlLnVyaSk7IC8vIGluIHNrb3MsIGFsbCBjaGlsZHJlbiBhcmUgbG9hZGVkIGlmIGFueSBhcmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0b3Bjb25jZXB0czogVG9wQ29uY2VwdFtdID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChcbiAgICAgICAgYC8ke29udG9sb2d5SWR9L3RvcENvbmNlcHRzYCxcbiAgICAgICAgeyBwYXJhbXM6IHsgbGFuZzogXCJlblwiLCBmb3JtYXQ6IFwiYXBwbGljYXRpb24vanNvblwiIH0gfVxuICAgICAgKS50aGVuKChvYmopID0+IG9ialtcInRvcGNvbmNlcHRzXCJdKTtcblxuICAgICAgZm9yIChjb25zdCBjb25jZXB0IG9mIHRvcGNvbmNlcHRzKSB7XG4gICAgICAgIHJvb3RFbnRpdGllcy5wdXNoKGNvbmNlcHQudXJpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVUcmVlTm9kZShcbiAgICAgIGVudGl0eURhdGE6IEVudGl0eURhdGEsXG4gICAgICBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPlxuICAgICk6IFRyZWVOb2RlIHtcbiAgICAgIGN5Y2xlQ2hlY2suYWRkKGVudGl0eURhdGEuaXJpKTsgLy8gYWRkIGN1cnJlbnQgZW50aXR5IHRvIGN5Y2xlIGNoZWNrIHNldFxuXG4gICAgICBjb25zdCBub2RlID0gbmV3IFRyZWVOb2RlKGVudGl0eURhdGEpO1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnRDaGlsZFJlbGF0aW9ucy5nZXQoZW50aXR5RGF0YS5pcmkpIHx8IFtdO1xuXG4gICAgICBpZiAoIXNob3dTaWJsaW5nc09uSW5pdCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgICAgLy8gY3ljbGljIHRyZWUsIHNraXAgY3ljbGVcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEN5Y2xpYyB0cmVlIGF0IGVudGl0eSBcIiR7Y2hpbGQuY2hpbGRJcml9XCIuYCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjaGlsZERhdGEgPSBlbnRpdGllc0RhdGEuZ2V0KGNoaWxkLmNoaWxkSXJpKTtcbiAgICAgICAgICBpZiAoY2hpbGREYXRhICE9IHVuZGVmaW5lZCAmJiBvbkluaXRpYWxQYXRoLmhhcyhjaGlsZC5jaGlsZElyaSkpIHtcbiAgICAgICAgICAgIG5vZGUuYWRkQ2hpbGQoY3JlYXRlVHJlZU5vZGUoY2hpbGREYXRhLCBjeWNsZUNoZWNrKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgICAgLy8gY3ljbGljIHRyZWUsIHNraXAgY3ljbGVcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEN5Y2xpYyB0cmVlIGF0IGVudGl0eSBcIiR7Y2hpbGQuY2hpbGRJcml9XCIuYCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjaGlsZERhdGEgPSBlbnRpdGllc0RhdGEuZ2V0KGNoaWxkLmNoaWxkSXJpKTtcbiAgICAgICAgICBpZiAoY2hpbGREYXRhICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgIG5vZGUuYWRkQ2hpbGQoY3JlYXRlVHJlZU5vZGUoY2hpbGREYXRhLCBjeWNsZUNoZWNrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoID4gMCkgbm9kZS5leHBhbmRlZCA9IHRydWU7XG5cbiAgICAgIGN5Y2xlQ2hlY2suZGVsZXRlKGVudGl0eURhdGEuaXJpKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGNvbnN0IGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIENvbnRhaW5zIGlyaXMgb2YgYWxsIGVudGl0aWVzIHRoYXQgaGF2ZSBvY2N1cnJlZCB3aXRoaW4gdGhlIGN1cnJlbnQgcmVjdXJzaW9uIGJyYW5jaC4gSXMgdXNlZCB0byBjaGVjayBmb3IgY3ljbGVzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgY29uc3Qgcm9vdE5vZGVzOiBUcmVlTm9kZVtdID0gcm9vdEVudGl0aWVzXG4gICAgICAubWFwKChyb290RW50aXR5KSA9PlxuICAgICAgICBjcmVhdGVUcmVlTm9kZShlbnRpdGllc0RhdGEuZ2V0KHJvb3RFbnRpdHkpISwgY3ljbGVDaGVjaylcbiAgICAgIClcbiAgICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgICAoYS5lbnRpdHlEYXRhLmxhYmVsIHx8IGEuZW50aXR5RGF0YS5pcmkpLmxvY2FsZUNvbXBhcmUoXG4gICAgICAgICAgYi5lbnRpdHlEYXRhLmxhYmVsIHx8IGIuZW50aXR5RGF0YS5pcmlcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBhbGxDaGlsZHJlblByZXNlbnQsXG4gICAgICByb290czogcm9vdE5vZGVzLFxuICAgICAgYXBpOiBuZXcgU2tvc0FwaSh0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0VXJpKCkpLFxuICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgIG1haW5FbnRpdHlJcmk6IGlyaSxcbiAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IHByb3BzLmtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEhpZXJhcmNoeUNoaWxkcmVuKFxuICAgIHByb3BzOiBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wc1xuICApOiBQcm9taXNlPEVudGl0eURhdGFbXT4ge1xuICAgIGNvbnN0IHsgbm9kZVRvRXhwYW5kLCBvbnRvbG9neUlkIH0gPSBwcm9wcztcblxuICAgIGNvbnN0IG5hcnJvd2VyOiBQcmVmQW5kVXJpQW5kQ2hpbGRyZW5bXSA9IChcbiAgICAgIGF3YWl0IHRoaXMubWFrZUNhbGwoYC8ke29udG9sb2d5SWR9L2NoaWxkcmVuYCwge1xuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICB1cmk6IG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSxcbiAgICAgICAgICBsYW5nOiBcImVuXCIsXG4gICAgICAgICAgZm9ybWF0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKVtcIm5hcnJvd2VyXCJdO1xuXG4gICAgcmV0dXJuIG5hcnJvd2VyLm1hcCgob2JqKSA9PlxuICAgICAgU2tvc0VudGl0eURhdGFCdWlsZGVyLmZyb21QcmVmQW5kVXJpQW5kQ2hpbGRyZW4ob2JqLCBbXG4gICAgICAgIG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSxcbiAgICAgIF0pXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIEJ1aWxkSGllcmFyY2h5UHJvcHMsXG4gIEhpZXJhcmNoeUJ1aWxkZXIsXG4gIEhpZXJhcmNoeUlyaVByb3AsXG4gIExvYWRIaWVyYXJjaHlDaGlsZHJlblByb3BzLFxufSBmcm9tIFwiLi9IaWVyYXJjaHlCdWlsZGVyXCI7XG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NJbnN0YW5jZSwgQXhpb3NSZXF1ZXN0Q29uZmlnIH0gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQge1xuICBIaWVyYXJjaHksXG4gIFBhcmVudENoaWxkUmVsYXRpb24sXG4gIFRyZWVOb2RlLFxufSBmcm9tIFwiLi4vbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHlcIjtcbmltcG9ydCB7IHBsdXJhbGl6ZVR5cGUgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IEVudGl0eURhdGEgfSBmcm9tIFwiLi4vYXBwL3R5cGVzXCI7XG5cbnR5cGUgSGllcmFyY2h5Tm9kZSA9IHtcbiAgcHJlZkxhYmVsOiBzdHJpbmc7XG4gIGhhc0NoaWxkcmVuOiBib29sZWFuO1xuICBjaGlsZHJlbjogSGllcmFyY2h5Tm9kZVtdO1xuICBvYnNvbGV0ZTogYm9vbGVhbjsgLy8gVE9ETzogdXNlIHRoaXMgdG8gZW5hYmxlIHNob3dpbmcgb2Jzb2xldGVUZXJtcz9cbiAgW1wiQGlkXCJdOiBzdHJpbmc7XG4gIFtcIkB0eXBlXCJdOiBzdHJpbmc7XG4gIC8vIGxpbmtzOiBvYmplY3QgLSBub3QgbmVlZGVkIGhlcmVcbiAgW1wiQGNvbnRleHRcIl06IHtcbiAgICBbXCJAdm9jYWJcIl06IHN0cmluZztcbiAgICBwcmVmTGFiZWw6IHN0cmluZztcbiAgICBvYnNvbGV0ZTogc3RyaW5nO1xuICAgIFtcIkBsYW5ndWFnZVwiXTogc3RyaW5nO1xuICB9O1xufTtcblxuZnVuY3Rpb24gSGllcmFyY2h5Tm9kZVRvRW50aXR5RGF0YShoaWVyYXJjaHlOb2RlOiBIaWVyYXJjaHlOb2RlKTogRW50aXR5RGF0YSB7XG4gIHJldHVybiB7XG4gICAgaXJpOiBoaWVyYXJjaHlOb2RlW1wiQGlkXCJdLFxuICAgIGxhYmVsOiBoaWVyYXJjaHlOb2RlW1wicHJlZkxhYmVsXCJdLFxuICAgIGhhc0NoaWxkcmVuOiBoaWVyYXJjaHlOb2RlW1wiaGFzQ2hpbGRyZW5cIl0sXG4gICAgcGFyZW50czogW10sXG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBPbnRvUG9ydGFsQXBpIGltcGxlbWVudHMgSGllcmFyY2h5QnVpbGRlciB7XG4gIHByaXZhdGUgYXhpb3NJbnN0YW5jZTogQXhpb3NJbnN0YW5jZTtcbiAgcHJpdmF0ZSBhcGlLZXk6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihhcGk6IHN0cmluZywgYXBpS2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLmF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgYmFzZVVSTDogYXBpLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAvLyBDb250ZW50X1R5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLCAvLyBsZWFkcyB0byBwcmVmbGlnaHQgZXJyb3JcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5hcGlLZXkgPSBhcGlLZXk7XG4gICAgdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgoY29uZmlnKSA9PiB7XG4gICAgICBjb25maWcucGFyYW1zID0gY29uZmlnLnBhcmFtcyB8fCB7fTtcblxuICAgICAgLy8gZGVmYXVsdCBwYXJhbXNcbiAgICAgIGNvbmZpZy5wYXJhbXNbXCJhcGlrZXlcIl0gPSB0aGlzLmFwaUtleTtcbiAgICAgIGNvbmZpZy5wYXJhbXNbXCJmb3JtYXRcIl0gPSBcImpzb25cIjtcblxuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbWFrZUNhbGwodXJsOiBzdHJpbmcsIGNvbmZpZz86IEF4aW9zUmVxdWVzdENvbmZpZzxuZXZlcj4pIHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQodXJsLCBjb25maWcpKS5kYXRhO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkSGllcmFyY2h5V2l0aElyaShcbiAgICBwcm9wczogQnVpbGRIaWVyYXJjaHlQcm9wcyAmIEhpZXJhcmNoeUlyaVByb3BcbiAgKTogUHJvbWlzZTxIaWVyYXJjaHk+IHtcbiAgICBjb25zdCB7IGlyaSwgb250b2xvZ3lJZCwgZW50aXR5VHlwZSwgc2hvd1NpYmxpbmdzT25Jbml0IH0gPSBwcm9wcztcblxuICAgIGlmICghb250b2xvZ3lJZClcbiAgICAgIHRocm93IEVycm9yKFwib250b2xvZ3lJZCBoYXMgdG8gYmUgc3BlY2lmaWVkIGZvciBPbnRvUG9ydGFsIEFQSS5cIik7XG4gICAgaWYgKCFlbnRpdHlUeXBlKVxuICAgICAgdGhyb3cgRXJyb3IoXCJlbnRpdHlUeXBlIGhhcyB0byBiZSBzcGVjaWZpZWQgZm9yIE9udG9Qb3J0YWwgQVBJLlwiKTtcblxuICAgIGNvbnN0IHJvb3RFbnRpdGllczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+ID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+KCk7XG4gICAgY29uc3QgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4gPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgUGFyZW50Q2hpbGRSZWxhdGlvbltdXG4gICAgPigpO1xuICAgIGNvbnN0IGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBvbkluaXRpYWxQYXRoOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBvbmx5IHVzZWQgaWYgc2hvd1NpYmxpbmdzT25Jbml0ID09IGZhbHNlXG5cbiAgICBmdW5jdGlvbiBidWlsZFJlbGF0aW9ucyhjdXJyTm9kZTogSGllcmFyY2h5Tm9kZSkge1xuICAgICAgZW50aXRpZXNEYXRhLnNldChjdXJyTm9kZVtcIkBpZFwiXSwgSGllcmFyY2h5Tm9kZVRvRW50aXR5RGF0YShjdXJyTm9kZSkpO1xuICAgICAgaWYgKGN1cnJOb2RlLmhhc0NoaWxkcmVuICYmIGN1cnJOb2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KFxuICAgICAgICAgIGN1cnJOb2RlW1wiQGlkXCJdLFxuICAgICAgICAgIGN1cnJOb2RlLmNoaWxkcmVuLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgY2hpbGRJcmk6IGNbXCJAaWRcIl0gfTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGFsbENoaWxkcmVuUHJlc2VudC5hZGQoY3Vyck5vZGVbXCJAaWRcIl0pO1xuICAgICAgICBvbkluaXRpYWxQYXRoLmFkZChjdXJyTm9kZVtcIkBpZFwiXSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjdXJyTm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgIGJ1aWxkUmVsYXRpb25zKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpcmkpIHtcbiAgICAgIC8vIFRPRE86IHByb3BlcnR5IHdoaWNoIGlzIGNoaWxkIG9mIG11bHRpcGxlIHByb3BlcnRpZXMgb25seSBpcyByZXR1cm5lZCBpbiBvbmUgcGFyZW50IGluIC90cmVlIHF1ZXJ5ICgtPiBkbyBpdCByaWdodCBtYW51YWxseT8pIChlLmcuOiBodHRwOi8vc3dlZXRvbnRvbG9neS5uZXQvcmVsYVRpbWUvaGFzTkhUaW1lIC0+IGhhcyBtb3JlIHRoYW4gb25lIHBhcmVudCwgYnV0IGlzIG9ubHkgc2hvd24gaW4gb25lIHBhcmVudCBpbiAvdHJlZSlcbiAgICAgIGNvbnN0IGFwaV90cmVlOiBIaWVyYXJjaHlOb2RlW10gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgICBgL29udG9sb2dpZXMvJHtvbnRvbG9neUlkLnRvVXBwZXJDYXNlKCl9LyR7cGx1cmFsaXplVHlwZShcbiAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlyaSl9L3RyZWVgLFxuICAgICAgICB7IHBhcmFtczogeyBpbmNsdWRlOiBcIkBpZCxwcmVmTGFiZWwsaGFzQ2hpbGRyZW4sY2hpbGRyZW5cIiB9IH1cbiAgICAgICk7XG5cbiAgICAgIGZvciAoY29uc3Qgcm9vdE5vZGUgb2YgYXBpX3RyZWUpIHtcbiAgICAgICAgcm9vdEVudGl0aWVzLnB1c2gocm9vdE5vZGVbXCJAaWRcIl0pO1xuICAgICAgICBvbkluaXRpYWxQYXRoLmFkZChyb290Tm9kZVtcIkBpZFwiXSk7XG4gICAgICAgIGJ1aWxkUmVsYXRpb25zKHJvb3ROb2RlKTtcbiAgICAgIH1cbiAgICAgIG9uSW5pdGlhbFBhdGguYWRkKGlyaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJvb3RzOiBIaWVyYXJjaHlOb2RlW10gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgICBgL29udG9sb2dpZXMvJHtvbnRvbG9neUlkLnRvVXBwZXJDYXNlKCl9LyR7cGx1cmFsaXplVHlwZShcbiAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICl9L3Jvb3RzYCxcbiAgICAgICAgeyBwYXJhbXM6IHsgaW5jbHVkZTogXCJAaWQscHJlZkxhYmVsLGhhc0NoaWxkcmVuXCIgfSB9XG4gICAgICApO1xuXG4gICAgICBmb3IgKGNvbnN0IHJvb3ROb2RlIG9mIHJvb3RzKSB7XG4gICAgICAgIHJvb3RFbnRpdGllcy5wdXNoKHJvb3ROb2RlW1wiQGlkXCJdKTtcbiAgICAgICAgb25Jbml0aWFsUGF0aC5hZGQocm9vdE5vZGVbXCJAaWRcIl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVRyZWVOb2RlKFxuICAgICAgZW50aXR5RGF0YTogRW50aXR5RGF0YSxcbiAgICAgIGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+XG4gICAgKTogVHJlZU5vZGUge1xuICAgICAgY3ljbGVDaGVjay5hZGQoZW50aXR5RGF0YS5pcmkpOyAvLyBhZGQgY3VycmVudCBlbnRpdHkgdG8gY3ljbGUgY2hlY2sgc2V0XG5cbiAgICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJlZU5vZGUoZW50aXR5RGF0YSk7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkUmVsYXRpb25zLmdldChlbnRpdHlEYXRhLmlyaSkgfHwgW107XG5cbiAgICAgIGlmICghc2hvd1NpYmxpbmdzT25Jbml0KSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgICAvLyBjeWNsaWMgdHJlZSwgc2tpcCBjeWNsZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgaWYgKG9uSW5pdGlhbFBhdGguaGFzKGNoaWxkLmNoaWxkSXJpKSlcbiAgICAgICAgICAgIG5vZGUuYWRkQ2hpbGQoXG4gICAgICAgICAgICAgIGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpISwgY3ljbGVDaGVjaylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgICAvLyBjeWNsaWMgdHJlZSwgc2tpcCBjeWNsZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgbm9kZS5hZGRDaGlsZChcbiAgICAgICAgICAgIGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpISwgY3ljbGVDaGVjaylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLmxvYWRlZENoaWxkcmVuLmxlbmd0aCA+IDApIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgICBjeWNsZUNoZWNrLmRlbGV0ZShlbnRpdHlEYXRhLmlyaSk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBjb25zdCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBDb250YWlucyBpcmlzIG9mIGFsbCBlbnRpdGllcyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBicmFuY2guIElzIHVzZWQgdG8gY2hlY2sgZm9yIGN5Y2xlcy5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIGNvbnN0IHJvb3ROb2RlczogVHJlZU5vZGVbXSA9IHJvb3RFbnRpdGllc1xuICAgICAgLm1hcCgocm9vdEVudGl0eSkgPT5cbiAgICAgICAgY3JlYXRlVHJlZU5vZGUoZW50aXRpZXNEYXRhLmdldChyb290RW50aXR5KSEsIGN5Y2xlQ2hlY2spXG4gICAgICApXG4gICAgICAuc29ydCgoYSwgYikgPT5cbiAgICAgICAgKGEuZW50aXR5RGF0YS5sYWJlbCB8fCBhLmVudGl0eURhdGEuaXJpKS5sb2NhbGVDb21wYXJlKFxuICAgICAgICAgIGIuZW50aXR5RGF0YS5sYWJlbCB8fCBiLmVudGl0eURhdGEuaXJpXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICByZXR1cm4gbmV3IEhpZXJhcmNoeSh7XG4gICAgICBwYXJlbnRDaGlsZFJlbGF0aW9uczogcGFyZW50Q2hpbGRSZWxhdGlvbnMsXG4gICAgICBlbnRpdGllc0RhdGE6IGVudGl0aWVzRGF0YSxcbiAgICAgIGFsbENoaWxkcmVuUHJlc2VudDogYWxsQ2hpbGRyZW5QcmVzZW50LFxuICAgICAgcm9vdHM6IHJvb3ROb2RlcyxcbiAgICAgIGFwaTogbmV3IE9udG9Qb3J0YWxBcGkodGhpcy5heGlvc0luc3RhbmNlLmdldFVyaSgpLCB0aGlzLmFwaUtleSksXG4gICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgbWFpbkVudGl0eUlyaTogaXJpLFxuICAgICAga2VlcEV4cGFuc2lvblN0YXRlczogcHJvcHMua2VlcEV4cGFuc2lvblN0YXRlcyxcbiAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEhpZXJhcmNoeUNoaWxkcmVuKFxuICAgIHByb3BzOiBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wc1xuICApOiBQcm9taXNlPEVudGl0eURhdGFbXT4ge1xuICAgIGNvbnN0IHsgbm9kZVRvRXhwYW5kLCBvbnRvbG9neUlkLCBlbnRpdHlUeXBlIH0gPSBwcm9wcztcblxuICAgIGlmIChlbnRpdHlUeXBlID09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcImVudGl0eVR5cGUgaGFzIHRvIGJlIHByb3ZpZGVkIHRvIGxvYWQgY2hpbGRyZW4gaW4gYW4gT250b1BvcnRhbCBoaWVyYXJjaHkuXCJcbiAgICAgICk7XG5cbiAgICBjb25zdCBjaGlsZHJlbjogSGllcmFyY2h5Tm9kZVtdID0gKFxuICAgICAgYXdhaXQgdGhpcy5tYWtlQ2FsbChcbiAgICAgICAgYC9vbnRvbG9naWVzLyR7b250b2xvZ3lJZC50b1VwcGVyQ2FzZSgpfS8ke3BsdXJhbGl6ZVR5cGUoXG4gICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApfS8ke2VuY29kZVVSSUNvbXBvbmVudChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpfS9jaGlsZHJlbmAsXG4gICAgICAgIHsgcGFyYW1zOiB7IGluY2x1ZGU6IFwiQGlkLHByZWZMYWJlbCxoYXNDaGlsZHJlblwiIH0gfVxuICAgICAgKVxuICAgIClbXCJjb2xsZWN0aW9uXCJdO1xuXG4gICAgcmV0dXJuIGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IEhpZXJhcmNoeU5vZGVUb0VudGl0eURhdGEoY2hpbGQpKTtcbiAgfVxufVxuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnkgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBpc0VudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQocHJvcHM6IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5LCBjbGFzc05hbWUgfSA9XG4gICAgcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgZXJyb3IgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXG4gICAgICBcImFsdGVybmF0aXZlTmFtZVRhYlwiLFxuICAgICAgYXBpLFxuICAgICAgcGFyYW1ldGVyLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICAgIGlyaSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICB1c2VMZWdhY3ksXG4gICAgXSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldEVudGl0eU9iamVjdChcbiAgICAgICAgaXJpLFxuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgIHVzZUxlZ2FjeVxuICAgICAgKTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uXG4gICAgICBzeW5vbnltcz17XG4gICAgICAgIGRhdGFcbiAgICAgICAgICA/IGlzRW50aXR5KGRhdGEpXG4gICAgICAgICAgICA/IGRhdGEuZ2V0U3lub255bXMoKS5tYXAoKHN5bm9ueW0pID0+IHN5bm9ueW0udmFsdWUpXG4gICAgICAgICAgICA6IFtdXG4gICAgICAgICAgOiBbXVxuICAgICAgfVxuICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIoXG4gIHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEFsdGVybmF0aXZlTmFtZVRhYldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0KHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiIGdsb2JhbFN0eWxlcz17ZmFsc2V9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRcbiAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0LCBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IENyb3NzUmVmV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBpc0VudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9Dcm9zc1JlZlRhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL1JlaWZpZWRcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIENyb3NzUmVmVGFiV2lkZ2V0KHByb3BzOiBDcm9zc1JlZldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5LCBjbGFzc05hbWUgfSA9XG4gICAgcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgZXJyb3IgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXCJjcm9zc1JlZlRhYlwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KFxuICAgICAgICBpcmksXG4gICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgdXNlTGVnYWN5XG4gICAgICApO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxDcm9zc1JlZlRhYlByZXNlbnRhdGlvblxuICAgICAgY3Jvc3NyZWZzPXtcbiAgICAgICAgZGF0YVxuICAgICAgICAgID8gaXNFbnRpdHkoZGF0YSlcbiAgICAgICAgICAgID8gUmVpZmllZC5mcm9tSnNvbihkYXRhLmdldENyb3NzUmVmZXJlbmNlcygpKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBbXVxuICAgICAgICAgIDogW11cbiAgICAgIH1cbiAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxuICAgICAgZXJyb3I9e2Vycm9yfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgLz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ3Jvc3NSZWZUYWIoXG4gIHByb3BzOiBDcm9zc1JlZldpZGdldFByb3BzLFxuICBjb250YWluZXI6IEVsZW1lbnQsXG4gIGNhbGxiYWNrPzogKCkgPT4gdm9pZFxuKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkQ3Jvc3NSZWZUYWJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZENyb3NzUmVmVGFiV2lkZ2V0KHByb3BzOiBDcm9zc1JlZldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCIgZ2xvYmFsU3R5bGVzPXtmYWxzZX0+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPENyb3NzUmVmVGFiV2lkZ2V0XG4gICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgIGNsYXNzTmFtZT17cHJvcHMuY2xhc3NOYW1lfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IENyb3NzUmVmVGFiV2lkZ2V0LCBjcmVhdGVDcm9zc1JlZlRhYiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgRXVpUHJvdmlkZXIgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgVGl0bGVXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGlzT250b2xvZ3kgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IFRpdGxlUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGl0bGVQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIFRpdGxlV2lkZ2V0KHByb3BzOiBUaXRsZVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpcmksXG4gICAgb250b2xvZ3lJZCxcbiAgICBhcGksXG4gICAgdGl0bGVUZXh0LFxuICAgIHRoaW5nVHlwZSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5LFxuICAgIGRlZmF1bHRWYWx1ZSxcbiAgICBjbGFzc05hbWUsXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nLCBpc1N1Y2Nlc3MsIGlzRXJyb3IsIGVycm9yIH0gPSB1c2VRdWVyeTxUaGluZz4oXG4gICAgW1widGl0bGVEYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCB0aGluZ1R5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldFRoaW5nT2JqZWN0KFxuICAgICAgICBpcmksXG4gICAgICAgIHRoaW5nVHlwZSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB1c2VMZWdhY3lcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFRpdGxlUHJlc2VudGF0aW9uXG4gICAgICB0aXRsZT17XG4gICAgICAgIGRhdGEgPyAoaXNPbnRvbG9neShkYXRhKSA/IGRhdGEuZ2V0TmFtZSgpIDogZGF0YS5nZXRMYWJlbCgpKSA6IG51bGxcbiAgICAgIH1cbiAgICAgIHRpdGxlVGV4dD17dGl0bGVUZXh0fVxuICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxuICAgICAgZXJyb3I9e2lzRXJyb3IgPyBlcnJvciA6IG51bGx9XG4gICAgLz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGl0bGUoXG4gIHByb3BzOiBUaXRsZVdpZGdldFByb3BzLFxuICBjb250YWluZXI6IEVsZW1lbnQsXG4gIGNhbGxiYWNrPzogKCkgPT4gdm9pZFxuKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkVGl0bGVXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFRpdGxlV2lkZ2V0KHByb3BzOiBUaXRsZVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCIgZ2xvYmFsU3R5bGVzPXtmYWxzZX0+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPFRpdGxlV2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgdGhpbmdUeXBlPXtwcm9wcy50aGluZ1R5cGV9XG4gICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICB0aXRsZVRleHQ9e3Byb3BzLnRpdGxlVGV4dH1cbiAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICBkZWZhdWx0VmFsdWU9e3Byb3BzLmRlZmF1bHRWYWx1ZX1cbiAgICAgICAgICBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBUaXRsZVdpZGdldCwgY3JlYXRlVGl0bGUgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IFRpdGxlUHJlc2VudGF0aW9uUHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uL3N0eWxlL3RzNG5mZGlTdHlsZXMvdHM0bmZkaVRpdGxlU3R5bGUuY3NzXCI7XG5cbmZ1bmN0aW9uIFRpdGxlUHJlc2VudGF0aW9uKHByb3BzOiBUaXRsZVByZXNlbnRhdGlvblByb3BzKSB7XG4gIGNvbnN0IHsgdGl0bGUsIHRpdGxlVGV4dCwgaXNMb2FkaW5nLCBlcnJvciwgZGVmYXVsdFZhbHVlLCBjbGFzc05hbWUgfSA9IHByb3BzO1xuICBjb25zdCBmaW5hbENsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcInRzNG5mZGktdGl0bGUtc3R5bGVcIjtcblxuICBjb25zdCByZW5kZXJDb250ZW50ID0gKCkgPT4ge1xuICAgIGlmICh0aXRsZVRleHQpIHtcbiAgICAgIHJldHVybiA8RXVpVGV4dD57dGl0bGVUZXh0fTwvRXVpVGV4dD47XG4gICAgfVxuXG4gICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSA/IChcbiAgICAgICAgPEV1aVRleHQ+e2RlZmF1bHRWYWx1ZX08L0V1aVRleHQ+XG4gICAgICApIDogKFxuICAgICAgICA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgPyAoXG4gICAgICAgIDxFdWlUZXh0PntkZWZhdWx0VmFsdWV9PC9FdWlUZXh0PlxuICAgICAgKSA6IChcbiAgICAgICAgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJ0aXRsZVwiKX08L0V1aVRleHQ+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiA8RXVpVGV4dD57dGl0bGV9PC9FdWlUZXh0PjtcbiAgfTtcblxuICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfT57cmVuZGVyQ29udGVudCgpfTwvZGl2Pjtcbn1cblxuZXhwb3J0IHsgVGl0bGVQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBFdWlGbGV4R3JvdXAsXG4gIEV1aUZsZXhJdGVtLFxuICBFdWlMb2FkaW5nU3Bpbm5lcixcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aVRleHQsXG4gIEV1aUxpbmssXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IElyaVdpZGdldCB9IGZyb20gXCIuL0lyaVdpZGdldFwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgTWV0YWRhdGFXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQnJlYWRjcnVtYldpZGdldC9CcmVhZGNydW1iUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9UYWJXaWRnZXQvVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBEZXNjcmlwdGlvblByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0Rlc2NyaXB0aW9uV2lkZ2V0L0Rlc2NyaXB0aW9uUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBUaXRsZVByZXNlbnRhdGlvbiB9IGZyb20gXCIuL1RpdGxlV2lkZ2V0L1RpdGxlUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IEVudGl0eVR5cGVOYW1lLCBpc0VudGl0eSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7XG4gIGNyZWF0ZU1vZGVsT2JqZWN0LFxuICBnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04sXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9Nb2RlbE9iamVjdENyZWF0b3JcIjtcbmltcG9ydCB7IEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vRW50aXR5T250b0xpc3RXaWRnZXQvRW50aXR5T250b0xpc3RQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IEVudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb25cIjtcbmltcG9ydCBcIi4uLy4uLy4uL3N0eWxlL3Rzc1N0eWxlcy5jc3NcIjtcbmltcG9ydCBcIi4uLy4uLy4uL3N0eWxlL3RzNG5mZGlTdHlsZXMvdHM0bmZkaU1ldGFkYXRhU3R5bGUuY3NzXCI7XG5cbnR5cGUgTWV0YWRhdGFJbmZvID0ge1xuICBlbnRpdHk6IEVudGl0eTtcbiAgb250b0xpc3Q6IHN0cmluZ1tdO1xuICBkZWZpbmVkQnk6IHN0cmluZ1tdO1xufTtcblxuZnVuY3Rpb24gTWV0YWRhdGFXaWRnZXQocHJvcHM6IE1ldGFkYXRhV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlyaSxcbiAgICBhcGksXG4gICAgb250b2xvZ3lJZCxcbiAgICBlbnRpdHlUeXBlLFxuICAgIHBhcmFtZXRlcixcbiAgICB1c2VMZWdhY3ksXG4gICAgb25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgaGllcmFyY2h5VGFiLFxuICAgIGNyb3NzUmVmVGFiLFxuICAgIHRlcm1pbm9sb2d5SW5mb1RhYixcbiAgICBhbHROYW1lc1RhYixcbiAgICB0ZXJtTGluayxcbiAgICBjbGFzc05hbWUsXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuICBjb25zdCBmaW5hbENsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcInRzNG5mZGktbWV0YWRhdGEtc3R5bGVcIjtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNTdWNjZXNzLCBpc0Vycm9yLCBlcnJvciB9ID0gdXNlUXVlcnk8TWV0YWRhdGFJbmZvPihcbiAgICBbXCJtZXRhZGF0YVwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBlbnRpdHk6IEVudGl0eSwgb250b0xpc3Q6IHN0cmluZ1tdLCBkZWZpbmVkQnk6IHN0cmluZ1tdO1xuICAgICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgICBjb25zdCBlbWJlZGRlZCA9IChcbiAgICAgICAgICBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5UmVzcG9uc2UoXG4gICAgICAgICAgICBpcmksXG4gICAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICAgKVxuICAgICAgICApW1wiX2VtYmVkZGVkXCJdO1xuICAgICAgICBlbnRpdHkgPSBjcmVhdGVNb2RlbE9iamVjdCh7XG4gICAgICAgICAgX2VtYmVkZGVkOiB7XG4gICAgICAgICAgICBbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXTogZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKFxuICAgICAgICAgICAgICBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dLFxuICAgICAgICAgICAgICB1c2VMZWdhY3ksXG4gICAgICAgICAgICAgIG9udG9sb2d5SWRcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSkgYXMgRW50aXR5O1xuICAgICAgICBvbnRvTGlzdCA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV0ubWFwKFxuICAgICAgICAgIChlbnRpdHlJbk9udG9sb2d5OiBhbnkpID0+IGVudGl0eUluT250b2xvZ3lbXCJvbnRvbG9neV9uYW1lXCJdXG4gICAgICAgICk7XG4gICAgICAgIGRlZmluZWRCeSA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1cbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKGVudGl0eUluT250b2xvZ3k6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3k6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW50aXR5ID0gYXdhaXQgb2xzQXBpLmdldEVudGl0eU9iamVjdChcbiAgICAgICAgICBpcmksXG4gICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgKTtcbiAgICAgICAgb250b0xpc3QgPSBlbnRpdHkuZ2V0QXBwZWFyc0luKCk7XG4gICAgICAgIGRlZmluZWRCeSA9IGVudGl0eS5nZXREZWZpbmVkQnkoKTtcbiAgICAgIH1cblxuICAgICAgZGVmaW5lZEJ5ID0gZGVmaW5lZEJ5XG4gICAgICAgIC5maWx0ZXIoKG9udG86IHN0cmluZykgPT4gb250byAhPSBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpKVxuICAgICAgICAuc29ydCgpO1xuICAgICAgb250b0xpc3QgPSBvbnRvTGlzdFxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChvbnRvOiBzdHJpbmcpID0+XG4gICAgICAgICAgICBvbnRvICE9IGVudGl0eS5nZXRPbnRvbG9neUlkKCkgJiYgIWRlZmluZWRCeS5pbmNsdWRlcyhvbnRvKVxuICAgICAgICApXG4gICAgICAgIC5zb3J0KCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudGl0eTogZW50aXR5LFxuICAgICAgICBvbnRvTGlzdDogb250b0xpc3QsXG4gICAgICAgIGRlZmluZWRCeTogZGVmaW5lZEJ5LFxuICAgICAgfSBhcyBNZXRhZGF0YUluZm87XG4gICAgfVxuICApO1xuXG4gIGZ1bmN0aW9uIHJlbmRlcihkYXRhOiBNZXRhZGF0YUluZm8pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfT5cbiAgICAgICAgPEV1aUZsZXhHcm91cCBkaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9IHN0eWxlPXt7IG1heFdpZHRoOiA2MDAgfX0+XG4gICAgICAgICAgICB7dGVybUxpbmsgPyAoXG4gICAgICAgICAgICAgIDxFdWlMaW5rIGhyZWY9e3Rlcm1MaW5rfSB0YXJnZXQ9XCJfYmxhbmtcIiBleHRlcm5hbD17ZmFsc2V9PlxuICAgICAgICAgICAgICAgIDxUaXRsZVByZXNlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgdGl0bGU9e2RhdGEuZW50aXR5LmdldExhYmVsKCl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2ZpbmFsQ2xhc3NOYW1lfS10aXRsZWB9XG4gICAgICAgICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIGVycm9yPXtlcnJvcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0V1aUxpbms+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VGl0bGVQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICB0aXRsZT17ZGF0YS5lbnRpdHkuZ2V0TGFiZWwoKX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2ZpbmFsQ2xhc3NOYW1lfS10aXRsZWB9XG4gICAgICAgICAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgZXJyb3I9e2Vycm9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPEJyZWFkY3J1bWJQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgb250b2xvZ3lJZD17b250b2xvZ3lJZCB8fCBkYXRhLmVudGl0eS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgICAgICAgb250b2xvZ3lOYW1lPXtkYXRhLmVudGl0eS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgICAgICAgc2hvcnRGb3JtPXtkYXRhLmVudGl0eS5nZXRTaG9ydEZvcm0oKX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2ZpbmFsQ2xhc3NOYW1lfS1icmVhZGNydW1iYH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxFdWlGbGV4R3JvdXAgZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfSBzdHlsZT17eyBtYXhXaWR0aDogNjAwIH19PlxuICAgICAgICAgICAgICAgICAgICA8SXJpV2lkZ2V0IGlyaT17aXJpfSBjbGFzc05hbWU9e2Ake2ZpbmFsQ2xhc3NOYW1lfS1pcmlgfSAvPlxuICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgPEV1aUZsZXhJdGVtIHN0eWxlPXt7IG1heFdpZHRoOiA2MDAgfX0+XG4gICAgICAgICAgICA8RGVzY3JpcHRpb25QcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgZGVzY3JpcHRpb249e2RhdGEuZW50aXR5LmdldERlc2NyaXB0aW9uKCl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7ZmluYWxDbGFzc05hbWV9LWRlc2NyaXB0aW9uYH1cbiAgICAgICAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAgIGVycm9yPXtlcnJvcn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cblxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luOiBcIjAgMTJweCAwXCIsIG1heFdpZHRoOiA2MDAgfX0+XG4gICAgICAgICAgICA8RW50aXR5T250b0xpc3RQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgIGxhYmVsPXtkYXRhLmVudGl0eS5nZXRMYWJlbCgpIHx8IFwiXCJ9XG4gICAgICAgICAgICAgIG9udG9saXN0PXtkYXRhLm9udG9MaXN0fVxuICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtcbiAgICAgICAgICAgICAgICBlbnRpdHlUeXBlIHx8IChkYXRhLmVudGl0eS5nZXRUeXBlKCkgYXMgRW50aXR5VHlwZU5hbWUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2ZpbmFsQ2xhc3NOYW1lfS1lbnRpdHktb250by1saXN0YH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8RW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICBvbnRvbGlzdD17ZGF0YS5kZWZpbmVkQnl9XG4gICAgICAgICAgICAgIGxhYmVsPXtkYXRhLmVudGl0eS5nZXRMYWJlbCgpIHx8IFwiXCJ9XG4gICAgICAgICAgICAgIGVudGl0eVR5cGU9e1xuICAgICAgICAgICAgICAgIGVudGl0eVR5cGUgfHwgKGRhdGEuZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17b25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7ZmluYWxDbGFzc05hbWV9LWVudGl0eS1kZWZpbmVkLWJ5YH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8VGFiUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgIGRhdGE9e2RhdGEuZW50aXR5fVxuICAgICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cbiAgICAgICAgICAgICAgZXJyb3I9e2Vycm9yfVxuICAgICAgICAgICAgICBpcmk9e2lyaX1cbiAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgYXBpPXthcGl9XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e1xuICAgICAgICAgICAgICAgIHByb3BzLm9udG9sb2d5SWRcbiAgICAgICAgICAgICAgICAgID8gcHJvcHMub250b2xvZ3lJZFxuICAgICAgICAgICAgICAgICAgOiBkYXRhLmVudGl0eS5nZXRPbnRvbG9neUlkKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB1c2VMZWdhY3k9e3VzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgaGllcmFyY2h5VGFiPXtoaWVyYXJjaHlUYWJ9XG4gICAgICAgICAgICAgIGNyb3NzUmVmVGFiPXtjcm9zc1JlZlRhYn1cbiAgICAgICAgICAgICAgdGVybWlub2xvZ3lJbmZvVGFiPXt0ZXJtaW5vbG9neUluZm9UYWJ9XG4gICAgICAgICAgICAgIGFsdE5hbWVzVGFiPXthbHROYW1lc1RhYn1cbiAgICAgICAgICAgICAgaGllcmFyY2h5UHJlZmVycmVkUm9vdHM9e3Byb3BzLmhpZXJhcmNoeVByZWZlcnJlZFJvb3RzfVxuICAgICAgICAgICAgICBoaWVyYXJjaHlTaG93U2libGluZ3NPbkluaXQ9e3Byb3BzLmhpZXJhcmNoeVNob3dTaWJsaW5nc09uSW5pdH1cbiAgICAgICAgICAgICAgaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlcz17cHJvcHMuaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlc31cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIChcbiAgICAgICAgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJtZXRhZGF0YVwiKX08L0V1aVRleHQ+XG4gICAgICApfVxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmIDw+e2lzRW50aXR5KGRhdGEuZW50aXR5KSA/IHJlbmRlcihkYXRhKSA6IG51bGx9PC8+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVNZXRhZGF0YShcbiAgcHJvcHM6IE1ldGFkYXRhV2lkZ2V0UHJvcHMsXG4gIGNvbnRhaW5lcjogRWxlbWVudCxcbiAgY2FsbGJhY2s/OiAoKSA9PiB2b2lkXG4pIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRNZXRhZGF0YVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkTWV0YWRhdGFXaWRnZXQocHJvcHM6IE1ldGFkYXRhV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIiBnbG9iYWxTdHlsZXM9e2ZhbHNlfT5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8TWV0YWRhdGFXaWRnZXRcbiAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgdGVybUxpbms9e3Byb3BzLnRlcm1MaW5rfVxuICAgICAgICAgIGFsdE5hbWVzVGFiPXtwcm9wcy5hbHROYW1lc1RhYn1cbiAgICAgICAgICBoaWVyYXJjaHlUYWI9e3Byb3BzLmhpZXJhcmNoeVRhYn1cbiAgICAgICAgICBjcm9zc1JlZlRhYj17cHJvcHMuY3Jvc3NSZWZUYWJ9XG4gICAgICAgICAgdGVybWlub2xvZ3lJbmZvVGFiPXtwcm9wcy50ZXJtaW5vbG9neUluZm9UYWJ9XG4gICAgICAgICAgaGllcmFyY2h5UHJlZmVycmVkUm9vdHM9e3Byb3BzLmhpZXJhcmNoeVByZWZlcnJlZFJvb3RzfVxuICAgICAgICAgIGhpZXJhcmNoeVNob3dTaWJsaW5nc09uSW5pdD17cHJvcHMuaGllcmFyY2h5U2hvd1NpYmxpbmdzT25Jbml0fVxuICAgICAgICAgIGhpZXJhcmNoeUtlZXBFeHBhbnNpb25TdGF0ZXM9e3Byb3BzLmhpZXJhcmNoeUtlZXBFeHBhbnNpb25TdGF0ZXN9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZT17cHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfVxuICAgICAgICAgIGNsYXNzTmFtZT17cHJvcHMuY2xhc3NOYW1lfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IE1ldGFkYXRhV2lkZ2V0LCBjcmVhdGVNZXRhZGF0YSB9O1xuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uUHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyByYW5kb21TdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uL3N0eWxlL3RzNG5mZGlTdHlsZXMvdHM0bmZkaUVudGl0eU9udG9MaXN0U3R5bGUuY3NzXCI7XG5cbmNvbnN0IE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkgPSA1IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbihwcm9wczogRW50aXR5T250b0xpc3RQcmVzZW50YXRpb25Qcm9wcykge1xuICBjb25zdCBbYXBwZWFyc0luRXhwYW5kZWQsIHNldEFwcGVhcnNJbkV4cGFuZGVkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgZmluYWxDbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgfHwgXCJ0czRuZmRpLWVudGl0eS1vbnRvLWxpc3Qtc3R5bGVcIjtcblxuICBmdW5jdGlvbiByZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3k6IHN0cmluZykge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBpZiAocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpXG4gICAgICAgICAgICBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neShvbnRvbG9neSwgcHJvcHMuZW50aXR5VHlwZSB8fCBcIlwiLCB7XG4gICAgICAgICAgICAgIGlyaTogcHJvcHMuaXJpLFxuICAgICAgICAgICAgICBsYWJlbDogcHJvcHMubGFiZWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57b250b2xvZ3kudG9VcHBlckNhc2UoKX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyT250b0JhZGdlcygpIHtcbiAgICByZXR1cm4gcHJvcHMub250b2xpc3QubGVuZ3RoID4gTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSAmJlxuICAgICAgIWFwcGVhcnNJbkV4cGFuZGVkID8gKFxuICAgICAgPD5cbiAgICAgICAge3Byb3BzLm9udG9saXN0XG4gICAgICAgICAgLnNsaWNlKDAsIE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkpXG4gICAgICAgICAgLm1hcCgob250b2xvZ3k6IHN0cmluZykgPT4gKFxuICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgIHtyZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3kpfVxuICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzTmFtZT1cImV4cGFuZC1vbnRvLWxpc3RcIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEFwcGVhcnNJbkV4cGFuZGVkKHRydWUpfVxuICAgICAgICA+XG4gICAgICAgICAgKyB7cHJvcHMub250b2xpc3QubGVuZ3RoIC0gTUFYX09OVE9MT0dJRVNfT05fRElTUExBWX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8Lz5cbiAgICApIDogKFxuICAgICAgcHJvcHMub250b2xpc3QubWFwKChvbnRvbG9neTogc3RyaW5nKSA9PiAoXG4gICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgIHtyZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3kpfVxuICAgICAgICAgICZuYnNwO1xuICAgICAgICA8L3NwYW4+XG4gICAgICApKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0+XG4gICAgICB7cHJvcHMub250b2xpc3QgJiYgcHJvcHMub250b2xpc3QubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxFdWlUZXh0IHN0eWxlPXt7IGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIgfX0+XG4gICAgICAgICAgQWxzbyBhcHBlYXJzIGluJm5ic3A7XG4gICAgICAgICAge3JlbmRlck9udG9CYWRnZXMoKX1cbiAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRW50aXR5T250b0xpc3RQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblByb3BzIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgcmFuZG9tU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi9zdHlsZS90czRuZmRpU3R5bGVzL3RzNG5mZGlFbnRpdHlEZWZpbmVkQnlTdHlsZS5jc3NcIjtcblxuY29uc3QgTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSA9IDUgYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIEVudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbihwcm9wczogRW50aXR5T250b0xpc3RQcmVzZW50YXRpb25Qcm9wcykge1xuICBjb25zdCBbYXBwZWFyc0luRXhwYW5kZWQsIHNldEFwcGVhcnNJbkV4cGFuZGVkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgZmluYWxDbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgfHwgXCJ0czRuZmRpLWVudGl0eS1kZWZpbmVkLWJ5LXN0eWxlXCI7XG5cbiAgZnVuY3Rpb24gcmVuZGVyT250b0JhZGdlKG9udG9sb2d5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICBrZXk9e3JhbmRvbVN0cmluZygpfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgaWYgKHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KVxuICAgICAgICAgICAgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kob250b2xvZ3ksIHByb3BzLmVudGl0eVR5cGUgfHwgXCJcIiwge1xuICAgICAgICAgICAgICBpcmk6IHByb3BzLmlyaSxcbiAgICAgICAgICAgICAgbGFiZWw6IHByb3BzLmxhYmVsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+e29udG9sb2d5LnRvVXBwZXJDYXNlKCl9PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlck9udG9CYWRnZXMoKSB7XG4gICAgcmV0dXJuIHByb3BzLm9udG9saXN0Lmxlbmd0aCA+IE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkgJiZcbiAgICAgICFhcHBlYXJzSW5FeHBhbmRlZCA/IChcbiAgICAgIDw+XG4gICAgICAgIHtwcm9wcy5vbnRvbGlzdFxuICAgICAgICAgIC5zbGljZSgwLCBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZKVxuICAgICAgICAgIC5tYXAoKG9udG9sb2d5OiBzdHJpbmcpID0+IChcbiAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9XCJleHBhbmQtb250by1saXN0XCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRBcHBlYXJzSW5FeHBhbmRlZCh0cnVlKX1cbiAgICAgICAgPlxuICAgICAgICAgICsge3Byb3BzLm9udG9saXN0Lmxlbmd0aCAtIE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVl9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC8+XG4gICAgKSA6IChcbiAgICAgIHByb3BzLm9udG9saXN0Lm1hcCgob250b2xvZ3k6IHN0cmluZykgPT4gKFxuICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICB7cmVuZGVyT250b0JhZGdlKG9udG9sb2d5KX1cbiAgICAgICAgICAmbmJzcDtcbiAgICAgICAgPC9zcGFuPlxuICAgICAgKSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PlxuICAgICAge3Byb3BzLm9udG9saXN0ICYmIHByb3BzLm9udG9saXN0Lmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8RXVpVGV4dCBzdHlsZT17eyBmb250V2VpZ2h0OiBcIm5vcm1hbFwiIH19PlxuICAgICAgICAgIERlZmluZWQgYnkmbmJzcDtcbiAgICAgICAgICB7cmVuZGVyT250b0JhZGdlcygpfVxuICAgICAgICA8L0V1aVRleHQ+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgeyBFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQ29tcGFyYXRvcnMsXG4gIENyaXRlcmlhV2l0aFBhZ2luYXRpb24sXG4gIEV1aUJhc2ljVGFibGUsXG4gIEV1aUJ1dHRvbkljb24sXG4gIEV1aUhvcml6b250YWxSdWxlLFxuICBFdWlQcm92aWRlcixcbiAgRXVpTGluayxcbiAgRXVpU3BhY2VyLFxuICBFdWlUZXh0LFxuICBFdWlTY3JlZW5SZWFkZXJPbmx5LFxuICBFdWlEZXNjcmlwdGlvbkxpc3QsXG4gIEV1aUNhbGxPdXQsXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IGNzcywgU2VyaWFsaXplZFN0eWxlcyB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuaW1wb3J0IHsgRXVpQmFzaWNUYWJsZUNvbHVtbiB9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvYmFzaWNfdGFibGVcIjtcbmltcG9ydCB7IE9sc1Jlc291cmNlLCBSZXNvdXJjZXNXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IE9udG9sb2dpZXMgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IE9MUzRPbnRvbG9neSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9vbHM0LW1vZGVsXCI7XG5pbXBvcnQgeyBPQk9fRk9VTkRSWV9SRVBPX1VSTF9SQVcgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcblxuY29uc3QgREVGQVVMVF9JTklUSUFMX0VOVFJJRVNfUEVSX1BBR0UgPSAxMDtcbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMgPSBbMTAsIDI1LCA1MCwgMTAwXTtcbmNvbnN0IERFRkFVTFRfSU5JVElBTF9TT1JUX0ZJRUxEID0gXCJjb25maWcucHJlZmVycmVkUHJlZml4XCI7XG5jb25zdCBERUZBVUxUX0lOSVRJQUxfU09SVF9ESVIgPSBcImFzY1wiIGFzIGNvbnN0O1xuY29uc3QgREVGQVVMVF9VU0VfTEVHQUNZID0gdHJ1ZSBhcyBjb25zdDtcblxuZnVuY3Rpb24gUmVzb3VyY2VzV2lkZ2V0KHByb3BzOiBSZXNvdXJjZXNXaWRnZXRQcm9wcykge1xuICBjb25zdCB7XG4gICAgYXBpLFxuICAgIGluaXRpYWxFbnRyaWVzUGVyUGFnZSA9IERFRkFVTFRfSU5JVElBTF9FTlRSSUVTX1BFUl9QQUdFLFxuICAgIHBhZ2VTaXplT3B0aW9ucyA9IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMsXG4gICAgaW5pdGlhbFNvcnRGaWVsZCA9IERFRkFVTFRfSU5JVElBTF9TT1JUX0ZJRUxELFxuICAgIGluaXRpYWxTb3J0RGlyID0gREVGQVVMVF9JTklUSUFMX1NPUlRfRElSLFxuICAgIG9uTmF2aWdhdGUsXG4gICAgcGFyYW1ldGVyLFxuICAgIHVzZUxlZ2FjeSA9IERFRkFVTFRfVVNFX0xFR0FDWSxcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3QgW3BhZ2VJbmRleCwgc2V0UGFnZUluZGV4XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbcGFnZVNpemUsIHNldFBhZ2VTaXplXSA9IHVzZVN0YXRlKGluaXRpYWxFbnRyaWVzUGVyUGFnZSk7XG4gIGNvbnN0IFtzb3J0RmllbGQsIHNldFNvcnRGaWVsZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudW1iZXI+KGluaXRpYWxTb3J0RmllbGQpO1xuICBjb25zdCBbc29ydERpcmVjdGlvbiwgc2V0U29ydERpcmVjdGlvbl0gPSB1c2VTdGF0ZShpbml0aWFsU29ydERpcik7XG5cbiAgY29uc3QgW2l0ZW1JZFRvRXhwYW5kZWRSb3dNYXAsIHNldEl0ZW1JZFRvRXhwYW5kZWRSb3dNYXBdID0gdXNlU3RhdGU8XG4gICAgUmVjb3JkPHN0cmluZywgUmVhY3ROb2RlPlxuICA+KHt9KTtcblxuICBjb25zdCBjb2x1bW5zOiBBcnJheTxcbiAgICBFdWlCYXNpY1RhYmxlQ29sdW1uPE9sc1Jlc291cmNlPiAmIHsgY3NzPzogU2VyaWFsaXplZFN0eWxlcyB9XG4gID4gPSBbXG4gICAge1xuICAgICAgbmFtZTogXCJMb2dvXCIsXG4gICAgICBmaWVsZDogXCJjb25maWcubG9nb1wiLFxuICAgICAgLy8gVE9ETzogaW1wcm92ZSBwb3NpdGlvbiBvZiBsb2dvIChtYXliZSBpbnNpZGUgYW5vdGhlciBjZWxsLCBidXQgdGhpcyBtYWtlcyBzb3J0aW5nIG1vcmUgY29tcGxpY2F0ZWQpXG4gICAgICByZW5kZXI6IChsb2dvVXJsOiBzdHJpbmcpID0+XG4gICAgICAgIGxvZ29VcmwgPyAoXG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgd2lkdGg9e1wiMTAwJVwifVxuICAgICAgICAgICAgc3R5bGU9e3sgb2JqZWN0Rml0OiBcImNvbnRhaW5cIiB9fVxuICAgICAgICAgICAgc3JjPXtcbiAgICAgICAgICAgICAgbG9nb1VybC5zdGFydHNXaXRoKFwiL2ltYWdlc1wiKVxuICAgICAgICAgICAgICAgID8gT0JPX0ZPVU5EUllfUkVQT19VUkxfUkFXICsgbG9nb1VybFxuICAgICAgICAgICAgICAgIDogbG9nb1VybFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWx0PXtcIi1sb2dvLVwifVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPD48Lz5cbiAgICAgICAgKSxcbiAgICAgIHdpZHRoOiBcIjclXCIsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlJlc291cmNlIE5hbWVcIixcbiAgICAgIGZpZWxkOiBcImNvbmZpZy50aXRsZVwiLFxuICAgICAgd2lkdGg6IFwiMTUlXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiU2hvcnQgTmFtZVwiLFxuICAgICAgZmllbGQ6IFwib250b2xvZ3lJZFwiLFxuXG4gICAgICByZW5kZXI6IChvbnRvbG9neUlkOiBzdHJpbmcpID0+IChcbiAgICAgICAgPEV1aUxpbmtcbiAgICAgICAgICBocmVmPXtcIiNcIn1cbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYgKG9uTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZShvbnRvbG9neUlkIHx8IFwiXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7b250b2xvZ3lJZH1cbiAgICAgICAgPC9FdWlMaW5rPlxuICAgICAgKSxcblxuICAgICAgd2lkdGg6IFwiMTAlXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiRGVzY3JpcHRpb25cIixcbiAgICAgIGZpZWxkOiBcImNvbmZpZy5kZXNjcmlwdGlvblwiLFxuICAgICAgLy8gd2lkdGg6IFwiMzAlXCIsXG4gICAgICBjc3M6IGNzc2BcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4O1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIGAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlZlcnNpb25cIixcbiAgICAgIGZpZWxkOiBcImNvbmZpZy52ZXJzaW9uXCIsXG4gICAgICB3aWR0aDogXCI3JVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJMb2FkZWQgb25cIixcbiAgICAgIGZpZWxkOiBcImxvYWRlZFwiLFxuICAgICAgd2lkdGg6IFwiOCVcIixcbiAgICAgIGRhdGFUeXBlOiBcImRhdGVcIiBhcyBjb25zdCxcbiAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJUZXJtc1wiLFxuICAgICAgZmllbGQ6IFwibnVtYmVyT2ZUZXJtc1wiLFxuICAgICAgcmVuZGVyOiAodmFsdWU6IG51bWJlcikgPT4gPD57dmFsdWUudG9Mb2NhbGVTdHJpbmcoKX08Lz4sXG4gICAgICB3aWR0aDogXCI3JVwiLFxuICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgIGZpZWxkOiBcIm51bWJlck9mUHJvcGVydGllc1wiLFxuICAgICAgcmVuZGVyOiAodmFsdWU6IG51bWJlcikgPT4gPD57dmFsdWUudG9Mb2NhbGVTdHJpbmcoKX08Lz4sXG4gICAgICB3aWR0aDogXCI3JVwiLFxuICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIkluZGl2aWR1YWxzXCIsXG4gICAgICBmaWVsZDogXCJudW1iZXJPZkluZGl2aWR1YWxzXCIsXG4gICAgICByZW5kZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiA8Pnt2YWx1ZS50b0xvY2FsZVN0cmluZygpfTwvPixcbiAgICAgIHdpZHRoOiBcIjclXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHdpZHRoOiBcIjIlXCIsXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIC4uLihwcm9wcy5hY3Rpb25zIHx8IFtdKSxcbiAgICAgICAge1xuICAgICAgICAgIHJlbmRlcjogKGl0ZW06IE9sc1Jlc291cmNlKSA9PiAoXG4gICAgICAgICAgICA8RXVpQnV0dG9uSWNvblxuICAgICAgICAgICAgICBocmVmPXtpdGVtLmNvbmZpZy5maWxlTG9jYXRpb259XG4gICAgICAgICAgICAgIGljb25UeXBlPVwiZG93bmxvYWRcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRG93bmxvYWRcIlxuICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAhaXRlbS5jb25maWcuYWxsb3dEb3dubG9hZCB8fFxuICAgICAgICAgICAgICAgICFpdGVtLmNvbmZpZy5maWxlTG9jYXRpb24gfHxcbiAgICAgICAgICAgICAgICBpdGVtLmNvbmZpZy5maWxlTG9jYXRpb24uc3RhcnRzV2l0aChcImZpbGU6Ly9cIilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuXG4gIGNvbnN0IG9uVGFibGVDaGFuZ2UgPSAoe1xuICAgIHBhZ2UsXG4gICAgc29ydCxcbiAgfTogQ3JpdGVyaWFXaXRoUGFnaW5hdGlvbjxPbHNSZXNvdXJjZT4pID0+IHtcbiAgICBjb25zdCB7IGluZGV4OiBwYWdlSW5kZXgsIHNpemU6IHBhZ2VTaXplIH0gPSBwYWdlO1xuICAgIHNldFBhZ2VJbmRleChwYWdlSW5kZXgpO1xuICAgIHNldFBhZ2VTaXplKHBhZ2VTaXplKTtcblxuICAgIGlmIChzb3J0KSB7XG4gICAgICBjb25zdCB7IGZpZWxkOiBzb3J0RmllbGQsIGRpcmVjdGlvbjogc29ydERpcmVjdGlvbiB9ID0gc29ydDtcbiAgICAgIHNldFNvcnRGaWVsZChzb3J0RmllbGQpO1xuICAgICAgc2V0U29ydERpcmVjdGlvbihzb3J0RGlyZWN0aW9uKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qge1xuICAgIGRhdGE6IG9udG9sb2dpZXNEYXRhLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGlzTG9hZGluZyxcbiAgfSA9IHVzZVF1ZXJ5PE9udG9sb2dpZXM+KFxuICAgIFtcIm9udG9sb2dpZXNEYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0T250b2xvZ2llc0RhdGEocHJvcHMucGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICBmdW5jdGlvbiB2MnRvT2xzUmVzb3VyY2Uob250b2xvZ3k6IE9MUzRPbnRvbG9neSk6IE9sc1Jlc291cmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgb250b2xvZ3lJZDogb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgbG9hZGVkOiBvbnRvbG9neS5nZXRMb2FkZWQoKSxcbiAgICAgIG51bWJlck9mVGVybXM6IG9udG9sb2d5LmdldE51bUNsYXNzZXMoKSxcbiAgICAgIG51bWJlck9mUHJvcGVydGllczogb250b2xvZ3kuZ2V0TnVtUHJvcGVydGllcygpLFxuICAgICAgbnVtYmVyT2ZJbmRpdmlkdWFsczogb250b2xvZ3kuZ2V0TnVtSW5kaXZpZHVhbHMoKSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBsb2dvOiBvbnRvbG9neS5nZXRMb2dvVVJMKCksXG4gICAgICAgIHRpdGxlOiBvbnRvbG9neS5nZXROYW1lKCkudHJpbSgpLFxuICAgICAgICBkZXNjcmlwdGlvbjogb250b2xvZ3kuZ2V0RGVzY3JpcHRpb24oKSxcbiAgICAgICAgcHJlZmVycmVkUHJlZml4OiBvbnRvbG9neS5nZXRQcmVmZXJyZWRQcmVmaXgoKSxcbiAgICAgICAgYWxsb3dEb3dubG9hZDogb250b2xvZ3kuZ2V0QWxsb3dEb3dubG9hZCgpLFxuICAgICAgICBmaWxlTG9jYXRpb246IG9udG9sb2d5LmdldElyaSgpLFxuICAgICAgICB2ZXJzaW9uOiBvbnRvbG9neS5nZXRWZXJzaW9uKCksXG4gICAgICAgIGlyaTogb250b2xvZ3kuZ2V0SXJpKCksXG4gICAgICAgIGhvbWVwYWdlOiBvbnRvbG9neS5nZXRIb21lcGFnZSgpLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIGxpY2Vuc2U6IG9udG9sb2d5LmdldExpY2Vuc2UoKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG9udG9zID0gdXNlTGVnYWN5XG4gICAgPyBvbnRvbG9naWVzRGF0YT8ucHJvcGVydGllcy5tYXAoKG9udG9sb2d5KSA9PiAoe1xuICAgICAgICAuLi5vbnRvbG9neS5wcm9wZXJ0aWVzLFxuICAgICAgfSkpIHx8IFtdXG4gICAgOiBvbnRvbG9naWVzRGF0YT8ucHJvcGVydGllcy5tYXAoKG9udG9sb2d5KSA9PiB2MnRvT2xzUmVzb3VyY2Uob250b2xvZ3kpKSB8fFxuICAgICAgW107XG5cbiAgY29uc3QgZmluZE9udG9sb2dpZXMgPSAoXG4gICAgb250b2xvZ2llczogYW55W10sXG4gICAgcGFnZUluZGV4OiBudW1iZXIsXG4gICAgcGFnZVNpemU6IG51bWJlcixcbiAgICBzb3J0RmllbGQ6IGFueSxcbiAgICBzb3J0RGlyZWN0aW9uOiBcImFzY1wiIHwgXCJkZXNjXCJcbiAgKSA9PiB7XG4gICAgbGV0IGl0ZW1zO1xuXG4gICAgaWYgKHNvcnRGaWVsZCkge1xuICAgICAgaXRlbXMgPSBvbnRvbG9naWVzXG4gICAgICAgIC5zbGljZSgwKVxuICAgICAgICAuc29ydChcbiAgICAgICAgICBDb21wYXJhdG9ycy5wcm9wZXJ0eShzb3J0RmllbGQsIENvbXBhcmF0b3JzLmRlZmF1bHQoc29ydERpcmVjdGlvbikpXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zID0gb250b2xvZ2llcztcbiAgICB9XG5cbiAgICBsZXQgcGFnZU9mSXRlbXM7XG5cbiAgICBpZiAoIXBhZ2VJbmRleCAmJiAhcGFnZVNpemUpIHtcbiAgICAgIHBhZ2VPZkl0ZW1zID0gaXRlbXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBwYWdlSW5kZXggKiBwYWdlU2l6ZTtcbiAgICAgIHBhZ2VPZkl0ZW1zID0gaXRlbXMuc2xpY2UoXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIE1hdGgubWluKHN0YXJ0SW5kZXggKyBwYWdlU2l6ZSwgb250b2xvZ2llcy5sZW5ndGgpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwYWdlT2ZJdGVtcyxcbiAgICAgIHRvdGFsSXRlbUNvdW50OiBvbnRvbG9naWVzLmxlbmd0aCxcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IHsgcGFnZU9mSXRlbXMsIHRvdGFsSXRlbUNvdW50IH0gPSBmaW5kT250b2xvZ2llcyhcbiAgICBvbnRvcyxcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgc29ydEZpZWxkLFxuICAgIHNvcnREaXJlY3Rpb25cbiAgKTtcblxuICBjb25zdCBwYWdpbmF0aW9uID0ge1xuICAgIHBhZ2VJbmRleCxcbiAgICBwYWdlU2l6ZSxcbiAgICB0b3RhbEl0ZW1Db3VudCxcbiAgICBwYWdlU2l6ZU9wdGlvbnMsXG4gIH07XG5cbiAgY29uc3QgcmVzdWx0c0NvdW50ID1cbiAgICBwYWdlU2l6ZSA9PT0gMCA/IChcbiAgICAgIDxzdHJvbmc+QWxsPC9zdHJvbmc+XG4gICAgKSA6IChcbiAgICAgIDw+XG4gICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAge3BhZ2VTaXplICogcGFnZUluZGV4ICsgMX0te3BhZ2VTaXplICogcGFnZUluZGV4ICsgcGFnZVNpemV9XG4gICAgICAgIDwvc3Ryb25nPntcIiBcIn1cbiAgICAgICAgb2Yge3RvdGFsSXRlbUNvdW50fVxuICAgICAgPC8+XG4gICAgKTtcblxuICBjb25zdCBzb3J0aW5nID0ge1xuICAgIHNvcnQ6IHtcbiAgICAgIGZpZWxkOiBzb3J0RmllbGQsXG4gICAgICBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb24sXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCB0b2dnbGVEZXRhaWxzID0gKHJlc291cmNlOiBhbnkpID0+IHtcbiAgICBjb25zdCBpdGVtSWRUb0V4cGFuZGVkUm93TWFwVmFsdWVzID0geyAuLi5pdGVtSWRUb0V4cGFuZGVkUm93TWFwIH07XG5cbiAgICBpZiAoaXRlbUlkVG9FeHBhbmRlZFJvd01hcFZhbHVlc1tyZXNvdXJjZS5vbnRvbG9neUlkXSkge1xuICAgICAgZGVsZXRlIGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXBWYWx1ZXNbcmVzb3VyY2Uub250b2xvZ3lJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBob21lcGFnZSA9IG51bGw7XG4gICAgICBsZXQgbGljZW5zZVVybCA9IFwiXCI7XG4gICAgICBsZXQgbGljZW5zZUxhYmVsID0gXCJcIjtcblxuICAgICAgcmVzb3VyY2UuY29uZmlnLmhvbWVwYWdlID8gKGhvbWVwYWdlID0gcmVzb3VyY2UuY29uZmlnLmhvbWVwYWdlKSA6IG51bGw7XG5cbiAgICAgIGlmIChyZXNvdXJjZT8uY29uZmlnPy5hbm5vdGF0aW9ucz8ubGljZW5zZSkge1xuICAgICAgICBjb25zdCBsaWNlbnNlID0gcmVzb3VyY2UuY29uZmlnLmFubm90YXRpb25zLmxpY2Vuc2U7XG4gICAgICAgIGlmICh1c2VMZWdhY3kpIHtcbiAgICAgICAgICBpZiAobGljZW5zZVswXSAhPT0gXCJcIikge1xuICAgICAgICAgICAgbGljZW5zZVVybCA9IGBodHRwczovLyR7bGljZW5zZVswXX1gO1xuICAgICAgICAgICAgbGljZW5zZUxhYmVsID0gbGljZW5zZVswXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGljZW5zZVVybCA9IGxpY2Vuc2UudXJsID8gbGljZW5zZS51cmwgOiBcIlwiO1xuICAgICAgICAgIGxpY2Vuc2VMYWJlbCA9IGxpY2Vuc2UubGFiZWwgPyBsaWNlbnNlLmxhYmVsIDogXCJcIjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBsaXN0SXRlbXMgPSBbXTtcblxuICAgICAgaWYgKGhvbWVwYWdlKSB7XG4gICAgICAgIGxpc3RJdGVtcy5wdXNoKHtcbiAgICAgICAgICB0aXRsZTogXCJIb21lcGFnZVwiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAoXG4gICAgICAgICAgICA8RXVpTGluayBocmVmPXtgJHtob21lcGFnZSA/IGhvbWVwYWdlIDogXCItXCJ9YH0+e2Ake1xuICAgICAgICAgICAgICBob21lcGFnZSA/IGhvbWVwYWdlIDogXCItXCJcbiAgICAgICAgICAgIH1gfTwvRXVpTGluaz5cbiAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChsaWNlbnNlTGFiZWwgIT09IFwiXCIpIHtcbiAgICAgICAgbGlzdEl0ZW1zLnB1c2goe1xuICAgICAgICAgIHRpdGxlOiBcIkxpY2Vuc2VcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogKFxuICAgICAgICAgICAgPEV1aUxpbmtcbiAgICAgICAgICAgICAgaHJlZj17YCR7bGljZW5zZVVybCAhPT0gXCJcIiA/IGxpY2Vuc2VVcmwgOiBudWxsfWB9XG4gICAgICAgICAgICA+e2Ake2xpY2Vuc2VMYWJlbH1gfTwvRXVpTGluaz5cbiAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaXRlbUlkVG9FeHBhbmRlZFJvd01hcFZhbHVlc1tyZXNvdXJjZS5vbnRvbG9neUlkXSA9IChcbiAgICAgICAgPEV1aURlc2NyaXB0aW9uTGlzdCBsaXN0SXRlbXM9e2xpc3RJdGVtc30gLz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0SXRlbUlkVG9FeHBhbmRlZFJvd01hcChpdGVtSWRUb0V4cGFuZGVkUm93TWFwVmFsdWVzKTtcbiAgfTtcblxuICBjb25zdCBjb2x1bW5zV2l0aEV4cGFuZGluZ1Jvd1RvZ2dsZTogQXJyYXk8XG4gICAgRXVpQmFzaWNUYWJsZUNvbHVtbjxPbHNSZXNvdXJjZT4gJiB7IGNzcz86IFNlcmlhbGl6ZWRTdHlsZXMgfVxuICA+ID0gW1xuICAgIC4uLmNvbHVtbnMsXG4gICAge1xuICAgICAgYWxpZ246IFwicmlnaHRcIixcbiAgICAgIHdpZHRoOiBcIjQwcHhcIixcbiAgICAgIGlzRXhwYW5kZXI6IHRydWUsXG4gICAgICBuYW1lOiAoXG4gICAgICAgIDxFdWlTY3JlZW5SZWFkZXJPbmx5PlxuICAgICAgICAgIDxzcGFuPkV4cGFuZCByb3c8L3NwYW4+XG4gICAgICAgIDwvRXVpU2NyZWVuUmVhZGVyT25seT5cbiAgICAgICksXG4gICAgICBtb2JpbGVPcHRpb25zOiB7IGhlYWRlcjogZmFsc2UgfSxcbiAgICAgIHJlbmRlcjogKHJlc291cmNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbUlkVG9FeHBhbmRlZFJvd01hcFZhbHVlcyA9IHsgLi4uaXRlbUlkVG9FeHBhbmRlZFJvd01hcCB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEV1aUJ1dHRvbkljb25cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgdG9nZ2xlRGV0YWlscyhyZXNvdXJjZSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgaWNvblR5cGU9e1xuICAgICAgICAgICAgICBpdGVtSWRUb0V4cGFuZGVkUm93TWFwVmFsdWVzW3Jlc291cmNlLm9udG9sb2d5SWRdXG4gICAgICAgICAgICAgICAgPyBcImFycm93RG93blwiXG4gICAgICAgICAgICAgICAgOiBcImFycm93UmlnaHRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17XG4gICAgICAgICAgICAgIGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXBWYWx1ZXNbcmVzb3VyY2Uub250b2xvZ3lJZF1cbiAgICAgICAgICAgICAgICA/IFwiQ29sbGFwc2VcIlxuICAgICAgICAgICAgICAgIDogXCJFeHBhbmRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0sXG4gIF07XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPEV1aUNhbGxPdXRcbiAgICAgICAgICAgIHRpdGxlPXtcIkxpY2Vuc2VzXCJ9XG4gICAgICAgICAgICBpY29uVHlwZT1cIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIlxuICAgICAgICAgICAgY29sb3I9e1wid2FybmluZ1wifVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICBUaGUgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIHRlcm1pbm9sb2dpZXMgYmV5b25kIHRoaXMgc2VydmljZVxuICAgICAgICAgICAgICBpcyBvbmx5IHBlcm1pdHRlZCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBvZiB0aGVcbiAgICAgICAgICAgICAgcmVzcGVjdGl2ZSB0ZXJtaW5vbG9neSwgYWxzbyBpbiBjb21wbGlhbmNlIHdpdGggdGhlIGxpY2Vuc2VcbiAgICAgICAgICAgICAgY29uZGl0aW9ucyBpbiB0aGUgcmVzcGVjdGl2ZSBjb3VudHJpZXMuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9FdWlDYWxsT3V0PlxuICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgIDxFdWlUZXh0IHNpemU9XCJ4c1wiPlxuICAgICAgICAgICAgU2hvd2luZyB7cmVzdWx0c0NvdW50fSA8c3Ryb25nPk9udG9sb2dpZXM8L3N0cm9uZz5cbiAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG4gICAgICAgICAgPEV1aUhvcml6b250YWxSdWxlIG1hcmdpbj1cIm5vbmVcIiBzdHlsZT17eyBoZWlnaHQ6IDIgfX0gLz5cblxuICAgICAgICAgIDxFdWlCYXNpY1RhYmxlXG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zV2l0aEV4cGFuZGluZ1Jvd1RvZ2dsZX1cbiAgICAgICAgICAgIGl0ZW1zPXtwYWdlT2ZJdGVtc31cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvblRhYmxlQ2hhbmdlfVxuICAgICAgICAgICAgcGFnaW5hdGlvbj17cGFnaW5hdGlvbn1cbiAgICAgICAgICAgIHNvcnRpbmc9e3NvcnRpbmd9XG4gICAgICAgICAgICBpdGVtSWRUb0V4cGFuZGVkUm93TWFwPXtpdGVtSWRUb0V4cGFuZGVkUm93TWFwfVxuICAgICAgICAgICAgaXNFeHBhbmRhYmxlPXt0cnVlfVxuICAgICAgICAgICAgaXRlbUlkPXtcIm9udG9sb2d5SWRcIn1cbiAgICAgICAgICAvPlxuICAgICAgICA8Lz5cbiAgICAgICl9XG4gICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgPEV1aUJhc2ljVGFibGVcbiAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zV2l0aEV4cGFuZGluZ1Jvd1RvZ2dsZX1cbiAgICAgICAgICBpdGVtcz17cGFnZU9mSXRlbXN9XG4gICAgICAgICAgb25DaGFuZ2U9e29uVGFibGVDaGFuZ2V9XG4gICAgICAgICAgcGFnaW5hdGlvbj17cGFnaW5hdGlvbn1cbiAgICAgICAgICBzb3J0aW5nPXtzb3J0aW5nfVxuICAgICAgICAgIGxvYWRpbmdcbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7aXNFcnJvciAmJiAoXG4gICAgICAgIDxFdWlCYXNpY1RhYmxlXG4gICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICBpdGVtcz17cGFnZU9mSXRlbXN9XG4gICAgICAgICAgb25DaGFuZ2U9e29uVGFibGVDaGFuZ2V9XG4gICAgICAgICAgcGFnaW5hdGlvbj17cGFnaW5hdGlvbn1cbiAgICAgICAgICBzb3J0aW5nPXtzb3J0aW5nfVxuICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXtnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwicmVzb3VyY2VzXCIpfVxuICAgICAgICAgICovXG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXNvdXJjZXMoXG4gIHByb3BzOiBSZXNvdXJjZXNXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFJlc291cmNlc1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkUmVzb3VyY2VzV2lkZ2V0KHByb3BzOiBSZXNvdXJjZXNXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxSZXNvdXJjZXNXaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBpbml0aWFsRW50cmllc1BlclBhZ2U9e3Byb3BzLmluaXRpYWxFbnRyaWVzUGVyUGFnZX1cbiAgICAgICAgICBwYWdlU2l6ZU9wdGlvbnM9e3Byb3BzLnBhZ2VTaXplT3B0aW9uc31cbiAgICAgICAgICBpbml0aWFsU29ydEZpZWxkPXtwcm9wcy5pbml0aWFsU29ydEZpZWxkfVxuICAgICAgICAgIGluaXRpYWxTb3J0RGlyPXtwcm9wcy5pbml0aWFsU29ydERpcn1cbiAgICAgICAgICBhY3Rpb25zPXtwcm9wcy5hY3Rpb25zfVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IFJlc291cmNlc1dpZGdldCwgY3JlYXRlUmVzb3VyY2VzIH07XG4iLCAiaW1wb3J0IHsgRXVpQ29tYm9Cb3gsIEV1aVByb3ZpZGVyIH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnkgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IFNlYXJjaEJhcldpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uIH0gZnJvbSBcIkBlbGFzdGljL2V1aS9zcmMvY29tcG9uZW50cy9jb21ib19ib3gvdHlwZXNcIjtcblxuZnVuY3Rpb24gU2VhcmNoQmFyV2lkZ2V0KHByb3BzOiBTZWFyY2hCYXJXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaSwgcXVlcnksIHNlbGVjdGlvbkNoYW5nZWRFdmVudCwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAvKipcbiAgICogc3VnZ2VzdGlvbnNcbiAgICovXG4gIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IHVzZVN0YXRlPEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+PigpO1xuXG4gIC8qKlxuICAgKiBzZWxlY3RlZCBzdWdnZXN0aW9uIChvbiBjbGljaylcbiAgICovXG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkXSA9IHVzZVN0YXRlPFxuICAgIEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+XG4gID4oW10pO1xuXG4gIC8qKlxuICAgKiBjdXJyZW50IHNlYXJjaCB2YWx1ZVxuICAgKi9cbiAgY29uc3QgW3NlYXJjaFZhbHVlLCBzZXRTZWFyY2hWYWx1ZV0gPSB1c2VTdGF0ZTxzdHJpbmc+KHF1ZXJ5KTtcblxuICBjb25zdCBvbkNoYW5nZSA9IChzZWxlY3RlZE9wdGlvbjogQXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj4pID0+IHtcbiAgICBzZXRTZWxlY3RlZChzZWxlY3RlZE9wdGlvbik7XG4gIH07XG5cbiAgY29uc3Qgb25DcmVhdGVPcHRpb24gPSAoc2VhcmNoVmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKCFub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdPcHRpb246IEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+ID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogc2VhcmNoVmFsdWUsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBzZXRTZWxlY3RlZChuZXdPcHRpb24pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBmZXRjaGVzIHN1Z2dlc3Rpb25zIHdoZW4gc2VhcmNoVmFsdWUgY2hhbmdlc1xuICAgKi9cbiAgY29uc3QgeyBpc0xvYWRpbmcgfSA9IHVzZVF1ZXJ5KFtcInN1Z2dlc3Rpb25zXCIsIHNlYXJjaFZhbHVlXSwgYXN5bmMgKCkgPT4ge1xuICAgIGlmICghc2VhcmNoVmFsdWUudHJpbSgpKSB7XG4gICAgICByZXR1cm47IC8vIEV4aXQgZWFybHkgaWYgc2VhcmNoVmFsdWUgaXMgZW1wdHlcbiAgICB9XG4gICAgcmV0dXJuIG9sc0FwaVxuICAgICAgLnN1Z2dlc3QoXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeTogc2VhcmNoVmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBwcm9wcy5wYXJhbWV0ZXJcbiAgICAgIClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UucmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzcG9uc2UuZG9jcykge1xuICAgICAgICAgIHNldE9wdGlvbnMoXG4gICAgICAgICAgICByZXNwb25zZS5yZXNwb25zZS5kb2NzLm1hcCgoc3VnZ2VzdGlvbjogYW55KSA9PiAoe1xuICAgICAgICAgICAgICBsYWJlbDogc3VnZ2VzdGlvbi5hdXRvc3VnZ2VzdCxcbiAgICAgICAgICAgICAgdHlwZTogeyBjb2xvcjogXCJ0aW50MVwiLCBpY29uVHlwZTogXCJcIiB9LFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBPbmNlIHRoZSBzZWxlY3RlZCBvcHRpb24gY2hhbmdlcywgcGFzcyB0aGUgZXZlbnQgYnkgaW52b2tpbmcgdGhlIHBhc3NlZCBmdW5jdGlvbi5cbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KFxuICAgICAgc2VsZWN0ZWRPcHRpb25zLm1hcCgoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYWJlbDogc2VsZWN0ZWRPcHRpb24ubGFiZWwsXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFtzZWxlY3RlZE9wdGlvbnNdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RXVpQ29tYm9Cb3hcbiAgICAgICAgaWQ9e1wic3VnZ2VzdFwifVxuICAgICAgICBpc0NsZWFyYWJsZVxuICAgICAgICBhcmlhLWxhYmVsPVwic2VhcmNoQmFyXCJcbiAgICAgICAgZnVsbFdpZHRoPXt0cnVlfVxuICAgICAgICBhc3luYz17dHJ1ZX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e1wiU2VhcmNoXCJ9XG4gICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICBzaW5nbGVTZWxlY3Rpb249e3RydWV9XG4gICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxuICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICBzZWxlY3RlZE9wdGlvbnM9e3NlbGVjdGVkT3B0aW9uc31cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICBvbkNyZWF0ZU9wdGlvbj17b25DcmVhdGVPcHRpb259XG4gICAgICAgIG9uU2VhcmNoQ2hhbmdlPXsoaXRlbSkgPT4ge1xuICAgICAgICAgIHNldFNlYXJjaFZhbHVlKGl0ZW0pO1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2VhcmNoQmFyKFxuICBwcm9wczogU2VhcmNoQmFyV2lkZ2V0UHJvcHMsXG4gIGNvbnRhaW5lcjogYW55LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFNlYXJjaEJhcldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkU2VhcmNoQmFyV2lkZ2V0KHByb3BzOiBTZWFyY2hCYXJXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxTZWFyY2hCYXJXaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBxdWVyeT17cHJvcHMucXVlcnl9XG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50PXtwcm9wcy5zZWxlY3Rpb25DaGFuZ2VkRXZlbnR9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgU2VhcmNoQmFyV2lkZ2V0LCBjcmVhdGVTZWFyY2hCYXIgfTtcbiIsICJpbXBvcnQge1xuICBFdWlCdXR0b25FbXB0eSxcbiAgRXVpRmxleEdyb3VwLFxuICBFdWlGbGV4SXRlbSxcbiAgRXVpRm9ybVJvdyxcbiAgRXVpSG9yaXpvbnRhbFJ1bGUsXG4gIEV1aUxvYWRpbmdTcGlubmVyLFxuICBFdWlQYW5lbCxcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aVNlbGVjdGFibGUsXG4gIEV1aVNlbGVjdGFibGVPcHRpb24sXG4gIEV1aVNwYWNlcixcbiAgRXVpU3dpdGNoLFxuICBFdWlUYWJsZVBhZ2luYXRpb24sXG4gIEV1aVRleHQsXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnkgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBNZXRhZGF0YUNvbXBhY3QgfSBmcm9tIFwiLi9NZXRhZGF0YUNvbXBhY3RcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVXaWRnZXQgfSBmcm9tIFwiLi4vQXV0b2NvbXBsZXRlV2lkZ2V0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgU2VhcmNoQmFyV2lkZ2V0IH0gZnJvbSBcIi4uL1NlYXJjaEJhcldpZGdldFwiO1xuXG5jb25zdCBERUZBVUxUX0lOSVRJQUxfSVRFTVNfUEVSX1BBR0UgPSAxMDtcbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMgPSBbMTAsIDI1LCA1MCwgMTAwXTtcblxuZnVuY3Rpb24gU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQocHJvcHM6IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBxdWVyeSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgaW5pdGlhbEl0ZW1zUGVyUGFnZSA9IERFRkFVTFRfSU5JVElBTF9JVEVNU19QRVJfUEFHRSxcbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyxcbiAgICB0YXJnZXRMaW5rLFxuICAgIHByZXNlbGVjdGVkLFxuICAgIHVzZUxlZ2FjeSA9IHRydWUsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlKHF1ZXJ5KTtcbiAgY29uc3QgW2FjdGl2ZVBhZ2UsIHNldEFjdGl2ZVBhZ2VdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtwYWdlQ291bnQsIHNldFBhZ2VDb3VudF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2l0ZW1zUGVyUGFnZSwgc2V0SXRlbXNQZXJQYWdlXSA9IHVzZVN0YXRlKGluaXRpYWxJdGVtc1BlclBhZ2UpO1xuICBjb25zdCBbdG90YWxJdGVtcywgc2V0VG90YWxJdGVtc10gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2V4YWN0TWF0Y2gsIHNldEV4YWN0TWF0Y2hdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd09ic29sZXRlVGVybXMsIHNldFNob3dPYnNvbGV0ZVRlcm1zXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2ZpbHRlckJ5VHlwZU9wdGlvbnMsIHNldEZpbHRlckJ5VHlwZU9wdGlvbnNdID0gdXNlU3RhdGU8XG4gICAgRXVpU2VsZWN0YWJsZU9wdGlvbltdXG4gID4oW10pO1xuICBjb25zdCBbZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsIHNldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zXSA9IHVzZVN0YXRlPFxuICAgIEV1aVNlbGVjdGFibGVPcHRpb25bXVxuICA+KFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNlYXJjaFZhbHVlKHF1ZXJ5KTtcbiAgfSwgW3F1ZXJ5XSk7XG5cbiAgZnVuY3Rpb24gdXBkYXRlRmlsdGVyT3B0aW9ucyhcbiAgICBjdXJyZW50T3B0aW9uczogRXVpU2VsZWN0YWJsZU9wdGlvbltdLFxuICAgIG9wdGlvbkNvdW50czogYW55W10sXG4gICAgc2V0T3B0aW9uczogRnVuY3Rpb24sXG4gICAgcmVuZGVyPzogKHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZ1xuICApIHtcbiAgICBpZiAoY3VycmVudE9wdGlvbnMubGVuZ3RoID09IDApIHtcbiAgICAgIHNldE9wdGlvbnMoXG4gICAgICAgIG9wdGlvbkNvdW50cy5yZWR1Y2UoXG4gICAgICAgICAgKFxuICAgICAgICAgICAgYWNjdW11bGF0b3I6IGFueVtdLFxuICAgICAgICAgICAgY3VycmVudFZhbHVlOiBzdHJpbmcsXG4gICAgICAgICAgICBjdXJyZW50SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgIGFycmF5OiBhbnlbXVxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAlIDIgPT09IDApIHtcbiAgICAgICAgICAgICAgYWNjdW11bGF0b3IucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHJlbmRlciA/IHJlbmRlcihjdXJyZW50VmFsdWUpIDogY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIGtleTogY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIGFwcGVuZDogXCIoXCIgKyBhcnJheVtjdXJyZW50SW5kZXggKyAxXSArIFwiKVwiLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBhcnJheVtjdXJyZW50SW5kZXggKyAxXSA9PSAwLFxuICAgICAgICAgICAgICAgIGRhdGE6IHsgdG90YWxDb3VudDogYXJyYXlbY3VycmVudEluZGV4ICsgMV0gfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdPcHRpb25zOiBFdWlTZWxlY3RhYmxlT3B0aW9uW10gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbmV3T3B0aW9ucy5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnRPcHRpb25zW2ldKSk7IC8vIHVzaW5nIE9iamVjdC5hc3NpZ24gdG8gcGFzcyBieSB2YWx1ZSwgbm90IGJ5IHJlZmVyZW5jZVxuICAgICAgfVxuXG4gICAgICBvcHRpb25Db3VudHMuZm9yRWFjaChcbiAgICAgICAgKGN1cnJlbnRWYWx1ZTogc3RyaW5nLCBjdXJyZW50SW5kZXg6IG51bWJlciwgYXJyYXk6IGFueVtdKSA9PiB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAlIDIgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IG5ld09wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmtleSA9PSBjdXJyZW50VmFsdWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICAgIG9wdGlvbi5hcHBlbmQgPSBcIihcIiArIGFycmF5W2N1cnJlbnRJbmRleCArIDFdO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgb3B0aW9uLmRhdGEgJiZcbiAgICAgICAgICAgICAgICBhcnJheVtjdXJyZW50SW5kZXggKyAxXSA8IG9wdGlvbi5kYXRhLnRvdGFsQ291bnRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLmFwcGVuZCArPSBcIi9cIiArIG9wdGlvbi5kYXRhLnRvdGFsQ291bnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3B0aW9uLmFwcGVuZCArPSBcIilcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBzZXRPcHRpb25zKG5ld09wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpbHRlclNlbGVjdGVkT3B0aW9ucyA9IChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+XG4gICAgb3B0aW9uLmNoZWNrZWQgPT09IFwib25cIjtcblxuICBjb25zdCB7XG4gICAgZGF0YTogc2VhcmNoUmVzdWx0cyxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3IsXG4gIH0gPSB1c2VRdWVyeShcbiAgICBbXG4gICAgICBcInNlYXJjaFJlc3VsdHNcIixcbiAgICAgIGFwaSxcbiAgICAgIHNlYXJjaFZhbHVlLFxuICAgICAgZXhhY3RNYXRjaCxcbiAgICAgIHNob3dPYnNvbGV0ZVRlcm1zLFxuICAgICAgYWN0aXZlUGFnZSxcbiAgICAgIGl0ZW1zUGVyUGFnZSxcbiAgICAgIGZpbHRlckJ5VHlwZU9wdGlvbnNcbiAgICAgICAgLmZpbHRlcihmaWx0ZXJTZWxlY3RlZE9wdGlvbnMpXG4gICAgICAgIC5tYXAoKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmtleSksXG4gICAgICBmaWx0ZXJCeU9udG9sb2d5T3B0aW9uc1xuICAgICAgICAuZmlsdGVyKGZpbHRlclNlbGVjdGVkT3B0aW9ucylcbiAgICAgICAgLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5KSxcbiAgICAgIHBhcmFtZXRlcixcbiAgICBdLFxuICAgIGFzeW5jICh7IHNpZ25hbCB9KSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpXG4gICAgICAgIC5zZWFyY2goXG4gICAgICAgICAge1xuICAgICAgICAgICAgcXVlcnk6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgZXhhY3RNYXRjaDogZXhhY3RNYXRjaCxcbiAgICAgICAgICAgIHNob3dPYnNvbGV0ZVRlcm1zOiBzaG93T2Jzb2xldGVUZXJtcyxcbiAgICAgICAgICAgIHR5cGVzOiBmaWx0ZXJCeVR5cGVPcHRpb25zXG4gICAgICAgICAgICAgIC5maWx0ZXIoZmlsdGVyU2VsZWN0ZWRPcHRpb25zKVxuICAgICAgICAgICAgICAubWFwKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkpXG4gICAgICAgICAgICAgIC5qb2luKFwiLFwiKSxcbiAgICAgICAgICAgIG9udG9sb2d5OiBmaWx0ZXJCeU9udG9sb2d5T3B0aW9uc1xuICAgICAgICAgICAgICAuZmlsdGVyKGZpbHRlclNlbGVjdGVkT3B0aW9ucylcbiAgICAgICAgICAgICAgLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5KVxuICAgICAgICAgICAgICAuam9pbihcIixcIiksXG4gICAgICAgICAgICBncm91cEJ5SXJpOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFnZTogYWN0aXZlUGFnZS50b1N0cmluZygpLFxuICAgICAgICAgICAgc2l6ZTogaXRlbXNQZXJQYWdlLnRvU3RyaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgcHJvcHMucGFyYW1ldGVyLFxuICAgICAgICAgIHNpZ25hbFxuICAgICAgICApXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc3BvbnNlW1wicmVzcG9uc2VcIl0gJiZcbiAgICAgICAgICAgIHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJkb2NzXCJdICE9IG51bGwgJiZcbiAgICAgICAgICAgIHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJudW1Gb3VuZFwiXSAhPSBudWxsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdICYmXG4gICAgICAgICAgICAgIHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdW1widHlwZVwiXSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZUZpbHRlck9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJCeVR5cGVPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJ0eXBlXCJdLFxuICAgICAgICAgICAgICAgICAgc2V0RmlsdGVyQnlUeXBlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50VmFsdWU6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICAgICAgYCR7Y3VycmVudFZhbHVlWzBdLnRvVXBwZXJDYXNlKCl9JHtjdXJyZW50VmFsdWUuc2xpY2UoMSl9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcIm9udG9sb2d5X25hbWVcIl0pIHtcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZUZpbHRlck9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcIm9udG9sb2d5X25hbWVcIl0sXG4gICAgICAgICAgICAgICAgICAgIHNldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAoY3VycmVudFZhbHVlOiBzdHJpbmcpID0+IGN1cnJlbnRWYWx1ZS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJvbnRvbG9neUlkXCJdKSB7XG4gICAgICAgICAgICAgICAgICB1cGRhdGVGaWx0ZXJPcHRpb25zKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJvbnRvbG9neUlkXCJdLFxuICAgICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRWYWx1ZTogc3RyaW5nKSA9PiBjdXJyZW50VmFsdWUudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0VG90YWxJdGVtcyhyZXNwb25zZVtcInJlc3BvbnNlXCJdW1wibnVtRm91bmRcIl0pO1xuICAgICAgICAgICAgY29uc3QgbmV3UGFnZUNvdW50ID0gTWF0aC5jZWlsKFxuICAgICAgICAgICAgICByZXNwb25zZVtcInJlc3BvbnNlXCJdW1wibnVtRm91bmRcIl0gLyBpdGVtc1BlclBhZ2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzZXRQYWdlQ291bnQobmV3UGFnZUNvdW50KTtcbiAgICAgICAgICAgIGlmIChhY3RpdmVQYWdlID49IG5ld1BhZ2VDb3VudCkge1xuICAgICAgICAgICAgICBzZXRBY3RpdmVQYWdlKDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzcG9uc2UuZG9jcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBBUEkgcmVzcG9uc2VcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHtcbiAgICAgIGtlZXBQcmV2aW91c0RhdGE6IHRydWUsXG4gICAgfSAvLyBTZWU6IGh0dHBzOi8vcmVhY3QtcXVlcnktdjMudGFuc3RhY2suY29tL2d1aWRlcy9wYWdpbmF0ZWQtcXVlcmllc1xuICApO1xuXG4gIGZ1bmN0aW9uIG9uQ2hhbmdlSXRlbXNQZXJQYWdlKG5ld0l0ZW1zUGVyUGFnZTogbnVtYmVyKSB7XG4gICAgc2V0QWN0aXZlUGFnZShcbiAgICAgIE1hdGguZmxvb3IoKGFjdGl2ZVBhZ2UgKiBpdGVtc1BlclBhZ2UgKyAxKSAvIG5ld0l0ZW1zUGVyUGFnZSlcbiAgICApO1xuICAgIHNldEl0ZW1zUGVyUGFnZShuZXdJdGVtc1BlclBhZ2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlRXhhY3RNYXRjaCgpIHtcbiAgICBzZXRFeGFjdE1hdGNoKCFleGFjdE1hdGNoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZVNob3dPYnNvbGV0ZVRlcm1zKCkge1xuICAgIHNldFNob3dPYnNvbGV0ZVRlcm1zKCFzaG93T2Jzb2xldGVUZXJtcyk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckZpbHRlcihcbiAgICBjdXJyZW50T3B0aW9uczogRXVpU2VsZWN0YWJsZU9wdGlvbltdLFxuICAgIHNldE9wdGlvbnM6IEZ1bmN0aW9uXG4gICkge1xuICAgIGNvbnN0IG5ld09wdGlvbnMgPSBbLi4uY3VycmVudE9wdGlvbnNdO1xuICAgIHNldE9wdGlvbnMoXG4gICAgICBuZXdPcHRpb25zLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiAoe1xuICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgIGNoZWNrZWQ6IHVuZGVmaW5lZCxcbiAgICAgIH0pKVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckFsbEZpbHRlcnMoKSB7XG4gICAgY2xlYXJGaWx0ZXIoZmlsdGVyQnlUeXBlT3B0aW9ucywgc2V0RmlsdGVyQnlUeXBlT3B0aW9ucyk7XG4gICAgY2xlYXJGaWx0ZXIoZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsIHNldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybV90b19zZWFyY2hWYWx1ZShcbiAgICBzZWxlY3RlZE9wdGlvbjoge1xuICAgICAgbGFiZWw6IHN0cmluZztcbiAgICAgIGlyaT86IHN0cmluZztcbiAgICAgIG9udG9sb2d5X25hbWU/OiBzdHJpbmc7XG4gICAgICB0eXBlPzogc3RyaW5nO1xuICAgIH1bXVxuICApIHtcbiAgICBzZXRTZWFyY2hWYWx1ZShzZWxlY3RlZE9wdGlvblswXSA/IHNlbGVjdGVkT3B0aW9uWzBdLmxhYmVsIDogXCJcIik7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U2VhcmNoQmFyV2lkZ2V0XG4gICAgICAgIGFwaT17YXBpfVxuICAgICAgICBxdWVyeT17XCJcIn1cbiAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50PXsoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgICAgICB0cmFuc2Zvcm1fdG9fc2VhcmNoVmFsdWUoc2VsZWN0ZWRPcHRpb24pO1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInhsXCIgLz5cbiAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIiAvPlxuXG4gICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17M30gc3R5bGU9e3sgbWluV2lkdGg6IDI1MCB9fT5cbiAgICAgICAgICA8RXVpUGFuZWw+XG4gICAgICAgICAgICB7aXNTdWNjZXNzICYmIChcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgdHlwZVwiPlxuICAgICAgICAgICAgICAgIDxFdWlTZWxlY3RhYmxlXG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXtmaWx0ZXJCeVR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEZpbHRlckJ5VHlwZU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBsaXN0UHJvcHM9e3sgYm9yZGVyZWQ6IHRydWUgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7KGxpc3QpID0+IGxpc3R9XG4gICAgICAgICAgICAgICAgPC9FdWlTZWxlY3RhYmxlPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2lzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IHR5cGVcIj5cbiAgICAgICAgICAgICAgICA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2lzRXJyb3IgJiYgKFxuICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSB0eXBlXCI+XG4gICAgICAgICAgICAgICAgPEV1aVNlbGVjdGFibGVcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e1tdfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEZpbHRlckJ5VHlwZU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBsaXN0UHJvcHM9e3sgYm9yZGVyZWQ6IHRydWUgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7KGxpc3QpID0+IGxpc3R9XG4gICAgICAgICAgICAgICAgPC9FdWlTZWxlY3RhYmxlPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7aXNTdWNjZXNzICYmIChcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgb250b2xvZ3lcIj5cbiAgICAgICAgICAgICAgICA8RXVpU2VsZWN0YWJsZVxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17ZmlsdGVyQnlPbnRvbG9neU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBsaXN0UHJvcHM9e3sgYm9yZGVyZWQ6IHRydWUgfX1cbiAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7KGxpc3QsIHNlYXJjaCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgIHtzZWFyY2h9XG4gICAgICAgICAgICAgICAgICAgICAge2xpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0V1aVNlbGVjdGFibGU+XG4gICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgb250b2xvZ3lcIj5cbiAgICAgICAgICAgICAgICA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2lzRXJyb3IgJiYgKFxuICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSBvbnRvbG9neVwiPlxuICAgICAgICAgICAgICAgIDxFdWlTZWxlY3RhYmxlXG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXtbXX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIGxpc3RQcm9wcz17eyBib3JkZXJlZDogdHJ1ZSB9fVxuICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHsobGlzdCwgc2VhcmNoKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAge3NlYXJjaH1cbiAgICAgICAgICAgICAgICAgICAgICB7bGlzdH1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvRXVpU2VsZWN0YWJsZT5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPEV1aUJ1dHRvbkVtcHR5IG9uQ2xpY2s9e2NsZWFyQWxsRmlsdGVyc30+XG4gICAgICAgICAgICAgIENsZWFyIGFsbCBmaWx0ZXJzXG4gICAgICAgICAgICA8L0V1aUJ1dHRvbkVtcHR5PlxuICAgICAgICAgIDwvRXVpUGFuZWw+XG4gICAgICAgIDwvRXVpRmxleEl0ZW0+XG5cbiAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9ezd9PlxuICAgICAgICAgIDxFdWlQYW5lbCBjb2xvcj1cInRyYW5zcGFyZW50XCIgZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgPEV1aUZsZXhHcm91cD5cbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfT5cbiAgICAgICAgICAgICAgICA8RXVpU3dpdGNoXG4gICAgICAgICAgICAgICAgICBsYWJlbD1cIkV4YWN0IG1hdGNoXCJcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2V4YWN0TWF0Y2h9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dG9nZ2xlRXhhY3RNYXRjaH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPEV1aVN3aXRjaFxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJTaG93IG9ubHkgb2Jzb2xldGUgdGVybXNcIlxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17c2hvd09ic29sZXRlVGVybXN9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dG9nZ2xlU2hvd09ic29sZXRlVGVybXN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDwvRXVpRmxleEdyb3VwPlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJtXCIgLz5cblxuICAgICAgICAgICAgPEV1aVRleHQgc2l6ZT1cInhzXCIgc3R5bGU9e3sgcGFkZGluZzogXCIwIDhweFwiIH19PlxuICAgICAgICAgICAgICBTaG93aW5nIHtNYXRoLm1pbihhY3RpdmVQYWdlICogaXRlbXNQZXJQYWdlICsgMSwgdG90YWxJdGVtcyl9IHRve1wiIFwifVxuICAgICAgICAgICAgICB7TWF0aC5taW4oKGFjdGl2ZVBhZ2UgKyAxKSAqIGl0ZW1zUGVyUGFnZSwgdG90YWxJdGVtcyl9IG9me1wiIFwifVxuICAgICAgICAgICAgICB7dG90YWxJdGVtc30gcmVzdWx0c1xuICAgICAgICAgICAgPC9FdWlUZXh0PlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIgLz5cblxuICAgICAgICAgICAgPEV1aUhvcml6b250YWxSdWxlIG1hcmdpbj1cIm5vbmVcIiBzdHlsZT17eyBoZWlnaHQ6IDIgfX0gLz5cblxuICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG5cbiAgICAgICAgICAgIDxFdWlUYWJsZVBhZ2luYXRpb25cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlYXJjaCByZXN1bHQgcGFnaW5hdGlvblwiXG4gICAgICAgICAgICAgIHBhZ2VDb3VudD17cGFnZUNvdW50fVxuICAgICAgICAgICAgICBhY3RpdmVQYWdlPXthY3RpdmVQYWdlfVxuICAgICAgICAgICAgICBvbkNoYW5nZVBhZ2U9e3NldEFjdGl2ZVBhZ2V9XG4gICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZT17aXRlbXNQZXJQYWdlfVxuICAgICAgICAgICAgICBvbkNoYW5nZUl0ZW1zUGVyUGFnZT17b25DaGFuZ2VJdGVtc1BlclBhZ2V9XG4gICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnM9e2l0ZW1zUGVyUGFnZU9wdGlvbnN9XG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIgLz5cblxuICAgICAgICAgICAge3NlYXJjaFJlc3VsdHMgJiZcbiAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdDogYW55KSA9PiAoXG4gICAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17cmVzdWx0LmlkfT5cbiAgICAgICAgICAgICAgICAgIDxNZXRhZGF0YUNvbXBhY3RcbiAgICAgICAgICAgICAgICAgICAgYXBpPXthcGl9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdD17cmVzdWx0fVxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRMaW5rPXt0YXJnZXRMaW5rfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxFdWlTcGFjZXIgLz5cbiAgICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0V1aVBhbmVsPlxuICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0KFxuICBwcm9wczogU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBhbnksXG4gIGNhbGxiYWNrPzogKCkgPT4gdm9pZFxuKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0KHByb3BzOiBTZWFyY2hSZXN1bHRzTGlzdFdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgcXVlcnk9e3Byb3BzLnF1ZXJ5fVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIGluaXRpYWxJdGVtc1BlclBhZ2U9e3Byb3BzLmluaXRpYWxJdGVtc1BlclBhZ2V9XG4gICAgICAgICAgaXRlbXNQZXJQYWdlT3B0aW9ucz17cHJvcHMuaXRlbXNQZXJQYWdlT3B0aW9uc31cbiAgICAgICAgICB0YXJnZXRMaW5rPXtwcm9wcy50YXJnZXRMaW5rfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0LCBjcmVhdGVTZWFyY2hSZXN1bHRzTGlzdCB9O1xuIiwgImltcG9ydCB7XG4gIEV1aUNhcmQsXG4gIEV1aUZsZXhHcm91cCxcbiAgRXVpRmxleEl0ZW0sXG4gIEV1aVNwYWNlcixcbiAgRXVpVGl0bGUsXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIEJyZWFkY3J1bWJXaWRnZXQsXG4gIERlc2NyaXB0aW9uV2lkZ2V0LFxuICBJcmlXaWRnZXQsXG59IGZyb20gXCIuLi9NZXRhZGF0YVdpZGdldFwiO1xuaW1wb3J0IHsgTWV0YWRhdGFDb21wYWN0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBwbHVyYWxpemVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5cbmZ1bmN0aW9uIE1ldGFkYXRhQ29tcGFjdChwcm9wczogTWV0YWRhdGFDb21wYWN0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGksIHJlc3VsdCwgdGFyZ2V0TGluaywgLi4ucmVzdCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpQ2FyZFxuICAgICAgdGV4dEFsaWduPVwibGVmdFwiXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIGhyZWY9e1xuICAgICAgICB0YXJnZXRMaW5rXG4gICAgICAgICAgPyByZXN1bHQudHlwZSAhPSBcIm9udG9sb2d5XCJcbiAgICAgICAgICAgID8gdGFyZ2V0TGluayArXG4gICAgICAgICAgICAgIFwib250b2xvZ2llcy9cIiArXG4gICAgICAgICAgICAgIHJlc3VsdC5vbnRvbG9neV9uYW1lICtcbiAgICAgICAgICAgICAgXCIvXCIgK1xuICAgICAgICAgICAgICBwbHVyYWxpemVUeXBlKHJlc3VsdC50eXBlLCB0cnVlKSArXG4gICAgICAgICAgICAgIFwiP2lyaT1cIiArXG4gICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChyZXN1bHQuaXJpKVxuICAgICAgICAgICAgOiB0YXJnZXRMaW5rICsgXCJvbnRvbG9naWVzL1wiICsgcmVzdWx0Lm9udG9sb2d5X25hbWVcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgdGl0bGU9e1xuICAgICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICA8RXVpVGl0bGU+XG4gICAgICAgICAgICAgIDxoMj57cmVzdWx0LmxhYmVsfTwvaDI+XG4gICAgICAgICAgICA8L0V1aVRpdGxlPlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAge3Jlc3VsdC50eXBlICE9IFwib250b2xvZ3lcIiAmJiAoXG4gICAgICAgICAgICAgIDxCcmVhZGNydW1iV2lkZ2V0XG4gICAgICAgICAgICAgICAgYXBpPXthcGl9XG4gICAgICAgICAgICAgICAgaXJpPXtyZXN1bHQuaXJpfVxuICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Jlc3VsdC50eXBlfVxuICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Jlc3VsdC5vbnRvbG9neV9uYW1lfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgIH1cbiAgICA+XG4gICAgICB7cmVzdWx0LnR5cGUgIT0gXCJvbnRvbG9neVwiID8gPElyaVdpZGdldCBpcmk9e3Jlc3VsdC5pcml9IC8+IDogdW5kZWZpbmVkfVxuICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG4gICAgICA8RGVzY3JpcHRpb25XaWRnZXRcbiAgICAgICAgYXBpPXthcGl9XG4gICAgICAgIG9udG9sb2d5SWQ9e3Jlc3VsdC5vbnRvbG9neV9uYW1lfVxuICAgICAgICBpcmk9e3Jlc3VsdC5pcml9XG4gICAgICAgIHRoaW5nVHlwZT17cmVzdWx0LnR5cGV9XG4gICAgICAvPlxuICAgIDwvRXVpQ2FyZD5cbiAgKTtcbn1cblxuZXhwb3J0IHsgTWV0YWRhdGFDb21wYWN0IH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtcbiAgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5LFxuICBzaW5ndWxhcml6ZVR5cGUsXG59IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgRW50aXR5T250b0xpc3RXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vRW50aXR5T250b0xpc3RQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi9zdHlsZS90c3NTdHlsZXMuY3NzXCI7XG5pbXBvcnQgeyBFbnRpdHlUeXBlTmFtZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuXG4vLyBUT0RPOiBleGNsdWRlIG9udG9sb2dpZXMgaW4gd2hpY2ggdGhlIGVudGl0eSBpcyBkZWZpbmVkIGZyb20gdGhlIGJhZGdlIGxpc3RcbmZ1bmN0aW9uIEVudGl0eU9udG9MaXN0V2lkZ2V0KHByb3BzOiBFbnRpdHlPbnRvTGlzdFdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5LCBjbGFzc05hbWUgfSA9XG4gICAgcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNTdWNjZXNzLCBpc0Vycm9yLCBlcnJvciB9ID0gdXNlUXVlcnk8e1xuICAgIG9udG9MaXN0OiBzdHJpbmdbXTtcbiAgICBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZTtcbiAgICBsYWJlbDogc3RyaW5nO1xuICB9PihcbiAgICBbXCJlbnRpdHlPbnRvTGlzdFwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBvbnRvbGlzdDogc3RyaW5nW107XG4gICAgICBsZXQgcmVhbEVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lO1xuICAgICAgbGV0IGxhYmVsOiBzdHJpbmc7XG4gICAgICBpZiAodXNlTGVnYWN5KSB7XG4gICAgICAgIGNvbnN0IGVtYmVkZGVkID0gKFxuICAgICAgICAgIGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlSZXNwb25zZShcbiAgICAgICAgICAgIGlyaSxcbiAgICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgICApXG4gICAgICAgIClbXCJfZW1iZWRkZWRcIl07XG5cbiAgICAgICAgLy8gb2J0YWluIGRlZmluZWRCeSB0byBmaWx0ZXIgdGhlc2Ugb3V0IG9mIG9udG9saXN0XG4gICAgICAgIGNvbnN0IGRlZmluZWRCeSA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1cbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKGVudGl0eUluT250b2xvZ3k6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3k6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pO1xuXG4gICAgICAgIG9udG9saXN0ID0gZW1iZWRkZWRbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXVxuICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3k6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pXG4gICAgICAgICAgLmZpbHRlcigoZWxlbTogYW55KSA9PiAhZGVmaW5lZEJ5LmluY2x1ZGVzKGVsZW0pKTtcbiAgICAgICAgcmVhbEVudGl0eVR5cGUgPVxuICAgICAgICAgIGVudGl0eVR5cGUgfHxcbiAgICAgICAgICAoc2luZ3VsYXJpemVUeXBlKE9iamVjdC5rZXlzKGVtYmVkZGVkKVswXSkgYXMgRW50aXR5VHlwZU5hbWUpO1xuICAgICAgICBsYWJlbCA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1bMF1bXCJsYWJlbFwiXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoXG4gICAgICAgICAgaXJpLFxuICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICk7XG4gICAgICAgIG9udG9saXN0ID0gZW50aXR5XG4gICAgICAgICAgLmdldEFwcGVhcnNJbigpXG4gICAgICAgICAgLmZpbHRlcigoZWxlbTogYW55KSA9PiAhZW50aXR5LmdldERlZmluZWRCeSgpLmluY2x1ZGVzKGVsZW0pKTtcbiAgICAgICAgcmVhbEVudGl0eVR5cGUgPSBlbnRpdHlUeXBlIHx8IChlbnRpdHkuZ2V0VHlwZSgpIGFzIEVudGl0eVR5cGVOYW1lKTtcbiAgICAgICAgbGFiZWwgPSBlbnRpdHkuZ2V0TGFiZWwoKSB8fCBcIlwiO1xuICAgICAgfVxuICAgICAgb250b2xpc3QgPSBvbnRvbGlzdC5maWx0ZXIoKG9udG86IHN0cmluZykgPT4gb250byAhPSBvbnRvbG9neUlkKS5zb3J0KCk7XG4gICAgICByZXR1cm4geyBvbnRvTGlzdDogb250b2xpc3QsIGVudGl0eVR5cGU6IHJlYWxFbnRpdHlUeXBlLCBsYWJlbDogbGFiZWwgfTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmIChcbiAgICAgICAgPEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uXG4gICAgICAgICAgb250b2xpc3Q9e2RhdGEub250b0xpc3R9XG4gICAgICAgICAgZW50aXR5VHlwZT17ZGF0YS5lbnRpdHlUeXBlfVxuICAgICAgICAgIGxhYmVsPXtkYXRhLmxhYmVsfVxuICAgICAgICAgIGlyaT17aXJpfVxuICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIChcbiAgICAgICAgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJvbnRvbG9neSBsaXN0XCIpfTwvRXVpVGV4dD5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVudGl0eU9udG9MaXN0KFxuICBwcm9wczogRW50aXR5T250b0xpc3RXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEVudGl0eU9udG9MaXN0V2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRFbnRpdHlPbnRvTGlzdFdpZGdldChwcm9wczogRW50aXR5T250b0xpc3RXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiIGdsb2JhbFN0eWxlcz17ZmFsc2V9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxFbnRpdHlPbnRvTGlzdFdpZGdldFxuICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRW50aXR5T250b0xpc3RXaWRnZXQsIGNyZWF0ZUVudGl0eU9udG9MaXN0IH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtcbiAgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5LFxuICBzaW5ndWxhcml6ZVR5cGUsXG59IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgRW50aXR5RGVmaW5lZEJ5V2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9FbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi9zdHlsZS90c3NTdHlsZXMuY3NzXCI7XG5pbXBvcnQgeyBFbnRpdHlUeXBlTmFtZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuXG5mdW5jdGlvbiBFbnRpdHlEZWZpbmVkQnlXaWRnZXQocHJvcHM6IEVudGl0eURlZmluZWRCeVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5LCBjbGFzc05hbWUgfSA9XG4gICAgcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNTdWNjZXNzLCBpc0Vycm9yLCBlcnJvciB9ID0gdXNlUXVlcnk8e1xuICAgIG9udG9MaXN0OiBzdHJpbmdbXTtcbiAgICBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZTtcbiAgICBsYWJlbDogc3RyaW5nO1xuICB9PihcbiAgICBbXCJlbnRpdHlEZWZpbmVkQnlcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgb250b2xpc3Q6IHN0cmluZ1tdO1xuICAgICAgbGV0IHJlYWxFbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZTtcbiAgICAgIGxldCBsYWJlbDogc3RyaW5nO1xuICAgICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgICBjb25zdCBlbWJlZGRlZCA9IChcbiAgICAgICAgICBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5UmVzcG9uc2UoXG4gICAgICAgICAgICBpcmksXG4gICAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICAgICAgdXNlTGVnYWN5XG4gICAgICAgICAgKVxuICAgICAgICApW1wiX2VtYmVkZGVkXCJdO1xuICAgICAgICBvbnRvbGlzdCA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1cbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKGVudGl0eUluT250b2xvZ3k6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3k6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pO1xuICAgICAgICByZWFsRW50aXR5VHlwZSA9XG4gICAgICAgICAgZW50aXR5VHlwZSB8fFxuICAgICAgICAgIChzaW5ndWxhcml6ZVR5cGUoT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdKSBhcyBFbnRpdHlUeXBlTmFtZSk7XG4gICAgICAgIGxhYmVsID0gZW1iZWRkZWRbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXVswXVtcImxhYmVsXCJdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gYXdhaXQgb2xzQXBpLmdldEVudGl0eU9iamVjdChcbiAgICAgICAgICBpcmksXG4gICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICB1c2VMZWdhY3lcbiAgICAgICAgKTtcbiAgICAgICAgb250b2xpc3QgPSBlbnRpdHlcbiAgICAgICAgICAuZ2V0RGVmaW5lZEJ5KClcbiAgICAgICAgICAuZmlsdGVyKChvbnRvbG9neSkgPT4gb250b2xvZ3kgIT0gZW50aXR5LmdldE9udG9sb2d5SWQoKSk7XG4gICAgICAgIHJlYWxFbnRpdHlUeXBlID0gZW50aXR5VHlwZSB8fCAoZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZSk7XG4gICAgICAgIGxhYmVsID0gZW50aXR5LmdldExhYmVsKCkgfHwgXCJcIjtcbiAgICAgIH1cbiAgICAgIG9udG9saXN0ID0gb250b2xpc3Quc29ydCgpO1xuICAgICAgcmV0dXJuIHsgb250b0xpc3Q6IG9udG9saXN0LCBlbnRpdHlUeXBlOiByZWFsRW50aXR5VHlwZSwgbGFiZWw6IGxhYmVsIH07XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiAoXG4gICAgICAgIDxFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb25cbiAgICAgICAgICBvbnRvbGlzdD17ZGF0YS5vbnRvTGlzdH1cbiAgICAgICAgICBlbnRpdHlUeXBlPXtkYXRhLmVudGl0eVR5cGV9XG4gICAgICAgICAgbGFiZWw9e2RhdGEubGFiZWx9XG4gICAgICAgICAgaXJpPXtpcml9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIC8+fVxuICAgICAge2lzRXJyb3IgJiYgKFxuICAgICAgICA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcIm9udG9sb2d5IGxpc3RcIil9PC9FdWlUZXh0PlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW50aXR5RGVmaW5lZEJ5KFxuICBwcm9wczogRW50aXR5RGVmaW5lZEJ5V2lkZ2V0UHJvcHMsXG4gIGNvbnRhaW5lcjogRWxlbWVudCxcbiAgY2FsbGJhY2s/OiAoKSA9PiB2b2lkXG4pIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRFbnRpdHlEZWZpbmVkQnlXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEVudGl0eURlZmluZWRCeVdpZGdldChwcm9wczogRW50aXR5RGVmaW5lZEJ5V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIiBnbG9iYWxTdHlsZXM9e2ZhbHNlfT5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8RW50aXR5RGVmaW5lZEJ5V2lkZ2V0XG4gICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBFbnRpdHlEZWZpbmVkQnlXaWRnZXQsIGNyZWF0ZUVudGl0eURlZmluZWRCeSB9O1xuIiwgImltcG9ydCBSZWFjdCwgeyBSZWFjdEVsZW1lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnkgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7XG4gIEV1aUNhcmQsXG4gIEV1aUZsZXhJdGVtLFxuICBFdWlMb2FkaW5nU3Bpbm5lcixcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aVNwYWNlcixcbiAgRXVpVGV4dCxcbn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtcbiAgQ2xhc3MsXG4gIEVudGl0eSxcbiAgSW5kaXZpZHVhbCxcbiAgUHJvcGVydHksXG4gIFRoaW5nLFxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtcbiAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYLFxuICBnZXRFbnRpdHlMaW5rSlNYLFxuICBnZXRSZWlmaWVkSlNYLFxuICBnZXRTZWN0aW9uTGlzdEpTWCxcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL1N0cnVjdHVyZVJlbmRlcmluZ1wiO1xuaW1wb3J0IHtcbiAgaXNDbGFzcyxcbiAgaXNJbmRpdmlkdWFsLFxuICBpc1Byb3BlcnR5LFxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi8uLi8uLi9tb2RlbC9SZWlmaWVkXCI7XG5pbXBvcnQge1xuICBhc0FycmF5LFxuICBjYXBpdGFsaXplLFxuICBnZXRFbnRpdHlUeXBlTmFtZSxcbiAgcmFuZG9tU3RyaW5nLFxufSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgREVGQVVMVF9IQVNfVElUTEUgPSB0cnVlO1xuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgdHlwZSBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGluZGl2aWR1YWxcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbFR5cGVzU2VjdGlvbkpTWChcbiAgaW5kaXZpZHVhbDogSW5kaXZpZHVhbCxcbiAgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzXG4pOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCB0eXBlcyA9IGluZGl2aWR1YWxcbiAgICAuZ2V0UmRmVHlwZXMoKVxuICAgIC5maWx0ZXIoXG4gICAgICAoZWxlbTogc3RyaW5nKSA9PlxuICAgICAgICBlbGVtICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI05hbWVkSW5kaXZpZHVhbFwiICYmXG4gICAgICAgICFlbGVtLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpXG4gICAgKTtcblxuICBpZiAoaW5kaXZpZHVhbC5nZXRSZGZUeXBlcygpLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICA8Yj5UeXBlPC9iPlxuICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1goXG4gICAgICAgICAgaW5kaXZpZHVhbCxcbiAgICAgICAgICBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgdHlwZXMsXG4gICAgICAgICAgcHJvcHMuc2hvd0JhZGdlcyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgIH1cbiAgICAgICAgKX1cbiAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgc2FtZSBhcyBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGluZGl2aWR1YWxcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbFNhbWVBc1NlY3Rpb25KU1goXG4gIGluZGl2aWR1YWw6IEluZGl2aWR1YWwsXG4gIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wc1xuKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2FtZUFzID0gaW5kaXZpZHVhbC5nZXRTYW1lQXMoKTtcblxuICBpZiAoc2FtZUFzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICA8Yj5TYW1lIEFzPC9iPlxuICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1goXG4gICAgICAgICAgaW5kaXZpZHVhbCxcbiAgICAgICAgICBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgc2FtZUFzLFxuICAgICAgICAgIHByb3BzLnNob3dCYWRnZXMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICB9XG4gICAgICAgICl9XG4gICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGRpZmZlcmVudCBmcm9tIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gaW5kaXZpZHVhbFxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRJbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb25KU1goXG4gIGluZGl2aWR1YWw6IEluZGl2aWR1YWwsXG4gIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wc1xuKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGlmZmVyZW50RnJvbSA9IGluZGl2aWR1YWwuZ2V0RGlmZmVyZW50RnJvbSgpO1xuXG4gIGlmIChkaWZmZXJlbnRGcm9tLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPEV1aVNwYWNlciAvPlxuICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgPGI+RGlmZmVyZW50IGZyb208L2I+XG4gICAgICAgICAge2dldFNlY3Rpb25MaXN0SlNYKFxuICAgICAgICAgICAgaW5kaXZpZHVhbCxcbiAgICAgICAgICAgIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSxcbiAgICAgICAgICAgIGRpZmZlcmVudEZyb20sXG4gICAgICAgICAgICBwcm9wcy5zaG93QmFkZ2VzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LFxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApfVxuICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgZGlzam9pbnQgd2l0aCBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGVudGl0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXREaXNqb2ludFdpdGhTZWN0aW9uSlNYKFxuICBlbnRpdHk6IFByb3BlcnR5IHwgQ2xhc3MsXG4gIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wc1xuKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGlzam9pbnRXaXRoID0gZW50aXR5LmdldERpc2pvaW50V2l0aCgpO1xuXG4gIGlmIChkaXNqb2ludFdpdGgubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgIDxiPkRpc2pvaW50IHdpdGg8L2I+XG4gICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChcbiAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgZW50aXR5LmdldExpbmtlZEVudGl0aWVzKCksXG4gICAgICAgICAgZGlzam9pbnRXaXRoLFxuICAgICAgICAgIHByb3BzLnNob3dCYWRnZXMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICB9XG4gICAgICAgICl9XG4gICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGludmVyc2Ugb2Ygc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUludmVyc2VPZlNlY3Rpb25KU1goXG4gIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzXG4pOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBpbnZlcnNlT2ZzID0gcHJvcGVydHkuZ2V0SW52ZXJzZU9mKCk7XG5cbiAgaWYgKGludmVyc2VPZnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgIDxiPkludmVyc2Ugb2Y8L2I+XG4gICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChcbiAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgIGludmVyc2VPZnMsXG4gICAgICAgICAgcHJvcHMuc2hvd0JhZGdlcyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgIH1cbiAgICAgICAgKX1cbiAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyBvbmUgcHJvcGVydHkgY2hhaW4gSlNYIGVsZW1lbnQuIElzIHVzZWQgZm9yIHtAbGluayBnZXRQcm9wZXJ0eUNoYWluU2VjdGlvbkpTWH0uXG4gKiBAcGFyYW0gcHJvcGVydHlDaGFpbiB0aGUgcHJvcGVydHkgY2hhaW5cbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BzICAgICB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnRbXX0gdGhlIGNoYWlucyBKU1ggZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUNoYWluSlNYKFxuICBwcm9wZXJ0eUNoYWluOiBhbnlbXSxcbiAgcHJvcGVydHk6IFByb3BlcnR5LFxuICBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHNcbik6IFJlYWN0RWxlbWVudFtdIHtcbiAgcmV0dXJuIGFzQXJyYXkocHJvcGVydHlDaGFpbilcbiAgICAuc2xpY2UoKVxuICAgIC5yZXZlcnNlKClcbiAgICAubWFwKChwcm9wZXJ0eUV4cHIsIGkpID0+IHtcbiAgICAgIC8vIHVzaW5nIC5zbGljZSgpIGhlcmUgaXMgaW1wb3J0YW50IGJlY2F1c2UgYSBtdXRhdGlvbiBvZiBwcm9wZXJ0eUNoYWluIHdvdWxkIHRyaWdnZXIgYSB1c2VRdWVyeSgpXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBrZXk9e3Byb3BlcnR5RXhwcn0+XG4gICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSxcbiAgICAgICAgICAgIHByb3BlcnR5RXhwcixcbiAgICAgICAgICAgIHByb3BzLnNob3dCYWRnZXMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICl9XG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIHtpIDwgYXNBcnJheShwcm9wZXJ0eUNoYWluKS5sZW5ndGggLSAxICYmIChcbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIiB9fT5cbiAgICAgICAgICAgICAgICAmbmJzcDsmIzk2NjY7Jm5ic3A7XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBwcm9wZXJ0eSBjaGFpbnMgc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUNoYWluU2VjdGlvbkpTWChcbiAgcHJvcGVydHk6IFByb3BlcnR5LFxuICBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHNcbik6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHByb3BlcnR5Q2hhaW5zID0gcHJvcGVydHlcbiAgICAuZ2V0UHJvcGVydHlDaGFpbnMoKVxuICAgIC5tYXAoKHJlaWZpZWQ6IFJlaWZpZWQ8YW55PikgPT4gcmVpZmllZC52YWx1ZSk7XG5cbiAgY29uc3QgaGFzTXVsdGlwbGVDaGFpbnMgPVxuICAgIHByb3BlcnR5Q2hhaW5zLmZpbHRlcigoZWxlbTogYW55KSA9PiBBcnJheS5pc0FycmF5KGVsZW0pKS5sZW5ndGggPiAwO1xuXG4gIGlmIChwcm9wZXJ0eUNoYWlucy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgPGI+eyFoYXNNdWx0aXBsZUNoYWlucyA/IFwiUHJvcGVydHkgY2hhaW5cIiA6IFwiUHJvcGVydHkgY2hhaW5zXCJ9PC9iPlxuICAgICAgICB7IWhhc011bHRpcGxlQ2hhaW5zID8gKFxuICAgICAgICAgIDxwPntnZXRQcm9wZXJ0eUNoYWluSlNYKHByb3BlcnR5Q2hhaW5zLCBwcm9wZXJ0eSwgcHJvcHMpfTwvcD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICB7cHJvcGVydHlDaGFpbnMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0UHJvcGVydHlDaGFpbkpTWChpdGVtLCBwcm9wZXJ0eSwgcHJvcHMpfVxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGVxdWl2YWxlbnQgdG8gc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBlbnRpdHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0RW50aXR5RXF1aXZhbGVudFRvU2VjdGlvbkpTWChcbiAgZW50aXR5OiBQcm9wZXJ0eSB8IENsYXNzLFxuICBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHNcbik6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGVxdWl2YWxlbnRzID0gZW50aXR5LmdldEVxdWl2YWxlbnRzKCk7XG5cbiAgaWYgKGVxdWl2YWxlbnRzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICA8Yj5FcXVpdmFsZW50IHRvPC9iPlxuICAgICAgICB7ZXF1aXZhbGVudHMubGVuZ3RoID09PSAxID8gKFxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAge2dldFJlaWZpZWRKU1goZW50aXR5LCBlcXVpdmFsZW50c1swXSwgcHJvcHMuc2hvd0JhZGdlcywge1xuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LFxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICB7ZXF1aXZhbGVudHMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0UmVpZmllZEpTWChlbnRpdHksIGl0ZW0sIHByb3BzLnNob3dCYWRnZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHN1YmVudGl0eSBvZiBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGVudGl0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRTdWJFbnRpdHlPZlNlY3Rpb25KU1goXG4gIGVudGl0eTogUHJvcGVydHkgfCBDbGFzcyxcbiAgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzXG4pOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBzdXBlckVudGl0aWVzID0gZW50aXR5LmdldFN1cGVyRW50aXRpZXMoKTtcblxuICBpZiAoc3VwZXJFbnRpdGllcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgPGI+U3Vie2VudGl0eS5nZXRUeXBlKCl9IG9mPC9iPlxuICAgICAgICB7c3VwZXJFbnRpdGllcy5sZW5ndGggPT09IDEgPyAoXG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICB7Z2V0UmVpZmllZEpTWChlbnRpdHksIHN1cGVyRW50aXRpZXNbMF0sIHByb3BzLnNob3dCYWRnZXMsIHtcbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAge3N1cGVyRW50aXRpZXMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0UmVpZmllZEpTWChlbnRpdHksIGl0ZW0sIHByb3BzLnNob3dCYWRnZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8cD48L3A+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHJlbGF0ZWQgZnJvbSBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGVudGl0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRFbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb25KU1goXG4gIGVudGl0eTogUHJvcGVydHkgfCBDbGFzcyxcbiAgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzXG4pOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCByZWxhdGVkRnJvbXMgPSBlbnRpdHkuZ2V0UmVsYXRlZEZyb20oKTtcbiAgY29uc3QgcHJlZGljYXRlczogc3RyaW5nW10gPSBBcnJheS5mcm9tKFxuICAgIG5ldyBTZXQoXG4gICAgICByZWxhdGVkRnJvbXMubWFwKChlbGVtOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIGVsZW0udmFsdWVbXCJwcm9wZXJ0eVwiXTtcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIGlmIChyZWxhdGVkRnJvbXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgIDxiPlJlbGF0ZWQgZnJvbTwvYj5cbiAgICAgICAge3ByZWRpY2F0ZXMubWFwKChwKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXRMYWJlbEZvcklyaShwKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBrZXk9e3AudG9TdHJpbmcoKSArIHJhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8YSBzdHlsZT17eyBjb2xvcjogXCJibGFja1wiIH19IGhyZWY9e3B9PlxuICAgICAgICAgICAgICAgICAgPGk+e2xhYmVsIHx8IHB9PC9pPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPHVsIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogMCB9fT5cbiAgICAgICAgICAgICAgICAgIHtyZWxhdGVkRnJvbXNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZWxlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0udmFsdWVbXCJwcm9wZXJ0eVwiXSA9PT0gcDtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoZWxlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0udmFsdWVbXCJ2YWx1ZVwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5zaG93QmFkZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDxwPjwvcD5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgIDxwPjwvcD4gey8qIFdvcmtzIGFzIGVtcHR5IHNwYWNlIGxlZnQgdG8gbmV4dCBzZWN0aW9uICovfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGNsYXNzIGluc3RhbmNlcyBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIHRlcm1cbiAqIEBwYXJhbSBpbnN0YW5jZXMgYW4gYXJyYXkgb2YgdGhlIGNsYXNzZXMnIGluc3RhbmNlc1xuICogQHBhcmFtIHByb3BzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldENsYXNzSW5zdGFuY2VzU2VjdGlvbkpTWChcbiAgdGVybTogQ2xhc3MsXG4gIGluc3RhbmNlczogVGhpbmdbXSxcbiAgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzXG4pOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICBpZiAoaW5zdGFuY2VzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICB7PGI+SW5zdGFuY2VzPC9iPn1cbiAgICAgICAgPD5cbiAgICAgICAgICA8dWw+XG4gICAgICAgICAgICB7aW5zdGFuY2VzLm1hcCgoaW5zdGFuY2UpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChcbiAgICAgICAgICAgICAgICAgICAgdGVybSxcbiAgICAgICAgICAgICAgICAgICAgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5nZXRJcmkoKSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuc2hvd0JhZGdlcyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgICA8cD48L3A+XG4gICAgICAgIDwvPlxuICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIEVudGl0eVJlbGF0aW9uc1dpZGdldChwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBjb25zdCB7XG4gICAgYXBpLFxuICAgIGlyaSxcbiAgICBvbnRvbG9neUlkLFxuICAgIGhhc1RpdGxlID0gREVGQVVMVF9IQVNfVElUTEUsXG4gICAgc2hvd0JhZGdlcyxcbiAgICBlbnRpdHlUeXBlLFxuICAgIHBhcmFtZXRlcixcbiAgICBvbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLFxuICAgIG9uTmF2aWdhdGVUb09udG9sb2d5LFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAvKipcbiAgICogVXNlZCB0byBmZXRjaCBhbiBlbnRpdGllcycgZGF0YSB0byBiZSBzaG93biBpbiBkaWZmZXJlbnQgc2VjdGlvbnNcbiAgICovXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBlbnRpdHksXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdFbnRpdHlSZWxhdGlvbixcbiAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc0VudGl0eVJlbGF0aW9uLFxuICAgIGlzRXJyb3I6IGlzRXJyb3JFbnRpdHlSZWxhdGlvbixcbiAgfSA9IHVzZVF1ZXJ5KFxuICAgIFtcImVudGl0eUpzb25cIiwgYXBpLCBpcmksIG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIHBhcmFtZXRlciwgc2hvd0JhZGdlc10sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoXG4gICAgICAgIGlyaSxcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICBmYWxzZVxuICAgICAgKTsgLy8gYWx3YXlzIHVzZSB2Mi8gQVBJXG4gICAgfVxuICApO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGZldGNoIGEgY2xhc3NlcyBpbnN0YW5jZXMgdG8gYmUgc2hvd24gaW4gY2xhc3MgaW5zdGFuY2VzIHNlY3Rpb25cbiAgICovXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBpbnN0YW5jZXMsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdJbnN0YW5jZXMsXG4gICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NJbnN0YW5jZXMsXG4gIH0gPSB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IFtcImluc3RhbmNlc1wiLCBlbnRpdHldLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBlbnRpdHkgJiYgaXNDbGFzcyhlbnRpdHkpICYmIGVudGl0eS5oYXNEaXJlY3RDaGlsZHJlbigpXG4gICAgICAgID8gb2xzQXBpLmdldENsYXNzSW5zdGFuY2VzKGVudGl0eS5nZXRJcmkoKSwgZW50aXR5LmdldE9udG9sb2d5SWQoKSlcbiAgICAgICAgOiBbXTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhZW50aXR5LFxuICB9KTtcblxuICBmdW5jdGlvbiByZW5kZXJTZWN0aW9ucyhcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBpbnN0YW5jZXM6IEluZGl2aWR1YWxbXVxuICApOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IHNlY3Rpb25MaXN0OiBSZWFjdEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgaWYgKGlzSW5kaXZpZHVhbChlbnRpdHkpKSB7XG4gICAgICBjb25zdCBpbmRpdmlkdWFsVHlwZXNTZWN0aW9uID0gZ2V0SW5kaXZpZHVhbFR5cGVzU2VjdGlvbkpTWChcbiAgICAgICAgZW50aXR5LFxuICAgICAgICBwcm9wc1xuICAgICAgKTtcbiAgICAgIGlmIChpbmRpdmlkdWFsVHlwZXNTZWN0aW9uICE9IHVuZGVmaW5lZClcbiAgICAgICAgc2VjdGlvbkxpc3QucHVzaChpbmRpdmlkdWFsVHlwZXNTZWN0aW9uKTtcblxuICAgICAgY29uc3QgaW5kaXZpZHVhbFNhbWVBc1NlY3Rpb24gPSBnZXRJbmRpdmlkdWFsU2FtZUFzU2VjdGlvbkpTWChcbiAgICAgICAgZW50aXR5LFxuICAgICAgICBwcm9wc1xuICAgICAgKTtcbiAgICAgIGlmIChpbmRpdmlkdWFsU2FtZUFzU2VjdGlvbiAhPSB1bmRlZmluZWQpXG4gICAgICAgIHNlY3Rpb25MaXN0LnB1c2goaW5kaXZpZHVhbFNhbWVBc1NlY3Rpb24pO1xuXG4gICAgICBjb25zdCBpbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb24gPVxuICAgICAgICBnZXRJbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICBpZiAoaW5kaXZpZHVhbERpZmZlcmVudEZyb21TZWN0aW9uICE9IHVuZGVmaW5lZClcbiAgICAgICAgc2VjdGlvbkxpc3QucHVzaChpbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb24pO1xuICAgIH1cbiAgICBpZiAoaXNQcm9wZXJ0eShlbnRpdHkpIHx8IGlzQ2xhc3MoZW50aXR5KSkge1xuICAgICAgY29uc3QgZGlzam9pbnRXaXRoU2VjdGlvbiA9IGdldERpc2pvaW50V2l0aFNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICBpZiAoZGlzam9pbnRXaXRoU2VjdGlvbiAhPSB1bmRlZmluZWQpXG4gICAgICAgIHNlY3Rpb25MaXN0LnB1c2goZGlzam9pbnRXaXRoU2VjdGlvbik7XG4gICAgfVxuICAgIGlmIChpc1Byb3BlcnR5KGVudGl0eSkpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbiA9IGdldFByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbkpTWChcbiAgICAgICAgZW50aXR5LFxuICAgICAgICBwcm9wc1xuICAgICAgKTtcbiAgICAgIGlmIChwcm9wZXJ0eUludmVyc2VPZlNlY3Rpb24gIT0gdW5kZWZpbmVkKVxuICAgICAgICBzZWN0aW9uTGlzdC5wdXNoKHByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbik7XG5cbiAgICAgIGNvbnN0IHByb3BlcnR5Q2hhaW5TZWN0aW9uID0gZ2V0UHJvcGVydHlDaGFpblNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICBpZiAocHJvcGVydHlDaGFpblNlY3Rpb24gIT0gdW5kZWZpbmVkKVxuICAgICAgICBzZWN0aW9uTGlzdC5wdXNoKHByb3BlcnR5Q2hhaW5TZWN0aW9uKTtcbiAgICB9XG4gICAgaWYgKGlzUHJvcGVydHkoZW50aXR5KSB8fCBpc0NsYXNzKGVudGl0eSkpIHtcbiAgICAgIGNvbnN0IGVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb24gPSBnZXRFbnRpdHlFcXVpdmFsZW50VG9TZWN0aW9uSlNYKFxuICAgICAgICBlbnRpdHksXG4gICAgICAgIHByb3BzXG4gICAgICApO1xuICAgICAgaWYgKGVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb24gIT0gdW5kZWZpbmVkKVxuICAgICAgICBzZWN0aW9uTGlzdC5wdXNoKGVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb24pO1xuXG4gICAgICBjb25zdCBzdWJFbnRpdHlPZlNlY3Rpb24gPSBnZXRTdWJFbnRpdHlPZlNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICBpZiAoc3ViRW50aXR5T2ZTZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChzdWJFbnRpdHlPZlNlY3Rpb24pO1xuXG4gICAgICBjb25zdCBlbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb24gPSBnZXRFbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb25KU1goXG4gICAgICAgIGVudGl0eSxcbiAgICAgICAgcHJvcHNcbiAgICAgICk7XG4gICAgICBpZiAoZW50aXR5UmVsYXRlZEZyb21TZWN0aW9uICE9IHVuZGVmaW5lZClcbiAgICAgICAgc2VjdGlvbkxpc3QucHVzaChlbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb24pO1xuICAgIH1cbiAgICBpZiAoaXNDbGFzcyhlbnRpdHkpKSB7XG4gICAgICBjb25zdCBjbGFzc0luc3RhbmNlc1NlY3Rpb24gPSBnZXRDbGFzc0luc3RhbmNlc1NlY3Rpb25KU1goXG4gICAgICAgIGVudGl0eSxcbiAgICAgICAgaW5zdGFuY2VzLFxuICAgICAgICBwcm9wc1xuICAgICAgKTtcbiAgICAgIGlmIChjbGFzc0luc3RhbmNlc1NlY3Rpb24gIT0gdW5kZWZpbmVkKVxuICAgICAgICBzZWN0aW9uTGlzdC5wdXNoKGNsYXNzSW5zdGFuY2VzU2VjdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHNlY3Rpb25MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiA8RXVpVGV4dCB7Li4ucmVzdH0+e3NlY3Rpb25MaXN0fTwvRXVpVGV4dD47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiA8RXVpVGV4dCB7Li4ucmVzdH0+Tm8gcmVsYXRpb25zIGF2YWlsYWJsZS48L0V1aVRleHQ+O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxFdWlDYXJkXG4gICAgICAgIHRpdGxlPXtcbiAgICAgICAgICBoYXNUaXRsZVxuICAgICAgICAgICAgPyAoZW50aXR5VHlwZVxuICAgICAgICAgICAgICAgID8gY2FwaXRhbGl6ZShnZXRFbnRpdHlUeXBlTmFtZShlbnRpdHlUeXBlKSlcbiAgICAgICAgICAgICAgICA6IGlzU3VjY2Vzc0VudGl0eVJlbGF0aW9uICYmIGVudGl0eVxuICAgICAgICAgICAgICAgID8gY2FwaXRhbGl6ZShlbnRpdHkuZ2V0VHlwZSgpKVxuICAgICAgICAgICAgICAgIDogXCJcIikgKyBcIiBSZWxhdGlvbnNcIlxuICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgIH1cbiAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICA+XG4gICAgICAgIHsoaXNMb2FkaW5nRW50aXR5UmVsYXRpb24gfHwgaXNMb2FkaW5nSW5zdGFuY2VzKSAmJiAoXG4gICAgICAgICAgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9e1wic1wifSAvPlxuICAgICAgICApfVxuICAgICAgICB7aXNFcnJvckVudGl0eVJlbGF0aW9uICYmIChcbiAgICAgICAgICA8RXVpVGV4dD5SZXF1ZXN0ZWQgcmVzb3VyY2Ugbm90IGF2YWlsYWJsZTwvRXVpVGV4dD5cbiAgICAgICAgKX1cbiAgICAgICAge2lzU3VjY2Vzc0VudGl0eVJlbGF0aW9uICYmXG4gICAgICAgICAgaXNTdWNjZXNzSW5zdGFuY2VzICYmXG4gICAgICAgICAgZW50aXR5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBpbnN0YW5jZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHJlbmRlclNlY3Rpb25zKGVudGl0eSwgaW5zdGFuY2VzKX1cbiAgICAgIDwvRXVpQ2FyZD5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW50aXR5UmVsYXRpb25zKFxuICBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMsXG4gIGNvbnRhaW5lcjogRWxlbWVudCxcbiAgY2FsbGJhY2s/OiAoKSA9PiB2b2lkXG4pIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRFbnRpdHlSZWxhdGlvbnNXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEVudGl0eVJlbGF0aW9uc1dpZGdldChwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8RW50aXR5UmVsYXRpb25zV2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICBoYXNUaXRsZT17cHJvcHMuaGFzVGl0bGV9XG4gICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICBzaG93QmFkZ2VzPXtwcm9wcy5zaG93QmFkZ2VzfVxuICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e3Byb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBjcmVhdGVFbnRpdHlSZWxhdGlvbnMsIEVudGl0eVJlbGF0aW9uc1dpZGdldCB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBUZXJtRGVwaWN0aW9uV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgdXNlUXVlcnksIFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyIH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge1xuICBFdWlMb2FkaW5nU3Bpbm5lcixcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aVRleHQsXG4gIEV1aUltYWdlLFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcblxuZnVuY3Rpb24gVGVybURlcGljdGlvbldpZGdldChwcm9wczogVGVybURlcGljdGlvbldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgYXBpLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeSB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNTdWNjZXNzLCBpc0Vycm9yLCBlcnJvciB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcInRlcm1EZXBpY3Rpb25cIiwgYXBpLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChpcmksIFwiY2xhc3NcIiwgb250b2xvZ3lJZCwgXCJcIiwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPn1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiBkYXRhLmdldERlcGljdGlvblVybCgpICYmIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8RXVpSW1hZ2VcbiAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgIGhhc1NoYWRvd1xuICAgICAgICAgICAgYWxsb3dGdWxsU2NyZWVuXG4gICAgICAgICAgICBhbHQ9e2RhdGEuZ2V0RGVwaWN0aW9uVXJsKCl9XG4gICAgICAgICAgICBzcmM9e2RhdGEuZ2V0RGVwaWN0aW9uVXJsKCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIDxzbWFsbD5DbGljayB0byBleHBhbmQuPC9zbWFsbD5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvPlxuICAgICAgKX1cbiAgICAgIHtpc0Vycm9yICYmIChcbiAgICAgICAgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJkZXBpY3Rpb25cIil9PC9FdWlUZXh0PlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVwaWN0aW9uKFxuICBwcm9wczogVGVybURlcGljdGlvbldpZGdldFByb3BzLFxuICBjb250YWluZXI6IEVsZW1lbnQsXG4gIGNhbGxiYWNrPzogKCkgPT4gdm9pZFxuKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkVGVybURlcGljdGlvbldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkVGVybURlcGljdGlvbldpZGdldChwcm9wczogVGVybURlcGljdGlvbldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPFRlcm1EZXBpY3Rpb25XaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZURlcGljdGlvbiwgVGVybURlcGljdGlvbldpZGdldCB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IEdyYXBoVmlld1dpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IHVzZVF1ZXJ5LCBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aUxvYWRpbmdTcGlubmVyLFxuICBFdWlUZXh0LFxuICBFdWlCdXR0b24sXG4gIEV1aVBhbmVsLFxuICBFdWlTd2l0Y2gsXG4gIEV1aVBvcG92ZXIsXG4gIEV1aUJ1dHRvbkVtcHR5LFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBOZXR3b3JrIH0gZnJvbSBcInZpcy1uZXR3b3JrXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcInZpcy1kYXRhXCI7XG5pbXBvcnQgeyBPbHNHcmFwaE5vZGUsIE9sc0dyYXBoRWRnZSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgSlNUcmVlTm9kZSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9zdHlsZS90czRuZmRpU3R5bGVzL3RzNG5mZGlHcmFwaFN0eWxlLmNzc1wiO1xuXG5mdW5jdGlvbiBHcmFwaFZpZXdXaWRnZXQocHJvcHM6IEdyYXBoVmlld1dpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgYXBpLCBpcmksIG9udG9sb2d5SWQsIHJvb3RXYWxrLCBjbGFzc05hbWUgfSA9IHByb3BzO1xuXG4gIGNvbnN0IFtzZWxlY3RlZElyaSwgc2V0U2VsZWN0ZWRJcmldID0gdXNlU3RhdGUoaXJpKTtcbiAgY29uc3QgW2ZpcnN0TG9hZCwgc2V0Rmlyc3RMb2FkXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZGJjbGlja2VkLCBzZXREYmNsaWNrZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcm9vdFdhbGtJc1NlbGVjdGVkLCBzZXRSb290V2Fsa0lzU2VsZWN0ZWRdID0gdXNlU3RhdGUoXG4gICAgcm9vdFdhbGsgPyByb290V2FsayA6IGZhbHNlXG4gICk7XG4gIGNvbnN0IFtpc1BvcG92ZXJPcGVuLCBzZXRJc1BvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAvLyBuZWVkZWQgZm9yIHVzZVF1ZXJ5LiB3aXRob3V0IGl0IHRoZSBncmFwaCB3b24ndCBnZXQgdXBkYXRlZCBvbiBzd2l0Y2hpbmcgYmVyd2VlbiByb290V2Fsaz10cnVlIGFuZCBmYWxzZS5cbiAgY29uc3QgW2NvdW50ZXIsIHNldENvdW50ZXJdID0gdXNlU3RhdGUoMCk7XG5cbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuICBjb25zdCBmaW5hbENsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcInRzNG5mZGktZ3JhcGgtc3R5bGVcIjtcblxuICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNFcnJvciwgZXJyb3IgfSA9IHVzZVF1ZXJ5KFxuICAgIFtcbiAgICAgIFwidGVybUdyYXBoXCIsXG4gICAgICBhcGksXG4gICAgICBzZWxlY3RlZElyaSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICByb290V2Fsa0lzU2VsZWN0ZWQsXG4gICAgICBkYmNsaWNrZWQsXG4gICAgICBjb3VudGVyLFxuICAgIF0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHJvb3RXYWxrSXNTZWxlY3RlZCAmJiBmaXJzdExvYWQpIHtcbiAgICAgICAgLy8gb25seSB1c2UgdGhpcyBjYWxsIG9uIGxvYWQuIERvdWJsZSBja2lja2luZyBvbiBhIG5vZGUgc2hvdWxkIGNhbGwgdGhlIG5vcm1hbCBnZXRUZXJtUmVsYXRpb25zIGZ1bmN0aW9uLlxuICAgICAgICByZXR1cm4gb2xzQXBpLmdldFRlcm1UcmVlKFxuICAgICAgICAgIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgdGVybUlyaTogaXJpIH0sXG4gICAgICAgICAgeyB2aWV3TW9kZTogXCJBbGxcIiwgc2libGluZ3M6IGZhbHNlIH0sXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChmaXJzdExvYWQgfHwgZGJjbGlja2VkKSB7XG4gICAgICAgIHJldHVybiBvbHNBcGkuZ2V0VGVybVJlbGF0aW9ucyh7XG4gICAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgICAgICB0ZXJtSXJpOiBzZWxlY3RlZElyaSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIGNvbnN0IG5vZGVzID0gdXNlUmVmKG5ldyBEYXRhU2V0KFtdKSk7XG4gIGNvbnN0IGVkZ2VzID0gdXNlUmVmKG5ldyBEYXRhU2V0KFtdKSk7XG4gIGNvbnN0IGdyYXBoTmV0d29yayA9IHVzZVJlZih7fSk7XG4gIGNvbnN0IGNvbnRhaW5lciA9IHVzZVJlZihudWxsKTtcblxuICBjb25zdCBncmFwaE5ldHdvcmtDb25maWcgPSB7XG4gICAgLyoqXG4gICAgICogZm9yIG1vcmUgb3B0aW9ucyBoYXZlIGEgbG9vayBhdDogaHR0cHM6Ly92aXNqcy5naXRodWIuaW8vdmlzLW5ldHdvcmsvZG9jcy9uZXR3b3JrLyNvcHRpb25zXG4gICAgICovXG4gICAgYXV0b1Jlc2l6ZTogdHJ1ZSxcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBsb2NhbGU6IFwiZW5cIixcbiAgICBsYXlvdXQ6IHtcbiAgICAgIHJhbmRvbVNlZWQ6IDEsXG4gICAgICBpbXByb3ZlZExheW91dDogdHJ1ZSxcbiAgICAgIGNsdXN0ZXJUaHJlc2hvbGQ6IDE1MCxcbiAgICB9LFxuICAgIHBoeXNpY3M6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBiYXJuZXNIdXQ6IHtcbiAgICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiAtMjAwMDAsXG4gICAgICAgIGNlbnRyYWxHcmF2aXR5OiAwLjMsXG4gICAgICAgIHNwcmluZ0xlbmd0aDogMTAsXG4gICAgICAgIHNwcmluZ0NvbnN0YW50OiAwLjA0LFxuICAgICAgICBkYW1waW5nOiAwLjA5LFxuICAgICAgICBhdm9pZE92ZXJsYXA6IDAsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgY2xhc3MgR3JhcGhOb2RlIHtcbiAgICBpZD86IHN0cmluZztcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBjb2xvcjoge1xuICAgICAgYmFja2dyb3VuZDogc3RyaW5nO1xuICAgICAgaGlnaGxpZ2h0OiB7XG4gICAgICAgIGJvcmRlcjogc3RyaW5nO1xuICAgICAgICBiYWNrZ3JvdW5kOiBzdHJpbmc7XG4gICAgICB9O1xuICAgIH07XG4gICAgc2hhcGU6IHN0cmluZztcbiAgICBmb250OiB7XG4gICAgICBjb2xvcjogc3RyaW5nO1xuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcih7IG5vZGUgfTogT2xzR3JhcGhOb2RlKSB7XG4gICAgICAvKipcbiAgICAgICAqIGZvciBtb3JlIG9wdGlvbnMgaGF2ZSBhIGxvb2sgYXQ6IGh0dHBzOi8vdmlzanMuZ2l0aHViLmlvL3Zpcy1uZXR3b3JrL2RvY3MvbmV0d29yay9ub2Rlcy5odG1sXG4gICAgICAgKi9cbiAgICAgIHRoaXMuaWQgPSBub2RlW1wiaXJpXCJdO1xuICAgICAgdGhpcy5sYWJlbCA9IG5vZGVbXCJsYWJlbFwiXTtcbiAgICAgIHRoaXMuY29sb3IgPSB7XG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzQ1NTQ2OVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHtcbiAgICAgICAgICBib3JkZXI6IFwiIzQwNDA0MFwiLFxuICAgICAgICAgIGJhY2tncm91bmQ6IFwiIzQwNDA0MFwiLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIHRoaXMuc2hhcGUgPSBcImJveFwiO1xuICAgICAgdGhpcy5mb250ID0ge1xuICAgICAgICBjb2xvcjogXCJ3aGl0ZVwiLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBjbGFzcyBHcmFwaEVkZ2Uge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGZyb20/OiBzdHJpbmc7XG4gICAgdG8/OiBzdHJpbmc7XG4gICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgYXJyb3dzPzoge1xuICAgICAgdG8/OiBib29sZWFuO1xuICAgIH07XG4gICAgd2lkdGg/OiBudW1iZXI7XG4gICAgY29sb3I/OiB7XG4gICAgICBjb2xvcj86IHN0cmluZztcbiAgICAgIGhpZ2hsaWdodD86IHN0cmluZztcbiAgICB9O1xuICAgIGZvbnQ/OiB7XG4gICAgICBzaXplPzogbnVtYmVyO1xuICAgIH07XG4gICAgZGFzaGVzPzogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHsgZWRnZSB9OiBPbHNHcmFwaEVkZ2UpIHtcbiAgICAgIGlmIChlZGdlW1wic291cmNlXCJdICYmIGVkZ2VbXCJ0YXJnZXRcIl0gJiYgZWRnZVtcInVyaVwiXSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogZm9yIG1vcmUgb3B0aW9ucyBoYXZlIGEgbG9vayBhdDogaHR0cHM6Ly92aXNqcy5naXRodWIuaW8vdmlzLW5ldHdvcmsvZG9jcy9uZXR3b3JrL2VkZ2VzLmh0bWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaWQgPSBlZGdlW1wic291cmNlXCJdICsgZWRnZVtcInRhcmdldFwiXSArIFwiJnVyaT1cIiArIGVkZ2VbXCJ1cmlcIl07XG4gICAgICAgIHRoaXMuZnJvbSA9IGVkZ2VbXCJzb3VyY2VcIl07XG4gICAgICAgIHRoaXMudG8gPSBlZGdlW1widGFyZ2V0XCJdO1xuICAgICAgICB0aGlzLmxhYmVsID0gZWRnZVtcImxhYmVsXCJdO1xuICAgICAgICB0aGlzLmFycm93cyA9IHsgdG86IHRydWUgfTtcbiAgICAgICAgdGhpcy53aWR0aCA9IDI7XG4gICAgICAgIHRoaXMuY29sb3IgPSB7XG4gICAgICAgICAgY29sb3I6IFwiZ3JheVwiLFxuICAgICAgICAgIGhpZ2hsaWdodDogXCIjMDA2MTdDXCIsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZm9udCA9IHtcbiAgICAgICAgICBzaXplOiAxNixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VG9PbHNHcmFwaEZvcm1hdChsaXN0T2ZKc1RyZWVOb2RlczogQXJyYXk8SlNUcmVlTm9kZT4pIHtcbiAgICAvLyB1c2VkIGZvciBjb252ZXJ0aW5nIHRoZSBsaXN0IG9mIGFuY2VzdG9ycyB0byB0aGUgb2xzIGFwaSBncmFwaCBlbmRwb2ludHMgZm9ybWF0LiB0byBiZSBjb25zdW1lZCBieSBHcmFwaE5vZGUgYW5kIEdyYXBoRWRnZSBjbGFzc2VzIGNvbnN0cnVjdG9yLlxuICAgIC8vIGN1cnJlbnRseSB1c2VkIGluIHNob3dpbmcgYW5jZXN0b3JzLiBFcXVpdmFsZW50IHRvIGlzLWEgcmVsYXRpb24uXG4gICAgbGV0IGRhdGE6IHsgbm9kZXM6IGFueVtdOyBlZGdlczogYW55W10gfSA9IHsgbm9kZXM6IFtdLCBlZGdlczogW10gfTtcbiAgICBsaXN0T2ZKc1RyZWVOb2Rlcy5tYXAoKHRyZWVOb2RlOiBKU1RyZWVOb2RlKSA9PiB7XG4gICAgICBpZiAoIWRhdGEubm9kZXMuZmluZCgob2JqKSA9PiBvYmouaXJpID09PSB0cmVlTm9kZS5pcmkpKSB7XG4gICAgICAgIGxldCBub2RlID0geyBpcmk6IHRyZWVOb2RlLmlyaSwgbGFiZWw6IHRyZWVOb2RlLnRleHQgfTtcbiAgICAgICAgZGF0YS5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgICAgbGV0IHBhcmVudE5vZGUgPSBsaXN0T2ZKc1RyZWVOb2Rlcy5maW5kKFxuICAgICAgICAob2JqOiBKU1RyZWVOb2RlKSA9PiBvYmouaWQgPT09IHRyZWVOb2RlLnBhcmVudFxuICAgICAgKTtcbiAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgIC8vIHBhcmVudCBkb2VzIG5vdCBleGlzdHMgLS0+ICcjJyBpZCB0aGF0IGluZGljYXRlcyBhIG5vZGUgaXMgYSByb290LlxuICAgICAgICBsZXQgZWRnZSA9IHtcbiAgICAgICAgICBzb3VyY2U6IHRyZWVOb2RlLmlyaSxcbiAgICAgICAgICB0YXJnZXQ6IHBhcmVudE5vZGUuaXJpLFxuICAgICAgICAgIGxhYmVsOiBcInN1YkNsYXNzT2ZcIixcbiAgICAgICAgICB1cmk6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YkNsYXNzT2ZcIixcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFkYXRhLmVkZ2VzLmZpbmQoXG4gICAgICAgICAgICAob2JqKSA9PiBvYmouc291cmNlID09PSBlZGdlLnNvdXJjZSAmJiBvYmoudGFyZ2V0ID09PSBlZGdlLnRhcmdldFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGF0YS5lZGdlcy5wdXNoKGVkZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBpZiAoZGF0YSAmJiAoZmlyc3RMb2FkIHx8IGRiY2xpY2tlZCkpIHtcbiAgICBsZXQgZ0RhdGEgPSBkYXRhO1xuICAgIGlmIChyb290V2Fsa0lzU2VsZWN0ZWQgJiYgZmlyc3RMb2FkKSB7XG4gICAgICBnRGF0YSA9IGNvbnZlcnRUb09sc0dyYXBoRm9ybWF0KGRhdGEpO1xuICAgIH1cbiAgICBmb3IgKGxldCBub2RlIG9mIGdEYXRhW1wibm9kZXNcIl0pIHtcbiAgICAgIGxldCBnTm9kZSA9IG5ldyBHcmFwaE5vZGUoeyBub2RlOiBub2RlIH0pO1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICBpZiAoIW5vZGVzLmN1cnJlbnQuZ2V0KGdOb2RlLmlkKSkge1xuICAgICAgICBpZiAoZ05vZGUuaWQgPT09IGlyaSAmJiByb290V2Fsa0lzU2VsZWN0ZWQpIHtcbiAgICAgICAgICBnTm9kZS5jb2xvci5iYWNrZ3JvdW5kID0gXCIjMEJCQkVGXCI7XG4gICAgICAgICAgZ05vZGUuZm9udC5jb2xvciA9IFwiYmxhY2tcIjtcbiAgICAgICAgfVxuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgbm9kZXMuY3VycmVudC5hZGQoZ05vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBlZGdlIG9mIGdEYXRhW1wiZWRnZXNcIl0pIHtcbiAgICAgIGxldCBnRWRnZSA9IG5ldyBHcmFwaEVkZ2UoeyBlZGdlOiBlZGdlIH0pO1xuICAgICAgbGV0IGRhc2hlZCA9XG4gICAgICAgIGVkZ2UudXJpID09PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCIgfHxcbiAgICAgICAgcm9vdFdhbGtJc1NlbGVjdGVkXG4gICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgIDogdHJ1ZTtcbiAgICAgIGdFZGdlLmRhc2hlcyA9IGRhc2hlZDtcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgaWYgKCFlZGdlcy5jdXJyZW50LmdldChnRWRnZS5pZCkpIHtcbiAgICAgICAgaWYgKGdFZGdlLmlkPy5pbmNsdWRlcyhpcmkpICYmIHJvb3RXYWxrSXNTZWxlY3RlZCkge1xuICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgIGdFZGdlLmNvbG9yLmNvbG9yID0gXCJibGFja1wiO1xuICAgICAgICB9XG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICBlZGdlcy5jdXJyZW50LmFkZChnRWRnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmaXJzdExvYWQpIHtcbiAgICAgIHNldEZpcnN0TG9hZChmYWxzZSk7XG4gICAgfVxuICAgIGlmIChkYmNsaWNrZWQpIHtcbiAgICAgIHNldERiY2xpY2tlZChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgbm9kZXMuY3VycmVudC5jbGVhcigpO1xuICAgIGVkZ2VzLmN1cnJlbnQuY2xlYXIoKTtcbiAgICBzZXRTZWxlY3RlZElyaShpcmkpO1xuICAgIHNldEZpcnN0TG9hZCh0cnVlKTtcbiAgICBzZXREYmNsaWNrZWQoZmFsc2UpO1xuICAgIHNldENvdW50ZXIoY291bnRlciArIDEpO1xuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgZ3JhcGhEYXRhID0geyBub2Rlczogbm9kZXMuY3VycmVudCwgZWRnZXM6IGVkZ2VzLmN1cnJlbnQgfTtcbiAgICAvL0B0cy1pZ25vcmVcbiAgICBncmFwaE5ldHdvcmsuY3VycmVudCA9IG5ldyBOZXR3b3JrKFxuICAgICAgY29udGFpbmVyLmN1cnJlbnQsXG4gICAgICBncmFwaERhdGEsXG4gICAgICBncmFwaE5ldHdvcmtDb25maWdcbiAgICApO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZ3JhcGhOZXR3b3JrLmN1cnJlbnQpIHtcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgZ3JhcGhOZXR3b3JrLmN1cnJlbnQub24oXCJkb3VibGVDbGlja1wiLCBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIGlmIChwYXJhbXMubm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxldCBub2RlSXJpID0gcGFyYW1zLm5vZGVzWzBdO1xuICAgICAgICAgIHNldFNlbGVjdGVkSXJpKG5vZGVJcmkpO1xuICAgICAgICAgIHNldERiY2xpY2tlZCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbZ3JhcGhOZXR3b3JrXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBsb2FkIHRoZSBncmFwaCBkYXRhIGFnYWluIHdoZW4gdGhlIHVzZXIgY2hhbmdlIHRoZSBtb2RlIHRvIHJvb3RXYWxrIGFuZCB2aWNlIHZlcnNhIE9SIGlucHV0IHByb3BzIGNoYW5nZXMuXG4gICAgcmVzZXQoKTtcbiAgfSwgW3Jvb3RXYWxrSXNTZWxlY3RlZCwgYXBpLCBvbnRvbG9neUlkLCBpcmldKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIHdoZW4gdXNlciBjaGFuZ2UgdGhlIHN0b3J5Ym9vayByb290V2FsayB2YWx1ZVxuICAgIHNldFJvb3RXYWxrSXNTZWxlY3RlZChyb290V2FsayA/IHJvb3RXYWxrIDogZmFsc2UpO1xuICB9LCBbcm9vdFdhbGtdKTtcblxuICBjb25zdCBvbkJ1dHRvbkNsaWNrID0gKCkgPT5cbiAgICBzZXRJc1BvcG92ZXJPcGVuKChpc1BvcG92ZXJPcGVuKSA9PiAhaXNQb3BvdmVyT3Blbik7XG4gIGNvbnN0IGNsb3NlUG9wb3ZlciA9ICgpID0+IHNldElzUG9wb3Zlck9wZW4oZmFsc2UpO1xuXG4gIGNvbnN0IGJ1dHRvbiA9IChcbiAgICA8RXVpQnV0dG9uRW1wdHlcbiAgICAgIGljb25UeXBlPVwiaUluQ2lyY2xlXCJcbiAgICAgIGljb25TaWRlPVwicmlnaHRcIlxuICAgICAgb25DbGljaz17b25CdXR0b25DbGlja31cbiAgICA+XG4gICAgICBHdWlkZSBtZVxuICAgIDwvRXVpQnV0dG9uRW1wdHk+XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9PlxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJncmFwaFwiKX08L0V1aVRleHQ+fVxuICAgICAgPEV1aVBhbmVsIHN0eWxlPXt7IGZvbnRTaXplOiAxMiB9fSBwYWRkaW5nU2l6ZT1cInNcIiBib3JkZXJSYWRpdXM9XCJub25lXCI+XG4gICAgICAgIDxFdWlCdXR0b24gc2l6ZT1cInNcIiBvbkNsaWNrPXtyZXNldH0+XG4gICAgICAgICAgUmVzZXRcbiAgICAgICAgPC9FdWlCdXR0b24+XG4gICAgICAgIDxFdWlQb3BvdmVyXG4gICAgICAgICAgYnV0dG9uPXtidXR0b259XG4gICAgICAgICAgaXNPcGVuPXtpc1BvcG92ZXJPcGVufVxuICAgICAgICAgIGNsb3NlUG9wb3Zlcj17Y2xvc2VQb3BvdmVyfVxuICAgICAgICA+XG4gICAgICAgICAgPEV1aVRleHQgc3R5bGU9e3sgd2lkdGg6IDMwMCwgcGFkZGluZzogMTAgfX0+XG4gICAgICAgICAgICA8bGk+WW91IGNhbiBleHBhbmQgdGhlIG5vZGVzIGJ5IGRvdWJsZSBjbGlja2luZyBvbiB0aGVtPC9saT5cbiAgICAgICAgICAgIDxsaT5Zb3UgY2FuIHpvb20gb3V0L2luIGJ5IHNjcm9sbGluZyBvbiB0aGUgZ3JhcGguPC9saT5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgWW91IGNhbiBnbyBiYWNrIHRvIHRoZSBpbml0aWFsIGdyYXBoIGJ5IGNsaWNraW5nIG9uIHRoZSBSZXNldFxuICAgICAgICAgICAgICBidXR0b24uXG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpPllvdSBjYW4gbW92ZSB0aGUgbm9kZXMgYW5kIGVkZ2VzIGFyb3VuZCBieSBkcmFnZ2luZy48L2xpPlxuICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICBSb290d2FsayB0b2dnbGUgZW5hYmxlIHRoZSByb290IHdhbGsgbW9kZSBpbiB0aGUgZ3JhcGgsIHdoZXJlIHlvdVxuICAgICAgICAgICAgICBjYW4gc2VlIHRoZSBwYXRoIGZyb20gcm9vdHMgdG8gdGhlIHRhcmdldCBub2RlLlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgIDwvRXVpUG9wb3Zlcj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IFwiaW5saW5lLWJsb2NrXCIsIGZsb2F0OiBcInJpZ2h0XCIsIHBhZGRpbmdUb3A6IDEwIH19XG4gICAgICAgID5cbiAgICAgICAgICA8RXVpU3dpdGNoXG4gICAgICAgICAgICBsYWJlbD1cInJvb3Qgd2Fsa1wiXG4gICAgICAgICAgICBjaGVja2VkPXtyb290V2Fsa0lzU2VsZWN0ZWR9XG4gICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4ge1xuICAgICAgICAgICAgICBzZXRSb290V2Fsa0lzU2VsZWN0ZWQoIXJvb3RXYWxrSXNTZWxlY3RlZCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdGl0bGU9XCJFbmFibGUgdGhlIHJvb3Qgd2FsayBtb2RlIGluIHRoZSBncmFwaDogWW91IGNhbiBzZWUgdGhlIHBhdGggZnJvbSByb290cyB0byB0aGUgdGFyZ2V0IG5vZGVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9FdWlQYW5lbD5cblxuICAgICAgPEV1aVBhbmVsXG4gICAgICAgIHN0eWxlPXt7IHdpZHRoOiA5MDAsIGhlaWdodDogOTAwIH19XG4gICAgICAgIGhhc1NoYWRvdz17ZmFsc2V9XG4gICAgICAgIGhhc0JvcmRlcj17dHJ1ZX1cbiAgICAgICAgYm9yZGVyUmFkaXVzPVwibm9uZVwiXG4gICAgICA+XG4gICAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJtXCIgLz59XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e2NvbnRhaW5lcn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJncmFwaC1jb250YWluZXJcIlxuICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiBcIjg1MHB4XCIsIGhlaWdodDogXCI4NTBweFwiLCBtYXJnaW46IFwiYXV0b1wiIH19XG4gICAgICAgIC8+XG4gICAgICA8L0V1aVBhbmVsPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVHcmFwaFZpZXcoXG4gIHByb3BzOiBHcmFwaFZpZXdXaWRnZXRQcm9wcyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEdyYXBoVmlld1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkR3JhcGhWaWV3V2lkZ2V0KHByb3BzOiBHcmFwaFZpZXdXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiIGdsb2JhbFN0eWxlcz17ZmFsc2V9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxHcmFwaFZpZXdXaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIHJvb3RXYWxrPXtwcm9wcy5yb290V2Fsa31cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBjcmVhdGVHcmFwaFZpZXcsIEdyYXBoVmlld1dpZGdldCB9O1xuIiwgImltcG9ydCB7IGNyZWF0ZUF1dG9jb21wbGV0ZSB9IGZyb20gXCIuL0F1dG9jb21wbGV0ZVdpZGdldC9BdXRvY29tcGxldGVXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZURhdGFDb250ZW50IH0gZnJvbSBcIi4vRGF0YUNvbnRlbnRXaWRnZXQvRGF0YUNvbnRlbnRXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUVudGl0eUluZm8gfSBmcm9tIFwiLi9FbnRpdHlJbmZvV2lkZ2V0L0VudGl0eUluZm9XaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUpzb25BcGkgfSBmcm9tIFwiLi9Kc29uQXBpV2lkZ2V0L0pzb25BcGlXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUJyZWFkY3J1bWIgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9CcmVhZGNydW1iV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZURlc2NyaXB0aW9uIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvRGVzY3JpcHRpb25XaWRnZXQvRGVzY3JpcHRpb25XaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUlyaSB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0lyaVdpZGdldC9JcmlXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9UYWJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUFsdGVybmF0aXZlTmFtZVRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVDcm9zc1JlZlRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9Dcm9zc1JlZldpZGdldC9Dcm9zc1JlZlRhYldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlSGllcmFyY2h5IH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0hpZXJhcmNoeVdpZGdldC9IaWVyYXJjaHlXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVRpdGxlIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGl0bGVXaWRnZXQvVGl0bGVXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZU1ldGFkYXRhIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvTWV0YWRhdGFXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZU9udG9sb2d5SW5mbyB9IGZyb20gXCIuL09udG9sb2d5SW5mb1dpZGdldC9PbnRvbG9neUluZm9XaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVJlc291cmNlcyB9IGZyb20gXCIuL1Jlc291cmNlc1dpZGdldC9SZXNvdXJjZXNXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVNlYXJjaEJhciB9IGZyb20gXCIuL1NlYXJjaEJhcldpZGdldC9TZWFyY2hCYXJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0IH0gZnJvbSBcIi4vU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUVudGl0eVJlbGF0aW9ucyB9IGZyb20gXCIuL0VudGl0eVJlbGF0aW9uc1dpZGdldC9FbnRpdHlSZWxhdGlvbnNXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZURlcGljdGlvbiB9IGZyb20gXCIuL1Rlcm1EZXBpY3Rpb25XaWRnZXQvVGVybURlcGljdGlvbldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlRW50aXR5T250b0xpc3QgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9FbnRpdHlPbnRvTGlzdFdpZGdldC9FbnRpdHlPbnRvTGlzdFdpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlRW50aXR5RGVmaW5lZEJ5IH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvRW50aXR5RGVmaW5lZEJ5V2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlR3JhcGhWaWV3IH0gZnJvbSBcIi4vR3JhcGhWaWV3V2lkZ2V0L0dyYXBoVmlld1dpZGdldFwiO1xuXG4od2luZG93IGFzIGFueSlbXCJ0czRuZmRpV2lkZ2V0c1wiXSA9IHtcbiAgY3JlYXRlQXV0b2NvbXBsZXRlLFxuICBjcmVhdGVEYXRhQ29udGVudCxcbiAgY3JlYXRlRW50aXR5SW5mbyxcbiAgY3JlYXRlRW50aXR5UmVsYXRpb25zLFxuICBjcmVhdGVKc29uQXBpLFxuICBjcmVhdGVCcmVhZGNydW1iLFxuICBjcmVhdGVEZXNjcmlwdGlvbixcbiAgY3JlYXRlSXJpLFxuICBjcmVhdGVUYWIsXG4gIGNyZWF0ZUFsdGVybmF0aXZlTmFtZVRhYixcbiAgY3JlYXRlQ3Jvc3NSZWZUYWIsXG4gIGNyZWF0ZUhpZXJhcmNoeSxcbiAgY3JlYXRlVGl0bGUsXG4gIGNyZWF0ZU9udG9sb2d5SW5mbyxcbiAgY3JlYXRlUmVzb3VyY2VzLFxuICBjcmVhdGVTZWFyY2hCYXIsXG4gIGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0LFxuICBjcmVhdGVNZXRhZGF0YSxcbiAgY3JlYXRlRGVwaWN0aW9uLFxuICBjcmVhdGVFbnRpdHlPbnRvTGlzdCxcbiAgY3JlYXRlRW50aXR5RGVmaW5lZEJ5LFxuICBjcmVhdGVHcmFwaFZpZXcsXG59O1xuXG5leHBvcnQge1xuICBjcmVhdGVBdXRvY29tcGxldGUsXG4gIGNyZWF0ZURhdGFDb250ZW50LFxuICBjcmVhdGVFbnRpdHlJbmZvLFxuICBjcmVhdGVFbnRpdHlSZWxhdGlvbnMsXG4gIGNyZWF0ZUpzb25BcGksXG4gIGNyZWF0ZUJyZWFkY3J1bWIsXG4gIGNyZWF0ZURlc2NyaXB0aW9uLFxuICBjcmVhdGVJcmksXG4gIGNyZWF0ZVRhYixcbiAgY3JlYXRlQWx0ZXJuYXRpdmVOYW1lVGFiLFxuICBjcmVhdGVDcm9zc1JlZlRhYixcbiAgY3JlYXRlVGl0bGUsXG4gIGNyZWF0ZU9udG9sb2d5SW5mbyxcbiAgY3JlYXRlUmVzb3VyY2VzLFxuICBjcmVhdGVTZWFyY2hCYXIsXG4gIGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0LFxuICBjcmVhdGVNZXRhZGF0YSxcbiAgY3JlYXRlRGVwaWN0aW9uLFxuICBjcmVhdGVIaWVyYXJjaHksXG4gIGNyZWF0ZUVudGl0eU9udG9MaXN0LFxuICBjcmVhdGVFbnRpdHlEZWZpbmVkQnksXG4gIGNyZWF0ZUdyYXBoVmlldyxcbn07XG5cbmV4cG9ydCAqIGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9BdXRvY29tcGxldGVXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0pzb25BcGlXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0RhdGFDb250ZW50V2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZXNvdXJjZXNXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL09udG9sb2d5SW5mb1dpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vU2VhcmNoQmFyV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9TZWFyY2hSZXN1bHRzTGlzdFdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vRW50aXR5SW5mb1dpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vRW50aXR5UmVsYXRpb25zV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9UZXJtRGVwaWN0aW9uV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaFZpZXdXaWRnZXRcIjtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFRQSxVQUFJLHdCQUF3QixPQUFPO0FBQ25DLFVBQUlBLGtCQUFpQixPQUFPLFVBQVU7QUFDdEMsVUFBSSxtQkFBbUIsT0FBTyxVQUFVO0FBRXhDLGVBQVMsU0FBUyxLQUFLO0FBQ3RCLFlBQUksUUFBUSxRQUFRLFFBQVEsUUFBVztBQUN0QyxnQkFBTSxJQUFJLFVBQVUsdURBQXVEO0FBQUEsUUFDNUU7QUFFQSxlQUFPLE9BQU8sR0FBRztBQUFBLE1BQ2xCO0FBRUEsZUFBUyxrQkFBa0I7QUFDMUIsWUFBSTtBQUNILGNBQUksQ0FBQyxPQUFPLFFBQVE7QUFDbkIsbUJBQU87QUFBQSxVQUNSO0FBS0EsY0FBSSxRQUFRLElBQUksT0FBTyxLQUFLO0FBQzVCLGdCQUFNLENBQUMsSUFBSTtBQUNYLGNBQUksT0FBTyxvQkFBb0IsS0FBSyxFQUFFLENBQUMsTUFBTSxLQUFLO0FBQ2pELG1CQUFPO0FBQUEsVUFDUjtBQUdBLGNBQUksUUFBUSxDQUFDO0FBQ2IsbUJBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxLQUFLO0FBQzVCLGtCQUFNLE1BQU0sT0FBTyxhQUFhLENBQUMsQ0FBQyxJQUFJO0FBQUEsVUFDdkM7QUFDQSxjQUFJLFNBQVMsT0FBTyxvQkFBb0IsS0FBSyxFQUFFLElBQUksU0FBVSxHQUFHO0FBQy9ELG1CQUFPLE1BQU0sQ0FBQztBQUFBLFVBQ2YsQ0FBQztBQUNELGNBQUksT0FBTyxLQUFLLEVBQUUsTUFBTSxjQUFjO0FBQ3JDLG1CQUFPO0FBQUEsVUFDUjtBQUdBLGNBQUksUUFBUSxDQUFDO0FBQ2IsaUNBQXVCLE1BQU0sRUFBRSxFQUFFLFFBQVEsU0FBVSxRQUFRO0FBQzFELGtCQUFNLE1BQU0sSUFBSTtBQUFBLFVBQ2pCLENBQUM7QUFDRCxjQUFJLE9BQU8sS0FBSyxPQUFPLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUMvQyx3QkFBd0I7QUFDekIsbUJBQU87QUFBQSxVQUNSO0FBRUEsaUJBQU87QUFBQSxRQUNSLFNBQVMsS0FBSztBQUViLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFFQSxhQUFPLFVBQVUsZ0JBQWdCLElBQUksT0FBTyxTQUFTLFNBQVUsUUFBUSxRQUFRO0FBQzlFLFlBQUlDO0FBQ0osWUFBSSxLQUFLLFNBQVMsTUFBTTtBQUN4QixZQUFJO0FBRUosaUJBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFDMUMsVUFBQUEsUUFBTyxPQUFPLFVBQVUsQ0FBQyxDQUFDO0FBRTFCLG1CQUFTLE9BQU9BLE9BQU07QUFDckIsZ0JBQUlELGdCQUFlLEtBQUtDLE9BQU0sR0FBRyxHQUFHO0FBQ25DLGlCQUFHLEdBQUcsSUFBSUEsTUFBSyxHQUFHO0FBQUEsWUFDbkI7QUFBQSxVQUNEO0FBRUEsY0FBSSx1QkFBdUI7QUFDMUIsc0JBQVUsc0JBQXNCQSxLQUFJO0FBQ3BDLHFCQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO0FBQ3hDLGtCQUFJLGlCQUFpQixLQUFLQSxPQUFNLFFBQVEsQ0FBQyxDQUFDLEdBQUc7QUFDNUMsbUJBQUcsUUFBUSxDQUFDLENBQUMsSUFBSUEsTUFBSyxRQUFRLENBQUMsQ0FBQztBQUFBLGNBQ2pDO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBRUEsZUFBTztBQUFBLE1BQ1I7QUFBQTtBQUFBOzs7QUN6RkE7QUFBQTtBQUFBO0FBV0EsVUFBSSxNQUF1QztBQUN6QyxTQUFDLFdBQVc7QUFDZDtBQUVBLGNBQUksVUFBVTtBQUdkLGNBQUksZUFBZTtBQU9uQixjQUFJLHFCQUFxQjtBQUN6QixjQUFJLG9CQUFvQjtBQUN4QixrQkFBUSxXQUFXO0FBQ25CLGtCQUFRLGFBQWE7QUFDckIsa0JBQVEsV0FBVztBQUNuQixjQUFJLHNCQUFzQjtBQUMxQixjQUFJLHFCQUFxQjtBQUN6QixjQUFJLHlCQUF5QjtBQUM3QixrQkFBUSxXQUFXO0FBQ25CLGNBQUksMkJBQTJCO0FBQy9CLGNBQUksa0JBQWtCO0FBQ3RCLGNBQUksa0JBQWtCO0FBQ3RCLGNBQUksbUJBQW1CO0FBQ3ZCLGNBQUksMEJBQTBCO0FBQzlCLGNBQUkseUJBQXlCO0FBQzdCLGNBQUksbUJBQW1CO0FBQ3ZCLGNBQUksdUJBQXVCO0FBQzNCLGNBQUksZ0NBQWdDO0FBQ3BDLGNBQUksdUJBQXVCO0FBQzNCLGNBQUksMkJBQTJCO0FBRS9CLGNBQUksT0FBTyxXQUFXLGNBQWMsT0FBTyxLQUFLO0FBQzlDLGdCQUFJLFlBQVksT0FBTztBQUN2QixpQ0FBcUIsVUFBVSxlQUFlO0FBQzlDLGdDQUFvQixVQUFVLGNBQWM7QUFDNUMsb0JBQVEsV0FBVyxVQUFVLGdCQUFnQjtBQUM3QyxvQkFBUSxhQUFhLFVBQVUsbUJBQW1CO0FBQ2xELG9CQUFRLFdBQVcsVUFBVSxnQkFBZ0I7QUFDN0Msa0NBQXNCLFVBQVUsZ0JBQWdCO0FBQ2hELGlDQUFxQixVQUFVLGVBQWU7QUFDOUMscUNBQXlCLFVBQVUsbUJBQW1CO0FBQ3RELG9CQUFRLFdBQVcsVUFBVSxnQkFBZ0I7QUFDN0MsdUNBQTJCLFVBQVUscUJBQXFCO0FBQzFELDhCQUFrQixVQUFVLFlBQVk7QUFDeEMsOEJBQWtCLFVBQVUsWUFBWTtBQUN4QywrQkFBbUIsVUFBVSxhQUFhO0FBQzFDLHNDQUEwQixVQUFVLG9CQUFvQjtBQUN4RCxxQ0FBeUIsVUFBVSxtQkFBbUI7QUFDdEQsK0JBQW1CLFVBQVUsYUFBYTtBQUMxQyxtQ0FBdUIsVUFBVSxpQkFBaUI7QUFDbEQsNENBQWdDLFVBQVUsd0JBQXdCO0FBQ2xFLG1DQUF1QixVQUFVLGlCQUFpQjtBQUNsRCx1Q0FBMkIsVUFBVSxxQkFBcUI7QUFBQSxVQUM1RDtBQUVBLGNBQUksd0JBQXdCLE9BQU8sV0FBVyxjQUFjLE9BQU87QUFDbkUsY0FBSSx1QkFBdUI7QUFDM0IsbUJBQVMsY0FBYyxlQUFlO0FBQ3BDLGdCQUFJLGtCQUFrQixRQUFRLE9BQU8sa0JBQWtCLFVBQVU7QUFDL0QscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUksZ0JBQWdCLHlCQUF5QixjQUFjLHFCQUFxQixLQUFLLGNBQWMsb0JBQW9CO0FBRXZILGdCQUFJLE9BQU8sa0JBQWtCLFlBQVk7QUFDdkMscUJBQU87QUFBQSxZQUNUO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBS0EsY0FBSSx5QkFBeUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBSzNCLFNBQVM7QUFBQSxVQUNYO0FBTUEsY0FBSSwwQkFBMEI7QUFBQSxZQUM1QixZQUFZO0FBQUEsVUFDZDtBQVFBLGNBQUksb0JBQW9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUt0QixTQUFTO0FBQUEsVUFDWDtBQUVBLGNBQUkseUJBQXlCLENBQUM7QUFDOUIsY0FBSSx5QkFBeUI7QUFDN0IsbUJBQVMsbUJBQW1CLE9BQU87QUFDakM7QUFDRSx1Q0FBeUI7QUFBQSxZQUMzQjtBQUFBLFVBQ0Y7QUFFQTtBQUNFLG1DQUF1QixxQkFBcUIsU0FBVSxPQUFPO0FBQzNEO0FBQ0UseUNBQXlCO0FBQUEsY0FDM0I7QUFBQSxZQUNGO0FBR0EsbUNBQXVCLGtCQUFrQjtBQUV6QyxtQ0FBdUIsbUJBQW1CLFdBQVk7QUFDcEQsa0JBQUksUUFBUTtBQUVaLGtCQUFJLHdCQUF3QjtBQUMxQix5QkFBUztBQUFBLGNBQ1g7QUFHQSxrQkFBSSxPQUFPLHVCQUF1QjtBQUVsQyxrQkFBSSxNQUFNO0FBQ1IseUJBQVMsS0FBSyxLQUFLO0FBQUEsY0FDckI7QUFFQSxxQkFBTztBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBS0EsY0FBSSx1QkFBdUI7QUFBQSxZQUN6QixTQUFTO0FBQUEsVUFDWDtBQUVBLGNBQUksdUJBQXVCO0FBQUEsWUFDekI7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQTtBQUFBLFlBRUEsUUFBUTtBQUFBLFVBQ1Y7QUFFQTtBQUNFLGlDQUFxQix5QkFBeUI7QUFBQSxVQUNoRDtBQU9BLG1CQUFTLEtBQUssUUFBUTtBQUNwQjtBQUNFLHVCQUFTLE9BQU8sVUFBVSxRQUFRLE9BQU8sSUFBSSxNQUFNLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxPQUFPLE1BQU0sUUFBUTtBQUMxRyxxQkFBSyxPQUFPLENBQUMsSUFBSSxVQUFVLElBQUk7QUFBQSxjQUNqQztBQUVBLDJCQUFhLFFBQVEsUUFBUSxJQUFJO0FBQUEsWUFDbkM7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsTUFBTSxRQUFRO0FBQ3JCO0FBQ0UsdUJBQVMsUUFBUSxVQUFVLFFBQVEsT0FBTyxJQUFJLE1BQU0sUUFBUSxJQUFJLFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxHQUFHLFFBQVEsT0FBTyxTQUFTO0FBQ2pILHFCQUFLLFFBQVEsQ0FBQyxJQUFJLFVBQVUsS0FBSztBQUFBLGNBQ25DO0FBRUEsMkJBQWEsU0FBUyxRQUFRLElBQUk7QUFBQSxZQUNwQztBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxhQUFhLE9BQU8sUUFBUSxNQUFNO0FBR3pDO0FBQ0Usa0JBQUlDLDBCQUF5QixxQkFBcUI7QUFDbEQsa0JBQUksUUFBUUEsd0JBQXVCLGlCQUFpQjtBQUVwRCxrQkFBSSxVQUFVLElBQUk7QUFDaEIsMEJBQVU7QUFDVix1QkFBTyxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFBQSxjQUM1QjtBQUVBLGtCQUFJLGlCQUFpQixLQUFLLElBQUksU0FBVSxNQUFNO0FBQzVDLHVCQUFPLEtBQUs7QUFBQSxjQUNkLENBQUM7QUFFRCw2QkFBZSxRQUFRLGNBQWMsTUFBTTtBQUkzQyx1QkFBUyxVQUFVLE1BQU0sS0FBSyxRQUFRLEtBQUssR0FBRyxTQUFTLGNBQWM7QUFBQSxZQUN2RTtBQUFBLFVBQ0Y7QUFFQSxjQUFJLDBDQUEwQyxDQUFDO0FBRS9DLG1CQUFTLFNBQVMsZ0JBQWdCLFlBQVk7QUFDNUM7QUFDRSxrQkFBSSxlQUFlLGVBQWU7QUFDbEMsa0JBQUksZ0JBQWdCLGlCQUFpQixhQUFhLGVBQWUsYUFBYSxTQUFTO0FBQ3ZGLGtCQUFJLGFBQWEsZ0JBQWdCLE1BQU07QUFFdkMsa0JBQUksd0NBQXdDLFVBQVUsR0FBRztBQUN2RDtBQUFBLGNBQ0Y7QUFFQSxvQkFBTSx5UEFBd1EsWUFBWSxhQUFhO0FBRXZTLHNEQUF3QyxVQUFVLElBQUk7QUFBQSxZQUN4RDtBQUFBLFVBQ0Y7QUFNQSxjQUFJLHVCQUF1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFRekIsV0FBVyxTQUFVLGdCQUFnQjtBQUNuQyxxQkFBTztBQUFBLFlBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQWlCQSxvQkFBb0IsU0FBVSxnQkFBZ0IsVUFBVSxZQUFZO0FBQ2xFLHVCQUFTLGdCQUFnQixhQUFhO0FBQUEsWUFDeEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBZUEscUJBQXFCLFNBQVUsZ0JBQWdCLGVBQWUsVUFBVSxZQUFZO0FBQ2xGLHVCQUFTLGdCQUFnQixjQUFjO0FBQUEsWUFDekM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQWNBLGlCQUFpQixTQUFVLGdCQUFnQixjQUFjLFVBQVUsWUFBWTtBQUM3RSx1QkFBUyxnQkFBZ0IsVUFBVTtBQUFBLFlBQ3JDO0FBQUEsVUFDRjtBQUVBLGNBQUksY0FBYyxDQUFDO0FBRW5CO0FBQ0UsbUJBQU8sT0FBTyxXQUFXO0FBQUEsVUFDM0I7QUFNQSxtQkFBU0MsWUFBVSxPQUFPLFNBQVMsU0FBUztBQUMxQyxpQkFBSyxRQUFRO0FBQ2IsaUJBQUssVUFBVTtBQUVmLGlCQUFLLE9BQU87QUFHWixpQkFBSyxVQUFVLFdBQVc7QUFBQSxVQUM1QjtBQUVBLFVBQUFBLFlBQVUsVUFBVSxtQkFBbUIsQ0FBQztBQTJCeEMsVUFBQUEsWUFBVSxVQUFVLFdBQVcsU0FBVSxjQUFjLFVBQVU7QUFDL0QsZ0JBQUksRUFBRSxPQUFPLGlCQUFpQixZQUFZLE9BQU8saUJBQWlCLGNBQWMsZ0JBQWdCLE9BQU87QUFDckc7QUFDRSxzQkFBTSxNQUFPLHVIQUF3SDtBQUFBLGNBQ3ZJO0FBQUEsWUFDRjtBQUVBLGlCQUFLLFFBQVEsZ0JBQWdCLE1BQU0sY0FBYyxVQUFVLFVBQVU7QUFBQSxVQUN2RTtBQWlCQSxVQUFBQSxZQUFVLFVBQVUsY0FBYyxTQUFVLFVBQVU7QUFDcEQsaUJBQUssUUFBUSxtQkFBbUIsTUFBTSxVQUFVLGFBQWE7QUFBQSxVQUMvRDtBQVFBO0FBQ0UsZ0JBQUksaUJBQWlCO0FBQUEsY0FDbkIsV0FBVyxDQUFDLGFBQWEsb0hBQXlIO0FBQUEsY0FDbEosY0FBYyxDQUFDLGdCQUFnQixpR0FBc0c7QUFBQSxZQUN2STtBQUVBLGdCQUFJLDJCQUEyQixTQUFVLFlBQVksTUFBTTtBQUN6RCxxQkFBTyxlQUFlQSxZQUFVLFdBQVcsWUFBWTtBQUFBLGdCQUNyRCxLQUFLLFdBQVk7QUFDZix1QkFBSywrREFBK0QsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFFcEYseUJBQU87QUFBQSxnQkFDVDtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0g7QUFFQSxxQkFBUyxVQUFVLGdCQUFnQjtBQUNqQyxrQkFBSSxlQUFlLGVBQWUsTUFBTSxHQUFHO0FBQ3pDLHlDQUF5QixRQUFRLGVBQWUsTUFBTSxDQUFDO0FBQUEsY0FDekQ7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGlCQUFpQjtBQUFBLFVBQUM7QUFFM0IseUJBQWUsWUFBWUEsWUFBVTtBQUtyQyxtQkFBU0MsZUFBYyxPQUFPLFNBQVMsU0FBUztBQUM5QyxpQkFBSyxRQUFRO0FBQ2IsaUJBQUssVUFBVTtBQUVmLGlCQUFLLE9BQU87QUFDWixpQkFBSyxVQUFVLFdBQVc7QUFBQSxVQUM1QjtBQUVBLGNBQUkseUJBQXlCQSxlQUFjLFlBQVksSUFBSSxlQUFlO0FBQzFFLGlDQUF1QixjQUFjQTtBQUVyQyxrQkFBUSx3QkFBd0JELFlBQVUsU0FBUztBQUVuRCxpQ0FBdUIsdUJBQXVCO0FBRzlDLG1CQUFTRSxhQUFZO0FBQ25CLGdCQUFJLFlBQVk7QUFBQSxjQUNkLFNBQVM7QUFBQSxZQUNYO0FBRUE7QUFDRSxxQkFBTyxLQUFLLFNBQVM7QUFBQSxZQUN2QjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLG1CQUFTLGVBQWUsV0FBVyxXQUFXLGFBQWE7QUFDekQsZ0JBQUksZUFBZSxVQUFVLGVBQWUsVUFBVSxRQUFRO0FBQzlELG1CQUFPLFVBQVUsZ0JBQWdCLGlCQUFpQixLQUFLLGNBQWMsTUFBTSxlQUFlLE1BQU07QUFBQSxVQUNsRztBQUVBLG1CQUFTLGVBQWUsTUFBTTtBQUM1QixtQkFBTyxLQUFLLGVBQWU7QUFBQSxVQUM3QjtBQUVBLG1CQUFTLGlCQUFpQixNQUFNO0FBQzlCLGdCQUFJLFFBQVEsTUFBTTtBQUVoQixxQkFBTztBQUFBLFlBQ1Q7QUFFQTtBQUNFLGtCQUFJLE9BQU8sS0FBSyxRQUFRLFVBQVU7QUFDaEMsc0JBQU0sMkdBQWdIO0FBQUEsY0FDeEg7QUFBQSxZQUNGO0FBRUEsZ0JBQUksT0FBTyxTQUFTLFlBQVk7QUFDOUIscUJBQU8sS0FBSyxlQUFlLEtBQUssUUFBUTtBQUFBLFlBQzFDO0FBRUEsZ0JBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIscUJBQU87QUFBQSxZQUNUO0FBRUEsb0JBQVEsTUFBTTtBQUFBLGNBQ1osS0FBSyxRQUFRO0FBQ1gsdUJBQU87QUFBQSxjQUVULEtBQUs7QUFDSCx1QkFBTztBQUFBLGNBRVQsS0FBSyxRQUFRO0FBQ1gsdUJBQU87QUFBQSxjQUVULEtBQUssUUFBUTtBQUNYLHVCQUFPO0FBQUEsY0FFVCxLQUFLLFFBQVE7QUFDWCx1QkFBTztBQUFBLGNBRVQsS0FBSztBQUNILHVCQUFPO0FBQUEsWUFDWDtBQUVBLGdCQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLHNCQUFRLEtBQUssVUFBVTtBQUFBLGdCQUNyQixLQUFLO0FBQ0gsc0JBQUksVUFBVTtBQUNkLHlCQUFPLGVBQWUsT0FBTyxJQUFJO0FBQUEsZ0JBRW5DLEtBQUs7QUFDSCxzQkFBSSxXQUFXO0FBQ2YseUJBQU8sZUFBZSxTQUFTLFFBQVEsSUFBSTtBQUFBLGdCQUU3QyxLQUFLO0FBQ0gseUJBQU8sZUFBZSxNQUFNLEtBQUssUUFBUSxZQUFZO0FBQUEsZ0JBRXZELEtBQUs7QUFDSCx5QkFBTyxpQkFBaUIsS0FBSyxJQUFJO0FBQUEsZ0JBRW5DLEtBQUs7QUFDSCx5QkFBTyxpQkFBaUIsS0FBSyxPQUFPO0FBQUEsZ0JBRXRDLEtBQUssaUJBQ0g7QUFDRSxzQkFBSSxnQkFBZ0I7QUFDcEIsc0JBQUksVUFBVSxjQUFjO0FBQzVCLHNCQUFJLE9BQU8sY0FBYztBQUV6QixzQkFBSTtBQUNGLDJCQUFPLGlCQUFpQixLQUFLLE9BQU8sQ0FBQztBQUFBLGtCQUN2QyxTQUFTLEdBQUc7QUFDViwyQkFBTztBQUFBLGtCQUNUO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNKO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUlDLGtCQUFpQixPQUFPLFVBQVU7QUFDdEMsY0FBSSxpQkFBaUI7QUFBQSxZQUNuQixLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxRQUFRO0FBQUEsWUFDUixVQUFVO0FBQUEsVUFDWjtBQUNBLGNBQUksNEJBQTRCLDRCQUE0QjtBQUU1RDtBQUNFLHFDQUF5QixDQUFDO0FBQUEsVUFDNUI7QUFFQSxtQkFBUyxZQUFZLFFBQVE7QUFDM0I7QUFDRSxrQkFBSUEsZ0JBQWUsS0FBSyxRQUFRLEtBQUssR0FBRztBQUN0QyxvQkFBSSxTQUFTLE9BQU8seUJBQXlCLFFBQVEsS0FBSyxFQUFFO0FBRTVELG9CQUFJLFVBQVUsT0FBTyxnQkFBZ0I7QUFDbkMseUJBQU87QUFBQSxnQkFDVDtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsbUJBQU8sT0FBTyxRQUFRO0FBQUEsVUFDeEI7QUFFQSxtQkFBUyxZQUFZLFFBQVE7QUFDM0I7QUFDRSxrQkFBSUEsZ0JBQWUsS0FBSyxRQUFRLEtBQUssR0FBRztBQUN0QyxvQkFBSSxTQUFTLE9BQU8seUJBQXlCLFFBQVEsS0FBSyxFQUFFO0FBRTVELG9CQUFJLFVBQVUsT0FBTyxnQkFBZ0I7QUFDbkMseUJBQU87QUFBQSxnQkFDVDtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsbUJBQU8sT0FBTyxRQUFRO0FBQUEsVUFDeEI7QUFFQSxtQkFBUywyQkFBMkIsT0FBTyxhQUFhO0FBQ3RELGdCQUFJLHdCQUF3QixXQUFZO0FBQ3RDO0FBQ0Usb0JBQUksQ0FBQyw0QkFBNEI7QUFDL0IsK0NBQTZCO0FBRTdCLHdCQUFNLDZPQUE0UCxXQUFXO0FBQUEsZ0JBQy9RO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxrQ0FBc0IsaUJBQWlCO0FBQ3ZDLG1CQUFPLGVBQWUsT0FBTyxPQUFPO0FBQUEsY0FDbEMsS0FBSztBQUFBLGNBQ0wsY0FBYztBQUFBLFlBQ2hCLENBQUM7QUFBQSxVQUNIO0FBRUEsbUJBQVMsMkJBQTJCLE9BQU8sYUFBYTtBQUN0RCxnQkFBSSx3QkFBd0IsV0FBWTtBQUN0QztBQUNFLG9CQUFJLENBQUMsNEJBQTRCO0FBQy9CLCtDQUE2QjtBQUU3Qix3QkFBTSw2T0FBNFAsV0FBVztBQUFBLGdCQUMvUTtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsa0NBQXNCLGlCQUFpQjtBQUN2QyxtQkFBTyxlQUFlLE9BQU8sT0FBTztBQUFBLGNBQ2xDLEtBQUs7QUFBQSxjQUNMLGNBQWM7QUFBQSxZQUNoQixDQUFDO0FBQUEsVUFDSDtBQUVBLG1CQUFTLHFDQUFxQyxRQUFRO0FBQ3BEO0FBQ0Usa0JBQUksT0FBTyxPQUFPLFFBQVEsWUFBWSxrQkFBa0IsV0FBVyxPQUFPLFVBQVUsa0JBQWtCLFFBQVEsY0FBYyxPQUFPLFFBQVE7QUFDekksb0JBQUksZ0JBQWdCLGlCQUFpQixrQkFBa0IsUUFBUSxJQUFJO0FBRW5FLG9CQUFJLENBQUMsdUJBQXVCLGFBQWEsR0FBRztBQUMxQyx3QkFBTSw2VkFBc1gsZUFBZSxPQUFPLEdBQUc7QUFFcloseUNBQXVCLGFBQWEsSUFBSTtBQUFBLGdCQUMxQztBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQXVCQSxjQUFJQyxnQkFBZSxTQUFVLE1BQU0sS0FBSyxLQUFLQyxPQUFNLFFBQVEsT0FBTyxPQUFPO0FBQ3ZFLGdCQUFJLFVBQVU7QUFBQTtBQUFBLGNBRVosVUFBVTtBQUFBO0FBQUEsY0FFVjtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBO0FBQUEsY0FFQSxRQUFRO0FBQUEsWUFDVjtBQUVBO0FBS0Usc0JBQVEsU0FBUyxDQUFDO0FBS2xCLHFCQUFPLGVBQWUsUUFBUSxRQUFRLGFBQWE7QUFBQSxnQkFDakQsY0FBYztBQUFBLGdCQUNkLFlBQVk7QUFBQSxnQkFDWixVQUFVO0FBQUEsZ0JBQ1YsT0FBTztBQUFBLGNBQ1QsQ0FBQztBQUVELHFCQUFPLGVBQWUsU0FBUyxTQUFTO0FBQUEsZ0JBQ3RDLGNBQWM7QUFBQSxnQkFDZCxZQUFZO0FBQUEsZ0JBQ1osVUFBVTtBQUFBLGdCQUNWLE9BQU9BO0FBQUEsY0FDVCxDQUFDO0FBR0QscUJBQU8sZUFBZSxTQUFTLFdBQVc7QUFBQSxnQkFDeEMsY0FBYztBQUFBLGdCQUNkLFlBQVk7QUFBQSxnQkFDWixVQUFVO0FBQUEsZ0JBQ1YsT0FBTztBQUFBLGNBQ1QsQ0FBQztBQUVELGtCQUFJLE9BQU8sUUFBUTtBQUNqQix1QkFBTyxPQUFPLFFBQVEsS0FBSztBQUMzQix1QkFBTyxPQUFPLE9BQU87QUFBQSxjQUN2QjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFNQSxtQkFBU0MsZ0JBQWMsTUFBTSxRQUFRLFVBQVU7QUFDN0MsZ0JBQUk7QUFFSixnQkFBSSxRQUFRLENBQUM7QUFDYixnQkFBSSxNQUFNO0FBQ1YsZ0JBQUksTUFBTTtBQUNWLGdCQUFJRCxRQUFPO0FBQ1gsZ0JBQUksU0FBUztBQUViLGdCQUFJLFVBQVUsTUFBTTtBQUNsQixrQkFBSSxZQUFZLE1BQU0sR0FBRztBQUN2QixzQkFBTSxPQUFPO0FBRWI7QUFDRSx1REFBcUMsTUFBTTtBQUFBLGdCQUM3QztBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxZQUFZLE1BQU0sR0FBRztBQUN2QixzQkFBTSxLQUFLLE9BQU87QUFBQSxjQUNwQjtBQUVBLGNBQUFBLFFBQU8sT0FBTyxXQUFXLFNBQVksT0FBTyxPQUFPO0FBQ25ELHVCQUFTLE9BQU8sYUFBYSxTQUFZLE9BQU8sT0FBTztBQUV2RCxtQkFBSyxZQUFZLFFBQVE7QUFDdkIsb0JBQUlGLGdCQUFlLEtBQUssUUFBUSxRQUFRLEtBQUssQ0FBQyxlQUFlLGVBQWUsUUFBUSxHQUFHO0FBQ3JGLHdCQUFNLFFBQVEsSUFBSSxPQUFPLFFBQVE7QUFBQSxnQkFDbkM7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUlBLGdCQUFJLGlCQUFpQixVQUFVLFNBQVM7QUFFeEMsZ0JBQUksbUJBQW1CLEdBQUc7QUFDeEIsb0JBQU0sV0FBVztBQUFBLFlBQ25CLFdBQVcsaUJBQWlCLEdBQUc7QUFDN0Isa0JBQUksYUFBYSxNQUFNLGNBQWM7QUFFckMsdUJBQVMsSUFBSSxHQUFHLElBQUksZ0JBQWdCLEtBQUs7QUFDdkMsMkJBQVcsQ0FBQyxJQUFJLFVBQVUsSUFBSSxDQUFDO0FBQUEsY0FDakM7QUFFQTtBQUNFLG9CQUFJLE9BQU8sUUFBUTtBQUNqQix5QkFBTyxPQUFPLFVBQVU7QUFBQSxnQkFDMUI7QUFBQSxjQUNGO0FBRUEsb0JBQU0sV0FBVztBQUFBLFlBQ25CO0FBR0EsZ0JBQUksUUFBUSxLQUFLLGNBQWM7QUFDN0Isa0JBQUksZUFBZSxLQUFLO0FBRXhCLG1CQUFLLFlBQVksY0FBYztBQUM3QixvQkFBSSxNQUFNLFFBQVEsTUFBTSxRQUFXO0FBQ2pDLHdCQUFNLFFBQVEsSUFBSSxhQUFhLFFBQVE7QUFBQSxnQkFDekM7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBO0FBQ0Usa0JBQUksT0FBTyxLQUFLO0FBQ2Qsb0JBQUksY0FBYyxPQUFPLFNBQVMsYUFBYSxLQUFLLGVBQWUsS0FBSyxRQUFRLFlBQVk7QUFFNUYsb0JBQUksS0FBSztBQUNQLDZDQUEyQixPQUFPLFdBQVc7QUFBQSxnQkFDL0M7QUFFQSxvQkFBSSxLQUFLO0FBQ1AsNkNBQTJCLE9BQU8sV0FBVztBQUFBLGdCQUMvQztBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsbUJBQU9DLGNBQWEsTUFBTSxLQUFLLEtBQUtDLE9BQU0sUUFBUSxrQkFBa0IsU0FBUyxLQUFLO0FBQUEsVUFDcEY7QUFDQSxtQkFBUyxtQkFBbUIsWUFBWSxRQUFRO0FBQzlDLGdCQUFJLGFBQWFELGNBQWEsV0FBVyxNQUFNLFFBQVEsV0FBVyxLQUFLLFdBQVcsT0FBTyxXQUFXLFNBQVMsV0FBVyxRQUFRLFdBQVcsS0FBSztBQUNoSixtQkFBTztBQUFBLFVBQ1Q7QUFNQSxtQkFBU0csY0FBYSxTQUFTLFFBQVEsVUFBVTtBQUMvQyxnQkFBSSxDQUFDLEVBQUUsWUFBWSxRQUFRLFlBQVksU0FBWTtBQUNqRDtBQUNFLHNCQUFNLE1BQU8sbUZBQW1GLFVBQVUsR0FBSTtBQUFBLGNBQ2hIO0FBQUEsWUFDRjtBQUVBLGdCQUFJO0FBRUosZ0JBQUksUUFBUSxRQUFRLENBQUMsR0FBRyxRQUFRLEtBQUs7QUFHckMsZ0JBQUksTUFBTSxRQUFRO0FBQ2xCLGdCQUFJLE1BQU0sUUFBUTtBQUVsQixnQkFBSUYsUUFBTyxRQUFRO0FBSW5CLGdCQUFJLFNBQVMsUUFBUTtBQUVyQixnQkFBSSxRQUFRLFFBQVE7QUFFcEIsZ0JBQUksVUFBVSxNQUFNO0FBQ2xCLGtCQUFJLFlBQVksTUFBTSxHQUFHO0FBRXZCLHNCQUFNLE9BQU87QUFDYix3QkFBUSxrQkFBa0I7QUFBQSxjQUM1QjtBQUVBLGtCQUFJLFlBQVksTUFBTSxHQUFHO0FBQ3ZCLHNCQUFNLEtBQUssT0FBTztBQUFBLGNBQ3BCO0FBR0Esa0JBQUk7QUFFSixrQkFBSSxRQUFRLFFBQVEsUUFBUSxLQUFLLGNBQWM7QUFDN0MsK0JBQWUsUUFBUSxLQUFLO0FBQUEsY0FDOUI7QUFFQSxtQkFBSyxZQUFZLFFBQVE7QUFDdkIsb0JBQUlGLGdCQUFlLEtBQUssUUFBUSxRQUFRLEtBQUssQ0FBQyxlQUFlLGVBQWUsUUFBUSxHQUFHO0FBQ3JGLHNCQUFJLE9BQU8sUUFBUSxNQUFNLFVBQWEsaUJBQWlCLFFBQVc7QUFFaEUsMEJBQU0sUUFBUSxJQUFJLGFBQWEsUUFBUTtBQUFBLGtCQUN6QyxPQUFPO0FBQ0wsMEJBQU0sUUFBUSxJQUFJLE9BQU8sUUFBUTtBQUFBLGtCQUNuQztBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFJQSxnQkFBSSxpQkFBaUIsVUFBVSxTQUFTO0FBRXhDLGdCQUFJLG1CQUFtQixHQUFHO0FBQ3hCLG9CQUFNLFdBQVc7QUFBQSxZQUNuQixXQUFXLGlCQUFpQixHQUFHO0FBQzdCLGtCQUFJLGFBQWEsTUFBTSxjQUFjO0FBRXJDLHVCQUFTLElBQUksR0FBRyxJQUFJLGdCQUFnQixLQUFLO0FBQ3ZDLDJCQUFXLENBQUMsSUFBSSxVQUFVLElBQUksQ0FBQztBQUFBLGNBQ2pDO0FBRUEsb0JBQU0sV0FBVztBQUFBLFlBQ25CO0FBRUEsbUJBQU9DLGNBQWEsUUFBUSxNQUFNLEtBQUssS0FBS0MsT0FBTSxRQUFRLE9BQU8sS0FBSztBQUFBLFVBQ3hFO0FBU0EsbUJBQVNHLGdCQUFlQyxTQUFRO0FBQzlCLG1CQUFPLE9BQU9BLFlBQVcsWUFBWUEsWUFBVyxRQUFRQSxRQUFPLGFBQWE7QUFBQSxVQUM5RTtBQUVBLGNBQUksWUFBWTtBQUNoQixjQUFJLGVBQWU7QUFRbkIsbUJBQVMsT0FBTyxLQUFLO0FBQ25CLGdCQUFJLGNBQWM7QUFDbEIsZ0JBQUksZ0JBQWdCO0FBQUEsY0FDbEIsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLFlBQ1A7QUFDQSxnQkFBSSxnQkFBZ0IsSUFBSSxRQUFRLGFBQWEsU0FBVUMsUUFBTztBQUM1RCxxQkFBTyxjQUFjQSxNQUFLO0FBQUEsWUFDNUIsQ0FBQztBQUNELG1CQUFPLE1BQU07QUFBQSxVQUNmO0FBT0EsY0FBSSxtQkFBbUI7QUFDdkIsY0FBSSw2QkFBNkI7QUFFakMsbUJBQVMsc0JBQXNCLE1BQU07QUFDbkMsbUJBQU8sS0FBSyxRQUFRLDRCQUE0QixLQUFLO0FBQUEsVUFDdkQ7QUFVQSxtQkFBUyxjQUFjLFNBQVMsT0FBTztBQUdyQyxnQkFBSSxPQUFPLFlBQVksWUFBWSxZQUFZLFFBQVEsUUFBUSxPQUFPLE1BQU07QUFFMUUscUJBQU8sT0FBTyxLQUFLLFFBQVEsR0FBRztBQUFBLFlBQ2hDO0FBR0EsbUJBQU8sTUFBTSxTQUFTLEVBQUU7QUFBQSxVQUMxQjtBQUVBLG1CQUFTLGFBQWEsVUFBVSxPQUFPLGVBQWUsV0FBVyxVQUFVO0FBQ3pFLGdCQUFJLE9BQU8sT0FBTztBQUVsQixnQkFBSSxTQUFTLGVBQWUsU0FBUyxXQUFXO0FBRTlDLHlCQUFXO0FBQUEsWUFDYjtBQUVBLGdCQUFJLGlCQUFpQjtBQUVyQixnQkFBSSxhQUFhLE1BQU07QUFDckIsK0JBQWlCO0FBQUEsWUFDbkIsT0FBTztBQUNMLHNCQUFRLE1BQU07QUFBQSxnQkFDWixLQUFLO0FBQUEsZ0JBQ0wsS0FBSztBQUNILG1DQUFpQjtBQUNqQjtBQUFBLGdCQUVGLEtBQUs7QUFDSCwwQkFBUSxTQUFTLFVBQVU7QUFBQSxvQkFDekIsS0FBSztBQUFBLG9CQUNMLEtBQUs7QUFDSCx1Q0FBaUI7QUFBQSxrQkFDckI7QUFBQSxjQUVKO0FBQUEsWUFDRjtBQUVBLGdCQUFJLGdCQUFnQjtBQUNsQixrQkFBSSxTQUFTO0FBQ2Isa0JBQUksY0FBYyxTQUFTLE1BQU07QUFHakMsa0JBQUksV0FBVyxjQUFjLEtBQUssWUFBWSxjQUFjLFFBQVEsQ0FBQyxJQUFJO0FBRXpFLGtCQUFJLE1BQU0sUUFBUSxXQUFXLEdBQUc7QUFDOUIsb0JBQUksa0JBQWtCO0FBRXRCLG9CQUFJLFlBQVksTUFBTTtBQUNwQixvQ0FBa0Isc0JBQXNCLFFBQVEsSUFBSTtBQUFBLGdCQUN0RDtBQUVBLDZCQUFhLGFBQWEsT0FBTyxpQkFBaUIsSUFBSSxTQUFVLEdBQUc7QUFDakUseUJBQU87QUFBQSxnQkFDVCxDQUFDO0FBQUEsY0FDSCxXQUFXLGVBQWUsTUFBTTtBQUM5QixvQkFBSUYsZ0JBQWUsV0FBVyxHQUFHO0FBQy9CLGdDQUFjO0FBQUEsb0JBQW1CO0FBQUE7QUFBQTtBQUFBLG9CQUVqQztBQUFBLHFCQUNBLFlBQVksUUFBUSxDQUFDLFVBQVUsT0FBTyxRQUFRLFlBQVk7QUFBQTtBQUFBLHNCQUMxRCxzQkFBc0IsS0FBSyxZQUFZLEdBQUcsSUFBSTtBQUFBLHdCQUFNLE1BQU07QUFBQSxrQkFBUTtBQUFBLGdCQUNwRTtBQUVBLHNCQUFNLEtBQUssV0FBVztBQUFBLGNBQ3hCO0FBRUEscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUk7QUFDSixnQkFBSTtBQUNKLGdCQUFJLGVBQWU7QUFFbkIsZ0JBQUksaUJBQWlCLGNBQWMsS0FBSyxZQUFZLFlBQVk7QUFFaEUsZ0JBQUksTUFBTSxRQUFRLFFBQVEsR0FBRztBQUMzQix1QkFBUyxJQUFJLEdBQUcsSUFBSSxTQUFTLFFBQVEsS0FBSztBQUN4Qyx3QkFBUSxTQUFTLENBQUM7QUFDbEIsMkJBQVcsaUJBQWlCLGNBQWMsT0FBTyxDQUFDO0FBQ2xELGdDQUFnQixhQUFhLE9BQU8sT0FBTyxlQUFlLFVBQVUsUUFBUTtBQUFBLGNBQzlFO0FBQUEsWUFDRixPQUFPO0FBQ0wsa0JBQUksYUFBYSxjQUFjLFFBQVE7QUFFdkMsa0JBQUksT0FBTyxlQUFlLFlBQVk7QUFDcEMsb0JBQUksbUJBQW1CO0FBRXZCO0FBRUUsc0JBQUksZUFBZSxpQkFBaUIsU0FBUztBQUMzQyx3QkFBSSxDQUFDLGtCQUFrQjtBQUNyQiwyQkFBSyx1RkFBNEY7QUFBQSxvQkFDbkc7QUFFQSx1Q0FBbUI7QUFBQSxrQkFDckI7QUFBQSxnQkFDRjtBQUVBLG9CQUFJLFdBQVcsV0FBVyxLQUFLLGdCQUFnQjtBQUMvQyxvQkFBSTtBQUNKLG9CQUFJLEtBQUs7QUFFVCx1QkFBTyxFQUFFLE9BQU8sU0FBUyxLQUFLLEdBQUcsTUFBTTtBQUNyQywwQkFBUSxLQUFLO0FBQ2IsNkJBQVcsaUJBQWlCLGNBQWMsT0FBTyxJQUFJO0FBQ3JELGtDQUFnQixhQUFhLE9BQU8sT0FBTyxlQUFlLFVBQVUsUUFBUTtBQUFBLGdCQUM5RTtBQUFBLGNBQ0YsV0FBVyxTQUFTLFVBQVU7QUFDNUIsb0JBQUksaUJBQWlCLEtBQUs7QUFFMUI7QUFDRTtBQUNFLDBCQUFNLE1BQU8scURBQXFELG1CQUFtQixvQkFBb0IsdUJBQXVCLE9BQU8sS0FBSyxRQUFRLEVBQUUsS0FBSyxJQUFJLElBQUksTUFBTSxrQkFBa0IsMkVBQTRFO0FBQUEsa0JBQ3pRO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQWVBLG1CQUFTLFlBQVksVUFBVUcsT0FBTSxTQUFTO0FBQzVDLGdCQUFJLFlBQVksTUFBTTtBQUNwQixxQkFBTztBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxTQUFTLENBQUM7QUFDZCxnQkFBSSxRQUFRO0FBQ1oseUJBQWEsVUFBVSxRQUFRLElBQUksSUFBSSxTQUFVLE9BQU87QUFDdEQscUJBQU9BLE1BQUssS0FBSyxTQUFTLE9BQU8sT0FBTztBQUFBLFlBQzFDLENBQUM7QUFDRCxtQkFBTztBQUFBLFVBQ1Q7QUFZQSxtQkFBUyxjQUFjLFVBQVU7QUFDL0IsZ0JBQUksSUFBSTtBQUNSLHdCQUFZLFVBQVUsV0FBWTtBQUNoQztBQUFBLFlBQ0YsQ0FBQztBQUNELG1CQUFPO0FBQUEsVUFDVDtBQWNBLG1CQUFTLGdCQUFnQixVQUFVLGFBQWEsZ0JBQWdCO0FBQzlELHdCQUFZLFVBQVUsV0FBWTtBQUNoQywwQkFBWSxNQUFNLE1BQU0sU0FBUztBQUFBLFlBQ25DLEdBQUcsY0FBYztBQUFBLFVBQ25CO0FBU0EsbUJBQVNDLFNBQVEsVUFBVTtBQUN6QixtQkFBTyxZQUFZLFVBQVUsU0FBVSxPQUFPO0FBQzVDLHFCQUFPO0FBQUEsWUFDVCxDQUFDLEtBQUssQ0FBQztBQUFBLFVBQ1Q7QUFpQkEsbUJBQVMsVUFBVSxVQUFVO0FBQzNCLGdCQUFJLENBQUNKLGdCQUFlLFFBQVEsR0FBRztBQUM3QjtBQUNFLHNCQUFNLE1BQU8sdUVBQXdFO0FBQUEsY0FDdkY7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVNLLGdCQUFjLGNBQWMsc0JBQXNCO0FBQ3pELGdCQUFJLHlCQUF5QixRQUFXO0FBQ3RDLHFDQUF1QjtBQUFBLFlBQ3pCLE9BQU87QUFDTDtBQUNFLG9CQUFJLHlCQUF5QixRQUFRLE9BQU8seUJBQXlCLFlBQVk7QUFDL0Usd0JBQU0sK0ZBQW9HLG9CQUFvQjtBQUFBLGdCQUNoSTtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsZ0JBQUksVUFBVTtBQUFBLGNBQ1osVUFBVTtBQUFBLGNBQ1YsdUJBQXVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBTXZCLGVBQWU7QUFBQSxjQUNmLGdCQUFnQjtBQUFBO0FBQUE7QUFBQSxjQUdoQixjQUFjO0FBQUE7QUFBQSxjQUVkLFVBQVU7QUFBQSxjQUNWLFVBQVU7QUFBQSxZQUNaO0FBQ0Esb0JBQVEsV0FBVztBQUFBLGNBQ2pCLFVBQVU7QUFBQSxjQUNWLFVBQVU7QUFBQSxZQUNaO0FBQ0EsZ0JBQUksNENBQTRDO0FBQ2hELGdCQUFJLHNDQUFzQztBQUMxQyxnQkFBSSxzQ0FBc0M7QUFFMUM7QUFJRSxrQkFBSSxXQUFXO0FBQUEsZ0JBQ2IsVUFBVTtBQUFBLGdCQUNWLFVBQVU7QUFBQSxnQkFDVix1QkFBdUIsUUFBUTtBQUFBLGNBQ2pDO0FBRUEscUJBQU8saUJBQWlCLFVBQVU7QUFBQSxnQkFDaEMsVUFBVTtBQUFBLGtCQUNSLEtBQUssV0FBWTtBQUNmLHdCQUFJLENBQUMscUNBQXFDO0FBQ3hDLDREQUFzQztBQUV0Qyw0QkFBTSwwSkFBK0o7QUFBQSxvQkFDdks7QUFFQSwyQkFBTyxRQUFRO0FBQUEsa0JBQ2pCO0FBQUEsa0JBQ0EsS0FBSyxTQUFVLFdBQVc7QUFDeEIsNEJBQVEsV0FBVztBQUFBLGtCQUNyQjtBQUFBLGdCQUNGO0FBQUEsZ0JBQ0EsZUFBZTtBQUFBLGtCQUNiLEtBQUssV0FBWTtBQUNmLDJCQUFPLFFBQVE7QUFBQSxrQkFDakI7QUFBQSxrQkFDQSxLQUFLLFNBQVUsZUFBZTtBQUM1Qiw0QkFBUSxnQkFBZ0I7QUFBQSxrQkFDMUI7QUFBQSxnQkFDRjtBQUFBLGdCQUNBLGdCQUFnQjtBQUFBLGtCQUNkLEtBQUssV0FBWTtBQUNmLDJCQUFPLFFBQVE7QUFBQSxrQkFDakI7QUFBQSxrQkFDQSxLQUFLLFNBQVUsZ0JBQWdCO0FBQzdCLDRCQUFRLGlCQUFpQjtBQUFBLGtCQUMzQjtBQUFBLGdCQUNGO0FBQUEsZ0JBQ0EsY0FBYztBQUFBLGtCQUNaLEtBQUssV0FBWTtBQUNmLDJCQUFPLFFBQVE7QUFBQSxrQkFDakI7QUFBQSxrQkFDQSxLQUFLLFNBQVUsY0FBYztBQUMzQiw0QkFBUSxlQUFlO0FBQUEsa0JBQ3pCO0FBQUEsZ0JBQ0Y7QUFBQSxnQkFDQSxVQUFVO0FBQUEsa0JBQ1IsS0FBSyxXQUFZO0FBQ2Ysd0JBQUksQ0FBQywyQ0FBMkM7QUFDOUMsa0VBQTRDO0FBRTVDLDRCQUFNLDBKQUErSjtBQUFBLG9CQUN2SztBQUVBLDJCQUFPLFFBQVE7QUFBQSxrQkFDakI7QUFBQSxnQkFDRjtBQUFBLGdCQUNBLGFBQWE7QUFBQSxrQkFDWCxLQUFLLFdBQVk7QUFDZiwyQkFBTyxRQUFRO0FBQUEsa0JBQ2pCO0FBQUEsa0JBQ0EsS0FBSyxTQUFVLGFBQWE7QUFDMUIsd0JBQUksQ0FBQyxxQ0FBcUM7QUFDeEMsMkJBQUssdUlBQTRJLFdBQVc7QUFFNUosNERBQXNDO0FBQUEsb0JBQ3hDO0FBQUEsa0JBQ0Y7QUFBQSxnQkFDRjtBQUFBLGNBQ0YsQ0FBQztBQUVELHNCQUFRLFdBQVc7QUFBQSxZQUNyQjtBQUVBO0FBQ0Usc0JBQVEsbUJBQW1CO0FBQzNCLHNCQUFRLG9CQUFvQjtBQUFBLFlBQzlCO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSxnQkFBZ0I7QUFDcEIsY0FBSSxVQUFVO0FBQ2QsY0FBSSxXQUFXO0FBQ2YsY0FBSSxXQUFXO0FBRWYsbUJBQVMsZ0JBQWdCLFNBQVM7QUFDaEMsZ0JBQUksUUFBUSxZQUFZLGVBQWU7QUFDckMsa0JBQUksT0FBTyxRQUFRO0FBQ25CLGtCQUFJLFdBQVcsS0FBSztBQUVwQixrQkFBSSxVQUFVO0FBQ2Qsc0JBQVEsVUFBVTtBQUNsQixzQkFBUSxVQUFVO0FBQ2xCLHVCQUFTLEtBQUssU0FBVSxjQUFjO0FBQ3BDLG9CQUFJLFFBQVEsWUFBWSxTQUFTO0FBQy9CLHNCQUFJLGdCQUFnQixhQUFhO0FBRWpDO0FBQ0Usd0JBQUksa0JBQWtCLFFBQVc7QUFDL0IsNEJBQU0seUtBQzBELFlBQVk7QUFBQSxvQkFDOUU7QUFBQSxrQkFDRjtBQUdBLHNCQUFJLFdBQVc7QUFDZiwyQkFBUyxVQUFVO0FBQ25CLDJCQUFTLFVBQVU7QUFBQSxnQkFDckI7QUFBQSxjQUNGLEdBQUcsU0FBVUMsUUFBTztBQUNsQixvQkFBSSxRQUFRLFlBQVksU0FBUztBQUUvQixzQkFBSSxXQUFXO0FBQ2YsMkJBQVMsVUFBVTtBQUNuQiwyQkFBUyxVQUFVQTtBQUFBLGdCQUNyQjtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0g7QUFFQSxnQkFBSSxRQUFRLFlBQVksVUFBVTtBQUNoQyxxQkFBTyxRQUFRO0FBQUEsWUFDakIsT0FBTztBQUNMLG9CQUFNLFFBQVE7QUFBQSxZQUNoQjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxLQUFLLE1BQU07QUFDbEIsZ0JBQUksVUFBVTtBQUFBO0FBQUEsY0FFWixTQUFTO0FBQUEsY0FDVCxTQUFTO0FBQUEsWUFDWDtBQUNBLGdCQUFJLFdBQVc7QUFBQSxjQUNiLFVBQVU7QUFBQSxjQUNWLFVBQVU7QUFBQSxjQUNWLE9BQU87QUFBQSxZQUNUO0FBRUE7QUFFRSxrQkFBSTtBQUNKLGtCQUFJO0FBRUoscUJBQU8saUJBQWlCLFVBQVU7QUFBQSxnQkFDaEMsY0FBYztBQUFBLGtCQUNaLGNBQWM7QUFBQSxrQkFDZCxLQUFLLFdBQVk7QUFDZiwyQkFBTztBQUFBLGtCQUNUO0FBQUEsa0JBQ0EsS0FBSyxTQUFVLGlCQUFpQjtBQUM5QiwwQkFBTSx5TEFBbU07QUFFek0sbUNBQWU7QUFHZiwyQkFBTyxlQUFlLFVBQVUsZ0JBQWdCO0FBQUEsc0JBQzlDLFlBQVk7QUFBQSxvQkFDZCxDQUFDO0FBQUEsa0JBQ0g7QUFBQSxnQkFDRjtBQUFBLGdCQUNBLFdBQVc7QUFBQSxrQkFDVCxjQUFjO0FBQUEsa0JBQ2QsS0FBSyxXQUFZO0FBQ2YsMkJBQU87QUFBQSxrQkFDVDtBQUFBLGtCQUNBLEtBQUssU0FBVSxjQUFjO0FBQzNCLDBCQUFNLHNMQUFnTTtBQUV0TSxnQ0FBWTtBQUdaLDJCQUFPLGVBQWUsVUFBVSxhQUFhO0FBQUEsc0JBQzNDLFlBQVk7QUFBQSxvQkFDZCxDQUFDO0FBQUEsa0JBQ0g7QUFBQSxnQkFDRjtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0g7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxtQkFBU0MsYUFBV0MsU0FBUTtBQUMxQjtBQUNFLGtCQUFJQSxXQUFVLFFBQVFBLFFBQU8sYUFBYSxpQkFBaUI7QUFDekQsc0JBQU0scUlBQStJO0FBQUEsY0FDdkosV0FBVyxPQUFPQSxZQUFXLFlBQVk7QUFDdkMsc0JBQU0sMkRBQTJEQSxZQUFXLE9BQU8sU0FBUyxPQUFPQSxPQUFNO0FBQUEsY0FDM0csT0FBTztBQUNMLG9CQUFJQSxRQUFPLFdBQVcsS0FBS0EsUUFBTyxXQUFXLEdBQUc7QUFDOUMsd0JBQU0sZ0ZBQWdGQSxRQUFPLFdBQVcsSUFBSSw2Q0FBNkMsNkNBQTZDO0FBQUEsZ0JBQ3hNO0FBQUEsY0FDRjtBQUVBLGtCQUFJQSxXQUFVLE1BQU07QUFDbEIsb0JBQUlBLFFBQU8sZ0JBQWdCLFFBQVFBLFFBQU8sYUFBYSxNQUFNO0FBQzNELHdCQUFNLG9IQUF5SDtBQUFBLGdCQUNqSTtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsZ0JBQUksY0FBYztBQUFBLGNBQ2hCLFVBQVU7QUFBQSxjQUNWLFFBQVFBO0FBQUEsWUFDVjtBQUVBO0FBQ0Usa0JBQUk7QUFDSixxQkFBTyxlQUFlLGFBQWEsZUFBZTtBQUFBLGdCQUNoRCxZQUFZO0FBQUEsZ0JBQ1osY0FBYztBQUFBLGdCQUNkLEtBQUssV0FBWTtBQUNmLHlCQUFPO0FBQUEsZ0JBQ1Q7QUFBQSxnQkFDQSxLQUFLLFNBQVUsTUFBTTtBQUNuQiw0QkFBVTtBQUVWLHNCQUFJQSxRQUFPLGVBQWUsTUFBTTtBQUM5QixvQkFBQUEsUUFBTyxjQUFjO0FBQUEsa0JBQ3ZCO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGLENBQUM7QUFBQSxZQUNIO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBSUEsY0FBSSxpQkFBaUI7QUFFckIsbUJBQVMsbUJBQW1CLE1BQU07QUFDaEMsZ0JBQUksT0FBTyxTQUFTLFlBQVksT0FBTyxTQUFTLFlBQVk7QUFDMUQscUJBQU87QUFBQSxZQUNUO0FBR0EsZ0JBQUksU0FBUyxRQUFRLFlBQVksU0FBUyxRQUFRLFlBQVksU0FBUyxpQ0FBaUMsU0FBUyxRQUFRLGNBQWMsU0FBUyxRQUFRLFlBQVksU0FBUyw0QkFBNEIsU0FBUyw0QkFBNEIsZ0JBQWlCO0FBQzdQLHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLE9BQU8sU0FBUyxZQUFZLFNBQVMsTUFBTTtBQUM3QyxrQkFBSSxLQUFLLGFBQWEsbUJBQW1CLEtBQUssYUFBYSxtQkFBbUIsS0FBSyxhQUFhLHVCQUF1QixLQUFLLGFBQWEsc0JBQXNCLEtBQUssYUFBYSwwQkFBMEIsS0FBSyxhQUFhLDBCQUEwQixLQUFLLGFBQWEsb0JBQW9CLEtBQUssQ0FBQyxNQUFNLHlCQUF5QjtBQUNoVSx1QkFBTztBQUFBLGNBQ1Q7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVNDLE1BQUssTUFBTSxTQUFTO0FBQzNCO0FBQ0Usa0JBQUksQ0FBQyxtQkFBbUIsSUFBSSxHQUFHO0FBQzdCLHNCQUFNLHNFQUEyRSxTQUFTLE9BQU8sU0FBUyxPQUFPLElBQUk7QUFBQSxjQUN2SDtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxjQUFjO0FBQUEsY0FDaEIsVUFBVTtBQUFBLGNBQ1Y7QUFBQSxjQUNBLFNBQVMsWUFBWSxTQUFZLE9BQU87QUFBQSxZQUMxQztBQUVBO0FBQ0Usa0JBQUk7QUFDSixxQkFBTyxlQUFlLGFBQWEsZUFBZTtBQUFBLGdCQUNoRCxZQUFZO0FBQUEsZ0JBQ1osY0FBYztBQUFBLGdCQUNkLEtBQUssV0FBWTtBQUNmLHlCQUFPO0FBQUEsZ0JBQ1Q7QUFBQSxnQkFDQSxLQUFLLFNBQVUsTUFBTTtBQUNuQiw0QkFBVTtBQUVWLHNCQUFJLEtBQUssZUFBZSxNQUFNO0FBQzVCLHlCQUFLLGNBQWM7QUFBQSxrQkFDckI7QUFBQSxnQkFDRjtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0g7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxtQkFBUyxvQkFBb0I7QUFDM0IsZ0JBQUksYUFBYSx1QkFBdUI7QUFFeEMsZ0JBQUksRUFBRSxlQUFlLE9BQU87QUFDMUI7QUFDRSxzQkFBTSxNQUFPLGliQUFrYjtBQUFBLGNBQ2pjO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLG1CQUFTQyxhQUFXLFNBQVMsdUJBQXVCO0FBQ2xELGdCQUFJLGFBQWEsa0JBQWtCO0FBRW5DO0FBQ0Usa0JBQUksMEJBQTBCLFFBQVc7QUFDdkMsc0JBQU0sb0hBQThILHVCQUF1QixPQUFPLDBCQUEwQixZQUFZLE1BQU0sUUFBUSxVQUFVLENBQUMsQ0FBQyxJQUFJLGdKQUEwSixFQUFFO0FBQUEsY0FDcFk7QUFHQSxrQkFBSSxRQUFRLGFBQWEsUUFBVztBQUNsQyxvQkFBSSxjQUFjLFFBQVE7QUFHMUIsb0JBQUksWUFBWSxhQUFhLFNBQVM7QUFDcEMsd0JBQU0seUtBQThLO0FBQUEsZ0JBQ3RMLFdBQVcsWUFBWSxhQUFhLFNBQVM7QUFDM0Msd0JBQU0sMEdBQStHO0FBQUEsZ0JBQ3ZIO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTyxXQUFXLFdBQVcsU0FBUyxxQkFBcUI7QUFBQSxVQUM3RDtBQUNBLG1CQUFTQyxXQUFTLGNBQWM7QUFDOUIsZ0JBQUksYUFBYSxrQkFBa0I7QUFDbkMsbUJBQU8sV0FBVyxTQUFTLFlBQVk7QUFBQSxVQUN6QztBQUNBLG1CQUFTQyxZQUFXQyxVQUFTLFlBQVksTUFBTTtBQUM3QyxnQkFBSSxhQUFhLGtCQUFrQjtBQUNuQyxtQkFBTyxXQUFXLFdBQVdBLFVBQVMsWUFBWSxJQUFJO0FBQUEsVUFDeEQ7QUFDQSxtQkFBU0MsU0FBTyxjQUFjO0FBQzVCLGdCQUFJLGFBQWEsa0JBQWtCO0FBQ25DLG1CQUFPLFdBQVcsT0FBTyxZQUFZO0FBQUEsVUFDdkM7QUFDQSxtQkFBU0MsWUFBVSxRQUFRLE1BQU07QUFDL0IsZ0JBQUksYUFBYSxrQkFBa0I7QUFDbkMsbUJBQU8sV0FBVyxVQUFVLFFBQVEsSUFBSTtBQUFBLFVBQzFDO0FBQ0EsbUJBQVNDLGlCQUFnQixRQUFRLE1BQU07QUFDckMsZ0JBQUksYUFBYSxrQkFBa0I7QUFDbkMsbUJBQU8sV0FBVyxnQkFBZ0IsUUFBUSxJQUFJO0FBQUEsVUFDaEQ7QUFDQSxtQkFBU0MsY0FBWSxVQUFVLE1BQU07QUFDbkMsZ0JBQUksYUFBYSxrQkFBa0I7QUFDbkMsbUJBQU8sV0FBVyxZQUFZLFVBQVUsSUFBSTtBQUFBLFVBQzlDO0FBQ0EsbUJBQVNDLFVBQVEsUUFBUSxNQUFNO0FBQzdCLGdCQUFJLGFBQWEsa0JBQWtCO0FBQ25DLG1CQUFPLFdBQVcsUUFBUSxRQUFRLElBQUk7QUFBQSxVQUN4QztBQUNBLG1CQUFTLG9CQUFvQixLQUFLLFFBQVEsTUFBTTtBQUM5QyxnQkFBSSxhQUFhLGtCQUFrQjtBQUNuQyxtQkFBTyxXQUFXLG9CQUFvQixLQUFLLFFBQVEsSUFBSTtBQUFBLFVBQ3pEO0FBQ0EsbUJBQVMsY0FBY0MsUUFBTyxhQUFhO0FBQ3pDO0FBQ0Usa0JBQUksYUFBYSxrQkFBa0I7QUFDbkMscUJBQU8sV0FBVyxjQUFjQSxRQUFPLFdBQVc7QUFBQSxZQUNwRDtBQUFBLFVBQ0Y7QUFNQSxjQUFJLGdCQUFnQjtBQUNwQixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBRUosbUJBQVMsY0FBYztBQUFBLFVBQUM7QUFFeEIsc0JBQVkscUJBQXFCO0FBQ2pDLG1CQUFTLGNBQWM7QUFDckI7QUFDRSxrQkFBSSxrQkFBa0IsR0FBRztBQUV2QiwwQkFBVSxRQUFRO0FBQ2xCLDJCQUFXLFFBQVE7QUFDbkIsMkJBQVcsUUFBUTtBQUNuQiw0QkFBWSxRQUFRO0FBQ3BCLDRCQUFZLFFBQVE7QUFDcEIscUNBQXFCLFFBQVE7QUFDN0IsK0JBQWUsUUFBUTtBQUV2QixvQkFBSSxRQUFRO0FBQUEsa0JBQ1YsY0FBYztBQUFBLGtCQUNkLFlBQVk7QUFBQSxrQkFDWixPQUFPO0FBQUEsa0JBQ1AsVUFBVTtBQUFBLGdCQUNaO0FBRUEsdUJBQU8saUJBQWlCLFNBQVM7QUFBQSxrQkFDL0IsTUFBTTtBQUFBLGtCQUNOLEtBQUs7QUFBQSxrQkFDTCxNQUFNO0FBQUEsa0JBQ04sT0FBTztBQUFBLGtCQUNQLE9BQU87QUFBQSxrQkFDUCxnQkFBZ0I7QUFBQSxrQkFDaEIsVUFBVTtBQUFBLGdCQUNaLENBQUM7QUFBQSxjQUVIO0FBRUE7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGVBQWU7QUFDdEI7QUFDRTtBQUVBLGtCQUFJLGtCQUFrQixHQUFHO0FBRXZCLG9CQUFJLFFBQVE7QUFBQSxrQkFDVixjQUFjO0FBQUEsa0JBQ2QsWUFBWTtBQUFBLGtCQUNaLFVBQVU7QUFBQSxnQkFDWjtBQUVBLHVCQUFPLGlCQUFpQixTQUFTO0FBQUEsa0JBQy9CLEtBQUssUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN0QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE1BQU0sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN2QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE1BQU0sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN2QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE9BQU8sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN4QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE9BQU8sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN4QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELGdCQUFnQixRQUFRLENBQUMsR0FBRyxPQUFPO0FBQUEsb0JBQ2pDLE9BQU87QUFBQSxrQkFDVCxDQUFDO0FBQUEsa0JBQ0QsVUFBVSxRQUFRLENBQUMsR0FBRyxPQUFPO0FBQUEsb0JBQzNCLE9BQU87QUFBQSxrQkFDVCxDQUFDO0FBQUEsZ0JBQ0gsQ0FBQztBQUFBLGNBRUg7QUFFQSxrQkFBSSxnQkFBZ0IsR0FBRztBQUNyQixzQkFBTSw4RUFBbUY7QUFBQSxjQUMzRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsY0FBSSwyQkFBMkIscUJBQXFCO0FBQ3BELGNBQUlDO0FBQ0osbUJBQVMsOEJBQThCLE1BQU0sUUFBUSxTQUFTO0FBQzVEO0FBQ0Usa0JBQUlBLFlBQVcsUUFBVztBQUV4QixvQkFBSTtBQUNGLHdCQUFNLE1BQU07QUFBQSxnQkFDZCxTQUFTLEdBQUc7QUFDVixzQkFBSWxCLFNBQVEsRUFBRSxNQUFNLEtBQUssRUFBRSxNQUFNLGNBQWM7QUFDL0Msa0JBQUFrQixVQUFTbEIsVUFBU0EsT0FBTSxDQUFDLEtBQUs7QUFBQSxnQkFDaEM7QUFBQSxjQUNGO0FBR0EscUJBQU8sT0FBT2tCLFVBQVM7QUFBQSxZQUN6QjtBQUFBLFVBQ0Y7QUFDQSxjQUFJLFVBQVU7QUFDZCxjQUFJO0FBRUo7QUFDRSxnQkFBSSxrQkFBa0IsT0FBTyxZQUFZLGFBQWEsVUFBVTtBQUNoRSxrQ0FBc0IsSUFBSSxnQkFBZ0I7QUFBQSxVQUM1QztBQUVBLG1CQUFTLDZCQUE2QixJQUFJLFdBQVc7QUFFbkQsZ0JBQUksQ0FBQyxNQUFNLFNBQVM7QUFDbEIscUJBQU87QUFBQSxZQUNUO0FBRUE7QUFDRSxrQkFBSSxRQUFRLG9CQUFvQixJQUFJLEVBQUU7QUFFdEMsa0JBQUksVUFBVSxRQUFXO0FBQ3ZCLHVCQUFPO0FBQUEsY0FDVDtBQUFBLFlBQ0Y7QUFFQSxnQkFBSTtBQUNKLHNCQUFVO0FBQ1YsZ0JBQUksNEJBQTRCLE1BQU07QUFFdEMsa0JBQU0sb0JBQW9CO0FBQzFCLGdCQUFJO0FBRUo7QUFDRSxtQ0FBcUIseUJBQXlCO0FBRzlDLHVDQUF5QixVQUFVO0FBQ25DLDBCQUFZO0FBQUEsWUFDZDtBQUVBLGdCQUFJO0FBRUYsa0JBQUksV0FBVztBQUViLG9CQUFJLE9BQU8sV0FBWTtBQUNyQix3QkFBTSxNQUFNO0FBQUEsZ0JBQ2Q7QUFHQSx1QkFBTyxlQUFlLEtBQUssV0FBVyxTQUFTO0FBQUEsa0JBQzdDLEtBQUssV0FBWTtBQUdmLDBCQUFNLE1BQU07QUFBQSxrQkFDZDtBQUFBLGdCQUNGLENBQUM7QUFFRCxvQkFBSSxPQUFPLFlBQVksWUFBWSxRQUFRLFdBQVc7QUFHcEQsc0JBQUk7QUFDRiw0QkFBUSxVQUFVLE1BQU0sQ0FBQyxDQUFDO0FBQUEsa0JBQzVCLFNBQVMsR0FBRztBQUNWLDhCQUFVO0FBQUEsa0JBQ1o7QUFFQSwwQkFBUSxVQUFVLElBQUksQ0FBQyxHQUFHLElBQUk7QUFBQSxnQkFDaEMsT0FBTztBQUNMLHNCQUFJO0FBQ0YseUJBQUssS0FBSztBQUFBLGtCQUNaLFNBQVMsR0FBRztBQUNWLDhCQUFVO0FBQUEsa0JBQ1o7QUFFQSxxQkFBRyxLQUFLLEtBQUssU0FBUztBQUFBLGdCQUN4QjtBQUFBLGNBQ0YsT0FBTztBQUNMLG9CQUFJO0FBQ0Ysd0JBQU0sTUFBTTtBQUFBLGdCQUNkLFNBQVMsR0FBRztBQUNWLDRCQUFVO0FBQUEsZ0JBQ1o7QUFFQSxtQkFBRztBQUFBLGNBQ0w7QUFBQSxZQUNGLFNBQVMsUUFBUTtBQUVmLGtCQUFJLFVBQVUsV0FBVyxPQUFPLE9BQU8sVUFBVSxVQUFVO0FBR3pELG9CQUFJLGNBQWMsT0FBTyxNQUFNLE1BQU0sSUFBSTtBQUN6QyxvQkFBSSxlQUFlLFFBQVEsTUFBTSxNQUFNLElBQUk7QUFDM0Msb0JBQUksSUFBSSxZQUFZLFNBQVM7QUFDN0Isb0JBQUksSUFBSSxhQUFhLFNBQVM7QUFFOUIsdUJBQU8sS0FBSyxLQUFLLEtBQUssS0FBSyxZQUFZLENBQUMsTUFBTSxhQUFhLENBQUMsR0FBRztBQU83RDtBQUFBLGdCQUNGO0FBRUEsdUJBQU8sS0FBSyxLQUFLLEtBQUssR0FBRyxLQUFLLEtBQUs7QUFHakMsc0JBQUksWUFBWSxDQUFDLE1BQU0sYUFBYSxDQUFDLEdBQUc7QUFNdEMsd0JBQUksTUFBTSxLQUFLLE1BQU0sR0FBRztBQUN0Qix5QkFBRztBQUNEO0FBQ0E7QUFHQSw0QkFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLE1BQU0sYUFBYSxDQUFDLEdBQUc7QUFFL0MsOEJBQUksU0FBUyxPQUFPLFlBQVksQ0FBQyxFQUFFLFFBQVEsWUFBWSxNQUFNO0FBRTdEO0FBQ0UsZ0NBQUksT0FBTyxPQUFPLFlBQVk7QUFDNUIsa0RBQW9CLElBQUksSUFBSSxNQUFNO0FBQUEsNEJBQ3BDO0FBQUEsMEJBQ0Y7QUFHQSxpQ0FBTztBQUFBLHdCQUNUO0FBQUEsc0JBQ0YsU0FBUyxLQUFLLEtBQUssS0FBSztBQUFBLG9CQUMxQjtBQUVBO0FBQUEsa0JBQ0Y7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFBQSxZQUNGLFVBQUU7QUFDQSx3QkFBVTtBQUVWO0FBQ0UseUNBQXlCLFVBQVU7QUFDbkMsNkJBQWE7QUFBQSxjQUNmO0FBRUEsb0JBQU0sb0JBQW9CO0FBQUEsWUFDNUI7QUFHQSxnQkFBSSxPQUFPLEtBQUssR0FBRyxlQUFlLEdBQUcsT0FBTztBQUM1QyxnQkFBSSxpQkFBaUIsT0FBTyw4QkFBOEIsSUFBSSxJQUFJO0FBRWxFO0FBQ0Usa0JBQUksT0FBTyxPQUFPLFlBQVk7QUFDNUIsb0NBQW9CLElBQUksSUFBSSxjQUFjO0FBQUEsY0FDNUM7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBQ0EsbUJBQVMsK0JBQStCLElBQUksUUFBUSxTQUFTO0FBQzNEO0FBQ0UscUJBQU8sNkJBQTZCLElBQUksS0FBSztBQUFBLFlBQy9DO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGdCQUFnQjVCLGFBQVc7QUFDbEMsZ0JBQUk2QixhQUFZN0IsWUFBVTtBQUMxQixtQkFBTyxDQUFDLEVBQUU2QixjQUFhQSxXQUFVO0FBQUEsVUFDbkM7QUFFQSxtQkFBUyxxQ0FBcUMsTUFBTSxRQUFRLFNBQVM7QUFFbkUsZ0JBQUksUUFBUSxNQUFNO0FBQ2hCLHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLE9BQU8sU0FBUyxZQUFZO0FBQzlCO0FBQ0UsdUJBQU8sNkJBQTZCLE1BQU0sZ0JBQWdCLElBQUksQ0FBQztBQUFBLGNBQ2pFO0FBQUEsWUFDRjtBQUVBLGdCQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLHFCQUFPLDhCQUE4QixJQUFJO0FBQUEsWUFDM0M7QUFFQSxvQkFBUSxNQUFNO0FBQUEsY0FDWixLQUFLLFFBQVE7QUFDWCx1QkFBTyw4QkFBOEIsVUFBVTtBQUFBLGNBRWpELEtBQUs7QUFDSCx1QkFBTyw4QkFBOEIsY0FBYztBQUFBLFlBQ3ZEO0FBRUEsZ0JBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIsc0JBQVEsS0FBSyxVQUFVO0FBQUEsZ0JBQ3JCLEtBQUs7QUFDSCx5QkFBTywrQkFBK0IsS0FBSyxNQUFNO0FBQUEsZ0JBRW5ELEtBQUs7QUFFSCx5QkFBTyxxQ0FBcUMsS0FBSyxNQUFNLFFBQVEsT0FBTztBQUFBLGdCQUV4RSxLQUFLO0FBQ0gseUJBQU8sK0JBQStCLEtBQUssT0FBTztBQUFBLGdCQUVwRCxLQUFLLGlCQUNIO0FBQ0Usc0JBQUksZ0JBQWdCO0FBQ3BCLHNCQUFJLFVBQVUsY0FBYztBQUM1QixzQkFBSSxPQUFPLGNBQWM7QUFFekIsc0JBQUk7QUFFRiwyQkFBTyxxQ0FBcUMsS0FBSyxPQUFPLEdBQUcsUUFBUSxPQUFPO0FBQUEsa0JBQzVFLFNBQVMsR0FBRztBQUFBLGtCQUFDO0FBQUEsZ0JBQ2Y7QUFBQSxjQUNKO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUkscUJBQXFCLENBQUM7QUFDMUIsY0FBSSwyQkFBMkIscUJBQXFCO0FBRXBELG1CQUFTLDhCQUE4QixTQUFTO0FBQzlDO0FBQ0Usa0JBQUksU0FBUztBQUNYLG9CQUFJLFFBQVEsUUFBUTtBQUNwQixvQkFBSSxRQUFRLHFDQUFxQyxRQUFRLE1BQU0sUUFBUSxTQUFTLFFBQVEsTUFBTSxPQUFPLElBQUk7QUFDekcseUNBQXlCLG1CQUFtQixLQUFLO0FBQUEsY0FDbkQsT0FBTztBQUNMLHlDQUF5QixtQkFBbUIsSUFBSTtBQUFBLGNBQ2xEO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxlQUFlLFdBQVcsUUFBUSxVQUFVLGVBQWUsU0FBUztBQUMzRTtBQUVFLGtCQUFJLE1BQU0sU0FBUyxLQUFLLEtBQUssT0FBTyxVQUFVLGNBQWM7QUFFNUQsdUJBQVMsZ0JBQWdCLFdBQVc7QUFDbEMsb0JBQUksSUFBSSxXQUFXLFlBQVksR0FBRztBQUNoQyxzQkFBSSxVQUFVO0FBSWQsc0JBQUk7QUFHRix3QkFBSSxPQUFPLFVBQVUsWUFBWSxNQUFNLFlBQVk7QUFDakQsMEJBQUksTUFBTSxPQUFPLGlCQUFpQixpQkFBaUIsT0FBTyxXQUFXLFlBQVksZUFBZSwrRkFBb0csT0FBTyxVQUFVLFlBQVksSUFBSSxpR0FBc0c7QUFDM1UsMEJBQUksT0FBTztBQUNYLDRCQUFNO0FBQUEsb0JBQ1I7QUFFQSw4QkFBVSxVQUFVLFlBQVksRUFBRSxRQUFRLGNBQWMsZUFBZSxVQUFVLE1BQU0sOENBQThDO0FBQUEsa0JBQ3ZJLFNBQVMsSUFBSTtBQUNYLDhCQUFVO0FBQUEsa0JBQ1o7QUFFQSxzQkFBSSxXQUFXLEVBQUUsbUJBQW1CLFFBQVE7QUFDMUMsa0RBQThCLE9BQU87QUFFckMsMEJBQU0sNFJBQXFULGlCQUFpQixlQUFlLFVBQVUsY0FBYyxPQUFPLE9BQU87QUFFalksa0RBQThCLElBQUk7QUFBQSxrQkFDcEM7QUFFQSxzQkFBSSxtQkFBbUIsU0FBUyxFQUFFLFFBQVEsV0FBVyxxQkFBcUI7QUFHeEUsdUNBQW1CLFFBQVEsT0FBTyxJQUFJO0FBQ3RDLGtEQUE4QixPQUFPO0FBRXJDLDBCQUFNLHNCQUFzQixVQUFVLFFBQVEsT0FBTztBQUVyRCxrREFBOEIsSUFBSTtBQUFBLGtCQUNwQztBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsbUJBQVMsZ0NBQWdDLFNBQVM7QUFDaEQ7QUFDRSxrQkFBSSxTQUFTO0FBQ1gsb0JBQUksUUFBUSxRQUFRO0FBQ3BCLG9CQUFJLFFBQVEscUNBQXFDLFFBQVEsTUFBTSxRQUFRLFNBQVMsUUFBUSxNQUFNLE9BQU8sSUFBSTtBQUN6RyxtQ0FBbUIsS0FBSztBQUFBLGNBQzFCLE9BQU87QUFDTCxtQ0FBbUIsSUFBSTtBQUFBLGNBQ3pCO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxjQUFJO0FBRUo7QUFDRSw0Q0FBZ0M7QUFBQSxVQUNsQztBQUVBLG1CQUFTLDhCQUE4QjtBQUNyQyxnQkFBSSxrQkFBa0IsU0FBUztBQUM3QixrQkFBSSxPQUFPLGlCQUFpQixrQkFBa0IsUUFBUSxJQUFJO0FBRTFELGtCQUFJLE1BQU07QUFDUix1QkFBTyxxQ0FBcUMsT0FBTztBQUFBLGNBQ3JEO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLG1CQUFTLDJCQUEyQixRQUFRO0FBQzFDLGdCQUFJLFdBQVcsUUFBVztBQUN4QixrQkFBSSxXQUFXLE9BQU8sU0FBUyxRQUFRLGFBQWEsRUFBRTtBQUN0RCxrQkFBSSxhQUFhLE9BQU87QUFDeEIscUJBQU8sNEJBQTRCLFdBQVcsTUFBTSxhQUFhO0FBQUEsWUFDbkU7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxtQkFBUyxtQ0FBbUMsY0FBYztBQUN4RCxnQkFBSSxpQkFBaUIsUUFBUSxpQkFBaUIsUUFBVztBQUN2RCxxQkFBTywyQkFBMkIsYUFBYSxRQUFRO0FBQUEsWUFDekQ7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFRQSxjQUFJLHdCQUF3QixDQUFDO0FBRTdCLG1CQUFTLDZCQUE2QixZQUFZO0FBQ2hELGdCQUFJLE9BQU8sNEJBQTRCO0FBRXZDLGdCQUFJLENBQUMsTUFBTTtBQUNULGtCQUFJLGFBQWEsT0FBTyxlQUFlLFdBQVcsYUFBYSxXQUFXLGVBQWUsV0FBVztBQUVwRyxrQkFBSSxZQUFZO0FBQ2QsdUJBQU8sZ0RBQWdELGFBQWE7QUFBQSxjQUN0RTtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFjQSxtQkFBUyxvQkFBb0IsU0FBUyxZQUFZO0FBQ2hELGdCQUFJLENBQUMsUUFBUSxVQUFVLFFBQVEsT0FBTyxhQUFhLFFBQVEsT0FBTyxNQUFNO0FBQ3RFO0FBQUEsWUFDRjtBQUVBLG9CQUFRLE9BQU8sWUFBWTtBQUMzQixnQkFBSSw0QkFBNEIsNkJBQTZCLFVBQVU7QUFFdkUsZ0JBQUksc0JBQXNCLHlCQUF5QixHQUFHO0FBQ3BEO0FBQUEsWUFDRjtBQUVBLGtDQUFzQix5QkFBeUIsSUFBSTtBQUluRCxnQkFBSSxhQUFhO0FBRWpCLGdCQUFJLFdBQVcsUUFBUSxVQUFVLFFBQVEsV0FBVyxrQkFBa0IsU0FBUztBQUU3RSwyQkFBYSxpQ0FBaUMsaUJBQWlCLFFBQVEsT0FBTyxJQUFJLElBQUk7QUFBQSxZQUN4RjtBQUVBO0FBQ0UsOENBQWdDLE9BQU87QUFFdkMsb0JBQU0sNkhBQWtJLDJCQUEyQixVQUFVO0FBRTdLLDhDQUFnQyxJQUFJO0FBQUEsWUFDdEM7QUFBQSxVQUNGO0FBWUEsbUJBQVMsa0JBQWtCQyxPQUFNLFlBQVk7QUFDM0MsZ0JBQUksT0FBT0EsVUFBUyxVQUFVO0FBQzVCO0FBQUEsWUFDRjtBQUVBLGdCQUFJLE1BQU0sUUFBUUEsS0FBSSxHQUFHO0FBQ3ZCLHVCQUFTLElBQUksR0FBRyxJQUFJQSxNQUFLLFFBQVEsS0FBSztBQUNwQyxvQkFBSSxRQUFRQSxNQUFLLENBQUM7QUFFbEIsb0JBQUl0QixnQkFBZSxLQUFLLEdBQUc7QUFDekIsc0NBQW9CLE9BQU8sVUFBVTtBQUFBLGdCQUN2QztBQUFBLGNBQ0Y7QUFBQSxZQUNGLFdBQVdBLGdCQUFlc0IsS0FBSSxHQUFHO0FBRS9CLGtCQUFJQSxNQUFLLFFBQVE7QUFDZixnQkFBQUEsTUFBSyxPQUFPLFlBQVk7QUFBQSxjQUMxQjtBQUFBLFlBQ0YsV0FBV0EsT0FBTTtBQUNmLGtCQUFJLGFBQWEsY0FBY0EsS0FBSTtBQUVuQyxrQkFBSSxPQUFPLGVBQWUsWUFBWTtBQUdwQyxvQkFBSSxlQUFlQSxNQUFLLFNBQVM7QUFDL0Isc0JBQUksV0FBVyxXQUFXLEtBQUtBLEtBQUk7QUFDbkMsc0JBQUk7QUFFSix5QkFBTyxFQUFFLE9BQU8sU0FBUyxLQUFLLEdBQUcsTUFBTTtBQUNyQyx3QkFBSXRCLGdCQUFlLEtBQUssS0FBSyxHQUFHO0FBQzlCLDBDQUFvQixLQUFLLE9BQU8sVUFBVTtBQUFBLG9CQUM1QztBQUFBLGtCQUNGO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFTQSxtQkFBUyxrQkFBa0IsU0FBUztBQUNsQztBQUNFLGtCQUFJLE9BQU8sUUFBUTtBQUVuQixrQkFBSSxTQUFTLFFBQVEsU0FBUyxVQUFhLE9BQU8sU0FBUyxVQUFVO0FBQ25FO0FBQUEsY0FDRjtBQUVBLGtCQUFJO0FBRUosa0JBQUksT0FBTyxTQUFTLFlBQVk7QUFDOUIsNEJBQVksS0FBSztBQUFBLGNBQ25CLFdBQVcsT0FBTyxTQUFTLGFBQWEsS0FBSyxhQUFhO0FBQUE7QUFBQSxjQUUxRCxLQUFLLGFBQWEsa0JBQWtCO0FBQ2xDLDRCQUFZLEtBQUs7QUFBQSxjQUNuQixPQUFPO0FBQ0w7QUFBQSxjQUNGO0FBRUEsa0JBQUksV0FBVztBQUViLG9CQUFJLE9BQU8saUJBQWlCLElBQUk7QUFDaEMsK0JBQWUsV0FBVyxRQUFRLE9BQU8sUUFBUSxNQUFNLE9BQU87QUFBQSxjQUNoRSxXQUFXLEtBQUssY0FBYyxVQUFhLENBQUMsK0JBQStCO0FBQ3pFLGdEQUFnQztBQUVoQyxvQkFBSSxRQUFRLGlCQUFpQixJQUFJO0FBRWpDLHNCQUFNLHVHQUF1RyxTQUFTLFNBQVM7QUFBQSxjQUNqSTtBQUVBLGtCQUFJLE9BQU8sS0FBSyxvQkFBb0IsY0FBYyxDQUFDLEtBQUssZ0JBQWdCLHNCQUFzQjtBQUM1RixzQkFBTSw0SEFBaUk7QUFBQSxjQUN6STtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBT0EsbUJBQVMsc0JBQXNCLFVBQVU7QUFDdkM7QUFDRSxrQkFBSXVCLFFBQU8sT0FBTyxLQUFLLFNBQVMsS0FBSztBQUVyQyx1QkFBUyxJQUFJLEdBQUcsSUFBSUEsTUFBSyxRQUFRLEtBQUs7QUFDcEMsb0JBQUksTUFBTUEsTUFBSyxDQUFDO0FBRWhCLG9CQUFJLFFBQVEsY0FBYyxRQUFRLE9BQU87QUFDdkMsa0RBQWdDLFFBQVE7QUFFeEMsd0JBQU0sNEdBQWlILEdBQUc7QUFFMUgsa0RBQWdDLElBQUk7QUFDcEM7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxTQUFTLFFBQVEsTUFBTTtBQUN6QixnREFBZ0MsUUFBUTtBQUV4QyxzQkFBTSx1REFBdUQ7QUFFN0QsZ0RBQWdDLElBQUk7QUFBQSxjQUN0QztBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsNEJBQTRCLE1BQU0sT0FBTyxVQUFVO0FBQzFELGdCQUFJLFlBQVksbUJBQW1CLElBQUk7QUFHdkMsZ0JBQUksQ0FBQyxXQUFXO0FBQ2Qsa0JBQUksT0FBTztBQUVYLGtCQUFJLFNBQVMsVUFBYSxPQUFPLFNBQVMsWUFBWSxTQUFTLFFBQVEsT0FBTyxLQUFLLElBQUksRUFBRSxXQUFXLEdBQUc7QUFDckcsd0JBQVE7QUFBQSxjQUNWO0FBRUEsa0JBQUksYUFBYSxtQ0FBbUMsS0FBSztBQUV6RCxrQkFBSSxZQUFZO0FBQ2Qsd0JBQVE7QUFBQSxjQUNWLE9BQU87QUFDTCx3QkFBUSw0QkFBNEI7QUFBQSxjQUN0QztBQUVBLGtCQUFJO0FBRUosa0JBQUksU0FBUyxNQUFNO0FBQ2pCLDZCQUFhO0FBQUEsY0FDZixXQUFXLE1BQU0sUUFBUSxJQUFJLEdBQUc7QUFDOUIsNkJBQWE7QUFBQSxjQUNmLFdBQVcsU0FBUyxVQUFhLEtBQUssYUFBYSxvQkFBb0I7QUFDckUsNkJBQWEsT0FBTyxpQkFBaUIsS0FBSyxJQUFJLEtBQUssYUFBYTtBQUNoRSx1QkFBTztBQUFBLGNBQ1QsT0FBTztBQUNMLDZCQUFhLE9BQU87QUFBQSxjQUN0QjtBQUVBO0FBQ0Usc0JBQU0scUpBQStKLFlBQVksSUFBSTtBQUFBLGNBQ3ZMO0FBQUEsWUFDRjtBQUVBLGdCQUFJLFVBQVV6QixnQkFBYyxNQUFNLE1BQU0sU0FBUztBQUdqRCxnQkFBSSxXQUFXLE1BQU07QUFDbkIscUJBQU87QUFBQSxZQUNUO0FBT0EsZ0JBQUksV0FBVztBQUNiLHVCQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQ3pDLGtDQUFrQixVQUFVLENBQUMsR0FBRyxJQUFJO0FBQUEsY0FDdEM7QUFBQSxZQUNGO0FBRUEsZ0JBQUksU0FBUyxRQUFRLFVBQVU7QUFDN0Isb0NBQXNCLE9BQU87QUFBQSxZQUMvQixPQUFPO0FBQ0wsZ0NBQWtCLE9BQU87QUFBQSxZQUMzQjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUNBLGNBQUksc0NBQXNDO0FBQzFDLG1CQUFTLDRCQUE0QixNQUFNO0FBQ3pDLGdCQUFJLG1CQUFtQiw0QkFBNEIsS0FBSyxNQUFNLElBQUk7QUFDbEUsNkJBQWlCLE9BQU87QUFFeEI7QUFDRSxrQkFBSSxDQUFDLHFDQUFxQztBQUN4QyxzREFBc0M7QUFFdEMscUJBQUssc0pBQWdLO0FBQUEsY0FDdks7QUFHQSxxQkFBTyxlQUFlLGtCQUFrQixRQUFRO0FBQUEsZ0JBQzlDLFlBQVk7QUFBQSxnQkFDWixLQUFLLFdBQVk7QUFDZix1QkFBSywyRkFBZ0c7QUFFckcseUJBQU8sZUFBZSxNQUFNLFFBQVE7QUFBQSxvQkFDbEMsT0FBTztBQUFBLGtCQUNULENBQUM7QUFDRCx5QkFBTztBQUFBLGdCQUNUO0FBQUEsY0FDRixDQUFDO0FBQUEsWUFDSDtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUNBLG1CQUFTLDJCQUEyQixTQUFTLE9BQU8sVUFBVTtBQUM1RCxnQkFBSSxhQUFhQyxjQUFhLE1BQU0sTUFBTSxTQUFTO0FBRW5ELHFCQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQ3pDLGdDQUFrQixVQUFVLENBQUMsR0FBRyxXQUFXLElBQUk7QUFBQSxZQUNqRDtBQUVBLDhCQUFrQixVQUFVO0FBQzVCLG1CQUFPO0FBQUEsVUFDVDtBQUVBO0FBRUUsZ0JBQUk7QUFDRixrQkFBSSxlQUFlLE9BQU8sT0FBTyxDQUFDLENBQUM7QUFHbkMsa0NBQUksSUFBSSxDQUFDLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQztBQUM5QixrQ0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQUEsWUFFeEIsU0FBUyxHQUFHO0FBQUEsWUFDWjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLGtCQUFtQjtBQUN2QixjQUFJLGlCQUFrQjtBQUN0QixjQUFJLGdCQUFpQjtBQUNyQixjQUFJeUIsWUFBVztBQUFBLFlBQ2IsS0FBSztBQUFBLFlBQ0wsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFlBQ1AsU0FBU3BCO0FBQUEsWUFDVCxNQUFNO0FBQUEsVUFDUjtBQUVBLGtCQUFRLFdBQVdvQjtBQUNuQixrQkFBUSxZQUFZaEM7QUFDcEIsa0JBQVEsZ0JBQWdCQztBQUN4QixrQkFBUSxxREFBcUQ7QUFDN0Qsa0JBQVEsZUFBZTtBQUN2QixrQkFBUSxnQkFBZ0JZO0FBQ3hCLGtCQUFRLGdCQUFnQjtBQUN4QixrQkFBUSxnQkFBZ0I7QUFDeEIsa0JBQVEsWUFBWVg7QUFDcEIsa0JBQVEsYUFBYWE7QUFDckIsa0JBQVEsaUJBQWlCUDtBQUN6QixrQkFBUSxPQUFPO0FBQ2Ysa0JBQVEsT0FBT1M7QUFDZixrQkFBUSxjQUFjUTtBQUN0QixrQkFBUSxhQUFhUDtBQUNyQixrQkFBUSxnQkFBZ0I7QUFDeEIsa0JBQVEsWUFBWUs7QUFDcEIsa0JBQVEsc0JBQXNCO0FBQzlCLGtCQUFRLGtCQUFrQkM7QUFDMUIsa0JBQVEsVUFBVUU7QUFDbEIsa0JBQVEsYUFBYU47QUFDckIsa0JBQVEsU0FBU0U7QUFDakIsa0JBQVEsV0FBV0g7QUFDbkIsa0JBQVEsVUFBVTtBQUFBLFFBQ2hCLEdBQUc7QUFBQSxNQUNMO0FBQUE7QUFBQTs7O0FDNXhFQTtBQUFBO0FBQUE7QUFFQSxVQUFJLE9BQXVDO0FBQ3pDLGVBQU8sVUFBVTtBQUFBLE1BQ25CLE9BQU87QUFDTCxlQUFPLFVBQVU7QUFBQSxNQUNuQjtBQUFBO0FBQUE7OztBQ05BO0FBQUE7QUFBQTtBQVdBLFVBQUksTUFBdUM7QUFDekMsU0FBQyxXQUFXO0FBQ2Q7QUFFQSxjQUFJLDJCQUEyQjtBQUMvQixjQUFJLGtCQUFrQjtBQUV0QixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBQ0osY0FBSSxvQkFBb0IsT0FBTyxnQkFBZ0IsWUFBWSxPQUFPLFlBQVksUUFBUTtBQUV0RixjQUFJLG1CQUFtQjtBQUNyQixnQkFBSSxtQkFBbUI7QUFFdkIsb0JBQVEsZUFBZSxXQUFZO0FBQ2pDLHFCQUFPLGlCQUFpQixJQUFJO0FBQUEsWUFDOUI7QUFBQSxVQUNGLE9BQU87QUFDTCxnQkFBSSxZQUFZO0FBQ2hCLGdCQUFJLGNBQWMsVUFBVSxJQUFJO0FBRWhDLG9CQUFRLGVBQWUsV0FBWTtBQUNqQyxxQkFBTyxVQUFVLElBQUksSUFBSTtBQUFBLFlBQzNCO0FBQUEsVUFDRjtBQUVBO0FBQUE7QUFBQTtBQUFBLFlBRUEsT0FBTyxXQUFXO0FBQUEsWUFDbEIsT0FBTyxtQkFBbUI7QUFBQSxZQUFZO0FBR3BDLGdCQUFJLFlBQVk7QUFDaEIsZ0JBQUksYUFBYTtBQUVqQixnQkFBSSxpQkFBaUIsV0FBWTtBQUMvQixrQkFBSSxjQUFjLE1BQU07QUFDdEIsb0JBQUk7QUFDRixzQkFBSSxjQUFjLFFBQVEsYUFBYTtBQUN2QyxzQkFBSSxtQkFBbUI7QUFFdkIsNEJBQVUsa0JBQWtCLFdBQVc7QUFFdkMsOEJBQVk7QUFBQSxnQkFDZCxTQUFTLEdBQUc7QUFDViw2QkFBVyxnQkFBZ0IsQ0FBQztBQUM1Qix3QkFBTTtBQUFBLGdCQUNSO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxrQ0FBc0IsU0FBVSxJQUFJO0FBQ2xDLGtCQUFJLGNBQWMsTUFBTTtBQUV0QiwyQkFBVyxxQkFBcUIsR0FBRyxFQUFFO0FBQUEsY0FDdkMsT0FBTztBQUNMLDRCQUFZO0FBQ1osMkJBQVcsZ0JBQWdCLENBQUM7QUFBQSxjQUM5QjtBQUFBLFlBQ0Y7QUFFQSxpQ0FBcUIsU0FBVSxJQUFJLElBQUk7QUFDckMsMkJBQWEsV0FBVyxJQUFJLEVBQUU7QUFBQSxZQUNoQztBQUVBLGdDQUFvQixXQUFZO0FBQzlCLDJCQUFhLFVBQVU7QUFBQSxZQUN6QjtBQUVBLG9CQUFRLHVCQUF1QixXQUFZO0FBQ3pDLHFCQUFPO0FBQUEsWUFDVDtBQUVBLDJCQUFlLFFBQVEsMEJBQTBCLFdBQVk7QUFBQSxZQUFDO0FBQUEsVUFDaEUsT0FBTztBQUVMLGdCQUFJLGNBQWMsT0FBTztBQUN6QixnQkFBSSxnQkFBZ0IsT0FBTztBQUUzQixnQkFBSSxPQUFPLFlBQVksYUFBYTtBQUlsQyxrQkFBSWMseUJBQXdCLE9BQU87QUFDbkMsa0JBQUlDLHdCQUF1QixPQUFPO0FBRWxDLGtCQUFJLE9BQU9ELDJCQUEwQixZQUFZO0FBRS9DLHdCQUFRLE9BQU8sRUFBRSxvSkFBOEo7QUFBQSxjQUNqTDtBQUVBLGtCQUFJLE9BQU9DLDBCQUF5QixZQUFZO0FBRTlDLHdCQUFRLE9BQU8sRUFBRSxtSkFBNko7QUFBQSxjQUNoTDtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSx1QkFBdUI7QUFDM0IsZ0JBQUksd0JBQXdCO0FBQzVCLGdCQUFJLGdCQUFnQjtBQUtwQixnQkFBSSxnQkFBZ0I7QUFDcEIsZ0JBQUksV0FBVztBQUVmO0FBR0Usc0JBQVEsdUJBQXVCLFdBQVk7QUFDekMsdUJBQU8sUUFBUSxhQUFhLEtBQUs7QUFBQSxjQUNuQztBQUdBLDZCQUFlLFdBQVk7QUFBQSxjQUFDO0FBQUEsWUFDOUI7QUFFQSxvQkFBUSwwQkFBMEIsU0FBVSxLQUFLO0FBQy9DLGtCQUFJLE1BQU0sS0FBSyxNQUFNLEtBQUs7QUFFeEIsd0JBQVEsT0FBTyxFQUFFLGlIQUFzSDtBQUN2STtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxNQUFNLEdBQUc7QUFDWCxnQ0FBZ0IsS0FBSyxNQUFNLE1BQU8sR0FBRztBQUFBLGNBQ3ZDLE9BQU87QUFFTCxnQ0FBZ0I7QUFBQSxjQUNsQjtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSwyQkFBMkIsV0FBWTtBQUN6QyxrQkFBSSwwQkFBMEIsTUFBTTtBQUNsQyxvQkFBSSxjQUFjLFFBQVEsYUFBYTtBQUl2QywyQkFBVyxjQUFjO0FBQ3pCLG9CQUFJLG1CQUFtQjtBQUV2QixvQkFBSTtBQUNGLHNCQUFJLGNBQWMsc0JBQXNCLGtCQUFrQixXQUFXO0FBRXJFLHNCQUFJLENBQUMsYUFBYTtBQUNoQiwyQ0FBdUI7QUFDdkIsNENBQXdCO0FBQUEsa0JBQzFCLE9BQU87QUFHTCx5QkFBSyxZQUFZLElBQUk7QUFBQSxrQkFDdkI7QUFBQSxnQkFDRixTQUFTLE9BQU87QUFHZCx1QkFBSyxZQUFZLElBQUk7QUFDckIsd0JBQU07QUFBQSxnQkFDUjtBQUFBLGNBQ0YsT0FBTztBQUNMLHVDQUF1QjtBQUFBLGNBQ3pCO0FBQUEsWUFDRjtBQUVBLGdCQUFJLFVBQVUsSUFBSSxlQUFlO0FBQ2pDLGdCQUFJLE9BQU8sUUFBUTtBQUNuQixvQkFBUSxNQUFNLFlBQVk7QUFFMUIsa0NBQXNCLFNBQVUsVUFBVTtBQUN4QyxzQ0FBd0I7QUFFeEIsa0JBQUksQ0FBQyxzQkFBc0I7QUFDekIsdUNBQXVCO0FBQ3ZCLHFCQUFLLFlBQVksSUFBSTtBQUFBLGNBQ3ZCO0FBQUEsWUFDRjtBQUVBLGlDQUFxQixTQUFVLFVBQVUsSUFBSTtBQUMzQyw4QkFBZ0IsWUFBWSxXQUFZO0FBQ3RDLHlCQUFTLFFBQVEsYUFBYSxDQUFDO0FBQUEsY0FDakMsR0FBRyxFQUFFO0FBQUEsWUFDUDtBQUVBLGdDQUFvQixXQUFZO0FBQzlCLDRCQUFjLGFBQWE7QUFFM0IsOEJBQWdCO0FBQUEsWUFDbEI7QUFBQSxVQUNGO0FBRUEsbUJBQVMsS0FBSyxNQUFNQyxPQUFNO0FBQ3hCLGdCQUFJLFFBQVEsS0FBSztBQUNqQixpQkFBSyxLQUFLQSxLQUFJO0FBQ2QsbUJBQU8sTUFBTUEsT0FBTSxLQUFLO0FBQUEsVUFDMUI7QUFDQSxtQkFBU0MsTUFBSyxNQUFNO0FBQ2xCLGdCQUFJLFFBQVEsS0FBSyxDQUFDO0FBQ2xCLG1CQUFPLFVBQVUsU0FBWSxPQUFPO0FBQUEsVUFDdEM7QUFDQSxtQkFBUyxJQUFJLE1BQU07QUFDakIsZ0JBQUksUUFBUSxLQUFLLENBQUM7QUFFbEIsZ0JBQUksVUFBVSxRQUFXO0FBQ3ZCLGtCQUFJLE9BQU8sS0FBSyxJQUFJO0FBRXBCLGtCQUFJLFNBQVMsT0FBTztBQUNsQixxQkFBSyxDQUFDLElBQUk7QUFDVix5QkFBUyxNQUFNLE1BQU0sQ0FBQztBQUFBLGNBQ3hCO0FBRUEscUJBQU87QUFBQSxZQUNULE9BQU87QUFDTCxxQkFBTztBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBRUEsbUJBQVMsT0FBTyxNQUFNRCxPQUFNLEdBQUc7QUFDN0IsZ0JBQUksUUFBUTtBQUVaLG1CQUFPLE1BQU07QUFDWCxrQkFBSSxjQUFjLFFBQVEsTUFBTTtBQUNoQyxrQkFBSSxTQUFTLEtBQUssV0FBVztBQUU3QixrQkFBSSxXQUFXLFVBQWEsUUFBUSxRQUFRQSxLQUFJLElBQUksR0FBRztBQUVyRCxxQkFBSyxXQUFXLElBQUlBO0FBQ3BCLHFCQUFLLEtBQUssSUFBSTtBQUNkLHdCQUFRO0FBQUEsY0FDVixPQUFPO0FBRUw7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxTQUFTLE1BQU1BLE9BQU0sR0FBRztBQUMvQixnQkFBSSxRQUFRO0FBQ1osZ0JBQUlFLFVBQVMsS0FBSztBQUVsQixtQkFBTyxRQUFRQSxTQUFRO0FBQ3JCLGtCQUFJLGFBQWEsUUFBUSxLQUFLLElBQUk7QUFDbEMsa0JBQUksT0FBTyxLQUFLLFNBQVM7QUFDekIsa0JBQUksYUFBYSxZQUFZO0FBQzdCLGtCQUFJLFFBQVEsS0FBSyxVQUFVO0FBRTNCLGtCQUFJLFNBQVMsVUFBYSxRQUFRLE1BQU1GLEtBQUksSUFBSSxHQUFHO0FBQ2pELG9CQUFJLFVBQVUsVUFBYSxRQUFRLE9BQU8sSUFBSSxJQUFJLEdBQUc7QUFDbkQsdUJBQUssS0FBSyxJQUFJO0FBQ2QsdUJBQUssVUFBVSxJQUFJQTtBQUNuQiwwQkFBUTtBQUFBLGdCQUNWLE9BQU87QUFDTCx1QkFBSyxLQUFLLElBQUk7QUFDZCx1QkFBSyxTQUFTLElBQUlBO0FBQ2xCLDBCQUFRO0FBQUEsZ0JBQ1Y7QUFBQSxjQUNGLFdBQVcsVUFBVSxVQUFhLFFBQVEsT0FBT0EsS0FBSSxJQUFJLEdBQUc7QUFDMUQscUJBQUssS0FBSyxJQUFJO0FBQ2QscUJBQUssVUFBVSxJQUFJQTtBQUNuQix3QkFBUTtBQUFBLGNBQ1YsT0FBTztBQUVMO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsbUJBQVMsUUFBUSxHQUFHLEdBQUc7QUFFckIsZ0JBQUksT0FBTyxFQUFFLFlBQVksRUFBRTtBQUMzQixtQkFBTyxTQUFTLElBQUksT0FBTyxFQUFFLEtBQUssRUFBRTtBQUFBLFVBQ3RDO0FBR0EsY0FBSSxvQkFBb0I7QUFDeEIsY0FBSSx1QkFBdUI7QUFDM0IsY0FBSSxpQkFBaUI7QUFDckIsY0FBSSxjQUFjO0FBQ2xCLGNBQUksZUFBZTtBQUVuQixtQkFBUyxnQkFBZ0IsTUFBTSxJQUFJO0FBQUEsVUFDbkM7QUFNQSxjQUFJLG9CQUFvQjtBQUV4QixjQUFJLDZCQUE2QjtBQUVqQyxjQUFJLGlDQUFpQztBQUNyQyxjQUFJLDBCQUEwQjtBQUM5QixjQUFJLHVCQUF1QjtBQUUzQixjQUFJLHdCQUF3QjtBQUU1QixjQUFJLFlBQVksQ0FBQztBQUNqQixjQUFJLGFBQWEsQ0FBQztBQUVsQixjQUFJLGdCQUFnQjtBQUNwQixjQUFJLGNBQWM7QUFDbEIsY0FBSSx1QkFBdUI7QUFFM0IsY0FBSSxtQkFBbUI7QUFDdkIsY0FBSSwwQkFBMEI7QUFDOUIsY0FBSSx5QkFBeUI7QUFFN0IsbUJBQVMsY0FBYyxhQUFhO0FBRWxDLGdCQUFJLFFBQVFDLE1BQUssVUFBVTtBQUUzQixtQkFBTyxVQUFVLE1BQU07QUFDckIsa0JBQUksTUFBTSxhQUFhLE1BQU07QUFFM0Isb0JBQUksVUFBVTtBQUFBLGNBQ2hCLFdBQVcsTUFBTSxhQUFhLGFBQWE7QUFFekMsb0JBQUksVUFBVTtBQUNkLHNCQUFNLFlBQVksTUFBTTtBQUN4QixxQkFBSyxXQUFXLEtBQUs7QUFBQSxjQUN2QixPQUFPO0FBRUw7QUFBQSxjQUNGO0FBRUEsc0JBQVFBLE1BQUssVUFBVTtBQUFBLFlBQ3pCO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGNBQWMsYUFBYTtBQUNsQyxxQ0FBeUI7QUFDekIsMEJBQWMsV0FBVztBQUV6QixnQkFBSSxDQUFDLHlCQUF5QjtBQUM1QixrQkFBSUEsTUFBSyxTQUFTLE1BQU0sTUFBTTtBQUM1QiwwQ0FBMEI7QUFDMUIsb0NBQW9CLFNBQVM7QUFBQSxjQUMvQixPQUFPO0FBQ0wsb0JBQUksYUFBYUEsTUFBSyxVQUFVO0FBRWhDLG9CQUFJLGVBQWUsTUFBTTtBQUN2QixxQ0FBbUIsZUFBZSxXQUFXLFlBQVksV0FBVztBQUFBLGdCQUN0RTtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLG1CQUFTLFVBQVUsa0JBQWtCRSxjQUFhO0FBR2hELHNDQUEwQjtBQUUxQixnQkFBSSx3QkFBd0I7QUFFMUIsdUNBQXlCO0FBQ3pCLGdDQUFrQjtBQUFBLFlBQ3BCO0FBRUEsK0JBQW1CO0FBQ25CLGdCQUFJLHdCQUF3QjtBQUU1QixnQkFBSTtBQUNGLGtCQUFJLGlCQUFpQjtBQUNuQixvQkFBSTtBQUNGLHlCQUFPLFNBQVMsa0JBQWtCQSxZQUFXO0FBQUEsZ0JBQy9DLFNBQVMsT0FBTztBQUNkLHNCQUFJLGdCQUFnQixNQUFNO0FBQ3hCLHdCQUFJLGNBQWMsUUFBUSxhQUFhO0FBQ3ZDLG9DQUFnQixhQUFhLFdBQVc7QUFDeEMsZ0NBQVksV0FBVztBQUFBLGtCQUN6QjtBQUVBLHdCQUFNO0FBQUEsZ0JBQ1I7QUFBQSxjQUNGLE9BQU87QUFFTCx1QkFBTyxTQUFTLGtCQUFrQkEsWUFBVztBQUFBLGNBQy9DO0FBQUEsWUFDRixVQUFFO0FBQ0EsNEJBQWM7QUFDZCxxQ0FBdUI7QUFDdkIsaUNBQW1CO0FBQUEsWUFDckI7QUFBQSxVQUNGO0FBRUEsbUJBQVMsU0FBUyxrQkFBa0JBLGNBQWE7QUFDL0MsZ0JBQUksY0FBY0E7QUFDbEIsMEJBQWMsV0FBVztBQUN6QiwwQkFBY0YsTUFBSyxTQUFTO0FBRTVCLG1CQUFPLGdCQUFnQixRQUFRLENBQUUsMEJBQTRCO0FBQzNELGtCQUFJLFlBQVksaUJBQWlCLGdCQUFnQixDQUFDLG9CQUFvQixRQUFRLHFCQUFxQixJQUFJO0FBRXJHO0FBQUEsY0FDRjtBQUVBLGtCQUFJLFdBQVcsWUFBWTtBQUUzQixrQkFBSSxPQUFPLGFBQWEsWUFBWTtBQUNsQyw0QkFBWSxXQUFXO0FBQ3ZCLHVDQUF1QixZQUFZO0FBQ25DLG9CQUFJLHlCQUF5QixZQUFZLGtCQUFrQjtBQUUzRCxvQkFBSSx1QkFBdUIsU0FBUyxzQkFBc0I7QUFDMUQsOEJBQWMsUUFBUSxhQUFhO0FBRW5DLG9CQUFJLE9BQU8seUJBQXlCLFlBQVk7QUFDOUMsOEJBQVksV0FBVztBQUFBLGdCQUN6QixPQUFPO0FBRUwsc0JBQUksZ0JBQWdCQSxNQUFLLFNBQVMsR0FBRztBQUNuQyx3QkFBSSxTQUFTO0FBQUEsa0JBQ2Y7QUFBQSxnQkFDRjtBQUVBLDhCQUFjLFdBQVc7QUFBQSxjQUMzQixPQUFPO0FBQ0wsb0JBQUksU0FBUztBQUFBLGNBQ2Y7QUFFQSw0QkFBY0EsTUFBSyxTQUFTO0FBQUEsWUFDOUI7QUFHQSxnQkFBSSxnQkFBZ0IsTUFBTTtBQUN4QixxQkFBTztBQUFBLFlBQ1QsT0FBTztBQUNMLGtCQUFJLGFBQWFBLE1BQUssVUFBVTtBQUVoQyxrQkFBSSxlQUFlLE1BQU07QUFDdkIsbUNBQW1CLGVBQWUsV0FBVyxZQUFZLFdBQVc7QUFBQSxjQUN0RTtBQUVBLHFCQUFPO0FBQUEsWUFDVDtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyx5QkFBeUIsZUFBZSxjQUFjO0FBQzdELG9CQUFRLGVBQWU7QUFBQSxjQUNyQixLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQ0g7QUFBQSxjQUVGO0FBQ0UsZ0NBQWdCO0FBQUEsWUFDcEI7QUFFQSxnQkFBSSx3QkFBd0I7QUFDNUIsbUNBQXVCO0FBRXZCLGdCQUFJO0FBQ0YscUJBQU8sYUFBYTtBQUFBLFlBQ3RCLFVBQUU7QUFDQSxxQ0FBdUI7QUFBQSxZQUN6QjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxjQUFjLGNBQWM7QUFDbkMsZ0JBQUk7QUFFSixvQkFBUSxzQkFBc0I7QUFBQSxjQUM1QixLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBRUgsZ0NBQWdCO0FBQ2hCO0FBQUEsY0FFRjtBQUVFLGdDQUFnQjtBQUNoQjtBQUFBLFlBQ0o7QUFFQSxnQkFBSSx3QkFBd0I7QUFDNUIsbUNBQXVCO0FBRXZCLGdCQUFJO0FBQ0YscUJBQU8sYUFBYTtBQUFBLFlBQ3RCLFVBQUU7QUFDQSxxQ0FBdUI7QUFBQSxZQUN6QjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxzQkFBc0IsVUFBVTtBQUN2QyxnQkFBSSxzQkFBc0I7QUFDMUIsbUJBQU8sV0FBWTtBQUVqQixrQkFBSSx3QkFBd0I7QUFDNUIscUNBQXVCO0FBRXZCLGtCQUFJO0FBQ0YsdUJBQU8sU0FBUyxNQUFNLE1BQU0sU0FBUztBQUFBLGNBQ3ZDLFVBQUU7QUFDQSx1Q0FBdUI7QUFBQSxjQUN6QjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsbUJBQVMsMEJBQTBCLGVBQWUsVUFBVSxTQUFTO0FBQ25FLGdCQUFJLGNBQWMsUUFBUSxhQUFhO0FBQ3ZDLGdCQUFJO0FBRUosZ0JBQUksT0FBTyxZQUFZLFlBQVksWUFBWSxNQUFNO0FBQ25ELGtCQUFJLFFBQVEsUUFBUTtBQUVwQixrQkFBSSxPQUFPLFVBQVUsWUFBWSxRQUFRLEdBQUc7QUFDMUMsNEJBQVksY0FBYztBQUFBLGNBQzVCLE9BQU87QUFDTCw0QkFBWTtBQUFBLGNBQ2Q7QUFBQSxZQUNGLE9BQU87QUFDTCwwQkFBWTtBQUFBLFlBQ2Q7QUFFQSxnQkFBSTtBQUVKLG9CQUFRLGVBQWU7QUFBQSxjQUNyQixLQUFLO0FBQ0gsMEJBQVU7QUFDVjtBQUFBLGNBRUYsS0FBSztBQUNILDBCQUFVO0FBQ1Y7QUFBQSxjQUVGLEtBQUs7QUFDSCwwQkFBVTtBQUNWO0FBQUEsY0FFRixLQUFLO0FBQ0gsMEJBQVU7QUFDVjtBQUFBLGNBRUYsS0FBSztBQUFBLGNBQ0w7QUFDRSwwQkFBVTtBQUNWO0FBQUEsWUFDSjtBQUVBLGdCQUFJLGlCQUFpQixZQUFZO0FBQ2pDLGdCQUFJLFVBQVU7QUFBQSxjQUNaLElBQUk7QUFBQSxjQUNKO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQSxXQUFXO0FBQUEsWUFDYjtBQUVBLGdCQUFJLFlBQVksYUFBYTtBQUUzQixzQkFBUSxZQUFZO0FBQ3BCLG1CQUFLLFlBQVksT0FBTztBQUV4QixrQkFBSUEsTUFBSyxTQUFTLE1BQU0sUUFBUSxZQUFZQSxNQUFLLFVBQVUsR0FBRztBQUU1RCxvQkFBSSx3QkFBd0I7QUFFMUIsb0NBQWtCO0FBQUEsZ0JBQ3BCLE9BQU87QUFDTCwyQ0FBeUI7QUFBQSxnQkFDM0I7QUFHQSxtQ0FBbUIsZUFBZSxZQUFZLFdBQVc7QUFBQSxjQUMzRDtBQUFBLFlBQ0YsT0FBTztBQUNMLHNCQUFRLFlBQVk7QUFDcEIsbUJBQUssV0FBVyxPQUFPO0FBSXZCLGtCQUFJLENBQUMsMkJBQTJCLENBQUMsa0JBQWtCO0FBQ2pELDBDQUEwQjtBQUMxQixvQ0FBb0IsU0FBUztBQUFBLGNBQy9CO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLG1CQUFTLDBCQUEwQjtBQUFBLFVBQ25DO0FBRUEsbUJBQVMsNkJBQTZCO0FBRXBDLGdCQUFJLENBQUMsMkJBQTJCLENBQUMsa0JBQWtCO0FBQ2pELHdDQUEwQjtBQUMxQixrQ0FBb0IsU0FBUztBQUFBLFlBQy9CO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGdDQUFnQztBQUN2QyxtQkFBT0EsTUFBSyxTQUFTO0FBQUEsVUFDdkI7QUFFQSxtQkFBUyx3QkFBd0IsTUFBTTtBQUtyQyxpQkFBSyxXQUFXO0FBQUEsVUFDbEI7QUFFQSxtQkFBUyxtQ0FBbUM7QUFDMUMsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSx3QkFBd0I7QUFDNUIsY0FBSSxxQkFBc0I7QUFFMUIsa0JBQVEsd0JBQXdCO0FBQ2hDLGtCQUFRLDZCQUE2QjtBQUNyQyxrQkFBUSx1QkFBdUI7QUFDL0Isa0JBQVEsMEJBQTBCO0FBQ2xDLGtCQUFRLHFCQUFxQjtBQUM3QixrQkFBUSxnQ0FBZ0M7QUFDeEMsa0JBQVEsMEJBQTBCO0FBQ2xDLGtCQUFRLDZCQUE2QjtBQUNyQyxrQkFBUSxtQ0FBbUM7QUFDM0Msa0JBQVEsZ0NBQWdDO0FBQ3hDLGtCQUFRLGdCQUFnQjtBQUN4QixrQkFBUSwwQkFBMEI7QUFDbEMsa0JBQVEsd0JBQXdCO0FBQ2hDLGtCQUFRLDJCQUEyQjtBQUNuQyxrQkFBUSw0QkFBNEI7QUFDcEMsa0JBQVEsd0JBQXdCO0FBQUEsUUFDOUIsR0FBRztBQUFBLE1BQ0w7QUFBQTtBQUFBOzs7QUNyb0JBO0FBQUE7QUFBQTtBQUVBLFVBQUksT0FBdUM7QUFDekMsZUFBTyxVQUFVO0FBQUEsTUFDbkIsT0FBTztBQUNMLGVBQU8sVUFBVTtBQUFBLE1BQ25CO0FBQUE7QUFBQTs7O0FDTkE7QUFBQTtBQUFBO0FBV0EsVUFBSSxNQUF1QztBQUN6QyxTQUFDLFdBQVc7QUFDZDtBQUVBLGNBQUksb0JBQW9CO0FBRXhCLGNBQUksdUJBQXVCO0FBQzNCLGNBQUksa0JBQWtCO0FBS3RCLGtCQUFRLG9CQUFvQjtBQUU1QixrQkFBUSxrQkFBa0I7QUFFMUI7QUFDRSxvQkFBUSxvQkFBb0I7QUFBQSxjQUMxQixTQUFTLG9CQUFJLElBQUk7QUFBQSxZQUNuQjtBQUNBLG9CQUFRLGtCQUFrQjtBQUFBLGNBQ3hCLFNBQVM7QUFBQSxZQUNYO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGVBQWUsVUFBVTtBQUVoQyxnQkFBSSxtQkFBbUIsUUFBUSxrQkFBa0I7QUFDakQsb0JBQVEsa0JBQWtCLFVBQVUsb0JBQUksSUFBSTtBQUU1QyxnQkFBSTtBQUNGLHFCQUFPLFNBQVM7QUFBQSxZQUNsQixVQUFFO0FBQ0Esc0JBQVEsa0JBQWtCLFVBQVU7QUFBQSxZQUN0QztBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxzQkFBc0I7QUFDN0I7QUFDRSxxQkFBTyxRQUFRLGtCQUFrQjtBQUFBLFlBQ25DO0FBQUEsVUFDRjtBQUNBLG1CQUFTLHVCQUF1QjtBQUM5QixtQkFBTyxFQUFFO0FBQUEsVUFDWDtBQUNBLG1CQUFTLGVBQWUsTUFBTSxXQUFXLFVBQVU7QUFDakQsZ0JBQUksV0FBVyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJO0FBRW5GLGdCQUFJLGNBQWM7QUFBQSxjQUNoQixTQUFTO0FBQUEsY0FDVCxJQUFJO0FBQUEsY0FDSjtBQUFBLGNBQ0E7QUFBQSxZQUNGO0FBQ0EsZ0JBQUksbUJBQW1CLFFBQVEsa0JBQWtCO0FBSWpELGdCQUFJLGVBQWUsSUFBSSxJQUFJLGdCQUFnQjtBQUMzQyx5QkFBYSxJQUFJLFdBQVc7QUFDNUIsb0JBQVEsa0JBQWtCLFVBQVU7QUFDcEMsZ0JBQUksYUFBYSxRQUFRLGdCQUFnQjtBQUN6QyxnQkFBSTtBQUVKLGdCQUFJO0FBQ0Ysa0JBQUksZUFBZSxNQUFNO0FBQ3ZCLDJCQUFXLG9CQUFvQixXQUFXO0FBQUEsY0FDNUM7QUFBQSxZQUNGLFVBQUU7QUFDQSxrQkFBSTtBQUNGLG9CQUFJLGVBQWUsTUFBTTtBQUN2Qiw2QkFBVyxjQUFjLGNBQWMsUUFBUTtBQUFBLGdCQUNqRDtBQUFBLGNBQ0YsVUFBRTtBQUNBLG9CQUFJO0FBQ0YsZ0NBQWMsU0FBUztBQUFBLGdCQUN6QixVQUFFO0FBQ0EsMEJBQVEsa0JBQWtCLFVBQVU7QUFFcEMsc0JBQUk7QUFDRix3QkFBSSxlQUFlLE1BQU07QUFDdkIsaUNBQVcsY0FBYyxjQUFjLFFBQVE7QUFBQSxvQkFDakQ7QUFBQSxrQkFDRixVQUFFO0FBQ0EsZ0NBQVk7QUFHWix3QkFBSSxlQUFlLFFBQVEsWUFBWSxZQUFZLEdBQUc7QUFDcEQsaUNBQVcsb0NBQW9DLFdBQVc7QUFBQSxvQkFDNUQ7QUFBQSxrQkFDRjtBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFDQSxtQkFBUyxjQUFjLFVBQVU7QUFDL0IsZ0JBQUksV0FBVyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJO0FBRW5GLGdCQUFJLHNCQUFzQixRQUFRLGtCQUFrQjtBQUNwRCxnQkFBSSxhQUFhLFFBQVEsZ0JBQWdCO0FBRXpDLGdCQUFJLGVBQWUsTUFBTTtBQUN2Qix5QkFBVyxnQkFBZ0IscUJBQXFCLFFBQVE7QUFBQSxZQUMxRDtBQUlBLGdDQUFvQixRQUFRLFNBQVUsYUFBYTtBQUNqRCwwQkFBWTtBQUFBLFlBQ2QsQ0FBQztBQUNELGdCQUFJLFNBQVM7QUFFYixxQkFBUyxVQUFVO0FBQ2pCLGtCQUFJLG1CQUFtQixRQUFRLGtCQUFrQjtBQUNqRCxzQkFBUSxrQkFBa0IsVUFBVTtBQUNwQywyQkFBYSxRQUFRLGdCQUFnQjtBQUVyQyxrQkFBSTtBQUNGLG9CQUFJO0FBRUosb0JBQUk7QUFDRixzQkFBSSxlQUFlLE1BQU07QUFDdkIsK0JBQVcsY0FBYyxxQkFBcUIsUUFBUTtBQUFBLGtCQUN4RDtBQUFBLGdCQUNGLFVBQUU7QUFDQSxzQkFBSTtBQUNGLGtDQUFjLFNBQVMsTUFBTSxRQUFXLFNBQVM7QUFBQSxrQkFDbkQsVUFBRTtBQUNBLDRCQUFRLGtCQUFrQixVQUFVO0FBRXBDLHdCQUFJLGVBQWUsTUFBTTtBQUN2QixpQ0FBVyxjQUFjLHFCQUFxQixRQUFRO0FBQUEsb0JBQ3hEO0FBQUEsa0JBQ0Y7QUFBQSxnQkFDRjtBQUVBLHVCQUFPO0FBQUEsY0FDVCxVQUFFO0FBQ0Esb0JBQUksQ0FBQyxRQUFRO0FBSVgsMkJBQVM7QUFJVCxzQ0FBb0IsUUFBUSxTQUFVLGFBQWE7QUFDakQsZ0NBQVk7QUFFWix3QkFBSSxlQUFlLFFBQVEsWUFBWSxZQUFZLEdBQUc7QUFDcEQsaUNBQVcsb0NBQW9DLFdBQVc7QUFBQSxvQkFDNUQ7QUFBQSxrQkFDRixDQUFDO0FBQUEsZ0JBQ0g7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBLG9CQUFRLFNBQVMsU0FBUyxTQUFTO0FBQ2pDLDJCQUFhLFFBQVEsZ0JBQWdCO0FBRXJDLGtCQUFJO0FBQ0Ysb0JBQUksZUFBZSxNQUFNO0FBQ3ZCLDZCQUFXLGVBQWUscUJBQXFCLFFBQVE7QUFBQSxnQkFDekQ7QUFBQSxjQUNGLFVBQUU7QUFJQSxvQ0FBb0IsUUFBUSxTQUFVLGFBQWE7QUFDakQsOEJBQVk7QUFFWixzQkFBSSxjQUFjLFlBQVksWUFBWSxHQUFHO0FBQzNDLCtCQUFXLG9DQUFvQyxXQUFXO0FBQUEsa0JBQzVEO0FBQUEsZ0JBQ0YsQ0FBQztBQUFBLGNBQ0g7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSxjQUFjO0FBRWxCO0FBQ0UsMEJBQWMsb0JBQUksSUFBSTtBQUFBLFVBQ3hCO0FBRUEsbUJBQVMsbUJBQW1CLFlBQVk7QUFDdEM7QUFDRSwwQkFBWSxJQUFJLFVBQVU7QUFFMUIsa0JBQUksWUFBWSxTQUFTLEdBQUc7QUFDMUIsd0JBQVEsZ0JBQWdCLFVBQVU7QUFBQSxrQkFDaEM7QUFBQSxrQkFDQTtBQUFBLGtCQUNBO0FBQUEsa0JBQ0E7QUFBQSxrQkFDQTtBQUFBLGtCQUNBO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxxQkFBcUIsWUFBWTtBQUN4QztBQUNFLDBCQUFZLE9BQU8sVUFBVTtBQUU3QixrQkFBSSxZQUFZLFNBQVMsR0FBRztBQUMxQix3QkFBUSxnQkFBZ0IsVUFBVTtBQUFBLGNBQ3BDO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxvQkFBb0IsYUFBYTtBQUN4QyxnQkFBSSxnQkFBZ0I7QUFDcEIsZ0JBQUksY0FBYztBQUNsQix3QkFBWSxRQUFRLFNBQVUsWUFBWTtBQUN4QyxrQkFBSTtBQUNGLDJCQUFXLG9CQUFvQixXQUFXO0FBQUEsY0FDNUMsU0FBUyxPQUFPO0FBQ2Qsb0JBQUksQ0FBQyxlQUFlO0FBQ2xCLGtDQUFnQjtBQUNoQixnQ0FBYztBQUFBLGdCQUNoQjtBQUFBLGNBQ0Y7QUFBQSxZQUNGLENBQUM7QUFFRCxnQkFBSSxlQUFlO0FBQ2pCLG9CQUFNO0FBQUEsWUFDUjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxvQ0FBb0MsYUFBYTtBQUN4RCxnQkFBSSxnQkFBZ0I7QUFDcEIsZ0JBQUksY0FBYztBQUNsQix3QkFBWSxRQUFRLFNBQVUsWUFBWTtBQUN4QyxrQkFBSTtBQUNGLDJCQUFXLG9DQUFvQyxXQUFXO0FBQUEsY0FDNUQsU0FBUyxPQUFPO0FBQ2Qsb0JBQUksQ0FBQyxlQUFlO0FBQ2xCLGtDQUFnQjtBQUNoQixnQ0FBYztBQUFBLGdCQUNoQjtBQUFBLGNBQ0Y7QUFBQSxZQUNGLENBQUM7QUFFRCxnQkFBSSxlQUFlO0FBQ2pCLG9CQUFNO0FBQUEsWUFDUjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxnQkFBZ0IsY0FBYyxVQUFVO0FBQy9DLGdCQUFJLGdCQUFnQjtBQUNwQixnQkFBSSxjQUFjO0FBQ2xCLHdCQUFZLFFBQVEsU0FBVSxZQUFZO0FBQ3hDLGtCQUFJO0FBQ0YsMkJBQVcsZ0JBQWdCLGNBQWMsUUFBUTtBQUFBLGNBQ25ELFNBQVMsT0FBTztBQUNkLG9CQUFJLENBQUMsZUFBZTtBQUNsQixrQ0FBZ0I7QUFDaEIsZ0NBQWM7QUFBQSxnQkFDaEI7QUFBQSxjQUNGO0FBQUEsWUFDRixDQUFDO0FBRUQsZ0JBQUksZUFBZTtBQUNqQixvQkFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBRUEsbUJBQVMsY0FBYyxjQUFjLFVBQVU7QUFDN0MsZ0JBQUksZ0JBQWdCO0FBQ3BCLGdCQUFJLGNBQWM7QUFDbEIsd0JBQVksUUFBUSxTQUFVLFlBQVk7QUFDeEMsa0JBQUk7QUFDRiwyQkFBVyxjQUFjLGNBQWMsUUFBUTtBQUFBLGNBQ2pELFNBQVMsT0FBTztBQUNkLG9CQUFJLENBQUMsZUFBZTtBQUNsQixrQ0FBZ0I7QUFDaEIsZ0NBQWM7QUFBQSxnQkFDaEI7QUFBQSxjQUNGO0FBQUEsWUFDRixDQUFDO0FBRUQsZ0JBQUksZUFBZTtBQUNqQixvQkFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBRUEsbUJBQVMsY0FBYyxjQUFjLFVBQVU7QUFDN0MsZ0JBQUksZ0JBQWdCO0FBQ3BCLGdCQUFJLGNBQWM7QUFDbEIsd0JBQVksUUFBUSxTQUFVLFlBQVk7QUFDeEMsa0JBQUk7QUFDRiwyQkFBVyxjQUFjLGNBQWMsUUFBUTtBQUFBLGNBQ2pELFNBQVMsT0FBTztBQUNkLG9CQUFJLENBQUMsZUFBZTtBQUNsQixrQ0FBZ0I7QUFDaEIsZ0NBQWM7QUFBQSxnQkFDaEI7QUFBQSxjQUNGO0FBQUEsWUFDRixDQUFDO0FBRUQsZ0JBQUksZUFBZTtBQUNqQixvQkFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBRUEsbUJBQVMsZUFBZSxjQUFjLFVBQVU7QUFDOUMsZ0JBQUksZ0JBQWdCO0FBQ3BCLGdCQUFJLGNBQWM7QUFDbEIsd0JBQVksUUFBUSxTQUFVLFlBQVk7QUFDeEMsa0JBQUk7QUFDRiwyQkFBVyxlQUFlLGNBQWMsUUFBUTtBQUFBLGNBQ2xELFNBQVMsT0FBTztBQUNkLG9CQUFJLENBQUMsZUFBZTtBQUNsQixrQ0FBZ0I7QUFDaEIsZ0NBQWM7QUFBQSxnQkFDaEI7QUFBQSxjQUNGO0FBQUEsWUFDRixDQUFDO0FBRUQsZ0JBQUksZUFBZTtBQUNqQixvQkFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBRUEsa0JBQVEsaUJBQWlCO0FBQ3pCLGtCQUFRLHNCQUFzQjtBQUM5QixrQkFBUSx1QkFBdUI7QUFDL0Isa0JBQVEscUJBQXFCO0FBQzdCLGtCQUFRLGlCQUFpQjtBQUN6QixrQkFBUSx1QkFBdUI7QUFDL0Isa0JBQVEsZ0JBQWdCO0FBQUEsUUFDdEIsR0FBRztBQUFBLE1BQ0w7QUFBQTtBQUFBOzs7QUMxVkE7QUFBQTtBQUFBO0FBRUEsVUFBSSxPQUF1QztBQUN6QyxlQUFPLFVBQVU7QUFBQSxNQUNuQixPQUFPO0FBQ0wsZUFBTyxVQUFVO0FBQUEsTUFDbkI7QUFBQTtBQUFBOzs7QUNOQTtBQUFBO0FBQUE7QUFXQSxVQUFJLE1BQXVDO0FBQ3pDLFNBQUMsV0FBVztBQUNkO0FBRUEsY0FBSUcsV0FBUTtBQUNaLGNBQUksVUFBVTtBQUNkLGNBQUksWUFBWTtBQUNoQixjQUFJLFVBQVU7QUFFZCxjQUFJLHVCQUF1QkEsU0FBTTtBQU9qQyxtQkFBUyxLQUFLLFFBQVE7QUFDcEI7QUFDRSx1QkFBUyxPQUFPLFVBQVUsUUFBUSxPQUFPLElBQUksTUFBTSxPQUFPLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxPQUFPLEdBQUcsT0FBTyxNQUFNLFFBQVE7QUFDMUcscUJBQUssT0FBTyxDQUFDLElBQUksVUFBVSxJQUFJO0FBQUEsY0FDakM7QUFFQSwyQkFBYSxRQUFRLFFBQVEsSUFBSTtBQUFBLFlBQ25DO0FBQUEsVUFDRjtBQUNBLG1CQUFTLE1BQU0sUUFBUTtBQUNyQjtBQUNFLHVCQUFTLFFBQVEsVUFBVSxRQUFRLE9BQU8sSUFBSSxNQUFNLFFBQVEsSUFBSSxRQUFRLElBQUksQ0FBQyxHQUFHLFFBQVEsR0FBRyxRQUFRLE9BQU8sU0FBUztBQUNqSCxxQkFBSyxRQUFRLENBQUMsSUFBSSxVQUFVLEtBQUs7QUFBQSxjQUNuQztBQUVBLDJCQUFhLFNBQVMsUUFBUSxJQUFJO0FBQUEsWUFDcEM7QUFBQSxVQUNGO0FBRUEsbUJBQVMsYUFBYSxPQUFPLFFBQVEsTUFBTTtBQUd6QztBQUNFLGtCQUFJQywwQkFBeUIscUJBQXFCO0FBQ2xELGtCQUFJLFFBQVFBLHdCQUF1QixpQkFBaUI7QUFFcEQsa0JBQUksVUFBVSxJQUFJO0FBQ2hCLDBCQUFVO0FBQ1YsdUJBQU8sS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQUEsY0FDNUI7QUFFQSxrQkFBSSxpQkFBaUIsS0FBSyxJQUFJLFNBQVUsTUFBTTtBQUM1Qyx1QkFBTyxLQUFLO0FBQUEsY0FDZCxDQUFDO0FBRUQsNkJBQWUsUUFBUSxjQUFjLE1BQU07QUFJM0MsdUJBQVMsVUFBVSxNQUFNLEtBQUssUUFBUSxLQUFLLEdBQUcsU0FBUyxjQUFjO0FBQUEsWUFDdkU7QUFBQSxVQUNGO0FBRUEsY0FBSSxDQUFDRCxVQUFPO0FBQ1Y7QUFDRSxvQkFBTSxNQUFPLGlHQUFrRztBQUFBLFlBQ2pIO0FBQUEsVUFDRjtBQUVBLGNBQUksb0JBQW9CO0FBQ3hCLGNBQUksaUJBQWlCO0FBQ3JCLGNBQUkseUJBQXlCO0FBRTdCLGNBQUksV0FBVztBQUVmLGNBQUksYUFBYTtBQUVqQixjQUFJLGdCQUFnQjtBQUNwQixjQUFJLFdBQVc7QUFDZixjQUFJRSxhQUFXO0FBQ2YsY0FBSSxPQUFPO0FBQ1gsY0FBSSxrQkFBa0I7QUFDdEIsY0FBSSxrQkFBa0I7QUFDdEIsY0FBSSxhQUFhO0FBQ2pCLGNBQUksV0FBVztBQUNmLGNBQUksb0JBQW9CO0FBQ3hCLGNBQUksZ0JBQWdCO0FBQ3BCLGNBQUksc0JBQXNCO0FBQzFCLGNBQUksZ0JBQWdCO0FBQ3BCLGNBQUksMkJBQTJCO0FBQy9CLGNBQUkscUJBQXFCO0FBQ3pCLGNBQUksd0JBQXdCO0FBQzVCLGNBQUksdUJBQXVCO0FBQzNCLGNBQUksaUJBQWlCO0FBQ3JCLGNBQUksUUFBUTtBQUNaLGNBQUkscUJBQXFCO0FBQ3pCLGNBQUksd0JBQXdCO0FBSTVCLGNBQUksc0JBQXNCO0FBRTFCLGNBQUksdUJBQXVCO0FBQzNCLGNBQUksc0JBQXNCO0FBQzFCLGNBQUksc0JBQXNCO0FBRTFCLGNBQUksa0JBQWtCLG9CQUFJLElBQUk7QUFNOUIsY0FBSSwrQkFBK0IsQ0FBQztBQVFwQyxjQUFJLDRCQUE2QixDQUFDO0FBRWxDLG1CQUFTLHNCQUFzQixrQkFBa0IsY0FBYztBQUM3RCxnQ0FBb0Isa0JBQWtCLFlBQVk7QUFDbEQsZ0NBQW9CLG1CQUFtQixXQUFXLFlBQVk7QUFBQSxVQUNoRTtBQUNBLG1CQUFTLG9CQUFvQixrQkFBa0IsY0FBYztBQUMzRDtBQUNFLGtCQUFJLDZCQUE2QixnQkFBZ0IsR0FBRztBQUNsRCxzQkFBTSw4RkFBbUcsZ0JBQWdCO0FBQUEsY0FDM0g7QUFBQSxZQUNGO0FBRUEseUNBQTZCLGdCQUFnQixJQUFJO0FBRWpEO0FBQ0Usa0JBQUksaUJBQWlCLGlCQUFpQixZQUFZO0FBQ2xELHdDQUEwQixjQUFjLElBQUk7QUFFNUMsa0JBQUkscUJBQXFCLGlCQUFpQjtBQUN4QywwQ0FBMEIsYUFBYTtBQUFBLGNBQ3pDO0FBQUEsWUFDRjtBQUVBLHFCQUFTLElBQUksR0FBRyxJQUFJLGFBQWEsUUFBUSxLQUFLO0FBQzVDLDhCQUFnQixJQUFJLGFBQWEsQ0FBQyxDQUFDO0FBQUEsWUFDckM7QUFBQSxVQUNGO0FBRUEsY0FBSSxZQUFZLENBQUMsRUFBRSxPQUFPLFdBQVcsZUFBZSxPQUFPLE9BQU8sYUFBYSxlQUFlLE9BQU8sT0FBTyxTQUFTLGtCQUFrQjtBQUl2SSxjQUFJLFdBQVc7QUFHZixjQUFJLFNBQVM7QUFLYixjQUFJLG9CQUFvQjtBQUl4QixjQUFJLFVBQVU7QUFLZCxjQUFJLHFCQUFxQjtBQUd6QixjQUFJLFVBQVU7QUFHZCxjQUFJLG1CQUFtQjtBQUd2QixjQUFJLDRCQUE0QjtBQUdoQyxjQUFJLHNCQUFzQiw0QkFBNEI7QUFDdEQsY0FBSSxzQkFBc0I7QUFDMUIsY0FBSSw2QkFBNkIsSUFBSSxPQUFPLE9BQU8sNEJBQTRCLE9BQU8sc0JBQXNCLEtBQUs7QUFDakgsY0FBSUMsa0JBQWlCLE9BQU8sVUFBVTtBQUN0QyxjQUFJLDRCQUE0QixDQUFDO0FBQ2pDLGNBQUksOEJBQThCLENBQUM7QUFDbkMsbUJBQVMsb0JBQW9CLGVBQWU7QUFDMUMsZ0JBQUlBLGdCQUFlLEtBQUssNkJBQTZCLGFBQWEsR0FBRztBQUNuRSxxQkFBTztBQUFBLFlBQ1Q7QUFFQSxnQkFBSUEsZ0JBQWUsS0FBSywyQkFBMkIsYUFBYSxHQUFHO0FBQ2pFLHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLDJCQUEyQixLQUFLLGFBQWEsR0FBRztBQUNsRCwwQ0FBNEIsYUFBYSxJQUFJO0FBQzdDLHFCQUFPO0FBQUEsWUFDVDtBQUVBLHNDQUEwQixhQUFhLElBQUk7QUFFM0M7QUFDRSxvQkFBTSxnQ0FBZ0MsYUFBYTtBQUFBLFlBQ3JEO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBQ0EsbUJBQVMsc0JBQXNCLE1BQU0sY0FBYyxzQkFBc0I7QUFDdkUsZ0JBQUksaUJBQWlCLE1BQU07QUFDekIscUJBQU8sYUFBYSxTQUFTO0FBQUEsWUFDL0I7QUFFQSxnQkFBSSxzQkFBc0I7QUFDeEIscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUksS0FBSyxTQUFTLE1BQU0sS0FBSyxDQUFDLE1BQU0sT0FBTyxLQUFLLENBQUMsTUFBTSxTQUFTLEtBQUssQ0FBQyxNQUFNLE9BQU8sS0FBSyxDQUFDLE1BQU0sTUFBTTtBQUNuRyxxQkFBTztBQUFBLFlBQ1Q7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFDQSxtQkFBUyxpQ0FBaUMsTUFBTUMsUUFBTyxjQUFjLHNCQUFzQjtBQUN6RixnQkFBSSxpQkFBaUIsUUFBUSxhQUFhLFNBQVMsVUFBVTtBQUMzRCxxQkFBTztBQUFBLFlBQ1Q7QUFFQSxvQkFBUSxPQUFPQSxRQUFPO0FBQUEsY0FDcEIsS0FBSztBQUFBLGNBRUwsS0FBSztBQUVILHVCQUFPO0FBQUEsY0FFVCxLQUFLLFdBQ0g7QUFDRSxvQkFBSSxzQkFBc0I7QUFDeEIseUJBQU87QUFBQSxnQkFDVDtBQUVBLG9CQUFJLGlCQUFpQixNQUFNO0FBQ3pCLHlCQUFPLENBQUMsYUFBYTtBQUFBLGdCQUN2QixPQUFPO0FBQ0wsc0JBQUlDLFVBQVMsS0FBSyxZQUFZLEVBQUUsTUFBTSxHQUFHLENBQUM7QUFDMUMseUJBQU9BLFlBQVcsV0FBV0EsWUFBVztBQUFBLGdCQUMxQztBQUFBLGNBQ0Y7QUFBQSxjQUVGO0FBQ0UsdUJBQU87QUFBQSxZQUNYO0FBQUEsVUFDRjtBQUNBLG1CQUFTLHNCQUFzQixNQUFNRCxRQUFPLGNBQWMsc0JBQXNCO0FBQzlFLGdCQUFJQSxXQUFVLFFBQVEsT0FBT0EsV0FBVSxhQUFhO0FBQ2xELHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLGlDQUFpQyxNQUFNQSxRQUFPLGNBQWMsb0JBQW9CLEdBQUc7QUFDckYscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUksc0JBQXNCO0FBQ3hCLHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLGlCQUFpQixNQUFNO0FBRXpCLHNCQUFRLGFBQWEsTUFBTTtBQUFBLGdCQUN6QixLQUFLO0FBQ0gseUJBQU8sQ0FBQ0E7QUFBQSxnQkFFVixLQUFLO0FBQ0gseUJBQU9BLFdBQVU7QUFBQSxnQkFFbkIsS0FBSztBQUNILHlCQUFPLE1BQU1BLE1BQUs7QUFBQSxnQkFFcEIsS0FBSztBQUNILHlCQUFPLE1BQU1BLE1BQUssS0FBS0EsU0FBUTtBQUFBLGNBQ25DO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUNBLG1CQUFTLGdCQUFnQixNQUFNO0FBQzdCLG1CQUFPLFdBQVcsZUFBZSxJQUFJLElBQUksV0FBVyxJQUFJLElBQUk7QUFBQSxVQUM5RDtBQUVBLG1CQUFTLG1CQUFtQixNQUFNLE1BQU0saUJBQWlCLGVBQWUsb0JBQW9CRSxjQUFhLG1CQUFtQjtBQUMxSCxpQkFBSyxrQkFBa0IsU0FBUyxxQkFBcUIsU0FBUyxXQUFXLFNBQVM7QUFDbEYsaUJBQUssZ0JBQWdCO0FBQ3JCLGlCQUFLLHFCQUFxQjtBQUMxQixpQkFBSyxrQkFBa0I7QUFDdkIsaUJBQUssZUFBZTtBQUNwQixpQkFBSyxPQUFPO0FBQ1osaUJBQUssY0FBY0E7QUFDbkIsaUJBQUssb0JBQW9CO0FBQUEsVUFDM0I7QUFLQSxjQUFJLGFBQWEsQ0FBQztBQUVsQixjQUFJLGdCQUFnQjtBQUFBLFlBQUM7QUFBQSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFHakM7QUFBQSxZQUFnQjtBQUFBLFlBQWtCO0FBQUEsWUFBYTtBQUFBLFlBQWtDO0FBQUEsWUFBNEI7QUFBQSxVQUFPO0FBQ3BILHdCQUFjLFFBQVEsU0FBVSxNQUFNO0FBQ3BDLHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBVTtBQUFBO0FBQUEsY0FDMUQ7QUFBQTtBQUFBLGNBQ0E7QUFBQTtBQUFBLGNBQ0E7QUFBQTtBQUFBLGNBQ0E7QUFBQSxZQUFLO0FBQUEsVUFDUCxDQUFDO0FBR0QsV0FBQyxDQUFDLGlCQUFpQixnQkFBZ0IsR0FBRyxDQUFDLGFBQWEsT0FBTyxHQUFHLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQyxhQUFhLFlBQVksQ0FBQyxFQUFFLFFBQVEsU0FBVUMsUUFBTTtBQUNySSxnQkFBSSxPQUFPQSxPQUFLLENBQUMsR0FDYixnQkFBZ0JBLE9BQUssQ0FBQztBQUMxQix1QkFBVyxJQUFJLElBQUksSUFBSTtBQUFBLGNBQW1CO0FBQUEsY0FBTTtBQUFBLGNBQVE7QUFBQTtBQUFBLGNBQ3hEO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUlELFdBQUMsbUJBQW1CLGFBQWEsY0FBYyxPQUFPLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFDOUUsdUJBQVcsSUFBSSxJQUFJLElBQUk7QUFBQSxjQUFtQjtBQUFBLGNBQU07QUFBQSxjQUFtQjtBQUFBO0FBQUEsY0FDbkUsS0FBSyxZQUFZO0FBQUE7QUFBQSxjQUNqQjtBQUFBO0FBQUEsY0FDQTtBQUFBO0FBQUEsY0FDQTtBQUFBLFlBQUs7QUFBQSxVQUNQLENBQUM7QUFLRCxXQUFDLGVBQWUsNkJBQTZCLGFBQWEsZUFBZSxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBQ2pHLHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBbUI7QUFBQTtBQUFBLGNBQ25FO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUVEO0FBQUEsWUFBQztBQUFBLFlBQW1CO0FBQUE7QUFBQTtBQUFBLFlBRXBCO0FBQUEsWUFBYTtBQUFBLFlBQVk7QUFBQSxZQUFZO0FBQUEsWUFBVztBQUFBLFlBQVM7QUFBQSxZQUFZO0FBQUEsWUFBMkI7QUFBQSxZQUF5QjtBQUFBLFlBQWtCO0FBQUEsWUFBVTtBQUFBLFlBQVE7QUFBQSxZQUFZO0FBQUEsWUFBYztBQUFBLFlBQVE7QUFBQSxZQUFlO0FBQUEsWUFBWTtBQUFBLFlBQVk7QUFBQSxZQUFZO0FBQUEsWUFBVTtBQUFBO0FBQUEsWUFDNVA7QUFBQSxVQUFXLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFDbkMsdUJBQVcsSUFBSSxJQUFJLElBQUk7QUFBQSxjQUFtQjtBQUFBLGNBQU07QUFBQSxjQUFTO0FBQUE7QUFBQSxjQUN6RCxLQUFLLFlBQVk7QUFBQTtBQUFBLGNBQ2pCO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUdEO0FBQUEsWUFBQztBQUFBO0FBQUE7QUFBQSxZQUVEO0FBQUEsWUFBWTtBQUFBLFlBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUdyQixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBQ3hCLHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBUztBQUFBO0FBQUEsY0FDekQ7QUFBQTtBQUFBLGNBQ0E7QUFBQTtBQUFBLGNBQ0E7QUFBQTtBQUFBLGNBQ0E7QUFBQSxZQUFLO0FBQUEsVUFDUCxDQUFDO0FBR0Q7QUFBQSxZQUFDO0FBQUEsWUFBVztBQUFBO0FBQUE7QUFBQTtBQUFBLFVBR1osRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUN4Qix1QkFBVyxJQUFJLElBQUksSUFBSTtBQUFBLGNBQW1CO0FBQUEsY0FBTTtBQUFBLGNBQW9CO0FBQUE7QUFBQSxjQUNwRTtBQUFBO0FBQUEsY0FDQTtBQUFBO0FBQUEsY0FDQTtBQUFBO0FBQUEsY0FDQTtBQUFBLFlBQUs7QUFBQSxVQUNQLENBQUM7QUFFRDtBQUFBLFlBQUM7QUFBQSxZQUFRO0FBQUEsWUFBUTtBQUFBLFlBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUd6QixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBQ3hCLHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBa0I7QUFBQTtBQUFBLGNBQ2xFO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUVELFdBQUMsV0FBVyxPQUFPLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFDM0MsdUJBQVcsSUFBSSxJQUFJLElBQUk7QUFBQSxjQUFtQjtBQUFBLGNBQU07QUFBQSxjQUFTO0FBQUE7QUFBQSxjQUN6RCxLQUFLLFlBQVk7QUFBQTtBQUFBLGNBQ2pCO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUNELGNBQUksV0FBVztBQUVmLGNBQUlDLGNBQWEsU0FBVUMsUUFBTztBQUNoQyxtQkFBT0EsT0FBTSxDQUFDLEVBQUUsWUFBWTtBQUFBLFVBQzlCO0FBT0E7QUFBQSxZQUFDO0FBQUEsWUFBaUI7QUFBQSxZQUFzQjtBQUFBLFlBQWU7QUFBQSxZQUFrQjtBQUFBLFlBQWM7QUFBQSxZQUFhO0FBQUEsWUFBYTtBQUFBLFlBQXVCO0FBQUEsWUFBK0I7QUFBQSxZQUFpQjtBQUFBLFlBQW1CO0FBQUEsWUFBcUI7QUFBQSxZQUFxQjtBQUFBLFlBQWdCO0FBQUEsWUFBYTtBQUFBLFlBQWU7QUFBQSxZQUFpQjtBQUFBLFlBQWU7QUFBQSxZQUFhO0FBQUEsWUFBb0I7QUFBQSxZQUFnQjtBQUFBLFlBQWM7QUFBQSxZQUFnQjtBQUFBLFlBQWU7QUFBQSxZQUFjO0FBQUEsWUFBZ0M7QUFBQSxZQUE4QjtBQUFBLFlBQWU7QUFBQSxZQUFrQjtBQUFBLFlBQW1CO0FBQUEsWUFBa0I7QUFBQSxZQUFrQjtBQUFBLFlBQWM7QUFBQSxZQUFjO0FBQUEsWUFBZ0I7QUFBQSxZQUFxQjtBQUFBLFlBQXNCO0FBQUEsWUFBZTtBQUFBLFlBQVk7QUFBQSxZQUFrQjtBQUFBLFlBQW9CO0FBQUEsWUFBbUI7QUFBQSxZQUFjO0FBQUEsWUFBZ0I7QUFBQSxZQUEwQjtBQUFBLFlBQTJCO0FBQUEsWUFBb0I7QUFBQSxZQUFxQjtBQUFBLFlBQWtCO0FBQUEsWUFBbUI7QUFBQSxZQUFxQjtBQUFBLFlBQWtCO0FBQUEsWUFBZ0I7QUFBQSxZQUFlO0FBQUEsWUFBbUI7QUFBQSxZQUFrQjtBQUFBLFlBQXNCO0FBQUEsWUFBdUI7QUFBQSxZQUFnQjtBQUFBLFlBQWlCO0FBQUEsWUFBZ0I7QUFBQSxZQUFnQjtBQUFBLFlBQWE7QUFBQSxZQUFpQjtBQUFBLFlBQWtCO0FBQUEsWUFBaUI7QUFBQSxZQUFjO0FBQUEsWUFBaUI7QUFBQSxZQUFpQjtBQUFBLFlBQWdCO0FBQUEsWUFBZ0I7QUFBQSxZQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFHeHdDLEVBQUUsUUFBUSxTQUFVLGVBQWU7QUFDakMsZ0JBQUksT0FBTyxjQUFjLFFBQVEsVUFBVUQsV0FBVTtBQUNyRCx1QkFBVyxJQUFJLElBQUksSUFBSTtBQUFBLGNBQW1CO0FBQUEsY0FBTTtBQUFBLGNBQVE7QUFBQTtBQUFBLGNBQ3hEO0FBQUEsY0FBZTtBQUFBO0FBQUEsY0FDZjtBQUFBO0FBQUEsY0FDQTtBQUFBLFlBQUs7QUFBQSxVQUNQLENBQUM7QUFFRDtBQUFBLFlBQUM7QUFBQSxZQUFpQjtBQUFBLFlBQWlCO0FBQUEsWUFBYztBQUFBLFlBQWM7QUFBQSxZQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFHOUUsRUFBRSxRQUFRLFNBQVUsZUFBZTtBQUNqQyxnQkFBSSxPQUFPLGNBQWMsUUFBUSxVQUFVQSxXQUFVO0FBQ3JELHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBUTtBQUFBO0FBQUEsY0FDeEQ7QUFBQSxjQUFlO0FBQUEsY0FBZ0M7QUFBQTtBQUFBLGNBQy9DO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUVEO0FBQUEsWUFBQztBQUFBLFlBQVk7QUFBQSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFHekIsRUFBRSxRQUFRLFNBQVUsZUFBZTtBQUNqQyxnQkFBSSxPQUFPLGNBQWMsUUFBUSxVQUFVQSxXQUFVO0FBQ3JELHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBUTtBQUFBO0FBQUEsY0FDeEQ7QUFBQSxjQUFlO0FBQUEsY0FBd0M7QUFBQTtBQUFBLGNBQ3ZEO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUlELFdBQUMsWUFBWSxhQUFhLEVBQUUsUUFBUSxTQUFVLGVBQWU7QUFDM0QsdUJBQVcsYUFBYSxJQUFJLElBQUk7QUFBQSxjQUFtQjtBQUFBLGNBQWU7QUFBQSxjQUFRO0FBQUE7QUFBQSxjQUMxRSxjQUFjLFlBQVk7QUFBQTtBQUFBLGNBQzFCO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUdELGNBQUksWUFBWTtBQUNoQixxQkFBVyxTQUFTLElBQUksSUFBSTtBQUFBLFlBQW1CO0FBQUEsWUFBYTtBQUFBLFlBQVE7QUFBQTtBQUFBLFlBQ3BFO0FBQUEsWUFBYztBQUFBLFlBQWdDO0FBQUE7QUFBQSxZQUM5QztBQUFBLFVBQUs7QUFDTCxXQUFDLE9BQU8sUUFBUSxVQUFVLFlBQVksRUFBRSxRQUFRLFNBQVUsZUFBZTtBQUN2RSx1QkFBVyxhQUFhLElBQUksSUFBSTtBQUFBLGNBQW1CO0FBQUEsY0FBZTtBQUFBLGNBQVE7QUFBQTtBQUFBLGNBQzFFLGNBQWMsWUFBWTtBQUFBO0FBQUEsY0FDMUI7QUFBQTtBQUFBLGNBQ0E7QUFBQTtBQUFBLGNBQ0E7QUFBQSxZQUFJO0FBQUEsVUFDTixDQUFDO0FBWUQsY0FBSSx1QkFBdUI7QUFDM0IsY0FBSSxVQUFVO0FBRWQsbUJBQVMsWUFBWSxLQUFLO0FBQ3hCO0FBQ0Usa0JBQUksQ0FBQyxXQUFXLHFCQUFxQixLQUFLLEdBQUcsR0FBRztBQUM5QywwQkFBVTtBQUVWLHNCQUFNLDhOQUF3TyxLQUFLLFVBQVUsR0FBRyxDQUFDO0FBQUEsY0FDblE7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQU9BLG1CQUFTLG9CQUFvQkUsT0FBTSxNQUFNLFVBQVUsY0FBYztBQUMvRDtBQUNFLGtCQUFJLGFBQWEsaUJBQWlCO0FBQ2hDLG9CQUFJLGVBQWUsYUFBYTtBQUNoQyx1QkFBT0EsTUFBSyxZQUFZO0FBQUEsY0FDMUIsT0FBTztBQUNMLG9CQUFLLGFBQWEsYUFBYTtBQUk3Qiw4QkFBWSxLQUFLLFFBQVE7QUFBQSxnQkFDM0I7QUFFQSxvQkFBSSxnQkFBZ0IsYUFBYTtBQUNqQyxvQkFBSSxjQUFjO0FBRWxCLG9CQUFJLGFBQWEsU0FBUyxvQkFBb0I7QUFDNUMsc0JBQUlBLE1BQUssYUFBYSxhQUFhLEdBQUc7QUFDcEMsd0JBQUlOLFNBQVFNLE1BQUssYUFBYSxhQUFhO0FBRTNDLHdCQUFJTixXQUFVLElBQUk7QUFDaEIsNkJBQU87QUFBQSxvQkFDVDtBQUVBLHdCQUFJLHNCQUFzQixNQUFNLFVBQVUsY0FBYyxLQUFLLEdBQUc7QUFDOUQsNkJBQU9BO0FBQUEsb0JBQ1Q7QUFFQSx3QkFBSUEsV0FBVSxLQUFLLFVBQVU7QUFDM0IsNkJBQU87QUFBQSxvQkFDVDtBQUVBLDJCQUFPQTtBQUFBLGtCQUNUO0FBQUEsZ0JBQ0YsV0FBV00sTUFBSyxhQUFhLGFBQWEsR0FBRztBQUMzQyxzQkFBSSxzQkFBc0IsTUFBTSxVQUFVLGNBQWMsS0FBSyxHQUFHO0FBRzlELDJCQUFPQSxNQUFLLGFBQWEsYUFBYTtBQUFBLGtCQUN4QztBQUVBLHNCQUFJLGFBQWEsU0FBUyxTQUFTO0FBR2pDLDJCQUFPO0FBQUEsa0JBQ1Q7QUFNQSxnQ0FBY0EsTUFBSyxhQUFhLGFBQWE7QUFBQSxnQkFDL0M7QUFFQSxvQkFBSSxzQkFBc0IsTUFBTSxVQUFVLGNBQWMsS0FBSyxHQUFHO0FBQzlELHlCQUFPLGdCQUFnQixPQUFPLFdBQVc7QUFBQSxnQkFDM0MsV0FBVyxnQkFBZ0IsS0FBSyxVQUFVO0FBQ3hDLHlCQUFPO0FBQUEsZ0JBQ1QsT0FBTztBQUNMLHlCQUFPO0FBQUEsZ0JBQ1Q7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFPQSxtQkFBUyxxQkFBcUJBLE9BQU0sTUFBTSxVQUFVO0FBQ2xEO0FBQ0Usa0JBQUksQ0FBQyxvQkFBb0IsSUFBSSxHQUFHO0FBQzlCO0FBQUEsY0FDRjtBQUtBLGtCQUFJLHdCQUF3QixRQUFRLEdBQUc7QUFDckMsdUJBQU87QUFBQSxjQUNUO0FBRUEsa0JBQUksQ0FBQ0EsTUFBSyxhQUFhLElBQUksR0FBRztBQUM1Qix1QkFBTyxhQUFhLFNBQVksU0FBWTtBQUFBLGNBQzlDO0FBRUEsa0JBQUlOLFNBQVFNLE1BQUssYUFBYSxJQUFJO0FBRWxDLGtCQUFJTixXQUFVLEtBQUssVUFBVTtBQUMzQix1QkFBTztBQUFBLGNBQ1Q7QUFFQSxxQkFBT0E7QUFBQSxZQUNUO0FBQUEsVUFDRjtBQVNBLG1CQUFTLG9CQUFvQk0sT0FBTSxNQUFNTixRQUFPLHNCQUFzQjtBQUNwRSxnQkFBSSxlQUFlLGdCQUFnQixJQUFJO0FBRXZDLGdCQUFJLHNCQUFzQixNQUFNLGNBQWMsb0JBQW9CLEdBQUc7QUFDbkU7QUFBQSxZQUNGO0FBRUEsZ0JBQUksc0JBQXNCLE1BQU1BLFFBQU8sY0FBYyxvQkFBb0IsR0FBRztBQUMxRSxjQUFBQSxTQUFRO0FBQUEsWUFDVjtBQUdBLGdCQUFJLHdCQUF3QixpQkFBaUIsTUFBTTtBQUNqRCxrQkFBSSxvQkFBb0IsSUFBSSxHQUFHO0FBQzdCLG9CQUFJLGlCQUFpQjtBQUVyQixvQkFBSUEsV0FBVSxNQUFNO0FBQ2xCLGtCQUFBTSxNQUFLLGdCQUFnQixjQUFjO0FBQUEsZ0JBQ3JDLE9BQU87QUFDTCxrQkFBQUEsTUFBSyxhQUFhLGdCQUFpQixLQUFLTixNQUFLO0FBQUEsZ0JBQy9DO0FBQUEsY0FDRjtBQUVBO0FBQUEsWUFDRjtBQUVBLGdCQUFJLGtCQUFrQixhQUFhO0FBRW5DLGdCQUFJLGlCQUFpQjtBQUNuQixrQkFBSSxlQUFlLGFBQWE7QUFFaEMsa0JBQUlBLFdBQVUsTUFBTTtBQUNsQixvQkFBSSxPQUFPLGFBQWE7QUFDeEIsZ0JBQUFNLE1BQUssWUFBWSxJQUFJLFNBQVMsVUFBVSxRQUFRO0FBQUEsY0FDbEQsT0FBTztBQUdMLGdCQUFBQSxNQUFLLFlBQVksSUFBSU47QUFBQSxjQUN2QjtBQUVBO0FBQUEsWUFDRjtBQUdBLGdCQUFJLGdCQUFnQixhQUFhLGVBQzdCLHFCQUFxQixhQUFhO0FBRXRDLGdCQUFJQSxXQUFVLE1BQU07QUFDbEIsY0FBQU0sTUFBSyxnQkFBZ0IsYUFBYTtBQUFBLFlBQ3BDLE9BQU87QUFDTCxrQkFBSSxRQUFRLGFBQWE7QUFDekIsa0JBQUk7QUFFSixrQkFBSSxVQUFVLFdBQVcsVUFBVSxzQkFBc0JOLFdBQVUsTUFBTTtBQUd2RSxpQ0FBaUI7QUFBQSxjQUNuQixPQUFPO0FBR0w7QUFDRSxtQ0FBaUIsS0FBS0E7QUFBQSxnQkFDeEI7QUFFQSxvQkFBSSxhQUFhLGFBQWE7QUFDNUIsOEJBQVksZUFBZSxTQUFTLENBQUM7QUFBQSxnQkFDdkM7QUFBQSxjQUNGO0FBRUEsa0JBQUksb0JBQW9CO0FBQ3RCLGdCQUFBTSxNQUFLLGVBQWUsb0JBQW9CLGVBQWUsY0FBYztBQUFBLGNBQ3ZFLE9BQU87QUFDTCxnQkFBQUEsTUFBSyxhQUFhLGVBQWUsY0FBYztBQUFBLGNBQ2pEO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFPQSxjQUFJLHFCQUFxQjtBQUN6QixjQUFJLG9CQUFvQjtBQUN4QixjQUFJLHNCQUFzQjtBQUMxQixjQUFJLHlCQUF5QjtBQUM3QixjQUFJLHNCQUFzQjtBQUMxQixjQUFJLHNCQUFzQjtBQUMxQixjQUFJLHFCQUFxQjtBQUN6QixjQUFJLHlCQUF5QjtBQUM3QixjQUFJLHNCQUFzQjtBQUMxQixjQUFJLDJCQUEyQjtBQUMvQixjQUFJLGtCQUFrQjtBQUN0QixjQUFJLGtCQUFrQjtBQUN0QixjQUFJLG1CQUFtQjtBQUN2QixjQUFJLDBCQUEwQjtBQUM5QixjQUFJLHlCQUF5QjtBQUM3QixjQUFJLG1CQUFtQjtBQUN2QixjQUFJLHVCQUF1QjtBQUMzQixjQUFJLGdDQUFnQztBQUNwQyxjQUFJLHVCQUF1QjtBQUMzQixjQUFJLDJCQUEyQjtBQUUvQixjQUFJLE9BQU8sV0FBVyxjQUFjLE9BQU8sS0FBSztBQUM5QyxnQkFBSSxZQUFZLE9BQU87QUFDdkIsaUNBQXFCLFVBQVUsZUFBZTtBQUM5QyxnQ0FBb0IsVUFBVSxjQUFjO0FBQzVDLGtDQUFzQixVQUFVLGdCQUFnQjtBQUNoRCxxQ0FBeUIsVUFBVSxtQkFBbUI7QUFDdEQsa0NBQXNCLFVBQVUsZ0JBQWdCO0FBQ2hELGtDQUFzQixVQUFVLGdCQUFnQjtBQUNoRCxpQ0FBcUIsVUFBVSxlQUFlO0FBQzlDLHFDQUF5QixVQUFVLG1CQUFtQjtBQUN0RCxrQ0FBc0IsVUFBVSxnQkFBZ0I7QUFDaEQsdUNBQTJCLFVBQVUscUJBQXFCO0FBQzFELDhCQUFrQixVQUFVLFlBQVk7QUFDeEMsOEJBQWtCLFVBQVUsWUFBWTtBQUN4QywrQkFBbUIsVUFBVSxhQUFhO0FBQzFDLHNDQUEwQixVQUFVLG9CQUFvQjtBQUN4RCxxQ0FBeUIsVUFBVSxtQkFBbUI7QUFDdEQsK0JBQW1CLFVBQVUsYUFBYTtBQUMxQyxtQ0FBdUIsVUFBVSxpQkFBaUI7QUFDbEQsNENBQWdDLFVBQVUsd0JBQXdCO0FBQ2xFLG1DQUF1QixVQUFVLGlCQUFpQjtBQUNsRCx1Q0FBMkIsVUFBVSxxQkFBcUI7QUFBQSxVQUM1RDtBQUVBLGNBQUksd0JBQXdCLE9BQU8sV0FBVyxjQUFjLE9BQU87QUFDbkUsY0FBSSx1QkFBdUI7QUFDM0IsbUJBQVMsY0FBYyxlQUFlO0FBQ3BDLGdCQUFJLGtCQUFrQixRQUFRLE9BQU8sa0JBQWtCLFVBQVU7QUFDL0QscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUksZ0JBQWdCLHlCQUF5QixjQUFjLHFCQUFxQixLQUFLLGNBQWMsb0JBQW9CO0FBRXZILGdCQUFJLE9BQU8sa0JBQWtCLFlBQVk7QUFDdkMscUJBQU87QUFBQSxZQUNUO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBTUEsY0FBSSxnQkFBZ0I7QUFDcEIsY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBQ0osY0FBSTtBQUVKLG1CQUFTLGNBQWM7QUFBQSxVQUFDO0FBRXhCLHNCQUFZLHFCQUFxQjtBQUNqQyxtQkFBUyxjQUFjO0FBQ3JCO0FBQ0Usa0JBQUksa0JBQWtCLEdBQUc7QUFFdkIsMEJBQVUsUUFBUTtBQUNsQiwyQkFBVyxRQUFRO0FBQ25CLDJCQUFXLFFBQVE7QUFDbkIsNEJBQVksUUFBUTtBQUNwQiw0QkFBWSxRQUFRO0FBQ3BCLHFDQUFxQixRQUFRO0FBQzdCLCtCQUFlLFFBQVE7QUFFdkIsb0JBQUksUUFBUTtBQUFBLGtCQUNWLGNBQWM7QUFBQSxrQkFDZCxZQUFZO0FBQUEsa0JBQ1osT0FBTztBQUFBLGtCQUNQLFVBQVU7QUFBQSxnQkFDWjtBQUVBLHVCQUFPLGlCQUFpQixTQUFTO0FBQUEsa0JBQy9CLE1BQU07QUFBQSxrQkFDTixLQUFLO0FBQUEsa0JBQ0wsTUFBTTtBQUFBLGtCQUNOLE9BQU87QUFBQSxrQkFDUCxPQUFPO0FBQUEsa0JBQ1AsZ0JBQWdCO0FBQUEsa0JBQ2hCLFVBQVU7QUFBQSxnQkFDWixDQUFDO0FBQUEsY0FFSDtBQUVBO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxlQUFlO0FBQ3RCO0FBQ0U7QUFFQSxrQkFBSSxrQkFBa0IsR0FBRztBQUV2QixvQkFBSSxRQUFRO0FBQUEsa0JBQ1YsY0FBYztBQUFBLGtCQUNkLFlBQVk7QUFBQSxrQkFDWixVQUFVO0FBQUEsZ0JBQ1o7QUFFQSx1QkFBTyxpQkFBaUIsU0FBUztBQUFBLGtCQUMvQixLQUFLLFFBQVEsQ0FBQyxHQUFHLE9BQU87QUFBQSxvQkFDdEIsT0FBTztBQUFBLGtCQUNULENBQUM7QUFBQSxrQkFDRCxNQUFNLFFBQVEsQ0FBQyxHQUFHLE9BQU87QUFBQSxvQkFDdkIsT0FBTztBQUFBLGtCQUNULENBQUM7QUFBQSxrQkFDRCxNQUFNLFFBQVEsQ0FBQyxHQUFHLE9BQU87QUFBQSxvQkFDdkIsT0FBTztBQUFBLGtCQUNULENBQUM7QUFBQSxrQkFDRCxPQUFPLFFBQVEsQ0FBQyxHQUFHLE9BQU87QUFBQSxvQkFDeEIsT0FBTztBQUFBLGtCQUNULENBQUM7QUFBQSxrQkFDRCxPQUFPLFFBQVEsQ0FBQyxHQUFHLE9BQU87QUFBQSxvQkFDeEIsT0FBTztBQUFBLGtCQUNULENBQUM7QUFBQSxrQkFDRCxnQkFBZ0IsUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUNqQyxPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELFVBQVUsUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUMzQixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGdCQUNILENBQUM7QUFBQSxjQUVIO0FBRUEsa0JBQUksZ0JBQWdCLEdBQUc7QUFDckIsc0JBQU0sOEVBQW1GO0FBQUEsY0FDM0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLGNBQUkseUJBQXlCLHFCQUFxQjtBQUNsRCxjQUFJTDtBQUNKLG1CQUFTLDhCQUE4QixNQUFNLFFBQVEsU0FBUztBQUM1RDtBQUNFLGtCQUFJQSxZQUFXLFFBQVc7QUFFeEIsb0JBQUk7QUFDRix3QkFBTSxNQUFNO0FBQUEsZ0JBQ2QsU0FBUyxHQUFHO0FBQ1Ysc0JBQUlNLFNBQVEsRUFBRSxNQUFNLEtBQUssRUFBRSxNQUFNLGNBQWM7QUFDL0Msa0JBQUFOLFVBQVNNLFVBQVNBLE9BQU0sQ0FBQyxLQUFLO0FBQUEsZ0JBQ2hDO0FBQUEsY0FDRjtBQUdBLHFCQUFPLE9BQU9OLFVBQVM7QUFBQSxZQUN6QjtBQUFBLFVBQ0Y7QUFDQSxjQUFJLFVBQVU7QUFDZCxjQUFJO0FBRUo7QUFDRSxnQkFBSSxrQkFBa0IsT0FBTyxZQUFZLGFBQWEsVUFBVTtBQUNoRSxrQ0FBc0IsSUFBSSxnQkFBZ0I7QUFBQSxVQUM1QztBQUVBLG1CQUFTLDZCQUE2QixJQUFJLFdBQVc7QUFFbkQsZ0JBQUksQ0FBQyxNQUFNLFNBQVM7QUFDbEIscUJBQU87QUFBQSxZQUNUO0FBRUE7QUFDRSxrQkFBSSxRQUFRLG9CQUFvQixJQUFJLEVBQUU7QUFFdEMsa0JBQUksVUFBVSxRQUFXO0FBQ3ZCLHVCQUFPO0FBQUEsY0FDVDtBQUFBLFlBQ0Y7QUFFQSxnQkFBSTtBQUNKLHNCQUFVO0FBQ1YsZ0JBQUksNEJBQTRCLE1BQU07QUFFdEMsa0JBQU0sb0JBQW9CO0FBQzFCLGdCQUFJO0FBRUo7QUFDRSxtQ0FBcUIsdUJBQXVCO0FBRzVDLHFDQUF1QixVQUFVO0FBQ2pDLDBCQUFZO0FBQUEsWUFDZDtBQUVBLGdCQUFJO0FBRUYsa0JBQUksV0FBVztBQUViLG9CQUFJLE9BQU8sV0FBWTtBQUNyQix3QkFBTSxNQUFNO0FBQUEsZ0JBQ2Q7QUFHQSx1QkFBTyxlQUFlLEtBQUssV0FBVyxTQUFTO0FBQUEsa0JBQzdDLEtBQUssV0FBWTtBQUdmLDBCQUFNLE1BQU07QUFBQSxrQkFDZDtBQUFBLGdCQUNGLENBQUM7QUFFRCxvQkFBSSxPQUFPLFlBQVksWUFBWSxRQUFRLFdBQVc7QUFHcEQsc0JBQUk7QUFDRiw0QkFBUSxVQUFVLE1BQU0sQ0FBQyxDQUFDO0FBQUEsa0JBQzVCLFNBQVMsR0FBRztBQUNWLDhCQUFVO0FBQUEsa0JBQ1o7QUFFQSwwQkFBUSxVQUFVLElBQUksQ0FBQyxHQUFHLElBQUk7QUFBQSxnQkFDaEMsT0FBTztBQUNMLHNCQUFJO0FBQ0YseUJBQUssS0FBSztBQUFBLGtCQUNaLFNBQVMsR0FBRztBQUNWLDhCQUFVO0FBQUEsa0JBQ1o7QUFFQSxxQkFBRyxLQUFLLEtBQUssU0FBUztBQUFBLGdCQUN4QjtBQUFBLGNBQ0YsT0FBTztBQUNMLG9CQUFJO0FBQ0Ysd0JBQU0sTUFBTTtBQUFBLGdCQUNkLFNBQVMsR0FBRztBQUNWLDRCQUFVO0FBQUEsZ0JBQ1o7QUFFQSxtQkFBRztBQUFBLGNBQ0w7QUFBQSxZQUNGLFNBQVMsUUFBUTtBQUVmLGtCQUFJLFVBQVUsV0FBVyxPQUFPLE9BQU8sVUFBVSxVQUFVO0FBR3pELG9CQUFJLGNBQWMsT0FBTyxNQUFNLE1BQU0sSUFBSTtBQUN6QyxvQkFBSSxlQUFlLFFBQVEsTUFBTSxNQUFNLElBQUk7QUFDM0Msb0JBQUksSUFBSSxZQUFZLFNBQVM7QUFDN0Isb0JBQUksSUFBSSxhQUFhLFNBQVM7QUFFOUIsdUJBQU8sS0FBSyxLQUFLLEtBQUssS0FBSyxZQUFZLENBQUMsTUFBTSxhQUFhLENBQUMsR0FBRztBQU83RDtBQUFBLGdCQUNGO0FBRUEsdUJBQU8sS0FBSyxLQUFLLEtBQUssR0FBRyxLQUFLLEtBQUs7QUFHakMsc0JBQUksWUFBWSxDQUFDLE1BQU0sYUFBYSxDQUFDLEdBQUc7QUFNdEMsd0JBQUksTUFBTSxLQUFLLE1BQU0sR0FBRztBQUN0Qix5QkFBRztBQUNEO0FBQ0E7QUFHQSw0QkFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLE1BQU0sYUFBYSxDQUFDLEdBQUc7QUFFL0MsOEJBQUksU0FBUyxPQUFPLFlBQVksQ0FBQyxFQUFFLFFBQVEsWUFBWSxNQUFNO0FBRTdEO0FBQ0UsZ0NBQUksT0FBTyxPQUFPLFlBQVk7QUFDNUIsa0RBQW9CLElBQUksSUFBSSxNQUFNO0FBQUEsNEJBQ3BDO0FBQUEsMEJBQ0Y7QUFHQSxpQ0FBTztBQUFBLHdCQUNUO0FBQUEsc0JBQ0YsU0FBUyxLQUFLLEtBQUssS0FBSztBQUFBLG9CQUMxQjtBQUVBO0FBQUEsa0JBQ0Y7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFBQSxZQUNGLFVBQUU7QUFDQSx3QkFBVTtBQUVWO0FBQ0UsdUNBQXVCLFVBQVU7QUFDakMsNkJBQWE7QUFBQSxjQUNmO0FBRUEsb0JBQU0sb0JBQW9CO0FBQUEsWUFDNUI7QUFHQSxnQkFBSSxPQUFPLEtBQUssR0FBRyxlQUFlLEdBQUcsT0FBTztBQUM1QyxnQkFBSSxpQkFBaUIsT0FBTyw4QkFBOEIsSUFBSSxJQUFJO0FBRWxFO0FBQ0Usa0JBQUksT0FBTyxPQUFPLFlBQVk7QUFDNUIsb0NBQW9CLElBQUksSUFBSSxjQUFjO0FBQUEsY0FDNUM7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVMsNEJBQTRCLE1BQU0sUUFBUSxTQUFTO0FBQzFEO0FBQ0UscUJBQU8sNkJBQTZCLE1BQU0sSUFBSTtBQUFBLFlBQ2hEO0FBQUEsVUFDRjtBQUNBLG1CQUFTLCtCQUErQixJQUFJLFFBQVEsU0FBUztBQUMzRDtBQUNFLHFCQUFPLDZCQUE2QixJQUFJLEtBQUs7QUFBQSxZQUMvQztBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxnQkFBZ0JPLGFBQVc7QUFDbEMsZ0JBQUlDLGFBQVlELFlBQVU7QUFDMUIsbUJBQU8sQ0FBQyxFQUFFQyxjQUFhQSxXQUFVO0FBQUEsVUFDbkM7QUFFQSxtQkFBUyxxQ0FBcUMsTUFBTSxRQUFRLFNBQVM7QUFFbkUsZ0JBQUksUUFBUSxNQUFNO0FBQ2hCLHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLE9BQU8sU0FBUyxZQUFZO0FBQzlCO0FBQ0UsdUJBQU8sNkJBQTZCLE1BQU0sZ0JBQWdCLElBQUksQ0FBQztBQUFBLGNBQ2pFO0FBQUEsWUFDRjtBQUVBLGdCQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLHFCQUFPLDhCQUE4QixJQUFJO0FBQUEsWUFDM0M7QUFFQSxvQkFBUSxNQUFNO0FBQUEsY0FDWixLQUFLO0FBQ0gsdUJBQU8sOEJBQThCLFVBQVU7QUFBQSxjQUVqRCxLQUFLO0FBQ0gsdUJBQU8sOEJBQThCLGNBQWM7QUFBQSxZQUN2RDtBQUVBLGdCQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLHNCQUFRLEtBQUssVUFBVTtBQUFBLGdCQUNyQixLQUFLO0FBQ0gseUJBQU8sK0JBQStCLEtBQUssTUFBTTtBQUFBLGdCQUVuRCxLQUFLO0FBRUgseUJBQU8scUNBQXFDLEtBQUssTUFBTSxRQUFRLE9BQU87QUFBQSxnQkFFeEUsS0FBSztBQUNILHlCQUFPLCtCQUErQixLQUFLLE9BQU87QUFBQSxnQkFFcEQsS0FBSyxpQkFDSDtBQUNFLHNCQUFJLGdCQUFnQjtBQUNwQixzQkFBSSxVQUFVLGNBQWM7QUFDNUIsc0JBQUksT0FBTyxjQUFjO0FBRXpCLHNCQUFJO0FBRUYsMkJBQU8scUNBQXFDLEtBQUssT0FBTyxHQUFHLFFBQVEsT0FBTztBQUFBLGtCQUM1RSxTQUFTLEdBQUc7QUFBQSxrQkFBQztBQUFBLGdCQUNmO0FBQUEsY0FDSjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxtQkFBUyxjQUFjLE9BQU87QUFDNUIsZ0JBQUksUUFBUyxNQUFNLGNBQWMsTUFBTSxZQUFZLE9BQU87QUFDMUQsZ0JBQUksU0FBVSxNQUFNO0FBRXBCLG9CQUFRLE1BQU0sS0FBSztBQUFBLGNBQ2pCLEtBQUs7QUFDSCx1QkFBTyw4QkFBOEIsTUFBTSxJQUFJO0FBQUEsY0FFakQsS0FBSztBQUNILHVCQUFPLDhCQUE4QixNQUFNO0FBQUEsY0FFN0MsS0FBSztBQUNILHVCQUFPLDhCQUE4QixVQUFVO0FBQUEsY0FFakQsS0FBSztBQUNILHVCQUFPLDhCQUE4QixjQUFjO0FBQUEsY0FFckQsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILHVCQUFPLCtCQUErQixNQUFNLElBQUk7QUFBQSxjQUVsRCxLQUFLO0FBQ0gsdUJBQU8sK0JBQStCLE1BQU0sS0FBSyxNQUFNO0FBQUEsY0FFekQsS0FBSztBQUNILHVCQUFPLCtCQUErQixNQUFNLEtBQUssT0FBTztBQUFBLGNBRTFELEtBQUs7QUFDSCx1QkFBTyw0QkFBNEIsTUFBTSxJQUFJO0FBQUEsY0FFL0M7QUFDRSx1QkFBTztBQUFBLFlBQ1g7QUFBQSxVQUNGO0FBRUEsbUJBQVMsNEJBQTRCQyxpQkFBZ0I7QUFDbkQsZ0JBQUk7QUFDRixrQkFBSSxPQUFPO0FBQ1gsa0JBQUlKLFFBQU9JO0FBRVgsaUJBQUc7QUFDRCx3QkFBUSxjQUFjSixLQUFJO0FBQzFCLGdCQUFBQSxRQUFPQSxNQUFLO0FBQUEsY0FDZCxTQUFTQTtBQUVULHFCQUFPO0FBQUEsWUFDVCxTQUFTLEdBQUc7QUFDVixxQkFBTywrQkFBK0IsRUFBRSxVQUFVLE9BQU8sRUFBRTtBQUFBLFlBQzdEO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGVBQWUsV0FBVyxXQUFXLGFBQWE7QUFDekQsZ0JBQUksZUFBZSxVQUFVLGVBQWUsVUFBVSxRQUFRO0FBQzlELG1CQUFPLFVBQVUsZ0JBQWdCLGlCQUFpQixLQUFLLGNBQWMsTUFBTSxlQUFlLE1BQU07QUFBQSxVQUNsRztBQUVBLG1CQUFTLGVBQWUsTUFBTTtBQUM1QixtQkFBTyxLQUFLLGVBQWU7QUFBQSxVQUM3QjtBQUVBLG1CQUFTLGlCQUFpQixNQUFNO0FBQzlCLGdCQUFJLFFBQVEsTUFBTTtBQUVoQixxQkFBTztBQUFBLFlBQ1Q7QUFFQTtBQUNFLGtCQUFJLE9BQU8sS0FBSyxRQUFRLFVBQVU7QUFDaEMsc0JBQU0sMkdBQWdIO0FBQUEsY0FDeEg7QUFBQSxZQUNGO0FBRUEsZ0JBQUksT0FBTyxTQUFTLFlBQVk7QUFDOUIscUJBQU8sS0FBSyxlQUFlLEtBQUssUUFBUTtBQUFBLFlBQzFDO0FBRUEsZ0JBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIscUJBQU87QUFBQSxZQUNUO0FBRUEsb0JBQVEsTUFBTTtBQUFBLGNBQ1osS0FBSztBQUNILHVCQUFPO0FBQUEsY0FFVCxLQUFLO0FBQ0gsdUJBQU87QUFBQSxjQUVULEtBQUs7QUFDSCx1QkFBTztBQUFBLGNBRVQsS0FBSztBQUNILHVCQUFPO0FBQUEsY0FFVCxLQUFLO0FBQ0gsdUJBQU87QUFBQSxjQUVULEtBQUs7QUFDSCx1QkFBTztBQUFBLFlBQ1g7QUFFQSxnQkFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixzQkFBUSxLQUFLLFVBQVU7QUFBQSxnQkFDckIsS0FBSztBQUNILHNCQUFJLFVBQVU7QUFDZCx5QkFBTyxlQUFlLE9BQU8sSUFBSTtBQUFBLGdCQUVuQyxLQUFLO0FBQ0gsc0JBQUksV0FBVztBQUNmLHlCQUFPLGVBQWUsU0FBUyxRQUFRLElBQUk7QUFBQSxnQkFFN0MsS0FBSztBQUNILHlCQUFPLGVBQWUsTUFBTSxLQUFLLFFBQVEsWUFBWTtBQUFBLGdCQUV2RCxLQUFLO0FBQ0gseUJBQU8saUJBQWlCLEtBQUssSUFBSTtBQUFBLGdCQUVuQyxLQUFLO0FBQ0gseUJBQU8saUJBQWlCLEtBQUssT0FBTztBQUFBLGdCQUV0QyxLQUFLLGlCQUNIO0FBQ0Usc0JBQUksZ0JBQWdCO0FBQ3BCLHNCQUFJLFVBQVUsY0FBYztBQUM1QixzQkFBSSxPQUFPLGNBQWM7QUFFekIsc0JBQUk7QUFDRiwyQkFBTyxpQkFBaUIsS0FBSyxPQUFPLENBQUM7QUFBQSxrQkFDdkMsU0FBUyxHQUFHO0FBQ1YsMkJBQU87QUFBQSxrQkFDVDtBQUFBLGdCQUNGO0FBQUEsY0FDSjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLHlCQUF5QixxQkFBcUI7QUFDbEQsY0FBSSxVQUFVO0FBQ2QsY0FBSSxjQUFjO0FBQ2xCLG1CQUFTLHNDQUFzQztBQUM3QztBQUNFLGtCQUFJLFlBQVksTUFBTTtBQUNwQix1QkFBTztBQUFBLGNBQ1Q7QUFFQSxrQkFBSSxRQUFRLFFBQVE7QUFFcEIsa0JBQUksVUFBVSxRQUFRLE9BQU8sVUFBVSxhQUFhO0FBQ2xELHVCQUFPLGlCQUFpQixNQUFNLElBQUk7QUFBQSxjQUNwQztBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxtQkFBUyw0QkFBNEI7QUFDbkM7QUFDRSxrQkFBSSxZQUFZLE1BQU07QUFDcEIsdUJBQU87QUFBQSxjQUNUO0FBSUEscUJBQU8sNEJBQTRCLE9BQU87QUFBQSxZQUM1QztBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxvQkFBb0I7QUFDM0I7QUFDRSxxQ0FBdUIsa0JBQWtCO0FBQ3pDLHdCQUFVO0FBQ1YsNEJBQWM7QUFBQSxZQUNoQjtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxnQkFBZ0IsT0FBTztBQUM5QjtBQUNFLHFDQUF1QixrQkFBa0I7QUFDekMsd0JBQVU7QUFDViw0QkFBYztBQUFBLFlBQ2hCO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGVBQWUsV0FBVztBQUNqQztBQUNFLDRCQUFjO0FBQUEsWUFDaEI7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsaUJBQWlCO0FBQ3hCO0FBQ0UscUJBQU87QUFBQSxZQUNUO0FBQUEsVUFDRjtBQUtBLG1CQUFTSyxVQUFTWCxRQUFPO0FBQ3ZCLG1CQUFPLEtBQUtBO0FBQUEsVUFDZDtBQUNBLG1CQUFTLGlCQUFpQkEsUUFBTztBQUMvQixvQkFBUSxPQUFPQSxRQUFPO0FBQUEsY0FDcEIsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILHVCQUFPQTtBQUFBLGNBRVQ7QUFFRSx1QkFBTztBQUFBLFlBQ1g7QUFBQSxVQUNGO0FBRUEsY0FBSSxtQkFBbUI7QUFBQSxZQUNyQixRQUFRO0FBQUEsWUFDUixVQUFVO0FBQUEsWUFDVixPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsWUFDUixPQUFPO0FBQUEsWUFDUCxPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsVUFDVjtBQUNBLG1CQUFTLDBCQUEwQixTQUFTLE9BQU87QUFDakQ7QUFDRSxrQkFBSSxFQUFFLGlCQUFpQixNQUFNLElBQUksS0FBSyxNQUFNLFlBQVksTUFBTSxXQUFXLE1BQU0sWUFBWSxNQUFNLFlBQVksTUFBTSxTQUFTLE9BQU87QUFDakksc0JBQU0sbU5BQWtPO0FBQUEsY0FDMU87QUFFQSxrQkFBSSxFQUFFLE1BQU0sWUFBWSxNQUFNLFlBQVksTUFBTSxZQUFZLE1BQU0sV0FBVyxPQUFPO0FBQ2xGLHNCQUFNLHVOQUFzTztBQUFBLGNBQzlPO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxZQUFZLE1BQU07QUFDekIsZ0JBQUksT0FBTyxLQUFLO0FBQ2hCLGdCQUFJLFdBQVcsS0FBSztBQUNwQixtQkFBTyxZQUFZLFNBQVMsWUFBWSxNQUFNLFlBQVksU0FBUyxjQUFjLFNBQVM7QUFBQSxVQUM1RjtBQUVBLG1CQUFTLFdBQVdNLE9BQU07QUFDeEIsbUJBQU9BLE1BQUs7QUFBQSxVQUNkO0FBRUEsbUJBQVMsY0FBY0EsT0FBTTtBQUMzQixZQUFBQSxNQUFLLGdCQUFnQjtBQUFBLFVBQ3ZCO0FBRUEsbUJBQVMsaUJBQWlCQSxPQUFNO0FBQzlCLGdCQUFJTixTQUFRO0FBRVosZ0JBQUksQ0FBQ00sT0FBTTtBQUNULHFCQUFPTjtBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxZQUFZTSxLQUFJLEdBQUc7QUFDckIsY0FBQU4sU0FBUU0sTUFBSyxVQUFVLFNBQVM7QUFBQSxZQUNsQyxPQUFPO0FBQ0wsY0FBQU4sU0FBUU0sTUFBSztBQUFBLFlBQ2Y7QUFFQSxtQkFBT047QUFBQSxVQUNUO0FBRUEsbUJBQVMsaUJBQWlCTSxPQUFNO0FBQzlCLGdCQUFJLGFBQWEsWUFBWUEsS0FBSSxJQUFJLFlBQVk7QUFDakQsZ0JBQUksYUFBYSxPQUFPLHlCQUF5QkEsTUFBSyxZQUFZLFdBQVcsVUFBVTtBQUN2RixnQkFBSSxlQUFlLEtBQUtBLE1BQUssVUFBVTtBQUt2QyxnQkFBSUEsTUFBSyxlQUFlLFVBQVUsS0FBSyxPQUFPLGVBQWUsZUFBZSxPQUFPLFdBQVcsUUFBUSxjQUFjLE9BQU8sV0FBVyxRQUFRLFlBQVk7QUFDeEo7QUFBQSxZQUNGO0FBRUEsZ0JBQUlNLE9BQU0sV0FBVyxLQUNqQkMsT0FBTSxXQUFXO0FBQ3JCLG1CQUFPLGVBQWVQLE9BQU0sWUFBWTtBQUFBLGNBQ3RDLGNBQWM7QUFBQSxjQUNkLEtBQUssV0FBWTtBQUNmLHVCQUFPTSxLQUFJLEtBQUssSUFBSTtBQUFBLGNBQ3RCO0FBQUEsY0FDQSxLQUFLLFNBQVVaLFFBQU87QUFDcEIsK0JBQWUsS0FBS0E7QUFDcEIsZ0JBQUFhLEtBQUksS0FBSyxNQUFNYixNQUFLO0FBQUEsY0FDdEI7QUFBQSxZQUNGLENBQUM7QUFLRCxtQkFBTyxlQUFlTSxPQUFNLFlBQVk7QUFBQSxjQUN0QyxZQUFZLFdBQVc7QUFBQSxZQUN6QixDQUFDO0FBQ0QsZ0JBQUksVUFBVTtBQUFBLGNBQ1osVUFBVSxXQUFZO0FBQ3BCLHVCQUFPO0FBQUEsY0FDVDtBQUFBLGNBQ0EsVUFBVSxTQUFVTixRQUFPO0FBQ3pCLCtCQUFlLEtBQUtBO0FBQUEsY0FDdEI7QUFBQSxjQUNBLGNBQWMsV0FBWTtBQUN4Qiw4QkFBY00sS0FBSTtBQUNsQix1QkFBT0EsTUFBSyxVQUFVO0FBQUEsY0FDeEI7QUFBQSxZQUNGO0FBQ0EsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVMsTUFBTUEsT0FBTTtBQUNuQixnQkFBSSxXQUFXQSxLQUFJLEdBQUc7QUFDcEI7QUFBQSxZQUNGO0FBR0EsWUFBQUEsTUFBSyxnQkFBZ0IsaUJBQWlCQSxLQUFJO0FBQUEsVUFDNUM7QUFDQSxtQkFBUyxxQkFBcUJBLE9BQU07QUFDbEMsZ0JBQUksQ0FBQ0EsT0FBTTtBQUNULHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLFVBQVUsV0FBV0EsS0FBSTtBQUc3QixnQkFBSSxDQUFDLFNBQVM7QUFDWixxQkFBTztBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxZQUFZLFFBQVEsU0FBUztBQUNqQyxnQkFBSSxZQUFZLGlCQUFpQkEsS0FBSTtBQUVyQyxnQkFBSSxjQUFjLFdBQVc7QUFDM0Isc0JBQVEsU0FBUyxTQUFTO0FBQzFCLHFCQUFPO0FBQUEsWUFDVDtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLG1CQUFTUSxrQkFBaUIsS0FBSztBQUM3QixrQkFBTSxRQUFRLE9BQU8sYUFBYSxjQUFjLFdBQVc7QUFFM0QsZ0JBQUksT0FBTyxRQUFRLGFBQWE7QUFDOUIscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUk7QUFDRixxQkFBTyxJQUFJLGlCQUFpQixJQUFJO0FBQUEsWUFDbEMsU0FBUyxHQUFHO0FBQ1YscUJBQU8sSUFBSTtBQUFBLFlBQ2I7QUFBQSxVQUNGO0FBRUEsY0FBSSwyQkFBMkI7QUFDL0IsY0FBSSwrQkFBK0I7QUFDbkMsY0FBSSxrQ0FBa0M7QUFDdEMsY0FBSSxrQ0FBa0M7QUFFdEMsbUJBQVMsYUFBYSxPQUFPO0FBQzNCLGdCQUFJLGNBQWMsTUFBTSxTQUFTLGNBQWMsTUFBTSxTQUFTO0FBQzlELG1CQUFPLGNBQWMsTUFBTSxXQUFXLE9BQU8sTUFBTSxTQUFTO0FBQUEsVUFDOUQ7QUFtQkEsbUJBQVMsYUFBYSxTQUFTLE9BQU87QUFDcEMsZ0JBQUlSLFFBQU87QUFDWCxnQkFBSSxVQUFVLE1BQU07QUFFcEIsZ0JBQUksWUFBWSxRQUFRLENBQUMsR0FBRyxPQUFPO0FBQUEsY0FDakMsZ0JBQWdCO0FBQUEsY0FDaEIsY0FBYztBQUFBLGNBQ2QsT0FBTztBQUFBLGNBQ1AsU0FBUyxXQUFXLE9BQU8sVUFBVUEsTUFBSyxjQUFjO0FBQUEsWUFDMUQsQ0FBQztBQUVELG1CQUFPO0FBQUEsVUFDVDtBQUNBLG1CQUFTLGlCQUFpQixTQUFTLE9BQU87QUFDeEM7QUFDRSx3Q0FBMEIsU0FBUyxLQUFLO0FBRXhDLGtCQUFJLE1BQU0sWUFBWSxVQUFhLE1BQU0sbUJBQW1CLFVBQWEsQ0FBQyw4QkFBOEI7QUFDdEcsc0JBQU0sOFdBQXVZLG9DQUFvQyxLQUFLLGVBQWUsTUFBTSxJQUFJO0FBRS9jLCtDQUErQjtBQUFBLGNBQ2pDO0FBRUEsa0JBQUksTUFBTSxVQUFVLFVBQWEsTUFBTSxpQkFBaUIsVUFBYSxDQUFDLDBCQUEwQjtBQUM5RixzQkFBTSxzV0FBK1gsb0NBQW9DLEtBQUssZUFBZSxNQUFNLElBQUk7QUFFdmMsMkNBQTJCO0FBQUEsY0FDN0I7QUFBQSxZQUNGO0FBRUEsZ0JBQUlBLFFBQU87QUFDWCxnQkFBSSxlQUFlLE1BQU0sZ0JBQWdCLE9BQU8sS0FBSyxNQUFNO0FBQzNELFlBQUFBLE1BQUssZ0JBQWdCO0FBQUEsY0FDbkIsZ0JBQWdCLE1BQU0sV0FBVyxPQUFPLE1BQU0sVUFBVSxNQUFNO0FBQUEsY0FDOUQsY0FBYyxpQkFBaUIsTUFBTSxTQUFTLE9BQU8sTUFBTSxRQUFRLFlBQVk7QUFBQSxjQUMvRSxZQUFZLGFBQWEsS0FBSztBQUFBLFlBQ2hDO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGNBQWMsU0FBUyxPQUFPO0FBQ3JDLGdCQUFJQSxRQUFPO0FBQ1gsZ0JBQUksVUFBVSxNQUFNO0FBRXBCLGdCQUFJLFdBQVcsTUFBTTtBQUNuQixrQ0FBb0JBLE9BQU0sV0FBVyxTQUFTLEtBQUs7QUFBQSxZQUNyRDtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxjQUFjLFNBQVMsT0FBTztBQUNyQyxnQkFBSUEsUUFBTztBQUVYO0FBQ0Usa0JBQUksYUFBYSxhQUFhLEtBQUs7QUFFbkMsa0JBQUksQ0FBQ0EsTUFBSyxjQUFjLGNBQWMsY0FBYyxDQUFDLGlDQUFpQztBQUNwRixzQkFBTSxzVUFBMFY7QUFFaFcsa0RBQWtDO0FBQUEsY0FDcEM7QUFFQSxrQkFBSUEsTUFBSyxjQUFjLGNBQWMsQ0FBQyxjQUFjLENBQUMsaUNBQWlDO0FBQ3BGLHNCQUFNLCtUQUFtVjtBQUV6VixrREFBa0M7QUFBQSxjQUNwQztBQUFBLFlBQ0Y7QUFFQSwwQkFBYyxTQUFTLEtBQUs7QUFDNUIsZ0JBQUlOLFNBQVEsaUJBQWlCLE1BQU0sS0FBSztBQUN4QyxnQkFBSSxPQUFPLE1BQU07QUFFakIsZ0JBQUlBLFVBQVMsTUFBTTtBQUNqQixrQkFBSSxTQUFTLFVBQVU7QUFDckIsb0JBQUlBLFdBQVUsS0FBS00sTUFBSyxVQUFVO0FBQUE7QUFBQSxnQkFFbENBLE1BQUssU0FBU04sUUFBTztBQUNuQixrQkFBQU0sTUFBSyxRQUFRSyxVQUFTWCxNQUFLO0FBQUEsZ0JBQzdCO0FBQUEsY0FDRixXQUFXTSxNQUFLLFVBQVVLLFVBQVNYLE1BQUssR0FBRztBQUN6QyxnQkFBQU0sTUFBSyxRQUFRSyxVQUFTWCxNQUFLO0FBQUEsY0FDN0I7QUFBQSxZQUNGLFdBQVcsU0FBUyxZQUFZLFNBQVMsU0FBUztBQUdoRCxjQUFBTSxNQUFLLGdCQUFnQixPQUFPO0FBQzVCO0FBQUEsWUFDRjtBQUVBO0FBTUUsa0JBQUksTUFBTSxlQUFlLE9BQU8sR0FBRztBQUNqQyxnQ0FBZ0JBLE9BQU0sTUFBTSxNQUFNTixNQUFLO0FBQUEsY0FDekMsV0FBVyxNQUFNLGVBQWUsY0FBYyxHQUFHO0FBQy9DLGdDQUFnQk0sT0FBTSxNQUFNLE1BQU0saUJBQWlCLE1BQU0sWUFBWSxDQUFDO0FBQUEsY0FDeEU7QUFBQSxZQUNGO0FBRUE7QUFHRSxrQkFBSSxNQUFNLFdBQVcsUUFBUSxNQUFNLGtCQUFrQixNQUFNO0FBQ3pELGdCQUFBQSxNQUFLLGlCQUFpQixDQUFDLENBQUMsTUFBTTtBQUFBLGNBQ2hDO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxpQkFBaUIsU0FBUyxPQUFPUyxjQUFhO0FBQ3JELGdCQUFJVCxRQUFPO0FBR1gsZ0JBQUksTUFBTSxlQUFlLE9BQU8sS0FBSyxNQUFNLGVBQWUsY0FBYyxHQUFHO0FBQ3pFLGtCQUFJLE9BQU8sTUFBTTtBQUNqQixrQkFBSSxXQUFXLFNBQVMsWUFBWSxTQUFTO0FBRzdDLGtCQUFJLGFBQWEsTUFBTSxVQUFVLFVBQWEsTUFBTSxVQUFVLE9BQU87QUFDbkU7QUFBQSxjQUNGO0FBRUEsa0JBQUksZUFBZUssVUFBU0wsTUFBSyxjQUFjLFlBQVk7QUFHM0Qsa0JBQUksQ0FBQ1MsY0FBYTtBQUNoQjtBQU9FLHNCQUFJLGlCQUFpQlQsTUFBSyxPQUFPO0FBQy9CLG9CQUFBQSxNQUFLLFFBQVE7QUFBQSxrQkFDZjtBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUVBO0FBSUUsZ0JBQUFBLE1BQUssZUFBZTtBQUFBLGNBQ3RCO0FBQUEsWUFDRjtBQU9BLGdCQUFJLE9BQU9BLE1BQUs7QUFFaEIsZ0JBQUksU0FBUyxJQUFJO0FBQ2YsY0FBQUEsTUFBSyxPQUFPO0FBQUEsWUFDZDtBQUVBO0FBT0UsY0FBQUEsTUFBSyxpQkFBaUIsQ0FBQ0EsTUFBSztBQUM1QixjQUFBQSxNQUFLLGlCQUFpQixDQUFDLENBQUNBLE1BQUssY0FBYztBQUFBLFlBQzdDO0FBRUEsZ0JBQUksU0FBUyxJQUFJO0FBQ2YsY0FBQUEsTUFBSyxPQUFPO0FBQUEsWUFDZDtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyx1QkFBdUIsU0FBUyxPQUFPO0FBQzlDLGdCQUFJQSxRQUFPO0FBQ1gsMEJBQWNBLE9BQU0sS0FBSztBQUN6QiwrQkFBbUJBLE9BQU0sS0FBSztBQUFBLFVBQ2hDO0FBRUEsbUJBQVMsbUJBQW1CLFVBQVUsT0FBTztBQUMzQyxnQkFBSSxPQUFPLE1BQU07QUFFakIsZ0JBQUksTUFBTSxTQUFTLFdBQVcsUUFBUSxNQUFNO0FBQzFDLGtCQUFJLFlBQVk7QUFFaEIscUJBQU8sVUFBVSxZQUFZO0FBQzNCLDRCQUFZLFVBQVU7QUFBQSxjQUN4QjtBQVNBLGtCQUFJLFFBQVEsVUFBVSxpQkFBaUIsZ0JBQWdCLEtBQUssVUFBVSxLQUFLLElBQUksSUFBSSxpQkFBaUI7QUFFcEcsdUJBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFDckMsb0JBQUksWUFBWSxNQUFNLENBQUM7QUFFdkIsb0JBQUksY0FBYyxZQUFZLFVBQVUsU0FBUyxTQUFTLE1BQU07QUFDOUQ7QUFBQSxnQkFDRjtBQU1BLG9CQUFJLGFBQWEsNkJBQTZCLFNBQVM7QUFFdkQsb0JBQUksQ0FBQyxZQUFZO0FBQ2Y7QUFDRSwwQkFBTSxNQUFPLCtGQUFnRztBQUFBLGtCQUMvRztBQUFBLGdCQUNGO0FBSUEscUNBQXFCLFNBQVM7QUFJOUIsOEJBQWMsV0FBVyxVQUFVO0FBQUEsY0FDckM7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQVVBLG1CQUFTLGdCQUFnQkEsT0FBTSxNQUFNTixRQUFPO0FBQzFDO0FBQUE7QUFBQSxjQUNBLFNBQVMsWUFBWWMsa0JBQWlCUixNQUFLLGFBQWEsTUFBTUE7QUFBQSxjQUFNO0FBQ2xFLGtCQUFJTixVQUFTLE1BQU07QUFDakIsZ0JBQUFNLE1BQUssZUFBZUssVUFBU0wsTUFBSyxjQUFjLFlBQVk7QUFBQSxjQUM5RCxXQUFXQSxNQUFLLGlCQUFpQkssVUFBU1gsTUFBSyxHQUFHO0FBQ2hELGdCQUFBTSxNQUFLLGVBQWVLLFVBQVNYLE1BQUs7QUFBQSxjQUNwQztBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsY0FBSSw2QkFBNkI7QUFDakMsY0FBSSxzQkFBc0I7QUFFMUIsbUJBQVMsZ0JBQWdCLFVBQVU7QUFDakMsZ0JBQUksVUFBVTtBQU1kLFlBQUFKLFNBQU0sU0FBUyxRQUFRLFVBQVUsU0FBVSxPQUFPO0FBQ2hELGtCQUFJLFNBQVMsTUFBTTtBQUNqQjtBQUFBLGNBQ0Y7QUFFQSx5QkFBVztBQUFBLFlBR2IsQ0FBQztBQUNELG1CQUFPO0FBQUEsVUFDVDtBQU1BLG1CQUFTb0IsZUFBYyxTQUFTLE9BQU87QUFDckM7QUFLRSxrQkFBSSxPQUFPLE1BQU0sYUFBYSxZQUFZLE1BQU0sYUFBYSxNQUFNO0FBQ2pFLGdCQUFBcEIsU0FBTSxTQUFTLFFBQVEsTUFBTSxVQUFVLFNBQVUsT0FBTztBQUN0RCxzQkFBSSxTQUFTLE1BQU07QUFDakI7QUFBQSxrQkFDRjtBQUVBLHNCQUFJLE9BQU8sVUFBVSxZQUFZLE9BQU8sVUFBVSxVQUFVO0FBQzFEO0FBQUEsa0JBQ0Y7QUFFQSxzQkFBSSxPQUFPLE1BQU0sU0FBUyxVQUFVO0FBQ2xDO0FBQUEsa0JBQ0Y7QUFFQSxzQkFBSSxDQUFDLHFCQUFxQjtBQUN4QiwwQ0FBc0I7QUFFdEIsMEJBQU0sOERBQThEO0FBQUEsa0JBQ3RFO0FBQUEsZ0JBQ0YsQ0FBQztBQUFBLGNBQ0g7QUFHQSxrQkFBSSxNQUFNLFlBQVksUUFBUSxDQUFDLDRCQUE0QjtBQUN6RCxzQkFBTSxnR0FBcUc7QUFFM0csNkNBQTZCO0FBQUEsY0FDL0I7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUNBLG1CQUFTLG1CQUFtQixTQUFTLE9BQU87QUFFMUMsZ0JBQUksTUFBTSxTQUFTLE1BQU07QUFDdkIsc0JBQVEsYUFBYSxTQUFTZSxVQUFTLGlCQUFpQixNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQUEsWUFDdkU7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsZUFBZSxTQUFTLE9BQU87QUFDdEMsZ0JBQUksWUFBWSxRQUFRO0FBQUEsY0FDdEIsVUFBVTtBQUFBLFlBQ1osR0FBRyxLQUFLO0FBRVIsZ0JBQUksVUFBVSxnQkFBZ0IsTUFBTSxRQUFRO0FBRTVDLGdCQUFJLFNBQVM7QUFDWCx3QkFBVSxXQUFXO0FBQUEsWUFDdkI7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJO0FBRUo7QUFDRSx5Q0FBNkI7QUFBQSxVQUMvQjtBQUVBLG1CQUFTLDhCQUE4QjtBQUNyQyxnQkFBSSxZQUFZLG9DQUFvQztBQUVwRCxnQkFBSSxXQUFXO0FBQ2IscUJBQU8scUNBQXFDLFlBQVk7QUFBQSxZQUMxRDtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUksaUJBQWlCLENBQUMsU0FBUyxjQUFjO0FBSzdDLG1CQUFTLHFCQUFxQixPQUFPO0FBQ25DO0FBQ0Usd0NBQTBCLFVBQVUsS0FBSztBQUV6Qyx1QkFBUyxJQUFJLEdBQUcsSUFBSSxlQUFlLFFBQVEsS0FBSztBQUM5QyxvQkFBSSxXQUFXLGVBQWUsQ0FBQztBQUUvQixvQkFBSSxNQUFNLFFBQVEsS0FBSyxNQUFNO0FBQzNCO0FBQUEsZ0JBQ0Y7QUFFQSxvQkFBSU0sV0FBVSxNQUFNLFFBQVEsTUFBTSxRQUFRLENBQUM7QUFFM0Msb0JBQUksTUFBTSxZQUFZLENBQUNBLFVBQVM7QUFDOUIsd0JBQU0sZ0ZBQXFGLFVBQVUsNEJBQTRCLENBQUM7QUFBQSxnQkFDcEksV0FBVyxDQUFDLE1BQU0sWUFBWUEsVUFBUztBQUNyQyx3QkFBTSx1RkFBNEYsVUFBVSw0QkFBNEIsQ0FBQztBQUFBLGdCQUMzSTtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGNBQWNYLE9BQU0sVUFBVSxXQUFXLG9CQUFvQjtBQUNwRSxnQkFBSVksV0FBVVosTUFBSztBQUVuQixnQkFBSSxVQUFVO0FBQ1osa0JBQUksaUJBQWlCO0FBQ3JCLGtCQUFJLGdCQUFnQixDQUFDO0FBRXJCLHVCQUFTLElBQUksR0FBRyxJQUFJLGVBQWUsUUFBUSxLQUFLO0FBRTlDLDhCQUFjLE1BQU0sZUFBZSxDQUFDLENBQUMsSUFBSTtBQUFBLGNBQzNDO0FBRUEsdUJBQVMsS0FBSyxHQUFHLEtBQUtZLFNBQVEsUUFBUSxNQUFNO0FBQzFDLG9CQUFJLFdBQVcsY0FBYyxlQUFlLE1BQU1BLFNBQVEsRUFBRSxFQUFFLEtBQUs7QUFFbkUsb0JBQUlBLFNBQVEsRUFBRSxFQUFFLGFBQWEsVUFBVTtBQUNyQyxrQkFBQUEsU0FBUSxFQUFFLEVBQUUsV0FBVztBQUFBLGdCQUN6QjtBQUVBLG9CQUFJLFlBQVksb0JBQW9CO0FBQ2xDLGtCQUFBQSxTQUFRLEVBQUUsRUFBRSxrQkFBa0I7QUFBQSxnQkFDaEM7QUFBQSxjQUNGO0FBQUEsWUFDRixPQUFPO0FBR0wsa0JBQUksaUJBQWlCUCxVQUFTLGlCQUFpQixTQUFTLENBQUM7QUFFekQsa0JBQUksa0JBQWtCO0FBRXRCLHVCQUFTLE1BQU0sR0FBRyxNQUFNTyxTQUFRLFFBQVEsT0FBTztBQUM3QyxvQkFBSUEsU0FBUSxHQUFHLEVBQUUsVUFBVSxnQkFBZ0I7QUFDekMsa0JBQUFBLFNBQVEsR0FBRyxFQUFFLFdBQVc7QUFFeEIsc0JBQUksb0JBQW9CO0FBQ3RCLG9CQUFBQSxTQUFRLEdBQUcsRUFBRSxrQkFBa0I7QUFBQSxrQkFDakM7QUFFQTtBQUFBLGdCQUNGO0FBRUEsb0JBQUksb0JBQW9CLFFBQVEsQ0FBQ0EsU0FBUSxHQUFHLEVBQUUsVUFBVTtBQUN0RCxvQ0FBa0JBLFNBQVEsR0FBRztBQUFBLGdCQUMvQjtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxvQkFBb0IsTUFBTTtBQUM1QixnQ0FBZ0IsV0FBVztBQUFBLGNBQzdCO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFrQkEsbUJBQVMsZUFBZSxTQUFTLE9BQU87QUFDdEMsbUJBQU8sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLGNBQ3hCLE9BQU87QUFBQSxZQUNULENBQUM7QUFBQSxVQUNIO0FBQ0EsbUJBQVMsbUJBQW1CLFNBQVMsT0FBTztBQUMxQyxnQkFBSVosUUFBTztBQUVYO0FBQ0UsbUNBQXFCLEtBQUs7QUFBQSxZQUM1QjtBQUVBLFlBQUFBLE1BQUssZ0JBQWdCO0FBQUEsY0FDbkIsYUFBYSxDQUFDLENBQUMsTUFBTTtBQUFBLFlBQ3ZCO0FBRUE7QUFDRSxrQkFBSSxNQUFNLFVBQVUsVUFBYSxNQUFNLGlCQUFpQixVQUFhLENBQUMsNEJBQTRCO0FBQ2hHLHNCQUFNLDhSQUFrVDtBQUV4VCw2Q0FBNkI7QUFBQSxjQUMvQjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsbUJBQW1CLFNBQVMsT0FBTztBQUMxQyxnQkFBSUEsUUFBTztBQUNYLFlBQUFBLE1BQUssV0FBVyxDQUFDLENBQUMsTUFBTTtBQUN4QixnQkFBSU4sU0FBUSxNQUFNO0FBRWxCLGdCQUFJQSxVQUFTLE1BQU07QUFDakIsNEJBQWNNLE9BQU0sQ0FBQyxDQUFDLE1BQU0sVUFBVU4sUUFBTyxLQUFLO0FBQUEsWUFDcEQsV0FBVyxNQUFNLGdCQUFnQixNQUFNO0FBQ3JDLDRCQUFjTSxPQUFNLENBQUMsQ0FBQyxNQUFNLFVBQVUsTUFBTSxjQUFjLElBQUk7QUFBQSxZQUNoRTtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxrQkFBa0IsU0FBUyxPQUFPO0FBQ3pDLGdCQUFJQSxRQUFPO0FBQ1gsZ0JBQUksY0FBY0EsTUFBSyxjQUFjO0FBQ3JDLFlBQUFBLE1BQUssY0FBYyxjQUFjLENBQUMsQ0FBQyxNQUFNO0FBQ3pDLGdCQUFJTixTQUFRLE1BQU07QUFFbEIsZ0JBQUlBLFVBQVMsTUFBTTtBQUNqQiw0QkFBY00sT0FBTSxDQUFDLENBQUMsTUFBTSxVQUFVTixRQUFPLEtBQUs7QUFBQSxZQUNwRCxXQUFXLGdCQUFnQixDQUFDLENBQUMsTUFBTSxVQUFVO0FBRTNDLGtCQUFJLE1BQU0sZ0JBQWdCLE1BQU07QUFDOUIsOEJBQWNNLE9BQU0sQ0FBQyxDQUFDLE1BQU0sVUFBVSxNQUFNLGNBQWMsSUFBSTtBQUFBLGNBQ2hFLE9BQU87QUFFTCw4QkFBY0EsT0FBTSxDQUFDLENBQUMsTUFBTSxVQUFVLE1BQU0sV0FBVyxDQUFDLElBQUksSUFBSSxLQUFLO0FBQUEsY0FDdkU7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUNBLG1CQUFTLHlCQUF5QixTQUFTLE9BQU87QUFDaEQsZ0JBQUlBLFFBQU87QUFDWCxnQkFBSU4sU0FBUSxNQUFNO0FBRWxCLGdCQUFJQSxVQUFTLE1BQU07QUFDakIsNEJBQWNNLE9BQU0sQ0FBQyxDQUFDLE1BQU0sVUFBVU4sUUFBTyxLQUFLO0FBQUEsWUFDcEQ7QUFBQSxVQUNGO0FBRUEsY0FBSSx1QkFBdUI7QUFpQjNCLG1CQUFTLGVBQWUsU0FBUyxPQUFPO0FBQ3RDLGdCQUFJTSxRQUFPO0FBRVgsZ0JBQUksRUFBRSxNQUFNLDJCQUEyQixPQUFPO0FBQzVDO0FBQ0Usc0JBQU0sTUFBTyw4REFBK0Q7QUFBQSxjQUM5RTtBQUFBLFlBQ0Y7QUFRQSxnQkFBSSxZQUFZLFFBQVEsQ0FBQyxHQUFHLE9BQU87QUFBQSxjQUNqQyxPQUFPO0FBQUEsY0FDUCxjQUFjO0FBQUEsY0FDZCxVQUFVSyxVQUFTTCxNQUFLLGNBQWMsWUFBWTtBQUFBLFlBQ3BELENBQUM7QUFFRCxtQkFBTztBQUFBLFVBQ1Q7QUFDQSxtQkFBUyxtQkFBbUIsU0FBUyxPQUFPO0FBQzFDLGdCQUFJQSxRQUFPO0FBRVg7QUFDRSx3Q0FBMEIsWUFBWSxLQUFLO0FBRTNDLGtCQUFJLE1BQU0sVUFBVSxVQUFhLE1BQU0saUJBQWlCLFVBQWEsQ0FBQyxzQkFBc0I7QUFDMUYsc0JBQU0sMlZBQW9YLG9DQUFvQyxLQUFLLGFBQWE7QUFFaGIsdUNBQXVCO0FBQUEsY0FDekI7QUFBQSxZQUNGO0FBRUEsZ0JBQUksZUFBZSxNQUFNO0FBRXpCLGdCQUFJLGdCQUFnQixNQUFNO0FBQ3hCLGtCQUFJLFdBQVcsTUFBTSxVQUNqQixlQUFlLE1BQU07QUFFekIsa0JBQUksWUFBWSxNQUFNO0FBQ3BCO0FBQ0Usd0JBQU0sb0ZBQXlGO0FBQUEsZ0JBQ2pHO0FBRUE7QUFDRSxzQkFBSSxFQUFFLGdCQUFnQixPQUFPO0FBQzNCO0FBQ0UsNEJBQU0sTUFBTyxxRUFBc0U7QUFBQSxvQkFDckY7QUFBQSxrQkFDRjtBQUVBLHNCQUFJLE1BQU0sUUFBUSxRQUFRLEdBQUc7QUFDM0Isd0JBQUksRUFBRSxTQUFTLFVBQVUsSUFBSTtBQUMzQjtBQUNFLDhCQUFNLE1BQU8sNkNBQThDO0FBQUEsc0JBQzdEO0FBQUEsb0JBQ0Y7QUFFQSwrQkFBVyxTQUFTLENBQUM7QUFBQSxrQkFDdkI7QUFFQSxpQ0FBZTtBQUFBLGdCQUNqQjtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxnQkFBZ0IsTUFBTTtBQUN4QiwrQkFBZTtBQUFBLGNBQ2pCO0FBRUEsNkJBQWU7QUFBQSxZQUNqQjtBQUVBLFlBQUFBLE1BQUssZ0JBQWdCO0FBQUEsY0FDbkIsY0FBYyxpQkFBaUIsWUFBWTtBQUFBLFlBQzdDO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGdCQUFnQixTQUFTLE9BQU87QUFDdkMsZ0JBQUlBLFFBQU87QUFDWCxnQkFBSU4sU0FBUSxpQkFBaUIsTUFBTSxLQUFLO0FBQ3hDLGdCQUFJLGVBQWUsaUJBQWlCLE1BQU0sWUFBWTtBQUV0RCxnQkFBSUEsVUFBUyxNQUFNO0FBR2pCLGtCQUFJLFdBQVdXLFVBQVNYLE1BQUs7QUFFN0Isa0JBQUksYUFBYU0sTUFBSyxPQUFPO0FBQzNCLGdCQUFBQSxNQUFLLFFBQVE7QUFBQSxjQUNmO0FBRUEsa0JBQUksTUFBTSxnQkFBZ0IsUUFBUUEsTUFBSyxpQkFBaUIsVUFBVTtBQUNoRSxnQkFBQUEsTUFBSyxlQUFlO0FBQUEsY0FDdEI7QUFBQSxZQUNGO0FBRUEsZ0JBQUksZ0JBQWdCLE1BQU07QUFDeEIsY0FBQUEsTUFBSyxlQUFlSyxVQUFTLFlBQVk7QUFBQSxZQUMzQztBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxtQkFBbUIsU0FBUyxPQUFPO0FBQzFDLGdCQUFJTCxRQUFPO0FBR1gsZ0JBQUksY0FBY0EsTUFBSztBQUt2QixnQkFBSSxnQkFBZ0JBLE1BQUssY0FBYyxjQUFjO0FBQ25ELGtCQUFJLGdCQUFnQixNQUFNLGdCQUFnQixNQUFNO0FBQzlDLGdCQUFBQSxNQUFLLFFBQVE7QUFBQSxjQUNmO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyx5QkFBeUIsU0FBUyxPQUFPO0FBRWhELDRCQUFnQixTQUFTLEtBQUs7QUFBQSxVQUNoQztBQUVBLGNBQUksaUJBQWlCO0FBQ3JCLGNBQUksaUJBQWlCO0FBQ3JCLGNBQUksZ0JBQWdCO0FBQ3BCLGNBQUksYUFBYTtBQUFBLFlBQ2YsTUFBTTtBQUFBLFlBQ04sUUFBUTtBQUFBLFlBQ1IsS0FBSztBQUFBLFVBQ1A7QUFFQSxtQkFBUyxzQkFBc0IsTUFBTTtBQUNuQyxvQkFBUSxNQUFNO0FBQUEsY0FDWixLQUFLO0FBQ0gsdUJBQU87QUFBQSxjQUVULEtBQUs7QUFDSCx1QkFBTztBQUFBLGNBRVQ7QUFDRSx1QkFBTztBQUFBLFlBQ1g7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsa0JBQWtCLGlCQUFpQixNQUFNO0FBQ2hELGdCQUFJLG1CQUFtQixRQUFRLG9CQUFvQixnQkFBZ0I7QUFFakUscUJBQU8sc0JBQXNCLElBQUk7QUFBQSxZQUNuQztBQUVBLGdCQUFJLG9CQUFvQixpQkFBaUIsU0FBUyxpQkFBaUI7QUFFakUscUJBQU87QUFBQSxZQUNUO0FBR0EsbUJBQU87QUFBQSxVQUNUO0FBT0EsY0FBSSxxQ0FBcUMsU0FBVWEsT0FBTTtBQUN2RCxnQkFBSSxPQUFPLFVBQVUsZUFBZSxNQUFNLHlCQUF5QjtBQUNqRSxxQkFBTyxTQUFVLE1BQU0sTUFBTSxNQUFNLE1BQU07QUFDdkMsc0JBQU0sd0JBQXdCLFdBQVk7QUFDeEMseUJBQU9BLE1BQUssTUFBTSxNQUFNLE1BQU0sSUFBSTtBQUFBLGdCQUNwQyxDQUFDO0FBQUEsY0FDSDtBQUFBLFlBQ0YsT0FBTztBQUNMLHFCQUFPQTtBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBRUEsY0FBSTtBQVNKLGNBQUksZUFBZSxtQ0FBbUMsU0FBVWIsT0FBTSxNQUFNO0FBQzFFLGdCQUFJQSxNQUFLLGlCQUFpQixXQUFXLEtBQUs7QUFFeEMsa0JBQUksRUFBRSxlQUFlQSxRQUFPO0FBSTFCLHVDQUF1Qix3QkFBd0IsU0FBUyxjQUFjLEtBQUs7QUFDM0UscUNBQXFCLFlBQVksVUFBVSxLQUFLLFFBQVEsRUFBRSxTQUFTLElBQUk7QUFDdkUsb0JBQUksVUFBVSxxQkFBcUI7QUFFbkMsdUJBQU9BLE1BQUssWUFBWTtBQUN0QixrQkFBQUEsTUFBSyxZQUFZQSxNQUFLLFVBQVU7QUFBQSxnQkFDbEM7QUFFQSx1QkFBTyxRQUFRLFlBQVk7QUFDekIsa0JBQUFBLE1BQUssWUFBWSxRQUFRLFVBQVU7QUFBQSxnQkFDckM7QUFFQTtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsWUFBQUEsTUFBSyxZQUFZO0FBQUEsVUFDbkIsQ0FBQztBQUtELGNBQUksZUFBZTtBQUNuQixjQUFJLFlBQVk7QUFDaEIsY0FBSSxlQUFlO0FBQ25CLGNBQUksZ0JBQWdCO0FBQ3BCLGNBQUkseUJBQXlCO0FBWTdCLGNBQUksaUJBQWlCLFNBQVVBLE9BQU0sTUFBTTtBQUN6QyxnQkFBSSxNQUFNO0FBQ1Isa0JBQUksYUFBYUEsTUFBSztBQUV0QixrQkFBSSxjQUFjLGVBQWVBLE1BQUssYUFBYSxXQUFXLGFBQWEsV0FBVztBQUNwRiwyQkFBVyxZQUFZO0FBQ3ZCO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxZQUFBQSxNQUFLLGNBQWM7QUFBQSxVQUNyQjtBQUlBLGNBQUksc0JBQXNCO0FBQUEsWUFDeEIsV0FBVyxDQUFDLGtCQUFrQixzQkFBc0IscUJBQXFCLHFCQUFxQiwyQkFBMkIsaUJBQWlCLHNCQUFzQix5QkFBeUI7QUFBQSxZQUN6TCxZQUFZLENBQUMsd0JBQXdCLGtCQUFrQixtQkFBbUIsbUJBQW1CLG9CQUFvQix1QkFBdUIsdUJBQXVCLG9CQUFvQixnQkFBZ0I7QUFBQSxZQUNuTSxvQkFBb0IsQ0FBQyx1QkFBdUIscUJBQXFCO0FBQUEsWUFDakUsUUFBUSxDQUFDLHFCQUFxQixxQkFBcUIscUJBQXFCLHFCQUFxQixxQkFBcUIsb0JBQW9CLHFCQUFxQixvQkFBb0IsbUJBQW1CLG1CQUFtQixtQkFBbUIsb0JBQW9CLG9CQUFvQixvQkFBb0Isa0JBQWtCLGtCQUFrQixnQkFBZ0I7QUFBQSxZQUN4VixnQkFBZ0IsQ0FBQyx1QkFBdUIsdUJBQXVCLHFCQUFxQjtBQUFBLFlBQ3BGLGtCQUFrQixDQUFDLHlCQUF5Qix5QkFBeUIsdUJBQXVCO0FBQUEsWUFDNUYsY0FBYyxDQUFDLHFCQUFxQixxQkFBcUIsbUJBQW1CO0FBQUEsWUFDNUUsYUFBYSxDQUFDLHFCQUFxQixtQkFBbUIsb0JBQW9CLGdCQUFnQjtBQUFBLFlBQzFGLGFBQWEsQ0FBQyxxQkFBcUIscUJBQXFCLG9CQUFvQixxQkFBcUIsa0JBQWtCO0FBQUEsWUFDbkgsaUJBQWlCLENBQUMsd0JBQXdCLHdCQUF3QixzQkFBc0I7QUFBQSxZQUN4RixtQkFBbUIsQ0FBQywwQkFBMEIsMEJBQTBCLHdCQUF3QjtBQUFBLFlBQ2hHLFlBQVksQ0FBQyxtQkFBbUIsbUJBQW1CLGlCQUFpQjtBQUFBLFlBQ3BFLGNBQWMsQ0FBQywwQkFBMEIsMkJBQTJCLHVCQUF1QixzQkFBc0I7QUFBQSxZQUNqSCxhQUFhLENBQUMsb0JBQW9CLG9CQUFvQixrQkFBa0I7QUFBQSxZQUN4RSxhQUFhLENBQUMscUJBQXFCLG1CQUFtQixvQkFBb0IsZ0JBQWdCO0FBQUEsWUFDMUYsV0FBVyxDQUFDLGtCQUFrQixrQkFBa0IsZ0JBQWdCO0FBQUEsWUFDaEUsYUFBYSxDQUFDLHFCQUFxQixtQkFBbUIsb0JBQW9CLGdCQUFnQjtBQUFBLFlBQzFGLFlBQVksQ0FBQyxtQkFBbUIsbUJBQW1CLGlCQUFpQjtBQUFBLFlBQ3BFLFNBQVMsQ0FBQyxlQUFlLGFBQWE7QUFBQSxZQUN0QyxNQUFNLENBQUMsYUFBYSxZQUFZLFlBQVk7QUFBQSxZQUM1QyxVQUFVLENBQUMsaUJBQWlCLFVBQVU7QUFBQSxZQUN0QyxNQUFNLENBQUMsY0FBYyx1QkFBdUIsZUFBZSx3QkFBd0IsWUFBWSxrQkFBa0IsZUFBZSxhQUFhLGVBQWUseUJBQXlCLG1CQUFtQix3QkFBd0Isd0JBQXdCLHNCQUFzQix1QkFBdUIsY0FBYyxZQUFZO0FBQUEsWUFDL1QsYUFBYSxDQUFDLHlCQUF5QixtQkFBbUIsd0JBQXdCLHdCQUF3QixzQkFBc0IscUJBQXFCO0FBQUEsWUFDckosS0FBSyxDQUFDLGFBQWEsUUFBUTtBQUFBLFlBQzNCLE1BQU0sQ0FBQyxtQkFBbUIsZ0JBQWdCLGdCQUFnQixxQkFBcUIsdUJBQXVCLGtCQUFrQjtBQUFBLFlBQ3hILFVBQVUsQ0FBQyxpQkFBaUIsbUJBQW1CLGNBQWMsY0FBYztBQUFBLFlBQzNFLFlBQVksQ0FBQyxpQkFBaUIsaUJBQWlCO0FBQUEsWUFDL0MsZUFBZSxDQUFDLFdBQVc7QUFBQSxZQUMzQixTQUFTLENBQUMsYUFBYSxRQUFRO0FBQUEsWUFDL0IsU0FBUyxDQUFDLGNBQWMsY0FBYztBQUFBLFlBQ3RDLFlBQVksQ0FBQyxRQUFRO0FBQUEsWUFDckIsY0FBYyxDQUFDLHFCQUFxQix1QkFBdUIsa0JBQWtCO0FBQUEsWUFDN0UsV0FBVyxDQUFDLGtCQUFrQixxQkFBcUIsZUFBZTtBQUFBLFlBQ2xFLFFBQVEsQ0FBQyxnQkFBZ0IsY0FBYyxlQUFlLFdBQVc7QUFBQSxZQUNqRSxRQUFRLENBQUMsYUFBYSxhQUFhLGFBQWE7QUFBQSxZQUNoRCxNQUFNLENBQUMsWUFBWSxpQkFBaUIsYUFBYSxZQUFZLGNBQWMsaUJBQWlCLGlCQUFpQixjQUFjLFVBQVU7QUFBQSxZQUNySSxjQUFjLENBQUMsaUJBQWlCLGVBQWU7QUFBQSxZQUMvQyxTQUFTLENBQUMsZ0JBQWdCLGdCQUFnQixjQUFjO0FBQUEsWUFDeEQsVUFBVSxDQUFDLGFBQWEsV0FBVztBQUFBLFlBQ25DLFNBQVMsQ0FBQyxpQkFBaUIsZUFBZSxnQkFBZ0IsWUFBWTtBQUFBLFlBQ3RFLGNBQWMsQ0FBQyxnQkFBZ0IsZ0JBQWdCO0FBQUEsWUFDL0MsWUFBWSxDQUFDLGNBQWMsY0FBYztBQUFBLFlBQ3pDLFdBQVcsQ0FBQyxhQUFhLGFBQWE7QUFBQSxZQUN0QyxnQkFBZ0IsQ0FBQyx1QkFBdUIsc0JBQXNCLHFCQUFxQjtBQUFBLFlBQ25GLGNBQWMsQ0FBQyxxQkFBcUIsbUJBQW1CO0FBQUEsWUFDdkQsWUFBWSxDQUFDLG1CQUFtQixzQkFBc0Isc0JBQXNCLDBCQUEwQjtBQUFBLFlBQ3RHLFVBQVUsQ0FBQyxjQUFjO0FBQUEsVUFDM0I7QUFLQSxjQUFJLG1CQUFtQjtBQUFBLFlBQ3JCLHlCQUF5QjtBQUFBLFlBQ3pCLG1CQUFtQjtBQUFBLFlBQ25CLGtCQUFrQjtBQUFBLFlBQ2xCLGtCQUFrQjtBQUFBLFlBQ2xCLFNBQVM7QUFBQSxZQUNULGNBQWM7QUFBQSxZQUNkLGlCQUFpQjtBQUFBLFlBQ2pCLGFBQWE7QUFBQSxZQUNiLFNBQVM7QUFBQSxZQUNULE1BQU07QUFBQSxZQUNOLFVBQVU7QUFBQSxZQUNWLGNBQWM7QUFBQSxZQUNkLFlBQVk7QUFBQSxZQUNaLGNBQWM7QUFBQSxZQUNkLFdBQVc7QUFBQSxZQUNYLFVBQVU7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLGFBQWE7QUFBQSxZQUNiLGNBQWM7QUFBQSxZQUNkLFlBQVk7QUFBQSxZQUNaLGVBQWU7QUFBQSxZQUNmLGdCQUFnQjtBQUFBLFlBQ2hCLGlCQUFpQjtBQUFBLFlBQ2pCLFlBQVk7QUFBQSxZQUNaLFdBQVc7QUFBQSxZQUNYLFlBQVk7QUFBQSxZQUNaLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxZQUNQLFNBQVM7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxZQUNSLE1BQU07QUFBQTtBQUFBLFlBRU4sYUFBYTtBQUFBLFlBQ2IsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsaUJBQWlCO0FBQUEsWUFDakIsa0JBQWtCO0FBQUEsWUFDbEIsa0JBQWtCO0FBQUEsWUFDbEIsZUFBZTtBQUFBLFlBQ2YsYUFBYTtBQUFBLFVBQ2Y7QUFRQSxtQkFBUyxVQUFVTCxTQUFRLEtBQUs7QUFDOUIsbUJBQU9BLFVBQVMsSUFBSSxPQUFPLENBQUMsRUFBRSxZQUFZLElBQUksSUFBSSxVQUFVLENBQUM7QUFBQSxVQUMvRDtBQU9BLGNBQUksV0FBVyxDQUFDLFVBQVUsTUFBTSxPQUFPLEdBQUc7QUFHMUMsaUJBQU8sS0FBSyxnQkFBZ0IsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUNwRCxxQkFBUyxRQUFRLFNBQVVBLFNBQVE7QUFDakMsK0JBQWlCLFVBQVVBLFNBQVEsSUFBSSxDQUFDLElBQUksaUJBQWlCLElBQUk7QUFBQSxZQUNuRSxDQUFDO0FBQUEsVUFDSCxDQUFDO0FBWUQsbUJBQVMsb0JBQW9CLE1BQU1ELFFBQU9vQixtQkFBa0I7QUFVMUQsZ0JBQUksVUFBVXBCLFVBQVMsUUFBUSxPQUFPQSxXQUFVLGFBQWFBLFdBQVU7QUFFdkUsZ0JBQUksU0FBUztBQUNYLHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLENBQUNvQixxQkFBb0IsT0FBT3BCLFdBQVUsWUFBWUEsV0FBVSxLQUFLLEVBQUUsaUJBQWlCLGVBQWUsSUFBSSxLQUFLLGlCQUFpQixJQUFJLElBQUk7QUFDdkkscUJBQU9BLFNBQVE7QUFBQSxZQUNqQjtBQUVBLG9CQUFRLEtBQUtBLFFBQU8sS0FBSztBQUFBLFVBQzNCO0FBRUEsY0FBSSxtQkFBbUI7QUFDdkIsY0FBSSxZQUFZO0FBZWhCLG1CQUFTLG1CQUFtQixNQUFNO0FBQ2hDLG1CQUFPLEtBQUssUUFBUSxrQkFBa0IsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLFdBQVcsTUFBTTtBQUFBLFVBQ3RGO0FBRUEsY0FBSSxpQkFBaUIsV0FBWTtBQUFBLFVBQUM7QUFFbEM7QUFFRSxnQkFBSSw4QkFBOEI7QUFDbEMsZ0JBQUksY0FBYztBQUNsQixnQkFBSSxnQkFBZ0I7QUFFcEIsZ0JBQUksb0NBQW9DO0FBQ3hDLGdCQUFJLG1CQUFtQixDQUFDO0FBQ3hCLGdCQUFJLG9CQUFvQixDQUFDO0FBQ3pCLGdCQUFJLG9CQUFvQjtBQUN4QixnQkFBSSx5QkFBeUI7QUFFN0IsZ0JBQUksV0FBVyxTQUFVcUIsU0FBUTtBQUMvQixxQkFBT0EsUUFBTyxRQUFRLGVBQWUsU0FBVSxHQUFHQyxZQUFXO0FBQzNELHVCQUFPQSxXQUFVLFlBQVk7QUFBQSxjQUMvQixDQUFDO0FBQUEsWUFDSDtBQUVBLGdCQUFJLDBCQUEwQixTQUFVLE1BQU07QUFDNUMsa0JBQUksaUJBQWlCLGVBQWUsSUFBSSxLQUFLLGlCQUFpQixJQUFJLEdBQUc7QUFDbkU7QUFBQSxjQUNGO0FBRUEsK0JBQWlCLElBQUksSUFBSTtBQUV6QjtBQUFBLGdCQUFNO0FBQUEsZ0JBQW1EO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBR3pELFNBQVMsS0FBSyxRQUFRLGFBQWEsS0FBSyxDQUFDO0FBQUEsY0FBQztBQUFBLFlBQzVDO0FBRUEsZ0JBQUksMkJBQTJCLFNBQVUsTUFBTTtBQUM3QyxrQkFBSSxpQkFBaUIsZUFBZSxJQUFJLEtBQUssaUJBQWlCLElBQUksR0FBRztBQUNuRTtBQUFBLGNBQ0Y7QUFFQSwrQkFBaUIsSUFBSSxJQUFJO0FBRXpCLG9CQUFNLG1FQUFtRSxNQUFNLEtBQUssT0FBTyxDQUFDLEVBQUUsWUFBWSxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUM7QUFBQSxZQUM3SDtBQUVBLGdCQUFJLDhCQUE4QixTQUFVLE1BQU10QixRQUFPO0FBQ3ZELGtCQUFJLGtCQUFrQixlQUFlQSxNQUFLLEtBQUssa0JBQWtCQSxNQUFLLEdBQUc7QUFDdkU7QUFBQSxjQUNGO0FBRUEsZ0NBQWtCQSxNQUFLLElBQUk7QUFFM0Isb0JBQU0sOEVBQW1GLE1BQU1BLE9BQU0sUUFBUSxtQ0FBbUMsRUFBRSxDQUFDO0FBQUEsWUFDcko7QUFFQSxnQkFBSSxzQkFBc0IsU0FBVSxNQUFNQSxRQUFPO0FBQy9DLGtCQUFJLG1CQUFtQjtBQUNyQjtBQUFBLGNBQ0Y7QUFFQSxrQ0FBb0I7QUFFcEIsb0JBQU0sOERBQThELElBQUk7QUFBQSxZQUMxRTtBQUVBLGdCQUFJLDJCQUEyQixTQUFVLE1BQU1BLFFBQU87QUFDcEQsa0JBQUksd0JBQXdCO0FBQzFCO0FBQUEsY0FDRjtBQUVBLHVDQUF5QjtBQUV6QixvQkFBTSxtRUFBbUUsSUFBSTtBQUFBLFlBQy9FO0FBRUEsNkJBQWlCLFNBQVUsTUFBTUEsUUFBTztBQUN0QyxrQkFBSSxLQUFLLFFBQVEsR0FBRyxJQUFJLElBQUk7QUFDMUIsd0NBQXdCLElBQUk7QUFBQSxjQUM5QixXQUFXLDRCQUE0QixLQUFLLElBQUksR0FBRztBQUNqRCx5Q0FBeUIsSUFBSTtBQUFBLGNBQy9CLFdBQVcsa0NBQWtDLEtBQUtBLE1BQUssR0FBRztBQUN4RCw0Q0FBNEIsTUFBTUEsTUFBSztBQUFBLGNBQ3pDO0FBRUEsa0JBQUksT0FBT0EsV0FBVSxVQUFVO0FBQzdCLG9CQUFJLE1BQU1BLE1BQUssR0FBRztBQUNoQixzQ0FBb0IsTUFBTUEsTUFBSztBQUFBLGdCQUNqQyxXQUFXLENBQUMsU0FBU0EsTUFBSyxHQUFHO0FBQzNCLDJDQUF5QixNQUFNQSxNQUFLO0FBQUEsZ0JBQ3RDO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsY0FBSSxtQkFBbUI7QUFhdkIsbUJBQVMsK0JBQStCdUIsU0FBUTtBQUM5QztBQUNFLGtCQUFJLGFBQWE7QUFDakIsa0JBQUlDLGFBQVk7QUFFaEIsdUJBQVMsYUFBYUQsU0FBUTtBQUM1QixvQkFBSSxDQUFDQSxRQUFPLGVBQWUsU0FBUyxHQUFHO0FBQ3JDO0FBQUEsZ0JBQ0Y7QUFFQSxvQkFBSSxhQUFhQSxRQUFPLFNBQVM7QUFFakMsb0JBQUksY0FBYyxNQUFNO0FBQ3RCLHNCQUFJSCxvQkFBbUIsVUFBVSxRQUFRLElBQUksTUFBTTtBQUNuRCxnQ0FBY0ksY0FBYUosb0JBQW1CLFlBQVksbUJBQW1CLFNBQVMsS0FBSztBQUMzRixnQ0FBYyxvQkFBb0IsV0FBVyxZQUFZQSxpQkFBZ0I7QUFDekUsa0JBQUFJLGFBQVk7QUFBQSxnQkFDZDtBQUFBLGNBQ0Y7QUFFQSxxQkFBTyxjQUFjO0FBQUEsWUFDdkI7QUFBQSxVQUNGO0FBU0EsbUJBQVMsa0JBQWtCbEIsT0FBTWlCLFNBQVE7QUFDdkMsZ0JBQUlFLFNBQVFuQixNQUFLO0FBRWpCLHFCQUFTLGFBQWFpQixTQUFRO0FBQzVCLGtCQUFJLENBQUNBLFFBQU8sZUFBZSxTQUFTLEdBQUc7QUFDckM7QUFBQSxjQUNGO0FBRUEsa0JBQUlILG9CQUFtQixVQUFVLFFBQVEsSUFBSSxNQUFNO0FBRW5EO0FBQ0Usb0JBQUksQ0FBQ0EsbUJBQWtCO0FBQ3JCLG1DQUFpQixXQUFXRyxRQUFPLFNBQVMsQ0FBQztBQUFBLGdCQUMvQztBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxhQUFhLG9CQUFvQixXQUFXQSxRQUFPLFNBQVMsR0FBR0gsaUJBQWdCO0FBRW5GLGtCQUFJLGNBQWMsU0FBUztBQUN6Qiw0QkFBWTtBQUFBLGNBQ2Q7QUFFQSxrQkFBSUEsbUJBQWtCO0FBQ3BCLGdCQUFBSyxPQUFNLFlBQVksV0FBVyxVQUFVO0FBQUEsY0FDekMsT0FBTztBQUNMLGdCQUFBQSxPQUFNLFNBQVMsSUFBSTtBQUFBLGNBQ3JCO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxhQUFhekIsUUFBTztBQUMzQixtQkFBT0EsVUFBUyxRQUFRLE9BQU9BLFdBQVUsYUFBYUEsV0FBVTtBQUFBLFVBQ2xFO0FBV0EsbUJBQVMsbUJBQW1CdUIsU0FBUTtBQUNsQyxnQkFBSSxXQUFXLENBQUM7QUFFaEIscUJBQVMsT0FBT0EsU0FBUTtBQUN0QixrQkFBSSxZQUFZLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxHQUFHO0FBRWhELHVCQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQ3pDLHlCQUFTLFVBQVUsQ0FBQyxDQUFDLElBQUk7QUFBQSxjQUMzQjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFpQkEsbUJBQVMsd0NBQXdDLGNBQWMsWUFBWTtBQUN6RTtBQUNFLGtCQUFJLENBQUMsWUFBWTtBQUNmO0FBQUEsY0FDRjtBQUVBLGtCQUFJLGtCQUFrQixtQkFBbUIsWUFBWTtBQUNyRCxrQkFBSSxpQkFBaUIsbUJBQW1CLFVBQVU7QUFDbEQsa0JBQUksY0FBYyxDQUFDO0FBRW5CLHVCQUFTLE9BQU8saUJBQWlCO0FBQy9CLG9CQUFJLGNBQWMsZ0JBQWdCLEdBQUc7QUFDckMsb0JBQUkscUJBQXFCLGVBQWUsR0FBRztBQUUzQyxvQkFBSSxzQkFBc0IsZ0JBQWdCLG9CQUFvQjtBQUM1RCxzQkFBSSxhQUFhLGNBQWMsTUFBTTtBQUVyQyxzQkFBSSxZQUFZLFVBQVUsR0FBRztBQUMzQjtBQUFBLGtCQUNGO0FBRUEsOEJBQVksVUFBVSxJQUFJO0FBRTFCLHdCQUFNLHVQQUEyUSxhQUFhLGFBQWEsV0FBVyxDQUFDLElBQUksYUFBYSxZQUFZLGFBQWEsa0JBQWtCO0FBQUEsZ0JBQ3JYO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBSUEsY0FBSSxtQkFBbUI7QUFBQSxZQUNyQixNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixJQUFJO0FBQUEsWUFDSixLQUFLO0FBQUEsWUFDTCxPQUFPO0FBQUEsWUFDUCxJQUFJO0FBQUEsWUFDSixLQUFLO0FBQUEsWUFDTCxPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsWUFDUixNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsWUFDUixPQUFPO0FBQUEsWUFDUCxLQUFLO0FBQUE7QUFBQSxVQUVQO0FBSUEsY0FBSSxrQkFBa0IsUUFBUTtBQUFBLFlBQzVCLFVBQVU7QUFBQSxVQUNaLEdBQUcsZ0JBQWdCO0FBRW5CLGNBQUksT0FBTztBQUVYLG1CQUFTLGlCQUFpQixLQUFLLE9BQU87QUFDcEMsZ0JBQUksQ0FBQyxPQUFPO0FBQ1Y7QUFBQSxZQUNGO0FBR0EsZ0JBQUksZ0JBQWdCLEdBQUcsR0FBRztBQUN4QixrQkFBSSxFQUFFLE1BQU0sWUFBWSxRQUFRLE1BQU0sMkJBQTJCLE9BQU87QUFDdEU7QUFDRSx3QkFBTSxNQUFPLE1BQU0sNEZBQTZGO0FBQUEsZ0JBQ2xIO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxNQUFNLDJCQUEyQixNQUFNO0FBQ3pDLGtCQUFJLEVBQUUsTUFBTSxZQUFZLE9BQU87QUFDN0I7QUFDRSx3QkFBTSxNQUFPLG9FQUFxRTtBQUFBLGdCQUNwRjtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxFQUFFLE9BQU8sTUFBTSw0QkFBNEIsWUFBWSxRQUFRLE1BQU0sMEJBQTBCO0FBQ2pHO0FBQ0Usd0JBQU0sTUFBTyw2SkFBOEo7QUFBQSxnQkFDN0s7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBO0FBQ0Usa0JBQUksQ0FBQyxNQUFNLGtDQUFrQyxNQUFNLG1CQUFtQixNQUFNLFlBQVksTUFBTTtBQUM1RixzQkFBTSwyTkFBME87QUFBQSxjQUNsUDtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxFQUFFLE1BQU0sU0FBUyxRQUFRLE9BQU8sTUFBTSxVQUFVLFdBQVc7QUFDN0Q7QUFDRSxzQkFBTSxNQUFPLHNKQUF1SjtBQUFBLGNBQ3RLO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxrQkFBa0IsU0FBUyxPQUFPO0FBQ3pDLGdCQUFJLFFBQVEsUUFBUSxHQUFHLE1BQU0sSUFBSTtBQUMvQixxQkFBTyxPQUFPLE1BQU0sT0FBTztBQUFBLFlBQzdCO0FBRUEsb0JBQVEsU0FBUztBQUFBLGNBS2YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILHVCQUFPO0FBQUEsY0FFVDtBQUNFLHVCQUFPO0FBQUEsWUFDWDtBQUFBLFVBQ0Y7QUFLQSxjQUFJLHdCQUF3QjtBQUFBO0FBQUEsWUFFMUIsUUFBUTtBQUFBLFlBQ1IsZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsV0FBVztBQUFBLFlBQ1gsUUFBUTtBQUFBLFlBQ1IsaUJBQWlCO0FBQUEsWUFDakIsS0FBSztBQUFBLFlBQ0wsSUFBSTtBQUFBLFlBQ0osT0FBTztBQUFBLFlBQ1AsZ0JBQWdCO0FBQUEsWUFDaEIsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsYUFBYTtBQUFBLFlBQ2IsYUFBYTtBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsVUFBVTtBQUFBLFlBQ1YsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsU0FBUztBQUFBLFlBQ1QsV0FBVztBQUFBLFlBQ1gsTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsaUJBQWlCO0FBQUEsWUFDakIsYUFBYTtBQUFBLFlBQ2IsVUFBVTtBQUFBLFlBQ1YsY0FBYztBQUFBLFlBQ2QsUUFBUTtBQUFBLFlBQ1IsYUFBYTtBQUFBLFlBQ2IseUJBQXlCO0FBQUEsWUFDekIsTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsZ0JBQWdCO0FBQUEsWUFDaEIsY0FBYztBQUFBLFlBQ2QsT0FBTztBQUFBLFlBQ1AsS0FBSztBQUFBLFlBQ0wsVUFBVTtBQUFBLFlBQ1YseUJBQXlCO0FBQUEsWUFDekIsdUJBQXVCO0FBQUEsWUFDdkIsVUFBVTtBQUFBLFlBQ1YsV0FBVztBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsY0FBYztBQUFBLFlBQ2QsS0FBSztBQUFBLFlBQ0wsTUFBTTtBQUFBLFlBQ04sWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsWUFBWTtBQUFBLFlBQ1osYUFBYTtBQUFBLFlBQ2IsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLFlBQ1IsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsTUFBTTtBQUFBLFlBQ04sSUFBSTtBQUFBLFlBQ0osV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsSUFBSTtBQUFBLFlBQ0osUUFBUTtBQUFBLFlBQ1IsVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsV0FBVztBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sS0FBSztBQUFBLFlBQ0wsVUFBVTtBQUFBLFlBQ1YsYUFBYTtBQUFBLFlBQ2IsY0FBYztBQUFBLFlBQ2QsS0FBSztBQUFBLFlBQ0wsV0FBVztBQUFBLFlBQ1gsT0FBTztBQUFBLFlBQ1AsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsS0FBSztBQUFBLFlBQ0wsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFlBQ1AsWUFBWTtBQUFBLFlBQ1osTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsYUFBYTtBQUFBLFlBQ2IsYUFBYTtBQUFBLFlBQ2IsUUFBUTtBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osVUFBVTtBQUFBLFlBQ1YsZ0JBQWdCO0FBQUEsWUFDaEIsS0FBSztBQUFBLFlBQ0wsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLFlBQ1IsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sWUFBWTtBQUFBLFlBQ1osS0FBSztBQUFBLFlBQ0wsUUFBUTtBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsU0FBUztBQUFBLFlBQ1QsVUFBVTtBQUFBLFlBQ1YsUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFlBQ1AsT0FBTztBQUFBLFlBQ1AsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBO0FBQUEsWUFFTixPQUFP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O2NBQUFBLEdBQUFBLEdBQUFBLEdBQUFBO1lBQUFBO0FBQUFBLGtCQUFBQSxJQUFBQSxVQUFBQSx1SUFBQUE7VUFBQUE7QUFBQUEsY0FBQUEsSUFBQUEsS0FBQUEsTUFBQUEsS0FBQUE7QUFBQUEsaUJBQUFBLEVBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLEVBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUEsR0FBQUEsTUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsU0FBQUEsSUFBQUE7QUFBQUEsWUFBQUEsS0FBQUEsTUFBQUEsS0FBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBO0FBQUFBLGNBQUFBLE1BQUFBLFFBQUFBLEdBQUFBLFVBQUFBLEdBQUFBLE9BQUFBO1lBQUFBLFVBQUFBO0FBQUFBLGtCQUFBQTtBQUFBQSxzQkFBQUE7WUFBQUE7VUFBQUEsRUFBQUE7UUFBQUE7QUFBQUEsaUJBQUFBLEdBQUFBLElBQUFBLElBQUFBO0FBQUFBLFdBQUFBLFFBQUFBLE1BQUFBLEtBQUFBLEdBQUFBLFlBQUFBLEtBQUFBLEdBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxJQUFBQSxNQUFBQSxFQUFBQSxHQUFBQSxLQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxHQUFBQSxFQUFBQSxJQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSxpQkFBQUE7UUFBQUE7QUFBQUEsaUJBQUFBLEtBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxVQUFBQSxRQUFBQSxLQUFBQSxJQUFBQSxNQUFBQSxFQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxHQUFBQSxFQUFBQSxJQUFBQSxVQUFBQSxFQUFBQTtBQUFBQSxpQkFBQUEsU0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEtBQUFBLFdBQUFBO0FBQUFBLHVCQUFBQSxLQUFBQSxXQUFBQTtBQUFBQSxvQkFBQUEsS0FBQUE7QUFBQUEsdUJBQUFBLFNBQUFBLElBQUFBO0FBQUFBLDJCQUFBQSxLQUFBQSxHQUFBQSxTQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxRQUFBQSxNQUFBQTtBQUFBQSx3QkFBQUEsS0FBQUEsdUJBQUFBLE1BQUFBLEdBQUFBLFdBQUFBLEVBQUFBO0FBQUFBLG9CQUFBQSxNQUFBQSxLQUFBQSxPQUFBQSxHQUFBQSxNQUFBQSxNQUFBQSxRQUFBQSxHQUFBQSxNQUFBQSxjQUFBQSxNQUFBQTtrQkFBQUE7QUFBQUEseUJBQUFBLHlCQUFBQSxPQUFBQTtnQkFBQUE7Y0FBQUEsRUFBQUEsR0FBQUEsS0FBQUEsR0FBQUEsR0FBQUEsR0FBQUEsS0FBQUEsR0FBQUEsR0FBQUEsR0FBQUEsS0FBQUEsR0FBQUEsR0FBQUEsR0FBQUEsS0FBQUEsR0FBQUEsS0FBQUEsVUFBQUEsUUFBQUE7QUFBQUEsaUJBQUFBLE1BQUFBLEdBQUFBLEtBQUFBLEtBQUFBLFVBQUFBLFVBQUFBLEtBQUFBLFNBQUFBLFVBQUFBLEVBQUFBLENBQUFBLEtBQUFBLE1BQUFBLE1BQUFBLEtBQUFBLE1BQUFBLEdBQUFBLEtBQUFBLEtBQUFBLFVBQUFBLFVBQUFBLEtBQUFBLFNBQUFBLFVBQUFBLEVBQUFBLENBQUFBLEtBQUFBLE1BQUFBLE1BQUFBLEtBQUFBLE1BQUFBLEdBQUFBLEtBQUFBLEtBQUFBLFVBQUFBLFVBQUFBLEtBQUFBLFNBQUFBLFVBQUFBLEVBQUFBLENBQUFBLEtBQUFBLE1BQUFBLE1BQUFBO0FBQUFBLHFCQUFBQSxDQUFBQSxJQUFBQSxJQUFBQSxFQUFBQTtZQUFBQSxFQUFBQSxFQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxJQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxXQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsVUFBQUEsS0FBQUEs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LE9BQUEsV0FBQSxVQUFBLFdBQUEsV0FBQSxXQUFBLGFBQUEsV0FBQSxlQUFBLFdBQUEsZ0JBQUEsV0FBQSxZQUFBLFdBQUEsV0FBQSxXQUFBLGVBQUEsV0FBQSxjQUFBLFdBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxRQUFBLFdBQUEsaUJBQUEsV0FBQSxXQUFBLFdBQUEsTUFBQSxXQUFBLFdBQUEsV0FBQSxLQUFBLFdBQUEsV0FBQSxXQUFBLGVBQUEsV0FBQSxTQUFBLFdBQUEsUUFBQSxXQUFBLFdBQUEsV0FBQSxTQUFBLFdBQUEsV0FBQSxXQUFBLE1BQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxXQUFBLFVBQUEsV0FBQSxZQUFBLFdBQUEsUUFBQSxXQUFBLGVBQUEsV0FBQSxZQUFBLFdBQUEsT0FBQSxXQUFBLFdBQUEsV0FBQSxVQUFBLFdBQUEsT0FBQSxXQUFBLFlBQUEsV0FBQSxPQUFBLFdBQUEsT0FBQSxXQUFBLFlBQUEsV0FBQSxXQUFBLFdBQUEsWUFBQSxXQUFBLFFBQUEsV0FBQSxjQUFBLFdBQUEsT0FBQSxXQUFBLHNCQUFBLFdBQUEsU0FBQSxXQUFBLEtBQUEsV0FBQSxTQUFBLFdBQUEsU0FBQSxXQUFBLFVBQUEsV0FBQSxXQUFBLFdBQUEsUUFBQSxXQUFBLFNBQUEsV0FBQSxPQUFBLFdBQUEsWUFBQSxXQUFBLGFBQUEsV0FBQSxRQUFBLFdBQUEsV0FBQSxXQUFBLE1BQUEsV0FBQSxNQUFBLFdBQUEsV0FBQSxXQUFBLGFBQUEsV0FBQSxVQUFBLFdBQUEsUUFBQSxXQUFBLFdBQUEsV0FBQSxnQkFBQSxXQUFBLFlBQUEsV0FBQSxlQUFBLFdBQUEsVUFBQSxXQUFBLFVBQUEsV0FBQSxjQUFBLFdBQUEsYUFBQSxXQUFBLE1BQUEsV0FBQSxRQUFBLFdBQUEsYUFBQSxXQUFBLE9BQUEsV0FBQSxPQUFBLFVBQUEsR0FBQSxLQUFBLFdBQUE7QUFBQSxtQkFBQW1HLEtBQUE7QUFBQSxnQkFBQXFhLEtBQUEsVUFBQSxTQUFBLEtBQUEsV0FBQSxVQUFBLENBQUEsSUFBQSxVQUFBLENBQUEsSUFBQTtBQUFB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QUFBLGtCQUFBLFlBQUFBLEVBQUE7WUFBQTtBQUFBLGlCQUFBLGVBQUEsWUFBQSxhQUFBLEtBQUEsYUFBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsV0FBQSxZQUFBLGVBQUEsS0FBQSxnQkFBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsY0FBQSxZQUFBLGtCQUFBLEtBQUEsV0FBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsU0FBQSxZQUFBLGFBQUEsS0FBQSxlQUFBLFNBQUEsY0FBQSxPQUFBO0FBQUEsZ0JBQUE7QUFBQSxtQkFBQSxhQUFBLE9BQUEsU0FBQSxLQUFBLGFBQUEsTUFBQSxLQUFBLEtBQUEsYUFBQSxNQUFBO1lBQUEsU0FBQTBELElBQUE7WUFBQTtBQUFBLGlCQUFBLGFBQUEsUUFBQSxPQUFBLEtBQUEsYUFBQSxZQUFBLGFBQUEsS0FBQSxrQkFBQSxTQUFBLGNBQUEsT0FBQTtBQUFBLGdCQUFBO0FBQUEsbUJBQUEsZ0JBQUEsT0FBQSxTQUFBLEtBQUEsZ0JBQUEsTUFBQSxLQUFBLEtBQUEsZ0JBQUEsTUFBQTtZQUFBLFNBQUFBLElBQUE7WUFBQTtBQUFBLGlCQUFBLGdCQUFBLFFBQUEsT0FBQSxLQUFBLGdCQUFBLFlBQUEsYUFBQSxLQUFBLFdBQUEsWUFBQSxLQUFBLFlBQUEsR0FBQSxLQUFBLGNBQUEsWUFBQSxLQUFBLGVBQUE7QUFBQSxnQkFBQUosS0FBQTtBQUFBLGlCQUFBLGFBQUEsV0FBQSxXQUFBO0FBQUEsY0FBQUEsR0FBQSxZQUFBLEtBQUEsS0FBQTtZQUFBLEdBQUEsS0FBQSxhQUFBLFVBQUEsV0FBQTtBQUFBLGNBQUFBLEdBQUEsWUFBQSxLQUFBLEtBQUE7WUFBQSxHQUFBLEtBQUEsZ0JBQUEsV0FBQSxXQUFBO0FBQUEsY0FBQUEsR0FBQSxlQUFBLEtBQUEsS0FBQTtZQUFBLEdBQUEsS0FBQSxnQkFBQSxVQUFBLFdBQUE7QUFBQSxjQUFBQSxHQUFBLGVBQUEsS0FBQSxLQUFBO1lBQUEsR0FBQSxLQUFBLGtCQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxnQkFBQSxZQUFBLDRCQUFBLEtBQUEsZ0JBQUEsWUFBQSxlQUFBLEtBQUEsZUFBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsYUFBQSxZQUFBLHlCQUFBLEtBQUEsYUFBQSxZQUFBLFlBQUEsS0FBQSxjQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxZQUFBLFlBQUEsaUJBQUEsS0FBQSxZQUFBLFlBQUEsT0FBQSxLQUFBLGtCQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxnQkFBQSxZQUFBLHFCQUFBLEtBQUEsZ0JBQUEsWUFBQSxXQUFBLEtBQUEsZUFBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsYUFBQSxZQUFBLHlCQUFBLEtBQUEsYUFBQSxZQUFBLFVBQUEsS0FBQSxhQUFBLFVBQUEsR0FBQUksS0FBQSxLQUFBLEtBQUEsRUFBQSxLQUFBQSxJQUFBLE1BQUEsS0FBQSxHQUFBLEtBQUEsY0FBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsWUFBQSxZQUFBLHdCQUFBLEtBQUEsWUFBQSxZQUFBLFNBQUEsS0FBQSxZQUFBLFVBQUEsR0FBQXFhLEtBQUEsS0FBQSxNQUFBLEVBQUEsS0FBQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxhQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxXQUFBLFlBQUEsdUJBQUEsS0FBQSxXQUFBLFlBQUEsUUFBQSxLQUFBLFdBQUEsVUFBQSxHQUFBeGdCLEtBQUEsS0FBQSxLQUFBLEVBQUEsS0FBQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxhQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxXQUFBLFlBQUEsdUJBQUEsS0FBQSxXQUFBLFlBQUEsYUFBQSxLQUFBLFdBQUEsVUFBQSxHQUFBdWUsS0FBQSxLQUFBLFNBQUEsRUFBQSxLQUFBQSxJQUFBLElBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLGNBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFFBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLGVBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLGFBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFlBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFVBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFdBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLGVBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFlBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFdBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFVBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFVBQUE7VUFBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLGVBQUEsT0FBQSxXQUFBO0FBQUEsZ0JBQUFwWSxLQUFBO0FBQUEsaUJBQUEsT0FBQSxDQUFBLEdBQUEsS0FBQSxRQUFBLENBQUEsR0FBQSxLQUFBLFNBQUEsSUFBQSxHQUFBLEtBQUEsaUJBQUEsR0FBQSxLQUFBLE9BQUEsSUFBQSxPQUFBLEVBQUEsSUFBQSxFQUFBLFFBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxPQUFBLEdBQUEsZ0JBQUEsU0FBQXFhLElBQUE7QUFBQSxjQUFBQSxHQUFBLFdBQUFyYSxHQUFBLGNBQUFxYSxFQUFBO1lBQUEsQ0FBQSxHQUFBLEtBQUEsT0FBQSxHQUFBLE9BQUEsU0FBQUEsSUFBQTtBQUFBLGNBQUFyYSxHQUFBLGNBQUFxYSxFQUFBO1lBQUEsQ0FBQSxHQUFBLEtBQUEsT0FBQSxHQUFBLFlBQUEsU0FBQUEsSUFBQTtBQUFBLGNBQUFyYSxHQUFBLGNBQUFxYSxFQUFBO1lBQUEsQ0FBQSxHQUFBLEtBQUEsT0FBQSxHQUFBLFdBQUEsU0FBQUEsSUFBQTtBQUFBLGNBQUFyYSxHQUFBLGNBQUFxYSxFQUFBO1lBQUEsQ0FBQSxHQUFBLEtBQUEsT0FBQSxHQUFBLFVBQUEsU0FBQUEsSUFBQTtBQUFBLGNBQUFyYSxHQUFBLGNBQUFxYSxFQUFBO1lBQUEsQ0FBQTtVQUFBLEVBQUEsR0FBQSxFQUFBLEtBQUEsc0JBQUEsT0FBQSxXQUFBO0FBQUEsZ0JBQUEsVUFBQSxLQUFBLFdBQUE7QUFBQSxr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LFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRzFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FHMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRzFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0Qs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QUFBQSxjQUFBQSxDQUFBQSxJQUFBQTtBQUFBQSxnQkFBQUEsR0FBQUEsRUFBQUEsTUFBQUEsS0FBQUEsU0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsa0JBQUFBO0FBQUFBLGtCQUFBQSxDQUFBQTtBQUFBQTtBQUFBQSxrQkFBQUEsWUFBQUEsT0FBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLElBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxPQUFBQSxVQUFBQSxTQUFBQSxLQUFBQSxFQUFBQSxDQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSwyQkFBQUEsTUFBQUEsR0FBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLFlBQUFBO0FBQUFBLGtCQUFBQSxVQUFBQSxNQUFBQSxVQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsa0JBQUFBLGdCQUFBQSxNQUFBQSwyQ0FBQUEsS0FBQUEsRUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLElBQUFBLEVBQUFBO1lBQUFBLEVBQUFBLEVBQUFBLE1BQUFBLE1BQUFBLE1BQUFBLFlBQUFBLE9BQUFBLEdBQUFBLFFBQUFBO0FBQUFBLGNBQUFBLE9BQUFBLEtBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxXQUFBQTtjQUFBQTtBQUFBQSxxQkFBQUEsRUFBQUEsR0FBQUEsSUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsdUJBQUFBLE1BQUFBLEdBQUFBLFNBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLElBQUFBLEVBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLEdBQUFBLElBQUFBLEVBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHNCQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtZQUFBQTtBQUFBQSxrQkFBQUEsSUFBQUEsVUFBQUEsdUlBQUFBO1VBQUFBO0FBQUFBLGNBQUFBLElBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO0FBQUFBLGlCQUFBQSxFQUFBQSxHQUFBQSxXQUFBQTtBQUFB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QSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsV0FBQUEsTUFBQUEsR0FBQUEsRUFBQUEsS0FBQUEsR0FBQUEsWUFBQUE7QUFBQUEsY0FBQUEsQ0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLFNBQUFBLElBQUFBLElBQUFBO0FBQUFBLGtCQUFBQTtBQUFBQSxrQkFBQUEsQ0FBQUE7QUFBQUE7QUFBQUEsa0JBQUFBLFlBQUFBLE9BQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsT0FBQUEsVUFBQUEsU0FBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsMkJBQUFBLE1BQUFBLEdBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtBQUFBQSxrQkFBQUEsVUFBQUEsTUFBQUEsVUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxnQkFBQUEsTUFBQUEsMkNBQUFBLEtBQUFBLEVBQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtZQUFBQSxFQUFBQSxFQUFBQSxNQUFBQSxNQUFBQSxNQUFBQSxZQUFBQSxPQUFBQSxHQUFBQSxRQUFBQTtBQUFBQSxjQUFBQSxPQUFBQSxLQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsV0FBQUE7Y0FBQUE7QUFBQUEscUJBQUFBLEVBQUFBLEdBQUFBLElBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLHVCQUFBQSxNQUFBQSxHQUFBQSxTQUFBQSxFQUFBQSxNQUFBQSxLQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxzQkFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7WUFBQUE7QUFBQUEsa0JBQUFBLElBQUFBLFVB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LElBQUFBLEdBQUFBLElBQUFBLEVBQUFBLENBQUFBO1lBQUFBLENBQUFBO1VBQUFBO0FBQUFBLGlCQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsV0FBQUEsTUFBQUEsR0FBQUEsRUFBQUEsS0FBQUEsR0FBQUEsWUFBQUE7QUFBQUEsY0FBQUEsQ0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLFNBQUFBLElBQUFBLElBQUFBO0FBQUFBLGtCQUFBQTtBQUFBQSxrQkFBQUEsQ0FBQUE7QUFBQUE7QUFBQUEsa0JBQUFBLFlBQUFBLE9BQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsT0FBQUEsVUFBQUEsU0FBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsMkJBQUFBLE1BQUFBLEdBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtBQUFBQSxrQkFBQUEsVUFBQUEsTUFBQUEsVUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxnQkFBQUEsTUFBQUEsMkNBQUFBLEtBQUFBLEVBQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtZQUFBQSxFQUFBQSxFQUFBQSxNQUFBQSxNQUFBQSxNQUFBQSxZQUFBQSxPQUFBQSxHQUFBQSxRQUFBQTtBQUFBQSxjQUFBQSxPQUFBQSxLQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsV0FBQUE7Y0FBQUE7QUFBQUEscUJBQUFBLEVBQUFBLEdBQUFBLElBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLHVCQUFBQSxNQUFBQSxHQUFBQSxTQUFBQSxFQUFBQSxNQUFBQSxLQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxzQkFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7WUFBQUE7QUFBQUEsa0JBQUFBLElBQUFBLFVBQUFBLHVJQUFBQTtVQUFBQTtBQUFBQSxjQUFBQSxJQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtBQUFBQSxpQkFBQUEsRUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsWUFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsRUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxNQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUE7QUFBQUEsY0FBQUEsTUFBQUEsUUFBQUEsR0FBQUEsVUFBQUEsR0FBQUEsT0FBQUE7WUFBQUEsVUFBQUE7QUFBQUEsa0JBQUFBO0FBQUFBLHNCQUFBQTtZQUFBQTtVQUFBQSxFQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsV0FBQUEsUUFBQUEsTUFBQUEsS0FBQUEsR0FBQUEsWUFBQUEsS0FBQUEsR0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLElBQUFBLE1BQUFBLEVBQUFBLEdBQUFBLEtBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEdBQUFBLEVBQUFBLElBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGlCQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLGVBQUFBLE9BQUFBLFdBQUFBLENBQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsR0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxjQUFBQSxPQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBO0FBQUFBLHFCQUFBQSxRQUFBQSxVQUFBQSxRQUFBQSxLQUFBQSxHQUFBQSxTQUFBQSxDQUFBQSxHQUFBQSxXQUFBQTtjQUFBQSxDQUFBQSxDQUFBQSxHQUFBQTtZQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxxQkFBQUE7WUFBQUE7VUFBQUEsRUFBQUE7QUFBQUEsaUJBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQSxLQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLElBQUFBLEVBQUFBO0FBQUFBLGNBQUFBLEtBQUFBLEdBQUFBLElBQUFBLFdBQUFBLEVBQUFBO1lBQUFBO0FBQUFBLGNBQUFBLEtBQUFBLEdBQUFBLE1BQUFBLE1BQUFBLFNBQUFBO0FBQUFBLG1CQUFBQSxHQUFBQSxNQUFBQSxFQUFBQTtVQUFBQTtRQUFBQTtBQ3BMVW9DLFlBQUFBLEtBQUFBLFNBSVhDLElBQUFBO0FBQUE3WSxhQUFBNFksSUFBQUMsRUFBQUE7QUFBQSxjQUFBL2IsS0FBQWdjLEdBQUFGLEVBQUFBO0FBZ0NBLG1CQUFBQSxHQUNFcDRDLElBQ0ErQixJQUFBQTtBQUF1QyxnQkFBQXF3QjtBQW9CZCxtQkFwQmM3OEIsRUFBQUEsTUFBQTZpRCxFQUFBQSxHQUl2Q2w4QixHQUFBMEwsR0FGQXdLLEtBQUFrSyxHQUFBcmxDLEtBQUFkLElBQUFBLENBQUFBLEdBQUFBLFVBckJtQyxJQUFBLEdBd0IvQjZKLE1BQUFBLENBQVM4aUIsR0FBYzlpQixFQUFBQSxNQUN6QitCLEtBQVUvQixJQUNWQSxLQUFPLENBQUEsSUFHVG95QixHQUFLbW1CLFdBQVd4MkMsTUFBVyxDQUFBLEdBQzNCcXdCLEdBQUtvbUIsUUFBUSxJQUFBL0MsTUFDYnJqQixHQUFLeDNCLFNBQVMsR0FDZHczQixHQUFLcW1CLFVBQVVybUIsR0FBS21tQixTQUFTRyxXQUFZLE1BR3JDMTRDLE1BQVFBLEdBQUtwRixVQUNmdzNCLEdBQUtuVCxJQUFJamYsRUFBQUEsR0FHWG95QixHQUFLa2hCLFdBQVd2eEMsRUFBQUEsR0FBU3F3QjtVQUMzQjtBQXc1QkMsaUJBdDVCRHJXLEdBQUFxOEIsSUFBQSxDQUFBLEVBQUExN0MsS0FBQSxVQUFBakUsS0FqREEsV0FBQTtBQUNFLG1CQUFPdEMsS0FBS3NpRDtVQUNkLEVBQUEsR0FBQyxFQUFBLzdDLEtBQUEsY0FBQWxELE9Bb0RNLFNBQVd1SSxJQUFBQTtBQUNaQSxZQUFBQSxNQUFBQSxXQUFXQSxHQUFRbWhDLFVBQUFBLFVBQ2pCbmhDLEdBQVFtaEMsUUFFTi9zQyxLQUFLeTlDLFdBQ1B6OUMsS0FBS3k5QyxPQUFPeGlCLFFBQUFBLEdBQ1pqN0IsS0FBS3k5QyxTQUFTLFNBSVh6OUMsS0FBS3k5QyxXQUNSejlDLEtBQUt5OUMsU0FBU3pQLEdBQU1ySSxPQUFPM2xDLE1BQU0sRUFDL0JrSyxTQUFTLENBQUMsT0FBTyxVQUFVLFFBQUEsRUFBQSxDQUFBLElBSTNCMEIsR0FBUW1oQyxTQUFrQyxZQUFBLE9BQWxCbmhDLEdBQVFtaEMsU0FDbEMvc0MsS0FBS3k5QyxPQUFPTixXQUFXdnhDLEdBQVFtaEMsS0FBQUE7VUFJdkMsRUFBQSxHQUVBLEVBQUF4bUMsS0FBQSxPQUFBbEQsT0EwQk8sU0FBSXdHLElBQXFCaTBDLElBQUFBO0FBQW9CLGdCQUU5QzEyQyxJQUY4Q202QixLQUFBdmhDLE1BQzVDd2lELEtBQWlCLENBQUE7QUFHdkIsZ0JBQUk3MUIsR0FBYzlpQixFQUFBQSxHQUFPO0FBRXZCLGtCQUFNNDRDLEtBQWlCdDRCLEdBQUF0Z0IsRUFBQUEsRUFBSS9JLEtBQUorSSxJQUFTLFNBQUM2NEMsSUFBQUE7QUFBQyx1QkFBS0EsR0FBRW5oQixHQUFLK2dCLE9BQUFBO2NBQUFBLENBQUFBO0FBQzlDLGtCQUFJSyxHQUFBRixFQUFBQSxFQUFRM2hELEtBQVIyaEQsSUFBYyxTQUFDcjdDLElBQUFBO0FBQUUsdUJBQUttNkIsR0FBSzhnQixNQUFNL3NDLElBQUlsTyxFQUFBQTtjQUFHLENBQUE7QUFDMUMsc0JBQU0sSUFBSWsrQixNQUFNLGtEQUFBO0FBRWxCLHVCQUFTMTBCLEtBQUksR0FBR0UsS0FBTWpILEdBQUtwRixRQUFRbU0sS0FBSUUsSUFBS0Y7QUFDMUN4SixnQkFBQUEsS0FBS3BILEtBQUs0aUQsU0FBUy80QyxHQUFLK0csRUFBQUEsQ0FBQUEsR0FDeEI0eEMsR0FBUzU3QyxLQUFLUSxFQUFBQTtZQUVqQixPQUFNO0FBQUEsa0JBQUEsQ0FBSXlDLE1BQXdCLFlBQUEsT0FBVEE7QUFLeEIsc0JBQU0sSUFBSXk3QixNQUFNLGtCQUFBO0FBSGhCbCtCLGNBQUFBLEtBQUtwSCxLQUFLNGlELFNBQVMvNEMsRUFBQUEsR0FDbkIyNEMsR0FBUzU3QyxLQUFLUSxFQUFBQTtZQUdmO0FBTUQsbUJBSklvN0MsR0FBUy85QyxVQUNYekUsS0FBSzZpRCxTQUFTLE9BQU8sRUFBRXA1QixPQUFPKzRCLEdBQUFBLEdBQVkxRSxFQUFBQSxHQUdyQzBFO1VBQ1QsRUFBQSxHQUVBLEVBQUFqOEMsS0FBQSxVQUFBbEQsT0FrQ08sU0FDTHdHLElBQ0FpMEMsSUFBQUE7QUFBb0IsZ0JBQUFoYyxLQUFBOWhDLE1BRWR3aUQsS0FBaUIsQ0FBQSxHQUNqQk0sS0FBbUIsQ0FBQSxHQUNuQi80QixLQUFvQyxDQUFBLEdBQ3BDZzVCLEtBQXdDLENBQUEsR0FDeENDLEtBQVNoakQsS0FBS3NpRCxTQUVkVyxLQUFjLFNBQUNuM0IsSUFBQUE7QUFDbkIsa0JBQU1vM0IsS0FBZ0JwM0IsR0FBS2szQixFQUFBQTtBQUMzQixrQkFBYyxRQUFWRSxNQUFrQnBoQixHQUFLdWdCLE1BQU0vc0MsSUFBSTR0QyxFQUFBQSxHQUFTO0FBQzVDLG9CQUFNQyxLQUFXcjNCLElBQ1hzM0IsS0FBVUMsR0FBYyxDQUFBLEdBQUl2aEIsR0FBS3VnQixNQUFNLy9DLElBQUk0Z0QsRUFBQUEsQ0FBQUEsR0FFM0M5N0MsS0FBSzA2QixHQUFLd2hCLFlBQVlILEVBQUFBO0FBQzVCTCxnQkFBQUEsR0FBV2w4QyxLQUFLUSxFQUFBQSxHQUNoQjI3QyxHQUFZbjhDLEtBQUt1OEMsRUFBQUEsR0FDakJwNUIsR0FBUW5qQixLQUFLdzhDLEVBQUFBO2NBQ2QsT0FBTTtBQUVMLG9CQUFNaDhDLEtBQUswNkIsR0FBSzhnQixTQUFTOTJCLEVBQUFBO0FBQ3pCMDJCLGdCQUFBQSxHQUFTNTdDLEtBQUtRLEVBQUFBO2NBQ2Y7WUFBQTtBQUdILGdCQUFJdWxCLEdBQWM5aUIsRUFBQUE7QUFFaEIsdUJBQVMrRyxLQUFJLEdBQUdFLEtBQU1qSCxHQUFLcEYsUUFBUW1NLEtBQUlFLElBQUtGO0FBQ3RDL0csZ0JBQUFBLEdBQUsrRyxFQUFBQSxLQUF5QixZQUFBLE9BQVovRyxHQUFLK0csRUFBQUEsSUFDekJxeUMsR0FBWXA1QyxHQUFLK0csRUFBQUEsQ0FBQUEsSUFFakI2MEIsUUFBUUMsS0FDTiwwREFBMEQ5MEIsRUFBQUE7aUJBSTNEO0FBQUEsa0JBQUEsQ0FBSS9HLE1BQXdCLFlBQUEsT0FBVEE7QUFJeEIsc0JBQU0sSUFBSXk3QixNQUFNLGtCQUFBO0FBRmhCMmQsY0FBQUEsR0FBWXA1QyxFQUFBQTtZQUdiO0FBS0QsZ0JBSEkyNEMsR0FBUy85QyxVQUNYekUsS0FBSzZpRCxTQUFTLE9BQU8sRUFBRXA1QixPQUFPKzRCLEdBQUFBLEdBQVkxRSxFQUFBQSxHQUV4Q2dGLEdBQVdyK0MsUUFBUTtBQUNyQixrQkFBTThOLEtBQVEsRUFBRWtYLE9BQU9xNUIsSUFBWS80QixTQUFTQSxJQUFTbGdCLE1BQU1rNUMsR0FBQUE7QUFRM0QvaUQsbUJBQUs2aUQsU0FBUyxVQUFVdHdDLElBQU91ckMsRUFBQUE7WUFDaEM7QUFFRCxtQkFBT2xXLEdBQUE0YSxFQUFBQSxFQUFRMWhELEtBQVIwaEQsSUFBZ0JNLEVBQUFBO1VBQ3pCLEVBQUEsR0FFQSxFQUFBdjhDLEtBQUEsY0FBQWxELE9Ba0NPLFNBQ0x3RyxJQUNBaTBDLElBQUFBO0FBQW9CLGdCQUFBbjFCLElBQUE0NkIsS0FBQXZqRDtBQUVmMnNCLGVBQWM5aUIsRUFBQUEsTUFDakJBLEtBQU8sQ0FBQ0EsRUFBQUE7QUFHVixnQkFBTTI1QyxLQUFrQnI1QixHQUFBeEIsS0FBQXdCLEdBQUF0Z0IsRUFBQUEsRUFBSS9JLEtBQUorSSxJQUVwQixTQUNFc2YsSUFBQUE7QUFLQSxrQkFBTVksS0FBVXc1QixHQUFLbEIsTUFBTS8vQyxJQUFJNm1CLEdBQU9vNkIsR0FBS2pCLE9BQUFBLENBQUFBO0FBQzNDLGtCQUFlLFFBQVh2NEI7QUFDRixzQkFBTSxJQUFJdWIsTUFBTSw2Q0FBQTtBQUVsQixxQkFBTyxFQUFFdmIsU0FBQUEsSUFBU1osUUFBQUEsR0FBQUE7WUFDbkIsQ0FBQSxDQUFBLEVBQ0Zyb0IsS0FBQTZuQixJQUVDLFNBQUE4NEIsSUFBQUE7QUFPSSxrQkFORjEzQixLQUFPMDNCLEdBQVAxM0IsU0FDQVosS0FBTXM0QixHQUFOdDRCLFFBTU0vaEIsS0FBSzJpQixHQUFRdzVCLEdBQUtqQixPQUFBQSxHQUNsQlMsS0FBQUEsU25IN1pkL2MsSUFBQUE7QUFDMkIseUJBQUFyZCxJQUFBNDBCLEtBQUF0OEMsVUFBQXdELFFBQXhCZy9DLEtBQUFBLElBQXdCbjJDLE1BQUFpd0MsS0FBQUEsSUFBQUEsS0FBQUEsSUFBQUEsQ0FBQUEsR0FBQUMsS0FBQSxHQUFBQSxLQUFBRCxJQUFBQztBQUF4QmlHLGtCQUFBQSxHQUF3QmpHLEtBQUF2OEMsQ0FBQUEsSUFBQUEsVUFBQXU4QyxFQUFBQTtBQUUzQix1QkFBT2xXLEdBQWdCem1DLE1BQUFBLFFBQUErbUMsR0FBQWpmLEtBQUEsQ0FBQyxDQUFBLEdBQVdxZCxFQUFBQSxDQUFBQSxFQUFJbGxDLEtBQUE2bkIsSUFBSzg2QixFQUFBQSxDQUFBQTtjQUM5QyxFbUh5Wm1EMTVCLElBQVNaLEVBQUFBO0FBSWxELHFCQUZBbzZCLEdBQUtsQixNQUFNaHRDLElBQUlqTyxJQUFJMjdDLEVBQUFBLEdBRVosRUFDTDM3QyxJQUFBQSxJQUNBMmlCLFNBQVNBLElBQ1RnNUIsYUFBQUEsR0FBQUE7WUFFSixDQUFBO0FBR0osZ0JBQUlTLEdBQWdCLytDLFFBQVE7QUFDMUIsa0JBQU04TixLQUErQyxFQUNuRGtYLE9BQU9VLEdBQUFxNUIsRUFBQUEsRUFBZTFpRCxLQUFmMGlELElBQW9CLFNBQUNuZ0QsSUFBQUE7QUFBSyx1QkFBU0EsR0FBTStEO2NBQUFBLENBQUFBLEdBQ2hEMmlCLFNBQVNJLEdBQUFxNUIsRUFBQUEsRUFBZTFpRCxLQUFmMGlELElBQ1AsU0FBQ25nRCxJQUFBQTtBQUFLLHVCQUE2QkEsR0FBTTBtQjtjQUFBQSxDQUFBQSxHQUUzQ2xnQixNQUFNc2dCLEdBQUFxNUIsRUFBQUEsRUFBZTFpRCxLQUFmMGlELElBQ0osU0FBQ25nRCxJQUFBQTtBQUFLLHVCQUE2QkEsR0FBTTAvQztjQUFXLENBQUEsRUFBQTtBQVl4RCxxQkFGQS9pRCxLQUFLNmlELFNBQVMsVUFBVXR3QyxJQUFPdXJDLEVBQUFBLEdBRXhCdnJDLEdBQU1rWDtZQUNkO0FBQ0MsbUJBQU8sQ0FBQTtVQUVYLEVBQUEsR0E0REEsRUFBQWxqQixLQUFBLE9BQUFsRCxPQUNPLFNBQ0xvaEIsSUFDQUMsSUFBQUE7QUFTQSxnQkFBSXRkLEtBQUFBLFFBQ0FzOEMsS0FBQUEsUUFDQTkzQyxLQUFBQTtBQUNBb3hDLGVBQUt2NEIsRUFBQUEsS0FFUHJkLEtBQUtxZCxJQUNMN1ksS0FBVThZLE1BQ0RpSSxHQUFjbEksRUFBQUEsS0FFdkJpL0IsS0FBTWovQixJQUNON1ksS0FBVThZLE1BR1Y5WSxLQUFVNlk7QUFJWixnQkFnRmtCay9CLElBaEZaQyxLQUNKaDRDLE1BQWtDLGFBQXZCQSxHQUFRZzRDLGFBQTBCLFdBQVcsU0FjcERsc0MsS0FBUzlMLE1BQU9zZSxHQUFJdGUsRUFBQUEsR0FDcEI2ZCxLQUFrQyxDQUFBLEdBQ3BDcUMsS0FBQUEsUUFDQSszQixLQUFBQSxRQUNBQyxLQUFBQTtBQUdKLGdCQUFVLFFBQU4xOEM7QUFBQUEsZUFFRjBrQixLQUFPOXJCLEtBQUtxaUQsTUFBTS8vQyxJQUFJOEUsRUFBQUEsTUFDVnNRLE1BQUFBLENBQVdBLEdBQU9vVSxFQUFBQSxNQUM1QkEsS0FBQUE7cUJBRWMsUUFBUDQzQjtBQUVULHVCQUFTOXlDLEtBQUksR0FBR0UsS0FBTTR5QyxHQUFJai9DLFFBQVFtTSxLQUFJRSxJQUFLRjtBQUU3Qix5QkFEWmtiLEtBQU85ckIsS0FBS3FpRCxNQUFNLy9DLElBQUlvaEQsR0FBSTl5QyxFQUFBQSxDQUFBQSxNQUNKOEcsTUFBQUEsQ0FBVUEsR0FBT29VLEVBQUFBLEtBQ3JDckMsR0FBTTdpQixLQUFLa2xCLEVBQUFBOztBQU1mLHVCQUhLbEQsSUFHSWhZLEtBQUksR0FBR0UsTUFEaEIreUMsS0FBT3oyQixHQUFPMjJCLEdBQUFuN0IsS0FBQTVvQixLQUFLcWlELEtBQUFBLEVBQUt2aEQsS0FBQThuQixFQUFBQSxDQUFBQSxHQUNNbmtCLFFBQVFtTSxLQUFJRSxJQUFLRjtBQUM3Q2t6QyxnQkFBQUEsS0FBU0QsR0FBUWp6QyxFQUFBQSxHQUVMLFNBRFprYixLQUFPOXJCLEtBQUtxaUQsTUFBTS8vQyxJQUFJd2hELEVBQUFBLE1BQ0Fwc0MsTUFBQUEsQ0FBVUEsR0FBT29VLEVBQUFBLEtBQ3JDckMsR0FBTTdpQixLQUFLa2xCLEVBQUFBO0FBV2pCLGdCQUxJbGdCLE1BQVdBLEdBQVFvNEMsU0FBZXAwQyxRQUFOeEksTUFDOUJwSCxLQUFLaWtELE1BQU14NkIsSUFBTzdkLEdBQVFvNEMsS0FBQUEsR0FJeEJwNEMsTUFBV0EsR0FBUXM0QyxRQUFRO0FBQzdCLGtCQUFNQSxLQUFTdDRDLEdBQVFzNEM7QUFDdkIsa0JBQVV0MEMsUUFBTnhJLE1BQTJCLFFBQVIwa0I7QUFDckJBLGdCQUFBQSxLQUFPOXJCLEtBQUtta0QsY0FBY3I0QixJQUFNbzRCLEVBQUFBOztBQUVoQyx5QkFBU3R6QyxLQUFJLEdBQUdFLEtBQU0yWSxHQUFNaGxCLFFBQVFtTSxLQUFJRSxJQUFLRjtBQUMzQzZZLGtCQUFBQSxHQUFNN1ksRUFBQUEsSUFBSzVRLEtBQUtta0QsY0FBYzE2QixHQUFNN1ksRUFBQUEsR0FBSXN6QyxFQUFBQTtZQU03QztBQUdELGdCQUFrQixZQUFkTixJQUF3QjtBQUUxQix1QkFETW43QyxLQUFpRCxDQUFBLEdBQzlDbUksS0FBSSxHQUFHRSxLQUFNMlksR0FBTWhsQixRQUFRbU0sS0FBSUUsSUFBS0YsTUFBSztBQUNoRCxvQkFBTXd6QyxLQUFZMzZCLEdBQU03WSxFQUFBQTtBQUl4Qm5JLGdCQUFBQSxHQURlMjdDLEdBQVVwa0QsS0FBS3NpRCxPQUFBQSxDQUFBQSxJQUNqQjhCO2NBQ2Q7QUFDRCxxQkFBTzM3QztZQUNSO0FBQ0MsbUJBQVUsUUFBTnJCLEtBRVMsVUFBWHU4QyxLQUFPNzNCLE9BQUFBLFdBQUk2M0IsS0FBQUEsS0FBSSxPQUdSbDZCO1VBR2IsRUFBQSxHQUVBLEVBQUFsakIsS0FBQSxVQUFBbEQsT0FDTyxTQUFPdUksSUFBQUE7QUFDWixnQkFBTS9CLEtBQU83SixLQUFLcWlELE9BQ1ozcUMsS0FBUzlMLE1BQU9zZSxHQUFJdGUsRUFBQUEsR0FDcEJvNEMsS0FBUXA0QyxNQUFXQSxHQUFRbzRDLE9BQzNCSCxLQUFPejJCLEdBQU8yMkIsR0FBQWw2QyxFQUFBQSxFQUFJL0ksS0FBSitJLEVBQUFBLENBQUFBLEdBQ2Q2NUMsS0FBWSxDQUFBO0FBRWxCLGdCQUFJaHNDO0FBRUYsa0JBQUlzc0MsSUFBTztBQUdULHlCQURNdjZCLEtBQVEsQ0FBQSxHQUNMN1ksS0FBSSxHQUFHRSxLQUFNK3lDLEdBQVFwL0MsUUFBUW1NLEtBQUlFLElBQUtGLE1BQUs7QUFDbEQsc0JBQU14SixLQUFLeThDLEdBQVFqekMsRUFBQUEsR0FDYmtiLEtBQU85ckIsS0FBS3FpRCxNQUFNLy9DLElBQUk4RSxFQUFBQTtBQUNoQiwwQkFBUjBrQixNQUFnQnBVLEdBQU9vVSxFQUFBQSxLQUN6QnJDLEdBQU03aUIsS0FBS2tsQixFQUFBQTtnQkFFZDtBQUVEOXJCLHFCQUFLaWtELE1BQU14NkIsSUFBT3U2QixFQUFBQTtBQUVsQix5QkFBU3B6QyxLQUFJLEdBQUdFLEtBQU0yWSxHQUFNaGxCLFFBQVFtTSxLQUFJRSxJQUFLRjtBQUMzQzh5QyxrQkFBQUEsR0FBSTk4QyxLQUFLNmlCLEdBQU03WSxFQUFBQSxFQUFHNVEsS0FBS3NpRCxPQUFBQSxDQUFBQTtjQUUxQjtBQUVDLHlCQUFTMXhDLEtBQUksR0FBR0UsS0FBTSt5QyxHQUFRcC9DLFFBQVFtTSxLQUFJRSxJQUFLRixNQUFLO0FBQ2xELHNCQUFNeEosS0FBS3k4QyxHQUFRanpDLEVBQUFBLEdBQ2JrYixLQUFPOXJCLEtBQUtxaUQsTUFBTS8vQyxJQUFJOEUsRUFBQUE7QUFDaEIsMEJBQVIwa0IsTUFBZ0JwVSxHQUFPb1UsRUFBQUEsS0FDekI0M0IsR0FBSTk4QyxLQUFLa2xCLEdBQUs5ckIsS0FBS3NpRCxPQUFBQSxDQUFBQTtnQkFFdEI7cUJBSUMwQixJQUFPO0FBR1QsdUJBRE12NkIsS0FBUSxDQUFBLEdBQ0w3WSxLQUFJLEdBQUdFLEtBQU0reUMsR0FBUXAvQyxRQUFRbU0sS0FBSUUsSUFBS0YsTUFBSztBQUNsRCxvQkFBTXhKLEtBQUt5OEMsR0FBUWp6QyxFQUFBQTtBQUNuQjZZLGdCQUFBQSxHQUFNN2lCLEtBQUtpRCxHQUFLdkgsSUFBSThFLEVBQUFBLENBQUFBO2NBQ3JCO0FBRURwSCxtQkFBS2lrRCxNQUFNeDZCLElBQU91NkIsRUFBQUE7QUFFbEIsdUJBQVNwekMsS0FBSSxHQUFHRSxLQUFNMlksR0FBTWhsQixRQUFRbU0sS0FBSUUsSUFBS0Y7QUFDM0M4eUMsZ0JBQUFBLEdBQUk5OEMsS0FBSzZpQixHQUFNN1ksRUFBQUEsRUFBRzVRLEtBQUtzaUQsT0FBQUEsQ0FBQUE7WUFFMUI7QUFFQyx1QkFBUzF4QyxLQUFJLEdBQUdFLEtBQU0reUMsR0FBUXAvQyxRQUFRbU0sS0FBSUUsSUFBS0YsTUFBSztBQUNsRCxvQkFBTXhKLEtBQUt5OEMsR0FBUWp6QyxFQUFBQSxHQUNia2IsS0FBT2ppQixHQUFLdkgsSUFBSThFLEVBQUFBO0FBQ1Ysd0JBQVIwa0IsTUFDRjQzQixHQUFJOThDLEtBQUtrbEIsR0FBSzlyQixLQUFLc2lELE9BQUFBLENBQUFBO2NBRXRCO0FBSUwsbUJBQU9vQjtVQUNULEVBQUEsR0FFQSxFQUFBbjlDLEtBQUEsY0FBQWxELE9BQ08sV0FBQTtBQUNMLG1CQUFPckQ7VUFDVCxFQUFBLEdBRUEsRUFBQXVHLEtBQUEsV0FBQWxELE9BQ08sU0FDTDRtQixJQUNBcmUsSUFBQUE7QUFFQSxnQkFBTThMLEtBQVM5TCxNQUFPc2UsR0FBSXRlLEVBQUFBLEdBQ3BCL0IsS0FBTzdKLEtBQUtxaUQsT0FDWndCLEtBQU96MkIsR0FBTzIyQixHQUFBbDZDLEVBQUFBLEVBQUkvSSxLQUFKK0ksRUFBQUEsQ0FBQUE7QUFFcEIsZ0JBQUkrQixNQUFXQSxHQUFRbzRDO0FBSXJCLHVCQUZNdjZCLEtBQWtDenBCLEtBQUtzQyxJQUFJc0osRUFBQUEsR0FFeENnRixLQUFJLEdBQUdFLEtBQU0yWSxHQUFNaGxCLFFBQVFtTSxLQUFJRSxJQUFLRixNQUFLO0FBQ2hELG9CQUFNa2IsS0FBT3JDLEdBQU03WSxFQUFBQTtBQUVuQnFaLGdCQUFBQSxHQUFTNkIsSUFERUEsR0FBSzlyQixLQUFLc2lELE9BQUFBLENBQUFBO2NBRXRCOztBQUdELHVCQUFTMXhDLEtBQUksR0FBR0UsS0FBTSt5QyxHQUFRcC9DLFFBQVFtTSxLQUFJRSxJQUFLRixNQUFLO0FBQ2xELG9CQUFNeEosS0FBS3k4QyxHQUFRanpDLEVBQUFBLEdBQ2JrYixLQUFPOXJCLEtBQUtxaUQsTUFBTS8vQyxJQUFJOEUsRUFBQUE7QUFDaEIsd0JBQVIwa0IsTUFBa0JwVSxNQUFBQSxDQUFVQSxHQUFPb1UsRUFBQUEsS0FDckM3QixHQUFTNkIsSUFBTTFrQixFQUFBQTtjQUVsQjtVQUVMLEVBQUEsR0FFQSxFQUFBYixLQUFBLE9BQUFsRCxPQUNPLFNBQ0w0bUIsSUFDQXJlLElBQUFBO0FBUUEscUJBTk04TCxLQUFTOUwsTUFBT3NlLEdBQUl0ZSxFQUFBQSxHQUNwQnk0QyxLQUFtQixDQUFBLEdBQ25CeDZDLEtBQU83SixLQUFLcWlELE9BQ1p3QixLQUFPejJCLEdBQU8yMkIsR0FBQWw2QyxFQUFBQSxFQUFJL0ksS0FBSitJLEVBQUFBLENBQUFBLEdBR1grRyxLQUFJLEdBQUdFLEtBQU0reUMsR0FBUXAvQyxRQUFRbU0sS0FBSUUsSUFBS0YsTUFBSztBQUNsRCxrQkFBTXhKLEtBQUt5OEMsR0FBUWp6QyxFQUFBQSxHQUNia2IsS0FBTzlyQixLQUFLcWlELE1BQU0vL0MsSUFBSThFLEVBQUFBO0FBQ2hCLHNCQUFSMGtCLE1BQWtCcFUsTUFBQUEsQ0FBVUEsR0FBT29VLEVBQUFBLEtBQ3JDdTRCLEdBQVl6OUMsS0FBS3FqQixHQUFTNkIsSUFBTTFrQixFQUFBQSxDQUFBQTtZQUVuQztBQU9ELG1CQUpJd0UsTUFBV0EsR0FBUW80QyxTQUNyQmhrRCxLQUFLaWtELE1BQU1JLElBQWF6NEMsR0FBUW80QyxLQUFBQSxHQUczQks7VUFDVCxFQUFBLEdBV0EsRUFBQTk5QyxLQUFBLGlCQUFBbEQsT0FRUSxTQUNOeW9CLElBQ0FvNEIsSUFBQUE7QUFBZ0MsZ0JBQUFyN0I7QUFFaEMsbUJBQUtpRCxLQUtFbkMsR0FBQWQsS0FDTDhELEdBQWN1M0IsRUFBQUEsSUFFVkEsS0FFQzNiLEdBQVkyYixFQUFBQSxDQUFBQSxFQUFlcGpELEtBQUErbkIsSUFFaEMsU0FBQ3k3QixJQUFjQyxJQUFBQTtBQUViLHFCQURBRCxHQUFhQyxFQUFBQSxJQUFTejRCLEdBQUt5NEIsRUFBQUEsR0FDcEJEO1lBQ1IsR0FDRCxDQUFFLENBQUEsSUFkS3g0QjtVQWdCWCxFQUFBLEdBRUEsRUFBQXZsQixLQUFBLFNBQUFsRCxPQU9RLFNBQVNvbUIsSUFBWXU2QixJQUFBQTtBQUMzQixnQkFBcUIsWUFBQSxPQUFWQSxJQUFvQjtBQUU3QixrQkFBTS83QyxLQUFPKzdDO0FBQ2J4QyxpQkFBQS8zQixFQUFBQSxFQUFLM29CLEtBQUwyb0IsSUFBVyxTQUFDemdCLElBQUd5QyxJQUFBQTtBQUViLG9CQUFNKzRDLEtBQU14N0MsR0FBVWYsRUFBQUEsR0FDaEJ3OEMsS0FBTWg1QyxHQUFVeEQsRUFBQUE7QUFDdEIsdUJBQU91OEMsS0FBS0MsS0FBSyxJQUFJRCxLQUFLQyxLQUFBQSxLQUFVO2NBQ3RDLENBQUE7WUFDRCxPQUFNO0FBQUEsa0JBQXFCLGNBQUEsT0FBVlQ7QUFNaEIsc0JBQU0sSUFBSXprRCxVQUFVLHNDQUFBO0FBSnBCaWlELGlCQUFBLzNCLEVBQUFBLEVBQUszb0IsS0FBTDJvQixJQUFXdTZCLEVBQUFBO1lBS1o7VUFDSCxFQUFBLEdBRUEsRUFBQXo5QyxLQUFBLFVBQUFsRCxPQTBCTyxTQUFPK0QsSUFBK0IwMkMsSUFBQUE7QUFPM0MscUJBTk00RyxLQUFtQixDQUFBLEdBQ25CQyxLQUF5QyxDQUFBLEdBR3pDakIsS0FBTS8yQixHQUFjdmxCLEVBQUFBLElBQU1BLEtBQUssQ0FBQ0EsRUFBQUEsR0FFN0J3SixLQUFJLEdBQUdFLEtBQU00eUMsR0FBSWovQyxRQUFRbU0sS0FBSUUsSUFBS0YsTUFBSztBQUM5QyxrQkFBTWtiLEtBQU85ckIsS0FBS2twQixRQUFRdzZCLEdBQUk5eUMsRUFBQUEsQ0FBQUE7QUFDOUIsa0JBQUlrYixJQUFNO0FBQ1Isb0JBQU1nNEIsS0FBZ0JoNEIsR0FBSzlyQixLQUFLc2lELE9BQUFBO0FBQ2xCLHdCQUFWd0IsT0FDRlksR0FBVzk5QyxLQUFLazlDLEVBQUFBLEdBQ2hCYSxHQUFhLzlDLEtBQUtrbEIsRUFBQUE7Y0FFckI7WUFDRjtBQVVELG1CQVJJNDRCLEdBQVdqZ0QsVUFDYnpFLEtBQUs2aUQsU0FDSCxVQUNBLEVBQUVwNUIsT0FBT2k3QixJQUFZMzZCLFNBQVM0NkIsR0FBQUEsR0FDOUI3RyxFQUFBQSxHQUlHNEc7VUFDVCxFQUFBLEdBRUEsRUFBQW4rQyxLQUFBLFdBQUFsRCxPQU1RLFNBQVErRCxJQUFBQTtBQUdkLGdCQUFJdzlDO0FBVUosZ0JBUEk1SCxHQUFLNTFDLEVBQUFBLElBQ1B3OUMsS0FBUXg5QyxLQUNDQSxNQUFvQixZQUFBLE9BQVBBLE9BQ3RCdzlDLEtBQVF4OUMsR0FBR3BILEtBQUtzaUQsT0FBQUEsSUFJTCxRQUFUc0MsTUFBaUI1a0QsS0FBS3FpRCxNQUFNL3NDLElBQUlzdkMsRUFBQUEsR0FBUTtBQUMxQyxrQkFBTTk0QixLQUFPOXJCLEtBQUtxaUQsTUFBTS8vQyxJQUFJc2lELEVBQUFBLEtBQVU7QUFHdEMscUJBRkE1a0QsS0FBS3FpRCxNQUFNNXhCLE9BQU9tMEIsRUFBQUEsR0FBQUEsRUFDaEI1a0QsS0FBS3lFLFFBQ0FxbkI7WUFDUjtBQUVELG1CQUFPO1VBQ1QsRUFBQSxHQUVBLEVBQUF2bEIsS0FBQSxTQUFBbEQsT0FRTyxTQUFNeTZDLElBQUFBO0FBSVgscUJBSitCcDBCLElBQ3pCZzZCLEtBQUd0MkIsR0FBTzIyQixHQUFBcjZCLEtBQUkxcEIsS0FBQ3FpRCxLQUFBQSxFQUFLdmhELEtBQUE0b0IsRUFBQUEsQ0FBQUEsR0FDcEJELEtBQWtDLENBQUEsR0FFL0I3WSxLQUFJLEdBQUdFLEtBQU00eUMsR0FBSWovQyxRQUFRbU0sS0FBSUUsSUFBS0Y7QUFDekM2WSxjQUFBQSxHQUFNN2lCLEtBQUs1RyxLQUFLcWlELE1BQU0vL0MsSUFBSW9oRCxHQUFJOXlDLEVBQUFBLENBQUFBLENBQUFBO0FBUWhDLG1CQUxBNVEsS0FBS3FpRCxNQUFNN3hCLE1BQUFBLEdBQ1h4d0IsS0FBS3lFLFNBQVMsR0FFZHpFLEtBQUs2aUQsU0FBUyxVQUFVLEVBQUVwNUIsT0FBT2k2QixJQUFLMzVCLFNBQVNOLEdBQUFBLEdBQVNxMEIsRUFBQUEsR0FFakQ0RjtVQUNULEVBQUEsR0FFQSxFQUFBbjlDLEtBQUEsT0FBQWxELE9BTU8sU0FBSWtoRCxJQUFBQTtBQUFpQixnQkFBQXZGLElBSVlqWCxJQUhsQzkyQixLQUFNLE1BQ040ekMsS0FBVyxNQUFLN2MsS0FBQUMsR0FFRDZjLEdBQUE5RixLQUFJaC9DLEtBQUNxaUQsS0FBQUEsRUFBS3ZoRCxLQUFBaytDLEVBQUFBLENBQUFBO0FBQVMsZ0JBQUE7QUFBdEMsbUJBQUFoWCxHQUFBRyxFQUFBQSxHQUFBQSxFQUFBSixLQUFBQyxHQUFBcjZCLEVBQUFBLEdBQUFzVCxRQUF3QztBQUFBLG9CQUE3QjZLLEtBQUlpYyxHQUFBMWtDLE9BQ1AwaEQsS0FBWWo1QixHQUFLeTRCLEVBQUFBO0FBRUEsNEJBQUEsT0FBZFEsT0FDTSxRQUFaRixNQUFvQkUsS0FBWUYsUUFFakM1ekMsS0FBTTZhLElBQ04rNEIsS0FBV0U7Y0FFZDtZQUFBLFNBQUExYyxJQUFBQTtBQUFBTCxjQUFBQSxHQUFBamIsRUFBQXNiLEVBQUFBO1lBQUEsVUFBQTtBQUFBTCxjQUFBQSxHQUFBbmxDLEVBQUFBO1lBQUE7QUFFRCxtQkFBT29PLE1BQU87VUFDaEIsRUFBQSxHQUVBLEVBQUExSyxLQUFBLE9BQUFsRCxPQU1PLFNBQUlraEQsSUFBQUE7QUFBaUIsZ0JBQUFyRixJQUlZVixJQUhsQzF3QyxLQUFNLE1BQ05rM0MsS0FBVyxNQUFLekcsS0FBQXRXLEdBRUQ2YyxHQUFBNUYsS0FBSWwvQyxLQUFDcWlELEtBQUFBLEVBQUt2aEQsS0FBQW8rQyxFQUFBQSxDQUFBQTtBQUFTLGdCQUFBO0FBQXRDLG1CQUFBWCxHQUFBcFcsRUFBQUEsR0FBQUEsRUFBQXFXLEtBQUFELEdBQUE1d0MsRUFBQUEsR0FBQXNULFFBQXdDO0FBQUEsb0JBQTdCNkssS0FBSTB5QixHQUFBbjdDLE9BQ1AwaEQsS0FBWWo1QixHQUFLeTRCLEVBQUFBO0FBRUEsNEJBQUEsT0FBZFEsT0FDTSxRQUFaQyxNQUFvQkQsS0FBWUMsUUFFakNsM0MsS0FBTWdlLElBQ05rNUIsS0FBV0Q7Y0FFZDtZQUFBLFNBQUExYyxJQUFBQTtBQUFBa1csY0FBQUEsR0FBQXh4QixFQUFBc2IsRUFBQUE7WUFBQSxVQUFBO0FBQUFrVyxjQUFBQSxHQUFBMTdDLEVBQUFBO1lBQUE7QUFFRCxtQkFBT2lMLE1BQU87VUFDaEIsRUFBQSxHQUlBLEVBQUF2SCxLQUFBLFlBQUFsRCxPQU1PLFNBQTJCbXZCLElBQUFBO0FBTWhDLHFCQUxNM29CLEtBQU83SixLQUFLcWlELE9BQ1p3QixLQUFPejJCLEdBQU8yMkIsR0FBQWw2QyxFQUFBQSxFQUFJL0ksS0FBSitJLEVBQUFBLENBQUFBLEdBQ2RrWCxLQUFvQixDQUFBLEdBQ3RCdWdCLEtBQVEsR0FFSDF3QixLQUFJLEdBQUdFLEtBQU0reUMsR0FBUXAvQyxRQUFRbU0sS0FBSUUsSUFBS0YsTUFBSztBQUtsRCx1QkFKTXhKLEtBQUt5OEMsR0FBUWp6QyxFQUFBQSxHQUVidk4sS0FET3dHLEdBQUt2SCxJQUFJOEUsRUFBQUEsRUFDTW9yQixFQUFBQSxHQUN4Qnl5QixLQUFBQSxPQUNLcm9DLEtBQUksR0FBR0EsS0FBSTBrQixJQUFPMWtCO0FBQ3pCLG9CQUFJbUUsR0FBT25FLEVBQUFBLEtBQU12WixJQUFPO0FBQ3RCNGhELGtCQUFBQSxLQUFBQTtBQUNBO2dCQUNEO0FBRUVBLGNBQUFBLE1BQUFBLFdBQVU1aEQsT0FDYjBkLEdBQU91Z0IsRUFBQUEsSUFBU2orQixJQUNoQmkrQjtZQUVIO0FBRUQsbUJBQU92Z0I7VUFDVCxFQUFBLEdBRUEsRUFBQXhhLEtBQUEsWUFBQWxELE9BTVEsU0FBU3lvQixJQUFBQTtBQUNmLGdCQUFNcTNCLEtBMTlCVixTQUNFcjNCLElBQ0FrM0IsSUFBQUE7QUFPQSxxQkFMb0IsUUFBaEJsM0IsR0FBS2szQixFQUFBQSxNQUVQbDNCLEdBQUtrM0IsRUFBQUEsSUFBVWtDLEdBQUFBLElBR1ZwNUI7WUFDVCxFQWc5Qm9DQSxJQUFNOXJCLEtBQUtzaUQsT0FBQUEsR0FDckNsN0MsS0FBSys3QyxHQUFTbmpELEtBQUtzaUQsT0FBQUE7QUFHekIsZ0JBQUl0aUQsS0FBS3FpRCxNQUFNL3NDLElBQUlsTyxFQUFBQTtBQUVqQixvQkFBTSxJQUFJaytCLE1BQ1IsbUNBQW1DbCtCLEtBQUssaUJBQUE7QUFPNUMsbUJBSEFwSCxLQUFLcWlELE1BQU1odEMsSUFBSWpPLElBQUkrN0MsRUFBQUEsR0FBQUEsRUFDakJuakQsS0FBS3lFLFFBRUEyQztVQUNULEVBQUEsR0FFQSxFQUFBYixLQUFBLGVBQUFsRCxPQU9RLFNBQVk4bEIsSUFBQUE7QUFDbEIsZ0JBQU0vaEIsS0FBWStoQixHQUFPbnBCLEtBQUtzaUQsT0FBQUE7QUFDOUIsZ0JBQVUsUUFBTmw3QztBQUNGLG9CQUFNLElBQUlrK0IsTUFDUiwrQ0FDRTZmLEdBQWVoOEIsRUFBQUEsSUFDZixHQUFBO0FBR04sZ0JBQU0yQyxLQUFPOXJCLEtBQUtxaUQsTUFBTS8vQyxJQUFJOEUsRUFBQUE7QUFDNUIsZ0JBQUEsQ0FBSzBrQjtBQUVILG9CQUFNLElBQUl3WixNQUFNLHlDQUF5Q2wrQixLQUFLLFFBQUE7QUFLaEUsbUJBRkFwSCxLQUFLcWlELE1BQU1odEMsSUFBSWpPLElBQUVnK0MsR0FBQUEsR0FBT3Q1QixDQUFBQSxHQUFBQSxFQUFBQSxHQUFTM0MsRUFBQUEsQ0FBQUEsR0FFMUIvaEI7VUFDVCxFQUFBLEdBRUEsRUFBQWIsS0FBQSxVQUFBbEQsT0FDTyxTQUFPcWdELElBQUFBO0FBQ1osZ0JBQUlBLElBQUs7QUFDUCxrQkFBTTc1QyxLQUFPN0osS0FBS3FpRDtBQUVsQixxQkFBTyxJQUFJbkUsR0FBaUIsRUFDMUI5NEIsQ0FBQUEsRUFBQUEsR0FBa0IsTUFBQTJ2QixHQUFBcUMsS0FBQSxTQUFBMEksS0FBQUE7QUFBQSxvQkFBQXBCLElBQUFDLElBQUF2M0MsSUFBQTBrQjtBQUFBLHVCQUFBaXBCLEdBQUFob0MsS0FBQSxTQUFBbXpDLElBQUFBO0FBQUE7QUFBQSw0QkFBQUEsR0FBQXZpQyxPQUFBdWlDLEdBQUF0aUMsTUFBQUE7c0JBQUEsS0FBQTtBQUFBOGdDLHdCQUFBQSxLQUFBelcsR0FDQ3liLEVBQUFBLEdBQUd4RCxHQUFBdmlDLE9BQUEsR0FBQStnQyxHQUFBdlcsRUFBQUE7c0JBQUEsS0FBQTtBQUFBLDZCQUFBd1csS0FBQUQsR0FBQS93QyxFQUFBQSxHQUFBc1QsTUFBQTtBQUFBaS9CLDBCQUFBQSxHQUFBdGlDLE9BQUE7QUFBQTt3QkFBQTtBQUNPLDRCQURoQnhXLEtBQUV1M0MsR0FBQXQ3QyxPQUVDLFNBRE55b0IsS0FBT2ppQixHQUFLdkgsSUFBSThFLEVBQUFBLElBQ047QUFBQTg0QywwQkFBQUEsR0FBQXRpQyxPQUFBO0FBQUE7d0JBQUE7QUFDZCwrQkFEY3NpQyxHQUFBdGlDLE9BQUEsR0FDUixDQUFDeFcsSUFBSTBrQixFQUFBQTtzQkFBSyxLQUFBO0FBQUFvMEIsd0JBQUFBLEdBQUF0aUMsT0FBQTtBQUFBO3NCQUFBLEtBQUE7QUFBQXNpQyx3QkFBQUEsR0FBQXRpQyxPQUFBO0FBQUE7c0JBQUEsS0FBQTtBQUFBc2lDLHdCQUFBQSxHQUFBdmlDLE9BQUEsSUFBQXVpQyxHQUFBNUIsS0FBQTRCLEdBQUEsTUFBQSxDQUFBLEdBQUF4QixHQUFBM3hCLEVBQUFtekIsR0FBQTVCLEVBQUFBO3NCQUFBLEtBQUE7QUFBQSwrQkFBQTRCLEdBQUF2aUMsT0FBQSxJQUFBK2dDLEdBQUE3N0MsRUFBQUEsR0FBQXE5QyxHQUFBdkksT0FBQSxFQUFBO3NCQUFBLEtBQUE7c0JBQUEsS0FBQTtBQUFBLCtCQUFBdUksR0FBQWhjLEtBQUFBO29CQUFBQTtnQkFBQSxHQUFBNGIsSUFBQSxNQUFBLENBQUEsQ0FBQSxHQUFBLElBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQTtjQUFBLENBQUEsRUFKSi9LLEVBQUFBLENBQUFBO1lBU3JCO0FBQU0sZ0JBQUEyTDtBQUNMLG1CQUFPLElBQUl4QyxHQUFXLEVBQ3BCOTRCLENBQUFBLEVBQUFBLEdBQW1CMkQsR0FBQTIzQixLQUFBMkUsR0FBQXJsRCxLQUFLcWlELEtBQUFBLENBQUFBLEVBQUt2aEQsS0FBQTQvQyxJQUFjMWdELEtBQUtxaUQsS0FBQUEsRUFBQUEsQ0FBQUE7VUFHdEQsRUFBQSxDQUFBLENBQUEsR0FBQ0o7UUFBQSxFQS84Qk9wRSxFQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsV0FBQUEsTUFBQUEsR0FBQUEsRUFBQUEsS0FBQUEsR0FBQUEsWUFBQUE7QUFBQUEsY0FBQUEsQ0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLFNBQUFBLElBQUFBLElBQUFBO0FBQUFBLGtCQUFBQTtBQUFBQSxrQkFBQUEsQ0FBQUE7QUFBQUE7QUFBQUEsa0JBQUFBLFlBQUFBLE9BQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsT0FBQUEsVUFBQUEsU0FBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsMkJBQUFBLE1BQUFBLEdBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtBQUFBQSxrQkFBQUEsVUFBQUEsTUFBQUEsVUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxnQkFBQUEsTUFBQUEsMkNBQUFBLEtBQUFBLEVBQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtZQUFBQSxFQUFBQSxFQUFBQSxNQUFBQSxNQUFBQSxNQUFBQSxZQUFBQSxPQUFBQSxHQUFBQSxRQUFBQTtBQUFBQSxjQUFBQSxPQUFBQSxLQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsV0FBQUE7Y0FBQUE7QUFBQUEscUJBQUFBLEVBQUFBLEdBQUFBLElBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLHVCQUFBQSxNQUFBQSxHQUFBQSxTQUFBQSxFQUFBQSxNQUFBQSxLQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxzQkFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7WUFBQUE7QUFBQUEsa0JBQUFBLElBQUFBLFVBQUFBLHVJQUFBQTtVQUFBQTtBQUFBQSxjQUFBQSxJQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtBQUFBQSxpQkFBQUEsRUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsWUFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsRUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxNQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUE7QUFBQUEsY0FBQUEsTUFBQUEsUUFBQUEsR0FBQUEsVUFBQUEsR0FBQUEsT0FBQUE7WUFBQUEsVUFBQUE7QUFBQUEsa0JBQUFBO0FB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VztBQUFBLElBQ1gsY0FBYztBQUFBLElBQ2QsZ0JBQWdCO0FBQUEsSUFDaEIsYUFBYTtBQUFBLElBQ2IsaUJBQWlCO0FBQUEsSUFDakIsUUFBUTtBQUFBLElBQ1IsaUJBQWlCO0FBQUEsSUFDakIsa0JBQWtCO0FBQUEsSUFDbEIsT0FBTztBQUFBLElBQ1AsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLElBQ2IsVUFBVTtBQUFBLElBQ1YsUUFBUTtBQUFBLElBQ1IsbUJBQW1CO0FBQUEsSUFDbkIsbUJBQW1CO0FBQUEsSUFDbkIsWUFBWTtBQUFBLElBQ1osY0FBYztBQUFBLElBQ2QsaUJBQWlCO0FBQUEsSUFDakIsV0FBVztBQUFBLElBQ1gsVUFBVTtBQUFBLElBQ1Ysa0JBQWtCO0FBQUEsSUFDbEIsZUFBZTtBQUFBLElBQ2YsNkJBQTZCO0FBQUEsSUFDN0IsZ0JBQWdCO0FBQUEsSUFDaEIsVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sZ0JBQWdCO0FBQUEsSUFDaEIsb0JBQW9CO0FBQUEsSUFDcEIsaUJBQWlCO0FBQUEsSUFDakIsWUFBWTtBQUFBLElBQ1osc0JBQXNCO0FBQUEsSUFDdEIscUJBQXFCO0FBQUEsSUFDckIsbUJBQW1CO0FBQUEsSUFDbkIsV0FBVztBQUFBLElBQ1gsb0JBQW9CO0FBQUEsSUFDcEIscUJBQXFCO0FBQUEsSUFDckIsUUFBUTtBQUFBLElBQ1Isa0JBQWtCO0FBQUEsSUFDbEIsVUFBVTtBQUFBLElBQ1YsaUJBQWlCO0FBQUEsSUFDakIsc0JBQXNCO0FBQUEsSUFDdEIsaUJBQWlCO0FBQUEsSUFDakIsNkJBQTZCO0FBQUEsSUFDN0IsNEJBQTRCO0FBQUEsSUFDNUIscUJBQXFCO0FBQUEsSUFDckIsZ0JBQWdCO0FBQUEsSUFDaEIsWUFBWTtBQUFBLElBQ1osb0JBQW9CO0FBQUEsSUFDcEIsZ0JBQWdCO0FBQUEsSUFDaEIseUJBQXlCO0FBQUEsSUFDekIsdUJBQXVCO0FBQUEsSUFDdkIscUJBQXFCO0FBQUEsSUFDckIsY0FBYztBQUFBLElBQ2QsYUFBYTtBQUFBLElBQ2Is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Q0FBQztBQUFBLEVBQ0w7OztBQ3hCQSxNQUFNLFNBQVM7QUFBQSxJQUNYLFdBQVc7QUFBQSxJQUNYLGNBQWM7QUFBQSxJQUNkLE1BQU07QUFBQSxJQUNOLFlBQVk7QUFBQSxJQUNaLE9BQU87QUFBQSxJQUNQLE9BQU87QUFBQSxJQUNQLFFBQVE7QUFBQSxJQUNSLE9BQU87QUFBQSxJQUNQLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxJQUNOLFlBQVk7QUFBQSxJQUNaLE9BQU87QUFBQSxJQUNQLFdBQVc7QUFBQSxJQUNYLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLE9BQU87QUFBQSxJQUNQLGdCQUFnQjtBQUFBLElBQ2hCLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxJQUNOLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLGVBQWU7QUFBQSxJQUNmLFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxJQUNYLFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLGdCQUFnQjtBQUFBLElBQ2hCLFlBQVk7QUFBQSxJQUNaLFlBQVk7QUFBQSxJQUNaLFNBQVM7QUFBQSxJQUNULFlBQVk7QUFBQSxJQUNaLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLGVBQWU7QUFBQSxJQUNmLGVBQWU7QUFBQSxJQUNmLGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxJQUNaLFVBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLE1BQU07QUFBQSxJQUNOLFdBQVc7QUFBQSxJQUNYLE1BQU07QUFBQSxJQUNOLE9BQU87QUFBQSxJQUNQLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFB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QVM7QUFBQSxJQUN4RyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxTQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUMzRyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUMxRyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUMxRyxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUMxRyxTQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUMzRyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxPQUFPLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN6RyxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUMxRyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxPQUFPLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN6RyxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUMxRyxTQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQTtBQUFBLElBRzNHLFVBQVUsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUNsSSxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDaEksTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQzlILE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUM5SCxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDOUgsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQ2hJLE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUM5SCxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDOUgsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxX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TTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFR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QjtBQUFBLElBQ3BCLGlCQUFpQjtBQUFBLElBQ2pCLFNBQVM7QUFBQSxJQUNULGFBQWE7QUFBQSxJQUNiLGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxJQUNaLGVBQWU7QUFBQSxJQUNmLFdBQVc7QUFBQSxJQUNYLGVBQWU7QUFBQSxJQUNmLFdBQVc7QUFBQSxJQUNYLHVCQUF1QjtBQUFBLElBQ3ZCLFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxJQUNYLHFCQUFxQjtBQUFBLElBQ3JCLFVBQVU7QUFBQSxJQUNWLGlCQUFpQjtBQUFBLElBQ2pCLGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxJQUNaLGdCQUFnQjtBQUFBLElBQ2hCLGFBQWE7QUFBQSxJQUNiLGtCQUFrQjtBQUFBLElBQ2xCLG1CQUFtQjtBQUFBLElBQ25CLHNCQUFzQjtBQUFBLElBQ3RCLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxJQUNULGFBQWE7QUFBQSxJQUNiLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLGdCQUFnQjtBQUFBLElBQ2hCLGFBQWE7QUFBQSxJQUNiLGNBQWM7QUFBQSxJQUNkLFVBQVU7QUFBQSxJQUNWLGVBQWU7QUFBQSxJQUNmLGFBQWE7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQSxJQUNYLFdBQVc7QUFBQSxJQUNYLG1CQUFtQjtBQUFBLElBQ25CLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULGNBQWM7QUFBQSxJQUNkLGdCQUFnQjtBQUFBLElBQ2hCLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLGNBQWM7QUFBQSxJQUNkLGdCQUFnQjtBQUFBLElBQ2hCLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLDZCQUE2QjtBQUFBLElBQzdCLGFBQWE7QUFB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O0FBQUEsSUFFN0IsYUFBYSxRQUF3QztBQUFBLE1BQ25ELE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxJQUNWLElBQUk7QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxNQUNSLFVBQVVBO0FBQUEsSUFDWjtBQUFBLElBQ0EsVUFBVSxRQUF3QztBQUFBLE1BQ2hELE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxJQUNWLElBQUk7QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxNQUNSLFVBQVVBO0FBQUEsSUFDWjtBQUFBLElBQ0EsTUFBTSxRQUF3QztBQUFBLE1BQzVDLE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxJQUNWLElBQUk7QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxNQUNSLFVBQVVBO0FBQUEsSUFDWjtBQUFBLElBQ0EsV0FBVztBQUFBLE1BQ1QsS0FBSyxRQUF3QztBQUFBLFFBQzNDLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxNQUNWLElBQUk7QUFBQSxRQUNGLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUNSLFVBQVVBO0FBQUEsTUFDWjtBQUFBLE1BQ0EsS0FBSyxRQUF3QztBQUFBLFFBQzNDLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxNQUNWLElBQUk7QUFBQSxRQUNGLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUNSLFVBQVVBO0FBQUEsTUFDWjtBQUFBLE1BQ0EsS0FBSyxRQUF3QztBQUFBLFFBQzNDLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxNQUNWLElBQUk7QUFBQSxRQUNGLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUNSLFVBQVVBO0FBQUEsTUFDWjtBQUFBLE1BQ0EsS0FBSyxRQUF3QztBQUFBLFFBQzNDLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxNQUNWLElBQUk7QUFBQSxRQUNGLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUNSLFVBQVVBO0FBQUEsTUFDWjtBQUFBLE1BQ0EsS0FBSyxRQUF3QztBQUFBLFFBQzNDLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxNQUNWLElBQUk7QUFBQSxRQUNGLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUNSLFVBQVVBO0FBQUEsTUFDWjtBQUFBLE1BQ0EsS0FBSyxRQUF3QztBQUFBLFFBQzNDLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxNQUNWLElBQUk7QUFBQSxRQUNGLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUNSLFVBQVVBO0FBQUEsTUFDWjtBQUFBLE1BQ0EsS0FBSyxRQUF3QztBQUFBLFFBQzNDLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxNQUNWLElBQUk7QUFBQSxRQUNGLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUNSLFVBQVVBO0FBQUEsTUFDWjtBQUFBLE1BQ0EsS0FBSyxRQUF3QztBQUFBLFFBQzNDLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxNQUNWLElBQUk7QUFBQSxRQUNGLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUNSLFVBQVVBO0FBQUEsTUFDWjtBQUFBLE1BQ0EsS0FBSyxRQUF3QztBQUFBLFFBQzNDLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxNQUNWLElBQUk7QUFBQSxRQUNGLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUNSLFVBQVVBO0FBQUEsTUFDWjtBQUFBLE1BQ0EsTUFBTSxRQUF3QztBQUFBLFFBQzVDLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxNQUNWLElBQUk7QUFBQSxRQUNGLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUNSLFVBQVVBO0FBQUEsTUFDWjtBQUFBLElBQ0Y7QUFBQSxFQUNGOzs7QUR0SEEsTUFBSUMsZUFBWSxDQUFDLFlBQVksYUFBYSxRQUFRLFdBQVc7QUFDN0QsV0FBU0MsY0FBVztBQUFFLFdBQU9BLGNBQVcsT0FBTyxTQUFTLE9BQU8sT0FBTyxLQUFLLElBQUksU0FBVSxHQUFHO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlB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O0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGOyIsCiAgIm5hbWVzIjogWyJoYXNPd25Qcm9wZXJ0eSIsICJmcm9tIiwgIlJlYWN0RGVidWdDdXJyZW50RnJhbWUiLCAiQ29tcG9uZW50IiwgIlB1cmVDb21wb25lbnQiLCAiY3JlYXRlUmVmIiwgImhhc093blByb3BlcnR5IiwgIlJlYWN0RWxlbWVudCIsICJzZWxmIiwgImNyZWF0ZUVsZW1lbnQiLCAiY2xvbmVFbGVtZW50IiwgImlzVmFsaWRFbGVtZW50IiwgIm9iamVjdCIsICJtYXRjaCIsICJmdW5jIiwgInRvQXJyYXkiLCAiY3JlYXRlQ29udGV4dCIsICJlcnJvciIsICJmb3J3YXJkUmVmIiwgInJlbmRlciIsICJtZW1vIiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlUmVkdWNlciIsICJyZWR1Y2VyIiwgInVzZVJlZiIsICJ1c2VFZmZlY3QiLCAidXNlTGF5b3V0RWZmZWN0IiwgInVzZUNhbGxiYWNrIiwgInVzZU1lbW8iLCAidmFsdWUiLCAicHJlZml4IiwgInByb3RvdHlwZSIsICJub2RlIiwgImtleXMiLCAiQ2hpbGRyZW4iLCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwgIm5vZGUiLCAicGVlayIsICJsZW5ndGgiLCAiaW5pdGlhbFRpbWUiLCAiUmVhY3QiLCAiUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSIsICJGcmFnbWVudCIsICJoYXNPd25Qcm9wZXJ0eSIsICJ2YWx1ZSIsICJwcmVmaXgiLCAic2FuaXRpemVVUkwiLCAiX3JlZiIsICJjYXBpdGFsaXplIiwgInRva2VuIiwgIm5vZGUiLCAibWF0Y2giLCAiQ29tcG9uZW50IiwgInByb3RvdHlwZSIsICJ3b3JrSW5Qcm9ncmVzcyIsICJ0b1N0cmluZyIsICJnZXQiLCAic2V0IiwgImdldEFjdGl2ZUVsZW1lbnQiLCAiaXNIeWRyYXRpbmciLCAidmFsaWRhdGVQcm9wcyIsICJpc0FycmF5IiwgIm9wdGlvbnMiLCAiZnVuYyIsICJpc0N1c3RvbVByb3BlcnR5IiwgInN0cmluZyIsICJjaGFyYWN0ZXIiLCAic3R5bGVzIiwgImRlbGltaXRlciIsICJzdHlsZSIsICJyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzIiwgInBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMiLCAiZXJyb3IiLCAiY2FsbENhbGxiYWNrIiwgImN1cnJlbnQiLCAicm9vdCIsICJxdWV1ZWRFdmVudCIsICJwcmVmaXhlcyIsICJpbmRleCIsICJsb2ciLCAiaXNFdmVudFN1cHBvcnRlZCIsICJmcm9tIiwgImxlbmd0aCIsICJuZXh0IiwgIm5vb3AiLCAiY3JlYXRlRWxlbWVudCIsICJjcmVhdGVJbnN0YW5jZSIsICJjYW5jZWxUaW1lb3V0IiwgImhhcyIsICJjdXJzb3IiLCAibm93IiwgIl9xdWV1ZSIsICJyZW5kZXJMYW5lcyIsICJ1cGRhdGVGcmFnbWVudCIsICJjaGlsZCIsICJyZWNvbmNpbGVDaGlsZEZpYmVycyIsICJpc09iamVjdCIsICJ2ZXJzaW9uIiwgInJlZHVjZXIiLCAicmVuZGVyIiwgInN1YnRyZWVSZW5kZXJMYW5lcyIsICJpc0hpZGRlbiIsICJlcnJvciQxIiwgImNvbW1pdFRpbWUiLCAiaHlkcmF0ZSIsICJjcmVhdGVQb3J0YWwiLCAiY3VycmVudEhvb2siLCAiUmVhY3RDdXJyZW50RGlzcGF0Y2hlciIsICJvYmplY3QiLCAiRWxlbWVudCIsICJGcmFnbWVudCIsICJpc0VsZW1lbnQiLCAiYXNzaWduIiwgImlzVmFsaWRFbGVtZW50IiwgInZhbGlkYXRlIiwgInZhbHVlIiwgImkiLCAiY2hlY2tlciIsICJoYXNPd24iLCAiY2xhc3NOYW1lcyIsICJ2YWx1ZSIsICJyZXF1aXJlX3JlYWN0X2lzX2RldmVsb3BtZW50IiwgIm9iamVjdCIsICJFbGVtZW50IiwgIkZyYWdtZW50IiwgImlzRWxlbWVudCIsICJyZXF1aXJlX3JlYWN0X2lzIiwgImdldFByb3RvdHlwZU9mIiwgImtleXMiLCAidmFsdWUiLCAibGVuZ3RoIiwgInZhbHVlIiwgImxlbmd0aCIsICJTeW1ib2wiLCAiU3ltYm9sIiwgImhhc093blByb3BlcnR5IiwgInZhbHVlIiwgInZhbHVlIiwgIlN5bWJvbCIsICJ2YWx1ZSIsICJpc09iamVjdCIsICJ2YWx1ZSIsICJpc09iamVjdCIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImZ1bmMiLCAiZnVuYyIsICJpc0Z1bmN0aW9uIiwgImlzT2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgInZhbHVlIiwgIm9iamVjdCIsICJvYmplY3QiLCAidmFsdWUiLCAiTWFwIiwgImhhc093blByb3BlcnR5IiwgImhhc093blByb3BlcnR5IiwgInZhbHVlIiwgImxlbmd0aCIsICJNYXAiLCAidmFsdWUiLCAidmFsdWUiLCAic2l6ZSIsICJsZW5ndGgiLCAiTWFwIiwgInZhbHVlIiwgInZhbHVlIiwgInZhbHVlIiwgImxlbmd0aCIsICJsZW5ndGgiLCAiY2FjaGUiLCAib3RoVmFsdWUiLCAiVWludDhBcnJheSIsICJ2YWx1ZSIsICJ2YWx1ZSIsICJTeW1ib2wiLCAiVWludDhBcnJheSIsICJvYmplY3QiLCAibGVuZ3RoIiwgImlzQXJyYXkiLCAiaXNBcnJheSIsICJvYmplY3QiLCAibGVuZ3RoIiwgInZhbHVlIiwgIm9iamVjdCIsICJ2YWx1ZSIsICJ2YWx1ZSIsICJoYXNPd25Qcm9wZXJ0eSIsICJ2YWx1ZSIsICJCdWZmZXIiLCAiaXNCdWZmZXIiLCAidmFsdWUiLCAibGVuZ3RoIiwgInZhbHVlIiwgInZhbHVlIiwgImZ1bmMiLCAidmFsdWUiLCAiaXNUeXBlZEFycmF5IiwgImlzQXJyYXkiLCAiaXNCdWZmZXIiLCAiaXNUeXBlZEFycmF5IiwgImhhc093blByb3BlcnR5IiwgInZhbHVlIiwgImxlbmd0aCIsICJ2YWx1ZSIsICJmdW5jIiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImtleXMiLCAib2JqZWN0IiwgImtleXMiLCAib2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJQcm9taXNlIiwgIlNldCIsICJXZWFrTWFwIiwgIk1hcCIsICJQcm9taXNlIiwgIlNldCIsICJXZWFrTWFwIiwgInZhbHVlIiwgImlzQXJyYXkiLCAiaXNCdWZmZXIiLCAiaXNUeXBlZEFycmF5IiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJ2YWx1ZSIsICJpc0VxdWFsIiwgInZhbHVlIiwgImdsb2JhbCIsICJpc0FycmF5IiwgImlzT2JqZWN0IiwgImlzVW5kZWZpbmVkIiwgImlzTnVtYmVyIiwgImlzRGF0ZSIsICJleHRlbmQiLCAiZm9ybWF0IiwgImxvY2FsZSIsICJ0byIsICJmcm9tIiwgImlzRnVuY3Rpb24iLCAia2V5cyIsICJjYWxlbmRhciIsICJub3ciLCAic2lnbiIsICJ0b2tlbiIsICJvcmRpbmFsIiwgImZ1bmMiLCAibGVuZ3RoIiwgImkiLCAic3RyaW5nIiwgImRpZmYiLCAibG9jYWxlRGF0YSIsICJ2YWx1ZSIsICJnZXQiLCAiaG91cnMiLCAibWludXRlcyIsICJuZXh0IiwgIm1hdGNoIiwgImRlZmF1bHRzIiwgInRva2VucyIsICJtZXJpZGllbSIsICJtaW4iLCAibWF4IiwgInllYXJzIiwgIm1vbnRocyIsICJ3ZWVrcyIsICJkYXlzIiwgInNlY29uZHMiLCAibWlsbGlzZWNvbmRzIiwgIm9mZnNldCIsICJtYXRjaGVzIiwgImJhc2UiLCAiaXNTdHJpbmciLCAicHJvcGVydHkiLCAidG9TdHJpbmciLCAicHJlZml4IiwgInRvQXJyYXkiLCAidG9KU09OIiwgImFicyIsICJyb3VuZCIsICJ0aHJlc2hvbGRzIiwgImlzQXJyYXkiLCAiaXNTdHJpbmciLCAidmFsdWUiLCAiaXNCb29sZWFuIiwgInZhbHVlIiwgImlzTnVtYmVyIiwgInZhbHVlIiwgImlzTnVtYmVyIiwgImlzTmFOIiwgInZhbHVlIiwgImdsb2JhbCIsICJudW1lcmFsIiwgIlZFUlNJT04iLCAiZGVmYXVsdHMiLCAidmFsdWUiLCAiYWJzIiwgIm1pbiIsICJtYXgiLCAic3RyaW5nIiwgIm5leHQiLCAicHJvcGVydHkiLCAibnVtIiwgInZhbHVlIiwgImlzQXJyYXkiLCAidmFsdWUiLCAib2JqZWN0IiwgIm1lbW9pemUiLCAiZnVuYyIsICJjYWNoZSIsICJtZW1vaXplIiwgImZ1bmMiLCAiY2FjaGUiLCAic3RyaW5nIiwgIm1hdGNoIiwgImxlbmd0aCIsICJTeW1ib2wiLCAiaXNBcnJheSIsICJ2YWx1ZSIsICJ0b1N0cmluZyIsICJ2YWx1ZSIsICJpc0FycmF5IiwgInRvU3RyaW5nIiwgInZhbHVlIiwgIm9iamVjdCIsICJ2YWx1ZSIsICJvYmplY3QiLCAibGVuZ3RoIiwgImdldCIsICJvYmplY3QiLCAibGVuZ3RoIiwgImZ1bmMiLCAib2JqZWN0IiwgInZhbHVlIiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJ2YWx1ZSIsICJvYmplY3QiLCAibGVuZ3RoIiwgImtleXMiLCAib2JqZWN0IiwgIm9iamVjdCIsICJpc09iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAib2JqZWN0IiwgIm9iamVjdCIsICJCdWZmZXIiLCAibGVuZ3RoIiwgImxlbmd0aCIsICJvYmplY3QiLCAib2JqZWN0IiwgIm9iamVjdCIsICJvYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAibGVuZ3RoIiwgIlVpbnQ4QXJyYXkiLCAiU3ltYm9sIiwgIm9iamVjdCIsICJpc09iamVjdCIsICJvYmplY3QiLCAib2JqZWN0IiwgInZhbHVlIiwgInZhbHVlIiwgImlzQXJyYXkiLCAiaXNCdWZmZXIiLCAiaXNPYmplY3QiLCAia2V5cyIsICJ2YWx1ZSIsICJvYmplY3QiLCAia2V5IiwgImxlbmd0aCIsICJsZW5ndGgiLCAib2JqZWN0IiwgIm9iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJpc1BsYWluT2JqZWN0IiwgInZhbHVlIiwgImlzUGxhaW5PYmplY3QiLCAidmFsdWUiLCAiU3ltYm9sIiwgImlzQXJyYXkiLCAidmFsdWUiLCAibGVuZ3RoIiwgInZhbHVlIiwgImZsYXR0ZW4iLCAibGVuZ3RoIiwgImZ1bmMiLCAiZnVuYyIsICJsZW5ndGgiLCAidmFsdWUiLCAidmFsdWUiLCAiZnVuYyIsICJzdHJpbmciLCAiZnVuYyIsICJmbGF0dGVuIiwgImZ1bmMiLCAib2JqZWN0IiwgImxlbmd0aCIsICJyZXF1aXJlX3JlYWN0X2lzX2RldmVsb3BtZW50IiwgIm9iamVjdCIsICJFbGVtZW50IiwgIkZyYWdtZW50IiwgImlzRWxlbWVudCIsICJyZXF1aXJlX3JlYWN0X2lzIiwgImVuY29kZSIsICJ2YWx1ZSIsICJwcmVmaXgiLCAibWF0Y2giLCAiYmFzZSIsICJwYXJzZSIsICJ2YWx1ZSIsICJjaGFyIiwgInRvU3RyaW5nIiwgInN0cmluZ2lmeSIsICJ0b1N0cmluZyIsICJlc2NhcGVSZWdFeHAiLCAic3RyaW5nIiwgIl9jbGFzc0NhbGxDaGVjayIsICJnbG9iYWwiLCAidGhpcyIsICJmYWlscyIsICJleGVjIiwgInJlcXVpcmUkJDAiLCAidGVzdCIsICJOQVRJVkVfQklORCIsICJGdW5jdGlvblByb3RvdHlwZSIsICJhcHBseSIsICJjYWxsIiwgInVuY3VycnlUaGlzIiwgInRvU3RyaW5nIiwgInN0cmluZ1NsaWNlIiwgImNsYXNzb2ZSYXciLCAicmVxdWlyZSQkMSIsICJkb2N1bWVudEFsbCIsICIkZG9jdW1lbnRBbGwiLCAiaXNDYWxsYWJsZSIsICJkZXNjcmlwdG9ycyIsICIkcHJvcGVydHlJc0VudW1lcmFibGUiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgImNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciIsICJ2YWx1ZSIsICJjbGFzc29mIiwgInJlcXVpcmUkJDIiLCAiJE9iamVjdCIsICJpc051bGxPclVuZGVmaW5lZCIsICIkVHlwZUVycm9yIiwgInJlcXVpcmVPYmplY3RDb2VyY2libGUiLCAiSW5kZXhlZE9iamVjdCIsICJ0b0luZGV4ZWRPYmplY3QiLCAiaXNPYmplY3QiLCAicGF0aCIsICJnZXRCdWlsdEluIiwgIm1ldGhvZCIsICJ1c2VyQWdlbnQiLCAicHJvY2VzcyIsICJEZW5vIiwgIm1hdGNoIiwgInZlcnNpb24iLCAiVjhfVkVSU0lPTiIsICIkU3RyaW5nIiwgInN5bWJvbCIsICJOQVRJVkVfU1lNQk9MIiwgImlzUHJvdG90eXBlT2YiLCAiVVNFX1NZTUJPTF9BU19VSUQiLCAicmVxdWlyZSQkMyIsICJpc1N5bWJvbCIsICIkU3ltYm9sIiwgInRyeVRvU3RyaW5nIiwgImFDYWxsYWJsZSIsICJnZXRNZXRob2QiLCAiZnVuYyIsICJvcmRpbmFyeVRvUHJpbWl0aXZlIiwgImRlZmluZVByb3BlcnR5IiwgImRlZmluZUdsb2JhbFByb3BlcnR5IiwgInN0b3JlIiwgInNoYXJlZE1vZHVsZSIsICJ0b09iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJoYXNPd24iLCAiaWQiLCAidWlkIiwgInNoYXJlZCIsICJyZXF1aXJlJCQ0IiwgInJlcXVpcmUkJDUiLCAiU3ltYm9sIiwgIldlbGxLbm93blN5bWJvbHNTdG9yZSIsICJ3ZWxsS25vd25TeW1ib2wiLCAidG9QcmltaXRpdmUiLCAidG9Qcm9wZXJ0eUtleSIsICJkb2N1bWVudCIsICJFWElTVFMiLCAiZG9jdW1lbnRDcmVhdGVFbGVtZW50IiwgIkRFU0NSSVBUT1JTIiwgImNyZWF0ZUVsZW1lbnQiLCAicHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUiLCAicmVxdWlyZSQkNiIsICJJRThfRE9NX0RFRklORSIsICJyZXF1aXJlJCQ3IiwgIiRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiaXNGb3JjZWQiLCAic3RyaW5nIiwgImJpbmQiLCAiYW5PYmplY3QiLCAiVjhfUFJPVE9UWVBFX0RFRklORV9CVUciLCAiJGRlZmluZVByb3BlcnR5IiwgIkNPTkZJR1VSQUJMRSIsICJkZWZpbmVQcm9wZXJ0eU1vZHVsZSIsICJjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkiLCAib2JqZWN0IiwgInJlcXVpcmUkJDgiLCAicmVxdWlyZSQkOSIsICJGT1JDRUQiLCAiJCIsICJPYmplY3QiLCAicGFyZW50IiwgImlzQXJyYXkiLCAiZmxvb3IiLCAidHJ1bmMiLCAidG9JbnRlZ2VyT3JJbmZpbml0eSIsICJtaW4iLCAidG9MZW5ndGgiLCAibGVuZ3RoT2ZBcnJheUxpa2UiLCAiZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyIiwgImNyZWF0ZVByb3BlcnR5IiwgIlRPX1NUUklOR19UQUciLCAiVE9fU1RSSU5HX1RBR19TVVBQT1JUIiwgImluc3BlY3RTb3VyY2UiLCAibm9vcCIsICJjb25zdHJ1Y3QiLCAiaXNDb25zdHJ1Y3RvciIsICJjYWxsZWQiLCAiU1BFQ0lFUyIsICIkQXJyYXkiLCAiYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IiLCAiYXJyYXlTcGVjaWVzQ3JlYXRlIiwgImxlbmd0aCIsICJhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0IiwgInJlcXVpcmUkJDEwIiwgInJlcXVpcmUkJDExIiwgImNvbmNhdCIsICJpIiwgIm1heCIsICJ0b0Fic29sdXRlSW5kZXgiLCAiY3JlYXRlTWV0aG9kIiwgImhpZGRlbktleXMiLCAicHVzaCIsICJlbnVtQnVnS2V5cyIsICJpbnRlcm5hbE9iamVjdEtleXMiLCAib2JqZWN0S2V5cyIsICJrZXlzIiwgImRlZmluZVByb3BlcnRpZXMiLCAiaHRtbCIsICJzaGFyZWRLZXkiLCAiZGVmaW5lUHJvcGVydGllc01vZHVsZSIsICJQUk9UT1RZUEUiLCAiSUVfUFJPVE8iLCAiYWN0aXZlWERvY3VtZW50IiwgImNyZWF0ZSIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgIiRnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImFycmF5U2xpY2UiLCAiZGVmaW5lQnVpbHRJbiIsICJkZWZpbmVCdWlsdEluQWNjZXNzb3IiLCAid3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSIsICJTeW1ib2xQcm90b3R5cGUiLCAiVE9fUFJJTUlUSVZFIiwgInNldFRvU3RyaW5nVGFnIiwgIldlYWtNYXAiLCAiVHlwZUVycm9yIiwgInNldCIsICJnZXQiLCAic2VsZiIsICJyZXF1aXJlJCQxMiIsICJyZXF1aXJlJCQxMyIsICJyZXF1aXJlJCQxNCIsICJyZXF1aXJlJCQxNSIsICJyZXF1aXJlJCQxNiIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlIiwgInJlcXVpcmUkJDE3IiwgInJlcXVpcmUkJDE4IiwgImdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSIsICJyZXF1aXJlJCQxOSIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUiLCAicmVxdWlyZSQkMjAiLCAicmVxdWlyZSQkMjEiLCAicmVxdWlyZSQkMjIiLCAicmVxdWlyZSQkMjMiLCAicmVxdWlyZSQkMjQiLCAicmVxdWlyZSQkMjUiLCAicmVxdWlyZSQkMjYiLCAicmVxdWlyZSQkMjciLCAicmVxdWlyZSQkMjgiLCAicmVxdWlyZSQkMjkiLCAicmVxdWlyZSQkMzAiLCAicmVxdWlyZSQkMzEiLCAiZGVmaW5lV2VsbEtub3duU3ltYm9sIiwgInJlcXVpcmUkJDMyIiwgImRlZmluZVN5bWJvbFRvUHJpbWl0aXZlIiwgInJlcXVpcmUkJDMzIiwgInJlcXVpcmUkJDM0IiwgIkludGVybmFsU3RhdGVNb2R1bGUiLCAicmVxdWlyZSQkMzUiLCAiJGZvckVhY2giLCAicmVxdWlyZSQkMzYiLCAic2V0SW50ZXJuYWxTdGF0ZSIsICJnZXRJbnRlcm5hbFN0YXRlIiwgIk9iamVjdFByb3RvdHlwZSIsICJSYW5nZUVycm9yIiwgIm5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIiwgIlN5bWJvbFRvU3RyaW5nUmVnaXN0cnkiLCAia2V5Rm9yIiwgImNoYXJBdCIsICJjaGFyQ29kZUF0IiwgInJlcGxhY2UiLCAicHJldiIsICJuZXh0IiwgInN0cmluZ2lmeSIsICJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiJGdldE93blByb3BlcnR5U3ltYm9scyIsICJDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIiLCAiZ2V0UHJvdG90eXBlT2YiLCAiSVRFUkFUT1IiLCAiQlVHR1lfU0FGQVJJX0lURVJBVE9SUyIsICJJdGVyYXRvclByb3RvdHlwZSIsICJJdGVyYXRvcnMiLCAicmV0dXJuVGhpcyIsICJhUG9zc2libGVQcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAidmFsdWVzIiwgImVudHJpZXMiLCAiY3JlYXRlSXRlclJlc3VsdE9iamVjdCIsICJkZWZpbmVJdGVyYXRvciIsICJET01JdGVyYWJsZXMiLCAiTUVUQURBVEEiLCAidGhpc1N5bWJvbFZhbHVlIiwgImlzUmVnaXN0ZXJlZFN5bWJvbCIsICJpc1dlbGxLbm93blN5bWJvbCIsICJwb3NpdGlvbiIsICJzaXplIiwgIldyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUiLCAiaXRlcmF0b3IiLCAiX3R5cGVvZiIsICJfU3ltYm9sIiwgIl9TeW1ib2wkaXRlcmF0b3IiLCAibyIsICJfdG9QcmltaXRpdmUiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX09iamVjdCRkZWZpbmVQcm9wZXJ0eSIsICJfY3JlYXRlQ2xhc3MiLCAiX2RlZmluZVByb3BlcnR5IiwgImdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QiLCAibWVtbyIsICJhcnJheU1ldGhvZElzU3RyaWN0IiwgIklTX05PREUiLCAicmVkdWNlIiwgIkFycmF5UHJvdG90eXBlIiwgIkhBU19TUEVDSUVTX1NVUFBPUlQiLCAiZmlsdGVyIiwgIm1hcCIsICJmbGF0dGVuSW50b0FycmF5IiwgImZsYXRNYXAiLCAiY3JlYXRlTmV3RGF0YVBpcGVGcm9tIiwgImZyb20iLCAiRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbiIsICJTaW1wbGVEYXRhUGlwZSIsICJfc291cmNlIiwgIl90cmFuc2Zvcm1lcnMiLCAiX3RhcmdldCIsICJfY29udGV4dCIsICJfY29udGV4dDIiLCAiX2NvbnRleHQzIiwgImFkZCIsICJfYmluZEluc3RhbmNlUHJvcGVydHkiLCAiX2FkZCIsICJyZW1vdmUiLCAiX3JlbW92ZSIsICJ1cGRhdGUiLCAiX3VwZGF0ZSIsICJrZXkiLCAiYWxsIiwgIl90cmFuc2Zvcm1JdGVtcyIsICJzdGFydCIsICJvbiIsICJfbGlzdGVuZXJzIiwgInN0b3AiLCAib2ZmIiwgIml0ZW1zIiwgIl9jb250ZXh0NCIsICJfcmVkdWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJ0cmFuc2Zvcm0iLCAiX25hbWUiLCAicGF5bG9hZCIsICJvbGREYXRhIiwgImNhbGxiYWNrIiwgImlucHV0IiwgIl9maWx0ZXJJbnN0YW5jZVByb3BlcnR5IiwgIl9tYXBJbnN0YW5jZVByb3BlcnR5IiwgIl9mbGF0TWFwSW5zdGFuY2VQcm9wZXJ0eSIsICJ0byIsICJ0YXJnZXQiLCAiaXRlcmF0b3JDbG9zZSIsICJjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nIiwgIkVOVFJJRVMiLCAiaXNBcnJheUl0ZXJhdG9yTWV0aG9kIiwgImdldEl0ZXJhdG9yTWV0aG9kIiwgImdldEl0ZXJhdG9yIiwgImNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX0FycmF5JGlzQXJyYXkiLCAic2V0QXJyYXlMZW5ndGgiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl9nZXRJdGVyYXRvck1ldGhvZCIsICJyIiwgInNsaWNlIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJhcnJheUxpa2VUb0FycmF5IiwgIl9zbGljZUluc3RhbmNlUHJvcGVydHkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfc2xpY2VkVG9BcnJheSIsICJhcnJheVdpdGhIb2xlcyIsICJpdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJ1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJhcnJheVdpdGhvdXRIb2xlcyIsICJpdGVyYWJsZVRvQXJyYXkiLCAibm9uSXRlcmFibGVTcHJlYWQiLCAib3duS2V5cyIsICJGQUlMU19PTl9QUklNSVRJVkVTIiwgIlNUUklDVF9NRVRIT0QiLCAiZm9yRWFjaCIsICJyZXZlcnNlIiwgImRlbGV0ZVByb3BlcnR5T3JUaHJvdyIsICJzcGxpY2UiLCAiYXNzaWduIiwgInZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoIiwgIkZ1bmN0aW9uIiwgInNjaGVkdWxlcnNGaXgiLCAic2V0SW50ZXJ2YWwiLCAic2V0VGltZW91dCIsICJFbWl0dGVyIiwgIm1vZHVsZSIsICJfZXh0ZW5kcyIsICJfaW5oZXJpdHNMb29zZSIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInJvdW5kIiwgImFicyIsICJub3ciLCAicHJvcGVydHkiLCAicHJlZml4IiwgImVhY2giLCAiVG91Y2hBY3Rpb24iLCAibm9kZSIsICJJbnB1dCIsICJQb2ludGVyRXZlbnRJbnB1dCIsICJ0b0FycmF5IiwgInNvcnQiLCAiVG91Y2hJbnB1dCIsICJNb3VzZUlucHV0IiwgInJlbW92ZUxhc3RUb3VjaCIsICJUb3VjaE1vdXNlSW5wdXQiLCAiUmVjb2duaXplciIsICJlbWl0IiwgIlRhcFJlY29nbml6ZXIiLCAiQXR0clJlY29nbml6ZXIiLCAiUGFuUmVjb2duaXplciIsICJTd2lwZVJlY29nbml6ZXIiLCAiUGluY2hSZWNvZ25pemVyIiwgIlJvdGF0ZVJlY29nbml6ZXIiLCAiUHJlc3NSZWNvZ25pemVyIiwgImRlZmF1bHRzIiwgImRhdGEiLCAiTWFuYWdlciIsICJTaW5nbGVUb3VjaElucHV0IiwgImxvZyIsICJleHRlbmQiLCAibWVyZ2UiLCAiYmFzZSIsICJIYW1tZXIiLCAiREVMRVRFIiwgInB1cmVEZWVwT2JqZWN0QXNzaWduIiwgIl9sZW4iLCAiYXJndW1lbnRzIiwgInVwZGF0ZXMiLCAiQXJyYXkiLCAiX2tleSIsICJkZWVwT2JqZWN0QXNzaWduIiwgIl9jb25jYXRJbnN0YW5jZVByb3BlcnR5IiwgIm1lcmdlZCIsICJkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkiLCAic3RyaXBEZWxldGUiLCAiX2xlbjIiLCAiX2tleTIiLCAiYSIsICJiIiwgIkRhdGUiLCAic2V0VGltZSIsICJnZXRUaW1lIiwgIl9pdGVyYXRvciIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJfUmVmbGVjdCRvd25LZXlzIiwgIl9zdGVwIiwgInMiLCAibiIsICJkb25lIiwgInByb3AiLCAicHJvdG90eXBlIiwgInByb3BlcnR5SXNFbnVtZXJhYmxlIiwgImNsb25lIiwgImVyciIsICJlIiwgImYiLCAiX2kiLCAiX09iamVjdCRrZXlzIiwgIl9PYmplY3Qka2V5czIiLCAiYUNvbnN0cnVjdG9yIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCAiX3NldFByb3RvdHlwZU9mIiwgInAiLCAiX2luaGVyaXRzIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgImFzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyIsICJpbnN0YWxsRXJyb3JDYXVzZSIsICIkRXJyb3IiLCAiaXRlcmF0ZSIsICJub3JtYWxpemVTdHJpbmdBcmd1bWVudCIsICJzZXRTcGVjaWVzIiwgImFuSW5zdGFuY2UiLCAic3BlY2llc0NvbnN0cnVjdG9yIiwgIklTX0lPUyIsICJNZXNzYWdlQ2hhbm5lbCIsICJTdHJpbmciLCAicXVldWUiLCAic2V0SW1tZWRpYXRlIiwgInRhc2siLCAiUXVldWUiLCAiTXV0YXRpb25PYnNlcnZlciIsICJQcm9taXNlIiwgIm1pY3JvdGFzayIsICJub3RpZnkiLCAicHJvbWlzZSIsICJmbHVzaCIsICJob3N0UmVwb3J0RXJyb3JzIiwgInBlcmZvcm0iLCAiSVNfREVOTyIsICJOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IiLCAiTmF0aXZlUHJvbWlzZVByb3RvdHlwZSIsICJOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQiLCAiRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IiLCAibmV3UHJvbWlzZUNhcGFiaWxpdHkiLCAibmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUiLCAiaXNUaGVuYWJsZSIsICJ0aGVuIiwgIlBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIiwgImNvdW50ZXIiLCAicHJvbWlzZVJlc29sdmUiLCAiYW55IiwgImlzRnVuY3Rpb24iLCAiX09iamVjdCRjcmVhdGUiLCAiX09iamVjdCRnZXRQcm90b3R5cGVPZiIsICJfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkiLCAiX3B1c2hJbnN0YW5jZVByb3BlcnR5IiwgIl9PYmplY3Qkc2V0UHJvdG90eXBlT2YiLCAiX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5IiwgIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCAidCIsICJkZWZpbmUiLCAid3JhcCIsICJjIiwgIkFzeW5jSXRlcmF0b3IiLCAidSIsICJoIiwgImlzRXh0ZW5zaWJsZSIsICJmYXN0S2V5IiwgImludGVybmFsTWV0YWRhdGFNb2R1bGUiLCAiaW50ZXJuYWxTdGF0ZUdldHRlckZvciIsICJjb2xsZWN0aW9uIiwgImRlZmluZUJ1aWx0SW5zIiwgImNvbGxlY3Rpb25TdHJvbmciLCAiY2xlYXIiLCAiaGFzIiwgIk1hcCIsICJzb21lIiwgIldFQktJVCIsICJnZXRSYW5kb21WYWx1ZXMiLCAicm5kczgiLCAicm5nIiwgImJ5dGVUb0hleCIsICJpc0lkIiwgIm9wdGlvbnMiLCAiZGVsYXkiLCAiSW5maW5pdHkiLCAic2V0T3B0aW9ucyIsICJfZmx1c2hJZk5lZWRlZCIsICJkZXN0cm95IiwgIl9leHRlbmRlZCIsICJtZXRob2RzIiwgIm9yaWdpbmFsIiwgIm5hbWUiLCAibWUiLCAiRXJyb3IiLCAiYXJncyIsICJmbiIsICJjb250ZXh0IiwgImVudHJ5IiwgIl9xdWV1ZSIsICJfdGhpcyIsICJfdGltZW91dCIsICJjbGVhclRpbWVvdXQiLCAiX3NldFRpbWVvdXQiLCAiX3NwbGljZUluc3RhbmNlUHJvcGVydHkiLCAidW5kZWZpbmVkIiwgIkRhdGFTZXRQYXJ0IiwgIl90cmlnZ2VyIiwgImV2ZW50IiwgInNlbmRlcklkIiwgIl9zdWJzY3JpYmVycyIsICJzdWJzY3JpYmVyIiwgIlNldCIsICJEYXRhU3RyZWFtIiwgInBhaXJzIiwgIl9wYWlycyIsICJtYXJrIiwgIl9zdGVwJHZhbHVlIiwgIml0ZW0iLCAidmFsdWUkIiwgInQwIiwgImZpbmlzaCIsICJfaXRlcmF0b3IyIiwgIl9zdGVwMiIsICJfc3RlcDIkdmFsdWUiLCAiZW50cmllcyQiLCAiX2l0ZXJhdG9yMyIsICJfc3RlcDMiLCAiX3N0ZXAzJHZhbHVlIiwgImtleXMkIiwgIl9pdGVyYXRvcjQiLCAiX3N0ZXA0IiwgIl9zdGVwNCR2YWx1ZSIsICJ2YWx1ZXMkIiwgInRvSWRBcnJheSIsICJfY29udGV4dDUiLCAicGFpciIsICJ0b0l0ZW1BcnJheSIsICJfY29udGV4dDYiLCAidG9FbnRyeUFycmF5IiwgInRvT2JqZWN0TWFwIiwgIl9pdGVyYXRvcjUiLCAiX3N0ZXA1IiwgIl9zdGVwNSR2YWx1ZSIsICJ0b01hcCIsICJfTWFwIiwgInRvSWRTZXQiLCAiX1NldCIsICJ0b0l0ZW1TZXQiLCAiY2FjaGUiLCAiZGlzdGluY3QiLCAiX2l0ZXJhdG9yNiIsICJfc3RlcDYiLCAiX3N0ZXA2JHZhbHVlIiwgIl9TeW1ib2wkaXRlcmF0b3IyIiwgIl9jYWxsZWUiLCAiX2l0ZXJhdG9yNyIsICJfc3RlcDciLCAiX3N0ZXA3JHZhbHVlIiwgIl9jYWxsZWUkIiwgIl9jb250ZXh0NyIsICJfaXRlcmF0b3I4IiwgIl9zdGVwOCIsICJfc3RlcDgkdmFsdWUiLCAiX2NhbGxlZTIiLCAiX2l0ZXJhdG9yOSIsICJfc3RlcDkiLCAiX3N0ZXA5JHZhbHVlIiwgIl9jYWxsZWUyJCIsICJfY29udGV4dDgiLCAiaXRlciIsICJfZ2V0SXRlcmF0b3IiLCAiY3VyciIsICJtYXhJdGVtIiwgIm1heFZhbHVlIiwgIl9jdXJyJHZhbHVlIiwgIm1pbkl0ZW0iLCAibWluVmFsdWUiLCAiX2N1cnIkdmFsdWUyIiwgImFjY3VtdWxhdG9yIiwgIl9pdGVyYXRvcjEwIiwgIl9zdGVwMTAiLCAiX3N0ZXAxMCR2YWx1ZSIsICJfY29udGV4dDkiLCAiX3NvcnRJbnN0YW5jZVByb3BlcnR5IiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiaWRBIiwgIml0ZW1BIiwgIl9yZWY0IiwgImlkQiIsICJpdGVtQiIsICJlbnN1cmVGdWxsSXRlbSIsICJpZFByb3AiLCAidXVpZDQiLCAiRGF0YVNldCIsICJfRGF0YVNldFBhcnQiLCAiX3N1cGVyIiwgIl9jcmVhdGVTdXBlciIsICJfb3B0aW9ucyIsICJfZGF0YSIsICJfaWRQcm9wIiwgImZpZWxkSWQiLCAiX3RoaXMyIiwgImFkZGVkSWRzIiwgImlkc1RvQWRkIiwgImQiLCAiX3NvbWVJbnN0YW5jZVByb3BlcnR5IiwgImxlbiIsICJfYWRkSXRlbSIsICJfdGhpczMiLCAidXBkYXRlZElkcyIsICJ1cGRhdGVkRGF0YSIsICJhZGRPclVwZGF0ZSIsICJvcmlnSWQiLCAiZnVsbEl0ZW0iLCAib2xkSXRlbSIsICJfT2JqZWN0JGFzc2lnbiIsICJfdXBkYXRlSXRlbSIsICJjb25zb2xlIiwgIndhcm4iLCAicHJvcHMiLCAidXBkYXRlT25seSIsICJfdGhpczQiLCAidXBkYXRlRXZlbnREYXRhIiwgImZpcnN0IiwgInNlY29uZCIsICJpZHMiLCAicmV0dXJuVHlwZSIsICJpdGVtSWRzIiwgIml0ZW1JZCIsICJfa2V5c0luc3RhbmNlUHJvcGVydHkiLCAib3JkZXIiLCAiX3NvcnQiLCAiZmllbGRzIiwgIl9maWx0ZXJGaWVsZHMiLCAicmVzdWx0IiwgInJlc3VsdGFudCIsICJfaXRlbSIsICJnZXRJZHMiLCAiZ2V0RGF0YVNldCIsICJtYXBwZWRJdGVtcyIsICJmaWx0ZXJlZEl0ZW0iLCAiZmllbGQiLCAiYXYiLCAiYnYiLCAicmVtb3ZlZElkcyIsICJyZW1vdmVkSXRlbXMiLCAiaWRlbnQiLCAiZGVsZXRlIiwgIm1heEZpZWxkIiwgIl92YWx1ZXNJbnN0YW5jZVByb3BlcnR5IiwgIml0ZW1GaWVsZCIsICJtaW5GaWVsZCIsICJjb3VudCIsICJleGlzdHMiLCAiaiIsICJfSlNPTiRzdHJpbmdpZnkiLCAiX29iamVjdFNwcmVhZCIsICJzdHJlYW0iLCAiX2VudHJpZXNJbnN0YW5jZVByb3BlcnR5IiwgIkRhdGFWaWV3IiwgIl9saXN0ZW5lciIsICJfb25FdmVudCIsICJzZXREYXRhIiwgIl9pZHMiLCAicmVmcmVzaCIsICJvbGRJZHMiLCAibmV3SWRzIiwgImVycm9yIiwgInZpZXdPcHRpb25zIiwgInRoaXNGaWx0ZXIiLCAib3B0aW9uc0ZpbHRlciIsICJkZWZhdWx0RmlsdGVyIiwgImRpc3Bvc2UiLCAiX3RoaXMkX2RhdGEiLCAibWVzc2FnZSIsICJyZXBsYWNlbWVudCIsICJjb25maWd1cmFibGUiLCAicGFyYW1zIiwgIm9sZEl0ZW1zIiwgInVwZGF0ZWRJdGVtcyIsICJpc0RhdGFTZXRMaWtlIiwgInYiLCAiaXNEYXRhVmlld0xpa2UiLCAiY2hlY2siLCAiaXQiLCAiTWF0aCIsICJnbG9iYWwiLCAiZ2xvYmFsVGhpcyIsICJ3aW5kb3ciLCAic2VsZiIsICJ0aGlzIiwgIkZ1bmN0aW9uIiwgImZhaWxzIiwgImV4ZWMiLCAiZXJyb3IiLCAiZnVuY3Rpb25CaW5kTmF0aXZlIiwgInJlcXVpcmUkJDAiLCAidGVzdCIsICJiaW5kIiwgImhhc093blByb3BlcnR5IiwgIk5BVElWRV9CSU5EIiwgIkZ1bmN0aW9uUHJvdG90eXBlIiwgInByb3RvdHlwZSIsICJhcHBseSIsICJjYWxsIiwgImZ1bmN0aW9uQXBwbHkiLCAiUmVmbGVjdCIsICJhcmd1bWVudHMiLCAidW5jdXJyeVRoaXNXaXRoQmluZCIsICJmdW5jdGlvblVuY3VycnlUaGlzIiwgImZuIiwgInVuY3VycnlUaGlzIiwgInRvU3RyaW5nIiwgInN0cmluZ1NsaWNlIiwgInNsaWNlIiwgImNsYXNzb2ZSYXciLCAicmVxdWlyZSQkMSIsICJmdW5jdGlvblVuY3VycnlUaGlzQ2xhdXNlIiwgImRvY3VtZW50QWxsIiwgImRvY3VtZW50IiwgImFsbCIsICJkb2N1bWVudEFsbF8xIiwgIklTX0hUTUxEREEiLCAiaXNDYWxsYWJsZSIsICJhcmd1bWVudCIsICJkZXNjcmlwdG9ycyIsICJPYmplY3QiLCAiZGVmaW5lUHJvcGVydHkiLCAiZ2V0IiwgImZ1bmN0aW9uQ2FsbCIsICIkcHJvcGVydHlJc0VudW1lcmFibGUiLCAicHJvcGVydHlJc0VudW1lcmFibGUiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIk5BU0hPUk5fQlVHIiwgIm9iamVjdFByb3BlcnR5SXNFbnVtZXJhYmxlIiwgImYiLCAiViIsICJkZXNjcmlwdG9yIiwgImVudW1lcmFibGUiLCAibWF0Y2giLCAidmVyc2lvbiIsICJjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IiLCAiYml0bWFwIiwgInZhbHVlIiwgImNvbmZpZ3VyYWJsZSIsICJ3cml0YWJsZSIsICJjbGFzc29mIiwgInJlcXVpcmUkJDIiLCAiJE9iamVjdCIsICJzcGxpdCIsICJpbmRleGVkT2JqZWN0IiwgImlzTnVsbE9yVW5kZWZpbmVkIiwgIiRUeXBlRXJyb3IiLCAiVHlwZUVycm9yIiwgInJlcXVpcmVPYmplY3RDb2VyY2libGUiLCAiSW5kZXhlZE9iamVjdCIsICJ0b0luZGV4ZWRPYmplY3QiLCAiaXNPYmplY3QiLCAicGF0aCIsICJhRnVuY3Rpb24iLCAidmFyaWFibGUiLCAiZ2V0QnVpbHRJbiIsICJuYW1lc3BhY2UiLCAibWV0aG9kIiwgImxlbmd0aCIsICJvYmplY3RJc1Byb3RvdHlwZU9mIiwgImlzUHJvdG90eXBlT2YiLCAiZW5naW5lVXNlckFnZW50IiwgIm5hdmlnYXRvciIsICJTdHJpbmciLCAidXNlckFnZW50IiwgInByb2Nlc3MiLCAiRGVubyIsICJ2ZXJzaW9ucyIsICJ2OCIsICJlbmdpbmVWOFZlcnNpb24iLCAiVjhfVkVSU0lPTiIsICIkU3RyaW5nIiwgInN5bWJvbENvbnN0cnVjdG9yRGV0ZWN0aW9uIiwgImdldE93blByb3BlcnR5U3ltYm9scyIsICJzeW1ib2wiLCAiU3ltYm9sIiwgInNoYW0iLCAidXNlU3ltYm9sQXNVaWQiLCAiaXRlcmF0b3IiLCAiaXNTeW1ib2wiLCAicmVxdWlyZSQkMyIsICIkU3ltYm9sIiwgInRyeVRvU3RyaW5nIiwgImFDYWxsYWJsZSIsICJnZXRNZXRob2QiLCAiUCIsICJmdW5jIiwgImRlZmluZUdsb2JhbFByb3BlcnR5IiwgImtleSIsICJTSEFSRUQiLCAic2hhcmVkU3RvcmUiLCAic3RvcmUiLCAic2hhcmVkTW9kdWxlIiwgInB1c2giLCAibW9kZSIsICJjb3B5cmlnaHQiLCAibGljZW5zZSIsICJzb3VyY2UiLCAidG9PYmplY3QiLCAiaGFzT3duUHJvcGVydHlfMSIsICJoYXNPd24iLCAiaWQiLCAicG9zdGZpeCIsICJyYW5kb20iLCAidWlkIiwgInNoYXJlZCIsICJOQVRJVkVfU1lNQk9MIiwgInJlcXVpcmUkJDQiLCAiVVNFX1NZTUJPTF9BU19VSUQiLCAicmVxdWlyZSQkNSIsICJXZWxsS25vd25TeW1ib2xzU3RvcmUiLCAiY3JlYXRlV2VsbEtub3duU3ltYm9sIiwgIndpdGhvdXRTZXR0ZXIiLCAid2VsbEtub3duU3ltYm9sIiwgIm5hbWUiLCAib3JkaW5hcnlUb1ByaW1pdGl2ZSIsICJpbnB1dCIsICJwcmVmIiwgInZhbCIsICJ2YWx1ZU9mIiwgIlRPX1BSSU1JVElWRSIsICJ0b1ByaW1pdGl2ZSIsICJyZXN1bHQiLCAiZXhvdGljVG9QcmltIiwgInRvUHJvcGVydHlLZXkiLCAiRVhJU1RTIiwgImNyZWF0ZUVsZW1lbnQiLCAiZG9jdW1lbnRDcmVhdGVFbGVtZW50IiwgImllOERvbURlZmluZSIsICJhIiwgIkRFU0NSSVBUT1JTIiwgInByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlIiwgInJlcXVpcmUkJDYiLCAiSUU4X0RPTV9ERUZJTkUiLCAicmVxdWlyZSQkNyIsICIkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIm9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJPIiwgInJlcGxhY2VtZW50IiwgImlzRm9yY2VkIiwgImZlYXR1cmUiLCAiZGV0ZWN0aW9uIiwgImRhdGEiLCAibm9ybWFsaXplIiwgIlBPTFlGSUxMIiwgIk5BVElWRSIsICJzdHJpbmciLCAicmVwbGFjZSIsICJ0b0xvd2VyQ2FzZSIsICJpc0ZvcmNlZF8xIiwgImZ1bmN0aW9uQmluZENvbnRleHQiLCAidGhhdCIsICJ2OFByb3RvdHlwZURlZmluZUJ1ZyIsICJhbk9iamVjdCIsICJWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyIsICIkZGVmaW5lUHJvcGVydHkiLCAiRU5VTUVSQUJMRSIsICJDT05GSUdVUkFCTEUiLCAiV1JJVEFCTEUiLCAib2JqZWN0RGVmaW5lUHJvcGVydHkiLCAiQXR0cmlidXRlcyIsICJjdXJyZW50IiwgImRlZmluZVByb3BlcnR5TW9kdWxlIiwgImNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSIsICJvYmplY3QiLCAicmVxdWlyZSQkOCIsICJyZXF1aXJlJCQ5IiwgIndyYXBDb25zdHJ1Y3RvciIsICJOYXRpdmVDb25zdHJ1Y3RvciIsICJXcmFwcGVyIiwgImIiLCAiYyIsICJfZXhwb3J0IiwgIm9wdGlvbnMiLCAiRk9SQ0VEIiwgIlVTRV9OQVRJVkUiLCAiVklSVFVBTF9QUk9UT1RZUEUiLCAic291cmNlUHJvcGVydHkiLCAidGFyZ2V0UHJvcGVydHkiLCAibmF0aXZlUHJvcGVydHkiLCAicmVzdWx0UHJvcGVydHkiLCAiVEFSR0VUIiwgInRhcmdldCIsICJHTE9CQUwiLCAiU1RBVElDIiwgInN0YXQiLCAiUFJPVE8iLCAicHJvdG8iLCAibmF0aXZlU291cmNlIiwgInRhcmdldFByb3RvdHlwZSIsICJmb3JjZWQiLCAiZG9udENhbGxHZXRTZXQiLCAid3JhcCIsICJyZWFsIiwgImNlaWwiLCAiZmxvb3IiLCAidHJ1bmMiLCAieCIsICJuIiwgInRvSW50ZWdlck9ySW5maW5pdHkiLCAibnVtYmVyIiwgIm1heCIsICJtaW4iLCAidG9BYnNvbHV0ZUluZGV4IiwgImluZGV4IiwgImludGVnZXIiLCAidG9MZW5ndGgiLCAibGVuZ3RoT2ZBcnJheUxpa2UiLCAib2JqIiwgImNyZWF0ZU1ldGhvZCIsICJJU19JTkNMVURFUyIsICIkdGhpcyIsICJlbCIsICJmcm9tSW5kZXgiLCAiYXJyYXlJbmNsdWRlcyIsICJpbmNsdWRlcyIsICJpbmRleE9mIiwgImhpZGRlbktleXMiLCAib2JqZWN0S2V5c0ludGVybmFsIiwgIm5hbWVzIiwgImkiLCAiZW51bUJ1Z0tleXMiLCAiaW50ZXJuYWxPYmplY3RLZXlzIiwgIm9iamVjdEtleXMiLCAia2V5cyIsICJvYmplY3RHZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlIiwgIiRhc3NpZ24iLCAiYXNzaWduIiwgImNvbmNhdCIsICJvYmplY3RBc3NpZ24iLCAiQSIsICJCIiwgImFscGhhYmV0IiwgImZvckVhY2giLCAiY2hyIiwgImpvaW4iLCAiVCIsICJhcmd1bWVudHNMZW5ndGgiLCAiUyIsICJqIiwgImFyaXR5IiwgImFycmF5U2xpY2UiLCAiJEZ1bmN0aW9uIiwgImZhY3RvcmllcyIsICJmdW5jdGlvbkJpbmQiLCAiRiIsICJQcm90b3R5cGUiLCAicGFydEFyZ3MiLCAiYm91bmRGdW5jdGlvbiIsICJhcmdzIiwgIkMiLCAiYXJnc0xlbmd0aCIsICJsaXN0IiwgImVudHJ5VmlydHVhbCIsICJDT05TVFJVQ1RPUiIsICJwYXJlbnQiLCAib3duIiwgImRyYXdDaXJjbGUiLCAiY3R4IiwgInkiLCAiciIsICJiZWdpblBhdGgiLCAiYXJjIiwgIlBJIiwgImNsb3NlUGF0aCIsICJkcmF3Um91bmRSZWN0IiwgInciLCAiaCIsICJyMmQiLCAibW92ZVRvIiwgImxpbmVUbyIsICJkcmF3RWxsaXBzZSIsICJrYXBwYSIsICJveCIsICJveSIsICJ4ZSIsICJ5ZSIsICJ4bSIsICJ5bSIsICJiZXppZXJDdXJ2ZVRvIiwgImRyYXdEYXRhYmFzZSIsICJoRWxsaXBzZSIsICJ5bWIiLCAieWViIiwgImRyYXdEYXNoZWRMaW5lIiwgIngyIiwgInkyIiwgInBhdHRlcm4iLCAicGF0dGVybkxlbmd0aCIsICJkeCIsICJkeSIsICJzbG9wZSIsICJkaXN0UmVtYWluaW5nIiwgInNxcnQiLCAicGF0dGVybkluZGV4IiwgImRyYXciLCAieFN0ZXAiLCAiZGFzaExlbmd0aCIsICJzaGFwZU1hcCIsICJjaXJjbGUiLCAiZGFzaGVkTGluZSIsICJkYXRhYmFzZSIsICJkaWFtb25kIiwgImVsbGlwc2UiLCAiZWxsaXBzZV92aXMiLCAiaGV4YWdvbiIsICJjb3MiLCAic2luIiwgInJvdW5kUmVjdCIsICJzcXVhcmUiLCAicmVjdCIsICJzdGFyIiwgInJhZGl1cyIsICJ0cmlhbmdsZSIsICJzIiwgInMyIiwgImlyIiwgInRyaWFuZ2xlRG93biIsICJ0IiwgIkVtaXR0ZXIiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAib24iLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJldmVudCIsICJfY2FsbGJhY2tzIiwgIm9uY2UiLCAib2ZmIiwgInJlbW92ZUxpc3RlbmVyIiwgInJlbW92ZUFsbExpc3RlbmVycyIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgImNiIiwgImNhbGxiYWNrcyIsICJzcGxpY2UiLCAiZW1pdCIsICJBcnJheSIsICJsZW4iLCAibGlzdGVuZXJzIiwgImhhc0xpc3RlbmVycyIsICJzZXQiLCAiaGFzIiwgInRvU3RyaW5nVGFnU3VwcG9ydCIsICJUT19TVFJJTkdfVEFHX1NVUFBPUlQiLCAiVE9fU1RSSU5HX1RBRyIsICJDT1JSRUNUX0FSR1VNRU5UUyIsICJ0YWciLCAiY2FsbGVlIiwgImNoYXJBdCIsICJjaGFyQ29kZUF0IiwgIkNPTlZFUlRfVE9fU1RSSU5HIiwgInBvcyIsICJmaXJzdCIsICJzZWNvbmQiLCAicG9zaXRpb24iLCAic2l6ZSIsICJzdHJpbmdNdWx0aWJ5dGUiLCAiY29kZUF0IiwgIldlYWtNYXAiLCAid2Vha01hcEJhc2ljRGV0ZWN0aW9uIiwgInNoYXJlZEtleSIsICJOQVRJVkVfV0VBS19NQVAiLCAiT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQiLCAic3RhdGUiLCAibWV0YWRhdGEiLCAiZmFjYWRlIiwgIlNUQVRFIiwgImludGVybmFsU3RhdGUiLCAiZW5mb3JjZSIsICJnZXR0ZXJGb3IiLCAiVFlQRSIsICJ0eXBlIiwgImdldERlc2NyaXB0b3IiLCAiZnVuY3Rpb25OYW1lIiwgIlBST1BFUiIsICJvYmplY3REZWZpbmVQcm9wZXJ0aWVzIiwgImRlZmluZVByb3BlcnRpZXMiLCAiUHJvcGVydGllcyIsICJwcm9wcyIsICJhY3RpdmVYRG9jdW1lbnQiLCAiaHRtbCIsICJkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlIiwgIlBST1RPVFlQRSIsICJTQ1JJUFQiLCAiSUVfUFJPVE8iLCAiRW1wdHlDb25zdHJ1Y3RvciIsICJzY3JpcHRUYWciLCAiY29udGVudCIsICJMVCIsICJOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYIiwgIndyaXRlIiwgImNsb3NlIiwgInRlbXAiLCAicGFyZW50V2luZG93IiwgIk51bGxQcm90b09iamVjdCIsICJBY3RpdmVYT2JqZWN0IiwgImlmcmFtZURvY3VtZW50IiwgImlmcmFtZSIsICJKUyIsICJkb21haW4iLCAic3R5bGUiLCAiZGlzcGxheSIsICJhcHBlbmRDaGlsZCIsICJzcmMiLCAiY29udGVudFdpbmRvdyIsICJvcGVuIiwgIkl0ZXJhdG9yUHJvdG90eXBlIiwgIlByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSIsICJhcnJheUl0ZXJhdG9yIiwgIm9iamVjdENyZWF0ZSIsICJjcmVhdGUiLCAiY29ycmVjdFByb3RvdHlwZUdldHRlciIsICJjb25zdHJ1Y3RvciIsICJnZXRQcm90b3R5cGVPZiIsICJDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIiLCAiT2JqZWN0UHJvdG90eXBlIiwgIm9iamVjdEdldFByb3RvdHlwZU9mIiwgImRlZmluZUJ1aWx0SW4iLCAiSVRFUkFUT1IiLCAiQlVHR1lfU0FGQVJJX0lURVJBVE9SUyIsICJORVdfSVRFUkFUT1JfUFJPVE9UWVBFIiwgIml0ZXJhdG9yc0NvcmUiLCAib2JqZWN0VG9TdHJpbmciLCAic2V0VG9TdHJpbmdUYWciLCAiVEFHIiwgIlNFVF9NRVRIT0QiLCAiaXRlcmF0b3JzIiwgIkl0ZXJhdG9ycyIsICJyZXR1cm5UaGlzIiwgInVuY3VycnlUaGlzQWNjZXNzb3IiLCAiYVBvc3NpYmxlUHJvdG90eXBlIiwgIm9iamVjdFNldFByb3RvdHlwZU9mIiwgInNldFByb3RvdHlwZU9mIiwgInNldHRlciIsICJDT1JSRUNUX1NFVFRFUiIsICJfX3Byb3RvX18iLCAiJCIsICJGdW5jdGlvbk5hbWUiLCAiY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciIsICJJdGVyYXRvckNvbnN0cnVjdG9yIiwgIk5BTUUiLCAibmV4dCIsICJFTlVNRVJBQkxFX05FWFQiLCAicmVxdWlyZSQkMTAiLCAicmVxdWlyZSQkMTIiLCAiSXRlcmF0b3JzQ29yZSIsICJyZXF1aXJlJCQxMyIsICJQUk9QRVJfRlVOQ1RJT05fTkFNRSIsICJyZXF1aXJlJCQxMSIsICJLRVlTIiwgIlZBTFVFUyIsICJFTlRSSUVTIiwgIml0ZXJhdG9yRGVmaW5lIiwgIkl0ZXJhYmxlIiwgIkRFRkFVTFQiLCAiSVNfU0VUIiwgIkN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSIsICJtZXRob2RzIiwgIktFWSIsICJnZXRJdGVyYXRpb25NZXRob2QiLCAiS0lORCIsICJkZWZhdWx0SXRlcmF0b3IiLCAiSXRlcmFibGVQcm90b3R5cGUiLCAiSU5DT1JSRUNUX1ZBTFVFU19OQU1FIiwgIm5hdGl2ZUl0ZXJhdG9yIiwgImFueU5hdGl2ZUl0ZXJhdG9yIiwgImVudHJpZXMiLCAidmFsdWVzIiwgImNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QiLCAiZG9uZSIsICJJbnRlcm5hbFN0YXRlTW9kdWxlIiwgImRlZmluZUl0ZXJhdG9yIiwgIlNUUklOR19JVEVSQVRPUiIsICJzZXRJbnRlcm5hbFN0YXRlIiwgImdldEludGVybmFsU3RhdGUiLCAiaXRlcmF0ZWQiLCAicG9pbnQiLCAidW5kZWZpbmVkIiwgIml0ZXJhdG9yQ2xvc2UiLCAia2luZCIsICJpbm5lclJlc3VsdCIsICJpbm5lckVycm9yIiwgIkFycmF5UHJvdG90eXBlIiwgImlzQXJyYXlJdGVyYXRvck1ldGhvZCIsICJmdW5jdGlvblRvU3RyaW5nIiwgImluc3BlY3RTb3VyY2UiLCAibm9vcCIsICJlbXB0eSIsICJjb25zdHJ1Y3QiLCAiY29uc3RydWN0b3JSZWdFeHAiLCAiSU5DT1JSRUNUX1RPX1NUUklORyIsICJpc0NvbnN0cnVjdG9yTW9kZXJuIiwgImlzQ29uc3RydWN0b3JMZWdhY3kiLCAiaXNDb25zdHJ1Y3RvciIsICJjYWxsZWQiLCAiY3JlYXRlUHJvcGVydHkiLCAicHJvcGVydHlLZXkiLCAiZ2V0SXRlcmF0b3JNZXRob2QiLCAiZ2V0SXRlcmF0b3IiLCAidXNpbmdJdGVyYXRvciIsICJpdGVyYXRvck1ldGhvZCIsICJjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nIiwgIiRBcnJheSIsICJTQUZFX0NMT1NJTkciLCAiaXRlcmF0b3JXaXRoUmV0dXJuIiwgInJldHVybiIsICJmcm9tIiwgImFycmF5TGlrZSIsICJJU19DT05TVFJVQ1RPUiIsICJtYXBmbiIsICJtYXBwaW5nIiwgInN0ZXAiLCAiY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uIiwgIlNLSVBfQ0xPU0lORyIsICJJVEVSQVRJT05fU1VQUE9SVCIsICJpdGVyYWJsZSIsICJBUlJBWV9JVEVSQVRPUiIsICJkZWZpbmVJdGVyYXRvciQxIiwgIkFyZ3VtZW50cyIsICJnZXRJdGVyYXRvck1ldGhvZF8xIiwgIkRPTUl0ZXJhYmxlcyIsICJDU1NSdWxlTGlzdCIsICJDU1NTdHlsZURlY2xhcmF0aW9uIiwgIkNTU1ZhbHVlTGlzdCIsICJDbGllbnRSZWN0TGlzdCIsICJET01SZWN0TGlzdCIsICJET01TdHJpbmdMaXN0IiwgIkRPTVRva2VuTGlzdCIsICJEYXRhVHJhbnNmZXJJdGVtTGlzdCIsICJGaWxlTGlzdCIsICJIVE1MQWxsQ29sbGVjdGlvbiIsICJIVE1MQ29sbGVjdGlvbiIsICJIVE1MRm9ybUVsZW1lbnQiLCAiSFRNTFNlbGVjdEVsZW1lbnQiLCAiTWVkaWFMaXN0IiwgIk1pbWVUeXBlQXJyYXkiLCAiTmFtZWROb2RlTWFwIiwgIk5vZGVMaXN0IiwgIlBhaW50UmVxdWVzdExpc3QiLCAiUGx1Z2luIiwgIlBsdWdpbkFycmF5IiwgIlNWR0xlbmd0aExpc3QiLCAiU1ZHTnVtYmVyTGlzdCIsICJTVkdQYXRoU2VnTGlzdCIsICJTVkdQb2ludExpc3QiLCAiU1ZHU3RyaW5nTGlzdCIsICJTVkdUcmFuc2Zvcm1MaXN0IiwgIlNvdXJjZUJ1ZmZlckxpc3QiLCAiU3R5bGVTaGVldExpc3QiLCAiVGV4dFRyYWNrQ3VlTGlzdCIsICJUZXh0VHJhY2tMaXN0IiwgIlRvdWNoTGlzdCIsICJDT0xMRUNUSU9OX05BTUUiLCAiQ29sbGVjdGlvbiIsICJDb2xsZWN0aW9uUHJvdG90eXBlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJpbnN0YW5jZSIsICJDb25zdHJ1Y3RvciIsICIkJEsiLCAiZGVzYyIsICJpc0FycmF5IiwgImRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciIsICJTUEVDSUVTIiwgImFycmF5U3BlY2llc0NvbnN0cnVjdG9yIiwgIm9yaWdpbmFsQXJyYXkiLCAiYXJyYXlTcGVjaWVzQ3JlYXRlIiwgImFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQiLCAiTUVUSE9EX05BTUUiLCAiYXJyYXkiLCAiZm9vIiwgIkJvb2xlYW4iLCAiSVNfQ09OQ0FUX1NQUkVBREFCTEUiLCAiSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCIsICJpc0NvbmNhdFNwcmVhZGFibGUiLCAic3ByZWFkYWJsZSIsICJhcmciLCAiayIsICJFIiwgIm9iamVjdEdldE93blByb3BlcnR5TmFtZXMiLCAiZ2V0T3duUHJvcGVydHlOYW1lcyIsICJhcnJheVNsaWNlU2ltcGxlIiwgInN0YXJ0IiwgImVuZCIsICJmaW4iLCAiJGdldE93blByb3BlcnR5TmFtZXMiLCAid2luZG93TmFtZXMiLCAib2JqZWN0R2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsIiwgImRlZmluZUJ1aWx0SW5BY2Nlc3NvciIsICJ3ZWxsS25vd25TeW1ib2xXcmFwcGVkIiwgIndyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUiLCAid2VsbEtub3duU3ltYm9sRGVmaW5lIiwgInN5bWJvbERlZmluZVRvUHJpbWl0aXZlIiwgIlN5bWJvbFByb3RvdHlwZSIsICJoaW50IiwgIklTX01BUCIsICJJU19GSUxURVIiLCAiSVNfU09NRSIsICJJU19FVkVSWSIsICJJU19GSU5EX0lOREVYIiwgIklTX0ZJTFRFUl9SRUpFQ1QiLCAiTk9fSE9MRVMiLCAiY2FsbGJhY2tmbiIsICJzcGVjaWZpY0NyZWF0ZSIsICJhcnJheUl0ZXJhdGlvbiIsICJtYXAiLCAiZmlsdGVyIiwgInNvbWUiLCAiZXZlcnkiLCAiZmluZCIsICJmaW5kSW5kZXgiLCAiZmlsdGVyUmVqZWN0IiwgIiR0b1N0cmluZyIsICJyZXF1aXJlJCQxNCIsICJuYXRpdmVPYmplY3RDcmVhdGUiLCAicmVxdWlyZSQkMTUiLCAicmVxdWlyZSQkMTYiLCAiZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSIsICJyZXF1aXJlJCQxNyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwiLCAicmVxdWlyZSQkMTgiLCAicmVxdWlyZSQkMTkiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlIiwgInJlcXVpcmUkJDIwIiwgInJlcXVpcmUkJDIxIiwgInJlcXVpcmUkJDIyIiwgInJlcXVpcmUkJDIzIiwgInJlcXVpcmUkJDI0IiwgInJlcXVpcmUkJDI1IiwgInJlcXVpcmUkJDI2IiwgInJlcXVpcmUkJDI4IiwgInJlcXVpcmUkJDI5IiwgInJlcXVpcmUkJDMwIiwgInJlcXVpcmUkJDMxIiwgImRlZmluZVdlbGxLbm93blN5bWJvbCIsICJyZXF1aXJlJCQzMiIsICJkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSIsICJyZXF1aXJlJCQzMyIsICJyZXF1aXJlJCQzNCIsICJyZXF1aXJlJCQzNSIsICIkZm9yRWFjaCIsICJyZXF1aXJlJCQzNiIsICJISURERU4iLCAicmVxdWlyZSQkMjciLCAiU1lNQk9MIiwgIlJhbmdlRXJyb3IiLCAiUU9iamVjdCIsICJuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAibmF0aXZlRGVmaW5lUHJvcGVydHkiLCAibmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyIsICJuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJBbGxTeW1ib2xzIiwgIk9iamVjdFByb3RvdHlwZVN5bWJvbHMiLCAiVVNFX1NFVFRFUiIsICJmaW5kQ2hpbGQiLCAiZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSIsICJPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yIiwgInNldFN5bWJvbERlc2NyaXB0b3IiLCAiZGVzY3JpcHRpb24iLCAiJGRlZmluZVByb3BlcnRpZXMiLCAicHJvcGVydGllcyIsICIkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwgIklTX09CSkVDVF9QUk9UT1RZUEUiLCAiJCRJIiwgIiRmb3JFYWNoJDEiLCAidXNlU2V0dGVyIiwgInVzZVNpbXBsZSIsICJzeW1ib2xSZWdpc3RyeURldGVjdGlvbiIsICJrZXlGb3IiLCAiTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSIsICJTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5IiwgIlN5bWJvbFRvU3RyaW5nUmVnaXN0cnkiLCAiZm9yIiwgInN5bSIsICJnZXRSZXBsYWNlckZ1bmN0aW9uIiwgInJlcGxhY2VyIiwgInJhd0xlbmd0aCIsICJlbGVtZW50IiwgImtleXNMZW5ndGgiLCAicm9vdCIsICIkc3RyaW5naWZ5IiwgIm51bWJlclRvU3RyaW5nIiwgInRlc3RlciIsICJsb3ciLCAiaGkiLCAiV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OIiwgIklMTF9GT1JNRURfVU5JQ09ERSIsICJzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCIsICIkcmVwbGFjZXIiLCAiZml4SWxsRm9ybWVkIiwgIm9mZnNldCIsICJwcmV2IiwgInN0cmluZ2lmeSIsICJzcGFjZSIsICJKU09OIiwgIk1FVEFEQVRBIiwgInRoaXNTeW1ib2xWYWx1ZSIsICJzeW1ib2xJc1JlZ2lzdGVyZWQiLCAiaXNSZWdpc3RlcmVkU3ltYm9sIiwgIiRpc1dlbGxLbm93blN5bWJvbCIsICJpc1dlbGxLbm93blN5bWJvbCIsICJzeW1ib2xLZXlzIiwgInN5bWJvbEtleXNMZW5ndGgiLCAic3ltYm9sS2V5IiwgInN5bWJvbElzV2VsbEtub3duIiwgImlzUmVnaXN0ZXJlZCIsICJpc1dlbGxLbm93biIsICJfdHlwZW9mIiwgIm8iLCAiX1N5bWJvbCIsICJfU3ltYm9sJGl0ZXJhdG9yIiwgIl90b1Byb3BlcnR5S2V5IiwgInByaW0iLCAiX1N5bWJvbCR0b1ByaW1pdGl2ZSIsICJyZXMiLCAiTnVtYmVyIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9PYmplY3QkZGVmaW5lUHJvcGVydHkiLCAiX2NyZWF0ZUNsYXNzIiwgInByb3RvUHJvcHMiLCAic3RhdGljUHJvcHMiLCAiYXJyYXlTZXRMZW5ndGgiLCAic2V0QXJyYXlMZW5ndGgiLCAicHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoIiwgIml0ZW0iLCAiYXJnQ291bnQiLCAibmF0aXZlU2xpY2UiLCAiSEFTX1NQRUNJRVNfU1VQUE9SVCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJhcnIiLCAiYXJyMiIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAibWluTGVuIiwgIl9jb250ZXh0IiwgImFycmF5TGlrZVRvQXJyYXkiLCAiX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJfQXJyYXkkZnJvbSIsICJfc2xpY2VkVG9BcnJheSIsICJfQXJyYXkkaXNBcnJheSIsICJsIiwgIl9nZXRJdGVyYXRvck1ldGhvZCIsICJlIiwgInUiLCAiX3B1c2hJbnN0YW5jZVByb3BlcnR5IiwgInVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIm5vbkl0ZXJhYmxlUmVzdCIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiaXRlciIsICJub25JdGVyYWJsZVNwcmVhZCIsICJvd25LZXlzIiwgIiRtYXAiLCAibmF0aXZlS2V5cyIsICIkRGF0ZSIsICJEYXRlIiwgInRoaXNUaW1lVmFsdWUiLCAiZ2V0VGltZSIsICIkJHUiLCAibm93IiwgImFycmF5TWV0aG9kSXNTdHJpY3QiLCAiYXJyYXlGb3JFYWNoIiwgIm5hdGl2ZVJldmVyc2UiLCAicmV2ZXJzZSIsICIkJHMiLCAiZGVsZXRlUHJvcGVydHlPclRocm93IiwgImRlbGV0ZUNvdW50IiwgImluc2VydENvdW50IiwgImFjdHVhbERlbGV0ZUNvdW50IiwgInRvIiwgImFjdHVhbFN0YXJ0IiwgIiRpbmNsdWRlcyIsICJNQVRDSCIsICJpc1JlZ0V4cCIsICJub3RBUmVnRXhwIiwgImNvcnJlY3RJc1JlZ0V4cExvZ2ljIiwgInJlZ2V4cCIsICJlcnJvcjEiLCAiZXJyb3IyIiwgInN0cmluZ0luZGV4T2YiLCAic2VhcmNoU3RyaW5nIiwgImFycmF5TWV0aG9kIiwgInN0cmluZ01ldGhvZCIsICJTdHJpbmdQcm90b3R5cGUiLCAibmF0aXZlR2V0UHJvdG90eXBlT2YiLCAiJGZpbHRlciIsICJ3aGl0ZXNwYWNlcyIsICJsdHJpbSIsICJSZWdFeHAiLCAicnRyaW0iLCAic3RyaW5nVHJpbSIsICJ0cmltIiwgIiRwYXJzZUludCIsICJwYXJzZUludCIsICJoZXgiLCAibnVtYmVyUGFyc2VJbnQiLCAicmFkaXgiLCAiJGluZGV4T2YiLCAibmF0aXZlSW5kZXhPZiIsICJORUdBVElWRV9aRVJPIiwgInNlYXJjaEVsZW1lbnQiLCAiRCIsICJlbmdpbmVJc0J1biIsICJCdW4iLCAiRU5HSU5FX0lTX0JVTiIsICJVU0VSX0FHRU5UIiwgInZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoIiwgInBhc3NlZCIsICJyZXF1aXJlZCIsICJXUkFQIiwgInNjaGVkdWxlcnNGaXgiLCAic2NoZWR1bGVyIiwgImhhc1RpbWVBcmciLCAiZmlyc3RQYXJhbUluZGV4IiwgImhhbmRsZXIiLCAidGltZW91dCIsICJib3VuZEFyZ3MiLCAicGFyYW1zIiwgImNhbGxiYWNrIiwgInNldEludGVydmFsIiwgInNldFRpbWVvdXQiLCAiZmlsbCIsICJlbmRQb3MiLCAiX2V4dGVuZHMiLCAiX2luaGVyaXRzTG9vc2UiLCAic3ViQ2xhc3MiLCAic3VwZXJDbGFzcyIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIlJlZmVyZW5jZUVycm9yIiwgIm91dHB1dCIsICJuZXh0S2V5IiwgIndpbiIsICJhc3NpZ24kMSIsICJWRU5ET1JfUFJFRklYRVMiLCAiVEVTVF9FTEVNRU5UIiwgInJvdW5kIiwgImFicyIsICJwcmVmaXhlZCIsICJwcm9wZXJ0eSIsICJwcmVmaXgiLCAicHJvcCIsICJjYW1lbFByb3AiLCAidG9VcHBlckNhc2UiLCAiUFJFRklYRURfVE9VQ0hfQUNUSU9OIiwgIk5BVElWRV9UT1VDSF9BQ1RJT04iLCAiVE9VQ0hfQUNUSU9OX0NPTVBVVEUiLCAiVE9VQ0hfQUNUSU9OX0FVVE8iLCAiVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTiIsICJUT1VDSF9BQ1RJT05fTk9ORSIsICJUT1VDSF9BQ1RJT05fUEFOX1giLCAiVE9VQ0hfQUNUSU9OX1BBTl9ZIiwgIlRPVUNIX0FDVElPTl9NQVAiLCAidG91Y2hNYXAiLCAiY3NzU3VwcG9ydHMiLCAiQ1NTIiwgInN1cHBvcnRzIiwgImdldFRvdWNoQWN0aW9uUHJvcHMiLCAiU1VQUE9SVF9UT1VDSCIsICJTVVBQT1JUX1BPSU5URVJfRVZFTlRTIiwgIlNVUFBPUlRfT05MWV9UT1VDSCIsICJJTlBVVF9UWVBFX1RPVUNIIiwgIklOUFVUX1RZUEVfTU9VU0UiLCAiQ09NUFVURV9JTlRFUlZBTCIsICJJTlBVVF9TVEFSVCIsICJJTlBVVF9FTkQiLCAiSU5QVVRfQ0FOQ0VMIiwgIkRJUkVDVElPTl9OT05FIiwgIkRJUkVDVElPTl9MRUZUIiwgIkRJUkVDVElPTl9SSUdIVCIsICJESVJFQ1RJT05fVVAiLCAiRElSRUNUSU9OX0RPV04iLCAiRElSRUNUSU9OX0hPUklaT05UQUwiLCAiRElSRUNUSU9OX1ZFUlRJQ0FMIiwgIkRJUkVDVElPTl9BTEwiLCAiUFJPUFNfWFkiLCAiUFJPUFNfQ0xJRU5UX1hZIiwgImVhY2giLCAiY29udGV4dCIsICJib29sT3JGbiIsICJpblN0ciIsICJzdHIiLCAiVG91Y2hBY3Rpb24iLCAibWFuYWdlciIsICJfcHJvdG8iLCAiY29tcHV0ZSIsICJhY3Rpb25zIiwgInVwZGF0ZSIsICJ0b3VjaEFjdGlvbiIsICJyZWNvZ25pemVycyIsICJyZWNvZ25pemVyIiwgImVuYWJsZSIsICJnZXRUb3VjaEFjdGlvbiIsICJoYXNQYW5YIiwgImhhc1BhblkiLCAicHJldmVudERlZmF1bHRzIiwgInNyY0V2ZW50IiwgImRpcmVjdGlvbiIsICJvZmZzZXREaXJlY3Rpb24iLCAic2Vzc2lvbiIsICJwcmV2ZW50ZWQiLCAicHJldmVudERlZmF1bHQiLCAiaGFzTm9uZSIsICJpc1RhcFBvaW50ZXIiLCAicG9pbnRlcnMiLCAiaXNUYXBNb3ZlbWVudCIsICJkaXN0YW5jZSIsICJpc1RhcFRvdWNoVGltZSIsICJkZWx0YVRpbWUiLCAicHJldmVudFNyYyIsICJoYXNQYXJlbnQiLCAibm9kZSIsICJwYXJlbnROb2RlIiwgImdldENlbnRlciIsICJwb2ludGVyc0xlbmd0aCIsICJjbGllbnRYIiwgImNsaWVudFkiLCAic2ltcGxlQ2xvbmVJbnB1dERhdGEiLCAidGltZVN0YW1wIiwgImNlbnRlciIsICJkZWx0YVgiLCAiZGVsdGFZIiwgImdldERpc3RhbmNlIiwgInAxIiwgInAyIiwgImdldEFuZ2xlIiwgImF0YW4yIiwgImdldERpcmVjdGlvbiIsICJnZXRWZWxvY2l0eSIsICJjb21wdXRlSW5wdXREYXRhIiwgImZpcnN0SW5wdXQiLCAiZmlyc3RNdWx0aXBsZSIsICJvZmZzZXRDZW50ZXIiLCAiYW5nbGUiLCAib2Zmc2V0RGVsdGEiLCAicHJldkRlbHRhIiwgInByZXZJbnB1dCIsICJldmVudFR5cGUiLCAib3ZlcmFsbFZlbG9jaXR5IiwgIm92ZXJhbGxWZWxvY2l0eVgiLCAib3ZlcmFsbFZlbG9jaXR5WSIsICJzY2FsZSIsICJyb3RhdGlvbiIsICJtYXhQb2ludGVycyIsICJ2ZWxvY2l0eSIsICJ2ZWxvY2l0eVgiLCAidmVsb2NpdHlZIiwgImxhc3QiLCAibGFzdEludGVydmFsIiwgInYiLCAic3JjRXZlbnRUYXJnZXQiLCAiY29tcG9zZWRQYXRoIiwgImlucHV0SGFuZGxlciIsICJwb2ludGVyc0xlbiIsICJjaGFuZ2VkUG9pbnRlcnNMZW4iLCAiY2hhbmdlZFBvaW50ZXJzIiwgImlzRmlyc3QiLCAiaXNGaW5hbCIsICJyZWNvZ25pemUiLCAic3BsaXRTdHIiLCAiYWRkRXZlbnRMaXN0ZW5lcnMiLCAidHlwZXMiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lcnMiLCAiZ2V0V2luZG93Rm9yRWxlbWVudCIsICJkb2MiLCAib3duZXJEb2N1bWVudCIsICJkZWZhdWx0VmlldyIsICJJbnB1dCIsICJpbnB1dFRhcmdldCIsICJkb21IYW5kbGVyIiwgImV2IiwgImluaXQiLCAiZXZFbCIsICJldlRhcmdldCIsICJldldpbiIsICJkZXN0cm95IiwgImluQXJyYXkiLCAiZmluZEJ5S2V5IiwgIlBPSU5URVJfSU5QVVRfTUFQIiwgInBvaW50ZXJkb3duIiwgInBvaW50ZXJtb3ZlIiwgInBvaW50ZXJ1cCIsICJwb2ludGVyY2FuY2VsIiwgInBvaW50ZXJvdXQiLCAiSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSIsICJQT0lOVEVSX0VMRU1FTlRfRVZFTlRTIiwgIlBPSU5URVJfV0lORE9XX0VWRU5UUyIsICJNU1BvaW50ZXJFdmVudCIsICJQb2ludGVyRXZlbnQiLCAiUG9pbnRlckV2ZW50SW5wdXQiLCAiX0lucHV0IiwgIl90aGlzIiwgInBvaW50ZXJFdmVudHMiLCAicmVtb3ZlUG9pbnRlciIsICJldmVudFR5cGVOb3JtYWxpemVkIiwgInBvaW50ZXJUeXBlIiwgImlzVG91Y2giLCAic3RvcmVJbmRleCIsICJwb2ludGVySWQiLCAiYnV0dG9uIiwgInRvQXJyYXkiLCAidW5pcXVlQXJyYXkiLCAic29ydCIsICJyZXN1bHRzIiwgIlRPVUNIX0lOUFVUX01BUCIsICJ0b3VjaHN0YXJ0IiwgInRvdWNobW92ZSIsICJ0b3VjaGVuZCIsICJ0b3VjaGNhbmNlbCIsICJUb3VjaElucHV0IiwgInRhcmdldElkcyIsICJ0b3VjaGVzIiwgImdldFRvdWNoZXMiLCAidGFyZ2V0VG91Y2hlcyIsICJhbGxUb3VjaGVzIiwgImlkZW50aWZpZXIiLCAiY2hhbmdlZFRvdWNoZXMiLCAiY2hhbmdlZFRhcmdldFRvdWNoZXMiLCAidG91Y2giLCAiTU9VU0VfSU5QVVRfTUFQIiwgIm1vdXNlZG93biIsICJtb3VzZW1vdmUiLCAibW91c2V1cCIsICJNb3VzZUlucHV0IiwgInByZXNzZWQiLCAid2hpY2giLCAiREVEVVBfVElNRU9VVCIsICJzZXRMYXN0VG91Y2giLCAiZXZlbnREYXRhIiwgInByaW1hcnlUb3VjaCIsICJsYXN0VG91Y2giLCAibHRzIiwgImxhc3RUb3VjaGVzIiwgInJlY29yZFRvdWNoZXMiLCAiaXNTeW50aGV0aWNFdmVudCIsICJUb3VjaE1vdXNlSW5wdXQiLCAiX21hbmFnZXIiLCAiaW5wdXRFdmVudCIsICJpbnB1dERhdGEiLCAiaXNNb3VzZSIsICJzb3VyY2VDYXBhYmlsaXRpZXMiLCAiZmlyZXNUb3VjaEV2ZW50cyIsICJtb3VzZSIsICJpbnZva2VBcnJheUFyZyIsICJTVEFURV9GQUlMRUQiLCAiX3VuaXF1ZUlkIiwgImdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIiLCAib3RoZXJSZWNvZ25pemVyIiwgInN0YXRlU3RyIiwgIlJlY29nbml6ZXIiLCAic2ltdWx0YW5lb3VzIiwgInJlcXVpcmVGYWlsIiwgInJlY29nbml6ZVdpdGgiLCAiZHJvcFJlY29nbml6ZVdpdGgiLCAicmVxdWlyZUZhaWx1cmUiLCAiZHJvcFJlcXVpcmVGYWlsdXJlIiwgImhhc1JlcXVpcmVGYWlsdXJlcyIsICJjYW5SZWNvZ25pemVXaXRoIiwgImFkZGl0aW9uYWxFdmVudCIsICJ0cnlFbWl0IiwgImNhbkVtaXQiLCAiaW5wdXREYXRhQ2xvbmUiLCAicmVzZXQiLCAiVGFwUmVjb2duaXplciIsICJfUmVjb2duaXplciIsICJ0YXBzIiwgImludGVydmFsIiwgInRpbWUiLCAidGhyZXNob2xkIiwgInBvc1RocmVzaG9sZCIsICJwVGltZSIsICJwQ2VudGVyIiwgIl90aW1lciIsICJfaW5wdXQiLCAiY291bnQiLCAiX3RoaXMyIiwgInZhbGlkUG9pbnRlcnMiLCAidmFsaWRNb3ZlbWVudCIsICJ2YWxpZFRvdWNoVGltZSIsICJmYWlsVGltZW91dCIsICJ2YWxpZEludGVydmFsIiwgInZhbGlkTXVsdGlUYXAiLCAiX3RoaXMzIiwgImNsZWFyVGltZW91dCIsICJ0YXBDb3VudCIsICJBdHRyUmVjb2duaXplciIsICJhdHRyVGVzdCIsICJvcHRpb25Qb2ludGVycyIsICJpc1JlY29nbml6ZWQiLCAiaXNWYWxpZCIsICJkaXJlY3Rpb25TdHIiLCAiUGFuUmVjb2duaXplciIsICJfQXR0clJlY29nbml6ZXIiLCAicFgiLCAicFkiLCAiZGlyZWN0aW9uVGVzdCIsICJoYXNNb3ZlZCIsICJTd2lwZVJlY29nbml6ZXIiLCAiUGluY2hSZWNvZ25pemVyIiwgImluT3V0IiwgIlJvdGF0ZVJlY29nbml6ZXIiLCAiUHJlc3NSZWNvZ25pemVyIiwgInZhbGlkVGltZSIsICJkZWZhdWx0cyIsICJkb21FdmVudHMiLCAiaW5wdXRDbGFzcyIsICJjc3NQcm9wcyIsICJ1c2VyU2VsZWN0IiwgInRvdWNoU2VsZWN0IiwgInRvdWNoQ2FsbG91dCIsICJjb250ZW50Wm9vbWluZyIsICJ1c2VyRHJhZyIsICJ0YXBIaWdobGlnaHRDb2xvciIsICJwcmVzZXQiLCAidG9nZ2xlQ3NzUHJvcHMiLCAiYWRkIiwgIm9sZENzc1Byb3BzIiwgIk1hbmFnZXIiLCAiaGFuZGxlcnMiLCAic3RvcCIsICJmb3JjZSIsICJzdG9wcGVkIiwgImN1clJlY29nbml6ZXIiLCAiZXhpc3RpbmciLCAicmVtb3ZlIiwgInRhcmdldFJlY29nbml6ZXIiLCAiZXZlbnRzIiwgImdlc3R1cmVFdmVudCIsICJjcmVhdGVFdmVudCIsICJpbml0RXZlbnQiLCAiZ2VzdHVyZSIsICJkaXNwYXRjaEV2ZW50IiwgIlNJTkdMRV9UT1VDSF9JTlBVVF9NQVAiLCAiU2luZ2xlVG91Y2hJbnB1dCIsICJzdGFydGVkIiwgIm5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMiLCAiY2hhbmdlZCIsICJkZXByZWNhdGUiLCAibWVzc2FnZSIsICJkZXByZWNhdGlvbk1lc3NhZ2UiLCAiRXJyb3IiLCAic3RhY2siLCAibG9nIiwgImNvbnNvbGUiLCAid2FybiIsICJleHRlbmQiLCAiZGVzdCIsICJtZXJnZSIsICJpbmhlcml0IiwgImNoaWxkIiwgImJhc2UiLCAiY2hpbGRQIiwgImJhc2VQIiwgIl9zdXBlciIsICJiaW5kRm4iLCAiSGFtbWVyIiwgIlZFUlNJT04iLCAiSU5QVVRfTU9WRSIsICJTVEFURV9QT1NTSUJMRSIsICJTVEFURV9CRUdBTiIsICJTVEFURV9DSEFOR0VEIiwgIlNUQVRFX0VOREVEIiwgIlNUQVRFX1JFQ09HTklaRUQiLCAiU1RBVEVfQ0FOQ0VMTEVEIiwgIlRhcCIsICJQYW4iLCAiU3dpcGUiLCAiUGluY2giLCAiUm90YXRlIiwgIlByZXNzIiwgIlJlYWxIYW1tZXIiLCAiZCIsICJwIiwgInBhcnNlRE9UIiwgImRvdCIsICJncmFwaCIsICJnZXRUb2tlbiIsICJ0b2tlbiIsICJzdHJpY3QiLCAidG9rZW5UeXBlIiwgIlRPS0VOVFlQRSIsICJJREVOVElGSUVSIiwgIm5ld1N5bnRheEVycm9yIiwgInBhcnNlU3RhdGVtZW50cyIsICJlZGdlIiwgInBhcnNlR3JhcGgiLCAiTk9ERV9BVFRSX01BUFBJTkciLCAiZm9udHNpemUiLCAiZm9udGNvbG9yIiwgImxhYmVsZm9udGNvbG9yIiwgImZvbnRuYW1lIiwgImNvbG9yIiwgImZpbGxjb2xvciIsICJ0b29sdGlwIiwgImxhYmVsdG9vbHRpcCIsICJFREdFX0FUVFJfTUFQUElORyIsICJfT2JqZWN0JGNyZWF0ZSIsICJOVUxMIiwgIkRFTElNSVRFUiIsICJVTktOT1dOIiwgIkRFTElNSVRFUlMiLCAibmV4dFByZXZpZXciLCAiaXNBbHBoYU51bWVyaWMiLCAiY2hhckNvZGUiLCAic2V0VmFsdWUiLCAic2hpZnQiLCAiYWRkTm9kZSIsICJncmFwaHMiLCAibm9kZXMiLCAiYXR0ciIsICJnIiwgIl9pbmRleE9mSW5zdGFuY2VQcm9wZXJ0eSIsICJhZGRFZGdlIiwgImVkZ2VzIiwgImNyZWF0ZUVkZ2UiLCAiZW5hYmxlZCIsICJhcnJvd3MiLCAiaXNDb21tZW50IiwgImMyIiwgImlzTmFOIiwgIlN5bnRheEVycm9yIiwgImNob3AiLCAicGFyc2VTdGF0ZW1lbnQiLCAic3ViZ3JhcGgiLCAicGFyc2VTdWJncmFwaCIsICJwYXJzZUVkZ2UiLCAicGFyc2VBdHRyaWJ1dGVMaXN0IiwgInN1YmdyYXBocyIsICJub2ZfYXR0cl9saXN0IiwgImVkZ2VTdHlsZXMiLCAiZGFzaGVkIiwgInNvbGlkIiwgImRvdHRlZCIsICJhcnJvd1R5cGVzIiwgImJveCIsICJjcm93IiwgImN1cnZlIiwgImljdXJ2ZSIsICJub3JtYWwiLCAiaW52IiwgInRlZSIsICJ2ZWUiLCAiYXR0cl9saXN0IiwgImF0dHJfbmFtZXMiLCAiX2luY2x1ZGVzSW5zdGFuY2VQcm9wZXJ0eSIsICJpZHgiLCAiZGlyIiwgImZyb21fdHlwZSIsICJ0b190eXBlIiwgImRpcl90eXBlIiwgIl9zcGxpY2VJbnN0YW5jZVByb3BlcnR5IiwgImlkeF9hcnJvdyIsICJ0bXBfYXR0cl9saXN0IiwgInRleHQiLCAibWF4TGVuZ3RoIiwgInN1YnN0ciIsICJzZXRQcm9wIiwgInBvcCIsICJjb252ZXJ0QXR0ciIsICJjb252ZXJ0ZWQiLCAidmlzUHJvcCIsICJfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkiLCAidmlzUHJvcEkiLCAiRE9UVG9HcmFwaCIsICJfY29udGV4dDIiLCAiZG90RGF0YSIsICJncmFwaERhdGEiLCAiZG90Tm9kZSIsICJncmFwaE5vZGUiLCAibGFiZWwiLCAiaW1hZ2UiLCAic2hhcGUiLCAiX2NvbnRleHQzIiwgImNvbnZlcnRFZGdlIiwgImRvdEVkZ2UiLCAiZ3JhcGhFZGdlIiwgIl9jb250ZXh0NCIsICJhcnJheTEiLCAiYXJyYXkyIiwgIl9jb250ZXh0NSIsICJzdWJFZGdlIiwgImVsZW0xIiwgImVsZW0yIiwgInBhcnNlR2VwaGkiLCAiZ2VwaGlKU09OIiwgIm9wdGlvbnNPYmoiLCAiaW5oZXJpdENvbG9yIiwgImZpeGVkIiwgInBhcnNlQ29sb3IiLCAiZ0VkZ2VzIiwgInZFZGdlcyIsICJfbWFwSW5zdGFuY2VQcm9wZXJ0eSIsICJnRWRnZSIsICJ2RWRnZSIsICJhdHRyaWJ1dGVzIiwgInRpdGxlIiwgImdOb2RlIiwgInZOb2RlIiwgImJhY2tncm91bmQiLCAiYm9yZGVyIiwgImhpZ2hsaWdodCIsICJob3ZlciIsICJhZGREZXNjcmlwdGlvbiIsICJiYWNrIiwgImNyZWF0ZUVkZ2VFcnJvciIsICJkZWwiLCAiZGVsZXRlQ2x1c3RlckVycm9yIiwgImVkZ2VEZXNjcmlwdGlvbiIsICJlZGl0IiwgImVkaXRDbHVzdGVyRXJyb3IiLCAiZWRpdEVkZ2UiLCAiZWRpdEVkZ2VEZXNjcmlwdGlvbiIsICJlZGl0Tm9kZSIsICJDYWNoZWRJbWFnZSIsICJOVU1fSVRFUkFUSU9OUyIsICJJbWFnZSIsICJjYW52YXMiLCAiaW5pdGlhbGl6ZWQiLCAid2lkdGgiLCAiaGVpZ2h0IiwgImgyIiwgImg0IiwgImg4IiwgImgxNiIsICJ3MiIsICJ3NCIsICJ3OCIsICJ3MTYiLCAiY29vcmRpbmF0ZXMiLCAiX2ZpbGxNaXBNYXAiLCAiZ2V0Q29udGV4dCIsICJkcmF3SW1hZ2UiLCAiaXRlcmF0aW9ucyIsICJmYWN0b3IiLCAibGVmdCIsICJ0b3AiLCAiSW1hZ2VzIiwgImltYWdlcyIsICJpbWFnZUJyb2tlbiIsICJ1cmwiLCAiYnJva2VuVXJsIiwgImltYWdlVG9Mb2FkQnJva2VuVXJsT24iLCAib25lcnJvciIsICJpbWFnZVRvUmVkcmF3V2l0aCIsICJjYWNoZWRJbWFnZSIsICJpbWciLCAib25sb2FkIiwgIl9maXhJbWFnZUNvb3JkaW5hdGVzIiwgIl9yZWRyYXdXaXRoSW1hZ2UiLCAiX3RyeWxvYWRCcm9rZW5VcmwiLCAiaW1hZ2VUb0NhY2hlIiwgImJvZHkiLCAib2Zmc2V0V2lkdGgiLCAib2Zmc2V0SGVpZ2h0IiwgInJlbW92ZUNoaWxkIiwgImFycmF5QnVmZmVyTm9uRXh0ZW5zaWJsZSIsICJBcnJheUJ1ZmZlciIsICJidWZmZXIiLCAiaXNFeHRlbnNpYmxlIiwgIkFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSIsICIkaXNFeHRlbnNpYmxlIiwgIm9iamVjdElzRXh0ZW5zaWJsZSIsICJmcmVlemluZyIsICJwcmV2ZW50RXh0ZW5zaW9ucyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUiLCAiRlJFRVpJTkciLCAiUkVRVUlSRUQiLCAic2V0TWV0YWRhdGEiLCAib2JqZWN0SUQiLCAid2Vha0RhdGEiLCAibWV0YSIsICJpbnRlcm5hbE1ldGFkYXRhTW9kdWxlIiwgImZhc3RLZXkiLCAiZ2V0V2Vha0RhdGEiLCAib25GcmVlemUiLCAiUmVzdWx0IiwgIlJlc3VsdFByb3RvdHlwZSIsICJpdGVyYXRlIiwgInVuYm91bmRGdW5jdGlvbiIsICJpdGVyRm4iLCAiQVNfRU5UUklFUyIsICJJU19SRUNPUkQiLCAiSVNfSVRFUkFUT1IiLCAiSU5URVJSVVBURUQiLCAiY29uZGl0aW9uIiwgImNhbGxGbiIsICJhbkluc3RhbmNlIiwgIkludGVybmFsTWV0YWRhdGFNb2R1bGUiLCAiaW50ZXJuYWxTdGF0ZUdldHRlckZvciIsICJjb2xsZWN0aW9uIiwgIkNPTlNUUlVDVE9SX05BTUUiLCAid3JhcHBlciIsICJjb21tb24iLCAiSVNfV0VBSyIsICJBRERFUiIsICJOYXRpdmVQcm90b3R5cGUiLCAiZXhwb3J0ZWQiLCAiSVNfQURERVIiLCAiZ2V0Q29uc3RydWN0b3IiLCAic2V0U3Ryb25nIiwgImRlZmluZUJ1aWx0SW5zIiwgInVuc2FmZSIsICJzZXRTcGVjaWVzIiwgImNvbGxlY3Rpb25TdHJvbmciLCAiZGVmaW5lIiwgInByZXZpb3VzIiwgImVudHJ5IiwgImdldEVudHJ5IiwgInJlbW92ZWQiLCAiY2xlYXIiLCAiZGVsZXRlIiwgIklURVJBVE9SX05BTUUiLCAiZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUiLCAiZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlIiwgIk1hcCIsICJHcm91cHMiLCAiX2RlZmF1bHRJbmRleCIsICJfZ3JvdXBJbmRleCIsICJfZGVmYXVsdEdyb3VwcyIsICJkZWZhdWx0T3B0aW9ucyIsICJ1c2VEZWZhdWx0R3JvdXBzIiwgIl9PYmplY3QkYXNzaWduIiwgIm9wdGlvbkZpZWxkcyIsICJncm91cE5hbWUiLCAiZ3JvdXAiLCAiX2dyb3VwcyIsICJfTWFwIiwgIl9ncm91cE5hbWVzIiwgImdyb3VwbmFtZSIsICJzaG91bGRDcmVhdGUiLCAiZ2xvYmFsSXNGaW5pdGUiLCAiaXNGaW5pdGUiLCAibnVtYmVySXNGaW5pdGUiLCAiJHNvbWUiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICIkJDkiLCAiX2RlZmluZVByb3BlcnR5IiwgIiRwYXJzZUZsb2F0IiwgInBhcnNlRmxvYXQiLCAibnVtYmVyUGFyc2VGbG9hdCIsICJJbmZpbml0eSIsICJ0cmltbWVkU3RyaW5nIiwgImNob29zaWZ5IiwgInN1Yk9wdGlvbiIsICJwaWxlIiwgImFsbG93ZWQiLCAiY2hvc2VuIiwgInRvcE1vc3QiLCAiY2hvc2VuRWRnZSIsICJwb2ludEluUmVjdCIsICJyb3RhdGlvblBvaW50IiwgInRtcCIsICJyaWdodCIsICJib3R0b20iLCAiaXNWYWxpZExhYmVsIiwgImdldFNlbGZSZWZDb29yZGluYXRlcyIsICJkaXN0YW5jZVRvQm9yZGVyIiwgInRvQm9yZGVyRGlzdCIsICJ5RnJvbU5vZGVDZW50ZXIiLCAieEZyb21Ob2RlQ2VudGVyIiwgIkxhYmVsQWNjdW11bGF0b3IiLCAibWVhc3VyZVRleHQiLCAibGluZXMiLCAibW9kIiwgImJsb2NrcyIsICJ0bXBUZXh0IiwgImJsb2NrIiwgIl92YWx1ZXNJbnN0YW5jZVByb3BlcnR5IiwgImxpbmUiLCAiX2FkZCIsICJ0bXBMaW5lcyIsICJ0bXBMaW5lIiwgImZpcnN0RW1wdHlCbG9jayIsICJ0bXBCbG9ja3MiLCAiZGV0ZXJtaW5lTGluZUhlaWdodHMiLCAiZGV0ZXJtaW5lTGFiZWxTaXplIiwgInJlbW92ZUVtcHR5QmxvY2tzIiwgInRhZ1BhdHRlcm4iLCAiXyIsICJhZnRlckJvbGQiLCAiYWZ0ZXJJdGFsIiwgImFmdGVyTW9ubyIsICJNYXJrdXBBY2N1bXVsYXRvciIsICJib2xkIiwgIml0YWwiLCAibW9ubyIsICJzcGFjaW5nIiwgIm1vZFN0YWNrIiwgIm1vZE5hbWUiLCAiY2giLCAidGFnTmFtZSIsICJlbWl0QmxvY2siLCAidW5zaGlmdCIsICJzZXRUYWciLCAiYWR2YW5jZSIsICJfdGhpcyRwcmVwYXJlUmVnRXhwMiIsICJwcmVwYXJlUmVnRXhwIiwgInJlZ0V4cCIsICJtYXRjaGVkIiwgIm5leHRUYWciLCAiY2hlY2tUYWciLCAidW5zZXRUYWciLCAicHJlcGFyZWQiLCAiTGFiZWxTcGxpdHRlciIsICJzZWxlY3RlZCIsICJnZXRGb3JtYXR0aW5nVmFsdWVzIiwgImZpbmFsaXplIiwgImZvbnQiLCAiZm9udE9wdGlvbnMiLCAibmxMaW5lcyIsICJsaW5lQ291bnQiLCAibXVsdGkiLCAic3BsaXRCbG9ja3MiLCAibWF4V2R0IiwgInNwbGl0U3RyaW5nSW50b0xpbmVzIiwgImFwcGVuZCIsICJuZXdMaW5lIiwgIm1hcmt1cFN5c3RlbSIsICJzeXN0ZW0iLCAicGFyc2VFbnRpdGllcyIsICJwYXJzZVdTIiwgInBhcnNlU3RhcnRUYWciLCAicGFyc2VFbmRUYWciLCAiYmVnaW5hYmxlIiwgInBhcnNlT3ZlcnJpZGUiLCAiZGVjb2RlTWFya3VwU3lzdGVtIiwgInNwbGl0TWFya2Rvd25CbG9ja3MiLCAic3BsaXRIdG1sQmxvY2tzIiwgImN1cldpZHRoIiwgIndvcmRzIiwgIm5ld1RleHQiLCAib3Zlck1heFdpZHRoIiwgImFwcGVuZExhc3QiLCAiZ2V0TG9uZ2VzdEZpdCIsICJ3b3JkIiwgImdldExvbmdlc3RGaXRXb3JkIiwgIm5ld1ciLCAibXVsdGlGb250U3R5bGUiLCAiTGFiZWwiLCAiZWRnZWxhYmVsIiwgInBvaW50VG9TZWxmIiwgImJhc2VTaXplIiwgInNldE9wdGlvbnMiLCAieUxpbmUiLCAiaXNFZGdlTGFiZWwiLCAiZWxlbWVudE9wdGlvbnMiLCAiaW5pdEZvbnRPcHRpb25zIiwgImxhYmVsRGlydHkiLCAibmV3Rm9udE9wdGlvbnMiLCAicGFyc2VGb250U3RyaW5nIiwgInZhZGp1c3QiLCAiY29uc3RyYWluV2lkdGgiLCAibWluV2R0IiwgImNvbnN0cmFpbkhlaWdodCIsICJtaW5IZ3QiLCAidmFsaWduIiwgIndpZHRoQ29uc3RyYWludCIsICJ3aWR0aENvbnN0cmFpbnRNYXhpbXVtIiwgIndpZHRoQ29uc3RyYWludE1pbmltdW0iLCAiaGVpZ2h0Q29uc3RyYWludCIsICJoZWlnaHRDb25zdHJhaW50TWluaW11bSIsICJoZWlnaHRDb25zdHJhaW50VmFsaWduIiwgInByb3BhZ2F0ZUZvbnRzIiwgImRlZXBFeHRlbmQiLCAiY29uc3RyYWluIiwgImNob29zZXIiLCAibWFyZ2lucyIsICJ3aWR0aEJpYXMiLCAiaGVpZ2h0QmlhcyIsICJkc3RQaWxlIiwgInNyY1BpbGUiLCAiYWRkRm9udFRvUGlsZSIsICJyZXQiLCAidG1wU2hvcnRoYW5kIiwgIm9wdCIsICJtdWx0aU5hbWUiLCAib3B0aW9uIiwgIm11bHRpRm9udCIsICJvcHRpb25OYW1lcyIsICJnZXRGb250T3B0aW9uIiwgImZvbnRQaWxlIiwgImFkZEZvbnRPcHRpb25zVG9QaWxlIiwgImdldEJhc2ljT3B0aW9ucyIsICJfbG9vcCIsICJtb2RPcHRpb25zIiwgImdldEZvbnRPcHRpb25zIiwgImJhc2VsaW5lIiwgInZpZXdGb250U2l6ZSIsICJ2aWV3IiwgInNjYWxpbmciLCAiZHJhd1RocmVzaG9sZCIsICJtYXhWaXNpYmxlIiwgImNhbGN1bGF0ZUxhYmVsU2l6ZSIsICJfZHJhd0JhY2tncm91bmQiLCAiX2RyYXdUZXh0IiwgImZpbGxTdHlsZSIsICJnZXRTaXplIiwgImZpbGxSZWN0IiwgIl90aGlzJF9zZXRBbGlnbm1lbnQyIiwgIl9zZXRBbGlnbm1lbnQiLCAidGV4dEFsaWduIiwgImxhYmVsSGVpZ2h0IiwgImFsaWduIiwgIl90aGlzJF9nZXRDb2xvcjIiLCAiX2dldENvbG9yIiwgInN0cm9rZUNvbG9yIiwgImZvbnRDb2xvciIsICJzdHJva2VXaWR0aCIsICJsaW5lV2lkdGgiLCAic3Ryb2tlU3R5bGUiLCAibGluZUpvaW4iLCAic3Ryb2tlVGV4dCIsICJmaWxsVGV4dCIsICJ0ZXh0QmFzZWxpbmUiLCAiaW5pdGlhbFN0cm9rZUNvbG9yIiwgIm9wYWNpdHkiLCAib3ZlcnJpZGVPcGFjaXR5IiwgIl9wcm9jZXNzTGFiZWwiLCAiZ2V0VmFsdWUiLCAiZmFjZSIsICJsYWJlbEhpZ2hsaWdodEJvbGQiLCAiZm9udFN0cmluZyIsICJzZWxlY3RlZFN0YXRlIiwgImhvdmVyU3RhdGUiLCAiaW5UZXh0IiwgImRpZmZlcmVudFN0YXRlIiwgIl9wcm9jZXNzTGFiZWxUZXh0IiwgIm91dE9wdGlvbnMiLCAiaW5PcHRpb25zIiwgIm5ld09wdGlvbnNBcnJheSIsICJhQ29uc3RydWN0b3IiLCAibmF0aXZlQ29uc3RydWN0IiwgIk5FV19UQVJHRVRfQlVHIiwgIkFSR1NfQlVHIiwgIlRhcmdldCIsICJuZXdUYXJnZXQiLCAiJGFyZ3MiLCAiX3NldFByb3RvdHlwZU9mIiwgIl9PYmplY3Qkc2V0UHJvdG90eXBlT2YiLCAiX2JpbmRJbnN0YW5jZVByb3BlcnR5IiwgIl9pbmhlcml0cyIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX09iamVjdCRnZXRQcm90b3R5cGVPZiIsICJOb2RlQmFzZSIsICJsYWJlbE1vZHVsZSIsICJtYXJnaW4iLCAicmVmcmVzaE5lZWRlZCIsICJib3VuZGluZ0JveCIsICJhZGp1c3RTaXplcyIsICJib3JkZXJXaWR0aCIsICJyZXNpemUiLCAic2hhZG93IiwgInNoYWRvd0NvbG9yIiwgInNoYWRvd0JsdXIiLCAic2hhZG93U2l6ZSIsICJzaGFkb3dPZmZzZXRYIiwgInNoYWRvd1giLCAic2hhZG93T2Zmc2V0WSIsICJzaGFkb3dZIiwgImJvcmRlckRhc2hlcyIsICJzZXRMaW5lRGFzaCIsICJkYXNoZXMiLCAic2hhcGVQcm9wZXJ0aWVzIiwgImJvcmRlckNvbG9yIiwgInNhdmUiLCAiZW5hYmxlQm9yZGVyRGFzaGVzIiwgInN0cm9rZSIsICJkaXNhYmxlQm9yZGVyRGFzaGVzIiwgInJlc3RvcmUiLCAiZW5hYmxlU2hhZG93IiwgIl9maWxsSW5zdGFuY2VQcm9wZXJ0eSIsICJkaXNhYmxlU2hhZG93IiwgInBlcmZvcm1TdHJva2UiLCAiX3VwZGF0ZUJvdW5kaW5nQm94IiwgInRleHRTaXplIiwgImdldFRleHRTaXplIiwgIl9jcmVhdGVTdXBlciIsICJEZXJpdmVkIiwgImhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX1JlZmxlY3QkY29uc3RydWN0IiwgIlByb3h5IiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiU3VwZXIiLCAiTmV3VGFyZ2V0IiwgIkJveCIsICJfTm9kZUJhc2UiLCAiX3NldE1hcmdpbnMiLCAibmVlZHNSZWZyZXNoIiwgImRpbWVuc2lvbnMiLCAiZ2V0RGltZW5zaW9uc0Zyb21MYWJlbCIsICJpbml0Q29udGV4dEZvckRyYXciLCAiYm9yZGVyUmFkaXVzIiwgInBlcmZvcm1GaWxsIiwgInVwZGF0ZUJvdW5kaW5nQm94IiwgIl9hZGRCb3VuZGluZ0JveE1hcmdpbiIsICJDaXJjbGVJbWFnZUJhc2UiLCAibGFiZWxPZmZzZXQiLCAiaW1hZ2VPYmoiLCAiaW1hZ2VPYmpBbHQiLCAic2V0SW1hZ2VzIiwgInNlbGVjdGlvbl9jaGFuZ2VkIiwgImltYWdlVG1wIiwgImltZ1BhZGRpbmciLCAiaW1hZ2VQYWRkaW5nIiwgIm9wdEltZ1BhZGRpbmciLCAidXNlSW1hZ2VTaXplIiwgInJhdGlvX3dpZHRoIiwgInJhdGlvX2hlaWdodCIsICJfZ2V0SW1hZ2VQYWRkaW5nIiwgImdsb2JhbEFscGhhIiwgImludGVycG9sYXRpb24iLCAiaW1nUG9zTGVmdCIsICJpbWdQb3NUb3AiLCAiaW1nV2lkdGgiLCAiaW1nSGVpZ2h0IiwgImRyYXdJbWFnZUF0UG9zaXRpb24iLCAibGFiZWxEaW1lbnNpb25zIiwgInlMYWJlbCIsICJDaXJjbGUiLCAiX0NpcmNsZUltYWdlQmFzZSIsICJkaWFtZXRlciIsICJfZHJhd1Jhd0NpcmNsZSIsICJDaXJjdWxhckltYWdlIiwgIl9yZXNpemVJbWFnZSIsICJzd2l0Y2hJbWFnZXMiLCAibGFiZWxYIiwgImxhYmVsWSIsICJjb29yZGluYXRlT3JpZ2luIiwgImNsaXAiLCAiX2RyYXdJbWFnZUF0UG9zaXRpb24iLCAiX2RyYXdJbWFnZUxhYmVsIiwgIlNoYXBlQmFzZSIsICJfdGhpcyRjdXN0b21TaXplV2lkdGgiLCAiX3RoaXMkY3VzdG9tU2l6ZUhlaWdoIiwgImN1c3RvbVNpemVXaWR0aCIsICJjdXN0b21TaXplSGVpZ2h0IiwgInNpemVNdWx0aXBsaWVyIiwgIl9sZW4iLCAiX2tleSIsICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQiLCAiaWNvbiIsICJjb2RlIiwgImRyYXdFeHRlcm5hbExhYmVsIiwgIl9PYmplY3Qka2V5cyIsICJfT2JqZWN0JGdldE93blByb3BlcnR5U3ltYm9scyIsICJfZmlsdGVySW5zdGFuY2VQcm9wZXJ0eSIsICJfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJfb2JqZWN0U3ByZWFkIiwgIl9PYmplY3QkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICJfT2JqZWN0JGRlZmluZVByb3BlcnRpZXMiLCAiQ3VzdG9tU2hhcGUiLCAiX1NoYXBlQmFzZSIsICJjdHhSZW5kZXJlciIsICJkcmF3TGF0ZXIiLCAiZHJhd05vZGUiLCAibm9kZURpbWVuc2lvbnMiLCAiX2Rpc3RhbmNlVG9Cb3JkZXIiLCAiRGF0YWJhc2UiLCAiRGlhbW9uZCIsICJfZHJhd1NoYXBlIiwgIkRvdCIsICJFbGxpcHNlIiwgIkljb24iLCAiaWNvblNpemUiLCAiX2ljb24iLCAid2VpZ2h0IiwgInNpZGUiLCAidXNlQm9yZGVyV2l0aEltYWdlIiwgIm5ldXRyYWxib3JkZXJXaWR0aCIsICJzZWxlY3Rpb25MaW5lV2lkdGgiLCAiYm9yZGVyV2lkdGhTZWxlY3RlZCIsICJTcXVhcmUiLCAiSGV4YWdvbiIsICJTdGFyIiwgIlRleHQiLCAiVHJpYW5nbGUiLCAiVHJpYW5nbGVEb3duIiwgIk5vZGUiLCAiaW1hZ2VsaXN0IiwgImdyb3VwbGlzdCIsICJnbG9iYWxPcHRpb25zIiwgImJyaWRnZU9iamVjdCIsICJiYXNlRm9udFNpemUiLCAicHJlZGVmaW5lZFBvc2l0aW9uIiwgImN1cnJlbnRTaGFwZSIsICJfbG9jYWxDb2xvciIsICJjaGVja01hc3MiLCAiX3BhcnNlSW50IiwgIl9wYXJzZUZsb2F0IiwgInBhcnNlT3B0aW9ucyIsICJfbG9hZF9pbWFnZXMiLCAidXBkYXRlTGFiZWxNb2R1bGUiLCAiY2hlY2tPcGFjaXR5IiwgInVwZGF0ZVNoYXBlIiwgImhpZGRlbiIsICJwaHlzaWNzIiwgImxvYWQiLCAiYnJva2VuSW1hZ2UiLCAidW5zZWxlY3RlZCIsICJ1cGRhdGVHcm91cE9wdGlvbnMiLCAiY3VycmVudEdyb3VwIiwgInRvdGFsIiwgImN1c3RvbVNjYWxpbmdGdW5jdGlvbiIsICJzaXplRGlmZiIsICJmb250RGlmZiIsICJ2aXNpYmxlIiwgIm5vZGVJZCIsICJsYWJlbElkIiwgIm9yaWdpbiIsICJwYXJlbnRPcHRpb25zIiwgIm5ld09wdGlvbnMiLCAiZ3JvdXBMaXN0IiwgImdyb3VwT2JqIiwgInNraXBQcm9wZXJ0aWVzIiwgIl9PYmplY3QkZ2V0T3duUHJvcGVydHlOYW1lcyIsICJzZWxlY3RpdmVOb3REZWVwRXh0ZW5kIiwgImFsbG93RGVsZXRpb24iLCAiY2hlY2tDb29yZGluYXRlT3JpZ2luIiwgIm1lcmdlT3B0aW9ucyIsICJwYXJzZWRDb2xvciIsICJmaWxsSWZEZWZpbmVkIiwgIm1hc3MiLCAic3RySWQiLCAiVkFMSURBVE9SX1BSSU5UX1NUWUxFIiwgIk5vZGVzSGFuZGxlciIsICJncm91cHMiLCAibGF5b3V0RW5naW5lIiwgImZ1bmN0aW9ucyIsICJjcmVhdGVOb2RlIiwgIm5vZGVzTGlzdGVuZXJzIiwgIml0ZW1zIiwgIm9sZERhdGEiLCAiYm9sZGl0YWwiLCAibGV2ZWwiLCAiYmluZEV2ZW50TGlzdGVuZXJzIiwgImVtaXR0ZXIiLCAicmVmcmVzaCIsICJfTnVtYmVyJGlzTmFOIiwgIl9OdW1iZXIkaXNGaW5pdGUiLCAiX2kiLCAiX09iamVjdCRrZXlzMiIsICJkb05vdEVtaXQiLCAib2xkTm9kZXNEYXRhIiwgImlzRGF0YVZpZXdMaWtlIiwgIkRhdGFTZXQiLCAibWUiLCAiaWRzIiwgImdldElkcyIsICJuZXdOb2RlcyIsICJwb3NpdGlvbkluaXRpYWxseSIsICJjaGFuZ2VkRGF0YSIsICJkYXRhQ2hhbmdlZCIsICJfc29tZUluc3RhbmNlUHJvcGVydHkiLCAibmV3VmFsdWUiLCAib2xkVmFsdWUiLCAiY2xlYXJQb3NpdGlvbnMiLCAiZGF0YUFycmF5IiwgIm5vZGVJbmRpY2VzIiwgIl9zdGVwIiwgImRhdGFzZXQiLCAiZ2V0RGF0YVNldCIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiZHNOb2RlIiwgImJvZHlOb2RlIiwgImVyciIsICJub2RlTGlzdCIsICJub2RlT2JqIiwgInRvSWQiLCAiZnJvbUlkIiwgImVkZ2VMaXN0IiwgIl90aGlzNCIsICJfc2V0VGltZW91dCIsICJpc0RhdGFEZXNjcmlwdG9yIiwgInJlY2VpdmVyIiwgIl9nZXQiLCAiX1JlZmxlY3QkZ2V0IiwgIiRoeXBvdCIsICJoeXBvdCIsICJOYU4iLCAidmFsdWUxIiwgInZhbHVlMiIsICJkaXYiLCAic3VtIiwgImFMZW4iLCAibGFyZyIsICJFbmRQb2ludCIsICJwb2ludHMiLCAiYXJyb3dEYXRhIiwgInh0IiwgInl0IiwgIl9FbmRQb2ludCIsICJ0cmFuc2xhdGUiLCAicm90YXRlIiwgImltYWdlV2lkdGgiLCAiaW1hZ2VIZWlnaHQiLCAiQXJyb3ciLCAiX0VuZFBvaW50MiIsICJfc3VwZXIyIiwgInRyYW5zZm9ybSIsICJkcmF3UGF0aCIsICJDcm93IiwgIkN1cnZlIiwgInBpIiwgInN0YXJ0QW5nbGUiLCAiZW5kQW5nbGUiLCAiSW52ZXJ0ZWRDdXJ2ZSIsICJJbnZlcnRlZFRyaWFuZ2xlIiwgIkJhciIsICJWZWUiLCAiRW5kUG9pbnRzIiwgIkVkZ2VCYXNlIiwgIl9ib2R5IiwgIl9sYWJlbE1vZHVsZSIsICJjb2xvckRpcnR5IiwgImhvdmVyV2lkdGgiLCAic2VsZWN0aW9uV2lkdGgiLCAiZnJvbVBvaW50IiwgInRvUG9pbnQiLCAiX3NlbGVjdGVkIiwgIl9ob3ZlciIsICJ2aWFOb2RlIiwgImdldFZpYU5vZGUiLCAiZ2V0Q29sb3IiLCAiX2RyYXdEYXNoZWRMaW5lIiwgIl9kcmF3TGluZSIsICJfbGluZSIsICJfdGhpcyRfZ2V0Q2lyY2xlRGF0YTIiLCAiX2dldENpcmNsZURhdGEiLCAiX2NpcmNsZSIsICJfZnJvbVBvaW50IiwgIl90b1BvaW50IiwgImxpbmVDYXAiLCAibGluZURhc2hPZmZzZXQiLCAiX3RoaXMkX2dldENpcmNsZURhdGE0IiwgIl90aGlzJF9nZXRDaXJjbGVEYXRhNiIsICJfZmluZEJvcmRlclBvc2l0aW9uIiwgIl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUiLCAiX3RoaXMkX2dldENpcmNsZURhdGEkMiIsICJoaWdoIiwgInNlbGZSZWZlcmVuY2UiLCAibmVhck5vZGUiLCAibWlkZGxlIiwgImVuZFBvaW50T2Zmc2V0IiwgImFycm93U3RyaWtldGhyb3VnaCIsICJpdGVyYXRpb24iLCAiX3BvaW50T25DaXJjbGUiLCAiZGlmZmVyZW5jZSIsICJwb3ciLCAiaW5oZXJpdHNDb2xvciIsICJncmQiLCAiY3JlYXRlTGluZWFyR3JhZGllbnQiLCAiZnJvbUNvbG9yIiwgInRvQ29sb3IiLCAiYWRkQ29sb3JTdG9wIiwgImFuZ2xlRnJvbSIsICJhbmdsZVRvIiwgInJlbmRlckJlaGluZFRoZU5vZGUiLCAicG9pbnRURnJvbSIsICJwb2ludFRUbyIsICJ4MSIsICJ5MSIsICJ4MyIsICJ5MyIsICJfZ2V0RGlzdGFuY2VUb0VkZ2UiLCAiX3RoaXMkX2dldENpcmNsZURhdGE4IiwgInB4IiwgInB5IiwgImFycm93UG9pbnQiLCAibm9kZTEiLCAibm9kZTIiLCAicmV2ZXJzZWQiLCAic2NhbGVGYWN0b3IiLCAiZnJvbUFycm93U2NhbGUiLCAiZnJvbUFycm93VHlwZSIsICJ0b0Fycm93U2NhbGUiLCAidG9BcnJvd1R5cGUiLCAibWlkZGxlQXJyb3dTY2FsZSIsICJtaWRkbGVBcnJvd1R5cGUiLCAicmVsYXRpdmVMZW5ndGgiLCAiX01hdGgkaHlwb3QiLCAic21vb3RoIiwgInBvaW50VCIsICJ2aWEiLCAiZ3VpZGVQb3MiLCAiZ2V0UG9pbnQiLCAiaGFsZkxlbmd0aCIsICJndWlkZVBvczEiLCAiZ3VpZGVQb3MyIiwgIl90aGlzJF9nZXRDaXJjbGVEYXRhMTAiLCAiY29yZSIsICJvcmlnQ3R4QXR0ciIsICJiYWNrZ3JvdW5kQ29sb3IiLCAiYmFja2dyb3VuZFNpemUiLCAic2V0U3Ryb2tlRGFzaGVkIiwgImJhY2tncm91bmREYXNoZXMiLCAiQmV6aWVyRWRnZUJhc2UiLCAiX0VkZ2VCYXNlIiwgIl9nZXRWaWFDb29yZGluYXRlcyIsICJtaW5EaXN0YW5jZSIsICJsYXN0WCIsICJsYXN0WSIsICJfZ2V0RGlzdGFuY2VUb0xpbmUiLCAidmlhTm9kZTEiLCAidmlhTm9kZTIiLCAicXVhZHJhdGljQ3VydmVUbyIsICJkcmF3QmFja2dyb3VuZCIsICJCZXppZXJFZGdlRHluYW1pYyIsICJfQmV6aWVyRWRnZUJhc2UiLCAiX2JvdW5kRnVuY3Rpb24iLCAicG9zaXRpb25CZXppZXJOb2RlIiwgInBoeXNpY3NDaGFuZ2UiLCAic2V0dXBTdXBwb3J0Tm9kZSIsICJjb25uZWN0IiwgInBhcmVudEVkZ2VJZCIsICJfYmV6aWVyQ3VydmUiLCAiY3giLCAiY3kiLCAiY3IiLCAiX2ZpbmRCb3JkZXJQb3NpdGlvbkJlemllciIsICJfZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UiLCAiQmV6aWVyRWRnZVN0YXRpYyIsICJzdGVwWCIsICJzdGVwWSIsICJyb3VuZG5lc3MiLCAieFZpYSIsICJ5VmlhIiwgIm15QW5nbGUiLCAiQ3ViaWNCZXppZXJFZGdlQmFzZSIsICJ2aWExIiwgInZpYTIiLCAidmVjIiwgIkN1YmljQmV6aWVyRWRnZSIsICJfQ3ViaWNCZXppZXJFZGdlQmFzZSIsICJ2aWFOb2RlcyIsICJmb3JjZURpcmVjdGlvbiIsICJfcmVmMiIsICJfZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UyIiwgIl9yZWY0IiwgIlN0cmFpZ2h0RWRnZSIsICJlZGdlU2VnbWVudExlbmd0aCIsICJ0b0JvcmRlclBvaW50IiwgIkVkZ2UiLCAiYmFzZVdpZHRoIiwgImVkZ2VUeXBlIiwgImNvbm5lY3RlZCIsICJhZmZlY3RzTGF5b3V0IiwgInVwZGF0ZUVkZ2VUeXBlIiwgIl9zZXRJbnRlcmFjdGlvbldpZHRocyIsICJ0b0Fycm93IiwgImZyb21BcnJvdyIsICJtaWRkbGVBcnJvdyIsICJ0b0Fycm93U3JjIiwgInRvQXJyb3dJbWFnZVdpZHRoIiwgInRvQXJyb3dJbWFnZUhlaWdodCIsICJtaWRkbGVBcnJvd1NyYyIsICJtaWRkbGVBcnJvd0ltYWdlV2lkdGgiLCAibWlkZGxlQXJyb3dJbWFnZUhlaWdodCIsICJmcm9tQXJyb3dTcmMiLCAiZnJvbUFycm93SW1hZ2VXaWR0aCIsICJmcm9tQXJyb3dJbWFnZUhlaWdodCIsICJzZWxlY3RlZFdpZHRoIiwgImNoYW5nZUluVHlwZSIsICJjbGVhbnVwIiwgImRpc2Nvbm5lY3QiLCAiYXR0YWNoRWRnZSIsICJkZXRhY2hFZGdlIiwgIndpZHRoRGlmZiIsICJkcmF3TGluZSIsICJkcmF3TGFiZWwiLCAiZ2V0QXJyb3dEYXRhIiwgImRyYXdBcnJvd0hlYWQiLCAiX2dldFJvdGF0aW9uIiwgImVkZ2VJZCIsICJpc092ZXJsYXBwaW5nV2l0aCIsICJ4RnJvbSIsICJ5RnJvbSIsICJ4VG8iLCAieVRvIiwgInhPYmoiLCAieU9iaiIsICJnZXREaXN0YW5jZVRvRWRnZSIsICJjb3B5RnJvbUdsb2JhbHMiLCAic2VsZWN0aXZlRGVlcEV4dGVuZCIsICJfSlNPTiRzdHJpbmdpZnkiLCAiaXNTdHJpbmciLCAiY29sb3JzRGVmaW5lZCIsICJzZWxmUmVmZXJlbmNlU2l6ZSIsICJFZGdlc0hhbmRsZXIiLCAiZWRnZXNMaXN0ZW5lcnMiLCAiZWRnZURhdGEiLCAic21vb3RoT3B0aW9ucyIsICJyZWNvbm5lY3RFZGdlcyIsICJvbGRFZGdlc0RhdGEiLCAiZWRnZXNEYXRhIiwgIm9sZEVkZ2UiLCAic2hvd0ludGVybmFsSWRzIiwgIl9hZGRNaXNzaW5nRWRnZXMiLCAiX3JlbW92ZUludmFsaWRFZGdlcyIsICJfdGhpczUiLCAiZWRnZXNUb0RlbGV0ZSIsICJ0b05vZGUiLCAiZnJvbU5vZGUiLCAiaXNDbHVzdGVyIiwgImFkZElkcyIsICJCYXJuZXNIdXRTb2x2ZXIiLCAicGh5c2ljc0JvZHkiLCAiYmFybmVzSHV0VHJlZSIsICJfcm5nIiwgIkFsZWEiLCAidGhldGFJbnZlcnNlZCIsICJ0aGV0YSIsICJvdmVybGFwQXZvaWRhbmNlRmFjdG9yIiwgImF2b2lkT3ZlcmxhcCIsICJncmF2aXRhdGlvbmFsQ29uc3RhbnQiLCAicGh5c2ljc05vZGVJbmRpY2VzIiwgIm5vZGVDb3VudCIsICJfZm9ybUJhcm5lc0h1dFRyZWUiLCAiX2dldEZvcmNlQ29udHJpYnV0aW9ucyIsICJwYXJlbnRCcmFuY2giLCAiX2dldEZvcmNlQ29udHJpYnV0aW9uIiwgImNoaWxkcmVuIiwgIk5XIiwgIk5FIiwgIlNXIiwgIlNFIiwgImNoaWxkcmVuQ291bnQiLCAiY2VudGVyT2ZNYXNzIiwgImNhbGNTaXplIiwgIl9jYWxjdWxhdGVGb3JjZXMiLCAiZ3Jhdml0eUZvcmNlIiwgImZ4IiwgImZ5IiwgImZvcmNlcyIsICJtaW5YIiwgIm1pblkiLCAibWF4WCIsICJtYXhZIiwgInJvb3RTaXplIiwgImhhbGZSb290U2l6ZSIsICJjZW50ZXJYIiwgImNlbnRlclkiLCAicmFuZ2UiLCAibWF4V2lkdGgiLCAiX3NwbGl0QnJhbmNoIiwgIl9wbGFjZUluVHJlZSIsICJ0b3RhbE1hc3MiLCAidG90YWxNYXNzSW52IiwgImJpZ2dlc3RTaXplIiwgInNraXBNYXNzVXBkYXRlIiwgIl91cGRhdGVCcmFuY2hNYXNzIiwgInJlZ2lvbiIsICJfcGxhY2VJblJlZ2lvbiIsICJjb250YWluZWROb2RlIiwgIl9pbnNlcnRSZWdpb24iLCAiY2hpbGRTaXplIiwgIl9kcmF3QnJhbmNoIiwgImJyYW5jaCIsICJSZXB1bHNpb25Tb2x2ZXIiLCAicmVwdWxzaW5nRm9yY2UiLCAibm9kZURpc3RhbmNlIiwgIkhpZXJhcmNoaWNhbFJlcHVsc2lvblNvbHZlciIsICJ0aGVzZU5vZGVzRGlzdGFuY2UiLCAiU3ByaW5nU29sdmVyIiwgImVkZ2VMZW5ndGgiLCAibm9kZTMiLCAiZWRnZUluZGljZXMiLCAicGh5c2ljc0VkZ2VJbmRpY2VzIiwgInNwcmluZ0xlbmd0aCIsICJfY2FsY3VsYXRlU3ByaW5nRm9yY2UiLCAic3ByaW5nRm9yY2UiLCAic3ByaW5nQ29uc3RhbnQiLCAiSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyIiwgInNwcmluZ0Z4IiwgInNwcmluZ0Z5IiwgInRvdGFsRngiLCAidG90YWxGeSIsICJjb3JyZWN0aW9uRngiLCAiY29ycmVjdGlvbkZ5IiwgIkNlbnRyYWxHcmF2aXR5U29sdmVyIiwgImNlbnRyYWxHcmF2aXR5IiwgIkZvcmNlQXRsYXMyQmFzZWRSZXB1bHNpb25Tb2x2ZXIiLCAiX0Jhcm5lc0h1dFNvbHZlciIsICJkZWdyZWUiLCAiRm9yY2VBdGxhczJCYXNlZENlbnRyYWxHcmF2aXR5U29sdmVyIiwgIl9DZW50cmFsR3Jhdml0eVNvbHZlciIsICJQaHlzaWNzRW5naW5lIiwgInZlbG9jaXRpZXMiLCAicGh5c2ljc0VuYWJsZWQiLCAic2ltdWxhdGlvbkludGVydmFsIiwgInJlcXVpcmVzVGltZW91dCIsICJwcmV2aW91c1N0YXRlcyIsICJyZWZlcmVuY2VTdGF0ZSIsICJmcmVlemVDYWNoZSIsICJyZW5kZXJUaW1lciIsICJhZGFwdGl2ZVRpbWVzdGVwIiwgImFkYXB0aXZlVGltZXN0ZXBFbmFibGVkIiwgImFkYXB0aXZlQ291bnRlciIsICJhZGFwdGl2ZUludGVydmFsIiwgInN0YWJpbGl6ZWQiLCAic3RhcnRlZFN0YWJpbGl6YXRpb24iLCAic3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMiLCAicmVhZHkiLCAiYmFybmVzSHV0IiwgImRhbXBpbmciLCAiZm9yY2VBdGxhczJCYXNlZCIsICJyZXB1bHNpb24iLCAiaGllcmFyY2hpY2FsUmVwdWxzaW9uIiwgIm1heFZlbG9jaXR5IiwgIm1pblZlbG9jaXR5IiwgInNvbHZlciIsICJzdGFiaWxpemF0aW9uIiwgInVwZGF0ZUludGVydmFsIiwgIm9ubHlEeW5hbWljRWRnZXMiLCAiZml0IiwgInRpbWVzdGVwIiwgIndpbmQiLCAibGF5b3V0RmFpbGVkIiwgImluaXRQaHlzaWNzIiwgInN0b3BTaW11bGF0aW9uIiwgInN0YXJ0U2ltdWxhdGlvbiIsICJ1cGRhdGVQaHlzaWNzRGF0YSIsICJub2Rlc1NvbHZlciIsICJlZGdlc1NvbHZlciIsICJncmF2aXR5U29sdmVyIiwgIlJlcHVsc2lvbiIsICJIaWVyYXJjaGljYWxSZXB1bHNpb24iLCAibW9kZWxPcHRpb25zIiwgInN0YWJpbGl6ZSIsICJ2aWV3RnVuY3Rpb24iLCAic2ltdWxhdGlvblN0ZXAiLCAiX2VtaXRTdGFiaWxpemVkIiwgInN0YXJ0VGltZSIsICJfRGF0ZSRub3ciLCAicGh5c2ljc1RpY2siLCAicnVuRG91YmxlU3BlZWQiLCAiYW1vdW50T2ZJdGVyYXRpb25zIiwgInNvbHZlIiwgIm1vdmVOb2RlcyIsICJfZXZhbHVhdGVTdGVwUXVhbGl0eSIsICJfc3RhcnRTdGFiaWxpemluZyIsICJwaHlzaWNzU3RlcCIsICJyZXZlcnQiLCAiYWRqdXN0VGltZVN0ZXAiLCAibm9kZUlkcyIsICJwb3NpdGlvbnMiLCAidngiLCAidnkiLCAicmVmZXJlbmNlIiwgIm1heE5vZGVWZWxvY2l0eSIsICJhdmVyYWdlTm9kZVZlbG9jaXR5IiwgIm5vZGVWZWxvY2l0eSIsICJfcGVyZm9ybVN0ZXAiLCAibSIsICJtYXhWIiwgImNhbGN1bGF0ZUNvbXBvbmVudFZlbG9jaXR5IiwgInRhcmdldEl0ZXJhdGlvbnMiLCAiX2ZyZWV6ZU5vZGVzIiwgIl9zdGFiaWxpemF0aW9uQmF0Y2giLCAicnVubmluZyIsICJzZW5kUHJvZ3Jlc3MiLCAiX2ZpbmFsaXplU3RhYmlsaXphdGlvbiIsICJfcmVzdG9yZUZyb3plbk5vZGVzIiwgImZvcmNlU2l6ZSIsICJhcnJvd1NpemUiLCAiSFNWVG9IZXgiLCAiZ2V0UmFuZG9tVmFsdWVzIiwgInJuZHM4IiwgIlVpbnQ4QXJyYXkiLCAicm5nIiwgImNyeXB0byIsICJieXRlVG9IZXgiLCAibmF0aXZlIiwgInJhbmRvbVVVSUQiLCAidjQiLCAiYnVmIiwgInJuZHMiLCAiTmV0d29ya1V0aWwiLCAiYWxsTm9kZXMiLCAic3BlY2lmaWNOb2RlcyIsICJjbG9uZWRPcHRpb25zIiwgImFtb3VudE9mQ29ubmVjdGlvbnMiLCAiQ2x1c3RlciIsICJfTm9kZSIsICJjb250YWluZWROb2RlcyIsICJjb250YWluZWRFZGdlcyIsICJjaGlsZENsdXN0ZXJJZCIsICJjaGlsZENsdXN0ZXIiLCAiY2x1c3RlckVkZ2UiLCAicGFyZW50Q2x1c3RlckVkZ2UiLCAiY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMiLCAic3JjSWQiLCAiZWRnZVJlcGxhY2VkQnlJZCIsICJDbHVzdGVyRW5naW5lIiwgImNsdXN0ZXJlZE5vZGVzIiwgImNsdXN0ZXJlZEVkZ2VzIiwgImh1YnNpemUiLCAiX2dldEh1YlNpemUiLCAiX2NoZWNrT3B0aW9ucyIsICJub2Rlc1RvQ2x1c3RlciIsICJjbHVzdGVyQnlDb25uZWN0aW9uIiwgInJlZnJlc2hEYXRhIiwgImpvaW5Db25kaXRpb24iLCAiY2hpbGROb2Rlc09iaiIsICJjaGlsZEVkZ2VzT2JqIiwgIl9jbHVzdGVyIiwgImVkZ2VDb3VudCIsICJyZWxldmFudEVkZ2VDb3VudCIsICJjbHVzdGVycyIsICJ1c2VkTm9kZXMiLCAiY2hlY2tKb2luQ29uZGl0aW9uIiwgImNsb25lT3B0aW9ucyIsICJnYXRoZXJpbmdTdWNjZXNzZnVsIiwgImNoaWxkTm9kZUlkIiwgIl9nZXRDb25uZWN0ZWRJZCIsICJmb3VuZENsdXN0ZXIiLCAiZmluZENsdXN0ZXJEYXRhIiwgImNsdXN0ZXJCeUVkZ2VDb3VudCIsICJjbHVzdGVyTm9kZVByb3BlcnRpZXMiLCAicGFyZW50Tm9kZUlkIiwgInBhcmVudENsb25lZE9wdGlvbnMiLCAiY2hpbGRDbG9uZWRPcHRpb25zIiwgImNoaWxkTm9kZUlEcyIsICJjaGlsZE5vZGUiLCAiY2hpbGROb2RlS2V5IiwgImNoaWxkRWRnZSIsICJjbHVzdGVyRWRnZVByb3BlcnRpZXMiLCAib3RoZXJOb2RlSWQiLCAiY2hpbGRLZXlzIiwgImNyZWF0ZUVkZ2VzIiwgIm5ld0VkZ2VzIiwgImdldE5ld0VkZ2UiLCAiY3JlYXRlZEVkZ2UiLCAibmV3RWRnZSIsICJtYXRjaFRvRGlyZWN0aW9uIiwgIm1hdGNoRnJvbURpcmVjdGlvbiIsICJfY3JlYXRlQ2x1c3RlcmVkRWRnZSIsICJfYmFja3VwRWRnZU9wdGlvbnMiLCAidG1wTm9kZXNUb1JlbW92ZSIsICJhbGxvd1NpbmdsZU5vZGVDbHVzdGVyIiwgInByb2Nlc3NQcm9wZXJ0aWVzIiwgImNoaWxkTm9kZXNPcHRpb25zIiwgImNoaWxkRWRnZXNPcHRpb25zIiwgImNsdXN0ZXJJZCIsICJfZ2V0Q2x1c3RlclBvc2l0aW9uIiwgImNsdXN0ZXJOb2RlIiwgIl9jbHVzdGVyRWRnZXMiLCAib3JpZ2luYWxPcHRpb25zIiwgImNsdXN0ZXJOb2RlSWQiLCAiZmluZE5vZGUiLCAicGFyZW50SW5kZXgiLCAicGFyZW50Q2x1c3Rlck5vZGVJZCIsICJfb3BlbkNoaWxkQ2x1c3RlciIsICJyZWxlYXNlRnVuY3Rpb24iLCAiY2x1c3RlclBvc2l0aW9uIiwgIm5ld1Bvc2l0aW9ucyIsICJlZGdlc1RvQmVEZWxldGVkIiwgIm90aGVyTm9kZSIsICJ0cmFuc2ZlcklkIiwgInRyYW5zZmVyRWRnZSIsICJvdGhlckNsdXN0ZXIiLCAiX3Jlc3RvcmVFZGdlIiwgIm5vZGVzQXJyYXkiLCAiY291bnRlciIsICJfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkiLCAiY2x1c3RlcmVkTm9kZUlkIiwgInN0YXJ0RWRnZUlkIiwgImFsbEVkZ2VJZHMiLCAiZ2V0Q2x1c3RlcmVkRWRnZXMiLCAiY2x1c3RlcmVkRWRnZUlkIiwgImdldEJhc2VFZGdlcyIsICJJZHNUb0hhbmRsZSIsICJkb25lSWRzIiwgImZvdW5kSWRzIiwgIm5leHRJZCIsICJuZXh0RWRnZSIsICJyZXBsYWNpbmdJZHMiLCAicmVwbGFjaW5nSWQiLCAiYXZlcmFnZSIsICJhdmVyYWdlU3F1YXJlZCIsICJodWJDb3VudGVyIiwgImxhcmdlc3RIdWIiLCAidmFyaWFuY2UiLCAic3RhbmRhcmREZXZpYXRpb24iLCAiaHViVGhyZXNob2xkIiwgImJhc2VFZGdlIiwgImV4dHJhT3B0aW9ucyIsICJjaGlsZE5vZGVzIiwgImNoaWxkRWRnZXMiLCAiX2NyZWF0ZUNsdXN0ZXJFZGdlcyIsICJjbHVzdGVyZWROb2RlIiwgImRlbGV0ZWROb2RlSWRzIiwgImRlbGV0ZWRFZGdlSWRzIiwgImVhY2hDbHVzdGVyTm9kZSIsICJlbmRQb2ludHNWYWxpZCIsICJyZXBsYWNlZElkcyIsICJudW1WYWxpZCIsICJjb250YWluZWRFZGdlSWQiLCAiY29udGFpbmVkRWRnZSIsICJkZWxldGVkRWRnZUlkIiwgIl9maWx0ZXIiLCAic2hvdWxkQmVDbHVzdGVyZWQiLCAiX2lzQ2x1c3RlcmVkTm9kZSIsICJfaXNDbHVzdGVyZWRFZGdlIiwgImNsdXN0ZXJGcm9tIiwgIl9nZXRDbHVzdGVyTm9kZUZvck5vZGUiLCAiY2x1c3RlclRvIiwgImNvbnRpbnVlTG9vcCIsICJfbG9vcDIiLCAiY2x1c3RlcnNUb09wZW4iLCAibnVtTm9kZXMiLCAiYWxsb3dTaW5nbGUiLCAib3BlbkNsdXN0ZXIiLCAiX3VwZGF0ZVN0YXRlIiwgIkNhbnZhc1JlbmRlcmVyIiwgInJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJtb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAid2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgIm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgInJlZHJhd1JlcXVlc3RlZCIsICJyZW5kZXJpbmdBY3RpdmUiLCAicmVuZGVyUmVxdWVzdHMiLCAiYWxsb3dSZWRyYXciLCAiZHJhZ2dpbmciLCAiem9vbWluZyIsICJoaWRlRWRnZXNPbkRyYWciLCAiaGlkZUVkZ2VzT25ab29tIiwgImhpZGVOb2Rlc09uRHJhZyIsICJfZGV0ZXJtaW5lQnJvd3Nlck1ldGhvZCIsICJ6b29tVGltZW91dElkIiwgIl9yZXF1ZXN0UmVkcmF3IiwgIl9yZXNpemVOb2RlcyIsICJfcmVkcmF3IiwgIl9zdGFydFJlbmRlcmluZyIsICJjYW5jZWxBbmltYXRpb25GcmFtZSIsICJkZWxheSIsICJ0aW1lciIsICJteVdpbmRvdyIsICJfcmVxdWVzdE5leHRGcmFtZSIsICJfcmVuZGVyU3RlcCIsICJkcmF3RXh0ZXJuYWxMYWJlbHMiLCAiZnJhbWUiLCAic2V0U2l6ZSIsICJzZXRUcmFuc2Zvcm0iLCAiY2xpZW50V2lkdGgiLCAiY2xpZW50SGVpZ2h0IiwgImNsZWFyUmVjdCIsICJ0cmFuc2xhdGlvbiIsICJfZHJhd0VkZ2VzIiwgIl9kcmF3Tm9kZXMiLCAiX2RyYXdBcnJvd3MiLCAiX2RyYXdTZWxlY3Rpb25Cb3giLCAiYWx3YXlzU2hvdyIsICJob3ZlcmVkIiwgInRvcExlZnQiLCAiRE9NdG9DYW52YXMiLCAiYm90dG9tUmlnaHQiLCAidmlld2FibGVBcmVhIiwgImlzU2VsZWN0ZWQiLCAiaXNCb3VuZGluZ0JveE92ZXJsYXBwaW5nV2l0aCIsICJzZWxlY3RlZExlbmd0aCIsICJob3ZlcmVkTGVuZ3RoIiwgIl9pMiIsICJfZHJhd0V4dGVybmFsTGFiZWxzMiIsICJkcmF3QXJyb3dzIiwgImJyb3dzZXJUeXBlIiwgInNlbGVjdGlvbkJveCIsICJzaG93IiwgIm9uVG91Y2giLCAiaGFtbWVyIiwgIm9uUmVsZWFzZSIsICJDYW52YXMiLCAicGl4ZWxSYXRpbyIsICJjYW1lcmFTdGF0ZSIsICJjYW52YXNWaWV3Q2VudGVyIiwgIl9jbGVhbnVwQ2FsbGJhY2tzIiwgImF1dG9SZXNpemUiLCAiaGFtbWVyRnJhbWUiLCAiX2NsZWFuVXAiLCAiUmVzaXplT2JzZXJ2ZXIiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZSIsICJ1bm9ic2VydmUiLCAicmVzaXplVGltZXIiLCAiX3NldEludGVydmFsIiwgImNsZWFySW50ZXJ2YWwiLCAicmVzaXplRnVuY3Rpb24iLCAiX29uUmVzaXplIiwgInByZXZpb3VzV2lkdGgiLCAicHJldmlvdXNIZWlnaHQiLCAid2lkdGhSYXRpbyIsICJoZWlnaHRSYXRpbyIsICJuZXdTY2FsZSIsICJjdXJyZW50Vmlld0NlbnRlciIsICJkaXN0YW5jZUZyb21DZW50ZXIiLCAiY29udGFpbmVyIiwgImhhc0NoaWxkTm9kZXMiLCAiZmlyc3RDaGlsZCIsICJjbGFzc05hbWUiLCAib3ZlcmZsb3ciLCAidGFiSW5kZXgiLCAiX3NldFBpeGVsUmF0aW8iLCAibm9DYW52YXMiLCAiZm9udFdlaWdodCIsICJwYWRkaW5nIiwgImlubmVyVGV4dCIsICJfYmluZEhhbW1lciIsICJkcmFnIiwgInBpbmNoIiwgImV2ZW50TGlzdGVuZXJzIiwgIm9uVGFwIiwgIm9uRG91YmxlVGFwIiwgIm9uSG9sZCIsICJvbkRyYWdTdGFydCIsICJvbkRyYWciLCAib25EcmFnRW5kIiwgIm9uUGluY2giLCAib25Nb3VzZVdoZWVsIiwgIm9uTW91c2VNb3ZlIiwgIm9uQ29udGV4dCIsICJfcHJlcGFyZVZhbHVlIiwgImVtaXRFdmVudCIsICJvbGRXaWR0aCIsICJvbGRIZWlnaHQiLCAicHJldmlvdXNSYXRpbyIsICJfZ2V0Q2FtZXJhU3RhdGUiLCAibmV3V2lkdGgiLCAibmV3SGVpZ2h0IiwgIl9zZXRDYW1lcmFTdGF0ZSIsICJudW1lcmF0b3IiLCAiZGV2aWNlUGl4ZWxSYXRpbyIsICJ3ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIiwgIm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8iLCAibXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIiwgIm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIiwgImJhY2tpbmdTdG9yZVBpeGVsUmF0aW8iLCAiX2RldGVybWluZVBpeGVsUmF0aW8iLCAiX1hjb252ZXJ0Q2FudmFzVG9ET00iLCAiX1ljb252ZXJ0Q2FudmFzVG9ET00iLCAiX1hjb252ZXJ0RE9NdG9DYW52YXMiLCAiX1ljb252ZXJ0RE9NdG9DYW52YXMiLCAiVmlldyIsICJhbmltYXRpb25TcGVlZCIsICJyZW5kZXJSZWZyZXNoUmF0ZSIsICJhbmltYXRpb25FYXNpbmdGdW5jdGlvbiIsICJlYXNpbmdUaW1lIiwgInNvdXJjZVNjYWxlIiwgInRhcmdldFNjYWxlIiwgInNvdXJjZVRyYW5zbGF0aW9uIiwgInRhcmdldFRyYW5zbGF0aW9uIiwgImxvY2tlZE9uTm9kZUlkIiwgImxvY2tlZE9uTm9kZU9mZnNldCIsICJ0b3VjaFRpbWUiLCAicmVsZWFzZU5vZGUiLCAiaW5pdGlhbFpvb20iLCAicmF3T3B0aW9ucyIsICJhbGxOb2RlSWRzIiwgIm1pblpvb21MZXZlbCIsICJNSU5fVkFMVUUiLCAibWF4Wm9vbUxldmVsIiwgInpvb21MZXZlbCIsICJjYW52YXNXaWR0aCIsICJjYW52YXNIZWlnaHQiLCAiZ2V0UmFuZ2UiLCAicG9zaXRpb25EZWZpbmVkIiwgInhab29tTGV2ZWwiLCAieVpvb21MZXZlbCIsICJhbmltYXRpb25PcHRpb25zIiwgImZpbmRDZW50ZXIiLCAiYW5pbWF0aW9uIiwgIm5vZGVQb3NpdGlvbiIsICJsb2NrZWRPbk5vZGUiLCAiZ2V0Vmlld1Bvc2l0aW9uIiwgImR1cmF0aW9uIiwgImVhc2luZ0Z1bmN0aW9uIiwgImFuaW1hdGVWaWV3IiwgImxvY2tlZCIsICJfdHJhbnNpdGlvblJlZHJhdyIsICJ2aWV3Q2VudGVyIiwgIl9sb2NrZWRSZWRyYXciLCAiZmluaXNoZWQiLCAicHJvZ3Jlc3MiLCAiZWFzaW5nRnVuY3Rpb25zIiwgImtleWNoYXJtIiwgIl9leHBvcnRGdW5jdGlvbnMiLCAiX2JvdW5kIiwgImtleWRvd24iLCAia2V5dXAiLCAiX2tleXMiLCAiZnJvbUNoYXJDb2RlIiwgImRvd24iLCAiaGFuZGxlRXZlbnQiLCAidXAiLCAia2V5Q29kZSIsICJib3VuZCIsICJzaGlmdEtleSIsICJiaW5kQWxsIiwgImdldEtleSIsICJ1bmJpbmQiLCAibmV3QmluZGluZ3MiLCAiTmF2aWdhdGlvbkhhbmRsZXIiLCAiaWNvbnNDcmVhdGVkIiwgIm5hdmlnYXRpb25IYW1tZXJzIiwgImJvdW5kRnVuY3Rpb25zIiwgImFjdGl2YXRlZCIsICJjb25maWd1cmVLZXlib2FyZEJpbmRpbmdzIiwgIm5hdmlnYXRpb25CdXR0b25zIiwgImxvYWROYXZpZ2F0aW9uRWxlbWVudHMiLCAiY2xlYW5OYXZpZ2F0aW9uIiwgIm5hdmlnYXRpb25ET00iLCAibmF2aWdhdGlvbkRpdnMiLCAibmF2aWdhdGlvbkRpdkFjdGlvbnMiLCAiX2ZpdCIsICJiaW5kVG9SZWRyYXciLCAiX3N0b3BNb3ZlbWVudCIsICJhY3Rpb24iLCAiYm91bmRBY3Rpb24iLCAia2V5Ym9hcmQiLCAic3BlZWQiLCAic2NhbGVPbGQiLCAiem9vbSIsICJzY2FsZUZyYWMiLCAidHgiLCAidHkiLCAicG9pbnRlciIsICJfY29udGV4dDYiLCAiX2NvbnRleHQ3IiwgIl9jb250ZXh0OCIsICJfY29udGV4dDkiLCAiX2NvbnRleHQxMCIsICJfY29udGV4dDExIiwgIl9jb250ZXh0MTIiLCAiX2NvbnRleHQxMyIsICJfY29udGV4dDE0IiwgIl9jb250ZXh0MTUiLCAiX2NvbnRleHQxNiIsICJfY29udGV4dDE3IiwgIl9jb250ZXh0MTgiLCAiX2NvbnRleHQxOSIsICJfY29udGV4dDIwIiwgIl9jb250ZXh0MjEiLCAiX2NvbnRleHQyMiIsICJfY29udGV4dDIzIiwgIl9jb250ZXh0MjQiLCAiX2NvbnRleHQyNSIsICJfY29udGV4dDI2IiwgIl9jb250ZXh0MjciLCAiYmluZFRvV2luZG93IiwgInVuYmluZEZyb21SZWRyYXciLCAiSW50ZXJhY3Rpb25IYW5kbGVyIiwgInNlbGVjdGlvbkhhbmRsZXIiLCAibmF2aWdhdGlvbkhhbmRsZXIiLCAicG9wdXAiLCAicG9wdXBPYmoiLCAicG9wdXBUaW1lciIsICJnZXRQb2ludGVyIiwgImRyYWdOb2RlcyIsICJkcmFnVmlldyIsICJhdXRvRm9jdXMiLCAidG9vbHRpcERlbGF5IiwgInpvb21WaWV3IiwgInpvb21TcGVlZCIsICJnZXRBYnNvbHV0ZVRvcCIsICJwaW5jaGVkIiwgIm11bHRpc2VsZWN0IiwgImN0cmxLZXkiLCAibWV0YUtleSIsICJjaGVja1NlbGVjdGlvbkNoYW5nZXMiLCAiY29tbWl0QW5kRW1pdCIsICJnZW5lcmF0ZUNsaWNrRXZlbnQiLCAic2VsZWN0QWRkaXRpb25hbE9uUG9pbnQiLCAic2VsZWN0T25Qb2ludCIsICJmaXJzdFNldCIsICJzZWNvbmRTZXQiLCAiYXJyYXlEaWZmIiwgImZpcnN0QXJyIiwgInNlY29uZEFyciIsICJnZXROb2RlQXQiLCAic2VsZWN0aW9uIiwgInNldFNlbGVjdGlvbiIsICJnZXRTZWxlY3RlZE5vZGVzIiwgInhGaXhlZCIsICJ5Rml4ZWQiLCAiZGlmZlgiLCAiZGlmZlkiLCAic2VsZWN0aW9uQm94UG9zaXRpb24iLCAic2VsZWN0aW9uQm94UG9zaXRpb25NaW5NYXgiLCAidG9CZVNlbGVjdGVkTm9kZXMiLCAic2VsZWN0T2JqZWN0IiwgInByZVNjYWxlRHJhZ1BvaW50ZXIiLCAicG9zdFNjYWxlRHJhZ1BvaW50ZXIiLCAiY2FudmFzVG9ET00iLCAicG9wdXBWaXNpYmxlIiwgIl9jaGVja0hpZGVQb3B1cCIsICJzZXRQb3NpdGlvbiIsICJmb2N1cyIsICJfY2hlY2tTaG93UG9wdXAiLCAiaG92ZXJPYmplY3QiLCAicG9pbnRlck9iaiIsICJwcmV2aW91c1BvcHVwT2JqSWQiLCAibm9kZVVuZGVyQ3Vyc29yIiwgInBvcHVwVHlwZSIsICJvdmVybGFwcGluZ05vZGVzIiwgImdldFRpdGxlIiwgIm92ZXJsYXBwaW5nRWRnZXMiLCAiUG9wdXAiLCAicG9wdXBUYXJnZXRUeXBlIiwgInBvcHVwVGFyZ2V0SWQiLCAic2V0VGV4dCIsICJoaWRlIiwgIl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdCIsICJzdGlsbE9uT2JqIiwgIm92ZXJOb2RlIiwgIlNldCIsICJ1bmNhdWdodEZyb3plblN0b3JlIiwgImZyb3plbiIsICJVbmNhdWdodEZyb3plblN0b3JlIiwgImZpbmRVbmNhdWdodEZyb3plbiIsICJJbnRlcm5hbFdlYWtNYXAiLCAiY29sbGVjdGlvbldlYWsiLCAiZW5mb3JjZUludGVybmFsU3RhdGUiLCAiaXNGcm96ZW4iLCAiaXNTZWFsZWQiLCAiZnJlZXplIiwgInNlYWwiLCAiRlJPWkVOIiwgIlNFQUxFRCIsICJJU19JRTExIiwgIiRXZWFrTWFwIiwgIldlYWtNYXBQcm90b3R5cGUiLCAibmF0aXZlU2V0IiwgIm5hdGl2ZURlbGV0ZSIsICJuYXRpdmVIYXMiLCAibmF0aXZlR2V0IiwgImZyb3plbkFycmF5IiwgImFycmF5SW50ZWdyaXR5TGV2ZWwiLCAiZGlmZlNldHMiLCAiZGlmZiIsICJfU2V0IiwgIlNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvciIsICJfU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yX3ByZXZpb3VzU2VsZWN0aW9uIiwgIl9TaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3Jfc2VsZWN0aW9uIiwgIl9fY2xhc3NQcml2YXRlRmllbGRHZXQiLCAiX2l0ZW1zIiwgIl9sZW4yIiwgIl9rZXkyIiwgIl9pdGVtczIiLCAiYWRkZWQiLCAiZGVsZXRlZCIsICJjaGFuZ2VzIiwgImdldENoYW5nZXMiLCAiX19jbGFzc1ByaXZhdGVGaWVsZFNldCIsICJfc3RlcDIiLCAiX2l0ZXJhdG9yMiIsICJzZWxlY3QiLCAiX3N0ZXAzIiwgIl9pdGVyYXRvcjMiLCAidW5zZWxlY3QiLCAiU2VsZWN0aW9uQWNjdW11bGF0b3IiLCAiY29tbWl0SGFuZGxlciIsICJfU2VsZWN0aW9uQWNjdW11bGF0b3Jfbm9kZXMiLCAiX1NlbGVjdGlvbkFjY3VtdWxhdG9yX2VkZ2VzIiwgIl9TZWxlY3Rpb25BY2N1bXVsYXRvcl9jb21taXRIYW5kbGVyIiwgImdldFNlbGVjdGlvbiIsICJfY2xhc3NQcml2YXRlRmllbGRHZSIsICJfY2xhc3NQcml2YXRlRmllbGRHZTIiLCAiX2NsYXNzUHJpdmF0ZUZpZWxkR2UzIiwgInN1bW1hcnkiLCAiY29tbWl0IiwgIl9sZW4zIiwgInJlc3QiLCAiX2tleTMiLCAiX2NvbmNhdEluc3RhbmNlUHJvcGVydHkiLCAiU2VsZWN0aW9uSGFuZGxlciIsICJfc2VsZWN0aW9uQWNjdW11bGF0b3IiLCAiaG92ZXJPYmoiLCAic2VsZWN0YWJsZSIsICJzZWxlY3RDb25uZWN0ZWRFZGdlcyIsICJob3ZlckNvbm5lY3RlZEVkZ2VzIiwgInVwZGF0ZVNlbGVjdGlvbiIsICJnZXRFZGdlQXQiLCAidW5zZWxlY3RBbGwiLCAic2VsZWN0aW9uQ2hhbmdlZCIsICJkZXNlbGVjdE9iamVjdCIsICJET00iLCAib2xkU2VsZWN0aW9uIiwgImVtcHR5U2VsZWN0aW9uIiwgIl9pbml0QmFzZUV2ZW50IiwgImdldENsaWNrZWRJdGVtcyIsICJjb250cm9sRWRnZSIsICJoaWdobGlnaHRFZGdlcyIsICJfdGhpcyRfc2VsZWN0aW9uQWNjdW0iLCAiYWRkRWRnZXMiLCAiYWRkTm9kZXMiLCAiX3JlbW92ZUZyb21TZWxlY3Rpb24iLCAiY2FudmFzUG9zIiwgInJldHVybk5vZGUiLCAicG9zaXRpb25PYmplY3QiLCAiX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoIiwgIl9nZXRFZGdlc092ZXJsYXBwaW5nV2l0aCIsICJyZXR1cm5FZGdlIiwgIm1pbmRpc3QiLCAib3ZlcmxhcHBpbmdFZGdlIiwgImRpc3QiLCAiX3RoaXMkX3NlbGVjdGlvbkFjY3VtMiIsICJkZWxldGVOb2RlcyIsICJkZWxldGVFZGdlcyIsICJzaXplTm9kZXMiLCAic2l6ZUVkZ2VzIiwgIl9hZGRUb0hvdmVyIiwgImhvdmVyQ2hhbmdlZCIsICJlbWl0Qmx1ckV2ZW50IiwgImhvdmVyZWRFZGdlc0NvdW50IiwgImhvdmVyZWROb2Rlc0NvdW50IiwgImVtaXRIb3ZlckV2ZW50IiwgIl9ob3ZlckNvbm5lY3RlZEVkZ2VzIiwgInNlbGVjdGlvbkNoYW5nZXMiLCAicHJldmlvdXNTZWxlY3Rpb24iLCAiZ2V0U2VsZWN0ZWROb2RlSWRzIiwgImdldFNlbGVjdGVkRWRnZUlkcyIsICJnZXROb2RlcyIsICJnZXRFZGdlcyIsICJnZXRJdGVtc09uUG9pbnQiLCAibWVyZ2VTb3J0IiwgImNvbXBhcmVmbiIsICJpbnNlcnRpb25Tb3J0IiwgImxsZW5ndGgiLCAicmxlbmd0aCIsICJsaW5kZXgiLCAicmluZGV4IiwgImFycmF5U29ydCIsICJmaXJlZm94IiwgImVuZ2luZUZmVmVyc2lvbiIsICJlbmdpbmVJc0llT3JFZGdlIiwgIndlYmtpdCIsICJlbmdpbmVXZWJraXRWZXJzaW9uIiwgImludGVybmFsU29ydCIsICJGRiIsICJJRV9PUl9FREdFIiwgIlY4IiwgIldFQktJVCIsICJuYXRpdmVTb3J0IiwgIkZBSUxTX09OX1VOREVGSU5FRCIsICJGQUlMU19PTl9OVUxMIiwgIlNUUklDVF9NRVRIT0QiLCAiU1RBQkxFX1NPUlQiLCAiaXRlbXNMZW5ndGgiLCAiYXJyYXlMZW5ndGgiLCAiSVNfUklHSFQiLCAibWVtbyIsICJhcnJheVJlZHVjZSIsICJlbmdpbmVJc05vZGUiLCAiJHJlZHVjZSIsICJyZWR1Y2UiLCAiRGlyZWN0aW9uSW50ZXJmYWNlIiwgImFic3RyYWN0IiwgImZha2VfdXNlIiwgIm5vZGVBcnJheSIsICJWZXJ0aWNhbFN0cmF0ZWd5IiwgIl9EaXJlY3Rpb25JbnRlcmZhY2UiLCAibGF5b3V0IiwgImhpZXJhcmNoaWNhbCIsICJhZGRUb09yZGVyaW5nIiwgImdldFRyZWVTaXplIiwgIm1pbl94IiwgIm1heF94IiwgIl9zb3J0SW5zdGFuY2VQcm9wZXJ0eSIsICJsZXZlbFNlcGFyYXRpb24iLCAiSG9yaXpvbnRhbFN0cmF0ZWd5IiwgIl9EaXJlY3Rpb25JbnRlcmZhY2UyIiwgIm1pbl95IiwgIm1heF95IiwgIiRldmVyeSIsICJmaWxsTGV2ZWxzQnlEaXJlY3Rpb25DeWNsaWMiLCAibGV2ZWxzIiwgImZpbGxMZXZlbHNCeURpcmVjdGlvbiIsICJpc0VudHJ5Tm9kZSIsICJzaG91bGRMZXZlbEJlUmVwbGFjZWQiLCAibGltaXQiLCAiX3JlZHVjZUluc3RhbmNlUHJvcGVydHkiLCAiYWNjIiwgImVkZ2VJZFByb3AiLCAibmV3TGV2ZWxEaWZmIiwgIl9yZXQiLCAiX3N0ZXAkdmFsdWUiLCAiZW50cnlOb2RlSWQiLCAiZW50cnlOb2RlIiwgIl9yZXQyIiwgIm5ld0xldmVsIiwgInRhcmdldE5vZGVJZCIsICJvbGRMZXZlbCIsICJIaWVyYXJjaGljYWxTdGF0dXMiLCAiY2hpbGRyZW5SZWZlcmVuY2UiLCAicGFyZW50UmVmZXJlbmNlIiwgInRyZWVzIiwgImRpc3RyaWJ1dGlvbk9yZGVyaW5nIiwgImRpc3RyaWJ1dGlvbkluZGV4IiwgImlzVHJlZSIsICJ0cmVlSW5kZXgiLCAidHJlZUlkIiwgImFjY3VtdWxhdG9yIiwgIl9nZXRNYXhMZXZlbCIsICJub2RlQSIsICJub2RlQiIsICJtaW5MZXZlbCIsICJwYXJlbnRzMSIsICJwYXJlbnRzMiIsICJpc1ByZXNlbnQiLCAiY3VyTGV2ZWwiLCAiTGF5b3V0RW5naW5lIiwgIl9yZXNldFJORyIsICJzZXRQaHlzaWNzIiwgIm9wdGlvbnNCYWNrdXAiLCAicmFuZG9tU2VlZCIsICJpbXByb3ZlZExheW91dCIsICJjbHVzdGVyVGhyZXNob2xkIiwgIm5vZGVTcGFjaW5nIiwgInRyZWVTcGFjaW5nIiwgImJsb2NrU2hpZnRpbmciLCAiZWRnZU1pbmltaXphdGlvbiIsICJwYXJlbnRDZW50cmFsaXphdGlvbiIsICJzb3J0TWV0aG9kIiwgInNldHVwSGllcmFyY2hpY2FsTGF5b3V0IiwgImxheW91dE5ldHdvcmsiLCAiY3VydmVUeXBlIiwgImFsbE9wdGlvbnMiLCAicHJldkhpZXJhcmNoaWNhbFN0YXRlIiwgInNldERpcmVjdGlvblN0cmF0ZWd5IiwgImFkYXB0QWxsT3B0aW9uc0ZvckhpZXJhcmNoaWNhbExheW91dCIsICJzZWVkIiwgImluaXRpYWxSYW5kb21TZWVkIiwgImJhY2t1cFBoeXNpY3MiLCAiaW5kaWNlcyIsICJjbHVzdGVyT3B0aW9ucyIsICJzdGFydExlbmd0aCIsICJiZWZvcmUiLCAibW9kdWxlcyIsICJjbHVzdGVyaW5nIiwgImNsdXN0ZXJCcmlkZ2VzIiwgImNsdXN0ZXJPdXRsaWVycyIsICJfZGVjbHVzdGVyQWxsIiwgImluZm8iLCAia2FtYWRhS2F3YWkiLCAiX3NoaWZ0VG9DZW50ZXIiLCAiZ2V0UmFuZ2VDb3JlIiwgImNsdXN0ZXJzUHJlc2VudCIsICJkZWZpbmVkTGV2ZWwiLCAidW5kZWZpbmVkTGV2ZWwiLCAibGFzdE5vZGVPbkxldmVsIiwgIl9kZXRlcm1pbmVMZXZlbHNCeUh1YnNpemUiLCAiX2RldGVybWluZUxldmVsc0RpcmVjdGVkIiwgIl9kZXRlcm1pbmVMZXZlbHNDdXN0b21DYWxsYmFjayIsICJlbnN1cmVMZXZlbCIsICJkaXN0cmlidXRpb24iLCAiX2dldERpc3RyaWJ1dGlvbiIsICJfZ2VuZXJhdGVNYXAiLCAiX3BsYWNlTm9kZXNCeUhpZXJhcmNoeSIsICJfY29uZGVuc2VIaWVyYXJjaHkiLCAic3RpbGxTaGlmdGluZyIsICJicmFuY2hlcyIsICJzaGlmdFRyZWUiLCAiZ2V0VHJlZVNpemVzIiwgInRyZWVXaWR0aHMiLCAibnVtVHJlZXMiLCAiZ2V0QnJhbmNoTm9kZXMiLCAiZ2V0QnJhbmNoQm91bmRhcnkiLCAiYnJhbmNoTWFwIiwgIm1heExldmVsIiwgIm1pblNwYWNlIiwgIm1heFNwYWNlIiwgImJyYW5jaE5vZGUiLCAiZ2V0UG9zaXRpb24iLCAiX3RoaXMzJF9nZXRTcGFjZUFyb3VuMiIsICJfZ2V0U3BhY2VBcm91bmROb2RlIiwgIm1pblNwYWNlTm9kZSIsICJtYXhTcGFjZU5vZGUiLCAic2hpZnRFbGVtZW50c0Nsb3NlciIsICJjZW50ZXJQYXJlbnRzIiwgImhpZXIiLCAibGV2ZWxOb2RlcyIsICJoYXNTYW1lUGFyZW50IiwgImluU2FtZVN1Yk5ldHdvcmsiLCAiYnJhbmNoU2hpZnRDYWxsYmFjayIsICJjZW50ZXJQYXJlbnQiLCAicG9zMSIsICJwb3MyIiwgImRpZmZBYnMiLCAiYnJhbmNoTm9kZXMxIiwgImJyYW5jaE5vZGVzMiIsICJtYXhMZXZlbDEiLCAiZ2V0TWF4TGV2ZWwiLCAibWF4TGV2ZWwyIiwgImJyYW5jaE5vZGVCb3VuZGFyeTEiLCAiYnJhbmNoTm9kZUJvdW5kYXJ5MiIsICJtYXgxIiwgIm1pbjIiLCAibWluU3BhY2UyIiwgIl9zaGlmdEJsb2NrIiwgIl9jZW50ZXJQYXJlbnQiLCAibWluaW1pemVFZGdlTGVuZ3RoIiwgImFsbEVkZ2VzIiwgIm5vZGVMZXZlbCIsICJDMiIsICJyZWZlcmVuY2VOb2RlcyIsICJhYm92ZUVkZ2VzIiwgImdldEZ4IiwgImdldERGeCIsICJnZXRHdWVzcyIsICJndWVzcyIsICJndWVzc01hcCIsICJkZngiLCAiYnJhbmNoTm9kZXMiLCAiYnJhbmNoQm91bmRhcnkiLCAibWluU3BhY2VCcmFuY2giLCAibWF4U3BhY2VCcmFuY2giLCAiYnJhbmNoT2Zmc2V0IiwgIl90aGlzMyRfZ2V0U3BhY2VBcm91bjQiLCAibmV3UG9zaXRpb24iLCAiZ2V0TGV2ZWxzIiwgImNlbnRlckFsbFBhcmVudHMiLCAiY2VudGVyQWxsUGFyZW50c0JvdHRvbVVwIiwgInRyZWVTaXplcyIsICJzaGlmdEJ5IiwgInNoaWZ0VHJlZXMiLCAidXNlTWFwIiwgIm9yZGVyaW5nIiwgInByZXZOb2RlIiwgIm5leHROb2RlIiwgIm5leHRQb3MiLCAicGFyZW50cyIsICJwYXJlbnRJZCIsICJfZ2V0Q2VudGVyUG9zaXRpb24iLCAiX3RoaXMkX2dldFNwYWNlQXJvdW5kMiIsICJwb3NpdGlvbmVkTm9kZXMiLCAiX2luZGV4QXJyYXlUb05vZGVzIiwgImhhbmRsZWROb2RlQ291bnQiLCAiX3ZhbGlkYXRlUG9zaXRpb25BbmRDb250aW51ZSIsICJwYXJlbnRMZXZlbCIsICJjaGlsZFJlZiIsICJjaGlsZE5vZGVMZXZlbCIsICJwcmV2aW91c1BvcyIsICJzaGFyZWRQYXJlbnQiLCAiX2ZpbmRDb21tb25QYXJlbnQiLCAid2l0aENoaWxkIiwgIl9wbGFjZUJyYW5jaE5vZGVzIiwgImlkQXJyYXkiLCAiZml4IiwgImh1YlNpemVzIiwgImh1YlNpemUiLCAiX2dldEFjdGl2ZUVkZ2VzIiwgIl90aGlzNiIsICJsZXZlbERvd25zdHJlYW0iLCAiX2dldEh1YlNpemVzIiwgIl9jcmF3bE5ldHdvcmsiLCAiX3RoaXM3IiwgImxldmVsQSIsICJzZXRNaW5MZXZlbFRvWmVybyIsICJfdGhpczgiLCAic2hha2VUb3dhcmRzIiwgIl9ldmVyeUluc3RhbmNlUHJvcGVydHkiLCAiX3RoaXM5IiwgImFkZFJlbGF0aW9uIiwgImNoZWNrSWZUcmVlIiwgIl90aGlzMTAiLCAic3RhcnRpbmdOb2RlSWQiLCAiY3Jhd2xlciIsICJ0cmVlIiwgInNldFRyZWVJbmRleCIsICJfdGhpczExIiwgInNoaWZ0ZXIiLCAiY2hpbGRBIiwgImNoaWxkQiIsICJfdGhpczEyIiwgIml0ZXJhdGVQYXJlbnRzIiwgInBhcmVudFJlZiIsICJmaW5kUGFyZW50IiwgImZvdW5kUGFyZW50IiwgImlzVmVydGljYWwiLCAibWluUG9zIiwgIm1heFBvcyIsICJNYW5pcHVsYXRpb25TeXN0ZW0iLCAiaW50ZXJhY3Rpb25IYW5kbGVyIiwgImVkaXRNb2RlIiwgIm1hbmlwdWxhdGlvbkRpdiIsICJlZGl0TW9kZURpdiIsICJjbG9zZURpdiIsICJfZG9tRXZlbnRMaXN0ZW5lckNsZWFudXBRdWV1ZSIsICJ0ZW1wb3JhcnlVSUZ1bmN0aW9ucyIsICJ0ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucyIsICJ0ZW1wb3JhcnlJZHMiLCAiZ3VpRW5hYmxlZCIsICJpbk1vZGUiLCAic2VsZWN0ZWRDb250cm9sTm9kZSIsICJpbml0aWFsbHlBY3RpdmUiLCAiZGVsZXRlTm9kZSIsICJkZWxldGVFZGdlIiwgImNvbnRyb2xOb2RlU3R5bGUiLCAiX2NsZWFuIiwgIl9yZXN0b3JlIiwgImVuYWJsZUVkaXRNb2RlIiwgImRpc2FibGVFZGl0TW9kZSIsICJsb2NhbGUiLCAibG9jYWxlcyIsICJfc2V0dXAiLCAic2hvd01hbmlwdWxhdG9yVG9vbGJhciIsICJfY3JlYXRlRWRpdEJ1dHRvbiIsICJtYW5pcHVsYXRpb25ET00iLCAic2VsZWN0ZWROb2RlQ291bnQiLCAiZ2V0U2VsZWN0ZWROb2RlQ291bnQiLCAic2VsZWN0ZWRFZGdlQ291bnQiLCAiZ2V0U2VsZWN0ZWRFZGdlQ291bnQiLCAic2VsZWN0ZWRUb3RhbENvdW50IiwgIm5lZWRTZXBlcmF0b3IiLCAiX2NyZWF0ZUFkZE5vZGVCdXR0b24iLCAiX2NyZWF0ZVNlcGVyYXRvciIsICJfY3JlYXRlQWRkRWRnZUJ1dHRvbiIsICJfY3JlYXRlRWRpdE5vZGVCdXR0b24iLCAiX2NyZWF0ZUVkaXRFZGdlQnV0dG9uIiwgIl9jcmVhdGVEZWxldGVCdXR0b24iLCAiX2JpbmRFbGVtZW50RXZlbnRzIiwgInRvZ2dsZUVkaXRNb2RlIiwgIl90ZW1wb3JhcnlCaW5kRXZlbnQiLCAiX2NyZWF0ZUJhY2tCdXR0b24iLCAiX2NyZWF0ZURlc2NyaXB0aW9uIiwgIl9wZXJmb3JtQWRkTm9kZSIsICJmaW5hbGl6ZWREYXRhIiwgImFsZXJ0IiwgIl90ZW1wb3JhcnlCaW5kVUkiLCAiX2hhbmRsZUNvbm5lY3QiLCAiX2ZpbmlzaENvbm5lY3QiLCAiX2RyYWdDb250cm9sTm9kZSIsICJfZHJhZ1N0YXJ0RWRnZSIsICJlZGl0V2l0aG91dERyYWciLCAiZWRnZUJlaW5nRWRpdGVkSWQiLCAiY29udHJvbE5vZGVGcm9tIiwgIl9nZXROZXdUYXJnZXROb2RlIiwgImNvbnRyb2xOb2RlVG8iLCAiX2NvbnRyb2xOb2RlVG91Y2giLCAiX2NvbnRyb2xOb2RlRHJhZ1N0YXJ0IiwgIl9jb250cm9sTm9kZURyYWciLCAiX2NvbnRyb2xOb2RlRHJhZ0VuZCIsICJmaW5kQm9yZGVyUG9zaXRpb25zIiwgIl9wZXJmb3JtRWRpdEVkZ2UiLCAic2VsZWN0ZWROb2RlcyIsICJzZWxlY3RlZEVkZ2VzIiwgImRlbGV0ZUZ1bmN0aW9uIiwgIl9jcmVhdGVXcmFwcGVycyIsICJfcmVtb3ZlTWFuaXB1bGF0aW9uRE9NIiwgIl90aGlzJG9wdGlvbnMkbG9jYWxlcyIsICJfdGhpcyRvcHRpb25zJGxvY2FsZXMyIiwgInNldEF0dHJpYnV0ZSIsICJyZWN1cnNpdmVET01EZWxldGUiLCAiX2NyZWF0ZUJ1dHRvbiIsICJfY2xlYW51cERPTUV2ZW50TGlzdGVuZXJzIiwgIl9jbGVhbnVwVGVtcG9yYXJ5Tm9kZXNBbmRFZGdlcyIsICJfdW5iaW5kVGVtcG9yYXJ5VUlzIiwgIl91bmJpbmRUZW1wb3JhcnlFdmVudHMiLCAiYWRkTm9kZU1vZGUiLCAiYWRkRWRnZU1vZGUiLCAiZWRpdEVkZ2VNb2RlIiwgImRlbGV0ZUJ0bkNsYXNzIiwgInJ0bCIsICJkZWxldGVTZWxlY3RlZCIsICJsYWJlbENsYXNzTmFtZSIsICJuZXdGdW5jdGlvbiIsICJVSWZ1bmN0aW9uTmFtZSIsICJldmVudE5hbWUiLCAiZG9tRWxlbWVudCIsICJrZXl1cExpc3RlbmVyIiwgIl9yZWYiLCAiaW5kZXhUZW1wRWRnZSIsICJfY29udGV4dDI4IiwgIl9jb250ZXh0MjkiLCAiaW5kZXhUZW1wTm9kZSIsICJmcm9tU2VsZWN0IiwgInRvU2VsZWN0IiwgIm92ZXJsYXBwaW5nTm9kZUlkcyIsICJ0YXJnZXROb2RlIiwgImNvbm5lY3Rpb25FZGdlIiwgImNvbm5lY3RGcm9tSWQiLCAiX2NvbnRleHQzMCIsICJfY29udGV4dDMxIiwgIl9wZXJmb3JtQWRkRWRnZSIsICJjbGlja0RhdGEiLCAiZGVmYXVsdERhdGEiLCAic291cmNlTm9kZUlkIiwgImVlRnVuY3QiLCAiYm9vbCIsICJlbmRQb2ludHMiLCAibm9kZU9wdGlvbnMiLCAiYm9vbGVhbiIsICJmdW5jdGlvbiIsICJfX3R5cGVfXyIsICJtaW5pbXVtIiwgImRvbSIsICJtYXhpbXVtIiwgImNvbmZpZ3VyZSIsICJzaG93QnV0dG9uIiwgIl9fYW55X18iLCAiaW50ZXJhY3Rpb24iLCAibWFuaXB1bGF0aW9uIiwgImNsaWNrVG9Vc2UiLCAiYW55IiwgImNvbmZpZ3VyZU9wdGlvbnMiLCAiY29uZmlndXJhdG9ySGlkZU9wdGlvbiIsICJwYXJlbnRQYXRoIiwgIm9wdGlvbk5hbWUiLCAiRmxveWRXYXJzaGFsbCIsICJlZGdlc0FycmF5IiwgIkRfbWF0cml4IiwgImNlbGwiLCAia25vZGUiLCAia2NvbG0iLCAiaW5vZGUiLCAiaWNvbG0iLCAiam5vZGUiLCAiamNvbG0iLCAiS2FtYWRhS2F3YWkiLCAiZWRnZVN0cmVuZ3RoIiwgImRpc3RhbmNlU29sdmVyIiwgImlnbm9yZUNsdXN0ZXJzIiwgImdldERpc3RhbmNlcyIsICJfY3JlYXRlTF9tYXRyaXgiLCAiX2NyZWF0ZUtfbWF0cml4IiwgIl9jcmVhdGVFX21hdHJpeCIsICJtYXhJdGVyYXRpb25zIiwgIm1heEVuZXJneSIsICJoaWdoRV9ub2RlSWQiLCAiZEVfZHgiLCAiZEVfZHkiLCAiZGVsdGFfbSIsICJzdWJJdGVyYXRpb25zIiwgIl90aGlzJF9nZXRIaWdoZXN0RW5lcjIiLCAiX2dldEhpZ2hlc3RFbmVyZ3lOb2RlIiwgIl9tb3ZlTm9kZSIsICJfdGhpcyRfZ2V0RW5lcmd5MiIsICJfZ2V0RW5lcmd5IiwgIm1heEVuZXJneU5vZGVJZCIsICJkRV9keF9tYXgiLCAiZEVfZHlfbWF4IiwgIm5vZGVJZHgiLCAiX3RoaXMkX2dldEVuZXJneTQiLCAiX3RoaXMkRV9zdW1zJG0iLCAiRV9zdW1zIiwgImQyRV9keDIiLCAiZDJFX2R4ZHkiLCAiZDJFX2R5MiIsICJ4X20iLCAieV9tIiwgImttIiwgIktfbWF0cml4IiwgImxtIiwgIkxfbWF0cml4IiwgImlJZHgiLCAieF9pIiwgInlfaSIsICJrbWF0IiwgImxtYXQiLCAiZGVub21pbmF0b3IiLCAiX3VwZGF0ZUVfbWF0cml4IiwgIkVfbWF0cml4IiwgIm1JZHgiLCAiY29sbSIsICJsY29sbSIsICJvbGREeCIsICJvbGREeSIsICJOZXR3b3JrIiwgInJlbmRlcmVyIiwgIm5vZGVzSGFuZGxlciIsICJlZGdlc0hhbmRsZXIiLCAiX2NyZWF0ZSIsICJzZXREYXRhIiwgIlZhbGlkYXRvciIsICJ2YWxpZGF0ZSIsICJyYXdDb2RlIiwgIl9yYXdDb2RlJHNwbGl0MiIsICJyYXdMYW5ndWFnZSIsICJyYXdDb3VudHJ5IiwgImxhbmd1YWdlIiwgImNvdW50cnkiLCAiY29uZmlndXJhdG9yIiwgIkNvbmZpZ3VyYXRvciIsICJuZXR3b3JrT3B0aW9ucyIsICJzZXRNb2R1bGVPcHRpb25zIiwgImFjdGl2YXRvciIsICJBY3RpdmF0b3IiLCAiX3VwZGF0ZVZpc2libGVJbmRpY2VzIiwgImVkZ2VOb2Rlc1ByZXNlbnQiLCAiX3VwZGF0ZVZhbHVlUmFuZ2UiLCAiZ2VwaGkiLCAiZ2VwaGlEYXRhIiwgInZhbHVlTWluIiwgInZhbHVlTWF4IiwgInZhbHVlVG90YWwiLCAic2V0VmFsdWVSYW5nZSIsICJpc0FjdGl2ZSIsICJhY3RpdmUiLCAiY2x1c3RlciIsICJnZXROb2Rlc0luQ2x1c3RlciIsICJjbHVzdGVyQnlIdWJzaXplIiwgInVwZGF0ZUNsdXN0ZXJlZE5vZGUiLCAiZ2V0QmFzZUVkZ2UiLCAidXBkYXRlRWRnZSIsICJnZXRTZWVkIiwgImVkaXROb2RlTW9kZSIsICJnZXRQb3NpdGlvbnMiLCAic3RvcmVQb3NpdGlvbnMiLCAibW92ZU5vZGUiLCAiZ2V0Qm91bmRpbmdCb3giLCAiZ2V0Q29ubmVjdGVkTm9kZXMiLCAib2JqZWN0SWQiLCAiZ2V0Q29ubmVjdGVkRWRnZXMiLCAiZ2V0U2VsZWN0ZWRFZGdlcyIsICJzZWxlY3ROb2RlcyIsICJzZWxlY3RFZGdlcyIsICJjb21taXRXaXRob3V0RW1pdHRpbmciLCAicmVkcmF3IiwgImdldFNjYWxlIiwgImdldE9wdGlvbnNGcm9tQ29uZmlndXJhdG9yIiwgImdldE9wdGlvbnMiLCAicGFyc2VET1ROZXR3b3JrIiwgImRvdHBhcnNlciIsICJfY2xhc3NDYWxsQ2hlY2siLCAiaW5zdGFuY2UiLCAiQ29uc3RydWN0b3IiLCAiVHlwZUVycm9yIiwgInQiLCAiY2hlY2siLCAiaXQiLCAiTWF0aCIsICJnbG9iYWwiLCAiZ2xvYmFsVGhpcyIsICJ3aW5kb3ciLCAic2VsZiIsICJ0aGlzIiwgIkZ1bmN0aW9uIiwgImZhaWxzIiwgImV4ZWMiLCAiZXJyb3IiLCAiZnVuY3Rpb25CaW5kTmF0aXZlIiwgInJlcXVpcmUkJDAiLCAidGVzdCIsICJiaW5kIiwgImhhc093blByb3BlcnR5IiwgIk5BVElWRV9CSU5EIiwgIkZ1bmN0aW9uUHJvdG90eXBlIiwgInByb3RvdHlwZSIsICJhcHBseSIsICJjYWxsIiwgImZ1bmN0aW9uQXBwbHkiLCAiUmVmbGVjdCIsICJhcmd1bWVudHMiLCAidW5jdXJyeVRoaXNXaXRoQmluZCIsICJmdW5jdGlvblVuY3VycnlUaGlzIiwgImZuIiwgInVuY3VycnlUaGlzIiwgInRvU3RyaW5nIiwgInN0cmluZ1NsaWNlIiwgInNsaWNlIiwgImNsYXNzb2ZSYXciLCAicmVxdWlyZSQkMSIsICJmdW5jdGlvblVuY3VycnlUaGlzQ2xhdXNlIiwgImRvY3VtZW50QWxsIiwgImRvY3VtZW50IiwgImFsbCIsICJkb2N1bWVudEFsbF8xIiwgIklTX0hUTUxEREEiLCAiaXNDYWxsYWJsZSIsICJhcmd1bWVudCIsICJkZXNjcmlwdG9ycyIsICJPYmplY3QiLCAiZGVmaW5lUHJvcGVydHkiLCAiZ2V0IiwgImZ1bmN0aW9uQ2FsbCIsICIkcHJvcGVydHlJc0VudW1lcmFibGUiLCAicHJvcGVydHlJc0VudW1lcmFibGUiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIk5BU0hPUk5fQlVHIiwgIm9iamVjdFByb3BlcnR5SXNFbnVtZXJhYmxlIiwgImYiLCAiViIsICJkZXNjcmlwdG9yIiwgImVudW1lcmFibGUiLCAibWF0Y2giLCAidmVyc2lvbiIsICJjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IiLCAiYml0bWFwIiwgInZhbHVlIiwgImNvbmZpZ3VyYWJsZSIsICJ3cml0YWJsZSIsICJjbGFzc29mIiwgInJlcXVpcmUkJDIiLCAiJE9iamVjdCIsICJzcGxpdCIsICJpbmRleGVkT2JqZWN0IiwgImlzTnVsbE9yVW5kZWZpbmVkIiwgIiRUeXBlRXJyb3IiLCAicmVxdWlyZU9iamVjdENvZXJjaWJsZSIsICJJbmRleGVkT2JqZWN0IiwgInRvSW5kZXhlZE9iamVjdCIsICJpc09iamVjdCIsICJwYXRoIiwgImFGdW5jdGlvbiIsICJ2YXJpYWJsZSIsICJnZXRCdWlsdEluIiwgIm5hbWVzcGFjZSIsICJtZXRob2QiLCAibGVuZ3RoIiwgIm9iamVjdElzUHJvdG90eXBlT2YiLCAiaXNQcm90b3R5cGVPZiIsICJlbmdpbmVVc2VyQWdlbnQiLCAibmF2aWdhdG9yIiwgIlN0cmluZyIsICJ1c2VyQWdlbnQiLCAicHJvY2VzcyIsICJEZW5vIiwgInZlcnNpb25zIiwgInY4IiwgImVuZ2luZVY4VmVyc2lvbiIsICJWOF9WRVJTSU9OIiwgIiRTdHJpbmciLCAic3ltYm9sQ29uc3RydWN0b3JEZXRlY3Rpb24iLCAiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwgInN5bWJvbCIsICJTeW1ib2wiLCAic2hhbSIsICJ1c2VTeW1ib2xBc1VpZCIsICJpdGVyYXRvciIsICJpc1N5bWJvbCIsICJyZXF1aXJlJCQzIiwgIiRTeW1ib2wiLCAidHJ5VG9TdHJpbmciLCAiYUNhbGxhYmxlIiwgImdldE1ldGhvZCIsICJQIiwgImZ1bmMiLCAiZGVmaW5lR2xvYmFsUHJvcGVydHkiLCAia2V5IiwgIlNIQVJFRCIsICJzaGFyZWRTdG9yZSIsICJzdG9yZSIsICJzaGFyZWRNb2R1bGUiLCAicHVzaCIsICJtb2RlIiwgImNvcHlyaWdodCIsICJsaWNlbnNlIiwgInNvdXJjZSIsICJ0b09iamVjdCIsICJoYXNPd25Qcm9wZXJ0eV8xIiwgImhhc093biIsICJpZCIsICJwb3N0Zml4IiwgInJhbmRvbSIsICJ1aWQiLCAic2hhcmVkIiwgIk5BVElWRV9TWU1CT0wiLCAicmVxdWlyZSQkNCIsICJVU0VfU1lNQk9MX0FTX1VJRCIsICJyZXF1aXJlJCQ1IiwgIldlbGxLbm93blN5bWJvbHNTdG9yZSIsICJjcmVhdGVXZWxsS25vd25TeW1ib2wiLCAid2l0aG91dFNldHRlciIsICJ3ZWxsS25vd25TeW1ib2wiLCAibmFtZSIsICJvcmRpbmFyeVRvUHJpbWl0aXZlIiwgImlucHV0IiwgInByZWYiLCAidmFsIiwgInZhbHVlT2YiLCAiVE9fUFJJTUlUSVZFIiwgInRvUHJpbWl0aXZlIiwgInJlc3VsdCIsICJleG90aWNUb1ByaW0iLCAidG9Qcm9wZXJ0eUtleSIsICJFWElTVFMiLCAiY3JlYXRlRWxlbWVudCIsICJkb2N1bWVudENyZWF0ZUVsZW1lbnQiLCAiaWU4RG9tRGVmaW5lIiwgImEiLCAiREVTQ1JJUFRPUlMiLCAicHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUiLCAicmVxdWlyZSQkNiIsICJJRThfRE9NX0RFRklORSIsICJyZXF1aXJlJCQ3IiwgIiRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAib2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIk8iLCAicmVwbGFjZW1lbnQiLCAiaXNGb3JjZWQiLCAiZmVhdHVyZSIsICJkZXRlY3Rpb24iLCAiZGF0YSIsICJub3JtYWxpemUiLCAiUE9MWUZJTEwiLCAiTkFUSVZFIiwgInN0cmluZyIsICJyZXBsYWNlIiwgInRvTG93ZXJDYXNlIiwgImlzRm9yY2VkXzEiLCAiZnVuY3Rpb25CaW5kQ29udGV4dCIsICJ0aGF0IiwgInY4UHJvdG90eXBlRGVmaW5lQnVnIiwgImFuT2JqZWN0IiwgIlY4X1BST1RPVFlQRV9ERUZJTkVfQlVHIiwgIiRkZWZpbmVQcm9wZXJ0eSIsICJFTlVNRVJBQkxFIiwgIkNPTkZJR1VSQUJMRSIsICJXUklUQUJMRSIsICJvYmplY3REZWZpbmVQcm9wZXJ0eSIsICJBdHRyaWJ1dGVzIiwgImN1cnJlbnQiLCAiZGVmaW5lUHJvcGVydHlNb2R1bGUiLCAiY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5IiwgIm9iamVjdCIsICJyZXF1aXJlJCQ4IiwgInJlcXVpcmUkJDkiLCAid3JhcENvbnN0cnVjdG9yIiwgIk5hdGl2ZUNvbnN0cnVjdG9yIiwgIldyYXBwZXIiLCAiYiIsICJjIiwgIl9leHBvcnQiLCAib3B0aW9ucyIsICJGT1JDRUQiLCAiVVNFX05BVElWRSIsICJWSVJUVUFMX1BST1RPVFlQRSIsICJzb3VyY2VQcm9wZXJ0eSIsICJ0YXJnZXRQcm9wZXJ0eSIsICJuYXRpdmVQcm9wZXJ0eSIsICJyZXN1bHRQcm9wZXJ0eSIsICJUQVJHRVQiLCAidGFyZ2V0IiwgIkdMT0JBTCIsICJTVEFUSUMiLCAic3RhdCIsICJQUk9UTyIsICJwcm90byIsICJuYXRpdmVTb3VyY2UiLCAidGFyZ2V0UHJvdG90eXBlIiwgImZvcmNlZCIsICJkb250Q2FsbEdldFNldCIsICJ3cmFwIiwgInJlYWwiLCAiJCIsICIkJFAiLCAiZXhwb3J0cyIsICJkZXNjIiwgImlzQXJyYXkiLCAiQXJyYXkiLCAiY2VpbCIsICJmbG9vciIsICJ0cnVuYyIsICJ4IiwgIm4iLCAidG9JbnRlZ2VyT3JJbmZpbml0eSIsICJudW1iZXIiLCAibWluIiwgInRvTGVuZ3RoIiwgImxlbmd0aE9mQXJyYXlMaWtlIiwgIm9iaiIsICJkb2VzTm90RXhjZWVkU2FmZUludGVnZXIiLCAiY3JlYXRlUHJvcGVydHkiLCAicHJvcGVydHlLZXkiLCAidG9TdHJpbmdUYWdTdXBwb3J0IiwgIlRPX1NUUklOR19UQUdfU1VQUE9SVCIsICJUT19TVFJJTkdfVEFHIiwgIkNPUlJFQ1RfQVJHVU1FTlRTIiwgInRhZyIsICJjYWxsZWUiLCAiZnVuY3Rpb25Ub1N0cmluZyIsICJpbnNwZWN0U291cmNlIiwgIm5vb3AiLCAiZW1wdHkiLCAiY29uc3RydWN0IiwgImNvbnN0cnVjdG9yUmVnRXhwIiwgIklOQ09SUkVDVF9UT19TVFJJTkciLCAiaXNDb25zdHJ1Y3Rvck1vZGVybiIsICJpc0NvbnN0cnVjdG9yTGVnYWN5IiwgImlzQ29uc3RydWN0b3IiLCAiY2FsbGVkIiwgIlNQRUNJRVMiLCAiJEFycmF5IiwgImFycmF5U3BlY2llc0NvbnN0cnVjdG9yIiwgIm9yaWdpbmFsQXJyYXkiLCAiQyIsICJjb25zdHJ1Y3RvciIsICJ1bmRlZmluZWQiLCAiYXJyYXlTcGVjaWVzQ3JlYXRlIiwgImFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQiLCAiTUVUSE9EX05BTUUiLCAiYXJyYXkiLCAiZm9vIiwgIkJvb2xlYW4iLCAicmVxdWlyZSQkMTEiLCAiSVNfQ09OQ0FUX1NQUkVBREFCTEUiLCAicmVxdWlyZSQkMTAiLCAiSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCIsICJjb25jYXQiLCAiaXNDb25jYXRTcHJlYWRhYmxlIiwgInNwcmVhZGFibGUiLCAiYXJpdHkiLCAiYXJnIiwgImkiLCAiayIsICJsZW4iLCAiRSIsICJBIiwgIm1heCIsICJ0b0Fic29sdXRlSW5kZXgiLCAiaW5kZXgiLCAiaW50ZWdlciIsICJjcmVhdGVNZXRob2QiLCAiSVNfSU5DTFVERVMiLCAiJHRoaXMiLCAiZWwiLCAiZnJvbUluZGV4IiwgImFycmF5SW5jbHVkZXMiLCAiaW5jbHVkZXMiLCAiaW5kZXhPZiIsICJoaWRkZW5LZXlzIiwgIm9iamVjdEtleXNJbnRlcm5hbCIsICJuYW1lcyIsICJlbnVtQnVnS2V5cyIsICJpbnRlcm5hbE9iamVjdEtleXMiLCAib2JqZWN0S2V5cyIsICJrZXlzIiwgIm9iamVjdERlZmluZVByb3BlcnRpZXMiLCAiZGVmaW5lUHJvcGVydGllcyIsICJQcm9wZXJ0aWVzIiwgInByb3BzIiwgImFjdGl2ZVhEb2N1bWVudCIsICJodG1sIiwgInNoYXJlZEtleSIsICJkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlIiwgIlBST1RPVFlQRSIsICJTQ1JJUFQiLCAiSUVfUFJPVE8iLCAiRW1wdHlDb25zdHJ1Y3RvciIsICJzY3JpcHRUYWciLCAiY29udGVudCIsICJMVCIsICJOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYIiwgIndyaXRlIiwgImNsb3NlIiwgInRlbXAiLCAicGFyZW50V2luZG93IiwgIk51bGxQcm90b09iamVjdCIsICJBY3RpdmVYT2JqZWN0IiwgImlmcmFtZURvY3VtZW50IiwgImlmcmFtZSIsICJKUyIsICJkb21haW4iLCAic3R5bGUiLCAiZGlzcGxheSIsICJhcHBlbmRDaGlsZCIsICJzcmMiLCAiY29udGVudFdpbmRvdyIsICJvcGVuIiwgIkYiLCAib2JqZWN0Q3JlYXRlIiwgImNyZWF0ZSIsICJvYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImdldE93blByb3BlcnR5TmFtZXMiLCAiYXJyYXlTbGljZVNpbXBsZSIsICJzdGFydCIsICJlbmQiLCAiZmluIiwgIiRnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImFycmF5U2xpY2UiLCAid2luZG93TmFtZXMiLCAib2JqZWN0R2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsIiwgIm9iamVjdEdldE93blByb3BlcnR5U3ltYm9scyIsICJkZWZpbmVCdWlsdEluIiwgImRlZmluZUJ1aWx0SW5BY2Nlc3NvciIsICJ3ZWxsS25vd25TeW1ib2xXcmFwcGVkIiwgInNldCIsICJoYXMiLCAid3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSIsICJ3ZWxsS25vd25TeW1ib2xEZWZpbmUiLCAiTkFNRSIsICJzeW1ib2xEZWZpbmVUb1ByaW1pdGl2ZSIsICJTeW1ib2xQcm90b3R5cGUiLCAiaGludCIsICJvYmplY3RUb1N0cmluZyIsICJzZXRUb1N0cmluZ1RhZyIsICJUQUciLCAiU0VUX01FVEhPRCIsICJXZWFrTWFwIiwgIk5BVElWRV9XRUFLX01BUCIsICJPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCIsICJzdGF0ZSIsICJtZXRhZGF0YSIsICJmYWNhZGUiLCAiU1RBVEUiLCAiaW50ZXJuYWxTdGF0ZSIsICJlbmZvcmNlIiwgImdldHRlckZvciIsICJUWVBFIiwgInR5cGUiLCAiSVNfTUFQIiwgIklTX0ZJTFRFUiIsICJJU19TT01FIiwgIklTX0VWRVJZIiwgIklTX0ZJTkRfSU5ERVgiLCAiSVNfRklMVEVSX1JFSkVDVCIsICJOT19IT0xFUyIsICJjYWxsYmFja2ZuIiwgInNwZWNpZmljQ3JlYXRlIiwgImJvdW5kRnVuY3Rpb24iLCAiYXJyYXlJdGVyYXRpb24iLCAiZm9yRWFjaCIsICJtYXAiLCAiZmlsdGVyIiwgInNvbWUiLCAiZXZlcnkiLCAiZmluZCIsICJmaW5kSW5kZXgiLCAiZmlsdGVyUmVqZWN0IiwgInJlcXVpcmUkJDEyIiwgIiR0b1N0cmluZyIsICJyZXF1aXJlJCQxMyIsICJyZXF1aXJlJCQxNCIsICJuYXRpdmVPYmplY3RDcmVhdGUiLCAicmVxdWlyZSQkMTUiLCAicmVxdWlyZSQkMTYiLCAiZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSIsICJyZXF1aXJlJCQxNyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwiLCAicmVxdWlyZSQkMTgiLCAiZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlIiwgInJlcXVpcmUkJDE5IiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSIsICJyZXF1aXJlJCQyMCIsICJyZXF1aXJlJCQyMSIsICJyZXF1aXJlJCQyMiIsICJyZXF1aXJlJCQyMyIsICJyZXF1aXJlJCQyNCIsICJyZXF1aXJlJCQyNSIsICJyZXF1aXJlJCQyNiIsICJyZXF1aXJlJCQyOCIsICJyZXF1aXJlJCQyOSIsICJyZXF1aXJlJCQzMCIsICJyZXF1aXJlJCQzMSIsICJkZWZpbmVXZWxsS25vd25TeW1ib2wiLCAicmVxdWlyZSQkMzIiLCAiZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUiLCAicmVxdWlyZSQkMzMiLCAicmVxdWlyZSQkMzQiLCAiSW50ZXJuYWxTdGF0ZU1vZHVsZSIsICJyZXF1aXJlJCQzNSIsICIkZm9yRWFjaCIsICJyZXF1aXJlJCQzNiIsICJISURERU4iLCAicmVxdWlyZSQkMjciLCAiU1lNQk9MIiwgInNldEludGVybmFsU3RhdGUiLCAiZ2V0SW50ZXJuYWxTdGF0ZSIsICJPYmplY3RQcm90b3R5cGUiLCAiUmFuZ2VFcnJvciIsICJRT2JqZWN0IiwgIm5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJuYXRpdmVEZWZpbmVQcm9wZXJ0eSIsICJuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzIiwgIm5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlIiwgIkFsbFN5bWJvbHMiLCAiT2JqZWN0UHJvdG90eXBlU3ltYm9scyIsICJVU0VfU0VUVEVSIiwgImZpbmRDaGlsZCIsICJmYWxsYmFja0RlZmluZVByb3BlcnR5IiwgIk9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IiLCAic2V0U3ltYm9sRGVzY3JpcHRvciIsICJkZXNjcmlwdGlvbiIsICIkZGVmaW5lUHJvcGVydGllcyIsICJwcm9wZXJ0aWVzIiwgIiRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiSVNfT0JKRUNUX1BST1RPVFlQRSIsICJzZXR0ZXIiLCAiJCROIiwgIiRmb3JFYWNoJDEiLCAidXNlU2V0dGVyIiwgInVzZVNpbXBsZSIsICJzeW1ib2xSZWdpc3RyeURldGVjdGlvbiIsICJrZXlGb3IiLCAiTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSIsICJTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5IiwgIlN5bWJvbFRvU3RyaW5nUmVnaXN0cnkiLCAiZm9yIiwgInN5bSIsICJnZXRSZXBsYWNlckZ1bmN0aW9uIiwgInJlcGxhY2VyIiwgInJhd0xlbmd0aCIsICJlbGVtZW50IiwgImtleXNMZW5ndGgiLCAicm9vdCIsICJqIiwgIiRzdHJpbmdpZnkiLCAiY2hhckF0IiwgImNoYXJDb2RlQXQiLCAibnVtYmVyVG9TdHJpbmciLCAidGVzdGVyIiwgImxvdyIsICJoaSIsICJXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04iLCAiSUxMX0ZPUk1FRF9VTklDT0RFIiwgInN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IiwgImFyZ3MiLCAiJHJlcGxhY2VyIiwgImZpeElsbEZvcm1lZCIsICJvZmZzZXQiLCAicHJldiIsICJuZXh0IiwgInN0cmluZ2lmeSIsICJzcGFjZSIsICJKU09OIiwgIkl0ZXJhdG9yUHJvdG90eXBlIiwgIlByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSIsICJhcnJheUl0ZXJhdG9yIiwgIml0ZXJhdG9ycyIsICJnZXREZXNjcmlwdG9yIiwgImZ1bmN0aW9uTmFtZSIsICJQUk9QRVIiLCAiY29ycmVjdFByb3RvdHlwZUdldHRlciIsICJnZXRQcm90b3R5cGVPZiIsICJDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIiLCAib2JqZWN0R2V0UHJvdG90eXBlT2YiLCAiSVRFUkFUT1IiLCAiQlVHR1lfU0FGQVJJX0lURVJBVE9SUyIsICJORVdfSVRFUkFUT1JfUFJPVE9UWVBFIiwgIml0ZXJhdG9yc0NvcmUiLCAiSXRlcmF0b3JzIiwgInJldHVyblRoaXMiLCAidW5jdXJyeVRoaXNBY2Nlc3NvciIsICJhUG9zc2libGVQcm90b3R5cGUiLCAib2JqZWN0U2V0UHJvdG90eXBlT2YiLCAic2V0UHJvdG90eXBlT2YiLCAiQ09SUkVDVF9TRVRURVIiLCAiX19wcm90b19fIiwgIkZ1bmN0aW9uTmFtZSIsICJjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yIiwgIkl0ZXJhdG9yQ29uc3RydWN0b3IiLCAiRU5VTUVSQUJMRV9ORVhUIiwgIkl0ZXJhdG9yc0NvcmUiLCAiUFJPUEVSX0ZVTkNUSU9OX05BTUUiLCAiS0VZUyIsICJWQUxVRVMiLCAiRU5UUklFUyIsICJpdGVyYXRvckRlZmluZSIsICJJdGVyYWJsZSIsICJERUZBVUxUIiwgIklTX1NFVCIsICJDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUiLCAibWV0aG9kcyIsICJLRVkiLCAiZ2V0SXRlcmF0aW9uTWV0aG9kIiwgIktJTkQiLCAiZGVmYXVsdEl0ZXJhdG9yIiwgIkl0ZXJhYmxlUHJvdG90eXBlIiwgIklOQ09SUkVDVF9WQUxVRVNfTkFNRSIsICJuYXRpdmVJdGVyYXRvciIsICJhbnlOYXRpdmVJdGVyYXRvciIsICJlbnRyaWVzIiwgInZhbHVlcyIsICJjcmVhdGVJdGVyUmVzdWx0T2JqZWN0IiwgImRvbmUiLCAiZGVmaW5lSXRlcmF0b3IiLCAiQVJSQVlfSVRFUkFUT1IiLCAiZGVmaW5lSXRlcmF0b3IkMiIsICJpdGVyYXRlZCIsICJraW5kIiwgIkFyZ3VtZW50cyIsICJET01JdGVyYWJsZXMiLCAiQ1NTUnVsZUxpc3QiLCAiQ1NTU3R5bGVEZWNsYXJhdGlvbiIsICJDU1NWYWx1ZUxpc3QiLCAiQ2xpZW50UmVjdExpc3QiLCAiRE9NUmVjdExpc3QiLCAiRE9NU3RyaW5nTGlzdCIsICJET01Ub2tlbkxpc3QiLCAiRGF0YVRyYW5zZmVySXRlbUxpc3QiLCAiRmlsZUxpc3QiLCAiSFRNTEFsbENvbGxlY3Rpb24iLCAiSFRNTENvbGxlY3Rpb24iLCAiSFRNTEZvcm1FbGVtZW50IiwgIkhUTUxTZWxlY3RFbGVtZW50IiwgIk1lZGlhTGlzdCIsICJNaW1lVHlwZUFycmF5IiwgIk5hbWVkTm9kZU1hcCIsICJOb2RlTGlzdCIsICJQYWludFJlcXVlc3RMaXN0IiwgIlBsdWdpbiIsICJQbHVnaW5BcnJheSIsICJTVkdMZW5ndGhMaXN0IiwgIlNWR051bWJlckxpc3QiLCAiU1ZHUGF0aFNlZ0xpc3QiLCAiU1ZHUG9pbnRMaXN0IiwgIlNWR1N0cmluZ0xpc3QiLCAiU1ZHVHJhbnNmb3JtTGlzdCIsICJTb3VyY2VCdWZmZXJMaXN0IiwgIlN0eWxlU2hlZXRMaXN0IiwgIlRleHRUcmFja0N1ZUxpc3QiLCAiVGV4dFRyYWNrTGlzdCIsICJUb3VjaExpc3QiLCAiQ09MTEVDVElPTl9OQU1FIiwgIkNvbGxlY3Rpb24iLCAiQ29sbGVjdGlvblByb3RvdHlwZSIsICJNRVRBREFUQSIsICJ0aGlzU3ltYm9sVmFsdWUiLCAic3ltYm9sSXNSZWdpc3RlcmVkIiwgImlzUmVnaXN0ZXJlZFN5bWJvbCIsICIkaXNXZWxsS25vd25TeW1ib2wiLCAiaXNXZWxsS25vd25TeW1ib2wiLCAic3ltYm9sS2V5cyIsICJzeW1ib2xLZXlzTGVuZ3RoIiwgInN5bWJvbEtleSIsICJzeW1ib2xJc1dlbGxLbm93biIsICJpc1JlZ2lzdGVyZWQiLCAiaXNXZWxsS25vd24iLCAiQ09OVkVSVF9UT19TVFJJTkciLCAicG9zIiwgImZpcnN0IiwgInNlY29uZCIsICJTIiwgInBvc2l0aW9uIiwgInNpemUiLCAiY29kZUF0IiwgIlNUUklOR19JVEVSQVRPUiIsICJwb2ludCIsICJfdHlwZW9mIiwgIm8iLCAiX1N5bWJvbCIsICJfU3ltYm9sJGl0ZXJhdG9yIiwgIl90b1Byb3BlcnR5S2V5IiwgInByaW0iLCAiX1N5bWJvbCR0b1ByaW1pdGl2ZSIsICJyZXMiLCAiTnVtYmVyIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9PYmplY3QkZGVmaW5lUHJvcGVydHkiLCAiX2NyZWF0ZUNsYXNzIiwgInByb3RvUHJvcHMiLCAic3RhdGljUHJvcHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIiRGdW5jdGlvbiIsICJqb2luIiwgImZhY3RvcmllcyIsICJmdW5jdGlvbkJpbmQiLCAiUHJvdG90eXBlIiwgInBhcnRBcmdzIiwgImFyZ3NMZW5ndGgiLCAibGlzdCIsICJnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kIiwgIkNPTlNUUlVDVE9SIiwgIk1FVEhPRCIsICJOYW1lc3BhY2UiLCAicHVyZU1ldGhvZCIsICJOYXRpdmVQcm90b3R5cGUiLCAib3duIiwgIklTX1JJR0hUIiwgImFyZ3VtZW50c0xlbmd0aCIsICJtZW1vIiwgImFycmF5UmVkdWNlIiwgImxlZnQiLCAicmlnaHQiLCAiYXJyYXlNZXRob2RJc1N0cmljdCIsICJlbmdpbmVJc05vZGUiLCAiJHJlZHVjZSIsICJyZWR1Y2UiLCAiQXJyYXlQcm90b3R5cGUiLCAiJGZpbHRlciIsICIkbWFwIiwgImZsYXR0ZW5JbnRvQXJyYXkiLCAib3JpZ2luYWwiLCAic291cmNlTGVuIiwgImRlcHRoIiwgIm1hcHBlciIsICJ0aGlzQXJnIiwgImVsZW1lbnRMZW4iLCAidGFyZ2V0SW5kZXgiLCAic291cmNlSW5kZXgiLCAibWFwRm4iLCAiZmxhdE1hcCIsICJTaW1wbGVEYXRhUGlwZSIsICJfc291cmNlIiwgIl90cmFuc2Zvcm1lcnMiLCAiX3RhcmdldCIsICJfY29udGV4dCIsICJfY29udGV4dDIiLCAiX2NvbnRleHQzIiwgImFkZCIsICJfYmluZEluc3RhbmNlUHJvcGVydHkiLCAiX2FkZCIsICJyZW1vdmUiLCAiX3JlbW92ZSIsICJ1cGRhdGUiLCAiX3VwZGF0ZSIsICJfdHJhbnNmb3JtSXRlbXMiLCAib24iLCAiX2xpc3RlbmVycyIsICJvZmYiLCAiaXRlbXMiLCAiX2NvbnRleHQ0IiwgIl9yZWR1Y2VJbnN0YW5jZVByb3BlcnR5IiwgInRyYW5zZm9ybSIsICJfbmFtZSIsICJwYXlsb2FkIiwgIm9sZERhdGEiLCAiRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbiIsICJjYWxsYmFjayIsICJfZmlsdGVySW5zdGFuY2VQcm9wZXJ0eSIsICJfbWFwSW5zdGFuY2VQcm9wZXJ0eSIsICJfZmxhdE1hcEluc3RhbmNlUHJvcGVydHkiLCAiaXRlcmF0b3JDbG9zZSIsICJpbm5lclJlc3VsdCIsICJpbm5lckVycm9yIiwgImlzQXJyYXlJdGVyYXRvck1ldGhvZCIsICJnZXRJdGVyYXRvck1ldGhvZCIsICJnZXRJdGVyYXRvciIsICJ1c2luZ0l0ZXJhdG9yIiwgIml0ZXJhdG9yTWV0aG9kIiwgImNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmciLCAiU0FGRV9DTE9TSU5HIiwgIml0ZXJhdG9yV2l0aFJldHVybiIsICJyZXR1cm4iLCAiZnJvbSIsICJjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24iLCAiU0tJUF9DTE9TSU5HIiwgIklURVJBVElPTl9TVVBQT1JUIiwgImFycmF5TGlrZSIsICJJU19DT05TVFJVQ1RPUiIsICJtYXBmbiIsICJtYXBwaW5nIiwgInN0ZXAiLCAiaXRlcmFibGUiLCAiYXJyYXlTZXRMZW5ndGgiLCAic2V0QXJyYXlMZW5ndGgiLCAicHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoIiwgIml0ZW0iLCAiYXJnQ291bnQiLCAibmF0aXZlU2xpY2UiLCAiSEFTX1NQRUNJRVNfU1VQUE9SVCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJhcnIiLCAiYXJyMiIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAibWluTGVuIiwgImFycmF5TGlrZVRvQXJyYXkiLCAiX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJfQXJyYXkkZnJvbSIsICJfc2xpY2VkVG9BcnJheSIsICJfQXJyYXkkaXNBcnJheSIsICJyIiwgImwiLCAiX2dldEl0ZXJhdG9yTWV0aG9kIiwgImUiLCAidSIsICJfcHVzaEluc3RhbmNlUHJvcGVydHkiLCAidW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAibm9uSXRlcmFibGVSZXN0IiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJpdGVyIiwgIm5vbkl0ZXJhYmxlU3ByZWFkIiwgIm93bktleXMiLCAibmF0aXZlS2V5cyIsICJhcnJheUZvckVhY2giLCAibmF0aXZlUmV2ZXJzZSIsICJyZXZlcnNlIiwgIiQkciIsICJkZWxldGVQcm9wZXJ0eU9yVGhyb3ciLCAic3BsaWNlIiwgImRlbGV0ZUNvdW50IiwgImluc2VydENvdW50IiwgImFjdHVhbERlbGV0ZUNvdW50IiwgInRvIiwgImFjdHVhbFN0YXJ0IiwgIiRhc3NpZ24iLCAiYXNzaWduIiwgIm9iamVjdEFzc2lnbiIsICJCIiwgImFscGhhYmV0IiwgImNociIsICJUIiwgIm5hdGl2ZUdldFByb3RvdHlwZU9mIiwgIkQiLCAicGFyZW50IiwgImVuZ2luZUlzQnVuIiwgIkJ1biIsICJ2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCIsICJwYXNzZWQiLCAicmVxdWlyZWQiLCAiRU5HSU5FX0lTX0JVTiIsICJVU0VSX0FHRU5UIiwgIldSQVAiLCAic2NoZWR1bGVyc0ZpeCIsICJzY2hlZHVsZXIiLCAiaGFzVGltZUFyZyIsICJmaXJzdFBhcmFtSW5kZXgiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImJvdW5kQXJncyIsICJwYXJhbXMiLCAic2V0SW50ZXJ2YWwiLCAic2V0VGltZW91dCIsICJFbWl0dGVyIiwgIl9jYWxsYmFja3MiLCAiTWFwIiwgImV2ZW50IiwgImxpc3RlbmVyIiwgImNhbGxiYWNrcyIsICJvbmNlIiwgImFyZ3VtZW50c18iLCAiY2xlYXIiLCAiZGVsZXRlIiwgImVtaXQiLCAiY2FsbGJhY2tzQ29weSIsICJsaXN0ZW5lcnMiLCAibGlzdGVuZXJDb3VudCIsICJ0b3RhbENvdW50IiwgImhhc0xpc3RlbmVycyIsICJhZGRFdmVudExpc3RlbmVyIiwgInJlbW92ZUxpc3RlbmVyIiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAicmVtb3ZlQWxsTGlzdGVuZXJzIiwgIm1vZHVsZSIsICJfZXh0ZW5kcyIsICJfaW5oZXJpdHNMb29zZSIsICJzdWJDbGFzcyIsICJzdXBlckNsYXNzIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiUmVmZXJlbmNlRXJyb3IiLCAib3V0cHV0IiwgIm5leHRLZXkiLCAid2luIiwgImFzc2lnbiQxIiwgIlZFTkRPUl9QUkVGSVhFUyIsICJURVNUX0VMRU1FTlQiLCAicm91bmQiLCAiYWJzIiwgIm5vdyIsICJEYXRlIiwgInByZWZpeGVkIiwgInByb3BlcnR5IiwgInByZWZpeCIsICJwcm9wIiwgImNhbWVsUHJvcCIsICJ0b1VwcGVyQ2FzZSIsICJQUkVGSVhFRF9UT1VDSF9BQ1RJT04iLCAiTkFUSVZFX1RPVUNIX0FDVElPTiIsICJUT1VDSF9BQ1RJT05fQ09NUFVURSIsICJUT1VDSF9BQ1RJT05fQVVUTyIsICJUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OIiwgIlRPVUNIX0FDVElPTl9OT05FIiwgIlRPVUNIX0FDVElPTl9QQU5fWCIsICJUT1VDSF9BQ1RJT05fUEFOX1kiLCAiVE9VQ0hfQUNUSU9OX01BUCIsICJ0b3VjaE1hcCIsICJjc3NTdXBwb3J0cyIsICJDU1MiLCAic3VwcG9ydHMiLCAiZ2V0VG91Y2hBY3Rpb25Qcm9wcyIsICJTVVBQT1JUX1RPVUNIIiwgIlNVUFBPUlRfUE9JTlRFUl9FVkVOVFMiLCAiU1VQUE9SVF9PTkxZX1RPVUNIIiwgIklOUFVUX1RZUEVfVE9VQ0giLCAiSU5QVVRfVFlQRV9NT1VTRSIsICJDT01QVVRFX0lOVEVSVkFMIiwgIklOUFVUX1NUQVJUIiwgIklOUFVUX0VORCIsICJJTlBVVF9DQU5DRUwiLCAiRElSRUNUSU9OX05PTkUiLCAiRElSRUNUSU9OX0xFRlQiLCAiRElSRUNUSU9OX1JJR0hUIiwgIkRJUkVDVElPTl9VUCIsICJESVJFQ1RJT05fRE9XTiIsICJESVJFQ1RJT05fSE9SSVpPTlRBTCIsICJESVJFQ1RJT05fVkVSVElDQUwiLCAiRElSRUNUSU9OX0FMTCIsICJQUk9QU19YWSIsICJQUk9QU19DTElFTlRfWFkiLCAiZWFjaCIsICJjb250ZXh0IiwgImJvb2xPckZuIiwgImluU3RyIiwgInN0ciIsICJUb3VjaEFjdGlvbiIsICJtYW5hZ2VyIiwgIl9wcm90byIsICJjb21wdXRlIiwgImFjdGlvbnMiLCAidHJpbSIsICJ0b3VjaEFjdGlvbiIsICJyZWNvZ25pemVycyIsICJyZWNvZ25pemVyIiwgImVuYWJsZSIsICJnZXRUb3VjaEFjdGlvbiIsICJoYXNQYW5YIiwgImhhc1BhblkiLCAicHJldmVudERlZmF1bHRzIiwgInNyY0V2ZW50IiwgImRpcmVjdGlvbiIsICJvZmZzZXREaXJlY3Rpb24iLCAic2Vzc2lvbiIsICJwcmV2ZW50ZWQiLCAicHJldmVudERlZmF1bHQiLCAiaGFzTm9uZSIsICJpc1RhcFBvaW50ZXIiLCAicG9pbnRlcnMiLCAiaXNUYXBNb3ZlbWVudCIsICJkaXN0YW5jZSIsICJpc1RhcFRvdWNoVGltZSIsICJkZWx0YVRpbWUiLCAicHJldmVudFNyYyIsICJoYXNQYXJlbnQiLCAibm9kZSIsICJwYXJlbnROb2RlIiwgImdldENlbnRlciIsICJwb2ludGVyc0xlbmd0aCIsICJjbGllbnRYIiwgInkiLCAiY2xpZW50WSIsICJzaW1wbGVDbG9uZUlucHV0RGF0YSIsICJ0aW1lU3RhbXAiLCAiY2VudGVyIiwgImRlbHRhWCIsICJkZWx0YVkiLCAiZ2V0RGlzdGFuY2UiLCAicDEiLCAicDIiLCAic3FydCIsICJnZXRBbmdsZSIsICJhdGFuMiIsICJQSSIsICJnZXREaXJlY3Rpb24iLCAiZ2V0VmVsb2NpdHkiLCAiY29tcHV0ZUlucHV0RGF0YSIsICJmaXJzdElucHV0IiwgImZpcnN0TXVsdGlwbGUiLCAib2Zmc2V0Q2VudGVyIiwgImFuZ2xlIiwgIm9mZnNldERlbHRhIiwgInByZXZEZWx0YSIsICJwcmV2SW5wdXQiLCAiZXZlbnRUeXBlIiwgIm92ZXJhbGxWZWxvY2l0eSIsICJvdmVyYWxsVmVsb2NpdHlYIiwgIm92ZXJhbGxWZWxvY2l0eVkiLCAic2NhbGUiLCAicm90YXRpb24iLCAibWF4UG9pbnRlcnMiLCAidmVsb2NpdHkiLCAidmVsb2NpdHlYIiwgInZlbG9jaXR5WSIsICJsYXN0IiwgImxhc3RJbnRlcnZhbCIsICJ2IiwgInNyY0V2ZW50VGFyZ2V0IiwgImNvbXBvc2VkUGF0aCIsICJpbnB1dEhhbmRsZXIiLCAicG9pbnRlcnNMZW4iLCAiY2hhbmdlZFBvaW50ZXJzTGVuIiwgImNoYW5nZWRQb2ludGVycyIsICJpc0ZpcnN0IiwgImlzRmluYWwiLCAicmVjb2duaXplIiwgInNwbGl0U3RyIiwgImFkZEV2ZW50TGlzdGVuZXJzIiwgInR5cGVzIiwgInJlbW92ZUV2ZW50TGlzdGVuZXJzIiwgImdldFdpbmRvd0ZvckVsZW1lbnQiLCAiZG9jIiwgIm93bmVyRG9jdW1lbnQiLCAiZGVmYXVsdFZpZXciLCAiSW5wdXQiLCAiaW5wdXRUYXJnZXQiLCAiZG9tSGFuZGxlciIsICJldiIsICJpbml0IiwgImV2RWwiLCAiZXZUYXJnZXQiLCAiZXZXaW4iLCAiZGVzdHJveSIsICJpbkFycmF5IiwgImZpbmRCeUtleSIsICJQT0lOVEVSX0lOUFVUX01BUCIsICJwb2ludGVyZG93biIsICJwb2ludGVybW92ZSIsICJwb2ludGVydXAiLCAicG9pbnRlcmNhbmNlbCIsICJwb2ludGVyb3V0IiwgIklFMTBfUE9JTlRFUl9UWVBFX0VOVU0iLCAiUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyIsICJQT0lOVEVSX1dJTkRPV19FVkVOVFMiLCAiTVNQb2ludGVyRXZlbnQiLCAiUG9pbnRlckV2ZW50IiwgIlBvaW50ZXJFdmVudElucHV0IiwgIl9JbnB1dCIsICJfdGhpcyIsICJwb2ludGVyRXZlbnRzIiwgInJlbW92ZVBvaW50ZXIiLCAiZXZlbnRUeXBlTm9ybWFsaXplZCIsICJwb2ludGVyVHlwZSIsICJpc1RvdWNoIiwgInN0b3JlSW5kZXgiLCAicG9pbnRlcklkIiwgImJ1dHRvbiIsICJ0b0FycmF5IiwgInVuaXF1ZUFycmF5IiwgInNvcnQiLCAicmVzdWx0cyIsICJUT1VDSF9JTlBVVF9NQVAiLCAidG91Y2hzdGFydCIsICJ0b3VjaG1vdmUiLCAidG91Y2hlbmQiLCAidG91Y2hjYW5jZWwiLCAiVG91Y2hJbnB1dCIsICJ0YXJnZXRJZHMiLCAidG91Y2hlcyIsICJnZXRUb3VjaGVzIiwgInRhcmdldFRvdWNoZXMiLCAiYWxsVG91Y2hlcyIsICJpZGVudGlmaWVyIiwgImNoYW5nZWRUb3VjaGVzIiwgImNoYW5nZWRUYXJnZXRUb3VjaGVzIiwgInRvdWNoIiwgIk1PVVNFX0lOUFVUX01BUCIsICJtb3VzZWRvd24iLCAibW91c2Vtb3ZlIiwgIm1vdXNldXAiLCAiTW91c2VJbnB1dCIsICJwcmVzc2VkIiwgIndoaWNoIiwgIkRFRFVQX1RJTUVPVVQiLCAic2V0TGFzdFRvdWNoIiwgImV2ZW50RGF0YSIsICJwcmltYXJ5VG91Y2giLCAibGFzdFRvdWNoIiwgImx0cyIsICJsYXN0VG91Y2hlcyIsICJyZWNvcmRUb3VjaGVzIiwgImlzU3ludGhldGljRXZlbnQiLCAiZHgiLCAiZHkiLCAiVG91Y2hNb3VzZUlucHV0IiwgIl9tYW5hZ2VyIiwgImlucHV0RXZlbnQiLCAiaW5wdXREYXRhIiwgImlzTW91c2UiLCAic291cmNlQ2FwYWJpbGl0aWVzIiwgImZpcmVzVG91Y2hFdmVudHMiLCAibW91c2UiLCAiaW52b2tlQXJyYXlBcmciLCAiU1RBVEVfRkFJTEVEIiwgIl91bmlxdWVJZCIsICJnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyIiwgIm90aGVyUmVjb2duaXplciIsICJzdGF0ZVN0ciIsICJSZWNvZ25pemVyIiwgInNpbXVsdGFuZW91cyIsICJyZXF1aXJlRmFpbCIsICJyZWNvZ25pemVXaXRoIiwgImRyb3BSZWNvZ25pemVXaXRoIiwgInJlcXVpcmVGYWlsdXJlIiwgImRyb3BSZXF1aXJlRmFpbHVyZSIsICJoYXNSZXF1aXJlRmFpbHVyZXMiLCAiY2FuUmVjb2duaXplV2l0aCIsICJhZGRpdGlvbmFsRXZlbnQiLCAidHJ5RW1pdCIsICJjYW5FbWl0IiwgImlucHV0RGF0YUNsb25lIiwgInJlc2V0IiwgIlRhcFJlY29nbml6ZXIiLCAiX1JlY29nbml6ZXIiLCAidGFwcyIsICJpbnRlcnZhbCIsICJ0aW1lIiwgInRocmVzaG9sZCIsICJwb3NUaHJlc2hvbGQiLCAicFRpbWUiLCAicENlbnRlciIsICJfdGltZXIiLCAiX2lucHV0IiwgImNvdW50IiwgIl90aGlzMiIsICJ2YWxpZFBvaW50ZXJzIiwgInZhbGlkTW92ZW1lbnQiLCAidmFsaWRUb3VjaFRpbWUiLCAiZmFpbFRpbWVvdXQiLCAidmFsaWRJbnRlcnZhbCIsICJ2YWxpZE11bHRpVGFwIiwgIl90aGlzMyIsICJjbGVhclRpbWVvdXQiLCAidGFwQ291bnQiLCAiQXR0clJlY29nbml6ZXIiLCAiYXR0clRlc3QiLCAib3B0aW9uUG9pbnRlcnMiLCAiaXNSZWNvZ25pemVkIiwgImlzVmFsaWQiLCAiZGlyZWN0aW9uU3RyIiwgIlBhblJlY29nbml6ZXIiLCAiX0F0dHJSZWNvZ25pemVyIiwgInBYIiwgInBZIiwgImRpcmVjdGlvblRlc3QiLCAiaGFzTW92ZWQiLCAiU3dpcGVSZWNvZ25pemVyIiwgIlBpbmNoUmVjb2duaXplciIsICJpbk91dCIsICJSb3RhdGVSZWNvZ25pemVyIiwgIlByZXNzUmVjb2duaXplciIsICJ2YWxpZFRpbWUiLCAiZGVmYXVsdHMiLCAiZG9tRXZlbnRzIiwgImlucHV0Q2xhc3MiLCAiY3NzUHJvcHMiLCAidXNlclNlbGVjdCIsICJ0b3VjaFNlbGVjdCIsICJ0b3VjaENhbGxvdXQiLCAiY29udGVudFpvb21pbmciLCAidXNlckRyYWciLCAidGFwSGlnaGxpZ2h0Q29sb3IiLCAicHJlc2V0IiwgInRvZ2dsZUNzc1Byb3BzIiwgIm9sZENzc1Byb3BzIiwgIk1hbmFnZXIiLCAiaGFuZGxlcnMiLCAic3RvcCIsICJmb3JjZSIsICJzdG9wcGVkIiwgImN1clJlY29nbml6ZXIiLCAiZXhpc3RpbmciLCAidGFyZ2V0UmVjb2duaXplciIsICJldmVudHMiLCAiZ2VzdHVyZUV2ZW50IiwgImNyZWF0ZUV2ZW50IiwgImluaXRFdmVudCIsICJnZXN0dXJlIiwgImRpc3BhdGNoRXZlbnQiLCAiU0lOR0xFX1RPVUNIX0lOUFVUX01BUCIsICJTaW5nbGVUb3VjaElucHV0IiwgInN0YXJ0ZWQiLCAibm9ybWFsaXplU2luZ2xlVG91Y2hlcyIsICJjaGFuZ2VkIiwgImRlcHJlY2F0ZSIsICJtZXNzYWdlIiwgImRlcHJlY2F0aW9uTWVzc2FnZSIsICJFcnJvciIsICJzdGFjayIsICJsb2ciLCAiY29uc29sZSIsICJ3YXJuIiwgImV4dGVuZCIsICJkZXN0IiwgIm1lcmdlIiwgImluaGVyaXQiLCAiY2hpbGQiLCAiYmFzZSIsICJjaGlsZFAiLCAiYmFzZVAiLCAiX3N1cGVyIiwgImJpbmRGbiIsICJSZWFsSGFtbWVyIiwgIkhhbW1lciIsICJWRVJTSU9OIiwgIklOUFVUX01PVkUiLCAiU1RBVEVfUE9TU0lCTEUiLCAiU1RBVEVfQkVHQU4iLCAiU1RBVEVfQ0hBTkdFRCIsICJTVEFURV9FTkRFRCIsICJTVEFURV9SRUNPR05JWkVEIiwgIlNUQVRFX0NBTkNFTExFRCIsICJUYXAiLCAiUGFuIiwgIlN3aXBlIiwgIlBpbmNoIiwgIlJvdGF0ZSIsICJQcmVzcyIsICJERUxFVEUiLCAiZGVlcE9iamVjdEFzc2lnbiIsICJtZXJnZWQiLCAiZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5IiwgInN0cmlwRGVsZXRlIiwgIl9sZW4yIiwgIl9rZXkyIiwgIl9jb25jYXRJbnN0YW5jZVByb3BlcnR5IiwgInNldFRpbWUiLCAiZ2V0VGltZSIsICJfc3RlcCIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX1JlZmxlY3Qkb3duS2V5cyIsICJzIiwgImNsb25lIiwgImVyciIsICJfaSIsICJfT2JqZWN0JGtleXMiLCAiX09iamVjdCRrZXlzMiIsICJhQ29uc3RydWN0b3IiLCAibmF0aXZlQ29uc3RydWN0IiwgIk5FV19UQVJHRVRfQlVHIiwgIkFSR1NfQlVHIiwgIlRhcmdldCIsICJuZXdUYXJnZXQiLCAiJGFyZ3MiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICIkJGgiLCAiX3NldFByb3RvdHlwZU9mIiwgInAiLCAiX09iamVjdCRzZXRQcm90b3R5cGVPZiIsICJfaW5oZXJpdHMiLCAiX09iamVjdCRjcmVhdGUiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfT2JqZWN0JGdldFByb3RvdHlwZU9mIiwgIl9fZXNNb2R1bGUiLCAiJEVycm9yIiwgIlRFU1QiLCAiVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZIiwgIklTX1Y4X09SX0NIQUtSQV9TVEFDSyIsICJlcnJvclN0YWNrSW5zdGFsbGFibGUiLCAiY2xlYXJFcnJvclN0YWNrIiwgImRyb3BFbnRyaWVzIiwgInByZXBhcmVTdGFja1RyYWNlIiwgIkVSUk9SX1NUQUNLX0lOU1RBTExBQkxFIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIlJlc3VsdCIsICJSZXN1bHRQcm90b3R5cGUiLCAiaXRlcmF0ZSIsICJ1bmJvdW5kRnVuY3Rpb24iLCAiaXRlckZuIiwgIkFTX0VOVFJJRVMiLCAiSVNfUkVDT1JEIiwgIklTX0lURVJBVE9SIiwgIklOVEVSUlVQVEVEIiwgImNvbmRpdGlvbiIsICJjYWxsRm4iLCAiY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyIsICJleGNlcHRpb25zIiwgImluc3RhbGxFcnJvckNhdXNlIiwgImNhdXNlIiwgImluc3RhbGxFcnJvclN0YWNrIiwgIm5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50IiwgIiRkZWZhdWx0IiwgIiRBZ2dyZWdhdGVFcnJvciIsICJlcnJvcnMiLCAiaXNJbnN0YW5jZSIsICJBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSIsICJlcnJvcnNBcnJheSIsICJBZ2dyZWdhdGVFcnJvciIsICIkbG9jYXRpb24iLCAiZGVmZXIiLCAiY2hhbm5lbCIsICJwb3J0IiwgInNldFNwZWNpZXMiLCAiQ09OU1RSVUNUT1JfTkFNRSIsICJhbkluc3RhbmNlIiwgInNwZWNpZXNDb25zdHJ1Y3RvciIsICJkZWZhdWx0Q29uc3RydWN0b3IiLCAiZW5naW5lSXNJb3MiLCAiSVNfSU9TIiwgIklTX05PREUiLCAic2V0SW1tZWRpYXRlIiwgImNsZWFySW1tZWRpYXRlIiwgIkRpc3BhdGNoIiwgIk1lc3NhZ2VDaGFubmVsIiwgImNvdW50ZXIiLCAicXVldWUiLCAiT05SRUFEWVNUQVRFQ0hBTkdFIiwgImxvY2F0aW9uIiwgInJ1biIsICJydW5uZXIiLCAiZXZlbnRMaXN0ZW5lciIsICJnbG9iYWxQb3N0TWVzc2FnZURlZmVyIiwgInBvc3RNZXNzYWdlIiwgInByb3RvY29sIiwgImhvc3QiLCAibmV4dFRpY2siLCAicG9ydDIiLCAicG9ydDEiLCAib25tZXNzYWdlIiwgImltcG9ydFNjcmlwdHMiLCAicmVtb3ZlQ2hpbGQiLCAidGFzayIsICJRdWV1ZSIsICJoZWFkIiwgInRhaWwiLCAiUXVldWUkMyIsICJlbnRyeSIsICJub3RpZnkiLCAidG9nZ2xlIiwgInByb21pc2UiLCAidGhlbiIsICJlbmdpbmVJc0lvc1BlYmJsZSIsICJQZWJibGUiLCAiZW5naW5lSXNXZWJvc1dlYmtpdCIsICJtYWNyb3Rhc2siLCAiSVNfSU9TX1BFQkJMRSIsICJJU19XRUJPU19XRUJLSVQiLCAiTXV0YXRpb25PYnNlcnZlciIsICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIiwgIlByb21pc2UiLCAicXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yIiwgIm1pY3JvdGFzayIsICJmbHVzaCIsICJleGl0IiwgImVudGVyIiwgInJlc29sdmUiLCAiY3JlYXRlVGV4dE5vZGUiLCAib2JzZXJ2ZSIsICJjaGFyYWN0ZXJEYXRhIiwgIm1pY3JvdGFza18xIiwgInBlcmZvcm0iLCAicHJvbWlzZU5hdGl2ZUNvbnN0cnVjdG9yIiwgImVuZ2luZUlzRGVubyIsICJlbmdpbmVJc0Jyb3dzZXIiLCAiTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yIiwgIklTX0JST1dTRVIiLCAiSVNfREVOTyIsICJOYXRpdmVQcm9taXNlUHJvdG90eXBlIiwgIlNVQkNMQVNTSU5HIiwgIk5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCIsICJQcm9taXNlUmVqZWN0aW9uRXZlbnQiLCAiRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IiLCAiUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UiLCAiR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSIsICJGYWtlUHJvbWlzZSIsICJwcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24iLCAiUkVKRUNUSU9OX0VWRU5UIiwgIlByb21pc2VDYXBhYmlsaXR5IiwgInJlamVjdCIsICIkJHJlc29sdmUiLCAiJCRyZWplY3QiLCAibmV3UHJvbWlzZUNhcGFiaWxpdHkiLCAiSW50ZXJuYWwiLCAiT3duUHJvbWlzZUNhcGFiaWxpdHkiLCAiaG9zdFJlcG9ydEVycm9ycyIsICJQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24iLCAibmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUiLCAiUFJPTUlTRSIsICJnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSIsICJQcm9taXNlQ29uc3RydWN0b3IiLCAiUHJvbWlzZVByb3RvdHlwZSIsICJuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkiLCAiRElTUEFUQ0hfRVZFTlQiLCAiVU5IQU5ETEVEX1JFSkVDVElPTiIsICJpc1RoZW5hYmxlIiwgImNhbGxSZWFjdGlvbiIsICJyZWFjdGlvbiIsICJleGl0ZWQiLCAib2siLCAiZmFpbCIsICJyZWplY3Rpb24iLCAib25IYW5kbGVVbmhhbmRsZWQiLCAiaXNSZWplY3QiLCAibm90aWZpZWQiLCAicmVhY3Rpb25zIiwgIm9uVW5oYW5kbGVkIiwgInJlYXNvbiIsICJpc1VuaGFuZGxlZCIsICJ1bndyYXAiLCAiaW50ZXJuYWxSZWplY3QiLCAiaW50ZXJuYWxSZXNvbHZlIiwgIndyYXBwZXIiLCAiZXhlY3V0b3IiLCAib25GdWxmaWxsZWQiLCAib25SZWplY3RlZCIsICJQcm9taXNlV3JhcHBlciIsICJzZXRUb1N0cmluZ1RhZyQxIiwgInNldFNwZWNpZXMkMSIsICJwcm9taXNlU3RhdGljc0luY29ycmVjdEl0ZXJhdGlvbiIsICJjYXBhYmlsaXR5IiwgIiRwcm9taXNlUmVzb2x2ZSIsICJyZW1haW5pbmciLCAiYWxyZWFkeUNhbGxlZCIsICJjYXRjaCIsICJyYWNlIiwgInByb21pc2VSZXNvbHZlIiwgInByb21pc2VDYXBhYmlsaXR5IiwgIlByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIiLCAiQ0hFQ0tfV1JBUFBFUiIsICJhbGxTZXR0bGVkIiwgInN0YXR1cyIsICJQUk9NSVNFX0FOWV9FUlJPUiIsICJhbnkiLCAiYWxyZWFkeVJlc29sdmVkIiwgImFscmVhZHlSZWplY3RlZCIsICJmaW5hbGx5IiwgIm9uRmluYWxseSIsICJpc0Z1bmN0aW9uIiwgIndpdGhSZXNvbHZlcnMiLCAidHJ5IiwgIl9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSIsICJfUHJvbWlzZSIsICJfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkiLCAiX3JlZ2VuZXJhdG9yUnVudGltZSIsICJhc3luY0l0ZXJhdG9yIiwgInRvU3RyaW5nVGFnIiwgImRlZmluZSIsICJHZW5lcmF0b3IiLCAiQ29udGV4dCIsICJtYWtlSW52b2tlTWV0aG9kIiwgInRyeUNhdGNoIiwgImgiLCAiR2VuZXJhdG9yRnVuY3Rpb24iLCAiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCAiZyIsICJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCAiX2ludm9rZSIsICJBc3luY0l0ZXJhdG9yIiwgImludm9rZSIsICJfX2F3YWl0IiwgImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwgImRlbGVnYXRlIiwgIm1heWJlSW52b2tlRGVsZWdhdGUiLCAic2VudCIsICJfc2VudCIsICJkaXNwYXRjaEV4Y2VwdGlvbiIsICJhYnJ1cHQiLCAicmVzdWx0TmFtZSIsICJuZXh0TG9jIiwgInB1c2hUcnlFbnRyeSIsICJ0cnlMb2MiLCAiY2F0Y2hMb2MiLCAiZmluYWxseUxvYyIsICJhZnRlckxvYyIsICJ0cnlFbnRyaWVzIiwgInJlc2V0VHJ5RW50cnkiLCAiY29tcGxldGlvbiIsICJpc05hTiIsICJkaXNwbGF5TmFtZSIsICJpc0dlbmVyYXRvckZ1bmN0aW9uIiwgIm1hcmsiLCAiYXdyYXAiLCAiYXN5bmMiLCAicG9wIiwgInJ2YWwiLCAiaGFuZGxlIiwgImNvbXBsZXRlIiwgImZpbmlzaCIsICJkZWxlZ2F0ZVlpZWxkIiwgInJ1bnRpbWUiLCAicmVnZW5lcmF0b3IiLCAicmVnZW5lcmF0b3JSdW50aW1lIiwgImFjY2lkZW50YWxTdHJpY3RNb2RlIiwgImFycmF5QnVmZmVyTm9uRXh0ZW5zaWJsZSIsICJBcnJheUJ1ZmZlciIsICJidWZmZXIiLCAiaXNFeHRlbnNpYmxlIiwgIkFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSIsICIkaXNFeHRlbnNpYmxlIiwgIm9iamVjdElzRXh0ZW5zaWJsZSIsICJmcmVlemluZyIsICJwcmV2ZW50RXh0ZW5zaW9ucyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUiLCAiRlJFRVpJTkciLCAiUkVRVUlSRUQiLCAic2V0TWV0YWRhdGEiLCAib2JqZWN0SUQiLCAid2Vha0RhdGEiLCAibWV0YSIsICJpbnRlcm5hbE1ldGFkYXRhTW9kdWxlIiwgImZhc3RLZXkiLCAiZ2V0V2Vha0RhdGEiLCAib25GcmVlemUiLCAiSW50ZXJuYWxNZXRhZGF0YU1vZHVsZSIsICJpbnRlcm5hbFN0YXRlR2V0dGVyRm9yIiwgImNvbGxlY3Rpb24iLCAiY29tbW9uIiwgIklTX1dFQUsiLCAiQURERVIiLCAiZXhwb3J0ZWQiLCAiSVNfQURERVIiLCAiZ2V0Q29uc3RydWN0b3IiLCAic2V0U3Ryb25nIiwgImRlZmluZUJ1aWx0SW5zIiwgInVuc2FmZSIsICJjb2xsZWN0aW9uU3Ryb25nIiwgInByZXZpb3VzIiwgImdldEVudHJ5IiwgInJlbW92ZWQiLCAiSVRFUkFUT1JfTkFNRSIsICJnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZSIsICJnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUiLCAiJHNvbWUiLCAibWVyZ2VTb3J0IiwgImNvbXBhcmVmbiIsICJtaWRkbGUiLCAiaW5zZXJ0aW9uU29ydCIsICJsbGVuZ3RoIiwgInJsZW5ndGgiLCAibGluZGV4IiwgInJpbmRleCIsICJhcnJheVNvcnQiLCAiZmlyZWZveCIsICJlbmdpbmVGZlZlcnNpb24iLCAiZW5naW5lSXNJZU9yRWRnZSIsICJ3ZWJraXQiLCAiZW5naW5lV2Via2l0VmVyc2lvbiIsICJpbnRlcm5hbFNvcnQiLCAiRkYiLCAiSUVfT1JfRURHRSIsICJWOCIsICJXRUJLSVQiLCAibmF0aXZlU29ydCIsICJGQUlMU19PTl9VTkRFRklORUQiLCAiRkFJTFNfT05fTlVMTCIsICJTVFJJQ1RfTUVUSE9EIiwgIlNUQUJMRV9TT1JUIiwgImNvZGUiLCAiZnJvbUNoYXJDb2RlIiwgIml0ZW1zTGVuZ3RoIiwgImFycmF5TGVuZ3RoIiwgImdldFJhbmRvbVZhbHVlcyIsICJybmRzOCIsICJVaW50OEFycmF5IiwgInJuZyIsICJjcnlwdG8iLCAiYnl0ZVRvSGV4IiwgIm5hdGl2ZSIsICJyYW5kb21VVUlEIiwgInY0IiwgImJ1ZiIsICJybmRzIiwgImlzSWQiLCAiZGVsYXkiLCAiSW5maW5pdHkiLCAic2V0T3B0aW9ucyIsICJfZmx1c2hJZk5lZWRlZCIsICJfZXh0ZW5kZWQiLCAibWUiLCAiX2xlbiIsICJfa2V5IiwgIl9xdWV1ZSIsICJfdGltZW91dCIsICJfc2V0VGltZW91dCIsICJfc3BsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJEYXRhU2V0UGFydCIsICJzZW5kZXJJZCIsICJfc3Vic2NyaWJlcnMiLCAic3Vic2NyaWJlciIsICJTZXQiLCAiRGF0YVN0cmVhbSIsICJwYWlycyIsICJfcGFpcnMiLCAiX3N0ZXAkdmFsdWUiLCAidDAiLCAiX2l0ZXJhdG9yMiIsICJfc3RlcDIiLCAiX3N0ZXAyJHZhbHVlIiwgIl9pdGVyYXRvcjMiLCAiX3N0ZXAzIiwgIl9zdGVwMyR2YWx1ZSIsICJfaXRlcmF0b3I0IiwgIl9zdGVwNCIsICJfc3RlcDQkdmFsdWUiLCAiX2NvbnRleHQ1IiwgInBhaXIiLCAiX2NvbnRleHQ2IiwgIl9zdGVwNSIsICJfaXRlcmF0b3I1IiwgIl9zdGVwNSR2YWx1ZSIsICJfTWFwIiwgIl9TZXQiLCAidG9JZEFycmF5IiwgInRvSXRlbUFycmF5IiwgIl9zdGVwNiIsICJfaXRlcmF0b3I2IiwgIl9zdGVwNiR2YWx1ZSIsICJfU3ltYm9sJGl0ZXJhdG9yMiIsICJfY2FsbGVlIiwgIl9pdGVyYXRvcjciLCAiX3N0ZXA3IiwgIl9zdGVwNyR2YWx1ZSIsICJfY29udGV4dDciLCAiX3N0ZXA4IiwgIl9pdGVyYXRvcjgiLCAiX3N0ZXA4JHZhbHVlIiwgIl9jYWxsZWUyIiwgIl9pdGVyYXRvcjkiLCAiX3N0ZXA5IiwgIl9zdGVwOSR2YWx1ZSIsICJfY29udGV4dDgiLCAiX2dldEl0ZXJhdG9yIiwgImN1cnIiLCAibWF4SXRlbSIsICJtYXhWYWx1ZSIsICJfY3VyciR2YWx1ZSIsICJtaW5JdGVtIiwgIm1pblZhbHVlIiwgIl9jdXJyJHZhbHVlMiIsICJhY2N1bXVsYXRvciIsICJfc3RlcDEwIiwgIl9pdGVyYXRvcjEwIiwgIl9zdGVwMTAkdmFsdWUiLCAiX2NvbnRleHQ5IiwgIl9zb3J0SW5zdGFuY2VQcm9wZXJ0eSIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgImlkQSIsICJpdGVtQSIsICJfcmVmNCIsICJpZEIiLCAiaXRlbUIiLCAiRGF0YVNldCIsICJfRGF0YVNldFBhcnQiLCAiX2NyZWF0ZVN1cGVyIiwgIl9vcHRpb25zIiwgIl9kYXRhIiwgIl9pZFByb3AiLCAiZmllbGRJZCIsICJhZGRlZElkcyIsICJpZHNUb0FkZCIsICJkIiwgIl9zb21lSW5zdGFuY2VQcm9wZXJ0eSIsICJfYWRkSXRlbSIsICJfdHJpZ2dlciIsICJ1cGRhdGVkSWRzIiwgInVwZGF0ZWREYXRhIiwgImlkUHJvcCIsICJhZGRPclVwZGF0ZSIsICJvcmlnSWQiLCAiZnVsbEl0ZW0iLCAib2xkSXRlbSIsICJfT2JqZWN0JGFzc2lnbiIsICJfdXBkYXRlSXRlbSIsICJfdGhpczQiLCAidXBkYXRlRXZlbnREYXRhIiwgInVwZGF0ZXMiLCAiaWRzIiwgIl9pdGVtIiwgInJldHVyblR5cGUiLCAiaXRlbUlkcyIsICJpdGVtSWQiLCAiX2tleXNJbnN0YW5jZVByb3BlcnR5IiwgIm9yZGVyIiwgIl9zb3J0IiwgImZpZWxkcyIsICJfZmlsdGVyRmllbGRzIiwgInJlc3VsdGFudCIsICJtYXBwZWRJdGVtcyIsICJmaWx0ZXJlZEl0ZW0iLCAiZmllbGQiLCAiYXYiLCAiYnYiLCAicmVtb3ZlZElkcyIsICJyZW1vdmVkSXRlbXMiLCAiaWRlbnQiLCAibWF4RmllbGQiLCAiX3ZhbHVlc0luc3RhbmNlUHJvcGVydHkiLCAiaXRlbUZpZWxkIiwgIm1pbkZpZWxkIiwgImV4aXN0cyIsICJ1dWlkNCIsICJfSlNPTiRzdHJpbmdpZnkiLCAiX29iamVjdFNwcmVhZCIsICJfZW50cmllc0luc3RhbmNlUHJvcGVydHkiLCAiRGF0YVZpZXciLCAiX2xpc3RlbmVyIiwgIl9vbkV2ZW50IiwgInNldERhdGEiLCAiZ2V0RGF0YVNldCIsICJnZXRJZHMiLCAiX2lkcyIsICJvbGRJZHMiLCAibmV3SWRzIiwgInZpZXdPcHRpb25zIiwgInRoaXNGaWx0ZXIiLCAib3B0aW9uc0ZpbHRlciIsICJkZWZhdWx0RmlsdGVyIiwgInN0cmVhbSIsICJfdGhpcyRfZGF0YSIsICJvbGRJdGVtcyIsICJ1cGRhdGVkSXRlbXMiLCAiaXNEYXRhU2V0TGlrZSIsICJkaXN0aW5jdCIsICJ1cGRhdGVPbmx5IiwgImN4IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgImNhY2hlIiwgInByb3RvdHlwZSIsICJrZXlzIiwgImRlc2NyaXB0b3JzIiwgImZpbHRlciIsICJwb3NpdGlvbiIsICJtYXRjaGVzIiwgImhhc093blByb3BlcnR5IiwgInJlZHVjZXIiLCAidmFsdWUiLCAiZGVsaW1pdGVyIiwgImRlZmluZSIsICJzaXplIiwgImxlbmd0aCIsICJ0b2tlbiIsICJmaWx0ZXIiLCAiZWFjaCIsICJ0b2tlbiIsICJ2YWx1ZSIsICJtYXRjaCIsICJwcm90b3R5cGUiLCAidmFsdWUiLCAidG9TdHJpbmciLCAiZWFjaCIsICJlbmNvZGUiLCAidmFsdWUiLCAibWF0Y2giLCAia2V5cyIsICJ2YWx1ZSIsICJpc0Zvcm1EYXRhIiwgImlzRmlsZUxpc3QiLCAidHJhbnNpdGlvbmFsIiwgImxpbmUiLCAidmFsdWUiLCAibWF0Y2giLCAiZmlsdGVyIiwgImNoYXIiLCAic2VsZiIsICJrZXlzIiwgImNvbXB1dGVkIiwgInByb3RvdHlwZSIsICJ2YWx1ZSIsICJ2YWxpZGF0ZVN0YXR1cyIsICJtYXRjaCIsICJtaW4iLCAibm93IiwgIm5vdyIsICJmbHVzaCIsICJvcmlnaW4iLCAidmFsdWUiLCAibWF0Y2giLCAibWVyZ2UiLCAidG9rZW4iLCAidmFsdWUiLCAidHJhbnNpdGlvbmFsIiwgImxlbmd0aCIsICJzaWduYWwiLCAidmFsdWUiLCAiZG9uZSIsICJyZXMiLCAibGVuZ3RoIiwgImZsdXNoIiwgInZhbHVlIiwgImxlbmd0aCIsICJ2ZXJzaW9uIiwgInZhbHVlIiwgImtleXMiLCAidmFsaWRhdG9ycyIsICJ0cmFuc2l0aW9uYWwiLCAidG9rZW4iLCAidmFsdWUiLCAiQXhpb3MiLCAiQXhpb3NFcnJvciIsICJDYW5jZWxlZEVycm9yIiwgImlzQ2FuY2VsIiwgIkNhbmNlbFRva2VuIiwgIlZFUlNJT04iLCAiYWxsIiwgImlzQXhpb3NFcnJvciIsICJzcHJlYWQiLCAidG9Gb3JtRGF0YSIsICJBeGlvc0hlYWRlcnMiLCAiSHR0cFN0YXR1c0NvZGUiLCAibWVyZ2VDb25maWciLCAidmFsdWUiLCAiaUxvYWRlZENoaWxkcmVuIiwgInZhbHVlIiwgImN5Y2xlQ2hlY2siLCAibm9kZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImtleXMiLCAibm9kZSIsICJwcmVmaXgiLCAidXNlRGVwcmVjYXRlZEdlbmVyYXRlZEh0bWxJZCIsICJfcmVmIiwgInVzZU5ld0dlbmVyYXRlZEh0bWxJZCIsICJfcmVmMiIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJyIiwgIm8iLCAiaXNPYmplY3QiLCAiaXNJbnZlcnNlQ29sb3JNb2RlIiwgImdldENvbG9yTW9kZSIsICJnZXRPbiIsICJub2RlIiwgInNldE9uIiwgInZhbHVlIiwgIkNvbXB1dGVkIiwgImJhc2UiLCAiX3JlZiIsICJfcmVmMiIsICJnZXRDb21wdXRlZCIsICJvdmVyIiwgImJ1aWxkVGhlbWUiLCAiZ2V0UHJvdG90eXBlT2YiLCAicHJvdG90eXBlIiwgImtleSIsICJwcm9wZXJ0eSIsICJnZXQiLCAib3duS2V5cyIsICJtZXJnZURlZXAiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgInJnYiIsICJyZ2IiLCAibWF4IiwgInJvdW5kIiwgInJvdW5kIiwgImNzcyIsICJyZ2IiLCAiaHNsIiwgInJnYiIsICJyb3VuZCIsICJtaW4iLCAiZmxvb3IiLCAibWluIiwgIm1heCIsICJyZ2IyaHNsIiwgInBvdyIsICJjb3MiLCAic3FydCIsICJyb3VuZCIsICJudW0iLCAicm91bmQiLCAicm5kIiwgInJvdW5kIiwgInJnYiIsICJwb3ciLCAiYWJzIiwgInBvdyIsICJzaWduIiwgImFicyIsICJsYWIiLCAicG93IiwgInRlc3QiLCAicmdiIiwgInJnYiIsICJsY2giLCAidmFsdWUiLCAic3FydCIsICJwb3ciLCAicG93IiwgInNxcnQiLCAiUEkiLCAiY29zIiwgInNpbiIsICJhdGFuMiIsICJjb2xvcnMiLCAicmdiIiwgInBvdyIsICJjb2xvcnMiLCAidmFsdWUiLCAiZiIsICJfcG9zIiwgImNvbG9ycyIsICJsYWIiLCAicG93IiwgInNpbiIsICJjb3MiLCAibGlnaHRuZXNzIiwgImZsb29yIiwgImxvZyIsICJwb3ciLCAiZmxvb3IiLCAibnVtIiwgIm1pbiIsICJtYXgiLCAibGltaXRzIiwgInZhbHVlIiwgInNxcnQiLCAicG93IiwgIm1pbiIsICJtYXgiLCAiYXRhbjIiLCAiYWJzIiwgImNvcyIsICJzaW4iLCAiUEkiLCAiY29sb3JzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgImZsYXR0ZW4iLCAiX3JlZiIsICJldWlQYWxldHRlQ29sb3JCbGluZCIsICJfcmVmMiIsICJjb2xvcnMiLCAiYmFzZSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2xvb3AiLCAiaSIsICJldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQiLCAiaW5PcmlnaW5hbEZvcm1hdCIsICJ0cmFuc3BhcmVudGl6ZSIsICJ0aW50IiwgInNoYWRlIiwgInRpbnRPclNoYWRlIiwgImxpZ2h0bmVzcyIsICJkYXJrZW4iLCAiX3R5cGVvZiIsICJvIiwgIm1ha2VIaWdoQ29udHJhc3RDb2xvciIsICJsaWdodG5lc3MiLCAibWFrZURpc2FibGVkQ29udHJhc3RDb2xvciIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiY29sb3JzIiwgIl9yZWY2IiwgIl9yZWY3IiwgIl9yZWY4IiwgIl9yZWY5IiwgIl9yZWYxMCIsICJfcmVmMTEiLCAiX3JlZjEyIiwgIl9yZWYxMyIsICJfcmVmMTQiLCAiX3JlZjE1IiwgIl9yZWYxNiIsICJfcmVmMTciLCAiX3JlZjE4IiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl90eXBlb2YiLCAibyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl90eXBlb2YiLCAibG9naWNhbENTUyIsICJwcm9wZXJ0eSIsICJ2YWx1ZSIsICJsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrIiwgImNhbWVsQ2FzZSIsICJsb2dpY2FsU3R5bGUiLCAicHJvcGVydHkiLCAidmFsdWUiLCAiX2RlZmluZVByb3BlcnR5IiwgImxvZ2ljYWxTaXplQ1NTIiwgImxvZ2ljYWxUZXh0QWxpZ25DU1MiLCAidmFsdWUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgImxvZ2ljYWxTaG9ydGhhbmRDU1MiLCAicHJvcGVydHkiLCAidmFsdWUiLCAibG9naWNhbEJvcmRlclJhZGl1c0NTUyIsICJfcmVmIiwgIl9yZWYyIiwgIl9zbGljZWRUb0FycmF5IiwgIl90eXBlb2YiLCAibyIsICJfd3JhcFJlZ0V4cCIsICJlIiwgInIiLCAidCIsICJtYXRoV2l0aFVuaXRzIiwgInZhbHVlIiwgIm1hdGNoZXMiLCAiX3R5cGVvZiIsICJvIiwgInNpemVUb1BpeGVsIiwgImJhc2UiLCAiX3JlZiIsICJiYXNlIiwgImZvbnQiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiX3JlZjYiLCAiX3JlZjciLCAiX3JlZjgiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfcmVmIiwgIl9yZWYyIiwgImJhc2UiLCAiX3JlZiIsICJjb2xvcnMiLCAiZm9jdXMiLCAiZW1pdEV1aVByb3ZpZGVyV2FybmluZyIsICJwcm92aWRlck1lc3NhZ2UiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlN0eWxlU2hlZXQiLCAiaHlkcmF0ZSIsICJzaGVldCIsICJmbHVzaCIsICJhYnMiLCAidmFsdWUiLCAibGVuZ3RoIiwgInRyaW0iLCAiYXBwZW5kIiwgImxlbmd0aCIsICJ2YWx1ZSIsICJ0cmltIiwgInZhbHVlIiwgImxlbmd0aCIsICJwcm9wZXJ0eSIsICJjaGFyYWN0ZXIiLCAiY2hhcmFjdGVycyIsICJhcHBlbmQiLCAic2l6ZSIsICJhYnMiLCAidHJpbSIsICJsZW5ndGgiLCAic3RyaW5naWZ5IiwgImxlbmd0aCIsICJ3ZWFrTWVtb2l6ZSIsICJmdW5jIiwgImNhY2hlIiwgImNhY2hlIiwgImlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyIsICJjaGFyYWN0ZXIiLCAidG9SdWxlcyIsICJnZXRSdWxlcyIsICJ2YWx1ZSIsICJjb21wYXQiLCAicmVtb3ZlTGFiZWwiLCAibGVuZ3RoIiwgInByZWZpeGVyIiwgImNyZWF0ZUNhY2hlIiwgIm5vZGUiLCAic3RyaW5naWZ5IiwgInN0eWxpcyIsICJzdHlsZXMiLCAic2hlZXQiLCAiY2FjaGUiLCAiY2xhc3NOYW1lcyIsICJyZWdpc3RlclN0eWxlcyIsICJjYWNoZSIsICJpbnNlcnRTdHlsZXMiLCAiaXNEZXZlbG9wbWVudCIsICJpc0N1c3RvbVByb3BlcnR5IiwgInByb3BlcnR5IiwgImlzUHJvY2Vzc2FibGVWYWx1ZSIsICJ2YWx1ZSIsICJwcm9jZXNzU3R5bGVWYWx1ZSIsICJtYXRjaCIsICJrZXlmcmFtZXMiLCAibmV4dCIsICJzdHlsZXMiLCAic3RyaW5nIiwgIlJlYWN0IiwgInN5bmNGYWxsYmFjayIsICJ1c2VJbnNlcnRpb25FZmZlY3QiLCAiaXNEZXZlbG9wbWVudCIsICJ3aXRoRW1vdGlvbkNhY2hlIiwgImZ1bmMiLCAiY2FjaGUiLCAiZ2V0VGhlbWUiLCAiVGhlbWVQcm92aWRlciIsICJjcmVhdGVFbW90aW9uUHJvcHMiLCAiSW5zZXJ0aW9uIiwgIl9yZWYiLCAiY2FjaGUiLCAiaXNEZXZlbG9wbWVudCIsICJSZWFjdCIsICJqc3giLCAiY2FjaGUiLCAic3R5bGVzIiwgInNoZWV0IiwgIm5vZGUiLCAidG9TdHJpbmciLCAiX2V4dGVuZHMiLCAidXNlRXVpVGhlbWUiLCAid2l0aEV1aVRoZW1lIiwgIkNvbXBvbmVudCIsICJSZW5kZXIiLCAiUmVuZGVyV2l0aEV1aVRoZW1lIiwgIl9yZWYiLCAidGhyb3R0bGUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgInNvcnRNYXBCeUxhcmdlVG9TbWFsbFZhbHVlcyIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgInNvcnRNYXBCeVNtYWxsVG9MYXJnZVZhbHVlcyIsICJfcmVmNSIsICJfcmVmNiIsICJfcmVmNyIsICJfcmVmOCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciIsICJfcmVmIiwgInRocm90dGxlIiwgImltcG9ydF9yZWFjdCIsICJ1c2VDdXJyZW50RXVpQnJlYWtwb2ludCIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiY2xvbmVFbGVtZW50V2l0aENzcyIsICJldWlTdHlsaXNQcmVmaXhlciIsICJwcmVmaXgiLCAidmFsdWUiLCAibGVuZ3RoIiwgImNhY2hlIiwgIm1lcmdlIiwgImNzcyIsICJjcmVhdGVFbW90aW9uIiwgInZhbHVlIiwgImtleWZyYW1lcyIsICJhbmltYXRpb24iLCAiaW5qZWN0R2xvYmFsIiwgImN4IiwgImh5ZHJhdGUiLCAiZmx1c2giLCAiY2xhc3NuYW1lcyIsICJjc3MiLCAiaW1wb3J0X3JlYWN0IiwgIkV1aUVtb3Rpb25UaGVtZVByb3ZpZGVyIiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJ1c2VVcGRhdGVFZmZlY3QiLCAiaW1wb3J0X3JlYWN0IiwgInVzZUNvbWJpbmVkUmVmcyIsICJub2RlIiwgInNldE11bHRpcGxlUmVmcyIsICJfZXh0ZW5kcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiRXVpVGhlbWVNZW1vaXplZFN0eWxlc1Byb3ZpZGVyIiwgIl9yZWYiLCAiZ2V0TWVtb2l6ZWRTdHlsZXMiLCAidXNlRXVpTWVtb2l6ZWRTdHlsZXMiLCAid2l0aEV1aVN0eWxlc01lbW9pemVyIiwgIkNvbXBvbmVudCIsICJSZW5kZXIiLCAiUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyIiwgIl9yZWYyIiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIkV1aVRoZW1lUHJvdmlkZXIiLCAiX3JlZiIsICJzZXRHbG9iYWxDU1NWYXJpYWJsZXMiLCAiaXNFcXVhbCIsICJjc3MiLCAiX3JlZjIiLCAiY2xvbmVFbGVtZW50IiwgIlJlYWN0IiwgInVzZUlzV2l0aGluQnJlYWtwb2ludHMiLCAibWluIiwgIl90eXBlb2YiLCAibyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiQ2FudmFzVGV4dFV0aWxzIiwgIl9yZWYiLCAiZm9udCIsICJnZXQiLCAiaW1wb3J0X3JlYWN0IiwgImhhc0NoYXJzVG9SZXBsYWNlIiwgImNoYXIiLCAib25UYWJ1bGFyQ29weSIsICJWaXN1YWxseUhpZGUiLCAiX3JlZiIsICJPdmVycmlkZUNvcGllZFRhYnVsYXJDb250ZW50IiwgIl9yZWYyIiwgIlJlYWN0IiwgImZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmIiwgIm5vZGUiLCAiaXNVbmRlZmluZWQiLCAidmFsdWUiLCAiaXNOdWxsIiwgImlzTmlsIiwgImlzRGF0ZSIsICJ2YWx1ZSIsICJtb21lbnQiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJfaXNGdW5jdGlvbiIsICJpc0FycmF5IiwgIl9pc0FycmF5IiwgImlzU3RyaW5nIiwgIl9pc1N0cmluZyIsICJpc0Jvb2xlYW4iLCAiX2lzQm9vbGVhbiIsICJpc051bWJlciIsICJfaXNOdW1iZXIiLCAiaXNOYU4iLCAiX2lzTmFOIiwgImlzT2JqZWN0IiwgIl9pc09iamVjdCIsICJmb3JtYXRCb29sZWFuIiwgInZhbHVlIiwgIl9yZWYiLCAiaW1wb3J0X21vbWVudCIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJjYWxlbmRhciIsICJ2YWx1ZSIsICJtb21lbnQiLCAiZm9ybWF0RGF0ZSIsICJpc1N0cmluZyIsICJpc0Z1bmN0aW9uIiwgImZvcm1hdE51bWJlciIsICJ2YWx1ZSIsICJyb3VuZCIsICJpc1N0cmluZyIsICJudW1lcmFsIiwgImZvcm1hdFRleHQiLCAidmFsdWUiLCAiZm9ybWF0QXV0byIsICJ2YWx1ZSIsICJpc05hTiIsICJpc1N0cmluZyIsICJpc0RhdGUiLCAiaXNCb29sZWFuIiwgImlzTnVtYmVyIiwgImlzQXJyYXkiLCAiX3R5cGVvZiIsICJvIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgImdldEJ1ZmZlclZhbHVlcyIsICJfc2xpY2VkVG9BcnJheSIsICJfcmVmIiwgInBvc2l0aW9uIiwgIl9yZWYyIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfcmVmNCIsICJfcmVmNSIsICJub2RlIiwgImdldFNlY3VyZVJlbEZvclRhcmdldCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfZ2V0IiwgImdldCIsICJvYmplY3QiLCAiX2dldCIsICJ2MSIsICJyZXZlcnNlIiwgInZhbHVlIiwgInZhbHVlIiwgImdldFRyYW5zaXRpb25UaW1pbmdzIiwgImdldFdhaXREdXJhdGlvbiIsICJwZXJmb3JtT25GcmFtZSIsICJvbkZyYW1lIiwgImltcG9ydF9yZWFjdCIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJldWlCYWNrZ3JvdW5kQ29sb3IiLCAiX3JlZiIsICJfcmVmMiIsICJfdGludE9yU2hhZGUiLCAiY29sb3IiLCAiX2V1aUJhY2tncm91bmRDb2xvcnMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAidXNlRXVpQmFja2dyb3VuZENvbG9yQ1NTIiwgImV1aVNjcm9sbEJhclN0eWxlcyIsICJfcmVmIiwgImNvbG9ycyIsICJzaXplIiwgIl9yZWYyIiwgImV1aU92ZXJmbG93U2hhZG93U3R5bGVzIiwgIl9yZWYzIiwgInNpemUiLCAiX3JlZjQiLCAiZXVpWVNjcm9sbCIsICJfcmVmNSIsICJldWlZU2Nyb2xsV2l0aFNoYWRvd3MiLCAiX3JlZjciLCAiZXVpWFNjcm9sbCIsICJldWlYU2Nyb2xsV2l0aFNoYWRvd3MiLCAiZXVpRnVsbEhlaWdodCIsICJfdHlwZW9mIiwgIm8iLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIm93bktleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgImV1aVBhZGRpbmdTaXplIiwgIl9yZWYiLCAic2l6ZSIsICJfZ2V0RXVpUGFkZGluZ1NpemUiLCAiX2V1aVBhZGRpbmdTaWRlc0FuZFNpemVzIiwgIl9nZW5lcmF0ZVNpemVTdHlsZXMiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3NsaWNlZFRvQXJyYXkiLCAidXNlRXVpUGFkZGluZ0NTUyIsICJldWlPdXRsaW5lIiwgIl9yZWYiLCAiZXVpRm9jdXNSaW5nIiwgImV1aUZvbnRTaXplIiwgIl9yZWYiLCAiZXVpVGV4dEJyZWFrV29yZCIsICJldWlUZXh0VHJ1bmNhdGUiLCAiZXVpTnVtYmVyRm9ybWF0IiwgIl9yZWYyIiwgImV1aUJyZWFrcG9pbnQiLCAiX3JlZiIsICJldWlNaW5CcmVha3BvaW50IiwgIl9yZWYyIiwgInNpemUiLCAiZXVpTWF4QnJlYWtwb2ludCIsICJfcmVmMyIsICJzaXplIiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aUdsb2JhbFN0eWxlcyIsICJfcmVmIiwgImJhc2UiLCAiY29sb3JzIiwgImZvbnQiLCAic3R5bGVzIiwgIl90ZW1wbGF0ZU9iamVjdCIsICJfdGVtcGxhdGVPYmplY3QyIiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiX3RlbXBsYXRlT2JqZWN0IiwgImV1aUFuaW1TbGlkZUluVXAiLCAic2l6ZSIsICJfdGVtcGxhdGVPYmplY3QyIiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiZXVpU2NyZWVuUmVhZGVyT25seSIsICJFdWlTY3JlZW5SZWFkZXJPbmx5IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIkV1aVNjcmVlblJlYWRlckxpdmUiLCAiX3JlZiIsICJ0b2dnbGUiLCAiUHJvcFR5cGVzIiwgImNhbmRpZGF0ZVNlbGVjdG9ycyIsICJjYW5kaWRhdGVTZWxlY3RvciIsICJqb2luIiwgIk5vRWxlbWVudCIsICJFbGVtZW50IiwgIm1hdGNoZXMiLCAicHJvdG90eXBlIiwgIm1zTWF0Y2hlc1NlbGVjdG9yIiwgIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsICJnZXRSb290Tm9kZSIsICJlbGVtZW50IiwgIm93bmVyRG9jdW1lbnQiLCAiZ2V0Q2FuZGlkYXRlcyIsICJlbCIsICJpbmNsdWRlQ29udGFpbmVyIiwgImZpbHRlciIsICJjYW5kaWRhdGVzIiwgIkFycmF5IiwgInNsaWNlIiwgImFwcGx5IiwgInF1ZXJ5U2VsZWN0b3JBbGwiLCAiY2FsbCIsICJ1bnNoaWZ0IiwgImdldENhbmRpZGF0ZXNJdGVyYXRpdmVseSIsICJlbGVtZW50cyIsICJvcHRpb25zIiwgImVsZW1lbnRzVG9DaGVjayIsICJmcm9tIiwgImxlbmd0aCIsICJzaGlmdCIsICJ0YWdOYW1lIiwgImFzc2lnbmVkIiwgImFzc2lnbmVkRWxlbWVudHMiLCAiY29udGVudCIsICJjaGlsZHJlbiIsICJuZXN0ZWRDYW5kaWRhdGVzIiwgImZsYXR0ZW4iLCAicHVzaCIsICJzY29wZSIsICJ2YWxpZENhbmRpZGF0ZSIsICJpbmNsdWRlcyIsICJzaGFkb3dSb290IiwgImdldFNoYWRvd1Jvb3QiLCAidmFsaWRTaGFkb3dSb290IiwgInNoYWRvd1Jvb3RGaWx0ZXIiLCAiZ2V0VGFiaW5kZXgiLCAibm9kZSIsICJpc1Njb3BlIiwgInRhYkluZGV4IiwgInRlc3QiLCAiaXNDb250ZW50RWRpdGFibGUiLCAiaXNOYU4iLCAicGFyc2VJbnQiLCAiZ2V0QXR0cmlidXRlIiwgInNvcnRPcmRlcmVkVGFiYmFibGVzIiwgImEiLCAiYiIsICJkb2N1bWVudE9yZGVyIiwgImlzSW5wdXQiLCAiaXNIaWRkZW5JbnB1dCIsICJ0eXBlIiwgImlzRGV0YWlsc1dpdGhTdW1tYXJ5IiwgInIiLCAic29tZSIsICJjaGlsZCIsICJnZXRDaGVja2VkUmFkaW8iLCAibm9kZXMiLCAiZm9ybSIsICJpIiwgImNoZWNrZWQiLCAiaXNUYWJiYWJsZVJhZGlvIiwgIm5hbWUiLCAicmFkaW9TY29wZSIsICJxdWVyeVJhZGlvcyIsICJyYWRpb1NldCIsICJ3aW5kb3ciLCAiQ1NTIiwgImVzY2FwZSIsICJlcnIiLCAiY29uc29sZSIsICJlcnJvciIsICJtZXNzYWdlIiwgImlzUmFkaW8iLCAiaXNOb25UYWJiYWJsZVJhZGlvIiwgImlzWmVyb0FyZWEiLCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwgIndpZHRoIiwgImhlaWdodCIsICJpc0hpZGRlbiIsICJfcmVmIiwgImRpc3BsYXlDaGVjayIsICJnZXRDb21wdXRlZFN0eWxlIiwgInZpc2liaWxpdHkiLCAiaXNEaXJlY3RTdW1tYXJ5IiwgIm5vZGVVbmRlckRldGFpbHMiLCAicGFyZW50RWxlbWVudCIsICJub2RlUm9vdEhvc3QiLCAiaG9zdCIsICJub2RlSXNBdHRhY2hlZCIsICJjb250YWlucyIsICJvcmlnaW5hbE5vZGUiLCAicm9vdE5vZGUiLCAiYXNzaWduZWRTbG90IiwgImdldENsaWVudFJlY3RzIiwgImlzRGlzYWJsZWRGcm9tRmllbGRzZXQiLCAicGFyZW50Tm9kZSIsICJkaXNhYmxlZCIsICJpdGVtIiwgImlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUiLCAiaXNOb2RlTWF0Y2hpbmdTZWxlY3RvclRhYmJhYmxlIiwgImlzVmFsaWRTaGFkb3dSb290VGFiYmFibGUiLCAic2hhZG93SG9zdE5vZGUiLCAic29ydEJ5T3JkZXIiLCAicmVndWxhclRhYmJhYmxlcyIsICJvcmRlcmVkVGFiYmFibGVzIiwgImZvckVhY2giLCAiY2FuZGlkYXRlVGFiaW5kZXgiLCAic29ydCIsICJyZWR1Y2UiLCAiYWNjIiwgInNvcnRhYmxlIiwgImNvbmNhdCIsICJ0YWJiYWJsZSIsICJiaW5kIiwgImZvY3VzYWJsZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiZXVpQnV0dG9uQ29sb3IiLCAidGludE9yU2hhZGUiLCAiY29sb3IiLCAiZXVpQnV0dG9uRmlsbENvbG9yIiwgImdldEZvcmVncm91bmRDb2xvciIsICJiYWNrZ3JvdW5kIiwgImV1aUJ1dHRvbkVtcHR5Q29sb3IiLCAidXNlRXVpQnV0dG9uQ29sb3JDU1MiLCAiZXVpQnV0dG9uRGlzcGxheXNDb2xvcnMiLCAiQ09MT1JTIiwgInVzZUV1aUJ1dHRvbkZvY3VzQ1NTIiwgImV1aUJ1dHRvbkZvY3VzQ1NTIiwgIl9yZWYiLCAiZXVpQnV0dG9uU2l6ZU1hcCIsICJfcmVmMiIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiZ2V0U2hhZG93Q29sb3IiLCAiZXVpU2hhZG93WFNtYWxsIiwgIl9yZWYiLCAiX3JlZjIiLCAiZXVpU2hhZG93U21hbGwiLCAiX3JlZjMiLCAiX3JlZjQiLCAiZXVpU2hhZG93TWVkaXVtIiwgIl9yZWY1IiwgIl9yZWY2IiwgInByb3BlcnR5IiwgImV1aVNoYWRvd0xhcmdlIiwgIl9yZWY3IiwgIl9yZWY4IiwgImV1aVNoYWRvd1hMYXJnZSIsICJfcmVmOSIsICJfcmVmMTAiLCAicmV2ZXJzZSIsICJldWlTaGFkb3dGbGF0IiwgIl9yZWYxMyIsICJfcmVmMTQiLCAiZXVpU2hhZG93IiwgInNpemUiLCAiX3JlZjE1IiwgImV1aUJ1dHRvbkJhc2VDU1MiLCAiZXVpQnV0dG9uRGlzcGxheVN0eWxlcyIsICJfYnV0dG9uU2l6ZSIsICJzaXplIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BY2Nlc3NpYmlsaXR5IiwgIl9yZWYiLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BZ2dyZWdhdGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQWxlcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQW5hbHl6ZUV2ZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFuYWx5emVFdmVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Bbm5vdGF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFub21hbHlDaGFydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Bbm9tYWx5U3dpbUxhbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBtVHJhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQWRkRGF0YSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBZHZhbmNlZFNldHRpbmdzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFnZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFwbSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBcHBTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQXVkaXRiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENhbnZhcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDYXNlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDb2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENvbnNvbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRGFzaGJvYXJkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcERldnRvb2xzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcERpc2NvdmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEVtcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBGaWxlYmVhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBGbGVldCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBHaXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwR3JhcGgiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwR3JvayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBIZWFydGJlYXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEluZGV4UGF0dGVybiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBJbmRleFJvbGx1cCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBMZW5zIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcExvZ3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWFuYWdlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBNZXRyaWNiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE1ldHJpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTW9uaXRvcmluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBOb3RlYm9vayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBQYWNrZXRiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFBpcGVsaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFJlY2VudGx5Vmlld2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFJlcG9ydGluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTYXZlZE9iamVjdHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VhcmNoUHJvZmlsZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VjdXJpdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VjdXJpdHlBbmFseXRpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU3BhY2VzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNxbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBUaW1lbGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFVwdGltZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBVc2Vyc1JvbGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFZpc3VhbGl6ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBWdWxuZXJhYmlsaXR5TWFuYWdlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBXYXRjaGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93RW5kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93U3RhcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dEb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd1JpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93VXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJ0aWNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Bc3RlcmlzayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CZWFrZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmVsbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CZWxsU2xhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmV0YSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Cb2x0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJveGVzSG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Cb3hlc1ZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJyYW5jaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CcmFuY2hVc2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJyb29tIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJydXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJ1ZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CdWxsc2V5ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DYWxlbmRhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DaGFuZ2VQb2ludERldGVjdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DaGVjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DaGVja0luQ2lyY2xlRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNoZWVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsaWNrTGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbGlja1JpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb2NrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb2NrQ291bnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbG91ZERyaXp6bGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvdWRTdG9ybXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvdWRTdW5ueSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbHVzdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbXB1dGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29uc29sZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250YWluZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udGludWl0eUFib3ZlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRpbnVpdHlBYm92ZUJlbG93IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRpbnVpdHlCZWxvdyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250aW51aXR5V2l0aGluIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRyb2xzSG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250cm9sc1ZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvcHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29weUNsaXBib2FyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Dcm9zcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Dcm9zc0luQ2lyY2xlIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3Jvc3NJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Dcm9zc2hhaXJzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkN1cnJlbmN5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkN1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25EYXRhYmFzZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25EZXNrdG9wIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRpZmYiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRGlzY3VzcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudEVkaXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG9jdW1lbnRhdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG90IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvdEluQ2lyY2xlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvdWJsZUFycm93TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb3VibGVBcnJvd1JpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvd25sb2FkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25Cb3R0b20iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnblJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JBbGlnbkNlbnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JBbGlnbkxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQWxpZ25SaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JCb2xkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckNoZWNrbGlzdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JDb2RlQmxvY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQ29tbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JIZWFkaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0YWxpYyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JMaW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclJlZG8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yU3RyaWtlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclRhYmxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclVuZGVybGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JVbmRvIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclVub3JkZXJlZExpc3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRW1haWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRW5kcG9pbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVyYXNlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FcnJvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FcnJvckZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Fc3FsVmlzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4aXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXhwYW5kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4cGFuZE1pbmkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXhwb3J0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV5ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeWVDbG9zZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmFjZUhhcHB5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZhY2VOZXV0cmFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZhY2VTYWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmllbGRTdGF0aXN0aWNzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZpbHRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GaWx0ZXJFeGNsdWRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZpbHRlcklnbm9yZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GaWx0ZXJJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GaWx0ZXJJbmNsdWRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZsYWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Gb2xkZXJDaGVjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Gb2xkZXJDbG9zZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyRXhjbGFtYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyT3BlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GcmFtZU5leHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnJhbWVQcmV2aW91cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GdWxsU2NyZWVuRXhpdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GdWxsU2NyZWVuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZ1bmN0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdlYXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR2xhc3NlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HbG9iZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HcmFiIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdyYWJPbW5pZGlyZWN0aW9uYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR3JhYkhvcml6b250YWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR3JhZGllbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR3JpZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25IZWFydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25IZWF0bWFwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkhlbHAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSG9tZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW1hZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW1wb3J0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4VGVtcG9yYXJ5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4Q2xvc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhFZGl0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4Rmx1c2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhNYXBwaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4T3BlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleFJ1bnRpbWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhTZXR0aW5ncyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmZpbml0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbnB1dE91dHB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbnNwZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkludmVydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Jc3N1ZSIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktleSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LZXlib2FyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxGaWVsZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxGdW5jdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxPcGVyYW5kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbFNlbGVjdG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbFZhbHVlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkt1YmVybmV0ZXNOb2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkt1YmVybmV0ZXNQb2QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGF1bmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxheWVycyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MZXR0ZXJpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGluZURhc2hlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaW5lRG90dGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpbmVTb2xpZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpc3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGlzdEFkZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2NrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvY2tPcGVuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ1BhdHRlcm5BbmFseXNpcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dSYXRlQW5hbHlzaXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0Flcm9zcGlrZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXBhY2hlIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0FwcFNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXdzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Bd3NNb25vIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BenVyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXp1cmVNb25vIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29CZWF0cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQnVzaW5lc3NBbmFseXRpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0NlcGgiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0Nsb3VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29DbG91ZEVjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ29kZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ29kZXNhbmRib3giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0NvdWNoYmFzZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRG9ja2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Ecm9wd2l6YXJkIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0VsYXN0aWMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0VsYXN0aWNTdGFjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRW50ZXJwcmlzZVNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRXRjZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR2NwIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0djcE1vbm8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0dpdGh1YiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR21haWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0dvbGFuZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR29vZ2xlRyIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29IYXByb3h5IiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0libSIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29JYm1Nb25vIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29LYWZrYSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvS2liYW5hIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29LdWJlcm5ldGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Mb2dnaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Mb2dzdGFzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTWFwcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTWVtY2FjaGVkIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb01ldHJpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb01vbmdvZGIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb015c3FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29OZ2lueCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvT3NxdWVyeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUGhwIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1Bvc3RncmVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Qcm9tZXRoZXVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29SYWJiaXRtcSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUmVkaXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1NlY3VyaXR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29TaXRlU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Ta2V0Y2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1NsYWNrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29VcHRpbWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29XZWJob29rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29XaW5kb3dzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hGaWx0ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hJZiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dzdGFzaElucHV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoT3V0cHV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoUXVldWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFnbmV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFnbmlmeVdpdGhNaW51cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NYWduaWZ5V2l0aFBsdXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFwTWFya2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbW9yeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVEb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVMZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51VXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVyZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWluaW1pemUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWludXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWludXNJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NaW51c0luQ2lyY2xlRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbnVzSW5TcXVhcmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENyZWF0ZUFkdmFuY2VkSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ3JlYXRlTXVsdGlNZXRyaWNKb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ3JlYXRlU2luZ2xlTWV0cmljSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sRGF0YVZpc3VhbGl6ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxPdXRsaWVyRGV0ZWN0aW9uSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sUmVncmVzc2lvbkpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Nb2JpbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTW9vbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Nb3ZlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk5hbWVzcGFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25OZXN0ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTmV3Q2hhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ob2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk51bWJlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25PZmZsaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk9ubGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYWNrYWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhZ2VTZWxlY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFnZXNTZWxlY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFpbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFsZXR0ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYXBlckNsaXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFydGlhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYXVzZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYXltZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBlbmNpbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QZXJjZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBpbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QaW5GaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGlwZUJyZWFrcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QaXBlTm9CcmVha3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGl2b3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGxheSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbGF5RmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsdXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGx1c0luQ2lyY2xlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsdXNJbkNpcmNsZUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbHVzSW5TcXVhcmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUG9wb3V0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblB1c2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUXVlc3Rpb25JbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25RdW90ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25SZWZyZXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblJlcG9ydGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblJldHVybktleSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TYXZlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNjYWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWN1cml0eVNpZ25hbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWN1cml0eVNpZ25hbERldGVjdGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2Vzc2lvblZpZXdlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TaGFyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TaGFyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TaW5nbGVNZXRyaWNWaWV3ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU25vd2ZsYWtlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRBc2NlbmRpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydERlc2NlbmRpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydExlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydFJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnREb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRVcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0YWJsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TcGFjZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3BhcmtsZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhclBsdXNFbXB0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyUGx1c0ZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckVtcHR5U3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRmlsbGVkU3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3Rhck1pbnVzRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3Rhck1pbnVzRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXRzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0b3AiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcEZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdG9wU2xhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcmFnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdHJpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3VibW9kdWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN1biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Td2F0Y2hJbnB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TeW1saW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlT2ZDb250ZW50cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGVhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UZW1wZXJhdHVyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lUmVmcmVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lbGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lbGluZVdpdGhBcnJvdyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lc2xpZGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQWxpYXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Bbm5vdGF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQXJyYXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5CaW5hcnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Cb29sZWFuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQ2xhc3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQ29uc3RhbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5EYXRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRGltZW5zaW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRWxlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkVudW0iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FbnVtTWVtYmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRXZlbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FeGNlcHRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5GaWVsZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkZpbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5GbGF0dGVuZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5GdW5jdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkdlbyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkhpc3RvZ3JhbSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbklQIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuSW50ZXJmYWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuSm9pbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbktleSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbktleXdvcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5NZXRob2QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5NZXRyaWNDb3VudGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTWV0cmljR2F1Z2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Nb2R1bGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5OYW1lc3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5OZXN0ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5OdWxsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTnVtYmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuT2JqZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuT3BlcmF0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5QYWNrYWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUGFyYW1ldGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUGVyY29sYXRvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblByb3BlcnR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUmFuZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5SYW5rRmVhdHVyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblJhbmtGZWF0dXJlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblJlcG8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TZWFyY2hUeXBlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU2VtYW50aWNUZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU2hhcGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TdHJpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TdHJ1Y3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TeW1ib2wiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5UYWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5UZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVG9rZW5Db3VudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblZhcmlhYmxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVmVjdG9yRGVuc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5WZWN0b3JTcGFyc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhaW5pbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhbnNpdGlvbkxlZnRJbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UcmFuc2l0aW9uTGVmdE91dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UcmFuc2l0aW9uVG9wSW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhbnNpdGlvblRvcE91dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UcmFzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25VbmZvbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVW5saW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblVzZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVXNlckF2YXRhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Vc2VycyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WZWN0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlkZW9QbGF5ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQXJlYSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNBcmVhU3RhY2tlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0Jhckhvcml6b250YWxTdGFja2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0JhclZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0JhclZlcnRpY2FsU3RhY2tlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNHYXVnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNHb2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0xpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzTWFwQ29vcmRpbmF0ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNNYXBSZWdpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzTWV0cmljIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1BpZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUYWJsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUYWdDbG91ZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1RpbWVsaW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1ZlZ2EiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVmlzdWFsQnVpbGRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25XYXJuaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbldhcm5pbmdGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uV29yZFdyYXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uV29yZFdyYXBEaXNhYmxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25XcmVuY2giLCAiX3JlZiIsICJpY29uIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgImV1aUljb25TdHlsZXMiLCAiX3JlZjMiLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAidCIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiZ2V0SXNBcHBJY29uIiwgImljb24iLCAiRXVpSWNvbkNsYXNzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3JlZiIsICJpY29uIiwgIl9pbmhlcml0cyIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJfb2JqZWN0U3ByZWFkIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkV1aUNvbnRleHQiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAibyIsICJ2YWx1ZSIsICJpc0Jvb2xlYW4iLCAiaXNTdHJpbmciLCAiaXNOdW1iZXIiLCAiaXNVbmRlZmluZWQiLCAiY2hhciIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAidG9rZW4iLCAicmVuZGVyIiwgIkNvbXBvbmVudCIsICJSZWFjdCIsICJFdWlJMThuIiwgIl9yZWYiLCAiX3JlZjIiLCAidXNlTG9hZGluZ0FyaWFMYWJlbCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiZXVpU3Bpbm5lckJvcmRlckNvbG9yc0NTUyIsICJfcmVmIiwgImNvbG9ycyIsICJib3JkZXIiLCAiZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlMb2FkaW5nU3Bpbm5lciIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJfb2JqZWN0U3ByZWFkIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJldWlCdXR0b25EaXNwbGF5Q29udGVudFN0eWxlcyIsICJfcmVmIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQnV0dG9uRGlzcGxheUNvbnRlbnQiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJpY29uIiwgIl9leHRlbmRzIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIlVSTCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9yZWYiLCAiX3JlZjIiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0U3ByZWFkIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUJ1dHRvbiIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlCdXR0b25FbXB0eVN0eWxlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUJ1dHRvbkVtcHR5IiwgIl9yZWYiLCAic2l6ZSIsICJmbHVzaCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIl9vYmplY3RTcHJlYWQiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aUJ1dHRvbkljb25TdHlsZXMiLCAiX2VtcHR5SG92ZXJTdHlsZXMiLCAic3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQnV0dG9uSWNvbiIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJub2RlIiwgIkV1aUlubmVyVGV4dCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJldWlGb3JtTWF4V2lkdGgiLCAiX3JlZiIsICJldWlGb3JtVmFyaWFibGVzIiwgImlzQ29sb3JEYXJrIiwgImNvbG9ycyIsICJkYXJrZW4iLCAiZXVpRm9ybUNvbnRyb2xTdHlsZXMiLCAiZXVpRm9ybUNvbnRyb2xUZXh0IiwgImV1aUZvcm1Db250cm9sRGVmYXVsdFNoYWRvdyIsICJfcmVmMiIsICJib3JkZXIiLCAiZXVpRm9ybUNvbnRyb2xGb2N1c1N0eWxlcyIsICJfcmVmMyIsICJldWlGb3JtQ29udHJvbEludmFsaWRTdHlsZXMiLCAiX3JlZjQiLCAiZXVpRm9ybUNvbnRyb2xEaXNhYmxlZFN0eWxlcyIsICJldWlGb3JtQ29udHJvbFJlYWRPbmx5U3R5bGVzIiwgImV1aUZvcm1Db250cm9sQXV0b0ZpbGxTdHlsZXMiLCAiYm9yZGVyU2hhZG93IiwgImV1aVBsYWNlaG9sZGVyUGVyQnJvd3NlciIsICJldWlGb3JtQ3VzdG9tQ29udHJvbFZhcmlhYmxlcyIsICJhbmltYXRpb24iLCAiZXVpRm9ybUN1c3RvbUNvbnRyb2xTdHlsZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpT2JzZXJ2ZXIiLCAicmVuZGVyIiwgIl90eXBlb2YiLCAibyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1ByaW1pdGl2ZSIsICJFdWlSZXNpemVPYnNlcnZlciIsICJfcmVmIiwgIl9yZWYyIiwgIm1ha2VSZXNpemVPYnNlcnZlciIsICJub2RlIiwgInVzZVJlc2l6ZU9ic2VydmVyIiwgInNpemUiLCAiX3JlZjMiLCAiX3JlZjQiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdF9kb20iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aUNvbXBvbmVudERlZmF1bHRzUHJvdmlkZXIiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAidXNlQ29tcG9uZW50RGVmYXVsdHMiLCAidXNlUHJvcHNXaXRoQ29tcG9uZW50RGVmYXVsdHMiLCAiX3R5cGVvZiIsICJvIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpUG9ydGFsIiwgIlByb3BUeXBlcyIsICJFdWlQb3J0YWxDbGFzcyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfaW5oZXJpdHMiLCAiX2NyZWF0ZUNsYXNzIiwgInBvc2l0aW9uIiwgInJlbmRlciIsICJfZGVmaW5lUHJvcGVydHkiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90ZW1wbGF0ZU9iamVjdCIsICJfdGVtcGxhdGVPYmplY3QyIiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiZXVpVG9vbFRpcEJhY2tncm91bmRDb2xvciIsICJldWlUb29sVGlwQm9yZGVyQ29sb3IiLCAiZXVpVG9vbFRpcEFuaW1hdGlvblZlcnRpY2FsIiwgInNpemUiLCAiZXVpVG9vbFRpcEFuaW1hdGlvbkhvcml6b250YWwiLCAiZXVpVG9vbFRpcFN0eWxlcyIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgImV1aVRvb2xUaXBBbmNob3JTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUb29sVGlwUG9wb3ZlciIsICJfcmVmIiwgInN0eWxlcyIsICJzZXRQb3BvdmVyUmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJvbkZvY3VzIiwgIm9uQmx1ciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVG9vbFRpcEFycm93IiwgIl9yZWYiLCAicG9zaXRpb24iLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJpbWl0aXZlIiwgIlRvb2xUaXBNYW5hZ2VyIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpVG9vbFRpcCIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfZGVmaW5lUHJvcGVydHkiLCAicG9zaXRpb24iLCAiX2luaGVyaXRzIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGlwIiwgIl9yZWYiLCAic2l6ZSIsICJwb3NpdGlvbiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aVRleHRDb2xvclN0eWxlcyIsICJfcmVmMiIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJfaXNOYW1lZENvbG9yIiwgIkV1aVRleHRDb2xvciIsICJfcmVmIiwgIkNvbXBvbmVudCIsICJjbG9uZUVsZW1lbnQiLCAiaXNOYW1lZENvbG9yIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGV4dEFsaWduIiwgIl9yZWYiLCAiQ29tcG9uZW50IiwgImNsb25lRWxlbWVudCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9vYmplY3RTcHJlYWQiLCAiUHJvcFR5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgImV1aUxpbmtDU1MiLCAiX3JlZiIsICJldWlMaW5rU3R5bGVzIiwgIl9jb2xvckNTUyIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlUaXRsZSIsICJfcmVmIiwgImV1aVRpdGxlU3R5bGVzIiwgImV1aVRleHQiLCAiZXVpU2NhbGVUZXh0IiwgImV1aVRleHRTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUZXh0IiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIkNvbXBvbmVudCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImNhbmNlbEZyYW1lIiwgImFuaW1hdGlvbiIsICJjc3MiLCAiX3R5cGVvZiIsICJvIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfdG9QcmltaXRpdmUiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJFdWlBdXRvU2l6ZXIiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAibyIsICJwYXJzZUNvbG9yIiwgInJnYiIsICJjaHJvbWFWYWxpZCIsICJfdHlwZW9mIiwgIl90eXBlb2YiLCAibyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgImV1aUJhZGdlQ29sb3JzIiwgImdldEJhZGdlQ29sb3JzIiwgImdldFRleHRDb2xvciIsICJfcmVmIiwgImdldENvbG9yQ29udHJhc3QiLCAiZ2V0SXNWYWxpZENvbG9yIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpQmFkZ2VTdHlsZXMiLCAic2V0QmFkZ2VDb2xvclZhcnMiLCAiY29sb3JzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiQ09MT1JTIiwgIkV1aUJhZGdlIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJpc05hbWVkQ29sb3IiLCAiX29iamVjdFNwcmVhZCIsICJzdHlsZXMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgImNsYXNzTmFtZXMiLCAiRWxlbWVudCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiZXVpQmV0YUJhZGdlU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUJldGFCYWRnZSIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJpY29uIiwgIkVsZW1lbnQiLCAiX2V4dGVuZHMiLCAiX3R5cGVvZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImljb25TdHlsZSIsICJfcmVmIiwgIkV1aUV4dGVybmFsTGlua0ljb24iLCAiX3JlZjIiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJfb2JqZWN0U3ByZWFkIiwgImNsYXNzTmFtZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX19hc3NpZ24iLCAiZnJvbSIsICJSZWFjdCIsICJSZWFjdCIsICJSZWFjdCIsICJ2YWx1ZSIsICJpbXBvcnRfcmVhY3QiLCAidmFsdWUiLCAiUmVhY3QiLCAiX19hc3NpZ24iLCAiX19yZXN0IiwgImRlZmF1bHRzIiwgIm1pZGRsZXdhcmUiLCAiY2JzIiwgImZpbHRlciIsICJfX2Fzc2lnbiIsICJSZWFjdCIsICJfX3Jlc3QiLCAiX19hc3NpZ24iLCAiU2lkZUNhciIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkluRm9jdXNHdWFyZCIsICJfcmVmIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJfZXh0ZW5kczIiLCAiU2lkZUNhciIsICJfcmVmIiwgImNhcHR1cmVGb2N1c1Jlc3RvcmUiLCAib25Gb2N1cyIsICJvbkJsdXIiLCAiUmVhY3QiLCAiZXh0cmFjdFJlZiIsICJlZmZlY3RDYXIiLCAiU2lkZUNhciIsICJlZmZlY3RDYXIiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJ0IiwgImUiLCAiX3NldFByb3RvdHlwZU9mIiwgIl90eXBlb2YiLCAibyIsICJfdHlwZW9mIiwgIl90eXBlb2YiLCAiX2RlZmluZVByb3BlcnR5IiwgImltcG9ydF9yZWFjdCIsICJyZWR1Y2VQcm9wc1RvU3RhdGUiLCAiaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCIsICJTaWRlRWZmZWN0IiwgInBlZWsiLCAicmVuZGVyIiwgIlJlYWN0IiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJ0b0FycmF5IiwgImFzQXJyYXkiLCAibm9kZSIsICJjYWNoZSIsICJub2RlIiwgInRvQXJyYXkiLCAidG9BcnJheSIsICJub2RlIiwgInRvQXJyYXkiLCAibm9kZSIsICJjYWNoZSIsICJwb3NpdGlvbiIsICJub2RlIiwgImFzQXJyYXkiLCAidG9BcnJheSIsICJ0b0FycmF5IiwgIm5vZGUiLCAidG9BcnJheSIsICJub2RlIiwgIm5vZGUiLCAibm9kZSIsICJub2RlIiwgIm5vZGUiLCAibm9kZSIsICJhc0FycmF5IiwgIm5vZGUiLCAiYXNBcnJheSIsICJub2RlIiwgImZvY3VzYWJsZSIsICJ2YWx1ZSIsICJsaW5lIiwgImZvY3VzYWJsZSIsICJhc0FycmF5IiwgIm5vZGUiLCAibmV4dCIsICJwcmV2IiwgImZvY3VzT25Cb2R5IiwgImlzRnJlZUZvY3VzIiwgInRyeVJlc3RvcmVGb2N1cyIsICJkZWZhdWx0V2hpdGVsaXN0IiwgImZvY3VzV2hpdGVsaXN0ZWQiLCAicmVjb3JkUG9ydGFsIiwgImZvY3VzSXNQb3J0YWxlZFBhaXIiLCAiZm9jdXNXYXNPdXRzaWRlIiwgImNoZWNrSW5Ib3N0IiwgIndpdGhpbkhvc3QiLCAiZ2V0Tm9kZUZvY3VzYWJsZXMiLCAiaXNOb3RGb2N1c2FibGUiLCAibm9kZSIsICJhY3RpdmF0ZVRyYXAiLCAic2hvdWxkRm9yY2VSZXN0b3JlRm9jdXMiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJvblRyYXAiLCAib25CbHVyIiwgIm9uRm9jdXMiLCAiRm9jdXNXYXRjaGVyIiwgIkZvY3VzVHJhcCIsICJfcmVmNSIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAib25XaW5kb3dGb2N1cyIsICJvbldpbmRvd0JsdXIiLCAiYXR0YWNoSGFuZGxlciIsICJkZXRhY2hIYW5kbGVyIiwgIl9yZWY2IiwgIl9yZWY3IiwgIlJlYWN0IiwgIlJlYWN0IiwgIlJlYWN0IiwgImNzcyIsICJzaGVldCIsICJzdHlsZXMiLCAic3R5bGVzIiwgInBhcnNlIiwgIm5vZGUiLCAic3R5bGVzIiwgInBvc2l0aW9uIiwgImV4dHJhY3RSZWYiLCAiU3R5bGUiLCAibm9kZSIsICJzaWRlY2FyX2RlZmF1bHQiLCAiUmVhY3QiLCAibm9kZSIsICJSZWFjdCIsICJTdHlsZSIsICJpbXBvcnRfcmVhY3QiLCAiZXh0cmFjdFJlZiIsICJub2RlIiwgInNpZGVjYXJfZGVmYXVsdCIsICJlZmZlY3RDYXIiLCAic2lkZWNhcl9kZWZhdWx0IiwgIkZvY3VzT24iLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl90b1ByaW1pdGl2ZSIsICJFdWlGb2N1c1RyYXAiLCAiUHJvcFR5cGVzIiwgIkV1aUZvY3VzVHJhcENsYXNzIiwgIm5vZGUiLCAicmVuZGVyIiwgIkZvY3VzT24iLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl90b1ByaW1pdGl2ZSIsICJFdWlNdXRhdGlvbk9ic2VydmVyIiwgIm1ha2VNdXRhdGlvbk9ic2VydmVyIiwgIm5vZGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aU91dHNpZGVDbGlja0RldGVjdG9yIiwgInJlbmRlciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImV1aVBvcG92ZXJBcnJvd1N0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVBvcG92ZXJBcnJvdyIsICJfcmVmIiwgInBvc2l0aW9uIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJldWlQb3BvdmVyU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJldWlQYW5lbFN0eWxlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVBhbmVsIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpUG9wb3ZlclBhbmVsU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpUG9wb3ZlclBhbmVsIiwgIl9yZWYiLCAicG9zaXRpb24iLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9yZWYiLCAiX3JlZjIiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX3JlZjMiLCAiX3JlZjQiLCAiRXVpUG9wb3ZlciIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9yZWY1IiwgImR1cmF0aW9uTWF0Y2giLCAiZGVsYXlNYXRjaCIsICJfcmVmNiIsICJwb3NpdGlvbiIsICJfb2JqZWN0U3ByZWFkIiwgIm5vZGUiLCAiX2luaGVyaXRzIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJpbml0aWFsRm9jdXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJbnB1dFBvcG92ZXIiLCAiX3JlZiIsICJjbGFzc25hbWVzIiwgImNsb3NlUG9wb3Zlck9uU2Nyb2xsIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpU3BhY2VyU3R5bGVzIiwgIl9yZWYyIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU3BhY2VyIiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUaXRsZSIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfb2JqZWN0U3ByZWFkIiwgIlByb3BUeXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgImV1aUNhbGxPdXRTdHlsZXMiLCAiX3JlZjMiLCAiZXVpQ2FsbE91dEhlYWRlclN0eWxlcyIsICJfcmVmNCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJjc3NTdHlsZXMiLCAiX2V4dGVuZHMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlDYXJkU2VsZWN0U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQ2FyZFNlbGVjdCIsICJfcmVmIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiX3JlZjYiLCAiZXVpQ2FyZFN0eWxlcyIsICJfcmVmIiwgImV1aUNhcmRUZXh0U3R5bGVzIiwgImV1aUNhcmRCZXRhQmFkZ2VTdHlsZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUNhcmQiLCAiX3JlZiIsICJpY29uIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgIm91dGVyT25DbGljayIsICJjbGFzc05hbWVzIiwgImljb25TdHlsZXMiLCAiX2V4Y2x1ZGVkMiIsICJfZXh0ZW5kcyIsICJfb2JqZWN0U3ByZWFkIiwgIlJlYWN0IiwgIm5vZGUiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgImV1aUNoZWNrYm94U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQ2hlY2tib3giLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJsYWJlbFN0eWxlcyIsICJpY29uU3R5bGVzIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImV1aUZvcm1MYWJlbCIsICJldWlGb3JtTGFiZWxTdHlsZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiX3JlZjYiLCAiX3JlZjciLCAiX3JlZjgiLCAiX3JlZjkiLCAiX3JlZjEwIiwgIl9yZWYxMSIsICJfcmVmMTIiLCAiX3JlZjEzIiwgIl9yZWYxNCIsICJfcmVmMTUiLCAiX3JlZjE2IiwgIl9yZWYxNyIsICJldWlGbGV4R3JvdXBTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGbGV4R3JvdXBJbnRlcm5hbCIsICJfcmVmIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiQ29tcG9uZW50IiwgIl9leHRlbmRzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZsZXhJdGVtSW50ZXJuYWwiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIkNvbXBvbmVudCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJFdWlWYWxpZGF0YWJsZUNvbnRyb2wiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAidXNlU2V0Q29udHJvbFZhbGlkaXR5IiwgIl9yZWYzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtTGFiZWwiLCAiX3JlZiIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uU3R5bGVzIiwgIl9yZWYiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uIiwgIl9yZWYiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJpY29uU3R5bGVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24iLCAiX3JlZiIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnNTdHlsZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfdG9QcmltaXRpdmUiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgImlzSWNvblNoYXBlIiwgImljb24iLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfaW5oZXJpdHMiLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJzdHlsZXMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJpc1JpZ2h0U2lkZUljb24iLCAiaWNvbiIsICJnZXRJY29uQWZmb3JkYW5jZVN0eWxlcyIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiZXVpRm9ybUNvbnRyb2xMYXlvdXRTdHlsZXMiLCAiZXVpRm9ybUNvbnRyb2xMYXlvdXRTaWRlTm9kZVN0eWxlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZvcm1Db250cm9sTGF5b3V0IiwgImljb24iLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJFdWlGb3JtQ29udHJvbExheW91dFNpZGVOb2RlcyIsICJfcmVmIiwgIlJlYWN0IiwgIm5vZGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aUZpZWxkU2VhcmNoU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpRmllbGRTZWFyY2hDbGFzcyIsICJvblNlYXJjaCIsICJvbkNoYW5nZSIsICJyZW5kZXIiLCAiX3JlZiIsICJhcHBlbmQiLCAidmFsdWUiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlGb3JtRXJyb3JUZXh0U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybUVycm9yVGV4dCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpRm9ybUhlbHBUZXh0U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybUhlbHBUZXh0IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlGb3JtUm93U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiciIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybVJvdyIsICJfcmVmIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiX3NsaWNlZFRvQXJyYXkiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiaGVscFRleHQiLCAiZXJyb3IiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9yZWYyIiwgIkVsZW1lbnQiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlIb3Jpem9udGFsUnVsZVN0eWxlcyIsICJfcmVmIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSG9yaXpvbnRhbFJ1bGUiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJfcmVmNSIsICJfcmVmNiIsICJldWlDb250ZXh0TWVudUl0ZW1TdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlDb250ZXh0TWVudUl0ZW0iLCAiX3JlZiIsICJpY29uIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJSZWFjdCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiZXVpQ29udGV4dE1lbnVWYXJpYWJsZXMiLCAiX3JlZiIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RlbXBsYXRlT2JqZWN0MiIsICJfdGVtcGxhdGVPYmplY3QzIiwgIl90ZW1wbGF0ZU9iamVjdDQiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJldWlDb250ZXh0TWVudVBhbmVsU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpQ29udGV4dE1lbnVQYW5lbENsYXNzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfY2FsbFN1cGVyIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJub2RlIiwgIl9pbmhlcml0cyIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgImV1aVN3aXRjaFZhcnMiLCAiY29sb3JzIiwgImFuaW1hdGlvbiIsICJfcmVmMiIsICJfcmVmMyIsICJldWlTd2l0Y2hTdHlsZXMiLCAiYnV0dG9uU3R5bGVzIiwgIl9yZWYiLCAiYm9keVN0eWxlcyIsICJfcmVmNCIsICJfcmVmNSIsICJfY2FsY3VsYXRlRGlzYWJsZWRDb2xvciIsICJpY29uU3R5bGVzIiwgIl9yZWY2IiwgIl9yZWY3IiwgInRodW1iU3R5bGVzIiwgIl9yZWY4IiwgIl9jYWxjdWxhdGVTY2FsZSIsICJzaXplIiwgIl9jYWxjdWxhdGVMZWZ0IiwgImxhYmVsU3R5bGVzIiwgIl9yZWY5IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU3dpdGNoIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJzaXplIiwgInN0eWxlcyIsICJidXR0b25TdHlsZXMiLCAiYm9keVN0eWxlcyIsICJ0aHVtYlN0eWxlcyIsICJsYWJlbFN0eWxlcyIsICJQcm9wVHlwZXMiLCAiX2NyZWF0ZUVtb3Rpb24iLCAiY3giLCAibWVyZ2UiLCAiZ2V0UmVnaXN0ZXJlZFN0eWxlcyIsICJrZXlmcmFtZXMiLCAiY3NzIiwgImNhY2hlIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJldWlPdmVybGF5TWFza1N0eWxlcyIsICJfcmVmIiwgImNzcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfZXhjbHVkZWQiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfbm9uSXRlcmFibGVSZXN0IiwgInIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aU92ZXJsYXlNYXNrIiwgIl9yZWYiLCAic3R5bGVzIiwgImN4IiwgIlByb3BUeXBlcyIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInZhbHVlIiwgImlzRXF1YWwiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3ciLCAicGVyZm9ybWFuY2UiLCAibm93IiwgIkRhdGUiLCAiY2FuY2VsVGltZW91dCIsICJ0aW1lb3V0SUQiLCAiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCAiaWQiLCAicmVxdWVzdFRpbWVvdXQiLCAiY2FsbGJhY2siLCAiZGVsYXkiLCAic3RhcnQiLCAidGljayIsICJjYWxsIiwgInJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJzaXplIiwgImdldFNjcm9sbGJhclNpemUiLCAicmVjYWxjdWxhdGUiLCAiZGl2IiwgImRvY3VtZW50IiwgImNyZWF0ZUVsZW1lbnQiLCAic3R5bGUiLCAid2lkdGgiLCAiaGVpZ2h0IiwgIm92ZXJmbG93IiwgImJvZHkiLCAiYXBwZW5kQ2hpbGQiLCAib2Zmc2V0V2lkdGgiLCAiY2xpZW50V2lkdGgiLCAicmVtb3ZlQ2hpbGQiLCAiY2FjaGVkUlRMUmVzdWx0IiwgImdldFJUTE9mZnNldFR5cGUiLCAib3V0ZXJEaXYiLCAib3V0ZXJTdHlsZSIsICJkaXJlY3Rpb24iLCAiaW5uZXJEaXYiLCAiaW5uZXJTdHlsZSIsICJzY3JvbGxMZWZ0IiwgImRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCIsICJkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCIsICJkZXZXYXJuaW5nc1RhZ05hbWUiLCAicHJvY2VzcyIsICJ3aW5kb3ciLCAiV2Vha1NldCIsICJJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwiLCAiZGVmYXVsdEl0ZW1LZXkiLCAiaW5kZXgiLCAiZGF0YSIsICJkZXZXYXJuaW5nc0RpcmVjdGlvbiIsICJkZXZXYXJuaW5nc1RhZ05hbWUiLCAicHJvY2VzcyIsICJ3aW5kb3ciLCAiV2Vha1NldCIsICJjcmVhdGVMaXN0Q29tcG9uZW50IiwgIl9yZWYiLCAiZ2V0SXRlbU9mZnNldCIsICJnZXRFc3RpbWF0ZWRUb3RhbFNpemUiLCAiZ2V0SXRlbVNpemUiLCAiZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQiLCAiZ2V0U3RhcnRJbmRleEZvck9mZnNldCIsICJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwgImluaXRJbnN0YW5jZVByb3BzIiwgInNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UiLCAidmFsaWRhdGVQcm9wcyIsICJwcm9wcyIsICJfaW5zdGFuY2VQcm9wcyIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9vdXRlclJlZiIsICJfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCIsICJzdGF0ZSIsICJpbnN0YW5jZSIsICJpc1Njcm9sbGluZyIsICJzY3JvbGxEaXJlY3Rpb24iLCAic2Nyb2xsT2Zmc2V0IiwgImluaXRpYWxTY3JvbGxPZmZzZXQiLCAic2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwgIl9jYWxsT25JdGVtc1JlbmRlcmVkIiwgIm1lbW9pemVPbmUiLCAib3ZlcnNjYW5TdGFydEluZGV4IiwgIm92ZXJzY2FuU3RvcEluZGV4IiwgInZpc2libGVTdGFydEluZGV4IiwgInZpc2libGVTdG9wSW5kZXgiLCAib25JdGVtc1JlbmRlcmVkIiwgIl9jYWxsT25TY3JvbGwiLCAib25TY3JvbGwiLCAiX2dldEl0ZW1TdHlsZSIsICJkaXJlY3Rpb24iLCAiaXRlbVNpemUiLCAibGF5b3V0IiwgIml0ZW1TdHlsZUNhY2hlIiwgIl9nZXRJdGVtU3R5bGVDYWNoZSIsICJzdHlsZSIsICJoYXNPd25Qcm9wZXJ0eSIsICJvZmZzZXQiLCAic2l6ZSIsICJpc0hvcml6b250YWwiLCAiaXNSdGwiLCAib2Zmc2V0SG9yaXpvbnRhbCIsICJwb3NpdGlvbiIsICJsZWZ0IiwgInVuZGVmaW5lZCIsICJyaWdodCIsICJ0b3AiLCAiaGVpZ2h0IiwgIndpZHRoIiwgIl8iLCAiX18iLCAiX19fIiwgIl9vblNjcm9sbEhvcml6b250YWwiLCAiZXZlbnQiLCAiY3VycmVudFRhcmdldCIsICJjbGllbnRXaWR0aCIsICJzY3JvbGxMZWZ0IiwgInNjcm9sbFdpZHRoIiwgInNldFN0YXRlIiwgInByZXZTdGF0ZSIsICJnZXRSVExPZmZzZXRUeXBlIiwgIk1hdGgiLCAibWF4IiwgIm1pbiIsICJfcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCIsICJfb25TY3JvbGxWZXJ0aWNhbCIsICJjbGllbnRIZWlnaHQiLCAic2Nyb2xsSGVpZ2h0IiwgInNjcm9sbFRvcCIsICJfb3V0ZXJSZWZTZXR0ZXIiLCAicmVmIiwgIm91dGVyUmVmIiwgImN1cnJlbnQiLCAiY2FuY2VsVGltZW91dCIsICJyZXF1ZXN0VGltZW91dCIsICJfcmVzZXRJc1Njcm9sbGluZyIsICJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCAibmV4dFByb3BzIiwgInZhbGlkYXRlU2hhcmVkUHJvcHMiLCAic2Nyb2xsVG8iLCAic2Nyb2xsVG9JdGVtIiwgImFsaWduIiwgIml0ZW1Db3VudCIsICJzY3JvbGxiYXJTaXplIiwgImdldFNjcm9sbGJhclNpemUiLCAiY29tcG9uZW50RGlkTW91bnQiLCAiX2NhbGxQcm9wc0NhbGxiYWNrcyIsICJjb21wb25lbnREaWRVcGRhdGUiLCAiY29tcG9uZW50V2lsbFVubW91bnQiLCAicmVuZGVyIiwgImNoaWxkcmVuIiwgImNsYXNzTmFtZSIsICJpbm5lclJlZiIsICJpbm5lckVsZW1lbnRUeXBlIiwgImlubmVyVGFnTmFtZSIsICJpdGVtRGF0YSIsICJpdGVtS2V5IiwgIm91dGVyRWxlbWVudFR5cGUiLCAib3V0ZXJUYWdOYW1lIiwgInVzZUlzU2Nyb2xsaW5nIiwgIl9nZXRSYW5nZVRvUmVuZGVyIiwgInN0YXJ0SW5kZXgiLCAic3RvcEluZGV4IiwgIml0ZW1zIiwgInB1c2giLCAiY3JlYXRlRWxlbWVudCIsICJrZXkiLCAiZXN0aW1hdGVkVG90YWxTaXplIiwgIm92ZXJmbG93IiwgIldlYmtpdE92ZXJmbG93U2Nyb2xsaW5nIiwgIndpbGxDaGFuZ2UiLCAicG9pbnRlckV2ZW50cyIsICJvdmVyc2NhbkNvdW50IiwgIm92ZXJzY2FuQmFja3dhcmQiLCAib3ZlcnNjYW5Gb3J3YXJkIiwgIlB1cmVDb21wb25lbnQiLCAiZGVmYXVsdFByb3BzIiwgIl9yZWYyIiwgIl9yZWYzIiwgImhhcyIsICJhZGQiLCAiY29uc29sZSIsICJ3YXJuIiwgIkVycm9yIiwgIkZpeGVkU2l6ZUxpc3QiLCAiY3JlYXRlTGlzdENvbXBvbmVudCIsICJnZXRJdGVtT2Zmc2V0IiwgIl9yZWYiLCAiaW5kZXgiLCAiaXRlbVNpemUiLCAiZ2V0SXRlbVNpemUiLCAiX3JlZjIiLCAiZ2V0RXN0aW1hdGVkVG90YWxTaXplIiwgIl9yZWYzIiwgIml0ZW1Db3VudCIsICJnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCIsICJfcmVmNCIsICJhbGlnbiIsICJzY3JvbGxPZmZzZXQiLCAiaW5zdGFuY2VQcm9wcyIsICJzY3JvbGxiYXJTaXplIiwgImRpcmVjdGlvbiIsICJoZWlnaHQiLCAibGF5b3V0IiwgIndpZHRoIiwgImlzSG9yaXpvbnRhbCIsICJzaXplIiwgImxhc3RJdGVtT2Zmc2V0IiwgIk1hdGgiLCAibWF4IiwgIm1heE9mZnNldCIsICJtaW4iLCAibWluT2Zmc2V0IiwgIm1pZGRsZU9mZnNldCIsICJyb3VuZCIsICJjZWlsIiwgImZsb29yIiwgImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCAiX3JlZjUiLCAib2Zmc2V0IiwgImdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCAiX3JlZjYiLCAic3RhcnRJbmRleCIsICJudW1WaXNpYmxlSXRlbXMiLCAiaW5pdEluc3RhbmNlUHJvcHMiLCAicHJvcHMiLCAic2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSIsICJ2YWxpZGF0ZVByb3BzIiwgIl9yZWY3IiwgInByb2Nlc3MiLCAiRXJyb3IiLCAic2hhbGxvd0RpZmZlcnMiLCAicHJldiIsICJuZXh0IiwgImF0dHJpYnV0ZSIsICJhcmVFcXVhbCIsICJwcmV2UHJvcHMiLCAibmV4dFByb3BzIiwgInByZXZTdHlsZSIsICJzdHlsZSIsICJwcmV2UmVzdCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfZXhjbHVkZWQiLCAibmV4dFN0eWxlIiwgIm5leHRSZXN0IiwgIl9leGNsdWRlZDIiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eSIsICJzdHJpbmciLCAiZmxhdHRlbk9wdGlvbkdyb3VwcyIsICJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlIiwgIl9yZWYiLCAiY29sbGVjdE1hdGNoaW5nT3B0aW9uIiwgIl9yZWYyIiwgImdldE1hdGNoaW5nT3B0aW9ucyIsICJfcmVmMyIsICJvYmplY3QiLCAiY3JlYXRlUGFydGlhbFN0cmluZ0VxdWFsaXR5T3B0aW9uTWF0Y2hlciIsICJfcmVmNCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZCIsICJfcmVmIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlDb21ib0JveFBpbGxTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlDb21ib0JveFBpbGwiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgImV1aUNvbWJvQm94SW5wdXRTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1ByaW1pdGl2ZSIsICJFdWlDb21ib0JveElucHV0IiwgImFwcGVuZCIsICJnZXQiLCAicmVuZGVyIiwgIm9uRm9jdXMiLCAidmFsdWUiLCAiaWNvbiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpTWFya1N0eWxlcyIsICJfcmVmIiwgImV1aU1hcmtTY3JlZW5SZWFkZXJTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlNYXJrIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJIaWdobGlnaHRBbGwiLCAiX3JlZiIsICJlc2NhcGVSZWdFeHAiLCAibWF0Y2hlcyIsICJtYXRjaCIsICJSZWFjdCIsICJ2YWx1ZSIsICJQcm9wVHlwZXMiLCAiZmlsbEluQ2h1bmtzIiwgImFwcGVuZCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiSGlnaGxpZ2h0Rmlyc3QiLCAiX3JlZiIsICJSZWFjdCIsICJtYXRjaCIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlIaWdobGlnaHQiLCAiX3JlZiIsICJDb21wb25lbnQiLCAiX3JlZjIiLCAiY2hpbGRyZW4iLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlGaWx0ZXJTZWxlY3RJdGVtU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAicmVzb2x2ZUljb25BbmRDb2xvciIsICJFdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MiLCAicmVuZGVyIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgImljb24iLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9nZXQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiVHJ1bmNhdGlvblV0aWxzIiwgIl9yZWYiLCAiY29tYmluZWRUZXh0IiwgImdldCIsICJyZW1vdmVMYXN0Q2hhcmFjdGVyIiwgInJlbW92ZUZpcnN0Q2hhcmFjdGVyIiwgInNwbGl0VGV4dCIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfZXhjbHVkZWQzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGV4dFRydW5jYXRlIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiRXVpVGV4dFRydW5jYXRlV2l0aFdpZHRoIiwgIl9yZWYyIiwgIl9leGNsdWRlZDIiLCAiX3NsaWNlZFRvQXJyYXkiLCAidHJ1bmNhdGlvbiIsICJ0cnVuY2F0aW9uT2Zmc2V0IiwgInRydW5jYXRlZFRleHQiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJFdWlUZXh0VHJ1bmNhdGVXaXRoUmVzaXplT2JzZXJ2ZXIiLCAiX3JlZjMiLCAiX2V4Y2x1ZGVkMyIsICJfcmVmNCIsICJ3aWR0aCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJzdHlsZXMiLCAiRXVpVGV4dEJsb2NrVHJ1bmNhdGUiLCAiX3JlZiIsICJjbG9uZUVsZW1lbnQiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIkV1aUNvbWJvQm94VGl0bGUiLCAiX3JlZiIsICJldWlDb21ib0JveE9wdGlvbkxpc3RTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4Y2x1ZGVkMyIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCIsICJfcmVmIiwgIl9yZWYyIiwgInZhbHVlIiwgImFwcGVuZCIsICJ0ZXh0IiwgIlJlYWN0IiwgInJlbmRlciIsICJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlIiwgImRlbGltaXRlciIsICJoaWdobGlnaHRTZWFyY2hWYWx1ZSIsICJzZWFyY2hWYWx1ZSIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl90b1ByaW1pdGl2ZSIsICJFdWlDb21ib0JveCIsICJfcmVmIiwgIl9yZWYyIiwgImRlbGltaXRlciIsICJyZW5kZXIiLCAib25CbHVyIiwgImFwcGVuZCIsICJjbGFzc05hbWVzIiwgInZhbHVlIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlQYWdpbmF0aW9uQnV0dG9uU3R5bGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpUGFnaW5hdGlvbkJ1dHRvbiIsICJfcmVmIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4dGVuZHMiLCAiVFlQRVMiLCAiRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93IiwgIl9yZWYiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpUGFnaW5hdGlvblN0eWxlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVBhZ2luYXRpb24iLCAiX3JlZiIsICJzdHlsZXMiLCAic2FmZUNsaWNrIiwgImNsYXNzTmFtZXMiLCAiYWNjZXNzaWJsZVBhZ2VTdHJpbmciLCAiUHJvcFR5cGVzIiwgIlBhZ2luYXRpb25CdXR0b25XcmFwcGVyIiwgIl9yZWYyIiwgImltcG9ydF9yZWFjdCIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJ1c2VFdWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVBhZ2luYXRpb24iLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aURlc2NyaXB0aW9uTGlzdFRpdGxlU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRGVzY3JpcHRpb25MaXN0VGl0bGUiLCAiX3JlZiIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpRGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb25TdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlEZXNjcmlwdGlvbkxpc3REZXNjcmlwdGlvbiIsICJfcmVmIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aURlc2NyaXB0aW9uTGlzdFN0eWxlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aURlc2NyaXB0aW9uTGlzdCIsICJfcmVmIiwgInN0eWxlcyIsICJjb252ZXJ0TnVtYmVyc1RvRnIiLCAidmFsdWUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpVGFiU3R5bGVzIiwgIl9yZWYyIiwgImV1aVRhYkNvbnRlbnRTdHlsZXMiLCAiaW1wb3J0X3JlYWN0IiwgImNvbnRleHREZWZhdWx0cyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYiIsICJfcmVmIiwgImFwcGVuZCIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlUYWJzU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiRXVpVGFiYmVkQ29udGVudCIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2luaGVyaXRzIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9leGNsdWRlZDIiLCAiX29iamVjdFNwcmVhZCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAibyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aURlbGF5UmVuZGVyIiwgIl9yZWYiLCAicmVuZGVyIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJldWlIZWFsdGhTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlIZWFsdGgiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpSW1hZ2VXcmFwcGVyU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlJbWFnZUJ1dHRvblN0eWxlcyIsICJfcmVmIiwgImV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyIsICJfcmVmMiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUltYWdlQnV0dG9uIiwgIl9yZWYiLCAiYnV0dG9uU3R5bGVzIiwgImljb25TdHlsZXMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJldWlJbWFnZUNhcHRpb25TdHlsZXMiLCAiX3JlZiIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgIl9leHRlbmRzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJFdWlJbWFnZVdyYXBwZXIiLCAiX3JlZiIsICJvcGVuRnVsbFNjcmVlbiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiZXVpSW1hZ2VTdHlsZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXJTdHlsZXMiLCAiX2V4dGVuZHMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIkV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIiLCAiX3JlZiIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJvbktleURvd24iLCAiY2xvc2VGdWxsU2NyZWVuIiwgImljb25TdHlsZXMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgIlNJWkVTIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJbWFnZSIsICJfcmVmIiwgInNpemUiLCAiU0laRVMiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiZ2xvYmFsU3R5bGVzIiwgInNpemUiLCAiRXVpVXRpbGl0eUNsYXNzZXMiLCAiaW1wb3J0X3JlYWN0IiwgIkV1aUNhY2hlUHJvdmlkZXIiLCAiX3JlZiIsICJjYWNoZSIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIkV1aVN5c3RlbUNvbG9yTW9kZVByb3ZpZGVyIiwgIl9yZWYiLCAiZXZlbnRMaXN0ZW5lciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIkV1aVByb3ZpZGVyTmVzdGVkQ2hlY2siLCAiX3JlZiIsICJ1c2VJc05lc3RlZEV1aVByb3ZpZGVyIiwgImlzRW1vdGlvbkNhY2hlT2JqZWN0IiwgIkV1aVByb3ZpZGVyIiwgIl9yZWYiLCAiY2FjaGUiLCAicHJvdmlkZXJNZXNzYWdlIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZ2V0U2VhcmNoYWJsZUxhYmVsIiwgImdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUiLCAiY29sbGVjdE1hdGNoaW5nT3B0aW9uIiwgIl9yZWYiLCAiZ2V0TWF0Y2hpbmdPcHRpb25zIiwgIl9yZWYyIiwgImNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIiLCAiX3JlZjMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlTZWxlY3RhYmxlU2VhcmNoIiwgIl9yZWYiLCAidmFsdWUiLCAiZ2V0TWF0Y2hpbmdPcHRpb25zIiwgImNsYXNzTmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aVNlbGVjdGFibGVNZXNzYWdlU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU2VsZWN0YWJsZU1lc3NhZ2UiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlTZWxlY3RhYmxlTGlzdEl0ZW1WYXJpYWJsZXMiLCAiX3JlZjIiLCAiX3JlZiIsICJldWlTZWxlY3RhYmxlTGlzdEl0ZW1TdHlsZXMiLCAiYm9yZGVyIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAicmVzb2x2ZUljb25BbmRDb2xvciIsICJFdWlTZWxlY3RhYmxlTGlzdEl0ZW0iLCAiX3JlZiIsICJhcHBlbmQiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJyZXNvbHZlSWNvbkFuZENvbG9yIiwgImljb24iLCAiX2V4dGVuZHMiLCAiX2V4Y2x1ZGVkMiIsICJSZWFjdCIsICJfc2xpY2VkVG9BcnJheSIsICJQcm9wVHlwZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlTZWxlY3RhYmxlTGlzdFN0eWxlcyIsICJjc3MiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4Y2x1ZGVkMyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3R5cGVvZiIsICJvIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiRXVpU2VsZWN0YWJsZUxpc3QiLCAiX3JlZiIsICJhcHBlbmQiLCAic3R5bGVzIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgInRleHQiLCAiUmVhY3QiLCAiX3JlZjUiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leGNsdWRlZDMiLCAiX3R5cGVvZiIsICJvIiwgIl9leHRlbmRzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJvd25LZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiRXVpU2VsZWN0YWJsZSIsICJfcmVmIiwgImdldE1hdGNoaW5nT3B0aW9ucyIsICJpbml0aWFsU2VhcmNoVmFsdWUiLCAicmVuZGVyIiwgIl9yZWYyIiwgIl9yZWYzIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAiZ2V0QWNjZXNzaWJsZU5hbWUiLCAiX3JlZjQiLCAiX3JlZjUiLCAiaW5wdXRSZWYiLCAibm9kZSIsICJfZGVmYXVsdCIsICJfcmVmNiIsICJyZXN1bHRzTGVuZ3RoIiwgImNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAidXNlSXNFdWlUYWJsZVJlc3BvbnNpdmUiLCAiX3JlZiIsICJicmVha3BvaW50IiwgImlzQm9vbGVhbiIsICJ1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlUYWJsZVZhcmlhYmxlcyIsICJfcmVmNCIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgImV1aVRhYmxlU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGUiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVCb2R5IiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlRm9vdGVyIiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgInJlc29sdmVXaWR0aEFzU3R5bGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiZXVpVGFibGVDZWxsQ29udGVudFN0eWxlcyIsICJfcmVmNSIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlQ2VsbENvbnRlbnQiLCAiX3JlZiIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJpc09iamVjdCIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiZXVpVGFibGVIZWFkZXJGb290ZXJDZWxsU3R5bGVzIiwgImV1aVRhYmxlQ2VsbENoZWNrYm94U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVGb290ZXJDZWxsIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlSGVhZGVyIiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNlbGxDb250ZW50cyIsICJfcmVmIiwgIkV1aVRhYmxlSGVhZGVyQ2VsbCIsICJfcmVmMiIsICJhcHBlbmQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94IiwgIl9yZWYiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpVGFibGVIZWFkZXJNb2JpbGVTdHlsZXMiLCAiX3JlZiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlSGVhZGVyTW9iaWxlIiwgIl9yZWYiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVNvcnRNb2JpbGVJdGVtIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1ByaW1pdGl2ZSIsICJFdWlUYWJsZVNvcnRNb2JpbGUiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJldWlUYWJsZVJvd1N0eWxlcyIsICJfZXhwYW5kZWRSb3dBbmltYXRpb24iLCAiX3JlZiIsICJfcm93Q29sb3JWYXJpYWJsZXMiLCAiX3JlZjIiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVJvdyIsICJfcmVmIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIm9uS2V5RG93biIsICJvbktleVVwIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJldWlUYWJsZVJvd0NlbGxTdHlsZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVJvd0NlbGwiLCAiX3JlZiIsICJhcHBlbmQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiRWxlbWVudCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVSb3dDZWxsQ2hlY2tib3giLCAiX3JlZiIsICJhcHBlbmQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaXNDdXN0b21JdGVtQWN0aW9uIiwgImNhbGxXaXRoSXRlbUlmRnVuY3Rpb24iLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIkNvbGxhcHNlZEl0ZW1BY3Rpb25zIiwgIl9yZWYiLCAiY29udHJvbHMiLCAiaWNvbiIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgIkRlZmF1bHRJdGVtQWN0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiQ3VzdG9tSXRlbUFjdGlvbiIsICJfcmVmIiwgIkV4cGFuZGVkSXRlbUFjdGlvbnMiLCAiX3JlZiIsICJSZWFjdCIsICJjbGFzc05hbWVzIiwgImltcG9ydF9yZWFjdCIsICJQYWdpbmF0aW9uQmFyIiwgIl9yZWYiLCAiZGVmYXVsdHMiLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiZXVpQmFzaWNUYWJsZUJvZHlMb2FkaW5nIiwgIl9yZWYiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX3R5cGVvZiIsICJvIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl90b1ByaW1pdGl2ZSIsICJ2YWx1ZSIsICJyZW5kZXIiLCAiaXNGdW5jdGlvbiIsICJjb2x1bW4iLCAiX3JlZiIsICJfcmVmMiIsICJFdWlCYXNpY1RhYmxlIiwgIm9uQ2hhbmdlIiwgIl9yZWYzIiwgIl9yZWY0IiwgIl9yZWY1IiwgIl9yZWY2IiwgImdldCIsICJfcmVmNyIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAiX3JlZjgiLCAiX3JlZjkiLCAiX3JlZjEwIiwgIm51bSIsICJzZWxlY3Rpb24iLCAiaXRlbSIsICJfcmVmMTEiLCAiUHJvcFR5cGVzIiwgIlN1YnNjcmliYWJsZSIsICJub29wIiwgInZhbHVlIiwgImFzQXJyYXkiLCAidmFsdWUiLCAiaXNQbGFpbk9iamVjdCIsICJjb3B5IiwgIkZvY3VzTWFuYWdlciIsICJvbkZvY3VzIiwgImxpc3RlbmVyIiwgIk9ubGluZU1hbmFnZXIiLCAibGlzdGVuZXIiLCAidmFsdWUiLCAiQ2FuY2VsbGVkRXJyb3IiLCAiUmV0cnllciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJwYXVzZSIsICJydW4iLCAiY2FuY2VsRm4iLCAiTm90aWZ5TWFuYWdlciIsICJmbHVzaCIsICJRdWVyeSIsICJub29wIiwgImlzU3RhbGUiLCAib25Gb2N1cyIsICJmZXRjaCIsICJnZXQiLCAiZmV0Y2hGbiIsICJnZXREZWZhdWx0U3RhdGUiLCAicmVkdWNlciIsICJRdWVyeUNhY2hlIiwgImdldCIsICJvbkZvY3VzIiwgIk11dGF0aW9uIiwgIm5vb3AiLCAiTXV0YXRpb25DYWNoZSIsICJvbkZvY3VzIiwgIm5vb3AiLCAiYnVpbGROZXdQYWdlcyIsICJwYXJhbSIsICJmZXRjaFBhZ2UiLCAibWFudWFsIiwgInByb21pc2UiLCAiX2xvb3AiLCAiaSIsICJRdWVyeUNsaWVudCIsICJfcmVmIiwgIl9yZWYyIiwgIm5vb3AiLCAiX3JlZjMiLCAiUXVlcnlPYnNlcnZlciIsICJ0cmFja1Byb3AiLCAiZ2V0IiwgImZldGNoIiwgIm5vb3AiLCAidmFsdWUiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsICJSZWFjdERPTSIsICJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsICJsb2dnZXIiLCAibG9nZ2VyIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJ1c2VRdWVyeUNsaWVudCIsICJRdWVyeUNsaWVudFByb3ZpZGVyIiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgInVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJzZWFyY2hWYWx1ZSIsICJ2YWx1ZSIsICJwcmVmaXgiLCAiUmVhY3QiLCAib3B0aW9ucyIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgIm4iLCAibWF0Y2giLCAibjIiLCAidmFsdWUiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJlbnRpdHkiLCAiUmVhY3QiLCAia2V5cyIsICJwcm9wZXJ0eSIsICJkb21haW5zIiwgInJhbmdlcyIsICJpcmkiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgInZhbHVlIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJERUZBVUxUX0hBU19USVRMRSIsICJvbnRvbG9neSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJub2RlIiwgImN5Y2xlQ2hlY2siLCAiY3ljbGVDaGVjayIsICJub2RlIiwgIlJlYWN0IiwgIm5vZGUiLCAiaGllcmFyY2h5IiwgIlJlYWN0RE9NIiwgInJlbmRlciIsICJSZWFjdCIsICJ2YWx1ZSIsICJpbXBvcnRfcmVhY3RfZG9tIiwgInJlbmRlciIsICJkYXRhIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgInZhbHVlIiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIk1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkiLCAiUmVhY3QiLCAicmVuZGVyIiwgImRhdGEiLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiREVGQVVMVF9VU0VfTEVHQUNZIiwgIlJlYWN0IiwgInZhbHVlIiwgInBhZ2VJbmRleCIsICJwYWdlU2l6ZSIsICJzb3J0RmllbGQiLCAic29ydERpcmVjdGlvbiIsICJwYWdlT2ZJdGVtcyIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJzZWFyY2hWYWx1ZSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyIsICJyZW5kZXIiLCAib3B0aW9uIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIkRFRkFVTFRfSEFTX1RJVExFIiwgIlJlYWN0IiwgInByb3BlcnR5IiwgInByZWRpY2F0ZXMiLCAiZW50aXR5IiwgImluc3RhbmNlcyIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJub2RlIiwgImRhdGEiLCAiaXNQb3BvdmVyT3BlbiIsICJSZWFjdCIsICJSZWFjdERPTSJdCn0K diff --git a/dist_plainjs/terminology-service-suite.min.js b/dist_plainjs/terminology-service-suite.min.js index 80b51179..9bf490b2 100644 --- a/dist_plainjs/terminology-service-suite.min.js +++ b/dist_plainjs/terminology-service-suite.min.js @@ -63,7 +63,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `+i.map(G5e).join(` `):" "+G5e(i[0]):"as no adapter specified";throw new Tr("There is no suitable adapter to dispatch the request "+c,"ERR_NOT_SUPPORT")}return n},adapters:_re};function Sre(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Z0(null,e)}function aU(e){return Sre(e),e.headers=Ha.from(e.headers),e.data=BM.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),iU.getAdapter(e.adapter||fE.adapter)(e).then(function(n){return Sre(e),n.data=BM.call(e,e.transformResponse,n),n.headers=Ha.from(n.headers),n},function(n){return zM(n)||(Sre(e),n&&n.response&&(n.response.data=BM.call(e,e.transformResponse,n.response),n.response.headers=Ha.from(n.response.headers))),Promise.reject(n)})}var sU="1.7.9";var lU={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{lU[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});var J5e={};lU.transitional=function(t,r,n){function o(i,c){return"[Axios v"+sU+"] Transitional option '"+i+"'"+c+(n?". "+n:"")}return(i,c,p)=>{if(t===!1)throw new Tr(o(c," has been removed"+(r?" in "+r:"")),Tr.ERR_DEPRECATED);return r&&!J5e[c]&&(J5e[c]=!0,console.warn(o(c," has been deprecated since v"+r+" and will be removed in the near future"))),t?t(i,c,p):!0}};lU.spelling=function(t){return(r,n)=>(console.warn(`${n} is likely a misspelling of ${t}`),!0)};function MVe(e,t,r){if(typeof e!="object")throw new Tr("options must be an object",Tr.ERR_BAD_OPTION_VALUE);let n=Object.keys(e),o=n.length;for(;o-- >0;){let i=n[o],c=t[i];if(c){let p=e[i],m=p===void 0||c(p,i,e);if(m!==!0)throw new Tr("option "+i+" must be "+m,Tr.ERR_BAD_OPTION_VALUE);continue}if(r!==!0)throw new Tr("Unknown option "+i,Tr.ERR_BAD_OPTION)}}var VM={assertOptions:MVe,validators:lU};var q0=VM.validators,vE=class{constructor(t){this.defaults=t,this.interceptors={request:new ure,response:new ure}}async request(t,r){try{return await this._request(t,r)}catch(n){if(n instanceof Error){let o={};Error.captureStackTrace?Error.captureStackTrace(o):o=new Error;let i=o.stack?o.stack.replace(/^.+\n/,""):"";try{n.stack?i&&!String(n.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(n.stack+=` `+i):n.stack=i}catch{}}throw n}}_request(t,r){typeof t=="string"?(r=r||{},r.url=t):r=t||{},r=Sm(this.defaults,r);let{transitional:n,paramsSerializer:o,headers:i}=r;n!==void 0&&VM.assertOptions(n,{silentJSONParsing:q0.transitional(q0.boolean),forcedJSONParsing:q0.transitional(q0.boolean),clarifyTimeoutError:q0.transitional(q0.boolean)},!1),o!=null&&(Le.isFunction(o)?r.paramsSerializer={serialize:o}:VM.assertOptions(o,{encode:q0.function,serialize:q0.function},!0)),VM.assertOptions(r,{baseUrl:q0.spelling("baseURL"),withXsrfToken:q0.spelling("withXSRFToken")},!0),r.method=(r.method||this.defaults.method||"get").toLowerCase();let c=i&&Le.merge(i.common,i[r.method]);i&&Le.forEach(["delete","get","head","post","put","patch","common"],A=>{delete i[A]}),r.headers=Ha.concat(c,i);let p=[],m=!0;this.interceptors.request.forEach(function(F){typeof F.runWhen=="function"&&F.runWhen(r)===!1||(m=m&&F.synchronous,p.unshift(F.fulfilled,F.rejected))});let v=[];this.interceptors.response.forEach(function(F){v.push(F.fulfilled,F.rejected)});let b,_=0,I;if(!m){let A=[aU.bind(this),void 0];for(A.unshift.apply(A,p),A.push.apply(A,v),I=A.length,b=Promise.resolve(r);_{if(!n._listeners)return;let i=n._listeners.length;for(;i-- >0;)n._listeners[i](o);n._listeners=null}),this.promise.then=o=>{let i,c=new Promise(p=>{n.subscribe(p),i=p}).then(o);return c.cancel=function(){n.unsubscribe(i)},c},t(function(i,c,p){n.reason||(n.reason=new Z0(i,c,p),r(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;let r=this._listeners.indexOf(t);r!==-1&&this._listeners.splice(r,1)}toAbortSignal(){let t=new AbortController,r=n=>{t.abort(n)};return this.subscribe(r),t.signal.unsubscribe=()=>this.unsubscribe(r),t.signal}static source(){let t;return{token:new e(function(o){t=o}),cancel:t}}},X5e=Ire;function Ere(e){return function(r){return e.apply(null,r)}}function Pre(e){return Le.isObject(e)&&e.isAxiosError===!0}var kre={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(kre).forEach(([e,t])=>{kre[t]=e});var K5e=kre;function Y5e(e){let t=new $M(e),r=DM($M.prototype.request,t);return Le.extend(r,$M.prototype,t,{allOwnKeys:!0}),Le.extend(r,t,null,{allOwnKeys:!0}),r.create=function(o){return Y5e(Sm(e,o))},r}var ma=Y5e(fE);ma.Axios=$M;ma.CanceledError=Z0;ma.CancelToken=X5e;ma.isCancel=zM;ma.VERSION=sU;ma.toFormData=H5;ma.AxiosError=Tr;ma.Cancel=ma.CanceledError;ma.all=function(t){return Promise.all(t)};ma.spread=Ere;ma.isAxiosError=Pre;ma.mergeConfig=Sm;ma.AxiosHeaders=Ha;ma.formToJSON=e=>eU(Le.isHTMLForm(e)?new FormData(e):e);ma.getAdapter=iU.getAdapter;ma.HttpStatusCode=K5e;ma.default=ma;var V5=ma;var{Axios:Hpr,AxiosError:Vpr,CanceledError:$pr,isCancel:Zpr,CancelToken:qpr,VERSION:Upr,all:Gpr,Cancel:Jpr,isAxiosError:Xpr,spread:Kpr,toFormData:Ypr,AxiosHeaders:Qpr,HttpStatusCode:edr,formToJSON:tdr,getAdapter:rdr,mergeConfig:ndr}=V5;var Bg=["class","term"],Q5e=["property","annotationProperty","dataProperty","objectProperty"],e3e=["individual"],uU=["ontology"],ZM=[...Bg,...e3e,...Q5e],jre=[...ZM,...uU];function gE(e){return Bg.includes(e)}function Tre(e){return Q5e.includes(e)}function Md(e){return e3e.includes(e)}function qM(e){return uU.includes(e)}function Cre(e){return ZM.includes(e)}function UM(e){return jre.includes(e)}function mx(e){return gE(e.getType())}function $5(e){return Tre(e.getType())}function yE(e){return Md(e.getType())}function Ad(e){return Cre(e.getType())}function t3e(e){return qM(e.getType())}var r3e="https://raw.githubusercontent.com/OBOFoundry/OBOFoundry.github.io/master";function gt(e){return Array.isArray(e)?e:e?[e]:[]}var AVe=!0;function su(e){return e!==void 0?e:AVe}function cU(e){return e==="term"?"class":e}function Im(e){return e.charAt(0).toUpperCase()+e.slice(1)}function bE(e){return Im(e).split(/(?=[A-Z][a-z])/).join(" ")}function wE(e){return Im(e).replace("_"," ")}function Em(e,t,r,n){return`ontologies/${e}/${_l(gt(t),n)}`+(r!=null?`/${encodeURIComponent(encodeURIComponent(r))}`:"")}function _l(e,t){for(let r of gt(e))if(UM(r)){if(gE(r))return su(t)?"terms":"classes";if(Tre(r))return"properties";if(Md(r))return"individuals";if(qM(r))return"ontologies"}throw new Error("No thingType found to pluralize in provided typeArray.")}function pU(e,t){for(let r of gt(e))switch(r){case"terms":case"classes":return su(t)?"term":"class";case"properties":case"dataProperties":case"objectProperties":case"annotationProperties":return"property";case"individuals":return"individual";case"ontologies":return"ontology"}throw new Error("No thingType found to singularize in provided typeArray.")}function xr(){return(Math.random()*Math.pow(2,54)).toString(36)}function dU(e){return/^#[0-9A-F]{6}$/i.test(e)}function fU(e){return/^(rgb|hsl)(a?)[(]\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*(?:,\s*([\d.]+)\s*)?[)]$/i.test(e)}function Mre(e){return["primary","subdued","success","accent","danger","warning","text","ghost"].includes(e)}function n3e(e){return["text","accent","primary","success","warning","danger"].includes(e)}function No(e,t="information"){return e.message==="Response contains 0 elements"?"No elements found":`No ${t} available`}function mU(e){let t=e.filter(r=>UM(r));if(t=t.map(r=>r==="annotationProperty"||r==="objectProperty"||r==="dataProperty"?"property":r),t=[...new Set(t)],t.length===1)return t[0];throw t.length===0?Error("Entity type could not be correctly inferred: No suitable type found in array."):Error(`Entity type could not be correctly inferred: Multiple types found in array, no definite choice possible - ${JSON.stringify(t)}`)}var Ct=class e{value;axioms;constructor(t,r){this.value=t,this.axioms=r}static fromJson(t){return t?(Array.isArray(t)||(t=[t]),t.map(r=>typeof r=="object"&&Array.isArray(r.type)&&r.type.indexOf("reification")!==-1?new e(r.value,r.axioms):new e(r,null))):[]}hasMetadata(){return this.axioms!=null}getMetadata(){if(!this.axioms)return null;let t={};for(let r of this.axioms)for(let n of Object.keys(r)){let o=r[n],i=t[n];i!==void 0?i.push(o):t[n]=[o]}return t}};var hx=class e{linkedEntities;constructor(t){t?this.linkedEntities={...t}:this.linkedEntities={}}mergeWith(t){return t?new e({...this.linkedEntities,linkedEntities:t}):new e({...this.linkedEntities})}getLabelForIri(t){let r=this.linkedEntities[t];if(r){let n=Ct.fromJson(r.label);if(n&&n.length>0)return n[0].value}}get(t){return this.linkedEntities[t]}};var vx=class{properties;constructor(t){this.properties=t}getLabel(){return this.properties.label}getId(){return this.properties.id}getIri(){return this.properties.iri}getTypePlural(){return _l(this.getType())}getRdfTypes(){return[]}getName(){return this.getNames()[0]}getNames(){let t=Ct.fromJson(this.properties.label);return t&&t.length>0?t.map(r=>r.value):[this.getIri()]}getDescription(){let t=Ct.fromJson(this.properties.description);return t&&t.length>0?t.map(r=>r.value||"").join(" "):""}getOntologyId(){return this.properties.ontology_name}getLabelForIri(t){let r=this.properties.linkedEntities;return r&&Ct.fromJson(r[t]?.label)[0]?.value||t}getLinkedEntities(){return new hx(this.properties.linkedEntities||{})}getDepictionUrl(){return this.properties.annotation&&this.properties.annotation.depiction?this.properties.annotation.depiction[0]:""}};var zg=class extends vx{isCanonical(){return this.properties.is_defining_ontology===!0}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]==="true"}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return Ct.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(Ct.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return Ct.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return Ct.fromJson(this.properties.description)}hasDirectChildren(){return this.properties.hasDirectChildren==="true"}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren==="true"}hasChildren(){return this.properties.has_children}getAncestorIris(){return gt(this.properties.ancestor)}getHierarchicalAncestorIris(){return gt(this.properties.hierarchicalAncestor)}getSynonyms(){return Ct.fromJson(this.properties.synonyms)}getAppearsIn(){return this.properties.appearsIn||[]}getCrossReferences(){return this.properties.annotation.has_dbxref||[]}getDefinedBy(){return this.properties.definedBy||[]}getIsDefiningOntology(){return this.properties.is_defining_ontology||void 0}getShortForm(){return this.properties.obo_id||this.properties.short_form}getDepictedBy(){return Ct.fromJson([...gt(this.properties["http://xmlns.com/foaf/0.1/depicted_by"]||[]),...gt(this.properties["http://xmlns.com/foaf/0.1/depiction"]||[])])}isPredicateFromInformalVocabulary(t){return t.startsWith("http://www.w3.org/2004/02/skos/core#")||t.startsWith("http://purl.org/dc/terms/")||t.startsWith("http://purl.org/dc/elements/1.1/")||t.startsWith("http://schema.org/")}getAnnotationPredicates(){return gt(Object.keys(this.properties.annotation))}getAnnotationTitleById(t){return wE(t)}getAnnotationById(t){return Ct.fromJson(gt(this.properties.annotation[t]))}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDescendants?parseInt(this.properties.numDescendants):0}getHierarchicalParentReificationAxioms(t){let r=Ct.fromJson(this.properties.hierarchicalParent);for(let n of r)if(n.value===t)return n.getMetadata()}};var GM=class extends zg{getType(){return"class"}getTypePlural(){return"classes"}getParents(){return Ct.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return Ct.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return Ct.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return gt(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return gt(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}getSubsets(){return gt(this.properties.in_subset)||[]}};var JM=class extends zg{getType(){return"property"}getParents(){return Ct.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return Ct.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return Ct.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return gt(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return gt(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return gt(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return gt(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return Ct.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};var XM=class extends zg{getType(){return"individual"}getParents(){return Ct.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return Ct.fromJson([])}getDifferentFrom(){return gt(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return gt(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let t=this.getRdfTypes();return!t||!Array.isArray(t)?[]:t.filter(r=>r!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof r!="string"||!r.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}};var KM=class extends vx{getType(){return"ontology"}getTypePlural(){return"ontologies"}getOntologyId(){return this.properties.ontologyId}getName(){let t=Ct.fromJson(this.properties.config.title||"");return t[0]&&t[0].value||this.getOntologyId()}getDescription(){let t=Ct.fromJson(this.properties.config.description||"");return t[0]&&t[0].value||""}getCreators(){return gt(this.properties.config.annotations.creator)}getSourceFileTimestamp(){return this.properties.updated}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfTerms)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.config.logo||void 0}getOntologyPurl(){return this.properties.config.fileLocation}getHomepage(){return this.properties.config.homepage}getMailingList(){return this.properties.config.mailingList}getTracker(){return this.properties.config.tracker}getVersionIri(){return this.properties.config.versionIri}getVersion(){return this.properties.config.version}getVersionFromIri(){let t=this.getVersionIri();if(!t)return"";let r=t.match(/\d{4}-\d{2}-\d{2}/);if(r&&r.length>0)return r[0];{let n=t.match(/\/v[d.].*\//);return n?n[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){return this.properties.config&&this.properties.config.annotations?gt(Object.keys(this.properties.config.annotations)):[]}getAnnotationTitleById(t){return bE(t)}getAnnotationById(t){return Ct.fromJson(gt(this.properties.config.annotations[t]).filter(r=>typeof r!="string"||r!==""))}getPreferredRoots(){return gt(this.properties.hasPreferredRoot)}getPreferredPrefix(){return this.properties.config.preferredPrefix}getLanguages(){return gt(this.properties.lang)}getImportsFrom(){return[]}getExportsTo(){return gt(this.properties.exportsTo)}getAllowDownload(){return this.properties.config.allowDownload}getLicense(){return this.properties.config.annotations.license}};var YM=class{properties;constructor(t){this.properties=t}getTotalOntologies(){return this.properties.length}getNumEntities(){return this.properties.reduce((t,r)=>t+r.getNumEntities(),0)}getNumClasses(){return this.properties.reduce((t,r)=>t+r.getNumClasses(),0)}getNumProperties(){return this.properties.reduce((t,r)=>t+r.getNumProperties(),0)}getNumIndividuals(){return this.properties.reduce((t,r)=>t+r.getNumIndividuals(),0)}};var gx=class{properties;constructor(t){this.properties=t}getLabel(){return Ct.fromJson(this.properties.label)[0].value}getId(){return this.properties.id}getIri(){return this.properties.iri}getType(){let t=this.properties.type;for(let r of t)if(UM(r))return r;throw new Error("unknown type")}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":case"annotationProperty":case"dataProperty":case"objectProperty":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getRdfTypes(){return gt(this.properties["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"])}getName(){return this.getNames()[0]}getNames(){let t=Ct.fromJson(this.properties.label);return t&&t.length>0?t.map(r=>r.value):[this.getIri()]}getDescription(){let t=Ct.fromJson(this.properties.definition);return t&&t.length>0?t.map(r=>r.value||"").join(" "):""}getOntologyId(){return this.properties.ontologyId}getLabelForIri(t){let r=this.properties.linkedEntities;return r&&Ct.fromJson(r[t]?.label)[0]?.value||t}getAnnotationById(t){return Ct.fromJson(gt(this.properties[t]))}getAnnotationTitleById(t){return this.getLabelForIri(t)}getLinkedEntities(){return new hx(this.properties.linkedEntities||{})}getDepictionUrl(){return this.properties["http://xmlns.com/foaf/0.1/depiction"]?this.properties["http://xmlns.com/foaf/0.1/depiction"]:""}};var Wg=class extends gx{isCanonical(){return this.properties.isDefiningOntology}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return Ct.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(Ct.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return Ct.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return Ct.fromJson(this.properties.definition)}hasDirectChildren(){return this.properties.hasDirectChildren}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren}hasChildren(){return this.hasDirectChildren()||this.hasHierarchicalChildren()}getAncestorIris(){return gt(this.properties.ancestor)}getHierarchicalAncestorIris(){return gt(this.properties.hierarchicalAncestor)}getSynonyms(){return Ct.fromJson(this.properties.synonym)}getAppearsIn(){return this.properties.appearsIn||[]}getCrossReferences(){return this.properties["http://www.geneontology.org/formats/oboInOwl#hasDbXref"]||[]}getDefinedBy(){return this.properties.definedBy||[]}getIsDefiningOntology(){return this.properties.is_defining_ontology||void 0}getShortForm(){return this.properties.curie||this.properties.shortForm}getDepictedBy(){return Ct.fromJson([...gt(this.properties["http://xmlns.com/foaf/0.1/depicted_by"]||[]),...gt(this.properties["http://xmlns.com/foaf/0.1/depiction"]||[])])}isPredicateFromInformalVocabulary(t){return t.startsWith("http://www.w3.org/2004/02/skos/core#")||t.startsWith("http://purl.org/dc/terms/")||t.startsWith("http://purl.org/dc/elements/1.1/")||t.startsWith("http://schema.org/")}getAnnotationPredicates(){let t=gt(this.properties.definitionProperty),r=gt(this.properties.synonymProperty),n=gt(this.properties.hierarchicalProperty),o=new Set;for(let i of Object.keys(this.properties))if(i.indexOf("://")!==-1&&!i.startsWith("negativePropertyAssertion+")&&i!=="http://xmlns.com/foaf/0.1/depicted_by"&&i!=="http://xmlns.com/foaf/0.1/depiction"){if(!this.isPredicateFromInformalVocabulary(i)){let c=this.getLinkedEntities().get(i);if(c!=null&&c.type.indexOf("objectProperty")!==-1||c!=null&&c.type.indexOf("dataProperty")!==-1)continue}t.indexOf(i)!==-1||r.indexOf(i)!==-1||n.indexOf(i)!==-1||(i.startsWith("http://www.w3.org/2000/01/rdf-schema#")||i.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||i.startsWith("http://www.w3.org/2002/07/owl#"))&&i!=="http://www.w3.org/2000/01/rdf-schema#comment"&&i!=="http://www.w3.org/2000/01/rdf-schema#seeAlso"&&i!=="http://www.w3.org/2002/07/owl#disjointUnionOf"||i==="http://www.geneontology.org/formats/oboInOwl#inSubset"||i==="http://www.geneontology.org/formats/oboInOwl#id"||o.add(i)}return Array.from(o)}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDirectDescendants?parseInt(this.properties.numDirectDescendants):0}getHierarchicalParentReificationAxioms(t){let r=Ct.fromJson(this.properties.hierarchicalParent);for(let n of r)if(n.value===t)return n.getMetadata()}};var QM=class extends Wg{getParents(){return Ct.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return Ct.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return Ct.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return gt(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return gt(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}getSubsets(){return gt(this.properties["http://www.geneontology.org/formats/oboInOwl#inSubset"])||[]}};var eA=class extends Wg{getParents(){return Ct.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return Ct.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return Ct.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return gt(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return gt(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return gt(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return gt(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return Ct.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};var tA=class extends Wg{getParents(){return Ct.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return Ct.fromJson([])}getDifferentFrom(){return gt(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return gt(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let t=this.getRdfTypes();return!t||!Array.isArray(t)?[]:t.filter(r=>r!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof r!="string"||!r.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}};var rA=class extends gx{getOntologyId(){return this.properties.ontologyId}getName(){let t=Ct.fromJson(this.properties.label||this.properties.title||"");return t[0]&&t[0].value||this.getOntologyId()}getDescription(){let t=Ct.fromJson(this.properties.description||this.properties.definition||"");return t[0]&&t[0].value||""}getCreators(){return gt(this.properties["http://purl.org/dc/elements/1.1/creator"])}getSourceFileTimestamp(){return this.properties.sourceFileTimestamp}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfClasses)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.depicted_by}getOntologyPurl(){return this.properties.ontology_purl}getHomepage(){return this.properties.homepage}getMailingList(){return this.properties.mailing_list}getTracker(){return this.properties.tracker}getVersionIri(){return this.properties["http://www.w3.org/2002/07/owl#versionIRI"]}getVersion(){return this.properties["http://www.w3.org/2002/07/owl#versionInfo"]}getVersionFromIri(){let t=this.getVersionIri();if(!t)return"";let r=t.match(/\d{4}-\d{2}-\d{2}/);if(r&&r.length>0)return r[0];{let n=t.match(/\/v[d.].*\//);return n?n[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){let t=new Set;for(let r of Object.keys(this.properties))r.indexOf("://")!==-1&&r!=="http://purl.obolibrary.org/obo/IAO_0000700"&&(r.startsWith("http://www.w3.org/2000/01/rdf-schema#")||r.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||r.startsWith("http://www.w3.org/2002/07/owl#")||t.add(r));return Array.from(t)}getPreferredRoots(){return gt(this.properties.hasPreferredRoot)}getPreferredPrefix(){return this.properties.preferredPrefix}getLanguages(){return gt(this.properties.language)}getImportsFrom(){return gt(this.properties.importsFrom)}getExportsTo(){return gt(this.properties.exportsTo)}getLicense(){return this.properties.license}getAllowDownload(){return this.properties.allowDownload}};var nA=class{properties;constructor(t){this.properties=t}getTotalOntologies(){return this.properties.length}getNumEntities(){return this.properties.reduce((t,r)=>t+r.getNumEntities(),0)}getNumClasses(){return this.properties.reduce((t,r)=>t+r.getNumClasses(),0)}getNumProperties(){return this.properties.reduce((t,r)=>t+r.getNumProperties(),0)}getNumIndividuals(){return this.properties.reduce((t,r)=>t+r.getNumIndividuals(),0)}};function pc(e){let t;if(e._embedded!==void 0||e.numberOfTerms!==void 0)t=!0;else if(e.elements!==void 0||e.numberOfClasses!==void 0)t=!1;else throw Error(`Response structure does not correlate to any of the featured response structures: - ${JSON.stringify(e)}`);let r;if(t)e._embedded===void 0?r="ontology":e._embedded.terms!==void 0?r="term":e._embedded.properties!==void 0?r="property":e._embedded.individuals!==void 0&&(r="individual");else if(e.elements===void 0)r="ontology";else{if(e.elements[0]===void 0)throw Error("Empty response.");r=mU(e.elements[0].type)}if(r===void 0)throw Error("Entity type could not be correctly inferred.");return DVe(e,r,t)}function DVe(e,t,r){switch(t){case"ontology":return r?new KM(e):new rA(e);case"term":case"class":return r?new GM(Z5(gt(e._embedded.terms),r)):new QM(Z5(gt(e.elements),r));case"property":return r?new JM(Z5(gt(e._embedded.properties),r)):new eA(Z5(gt(e.elements),r));case"individual":return r?new XM(Z5(gt(e._embedded.individuals),r)):new tA(Z5(gt(e.elements),r));default:throw Error('Invalid entity type "'+t+'". Must be one of {"term", "class", "ontology", "property", "individual"}')}}function Z5(e,t,r){if(r){let o=gt(e).filter(i=>(t?i.ontology_name:i.ontologyId)==r);if(o.length>0)return o[0];console.error(`Invalid ontologyId ${r} for given entityArrayResponse.`)}let n=gt(e).filter(o=>t?o.is_defining_ontology:o.isDefiningOntology);if(n.length>0)return n[0];if(e.length>0)return e[0];throw Error("Empty response.")}var Pm=class{entityData;childRelationToParent;loadedChildren;expanded;loading;constructor(t,r){this.entityData=t,this.loadedChildren=[],this.expanded=!1,this.loading=!1,this.childRelationToParent=r}addChild(t){this.loadedChildren.push(t)}},RVe=!1,NVe=!0,km=class{parentChildRelations;entitiesData;allChildrenPresent;roots;api;ontologyId;includeObsoleteEntities=RVe;entityType;keepExpansionStates=NVe;useLegacy;mainEntityIri;constructor(t){let{parentChildRelations:r,entitiesData:n,allChildrenPresent:o,roots:i,includeObsoleteEntities:c,keepExpansionStates:p,api:m,mainEntityIri:v,entityType:b,ontologyId:_,useLegacy:I}=t;this.parentChildRelations=r,this.entitiesData=n,this.allChildrenPresent=o,this.roots=i,c!=null&&(this.includeObsoleteEntities=c),p!=null&&(this.keepExpansionStates=p),this.api=m,this.mainEntityIri=v,this.entityType=b,this.ontologyId=_,I!=null&&(this.useLegacy=I)}mergeChildrenIntoLoadedChildren(t){let r=this.parentChildRelations.get(t.entityData.iri);if(r==null)throw Error(`parentChildRelations has no entry for key "${t.entityData.iri}" although this should never happen.`);let n=0,o=t.loadedChildren.length,i=0;for(;i=0;c--)for(let p=c+1;p(c.label||c.iri).localeCompare(p.label||p.iri)),i=[];for(let c of o)if(this.entitiesData.set(c.iri,c),c.parents){let p=c.parents.filter(m=>m.value==t.entityData.iri);i.push({childIri:c.iri,childRelationToParent:p.length>0&&p[0].getMetadata()?p[0].getMetadata().childRelationToParent:void 0})}this.parentChildRelations.set(t.entityData.iri,i)}return this.mergeChildrenIntoLoadedChildren(t),this.allChildrenPresent.add(t.entityData.iri),!0}else return!1}};var hU=class{properties;constructor(t){this.properties=t}getTotalSearchResults(){return this.properties.length}};var vU=class{properties;constructor(t){this.properties=t}getDescription(){let t=this.properties.description;return Array.isArray(t)?t.join(" "):typeof t=="string"?t:""}getIri(){return this.properties.iri}getLabel(){return this.properties.label}getOntologyId(){return this.properties.ontology_name}getType(){return this.properties.type}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getShortForm(){return this.properties.short_form}getApiSourceName(){return""}getApiSourceEndpoint(){return""}};var gU=class{properties;constructor(t){this.properties=t}getDescription(){let t=this.properties.description;return Array.isArray(t)?t.join(" "):typeof t=="string"?t:""}getIri(){return this.properties.iri}getLabel(){return this.properties.label}getOntologyId(){return this.properties.ontology}getType(){return this.properties.type}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getShortForm(){return this.properties.short_form}getApiSourceName(){return this.properties.source_name}getApiSourceEndpoint(){return this.properties.source}};function yU(e){return e==="http://www.w3.org/2002/07/owl#Thing"||e==="http://www.w3.org/2002/07/owl#TopObjectProperty"}var LVe=10,Kr=class e{axiosInstance;constructor(t){this.axiosInstance=V5.create({baseURL:t,headers:{Accept:"application/json",Content_Type:"application/json"}})}buildParamsForGet(t,r,n,o){return r?{...t,sort:`${r.sortField},${r.sortDir}`,...n,...this.buildOtherParams(o)}:{...t,...n,...this.buildOtherParams(o)}}buildPaginationParams(t){let r={rows:t?.size};return t?.page&&(t.size?r.start=(+t.page*+t.size).toString():r.start=(+t.page*LVe).toString()),r}buildParamsForSearch(t,r,n,o,i){let c={exact:t.exactMatch,obsoletes:t.showObsoleteTerms};return i?c.query=t.query:c.q=t.query,t.groupByIri&&(c.groupField=t.groupByIri),t.types&&(c.type=t.types),t.ontology&&(c.ontology=t.ontology),{...c,...this.buildPaginationParams(r),...n,...this.buildOtherParams(o)}}buildOtherParams(t){let r={};return t&&t.split("&").forEach(o=>{let i=o.split("=")[0],c=o.split("=")[1];r[i]=c}),r}buildParamsForSelect(t,r,n,o){return{...{q:t.query},...this.buildPaginationParams(r),...n,...this.buildOtherParams(o)}}buildParamsForSuggest(t,r,n,o){return{...{q:t.query},...this.buildPaginationParams(r),...n,...this.buildOtherParams(o)}}check_for_errors(t){if(t.error)throw Error(t.status+" "+t.error+" - "+t.message+" - "+t.exception+" at "+t.path);if(t.page!==void 0&&t.page.totalElements===0)throw Error("Response contains 0 elements");return t}async makeCall(t,r,n){let o=su(n)?"":"v2/",i=(await this.axiosInstance.get(o+t,r)).data;return this.check_for_errors(i)}getOntologies=async(t,r,n,o,i=!0)=>this.makeCall("ontologies",{params:this.buildParamsForGet(t,r,n,o)},i);async getOntologiesData(t,r=!0){let n,o=[],i=0,c=500;if(r){do{if(n=await this.getOntologies({size:c.toString(),page:i.toString()},void 0,void 0,t,r),!n||!n._embedded||!n._embedded.ontologies)throw new Error("Ontologies data not found");o=o.concat(n._embedded.ontologies.map(p=>pc(p))),i+=1}while(ipc(p))),i+=1}while(i{let c=su(i)?"terms":"classes";return this.makeCall(c,{params:this.buildParamsForGet(t,r,n)},su(i))};getProperties=async(t,r,n,o,i)=>this.makeCall("properties",{params:this.buildParamsForGet(t,r,n)},su(i));getIndividuals=async(t,r,n,o,i)=>this.makeCall("individuals",{params:this.buildParamsForGet(t,r,n)},su(i));getOntology=async(t,r,n,o,i)=>{let c={...this.buildOtherParams(o)};return this.makeCall("ontologies/"+n?.ontologyId,c,su(i))};getEntity=async(t,r,n,o,i)=>{let c=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",p={iri:n?.termIri,...this.buildOtherParams(o)};return this.makeCall(c+"entities",{params:p},su(i))};getTerm=async(t,r,n,o,i,c)=>{let p=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",m=su(i)?"terms":"classes",v={iri:n?.termIri,...this.buildOtherParams(o)};return this.makeCall(p+m,{params:v,signal:c},su(i))};getProperty=async(t,r,n,o,i,c)=>{let p=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",m={iri:n?.propertyIri,...this.buildOtherParams(o)};return this.makeCall(p+"properties",{params:m,signal:c},su(i))};getIndividual=async(t,r,n,o,i,c)=>{let p=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",m={iri:n?.individualIri,...this.buildOtherParams(o)};return this.makeCall(p+"individuals",{params:m,signal:c},su(i))};search=async(t,r,n,o,i)=>this.makeCall("search",{params:this.buildParamsForSearch(t,r,n,o),signal:i},!0);select=async(t,r,n,o)=>this.makeCall("select",{params:this.buildParamsForSelect(t,r,n,o)},!0);searchTs4nfdiGateway=async(t,r,n,o,i)=>this.makeCall("search",{params:this.buildParamsForSearch(t,r,n,o,i)},!0);async getSelectData(t,r,n,o,i){let c,p=[],m=0;if(i)if(c=await this.searchTs4nfdiGateway(t,r,n,o,i),c)p=p.concat(c.map(v=>new gU(v)));else throw new Error("Select data not found");else{if(c=await this.select(t,r,n,o),!c||!c.response.docs)throw new Error("Select data not found");p=p.concat(c.response.docs.map(v=>new vU(v)))}return new hU(p)}suggest=async(t,r,n,o)=>this.makeCall("suggest",{params:this.buildParamsForSuggest(t,r,n,o)},!0);getTermTree=async(t,r,n,o)=>{let i="ontologies/"+t?.ontologyId+"/terms";return t.termIri?(i=i+"/"+encodeURIComponent(encodeURIComponent(t?.termIri))+"/jstree",r.child?(await this.axiosInstance.get(i+"/children/"+r.child)).data:(await this.axiosInstance.get(i,{params:r})).data):(await this.axiosInstance.get(i+"/roots")).data};getTermRelations=async(t,r,n)=>{let o="ontologies/"+t?.ontologyId+"/terms";return t.termIri?(o=o+"/"+encodeURIComponent(encodeURIComponent(t?.termIri))+"/graph",(await this.axiosInstance.get(o)).data):(await this.axiosInstance.get(o+"/roots")).data};async getEntityResponse(t,r,n,o,i){let c;if(!t)throw Error("No IRI provided");return r?c=await this.getEntityWithEntityTypeProvided(t,r,n,o,i):su(i)?c=await this.getEntityWithInferredEntityType(t,n,o):c=await this.getEntity(void 0,void 0,{ontologyId:n,termIri:t},o,i),c}async getEntityObject(t,r,n,o,i){return pc(await this.getEntityResponse(t,r,n,o,i))}async getOntologyObject(t,r,n){let o=await this.getOntology(void 0,void 0,{ontologyId:t},r,n);return pc(o)}async getThingObject(t,r,n,o,i){if(r)if(qM(r)){if(n)return await this.getOntologyObject(n,o,i);throw new Error(`ontologyId has to be provided if thingType in {"${uU.join('", "')}"}.`)}else if(Cre(r)){if(t)return await this.getEntityObject(t,r,n,o,i);throw new Error(`iri has to be provided if thingType in {"${ZM.join('", "')}"}.`)}else throw new Error(`Unsupported thingType "${r}" provided. Must be in {"${jre.join('", "')}"}.`);else{if(!t&&n)return await this.getOntologyObject(n,o,i);if(t)return await this.getEntityObject(t,r,n,o,i);throw new Error("iri or ontologyId has to be provided if thingType is not provided.")}}async getEntityWithEntityTypeProvided(t,r,n,o,i){switch(r){case"term":case"class":return await this.getTerm(void 0,void 0,{ontologyId:n,termIri:t},o,i);case"property":case"annotationProperty":case"dataProperty":case"objectProperty":return await this.getProperty(void 0,void 0,{ontologyId:n,propertyIri:t},o,i);case"individual":return await this.getIndividual(void 0,void 0,{ontologyId:n,individualIri:t},o,i);default:throw Error('Invalid entity type "'+r+`". Must be one of {${ZM.map(c=>`"${c}"`).join(", ")}}.`)}}async getEntityWithInferredEntityType(t,r,n){let o=new AbortController,i=o.signal,c;function p(m){m._embedded!==void 0&&(c=m,o.abort())}if(await Promise.allSettled([this.getTerm(void 0,void 0,{ontologyId:r,termIri:t},n,!0,i).then(m=>{p(m)}),this.getProperty(void 0,void 0,{ontologyId:r,propertyIri:t},n,!0,i).then(m=>{p(m)}),this.getIndividual(void 0,void 0,{ontologyId:r,individualIri:t},n,!0,i).then(m=>{p(m)})]),c!==void 0)return c;throw Error("Iri "+t+" could not be resolved.")}async getAncestors(t,r,n,o=!1,i=!1){let c;if(gE(r)?c=await this.makeCall(`${Em(n,r,t,o)}/hierarchicalAncestors`,{params:{size:"1000",includeObsoleteEntities:i}},o):c=await this.makeCall(`${Em(n,r,t,o)}/ancestors`,{params:{size:"1000",includeObsoleteEntities:i}},o),o){let p=[],m="";switch(r){case"class":m="terms";break;case"term":m="terms";break;case"property":m="properties";break;case"individual":m="individuals";break;default:throw Error("Entity type could not be correctly inferred.")}return c._embedded[m].map(v=>{p.push(pc({_embedded:{[m]:[v]}}))}),p}return c.elements.map(p=>pc({elements:[p]}))}async getJSTree(t,r,n){return await this.makeCall(`${Em(n,r,t,!0)}/jstree`,{params:{size:"1000",viewMode:"All"}},!0)}async getChildren(t,r,n,o=!1,i=!1){let c;return gE(r)?c=await this.makeCall(`${Em(n,Bg[0],t,i)}/hierarchicalChildren`,{params:{size:"1000",includeObsoleteEntities:o}},i):Md(r)?i?c=await this.makeCall(`${Em(n,Bg[0],t,i)}/descendants`,{params:{size:"1000"}},i):c=await this.makeCall(`${Em(n,Bg[0],t,i)}/instances`,{params:{size:"1000",includeObsoleteEntities:o}},i):c=await this.makeCall(`${Em(n,r,t,i)}/children`,{params:{size:"1000",includeObsoleteEntities:o}},i),i?c._embedded[Md(r)?_l(Bg[0],i):_l(r,i)].map(p=>pc({_embedded:{[Md(r)?_l(Bg[0],i):_l(r)]:[p]}})):c.elements.map(p=>pc({elements:[p]}))}async getRootEntities(t,r,n=!1,o=!1,i=!1){return i?Md(t)?[]:(await this.makeCall(`${Em(r,t,void 0,i)}/roots`,{params:{size:"1000",includeObsoleteEntities:o}},i))._embedded[_l(t,i)].map(p=>pc({_embedded:{[_l(t,i)]:[p]}})):Md(t)?[]:(await this.makeCall(`${Em(r,t,void 0,i)}`,{params:{size:"1000",includeObsoleteEntities:o,hasDirectParents:n?void 0:"false",isPreferredRoot:n?"true":void 0}},i)).elements.map(p=>pc({elements:[p]}))}async getClassInstances(t,r){return(await this.makeCall(`${Em(r,Bg[0],t,!1)}/individuals`,{params:{size:"1000"}},!1)).elements.map(o=>pc({elements:[o]}))}async buildHierarchyWithIri(t){let{iri:r,ontologyId:n,entityType:o,preferredRoots:i=!1,includeObsoleteEntities:c=!1,keepExpansionStates:p=!0,showSiblingsOnInit:m=!1,useLegacy:v=!1}=t;if(r)return await this.getEntityObject(r,o,n,"",v).then(b=>this.buildHierarchyWithEntity({entityType:o||b.getType(),ontologyId:n||b.getOntologyId(),includeObsoleteEntities:c,preferredRoots:i,mainEntity:b,keepExpansionStates:p,showSiblingsOnInit:m,useLegacy:v}));if(o==null||n==null)throw Error("Either iri or ontologyId and entityType have to be provided.");return await this.buildRootHierarchy({entityType:o,ontologyId:n,includeObsoleteEntities:c,preferredRoots:i,keepExpansionStates:p,showSiblingsOnInit:m,useLegacy:v})}jsTreeNodeToEntityData(t){return{iri:t.iri,label:t.text,hasChildren:t.children||t.state.opened,parents:[]}}entityToEntityData(t){return{iri:t.getIri(),label:gt(t.getLabel())[0],definedBy:t.getDefinedBy(),hasChildren:t.hasChildren(),numDescendants:t.getNumHierarchicalDescendants()||t.getNumDescendants(),parents:t.getParents()}}async buildRootHierarchy(t){let{ontologyId:r,entityType:n,preferredRoots:o,includeObsoleteEntities:i,useLegacy:c}=t,p=(await this.getRootEntities(n,r,o,i,c)).map(b=>this.entityToEntityData(b)).filter(b=>!yU(b.iri)),m=new Map,v=new Map;for(let b of p)m.set(b.iri,[]),v.set(b.iri,b);return new km({parentChildRelations:m,entitiesData:v,allChildrenPresent:new Set,roots:p.map(b=>new Pm(b)).sort((b,_)=>(b.entityData.label||b.entityData.iri).localeCompare(_.entityData.label||_.entityData.iri)),api:new e(this.axiosInstance.getUri()),ontologyId:r,includeObsoleteEntities:i,entityType:n,keepExpansionStates:t.keepExpansionStates,useLegacy:c})}async buildHierarchyWithEntity(t){let{mainEntity:r,ontologyId:n,entityType:o,preferredRoots:i,includeObsoleteEntities:c,showSiblingsOnInit:p,useLegacy:m}=t,v=[];if(m){let D=await this.getJSTree(r.getIri(),o,n),L=new Map,H=new Map;for(let Q of D)L.set(Q.id,Q.iri),H.set(Q.iri,new Set);for(let Q of D){let re=H.get(Q.iri),ee=L.get(Q.parent);re!=null&&ee!=null&&re.add(ee)}v=[];let q=new Set;for(let Q of D)if(!q.has(Q.iri)){q.add(Q.iri),v.push(this.jsTreeNodeToEntityData(Q));let re=H.get(Q.iri);re!=null&&(v[v.length-1].parents=Ct.fromJson(Array.from(re.values()))||[])}}else{let D=await this.getAncestors(r.getIri(),o,n||r.getOntologyId(),c);v=[this.entityToEntityData(r),...D.map(L=>this.entityToEntityData(L))]}v=v.filter(D=>!yU(D.iri));let b=new Map,_=new Set,I=new Map;for(let D of v)b.set(D.iri,[]),I.set(D.iri,D);if(p){let D=o||r.getType(),L=D=="individual"?"class":D,H=[];for(let q of v)q.iri!=r.getIri()&&H.push(new Promise(Q=>this.getChildren(q.iri,L,n,c,m).then(re=>re.map(ee=>this.entityToEntityData(ee))).then(re=>{let ee=[];for(let ne of re)if(I.set(ne.iri,ne),ne.parents){let fe=ne.parents.filter(ce=>ce.value==q.iri);ee.push({childIri:ne.iri,childRelationToParent:fe.length>0&&fe[0].getMetadata()?fe[0].getMetadata().childRelationToParent:void 0})}b.set(q.iri,ee),_.add(q.iri)}).then(Q)));if(await Promise.allSettled(H),D=="individual")for(let q of r.getParents()){let Q=(await this.getChildren(q.value,D,n,c)).map(ee=>this.entityToEntityData(ee)),re=[];for(let ee of Q)re.push({childIri:ee.iri,childRelationToParent:"http://www.w3.org/1999/02/22-rdf-syntax-ns#type"});b.set(q.value,re)}}else for(let D of v)if(D.parents){let L=D.parents.filter(H=>!yU(H.value));if(D.iri==r?.getIri()&&Md(o||r.getType()))for(let H of L)b.has(H.value)&&b.get(H.value)?.push({childIri:D.iri,childRelationToParent:"http://www.w3.org/1999/02/22-rdf-syntax-ns#type"});else for(let H of L)b.has(H.value)&&b.get(H.value)?.push({childIri:D.iri,childRelationToParent:H.getMetadata()?H.getMetadata().childRelationToParent:void 0})}for(let D of b.values())D.sort((L,H)=>(I.get(L.childIri)?.label||L.childIri).localeCompare(I.get(H.childIri)?.label||H.childIri));let R=[];if(i){let D=(await this.getOntologyObject(n,void 0,m)).getPreferredRoots();for(let L of D)I.has(L)&&R.push(L)}else for(let D of v)D.parents&&D.parents.filter(H=>!yU(H.value)).length==0&&R.push(D.iri);function A(D,L,H){L.add(D.iri);let q=new Pm(D);q.childRelationToParent=H;let Q=b.get(D.iri)||[];for(let re of Q){if(L.has(re.childIri)){console.error(`Cyclic tree at entity "${re.childIri}".`);continue}let ee=I.get(re.childIri);ee!=null&&q.addChild(A(ee,L,re.childRelationToParent))}return q.loadedChildren.length>0&&(q.expanded=!0),L.delete(D.iri),q}let F=new Set;return new km({parentChildRelations:b,entitiesData:I,allChildrenPresent:_,roots:R.map(D=>A(I.get(D),F)).sort((D,L)=>(D.entityData.label||D.entityData.iri).localeCompare(L.entityData.label||L.entityData.iri)),api:new e(this.axiosInstance.getUri()),ontologyId:n,includeObsoleteEntities:c,entityType:o,mainEntityIri:r?.getIri(),keepExpansionStates:t.keepExpansionStates,useLegacy:m})}async loadHierarchyChildren(t){if(t.entityType==null)throw Error("EntityType has to be provided to load children in OLS.");return(await this.getChildren(t.nodeToExpand.entityData.iri,t.entityType,t.ontologyId,t.includeObsoleteEntities,t.useLegacy)).map(r=>this.entityToEntityData(r))}};var Tx=k(z()),m9=k(ot());var B8e=k(z()),mJ=k(ot()),z8e=k(Mt());var dn={};X(dn,{ALT:()=>qVe,ARROW_DOWN:()=>XVe,ARROW_LEFT:()=>YVe,ARROW_RIGHT:()=>QVe,ARROW_UP:()=>KVe,BACKSPACE:()=>$Ve,CTRL:()=>GVe,END:()=>r$e,ENTER:()=>zVe,ESCAPE:()=>HVe,F2:()=>ZVe,HOME:()=>n$e,META:()=>JVe,PAGE_DOWN:()=>t$e,PAGE_UP:()=>e$e,SHIFT:()=>UVe,SPACE:()=>WVe,TAB:()=>VVe,keys:()=>o$e});var zVe="Enter",WVe=" ",HVe="Escape",VVe="Tab",$Ve="Backspace",ZVe="F2",qVe="Alt",UVe="Shift",GVe="Control",JVe="Meta",XVe="ArrowDown",KVe="ArrowUp",YVe="ArrowLeft",QVe="ArrowRight",e$e="PageUp",t$e="PageDown",r$e="End",n$e="Home",o$e=function(e){return e.ENTER="Enter",e.SPACE=" ",e.ESCAPE="Escape",e.TAB="Tab",e.BACKSPACE="Backspace",e.F2="F2",e.ALT="Alt",e.SHIFT="Shift",e.CTRL="Control",e.META="Meta",e.ARROW_DOWN="ArrowDown",e.ARROW_UP="ArrowUp",e.ARROW_LEFT="ArrowLeft",e.ARROW_RIGHT="ArrowRight",e.PAGE_UP="PageUp",e.PAGE_DOWN="PageDown",e.END="End",e.HOME="Home",e}({});var OE=k(z());var wU,i$e=new Uint8Array(16);function Are(){if(!wU&&(wU=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!wU))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return wU(i$e)}var p3e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function a$e(e){return typeof e=="string"&&p3e.test(e)}var d3e=a$e;var $s=[];for(OU=0;OU<256;++OU)$s.push((OU+256).toString(16).substr(1));var OU;function s$e(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=($s[e[t+0]]+$s[e[t+1]]+$s[e[t+2]]+$s[e[t+3]]+"-"+$s[e[t+4]]+$s[e[t+5]]+"-"+$s[e[t+6]]+$s[e[t+7]]+"-"+$s[e[t+8]]+$s[e[t+9]]+"-"+$s[e[t+10]]+$s[e[t+11]]+$s[e[t+12]]+$s[e[t+13]]+$s[e[t+14]]+$s[e[t+15]]).toLowerCase();if(!d3e(r))throw TypeError("Stringified UUID is invalid");return r}var f3e=s$e;var m3e,Dre,Rre=0,Nre=0;function l$e(e,t,r){var n=t&&r||0,o=t||new Array(16);e=e||{};var i=e.node||m3e,c=e.clockseq!==void 0?e.clockseq:Dre;if(i==null||c==null){var p=e.random||(e.rng||Are)();i==null&&(i=m3e=[p[0]|1,p[1],p[2],p[3],p[4],p[5]]),c==null&&(c=Dre=(p[6]<<8|p[7])&16383)}var m=e.msecs!==void 0?e.msecs:Date.now(),v=e.nsecs!==void 0?e.nsecs:Nre+1,b=m-Rre+(v-Nre)/1e4;if(b<0&&e.clockseq===void 0&&(c=c+1&16383),(b<0||m>Rre)&&e.nsecs===void 0&&(v=0),v>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");Rre=m,Nre=v,Dre=c,m+=122192928e5;var _=((m&268435455)*1e4+v)%4294967296;o[n++]=_>>>24&255,o[n++]=_>>>16&255,o[n++]=_>>>8&255,o[n++]=_&255;var I=m/4294967296*1e4&268435455;o[n++]=I>>>8&255,o[n++]=I&255,o[n++]=I>>>24&15|16,o[n++]=I>>>16&255,o[n++]=c>>>8|128,o[n++]=c&255;for(var R=0;R<6;++R)o[n+R]=i[R];return t||f3e(o)}var xU=l$e;function hn(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",t=xU();return function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",n="".concat(e).concat(e!==""?"_":"i"),o=r?"_".concat(r):"";return"".concat(n).concat(o?t:xU()).concat(o)}}var u$e=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=t.prefix,n=t.suffix,o=t.conditionalId;return(0,OE.useMemo)(function(){return o||hn(r)(n)},[o,r,n])},c$e=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=t.prefix,n=r===void 0?"":r,o=t.suffix,i=o===void 0?"":o,c=t.conditionalId,p=OE.default.useId();return(0,OE.useMemo)(function(){return c||"".concat(n).concat(p).concat(i)},[p,c,n,i])},jm="useId"in OE.default?c$e:u$e;var dc="left",Lre="right";var X0=k(z());function Sl(e){return Object.keys(e)}var r3=k(z());var CE=k(z());var Dd={light:"LIGHT",dark:"DARK"},h3e="INVERSE";function v3e(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),r.push.apply(r,n)}return r}function Fre(e){for(var t=1;t(t?i.ontology_name:i.ontologyId)==r);if(o.length>0)return o[0];console.error(`Invalid ontologyId ${r} for given entityArrayResponse.`)}let n=gt(e).filter(o=>t?o.is_defining_ontology:o.isDefiningOntology);if(n.length>0)return n[0];if(e.length>0)return e[0];throw Error("Empty response.")}var Pm=class{entityData;childRelationToParent;loadedChildren;expanded;loading;constructor(t,r){this.entityData=t,this.loadedChildren=[],this.expanded=!1,this.loading=!1,this.childRelationToParent=r}addChild(t){this.loadedChildren.push(t)}},RVe=!1,NVe=!0,km=class{parentChildRelations;entitiesData;allChildrenPresent;roots;api;ontologyId;includeObsoleteEntities=RVe;entityType;keepExpansionStates=NVe;useLegacy;mainEntityIri;constructor(t){let{parentChildRelations:r,entitiesData:n,allChildrenPresent:o,roots:i,includeObsoleteEntities:c,keepExpansionStates:p,api:m,mainEntityIri:v,entityType:b,ontologyId:_,useLegacy:I}=t;this.parentChildRelations=r,this.entitiesData=n,this.allChildrenPresent=o,this.roots=i,c!=null&&(this.includeObsoleteEntities=c),p!=null&&(this.keepExpansionStates=p),this.api=m,this.mainEntityIri=v,this.entityType=b,this.ontologyId=_,I!=null&&(this.useLegacy=I)}mergeChildrenIntoLoadedChildren(t){let r=this.parentChildRelations.get(t.entityData.iri);if(r==null)throw Error(`parentChildRelations has no entry for key "${t.entityData.iri}" although this should never happen.`);let n=0,o=t.loadedChildren.length,i=0;for(;i=0;c--)for(let p=c+1;p(c.label||c.iri).localeCompare(p.label||p.iri)),i=[];for(let c of o)if(this.entitiesData.set(c.iri,c),c.parents){let p=c.parents.filter(m=>m.value==t.entityData.iri);i.push({childIri:c.iri,childRelationToParent:p.length>0&&p[0].getMetadata()?p[0].getMetadata().childRelationToParent:void 0})}this.parentChildRelations.set(t.entityData.iri,i)}return this.mergeChildrenIntoLoadedChildren(t),this.allChildrenPresent.add(t.entityData.iri),!0}else return!1}};var hU=class{properties;constructor(t){this.properties=t}getTotalSearchResults(){return this.properties.length}};var vU=class{properties;constructor(t){this.properties=t}getDescription(){let t=this.properties.description;return Array.isArray(t)?t.join(" "):typeof t=="string"?t:""}getIri(){return this.properties.iri}getLabel(){return this.properties.label}getOntologyId(){return this.properties.ontology_name}getType(){return this.properties.type}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getShortForm(){return this.properties.short_form}getApiSourceName(){return""}getApiSourceEndpoint(){return""}};var gU=class{properties;constructor(t){this.properties=t}getDescription(){let t=this.properties.description;return Array.isArray(t)?t.join(" "):typeof t=="string"?t:""}getIri(){return this.properties.iri}getLabel(){return this.properties.label}getOntologyId(){return this.properties.ontology}getType(){return this.properties.type}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getShortForm(){return this.properties.short_form}getApiSourceName(){return this.properties.source_name}getApiSourceEndpoint(){return this.properties.source}};function yU(e){return e==="http://www.w3.org/2002/07/owl#Thing"||e==="http://www.w3.org/2002/07/owl#TopObjectProperty"}var LVe=10,Kr=class e{axiosInstance;constructor(t){this.axiosInstance=V5.create({baseURL:t,headers:{Accept:"application/json",Content_Type:"application/json"}})}buildParamsForGet(t,r,n,o){return r?{...t,sort:`${r.sortField},${r.sortDir}`,...n,...this.buildOtherParams(o)}:{...t,...n,...this.buildOtherParams(o)}}buildPaginationParams(t){let r={rows:t?.size};return t?.page&&(t.size?r.start=(+t.page*+t.size).toString():r.start=(+t.page*LVe).toString()),r}buildParamsForSearch(t,r,n,o,i){let c={exact:t.exactMatch,obsoletes:t.showObsoleteTerms};return i?c.query=t.query:c.q=t.query,t.groupByIri&&(c.groupField=t.groupByIri),t.types&&(c.type=t.types),t.ontology&&(c.ontology=t.ontology),{...c,...this.buildPaginationParams(r),...n,...this.buildOtherParams(o)}}buildOtherParams(t){let r={};return t&&t.split("&").forEach(o=>{let i=o.split("=")[0],c=o.split("=")[1];r[i]=c}),r}buildParamsForEntities(t){let r={};return t&&t.split("&").forEach(o=>{let i=o.split("=")[0],c=o.split("=")[1],p=i==="ontology"?"ontologyId":i;(p==="ontologyId"||p==="type")&&(r[p]=c)}),r}buildParamsForSelect(t,r,n,o){return{...{q:t.query},...this.buildPaginationParams(r),...n,...this.buildOtherParams(o)}}buildParamsForSuggest(t,r,n,o){return{...{q:t.query},...this.buildPaginationParams(r),...n,...this.buildOtherParams(o)}}check_for_errors(t){if(t.error)throw Error(t.status+" "+t.error+" - "+t.message+" - "+t.exception+" at "+t.path);if(t.page!==void 0&&t.page.totalElements===0)throw Error("Response contains 0 elements");return t}async makeCall(t,r,n){let o=su(n)?"":"v2/",i=(await this.axiosInstance.get(o+t,r)).data;return this.check_for_errors(i)}getOntologies=async(t,r,n,o,i=!0)=>this.makeCall("ontologies",{params:this.buildParamsForGet(t,r,n,o)},i);async getOntologiesData(t,r=!0){let n,o=[],i=0,c=500;if(r){do{if(n=await this.getOntologies({size:c.toString(),page:i.toString()},void 0,void 0,t,r),!n||!n._embedded||!n._embedded.ontologies)throw new Error("Ontologies data not found");o=o.concat(n._embedded.ontologies.map(p=>pc(p))),i+=1}while(ipc(p))),i+=1}while(i{let c=su(i)?"terms":"classes";return this.makeCall(c,{params:this.buildParamsForGet(t,r,n)},su(i))};getProperties=async(t,r,n,o,i)=>this.makeCall("properties",{params:this.buildParamsForGet(t,r,n)},su(i));getIndividuals=async(t,r,n,o,i)=>this.makeCall("individuals",{params:this.buildParamsForGet(t,r,n)},su(i));getOntology=async(t,r,n,o,i)=>{let c={...this.buildOtherParams(o)};return this.makeCall("ontologies/"+n?.ontologyId,c,su(i))};getEntity=async(t,r,n,o,i)=>{let c=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",p={iri:n?.termIri,...this.buildParamsForEntities(o)};return this.makeCall(c+"entities",{params:p},su(i))};getTerm=async(t,r,n,o,i,c)=>{let p=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",m=su(i)?"terms":"classes",v={iri:n?.termIri,...this.buildOtherParams(o)};return this.makeCall(p+m,{params:v,signal:c},su(i))};getProperty=async(t,r,n,o,i,c)=>{let p=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",m={iri:n?.propertyIri,...this.buildOtherParams(o)};return this.makeCall(p+"properties",{params:m,signal:c},su(i))};getIndividual=async(t,r,n,o,i,c)=>{let p=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",m={iri:n?.individualIri,...this.buildOtherParams(o)};return this.makeCall(p+"individuals",{params:m,signal:c},su(i))};search=async(t,r,n,o,i)=>this.makeCall("search",{params:this.buildParamsForSearch(t,r,n,o),signal:i},!0);select=async(t,r,n,o)=>this.makeCall("select",{params:this.buildParamsForSelect(t,r,n,o)},!0);searchTs4nfdiGateway=async(t,r,n,o,i)=>this.makeCall("search",{params:this.buildParamsForSearch(t,r,n,o,i)},!0);async getSelectData(t,r,n,o,i){let c,p=[],m=0;if(i)if(c=await this.searchTs4nfdiGateway(t,r,n,o,i),c)p=p.concat(c.map(v=>new gU(v)));else throw new Error("Select data not found");else{if(c=await this.select(t,r,n,o),!c||!c.response.docs)throw new Error("Select data not found");p=p.concat(c.response.docs.map(v=>new vU(v)))}return new hU(p)}suggest=async(t,r,n,o)=>this.makeCall("suggest",{params:this.buildParamsForSuggest(t,r,n,o)},!0);getTermTree=async(t,r,n,o)=>{let i="ontologies/"+t?.ontologyId+"/terms";return t.termIri?(i=i+"/"+encodeURIComponent(encodeURIComponent(t?.termIri))+"/jstree",r.child?(await this.axiosInstance.get(i+"/children/"+r.child)).data:(await this.axiosInstance.get(i,{params:r})).data):(await this.axiosInstance.get(i+"/roots")).data};getTermRelations=async(t,r,n)=>{let o="ontologies/"+t?.ontologyId+"/terms";return t.termIri?(o=o+"/"+encodeURIComponent(encodeURIComponent(t?.termIri))+"/graph",(await this.axiosInstance.get(o)).data):(await this.axiosInstance.get(o+"/roots")).data};async getEntityResponse(t,r,n,o,i){let c;if(!t)throw Error("No IRI provided");return r?c=await this.getEntityWithEntityTypeProvided(t,r,n,o,i):su(i)?c=await this.getEntityWithInferredEntityType(t,n,o):c=await this.getEntity(void 0,void 0,{ontologyId:n,termIri:t},o,i),c}async getEntityObject(t,r,n,o,i){return pc(await this.getEntityResponse(t,r,n,o,i))}async getOntologyObject(t,r,n){let o=await this.getOntology(void 0,void 0,{ontologyId:t},r,n);return pc(o)}async getThingObject(t,r,n,o,i){if(r)if(qM(r)){if(n)return await this.getOntologyObject(n,o,i);throw new Error(`ontologyId has to be provided if thingType in {"${uU.join('", "')}"}.`)}else if(Cre(r)){if(t)return await this.getEntityObject(t,r,n,o,i);throw new Error(`iri has to be provided if thingType in {"${ZM.join('", "')}"}.`)}else throw new Error(`Unsupported thingType "${r}" provided. Must be in {"${jre.join('", "')}"}.`);else{if(!t&&n)return await this.getOntologyObject(n,o,i);if(t)return await this.getEntityObject(t,r,n,o,i);throw new Error("iri or ontologyId has to be provided if thingType is not provided.")}}async getEntityWithEntityTypeProvided(t,r,n,o,i){switch(r){case"term":case"class":return await this.getTerm(void 0,void 0,{ontologyId:n,termIri:t},o,i);case"property":case"annotationProperty":case"dataProperty":case"objectProperty":return await this.getProperty(void 0,void 0,{ontologyId:n,propertyIri:t},o,i);case"individual":return await this.getIndividual(void 0,void 0,{ontologyId:n,individualIri:t},o,i);default:throw Error('Invalid entity type "'+r+`". Must be one of {${ZM.map(c=>`"${c}"`).join(", ")}}.`)}}async getEntityWithInferredEntityType(t,r,n){let o=new AbortController,i=o.signal,c;function p(m){m._embedded!==void 0&&(c=m,o.abort())}if(await Promise.allSettled([this.getTerm(void 0,void 0,{ontologyId:r,termIri:t},n,!0,i).then(m=>{p(m)}),this.getProperty(void 0,void 0,{ontologyId:r,propertyIri:t},n,!0,i).then(m=>{p(m)}),this.getIndividual(void 0,void 0,{ontologyId:r,individualIri:t},n,!0,i).then(m=>{p(m)})]),c!==void 0)return c;throw Error("Iri "+t+" could not be resolved.")}async getAncestors(t,r,n,o=!1,i=!1){let c;if(gE(r)?c=await this.makeCall(`${Em(n,r,t,o)}/hierarchicalAncestors`,{params:{size:"1000",includeObsoleteEntities:i}},o):c=await this.makeCall(`${Em(n,r,t,o)}/ancestors`,{params:{size:"1000",includeObsoleteEntities:i}},o),o){let p=[],m="";switch(r){case"class":m="terms";break;case"term":m="terms";break;case"property":m="properties";break;case"individual":m="individuals";break;default:throw Error("Entity type could not be correctly inferred.")}return c._embedded[m].map(v=>{p.push(pc({_embedded:{[m]:[v]}}))}),p}return c.elements.map(p=>pc({elements:[p]}))}async getJSTree(t,r,n){return await this.makeCall(`${Em(n,r,t,!0)}/jstree`,{params:{size:"1000",viewMode:"All"}},!0)}async getChildren(t,r,n,o=!1,i=!1){let c;return gE(r)?c=await this.makeCall(`${Em(n,Bg[0],t,i)}/hierarchicalChildren`,{params:{size:"1000",includeObsoleteEntities:o}},i):Md(r)?i?c=await this.makeCall(`${Em(n,Bg[0],t,i)}/descendants`,{params:{size:"1000"}},i):c=await this.makeCall(`${Em(n,Bg[0],t,i)}/instances`,{params:{size:"1000",includeObsoleteEntities:o}},i):c=await this.makeCall(`${Em(n,r,t,i)}/children`,{params:{size:"1000",includeObsoleteEntities:o}},i),i?c._embedded[Md(r)?_l(Bg[0],i):_l(r,i)].map(p=>pc({_embedded:{[Md(r)?_l(Bg[0],i):_l(r)]:[p]}})):c.elements.map(p=>pc({elements:[p]}))}async getRootEntities(t,r,n=!1,o=!1,i=!1){return i?Md(t)?[]:(await this.makeCall(`${Em(r,t,void 0,i)}/roots`,{params:{size:"1000",includeObsoleteEntities:o}},i))._embedded[_l(t,i)].map(p=>pc({_embedded:{[_l(t,i)]:[p]}})):Md(t)?[]:(await this.makeCall(`${Em(r,t,void 0,i)}`,{params:{size:"1000",includeObsoleteEntities:o,hasDirectParents:n?void 0:"false",isPreferredRoot:n?"true":void 0}},i)).elements.map(p=>pc({elements:[p]}))}async getClassInstances(t,r){return(await this.makeCall(`${Em(r,Bg[0],t,!1)}/individuals`,{params:{size:"1000"}},!1)).elements.map(o=>pc({elements:[o]}))}async buildHierarchyWithIri(t){let{iri:r,ontologyId:n,entityType:o,preferredRoots:i=!1,includeObsoleteEntities:c=!1,keepExpansionStates:p=!0,showSiblingsOnInit:m=!1,useLegacy:v=!1}=t;if(r)return await this.getEntityObject(r,o,n,"",v).then(b=>this.buildHierarchyWithEntity({entityType:o||b.getType(),ontologyId:n||b.getOntologyId(),includeObsoleteEntities:c,preferredRoots:i,mainEntity:b,keepExpansionStates:p,showSiblingsOnInit:m,useLegacy:v}));if(o==null||n==null)throw Error("Either iri or ontologyId and entityType have to be provided.");return await this.buildRootHierarchy({entityType:o,ontologyId:n,includeObsoleteEntities:c,preferredRoots:i,keepExpansionStates:p,showSiblingsOnInit:m,useLegacy:v})}jsTreeNodeToEntityData(t){return{iri:t.iri,label:t.text,hasChildren:t.children||t.state.opened,parents:[]}}entityToEntityData(t){return{iri:t.getIri(),label:gt(t.getLabel())[0],definedBy:t.getDefinedBy(),hasChildren:t.hasChildren(),numDescendants:t.getNumHierarchicalDescendants()||t.getNumDescendants(),parents:t.getParents()}}async buildRootHierarchy(t){let{ontologyId:r,entityType:n,preferredRoots:o,includeObsoleteEntities:i,useLegacy:c}=t,p=(await this.getRootEntities(n,r,o,i,c)).map(b=>this.entityToEntityData(b)).filter(b=>!yU(b.iri)),m=new Map,v=new Map;for(let b of p)m.set(b.iri,[]),v.set(b.iri,b);return new km({parentChildRelations:m,entitiesData:v,allChildrenPresent:new Set,roots:p.map(b=>new Pm(b)).sort((b,_)=>(b.entityData.label||b.entityData.iri).localeCompare(_.entityData.label||_.entityData.iri)),api:new e(this.axiosInstance.getUri()),ontologyId:r,includeObsoleteEntities:i,entityType:n,keepExpansionStates:t.keepExpansionStates,useLegacy:c})}async buildHierarchyWithEntity(t){let{mainEntity:r,ontologyId:n,entityType:o,preferredRoots:i,includeObsoleteEntities:c,showSiblingsOnInit:p,useLegacy:m}=t,v=[];if(m){let D=await this.getJSTree(r.getIri(),o,n),L=new Map,H=new Map;for(let Q of D)L.set(Q.id,Q.iri),H.set(Q.iri,new Set);for(let Q of D){let re=H.get(Q.iri),ee=L.get(Q.parent);re!=null&&ee!=null&&re.add(ee)}v=[];let q=new Set;for(let Q of D)if(!q.has(Q.iri)){q.add(Q.iri),v.push(this.jsTreeNodeToEntityData(Q));let re=H.get(Q.iri);re!=null&&(v[v.length-1].parents=Ct.fromJson(Array.from(re.values()))||[])}}else{let D=await this.getAncestors(r.getIri(),o,n||r.getOntologyId(),c);v=[this.entityToEntityData(r),...D.map(L=>this.entityToEntityData(L))]}v=v.filter(D=>!yU(D.iri));let b=new Map,_=new Set,I=new Map;for(let D of v)b.set(D.iri,[]),I.set(D.iri,D);if(p){let D=o||r.getType(),L=D=="individual"?"class":D,H=[];for(let q of v)q.iri!=r.getIri()&&H.push(new Promise(Q=>this.getChildren(q.iri,L,n,c,m).then(re=>re.map(ee=>this.entityToEntityData(ee))).then(re=>{let ee=[];for(let ne of re)if(I.set(ne.iri,ne),ne.parents){let fe=ne.parents.filter(ce=>ce.value==q.iri);ee.push({childIri:ne.iri,childRelationToParent:fe.length>0&&fe[0].getMetadata()?fe[0].getMetadata().childRelationToParent:void 0})}b.set(q.iri,ee),_.add(q.iri)}).then(Q)));if(await Promise.allSettled(H),D=="individual")for(let q of r.getParents()){let Q=(await this.getChildren(q.value,D,n,c)).map(ee=>this.entityToEntityData(ee)),re=[];for(let ee of Q)re.push({childIri:ee.iri,childRelationToParent:"http://www.w3.org/1999/02/22-rdf-syntax-ns#type"});b.set(q.value,re)}}else for(let D of v)if(D.parents){let L=D.parents.filter(H=>!yU(H.value));if(D.iri==r?.getIri()&&Md(o||r.getType()))for(let H of L)b.has(H.value)&&b.get(H.value)?.push({childIri:D.iri,childRelationToParent:"http://www.w3.org/1999/02/22-rdf-syntax-ns#type"});else for(let H of L)b.has(H.value)&&b.get(H.value)?.push({childIri:D.iri,childRelationToParent:H.getMetadata()?H.getMetadata().childRelationToParent:void 0})}for(let D of b.values())D.sort((L,H)=>(I.get(L.childIri)?.label||L.childIri).localeCompare(I.get(H.childIri)?.label||H.childIri));let R=[];if(i){let D=(await this.getOntologyObject(n,void 0,m)).getPreferredRoots();for(let L of D)I.has(L)&&R.push(L)}else for(let D of v)D.parents&&D.parents.filter(H=>!yU(H.value)).length==0&&R.push(D.iri);function A(D,L,H){L.add(D.iri);let q=new Pm(D);q.childRelationToParent=H;let Q=b.get(D.iri)||[];for(let re of Q){if(L.has(re.childIri)){console.error(`Cyclic tree at entity "${re.childIri}".`);continue}let ee=I.get(re.childIri);ee!=null&&q.addChild(A(ee,L,re.childRelationToParent))}return q.loadedChildren.length>0&&(q.expanded=!0),L.delete(D.iri),q}let F=new Set;return new km({parentChildRelations:b,entitiesData:I,allChildrenPresent:_,roots:R.map(D=>A(I.get(D),F)).sort((D,L)=>(D.entityData.label||D.entityData.iri).localeCompare(L.entityData.label||L.entityData.iri)),api:new e(this.axiosInstance.getUri()),ontologyId:n,includeObsoleteEntities:c,entityType:o,mainEntityIri:r?.getIri(),keepExpansionStates:t.keepExpansionStates,useLegacy:m})}async loadHierarchyChildren(t){if(t.entityType==null)throw Error("EntityType has to be provided to load children in OLS.");return(await this.getChildren(t.nodeToExpand.entityData.iri,t.entityType,t.ontologyId,t.includeObsoleteEntities,t.useLegacy)).map(r=>this.entityToEntityData(r))}};var Tx=k(z()),m9=k(ot());var B8e=k(z()),mJ=k(ot()),z8e=k(Mt());var dn={};X(dn,{ALT:()=>qVe,ARROW_DOWN:()=>XVe,ARROW_LEFT:()=>YVe,ARROW_RIGHT:()=>QVe,ARROW_UP:()=>KVe,BACKSPACE:()=>$Ve,CTRL:()=>GVe,END:()=>r$e,ENTER:()=>zVe,ESCAPE:()=>HVe,F2:()=>ZVe,HOME:()=>n$e,META:()=>JVe,PAGE_DOWN:()=>t$e,PAGE_UP:()=>e$e,SHIFT:()=>UVe,SPACE:()=>WVe,TAB:()=>VVe,keys:()=>o$e});var zVe="Enter",WVe=" ",HVe="Escape",VVe="Tab",$Ve="Backspace",ZVe="F2",qVe="Alt",UVe="Shift",GVe="Control",JVe="Meta",XVe="ArrowDown",KVe="ArrowUp",YVe="ArrowLeft",QVe="ArrowRight",e$e="PageUp",t$e="PageDown",r$e="End",n$e="Home",o$e=function(e){return e.ENTER="Enter",e.SPACE=" ",e.ESCAPE="Escape",e.TAB="Tab",e.BACKSPACE="Backspace",e.F2="F2",e.ALT="Alt",e.SHIFT="Shift",e.CTRL="Control",e.META="Meta",e.ARROW_DOWN="ArrowDown",e.ARROW_UP="ArrowUp",e.ARROW_LEFT="ArrowLeft",e.ARROW_RIGHT="ArrowRight",e.PAGE_UP="PageUp",e.PAGE_DOWN="PageDown",e.END="End",e.HOME="Home",e}({});var OE=k(z());var wU,i$e=new Uint8Array(16);function Are(){if(!wU&&(wU=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!wU))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return wU(i$e)}var p3e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function a$e(e){return typeof e=="string"&&p3e.test(e)}var d3e=a$e;var $s=[];for(OU=0;OU<256;++OU)$s.push((OU+256).toString(16).substr(1));var OU;function s$e(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=($s[e[t+0]]+$s[e[t+1]]+$s[e[t+2]]+$s[e[t+3]]+"-"+$s[e[t+4]]+$s[e[t+5]]+"-"+$s[e[t+6]]+$s[e[t+7]]+"-"+$s[e[t+8]]+$s[e[t+9]]+"-"+$s[e[t+10]]+$s[e[t+11]]+$s[e[t+12]]+$s[e[t+13]]+$s[e[t+14]]+$s[e[t+15]]).toLowerCase();if(!d3e(r))throw TypeError("Stringified UUID is invalid");return r}var f3e=s$e;var m3e,Dre,Rre=0,Nre=0;function l$e(e,t,r){var n=t&&r||0,o=t||new Array(16);e=e||{};var i=e.node||m3e,c=e.clockseq!==void 0?e.clockseq:Dre;if(i==null||c==null){var p=e.random||(e.rng||Are)();i==null&&(i=m3e=[p[0]|1,p[1],p[2],p[3],p[4],p[5]]),c==null&&(c=Dre=(p[6]<<8|p[7])&16383)}var m=e.msecs!==void 0?e.msecs:Date.now(),v=e.nsecs!==void 0?e.nsecs:Nre+1,b=m-Rre+(v-Nre)/1e4;if(b<0&&e.clockseq===void 0&&(c=c+1&16383),(b<0||m>Rre)&&e.nsecs===void 0&&(v=0),v>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");Rre=m,Nre=v,Dre=c,m+=122192928e5;var _=((m&268435455)*1e4+v)%4294967296;o[n++]=_>>>24&255,o[n++]=_>>>16&255,o[n++]=_>>>8&255,o[n++]=_&255;var I=m/4294967296*1e4&268435455;o[n++]=I>>>8&255,o[n++]=I&255,o[n++]=I>>>24&15|16,o[n++]=I>>>16&255,o[n++]=c>>>8|128,o[n++]=c&255;for(var R=0;R<6;++R)o[n+R]=i[R];return t||f3e(o)}var xU=l$e;function hn(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",t=xU();return function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",n="".concat(e).concat(e!==""?"_":"i"),o=r?"_".concat(r):"";return"".concat(n).concat(o?t:xU()).concat(o)}}var u$e=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=t.prefix,n=t.suffix,o=t.conditionalId;return(0,OE.useMemo)(function(){return o||hn(r)(n)},[o,r,n])},c$e=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=t.prefix,n=r===void 0?"":r,o=t.suffix,i=o===void 0?"":o,c=t.conditionalId,p=OE.default.useId();return(0,OE.useMemo)(function(){return c||"".concat(n).concat(p).concat(i)},[p,c,n,i])},jm="useId"in OE.default?c$e:u$e;var dc="left",Lre="right";var X0=k(z());function Sl(e){return Object.keys(e)}var r3=k(z());var CE=k(z());var Dd={light:"LIGHT",dark:"DARK"},h3e="INVERSE";function v3e(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),r.push.apply(r,n)}return r}function Fre(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r1&&arguments[1]!==void 0?arguments[1]:[];g$e(this,e),this.computer=t,this.dependencies=r}return y$e(e,[{key:"getValue",value:function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;if(!this.dependencies.length)return this.computer(o);if(!Array.isArray(this.dependencies)){var c,p;return this.computer((c=(p=Hg(o,this.dependencies))!==null&&p!==void 0?p:Hg(n,this.dependencies,i))!==null&&c!==void 0?c:Hg(r,this.dependencies,i))}return this.computer(this.dependencies.map(function(m){var v,b;return(v=(b=Hg(o,m))!==null&&b!==void 0?b:Hg(n,m,i))!==null&&v!==void 0?v:Hg(r,m,i)}))}}])}();function Yr(e,t){return new oA(e,t)}var iA=function(t,r,n){var o={themeName:t.key};function i(c,p){var m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,v=arguments.length>3?arguments[3]:void 0;Object.keys(c).forEach(function(b){var _=v?"".concat(v,".").concat(b):"".concat(b);if([].concat(d$e(Object.values(Dd)),[n]).includes(b)){if(b!==n)return;var I=new RegExp("(\\.".concat(n,"\\b)|(\\b").concat(n,"\\.)"));_=_.replace(I,"")}var R=m&&Hg(o,_);if(!R||yx(R)){var A=c[b]instanceof oA?c[b].getValue(c.root,p.root,o,n):c[b],F=p[b]instanceof oA?p[b].getValue(c.root,p.root,o,n):p[b];yx(A)&&!Array.isArray(A)?i(A,F??{},m,_):O$e(o,_,F??A)}})}return i(t,r),i(r,{},!0),o},aA=function(t,r){var n={getPrototypeOf:function(c){return Reflect.getPrototypeOf(c.model)},setPrototypeOf:function(c,p){return Reflect.setPrototypeOf(c.model,p)},isExtensible:function(c){return Reflect.isExtensible(c)},preventExtensions:function(c){return Reflect.preventExtensions(c.model)},getOwnPropertyDescriptor:function(c,p){return Reflect.getOwnPropertyDescriptor(c.model,p)},defineProperty:function(c,p,m){return Reflect.defineProperty(c.model,p,m)},has:function(c,p){return Reflect.has(c.model,p)},get:function(c,p){if(p==="key")return c[p];if(p==="__proto__")return{};var m=p==="root"?c:c.model||c,v=m[p];return yx(v)&&!Array.isArray(v)?new Proxy({model:v,root:c.root,key:"_".concat(c.key)},n):v},set:function(c){return c},deleteProperty:function(c){return c},ownKeys:function(c){return Reflect.ownKeys(c.model)},apply:function(c){return c},construct:function(c){return c}},o=new Proxy({model:t,root:t,key:r},n);return o},Wre=function e(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=Fre({},t);return!yx(n)||!yx(r)?r:(Object.keys(r).forEach(function(o){var i=n[o],c=r[o];yx(i)&&yx(c)?n[o]=e(Fre({},i),Fre({},c)):n[o]=c}),n)};function x$e(e,t){return E$e(e)||I$e(e,t)||S$e(e,t)||_$e()}function _$e(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function S$e(e,t){if(e){if(typeof e=="string")return b3e(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?b3e(e,t):void 0}}function b3e(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);re.length)&&(t=e.length);for(var r=0,n=Array(t);rSE(IE(t,e),r);var bx=e=>{e._clipped=!1,e._unclipped=e.slice(0);for(let t=0;t<=3;t++)t<3?((e[t]<0||e[t]>255)&&(e._clipped=!0),e[t]=U0(e[t],0,255)):t===3&&(e[t]=U0(e[t],0,1));return e};var O3e={};for(let e of["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"])O3e[`[object ${e}]`]=e.toLowerCase();function Jt(e){return O3e[Object.prototype.toString.call(e)]||"object"}var At=(e,t=null)=>e.length>=3?Array.prototype.slice.call(e):Jt(e[0])=="object"&&t?t.split("").filter(r=>e[0][r]!==void 0).map(r=>e[0][r]):e[0];var Vg=e=>{if(e.length<2)return null;let t=e.length-1;return Jt(e[t])=="string"?e[t].toLowerCase():null};var{PI:IU,min:SE,max:IE}=Math,Rd=IU*2,EU=IU/3,x3e=IU/180,_3e=180/IU;var Qt={format:{},autodetect:[]};var Vre=class{constructor(...t){let r=this;if(Jt(t[0])==="object"&&t[0].constructor&&t[0].constructor===this.constructor)return t[0];let n=Vg(t),o=!1;if(!n){o=!0,Qt.sorted||(Qt.autodetect=Qt.autodetect.sort((i,c)=>c.p-i.p),Qt.sorted=!0);for(let i of Qt.autodetect)if(n=i.test(...t),n)break}if(Qt.format[n]){let i=Qt.format[n].apply(null,o?t:t.slice(0,-1));r._rgb=bx(i)}else throw new Error("unknown format: "+t);r._rgb.length===3&&r._rgb.push(1)}toString(){return Jt(this.hex)=="function"?this.hex():`[${this._rgb.join(",")}]`}},qe=Vre;var S3e="2.6.0";var PU=(...e)=>new PU.Color(...e);PU.Color=qe;PU.version=S3e;var ur=PU;var M$e=(...e)=>{e=At(e,"cmyk");let[t,r,n,o]=e,i=e.length>4?e[4]:1;return o===1?[0,0,0,i]:[t>=1?0:255*(1-t)*(1-o),r>=1?0:255*(1-r)*(1-o),n>=1?0:255*(1-n)*(1-o),i]},I3e=M$e;var{max:E3e}=Math,A$e=(...e)=>{let[t,r,n]=At(e,"rgb");t=t/255,r=r/255,n=n/255;let o=1-E3e(t,E3e(r,n)),i=o<1?1/(1-o):0,c=(1-t-o)*i,p=(1-r-o)*i,m=(1-n-o)*i;return[c,p,m,o]},P3e=A$e;qe.prototype.cmyk=function(){return P3e(this._rgb)};ur.cmyk=(...e)=>new qe(...e,"cmyk");Qt.format.cmyk=I3e;Qt.autodetect.push({p:2,test:(...e)=>{if(e=At(e,"cmyk"),Jt(e)==="array"&&e.length===4)return"cmyk"}});var $re=e=>Math.round(e*100)/100,D$e=(...e)=>{let t=At(e,"hsla"),r=Vg(e)||"lsa";return t[0]=$re(t[0]||0),t[1]=$re(t[1]*100)+"%",t[2]=$re(t[2]*100)+"%",r==="hsla"||t.length>3&&t[3]<1?(t[3]=t.length>3?t[3]:1,r="hsla"):t.length=3,`${r}(${t.join(",")})`},k3e=D$e;var R$e=(...e)=>{e=At(e,"rgba");let[t,r,n]=e;t/=255,r/=255,n/=255;let o=SE(t,r,n),i=IE(t,r,n),c=(i+o)/2,p,m;return i===o?(p=0,m=Number.NaN):p=c<.5?(i-o)/(i+o):(i-o)/(2-i-o),t==i?m=(r-n)/(i-o):r==i?m=2+(n-t)/(i-o):n==i&&(m=4+(t-r)/(i-o)),m*=60,m<0&&(m+=360),e.length>3&&e[3]!==void 0?[m,p,c,e[3]]:[m,p,c]},kU=R$e;var{round:Zre}=Math,N$e=(...e)=>{let t=At(e,"rgba"),r=Vg(e)||"rgb";return r.substr(0,3)=="hsl"?k3e(kU(t),r):(t[0]=Zre(t[0]),t[1]=Zre(t[1]),t[2]=Zre(t[2]),(r==="rgba"||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,r="rgba"),`${r}(${t.slice(0,r==="rgb"?3:4).join(",")})`)},j3e=N$e;var{round:qre}=Math,L$e=(...e)=>{e=At(e,"hsl");let[t,r,n]=e,o,i,c;if(r===0)o=i=c=n*255;else{let p=[0,0,0],m=[0,0,0],v=n<.5?n*(1+r):n+r-n*r,b=2*n-v,_=t/360;p[0]=_+1/3,p[1]=_,p[2]=_-1/3;for(let I=0;I<3;I++)p[I]<0&&(p[I]+=1),p[I]>1&&(p[I]-=1),6*p[I]<1?m[I]=b+(v-b)*6*p[I]:2*p[I]<1?m[I]=v:3*p[I]<2?m[I]=b+(v-b)*(2/3-p[I])*6:m[I]=b;[o,i,c]=[qre(m[0]*255),qre(m[1]*255),qre(m[2]*255)]}return e.length>3?[o,i,c,e[3]]:[o,i,c,1]},sA=L$e;var C3e=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,M3e=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,A3e=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,D3e=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,R3e=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,N3e=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,{round:T3e}=Math,L3e=e=>{e=e.toLowerCase().trim();let t;if(Qt.format.named)try{return Qt.format.named(e)}catch{}if(t=e.match(C3e)){let r=t.slice(1,4);for(let n=0;n<3;n++)r[n]=+r[n];return r[3]=1,r}if(t=e.match(M3e)){let r=t.slice(1,5);for(let n=0;n<4;n++)r[n]=+r[n];return r}if(t=e.match(A3e)){let r=t.slice(1,4);for(let n=0;n<3;n++)r[n]=T3e(r[n]*2.55);return r[3]=1,r}if(t=e.match(D3e)){let r=t.slice(1,5);for(let n=0;n<3;n++)r[n]=T3e(r[n]*2.55);return r[3]=+r[3],r}if(t=e.match(R3e)){let r=t.slice(1,4);r[1]*=.01,r[2]*=.01;let n=sA(r);return n[3]=1,n}if(t=e.match(N3e)){let r=t.slice(1,4);r[1]*=.01,r[2]*=.01;let n=sA(r);return n[3]=+t[4],n}};L3e.test=e=>C3e.test(e)||M3e.test(e)||A3e.test(e)||D3e.test(e)||R3e.test(e)||N3e.test(e);var Ure=L3e;qe.prototype.css=function(e){return j3e(this._rgb,e)};ur.css=(...e)=>new qe(...e,"css");Qt.format.css=Ure;Qt.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&Jt(e)==="string"&&Ure.test(e))return"css"}});Qt.format.gl=(...e)=>{let t=At(e,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t};ur.gl=(...e)=>new qe(...e,"gl");qe.prototype.gl=function(){let e=this._rgb;return[e[0]/255,e[1]/255,e[2]/255,e[3]]};var{floor:F$e}=Math,B$e=(...e)=>{e=At(e,"hcg");let[t,r,n]=e,o,i,c;n=n*255;let p=r*255;if(r===0)o=i=c=n;else{t===360&&(t=0),t>360&&(t-=360),t<0&&(t+=360),t/=60;let m=F$e(t),v=t-m,b=n*(1-r),_=b+p*(1-v),I=b+p*v,R=b+p;switch(m){case 0:[o,i,c]=[R,I,b];break;case 1:[o,i,c]=[_,R,b];break;case 2:[o,i,c]=[b,R,I];break;case 3:[o,i,c]=[b,_,R];break;case 4:[o,i,c]=[I,b,R];break;case 5:[o,i,c]=[R,b,_];break}}return[o,i,c,e.length>3?e[3]:1]},F3e=B$e;var z$e=(...e)=>{let[t,r,n]=At(e,"rgb"),o=SE(t,r,n),i=IE(t,r,n),c=i-o,p=c*100/255,m=o/(255-c)*100,v;return c===0?v=Number.NaN:(t===i&&(v=(r-n)/c),r===i&&(v=2+(n-t)/c),n===i&&(v=4+(t-r)/c),v*=60,v<0&&(v+=360)),[v,p,m]},B3e=z$e;qe.prototype.hcg=function(){return B3e(this._rgb)};ur.hcg=(...e)=>new qe(...e,"hcg");Qt.format.hcg=F3e;Qt.autodetect.push({p:1,test:(...e)=>{if(e=At(e,"hcg"),Jt(e)==="array"&&e.length===3)return"hcg"}});var W$e=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,H$e=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,V$e=e=>{if(e.match(W$e)){(e.length===4||e.length===7)&&(e=e.substr(1)),e.length===3&&(e=e.split(""),e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]);let t=parseInt(e,16),r=t>>16,n=t>>8&255,o=t&255;return[r,n,o,1]}if(e.match(H$e)){(e.length===5||e.length===9)&&(e=e.substr(1)),e.length===4&&(e=e.split(""),e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]);let t=parseInt(e,16),r=t>>24&255,n=t>>16&255,o=t>>8&255,i=Math.round((t&255)/255*100)/100;return[r,n,o,i]}throw new Error(`unknown hex color: ${e}`)},jU=V$e;var{round:TU}=Math,$$e=(...e)=>{let[t,r,n,o]=At(e,"rgba"),i=Vg(e)||"auto";o===void 0&&(o=1),i==="auto"&&(i=o<1?"rgba":"rgb"),t=TU(t),r=TU(r),n=TU(n);let p="000000"+(t<<16|r<<8|n).toString(16);p=p.substr(p.length-6);let m="0"+TU(o*255).toString(16);switch(m=m.substr(m.length-2),i.toLowerCase()){case"rgba":return`#${p}${m}`;case"argb":return`#${m}${p}`;default:return`#${p}`}},CU=$$e;qe.prototype.hex=function(e){return CU(this._rgb,e)};ur.hex=(...e)=>new qe(...e,"hex");Qt.format.hex=jU;Qt.autodetect.push({p:4,test:(e,...t)=>{if(!t.length&&Jt(e)==="string"&&[3,4,5,6,7,8,9].indexOf(e.length)>=0)return"hex"}});var{cos:EE}=Math,Z$e=(...e)=>{e=At(e,"hsi");let[t,r,n]=e,o,i,c;return isNaN(t)&&(t=0),isNaN(r)&&(r=0),t>360&&(t-=360),t<0&&(t+=360),t/=360,t<1/3?(c=(1-r)/3,o=(1+r*EE(Rd*t)/EE(EU-Rd*t))/3,i=1-(c+o)):t<2/3?(t-=1/3,o=(1-r)/3,i=(1+r*EE(Rd*t)/EE(EU-Rd*t))/3,c=1-(o+i)):(t-=2/3,i=(1-r)/3,c=(1+r*EE(Rd*t)/EE(EU-Rd*t))/3,o=1-(i+c)),o=U0(n*o*3),i=U0(n*i*3),c=U0(n*c*3),[o*255,i*255,c*255,e.length>3?e[3]:1]},z3e=Z$e;var{min:q$e,sqrt:U$e,acos:G$e}=Math,J$e=(...e)=>{let[t,r,n]=At(e,"rgb");t/=255,r/=255,n/=255;let o,i=q$e(t,r,n),c=(t+r+n)/3,p=c>0?1-i/c:0;return p===0?o=NaN:(o=(t-r+(t-n))/2,o/=U$e((t-r)*(t-r)+(t-n)*(r-n)),o=G$e(o),n>r&&(o=Rd-o),o/=Rd),[o*360,p,c]},W3e=J$e;qe.prototype.hsi=function(){return W3e(this._rgb)};ur.hsi=(...e)=>new qe(...e,"hsi");Qt.format.hsi=z3e;Qt.autodetect.push({p:2,test:(...e)=>{if(e=At(e,"hsi"),Jt(e)==="array"&&e.length===3)return"hsi"}});qe.prototype.hsl=function(){return kU(this._rgb)};ur.hsl=(...e)=>new qe(...e,"hsl");Qt.format.hsl=sA;Qt.autodetect.push({p:2,test:(...e)=>{if(e=At(e,"hsl"),Jt(e)==="array"&&e.length===3)return"hsl"}});var{floor:X$e}=Math,K$e=(...e)=>{e=At(e,"hsv");let[t,r,n]=e,o,i,c;if(n*=255,r===0)o=i=c=n;else{t===360&&(t=0),t>360&&(t-=360),t<0&&(t+=360),t/=60;let p=X$e(t),m=t-p,v=n*(1-r),b=n*(1-r*m),_=n*(1-r*(1-m));switch(p){case 0:[o,i,c]=[n,_,v];break;case 1:[o,i,c]=[b,n,v];break;case 2:[o,i,c]=[v,n,_];break;case 3:[o,i,c]=[v,b,n];break;case 4:[o,i,c]=[_,v,n];break;case 5:[o,i,c]=[n,v,b];break}}return[o,i,c,e.length>3?e[3]:1]},H3e=K$e;var{min:Y$e,max:Q$e}=Math,eZe=(...e)=>{e=At(e,"rgb");let[t,r,n]=e,o=Y$e(t,r,n),i=Q$e(t,r,n),c=i-o,p,m,v;return v=i/255,i===0?(p=Number.NaN,m=0):(m=c/i,t===i&&(p=(r-n)/c),r===i&&(p=2+(n-t)/c),n===i&&(p=4+(t-r)/c),p*=60,p<0&&(p+=360)),[p,m,v]},V3e=eZe;qe.prototype.hsv=function(){return V3e(this._rgb)};ur.hsv=(...e)=>new qe(...e,"hsv");Qt.format.hsv=H3e;Qt.autodetect.push({p:2,test:(...e)=>{if(e=At(e,"hsv"),Jt(e)==="array"&&e.length===3)return"hsv"}});var us={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452};var{pow:tZe}=Math,rZe=(...e)=>{e=At(e,"lab");let[t,r,n]=e,o,i,c,p,m,v;return i=(t+16)/116,o=isNaN(r)?i:i+r/500,c=isNaN(n)?i:i-n/200,i=us.Yn*Jre(i),o=us.Xn*Jre(o),c=us.Zn*Jre(c),p=Gre(3.2404542*o-1.5371385*i-.4985314*c),m=Gre(-.969266*o+1.8760108*i+.041556*c),v=Gre(.0556434*o-.2040259*i+1.0572252*c),[p,m,v,e.length>3?e[3]:1]},Gre=e=>255*(e<=.00304?12.92*e:1.055*tZe(e,1/2.4)-.055),Jre=e=>e>us.t1?e*e*e:us.t2*(e-us.t0),MU=rZe;var{pow:$3e}=Math,nZe=(...e)=>{let[t,r,n]=At(e,"rgb"),[o,i,c]=oZe(t,r,n),p=116*i-16;return[p<0?0:p,500*(o-i),200*(i-c)]},Xre=e=>(e/=255)<=.04045?e/12.92:$3e((e+.055)/1.055,2.4),Kre=e=>e>us.t3?$3e(e,1/3):e/us.t2+us.t0,oZe=(e,t,r)=>{e=Xre(e),t=Xre(t),r=Xre(r);let n=Kre((.4124564*e+.3575761*t+.1804375*r)/us.Xn),o=Kre((.2126729*e+.7151522*t+.072175*r)/us.Yn),i=Kre((.0193339*e+.119192*t+.9503041*r)/us.Zn);return[n,o,i]},AU=nZe;qe.prototype.lab=function(){return AU(this._rgb)};ur.lab=(...e)=>new qe(...e,"lab");Qt.format.lab=MU;Qt.autodetect.push({p:2,test:(...e)=>{if(e=At(e,"lab"),Jt(e)==="array"&&e.length===3)return"lab"}});var{sin:iZe,cos:aZe}=Math,sZe=(...e)=>{let[t,r,n]=At(e,"lch");return isNaN(n)&&(n=0),n=n*x3e,[t,aZe(n)*r,iZe(n)*r]},DU=sZe;var lZe=(...e)=>{e=At(e,"lch");let[t,r,n]=e,[o,i,c]=DU(t,r,n),[p,m,v]=MU(o,i,c);return[p,m,v,e.length>3?e[3]:1]},RU=lZe;var uZe=(...e)=>{let t=At(e,"hcl").reverse();return RU(...t)},Z3e=uZe;var{sqrt:cZe,atan2:pZe,round:dZe}=Math,fZe=(...e)=>{let[t,r,n]=At(e,"lab"),o=cZe(r*r+n*n),i=(pZe(n,r)*_3e+360)%360;return dZe(o*1e4)===0&&(i=Number.NaN),[t,o,i]},NU=fZe;var mZe=(...e)=>{let[t,r,n]=At(e,"rgb"),[o,i,c]=AU(t,r,n);return NU(o,i,c)},Yre=mZe;qe.prototype.lch=function(){return Yre(this._rgb)};qe.prototype.hcl=function(){return Yre(this._rgb).reverse()};ur.lch=(...e)=>new qe(...e,"lch");ur.hcl=(...e)=>new qe(...e,"hcl");Qt.format.lch=RU;Qt.format.hcl=Z3e;["lch","hcl"].forEach(e=>Qt.autodetect.push({p:2,test:(...t)=>{if(t=At(t,e),Jt(t)==="array"&&t.length===3)return e}}));var hZe={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},q5=hZe;qe.prototype.name=function(){let e=CU(this._rgb,"rgb");for(let t of Object.keys(q5))if(q5[t]===e)return t.toLowerCase();return e};Qt.format.named=e=>{if(e=e.toLowerCase(),q5[e])return jU(q5[e]);throw new Error("unknown color name: "+e)};Qt.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&Jt(e)==="string"&&q5[e.toLowerCase()])return"named"}});var vZe=e=>{if(Jt(e)=="number"&&e>=0&&e<=16777215){let t=e>>16,r=e>>8&255,n=e&255;return[t,r,n,1]}throw new Error("unknown num color: "+e)},q3e=vZe;var gZe=(...e)=>{let[t,r,n]=At(e,"rgb");return(t<<16)+(r<<8)+n},U3e=gZe;qe.prototype.num=function(){return U3e(this._rgb)};ur.num=(...e)=>new qe(...e,"num");Qt.format.num=q3e;Qt.autodetect.push({p:5,test:(...e)=>{if(e.length===1&&Jt(e[0])==="number"&&e[0]>=0&&e[0]<=16777215)return"num"}});var{round:G3e}=Math;qe.prototype.rgb=function(e=!0){return e===!1?this._rgb.slice(0,3):this._rgb.slice(0,3).map(G3e)};qe.prototype.rgba=function(e=!0){return this._rgb.slice(0,4).map((t,r)=>r<3?e===!1?t:G3e(t):t)};ur.rgb=(...e)=>new qe(...e,"rgb");Qt.format.rgb=(...e)=>{let t=At(e,"rgba");return t[3]===void 0&&(t[3]=1),t};Qt.autodetect.push({p:3,test:(...e)=>{if(e=At(e,"rgba"),Jt(e)==="array"&&(e.length===3||e.length===4&&Jt(e[3])=="number"&&e[3]>=0&&e[3]<=1))return"rgb"}});var{log:LU}=Math,yZe=e=>{let t=e/100,r,n,o;return t<66?(r=255,n=t<6?0:-155.25485562709179-.44596950469579133*(n=t-2)+104.49216199393888*LU(n),o=t<20?0:-254.76935184120902+.8274096064007395*(o=t-10)+115.67994401066147*LU(o)):(r=351.97690566805693+.114206453784165*(r=t-55)-40.25366309332127*LU(r),n=325.4494125711974+.07943456536662342*(n=t-50)-28.0852963507957*LU(n),o=255),[r,n,o,1]},FU=yZe;var{round:bZe}=Math,wZe=(...e)=>{let t=At(e,"rgb"),r=t[0],n=t[2],o=1e3,i=4e4,c=.4,p;for(;i-o>c;){p=(i+o)*.5;let m=FU(p);m[2]/m[0]>=n/r?i=p:o=p}return bZe(p)},J3e=wZe;qe.prototype.temp=qe.prototype.kelvin=qe.prototype.temperature=function(){return J3e(this._rgb)};ur.temp=ur.kelvin=ur.temperature=(...e)=>new qe(...e,"temp");Qt.format.temp=Qt.format.kelvin=Qt.format.temperature=FU;var{pow:BU,sign:OZe}=Math,xZe=(...e)=>{e=At(e,"lab");let[t,r,n]=e,o=BU(t+.3963377774*r+.2158037573*n,3),i=BU(t-.1055613458*r-.0638541728*n,3),c=BU(t-.0894841775*r-1.291485548*n,3);return[255*Qre(4.0767416621*o-3.3077115913*i+.2309699292*c),255*Qre(-1.2684380046*o+2.6097574011*i-.3413193965*c),255*Qre(-.0041960863*o-.7034186147*i+1.707614701*c),e.length>3?e[3]:1]},zU=xZe;function Qre(e){let t=Math.abs(e);return t>.0031308?(OZe(e)||1)*(1.055*BU(t,1/2.4)-.055):e*12.92}var{cbrt:ene,pow:_Ze,sign:SZe}=Math,IZe=(...e)=>{let[t,r,n]=At(e,"rgb"),[o,i,c]=[tne(t/255),tne(r/255),tne(n/255)],p=ene(.4122214708*o+.5363325363*i+.0514459929*c),m=ene(.2119034982*o+.6806995451*i+.1073969566*c),v=ene(.0883024619*o+.2817188376*i+.6299787005*c);return[.2104542553*p+.793617785*m-.0040720468*v,1.9779984951*p-2.428592205*m+.4505937099*v,.0259040371*p+.7827717662*m-.808675766*v]},WU=IZe;function tne(e){let t=Math.abs(e);return t<.04045?e/12.92:(SZe(e)||1)*_Ze((t+.055)/1.055,2.4)}qe.prototype.oklab=function(){return WU(this._rgb)};ur.oklab=(...e)=>new qe(...e,"oklab");Qt.format.oklab=zU;Qt.autodetect.push({p:3,test:(...e)=>{if(e=At(e,"oklab"),Jt(e)==="array"&&e.length===3)return"oklab"}});var EZe=(...e)=>{e=At(e,"lch");let[t,r,n]=e,[o,i,c]=DU(t,r,n),[p,m,v]=zU(o,i,c);return[p,m,v,e.length>3?e[3]:1]},X3e=EZe;var PZe=(...e)=>{let[t,r,n]=At(e,"rgb"),[o,i,c]=WU(t,r,n);return NU(o,i,c)},K3e=PZe;qe.prototype.oklch=function(){return K3e(this._rgb)};ur.oklch=(...e)=>new qe(...e,"oklch");Qt.format.oklch=X3e;Qt.autodetect.push({p:3,test:(...e)=>{if(e=At(e,"oklch"),Jt(e)==="array"&&e.length===3)return"oklch"}});qe.prototype.alpha=function(e,t=!1){return e!==void 0&&Jt(e)==="number"?t?(this._rgb[3]=e,this):new qe([this._rgb[0],this._rgb[1],this._rgb[2],e],"rgb"):this._rgb[3]};qe.prototype.clipped=function(){return this._rgb._clipped||!1};qe.prototype.darken=function(e=1){let t=this,r=t.lab();return r[0]-=us.Kn*e,new qe(r,"lab").alpha(t.alpha(),!0)};qe.prototype.brighten=function(e=1){return this.darken(-e)};qe.prototype.darker=qe.prototype.darken;qe.prototype.brighter=qe.prototype.brighten;qe.prototype.get=function(e){let[t,r]=e.split("."),n=this[t]();if(r){let o=t.indexOf(r)-(t.substr(0,2)==="ok"?2:0);if(o>-1)return n[o];throw new Error(`unknown channel ${r} in mode ${t}`)}else return n};var{pow:kZe}=Math,jZe=1e-7,TZe=20;qe.prototype.luminance=function(e,t="rgb"){if(e!==void 0&&Jt(e)==="number"){if(e===0)return new qe([0,0,0,this._rgb[3]],"rgb");if(e===1)return new qe([255,255,255,this._rgb[3]],"rgb");let r=this.luminance(),n=TZe,o=(c,p)=>{let m=c.interpolate(p,.5,t),v=m.luminance();return Math.abs(e-v)e?o(c,m):o(m,p)},i=(r>e?o(new qe([0,0,0]),this):o(this,new qe([255,255,255]))).rgb();return new qe([...i,this._rgb[3]])}return CZe(...this._rgb.slice(0,3))};var CZe=(e,t,r)=>(e=rne(e),t=rne(t),r=rne(r),.2126*e+.7152*t+.0722*r),rne=e=>(e/=255,e<=.03928?e/12.92:kZe((e+.055)/1.055,2.4));var wo={};var U5=(e,t,r=.5,...n)=>{let o=n[0]||"lrgb";if(!wo[o]&&!n.length&&(o=Object.keys(wo)[0]),!wo[o])throw new Error(`interpolation mode ${o} is not defined`);return Jt(e)!=="object"&&(e=new qe(e)),Jt(t)!=="object"&&(t=new qe(t)),wo[o](e,t,r).alpha(e.alpha()+r*(t.alpha()-e.alpha()))};qe.prototype.mix=qe.prototype.interpolate=function(e,t=.5,...r){return U5(this,e,t,...r)};qe.prototype.premultiply=function(e=!1){let t=this._rgb,r=t[3];return e?(this._rgb=[t[0]*r,t[1]*r,t[2]*r,r],this):new qe([t[0]*r,t[1]*r,t[2]*r,r],"rgb")};qe.prototype.saturate=function(e=1){let t=this,r=t.lch();return r[1]+=us.Kn*e,r[1]<0&&(r[1]=0),new qe(r,"lch").alpha(t.alpha(),!0)};qe.prototype.desaturate=function(e=1){return this.saturate(-e)};qe.prototype.set=function(e,t,r=!1){let[n,o]=e.split("."),i=this[n]();if(o){let c=n.indexOf(o)-(n.substr(0,2)==="ok"?2:0);if(c>-1){if(Jt(t)=="string")switch(t.charAt(0)){case"+":i[c]+=+t;break;case"-":i[c]+=+t;break;case"*":i[c]*=+t.substr(1);break;case"/":i[c]/=+t.substr(1);break;default:i[c]=+t}else if(Jt(t)==="number")i[c]=t;else throw new Error("unsupported value for Color.set");let p=new qe(i,n);return r?(this._rgb=p._rgb,this):p}throw new Error(`unknown channel ${o} in mode ${n}`)}else return i};qe.prototype.tint=function(e=.5,...t){return U5(this,"white",e,...t)};qe.prototype.shade=function(e=.5,...t){return U5(this,"black",e,...t)};var MZe=(e,t,r)=>{let n=e._rgb,o=t._rgb;return new qe(n[0]+r*(o[0]-n[0]),n[1]+r*(o[1]-n[1]),n[2]+r*(o[2]-n[2]),"rgb")};wo.rgb=MZe;var{sqrt:nne,pow:PE}=Math,AZe=(e,t,r)=>{let[n,o,i]=e._rgb,[c,p,m]=t._rgb;return new qe(nne(PE(n,2)*(1-r)+PE(c,2)*r),nne(PE(o,2)*(1-r)+PE(p,2)*r),nne(PE(i,2)*(1-r)+PE(m,2)*r),"rgb")};wo.lrgb=AZe;var DZe=(e,t,r)=>{let n=e.lab(),o=t.lab();return new qe(n[0]+r*(o[0]-n[0]),n[1]+r*(o[1]-n[1]),n[2]+r*(o[2]-n[2]),"lab")};wo.lab=DZe;var Nd=(e,t,r,n)=>{let o,i;n==="hsl"?(o=e.hsl(),i=t.hsl()):n==="hsv"?(o=e.hsv(),i=t.hsv()):n==="hcg"?(o=e.hcg(),i=t.hcg()):n==="hsi"?(o=e.hsi(),i=t.hsi()):n==="lch"||n==="hcl"?(n="hcl",o=e.hcl(),i=t.hcl()):n==="oklch"&&(o=e.oklch().reverse(),i=t.oklch().reverse());let c,p,m,v,b,_;(n.substr(0,1)==="h"||n==="oklch")&&([c,m,b]=o,[p,v,_]=i);let I,R,A,F;return!isNaN(c)&&!isNaN(p)?(p>c&&p-c>180?F=p-(c+360):p180?F=p+360-c:F=p-c,R=c+r*F):isNaN(c)?isNaN(p)?R=Number.NaN:(R=p,(b==1||b==0)&&n!="hsv"&&(I=v)):(R=c,(_==1||_==0)&&n!="hsv"&&(I=m)),I===void 0&&(I=m+r*(v-m)),A=b+r*(_-b),n==="oklch"?new qe([A,I,R],n):new qe([R,I,A],n)};var Y3e=(e,t,r)=>Nd(e,t,r,"lch");wo.lch=Y3e;wo.hcl=Y3e;var RZe=(e,t,r)=>{let n=e.num(),o=t.num();return new qe(n+r*(o-n),"num")};wo.num=RZe;var NZe=(e,t,r)=>Nd(e,t,r,"hcg");wo.hcg=NZe;var LZe=(e,t,r)=>Nd(e,t,r,"hsi");wo.hsi=LZe;var FZe=(e,t,r)=>Nd(e,t,r,"hsl");wo.hsl=FZe;var BZe=(e,t,r)=>Nd(e,t,r,"hsv");wo.hsv=BZe;var zZe=(e,t,r)=>{let n=e.oklab(),o=t.oklab();return new qe(n[0]+r*(o[0]-n[0]),n[1]+r*(o[1]-n[1]),n[2]+r*(o[2]-n[2]),"oklab")};wo.oklab=zZe;var WZe=(e,t,r)=>Nd(e,t,r,"oklch");wo.oklch=WZe;var{pow:one,sqrt:ine,PI:ane,cos:Q3e,sin:ewe,atan2:HZe}=Math,twe=(e,t="lrgb",r=null)=>{let n=e.length;r||(r=Array.from(new Array(n)).map(()=>1));let o=n/r.reduce(function(_,I){return _+I});if(r.forEach((_,I)=>{r[I]*=o}),e=e.map(_=>new qe(_)),t==="lrgb")return VZe(e,r);let i=e.shift(),c=i.get(t),p=[],m=0,v=0;for(let _=0;_{let R=_.get(t);b+=_.alpha()*r[I+1];for(let A=0;A=360;)I-=360;c[_]=I}else c[_]=c[_]/p[_];return b/=n,new qe(c,t).alpha(b>.99999?1:b,!0)},VZe=(e,t)=>{let r=e.length,n=[0,0,0,0];for(let o=0;o.9999999&&(n[3]=1),new qe(bx(n))};var{pow:$Ze}=Math;function wx(e){let t="rgb",r=ur("#ccc"),n=0,o=[0,1],i=[],c=[0,0],p=!1,m=[],v=!1,b=0,_=1,I=!1,R={},A=!0,F=1,D=function(ne){if(ne=ne||["#fff","#000"],ne&&Jt(ne)==="string"&&ur.brewer&&ur.brewer[ne.toLowerCase()]&&(ne=ur.brewer[ne.toLowerCase()]),Jt(ne)==="array"){ne.length===1&&(ne=[ne[0],ne[0]]),ne=ne.slice(0);for(let fe=0;fe=p[ce];)ce++;return ce-1}return 0},H=ne=>ne,q=ne=>ne,Q=function(ne,fe){let ce,ve;if(fe==null&&(fe=!1),isNaN(ne)||ne===null)return r;fe?ve=ne:p&&p.length>2?ve=L(ne)/(p.length-2):_!==b?ve=(ne-b)/(_-b):ve=1,ve=q(ve),fe||(ve=H(ve)),F!==1&&(ve=$Ze(ve,F)),ve=c[0]+ve*(1-c[0]-c[1]),ve=U0(ve,0,1);let Se=Math.floor(ve*1e4);if(A&&R[Se])ce=R[Se];else{if(Jt(m)==="array")for(let ge=0;ge=be&&ge===i.length-1){ce=m[ge];break}if(ve>be&&veR={};D(e);let ee=function(ne){let fe=ur(Q(ne));return v&&fe[v]?fe[v]():fe};return ee.classes=function(ne){if(ne!=null){if(Jt(ne)==="array")p=ne,o=[ne[0],ne[ne.length-1]];else{let fe=ur.analyze(o);ne===0?p=[fe.min,fe.max]:p=ur.limits(fe,"e",ne)}return ee}return p},ee.domain=function(ne){if(!arguments.length)return o;b=ne[0],_=ne[ne.length-1],i=[];let fe=m.length;if(ne.length===fe&&b!==_)for(let ce of Array.from(ne))i.push((ce-b)/(_-b));else{for(let ce=0;ce2){let ce=ne.map((Se,ge)=>ge/(ne.length-1)),ve=ne.map(Se=>(Se-b)/(_-b));ve.every((Se,ge)=>ce[ge]===Se)||(q=Se=>{if(Se<=0||Se>=1)return Se;let ge=0;for(;Se>=ve[ge+1];)ge++;let be=(Se-ve[ge])/(ve[ge+1]-ve[ge]);return ce[ge]+be*(ce[ge+1]-ce[ge])})}}return o=[b,_],ee},ee.mode=function(ne){return arguments.length?(t=ne,re(),ee):t},ee.range=function(ne,fe){return D(ne,fe),ee},ee.out=function(ne){return v=ne,ee},ee.spread=function(ne){return arguments.length?(n=ne,ee):n},ee.correctLightness=function(ne){return ne==null&&(ne=!0),I=ne,re(),I?H=function(fe){let ce=Q(0,!0).lab()[0],ve=Q(1,!0).lab()[0],Se=ce>ve,ge=Q(fe,!0).lab()[0],be=ce+(ve-ce)*fe,Ee=ge-be,Ne=0,Ae=1,Ze=20;for(;Math.abs(Ee)>.01&&Ze-- >0;)(function(){return Se&&(Ee*=-1),Ee<0?(Ne=fe,fe+=(Ae-fe)*.5):(Ae=fe,fe+=(Ne-fe)*.5),ge=Q(fe,!0).lab()[0],Ee=ge-be})();return fe}:H=fe=>fe,ee},ee.padding=function(ne){return ne!=null?(Jt(ne)==="number"&&(ne=[ne,ne]),c=ne,ee):c},ee.colors=function(ne,fe){arguments.length<2&&(fe="hex");let ce=[];if(arguments.length===0)ce=m.slice(0);else if(ne===1)ce=[ee(.5)];else if(ne>1){let ve=o[0],Se=o[1]-ve;ce=ZZe(0,ne,!1).map(ge=>ee(ve+ge/(ne-1)*Se))}else{e=[];let ve=[];if(p&&p.length>2)for(let Se=1,ge=p.length,be=1<=ge;be?Sege;be?Se++:Se--)ve.push((p[Se-1]+p[Se])*.5);else ve=o;ce=ve.map(Se=>ee(Se))}return ur[fe]&&(ce=ce.map(ve=>ve[fe]())),ce},ee.cache=function(ne){return ne!=null?(A=ne,ee):A},ee.gamma=function(ne){return ne!=null?(F=ne,ee):F},ee.nodata=function(ne){return ne!=null?(r=ur(ne),ee):r},ee}function ZZe(e,t,r){let n=[],o=ei;o?c++:c--)n.push(c);return n}var qZe=function(e){let t=[1,1];for(let r=1;rnew qe(i)),e.length===2)[r,n]=e.map(i=>i.lab()),t=function(i){let c=[0,1,2].map(p=>r[p]+i*(n[p]-r[p]));return new qe(c,"lab")};else if(e.length===3)[r,n,o]=e.map(i=>i.lab()),t=function(i){let c=[0,1,2].map(p=>(1-i)*(1-i)*r[p]+2*(1-i)*i*n[p]+i*i*o[p]);return new qe(c,"lab")};else if(e.length===4){let i;[r,n,o,i]=e.map(c=>c.lab()),t=function(c){let p=[0,1,2].map(m=>(1-c)*(1-c)*(1-c)*r[m]+3*(1-c)*(1-c)*c*n[m]+3*(1-c)*c*c*o[m]+c*c*c*i[m]);return new qe(p,"lab")}}else if(e.length>=5){let i,c,p;i=e.map(m=>m.lab()),p=e.length-1,c=qZe(p),t=function(m){let v=1-m,b=[0,1,2].map(_=>i.reduce((I,R,A)=>I+c[A]*v**(p-A)*m**A*R[_],0));return new qe(b,"lab")}}else throw new RangeError("No point in running bezier with only one color.");return t},rwe=e=>{let t=UZe(e);return t.scale=()=>wx(t),t};var Tm=(e,t,r)=>{if(!Tm[r])throw new Error("unknown blend mode "+r);return Tm[r](e,t)},G5=e=>(t,r)=>{let n=ur(r).rgb(),o=ur(t).rgb();return ur.rgb(e(n,o))},J5=e=>(t,r)=>{let n=[];return n[0]=e(t[0],r[0]),n[1]=e(t[1],r[1]),n[2]=e(t[2],r[2]),n},GZe=e=>e,JZe=(e,t)=>e*t/255,XZe=(e,t)=>e>t?t:e,KZe=(e,t)=>e>t?e:t,YZe=(e,t)=>255*(1-(1-e/255)*(1-t/255)),QZe=(e,t)=>t<128?2*e*t/255:255*(1-2*(1-e/255)*(1-t/255)),eqe=(e,t)=>255*(1-(1-t/255)/(e/255)),tqe=(e,t)=>e===255?255:(e=255*(t/255)/(1-e/255),e>255?255:e);Tm.normal=G5(J5(GZe));Tm.multiply=G5(J5(JZe));Tm.screen=G5(J5(YZe));Tm.overlay=G5(J5(QZe));Tm.darken=G5(J5(XZe));Tm.lighten=G5(J5(KZe));Tm.dodge=G5(J5(tqe));Tm.burn=G5(J5(eqe));var nwe=Tm;var{pow:rqe,sin:nqe,cos:oqe}=Math;function owe(e=300,t=-1.5,r=1,n=1,o=[0,1]){let i=0,c;Jt(o)==="array"?c=o[1]-o[0]:(c=0,o=[o,o]);let p=function(m){let v=Rd*((e+120)/360+t*m),b=rqe(o[0]+c*m,n),I=(i!==0?r[0]+m*i:r)*b*(1-b)/2,R=oqe(v),A=nqe(v),F=b+I*(-.14861*R+1.78277*A),D=b+I*(-.29227*R-.90649*A),L=b+I*(1.97294*R);return ur(bx([F*255,D*255,L*255,1]))};return p.start=function(m){return m==null?e:(e=m,p)},p.rotations=function(m){return m==null?t:(t=m,p)},p.gamma=function(m){return m==null?n:(n=m,p)},p.hue=function(m){return m==null?r:(r=m,Jt(r)==="array"?(i=r[1]-r[0],i===0&&(r=r[1])):i=0,p)},p.lightness=function(m){return m==null?o:(Jt(m)==="array"?(o=m,c=m[1]-m[0]):(o=[m,m],c=0),p)},p.scale=()=>ur.scale(p),p.hue(r),p}var iqe="0123456789abcdef",{floor:aqe,random:sqe}=Math,iwe=()=>{let e="#";for(let t=0;t<6;t++)e+=iqe.charAt(aqe(sqe()*16));return new qe(e,"hex")};var{log:awe,pow:lqe,floor:uqe,abs:cqe}=Math;function sne(e,t=null){let r={min:Number.MAX_VALUE,max:Number.MAX_VALUE*-1,sum:0,values:[],count:0};return Jt(e)==="object"&&(e=Object.values(e)),e.forEach(n=>{t&&Jt(n)==="object"&&(n=n[t]),n!=null&&!isNaN(n)&&(r.values.push(n),r.sum+=n,nr.max&&(r.max=n),r.count+=1)}),r.domain=[r.min,r.max],r.limits=(n,o)=>lne(r,n,o),r}function lne(e,t="equal",r=7){Jt(e)=="array"&&(e=sne(e));let{min:n,max:o}=e,i=e.values.sort((p,m)=>p-m);if(r===1)return[n,o];let c=[];if(t.substr(0,1)==="c"&&(c.push(n),c.push(o)),t.substr(0,1)==="e"){c.push(n);for(let p=1;p 0");let p=Math.LOG10E*awe(n),m=Math.LOG10E*awe(o);c.push(n);for(let v=1;v200&&(_=!1)}let A={};for(let D=0;DD-L),c.push(F[0]);for(let D=1;D{e=new qe(e),t=new qe(t);let r=e.luminance(),n=t.luminance();return r>n?(r+.05)/(n+.05):(n+.05)/(r+.05)};var{sqrt:$g,pow:ha,min:pqe,max:dqe,atan2:lwe,abs:uwe,cos:HU,sin:cwe,exp:fqe,PI:pwe}=Math;function dwe(e,t,r=1,n=1,o=1){var i=function(Ce){return 360*Ce/(2*pwe)},c=function(Ce){return 2*pwe*Ce/360};e=new qe(e),t=new qe(t);let[p,m,v]=Array.from(e.lab()),[b,_,I]=Array.from(t.lab()),R=(p+b)/2,A=$g(ha(m,2)+ha(v,2)),F=$g(ha(_,2)+ha(I,2)),D=(A+F)/2,L=.5*(1-$g(ha(D,7)/(ha(D,7)+ha(25,7)))),H=m*(1+L),q=_*(1+L),Q=$g(ha(H,2)+ha(v,2)),re=$g(ha(q,2)+ha(I,2)),ee=(Q+re)/2,ne=i(lwe(v,H)),fe=i(lwe(I,q)),ce=ne>=0?ne:ne+360,ve=fe>=0?fe:fe+360,Se=uwe(ce-ve)>180?(ce+ve+360)/2:(ce+ve)/2,ge=1-.17*HU(c(Se-30))+.24*HU(c(2*Se))+.32*HU(c(3*Se+6))-.2*HU(c(4*Se-63)),be=ve-ce;be=uwe(be)<=180?be:ve<=ce?be+360:be-360,be=2*$g(Q*re)*cwe(c(be)/2);let Ee=b-p,Ne=re-Q,Ae=1+.015*ha(R-50,2)/$g(20+ha(R-50,2)),Ze=1+.045*ee,$e=1+.015*ee*ge,tt=30*fqe(-ha((Se-275)/25,2)),Pe=-(2*$g(ha(ee,7)/(ha(ee,7)+ha(25,7))))*cwe(2*c(tt)),Te=$g(ha(Ee/(r*Ae),2)+ha(Ne/(n*Ze),2)+ha(be/(o*$e),2)+Pe*(Ne/(n*Ze))*(be/(o*$e)));return dqe(0,pqe(100,Te))}function fwe(e,t,r="lab"){e=new qe(e),t=new qe(t);let n=e.get(r),o=t.get(r),i=0;for(let c in n){let p=(n[c]||0)-(o[c]||0);i+=p*p}return Math.sqrt(i)}var mwe=(...e)=>{try{return new qe(...e),!0}catch{return!1}};var hwe={cool(){return wx([ur.hsl(180,1,.9),ur.hsl(250,.7,.4)])},hot(){return wx(["#000","#f00","#ff0","#fff"],[0,.25,.75,1]).mode("rgb")}};var VU={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"]};for(let e of Object.keys(VU))VU[e.toLowerCase()]=VU[e];var vwe=VU;Object.assign(ur,{average:twe,bezier:rwe,blend:nwe,cubehelix:owe,mix:U5,interpolate:U5,random:iwe,scale:wx,analyze:sne,contrast:swe,deltaE:dwe,distance:fwe,limits:lne,valid:mwe,scales:hwe,input:Qt,colors:q5,brewer:vwe});var Oo=ur;var gwe="#EBEFF5";function kE(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:10,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,o=e.slice(),i=[],c=t%2===0,p=r?Math.ceil(t/2)+(c?1:0):t,m=r?Math.ceil(t/2)+(c?1:0):0;if(o.length===1&&o.unshift(gwe),r){o.length<3&&(o[2]=o[1],o[1]=gwe);var v=Math.ceil(o.length/2),b=o.filter(function(F,D){if(D=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hsr(e,t){if(e==null)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function uAe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),r.push.apply(r,n)}return r}function Rl(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r0&&n.state.selection.length===m.length,b=!v&&n.state.selection&&m.length>0&&n.state.selection.length>0,_=m.length===0,I=function(A){A.target.checked&&!b?n.changeSelection(m):n.changeSelection([])};return s(Vt,{tokens:["euiBasicTable.selectAllRows","euiBasicTable.deselectRows"],defaults:["Select all rows","Deselect rows"]},function(R){var A=cAe(R,2),F=A[0],D=A[1];return s(p$,{id:n.selectAllIdGenerator(),checked:v,indeterminate:b,disabled:_,onChange:I,"data-test-subj":"checkboxSelectAll","aria-label":v||b?D:F,title:v||b?D:F,label:o?F:null})})}}),cy(n,"renderCopyChar",function(o){var i=o===n.props.columns.length-1;return i?Gg.hiddenNewline:Gg.hiddenTab}),cy(n,"resolveColumnSortDirection",function(o){var i=n.props.sorting,c=o,p=c.sortable,m=c.field,v=c.name;if(!(!i||!i.sort||!p)&&(i.sort.field===m||i.sort.field===v))return i.sort.direction}),cy(n,"resolveColumnOnSort",function(o){var i=n.props.sorting,c=o,p=c.sortable,m=c.name;if(!(!i||!p)){if(!n.props.onChange)throw new Error("BasicTable is configured to be sortable on column [".concat(m,`] but [onChange] is not configured. This callback must be implemented to handle the sort requests`));return function(){return n.onColumnSortChange(o)}}}),n.state={initialSelectionRendered:!1,selection:[]},n}return Ssr(t,e),wsr(t,[{key:"componentDidMount",value:function(){this.getInitialSelection()}},{key:"componentDidUpdate",value:function(){this.getInitialSelection()}},{key:"pageSize",get:function(){var n,o,i,c;return(n=(o=(i=this.props.pagination)===null||i===void 0?void 0:i.pageSize)!==null&&o!==void 0?o:(c=this.context.EuiTablePagination)===null||c===void 0?void 0:c.itemsPerPage)!==null&&n!==void 0?n:k3.itemsPerPage}},{key:"isSelectionControlled",get:function(){var n;return!!((n=this.props.selection)!==null&&n!==void 0&&n.selected)}},{key:"getInitialSelection",value:function(){this.isSelectionControlled||this.props.selection&&this.props.selection.initialSelected&&!this.state.initialSelectionRendered&&this.props.items.length>0&&this.setState({selection:this.props.selection.initialSelected,initialSelectionRendered:!0})}},{key:"buildCriteria",value:function(n){var o={};return fAe(n)&&(o.page={index:n.pagination.pageIndex,size:this.pageSize}),n.sorting&&(o.sort=n.sorting.sort),o}},{key:"changeSelection",value:function(n){var o,i=this.props.selection;i&&((o=i.onSelectionChange)===null||o===void 0||o.call(i,n),this.isSelectionControlled||this.setState({selection:n}))}},{key:"clearSelection",value:function(){this.changeSelection([])}},{key:"onPageSizeChange",value:function(n){this.clearSelection();var o=this.buildCriteria(this.props),i=Rl(Rl({},o),{},{page:{index:0,size:n}});this.props.onChange&&this.props.onChange(i)}},{key:"onPageChange",value:function(n){this.clearSelection();var o=this.buildCriteria(this.props),i=Rl(Rl({},o),{},{page:Rl(Rl({},o.page),{},{index:n})});this.props.onChange&&this.props.onChange(i)}},{key:"onColumnSortChange",value:function(n){this.clearSelection();var o=this.buildCriteria(this.props),i=Wd.ASC;o&&o.sort&&(o.sort.field===n.field||o.sort.field===n.name)&&(i=Wd.reverse(o.sort.direction));var c=Rl(Rl({},o),{},{page:o.page?{index:0,size:o.page.size}:void 0,sort:{field:n.field||n.name,direction:i}});this.props.onChange&&this.props.onChange(c)}},{key:"render",value:function(){var n=this.props,o=n.className,i=n.loading,c=n.items,p=n.itemId,m=n.columns,v=n.pagination,b=n.sorting,_=n.selection,I=n.onChange,R=n.error,A=n.noItemsMessage,F=n.compressed,D=n.itemIdToExpandedRowMap,L=n.responsiveBreakpoint,H=n.rowProps,q=n.cellProps,Q=n.tableCaption,re=n.rowHeader,ee=n.tableLayout,ne=lAe(n,usr),fe=(0,gAe.default)("euiBasicTable",{"euiBasicTable-loading":i},o),ce=this.renderTable(),ve=this.renderPaginationBar();return s("div",D3({className:fe},ne),ce,ve)}},{key:"renderTable",value:function(){var n=this.props,o=n.compressed,i=n.responsiveBreakpoint,c=n.tableLayout,p=n.loading;return s(RP.default.Fragment,null,s(dY,{responsiveBreakpoint:i},this.renderSelectAll(!0),this.renderTableMobileSort()),s(doe,null,s(iY,{id:this.tableId,tableLayout:c,responsiveBreakpoint:i,compressed:o,css:p&&sAe},this.renderTableCaption(),this.renderTableHead(),this.renderTableBody(),this.renderTableFooter())))}},{key:"renderTableMobileSort",value:function(){var n=this,o=this.props,i=o.columns,c=o.sorting,p=[];return c?(i.forEach(function(m,v){var b;if(m.field&&c.sort&&c.enableAllColumns&&m.sortable==null&&(m=Rl(Rl({},m),{},{sortable:!0})),!(!m.sortable||((b=m)===null||b===void 0||(b=b.mobileOptions)===null||b===void 0?void 0:b.show)===!1)){var _=n.resolveColumnSortDirection(m);p.push({name:m.name,key:"_data_s_".concat(String(m.field),"_").concat(v),onSort:n.resolveColumnOnSort(m),isSorted:!!_,isSortAscending:_?Wd.isAsc(_):void 0})}}),p.length?s(hY,{items:p}):null):null}},{key:"renderTableCaption",value:function(){var n=this.props,o=n.items,i=n.pagination,c=n.tableCaption,p=o.length,m=i?i.totalItemCount:p,v=i?i.pageIndex+1:1,b=i?Math.ceil(i.totalItemCount/this.pageSize):1,_;return c?i?_=s(Vt,{token:"euiBasicTable.tableCaptionWithPagination",default:"{tableCaption}; Page {page} of {pageCount}.",values:{tableCaption:c,page:v,pageCount:b}}):_=c:i?i.totalItemCount>0?_=s(Vt,{token:"euiBasicTable.tableAutoCaptionWithPagination",default:"This table contains {itemCount} rows out of {totalItemCount} rows; Page {page} of {pageCount}.",values:{totalItemCount:m,itemCount:p,page:v,pageCount:b}}):_=s(Vt,{token:"euiBasicTable.tableSimpleAutoCaptionWithPagination",default:"This table contains {itemCount} rows; Page {page} of {pageCount}.",values:{itemCount:p,page:v,pageCount:b}}):_=s(Vt,{token:"euiBasicTable.tableAutoCaptionWithoutPagination",default:"This table contains {itemCount} rows.",values:{itemCount:p}}),s(fo,null,s("caption",{css:_Me,className:"euiTableCaption"},Gg.hiddenNoCopyBoundary,s(k$,null,_),Gg.hiddenNoCopyBoundary))}},{key:"renderTableHead",value:function(){var n=this,o=this.props,i=o.columns,c=o.selection,p=[];return c&&p.push(s(pY,{key:"_selection_column_h",append:this.renderCopyChar(-1)},this.renderSelectAll(!1))),i.forEach(function(m,v){var b=m,_=b.field,I=b.width,R=b.name,A=b.align,F=b.dataType,D=b.sortable,L=b.mobileOptions,H=b.readOnly,q=b.description,Q=A||n.getAlignForDataType(F),re={width:I,description:q,mobileOptions:L,align:Q,append:n.renderCopyChar(v)};if(m.actions){p.push(s(jP,D3({},re,{key:"_actions_h_".concat(v),align:"right"}),R));return}if(!m.field){var ee={};if(n.props.sorting&&typeof D=="function"){var ne=n.resolveColumnSortDirection(m);ee.isSorted=!!ne,ee.isSortAscending=ne?Wd.isAsc(ne):void 0,ee.onSort=n.resolveColumnOnSort(m),ee.readOnly=n.props.sorting.readOnly||H}p.push(s(jP,D3({},re,{key:"_computed_column_h_".concat(v),"data-test-subj":"tableHeaderCell_".concat(typeof R=="string"?R:"","_").concat(v)},ee),R));return}var fe={};if(n.props.sorting){n.props.sorting.sort&&n.props.sorting.enableAllColumns&&m.sortable==null&&(m=Rl(Rl({},m),{},{sortable:!0}));var ce=m,ve=ce.sortable;if(ve){var Se=n.resolveColumnSortDirection(m);fe.isSorted=!!Se,fe.isSortAscending=Se?Wd.isAsc(Se):void 0,fe.onSort=n.resolveColumnOnSort(m),fe.readOnly=n.props.sorting.readOnly||H}}p.push(s(jP,D3({},re,{key:"_data_h_".concat(String(_),"_").concat(v),"data-test-subj":"tableHeaderCell_".concat(String(_),"_").concat(v)},fe),R))}),s(cY,null,p)}},{key:"renderTableFooter",value:function(){var n=this.props,o=n.items,i=n.columns,c=n.pagination,p=n.selection,m=[],v=!1;return p&&m.push(s(kP,{key:"_selection_column_f"},void 0)),i.forEach(function(b){var _=ksr(b,{items:o,pagination:c}),I=b,R=I.mobileOptions,A=I.field,F=I.align;R!=null&&R.only||(_?(m.push(s(kP,{key:"footer_".concat(String(A),"_").concat(m.length-1),align:F},_)),v=!0):m.push(s(kP,{key:"footer_empty_".concat(m.length-1),align:F},void 0)))}),m.length&&v?s(sY,null,m):null}},{key:"renderTableBody",value:function(){var n=this,o=this.props,i=o.error,c=o.loading,p=o.items,m;return i?m=this.renderErrorMessage(i):p.length===0?m=this.renderEmptyMessage():m=p.map(function(v,b){var _=fAe(n.props)&&n.pageSize>0?n.props.pagination.pageIndex*n.pageSize+b:b;return n.renderItemRow(v,_,b)}),s(vA,null,function(v){return s(aY,{css:c&&aAe(v)},m)})}},{key:"renderErrorMessage",value:function(n){var o=this.props.columns.length+(this.props.selection?1:0);return s(a_,null,s(A3,{align:"center",colSpan:o,mobileOptions:{width:"100%"}},s(pr,{type:"minusInCircle",color:"danger"})," ",n))}},{key:"renderEmptyMessage",value:function(){var n=this.props,o=n.columns,i=n.selection,c=n.noItemsMessage,p=o.length+(i?1:0);return s(a_,null,s(A3,{align:"center",colSpan:p,mobileOptions:{width:"100%"}},c))}},{key:"renderItemRow",value:function(n,o,i){var c=this,p=this.props,m=p.columns,v=p.selection,b=p.rowHeader,_=p.itemIdToExpandedRowMap,I=[],R=this.props.itemId,A=AP(n,R)!=null?AP(n,R):o,F=v?this.state.selection&&!!this.state.selection.find(function(Ee){return AP(Ee,R)===A}):!1,D=!1;if(v){var L=this.renderItemSelectionCell(A,n,F,i),H=cAe(L,2),q=H[0],Q=H[1];I.push(q),D=!!Q}var re=!1;m.forEach(function(Ee,Ne){var Ae=Ee.actions;if(Ae){var Ze=Ae.some(function(tt){return!!tt.render});I.push(c.renderItemActionsCell(A,n,Ee,Ne,o,Ze)),re=!re&&Ze?"custom":!0}else if(Ee.field){var $e=Ee;I.push(c.renderItemFieldDataCell(A,n,Ee,Ne,$e.field===b))}else I.push(c.renderItemComputedCell(A,n,Ee,Ne))});var ee=v?m.length+1:m.length,ne=m.reduce(function(Ee,Ne){var Ae;return Ne!=null&&(Ae=Ne.mobileOptions)!==null&&Ae!==void 0&&Ae.only?Ee+1:Ee+0},0);ee=ee-ne;var fe=_?.hasOwnProperty(A),ce=fe?"row_".concat(A,"_expansion"):void 0,ve=fe?s(a_,{id:ce,isExpandedRow:!0,hasSelection:!!v},s(A3,{colSpan:ee,textOnly:!1,append:Gg.hiddenNewline},_[A])):void 0,Se=this.props.rowProps,ge=Esr(n,Se),be=s(a_,D3({"aria-owns":ce,hasSelection:!!v,isSelectable:!D,isSelected:F,hasActions:re,isExpandable:fe},ge),I);return s(RP.Fragment,{key:"row_".concat(A)},be,ve)}},{key:"renderItemSelectionCell",value:function(n,o,i,c){var p=this,m=this.props.selection,v="_selection_column_".concat(n),b=i,_=m.selectable&&!m.selectable(o),I=m.selectableMessage&&m.selectableMessage(!_,o),R=function(F){if(F.target.checked)p.changeSelection([].concat(psr(p.state.selection),[o]));else{var D=p.props.itemId;p.changeSelection(p.state.selection.reduce(function(L,H){return AP(H,D)!==n&&L.push(H),L},[]))}};return[s(gY,{key:v,append:this.renderCopyChar(-1)},s(Vt,{token:"euiBasicTable.selectThisRow",default:"Select row {index}",values:{index:c+1}},function(A){return s(p$,{id:"".concat(p.tableId).concat(v,"-checkbox"),disabled:_,checked:b,onChange:R,title:I||A,"aria-label":I||A,"data-test-subj":"checkboxSelectRow-".concat(n)})})),_]}},{key:"renderItemActionsCell",value:function(n,o,i,c,p,m){var v=this.state.selection.length>0,b=i.actions.filter(function(R){return!R.available||R.available(o)});if(b.length>2){if(v)b=[];else{var _=b.filter(function(R){return R.isPrimary});b=_.slice(0,2).map(function(R){return Rl(Rl({},R),{},{showOnHover:!0})})}b.push({name:"All actions",render:function(A){return s(KMe,{className:"euiBasicTable__collapsedActions",actions:i.actions,actionsDisabled:v,itemId:n,item:A,displayedRowIndex:p})}})}var I="record_actions_".concat(n,"_").concat(c);return s(A3,{key:I,align:"right",textOnly:!1,hasActions:m?"custom":!0,append:this.renderCopyChar(c)},s(rAe,{actions:b,actionsDisabled:v,itemId:n,item:o}))}},{key:"renderItemFieldDataCell",value:function(n,o,i,c,p){var m=i.field,v=i.render,b=i.dataType,_="_data_column_".concat(String(m),"_").concat(n,"_").concat(c),I=v||this.getRendererForDataType(b),R=lJ(o,m),A=I(R,o);return this.renderItemCell(o,i,c,_,A,p)}},{key:"renderItemComputedCell",value:function(n,o,i,c){var p=i.render,m="_computed_column_".concat(n,"_").concat(c),v=p||this.getRendererForDataType(),b=v(o);return this.renderItemCell(o,i,c,m,b,!1)}},{key:"renderItemCell",value:function(n,o,i,c,p,m){var v,b,_=o,I=_.align,R=_.render,A=_.dataType,F=_.isExpander,D=_.textOnly,L=_.name,H=_.field,q=_.description,Q=_.sortable,re=_.footer,ee=_.mobileOptions,ne=lAe(_,csr),fe=I||this.getAlignForDataType(A),ce=this.props.cellProps,ve=Psr(n,o,ce);return s(A3,D3({key:c,align:fe,isExpander:F,textOnly:D||!R,setScopeRow:m,mobileOptions:Rl(Rl({},ee),{},{render:ee==null||(v=ee.render)===null||v===void 0?void 0:v.call(ee,n),header:(b=ee?.header)!==null&&b!==void 0?b:L})},ve,ne,{append:this.renderCopyChar(i)}),p)}},{key:"getRendererForDataType",value:function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",o=Mve[n];if(!o)throw new Error("Unknown dataType [".concat(n,"]. The supported data types are [").concat(dAe.join(", "),"]"));return o.render}},{key:"getAlignForDataType",value:function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",o=Mve[n];if(!o)throw new Error("Unknown dataType [".concat(n,"]. The supported data types are [").concat(dAe.join(", "),"]"));return o.align}},{key:"renderPaginationBar",value:function(){var n=this,o=this.props,i=o.error,c=o.pagination,p=o.tableCaption,m=o.onChange;if(!i&&c&&c.totalItemCount>0){if(!m)throw new Error(`The Basic Table is configured with pagination but [onChange] is - not configured. This callback must be implemented to handle pagination changes`);return s(Vt,{token:"euiBasicTable.tablePagination",default:"Pagination for table: {tableCaption}",values:{tableCaption:p}},function(v){return s(oAe,{pagination:c,onPageSizeChange:n.onPageSizeChange.bind(n),onPageChange:n.onPageChange.bind(n),"aria-controls":n.tableId,"aria-label":v})})}}}],[{key:"getDerivedStateFromProps",value:function(n,o){if(!n.selection)return{selection:[]};var i=n.selection.selected,c=i??o.selection,p=n.itemId,m=n.items,v=c.filter(function(I){return m.findIndex(function(R){return AP(R,p)===AP(I,p)})!==-1});if(v.length!==c.length){var b,_;return(b=(_=n.selection).onSelectionChange)===null||b===void 0||b.call(_,v),{selection:v}}return i?{selection:v}:null}}])}(RP.Component);cy(R3,"contextType",DV);cy(R3,"defaultProps",{tableLayout:"fixed",noItemsMessage:s(Vt,{token:"euiBasicTable.noItemsMessage",default:"No items found"})});R3.propTypes={className:Ke.default.string,"aria-label":Ke.default.string,"data-test-subj":Ke.default.string,css:Ke.default.any,itemId:Ke.default.oneOfType([Ke.default.string.isRequired,Ke.default.number.isRequired,Ke.default.func.isRequired]),itemIdToExpandedRowMap:Ke.default.shape({}),items:Ke.default.arrayOf(Ke.default.any.isRequired),cellProps:Ke.default.oneOfType([Ke.default.any.isRequired,Ke.default.func.isRequired]),columns:Ke.default.arrayOf(Ke.default.oneOfType([Ke.default.shape({field:Ke.default.oneOfType([Ke.default.any.isRequired,Ke.default.any.isRequired]).isRequired,name:Ke.default.node.isRequired,description:Ke.default.string,dataType:Ke.default.oneOf(["auto","string","number","boolean","date"]),width:Ke.default.string,sortable:Ke.default.oneOfType([Ke.default.bool.isRequired,Ke.default.func.isRequired]),readOnly:Ke.default.bool,align:Ke.default.any,textOnly:Ke.default.bool,truncateText:Ke.default.oneOfType([Ke.default.bool.isRequired,Ke.default.shape({lines:Ke.default.number.isRequired}).isRequired]),mobileOptions:Ke.default.shape({render:Ke.default.func}),render:Ke.default.func,footer:Ke.default.oneOfType([Ke.default.string.isRequired,Ke.default.element.isRequired,Ke.default.func.isRequired]),isExpander:Ke.default.bool,className:Ke.default.string,"aria-label":Ke.default.string,"data-test-subj":Ke.default.string,css:Ke.default.any}).isRequired,Ke.default.shape({className:Ke.default.string,"aria-label":Ke.default.string,"data-test-subj":Ke.default.string,css:Ke.default.any,render:Ke.default.func.isRequired,name:Ke.default.node,sortable:Ke.default.func}).isRequired,Ke.default.shape({actions:Ke.default.arrayOf(Ke.default.oneOfType([Ke.default.shape({type:Ke.default.oneOfType([Ke.default.oneOf(["button"]),Ke.default.oneOf(["icon"]).isRequired]),color:Ke.default.oneOfType([Ke.default.any.isRequired,Ke.default.func.isRequired]),name:Ke.default.oneOfType([Ke.default.node.isRequired,Ke.default.func.isRequired]).isRequired,description:Ke.default.oneOfType([Ke.default.string.isRequired,Ke.default.func.isRequired]).isRequired,onClick:Ke.default.func,href:Ke.default.oneOfType([Ke.default.string.isRequired,Ke.default.func.isRequired]),target:Ke.default.string,available:Ke.default.func,enabled:Ke.default.func,"data-test-subj":Ke.default.oneOfType([Ke.default.string.isRequired,Ke.default.func.isRequired]),isPrimary:Ke.default.bool,showOnHover:Ke.default.bool,icon:Ke.default.oneOfType([Ke.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","analyzeEvent","annotation","anomalyChart","anomalySwimLane","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","article","asterisk","at","auditbeatApp","beaker","bell","bellSlash","beta","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","changePointDetection","check","checkInCircleFilled","cheer","classificationJob","clickLeft","clickRight","clock","clockCounter","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInCircle","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","diff","discoverApp","discuss","document","documentEdit","documentation","documents","dot","dotInCircle","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","endpoint","eql","eraser","error","errorFilled","esqlVis","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","fieldStatistics","filebeatApp","filter","filterExclude","filterIgnore","filterInclude","filterInCircle","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","grabOmnidirectional","gradient","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","index","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","indexTemporary","infinity","inputOutput","inspect","invert","ip","key","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","launch","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logPatternAnalysis","logRateAnalysis","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoVulnerabilityManagement","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","minusInSquare","mobile","monitoringApp","moon","move","namespace","nested","newChat","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","palette","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipeBreaks","pipelineApp","pipeNoBreaks","pivot","play","playFilled","plus","plusInCircle","plusInCircleFilled","plusInSquare","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","singleMetricViewer","snowflake","sortAscending","sortDescending","sortDown","sortLeft","sortRight","sortUp","sortable","spaces","spacesApp","sparkles","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelineWithArrow","timelionApp","timeRefresh","timeslider","training","transitionLeftIn","transitionLeftOut","transitionTopIn","transitionTopOut","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","vulnerabilityManagementApp","warning","warningFilled","alert","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDimension","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenSemanticText","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable","tokenVectorDense","tokenDenseVector","tokenVectorSparse"]).isRequired,Ke.default.func.isRequired])}).isRequired,Ke.default.shape({render:Ke.default.func.isRequired,available:Ke.default.func,enabled:Ke.default.func}).isRequired]).isRequired).isRequired,name:Ke.default.node}).isRequired]).isRequired),error:Ke.default.string,tableCaption:Ke.default.string,rowHeader:Ke.default.string,loading:Ke.default.bool,noItemsMessage:Ke.default.node,onChange:Ke.default.func,pagination:Ke.default.oneOfType([Ke.default.oneOf([void 0]),Ke.default.shape({pageIndex:Ke.default.number.isRequired,pageSize:Ke.default.number,totalItemCount:Ke.default.number.isRequired,pageSizeOptions:Ke.default.arrayOf(Ke.default.number.isRequired),showPerPageOptions:Ke.default.bool})]),rowProps:Ke.default.oneOfType([Ke.default.any.isRequired,Ke.default.func.isRequired]),selection:Ke.default.shape({onSelectionChange:Ke.default.func,selectable:Ke.default.func,selectableMessage:Ke.default.func,initialSelected:Ke.default.arrayOf(Ke.default.any.isRequired),selected:Ke.default.arrayOf(Ke.default.any.isRequired)}),sorting:Ke.default.shape({sort:Ke.default.shape({field:Ke.default.any.isRequired,direction:Ke.default.oneOf(["asc","desc"]).isRequired}),allowNeutralSort:Ke.default.bool,enableAllColumns:Ke.default.bool,readOnly:Ke.default.bool}),tableLayout:Ke.default.oneOf(["fixed","auto"])};var g1=function(){function e(){this.listeners=[]}var t=e.prototype;return t.subscribe=function(n){var o=this,i=n||function(){};return this.listeners.push(i),this.onSubscribe(),function(){o.listeners=o.listeners.filter(function(c){return c!==i}),o.onUnsubscribe()}},t.hasListeners=function(){return this.listeners.length>0},t.onSubscribe=function(){},t.onUnsubscribe=function(){},e}();var s_=typeof window>"u";function Xi(){}function bAe(e,t){return typeof e=="function"?e(t):e}function H$(e){return typeof e=="number"&&e>=0&&e!==1/0}function W$(e){return Array.isArray(e)?e:[e]}function wY(e,t){return Math.max(e+(t||0)-Date.now(),0)}function NP(e,t,r){return OY(e)?typeof t=="function"?Qr({},r,{queryKey:e,queryFn:t}):Qr({},t,{queryKey:e}):e}function y1(e,t,r){return OY(e)?[Qr({},t,{queryKey:e}),r]:[e||{},t]}function jsr(e,t){if(e===!0&&t===!0||e==null&&t==null)return"all";if(e===!1&&t===!1)return"none";var r=e??!t;return r?"active":"inactive"}function Dve(e,t){var r=e.active,n=e.exact,o=e.fetching,i=e.inactive,c=e.predicate,p=e.queryKey,m=e.stale;if(OY(p)){if(n){if(t.queryHash!==V$(p,t.options))return!1}else if(!$$(t.queryKey,p))return!1}var v=jsr(r,i);if(v==="none")return!1;if(v!=="all"){var b=t.isActive();if(v==="active"&&!b||v==="inactive"&&b)return!1}return!(typeof m=="boolean"&&t.isStale()!==m||typeof o=="boolean"&&t.isFetching()!==o||c&&!c(t))}function Rve(e,t){var r=e.exact,n=e.fetching,o=e.predicate,i=e.mutationKey;if(OY(i)){if(!t.options.mutationKey)return!1;if(r){if(N3(t.options.mutationKey)!==N3(i))return!1}else if(!$$(t.options.mutationKey,i))return!1}return!(typeof n=="boolean"&&t.state.status==="loading"!==n||o&&!o(t))}function V$(e,t){var r=t?.queryKeyHashFn||N3;return r(e)}function N3(e){var t=W$(e);return Tsr(t)}function Tsr(e){return JSON.stringify(e,function(t,r){return Ave(r)?Object.keys(r).sort().reduce(function(n,o){return n[o]=r[o],n},{}):r})}function $$(e,t){return wAe(W$(e),W$(t))}function wAe(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?!Object.keys(t).some(function(r){return!wAe(e[r],t[r])}):!1}function LP(e,t){if(e===t)return e;var r=Array.isArray(e)&&Array.isArray(t);if(r||Ave(e)&&Ave(t)){for(var n=r?e.length:Object.keys(e).length,o=r?t:Object.keys(t),i=o.length,c=r?[]:{},p=0,m=0;m"u")return!0;var r=t.prototype;return!(!yAe(r)||!r.hasOwnProperty("isPrototypeOf"))}function yAe(e){return Object.prototype.toString.call(e)==="[object Object]"}function OY(e){return typeof e=="string"||Array.isArray(e)}function xAe(e){return new Promise(function(t){setTimeout(t,e)})}function Nve(e){Promise.resolve().then(e).catch(function(t){return setTimeout(function(){throw t})})}function xY(){if(typeof AbortController=="function")return new AbortController}var Csr=function(e){hc(t,e);function t(){var n;return n=e.call(this)||this,n.setup=function(o){var i;if(!s_&&((i=window)!=null&&i.addEventListener)){var c=function(){return o()};return window.addEventListener("visibilitychange",c,!1),window.addEventListener("focus",c,!1),function(){window.removeEventListener("visibilitychange",c),window.removeEventListener("focus",c)}}},n}var r=t.prototype;return r.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},r.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},r.setEventListener=function(o){var i,c=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(p){typeof p=="boolean"?c.setFocused(p):c.onFocus()})},r.setFocused=function(o){this.focused=o,o&&this.onFocus()},r.onFocus=function(){this.listeners.forEach(function(o){o()})},r.isFocused=function(){return typeof this.focused=="boolean"?this.focused:typeof document>"u"?!0:[void 0,"visible","prerender"].includes(document.visibilityState)},t}(g1),L3=new Csr;var Msr=function(e){hc(t,e);function t(){var n;return n=e.call(this)||this,n.setup=function(o){var i;if(!s_&&((i=window)!=null&&i.addEventListener)){var c=function(){return o()};return window.addEventListener("online",c,!1),window.addEventListener("offline",c,!1),function(){window.removeEventListener("online",c),window.removeEventListener("offline",c)}}},n}var r=t.prototype;return r.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},r.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},r.setEventListener=function(o){var i,c=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(p){typeof p=="boolean"?c.setOnline(p):c.onOnline()})},r.setOnline=function(o){this.online=o,o&&this.onOnline()},r.onOnline=function(){this.listeners.forEach(function(o){o()})},r.isOnline=function(){return typeof this.online=="boolean"?this.online:typeof navigator>"u"||typeof navigator.onLine>"u"?!0:navigator.onLine},t}(g1),FP=new Msr;function Asr(e){return Math.min(1e3*Math.pow(2,e),3e4)}function Z$(e){return typeof e?.cancel=="function"}var _Ae=function(t){this.revert=t?.revert,this.silent=t?.silent};function BP(e){return e instanceof _Ae}var _Y=function(t){var r=this,n=!1,o,i,c,p;this.abort=t.abort,this.cancel=function(I){return o?.(I)},this.cancelRetry=function(){n=!0},this.continueRetry=function(){n=!1},this.continue=function(){return i?.()},this.failureCount=0,this.isPaused=!1,this.isResolved=!1,this.isTransportCancelable=!1,this.promise=new Promise(function(I,R){c=I,p=R});var m=function(R){r.isResolved||(r.isResolved=!0,t.onSuccess==null||t.onSuccess(R),i?.(),c(R))},v=function(R){r.isResolved||(r.isResolved=!0,t.onError==null||t.onError(R),i?.(),p(R))},b=function(){return new Promise(function(R){i=R,r.isPaused=!0,t.onPause==null||t.onPause()}).then(function(){i=void 0,r.isPaused=!1,t.onContinue==null||t.onContinue()})},_=function I(){if(!r.isResolved){var R;try{R=t.fn()}catch(A){R=Promise.reject(A)}o=function(F){if(!r.isResolved&&(v(new _Ae(F)),r.abort==null||r.abort(),Z$(R)))try{R.cancel()}catch{}},r.isTransportCancelable=Z$(R),Promise.resolve(R).then(m).catch(function(A){var F,D;if(!r.isResolved){var L=(F=t.retry)!=null?F:3,H=(D=t.retryDelay)!=null?D:Asr,q=typeof H=="function"?H(r.failureCount,A):H,Q=L===!0||typeof L=="number"&&r.failureCount"u"&&(p.exact=!0),this.queries.find(function(m){return Dve(p,m)})},r.findAll=function(o,i){var c=y1(o,i),p=c[0];return Object.keys(p).length>0?this.queries.filter(function(m){return Dve(p,m)}):this.queries},r.notify=function(o){var i=this;no.batch(function(){i.listeners.forEach(function(c){c(o)})})},r.onFocus=function(){var o=this;no.batch(function(){o.queries.forEach(function(i){i.onFocus()})})},r.onOnline=function(){var o=this;no.batch(function(){o.queries.forEach(function(i){i.onOnline()})})},t}(g1);var PAe=function(){function e(r){this.options=Qr({},r.defaultOptions,r.options),this.mutationId=r.mutationId,this.mutationCache=r.mutationCache,this.observers=[],this.state=r.state||Rsr(),this.meta=r.meta}var t=e.prototype;return t.setState=function(n){this.dispatch({type:"setState",state:n})},t.addObserver=function(n){this.observers.indexOf(n)===-1&&this.observers.push(n)},t.removeObserver=function(n){this.observers=this.observers.filter(function(o){return o!==n})},t.cancel=function(){return this.retryer?(this.retryer.cancel(),this.retryer.promise.then(Xi).catch(Xi)):Promise.resolve()},t.continue=function(){return this.retryer?(this.retryer.continue(),this.retryer.promise):this.execute()},t.execute=function(){var n=this,o,i=this.state.status==="loading",c=Promise.resolve();return i||(this.dispatch({type:"loading",variables:this.options.variables}),c=c.then(function(){n.mutationCache.config.onMutate==null||n.mutationCache.config.onMutate(n.state.variables,n)}).then(function(){return n.options.onMutate==null?void 0:n.options.onMutate(n.state.variables)}).then(function(p){p!==n.state.context&&n.dispatch({type:"loading",context:p,variables:n.state.variables})})),c.then(function(){return n.executeMutation()}).then(function(p){o=p,n.mutationCache.config.onSuccess==null||n.mutationCache.config.onSuccess(o,n.state.variables,n.state.context,n)}).then(function(){return n.options.onSuccess==null?void 0:n.options.onSuccess(o,n.state.variables,n.state.context)}).then(function(){return n.options.onSettled==null?void 0:n.options.onSettled(o,null,n.state.variables,n.state.context)}).then(function(){return n.dispatch({type:"success",data:o}),o}).catch(function(p){return n.mutationCache.config.onError==null||n.mutationCache.config.onError(p,n.state.variables,n.state.context,n),l_().error(p),Promise.resolve().then(function(){return n.options.onError==null?void 0:n.options.onError(p,n.state.variables,n.state.context)}).then(function(){return n.options.onSettled==null?void 0:n.options.onSettled(void 0,p,n.state.variables,n.state.context)}).then(function(){throw n.dispatch({type:"error",error:p}),p})})},t.executeMutation=function(){var n=this,o;return this.retryer=new _Y({fn:function(){return n.options.mutationFn?n.options.mutationFn(n.state.variables):Promise.reject("No mutationFn found")},onFail:function(){n.dispatch({type:"failed"})},onPause:function(){n.dispatch({type:"pause"})},onContinue:function(){n.dispatch({type:"continue"})},retry:(o=this.options.retry)!=null?o:0,retryDelay:this.options.retryDelay}),this.retryer.promise},t.dispatch=function(n){var o=this;this.state=Nsr(this.state,n),no.batch(function(){o.observers.forEach(function(i){i.onMutationUpdate(n)}),o.mutationCache.notify(o)})},e}();function Rsr(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}function Nsr(e,t){switch(t.type){case"failed":return Qr({},e,{failureCount:e.failureCount+1});case"pause":return Qr({},e,{isPaused:!0});case"continue":return Qr({},e,{isPaused:!1});case"loading":return Qr({},e,{context:t.context,data:void 0,error:null,isPaused:!1,status:"loading",variables:t.variables});case"success":return Qr({},e,{data:t.data,error:null,status:"success",isPaused:!1});case"error":return Qr({},e,{data:void 0,error:t.error,failureCount:e.failureCount+1,isPaused:!1,status:"error"});case"setState":return Qr({},e,t.state);default:return e}}var kAe=function(e){hc(t,e);function t(n){var o;return o=e.call(this)||this,o.config=n||{},o.mutations=[],o.mutationId=0,o}var r=t.prototype;return r.build=function(o,i,c){var p=new PAe({mutationCache:this,mutationId:++this.mutationId,options:o.defaultMutationOptions(i),state:c,defaultOptions:i.mutationKey?o.getMutationDefaults(i.mutationKey):void 0,meta:i.meta});return this.add(p),p},r.add=function(o){this.mutations.push(o),this.notify(o)},r.remove=function(o){this.mutations=this.mutations.filter(function(i){return i!==o}),o.cancel(),this.notify(o)},r.clear=function(){var o=this;no.batch(function(){o.mutations.forEach(function(i){o.remove(i)})})},r.getAll=function(){return this.mutations},r.find=function(o){return typeof o.exact>"u"&&(o.exact=!0),this.mutations.find(function(i){return Rve(o,i)})},r.findAll=function(o){return this.mutations.filter(function(i){return Rve(o,i)})},r.notify=function(o){var i=this;no.batch(function(){i.listeners.forEach(function(c){c(o)})})},r.onFocus=function(){this.resumePausedMutations()},r.onOnline=function(){this.resumePausedMutations()},r.resumePausedMutations=function(){var o=this.mutations.filter(function(i){return i.state.isPaused});return no.batch(function(){return o.reduce(function(i,c){return i.then(function(){return c.continue().catch(Xi)})},Promise.resolve())})},t}(g1);function TAe(){return{onFetch:function(t){t.fetchFn=function(){var r,n,o,i,c,p,m=(r=t.fetchOptions)==null||(n=r.meta)==null?void 0:n.refetchPage,v=(o=t.fetchOptions)==null||(i=o.meta)==null?void 0:i.fetchMore,b=v?.pageParam,_=v?.direction==="forward",I=v?.direction==="backward",R=((c=t.state.data)==null?void 0:c.pages)||[],A=((p=t.state.data)==null?void 0:p.pageParams)||[],F=xY(),D=F?.signal,L=A,H=!1,q=t.options.queryFn||function(){return Promise.reject("Missing queryFn")},Q=function(Ee,Ne,Ae,Ze){return L=Ze?[Ne].concat(L):[].concat(L,[Ne]),Ze?[Ae].concat(Ee):[].concat(Ee,[Ae])},re=function(Ee,Ne,Ae,Ze){if(H)return Promise.reject("Cancelled");if(typeof Ae>"u"&&!Ne&&Ee.length)return Promise.resolve(Ee);var $e={queryKey:t.queryKey,signal:D,pageParam:Ae,meta:t.meta},tt=q($e),De=Promise.resolve(tt).then(function(Te){return Q(Ee,Ae,Te,Ze)});if(Z$(tt)){var Pe=De;Pe.cancel=tt.cancel}return De},ee;if(!R.length)ee=re([]);else if(_){var ne=typeof b<"u",fe=ne?b:jAe(t.options,R);ee=re(R,ne,fe)}else if(I){var ce=typeof b<"u",ve=ce?b:Lsr(t.options,R);ee=re(R,ce,ve,!0)}else(function(){L=[];var be=typeof t.options.getNextPageParam>"u",Ee=m&&R[0]?m(R[0],0,R):!0;ee=Ee?re([],be,A[0]):Promise.resolve(Q([],A[0],R[0]));for(var Ne=function($e){ee=ee.then(function(tt){var De=m&&R[$e]?m(R[$e],$e,R):!0;if(De){var Pe=be?A[$e]:jAe(t.options,tt);return re(tt,be,Pe)}return Promise.resolve(Q(tt,A[$e],R[$e]))})},Ae=1;Ae"u"&&(b.revert=!0);var _=no.batch(function(){return c.queryCache.findAll(m).map(function(I){return I.cancel(b)})});return Promise.all(_).then(Xi).catch(Xi)},t.invalidateQueries=function(n,o,i){var c,p,m,v=this,b=y1(n,o,i),_=b[0],I=b[1],R=Qr({},_,{active:(c=(p=_.refetchActive)!=null?p:_.active)!=null?c:!0,inactive:(m=_.refetchInactive)!=null?m:!1});return no.batch(function(){return v.queryCache.findAll(_).forEach(function(A){A.invalidate()}),v.refetchQueries(R,I)})},t.refetchQueries=function(n,o,i){var c=this,p=y1(n,o,i),m=p[0],v=p[1],b=no.batch(function(){return c.queryCache.findAll(m).map(function(I){return I.fetch(void 0,Qr({},v,{meta:{refetchPage:m?.refetchPage}}))})}),_=Promise.all(b).then(Xi);return v?.throwOnError||(_=_.catch(Xi)),_},t.fetchQuery=function(n,o,i){var c=NP(n,o,i),p=this.defaultQueryOptions(c);typeof p.retry>"u"&&(p.retry=!1);var m=this.queryCache.build(this,p);return m.isStaleByTime(p.staleTime)?m.fetch(p):Promise.resolve(m.state.data)},t.prefetchQuery=function(n,o,i){return this.fetchQuery(n,o,i).then(Xi).catch(Xi)},t.fetchInfiniteQuery=function(n,o,i){var c=NP(n,o,i);return c.behavior=TAe(),this.fetchQuery(c)},t.prefetchInfiniteQuery=function(n,o,i){return this.fetchInfiniteQuery(n,o,i).then(Xi).catch(Xi)},t.cancelMutations=function(){var n=this,o=no.batch(function(){return n.mutationCache.getAll().map(function(i){return i.cancel()})});return Promise.all(o).then(Xi).catch(Xi)},t.resumePausedMutations=function(){return this.getMutationCache().resumePausedMutations()},t.executeMutation=function(n){return this.mutationCache.build(this,n).execute()},t.getQueryCache=function(){return this.queryCache},t.getMutationCache=function(){return this.mutationCache},t.getDefaultOptions=function(){return this.defaultOptions},t.setDefaultOptions=function(n){this.defaultOptions=n},t.setQueryDefaults=function(n,o){var i=this.queryDefaults.find(function(c){return N3(n)===N3(c.queryKey)});i?i.defaultOptions=o:this.queryDefaults.push({queryKey:n,defaultOptions:o})},t.getQueryDefaults=function(n){var o;return n?(o=this.queryDefaults.find(function(i){return $$(n,i.queryKey)}))==null?void 0:o.defaultOptions:void 0},t.setMutationDefaults=function(n,o){var i=this.mutationDefaults.find(function(c){return N3(n)===N3(c.mutationKey)});i?i.defaultOptions=o:this.mutationDefaults.push({mutationKey:n,defaultOptions:o})},t.getMutationDefaults=function(n){var o;return n?(o=this.mutationDefaults.find(function(i){return $$(n,i.mutationKey)}))==null?void 0:o.defaultOptions:void 0},t.defaultQueryOptions=function(n){if(n?._defaulted)return n;var o=Qr({},this.defaultOptions.queries,this.getQueryDefaults(n?.queryKey),n,{_defaulted:!0});return!o.queryHash&&o.queryKey&&(o.queryHash=V$(o.queryKey,o)),o},t.defaultQueryObserverOptions=function(n){return this.defaultQueryOptions(n)},t.defaultMutationOptions=function(n){return n?._defaulted?n:Qr({},this.defaultOptions.mutations,this.getMutationDefaults(n?.mutationKey),n,{_defaulted:!0})},t.clear=function(){this.queryCache.clear(),this.mutationCache.clear()},e}();var Bve=function(e){hc(t,e);function t(n,o){var i;return i=e.call(this)||this,i.client=n,i.options=o,i.trackedProps=[],i.selectError=null,i.bindMethods(),i.setOptions(o),i}var r=t.prototype;return r.bindMethods=function(){this.remove=this.remove.bind(this),this.refetch=this.refetch.bind(this)},r.onSubscribe=function(){this.listeners.length===1&&(this.currentQuery.addObserver(this),CAe(this.currentQuery,this.options)&&this.executeFetch(),this.updateTimers())},r.onUnsubscribe=function(){this.listeners.length||this.destroy()},r.shouldFetchOnReconnect=function(){return Fve(this.currentQuery,this.options,this.options.refetchOnReconnect)},r.shouldFetchOnWindowFocus=function(){return Fve(this.currentQuery,this.options,this.options.refetchOnWindowFocus)},r.destroy=function(){this.listeners=[],this.clearTimers(),this.currentQuery.removeObserver(this)},r.setOptions=function(o,i){var c=this.options,p=this.currentQuery;if(this.options=this.client.defaultQueryObserverOptions(o),typeof this.options.enabled<"u"&&typeof this.options.enabled!="boolean")throw new Error("Expected enabled to be a boolean");this.options.queryKey||(this.options.queryKey=c.queryKey),this.updateQuery();var m=this.hasListeners();m&&MAe(this.currentQuery,p,this.options,c)&&this.executeFetch(),this.updateResult(i),m&&(this.currentQuery!==p||this.options.enabled!==c.enabled||this.options.staleTime!==c.staleTime)&&this.updateStaleTimeout();var v=this.computeRefetchInterval();m&&(this.currentQuery!==p||this.options.enabled!==c.enabled||v!==this.currentRefetchInterval)&&this.updateRefetchInterval(v)},r.getOptimisticResult=function(o){var i=this.client.defaultQueryObserverOptions(o),c=this.client.getQueryCache().build(this.client,i);return this.createResult(c,i)},r.getCurrentResult=function(){return this.currentResult},r.trackResult=function(o,i){var c=this,p={},m=function(b){c.trackedProps.includes(b)||c.trackedProps.push(b)};return Object.keys(o).forEach(function(v){Object.defineProperty(p,v,{configurable:!1,enumerable:!0,get:function(){return m(v),o[v]}})}),(i.useErrorBoundary||i.suspense)&&m("error"),p},r.getNextResult=function(o){var i=this;return new Promise(function(c,p){var m=i.subscribe(function(v){v.isFetching||(m(),v.isError&&o?.throwOnError?p(v.error):c(v))})})},r.getCurrentQuery=function(){return this.currentQuery},r.remove=function(){this.client.getQueryCache().remove(this.currentQuery)},r.refetch=function(o){return this.fetch(Qr({},o,{meta:{refetchPage:o?.refetchPage}}))},r.fetchOptimistic=function(o){var i=this,c=this.client.defaultQueryObserverOptions(o),p=this.client.getQueryCache().build(this.client,c);return p.fetch().then(function(){return i.createResult(p,c)})},r.fetch=function(o){var i=this;return this.executeFetch(o).then(function(){return i.updateResult(),i.currentResult})},r.executeFetch=function(o){this.updateQuery();var i=this.currentQuery.fetch(this.options,o);return o?.throwOnError||(i=i.catch(Xi)),i},r.updateStaleTimeout=function(){var o=this;if(this.clearStaleTimeout(),!(s_||this.currentResult.isStale||!H$(this.options.staleTime))){var i=wY(this.currentResult.dataUpdatedAt,this.options.staleTime),c=i+1;this.staleTimeoutId=setTimeout(function(){o.currentResult.isStale||o.updateResult()},c)}},r.computeRefetchInterval=function(){var o;return typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.currentResult.data,this.currentQuery):(o=this.options.refetchInterval)!=null?o:!1},r.updateRefetchInterval=function(o){var i=this;this.clearRefetchInterval(),this.currentRefetchInterval=o,!(s_||this.options.enabled===!1||!H$(this.currentRefetchInterval)||this.currentRefetchInterval===0)&&(this.refetchIntervalId=setInterval(function(){(i.options.refetchIntervalInBackground||L3.isFocused())&&i.executeFetch()},this.currentRefetchInterval))},r.updateTimers=function(){this.updateStaleTimeout(),this.updateRefetchInterval(this.computeRefetchInterval())},r.clearTimers=function(){this.clearStaleTimeout(),this.clearRefetchInterval()},r.clearStaleTimeout=function(){this.staleTimeoutId&&(clearTimeout(this.staleTimeoutId),this.staleTimeoutId=void 0)},r.clearRefetchInterval=function(){this.refetchIntervalId&&(clearInterval(this.refetchIntervalId),this.refetchIntervalId=void 0)},r.createResult=function(o,i){var c=this.currentQuery,p=this.options,m=this.currentResult,v=this.currentResultState,b=this.currentResultOptions,_=o!==c,I=_?o.state:this.currentQueryInitialState,R=_?this.currentResult:this.previousQueryResult,A=o.state,F=A.dataUpdatedAt,D=A.error,L=A.errorUpdatedAt,H=A.isFetching,q=A.status,Q=!1,re=!1,ee;if(i.optimisticResults){var ne=this.hasListeners(),fe=!ne&&CAe(o,i),ce=ne&&MAe(o,c,i,p);(fe||ce)&&(H=!0,F||(q="loading"))}if(i.keepPreviousData&&!A.dataUpdateCount&&R?.isSuccess&&q!=="error")ee=R.data,F=R.dataUpdatedAt,q=R.status,Q=!0;else if(i.select&&typeof A.data<"u")if(m&&A.data===v?.data&&i.select===this.selectFn)ee=this.selectResult;else try{this.selectFn=i.select,ee=i.select(A.data),i.structuralSharing!==!1&&(ee=LP(m?.data,ee)),this.selectResult=ee,this.selectError=null}catch(ge){l_().error(ge),this.selectError=ge}else ee=A.data;if(typeof i.placeholderData<"u"&&typeof ee>"u"&&(q==="loading"||q==="idle")){var ve;if(m?.isPlaceholderData&&i.placeholderData===b?.placeholderData)ve=m.data;else if(ve=typeof i.placeholderData=="function"?i.placeholderData():i.placeholderData,i.select&&typeof ve<"u")try{ve=i.select(ve),i.structuralSharing!==!1&&(ve=LP(m?.data,ve)),this.selectError=null}catch(ge){l_().error(ge),this.selectError=ge}typeof ve<"u"&&(q="success",ee=ve,re=!0)}this.selectError&&(D=this.selectError,ee=this.selectResult,L=Date.now(),q="error");var Se={status:q,isLoading:q==="loading",isSuccess:q==="success",isError:q==="error",isIdle:q==="idle",data:ee,dataUpdatedAt:F,error:D,errorUpdatedAt:L,failureCount:A.fetchFailureCount,errorUpdateCount:A.errorUpdateCount,isFetched:A.dataUpdateCount>0||A.errorUpdateCount>0,isFetchedAfterMount:A.dataUpdateCount>I.dataUpdateCount||A.errorUpdateCount>I.errorUpdateCount,isFetching:H,isRefetching:H&&q!=="loading",isLoadingError:q==="error"&&A.dataUpdatedAt===0,isPlaceholderData:re,isPreviousData:Q,isRefetchError:q==="error"&&A.dataUpdatedAt!==0,isStale:zve(o,i),refetch:this.refetch,remove:this.remove};return Se},r.shouldNotifyListeners=function(o,i){if(!i)return!0;var c=this.options,p=c.notifyOnChangeProps,m=c.notifyOnChangePropsExclusions;if(!p&&!m||p==="tracked"&&!this.trackedProps.length)return!0;var v=p==="tracked"?this.trackedProps:p;return Object.keys(o).some(function(b){var _=b,I=o[_]!==i[_],R=v?.some(function(F){return F===b}),A=m?.some(function(F){return F===b});return I&&!A&&(!v||R)})},r.updateResult=function(o){var i=this.currentResult;if(this.currentResult=this.createResult(this.currentQuery,this.options),this.currentResultState=this.currentQuery.state,this.currentResultOptions=this.options,!OAe(this.currentResult,i)){var c={cache:!0};o?.listeners!==!1&&this.shouldNotifyListeners(this.currentResult,i)&&(c.listeners=!0),this.notify(Qr({},c,o))}},r.updateQuery=function(){var o=this.client.getQueryCache().build(this.client,this.options);if(o!==this.currentQuery){var i=this.currentQuery;this.currentQuery=o,this.currentQueryInitialState=o.state,this.previousQueryResult=this.currentResult,this.hasListeners()&&(i?.removeObserver(this),o.addObserver(this))}},r.onQueryUpdate=function(o){var i={};o.type==="success"?i.onSuccess=!0:o.type==="error"&&!BP(o.error)&&(i.onError=!0),this.updateResult(i),this.hasListeners()&&this.updateTimers()},r.notify=function(o){var i=this;no.batch(function(){o.onSuccess?(i.options.onSuccess==null||i.options.onSuccess(i.currentResult.data),i.options.onSettled==null||i.options.onSettled(i.currentResult.data,null)):o.onError&&(i.options.onError==null||i.options.onError(i.currentResult.error),i.options.onSettled==null||i.options.onSettled(void 0,i.currentResult.error)),o.listeners&&i.listeners.forEach(function(c){c(i.currentResult)}),o.cache&&i.client.getQueryCache().notify({query:i.currentQuery,type:"observerResultsUpdated"})})},t}(g1);function Fsr(e,t){return t.enabled!==!1&&!e.state.dataUpdatedAt&&!(e.state.status==="error"&&t.retryOnMount===!1)}function CAe(e,t){return Fsr(e,t)||e.state.dataUpdatedAt>0&&Fve(e,t,t.refetchOnMount)}function Fve(e,t,r){if(t.enabled!==!1){var n=typeof r=="function"?r(e):r;return n==="always"||n!==!1&&zve(e,t)}return!1}function MAe(e,t,r,n){return r.enabled!==!1&&(e!==t||n.enabled===!1)&&(!r.suspense||e.state.status!=="error")&&zve(e,r)}function zve(e,t){return e.isStaleByTime(t.staleTime)}var AAe=k(Ro()),DAe=AAe.default.unstable_batchedUpdates;no.setBatchNotifyFunction(DAe);var RAe=console;Lve(RAe);var F3=k(z()),NAe=F3.default.createContext(void 0),LAe=F3.default.createContext(!1);function FAe(e){return e&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=NAe),window.ReactQueryClientContext):NAe}var Wve=function(){var t=F3.default.useContext(FAe(F3.default.useContext(LAe)));if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},Hr=function(t){var r=t.client,n=t.contextSharing,o=n===void 0?!1:n,i=t.children;F3.default.useEffect(function(){return r.mount(),function(){r.unmount()}},[r]);var c=FAe(o);return F3.default.createElement(LAe.Provider,{value:o},F3.default.createElement(c.Provider,{value:r},i))};var Hve=k(z());function Bsr(){var e=!1;return{clearReset:function(){e=!1},reset:function(){e=!0},isReset:function(){return e}}}var zsr=Hve.default.createContext(Bsr()),BAe=function(){return Hve.default.useContext(zsr)};function zAe(e,t,r){return typeof t=="function"?t.apply(void 0,r):typeof t=="boolean"?t:!!e}var zP=k(z());function WAe(e,t){var r=zP.default.useRef(!1),n=zP.default.useState(0),o=n[1],i=Wve(),c=BAe(),p=i.defaultQueryObserverOptions(e);p.optimisticResults=!0,p.onError&&(p.onError=no.batchCalls(p.onError)),p.onSuccess&&(p.onSuccess=no.batchCalls(p.onSuccess)),p.onSettled&&(p.onSettled=no.batchCalls(p.onSettled)),p.suspense&&(typeof p.staleTime!="number"&&(p.staleTime=1e3),p.cacheTime===0&&(p.cacheTime=1)),(p.suspense||p.useErrorBoundary)&&(c.isReset()||(p.retryOnMount=!1));var m=zP.default.useState(function(){return new t(i,p)}),v=m[0],b=v.getOptimisticResult(p);if(zP.default.useEffect(function(){r.current=!0,c.clearReset();var _=v.subscribe(no.batchCalls(function(){r.current&&o(function(I){return I+1})}));return v.updateResult(),function(){r.current=!1,_()}},[c,v]),zP.default.useEffect(function(){v.setOptions(p,{listeners:!1})},[p,v]),p.suspense&&b.isLoading)throw v.fetchOptimistic(p).then(function(_){var I=_.data;p.onSuccess==null||p.onSuccess(I),p.onSettled==null||p.onSettled(I,null)}).catch(function(_){c.clearReset(),p.onError==null||p.onError(_),p.onSettled==null||p.onSettled(void 0,_)});if(b.isError&&!c.isReset()&&!b.isFetching&&zAe(p.suspense,p.useErrorBoundary,[b.error,v.getCurrentQuery()]))throw b.error;return p.notifyOnChangeProps==="tracked"&&(b=v.trackResult(b,p)),b}function tn(e,t,r){var n=NP(e,t,r);return WAe(n,Bve)}var B3=k(z());function u_(e){let t=e.className||"ts4nfdi-breadcrumb-style";return B3.default.createElement(B3.default.Fragment,null,B3.default.createElement("span",{className:t},B3.default.createElement("span",{onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(e.ontologyId||"",void 0,void 0)},role:"button",tabIndex:0,onKeyDown:r=>{r.key==="Enter"&&r.currentTarget.click()}},B3.default.createElement(kl,{className:e.ontologyId?"breadcrumb clickable-breadcrumb":"breadcrumb",color:e.colorFirst||"primary"},e.ontologyName?e.ontologyName.toUpperCase():"No ontology name available")),"\xA0",B3.default.createElement(pr,{type:"arrowRight"}),"\xA0",B3.default.createElement(kl,{className:"breadcrumb",color:e.colorSecond||"success"},e.shortForm?e.shortForm.toUpperCase():"No short form available")))}function VAe(e){let{api:t,parameter:r,hasShortSelectedLabel:n,allowCustomTerms:o,selectionChangedEvent:i,preselected:c,placeholder:p,singleSelection:m,singleSuggestionRow:v,ts4nfdiGateway:b=!1,showApiSource:_=!0,className:I,useLegacy:R=!1,...A}=e,F=new Kr(t),D=Zg(),L=$U(),[H,q]=(0,li.useState)(""),[Q,re]=(0,li.useState)([]),[ee,ne]=(0,li.useState)([]),fe=I||"ts4nfdi-autocomplete-style",ce=(Pe,Te)=>{let{label:Ce,value:Qe}=Pe,xt=L.indexOf(Qe.type==="class"?L[5]:Qe.type==="individual"?L[3]:Qe.type==="property"?L[1]:""),Je=D[xt];if(o&&Qe.iri=="")return Ce;let at=Qe.type==="ontology"?"Prefix: "+Qe.ontology_name:"Prefix > Short form: "+Qe.ontology_name+" > "+Qe.short_form,It=`Type: ${Qe.type} + not configured. This callback must be implemented to handle pagination changes`);return s(Vt,{token:"euiBasicTable.tablePagination",default:"Pagination for table: {tableCaption}",values:{tableCaption:p}},function(v){return s(oAe,{pagination:c,onPageSizeChange:n.onPageSizeChange.bind(n),onPageChange:n.onPageChange.bind(n),"aria-controls":n.tableId,"aria-label":v})})}}}],[{key:"getDerivedStateFromProps",value:function(n,o){if(!n.selection)return{selection:[]};var i=n.selection.selected,c=i??o.selection,p=n.itemId,m=n.items,v=c.filter(function(I){return m.findIndex(function(R){return AP(R,p)===AP(I,p)})!==-1});if(v.length!==c.length){var b,_;return(b=(_=n.selection).onSelectionChange)===null||b===void 0||b.call(_,v),{selection:v}}return i?{selection:v}:null}}])}(RP.Component);cy(R3,"contextType",DV);cy(R3,"defaultProps",{tableLayout:"fixed",noItemsMessage:s(Vt,{token:"euiBasicTable.noItemsMessage",default:"No items found"})});R3.propTypes={className:Ke.default.string,"aria-label":Ke.default.string,"data-test-subj":Ke.default.string,css:Ke.default.any,itemId:Ke.default.oneOfType([Ke.default.string.isRequired,Ke.default.number.isRequired,Ke.default.func.isRequired]),itemIdToExpandedRowMap:Ke.default.shape({}),items:Ke.default.arrayOf(Ke.default.any.isRequired),cellProps:Ke.default.oneOfType([Ke.default.any.isRequired,Ke.default.func.isRequired]),columns:Ke.default.arrayOf(Ke.default.oneOfType([Ke.default.shape({field:Ke.default.oneOfType([Ke.default.any.isRequired,Ke.default.any.isRequired]).isRequired,name:Ke.default.node.isRequired,description:Ke.default.string,dataType:Ke.default.oneOf(["auto","string","number","boolean","date"]),width:Ke.default.string,sortable:Ke.default.oneOfType([Ke.default.bool.isRequired,Ke.default.func.isRequired]),readOnly:Ke.default.bool,align:Ke.default.any,textOnly:Ke.default.bool,truncateText:Ke.default.oneOfType([Ke.default.bool.isRequired,Ke.default.shape({lines:Ke.default.number.isRequired}).isRequired]),mobileOptions:Ke.default.shape({render:Ke.default.func}),render:Ke.default.func,footer:Ke.default.oneOfType([Ke.default.string.isRequired,Ke.default.element.isRequired,Ke.default.func.isRequired]),isExpander:Ke.default.bool,className:Ke.default.string,"aria-label":Ke.default.string,"data-test-subj":Ke.default.string,css:Ke.default.any}).isRequired,Ke.default.shape({className:Ke.default.string,"aria-label":Ke.default.string,"data-test-subj":Ke.default.string,css:Ke.default.any,render:Ke.default.func.isRequired,name:Ke.default.node,sortable:Ke.default.func}).isRequired,Ke.default.shape({actions:Ke.default.arrayOf(Ke.default.oneOfType([Ke.default.shape({type:Ke.default.oneOfType([Ke.default.oneOf(["button"]),Ke.default.oneOf(["icon"]).isRequired]),color:Ke.default.oneOfType([Ke.default.any.isRequired,Ke.default.func.isRequired]),name:Ke.default.oneOfType([Ke.default.node.isRequired,Ke.default.func.isRequired]).isRequired,description:Ke.default.oneOfType([Ke.default.string.isRequired,Ke.default.func.isRequired]).isRequired,onClick:Ke.default.func,href:Ke.default.oneOfType([Ke.default.string.isRequired,Ke.default.func.isRequired]),target:Ke.default.string,available:Ke.default.func,enabled:Ke.default.func,"data-test-subj":Ke.default.oneOfType([Ke.default.string.isRequired,Ke.default.func.isRequired]),isPrimary:Ke.default.bool,showOnHover:Ke.default.bool,icon:Ke.default.oneOfType([Ke.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","analyzeEvent","annotation","anomalyChart","anomalySwimLane","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","article","asterisk","at","auditbeatApp","beaker","bell","bellSlash","beta","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","changePointDetection","check","checkInCircleFilled","cheer","classificationJob","clickLeft","clickRight","clock","clockCounter","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInCircle","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","diff","discoverApp","discuss","document","documentEdit","documentation","documents","dot","dotInCircle","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","endpoint","eql","eraser","error","errorFilled","esqlVis","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","fieldStatistics","filebeatApp","filter","filterExclude","filterIgnore","filterInclude","filterInCircle","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","grabOmnidirectional","gradient","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","index","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","indexTemporary","infinity","inputOutput","inspect","invert","ip","key","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","launch","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logPatternAnalysis","logRateAnalysis","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoVulnerabilityManagement","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","minusInSquare","mobile","monitoringApp","moon","move","namespace","nested","newChat","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","palette","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipeBreaks","pipelineApp","pipeNoBreaks","pivot","play","playFilled","plus","plusInCircle","plusInCircleFilled","plusInSquare","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","singleMetricViewer","snowflake","sortAscending","sortDescending","sortDown","sortLeft","sortRight","sortUp","sortable","spaces","spacesApp","sparkles","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelineWithArrow","timelionApp","timeRefresh","timeslider","training","transitionLeftIn","transitionLeftOut","transitionTopIn","transitionTopOut","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","vulnerabilityManagementApp","warning","warningFilled","alert","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDimension","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenSemanticText","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable","tokenVectorDense","tokenDenseVector","tokenVectorSparse"]).isRequired,Ke.default.func.isRequired])}).isRequired,Ke.default.shape({render:Ke.default.func.isRequired,available:Ke.default.func,enabled:Ke.default.func}).isRequired]).isRequired).isRequired,name:Ke.default.node}).isRequired]).isRequired),error:Ke.default.string,tableCaption:Ke.default.string,rowHeader:Ke.default.string,loading:Ke.default.bool,noItemsMessage:Ke.default.node,onChange:Ke.default.func,pagination:Ke.default.oneOfType([Ke.default.oneOf([void 0]),Ke.default.shape({pageIndex:Ke.default.number.isRequired,pageSize:Ke.default.number,totalItemCount:Ke.default.number.isRequired,pageSizeOptions:Ke.default.arrayOf(Ke.default.number.isRequired),showPerPageOptions:Ke.default.bool})]),rowProps:Ke.default.oneOfType([Ke.default.any.isRequired,Ke.default.func.isRequired]),selection:Ke.default.shape({onSelectionChange:Ke.default.func,selectable:Ke.default.func,selectableMessage:Ke.default.func,initialSelected:Ke.default.arrayOf(Ke.default.any.isRequired),selected:Ke.default.arrayOf(Ke.default.any.isRequired)}),sorting:Ke.default.shape({sort:Ke.default.shape({field:Ke.default.any.isRequired,direction:Ke.default.oneOf(["asc","desc"]).isRequired}),allowNeutralSort:Ke.default.bool,enableAllColumns:Ke.default.bool,readOnly:Ke.default.bool}),tableLayout:Ke.default.oneOf(["fixed","auto"])};var g1=function(){function e(){this.listeners=[]}var t=e.prototype;return t.subscribe=function(n){var o=this,i=n||function(){};return this.listeners.push(i),this.onSubscribe(),function(){o.listeners=o.listeners.filter(function(c){return c!==i}),o.onUnsubscribe()}},t.hasListeners=function(){return this.listeners.length>0},t.onSubscribe=function(){},t.onUnsubscribe=function(){},e}();var s_=typeof window>"u";function Xi(){}function bAe(e,t){return typeof e=="function"?e(t):e}function H$(e){return typeof e=="number"&&e>=0&&e!==1/0}function W$(e){return Array.isArray(e)?e:[e]}function wY(e,t){return Math.max(e+(t||0)-Date.now(),0)}function NP(e,t,r){return OY(e)?typeof t=="function"?Qr({},r,{queryKey:e,queryFn:t}):Qr({},t,{queryKey:e}):e}function y1(e,t,r){return OY(e)?[Qr({},t,{queryKey:e}),r]:[e||{},t]}function jsr(e,t){if(e===!0&&t===!0||e==null&&t==null)return"all";if(e===!1&&t===!1)return"none";var r=e??!t;return r?"active":"inactive"}function Dve(e,t){var r=e.active,n=e.exact,o=e.fetching,i=e.inactive,c=e.predicate,p=e.queryKey,m=e.stale;if(OY(p)){if(n){if(t.queryHash!==V$(p,t.options))return!1}else if(!$$(t.queryKey,p))return!1}var v=jsr(r,i);if(v==="none")return!1;if(v!=="all"){var b=t.isActive();if(v==="active"&&!b||v==="inactive"&&b)return!1}return!(typeof m=="boolean"&&t.isStale()!==m||typeof o=="boolean"&&t.isFetching()!==o||c&&!c(t))}function Rve(e,t){var r=e.exact,n=e.fetching,o=e.predicate,i=e.mutationKey;if(OY(i)){if(!t.options.mutationKey)return!1;if(r){if(N3(t.options.mutationKey)!==N3(i))return!1}else if(!$$(t.options.mutationKey,i))return!1}return!(typeof n=="boolean"&&t.state.status==="loading"!==n||o&&!o(t))}function V$(e,t){var r=t?.queryKeyHashFn||N3;return r(e)}function N3(e){var t=W$(e);return Tsr(t)}function Tsr(e){return JSON.stringify(e,function(t,r){return Ave(r)?Object.keys(r).sort().reduce(function(n,o){return n[o]=r[o],n},{}):r})}function $$(e,t){return wAe(W$(e),W$(t))}function wAe(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?!Object.keys(t).some(function(r){return!wAe(e[r],t[r])}):!1}function LP(e,t){if(e===t)return e;var r=Array.isArray(e)&&Array.isArray(t);if(r||Ave(e)&&Ave(t)){for(var n=r?e.length:Object.keys(e).length,o=r?t:Object.keys(t),i=o.length,c=r?[]:{},p=0,m=0;m"u")return!0;var r=t.prototype;return!(!yAe(r)||!r.hasOwnProperty("isPrototypeOf"))}function yAe(e){return Object.prototype.toString.call(e)==="[object Object]"}function OY(e){return typeof e=="string"||Array.isArray(e)}function xAe(e){return new Promise(function(t){setTimeout(t,e)})}function Nve(e){Promise.resolve().then(e).catch(function(t){return setTimeout(function(){throw t})})}function xY(){if(typeof AbortController=="function")return new AbortController}var Csr=function(e){hc(t,e);function t(){var n;return n=e.call(this)||this,n.setup=function(o){var i;if(!s_&&((i=window)!=null&&i.addEventListener)){var c=function(){return o()};return window.addEventListener("visibilitychange",c,!1),window.addEventListener("focus",c,!1),function(){window.removeEventListener("visibilitychange",c),window.removeEventListener("focus",c)}}},n}var r=t.prototype;return r.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},r.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},r.setEventListener=function(o){var i,c=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(p){typeof p=="boolean"?c.setFocused(p):c.onFocus()})},r.setFocused=function(o){this.focused=o,o&&this.onFocus()},r.onFocus=function(){this.listeners.forEach(function(o){o()})},r.isFocused=function(){return typeof this.focused=="boolean"?this.focused:typeof document>"u"?!0:[void 0,"visible","prerender"].includes(document.visibilityState)},t}(g1),L3=new Csr;var Msr=function(e){hc(t,e);function t(){var n;return n=e.call(this)||this,n.setup=function(o){var i;if(!s_&&((i=window)!=null&&i.addEventListener)){var c=function(){return o()};return window.addEventListener("online",c,!1),window.addEventListener("offline",c,!1),function(){window.removeEventListener("online",c),window.removeEventListener("offline",c)}}},n}var r=t.prototype;return r.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},r.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},r.setEventListener=function(o){var i,c=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(p){typeof p=="boolean"?c.setOnline(p):c.onOnline()})},r.setOnline=function(o){this.online=o,o&&this.onOnline()},r.onOnline=function(){this.listeners.forEach(function(o){o()})},r.isOnline=function(){return typeof this.online=="boolean"?this.online:typeof navigator>"u"||typeof navigator.onLine>"u"?!0:navigator.onLine},t}(g1),FP=new Msr;function Asr(e){return Math.min(1e3*Math.pow(2,e),3e4)}function Z$(e){return typeof e?.cancel=="function"}var _Ae=function(t){this.revert=t?.revert,this.silent=t?.silent};function BP(e){return e instanceof _Ae}var _Y=function(t){var r=this,n=!1,o,i,c,p;this.abort=t.abort,this.cancel=function(I){return o?.(I)},this.cancelRetry=function(){n=!0},this.continueRetry=function(){n=!1},this.continue=function(){return i?.()},this.failureCount=0,this.isPaused=!1,this.isResolved=!1,this.isTransportCancelable=!1,this.promise=new Promise(function(I,R){c=I,p=R});var m=function(R){r.isResolved||(r.isResolved=!0,t.onSuccess==null||t.onSuccess(R),i?.(),c(R))},v=function(R){r.isResolved||(r.isResolved=!0,t.onError==null||t.onError(R),i?.(),p(R))},b=function(){return new Promise(function(R){i=R,r.isPaused=!0,t.onPause==null||t.onPause()}).then(function(){i=void 0,r.isPaused=!1,t.onContinue==null||t.onContinue()})},_=function I(){if(!r.isResolved){var R;try{R=t.fn()}catch(A){R=Promise.reject(A)}o=function(F){if(!r.isResolved&&(v(new _Ae(F)),r.abort==null||r.abort(),Z$(R)))try{R.cancel()}catch{}},r.isTransportCancelable=Z$(R),Promise.resolve(R).then(m).catch(function(A){var F,D;if(!r.isResolved){var L=(F=t.retry)!=null?F:3,H=(D=t.retryDelay)!=null?D:Asr,q=typeof H=="function"?H(r.failureCount,A):H,Q=L===!0||typeof L=="number"&&r.failureCount"u"&&(p.exact=!0),this.queries.find(function(m){return Dve(p,m)})},r.findAll=function(o,i){var c=y1(o,i),p=c[0];return Object.keys(p).length>0?this.queries.filter(function(m){return Dve(p,m)}):this.queries},r.notify=function(o){var i=this;no.batch(function(){i.listeners.forEach(function(c){c(o)})})},r.onFocus=function(){var o=this;no.batch(function(){o.queries.forEach(function(i){i.onFocus()})})},r.onOnline=function(){var o=this;no.batch(function(){o.queries.forEach(function(i){i.onOnline()})})},t}(g1);var PAe=function(){function e(r){this.options=Qr({},r.defaultOptions,r.options),this.mutationId=r.mutationId,this.mutationCache=r.mutationCache,this.observers=[],this.state=r.state||Rsr(),this.meta=r.meta}var t=e.prototype;return t.setState=function(n){this.dispatch({type:"setState",state:n})},t.addObserver=function(n){this.observers.indexOf(n)===-1&&this.observers.push(n)},t.removeObserver=function(n){this.observers=this.observers.filter(function(o){return o!==n})},t.cancel=function(){return this.retryer?(this.retryer.cancel(),this.retryer.promise.then(Xi).catch(Xi)):Promise.resolve()},t.continue=function(){return this.retryer?(this.retryer.continue(),this.retryer.promise):this.execute()},t.execute=function(){var n=this,o,i=this.state.status==="loading",c=Promise.resolve();return i||(this.dispatch({type:"loading",variables:this.options.variables}),c=c.then(function(){n.mutationCache.config.onMutate==null||n.mutationCache.config.onMutate(n.state.variables,n)}).then(function(){return n.options.onMutate==null?void 0:n.options.onMutate(n.state.variables)}).then(function(p){p!==n.state.context&&n.dispatch({type:"loading",context:p,variables:n.state.variables})})),c.then(function(){return n.executeMutation()}).then(function(p){o=p,n.mutationCache.config.onSuccess==null||n.mutationCache.config.onSuccess(o,n.state.variables,n.state.context,n)}).then(function(){return n.options.onSuccess==null?void 0:n.options.onSuccess(o,n.state.variables,n.state.context)}).then(function(){return n.options.onSettled==null?void 0:n.options.onSettled(o,null,n.state.variables,n.state.context)}).then(function(){return n.dispatch({type:"success",data:o}),o}).catch(function(p){return n.mutationCache.config.onError==null||n.mutationCache.config.onError(p,n.state.variables,n.state.context,n),l_().error(p),Promise.resolve().then(function(){return n.options.onError==null?void 0:n.options.onError(p,n.state.variables,n.state.context)}).then(function(){return n.options.onSettled==null?void 0:n.options.onSettled(void 0,p,n.state.variables,n.state.context)}).then(function(){throw n.dispatch({type:"error",error:p}),p})})},t.executeMutation=function(){var n=this,o;return this.retryer=new _Y({fn:function(){return n.options.mutationFn?n.options.mutationFn(n.state.variables):Promise.reject("No mutationFn found")},onFail:function(){n.dispatch({type:"failed"})},onPause:function(){n.dispatch({type:"pause"})},onContinue:function(){n.dispatch({type:"continue"})},retry:(o=this.options.retry)!=null?o:0,retryDelay:this.options.retryDelay}),this.retryer.promise},t.dispatch=function(n){var o=this;this.state=Nsr(this.state,n),no.batch(function(){o.observers.forEach(function(i){i.onMutationUpdate(n)}),o.mutationCache.notify(o)})},e}();function Rsr(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}function Nsr(e,t){switch(t.type){case"failed":return Qr({},e,{failureCount:e.failureCount+1});case"pause":return Qr({},e,{isPaused:!0});case"continue":return Qr({},e,{isPaused:!1});case"loading":return Qr({},e,{context:t.context,data:void 0,error:null,isPaused:!1,status:"loading",variables:t.variables});case"success":return Qr({},e,{data:t.data,error:null,status:"success",isPaused:!1});case"error":return Qr({},e,{data:void 0,error:t.error,failureCount:e.failureCount+1,isPaused:!1,status:"error"});case"setState":return Qr({},e,t.state);default:return e}}var kAe=function(e){hc(t,e);function t(n){var o;return o=e.call(this)||this,o.config=n||{},o.mutations=[],o.mutationId=0,o}var r=t.prototype;return r.build=function(o,i,c){var p=new PAe({mutationCache:this,mutationId:++this.mutationId,options:o.defaultMutationOptions(i),state:c,defaultOptions:i.mutationKey?o.getMutationDefaults(i.mutationKey):void 0,meta:i.meta});return this.add(p),p},r.add=function(o){this.mutations.push(o),this.notify(o)},r.remove=function(o){this.mutations=this.mutations.filter(function(i){return i!==o}),o.cancel(),this.notify(o)},r.clear=function(){var o=this;no.batch(function(){o.mutations.forEach(function(i){o.remove(i)})})},r.getAll=function(){return this.mutations},r.find=function(o){return typeof o.exact>"u"&&(o.exact=!0),this.mutations.find(function(i){return Rve(o,i)})},r.findAll=function(o){return this.mutations.filter(function(i){return Rve(o,i)})},r.notify=function(o){var i=this;no.batch(function(){i.listeners.forEach(function(c){c(o)})})},r.onFocus=function(){this.resumePausedMutations()},r.onOnline=function(){this.resumePausedMutations()},r.resumePausedMutations=function(){var o=this.mutations.filter(function(i){return i.state.isPaused});return no.batch(function(){return o.reduce(function(i,c){return i.then(function(){return c.continue().catch(Xi)})},Promise.resolve())})},t}(g1);function TAe(){return{onFetch:function(t){t.fetchFn=function(){var r,n,o,i,c,p,m=(r=t.fetchOptions)==null||(n=r.meta)==null?void 0:n.refetchPage,v=(o=t.fetchOptions)==null||(i=o.meta)==null?void 0:i.fetchMore,b=v?.pageParam,_=v?.direction==="forward",I=v?.direction==="backward",R=((c=t.state.data)==null?void 0:c.pages)||[],A=((p=t.state.data)==null?void 0:p.pageParams)||[],F=xY(),D=F?.signal,L=A,H=!1,q=t.options.queryFn||function(){return Promise.reject("Missing queryFn")},Q=function(Ee,Ne,Ae,Ze){return L=Ze?[Ne].concat(L):[].concat(L,[Ne]),Ze?[Ae].concat(Ee):[].concat(Ee,[Ae])},re=function(Ee,Ne,Ae,Ze){if(H)return Promise.reject("Cancelled");if(typeof Ae>"u"&&!Ne&&Ee.length)return Promise.resolve(Ee);var $e={queryKey:t.queryKey,signal:D,pageParam:Ae,meta:t.meta},tt=q($e),De=Promise.resolve(tt).then(function(Te){return Q(Ee,Ae,Te,Ze)});if(Z$(tt)){var Pe=De;Pe.cancel=tt.cancel}return De},ee;if(!R.length)ee=re([]);else if(_){var ne=typeof b<"u",fe=ne?b:jAe(t.options,R);ee=re(R,ne,fe)}else if(I){var ce=typeof b<"u",ve=ce?b:Lsr(t.options,R);ee=re(R,ce,ve,!0)}else(function(){L=[];var be=typeof t.options.getNextPageParam>"u",Ee=m&&R[0]?m(R[0],0,R):!0;ee=Ee?re([],be,A[0]):Promise.resolve(Q([],A[0],R[0]));for(var Ne=function($e){ee=ee.then(function(tt){var De=m&&R[$e]?m(R[$e],$e,R):!0;if(De){var Pe=be?A[$e]:jAe(t.options,tt);return re(tt,be,Pe)}return Promise.resolve(Q(tt,A[$e],R[$e]))})},Ae=1;Ae"u"&&(b.revert=!0);var _=no.batch(function(){return c.queryCache.findAll(m).map(function(I){return I.cancel(b)})});return Promise.all(_).then(Xi).catch(Xi)},t.invalidateQueries=function(n,o,i){var c,p,m,v=this,b=y1(n,o,i),_=b[0],I=b[1],R=Qr({},_,{active:(c=(p=_.refetchActive)!=null?p:_.active)!=null?c:!0,inactive:(m=_.refetchInactive)!=null?m:!1});return no.batch(function(){return v.queryCache.findAll(_).forEach(function(A){A.invalidate()}),v.refetchQueries(R,I)})},t.refetchQueries=function(n,o,i){var c=this,p=y1(n,o,i),m=p[0],v=p[1],b=no.batch(function(){return c.queryCache.findAll(m).map(function(I){return I.fetch(void 0,Qr({},v,{meta:{refetchPage:m?.refetchPage}}))})}),_=Promise.all(b).then(Xi);return v?.throwOnError||(_=_.catch(Xi)),_},t.fetchQuery=function(n,o,i){var c=NP(n,o,i),p=this.defaultQueryOptions(c);typeof p.retry>"u"&&(p.retry=!1);var m=this.queryCache.build(this,p);return m.isStaleByTime(p.staleTime)?m.fetch(p):Promise.resolve(m.state.data)},t.prefetchQuery=function(n,o,i){return this.fetchQuery(n,o,i).then(Xi).catch(Xi)},t.fetchInfiniteQuery=function(n,o,i){var c=NP(n,o,i);return c.behavior=TAe(),this.fetchQuery(c)},t.prefetchInfiniteQuery=function(n,o,i){return this.fetchInfiniteQuery(n,o,i).then(Xi).catch(Xi)},t.cancelMutations=function(){var n=this,o=no.batch(function(){return n.mutationCache.getAll().map(function(i){return i.cancel()})});return Promise.all(o).then(Xi).catch(Xi)},t.resumePausedMutations=function(){return this.getMutationCache().resumePausedMutations()},t.executeMutation=function(n){return this.mutationCache.build(this,n).execute()},t.getQueryCache=function(){return this.queryCache},t.getMutationCache=function(){return this.mutationCache},t.getDefaultOptions=function(){return this.defaultOptions},t.setDefaultOptions=function(n){this.defaultOptions=n},t.setQueryDefaults=function(n,o){var i=this.queryDefaults.find(function(c){return N3(n)===N3(c.queryKey)});i?i.defaultOptions=o:this.queryDefaults.push({queryKey:n,defaultOptions:o})},t.getQueryDefaults=function(n){var o;return n?(o=this.queryDefaults.find(function(i){return $$(n,i.queryKey)}))==null?void 0:o.defaultOptions:void 0},t.setMutationDefaults=function(n,o){var i=this.mutationDefaults.find(function(c){return N3(n)===N3(c.mutationKey)});i?i.defaultOptions=o:this.mutationDefaults.push({mutationKey:n,defaultOptions:o})},t.getMutationDefaults=function(n){var o;return n?(o=this.mutationDefaults.find(function(i){return $$(n,i.mutationKey)}))==null?void 0:o.defaultOptions:void 0},t.defaultQueryOptions=function(n){if(n?._defaulted)return n;var o=Qr({},this.defaultOptions.queries,this.getQueryDefaults(n?.queryKey),n,{_defaulted:!0});return!o.queryHash&&o.queryKey&&(o.queryHash=V$(o.queryKey,o)),o},t.defaultQueryObserverOptions=function(n){return this.defaultQueryOptions(n)},t.defaultMutationOptions=function(n){return n?._defaulted?n:Qr({},this.defaultOptions.mutations,this.getMutationDefaults(n?.mutationKey),n,{_defaulted:!0})},t.clear=function(){this.queryCache.clear(),this.mutationCache.clear()},e}();var Bve=function(e){hc(t,e);function t(n,o){var i;return i=e.call(this)||this,i.client=n,i.options=o,i.trackedProps=[],i.selectError=null,i.bindMethods(),i.setOptions(o),i}var r=t.prototype;return r.bindMethods=function(){this.remove=this.remove.bind(this),this.refetch=this.refetch.bind(this)},r.onSubscribe=function(){this.listeners.length===1&&(this.currentQuery.addObserver(this),CAe(this.currentQuery,this.options)&&this.executeFetch(),this.updateTimers())},r.onUnsubscribe=function(){this.listeners.length||this.destroy()},r.shouldFetchOnReconnect=function(){return Fve(this.currentQuery,this.options,this.options.refetchOnReconnect)},r.shouldFetchOnWindowFocus=function(){return Fve(this.currentQuery,this.options,this.options.refetchOnWindowFocus)},r.destroy=function(){this.listeners=[],this.clearTimers(),this.currentQuery.removeObserver(this)},r.setOptions=function(o,i){var c=this.options,p=this.currentQuery;if(this.options=this.client.defaultQueryObserverOptions(o),typeof this.options.enabled<"u"&&typeof this.options.enabled!="boolean")throw new Error("Expected enabled to be a boolean");this.options.queryKey||(this.options.queryKey=c.queryKey),this.updateQuery();var m=this.hasListeners();m&&MAe(this.currentQuery,p,this.options,c)&&this.executeFetch(),this.updateResult(i),m&&(this.currentQuery!==p||this.options.enabled!==c.enabled||this.options.staleTime!==c.staleTime)&&this.updateStaleTimeout();var v=this.computeRefetchInterval();m&&(this.currentQuery!==p||this.options.enabled!==c.enabled||v!==this.currentRefetchInterval)&&this.updateRefetchInterval(v)},r.getOptimisticResult=function(o){var i=this.client.defaultQueryObserverOptions(o),c=this.client.getQueryCache().build(this.client,i);return this.createResult(c,i)},r.getCurrentResult=function(){return this.currentResult},r.trackResult=function(o,i){var c=this,p={},m=function(b){c.trackedProps.includes(b)||c.trackedProps.push(b)};return Object.keys(o).forEach(function(v){Object.defineProperty(p,v,{configurable:!1,enumerable:!0,get:function(){return m(v),o[v]}})}),(i.useErrorBoundary||i.suspense)&&m("error"),p},r.getNextResult=function(o){var i=this;return new Promise(function(c,p){var m=i.subscribe(function(v){v.isFetching||(m(),v.isError&&o?.throwOnError?p(v.error):c(v))})})},r.getCurrentQuery=function(){return this.currentQuery},r.remove=function(){this.client.getQueryCache().remove(this.currentQuery)},r.refetch=function(o){return this.fetch(Qr({},o,{meta:{refetchPage:o?.refetchPage}}))},r.fetchOptimistic=function(o){var i=this,c=this.client.defaultQueryObserverOptions(o),p=this.client.getQueryCache().build(this.client,c);return p.fetch().then(function(){return i.createResult(p,c)})},r.fetch=function(o){var i=this;return this.executeFetch(o).then(function(){return i.updateResult(),i.currentResult})},r.executeFetch=function(o){this.updateQuery();var i=this.currentQuery.fetch(this.options,o);return o?.throwOnError||(i=i.catch(Xi)),i},r.updateStaleTimeout=function(){var o=this;if(this.clearStaleTimeout(),!(s_||this.currentResult.isStale||!H$(this.options.staleTime))){var i=wY(this.currentResult.dataUpdatedAt,this.options.staleTime),c=i+1;this.staleTimeoutId=setTimeout(function(){o.currentResult.isStale||o.updateResult()},c)}},r.computeRefetchInterval=function(){var o;return typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.currentResult.data,this.currentQuery):(o=this.options.refetchInterval)!=null?o:!1},r.updateRefetchInterval=function(o){var i=this;this.clearRefetchInterval(),this.currentRefetchInterval=o,!(s_||this.options.enabled===!1||!H$(this.currentRefetchInterval)||this.currentRefetchInterval===0)&&(this.refetchIntervalId=setInterval(function(){(i.options.refetchIntervalInBackground||L3.isFocused())&&i.executeFetch()},this.currentRefetchInterval))},r.updateTimers=function(){this.updateStaleTimeout(),this.updateRefetchInterval(this.computeRefetchInterval())},r.clearTimers=function(){this.clearStaleTimeout(),this.clearRefetchInterval()},r.clearStaleTimeout=function(){this.staleTimeoutId&&(clearTimeout(this.staleTimeoutId),this.staleTimeoutId=void 0)},r.clearRefetchInterval=function(){this.refetchIntervalId&&(clearInterval(this.refetchIntervalId),this.refetchIntervalId=void 0)},r.createResult=function(o,i){var c=this.currentQuery,p=this.options,m=this.currentResult,v=this.currentResultState,b=this.currentResultOptions,_=o!==c,I=_?o.state:this.currentQueryInitialState,R=_?this.currentResult:this.previousQueryResult,A=o.state,F=A.dataUpdatedAt,D=A.error,L=A.errorUpdatedAt,H=A.isFetching,q=A.status,Q=!1,re=!1,ee;if(i.optimisticResults){var ne=this.hasListeners(),fe=!ne&&CAe(o,i),ce=ne&&MAe(o,c,i,p);(fe||ce)&&(H=!0,F||(q="loading"))}if(i.keepPreviousData&&!A.dataUpdateCount&&R?.isSuccess&&q!=="error")ee=R.data,F=R.dataUpdatedAt,q=R.status,Q=!0;else if(i.select&&typeof A.data<"u")if(m&&A.data===v?.data&&i.select===this.selectFn)ee=this.selectResult;else try{this.selectFn=i.select,ee=i.select(A.data),i.structuralSharing!==!1&&(ee=LP(m?.data,ee)),this.selectResult=ee,this.selectError=null}catch(ge){l_().error(ge),this.selectError=ge}else ee=A.data;if(typeof i.placeholderData<"u"&&typeof ee>"u"&&(q==="loading"||q==="idle")){var ve;if(m?.isPlaceholderData&&i.placeholderData===b?.placeholderData)ve=m.data;else if(ve=typeof i.placeholderData=="function"?i.placeholderData():i.placeholderData,i.select&&typeof ve<"u")try{ve=i.select(ve),i.structuralSharing!==!1&&(ve=LP(m?.data,ve)),this.selectError=null}catch(ge){l_().error(ge),this.selectError=ge}typeof ve<"u"&&(q="success",ee=ve,re=!0)}this.selectError&&(D=this.selectError,ee=this.selectResult,L=Date.now(),q="error");var Se={status:q,isLoading:q==="loading",isSuccess:q==="success",isError:q==="error",isIdle:q==="idle",data:ee,dataUpdatedAt:F,error:D,errorUpdatedAt:L,failureCount:A.fetchFailureCount,errorUpdateCount:A.errorUpdateCount,isFetched:A.dataUpdateCount>0||A.errorUpdateCount>0,isFetchedAfterMount:A.dataUpdateCount>I.dataUpdateCount||A.errorUpdateCount>I.errorUpdateCount,isFetching:H,isRefetching:H&&q!=="loading",isLoadingError:q==="error"&&A.dataUpdatedAt===0,isPlaceholderData:re,isPreviousData:Q,isRefetchError:q==="error"&&A.dataUpdatedAt!==0,isStale:zve(o,i),refetch:this.refetch,remove:this.remove};return Se},r.shouldNotifyListeners=function(o,i){if(!i)return!0;var c=this.options,p=c.notifyOnChangeProps,m=c.notifyOnChangePropsExclusions;if(!p&&!m||p==="tracked"&&!this.trackedProps.length)return!0;var v=p==="tracked"?this.trackedProps:p;return Object.keys(o).some(function(b){var _=b,I=o[_]!==i[_],R=v?.some(function(F){return F===b}),A=m?.some(function(F){return F===b});return I&&!A&&(!v||R)})},r.updateResult=function(o){var i=this.currentResult;if(this.currentResult=this.createResult(this.currentQuery,this.options),this.currentResultState=this.currentQuery.state,this.currentResultOptions=this.options,!OAe(this.currentResult,i)){var c={cache:!0};o?.listeners!==!1&&this.shouldNotifyListeners(this.currentResult,i)&&(c.listeners=!0),this.notify(Qr({},c,o))}},r.updateQuery=function(){var o=this.client.getQueryCache().build(this.client,this.options);if(o!==this.currentQuery){var i=this.currentQuery;this.currentQuery=o,this.currentQueryInitialState=o.state,this.previousQueryResult=this.currentResult,this.hasListeners()&&(i?.removeObserver(this),o.addObserver(this))}},r.onQueryUpdate=function(o){var i={};o.type==="success"?i.onSuccess=!0:o.type==="error"&&!BP(o.error)&&(i.onError=!0),this.updateResult(i),this.hasListeners()&&this.updateTimers()},r.notify=function(o){var i=this;no.batch(function(){o.onSuccess?(i.options.onSuccess==null||i.options.onSuccess(i.currentResult.data),i.options.onSettled==null||i.options.onSettled(i.currentResult.data,null)):o.onError&&(i.options.onError==null||i.options.onError(i.currentResult.error),i.options.onSettled==null||i.options.onSettled(void 0,i.currentResult.error)),o.listeners&&i.listeners.forEach(function(c){c(i.currentResult)}),o.cache&&i.client.getQueryCache().notify({query:i.currentQuery,type:"observerResultsUpdated"})})},t}(g1);function Fsr(e,t){return t.enabled!==!1&&!e.state.dataUpdatedAt&&!(e.state.status==="error"&&t.retryOnMount===!1)}function CAe(e,t){return Fsr(e,t)||e.state.dataUpdatedAt>0&&Fve(e,t,t.refetchOnMount)}function Fve(e,t,r){if(t.enabled!==!1){var n=typeof r=="function"?r(e):r;return n==="always"||n!==!1&&zve(e,t)}return!1}function MAe(e,t,r,n){return r.enabled!==!1&&(e!==t||n.enabled===!1)&&(!r.suspense||e.state.status!=="error")&&zve(e,r)}function zve(e,t){return e.isStaleByTime(t.staleTime)}var AAe=k(Ro()),DAe=AAe.default.unstable_batchedUpdates;no.setBatchNotifyFunction(DAe);var RAe=console;Lve(RAe);var F3=k(z()),NAe=F3.default.createContext(void 0),LAe=F3.default.createContext(!1);function FAe(e){return e&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=NAe),window.ReactQueryClientContext):NAe}var Wve=function(){var t=F3.default.useContext(FAe(F3.default.useContext(LAe)));if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},Hr=function(t){var r=t.client,n=t.contextSharing,o=n===void 0?!1:n,i=t.children;F3.default.useEffect(function(){return r.mount(),function(){r.unmount()}},[r]);var c=FAe(o);return F3.default.createElement(LAe.Provider,{value:o},F3.default.createElement(c.Provider,{value:r},i))};var Hve=k(z());function Bsr(){var e=!1;return{clearReset:function(){e=!1},reset:function(){e=!0},isReset:function(){return e}}}var zsr=Hve.default.createContext(Bsr()),BAe=function(){return Hve.default.useContext(zsr)};function zAe(e,t,r){return typeof t=="function"?t.apply(void 0,r):typeof t=="boolean"?t:!!e}var zP=k(z());function WAe(e,t){var r=zP.default.useRef(!1),n=zP.default.useState(0),o=n[1],i=Wve(),c=BAe(),p=i.defaultQueryObserverOptions(e);p.optimisticResults=!0,p.onError&&(p.onError=no.batchCalls(p.onError)),p.onSuccess&&(p.onSuccess=no.batchCalls(p.onSuccess)),p.onSettled&&(p.onSettled=no.batchCalls(p.onSettled)),p.suspense&&(typeof p.staleTime!="number"&&(p.staleTime=1e3),p.cacheTime===0&&(p.cacheTime=1)),(p.suspense||p.useErrorBoundary)&&(c.isReset()||(p.retryOnMount=!1));var m=zP.default.useState(function(){return new t(i,p)}),v=m[0],b=v.getOptimisticResult(p);if(zP.default.useEffect(function(){r.current=!0,c.clearReset();var _=v.subscribe(no.batchCalls(function(){r.current&&o(function(I){return I+1})}));return v.updateResult(),function(){r.current=!1,_()}},[c,v]),zP.default.useEffect(function(){v.setOptions(p,{listeners:!1})},[p,v]),p.suspense&&b.isLoading)throw v.fetchOptimistic(p).then(function(_){var I=_.data;p.onSuccess==null||p.onSuccess(I),p.onSettled==null||p.onSettled(I,null)}).catch(function(_){c.clearReset(),p.onError==null||p.onError(_),p.onSettled==null||p.onSettled(void 0,_)});if(b.isError&&!c.isReset()&&!b.isFetching&&zAe(p.suspense,p.useErrorBoundary,[b.error,v.getCurrentQuery()]))throw b.error;return p.notifyOnChangeProps==="tracked"&&(b=v.trackResult(b,p)),b}function tn(e,t,r){var n=NP(e,t,r);return WAe(n,Bve)}var B3=k(z());function u_(e){let t=e.className||"ts4nfdi-breadcrumb-style";return B3.default.createElement(B3.default.Fragment,null,B3.default.createElement("span",{className:t},B3.default.createElement("span",{onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(e.ontologyId||"",void 0,void 0)},role:"button",tabIndex:0,onKeyDown:r=>{r.key==="Enter"&&r.currentTarget.click()}},B3.default.createElement(kl,{className:e.ontologyId?"breadcrumb clickable-breadcrumb":"breadcrumb",color:e.colorFirst||"primary"},e.ontologyName?e.ontologyName.toUpperCase():"No ontology name available")),"\xA0",B3.default.createElement(pr,{type:"arrowRight"}),"\xA0",B3.default.createElement(kl,{className:"breadcrumb",color:e.colorSecond||"success"},e.shortForm?e.shortForm.toUpperCase():"No short form available")))}function VAe(e){let{api:t,parameter:r,hasShortSelectedLabel:n,allowCustomTerms:o,selectionChangedEvent:i,preselected:c,placeholder:p,singleSelection:m,singleSuggestionRow:v,ts4nfdiGateway:b=!1,showApiSource:_=!0,className:I,useLegacy:R,...A}=e,F=new Kr(t),D=Zg(),L=$U(),[H,q]=(0,li.useState)(""),[Q,re]=(0,li.useState)([]),[ee,ne]=(0,li.useState)([]),fe=I||"ts4nfdi-autocomplete-style",ce=(Pe,Te)=>{let{label:Ce,value:Qe}=Pe,xt=L.indexOf(Qe.type==="class"?L[5]:Qe.type==="individual"?L[3]:Qe.type==="property"?L[1]:""),Je=D[xt];if(o&&Qe.iri=="")return Ce;let at=Qe.type==="ontology"?"Prefix: "+Qe.ontology_name:"Prefix > Short form: "+Qe.ontology_name+" > "+Qe.short_form,It=`Type: ${Qe.type} Label: ${Qe.label} diff --git a/src/app/types.ts b/src/app/types.ts index 1ad79f93..0ade0600 100644 --- a/src/app/types.ts +++ b/src/app/types.ts @@ -10,29 +10,6 @@ import Reified from "../model/Reified"; import { EuiButtonColor } from "@elastic/eui/src/components/button/button"; type ParameterObj = { - /** - * Additional parameters to pass to the API. - * - * This parameters can be used to filter the search results. Each parameter can be combined via - * the special character &. The values of a parameter key can be combined with a comma sign - * ,. The following keys could be used:

- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
ParameterDescription
ontologyRestrict a search to a set of ontologies e.g. ontology=uberon,mesh
typeRestrict a search to an entity type, one of {class,property,individual,ontology}
slimRestrict a search to a particular set of slims by name
fieldListSpecify the fields to return. Defaults are {iri,label,short_form,obo_id,ontology_name,ontology_prefix,description,type}
obsoletesSet to true to include obsolete terms in the results
localSet to true to only return terms that are in a defining ontology, e.g. only return matches to gene ontology terms in the gene ontology, and exclude ontologies where those terms are also referenced
childrenOfYou can restrict a search to all children of a given term. Supply a list of IRI for the terms that you want to search under (subclassOf/is-a relation only)
allChildrenOfYou can restrict a search to all children of a given term. Supply a list of IRI for the terms that you want to search under (subclassOf/is-a plus any hierarchical/transitive properties like 'part of' or 'develops from')
rowsSet results per page
startSet the results page number
langSet the language for the response e.g. en, de, fr. The default value is en.
collectionRestrict a search to a terminology subset e.g. collection=nfdi4health
databaseRestrict a search via the API Gateway to specific terminology software stacks, choose from ols, ontoportal, or skosmos
- */ parameter?: string; }; diff --git a/src/components/widgets/AutocompleteWidget/AutocompleteWidget.stories.tsx b/src/components/widgets/AutocompleteWidget/AutocompleteWidget.stories.tsx index 74a747e6..e84d0865 100644 --- a/src/components/widgets/AutocompleteWidget/AutocompleteWidget.stories.tsx +++ b/src/components/widgets/AutocompleteWidget/AutocompleteWidget.stories.tsx @@ -40,4 +40,6 @@ export { WithPreselectedValueAndUnresolvedIriOLS3, WithPreselectedValueOLS4v2, WithPreselectedMultipleValuesOLS4, + SubtreeDirectSubtypes, + SubtreeDirectAndIndirectSubtypes, } from "./AutocompleteWidgetStories"; diff --git a/src/components/widgets/AutocompleteWidget/AutocompleteWidgetHTML.stories.ts b/src/components/widgets/AutocompleteWidget/AutocompleteWidgetHTML.stories.ts index 747a7262..ecbffb6e 100644 --- a/src/components/widgets/AutocompleteWidget/AutocompleteWidgetHTML.stories.ts +++ b/src/components/widgets/AutocompleteWidget/AutocompleteWidgetHTML.stories.ts @@ -82,4 +82,6 @@ export { WithPreselectedValueAndUnresolvedIriOLS3, WithPreselectedValueOLS4v2, WithPreselectedMultipleValuesOLS4, + SubtreeDirectSubtypes, + SubtreeDirectAndIndirectSubtypes, } from "./AutocompleteWidgetStories"; diff --git a/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts b/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts index 886cf53a..a03852c6 100644 --- a/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts +++ b/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts @@ -239,3 +239,23 @@ export const TibDataPlant = { parameter: "classification=DataPLANT&schema=collection", }, }; + +export const SubtreeDirectSubtypes = { + args: { + api: globals.ZBMED_OLS4_API, + allowCustomTerms: true, + useLegacy: true, + parameter: + "ontology=snomed&type=class&collection=nfdi4health&fieldList=description,label,iri,ontology_name,type,short_form&childrenOf=http://snomed.info/id/22298006", + }, +} + +export const SubtreeDirectAndIndirectSubtypes = { + args: { + api: globals.ZBMED_OLS4_API, + allowCustomTerms: true, + useLegacy: true, + parameter: + "ontology=snomed&type=class&collection=nfdi4health&fieldList=description,label,iri,ontology_name,type,short_form&AllChildrenOf=http://snomed.info/id/22298006", + }, +} \ No newline at end of file diff --git a/src/stories/storyArgs.ts b/src/stories/storyArgs.ts index 124bbae6..8a0bb3c9 100644 --- a/src/stories/storyArgs.ts +++ b/src/stories/storyArgs.ts @@ -116,70 +116,28 @@ export const parameterArgType = { required: false, type: { summary: "string" }, defaultValue: { summary: undefined }, - markdownDescription: `Additional parameters to pass to the API.

- This parameters can be used to filter the search results. Each parameter can be combined with the special character &. The values of a parameter key can be combined with a comma sign (,). The following keys can be used:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterDescription
ontologyRestrict a search to a set of ontologies e.g. ontology=uberon,mesh
typeRestrict a search to an entity type, one of {class,property,individual,ontology}
slimRestrict a search to a particular set of slims by name
fieldListSpecify the fields to return. Defaults are iri,label,short_form,obo_id,ontology_name,ontology_prefix,description,type
obsoletesSet to true to include obsolete terms in the results
localSet to true to only return terms that are in a defining ontology, e.g. only return matches to gene ontology terms in the gene ontology, and exclude ontologies where those terms are also referenced
childrenOfYou can restrict a search to all children of a given term. Supply a list of IRI for the terms that you want to search under (subclassOf/is-a relation only)
allChildrenOfYou can restrict a search to all children of a given term. Supply a list of IRI for the terms that you want to search under (subclassOf/is-a plus any hierarchical/transitive properties like 'part of' or 'develops from')
rowsSet results per page
startSet the results page number
langSet the language for the response e.g. en, de, fr. The default value is en
collectionRestrict a search to a terminology subset e.g. collection=nfdi4health
databaseRestrict a search via the API Gateway to specific terminology software stacks, choose from ols, ontoportal, or skosmos
`, + description: ` + +Additional parameters to pass to the API. + +These parameters can be used to filter the search results. Each parameter can be combined with the special character **&**. The values of a parameter key can be combined with a comma (**,**). The following keys can be used: + +| Parameter | Description | +|---------------|------------| +| **ontology** | Restrict a search to a set of ontologies, e.g., \`ontology=uberon,mesh\`. | +| **type** | Restrict a search to an entity type, one of \`{class, property, individual, ontology}\`. | +| **slim** | Restrict a search to a particular set of slims by name. | +| **fieldList** | Specify the fields to return. Defaults are **iri, label, short_form, obo_id, ontology_name, ontology_prefix, description, type**. | +| **obsoletes** | Set to \`true\` to include obsolete terms in the results. | +| **local** | Set to \`true\` to only return terms that are in a defining ontology, e.g., only return matches to gene ontology terms in the gene ontology, and exclude ontologies where those terms are also referenced. | +| **childrenOf** | Restrict a search to all children of a given term. Supply a list of IRI for the terms that you want to search under (subclassOf/is-a relation only). Example: \`childrenOf\` the Snomed CT term *Myocardial infarction (disorder)* (→ heart attack) results in returning direct subclasses such as *ST elevation myocardial infarction (STEMI)* or sub-subclasses such as *STEMI of anterior wall*. The search term *Coronary artery occlusion* will return, among other things, *Acute myocardial infarction due to left coronary artery occlusion* because it's a child of *Acute myocardial infarction*, which is a child of *Myocardial infarction*. | +| **allChildrenOf** | Similar to \`childrenOf\`, but includes hierarchical/transitive properties like *"part of"* or *"develops from"*. Example: \`allChildrenOf\` the Snomed CT term *Myocardial infarction (disorder)* (→ heart attack) results in returning direct subclasses, sub-subclasses, and all other descendant terms. The search term *Coronary artery occlusion* will return, among other things, *Coronary occlusion* because it is a causative agent of *Myocardial infarction*. | +| **rows** | Set results per page. | +| **start** | Set the results page number. | +| **lang** | Set the language for the response, e.g., **\`en\`**, **\`de\`**, **\`fr\`**. The default value is **\`en\`**. | +| **collection** | Restrict a search to a terminology subset, e.g., \`collection=nfdi4health\`. | +| **database** | Restrict a search via the API Gateway to specific terminology software stacks. Choose from **\`ols\`**, **\`ontoportal\`**, or **\`skosmos\`**. | + ` }, }; export const hasShortSelectedLabelArgType = {